/ Hex Artifact Content
Login

Artifact b425bb606c14c078b1c9feb7cf72f2f3a35be188:


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 20 53 70 65 63 69  INT_H_../* Speci
01e0: 61 6c 20 43 6f 6d 6d 65 6e 74 73 3a 0a 2a 2a 0a  al Comments:.**.
01f0: 2a 2a 20 53 6f 6d 65 20 63 6f 6d 6d 65 6e 74 73  ** Some comments
0200: 20 68 61 76 65 20 73 70 65 63 69 61 6c 20 6d 65   have special me
0210: 61 6e 69 6e 67 20 74 6f 20 74 68 65 20 74 6f 6f  aning to the too
0220: 6c 73 20 74 68 61 74 20 6d 65 61 73 75 72 65 20  ls that measure 
0230: 74 65 73 74 0a 2a 2a 20 63 6f 76 65 72 61 67 65  test.** coverage
0240: 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 4e 4f 5f 54 45  :.**.**    NO_TE
0250: 53 54 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ST              
0260: 20 20 20 20 20 20 20 2d 20 54 68 65 20 62 72 61         - The bra
0270: 6e 63 68 65 73 20 6f 6e 20 74 68 69 73 20 6c 69  nches on this li
0280: 6e 65 20 61 72 65 20 6e 6f 74 0a 2a 2a 20 20 20  ne are not.**   
0290: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
02a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6d                 m
02b0: 65 61 73 75 72 65 64 20 62 79 20 62 72 61 6e 63  easured by branc
02c0: 68 20 63 6f 76 65 72 61 67 65 2e 20 20 54 68 69  h coverage.  Thi
02d0: 73 20 69 73 0a 2a 2a 20 20 20 20 20 20 20 20 20  s is.**         
02e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
02f0: 20 20 20 20 20 20 20 20 20 75 73 65 64 20 6f 6e           used on
0300: 20 6c 69 6e 65 73 20 6f 66 20 63 6f 64 65 20 74   lines of code t
0310: 68 61 74 20 61 63 74 75 61 6c 6c 79 0a 2a 2a 20  hat actually.** 
0320: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0330: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0340: 20 69 6d 70 6c 65 6d 65 6e 74 20 70 61 72 74 73   implement parts
0350: 20 6f 66 20 63 6f 76 65 72 61 67 65 20 74 65 73   of coverage tes
0360: 74 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 4f  ting..**.**    O
0370: 50 54 49 4d 49 5a 41 54 49 4f 4e 2d 49 46 2d 54  PTIMIZATION-IF-T
0380: 52 55 45 20 20 20 20 20 20 20 20 2d 20 54 68 69  RUE        - Thi
0390: 73 20 62 72 61 6e 63 68 20 69 73 20 61 6c 6c 6f  s branch is allo
03a0: 77 65 64 20 74 6f 20 61 6c 77 61 79 20 62 65 20  wed to alway be 
03b0: 66 61 6c 73 65 0a 2a 2a 20 20 20 20 20 20 20 20  false.**        
03c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
03d0: 20 20 20 20 20 20 20 20 20 20 61 6e 64 20 74 68            and th
03e0: 65 20 63 6f 72 72 65 63 74 20 61 6e 73 77 65 72  e correct answer
03f0: 20 69 73 20 73 74 69 6c 6c 20 6f 62 74 61 69 6e   is still obtain
0400: 65 64 2c 0a 2a 2a 20 20 20 20 20 20 20 20 20 20  ed,.**          
0410: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0420: 20 20 20 20 20 20 20 20 74 68 6f 75 67 68 20 70          though p
0430: 65 72 68 61 70 73 20 6d 6f 72 65 20 73 6c 6f 77  erhaps more slow
0440: 6c 79 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 4f 50 54  ly..**.**    OPT
0450: 49 4d 49 5a 41 54 49 4f 4e 2d 49 46 2d 46 41 4c  IMIZATION-IF-FAL
0460: 53 45 20 20 20 20 20 20 20 2d 20 54 68 69 73 20  SE       - This 
0470: 62 72 61 6e 63 68 20 69 73 20 61 6c 6c 6f 77 65  branch is allowe
0480: 64 20 74 6f 20 61 6c 77 61 79 20 62 65 20 74 72  d to alway be tr
0490: 75 65 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  ue.**           
04a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
04b0: 20 20 20 20 20 20 20 61 6e 64 20 74 68 65 20 63         and the c
04c0: 6f 72 72 65 63 74 20 61 6e 73 77 65 72 20 69 73  orrect answer is
04d0: 20 73 74 69 6c 6c 20 6f 62 74 61 69 6e 65 64 2c   still obtained,
04e0: 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
04f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0500: 20 20 20 20 20 74 68 6f 75 67 68 20 70 65 72 68       though perh
0510: 61 70 73 20 6d 6f 72 65 20 73 6c 6f 77 6c 79 2e  aps more slowly.
0520: 0a 2a 2a 0a 2a 2a 20 20 20 20 50 52 45 56 45 4e  .**.**    PREVEN
0530: 54 53 2d 48 41 52 4d 4c 45 53 53 2d 4f 56 45 52  TS-HARMLESS-OVER
0540: 52 45 41 44 20 20 2d 20 54 68 69 73 20 62 72 61  READ  - This bra
0550: 6e 63 68 20 70 72 65 76 65 6e 74 73 20 61 20 62  nch prevents a b
0560: 75 66 66 65 72 20 6f 76 65 72 72 65 61 64 0a 2a  uffer overread.*
0570: 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
0580: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0590: 20 20 20 74 68 61 74 20 77 6f 75 6c 64 20 62 65     that would be
05a0: 20 68 61 72 6d 6c 65 73 73 20 61 6e 64 20 75 6e   harmless and un
05b0: 64 65 74 65 63 74 61 62 6c 65 0a 2a 2a 20 20 20  detectable.**   
05c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
05d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
05e0: 66 20 69 74 20 64 69 64 20 6f 63 63 75 72 2e 20  f it did occur. 
05f0: 20 0a 2a 2a 0a 2a 2a 20 49 6e 20 61 6c 6c 20 63   .**.** In all c
0600: 61 73 65 73 2c 20 74 68 65 20 73 70 65 63 69 61  ases, the specia
0610: 6c 20 63 6f 6d 6d 65 6e 74 20 6d 75 73 74 20 62  l comment must b
0620: 65 20 65 6e 63 6c 6f 73 65 64 20 69 6e 20 74 68  e enclosed in th
0630: 65 20 75 73 75 61 6c 0a 2a 2a 20 73 6c 61 73 68  e usual.** slash
0640: 2d 61 73 74 65 72 69 73 6b 2e 2e 2e 61 73 74 65  -asterisk...aste
0650: 72 69 73 6b 2d 73 6c 61 73 68 20 63 6f 6d 6d 65  risk-slash comme
0660: 6e 74 20 6d 61 72 6b 73 2c 20 77 69 74 68 20 6e  nt marks, with n
0670: 6f 20 73 70 61 63 65 73 20 62 65 74 77 65 65 6e  o spaces between
0680: 20 74 68 65 20 0a 2a 2a 20 61 73 74 65 72 69 73   the .** asteris
0690: 6b 73 20 61 6e 64 20 74 68 65 20 63 6f 6d 6d 65  ks and the comme
06a0: 6e 74 20 74 65 78 74 2e 0a 2a 2f 0a 0a 2f 2a 0a  nt text..*/../*.
06b0: 2a 2a 20 4d 61 6b 65 20 73 75 72 65 20 74 68 61  ** Make sure tha
06c0: 74 20 72 61 6e 64 5f 73 28 29 20 69 73 20 61 76  t rand_s() is av
06d0: 61 69 6c 61 62 6c 65 20 6f 6e 20 57 69 6e 64 6f  ailable on Windo
06e0: 77 73 20 73 79 73 74 65 6d 73 20 77 69 74 68 20  ws systems with 
06f0: 4d 53 56 43 20 32 30 30 35 0a 2a 2a 20 6f 72 20  MSVC 2005.** or 
0700: 68 69 67 68 65 72 2e 0a 2a 2f 0a 23 69 66 20 64  higher..*/.#if d
0710: 65 66 69 6e 65 64 28 5f 4d 53 43 5f 56 45 52 29  efined(_MSC_VER)
0720: 20 26 26 20 5f 4d 53 43 5f 56 45 52 3e 3d 31 34   && _MSC_VER>=14
0730: 30 30 0a 23 20 20 64 65 66 69 6e 65 20 5f 43 52  00.#  define _CR
0740: 54 5f 52 41 4e 44 5f 53 0a 23 65 6e 64 69 66 0a  T_RAND_S.#endif.
0750: 0a 2f 2a 0a 2a 2a 20 49 6e 63 6c 75 64 65 20 74  ./*.** Include t
0760: 68 65 20 68 65 61 64 65 72 20 66 69 6c 65 20 75  he header file u
0770: 73 65 64 20 74 6f 20 63 75 73 74 6f 6d 69 7a 65  sed to customize
0780: 20 74 68 65 20 63 6f 6d 70 69 6c 65 72 20 6f 70   the compiler op
0790: 74 69 6f 6e 73 20 66 6f 72 20 4d 53 56 43 2e 0a  tions for MSVC..
07a0: 2a 2a 20 54 68 69 73 20 73 68 6f 75 6c 64 20 62  ** This should b
07b0: 65 20 64 6f 6e 65 20 66 69 72 73 74 20 73 6f 20  e done first so 
07c0: 74 68 61 74 20 69 74 20 63 61 6e 20 73 75 63 63  that it can succ
07d0: 65 73 73 66 75 6c 6c 79 20 70 72 65 76 65 6e 74  essfully prevent
07e0: 20 73 70 75 72 69 6f 75 73 0a 2a 2a 20 63 6f 6d   spurious.** com
07f0: 70 69 6c 65 72 20 77 61 72 6e 69 6e 67 73 20 64  piler warnings d
0800: 75 65 20 74 6f 20 73 75 62 73 65 71 75 65 6e 74  ue to subsequent
0810: 20 63 6f 6e 74 65 6e 74 20 69 6e 20 74 68 69 73   content in this
0820: 20 66 69 6c 65 20 61 6e 64 20 6f 74 68 65 72 20   file and other 
0830: 66 69 6c 65 73 0a 2a 2a 20 74 68 61 74 20 61 72  files.** that ar
0840: 65 20 69 6e 63 6c 75 64 65 64 20 62 79 20 74 68  e included by th
0850: 69 73 20 66 69 6c 65 2e 0a 2a 2f 0a 23 69 6e 63  is file..*/.#inc
0860: 6c 75 64 65 20 22 6d 73 76 63 2e 68 22 0a 0a 2f  lude "msvc.h"../
0870: 2a 0a 2a 2a 20 53 70 65 63 69 61 6c 20 73 65 74  *.** Special set
0880: 75 70 20 66 6f 72 20 56 78 57 6f 72 6b 73 0a 2a  up for VxWorks.*
0890: 2f 0a 23 69 6e 63 6c 75 64 65 20 22 76 78 77 6f  /.#include "vxwo
08a0: 72 6b 73 2e 68 22 0a 0a 2f 2a 0a 2a 2a 20 54 68  rks.h"../*.** Th
08b0: 65 73 65 20 23 64 65 66 69 6e 65 73 20 73 68 6f  ese #defines sho
08c0: 75 6c 64 20 65 6e 61 62 6c 65 20 3e 32 47 42 20  uld enable >2GB 
08d0: 66 69 6c 65 20 73 75 70 70 6f 72 74 20 6f 6e 20  file support on 
08e0: 50 4f 53 49 58 20 69 66 20 74 68 65 0a 2a 2a 20  POSIX if the.** 
08f0: 75 6e 64 65 72 6c 79 69 6e 67 20 6f 70 65 72 61  underlying opera
0900: 74 69 6e 67 20 73 79 73 74 65 6d 20 73 75 70 70  ting system supp
0910: 6f 72 74 73 20 69 74 2e 20 20 49 66 20 74 68 65  orts it.  If the
0920: 20 4f 53 20 6c 61 63 6b 73 0a 2a 2a 20 6c 61 72   OS lacks.** lar
0930: 67 65 20 66 69 6c 65 20 73 75 70 70 6f 72 74 2c  ge file support,
0940: 20 6f 72 20 69 66 20 74 68 65 20 4f 53 20 69 73   or if the OS is
0950: 20 77 69 6e 64 6f 77 73 2c 20 74 68 65 73 65 20   windows, these 
0960: 73 68 6f 75 6c 64 20 62 65 20 6e 6f 2d 6f 70 73  should be no-ops
0970: 2e 0a 2a 2a 0a 2a 2a 20 54 69 63 6b 65 74 20 23  ..**.** Ticket #
0980: 32 37 33 39 3a 20 20 54 68 65 20 5f 4c 41 52 47  2739:  The _LARG
0990: 45 46 49 4c 45 5f 53 4f 55 52 43 45 20 6d 61 63  EFILE_SOURCE mac
09a0: 72 6f 20 6d 75 73 74 20 61 70 70 65 61 72 20 62  ro must appear b
09b0: 65 66 6f 72 65 20 61 6e 79 0a 2a 2a 20 73 79 73  efore any.** sys
09c0: 74 65 6d 20 23 69 6e 63 6c 75 64 65 73 2e 20 20  tem #includes.  
09d0: 48 65 6e 63 65 2c 20 74 68 69 73 20 62 6c 6f 63  Hence, this bloc
09e0: 6b 20 6f 66 20 63 6f 64 65 20 6d 75 73 74 20 62  k of code must b
09f0: 65 20 74 68 65 20 76 65 72 79 20 66 69 72 73 74  e the very first
0a00: 0a 2a 2a 20 63 6f 64 65 20 69 6e 20 61 6c 6c 20  .** code in all 
0a10: 73 6f 75 72 63 65 20 66 69 6c 65 73 2e 0a 2a 2a  source files..**
0a20: 0a 2a 2a 20 4c 61 72 67 65 20 66 69 6c 65 20 73  .** Large file s
0a30: 75 70 70 6f 72 74 20 63 61 6e 20 62 65 20 64 69  upport can be di
0a40: 73 61 62 6c 65 64 20 75 73 69 6e 67 20 74 68 65  sabled using the
0a50: 20 2d 44 53 51 4c 49 54 45 5f 44 49 53 41 42 4c   -DSQLITE_DISABL
0a60: 45 5f 4c 46 53 20 73 77 69 74 63 68 0a 2a 2a 20  E_LFS switch.** 
0a70: 6f 6e 20 74 68 65 20 63 6f 6d 70 69 6c 65 72 20  on the compiler 
0a80: 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 2e 20 20 54  command line.  T
0a90: 68 69 73 20 69 73 20 6e 65 63 65 73 73 61 72 79  his is necessary
0aa0: 20 69 66 20 79 6f 75 20 61 72 65 20 63 6f 6d 70   if you are comp
0ab0: 69 6c 69 6e 67 0a 2a 2a 20 6f 6e 20 61 20 72 65  iling.** on a re
0ac0: 63 65 6e 74 20 6d 61 63 68 69 6e 65 20 28 65 78  cent machine (ex
0ad0: 3a 20 52 65 64 20 48 61 74 20 37 2e 32 29 20 62  : Red Hat 7.2) b
0ae0: 75 74 20 79 6f 75 20 77 61 6e 74 20 79 6f 75 72  ut you want your
0af0: 20 63 6f 64 65 20 74 6f 20 77 6f 72 6b 0a 2a 2a   code to work.**
0b00: 20 6f 6e 20 61 6e 20 6f 6c 64 65 72 20 6d 61 63   on an older mac
0b10: 68 69 6e 65 20 28 65 78 3a 20 52 65 64 20 48 61  hine (ex: Red Ha
0b20: 74 20 36 2e 30 29 2e 20 20 49 66 20 79 6f 75 20  t 6.0).  If you 
0b30: 63 6f 6d 70 69 6c 65 20 6f 6e 20 52 65 64 20 48  compile on Red H
0b40: 61 74 20 37 2e 32 0a 2a 2a 20 77 69 74 68 6f 75  at 7.2.** withou
0b50: 74 20 74 68 69 73 20 6f 70 74 69 6f 6e 2c 20 4c  t this option, L
0b60: 46 53 20 69 73 20 65 6e 61 62 6c 65 2e 20 20 42  FS is enable.  B
0b70: 75 74 20 4c 46 53 20 64 6f 65 73 20 6e 6f 74 20  ut LFS does not 
0b80: 65 78 69 73 74 20 69 6e 20 74 68 65 20 6b 65 72  exist in the ker
0b90: 6e 65 6c 0a 2a 2a 20 69 6e 20 52 65 64 20 48 61  nel.** in Red Ha
0ba0: 74 20 36 2e 30 2c 20 73 6f 20 74 68 65 20 63 6f  t 6.0, so the co
0bb0: 64 65 20 77 6f 6e 27 74 20 77 6f 72 6b 2e 20 20  de won't work.  
0bc0: 48 65 6e 63 65 2c 20 66 6f 72 20 6d 61 78 69 6d  Hence, for maxim
0bd0: 75 6d 20 62 69 6e 61 72 79 0a 2a 2a 20 70 6f 72  um binary.** por
0be0: 74 61 62 69 6c 69 74 79 20 79 6f 75 20 73 68 6f  tability you sho
0bf0: 75 6c 64 20 6f 6d 69 74 20 4c 46 53 2e 0a 2a 2a  uld omit LFS..**
0c00: 0a 2a 2a 20 54 68 65 20 70 72 65 76 69 6f 75 73  .** The previous
0c10: 20 70 61 72 61 67 72 61 70 68 20 77 61 73 20 77   paragraph was w
0c20: 72 69 74 74 65 6e 20 69 6e 20 32 30 30 35 2e 20  ritten in 2005. 
0c30: 20 28 54 68 69 73 20 70 61 72 61 67 72 61 70 68   (This paragraph
0c40: 20 69 73 20 77 72 69 74 74 65 6e 0a 2a 2a 20 6f   is written.** o
0c50: 6e 20 32 30 30 38 2d 31 31 2d 32 38 2e 29 20 54  n 2008-11-28.) T
0c60: 68 65 73 65 20 64 61 79 73 2c 20 61 6c 6c 20 4c  hese days, all L
0c70: 69 6e 75 78 20 6b 65 72 6e 65 6c 73 20 73 75 70  inux kernels sup
0c80: 70 6f 72 74 20 6c 61 72 67 65 20 66 69 6c 65 73  port large files
0c90: 2c 20 73 6f 0a 2a 2a 20 79 6f 75 20 73 68 6f 75  , so.** you shou
0ca0: 6c 64 20 70 72 6f 62 61 62 6c 79 20 6c 65 61 76  ld probably leav
0cb0: 65 20 4c 46 53 20 65 6e 61 62 6c 65 64 2e 20 20  e LFS enabled.  
0cc0: 42 75 74 20 73 6f 6d 65 20 65 6d 62 65 64 64 65  But some embedde
0cd0: 64 20 70 6c 61 74 66 6f 72 6d 73 20 6d 69 67 68  d platforms migh
0ce0: 74 0a 2a 2a 20 6c 61 63 6b 20 4c 46 53 20 69 6e  t.** lack LFS in
0cf0: 20 77 68 69 63 68 20 63 61 73 65 20 74 68 65 20   which case the 
0d00: 53 51 4c 49 54 45 5f 44 49 53 41 42 4c 45 5f 4c  SQLITE_DISABLE_L
0d10: 46 53 20 6d 61 63 72 6f 20 6d 69 67 68 74 20 73  FS macro might s
0d20: 74 69 6c 6c 20 62 65 20 75 73 65 66 75 6c 2e 0a  till be useful..
0d30: 2a 2a 0a 2a 2a 20 53 69 6d 69 6c 61 72 20 69 73  **.** Similar is
0d40: 20 74 72 75 65 20 66 6f 72 20 4d 61 63 20 4f 53   true for Mac OS
0d50: 20 58 2e 20 20 4c 46 53 20 69 73 20 6f 6e 6c 79   X.  LFS is only
0d60: 20 73 75 70 70 6f 72 74 65 64 20 6f 6e 20 4d 61   supported on Ma
0d70: 63 20 4f 53 20 58 20 39 20 61 6e 64 20 6c 61 74  c OS X 9 and lat
0d80: 65 72 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53  er..*/.#ifndef S
0d90: 51 4c 49 54 45 5f 44 49 53 41 42 4c 45 5f 4c 46  QLITE_DISABLE_LF
0da0: 53 0a 23 20 64 65 66 69 6e 65 20 5f 4c 41 52 47  S.# define _LARG
0db0: 45 5f 46 49 4c 45 20 20 20 20 20 20 20 31 0a 23  E_FILE       1.#
0dc0: 20 69 66 6e 64 65 66 20 5f 46 49 4c 45 5f 4f 46   ifndef _FILE_OF
0dd0: 46 53 45 54 5f 42 49 54 53 0a 23 20 20 20 64 65  FSET_BITS.#   de
0de0: 66 69 6e 65 20 5f 46 49 4c 45 5f 4f 46 46 53 45  fine _FILE_OFFSE
0df0: 54 5f 42 49 54 53 20 36 34 0a 23 20 65 6e 64 69  T_BITS 64.# endi
0e00: 66 0a 23 20 64 65 66 69 6e 65 20 5f 4c 41 52 47  f.# define _LARG
0e10: 45 46 49 4c 45 5f 53 4f 55 52 43 45 20 31 0a 23  EFILE_SOURCE 1.#
0e20: 65 6e 64 69 66 0a 0a 2f 2a 20 57 68 61 74 20 76  endif../* What v
0e30: 65 72 73 69 6f 6e 20 6f 66 20 47 43 43 20 69 73  ersion of GCC is
0e40: 20 62 65 69 6e 67 20 75 73 65 64 2e 20 20 30 20   being used.  0 
0e50: 6d 65 61 6e 73 20 47 43 43 20 69 73 20 6e 6f 74  means GCC is not
0e60: 20 62 65 69 6e 67 20 75 73 65 64 20 2a 2f 0a 23   being used */.#
0e70: 69 66 64 65 66 20 5f 5f 47 4e 55 43 5f 5f 0a 23  ifdef __GNUC__.#
0e80: 20 64 65 66 69 6e 65 20 47 43 43 5f 56 45 52 53   define GCC_VERS
0e90: 49 4f 4e 20 28 5f 5f 47 4e 55 43 5f 5f 2a 31 30  ION (__GNUC__*10
0ea0: 30 30 30 30 30 2b 5f 5f 47 4e 55 43 5f 4d 49 4e  00000+__GNUC_MIN
0eb0: 4f 52 5f 5f 2a 31 30 30 30 2b 5f 5f 47 4e 55 43  OR__*1000+__GNUC
0ec0: 5f 50 41 54 43 48 4c 45 56 45 4c 5f 5f 29 0a 23  _PATCHLEVEL__).#
0ed0: 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 47 43  else.# define GC
0ee0: 43 5f 56 45 52 53 49 4f 4e 20 30 0a 23 65 6e 64  C_VERSION 0.#end
0ef0: 69 66 0a 0a 2f 2a 20 4e 65 65 64 65 64 20 66 6f  if../* Needed fo
0f00: 72 20 76 61 72 69 6f 75 73 20 64 65 66 69 6e 69  r various defini
0f10: 74 69 6f 6e 73 2e 2e 2e 20 2a 2f 0a 23 69 66 20  tions... */.#if 
0f20: 64 65 66 69 6e 65 64 28 5f 5f 47 4e 55 43 5f 5f  defined(__GNUC__
0f30: 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 5f 47  ) && !defined(_G
0f40: 4e 55 5f 53 4f 55 52 43 45 29 0a 23 20 64 65 66  NU_SOURCE).# def
0f50: 69 6e 65 20 5f 47 4e 55 5f 53 4f 55 52 43 45 0a  ine _GNU_SOURCE.
0f60: 23 65 6e 64 69 66 0a 0a 23 69 66 20 64 65 66 69  #endif..#if defi
0f70: 6e 65 64 28 5f 5f 4f 70 65 6e 42 53 44 5f 5f 29  ned(__OpenBSD__)
0f80: 20 26 26 20 21 64 65 66 69 6e 65 64 28 5f 42 53   && !defined(_BS
0f90: 44 5f 53 4f 55 52 43 45 29 0a 23 20 64 65 66 69  D_SOURCE).# defi
0fa0: 6e 65 20 5f 42 53 44 5f 53 4f 55 52 43 45 0a 23  ne _BSD_SOURCE.#
0fb0: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 46 6f 72  endif../*.** For
0fc0: 20 4d 69 6e 47 57 2c 20 63 68 65 63 6b 20 74 6f   MinGW, check to
0fd0: 20 73 65 65 20 69 66 20 77 65 20 63 61 6e 20 69   see if we can i
0fe0: 6e 63 6c 75 64 65 20 74 68 65 20 68 65 61 64 65  nclude the heade
0ff0: 72 20 66 69 6c 65 20 63 6f 6e 74 61 69 6e 69 6e  r file containin
1000: 67 20 69 74 73 0a 2a 2a 20 76 65 72 73 69 6f 6e  g its.** version
1010: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2c 20 61 6d   information, am
1020: 6f 6e 67 20 6f 74 68 65 72 20 74 68 69 6e 67 73  ong other things
1030: 2e 20 20 4e 6f 72 6d 61 6c 6c 79 2c 20 74 68 69  .  Normally, thi
1040: 73 20 69 6e 74 65 72 6e 61 6c 20 4d 69 6e 47 57  s internal MinGW
1050: 0a 2a 2a 20 68 65 61 64 65 72 20 66 69 6c 65 20  .** header file 
1060: 77 6f 75 6c 64 20 5b 6f 6e 6c 79 5d 20 62 65 20  would [only] be 
1070: 69 6e 63 6c 75 64 65 64 20 61 75 74 6f 6d 61 74  included automat
1080: 69 63 61 6c 6c 79 20 62 79 20 6f 74 68 65 72 20  ically by other 
1090: 4d 69 6e 47 57 20 68 65 61 64 65 72 0a 2a 2a 20  MinGW header.** 
10a0: 66 69 6c 65 73 3b 20 68 6f 77 65 76 65 72 2c 20  files; however, 
10b0: 74 68 65 20 63 6f 6e 74 61 69 6e 65 64 20 76 65  the contained ve
10c0: 72 73 69 6f 6e 20 69 6e 66 6f 72 6d 61 74 69 6f  rsion informatio
10d0: 6e 20 69 73 20 6e 6f 77 20 72 65 71 75 69 72 65  n is now require
10e0: 64 20 62 79 20 74 68 69 73 0a 2a 2a 20 68 65 61  d by this.** hea
10f0: 64 65 72 20 66 69 6c 65 20 74 6f 20 77 6f 72 6b  der file to work
1100: 20 61 72 6f 75 6e 64 20 62 69 6e 61 72 79 20 63   around binary c
1110: 6f 6d 70 61 74 69 62 69 6c 69 74 79 20 69 73 73  ompatibility iss
1120: 75 65 73 20 28 73 65 65 20 62 65 6c 6f 77 29 20  ues (see below) 
1130: 61 6e 64 0a 2a 2a 20 74 68 69 73 20 69 73 20 74  and.** this is t
1140: 68 65 20 6f 6e 6c 79 20 6b 6e 6f 77 6e 20 77 61  he only known wa
1150: 79 20 74 6f 20 72 65 6c 69 61 62 6c 79 20 6f 62  y to reliably ob
1160: 74 61 69 6e 20 69 74 2e 20 20 54 68 69 73 20 65  tain it.  This e
1170: 6e 74 69 72 65 20 23 69 66 20 62 6c 6f 63 6b 0a  ntire #if block.
1180: 2a 2a 20 77 6f 75 6c 64 20 62 65 20 63 6f 6d 70  ** would be comp
1190: 6c 65 74 65 6c 79 20 75 6e 6e 65 63 65 73 73 61  letely unnecessa
11a0: 72 79 20 69 66 20 74 68 65 72 65 20 77 61 73 20  ry if there was 
11b0: 61 6e 79 20 6f 74 68 65 72 20 77 61 79 20 6f 66  any other way of
11c0: 20 64 65 74 65 63 74 69 6e 67 0a 2a 2a 20 4d 69   detecting.** Mi
11d0: 6e 47 57 20 76 69 61 20 74 68 65 69 72 20 70 72  nGW via their pr
11e0: 65 70 72 6f 63 65 73 73 6f 72 20 28 65 2e 67 2e  eprocessor (e.g.
11f0: 20 69 66 20 74 68 65 79 20 63 75 73 74 6f 6d 69   if they customi
1200: 7a 65 64 20 74 68 65 69 72 20 47 43 43 20 74 6f  zed their GCC to
1210: 20 64 65 66 69 6e 65 0a 2a 2a 20 73 6f 6d 65 20   define.** some 
1220: 4d 69 6e 47 57 2d 73 70 65 63 69 66 69 63 20 6d  MinGW-specific m
1230: 61 63 72 6f 73 29 2e 20 20 57 68 65 6e 20 63 6f  acros).  When co
1240: 6d 70 69 6c 69 6e 67 20 66 6f 72 20 4d 69 6e 47  mpiling for MinG
1250: 57 2c 20 65 69 74 68 65 72 20 74 68 65 0a 2a 2a  W, either the.**
1260: 20 5f 48 41 56 45 5f 4d 49 4e 47 57 5f 48 20 6f   _HAVE_MINGW_H o
1270: 72 20 5f 48 41 56 45 5f 5f 4d 49 4e 47 57 5f 48  r _HAVE__MINGW_H
1280: 20 28 6e 6f 74 65 20 74 68 65 20 65 78 74 72 61   (note the extra
1290: 20 75 6e 64 65 72 73 63 6f 72 65 29 20 6d 61 63   underscore) mac
12a0: 72 6f 20 6d 75 73 74 20 62 65 0a 2a 2a 20 64 65  ro must be.** de
12b0: 66 69 6e 65 64 3b 20 6f 74 68 65 72 77 69 73 65  fined; otherwise
12c0: 2c 20 64 65 74 65 63 74 69 6f 6e 20 6f 66 20 63  , detection of c
12d0: 6f 6e 64 69 74 69 6f 6e 73 20 73 70 65 63 69 66  onditions specif
12e0: 69 63 20 74 6f 20 4d 69 6e 47 57 20 77 69 6c 6c  ic to MinGW will
12f0: 20 62 65 0a 2a 2a 20 64 69 73 61 62 6c 65 64 2e   be.** disabled.
1300: 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28  .*/.#if defined(
1310: 5f 48 41 56 45 5f 4d 49 4e 47 57 5f 48 29 0a 23  _HAVE_MINGW_H).#
1320: 20 69 6e 63 6c 75 64 65 20 22 6d 69 6e 67 77 2e   include "mingw.
1330: 68 22 0a 23 65 6c 69 66 20 64 65 66 69 6e 65 64  h".#elif defined
1340: 28 5f 48 41 56 45 5f 5f 4d 49 4e 47 57 5f 48 29  (_HAVE__MINGW_H)
1350: 0a 23 20 69 6e 63 6c 75 64 65 20 22 5f 6d 69 6e  .# include "_min
1360: 67 77 2e 68 22 0a 23 65 6e 64 69 66 0a 0a 2f 2a  gw.h".#endif../*
1370: 0a 2a 2a 20 46 6f 72 20 4d 69 6e 47 57 20 76 65  .** For MinGW ve
1380: 72 73 69 6f 6e 20 34 2e 78 20 28 61 6e 64 20 68  rsion 4.x (and h
1390: 69 67 68 65 72 29 2c 20 63 68 65 63 6b 20 74 6f  igher), check to
13a0: 20 73 65 65 20 69 66 20 74 68 65 20 5f 55 53 45   see if the _USE
13b0: 5f 33 32 42 49 54 5f 54 49 4d 45 5f 54 0a 2a 2a  _32BIT_TIME_T.**
13c0: 20 64 65 66 69 6e 65 20 69 73 20 72 65 71 75 69   define is requi
13d0: 72 65 64 20 74 6f 20 6d 61 69 6e 74 61 69 6e 20  red to maintain 
13e0: 62 69 6e 61 72 79 20 63 6f 6d 70 61 74 69 62 69  binary compatibi
13f0: 6c 69 74 79 20 77 69 74 68 20 74 68 65 20 4d 53  lity with the MS
1400: 56 43 20 72 75 6e 74 69 6d 65 0a 2a 2a 20 6c 69  VC runtime.** li
1410: 62 72 61 72 79 20 69 6e 20 75 73 65 20 28 65 2e  brary in use (e.
1420: 67 2e 20 66 6f 72 20 57 69 6e 64 6f 77 73 20 58  g. for Windows X
1430: 50 29 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69  P)..*/.#if !defi
1440: 6e 65 64 28 5f 55 53 45 5f 33 32 42 49 54 5f 54  ned(_USE_32BIT_T
1450: 49 4d 45 5f 54 29 20 26 26 20 21 64 65 66 69 6e  IME_T) && !defin
1460: 65 64 28 5f 55 53 45 5f 36 34 42 49 54 5f 54 49  ed(_USE_64BIT_TI
1470: 4d 45 5f 54 29 20 26 26 20 5c 0a 20 20 20 20 64  ME_T) && \.    d
1480: 65 66 69 6e 65 64 28 5f 57 49 4e 33 32 29 20 26  efined(_WIN32) &
1490: 26 20 21 64 65 66 69 6e 65 64 28 5f 57 49 4e 36  & !defined(_WIN6
14a0: 34 29 20 26 26 20 5c 0a 20 20 20 20 64 65 66 69  4) && \.    defi
14b0: 6e 65 64 28 5f 5f 4d 49 4e 47 57 5f 4d 41 4a 4f  ned(__MINGW_MAJO
14c0: 52 5f 56 45 52 53 49 4f 4e 29 20 26 26 20 5f 5f  R_VERSION) && __
14d0: 4d 49 4e 47 57 5f 4d 41 4a 4f 52 5f 56 45 52 53  MINGW_MAJOR_VERS
14e0: 49 4f 4e 20 3e 3d 20 34 20 26 26 20 5c 0a 20 20  ION >= 4 && \.  
14f0: 20 20 64 65 66 69 6e 65 64 28 5f 5f 4d 53 56 43    defined(__MSVC
1500: 52 54 5f 5f 29 0a 23 20 64 65 66 69 6e 65 20 5f  RT__).# define _
1510: 55 53 45 5f 33 32 42 49 54 5f 54 49 4d 45 5f 54  USE_32BIT_TIME_T
1520: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 54 68 65 20  .#endif../* The 
1530: 70 75 62 6c 69 63 20 53 51 4c 69 74 65 20 69 6e  public SQLite in
1540: 74 65 72 66 61 63 65 2e 20 20 54 68 65 20 5f 46  terface.  The _F
1550: 49 4c 45 5f 4f 46 46 53 45 54 5f 42 49 54 53 20  ILE_OFFSET_BITS 
1560: 6d 61 63 72 6f 20 6d 75 73 74 20 61 70 70 65 61  macro must appea
1570: 72 0a 2a 2a 20 66 69 72 73 74 20 69 6e 20 51 4e  r.** first in QN
1580: 58 2e 20 20 41 6c 73 6f 2c 20 74 68 65 20 5f 55  X.  Also, the _U
1590: 53 45 5f 33 32 42 49 54 5f 54 49 4d 45 5f 54 20  SE_32BIT_TIME_T 
15a0: 6d 61 63 72 6f 20 6d 75 73 74 20 61 70 70 65 61  macro must appea
15b0: 72 20 66 69 72 73 74 20 66 6f 72 0a 2a 2a 20 4d  r first for.** M
15c0: 69 6e 47 57 2e 0a 2a 2f 0a 23 69 6e 63 6c 75 64  inGW..*/.#includ
15d0: 65 20 22 73 71 6c 69 74 65 33 2e 68 22 0a 0a 2f  e "sqlite3.h"../
15e0: 2a 0a 2a 2a 20 49 6e 63 6c 75 64 65 20 74 68 65  *.** Include the
15f0: 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 68   configuration h
1600: 65 61 64 65 72 20 6f 75 74 70 75 74 20 62 79 20  eader output by 
1610: 27 63 6f 6e 66 69 67 75 72 65 27 20 69 66 20 77  'configure' if w
1620: 65 27 72 65 20 75 73 69 6e 67 20 74 68 65 0a 2a  e're using the.*
1630: 2a 20 61 75 74 6f 63 6f 6e 66 2d 62 61 73 65 64  * autoconf-based
1640: 20 62 75 69 6c 64 0a 2a 2f 0a 23 69 66 64 65 66   build.*/.#ifdef
1650: 20 5f 48 41 56 45 5f 53 51 4c 49 54 45 5f 43 4f   _HAVE_SQLITE_CO
1660: 4e 46 49 47 5f 48 0a 23 69 6e 63 6c 75 64 65 20  NFIG_H.#include 
1670: 22 63 6f 6e 66 69 67 2e 68 22 0a 23 65 6e 64 69  "config.h".#endi
1680: 66 0a 0a 23 69 6e 63 6c 75 64 65 20 22 73 71 6c  f..#include "sql
1690: 69 74 65 4c 69 6d 69 74 2e 68 22 0a 0a 2f 2a 20  iteLimit.h"../* 
16a0: 44 69 73 61 62 6c 65 20 6e 75 69 73 61 6e 63 65  Disable nuisance
16b0: 20 77 61 72 6e 69 6e 67 73 20 6f 6e 20 42 6f 72   warnings on Bor
16c0: 6c 61 6e 64 20 63 6f 6d 70 69 6c 65 72 73 20 2a  land compilers *
16d0: 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28 5f 5f  /.#if defined(__
16e0: 42 4f 52 4c 41 4e 44 43 5f 5f 29 0a 23 70 72 61  BORLANDC__).#pra
16f0: 67 6d 61 20 77 61 72 6e 20 2d 72 63 68 20 2f 2a  gma warn -rch /*
1700: 20 75 6e 72 65 61 63 68 61 62 6c 65 20 63 6f 64   unreachable cod
1710: 65 20 2a 2f 0a 23 70 72 61 67 6d 61 20 77 61 72  e */.#pragma war
1720: 6e 20 2d 63 63 63 20 2f 2a 20 43 6f 6e 64 69 74  n -ccc /* Condit
1730: 69 6f 6e 20 69 73 20 61 6c 77 61 79 73 20 74 72  ion is always tr
1740: 75 65 20 6f 72 20 66 61 6c 73 65 20 2a 2f 0a 23  ue or false */.#
1750: 70 72 61 67 6d 61 20 77 61 72 6e 20 2d 61 75 73  pragma warn -aus
1760: 20 2f 2a 20 41 73 73 69 67 6e 65 64 20 76 61 6c   /* Assigned val
1770: 75 65 20 69 73 20 6e 65 76 65 72 20 75 73 65 64  ue is never used
1780: 20 2a 2f 0a 23 70 72 61 67 6d 61 20 77 61 72 6e   */.#pragma warn
1790: 20 2d 63 73 75 20 2f 2a 20 43 6f 6d 70 61 72 69   -csu /* Compari
17a0: 6e 67 20 73 69 67 6e 65 64 20 61 6e 64 20 75 6e  ng signed and un
17b0: 73 69 67 6e 65 64 20 2a 2f 0a 23 70 72 61 67 6d  signed */.#pragm
17c0: 61 20 77 61 72 6e 20 2d 73 70 61 20 2f 2a 20 53  a warn -spa /* S
17d0: 75 73 70 69 63 69 6f 75 73 20 70 6f 69 6e 74 65  uspicious pointe
17e0: 72 20 61 72 69 74 68 6d 65 74 69 63 20 2a 2f 0a  r arithmetic */.
17f0: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 6e  #endif../*.** In
1800: 63 6c 75 64 65 20 73 74 61 6e 64 61 72 64 20 68  clude standard h
1810: 65 61 64 65 72 20 66 69 6c 65 73 20 61 73 20 6e  eader files as n
1820: 65 63 65 73 73 61 72 79 0a 2a 2f 0a 23 69 66 64  ecessary.*/.#ifd
1830: 65 66 20 48 41 56 45 5f 53 54 44 49 4e 54 5f 48  ef HAVE_STDINT_H
1840: 0a 23 69 6e 63 6c 75 64 65 20 3c 73 74 64 69 6e  .#include <stdin
1850: 74 2e 68 3e 0a 23 65 6e 64 69 66 0a 23 69 66 64  t.h>.#endif.#ifd
1860: 65 66 20 48 41 56 45 5f 49 4e 54 54 59 50 45 53  ef HAVE_INTTYPES
1870: 5f 48 0a 23 69 6e 63 6c 75 64 65 20 3c 69 6e 74  _H.#include <int
1880: 74 79 70 65 73 2e 68 3e 0a 23 65 6e 64 69 66 0a  types.h>.#endif.
1890: 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f  ./*.** The follo
18a0: 77 69 6e 67 20 6d 61 63 72 6f 73 20 61 72 65 20  wing macros are 
18b0: 75 73 65 64 20 74 6f 20 63 61 73 74 20 70 6f 69  used to cast poi
18c0: 6e 74 65 72 73 20 74 6f 20 69 6e 74 65 67 65 72  nters to integer
18d0: 73 20 61 6e 64 0a 2a 2a 20 69 6e 74 65 67 65 72  s and.** integer
18e0: 73 20 74 6f 20 70 6f 69 6e 74 65 72 73 2e 20 20  s to pointers.  
18f0: 54 68 65 20 77 61 79 20 79 6f 75 20 64 6f 20 74  The way you do t
1900: 68 69 73 20 76 61 72 69 65 73 20 66 72 6f 6d 20  his varies from 
1910: 6f 6e 65 20 63 6f 6d 70 69 6c 65 72 0a 2a 2a 20  one compiler.** 
1920: 74 6f 20 74 68 65 20 6e 65 78 74 2c 20 73 6f 20  to the next, so 
1930: 77 65 20 68 61 76 65 20 64 65 76 65 6c 6f 70 65  we have develope
1940: 64 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  d the following 
1950: 73 65 74 20 6f 66 20 23 69 66 20 73 74 61 74 65  set of #if state
1960: 6d 65 6e 74 73 0a 2a 2a 20 74 6f 20 67 65 6e 65  ments.** to gene
1970: 72 61 74 65 20 61 70 70 72 6f 70 72 69 61 74 65  rate appropriate
1980: 20 6d 61 63 72 6f 73 20 66 6f 72 20 61 20 77 69   macros for a wi
1990: 64 65 20 72 61 6e 67 65 20 6f 66 20 63 6f 6d 70  de range of comp
19a0: 69 6c 65 72 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  ilers..**.** The
19b0: 20 63 6f 72 72 65 63 74 20 22 41 4e 53 49 22 20   correct "ANSI" 
19c0: 77 61 79 20 74 6f 20 64 6f 20 74 68 69 73 20 69  way to do this i
19d0: 73 20 74 6f 20 75 73 65 20 74 68 65 20 69 6e 74  s to use the int
19e0: 70 74 72 5f 74 20 74 79 70 65 2e 0a 2a 2a 20 55  ptr_t type..** U
19f0: 6e 66 6f 72 74 75 6e 61 74 65 6c 79 2c 20 74 68  nfortunately, th
1a00: 61 74 20 74 79 70 65 64 65 66 20 69 73 20 6e 6f  at typedef is no
1a10: 74 20 61 76 61 69 6c 61 62 6c 65 20 6f 6e 20 61  t available on a
1a20: 6c 6c 20 63 6f 6d 70 69 6c 65 72 73 2c 20 6f 72  ll compilers, or
1a30: 0a 2a 2a 20 69 66 20 69 74 20 69 73 20 61 76 61  .** if it is ava
1a40: 69 6c 61 62 6c 65 2c 20 69 74 20 72 65 71 75 69  ilable, it requi
1a50: 72 65 73 20 61 6e 20 23 69 6e 63 6c 75 64 65 20  res an #include 
1a60: 6f 66 20 73 70 65 63 69 66 69 63 20 68 65 61 64  of specific head
1a70: 65 72 73 0a 2a 2a 20 74 68 61 74 20 76 61 72 79  ers.** that vary
1a80: 20 66 72 6f 6d 20 6f 6e 65 20 6d 61 63 68 69 6e   from one machin
1a90: 65 20 74 6f 20 74 68 65 20 6e 65 78 74 2e 0a 2a  e to the next..*
1aa0: 2a 0a 2a 2a 20 54 69 63 6b 65 74 20 23 33 38 36  *.** Ticket #386
1ab0: 30 3a 20 20 54 68 65 20 6c 6c 76 6d 2d 67 63 63  0:  The llvm-gcc
1ac0: 2d 34 2e 32 20 63 6f 6d 70 69 6c 65 72 20 66 72  -4.2 compiler fr
1ad0: 6f 6d 20 41 70 70 6c 65 20 63 68 6f 6b 65 73 20  om Apple chokes 
1ae0: 6f 6e 0a 2a 2a 20 74 68 65 20 28 28 76 6f 69 64  on.** the ((void
1af0: 2a 29 26 28 28 63 68 61 72 2a 29 30 29 5b 58 5d  *)&((char*)0)[X]
1b00: 29 20 63 6f 6e 73 74 72 75 63 74 2e 20 20 42 75  ) construct.  Bu
1b10: 74 20 4d 53 56 43 20 63 68 6f 6b 65 73 20 6f 6e  t MSVC chokes on
1b20: 20 28 28 76 6f 69 64 2a 29 28 58 29 29 2e 0a 2a   ((void*)(X))..*
1b30: 2a 20 53 6f 20 77 65 20 68 61 76 65 20 74 6f 20  * So we have to 
1b40: 64 65 66 69 6e 65 20 74 68 65 20 6d 61 63 72 6f  define the macro
1b50: 73 20 69 6e 20 64 69 66 66 65 72 65 6e 74 20 77  s in different w
1b60: 61 79 73 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e  ays depending on
1b70: 20 74 68 65 0a 2a 2a 20 63 6f 6d 70 69 6c 65 72   the.** compiler
1b80: 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64  ..*/.#if defined
1b90: 28 5f 5f 50 54 52 44 49 46 46 5f 54 59 50 45 5f  (__PTRDIFF_TYPE_
1ba0: 5f 29 20 20 2f 2a 20 54 68 69 73 20 63 61 73 65  _)  /* This case
1bb0: 20 73 68 6f 75 6c 64 20 77 6f 72 6b 20 66 6f 72   should work for
1bc0: 20 47 43 43 20 2a 2f 0a 23 20 64 65 66 69 6e 65   GCC */.# define
1bd0: 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50   SQLITE_INT_TO_P
1be0: 54 52 28 58 29 20 20 28 28 76 6f 69 64 2a 29 28  TR(X)  ((void*)(
1bf0: 5f 5f 50 54 52 44 49 46 46 5f 54 59 50 45 5f 5f  __PTRDIFF_TYPE__
1c00: 29 28 58 29 29 0a 23 20 64 65 66 69 6e 65 20 53  )(X)).# define S
1c10: 51 4c 49 54 45 5f 50 54 52 5f 54 4f 5f 49 4e 54  QLITE_PTR_TO_INT
1c20: 28 58 29 20 20 28 28 69 6e 74 29 28 5f 5f 50 54  (X)  ((int)(__PT
1c30: 52 44 49 46 46 5f 54 59 50 45 5f 5f 29 28 58 29  RDIFF_TYPE__)(X)
1c40: 29 0a 23 65 6c 69 66 20 21 64 65 66 69 6e 65 64  ).#elif !defined
1c50: 28 5f 5f 47 4e 55 43 5f 5f 29 20 20 20 20 20 20  (__GNUC__)      
1c60: 20 2f 2a 20 57 6f 72 6b 73 20 66 6f 72 20 63 6f   /* Works for co
1c70: 6d 70 69 6c 65 72 73 20 6f 74 68 65 72 20 74 68  mpilers other th
1c80: 61 6e 20 4c 4c 56 4d 20 2a 2f 0a 23 20 64 65 66  an LLVM */.# def
1c90: 69 6e 65 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54  ine SQLITE_INT_T
1ca0: 4f 5f 50 54 52 28 58 29 20 20 28 28 76 6f 69 64  O_PTR(X)  ((void
1cb0: 2a 29 26 28 28 63 68 61 72 2a 29 30 29 5b 58 5d  *)&((char*)0)[X]
1cc0: 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  ).# define SQLIT
1cd0: 45 5f 50 54 52 5f 54 4f 5f 49 4e 54 28 58 29 20  E_PTR_TO_INT(X) 
1ce0: 20 28 28 69 6e 74 29 28 28 28 63 68 61 72 2a 29   ((int)(((char*)
1cf0: 58 29 2d 28 63 68 61 72 2a 29 30 29 29 0a 23 65  X)-(char*)0)).#e
1d00: 6c 69 66 20 64 65 66 69 6e 65 64 28 48 41 56 45  lif defined(HAVE
1d10: 5f 53 54 44 49 4e 54 5f 48 29 20 20 20 2f 2a 20  _STDINT_H)   /* 
1d20: 55 73 65 20 74 68 69 73 20 63 61 73 65 20 69 66  Use this case if
1d30: 20 77 65 20 68 61 76 65 20 41 4e 53 49 20 68 65   we have ANSI he
1d40: 61 64 65 72 73 20 2a 2f 0a 23 20 64 65 66 69 6e  aders */.# defin
1d50: 65 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f  e SQLITE_INT_TO_
1d60: 50 54 52 28 58 29 20 20 28 28 76 6f 69 64 2a 29  PTR(X)  ((void*)
1d70: 28 69 6e 74 70 74 72 5f 74 29 28 58 29 29 0a 23  (intptr_t)(X)).#
1d80: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50   define SQLITE_P
1d90: 54 52 5f 54 4f 5f 49 4e 54 28 58 29 20 20 28 28  TR_TO_INT(X)  ((
1da0: 69 6e 74 29 28 69 6e 74 70 74 72 5f 74 29 28 58  int)(intptr_t)(X
1db0: 29 29 0a 23 65 6c 73 65 20 20 20 20 20 20 20 20  )).#else        
1dc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dd0: 20 20 2f 2a 20 47 65 6e 65 72 61 74 65 73 20 61    /* Generates a
1de0: 20 77 61 72 6e 69 6e 67 20 2d 20 62 75 74 20 69   warning - but i
1df0: 74 20 61 6c 77 61 79 73 20 77 6f 72 6b 73 20 2a  t always works *
1e00: 2f 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  /.# define SQLIT
1e10: 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 58 29 20  E_INT_TO_PTR(X) 
1e20: 20 28 28 76 6f 69 64 2a 29 28 58 29 29 0a 23 20   ((void*)(X)).# 
1e30: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 54  define SQLITE_PT
1e40: 52 5f 54 4f 5f 49 4e 54 28 58 29 20 20 28 28 69  R_TO_INT(X)  ((i
1e50: 6e 74 29 28 58 29 29 0a 23 65 6e 64 69 66 0a 0a  nt)(X)).#endif..
1e60: 2f 2a 0a 2a 2a 20 41 20 6d 61 63 72 6f 20 74 6f  /*.** A macro to
1e70: 20 68 69 6e 74 20 74 6f 20 74 68 65 20 63 6f 6d   hint to the com
1e80: 70 69 6c 65 72 20 74 68 61 74 20 61 20 66 75 6e  piler that a fun
1e90: 63 74 69 6f 6e 20 73 68 6f 75 6c 64 20 6e 6f 74  ction should not
1ea0: 20 62 65 0a 2a 2a 20 69 6e 6c 69 6e 65 64 2e 0a   be.** inlined..
1eb0: 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28 5f  */.#if defined(_
1ec0: 5f 47 4e 55 43 5f 5f 29 0a 23 20 20 64 65 66 69  _GNUC__).#  defi
1ed0: 6e 65 20 53 51 4c 49 54 45 5f 4e 4f 49 4e 4c 49  ne SQLITE_NOINLI
1ee0: 4e 45 20 20 5f 5f 61 74 74 72 69 62 75 74 65 5f  NE  __attribute_
1ef0: 5f 28 28 6e 6f 69 6e 6c 69 6e 65 29 29 0a 23 65  _((noinline)).#e
1f00: 6c 69 66 20 64 65 66 69 6e 65 64 28 5f 4d 53 43  lif defined(_MSC
1f10: 5f 56 45 52 29 20 26 26 20 5f 4d 53 43 5f 56 45  _VER) && _MSC_VE
1f20: 52 3e 3d 31 33 31 30 0a 23 20 20 64 65 66 69 6e  R>=1310.#  defin
1f30: 65 20 53 51 4c 49 54 45 5f 4e 4f 49 4e 4c 49 4e  e SQLITE_NOINLIN
1f40: 45 20 20 5f 5f 64 65 63 6c 73 70 65 63 28 6e 6f  E  __declspec(no
1f50: 69 6e 6c 69 6e 65 29 0a 23 65 6c 73 65 0a 23 20  inline).#else.# 
1f60: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e   define SQLITE_N
1f70: 4f 49 4e 4c 49 4e 45 0a 23 65 6e 64 69 66 0a 0a  OINLINE.#endif..
1f80: 2f 2a 0a 2a 2a 20 4d 61 6b 65 20 73 75 72 65 20  /*.** Make sure 
1f90: 74 68 61 74 20 74 68 65 20 63 6f 6d 70 69 6c 65  that the compile
1fa0: 72 20 69 6e 74 72 69 6e 73 69 63 73 20 77 65 20  r intrinsics we 
1fb0: 64 65 73 69 72 65 20 61 72 65 20 65 6e 61 62 6c  desire are enabl
1fc0: 65 64 20 77 68 65 6e 0a 2a 2a 20 63 6f 6d 70 69  ed when.** compi
1fd0: 6c 69 6e 67 20 77 69 74 68 20 61 6e 20 61 70 70  ling with an app
1fe0: 72 6f 70 72 69 61 74 65 20 76 65 72 73 69 6f 6e  ropriate version
1ff0: 20 6f 66 20 4d 53 56 43 20 75 6e 6c 65 73 73 20   of MSVC unless 
2000: 70 72 65 76 65 6e 74 65 64 20 62 79 0a 2a 2a 20  prevented by.** 
2010: 74 68 65 20 53 51 4c 49 54 45 5f 44 49 53 41 42  the SQLITE_DISAB
2020: 4c 45 5f 49 4e 54 52 49 4e 53 49 43 20 64 65 66  LE_INTRINSIC def
2030: 69 6e 65 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66  ine..*/.#if !def
2040: 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 49 53 41  ined(SQLITE_DISA
2050: 42 4c 45 5f 49 4e 54 52 49 4e 53 49 43 29 0a 23  BLE_INTRINSIC).#
2060: 20 20 69 66 20 64 65 66 69 6e 65 64 28 5f 4d 53    if defined(_MS
2070: 43 5f 56 45 52 29 20 26 26 20 5f 4d 53 43 5f 56  C_VER) && _MSC_V
2080: 45 52 3e 3d 31 33 30 30 0a 23 20 20 20 20 69 66  ER>=1300.#    if
2090: 20 21 64 65 66 69 6e 65 64 28 5f 57 49 4e 33 32   !defined(_WIN32
20a0: 5f 57 43 45 29 0a 23 20 20 20 20 20 20 69 6e 63  _WCE).#      inc
20b0: 6c 75 64 65 20 3c 69 6e 74 72 69 6e 2e 68 3e 0a  lude <intrin.h>.
20c0: 23 20 20 20 20 20 20 70 72 61 67 6d 61 20 69 6e  #      pragma in
20d0: 74 72 69 6e 73 69 63 28 5f 62 79 74 65 73 77 61  trinsic(_byteswa
20e0: 70 5f 75 73 68 6f 72 74 29 0a 23 20 20 20 20 20  p_ushort).#     
20f0: 20 70 72 61 67 6d 61 20 69 6e 74 72 69 6e 73 69   pragma intrinsi
2100: 63 28 5f 62 79 74 65 73 77 61 70 5f 75 6c 6f 6e  c(_byteswap_ulon
2110: 67 29 0a 23 20 20 20 20 20 20 70 72 61 67 6d 61  g).#      pragma
2120: 20 69 6e 74 72 69 6e 73 69 63 28 5f 52 65 61 64   intrinsic(_Read
2130: 57 72 69 74 65 42 61 72 72 69 65 72 29 0a 23 20  WriteBarrier).# 
2140: 20 20 20 65 6c 73 65 0a 23 20 20 20 20 20 20 69     else.#      i
2150: 6e 63 6c 75 64 65 20 3c 63 6d 6e 69 6e 74 72 69  nclude <cmnintri
2160: 6e 2e 68 3e 0a 23 20 20 20 20 65 6e 64 69 66 0a  n.h>.#    endif.
2170: 23 20 20 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a  #  endif.#endif.
2180: 0a 2f 2a 0a 2a 2a 20 54 68 65 20 53 51 4c 49 54  ./*.** The SQLIT
2190: 45 5f 54 48 52 45 41 44 53 41 46 45 20 6d 61 63  E_THREADSAFE mac
21a0: 72 6f 20 6d 75 73 74 20 62 65 20 64 65 66 69 6e  ro must be defin
21b0: 65 64 20 61 73 20 30 2c 20 31 2c 20 6f 72 20 32  ed as 0, 1, or 2
21c0: 2e 0a 2a 2a 20 30 20 6d 65 61 6e 73 20 6d 75 74  ..** 0 means mut
21d0: 65 78 65 73 20 61 72 65 20 70 65 72 6d 61 6e 65  exes are permane
21e0: 6e 74 6c 79 20 64 69 73 61 62 6c 65 20 61 6e 64  ntly disable and
21f0: 20 74 68 65 20 6c 69 62 72 61 72 79 20 69 73 20   the library is 
2200: 6e 65 76 65 72 0a 2a 2a 20 74 68 72 65 61 64 73  never.** threads
2210: 61 66 65 2e 20 20 31 20 6d 65 61 6e 73 20 74 68  afe.  1 means th
2220: 65 20 6c 69 62 72 61 72 79 20 69 73 20 73 65 72  e library is ser
2230: 69 61 6c 69 7a 65 64 20 77 68 69 63 68 20 69 73  ialized which is
2240: 20 74 68 65 20 68 69 67 68 65 73 74 0a 2a 2a 20   the highest.** 
2250: 6c 65 76 65 6c 20 6f 66 20 74 68 72 65 61 64 73  level of threads
2260: 61 66 65 74 79 2e 20 20 32 20 6d 65 61 6e 73 20  afety.  2 means 
2270: 74 68 65 20 6c 69 62 72 61 72 79 20 69 73 20 6d  the library is m
2280: 75 6c 74 69 74 68 72 65 61 64 65 64 20 2d 20 6d  ultithreaded - m
2290: 75 6c 74 69 70 6c 65 0a 2a 2a 20 74 68 72 65 61  ultiple.** threa
22a0: 64 73 20 63 61 6e 20 75 73 65 20 53 51 4c 69 74  ds can use SQLit
22b0: 65 20 61 73 20 6c 6f 6e 67 20 61 73 20 6e 6f 20  e as long as no 
22c0: 74 77 6f 20 74 68 72 65 61 64 73 20 74 72 79 20  two threads try 
22d0: 74 6f 20 75 73 65 20 74 68 65 20 73 61 6d 65 0a  to use the same.
22e0: 2a 2a 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e  ** database conn
22f0: 65 63 74 69 6f 6e 20 61 74 20 74 68 65 20 73 61  ection at the sa
2300: 6d 65 20 74 69 6d 65 2e 0a 2a 2a 0a 2a 2a 20 4f  me time..**.** O
2310: 6c 64 65 72 20 76 65 72 73 69 6f 6e 73 20 6f 66  lder versions of
2320: 20 53 51 4c 69 74 65 20 75 73 65 64 20 61 6e 20   SQLite used an 
2330: 6f 70 74 69 6f 6e 61 6c 20 54 48 52 45 41 44 53  optional THREADS
2340: 41 46 45 20 6d 61 63 72 6f 2e 0a 2a 2a 20 57 65  AFE macro..** We
2350: 20 73 75 70 70 6f 72 74 20 74 68 61 74 20 66 6f   support that fo
2360: 72 20 6c 65 67 61 63 79 2e 0a 2a 2f 0a 23 69 66  r legacy..*/.#if
2370: 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
2380: 5f 54 48 52 45 41 44 53 41 46 45 29 0a 23 20 69  _THREADSAFE).# i
2390: 66 20 64 65 66 69 6e 65 64 28 54 48 52 45 41 44  f defined(THREAD
23a0: 53 41 46 45 29 0a 23 20 20 20 64 65 66 69 6e 65  SAFE).#   define
23b0: 20 53 51 4c 49 54 45 5f 54 48 52 45 41 44 53 41   SQLITE_THREADSA
23c0: 46 45 20 54 48 52 45 41 44 53 41 46 45 0a 23 20  FE THREADSAFE.# 
23d0: 65 6c 73 65 0a 23 20 20 20 64 65 66 69 6e 65 20  else.#   define 
23e0: 53 51 4c 49 54 45 5f 54 48 52 45 41 44 53 41 46  SQLITE_THREADSAF
23f0: 45 20 31 20 2f 2a 20 49 4d 50 3a 20 52 2d 30 37  E 1 /* IMP: R-07
2400: 32 37 32 2d 32 32 33 30 39 20 2a 2f 0a 23 20 65  272-22309 */.# e
2410: 6e 64 69 66 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  ndif.#endif../*.
2420: 2a 2a 20 50 6f 77 65 72 73 61 66 65 20 6f 76 65  ** Powersafe ove
2430: 72 77 72 69 74 65 20 69 73 20 6f 6e 20 62 79 20  rwrite is on by 
2440: 64 65 66 61 75 6c 74 2e 20 20 42 75 74 20 63 61  default.  But ca
2450: 6e 20 62 65 20 74 75 72 6e 65 64 20 6f 66 66 20  n be turned off 
2460: 75 73 69 6e 67 0a 2a 2a 20 74 68 65 20 2d 44 53  using.** the -DS
2470: 51 4c 49 54 45 5f 50 4f 57 45 52 53 41 46 45 5f  QLITE_POWERSAFE_
2480: 4f 56 45 52 57 52 49 54 45 3d 30 20 63 6f 6d 6d  OVERWRITE=0 comm
2490: 61 6e 64 2d 6c 69 6e 65 20 6f 70 74 69 6f 6e 2e  and-line option.
24a0: 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  .*/.#ifndef SQLI
24b0: 54 45 5f 50 4f 57 45 52 53 41 46 45 5f 4f 56 45  TE_POWERSAFE_OVE
24c0: 52 57 52 49 54 45 0a 23 20 64 65 66 69 6e 65 20  RWRITE.# define 
24d0: 53 51 4c 49 54 45 5f 50 4f 57 45 52 53 41 46 45  SQLITE_POWERSAFE
24e0: 5f 4f 56 45 52 57 52 49 54 45 20 31 0a 23 65 6e  _OVERWRITE 1.#en
24f0: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 45 56 49 44 45  dif../*.** EVIDE
2500: 4e 43 45 2d 4f 46 3a 20 52 2d 32 35 37 31 35 2d  NCE-OF: R-25715-
2510: 33 37 30 37 32 20 4d 65 6d 6f 72 79 20 61 6c 6c  37072 Memory all
2520: 6f 63 61 74 69 6f 6e 20 73 74 61 74 69 73 74 69  ocation statisti
2530: 63 73 20 61 72 65 20 65 6e 61 62 6c 65 64 20 62  cs are enabled b
2540: 79 0a 2a 2a 20 64 65 66 61 75 6c 74 20 75 6e 6c  y.** default unl
2550: 65 73 73 20 53 51 4c 69 74 65 20 69 73 20 63 6f  ess SQLite is co
2560: 6d 70 69 6c 65 64 20 77 69 74 68 20 53 51 4c 49  mpiled with SQLI
2570: 54 45 5f 44 45 46 41 55 4c 54 5f 4d 45 4d 53 54  TE_DEFAULT_MEMST
2580: 41 54 55 53 3d 30 20 69 6e 0a 2a 2a 20 77 68 69  ATUS=0 in.** whi
2590: 63 68 20 63 61 73 65 20 6d 65 6d 6f 72 79 20 61  ch case memory a
25a0: 6c 6c 6f 63 61 74 69 6f 6e 20 73 74 61 74 69 73  llocation statis
25b0: 74 69 63 73 20 61 72 65 20 64 69 73 61 62 6c 65  tics are disable
25c0: 64 20 62 79 20 64 65 66 61 75 6c 74 2e 0a 2a 2f  d by default..*/
25d0: 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51  .#if !defined(SQ
25e0: 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d 45 4d  LITE_DEFAULT_MEM
25f0: 53 54 41 54 55 53 29 0a 23 20 64 65 66 69 6e 65  STATUS).# define
2600: 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f   SQLITE_DEFAULT_
2610: 4d 45 4d 53 54 41 54 55 53 20 31 0a 23 65 6e 64  MEMSTATUS 1.#end
2620: 69 66 0a 0a 2f 2a 0a 2a 2a 20 45 78 61 63 74 6c  if../*.** Exactl
2630: 79 20 6f 6e 65 20 6f 66 20 74 68 65 20 66 6f 6c  y one of the fol
2640: 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 73 20 6d 75  lowing macros mu
2650: 73 74 20 62 65 20 64 65 66 69 6e 65 64 20 69 6e  st be defined in
2660: 20 6f 72 64 65 72 20 74 6f 0a 2a 2a 20 73 70 65   order to.** spe
2670: 63 69 66 79 20 77 68 69 63 68 20 6d 65 6d 6f 72  cify which memor
2680: 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 73 75 62  y allocation sub
2690: 73 79 73 74 65 6d 20 74 6f 20 75 73 65 2e 0a 2a  system to use..*
26a0: 2a 0a 2a 2a 20 20 20 20 20 53 51 4c 49 54 45 5f  *.**     SQLITE_
26b0: 53 59 53 54 45 4d 5f 4d 41 4c 4c 4f 43 20 20 20  SYSTEM_MALLOC   
26c0: 20 20 20 20 20 20 20 2f 2f 20 55 73 65 20 6e 6f         // Use no
26d0: 72 6d 61 6c 20 73 79 73 74 65 6d 20 6d 61 6c 6c  rmal system mall
26e0: 6f 63 28 29 0a 2a 2a 20 20 20 20 20 53 51 4c 49  oc().**     SQLI
26f0: 54 45 5f 57 49 4e 33 32 5f 4d 41 4c 4c 4f 43 20  TE_WIN32_MALLOC 
2700: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 55 73 65            // Use
2710: 20 57 69 6e 33 32 20 6e 61 74 69 76 65 20 68 65   Win32 native he
2720: 61 70 20 41 50 49 0a 2a 2a 20 20 20 20 20 53 51  ap API.**     SQ
2730: 4c 49 54 45 5f 5a 45 52 4f 5f 4d 41 4c 4c 4f 43  LITE_ZERO_MALLOC
2740: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 55              // U
2750: 73 65 20 61 20 73 74 75 62 20 61 6c 6c 6f 63 61  se a stub alloca
2760: 74 6f 72 20 74 68 61 74 20 61 6c 77 61 79 73 20  tor that always 
2770: 66 61 69 6c 73 0a 2a 2a 20 20 20 20 20 53 51 4c  fails.**     SQL
2780: 49 54 45 5f 4d 45 4d 44 45 42 55 47 20 20 20 20  ITE_MEMDEBUG    
2790: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 44 65             // De
27a0: 62 75 67 67 69 6e 67 20 76 65 72 73 69 6f 6e 20  bugging version 
27b0: 6f 66 20 73 79 73 74 65 6d 20 6d 61 6c 6c 6f 63  of system malloc
27c0: 28 29 0a 2a 2a 0a 2a 2a 20 4f 6e 20 57 69 6e 64  ().**.** On Wind
27d0: 6f 77 73 2c 20 69 66 20 74 68 65 20 53 51 4c 49  ows, if the SQLI
27e0: 54 45 5f 57 49 4e 33 32 5f 4d 41 4c 4c 4f 43 5f  TE_WIN32_MALLOC_
27f0: 56 41 4c 49 44 41 54 45 20 6d 61 63 72 6f 20 69  VALIDATE macro i
2800: 73 20 64 65 66 69 6e 65 64 20 61 6e 64 20 74 68  s defined and th
2810: 65 0a 2a 2a 20 61 73 73 65 72 74 28 29 20 6d 61  e.** assert() ma
2820: 63 72 6f 20 69 73 20 65 6e 61 62 6c 65 64 2c 20  cro is enabled, 
2830: 65 61 63 68 20 63 61 6c 6c 20 69 6e 74 6f 20 74  each call into t
2840: 68 65 20 57 69 6e 33 32 20 6e 61 74 69 76 65 20  he Win32 native 
2850: 68 65 61 70 20 73 75 62 73 79 73 74 65 6d 0a 2a  heap subsystem.*
2860: 2a 20 77 69 6c 6c 20 63 61 75 73 65 20 48 65 61  * will cause Hea
2870: 70 56 61 6c 69 64 61 74 65 20 74 6f 20 62 65 20  pValidate to be 
2880: 63 61 6c 6c 65 64 2e 20 20 49 66 20 68 65 61 70  called.  If heap
2890: 20 76 61 6c 69 64 61 74 69 6f 6e 20 73 68 6f 75   validation shou
28a0: 6c 64 20 66 61 69 6c 2c 20 61 6e 0a 2a 2a 20 61  ld fail, an.** a
28b0: 73 73 65 72 74 69 6f 6e 20 77 69 6c 6c 20 62 65  ssertion will be
28c0: 20 74 72 69 67 67 65 72 65 64 2e 0a 2a 2a 0a 2a   triggered..**.*
28d0: 2a 20 49 66 20 6e 6f 6e 65 20 6f 66 20 74 68 65  * If none of the
28e0: 20 61 62 6f 76 65 20 61 72 65 20 64 65 66 69 6e   above are defin
28f0: 65 64 2c 20 74 68 65 6e 20 73 65 74 20 53 51 4c  ed, then set SQL
2900: 49 54 45 5f 53 59 53 54 45 4d 5f 4d 41 4c 4c 4f  ITE_SYSTEM_MALLO
2910: 43 20 61 73 0a 2a 2a 20 74 68 65 20 64 65 66 61  C as.** the defa
2920: 75 6c 74 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69  ult..*/.#if defi
2930: 6e 65 64 28 53 51 4c 49 54 45 5f 53 59 53 54 45  ned(SQLITE_SYSTE
2940: 4d 5f 4d 41 4c 4c 4f 43 29 20 5c 0a 20 20 2b 20  M_MALLOC) \.  + 
2950: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 57  defined(SQLITE_W
2960: 49 4e 33 32 5f 4d 41 4c 4c 4f 43 29 20 5c 0a 20  IN32_MALLOC) \. 
2970: 20 2b 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54   + defined(SQLIT
2980: 45 5f 5a 45 52 4f 5f 4d 41 4c 4c 4f 43 29 20 5c  E_ZERO_MALLOC) \
2990: 0a 20 20 2b 20 64 65 66 69 6e 65 64 28 53 51 4c  .  + defined(SQL
29a0: 49 54 45 5f 4d 45 4d 44 45 42 55 47 29 3e 31 0a  ITE_MEMDEBUG)>1.
29b0: 23 20 65 72 72 6f 72 20 22 54 77 6f 20 6f 72 20  # error "Two or 
29c0: 6d 6f 72 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c  more of the foll
29d0: 6f 77 69 6e 67 20 63 6f 6d 70 69 6c 65 2d 74 69  owing compile-ti
29e0: 6d 65 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  me configuration
29f0: 20 6f 70 74 69 6f 6e 73 5c 0a 20 61 72 65 20 64   options\. are d
2a00: 65 66 69 6e 65 64 20 62 75 74 20 61 74 20 6d 6f  efined but at mo
2a10: 73 74 20 6f 6e 65 20 69 73 20 61 6c 6c 6f 77 65  st one is allowe
2a20: 64 3a 5c 0a 20 53 51 4c 49 54 45 5f 53 59 53 54  d:\. SQLITE_SYST
2a30: 45 4d 5f 4d 41 4c 4c 4f 43 2c 20 53 51 4c 49 54  EM_MALLOC, SQLIT
2a40: 45 5f 57 49 4e 33 32 5f 4d 41 4c 4c 4f 43 2c 20  E_WIN32_MALLOC, 
2a50: 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47 2c  SQLITE_MEMDEBUG,
2a60: 5c 0a 20 53 51 4c 49 54 45 5f 5a 45 52 4f 5f 4d  \. SQLITE_ZERO_M
2a70: 41 4c 4c 4f 43 22 0a 23 65 6e 64 69 66 0a 23 69  ALLOC".#endif.#i
2a80: 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  f defined(SQLITE
2a90: 5f 53 59 53 54 45 4d 5f 4d 41 4c 4c 4f 43 29 20  _SYSTEM_MALLOC) 
2aa0: 5c 0a 20 20 2b 20 64 65 66 69 6e 65 64 28 53 51  \.  + defined(SQ
2ab0: 4c 49 54 45 5f 57 49 4e 33 32 5f 4d 41 4c 4c 4f  LITE_WIN32_MALLO
2ac0: 43 29 20 5c 0a 20 20 2b 20 64 65 66 69 6e 65 64  C) \.  + defined
2ad0: 28 53 51 4c 49 54 45 5f 5a 45 52 4f 5f 4d 41 4c  (SQLITE_ZERO_MAL
2ae0: 4c 4f 43 29 20 5c 0a 20 20 2b 20 64 65 66 69 6e  LOC) \.  + defin
2af0: 65 64 28 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42  ed(SQLITE_MEMDEB
2b00: 55 47 29 3d 3d 30 0a 23 20 64 65 66 69 6e 65 20  UG)==0.# define 
2b10: 53 51 4c 49 54 45 5f 53 59 53 54 45 4d 5f 4d 41  SQLITE_SYSTEM_MA
2b20: 4c 4c 4f 43 20 31 0a 23 65 6e 64 69 66 0a 0a 2f  LLOC 1.#endif../
2b30: 2a 0a 2a 2a 20 49 66 20 53 51 4c 49 54 45 5f 4d  *.** If SQLITE_M
2b40: 41 4c 4c 4f 43 5f 53 4f 46 54 5f 4c 49 4d 49 54  ALLOC_SOFT_LIMIT
2b50: 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20 74 68   is not zero, th
2b60: 65 6e 20 74 72 79 20 74 6f 20 6b 65 65 70 20 74  en try to keep t
2b70: 68 65 0a 2a 2a 20 73 69 7a 65 73 20 6f 66 20 6d  he.** sizes of m
2b80: 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e  emory allocation
2b90: 73 20 62 65 6c 6f 77 20 74 68 69 73 20 76 61 6c  s below this val
2ba0: 75 65 20 77 68 65 72 65 20 70 6f 73 73 69 62 6c  ue where possibl
2bb0: 65 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e  e..*/.#if !defin
2bc0: 65 64 28 53 51 4c 49 54 45 5f 4d 41 4c 4c 4f 43  ed(SQLITE_MALLOC
2bd0: 5f 53 4f 46 54 5f 4c 49 4d 49 54 29 0a 23 20 64  _SOFT_LIMIT).# d
2be0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 4c  efine SQLITE_MAL
2bf0: 4c 4f 43 5f 53 4f 46 54 5f 4c 49 4d 49 54 20 31  LOC_SOFT_LIMIT 1
2c00: 30 32 34 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  024.#endif../*.*
2c10: 2a 20 57 65 20 6e 65 65 64 20 74 6f 20 64 65 66  * We need to def
2c20: 69 6e 65 20 5f 58 4f 50 45 4e 5f 53 4f 55 52 43  ine _XOPEN_SOURC
2c30: 45 20 61 73 20 66 6f 6c 6c 6f 77 73 20 69 6e 20  E as follows in 
2c40: 6f 72 64 65 72 20 74 6f 20 65 6e 61 62 6c 65 0a  order to enable.
2c50: 2a 2a 20 72 65 63 75 72 73 69 76 65 20 6d 75 74  ** recursive mut
2c60: 65 78 65 73 20 6f 6e 20 6d 6f 73 74 20 55 6e 69  exes on most Uni
2c70: 78 20 73 79 73 74 65 6d 73 20 61 6e 64 20 66 63  x systems and fc
2c80: 68 6d 6f 64 28 29 20 6f 6e 20 4f 70 65 6e 42 53  hmod() on OpenBS
2c90: 44 2e 0a 2a 2a 20 42 75 74 20 5f 58 4f 50 45 4e  D..** But _XOPEN
2ca0: 5f 53 4f 55 52 43 45 20 64 65 66 69 6e 65 20 63  _SOURCE define c
2cb0: 61 75 73 65 73 20 70 72 6f 62 6c 65 6d 73 20 66  auses problems f
2cc0: 6f 72 20 4d 61 63 20 4f 53 20 58 2c 20 73 6f 20  or Mac OS X, so 
2cd0: 6f 6d 69 74 0a 2a 2a 20 69 74 2e 0a 2a 2f 0a 23  omit.** it..*/.#
2ce0: 69 66 20 21 64 65 66 69 6e 65 64 28 5f 58 4f 50  if !defined(_XOP
2cf0: 45 4e 5f 53 4f 55 52 43 45 29 20 26 26 20 21 64  EN_SOURCE) && !d
2d00: 65 66 69 6e 65 64 28 5f 5f 44 41 52 57 49 4e 5f  efined(__DARWIN_
2d10: 5f 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 5f  _) && !defined(_
2d20: 5f 41 50 50 4c 45 5f 5f 29 0a 23 20 20 64 65 66  _APPLE__).#  def
2d30: 69 6e 65 20 5f 58 4f 50 45 4e 5f 53 4f 55 52 43  ine _XOPEN_SOURC
2d40: 45 20 36 30 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a  E 600.#endif../*
2d50: 0a 2a 2a 20 4e 44 45 42 55 47 20 61 6e 64 20 53  .** NDEBUG and S
2d60: 51 4c 49 54 45 5f 44 45 42 55 47 20 61 72 65 20  QLITE_DEBUG are 
2d70: 6f 70 70 6f 73 69 74 65 73 2e 20 20 49 74 20 73  opposites.  It s
2d80: 68 6f 75 6c 64 20 61 6c 77 61 79 73 20 62 65 20  hould always be 
2d90: 74 72 75 65 20 74 68 61 74 0a 2a 2a 20 64 65 66  true that.** def
2da0: 69 6e 65 64 28 4e 44 45 42 55 47 29 3d 3d 21 64  ined(NDEBUG)==!d
2db0: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 45  efined(SQLITE_DE
2dc0: 42 55 47 29 2e 20 20 49 66 20 74 68 69 73 20 69  BUG).  If this i
2dd0: 73 20 6e 6f 74 20 63 75 72 72 65 6e 74 6c 79 20  s not currently 
2de0: 74 72 75 65 2c 0a 2a 2a 20 6d 61 6b 65 20 69 74  true,.** make it
2df0: 20 74 72 75 65 20 62 79 20 64 65 66 69 6e 69 6e   true by definin
2e00: 67 20 6f 72 20 75 6e 64 65 66 69 6e 69 6e 67 20  g or undefining 
2e10: 4e 44 45 42 55 47 2e 0a 2a 2a 0a 2a 2a 20 53 65  NDEBUG..**.** Se
2e20: 74 74 69 6e 67 20 4e 44 45 42 55 47 20 6d 61 6b  tting NDEBUG mak
2e30: 65 73 20 74 68 65 20 63 6f 64 65 20 73 6d 61 6c  es the code smal
2e40: 6c 65 72 20 61 6e 64 20 66 61 73 74 65 72 20 62  ler and faster b
2e50: 79 20 64 69 73 61 62 6c 69 6e 67 20 74 68 65 0a  y disabling the.
2e60: 2a 2a 20 61 73 73 65 72 74 28 29 20 73 74 61 74  ** assert() stat
2e70: 65 6d 65 6e 74 73 20 69 6e 20 74 68 65 20 63 6f  ements in the co
2e80: 64 65 2e 20 20 53 6f 20 77 65 20 77 61 6e 74 20  de.  So we want 
2e90: 74 68 65 20 64 65 66 61 75 6c 74 20 61 63 74 69  the default acti
2ea0: 6f 6e 0a 2a 2a 20 74 6f 20 62 65 20 66 6f 72 20  on.** to be for 
2eb0: 4e 44 45 42 55 47 20 74 6f 20 62 65 20 73 65 74  NDEBUG to be set
2ec0: 20 61 6e 64 20 4e 44 45 42 55 47 20 74 6f 20 62   and NDEBUG to b
2ed0: 65 20 75 6e 64 65 66 69 6e 65 64 20 6f 6e 6c 79  e undefined only
2ee0: 20 69 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47   if SQLITE_DEBUG
2ef0: 0a 2a 2a 20 69 73 20 73 65 74 2e 20 20 54 68 75  .** is set.  Thu
2f00: 73 20 4e 44 45 42 55 47 20 62 65 63 6f 6d 65 73  s NDEBUG becomes
2f10: 20 61 6e 20 6f 70 74 2d 69 6e 20 72 61 74 68 65   an opt-in rathe
2f20: 72 20 74 68 61 6e 20 61 6e 20 6f 70 74 2d 6f 75  r than an opt-ou
2f30: 74 0a 2a 2a 20 66 65 61 74 75 72 65 2e 0a 2a 2f  t.** feature..*/
2f40: 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 4e 44  .#if !defined(ND
2f50: 45 42 55 47 29 20 26 26 20 21 64 65 66 69 6e 65  EBUG) && !define
2f60: 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47 29 0a  d(SQLITE_DEBUG).
2f70: 23 20 64 65 66 69 6e 65 20 4e 44 45 42 55 47 20  # define NDEBUG 
2f80: 31 0a 23 65 6e 64 69 66 0a 23 69 66 20 64 65 66  1.#endif.#if def
2f90: 69 6e 65 64 28 4e 44 45 42 55 47 29 20 26 26 20  ined(NDEBUG) && 
2fa0: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44  defined(SQLITE_D
2fb0: 45 42 55 47 29 0a 23 20 75 6e 64 65 66 20 4e 44  EBUG).# undef ND
2fc0: 45 42 55 47 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  EBUG.#endif../*.
2fd0: 2a 2a 20 45 6e 61 62 6c 65 20 53 51 4c 49 54 45  ** Enable SQLITE
2fe0: 5f 45 4e 41 42 4c 45 5f 45 58 50 4c 41 49 4e 5f  _ENABLE_EXPLAIN_
2ff0: 43 4f 4d 4d 45 4e 54 53 20 69 66 20 53 51 4c 49  COMMENTS if SQLI
3000: 54 45 5f 44 45 42 55 47 20 69 73 20 74 75 72 6e  TE_DEBUG is turn
3010: 65 64 20 6f 6e 2e 0a 2a 2f 0a 23 69 66 20 21 64  ed on..*/.#if !d
3020: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e  efined(SQLITE_EN
3030: 41 42 4c 45 5f 45 58 50 4c 41 49 4e 5f 43 4f 4d  ABLE_EXPLAIN_COM
3040: 4d 45 4e 54 53 29 20 26 26 20 64 65 66 69 6e 65  MENTS) && define
3050: 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47 29 0a  d(SQLITE_DEBUG).
3060: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
3070: 45 4e 41 42 4c 45 5f 45 58 50 4c 41 49 4e 5f 43  ENABLE_EXPLAIN_C
3080: 4f 4d 4d 45 4e 54 53 20 31 0a 23 65 6e 64 69 66  OMMENTS 1.#endif
3090: 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 74 65 73 74  ../*.** The test
30a0: 63 61 73 65 28 29 20 6d 61 63 72 6f 20 69 73 20  case() macro is 
30b0: 75 73 65 64 20 74 6f 20 61 69 64 20 69 6e 20 63  used to aid in c
30c0: 6f 76 65 72 61 67 65 20 74 65 73 74 69 6e 67 2e  overage testing.
30d0: 20 20 57 68 65 6e 0a 2a 2a 20 64 6f 69 6e 67 20    When.** doing 
30e0: 63 6f 76 65 72 61 67 65 20 74 65 73 74 69 6e 67  coverage testing
30f0: 2c 20 74 68 65 20 63 6f 6e 64 69 74 69 6f 6e 20  , the condition 
3100: 69 6e 73 69 64 65 20 74 68 65 20 61 72 67 75 6d  inside the argum
3110: 65 6e 74 20 74 6f 0a 2a 2a 20 74 65 73 74 63 61  ent to.** testca
3120: 73 65 28 29 20 6d 75 73 74 20 62 65 20 65 76 61  se() must be eva
3130: 6c 75 61 74 65 64 20 62 6f 74 68 20 74 72 75 65  luated both true
3140: 20 61 6e 64 20 66 61 6c 73 65 20 69 6e 20 6f 72   and false in or
3150: 64 65 72 20 74 6f 0a 2a 2a 20 67 65 74 20 66 75  der to.** get fu
3160: 6c 6c 20 62 72 61 6e 63 68 20 63 6f 76 65 72 61  ll branch covera
3170: 67 65 2e 20 20 54 68 65 20 74 65 73 74 63 61 73  ge.  The testcas
3180: 65 28 29 20 6d 61 63 72 6f 20 69 73 20 69 6e 73  e() macro is ins
3190: 65 72 74 65 64 0a 2a 2a 20 74 6f 20 68 65 6c 70  erted.** to help
31a0: 20 65 6e 73 75 72 65 20 61 64 65 71 75 61 74 65   ensure adequate
31b0: 20 74 65 73 74 20 63 6f 76 65 72 61 67 65 20 69   test coverage i
31c0: 6e 20 70 6c 61 63 65 73 20 77 68 65 72 65 20 73  n places where s
31d0: 69 6d 70 6c 65 0a 2a 2a 20 63 6f 6e 64 69 74 69  imple.** conditi
31e0: 6f 6e 2f 64 65 63 69 73 69 6f 6e 20 63 6f 76 65  on/decision cove
31f0: 72 61 67 65 20 69 73 20 69 6e 61 64 65 71 75 61  rage is inadequa
3200: 74 65 2e 20 20 46 6f 72 20 65 78 61 6d 70 6c 65  te.  For example
3210: 2c 20 74 65 73 74 63 61 73 65 28 29 0a 2a 2a 20  , testcase().** 
3220: 63 61 6e 20 62 65 20 75 73 65 64 20 74 6f 20 6d  can be used to m
3230: 61 6b 65 20 73 75 72 65 20 62 6f 75 6e 64 61 72  ake sure boundar
3240: 79 20 76 61 6c 75 65 73 20 61 72 65 20 74 65 73  y values are tes
3250: 74 65 64 2e 20 20 46 6f 72 0a 2a 2a 20 62 69 74  ted.  For.** bit
3260: 6d 61 73 6b 20 74 65 73 74 73 2c 20 74 65 73 74  mask tests, test
3270: 63 61 73 65 28 29 20 63 61 6e 20 62 65 20 75 73  case() can be us
3280: 65 64 20 74 6f 20 6d 61 6b 65 20 73 75 72 65 20  ed to make sure 
3290: 65 61 63 68 20 62 69 74 0a 2a 2a 20 69 73 20 73  each bit.** is s
32a0: 69 67 6e 69 66 69 63 61 6e 74 20 61 6e 64 20 75  ignificant and u
32b0: 73 65 64 20 61 74 20 6c 65 61 73 74 20 6f 6e 63  sed at least onc
32c0: 65 2e 20 20 4f 6e 20 73 77 69 74 63 68 20 73 74  e.  On switch st
32d0: 61 74 65 6d 65 6e 74 73 0a 2a 2a 20 77 68 65 72  atements.** wher
32e0: 65 20 6d 75 6c 74 69 70 6c 65 20 63 61 73 65 73  e multiple cases
32f0: 20 67 6f 20 74 6f 20 74 68 65 20 73 61 6d 65 20   go to the same 
3300: 62 6c 6f 63 6b 20 6f 66 20 63 6f 64 65 2c 20 74  block of code, t
3310: 65 73 74 63 61 73 65 28 29 0a 2a 2a 20 63 61 6e  estcase().** can
3320: 20 69 6e 73 75 72 65 20 74 68 61 74 20 61 6c 6c   insure that all
3330: 20 63 61 73 65 73 20 61 72 65 20 65 76 61 6c 75   cases are evalu
3340: 61 74 65 64 2e 0a 2a 2a 0a 2a 2f 0a 23 69 66 64  ated..**.*/.#ifd
3350: 65 66 20 53 51 4c 49 54 45 5f 43 4f 56 45 52 41  ef SQLITE_COVERA
3360: 47 45 5f 54 45 53 54 0a 20 20 76 6f 69 64 20 73  GE_TEST.  void s
3370: 71 6c 69 74 65 33 43 6f 76 65 72 61 67 65 28 69  qlite3Coverage(i
3380: 6e 74 29 3b 0a 23 20 64 65 66 69 6e 65 20 74 65  nt);.# define te
3390: 73 74 63 61 73 65 28 58 29 20 20 69 66 28 20 58  stcase(X)  if( X
33a0: 20 29 7b 20 73 71 6c 69 74 65 33 43 6f 76 65 72   ){ sqlite3Cover
33b0: 61 67 65 28 5f 5f 4c 49 4e 45 5f 5f 29 3b 20 7d  age(__LINE__); }
33c0: 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
33d0: 74 65 73 74 63 61 73 65 28 58 29 0a 23 65 6e 64  testcase(X).#end
33e0: 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 54 45  if../*.** The TE
33f0: 53 54 4f 4e 4c 59 20 6d 61 63 72 6f 20 69 73 20  STONLY macro is 
3400: 75 73 65 64 20 74 6f 20 65 6e 63 6c 6f 73 65 20  used to enclose 
3410: 76 61 72 69 61 62 6c 65 20 64 65 63 6c 61 72 61  variable declara
3420: 74 69 6f 6e 73 20 6f 72 0a 2a 2a 20 6f 74 68 65  tions or.** othe
3430: 72 20 62 69 74 73 20 6f 66 20 63 6f 64 65 20 74  r bits of code t
3440: 68 61 74 20 61 72 65 20 6e 65 65 64 65 64 20 74  hat are needed t
3450: 6f 20 73 75 70 70 6f 72 74 20 74 68 65 20 61 72  o support the ar
3460: 67 75 6d 65 6e 74 73 0a 2a 2a 20 77 69 74 68 69  guments.** withi
3470: 6e 20 74 65 73 74 63 61 73 65 28 29 20 61 6e 64  n testcase() and
3480: 20 61 73 73 65 72 74 28 29 20 6d 61 63 72 6f 73   assert() macros
3490: 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e 65  ..*/.#if !define
34a0: 64 28 4e 44 45 42 55 47 29 20 7c 7c 20 64 65 66  d(NDEBUG) || def
34b0: 69 6e 65 64 28 53 51 4c 49 54 45 5f 43 4f 56 45  ined(SQLITE_COVE
34c0: 52 41 47 45 5f 54 45 53 54 29 0a 23 20 64 65 66  RAGE_TEST).# def
34d0: 69 6e 65 20 54 45 53 54 4f 4e 4c 59 28 58 29 20  ine TESTONLY(X) 
34e0: 20 58 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e   X.#else.# defin
34f0: 65 20 54 45 53 54 4f 4e 4c 59 28 58 29 0a 23 65  e TESTONLY(X).#e
3500: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 53 6f 6d 65  ndif../*.** Some
3510: 74 69 6d 65 73 20 77 65 20 6e 65 65 64 20 61 20  times we need a 
3520: 73 6d 61 6c 6c 20 61 6d 6f 75 6e 74 20 6f 66 20  small amount of 
3530: 63 6f 64 65 20 73 75 63 68 20 61 73 20 61 20 76  code such as a v
3540: 61 72 69 61 62 6c 65 20 69 6e 69 74 69 61 6c 69  ariable initiali
3550: 7a 61 74 69 6f 6e 0a 2a 2a 20 74 6f 20 73 65 74  zation.** to set
3560: 75 70 20 66 6f 72 20 61 20 6c 61 74 65 72 20 61  up for a later a
3570: 73 73 65 72 74 28 29 20 73 74 61 74 65 6d 65 6e  ssert() statemen
3580: 74 2e 20 20 57 65 20 64 6f 20 6e 6f 74 20 77 61  t.  We do not wa
3590: 6e 74 20 74 68 69 73 20 63 6f 64 65 20 74 6f 0a  nt this code to.
35a0: 2a 2a 20 61 70 70 65 61 72 20 77 68 65 6e 20 61  ** appear when a
35b0: 73 73 65 72 74 28 29 20 69 73 20 64 69 73 61 62  ssert() is disab
35c0: 6c 65 64 2e 20 20 54 68 65 20 66 6f 6c 6c 6f 77  led.  The follow
35d0: 69 6e 67 20 6d 61 63 72 6f 20 69 73 20 74 68 65  ing macro is the
35e0: 72 65 66 6f 72 65 0a 2a 2a 20 75 73 65 64 20 74  refore.** used t
35f0: 6f 20 63 6f 6e 74 61 69 6e 20 74 68 61 74 20 73  o contain that s
3600: 65 74 75 70 20 63 6f 64 65 2e 20 20 54 68 65 20  etup code.  The 
3610: 22 56 56 41 22 20 61 63 72 6f 6e 79 6d 20 73 74  "VVA" acronym st
3620: 61 6e 64 73 20 66 6f 72 0a 2a 2a 20 22 56 65 72  ands for.** "Ver
3630: 69 66 69 63 61 74 69 6f 6e 2c 20 56 61 6c 69 64  ification, Valid
3640: 61 74 69 6f 6e 2c 20 61 6e 64 20 41 63 63 72 65  ation, and Accre
3650: 64 69 74 61 74 69 6f 6e 22 2e 20 20 49 6e 20 6f  ditation".  In o
3660: 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68 65 0a  ther words, the.
3670: 2a 2a 20 63 6f 64 65 20 77 69 74 68 69 6e 20 56  ** code within V
3680: 56 41 5f 4f 4e 4c 59 28 29 20 77 69 6c 6c 20 6f  VA_ONLY() will o
3690: 6e 6c 79 20 72 75 6e 20 64 75 72 69 6e 67 20 76  nly run during v
36a0: 65 72 69 66 69 63 61 74 69 6f 6e 20 70 72 6f 63  erification proc
36b0: 65 73 73 65 73 2e 0a 2a 2f 0a 23 69 66 6e 64 65  esses..*/.#ifnde
36c0: 66 20 4e 44 45 42 55 47 0a 23 20 64 65 66 69 6e  f NDEBUG.# defin
36d0: 65 20 56 56 41 5f 4f 4e 4c 59 28 58 29 20 20 58  e VVA_ONLY(X)  X
36e0: 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
36f0: 56 56 41 5f 4f 4e 4c 59 28 58 29 0a 23 65 6e 64  VVA_ONLY(X).#end
3700: 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 41 4c  if../*.** The AL
3710: 57 41 59 53 20 61 6e 64 20 4e 45 56 45 52 20 6d  WAYS and NEVER m
3720: 61 63 72 6f 73 20 73 75 72 72 6f 75 6e 64 20 62  acros surround b
3730: 6f 6f 6c 65 61 6e 20 65 78 70 72 65 73 73 69 6f  oolean expressio
3740: 6e 73 20 77 68 69 63 68 0a 2a 2a 20 61 72 65 20  ns which.** are 
3750: 69 6e 74 65 6e 64 65 64 20 74 6f 20 61 6c 77 61  intended to alwa
3760: 79 73 20 62 65 20 74 72 75 65 20 6f 72 20 66 61  ys be true or fa
3770: 6c 73 65 2c 20 72 65 73 70 65 63 74 69 76 65 6c  lse, respectivel
3780: 79 2e 20 20 53 75 63 68 0a 2a 2a 20 65 78 70 72  y.  Such.** expr
3790: 65 73 73 69 6f 6e 73 20 63 6f 75 6c 64 20 62 65  essions could be
37a0: 20 6f 6d 69 74 74 65 64 20 66 72 6f 6d 20 74 68   omitted from th
37b0: 65 20 63 6f 64 65 20 63 6f 6d 70 6c 65 74 65 6c  e code completel
37c0: 79 2e 20 20 42 75 74 20 74 68 65 79 0a 2a 2a 20  y.  But they.** 
37d0: 61 72 65 20 69 6e 63 6c 75 64 65 64 20 69 6e 20  are included in 
37e0: 61 20 66 65 77 20 63 61 73 65 73 20 69 6e 20 6f  a few cases in o
37f0: 72 64 65 72 20 74 6f 20 65 6e 68 61 6e 63 65 20  rder to enhance 
3800: 74 68 65 20 72 65 73 69 6c 69 65 6e 63 65 0a 2a  the resilience.*
3810: 2a 20 6f 66 20 53 51 4c 69 74 65 20 74 6f 20 75  * of SQLite to u
3820: 6e 65 78 70 65 63 74 65 64 20 62 65 68 61 76 69  nexpected behavi
3830: 6f 72 20 2d 20 74 6f 20 6d 61 6b 65 20 74 68 65  or - to make the
3840: 20 63 6f 64 65 20 22 73 65 6c 66 2d 68 65 61 6c   code "self-heal
3850: 69 6e 67 22 0a 2a 2a 20 6f 72 20 22 64 75 63 74  ing".** or "duct
3860: 69 6c 65 22 20 72 61 74 68 65 72 20 74 68 61 6e  ile" rather than
3870: 20 62 65 69 6e 67 20 22 62 72 69 74 74 6c 65 22   being "brittle"
3880: 20 61 6e 64 20 63 72 61 73 68 69 6e 67 20 61 74   and crashing at
3890: 20 74 68 65 20 66 69 72 73 74 0a 2a 2a 20 68 69   the first.** hi
38a0: 6e 74 20 6f 66 20 75 6e 70 6c 61 6e 6e 65 64 20  nt of unplanned 
38b0: 62 65 68 61 76 69 6f 72 2e 0a 2a 2a 0a 2a 2a 20  behavior..**.** 
38c0: 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20  In other words, 
38d0: 41 4c 57 41 59 53 20 61 6e 64 20 4e 45 56 45 52  ALWAYS and NEVER
38e0: 20 61 72 65 20 61 64 64 65 64 20 66 6f 72 20 64   are added for d
38f0: 65 66 65 6e 73 69 76 65 20 63 6f 64 65 2e 0a 2a  efensive code..*
3900: 2a 0a 2a 2a 20 57 68 65 6e 20 64 6f 69 6e 67 20  *.** When doing 
3910: 63 6f 76 65 72 61 67 65 20 74 65 73 74 69 6e 67  coverage testing
3920: 20 41 4c 57 41 59 53 20 61 6e 64 20 4e 45 56 45   ALWAYS and NEVE
3930: 52 20 61 72 65 20 68 61 72 64 2d 63 6f 64 65 64  R are hard-coded
3940: 20 74 6f 0a 2a 2a 20 62 65 20 74 72 75 65 20 61   to.** be true a
3950: 6e 64 20 66 61 6c 73 65 20 73 6f 20 74 68 61 74  nd false so that
3960: 20 74 68 65 20 75 6e 72 65 61 63 68 61 62 6c 65   the unreachable
3970: 20 63 6f 64 65 20 74 68 65 79 20 73 70 65 63 69   code they speci
3980: 66 79 20 77 69 6c 6c 0a 2a 2a 20 6e 6f 74 20 62  fy will.** not b
3990: 65 20 63 6f 75 6e 74 65 64 20 61 73 20 75 6e 74  e counted as unt
39a0: 65 73 74 65 64 20 63 6f 64 65 2e 0a 2a 2f 0a 23  ested code..*/.#
39b0: 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  if defined(SQLIT
39c0: 45 5f 43 4f 56 45 52 41 47 45 5f 54 45 53 54 29  E_COVERAGE_TEST)
39d0: 20 7c 7c 20 64 65 66 69 6e 65 64 28 53 51 4c 49   || defined(SQLI
39e0: 54 45 5f 4d 55 54 41 54 49 4f 4e 5f 54 45 53 54  TE_MUTATION_TEST
39f0: 29 0a 23 20 64 65 66 69 6e 65 20 41 4c 57 41 59  ).# define ALWAY
3a00: 53 28 58 29 20 20 20 20 20 20 28 31 29 0a 23 20  S(X)      (1).# 
3a10: 64 65 66 69 6e 65 20 4e 45 56 45 52 28 58 29 20  define NEVER(X) 
3a20: 20 20 20 20 20 20 28 30 29 0a 23 65 6c 69 66 20        (0).#elif 
3a30: 21 64 65 66 69 6e 65 64 28 4e 44 45 42 55 47 29  !defined(NDEBUG)
3a40: 0a 23 20 64 65 66 69 6e 65 20 41 4c 57 41 59 53  .# define ALWAYS
3a50: 28 58 29 20 20 20 20 20 20 28 28 58 29 3f 31 3a  (X)      ((X)?1:
3a60: 28 61 73 73 65 72 74 28 30 29 2c 30 29 29 0a 23  (assert(0),0)).#
3a70: 20 64 65 66 69 6e 65 20 4e 45 56 45 52 28 58 29   define NEVER(X)
3a80: 20 20 20 20 20 20 20 28 28 58 29 3f 28 61 73 73         ((X)?(ass
3a90: 65 72 74 28 30 29 2c 31 29 3a 30 29 0a 23 65 6c  ert(0),1):0).#el
3aa0: 73 65 0a 23 20 64 65 66 69 6e 65 20 41 4c 57 41  se.# define ALWA
3ab0: 59 53 28 58 29 20 20 20 20 20 20 28 58 29 0a 23  YS(X)      (X).#
3ac0: 20 64 65 66 69 6e 65 20 4e 45 56 45 52 28 58 29   define NEVER(X)
3ad0: 20 20 20 20 20 20 20 28 58 29 0a 23 65 6e 64 69         (X).#endi
3ae0: 66 0a 0a 2f 2a 0a 2a 2a 20 53 6f 6d 65 20 6d 61  f../*.** Some ma
3af0: 6c 6c 6f 63 20 66 61 69 6c 75 72 65 73 20 61 72  lloc failures ar
3b00: 65 20 6f 6e 6c 79 20 70 6f 73 73 69 62 6c 65 20  e only possible 
3b10: 69 66 20 53 51 4c 49 54 45 5f 54 45 53 54 5f 52  if SQLITE_TEST_R
3b20: 45 41 4c 4c 4f 43 5f 53 54 52 45 53 53 20 69 73  EALLOC_STRESS is
3b30: 0a 2a 2a 20 64 65 66 69 6e 65 64 2e 20 20 57 65  .** defined.  We
3b40: 20 6e 65 65 64 20 74 6f 20 64 65 66 65 6e 64 20   need to defend 
3b50: 61 67 61 69 6e 73 74 20 74 68 6f 73 65 20 66 61  against those fa
3b60: 69 6c 75 72 65 73 20 77 68 65 6e 20 74 65 73 74  ilures when test
3b70: 69 6e 67 20 77 69 74 68 0a 2a 2a 20 53 51 4c 49  ing with.** SQLI
3b80: 54 45 5f 54 45 53 54 5f 52 45 41 4c 4c 4f 43 5f  TE_TEST_REALLOC_
3b90: 53 54 52 45 53 53 2c 20 62 75 74 20 77 65 20 64  STRESS, but we d
3ba0: 6f 6e 27 74 20 77 61 6e 74 20 74 68 65 20 75 6e  on't want the un
3bb0: 72 65 61 63 68 61 62 6c 65 20 62 72 61 6e 63 68  reachable branch
3bc0: 65 73 0a 2a 2a 20 64 75 72 69 6e 67 20 61 20 6e  es.** during a n
3bd0: 6f 72 6d 61 6c 20 62 75 69 6c 64 2e 20 20 54 68  ormal build.  Th
3be0: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72  e following macr
3bf0: 6f 20 63 61 6e 20 62 65 20 75 73 65 64 20 74 6f  o can be used to
3c00: 20 64 69 73 61 62 6c 65 20 74 65 73 74 73 0a 2a   disable tests.*
3c10: 2a 20 74 68 61 74 20 61 72 65 20 61 6c 77 61 79  * that are alway
3c20: 73 20 66 61 6c 73 65 20 65 78 63 65 70 74 20 77  s false except w
3c30: 68 65 6e 20 53 51 4c 49 54 45 5f 54 45 53 54 5f  hen SQLITE_TEST_
3c40: 52 45 41 4c 4c 4f 43 5f 53 54 52 45 53 53 20 69  REALLOC_STRESS i
3c50: 73 20 73 65 74 2e 0a 2a 2f 0a 23 69 66 20 64 65  s set..*/.#if de
3c60: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 54 45 53  fined(SQLITE_TES
3c70: 54 5f 52 45 41 4c 4c 4f 43 5f 53 54 52 45 53 53  T_REALLOC_STRESS
3c80: 29 0a 23 20 64 65 66 69 6e 65 20 4f 4e 4c 59 5f  ).# define ONLY_
3c90: 49 46 5f 52 45 41 4c 4c 4f 43 5f 53 54 52 45 53  IF_REALLOC_STRES
3ca0: 53 28 58 29 20 20 28 58 29 0a 23 65 6c 69 66 20  S(X)  (X).#elif 
3cb0: 21 64 65 66 69 6e 65 64 28 4e 44 45 42 55 47 29  !defined(NDEBUG)
3cc0: 0a 23 20 64 65 66 69 6e 65 20 4f 4e 4c 59 5f 49  .# define ONLY_I
3cd0: 46 5f 52 45 41 4c 4c 4f 43 5f 53 54 52 45 53 53  F_REALLOC_STRESS
3ce0: 28 58 29 20 20 28 28 58 29 3f 28 61 73 73 65 72  (X)  ((X)?(asser
3cf0: 74 28 30 29 2c 31 29 3a 30 29 0a 23 65 6c 73 65  t(0),1):0).#else
3d00: 0a 23 20 64 65 66 69 6e 65 20 4f 4e 4c 59 5f 49  .# define ONLY_I
3d10: 46 5f 52 45 41 4c 4c 4f 43 5f 53 54 52 45 53 53  F_REALLOC_STRESS
3d20: 28 58 29 20 20 28 30 29 0a 23 65 6e 64 69 66 0a  (X)  (0).#endif.
3d30: 0a 2f 2a 0a 2a 2a 20 44 65 63 6c 61 72 61 74 69  ./*.** Declarati
3d40: 6f 6e 73 20 75 73 65 64 20 66 6f 72 20 74 72 61  ons used for tra
3d50: 63 69 6e 67 20 74 68 65 20 6f 70 65 72 61 74 69  cing the operati
3d60: 6e 67 20 73 79 73 74 65 6d 20 69 6e 74 65 72 66  ng system interf
3d70: 61 63 65 73 2e 0a 2a 2f 0a 23 69 66 20 64 65 66  aces..*/.#if def
3d80: 69 6e 65 64 28 53 51 4c 49 54 45 5f 46 4f 52 43  ined(SQLITE_FORC
3d90: 45 5f 4f 53 5f 54 52 41 43 45 29 20 7c 7c 20 64  E_OS_TRACE) || d
3da0: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 54 45  efined(SQLITE_TE
3db0: 53 54 29 20 7c 7c 20 5c 0a 20 20 20 20 28 64 65  ST) || \.    (de
3dc0: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42  fined(SQLITE_DEB
3dd0: 55 47 29 20 26 26 20 53 51 4c 49 54 45 5f 4f 53  UG) && SQLITE_OS
3de0: 5f 57 49 4e 29 0a 20 20 65 78 74 65 72 6e 20 69  _WIN).  extern i
3df0: 6e 74 20 73 71 6c 69 74 65 33 4f 53 54 72 61 63  nt sqlite3OSTrac
3e00: 65 3b 0a 23 20 64 65 66 69 6e 65 20 4f 53 54 52  e;.# define OSTR
3e10: 41 43 45 28 58 29 20 20 20 20 20 20 20 20 20 20  ACE(X)          
3e20: 69 66 28 20 73 71 6c 69 74 65 33 4f 53 54 72 61  if( sqlite3OSTra
3e30: 63 65 20 29 20 73 71 6c 69 74 65 33 44 65 62 75  ce ) sqlite3Debu
3e40: 67 50 72 69 6e 74 66 20 58 0a 23 20 64 65 66 69  gPrintf X.# defi
3e50: 6e 65 20 53 51 4c 49 54 45 5f 48 41 56 45 5f 4f  ne SQLITE_HAVE_O
3e60: 53 5f 54 52 41 43 45 0a 23 65 6c 73 65 0a 23 20  S_TRACE.#else.# 
3e70: 64 65 66 69 6e 65 20 4f 53 54 52 41 43 45 28 58  define OSTRACE(X
3e80: 29 0a 23 20 75 6e 64 65 66 20 20 53 51 4c 49 54  ).# undef  SQLIT
3e90: 45 5f 48 41 56 45 5f 4f 53 5f 54 52 41 43 45 0a  E_HAVE_OS_TRACE.
3ea0: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 73  #endif../*.** Is
3eb0: 20 74 68 65 20 73 71 6c 69 74 65 33 45 72 72 4e   the sqlite3ErrN
3ec0: 61 6d 65 28 29 20 66 75 6e 63 74 69 6f 6e 20 6e  ame() function n
3ed0: 65 65 64 65 64 20 69 6e 20 74 68 65 20 62 75 69  eeded in the bui
3ee0: 6c 64 3f 20 20 43 75 72 72 65 6e 74 6c 79 2c 0a  ld?  Currently,.
3ef0: 2a 2a 20 69 74 20 69 73 20 6e 65 65 64 65 64 20  ** it is needed 
3f00: 62 79 20 22 6d 75 74 65 78 5f 77 33 32 2e 63 22  by "mutex_w32.c"
3f10: 20 28 77 68 65 6e 20 64 65 62 75 67 67 69 6e 67   (when debugging
3f20: 29 2c 20 22 6f 73 5f 77 69 6e 2e 63 22 20 28 77  ), "os_win.c" (w
3f30: 68 65 6e 0a 2a 2a 20 4f 53 54 52 41 43 45 20 69  hen.** OSTRACE i
3f40: 73 20 65 6e 61 62 6c 65 64 29 2c 20 61 6e 64 20  s enabled), and 
3f50: 62 79 20 73 65 76 65 72 61 6c 20 22 74 65 73 74  by several "test
3f60: 2a 2e 63 22 20 66 69 6c 65 73 20 28 77 68 69 63  *.c" files (whic
3f70: 68 20 61 72 65 0a 2a 2a 20 63 6f 6d 70 69 6c 65  h are.** compile
3f80: 64 20 75 73 69 6e 67 20 53 51 4c 49 54 45 5f 54  d using SQLITE_T
3f90: 45 53 54 29 2e 0a 2a 2f 0a 23 69 66 20 64 65 66  EST)..*/.#if def
3fa0: 69 6e 65 64 28 53 51 4c 49 54 45 5f 48 41 56 45  ined(SQLITE_HAVE
3fb0: 5f 4f 53 5f 54 52 41 43 45 29 20 7c 7c 20 64 65  _OS_TRACE) || de
3fc0: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 54 45 53  fined(SQLITE_TES
3fd0: 54 29 20 7c 7c 20 5c 0a 20 20 20 20 28 64 65 66  T) || \.    (def
3fe0: 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42 55  ined(SQLITE_DEBU
3ff0: 47 29 20 26 26 20 53 51 4c 49 54 45 5f 4f 53 5f  G) && SQLITE_OS_
4000: 57 49 4e 29 0a 23 20 64 65 66 69 6e 65 20 53 51  WIN).# define SQ
4010: 4c 49 54 45 5f 4e 45 45 44 5f 45 52 52 5f 4e 41  LITE_NEED_ERR_NA
4020: 4d 45 0a 23 65 6c 73 65 0a 23 20 75 6e 64 65 66  ME.#else.# undef
4030: 20 20 53 51 4c 49 54 45 5f 4e 45 45 44 5f 45 52    SQLITE_NEED_ER
4040: 52 5f 4e 41 4d 45 0a 23 65 6e 64 69 66 0a 0a 2f  R_NAME.#endif../
4050: 2a 0a 2a 2a 20 53 51 4c 49 54 45 5f 45 4e 41 42  *.** SQLITE_ENAB
4060: 4c 45 5f 45 58 50 4c 41 49 4e 5f 43 4f 4d 4d 45  LE_EXPLAIN_COMME
4070: 4e 54 53 20 69 73 20 69 6e 63 6f 6d 70 61 74 69  NTS is incompati
4080: 62 6c 65 20 77 69 74 68 20 53 51 4c 49 54 45 5f  ble with SQLITE_
4090: 4f 4d 49 54 5f 45 58 50 4c 41 49 4e 0a 2a 2f 0a  OMIT_EXPLAIN.*/.
40a0: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  #ifdef SQLITE_OM
40b0: 49 54 5f 45 58 50 4c 41 49 4e 0a 23 20 75 6e 64  IT_EXPLAIN.# und
40c0: 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ef SQLITE_ENABLE
40d0: 5f 45 58 50 4c 41 49 4e 5f 43 4f 4d 4d 45 4e 54  _EXPLAIN_COMMENT
40e0: 53 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  S.#endif../*.** 
40f0: 52 65 74 75 72 6e 20 74 72 75 65 20 28 6e 6f 6e  Return true (non
4100: 2d 7a 65 72 6f 29 20 69 66 20 74 68 65 20 69 6e  -zero) if the in
4110: 70 75 74 20 69 73 20 61 6e 20 69 6e 74 65 67 65  put is an intege
4120: 72 20 74 68 61 74 20 69 73 20 74 6f 6f 20 6c 61  r that is too la
4130: 72 67 65 0a 2a 2a 20 74 6f 20 66 69 74 20 69 6e  rge.** to fit in
4140: 20 33 32 2d 62 69 74 73 2e 20 20 54 68 69 73 20   32-bits.  This 
4150: 6d 61 63 72 6f 20 69 73 20 75 73 65 64 20 69 6e  macro is used in
4160: 73 69 64 65 20 6f 66 20 76 61 72 69 6f 75 73 20  side of various 
4170: 74 65 73 74 63 61 73 65 28 29 0a 2a 2a 20 6d 61  testcase().** ma
4180: 63 72 6f 73 20 74 6f 20 76 65 72 69 66 79 20 74  cros to verify t
4190: 68 61 74 20 77 65 20 68 61 76 65 20 74 65 73 74  hat we have test
41a0: 65 64 20 53 51 4c 69 74 65 20 66 6f 72 20 6c 61  ed SQLite for la
41b0: 72 67 65 2d 66 69 6c 65 20 73 75 70 70 6f 72 74  rge-file support
41c0: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 49 53 5f  ..*/.#define IS_
41d0: 42 49 47 5f 49 4e 54 28 58 29 20 20 28 28 28 58  BIG_INT(X)  (((X
41e0: 29 26 7e 28 69 36 34 29 30 78 66 66 66 66 66 66  )&~(i64)0xffffff
41f0: 66 66 29 21 3d 30 29 0a 0a 2f 2a 0a 2a 2a 20 54  ff)!=0)../*.** T
4200: 68 65 20 6d 61 63 72 6f 20 75 6e 6c 69 6b 65 6c  he macro unlikel
4210: 79 28 29 20 69 73 20 61 20 68 69 6e 74 20 74 68  y() is a hint th
4220: 61 74 20 73 75 72 72 6f 75 6e 64 73 20 61 20 62  at surrounds a b
4230: 6f 6f 6c 65 61 6e 0a 2a 2a 20 65 78 70 72 65 73  oolean.** expres
4240: 73 69 6f 6e 20 74 68 61 74 20 69 73 20 75 73 75  sion that is usu
4250: 61 6c 6c 79 20 66 61 6c 73 65 2e 20 20 4d 61 63  ally false.  Mac
4260: 72 6f 20 6c 69 6b 65 6c 79 28 29 20 73 75 72 72  ro likely() surr
4270: 6f 75 6e 64 73 0a 2a 2a 20 61 20 62 6f 6f 6c 65  ounds.** a boole
4280: 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 74 68  an expression th
4290: 61 74 20 69 73 20 75 73 75 61 6c 6c 79 20 74 72  at is usually tr
42a0: 75 65 2e 20 20 54 68 65 73 65 20 68 69 6e 74 73  ue.  These hints
42b0: 20 63 6f 75 6c 64 2c 0a 2a 2a 20 69 6e 20 74 68   could,.** in th
42c0: 65 6f 72 79 2c 20 62 65 20 75 73 65 64 20 62 79  eory, be used by
42d0: 20 74 68 65 20 63 6f 6d 70 69 6c 65 72 20 74 6f   the compiler to
42e0: 20 67 65 6e 65 72 61 74 65 20 62 65 74 74 65 72   generate better
42f0: 20 63 6f 64 65 2c 20 62 75 74 0a 2a 2a 20 63 75   code, but.** cu
4300: 72 72 65 6e 74 6c 79 20 74 68 65 79 20 61 72 65  rrently they are
4310: 20 6a 75 73 74 20 63 6f 6d 6d 65 6e 74 73 20 66   just comments f
4320: 6f 72 20 68 75 6d 61 6e 20 72 65 61 64 65 72 73  or human readers
4330: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 6c 69 6b  ..*/.#define lik
4340: 65 6c 79 28 58 29 20 20 20 20 28 58 29 0a 23 64  ely(X)    (X).#d
4350: 65 66 69 6e 65 20 75 6e 6c 69 6b 65 6c 79 28 58  efine unlikely(X
4360: 29 20 20 28 58 29 0a 0a 23 69 6e 63 6c 75 64 65  )  (X)..#include
4370: 20 22 68 61 73 68 2e 68 22 0a 23 69 6e 63 6c 75   "hash.h".#inclu
4380: 64 65 20 22 70 61 72 73 65 2e 68 22 0a 23 69 6e  de "parse.h".#in
4390: 63 6c 75 64 65 20 3c 73 74 64 69 6f 2e 68 3e 0a  clude <stdio.h>.
43a0: 23 69 6e 63 6c 75 64 65 20 3c 73 74 64 6c 69 62  #include <stdlib
43b0: 2e 68 3e 0a 23 69 6e 63 6c 75 64 65 20 3c 73 74  .h>.#include <st
43c0: 72 69 6e 67 2e 68 3e 0a 23 69 6e 63 6c 75 64 65  ring.h>.#include
43d0: 20 3c 61 73 73 65 72 74 2e 68 3e 0a 23 69 6e 63   <assert.h>.#inc
43e0: 6c 75 64 65 20 3c 73 74 64 64 65 66 2e 68 3e 0a  lude <stddef.h>.
43f0: 0a 2f 2a 0a 2a 2a 20 49 66 20 63 6f 6d 70 69 6c  ./*.** If compil
4400: 69 6e 67 20 66 6f 72 20 61 20 70 72 6f 63 65 73  ing for a proces
4410: 73 6f 72 20 74 68 61 74 20 6c 61 63 6b 73 20 66  sor that lacks f
4420: 6c 6f 61 74 69 6e 67 20 70 6f 69 6e 74 20 73 75  loating point su
4430: 70 70 6f 72 74 2c 0a 2a 2a 20 73 75 62 73 74 69  pport,.** substi
4440: 74 75 74 65 20 69 6e 74 65 67 65 72 20 66 6f 72  tute integer for
4450: 20 66 6c 6f 61 74 69 6e 67 2d 70 6f 69 6e 74 0a   floating-point.
4460: 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
4470: 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50  _OMIT_FLOATING_P
4480: 4f 49 4e 54 0a 23 20 64 65 66 69 6e 65 20 64 6f  OINT.# define do
4490: 75 62 6c 65 20 73 71 6c 69 74 65 5f 69 6e 74 36  uble sqlite_int6
44a0: 34 0a 23 20 64 65 66 69 6e 65 20 66 6c 6f 61 74  4.# define float
44b0: 20 73 71 6c 69 74 65 5f 69 6e 74 36 34 0a 23 20   sqlite_int64.# 
44c0: 64 65 66 69 6e 65 20 4c 4f 4e 47 44 4f 55 42 4c  define LONGDOUBL
44d0: 45 5f 54 59 50 45 20 73 71 6c 69 74 65 5f 69 6e  E_TYPE sqlite_in
44e0: 74 36 34 0a 23 20 69 66 6e 64 65 66 20 53 51 4c  t64.# ifndef SQL
44f0: 49 54 45 5f 42 49 47 5f 44 42 4c 0a 23 20 20 20  ITE_BIG_DBL.#   
4500: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 42 49  define SQLITE_BI
4510: 47 5f 44 42 4c 20 28 28 28 73 71 6c 69 74 65 33  G_DBL (((sqlite3
4520: 5f 69 6e 74 36 34 29 31 29 3c 3c 35 30 29 0a 23  _int64)1)<<50).#
4530: 20 65 6e 64 69 66 0a 23 20 64 65 66 69 6e 65 20   endif.# define 
4540: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 44 41 54 45  SQLITE_OMIT_DATE
4550: 54 49 4d 45 5f 46 55 4e 43 53 20 31 0a 23 20 64  TIME_FUNCS 1.# d
4560: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4f 4d 49  efine SQLITE_OMI
4570: 54 5f 54 52 41 43 45 20 31 0a 23 20 75 6e 64 65  T_TRACE 1.# unde
4580: 66 20 53 51 4c 49 54 45 5f 4d 49 58 45 44 5f 45  f SQLITE_MIXED_E
4590: 4e 44 49 41 4e 5f 36 34 42 49 54 5f 46 4c 4f 41  NDIAN_64BIT_FLOA
45a0: 54 0a 23 20 75 6e 64 65 66 20 53 51 4c 49 54 45  T.# undef SQLITE
45b0: 5f 48 41 56 45 5f 49 53 4e 41 4e 0a 23 65 6e 64  _HAVE_ISNAN.#end
45c0: 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  if.#ifndef SQLIT
45d0: 45 5f 42 49 47 5f 44 42 4c 0a 23 20 64 65 66 69  E_BIG_DBL.# defi
45e0: 6e 65 20 53 51 4c 49 54 45 5f 42 49 47 5f 44 42  ne SQLITE_BIG_DB
45f0: 4c 20 28 31 65 39 39 29 0a 23 65 6e 64 69 66 0a  L (1e99).#endif.
4600: 0a 2f 2a 0a 2a 2a 20 4f 4d 49 54 5f 54 45 4d 50  ./*.** OMIT_TEMP
4610: 44 42 20 69 73 20 73 65 74 20 74 6f 20 31 20 69  DB is set to 1 i
4620: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 45  f SQLITE_OMIT_TE
4630: 4d 50 44 42 20 69 73 20 64 65 66 69 6e 65 64 2c  MPDB is defined,
4640: 20 6f 72 20 30 0a 2a 2a 20 61 66 74 65 72 77 61   or 0.** afterwa
4650: 72 64 2e 20 48 61 76 69 6e 67 20 74 68 69 73 20  rd. Having this 
4660: 6d 61 63 72 6f 20 61 6c 6c 6f 77 73 20 75 73 20  macro allows us 
4670: 74 6f 20 63 61 75 73 65 20 74 68 65 20 43 20 63  to cause the C c
4680: 6f 6d 70 69 6c 65 72 0a 2a 2a 20 74 6f 20 6f 6d  ompiler.** to om
4690: 69 74 20 63 6f 64 65 20 75 73 65 64 20 62 79 20  it code used by 
46a0: 54 45 4d 50 20 74 61 62 6c 65 73 20 77 69 74 68  TEMP tables with
46b0: 6f 75 74 20 6d 65 73 73 79 20 23 69 66 6e 64 65  out messy #ifnde
46c0: 66 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a 2a 2f  f statements..*/
46d0: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f  .#ifdef SQLITE_O
46e0: 4d 49 54 5f 54 45 4d 50 44 42 0a 23 64 65 66 69  MIT_TEMPDB.#defi
46f0: 6e 65 20 4f 4d 49 54 5f 54 45 4d 50 44 42 20 31  ne OMIT_TEMPDB 1
4700: 0a 23 65 6c 73 65 0a 23 64 65 66 69 6e 65 20 4f  .#else.#define O
4710: 4d 49 54 5f 54 45 4d 50 44 42 20 30 0a 23 65 6e  MIT_TEMPDB 0.#en
4720: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 22  dif../*.** The "
4730: 66 69 6c 65 20 66 6f 72 6d 61 74 22 20 6e 75 6d  file format" num
4740: 62 65 72 20 69 73 20 61 6e 20 69 6e 74 65 67 65  ber is an intege
4750: 72 20 74 68 61 74 20 69 73 20 69 6e 63 72 65 6d  r that is increm
4760: 65 6e 74 65 64 20 77 68 65 6e 65 76 65 72 0a 2a  ented whenever.*
4770: 2a 20 74 68 65 20 56 44 42 45 2d 6c 65 76 65 6c  * the VDBE-level
4780: 20 66 69 6c 65 20 66 6f 72 6d 61 74 20 63 68 61   file format cha
4790: 6e 67 65 73 2e 20 20 54 68 65 20 66 6f 6c 6c 6f  nges.  The follo
47a0: 77 69 6e 67 20 6d 61 63 72 6f 73 20 64 65 66 69  wing macros defi
47b0: 6e 65 20 74 68 65 0a 2a 2a 20 74 68 65 20 64 65  ne the.** the de
47c0: 66 61 75 6c 74 20 66 69 6c 65 20 66 6f 72 6d 61  fault file forma
47d0: 74 20 66 6f 72 20 6e 65 77 20 64 61 74 61 62 61  t for new databa
47e0: 73 65 73 20 61 6e 64 20 74 68 65 20 6d 61 78 69  ses and the maxi
47f0: 6d 75 6d 20 66 69 6c 65 20 66 6f 72 6d 61 74 0a  mum file format.
4800: 2a 2a 20 74 68 61 74 20 74 68 65 20 6c 69 62 72  ** that the libr
4810: 61 72 79 20 63 61 6e 20 72 65 61 64 2e 0a 2a 2f  ary can read..*/
4820: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
4830: 4d 41 58 5f 46 49 4c 45 5f 46 4f 52 4d 41 54 20  MAX_FILE_FORMAT 
4840: 34 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  4.#ifndef SQLITE
4850: 5f 44 45 46 41 55 4c 54 5f 46 49 4c 45 5f 46 4f  _DEFAULT_FILE_FO
4860: 52 4d 41 54 0a 23 20 64 65 66 69 6e 65 20 53 51  RMAT.# define SQ
4870: 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 46 49 4c  LITE_DEFAULT_FIL
4880: 45 5f 46 4f 52 4d 41 54 20 34 0a 23 65 6e 64 69  E_FORMAT 4.#endi
4890: 66 0a 0a 2f 2a 0a 2a 2a 20 44 65 74 65 72 6d 69  f../*.** Determi
48a0: 6e 65 20 77 68 65 74 68 65 72 20 74 72 69 67 67  ne whether trigg
48b0: 65 72 73 20 61 72 65 20 72 65 63 75 72 73 69 76  ers are recursiv
48c0: 65 20 62 79 20 64 65 66 61 75 6c 74 2e 20 20 54  e by default.  T
48d0: 68 69 73 20 63 61 6e 20 62 65 0a 2a 2a 20 63 68  his can be.** ch
48e0: 61 6e 67 65 64 20 61 74 20 72 75 6e 2d 74 69 6d  anged at run-tim
48f0: 65 20 75 73 69 6e 67 20 61 20 70 72 61 67 6d 61  e using a pragma
4900: 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c  ..*/.#ifndef SQL
4910: 49 54 45 5f 44 45 46 41 55 4c 54 5f 52 45 43 55  ITE_DEFAULT_RECU
4920: 52 53 49 56 45 5f 54 52 49 47 47 45 52 53 0a 23  RSIVE_TRIGGERS.#
4930: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44   define SQLITE_D
4940: 45 46 41 55 4c 54 5f 52 45 43 55 52 53 49 56 45  EFAULT_RECURSIVE
4950: 5f 54 52 49 47 47 45 52 53 20 30 0a 23 65 6e 64  _TRIGGERS 0.#end
4960: 69 66 0a 0a 2f 2a 0a 2a 2a 20 50 72 6f 76 69 64  if../*.** Provid
4970: 65 20 61 20 64 65 66 61 75 6c 74 20 76 61 6c 75  e a default valu
4980: 65 20 66 6f 72 20 53 51 4c 49 54 45 5f 54 45 4d  e for SQLITE_TEM
4990: 50 5f 53 54 4f 52 45 20 69 6e 20 63 61 73 65 20  P_STORE in case 
49a0: 69 74 20 69 73 20 6e 6f 74 20 73 70 65 63 69 66  it is not specif
49b0: 69 65 64 0a 2a 2a 20 6f 6e 20 74 68 65 20 63 6f  ied.** on the co
49c0: 6d 6d 61 6e 64 2d 6c 69 6e 65 0a 2a 2f 0a 23 69  mmand-line.*/.#i
49d0: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 54 45 4d  fndef SQLITE_TEM
49e0: 50 5f 53 54 4f 52 45 0a 23 20 64 65 66 69 6e 65  P_STORE.# define
49f0: 20 53 51 4c 49 54 45 5f 54 45 4d 50 5f 53 54 4f   SQLITE_TEMP_STO
4a00: 52 45 20 31 0a 23 20 64 65 66 69 6e 65 20 53 51  RE 1.# define SQ
4a10: 4c 49 54 45 5f 54 45 4d 50 5f 53 54 4f 52 45 5f  LITE_TEMP_STORE_
4a20: 78 63 20 31 20 20 2f 2a 20 45 78 63 6c 75 64 65  xc 1  /* Exclude
4a30: 20 66 72 6f 6d 20 63 74 69 6d 65 2e 63 20 2a 2f   from ctime.c */
4a40: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49  .#endif../*.** I
4a50: 66 20 6e 6f 20 76 61 6c 75 65 20 68 61 73 20 62  f no value has b
4a60: 65 65 6e 20 70 72 6f 76 69 64 65 64 20 66 6f 72  een provided for
4a70: 20 53 51 4c 49 54 45 5f 4d 41 58 5f 57 4f 52 4b   SQLITE_MAX_WORK
4a80: 45 52 5f 54 48 52 45 41 44 53 2c 20 6f 72 20 69  ER_THREADS, or i
4a90: 66 0a 2a 2a 20 53 51 4c 49 54 45 5f 54 45 4d 50  f.** SQLITE_TEMP
4aa0: 5f 53 54 4f 52 45 20 69 73 20 73 65 74 20 74 6f  _STORE is set to
4ab0: 20 33 20 28 6e 65 76 65 72 20 75 73 65 20 74 65   3 (never use te
4ac0: 6d 70 6f 72 61 72 79 20 66 69 6c 65 73 29 2c 20  mporary files), 
4ad0: 73 65 74 20 69 74 0a 2a 2a 20 74 6f 20 7a 65 72  set it.** to zer
4ae0: 6f 2e 0a 2a 2f 0a 23 69 66 20 53 51 4c 49 54 45  o..*/.#if SQLITE
4af0: 5f 54 45 4d 50 5f 53 54 4f 52 45 3d 3d 33 20 7c  _TEMP_STORE==3 |
4b00: 7c 20 53 51 4c 49 54 45 5f 54 48 52 45 41 44 53  | SQLITE_THREADS
4b10: 41 46 45 3d 3d 30 0a 23 20 75 6e 64 65 66 20 53  AFE==0.# undef S
4b20: 51 4c 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52  QLITE_MAX_WORKER
4b30: 5f 54 48 52 45 41 44 53 0a 23 20 64 65 66 69 6e  _THREADS.# defin
4b40: 65 20 53 51 4c 49 54 45 5f 4d 41 58 5f 57 4f 52  e SQLITE_MAX_WOR
4b50: 4b 45 52 5f 54 48 52 45 41 44 53 20 30 0a 23 65  KER_THREADS 0.#e
4b60: 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c  ndif.#ifndef SQL
4b70: 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54  ITE_MAX_WORKER_T
4b80: 48 52 45 41 44 53 0a 23 20 64 65 66 69 6e 65 20  HREADS.# define 
4b90: 53 51 4c 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45  SQLITE_MAX_WORKE
4ba0: 52 5f 54 48 52 45 41 44 53 20 38 0a 23 65 6e 64  R_THREADS 8.#end
4bb0: 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  if.#ifndef SQLIT
4bc0: 45 5f 44 45 46 41 55 4c 54 5f 57 4f 52 4b 45 52  E_DEFAULT_WORKER
4bd0: 5f 54 48 52 45 41 44 53 0a 23 20 64 65 66 69 6e  _THREADS.# defin
4be0: 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54  e SQLITE_DEFAULT
4bf0: 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41 44 53 20  _WORKER_THREADS 
4c00: 30 0a 23 65 6e 64 69 66 0a 23 69 66 20 53 51 4c  0.#endif.#if SQL
4c10: 49 54 45 5f 44 45 46 41 55 4c 54 5f 57 4f 52 4b  ITE_DEFAULT_WORK
4c20: 45 52 5f 54 48 52 45 41 44 53 3e 53 51 4c 49 54  ER_THREADS>SQLIT
4c30: 45 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54 48 52  E_MAX_WORKER_THR
4c40: 45 41 44 53 0a 23 20 75 6e 64 65 66 20 53 51 4c  EADS.# undef SQL
4c50: 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54  ITE_MAX_WORKER_T
4c60: 48 52 45 41 44 53 0a 23 20 64 65 66 69 6e 65 20  HREADS.# define 
4c70: 53 51 4c 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45  SQLITE_MAX_WORKE
4c80: 52 5f 54 48 52 45 41 44 53 20 53 51 4c 49 54 45  R_THREADS SQLITE
4c90: 5f 44 45 46 41 55 4c 54 5f 57 4f 52 4b 45 52 5f  _DEFAULT_WORKER_
4ca0: 54 48 52 45 41 44 53 0a 23 65 6e 64 69 66 0a 0a  THREADS.#endif..
4cb0: 2f 2a 0a 2a 2a 20 54 68 65 20 64 65 66 61 75 6c  /*.** The defaul
4cc0: 74 20 69 6e 69 74 69 61 6c 20 61 6c 6c 6f 63 61  t initial alloca
4cd0: 74 69 6f 6e 20 66 6f 72 20 74 68 65 20 70 61 67  tion for the pag
4ce0: 65 63 61 63 68 65 20 77 68 65 6e 20 75 73 69 6e  ecache when usin
4cf0: 67 20 73 65 70 61 72 61 74 65 0a 2a 2a 20 70 61  g separate.** pa
4d00: 67 65 63 61 63 68 65 73 20 66 6f 72 20 65 61 63  gecaches for eac
4d10: 68 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65  h database conne
4d20: 63 74 69 6f 6e 2e 20 20 41 20 70 6f 73 69 74 69  ction.  A positi
4d30: 76 65 20 6e 75 6d 62 65 72 20 69 73 20 74 68 65  ve number is the
4d40: 0a 2a 2a 20 6e 75 6d 62 65 72 20 6f 66 20 70 61  .** number of pa
4d50: 67 65 73 2e 20 20 41 20 6e 65 67 61 74 69 76 65  ges.  A negative
4d60: 20 6e 75 6d 62 65 72 20 4e 20 74 72 61 6e 73 6c   number N transl
4d70: 61 74 69 6f 6e 73 20 6d 65 61 6e 73 20 74 68 61  ations means tha
4d80: 74 20 61 20 62 75 66 66 65 72 0a 2a 2a 20 6f 66  t a buffer.** of
4d90: 20 2d 31 30 32 34 2a 4e 20 62 79 74 65 73 20 69   -1024*N bytes i
4da0: 73 20 61 6c 6c 6f 63 61 74 65 64 20 61 6e 64 20  s allocated and 
4db0: 75 73 65 64 20 66 6f 72 20 61 73 20 6d 61 6e 79  used for as many
4dc0: 20 70 61 67 65 73 20 61 73 20 69 74 20 77 69 6c   pages as it wil
4dd0: 6c 20 68 6f 6c 64 2e 0a 2a 2f 0a 23 69 66 6e 64  l hold..*/.#ifnd
4de0: 65 66 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c  ef SQLITE_DEFAUL
4df0: 54 5f 50 43 41 43 48 45 5f 49 4e 49 54 53 5a 0a  T_PCACHE_INITSZ.
4e00: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
4e10: 44 45 46 41 55 4c 54 5f 50 43 41 43 48 45 5f 49  DEFAULT_PCACHE_I
4e20: 4e 49 54 53 5a 20 31 30 30 0a 23 65 6e 64 69 66  NITSZ 100.#endif
4e30: 0a 0a 2f 2a 0a 2a 2a 20 47 43 43 20 64 6f 65 73  ../*.** GCC does
4e40: 20 6e 6f 74 20 64 65 66 69 6e 65 20 74 68 65 20   not define the 
4e50: 6f 66 66 73 65 74 6f 66 28 29 20 6d 61 63 72 6f  offsetof() macro
4e60: 20 73 6f 20 77 65 27 6c 6c 20 68 61 76 65 20 74   so we'll have t
4e70: 6f 20 64 6f 20 69 74 0a 2a 2a 20 6f 75 72 73 65  o do it.** ourse
4e80: 6c 76 65 73 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66  lves..*/.#ifndef
4e90: 20 6f 66 66 73 65 74 6f 66 0a 23 64 65 66 69 6e   offsetof.#defin
4ea0: 65 20 6f 66 66 73 65 74 6f 66 28 53 54 52 55 43  e offsetof(STRUC
4eb0: 54 55 52 45 2c 46 49 45 4c 44 29 20 28 28 69 6e  TURE,FIELD) ((in
4ec0: 74 29 28 28 63 68 61 72 2a 29 26 28 28 53 54 52  t)((char*)&((STR
4ed0: 55 43 54 55 52 45 2a 29 30 29 2d 3e 46 49 45 4c  UCTURE*)0)->FIEL
4ee0: 44 29 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  D)).#endif../*.*
4ef0: 2a 20 4d 61 63 72 6f 73 20 74 6f 20 63 6f 6d 70  * Macros to comp
4f00: 75 74 65 20 6d 69 6e 69 6d 75 6d 20 61 6e 64 20  ute minimum and 
4f10: 6d 61 78 69 6d 75 6d 20 6f 66 20 74 77 6f 20 6e  maximum of two n
4f20: 75 6d 62 65 72 73 2e 0a 2a 2f 0a 23 69 66 6e 64  umbers..*/.#ifnd
4f30: 65 66 20 4d 49 4e 0a 23 20 64 65 66 69 6e 65 20  ef MIN.# define 
4f40: 4d 49 4e 28 41 2c 42 29 20 28 28 41 29 3c 28 42  MIN(A,B) ((A)<(B
4f50: 29 3f 28 41 29 3a 28 42 29 29 0a 23 65 6e 64 69  )?(A):(B)).#endi
4f60: 66 0a 23 69 66 6e 64 65 66 20 4d 41 58 0a 23 20  f.#ifndef MAX.# 
4f70: 64 65 66 69 6e 65 20 4d 41 58 28 41 2c 42 29 20  define MAX(A,B) 
4f80: 28 28 41 29 3e 28 42 29 3f 28 41 29 3a 28 42 29  ((A)>(B)?(A):(B)
4f90: 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  ).#endif../*.** 
4fa0: 53 77 61 70 20 74 77 6f 20 6f 62 6a 65 63 74 73  Swap two objects
4fb0: 20 6f 66 20 74 79 70 65 20 54 59 50 45 2e 0a 2a   of type TYPE..*
4fc0: 2f 0a 23 64 65 66 69 6e 65 20 53 57 41 50 28 54  /.#define SWAP(T
4fd0: 59 50 45 2c 41 2c 42 29 20 7b 54 59 50 45 20 74  YPE,A,B) {TYPE t
4fe0: 3d 41 3b 20 41 3d 42 3b 20 42 3d 74 3b 7d 0a 0a  =A; A=B; B=t;}..
4ff0: 2f 2a 0a 2a 2a 20 43 68 65 63 6b 20 74 6f 20 73  /*.** Check to s
5000: 65 65 20 69 66 20 74 68 69 73 20 6d 61 63 68 69  ee if this machi
5010: 6e 65 20 75 73 65 73 20 45 42 43 44 49 43 2e 20  ne uses EBCDIC. 
5020: 20 28 59 65 73 2c 20 62 65 6c 69 65 76 65 20 69   (Yes, believe i
5030: 74 20 6f 72 0a 2a 2a 20 6e 6f 74 2c 20 74 68 65  t or.** not, the
5040: 72 65 20 61 72 65 20 73 74 69 6c 6c 20 6d 61 63  re are still mac
5050: 68 69 6e 65 73 20 6f 75 74 20 74 68 65 72 65 20  hines out there 
5060: 74 68 61 74 20 75 73 65 20 45 42 43 44 49 43 2e  that use EBCDIC.
5070: 29 0a 2a 2f 0a 23 69 66 20 27 41 27 20 3d 3d 20  ).*/.#if 'A' == 
5080: 27 5c 33 30 31 27 0a 23 20 64 65 66 69 6e 65 20  '\301'.# define 
5090: 53 51 4c 49 54 45 5f 45 42 43 44 49 43 20 31 0a  SQLITE_EBCDIC 1.
50a0: 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 53  #else.# define S
50b0: 51 4c 49 54 45 5f 41 53 43 49 49 20 31 0a 23 65  QLITE_ASCII 1.#e
50c0: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 6e 74 65  ndif../*.** Inte
50d0: 67 65 72 73 20 6f 66 20 6b 6e 6f 77 6e 20 73 69  gers of known si
50e0: 7a 65 73 2e 20 20 54 68 65 73 65 20 74 79 70 65  zes.  These type
50f0: 64 65 66 73 20 6d 69 67 68 74 20 63 68 61 6e 67  defs might chang
5100: 65 20 66 6f 72 20 61 72 63 68 69 74 65 63 74 75  e for architectu
5110: 72 65 73 0a 2a 2a 20 77 68 65 72 65 20 74 68 65  res.** where the
5120: 20 73 69 7a 65 73 20 76 65 72 79 2e 20 20 50 72   sizes very.  Pr
5130: 65 70 72 6f 63 65 73 73 6f 72 20 6d 61 63 72 6f  eprocessor macro
5140: 73 20 61 72 65 20 61 76 61 69 6c 61 62 6c 65 20  s are available 
5150: 73 6f 20 74 68 61 74 20 74 68 65 0a 2a 2a 20 74  so that the.** t
5160: 79 70 65 73 20 63 61 6e 20 62 65 20 63 6f 6e 76  ypes can be conv
5170: 65 6e 69 65 6e 74 6c 79 20 72 65 64 65 66 69 6e  eniently redefin
5180: 65 64 20 61 74 20 63 6f 6d 70 69 6c 65 2d 74 79  ed at compile-ty
5190: 70 65 2e 20 20 4c 69 6b 65 20 74 68 69 73 3a 0a  pe.  Like this:.
51a0: 2a 2a 0a 2a 2a 20 20 20 20 20 20 20 20 20 63 63  **.**         cc
51b0: 20 27 2d 44 55 49 4e 54 50 54 52 5f 54 59 50 45   '-DUINTPTR_TYPE
51c0: 3d 6c 6f 6e 67 20 6c 6f 6e 67 20 69 6e 74 27 20  =long long int' 
51d0: 2e 2e 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 55  ....*/.#ifndef U
51e0: 49 4e 54 33 32 5f 54 59 50 45 0a 23 20 69 66 64  INT32_TYPE.# ifd
51f0: 65 66 20 48 41 56 45 5f 55 49 4e 54 33 32 5f 54  ef HAVE_UINT32_T
5200: 0a 23 20 20 64 65 66 69 6e 65 20 55 49 4e 54 33  .#  define UINT3
5210: 32 5f 54 59 50 45 20 75 69 6e 74 33 32 5f 74 0a  2_TYPE uint32_t.
5220: 23 20 65 6c 73 65 0a 23 20 20 64 65 66 69 6e 65  # else.#  define
5230: 20 55 49 4e 54 33 32 5f 54 59 50 45 20 75 6e 73   UINT32_TYPE uns
5240: 69 67 6e 65 64 20 69 6e 74 0a 23 20 65 6e 64 69  igned int.# endi
5250: 66 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66  f.#endif.#ifndef
5260: 20 55 49 4e 54 31 36 5f 54 59 50 45 0a 23 20 69   UINT16_TYPE.# i
5270: 66 64 65 66 20 48 41 56 45 5f 55 49 4e 54 31 36  fdef HAVE_UINT16
5280: 5f 54 0a 23 20 20 64 65 66 69 6e 65 20 55 49 4e  _T.#  define UIN
5290: 54 31 36 5f 54 59 50 45 20 75 69 6e 74 31 36 5f  T16_TYPE uint16_
52a0: 74 0a 23 20 65 6c 73 65 0a 23 20 20 64 65 66 69  t.# else.#  defi
52b0: 6e 65 20 55 49 4e 54 31 36 5f 54 59 50 45 20 75  ne UINT16_TYPE u
52c0: 6e 73 69 67 6e 65 64 20 73 68 6f 72 74 20 69 6e  nsigned short in
52d0: 74 0a 23 20 65 6e 64 69 66 0a 23 65 6e 64 69 66  t.# endif.#endif
52e0: 0a 23 69 66 6e 64 65 66 20 49 4e 54 31 36 5f 54  .#ifndef INT16_T
52f0: 59 50 45 0a 23 20 69 66 64 65 66 20 48 41 56 45  YPE.# ifdef HAVE
5300: 5f 49 4e 54 31 36 5f 54 0a 23 20 20 64 65 66 69  _INT16_T.#  defi
5310: 6e 65 20 49 4e 54 31 36 5f 54 59 50 45 20 69 6e  ne INT16_TYPE in
5320: 74 31 36 5f 74 0a 23 20 65 6c 73 65 0a 23 20 20  t16_t.# else.#  
5330: 64 65 66 69 6e 65 20 49 4e 54 31 36 5f 54 59 50  define INT16_TYP
5340: 45 20 73 68 6f 72 74 20 69 6e 74 0a 23 20 65 6e  E short int.# en
5350: 64 69 66 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64  dif.#endif.#ifnd
5360: 65 66 20 55 49 4e 54 38 5f 54 59 50 45 0a 23 20  ef UINT8_TYPE.# 
5370: 69 66 64 65 66 20 48 41 56 45 5f 55 49 4e 54 38  ifdef HAVE_UINT8
5380: 5f 54 0a 23 20 20 64 65 66 69 6e 65 20 55 49 4e  _T.#  define UIN
5390: 54 38 5f 54 59 50 45 20 75 69 6e 74 38 5f 74 0a  T8_TYPE uint8_t.
53a0: 23 20 65 6c 73 65 0a 23 20 20 64 65 66 69 6e 65  # else.#  define
53b0: 20 55 49 4e 54 38 5f 54 59 50 45 20 75 6e 73 69   UINT8_TYPE unsi
53c0: 67 6e 65 64 20 63 68 61 72 0a 23 20 65 6e 64 69  gned char.# endi
53d0: 66 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66  f.#endif.#ifndef
53e0: 20 49 4e 54 38 5f 54 59 50 45 0a 23 20 69 66 64   INT8_TYPE.# ifd
53f0: 65 66 20 48 41 56 45 5f 49 4e 54 38 5f 54 0a 23  ef HAVE_INT8_T.#
5400: 20 20 64 65 66 69 6e 65 20 49 4e 54 38 5f 54 59    define INT8_TY
5410: 50 45 20 69 6e 74 38 5f 74 0a 23 20 65 6c 73 65  PE int8_t.# else
5420: 0a 23 20 20 64 65 66 69 6e 65 20 49 4e 54 38 5f  .#  define INT8_
5430: 54 59 50 45 20 73 69 67 6e 65 64 20 63 68 61 72  TYPE signed char
5440: 0a 23 20 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a  .# endif.#endif.
5450: 23 69 66 6e 64 65 66 20 4c 4f 4e 47 44 4f 55 42  #ifndef LONGDOUB
5460: 4c 45 5f 54 59 50 45 0a 23 20 64 65 66 69 6e 65  LE_TYPE.# define
5470: 20 4c 4f 4e 47 44 4f 55 42 4c 45 5f 54 59 50 45   LONGDOUBLE_TYPE
5480: 20 6c 6f 6e 67 20 64 6f 75 62 6c 65 0a 23 65 6e   long double.#en
5490: 64 69 66 0a 74 79 70 65 64 65 66 20 73 71 6c 69  dif.typedef sqli
54a0: 74 65 5f 69 6e 74 36 34 20 69 36 34 3b 20 20 20  te_int64 i64;   
54b0: 20 20 20 20 20 20 20 2f 2a 20 38 2d 62 79 74 65         /* 8-byte
54c0: 20 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20   signed integer 
54d0: 2a 2f 0a 74 79 70 65 64 65 66 20 73 71 6c 69 74  */.typedef sqlit
54e0: 65 5f 75 69 6e 74 36 34 20 75 36 34 3b 20 20 20  e_uint64 u64;   
54f0: 20 20 20 20 20 20 2f 2a 20 38 2d 62 79 74 65 20        /* 8-byte 
5500: 75 6e 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72  unsigned integer
5510: 20 2a 2f 0a 74 79 70 65 64 65 66 20 55 49 4e 54   */.typedef UINT
5520: 33 32 5f 54 59 50 45 20 75 33 32 3b 20 20 20 20  32_TYPE u32;    
5530: 20 20 20 20 20 20 20 2f 2a 20 34 2d 62 79 74 65         /* 4-byte
5540: 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 65 67 65   unsigned intege
5550: 72 20 2a 2f 0a 74 79 70 65 64 65 66 20 55 49 4e  r */.typedef UIN
5560: 54 31 36 5f 54 59 50 45 20 75 31 36 3b 20 20 20  T16_TYPE u16;   
5570: 20 20 20 20 20 20 20 20 2f 2a 20 32 2d 62 79 74          /* 2-byt
5580: 65 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 65 67  e unsigned integ
5590: 65 72 20 2a 2f 0a 74 79 70 65 64 65 66 20 49 4e  er */.typedef IN
55a0: 54 31 36 5f 54 59 50 45 20 69 31 36 3b 20 20 20  T16_TYPE i16;   
55b0: 20 20 20 20 20 20 20 20 20 2f 2a 20 32 2d 62 79           /* 2-by
55c0: 74 65 20 73 69 67 6e 65 64 20 69 6e 74 65 67 65  te signed intege
55d0: 72 20 2a 2f 0a 74 79 70 65 64 65 66 20 55 49 4e  r */.typedef UIN
55e0: 54 38 5f 54 59 50 45 20 75 38 3b 20 20 20 20 20  T8_TYPE u8;     
55f0: 20 20 20 20 20 20 20 20 2f 2a 20 31 2d 62 79 74          /* 1-byt
5600: 65 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 65 67  e unsigned integ
5610: 65 72 20 2a 2f 0a 74 79 70 65 64 65 66 20 49 4e  er */.typedef IN
5620: 54 38 5f 54 59 50 45 20 69 38 3b 20 20 20 20 20  T8_TYPE i8;     
5630: 20 20 20 20 20 20 20 20 20 2f 2a 20 31 2d 62 79           /* 1-by
5640: 74 65 20 73 69 67 6e 65 64 20 69 6e 74 65 67 65  te signed intege
5650: 72 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 53 51 4c 49  r */../*.** SQLI
5660: 54 45 5f 4d 41 58 5f 55 33 32 20 69 73 20 61 20  TE_MAX_U32 is a 
5670: 75 36 34 20 63 6f 6e 73 74 61 6e 74 20 74 68 61  u64 constant tha
5680: 74 20 69 73 20 74 68 65 20 6d 61 78 69 6d 75 6d  t is the maximum
5690: 20 75 36 34 20 76 61 6c 75 65 0a 2a 2a 20 74 68   u64 value.** th
56a0: 61 74 20 63 61 6e 20 62 65 20 73 74 6f 72 65 64  at can be stored
56b0: 20 69 6e 20 61 20 75 33 32 20 77 69 74 68 6f 75   in a u32 withou
56c0: 74 20 6c 6f 73 73 20 6f 66 20 64 61 74 61 2e 20  t loss of data. 
56d0: 20 54 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69 73   The value.** is
56e0: 20 30 78 30 30 30 30 30 30 30 30 66 66 66 66 66   0x00000000fffff
56f0: 66 66 66 2e 20 20 42 75 74 20 62 65 63 61 75 73  fff.  But becaus
5700: 65 20 6f 66 20 71 75 69 72 6b 73 20 6f 66 20 73  e of quirks of s
5710: 6f 6d 65 20 63 6f 6d 70 69 6c 65 72 73 2c 20 77  ome compilers, w
5720: 65 0a 2a 2a 20 68 61 76 65 20 74 6f 20 73 70 65  e.** have to spe
5730: 63 69 66 79 20 74 68 65 20 76 61 6c 75 65 20 69  cify the value i
5740: 6e 20 74 68 65 20 6c 65 73 73 20 69 6e 74 75 69  n the less intui
5750: 74 69 76 65 20 6d 61 6e 6e 65 72 20 73 68 6f 77  tive manner show
5760: 6e 3a 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  n:.*/.#define SQ
5770: 4c 49 54 45 5f 4d 41 58 5f 55 33 32 20 20 28 28  LITE_MAX_U32  ((
5780: 28 28 75 36 34 29 31 29 3c 3c 33 32 29 2d 31 29  ((u64)1)<<32)-1)
5790: 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 64 61 74 61  ../*.** The data
57a0: 74 79 70 65 20 75 73 65 64 20 74 6f 20 73 74 6f  type used to sto
57b0: 72 65 20 65 73 74 69 6d 61 74 65 73 20 6f 66 20  re estimates of 
57c0: 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f  the number of ro
57d0: 77 73 20 69 6e 20 61 0a 2a 2a 20 74 61 62 6c 65  ws in a.** table
57e0: 20 6f 72 20 69 6e 64 65 78 2e 20 20 54 68 69 73   or index.  This
57f0: 20 69 73 20 61 6e 20 75 6e 73 69 67 6e 65 64 20   is an unsigned 
5800: 69 6e 74 65 67 65 72 20 74 79 70 65 2e 20 20 46  integer type.  F
5810: 6f 72 20 39 39 2e 39 25 20 6f 66 0a 2a 2a 20 74  or 99.9% of.** t
5820: 68 65 20 77 6f 72 6c 64 2c 20 61 20 33 32 2d 62  he world, a 32-b
5830: 69 74 20 69 6e 74 65 67 65 72 20 69 73 20 73 75  it integer is su
5840: 66 66 69 63 69 65 6e 74 2e 20 20 42 75 74 20 61  fficient.  But a
5850: 20 36 34 2d 62 69 74 20 69 6e 74 65 67 65 72 0a   64-bit integer.
5860: 2a 2a 20 63 61 6e 20 62 65 20 75 73 65 64 20 61  ** can be used a
5870: 74 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 69  t compile-time i
5880: 66 20 64 65 73 69 72 65 64 2e 0a 2a 2f 0a 23 69  f desired..*/.#i
5890: 66 64 65 66 20 53 51 4c 49 54 45 5f 36 34 42 49  fdef SQLITE_64BI
58a0: 54 5f 53 54 41 54 53 0a 20 74 79 70 65 64 65 66  T_STATS. typedef
58b0: 20 75 36 34 20 74 52 6f 77 63 6e 74 3b 20 20 20   u64 tRowcnt;   
58c0: 20 2f 2a 20 36 34 2d 62 69 74 20 6f 6e 6c 79 20   /* 64-bit only 
58d0: 69 66 20 72 65 71 75 65 73 74 65 64 20 61 74 20  if requested at 
58e0: 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 2a 2f 0a  compile-time */.
58f0: 23 65 6c 73 65 0a 20 74 79 70 65 64 65 66 20 75  #else. typedef u
5900: 33 32 20 74 52 6f 77 63 6e 74 3b 20 20 20 20 2f  32 tRowcnt;    /
5910: 2a 20 33 32 2d 62 69 74 20 69 73 20 74 68 65 20  * 32-bit is the 
5920: 64 65 66 61 75 6c 74 20 2a 2f 0a 23 65 6e 64 69  default */.#endi
5930: 66 0a 0a 2f 2a 0a 2a 2a 20 45 73 74 69 6d 61 74  f../*.** Estimat
5940: 65 64 20 71 75 61 6e 74 69 74 69 65 73 20 75 73  ed quantities us
5950: 65 64 20 66 6f 72 20 71 75 65 72 79 20 70 6c 61  ed for query pla
5960: 6e 6e 69 6e 67 20 61 72 65 20 73 74 6f 72 65 64  nning are stored
5970: 20 61 73 20 31 36 2d 62 69 74 0a 2a 2a 20 6c 6f   as 16-bit.** lo
5980: 67 61 72 69 74 68 6d 73 2e 20 20 46 6f 72 20 71  garithms.  For q
5990: 75 61 6e 74 69 74 79 20 58 2c 20 74 68 65 20 76  uantity X, the v
59a0: 61 6c 75 65 20 73 74 6f 72 65 64 20 69 73 20 31  alue stored is 1
59b0: 30 2a 6c 6f 67 32 28 58 29 2e 20 20 54 68 69 73  0*log2(X).  This
59c0: 0a 2a 2a 20 67 69 76 65 73 20 61 20 70 6f 73 73  .** gives a poss
59d0: 69 62 6c 65 20 72 61 6e 67 65 20 6f 66 20 76 61  ible range of va
59e0: 6c 75 65 73 20 6f 66 20 61 70 70 72 6f 78 69 6d  lues of approxim
59f0: 61 74 65 6c 79 20 31 2e 30 65 39 38 36 20 74 6f  ately 1.0e986 to
5a00: 20 31 65 2d 39 38 36 2e 0a 2a 2a 20 42 75 74 20   1e-986..** But 
5a10: 74 68 65 20 61 6c 6c 6f 77 65 64 20 76 61 6c 75  the allowed valu
5a20: 65 73 20 61 72 65 20 22 67 72 61 69 6e 79 22 2e  es are "grainy".
5a30: 20 20 4e 6f 74 20 65 76 65 72 79 20 76 61 6c 75    Not every valu
5a40: 65 20 69 73 20 72 65 70 72 65 73 65 6e 74 61 62  e is representab
5a50: 6c 65 2e 0a 2a 2a 20 46 6f 72 20 65 78 61 6d 70  le..** For examp
5a60: 6c 65 2c 20 71 75 61 6e 74 69 74 69 65 73 20 31  le, quantities 1
5a70: 36 20 61 6e 64 20 31 37 20 61 72 65 20 62 6f 74  6 and 17 are bot
5a80: 68 20 72 65 70 72 65 73 65 6e 74 65 64 20 62 79  h represented by
5a90: 20 61 20 4c 6f 67 45 73 74 0a 2a 2a 20 6f 66 20   a LogEst.** of 
5aa0: 34 30 2e 20 20 48 6f 77 65 76 65 72 2c 20 73 69  40.  However, si
5ab0: 6e 63 65 20 4c 6f 67 45 73 74 20 71 75 61 6e 74  nce LogEst quant
5ac0: 69 74 69 65 73 20 61 72 65 20 73 75 70 70 6f 73  ities are suppos
5ad0: 65 20 74 6f 20 62 65 20 65 73 74 69 6d 61 74 65  e to be estimate
5ae0: 73 2c 0a 2a 2a 20 6e 6f 74 20 65 78 61 63 74 20  s,.** not exact 
5af0: 76 61 6c 75 65 73 2c 20 74 68 69 73 20 69 6d 70  values, this imp
5b00: 72 65 63 69 73 69 6f 6e 20 69 73 20 6e 6f 74 20  recision is not 
5b10: 61 20 70 72 6f 62 6c 65 6d 2e 0a 2a 2a 0a 2a 2a  a problem..**.**
5b20: 20 22 4c 6f 67 45 73 74 22 20 69 73 20 73 68 6f   "LogEst" is sho
5b30: 72 74 20 66 6f 72 20 22 4c 6f 67 61 72 69 74 68  rt for "Logarith
5b40: 6d 69 63 20 45 73 74 69 6d 61 74 65 22 2e 0a 2a  mic Estimate"..*
5b50: 2a 0a 2a 2a 20 45 78 61 6d 70 6c 65 73 3a 0a 2a  *.** Examples:.*
5b60: 2a 20 20 20 20 20 20 31 20 2d 3e 20 30 20 20 20  *      1 -> 0   
5b70: 20 20 20 20 20 20 20 20 20 20 20 32 30 20 2d 3e             20 ->
5b80: 20 34 33 20 20 20 20 20 20 20 20 20 20 31 30 30   43          100
5b90: 30 30 20 2d 3e 20 31 33 32 0a 2a 2a 20 20 20 20  00 -> 132.**    
5ba0: 20 20 32 20 2d 3e 20 31 30 20 20 20 20 20 20 20    2 -> 10       
5bb0: 20 20 20 20 20 20 32 35 20 2d 3e 20 34 36 20 20        25 -> 46  
5bc0: 20 20 20 20 20 20 20 20 32 35 30 30 30 20 2d 3e          25000 ->
5bd0: 20 31 34 36 0a 2a 2a 20 20 20 20 20 20 33 20 2d   146.**      3 -
5be0: 3e 20 31 36 20 20 20 20 20 20 20 20 20 20 20 20  > 16            
5bf0: 31 30 30 20 2d 3e 20 36 36 20 20 20 20 20 20 20  100 -> 66       
5c00: 20 31 30 30 30 30 30 30 20 2d 3e 20 31 39 39 0a   1000000 -> 199.
5c10: 2a 2a 20 20 20 20 20 20 34 20 2d 3e 20 32 30 20  **      4 -> 20 
5c20: 20 20 20 20 20 20 20 20 20 20 31 30 30 30 20 2d            1000 -
5c30: 3e 20 39 39 20 20 20 20 20 20 20 20 31 30 34 38  > 99        1048
5c40: 35 37 36 20 2d 3e 20 32 30 30 0a 2a 2a 20 20 20  576 -> 200.**   
5c50: 20 20 31 30 20 2d 3e 20 33 33 20 20 20 20 20 20    10 -> 33      
5c60: 20 20 20 20 20 31 30 32 34 20 2d 3e 20 31 30 30       1024 -> 100
5c70: 20 20 20 20 34 32 39 34 39 36 37 32 39 36 20 2d      4294967296 -
5c80: 3e 20 33 32 30 0a 2a 2a 0a 2a 2a 20 54 68 65 20  > 320.**.** The 
5c90: 4c 6f 67 45 73 74 20 63 61 6e 20 62 65 20 6e 65  LogEst can be ne
5ca0: 67 61 74 69 76 65 20 74 6f 20 69 6e 64 69 63 61  gative to indica
5cb0: 74 65 20 66 72 61 63 74 69 6f 6e 61 6c 20 76 61  te fractional va
5cc0: 6c 75 65 73 2e 0a 2a 2a 20 45 78 61 6d 70 6c 65  lues..** Example
5cd0: 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 30 2e 35 20  s:.**.**    0.5 
5ce0: 2d 3e 20 2d 31 30 20 20 20 20 20 20 20 20 20 20  -> -10          
5cf0: 20 30 2e 31 20 2d 3e 20 2d 33 33 20 20 20 20 20   0.1 -> -33     
5d00: 20 20 20 30 2e 30 36 32 35 20 2d 3e 20 2d 34 30     0.0625 -> -40
5d10: 0a 2a 2f 0a 74 79 70 65 64 65 66 20 49 4e 54 31  .*/.typedef INT1
5d20: 36 5f 54 59 50 45 20 4c 6f 67 45 73 74 3b 0a 0a  6_TYPE LogEst;..
5d30: 2f 2a 0a 2a 2a 20 53 65 74 20 74 68 65 20 53 51  /*.** Set the SQ
5d40: 4c 49 54 45 5f 50 54 52 53 49 5a 45 20 6d 61 63  LITE_PTRSIZE mac
5d50: 72 6f 20 74 6f 20 74 68 65 20 6e 75 6d 62 65 72  ro to the number
5d60: 20 6f 66 20 62 79 74 65 73 20 69 6e 20 61 20 70   of bytes in a p
5d70: 6f 69 6e 74 65 72 0a 2a 2f 0a 23 69 66 6e 64 65  ointer.*/.#ifnde
5d80: 66 20 53 51 4c 49 54 45 5f 50 54 52 53 49 5a 45  f SQLITE_PTRSIZE
5d90: 0a 23 20 69 66 20 64 65 66 69 6e 65 64 28 5f 5f  .# if defined(__
5da0: 53 49 5a 45 4f 46 5f 50 4f 49 4e 54 45 52 5f 5f  SIZEOF_POINTER__
5db0: 29 0a 23 20 20 20 64 65 66 69 6e 65 20 53 51 4c  ).#   define SQL
5dc0: 49 54 45 5f 50 54 52 53 49 5a 45 20 5f 5f 53 49  ITE_PTRSIZE __SI
5dd0: 5a 45 4f 46 5f 50 4f 49 4e 54 45 52 5f 5f 0a 23  ZEOF_POINTER__.#
5de0: 20 65 6c 69 66 20 64 65 66 69 6e 65 64 28 69 33   elif defined(i3
5df0: 38 36 29 20 20 20 20 20 7c 7c 20 64 65 66 69 6e  86)     || defin
5e00: 65 64 28 5f 5f 69 33 38 36 5f 5f 29 20 20 20 7c  ed(__i386__)   |
5e10: 7c 20 64 65 66 69 6e 65 64 28 5f 4d 5f 49 58 38  | defined(_M_IX8
5e20: 36 29 20 7c 7c 20 20 20 20 5c 0a 20 20 20 20 20  6) ||    \.     
5e30: 20 20 64 65 66 69 6e 65 64 28 5f 4d 5f 41 52 4d    defined(_M_ARM
5e40: 29 20 20 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f  )   || defined(_
5e50: 5f 61 72 6d 5f 5f 29 20 20 20 20 7c 7c 20 64 65  _arm__)    || de
5e60: 66 69 6e 65 64 28 5f 5f 78 38 36 29 0a 23 20 20  fined(__x86).#  
5e70: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50   define SQLITE_P
5e80: 54 52 53 49 5a 45 20 34 0a 23 20 65 6c 73 65 0a  TRSIZE 4.# else.
5e90: 23 20 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54  #   define SQLIT
5ea0: 45 5f 50 54 52 53 49 5a 45 20 38 0a 23 20 65 6e  E_PTRSIZE 8.# en
5eb0: 64 69 66 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 54  dif.#endif../* T
5ec0: 68 65 20 75 70 74 72 20 74 79 70 65 20 69 73 20  he uptr type is 
5ed0: 61 6e 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 65  an unsigned inte
5ee0: 67 65 72 20 6c 61 72 67 65 20 65 6e 6f 75 67 68  ger large enough
5ef0: 20 74 6f 20 68 6f 6c 64 20 61 20 70 6f 69 6e 74   to hold a point
5f00: 65 72 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65  er.*/.#if define
5f10: 64 28 48 41 56 45 5f 53 54 44 49 4e 54 5f 48 29  d(HAVE_STDINT_H)
5f20: 0a 20 20 74 79 70 65 64 65 66 20 75 69 6e 74 70  .  typedef uintp
5f30: 74 72 5f 74 20 75 70 74 72 3b 0a 23 65 6c 69 66  tr_t uptr;.#elif
5f40: 20 53 51 4c 49 54 45 5f 50 54 52 53 49 5a 45 3d   SQLITE_PTRSIZE=
5f50: 3d 34 0a 20 20 74 79 70 65 64 65 66 20 75 33 32  =4.  typedef u32
5f60: 20 75 70 74 72 3b 0a 23 65 6c 73 65 0a 20 20 74   uptr;.#else.  t
5f70: 79 70 65 64 65 66 20 75 36 34 20 75 70 74 72 3b  ypedef u64 uptr;
5f80: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54  .#endif../*.** T
5f90: 68 65 20 53 51 4c 49 54 45 5f 57 49 54 48 49 4e  he SQLITE_WITHIN
5fa0: 28 50 2c 53 2c 45 29 20 6d 61 63 72 6f 20 63 68  (P,S,E) macro ch
5fb0: 65 63 6b 73 20 74 6f 20 73 65 65 20 69 66 20 70  ecks to see if p
5fc0: 6f 69 6e 74 65 72 20 50 20 70 6f 69 6e 74 73 20  ointer P points 
5fd0: 74 6f 0a 2a 2a 20 73 6f 6d 65 74 68 69 6e 67 20  to.** something 
5fe0: 62 65 74 77 65 65 6e 20 53 20 28 69 6e 63 6c 75  between S (inclu
5ff0: 73 69 76 65 29 20 61 6e 64 20 45 20 28 65 78 63  sive) and E (exc
6000: 6c 75 73 69 76 65 29 2e 0a 2a 2a 0a 2a 2a 20 49  lusive)..**.** I
6010: 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 53  n other words, S
6020: 20 69 73 20 61 20 62 75 66 66 65 72 20 61 6e 64   is a buffer and
6030: 20 45 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20   E is a pointer 
6040: 74 6f 20 74 68 65 20 66 69 72 73 74 20 62 79 74  to the first byt
6050: 65 20 61 66 74 65 72 0a 2a 2a 20 74 68 65 20 65  e after.** the e
6060: 6e 64 20 6f 66 20 62 75 66 66 65 72 20 53 2e 20  nd of buffer S. 
6070: 20 54 68 69 73 20 6d 61 63 72 6f 20 72 65 74 75   This macro retu
6080: 72 6e 73 20 74 72 75 65 20 69 66 20 50 20 70 6f  rns true if P po
6090: 69 6e 74 73 20 74 6f 20 73 6f 6d 65 74 68 69 6e  ints to somethin
60a0: 67 0a 2a 2a 20 63 6f 6e 74 61 69 6e 65 64 20 77  g.** contained w
60b0: 69 74 68 69 6e 20 74 68 65 20 62 75 66 66 65 72  ithin the buffer
60c0: 20 53 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53   S..*/.#define S
60d0: 51 4c 49 54 45 5f 57 49 54 48 49 4e 28 50 2c 53  QLITE_WITHIN(P,S
60e0: 2c 45 29 20 28 28 28 75 70 74 72 29 28 50 29 3e  ,E) (((uptr)(P)>
60f0: 3d 28 75 70 74 72 29 28 53 29 29 26 26 28 28 75  =(uptr)(S))&&((u
6100: 70 74 72 29 28 50 29 3c 28 75 70 74 72 29 28 45  ptr)(P)<(uptr)(E
6110: 29 29 29 0a 0a 0a 2f 2a 0a 2a 2a 20 4d 61 63 72  ))).../*.** Macr
6120: 6f 73 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20  os to determine 
6130: 77 68 65 74 68 65 72 20 74 68 65 20 6d 61 63 68  whether the mach
6140: 69 6e 65 20 69 73 20 62 69 67 20 6f 72 20 6c 69  ine is big or li
6150: 74 74 6c 65 20 65 6e 64 69 61 6e 2c 0a 2a 2a 20  ttle endian,.** 
6160: 61 6e 64 20 77 68 65 74 68 65 72 20 6f 72 20 6e  and whether or n
6170: 6f 74 20 74 68 61 74 20 64 65 74 65 72 6d 69 6e  ot that determin
6180: 61 74 69 6f 6e 20 69 73 20 72 75 6e 2d 74 69 6d  ation is run-tim
6190: 65 20 6f 72 20 63 6f 6d 70 69 6c 65 2d 74 69 6d  e or compile-tim
61a0: 65 2e 0a 2a 2a 0a 2a 2a 20 46 6f 72 20 62 65 73  e..**.** For bes
61b0: 74 20 70 65 72 66 6f 72 6d 61 6e 63 65 2c 20 61  t performance, a
61c0: 6e 20 61 74 74 65 6d 70 74 20 69 73 20 6d 61 64  n attempt is mad
61d0: 65 20 74 6f 20 67 75 65 73 73 20 61 74 20 74 68  e to guess at th
61e0: 65 20 62 79 74 65 2d 6f 72 64 65 72 0a 2a 2a 20  e byte-order.** 
61f0: 75 73 69 6e 67 20 43 2d 70 72 65 70 72 6f 63 65  using C-preproce
6200: 73 73 6f 72 20 6d 61 63 72 6f 73 2e 20 20 49 66  ssor macros.  If
6210: 20 74 68 61 74 20 69 73 20 75 6e 73 75 63 63 65   that is unsucce
6220: 73 73 66 75 6c 2c 20 6f 72 20 69 66 0a 2a 2a 20  ssful, or if.** 
6230: 2d 44 53 51 4c 49 54 45 5f 52 55 4e 54 49 4d 45  -DSQLITE_RUNTIME
6240: 5f 42 59 54 45 4f 52 44 45 52 3d 31 20 69 73 20  _BYTEORDER=1 is 
6250: 73 65 74 2c 20 74 68 65 6e 20 62 79 74 65 2d 6f  set, then byte-o
6260: 72 64 65 72 20 69 73 20 64 65 74 65 72 6d 69 6e  rder is determin
6270: 65 64 0a 2a 2a 20 61 74 20 72 75 6e 2d 74 69 6d  ed.** at run-tim
6280: 65 2e 0a 2a 2f 0a 23 69 66 20 28 64 65 66 69 6e  e..*/.#if (defin
6290: 65 64 28 69 33 38 36 29 20 20 20 20 20 7c 7c 20  ed(i386)     || 
62a0: 64 65 66 69 6e 65 64 28 5f 5f 69 33 38 36 5f 5f  defined(__i386__
62b0: 29 20 20 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f  )   || defined(_
62c0: 4d 5f 49 58 38 36 29 20 7c 7c 20 20 20 20 5c 0a  M_IX86) ||    \.
62d0: 20 20 20 20 20 64 65 66 69 6e 65 64 28 5f 5f 78       defined(__x
62e0: 38 36 5f 36 34 29 20 7c 7c 20 64 65 66 69 6e 65  86_64) || define
62f0: 64 28 5f 5f 78 38 36 5f 36 34 5f 5f 29 20 7c 7c  d(__x86_64__) ||
6300: 20 64 65 66 69 6e 65 64 28 5f 4d 5f 58 36 34 29   defined(_M_X64)
6310: 20 20 7c 7c 20 20 20 20 5c 0a 20 20 20 20 20 64    ||    \.     d
6320: 65 66 69 6e 65 64 28 5f 4d 5f 41 4d 44 36 34 29  efined(_M_AMD64)
6330: 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 4d 5f 41   || defined(_M_A
6340: 52 4d 29 20 20 20 20 20 7c 7c 20 64 65 66 69 6e  RM)     || defin
6350: 65 64 28 5f 5f 78 38 36 29 20 20 20 7c 7c 20 20  ed(__x86)   ||  
6360: 20 20 5c 0a 20 20 20 20 20 64 65 66 69 6e 65 64    \.     defined
6370: 28 5f 5f 61 72 6d 5f 5f 29 29 20 26 26 20 21 64  (__arm__)) && !d
6380: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 52 55  efined(SQLITE_RU
6390: 4e 54 49 4d 45 5f 42 59 54 45 4f 52 44 45 52 29  NTIME_BYTEORDER)
63a0: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
63b0: 5f 42 59 54 45 4f 52 44 45 52 20 20 20 20 31 32  _BYTEORDER    12
63c0: 33 34 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  34.# define SQLI
63d0: 54 45 5f 42 49 47 45 4e 44 49 41 4e 20 20 20 20  TE_BIGENDIAN    
63e0: 30 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  0.# define SQLIT
63f0: 45 5f 4c 49 54 54 4c 45 45 4e 44 49 41 4e 20 31  E_LITTLEENDIAN 1
6400: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
6410: 5f 55 54 46 31 36 4e 41 54 49 56 45 20 20 53 51  _UTF16NATIVE  SQ
6420: 4c 49 54 45 5f 55 54 46 31 36 4c 45 0a 23 65 6e  LITE_UTF16LE.#en
6430: 64 69 66 0a 23 69 66 20 28 64 65 66 69 6e 65 64  dif.#if (defined
6440: 28 73 70 61 72 63 29 20 20 20 20 7c 7c 20 64 65  (sparc)    || de
6450: 66 69 6e 65 64 28 5f 5f 70 70 63 5f 5f 29 29 20  fined(__ppc__)) 
6460: 20 5c 0a 20 20 20 20 26 26 20 21 64 65 66 69 6e   \.    && !defin
6470: 65 64 28 53 51 4c 49 54 45 5f 52 55 4e 54 49 4d  ed(SQLITE_RUNTIM
6480: 45 5f 42 59 54 45 4f 52 44 45 52 29 0a 23 20 64  E_BYTEORDER).# d
6490: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 42 59 54  efine SQLITE_BYT
64a0: 45 4f 52 44 45 52 20 20 20 20 34 33 32 31 0a 23  EORDER    4321.#
64b0: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 42   define SQLITE_B
64c0: 49 47 45 4e 44 49 41 4e 20 20 20 20 31 0a 23 20  IGENDIAN    1.# 
64d0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4c 49  define SQLITE_LI
64e0: 54 54 4c 45 45 4e 44 49 41 4e 20 30 0a 23 20 64  TTLEENDIAN 0.# d
64f0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 55 54 46  efine SQLITE_UTF
6500: 31 36 4e 41 54 49 56 45 20 20 53 51 4c 49 54 45  16NATIVE  SQLITE
6510: 5f 55 54 46 31 36 42 45 0a 23 65 6e 64 69 66 0a  _UTF16BE.#endif.
6520: 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c  #if !defined(SQL
6530: 49 54 45 5f 42 59 54 45 4f 52 44 45 52 29 0a 23  ITE_BYTEORDER).#
6540: 20 69 66 64 65 66 20 53 51 4c 49 54 45 5f 41 4d   ifdef SQLITE_AM
6550: 41 4c 47 41 4d 41 54 49 4f 4e 0a 20 20 63 6f 6e  ALGAMATION.  con
6560: 73 74 20 69 6e 74 20 73 71 6c 69 74 65 33 6f 6e  st int sqlite3on
6570: 65 20 3d 20 31 3b 0a 23 20 65 6c 73 65 0a 20 20  e = 1;.# else.  
6580: 65 78 74 65 72 6e 20 63 6f 6e 73 74 20 69 6e 74  extern const int
6590: 20 73 71 6c 69 74 65 33 6f 6e 65 3b 0a 23 20 65   sqlite3one;.# e
65a0: 6e 64 69 66 0a 23 20 64 65 66 69 6e 65 20 53 51  ndif.# define SQ
65b0: 4c 49 54 45 5f 42 59 54 45 4f 52 44 45 52 20 20  LITE_BYTEORDER  
65c0: 20 20 30 20 20 20 20 20 2f 2a 20 30 20 6d 65 61    0     /* 0 mea
65d0: 6e 73 20 22 75 6e 6b 6e 6f 77 6e 20 61 74 20 63  ns "unknown at c
65e0: 6f 6d 70 69 6c 65 2d 74 69 6d 65 22 20 2a 2f 0a  ompile-time" */.
65f0: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
6600: 42 49 47 45 4e 44 49 41 4e 20 20 20 20 28 2a 28  BIGENDIAN    (*(
6610: 63 68 61 72 20 2a 29 28 26 73 71 6c 69 74 65 33  char *)(&sqlite3
6620: 6f 6e 65 29 3d 3d 30 29 0a 23 20 64 65 66 69 6e  one)==0).# defin
6630: 65 20 53 51 4c 49 54 45 5f 4c 49 54 54 4c 45 45  e SQLITE_LITTLEE
6640: 4e 44 49 41 4e 20 28 2a 28 63 68 61 72 20 2a 29  NDIAN (*(char *)
6650: 28 26 73 71 6c 69 74 65 33 6f 6e 65 29 3d 3d 31  (&sqlite3one)==1
6660: 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  ).# define SQLIT
6670: 45 5f 55 54 46 31 36 4e 41 54 49 56 45 20 20 28  E_UTF16NATIVE  (
6680: 53 51 4c 49 54 45 5f 42 49 47 45 4e 44 49 41 4e  SQLITE_BIGENDIAN
6690: 3f 53 51 4c 49 54 45 5f 55 54 46 31 36 42 45 3a  ?SQLITE_UTF16BE:
66a0: 53 51 4c 49 54 45 5f 55 54 46 31 36 4c 45 29 0a  SQLITE_UTF16LE).
66b0: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 43 6f  #endif../*.** Co
66c0: 6e 73 74 61 6e 74 73 20 66 6f 72 20 74 68 65 20  nstants for the 
66d0: 6c 61 72 67 65 73 74 20 61 6e 64 20 73 6d 61 6c  largest and smal
66e0: 6c 65 73 74 20 70 6f 73 73 69 62 6c 65 20 36 34  lest possible 64
66f0: 2d 62 69 74 20 73 69 67 6e 65 64 20 69 6e 74 65  -bit signed inte
6700: 67 65 72 73 2e 0a 2a 2a 20 54 68 65 73 65 20 6d  gers..** These m
6710: 61 63 72 6f 73 20 61 72 65 20 64 65 73 69 67 6e  acros are design
6720: 65 64 20 74 6f 20 77 6f 72 6b 20 63 6f 72 72 65  ed to work corre
6730: 63 74 6c 79 20 6f 6e 20 62 6f 74 68 20 33 32 2d  ctly on both 32-
6740: 62 69 74 20 61 6e 64 20 36 34 2d 62 69 74 0a 2a  bit and 64-bit.*
6750: 2a 20 63 6f 6d 70 69 6c 65 72 73 2e 0a 2a 2f 0a  * compilers..*/.
6760: 23 64 65 66 69 6e 65 20 4c 41 52 47 45 53 54 5f  #define LARGEST_
6770: 49 4e 54 36 34 20 20 28 30 78 66 66 66 66 66 66  INT64  (0xffffff
6780: 66 66 7c 28 28 28 69 36 34 29 30 78 37 66 66 66  ff|(((i64)0x7fff
6790: 66 66 66 66 29 3c 3c 33 32 29 29 0a 23 64 65 66  ffff)<<32)).#def
67a0: 69 6e 65 20 53 4d 41 4c 4c 45 53 54 5f 49 4e 54  ine SMALLEST_INT
67b0: 36 34 20 28 28 28 69 36 34 29 2d 31 29 20 2d 20  64 (((i64)-1) - 
67c0: 4c 41 52 47 45 53 54 5f 49 4e 54 36 34 29 0a 0a  LARGEST_INT64)..
67d0: 2f 2a 0a 2a 2a 20 52 6f 75 6e 64 20 75 70 20 61  /*.** Round up a
67e0: 20 6e 75 6d 62 65 72 20 74 6f 20 74 68 65 20 6e   number to the n
67f0: 65 78 74 20 6c 61 72 67 65 72 20 6d 75 6c 74 69  ext larger multi
6800: 70 6c 65 20 6f 66 20 38 2e 20 20 54 68 69 73 20  ple of 8.  This 
6810: 69 73 20 75 73 65 64 0a 2a 2a 20 74 6f 20 66 6f  is used.** to fo
6820: 72 63 65 20 38 2d 62 79 74 65 20 61 6c 69 67 6e  rce 8-byte align
6830: 6d 65 6e 74 20 6f 6e 20 36 34 2d 62 69 74 20 61  ment on 64-bit a
6840: 72 63 68 69 74 65 63 74 75 72 65 73 2e 0a 2a 2f  rchitectures..*/
6850: 0a 23 64 65 66 69 6e 65 20 52 4f 55 4e 44 38 28  .#define ROUND8(
6860: 78 29 20 20 20 20 20 28 28 28 78 29 2b 37 29 26  x)     (((x)+7)&
6870: 7e 37 29 0a 0a 2f 2a 0a 2a 2a 20 52 6f 75 6e 64  ~7)../*.** Round
6880: 20 64 6f 77 6e 20 74 6f 20 74 68 65 20 6e 65 61   down to the nea
6890: 72 65 73 74 20 6d 75 6c 74 69 70 6c 65 20 6f 66  rest multiple of
68a0: 20 38 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 52 4f   8.*/.#define RO
68b0: 55 4e 44 44 4f 57 4e 38 28 78 29 20 28 28 78 29  UNDDOWN8(x) ((x)
68c0: 26 7e 37 29 0a 0a 2f 2a 0a 2a 2a 20 41 73 73 65  &~7)../*.** Asse
68d0: 72 74 20 74 68 61 74 20 74 68 65 20 70 6f 69 6e  rt that the poin
68e0: 74 65 72 20 58 20 69 73 20 61 6c 69 67 6e 65 64  ter X is aligned
68f0: 20 74 6f 20 61 6e 20 38 2d 62 79 74 65 20 62 6f   to an 8-byte bo
6900: 75 6e 64 61 72 79 2e 20 20 54 68 69 73 0a 2a 2a  undary.  This.**
6910: 20 6d 61 63 72 6f 20 69 73 20 75 73 65 64 20 6f   macro is used o
6920: 6e 6c 79 20 77 69 74 68 69 6e 20 61 73 73 65 72  nly within asser
6930: 74 28 29 20 74 6f 20 76 65 72 69 66 79 20 74 68  t() to verify th
6940: 61 74 20 74 68 65 20 63 6f 64 65 20 67 65 74 73  at the code gets
6950: 0a 2a 2a 20 61 6c 6c 20 61 6c 69 67 6e 6d 65 6e  .** all alignmen
6960: 74 20 72 65 73 74 72 69 63 74 69 6f 6e 73 20 63  t restrictions c
6970: 6f 72 72 65 63 74 2e 0a 2a 2a 0a 2a 2a 20 45 78  orrect..**.** Ex
6980: 63 65 70 74 2c 20 69 66 20 53 51 4c 49 54 45 5f  cept, if SQLITE_
6990: 34 5f 42 59 54 45 5f 41 4c 49 47 4e 45 44 5f 4d  4_BYTE_ALIGNED_M
69a0: 41 4c 4c 4f 43 20 69 73 20 64 65 66 69 6e 65 64  ALLOC is defined
69b0: 2c 20 74 68 65 6e 20 74 68 65 0a 2a 2a 20 75 6e  , then the.** un
69c0: 64 65 72 6c 79 69 6e 67 20 6d 61 6c 6c 6f 63 28  derlying malloc(
69d0: 29 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  ) implementation
69e0: 20 6d 69 67 68 74 20 72 65 74 75 72 6e 20 75 73   might return us
69f0: 20 34 2d 62 79 74 65 20 61 6c 69 67 6e 65 64 0a   4-byte aligned.
6a00: 2a 2a 20 70 6f 69 6e 74 65 72 73 2e 20 20 49 6e  ** pointers.  In
6a10: 20 74 68 61 74 20 63 61 73 65 2c 20 6f 6e 6c 79   that case, only
6a20: 20 76 65 72 69 66 79 20 34 2d 62 79 74 65 20 61   verify 4-byte a
6a30: 6c 69 67 6e 6d 65 6e 74 2e 0a 2a 2f 0a 23 69 66  lignment..*/.#if
6a40: 64 65 66 20 53 51 4c 49 54 45 5f 34 5f 42 59 54  def SQLITE_4_BYT
6a50: 45 5f 41 4c 49 47 4e 45 44 5f 4d 41 4c 4c 4f 43  E_ALIGNED_MALLOC
6a60: 0a 23 20 64 65 66 69 6e 65 20 45 49 47 48 54 5f  .# define EIGHT_
6a70: 42 59 54 45 5f 41 4c 49 47 4e 4d 45 4e 54 28 58  BYTE_ALIGNMENT(X
6a80: 29 20 20 20 28 28 28 28 63 68 61 72 2a 29 28 58  )   ((((char*)(X
6a90: 29 20 2d 20 28 63 68 61 72 2a 29 30 29 26 33 29  ) - (char*)0)&3)
6aa0: 3d 3d 30 29 0a 23 65 6c 73 65 0a 23 20 64 65 66  ==0).#else.# def
6ab0: 69 6e 65 20 45 49 47 48 54 5f 42 59 54 45 5f 41  ine EIGHT_BYTE_A
6ac0: 4c 49 47 4e 4d 45 4e 54 28 58 29 20 20 20 28 28  LIGNMENT(X)   ((
6ad0: 28 28 63 68 61 72 2a 29 28 58 29 20 2d 20 28 63  ((char*)(X) - (c
6ae0: 68 61 72 2a 29 30 29 26 37 29 3d 3d 30 29 0a 23  har*)0)&7)==0).#
6af0: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 44 69 73  endif../*.** Dis
6b00: 61 62 6c 65 20 4d 4d 41 50 20 6f 6e 20 70 6c 61  able MMAP on pla
6b10: 74 66 6f 72 6d 73 20 77 68 65 72 65 20 69 74 20  tforms where it 
6b20: 69 73 20 6b 6e 6f 77 6e 20 74 6f 20 6e 6f 74 20  is known to not 
6b30: 77 6f 72 6b 0a 2a 2f 0a 23 69 66 20 64 65 66 69  work.*/.#if defi
6b40: 6e 65 64 28 5f 5f 4f 70 65 6e 42 53 44 5f 5f 29  ned(__OpenBSD__)
6b50: 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 51 4e   || defined(__QN
6b60: 58 4e 54 4f 5f 5f 29 0a 23 20 75 6e 64 65 66 20  XNTO__).# undef 
6b70: 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f  SQLITE_MAX_MMAP_
6b80: 53 49 5a 45 0a 23 20 64 65 66 69 6e 65 20 53 51  SIZE.# define SQ
6b90: 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49  LITE_MAX_MMAP_SI
6ba0: 5a 45 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  ZE 0.#endif../*.
6bb0: 2a 2a 20 44 65 66 61 75 6c 74 20 6d 61 78 69 6d  ** Default maxim
6bc0: 75 6d 20 73 69 7a 65 20 6f 66 20 6d 65 6d 6f 72  um size of memor
6bd0: 79 20 75 73 65 64 20 62 79 20 6d 65 6d 6f 72 79  y used by memory
6be0: 2d 6d 61 70 70 65 64 20 49 2f 4f 20 69 6e 20 74  -mapped I/O in t
6bf0: 68 65 20 56 46 53 0a 2a 2f 0a 23 69 66 64 65 66  he VFS.*/.#ifdef
6c00: 20 5f 5f 41 50 50 4c 45 5f 5f 0a 23 20 69 6e 63   __APPLE__.# inc
6c10: 6c 75 64 65 20 3c 54 61 72 67 65 74 43 6f 6e 64  lude <TargetCond
6c20: 69 74 69 6f 6e 61 6c 73 2e 68 3e 0a 23 65 6e 64  itionals.h>.#end
6c30: 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  if.#ifndef SQLIT
6c40: 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 0a  E_MAX_MMAP_SIZE.
6c50: 23 20 69 66 20 64 65 66 69 6e 65 64 28 5f 5f 6c  # if defined(__l
6c60: 69 6e 75 78 5f 5f 29 20 5c 0a 20 20 7c 7c 20 64  inux__) \.  || d
6c70: 65 66 69 6e 65 64 28 5f 57 49 4e 33 32 29 20 5c  efined(_WIN32) \
6c80: 0a 20 20 7c 7c 20 28 64 65 66 69 6e 65 64 28 5f  .  || (defined(_
6c90: 5f 41 50 50 4c 45 5f 5f 29 20 26 26 20 64 65 66  _APPLE__) && def
6ca0: 69 6e 65 64 28 5f 5f 4d 41 43 48 5f 5f 29 29 20  ined(__MACH__)) 
6cb0: 5c 0a 20 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f  \.  || defined(_
6cc0: 5f 73 75 6e 29 20 5c 0a 20 20 7c 7c 20 64 65 66  _sun) \.  || def
6cd0: 69 6e 65 64 28 5f 5f 46 72 65 65 42 53 44 5f 5f  ined(__FreeBSD__
6ce0: 29 20 5c 0a 20 20 7c 7c 20 64 65 66 69 6e 65 64  ) \.  || defined
6cf0: 28 5f 5f 44 72 61 67 6f 6e 46 6c 79 5f 5f 29 0a  (__DragonFly__).
6d00: 23 20 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54  #   define SQLIT
6d10: 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 20  E_MAX_MMAP_SIZE 
6d20: 30 78 37 66 66 66 30 30 30 30 20 20 2f 2a 20 32  0x7fff0000  /* 2
6d30: 31 34 37 34 31 38 31 31 32 20 2a 2f 0a 23 20 65  147418112 */.# e
6d40: 6c 73 65 0a 23 20 20 20 64 65 66 69 6e 65 20 53  lse.#   define S
6d50: 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53  QLITE_MAX_MMAP_S
6d60: 49 5a 45 20 30 0a 23 20 65 6e 64 69 66 0a 23 20  IZE 0.# endif.# 
6d70: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41  define SQLITE_MA
6d80: 58 5f 4d 4d 41 50 5f 53 49 5a 45 5f 78 63 20 31  X_MMAP_SIZE_xc 1
6d90: 20 2f 2a 20 65 78 63 6c 75 64 65 20 66 72 6f 6d   /* exclude from
6da0: 20 63 74 69 6d 65 2e 63 20 2a 2f 0a 23 65 6e 64   ctime.c */.#end
6db0: 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 64 65  if../*.** The de
6dc0: 66 61 75 6c 74 20 4d 4d 41 50 5f 53 49 5a 45 20  fault MMAP_SIZE 
6dd0: 69 73 20 7a 65 72 6f 20 6f 6e 20 61 6c 6c 20 70  is zero on all p
6de0: 6c 61 74 66 6f 72 6d 73 2e 20 20 4f 72 2c 20 65  latforms.  Or, e
6df0: 76 65 6e 20 69 66 20 61 20 6c 61 72 67 65 72 0a  ven if a larger.
6e00: 2a 2a 20 64 65 66 61 75 6c 74 20 4d 4d 41 50 5f  ** default MMAP_
6e10: 53 49 5a 45 20 69 73 20 73 70 65 63 69 66 69 65  SIZE is specifie
6e20: 64 20 61 74 20 63 6f 6d 70 69 6c 65 2d 74 69 6d  d at compile-tim
6e30: 65 2c 20 6d 61 6b 65 20 73 75 72 65 20 74 68 61  e, make sure tha
6e40: 74 20 69 74 20 64 6f 65 73 0a 2a 2a 20 6e 6f 74  t it does.** not
6e50: 20 65 78 63 65 65 64 20 74 68 65 20 6d 61 78 69   exceed the maxi
6e60: 6d 75 6d 20 6d 6d 61 70 20 73 69 7a 65 2e 0a 2a  mum mmap size..*
6e70: 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  /.#ifndef SQLITE
6e80: 5f 44 45 46 41 55 4c 54 5f 4d 4d 41 50 5f 53 49  _DEFAULT_MMAP_SI
6e90: 5a 45 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  ZE.# define SQLI
6ea0: 54 45 5f 44 45 46 41 55 4c 54 5f 4d 4d 41 50 5f  TE_DEFAULT_MMAP_
6eb0: 53 49 5a 45 20 30 0a 23 20 64 65 66 69 6e 65 20  SIZE 0.# define 
6ec0: 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d  SQLITE_DEFAULT_M
6ed0: 4d 41 50 5f 53 49 5a 45 5f 78 63 20 31 20 20 2f  MAP_SIZE_xc 1  /
6ee0: 2a 20 45 78 63 6c 75 64 65 20 66 72 6f 6d 20 63  * Exclude from c
6ef0: 74 69 6d 65 2e 63 20 2a 2f 0a 23 65 6e 64 69 66  time.c */.#endif
6f00: 0a 23 69 66 20 53 51 4c 49 54 45 5f 44 45 46 41  .#if SQLITE_DEFA
6f10: 55 4c 54 5f 4d 4d 41 50 5f 53 49 5a 45 3e 53 51  ULT_MMAP_SIZE>SQ
6f20: 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49  LITE_MAX_MMAP_SI
6f30: 5a 45 0a 23 20 75 6e 64 65 66 20 53 51 4c 49 54  ZE.# undef SQLIT
6f40: 45 5f 44 45 46 41 55 4c 54 5f 4d 4d 41 50 5f 53  E_DEFAULT_MMAP_S
6f50: 49 5a 45 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  IZE.# define SQL
6f60: 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d 4d 41 50  ITE_DEFAULT_MMAP
6f70: 5f 53 49 5a 45 20 53 51 4c 49 54 45 5f 4d 41 58  _SIZE SQLITE_MAX
6f80: 5f 4d 4d 41 50 5f 53 49 5a 45 0a 23 65 6e 64 69  _MMAP_SIZE.#endi
6f90: 66 0a 0a 2f 2a 0a 2a 2a 20 4f 6e 6c 79 20 6f 6e  f../*.** Only on
6fa0: 65 20 6f 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  e of SQLITE_ENAB
6fb0: 4c 45 5f 53 54 41 54 33 20 6f 72 20 53 51 4c 49  LE_STAT3 or SQLI
6fc0: 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 34 20  TE_ENABLE_STAT4 
6fd0: 63 61 6e 20 62 65 20 64 65 66 69 6e 65 64 2e 0a  can be defined..
6fe0: 2a 2a 20 50 72 69 6f 72 69 74 79 20 69 73 20 67  ** Priority is g
6ff0: 69 76 65 6e 20 74 6f 20 53 51 4c 49 54 45 5f 45  iven to SQLITE_E
7000: 4e 41 42 4c 45 5f 53 54 41 54 34 2e 20 20 49 66  NABLE_STAT4.  If
7010: 20 65 69 74 68 65 72 20 61 72 65 20 64 65 66 69   either are defi
7020: 6e 65 64 2c 20 61 6c 73 6f 0a 2a 2a 20 64 65 66  ned, also.** def
7030: 69 6e 65 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  ine SQLITE_ENABL
7040: 45 5f 53 54 41 54 33 5f 4f 52 5f 53 54 41 54 34  E_STAT3_OR_STAT4
7050: 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54  .*/.#ifdef SQLIT
7060: 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 34 0a 23  E_ENABLE_STAT4.#
7070: 20 75 6e 64 65 66 20 53 51 4c 49 54 45 5f 45 4e   undef SQLITE_EN
7080: 41 42 4c 45 5f 53 54 41 54 33 0a 23 20 64 65 66  ABLE_STAT3.# def
7090: 69 6e 65 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  ine SQLITE_ENABL
70a0: 45 5f 53 54 41 54 33 5f 4f 52 5f 53 54 41 54 34  E_STAT3_OR_STAT4
70b0: 20 31 0a 23 65 6c 69 66 20 53 51 4c 49 54 45 5f   1.#elif SQLITE_
70c0: 45 4e 41 42 4c 45 5f 53 54 41 54 33 0a 23 20 64  ENABLE_STAT3.# d
70d0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 4e 41  efine SQLITE_ENA
70e0: 42 4c 45 5f 53 54 41 54 33 5f 4f 52 5f 53 54 41  BLE_STAT3_OR_STA
70f0: 54 34 20 31 0a 23 65 6c 69 66 20 53 51 4c 49 54  T4 1.#elif SQLIT
7100: 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 5f 4f  E_ENABLE_STAT3_O
7110: 52 5f 53 54 41 54 34 0a 23 20 75 6e 64 65 66 20  R_STAT4.# undef 
7120: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54  SQLITE_ENABLE_ST
7130: 41 54 33 5f 4f 52 5f 53 54 41 54 34 0a 23 65 6e  AT3_OR_STAT4.#en
7140: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 53 45 4c 45 43  dif../*.** SELEC
7150: 54 54 52 41 43 45 5f 45 4e 41 42 4c 45 44 20 77  TTRACE_ENABLED w
7160: 69 6c 6c 20 62 65 20 65 69 74 68 65 72 20 31 20  ill be either 1 
7170: 6f 72 20 30 20 64 65 70 65 6e 64 69 6e 67 20 6f  or 0 depending o
7180: 6e 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74  n whether or not
7190: 0a 2a 2a 20 74 68 65 20 53 65 6c 65 63 74 20 71  .** the Select q
71a0: 75 65 72 79 20 67 65 6e 65 72 61 74 6f 72 20 74  uery generator t
71b0: 72 61 63 69 6e 67 20 6c 6f 67 69 63 20 69 73 20  racing logic is 
71c0: 74 75 72 6e 65 64 20 6f 6e 2e 0a 2a 2f 0a 23 69  turned on..*/.#i
71d0: 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  f defined(SQLITE
71e0: 5f 44 45 42 55 47 29 20 7c 7c 20 64 65 66 69 6e  _DEBUG) || defin
71f0: 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ed(SQLITE_ENABLE
7200: 5f 53 45 4c 45 43 54 54 52 41 43 45 29 0a 23 20  _SELECTTRACE).# 
7210: 64 65 66 69 6e 65 20 53 45 4c 45 43 54 54 52 41  define SELECTTRA
7220: 43 45 5f 45 4e 41 42 4c 45 44 20 31 0a 23 65 6c  CE_ENABLED 1.#el
7230: 73 65 0a 23 20 64 65 66 69 6e 65 20 53 45 4c 45  se.# define SELE
7240: 43 54 54 52 41 43 45 5f 45 4e 41 42 4c 45 44 20  CTTRACE_ENABLED 
7250: 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  0.#endif../*.** 
7260: 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  An instance of t
7270: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72  he following str
7280: 75 63 74 75 72 65 20 69 73 20 75 73 65 64 20 74  ucture is used t
7290: 6f 20 73 74 6f 72 65 20 74 68 65 20 62 75 73 79  o store the busy
72a0: 2d 68 61 6e 64 6c 65 72 0a 2a 2a 20 63 61 6c 6c  -handler.** call
72b0: 62 61 63 6b 20 66 6f 72 20 61 20 67 69 76 65 6e  back for a given
72c0: 20 73 71 6c 69 74 65 20 68 61 6e 64 6c 65 2e 0a   sqlite handle..
72d0: 2a 2a 0a 2a 2a 20 54 68 65 20 73 71 6c 69 74 65  **.** The sqlite
72e0: 2e 62 75 73 79 48 61 6e 64 6c 65 72 20 6d 65 6d  .busyHandler mem
72f0: 62 65 72 20 6f 66 20 74 68 65 20 73 71 6c 69 74  ber of the sqlit
7300: 65 20 73 74 72 75 63 74 20 63 6f 6e 74 61 69 6e  e struct contain
7310: 73 20 74 68 65 20 62 75 73 79 0a 2a 2a 20 63 61  s the busy.** ca
7320: 6c 6c 62 61 63 6b 20 66 6f 72 20 74 68 65 20 64  llback for the d
7330: 61 74 61 62 61 73 65 20 68 61 6e 64 6c 65 2e 20  atabase handle. 
7340: 45 61 63 68 20 70 61 67 65 72 20 6f 70 65 6e 65  Each pager opene
7350: 64 20 76 69 61 20 74 68 65 20 73 71 6c 69 74 65  d via the sqlite
7360: 0a 2a 2a 20 68 61 6e 64 6c 65 20 69 73 20 70 61  .** handle is pa
7370: 73 73 65 64 20 61 20 70 6f 69 6e 74 65 72 20 74  ssed a pointer t
7380: 6f 20 73 71 6c 69 74 65 2e 62 75 73 79 48 61 6e  o sqlite.busyHan
7390: 64 6c 65 72 2e 20 54 68 65 20 62 75 73 79 2d 68  dler. The busy-h
73a0: 61 6e 64 6c 65 72 0a 2a 2a 20 63 61 6c 6c 62 61  andler.** callba
73b0: 63 6b 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20  ck is currently 
73c0: 69 6e 76 6f 6b 65 64 20 6f 6e 6c 79 20 66 72 6f  invoked only fro
73d0: 6d 20 77 69 74 68 69 6e 20 70 61 67 65 72 2e 63  m within pager.c
73e0: 2e 0a 2a 2f 0a 74 79 70 65 64 65 66 20 73 74 72  ..*/.typedef str
73f0: 75 63 74 20 42 75 73 79 48 61 6e 64 6c 65 72 20  uct BusyHandler 
7400: 42 75 73 79 48 61 6e 64 6c 65 72 3b 0a 73 74 72  BusyHandler;.str
7410: 75 63 74 20 42 75 73 79 48 61 6e 64 6c 65 72 20  uct BusyHandler 
7420: 7b 0a 20 20 69 6e 74 20 28 2a 78 46 75 6e 63 29  {.  int (*xFunc)
7430: 28 76 6f 69 64 20 2a 2c 69 6e 74 29 3b 20 20 2f  (void *,int);  /
7440: 2a 20 54 68 65 20 62 75 73 79 20 63 61 6c 6c 62  * The busy callb
7450: 61 63 6b 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70  ack */.  void *p
7460: 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20  Arg;            
7470: 20 20 20 20 2f 2a 20 46 69 72 73 74 20 61 72 67      /* First arg
7480: 20 74 6f 20 62 75 73 79 20 63 61 6c 6c 62 61 63   to busy callbac
7490: 6b 20 2a 2f 0a 20 20 69 6e 74 20 6e 42 75 73 79  k */.  int nBusy
74a0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
74b0: 20 20 2f 2a 20 49 6e 63 72 65 6d 65 6e 74 65 64    /* Incremented
74c0: 20 77 69 74 68 20 65 61 63 68 20 62 75 73 79 20   with each busy 
74d0: 63 61 6c 6c 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  call */.};../*.*
74e0: 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65 20 6d 61  * Name of the ma
74f0: 73 74 65 72 20 64 61 74 61 62 61 73 65 20 74 61  ster database ta
7500: 62 6c 65 2e 20 20 54 68 65 20 6d 61 73 74 65 72  ble.  The master
7510: 20 64 61 74 61 62 61 73 65 20 74 61 62 6c 65 0a   database table.
7520: 2a 2a 20 69 73 20 61 20 73 70 65 63 69 61 6c 20  ** is a special 
7530: 74 61 62 6c 65 20 74 68 61 74 20 68 6f 6c 64 73  table that holds
7540: 20 74 68 65 20 6e 61 6d 65 73 20 61 6e 64 20 61   the names and a
7550: 74 74 72 69 62 75 74 65 73 20 6f 66 20 61 6c 6c  ttributes of all
7560: 0a 2a 2a 20 75 73 65 72 20 74 61 62 6c 65 73 20  .** user tables 
7570: 61 6e 64 20 69 6e 64 69 63 65 73 2e 0a 2a 2f 0a  and indices..*/.
7580: 23 64 65 66 69 6e 65 20 4d 41 53 54 45 52 5f 4e  #define MASTER_N
7590: 41 4d 45 20 20 20 20 20 20 20 22 73 71 6c 69 74  AME       "sqlit
75a0: 65 5f 6d 61 73 74 65 72 22 0a 23 64 65 66 69 6e  e_master".#defin
75b0: 65 20 54 45 4d 50 5f 4d 41 53 54 45 52 5f 4e 41  e TEMP_MASTER_NA
75c0: 4d 45 20 20 22 73 71 6c 69 74 65 5f 74 65 6d 70  ME  "sqlite_temp
75d0: 5f 6d 61 73 74 65 72 22 0a 0a 2f 2a 0a 2a 2a 20  _master"../*.** 
75e0: 54 68 65 20 72 6f 6f 74 2d 70 61 67 65 20 6f 66  The root-page of
75f0: 20 74 68 65 20 6d 61 73 74 65 72 20 64 61 74 61   the master data
7600: 62 61 73 65 20 74 61 62 6c 65 2e 0a 2a 2f 0a 23  base table..*/.#
7610: 64 65 66 69 6e 65 20 4d 41 53 54 45 52 5f 52 4f  define MASTER_RO
7620: 4f 54 20 20 20 20 20 20 20 31 0a 0a 2f 2a 0a 2a  OT       1../*.*
7630: 2a 20 54 68 65 20 6e 61 6d 65 20 6f 66 20 74 68  * The name of th
7640: 65 20 73 63 68 65 6d 61 20 74 61 62 6c 65 2e 0a  e schema table..
7650: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 43 48 45 4d  */.#define SCHEM
7660: 41 5f 54 41 42 4c 45 28 78 29 20 20 28 28 21 4f  A_TABLE(x)  ((!O
7670: 4d 49 54 5f 54 45 4d 50 44 42 29 26 26 28 78 3d  MIT_TEMPDB)&&(x=
7680: 3d 31 29 3f 54 45 4d 50 5f 4d 41 53 54 45 52 5f  =1)?TEMP_MASTER_
7690: 4e 41 4d 45 3a 4d 41 53 54 45 52 5f 4e 41 4d 45  NAME:MASTER_NAME
76a0: 29 0a 0a 2f 2a 0a 2a 2a 20 41 20 63 6f 6e 76 65  )../*.** A conve
76b0: 6e 69 65 6e 63 65 20 6d 61 63 72 6f 20 74 68 61  nience macro tha
76c0: 74 20 72 65 74 75 72 6e 73 20 74 68 65 20 6e 75  t returns the nu
76d0: 6d 62 65 72 20 6f 66 20 65 6c 65 6d 65 6e 74 73  mber of elements
76e0: 20 69 6e 0a 2a 2a 20 61 6e 20 61 72 72 61 79 2e   in.** an array.
76f0: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 41 72 72 61  .*/.#define Arra
7700: 79 53 69 7a 65 28 58 29 20 20 20 20 28 28 69 6e  ySize(X)    ((in
7710: 74 29 28 73 69 7a 65 6f 66 28 58 29 2f 73 69 7a  t)(sizeof(X)/siz
7720: 65 6f 66 28 58 5b 30 5d 29 29 29 0a 0a 2f 2a 0a  eof(X[0])))../*.
7730: 2a 2a 20 44 65 74 65 72 6d 69 6e 65 20 69 66 20  ** Determine if 
7740: 74 68 65 20 61 72 67 75 6d 65 6e 74 20 69 73 20  the argument is 
7750: 61 20 70 6f 77 65 72 20 6f 66 20 74 77 6f 0a 2a  a power of two.*
7760: 2f 0a 23 64 65 66 69 6e 65 20 49 73 50 6f 77 65  /.#define IsPowe
7770: 72 4f 66 54 77 6f 28 58 29 20 28 28 28 58 29 26  rOfTwo(X) (((X)&
7780: 28 28 58 29 2d 31 29 29 3d 3d 30 29 0a 0a 2f 2a  ((X)-1))==0)../*
7790: 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e  .** The followin
77a0: 67 20 76 61 6c 75 65 20 61 73 20 61 20 64 65 73  g value as a des
77b0: 74 72 75 63 74 6f 72 20 6d 65 61 6e 73 20 74 6f  tructor means to
77c0: 20 75 73 65 20 73 71 6c 69 74 65 33 44 62 46 72   use sqlite3DbFr
77d0: 65 65 28 29 2e 0a 2a 2a 20 54 68 65 20 73 71 6c  ee()..** The sql
77e0: 69 74 65 33 44 62 46 72 65 65 28 29 20 72 6f 75  ite3DbFree() rou
77f0: 74 69 6e 65 20 72 65 71 75 69 72 65 73 20 74 77  tine requires tw
7800: 6f 20 70 61 72 61 6d 65 74 65 72 73 20 69 6e 73  o parameters ins
7810: 74 65 61 64 20 6f 66 20 74 68 65 0a 2a 2a 20 6f  tead of the.** o
7820: 6e 65 20 70 61 72 61 6d 65 74 65 72 20 74 68 61  ne parameter tha
7830: 74 20 64 65 73 74 72 75 63 74 6f 72 73 20 6e 6f  t destructors no
7840: 72 6d 61 6c 6c 79 20 77 61 6e 74 2e 20 20 53 6f  rmally want.  So
7850: 20 77 65 20 68 61 76 65 20 74 6f 20 69 6e 74 72   we have to intr
7860: 6f 64 75 63 65 0a 2a 2a 20 74 68 69 73 20 6d 61  oduce.** this ma
7870: 67 69 63 20 76 61 6c 75 65 20 74 68 61 74 20 74  gic value that t
7880: 68 65 20 63 6f 64 65 20 6b 6e 6f 77 73 20 74 6f  he code knows to
7890: 20 68 61 6e 64 6c 65 20 64 69 66 66 65 72 65 6e   handle differen
78a0: 74 6c 79 2e 20 20 41 6e 79 0a 2a 2a 20 70 6f 69  tly.  Any.** poi
78b0: 6e 74 65 72 20 77 69 6c 6c 20 77 6f 72 6b 20 68  nter will work h
78c0: 65 72 65 20 61 73 20 6c 6f 6e 67 20 61 73 20 69  ere as long as i
78d0: 74 20 69 73 20 64 69 73 74 69 6e 63 74 20 66 72  t is distinct fr
78e0: 6f 6d 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43  om SQLITE_STATIC
78f0: 0a 2a 2a 20 61 6e 64 20 53 51 4c 49 54 45 5f 54  .** and SQLITE_T
7900: 52 41 4e 53 49 45 4e 54 2e 0a 2a 2f 0a 23 64 65  RANSIENT..*/.#de
7910: 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 59 4e 41  fine SQLITE_DYNA
7920: 4d 49 43 20 20 20 28 28 73 71 6c 69 74 65 33 5f  MIC   ((sqlite3_
7930: 64 65 73 74 72 75 63 74 6f 72 5f 74 79 70 65 29  destructor_type)
7940: 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 53 69 7a  sqlite3MallocSiz
7950: 65 29 0a 0a 2f 2a 0a 2a 2a 20 57 68 65 6e 20 53  e)../*.** When S
7960: 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 53 44 20 69  QLITE_OMIT_WSD i
7970: 73 20 64 65 66 69 6e 65 64 2c 20 69 74 20 6d 65  s defined, it me
7980: 61 6e 73 20 74 68 61 74 20 74 68 65 20 74 61 72  ans that the tar
7990: 67 65 74 20 70 6c 61 74 66 6f 72 6d 20 64 6f 65  get platform doe
79a0: 73 0a 2a 2a 20 6e 6f 74 20 73 75 70 70 6f 72 74  s.** not support
79b0: 20 57 72 69 74 61 62 6c 65 20 53 74 61 74 69 63   Writable Static
79c0: 20 44 61 74 61 20 28 57 53 44 29 20 73 75 63 68   Data (WSD) such
79d0: 20 61 73 20 67 6c 6f 62 61 6c 20 61 6e 64 20 73   as global and s
79e0: 74 61 74 69 63 20 76 61 72 69 61 62 6c 65 73 2e  tatic variables.
79f0: 0a 2a 2a 20 41 6c 6c 20 76 61 72 69 61 62 6c 65  .** All variable
7a00: 73 20 6d 75 73 74 20 65 69 74 68 65 72 20 62 65  s must either be
7a10: 20 6f 6e 20 74 68 65 20 73 74 61 63 6b 20 6f 72   on the stack or
7a20: 20 64 79 6e 61 6d 69 63 61 6c 6c 79 20 61 6c 6c   dynamically all
7a30: 6f 63 61 74 65 64 20 66 72 6f 6d 0a 2a 2a 20 74  ocated from.** t
7a40: 68 65 20 68 65 61 70 2e 20 20 57 68 65 6e 20 57  he heap.  When W
7a50: 53 44 20 69 73 20 75 6e 73 75 70 70 6f 72 74 65  SD is unsupporte
7a60: 64 2c 20 74 68 65 20 76 61 72 69 61 62 6c 65 20  d, the variable 
7a70: 64 65 63 6c 61 72 61 74 69 6f 6e 73 20 73 63 61  declarations sca
7a80: 74 74 65 72 65 64 0a 2a 2a 20 74 68 72 6f 75 67  ttered.** throug
7a90: 68 6f 75 74 20 74 68 65 20 53 51 4c 69 74 65 20  hout the SQLite 
7aa0: 63 6f 64 65 20 6d 75 73 74 20 62 65 63 6f 6d 65  code must become
7ab0: 20 63 6f 6e 73 74 61 6e 74 73 20 69 6e 73 74 65   constants inste
7ac0: 61 64 2e 20 20 54 68 65 20 53 51 4c 49 54 45 5f  ad.  The SQLITE_
7ad0: 57 53 44 0a 2a 2a 20 6d 61 63 72 6f 20 69 73 20  WSD.** macro is 
7ae0: 75 73 65 64 20 66 6f 72 20 74 68 69 73 20 70 75  used for this pu
7af0: 72 70 6f 73 65 2e 20 20 41 6e 64 20 69 6e 73 74  rpose.  And inst
7b00: 65 61 64 20 6f 66 20 72 65 66 65 72 65 6e 63 69  ead of referenci
7b10: 6e 67 20 74 68 65 20 76 61 72 69 61 62 6c 65 0a  ng the variable.
7b20: 2a 2a 20 64 69 72 65 63 74 6c 79 2c 20 77 65 20  ** directly, we 
7b30: 75 73 65 20 69 74 73 20 63 6f 6e 73 74 61 6e 74  use its constant
7b40: 20 61 73 20 61 20 6b 65 79 20 74 6f 20 6c 6f 6f   as a key to loo
7b50: 6b 75 70 20 74 68 65 20 72 75 6e 2d 74 69 6d 65  kup the run-time
7b60: 20 61 6c 6c 6f 63 61 74 65 64 0a 2a 2a 20 62 75   allocated.** bu
7b70: 66 66 65 72 20 74 68 61 74 20 68 6f 6c 64 73 20  ffer that holds 
7b80: 72 65 61 6c 20 76 61 72 69 61 62 6c 65 2e 20 20  real variable.  
7b90: 54 68 65 20 63 6f 6e 73 74 61 6e 74 20 69 73 20  The constant is 
7ba0: 61 6c 73 6f 20 74 68 65 20 69 6e 69 74 69 61 6c  also the initial
7bb0: 69 7a 65 72 0a 2a 2a 20 66 6f 72 20 74 68 65 20  izer.** for the 
7bc0: 72 75 6e 2d 74 69 6d 65 20 61 6c 6c 6f 63 61 74  run-time allocat
7bd0: 65 64 20 62 75 66 66 65 72 2e 0a 2a 2a 0a 2a 2a  ed buffer..**.**
7be0: 20 49 6e 20 74 68 65 20 75 73 75 61 6c 20 63 61   In the usual ca
7bf0: 73 65 20 77 68 65 72 65 20 57 53 44 20 69 73 20  se where WSD is 
7c00: 73 75 70 70 6f 72 74 65 64 2c 20 74 68 65 20 53  supported, the S
7c10: 51 4c 49 54 45 5f 57 53 44 20 61 6e 64 20 47 4c  QLITE_WSD and GL
7c20: 4f 42 41 4c 0a 2a 2a 20 6d 61 63 72 6f 73 20 62  OBAL.** macros b
7c30: 65 63 6f 6d 65 20 6e 6f 2d 6f 70 73 20 61 6e 64  ecome no-ops and
7c40: 20 68 61 76 65 20 7a 65 72 6f 20 70 65 72 66 6f   have zero perfo
7c50: 72 6d 61 6e 63 65 20 69 6d 70 61 63 74 2e 0a 2a  rmance impact..*
7c60: 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
7c70: 4f 4d 49 54 5f 57 53 44 0a 20 20 23 64 65 66 69  OMIT_WSD.  #defi
7c80: 6e 65 20 53 51 4c 49 54 45 5f 57 53 44 20 63 6f  ne SQLITE_WSD co
7c90: 6e 73 74 0a 20 20 23 64 65 66 69 6e 65 20 47 4c  nst.  #define GL
7ca0: 4f 42 41 4c 28 74 2c 76 29 20 28 2a 28 74 2a 29  OBAL(t,v) (*(t*)
7cb0: 73 71 6c 69 74 65 33 5f 77 73 64 5f 66 69 6e 64  sqlite3_wsd_find
7cc0: 28 28 76 6f 69 64 2a 29 26 28 76 29 2c 20 73 69  ((void*)&(v), si
7cd0: 7a 65 6f 66 28 76 29 29 29 0a 20 20 23 64 65 66  zeof(v))).  #def
7ce0: 69 6e 65 20 73 71 6c 69 74 65 33 47 6c 6f 62 61  ine sqlite3Globa
7cf0: 6c 43 6f 6e 66 69 67 20 47 4c 4f 42 41 4c 28 73  lConfig GLOBAL(s
7d00: 74 72 75 63 74 20 53 71 6c 69 74 65 33 43 6f 6e  truct Sqlite3Con
7d10: 66 69 67 2c 20 73 71 6c 69 74 65 33 43 6f 6e 66  fig, sqlite3Conf
7d20: 69 67 29 0a 20 20 69 6e 74 20 73 71 6c 69 74 65  ig).  int sqlite
7d30: 33 5f 77 73 64 5f 69 6e 69 74 28 69 6e 74 20 4e  3_wsd_init(int N
7d40: 2c 20 69 6e 74 20 4a 29 3b 0a 20 20 76 6f 69 64  , int J);.  void
7d50: 20 2a 73 71 6c 69 74 65 33 5f 77 73 64 5f 66 69   *sqlite3_wsd_fi
7d60: 6e 64 28 76 6f 69 64 20 2a 4b 2c 20 69 6e 74 20  nd(void *K, int 
7d70: 4c 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65 66  L);.#else.  #def
7d80: 69 6e 65 20 53 51 4c 49 54 45 5f 57 53 44 0a 20  ine SQLITE_WSD. 
7d90: 20 23 64 65 66 69 6e 65 20 47 4c 4f 42 41 4c 28   #define GLOBAL(
7da0: 74 2c 76 29 20 76 0a 20 20 23 64 65 66 69 6e 65  t,v) v.  #define
7db0: 20 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c 43 6f   sqlite3GlobalCo
7dc0: 6e 66 69 67 20 73 71 6c 69 74 65 33 43 6f 6e 66  nfig sqlite3Conf
7dd0: 69 67 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  ig.#endif../*.**
7de0: 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d   The following m
7df0: 61 63 72 6f 73 20 61 72 65 20 75 73 65 64 20 74  acros are used t
7e00: 6f 20 73 75 70 70 72 65 73 73 20 63 6f 6d 70 69  o suppress compi
7e10: 6c 65 72 20 77 61 72 6e 69 6e 67 73 20 61 6e 64  ler warnings and
7e20: 20 74 6f 0a 2a 2a 20 6d 61 6b 65 20 69 74 20 63   to.** make it c
7e30: 6c 65 61 72 20 74 6f 20 68 75 6d 61 6e 20 72 65  lear to human re
7e40: 61 64 65 72 73 20 77 68 65 6e 20 61 20 66 75 6e  aders when a fun
7e50: 63 74 69 6f 6e 20 70 61 72 61 6d 65 74 65 72 20  ction parameter 
7e60: 69 73 20 64 65 6c 69 62 65 72 61 74 65 6c 79 0a  is deliberately.
7e70: 2a 2a 20 6c 65 66 74 20 75 6e 75 73 65 64 20 77  ** left unused w
7e80: 69 74 68 69 6e 20 74 68 65 20 62 6f 64 79 20 6f  ithin the body o
7e90: 66 20 61 20 66 75 6e 63 74 69 6f 6e 2e 20 54 68  f a function. Th
7ea0: 69 73 20 75 73 75 61 6c 6c 79 20 68 61 70 70 65  is usually happe
7eb0: 6e 73 20 77 68 65 6e 0a 2a 2a 20 61 20 66 75 6e  ns when.** a fun
7ec0: 63 74 69 6f 6e 20 69 73 20 63 61 6c 6c 65 64 20  ction is called 
7ed0: 76 69 61 20 61 20 66 75 6e 63 74 69 6f 6e 20 70  via a function p
7ee0: 6f 69 6e 74 65 72 2e 20 46 6f 72 20 65 78 61 6d  ointer. For exam
7ef0: 70 6c 65 20 74 68 65 0a 2a 2a 20 69 6d 70 6c 65  ple the.** imple
7f00: 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 20 61 6e 20  mentation of an 
7f10: 53 51 4c 20 61 67 67 72 65 67 61 74 65 20 73 74  SQL aggregate st
7f20: 65 70 20 63 61 6c 6c 62 61 63 6b 20 6d 61 79 20  ep callback may 
7f30: 6e 6f 74 20 75 73 65 20 74 68 65 0a 2a 2a 20 70  not use the.** p
7f40: 61 72 61 6d 65 74 65 72 20 69 6e 64 69 63 61 74  arameter indicat
7f50: 69 6e 67 20 74 68 65 20 6e 75 6d 62 65 72 20 6f  ing the number o
7f60: 66 20 61 72 67 75 6d 65 6e 74 73 20 70 61 73 73  f arguments pass
7f70: 65 64 20 74 6f 20 74 68 65 20 61 67 67 72 65 67  ed to the aggreg
7f80: 61 74 65 2c 0a 2a 2a 20 69 66 20 69 74 20 6b 6e  ate,.** if it kn
7f90: 6f 77 73 20 74 68 61 74 20 74 68 69 73 20 69 73  ows that this is
7fa0: 20 65 6e 66 6f 72 63 65 64 20 65 6c 73 65 77 68   enforced elsewh
7fb0: 65 72 65 2e 0a 2a 2a 0a 2a 2a 20 57 68 65 6e 20  ere..**.** When 
7fc0: 61 20 66 75 6e 63 74 69 6f 6e 20 70 61 72 61 6d  a function param
7fd0: 65 74 65 72 20 69 73 20 6e 6f 74 20 75 73 65 64  eter is not used
7fe0: 20 61 74 20 61 6c 6c 20 77 69 74 68 69 6e 20 74   at all within t
7ff0: 68 65 20 62 6f 64 79 20 6f 66 20 61 20 66 75 6e  he body of a fun
8000: 63 74 69 6f 6e 2c 0a 2a 2a 20 69 74 20 69 73 20  ction,.** it is 
8010: 67 65 6e 65 72 61 6c 6c 79 20 6e 61 6d 65 64 20  generally named 
8020: 22 4e 6f 74 55 73 65 64 22 20 6f 72 20 22 4e 6f  "NotUsed" or "No
8030: 74 55 73 65 64 32 22 20 74 6f 20 6d 61 6b 65 20  tUsed2" to make 
8040: 74 68 69 6e 67 73 20 65 76 65 6e 20 63 6c 65 61  things even clea
8050: 72 65 72 2e 0a 2a 2a 20 48 6f 77 65 76 65 72 2c  rer..** However,
8060: 20 74 68 65 73 65 20 6d 61 63 72 6f 73 20 6d 61   these macros ma
8070: 79 20 61 6c 73 6f 20 62 65 20 75 73 65 64 20 74  y also be used t
8080: 6f 20 73 75 70 70 72 65 73 73 20 77 61 72 6e 69  o suppress warni
8090: 6e 67 73 20 72 65 6c 61 74 65 64 20 74 6f 0a 2a  ngs related to.*
80a0: 2a 20 70 61 72 61 6d 65 74 65 72 73 20 74 68 61  * parameters tha
80b0: 74 20 6d 61 79 20 6f 72 20 6d 61 79 20 6e 6f 74  t may or may not
80c0: 20 62 65 20 75 73 65 64 20 64 65 70 65 6e 64 69   be used dependi
80d0: 6e 67 20 6f 6e 20 63 6f 6d 70 69 6c 61 74 69 6f  ng on compilatio
80e0: 6e 20 6f 70 74 69 6f 6e 73 2e 0a 2a 2a 20 46 6f  n options..** Fo
80f0: 72 20 65 78 61 6d 70 6c 65 20 74 68 6f 73 65 20  r example those 
8100: 70 61 72 61 6d 65 74 65 72 73 20 6f 6e 6c 79 20  parameters only 
8110: 75 73 65 64 20 69 6e 20 61 73 73 65 72 74 28 29  used in assert()
8120: 20 73 74 61 74 65 6d 65 6e 74 73 2e 20 49 6e 20   statements. In 
8130: 74 68 65 73 65 0a 2a 2a 20 63 61 73 65 73 20 74  these.** cases t
8140: 68 65 20 70 61 72 61 6d 65 74 65 72 73 20 61 72  he parameters ar
8150: 65 20 6e 61 6d 65 64 20 61 73 20 70 65 72 20 74  e named as per t
8160: 68 65 20 75 73 75 61 6c 20 63 6f 6e 76 65 6e 74  he usual convent
8170: 69 6f 6e 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  ions..*/.#define
8180: 20 55 4e 55 53 45 44 5f 50 41 52 41 4d 45 54 45   UNUSED_PARAMETE
8190: 52 28 78 29 20 28 76 6f 69 64 29 28 78 29 0a 23  R(x) (void)(x).#
81a0: 64 65 66 69 6e 65 20 55 4e 55 53 45 44 5f 50 41  define UNUSED_PA
81b0: 52 41 4d 45 54 45 52 32 28 78 2c 79 29 20 55 4e  RAMETER2(x,y) UN
81c0: 55 53 45 44 5f 50 41 52 41 4d 45 54 45 52 28 78  USED_PARAMETER(x
81d0: 29 2c 55 4e 55 53 45 44 5f 50 41 52 41 4d 45 54  ),UNUSED_PARAMET
81e0: 45 52 28 79 29 0a 0a 2f 2a 0a 2a 2a 20 46 6f 72  ER(y)../*.** For
81f0: 77 61 72 64 20 72 65 66 65 72 65 6e 63 65 73 20  ward references 
8200: 74 6f 20 73 74 72 75 63 74 75 72 65 73 0a 2a 2f  to structures.*/
8210: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
8220: 41 67 67 49 6e 66 6f 20 41 67 67 49 6e 66 6f 3b  AggInfo AggInfo;
8230: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
8240: 41 75 74 68 43 6f 6e 74 65 78 74 20 41 75 74 68  AuthContext Auth
8250: 43 6f 6e 74 65 78 74 3b 0a 74 79 70 65 64 65 66  Context;.typedef
8260: 20 73 74 72 75 63 74 20 41 75 74 6f 69 6e 63 49   struct AutoincI
8270: 6e 66 6f 20 41 75 74 6f 69 6e 63 49 6e 66 6f 3b  nfo AutoincInfo;
8280: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
8290: 42 69 74 76 65 63 20 42 69 74 76 65 63 3b 0a 74  Bitvec Bitvec;.t
82a0: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 43 6f  ypedef struct Co
82b0: 6c 6c 53 65 71 20 43 6f 6c 6c 53 65 71 3b 0a 74  llSeq CollSeq;.t
82c0: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 43 6f  ypedef struct Co
82d0: 6c 75 6d 6e 20 43 6f 6c 75 6d 6e 3b 0a 74 79 70  lumn Column;.typ
82e0: 65 64 65 66 20 73 74 72 75 63 74 20 44 62 20 44  edef struct Db D
82f0: 62 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  b;.typedef struc
8300: 74 20 53 63 68 65 6d 61 20 53 63 68 65 6d 61 3b  t Schema Schema;
8310: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
8320: 45 78 70 72 20 45 78 70 72 3b 0a 74 79 70 65 64  Expr Expr;.typed
8330: 65 66 20 73 74 72 75 63 74 20 45 78 70 72 4c 69  ef struct ExprLi
8340: 73 74 20 45 78 70 72 4c 69 73 74 3b 0a 74 79 70  st ExprList;.typ
8350: 65 64 65 66 20 73 74 72 75 63 74 20 45 78 70 72  edef struct Expr
8360: 53 70 61 6e 20 45 78 70 72 53 70 61 6e 3b 0a 74  Span ExprSpan;.t
8370: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 46 4b  ypedef struct FK
8380: 65 79 20 46 4b 65 79 3b 0a 74 79 70 65 64 65 66  ey FKey;.typedef
8390: 20 73 74 72 75 63 74 20 46 75 6e 63 44 65 73 74   struct FuncDest
83a0: 72 75 63 74 6f 72 20 46 75 6e 63 44 65 73 74 72  ructor FuncDestr
83b0: 75 63 74 6f 72 3b 0a 74 79 70 65 64 65 66 20 73  uctor;.typedef s
83c0: 74 72 75 63 74 20 46 75 6e 63 44 65 66 20 46 75  truct FuncDef Fu
83d0: 6e 63 44 65 66 3b 0a 74 79 70 65 64 65 66 20 73  ncDef;.typedef s
83e0: 74 72 75 63 74 20 46 75 6e 63 44 65 66 48 61 73  truct FuncDefHas
83f0: 68 20 46 75 6e 63 44 65 66 48 61 73 68 3b 0a 74  h FuncDefHash;.t
8400: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 49 64  ypedef struct Id
8410: 4c 69 73 74 20 49 64 4c 69 73 74 3b 0a 74 79 70  List IdList;.typ
8420: 65 64 65 66 20 73 74 72 75 63 74 20 49 6e 64 65  edef struct Inde
8430: 78 20 49 6e 64 65 78 3b 0a 74 79 70 65 64 65 66  x Index;.typedef
8440: 20 73 74 72 75 63 74 20 49 6e 64 65 78 53 61 6d   struct IndexSam
8450: 70 6c 65 20 49 6e 64 65 78 53 61 6d 70 6c 65 3b  ple IndexSample;
8460: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
8470: 4b 65 79 43 6c 61 73 73 20 4b 65 79 43 6c 61 73  KeyClass KeyClas
8480: 73 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  s;.typedef struc
8490: 74 20 4b 65 79 49 6e 66 6f 20 4b 65 79 49 6e 66  t KeyInfo KeyInf
84a0: 6f 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  o;.typedef struc
84b0: 74 20 4c 6f 6f 6b 61 73 69 64 65 20 4c 6f 6f 6b  t Lookaside Look
84c0: 61 73 69 64 65 3b 0a 74 79 70 65 64 65 66 20 73  aside;.typedef s
84d0: 74 72 75 63 74 20 4c 6f 6f 6b 61 73 69 64 65 53  truct LookasideS
84e0: 6c 6f 74 20 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f  lot LookasideSlo
84f0: 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  t;.typedef struc
8500: 74 20 4d 6f 64 75 6c 65 20 4d 6f 64 75 6c 65 3b  t Module Module;
8510: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
8520: 4e 61 6d 65 43 6f 6e 74 65 78 74 20 4e 61 6d 65  NameContext Name
8530: 43 6f 6e 74 65 78 74 3b 0a 74 79 70 65 64 65 66  Context;.typedef
8540: 20 73 74 72 75 63 74 20 50 61 72 73 65 20 50 61   struct Parse Pa
8550: 72 73 65 3b 0a 74 79 70 65 64 65 66 20 73 74 72  rse;.typedef str
8560: 75 63 74 20 50 72 65 55 70 64 61 74 65 20 50 72  uct PreUpdate Pr
8570: 65 55 70 64 61 74 65 3b 0a 74 79 70 65 64 65 66  eUpdate;.typedef
8580: 20 73 74 72 75 63 74 20 50 72 69 6e 74 66 41 72   struct PrintfAr
8590: 67 75 6d 65 6e 74 73 20 50 72 69 6e 74 66 41 72  guments PrintfAr
85a0: 67 75 6d 65 6e 74 73 3b 0a 74 79 70 65 64 65 66  guments;.typedef
85b0: 20 73 74 72 75 63 74 20 52 6f 77 53 65 74 20 52   struct RowSet R
85c0: 6f 77 53 65 74 3b 0a 74 79 70 65 64 65 66 20 73  owSet;.typedef s
85d0: 74 72 75 63 74 20 53 61 76 65 70 6f 69 6e 74 20  truct Savepoint 
85e0: 53 61 76 65 70 6f 69 6e 74 3b 0a 74 79 70 65 64  Savepoint;.typed
85f0: 65 66 20 73 74 72 75 63 74 20 53 65 6c 65 63 74  ef struct Select
8600: 20 53 65 6c 65 63 74 3b 0a 74 79 70 65 64 65 66   Select;.typedef
8610: 20 73 74 72 75 63 74 20 53 51 4c 69 74 65 54 68   struct SQLiteTh
8620: 72 65 61 64 20 53 51 4c 69 74 65 54 68 72 65 61  read SQLiteThrea
8630: 64 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  d;.typedef struc
8640: 74 20 53 65 6c 65 63 74 44 65 73 74 20 53 65 6c  t SelectDest Sel
8650: 65 63 74 44 65 73 74 3b 0a 74 79 70 65 64 65 66  ectDest;.typedef
8660: 20 73 74 72 75 63 74 20 53 72 63 4c 69 73 74 20   struct SrcList 
8670: 53 72 63 4c 69 73 74 3b 0a 74 79 70 65 64 65 66  SrcList;.typedef
8680: 20 73 74 72 75 63 74 20 53 74 72 41 63 63 75 6d   struct StrAccum
8690: 20 53 74 72 41 63 63 75 6d 3b 0a 74 79 70 65 64   StrAccum;.typed
86a0: 65 66 20 73 74 72 75 63 74 20 54 61 62 6c 65 20  ef struct Table 
86b0: 54 61 62 6c 65 3b 0a 74 79 70 65 64 65 66 20 73  Table;.typedef s
86c0: 74 72 75 63 74 20 54 61 62 6c 65 4c 6f 63 6b 20  truct TableLock 
86d0: 54 61 62 6c 65 4c 6f 63 6b 3b 0a 74 79 70 65 64  TableLock;.typed
86e0: 65 66 20 73 74 72 75 63 74 20 54 6f 6b 65 6e 20  ef struct Token 
86f0: 54 6f 6b 65 6e 3b 0a 74 79 70 65 64 65 66 20 73  Token;.typedef s
8700: 74 72 75 63 74 20 54 72 65 65 56 69 65 77 20 54  truct TreeView T
8710: 72 65 65 56 69 65 77 3b 0a 74 79 70 65 64 65 66  reeView;.typedef
8720: 20 73 74 72 75 63 74 20 54 72 69 67 67 65 72 20   struct Trigger 
8730: 54 72 69 67 67 65 72 3b 0a 74 79 70 65 64 65 66  Trigger;.typedef
8740: 20 73 74 72 75 63 74 20 54 72 69 67 67 65 72 50   struct TriggerP
8750: 72 67 20 54 72 69 67 67 65 72 50 72 67 3b 0a 74  rg TriggerPrg;.t
8760: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 54 72  ypedef struct Tr
8770: 69 67 67 65 72 53 74 65 70 20 54 72 69 67 67 65  iggerStep Trigge
8780: 72 53 74 65 70 3b 0a 74 79 70 65 64 65 66 20 73  rStep;.typedef s
8790: 74 72 75 63 74 20 55 6e 70 61 63 6b 65 64 52 65  truct UnpackedRe
87a0: 63 6f 72 64 20 55 6e 70 61 63 6b 65 64 52 65 63  cord UnpackedRec
87b0: 6f 72 64 3b 0a 74 79 70 65 64 65 66 20 73 74 72  ord;.typedef str
87c0: 75 63 74 20 56 54 61 62 6c 65 20 56 54 61 62 6c  uct VTable VTabl
87d0: 65 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  e;.typedef struc
87e0: 74 20 56 74 61 62 43 74 78 20 56 74 61 62 43 74  t VtabCtx VtabCt
87f0: 78 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  x;.typedef struc
8800: 74 20 57 61 6c 6b 65 72 20 57 61 6c 6b 65 72 3b  t Walker Walker;
8810: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
8820: 57 68 65 72 65 49 6e 66 6f 20 57 68 65 72 65 49  WhereInfo WhereI
8830: 6e 66 6f 3b 0a 74 79 70 65 64 65 66 20 73 74 72  nfo;.typedef str
8840: 75 63 74 20 57 69 74 68 20 57 69 74 68 3b 0a 0a  uct With With;..
8850: 2f 2a 0a 2a 2a 20 44 65 66 65 72 20 73 6f 75 72  /*.** Defer sour
8860: 63 69 6e 67 20 76 64 62 65 2e 68 20 61 6e 64 20  cing vdbe.h and 
8870: 62 74 72 65 65 2e 68 20 75 6e 74 69 6c 20 61 66  btree.h until af
8880: 74 65 72 20 74 68 65 20 22 75 38 22 20 61 6e 64  ter the "u8" and
8890: 0a 2a 2a 20 22 42 75 73 79 48 61 6e 64 6c 65 72  .** "BusyHandler
88a0: 22 20 74 79 70 65 64 65 66 73 2e 20 76 64 62 65  " typedefs. vdbe
88b0: 2e 68 20 61 6c 73 6f 20 72 65 71 75 69 72 65 73  .h also requires
88c0: 20 61 20 66 65 77 20 6f 66 20 74 68 65 20 6f 70   a few of the op
88d0: 61 71 75 65 0a 2a 2a 20 70 6f 69 6e 74 65 72 20  aque.** pointer 
88e0: 74 79 70 65 73 20 28 69 2e 65 2e 20 46 75 6e 63  types (i.e. Func
88f0: 44 65 66 29 20 64 65 66 69 6e 65 64 20 61 62 6f  Def) defined abo
8900: 76 65 2e 0a 2a 2f 0a 23 69 6e 63 6c 75 64 65 20  ve..*/.#include 
8910: 22 62 74 72 65 65 2e 68 22 0a 23 69 6e 63 6c 75  "btree.h".#inclu
8920: 64 65 20 22 76 64 62 65 2e 68 22 0a 23 69 6e 63  de "vdbe.h".#inc
8930: 6c 75 64 65 20 22 70 61 67 65 72 2e 68 22 0a 23  lude "pager.h".#
8940: 69 6e 63 6c 75 64 65 20 22 70 63 61 63 68 65 2e  include "pcache.
8950: 68 22 0a 23 69 6e 63 6c 75 64 65 20 22 6f 73 2e  h".#include "os.
8960: 68 22 0a 23 69 6e 63 6c 75 64 65 20 22 6d 75 74  h".#include "mut
8970: 65 78 2e 68 22 0a 0a 2f 2a 20 54 68 65 20 53 51  ex.h"../* The SQ
8980: 4c 49 54 45 5f 45 58 54 52 41 5f 44 55 52 41 42  LITE_EXTRA_DURAB
8990: 4c 45 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20  LE compile-time 
89a0: 6f 70 74 69 6f 6e 20 75 73 65 64 20 74 6f 20 73  option used to s
89b0: 65 74 20 74 68 65 20 64 65 66 61 75 6c 74 0a 2a  et the default.*
89c0: 2a 20 73 79 6e 63 68 72 6f 6e 6f 75 73 20 73 65  * synchronous se
89d0: 74 74 69 6e 67 20 74 6f 20 45 58 54 52 41 2e 20  tting to EXTRA. 
89e0: 20 49 74 20 69 73 20 6e 6f 20 6c 6f 6e 67 65 72   It is no longer
89f0: 20 73 75 70 70 6f 72 74 65 64 2e 0a 2a 2f 0a 23   supported..*/.#
8a00: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 58 54  ifdef SQLITE_EXT
8a10: 52 41 5f 44 55 52 41 42 4c 45 0a 23 20 77 61 72  RA_DURABLE.# war
8a20: 6e 69 6e 67 20 55 73 65 20 53 51 4c 49 54 45 5f  ning Use SQLITE_
8a30: 44 45 46 41 55 4c 54 5f 53 59 4e 43 48 52 4f 4e  DEFAULT_SYNCHRON
8a40: 4f 55 53 3d 33 20 69 6e 73 74 65 61 64 20 6f 66  OUS=3 instead of
8a50: 20 53 51 4c 49 54 45 5f 45 58 54 52 41 5f 44 55   SQLITE_EXTRA_DU
8a60: 52 41 42 4c 45 0a 23 20 64 65 66 69 6e 65 20 53  RABLE.# define S
8a70: 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 53 59  QLITE_DEFAULT_SY
8a80: 4e 43 48 52 4f 4e 4f 55 53 20 33 0a 23 65 6e 64  NCHRONOUS 3.#end
8a90: 69 66 0a 0a 2f 2a 0a 2a 2a 20 44 65 66 61 75 6c  if../*.** Defaul
8aa0: 74 20 73 79 6e 63 68 72 6f 6e 6f 75 73 20 6c 65  t synchronous le
8ab0: 76 65 6c 73 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65  vels..**.** Note
8ac0: 20 74 68 61 74 20 28 66 6f 72 20 68 69 73 74 6f   that (for histo
8ad0: 72 63 61 6c 20 72 65 61 73 6f 6e 73 29 20 74 68  rcal reasons) th
8ae0: 65 20 50 41 47 45 52 5f 53 59 4e 43 48 52 4f 4e  e PAGER_SYNCHRON
8af0: 4f 55 53 5f 2a 20 6d 61 63 72 6f 73 20 64 69 66  OUS_* macros dif
8b00: 66 65 72 0a 2a 2a 20 66 72 6f 6d 20 74 68 65 20  fer.** from the 
8b10: 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 53  SQLITE_DEFAULT_S
8b20: 59 4e 43 48 52 4f 4e 4f 55 53 20 76 61 6c 75 65  YNCHRONOUS value
8b30: 20 62 79 20 31 2e 0a 2a 2a 0a 2a 2a 20 20 20 20   by 1..**.**    
8b40: 20 20 20 20 20 20 20 50 41 47 45 52 5f 53 59 4e         PAGER_SYN
8b50: 43 48 52 4f 4e 4f 55 53 20 20 20 20 20 20 20 44  CHRONOUS       D
8b60: 45 46 41 55 4c 54 5f 53 59 4e 43 48 52 4f 4e 4f  EFAULT_SYNCHRONO
8b70: 55 53 0a 2a 2a 20 20 20 4f 46 46 20 20 20 20 20  US.**   OFF     
8b80: 20 20 20 20 20 20 31 20 20 20 20 20 20 20 20 20        1         
8b90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8ba0: 30 0a 2a 2a 20 20 20 4e 4f 52 4d 41 4c 20 20 20  0.**   NORMAL   
8bb0: 20 20 20 20 20 32 20 20 20 20 20 20 20 20 20 20       2          
8bc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 31                 1
8bd0: 0a 2a 2a 20 20 20 46 55 4c 4c 20 20 20 20 20 20  .**   FULL      
8be0: 20 20 20 20 33 20 20 20 20 20 20 20 20 20 20 20      3           
8bf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 32 0a                2.
8c00: 2a 2a 20 20 20 45 58 54 52 41 20 20 20 20 20 20  **   EXTRA      
8c10: 20 20 20 34 20 20 20 20 20 20 20 20 20 20 20 20     4            
8c20: 20 20 20 20 20 20 20 20 20 20 20 20 20 33 0a 2a               3.*
8c30: 2a 0a 2a 2a 20 54 68 65 20 22 50 52 41 47 4d 41  *.** The "PRAGMA
8c40: 20 73 79 6e 63 68 72 6f 6e 6f 75 73 22 20 73 74   synchronous" st
8c50: 61 74 65 6d 65 6e 74 20 61 6c 73 6f 20 75 73 65  atement also use
8c60: 73 20 74 68 65 20 7a 65 72 6f 2d 62 61 73 65 64  s the zero-based
8c70: 20 6e 75 6d 62 65 72 73 2e 0a 2a 2a 20 49 6e 20   numbers..** In 
8c80: 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68 65  other words, the
8c90: 20 7a 65 72 6f 2d 62 61 73 65 64 20 6e 75 6d 62   zero-based numb
8ca0: 65 72 73 20 61 72 65 20 75 73 65 64 20 66 6f 72  ers are used for
8cb0: 20 61 6c 6c 20 65 78 74 65 72 6e 61 6c 20 69 6e   all external in
8cc0: 74 65 72 66 61 63 65 73 0a 2a 2a 20 61 6e 64 20  terfaces.** and 
8cd0: 74 68 65 20 6f 6e 65 2d 62 61 73 65 64 20 76 61  the one-based va
8ce0: 6c 75 65 73 20 61 72 65 20 75 73 65 64 20 69 6e  lues are used in
8cf0: 74 65 72 6e 61 6c 6c 79 2e 0a 2a 2f 0a 23 69 66  ternally..*/.#if
8d00: 6e 64 65 66 20 53 51 4c 49 54 45 5f 44 45 46 41  ndef SQLITE_DEFA
8d10: 55 4c 54 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 0a  ULT_SYNCHRONOUS.
8d20: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
8d30: 44 45 46 41 55 4c 54 5f 53 59 4e 43 48 52 4f 4e  DEFAULT_SYNCHRON
8d40: 4f 55 53 20 28 50 41 47 45 52 5f 53 59 4e 43 48  OUS (PAGER_SYNCH
8d50: 52 4f 4e 4f 55 53 5f 46 55 4c 4c 2d 31 29 0a 23  RONOUS_FULL-1).#
8d60: 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51  endif.#ifndef SQ
8d70: 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 57 41 4c  LITE_DEFAULT_WAL
8d80: 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 0a 23 20 64  _SYNCHRONOUS.# d
8d90: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 45 46  efine SQLITE_DEF
8da0: 41 55 4c 54 5f 57 41 4c 5f 53 59 4e 43 48 52 4f  AULT_WAL_SYNCHRO
8db0: 4e 4f 55 53 20 53 51 4c 49 54 45 5f 44 45 46 41  NOUS SQLITE_DEFA
8dc0: 55 4c 54 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 0a  ULT_SYNCHRONOUS.
8dd0: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 45 61  #endif../*.** Ea
8de0: 63 68 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  ch database file
8df0: 20 74 6f 20 62 65 20 61 63 63 65 73 73 65 64 20   to be accessed 
8e00: 62 79 20 74 68 65 20 73 79 73 74 65 6d 20 69 73  by the system is
8e10: 20 61 6e 20 69 6e 73 74 61 6e 63 65 0a 2a 2a 20   an instance.** 
8e20: 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  of the following
8e30: 20 73 74 72 75 63 74 75 72 65 2e 20 20 54 68 65   structure.  The
8e40: 72 65 20 61 72 65 20 6e 6f 72 6d 61 6c 6c 79 20  re are normally 
8e50: 74 77 6f 20 6f 66 20 74 68 65 73 65 20 73 74 72  two of these str
8e60: 75 63 74 75 72 65 73 0a 2a 2a 20 69 6e 20 74 68  uctures.** in th
8e70: 65 20 73 71 6c 69 74 65 2e 61 44 62 5b 5d 20 61  e sqlite.aDb[] a
8e80: 72 72 61 79 2e 20 20 61 44 62 5b 30 5d 20 69 73  rray.  aDb[0] is
8e90: 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61   the main databa
8ea0: 73 65 20 66 69 6c 65 20 61 6e 64 0a 2a 2a 20 61  se file and.** a
8eb0: 44 62 5b 31 5d 20 69 73 20 74 68 65 20 64 61 74  Db[1] is the dat
8ec0: 61 62 61 73 65 20 66 69 6c 65 20 75 73 65 64 20  abase file used 
8ed0: 74 6f 20 68 6f 6c 64 20 74 65 6d 70 6f 72 61 72  to hold temporar
8ee0: 79 20 74 61 62 6c 65 73 2e 20 20 41 64 64 69 74  y tables.  Addit
8ef0: 69 6f 6e 61 6c 0a 2a 2a 20 64 61 74 61 62 61 73  ional.** databas
8f00: 65 73 20 6d 61 79 20 62 65 20 61 74 74 61 63 68  es may be attach
8f10: 65 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 44 62  ed..*/.struct Db
8f20: 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65   {.  char *zName
8f30: 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d  ;         /* Nam
8f40: 65 20 6f 66 20 74 68 69 73 20 64 61 74 61 62 61  e of this databa
8f50: 73 65 20 2a 2f 0a 20 20 42 74 72 65 65 20 2a 70  se */.  Btree *p
8f60: 42 74 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  Bt;          /* 
8f70: 54 68 65 20 42 2a 54 72 65 65 20 73 74 72 75 63  The B*Tree struc
8f80: 74 75 72 65 20 66 6f 72 20 74 68 69 73 20 64 61  ture for this da
8f90: 74 61 62 61 73 65 20 66 69 6c 65 20 2a 2f 0a 20  tabase file */. 
8fa0: 20 75 38 20 73 61 66 65 74 79 5f 6c 65 76 65 6c   u8 safety_level
8fb0: 3b 20 20 20 20 20 2f 2a 20 48 6f 77 20 61 67 67  ;     /* How agg
8fc0: 72 65 73 73 69 76 65 20 61 74 20 73 79 6e 63 69  ressive at synci
8fd0: 6e 67 20 64 61 74 61 20 74 6f 20 64 69 73 6b 20  ng data to disk 
8fe0: 2a 2f 0a 20 20 75 38 20 62 53 79 6e 63 53 65 74  */.  u8 bSyncSet
8ff0: 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75  ;         /* Tru
9000: 65 20 69 66 20 22 50 52 41 47 4d 41 20 73 79 6e  e if "PRAGMA syn
9010: 63 68 72 6f 6e 6f 75 73 3d 4e 22 20 68 61 73 20  chronous=N" has 
9020: 62 65 65 6e 20 72 75 6e 20 2a 2f 0a 20 20 53 63  been run */.  Sc
9030: 68 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20 20  hema *pSchema;  
9040: 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f     /* Pointer to
9050: 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61   database schema
9060: 20 28 70 6f 73 73 69 62 6c 79 20 73 68 61 72 65   (possibly share
9070: 64 29 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  d) */.};../*.** 
9080: 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  An instance of t
9090: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72  he following str
90a0: 75 63 74 75 72 65 20 73 74 6f 72 65 73 20 61 20  ucture stores a 
90b0: 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 2e  database schema.
90c0: 0a 2a 2a 0a 2a 2a 20 4d 6f 73 74 20 53 63 68 65  .**.** Most Sche
90d0: 6d 61 20 6f 62 6a 65 63 74 73 20 61 72 65 20 61  ma objects are a
90e0: 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 61  ssociated with a
90f0: 20 42 74 72 65 65 2e 20 20 54 68 65 20 65 78 63   Btree.  The exc
9100: 65 70 74 69 6f 6e 20 69 73 0a 2a 2a 20 74 68 65  eption is.** the
9110: 20 53 63 68 65 6d 61 20 66 6f 72 20 74 68 65 20   Schema for the 
9120: 54 45 4d 50 20 64 61 74 61 62 61 65 73 20 28 73  TEMP databaes (s
9130: 71 6c 69 74 65 33 2e 61 44 62 5b 31 5d 29 20 77  qlite3.aDb[1]) w
9140: 68 69 63 68 20 69 73 20 66 72 65 65 2d 73 74 61  hich is free-sta
9150: 6e 64 69 6e 67 2e 0a 2a 2a 20 49 6e 20 73 68 61  nding..** In sha
9160: 72 65 64 20 63 61 63 68 65 20 6d 6f 64 65 2c 20  red cache mode, 
9170: 61 20 73 69 6e 67 6c 65 20 53 63 68 65 6d 61 20  a single Schema 
9180: 6f 62 6a 65 63 74 20 63 61 6e 20 62 65 20 73 68  object can be sh
9190: 61 72 65 64 20 62 79 20 6d 75 6c 74 69 70 6c 65  ared by multiple
91a0: 0a 2a 2a 20 42 74 72 65 65 73 20 74 68 61 74 20  .** Btrees that 
91b0: 72 65 66 65 72 20 74 6f 20 74 68 65 20 73 61 6d  refer to the sam
91c0: 65 20 75 6e 64 65 72 6c 79 69 6e 67 20 42 74 53  e underlying BtS
91d0: 68 61 72 65 64 20 6f 62 6a 65 63 74 2e 0a 2a 2a  hared object..**
91e0: 0a 2a 2a 20 53 63 68 65 6d 61 20 6f 62 6a 65 63  .** Schema objec
91f0: 74 73 20 61 72 65 20 61 75 74 6f 6d 61 74 69 63  ts are automatic
9200: 61 6c 6c 79 20 64 65 61 6c 6c 6f 63 61 74 65 64  ally deallocated
9210: 20 77 68 65 6e 20 74 68 65 20 6c 61 73 74 20 42   when the last B
9220: 74 72 65 65 20 74 68 61 74 0a 2a 2a 20 72 65 66  tree that.** ref
9230: 65 72 65 6e 63 65 73 20 74 68 65 6d 20 69 73 20  erences them is 
9240: 64 65 73 74 72 6f 79 65 64 2e 20 20 20 54 68 65  destroyed.   The
9250: 20 54 45 4d 50 20 53 63 68 65 6d 61 20 69 73 20   TEMP Schema is 
9260: 6d 61 6e 75 61 6c 6c 79 20 66 72 65 65 64 20 62  manually freed b
9270: 79 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 63 6c 6f  y.** sqlite3_clo
9280: 73 65 28 29 2e 0a 2a 0a 2a 2a 20 41 20 74 68 72  se()..*.** A thr
9290: 65 61 64 20 6d 75 73 74 20 62 65 20 68 6f 6c 64  ead must be hold
92a0: 69 6e 67 20 61 20 6d 75 74 65 78 20 6f 6e 20 74  ing a mutex on t
92b0: 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67  he corresponding
92c0: 20 42 74 72 65 65 20 69 6e 20 6f 72 64 65 72 0a   Btree in order.
92d0: 2a 2a 20 74 6f 20 61 63 63 65 73 73 20 53 63 68  ** to access Sch
92e0: 65 6d 61 20 63 6f 6e 74 65 6e 74 2e 20 20 54 68  ema content.  Th
92f0: 69 73 20 69 6d 70 6c 69 65 73 20 74 68 61 74 20  is implies that 
9300: 74 68 65 20 74 68 72 65 61 64 20 6d 75 73 74 20  the thread must 
9310: 61 6c 73 6f 20 62 65 0a 2a 2a 20 68 6f 6c 64 69  also be.** holdi
9320: 6e 67 20 61 20 6d 75 74 65 78 20 6f 6e 20 74 68  ng a mutex on th
9330: 65 20 73 71 6c 69 74 65 33 20 63 6f 6e 6e 65 63  e sqlite3 connec
9340: 74 69 6f 6e 20 70 6f 69 6e 74 65 72 20 74 68 61  tion pointer tha
9350: 74 20 6f 77 6e 73 20 74 68 65 20 42 74 72 65 65  t owns the Btree
9360: 2e 0a 2a 2a 20 46 6f 72 20 61 20 54 45 4d 50 20  ..** For a TEMP 
9370: 53 63 68 65 6d 61 2c 20 6f 6e 6c 79 20 74 68 65  Schema, only the
9380: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 6d 75 74 65   connection mute
9390: 78 20 69 73 20 72 65 71 75 69 72 65 64 2e 0a 2a  x is required..*
93a0: 2f 0a 73 74 72 75 63 74 20 53 63 68 65 6d 61 20  /.struct Schema 
93b0: 7b 0a 20 20 69 6e 74 20 73 63 68 65 6d 61 5f 63  {.  int schema_c
93c0: 6f 6f 6b 69 65 3b 20 20 20 2f 2a 20 44 61 74 61  ookie;   /* Data
93d0: 62 61 73 65 20 73 63 68 65 6d 61 20 76 65 72 73  base schema vers
93e0: 69 6f 6e 20 6e 75 6d 62 65 72 20 66 6f 72 20 74  ion number for t
93f0: 68 69 73 20 66 69 6c 65 20 2a 2f 0a 20 20 69 6e  his file */.  in
9400: 74 20 69 47 65 6e 65 72 61 74 69 6f 6e 3b 20 20  t iGeneration;  
9410: 20 20 20 2f 2a 20 47 65 6e 65 72 61 74 69 6f 6e     /* Generation
9420: 20 63 6f 75 6e 74 65 72 2e 20 20 49 6e 63 72 65   counter.  Incre
9430: 6d 65 6e 74 65 64 20 77 69 74 68 20 65 61 63 68  mented with each
9440: 20 63 68 61 6e 67 65 20 2a 2f 0a 20 20 48 61 73   change */.  Has
9450: 68 20 74 62 6c 48 61 73 68 3b 20 20 20 20 20 20  h tblHash;      
9460: 20 20 2f 2a 20 41 6c 6c 20 74 61 62 6c 65 73 20    /* All tables 
9470: 69 6e 64 65 78 65 64 20 62 79 20 6e 61 6d 65 20  indexed by name 
9480: 2a 2f 0a 20 20 48 61 73 68 20 69 64 78 48 61 73  */.  Hash idxHas
9490: 68 3b 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c  h;        /* All
94a0: 20 28 6e 61 6d 65 64 29 20 69 6e 64 69 63 65 73   (named) indices
94b0: 20 69 6e 64 65 78 65 64 20 62 79 20 6e 61 6d 65   indexed by name
94c0: 20 2a 2f 0a 20 20 48 61 73 68 20 74 72 69 67 48   */.  Hash trigH
94d0: 61 73 68 3b 20 20 20 20 20 20 20 2f 2a 20 41 6c  ash;       /* Al
94e0: 6c 20 74 72 69 67 67 65 72 73 20 69 6e 64 65 78  l triggers index
94f0: 65 64 20 62 79 20 6e 61 6d 65 20 2a 2f 0a 20 20  ed by name */.  
9500: 48 61 73 68 20 66 6b 65 79 48 61 73 68 3b 20 20  Hash fkeyHash;  
9510: 20 20 20 20 20 2f 2a 20 41 6c 6c 20 66 6f 72 65       /* All fore
9520: 69 67 6e 20 6b 65 79 73 20 62 79 20 72 65 66 65  ign keys by refe
9530: 72 65 6e 63 65 64 20 74 61 62 6c 65 20 6e 61 6d  renced table nam
9540: 65 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70 53  e */.  Table *pS
9550: 65 71 54 61 62 3b 20 20 20 20 20 20 2f 2a 20 54  eqTab;      /* T
9560: 68 65 20 73 71 6c 69 74 65 5f 73 65 71 75 65 6e  he sqlite_sequen
9570: 63 65 20 74 61 62 6c 65 20 75 73 65 64 20 62 79  ce table used by
9580: 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 2a   AUTOINCREMENT *
9590: 2f 0a 20 20 75 38 20 66 69 6c 65 5f 66 6f 72 6d  /.  u8 file_form
95a0: 61 74 3b 20 20 20 20 20 20 2f 2a 20 53 63 68 65  at;      /* Sche
95b0: 6d 61 20 66 6f 72 6d 61 74 20 76 65 72 73 69 6f  ma format versio
95c0: 6e 20 66 6f 72 20 74 68 69 73 20 66 69 6c 65 20  n for this file 
95d0: 2a 2f 0a 20 20 75 38 20 65 6e 63 3b 20 20 20 20  */.  u8 enc;    
95e0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78            /* Tex
95f0: 74 20 65 6e 63 6f 64 69 6e 67 20 75 73 65 64 20  t encoding used 
9600: 62 79 20 74 68 69 73 20 64 61 74 61 62 61 73 65  by this database
9610: 20 2a 2f 0a 20 20 75 31 36 20 73 63 68 65 6d 61   */.  u16 schema
9620: 46 6c 61 67 73 3b 20 20 20 20 20 2f 2a 20 46 6c  Flags;     /* Fl
9630: 61 67 73 20 61 73 73 6f 63 69 61 74 65 64 20 77  ags associated w
9640: 69 74 68 20 74 68 69 73 20 73 63 68 65 6d 61 20  ith this schema 
9650: 2a 2f 0a 20 20 69 6e 74 20 63 61 63 68 65 5f 73  */.  int cache_s
9660: 69 7a 65 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d  ize;      /* Num
9670: 62 65 72 20 6f 66 20 70 61 67 65 73 20 74 6f 20  ber of pages to 
9680: 75 73 65 20 69 6e 20 74 68 65 20 63 61 63 68 65  use in the cache
9690: 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68   */.};../*.** Th
96a0: 65 73 65 20 6d 61 63 72 6f 73 20 63 61 6e 20 62  ese macros can b
96b0: 65 20 75 73 65 64 20 74 6f 20 74 65 73 74 2c 20  e used to test, 
96c0: 73 65 74 2c 20 6f 72 20 63 6c 65 61 72 20 62 69  set, or clear bi
96d0: 74 73 20 69 6e 20 74 68 65 0a 2a 2a 20 44 62 2e  ts in the.** Db.
96e0: 70 53 63 68 65 6d 61 2d 3e 66 6c 61 67 73 20 66  pSchema->flags f
96f0: 69 65 6c 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  ield..*/.#define
9700: 20 44 62 48 61 73 50 72 6f 70 65 72 74 79 28 44   DbHasProperty(D
9710: 2c 49 2c 50 29 20 20 20 20 20 28 28 28 44 29 2d  ,I,P)     (((D)-
9720: 3e 61 44 62 5b 49 5d 2e 70 53 63 68 65 6d 61 2d  >aDb[I].pSchema-
9730: 3e 73 63 68 65 6d 61 46 6c 61 67 73 26 28 50 29  >schemaFlags&(P)
9740: 29 3d 3d 28 50 29 29 0a 23 64 65 66 69 6e 65 20  )==(P)).#define 
9750: 44 62 48 61 73 41 6e 79 50 72 6f 70 65 72 74 79  DbHasAnyProperty
9760: 28 44 2c 49 2c 50 29 20 20 28 28 28 44 29 2d 3e  (D,I,P)  (((D)->
9770: 61 44 62 5b 49 5d 2e 70 53 63 68 65 6d 61 2d 3e  aDb[I].pSchema->
9780: 73 63 68 65 6d 61 46 6c 61 67 73 26 28 50 29 29  schemaFlags&(P))
9790: 21 3d 30 29 0a 23 64 65 66 69 6e 65 20 44 62 53  !=0).#define DbS
97a0: 65 74 50 72 6f 70 65 72 74 79 28 44 2c 49 2c 50  etProperty(D,I,P
97b0: 29 20 20 20 20 20 28 44 29 2d 3e 61 44 62 5b 49  )     (D)->aDb[I
97c0: 5d 2e 70 53 63 68 65 6d 61 2d 3e 73 63 68 65 6d  ].pSchema->schem
97d0: 61 46 6c 61 67 73 7c 3d 28 50 29 0a 23 64 65 66  aFlags|=(P).#def
97e0: 69 6e 65 20 44 62 43 6c 65 61 72 50 72 6f 70 65  ine DbClearPrope
97f0: 72 74 79 28 44 2c 49 2c 50 29 20 20 20 28 44 29  rty(D,I,P)   (D)
9800: 2d 3e 61 44 62 5b 49 5d 2e 70 53 63 68 65 6d 61  ->aDb[I].pSchema
9810: 2d 3e 73 63 68 65 6d 61 46 6c 61 67 73 26 3d 7e  ->schemaFlags&=~
9820: 28 50 29 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77  (P)../*.** Allow
9830: 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20 74 68  ed values for th
9840: 65 20 44 42 2e 70 53 63 68 65 6d 61 2d 3e 66 6c  e DB.pSchema->fl
9850: 61 67 73 20 66 69 65 6c 64 2e 0a 2a 2a 0a 2a 2a  ags field..**.**
9860: 20 54 68 65 20 44 42 5f 53 63 68 65 6d 61 4c 6f   The DB_SchemaLo
9870: 61 64 65 64 20 66 6c 61 67 20 69 73 20 73 65 74  aded flag is set
9880: 20 61 66 74 65 72 20 74 68 65 20 64 61 74 61 62   after the datab
9890: 61 73 65 20 73 63 68 65 6d 61 20 68 61 73 20 62  ase schema has b
98a0: 65 65 6e 0a 2a 2a 20 72 65 61 64 20 69 6e 74 6f  een.** read into
98b0: 20 69 6e 74 65 72 6e 61 6c 20 68 61 73 68 20 74   internal hash t
98c0: 61 62 6c 65 73 2e 0a 2a 2a 0a 2a 2a 20 44 42 5f  ables..**.** DB_
98d0: 55 6e 72 65 73 65 74 56 69 65 77 73 20 6d 65 61  UnresetViews mea
98e0: 6e 73 20 74 68 61 74 20 6f 6e 65 20 6f 72 20 6d  ns that one or m
98f0: 6f 72 65 20 76 69 65 77 73 20 68 61 76 65 20 63  ore views have c
9900: 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 74 68 61 74  olumn names that
9910: 0a 2a 2a 20 68 61 76 65 20 62 65 65 6e 20 66 69  .** have been fi
9920: 6c 6c 65 64 20 6f 75 74 2e 20 20 49 66 20 74 68  lled out.  If th
9930: 65 20 73 63 68 65 6d 61 20 63 68 61 6e 67 65 73  e schema changes
9940: 2c 20 74 68 65 73 65 20 63 6f 6c 75 6d 6e 20 6e  , these column n
9950: 61 6d 65 73 20 6d 69 67 68 74 0a 2a 2a 20 63 68  ames might.** ch
9960: 61 6e 67 65 73 20 61 6e 64 20 73 6f 20 74 68 65  anges and so the
9970: 20 76 69 65 77 20 77 69 6c 6c 20 6e 65 65 64 20   view will need 
9980: 74 6f 20 62 65 20 72 65 73 65 74 2e 0a 2a 2f 0a  to be reset..*/.
9990: 23 64 65 66 69 6e 65 20 44 42 5f 53 63 68 65 6d  #define DB_Schem
99a0: 61 4c 6f 61 64 65 64 20 20 20 20 30 78 30 30 30  aLoaded    0x000
99b0: 31 20 20 2f 2a 20 54 68 65 20 73 63 68 65 6d 61  1  /* The schema
99c0: 20 68 61 73 20 62 65 65 6e 20 6c 6f 61 64 65 64   has been loaded
99d0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 44 42 5f 55   */.#define DB_U
99e0: 6e 72 65 73 65 74 56 69 65 77 73 20 20 20 20 30  nresetViews    0
99f0: 78 30 30 30 32 20 20 2f 2a 20 53 6f 6d 65 20 76  x0002  /* Some v
9a00: 69 65 77 73 20 68 61 76 65 20 64 65 66 69 6e 65  iews have define
9a10: 64 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 2a  d column names *
9a20: 2f 0a 23 64 65 66 69 6e 65 20 44 42 5f 45 6d 70  /.#define DB_Emp
9a30: 74 79 20 20 20 20 20 20 20 20 20 20 20 30 78 30  ty           0x0
9a40: 30 30 34 20 20 2f 2a 20 54 68 65 20 66 69 6c 65  004  /* The file
9a50: 20 69 73 20 65 6d 70 74 79 20 28 6c 65 6e 67 74   is empty (lengt
9a60: 68 20 30 20 62 79 74 65 73 29 20 2a 2f 0a 0a 2f  h 0 bytes) */../
9a70: 2a 0a 2a 2a 20 54 68 65 20 6e 75 6d 62 65 72 20  *.** The number 
9a80: 6f 66 20 64 69 66 66 65 72 65 6e 74 20 6b 69 6e  of different kin
9a90: 64 73 20 6f 66 20 74 68 69 6e 67 73 20 74 68 61  ds of things tha
9aa0: 74 20 63 61 6e 20 62 65 20 6c 69 6d 69 74 65 64  t can be limited
9ab0: 0a 2a 2a 20 75 73 69 6e 67 20 74 68 65 20 73 71  .** using the sq
9ac0: 6c 69 74 65 33 5f 6c 69 6d 69 74 28 29 20 69 6e  lite3_limit() in
9ad0: 74 65 72 66 61 63 65 2e 0a 2a 2f 0a 23 64 65 66  terface..*/.#def
9ae0: 69 6e 65 20 53 51 4c 49 54 45 5f 4e 5f 4c 49 4d  ine SQLITE_N_LIM
9af0: 49 54 20 28 53 51 4c 49 54 45 5f 4c 49 4d 49 54  IT (SQLITE_LIMIT
9b00: 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41 44 53 2b  _WORKER_THREADS+
9b10: 31 29 0a 0a 2f 2a 0a 2a 2a 20 4c 6f 6f 6b 61 73  1)../*.** Lookas
9b20: 69 64 65 20 6d 61 6c 6c 6f 63 20 69 73 20 61 20  ide malloc is a 
9b30: 73 65 74 20 6f 66 20 66 69 78 65 64 2d 73 69 7a  set of fixed-siz
9b40: 65 20 62 75 66 66 65 72 73 20 74 68 61 74 20 63  e buffers that c
9b50: 61 6e 20 62 65 20 75 73 65 64 0a 2a 2a 20 74 6f  an be used.** to
9b60: 20 73 61 74 69 73 66 79 20 73 6d 61 6c 6c 20 74   satisfy small t
9b70: 72 61 6e 73 69 65 6e 74 20 6d 65 6d 6f 72 79 20  ransient memory 
9b80: 61 6c 6c 6f 63 61 74 69 6f 6e 20 72 65 71 75 65  allocation reque
9b90: 73 74 73 20 66 6f 72 20 6f 62 6a 65 63 74 73 0a  sts for objects.
9ba0: 2a 2a 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  ** associated wi
9bb0: 74 68 20 61 20 70 61 72 74 69 63 75 6c 61 72 20  th a particular 
9bc0: 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74  database connect
9bd0: 69 6f 6e 2e 20 20 54 68 65 20 75 73 65 20 6f 66  ion.  The use of
9be0: 0a 2a 2a 20 6c 6f 6f 6b 61 73 69 64 65 20 6d 61  .** lookaside ma
9bf0: 6c 6c 6f 63 20 70 72 6f 76 69 64 65 73 20 61 20  lloc provides a 
9c00: 73 69 67 6e 69 66 69 63 61 6e 74 20 70 65 72 66  significant perf
9c10: 6f 72 6d 61 6e 63 65 20 65 6e 68 61 6e 63 65 6d  ormance enhancem
9c20: 65 6e 74 0a 2a 2a 20 28 61 70 70 72 6f 78 20 31  ent.** (approx 1
9c30: 30 25 29 20 62 79 20 61 76 6f 69 64 69 6e 67 20  0%) by avoiding 
9c40: 6e 75 6d 65 72 6f 75 73 20 6d 61 6c 6c 6f 63 2f  numerous malloc/
9c50: 66 72 65 65 20 72 65 71 75 65 73 74 73 20 77 68  free requests wh
9c60: 69 6c 65 20 70 61 72 73 69 6e 67 0a 2a 2a 20 53  ile parsing.** S
9c70: 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a 2a  QL statements..*
9c80: 2a 0a 2a 2a 20 54 68 65 20 4c 6f 6f 6b 61 73 69  *.** The Lookasi
9c90: 64 65 20 73 74 72 75 63 74 75 72 65 20 68 6f 6c  de structure hol
9ca0: 64 73 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  ds configuration
9cb0: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f   information abo
9cc0: 75 74 20 74 68 65 0a 2a 2a 20 6c 6f 6f 6b 61 73  ut the.** lookas
9cd0: 69 64 65 20 6d 61 6c 6c 6f 63 20 73 75 62 73 79  ide malloc subsy
9ce0: 73 74 65 6d 2e 20 20 45 61 63 68 20 61 76 61 69  stem.  Each avai
9cf0: 6c 61 62 6c 65 20 6d 65 6d 6f 72 79 20 61 6c 6c  lable memory all
9d00: 6f 63 61 74 69 6f 6e 20 69 6e 0a 2a 2a 20 74 68  ocation in.** th
9d10: 65 20 6c 6f 6f 6b 61 73 69 64 65 20 73 75 62 73  e lookaside subs
9d20: 79 73 74 65 6d 20 69 73 20 73 74 6f 72 65 64 20  ystem is stored 
9d30: 6f 6e 20 61 20 6c 69 6e 6b 65 64 20 6c 69 73 74  on a linked list
9d40: 20 6f 66 20 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f   of LookasideSlo
9d50: 74 0a 2a 2a 20 6f 62 6a 65 63 74 73 2e 0a 2a 2a  t.** objects..**
9d60: 0a 2a 2a 20 4c 6f 6f 6b 61 73 69 64 65 20 61 6c  .** Lookaside al
9d70: 6c 6f 63 61 74 69 6f 6e 73 20 61 72 65 20 6f 6e  locations are on
9d80: 6c 79 20 61 6c 6c 6f 77 65 64 20 66 6f 72 20 6f  ly allowed for o
9d90: 62 6a 65 63 74 73 20 74 68 61 74 20 61 72 65 20  bjects that are 
9da0: 61 73 73 6f 63 69 61 74 65 64 0a 2a 2a 20 77 69  associated.** wi
9db0: 74 68 20 61 20 70 61 72 74 69 63 75 6c 61 72 20  th a particular 
9dc0: 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74  database connect
9dd0: 69 6f 6e 2e 20 20 48 65 6e 63 65 2c 20 73 63 68  ion.  Hence, sch
9de0: 65 6d 61 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  ema information 
9df0: 63 61 6e 6e 6f 74 0a 2a 2a 20 62 65 20 73 74 6f  cannot.** be sto
9e00: 72 65 64 20 69 6e 20 6c 6f 6f 6b 61 73 69 64 65  red in lookaside
9e10: 20 62 65 63 61 75 73 65 20 69 6e 20 73 68 61 72   because in shar
9e20: 65 64 20 63 61 63 68 65 20 6d 6f 64 65 20 74 68  ed cache mode th
9e30: 65 20 73 63 68 65 6d 61 20 69 6e 66 6f 72 6d 61  e schema informa
9e40: 74 69 6f 6e 0a 2a 2a 20 69 73 20 73 68 61 72 65  tion.** is share
9e50: 64 20 62 79 20 6d 75 6c 74 69 70 6c 65 20 64 61  d by multiple da
9e60: 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f  tabase connectio
9e70: 6e 73 2e 20 20 54 68 65 72 65 66 6f 72 65 2c 20  ns.  Therefore, 
9e80: 77 68 69 6c 65 20 70 61 72 73 69 6e 67 0a 2a 2a  while parsing.**
9e90: 20 73 63 68 65 6d 61 20 69 6e 66 6f 72 6d 61 74   schema informat
9ea0: 69 6f 6e 2c 20 74 68 65 20 4c 6f 6f 6b 61 73 69  ion, the Lookasi
9eb0: 64 65 2e 62 45 6e 61 62 6c 65 64 20 66 6c 61 67  de.bEnabled flag
9ec0: 20 69 73 20 63 6c 65 61 72 65 64 20 73 6f 20 74   is cleared so t
9ed0: 68 61 74 0a 2a 2a 20 6c 6f 6f 6b 61 73 69 64 65  hat.** lookaside
9ee0: 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 61 72 65   allocations are
9ef0: 20 6e 6f 74 20 75 73 65 64 20 74 6f 20 63 6f 6e   not used to con
9f00: 73 74 72 75 63 74 20 74 68 65 20 73 63 68 65 6d  struct the schem
9f10: 61 20 6f 62 6a 65 63 74 73 2e 0a 2a 2f 0a 73 74  a objects..*/.st
9f20: 72 75 63 74 20 4c 6f 6f 6b 61 73 69 64 65 20 7b  ruct Lookaside {
9f30: 0a 20 20 75 33 32 20 62 44 69 73 61 62 6c 65 3b  .  u32 bDisable;
9f40: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e             /* On
9f50: 6c 79 20 6f 70 65 72 61 74 65 20 74 68 65 20 6c  ly operate the l
9f60: 6f 6f 6b 61 73 69 64 65 20 77 68 65 6e 20 7a 65  ookaside when ze
9f70: 72 6f 20 2a 2f 0a 20 20 75 31 36 20 73 7a 3b 20  ro */.  u16 sz; 
9f80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9f90: 2f 2a 20 53 69 7a 65 20 6f 66 20 65 61 63 68 20  /* Size of each 
9fa0: 62 75 66 66 65 72 20 69 6e 20 62 79 74 65 73 20  buffer in bytes 
9fb0: 2a 2f 0a 20 20 75 38 20 62 4d 61 6c 6c 6f 63 65  */.  u8 bMalloce
9fc0: 64 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  d;           /* 
9fd0: 54 72 75 65 20 69 66 20 70 53 74 61 72 74 20 6f  True if pStart o
9fe0: 62 74 61 69 6e 65 64 20 66 72 6f 6d 20 73 71 6c  btained from sql
9ff0: 69 74 65 33 5f 6d 61 6c 6c 6f 63 28 29 20 2a 2f  ite3_malloc() */
a000: 0a 20 20 69 6e 74 20 6e 4f 75 74 3b 20 20 20 20  .  int nOut;    
a010: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
a020: 6d 62 65 72 20 6f 66 20 62 75 66 66 65 72 73 20  mber of buffers 
a030: 63 75 72 72 65 6e 74 6c 79 20 63 68 65 63 6b 65  currently checke
a040: 64 20 6f 75 74 20 2a 2f 0a 20 20 69 6e 74 20 6d  d out */.  int m
a050: 78 4f 75 74 3b 20 20 20 20 20 20 20 20 20 20 20  xOut;           
a060: 20 20 20 2f 2a 20 48 69 67 68 77 61 74 65 72 20     /* Highwater 
a070: 6d 61 72 6b 20 66 6f 72 20 6e 4f 75 74 20 2a 2f  mark for nOut */
a080: 0a 20 20 69 6e 74 20 61 6e 53 74 61 74 5b 33 5d  .  int anStat[3]
a090: 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 30 3a  ;          /* 0:
a0a0: 20 68 69 74 73 2e 20 20 31 3a 20 73 69 7a 65 20   hits.  1: size 
a0b0: 6d 69 73 73 65 73 2e 20 20 32 3a 20 66 75 6c 6c  misses.  2: full
a0c0: 20 6d 69 73 73 65 73 20 2a 2f 0a 20 20 4c 6f 6f   misses */.  Loo
a0d0: 6b 61 73 69 64 65 53 6c 6f 74 20 2a 70 46 72 65  kasideSlot *pFre
a0e0: 65 3b 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20  e;   /* List of 
a0f0: 61 76 61 69 6c 61 62 6c 65 20 62 75 66 66 65 72  available buffer
a100: 73 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 53 74  s */.  void *pSt
a110: 61 72 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f  art;           /
a120: 2a 20 46 69 72 73 74 20 62 79 74 65 20 6f 66 20  * First byte of 
a130: 61 76 61 69 6c 61 62 6c 65 20 6d 65 6d 6f 72 79  available memory
a140: 20 73 70 61 63 65 20 2a 2f 0a 20 20 76 6f 69 64   space */.  void
a150: 20 2a 70 45 6e 64 3b 20 20 20 20 20 20 20 20 20   *pEnd;         
a160: 20 20 20 20 2f 2a 20 46 69 72 73 74 20 62 79 74      /* First byt
a170: 65 20 70 61 73 74 20 65 6e 64 20 6f 66 20 61 76  e past end of av
a180: 61 69 6c 61 62 6c 65 20 73 70 61 63 65 20 2a 2f  ailable space */
a190: 0a 7d 3b 0a 73 74 72 75 63 74 20 4c 6f 6f 6b 61  .};.struct Looka
a1a0: 73 69 64 65 53 6c 6f 74 20 7b 0a 20 20 4c 6f 6f  sideSlot {.  Loo
a1b0: 6b 61 73 69 64 65 53 6c 6f 74 20 2a 70 4e 65 78  kasideSlot *pNex
a1c0: 74 3b 20 20 20 20 2f 2a 20 4e 65 78 74 20 62 75  t;    /* Next bu
a1d0: 66 66 65 72 20 69 6e 20 74 68 65 20 6c 69 73 74  ffer in the list
a1e0: 20 6f 66 20 66 72 65 65 20 62 75 66 66 65 72 73   of free buffers
a1f0: 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20   */.};../*.** A 
a200: 68 61 73 68 20 74 61 62 6c 65 20 66 6f 72 20 62  hash table for b
a210: 75 69 6c 74 2d 69 6e 20 66 75 6e 63 74 69 6f 6e  uilt-in function
a220: 20 64 65 66 69 6e 69 74 69 6f 6e 73 2e 20 20 28   definitions.  (
a230: 41 70 70 6c 69 63 61 74 69 6f 6e 2d 64 65 66 69  Application-defi
a240: 6e 65 64 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 73  ned.** functions
a250: 20 75 73 65 20 61 20 72 65 67 75 6c 61 72 20 74   use a regular t
a260: 61 62 6c 65 20 74 61 62 6c 65 20 66 72 6f 6d 20  able table from 
a270: 68 61 73 68 2e 68 2e 29 0a 2a 2a 0a 2a 2a 20 48  hash.h.).**.** H
a280: 61 73 68 20 65 61 63 68 20 46 75 6e 63 44 65 66  ash each FuncDef
a290: 20 73 74 72 75 63 74 75 72 65 20 69 6e 74 6f 20   structure into 
a2a0: 6f 6e 65 20 6f 66 20 74 68 65 20 46 75 6e 63 44  one of the FuncD
a2b0: 65 66 48 61 73 68 2e 61 5b 5d 20 73 6c 6f 74 73  efHash.a[] slots
a2c0: 2e 0a 2a 2a 20 43 6f 6c 6c 69 73 69 6f 6e 73 20  ..** Collisions 
a2d0: 61 72 65 20 6f 6e 20 74 68 65 20 46 75 6e 63 44  are on the FuncD
a2e0: 65 66 2e 75 2e 70 48 61 73 68 20 63 68 61 69 6e  ef.u.pHash chain
a2f0: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  ..*/.#define SQL
a300: 49 54 45 5f 46 55 4e 43 5f 48 41 53 48 5f 53 5a  ITE_FUNC_HASH_SZ
a310: 20 32 33 0a 73 74 72 75 63 74 20 46 75 6e 63 44   23.struct FuncD
a320: 65 66 48 61 73 68 20 7b 0a 20 20 46 75 6e 63 44  efHash {.  FuncD
a330: 65 66 20 2a 61 5b 53 51 4c 49 54 45 5f 46 55 4e  ef *a[SQLITE_FUN
a340: 43 5f 48 41 53 48 5f 53 5a 5d 3b 20 20 20 20 20  C_HASH_SZ];     
a350: 20 20 2f 2a 20 48 61 73 68 20 74 61 62 6c 65 20    /* Hash table 
a360: 66 6f 72 20 66 75 6e 63 74 69 6f 6e 73 20 2a 2f  for functions */
a370: 0a 7d 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49  .};..#ifdef SQLI
a380: 54 45 5f 55 53 45 52 5f 41 55 54 48 45 4e 54 49  TE_USER_AUTHENTI
a390: 43 41 54 49 4f 4e 0a 2f 2a 0a 2a 2a 20 49 6e 66  CATION./*.** Inf
a3a0: 6f 72 6d 61 74 69 6f 6e 20 68 65 6c 64 20 69 6e  ormation held in
a3b0: 20 74 68 65 20 22 73 71 6c 69 74 65 33 22 20 64   the "sqlite3" d
a3c0: 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
a3d0: 6f 6e 20 6f 62 6a 65 63 74 20 61 6e 64 20 75 73  on object and us
a3e0: 65 64 0a 2a 2a 20 74 6f 20 6d 61 6e 61 67 65 20  ed.** to manage 
a3f0: 75 73 65 72 20 61 75 74 68 65 6e 74 69 63 61 74  user authenticat
a400: 69 6f 6e 2e 0a 2a 2f 0a 74 79 70 65 64 65 66 20  ion..*/.typedef 
a410: 73 74 72 75 63 74 20 73 71 6c 69 74 65 33 5f 75  struct sqlite3_u
a420: 73 65 72 61 75 74 68 20 73 71 6c 69 74 65 33 5f  serauth sqlite3_
a430: 75 73 65 72 61 75 74 68 3b 0a 73 74 72 75 63 74  userauth;.struct
a440: 20 73 71 6c 69 74 65 33 5f 75 73 65 72 61 75 74   sqlite3_useraut
a450: 68 20 7b 0a 20 20 75 38 20 61 75 74 68 4c 65 76  h {.  u8 authLev
a460: 65 6c 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  el;             
a470: 20 20 20 20 2f 2a 20 43 75 72 72 65 6e 74 20 61      /* Current a
a480: 75 74 68 65 6e 74 69 63 61 74 69 6f 6e 20 6c 65  uthentication le
a490: 76 65 6c 20 2a 2f 0a 20 20 69 6e 74 20 6e 41 75  vel */.  int nAu
a4a0: 74 68 50 57 3b 20 20 20 20 20 20 20 20 20 20 20  thPW;           
a4b0: 20 20 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f         /* Size o
a4c0: 66 20 74 68 65 20 7a 41 75 74 68 50 57 20 69 6e  f the zAuthPW in
a4d0: 20 62 79 74 65 73 20 2a 2f 0a 20 20 63 68 61 72   bytes */.  char
a4e0: 20 2a 7a 41 75 74 68 50 57 3b 20 20 20 20 20 20   *zAuthPW;      
a4f0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50 61 73            /* Pas
a500: 73 77 6f 72 64 20 75 73 65 64 20 74 6f 20 61 75  sword used to au
a510: 74 68 65 6e 74 69 63 61 74 65 20 2a 2f 0a 20 20  thenticate */.  
a520: 63 68 61 72 20 2a 7a 41 75 74 68 55 73 65 72 3b  char *zAuthUser;
a530: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
a540: 20 55 73 65 72 20 6e 61 6d 65 20 75 73 65 64 20   User name used 
a550: 74 6f 20 61 75 74 68 65 6e 74 69 63 61 74 65 20  to authenticate 
a560: 2a 2f 0a 7d 3b 0a 0a 2f 2a 20 41 6c 6c 6f 77 65  */.};../* Allowe
a570: 64 20 76 61 6c 75 65 73 20 66 6f 72 20 73 71 6c  d values for sql
a580: 69 74 65 33 5f 75 73 65 72 61 75 74 68 2e 61 75  ite3_userauth.au
a590: 74 68 4c 65 76 65 6c 20 2a 2f 0a 23 64 65 66 69  thLevel */.#defi
a5a0: 6e 65 20 55 41 55 54 48 5f 55 6e 6b 6e 6f 77 6e  ne UAUTH_Unknown
a5b0: 20 20 20 20 20 30 20 20 20 20 20 2f 2a 20 41 75       0     /* Au
a5c0: 74 68 65 6e 74 69 63 61 74 69 6f 6e 20 6e 6f 74  thentication not
a5d0: 20 79 65 74 20 63 68 65 63 6b 65 64 20 2a 2f 0a   yet checked */.
a5e0: 23 64 65 66 69 6e 65 20 55 41 55 54 48 5f 46 61  #define UAUTH_Fa
a5f0: 69 6c 20 20 20 20 20 20 20 20 31 20 20 20 20 20  il        1     
a600: 2f 2a 20 55 73 65 72 20 61 75 74 68 65 6e 74 69  /* User authenti
a610: 63 61 74 69 6f 6e 20 66 61 69 6c 65 64 20 2a 2f  cation failed */
a620: 0a 23 64 65 66 69 6e 65 20 55 41 55 54 48 5f 55  .#define UAUTH_U
a630: 73 65 72 20 20 20 20 20 20 20 20 32 20 20 20 20  ser        2    
a640: 20 2f 2a 20 41 75 74 68 65 6e 74 69 63 61 74 65   /* Authenticate
a650: 64 20 61 73 20 61 20 6e 6f 72 6d 61 6c 20 75 73  d as a normal us
a660: 65 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 55 41  er */.#define UA
a670: 55 54 48 5f 41 64 6d 69 6e 20 20 20 20 20 20 20  UTH_Admin       
a680: 33 20 20 20 20 20 2f 2a 20 41 75 74 68 65 6e 74  3     /* Authent
a690: 69 63 61 74 65 64 20 61 73 20 61 6e 20 61 64 6d  icated as an adm
a6a0: 69 6e 69 73 74 72 61 74 6f 72 20 2a 2f 0a 0a 2f  inistrator */../
a6b0: 2a 20 46 75 6e 63 74 69 6f 6e 73 20 75 73 65 64  * Functions used
a6c0: 20 6f 6e 6c 79 20 62 79 20 75 73 65 72 20 61 75   only by user au
a6d0: 74 68 6f 72 69 7a 61 74 69 6f 6e 20 6c 6f 67 69  thorization logi
a6e0: 63 20 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33  c */.int sqlite3
a6f0: 55 73 65 72 41 75 74 68 54 61 62 6c 65 28 63 6f  UserAuthTable(co
a700: 6e 73 74 20 63 68 61 72 2a 29 3b 0a 69 6e 74 20  nst char*);.int 
a710: 73 71 6c 69 74 65 33 55 73 65 72 41 75 74 68 43  sqlite3UserAuthC
a720: 68 65 63 6b 4c 6f 67 69 6e 28 73 71 6c 69 74 65  heckLogin(sqlite
a730: 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 75  3*,const char*,u
a740: 38 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  8*);.void sqlite
a750: 33 55 73 65 72 41 75 74 68 49 6e 69 74 28 73 71  3UserAuthInit(sq
a760: 6c 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20 73 71  lite3*);.void sq
a770: 6c 69 74 65 33 43 72 79 70 74 46 75 6e 63 28 73  lite3CryptFunc(s
a780: 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c  qlite3_context*,
a790: 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75  int,sqlite3_valu
a7a0: 65 2a 2a 29 3b 0a 0a 23 65 6e 64 69 66 20 2f 2a  e**);..#endif /*
a7b0: 20 53 51 4c 49 54 45 5f 55 53 45 52 5f 41 55 54   SQLITE_USER_AUT
a7c0: 48 45 4e 54 49 43 41 54 49 4f 4e 20 2a 2f 0a 0a  HENTICATION */..
a7d0: 2f 2a 0a 2a 2a 20 74 79 70 65 64 65 66 20 66 6f  /*.** typedef fo
a7e0: 72 20 74 68 65 20 61 75 74 68 6f 72 69 7a 61 74  r the authorizat
a7f0: 69 6f 6e 20 63 61 6c 6c 62 61 63 6b 20 66 75 6e  ion callback fun
a800: 63 74 69 6f 6e 2e 0a 2a 2f 0a 23 69 66 64 65 66  ction..*/.#ifdef
a810: 20 53 51 4c 49 54 45 5f 55 53 45 52 5f 41 55 54   SQLITE_USER_AUT
a820: 48 45 4e 54 49 43 41 54 49 4f 4e 0a 20 20 74 79  HENTICATION.  ty
a830: 70 65 64 65 66 20 69 6e 74 20 28 2a 73 71 6c 69  pedef int (*sqli
a840: 74 65 33 5f 78 61 75 74 68 29 28 76 6f 69 64 2a  te3_xauth)(void*
a850: 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a  ,int,const char*
a860: 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e  ,const char*,con
a870: 73 74 20 63 68 61 72 2a 2c 0a 20 20 20 20 20 20  st char*,.      
a880: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a890: 20 20 20 20 20 20 20 20 20 63 6f 6e 73 74 20 63           const c
a8a0: 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  har*, const char
a8b0: 2a 29 3b 0a 23 65 6c 73 65 0a 20 20 74 79 70 65  *);.#else.  type
a8c0: 64 65 66 20 69 6e 74 20 28 2a 73 71 6c 69 74 65  def int (*sqlite
a8d0: 33 5f 78 61 75 74 68 29 28 76 6f 69 64 2a 2c 69  3_xauth)(void*,i
a8e0: 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63  nt,const char*,c
a8f0: 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74  onst char*,const
a900: 20 63 68 61 72 2a 2c 0a 20 20 20 20 20 20 20 20   char*,.        
a910: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a920: 20 20 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61         const cha
a930: 72 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 0a 2f 2a  r*);.#endif.../*
a940: 0a 2a 2a 20 45 61 63 68 20 64 61 74 61 62 61 73  .** Each databas
a950: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 69 73 20  e connection is 
a960: 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  an instance of t
a970: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72  he following str
a980: 75 63 74 75 72 65 2e 0a 2a 2f 0a 73 74 72 75 63  ucture..*/.struc
a990: 74 20 73 71 6c 69 74 65 33 20 7b 0a 20 20 73 71  t sqlite3 {.  sq
a9a0: 6c 69 74 65 33 5f 76 66 73 20 2a 70 56 66 73 3b  lite3_vfs *pVfs;
a9b0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f              /* O
a9c0: 53 20 49 6e 74 65 72 66 61 63 65 20 2a 2f 0a 20  S Interface */. 
a9d0: 20 73 74 72 75 63 74 20 56 64 62 65 20 2a 70 56   struct Vdbe *pV
a9e0: 64 62 65 3b 20 20 20 20 20 20 20 20 20 20 20 2f  dbe;           /
a9f0: 2a 20 4c 69 73 74 20 6f 66 20 61 63 74 69 76 65  * List of active
aa00: 20 76 69 72 74 75 61 6c 20 6d 61 63 68 69 6e 65   virtual machine
aa10: 73 20 2a 2f 0a 20 20 43 6f 6c 6c 53 65 71 20 2a  s */.  CollSeq *
aa20: 70 44 66 6c 74 43 6f 6c 6c 3b 20 20 20 20 20 20  pDfltColl;      
aa30: 20 20 20 20 20 2f 2a 20 54 68 65 20 64 65 66 61       /* The defa
aa40: 75 6c 74 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65  ult collating se
aa50: 71 75 65 6e 63 65 20 28 42 49 4e 41 52 59 29 20  quence (BINARY) 
aa60: 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 74  */.  sqlite3_mut
aa70: 65 78 20 2a 6d 75 74 65 78 3b 20 20 20 20 20 20  ex *mutex;      
aa80: 20 20 20 2f 2a 20 43 6f 6e 6e 65 63 74 69 6f 6e     /* Connection
aa90: 20 6d 75 74 65 78 20 2a 2f 0a 20 20 44 62 20 2a   mutex */.  Db *
aaa0: 61 44 62 3b 20 20 20 20 20 20 20 20 20 20 20 20  aDb;            
aab0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c            /* All
aac0: 20 62 61 63 6b 65 6e 64 73 20 2a 2f 0a 20 20 69   backends */.  i
aad0: 6e 74 20 6e 44 62 3b 20 20 20 20 20 20 20 20 20  nt nDb;         
aae0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
aaf0: 4e 75 6d 62 65 72 20 6f 66 20 62 61 63 6b 65 6e  Number of backen
ab00: 64 73 20 63 75 72 72 65 6e 74 6c 79 20 69 6e 20  ds currently in 
ab10: 75 73 65 20 2a 2f 0a 20 20 69 6e 74 20 66 6c 61  use */.  int fla
ab20: 67 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  gs;             
ab30: 20 20 20 20 20 20 20 2f 2a 20 4d 69 73 63 65 6c         /* Miscel
ab40: 6c 61 6e 65 6f 75 73 20 66 6c 61 67 73 2e 20 53  laneous flags. S
ab50: 65 65 20 62 65 6c 6f 77 20 2a 2f 0a 20 20 69 36  ee below */.  i6
ab60: 34 20 6c 61 73 74 52 6f 77 69 64 3b 20 20 20 20  4 lastRowid;    
ab70: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52              /* R
ab80: 4f 57 49 44 20 6f 66 20 6d 6f 73 74 20 72 65 63  OWID of most rec
ab90: 65 6e 74 20 69 6e 73 65 72 74 20 28 73 65 65 20  ent insert (see 
aba0: 61 62 6f 76 65 29 20 2a 2f 0a 20 20 69 36 34 20  above) */.  i64 
abb0: 73 7a 4d 6d 61 70 3b 20 20 20 20 20 20 20 20 20  szMmap;         
abc0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 65 66            /* Def
abd0: 61 75 6c 74 20 6d 6d 61 70 5f 73 69 7a 65 20 73  ault mmap_size s
abe0: 65 74 74 69 6e 67 20 2a 2f 0a 20 20 75 6e 73 69  etting */.  unsi
abf0: 67 6e 65 64 20 69 6e 74 20 6f 70 65 6e 46 6c 61  gned int openFla
ac00: 67 73 3b 20 20 20 20 20 20 20 2f 2a 20 46 6c 61  gs;       /* Fla
ac10: 67 73 20 70 61 73 73 65 64 20 74 6f 20 73 71 6c  gs passed to sql
ac20: 69 74 65 33 5f 76 66 73 2e 78 4f 70 65 6e 28 29  ite3_vfs.xOpen()
ac30: 20 2a 2f 0a 20 20 69 6e 74 20 65 72 72 43 6f 64   */.  int errCod
ac40: 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e;              
ac50: 20 20 20 20 2f 2a 20 4d 6f 73 74 20 72 65 63 65      /* Most rece
ac60: 6e 74 20 65 72 72 6f 72 20 63 6f 64 65 20 28 53  nt error code (S
ac70: 51 4c 49 54 45 5f 2a 29 20 2a 2f 0a 20 20 69 6e  QLITE_*) */.  in
ac80: 74 20 65 72 72 4d 61 73 6b 3b 20 20 20 20 20 20  t errMask;      
ac90: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 26              /* &
aca0: 20 72 65 73 75 6c 74 20 63 6f 64 65 73 20 77 69   result codes wi
acb0: 74 68 20 74 68 69 73 20 62 65 66 6f 72 65 20 72  th this before r
acc0: 65 74 75 72 6e 69 6e 67 20 2a 2f 0a 20 20 69 6e  eturning */.  in
acd0: 74 20 69 53 79 73 45 72 72 6e 6f 3b 20 20 20 20  t iSysErrno;    
ace0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 45              /* E
acf0: 72 72 6e 6f 20 76 61 6c 75 65 20 66 72 6f 6d 20  rrno value from 
ad00: 6c 61 73 74 20 73 79 73 74 65 6d 20 65 72 72 6f  last system erro
ad10: 72 20 2a 2f 0a 20 20 75 31 36 20 64 62 4f 70 74  r */.  u16 dbOpt
ad20: 46 6c 61 67 73 3b 20 20 20 20 20 20 20 20 20 20  Flags;          
ad30: 20 20 20 20 20 2f 2a 20 46 6c 61 67 73 20 74 6f       /* Flags to
ad40: 20 65 6e 61 62 6c 65 2f 64 69 73 61 62 6c 65 20   enable/disable 
ad50: 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73 20 2a 2f  optimizations */
ad60: 0a 20 20 75 38 20 65 6e 63 3b 20 20 20 20 20 20  .  u8 enc;      
ad70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ad80: 20 2f 2a 20 54 65 78 74 20 65 6e 63 6f 64 69 6e   /* Text encodin
ad90: 67 20 2a 2f 0a 20 20 75 38 20 61 75 74 6f 43 6f  g */.  u8 autoCo
ada0: 6d 6d 69 74 3b 20 20 20 20 20 20 20 20 20 20 20  mmit;           
adb0: 20 20 20 20 20 2f 2a 20 54 68 65 20 61 75 74 6f       /* The auto
adc0: 2d 63 6f 6d 6d 69 74 20 66 6c 61 67 2e 20 2a 2f  -commit flag. */
add0: 0a 20 20 75 38 20 74 65 6d 70 5f 73 74 6f 72 65  .  u8 temp_store
ade0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
adf0: 20 2f 2a 20 31 3a 20 66 69 6c 65 20 32 3a 20 6d   /* 1: file 2: m
ae00: 65 6d 6f 72 79 20 30 3a 20 64 65 66 61 75 6c 74  emory 0: default
ae10: 20 2a 2f 0a 20 20 75 38 20 6d 61 6c 6c 6f 63 46   */.  u8 mallocF
ae20: 61 69 6c 65 64 3b 20 20 20 20 20 20 20 20 20 20  ailed;          
ae30: 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 77      /* True if w
ae40: 65 20 68 61 76 65 20 73 65 65 6e 20 61 20 6d 61  e have seen a ma
ae50: 6c 6c 6f 63 20 66 61 69 6c 75 72 65 20 2a 2f 0a  lloc failure */.
ae60: 20 20 75 38 20 62 42 65 6e 69 67 6e 4d 61 6c 6c    u8 bBenignMall
ae70: 6f 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  oc;             
ae80: 2f 2a 20 44 6f 20 6e 6f 74 20 72 65 71 75 69 72  /* Do not requir
ae90: 65 20 4f 4f 4d 73 20 69 66 20 74 72 75 65 20 2a  e OOMs if true *
aea0: 2f 0a 20 20 75 38 20 64 66 6c 74 4c 6f 63 6b 4d  /.  u8 dfltLockM
aeb0: 6f 64 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ode;            
aec0: 20 20 2f 2a 20 44 65 66 61 75 6c 74 20 6c 6f 63    /* Default loc
aed0: 6b 69 6e 67 2d 6d 6f 64 65 20 66 6f 72 20 61 74  king-mode for at
aee0: 74 61 63 68 65 64 20 64 62 73 20 2a 2f 0a 20 20  tached dbs */.  
aef0: 73 69 67 6e 65 64 20 63 68 61 72 20 6e 65 78 74  signed char next
af00: 41 75 74 6f 76 61 63 3b 20 20 20 20 20 20 2f 2a  Autovac;      /*
af10: 20 41 75 74 6f 76 61 63 20 73 65 74 74 69 6e 67   Autovac setting
af20: 20 61 66 74 65 72 20 56 41 43 55 55 4d 20 69 66   after VACUUM if
af30: 20 3e 3d 30 20 2a 2f 0a 20 20 75 38 20 73 75 70   >=0 */.  u8 sup
af40: 70 72 65 73 73 45 72 72 3b 20 20 20 20 20 20 20  pressErr;       
af50: 20 20 20 20 20 20 20 20 2f 2a 20 44 6f 20 6e 6f          /* Do no
af60: 74 20 69 73 73 75 65 20 65 72 72 6f 72 20 6d 65  t issue error me
af70: 73 73 61 67 65 73 20 69 66 20 74 72 75 65 20 2a  ssages if true *
af80: 2f 0a 20 20 75 38 20 76 74 61 62 4f 6e 43 6f 6e  /.  u8 vtabOnCon
af90: 66 6c 69 63 74 3b 20 20 20 20 20 20 20 20 20 20  flict;          
afa0: 20 20 2f 2a 20 56 61 6c 75 65 20 74 6f 20 72 65    /* Value to re
afb0: 74 75 72 6e 20 66 6f 72 20 73 33 5f 76 74 61 62  turn for s3_vtab
afc0: 5f 6f 6e 5f 63 6f 6e 66 6c 69 63 74 28 29 20 2a  _on_conflict() *
afd0: 2f 0a 20 20 75 38 20 69 73 54 72 61 6e 73 61 63  /.  u8 isTransac
afe0: 74 69 6f 6e 53 61 76 65 70 6f 69 6e 74 3b 20 20  tionSavepoint;  
aff0: 20 20 2f 2a 20 54 72 75 65 20 69 66 20 74 68 65    /* True if the
b000: 20 6f 75 74 65 72 6d 6f 73 74 20 73 61 76 65 70   outermost savep
b010: 6f 69 6e 74 20 69 73 20 61 20 54 53 20 2a 2f 0a  oint is a TS */.
b020: 20 20 69 6e 74 20 6e 65 78 74 50 61 67 65 73 69    int nextPagesi
b030: 7a 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ze;             
b040: 2f 2a 20 50 61 67 65 73 69 7a 65 20 61 66 74 65  /* Pagesize afte
b050: 72 20 56 41 43 55 55 4d 20 69 66 20 3e 30 20 2a  r VACUUM if >0 *
b060: 2f 0a 20 20 75 33 32 20 6d 61 67 69 63 3b 20 20  /.  u32 magic;  
b070: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b080: 20 20 2f 2a 20 4d 61 67 69 63 20 6e 75 6d 62 65    /* Magic numbe
b090: 72 20 66 6f 72 20 64 65 74 65 63 74 20 6c 69 62  r for detect lib
b0a0: 72 61 72 79 20 6d 69 73 75 73 65 20 2a 2f 0a 20  rary misuse */. 
b0b0: 20 69 6e 74 20 6e 43 68 61 6e 67 65 3b 20 20 20   int nChange;   
b0c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
b0d0: 2a 20 56 61 6c 75 65 20 72 65 74 75 72 6e 65 64  * Value returned
b0e0: 20 62 79 20 73 71 6c 69 74 65 33 5f 63 68 61 6e   by sqlite3_chan
b0f0: 67 65 73 28 29 20 2a 2f 0a 20 20 69 6e 74 20 6e  ges() */.  int n
b100: 54 6f 74 61 6c 43 68 61 6e 67 65 3b 20 20 20 20  TotalChange;    
b110: 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75           /* Valu
b120: 65 20 72 65 74 75 72 6e 65 64 20 62 79 20 73 71  e returned by sq
b130: 6c 69 74 65 33 5f 74 6f 74 61 6c 5f 63 68 61 6e  lite3_total_chan
b140: 67 65 73 28 29 20 2a 2f 0a 20 20 69 6e 74 20 61  ges() */.  int a
b150: 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4e 5f 4c  Limit[SQLITE_N_L
b160: 49 4d 49 54 5d 3b 20 20 20 2f 2a 20 4c 69 6d 69  IMIT];   /* Limi
b170: 74 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 4d 61 78  ts */.  int nMax
b180: 53 6f 72 74 65 72 4d 6d 61 70 3b 20 20 20 20 20  SorterMmap;     
b190: 20 20 20 20 20 20 2f 2a 20 4d 61 78 69 6d 75 6d        /* Maximum
b1a0: 20 73 69 7a 65 20 6f 66 20 72 65 67 69 6f 6e 73   size of regions
b1b0: 20 6d 61 70 70 65 64 20 62 79 20 73 6f 72 74 65   mapped by sorte
b1c0: 72 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 73 71  r */.  struct sq
b1d0: 6c 69 74 65 33 49 6e 69 74 49 6e 66 6f 20 7b 20  lite3InitInfo { 
b1e0: 20 20 20 20 20 2f 2a 20 49 6e 66 6f 72 6d 61 74       /* Informat
b1f0: 69 6f 6e 20 75 73 65 64 20 64 75 72 69 6e 67 20  ion used during 
b200: 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e 20 2a  initialization *
b210: 2f 0a 20 20 20 20 69 6e 74 20 6e 65 77 54 6e 75  /.    int newTnu
b220: 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  m;              
b230: 20 20 2f 2a 20 52 6f 6f 74 70 61 67 65 20 6f 66    /* Rootpage of
b240: 20 74 61 62 6c 65 20 62 65 69 6e 67 20 69 6e 69   table being ini
b250: 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 20 20  tialized */.    
b260: 75 38 20 69 44 62 3b 20 20 20 20 20 20 20 20 20  u8 iDb;         
b270: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57              /* W
b280: 68 69 63 68 20 64 62 20 66 69 6c 65 20 69 73 20  hich db file is 
b290: 62 65 69 6e 67 20 69 6e 69 74 69 61 6c 69 7a 65  being initialize
b2a0: 64 20 2a 2f 0a 20 20 20 20 75 38 20 62 75 73 79  d */.    u8 busy
b2b0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
b2c0: 20 20 20 20 20 2f 2a 20 54 52 55 45 20 69 66 20       /* TRUE if 
b2d0: 63 75 72 72 65 6e 74 6c 79 20 69 6e 69 74 69 61  currently initia
b2e0: 6c 69 7a 69 6e 67 20 2a 2f 0a 20 20 20 20 75 38  lizing */.    u8
b2f0: 20 6f 72 70 68 61 6e 54 72 69 67 67 65 72 3b 20   orphanTrigger; 
b300: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 61 73            /* Las
b310: 74 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 6f  t statement is o
b320: 72 70 68 61 6e 65 64 20 54 45 4d 50 20 74 72 69  rphaned TEMP tri
b330: 67 67 65 72 20 2a 2f 0a 20 20 20 20 75 38 20 69  gger */.    u8 i
b340: 6d 70 6f 73 74 65 72 54 61 62 6c 65 3b 20 20 20  mposterTable;   
b350: 20 20 20 20 20 20 20 20 2f 2a 20 42 75 69 6c 64          /* Build
b360: 69 6e 67 20 61 6e 20 69 6d 70 6f 73 74 65 72 20  ing an imposter 
b370: 74 61 62 6c 65 20 2a 2f 0a 20 20 7d 20 69 6e 69  table */.  } ini
b380: 74 3b 0a 20 20 69 6e 74 20 6e 56 64 62 65 41 63  t;.  int nVdbeAc
b390: 74 69 76 65 3b 20 20 20 20 20 20 20 20 20 20 20  tive;           
b3a0: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
b3b0: 56 44 42 45 73 20 63 75 72 72 65 6e 74 6c 79 20  VDBEs currently 
b3c0: 72 75 6e 6e 69 6e 67 20 2a 2f 0a 20 20 69 6e 74  running */.  int
b3d0: 20 6e 56 64 62 65 52 65 61 64 3b 20 20 20 20 20   nVdbeRead;     
b3e0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
b3f0: 6d 62 65 72 20 6f 66 20 61 63 74 69 76 65 20 56  mber of active V
b400: 44 42 45 73 20 74 68 61 74 20 72 65 61 64 20 6f  DBEs that read o
b410: 72 20 77 72 69 74 65 20 2a 2f 0a 20 20 69 6e 74  r write */.  int
b420: 20 6e 56 64 62 65 57 72 69 74 65 3b 20 20 20 20   nVdbeWrite;    
b430: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
b440: 6d 62 65 72 20 6f 66 20 61 63 74 69 76 65 20 56  mber of active V
b450: 44 42 45 73 20 74 68 61 74 20 72 65 61 64 20 61  DBEs that read a
b460: 6e 64 20 77 72 69 74 65 20 2a 2f 0a 20 20 69 6e  nd write */.  in
b470: 74 20 6e 56 64 62 65 45 78 65 63 3b 20 20 20 20  t nVdbeExec;    
b480: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
b490: 75 6d 62 65 72 20 6f 66 20 6e 65 73 74 65 64 20  umber of nested 
b4a0: 63 61 6c 6c 73 20 74 6f 20 56 64 62 65 45 78 65  calls to VdbeExe
b4b0: 63 28 29 20 2a 2f 0a 20 20 69 6e 74 20 6e 56 44  c() */.  int nVD
b4c0: 65 73 74 72 6f 79 3b 20 20 20 20 20 20 20 20 20  estroy;         
b4d0: 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
b4e0: 20 6f 66 20 61 63 74 69 76 65 20 4f 50 5f 56 44   of active OP_VD
b4f0: 65 73 74 72 6f 79 20 6f 70 65 72 61 74 69 6f 6e  estroy operation
b500: 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 45 78 74 65  s */.  int nExte
b510: 6e 73 69 6f 6e 3b 20 20 20 20 20 20 20 20 20 20  nsion;          
b520: 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
b530: 66 20 6c 6f 61 64 65 64 20 65 78 74 65 6e 73 69  f loaded extensi
b540: 6f 6e 73 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 2a  ons */.  void **
b550: 61 45 78 74 65 6e 73 69 6f 6e 3b 20 20 20 20 20  aExtension;     
b560: 20 20 20 20 20 20 20 2f 2a 20 41 72 72 61 79 20         /* Array 
b570: 6f 66 20 73 68 61 72 65 64 20 6c 69 62 72 61 72  of shared librar
b580: 79 20 68 61 6e 64 6c 65 73 20 2a 2f 0a 20 20 76  y handles */.  v
b590: 6f 69 64 20 28 2a 78 54 72 61 63 65 29 28 76 6f  oid (*xTrace)(vo
b5a0: 69 64 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29  id*,const char*)
b5b0: 3b 20 20 20 20 20 20 20 20 2f 2a 20 54 72 61 63  ;        /* Trac
b5c0: 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20  e function */.  
b5d0: 76 6f 69 64 20 2a 70 54 72 61 63 65 41 72 67 3b  void *pTraceArg;
b5e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b5f0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72 67            /* Arg
b600: 75 6d 65 6e 74 20 74 6f 20 74 68 65 20 74 72 61  ument to the tra
b610: 63 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20  ce function */. 
b620: 20 76 6f 69 64 20 28 2a 78 50 72 6f 66 69 6c 65   void (*xProfile
b630: 29 28 76 6f 69 64 2a 2c 63 6f 6e 73 74 20 63 68  )(void*,const ch
b640: 61 72 2a 2c 75 36 34 29 3b 20 20 2f 2a 20 50 72  ar*,u64);  /* Pr
b650: 6f 66 69 6c 69 6e 67 20 66 75 6e 63 74 69 6f 6e  ofiling function
b660: 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 50 72 6f   */.  void *pPro
b670: 66 69 6c 65 41 72 67 3b 20 20 20 20 20 20 20 20  fileArg;        
b680: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b690: 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f 20 70  /* Argument to p
b6a0: 72 6f 66 69 6c 65 20 66 75 6e 63 74 69 6f 6e 20  rofile function 
b6b0: 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 43 6f 6d 6d  */.  void *pComm
b6c0: 69 74 41 72 67 3b 20 20 20 20 20 20 20 20 20 20  itArg;          
b6d0: 20 20 20 20 20 20 20 2f 2a 20 41 72 67 75 6d 65         /* Argume
b6e0: 6e 74 20 74 6f 20 78 43 6f 6d 6d 69 74 43 61 6c  nt to xCommitCal
b6f0: 6c 62 61 63 6b 28 29 20 2a 2f 0a 20 20 69 6e 74  lback() */.  int
b700: 20 28 2a 78 43 6f 6d 6d 69 74 43 61 6c 6c 62 61   (*xCommitCallba
b710: 63 6b 29 28 76 6f 69 64 2a 29 3b 20 20 20 20 2f  ck)(void*);    /
b720: 2a 20 49 6e 76 6f 6b 65 64 20 61 74 20 65 76 65  * Invoked at eve
b730: 72 79 20 63 6f 6d 6d 69 74 2e 20 2a 2f 0a 20 20  ry commit. */.  
b740: 76 6f 69 64 20 2a 70 52 6f 6c 6c 62 61 63 6b 41  void *pRollbackA
b750: 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  rg;             
b760: 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f    /* Argument to
b770: 20 78 52 6f 6c 6c 62 61 63 6b 43 61 6c 6c 62 61   xRollbackCallba
b780: 63 6b 28 29 20 2a 2f 0a 20 20 76 6f 69 64 20 28  ck() */.  void (
b790: 2a 78 52 6f 6c 6c 62 61 63 6b 43 61 6c 6c 62 61  *xRollbackCallba
b7a0: 63 6b 29 28 76 6f 69 64 2a 29 3b 20 2f 2a 20 49  ck)(void*); /* I
b7b0: 6e 76 6f 6b 65 64 20 61 74 20 65 76 65 72 79 20  nvoked at every 
b7c0: 63 6f 6d 6d 69 74 2e 20 2a 2f 0a 20 20 76 6f 69  commit. */.  voi
b7d0: 64 20 2a 70 55 70 64 61 74 65 41 72 67 3b 0a 20  d *pUpdateArg;. 
b7e0: 20 76 6f 69 64 20 28 2a 78 55 70 64 61 74 65 43   void (*xUpdateC
b7f0: 61 6c 6c 62 61 63 6b 29 28 76 6f 69 64 2a 2c 69  allback)(void*,i
b800: 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c  nt, const char*,
b810: 63 6f 6e 73 74 20 63 68 61 72 2a 2c 73 71 6c 69  const char*,sqli
b820: 74 65 5f 69 6e 74 36 34 29 3b 0a 23 69 66 64 65  te_int64);.#ifde
b830: 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
b840: 50 52 45 55 50 44 41 54 45 5f 48 4f 4f 4b 0a 20  PREUPDATE_HOOK. 
b850: 20 76 6f 69 64 20 2a 70 50 72 65 55 70 64 61 74   void *pPreUpdat
b860: 65 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 2f  eArg;          /
b870: 2a 20 46 69 72 73 74 20 61 72 67 75 6d 65 6e 74  * First argument
b880: 20 74 6f 20 78 50 72 65 55 70 64 61 74 65 43 61   to xPreUpdateCa
b890: 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 76 6f 69 64  llback */.  void
b8a0: 20 28 2a 78 50 72 65 55 70 64 61 74 65 43 61 6c   (*xPreUpdateCal
b8b0: 6c 62 61 63 6b 29 28 20 20 20 2f 2a 20 52 65 67  lback)(   /* Reg
b8c0: 69 73 74 65 72 65 64 20 75 73 69 6e 67 20 73 71  istered using sq
b8d0: 6c 69 74 65 33 5f 70 72 65 75 70 64 61 74 65 5f  lite3_preupdate_
b8e0: 68 6f 6f 6b 28 29 20 2a 2f 0a 20 20 20 20 76 6f  hook() */.    vo
b8f0: 69 64 2a 2c 73 71 6c 69 74 65 33 2a 2c 69 6e 74  id*,sqlite3*,int
b900: 2c 63 68 61 72 20 63 6f 6e 73 74 2a 2c 63 68 61  ,char const*,cha
b910: 72 20 63 6f 6e 73 74 2a 2c 73 71 6c 69 74 65 33  r const*,sqlite3
b920: 5f 69 6e 74 36 34 2c 73 71 6c 69 74 65 33 5f 69  _int64,sqlite3_i
b930: 6e 74 36 34 0a 20 20 29 3b 0a 20 20 50 72 65 55  nt64.  );.  PreU
b940: 70 64 61 74 65 20 2a 70 50 72 65 55 70 64 61 74  pdate *pPreUpdat
b950: 65 3b 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6e  e;        /* Con
b960: 74 65 78 74 20 66 6f 72 20 61 63 74 69 76 65 20  text for active 
b970: 70 72 65 2d 75 70 64 61 74 65 20 63 61 6c 6c 62  pre-update callb
b980: 61 63 6b 20 2a 2f 0a 23 65 6e 64 69 66 20 2f 2a  ack */.#endif /*
b990: 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 50   SQLITE_ENABLE_P
b9a0: 52 45 55 50 44 41 54 45 5f 48 4f 4f 4b 20 2a 2f  REUPDATE_HOOK */
b9b0: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
b9c0: 4f 4d 49 54 5f 57 41 4c 0a 20 20 69 6e 74 20 28  OMIT_WAL.  int (
b9d0: 2a 78 57 61 6c 43 61 6c 6c 62 61 63 6b 29 28 76  *xWalCallback)(v
b9e0: 6f 69 64 20 2a 2c 20 73 71 6c 69 74 65 33 20 2a  oid *, sqlite3 *
b9f0: 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20  , const char *, 
ba00: 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20 2a 70 57  int);.  void *pW
ba10: 61 6c 41 72 67 3b 0a 23 65 6e 64 69 66 0a 20 20  alArg;.#endif.  
ba20: 76 6f 69 64 28 2a 78 43 6f 6c 6c 4e 65 65 64 65  void(*xCollNeede
ba30: 64 29 28 76 6f 69 64 2a 2c 73 71 6c 69 74 65 33  d)(void*,sqlite3
ba40: 2a 2c 69 6e 74 20 65 54 65 78 74 52 65 70 2c 63  *,int eTextRep,c
ba50: 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20 20 76  onst char*);.  v
ba60: 6f 69 64 28 2a 78 43 6f 6c 6c 4e 65 65 64 65 64  oid(*xCollNeeded
ba70: 31 36 29 28 76 6f 69 64 2a 2c 73 71 6c 69 74 65  16)(void*,sqlite
ba80: 33 2a 2c 69 6e 74 20 65 54 65 78 74 52 65 70 2c  3*,int eTextRep,
ba90: 63 6f 6e 73 74 20 76 6f 69 64 2a 29 3b 0a 20 20  const void*);.  
baa0: 76 6f 69 64 20 2a 70 43 6f 6c 6c 4e 65 65 64 65  void *pCollNeede
bab0: 64 41 72 67 3b 0a 20 20 73 71 6c 69 74 65 33 5f  dArg;.  sqlite3_
bac0: 76 61 6c 75 65 20 2a 70 45 72 72 3b 20 20 20 20  value *pErr;    
bad0: 20 20 20 20 20 20 2f 2a 20 4d 6f 73 74 20 72 65        /* Most re
bae0: 63 65 6e 74 20 65 72 72 6f 72 20 6d 65 73 73 61  cent error messa
baf0: 67 65 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b 0a  ge */.  union {.
bb00: 20 20 20 20 76 6f 6c 61 74 69 6c 65 20 69 6e 74      volatile int
bb10: 20 69 73 49 6e 74 65 72 72 75 70 74 65 64 3b 20   isInterrupted; 
bb20: 2f 2a 20 54 72 75 65 20 69 66 20 73 71 6c 69 74  /* True if sqlit
bb30: 65 33 5f 69 6e 74 65 72 72 75 70 74 20 68 61 73  e3_interrupt has
bb40: 20 62 65 65 6e 20 63 61 6c 6c 65 64 20 2a 2f 0a   been called */.
bb50: 20 20 20 20 64 6f 75 62 6c 65 20 6e 6f 74 55 73      double notUs
bb60: 65 64 31 3b 20 20 20 20 20 20 20 20 20 20 20 20  ed1;            
bb70: 2f 2a 20 53 70 61 63 65 72 20 2a 2f 0a 20 20 7d  /* Spacer */.  }
bb80: 20 75 31 3b 0a 20 20 4c 6f 6f 6b 61 73 69 64 65   u1;.  Lookaside
bb90: 20 6c 6f 6f 6b 61 73 69 64 65 3b 20 20 20 20 20   lookaside;     
bba0: 20 20 20 20 20 2f 2a 20 4c 6f 6f 6b 61 73 69 64       /* Lookasid
bbb0: 65 20 6d 61 6c 6c 6f 63 20 63 6f 6e 66 69 67 75  e malloc configu
bbc0: 72 61 74 69 6f 6e 20 2a 2f 0a 23 69 66 6e 64 65  ration */.#ifnde
bbd0: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55  f SQLITE_OMIT_AU
bbe0: 54 48 4f 52 49 5a 41 54 49 4f 4e 0a 20 20 73 71  THORIZATION.  sq
bbf0: 6c 69 74 65 33 5f 78 61 75 74 68 20 78 41 75 74  lite3_xauth xAut
bc00: 68 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41  h;          /* A
bc10: 63 63 65 73 73 20 61 75 74 68 6f 72 69 7a 61 74  ccess authorizat
bc20: 69 6f 6e 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a  ion function */.
bc30: 20 20 76 6f 69 64 20 2a 70 41 75 74 68 41 72 67    void *pAuthArg
bc40: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
bc50: 2f 2a 20 31 73 74 20 61 72 67 75 6d 65 6e 74 20  /* 1st argument 
bc60: 74 6f 20 74 68 65 20 61 63 63 65 73 73 20 61 75  to the access au
bc70: 74 68 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23  th function */.#
bc80: 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51  endif.#ifndef SQ
bc90: 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 4f 47 52 45  LITE_OMIT_PROGRE
bca0: 53 53 5f 43 41 4c 4c 42 41 43 4b 0a 20 20 69 6e  SS_CALLBACK.  in
bcb0: 74 20 28 2a 78 50 72 6f 67 72 65 73 73 29 28 76  t (*xProgress)(v
bcc0: 6f 69 64 20 2a 29 3b 20 20 20 20 20 2f 2a 20 54  oid *);     /* T
bcd0: 68 65 20 70 72 6f 67 72 65 73 73 20 63 61 6c 6c  he progress call
bce0: 62 61 63 6b 20 2a 2f 0a 20 20 76 6f 69 64 20 2a  back */.  void *
bcf0: 70 50 72 6f 67 72 65 73 73 41 72 67 3b 20 20 20  pProgressArg;   
bd00: 20 20 20 20 20 20 20 20 2f 2a 20 41 72 67 75 6d          /* Argum
bd10: 65 6e 74 20 74 6f 20 74 68 65 20 70 72 6f 67 72  ent to the progr
bd20: 65 73 73 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a  ess callback */.
bd30: 20 20 75 6e 73 69 67 6e 65 64 20 6e 50 72 6f 67    unsigned nProg
bd40: 72 65 73 73 4f 70 73 3b 20 20 20 20 20 20 20 20  ressOps;        
bd50: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6f 70 63  /* Number of opc
bd60: 6f 64 65 73 20 66 6f 72 20 70 72 6f 67 72 65 73  odes for progres
bd70: 73 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 23 65  s callback */.#e
bd80: 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c  ndif.#ifndef SQL
bd90: 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
bda0: 54 41 42 4c 45 0a 20 20 69 6e 74 20 6e 56 54 72  TABLE.  int nVTr
bdb0: 61 6e 73 3b 20 20 20 20 20 20 20 20 20 20 20 20  ans;            
bdc0: 20 20 20 20 20 20 2f 2a 20 41 6c 6c 6f 63 61 74        /* Allocat
bdd0: 65 64 20 73 69 7a 65 20 6f 66 20 61 56 54 72 61  ed size of aVTra
bde0: 6e 73 20 2a 2f 0a 20 20 48 61 73 68 20 61 4d 6f  ns */.  Hash aMo
bdf0: 64 75 6c 65 3b 20 20 20 20 20 20 20 20 20 20 20  dule;           
be00: 20 20 20 20 20 20 2f 2a 20 70 6f 70 75 6c 61 74        /* populat
be10: 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f 63 72  ed by sqlite3_cr
be20: 65 61 74 65 5f 6d 6f 64 75 6c 65 28 29 20 2a 2f  eate_module() */
be30: 0a 20 20 56 74 61 62 43 74 78 20 2a 70 56 74 61  .  VtabCtx *pVta
be40: 62 43 74 78 3b 20 20 20 20 20 20 20 20 20 20 20  bCtx;           
be50: 20 2f 2a 20 43 6f 6e 74 65 78 74 20 66 6f 72 20   /* Context for 
be60: 61 63 74 69 76 65 20 76 74 61 62 20 63 6f 6e 6e  active vtab conn
be70: 65 63 74 2f 63 72 65 61 74 65 20 2a 2f 0a 20 20  ect/create */.  
be80: 56 54 61 62 6c 65 20 2a 2a 61 56 54 72 61 6e 73  VTable **aVTrans
be90: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
bea0: 20 56 69 72 74 75 61 6c 20 74 61 62 6c 65 73 20   Virtual tables 
beb0: 77 69 74 68 20 6f 70 65 6e 20 74 72 61 6e 73 61  with open transa
bec0: 63 74 69 6f 6e 73 20 2a 2f 0a 20 20 56 54 61 62  ctions */.  VTab
bed0: 6c 65 20 2a 70 44 69 73 63 6f 6e 6e 65 63 74 3b  le *pDisconnect;
bee0: 20 20 20 20 2f 2a 20 44 69 73 63 6f 6e 6e 65 63      /* Disconnec
bef0: 74 20 74 68 65 73 65 20 69 6e 20 6e 65 78 74 20  t these in next 
bf00: 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 28  sqlite3_prepare(
bf10: 29 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 48 61  ) */.#endif.  Ha
bf20: 73 68 20 61 46 75 6e 63 3b 20 20 20 20 20 20 20  sh aFunc;       
bf30: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 48              /* H
bf40: 61 73 68 20 74 61 62 6c 65 20 6f 66 20 63 6f 6e  ash table of con
bf50: 6e 65 63 74 69 6f 6e 20 66 75 6e 63 74 69 6f 6e  nection function
bf60: 73 20 2a 2f 0a 20 20 48 61 73 68 20 61 43 6f 6c  s */.  Hash aCol
bf70: 6c 53 65 71 3b 20 20 20 20 20 20 20 20 20 20 20  lSeq;           
bf80: 20 20 20 20 20 2f 2a 20 41 6c 6c 20 63 6f 6c 6c       /* All coll
bf90: 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 73 20  ating sequences 
bfa0: 2a 2f 0a 20 20 42 75 73 79 48 61 6e 64 6c 65 72  */.  BusyHandler
bfb0: 20 62 75 73 79 48 61 6e 64 6c 65 72 3b 20 20 20   busyHandler;   
bfc0: 20 20 20 2f 2a 20 42 75 73 79 20 63 61 6c 6c 62     /* Busy callb
bfd0: 61 63 6b 20 2a 2f 0a 20 20 44 62 20 61 44 62 53  ack */.  Db aDbS
bfe0: 74 61 74 69 63 5b 32 5d 3b 20 20 20 20 20 20 20  tatic[2];       
bff0: 20 20 20 20 20 20 20 2f 2a 20 53 74 61 74 69 63         /* Static
c000: 20 73 70 61 63 65 20 66 6f 72 20 74 68 65 20 32   space for the 2
c010: 20 64 65 66 61 75 6c 74 20 62 61 63 6b 65 6e 64   default backend
c020: 73 20 2a 2f 0a 20 20 53 61 76 65 70 6f 69 6e 74  s */.  Savepoint
c030: 20 2a 70 53 61 76 65 70 6f 69 6e 74 3b 20 20 20   *pSavepoint;   
c040: 20 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20       /* List of 
c050: 61 63 74 69 76 65 20 73 61 76 65 70 6f 69 6e 74  active savepoint
c060: 73 20 2a 2f 0a 20 20 69 6e 74 20 62 75 73 79 54  s */.  int busyT
c070: 69 6d 65 6f 75 74 3b 20 20 20 20 20 20 20 20 20  imeout;         
c080: 20 20 20 20 20 2f 2a 20 42 75 73 79 20 68 61 6e       /* Busy han
c090: 64 6c 65 72 20 74 69 6d 65 6f 75 74 2c 20 69 6e  dler timeout, in
c0a0: 20 6d 73 65 63 20 2a 2f 0a 20 20 69 6e 74 20 6e   msec */.  int n
c0b0: 53 61 76 65 70 6f 69 6e 74 3b 20 20 20 20 20 20  Savepoint;      
c0c0: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
c0d0: 65 72 20 6f 66 20 6e 6f 6e 2d 74 72 61 6e 73 61  er of non-transa
c0e0: 63 74 69 6f 6e 20 73 61 76 65 70 6f 69 6e 74 73  ction savepoints
c0f0: 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 74 61 74 65   */.  int nState
c100: 6d 65 6e 74 3b 20 20 20 20 20 20 20 20 20 20 20  ment;           
c110: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
c120: 20 6e 65 73 74 65 64 20 73 74 61 74 65 6d 65 6e   nested statemen
c130: 74 2d 74 72 61 6e 73 61 63 74 69 6f 6e 73 20 20  t-transactions  
c140: 2a 2f 0a 20 20 69 36 34 20 6e 44 65 66 65 72 72  */.  i64 nDeferr
c150: 65 64 43 6f 6e 73 3b 20 20 20 20 20 20 20 20 20  edCons;         
c160: 20 20 20 2f 2a 20 4e 65 74 20 64 65 66 65 72 72     /* Net deferr
c170: 65 64 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 74  ed constraints t
c180: 68 69 73 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e  his transaction.
c190: 20 2a 2f 0a 20 20 69 36 34 20 6e 44 65 66 65 72   */.  i64 nDefer
c1a0: 72 65 64 49 6d 6d 43 6f 6e 73 3b 20 20 20 20 20  redImmCons;     
c1b0: 20 20 20 20 2f 2a 20 4e 65 74 20 64 65 66 65 72      /* Net defer
c1c0: 72 65 64 20 69 6d 6d 65 64 69 61 74 65 20 63 6f  red immediate co
c1d0: 6e 73 74 72 61 69 6e 74 73 20 2a 2f 0a 20 20 69  nstraints */.  i
c1e0: 6e 74 20 2a 70 6e 42 79 74 65 73 46 72 65 65 64  nt *pnBytesFreed
c1f0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
c200: 49 66 20 6e 6f 74 20 4e 55 4c 4c 2c 20 69 6e 63  If not NULL, inc
c210: 72 65 6d 65 6e 74 20 74 68 69 73 20 69 6e 20 44  rement this in D
c220: 62 46 72 65 65 28 29 20 2a 2f 0a 23 69 66 64 65  bFree() */.#ifde
c230: 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
c240: 55 4e 4c 4f 43 4b 5f 4e 4f 54 49 46 59 0a 20 20  UNLOCK_NOTIFY.  
c250: 2f 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  /* The following
c260: 20 76 61 72 69 61 62 6c 65 73 20 61 72 65 20 61   variables are a
c270: 6c 6c 20 70 72 6f 74 65 63 74 65 64 20 62 79 20  ll protected by 
c280: 74 68 65 20 53 54 41 54 49 43 5f 4d 41 53 54 45  the STATIC_MASTE
c290: 52 0a 20 20 2a 2a 20 6d 75 74 65 78 2c 20 6e 6f  R.  ** mutex, no
c2a0: 74 20 62 79 20 73 71 6c 69 74 65 33 2e 6d 75 74  t by sqlite3.mut
c2b0: 65 78 2e 20 54 68 65 79 20 61 72 65 20 75 73 65  ex. They are use
c2c0: 64 20 62 79 20 63 6f 64 65 20 69 6e 20 6e 6f 74  d by code in not
c2d0: 69 66 79 2e 63 2e 0a 20 20 2a 2a 0a 20 20 2a 2a  ify.c..  **.  **
c2e0: 20 57 68 65 6e 20 58 2e 70 55 6e 6c 6f 63 6b 43   When X.pUnlockC
c2f0: 6f 6e 6e 65 63 74 69 6f 6e 3d 3d 59 2c 20 74 68  onnection==Y, th
c300: 61 74 20 6d 65 61 6e 73 20 74 68 61 74 20 58 20  at means that X 
c310: 69 73 20 77 61 69 74 69 6e 67 20 66 6f 72 20 59  is waiting for Y
c320: 20 74 6f 0a 20 20 2a 2a 20 75 6e 6c 6f 63 6b 20   to.  ** unlock 
c330: 73 6f 20 74 68 61 74 20 69 74 20 63 61 6e 20 70  so that it can p
c340: 72 6f 63 65 65 64 2e 0a 20 20 2a 2a 0a 20 20 2a  roceed..  **.  *
c350: 2a 20 57 68 65 6e 20 58 2e 70 42 6c 6f 63 6b 69  * When X.pBlocki
c360: 6e 67 43 6f 6e 6e 65 63 74 69 6f 6e 3d 3d 59 2c  ngConnection==Y,
c370: 20 74 68 61 74 20 6d 65 61 6e 73 20 74 68 61 74   that means that
c380: 20 73 6f 6d 65 74 68 69 6e 67 20 74 68 61 74 20   something that 
c390: 58 20 74 72 69 65 64 0a 20 20 2a 2a 20 74 72 69  X tried.  ** tri
c3a0: 65 64 20 74 6f 20 64 6f 20 72 65 63 65 6e 74 6c  ed to do recentl
c3b0: 79 20 66 61 69 6c 65 64 20 77 69 74 68 20 61 6e  y failed with an
c3c0: 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44 20 65   SQLITE_LOCKED e
c3d0: 72 72 6f 72 20 64 75 65 20 74 6f 20 6c 6f 63 6b  rror due to lock
c3e0: 73 0a 20 20 2a 2a 20 68 65 6c 64 20 62 79 20 59  s.  ** held by Y
c3f0: 2e 0a 20 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33  ..  */.  sqlite3
c400: 20 2a 70 42 6c 6f 63 6b 69 6e 67 43 6f 6e 6e 65   *pBlockingConne
c410: 63 74 69 6f 6e 3b 20 2f 2a 20 43 6f 6e 6e 65 63  ction; /* Connec
c420: 74 69 6f 6e 20 74 68 61 74 20 63 61 75 73 65 64  tion that caused
c430: 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44 20 2a   SQLITE_LOCKED *
c440: 2f 0a 20 20 73 71 6c 69 74 65 33 20 2a 70 55 6e  /.  sqlite3 *pUn
c450: 6c 6f 63 6b 43 6f 6e 6e 65 63 74 69 6f 6e 3b 20  lockConnection; 
c460: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6e            /* Con
c470: 6e 65 63 74 69 6f 6e 20 74 6f 20 77 61 74 63 68  nection to watch
c480: 20 66 6f 72 20 75 6e 6c 6f 63 6b 20 2a 2f 0a 20   for unlock */. 
c490: 20 76 6f 69 64 20 2a 70 55 6e 6c 6f 63 6b 41 72   void *pUnlockAr
c4a0: 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  g;              
c4b0: 20 20 20 20 20 20 20 2f 2a 20 41 72 67 75 6d 65         /* Argume
c4c0: 6e 74 20 74 6f 20 78 55 6e 6c 6f 63 6b 4e 6f 74  nt to xUnlockNot
c4d0: 69 66 79 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a  ify */.  void (*
c4e0: 78 55 6e 6c 6f 63 6b 4e 6f 74 69 66 79 29 28 76  xUnlockNotify)(v
c4f0: 6f 69 64 20 2a 2a 2c 20 69 6e 74 29 3b 20 20 2f  oid **, int);  /
c500: 2a 20 55 6e 6c 6f 63 6b 20 6e 6f 74 69 66 79 20  * Unlock notify 
c510: 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 73 71  callback */.  sq
c520: 6c 69 74 65 33 20 2a 70 4e 65 78 74 42 6c 6f 63  lite3 *pNextBloc
c530: 6b 65 64 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e  ked;        /* N
c540: 65 78 74 20 69 6e 20 6c 69 73 74 20 6f 66 20 61  ext in list of a
c550: 6c 6c 20 62 6c 6f 63 6b 65 64 20 63 6f 6e 6e 65  ll blocked conne
c560: 63 74 69 6f 6e 73 20 2a 2f 0a 23 65 6e 64 69 66  ctions */.#endif
c570: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 55  .#ifdef SQLITE_U
c580: 53 45 52 5f 41 55 54 48 45 4e 54 49 43 41 54 49  SER_AUTHENTICATI
c590: 4f 4e 0a 20 20 73 71 6c 69 74 65 33 5f 75 73 65  ON.  sqlite3_use
c5a0: 72 61 75 74 68 20 61 75 74 68 3b 20 20 20 20 20  rauth auth;     
c5b0: 20 20 20 2f 2a 20 55 73 65 72 20 61 75 74 68 65     /* User authe
c5c0: 6e 74 69 63 61 74 69 6f 6e 20 69 6e 66 6f 72 6d  ntication inform
c5d0: 61 74 69 6f 6e 20 2a 2f 0a 23 65 6e 64 69 66 0a  ation */.#endif.
c5e0: 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20 6d 61 63 72  };../*.** A macr
c5f0: 6f 20 74 6f 20 64 69 73 63 6f 76 65 72 20 74 68  o to discover th
c600: 65 20 65 6e 63 6f 64 69 6e 67 20 6f 66 20 61 20  e encoding of a 
c610: 64 61 74 61 62 61 73 65 2e 0a 2a 2f 0a 23 64 65  database..*/.#de
c620: 66 69 6e 65 20 53 43 48 45 4d 41 5f 45 4e 43 28  fine SCHEMA_ENC(
c630: 64 62 29 20 28 28 64 62 29 2d 3e 61 44 62 5b 30  db) ((db)->aDb[0
c640: 5d 2e 70 53 63 68 65 6d 61 2d 3e 65 6e 63 29 0a  ].pSchema->enc).
c650: 23 64 65 66 69 6e 65 20 45 4e 43 28 64 62 29 20  #define ENC(db) 
c660: 20 20 20 20 20 20 20 28 28 64 62 29 2d 3e 65 6e         ((db)->en
c670: 63 29 0a 0a 2f 2a 0a 2a 2a 20 50 6f 73 73 69 62  c)../*.** Possib
c680: 6c 65 20 76 61 6c 75 65 73 20 66 6f 72 20 74 68  le values for th
c690: 65 20 73 71 6c 69 74 65 33 2e 66 6c 61 67 73 2e  e sqlite3.flags.
c6a0: 0a 2a 2a 0a 2a 2a 20 56 61 6c 75 65 20 63 6f 6e  .**.** Value con
c6b0: 73 74 72 61 69 6e 74 73 20 28 65 6e 66 6f 72 63  straints (enforc
c6c0: 65 64 20 76 69 61 20 61 73 73 65 72 74 28 29 29  ed via assert())
c6d0: 3a 0a 2a 2a 20 20 20 20 20 20 53 51 4c 49 54 45  :.**      SQLITE
c6e0: 5f 46 75 6c 6c 46 53 79 6e 63 20 20 20 20 20 3d  _FullFSync     =
c6f0: 3d 20 50 41 47 45 52 5f 46 55 4c 4c 46 53 59 4e  = PAGER_FULLFSYN
c700: 43 0a 2a 2a 20 20 20 20 20 20 53 51 4c 49 54 45  C.**      SQLITE
c710: 5f 43 6b 70 74 46 75 6c 6c 46 53 79 6e 63 20 3d  _CkptFullFSync =
c720: 3d 20 50 41 47 45 52 5f 43 4b 50 54 5f 46 55 4c  = PAGER_CKPT_FUL
c730: 4c 46 53 59 4e 43 0a 2a 2a 20 20 20 20 20 20 53  LFSYNC.**      S
c740: 51 4c 49 54 45 5f 43 61 63 68 65 53 70 69 6c 6c  QLITE_CacheSpill
c750: 20 20 20 20 3d 3d 20 50 41 47 45 52 5f 43 41 43      == PAGER_CAC
c760: 48 45 5f 53 50 49 4c 4c 0a 2a 2f 0a 23 64 65 66  HE_SPILL.*/.#def
c770: 69 6e 65 20 53 51 4c 49 54 45 5f 56 64 62 65 54  ine SQLITE_VdbeT
c780: 72 61 63 65 20 20 20 20 20 20 30 78 30 30 30 30  race      0x0000
c790: 30 30 30 31 20 20 2f 2a 20 54 72 75 65 20 74 6f  0001  /* True to
c7a0: 20 74 72 61 63 65 20 56 44 42 45 20 65 78 65 63   trace VDBE exec
c7b0: 75 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65  ution */.#define
c7c0: 20 53 51 4c 49 54 45 5f 49 6e 74 65 72 6e 43 68   SQLITE_InternCh
c7d0: 61 6e 67 65 73 20 20 30 78 30 30 30 30 30 30 30  anges  0x0000000
c7e0: 32 20 20 2f 2a 20 55 6e 63 6f 6d 6d 69 74 74 65  2  /* Uncommitte
c7f0: 64 20 48 61 73 68 20 74 61 62 6c 65 20 63 68 61  d Hash table cha
c800: 6e 67 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  nges */.#define 
c810: 53 51 4c 49 54 45 5f 46 75 6c 6c 43 6f 6c 4e 61  SQLITE_FullColNa
c820: 6d 65 73 20 20 20 30 78 30 30 30 30 30 30 30 34  mes   0x00000004
c830: 20 20 2f 2a 20 53 68 6f 77 20 66 75 6c 6c 20 63    /* Show full c
c840: 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 6f 6e 20 53  olumn names on S
c850: 45 4c 45 43 54 20 2a 2f 0a 23 64 65 66 69 6e 65  ELECT */.#define
c860: 20 53 51 4c 49 54 45 5f 46 75 6c 6c 46 53 79 6e   SQLITE_FullFSyn
c870: 63 20 20 20 20 20 20 30 78 30 30 30 30 30 30 30  c      0x0000000
c880: 38 20 20 2f 2a 20 55 73 65 20 66 75 6c 6c 20 66  8  /* Use full f
c890: 73 79 6e 63 20 6f 6e 20 74 68 65 20 62 61 63 6b  sync on the back
c8a0: 65 6e 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  end */.#define S
c8b0: 51 4c 49 54 45 5f 43 6b 70 74 46 75 6c 6c 46 53  QLITE_CkptFullFS
c8c0: 79 6e 63 20 20 30 78 30 30 30 30 30 30 31 30 20  ync  0x00000010 
c8d0: 20 2f 2a 20 55 73 65 20 66 75 6c 6c 20 66 73 79   /* Use full fsy
c8e0: 6e 63 20 66 6f 72 20 63 68 65 63 6b 70 6f 69 6e  nc for checkpoin
c8f0: 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  t */.#define SQL
c900: 49 54 45 5f 43 61 63 68 65 53 70 69 6c 6c 20 20  ITE_CacheSpill  
c910: 20 20 20 30 78 30 30 30 30 30 30 32 30 20 20 2f     0x00000020  /
c920: 2a 20 4f 4b 20 74 6f 20 73 70 69 6c 6c 20 70 61  * OK to spill pa
c930: 67 65 72 20 63 61 63 68 65 20 2a 2f 0a 23 64 65  ger cache */.#de
c940: 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 68 6f 72  fine SQLITE_Shor
c950: 74 43 6f 6c 4e 61 6d 65 73 20 20 30 78 30 30 30  tColNames  0x000
c960: 30 30 30 34 30 20 20 2f 2a 20 53 68 6f 77 20 73  00040  /* Show s
c970: 68 6f 72 74 20 63 6f 6c 75 6d 6e 73 20 6e 61 6d  hort columns nam
c980: 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  es */.#define SQ
c990: 4c 49 54 45 5f 43 6f 75 6e 74 52 6f 77 73 20 20  LITE_CountRows  
c9a0: 20 20 20 20 30 78 30 30 30 30 30 30 38 30 20 20      0x00000080  
c9b0: 2f 2a 20 43 6f 75 6e 74 20 72 6f 77 73 20 63 68  /* Count rows ch
c9c0: 61 6e 67 65 64 20 62 79 20 49 4e 53 45 52 54 2c  anged by INSERT,
c9d0: 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20   */.            
c9e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c9f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
ca00: 20 20 20 44 45 4c 45 54 45 2c 20 6f 72 20 55 50     DELETE, or UP
ca10: 44 41 54 45 20 61 6e 64 20 72 65 74 75 72 6e 20  DATE and return 
ca20: 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  */.             
ca30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ca40: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
ca50: 20 20 74 68 65 20 63 6f 75 6e 74 20 75 73 69 6e    the count usin
ca60: 67 20 61 20 63 61 6c 6c 62 61 63 6b 2e 20 2a 2f  g a callback. */
ca70: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
ca80: 4e 75 6c 6c 43 61 6c 6c 62 61 63 6b 20 20 20 30  NullCallback   0
ca90: 78 30 30 30 30 30 31 30 30 20 20 2f 2a 20 49 6e  x00000100  /* In
caa0: 76 6f 6b 65 20 74 68 65 20 63 61 6c 6c 62 61 63  voke the callbac
cab0: 6b 20 6f 6e 63 65 20 69 66 20 74 68 65 20 2a 2f  k once if the */
cac0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
cad0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cae0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 20 20             /*   
caf0: 72 65 73 75 6c 74 20 73 65 74 20 69 73 20 65 6d  result set is em
cb00: 70 74 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  pty */.#define S
cb10: 51 4c 49 54 45 5f 53 71 6c 54 72 61 63 65 20 20  QLITE_SqlTrace  
cb20: 20 20 20 20 20 30 78 30 30 30 30 30 32 30 30 20       0x00000200 
cb30: 20 2f 2a 20 44 65 62 75 67 20 70 72 69 6e 74 20   /* Debug print 
cb40: 53 51 4c 20 61 73 20 69 74 20 65 78 65 63 75 74  SQL as it execut
cb50: 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  es */.#define SQ
cb60: 4c 49 54 45 5f 56 64 62 65 4c 69 73 74 69 6e 67  LITE_VdbeListing
cb70: 20 20 20 20 30 78 30 30 30 30 30 34 30 30 20 20      0x00000400  
cb80: 2f 2a 20 44 65 62 75 67 20 6c 69 73 74 69 6e 67  /* Debug listing
cb90: 73 20 6f 66 20 56 44 42 45 20 70 72 6f 67 72 61  s of VDBE progra
cba0: 6d 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  ms */.#define SQ
cbb0: 4c 49 54 45 5f 57 72 69 74 65 53 63 68 65 6d 61  LITE_WriteSchema
cbc0: 20 20 20 20 30 78 30 30 30 30 30 38 30 30 20 20      0x00000800  
cbd0: 2f 2a 20 4f 4b 20 74 6f 20 75 70 64 61 74 65 20  /* OK to update 
cbe0: 53 51 4c 49 54 45 5f 4d 41 53 54 45 52 20 2a 2f  SQLITE_MASTER */
cbf0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
cc00: 56 64 62 65 41 64 64 6f 70 54 72 61 63 65 20 30  VdbeAddopTrace 0
cc10: 78 30 30 30 30 31 30 30 30 20 20 2f 2a 20 54 72  x00001000  /* Tr
cc20: 61 63 65 20 73 71 6c 69 74 65 33 56 64 62 65 41  ace sqlite3VdbeA
cc30: 64 64 4f 70 28 29 20 63 61 6c 6c 73 20 2a 2f 0a  ddOp() calls */.
cc40: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49  #define SQLITE_I
cc50: 67 6e 6f 72 65 43 68 65 63 6b 73 20 20 20 30 78  gnoreChecks   0x
cc60: 30 30 30 30 32 30 30 30 20 20 2f 2a 20 44 6f 20  00002000  /* Do 
cc70: 6e 6f 74 20 65 6e 66 6f 72 63 65 20 63 68 65 63  not enforce chec
cc80: 6b 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f  k constraints */
cc90: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
cca0: 52 65 61 64 55 6e 63 6f 6d 6d 69 74 74 65 64 20  ReadUncommitted 
ccb0: 30 78 30 30 30 34 30 30 30 20 20 2f 2a 20 46 6f  0x0004000  /* Fo
ccc0: 72 20 73 68 61 72 65 64 2d 63 61 63 68 65 20 6d  r shared-cache m
ccd0: 6f 64 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ode */.#define S
cce0: 51 4c 49 54 45 5f 4c 65 67 61 63 79 46 69 6c 65  QLITE_LegacyFile
ccf0: 46 6d 74 20 20 30 78 30 30 30 30 38 30 30 30 20  Fmt  0x00008000 
cd00: 20 2f 2a 20 43 72 65 61 74 65 20 6e 65 77 20 64   /* Create new d
cd10: 61 74 61 62 61 73 65 73 20 69 6e 20 66 6f 72 6d  atabases in form
cd20: 61 74 20 31 20 2a 2f 0a 23 64 65 66 69 6e 65 20  at 1 */.#define 
cd30: 53 51 4c 49 54 45 5f 52 65 63 6f 76 65 72 79 4d  SQLITE_RecoveryM
cd40: 6f 64 65 20 20 20 30 78 30 30 30 31 30 30 30 30  ode   0x00010000
cd50: 20 20 2f 2a 20 49 67 6e 6f 72 65 20 73 63 68 65    /* Ignore sche
cd60: 6d 61 20 65 72 72 6f 72 73 20 2a 2f 0a 23 64 65  ma errors */.#de
cd70: 66 69 6e 65 20 53 51 4c 49 54 45 5f 52 65 76 65  fine SQLITE_Reve
cd80: 72 73 65 4f 72 64 65 72 20 20 20 30 78 30 30 30  rseOrder   0x000
cd90: 32 30 30 30 30 20 20 2f 2a 20 52 65 76 65 72 73  20000  /* Revers
cda0: 65 20 75 6e 6f 72 64 65 72 65 64 20 53 45 4c 45  e unordered SELE
cdb0: 43 54 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  CTs */.#define S
cdc0: 51 4c 49 54 45 5f 52 65 63 54 72 69 67 67 65 72  QLITE_RecTrigger
cdd0: 73 20 20 20 20 30 78 30 30 30 34 30 30 30 30 20  s    0x00040000 
cde0: 20 2f 2a 20 45 6e 61 62 6c 65 20 72 65 63 75 72   /* Enable recur
cdf0: 73 69 76 65 20 74 72 69 67 67 65 72 73 20 2a 2f  sive triggers */
ce00: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
ce10: 46 6f 72 65 69 67 6e 4b 65 79 73 20 20 20 20 30  ForeignKeys    0
ce20: 78 30 30 30 38 30 30 30 30 20 20 2f 2a 20 45 6e  x00080000  /* En
ce30: 66 6f 72 63 65 20 66 6f 72 65 69 67 6e 20 6b 65  force foreign ke
ce40: 79 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 20 2a  y constraints  *
ce50: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
ce60: 5f 41 75 74 6f 49 6e 64 65 78 20 20 20 20 20 20  _AutoIndex      
ce70: 30 78 30 30 31 30 30 30 30 30 20 20 2f 2a 20 45  0x00100000  /* E
ce80: 6e 61 62 6c 65 20 61 75 74 6f 6d 61 74 69 63 20  nable automatic 
ce90: 69 6e 64 65 78 65 73 20 2a 2f 0a 23 64 65 66 69  indexes */.#defi
cea0: 6e 65 20 53 51 4c 49 54 45 5f 50 72 65 66 65 72  ne SQLITE_Prefer
ceb0: 42 75 69 6c 74 69 6e 20 20 30 78 30 30 32 30 30  Builtin  0x00200
cec0: 30 30 30 20 20 2f 2a 20 50 72 65 66 65 72 65 6e  000  /* Preferen
ced0: 63 65 20 74 6f 20 62 75 69 6c 74 2d 69 6e 20 66  ce to built-in f
cee0: 75 6e 63 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  uncs */.#define 
cef0: 53 51 4c 49 54 45 5f 4c 6f 61 64 45 78 74 65 6e  SQLITE_LoadExten
cf00: 73 69 6f 6e 20 20 30 78 30 30 34 30 30 30 30 30  sion  0x00400000
cf10: 20 20 2f 2a 20 45 6e 61 62 6c 65 20 6c 6f 61 64    /* Enable load
cf20: 5f 65 78 74 65 6e 73 69 6f 6e 20 2a 2f 0a 23 64  _extension */.#d
cf30: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4c 6f 61  efine SQLITE_Loa
cf40: 64 45 78 74 46 75 6e 63 20 20 20 20 30 78 30 30  dExtFunc    0x00
cf50: 38 30 30 30 30 30 20 20 2f 2a 20 45 6e 61 62 6c  800000  /* Enabl
cf60: 65 20 6c 6f 61 64 5f 65 78 74 65 6e 73 69 6f 6e  e load_extension
cf70: 28 29 20 53 51 4c 20 66 75 6e 63 20 2a 2f 0a 23  () SQL func */.#
cf80: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 6e  define SQLITE_En
cf90: 61 62 6c 65 54 72 69 67 67 65 72 20 20 30 78 30  ableTrigger  0x0
cfa0: 31 30 30 30 30 30 30 20 20 2f 2a 20 54 72 75 65  1000000  /* True
cfb0: 20 74 6f 20 65 6e 61 62 6c 65 20 74 72 69 67 67   to enable trigg
cfc0: 65 72 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ers */.#define S
cfd0: 51 4c 49 54 45 5f 44 65 66 65 72 46 4b 73 20 20  QLITE_DeferFKs  
cfe0: 20 20 20 20 20 30 78 30 32 30 30 30 30 30 30 20       0x02000000 
cff0: 20 2f 2a 20 44 65 66 65 72 20 61 6c 6c 20 46 4b   /* Defer all FK
d000: 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f 0a   constraints */.
d010: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 51  #define SQLITE_Q
d020: 75 65 72 79 4f 6e 6c 79 20 20 20 20 20 20 30 78  ueryOnly      0x
d030: 30 34 30 30 30 30 30 30 20 20 2f 2a 20 44 69 73  04000000  /* Dis
d040: 61 62 6c 65 20 64 61 74 61 62 61 73 65 20 63 68  able database ch
d050: 61 6e 67 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65  anges */.#define
d060: 20 53 51 4c 49 54 45 5f 56 64 62 65 45 51 50 20   SQLITE_VdbeEQP 
d070: 20 20 20 20 20 20 20 30 78 30 38 30 30 30 30 30         0x0800000
d080: 30 20 20 2f 2a 20 44 65 62 75 67 20 45 58 50 4c  0  /* Debug EXPL
d090: 41 49 4e 20 51 55 45 52 59 20 50 4c 41 4e 20 2a  AIN QUERY PLAN *
d0a0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
d0b0: 5f 56 61 63 75 75 6d 20 20 20 20 20 20 20 20 20  _Vacuum         
d0c0: 30 78 31 30 30 30 30 30 30 30 20 20 2f 2a 20 43  0x10000000  /* C
d0d0: 75 72 72 65 6e 74 6c 79 20 69 6e 20 61 20 56 41  urrently in a VA
d0e0: 43 55 55 4d 20 2a 2f 0a 23 64 65 66 69 6e 65 20  CUUM */.#define 
d0f0: 53 51 4c 49 54 45 5f 43 65 6c 6c 53 69 7a 65 43  SQLITE_CellSizeC
d100: 6b 20 20 20 20 20 30 78 32 30 30 30 30 30 30 30  k     0x20000000
d110: 20 20 2f 2a 20 43 68 65 63 6b 20 62 74 72 65 65    /* Check btree
d120: 20 63 65 6c 6c 20 73 69 7a 65 73 20 6f 6e 20 6c   cell sizes on l
d130: 6f 61 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  oad */.#define S
d140: 51 4c 49 54 45 5f 46 74 73 33 54 6f 6b 65 6e 69  QLITE_Fts3Tokeni
d150: 7a 65 72 20 20 30 78 34 30 30 30 30 30 30 30 20  zer  0x40000000 
d160: 20 2f 2a 20 45 6e 61 62 6c 65 20 66 74 73 33 5f   /* Enable fts3_
d170: 74 6f 6b 65 6e 69 7a 65 72 28 32 29 20 2a 2f 0a  tokenizer(2) */.
d180: 0a 0a 2f 2a 0a 2a 2a 20 42 69 74 73 20 6f 66 20  ../*.** Bits of 
d190: 74 68 65 20 73 71 6c 69 74 65 33 2e 64 62 4f 70  the sqlite3.dbOp
d1a0: 74 46 6c 61 67 73 20 66 69 65 6c 64 20 74 68 61  tFlags field tha
d1b0: 74 20 61 72 65 20 75 73 65 64 20 62 79 20 74 68  t are used by th
d1c0: 65 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 74 65 73  e.** sqlite3_tes
d1d0: 74 5f 63 6f 6e 74 72 6f 6c 28 53 51 4c 49 54 45  t_control(SQLITE
d1e0: 5f 54 45 53 54 43 54 52 4c 5f 4f 50 54 49 4d 49  _TESTCTRL_OPTIMI
d1f0: 5a 41 54 49 4f 4e 53 2c 2e 2e 2e 29 20 69 6e 74  ZATIONS,...) int
d200: 65 72 66 61 63 65 20 74 6f 0a 2a 2a 20 73 65 6c  erface to.** sel
d210: 65 63 74 69 76 65 6c 79 20 64 69 73 61 62 6c 65  ectively disable
d220: 20 76 61 72 69 6f 75 73 20 6f 70 74 69 6d 69 7a   various optimiz
d230: 61 74 69 6f 6e 73 2e 0a 2a 2f 0a 23 64 65 66 69  ations..*/.#defi
d240: 6e 65 20 53 51 4c 49 54 45 5f 51 75 65 72 79 46  ne SQLITE_QueryF
d250: 6c 61 74 74 65 6e 65 72 20 30 78 30 30 30 31 20  lattener 0x0001 
d260: 20 20 2f 2a 20 51 75 65 72 79 20 66 6c 61 74 74    /* Query flatt
d270: 65 6e 69 6e 67 20 2a 2f 0a 23 64 65 66 69 6e 65  ening */.#define
d280: 20 53 51 4c 49 54 45 5f 43 6f 6c 75 6d 6e 43 61   SQLITE_ColumnCa
d290: 63 68 65 20 20 20 20 30 78 30 30 30 32 20 20 20  che    0x0002   
d2a0: 2f 2a 20 43 6f 6c 75 6d 6e 20 63 61 63 68 65 20  /* Column cache 
d2b0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
d2c0: 45 5f 47 72 6f 75 70 42 79 4f 72 64 65 72 20 20  E_GroupByOrder  
d2d0: 20 30 78 30 30 30 34 20 20 20 2f 2a 20 47 52 4f   0x0004   /* GRO
d2e0: 55 50 42 59 20 63 6f 76 65 72 20 6f 66 20 4f 52  UPBY cover of OR
d2f0: 44 45 52 42 59 20 2a 2f 0a 23 64 65 66 69 6e 65  DERBY */.#define
d300: 20 53 51 4c 49 54 45 5f 46 61 63 74 6f 72 4f 75   SQLITE_FactorOu
d310: 74 43 6f 6e 73 74 20 30 78 30 30 30 38 20 20 20  tConst 0x0008   
d320: 2f 2a 20 43 6f 6e 73 74 61 6e 74 20 66 61 63 74  /* Constant fact
d330: 6f 72 69 6e 67 20 2a 2f 0a 2f 2a 20 20 20 20 20  oring */./*     
d340: 20 20 20 20 20 20 20 20 20 20 20 6e 6f 74 20 75             not u
d350: 73 65 64 20 20 20 20 30 78 30 30 31 30 20 20 20  sed    0x0010   
d360: 2f 2f 20 57 61 73 3a 20 53 51 4c 49 54 45 5f 49  // Was: SQLITE_I
d370: 64 78 52 65 61 6c 41 73 49 6e 74 20 2a 2f 0a 23  dxRealAsInt */.#
d380: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 69  define SQLITE_Di
d390: 73 74 69 6e 63 74 4f 70 74 20 20 20 20 30 78 30  stinctOpt    0x0
d3a0: 30 32 30 20 20 20 2f 2a 20 44 49 53 54 49 4e 43  020   /* DISTINC
d3b0: 54 20 75 73 69 6e 67 20 69 6e 64 65 78 65 73 20  T using indexes 
d3c0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
d3d0: 45 5f 43 6f 76 65 72 49 64 78 53 63 61 6e 20 20  E_CoverIdxScan  
d3e0: 20 30 78 30 30 34 30 20 20 20 2f 2a 20 43 6f 76   0x0040   /* Cov
d3f0: 65 72 69 6e 67 20 69 6e 64 65 78 20 73 63 61 6e  ering index scan
d400: 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  s */.#define SQL
d410: 49 54 45 5f 4f 72 64 65 72 42 79 49 64 78 4a 6f  ITE_OrderByIdxJo
d420: 69 6e 20 30 78 30 30 38 30 20 20 20 2f 2a 20 4f  in 0x0080   /* O
d430: 52 44 45 52 20 42 59 20 6f 66 20 6a 6f 69 6e 73  RDER BY of joins
d440: 20 76 69 61 20 69 6e 64 65 78 20 2a 2f 0a 23 64   via index */.#d
d450: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 75 62  efine SQLITE_Sub
d460: 71 43 6f 72 6f 75 74 69 6e 65 20 20 30 78 30 31  qCoroutine  0x01
d470: 30 30 20 20 20 2f 2a 20 45 76 61 6c 75 61 74 65  00   /* Evaluate
d480: 20 73 75 62 71 75 65 72 69 65 73 20 61 73 20 63   subqueries as c
d490: 6f 72 6f 75 74 69 6e 65 73 20 2a 2f 0a 23 64 65  oroutines */.#de
d4a0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 54 72 61 6e  fine SQLITE_Tran
d4b0: 73 69 74 69 76 65 20 20 20 20 20 30 78 30 32 30  sitive     0x020
d4c0: 30 20 20 20 2f 2a 20 54 72 61 6e 73 69 74 69 76  0   /* Transitiv
d4d0: 65 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f  e constraints */
d4e0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
d4f0: 4f 6d 69 74 4e 6f 6f 70 4a 6f 69 6e 20 20 20 30  OmitNoopJoin   0
d500: 78 30 34 30 30 20 20 20 2f 2a 20 4f 6d 69 74 20  x0400   /* Omit 
d510: 75 6e 75 73 65 64 20 74 61 62 6c 65 73 20 69 6e  unused tables in
d520: 20 6a 6f 69 6e 73 20 2a 2f 0a 23 64 65 66 69 6e   joins */.#defin
d530: 65 20 53 51 4c 49 54 45 5f 53 74 61 74 33 34 20  e SQLITE_Stat34 
d540: 20 20 20 20 20 20 20 20 30 78 30 38 30 30 20 20          0x0800  
d550: 20 2f 2a 20 55 73 65 20 53 54 41 54 33 20 6f 72   /* Use STAT3 or
d560: 20 53 54 41 54 34 20 64 61 74 61 20 2a 2f 0a 23   STAT4 data */.#
d570: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 75  define SQLITE_Cu
d580: 72 73 6f 72 48 69 6e 74 73 20 20 20 20 30 78 32  rsorHints    0x2
d590: 30 30 30 20 20 20 2f 2a 20 41 64 64 20 4f 50 5f  000   /* Add OP_
d5a0: 43 75 72 73 6f 72 48 69 6e 74 20 6f 70 63 6f 64  CursorHint opcod
d5b0: 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  es */.#define SQ
d5c0: 4c 49 54 45 5f 41 6c 6c 4f 70 74 73 20 20 20 20  LITE_AllOpts    
d5d0: 20 20 20 20 30 78 66 66 66 66 20 20 20 2f 2a 20      0xffff   /* 
d5e0: 41 6c 6c 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e  All optimization
d5f0: 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 4d 61 63 72  s */../*.** Macr
d600: 6f 73 20 66 6f 72 20 74 65 73 74 69 6e 67 20 77  os for testing w
d610: 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 6f 70  hether or not op
d620: 74 69 6d 69 7a 61 74 69 6f 6e 73 20 61 72 65 20  timizations are 
d630: 65 6e 61 62 6c 65 64 20 6f 72 20 64 69 73 61 62  enabled or disab
d640: 6c 65 64 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20  led..*/.#ifndef 
d650: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 55 49 4c  SQLITE_OMIT_BUIL
d660: 54 49 4e 5f 54 45 53 54 0a 23 64 65 66 69 6e 65  TIN_TEST.#define
d670: 20 4f 70 74 69 6d 69 7a 61 74 69 6f 6e 44 69 73   OptimizationDis
d680: 61 62 6c 65 64 28 64 62 2c 20 6d 61 73 6b 29 20  abled(db, mask) 
d690: 20 28 28 28 64 62 29 2d 3e 64 62 4f 70 74 46 6c   (((db)->dbOptFl
d6a0: 61 67 73 26 28 6d 61 73 6b 29 29 21 3d 30 29 0a  ags&(mask))!=0).
d6b0: 23 64 65 66 69 6e 65 20 4f 70 74 69 6d 69 7a 61  #define Optimiza
d6c0: 74 69 6f 6e 45 6e 61 62 6c 65 64 28 64 62 2c 20  tionEnabled(db, 
d6d0: 6d 61 73 6b 29 20 20 20 28 28 28 64 62 29 2d 3e  mask)   (((db)->
d6e0: 64 62 4f 70 74 46 6c 61 67 73 26 28 6d 61 73 6b  dbOptFlags&(mask
d6f0: 29 29 3d 3d 30 29 0a 23 65 6c 73 65 0a 23 64 65  ))==0).#else.#de
d700: 66 69 6e 65 20 4f 70 74 69 6d 69 7a 61 74 69 6f  fine Optimizatio
d710: 6e 44 69 73 61 62 6c 65 64 28 64 62 2c 20 6d 61  nDisabled(db, ma
d720: 73 6b 29 20 20 30 0a 23 64 65 66 69 6e 65 20 4f  sk)  0.#define O
d730: 70 74 69 6d 69 7a 61 74 69 6f 6e 45 6e 61 62 6c  ptimizationEnabl
d740: 65 64 28 64 62 2c 20 6d 61 73 6b 29 20 20 20 31  ed(db, mask)   1
d750: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 52  .#endif../*.** R
d760: 65 74 75 72 6e 20 74 72 75 65 20 69 66 20 69 74  eturn true if it
d770: 20 4f 4b 20 74 6f 20 66 61 63 74 6f 72 20 63 6f   OK to factor co
d780: 6e 73 74 61 6e 74 20 65 78 70 72 65 73 73 69 6f  nstant expressio
d790: 6e 73 20 69 6e 74 6f 20 74 68 65 20 69 6e 69 74  ns into the init
d7a0: 69 61 6c 69 7a 61 74 69 6f 6e 0a 2a 2a 20 63 6f  ialization.** co
d7b0: 64 65 2e 20 54 68 65 20 61 72 67 75 6d 65 6e 74  de. The argument
d7c0: 20 69 73 20 61 20 50 61 72 73 65 20 6f 62 6a 65   is a Parse obje
d7d0: 63 74 20 66 6f 72 20 74 68 65 20 63 6f 64 65 20  ct for the code 
d7e0: 67 65 6e 65 72 61 74 6f 72 2e 0a 2a 2f 0a 23 64  generator..*/.#d
d7f0: 65 66 69 6e 65 20 43 6f 6e 73 74 46 61 63 74 6f  efine ConstFacto
d800: 72 4f 6b 28 50 29 20 28 28 50 29 2d 3e 6f 6b 43  rOk(P) ((P)->okC
d810: 6f 6e 73 74 46 61 63 74 6f 72 29 0a 0a 2f 2a 0a  onstFactor)../*.
d820: 2a 2a 20 50 6f 73 73 69 62 6c 65 20 76 61 6c 75  ** Possible valu
d830: 65 73 20 66 6f 72 20 74 68 65 20 73 71 6c 69 74  es for the sqlit
d840: 65 2e 6d 61 67 69 63 20 66 69 65 6c 64 2e 0a 2a  e.magic field..*
d850: 2a 20 54 68 65 20 6e 75 6d 62 65 72 73 20 61 72  * The numbers ar
d860: 65 20 6f 62 74 61 69 6e 65 64 20 61 74 20 72 61  e obtained at ra
d870: 6e 64 6f 6d 20 61 6e 64 20 68 61 76 65 20 6e 6f  ndom and have no
d880: 20 73 70 65 63 69 61 6c 20 6d 65 61 6e 69 6e 67   special meaning
d890: 2c 20 6f 74 68 65 72 0a 2a 2a 20 74 68 61 6e 20  , other.** than 
d8a0: 62 65 69 6e 67 20 64 69 73 74 69 6e 63 74 20 66  being distinct f
d8b0: 72 6f 6d 20 6f 6e 65 20 61 6e 6f 74 68 65 72 2e  rom one another.
d8c0: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  .*/.#define SQLI
d8d0: 54 45 5f 4d 41 47 49 43 5f 4f 50 45 4e 20 20 20  TE_MAGIC_OPEN   
d8e0: 20 20 30 78 61 30 32 39 61 36 39 37 20 20 2f 2a    0xa029a697  /*
d8f0: 20 44 61 74 61 62 61 73 65 20 69 73 20 6f 70 65   Database is ope
d900: 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  n */.#define SQL
d910: 49 54 45 5f 4d 41 47 49 43 5f 43 4c 4f 53 45 44  ITE_MAGIC_CLOSED
d920: 20 20 20 30 78 39 66 33 63 32 64 33 33 20 20 2f     0x9f3c2d33  /
d930: 2a 20 44 61 74 61 62 61 73 65 20 69 73 20 63 6c  * Database is cl
d940: 6f 73 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20  osed */.#define 
d950: 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 53 49 43  SQLITE_MAGIC_SIC
d960: 4b 20 20 20 20 20 30 78 34 62 37 37 31 32 39 30  K     0x4b771290
d970: 20 20 2f 2a 20 45 72 72 6f 72 20 61 6e 64 20 61    /* Error and a
d980: 77 61 69 74 69 6e 67 20 63 6c 6f 73 65 20 2a 2f  waiting close */
d990: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
d9a0: 4d 41 47 49 43 5f 42 55 53 59 20 20 20 20 20 30  MAGIC_BUSY     0
d9b0: 78 66 30 33 62 37 39 30 36 20 20 2f 2a 20 44 61  xf03b7906  /* Da
d9c0: 74 61 62 61 73 65 20 63 75 72 72 65 6e 74 6c 79  tabase currently
d9d0: 20 69 6e 20 75 73 65 20 2a 2f 0a 23 64 65 66 69   in use */.#defi
d9e0: 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f  ne SQLITE_MAGIC_
d9f0: 45 52 52 4f 52 20 20 20 20 30 78 62 35 33 35 37  ERROR    0xb5357
da00: 39 33 30 20 20 2f 2a 20 41 6e 20 53 51 4c 49 54  930  /* An SQLIT
da10: 45 5f 4d 49 53 55 53 45 20 65 72 72 6f 72 20 6f  E_MISUSE error o
da20: 63 63 75 72 72 65 64 20 2a 2f 0a 23 64 65 66 69  ccurred */.#defi
da30: 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f  ne SQLITE_MAGIC_
da40: 5a 4f 4d 42 49 45 20 20 20 30 78 36 34 63 66 66  ZOMBIE   0x64cff
da50: 63 37 66 20 20 2f 2a 20 43 6c 6f 73 65 20 77 69  c7f  /* Close wi
da60: 74 68 20 6c 61 73 74 20 73 74 61 74 65 6d 65 6e  th last statemen
da70: 74 20 63 6c 6f 73 65 20 2a 2f 0a 0a 2f 2a 0a 2a  t close */../*.*
da80: 2a 20 45 61 63 68 20 53 51 4c 20 66 75 6e 63 74  * Each SQL funct
da90: 69 6f 6e 20 69 73 20 64 65 66 69 6e 65 64 20 62  ion is defined b
daa0: 79 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  y an instance of
dab0: 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 0a 2a   the following.*
dac0: 2a 20 73 74 72 75 63 74 75 72 65 2e 20 20 46 6f  * structure.  Fo
dad0: 72 20 67 6c 6f 62 61 6c 20 62 75 69 6c 74 2d 69  r global built-i
dae0: 6e 20 66 75 6e 63 74 69 6f 6e 73 20 28 65 78 3a  n functions (ex:
daf0: 20 73 75 62 73 74 72 28 29 2c 20 6d 61 78 28 29   substr(), max()
db00: 2c 20 63 6f 75 6e 74 28 29 29 0a 2a 2a 20 61 20  , count()).** a 
db10: 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 69 73 20  pointer to this 
db20: 73 74 72 75 63 74 75 72 65 20 69 73 20 68 65 6c  structure is hel
db30: 64 20 69 6e 20 74 68 65 20 73 71 6c 69 74 65 33  d in the sqlite3
db40: 42 75 69 6c 74 69 6e 46 75 6e 63 74 69 6f 6e 73  BuiltinFunctions
db50: 20 6f 62 6a 65 63 74 2e 0a 2a 2a 20 46 6f 72 20   object..** For 
db60: 70 65 72 2d 63 6f 6e 6e 65 63 74 69 6f 6e 20 61  per-connection a
db70: 70 70 6c 69 63 61 74 69 6f 6e 2d 64 65 66 69 6e  pplication-defin
db80: 65 64 20 66 75 6e 63 74 69 6f 6e 73 2c 20 61 20  ed functions, a 
db90: 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 69 73 0a  pointer to this.
dba0: 2a 2a 20 73 74 72 75 63 74 75 72 65 20 69 73 20  ** structure is 
dbb0: 68 65 6c 64 20 69 6e 20 74 68 65 20 64 62 2d 3e  held in the db->
dbc0: 61 48 61 73 68 20 68 61 73 68 20 74 61 62 6c 65  aHash hash table
dbd0: 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 75 2e 70 48  ..**.** The u.pH
dbe0: 61 73 68 20 66 69 65 6c 64 20 69 73 20 75 73 65  ash field is use
dbf0: 64 20 62 79 20 74 68 65 20 67 6c 6f 62 61 6c 20  d by the global 
dc00: 62 75 69 6c 74 2d 69 6e 73 2e 20 20 54 68 65 20  built-ins.  The 
dc10: 75 2e 70 44 65 73 74 72 75 63 74 6f 72 0a 2a 2a  u.pDestructor.**
dc20: 20 66 69 65 6c 64 20 69 73 20 75 73 65 64 20 62   field is used b
dc30: 79 20 70 65 72 2d 63 6f 6e 6e 65 63 74 69 6f 6e  y per-connection
dc40: 20 61 70 70 2d 64 65 66 20 66 75 6e 63 74 69 6f   app-def functio
dc50: 6e 73 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 46 75  ns..*/.struct Fu
dc60: 6e 63 44 65 66 20 7b 0a 20 20 69 38 20 6e 41 72  ncDef {.  i8 nAr
dc70: 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  g;             /
dc80: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 72 67 75  * Number of argu
dc90: 6d 65 6e 74 73 2e 20 20 2d 31 20 6d 65 61 6e 73  ments.  -1 means
dca0: 20 75 6e 6c 69 6d 69 74 65 64 20 2a 2f 0a 20 20   unlimited */.  
dcb0: 75 31 36 20 66 75 6e 63 46 6c 61 67 73 3b 20 20  u16 funcFlags;  
dcc0: 20 20 20 20 20 2f 2a 20 53 6f 6d 65 20 63 6f 6d       /* Some com
dcd0: 62 69 6e 61 74 69 6f 6e 20 6f 66 20 53 51 4c 49  bination of SQLI
dce0: 54 45 5f 46 55 4e 43 5f 2a 20 2a 2f 0a 20 20 76  TE_FUNC_* */.  v
dcf0: 6f 69 64 20 2a 70 55 73 65 72 44 61 74 61 3b 20  oid *pUserData; 
dd00: 20 20 20 20 2f 2a 20 55 73 65 72 20 64 61 74 61      /* User data
dd10: 20 70 61 72 61 6d 65 74 65 72 20 2a 2f 0a 20 20   parameter */.  
dd20: 46 75 6e 63 44 65 66 20 2a 70 4e 65 78 74 3b 20  FuncDef *pNext; 
dd30: 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 66 75 6e       /* Next fun
dd40: 63 74 69 6f 6e 20 77 69 74 68 20 73 61 6d 65 20  ction with same 
dd50: 6e 61 6d 65 20 2a 2f 0a 20 20 76 6f 69 64 20 28  name */.  void (
dd60: 2a 78 53 46 75 6e 63 29 28 73 71 6c 69 74 65 33  *xSFunc)(sqlite3
dd70: 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71  _context*,int,sq
dd80: 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2a 29 3b 20  lite3_value**); 
dd90: 2f 2a 20 66 75 6e 63 20 6f 72 20 61 67 67 2d 73  /* func or agg-s
dda0: 74 65 70 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a  tep */.  void (*
ddb0: 78 46 69 6e 61 6c 69 7a 65 29 28 73 71 6c 69 74  xFinalize)(sqlit
ddc0: 65 33 5f 63 6f 6e 74 65 78 74 2a 29 3b 20 20 20  e3_context*);   
ddd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
dde0: 2a 20 41 67 67 20 66 69 6e 61 6c 69 7a 65 72 20  * Agg finalizer 
ddf0: 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20  */.  const char 
de00: 2a 7a 4e 61 6d 65 3b 20 20 20 2f 2a 20 53 51 4c  *zName;   /* SQL
de10: 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 66 75 6e   name of the fun
de20: 63 74 69 6f 6e 2e 20 2a 2f 0a 20 20 75 6e 69 6f  ction. */.  unio
de30: 6e 20 7b 0a 20 20 20 20 46 75 6e 63 44 65 66 20  n {.    FuncDef 
de40: 2a 70 48 61 73 68 3b 20 20 20 20 20 20 2f 2a 20  *pHash;      /* 
de50: 4e 65 78 74 20 77 69 74 68 20 61 20 64 69 66 66  Next with a diff
de60: 65 72 65 6e 74 20 6e 61 6d 65 20 62 75 74 20 74  erent name but t
de70: 68 65 20 73 61 6d 65 20 68 61 73 68 20 2a 2f 0a  he same hash */.
de80: 20 20 20 20 46 75 6e 63 44 65 73 74 72 75 63 74      FuncDestruct
de90: 6f 72 20 2a 70 44 65 73 74 72 75 63 74 6f 72 3b  or *pDestructor;
dea0: 20 20 20 2f 2a 20 52 65 66 65 72 65 6e 63 65 20     /* Reference 
deb0: 63 6f 75 6e 74 65 64 20 64 65 73 74 72 75 63 74  counted destruct
dec0: 6f 72 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20  or function */. 
ded0: 20 7d 20 75 3b 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20   } u;.};../*.** 
dee0: 54 68 69 73 20 73 74 72 75 63 74 75 72 65 20 65  This structure e
def0: 6e 63 61 70 73 75 6c 61 74 65 73 20 61 20 75 73  ncapsulates a us
df00: 65 72 2d 66 75 6e 63 74 69 6f 6e 20 64 65 73 74  er-function dest
df10: 72 75 63 74 6f 72 20 63 61 6c 6c 62 61 63 6b 20  ructor callback 
df20: 28 61 73 0a 2a 2a 20 63 6f 6e 66 69 67 75 72 65  (as.** configure
df30: 64 20 75 73 69 6e 67 20 63 72 65 61 74 65 5f 66  d using create_f
df40: 75 6e 63 74 69 6f 6e 5f 76 32 28 29 29 20 61 6e  unction_v2()) an
df50: 64 20 61 20 72 65 66 65 72 65 6e 63 65 20 63 6f  d a reference co
df60: 75 6e 74 65 72 2e 20 57 68 65 6e 0a 2a 2a 20 63  unter. When.** c
df70: 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 5f 76  reate_function_v
df80: 32 28 29 20 69 73 20 63 61 6c 6c 65 64 20 74 6f  2() is called to
df90: 20 63 72 65 61 74 65 20 61 20 66 75 6e 63 74 69   create a functi
dfa0: 6f 6e 20 77 69 74 68 20 61 20 64 65 73 74 72 75  on with a destru
dfb0: 63 74 6f 72 2c 0a 2a 2a 20 61 20 73 69 6e 67 6c  ctor,.** a singl
dfc0: 65 20 6f 62 6a 65 63 74 20 6f 66 20 74 68 69 73  e object of this
dfd0: 20 74 79 70 65 20 69 73 20 61 6c 6c 6f 63 61 74   type is allocat
dfe0: 65 64 2e 20 46 75 6e 63 44 65 73 74 72 75 63 74  ed. FuncDestruct
dff0: 6f 72 2e 6e 52 65 66 20 69 73 20 73 65 74 20 74  or.nRef is set t
e000: 6f 0a 2a 2a 20 74 68 65 20 6e 75 6d 62 65 72 20  o.** the number 
e010: 6f 66 20 46 75 6e 63 44 65 66 20 6f 62 6a 65 63  of FuncDef objec
e020: 74 73 20 63 72 65 61 74 65 64 20 28 65 69 74 68  ts created (eith
e030: 65 72 20 31 20 6f 72 20 33 2c 20 64 65 70 65 6e  er 1 or 3, depen
e040: 64 69 6e 67 20 6f 6e 20 77 68 65 74 68 65 72 0a  ding on whether.
e050: 2a 2a 20 6f 72 20 6e 6f 74 20 74 68 65 20 73 70  ** or not the sp
e060: 65 63 69 66 69 65 64 20 65 6e 63 6f 64 69 6e 67  ecified encoding
e070: 20 69 73 20 53 51 4c 49 54 45 5f 41 4e 59 29 2e   is SQLITE_ANY).
e080: 20 54 68 65 20 46 75 6e 63 44 65 66 2e 70 44 65   The FuncDef.pDe
e090: 73 74 72 75 63 74 6f 72 0a 2a 2a 20 6d 65 6d 62  structor.** memb
e0a0: 65 72 20 6f 66 20 65 61 63 68 20 6f 66 20 74 68  er of each of th
e0b0: 65 20 6e 65 77 20 46 75 6e 63 44 65 66 20 6f 62  e new FuncDef ob
e0c0: 6a 65 63 74 73 20 69 73 20 73 65 74 20 74 6f 20  jects is set to 
e0d0: 70 6f 69 6e 74 20 74 6f 20 74 68 65 20 61 6c 6c  point to the all
e0e0: 6f 63 61 74 65 64 0a 2a 2a 20 46 75 6e 63 44 65  ocated.** FuncDe
e0f0: 73 74 72 75 63 74 6f 72 2e 0a 2a 2a 0a 2a 2a 20  structor..**.** 
e100: 54 68 65 72 65 61 66 74 65 72 2c 20 77 68 65 6e  Thereafter, when
e110: 20 6f 6e 65 20 6f 66 20 74 68 65 20 46 75 6e 63   one of the Func
e120: 44 65 66 20 6f 62 6a 65 63 74 73 20 69 73 20 64  Def objects is d
e130: 65 6c 65 74 65 64 2c 20 74 68 65 20 72 65 66 65  eleted, the refe
e140: 72 65 6e 63 65 0a 2a 2a 20 63 6f 75 6e 74 20 6f  rence.** count o
e150: 6e 20 74 68 69 73 20 6f 62 6a 65 63 74 20 69 73  n this object is
e160: 20 64 65 63 72 65 6d 65 6e 74 65 64 2e 20 57 68   decremented. Wh
e170: 65 6e 20 69 74 20 72 65 61 63 68 65 73 20 30 2c  en it reaches 0,
e180: 20 74 68 65 20 64 65 73 74 72 75 63 74 6f 72 0a   the destructor.
e190: 2a 2a 20 69 73 20 69 6e 76 6f 6b 65 64 20 61 6e  ** is invoked an
e1a0: 64 20 74 68 65 20 46 75 6e 63 44 65 73 74 72 75  d the FuncDestru
e1b0: 63 74 6f 72 20 73 74 72 75 63 74 75 72 65 20 66  ctor structure f
e1c0: 72 65 65 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  reed..*/.struct 
e1d0: 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72 20 7b  FuncDestructor {
e1e0: 0a 20 20 69 6e 74 20 6e 52 65 66 3b 0a 20 20 76  .  int nRef;.  v
e1f0: 6f 69 64 20 28 2a 78 44 65 73 74 72 6f 79 29 28  oid (*xDestroy)(
e200: 76 6f 69 64 20 2a 29 3b 0a 20 20 76 6f 69 64 20  void *);.  void 
e210: 2a 70 55 73 65 72 44 61 74 61 3b 0a 7d 3b 0a 0a  *pUserData;.};..
e220: 2f 2a 0a 2a 2a 20 50 6f 73 73 69 62 6c 65 20 76  /*.** Possible v
e230: 61 6c 75 65 73 20 66 6f 72 20 46 75 6e 63 44 65  alues for FuncDe
e240: 66 2e 66 6c 61 67 73 2e 20 20 4e 6f 74 65 20 74  f.flags.  Note t
e250: 68 61 74 20 74 68 65 20 5f 4c 45 4e 47 54 48 20  hat the _LENGTH 
e260: 61 6e 64 20 5f 54 59 50 45 4f 46 0a 2a 2a 20 76  and _TYPEOF.** v
e270: 61 6c 75 65 73 20 6d 75 73 74 20 63 6f 72 72 65  alues must corre
e280: 73 70 6f 6e 64 20 74 6f 20 4f 50 46 4c 41 47 5f  spond to OPFLAG_
e290: 4c 45 4e 47 54 48 41 52 47 20 61 6e 64 20 4f 50  LENGTHARG and OP
e2a0: 46 4c 41 47 5f 54 59 50 45 4f 46 41 52 47 2e 20  FLAG_TYPEOFARG. 
e2b0: 20 41 6e 64 0a 2a 2a 20 53 51 4c 49 54 45 5f 46   And.** SQLITE_F
e2c0: 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 20 6d 75 73  UNC_CONSTANT mus
e2d0: 74 20 62 65 20 74 68 65 20 73 61 6d 65 20 61 73  t be the same as
e2e0: 20 53 51 4c 49 54 45 5f 44 45 54 45 52 4d 49 4e   SQLITE_DETERMIN
e2f0: 49 53 54 49 43 2e 20 20 54 68 65 72 65 0a 2a 2a  ISTIC.  There.**
e300: 20 61 72 65 20 61 73 73 65 72 74 28 29 20 73 74   are assert() st
e310: 61 74 65 6d 65 6e 74 73 20 69 6e 20 74 68 65 20  atements in the 
e320: 63 6f 64 65 20 74 6f 20 76 65 72 69 66 79 20 74  code to verify t
e330: 68 69 73 2e 0a 2a 2a 0a 2a 2a 20 56 61 6c 75 65  his..**.** Value
e340: 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 28 65 6e   constraints (en
e350: 66 6f 72 63 65 64 20 76 69 61 20 61 73 73 65 72  forced via asser
e360: 74 28 29 29 3a 0a 2a 2a 20 20 20 20 20 53 51 4c  t()):.**     SQL
e370: 49 54 45 5f 46 55 4e 43 5f 4d 49 4e 4d 41 58 20  ITE_FUNC_MINMAX 
e380: 20 20 20 3d 3d 20 20 4e 43 5f 4d 69 6e 4d 61 78     ==  NC_MinMax
e390: 41 67 67 20 20 20 20 20 20 3d 3d 20 53 46 5f 4d  Agg      == SF_M
e3a0: 69 6e 4d 61 78 41 67 67 0a 2a 2a 20 20 20 20 20  inMaxAgg.**     
e3b0: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4c 45 4e 47  SQLITE_FUNC_LENG
e3c0: 54 48 20 20 20 20 3d 3d 20 20 4f 50 46 4c 41 47  TH    ==  OPFLAG
e3d0: 5f 4c 45 4e 47 54 48 41 52 47 0a 2a 2a 20 20 20  _LENGTHARG.**   
e3e0: 20 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 54 59    SQLITE_FUNC_TY
e3f0: 50 45 4f 46 20 20 20 20 3d 3d 20 20 4f 50 46 4c  PEOF    ==  OPFL
e400: 41 47 5f 54 59 50 45 4f 46 41 52 47 0a 2a 2a 20  AG_TYPEOFARG.** 
e410: 20 20 20 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f      SQLITE_FUNC_
e420: 43 4f 4e 53 54 41 4e 54 20 20 3d 3d 20 20 53 51  CONSTANT  ==  SQ
e430: 4c 49 54 45 5f 44 45 54 45 52 4d 49 4e 49 53 54  LITE_DETERMINIST
e440: 49 43 20 66 72 6f 6d 20 74 68 65 20 41 50 49 0a  IC from the API.
e450: 2a 2a 20 20 20 20 20 53 51 4c 49 54 45 5f 46 55  **     SQLITE_FU
e460: 4e 43 5f 45 4e 43 4d 41 53 4b 20 20 20 64 65 70  NC_ENCMASK   dep
e470: 65 6e 64 73 20 6f 6e 20 53 51 4c 49 54 45 5f 55  ends on SQLITE_U
e480: 54 46 2a 20 6d 61 63 72 6f 73 20 69 6e 20 74 68  TF* macros in th
e490: 65 20 41 50 49 0a 2a 2f 0a 23 64 65 66 69 6e 65  e API.*/.#define
e4a0: 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 45 4e 43   SQLITE_FUNC_ENC
e4b0: 4d 41 53 4b 20 20 30 78 30 30 30 33 20 2f 2a 20  MASK  0x0003 /* 
e4c0: 53 51 4c 49 54 45 5f 55 54 46 38 2c 20 53 51 4c  SQLITE_UTF8, SQL
e4d0: 49 54 45 5f 55 54 46 31 36 42 45 20 6f 72 20 55  ITE_UTF16BE or U
e4e0: 54 46 31 36 4c 45 20 2a 2f 0a 23 64 65 66 69 6e  TF16LE */.#defin
e4f0: 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4c 49  e SQLITE_FUNC_LI
e500: 4b 45 20 20 20 20 20 30 78 30 30 30 34 20 2f 2a  KE     0x0004 /*
e510: 20 43 61 6e 64 69 64 61 74 65 20 66 6f 72 20 74   Candidate for t
e520: 68 65 20 4c 49 4b 45 20 6f 70 74 69 6d 69 7a 61  he LIKE optimiza
e530: 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  tion */.#define 
e540: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 41 53 45  SQLITE_FUNC_CASE
e550: 20 20 20 20 20 30 78 30 30 30 38 20 2f 2a 20 43       0x0008 /* C
e560: 61 73 65 2d 73 65 6e 73 69 74 69 76 65 20 4c 49  ase-sensitive LI
e570: 4b 45 2d 74 79 70 65 20 66 75 6e 63 74 69 6f 6e  KE-type function
e580: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
e590: 54 45 5f 46 55 4e 43 5f 45 50 48 45 4d 20 20 20  TE_FUNC_EPHEM   
e5a0: 20 30 78 30 30 31 30 20 2f 2a 20 45 70 68 65 6d   0x0010 /* Ephem
e5b0: 65 72 61 6c 2e 20 20 44 65 6c 65 74 65 20 77 69  eral.  Delete wi
e5c0: 74 68 20 56 44 42 45 20 2a 2f 0a 23 64 65 66 69  th VDBE */.#defi
e5d0: 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e  ne SQLITE_FUNC_N
e5e0: 45 45 44 43 4f 4c 4c 20 30 78 30 30 32 30 20 2f  EEDCOLL 0x0020 /
e5f0: 2a 20 73 71 6c 69 74 65 33 47 65 74 46 75 6e 63  * sqlite3GetFunc
e600: 43 6f 6c 6c 53 65 71 28 29 20 6d 69 67 68 74 20  CollSeq() might 
e610: 62 65 20 63 61 6c 6c 65 64 2a 2f 0a 23 64 65 66  be called*/.#def
e620: 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f  ine SQLITE_FUNC_
e630: 4c 45 4e 47 54 48 20 20 20 30 78 30 30 34 30 20  LENGTH   0x0040 
e640: 2f 2a 20 42 75 69 6c 74 2d 69 6e 20 6c 65 6e 67  /* Built-in leng
e650: 74 68 28 29 20 66 75 6e 63 74 69 6f 6e 20 2a 2f  th() function */
e660: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
e670: 46 55 4e 43 5f 54 59 50 45 4f 46 20 20 20 30 78  FUNC_TYPEOF   0x
e680: 30 30 38 30 20 2f 2a 20 42 75 69 6c 74 2d 69 6e  0080 /* Built-in
e690: 20 74 79 70 65 6f 66 28 29 20 66 75 6e 63 74 69   typeof() functi
e6a0: 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  on */.#define SQ
e6b0: 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 55 4e 54 20  LITE_FUNC_COUNT 
e6c0: 20 20 20 30 78 30 31 30 30 20 2f 2a 20 42 75 69     0x0100 /* Bui
e6d0: 6c 74 2d 69 6e 20 63 6f 75 6e 74 28 2a 29 20 61  lt-in count(*) a
e6e0: 67 67 72 65 67 61 74 65 20 2a 2f 0a 23 64 65 66  ggregate */.#def
e6f0: 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f  ine SQLITE_FUNC_
e700: 43 4f 41 4c 45 53 43 45 20 30 78 30 32 30 30 20  COALESCE 0x0200 
e710: 2f 2a 20 42 75 69 6c 74 2d 69 6e 20 63 6f 61 6c  /* Built-in coal
e720: 65 73 63 65 28 29 20 6f 72 20 69 66 6e 75 6c 6c  esce() or ifnull
e730: 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  () */.#define SQ
e740: 4c 49 54 45 5f 46 55 4e 43 5f 55 4e 4c 49 4b 45  LITE_FUNC_UNLIKE
e750: 4c 59 20 30 78 30 34 30 30 20 2f 2a 20 42 75 69  LY 0x0400 /* Bui
e760: 6c 74 2d 69 6e 20 75 6e 6c 69 6b 65 6c 79 28 29  lt-in unlikely()
e770: 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65   function */.#de
e780: 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43  fine SQLITE_FUNC
e790: 5f 43 4f 4e 53 54 41 4e 54 20 30 78 30 38 30 30  _CONSTANT 0x0800
e7a0: 20 2f 2a 20 43 6f 6e 73 74 61 6e 74 20 69 6e 70   /* Constant inp
e7b0: 75 74 73 20 67 69 76 65 20 61 20 63 6f 6e 73 74  uts give a const
e7c0: 61 6e 74 20 6f 75 74 70 75 74 20 2a 2f 0a 23 64  ant output */.#d
e7d0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e  efine SQLITE_FUN
e7e0: 43 5f 4d 49 4e 4d 41 58 20 20 20 30 78 31 30 30  C_MINMAX   0x100
e7f0: 30 20 2f 2a 20 54 72 75 65 20 66 6f 72 20 6d 69  0 /* True for mi
e800: 6e 28 29 20 61 6e 64 20 6d 61 78 28 29 20 61 67  n() and max() ag
e810: 67 72 65 67 61 74 65 73 20 2a 2f 0a 23 64 65 66  gregates */.#def
e820: 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f  ine SQLITE_FUNC_
e830: 53 4c 4f 43 48 4e 47 20 20 30 78 32 30 30 30 20  SLOCHNG  0x2000 
e840: 2f 2a 20 22 53 6c 6f 77 20 43 68 61 6e 67 65 22  /* "Slow Change"
e850: 2e 20 56 61 6c 75 65 20 63 6f 6e 73 74 61 6e 74  . Value constant
e860: 20 64 75 72 69 6e 67 20 61 0a 20 20 20 20 20 20   during a.      
e870: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e880: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a                **
e890: 20 73 69 6e 67 6c 65 20 71 75 65 72 79 20 2d 20   single query - 
e8a0: 6d 69 67 68 74 20 63 68 61 6e 67 65 20 6f 76 65  might change ove
e8b0: 72 20 74 69 6d 65 20 2a 2f 0a 0a 2f 2a 0a 2a 2a  r time */../*.**
e8c0: 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 74   The following t
e8d0: 68 72 65 65 20 6d 61 63 72 6f 73 2c 20 46 55 4e  hree macros, FUN
e8e0: 43 54 49 4f 4e 28 29 2c 20 4c 49 4b 45 46 55 4e  CTION(), LIKEFUN
e8f0: 43 28 29 20 61 6e 64 20 41 47 47 52 45 47 41 54  C() and AGGREGAT
e900: 45 28 29 20 61 72 65 0a 2a 2a 20 75 73 65 64 20  E() are.** used 
e910: 74 6f 20 63 72 65 61 74 65 20 74 68 65 20 69 6e  to create the in
e920: 69 74 69 61 6c 69 7a 65 72 73 20 66 6f 72 20 74  itializers for t
e930: 68 65 20 46 75 6e 63 44 65 66 20 73 74 72 75 63  he FuncDef struc
e940: 74 75 72 65 73 2e 0a 2a 2a 0a 2a 2a 20 20 20 46  tures..**.**   F
e950: 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e  UNCTION(zName, n
e960: 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20  Arg, iArg, bNC, 
e970: 78 46 75 6e 63 29 0a 2a 2a 20 20 20 20 20 55 73  xFunc).**     Us
e980: 65 64 20 74 6f 20 63 72 65 61 74 65 20 61 20 73  ed to create a s
e990: 63 61 6c 61 72 20 66 75 6e 63 74 69 6f 6e 20 64  calar function d
e9a0: 65 66 69 6e 69 74 69 6f 6e 20 6f 66 20 61 20 66  efinition of a f
e9b0: 75 6e 63 74 69 6f 6e 20 7a 4e 61 6d 65 0a 2a 2a  unction zName.**
e9c0: 20 20 20 20 20 69 6d 70 6c 65 6d 65 6e 74 65 64       implemented
e9d0: 20 62 79 20 43 20 66 75 6e 63 74 69 6f 6e 20 78   by C function x
e9e0: 46 75 6e 63 20 74 68 61 74 20 61 63 63 65 70 74  Func that accept
e9f0: 73 20 6e 41 72 67 20 61 72 67 75 6d 65 6e 74 73  s nArg arguments
ea00: 2e 20 54 68 65 0a 2a 2a 20 20 20 20 20 76 61 6c  . The.**     val
ea10: 75 65 20 70 61 73 73 65 64 20 61 73 20 69 41 72  ue passed as iAr
ea20: 67 20 69 73 20 63 61 73 74 20 74 6f 20 61 20 28  g is cast to a (
ea30: 76 6f 69 64 2a 29 20 61 6e 64 20 6d 61 64 65 20  void*) and made 
ea40: 61 76 61 69 6c 61 62 6c 65 0a 2a 2a 20 20 20 20  available.**    
ea50: 20 61 73 20 74 68 65 20 75 73 65 72 2d 64 61 74   as the user-dat
ea60: 61 20 28 73 71 6c 69 74 65 33 5f 75 73 65 72 5f  a (sqlite3_user_
ea70: 64 61 74 61 28 29 29 20 66 6f 72 20 74 68 65 20  data()) for the 
ea80: 66 75 6e 63 74 69 6f 6e 2e 20 49 66 0a 2a 2a 20  function. If.** 
ea90: 20 20 20 20 61 72 67 75 6d 65 6e 74 20 62 4e 43      argument bNC
eaa0: 20 69 73 20 74 72 75 65 2c 20 74 68 65 6e 20 74   is true, then t
eab0: 68 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e  he SQLITE_FUNC_N
eac0: 45 45 44 43 4f 4c 4c 20 66 6c 61 67 20 69 73 20  EEDCOLL flag is 
ead0: 73 65 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 56 46 55  set..**.**   VFU
eae0: 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41  NCTION(zName, nA
eaf0: 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78  rg, iArg, bNC, x
eb00: 46 75 6e 63 29 0a 2a 2a 20 20 20 20 20 4c 69 6b  Func).**     Lik
eb10: 65 20 46 55 4e 43 54 49 4f 4e 20 65 78 63 65 70  e FUNCTION excep
eb20: 74 20 69 74 20 6f 6d 69 74 73 20 74 68 65 20 53  t it omits the S
eb30: 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54  QLITE_FUNC_CONST
eb40: 41 4e 54 20 66 6c 61 67 2e 0a 2a 2a 0a 2a 2a 20  ANT flag..**.** 
eb50: 20 20 44 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d    DFUNCTION(zNam
eb60: 65 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c 20 62  e, nArg, iArg, b
eb70: 4e 43 2c 20 78 46 75 6e 63 29 0a 2a 2a 20 20 20  NC, xFunc).**   
eb80: 20 20 4c 69 6b 65 20 46 55 4e 43 54 49 4f 4e 20    Like FUNCTION 
eb90: 65 78 63 65 70 74 20 69 74 20 6f 6d 69 74 73 20  except it omits 
eba0: 74 68 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f  the SQLITE_FUNC_
ebb0: 43 4f 4e 53 54 41 4e 54 20 66 6c 61 67 20 61 6e  CONSTANT flag an
ebc0: 64 0a 2a 2a 20 20 20 20 20 61 64 64 73 20 74 68  d.**     adds th
ebd0: 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 53 4c  e SQLITE_FUNC_SL
ebe0: 4f 43 48 4e 47 20 66 6c 61 67 2e 20 20 55 73 65  OCHNG flag.  Use
ebf0: 64 20 66 6f 72 20 64 61 74 65 20 26 20 74 69 6d  d for date & tim
ec00: 65 20 66 75 6e 63 74 69 6f 6e 73 0a 2a 2a 20 20  e functions.**  
ec10: 20 20 20 61 6e 64 20 66 75 6e 63 74 69 6f 6e 73     and functions
ec20: 20 6c 69 6b 65 20 73 71 6c 69 74 65 5f 76 65 72   like sqlite_ver
ec30: 73 69 6f 6e 28 29 20 74 68 61 74 20 63 61 6e 20  sion() that can 
ec40: 63 68 61 6e 67 65 2c 20 62 75 74 20 6e 6f 74 20  change, but not 
ec50: 64 75 72 69 6e 67 0a 2a 2a 20 20 20 20 20 61 20  during.**     a 
ec60: 73 69 6e 67 6c 65 20 71 75 65 72 79 2e 0a 2a 2a  single query..**
ec70: 0a 2a 2a 20 20 20 41 47 47 52 45 47 41 54 45 28  .**   AGGREGATE(
ec80: 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72  zName, nArg, iAr
ec90: 67 2c 20 62 4e 43 2c 20 78 53 74 65 70 2c 20 78  g, bNC, xStep, x
eca0: 46 69 6e 61 6c 29 0a 2a 2a 20 20 20 20 20 55 73  Final).**     Us
ecb0: 65 64 20 74 6f 20 63 72 65 61 74 65 20 61 6e 20  ed to create an 
ecc0: 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69  aggregate functi
ecd0: 6f 6e 20 64 65 66 69 6e 69 74 69 6f 6e 20 69 6d  on definition im
ece0: 70 6c 65 6d 65 6e 74 65 64 20 62 79 0a 2a 2a 20  plemented by.** 
ecf0: 20 20 20 20 74 68 65 20 43 20 66 75 6e 63 74 69      the C functi
ed00: 6f 6e 73 20 78 53 74 65 70 20 61 6e 64 20 78 46  ons xStep and xF
ed10: 69 6e 61 6c 2e 20 54 68 65 20 66 69 72 73 74 20  inal. The first 
ed20: 66 6f 75 72 20 70 61 72 61 6d 65 74 65 72 73 0a  four parameters.
ed30: 2a 2a 20 20 20 20 20 61 72 65 20 69 6e 74 65 72  **     are inter
ed40: 70 72 65 74 65 64 20 69 6e 20 74 68 65 20 73 61  preted in the sa
ed50: 6d 65 20 77 61 79 20 61 73 20 74 68 65 20 66 69  me way as the fi
ed60: 72 73 74 20 34 20 70 61 72 61 6d 65 74 65 72 73  rst 4 parameters
ed70: 20 74 6f 0a 2a 2a 20 20 20 20 20 46 55 4e 43 54   to.**     FUNCT
ed80: 49 4f 4e 28 29 2e 0a 2a 2a 0a 2a 2a 20 20 20 4c  ION()..**.**   L
ed90: 49 4b 45 46 55 4e 43 28 7a 4e 61 6d 65 2c 20 6e  IKEFUNC(zName, n
eda0: 41 72 67 2c 20 70 41 72 67 2c 20 66 6c 61 67 73  Arg, pArg, flags
edb0: 29 0a 2a 2a 20 20 20 20 20 55 73 65 64 20 74 6f  ).**     Used to
edc0: 20 63 72 65 61 74 65 20 61 20 73 63 61 6c 61 72   create a scalar
edd0: 20 66 75 6e 63 74 69 6f 6e 20 64 65 66 69 6e 69   function defini
ede0: 74 69 6f 6e 20 6f 66 20 61 20 66 75 6e 63 74 69  tion of a functi
edf0: 6f 6e 20 7a 4e 61 6d 65 0a 2a 2a 20 20 20 20 20  on zName.**     
ee00: 74 68 61 74 20 61 63 63 65 70 74 73 20 6e 41 72  that accepts nAr
ee10: 67 20 61 72 67 75 6d 65 6e 74 73 20 61 6e 64 20  g arguments and 
ee20: 69 73 20 69 6d 70 6c 65 6d 65 6e 74 65 64 20 62  is implemented b
ee30: 79 20 61 20 63 61 6c 6c 20 74 6f 20 43 0a 2a 2a  y a call to C.**
ee40: 20 20 20 20 20 66 75 6e 63 74 69 6f 6e 20 6c 69       function li
ee50: 6b 65 46 75 6e 63 2e 20 41 72 67 75 6d 65 6e 74  keFunc. Argument
ee60: 20 70 41 72 67 20 69 73 20 63 61 73 74 20 74 6f   pArg is cast to
ee70: 20 61 20 28 76 6f 69 64 20 2a 29 20 61 6e 64 20   a (void *) and 
ee80: 6d 61 64 65 0a 2a 2a 20 20 20 20 20 61 76 61 69  made.**     avai
ee90: 6c 61 62 6c 65 20 61 73 20 74 68 65 20 66 75 6e  lable as the fun
eea0: 63 74 69 6f 6e 20 75 73 65 72 2d 64 61 74 61 20  ction user-data 
eeb0: 28 73 71 6c 69 74 65 33 5f 75 73 65 72 5f 64 61  (sqlite3_user_da
eec0: 74 61 28 29 29 2e 20 54 68 65 0a 2a 2a 20 20 20  ta()). The.**   
eed0: 20 20 46 75 6e 63 44 65 66 2e 66 6c 61 67 73 20    FuncDef.flags 
eee0: 76 61 72 69 61 62 6c 65 20 69 73 20 73 65 74 20  variable is set 
eef0: 74 6f 20 74 68 65 20 76 61 6c 75 65 20 70 61 73  to the value pas
ef00: 73 65 64 20 61 73 20 74 68 65 20 66 6c 61 67 73  sed as the flags
ef10: 0a 2a 2a 20 20 20 20 20 70 61 72 61 6d 65 74 65  .**     paramete
ef20: 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 46 55  r..*/.#define FU
ef30: 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41  NCTION(zName, nA
ef40: 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78  rg, iArg, bNC, x
ef50: 46 75 6e 63 29 20 5c 0a 20 20 7b 6e 41 72 67 2c  Func) \.  {nArg,
ef60: 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e   SQLITE_FUNC_CON
ef70: 53 54 41 4e 54 7c 53 51 4c 49 54 45 5f 55 54 46  STANT|SQLITE_UTF
ef80: 38 7c 28 62 4e 43 2a 53 51 4c 49 54 45 5f 46 55  8|(bNC*SQLITE_FU
ef90: 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 2c 20 5c 0a  NC_NEEDCOLL), \.
efa0: 20 20 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f     SQLITE_INT_TO
efb0: 5f 50 54 52 28 69 41 72 67 29 2c 20 30 2c 20 78  _PTR(iArg), 0, x
efc0: 46 75 6e 63 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c  Func, 0, #zName,
efd0: 20 7b 30 7d 20 7d 0a 23 64 65 66 69 6e 65 20 56   {0} }.#define V
efe0: 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20  FUNCTION(zName, 
eff0: 6e 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c  nArg, iArg, bNC,
f000: 20 78 46 75 6e 63 29 20 5c 0a 20 20 7b 6e 41 72   xFunc) \.  {nAr
f010: 67 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 7c 28  g, SQLITE_UTF8|(
f020: 62 4e 43 2a 53 51 4c 49 54 45 5f 46 55 4e 43 5f  bNC*SQLITE_FUNC_
f030: 4e 45 45 44 43 4f 4c 4c 29 2c 20 5c 0a 20 20 20  NEEDCOLL), \.   
f040: 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54  SQLITE_INT_TO_PT
f050: 52 28 69 41 72 67 29 2c 20 30 2c 20 78 46 75 6e  R(iArg), 0, xFun
f060: 63 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c 20 7b 30  c, 0, #zName, {0
f070: 7d 20 7d 0a 23 64 65 66 69 6e 65 20 44 46 55 4e  } }.#define DFUN
f080: 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72  CTION(zName, nAr
f090: 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78 46  g, iArg, bNC, xF
f0a0: 75 6e 63 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20  unc) \.  {nArg, 
f0b0: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 53 4c 4f 43  SQLITE_FUNC_SLOC
f0c0: 48 4e 47 7c 53 51 4c 49 54 45 5f 55 54 46 38 7c  HNG|SQLITE_UTF8|
f0d0: 28 62 4e 43 2a 53 51 4c 49 54 45 5f 46 55 4e 43  (bNC*SQLITE_FUNC
f0e0: 5f 4e 45 45 44 43 4f 4c 4c 29 2c 20 5c 0a 20 20  _NEEDCOLL), \.  
f0f0: 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50   SQLITE_INT_TO_P
f100: 54 52 28 69 41 72 67 29 2c 20 30 2c 20 78 46 75  TR(iArg), 0, xFu
f110: 6e 63 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c 20 7b  nc, 0, #zName, {
f120: 30 7d 20 7d 0a 23 64 65 66 69 6e 65 20 46 55 4e  0} }.#define FUN
f130: 43 54 49 4f 4e 32 28 7a 4e 61 6d 65 2c 20 6e 41  CTION2(zName, nA
f140: 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78  rg, iArg, bNC, x
f150: 46 75 6e 63 2c 20 65 78 74 72 61 46 6c 61 67 73  Func, extraFlags
f160: 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 53 51 4c 49  ) \.  {nArg,SQLI
f170: 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54  TE_FUNC_CONSTANT
f180: 7c 53 51 4c 49 54 45 5f 55 54 46 38 7c 28 62 4e  |SQLITE_UTF8|(bN
f190: 43 2a 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45  C*SQLITE_FUNC_NE
f1a0: 45 44 43 4f 4c 4c 29 7c 65 78 74 72 61 46 6c 61  EDCOLL)|extraFla
f1b0: 67 73 2c 5c 0a 20 20 20 53 51 4c 49 54 45 5f 49  gs,\.   SQLITE_I
f1c0: 4e 54 5f 54 4f 5f 50 54 52 28 69 41 72 67 29 2c  NT_TO_PTR(iArg),
f1d0: 20 30 2c 20 78 46 75 6e 63 2c 20 30 2c 20 23 7a   0, xFunc, 0, #z
f1e0: 4e 61 6d 65 2c 20 7b 30 7d 20 7d 0a 23 64 65 66  Name, {0} }.#def
f1f0: 69 6e 65 20 53 54 52 5f 46 55 4e 43 54 49 4f 4e  ine STR_FUNCTION
f200: 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 70 41  (zName, nArg, pA
f210: 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29 20  rg, bNC, xFunc) 
f220: 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54  \.  {nArg, SQLIT
f230: 45 5f 46 55 4e 43 5f 53 4c 4f 43 48 4e 47 7c 53  E_FUNC_SLOCHNG|S
f240: 51 4c 49 54 45 5f 55 54 46 38 7c 28 62 4e 43 2a  QLITE_UTF8|(bNC*
f250: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44  SQLITE_FUNC_NEED
f260: 43 4f 4c 4c 29 2c 20 5c 0a 20 20 20 70 41 72 67  COLL), \.   pArg
f270: 2c 20 30 2c 20 78 46 75 6e 63 2c 20 30 2c 20 23  , 0, xFunc, 0, #
f280: 7a 4e 61 6d 65 2c 20 7d 0a 23 64 65 66 69 6e 65  zName, }.#define
f290: 20 4c 49 4b 45 46 55 4e 43 28 7a 4e 61 6d 65 2c   LIKEFUNC(zName,
f2a0: 20 6e 41 72 67 2c 20 61 72 67 2c 20 66 6c 61 67   nArg, arg, flag
f2b0: 73 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51  s) \.  {nArg, SQ
f2c0: 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41  LITE_FUNC_CONSTA
f2d0: 4e 54 7c 53 51 4c 49 54 45 5f 55 54 46 38 7c 66  NT|SQLITE_UTF8|f
f2e0: 6c 61 67 73 2c 20 5c 0a 20 20 20 28 76 6f 69 64  lags, \.   (void
f2f0: 20 2a 29 61 72 67 2c 20 30 2c 20 6c 69 6b 65 46   *)arg, 0, likeF
f300: 75 6e 63 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c 20  unc, 0, #zName, 
f310: 7b 30 7d 20 7d 0a 23 64 65 66 69 6e 65 20 41 47  {0} }.#define AG
f320: 47 52 45 47 41 54 45 28 7a 4e 61 6d 65 2c 20 6e  GREGATE(zName, n
f330: 41 72 67 2c 20 61 72 67 2c 20 6e 63 2c 20 78 53  Arg, arg, nc, xS
f340: 74 65 70 2c 20 78 46 69 6e 61 6c 29 20 5c 0a 20  tep, xFinal) \. 
f350: 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f 55   {nArg, SQLITE_U
f360: 54 46 38 7c 28 6e 63 2a 53 51 4c 49 54 45 5f 46  TF8|(nc*SQLITE_F
f370: 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 2c 20 5c  UNC_NEEDCOLL), \
f380: 0a 20 20 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54  .   SQLITE_INT_T
f390: 4f 5f 50 54 52 28 61 72 67 29 2c 20 30 2c 20 78  O_PTR(arg), 0, x
f3a0: 53 74 65 70 2c 78 46 69 6e 61 6c 2c 23 7a 4e 61  Step,xFinal,#zNa
f3b0: 6d 65 2c 20 7b 30 7d 7d 0a 23 64 65 66 69 6e 65  me, {0}}.#define
f3c0: 20 41 47 47 52 45 47 41 54 45 32 28 7a 4e 61 6d   AGGREGATE2(zNam
f3d0: 65 2c 20 6e 41 72 67 2c 20 61 72 67 2c 20 6e 63  e, nArg, arg, nc
f3e0: 2c 20 78 53 74 65 70 2c 20 78 46 69 6e 61 6c 2c  , xStep, xFinal,
f3f0: 20 65 78 74 72 61 46 6c 61 67 73 29 20 5c 0a 20   extraFlags) \. 
f400: 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f 55   {nArg, SQLITE_U
f410: 54 46 38 7c 28 6e 63 2a 53 51 4c 49 54 45 5f 46  TF8|(nc*SQLITE_F
f420: 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 7c 65 78  UNC_NEEDCOLL)|ex
f430: 74 72 61 46 6c 61 67 73 2c 20 5c 0a 20 20 20 53  traFlags, \.   S
f440: 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52  QLITE_INT_TO_PTR
f450: 28 61 72 67 29 2c 20 30 2c 20 78 53 74 65 70 2c  (arg), 0, xStep,
f460: 78 46 69 6e 61 6c 2c 23 7a 4e 61 6d 65 2c 20 7b  xFinal,#zName, {
f470: 30 7d 7d 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 20 63  0}}../*.** All c
f480: 75 72 72 65 6e 74 20 73 61 76 65 70 6f 69 6e 74  urrent savepoint
f490: 73 20 61 72 65 20 73 74 6f 72 65 64 20 69 6e 20  s are stored in 
f4a0: 61 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 73 74  a linked list st
f4b0: 61 72 74 69 6e 67 20 61 74 0a 2a 2a 20 73 71 6c  arting at.** sql
f4c0: 69 74 65 33 2e 70 53 61 76 65 70 6f 69 6e 74 2e  ite3.pSavepoint.
f4d0: 20 54 68 65 20 66 69 72 73 74 20 65 6c 65 6d 65   The first eleme
f4e0: 6e 74 20 69 6e 20 74 68 65 20 6c 69 73 74 20 69  nt in the list i
f4f0: 73 20 74 68 65 20 6d 6f 73 74 20 72 65 63 65 6e  s the most recen
f500: 74 6c 79 0a 2a 2a 20 6f 70 65 6e 65 64 20 73 61  tly.** opened sa
f510: 76 65 70 6f 69 6e 74 2e 20 53 61 76 65 70 6f 69  vepoint. Savepoi
f520: 6e 74 73 20 61 72 65 20 61 64 64 65 64 20 74 6f  nts are added to
f530: 20 74 68 65 20 6c 69 73 74 20 62 79 20 74 68 65   the list by the
f540: 20 76 64 62 65 0a 2a 2a 20 4f 50 5f 53 61 76 65   vdbe.** OP_Save
f550: 70 6f 69 6e 74 20 69 6e 73 74 72 75 63 74 69 6f  point instructio
f560: 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53 61 76  n..*/.struct Sav
f570: 65 70 6f 69 6e 74 20 7b 0a 20 20 63 68 61 72 20  epoint {.  char 
f580: 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20  *zName;         
f590: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
f5a0: 2a 20 53 61 76 65 70 6f 69 6e 74 20 6e 61 6d 65  * Savepoint name
f5b0: 20 28 6e 75 6c 2d 74 65 72 6d 69 6e 61 74 65 64   (nul-terminated
f5c0: 29 20 2a 2f 0a 20 20 69 36 34 20 6e 44 65 66 65  ) */.  i64 nDefe
f5d0: 72 72 65 64 43 6f 6e 73 3b 20 20 20 20 20 20 20  rredCons;       
f5e0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
f5f0: 6d 62 65 72 20 6f 66 20 64 65 66 65 72 72 65 64  mber of deferred
f600: 20 66 6b 20 76 69 6f 6c 61 74 69 6f 6e 73 20 2a   fk violations *
f610: 2f 0a 20 20 69 36 34 20 6e 44 65 66 65 72 72 65  /.  i64 nDeferre
f620: 64 49 6d 6d 43 6f 6e 73 3b 20 20 20 20 20 20 20  dImmCons;       
f630: 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
f640: 72 20 6f 66 20 64 65 66 65 72 72 65 64 20 69 6d  r of deferred im
f650: 6d 20 66 6b 2e 20 2a 2f 0a 20 20 53 61 76 65 70  m fk. */.  Savep
f660: 6f 69 6e 74 20 2a 70 4e 65 78 74 3b 20 20 20 20  oint *pNext;    
f670: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
f680: 2a 20 50 61 72 65 6e 74 20 73 61 76 65 70 6f 69  * Parent savepoi
f690: 6e 74 20 28 69 66 20 61 6e 79 29 20 2a 2f 0a 7d  nt (if any) */.}
f6a0: 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c  ;../*.** The fol
f6b0: 6c 6f 77 69 6e 67 20 61 72 65 20 75 73 65 64 20  lowing are used 
f6c0: 61 73 20 74 68 65 20 73 65 63 6f 6e 64 20 70 61  as the second pa
f6d0: 72 61 6d 65 74 65 72 20 74 6f 20 73 71 6c 69 74  rameter to sqlit
f6e0: 65 33 53 61 76 65 70 6f 69 6e 74 28 29 2c 0a 2a  e3Savepoint(),.*
f6f0: 2a 20 61 6e 64 20 61 73 20 74 68 65 20 50 31 20  * and as the P1 
f700: 61 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20  argument to the 
f710: 4f 50 5f 53 61 76 65 70 6f 69 6e 74 20 69 6e 73  OP_Savepoint ins
f720: 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 23 64 65  truction..*/.#de
f730: 66 69 6e 65 20 53 41 56 45 50 4f 49 4e 54 5f 42  fine SAVEPOINT_B
f740: 45 47 49 4e 20 20 20 20 20 20 30 0a 23 64 65 66  EGIN      0.#def
f750: 69 6e 65 20 53 41 56 45 50 4f 49 4e 54 5f 52 45  ine SAVEPOINT_RE
f760: 4c 45 41 53 45 20 20 20 20 31 0a 23 64 65 66 69  LEASE    1.#defi
f770: 6e 65 20 53 41 56 45 50 4f 49 4e 54 5f 52 4f 4c  ne SAVEPOINT_ROL
f780: 4c 42 41 43 4b 20 20 20 32 0a 0a 0a 2f 2a 0a 2a  LBACK   2.../*.*
f790: 2a 20 45 61 63 68 20 53 51 4c 69 74 65 20 6d 6f  * Each SQLite mo
f7a0: 64 75 6c 65 20 28 76 69 72 74 75 61 6c 20 74 61  dule (virtual ta
f7b0: 62 6c 65 20 64 65 66 69 6e 69 74 69 6f 6e 29 20  ble definition) 
f7c0: 69 73 20 64 65 66 69 6e 65 64 20 62 79 20 61 6e  is defined by an
f7d0: 0a 2a 2a 20 69 6e 73 74 61 6e 63 65 20 6f 66 20  .** instance of 
f7e0: 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74  the following st
f7f0: 72 75 63 74 75 72 65 2c 20 73 74 6f 72 65 64 20  ructure, stored 
f800: 69 6e 20 74 68 65 20 73 71 6c 69 74 65 33 2e 61  in the sqlite3.a
f810: 4d 6f 64 75 6c 65 0a 2a 2a 20 68 61 73 68 20 74  Module.** hash t
f820: 61 62 6c 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  able..*/.struct 
f830: 4d 6f 64 75 6c 65 20 7b 0a 20 20 63 6f 6e 73 74  Module {.  const
f840: 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20   sqlite3_module 
f850: 2a 70 4d 6f 64 75 6c 65 3b 20 20 20 20 20 20 20  *pModule;       
f860: 2f 2a 20 43 61 6c 6c 62 61 63 6b 20 70 6f 69 6e  /* Callback poin
f870: 74 65 72 73 20 2a 2f 0a 20 20 63 6f 6e 73 74 20  ters */.  const 
f880: 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20  char *zName;    
f890: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
f8a0: 2a 20 4e 61 6d 65 20 70 61 73 73 65 64 20 74 6f  * Name passed to
f8b0: 20 63 72 65 61 74 65 5f 6d 6f 64 75 6c 65 28 29   create_module()
f8c0: 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 41 75 78   */.  void *pAux
f8d0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
f8e0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 70 41             /* pA
f8f0: 75 78 20 70 61 73 73 65 64 20 74 6f 20 63 72 65  ux passed to cre
f900: 61 74 65 5f 6d 6f 64 75 6c 65 28 29 20 2a 2f 0a  ate_module() */.
f910: 20 20 76 6f 69 64 20 28 2a 78 44 65 73 74 72 6f    void (*xDestro
f920: 79 29 28 76 6f 69 64 20 2a 29 3b 20 20 20 20 20  y)(void *);     
f930: 20 20 20 20 20 20 20 2f 2a 20 4d 6f 64 75 6c 65         /* Module
f940: 20 64 65 73 74 72 75 63 74 6f 72 20 66 75 6e 63   destructor func
f950: 74 69 6f 6e 20 2a 2f 0a 20 20 54 61 62 6c 65 20  tion */.  Table 
f960: 2a 70 45 70 6f 54 61 62 3b 20 20 20 20 20 20 20  *pEpoTab;       
f970: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
f980: 2a 20 45 70 6f 6e 79 6d 6f 75 73 20 74 61 62 6c  * Eponymous tabl
f990: 65 20 66 6f 72 20 74 68 69 73 20 6d 6f 64 75 6c  e for this modul
f9a0: 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 69  e */.};../*.** i
f9b0: 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74  nformation about
f9c0: 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 6f 66 20   each column of 
f9d0: 61 6e 20 53 51 4c 20 74 61 62 6c 65 20 69 73 20  an SQL table is 
f9e0: 68 65 6c 64 20 69 6e 20 61 6e 20 69 6e 73 74 61  held in an insta
f9f0: 6e 63 65 0a 2a 2a 20 6f 66 20 74 68 69 73 20 73  nce.** of this s
fa00: 74 72 75 63 74 75 72 65 2e 0a 2a 2f 0a 73 74 72  tructure..*/.str
fa10: 75 63 74 20 43 6f 6c 75 6d 6e 20 7b 0a 20 20 63  uct Column {.  c
fa20: 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20  har *zName;     
fa30: 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 69 73 20  /* Name of this 
fa40: 63 6f 6c 75 6d 6e 2c 20 5c 30 30 30 2c 20 74 68  column, \000, th
fa50: 65 6e 20 74 68 65 20 74 79 70 65 20 2a 2f 0a 20  en the type */. 
fa60: 20 45 78 70 72 20 2a 70 44 66 6c 74 3b 20 20 20   Expr *pDflt;   
fa70: 20 20 2f 2a 20 44 65 66 61 75 6c 74 20 76 61 6c    /* Default val
fa80: 75 65 20 6f 66 20 74 68 69 73 20 63 6f 6c 75 6d  ue of this colum
fa90: 6e 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 43 6f  n */.  char *zCo
faa0: 6c 6c 3b 20 20 20 20 20 2f 2a 20 43 6f 6c 6c 61  ll;     /* Colla
fab0: 74 69 6e 67 20 73 65 71 75 65 6e 63 65 2e 20 20  ting sequence.  
fac0: 49 66 20 4e 55 4c 4c 2c 20 75 73 65 20 74 68 65  If NULL, use the
fad0: 20 64 65 66 61 75 6c 74 20 2a 2f 0a 20 20 75 38   default */.  u8
fae0: 20 6e 6f 74 4e 75 6c 6c 3b 20 20 20 20 20 20 2f   notNull;      /
faf0: 2a 20 41 6e 20 4f 45 5f 20 63 6f 64 65 20 66 6f  * An OE_ code fo
fb00: 72 20 68 61 6e 64 6c 69 6e 67 20 61 20 4e 4f 54  r handling a NOT
fb10: 20 4e 55 4c 4c 20 63 6f 6e 73 74 72 61 69 6e 74   NULL constraint
fb20: 20 2a 2f 0a 20 20 63 68 61 72 20 61 66 66 69 6e   */.  char affin
fb30: 69 74 79 3b 20 20 20 2f 2a 20 4f 6e 65 20 6f 66  ity;   /* One of
fb40: 20 74 68 65 20 53 51 4c 49 54 45 5f 41 46 46 5f   the SQLITE_AFF_
fb50: 2e 2e 2e 20 76 61 6c 75 65 73 20 2a 2f 0a 20 20  ... values */.  
fb60: 75 38 20 73 7a 45 73 74 3b 20 20 20 20 20 20 20  u8 szEst;       
fb70: 20 2f 2a 20 45 73 74 69 6d 61 74 65 64 20 73 69   /* Estimated si
fb80: 7a 65 20 6f 66 20 76 61 6c 75 65 20 69 6e 20 74  ze of value in t
fb90: 68 69 73 20 63 6f 6c 75 6d 6e 2e 20 73 69 7a 65  his column. size
fba0: 6f 66 28 49 4e 54 29 3d 3d 31 20 2a 2f 0a 20 20  of(INT)==1 */.  
fbb0: 75 38 20 63 6f 6c 46 6c 61 67 73 3b 20 20 20 20  u8 colFlags;    
fbc0: 20 2f 2a 20 42 6f 6f 6c 65 61 6e 20 70 72 6f 70   /* Boolean prop
fbd0: 65 72 74 69 65 73 2e 20 20 53 65 65 20 43 4f 4c  erties.  See COL
fbe0: 46 4c 41 47 5f 20 64 65 66 69 6e 65 73 20 62 65  FLAG_ defines be
fbf0: 6c 6f 77 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 20 41 6c  low */.};../* Al
fc00: 6c 6f 77 65 64 20 76 61 6c 75 65 73 20 66 6f 72  lowed values for
fc10: 20 43 6f 6c 75 6d 6e 2e 63 6f 6c 46 6c 61 67 73   Column.colFlags
fc20: 3a 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 43 4f 4c  :.*/.#define COL
fc30: 46 4c 41 47 5f 50 52 49 4d 4b 45 59 20 20 30 78  FLAG_PRIMKEY  0x
fc40: 30 30 30 31 20 20 20 20 2f 2a 20 43 6f 6c 75 6d  0001    /* Colum
fc50: 6e 20 69 73 20 70 61 72 74 20 6f 66 20 74 68 65  n is part of the
fc60: 20 70 72 69 6d 61 72 79 20 6b 65 79 20 2a 2f 0a   primary key */.
fc70: 23 64 65 66 69 6e 65 20 43 4f 4c 46 4c 41 47 5f  #define COLFLAG_
fc80: 48 49 44 44 45 4e 20 20 20 30 78 30 30 30 32 20  HIDDEN   0x0002 
fc90: 20 20 20 2f 2a 20 41 20 68 69 64 64 65 6e 20 63     /* A hidden c
fca0: 6f 6c 75 6d 6e 20 69 6e 20 61 20 76 69 72 74 75  olumn in a virtu
fcb0: 61 6c 20 74 61 62 6c 65 20 2a 2f 0a 23 64 65 66  al table */.#def
fcc0: 69 6e 65 20 43 4f 4c 46 4c 41 47 5f 48 41 53 54  ine COLFLAG_HAST
fcd0: 59 50 45 20 20 30 78 30 30 30 34 20 20 20 20 2f  YPE  0x0004    /
fce0: 2a 20 54 79 70 65 20 6e 61 6d 65 20 66 6f 6c 6c  * Type name foll
fcf0: 6f 77 73 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 20  ows column name 
fd00: 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 20 22 43 6f 6c  */../*.** A "Col
fd10: 6c 61 74 69 6e 67 20 53 65 71 75 65 6e 63 65 22  lating Sequence"
fd20: 20 69 73 20 64 65 66 69 6e 65 64 20 62 79 20 61   is defined by a
fd30: 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  n instance of th
fd40: 65 20 66 6f 6c 6c 6f 77 69 6e 67 0a 2a 2a 20 73  e following.** s
fd50: 74 72 75 63 74 75 72 65 2e 20 43 6f 6e 63 65 70  tructure. Concep
fd60: 74 75 61 6c 6c 79 2c 20 61 20 63 6f 6c 6c 61 74  tually, a collat
fd70: 69 6e 67 20 73 65 71 75 65 6e 63 65 20 63 6f 6e  ing sequence con
fd80: 73 69 73 74 73 20 6f 66 20 61 20 6e 61 6d 65 20  sists of a name 
fd90: 61 6e 64 0a 2a 2a 20 61 20 63 6f 6d 70 61 72 69  and.** a compari
fda0: 73 6f 6e 20 72 6f 75 74 69 6e 65 20 74 68 61 74  son routine that
fdb0: 20 64 65 66 69 6e 65 73 20 74 68 65 20 6f 72 64   defines the ord
fdc0: 65 72 20 6f 66 20 74 68 61 74 20 73 65 71 75 65  er of that seque
fdd0: 6e 63 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 43 6f  nce..**.** If Co
fde0: 6c 6c 53 65 71 2e 78 43 6d 70 20 69 73 20 4e 55  llSeq.xCmp is NU
fdf0: 4c 4c 2c 20 69 74 20 6d 65 61 6e 73 20 74 68 61  LL, it means tha
fe00: 74 20 74 68 65 0a 2a 2a 20 63 6f 6c 6c 61 74 69  t the.** collati
fe10: 6e 67 20 73 65 71 75 65 6e 63 65 20 69 73 20 75  ng sequence is u
fe20: 6e 64 65 66 69 6e 65 64 2e 20 20 49 6e 64 69 63  ndefined.  Indic
fe30: 65 73 20 62 75 69 6c 74 20 6f 6e 20 61 6e 20 75  es built on an u
fe40: 6e 64 65 66 69 6e 65 64 0a 2a 2a 20 63 6f 6c 6c  ndefined.** coll
fe50: 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 20 6d  ating sequence m
fe60: 61 79 20 6e 6f 74 20 62 65 20 72 65 61 64 20 6f  ay not be read o
fe70: 72 20 77 72 69 74 74 65 6e 2e 0a 2a 2f 0a 73 74  r written..*/.st
fe80: 72 75 63 74 20 43 6f 6c 6c 53 65 71 20 7b 0a 20  ruct CollSeq {. 
fe90: 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20   char *zName;   
fea0: 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f         /* Name o
feb0: 66 20 74 68 65 20 63 6f 6c 6c 61 74 69 6e 67 20  f the collating 
fec0: 73 65 71 75 65 6e 63 65 2c 20 55 54 46 2d 38 20  sequence, UTF-8 
fed0: 65 6e 63 6f 64 65 64 20 2a 2f 0a 20 20 75 38 20  encoded */.  u8 
fee0: 65 6e 63 3b 20 20 20 20 20 20 20 20 20 20 20 20  enc;            
fef0: 20 20 20 2f 2a 20 54 65 78 74 20 65 6e 63 6f 64     /* Text encod
ff00: 69 6e 67 20 68 61 6e 64 6c 65 64 20 62 79 20 78  ing handled by x
ff10: 43 6d 70 28 29 20 2a 2f 0a 20 20 76 6f 69 64 20  Cmp() */.  void 
ff20: 2a 70 55 73 65 72 3b 20 20 20 20 20 20 20 20 20  *pUser;         
ff30: 20 2f 2a 20 46 69 72 73 74 20 61 72 67 75 6d 65   /* First argume
ff40: 6e 74 20 74 6f 20 78 43 6d 70 28 29 20 2a 2f 0a  nt to xCmp() */.
ff50: 20 20 69 6e 74 20 28 2a 78 43 6d 70 29 28 76 6f    int (*xCmp)(vo
ff60: 69 64 2a 2c 69 6e 74 2c 20 63 6f 6e 73 74 20 76  id*,int, const v
ff70: 6f 69 64 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74  oid*, int, const
ff80: 20 76 6f 69 64 2a 29 3b 0a 20 20 76 6f 69 64 20   void*);.  void 
ff90: 28 2a 78 44 65 6c 29 28 76 6f 69 64 2a 29 3b 20  (*xDel)(void*); 
ffa0: 20 2f 2a 20 44 65 73 74 72 75 63 74 6f 72 20 66   /* Destructor f
ffb0: 6f 72 20 70 55 73 65 72 20 2a 2f 0a 7d 3b 0a 0a  or pUser */.};..
ffc0: 2f 2a 0a 2a 2a 20 41 20 73 6f 72 74 20 6f 72 64  /*.** A sort ord
ffd0: 65 72 20 63 61 6e 20 62 65 20 65 69 74 68 65 72  er can be either
ffe0: 20 41 53 43 20 6f 72 20 44 45 53 43 2e 0a 2a 2f   ASC or DESC..*/
fff0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
10000 53 4f 5f 41 53 43 20 20 20 20 20 20 20 30 20 20  SO_ASC       0  
10010 2f 2a 20 53 6f 72 74 20 69 6e 20 61 73 63 65 6e  /* Sort in ascen
10020 64 69 6e 67 20 6f 72 64 65 72 20 2a 2f 0a 23 64  ding order */.#d
10030 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 4f 5f  efine SQLITE_SO_
10040 44 45 53 43 20 20 20 20 20 20 31 20 20 2f 2a 20  DESC      1  /* 
10050 53 6f 72 74 20 69 6e 20 61 73 63 65 6e 64 69 6e  Sort in ascendin
10060 67 20 6f 72 64 65 72 20 2a 2f 0a 23 64 65 66 69  g order */.#defi
10070 6e 65 20 53 51 4c 49 54 45 5f 53 4f 5f 55 4e 44  ne SQLITE_SO_UND
10080 45 46 49 4e 45 44 20 2d 31 20 2f 2a 20 4e 6f 20  EFINED -1 /* No 
10090 73 6f 72 74 20 6f 72 64 65 72 20 73 70 65 63 69  sort order speci
100a0 66 69 65 64 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 43  fied */../*.** C
100b0 6f 6c 75 6d 6e 20 61 66 66 69 6e 69 74 79 20 74  olumn affinity t
100c0 79 70 65 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 73  ypes..**.** Thes
100d0 65 20 75 73 65 64 20 74 6f 20 68 61 76 65 20 6d  e used to have m
100e0 6e 65 6d 6f 6e 69 63 20 6e 61 6d 65 20 6c 69 6b  nemonic name lik
100f0 65 20 27 69 27 20 66 6f 72 20 53 51 4c 49 54 45  e 'i' for SQLITE
10100 5f 41 46 46 5f 49 4e 54 45 47 45 52 20 61 6e 64  _AFF_INTEGER and
10110 0a 2a 2a 20 27 74 27 20 66 6f 72 20 53 51 4c 49  .** 't' for SQLI
10120 54 45 5f 41 46 46 5f 54 45 58 54 2e 20 20 42 75  TE_AFF_TEXT.  Bu
10130 74 20 77 65 20 63 61 6e 20 73 61 76 65 20 61 20  t we can save a 
10140 6c 69 74 74 6c 65 20 73 70 61 63 65 20 61 6e 64  little space and
10150 20 69 6d 70 72 6f 76 65 0a 2a 2a 20 74 68 65 20   improve.** the 
10160 73 70 65 65 64 20 61 20 6c 69 74 74 6c 65 20 62  speed a little b
10170 79 20 6e 75 6d 62 65 72 69 6e 67 20 74 68 65 20  y numbering the 
10180 76 61 6c 75 65 73 20 63 6f 6e 73 65 63 75 74 69  values consecuti
10190 76 65 6c 79 2e 0a 2a 2a 0a 2a 2a 20 42 75 74 20  vely..**.** But 
101a0 72 61 74 68 65 72 20 74 68 61 6e 20 73 74 61 72  rather than star
101b0 74 20 77 69 74 68 20 30 20 6f 72 20 31 2c 20 77  t with 0 or 1, w
101c0 65 20 62 65 67 69 6e 20 77 69 74 68 20 27 41 27  e begin with 'A'
101d0 2e 20 20 54 68 61 74 20 77 61 79 2c 0a 2a 2a 20  .  That way,.** 
101e0 77 68 65 6e 20 6d 75 6c 74 69 70 6c 65 20 61 66  when multiple af
101f0 66 69 6e 69 74 79 20 74 79 70 65 73 20 61 72 65  finity types are
10200 20 63 6f 6e 63 61 74 65 6e 61 74 65 64 20 69 6e   concatenated in
10210 74 6f 20 61 20 73 74 72 69 6e 67 20 61 6e 64 0a  to a string and.
10220 2a 2a 20 75 73 65 64 20 61 73 20 74 68 65 20 50  ** used as the P
10230 34 20 6f 70 65 72 61 6e 64 2c 20 74 68 65 79 20  4 operand, they 
10240 77 69 6c 6c 20 62 65 20 6d 6f 72 65 20 72 65 61  will be more rea
10250 64 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74  dable..**.** Not
10260 65 20 61 6c 73 6f 20 74 68 61 74 20 74 68 65 20  e also that the 
10270 6e 75 6d 65 72 69 63 20 74 79 70 65 73 20 61 72  numeric types ar
10280 65 20 67 72 6f 75 70 65 64 20 74 6f 67 65 74 68  e grouped togeth
10290 65 72 20 73 6f 20 74 68 61 74 20 74 65 73 74 69  er so that testi
102a0 6e 67 0a 2a 2a 20 66 6f 72 20 61 20 6e 75 6d 65  ng.** for a nume
102b0 72 69 63 20 74 79 70 65 20 69 73 20 61 20 73 69  ric type is a si
102c0 6e 67 6c 65 20 63 6f 6d 70 61 72 69 73 6f 6e 2e  ngle comparison.
102d0 20 20 41 6e 64 20 74 68 65 20 42 4c 4f 42 20 74    And the BLOB t
102e0 79 70 65 20 69 73 20 66 69 72 73 74 2e 0a 2a 2f  ype is first..*/
102f0 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
10300 41 46 46 5f 42 4c 4f 42 20 20 20 20 20 27 41 27  AFF_BLOB     'A'
10310 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
10320 41 46 46 5f 54 45 58 54 20 20 20 20 20 27 42 27  AFF_TEXT     'B'
10330 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
10340 41 46 46 5f 4e 55 4d 45 52 49 43 20 20 27 43 27  AFF_NUMERIC  'C'
10350 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
10360 41 46 46 5f 49 4e 54 45 47 45 52 20 20 27 44 27  AFF_INTEGER  'D'
10370 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
10380 41 46 46 5f 52 45 41 4c 20 20 20 20 20 27 45 27  AFF_REAL     'E'
10390 0a 0a 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65  ..#define sqlite
103a0 33 49 73 4e 75 6d 65 72 69 63 41 66 66 69 6e 69  3IsNumericAffini
103b0 74 79 28 58 29 20 20 28 28 58 29 3e 3d 53 51 4c  ty(X)  ((X)>=SQL
103c0 49 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49 43 29  ITE_AFF_NUMERIC)
103d0 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 53 51 4c 49  ../*.** The SQLI
103e0 54 45 5f 41 46 46 5f 4d 41 53 4b 20 76 61 6c 75  TE_AFF_MASK valu
103f0 65 73 20 6d 61 73 6b 73 20 6f 66 66 20 74 68 65  es masks off the
10400 20 73 69 67 6e 69 66 69 63 61 6e 74 20 62 69 74   significant bit
10410 73 20 6f 66 20 61 6e 0a 2a 2a 20 61 66 66 69 6e  s of an.** affin
10420 69 74 79 20 76 61 6c 75 65 2e 0a 2a 2f 0a 23 64  ity value..*/.#d
10430 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 46 46  efine SQLITE_AFF
10440 5f 4d 41 53 4b 20 20 20 20 20 30 78 34 37 0a 0a  _MASK     0x47..
10450 2f 2a 0a 2a 2a 20 41 64 64 69 74 69 6f 6e 61 6c  /*.** Additional
10460 20 62 69 74 20 76 61 6c 75 65 73 20 74 68 61 74   bit values that
10470 20 63 61 6e 20 62 65 20 4f 52 65 64 20 77 69 74   can be ORed wit
10480 68 20 61 6e 20 61 66 66 69 6e 69 74 79 20 77 69  h an affinity wi
10490 74 68 6f 75 74 0a 2a 2a 20 63 68 61 6e 67 69 6e  thout.** changin
104a0 67 20 74 68 65 20 61 66 66 69 6e 69 74 79 2e 0a  g the affinity..
104b0 2a 2a 0a 2a 2a 20 54 68 65 20 53 51 4c 49 54 45  **.** The SQLITE
104c0 5f 4e 4f 54 4e 55 4c 4c 20 66 6c 61 67 20 69 73  _NOTNULL flag is
104d0 20 61 20 63 6f 6d 62 69 6e 61 74 69 6f 6e 20 6f   a combination o
104e0 66 20 4e 55 4c 4c 45 51 20 61 6e 64 20 4a 55 4d  f NULLEQ and JUM
104f0 50 49 46 4e 55 4c 4c 2e 0a 2a 2a 20 49 74 20 63  PIFNULL..** It c
10500 61 75 73 65 73 20 61 6e 20 61 73 73 65 72 74 28  auses an assert(
10510 29 20 74 6f 20 66 69 72 65 20 69 66 20 65 69 74  ) to fire if eit
10520 68 65 72 20 6f 70 65 72 61 6e 64 20 74 6f 20 61  her operand to a
10530 20 63 6f 6d 70 61 72 69 73 6f 6e 0a 2a 2a 20 6f   comparison.** o
10540 70 65 72 61 74 6f 72 20 69 73 20 4e 55 4c 4c 2e  perator is NULL.
10550 20 20 49 74 20 69 73 20 61 64 64 65 64 20 74 6f    It is added to
10560 20 63 65 72 74 61 69 6e 20 63 6f 6d 70 61 72 69   certain compari
10570 73 6f 6e 20 6f 70 65 72 61 74 6f 72 73 20 74 6f  son operators to
10580 0a 2a 2a 20 70 72 6f 76 65 20 74 68 61 74 20 74  .** prove that t
10590 68 65 20 6f 70 65 72 61 6e 64 73 20 61 72 65 20  he operands are 
105a0 61 6c 77 61 79 73 20 4e 4f 54 20 4e 55 4c 4c 2e  always NOT NULL.
105b0 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  .*/.#define SQLI
105c0 54 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c 20 20 20  TE_JUMPIFNULL   
105d0 30 78 31 30 20 20 2f 2a 20 6a 75 6d 70 73 20 69  0x10  /* jumps i
105e0 66 20 65 69 74 68 65 72 20 6f 70 65 72 61 6e 64  f either operand
105f0 20 69 73 20 4e 55 4c 4c 20 2a 2f 0a 23 64 65 66   is NULL */.#def
10600 69 6e 65 20 53 51 4c 49 54 45 5f 53 54 4f 52 45  ine SQLITE_STORE
10610 50 32 20 20 20 20 20 20 30 78 32 30 20 20 2f 2a  P2      0x20  /*
10620 20 53 74 6f 72 65 20 72 65 73 75 6c 74 20 69 6e   Store result in
10630 20 72 65 67 5b 50 32 5d 20 72 61 74 68 65 72 20   reg[P2] rather 
10640 74 68 61 6e 20 6a 75 6d 70 20 2a 2f 0a 23 64 65  than jump */.#de
10650 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e 55 4c 4c  fine SQLITE_NULL
10660 45 51 20 20 20 20 20 20 20 30 78 38 30 20 20 2f  EQ       0x80  /
10670 2a 20 4e 55 4c 4c 3d 4e 55 4c 4c 20 2a 2f 0a 23  * NULL=NULL */.#
10680 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e 4f  define SQLITE_NO
10690 54 4e 55 4c 4c 20 20 20 20 20 20 30 78 39 30 20  TNULL      0x90 
106a0 20 2f 2a 20 41 73 73 65 72 74 20 74 68 61 74 20   /* Assert that 
106b0 6f 70 65 72 61 6e 64 73 20 61 72 65 20 6e 65 76  operands are nev
106c0 65 72 20 4e 55 4c 4c 20 2a 2f 0a 0a 2f 2a 0a 2a  er NULL */../*.*
106d0 2a 20 41 6e 20 6f 62 6a 65 63 74 20 6f 66 20 74  * An object of t
106e0 68 69 73 20 74 79 70 65 20 69 73 20 63 72 65 61  his type is crea
106f0 74 65 64 20 66 6f 72 20 65 61 63 68 20 76 69 72  ted for each vir
10700 74 75 61 6c 20 74 61 62 6c 65 20 70 72 65 73 65  tual table prese
10710 6e 74 20 69 6e 0a 2a 2a 20 74 68 65 20 64 61 74  nt in.** the dat
10720 61 62 61 73 65 20 73 63 68 65 6d 61 2e 0a 2a 2a  abase schema..**
10730 0a 2a 2a 20 49 66 20 74 68 65 20 64 61 74 61 62  .** If the datab
10740 61 73 65 20 73 63 68 65 6d 61 20 69 73 20 73 68  ase schema is sh
10750 61 72 65 64 2c 20 74 68 65 6e 20 74 68 65 72 65  ared, then there
10760 20 69 73 20 6f 6e 65 20 69 6e 73 74 61 6e 63 65   is one instance
10770 20 6f 66 20 74 68 69 73 0a 2a 2a 20 73 74 72 75   of this.** stru
10780 63 74 75 72 65 20 66 6f 72 20 65 61 63 68 20 64  cture for each d
10790 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
107a0 6f 6e 20 28 73 71 6c 69 74 65 33 2a 29 20 74 68  on (sqlite3*) th
107b0 61 74 20 75 73 65 73 20 74 68 65 20 73 68 61 72  at uses the shar
107c0 65 64 0a 2a 2a 20 73 63 68 65 6d 61 2e 20 54 68  ed.** schema. Th
107d0 69 73 20 69 73 20 62 65 63 61 75 73 65 20 65 61  is is because ea
107e0 63 68 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e  ch database conn
107f0 65 63 74 69 6f 6e 20 72 65 71 75 69 72 65 73 20  ection requires 
10800 69 74 73 20 6f 77 6e 20 75 6e 69 71 75 65 0a 2a  its own unique.*
10810 2a 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  * instance of th
10820 65 20 73 71 6c 69 74 65 33 5f 76 74 61 62 2a 20  e sqlite3_vtab* 
10830 68 61 6e 64 6c 65 20 75 73 65 64 20 74 6f 20 61  handle used to a
10840 63 63 65 73 73 20 74 68 65 20 76 69 72 74 75 61  ccess the virtua
10850 6c 20 74 61 62 6c 65 0a 2a 2a 20 69 6d 70 6c 65  l table.** imple
10860 6d 65 6e 74 61 74 69 6f 6e 2e 20 73 71 6c 69 74  mentation. sqlit
10870 65 33 5f 76 74 61 62 2a 20 68 61 6e 64 6c 65 73  e3_vtab* handles
10880 20 63 61 6e 20 6e 6f 74 20 62 65 20 73 68 61 72   can not be shar
10890 65 64 20 62 65 74 77 65 65 6e 0a 2a 2a 20 64 61  ed between.** da
108a0 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f  tabase connectio
108b0 6e 73 2c 20 65 76 65 6e 20 77 68 65 6e 20 74 68  ns, even when th
108c0 65 20 72 65 73 74 20 6f 66 20 74 68 65 20 69 6e  e rest of the in
108d0 2d 6d 65 6d 6f 72 79 20 64 61 74 61 62 61 73 65  -memory database
108e0 0a 2a 2a 20 73 63 68 65 6d 61 20 69 73 20 73 68  .** schema is sh
108f0 61 72 65 64 2c 20 61 73 20 74 68 65 20 69 6d 70  ared, as the imp
10900 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 74 65  lementation ofte
10910 6e 20 73 74 6f 72 65 73 20 74 68 65 20 64 61 74  n stores the dat
10920 61 62 61 73 65 0a 2a 2a 20 63 6f 6e 6e 65 63 74  abase.** connect
10930 69 6f 6e 20 68 61 6e 64 6c 65 20 70 61 73 73 65  ion handle passe
10940 64 20 74 6f 20 69 74 20 76 69 61 20 74 68 65 20  d to it via the 
10950 78 43 6f 6e 6e 65 63 74 28 29 20 6f 72 20 78 43  xConnect() or xC
10960 72 65 61 74 65 28 29 20 6d 65 74 68 6f 64 0a 2a  reate() method.*
10970 2a 20 64 75 72 69 6e 67 20 69 6e 69 74 69 61 6c  * during initial
10980 69 7a 61 74 69 6f 6e 20 69 6e 74 65 72 6e 61 6c  ization internal
10990 6c 79 2e 20 54 68 69 73 20 64 61 74 61 62 61 73  ly. This databas
109a0 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e  e connection han
109b0 64 6c 65 20 6d 61 79 0a 2a 2a 20 74 68 65 6e 20  dle may.** then 
109c0 62 65 20 75 73 65 64 20 62 79 20 74 68 65 20 76  be used by the v
109d0 69 72 74 75 61 6c 20 74 61 62 6c 65 20 69 6d 70  irtual table imp
109e0 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 74 6f 20 61  lementation to a
109f0 63 63 65 73 73 20 72 65 61 6c 20 74 61 62 6c 65  ccess real table
10a00 73 0a 2a 2a 20 77 69 74 68 69 6e 20 74 68 65 20  s.** within the 
10a10 64 61 74 61 62 61 73 65 2e 20 53 6f 20 74 68 61  database. So tha
10a20 74 20 74 68 65 79 20 61 70 70 65 61 72 20 61 73  t they appear as
10a30 20 70 61 72 74 20 6f 66 20 74 68 65 20 63 61 6c   part of the cal
10a40 6c 65 72 73 0a 2a 2a 20 74 72 61 6e 73 61 63 74  lers.** transact
10a50 69 6f 6e 2c 20 74 68 65 73 65 20 61 63 63 65 73  ion, these acces
10a60 73 65 73 20 6e 65 65 64 20 74 6f 20 62 65 20 6d  ses need to be m
10a70 61 64 65 20 76 69 61 20 74 68 65 20 73 61 6d 65  ade via the same
10a80 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 63 6f 6e   database.** con
10a90 6e 65 63 74 69 6f 6e 20 61 73 20 74 68 61 74 20  nection as that 
10aa0 75 73 65 64 20 74 6f 20 65 78 65 63 75 74 65 20  used to execute 
10ab0 53 51 4c 20 6f 70 65 72 61 74 69 6f 6e 73 20 6f  SQL operations o
10ac0 6e 20 74 68 65 20 76 69 72 74 75 61 6c 20 74 61  n the virtual ta
10ad0 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 41 6c 6c 20 56  ble..**.** All V
10ae0 54 61 62 6c 65 20 6f 62 6a 65 63 74 73 20 74 68  Table objects th
10af0 61 74 20 63 6f 72 72 65 73 70 6f 6e 64 20 74 6f  at correspond to
10b00 20 61 20 73 69 6e 67 6c 65 20 74 61 62 6c 65 20   a single table 
10b10 69 6e 20 61 20 73 68 61 72 65 64 0a 2a 2a 20 64  in a shared.** d
10b20 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 20 61  atabase schema a
10b30 72 65 20 69 6e 69 74 69 61 6c 6c 79 20 73 74 6f  re initially sto
10b40 72 65 64 20 69 6e 20 61 20 6c 69 6e 6b 65 64 2d  red in a linked-
10b50 6c 69 73 74 20 70 6f 69 6e 74 65 64 20 74 6f 20  list pointed to 
10b60 62 79 0a 2a 2a 20 74 68 65 20 54 61 62 6c 65 2e  by.** the Table.
10b70 70 56 54 61 62 6c 65 20 6d 65 6d 62 65 72 20 76  pVTable member v
10b80 61 72 69 61 62 6c 65 20 6f 66 20 74 68 65 20 63  ariable of the c
10b90 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 54 61 62  orresponding Tab
10ba0 6c 65 20 6f 62 6a 65 63 74 2e 0a 2a 2a 20 57 68  le object..** Wh
10bb0 65 6e 20 61 6e 20 73 71 6c 69 74 65 33 5f 70 72  en an sqlite3_pr
10bc0 65 70 61 72 65 28 29 20 6f 70 65 72 61 74 69 6f  epare() operatio
10bd0 6e 20 69 73 20 72 65 71 75 69 72 65 64 20 74 6f  n is required to
10be0 20 61 63 63 65 73 73 20 74 68 65 20 76 69 72 74   access the virt
10bf0 75 61 6c 0a 2a 2a 20 74 61 62 6c 65 2c 20 69 74  ual.** table, it
10c00 20 73 65 61 72 63 68 65 73 20 74 68 65 20 6c 69   searches the li
10c10 73 74 20 66 6f 72 20 74 68 65 20 56 54 61 62 6c  st for the VTabl
10c20 65 20 74 68 61 74 20 63 6f 72 72 65 73 70 6f 6e  e that correspon
10c30 64 73 20 74 6f 20 74 68 65 0a 2a 2a 20 64 61 74  ds to the.** dat
10c40 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  abase connection
10c50 20 64 6f 69 6e 67 20 74 68 65 20 70 72 65 70 61   doing the prepa
10c60 72 69 6e 67 20 73 6f 20 61 73 20 74 6f 20 75 73  ring so as to us
10c70 65 20 74 68 65 20 63 6f 72 72 65 63 74 0a 2a 2a  e the correct.**
10c80 20 73 71 6c 69 74 65 33 5f 76 74 61 62 2a 20 68   sqlite3_vtab* h
10c90 61 6e 64 6c 65 20 69 6e 20 74 68 65 20 63 6f 6d  andle in the com
10ca0 70 69 6c 65 64 20 71 75 65 72 79 2e 0a 2a 2a 0a  piled query..**.
10cb0 2a 2a 20 57 68 65 6e 20 61 6e 20 69 6e 2d 6d 65  ** When an in-me
10cc0 6d 6f 72 79 20 54 61 62 6c 65 20 6f 62 6a 65 63  mory Table objec
10cd0 74 20 69 73 20 64 65 6c 65 74 65 64 20 28 66 6f  t is deleted (fo
10ce0 72 20 65 78 61 6d 70 6c 65 20 77 68 65 6e 20 74  r example when t
10cf0 68 65 0a 2a 2a 20 73 63 68 65 6d 61 20 69 73 20  he.** schema is 
10d00 62 65 69 6e 67 20 72 65 6c 6f 61 64 65 64 20 66  being reloaded f
10d10 6f 72 20 73 6f 6d 65 20 72 65 61 73 6f 6e 29 2c  or some reason),
10d20 20 74 68 65 20 56 54 61 62 6c 65 20 6f 62 6a 65   the VTable obje
10d30 63 74 73 20 61 72 65 20 6e 6f 74 0a 2a 2a 20 64  cts are not.** d
10d40 65 6c 65 74 65 64 20 61 6e 64 20 74 68 65 20 73  eleted and the s
10d50 71 6c 69 74 65 33 5f 76 74 61 62 2a 20 68 61 6e  qlite3_vtab* han
10d60 64 6c 65 73 20 61 72 65 20 6e 6f 74 20 78 44 69  dles are not xDi
10d70 73 63 6f 6e 6e 65 63 74 28 29 65 64 0a 2a 2a 20  sconnect()ed.** 
10d80 69 6d 6d 65 64 69 61 74 65 6c 79 2e 20 49 6e 73  immediately. Ins
10d90 74 65 61 64 2c 20 74 68 65 79 20 61 72 65 20 6d  tead, they are m
10da0 6f 76 65 64 20 66 72 6f 6d 20 74 68 65 20 54 61  oved from the Ta
10db0 62 6c 65 2e 70 56 54 61 62 6c 65 20 6c 69 73 74  ble.pVTable list
10dc0 20 74 6f 0a 2a 2a 20 61 6e 6f 74 68 65 72 20 6c   to.** another l
10dd0 69 6e 6b 65 64 20 6c 69 73 74 20 68 65 61 64 65  inked list heade
10de0 64 20 62 79 20 74 68 65 20 73 71 6c 69 74 65 33  d by the sqlite3
10df0 2e 70 44 69 73 63 6f 6e 6e 65 63 74 20 6d 65 6d  .pDisconnect mem
10e00 62 65 72 20 6f 66 20 74 68 65 0a 2a 2a 20 63 6f  ber of the.** co
10e10 72 72 65 73 70 6f 6e 64 69 6e 67 20 73 71 6c 69  rresponding sqli
10e20 74 65 33 20 73 74 72 75 63 74 75 72 65 2e 20 54  te3 structure. T
10e30 68 65 79 20 61 72 65 20 74 68 65 6e 20 64 65 6c  hey are then del
10e40 65 74 65 64 2f 78 44 69 73 63 6f 6e 6e 65 63 74  eted/xDisconnect
10e50 65 64 0a 2a 2a 20 6e 65 78 74 20 74 69 6d 65 20  ed.** next time 
10e60 61 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 70  a statement is p
10e70 72 65 70 61 72 65 64 20 75 73 69 6e 67 20 73 61  repared using sa
10e80 69 64 20 73 71 6c 69 74 65 33 2a 2e 20 54 68 69  id sqlite3*. Thi
10e90 73 20 69 73 20 64 6f 6e 65 0a 2a 2a 20 74 6f 20  s is done.** to 
10ea0 61 76 6f 69 64 20 64 65 61 64 6c 6f 63 6b 20 69  avoid deadlock i
10eb0 73 73 75 65 73 20 69 6e 76 6f 6c 76 69 6e 67 20  ssues involving 
10ec0 6d 75 6c 74 69 70 6c 65 20 73 71 6c 69 74 65 33  multiple sqlite3
10ed0 2e 6d 75 74 65 78 20 6d 75 74 65 78 65 73 2e 0a  .mutex mutexes..
10ee0 2a 2a 20 52 65 66 65 72 20 74 6f 20 63 6f 6d 6d  ** Refer to comm
10ef0 65 6e 74 73 20 61 62 6f 76 65 20 66 75 6e 63 74  ents above funct
10f00 69 6f 6e 20 73 71 6c 69 74 65 33 56 74 61 62 55  ion sqlite3VtabU
10f10 6e 6c 6f 63 6b 4c 69 73 74 28 29 20 66 6f 72 20  nlockList() for 
10f20 61 6e 0a 2a 2a 20 65 78 70 6c 61 6e 61 74 69 6f  an.** explanatio
10f30 6e 20 61 73 20 74 6f 20 77 68 79 20 69 74 20 69  n as to why it i
10f40 73 20 73 61 66 65 20 74 6f 20 61 64 64 20 61 6e  s safe to add an
10f50 20 65 6e 74 72 79 20 74 6f 20 61 6e 20 73 71 6c   entry to an sql
10f60 69 74 65 33 2e 70 44 69 73 63 6f 6e 6e 65 63 74  ite3.pDisconnect
10f70 0a 2a 2a 20 6c 69 73 74 20 77 69 74 68 6f 75 74  .** list without
10f80 20 68 6f 6c 64 69 6e 67 20 74 68 65 20 63 6f 72   holding the cor
10f90 72 65 73 70 6f 6e 64 69 6e 67 20 73 71 6c 69 74  responding sqlit
10fa0 65 33 2e 6d 75 74 65 78 20 6d 75 74 65 78 2e 0a  e3.mutex mutex..
10fb0 2a 2a 0a 2a 2a 20 54 68 65 20 6d 65 6d 6f 72 79  **.** The memory
10fc0 20 66 6f 72 20 6f 62 6a 65 63 74 73 20 6f 66 20   for objects of 
10fd0 74 68 69 73 20 74 79 70 65 20 69 73 20 61 6c 77  this type is alw
10fe0 61 79 73 20 61 6c 6c 6f 63 61 74 65 64 20 62 79  ays allocated by
10ff0 0a 2a 2a 20 73 71 6c 69 74 65 33 44 62 4d 61 6c  .** sqlite3DbMal
11000 6c 6f 63 28 29 2c 20 75 73 69 6e 67 20 74 68 65  loc(), using the
11010 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64   connection hand
11020 6c 65 20 73 74 6f 72 65 64 20 69 6e 20 56 54 61  le stored in VTa
11030 62 6c 65 2e 64 62 20 61 73 0a 2a 2a 20 74 68 65  ble.db as.** the
11040 20 66 69 72 73 74 20 61 72 67 75 6d 65 6e 74 2e   first argument.
11050 0a 2a 2f 0a 73 74 72 75 63 74 20 56 54 61 62 6c  .*/.struct VTabl
11060 65 20 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64  e {.  sqlite3 *d
11070 62 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  b;              
11080 2f 2a 20 44 61 74 61 62 61 73 65 20 63 6f 6e 6e  /* Database conn
11090 65 63 74 69 6f 6e 20 61 73 73 6f 63 69 61 74 65  ection associate
110a0 64 20 77 69 74 68 20 74 68 69 73 20 74 61 62 6c  d with this tabl
110b0 65 20 2a 2f 0a 20 20 4d 6f 64 75 6c 65 20 2a 70  e */.  Module *p
110c0 4d 6f 64 3b 20 20 20 20 20 20 20 20 20 20 20 20  Mod;            
110d0 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 6d   /* Pointer to m
110e0 6f 64 75 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 61  odule implementa
110f0 74 69 6f 6e 20 2a 2f 0a 20 20 73 71 6c 69 74 65  tion */.  sqlite
11100 33 5f 76 74 61 62 20 2a 70 56 74 61 62 3b 20 20  3_vtab *pVtab;  
11110 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74      /* Pointer t
11120 6f 20 76 74 61 62 20 69 6e 73 74 61 6e 63 65 20  o vtab instance 
11130 2a 2f 0a 20 20 69 6e 74 20 6e 52 65 66 3b 20 20  */.  int nRef;  
11140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
11150 2a 20 4e 75 6d 62 65 72 20 6f 66 20 70 6f 69 6e  * Number of poin
11160 74 65 72 73 20 74 6f 20 74 68 69 73 20 73 74 72  ters to this str
11170 75 63 74 75 72 65 20 2a 2f 0a 20 20 75 38 20 62  ucture */.  u8 b
11180 43 6f 6e 73 74 72 61 69 6e 74 3b 20 20 20 20 20  Constraint;     
11190 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66        /* True if
111a0 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 61 72 65   constraints are
111b0 20 73 75 70 70 6f 72 74 65 64 20 2a 2f 0a 20 20   supported */.  
111c0 69 6e 74 20 69 53 61 76 65 70 6f 69 6e 74 3b 20  int iSavepoint; 
111d0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 65 70            /* Dep
111e0 74 68 20 6f 66 20 74 68 65 20 53 41 56 45 50 4f  th of the SAVEPO
111f0 49 4e 54 20 73 74 61 63 6b 20 2a 2f 0a 20 20 56  INT stack */.  V
11200 54 61 62 6c 65 20 2a 70 4e 65 78 74 3b 20 20 20  Table *pNext;   
11210 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 78 74           /* Next
11220 20 69 6e 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20   in linked list 
11230 28 73 65 65 20 61 62 6f 76 65 29 20 2a 2f 0a 7d  (see above) */.}
11240 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 73 63 68  ;../*.** The sch
11250 65 6d 61 20 66 6f 72 20 65 61 63 68 20 53 51 4c  ema for each SQL
11260 20 74 61 62 6c 65 20 61 6e 64 20 76 69 65 77 20   table and view 
11270 69 73 20 72 65 70 72 65 73 65 6e 74 65 64 20 69  is represented i
11280 6e 20 6d 65 6d 6f 72 79 0a 2a 2a 20 62 79 20 61  n memory.** by a
11290 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  n instance of th
112a0 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75  e following stru
112b0 63 74 75 72 65 2e 0a 2a 2f 0a 73 74 72 75 63 74  cture..*/.struct
112c0 20 54 61 62 6c 65 20 7b 0a 20 20 63 68 61 72 20   Table {.  char 
112d0 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20  *zName;         
112e0 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65 20 74  /* Name of the t
112f0 61 62 6c 65 20 6f 72 20 76 69 65 77 20 2a 2f 0a  able or view */.
11300 20 20 43 6f 6c 75 6d 6e 20 2a 61 43 6f 6c 3b 20    Column *aCol; 
11310 20 20 20 20 20 20 20 2f 2a 20 49 6e 66 6f 72 6d         /* Inform
11320 61 74 69 6f 6e 20 61 62 6f 75 74 20 65 61 63 68  ation about each
11330 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 49 6e 64   column */.  Ind
11340 65 78 20 2a 70 49 6e 64 65 78 3b 20 20 20 20 20  ex *pIndex;     
11350 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 53 51 4c    /* List of SQL
11360 20 69 6e 64 65 78 65 73 20 6f 6e 20 74 68 69 73   indexes on this
11370 20 74 61 62 6c 65 2e 20 2a 2f 0a 20 20 53 65 6c   table. */.  Sel
11380 65 63 74 20 2a 70 53 65 6c 65 63 74 3b 20 20 20  ect *pSelect;   
11390 20 20 2f 2a 20 4e 55 4c 4c 20 66 6f 72 20 74 61    /* NULL for ta
113a0 62 6c 65 73 2e 20 20 50 6f 69 6e 74 73 20 74 6f  bles.  Points to
113b0 20 64 65 66 69 6e 69 74 69 6f 6e 20 69 66 20 61   definition if a
113c0 20 76 69 65 77 2e 20 2a 2f 0a 20 20 46 4b 65 79   view. */.  FKey
113d0 20 2a 70 46 4b 65 79 3b 20 20 20 20 20 20 20 20   *pFKey;        
113e0 20 2f 2a 20 4c 69 6e 6b 65 64 20 6c 69 73 74 20   /* Linked list 
113f0 6f 66 20 61 6c 6c 20 66 6f 72 65 69 67 6e 20 6b  of all foreign k
11400 65 79 73 20 69 6e 20 74 68 69 73 20 74 61 62 6c  eys in this tabl
11410 65 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 43 6f  e */.  char *zCo
11420 6c 41 66 66 3b 20 20 20 20 20 20 20 2f 2a 20 53  lAff;       /* S
11430 74 72 69 6e 67 20 64 65 66 69 6e 69 6e 67 20 74  tring defining t
11440 68 65 20 61 66 66 69 6e 69 74 79 20 6f 66 20 65  he affinity of e
11450 61 63 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20  ach column */.  
11460 45 78 70 72 4c 69 73 74 20 2a 70 43 68 65 63 6b  ExprList *pCheck
11470 3b 20 20 20 20 2f 2a 20 41 6c 6c 20 43 48 45 43  ;    /* All CHEC
11480 4b 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f  K constraints */
11490 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
114a0 20 20 20 20 20 20 20 20 2f 2a 20 20 20 2e 2e 2e          /*   ...
114b0 20 61 6c 73 6f 20 75 73 65 64 20 61 73 20 63 6f   also used as co
114c0 6c 75 6d 6e 20 6e 61 6d 65 20 6c 69 73 74 20 69  lumn name list i
114d0 6e 20 61 20 56 49 45 57 20 2a 2f 0a 20 20 69 6e  n a VIEW */.  in
114e0 74 20 74 6e 75 6d 3b 20 20 20 20 20 20 20 20 20  t tnum;         
114f0 20 20 20 2f 2a 20 52 6f 6f 74 20 42 54 72 65 65     /* Root BTree
11500 20 70 61 67 65 20 66 6f 72 20 74 68 69 73 20 74   page for this t
11510 61 62 6c 65 20 2a 2f 0a 20 20 69 31 36 20 69 50  able */.  i16 iP
11520 4b 65 79 3b 20 20 20 20 20 20 20 20 20 20 20 2f  Key;           /
11530 2a 20 49 66 20 6e 6f 74 20 6e 65 67 61 74 69 76  * If not negativ
11540 65 2c 20 75 73 65 20 61 43 6f 6c 5b 69 50 4b 65  e, use aCol[iPKe
11550 79 5d 20 61 73 20 74 68 65 20 72 6f 77 69 64 20  y] as the rowid 
11560 2a 2f 0a 20 20 69 31 36 20 6e 43 6f 6c 3b 20 20  */.  i16 nCol;  
11570 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
11580 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69  ber of columns i
11590 6e 20 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a  n this table */.
115a0 20 20 75 31 36 20 6e 52 65 66 3b 20 20 20 20 20    u16 nRef;     
115b0 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
115c0 20 6f 66 20 70 6f 69 6e 74 65 72 73 20 74 6f 20   of pointers to 
115d0 74 68 69 73 20 54 61 62 6c 65 20 2a 2f 0a 20 20  this Table */.  
115e0 4c 6f 67 45 73 74 20 6e 52 6f 77 4c 6f 67 45 73  LogEst nRowLogEs
115f0 74 3b 20 20 20 2f 2a 20 45 73 74 69 6d 61 74 65  t;   /* Estimate
11600 64 20 72 6f 77 73 20 69 6e 20 74 61 62 6c 65 20  d rows in table 
11610 2d 20 66 72 6f 6d 20 73 71 6c 69 74 65 5f 73 74  - from sqlite_st
11620 61 74 31 20 74 61 62 6c 65 20 2a 2f 0a 20 20 4c  at1 table */.  L
11630 6f 67 45 73 74 20 73 7a 54 61 62 52 6f 77 3b 20  ogEst szTabRow; 
11640 20 20 20 20 2f 2a 20 45 73 74 69 6d 61 74 65 64      /* Estimated
11650 20 73 69 7a 65 20 6f 66 20 65 61 63 68 20 74 61   size of each ta
11660 62 6c 65 20 72 6f 77 20 69 6e 20 62 79 74 65 73  ble row in bytes
11670 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54   */.#ifdef SQLIT
11680 45 5f 45 4e 41 42 4c 45 5f 43 4f 53 54 4d 55 4c  E_ENABLE_COSTMUL
11690 54 0a 20 20 4c 6f 67 45 73 74 20 63 6f 73 74 4d  T.  LogEst costM
116a0 75 6c 74 3b 20 20 20 20 20 2f 2a 20 43 6f 73 74  ult;     /* Cost
116b0 20 6d 75 6c 74 69 70 6c 69 65 72 20 66 6f 72 20   multiplier for 
116c0 75 73 69 6e 67 20 74 68 69 73 20 74 61 62 6c 65  using this table
116d0 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 75 38 20   */.#endif.  u8 
116e0 74 61 62 46 6c 61 67 73 3b 20 20 20 20 20 20 20  tabFlags;       
116f0 20 20 2f 2a 20 4d 61 73 6b 20 6f 66 20 54 46 5f    /* Mask of TF_
11700 2a 20 76 61 6c 75 65 73 20 2a 2f 0a 20 20 75 38  * values */.  u8
11710 20 6b 65 79 43 6f 6e 66 3b 20 20 20 20 20 20 20   keyConf;       
11720 20 20 20 2f 2a 20 57 68 61 74 20 74 6f 20 64 6f     /* What to do
11730 20 69 6e 20 63 61 73 65 20 6f 66 20 75 6e 69 71   in case of uniq
11740 75 65 6e 65 73 73 20 63 6f 6e 66 6c 69 63 74 20  ueness conflict 
11750 6f 6e 20 69 50 4b 65 79 20 2a 2f 0a 23 69 66 6e  on iPKey */.#ifn
11760 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
11770 41 4c 54 45 52 54 41 42 4c 45 0a 20 20 69 6e 74  ALTERTABLE.  int
11780 20 61 64 64 43 6f 6c 4f 66 66 73 65 74 3b 20 20   addColOffset;  
11790 20 20 2f 2a 20 4f 66 66 73 65 74 20 69 6e 20 43    /* Offset in C
117a0 52 45 41 54 45 20 54 41 42 4c 45 20 73 74 6d 74  REATE TABLE stmt
117b0 20 74 6f 20 61 64 64 20 61 20 6e 65 77 20 63 6f   to add a new co
117c0 6c 75 6d 6e 20 2a 2f 0a 23 65 6e 64 69 66 0a 23  lumn */.#endif.#
117d0 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
117e0 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a  IT_VIRTUALTABLE.
117f0 20 20 69 6e 74 20 6e 4d 6f 64 75 6c 65 41 72 67    int nModuleArg
11800 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72  ;      /* Number
11810 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 74 6f   of arguments to
11820 20 74 68 65 20 6d 6f 64 75 6c 65 20 2a 2f 0a 20   the module */. 
11830 20 63 68 61 72 20 2a 2a 61 7a 4d 6f 64 75 6c 65   char **azModule
11840 41 72 67 3b 20 20 2f 2a 20 30 3a 20 6d 6f 64 75  Arg;  /* 0: modu
11850 6c 65 20 31 3a 20 73 63 68 65 6d 61 20 32 3a 20  le 1: schema 2: 
11860 76 74 61 62 20 6e 61 6d 65 20 33 2e 2e 2e 3a 20  vtab name 3...: 
11870 61 72 67 73 20 2a 2f 0a 20 20 56 54 61 62 6c 65  args */.  VTable
11880 20 2a 70 56 54 61 62 6c 65 3b 20 20 20 20 20 2f   *pVTable;     /
11890 2a 20 4c 69 73 74 20 6f 66 20 56 54 61 62 6c 65  * List of VTable
118a0 20 6f 62 6a 65 63 74 73 2e 20 2a 2f 0a 23 65 6e   objects. */.#en
118b0 64 69 66 0a 20 20 54 72 69 67 67 65 72 20 2a 70  dif.  Trigger *p
118c0 54 72 69 67 67 65 72 3b 20 20 20 2f 2a 20 4c 69  Trigger;   /* Li
118d0 73 74 20 6f 66 20 74 72 69 67 67 65 72 73 20 73  st of triggers s
118e0 74 6f 72 65 64 20 69 6e 20 70 53 63 68 65 6d 61  tored in pSchema
118f0 20 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70 53   */.  Schema *pS
11900 63 68 65 6d 61 3b 20 20 20 20 20 2f 2a 20 53 63  chema;     /* Sc
11910 68 65 6d 61 20 74 68 61 74 20 63 6f 6e 74 61 69  hema that contai
11920 6e 73 20 74 68 69 73 20 74 61 62 6c 65 20 2a 2f  ns this table */
11930 0a 20 20 54 61 62 6c 65 20 2a 70 4e 65 78 74 5a  .  Table *pNextZ
11940 6f 6d 62 69 65 3b 20 20 2f 2a 20 4e 65 78 74 20  ombie;  /* Next 
11950 6f 6e 20 74 68 65 20 50 61 72 73 65 2e 70 5a 6f  on the Parse.pZo
11960 6d 62 69 65 54 61 62 20 6c 69 73 74 20 2a 2f 0a  mbieTab list */.
11970 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65  };../*.** Allowe
11980 64 20 76 61 6c 75 65 73 20 66 6f 72 20 54 61 62  d values for Tab
11990 6c 65 2e 74 61 62 46 6c 61 67 73 2e 0a 2a 2a 0a  le.tabFlags..**.
119a0 2a 2a 20 54 46 5f 4f 4f 4f 48 69 64 64 65 6e 20  ** TF_OOOHidden 
119b0 61 70 70 6c 69 65 73 20 74 6f 20 74 61 62 6c 65  applies to table
119c0 73 20 6f 72 20 76 69 65 77 20 74 68 61 74 20 68  s or view that h
119d0 61 76 65 20 68 69 64 64 65 6e 20 63 6f 6c 75 6d  ave hidden colum
119e0 6e 73 20 74 68 61 74 20 61 72 65 0a 2a 2a 20 66  ns that are.** f
119f0 6f 6c 6c 6f 77 65 64 20 62 79 20 6e 6f 6e 2d 68  ollowed by non-h
11a00 69 64 64 65 6e 20 63 6f 6c 75 6d 6e 73 2e 20 20  idden columns.  
11a10 45 78 61 6d 70 6c 65 3a 20 20 22 43 52 45 41 54  Example:  "CREAT
11a20 45 20 56 49 52 54 55 41 4c 20 54 41 42 4c 45 20  E VIRTUAL TABLE 
11a30 78 20 55 53 49 4e 47 0a 2a 2a 20 76 74 61 62 31  x USING.** vtab1
11a40 28 61 20 48 49 44 44 45 4e 2c 20 62 29 3b 22 2e  (a HIDDEN, b);".
11a50 20 20 53 69 6e 63 65 20 22 62 22 20 69 73 20 61    Since "b" is a
11a60 20 6e 6f 6e 2d 68 69 64 64 65 6e 20 63 6f 6c 75   non-hidden colu
11a70 6d 6e 20 62 75 74 20 22 61 22 20 69 73 20 68 69  mn but "a" is hi
11a80 64 64 65 6e 2c 0a 2a 2a 20 74 68 65 20 54 46 5f  dden,.** the TF_
11a90 4f 4f 4f 48 69 64 64 65 6e 20 61 74 74 72 69 62  OOOHidden attrib
11aa0 75 74 65 20 77 6f 75 6c 64 20 61 70 70 6c 79 20  ute would apply 
11ab0 69 6e 20 74 68 69 73 20 63 61 73 65 2e 20 20 53  in this case.  S
11ac0 75 63 68 20 74 61 62 6c 65 73 20 72 65 71 75 69  uch tables requi
11ad0 72 65 0a 2a 2a 20 73 70 65 63 69 61 6c 20 68 61  re.** special ha
11ae0 6e 64 6c 69 6e 67 20 64 75 72 69 6e 67 20 49 4e  ndling during IN
11af0 53 45 52 54 20 70 72 6f 63 65 73 73 69 6e 67 2e  SERT processing.
11b00 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 52  .*/.#define TF_R
11b10 65 61 64 6f 6e 6c 79 20 20 20 20 20 20 20 20 30  eadonly        0
11b20 78 30 31 20 20 20 20 2f 2a 20 52 65 61 64 2d 6f  x01    /* Read-o
11b30 6e 6c 79 20 73 79 73 74 65 6d 20 74 61 62 6c 65  nly system table
11b40 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 45   */.#define TF_E
11b50 70 68 65 6d 65 72 61 6c 20 20 20 20 20 20 20 30  phemeral       0
11b60 78 30 32 20 20 20 20 2f 2a 20 41 6e 20 65 70 68  x02    /* An eph
11b70 65 6d 65 72 61 6c 20 74 61 62 6c 65 20 2a 2f 0a  emeral table */.
11b80 23 64 65 66 69 6e 65 20 54 46 5f 48 61 73 50 72  #define TF_HasPr
11b90 69 6d 61 72 79 4b 65 79 20 20 20 30 78 30 34 20  imaryKey   0x04 
11ba0 20 20 20 2f 2a 20 54 61 62 6c 65 20 68 61 73 20     /* Table has 
11bb0 61 20 70 72 69 6d 61 72 79 20 6b 65 79 20 2a 2f  a primary key */
11bc0 0a 23 64 65 66 69 6e 65 20 54 46 5f 41 75 74 6f  .#define TF_Auto
11bd0 69 6e 63 72 65 6d 65 6e 74 20 20 20 30 78 30 38  increment   0x08
11be0 20 20 20 20 2f 2a 20 49 6e 74 65 67 65 72 20 70      /* Integer p
11bf0 72 69 6d 61 72 79 20 6b 65 79 20 69 73 20 61 75  rimary key is au
11c00 74 6f 69 6e 63 72 65 6d 65 6e 74 20 2a 2f 0a 23  toincrement */.#
11c10 64 65 66 69 6e 65 20 54 46 5f 56 69 72 74 75 61  define TF_Virtua
11c20 6c 20 20 20 20 20 20 20 20 20 30 78 31 30 20 20  l         0x10  
11c30 20 20 2f 2a 20 49 73 20 61 20 76 69 72 74 75 61    /* Is a virtua
11c40 6c 20 74 61 62 6c 65 20 2a 2f 0a 23 64 65 66 69  l table */.#defi
11c50 6e 65 20 54 46 5f 57 69 74 68 6f 75 74 52 6f 77  ne TF_WithoutRow
11c60 69 64 20 20 20 20 30 78 32 30 20 20 20 20 2f 2a  id    0x20    /*
11c70 20 4e 6f 20 72 6f 77 69 64 2e 20 20 50 52 49 4d   No rowid.  PRIM
11c80 41 52 59 20 4b 45 59 20 69 73 20 74 68 65 20 6b  ARY KEY is the k
11c90 65 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46  ey */.#define TF
11ca0 5f 4e 6f 56 69 73 69 62 6c 65 52 6f 77 69 64 20  _NoVisibleRowid 
11cb0 20 30 78 34 30 20 20 20 20 2f 2a 20 4e 6f 20 75   0x40    /* No u
11cc0 73 65 72 2d 76 69 73 69 62 6c 65 20 22 72 6f 77  ser-visible "row
11cd0 69 64 22 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 23 64  id" column */.#d
11ce0 65 66 69 6e 65 20 54 46 5f 4f 4f 4f 48 69 64 64  efine TF_OOOHidd
11cf0 65 6e 20 20 20 20 20 20 20 30 78 38 30 20 20 20  en       0x80   
11d00 20 2f 2a 20 4f 75 74 2d 6f 66 2d 4f 72 64 65 72   /* Out-of-Order
11d10 20 68 69 64 64 65 6e 20 63 6f 6c 75 6d 6e 73 20   hidden columns 
11d20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 54 65 73 74 20  */.../*.** Test 
11d30 74 6f 20 73 65 65 20 77 68 65 74 68 65 72 20 6f  to see whether o
11d40 72 20 6e 6f 74 20 61 20 74 61 62 6c 65 20 69 73  r not a table is
11d50 20 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65   a virtual table
11d60 2e 20 20 54 68 69 73 20 69 73 0a 2a 2a 20 64 6f  .  This is.** do
11d70 6e 65 20 61 73 20 61 20 6d 61 63 72 6f 20 73 6f  ne as a macro so
11d80 20 74 68 61 74 20 69 74 20 77 69 6c 6c 20 62 65   that it will be
11d90 20 6f 70 74 69 6d 69 7a 65 64 20 6f 75 74 20 77   optimized out w
11da0 68 65 6e 20 76 69 72 74 75 61 6c 0a 2a 2a 20 74  hen virtual.** t
11db0 61 62 6c 65 20 73 75 70 70 6f 72 74 20 69 73 20  able support is 
11dc0 6f 6d 69 74 74 65 64 20 66 72 6f 6d 20 74 68 65  omitted from the
11dd0 20 62 75 69 6c 64 2e 0a 2a 2f 0a 23 69 66 6e 64   build..*/.#ifnd
11de0 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  ef SQLITE_OMIT_V
11df0 49 52 54 55 41 4c 54 41 42 4c 45 0a 23 20 20 64  IRTUALTABLE.#  d
11e00 65 66 69 6e 65 20 49 73 56 69 72 74 75 61 6c 28  efine IsVirtual(
11e10 58 29 20 20 20 20 20 20 28 28 28 58 29 2d 3e 74  X)      (((X)->t
11e20 61 62 46 6c 61 67 73 20 26 20 54 46 5f 56 69 72  abFlags & TF_Vir
11e30 74 75 61 6c 29 21 3d 30 29 0a 23 65 6c 73 65 0a  tual)!=0).#else.
11e40 23 20 20 64 65 66 69 6e 65 20 49 73 56 69 72 74  #  define IsVirt
11e50 75 61 6c 28 58 29 20 20 20 20 20 20 30 0a 23 65  ual(X)      0.#e
11e60 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 4d 61 63 72  ndif../*.** Macr
11e70 6f 73 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20  os to determine 
11e80 69 66 20 61 20 63 6f 6c 75 6d 6e 20 69 73 20 68  if a column is h
11e90 69 64 64 65 6e 2e 20 20 49 73 4f 72 64 69 6e 61  idden.  IsOrdina
11ea0 72 79 48 69 64 64 65 6e 43 6f 6c 75 6d 6e 28 29  ryHiddenColumn()
11eb0 0a 2a 2a 20 6f 6e 6c 79 20 77 6f 72 6b 73 20 66  .** only works f
11ec0 6f 72 20 6e 6f 6e 2d 76 69 72 74 75 61 6c 20 74  or non-virtual t
11ed0 61 62 6c 65 73 20 28 6f 72 64 69 6e 61 72 79 20  ables (ordinary 
11ee0 74 61 62 6c 65 73 20 61 6e 64 20 76 69 65 77 73  tables and views
11ef0 29 20 61 6e 64 20 69 73 0a 2a 2a 20 61 6c 77 61  ) and is.** alwa
11f00 79 73 20 66 61 6c 73 65 20 75 6e 6c 65 73 73 20  ys false unless 
11f10 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 48 49  SQLITE_ENABLE_HI
11f20 44 44 45 4e 5f 43 4f 4c 55 4d 4e 53 20 69 73 20  DDEN_COLUMNS is 
11f30 64 65 66 69 6e 65 64 2e 20 20 54 68 65 0a 2a 2a  defined.  The.**
11f40 20 49 73 48 69 64 64 65 6e 43 6f 6c 75 6d 6e 28   IsHiddenColumn(
11f50 29 20 6d 61 63 72 6f 20 69 73 20 67 65 6e 65 72  ) macro is gener
11f60 61 6c 20 70 75 72 70 6f 73 65 2e 0a 2a 2f 0a 23  al purpose..*/.#
11f70 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  if defined(SQLIT
11f80 45 5f 45 4e 41 42 4c 45 5f 48 49 44 44 45 4e 5f  E_ENABLE_HIDDEN_
11f90 43 4f 4c 55 4d 4e 53 29 0a 23 20 20 64 65 66 69  COLUMNS).#  defi
11fa0 6e 65 20 49 73 48 69 64 64 65 6e 43 6f 6c 75 6d  ne IsHiddenColum
11fb0 6e 28 58 29 20 20 20 20 20 20 20 20 20 28 28 28  n(X)         (((
11fc0 58 29 2d 3e 63 6f 6c 46 6c 61 67 73 20 26 20 43  X)->colFlags & C
11fd0 4f 4c 46 4c 41 47 5f 48 49 44 44 45 4e 29 21 3d  OLFLAG_HIDDEN)!=
11fe0 30 29 0a 23 20 20 64 65 66 69 6e 65 20 49 73 4f  0).#  define IsO
11ff0 72 64 69 6e 61 72 79 48 69 64 64 65 6e 43 6f 6c  rdinaryHiddenCol
12000 75 6d 6e 28 58 29 20 28 28 28 58 29 2d 3e 63 6f  umn(X) (((X)->co
12010 6c 46 6c 61 67 73 20 26 20 43 4f 4c 46 4c 41 47  lFlags & COLFLAG
12020 5f 48 49 44 44 45 4e 29 21 3d 30 29 0a 23 65 6c  _HIDDEN)!=0).#el
12030 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  if !defined(SQLI
12040 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
12050 41 42 4c 45 29 0a 23 20 20 64 65 66 69 6e 65 20  ABLE).#  define 
12060 49 73 48 69 64 64 65 6e 43 6f 6c 75 6d 6e 28 58  IsHiddenColumn(X
12070 29 20 20 20 20 20 20 20 20 20 28 28 28 58 29 2d  )         (((X)-
12080 3e 63 6f 6c 46 6c 61 67 73 20 26 20 43 4f 4c 46  >colFlags & COLF
12090 4c 41 47 5f 48 49 44 44 45 4e 29 21 3d 30 29 0a  LAG_HIDDEN)!=0).
120a0 23 20 20 64 65 66 69 6e 65 20 49 73 4f 72 64 69  #  define IsOrdi
120b0 6e 61 72 79 48 69 64 64 65 6e 43 6f 6c 75 6d 6e  naryHiddenColumn
120c0 28 58 29 20 30 0a 23 65 6c 73 65 0a 23 20 20 64  (X) 0.#else.#  d
120d0 65 66 69 6e 65 20 49 73 48 69 64 64 65 6e 43 6f  efine IsHiddenCo
120e0 6c 75 6d 6e 28 58 29 20 20 20 20 20 20 20 20 20  lumn(X)         
120f0 30 0a 23 20 20 64 65 66 69 6e 65 20 49 73 4f 72  0.#  define IsOr
12100 64 69 6e 61 72 79 48 69 64 64 65 6e 43 6f 6c 75  dinaryHiddenColu
12110 6d 6e 28 58 29 20 30 0a 23 65 6e 64 69 66 0a 0a  mn(X) 0.#endif..
12120 0a 2f 2a 20 44 6f 65 73 20 74 68 65 20 74 61 62  ./* Does the tab
12130 6c 65 20 68 61 76 65 20 61 20 72 6f 77 69 64 20  le have a rowid 
12140 2a 2f 0a 23 64 65 66 69 6e 65 20 48 61 73 52 6f  */.#define HasRo
12150 77 69 64 28 58 29 20 20 20 20 20 28 28 28 58 29  wid(X)     (((X)
12160 2d 3e 74 61 62 46 6c 61 67 73 20 26 20 54 46 5f  ->tabFlags & TF_
12170 57 69 74 68 6f 75 74 52 6f 77 69 64 29 3d 3d 30  WithoutRowid)==0
12180 29 0a 23 64 65 66 69 6e 65 20 56 69 73 69 62 6c  ).#define Visibl
12190 65 52 6f 77 69 64 28 58 29 20 28 28 28 58 29 2d  eRowid(X) (((X)-
121a0 3e 74 61 62 46 6c 61 67 73 20 26 20 54 46 5f 4e  >tabFlags & TF_N
121b0 6f 56 69 73 69 62 6c 65 52 6f 77 69 64 29 3d 3d  oVisibleRowid)==
121c0 30 29 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 66  0)../*.** Each f
121d0 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74  oreign key const
121e0 72 61 69 6e 74 20 69 73 20 61 6e 20 69 6e 73 74  raint is an inst
121f0 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c  ance of the foll
12200 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 2e  owing structure.
12210 0a 2a 2a 0a 2a 2a 20 41 20 66 6f 72 65 69 67 6e  .**.** A foreign
12220 20 6b 65 79 20 69 73 20 61 73 73 6f 63 69 61 74   key is associat
12230 65 64 20 77 69 74 68 20 74 77 6f 20 74 61 62 6c  ed with two tabl
12240 65 73 2e 20 20 54 68 65 20 22 66 72 6f 6d 22 20  es.  The "from" 
12250 74 61 62 6c 65 20 69 73 0a 2a 2a 20 74 68 65 20  table is.** the 
12260 74 61 62 6c 65 20 74 68 61 74 20 63 6f 6e 74 61  table that conta
12270 69 6e 73 20 74 68 65 20 52 45 46 45 52 45 4e 43  ins the REFERENC
12280 45 53 20 63 6c 61 75 73 65 20 74 68 61 74 20 63  ES clause that c
12290 72 65 61 74 65 73 20 74 68 65 20 66 6f 72 65 69  reates the forei
122a0 67 6e 0a 2a 2a 20 6b 65 79 2e 20 20 54 68 65 20  gn.** key.  The 
122b0 22 74 6f 22 20 74 61 62 6c 65 20 69 73 20 74 68  "to" table is th
122c0 65 20 74 61 62 6c 65 20 74 68 61 74 20 69 73 20  e table that is 
122d0 6e 61 6d 65 64 20 69 6e 20 74 68 65 20 52 45 46  named in the REF
122e0 45 52 45 4e 43 45 53 20 63 6c 61 75 73 65 2e 0a  ERENCES clause..
122f0 2a 2a 20 43 6f 6e 73 69 64 65 72 20 74 68 69 73  ** Consider this
12300 20 65 78 61 6d 70 6c 65 3a 0a 2a 2a 0a 2a 2a 20   example:.**.** 
12310 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45      CREATE TABLE
12320 20 65 78 31 28 0a 2a 2a 20 20 20 20 20 20 20 61   ex1(.**       a
12330 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59   INTEGER PRIMARY
12340 20 4b 45 59 2c 0a 2a 2a 20 20 20 20 20 20 20 62   KEY,.**       b
12350 20 49 4e 54 45 47 45 52 20 43 4f 4e 53 54 52 41   INTEGER CONSTRA
12360 49 4e 54 20 66 6b 31 20 52 45 46 45 52 45 4e 43  INT fk1 REFERENC
12370 45 53 20 65 78 32 28 78 29 0a 2a 2a 20 20 20 20  ES ex2(x).**    
12380 20 29 3b 0a 2a 2a 0a 2a 2a 20 46 6f 72 20 66 6f   );.**.** For fo
12390 72 65 69 67 6e 20 6b 65 79 20 22 66 6b 31 22 2c  reign key "fk1",
123a0 20 74 68 65 20 66 72 6f 6d 2d 74 61 62 6c 65 20   the from-table 
123b0 69 73 20 22 65 78 31 22 20 61 6e 64 20 74 68 65  is "ex1" and the
123c0 20 74 6f 2d 74 61 62 6c 65 20 69 73 20 22 65 78   to-table is "ex
123d0 32 22 2e 0a 2a 2a 20 45 71 75 69 76 61 6c 65 6e  2"..** Equivalen
123e0 74 20 6e 61 6d 65 73 3a 0a 2a 2a 0a 2a 2a 20 20  t names:.**.**  
123f0 20 20 20 66 72 6f 6d 2d 74 61 62 6c 65 20 3d 3d     from-table ==
12400 20 63 68 69 6c 64 2d 74 61 62 6c 65 0a 2a 2a 20   child-table.** 
12410 20 20 20 20 20 20 74 6f 2d 74 61 62 6c 65 20 3d        to-table =
12420 3d 20 70 61 72 65 6e 74 2d 74 61 62 6c 65 0a 2a  = parent-table.*
12430 2a 0a 2a 2a 20 45 61 63 68 20 52 45 46 45 52 45  *.** Each REFERE
12440 4e 43 45 53 20 63 6c 61 75 73 65 20 67 65 6e 65  NCES clause gene
12450 72 61 74 65 73 20 61 6e 20 69 6e 73 74 61 6e 63  rates an instanc
12460 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69  e of the followi
12470 6e 67 20 73 74 72 75 63 74 75 72 65 0a 2a 2a 20  ng structure.** 
12480 77 68 69 63 68 20 69 73 20 61 74 74 61 63 68 65  which is attache
12490 64 20 74 6f 20 74 68 65 20 66 72 6f 6d 2d 74 61  d to the from-ta
124a0 62 6c 65 2e 20 20 54 68 65 20 74 6f 2d 74 61 62  ble.  The to-tab
124b0 6c 65 20 6e 65 65 64 20 6e 6f 74 20 65 78 69 73  le need not exis
124c0 74 20 77 68 65 6e 0a 2a 2a 20 74 68 65 20 66 72  t when.** the fr
124d0 6f 6d 2d 74 61 62 6c 65 20 69 73 20 63 72 65 61  om-table is crea
124e0 74 65 64 2e 20 20 54 68 65 20 65 78 69 73 74 65  ted.  The existe
124f0 6e 63 65 20 6f 66 20 74 68 65 20 74 6f 2d 74 61  nce of the to-ta
12500 62 6c 65 20 69 73 20 6e 6f 74 20 63 68 65 63 6b  ble is not check
12510 65 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6c 69  ed..**.** The li
12520 73 74 20 6f 66 20 61 6c 6c 20 70 61 72 65 6e 74  st of all parent
12530 73 20 66 6f 72 20 63 68 69 6c 64 20 54 61 62 6c  s for child Tabl
12540 65 20 58 20 69 73 20 68 65 6c 64 20 61 74 20 58  e X is held at X
12550 2e 70 46 4b 65 79 2e 0a 2a 2a 0a 2a 2a 20 41 20  .pFKey..**.** A 
12560 6c 69 73 74 20 6f 66 20 61 6c 6c 20 63 68 69 6c  list of all chil
12570 64 72 65 6e 20 66 6f 72 20 61 20 74 61 62 6c 65  dren for a table
12580 20 6e 61 6d 65 64 20 5a 20 28 77 68 69 63 68 20   named Z (which 
12590 6d 69 67 68 74 20 6e 6f 74 20 65 76 65 6e 20 65  might not even e
125a0 78 69 73 74 29 0a 2a 2a 20 69 73 20 68 65 6c 64  xist).** is held
125b0 20 69 6e 20 53 63 68 65 6d 61 2e 66 6b 65 79 48   in Schema.fkeyH
125c0 61 73 68 20 77 69 74 68 20 61 20 68 61 73 68 20  ash with a hash 
125d0 6b 65 79 20 6f 66 20 5a 2e 0a 2a 2f 0a 73 74 72  key of Z..*/.str
125e0 75 63 74 20 46 4b 65 79 20 7b 0a 20 20 54 61 62  uct FKey {.  Tab
125f0 6c 65 20 2a 70 46 72 6f 6d 3b 20 20 20 20 20 2f  le *pFrom;     /
12600 2a 20 54 61 62 6c 65 20 63 6f 6e 74 61 69 6e 69  * Table containi
12610 6e 67 20 74 68 65 20 52 45 46 45 52 45 4e 43 45  ng the REFERENCE
12620 53 20 63 6c 61 75 73 65 20 28 61 6b 61 3a 20 43  S clause (aka: C
12630 68 69 6c 64 29 20 2a 2f 0a 20 20 46 4b 65 79 20  hild) */.  FKey 
12640 2a 70 4e 65 78 74 46 72 6f 6d 3b 20 20 2f 2a 20  *pNextFrom;  /* 
12650 4e 65 78 74 20 46 4b 65 79 20 77 69 74 68 20 74  Next FKey with t
12660 68 65 20 73 61 6d 65 20 69 6e 20 70 46 72 6f 6d  he same in pFrom
12670 2e 20 4e 65 78 74 20 70 61 72 65 6e 74 20 6f 66  . Next parent of
12680 20 70 46 72 6f 6d 20 2a 2f 0a 20 20 63 68 61 72   pFrom */.  char
12690 20 2a 7a 54 6f 3b 20 20 20 20 20 20 20 20 2f 2a   *zTo;        /*
126a0 20 4e 61 6d 65 20 6f 66 20 74 61 62 6c 65 20 74   Name of table t
126b0 68 61 74 20 74 68 65 20 6b 65 79 20 70 6f 69 6e  hat the key poin
126c0 74 73 20 74 6f 20 28 61 6b 61 3a 20 50 61 72 65  ts to (aka: Pare
126d0 6e 74 29 20 2a 2f 0a 20 20 46 4b 65 79 20 2a 70  nt) */.  FKey *p
126e0 4e 65 78 74 54 6f 3b 20 20 20 20 2f 2a 20 4e 65  NextTo;    /* Ne
126f0 78 74 20 77 69 74 68 20 74 68 65 20 73 61 6d 65  xt with the same
12700 20 7a 54 6f 2e 20 4e 65 78 74 20 63 68 69 6c 64   zTo. Next child
12710 20 6f 66 20 7a 54 6f 2e 20 2a 2f 0a 20 20 46 4b   of zTo. */.  FK
12720 65 79 20 2a 70 50 72 65 76 54 6f 3b 20 20 20 20  ey *pPrevTo;    
12730 2f 2a 20 50 72 65 76 69 6f 75 73 20 77 69 74 68  /* Previous with
12740 20 74 68 65 20 73 61 6d 65 20 7a 54 6f 20 2a 2f   the same zTo */
12750 0a 20 20 69 6e 74 20 6e 43 6f 6c 3b 20 20 20 20  .  int nCol;    
12760 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
12770 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 69  f columns in thi
12780 73 20 6b 65 79 20 2a 2f 0a 20 20 2f 2a 20 45 56  s key */.  /* EV
12790 3a 20 52 2d 33 30 33 32 33 2d 32 31 39 31 37 20  : R-30323-21917 
127a0 2a 2f 0a 20 20 75 38 20 69 73 44 65 66 65 72 72  */.  u8 isDeferr
127b0 65 64 3b 20 20 20 20 20 20 20 2f 2a 20 54 72 75  ed;       /* Tru
127c0 65 20 69 66 20 63 6f 6e 73 74 72 61 69 6e 74 20  e if constraint 
127d0 63 68 65 63 6b 69 6e 67 20 69 73 20 64 65 66 65  checking is defe
127e0 72 72 65 64 20 74 69 6c 6c 20 43 4f 4d 4d 49 54  rred till COMMIT
127f0 20 2a 2f 0a 20 20 75 38 20 61 41 63 74 69 6f 6e   */.  u8 aAction
12800 5b 32 5d 3b 20 20 20 20 20 20 20 20 2f 2a 20 4f  [2];        /* O
12810 4e 20 44 45 4c 45 54 45 20 61 6e 64 20 4f 4e 20  N DELETE and ON 
12820 55 50 44 41 54 45 20 61 63 74 69 6f 6e 73 2c 20  UPDATE actions, 
12830 72 65 73 70 65 63 74 69 76 65 6c 79 20 2a 2f 0a  respectively */.
12840 20 20 54 72 69 67 67 65 72 20 2a 61 70 54 72 69    Trigger *apTri
12850 67 67 65 72 5b 32 5d 3b 2f 2a 20 54 72 69 67 67  gger[2];/* Trigg
12860 65 72 73 20 66 6f 72 20 61 41 63 74 69 6f 6e 5b  ers for aAction[
12870 5d 20 61 63 74 69 6f 6e 73 20 2a 2f 0a 20 20 73  ] actions */.  s
12880 74 72 75 63 74 20 73 43 6f 6c 4d 61 70 20 7b 20  truct sColMap { 
12890 20 20 20 20 20 2f 2a 20 4d 61 70 70 69 6e 67 20       /* Mapping 
128a0 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 70 46  of columns in pF
128b0 72 6f 6d 20 74 6f 20 63 6f 6c 75 6d 6e 73 20 69  rom to columns i
128c0 6e 20 7a 54 6f 20 2a 2f 0a 20 20 20 20 69 6e 74  n zTo */.    int
128d0 20 69 46 72 6f 6d 3b 20 20 20 20 20 20 20 20 20   iFrom;         
128e0 20 20 20 2f 2a 20 49 6e 64 65 78 20 6f 66 20 63     /* Index of c
128f0 6f 6c 75 6d 6e 20 69 6e 20 70 46 72 6f 6d 20 2a  olumn in pFrom *
12900 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a 43 6f 6c  /.    char *zCol
12910 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e  ;           /* N
12920 61 6d 65 20 6f 66 20 63 6f 6c 75 6d 6e 20 69 6e  ame of column in
12930 20 7a 54 6f 2e 20 20 49 66 20 4e 55 4c 4c 20 75   zTo.  If NULL u
12940 73 65 20 50 52 49 4d 41 52 59 20 4b 45 59 20 2a  se PRIMARY KEY *
12950 2f 0a 20 20 7d 20 61 43 6f 6c 5b 31 5d 3b 20 20  /.  } aCol[1];  
12960 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65            /* One
12970 20 65 6e 74 72 79 20 66 6f 72 20 65 61 63 68 20   entry for each 
12980 6f 66 20 6e 43 6f 6c 20 63 6f 6c 75 6d 6e 73 20  of nCol columns 
12990 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 53 51 4c  */.};../*.** SQL
129a0 69 74 65 20 73 75 70 70 6f 72 74 73 20 6d 61 6e  ite supports man
129b0 79 20 64 69 66 66 65 72 65 6e 74 20 77 61 79 73  y different ways
129c0 20 74 6f 20 72 65 73 6f 6c 76 65 20 61 20 63 6f   to resolve a co
129d0 6e 73 74 72 61 69 6e 74 0a 2a 2a 20 65 72 72 6f  nstraint.** erro
129e0 72 2e 20 20 52 4f 4c 4c 42 41 43 4b 20 70 72 6f  r.  ROLLBACK pro
129f0 63 65 73 73 69 6e 67 20 6d 65 61 6e 73 20 74 68  cessing means th
12a00 61 74 20 61 20 63 6f 6e 73 74 72 61 69 6e 74 20  at a constraint 
12a10 76 69 6f 6c 61 74 69 6f 6e 0a 2a 2a 20 63 61 75  violation.** cau
12a20 73 65 73 20 74 68 65 20 6f 70 65 72 61 74 69 6f  ses the operatio
12a30 6e 20 69 6e 20 70 72 6f 63 65 73 73 20 74 6f 20  n in process to 
12a40 66 61 69 6c 20 61 6e 64 20 66 6f 72 20 74 68 65  fail and for the
12a50 20 63 75 72 72 65 6e 74 20 74 72 61 6e 73 61 63   current transac
12a60 74 69 6f 6e 0a 2a 2a 20 74 6f 20 62 65 20 72 6f  tion.** to be ro
12a70 6c 6c 65 64 20 62 61 63 6b 2e 20 20 41 42 4f 52  lled back.  ABOR
12a80 54 20 70 72 6f 63 65 73 73 69 6e 67 20 6d 65 61  T processing mea
12a90 6e 73 20 74 68 65 20 6f 70 65 72 61 74 69 6f 6e  ns the operation
12aa0 20 69 6e 20 70 72 6f 63 65 73 73 0a 2a 2a 20 66   in process.** f
12ab0 61 69 6c 73 20 61 6e 64 20 61 6e 79 20 70 72 69  ails and any pri
12ac0 6f 72 20 63 68 61 6e 67 65 73 20 66 72 6f 6d 20  or changes from 
12ad0 74 68 61 74 20 6f 6e 65 20 6f 70 65 72 61 74 69  that one operati
12ae0 6f 6e 20 61 72 65 20 62 61 63 6b 65 64 20 6f 75  on are backed ou
12af0 74 2c 0a 2a 2a 20 62 75 74 20 74 68 65 20 74 72  t,.** but the tr
12b00 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 6e 6f 74  ansaction is not
12b10 20 72 6f 6c 6c 65 64 20 62 61 63 6b 2e 20 20 46   rolled back.  F
12b20 41 49 4c 20 70 72 6f 63 65 73 73 69 6e 67 20 6d  AIL processing m
12b30 65 61 6e 73 20 74 68 61 74 0a 2a 2a 20 74 68 65  eans that.** the
12b40 20 6f 70 65 72 61 74 69 6f 6e 20 69 6e 20 70 72   operation in pr
12b50 6f 67 72 65 73 73 20 73 74 6f 70 73 20 61 6e 64  ogress stops and
12b60 20 72 65 74 75 72 6e 73 20 61 6e 20 65 72 72 6f   returns an erro
12b70 72 20 63 6f 64 65 2e 20 20 42 75 74 20 70 72 69  r code.  But pri
12b80 6f 72 0a 2a 2a 20 63 68 61 6e 67 65 73 20 64 75  or.** changes du
12b90 65 20 74 6f 20 74 68 65 20 73 61 6d 65 20 6f 70  e to the same op
12ba0 65 72 61 74 69 6f 6e 20 61 72 65 20 6e 6f 74 20  eration are not 
12bb0 62 61 63 6b 65 64 20 6f 75 74 20 61 6e 64 20 6e  backed out and n
12bc0 6f 20 72 6f 6c 6c 62 61 63 6b 0a 2a 2a 20 6f 63  o rollback.** oc
12bd0 63 75 72 73 2e 20 20 49 47 4e 4f 52 45 20 6d 65  curs.  IGNORE me
12be0 61 6e 73 20 74 68 61 74 20 74 68 65 20 70 61 72  ans that the par
12bf0 74 69 63 75 6c 61 72 20 72 6f 77 20 74 68 61 74  ticular row that
12c00 20 63 61 75 73 65 64 20 74 68 65 20 63 6f 6e 73   caused the cons
12c10 74 72 61 69 6e 74 0a 2a 2a 20 65 72 72 6f 72 20  traint.** error 
12c20 69 73 20 6e 6f 74 20 69 6e 73 65 72 74 65 64 20  is not inserted 
12c30 6f 72 20 75 70 64 61 74 65 64 2e 20 20 50 72 6f  or updated.  Pro
12c40 63 65 73 73 69 6e 67 20 63 6f 6e 74 69 6e 75 65  cessing continue
12c50 73 20 61 6e 64 20 6e 6f 20 65 72 72 6f 72 0a 2a  s and no error.*
12c60 2a 20 69 73 20 72 65 74 75 72 6e 65 64 2e 20 20  * is returned.  
12c70 52 45 50 4c 41 43 45 20 6d 65 61 6e 73 20 74 68  REPLACE means th
12c80 61 74 20 70 72 65 65 78 69 73 74 69 6e 67 20 64  at preexisting d
12c90 61 74 61 62 61 73 65 20 72 6f 77 73 20 74 68 61  atabase rows tha
12ca0 74 20 63 61 75 73 65 64 0a 2a 2a 20 61 20 55 4e  t caused.** a UN
12cb0 49 51 55 45 20 63 6f 6e 73 74 72 61 69 6e 74 20  IQUE constraint 
12cc0 76 69 6f 6c 61 74 69 6f 6e 20 61 72 65 20 72 65  violation are re
12cd0 6d 6f 76 65 64 20 73 6f 20 74 68 61 74 20 74 68  moved so that th
12ce0 65 20 6e 65 77 20 69 6e 73 65 72 74 20 6f 72 0a  e new insert or.
12cf0 2a 2a 20 75 70 64 61 74 65 20 63 61 6e 20 70 72  ** update can pr
12d00 6f 63 65 65 64 2e 20 20 50 72 6f 63 65 73 73 69  oceed.  Processi
12d10 6e 67 20 63 6f 6e 74 69 6e 75 65 73 20 61 6e 64  ng continues and
12d20 20 6e 6f 20 65 72 72 6f 72 20 69 73 20 72 65 70   no error is rep
12d30 6f 72 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 52 45 53  orted..**.** RES
12d40 54 52 49 43 54 2c 20 53 45 54 4e 55 4c 4c 2c 20  TRICT, SETNULL, 
12d50 61 6e 64 20 43 41 53 43 41 44 45 20 61 63 74 69  and CASCADE acti
12d60 6f 6e 73 20 61 70 70 6c 79 20 6f 6e 6c 79 20 74  ons apply only t
12d70 6f 20 66 6f 72 65 69 67 6e 20 6b 65 79 73 2e 0a  o foreign keys..
12d80 2a 2a 20 52 45 53 54 52 49 43 54 20 69 73 20 74  ** RESTRICT is t
12d90 68 65 20 73 61 6d 65 20 61 73 20 41 42 4f 52 54  he same as ABORT
12da0 20 66 6f 72 20 49 4d 4d 45 44 49 41 54 45 20 66   for IMMEDIATE f
12db0 6f 72 65 69 67 6e 20 6b 65 79 73 20 61 6e 64 20  oreign keys and 
12dc0 74 68 65 0a 2a 2a 20 73 61 6d 65 20 61 73 20 52  the.** same as R
12dd0 4f 4c 4c 42 41 43 4b 20 66 6f 72 20 44 45 46 45  OLLBACK for DEFE
12de0 52 52 45 44 20 6b 65 79 73 2e 20 20 53 45 54 4e  RRED keys.  SETN
12df0 55 4c 4c 20 6d 65 61 6e 73 20 74 68 61 74 20 74  ULL means that t
12e00 68 65 20 66 6f 72 65 69 67 6e 0a 2a 2a 20 6b 65  he foreign.** ke
12e10 79 20 69 73 20 73 65 74 20 74 6f 20 4e 55 4c 4c  y is set to NULL
12e20 2e 20 20 43 41 53 43 41 44 45 20 6d 65 61 6e 73  .  CASCADE means
12e30 20 74 68 61 74 20 61 20 44 45 4c 45 54 45 20 6f   that a DELETE o
12e40 72 20 55 50 44 41 54 45 20 6f 66 20 74 68 65 0a  r UPDATE of the.
12e50 2a 2a 20 72 65 66 65 72 65 6e 63 65 64 20 74 61  ** referenced ta
12e60 62 6c 65 20 72 6f 77 20 69 73 20 70 72 6f 70 61  ble row is propa
12e70 67 61 74 65 64 20 69 6e 74 6f 20 74 68 65 20 72  gated into the r
12e80 6f 77 20 74 68 61 74 20 68 6f 6c 64 73 20 74 68  ow that holds th
12e90 65 0a 2a 2a 20 66 6f 72 65 69 67 6e 20 6b 65 79  e.** foreign key
12ea0 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c  ..**.** The foll
12eb0 6f 77 69 6e 67 20 73 79 6d 62 6f 6c 69 63 20 76  owing symbolic v
12ec0 61 6c 75 65 73 20 61 72 65 20 75 73 65 64 20 74  alues are used t
12ed0 6f 20 72 65 63 6f 72 64 20 77 68 69 63 68 20 74  o record which t
12ee0 79 70 65 0a 2a 2a 20 6f 66 20 61 63 74 69 6f 6e  ype.** of action
12ef0 20 74 6f 20 74 61 6b 65 2e 0a 2a 2f 0a 23 64 65   to take..*/.#de
12f00 66 69 6e 65 20 4f 45 5f 4e 6f 6e 65 20 20 20 20  fine OE_None    
12f10 20 30 20 20 20 2f 2a 20 54 68 65 72 65 20 69 73   0   /* There is
12f20 20 6e 6f 20 63 6f 6e 73 74 72 61 69 6e 74 20 74   no constraint t
12f30 6f 20 63 68 65 63 6b 20 2a 2f 0a 23 64 65 66 69  o check */.#defi
12f40 6e 65 20 4f 45 5f 52 6f 6c 6c 62 61 63 6b 20 31  ne OE_Rollback 1
12f50 20 20 20 2f 2a 20 46 61 69 6c 20 74 68 65 20 6f     /* Fail the o
12f60 70 65 72 61 74 69 6f 6e 20 61 6e 64 20 72 6f 6c  peration and rol
12f70 6c 62 61 63 6b 20 74 68 65 20 74 72 61 6e 73 61  lback the transa
12f80 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65  ction */.#define
12f90 20 4f 45 5f 41 62 6f 72 74 20 20 20 20 32 20 20   OE_Abort    2  
12fa0 20 2f 2a 20 42 61 63 6b 20 6f 75 74 20 63 68 61   /* Back out cha
12fb0 6e 67 65 73 20 62 75 74 20 64 6f 20 6e 6f 20 72  nges but do no r
12fc0 6f 6c 6c 62 61 63 6b 20 74 72 61 6e 73 61 63 74  ollback transact
12fd0 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  ion */.#define O
12fe0 45 5f 46 61 69 6c 20 20 20 20 20 33 20 20 20 2f  E_Fail     3   /
12ff0 2a 20 53 74 6f 70 20 74 68 65 20 6f 70 65 72 61  * Stop the opera
13000 74 69 6f 6e 20 62 75 74 20 6c 65 61 76 65 20 61  tion but leave a
13010 6c 6c 20 70 72 69 6f 72 20 63 68 61 6e 67 65 73  ll prior changes
13020 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 49   */.#define OE_I
13030 67 6e 6f 72 65 20 20 20 34 20 20 20 2f 2a 20 49  gnore   4   /* I
13040 67 6e 6f 72 65 20 74 68 65 20 65 72 72 6f 72 2e  gnore the error.
13050 20 44 6f 20 6e 6f 74 20 64 6f 20 74 68 65 20 49   Do not do the I
13060 4e 53 45 52 54 20 6f 72 20 55 50 44 41 54 45 20  NSERT or UPDATE 
13070 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 52 65  */.#define OE_Re
13080 70 6c 61 63 65 20 20 35 20 20 20 2f 2a 20 44 65  place  5   /* De
13090 6c 65 74 65 20 65 78 69 73 74 69 6e 67 20 72 65  lete existing re
130a0 63 6f 72 64 2c 20 74 68 65 6e 20 64 6f 20 49 4e  cord, then do IN
130b0 53 45 52 54 20 6f 72 20 55 50 44 41 54 45 20 2a  SERT or UPDATE *
130c0 2f 0a 0a 23 64 65 66 69 6e 65 20 4f 45 5f 52 65  /..#define OE_Re
130d0 73 74 72 69 63 74 20 36 20 20 20 2f 2a 20 4f 45  strict 6   /* OE
130e0 5f 41 62 6f 72 74 20 66 6f 72 20 49 4d 4d 45 44  _Abort for IMMED
130f0 49 41 54 45 2c 20 4f 45 5f 52 6f 6c 6c 62 61 63  IATE, OE_Rollbac
13100 6b 20 66 6f 72 20 44 45 46 45 52 52 45 44 20 2a  k for DEFERRED *
13110 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 53 65 74  /.#define OE_Set
13120 4e 75 6c 6c 20 20 37 20 20 20 2f 2a 20 53 65 74  Null  7   /* Set
13130 20 74 68 65 20 66 6f 72 65 69 67 6e 20 6b 65 79   the foreign key
13140 20 76 61 6c 75 65 20 74 6f 20 4e 55 4c 4c 20 2a   value to NULL *
13150 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 53 65 74  /.#define OE_Set
13160 44 66 6c 74 20 20 38 20 20 20 2f 2a 20 53 65 74  Dflt  8   /* Set
13170 20 74 68 65 20 66 6f 72 65 69 67 6e 20 6b 65 79   the foreign key
13180 20 76 61 6c 75 65 20 74 6f 20 69 74 73 20 64 65   value to its de
13190 66 61 75 6c 74 20 2a 2f 0a 23 64 65 66 69 6e 65  fault */.#define
131a0 20 4f 45 5f 43 61 73 63 61 64 65 20 20 39 20 20   OE_Cascade  9  
131b0 20 2f 2a 20 43 61 73 63 61 64 65 20 74 68 65 20   /* Cascade the 
131c0 63 68 61 6e 67 65 73 20 2a 2f 0a 0a 23 64 65 66  changes */..#def
131d0 69 6e 65 20 4f 45 5f 44 65 66 61 75 6c 74 20 20  ine OE_Default  
131e0 31 30 20 20 2f 2a 20 44 6f 20 77 68 61 74 65 76  10  /* Do whatev
131f0 65 72 20 74 68 65 20 64 65 66 61 75 6c 74 20 61  er the default a
13200 63 74 69 6f 6e 20 69 73 20 2a 2f 0a 0a 0a 2f 2a  ction is */.../*
13210 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20  .** An instance 
13220 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  of the following
13230 20 73 74 72 75 63 74 75 72 65 20 69 73 20 70 61   structure is pa
13240 73 73 65 64 20 61 73 20 74 68 65 20 66 69 72 73  ssed as the firs
13250 74 0a 2a 2a 20 61 72 67 75 6d 65 6e 74 20 74 6f  t.** argument to
13260 20 73 71 6c 69 74 65 33 56 64 62 65 4b 65 79 43   sqlite3VdbeKeyC
13270 6f 6d 70 61 72 65 20 61 6e 64 20 69 73 20 75 73  ompare and is us
13280 65 64 20 74 6f 20 63 6f 6e 74 72 6f 6c 20 74 68  ed to control th
13290 65 0a 2a 2a 20 63 6f 6d 70 61 72 69 73 6f 6e 20  e.** comparison 
132a0 6f 66 20 74 68 65 20 74 77 6f 20 69 6e 64 65 78  of the two index
132b0 20 6b 65 79 73 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74   keys..**.** Not
132c0 65 20 74 68 61 74 20 61 53 6f 72 74 4f 72 64 65  e that aSortOrde
132d0 72 5b 5d 20 61 6e 64 20 61 43 6f 6c 6c 5b 5d 20  r[] and aColl[] 
132e0 68 61 76 65 20 6e 46 69 65 6c 64 2b 31 20 73 6c  have nField+1 sl
132f0 6f 74 73 2e 20 20 54 68 65 72 65 0a 2a 2a 20 61  ots.  There.** a
13300 72 65 20 6e 46 69 65 6c 64 20 73 6c 6f 74 73 20  re nField slots 
13310 66 6f 72 20 74 68 65 20 63 6f 6c 75 6d 6e 73 20  for the columns 
13320 6f 66 20 61 6e 20 69 6e 64 65 78 20 74 68 65 6e  of an index then
13330 20 6f 6e 65 20 65 78 74 72 61 20 73 6c 6f 74 0a   one extra slot.
13340 2a 2a 20 66 6f 72 20 74 68 65 20 72 6f 77 69 64  ** for the rowid
13350 20 61 74 20 74 68 65 20 65 6e 64 2e 0a 2a 2f 0a   at the end..*/.
13360 73 74 72 75 63 74 20 4b 65 79 49 6e 66 6f 20 7b  struct KeyInfo {
13370 0a 20 20 75 33 32 20 6e 52 65 66 3b 20 20 20 20  .  u32 nRef;    
13380 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
13390 20 6f 66 20 72 65 66 65 72 65 6e 63 65 73 20 74   of references t
133a0 6f 20 74 68 69 73 20 4b 65 79 49 6e 66 6f 20 6f  o this KeyInfo o
133b0 62 6a 65 63 74 20 2a 2f 0a 20 20 75 38 20 65 6e  bject */.  u8 en
133c0 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  c;             /
133d0 2a 20 54 65 78 74 20 65 6e 63 6f 64 69 6e 67 20  * Text encoding 
133e0 2d 20 6f 6e 65 20 6f 66 20 74 68 65 20 53 51 4c  - one of the SQL
133f0 49 54 45 5f 55 54 46 2a 20 76 61 6c 75 65 73 20  ITE_UTF* values 
13400 2a 2f 0a 20 20 75 31 36 20 6e 46 69 65 6c 64 3b  */.  u16 nField;
13410 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
13420 65 72 20 6f 66 20 6b 65 79 20 63 6f 6c 75 6d 6e  er of key column
13430 73 20 69 6e 20 74 68 65 20 69 6e 64 65 78 20 2a  s in the index *
13440 2f 0a 20 20 75 31 36 20 6e 58 46 69 65 6c 64 3b  /.  u16 nXField;
13450 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
13460 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 62 65 79  r of columns bey
13470 6f 6e 64 20 74 68 65 20 6b 65 79 20 63 6f 6c 75  ond the key colu
13480 6d 6e 73 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33  mns */.  sqlite3
13490 20 2a 64 62 3b 20 20 20 20 20 20 20 20 2f 2a 20   *db;        /* 
134a0 54 68 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e  The database con
134b0 6e 65 63 74 69 6f 6e 20 2a 2f 0a 20 20 75 38 20  nection */.  u8 
134c0 2a 61 53 6f 72 74 4f 72 64 65 72 3b 20 20 20 20  *aSortOrder;    
134d0 20 2f 2a 20 53 6f 72 74 20 6f 72 64 65 72 20 66   /* Sort order f
134e0 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e 2e 20  or each column. 
134f0 2a 2f 0a 20 20 43 6f 6c 6c 53 65 71 20 2a 61 43  */.  CollSeq *aC
13500 6f 6c 6c 5b 31 5d 3b 20 20 2f 2a 20 43 6f 6c 6c  oll[1];  /* Coll
13510 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 20 66  ating sequence f
13520 6f 72 20 65 61 63 68 20 74 65 72 6d 20 6f 66 20  or each term of 
13530 74 68 65 20 6b 65 79 20 2a 2f 0a 7d 3b 0a 0a 2f  the key */.};../
13540 2a 0a 2a 2a 20 54 68 69 73 20 6f 62 6a 65 63 74  *.** This object
13550 20 68 6f 6c 64 73 20 61 20 72 65 63 6f 72 64 20   holds a record 
13560 77 68 69 63 68 20 68 61 73 20 62 65 65 6e 20 70  which has been p
13570 61 72 73 65 64 20 6f 75 74 20 69 6e 74 6f 20 69  arsed out into i
13580 6e 64 69 76 69 64 75 61 6c 0a 2a 2a 20 66 69 65  ndividual.** fie
13590 6c 64 73 2c 20 66 6f 72 20 74 68 65 20 70 75 72  lds, for the pur
135a0 70 6f 73 65 73 20 6f 66 20 64 6f 69 6e 67 20 61  poses of doing a
135b0 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 0a 2a 2a 0a   comparison..**.
135c0 2a 2a 20 41 20 72 65 63 6f 72 64 20 69 73 20 61  ** A record is a
135d0 6e 20 6f 62 6a 65 63 74 20 74 68 61 74 20 63 6f  n object that co
135e0 6e 74 61 69 6e 73 20 6f 6e 65 20 6f 72 20 6d 6f  ntains one or mo
135f0 72 65 20 66 69 65 6c 64 73 20 6f 66 20 64 61 74  re fields of dat
13600 61 2e 0a 2a 2a 20 52 65 63 6f 72 64 73 20 61 72  a..** Records ar
13610 65 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20  e used to store 
13620 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 61  the content of a
13630 20 74 61 62 6c 65 20 72 6f 77 20 61 6e 64 20 74   table row and t
13640 6f 20 73 74 6f 72 65 0a 2a 2a 20 74 68 65 20 6b  o store.** the k
13650 65 79 20 6f 66 20 61 6e 20 69 6e 64 65 78 2e 20  ey of an index. 
13660 20 41 20 62 6c 6f 62 20 65 6e 63 6f 64 69 6e 67   A blob encoding
13670 20 6f 66 20 61 20 72 65 63 6f 72 64 20 69 73 20   of a record is 
13680 63 72 65 61 74 65 64 20 62 79 0a 2a 2a 20 74 68  created by.** th
13690 65 20 4f 50 5f 4d 61 6b 65 52 65 63 6f 72 64 20  e OP_MakeRecord 
136a0 6f 70 63 6f 64 65 20 6f 66 20 74 68 65 20 56 44  opcode of the VD
136b0 42 45 20 61 6e 64 20 69 73 20 64 69 73 61 73 73  BE and is disass
136c0 65 6d 62 6c 65 64 20 62 79 20 74 68 65 0a 2a 2a  embled by the.**
136d0 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 70 63 6f 64   OP_Column opcod
136e0 65 2e 0a 2a 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74  e..**.** An inst
136f0 61 6e 63 65 20 6f 66 20 74 68 69 73 20 6f 62 6a  ance of this obj
13700 65 63 74 20 73 65 72 76 65 73 20 61 73 20 61 20  ect serves as a 
13710 22 6b 65 79 22 20 66 6f 72 20 64 6f 69 6e 67 20  "key" for doing 
13720 61 20 73 65 61 72 63 68 20 6f 6e 0a 2a 2a 20 61  a search on.** a
13730 6e 20 69 6e 64 65 78 20 62 2b 74 72 65 65 2e 20  n index b+tree. 
13740 54 68 65 20 67 6f 61 6c 20 6f 66 20 74 68 65 20  The goal of the 
13750 73 65 61 72 63 68 20 69 73 20 74 6f 20 66 69 6e  search is to fin
13760 64 20 74 68 65 20 65 6e 74 72 79 20 74 68 61 74  d the entry that
13770 0a 2a 2a 20 69 73 20 63 6c 6f 73 65 64 20 74 6f  .** is closed to
13780 20 74 68 65 20 6b 65 79 20 64 65 73 63 72 69 62   the key describ
13790 65 64 20 62 79 20 74 68 69 73 20 6f 62 6a 65 63  ed by this objec
137a0 74 2e 20 20 54 68 69 73 20 6f 62 6a 65 63 74 20  t.  This object 
137b0 6d 69 67 68 74 20 68 6f 6c 64 0a 2a 2a 20 6a 75  might hold.** ju
137c0 73 74 20 61 20 70 72 65 66 69 78 20 6f 66 20 74  st a prefix of t
137d0 68 65 20 6b 65 79 2e 20 20 54 68 65 20 6e 75 6d  he key.  The num
137e0 62 65 72 20 6f 66 20 66 69 65 6c 64 73 20 69 73  ber of fields is
137f0 20 67 69 76 65 6e 20 62 79 0a 2a 2a 20 70 4b 65   given by.** pKe
13800 79 49 6e 66 6f 2d 3e 6e 46 69 65 6c 64 2e 0a 2a  yInfo->nField..*
13810 2a 0a 2a 2a 20 54 68 65 20 72 31 20 61 6e 64 20  *.** The r1 and 
13820 72 32 20 66 69 65 6c 64 73 20 61 72 65 20 74 68  r2 fields are th
13830 65 20 76 61 6c 75 65 73 20 74 6f 20 72 65 74 75  e values to retu
13840 72 6e 20 69 66 20 74 68 69 73 20 6b 65 79 20 69  rn if this key i
13850 73 20 6c 65 73 73 20 74 68 61 6e 0a 2a 2a 20 6f  s less than.** o
13860 72 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 61  r greater than a
13870 20 6b 65 79 20 69 6e 20 74 68 65 20 62 74 72 65   key in the btre
13880 65 2c 20 72 65 73 70 65 63 74 69 76 65 6c 79 2e  e, respectively.
13890 20 20 54 68 65 73 65 20 61 72 65 20 6e 6f 72 6d    These are norm
138a0 61 6c 6c 79 0a 2a 2a 20 2d 31 20 61 6e 64 20 2b  ally.** -1 and +
138b0 31 20 72 65 73 70 65 63 74 69 76 65 6c 79 2c 20  1 respectively, 
138c0 62 75 74 20 6d 69 67 68 74 20 62 65 20 69 6e 76  but might be inv
138d0 65 72 74 65 64 20 74 6f 20 2b 31 20 61 6e 64 20  erted to +1 and 
138e0 2d 31 20 69 66 20 74 68 65 20 62 2d 74 72 65 65  -1 if the b-tree
138f0 0a 2a 2a 20 69 73 20 69 6e 20 44 45 53 43 20 6f  .** is in DESC o
13900 72 64 65 72 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  rder..**.** The 
13910 6b 65 79 20 63 6f 6d 70 61 72 69 73 6f 6e 20 66  key comparison f
13920 75 6e 63 74 69 6f 6e 73 20 61 63 74 75 61 6c 6c  unctions actuall
13930 79 20 72 65 74 75 72 6e 20 64 65 66 61 75 6c 74  y return default
13940 5f 72 63 20 77 68 65 6e 20 74 68 65 79 20 66 69  _rc when they fi
13950 6e 64 0a 2a 2a 20 61 6e 20 65 71 75 61 6c 73 20  nd.** an equals 
13960 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 20 64 65 66  comparison.  def
13970 61 75 6c 74 5f 72 63 20 63 61 6e 20 62 65 20 2d  ault_rc can be -
13980 31 2c 20 30 2c 20 6f 72 20 2b 31 2e 20 20 49 66  1, 0, or +1.  If
13990 20 74 68 65 72 65 20 61 72 65 0a 2a 2a 20 6d 75   there are.** mu
139a0 6c 74 69 70 6c 65 20 65 6e 74 72 69 65 73 20 69  ltiple entries i
139b0 6e 20 74 68 65 20 62 2d 74 72 65 65 20 77 69 74  n the b-tree wit
139c0 68 20 74 68 65 20 73 61 6d 65 20 6b 65 79 20 28  h the same key (
139d0 77 68 65 6e 20 6f 6e 6c 79 20 6c 6f 6f 6b 69 6e  when only lookin
139e0 67 0a 2a 2a 20 61 74 20 74 68 65 20 66 69 72 73  g.** at the firs
139f0 74 20 70 4b 65 79 49 6e 66 6f 2d 3e 6e 46 69 65  t pKeyInfo->nFie
13a00 6c 64 73 2c 29 20 74 68 65 6e 20 64 65 66 61 75  lds,) then defau
13a10 6c 74 5f 72 63 20 63 61 6e 20 62 65 20 73 65 74  lt_rc can be set
13a20 20 74 6f 20 2d 31 20 74 6f 0a 2a 2a 20 63 61 75   to -1 to.** cau
13a30 73 65 20 74 68 65 20 73 65 61 72 63 68 20 74 6f  se the search to
13a40 20 66 69 6e 64 20 74 68 65 20 6c 61 73 74 20 6d   find the last m
13a50 61 74 63 68 2c 20 6f 72 20 2b 31 20 74 6f 20 63  atch, or +1 to c
13a60 61 75 73 65 20 74 68 65 20 73 65 61 72 63 68 20  ause the search 
13a70 74 6f 0a 2a 2a 20 66 69 6e 64 20 74 68 65 20 66  to.** find the f
13a80 69 72 73 74 20 6d 61 74 63 68 2e 0a 2a 2a 0a 2a  irst match..**.*
13a90 2a 20 54 68 65 20 6b 65 79 20 63 6f 6d 70 61 72  * The key compar
13aa0 69 73 6f 6e 20 66 75 6e 63 74 69 6f 6e 73 20 77  ison functions w
13ab0 69 6c 6c 20 73 65 74 20 65 71 53 65 65 6e 20 74  ill set eqSeen t
13ac0 6f 20 74 72 75 65 20 69 66 20 74 68 65 79 20 65  o true if they e
13ad0 76 65 72 0a 2a 2a 20 67 65 74 20 61 6e 64 20 65  ver.** get and e
13ae0 71 75 61 6c 20 72 65 73 75 6c 74 73 20 77 68 65  qual results whe
13af0 6e 20 63 6f 6d 70 61 72 69 6e 67 20 74 68 69 73  n comparing this
13b00 20 73 74 72 75 63 74 75 72 65 20 74 6f 20 61 20   structure to a 
13b10 62 2d 74 72 65 65 20 72 65 63 6f 72 64 2e 0a 2a  b-tree record..*
13b20 2a 20 57 68 65 6e 20 64 65 66 61 75 6c 74 5f 72  * When default_r
13b30 63 21 3d 30 2c 20 74 68 65 20 73 65 61 72 63 68  c!=0, the search
13b40 20 6d 69 67 68 74 20 65 6e 64 20 75 70 20 6f 6e   might end up on
13b50 20 74 68 65 20 72 65 63 6f 72 64 20 69 6d 6d 65   the record imme
13b60 64 69 61 74 65 6c 79 0a 2a 2a 20 62 65 66 6f 72  diately.** befor
13b70 65 20 74 68 65 20 66 69 72 73 74 20 6d 61 74 63  e the first matc
13b80 68 20 6f 72 20 69 6d 6d 65 64 69 61 74 65 6c 79  h or immediately
13b90 20 61 66 74 65 72 20 74 68 65 20 6c 61 73 74 20   after the last 
13ba0 6d 61 74 63 68 2e 20 20 54 68 65 0a 2a 2a 20 65  match.  The.** e
13bb0 71 53 65 65 6e 20 66 69 65 6c 64 20 77 69 6c 6c  qSeen field will
13bc0 20 69 6e 64 69 63 61 74 65 20 77 68 65 74 68 65   indicate whethe
13bd0 72 20 6f 72 20 6e 6f 74 20 61 6e 20 65 78 61 63  r or not an exac
13be0 74 20 6d 61 74 63 68 20 65 78 69 73 74 73 20 69  t match exists i
13bf0 6e 20 74 68 65 0a 2a 2a 20 62 2d 74 72 65 65 2e  n the.** b-tree.
13c00 0a 2a 2f 0a 73 74 72 75 63 74 20 55 6e 70 61 63  .*/.struct Unpac
13c10 6b 65 64 52 65 63 6f 72 64 20 7b 0a 20 20 4b 65  kedRecord {.  Ke
13c20 79 49 6e 66 6f 20 2a 70 4b 65 79 49 6e 66 6f 3b  yInfo *pKeyInfo;
13c30 20 20 2f 2a 20 43 6f 6c 6c 61 74 69 6f 6e 20 61    /* Collation a
13c40 6e 64 20 73 6f 72 74 2d 6f 72 64 65 72 20 69 6e  nd sort-order in
13c50 66 6f 72 6d 61 74 69 6f 6e 20 2a 2f 0a 20 20 4d  formation */.  M
13c60 65 6d 20 2a 61 4d 65 6d 3b 20 20 20 20 20 20 20  em *aMem;       
13c70 20 20 20 2f 2a 20 56 61 6c 75 65 73 20 2a 2f 0a     /* Values */.
13c80 20 20 75 31 36 20 6e 46 69 65 6c 64 3b 20 20 20    u16 nField;   
13c90 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
13ca0 6f 66 20 65 6e 74 72 69 65 73 20 69 6e 20 61 70  of entries in ap
13cb0 4d 65 6d 5b 5d 20 2a 2f 0a 20 20 69 38 20 64 65  Mem[] */.  i8 de
13cc0 66 61 75 6c 74 5f 72 63 3b 20 20 20 20 20 20 2f  fault_rc;      /
13cd0 2a 20 43 6f 6d 70 61 72 69 73 6f 6e 20 72 65 73  * Comparison res
13ce0 75 6c 74 20 69 66 20 6b 65 79 73 20 61 72 65 20  ult if keys are 
13cf0 65 71 75 61 6c 20 2a 2f 0a 20 20 75 38 20 65 72  equal */.  u8 er
13d00 72 43 6f 64 65 3b 20 20 20 20 20 20 20 20 20 2f  rCode;         /
13d10 2a 20 45 72 72 6f 72 20 64 65 74 65 63 74 65 64  * Error detected
13d20 20 62 79 20 78 52 65 63 6f 72 64 43 6f 6d 70 61   by xRecordCompa
13d30 72 65 20 28 43 4f 52 52 55 50 54 20 6f 72 20 4e  re (CORRUPT or N
13d40 4f 4d 45 4d 29 20 2a 2f 0a 20 20 69 38 20 72 31  OMEM) */.  i8 r1
13d50 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
13d60 2a 20 56 61 6c 75 65 20 74 6f 20 72 65 74 75 72  * Value to retur
13d70 6e 20 69 66 20 28 6c 68 73 20 3e 20 72 68 73 29  n if (lhs > rhs)
13d80 20 2a 2f 0a 20 20 69 38 20 72 32 3b 20 20 20 20   */.  i8 r2;    
13d90 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c            /* Val
13da0 75 65 20 74 6f 20 72 65 74 75 72 6e 20 69 66 20  ue to return if 
13db0 28 72 68 73 20 3c 20 6c 68 73 29 20 2a 2f 0a 20  (rhs < lhs) */. 
13dc0 20 75 38 20 65 71 53 65 65 6e 3b 20 20 20 20 20   u8 eqSeen;     
13dd0 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20       /* True if 
13de0 61 6e 20 65 71 75 61 6c 69 74 79 20 63 6f 6d 70  an equality comp
13df0 61 72 69 73 6f 6e 20 68 61 73 20 62 65 65 6e 20  arison has been 
13e00 73 65 65 6e 20 2a 2f 0a 7d 3b 0a 0a 0a 2f 2a 0a  seen */.};.../*.
13e10 2a 2a 20 45 61 63 68 20 53 51 4c 20 69 6e 64 65  ** Each SQL inde
13e20 78 20 69 73 20 72 65 70 72 65 73 65 6e 74 65 64  x is represented
13e30 20 69 6e 20 6d 65 6d 6f 72 79 20 62 79 20 61 6e   in memory by an
13e40 0a 2a 2a 20 69 6e 73 74 61 6e 63 65 20 6f 66 20  .** instance of 
13e50 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74  the following st
13e60 72 75 63 74 75 72 65 2e 0a 2a 2a 0a 2a 2a 20 54  ructure..**.** T
13e70 68 65 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 74 68  he columns of th
13e80 65 20 74 61 62 6c 65 20 74 68 61 74 20 61 72 65  e table that are
13e90 20 74 6f 20 62 65 20 69 6e 64 65 78 65 64 20 61   to be indexed a
13ea0 72 65 20 64 65 73 63 72 69 62 65 64 0a 2a 2a 20  re described.** 
13eb0 62 79 20 74 68 65 20 61 69 43 6f 6c 75 6d 6e 5b  by the aiColumn[
13ec0 5d 20 66 69 65 6c 64 20 6f 66 20 74 68 69 73 20  ] field of this 
13ed0 73 74 72 75 63 74 75 72 65 2e 20 20 46 6f 72 20  structure.  For 
13ee0 65 78 61 6d 70 6c 65 2c 20 73 75 70 70 6f 73 65  example, suppose
13ef0 0a 2a 2a 20 77 65 20 68 61 76 65 20 74 68 65 20  .** we have the 
13f00 66 6f 6c 6c 6f 77 69 6e 67 20 74 61 62 6c 65 20  following table 
13f10 61 6e 64 20 69 6e 64 65 78 3a 0a 2a 2a 0a 2a 2a  and index:.**.**
13f20 20 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c       CREATE TABL
13f30 45 20 45 78 31 28 63 31 20 69 6e 74 2c 20 63 32  E Ex1(c1 int, c2
13f40 20 69 6e 74 2c 20 63 33 20 74 65 78 74 29 3b 0a   int, c3 text);.
13f50 2a 2a 20 20 20 20 20 43 52 45 41 54 45 20 49 4e  **     CREATE IN
13f60 44 45 58 20 45 78 32 20 4f 4e 20 45 78 31 28 63  DEX Ex2 ON Ex1(c
13f70 33 2c 63 31 29 3b 0a 2a 2a 0a 2a 2a 20 49 6e 20  3,c1);.**.** In 
13f80 74 68 65 20 54 61 62 6c 65 20 73 74 72 75 63 74  the Table struct
13f90 75 72 65 20 64 65 73 63 72 69 62 69 6e 67 20 45  ure describing E
13fa0 78 31 2c 20 6e 43 6f 6c 3d 3d 33 20 62 65 63 61  x1, nCol==3 beca
13fb0 75 73 65 20 74 68 65 72 65 20 61 72 65 0a 2a 2a  use there are.**
13fc0 20 74 68 72 65 65 20 63 6f 6c 75 6d 6e 73 20 69   three columns i
13fd0 6e 20 74 68 65 20 74 61 62 6c 65 2e 20 20 49 6e  n the table.  In
13fe0 20 74 68 65 20 49 6e 64 65 78 20 73 74 72 75 63   the Index struc
13ff0 74 75 72 65 20 64 65 73 63 72 69 62 69 6e 67 0a  ture describing.
14000 2a 2a 20 45 78 32 2c 20 6e 43 6f 6c 75 6d 6e 3d  ** Ex2, nColumn=
14010 3d 32 20 73 69 6e 63 65 20 32 20 6f 66 20 74 68  =2 since 2 of th
14020 65 20 33 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 45  e 3 columns of E
14030 78 31 20 61 72 65 20 69 6e 64 65 78 65 64 2e 0a  x1 are indexed..
14040 2a 2a 20 54 68 65 20 76 61 6c 75 65 20 6f 66 20  ** The value of 
14050 61 69 43 6f 6c 75 6d 6e 20 69 73 20 7b 32 2c 20  aiColumn is {2, 
14060 30 7d 2e 20 20 61 69 43 6f 6c 75 6d 6e 5b 30 5d  0}.  aiColumn[0]
14070 3d 3d 32 20 62 65 63 61 75 73 65 20 74 68 65 0a  ==2 because the.
14080 2a 2a 20 66 69 72 73 74 20 63 6f 6c 75 6d 6e 20  ** first column 
14090 74 6f 20 62 65 20 69 6e 64 65 78 65 64 20 28 63  to be indexed (c
140a0 33 29 20 68 61 73 20 61 6e 20 69 6e 64 65 78 20  3) has an index 
140b0 6f 66 20 32 20 69 6e 20 45 78 31 2e 61 43 6f 6c  of 2 in Ex1.aCol
140c0 5b 5d 2e 0a 2a 2a 20 54 68 65 20 73 65 63 6f 6e  []..** The secon
140d0 64 20 63 6f 6c 75 6d 6e 20 74 6f 20 62 65 20 69  d column to be i
140e0 6e 64 65 78 65 64 20 28 63 31 29 20 68 61 73 20  ndexed (c1) has 
140f0 61 6e 20 69 6e 64 65 78 20 6f 66 20 30 20 69 6e  an index of 0 in
14100 0a 2a 2a 20 45 78 31 2e 61 43 6f 6c 5b 5d 2c 20  .** Ex1.aCol[], 
14110 68 65 6e 63 65 20 45 78 32 2e 61 69 43 6f 6c 75  hence Ex2.aiColu
14120 6d 6e 5b 31 5d 3d 3d 30 2e 0a 2a 2a 0a 2a 2a 20  mn[1]==0..**.** 
14130 54 68 65 20 49 6e 64 65 78 2e 6f 6e 45 72 72 6f  The Index.onErro
14140 72 20 66 69 65 6c 64 20 64 65 74 65 72 6d 69 6e  r field determin
14150 65 73 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f  es whether or no
14160 74 20 74 68 65 20 69 6e 64 65 78 65 64 20 63 6f  t the indexed co
14170 6c 75 6d 6e 73 0a 2a 2a 20 6d 75 73 74 20 62 65  lumns.** must be
14180 20 75 6e 69 71 75 65 20 61 6e 64 20 77 68 61 74   unique and what
14190 20 74 6f 20 64 6f 20 69 66 20 74 68 65 79 20 61   to do if they a
141a0 72 65 20 6e 6f 74 2e 20 20 57 68 65 6e 20 49 6e  re not.  When In
141b0 64 65 78 2e 6f 6e 45 72 72 6f 72 3d 4f 45 5f 4e  dex.onError=OE_N
141c0 6f 6e 65 2c 0a 2a 2a 20 69 74 20 6d 65 61 6e 73  one,.** it means
141d0 20 74 68 69 73 20 69 73 20 6e 6f 74 20 61 20 75   this is not a u
141e0 6e 69 71 75 65 20 69 6e 64 65 78 2e 20 20 4f 74  nique index.  Ot
141f0 68 65 72 77 69 73 65 20 69 74 20 69 73 20 61 20  herwise it is a 
14200 75 6e 69 71 75 65 20 69 6e 64 65 78 0a 2a 2a 20  unique index.** 
14210 61 6e 64 20 74 68 65 20 76 61 6c 75 65 20 6f 66  and the value of
14220 20 49 6e 64 65 78 2e 6f 6e 45 72 72 6f 72 20 69   Index.onError i
14230 6e 64 69 63 61 74 65 20 74 68 65 20 77 68 69 63  ndicate the whic
14240 68 20 63 6f 6e 66 6c 69 63 74 20 72 65 73 6f 6c  h conflict resol
14250 75 74 69 6f 6e 0a 2a 2a 20 61 6c 67 6f 72 69 74  ution.** algorit
14260 68 6d 20 74 6f 20 65 6d 70 6c 6f 79 20 77 68 65  hm to employ whe
14270 6e 65 76 65 72 20 61 6e 20 61 74 74 65 6d 70 74  never an attempt
14280 20 69 73 20 6d 61 64 65 20 74 6f 20 69 6e 73 65   is made to inse
14290 72 74 20 61 20 6e 6f 6e 2d 75 6e 69 71 75 65 0a  rt a non-unique.
142a0 2a 2a 20 65 6c 65 6d 65 6e 74 2e 0a 2a 2a 0a 2a  ** element..**.*
142b0 2a 20 57 68 69 6c 65 20 70 61 72 73 69 6e 67 20  * While parsing 
142c0 61 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 6f  a CREATE TABLE o
142d0 72 20 43 52 45 41 54 45 20 49 4e 44 45 58 20 73  r CREATE INDEX s
142e0 74 61 74 65 6d 65 6e 74 20 69 6e 20 6f 72 64 65  tatement in orde
142f0 72 20 74 6f 0a 2a 2a 20 67 65 6e 65 72 61 74 65  r to.** generate
14300 20 56 44 42 45 20 63 6f 64 65 20 28 61 73 20 6f   VDBE code (as o
14310 70 70 6f 73 65 64 20 74 6f 20 70 61 72 73 69 6e  pposed to parsin
14320 67 20 6f 6e 65 20 72 65 61 64 20 66 72 6f 6d 20  g one read from 
14330 61 6e 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72  an sqlite_master
14340 0a 2a 2a 20 74 61 62 6c 65 20 61 73 20 70 61 72  .** table as par
14350 74 20 6f 66 20 70 61 72 73 69 6e 67 20 61 6e 20  t of parsing an 
14360 65 78 69 73 74 69 6e 67 20 64 61 74 61 62 61 73  existing databas
14370 65 20 73 63 68 65 6d 61 29 2c 20 74 72 61 6e 73  e schema), trans
14380 69 65 6e 74 20 69 6e 73 74 61 6e 63 65 73 0a 2a  ient instances.*
14390 2a 20 6f 66 20 74 68 69 73 20 73 74 72 75 63 74  * of this struct
143a0 75 72 65 20 6d 61 79 20 62 65 20 63 72 65 61 74  ure may be creat
143b0 65 64 2e 20 49 6e 20 74 68 69 73 20 63 61 73 65  ed. In this case
143c0 20 74 68 65 20 49 6e 64 65 78 2e 74 6e 75 6d 20   the Index.tnum 
143d0 76 61 72 69 61 62 6c 65 20 69 73 0a 2a 2a 20 75  variable is.** u
143e0 73 65 64 20 74 6f 20 73 74 6f 72 65 20 74 68 65  sed to store the
143f0 20 61 64 64 72 65 73 73 20 6f 66 20 61 20 56 44   address of a VD
14400 42 45 20 69 6e 73 74 72 75 63 74 69 6f 6e 2c 20  BE instruction, 
14410 6e 6f 74 20 61 20 64 61 74 61 62 61 73 65 20 70  not a database p
14420 61 67 65 0a 2a 2a 20 6e 75 6d 62 65 72 20 28 69  age.** number (i
14430 74 20 63 61 6e 6e 6f 74 20 2d 20 74 68 65 20 64  t cannot - the d
14440 61 74 61 62 61 73 65 20 70 61 67 65 20 69 73 20  atabase page is 
14450 6e 6f 74 20 61 6c 6c 6f 63 61 74 65 64 20 75 6e  not allocated un
14460 74 69 6c 20 74 68 65 20 56 44 42 45 0a 2a 2a 20  til the VDBE.** 
14470 70 72 6f 67 72 61 6d 20 69 73 20 65 78 65 63 75  program is execu
14480 74 65 64 29 2e 20 53 65 65 20 63 6f 6e 76 65 72  ted). See conver
14490 74 54 6f 57 69 74 68 6f 75 74 52 6f 77 69 64 54  tToWithoutRowidT
144a0 61 62 6c 65 28 29 20 66 6f 72 20 64 65 74 61 69  able() for detai
144b0 6c 73 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 49 6e  ls..*/.struct In
144c0 64 65 78 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e  dex {.  char *zN
144d0 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ame;            
144e0 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 69 73   /* Name of this
144f0 20 69 6e 64 65 78 20 2a 2f 0a 20 20 69 31 36 20   index */.  i16 
14500 2a 61 69 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20  *aiColumn;      
14510 20 20 20 20 20 2f 2a 20 57 68 69 63 68 20 63 6f       /* Which co
14520 6c 75 6d 6e 73 20 61 72 65 20 75 73 65 64 20 62  lumns are used b
14530 79 20 74 68 69 73 20 69 6e 64 65 78 2e 20 20 31  y this index.  1
14540 73 74 20 69 73 20 30 20 2a 2f 0a 20 20 4c 6f 67  st is 0 */.  Log
14550 45 73 74 20 2a 61 69 52 6f 77 4c 6f 67 45 73 74  Est *aiRowLogEst
14560 3b 20 20 20 20 20 2f 2a 20 46 72 6f 6d 20 41 4e  ;     /* From AN
14570 41 4c 59 5a 45 3a 20 45 73 74 2e 20 72 6f 77 73  ALYZE: Est. rows
14580 20 73 65 6c 65 63 74 65 64 20 62 79 20 65 61 63   selected by eac
14590 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 54 61  h column */.  Ta
145a0 62 6c 65 20 2a 70 54 61 62 6c 65 3b 20 20 20 20  ble *pTable;    
145b0 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 53 51         /* The SQ
145c0 4c 20 74 61 62 6c 65 20 62 65 69 6e 67 20 69 6e  L table being in
145d0 64 65 78 65 64 20 2a 2f 0a 20 20 63 68 61 72 20  dexed */.  char 
145e0 2a 7a 43 6f 6c 41 66 66 3b 20 20 20 20 20 20 20  *zColAff;       
145f0 20 20 20 20 2f 2a 20 53 74 72 69 6e 67 20 64 65      /* String de
14600 66 69 6e 69 6e 67 20 74 68 65 20 61 66 66 69 6e  fining the affin
14610 69 74 79 20 6f 66 20 65 61 63 68 20 63 6f 6c 75  ity of each colu
14620 6d 6e 20 2a 2f 0a 20 20 49 6e 64 65 78 20 2a 70  mn */.  Index *p
14630 4e 65 78 74 3b 20 20 20 20 20 20 20 20 20 20 20  Next;           
14640 20 2f 2a 20 54 68 65 20 6e 65 78 74 20 69 6e 64   /* The next ind
14650 65 78 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  ex associated wi
14660 74 68 20 74 68 65 20 73 61 6d 65 20 74 61 62 6c  th the same tabl
14670 65 20 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70  e */.  Schema *p
14680 53 63 68 65 6d 61 3b 20 20 20 20 20 20 20 20 20  Schema;         
14690 2f 2a 20 53 63 68 65 6d 61 20 63 6f 6e 74 61 69  /* Schema contai
146a0 6e 69 6e 67 20 74 68 69 73 20 69 6e 64 65 78 20  ning this index 
146b0 2a 2f 0a 20 20 75 38 20 2a 61 53 6f 72 74 4f 72  */.  u8 *aSortOr
146c0 64 65 72 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  der;          /*
146d0 20 66 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e   for each column
146e0 3a 20 54 72 75 65 3d 3d 44 45 53 43 2c 20 46 61  : True==DESC, Fa
146f0 6c 73 65 3d 3d 41 53 43 20 2a 2f 0a 20 20 63 6f  lse==ASC */.  co
14700 6e 73 74 20 63 68 61 72 20 2a 2a 61 7a 43 6f 6c  nst char **azCol
14710 6c 3b 20 20 20 20 20 2f 2a 20 41 72 72 61 79 20  l;     /* Array 
14720 6f 66 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71  of collation seq
14730 75 65 6e 63 65 20 6e 61 6d 65 73 20 66 6f 72 20  uence names for 
14740 69 6e 64 65 78 20 2a 2f 0a 20 20 45 78 70 72 20  index */.  Expr 
14750 2a 70 50 61 72 74 49 64 78 57 68 65 72 65 3b 20  *pPartIdxWhere; 
14760 20 20 20 20 2f 2a 20 57 48 45 52 45 20 63 6c 61      /* WHERE cla
14770 75 73 65 20 66 6f 72 20 70 61 72 74 69 61 6c 20  use for partial 
14780 69 6e 64 69 63 65 73 20 2a 2f 0a 20 20 45 78 70  indices */.  Exp
14790 72 4c 69 73 74 20 2a 61 43 6f 6c 45 78 70 72 3b  rList *aColExpr;
147a0 20 20 20 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20        /* Column 
147b0 65 78 70 72 65 73 73 69 6f 6e 73 20 2a 2f 0a 20  expressions */. 
147c0 20 69 6e 74 20 74 6e 75 6d 3b 20 20 20 20 20 20   int tnum;      
147d0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 42 20            /* DB 
147e0 50 61 67 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20  Page containing 
147f0 72 6f 6f 74 20 6f 66 20 74 68 69 73 20 69 6e 64  root of this ind
14800 65 78 20 2a 2f 0a 20 20 4c 6f 67 45 73 74 20 73  ex */.  LogEst s
14810 7a 49 64 78 52 6f 77 3b 20 20 20 20 20 20 20 20  zIdxRow;        
14820 20 2f 2a 20 45 73 74 69 6d 61 74 65 64 20 61 76   /* Estimated av
14830 65 72 61 67 65 20 72 6f 77 20 73 69 7a 65 20 69  erage row size i
14840 6e 20 62 79 74 65 73 20 2a 2f 0a 20 20 75 31 36  n bytes */.  u16
14850 20 6e 4b 65 79 43 6f 6c 3b 20 20 20 20 20 20 20   nKeyCol;       
14860 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
14870 6f 66 20 63 6f 6c 75 6d 6e 73 20 66 6f 72 6d 69  of columns formi
14880 6e 67 20 74 68 65 20 6b 65 79 20 2a 2f 0a 20 20  ng the key */.  
14890 75 31 36 20 6e 43 6f 6c 75 6d 6e 3b 20 20 20 20  u16 nColumn;    
148a0 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
148b0 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 73 74  er of columns st
148c0 6f 72 65 64 20 69 6e 20 74 68 65 20 69 6e 64 65  ored in the inde
148d0 78 20 2a 2f 0a 20 20 75 38 20 6f 6e 45 72 72 6f  x */.  u8 onErro
148e0 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  r;              
148f0 2f 2a 20 4f 45 5f 41 62 6f 72 74 2c 20 4f 45 5f  /* OE_Abort, OE_
14900 49 67 6e 6f 72 65 2c 20 4f 45 5f 52 65 70 6c 61  Ignore, OE_Repla
14910 63 65 2c 20 6f 72 20 4f 45 5f 4e 6f 6e 65 20 2a  ce, or OE_None *
14920 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 69 64 78  /.  unsigned idx
14930 54 79 70 65 3a 32 3b 20 20 20 20 20 20 2f 2a 20  Type:2;      /* 
14940 31 3d 3d 55 4e 49 51 55 45 2c 20 32 3d 3d 50 52  1==UNIQUE, 2==PR
14950 49 4d 41 52 59 20 4b 45 59 2c 20 30 3d 3d 43 52  IMARY KEY, 0==CR
14960 45 41 54 45 20 49 4e 44 45 58 20 2a 2f 0a 20 20  EATE INDEX */.  
14970 75 6e 73 69 67 6e 65 64 20 62 55 6e 6f 72 64 65  unsigned bUnorde
14980 72 65 64 3a 31 3b 20 20 20 2f 2a 20 55 73 65 20  red:1;   /* Use 
14990 74 68 69 73 20 69 6e 64 65 78 20 66 6f 72 20 3d  this index for =
149a0 3d 20 6f 72 20 49 4e 20 71 75 65 72 69 65 73 20  = or IN queries 
149b0 6f 6e 6c 79 20 2a 2f 0a 20 20 75 6e 73 69 67 6e  only */.  unsign
149c0 65 64 20 75 6e 69 71 4e 6f 74 4e 75 6c 6c 3a 31  ed uniqNotNull:1
149d0 3b 20 20 2f 2a 20 54 72 75 65 20 69 66 20 55 4e  ;  /* True if UN
149e0 49 51 55 45 20 61 6e 64 20 4e 4f 54 20 4e 55 4c  IQUE and NOT NUL
149f0 4c 20 66 6f 72 20 61 6c 6c 20 63 6f 6c 75 6d 6e  L for all column
14a00 73 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20  s */.  unsigned 
14a10 69 73 52 65 73 69 7a 65 64 3a 31 3b 20 20 20 20  isResized:1;    
14a20 2f 2a 20 54 72 75 65 20 69 66 20 72 65 73 69 7a  /* True if resiz
14a30 65 49 6e 64 65 78 4f 62 6a 65 63 74 28 29 20 68  eIndexObject() h
14a40 61 73 20 62 65 65 6e 20 63 61 6c 6c 65 64 20 2a  as been called *
14a50 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 69 73 43  /.  unsigned isC
14a60 6f 76 65 72 69 6e 67 3a 31 3b 20 20 20 2f 2a 20  overing:1;   /* 
14a70 54 72 75 65 20 69 66 20 74 68 69 73 20 69 73 20  True if this is 
14a80 61 20 63 6f 76 65 72 69 6e 67 20 69 6e 64 65 78  a covering index
14a90 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 6e   */.  unsigned n
14aa0 6f 53 6b 69 70 53 63 61 6e 3a 31 3b 20 20 20 2f  oSkipScan:1;   /
14ab0 2a 20 44 6f 20 6e 6f 74 20 74 72 79 20 74 6f 20  * Do not try to 
14ac0 75 73 65 20 73 6b 69 70 2d 73 63 61 6e 20 69 66  use skip-scan if
14ad0 20 74 72 75 65 20 2a 2f 0a 23 69 66 64 65 66 20   true */.#ifdef 
14ae0 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54  SQLITE_ENABLE_ST
14af0 41 54 33 5f 4f 52 5f 53 54 41 54 34 0a 20 20 69  AT3_OR_STAT4.  i
14b00 6e 74 20 6e 53 61 6d 70 6c 65 3b 20 20 20 20 20  nt nSample;     
14b10 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
14b20 72 20 6f 66 20 65 6c 65 6d 65 6e 74 73 20 69 6e  r of elements in
14b30 20 61 53 61 6d 70 6c 65 5b 5d 20 2a 2f 0a 20 20   aSample[] */.  
14b40 69 6e 74 20 6e 53 61 6d 70 6c 65 43 6f 6c 3b 20  int nSampleCol; 
14b50 20 20 20 20 20 20 20 20 20 2f 2a 20 53 69 7a 65           /* Size
14b60 20 6f 66 20 49 6e 64 65 78 53 61 6d 70 6c 65 2e   of IndexSample.
14b70 61 6e 45 71 5b 5d 20 61 6e 64 20 73 6f 20 6f 6e  anEq[] and so on
14b80 20 2a 2f 0a 20 20 74 52 6f 77 63 6e 74 20 2a 61   */.  tRowcnt *a
14b90 41 76 67 45 71 3b 20 20 20 20 20 20 20 20 20 2f  AvgEq;         /
14ba0 2a 20 41 76 65 72 61 67 65 20 6e 45 71 20 76 61  * Average nEq va
14bb0 6c 75 65 73 20 66 6f 72 20 6b 65 79 73 20 6e 6f  lues for keys no
14bc0 74 20 69 6e 20 61 53 61 6d 70 6c 65 20 2a 2f 0a  t in aSample */.
14bd0 20 20 49 6e 64 65 78 53 61 6d 70 6c 65 20 2a 61    IndexSample *a
14be0 53 61 6d 70 6c 65 3b 20 20 20 20 2f 2a 20 53 61  Sample;    /* Sa
14bf0 6d 70 6c 65 73 20 6f 66 20 74 68 65 20 6c 65 66  mples of the lef
14c00 74 2d 6d 6f 73 74 20 6b 65 79 20 2a 2f 0a 20 20  t-most key */.  
14c10 74 52 6f 77 63 6e 74 20 2a 61 69 52 6f 77 45 73  tRowcnt *aiRowEs
14c20 74 3b 20 20 20 20 20 20 20 2f 2a 20 4e 6f 6e 2d  t;       /* Non-
14c30 6c 6f 67 61 72 69 74 68 6d 69 63 20 73 74 61 74  logarithmic stat
14c40 31 20 64 61 74 61 20 66 6f 72 20 74 68 69 73 20  1 data for this 
14c50 69 6e 64 65 78 20 2a 2f 0a 20 20 74 52 6f 77 63  index */.  tRowc
14c60 6e 74 20 6e 52 6f 77 45 73 74 30 3b 20 20 20 20  nt nRowEst0;    
14c70 20 20 20 20 2f 2a 20 4e 6f 6e 2d 6c 6f 67 61 72      /* Non-logar
14c80 69 74 68 6d 69 63 20 6e 75 6d 62 65 72 20 6f 66  ithmic number of
14c90 20 72 6f 77 73 20 69 6e 20 74 68 65 20 69 6e 64   rows in the ind
14ca0 65 78 20 2a 2f 0a 23 65 6e 64 69 66 0a 7d 3b 0a  ex */.#endif.};.
14cb0 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 76  ./*.** Allowed v
14cc0 61 6c 75 65 73 20 66 6f 72 20 49 6e 64 65 78 2e  alues for Index.
14cd0 69 64 78 54 79 70 65 0a 2a 2f 0a 23 64 65 66 69  idxType.*/.#defi
14ce0 6e 65 20 53 51 4c 49 54 45 5f 49 44 58 54 59 50  ne SQLITE_IDXTYP
14cf0 45 5f 41 50 50 44 45 46 20 20 20 20 20 20 30 20  E_APPDEF      0 
14d00 20 20 2f 2a 20 43 72 65 61 74 65 64 20 75 73 69    /* Created usi
14d10 6e 67 20 43 52 45 41 54 45 20 49 4e 44 45 58 20  ng CREATE INDEX 
14d20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
14d30 45 5f 49 44 58 54 59 50 45 5f 55 4e 49 51 55 45  E_IDXTYPE_UNIQUE
14d40 20 20 20 20 20 20 31 20 20 20 2f 2a 20 49 6d 70        1   /* Imp
14d50 6c 65 6d 65 6e 74 73 20 61 20 55 4e 49 51 55 45  lements a UNIQUE
14d60 20 63 6f 6e 73 74 72 61 69 6e 74 20 2a 2f 0a 23   constraint */.#
14d70 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49 44  define SQLITE_ID
14d80 58 54 59 50 45 5f 50 52 49 4d 41 52 59 4b 45 59  XTYPE_PRIMARYKEY
14d90 20 20 32 20 20 20 2f 2a 20 49 73 20 74 68 65 20    2   /* Is the 
14da0 50 52 49 4d 41 52 59 20 4b 45 59 20 66 6f 72 20  PRIMARY KEY for 
14db0 74 68 65 20 74 61 62 6c 65 20 2a 2f 0a 0a 2f 2a  the table */../*
14dc0 20 52 65 74 75 72 6e 20 74 72 75 65 20 69 66 20   Return true if 
14dd0 69 6e 64 65 78 20 58 20 69 73 20 61 20 50 52 49  index X is a PRI
14de0 4d 41 52 59 20 4b 45 59 20 69 6e 64 65 78 20 2a  MARY KEY index *
14df0 2f 0a 23 64 65 66 69 6e 65 20 49 73 50 72 69 6d  /.#define IsPrim
14e00 61 72 79 4b 65 79 49 6e 64 65 78 28 58 29 20 20  aryKeyIndex(X)  
14e10 28 28 58 29 2d 3e 69 64 78 54 79 70 65 3d 3d 53  ((X)->idxType==S
14e20 51 4c 49 54 45 5f 49 44 58 54 59 50 45 5f 50 52  QLITE_IDXTYPE_PR
14e30 49 4d 41 52 59 4b 45 59 29 0a 0a 2f 2a 20 52 65  IMARYKEY)../* Re
14e40 74 75 72 6e 20 74 72 75 65 20 69 66 20 69 6e 64  turn true if ind
14e50 65 78 20 58 20 69 73 20 61 20 55 4e 49 51 55 45  ex X is a UNIQUE
14e60 20 69 6e 64 65 78 20 2a 2f 0a 23 64 65 66 69 6e   index */.#defin
14e70 65 20 49 73 55 6e 69 71 75 65 49 6e 64 65 78 28  e IsUniqueIndex(
14e80 58 29 20 20 20 20 20 20 28 28 58 29 2d 3e 6f 6e  X)      ((X)->on
14e90 45 72 72 6f 72 21 3d 4f 45 5f 4e 6f 6e 65 29 0a  Error!=OE_None).
14ea0 0a 2f 2a 20 54 68 65 20 49 6e 64 65 78 2e 61 69  ./* The Index.ai
14eb0 43 6f 6c 75 6d 6e 5b 5d 20 76 61 6c 75 65 73 20  Column[] values 
14ec0 61 72 65 20 6e 6f 72 6d 61 6c 6c 79 20 70 6f 73  are normally pos
14ed0 69 74 69 76 65 20 69 6e 74 65 67 65 72 2e 20 20  itive integer.  
14ee0 42 75 74 0a 2a 2a 20 74 68 65 72 65 20 61 72 65  But.** there are
14ef0 20 73 6f 6d 65 20 6e 65 67 61 74 69 76 65 20 76   some negative v
14f00 61 6c 75 65 73 20 74 68 61 74 20 68 61 76 65 20  alues that have 
14f10 73 70 65 63 69 61 6c 20 6d 65 61 6e 69 6e 67 3a  special meaning:
14f20 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 58 4e 5f 52  .*/.#define XN_R
14f30 4f 57 49 44 20 20 20 20 20 28 2d 31 29 20 20 20  OWID     (-1)   
14f40 20 20 2f 2a 20 49 6e 64 65 78 65 64 20 63 6f 6c    /* Indexed col
14f50 75 6d 6e 20 69 73 20 74 68 65 20 72 6f 77 69 64  umn is the rowid
14f60 20 2a 2f 0a 23 64 65 66 69 6e 65 20 58 4e 5f 45   */.#define XN_E
14f70 58 50 52 20 20 20 20 20 20 28 2d 32 29 20 20 20  XPR      (-2)   
14f80 20 20 2f 2a 20 49 6e 64 65 78 65 64 20 63 6f 6c    /* Indexed col
14f90 75 6d 6e 20 69 73 20 61 6e 20 65 78 70 72 65 73  umn is an expres
14fa0 73 69 6f 6e 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 45  sion */../*.** E
14fb0 61 63 68 20 73 61 6d 70 6c 65 20 73 74 6f 72 65  ach sample store
14fc0 64 20 69 6e 20 74 68 65 20 73 71 6c 69 74 65 5f  d in the sqlite_
14fd0 73 74 61 74 33 20 74 61 62 6c 65 20 69 73 20 72  stat3 table is r
14fe0 65 70 72 65 73 65 6e 74 65 64 20 69 6e 20 6d 65  epresented in me
14ff0 6d 6f 72 79 0a 2a 2a 20 75 73 69 6e 67 20 61 20  mory.** using a 
15000 73 74 72 75 63 74 75 72 65 20 6f 66 20 74 68 69  structure of thi
15010 73 20 74 79 70 65 2e 20 20 53 65 65 20 64 6f 63  s type.  See doc
15020 75 6d 65 6e 74 61 74 69 6f 6e 20 61 74 20 74 68  umentation at th
15030 65 20 74 6f 70 20 6f 66 20 74 68 65 0a 2a 2a 20  e top of the.** 
15040 61 6e 61 6c 79 7a 65 2e 63 20 73 6f 75 72 63 65  analyze.c source
15050 20 66 69 6c 65 20 66 6f 72 20 61 64 64 69 74 69   file for additi
15060 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  onal information
15070 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 49 6e 64 65  ..*/.struct Inde
15080 78 53 61 6d 70 6c 65 20 7b 0a 20 20 76 6f 69 64  xSample {.  void
15090 20 2a 70 3b 20 20 20 20 20 20 20 20 20 20 2f 2a   *p;          /*
150a0 20 50 6f 69 6e 74 65 72 20 74 6f 20 73 61 6d 70   Pointer to samp
150b0 6c 65 64 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20  led record */.  
150c0 69 6e 74 20 6e 3b 20 20 20 20 20 20 20 20 20 20  int n;          
150d0 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20 72 65 63    /* Size of rec
150e0 6f 72 64 20 69 6e 20 62 79 74 65 73 20 2a 2f 0a  ord in bytes */.
150f0 20 20 74 52 6f 77 63 6e 74 20 2a 61 6e 45 71 3b    tRowcnt *anEq;
15100 20 20 20 20 2f 2a 20 45 73 74 2e 20 6e 75 6d 62      /* Est. numb
15110 65 72 20 6f 66 20 72 6f 77 73 20 77 68 65 72 65  er of rows where
15120 20 74 68 65 20 6b 65 79 20 65 71 75 61 6c 73 20   the key equals 
15130 74 68 69 73 20 73 61 6d 70 6c 65 20 2a 2f 0a 20  this sample */. 
15140 20 74 52 6f 77 63 6e 74 20 2a 61 6e 4c 74 3b 20   tRowcnt *anLt; 
15150 20 20 20 2f 2a 20 45 73 74 2e 20 6e 75 6d 62 65     /* Est. numbe
15160 72 20 6f 66 20 72 6f 77 73 20 77 68 65 72 65 20  r of rows where 
15170 6b 65 79 20 69 73 20 6c 65 73 73 20 74 68 61 6e  key is less than
15180 20 74 68 69 73 20 73 61 6d 70 6c 65 20 2a 2f 0a   this sample */.
15190 20 20 74 52 6f 77 63 6e 74 20 2a 61 6e 44 4c 74    tRowcnt *anDLt
151a0 3b 20 20 20 2f 2a 20 45 73 74 2e 20 6e 75 6d 62  ;   /* Est. numb
151b0 65 72 20 6f 66 20 64 69 73 74 69 6e 63 74 20 6b  er of distinct k
151c0 65 79 73 20 6c 65 73 73 20 74 68 61 6e 20 74 68  eys less than th
151d0 69 73 20 73 61 6d 70 6c 65 20 2a 2f 0a 7d 3b 0a  is sample */.};.
151e0 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 74 6f 6b 65  ./*.** Each toke
151f0 6e 20 63 6f 6d 69 6e 67 20 6f 75 74 20 6f 66 20  n coming out of 
15200 74 68 65 20 6c 65 78 65 72 20 69 73 20 61 6e 20  the lexer is an 
15210 69 6e 73 74 61 6e 63 65 20 6f 66 0a 2a 2a 20 74  instance of.** t
15220 68 69 73 20 73 74 72 75 63 74 75 72 65 2e 20 20  his structure.  
15230 54 6f 6b 65 6e 73 20 61 72 65 20 61 6c 73 6f 20  Tokens are also 
15240 75 73 65 64 20 61 73 20 70 61 72 74 20 6f 66 20  used as part of 
15250 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 2e 0a 2a  an expression..*
15260 2a 0a 2a 2a 20 4e 6f 74 65 20 69 66 20 54 6f 6b  *.** Note if Tok
15270 65 6e 2e 7a 3d 3d 30 20 74 68 65 6e 20 54 6f 6b  en.z==0 then Tok
15280 65 6e 2e 64 79 6e 20 61 6e 64 20 54 6f 6b 65 6e  en.dyn and Token
15290 2e 6e 20 61 72 65 20 75 6e 64 65 66 69 6e 65 64  .n are undefined
152a0 20 61 6e 64 0a 2a 2a 20 6d 61 79 20 63 6f 6e 74   and.** may cont
152b0 61 69 6e 20 72 61 6e 64 6f 6d 20 76 61 6c 75 65  ain random value
152c0 73 2e 20 20 44 6f 20 6e 6f 74 20 6d 61 6b 65 20  s.  Do not make 
152d0 61 6e 79 20 61 73 73 75 6d 70 74 69 6f 6e 73 20  any assumptions 
152e0 61 62 6f 75 74 20 54 6f 6b 65 6e 2e 64 79 6e 0a  about Token.dyn.
152f0 2a 2a 20 61 6e 64 20 54 6f 6b 65 6e 2e 6e 20 77  ** and Token.n w
15300 68 65 6e 20 54 6f 6b 65 6e 2e 7a 3d 3d 30 2e 0a  hen Token.z==0..
15310 2a 2f 0a 73 74 72 75 63 74 20 54 6f 6b 65 6e 20  */.struct Token 
15320 7b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  {.  const char *
15330 7a 3b 20 20 20 20 20 2f 2a 20 54 65 78 74 20 6f  z;     /* Text o
15340 66 20 74 68 65 20 74 6f 6b 65 6e 2e 20 20 4e 6f  f the token.  No
15350 74 20 4e 55 4c 4c 2d 74 65 72 6d 69 6e 61 74 65  t NULL-terminate
15360 64 21 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64  d! */.  unsigned
15370 20 69 6e 74 20 6e 3b 20 20 20 20 2f 2a 20 4e 75   int n;    /* Nu
15380 6d 62 65 72 20 6f 66 20 63 68 61 72 61 63 74 65  mber of characte
15390 72 73 20 69 6e 20 74 68 69 73 20 74 6f 6b 65 6e  rs in this token
153a0 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e   */.};../*.** An
153b0 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 69   instance of thi
153c0 73 20 73 74 72 75 63 74 75 72 65 20 63 6f 6e 74  s structure cont
153d0 61 69 6e 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  ains information
153e0 20 6e 65 65 64 65 64 20 74 6f 20 67 65 6e 65 72   needed to gener
153f0 61 74 65 0a 2a 2a 20 63 6f 64 65 20 66 6f 72 20  ate.** code for 
15400 61 20 53 45 4c 45 43 54 20 74 68 61 74 20 63 6f  a SELECT that co
15410 6e 74 61 69 6e 73 20 61 67 67 72 65 67 61 74 65  ntains aggregate
15420 20 66 75 6e 63 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a   functions..**.*
15430 2a 20 49 66 20 45 78 70 72 2e 6f 70 3d 3d 54 4b  * If Expr.op==TK
15440 5f 41 47 47 5f 43 4f 4c 55 4d 4e 20 6f 72 20 54  _AGG_COLUMN or T
15450 4b 5f 41 47 47 5f 46 55 4e 43 54 49 4f 4e 20 74  K_AGG_FUNCTION t
15460 68 65 6e 20 45 78 70 72 2e 70 41 67 67 49 6e 66  hen Expr.pAggInf
15470 6f 20 69 73 20 61 0a 2a 2a 20 70 6f 69 6e 74 65  o is a.** pointe
15480 72 20 74 6f 20 74 68 69 73 20 73 74 72 75 63 74  r to this struct
15490 75 72 65 2e 20 20 54 68 65 20 45 78 70 72 2e 69  ure.  The Expr.i
154a0 43 6f 6c 75 6d 6e 20 66 69 65 6c 64 20 69 73 20  Column field is 
154b0 74 68 65 20 69 6e 64 65 78 20 69 6e 0a 2a 2a 20  the index in.** 
154c0 41 67 67 49 6e 66 6f 2e 61 43 6f 6c 5b 5d 20 6f  AggInfo.aCol[] o
154d0 72 20 41 67 67 49 6e 66 6f 2e 61 46 75 6e 63 5b  r AggInfo.aFunc[
154e0 5d 20 6f 66 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  ] of information
154f0 20 6e 65 65 64 65 64 20 74 6f 20 67 65 6e 65 72   needed to gener
15500 61 74 65 0a 2a 2a 20 63 6f 64 65 20 66 6f 72 20  ate.** code for 
15510 74 68 61 74 20 6e 6f 64 65 2e 0a 2a 2a 0a 2a 2a  that node..**.**
15520 20 41 67 67 49 6e 66 6f 2e 70 47 72 6f 75 70 42   AggInfo.pGroupB
15530 79 20 61 6e 64 20 41 67 67 49 6e 66 6f 2e 61 46  y and AggInfo.aF
15540 75 6e 63 2e 70 45 78 70 72 20 70 6f 69 6e 74 20  unc.pExpr point 
15550 74 6f 20 66 69 65 6c 64 73 20 77 69 74 68 69 6e  to fields within
15560 20 74 68 65 0a 2a 2a 20 6f 72 69 67 69 6e 61 6c   the.** original
15570 20 53 65 6c 65 63 74 20 73 74 72 75 63 74 75 72   Select structur
15580 65 20 74 68 61 74 20 64 65 73 63 72 69 62 65 73  e that describes
15590 20 74 68 65 20 53 45 4c 45 43 54 20 73 74 61 74   the SELECT stat
155a0 65 6d 65 6e 74 2e 20 20 54 68 65 73 65 0a 2a 2a  ement.  These.**
155b0 20 66 69 65 6c 64 73 20 64 6f 20 6e 6f 74 20 6e   fields do not n
155c0 65 65 64 20 74 6f 20 62 65 20 66 72 65 65 64 20  eed to be freed 
155d0 77 68 65 6e 20 64 65 61 6c 6c 6f 63 61 74 69 6e  when deallocatin
155e0 67 20 74 68 65 20 41 67 67 49 6e 66 6f 20 73 74  g the AggInfo st
155f0 72 75 63 74 75 72 65 2e 0a 2a 2f 0a 73 74 72 75  ructure..*/.stru
15600 63 74 20 41 67 67 49 6e 66 6f 20 7b 0a 20 20 75  ct AggInfo {.  u
15610 38 20 64 69 72 65 63 74 4d 6f 64 65 3b 20 20 20  8 directMode;   
15620 20 20 20 20 20 20 20 2f 2a 20 44 69 72 65 63 74         /* Direct
15630 20 72 65 6e 64 65 72 69 6e 67 20 6d 6f 64 65 20   rendering mode 
15640 6d 65 61 6e 73 20 74 61 6b 65 20 64 61 74 61 20  means take data 
15650 64 69 72 65 63 74 6c 79 0a 20 20 20 20 20 20 20  directly.       
15660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15670 20 20 20 2a 2a 20 66 72 6f 6d 20 73 6f 75 72 63     ** from sourc
15680 65 20 74 61 62 6c 65 73 20 72 61 74 68 65 72 20  e tables rather 
15690 74 68 61 6e 20 66 72 6f 6d 20 61 63 63 75 6d 75  than from accumu
156a0 6c 61 74 6f 72 73 20 2a 2f 0a 20 20 75 38 20 75  lators */.  u8 u
156b0 73 65 53 6f 72 74 69 6e 67 49 64 78 3b 20 20 20  seSortingIdx;   
156c0 20 20 20 20 2f 2a 20 49 6e 20 64 69 72 65 63 74      /* In direct
156d0 20 6d 6f 64 65 2c 20 72 65 66 65 72 65 6e 63 65   mode, reference
156e0 20 74 68 65 20 73 6f 72 74 69 6e 67 20 69 6e 64   the sorting ind
156f0 65 78 20 72 61 74 68 65 72 0a 20 20 20 20 20 20  ex rather.      
15700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15710 20 20 20 20 2a 2a 20 74 68 61 6e 20 74 68 65 20      ** than the 
15720 73 6f 75 72 63 65 20 74 61 62 6c 65 20 2a 2f 0a  source table */.
15730 20 20 69 6e 74 20 73 6f 72 74 69 6e 67 49 64 78    int sortingIdx
15740 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 43 75 72  ;         /* Cur
15750 73 6f 72 20 6e 75 6d 62 65 72 20 6f 66 20 74 68  sor number of th
15760 65 20 73 6f 72 74 69 6e 67 20 69 6e 64 65 78 20  e sorting index 
15770 2a 2f 0a 20 20 69 6e 74 20 73 6f 72 74 69 6e 67  */.  int sorting
15780 49 64 78 50 54 61 62 3b 20 20 20 20 20 2f 2a 20  IdxPTab;     /* 
15790 43 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 6f 66  Cursor number of
157a0 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 20 2a 2f   pseudo-table */
157b0 0a 20 20 69 6e 74 20 6e 53 6f 72 74 69 6e 67 43  .  int nSortingC
157c0 6f 6c 75 6d 6e 3b 20 20 20 20 20 2f 2a 20 4e 75  olumn;     /* Nu
157d0 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20  mber of columns 
157e0 69 6e 20 74 68 65 20 73 6f 72 74 69 6e 67 20 69  in the sorting i
157f0 6e 64 65 78 20 2a 2f 0a 20 20 69 6e 74 20 6d 6e  ndex */.  int mn
15800 52 65 67 2c 20 6d 78 52 65 67 3b 20 20 20 20 20  Reg, mxReg;     
15810 20 20 2f 2a 20 52 61 6e 67 65 20 6f 66 20 72 65    /* Range of re
15820 67 69 73 74 65 72 73 20 61 6c 6c 6f 63 61 74 65  gisters allocate
15830 64 20 66 6f 72 20 61 43 6f 6c 20 61 6e 64 20 61  d for aCol and a
15840 46 75 6e 63 20 2a 2f 0a 20 20 45 78 70 72 4c 69  Func */.  ExprLi
15850 73 74 20 2a 70 47 72 6f 75 70 42 79 3b 20 20 20  st *pGroupBy;   
15860 20 20 2f 2a 20 54 68 65 20 67 72 6f 75 70 20 62    /* The group b
15870 79 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 73 74  y clause */.  st
15880 72 75 63 74 20 41 67 67 49 6e 66 6f 5f 63 6f 6c  ruct AggInfo_col
15890 20 7b 20 20 20 20 2f 2a 20 46 6f 72 20 65 61 63   {    /* For eac
158a0 68 20 63 6f 6c 75 6d 6e 20 75 73 65 64 20 69 6e  h column used in
158b0 20 73 6f 75 72 63 65 20 74 61 62 6c 65 73 20 2a   source tables *
158c0 2f 0a 20 20 20 20 54 61 62 6c 65 20 2a 70 54 61  /.    Table *pTa
158d0 62 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  b;             /
158e0 2a 20 53 6f 75 72 63 65 20 74 61 62 6c 65 20 2a  * Source table *
158f0 2f 0a 20 20 20 20 69 6e 74 20 69 54 61 62 6c 65  /.    int iTable
15900 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
15910 2a 20 43 75 72 73 6f 72 20 6e 75 6d 62 65 72 20  * Cursor number 
15920 6f 66 20 74 68 65 20 73 6f 75 72 63 65 20 74 61  of the source ta
15930 62 6c 65 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69  ble */.    int i
15940 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20 20  Column;         
15950 20 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20 6e 75      /* Column nu
15960 6d 62 65 72 20 77 69 74 68 69 6e 20 74 68 65 20  mber within the 
15970 73 6f 75 72 63 65 20 74 61 62 6c 65 20 2a 2f 0a  source table */.
15980 20 20 20 20 69 6e 74 20 69 53 6f 72 74 65 72 43      int iSorterC
15990 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20 2f 2a 20  olumn;       /* 
159a0 43 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 69 6e  Column number in
159b0 20 74 68 65 20 73 6f 72 74 69 6e 67 20 69 6e 64   the sorting ind
159c0 65 78 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 4d  ex */.    int iM
159d0 65 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  em;             
159e0 20 20 20 2f 2a 20 4d 65 6d 6f 72 79 20 6c 6f 63     /* Memory loc
159f0 61 74 69 6f 6e 20 74 68 61 74 20 61 63 74 73 20  ation that acts 
15a00 61 73 20 61 63 63 75 6d 75 6c 61 74 6f 72 20 2a  as accumulator *
15a10 2f 0a 20 20 20 20 45 78 70 72 20 2a 70 45 78 70  /.    Expr *pExp
15a20 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  r;             /
15a30 2a 20 54 68 65 20 6f 72 69 67 69 6e 61 6c 20 65  * The original e
15a40 78 70 72 65 73 73 69 6f 6e 20 2a 2f 0a 20 20 7d  xpression */.  }
15a50 20 2a 61 43 6f 6c 3b 0a 20 20 69 6e 74 20 6e 43   *aCol;.  int nC
15a60 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20 20 20  olumn;          
15a70 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 75    /* Number of u
15a80 73 65 64 20 65 6e 74 72 69 65 73 20 69 6e 20 61  sed entries in a
15a90 43 6f 6c 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 6e  Col[] */.  int n
15aa0 41 63 63 75 6d 75 6c 61 74 6f 72 3b 20 20 20 20  Accumulator;    
15ab0 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
15ac0 63 6f 6c 75 6d 6e 73 20 74 68 61 74 20 73 68 6f  columns that sho
15ad0 77 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65  w through to the
15ae0 20 6f 75 74 70 75 74 2e 0a 20 20 20 20 20 20 20   output..       
15af0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15b00 20 20 20 2a 2a 20 41 64 64 69 74 69 6f 6e 61 6c     ** Additional
15b10 20 63 6f 6c 75 6d 6e 73 20 61 72 65 20 75 73 65   columns are use
15b20 64 20 6f 6e 6c 79 20 61 73 20 70 61 72 61 6d 65  d only as parame
15b30 74 65 72 73 20 74 6f 0a 20 20 20 20 20 20 20 20  ters to.        
15b40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15b50 20 20 2a 2a 20 61 67 67 72 65 67 61 74 65 20 66    ** aggregate f
15b60 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a 20 20 73 74  unctions */.  st
15b70 72 75 63 74 20 41 67 67 49 6e 66 6f 5f 66 75 6e  ruct AggInfo_fun
15b80 63 20 7b 20 20 20 2f 2a 20 46 6f 72 20 65 61 63  c {   /* For eac
15b90 68 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63  h aggregate func
15ba0 74 69 6f 6e 20 2a 2f 0a 20 20 20 20 45 78 70 72  tion */.    Expr
15bb0 20 2a 70 45 78 70 72 3b 20 20 20 20 20 20 20 20   *pExpr;        
15bc0 20 20 20 20 20 2f 2a 20 45 78 70 72 65 73 73 69       /* Expressi
15bd0 6f 6e 20 65 6e 63 6f 64 69 6e 67 20 74 68 65 20  on encoding the 
15be0 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 20 20  function */.    
15bf0 46 75 6e 63 44 65 66 20 2a 70 46 75 6e 63 3b 20  FuncDef *pFunc; 
15c00 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
15c10 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69  aggregate functi
15c20 6f 6e 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  on implementatio
15c30 6e 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 4d 65  n */.    int iMe
15c40 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  m;              
15c50 20 20 2f 2a 20 4d 65 6d 6f 72 79 20 6c 6f 63 61    /* Memory loca
15c60 74 69 6f 6e 20 74 68 61 74 20 61 63 74 73 20 61  tion that acts a
15c70 73 20 61 63 63 75 6d 75 6c 61 74 6f 72 20 2a 2f  s accumulator */
15c80 0a 20 20 20 20 69 6e 74 20 69 44 69 73 74 69 6e  .    int iDistin
15c90 63 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ct;           /*
15ca0 20 45 70 68 65 6d 65 72 61 6c 20 74 61 62 6c 65   Ephemeral table
15cb0 20 75 73 65 64 20 74 6f 20 65 6e 66 6f 72 63 65   used to enforce
15cc0 20 44 49 53 54 49 4e 43 54 20 2a 2f 0a 20 20 7d   DISTINCT */.  }
15cd0 20 2a 61 46 75 6e 63 3b 0a 20 20 69 6e 74 20 6e   *aFunc;.  int n
15ce0 46 75 6e 63 3b 20 20 20 20 20 20 20 20 20 20 20  Func;           
15cf0 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
15d00 65 6e 74 72 69 65 73 20 69 6e 20 61 46 75 6e 63  entries in aFunc
15d10 5b 5d 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  [] */.};../*.** 
15d20 54 68 65 20 64 61 74 61 74 79 70 65 20 79 6e 56  The datatype ynV
15d30 61 72 20 69 73 20 61 20 73 69 67 6e 65 64 20 69  ar is a signed i
15d40 6e 74 65 67 65 72 2c 20 65 69 74 68 65 72 20 31  nteger, either 1
15d50 36 2d 62 69 74 20 6f 72 20 33 32 2d 62 69 74 2e  6-bit or 32-bit.
15d60 0a 2a 2a 20 55 73 75 61 6c 6c 79 20 69 74 20 69  .** Usually it i
15d70 73 20 31 36 2d 62 69 74 73 2e 20 20 42 75 74 20  s 16-bits.  But 
15d80 69 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 56 41  if SQLITE_MAX_VA
15d90 52 49 41 42 4c 45 5f 4e 55 4d 42 45 52 20 69 73  RIABLE_NUMBER is
15da0 20 67 72 65 61 74 65 72 0a 2a 2a 20 74 68 61 6e   greater.** than
15db0 20 33 32 37 36 37 20 77 65 20 68 61 76 65 20 74   32767 we have t
15dc0 6f 20 6d 61 6b 65 20 69 74 20 33 32 2d 62 69 74  o make it 32-bit
15dd0 2e 20 20 31 36 2d 62 69 74 20 69 73 20 70 72 65  .  16-bit is pre
15de0 66 65 72 72 65 64 20 62 65 63 61 75 73 65 0a 2a  ferred because.*
15df0 2a 20 69 74 20 75 73 65 73 20 6c 65 73 73 20 6d  * it uses less m
15e00 65 6d 6f 72 79 20 69 6e 20 74 68 65 20 45 78 70  emory in the Exp
15e10 72 20 6f 62 6a 65 63 74 2c 20 77 68 69 63 68 20  r object, which 
15e20 69 73 20 61 20 62 69 67 20 6d 65 6d 6f 72 79 20  is a big memory 
15e30 75 73 65 72 0a 2a 2a 20 69 6e 20 73 79 73 74 65  user.** in syste
15e40 6d 73 20 77 69 74 68 20 6c 6f 74 73 20 6f 66 20  ms with lots of 
15e50 70 72 65 70 61 72 65 64 20 73 74 61 74 65 6d 65  prepared stateme
15e60 6e 74 73 2e 20 20 41 6e 64 20 66 65 77 20 61 70  nts.  And few ap
15e70 70 6c 69 63 61 74 69 6f 6e 73 0a 2a 2a 20 6e 65  plications.** ne
15e80 65 64 20 6d 6f 72 65 20 74 68 61 6e 20 61 62 6f  ed more than abo
15e90 75 74 20 31 30 20 6f 72 20 32 30 20 76 61 72 69  ut 10 or 20 vari
15ea0 61 62 6c 65 73 2e 20 20 42 75 74 20 73 6f 6d 65  ables.  But some
15eb0 20 65 78 74 72 65 6d 65 20 75 73 65 72 73 20 77   extreme users w
15ec0 61 6e 74 0a 2a 2a 20 74 6f 20 68 61 76 65 20 70  ant.** to have p
15ed0 72 65 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e  repared statemen
15ee0 74 73 20 77 69 74 68 20 6f 76 65 72 20 33 32 37  ts with over 327
15ef0 36 37 20 76 61 72 69 61 62 6c 65 73 2c 20 61 6e  67 variables, an
15f00 64 20 66 6f 72 20 74 68 65 6d 0a 2a 2a 20 74 68  d for them.** th
15f10 65 20 6f 70 74 69 6f 6e 20 69 73 20 61 76 61 69  e option is avai
15f20 6c 61 62 6c 65 20 28 61 74 20 63 6f 6d 70 69 6c  lable (at compil
15f30 65 2d 74 69 6d 65 29 2e 0a 2a 2f 0a 23 69 66 20  e-time)..*/.#if 
15f40 53 51 4c 49 54 45 5f 4d 41 58 5f 56 41 52 49 41  SQLITE_MAX_VARIA
15f50 42 4c 45 5f 4e 55 4d 42 45 52 3c 3d 33 32 37 36  BLE_NUMBER<=3276
15f60 37 0a 74 79 70 65 64 65 66 20 69 31 36 20 79 6e  7.typedef i16 yn
15f70 56 61 72 3b 0a 23 65 6c 73 65 0a 74 79 70 65 64  Var;.#else.typed
15f80 65 66 20 69 6e 74 20 79 6e 56 61 72 3b 0a 23 65  ef int ynVar;.#e
15f90 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68  ndif../*.** Each
15fa0 20 6e 6f 64 65 20 6f 66 20 61 6e 20 65 78 70 72   node of an expr
15fb0 65 73 73 69 6f 6e 20 69 6e 20 74 68 65 20 70 61  ession in the pa
15fc0 72 73 65 20 74 72 65 65 20 69 73 20 61 6e 20 69  rse tree is an i
15fd0 6e 73 74 61 6e 63 65 0a 2a 2a 20 6f 66 20 74 68  nstance.** of th
15fe0 69 73 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a  is structure..**
15ff0 0a 2a 2a 20 45 78 70 72 2e 6f 70 20 69 73 20 74  .** Expr.op is t
16000 68 65 20 6f 70 63 6f 64 65 2e 20 54 68 65 20 69  he opcode. The i
16010 6e 74 65 67 65 72 20 70 61 72 73 65 72 20 74 6f  nteger parser to
16020 6b 65 6e 20 63 6f 64 65 73 20 61 72 65 20 72 65  ken codes are re
16030 75 73 65 64 0a 2a 2a 20 61 73 20 6f 70 63 6f 64  used.** as opcod
16040 65 73 20 68 65 72 65 2e 20 46 6f 72 20 65 78 61  es here. For exa
16050 6d 70 6c 65 2c 20 74 68 65 20 70 61 72 73 65 72  mple, the parser
16060 20 64 65 66 69 6e 65 73 20 54 4b 5f 47 45 20 74   defines TK_GE t
16070 6f 20 62 65 20 61 6e 20 69 6e 74 65 67 65 72 0a  o be an integer.
16080 2a 2a 20 63 6f 64 65 20 72 65 70 72 65 73 65 6e  ** code represen
16090 74 69 6e 67 20 74 68 65 20 22 3e 3d 22 20 6f 70  ting the ">=" op
160a0 65 72 61 74 6f 72 2e 20 54 68 69 73 20 73 61 6d  erator. This sam
160b0 65 20 69 6e 74 65 67 65 72 20 63 6f 64 65 20 69  e integer code i
160c0 73 20 72 65 75 73 65 64 0a 2a 2a 20 74 6f 20 72  s reused.** to r
160d0 65 70 72 65 73 65 6e 74 20 74 68 65 20 67 72 65  epresent the gre
160e0 61 74 65 72 2d 74 68 61 6e 2d 6f 72 2d 65 71 75  ater-than-or-equ
160f0 61 6c 2d 74 6f 20 6f 70 65 72 61 74 6f 72 20 69  al-to operator i
16100 6e 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e  n the expression
16110 0a 2a 2a 20 74 72 65 65 2e 0a 2a 2a 0a 2a 2a 20  .** tree..**.** 
16120 49 66 20 74 68 65 20 65 78 70 72 65 73 73 69 6f  If the expressio
16130 6e 20 69 73 20 61 6e 20 53 51 4c 20 6c 69 74 65  n is an SQL lite
16140 72 61 6c 20 28 54 4b 5f 49 4e 54 45 47 45 52 2c  ral (TK_INTEGER,
16150 20 54 4b 5f 46 4c 4f 41 54 2c 20 54 4b 5f 42 4c   TK_FLOAT, TK_BL
16160 4f 42 2c 0a 2a 2a 20 6f 72 20 54 4b 5f 53 54 52  OB,.** or TK_STR
16170 49 4e 47 29 2c 20 74 68 65 6e 20 45 78 70 72 2e  ING), then Expr.
16180 74 6f 6b 65 6e 20 63 6f 6e 74 61 69 6e 73 20 74  token contains t
16190 68 65 20 74 65 78 74 20 6f 66 20 74 68 65 20 53  he text of the S
161a0 51 4c 20 6c 69 74 65 72 61 6c 2e 20 49 66 0a 2a  QL literal. If.*
161b0 2a 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e  * the expression
161c0 20 69 73 20 61 20 76 61 72 69 61 62 6c 65 20 28   is a variable (
161d0 54 4b 5f 56 41 52 49 41 42 4c 45 29 2c 20 74 68  TK_VARIABLE), th
161e0 65 6e 20 45 78 70 72 2e 74 6f 6b 65 6e 20 63 6f  en Expr.token co
161f0 6e 74 61 69 6e 73 20 74 68 65 0a 2a 2a 20 76 61  ntains the.** va
16200 72 69 61 62 6c 65 20 6e 61 6d 65 2e 20 46 69 6e  riable name. Fin
16210 61 6c 6c 79 2c 20 69 66 20 74 68 65 20 65 78 70  ally, if the exp
16220 72 65 73 73 69 6f 6e 20 69 73 20 61 6e 20 53 51  ression is an SQ
16230 4c 20 66 75 6e 63 74 69 6f 6e 20 28 54 4b 5f 46  L function (TK_F
16240 55 4e 43 54 49 4f 4e 29 2c 0a 2a 2a 20 74 68 65  UNCTION),.** the
16250 6e 20 45 78 70 72 2e 74 6f 6b 65 6e 20 63 6f 6e  n Expr.token con
16260 74 61 69 6e 73 20 74 68 65 20 6e 61 6d 65 20 6f  tains the name o
16270 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 2e 0a  f the function..
16280 2a 2a 0a 2a 2a 20 45 78 70 72 2e 70 52 69 67 68  **.** Expr.pRigh
16290 74 20 61 6e 64 20 45 78 70 72 2e 70 4c 65 66 74  t and Expr.pLeft
162a0 20 61 72 65 20 74 68 65 20 6c 65 66 74 20 61 6e   are the left an
162b0 64 20 72 69 67 68 74 20 73 75 62 65 78 70 72 65  d right subexpre
162c0 73 73 69 6f 6e 73 20 6f 66 20 61 0a 2a 2a 20 62  ssions of a.** b
162d0 69 6e 61 72 79 20 6f 70 65 72 61 74 6f 72 2e 20  inary operator. 
162e0 45 69 74 68 65 72 20 6f 72 20 62 6f 74 68 20 6d  Either or both m
162f0 61 79 20 62 65 20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a  ay be NULL..**.*
16300 2a 20 45 78 70 72 2e 78 2e 70 4c 69 73 74 20 69  * Expr.x.pList i
16310 73 20 61 20 6c 69 73 74 20 6f 66 20 61 72 67 75  s a list of argu
16320 6d 65 6e 74 73 20 69 66 20 74 68 65 20 65 78 70  ments if the exp
16330 72 65 73 73 69 6f 6e 20 69 73 20 61 6e 20 53 51  ression is an SQ
16340 4c 20 66 75 6e 63 74 69 6f 6e 2c 0a 2a 2a 20 61  L function,.** a
16350 20 43 41 53 45 20 65 78 70 72 65 73 73 69 6f 6e   CASE expression
16360 20 6f 72 20 61 6e 20 49 4e 20 65 78 70 72 65 73   or an IN expres
16370 73 69 6f 6e 20 6f 66 20 74 68 65 20 66 6f 72 6d  sion of the form
16380 20 22 3c 6c 68 73 3e 20 49 4e 20 28 3c 79 3e 2c   "<lhs> IN (<y>,
16390 20 3c 7a 3e 2e 2e 2e 29 22 2e 0a 2a 2a 20 45 78   <z>...)"..** Ex
163a0 70 72 2e 78 2e 70 53 65 6c 65 63 74 20 69 73 20  pr.x.pSelect is 
163b0 75 73 65 64 20 69 66 20 74 68 65 20 65 78 70 72  used if the expr
163c0 65 73 73 69 6f 6e 20 69 73 20 61 20 73 75 62 2d  ession is a sub-
163d0 73 65 6c 65 63 74 20 6f 72 20 61 6e 20 65 78 70  select or an exp
163e0 72 65 73 73 69 6f 6e 20 6f 66 0a 2a 2a 20 74 68  ression of.** th
163f0 65 20 66 6f 72 6d 20 22 3c 6c 68 73 3e 20 49 4e  e form "<lhs> IN
16400 20 28 53 45 4c 45 43 54 20 2e 2e 2e 29 22 2e 20   (SELECT ...)". 
16410 49 66 20 74 68 65 20 45 50 5f 78 49 73 53 65 6c  If the EP_xIsSel
16420 65 63 74 20 62 69 74 20 69 73 20 73 65 74 20 69  ect bit is set i
16430 6e 20 74 68 65 0a 2a 2a 20 45 78 70 72 2e 66 6c  n the.** Expr.fl
16440 61 67 73 20 6d 61 73 6b 2c 20 74 68 65 6e 20 45  ags mask, then E
16450 78 70 72 2e 78 2e 70 53 65 6c 65 63 74 20 69 73  xpr.x.pSelect is
16460 20 76 61 6c 69 64 2e 20 4f 74 68 65 72 77 69 73   valid. Otherwis
16470 65 2c 20 45 78 70 72 2e 78 2e 70 4c 69 73 74 20  e, Expr.x.pList 
16480 69 73 0a 2a 2a 20 76 61 6c 69 64 2e 0a 2a 2a 0a  is.** valid..**.
16490 2a 2a 20 41 6e 20 65 78 70 72 65 73 73 69 6f 6e  ** An expression
164a0 20 6f 66 20 74 68 65 20 66 6f 72 6d 20 49 44 20   of the form ID 
164b0 6f 72 20 49 44 2e 49 44 20 72 65 66 65 72 73 20  or ID.ID refers 
164c0 74 6f 20 61 20 63 6f 6c 75 6d 6e 20 69 6e 20 61  to a column in a
164d0 20 74 61 62 6c 65 2e 0a 2a 2a 20 46 6f 72 20 73   table..** For s
164e0 75 63 68 20 65 78 70 72 65 73 73 69 6f 6e 73 2c  uch expressions,
164f0 20 45 78 70 72 2e 6f 70 20 69 73 20 73 65 74 20   Expr.op is set 
16500 74 6f 20 54 4b 5f 43 4f 4c 55 4d 4e 20 61 6e 64  to TK_COLUMN and
16510 20 45 78 70 72 2e 69 54 61 62 6c 65 20 69 73 0a   Expr.iTable is.
16520 2a 2a 20 74 68 65 20 69 6e 74 65 67 65 72 20 63  ** the integer c
16530 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 6f 66 20  ursor number of 
16540 61 20 56 44 42 45 20 63 75 72 73 6f 72 20 70 6f  a VDBE cursor po
16550 69 6e 74 69 6e 67 20 74 6f 20 74 68 61 74 20 74  inting to that t
16560 61 62 6c 65 20 61 6e 64 0a 2a 2a 20 45 78 70 72  able and.** Expr
16570 2e 69 43 6f 6c 75 6d 6e 20 69 73 20 74 68 65 20  .iColumn is the 
16580 63 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 66 6f  column number fo
16590 72 20 74 68 65 20 73 70 65 63 69 66 69 63 20 63  r the specific c
165a0 6f 6c 75 6d 6e 2e 20 20 49 66 20 74 68 65 0a 2a  olumn.  If the.*
165b0 2a 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20  * expression is 
165c0 75 73 65 64 20 61 73 20 61 20 72 65 73 75 6c 74  used as a result
165d0 20 69 6e 20 61 6e 20 61 67 67 72 65 67 61 74 65   in an aggregate
165e0 20 53 45 4c 45 43 54 2c 20 74 68 65 6e 20 74 68   SELECT, then th
165f0 65 0a 2a 2a 20 76 61 6c 75 65 20 69 73 20 61 6c  e.** value is al
16600 73 6f 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65  so stored in the
16610 20 45 78 70 72 2e 69 41 67 67 20 63 6f 6c 75 6d   Expr.iAgg colum
16620 6e 20 69 6e 20 74 68 65 20 61 67 67 72 65 67 61  n in the aggrega
16630 74 65 20 73 6f 20 74 68 61 74 0a 2a 2a 20 69 74  te so that.** it
16640 20 63 61 6e 20 62 65 20 61 63 63 65 73 73 65 64   can be accessed
16650 20 61 66 74 65 72 20 61 6c 6c 20 61 67 67 72 65   after all aggre
16660 67 61 74 65 73 20 61 72 65 20 63 6f 6d 70 75 74  gates are comput
16670 65 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  ed..**.** If the
16680 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61   expression is a
16690 6e 20 75 6e 62 6f 75 6e 64 20 76 61 72 69 61 62  n unbound variab
166a0 6c 65 20 6d 61 72 6b 65 72 20 28 61 20 71 75 65  le marker (a que
166b0 73 74 69 6f 6e 20 6d 61 72 6b 0a 2a 2a 20 63 68  stion mark.** ch
166c0 61 72 61 63 74 65 72 20 27 3f 27 20 69 6e 20 74  aracter '?' in t
166d0 68 65 20 6f 72 69 67 69 6e 61 6c 20 53 51 4c 29  he original SQL)
166e0 20 74 68 65 6e 20 74 68 65 20 45 78 70 72 2e 69   then the Expr.i
166f0 54 61 62 6c 65 20 68 6f 6c 64 73 20 74 68 65 20  Table holds the 
16700 69 6e 64 65 78 0a 2a 2a 20 6e 75 6d 62 65 72 20  index.** number 
16710 66 6f 72 20 74 68 61 74 20 76 61 72 69 61 62 6c  for that variabl
16720 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  e..**.** If the 
16730 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61 20  expression is a 
16740 73 75 62 71 75 65 72 79 20 74 68 65 6e 20 45 78  subquery then Ex
16750 70 72 2e 69 43 6f 6c 75 6d 6e 20 68 6f 6c 64 73  pr.iColumn holds
16760 20 61 6e 20 69 6e 74 65 67 65 72 0a 2a 2a 20 72   an integer.** r
16770 65 67 69 73 74 65 72 20 6e 75 6d 62 65 72 20 63  egister number c
16780 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 72 65  ontaining the re
16790 73 75 6c 74 20 6f 66 20 74 68 65 20 73 75 62 71  sult of the subq
167a0 75 65 72 79 2e 20 20 49 66 20 74 68 65 0a 2a 2a  uery.  If the.**
167b0 20 73 75 62 71 75 65 72 79 20 67 69 76 65 73 20   subquery gives 
167c0 61 20 63 6f 6e 73 74 61 6e 74 20 72 65 73 75 6c  a constant resul
167d0 74 2c 20 74 68 65 6e 20 69 54 61 62 6c 65 20 69  t, then iTable i
167e0 73 20 2d 31 2e 20 20 49 66 20 74 68 65 20 73 75  s -1.  If the su
167f0 62 71 75 65 72 79 0a 2a 2a 20 67 69 76 65 73 20  bquery.** gives 
16800 61 20 64 69 66 66 65 72 65 6e 74 20 61 6e 73 77  a different answ
16810 65 72 20 61 74 20 64 69 66 66 65 72 65 6e 74 20  er at different 
16820 74 69 6d 65 73 20 64 75 72 69 6e 67 20 73 74 61  times during sta
16830 74 65 6d 65 6e 74 20 70 72 6f 63 65 73 73 69 6e  tement processin
16840 67 0a 2a 2a 20 74 68 65 6e 20 69 54 61 62 6c 65  g.** then iTable
16850 20 69 73 20 74 68 65 20 61 64 64 72 65 73 73 20   is the address 
16860 6f 66 20 61 20 73 75 62 72 6f 75 74 69 6e 65 20  of a subroutine 
16870 74 68 61 74 20 63 6f 6d 70 75 74 65 73 20 74 68  that computes th
16880 65 20 73 75 62 71 75 65 72 79 2e 0a 2a 2a 0a 2a  e subquery..**.*
16890 2a 20 49 66 20 74 68 65 20 45 78 70 72 20 69 73  * If the Expr is
168a0 20 6f 66 20 74 79 70 65 20 4f 50 5f 43 6f 6c 75   of type OP_Colu
168b0 6d 6e 2c 20 61 6e 64 20 74 68 65 20 74 61 62 6c  mn, and the tabl
168c0 65 20 69 74 20 69 73 20 73 65 6c 65 63 74 69 6e  e it is selectin
168d0 67 20 66 72 6f 6d 0a 2a 2a 20 69 73 20 61 20 64  g from.** is a d
168e0 69 73 6b 20 74 61 62 6c 65 20 6f 72 20 74 68 65  isk table or the
168f0 20 22 6f 6c 64 2e 2a 22 20 70 73 65 75 64 6f 2d   "old.*" pseudo-
16900 74 61 62 6c 65 2c 20 74 68 65 6e 20 70 54 61 62  table, then pTab
16910 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 0a 2a   points to the.*
16920 2a 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20  * corresponding 
16930 74 61 62 6c 65 20 64 65 66 69 6e 69 74 69 6f 6e  table definition
16940 2e 0a 2a 2a 0a 2a 2a 20 41 4c 4c 4f 43 41 54 49  ..**.** ALLOCATI
16950 4f 4e 20 4e 4f 54 45 53 3a 0a 2a 2a 0a 2a 2a 20  ON NOTES:.**.** 
16960 45 78 70 72 20 6f 62 6a 65 63 74 73 20 63 61 6e  Expr objects can
16970 20 75 73 65 20 61 20 6c 6f 74 20 6f 66 20 6d 65   use a lot of me
16980 6d 6f 72 79 20 73 70 61 63 65 20 69 6e 20 64 61  mory space in da
16990 74 61 62 61 73 65 20 73 63 68 65 6d 61 2e 20 20  tabase schema.  
169a0 54 6f 0a 2a 2a 20 68 65 6c 70 20 72 65 64 75 63  To.** help reduc
169b0 65 20 6d 65 6d 6f 72 79 20 72 65 71 75 69 72 65  e memory require
169c0 6d 65 6e 74 73 2c 20 73 6f 6d 65 74 69 6d 65 73  ments, sometimes
169d0 20 61 6e 20 45 78 70 72 20 6f 62 6a 65 63 74 20   an Expr object 
169e0 77 69 6c 6c 20 62 65 0a 2a 2a 20 74 72 75 6e 63  will be.** trunc
169f0 61 74 65 64 2e 20 20 41 6e 64 20 74 6f 20 72 65  ated.  And to re
16a00 64 75 63 65 20 74 68 65 20 6e 75 6d 62 65 72 20  duce the number 
16a10 6f 66 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61  of memory alloca
16a20 74 69 6f 6e 73 2c 20 73 6f 6d 65 74 69 6d 65 73  tions, sometimes
16a30 0a 2a 2a 20 74 77 6f 20 6f 72 20 6d 6f 72 65 20  .** two or more 
16a40 45 78 70 72 20 6f 62 6a 65 63 74 73 20 77 69 6c  Expr objects wil
16a50 6c 20 62 65 20 73 74 6f 72 65 64 20 69 6e 20 61  l be stored in a
16a60 20 73 69 6e 67 6c 65 20 6d 65 6d 6f 72 79 20 61   single memory a
16a70 6c 6c 6f 63 61 74 69 6f 6e 2c 0a 2a 2a 20 74 6f  llocation,.** to
16a80 67 65 74 68 65 72 20 77 69 74 68 20 45 78 70 72  gether with Expr
16a90 2e 7a 54 6f 6b 65 6e 20 73 74 72 69 6e 67 73 2e  .zToken strings.
16aa0 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 45 50  .**.** If the EP
16ab0 5f 52 65 64 75 63 65 64 20 61 6e 64 20 45 50 5f  _Reduced and EP_
16ac0 54 6f 6b 65 6e 4f 6e 6c 79 20 66 6c 61 67 73 20  TokenOnly flags 
16ad0 61 72 65 20 73 65 74 20 77 68 65 6e 0a 2a 2a 20  are set when.** 
16ae0 61 6e 20 45 78 70 72 20 6f 62 6a 65 63 74 20 69  an Expr object i
16af0 73 20 74 72 75 6e 63 61 74 65 64 2e 20 20 57 68  s truncated.  Wh
16b00 65 6e 20 45 50 5f 52 65 64 75 63 65 64 20 69 73  en EP_Reduced is
16b10 20 73 65 74 2c 20 74 68 65 6e 20 61 6c 6c 0a 2a   set, then all.*
16b20 2a 20 74 68 65 20 63 68 69 6c 64 20 45 78 70 72  * the child Expr
16b30 20 6f 62 6a 65 63 74 73 20 69 6e 20 74 68 65 20   objects in the 
16b40 45 78 70 72 2e 70 4c 65 66 74 20 61 6e 64 20 45  Expr.pLeft and E
16b50 78 70 72 2e 70 52 69 67 68 74 20 73 75 62 74 72  xpr.pRight subtr
16b60 65 65 73 0a 2a 2a 20 61 72 65 20 63 6f 6e 74 61  ees.** are conta
16b70 69 6e 65 64 20 77 69 74 68 69 6e 20 74 68 65 20  ined within the 
16b80 73 61 6d 65 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f  same memory allo
16b90 63 61 74 69 6f 6e 2e 20 20 4e 6f 74 65 2c 20 68  cation.  Note, h
16ba0 6f 77 65 76 65 72 2c 20 74 68 61 74 0a 2a 2a 20  owever, that.** 
16bb0 74 68 65 20 73 75 62 74 72 65 65 73 20 69 6e 20  the subtrees in 
16bc0 45 78 70 72 2e 78 2e 70 4c 69 73 74 20 6f 72 20  Expr.x.pList or 
16bd0 45 78 70 72 2e 78 2e 70 53 65 6c 65 63 74 20 61  Expr.x.pSelect a
16be0 72 65 20 61 6c 77 61 79 73 20 73 65 70 61 72 61  re always separa
16bf0 74 65 6c 79 0a 2a 2a 20 61 6c 6c 6f 63 61 74 65  tely.** allocate
16c00 64 2c 20 72 65 67 61 72 64 6c 65 73 73 20 6f 66  d, regardless of
16c10 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20   whether or not 
16c20 45 50 5f 52 65 64 75 63 65 64 20 69 73 20 73 65  EP_Reduced is se
16c30 74 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 45 78 70  t..*/.struct Exp
16c40 72 20 7b 0a 20 20 75 38 20 6f 70 3b 20 20 20 20  r {.  u8 op;    
16c50 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
16c60 4f 70 65 72 61 74 69 6f 6e 20 70 65 72 66 6f 72  Operation perfor
16c70 6d 65 64 20 62 79 20 74 68 69 73 20 6e 6f 64 65  med by this node
16c80 20 2a 2f 0a 20 20 63 68 61 72 20 61 66 66 69 6e   */.  char affin
16c90 69 74 79 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  ity;         /* 
16ca0 54 68 65 20 61 66 66 69 6e 69 74 79 20 6f 66 20  The affinity of 
16cb0 74 68 65 20 63 6f 6c 75 6d 6e 20 6f 72 20 30 20  the column or 0 
16cc0 69 66 20 6e 6f 74 20 61 20 63 6f 6c 75 6d 6e 20  if not a column 
16cd0 2a 2f 0a 20 20 75 33 32 20 66 6c 61 67 73 3b 20  */.  u32 flags; 
16ce0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56              /* V
16cf0 61 72 69 6f 75 73 20 66 6c 61 67 73 2e 20 20 45  arious flags.  E
16d00 50 5f 2a 20 53 65 65 20 62 65 6c 6f 77 20 2a 2f  P_* See below */
16d10 0a 20 20 75 6e 69 6f 6e 20 7b 0a 20 20 20 20 63  .  union {.    c
16d20 68 61 72 20 2a 7a 54 6f 6b 65 6e 3b 20 20 20 20  har *zToken;    
16d30 20 20 20 20 20 20 2f 2a 20 54 6f 6b 65 6e 20 76        /* Token v
16d40 61 6c 75 65 2e 20 5a 65 72 6f 20 74 65 72 6d 69  alue. Zero termi
16d50 6e 61 74 65 64 20 61 6e 64 20 64 65 71 75 6f 74  nated and dequot
16d60 65 64 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 56  ed */.    int iV
16d70 61 6c 75 65 3b 20 20 20 20 20 20 20 20 20 20 20  alue;           
16d80 20 2f 2a 20 4e 6f 6e 2d 6e 65 67 61 74 69 76 65   /* Non-negative
16d90 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20 69   integer value i
16da0 66 20 45 50 5f 49 6e 74 56 61 6c 75 65 20 2a 2f  f EP_IntValue */
16db0 0a 20 20 7d 20 75 3b 0a 0a 20 20 2f 2a 20 49 66  .  } u;..  /* If
16dc0 20 74 68 65 20 45 50 5f 54 6f 6b 65 6e 4f 6e 6c   the EP_TokenOnl
16dd0 79 20 66 6c 61 67 20 69 73 20 73 65 74 20 69 6e  y flag is set in
16de0 20 74 68 65 20 45 78 70 72 2e 66 6c 61 67 73 20   the Expr.flags 
16df0 6d 61 73 6b 2c 20 74 68 65 6e 20 6e 6f 0a 20 20  mask, then no.  
16e00 2a 2a 20 73 70 61 63 65 20 69 73 20 61 6c 6c 6f  ** space is allo
16e10 63 61 74 65 64 20 66 6f 72 20 74 68 65 20 66 69  cated for the fi
16e20 65 6c 64 73 20 62 65 6c 6f 77 20 74 68 69 73 20  elds below this 
16e30 70 6f 69 6e 74 2e 20 41 6e 20 61 74 74 65 6d 70  point. An attemp
16e40 74 20 74 6f 0a 20 20 2a 2a 20 61 63 63 65 73 73  t to.  ** access
16e50 20 74 68 65 6d 20 77 69 6c 6c 20 72 65 73 75 6c   them will resul
16e60 74 20 69 6e 20 61 20 73 65 67 66 61 75 6c 74 20  t in a segfault 
16e70 6f 72 20 6d 61 6c 66 75 6e 63 74 69 6f 6e 2e 0a  or malfunction..
16e80 20 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a    **************
16e90 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
16ea0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
16eb0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
16ec0 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 20 20 45 78 70 72  *******/..  Expr
16ed0 20 2a 70 4c 65 66 74 3b 20 20 20 20 20 20 20 20   *pLeft;        
16ee0 20 20 20 2f 2a 20 4c 65 66 74 20 73 75 62 6e 6f     /* Left subno
16ef0 64 65 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 52  de */.  Expr *pR
16f00 69 67 68 74 3b 20 20 20 20 20 20 20 20 20 20 2f  ight;          /
16f10 2a 20 52 69 67 68 74 20 73 75 62 6e 6f 64 65 20  * Right subnode 
16f20 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b 0a 20 20 20  */.  union {.   
16f30 20 45 78 70 72 4c 69 73 74 20 2a 70 4c 69 73 74   ExprList *pList
16f40 3b 20 20 20 20 20 2f 2a 20 6f 70 20 3d 20 49 4e  ;     /* op = IN
16f50 2c 20 45 58 49 53 54 53 2c 20 53 45 4c 45 43 54  , EXISTS, SELECT
16f60 2c 20 43 41 53 45 2c 20 46 55 4e 43 54 49 4f 4e  , CASE, FUNCTION
16f70 2c 20 42 45 54 57 45 45 4e 20 2a 2f 0a 20 20 20  , BETWEEN */.   
16f80 20 53 65 6c 65 63 74 20 2a 70 53 65 6c 65 63 74   Select *pSelect
16f90 3b 20 20 20 20 20 2f 2a 20 45 50 5f 78 49 73 53  ;     /* EP_xIsS
16fa0 65 6c 65 63 74 20 61 6e 64 20 6f 70 20 3d 20 49  elect and op = I
16fb0 4e 2c 20 45 58 49 53 54 53 2c 20 53 45 4c 45 43  N, EXISTS, SELEC
16fc0 54 20 2a 2f 0a 20 20 7d 20 78 3b 0a 0a 20 20 2f  T */.  } x;..  /
16fd0 2a 20 49 66 20 74 68 65 20 45 50 5f 52 65 64 75  * If the EP_Redu
16fe0 63 65 64 20 66 6c 61 67 20 69 73 20 73 65 74 20  ced flag is set 
16ff0 69 6e 20 74 68 65 20 45 78 70 72 2e 66 6c 61 67  in the Expr.flag
17000 73 20 6d 61 73 6b 2c 20 74 68 65 6e 20 6e 6f 0a  s mask, then no.
17010 20 20 2a 2a 20 73 70 61 63 65 20 69 73 20 61 6c    ** space is al
17020 6c 6f 63 61 74 65 64 20 66 6f 72 20 74 68 65 20  located for the 
17030 66 69 65 6c 64 73 20 62 65 6c 6f 77 20 74 68 69  fields below thi
17040 73 20 70 6f 69 6e 74 2e 20 41 6e 20 61 74 74 65  s point. An atte
17050 6d 70 74 20 74 6f 0a 20 20 2a 2a 20 61 63 63 65  mpt to.  ** acce
17060 73 73 20 74 68 65 6d 20 77 69 6c 6c 20 72 65 73  ss them will res
17070 75 6c 74 20 69 6e 20 61 20 73 65 67 66 61 75 6c  ult in a segfaul
17080 74 20 6f 72 20 6d 61 6c 66 75 6e 63 74 69 6f 6e  t or malfunction
17090 2e 0a 20 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ..  ************
170a0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
170b0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
170c0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
170d0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 23 69 66 20  *********/..#if 
170e0 53 51 4c 49 54 45 5f 4d 41 58 5f 45 58 50 52 5f  SQLITE_MAX_EXPR_
170f0 44 45 50 54 48 3e 30 0a 20 20 69 6e 74 20 6e 48  DEPTH>0.  int nH
17100 65 69 67 68 74 3b 20 20 20 20 20 20 20 20 20 20  eight;          
17110 20 2f 2a 20 48 65 69 67 68 74 20 6f 66 20 74 68   /* Height of th
17120 65 20 74 72 65 65 20 68 65 61 64 65 64 20 62 79  e tree headed by
17130 20 74 68 69 73 20 6e 6f 64 65 20 2a 2f 0a 23 65   this node */.#e
17140 6e 64 69 66 0a 20 20 69 6e 74 20 69 54 61 62 6c  ndif.  int iTabl
17150 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  e;            /*
17160 20 54 4b 5f 43 4f 4c 55 4d 4e 3a 20 63 75 72 73   TK_COLUMN: curs
17170 6f 72 20 6e 75 6d 62 65 72 20 6f 66 20 74 61 62  or number of tab
17180 6c 65 20 68 6f 6c 64 69 6e 67 20 63 6f 6c 75 6d  le holding colum
17190 6e 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  n.              
171a0 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 54 4b             ** TK
171b0 5f 52 45 47 49 53 54 45 52 3a 20 72 65 67 69 73  _REGISTER: regis
171c0 74 65 72 20 6e 75 6d 62 65 72 0a 20 20 20 20 20  ter number.     
171d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
171e0 20 20 20 20 2a 2a 20 54 4b 5f 54 52 49 47 47 45      ** TK_TRIGGE
171f0 52 3a 20 31 20 2d 3e 20 6e 65 77 2c 20 30 20 2d  R: 1 -> new, 0 -
17200 3e 20 6f 6c 64 0a 20 20 20 20 20 20 20 20 20 20  > old.          
17210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a                 *
17220 2a 20 45 50 5f 55 6e 6c 69 6b 65 6c 79 3a 20 20  * EP_Unlikely:  
17230 31 33 34 32 31 37 37 32 38 20 74 69 6d 65 73 20  134217728 times 
17240 6c 69 6b 65 6c 69 68 6f 6f 64 20 2a 2f 0a 20 20  likelihood */.  
17250 79 6e 56 61 72 20 69 43 6f 6c 75 6d 6e 3b 20 20  ynVar iColumn;  
17260 20 20 20 20 20 20 20 2f 2a 20 54 4b 5f 43 4f 4c         /* TK_COL
17270 55 4d 4e 3a 20 63 6f 6c 75 6d 6e 20 69 6e 64 65  UMN: column inde
17280 78 2e 20 20 2d 31 20 66 6f 72 20 72 6f 77 69 64  x.  -1 for rowid
17290 2e 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
172a0 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 54 4b             ** TK
172b0 5f 56 41 52 49 41 42 4c 45 3a 20 76 61 72 69 61  _VARIABLE: varia
172c0 62 6c 65 20 6e 75 6d 62 65 72 20 28 61 6c 77 61  ble number (alwa
172d0 79 73 20 3e 3d 20 31 29 2e 20 2a 2f 0a 20 20 69  ys >= 1). */.  i
172e0 31 36 20 69 41 67 67 3b 20 20 20 20 20 20 20 20  16 iAgg;        
172f0 20 20 20 20 20 20 2f 2a 20 57 68 69 63 68 20 65        /* Which e
17300 6e 74 72 79 20 69 6e 20 70 41 67 67 49 6e 66 6f  ntry in pAggInfo
17310 2d 3e 61 43 6f 6c 5b 5d 20 6f 72 20 2d 3e 61 46  ->aCol[] or ->aF
17320 75 6e 63 5b 5d 20 2a 2f 0a 20 20 69 31 36 20 69  unc[] */.  i16 i
17330 52 69 67 68 74 4a 6f 69 6e 54 61 62 6c 65 3b 20  RightJoinTable; 
17340 20 20 2f 2a 20 49 66 20 45 50 5f 46 72 6f 6d 4a    /* If EP_FromJ
17350 6f 69 6e 2c 20 74 68 65 20 72 69 67 68 74 20 74  oin, the right t
17360 61 62 6c 65 20 6f 66 20 74 68 65 20 6a 6f 69 6e  able of the join
17370 20 2a 2f 0a 20 20 75 38 20 6f 70 32 3b 20 20 20   */.  u8 op2;   
17380 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
17390 54 4b 5f 52 45 47 49 53 54 45 52 3a 20 6f 72 69  TK_REGISTER: ori
173a0 67 69 6e 61 6c 20 76 61 6c 75 65 20 6f 66 20 45  ginal value of E
173b0 78 70 72 2e 6f 70 0a 20 20 20 20 20 20 20 20 20  xpr.op.         
173c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
173d0 2a 2a 20 54 4b 5f 43 4f 4c 55 4d 4e 3a 20 74 68  ** TK_COLUMN: th
173e0 65 20 76 61 6c 75 65 20 6f 66 20 70 35 20 66 6f  e value of p5 fo
173f0 72 20 4f 50 5f 43 6f 6c 75 6d 6e 0a 20 20 20 20  r OP_Column.    
17400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17410 20 20 20 20 20 2a 2a 20 54 4b 5f 41 47 47 5f 46       ** TK_AGG_F
17420 55 4e 43 54 49 4f 4e 3a 20 6e 65 73 74 69 6e 67  UNCTION: nesting
17430 20 64 65 70 74 68 20 2a 2f 0a 20 20 41 67 67 49   depth */.  AggI
17440 6e 66 6f 20 2a 70 41 67 67 49 6e 66 6f 3b 20 20  nfo *pAggInfo;  
17450 20 20 20 2f 2a 20 55 73 65 64 20 62 79 20 54 4b     /* Used by TK
17460 5f 41 47 47 5f 43 4f 4c 55 4d 4e 20 61 6e 64 20  _AGG_COLUMN and 
17470 54 4b 5f 41 47 47 5f 46 55 4e 43 54 49 4f 4e 20  TK_AGG_FUNCTION 
17480 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70 54 61 62  */.  Table *pTab
17490 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54  ;           /* T
174a0 61 62 6c 65 20 66 6f 72 20 54 4b 5f 43 4f 4c 55  able for TK_COLU
174b0 4d 4e 20 65 78 70 72 65 73 73 69 6f 6e 73 2e 20  MN expressions. 
174c0 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  */.};../*.** The
174d0 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 72 65 20 74   following are t
174e0 68 65 20 6d 65 61 6e 69 6e 67 73 20 6f 66 20 62  he meanings of b
174f0 69 74 73 20 69 6e 20 74 68 65 20 45 78 70 72 2e  its in the Expr.
17500 66 6c 61 67 73 20 66 69 65 6c 64 2e 0a 2a 2f 0a  flags field..*/.
17510 23 64 65 66 69 6e 65 20 45 50 5f 46 72 6f 6d 4a  #define EP_FromJ
17520 6f 69 6e 20 20 30 78 30 30 30 30 30 31 20 2f 2a  oin  0x000001 /*
17530 20 4f 72 69 67 69 6e 61 74 65 73 20 69 6e 20 4f   Originates in O
17540 4e 2f 55 53 49 4e 47 20 63 6c 61 75 73 65 20 6f  N/USING clause o
17550 66 20 6f 75 74 65 72 20 6a 6f 69 6e 20 2a 2f 0a  f outer join */.
17560 23 64 65 66 69 6e 65 20 45 50 5f 41 67 67 20 20  #define EP_Agg  
17570 20 20 20 20 20 30 78 30 30 30 30 30 32 20 2f 2a       0x000002 /*
17580 20 43 6f 6e 74 61 69 6e 73 20 6f 6e 65 20 6f 72   Contains one or
17590 20 6d 6f 72 65 20 61 67 67 72 65 67 61 74 65 20   more aggregate 
175a0 66 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a 23 64 65  functions */.#de
175b0 66 69 6e 65 20 45 50 5f 52 65 73 6f 6c 76 65 64  fine EP_Resolved
175c0 20 20 30 78 30 30 30 30 30 34 20 2f 2a 20 49 44    0x000004 /* ID
175d0 73 20 68 61 76 65 20 62 65 65 6e 20 72 65 73 6f  s have been reso
175e0 6c 76 65 64 20 74 6f 20 43 4f 4c 55 4d 4e 73 20  lved to COLUMNs 
175f0 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 45 72  */.#define EP_Er
17600 72 6f 72 20 20 20 20 20 30 78 30 30 30 30 30 38  ror     0x000008
17610 20 2f 2a 20 45 78 70 72 65 73 73 69 6f 6e 20 63   /* Expression c
17620 6f 6e 74 61 69 6e 73 20 6f 6e 65 20 6f 72 20 6d  ontains one or m
17630 6f 72 65 20 65 72 72 6f 72 73 20 2a 2f 0a 23 64  ore errors */.#d
17640 65 66 69 6e 65 20 45 50 5f 44 69 73 74 69 6e 63  efine EP_Distinc
17650 74 20 20 30 78 30 30 30 30 31 30 20 2f 2a 20 41  t  0x000010 /* A
17660 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f  ggregate functio
17670 6e 20 77 69 74 68 20 44 49 53 54 49 4e 43 54 20  n with DISTINCT 
17680 6b 65 79 77 6f 72 64 20 2a 2f 0a 23 64 65 66 69  keyword */.#defi
17690 6e 65 20 45 50 5f 56 61 72 53 65 6c 65 63 74 20  ne EP_VarSelect 
176a0 30 78 30 30 30 30 32 30 20 2f 2a 20 70 53 65 6c  0x000020 /* pSel
176b0 65 63 74 20 69 73 20 63 6f 72 72 65 6c 61 74 65  ect is correlate
176c0 64 2c 20 6e 6f 74 20 63 6f 6e 73 74 61 6e 74 20  d, not constant 
176d0 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 44 62  */.#define EP_Db
176e0 6c 51 75 6f 74 65 64 20 30 78 30 30 30 30 34 30  lQuoted 0x000040
176f0 20 2f 2a 20 74 6f 6b 65 6e 2e 7a 20 77 61 73 20   /* token.z was 
17700 6f 72 69 67 69 6e 61 6c 6c 79 20 69 6e 20 22 2e  originally in ".
17710 2e 2e 22 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45  .." */.#define E
17720 50 5f 49 6e 66 69 78 46 75 6e 63 20 30 78 30 30  P_InfixFunc 0x00
17730 30 30 38 30 20 2f 2a 20 54 72 75 65 20 66 6f 72  0080 /* True for
17740 20 61 6e 20 69 6e 66 69 78 20 66 75 6e 63 74 69   an infix functi
17750 6f 6e 3a 20 4c 49 4b 45 2c 20 47 4c 4f 42 2c 20  on: LIKE, GLOB, 
17760 65 74 63 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45  etc */.#define E
17770 50 5f 43 6f 6c 6c 61 74 65 20 20 20 30 78 30 30  P_Collate   0x00
17780 30 31 30 30 20 2f 2a 20 54 72 65 65 20 63 6f 6e  0100 /* Tree con
17790 74 61 69 6e 73 20 61 20 54 4b 5f 43 4f 4c 4c 41  tains a TK_COLLA
177a0 54 45 20 6f 70 65 72 61 74 6f 72 20 2a 2f 0a 23  TE operator */.#
177b0 64 65 66 69 6e 65 20 45 50 5f 47 65 6e 65 72 69  define EP_Generi
177c0 63 20 20 20 30 78 30 30 30 32 30 30 20 2f 2a 20  c   0x000200 /* 
177d0 49 67 6e 6f 72 65 20 43 4f 4c 4c 41 54 45 20 6f  Ignore COLLATE o
177e0 72 20 61 66 66 69 6e 69 74 79 20 6f 6e 20 74 68  r affinity on th
177f0 69 73 20 74 72 65 65 20 2a 2f 0a 23 64 65 66 69  is tree */.#defi
17800 6e 65 20 45 50 5f 49 6e 74 56 61 6c 75 65 20 20  ne EP_IntValue  
17810 30 78 30 30 30 34 30 30 20 2f 2a 20 49 6e 74 65  0x000400 /* Inte
17820 67 65 72 20 76 61 6c 75 65 20 63 6f 6e 74 61 69  ger value contai
17830 6e 65 64 20 69 6e 20 75 2e 69 56 61 6c 75 65 20  ned in u.iValue 
17840 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 78 49  */.#define EP_xI
17850 73 53 65 6c 65 63 74 20 30 78 30 30 30 38 30 30  sSelect 0x000800
17860 20 2f 2a 20 78 2e 70 53 65 6c 65 63 74 20 69 73   /* x.pSelect is
17870 20 76 61 6c 69 64 20 28 6f 74 68 65 72 77 69 73   valid (otherwis
17880 65 20 78 2e 70 4c 69 73 74 20 69 73 29 20 2a 2f  e x.pList is) */
17890 0a 23 64 65 66 69 6e 65 20 45 50 5f 53 6b 69 70  .#define EP_Skip
178a0 20 20 20 20 20 20 30 78 30 30 31 30 30 30 20 2f        0x001000 /
178b0 2a 20 43 4f 4c 4c 41 54 45 2c 20 41 53 2c 20 6f  * COLLATE, AS, o
178c0 72 20 55 4e 4c 49 4b 45 4c 59 20 2a 2f 0a 23 64  r UNLIKELY */.#d
178d0 65 66 69 6e 65 20 45 50 5f 52 65 64 75 63 65 64  efine EP_Reduced
178e0 20 20 20 30 78 30 30 32 30 30 30 20 2f 2a 20 45     0x002000 /* E
178f0 78 70 72 20 73 74 72 75 63 74 20 45 58 50 52 5f  xpr struct EXPR_
17900 52 45 44 55 43 45 44 53 49 5a 45 20 62 79 74 65  REDUCEDSIZE byte
17910 73 20 6f 6e 6c 79 20 2a 2f 0a 23 64 65 66 69 6e  s only */.#defin
17920 65 20 45 50 5f 54 6f 6b 65 6e 4f 6e 6c 79 20 30  e EP_TokenOnly 0
17930 78 30 30 34 30 30 30 20 2f 2a 20 45 78 70 72 20  x004000 /* Expr 
17940 73 74 72 75 63 74 20 45 58 50 52 5f 54 4f 4b 45  struct EXPR_TOKE
17950 4e 4f 4e 4c 59 53 49 5a 45 20 62 79 74 65 73 20  NONLYSIZE bytes 
17960 6f 6e 6c 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20  only */.#define 
17970 45 50 5f 53 74 61 74 69 63 20 20 20 20 30 78 30  EP_Static    0x0
17980 30 38 30 30 30 20 2f 2a 20 48 65 6c 64 20 69 6e  08000 /* Held in
17990 20 6d 65 6d 6f 72 79 20 6e 6f 74 20 6f 62 74 61   memory not obta
179a0 69 6e 65 64 20 66 72 6f 6d 20 6d 61 6c 6c 6f 63  ined from malloc
179b0 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  () */.#define EP
179c0 5f 4d 65 6d 54 6f 6b 65 6e 20 20 30 78 30 31 30  _MemToken  0x010
179d0 30 30 30 20 2f 2a 20 4e 65 65 64 20 74 6f 20 73  000 /* Need to s
179e0 71 6c 69 74 65 33 44 62 46 72 65 65 28 29 20 45  qlite3DbFree() E
179f0 78 70 72 2e 7a 54 6f 6b 65 6e 20 2a 2f 0a 23 64  xpr.zToken */.#d
17a00 65 66 69 6e 65 20 45 50 5f 4e 6f 52 65 64 75 63  efine EP_NoReduc
17a10 65 20 20 30 78 30 32 30 30 30 30 20 2f 2a 20 43  e  0x020000 /* C
17a20 61 6e 6e 6f 74 20 45 58 50 52 44 55 50 5f 52 45  annot EXPRDUP_RE
17a30 44 55 43 45 20 74 68 69 73 20 45 78 70 72 20 2a  DUCE this Expr *
17a40 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 55 6e 6c  /.#define EP_Unl
17a50 69 6b 65 6c 79 20 20 30 78 30 34 30 30 30 30 20  ikely  0x040000 
17a60 2f 2a 20 75 6e 6c 69 6b 65 6c 79 28 29 20 6f 72  /* unlikely() or
17a70 20 6c 69 6b 65 6c 69 68 6f 6f 64 28 29 20 66 75   likelihood() fu
17a80 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e  nction */.#defin
17a90 65 20 45 50 5f 43 6f 6e 73 74 46 75 6e 63 20 30  e EP_ConstFunc 0
17aa0 78 30 38 30 30 30 30 20 2f 2a 20 41 20 53 51 4c  x080000 /* A SQL
17ab0 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e  ITE_FUNC_CONSTAN
17ac0 54 20 6f 72 20 5f 53 4c 4f 43 48 4e 47 20 66 75  T or _SLOCHNG fu
17ad0 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e  nction */.#defin
17ae0 65 20 45 50 5f 43 61 6e 42 65 4e 75 6c 6c 20 30  e EP_CanBeNull 0
17af0 78 31 30 30 30 30 30 20 2f 2a 20 43 61 6e 20 62  x100000 /* Can b
17b00 65 20 6e 75 6c 6c 20 64 65 73 70 69 74 65 20 4e  e null despite N
17b10 4f 54 20 4e 55 4c 4c 20 63 6f 6e 73 74 72 61 69  OT NULL constrai
17b20 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  nt */.#define EP
17b30 5f 53 75 62 71 75 65 72 79 20 20 30 78 32 30 30  _Subquery  0x200
17b40 30 30 30 20 2f 2a 20 54 72 65 65 20 63 6f 6e 74  000 /* Tree cont
17b50 61 69 6e 73 20 61 20 54 4b 5f 53 45 4c 45 43 54  ains a TK_SELECT
17b60 20 6f 70 65 72 61 74 6f 72 20 2a 2f 0a 23 64 65   operator */.#de
17b70 66 69 6e 65 20 45 50 5f 41 6c 69 61 73 20 20 20  fine EP_Alias   
17b80 20 20 30 78 34 30 30 30 30 30 20 2f 2a 20 49 73    0x400000 /* Is
17b90 20 61 6e 20 61 6c 69 61 73 20 66 6f 72 20 61 20   an alias for a 
17ba0 72 65 73 75 6c 74 20 73 65 74 20 63 6f 6c 75 6d  result set colum
17bb0 6e 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6d 62  n */../*.** Comb
17bc0 69 6e 61 74 69 6f 6e 73 20 6f 66 20 74 77 6f 20  inations of two 
17bd0 6f 72 20 6d 6f 72 65 20 45 50 5f 2a 20 66 6c 61  or more EP_* fla
17be0 67 73 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  gs.*/.#define EP
17bf0 5f 50 72 6f 70 61 67 61 74 65 20 28 45 50 5f 43  _Propagate (EP_C
17c00 6f 6c 6c 61 74 65 7c 45 50 5f 53 75 62 71 75 65  ollate|EP_Subque
17c10 72 79 29 20 2f 2a 20 50 72 6f 70 61 67 61 74 65  ry) /* Propagate
17c20 20 74 68 65 73 65 20 62 69 74 73 20 75 70 20 74   these bits up t
17c30 72 65 65 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68  ree */../*.** Th
17c40 65 73 65 20 6d 61 63 72 6f 73 20 63 61 6e 20 62  ese macros can b
17c50 65 20 75 73 65 64 20 74 6f 20 74 65 73 74 2c 20  e used to test, 
17c60 73 65 74 2c 20 6f 72 20 63 6c 65 61 72 20 62 69  set, or clear bi
17c70 74 73 20 69 6e 20 74 68 65 0a 2a 2a 20 45 78 70  ts in the.** Exp
17c80 72 2e 66 6c 61 67 73 20 66 69 65 6c 64 2e 0a 2a  r.flags field..*
17c90 2f 0a 23 64 65 66 69 6e 65 20 45 78 70 72 48 61  /.#define ExprHa
17ca0 73 50 72 6f 70 65 72 74 79 28 45 2c 50 29 20 20  sProperty(E,P)  
17cb0 20 20 20 28 28 28 45 29 2d 3e 66 6c 61 67 73 26     (((E)->flags&
17cc0 28 50 29 29 21 3d 30 29 0a 23 64 65 66 69 6e 65  (P))!=0).#define
17cd0 20 45 78 70 72 48 61 73 41 6c 6c 50 72 6f 70 65   ExprHasAllPrope
17ce0 72 74 79 28 45 2c 50 29 20 20 28 28 28 45 29 2d  rty(E,P)  (((E)-
17cf0 3e 66 6c 61 67 73 26 28 50 29 29 3d 3d 28 50 29  >flags&(P))==(P)
17d00 29 0a 23 64 65 66 69 6e 65 20 45 78 70 72 53 65  ).#define ExprSe
17d10 74 50 72 6f 70 65 72 74 79 28 45 2c 50 29 20 20  tProperty(E,P)  
17d20 20 20 20 28 45 29 2d 3e 66 6c 61 67 73 7c 3d 28     (E)->flags|=(
17d30 50 29 0a 23 64 65 66 69 6e 65 20 45 78 70 72 43  P).#define ExprC
17d40 6c 65 61 72 50 72 6f 70 65 72 74 79 28 45 2c 50  learProperty(E,P
17d50 29 20 20 20 28 45 29 2d 3e 66 6c 61 67 73 26 3d  )   (E)->flags&=
17d60 7e 28 50 29 0a 0a 2f 2a 20 54 68 65 20 45 78 70  ~(P)../* The Exp
17d70 72 53 65 74 56 56 41 50 72 6f 70 65 72 74 79 28  rSetVVAProperty(
17d80 29 20 6d 61 63 72 6f 20 69 73 20 75 73 65 64 20  ) macro is used 
17d90 66 6f 72 20 56 65 72 69 66 69 63 61 74 69 6f 6e  for Verification
17da0 2c 20 56 61 6c 69 64 61 74 69 6f 6e 2c 0a 2a 2a  , Validation,.**
17db0 20 61 6e 64 20 41 63 63 72 65 64 69 74 61 74 69   and Accreditati
17dc0 6f 6e 20 6f 6e 6c 79 2e 20 20 49 74 20 77 6f 72  on only.  It wor
17dd0 6b 73 20 6c 69 6b 65 20 45 78 70 72 53 65 74 50  ks like ExprSetP
17de0 72 6f 70 65 72 74 79 28 29 20 64 75 72 69 6e 67  roperty() during
17df0 20 56 56 41 0a 2a 2a 20 70 72 6f 63 65 73 73 65   VVA.** processe
17e00 73 20 62 75 74 20 69 73 20 61 20 6e 6f 2d 6f 70  s but is a no-op
17e10 20 66 6f 72 20 64 65 6c 69 76 65 72 79 2e 0a 2a   for delivery..*
17e20 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
17e30 44 45 42 55 47 0a 23 20 64 65 66 69 6e 65 20 45  DEBUG.# define E
17e40 78 70 72 53 65 74 56 56 41 50 72 6f 70 65 72 74  xprSetVVAPropert
17e50 79 28 45 2c 50 29 20 20 28 45 29 2d 3e 66 6c 61  y(E,P)  (E)->fla
17e60 67 73 7c 3d 28 50 29 0a 23 65 6c 73 65 0a 23 20  gs|=(P).#else.# 
17e70 64 65 66 69 6e 65 20 45 78 70 72 53 65 74 56 56  define ExprSetVV
17e80 41 50 72 6f 70 65 72 74 79 28 45 2c 50 29 0a 23  AProperty(E,P).#
17e90 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 4d 61 63  endif../*.** Mac
17ea0 72 6f 73 20 74 6f 20 64 65 74 65 72 6d 69 6e 65  ros to determine
17eb0 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 62   the number of b
17ec0 79 74 65 73 20 72 65 71 75 69 72 65 64 20 62 79  ytes required by
17ed0 20 61 20 6e 6f 72 6d 61 6c 20 45 78 70 72 0a 2a   a normal Expr.*
17ee0 2a 20 73 74 72 75 63 74 2c 20 61 6e 20 45 78 70  * struct, an Exp
17ef0 72 20 73 74 72 75 63 74 20 77 69 74 68 20 74 68  r struct with th
17f00 65 20 45 50 5f 52 65 64 75 63 65 64 20 66 6c 61  e EP_Reduced fla
17f10 67 20 73 65 74 20 69 6e 20 45 78 70 72 2e 66 6c  g set in Expr.fl
17f20 61 67 73 0a 2a 2a 20 61 6e 64 20 61 6e 20 45 78  ags.** and an Ex
17f30 70 72 20 73 74 72 75 63 74 20 77 69 74 68 20 74  pr struct with t
17f40 68 65 20 45 50 5f 54 6f 6b 65 6e 4f 6e 6c 79 20  he EP_TokenOnly 
17f50 66 6c 61 67 20 73 65 74 2e 0a 2a 2f 0a 23 64 65  flag set..*/.#de
17f60 66 69 6e 65 20 45 58 50 52 5f 46 55 4c 4c 53 49  fine EXPR_FULLSI
17f70 5a 45 20 20 20 20 20 20 20 20 20 20 20 73 69 7a  ZE           siz
17f80 65 6f 66 28 45 78 70 72 29 20 20 20 20 20 20 20  eof(Expr)       
17f90 20 20 20 20 2f 2a 20 46 75 6c 6c 20 73 69 7a 65      /* Full size
17fa0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 58 50 52   */.#define EXPR
17fb0 5f 52 45 44 55 43 45 44 53 49 5a 45 20 20 20 20  _REDUCEDSIZE    
17fc0 20 20 20 20 6f 66 66 73 65 74 6f 66 28 45 78 70      offsetof(Exp
17fd0 72 2c 69 54 61 62 6c 65 29 20 20 2f 2a 20 43 6f  r,iTable)  /* Co
17fe0 6d 6d 6f 6e 20 66 65 61 74 75 72 65 73 20 2a 2f  mmon features */
17ff0 0a 23 64 65 66 69 6e 65 20 45 58 50 52 5f 54 4f  .#define EXPR_TO
18000 4b 45 4e 4f 4e 4c 59 53 49 5a 45 20 20 20 20 20  KENONLYSIZE     
18010 20 6f 66 66 73 65 74 6f 66 28 45 78 70 72 2c 70   offsetof(Expr,p
18020 4c 65 66 74 29 20 20 20 2f 2a 20 46 65 77 65 72  Left)   /* Fewer
18030 20 66 65 61 74 75 72 65 73 20 2a 2f 0a 0a 2f 2a   features */../*
18040 0a 2a 2a 20 46 6c 61 67 73 20 70 61 73 73 65 64  .** Flags passed
18050 20 74 6f 20 74 68 65 20 73 71 6c 69 74 65 33 45   to the sqlite3E
18060 78 70 72 44 75 70 28 29 20 66 75 6e 63 74 69 6f  xprDup() functio
18070 6e 2e 20 53 65 65 20 74 68 65 20 68 65 61 64 65  n. See the heade
18080 72 20 63 6f 6d 6d 65 6e 74 0a 2a 2a 20 61 62 6f  r comment.** abo
18090 76 65 20 73 71 6c 69 74 65 33 45 78 70 72 44 75  ve sqlite3ExprDu
180a0 70 28 29 20 66 6f 72 20 64 65 74 61 69 6c 73 2e  p() for details.
180b0 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 45 58 50 52  .*/.#define EXPR
180c0 44 55 50 5f 52 45 44 55 43 45 20 20 20 20 20 20  DUP_REDUCE      
180d0 20 20 20 30 78 30 30 30 31 20 20 2f 2a 20 55 73     0x0001  /* Us
180e0 65 64 20 72 65 64 75 63 65 64 2d 73 69 7a 65 20  ed reduced-size 
180f0 45 78 70 72 20 6e 6f 64 65 73 20 2a 2f 0a 0a 2f  Expr nodes */../
18100 2a 0a 2a 2a 20 41 20 6c 69 73 74 20 6f 66 20 65  *.** A list of e
18110 78 70 72 65 73 73 69 6f 6e 73 2e 20 20 45 61 63  xpressions.  Eac
18120 68 20 65 78 70 72 65 73 73 69 6f 6e 20 6d 61 79  h expression may
18130 20 6f 70 74 69 6f 6e 61 6c 6c 79 20 68 61 76 65   optionally have
18140 20 61 0a 2a 2a 20 6e 61 6d 65 2e 20 20 41 6e 20   a.** name.  An 
18150 65 78 70 72 2f 6e 61 6d 65 20 63 6f 6d 62 69 6e  expr/name combin
18160 61 74 69 6f 6e 20 63 61 6e 20 62 65 20 75 73 65  ation can be use
18170 64 20 69 6e 20 73 65 76 65 72 61 6c 20 77 61 79  d in several way
18180 73 2c 20 73 75 63 68 0a 2a 2a 20 61 73 20 74 68  s, such.** as th
18190 65 20 6c 69 73 74 20 6f 66 20 22 65 78 70 72 20  e list of "expr 
181a0 41 53 20 49 44 22 20 66 69 65 6c 64 73 20 66 6f  AS ID" fields fo
181b0 6c 6c 6f 77 69 6e 67 20 61 20 22 53 45 4c 45 43  llowing a "SELEC
181c0 54 22 20 6f 72 20 69 6e 20 74 68 65 0a 2a 2a 20  T" or in the.** 
181d0 6c 69 73 74 20 6f 66 20 22 49 44 20 3d 20 65 78  list of "ID = ex
181e0 70 72 22 20 69 74 65 6d 73 20 69 6e 20 61 6e 20  pr" items in an 
181f0 55 50 44 41 54 45 2e 20 20 41 20 6c 69 73 74 20  UPDATE.  A list 
18200 6f 66 20 65 78 70 72 65 73 73 69 6f 6e 73 20 63  of expressions c
18210 61 6e 0a 2a 2a 20 61 6c 73 6f 20 62 65 20 75 73  an.** also be us
18220 65 64 20 61 73 20 74 68 65 20 61 72 67 75 6d 65  ed as the argume
18230 6e 74 20 74 6f 20 61 20 66 75 6e 63 74 69 6f 6e  nt to a function
18240 2c 20 69 6e 20 77 68 69 63 68 20 63 61 73 65 20  , in which case 
18250 74 68 65 20 61 2e 7a 4e 61 6d 65 0a 2a 2a 20 66  the a.zName.** f
18260 69 65 6c 64 20 69 73 20 6e 6f 74 20 75 73 65 64  ield is not used
18270 2e 0a 2a 2a 0a 2a 2a 20 42 79 20 64 65 66 61 75  ..**.** By defau
18280 6c 74 20 74 68 65 20 45 78 70 72 2e 7a 53 70 61  lt the Expr.zSpa
18290 6e 20 66 69 65 6c 64 20 68 6f 6c 64 73 20 61 20  n field holds a 
182a0 68 75 6d 61 6e 2d 72 65 61 64 61 62 6c 65 20 64  human-readable d
182b0 65 73 63 72 69 70 74 69 6f 6e 20 6f 66 0a 2a 2a  escription of.**
182c0 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20   the expression 
182d0 74 68 61 74 20 69 73 20 75 73 65 64 20 69 6e 20  that is used in 
182e0 74 68 65 20 67 65 6e 65 72 61 74 69 6f 6e 20 6f  the generation o
182f0 66 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 73  f error messages
18300 20 61 6e 64 0a 2a 2a 20 63 6f 6c 75 6d 6e 20 6c   and.** column l
18310 61 62 65 6c 73 2e 20 20 49 6e 20 74 68 69 73 20  abels.  In this 
18320 63 61 73 65 2c 20 45 78 70 72 2e 7a 53 70 61 6e  case, Expr.zSpan
18330 20 69 73 20 74 79 70 69 63 61 6c 6c 79 20 74 68   is typically th
18340 65 20 74 65 78 74 20 6f 66 20 61 0a 2a 2a 20 63  e text of a.** c
18350 6f 6c 75 6d 6e 20 65 78 70 72 65 73 73 69 6f 6e  olumn expression
18360 20 61 73 20 69 74 20 65 78 69 73 74 73 20 69 6e   as it exists in
18370 20 61 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d   a SELECT statem
18380 65 6e 74 2e 20 20 48 6f 77 65 76 65 72 2c 20 69  ent.  However, i
18390 66 0a 2a 2a 20 74 68 65 20 62 53 70 61 6e 49 73  f.** the bSpanIs
183a0 54 61 62 20 66 6c 61 67 20 69 73 20 73 65 74 2c  Tab flag is set,
183b0 20 74 68 65 6e 20 7a 53 70 61 6e 20 69 73 20 6f   then zSpan is o
183c0 76 65 72 6c 6f 61 64 65 64 20 74 6f 20 6d 65 61  verloaded to mea
183d0 6e 20 74 68 65 20 6e 61 6d 65 0a 2a 2a 20 6f 66  n the name.** of
183e0 20 74 68 65 20 72 65 73 75 6c 74 20 63 6f 6c 75   the result colu
183f0 6d 6e 20 69 6e 20 74 68 65 20 66 6f 72 6d 3a 20  mn in the form: 
18400 44 41 54 41 42 41 53 45 2e 54 41 42 4c 45 2e 43  DATABASE.TABLE.C
18410 4f 4c 55 4d 4e 2e 20 20 54 68 69 73 20 6c 61 74  OLUMN.  This lat
18420 65 72 0a 2a 2a 20 66 6f 72 6d 20 69 73 20 75 73  er.** form is us
18430 65 64 20 66 6f 72 20 6e 61 6d 65 20 72 65 73 6f  ed for name reso
18440 6c 75 74 69 6f 6e 20 77 69 74 68 20 6e 65 73 74  lution with nest
18450 65 64 20 46 52 4f 4d 20 63 6c 61 75 73 65 73 2e  ed FROM clauses.
18460 0a 2a 2f 0a 73 74 72 75 63 74 20 45 78 70 72 4c  .*/.struct ExprL
18470 69 73 74 20 7b 0a 20 20 69 6e 74 20 6e 45 78 70  ist {.  int nExp
18480 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  r;             /
18490 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 78 70 72  * Number of expr
184a0 65 73 73 69 6f 6e 73 20 6f 6e 20 74 68 65 20 6c  essions on the l
184b0 69 73 74 20 2a 2f 0a 20 20 73 74 72 75 63 74 20  ist */.  struct 
184c0 45 78 70 72 4c 69 73 74 5f 69 74 65 6d 20 7b 20  ExprList_item { 
184d0 2f 2a 20 46 6f 72 20 65 61 63 68 20 65 78 70 72  /* For each expr
184e0 65 73 73 69 6f 6e 20 69 6e 20 74 68 65 20 6c 69  ession in the li
184f0 73 74 20 2a 2f 0a 20 20 20 20 45 78 70 72 20 2a  st */.    Expr *
18500 70 45 78 70 72 3b 20 20 20 20 20 20 20 20 20 20  pExpr;          
18510 20 20 2f 2a 20 54 68 65 20 6c 69 73 74 20 6f 66    /* The list of
18520 20 65 78 70 72 65 73 73 69 6f 6e 73 20 2a 2f 0a   expressions */.
18530 20 20 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b      char *zName;
18540 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
18550 6f 6b 65 6e 20 61 73 73 6f 63 69 61 74 65 64 20  oken associated 
18560 77 69 74 68 20 74 68 69 73 20 65 78 70 72 65 73  with this expres
18570 73 69 6f 6e 20 2a 2f 0a 20 20 20 20 63 68 61 72  sion */.    char
18580 20 2a 7a 53 70 61 6e 3b 20 20 20 20 20 20 20 20   *zSpan;        
18590 20 20 20 20 2f 2a 20 4f 72 69 67 69 6e 61 6c 20      /* Original 
185a0 74 65 78 74 20 6f 66 20 74 68 65 20 65 78 70 72  text of the expr
185b0 65 73 73 69 6f 6e 20 2a 2f 0a 20 20 20 20 75 38  ession */.    u8
185c0 20 73 6f 72 74 4f 72 64 65 72 3b 20 20 20 20 20   sortOrder;     
185d0 20 20 20 20 20 20 2f 2a 20 31 20 66 6f 72 20 44        /* 1 for D
185e0 45 53 43 20 6f 72 20 30 20 66 6f 72 20 41 53 43  ESC or 0 for ASC
185f0 20 2a 2f 0a 20 20 20 20 75 6e 73 69 67 6e 65 64   */.    unsigned
18600 20 64 6f 6e 65 20 3a 31 3b 20 20 20 20 20 20 20   done :1;       
18610 2f 2a 20 41 20 66 6c 61 67 20 74 6f 20 69 6e 64  /* A flag to ind
18620 69 63 61 74 65 20 77 68 65 6e 20 70 72 6f 63 65  icate when proce
18630 73 73 69 6e 67 20 69 73 20 66 69 6e 69 73 68 65  ssing is finishe
18640 64 20 2a 2f 0a 20 20 20 20 75 6e 73 69 67 6e 65  d */.    unsigne
18650 64 20 62 53 70 61 6e 49 73 54 61 62 20 3a 31 3b  d bSpanIsTab :1;
18660 20 2f 2a 20 7a 53 70 61 6e 20 68 6f 6c 64 73 20   /* zSpan holds 
18670 44 42 2e 54 41 42 4c 45 2e 43 4f 4c 55 4d 4e 20  DB.TABLE.COLUMN 
18680 2a 2f 0a 20 20 20 20 75 6e 73 69 67 6e 65 64 20  */.    unsigned 
18690 72 65 75 73 61 62 6c 65 20 3a 31 3b 20 20 20 2f  reusable :1;   /
186a0 2a 20 43 6f 6e 73 74 61 6e 74 20 65 78 70 72 65  * Constant expre
186b0 73 73 69 6f 6e 20 69 73 20 72 65 75 73 61 62 6c  ssion is reusabl
186c0 65 20 2a 2f 0a 20 20 20 20 75 6e 69 6f 6e 20 7b  e */.    union {
186d0 0a 20 20 20 20 20 20 73 74 72 75 63 74 20 7b 0a  .      struct {.
186e0 20 20 20 20 20 20 20 20 75 31 36 20 69 4f 72 64          u16 iOrd
186f0 65 72 42 79 43 6f 6c 3b 20 20 20 20 20 20 2f 2a  erByCol;      /*
18700 20 46 6f 72 20 4f 52 44 45 52 20 42 59 2c 20 63   For ORDER BY, c
18710 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 69 6e 20  olumn number in 
18720 72 65 73 75 6c 74 20 73 65 74 20 2a 2f 0a 20 20  result set */.  
18730 20 20 20 20 20 20 75 31 36 20 69 41 6c 69 61 73        u16 iAlias
18740 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49  ;           /* I
18750 6e 64 65 78 20 69 6e 74 6f 20 50 61 72 73 65 2e  ndex into Parse.
18760 61 41 6c 69 61 73 5b 5d 20 66 6f 72 20 7a 4e 61  aAlias[] for zNa
18770 6d 65 20 2a 2f 0a 20 20 20 20 20 20 7d 20 78 3b  me */.      } x;
18780 0a 20 20 20 20 20 20 69 6e 74 20 69 43 6f 6e 73  .      int iCons
18790 74 45 78 70 72 52 65 67 3b 20 20 20 20 20 20 2f  tExprReg;      /
187a0 2a 20 52 65 67 69 73 74 65 72 20 69 6e 20 77 68  * Register in wh
187b0 69 63 68 20 45 78 70 72 20 76 61 6c 75 65 20 69  ich Expr value i
187c0 73 20 63 61 63 68 65 64 20 2a 2f 0a 20 20 20 20  s cached */.    
187d0 7d 20 75 3b 0a 20 20 7d 20 2a 61 3b 20 20 20 20  } u;.  } *a;    
187e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
187f0 20 41 6c 6c 6f 63 20 61 20 70 6f 77 65 72 20 6f   Alloc a power o
18800 66 20 74 77 6f 20 67 72 65 61 74 65 72 20 6f 72  f two greater or
18810 20 65 71 75 61 6c 20 74 6f 20 6e 45 78 70 72 20   equal to nExpr 
18820 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20  */.};../*.** An 
18830 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73  instance of this
18840 20 73 74 72 75 63 74 75 72 65 20 69 73 20 75 73   structure is us
18850 65 64 20 62 79 20 74 68 65 20 70 61 72 73 65 72  ed by the parser
18860 20 74 6f 20 72 65 63 6f 72 64 20 62 6f 74 68 0a   to record both.
18870 2a 2a 20 74 68 65 20 70 61 72 73 65 20 74 72 65  ** the parse tre
18880 65 20 66 6f 72 20 61 6e 20 65 78 70 72 65 73 73  e for an express
18890 69 6f 6e 20 61 6e 64 20 74 68 65 20 73 70 61 6e  ion and the span
188a0 20 6f 66 20 69 6e 70 75 74 20 74 65 78 74 20 66   of input text f
188b0 6f 72 20 61 6e 0a 2a 2a 20 65 78 70 72 65 73 73  or an.** express
188c0 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 45  ion..*/.struct E
188d0 78 70 72 53 70 61 6e 20 7b 0a 20 20 45 78 70 72  xprSpan {.  Expr
188e0 20 2a 70 45 78 70 72 3b 20 20 20 20 20 20 20 20   *pExpr;        
188f0 20 20 2f 2a 20 54 68 65 20 65 78 70 72 65 73 73    /* The express
18900 69 6f 6e 20 70 61 72 73 65 20 74 72 65 65 20 2a  ion parse tree *
18910 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  /.  const char *
18920 7a 53 74 61 72 74 3b 20 20 20 2f 2a 20 46 69 72  zStart;   /* Fir
18930 73 74 20 63 68 61 72 61 63 74 65 72 20 6f 66 20  st character of 
18940 69 6e 70 75 74 20 74 65 78 74 20 2a 2f 0a 20 20  input text */.  
18950 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 45 6e 64  const char *zEnd
18960 3b 20 20 20 20 20 2f 2a 20 4f 6e 65 20 63 68 61  ;     /* One cha
18970 72 61 63 74 65 72 20 70 61 73 74 20 74 68 65 20  racter past the 
18980 65 6e 64 20 6f 66 20 69 6e 70 75 74 20 74 65 78  end of input tex
18990 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41  t */.};../*.** A
189a0 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  n instance of th
189b0 69 73 20 73 74 72 75 63 74 75 72 65 20 63 61 6e  is structure can
189c0 20 68 6f 6c 64 20 61 20 73 69 6d 70 6c 65 20 6c   hold a simple l
189d0 69 73 74 20 6f 66 20 69 64 65 6e 74 69 66 69 65  ist of identifie
189e0 72 73 2c 0a 2a 2a 20 73 75 63 68 20 61 73 20 74  rs,.** such as t
189f0 68 65 20 6c 69 73 74 20 22 61 2c 62 2c 63 22 20  he list "a,b,c" 
18a00 69 6e 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  in the following
18a10 20 73 74 61 74 65 6d 65 6e 74 73 3a 0a 2a 2a 0a   statements:.**.
18a20 2a 2a 20 20 20 20 20 20 49 4e 53 45 52 54 20 49  **      INSERT I
18a30 4e 54 4f 20 74 28 61 2c 62 2c 63 29 20 56 41 4c  NTO t(a,b,c) VAL
18a40 55 45 53 20 2e 2e 2e 3b 0a 2a 2a 20 20 20 20 20  UES ...;.**     
18a50 20 43 52 45 41 54 45 20 49 4e 44 45 58 20 69 64   CREATE INDEX id
18a60 78 20 4f 4e 20 74 28 61 2c 62 2c 63 29 3b 0a 2a  x ON t(a,b,c);.*
18a70 2a 20 20 20 20 20 20 43 52 45 41 54 45 20 54 52  *      CREATE TR
18a80 49 47 47 45 52 20 74 72 69 67 20 42 45 46 4f 52  IGGER trig BEFOR
18a90 45 20 55 50 44 41 54 45 20 4f 4e 20 74 28 61 2c  E UPDATE ON t(a,
18aa0 62 2c 63 29 20 2e 2e 2e 3b 0a 2a 2a 0a 2a 2a 20  b,c) ...;.**.** 
18ab0 54 68 65 20 49 64 4c 69 73 74 2e 61 2e 69 64 78  The IdList.a.idx
18ac0 20 66 69 65 6c 64 20 69 73 20 75 73 65 64 20 77   field is used w
18ad0 68 65 6e 20 74 68 65 20 49 64 4c 69 73 74 20 72  hen the IdList r
18ae0 65 70 72 65 73 65 6e 74 73 20 74 68 65 20 6c 69  epresents the li
18af0 73 74 20 6f 66 0a 2a 2a 20 63 6f 6c 75 6d 6e 20  st of.** column 
18b00 6e 61 6d 65 73 20 61 66 74 65 72 20 61 20 74 61  names after a ta
18b10 62 6c 65 20 6e 61 6d 65 20 69 6e 20 61 6e 20 49  ble name in an I
18b20 4e 53 45 52 54 20 73 74 61 74 65 6d 65 6e 74 2e  NSERT statement.
18b30 20 20 49 6e 20 74 68 65 20 73 74 61 74 65 6d 65    In the stateme
18b40 6e 74 0a 2a 2a 0a 2a 2a 20 20 20 20 20 49 4e 53  nt.**.**     INS
18b50 45 52 54 20 49 4e 54 4f 20 74 28 61 2c 62 2c 63  ERT INTO t(a,b,c
18b60 29 20 2e 2e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 22  ) ....**.** If "
18b70 61 22 20 69 73 20 74 68 65 20 6b 2d 74 68 20 63  a" is the k-th c
18b80 6f 6c 75 6d 6e 20 6f 66 20 74 61 62 6c 65 20 22  olumn of table "
18b90 74 22 2c 20 74 68 65 6e 20 49 64 4c 69 73 74 2e  t", then IdList.
18ba0 61 5b 30 5d 2e 69 64 78 3d 3d 6b 2e 0a 2a 2f 0a  a[0].idx==k..*/.
18bb0 73 74 72 75 63 74 20 49 64 4c 69 73 74 20 7b 0a  struct IdList {.
18bc0 20 20 73 74 72 75 63 74 20 49 64 4c 69 73 74 5f    struct IdList_
18bd0 69 74 65 6d 20 7b 0a 20 20 20 20 63 68 61 72 20  item {.    char 
18be0 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 2f 2a 20  *zName;      /* 
18bf0 4e 61 6d 65 20 6f 66 20 74 68 65 20 69 64 65 6e  Name of the iden
18c00 74 69 66 69 65 72 20 2a 2f 0a 20 20 20 20 69 6e  tifier */.    in
18c10 74 20 69 64 78 3b 20 20 20 20 20 20 20 20 20 20  t idx;          
18c20 2f 2a 20 49 6e 64 65 78 20 69 6e 20 73 6f 6d 65  /* Index in some
18c30 20 54 61 62 6c 65 2e 61 43 6f 6c 5b 5d 20 6f 66   Table.aCol[] of
18c40 20 61 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 64 20   a column named 
18c50 7a 4e 61 6d 65 20 2a 2f 0a 20 20 7d 20 2a 61 3b  zName */.  } *a;
18c60 0a 20 20 69 6e 74 20 6e 49 64 3b 20 20 20 20 20  .  int nId;     
18c70 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
18c80 20 69 64 65 6e 74 69 66 69 65 72 73 20 6f 6e 20   identifiers on 
18c90 74 68 65 20 6c 69 73 74 20 2a 2f 0a 7d 3b 0a 0a  the list */.};..
18ca0 2f 2a 0a 2a 2a 20 54 68 65 20 62 69 74 6d 61 73  /*.** The bitmas
18cb0 6b 20 64 61 74 61 74 79 70 65 20 64 65 66 69 6e  k datatype defin
18cc0 65 64 20 62 65 6c 6f 77 20 69 73 20 75 73 65 64  ed below is used
18cd0 20 66 6f 72 20 76 61 72 69 6f 75 73 20 6f 70 74   for various opt
18ce0 69 6d 69 7a 61 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a  imizations..**.*
18cf0 2a 20 43 68 61 6e 67 69 6e 67 20 74 68 69 73 20  * Changing this 
18d00 66 72 6f 6d 20 61 20 36 34 2d 62 69 74 20 74 6f  from a 64-bit to
18d10 20 61 20 33 32 2d 62 69 74 20 74 79 70 65 20 6c   a 32-bit type l
18d20 69 6d 69 74 73 20 74 68 65 20 6e 75 6d 62 65 72  imits the number
18d30 20 6f 66 0a 2a 2a 20 74 61 62 6c 65 73 20 69 6e   of.** tables in
18d40 20 61 20 6a 6f 69 6e 20 74 6f 20 33 32 20 69 6e   a join to 32 in
18d50 73 74 65 61 64 20 6f 66 20 36 34 2e 20 20 42 75  stead of 64.  Bu
18d60 74 20 69 74 20 61 6c 73 6f 20 72 65 64 75 63 65  t it also reduce
18d70 73 20 74 68 65 20 73 69 7a 65 0a 2a 2a 20 6f 66  s the size.** of
18d80 20 74 68 65 20 6c 69 62 72 61 72 79 20 62 79 20   the library by 
18d90 37 33 38 20 62 79 74 65 73 20 6f 6e 20 69 78 38  738 bytes on ix8
18da0 36 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c  6..*/.#ifdef SQL
18db0 49 54 45 5f 42 49 54 4d 41 53 4b 5f 54 59 50 45  ITE_BITMASK_TYPE
18dc0 0a 20 20 74 79 70 65 64 65 66 20 53 51 4c 49 54  .  typedef SQLIT
18dd0 45 5f 42 49 54 4d 41 53 4b 5f 54 59 50 45 20 42  E_BITMASK_TYPE B
18de0 69 74 6d 61 73 6b 3b 0a 23 65 6c 73 65 0a 20 20  itmask;.#else.  
18df0 74 79 70 65 64 65 66 20 75 36 34 20 42 69 74 6d  typedef u64 Bitm
18e00 61 73 6b 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  ask;.#endif../*.
18e10 2a 2a 20 54 68 65 20 6e 75 6d 62 65 72 20 6f 66  ** The number of
18e20 20 62 69 74 73 20 69 6e 20 61 20 42 69 74 6d 61   bits in a Bitma
18e30 73 6b 2e 20 20 22 42 4d 53 22 20 6d 65 61 6e 73  sk.  "BMS" means
18e40 20 22 42 69 74 4d 61 73 6b 20 53 69 7a 65 22 2e   "BitMask Size".
18e50 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 42 4d 53 20  .*/.#define BMS 
18e60 20 28 28 69 6e 74 29 28 73 69 7a 65 6f 66 28 42   ((int)(sizeof(B
18e70 69 74 6d 61 73 6b 29 2a 38 29 29 0a 0a 2f 2a 0a  itmask)*8))../*.
18e80 2a 2a 20 41 20 62 69 74 20 69 6e 20 61 20 42 69  ** A bit in a Bi
18e90 74 6d 61 73 6b 0a 2a 2f 0a 23 64 65 66 69 6e 65  tmask.*/.#define
18ea0 20 4d 41 53 4b 42 49 54 28 6e 29 20 20 20 28 28   MASKBIT(n)   ((
18eb0 28 42 69 74 6d 61 73 6b 29 31 29 3c 3c 28 6e 29  (Bitmask)1)<<(n)
18ec0 29 0a 23 64 65 66 69 6e 65 20 4d 41 53 4b 42 49  ).#define MASKBI
18ed0 54 33 32 28 6e 29 20 28 28 28 75 6e 73 69 67 6e  T32(n) (((unsign
18ee0 65 64 20 69 6e 74 29 31 29 3c 3c 28 6e 29 29 0a  ed int)1)<<(n)).
18ef0 23 64 65 66 69 6e 65 20 41 4c 4c 42 49 54 53 20  #define ALLBITS 
18f00 20 20 20 20 20 28 28 42 69 74 6d 61 73 6b 29 2d       ((Bitmask)-
18f10 31 29 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f  1)../*.** The fo
18f20 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72  llowing structur
18f30 65 20 64 65 73 63 72 69 62 65 73 20 74 68 65 20  e describes the 
18f40 46 52 4f 4d 20 63 6c 61 75 73 65 20 6f 66 20 61  FROM clause of a
18f50 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e   SELECT statemen
18f60 74 2e 0a 2a 2a 20 45 61 63 68 20 74 61 62 6c 65  t..** Each table
18f70 20 6f 72 20 73 75 62 71 75 65 72 79 20 69 6e 20   or subquery in 
18f80 74 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 20  the FROM clause 
18f90 69 73 20 61 20 73 65 70 61 72 61 74 65 20 65 6c  is a separate el
18fa0 65 6d 65 6e 74 20 6f 66 0a 2a 2a 20 74 68 65 20  ement of.** the 
18fb0 53 72 63 4c 69 73 74 2e 61 5b 5d 20 61 72 72 61  SrcList.a[] arra
18fc0 79 2e 0a 2a 2a 0a 2a 2a 20 57 69 74 68 20 74 68  y..**.** With th
18fd0 65 20 61 64 64 69 74 69 6f 6e 20 6f 66 20 6d 75  e addition of mu
18fe0 6c 74 69 70 6c 65 20 64 61 74 61 62 61 73 65 20  ltiple database 
18ff0 73 75 70 70 6f 72 74 2c 20 74 68 65 20 66 6f 6c  support, the fol
19000 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65  lowing structure
19010 0a 2a 2a 20 63 61 6e 20 61 6c 73 6f 20 62 65 20  .** can also be 
19020 75 73 65 64 20 74 6f 20 64 65 73 63 72 69 62 65  used to describe
19030 20 61 20 70 61 72 74 69 63 75 6c 61 72 20 74 61   a particular ta
19040 62 6c 65 20 73 75 63 68 20 61 73 20 74 68 65 20  ble such as the 
19050 74 61 62 6c 65 20 74 68 61 74 0a 2a 2a 20 69 73  table that.** is
19060 20 6d 6f 64 69 66 69 65 64 20 62 79 20 61 6e 20   modified by an 
19070 49 4e 53 45 52 54 2c 20 44 45 4c 45 54 45 2c 20  INSERT, DELETE, 
19080 6f 72 20 55 50 44 41 54 45 20 73 74 61 74 65 6d  or UPDATE statem
19090 65 6e 74 2e 20 20 49 6e 20 73 74 61 6e 64 61 72  ent.  In standar
190a0 64 20 53 51 4c 2c 0a 2a 2a 20 73 75 63 68 20 61  d SQL,.** such a
190b0 20 74 61 62 6c 65 20 6d 75 73 74 20 62 65 20 61   table must be a
190c0 20 73 69 6d 70 6c 65 20 6e 61 6d 65 3a 20 49 44   simple name: ID
190d0 2e 20 20 42 75 74 20 69 6e 20 53 51 4c 69 74 65  .  But in SQLite
190e0 2c 20 74 68 65 20 74 61 62 6c 65 20 63 61 6e 0a  , the table can.
190f0 2a 2a 20 6e 6f 77 20 62 65 20 69 64 65 6e 74 69  ** now be identi
19100 66 69 65 64 20 62 79 20 61 20 64 61 74 61 62 61  fied by a databa
19110 73 65 20 6e 61 6d 65 2c 20 61 20 64 6f 74 2c 20  se name, a dot, 
19120 74 68 65 6e 20 74 68 65 20 74 61 62 6c 65 20 6e  then the table n
19130 61 6d 65 3a 20 49 44 2e 49 44 2e 0a 2a 2a 0a 2a  ame: ID.ID..**.*
19140 2a 20 54 68 65 20 6a 6f 69 6e 74 79 70 65 20 73  * The jointype s
19150 74 61 72 74 73 20 6f 75 74 20 73 68 6f 77 69 6e  tarts out showin
19160 67 20 74 68 65 20 6a 6f 69 6e 20 74 79 70 65 20  g the join type 
19170 62 65 74 77 65 65 6e 20 74 68 65 20 63 75 72 72  between the curr
19180 65 6e 74 20 74 61 62 6c 65 0a 2a 2a 20 61 6e 64  ent table.** and
19190 20 74 68 65 20 6e 65 78 74 20 74 61 62 6c 65 20   the next table 
191a0 6f 6e 20 74 68 65 20 6c 69 73 74 2e 20 20 54 68  on the list.  Th
191b0 65 20 70 61 72 73 65 72 20 62 75 69 6c 64 73 20  e parser builds 
191c0 74 68 65 20 6c 69 73 74 20 74 68 69 73 20 77 61  the list this wa
191d0 79 2e 0a 2a 2a 20 42 75 74 20 73 71 6c 69 74 65  y..** But sqlite
191e0 33 53 72 63 4c 69 73 74 53 68 69 66 74 4a 6f 69  3SrcListShiftJoi
191f0 6e 54 79 70 65 28 29 20 6c 61 74 65 72 20 73 68  nType() later sh
19200 69 66 74 73 20 74 68 65 20 6a 6f 69 6e 74 79 70  ifts the jointyp
19210 65 73 20 73 6f 20 74 68 61 74 20 65 61 63 68 0a  es so that each.
19220 2a 2a 20 6a 6f 69 6e 74 79 70 65 20 65 78 70 72  ** jointype expr
19230 65 73 73 65 73 20 74 68 65 20 6a 6f 69 6e 20 62  esses the join b
19240 65 74 77 65 65 6e 20 74 68 65 20 74 61 62 6c 65  etween the table
19250 20 61 6e 64 20 74 68 65 20 70 72 65 76 69 6f 75   and the previou
19260 73 20 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49  s table..**.** I
19270 6e 20 74 68 65 20 63 6f 6c 55 73 65 64 20 66 69  n the colUsed fi
19280 65 6c 64 2c 20 74 68 65 20 68 69 67 68 2d 6f 72  eld, the high-or
19290 64 65 72 20 62 69 74 20 28 62 69 74 20 36 33 29  der bit (bit 63)
192a0 20 69 73 20 73 65 74 20 69 66 20 74 68 65 20 74   is set if the t
192b0 61 62 6c 65 0a 2a 2a 20 63 6f 6e 74 61 69 6e 73  able.** contains
192c0 20 6d 6f 72 65 20 74 68 61 6e 20 36 33 20 63 6f   more than 63 co
192d0 6c 75 6d 6e 73 20 61 6e 64 20 74 68 65 20 36 34  lumns and the 64
192e0 2d 74 68 20 6f 72 20 6c 61 74 65 72 20 63 6f 6c  -th or later col
192f0 75 6d 6e 20 69 73 20 75 73 65 64 2e 0a 2a 2f 0a  umn is used..*/.
19300 73 74 72 75 63 74 20 53 72 63 4c 69 73 74 20 7b  struct SrcList {
19310 0a 20 20 69 6e 74 20 6e 53 72 63 3b 20 20 20 20  .  int nSrc;    
19320 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
19330 20 74 61 62 6c 65 73 20 6f 72 20 73 75 62 71 75   tables or subqu
19340 65 72 69 65 73 20 69 6e 20 74 68 65 20 46 52 4f  eries in the FRO
19350 4d 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 75 33  M clause */.  u3
19360 32 20 6e 41 6c 6c 6f 63 3b 20 20 20 20 20 20 2f  2 nAlloc;      /
19370 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 6e 74 72  * Number of entr
19380 69 65 73 20 61 6c 6c 6f 63 61 74 65 64 20 69 6e  ies allocated in
19390 20 61 5b 5d 20 62 65 6c 6f 77 20 2a 2f 0a 20 20   a[] below */.  
193a0 73 74 72 75 63 74 20 53 72 63 4c 69 73 74 5f 69  struct SrcList_i
193b0 74 65 6d 20 7b 0a 20 20 20 20 53 63 68 65 6d 61  tem {.    Schema
193c0 20 2a 70 53 63 68 65 6d 61 3b 20 20 2f 2a 20 53   *pSchema;  /* S
193d0 63 68 65 6d 61 20 74 6f 20 77 68 69 63 68 20 74  chema to which t
193e0 68 69 73 20 69 74 65 6d 20 69 73 20 66 69 78 65  his item is fixe
193f0 64 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a  d */.    char *z
19400 44 61 74 61 62 61 73 65 3b 20 20 2f 2a 20 4e 61  Database;  /* Na
19410 6d 65 20 6f 66 20 64 61 74 61 62 61 73 65 20 68  me of database h
19420 6f 6c 64 69 6e 67 20 74 68 69 73 20 74 61 62 6c  olding this tabl
19430 65 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a  e */.    char *z
19440 4e 61 6d 65 3b 20 20 20 20 20 20 2f 2a 20 4e 61  Name;      /* Na
19450 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20  me of the table 
19460 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a 41 6c  */.    char *zAl
19470 69 61 73 3b 20 20 20 20 20 2f 2a 20 54 68 65 20  ias;     /* The 
19480 22 42 22 20 70 61 72 74 20 6f 66 20 61 20 22 41  "B" part of a "A
19490 20 41 53 20 42 22 20 70 68 72 61 73 65 2e 20 20   AS B" phrase.  
194a0 7a 4e 61 6d 65 20 69 73 20 74 68 65 20 22 41 22  zName is the "A"
194b0 20 2a 2f 0a 20 20 20 20 54 61 62 6c 65 20 2a 70   */.    Table *p
194c0 54 61 62 3b 20 20 20 20 20 20 2f 2a 20 41 6e 20  Tab;      /* An 
194d0 53 51 4c 20 74 61 62 6c 65 20 63 6f 72 72 65 73  SQL table corres
194e0 70 6f 6e 64 69 6e 67 20 74 6f 20 7a 4e 61 6d 65  ponding to zName
194f0 20 2a 2f 0a 20 20 20 20 53 65 6c 65 63 74 20 2a   */.    Select *
19500 70 53 65 6c 65 63 74 3b 20 20 2f 2a 20 41 20 53  pSelect;  /* A S
19510 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 20  ELECT statement 
19520 75 73 65 64 20 69 6e 20 70 6c 61 63 65 20 6f 66  used in place of
19530 20 61 20 74 61 62 6c 65 20 6e 61 6d 65 20 2a 2f   a table name */
19540 0a 20 20 20 20 69 6e 74 20 61 64 64 72 46 69 6c  .    int addrFil
19550 6c 53 75 62 3b 20 20 2f 2a 20 41 64 64 72 65 73  lSub;  /* Addres
19560 73 20 6f 66 20 73 75 62 72 6f 75 74 69 6e 65 20  s of subroutine 
19570 74 6f 20 6d 61 6e 69 66 65 73 74 20 61 20 73 75  to manifest a su
19580 62 71 75 65 72 79 20 2a 2f 0a 20 20 20 20 69 6e  bquery */.    in
19590 74 20 72 65 67 52 65 74 75 72 6e 3b 20 20 20 20  t regReturn;    
195a0 2f 2a 20 52 65 67 69 73 74 65 72 20 68 6f 6c 64  /* Register hold
195b0 69 6e 67 20 72 65 74 75 72 6e 20 61 64 64 72 65  ing return addre
195c0 73 73 20 6f 66 20 61 64 64 72 46 69 6c 6c 53 75  ss of addrFillSu
195d0 62 20 2a 2f 0a 20 20 20 20 69 6e 74 20 72 65 67  b */.    int reg
195e0 52 65 73 75 6c 74 3b 20 20 20 20 2f 2a 20 52 65  Result;    /* Re
195f0 67 69 73 74 65 72 73 20 68 6f 6c 64 69 6e 67 20  gisters holding 
19600 72 65 73 75 6c 74 73 20 6f 66 20 61 20 63 6f 2d  results of a co-
19610 72 6f 75 74 69 6e 65 20 2a 2f 0a 20 20 20 20 73  routine */.    s
19620 74 72 75 63 74 20 7b 0a 20 20 20 20 20 20 75 38  truct {.      u8
19630 20 6a 6f 69 6e 74 79 70 65 3b 20 20 20 20 20 20   jointype;      
19640 2f 2a 20 54 79 70 65 20 6f 66 20 6a 6f 69 6e 20  /* Type of join 
19650 62 65 74 77 65 65 6e 20 74 68 69 73 20 61 62 6c  between this abl
19660 65 20 61 6e 64 20 74 68 65 20 70 72 65 76 69 6f  e and the previo
19670 75 73 20 2a 2f 0a 20 20 20 20 20 20 75 6e 73 69  us */.      unsi
19680 67 6e 65 64 20 6e 6f 74 49 6e 64 65 78 65 64 20  gned notIndexed 
19690 3a 31 3b 20 20 20 20 2f 2a 20 54 72 75 65 20 69  :1;    /* True i
196a0 66 20 74 68 65 72 65 20 69 73 20 61 20 4e 4f 54  f there is a NOT
196b0 20 49 4e 44 45 58 45 44 20 63 6c 61 75 73 65 20   INDEXED clause 
196c0 2a 2f 0a 20 20 20 20 20 20 75 6e 73 69 67 6e 65  */.      unsigne
196d0 64 20 69 73 49 6e 64 65 78 65 64 42 79 20 3a 31  d isIndexedBy :1
196e0 3b 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 74  ;   /* True if t
196f0 68 65 72 65 20 69 73 20 61 6e 20 49 4e 44 45 58  here is an INDEX
19700 45 44 20 42 59 20 63 6c 61 75 73 65 20 2a 2f 0a  ED BY clause */.
19710 20 20 20 20 20 20 75 6e 73 69 67 6e 65 64 20 69        unsigned i
19720 73 54 61 62 46 75 6e 63 20 3a 31 3b 20 20 20 20  sTabFunc :1;    
19730 20 2f 2a 20 54 72 75 65 20 69 66 20 74 61 62 6c   /* True if tabl
19740 65 2d 76 61 6c 75 65 64 2d 66 75 6e 63 74 69 6f  e-valued-functio
19750 6e 20 73 79 6e 74 61 78 20 2a 2f 0a 20 20 20 20  n syntax */.    
19760 20 20 75 6e 73 69 67 6e 65 64 20 69 73 43 6f 72    unsigned isCor
19770 72 65 6c 61 74 65 64 20 3a 31 3b 20 20 2f 2a 20  related :1;  /* 
19780 54 72 75 65 20 69 66 20 73 75 62 2d 71 75 65 72  True if sub-quer
19790 79 20 69 73 20 63 6f 72 72 65 6c 61 74 65 64 20  y is correlated 
197a0 2a 2f 0a 20 20 20 20 20 20 75 6e 73 69 67 6e 65  */.      unsigne
197b0 64 20 76 69 61 43 6f 72 6f 75 74 69 6e 65 20 3a  d viaCoroutine :
197c0 31 3b 20 20 2f 2a 20 49 6d 70 6c 65 6d 65 6e 74  1;  /* Implement
197d0 65 64 20 61 73 20 61 20 63 6f 2d 72 6f 75 74 69  ed as a co-routi
197e0 6e 65 20 2a 2f 0a 20 20 20 20 20 20 75 6e 73 69  ne */.      unsi
197f0 67 6e 65 64 20 69 73 52 65 63 75 72 73 69 76 65  gned isRecursive
19800 20 3a 31 3b 20 20 20 2f 2a 20 54 72 75 65 20 66   :1;   /* True f
19810 6f 72 20 72 65 63 75 72 73 69 76 65 20 72 65 66  or recursive ref
19820 65 72 65 6e 63 65 20 69 6e 20 57 49 54 48 20 2a  erence in WITH *
19830 2f 0a 20 20 20 20 7d 20 66 67 3b 0a 23 69 66 6e  /.    } fg;.#ifn
19840 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
19850 45 58 50 4c 41 49 4e 0a 20 20 20 20 75 38 20 69  EXPLAIN.    u8 i
19860 53 65 6c 65 63 74 49 64 3b 20 20 20 20 20 2f 2a  SelectId;     /*
19870 20 49 66 20 70 53 65 6c 65 63 74 21 3d 30 2c 20   If pSelect!=0, 
19880 74 68 65 20 69 64 20 6f 66 20 74 68 65 20 73 75  the id of the su
19890 62 2d 73 65 6c 65 63 74 20 69 6e 20 45 51 50 20  b-select in EQP 
198a0 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 20 20 69 6e  */.#endif.    in
198b0 74 20 69 43 75 72 73 6f 72 3b 20 20 20 20 20 20  t iCursor;      
198c0 2f 2a 20 54 68 65 20 56 44 42 45 20 63 75 72 73  /* The VDBE curs
198d0 6f 72 20 6e 75 6d 62 65 72 20 75 73 65 64 20 74  or number used t
198e0 6f 20 61 63 63 65 73 73 20 74 68 69 73 20 74 61  o access this ta
198f0 62 6c 65 20 2a 2f 0a 20 20 20 20 45 78 70 72 20  ble */.    Expr 
19900 2a 70 4f 6e 3b 20 20 20 20 20 20 20 20 2f 2a 20  *pOn;        /* 
19910 54 68 65 20 4f 4e 20 63 6c 61 75 73 65 20 6f 66  The ON clause of
19920 20 61 20 6a 6f 69 6e 20 2a 2f 0a 20 20 20 20 49   a join */.    I
19930 64 4c 69 73 74 20 2a 70 55 73 69 6e 67 3b 20 20  dList *pUsing;  
19940 20 2f 2a 20 54 68 65 20 55 53 49 4e 47 20 63 6c   /* The USING cl
19950 61 75 73 65 20 6f 66 20 61 20 6a 6f 69 6e 20 2a  ause of a join *
19960 2f 0a 20 20 20 20 42 69 74 6d 61 73 6b 20 63 6f  /.    Bitmask co
19970 6c 55 73 65 64 3b 20 20 2f 2a 20 42 69 74 20 4e  lUsed;  /* Bit N
19980 20 28 31 3c 3c 4e 29 20 73 65 74 20 69 66 20 63   (1<<N) set if c
19990 6f 6c 75 6d 6e 20 4e 20 6f 66 20 70 54 61 62 20  olumn N of pTab 
199a0 69 73 20 75 73 65 64 20 2a 2f 0a 20 20 20 20 75  is used */.    u
199b0 6e 69 6f 6e 20 7b 0a 20 20 20 20 20 20 63 68 61  nion {.      cha
199c0 72 20 2a 7a 49 6e 64 65 78 65 64 42 79 3b 20 20  r *zIndexedBy;  
199d0 20 20 2f 2a 20 49 64 65 6e 74 69 66 69 65 72 20    /* Identifier 
199e0 66 72 6f 6d 20 22 49 4e 44 45 58 45 44 20 42 59  from "INDEXED BY
199f0 20 3c 7a 49 6e 64 65 78 3e 22 20 63 6c 61 75 73   <zIndex>" claus
19a00 65 20 2a 2f 0a 20 20 20 20 20 20 45 78 70 72 4c  e */.      ExprL
19a10 69 73 74 20 2a 70 46 75 6e 63 41 72 67 3b 20 20  ist *pFuncArg;  
19a20 2f 2a 20 41 72 67 75 6d 65 6e 74 73 20 74 6f 20  /* Arguments to 
19a30 74 61 62 6c 65 2d 76 61 6c 75 65 64 2d 66 75 6e  table-valued-fun
19a40 63 74 69 6f 6e 20 2a 2f 0a 20 20 20 20 7d 20 75  ction */.    } u
19a50 31 3b 0a 20 20 20 20 49 6e 64 65 78 20 2a 70 49  1;.    Index *pI
19a60 42 49 6e 64 65 78 3b 20 20 2f 2a 20 49 6e 64 65  BIndex;  /* Inde
19a70 78 20 73 74 72 75 63 74 75 72 65 20 63 6f 72 72  x structure corr
19a80 65 73 70 6f 6e 64 69 6e 67 20 74 6f 20 75 31 2e  esponding to u1.
19a90 7a 49 6e 64 65 78 65 64 42 79 20 2a 2f 0a 20 20  zIndexedBy */.  
19aa0 7d 20 61 5b 31 5d 3b 20 20 20 20 20 20 20 20 20  } a[1];         
19ab0 20 20 20 20 2f 2a 20 4f 6e 65 20 65 6e 74 72 79      /* One entry
19ac0 20 66 6f 72 20 65 61 63 68 20 69 64 65 6e 74 69   for each identi
19ad0 66 69 65 72 20 6f 6e 20 74 68 65 20 6c 69 73 74  fier on the list
19ae0 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 50 65   */.};../*.** Pe
19af0 72 6d 69 74 74 65 64 20 76 61 6c 75 65 73 20 6f  rmitted values o
19b00 66 20 74 68 65 20 53 72 63 4c 69 73 74 2e 61 2e  f the SrcList.a.
19b10 6a 6f 69 6e 74 79 70 65 20 66 69 65 6c 64 0a 2a  jointype field.*
19b20 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f 49 4e 4e  /.#define JT_INN
19b30 45 52 20 20 20 20 20 30 78 30 30 30 31 20 20 20  ER     0x0001   
19b40 20 2f 2a 20 41 6e 79 20 6b 69 6e 64 20 6f 66 20   /* Any kind of 
19b50 69 6e 6e 65 72 20 6f 72 20 63 72 6f 73 73 20 6a  inner or cross j
19b60 6f 69 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a  oin */.#define J
19b70 54 5f 43 52 4f 53 53 20 20 20 20 20 30 78 30 30  T_CROSS     0x00
19b80 30 32 20 20 20 20 2f 2a 20 45 78 70 6c 69 63 69  02    /* Explici
19b90 74 20 75 73 65 20 6f 66 20 74 68 65 20 43 52 4f  t use of the CRO
19ba0 53 53 20 6b 65 79 77 6f 72 64 20 2a 2f 0a 23 64  SS keyword */.#d
19bb0 65 66 69 6e 65 20 4a 54 5f 4e 41 54 55 52 41 4c  efine JT_NATURAL
19bc0 20 20 20 30 78 30 30 30 34 20 20 20 20 2f 2a 20     0x0004    /* 
19bd0 54 72 75 65 20 66 6f 72 20 61 20 22 6e 61 74 75  True for a "natu
19be0 72 61 6c 22 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65  ral" join */.#de
19bf0 66 69 6e 65 20 4a 54 5f 4c 45 46 54 20 20 20 20  fine JT_LEFT    
19c00 20 20 30 78 30 30 30 38 20 20 20 20 2f 2a 20 4c    0x0008    /* L
19c10 65 66 74 20 6f 75 74 65 72 20 6a 6f 69 6e 20 2a  eft outer join *
19c20 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f 52 49 47  /.#define JT_RIG
19c30 48 54 20 20 20 20 20 30 78 30 30 31 30 20 20 20  HT     0x0010   
19c40 20 2f 2a 20 52 69 67 68 74 20 6f 75 74 65 72 20   /* Right outer 
19c50 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  join */.#define 
19c60 4a 54 5f 4f 55 54 45 52 20 20 20 20 20 30 78 30  JT_OUTER     0x0
19c70 30 32 30 20 20 20 20 2f 2a 20 54 68 65 20 22 4f  020    /* The "O
19c80 55 54 45 52 22 20 6b 65 79 77 6f 72 64 20 69 73  UTER" keyword is
19c90 20 70 72 65 73 65 6e 74 20 2a 2f 0a 23 64 65 66   present */.#def
19ca0 69 6e 65 20 4a 54 5f 45 52 52 4f 52 20 20 20 20  ine JT_ERROR    
19cb0 20 30 78 30 30 34 30 20 20 20 20 2f 2a 20 75 6e   0x0040    /* un
19cc0 6b 6e 6f 77 6e 20 6f 72 20 75 6e 73 75 70 70 6f  known or unsuppo
19cd0 72 74 65 64 20 6a 6f 69 6e 20 74 79 70 65 20 2a  rted join type *
19ce0 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 46 6c 61 67 73 20  /.../*.** Flags 
19cf0 61 70 70 72 6f 70 72 69 61 74 65 20 66 6f 72 20  appropriate for 
19d00 74 68 65 20 77 63 74 72 6c 46 6c 61 67 73 20 70  the wctrlFlags p
19d10 61 72 61 6d 65 74 65 72 20 6f 66 20 73 71 6c 69  arameter of sqli
19d20 74 65 33 57 68 65 72 65 42 65 67 69 6e 28 29 0a  te3WhereBegin().
19d30 2a 2a 20 61 6e 64 20 74 68 65 20 57 68 65 72 65  ** and the Where
19d40 49 6e 66 6f 2e 77 63 74 72 6c 46 6c 61 67 73 20  Info.wctrlFlags 
19d50 6d 65 6d 62 65 72 2e 0a 2a 2a 0a 2a 2a 20 56 61  member..**.** Va
19d60 6c 75 65 20 63 6f 6e 73 74 72 61 69 6e 74 73 20  lue constraints 
19d70 28 65 6e 66 6f 72 63 65 64 20 76 69 61 20 61 73  (enforced via as
19d80 73 65 72 74 28 29 29 3a 0a 2a 2a 20 20 20 20 20  sert()):.**     
19d90 57 48 45 52 45 5f 55 53 45 5f 4c 49 4d 49 54 20  WHERE_USE_LIMIT 
19da0 20 3d 3d 20 53 46 5f 46 69 78 65 64 4c 69 6d 69   == SF_FixedLimi
19db0 74 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45  t.*/.#define WHE
19dc0 52 45 5f 4f 52 44 45 52 42 59 5f 4e 4f 52 4d 41  RE_ORDERBY_NORMA
19dd0 4c 20 20 20 30 78 30 30 30 30 20 2f 2a 20 4e 6f  L   0x0000 /* No
19de0 2d 6f 70 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57  -op */.#define W
19df0 48 45 52 45 5f 4f 52 44 45 52 42 59 5f 4d 49 4e  HERE_ORDERBY_MIN
19e00 20 20 20 20 20 20 30 78 30 30 30 31 20 2f 2a 20        0x0001 /* 
19e10 4f 52 44 45 52 20 42 59 20 70 72 6f 63 65 73 73  ORDER BY process
19e20 69 6e 67 20 66 6f 72 20 6d 69 6e 28 29 20 66 75  ing for min() fu
19e30 6e 63 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48  nc */.#define WH
19e40 45 52 45 5f 4f 52 44 45 52 42 59 5f 4d 41 58 20  ERE_ORDERBY_MAX 
19e50 20 20 20 20 20 30 78 30 30 30 32 20 2f 2a 20 4f       0x0002 /* O
19e60 52 44 45 52 20 42 59 20 70 72 6f 63 65 73 73 69  RDER BY processi
19e70 6e 67 20 66 6f 72 20 6d 61 78 28 29 20 66 75 6e  ng for max() fun
19e80 63 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45  c */.#define WHE
19e90 52 45 5f 4f 4e 45 50 41 53 53 5f 44 45 53 49 52  RE_ONEPASS_DESIR
19ea0 45 44 20 20 30 78 30 30 30 34 20 2f 2a 20 57 61  ED  0x0004 /* Wa
19eb0 6e 74 20 74 6f 20 64 6f 20 6f 6e 65 2d 70 61 73  nt to do one-pas
19ec0 73 20 55 50 44 41 54 45 2f 44 45 4c 45 54 45 20  s UPDATE/DELETE 
19ed0 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45  */.#define WHERE
19ee0 5f 4f 4e 45 50 41 53 53 5f 4d 55 4c 54 49 52 4f  _ONEPASS_MULTIRO
19ef0 57 20 30 78 30 30 30 38 20 2f 2a 20 4f 4e 45 50  W 0x0008 /* ONEP
19f00 41 53 53 20 69 73 20 6f 6b 20 77 69 74 68 20 6d  ASS is ok with m
19f10 75 6c 74 69 70 6c 65 20 72 6f 77 73 20 2a 2f 0a  ultiple rows */.
19f20 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 44 55  #define WHERE_DU
19f30 50 4c 49 43 41 54 45 53 5f 4f 4b 20 20 20 20 30  PLICATES_OK    0
19f40 78 30 30 31 30 20 2f 2a 20 4f 6b 20 74 6f 20 72  x0010 /* Ok to r
19f50 65 74 75 72 6e 20 61 20 72 6f 77 20 6d 6f 72 65  eturn a row more
19f60 20 74 68 61 6e 20 6f 6e 63 65 20 2a 2f 0a 23 64   than once */.#d
19f70 65 66 69 6e 65 20 57 48 45 52 45 5f 4f 52 5f 53  efine WHERE_OR_S
19f80 55 42 43 4c 41 55 53 45 20 20 20 20 20 30 78 30  UBCLAUSE     0x0
19f90 30 32 30 20 2f 2a 20 50 72 6f 63 65 73 73 69 6e  020 /* Processin
19fa0 67 20 61 20 73 75 62 2d 57 48 45 52 45 20 61 73  g a sub-WHERE as
19fb0 20 70 61 72 74 20 6f 66 0a 20 20 20 20 20 20 20   part of.       
19fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19fd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a                 *
19fe0 2a 20 74 68 65 20 4f 52 20 6f 70 74 69 6d 69 7a  * the OR optimiz
19ff0 61 74 69 6f 6e 20 20 2a 2f 0a 23 64 65 66 69 6e  ation  */.#defin
1a000 65 20 57 48 45 52 45 5f 47 52 4f 55 50 42 59 20  e WHERE_GROUPBY 
1a010 20 20 20 20 20 20 20 20 20 30 78 30 30 34 30 20           0x0040 
1a020 2f 2a 20 70 4f 72 64 65 72 42 79 20 69 73 20 72  /* pOrderBy is r
1a030 65 61 6c 6c 79 20 61 20 47 52 4f 55 50 20 42 59  eally a GROUP BY
1a040 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52   */.#define WHER
1a050 45 5f 44 49 53 54 49 4e 43 54 42 59 20 20 20 20  E_DISTINCTBY    
1a060 20 20 20 30 78 30 30 38 30 20 2f 2a 20 70 4f 72     0x0080 /* pOr
1a070 64 65 72 62 79 20 69 73 20 72 65 61 6c 6c 79 20  derby is really 
1a080 61 20 44 49 53 54 49 4e 43 54 20 63 6c 61 75 73  a DISTINCT claus
1a090 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45  e */.#define WHE
1a0a0 52 45 5f 57 41 4e 54 5f 44 49 53 54 49 4e 43 54  RE_WANT_DISTINCT
1a0b0 20 20 20 20 30 78 30 31 30 30 20 2f 2a 20 41 6c      0x0100 /* Al
1a0c0 6c 20 6f 75 74 70 75 74 20 6e 65 65 64 73 20 74  l output needs t
1a0d0 6f 20 62 65 20 64 69 73 74 69 6e 63 74 20 2a 2f  o be distinct */
1a0e0 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 53  .#define WHERE_S
1a0f0 4f 52 54 42 59 47 52 4f 55 50 20 20 20 20 20 20  ORTBYGROUP      
1a100 30 78 30 32 30 30 20 2f 2a 20 53 75 70 70 6f 72  0x0200 /* Suppor
1a110 74 20 73 71 6c 69 74 65 33 57 68 65 72 65 49 73  t sqlite3WhereIs
1a120 53 6f 72 74 65 64 28 29 20 2a 2f 0a 23 64 65 66  Sorted() */.#def
1a130 69 6e 65 20 57 48 45 52 45 5f 53 45 45 4b 5f 54  ine WHERE_SEEK_T
1a140 41 42 4c 45 20 20 20 20 20 20 20 30 78 30 34 30  ABLE       0x040
1a150 30 20 2f 2a 20 44 6f 20 6e 6f 74 20 64 65 66 65  0 /* Do not defe
1a160 72 20 73 65 65 6b 73 20 6f 6e 20 6d 61 69 6e 20  r seeks on main 
1a170 74 61 62 6c 65 20 2a 2f 0a 23 64 65 66 69 6e 65  table */.#define
1a180 20 57 48 45 52 45 5f 4f 52 44 45 52 42 59 5f 4c   WHERE_ORDERBY_L
1a190 49 4d 49 54 20 20 20 20 30 78 30 38 30 30 20 2f  IMIT    0x0800 /
1a1a0 2a 20 4f 52 44 45 52 42 59 2b 4c 49 4d 49 54 20  * ORDERBY+LIMIT 
1a1b0 6f 6e 20 74 68 65 20 69 6e 6e 65 72 20 6c 6f 6f  on the inner loo
1a1c0 70 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20  p */.           
1a1d0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1a1e0 20 20 20 20 30 78 31 30 30 30 20 20 20 20 6e 6f      0x1000    no
1a1f0 74 20 63 75 72 72 65 6e 74 6c 79 20 75 73 65 64  t currently used
1a200 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20   */.            
1a210 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 20              /*  
1a220 20 20 20 30 78 32 30 30 30 20 20 20 20 6e 6f 74     0x2000    not
1a230 20 63 75 72 72 65 6e 74 6c 79 20 75 73 65 64 20   currently used 
1a240 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45  */.#define WHERE
1a250 5f 55 53 45 5f 4c 49 4d 49 54 20 20 20 20 20 20  _USE_LIMIT      
1a260 20 20 30 78 34 30 30 30 20 2f 2a 20 55 73 65 20    0x4000 /* Use 
1a270 74 68 65 20 4c 49 4d 49 54 20 69 6e 20 63 6f 73  the LIMIT in cos
1a280 74 20 65 73 74 69 6d 61 74 65 73 20 2a 2f 0a 20  t estimates */. 
1a290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a2a0 20 20 20 20 20 20 20 2f 2a 20 20 20 20 20 30 78         /*     0x
1a2b0 38 30 30 30 20 20 20 20 6e 6f 74 20 63 75 72 72  8000    not curr
1a2c0 65 6e 74 6c 79 20 75 73 65 64 20 2a 2f 0a 0a 2f  ently used */../
1a2d0 2a 20 41 6c 6c 6f 77 65 64 20 72 65 74 75 72 6e  * Allowed return
1a2e0 20 76 61 6c 75 65 73 20 66 72 6f 6d 20 73 71 6c   values from sql
1a2f0 69 74 65 33 57 68 65 72 65 49 73 44 69 73 74 69  ite3WhereIsDisti
1a300 6e 63 74 28 29 0a 2a 2f 0a 23 64 65 66 69 6e 65  nct().*/.#define
1a310 20 57 48 45 52 45 5f 44 49 53 54 49 4e 43 54 5f   WHERE_DISTINCT_
1a320 4e 4f 4f 50 20 20 20 20 20 20 30 20 20 2f 2a 20  NOOP      0  /* 
1a330 44 49 53 54 49 4e 43 54 20 6b 65 79 77 6f 72 64  DISTINCT keyword
1a340 20 6e 6f 74 20 75 73 65 64 20 2a 2f 0a 23 64 65   not used */.#de
1a350 66 69 6e 65 20 57 48 45 52 45 5f 44 49 53 54 49  fine WHERE_DISTI
1a360 4e 43 54 5f 55 4e 49 51 55 45 20 20 20 20 31 20  NCT_UNIQUE    1 
1a370 20 2f 2a 20 4e 6f 20 64 75 70 6c 69 63 61 74 65   /* No duplicate
1a380 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45  s */.#define WHE
1a390 52 45 5f 44 49 53 54 49 4e 43 54 5f 4f 52 44 45  RE_DISTINCT_ORDE
1a3a0 52 45 44 20 20 20 32 20 20 2f 2a 20 41 6c 6c 20  RED   2  /* All 
1a3b0 64 75 70 6c 69 63 61 74 65 73 20 61 72 65 20 61  duplicates are a
1a3c0 64 6a 61 63 65 6e 74 20 2a 2f 0a 23 64 65 66 69  djacent */.#defi
1a3d0 6e 65 20 57 48 45 52 45 5f 44 49 53 54 49 4e 43  ne WHERE_DISTINC
1a3e0 54 5f 55 4e 4f 52 44 45 52 45 44 20 33 20 20 2f  T_UNORDERED 3  /
1a3f0 2a 20 44 75 70 6c 69 63 61 74 65 73 20 61 72 65  * Duplicates are
1a400 20 73 63 61 74 74 65 72 65 64 20 2a 2f 0a 0a 2f   scattered */../
1a410 2a 0a 2a 2a 20 41 20 4e 61 6d 65 43 6f 6e 74 65  *.** A NameConte
1a420 78 74 20 64 65 66 69 6e 65 73 20 61 20 63 6f 6e  xt defines a con
1a430 74 65 78 74 20 69 6e 20 77 68 69 63 68 20 74 6f  text in which to
1a440 20 72 65 73 6f 6c 76 65 20 74 61 62 6c 65 20 61   resolve table a
1a450 6e 64 20 63 6f 6c 75 6d 6e 0a 2a 2a 20 6e 61 6d  nd column.** nam
1a460 65 73 2e 20 20 54 68 65 20 63 6f 6e 74 65 78 74  es.  The context
1a470 20 63 6f 6e 73 69 73 74 73 20 6f 66 20 61 20 6c   consists of a l
1a480 69 73 74 20 6f 66 20 74 61 62 6c 65 73 20 28 74  ist of tables (t
1a490 68 65 20 70 53 72 63 4c 69 73 74 29 20 66 69 65  he pSrcList) fie
1a4a0 6c 64 20 61 6e 64 0a 2a 2a 20 61 20 6c 69 73 74  ld and.** a list
1a4b0 20 6f 66 20 6e 61 6d 65 64 20 65 78 70 72 65 73   of named expres
1a4c0 73 69 6f 6e 20 28 70 45 4c 69 73 74 29 2e 20 20  sion (pEList).  
1a4d0 54 68 65 20 6e 61 6d 65 64 20 65 78 70 72 65 73  The named expres
1a4e0 73 69 6f 6e 20 6c 69 73 74 20 6d 61 79 0a 2a 2a  sion list may.**
1a4f0 20 62 65 20 4e 55 4c 4c 2e 20 20 54 68 65 20 70   be NULL.  The p
1a500 53 72 63 20 63 6f 72 72 65 73 70 6f 6e 64 73 20  Src corresponds 
1a510 74 6f 20 74 68 65 20 46 52 4f 4d 20 63 6c 61 75  to the FROM clau
1a520 73 65 20 6f 66 20 61 20 53 45 4c 45 43 54 20 6f  se of a SELECT o
1a530 72 0a 2a 2a 20 74 6f 20 74 68 65 20 74 61 62 6c  r.** to the tabl
1a540 65 20 62 65 69 6e 67 20 6f 70 65 72 61 74 65 64  e being operated
1a550 20 6f 6e 20 62 79 20 49 4e 53 45 52 54 2c 20 55   on by INSERT, U
1a560 50 44 41 54 45 2c 20 6f 72 20 44 45 4c 45 54 45  PDATE, or DELETE
1a570 2e 20 20 54 68 65 0a 2a 2a 20 70 45 4c 69 73 74  .  The.** pEList
1a580 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20   corresponds to 
1a590 74 68 65 20 72 65 73 75 6c 74 20 73 65 74 20 6f  the result set o
1a5a0 66 20 61 20 53 45 4c 45 43 54 20 61 6e 64 20 69  f a SELECT and i
1a5b0 73 20 4e 55 4c 4c 20 66 6f 72 0a 2a 2a 20 6f 74  s NULL for.** ot
1a5c0 68 65 72 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a  her statements..
1a5d0 2a 2a 0a 2a 2a 20 4e 61 6d 65 43 6f 6e 74 65 78  **.** NameContex
1a5e0 74 73 20 63 61 6e 20 62 65 20 6e 65 73 74 65 64  ts can be nested
1a5f0 2e 20 20 57 68 65 6e 20 72 65 73 6f 6c 76 69 6e  .  When resolvin
1a600 67 20 6e 61 6d 65 73 2c 20 74 68 65 20 69 6e 6e  g names, the inn
1a610 65 72 2d 6d 6f 73 74 0a 2a 2a 20 63 6f 6e 74 65  er-most.** conte
1a620 78 74 20 69 73 20 73 65 61 72 63 68 65 64 20 66  xt is searched f
1a630 69 72 73 74 2e 20 20 49 66 20 6e 6f 20 6d 61 74  irst.  If no mat
1a640 63 68 20 69 73 20 66 6f 75 6e 64 2c 20 74 68 65  ch is found, the
1a650 20 6e 65 78 74 20 6f 75 74 65 72 0a 2a 2a 20 63   next outer.** c
1a660 6f 6e 74 65 78 74 20 69 73 20 63 68 65 63 6b 65  ontext is checke
1a670 64 2e 20 20 49 66 20 74 68 65 72 65 20 69 73 20  d.  If there is 
1a680 73 74 69 6c 6c 20 6e 6f 20 6d 61 74 63 68 2c 20  still no match, 
1a690 74 68 65 20 6e 65 78 74 20 63 6f 6e 74 65 78 74  the next context
1a6a0 0a 2a 2a 20 69 73 20 63 68 65 63 6b 65 64 2e 20  .** is checked. 
1a6b0 20 54 68 69 73 20 70 72 6f 63 65 73 73 20 63 6f   This process co
1a6c0 6e 74 69 6e 75 65 73 20 75 6e 74 69 6c 20 65 69  ntinues until ei
1a6d0 74 68 65 72 20 61 20 6d 61 74 63 68 20 69 73 20  ther a match is 
1a6e0 66 6f 75 6e 64 0a 2a 2a 20 6f 72 20 61 6c 6c 20  found.** or all 
1a6f0 63 6f 6e 74 65 78 74 73 20 61 72 65 20 63 68 65  contexts are che
1a700 63 6b 2e 20 20 57 68 65 6e 20 61 20 6d 61 74 63  ck.  When a matc
1a710 68 20 69 73 20 66 6f 75 6e 64 2c 20 74 68 65 20  h is found, the 
1a720 6e 52 65 66 20 6d 65 6d 62 65 72 20 6f 66 0a 2a  nRef member of.*
1a730 2a 20 74 68 65 20 63 6f 6e 74 65 78 74 20 63 6f  * the context co
1a740 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 6d 61 74  ntaining the mat
1a750 63 68 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65  ch is incremente
1a760 64 2e 0a 2a 2a 0a 2a 2a 20 45 61 63 68 20 73 75  d..**.** Each su
1a770 62 71 75 65 72 79 20 67 65 74 73 20 61 20 6e 65  bquery gets a ne
1a780 77 20 4e 61 6d 65 43 6f 6e 74 65 78 74 2e 20 20  w NameContext.  
1a790 54 68 65 20 70 4e 65 78 74 20 66 69 65 6c 64 20  The pNext field 
1a7a0 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 0a 2a 2a  points to the.**
1a7b0 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20 69 6e 20   NameContext in 
1a7c0 74 68 65 20 70 61 72 65 6e 74 20 71 75 65 72 79  the parent query
1a7d0 2e 20 20 54 68 75 73 20 74 68 65 20 70 72 6f 63  .  Thus the proc
1a7e0 65 73 73 20 6f 66 20 73 63 61 6e 6e 69 6e 67 20  ess of scanning 
1a7f0 74 68 65 0a 2a 2a 20 4e 61 6d 65 43 6f 6e 74 65  the.** NameConte
1a800 78 74 20 6c 69 73 74 20 63 6f 72 72 65 73 70 6f  xt list correspo
1a810 6e 64 73 20 74 6f 20 73 65 61 72 63 68 69 6e 67  nds to searching
1a820 20 74 68 72 6f 75 67 68 20 73 75 63 63 65 73 73   through success
1a830 69 76 65 6c 79 20 6f 75 74 65 72 0a 2a 2a 20 73  ively outer.** s
1a840 75 62 71 75 65 72 69 65 73 20 6c 6f 6f 6b 69 6e  ubqueries lookin
1a850 67 20 66 6f 72 20 61 20 6d 61 74 63 68 2e 0a 2a  g for a match..*
1a860 2f 0a 73 74 72 75 63 74 20 4e 61 6d 65 43 6f 6e  /.struct NameCon
1a870 74 65 78 74 20 7b 0a 20 20 50 61 72 73 65 20 2a  text {.  Parse *
1a880 70 50 61 72 73 65 3b 20 20 20 20 20 20 20 2f 2a  pParse;       /*
1a890 20 54 68 65 20 70 61 72 73 65 72 20 2a 2f 0a 20   The parser */. 
1a8a0 20 53 72 63 4c 69 73 74 20 2a 70 53 72 63 4c 69   SrcList *pSrcLi
1a8b0 73 74 3b 20 20 20 2f 2a 20 4f 6e 65 20 6f 72 20  st;   /* One or 
1a8c0 6d 6f 72 65 20 74 61 62 6c 65 73 20 75 73 65 64  more tables used
1a8d0 20 74 6f 20 72 65 73 6f 6c 76 65 20 6e 61 6d 65   to resolve name
1a8e0 73 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20  s */.  ExprList 
1a8f0 2a 70 45 4c 69 73 74 3b 20 20 20 20 2f 2a 20 4f  *pEList;    /* O
1a900 70 74 69 6f 6e 61 6c 20 6c 69 73 74 20 6f 66 20  ptional list of 
1a910 72 65 73 75 6c 74 2d 73 65 74 20 63 6f 6c 75 6d  result-set colum
1a920 6e 73 20 2a 2f 0a 20 20 41 67 67 49 6e 66 6f 20  ns */.  AggInfo 
1a930 2a 70 41 67 67 49 6e 66 6f 3b 20 20 20 2f 2a 20  *pAggInfo;   /* 
1a940 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75  Information abou
1a950 74 20 61 67 67 72 65 67 61 74 65 73 20 61 74 20  t aggregates at 
1a960 74 68 69 73 20 6c 65 76 65 6c 20 2a 2f 0a 20 20  this level */.  
1a970 4e 61 6d 65 43 6f 6e 74 65 78 74 20 2a 70 4e 65  NameContext *pNe
1a980 78 74 3b 20 20 2f 2a 20 4e 65 78 74 20 6f 75 74  xt;  /* Next out
1a990 65 72 20 6e 61 6d 65 20 63 6f 6e 74 65 78 74 2e  er name context.
1a9a0 20 20 4e 55 4c 4c 20 66 6f 72 20 6f 75 74 65 72    NULL for outer
1a9b0 6d 6f 73 74 20 2a 2f 0a 20 20 69 6e 74 20 6e 52  most */.  int nR
1a9c0 65 66 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  ef;            /
1a9d0 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6e 61 6d 65  * Number of name
1a9e0 73 20 72 65 73 6f 6c 76 65 64 20 62 79 20 74 68  s resolved by th
1a9f0 69 73 20 63 6f 6e 74 65 78 74 20 2a 2f 0a 20 20  is context */.  
1aa00 69 6e 74 20 6e 45 72 72 3b 20 20 20 20 20 20 20  int nErr;       
1aa10 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
1aa20 66 20 65 72 72 6f 72 73 20 65 6e 63 6f 75 6e 74  f errors encount
1aa30 65 72 65 64 20 77 68 69 6c 65 20 72 65 73 6f 6c  ered while resol
1aa40 76 69 6e 67 20 6e 61 6d 65 73 20 2a 2f 0a 20 20  ving names */.  
1aa50 75 31 36 20 6e 63 46 6c 61 67 73 3b 20 20 20 20  u16 ncFlags;    
1aa60 20 20 20 20 20 2f 2a 20 5a 65 72 6f 20 6f 72 20       /* Zero or 
1aa70 6d 6f 72 65 20 4e 43 5f 2a 20 66 6c 61 67 73 20  more NC_* flags 
1aa80 64 65 66 69 6e 65 64 20 62 65 6c 6f 77 20 2a 2f  defined below */
1aa90 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77  .};../*.** Allow
1aaa0 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20 74 68  ed values for th
1aab0 65 20 4e 61 6d 65 43 6f 6e 74 65 78 74 2c 20 6e  e NameContext, n
1aac0 63 46 6c 61 67 73 20 66 69 65 6c 64 2e 0a 2a 2a  cFlags field..**
1aad0 0a 2a 2a 20 56 61 6c 75 65 20 63 6f 6e 73 74 72  .** Value constr
1aae0 61 69 6e 74 73 20 28 61 6c 6c 20 63 68 65 63 6b  aints (all check
1aaf0 65 64 20 76 69 61 20 61 73 73 65 72 74 28 29 29  ed via assert())
1ab00 3a 0a 2a 2a 20 20 20 20 4e 43 5f 48 61 73 41 67  :.**    NC_HasAg
1ab10 67 20 20 20 20 3d 3d 20 53 46 5f 48 61 73 41 67  g    == SF_HasAg
1ab20 67 0a 2a 2a 20 20 20 20 4e 43 5f 4d 69 6e 4d 61  g.**    NC_MinMa
1ab30 78 41 67 67 20 3d 3d 20 53 46 5f 4d 69 6e 4d 61  xAgg == SF_MinMa
1ab40 78 41 67 67 20 3d 3d 20 53 51 4c 49 54 45 5f 46  xAgg == SQLITE_F
1ab50 55 4e 43 5f 4d 49 4e 4d 41 58 0a 2a 2a 0a 2a 2f  UNC_MINMAX.**.*/
1ab60 0a 23 64 65 66 69 6e 65 20 4e 43 5f 41 6c 6c 6f  .#define NC_Allo
1ab70 77 41 67 67 20 20 30 78 30 30 30 31 20 20 2f 2a  wAgg  0x0001  /*
1ab80 20 41 67 67 72 65 67 61 74 65 20 66 75 6e 63 74   Aggregate funct
1ab90 69 6f 6e 73 20 61 72 65 20 61 6c 6c 6f 77 65 64  ions are allowed
1aba0 20 68 65 72 65 20 2a 2f 0a 23 64 65 66 69 6e 65   here */.#define
1abb0 20 4e 43 5f 50 61 72 74 49 64 78 20 20 20 30 78   NC_PartIdx   0x
1abc0 30 30 30 32 20 20 2f 2a 20 54 72 75 65 20 69 66  0002  /* True if
1abd0 20 72 65 73 6f 6c 76 69 6e 67 20 61 20 70 61 72   resolving a par
1abe0 74 69 61 6c 20 69 6e 64 65 78 20 57 48 45 52 45  tial index WHERE
1abf0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 49   */.#define NC_I
1ac00 73 43 68 65 63 6b 20 20 20 30 78 30 30 30 34 20  sCheck   0x0004 
1ac10 20 2f 2a 20 54 72 75 65 20 69 66 20 72 65 73 6f   /* True if reso
1ac20 6c 76 69 6e 67 20 6e 61 6d 65 73 20 69 6e 20 61  lving names in a
1ac30 20 43 48 45 43 4b 20 63 6f 6e 73 74 72 61 69 6e   CHECK constrain
1ac40 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f  t */.#define NC_
1ac50 49 6e 41 67 67 46 75 6e 63 20 30 78 30 30 30 38  InAggFunc 0x0008
1ac60 20 20 2f 2a 20 54 72 75 65 20 69 66 20 61 6e 61    /* True if ana
1ac70 6c 79 7a 69 6e 67 20 61 72 67 75 6d 65 6e 74 73  lyzing arguments
1ac80 20 74 6f 20 61 6e 20 61 67 67 20 66 75 6e 63 20   to an agg func 
1ac90 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 48 61  */.#define NC_Ha
1aca0 73 41 67 67 20 20 20 20 30 78 30 30 31 30 20 20  sAgg    0x0010  
1acb0 2f 2a 20 4f 6e 65 20 6f 72 20 6d 6f 72 65 20 61  /* One or more a
1acc0 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f  ggregate functio
1acd0 6e 73 20 73 65 65 6e 20 2a 2f 0a 23 64 65 66 69  ns seen */.#defi
1ace0 6e 65 20 4e 43 5f 49 64 78 45 78 70 72 20 20 20  ne NC_IdxExpr   
1acf0 30 78 30 30 32 30 20 20 2f 2a 20 54 72 75 65 20  0x0020  /* True 
1ad00 69 66 20 72 65 73 6f 6c 76 69 6e 67 20 63 6f 6c  if resolving col
1ad10 75 6d 6e 73 20 6f 66 20 43 52 45 41 54 45 20 49  umns of CREATE I
1ad20 4e 44 45 58 20 2a 2f 0a 23 64 65 66 69 6e 65 20  NDEX */.#define 
1ad30 4e 43 5f 56 61 72 53 65 6c 65 63 74 20 30 78 30  NC_VarSelect 0x0
1ad40 30 34 30 20 20 2f 2a 20 41 20 63 6f 72 72 65 6c  040  /* A correl
1ad50 61 74 65 64 20 73 75 62 71 75 65 72 79 20 68 61  ated subquery ha
1ad60 73 20 62 65 65 6e 20 73 65 65 6e 20 2a 2f 0a 23  s been seen */.#
1ad70 64 65 66 69 6e 65 20 4e 43 5f 4d 69 6e 4d 61 78  define NC_MinMax
1ad80 41 67 67 20 30 78 31 30 30 30 20 20 2f 2a 20 6d  Agg 0x1000  /* m
1ad90 69 6e 2f 6d 61 78 20 61 67 67 72 65 67 61 74 65  in/max aggregate
1ada0 73 20 73 65 65 6e 2e 20 20 53 65 65 20 6e 6f 74  s seen.  See not
1adb0 65 20 61 62 6f 76 65 20 2a 2f 0a 0a 2f 2a 0a 2a  e above */../*.*
1adc0 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  * An instance of
1add0 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   the following s
1ade0 74 72 75 63 74 75 72 65 20 63 6f 6e 74 61 69 6e  tructure contain
1adf0 73 20 61 6c 6c 20 69 6e 66 6f 72 6d 61 74 69 6f  s all informatio
1ae00 6e 0a 2a 2a 20 6e 65 65 64 65 64 20 74 6f 20 67  n.** needed to g
1ae10 65 6e 65 72 61 74 65 20 63 6f 64 65 20 66 6f 72  enerate code for
1ae20 20 61 20 73 69 6e 67 6c 65 20 53 45 4c 45 43 54   a single SELECT
1ae30 20 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2a 0a 2a   statement..**.*
1ae40 2a 20 6e 4c 69 6d 69 74 20 69 73 20 73 65 74 20  * nLimit is set 
1ae50 74 6f 20 2d 31 20 69 66 20 74 68 65 72 65 20 69  to -1 if there i
1ae60 73 20 6e 6f 20 4c 49 4d 49 54 20 63 6c 61 75 73  s no LIMIT claus
1ae70 65 2e 20 20 6e 4f 66 66 73 65 74 20 69 73 20 73  e.  nOffset is s
1ae80 65 74 20 74 6f 20 30 2e 0a 2a 2a 20 49 66 20 74  et to 0..** If t
1ae90 68 65 72 65 20 69 73 20 61 20 4c 49 4d 49 54 20  here is a LIMIT 
1aea0 63 6c 61 75 73 65 2c 20 74 68 65 20 70 61 72 73  clause, the pars
1aeb0 65 72 20 73 65 74 73 20 6e 4c 69 6d 69 74 20 74  er sets nLimit t
1aec0 6f 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74  o the value of t
1aed0 68 65 0a 2a 2a 20 6c 69 6d 69 74 20 61 6e 64 20  he.** limit and 
1aee0 6e 4f 66 66 73 65 74 20 74 6f 20 74 68 65 20 76  nOffset to the v
1aef0 61 6c 75 65 20 6f 66 20 74 68 65 20 6f 66 66 73  alue of the offs
1af00 65 74 20 28 6f 72 20 30 20 69 66 20 74 68 65 72  et (or 0 if ther
1af10 65 20 69 73 20 6e 6f 74 0a 2a 2a 20 6f 66 66 73  e is not.** offs
1af20 65 74 29 2e 20 20 42 75 74 20 6c 61 74 65 72 20  et).  But later 
1af30 6f 6e 2c 20 6e 4c 69 6d 69 74 20 61 6e 64 20 6e  on, nLimit and n
1af40 4f 66 66 73 65 74 20 62 65 63 6f 6d 65 20 74 68  Offset become th
1af50 65 20 6d 65 6d 6f 72 79 20 6c 6f 63 61 74 69 6f  e memory locatio
1af60 6e 73 0a 2a 2a 20 69 6e 20 74 68 65 20 56 44 42  ns.** in the VDB
1af70 45 20 74 68 61 74 20 72 65 63 6f 72 64 20 74 68  E that record th
1af80 65 20 6c 69 6d 69 74 20 61 6e 64 20 6f 66 66 73  e limit and offs
1af90 65 74 20 63 6f 75 6e 74 65 72 73 2e 0a 2a 2a 0a  et counters..**.
1afa0 2a 2a 20 61 64 64 72 4f 70 65 6e 45 70 68 6d 5b  ** addrOpenEphm[
1afb0 5d 20 65 6e 74 72 69 65 73 20 63 6f 6e 74 61 69  ] entries contai
1afc0 6e 20 74 68 65 20 61 64 64 72 65 73 73 20 6f 66  n the address of
1afd0 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 65 72 61   OP_OpenEphemera
1afe0 6c 20 6f 70 63 6f 64 65 73 2e 0a 2a 2a 20 54 68  l opcodes..** Th
1aff0 65 73 65 20 61 64 64 72 65 73 73 65 73 20 6d 75  ese addresses mu
1b000 73 74 20 62 65 20 73 74 6f 72 65 64 20 73 6f 20  st be stored so 
1b010 74 68 61 74 20 77 65 20 63 61 6e 20 67 6f 20 62  that we can go b
1b020 61 63 6b 20 61 6e 64 20 66 69 6c 6c 20 69 6e 0a  ack and fill in.
1b030 2a 2a 20 74 68 65 20 50 34 5f 4b 45 59 49 4e 46  ** the P4_KEYINF
1b040 4f 20 61 6e 64 20 50 32 20 70 61 72 61 6d 65 74  O and P2 paramet
1b050 65 72 73 20 6c 61 74 65 72 2e 20 20 4e 65 69 74  ers later.  Neit
1b060 68 65 72 20 74 68 65 20 4b 65 79 49 6e 66 6f 20  her the KeyInfo 
1b070 6e 6f 72 0a 2a 2a 20 74 68 65 20 6e 75 6d 62 65  nor.** the numbe
1b080 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20  r of columns in 
1b090 50 32 20 63 61 6e 20 62 65 20 63 6f 6d 70 75 74  P2 can be comput
1b0a0 65 64 20 61 74 20 74 68 65 20 73 61 6d 65 20 74  ed at the same t
1b0b0 69 6d 65 0a 2a 2a 20 61 73 20 74 68 65 20 4f 50  ime.** as the OP
1b0c0 5f 4f 70 65 6e 45 70 68 6d 20 69 6e 73 74 72 75  _OpenEphm instru
1b0d0 63 74 69 6f 6e 20 69 73 20 63 6f 64 65 64 20 62  ction is coded b
1b0e0 65 63 61 75 73 65 20 6e 6f 74 0a 2a 2a 20 65 6e  ecause not.** en
1b0f0 6f 75 67 68 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  ough information
1b100 20 61 62 6f 75 74 20 74 68 65 20 63 6f 6d 70 6f   about the compo
1b110 75 6e 64 20 71 75 65 72 79 20 69 73 20 6b 6e 6f  und query is kno
1b120 77 6e 20 61 74 20 74 68 61 74 20 70 6f 69 6e 74  wn at that point
1b130 2e 0a 2a 2a 20 54 68 65 20 4b 65 79 49 6e 66 6f  ..** The KeyInfo
1b140 20 66 6f 72 20 61 64 64 72 4f 70 65 6e 54 72 61   for addrOpenTra
1b150 6e 5b 30 5d 20 61 6e 64 20 5b 31 5d 20 63 6f 6e  n[0] and [1] con
1b160 74 61 69 6e 73 20 63 6f 6c 6c 61 74 69 6e 67 20  tains collating 
1b170 73 65 71 75 65 6e 63 65 73 0a 2a 2a 20 66 6f 72  sequences.** for
1b180 20 74 68 65 20 72 65 73 75 6c 74 20 73 65 74 2e   the result set.
1b190 20 20 54 68 65 20 4b 65 79 49 6e 66 6f 20 66 6f    The KeyInfo fo
1b1a0 72 20 61 64 64 72 4f 70 65 6e 45 70 68 6d 5b 32  r addrOpenEphm[2
1b1b0 5d 20 63 6f 6e 74 61 69 6e 73 20 63 6f 6c 6c 61  ] contains colla
1b1c0 74 69 6e 67 0a 2a 2a 20 73 65 71 75 65 6e 63 65  ting.** sequence
1b1d0 73 20 66 6f 72 20 74 68 65 20 4f 52 44 45 52 20  s for the ORDER 
1b1e0 42 59 20 63 6c 61 75 73 65 2e 0a 2a 2f 0a 73 74  BY clause..*/.st
1b1f0 72 75 63 74 20 53 65 6c 65 63 74 20 7b 0a 20 20  ruct Select {.  
1b200 45 78 70 72 4c 69 73 74 20 2a 70 45 4c 69 73 74  ExprList *pEList
1b210 3b 20 20 20 20 20 20 2f 2a 20 54 68 65 20 66 69  ;      /* The fi
1b220 65 6c 64 73 20 6f 66 20 74 68 65 20 72 65 73 75  elds of the resu
1b230 6c 74 20 2a 2f 0a 20 20 75 38 20 6f 70 3b 20 20  lt */.  u8 op;  
1b240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1b250 2a 20 4f 6e 65 20 6f 66 3a 20 54 4b 5f 55 4e 49  * One of: TK_UNI
1b260 4f 4e 20 54 4b 5f 41 4c 4c 20 54 4b 5f 49 4e 54  ON TK_ALL TK_INT
1b270 45 52 53 45 43 54 20 54 4b 5f 45 58 43 45 50 54  ERSECT TK_EXCEPT
1b280 20 2a 2f 0a 20 20 4c 6f 67 45 73 74 20 6e 53 65   */.  LogEst nSe
1b290 6c 65 63 74 52 6f 77 3b 20 20 20 20 20 2f 2a 20  lectRow;     /* 
1b2a0 45 73 74 69 6d 61 74 65 64 20 6e 75 6d 62 65 72  Estimated number
1b2b0 20 6f 66 20 72 65 73 75 6c 74 20 72 6f 77 73 20   of result rows 
1b2c0 2a 2f 0a 20 20 75 33 32 20 73 65 6c 46 6c 61 67  */.  u32 selFlag
1b2d0 73 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56  s;          /* V
1b2e0 61 72 69 6f 75 73 20 53 46 5f 2a 20 76 61 6c 75  arious SF_* valu
1b2f0 65 73 20 2a 2f 0a 20 20 69 6e 74 20 69 4c 69 6d  es */.  int iLim
1b300 69 74 2c 20 69 4f 66 66 73 65 74 3b 20 20 20 2f  it, iOffset;   /
1b310 2a 20 4d 65 6d 6f 72 79 20 72 65 67 69 73 74 65  * Memory registe
1b320 72 73 20 68 6f 6c 64 69 6e 67 20 4c 49 4d 49 54  rs holding LIMIT
1b330 20 26 20 4f 46 46 53 45 54 20 63 6f 75 6e 74 65   & OFFSET counte
1b340 72 73 20 2a 2f 0a 23 69 66 20 53 45 4c 45 43 54  rs */.#if SELECT
1b350 54 52 41 43 45 5f 45 4e 41 42 4c 45 44 0a 20 20  TRACE_ENABLED.  
1b360 63 68 61 72 20 7a 53 65 6c 4e 61 6d 65 5b 31 32  char zSelName[12
1b370 5d 3b 20 20 20 20 20 2f 2a 20 53 79 6d 62 6f 6c  ];     /* Symbol
1b380 69 63 20 6e 61 6d 65 20 6f 66 20 74 68 69 73 20  ic name of this 
1b390 53 45 4c 45 43 54 20 75 73 65 20 66 6f 72 20 64  SELECT use for d
1b3a0 65 62 75 67 67 69 6e 67 20 2a 2f 0a 23 65 6e 64  ebugging */.#end
1b3b0 69 66 0a 20 20 69 6e 74 20 61 64 64 72 4f 70 65  if.  int addrOpe
1b3c0 6e 45 70 68 6d 5b 32 5d 3b 20 20 20 2f 2a 20 4f  nEphm[2];   /* O
1b3d0 50 5f 4f 70 65 6e 45 70 68 65 6d 20 6f 70 63 6f  P_OpenEphem opco
1b3e0 64 65 73 20 72 65 6c 61 74 65 64 20 74 6f 20 74  des related to t
1b3f0 68 69 73 20 73 65 6c 65 63 74 20 2a 2f 0a 20 20  his select */.  
1b400 53 72 63 4c 69 73 74 20 2a 70 53 72 63 3b 20 20  SrcList *pSrc;  
1b410 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 46 52         /* The FR
1b420 4f 4d 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 45  OM clause */.  E
1b430 78 70 72 20 2a 70 57 68 65 72 65 3b 20 20 20 20  xpr *pWhere;    
1b440 20 20 20 20 20 20 2f 2a 20 54 68 65 20 57 48 45        /* The WHE
1b450 52 45 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 45  RE clause */.  E
1b460 78 70 72 4c 69 73 74 20 2a 70 47 72 6f 75 70 42  xprList *pGroupB
1b470 79 3b 20 20 20 20 2f 2a 20 54 68 65 20 47 52 4f  y;    /* The GRO
1b480 55 50 20 42 59 20 63 6c 61 75 73 65 20 2a 2f 0a  UP BY clause */.
1b490 20 20 45 78 70 72 20 2a 70 48 61 76 69 6e 67 3b    Expr *pHaving;
1b4a0 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
1b4b0 48 41 56 49 4e 47 20 63 6c 61 75 73 65 20 2a 2f  HAVING clause */
1b4c0 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70 4f 72  .  ExprList *pOr
1b4d0 64 65 72 42 79 3b 20 20 20 20 2f 2a 20 54 68 65  derBy;    /* The
1b4e0 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73 65   ORDER BY clause
1b4f0 20 2a 2f 0a 20 20 53 65 6c 65 63 74 20 2a 70 50   */.  Select *pP
1b500 72 69 6f 72 3b 20 20 20 20 20 20 20 20 2f 2a 20  rior;        /* 
1b510 50 72 69 6f 72 20 73 65 6c 65 63 74 20 69 6e 20  Prior select in 
1b520 61 20 63 6f 6d 70 6f 75 6e 64 20 73 65 6c 65 63  a compound selec
1b530 74 20 73 74 61 74 65 6d 65 6e 74 20 2a 2f 0a 20  t statement */. 
1b540 20 53 65 6c 65 63 74 20 2a 70 4e 65 78 74 3b 20   Select *pNext; 
1b550 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20          /* Next 
1b560 73 65 6c 65 63 74 20 74 6f 20 74 68 65 20 6c 65  select to the le
1b570 66 74 20 69 6e 20 61 20 63 6f 6d 70 6f 75 6e 64  ft in a compound
1b580 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 4c 69 6d   */.  Expr *pLim
1b590 69 74 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  it;          /* 
1b5a0 4c 49 4d 49 54 20 65 78 70 72 65 73 73 69 6f 6e  LIMIT expression
1b5b0 2e 20 4e 55 4c 4c 20 6d 65 61 6e 73 20 6e 6f 74  . NULL means not
1b5c0 20 75 73 65 64 2e 20 2a 2f 0a 20 20 45 78 70 72   used. */.  Expr
1b5d0 20 2a 70 4f 66 66 73 65 74 3b 20 20 20 20 20 20   *pOffset;      
1b5e0 20 20 20 2f 2a 20 4f 46 46 53 45 54 20 65 78 70     /* OFFSET exp
1b5f0 72 65 73 73 69 6f 6e 2e 20 4e 55 4c 4c 20 6d 65  ression. NULL me
1b600 61 6e 73 20 6e 6f 74 20 75 73 65 64 2e 20 2a 2f  ans not used. */
1b610 0a 20 20 57 69 74 68 20 2a 70 57 69 74 68 3b 20  .  With *pWith; 
1b620 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57 49 54            /* WIT
1b630 48 20 63 6c 61 75 73 65 20 61 74 74 61 63 68 65  H clause attache
1b640 64 20 74 6f 20 74 68 69 73 20 73 65 6c 65 63 74  d to this select
1b650 2e 20 4f 72 20 4e 55 4c 4c 2e 20 2a 2f 0a 7d 3b  . Or NULL. */.};
1b660 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20  ../*.** Allowed 
1b670 76 61 6c 75 65 73 20 66 6f 72 20 53 65 6c 65 63  values for Selec
1b680 74 2e 73 65 6c 46 6c 61 67 73 2e 20 20 54 68 65  t.selFlags.  The
1b690 20 22 53 46 22 20 70 72 65 66 69 78 20 73 74 61   "SF" prefix sta
1b6a0 6e 64 73 20 66 6f 72 0a 2a 2a 20 22 53 65 6c 65  nds for.** "Sele
1b6b0 63 74 20 46 6c 61 67 22 2e 0a 2a 2a 0a 2a 2a 20  ct Flag"..**.** 
1b6c0 56 61 6c 75 65 20 63 6f 6e 73 74 72 61 69 6e 74  Value constraint
1b6d0 73 20 28 61 6c 6c 20 63 68 65 63 6b 65 64 20 76  s (all checked v
1b6e0 69 61 20 61 73 73 65 72 74 28 29 29 0a 2a 2a 20  ia assert()).** 
1b6f0 20 20 20 20 53 46 5f 48 61 73 41 67 67 20 20 20      SF_HasAgg   
1b700 20 20 3d 3d 20 4e 43 5f 48 61 73 41 67 67 0a 2a    == NC_HasAgg.*
1b710 2a 20 20 20 20 20 53 46 5f 4d 69 6e 4d 61 78 41  *     SF_MinMaxA
1b720 67 67 20 20 3d 3d 20 4e 43 5f 4d 69 6e 4d 61 78  gg  == NC_MinMax
1b730 41 67 67 20 20 20 20 20 3d 3d 20 53 51 4c 49 54  Agg     == SQLIT
1b740 45 5f 46 55 4e 43 5f 4d 49 4e 4d 41 58 0a 2a 2a  E_FUNC_MINMAX.**
1b750 20 20 20 20 20 53 46 5f 46 69 78 65 64 4c 69 6d       SF_FixedLim
1b760 69 74 20 3d 3d 20 57 48 45 52 45 5f 55 53 45 5f  it == WHERE_USE_
1b770 4c 49 4d 49 54 0a 2a 2f 0a 23 64 65 66 69 6e 65  LIMIT.*/.#define
1b780 20 53 46 5f 44 69 73 74 69 6e 63 74 20 20 20 20   SF_Distinct    
1b790 20 20 20 30 78 30 30 30 30 31 20 20 2f 2a 20 4f     0x00001  /* O
1b7a0 75 74 70 75 74 20 73 68 6f 75 6c 64 20 62 65 20  utput should be 
1b7b0 44 49 53 54 49 4e 43 54 20 2a 2f 0a 23 64 65 66  DISTINCT */.#def
1b7c0 69 6e 65 20 53 46 5f 41 6c 6c 20 20 20 20 20 20  ine SF_All      
1b7d0 20 20 20 20 20 20 30 78 30 30 30 30 32 20 20 2f        0x00002  /
1b7e0 2a 20 49 6e 63 6c 75 64 65 73 20 74 68 65 20 41  * Includes the A
1b7f0 4c 4c 20 6b 65 79 77 6f 72 64 20 2a 2f 0a 23 64  LL keyword */.#d
1b800 65 66 69 6e 65 20 53 46 5f 52 65 73 6f 6c 76 65  efine SF_Resolve
1b810 64 20 20 20 20 20 20 20 30 78 30 30 30 30 34 20  d       0x00004 
1b820 20 2f 2a 20 49 64 65 6e 74 69 66 69 65 72 73 20   /* Identifiers 
1b830 68 61 76 65 20 62 65 65 6e 20 72 65 73 6f 6c 76  have been resolv
1b840 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46  ed */.#define SF
1b850 5f 41 67 67 72 65 67 61 74 65 20 20 20 20 20 20  _Aggregate      
1b860 30 78 30 30 30 30 38 20 20 2f 2a 20 43 6f 6e 74  0x00008  /* Cont
1b870 61 69 6e 73 20 61 67 67 20 66 75 6e 63 74 69 6f  ains agg functio
1b880 6e 73 20 6f 72 20 61 20 47 52 4f 55 50 20 42 59  ns or a GROUP BY
1b890 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 48   */.#define SF_H
1b8a0 61 73 41 67 67 20 20 20 20 20 20 20 20 20 30 78  asAgg         0x
1b8b0 30 30 30 31 30 20 20 2f 2a 20 43 6f 6e 74 61 69  00010  /* Contai
1b8c0 6e 73 20 61 67 67 72 65 67 61 74 65 20 66 75 6e  ns aggregate fun
1b8d0 63 74 69 6f 6e 73 20 2a 2f 0a 23 64 65 66 69 6e  ctions */.#defin
1b8e0 65 20 53 46 5f 55 73 65 73 45 70 68 65 6d 65 72  e SF_UsesEphemer
1b8f0 61 6c 20 20 30 78 30 30 30 32 30 20 20 2f 2a 20  al  0x00020  /* 
1b900 55 73 65 73 20 74 68 65 20 4f 70 65 6e 45 70 68  Uses the OpenEph
1b910 65 6d 65 72 61 6c 20 6f 70 63 6f 64 65 20 2a 2f  emeral opcode */
1b920 0a 23 64 65 66 69 6e 65 20 53 46 5f 45 78 70 61  .#define SF_Expa
1b930 6e 64 65 64 20 20 20 20 20 20 20 30 78 30 30 30  nded       0x000
1b940 34 30 20 20 2f 2a 20 73 71 6c 69 74 65 33 53 65  40  /* sqlite3Se
1b950 6c 65 63 74 45 78 70 61 6e 64 28 29 20 63 61 6c  lectExpand() cal
1b960 6c 65 64 20 6f 6e 20 74 68 69 73 20 2a 2f 0a 23  led on this */.#
1b970 64 65 66 69 6e 65 20 53 46 5f 48 61 73 54 79 70  define SF_HasTyp
1b980 65 49 6e 66 6f 20 20 20 20 30 78 30 30 30 38 30  eInfo    0x00080
1b990 20 20 2f 2a 20 46 52 4f 4d 20 73 75 62 71 75 65    /* FROM subque
1b9a0 72 69 65 73 20 68 61 76 65 20 54 61 62 6c 65 20  ries have Table 
1b9b0 6d 65 74 61 64 61 74 61 20 2a 2f 0a 23 64 65 66  metadata */.#def
1b9c0 69 6e 65 20 53 46 5f 43 6f 6d 70 6f 75 6e 64 20  ine SF_Compound 
1b9d0 20 20 20 20 20 20 30 78 30 30 31 30 30 20 20 2f        0x00100  /
1b9e0 2a 20 50 61 72 74 20 6f 66 20 61 20 63 6f 6d 70  * Part of a comp
1b9f0 6f 75 6e 64 20 71 75 65 72 79 20 2a 2f 0a 23 64  ound query */.#d
1ba00 65 66 69 6e 65 20 53 46 5f 56 61 6c 75 65 73 20  efine SF_Values 
1ba10 20 20 20 20 20 20 20 20 30 78 30 30 32 30 30 20          0x00200 
1ba20 20 2f 2a 20 53 79 6e 74 68 65 73 69 7a 65 64 20   /* Synthesized 
1ba30 66 72 6f 6d 20 56 41 4c 55 45 53 20 63 6c 61 75  from VALUES clau
1ba40 73 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46  se */.#define SF
1ba50 5f 4d 75 6c 74 69 56 61 6c 75 65 20 20 20 20 20  _MultiValue     
1ba60 30 78 30 30 34 30 30 20 20 2f 2a 20 53 69 6e 67  0x00400  /* Sing
1ba70 6c 65 20 56 41 4c 55 45 53 20 74 65 72 6d 20 77  le VALUES term w
1ba80 69 74 68 20 6d 75 6c 74 69 70 6c 65 20 72 6f 77  ith multiple row
1ba90 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f  s */.#define SF_
1baa0 4e 65 73 74 65 64 46 72 6f 6d 20 20 20 20 20 30  NestedFrom     0
1bab0 78 30 30 38 30 30 20 20 2f 2a 20 50 61 72 74 20  x00800  /* Part 
1bac0 6f 66 20 61 20 70 61 72 65 6e 74 68 65 73 69 7a  of a parenthesiz
1bad0 65 64 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 2a  ed FROM clause *
1bae0 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 4d 69 6e  /.#define SF_Min
1baf0 4d 61 78 41 67 67 20 20 20 20 20 20 30 78 30 31  MaxAgg      0x01
1bb00 30 30 30 20 20 2f 2a 20 41 67 67 72 65 67 61 74  000  /* Aggregat
1bb10 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20 6d 69 6e  e containing min
1bb20 28 29 20 6f 72 20 6d 61 78 28 29 20 2a 2f 0a 23  () or max() */.#
1bb30 64 65 66 69 6e 65 20 53 46 5f 52 65 63 75 72 73  define SF_Recurs
1bb40 69 76 65 20 20 20 20 20 20 30 78 30 32 30 30 30  ive      0x02000
1bb50 20 20 2f 2a 20 54 68 65 20 72 65 63 75 72 73 69    /* The recursi
1bb60 76 65 20 70 61 72 74 20 6f 66 20 61 20 72 65 63  ve part of a rec
1bb70 75 72 73 69 76 65 20 43 54 45 20 2a 2f 0a 23 64  ursive CTE */.#d
1bb80 65 66 69 6e 65 20 53 46 5f 46 69 78 65 64 4c 69  efine SF_FixedLi
1bb90 6d 69 74 20 20 20 20 20 30 78 30 34 30 30 30 20  mit     0x04000 
1bba0 20 2f 2a 20 6e 53 65 6c 65 63 74 52 6f 77 20 73   /* nSelectRow s
1bbb0 65 74 20 62 79 20 61 20 63 6f 6e 73 74 61 6e 74  et by a constant
1bbc0 20 4c 49 4d 49 54 20 2a 2f 0a 23 64 65 66 69 6e   LIMIT */.#defin
1bbd0 65 20 53 46 5f 4d 61 79 62 65 43 6f 6e 76 65 72  e SF_MaybeConver
1bbe0 74 20 20 20 30 78 30 38 30 30 30 20 20 2f 2a 20  t   0x08000  /* 
1bbf0 4e 65 65 64 20 63 6f 6e 76 65 72 74 43 6f 6d 70  Need convertComp
1bc00 6f 75 6e 64 53 65 6c 65 63 74 54 6f 53 75 62 71  oundSelectToSubq
1bc10 75 65 72 79 28 29 20 2a 2f 0a 23 64 65 66 69 6e  uery() */.#defin
1bc20 65 20 53 46 5f 43 6f 6e 76 65 72 74 65 64 20 20  e SF_Converted  
1bc30 20 20 20 20 30 78 31 30 30 30 30 20 20 2f 2a 20      0x10000  /* 
1bc40 42 79 20 63 6f 6e 76 65 72 74 43 6f 6d 70 6f 75  By convertCompou
1bc50 6e 64 53 65 6c 65 63 74 54 6f 53 75 62 71 75 65  ndSelectToSubque
1bc60 72 79 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ry() */.#define 
1bc70 53 46 5f 49 6e 63 6c 75 64 65 48 69 64 64 65 6e  SF_IncludeHidden
1bc80 20 20 30 78 32 30 30 30 30 20 20 2f 2a 20 49 6e    0x20000  /* In
1bc90 63 6c 75 64 65 20 68 69 64 64 65 6e 20 63 6f 6c  clude hidden col
1bca0 75 6d 6e 73 20 69 6e 20 6f 75 74 70 75 74 20 2a  umns in output *
1bcb0 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 72 65  /.../*.** The re
1bcc0 73 75 6c 74 73 20 6f 66 20 61 20 53 45 4c 45 43  sults of a SELEC
1bcd0 54 20 63 61 6e 20 62 65 20 64 69 73 74 72 69 62  T can be distrib
1bce0 75 74 65 64 20 69 6e 20 73 65 76 65 72 61 6c 20  uted in several 
1bcf0 77 61 79 73 2c 20 61 73 20 64 65 66 69 6e 65 64  ways, as defined
1bd00 0a 2a 2a 20 62 79 20 6f 6e 65 20 6f 66 20 74 68  .** by one of th
1bd10 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72  e following macr
1bd20 6f 73 2e 20 20 54 68 65 20 22 53 52 54 22 20 70  os.  The "SRT" p
1bd30 72 65 66 69 78 20 6d 65 61 6e 73 20 22 53 45 4c  refix means "SEL
1bd40 45 43 54 20 52 65 73 75 6c 74 0a 2a 2a 20 54 79  ECT Result.** Ty
1bd50 70 65 22 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53  pe"..**.**     S
1bd60 52 54 5f 55 6e 69 6f 6e 20 20 20 20 20 20 20 53  RT_Union       S
1bd70 74 6f 72 65 20 72 65 73 75 6c 74 73 20 61 73 20  tore results as 
1bd80 61 20 6b 65 79 20 69 6e 20 61 20 74 65 6d 70 6f  a key in a tempo
1bd90 72 61 72 79 20 69 6e 64 65 78 0a 2a 2a 20 20 20  rary index.**   
1bda0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bdb0 20 20 69 64 65 6e 74 69 66 69 65 64 20 62 79 20    identified by 
1bdc0 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 2e 0a  pDest->iSDParm..
1bdd0 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 45 78  **.**     SRT_Ex
1bde0 63 65 70 74 20 20 20 20 20 20 52 65 6d 6f 76 65  cept      Remove
1bdf0 20 72 65 73 75 6c 74 73 20 66 72 6f 6d 20 74 68   results from th
1be00 65 20 74 65 6d 70 6f 72 61 72 79 20 69 6e 64 65  e temporary inde
1be10 78 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d  x pDest->iSDParm
1be20 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f  ..**.**     SRT_
1be30 45 78 69 73 74 73 20 20 20 20 20 20 53 74 6f 72  Exists      Stor
1be40 65 20 61 20 31 20 69 6e 20 6d 65 6d 6f 72 79 20  e a 1 in memory 
1be50 63 65 6c 6c 20 70 44 65 73 74 2d 3e 69 53 44 50  cell pDest->iSDP
1be60 61 72 6d 20 69 66 20 74 68 65 20 72 65 73 75 6c  arm if the resul
1be70 74 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  t.**            
1be80 20 20 20 20 20 20 20 20 20 73 65 74 20 69 73 20           set is 
1be90 6e 6f 74 20 65 6d 70 74 79 2e 0a 2a 2a 0a 2a 2a  not empty..**.**
1bea0 20 20 20 20 20 53 52 54 5f 44 69 73 63 61 72 64       SRT_Discard
1beb0 20 20 20 20 20 54 68 72 6f 77 20 74 68 65 20 72       Throw the r
1bec0 65 73 75 6c 74 73 20 61 77 61 79 2e 20 20 54 68  esults away.  Th
1bed0 69 73 20 69 73 20 75 73 65 64 20 62 79 20 53 45  is is used by SE
1bee0 4c 45 43 54 0a 2a 2a 20 20 20 20 20 20 20 20 20  LECT.**         
1bef0 20 20 20 20 20 20 20 20 20 20 20 20 73 74 61 74              stat
1bf00 65 6d 65 6e 74 73 20 77 69 74 68 69 6e 20 74 72  ements within tr
1bf10 69 67 67 65 72 73 20 77 68 6f 73 65 20 6f 6e 6c  iggers whose onl
1bf20 79 20 70 75 72 70 6f 73 65 20 69 73 0a 2a 2a 20  y purpose is.** 
1bf30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bf40 20 20 20 20 74 68 65 20 73 69 64 65 2d 65 66 66      the side-eff
1bf50 65 63 74 73 20 6f 66 20 66 75 6e 63 74 69 6f 6e  ects of function
1bf60 73 2e 0a 2a 2a 0a 2a 2a 20 41 6c 6c 20 6f 66 20  s..**.** All of 
1bf70 74 68 65 20 61 62 6f 76 65 20 61 72 65 20 66 72  the above are fr
1bf80 65 65 20 74 6f 20 69 67 6e 6f 72 65 20 74 68 65  ee to ignore the
1bf90 69 72 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75  ir ORDER BY clau
1bfa0 73 65 2e 20 54 68 6f 73 65 20 74 68 61 74 0a 2a  se. Those that.*
1bfb0 2a 20 66 6f 6c 6c 6f 77 20 6d 75 73 74 20 68 6f  * follow must ho
1bfc0 6e 6f 72 20 74 68 65 20 4f 52 44 45 52 20 42 59  nor the ORDER BY
1bfd0 20 63 6c 61 75 73 65 2e 0a 2a 2a 0a 2a 2a 20 20   clause..**.**  
1bfe0 20 20 20 53 52 54 5f 4f 75 74 70 75 74 20 20 20     SRT_Output   
1bff0 20 20 20 47 65 6e 65 72 61 74 65 20 61 20 72 6f     Generate a ro
1c000 77 20 6f 66 20 6f 75 74 70 75 74 20 28 75 73 69  w of output (usi
1c010 6e 67 20 74 68 65 20 4f 50 5f 52 65 73 75 6c 74  ng the OP_Result
1c020 52 6f 77 0a 2a 2a 20 20 20 20 20 20 20 20 20 20  Row.**          
1c030 20 20 20 20 20 20 20 20 20 20 20 6f 70 63 6f 64             opcod
1c040 65 29 20 66 6f 72 20 65 61 63 68 20 72 6f 77 20  e) for each row 
1c050 69 6e 20 74 68 65 20 72 65 73 75 6c 74 20 73 65  in the result se
1c060 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54  t..**.**     SRT
1c070 5f 4d 65 6d 20 20 20 20 20 20 20 20 20 4f 6e 6c  _Mem         Onl
1c080 79 20 76 61 6c 69 64 20 69 66 20 74 68 65 20 72  y valid if the r
1c090 65 73 75 6c 74 20 69 73 20 61 20 73 69 6e 67 6c  esult is a singl
1c0a0 65 20 63 6f 6c 75 6d 6e 2e 0a 2a 2a 20 20 20 20  e column..**    
1c0b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c0c0 20 53 74 6f 72 65 20 74 68 65 20 66 69 72 73 74   Store the first
1c0d0 20 63 6f 6c 75 6d 6e 20 6f 66 20 74 68 65 20 66   column of the f
1c0e0 69 72 73 74 20 72 65 73 75 6c 74 20 72 6f 77 0a  irst result row.
1c0f0 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
1c100 20 20 20 20 20 20 20 69 6e 20 72 65 67 69 73 74         in regist
1c110 65 72 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72  er pDest->iSDPar
1c120 6d 20 74 68 65 6e 20 61 62 61 6e 64 6f 6e 20 74  m then abandon t
1c130 68 65 20 72 65 73 74 0a 2a 2a 20 20 20 20 20 20  he rest.**      
1c140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6f                 o
1c150 66 20 74 68 65 20 71 75 65 72 79 2e 20 20 54 68  f the query.  Th
1c160 69 73 20 64 65 73 74 69 6e 61 74 69 6f 6e 20 69  is destination i
1c170 6d 70 6c 69 65 73 20 22 4c 49 4d 49 54 20 31 22  mplies "LIMIT 1"
1c180 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f  ..**.**     SRT_
1c190 53 65 74 20 20 20 20 20 20 20 20 20 54 68 65 20  Set         The 
1c1a0 72 65 73 75 6c 74 20 6d 75 73 74 20 62 65 20 61  result must be a
1c1b0 20 73 69 6e 67 6c 65 20 63 6f 6c 75 6d 6e 2e 20   single column. 
1c1c0 20 53 74 6f 72 65 20 65 61 63 68 0a 2a 2a 20 20   Store each.**  
1c1d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c1e0 20 20 20 72 6f 77 20 6f 66 20 72 65 73 75 6c 74     row of result
1c1f0 20 61 73 20 74 68 65 20 6b 65 79 20 69 6e 20 74   as the key in t
1c200 61 62 6c 65 20 70 44 65 73 74 2d 3e 69 53 44 50  able pDest->iSDP
1c210 61 72 6d 2e 0a 2a 2a 20 20 20 20 20 20 20 20 20  arm..**         
1c220 20 20 20 20 20 20 20 20 20 20 20 20 41 70 70 6c              Appl
1c230 79 20 74 68 65 20 61 66 66 69 6e 69 74 79 20 70  y the affinity p
1c240 44 65 73 74 2d 3e 61 66 66 53 64 73 74 20 62 65  Dest->affSdst be
1c250 66 6f 72 65 20 73 74 6f 72 69 6e 67 0a 2a 2a 20  fore storing.** 
1c260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c270 20 20 20 20 72 65 73 75 6c 74 73 2e 20 20 55 73      results.  Us
1c280 65 64 20 74 6f 20 69 6d 70 6c 65 6d 65 6e 74 20  ed to implement 
1c290 22 49 4e 20 28 53 45 4c 45 43 54 20 2e 2e 2e 29  "IN (SELECT ...)
1c2a0 22 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54  "..**.**     SRT
1c2b0 5f 45 70 68 65 6d 54 61 62 20 20 20 20 43 72 65  _EphemTab    Cre
1c2c0 61 74 65 20 61 6e 20 74 65 6d 70 6f 72 61 72 79  ate an temporary
1c2d0 20 74 61 62 6c 65 20 70 44 65 73 74 2d 3e 69 53   table pDest->iS
1c2e0 44 50 61 72 6d 20 61 6e 64 20 73 74 6f 72 65 0a  DParm and store.
1c2f0 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
1c300 20 20 20 20 20 20 20 74 68 65 20 72 65 73 75 6c         the resul
1c310 74 20 74 68 65 72 65 2e 20 54 68 65 20 63 75 72  t there. The cur
1c320 73 6f 72 20 69 73 20 6c 65 66 74 20 6f 70 65 6e  sor is left open
1c330 20 61 66 74 65 72 0a 2a 2a 20 20 20 20 20 20 20   after.**       
1c340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
1c350 74 75 72 6e 69 6e 67 2e 20 20 54 68 69 73 20 69  turning.  This i
1c360 73 20 6c 69 6b 65 20 53 52 54 5f 54 61 62 6c 65  s like SRT_Table
1c370 20 65 78 63 65 70 74 20 74 68 61 74 0a 2a 2a 20   except that.** 
1c380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c390 20 20 20 20 74 68 69 73 20 64 65 73 74 69 6e 61      this destina
1c3a0 74 69 6f 6e 20 75 73 65 73 20 4f 50 5f 4f 70 65  tion uses OP_Ope
1c3b0 6e 45 70 68 65 6d 65 72 61 6c 20 74 6f 20 63 72  nEphemeral to cr
1c3c0 65 61 74 65 0a 2a 2a 20 20 20 20 20 20 20 20 20  eate.**         
1c3d0 20 20 20 20 20 20 20 20 20 20 20 20 74 68 65 20              the 
1c3e0 74 61 62 6c 65 20 66 69 72 73 74 2e 0a 2a 2a 0a  table first..**.
1c3f0 2a 2a 20 20 20 20 20 53 52 54 5f 43 6f 72 6f 75  **     SRT_Corou
1c400 74 69 6e 65 20 20 20 47 65 6e 65 72 61 74 65 20  tine   Generate 
1c410 61 20 63 6f 2d 72 6f 75 74 69 6e 65 20 74 68 61  a co-routine tha
1c420 74 20 72 65 74 75 72 6e 73 20 61 20 6e 65 77 20  t returns a new 
1c430 72 6f 77 20 6f 66 0a 2a 2a 20 20 20 20 20 20 20  row of.**       
1c440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
1c450 73 75 6c 74 73 20 65 61 63 68 20 74 69 6d 65 20  sults each time 
1c460 69 74 20 69 73 20 69 6e 76 6f 6b 65 64 2e 20 20  it is invoked.  
1c470 54 68 65 20 65 6e 74 72 79 20 70 6f 69 6e 74 0a  The entry point.
1c480 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
1c490 20 20 20 20 20 20 20 6f 66 20 74 68 65 20 63 6f         of the co
1c4a0 2d 72 6f 75 74 69 6e 65 20 69 73 20 73 74 6f 72  -routine is stor
1c4b0 65 64 20 69 6e 20 72 65 67 69 73 74 65 72 20 70  ed in register p
1c4c0 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 0a 2a 2a  Dest->iSDParm.**
1c4d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c4e0 20 20 20 20 20 61 6e 64 20 74 68 65 20 72 65 73       and the res
1c4f0 75 6c 74 20 72 6f 77 20 69 73 20 73 74 6f 72 65  ult row is store
1c500 64 20 69 6e 20 70 44 65 73 74 2d 3e 6e 44 65 73  d in pDest->nDes
1c510 74 20 72 65 67 69 73 74 65 72 73 0a 2a 2a 20 20  t registers.**  
1c520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c530 20 20 20 73 74 61 72 74 69 6e 67 20 77 69 74 68     starting with
1c540 20 70 44 65 73 74 2d 3e 69 53 64 73 74 2e 0a 2a   pDest->iSdst..*
1c550 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 54 61 62  *.**     SRT_Tab
1c560 6c 65 20 20 20 20 20 20 20 53 74 6f 72 65 20 72  le       Store r
1c570 65 73 75 6c 74 73 20 69 6e 20 74 65 6d 70 6f 72  esults in tempor
1c580 61 72 79 20 74 61 62 6c 65 20 70 44 65 73 74 2d  ary table pDest-
1c590 3e 69 53 44 50 61 72 6d 2e 0a 2a 2a 20 20 20 20  >iSDParm..**    
1c5a0 20 53 52 54 5f 46 69 66 6f 20 20 20 20 20 20 20   SRT_Fifo       
1c5b0 20 54 68 69 73 20 69 73 20 6c 69 6b 65 20 53 52   This is like SR
1c5c0 54 5f 45 70 68 65 6d 54 61 62 20 65 78 63 65 70  T_EphemTab excep
1c5d0 74 20 74 68 61 74 20 74 68 65 20 74 61 62 6c 65  t that the table
1c5e0 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
1c5f0 20 20 20 20 20 20 20 20 69 73 20 61 73 73 75 6d          is assum
1c600 65 64 20 74 6f 20 61 6c 72 65 61 64 79 20 62 65  ed to already be
1c610 20 6f 70 65 6e 2e 20 20 53 52 54 5f 46 69 66 6f   open.  SRT_Fifo
1c620 20 68 61 73 0a 2a 2a 20 20 20 20 20 20 20 20 20   has.**         
1c630 20 20 20 20 20 20 20 20 20 20 20 20 74 68 65 20              the 
1c640 61 64 64 69 74 69 6f 6e 61 6c 20 70 72 6f 70 65  additional prope
1c650 72 74 79 20 6f 66 20 62 65 69 6e 67 20 61 62 6c  rty of being abl
1c660 65 20 74 6f 20 69 67 6e 6f 72 65 0a 2a 2a 20 20  e to ignore.**  
1c670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c680 20 20 20 74 68 65 20 4f 52 44 45 52 20 42 59 20     the ORDER BY 
1c690 63 6c 61 75 73 65 2e 0a 2a 2a 0a 2a 2a 20 20 20  clause..**.**   
1c6a0 20 20 53 52 54 5f 44 69 73 74 46 69 66 6f 20 20    SRT_DistFifo  
1c6b0 20 20 53 74 6f 72 65 20 72 65 73 75 6c 74 73 20    Store results 
1c6c0 69 6e 20 61 20 74 65 6d 70 6f 72 61 72 79 20 74  in a temporary t
1c6d0 61 62 6c 65 20 70 44 65 73 74 2d 3e 69 53 44 50  able pDest->iSDP
1c6e0 61 72 6d 2e 0a 2a 2a 20 20 20 20 20 20 20 20 20  arm..**         
1c6f0 20 20 20 20 20 20 20 20 20 20 20 20 42 75 74 20              But 
1c700 61 6c 73 6f 20 75 73 65 20 74 65 6d 70 6f 72 61  also use tempora
1c710 72 79 20 74 61 62 6c 65 20 70 44 65 73 74 2d 3e  ry table pDest->
1c720 69 53 44 50 61 72 6d 2b 31 20 61 73 0a 2a 2a 20  iSDParm+1 as.** 
1c730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c740 20 20 20 20 61 20 72 65 63 6f 72 64 20 6f 66 20      a record of 
1c750 61 6c 6c 20 70 72 69 6f 72 20 72 65 73 75 6c 74  all prior result
1c760 73 20 61 6e 64 20 69 67 6e 6f 72 65 20 61 6e 79  s and ignore any
1c770 20 64 75 70 6c 69 63 61 74 65 0a 2a 2a 20 20 20   duplicate.**   
1c780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c790 20 20 72 6f 77 73 2e 20 20 4e 61 6d 65 20 6d 65    rows.  Name me
1c7a0 61 6e 73 3a 20 20 22 44 69 73 74 69 6e 63 74 20  ans:  "Distinct 
1c7b0 46 69 66 6f 22 2e 0a 2a 2a 0a 2a 2a 20 20 20 20  Fifo"..**.**    
1c7c0 20 53 52 54 5f 51 75 65 75 65 20 20 20 20 20 20   SRT_Queue      
1c7d0 20 53 74 6f 72 65 20 72 65 73 75 6c 74 73 20 69   Store results i
1c7e0 6e 20 70 72 69 6f 72 69 74 79 20 71 75 65 75 65  n priority queue
1c7f0 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 20   pDest->iSDParm 
1c800 28 72 65 61 6c 6c 79 0a 2a 2a 20 20 20 20 20 20  (really.**      
1c810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61                 a
1c820 6e 20 69 6e 64 65 78 29 2e 20 20 41 70 70 65 6e  n index).  Appen
1c830 64 20 61 20 73 65 71 75 65 6e 63 65 20 6e 75 6d  d a sequence num
1c840 62 65 72 20 73 6f 20 74 68 61 74 20 61 6c 6c 20  ber so that all 
1c850 65 6e 74 72 69 65 73 0a 2a 2a 20 20 20 20 20 20  entries.**      
1c860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61                 a
1c870 72 65 20 64 69 73 74 69 6e 63 74 2e 0a 2a 2a 0a  re distinct..**.
1c880 2a 2a 20 20 20 20 20 53 52 54 5f 44 69 73 74 51  **     SRT_DistQ
1c890 75 65 75 65 20 20 20 53 74 6f 72 65 20 72 65 73  ueue   Store res
1c8a0 75 6c 74 73 20 69 6e 20 70 72 69 6f 72 69 74 79  ults in priority
1c8b0 20 71 75 65 75 65 20 70 44 65 73 74 2d 3e 69 53   queue pDest->iS
1c8c0 44 50 61 72 6d 20 6f 6e 6c 79 20 69 66 0a 2a 2a  DParm only if.**
1c8d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c8e0 20 20 20 20 20 74 68 65 20 73 61 6d 65 20 72 65       the same re
1c8f0 63 6f 72 64 20 68 61 73 20 6e 65 76 65 72 20 62  cord has never b
1c900 65 65 6e 20 73 74 6f 72 65 64 20 62 65 66 6f 72  een stored befor
1c910 65 2e 20 20 54 68 65 0a 2a 2a 20 20 20 20 20 20  e.  The.**      
1c920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
1c930 6e 64 65 78 20 61 74 20 70 44 65 73 74 2d 3e 69  ndex at pDest->i
1c940 53 44 50 61 72 6d 2b 31 20 68 6f 6c 64 20 61 6c  SDParm+1 hold al
1c950 6c 20 70 72 69 6f 72 20 73 74 6f 72 65 73 2e 0a  l prior stores..
1c960 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 55  */.#define SRT_U
1c970 6e 69 6f 6e 20 20 20 20 20 20 20 20 31 20 20 2f  nion        1  /
1c980 2a 20 53 74 6f 72 65 20 72 65 73 75 6c 74 20 61  * Store result a
1c990 73 20 6b 65 79 73 20 69 6e 20 61 6e 20 69 6e 64  s keys in an ind
1c9a0 65 78 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52  ex */.#define SR
1c9b0 54 5f 45 78 63 65 70 74 20 20 20 20 20 20 20 32  T_Except       2
1c9c0 20 20 2f 2a 20 52 65 6d 6f 76 65 20 72 65 73 75    /* Remove resu
1c9d0 6c 74 20 66 72 6f 6d 20 61 20 55 4e 49 4f 4e 20  lt from a UNION 
1c9e0 69 6e 64 65 78 20 2a 2f 0a 23 64 65 66 69 6e 65  index */.#define
1c9f0 20 53 52 54 5f 45 78 69 73 74 73 20 20 20 20 20   SRT_Exists     
1ca00 20 20 33 20 20 2f 2a 20 53 74 6f 72 65 20 31 20    3  /* Store 1 
1ca10 69 66 20 74 68 65 20 72 65 73 75 6c 74 20 69 73  if the result is
1ca20 20 6e 6f 74 20 65 6d 70 74 79 20 2a 2f 0a 23 64   not empty */.#d
1ca30 65 66 69 6e 65 20 53 52 54 5f 44 69 73 63 61 72  efine SRT_Discar
1ca40 64 20 20 20 20 20 20 34 20 20 2f 2a 20 44 6f 20  d      4  /* Do 
1ca50 6e 6f 74 20 73 61 76 65 20 74 68 65 20 72 65 73  not save the res
1ca60 75 6c 74 73 20 61 6e 79 77 68 65 72 65 20 2a 2f  ults anywhere */
1ca70 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 46 69 66  .#define SRT_Fif
1ca80 6f 20 20 20 20 20 20 20 20 20 35 20 20 2f 2a 20  o         5  /* 
1ca90 53 74 6f 72 65 20 72 65 73 75 6c 74 20 61 73 20  Store result as 
1caa0 64 61 74 61 20 77 69 74 68 20 61 6e 20 61 75 74  data with an aut
1cab0 6f 6d 61 74 69 63 20 72 6f 77 69 64 20 2a 2f 0a  omatic rowid */.
1cac0 23 64 65 66 69 6e 65 20 53 52 54 5f 44 69 73 74  #define SRT_Dist
1cad0 46 69 66 6f 20 20 20 20 20 36 20 20 2f 2a 20 4c  Fifo     6  /* L
1cae0 69 6b 65 20 53 52 54 5f 46 69 66 6f 2c 20 62 75  ike SRT_Fifo, bu
1caf0 74 20 75 6e 69 71 75 65 20 72 65 73 75 6c 74 73  t unique results
1cb00 20 6f 6e 6c 79 20 2a 2f 0a 23 64 65 66 69 6e 65   only */.#define
1cb10 20 53 52 54 5f 51 75 65 75 65 20 20 20 20 20 20   SRT_Queue      
1cb20 20 20 37 20 20 2f 2a 20 53 74 6f 72 65 20 72 65    7  /* Store re
1cb30 73 75 6c 74 20 69 6e 20 61 6e 20 71 75 65 75 65  sult in an queue
1cb40 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f   */.#define SRT_
1cb50 44 69 73 74 51 75 65 75 65 20 20 20 20 38 20 20  DistQueue    8  
1cb60 2f 2a 20 4c 69 6b 65 20 53 52 54 5f 51 75 65 75  /* Like SRT_Queu
1cb70 65 2c 20 62 75 74 20 75 6e 69 71 75 65 20 72 65  e, but unique re
1cb80 73 75 6c 74 73 20 6f 6e 6c 79 20 2a 2f 0a 0a 2f  sults only */../
1cb90 2a 20 54 68 65 20 4f 52 44 45 52 20 42 59 20 63  * The ORDER BY c
1cba0 6c 61 75 73 65 20 69 73 20 69 67 6e 6f 72 65 64  lause is ignored
1cbb0 20 66 6f 72 20 61 6c 6c 20 6f 66 20 74 68 65 20   for all of the 
1cbc0 61 62 6f 76 65 20 2a 2f 0a 23 64 65 66 69 6e 65  above */.#define
1cbd0 20 49 67 6e 6f 72 61 62 6c 65 4f 72 64 65 72 62   IgnorableOrderb
1cbe0 79 28 58 29 20 28 28 58 2d 3e 65 44 65 73 74 29  y(X) ((X->eDest)
1cbf0 3c 3d 53 52 54 5f 44 69 73 74 51 75 65 75 65 29  <=SRT_DistQueue)
1cc00 0a 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 4f 75  ..#define SRT_Ou
1cc10 74 70 75 74 20 20 20 20 20 20 20 39 20 20 2f 2a  tput       9  /*
1cc20 20 4f 75 74 70 75 74 20 65 61 63 68 20 72 6f 77   Output each row
1cc30 20 6f 66 20 72 65 73 75 6c 74 20 2a 2f 0a 23 64   of result */.#d
1cc40 65 66 69 6e 65 20 53 52 54 5f 4d 65 6d 20 20 20  efine SRT_Mem   
1cc50 20 20 20 20 20 20 31 30 20 20 2f 2a 20 53 74 6f        10  /* Sto
1cc60 72 65 20 72 65 73 75 6c 74 20 69 6e 20 61 20 6d  re result in a m
1cc70 65 6d 6f 72 79 20 63 65 6c 6c 20 2a 2f 0a 23 64  emory cell */.#d
1cc80 65 66 69 6e 65 20 53 52 54 5f 53 65 74 20 20 20  efine SRT_Set   
1cc90 20 20 20 20 20 20 31 31 20 20 2f 2a 20 53 74 6f        11  /* Sto
1cca0 72 65 20 72 65 73 75 6c 74 73 20 61 73 20 6b 65  re results as ke
1ccb0 79 73 20 69 6e 20 61 6e 20 69 6e 64 65 78 20 2a  ys in an index *
1ccc0 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 45 70  /.#define SRT_Ep
1ccd0 68 65 6d 54 61 62 20 20 20 20 31 32 20 20 2f 2a  hemTab    12  /*
1cce0 20 43 72 65 61 74 65 20 74 72 61 6e 73 69 65 6e   Create transien
1ccf0 74 20 74 61 62 20 61 6e 64 20 73 74 6f 72 65 20  t tab and store 
1cd00 6c 69 6b 65 20 53 52 54 5f 54 61 62 6c 65 20 2a  like SRT_Table *
1cd10 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 43 6f  /.#define SRT_Co
1cd20 72 6f 75 74 69 6e 65 20 20 20 31 33 20 20 2f 2a  routine   13  /*
1cd30 20 47 65 6e 65 72 61 74 65 20 61 20 73 69 6e 67   Generate a sing
1cd40 6c 65 20 72 6f 77 20 6f 66 20 72 65 73 75 6c 74  le row of result
1cd50 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f   */.#define SRT_
1cd60 54 61 62 6c 65 20 20 20 20 20 20 20 31 34 20 20  Table       14  
1cd70 2f 2a 20 53 74 6f 72 65 20 72 65 73 75 6c 74 20  /* Store result 
1cd80 61 73 20 64 61 74 61 20 77 69 74 68 20 61 6e 20  as data with an 
1cd90 61 75 74 6f 6d 61 74 69 63 20 72 6f 77 69 64 20  automatic rowid 
1cda0 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73  */../*.** An ins
1cdb0 74 61 6e 63 65 20 6f 66 20 74 68 69 73 20 6f 62  tance of this ob
1cdc0 6a 65 63 74 20 64 65 73 63 72 69 62 65 73 20 77  ject describes w
1cdd0 68 65 72 65 20 74 6f 20 70 75 74 20 6f 66 20 74  here to put of t
1cde0 68 65 20 72 65 73 75 6c 74 73 20 6f 66 0a 2a 2a  he results of.**
1cdf0 20 61 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d   a SELECT statem
1ce00 65 6e 74 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53  ent..*/.struct S
1ce10 65 6c 65 63 74 44 65 73 74 20 7b 0a 20 20 75 38  electDest {.  u8
1ce20 20 65 44 65 73 74 3b 20 20 20 20 20 20 20 20 20   eDest;         
1ce30 20 20 20 2f 2a 20 48 6f 77 20 74 6f 20 64 69 73     /* How to dis
1ce40 70 6f 73 65 20 6f 66 20 74 68 65 20 72 65 73 75  pose of the resu
1ce50 6c 74 73 2e 20 20 4f 6e 20 6f 66 20 53 52 54 5f  lts.  On of SRT_
1ce60 2a 20 61 62 6f 76 65 2e 20 2a 2f 0a 20 20 63 68  * above. */.  ch
1ce70 61 72 20 61 66 66 53 64 73 74 3b 20 20 20 20 20  ar affSdst;     
1ce80 20 20 20 2f 2a 20 41 66 66 69 6e 69 74 79 20 75     /* Affinity u
1ce90 73 65 64 20 77 68 65 6e 20 65 44 65 73 74 3d 3d  sed when eDest==
1cea0 53 52 54 5f 53 65 74 20 2a 2f 0a 20 20 69 6e 74  SRT_Set */.  int
1ceb0 20 69 53 44 50 61 72 6d 3b 20 20 20 20 20 20 20   iSDParm;       
1cec0 20 20 2f 2a 20 41 20 70 61 72 61 6d 65 74 65 72    /* A parameter
1ced0 20 75 73 65 64 20 62 79 20 74 68 65 20 65 44 65   used by the eDe
1cee0 73 74 20 64 69 73 70 6f 73 61 6c 20 6d 65 74 68  st disposal meth
1cef0 6f 64 20 2a 2f 0a 20 20 69 6e 74 20 69 53 64 73  od */.  int iSds
1cf00 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  t;           /* 
1cf10 42 61 73 65 20 72 65 67 69 73 74 65 72 20 77 68  Base register wh
1cf20 65 72 65 20 72 65 73 75 6c 74 73 20 61 72 65 20  ere results are 
1cf30 77 72 69 74 74 65 6e 20 2a 2f 0a 20 20 69 6e 74  written */.  int
1cf40 20 6e 53 64 73 74 3b 20 20 20 20 20 20 20 20 20   nSdst;         
1cf50 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 72    /* Number of r
1cf60 65 67 69 73 74 65 72 73 20 61 6c 6c 6f 63 61 74  egisters allocat
1cf70 65 64 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74  ed */.  ExprList
1cf80 20 2a 70 4f 72 64 65 72 42 79 3b 20 20 2f 2a 20   *pOrderBy;  /* 
1cf90 4b 65 79 20 63 6f 6c 75 6d 6e 73 20 66 6f 72 20  Key columns for 
1cfa0 53 52 54 5f 51 75 65 75 65 20 61 6e 64 20 53 52  SRT_Queue and SR
1cfb0 54 5f 44 69 73 74 51 75 65 75 65 20 2a 2f 0a 7d  T_DistQueue */.}
1cfc0 3b 0a 0a 2f 2a 0a 2a 2a 20 44 75 72 69 6e 67 20  ;../*.** During 
1cfd0 63 6f 64 65 20 67 65 6e 65 72 61 74 69 6f 6e 20  code generation 
1cfe0 6f 66 20 73 74 61 74 65 6d 65 6e 74 73 20 74 68  of statements th
1cff0 61 74 20 64 6f 20 69 6e 73 65 72 74 73 20 69 6e  at do inserts in
1d000 74 6f 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54  to AUTOINCREMENT
1d010 0a 2a 2a 20 74 61 62 6c 65 73 2c 20 74 68 65 20  .** tables, the 
1d020 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e 66 6f 72 6d  following inform
1d030 61 74 69 6f 6e 20 69 73 20 61 74 74 61 63 68 65  ation is attache
1d040 64 20 74 6f 20 74 68 65 20 54 61 62 6c 65 2e 75  d to the Table.u
1d050 2e 61 75 74 6f 49 6e 63 2e 70 0a 2a 2a 20 70 6f  .autoInc.p.** po
1d060 69 6e 74 65 72 20 6f 66 20 65 61 63 68 20 61 75  inter of each au
1d070 74 6f 69 6e 63 72 65 6d 65 6e 74 20 74 61 62 6c  toincrement tabl
1d080 65 20 74 6f 20 72 65 63 6f 72 64 20 73 6f 6d 65  e to record some
1d090 20 73 69 64 65 20 69 6e 66 6f 72 6d 61 74 69 6f   side informatio
1d0a0 6e 20 74 68 61 74 0a 2a 2a 20 74 68 65 20 63 6f  n that.** the co
1d0b0 64 65 20 67 65 6e 65 72 61 74 6f 72 20 6e 65 65  de generator nee
1d0c0 64 73 2e 20 20 57 65 20 68 61 76 65 20 74 6f 20  ds.  We have to 
1d0d0 6b 65 65 70 20 70 65 72 2d 74 61 62 6c 65 20 61  keep per-table a
1d0e0 75 74 6f 69 6e 63 72 65 6d 65 6e 74 0a 2a 2a 20  utoincrement.** 
1d0f0 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 69 6e 20 63  information in c
1d100 61 73 65 20 69 6e 73 65 72 74 73 20 61 72 65 20  ase inserts are 
1d110 64 6f 6e 65 20 77 69 74 68 69 6e 20 74 72 69 67  done within trig
1d120 67 65 72 73 2e 20 20 54 72 69 67 67 65 72 73 20  gers.  Triggers 
1d130 64 6f 20 6e 6f 74 0a 2a 2a 20 6e 6f 72 6d 61 6c  do not.** normal
1d140 6c 79 20 63 6f 6f 72 64 69 6e 61 74 65 20 74 68  ly coordinate th
1d150 65 69 72 20 61 63 74 69 76 69 74 69 65 73 2c 20  eir activities, 
1d160 62 75 74 20 77 65 20 64 6f 20 6e 65 65 64 20 74  but we do need t
1d170 6f 20 63 6f 6f 72 64 69 6e 61 74 65 20 74 68 65  o coordinate the
1d180 0a 2a 2a 20 6c 6f 61 64 69 6e 67 20 61 6e 64 20  .** loading and 
1d190 73 61 76 69 6e 67 20 6f 66 20 61 75 74 6f 69 6e  saving of autoin
1d1a0 63 72 65 6d 65 6e 74 20 69 6e 66 6f 72 6d 61 74  crement informat
1d1b0 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 41  ion..*/.struct A
1d1c0 75 74 6f 69 6e 63 49 6e 66 6f 20 7b 0a 20 20 41  utoincInfo {.  A
1d1d0 75 74 6f 69 6e 63 49 6e 66 6f 20 2a 70 4e 65 78  utoincInfo *pNex
1d1e0 74 3b 20 20 20 2f 2a 20 4e 65 78 74 20 69 6e 66  t;   /* Next inf
1d1f0 6f 20 62 6c 6f 63 6b 20 69 6e 20 61 20 6c 69 73  o block in a lis
1d200 74 20 6f 66 20 74 68 65 6d 20 61 6c 6c 20 2a 2f  t of them all */
1d210 0a 20 20 54 61 62 6c 65 20 2a 70 54 61 62 3b 20  .  Table *pTab; 
1d220 20 20 20 20 20 20 20 20 20 2f 2a 20 54 61 62 6c           /* Tabl
1d230 65 20 74 68 69 73 20 69 6e 66 6f 20 62 6c 6f 63  e this info bloc
1d240 6b 20 72 65 66 65 72 73 20 74 6f 20 2a 2f 0a 20  k refers to */. 
1d250 20 69 6e 74 20 69 44 62 3b 20 20 20 20 20 20 20   int iDb;       
1d260 20 20 20 20 20 20 20 2f 2a 20 49 6e 64 65 78 20         /* Index 
1d270 69 6e 20 73 71 6c 69 74 65 33 2e 61 44 62 5b 5d  in sqlite3.aDb[]
1d280 20 6f 66 20 64 61 74 61 62 61 73 65 20 68 6f 6c   of database hol
1d290 64 69 6e 67 20 70 54 61 62 20 2a 2f 0a 20 20 69  ding pTab */.  i
1d2a0 6e 74 20 72 65 67 43 74 72 3b 20 20 20 20 20 20  nt regCtr;      
1d2b0 20 20 20 20 20 2f 2a 20 4d 65 6d 6f 72 79 20 72       /* Memory r
1d2c0 65 67 69 73 74 65 72 20 68 6f 6c 64 69 6e 67 20  egister holding 
1d2d0 74 68 65 20 72 6f 77 69 64 20 63 6f 75 6e 74 65  the rowid counte
1d2e0 72 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 53  r */.};../*.** S
1d2f0 69 7a 65 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d  ize of the colum
1d300 6e 20 63 61 63 68 65 0a 2a 2f 0a 23 69 66 6e 64  n cache.*/.#ifnd
1d310 65 66 20 53 51 4c 49 54 45 5f 4e 5f 43 4f 4c 43  ef SQLITE_N_COLC
1d320 41 43 48 45 0a 23 20 64 65 66 69 6e 65 20 53 51  ACHE.# define SQ
1d330 4c 49 54 45 5f 4e 5f 43 4f 4c 43 41 43 48 45 20  LITE_N_COLCACHE 
1d340 31 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  10.#endif../*.**
1d350 20 41 74 20 6c 65 61 73 74 20 6f 6e 65 20 69 6e   At least one in
1d360 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f  stance of the fo
1d370 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72  llowing structur
1d380 65 20 69 73 20 63 72 65 61 74 65 64 20 66 6f 72  e is created for
1d390 20 65 61 63 68 0a 2a 2a 20 74 72 69 67 67 65 72   each.** trigger
1d3a0 20 74 68 61 74 20 6d 61 79 20 62 65 20 66 69 72   that may be fir
1d3b0 65 64 20 77 68 69 6c 65 20 70 61 72 73 69 6e 67  ed while parsing
1d3c0 20 61 6e 20 49 4e 53 45 52 54 2c 20 55 50 44 41   an INSERT, UPDA
1d3d0 54 45 20 6f 72 20 44 45 4c 45 54 45 0a 2a 2a 20  TE or DELETE.** 
1d3e0 73 74 61 74 65 6d 65 6e 74 2e 20 41 6c 6c 20 73  statement. All s
1d3f0 75 63 68 20 6f 62 6a 65 63 74 73 20 61 72 65 20  uch objects are 
1d400 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20 6c 69  stored in the li
1d410 6e 6b 65 64 20 6c 69 73 74 20 68 65 61 64 65 64  nked list headed
1d420 20 61 74 0a 2a 2a 20 50 61 72 73 65 2e 70 54 72   at.** Parse.pTr
1d430 69 67 67 65 72 50 72 67 20 61 6e 64 20 64 65 6c  iggerPrg and del
1d440 65 74 65 64 20 6f 6e 63 65 20 73 74 61 74 65 6d  eted once statem
1d450 65 6e 74 20 63 6f 6d 70 69 6c 61 74 69 6f 6e 20  ent compilation 
1d460 68 61 73 20 62 65 65 6e 0a 2a 2a 20 63 6f 6d 70  has been.** comp
1d470 6c 65 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 41 20 56  leted..**.** A V
1d480 64 62 65 20 73 75 62 2d 70 72 6f 67 72 61 6d 20  dbe sub-program 
1d490 74 68 61 74 20 69 6d 70 6c 65 6d 65 6e 74 73 20  that implements 
1d4a0 74 68 65 20 62 6f 64 79 20 61 6e 64 20 57 48 45  the body and WHE
1d4b0 4e 20 63 6c 61 75 73 65 20 6f 66 20 74 72 69 67  N clause of trig
1d4c0 67 65 72 0a 2a 2a 20 54 72 69 67 67 65 72 50 72  ger.** TriggerPr
1d4d0 67 2e 70 54 72 69 67 67 65 72 2c 20 61 73 73 75  g.pTrigger, assu
1d4e0 6d 69 6e 67 20 61 20 64 65 66 61 75 6c 74 20 4f  ming a default O
1d4f0 4e 20 43 4f 4e 46 4c 49 43 54 20 63 6c 61 75 73  N CONFLICT claus
1d500 65 20 6f 66 0a 2a 2a 20 54 72 69 67 67 65 72 50  e of.** TriggerP
1d510 72 67 2e 6f 72 63 6f 6e 66 2c 20 69 73 20 73 74  rg.orconf, is st
1d520 6f 72 65 64 20 69 6e 20 74 68 65 20 54 72 69 67  ored in the Trig
1d530 67 65 72 50 72 67 2e 70 50 72 6f 67 72 61 6d 20  gerPrg.pProgram 
1d540 76 61 72 69 61 62 6c 65 2e 0a 2a 2a 20 54 68 65  variable..** The
1d550 20 50 61 72 73 65 2e 70 54 72 69 67 67 65 72 50   Parse.pTriggerP
1d560 72 67 20 6c 69 73 74 20 6e 65 76 65 72 20 63 6f  rg list never co
1d570 6e 74 61 69 6e 73 20 74 77 6f 20 65 6e 74 72 69  ntains two entri
1d580 65 73 20 77 69 74 68 20 74 68 65 20 73 61 6d 65  es with the same
1d590 0a 2a 2a 20 76 61 6c 75 65 73 20 66 6f 72 20 62  .** values for b
1d5a0 6f 74 68 20 70 54 72 69 67 67 65 72 20 61 6e 64  oth pTrigger and
1d5b0 20 6f 72 63 6f 6e 66 2e 0a 2a 2a 0a 2a 2a 20 54   orconf..**.** T
1d5c0 68 65 20 54 72 69 67 67 65 72 50 72 67 2e 61 43  he TriggerPrg.aC
1d5d0 6f 6c 6d 61 73 6b 5b 30 5d 20 76 61 72 69 61 62  olmask[0] variab
1d5e0 6c 65 20 69 73 20 73 65 74 20 74 6f 20 61 20 6d  le is set to a m
1d5f0 61 73 6b 20 6f 66 20 6f 6c 64 2e 2a 20 63 6f 6c  ask of old.* col
1d600 75 6d 6e 73 0a 2a 2a 20 61 63 63 65 73 73 65 64  umns.** accessed
1d610 20 28 6f 72 20 73 65 74 20 74 6f 20 30 20 66 6f   (or set to 0 fo
1d620 72 20 74 72 69 67 67 65 72 73 20 66 69 72 65 64  r triggers fired
1d630 20 61 73 20 61 20 72 65 73 75 6c 74 20 6f 66 20   as a result of 
1d640 49 4e 53 45 52 54 0a 2a 2a 20 73 74 61 74 65 6d  INSERT.** statem
1d650 65 6e 74 73 29 2e 20 53 69 6d 69 6c 61 72 6c 79  ents). Similarly
1d660 2c 20 74 68 65 20 54 72 69 67 67 65 72 50 72 67  , the TriggerPrg
1d670 2e 61 43 6f 6c 6d 61 73 6b 5b 31 5d 20 76 61 72  .aColmask[1] var
1d680 69 61 62 6c 65 20 69 73 20 73 65 74 20 74 6f 0a  iable is set to.
1d690 2a 2a 20 61 20 6d 61 73 6b 20 6f 66 20 6e 65 77  ** a mask of new
1d6a0 2e 2a 20 63 6f 6c 75 6d 6e 73 20 75 73 65 64 20  .* columns used 
1d6b0 62 79 20 74 68 65 20 70 72 6f 67 72 61 6d 2e 0a  by the program..
1d6c0 2a 2f 0a 73 74 72 75 63 74 20 54 72 69 67 67 65  */.struct Trigge
1d6d0 72 50 72 67 20 7b 0a 20 20 54 72 69 67 67 65 72  rPrg {.  Trigger
1d6e0 20 2a 70 54 72 69 67 67 65 72 3b 20 20 20 20 20   *pTrigger;     
1d6f0 20 2f 2a 20 54 72 69 67 67 65 72 20 74 68 69 73   /* Trigger this
1d700 20 70 72 6f 67 72 61 6d 20 77 61 73 20 63 6f 64   program was cod
1d710 65 64 20 66 72 6f 6d 20 2a 2f 0a 20 20 54 72 69  ed from */.  Tri
1d720 67 67 65 72 50 72 67 20 2a 70 4e 65 78 74 3b 20  ggerPrg *pNext; 
1d730 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 65 6e 74       /* Next ent
1d740 72 79 20 69 6e 20 50 61 72 73 65 2e 70 54 72 69  ry in Parse.pTri
1d750 67 67 65 72 50 72 67 20 6c 69 73 74 20 2a 2f 0a  ggerPrg list */.
1d760 20 20 53 75 62 50 72 6f 67 72 61 6d 20 2a 70 50    SubProgram *pP
1d770 72 6f 67 72 61 6d 3b 20 20 20 2f 2a 20 50 72 6f  rogram;   /* Pro
1d780 67 72 61 6d 20 69 6d 70 6c 65 6d 65 6e 74 69 6e  gram implementin
1d790 67 20 70 54 72 69 67 67 65 72 2f 6f 72 63 6f 6e  g pTrigger/orcon
1d7a0 66 20 2a 2f 0a 20 20 69 6e 74 20 6f 72 63 6f 6e  f */.  int orcon
1d7b0 66 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  f;             /
1d7c0 2a 20 44 65 66 61 75 6c 74 20 4f 4e 20 43 4f 4e  * Default ON CON
1d7d0 46 4c 49 43 54 20 70 6f 6c 69 63 79 20 2a 2f 0a  FLICT policy */.
1d7e0 20 20 75 33 32 20 61 43 6f 6c 6d 61 73 6b 5b 32    u32 aColmask[2
1d7f0 5d 3b 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 73  ];        /* Mas
1d800 6b 73 20 6f 66 20 6f 6c 64 2e 2a 2c 20 6e 65 77  ks of old.*, new
1d810 2e 2a 20 63 6f 6c 75 6d 6e 73 20 61 63 63 65 73  .* columns acces
1d820 73 65 64 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  sed */.};../*.**
1d830 20 54 68 65 20 79 44 62 4d 61 73 6b 20 64 61 74   The yDbMask dat
1d840 61 74 79 70 65 20 66 6f 72 20 74 68 65 20 62 69  atype for the bi
1d850 74 6d 61 73 6b 20 6f 66 20 61 6c 6c 20 61 74 74  tmask of all att
1d860 61 63 68 65 64 20 64 61 74 61 62 61 73 65 73 2e  ached databases.
1d870 0a 2a 2f 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d  .*/.#if SQLITE_M
1d880 41 58 5f 41 54 54 41 43 48 45 44 3e 33 30 0a 20  AX_ATTACHED>30. 
1d890 20 74 79 70 65 64 65 66 20 75 6e 73 69 67 6e 65   typedef unsigne
1d8a0 64 20 63 68 61 72 20 79 44 62 4d 61 73 6b 5b 28  d char yDbMask[(
1d8b0 53 51 4c 49 54 45 5f 4d 41 58 5f 41 54 54 41 43  SQLITE_MAX_ATTAC
1d8c0 48 45 44 2b 39 29 2f 38 5d 3b 0a 23 20 64 65 66  HED+9)/8];.# def
1d8d0 69 6e 65 20 44 62 4d 61 73 6b 54 65 73 74 28 4d  ine DbMaskTest(M
1d8e0 2c 49 29 20 20 20 20 28 28 28 4d 29 5b 28 49 29  ,I)    (((M)[(I)
1d8f0 2f 38 5d 26 28 31 3c 3c 28 28 49 29 26 37 29 29  /8]&(1<<((I)&7))
1d900 29 21 3d 30 29 0a 23 20 64 65 66 69 6e 65 20 44  )!=0).# define D
1d910 62 4d 61 73 6b 5a 65 72 6f 28 4d 29 20 20 20 20  bMaskZero(M)    
1d920 20 20 6d 65 6d 73 65 74 28 28 4d 29 2c 30 2c 73    memset((M),0,s
1d930 69 7a 65 6f 66 28 4d 29 29 0a 23 20 64 65 66 69  izeof(M)).# defi
1d940 6e 65 20 44 62 4d 61 73 6b 53 65 74 28 4d 2c 49  ne DbMaskSet(M,I
1d950 29 20 20 20 20 20 28 4d 29 5b 28 49 29 2f 38 5d  )     (M)[(I)/8]
1d960 7c 3d 28 31 3c 3c 28 28 49 29 26 37 29 29 0a 23  |=(1<<((I)&7)).#
1d970 20 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 41 6c   define DbMaskAl
1d980 6c 5a 65 72 6f 28 4d 29 20 20 20 73 71 6c 69 74  lZero(M)   sqlit
1d990 65 33 44 62 4d 61 73 6b 41 6c 6c 5a 65 72 6f 28  e3DbMaskAllZero(
1d9a0 4d 29 0a 23 20 64 65 66 69 6e 65 20 44 62 4d 61  M).# define DbMa
1d9b0 73 6b 4e 6f 6e 5a 65 72 6f 28 4d 29 20 20 20 28  skNonZero(M)   (
1d9c0 73 71 6c 69 74 65 33 44 62 4d 61 73 6b 41 6c 6c  sqlite3DbMaskAll
1d9d0 5a 65 72 6f 28 4d 29 3d 3d 30 29 0a 23 65 6c 73  Zero(M)==0).#els
1d9e0 65 0a 20 20 74 79 70 65 64 65 66 20 75 6e 73 69  e.  typedef unsi
1d9f0 67 6e 65 64 20 69 6e 74 20 79 44 62 4d 61 73 6b  gned int yDbMask
1da00 3b 0a 23 20 64 65 66 69 6e 65 20 44 62 4d 61 73  ;.# define DbMas
1da10 6b 54 65 73 74 28 4d 2c 49 29 20 20 20 20 28 28  kTest(M,I)    ((
1da20 28 4d 29 26 28 28 28 79 44 62 4d 61 73 6b 29 31  (M)&(((yDbMask)1
1da30 29 3c 3c 28 49 29 29 29 21 3d 30 29 0a 23 20 64  )<<(I)))!=0).# d
1da40 65 66 69 6e 65 20 44 62 4d 61 73 6b 5a 65 72 6f  efine DbMaskZero
1da50 28 4d 29 20 20 20 20 20 20 28 4d 29 3d 30 0a 23  (M)      (M)=0.#
1da60 20 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 53 65   define DbMaskSe
1da70 74 28 4d 2c 49 29 20 20 20 20 20 28 4d 29 7c 3d  t(M,I)     (M)|=
1da80 28 28 28 79 44 62 4d 61 73 6b 29 31 29 3c 3c 28  (((yDbMask)1)<<(
1da90 49 29 29 0a 23 20 64 65 66 69 6e 65 20 44 62 4d  I)).# define DbM
1daa0 61 73 6b 41 6c 6c 5a 65 72 6f 28 4d 29 20 20 20  askAllZero(M)   
1dab0 28 4d 29 3d 3d 30 0a 23 20 64 65 66 69 6e 65 20  (M)==0.# define 
1dac0 44 62 4d 61 73 6b 4e 6f 6e 5a 65 72 6f 28 4d 29  DbMaskNonZero(M)
1dad0 20 20 20 28 4d 29 21 3d 30 0a 23 65 6e 64 69 66     (M)!=0.#endif
1dae0 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 53 51 4c 20 70  ../*.** An SQL p
1daf0 61 72 73 65 72 20 63 6f 6e 74 65 78 74 2e 20 20  arser context.  
1db00 41 20 63 6f 70 79 20 6f 66 20 74 68 69 73 20 73  A copy of this s
1db10 74 72 75 63 74 75 72 65 20 69 73 20 70 61 73 73  tructure is pass
1db20 65 64 20 74 68 72 6f 75 67 68 0a 2a 2a 20 74 68  ed through.** th
1db30 65 20 70 61 72 73 65 72 20 61 6e 64 20 64 6f 77  e parser and dow
1db40 6e 20 69 6e 74 6f 20 61 6c 6c 20 74 68 65 20 70  n into all the p
1db50 61 72 73 65 72 20 61 63 74 69 6f 6e 20 72 6f 75  arser action rou
1db60 74 69 6e 65 20 69 6e 20 6f 72 64 65 72 20 74 6f  tine in order to
1db70 0a 2a 2a 20 63 61 72 72 79 20 61 72 6f 75 6e 64  .** carry around
1db80 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 74 68 61   information tha
1db90 74 20 69 73 20 67 6c 6f 62 61 6c 20 74 6f 20 74  t is global to t
1dba0 68 65 20 65 6e 74 69 72 65 20 70 61 72 73 65 2e  he entire parse.
1dbb0 0a 2a 2a 0a 2a 2a 20 54 68 65 20 73 74 72 75 63  .**.** The struc
1dbc0 74 75 72 65 20 69 73 20 64 69 76 69 64 65 64 20  ture is divided 
1dbd0 69 6e 74 6f 20 74 77 6f 20 70 61 72 74 73 2e 20  into two parts. 
1dbe0 20 57 68 65 6e 20 74 68 65 20 70 61 72 73 65 72   When the parser
1dbf0 20 61 6e 64 20 63 6f 64 65 0a 2a 2a 20 67 65 6e   and code.** gen
1dc00 65 72 61 74 65 20 63 61 6c 6c 20 74 68 65 6d 73  erate call thems
1dc10 65 6c 76 65 73 20 72 65 63 75 72 73 69 76 65 6c  elves recursivel
1dc20 79 2c 20 74 68 65 20 66 69 72 73 74 20 70 61 72  y, the first par
1dc30 74 20 6f 66 20 74 68 65 20 73 74 72 75 63 74 75  t of the structu
1dc40 72 65 0a 2a 2a 20 69 73 20 63 6f 6e 73 74 61 6e  re.** is constan
1dc50 74 20 62 75 74 20 74 68 65 20 73 65 63 6f 6e 64  t but the second
1dc60 20 70 61 72 74 20 69 73 20 72 65 73 65 74 20 61   part is reset a
1dc70 74 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 20  t the beginning 
1dc80 61 6e 64 20 65 6e 64 20 6f 66 0a 2a 2a 20 65 61  and end of.** ea
1dc90 63 68 20 72 65 63 75 72 73 69 6f 6e 2e 0a 2a 2a  ch recursion..**
1dca0 0a 2a 2a 20 54 68 65 20 6e 54 61 62 6c 65 4c 6f  .** The nTableLo
1dcb0 63 6b 20 61 6e 64 20 61 54 61 62 6c 65 4c 6f 63  ck and aTableLoc
1dcc0 6b 20 76 61 72 69 61 62 6c 65 73 20 61 72 65 20  k variables are 
1dcd0 6f 6e 6c 79 20 75 73 65 64 20 69 66 20 74 68 65  only used if the
1dce0 20 73 68 61 72 65 64 2d 63 61 63 68 65 0a 2a 2a   shared-cache.**
1dcf0 20 66 65 61 74 75 72 65 20 69 73 20 65 6e 61 62   feature is enab
1dd00 6c 65 64 20 28 69 66 20 73 71 6c 69 74 65 33 54  led (if sqlite3T
1dd10 73 64 28 29 2d 3e 75 73 65 53 68 61 72 65 64 44  sd()->useSharedD
1dd20 61 74 61 20 69 73 20 74 72 75 65 29 2e 20 54 68  ata is true). Th
1dd30 65 79 20 61 72 65 0a 2a 2a 20 75 73 65 64 20 74  ey are.** used t
1dd40 6f 20 73 74 6f 72 65 20 74 68 65 20 73 65 74 20  o store the set 
1dd50 6f 66 20 74 61 62 6c 65 2d 6c 6f 63 6b 73 20 72  of table-locks r
1dd60 65 71 75 69 72 65 64 20 62 79 20 74 68 65 20 73  equired by the s
1dd70 74 61 74 65 6d 65 6e 74 20 62 65 69 6e 67 0a 2a  tatement being.*
1dd80 2a 20 63 6f 6d 70 69 6c 65 64 2e 20 46 75 6e 63  * compiled. Func
1dd90 74 69 6f 6e 20 73 71 6c 69 74 65 33 54 61 62 6c  tion sqlite3Tabl
1dda0 65 4c 6f 63 6b 28 29 20 69 73 20 75 73 65 64 20  eLock() is used 
1ddb0 74 6f 20 61 64 64 20 65 6e 74 72 69 65 73 20 74  to add entries t
1ddc0 6f 20 74 68 65 0a 2a 2a 20 6c 69 73 74 2e 0a 2a  o the.** list..*
1ddd0 2f 0a 73 74 72 75 63 74 20 50 61 72 73 65 20 7b  /.struct Parse {
1dde0 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 20  .  sqlite3 *db; 
1ddf0 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6d          /* The m
1de00 61 69 6e 20 64 61 74 61 62 61 73 65 20 73 74 72  ain database str
1de10 75 63 74 75 72 65 20 2a 2f 0a 20 20 63 68 61 72  ucture */.  char
1de20 20 2a 7a 45 72 72 4d 73 67 3b 20 20 20 20 20 20   *zErrMsg;      
1de30 20 2f 2a 20 41 6e 20 65 72 72 6f 72 20 6d 65 73   /* An error mes
1de40 73 61 67 65 20 2a 2f 0a 20 20 56 64 62 65 20 2a  sage */.  Vdbe *
1de50 70 56 64 62 65 3b 20 20 20 20 20 20 20 20 20 2f  pVdbe;         /
1de60 2a 20 41 6e 20 65 6e 67 69 6e 65 20 66 6f 72 20  * An engine for 
1de70 65 78 65 63 75 74 69 6e 67 20 64 61 74 61 62 61  executing databa
1de80 73 65 20 62 79 74 65 63 6f 64 65 20 2a 2f 0a 20  se bytecode */. 
1de90 20 69 6e 74 20 72 63 3b 20 20 20 20 20 20 20 20   int rc;        
1dea0 20 20 20 20 20 20 2f 2a 20 52 65 74 75 72 6e 20        /* Return 
1deb0 63 6f 64 65 20 66 72 6f 6d 20 65 78 65 63 75 74  code from execut
1dec0 69 6f 6e 20 2a 2f 0a 20 20 75 38 20 63 6f 6c 4e  ion */.  u8 colN
1ded0 61 6d 65 73 53 65 74 3b 20 20 20 20 20 20 2f 2a  amesSet;      /*
1dee0 20 54 52 55 45 20 61 66 74 65 72 20 4f 50 5f 43   TRUE after OP_C
1def0 6f 6c 75 6d 6e 4e 61 6d 65 20 68 61 73 20 62 65  olumnName has be
1df00 65 6e 20 69 73 73 75 65 64 20 74 6f 20 70 56 64  en issued to pVd
1df10 62 65 20 2a 2f 0a 20 20 75 38 20 63 68 65 63 6b  be */.  u8 check
1df20 53 63 68 65 6d 61 3b 20 20 20 20 20 20 2f 2a 20  Schema;      /* 
1df30 43 61 75 73 65 73 20 73 63 68 65 6d 61 20 63 6f  Causes schema co
1df40 6f 6b 69 65 20 63 68 65 63 6b 20 61 66 74 65 72  okie check after
1df50 20 61 6e 20 65 72 72 6f 72 20 2a 2f 0a 20 20 75   an error */.  u
1df60 38 20 6e 65 73 74 65 64 3b 20 20 20 20 20 20 20  8 nested;       
1df70 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
1df80 20 6e 65 73 74 65 64 20 63 61 6c 6c 73 20 74 6f   nested calls to
1df90 20 74 68 65 20 70 61 72 73 65 72 2f 63 6f 64 65   the parser/code
1dfa0 20 67 65 6e 65 72 61 74 6f 72 20 2a 2f 0a 20 20   generator */.  
1dfb0 75 38 20 6e 54 65 6d 70 52 65 67 3b 20 20 20 20  u8 nTempReg;    
1dfc0 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
1dfd0 66 20 74 65 6d 70 6f 72 61 72 79 20 72 65 67 69  f temporary regi
1dfe0 73 74 65 72 73 20 69 6e 20 61 54 65 6d 70 52 65  sters in aTempRe
1dff0 67 5b 5d 20 2a 2f 0a 20 20 75 38 20 69 73 4d 75  g[] */.  u8 isMu
1e000 6c 74 69 57 72 69 74 65 3b 20 20 20 20 20 2f 2a  ltiWrite;     /*
1e010 20 54 72 75 65 20 69 66 20 73 74 61 74 65 6d 65   True if stateme
1e020 6e 74 20 6d 61 79 20 6d 6f 64 69 66 79 2f 69 6e  nt may modify/in
1e030 73 65 72 74 20 6d 75 6c 74 69 70 6c 65 20 72 6f  sert multiple ro
1e040 77 73 20 2a 2f 0a 20 20 75 38 20 6d 61 79 41 62  ws */.  u8 mayAb
1e050 6f 72 74 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  ort;         /* 
1e060 54 72 75 65 20 69 66 20 73 74 61 74 65 6d 65 6e  True if statemen
1e070 74 20 6d 61 79 20 74 68 72 6f 77 20 61 6e 20 41  t may throw an A
1e080 42 4f 52 54 20 65 78 63 65 70 74 69 6f 6e 20 2a  BORT exception *
1e090 2f 0a 20 20 75 38 20 68 61 73 43 6f 6d 70 6f 75  /.  u8 hasCompou
1e0a0 6e 64 3b 20 20 20 20 20 20 2f 2a 20 4e 65 65 64  nd;      /* Need
1e0b0 20 74 6f 20 69 6e 76 6f 6b 65 20 63 6f 6e 76 65   to invoke conve
1e0c0 72 74 43 6f 6d 70 6f 75 6e 64 53 65 6c 65 63 74  rtCompoundSelect
1e0d0 54 6f 53 75 62 71 75 65 72 79 28 29 20 2a 2f 0a  ToSubquery() */.
1e0e0 20 20 75 38 20 6f 6b 43 6f 6e 73 74 46 61 63 74    u8 okConstFact
1e0f0 6f 72 3b 20 20 20 20 2f 2a 20 4f 4b 20 74 6f 20  or;    /* OK to 
1e100 66 61 63 74 6f 72 20 6f 75 74 20 63 6f 6e 73 74  factor out const
1e110 61 6e 74 73 20 2a 2f 0a 20 20 75 38 20 64 69 73  ants */.  u8 dis
1e120 61 62 6c 65 4c 6f 6f 6b 61 73 69 64 65 3b 20 2f  ableLookaside; /
1e130 2a 20 4e 75 6d 62 65 72 20 6f 66 20 74 69 6d 65  * Number of time
1e140 73 20 6c 6f 6f 6b 61 73 69 64 65 20 68 61 73 20  s lookaside has 
1e150 62 65 65 6e 20 64 69 73 61 62 6c 65 64 20 2a 2f  been disabled */
1e160 0a 20 20 75 38 20 6e 43 6f 6c 43 61 63 68 65 3b  .  u8 nColCache;
1e170 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
1e180 72 20 6f 66 20 65 6e 74 72 69 65 73 20 69 6e 20  r of entries in 
1e190 61 43 6f 6c 43 61 63 68 65 5b 5d 20 2a 2f 0a 20  aColCache[] */. 
1e1a0 20 69 6e 74 20 61 54 65 6d 70 52 65 67 5b 38 5d   int aTempReg[8]
1e1b0 3b 20 20 20 20 20 2f 2a 20 48 6f 6c 64 69 6e 67  ;     /* Holding
1e1c0 20 61 72 65 61 20 66 6f 72 20 74 65 6d 70 6f 72   area for tempor
1e1d0 61 72 79 20 72 65 67 69 73 74 65 72 73 20 2a 2f  ary registers */
1e1e0 0a 20 20 69 6e 74 20 6e 52 61 6e 67 65 52 65 67  .  int nRangeReg
1e1f0 3b 20 20 20 20 20 20 20 2f 2a 20 53 69 7a 65 20  ;       /* Size 
1e200 6f 66 20 74 68 65 20 74 65 6d 70 6f 72 61 72 79  of the temporary
1e210 20 72 65 67 69 73 74 65 72 20 62 6c 6f 63 6b 20   register block 
1e220 2a 2f 0a 20 20 69 6e 74 20 69 52 61 6e 67 65 52  */.  int iRangeR
1e230 65 67 3b 20 20 20 20 20 20 20 2f 2a 20 46 69 72  eg;       /* Fir
1e240 73 74 20 72 65 67 69 73 74 65 72 20 69 6e 20 74  st register in t
1e250 65 6d 70 6f 72 61 72 79 20 72 65 67 69 73 74 65  emporary registe
1e260 72 20 62 6c 6f 63 6b 20 2a 2f 0a 20 20 69 6e 74  r block */.  int
1e270 20 6e 45 72 72 3b 20 20 20 20 20 20 20 20 20 20   nErr;          
1e280 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65    /* Number of e
1e290 72 72 6f 72 73 20 73 65 65 6e 20 2a 2f 0a 20 20  rrors seen */.  
1e2a0 69 6e 74 20 6e 54 61 62 3b 20 20 20 20 20 20 20  int nTab;       
1e2b0 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
1e2c0 66 20 70 72 65 76 69 6f 75 73 6c 79 20 61 6c 6c  f previously all
1e2d0 6f 63 61 74 65 64 20 56 44 42 45 20 63 75 72 73  ocated VDBE curs
1e2e0 6f 72 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 4d 65  ors */.  int nMe
1e2f0 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  m;            /*
1e300 20 4e 75 6d 62 65 72 20 6f 66 20 6d 65 6d 6f 72   Number of memor
1e310 79 20 63 65 6c 6c 73 20 75 73 65 64 20 73 6f 20  y cells used so 
1e320 66 61 72 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 65  far */.  int nSe
1e330 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  t;            /*
1e340 20 4e 75 6d 62 65 72 20 6f 66 20 73 65 74 73 20   Number of sets 
1e350 75 73 65 64 20 73 6f 20 66 61 72 20 2a 2f 0a 20  used so far */. 
1e360 20 69 6e 74 20 6e 4f 6e 63 65 3b 20 20 20 20 20   int nOnce;     
1e370 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
1e380 6f 66 20 4f 50 5f 4f 6e 63 65 20 69 6e 73 74 72  of OP_Once instr
1e390 75 63 74 69 6f 6e 73 20 73 6f 20 66 61 72 20 2a  uctions so far *
1e3a0 2f 0a 20 20 69 6e 74 20 6e 4f 70 41 6c 6c 6f 63  /.  int nOpAlloc
1e3b0 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62  ;        /* Numb
1e3c0 65 72 20 6f 66 20 73 6c 6f 74 73 20 61 6c 6c 6f  er of slots allo
1e3d0 63 61 74 65 64 20 66 6f 72 20 56 64 62 65 2e 61  cated for Vdbe.a
1e3e0 4f 70 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 73 7a  Op[] */.  int sz
1e3f0 4f 70 41 6c 6c 6f 63 3b 20 20 20 20 20 20 20 2f  OpAlloc;       /
1e400 2a 20 42 79 74 65 73 20 6f 66 20 6d 65 6d 6f 72  * Bytes of memor
1e410 79 20 73 70 61 63 65 20 61 6c 6c 6f 63 61 74 65  y space allocate
1e420 64 20 66 6f 72 20 56 64 62 65 2e 61 4f 70 5b 5d  d for Vdbe.aOp[]
1e430 20 2a 2f 0a 20 20 69 6e 74 20 69 46 69 78 65 64   */.  int iFixed
1e440 4f 70 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 65  Op;        /* Ne
1e450 76 65 72 20 62 61 63 6b 20 6f 75 74 20 6f 70 63  ver back out opc
1e460 6f 64 65 73 20 69 46 69 78 65 64 4f 70 2d 31 20  odes iFixedOp-1 
1e470 6f 72 20 65 61 72 6c 69 65 72 20 2a 2f 0a 20 20  or earlier */.  
1e480 69 6e 74 20 63 6b 42 61 73 65 3b 20 20 20 20 20  int ckBase;     
1e490 20 20 20 20 20 2f 2a 20 42 61 73 65 20 72 65 67       /* Base reg
1e4a0 69 73 74 65 72 20 6f 66 20 64 61 74 61 20 64 75  ister of data du
1e4b0 72 69 6e 67 20 63 68 65 63 6b 20 63 6f 6e 73 74  ring check const
1e4c0 72 61 69 6e 74 73 20 2a 2f 0a 20 20 69 6e 74 20  raints */.  int 
1e4d0 69 53 65 6c 66 54 61 62 3b 20 20 20 20 20 20 20  iSelfTab;       
1e4e0 20 2f 2a 20 54 61 62 6c 65 20 6f 66 20 61 6e 20   /* Table of an 
1e4f0 69 6e 64 65 78 20 77 68 6f 73 65 20 65 78 70 72  index whose expr
1e500 73 20 61 72 65 20 62 65 69 6e 67 20 63 6f 64 65  s are being code
1e510 64 20 2a 2f 0a 20 20 69 6e 74 20 69 43 61 63 68  d */.  int iCach
1e520 65 4c 65 76 65 6c 3b 20 20 20 20 20 2f 2a 20 43  eLevel;     /* C
1e530 6f 6c 43 61 63 68 65 20 76 61 6c 69 64 20 77 68  olCache valid wh
1e540 65 6e 20 61 43 6f 6c 43 61 63 68 65 5b 5d 2e 69  en aColCache[].i
1e550 4c 65 76 65 6c 3c 3d 69 43 61 63 68 65 4c 65 76  Level<=iCacheLev
1e560 65 6c 20 2a 2f 0a 20 20 69 6e 74 20 69 43 61 63  el */.  int iCac
1e570 68 65 43 6e 74 3b 20 20 20 20 20 20 20 2f 2a 20  heCnt;       /* 
1e580 43 6f 75 6e 74 65 72 20 75 73 65 64 20 74 6f 20  Counter used to 
1e590 67 65 6e 65 72 61 74 65 20 61 43 6f 6c 43 61 63  generate aColCac
1e5a0 68 65 5b 5d 2e 6c 72 75 20 76 61 6c 75 65 73 20  he[].lru values 
1e5b0 2a 2f 0a 20 20 69 6e 74 20 6e 4c 61 62 65 6c 3b  */.  int nLabel;
1e5c0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
1e5d0 62 65 72 20 6f 66 20 6c 61 62 65 6c 73 20 75 73  ber of labels us
1e5e0 65 64 20 2a 2f 0a 20 20 69 6e 74 20 2a 61 4c 61  ed */.  int *aLa
1e5f0 62 65 6c 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  bel;         /* 
1e600 53 70 61 63 65 20 74 6f 20 68 6f 6c 64 20 74 68  Space to hold th
1e610 65 20 6c 61 62 65 6c 73 20 2a 2f 0a 20 20 73 74  e labels */.  st
1e620 72 75 63 74 20 79 43 6f 6c 43 61 63 68 65 20 7b  ruct yColCache {
1e630 0a 20 20 20 20 69 6e 74 20 69 54 61 62 6c 65 3b  .    int iTable;
1e640 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 61             /* Ta
1e650 62 6c 65 20 63 75 72 73 6f 72 20 6e 75 6d 62 65  ble cursor numbe
1e660 72 20 2a 2f 0a 20 20 20 20 69 31 36 20 69 43 6f  r */.    i16 iCo
1e670 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20 20 20 2f  lumn;          /
1e680 2a 20 54 61 62 6c 65 20 63 6f 6c 75 6d 6e 20 6e  * Table column n
1e690 75 6d 62 65 72 20 2a 2f 0a 20 20 20 20 75 38 20  umber */.    u8 
1e6a0 74 65 6d 70 52 65 67 3b 20 20 20 20 20 20 20 20  tempReg;        
1e6b0 20 20 20 2f 2a 20 69 52 65 67 20 69 73 20 61 20     /* iReg is a 
1e6c0 74 65 6d 70 20 72 65 67 69 73 74 65 72 20 74 68  temp register th
1e6d0 61 74 20 6e 65 65 64 73 20 74 6f 20 62 65 20 66  at needs to be f
1e6e0 72 65 65 64 20 2a 2f 0a 20 20 20 20 69 6e 74 20  reed */.    int 
1e6f0 69 4c 65 76 65 6c 3b 20 20 20 20 20 20 20 20 20  iLevel;         
1e700 20 20 2f 2a 20 4e 65 73 74 69 6e 67 20 6c 65 76    /* Nesting lev
1e710 65 6c 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 52  el */.    int iR
1e720 65 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  eg;             
1e730 2f 2a 20 52 65 67 20 77 69 74 68 20 76 61 6c 75  /* Reg with valu
1e740 65 20 6f 66 20 74 68 69 73 20 63 6f 6c 75 6d 6e  e of this column
1e750 2e 20 30 20 6d 65 61 6e 73 20 6e 6f 6e 65 2e 20  . 0 means none. 
1e760 2a 2f 0a 20 20 20 20 69 6e 74 20 6c 72 75 3b 20  */.    int lru; 
1e770 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1e780 4c 65 61 73 74 20 72 65 63 65 6e 74 6c 79 20 75  Least recently u
1e790 73 65 64 20 65 6e 74 72 79 20 68 61 73 20 74 68  sed entry has th
1e7a0 65 20 73 6d 61 6c 6c 65 73 74 20 76 61 6c 75 65  e smallest value
1e7b0 20 2a 2f 0a 20 20 7d 20 61 43 6f 6c 43 61 63 68   */.  } aColCach
1e7c0 65 5b 53 51 4c 49 54 45 5f 4e 5f 43 4f 4c 43 41  e[SQLITE_N_COLCA
1e7d0 43 48 45 5d 3b 20 20 2f 2a 20 4f 6e 65 20 66 6f  CHE];  /* One fo
1e7e0 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 63 61  r each column ca
1e7f0 63 68 65 20 65 6e 74 72 79 20 2a 2f 0a 20 20 45  che entry */.  E
1e800 78 70 72 4c 69 73 74 20 2a 70 43 6f 6e 73 74 45  xprList *pConstE
1e810 78 70 72 3b 2f 2a 20 43 6f 6e 73 74 61 6e 74 20  xpr;/* Constant 
1e820 65 78 70 72 65 73 73 69 6f 6e 73 20 2a 2f 0a 20  expressions */. 
1e830 20 54 6f 6b 65 6e 20 63 6f 6e 73 74 72 61 69 6e   Token constrain
1e840 74 4e 61 6d 65 3b 2f 2a 20 4e 61 6d 65 20 6f 66  tName;/* Name of
1e850 20 74 68 65 20 63 6f 6e 73 74 72 61 69 6e 74 20   the constraint 
1e860 63 75 72 72 65 6e 74 6c 79 20 62 65 69 6e 67 20  currently being 
1e870 70 61 72 73 65 64 20 2a 2f 0a 20 20 79 44 62 4d  parsed */.  yDbM
1e880 61 73 6b 20 77 72 69 74 65 4d 61 73 6b 3b 20 20  ask writeMask;  
1e890 20 2f 2a 20 53 74 61 72 74 20 61 20 77 72 69 74   /* Start a writ
1e8a0 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6f 6e  e transaction on
1e8b0 20 74 68 65 73 65 20 64 61 74 61 62 61 73 65 73   these databases
1e8c0 20 2a 2f 0a 20 20 79 44 62 4d 61 73 6b 20 63 6f   */.  yDbMask co
1e8d0 6f 6b 69 65 4d 61 73 6b 3b 20 20 2f 2a 20 42 69  okieMask;  /* Bi
1e8e0 74 6d 61 73 6b 20 6f 66 20 73 63 68 65 6d 61 20  tmask of schema 
1e8f0 76 65 72 69 66 69 65 64 20 64 61 74 61 62 61 73  verified databas
1e900 65 73 20 2a 2f 0a 20 20 69 6e 74 20 63 6f 6f 6b  es */.  int cook
1e910 69 65 56 61 6c 75 65 5b 53 51 4c 49 54 45 5f 4d  ieValue[SQLITE_M
1e920 41 58 5f 41 54 54 41 43 48 45 44 2b 32 5d 3b 20  AX_ATTACHED+2]; 
1e930 20 2f 2a 20 56 61 6c 75 65 73 20 6f 66 20 63 6f   /* Values of co
1e940 6f 6b 69 65 73 20 74 6f 20 76 65 72 69 66 79 20  okies to verify 
1e950 2a 2f 0a 20 20 69 6e 74 20 72 65 67 52 6f 77 69  */.  int regRowi
1e960 64 3b 20 20 20 20 20 20 20 20 2f 2a 20 52 65 67  d;        /* Reg
1e970 69 73 74 65 72 20 68 6f 6c 64 69 6e 67 20 72 6f  ister holding ro
1e980 77 69 64 20 6f 66 20 43 52 45 41 54 45 20 54 41  wid of CREATE TA
1e990 42 4c 45 20 65 6e 74 72 79 20 2a 2f 0a 20 20 69  BLE entry */.  i
1e9a0 6e 74 20 72 65 67 52 6f 6f 74 3b 20 20 20 20 20  nt regRoot;     
1e9b0 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20      /* Register 
1e9c0 68 6f 6c 64 69 6e 67 20 72 6f 6f 74 20 70 61 67  holding root pag
1e9d0 65 20 6e 75 6d 62 65 72 20 66 6f 72 20 6e 65 77  e number for new
1e9e0 20 6f 62 6a 65 63 74 73 20 2a 2f 0a 20 20 69 6e   objects */.  in
1e9f0 74 20 6e 4d 61 78 41 72 67 3b 20 20 20 20 20 20  t nMaxArg;      
1ea00 20 20 20 2f 2a 20 4d 61 78 20 61 72 67 73 20 70     /* Max args p
1ea10 61 73 73 65 64 20 74 6f 20 75 73 65 72 20 66 75  assed to user fu
1ea20 6e 63 74 69 6f 6e 20 62 79 20 73 75 62 2d 70 72  nction by sub-pr
1ea30 6f 67 72 61 6d 20 2a 2f 0a 23 69 66 20 53 45 4c  ogram */.#if SEL
1ea40 45 43 54 54 52 41 43 45 5f 45 4e 41 42 4c 45 44  ECTTRACE_ENABLED
1ea50 0a 20 20 69 6e 74 20 6e 53 65 6c 65 63 74 3b 20  .  int nSelect; 
1ea60 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
1ea70 72 20 6f 66 20 53 45 4c 45 43 54 20 73 74 61 74  r of SELECT stat
1ea80 65 6d 65 6e 74 73 20 73 65 65 6e 20 2a 2f 0a 20  ements seen */. 
1ea90 20 69 6e 74 20 6e 53 65 6c 65 63 74 49 6e 64 65   int nSelectInde
1eaa0 6e 74 3b 20 20 20 2f 2a 20 48 6f 77 20 66 61 72  nt;   /* How far
1eab0 20 74 6f 20 69 6e 64 65 6e 74 20 53 45 4c 45 43   to indent SELEC
1eac0 54 54 52 41 43 45 28 29 20 6f 75 74 70 75 74 20  TTRACE() output 
1ead0 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65  */.#endif.#ifnde
1eae0 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 48  f SQLITE_OMIT_SH
1eaf0 41 52 45 44 5f 43 41 43 48 45 0a 20 20 69 6e 74  ARED_CACHE.  int
1eb00 20 6e 54 61 62 6c 65 4c 6f 63 6b 3b 20 20 20 20   nTableLock;    
1eb10 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
1eb20 20 6c 6f 63 6b 73 20 69 6e 20 61 54 61 62 6c 65   locks in aTable
1eb30 4c 6f 63 6b 20 2a 2f 0a 20 20 54 61 62 6c 65 4c  Lock */.  TableL
1eb40 6f 63 6b 20 2a 61 54 61 62 6c 65 4c 6f 63 6b 3b  ock *aTableLock;
1eb50 20 2f 2a 20 52 65 71 75 69 72 65 64 20 74 61 62   /* Required tab
1eb60 6c 65 20 6c 6f 63 6b 73 20 66 6f 72 20 73 68 61  le locks for sha
1eb70 72 65 64 2d 63 61 63 68 65 20 6d 6f 64 65 20 2a  red-cache mode *
1eb80 2f 0a 23 65 6e 64 69 66 0a 20 20 41 75 74 6f 69  /.#endif.  Autoi
1eb90 6e 63 49 6e 66 6f 20 2a 70 41 69 6e 63 3b 20 20  ncInfo *pAinc;  
1eba0 2f 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 61  /* Information a
1ebb0 62 6f 75 74 20 41 55 54 4f 49 4e 43 52 45 4d 45  bout AUTOINCREME
1ebc0 4e 54 20 63 6f 75 6e 74 65 72 73 20 2a 2f 0a 0a  NT counters */..
1ebd0 20 20 2f 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e    /* Information
1ebe0 20 75 73 65 64 20 77 68 69 6c 65 20 63 6f 64 69   used while codi
1ebf0 6e 67 20 74 72 69 67 67 65 72 20 70 72 6f 67 72  ng trigger progr
1ec00 61 6d 73 2e 20 2a 2f 0a 20 20 50 61 72 73 65 20  ams. */.  Parse 
1ec10 2a 70 54 6f 70 6c 65 76 65 6c 3b 20 20 20 20 2f  *pToplevel;    /
1ec20 2a 20 50 61 72 73 65 20 73 74 72 75 63 74 75 72  * Parse structur
1ec30 65 20 66 6f 72 20 6d 61 69 6e 20 70 72 6f 67 72  e for main progr
1ec40 61 6d 20 28 6f 72 20 4e 55 4c 4c 29 20 2a 2f 0a  am (or NULL) */.
1ec50 20 20 54 61 62 6c 65 20 2a 70 54 72 69 67 67 65    Table *pTrigge
1ec60 72 54 61 62 3b 20 20 2f 2a 20 54 61 62 6c 65 20  rTab;  /* Table 
1ec70 74 72 69 67 67 65 72 73 20 61 72 65 20 62 65 69  triggers are bei
1ec80 6e 67 20 63 6f 64 65 64 20 66 6f 72 20 2a 2f 0a  ng coded for */.
1ec90 20 20 69 6e 74 20 61 64 64 72 43 72 54 61 62 3b    int addrCrTab;
1eca0 20 20 20 20 20 20 20 2f 2a 20 41 64 64 72 65 73         /* Addres
1ecb0 73 20 6f 66 20 4f 50 5f 43 72 65 61 74 65 54 61  s of OP_CreateTa
1ecc0 62 6c 65 20 6f 70 63 6f 64 65 20 6f 6e 20 43 52  ble opcode on CR
1ecd0 45 41 54 45 20 54 41 42 4c 45 20 2a 2f 0a 20 20  EATE TABLE */.  
1ece0 75 33 32 20 6e 51 75 65 72 79 4c 6f 6f 70 3b 20  u32 nQueryLoop; 
1ecf0 20 20 20 20 20 2f 2a 20 45 73 74 20 6e 75 6d 62       /* Est numb
1ed00 65 72 20 6f 66 20 69 74 65 72 61 74 69 6f 6e 73  er of iterations
1ed10 20 6f 66 20 61 20 71 75 65 72 79 20 28 31 30 2a   of a query (10*
1ed20 6c 6f 67 32 28 4e 29 29 20 2a 2f 0a 20 20 75 33  log2(N)) */.  u3
1ed30 32 20 6f 6c 64 6d 61 73 6b 3b 20 20 20 20 20 20  2 oldmask;      
1ed40 20 20 20 2f 2a 20 4d 61 73 6b 20 6f 66 20 6f 6c     /* Mask of ol
1ed50 64 2e 2a 20 63 6f 6c 75 6d 6e 73 20 72 65 66 65  d.* columns refe
1ed60 72 65 6e 63 65 64 20 2a 2f 0a 20 20 75 33 32 20  renced */.  u32 
1ed70 6e 65 77 6d 61 73 6b 3b 20 20 20 20 20 20 20 20  newmask;        
1ed80 20 2f 2a 20 4d 61 73 6b 20 6f 66 20 6e 65 77 2e   /* Mask of new.
1ed90 2a 20 63 6f 6c 75 6d 6e 73 20 72 65 66 65 72 65  * columns refere
1eda0 6e 63 65 64 20 2a 2f 0a 20 20 75 38 20 65 54 72  nced */.  u8 eTr
1edb0 69 67 67 65 72 4f 70 3b 20 20 20 20 20 20 20 2f  iggerOp;       /
1edc0 2a 20 54 4b 5f 55 50 44 41 54 45 2c 20 54 4b 5f  * TK_UPDATE, TK_
1edd0 49 4e 53 45 52 54 20 6f 72 20 54 4b 5f 44 45 4c  INSERT or TK_DEL
1ede0 45 54 45 20 2a 2f 0a 20 20 75 38 20 65 4f 72 63  ETE */.  u8 eOrc
1edf0 6f 6e 66 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  onf;          /*
1ee00 20 44 65 66 61 75 6c 74 20 4f 4e 20 43 4f 4e 46   Default ON CONF
1ee10 4c 49 43 54 20 70 6f 6c 69 63 79 20 66 6f 72 20  LICT policy for 
1ee20 74 72 69 67 67 65 72 20 73 74 65 70 73 20 2a 2f  trigger steps */
1ee30 0a 20 20 75 38 20 64 69 73 61 62 6c 65 54 72 69  .  u8 disableTri
1ee40 67 67 65 72 73 3b 20 20 2f 2a 20 54 72 75 65 20  ggers;  /* True 
1ee50 74 6f 20 64 69 73 61 62 6c 65 20 74 72 69 67 67  to disable trigg
1ee60 65 72 73 20 2a 2f 0a 0a 20 20 2f 2a 2a 2a 2a 2a  ers */..  /*****
1ee70 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1ee80 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1ee90 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1eea0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1eeb0 2a 2a 2a 0a 20 20 2a 2a 20 41 62 6f 76 65 20 69  ***.  ** Above i
1eec0 73 20 63 6f 6e 73 74 61 6e 74 20 62 65 74 77 65  s constant betwe
1eed0 65 6e 20 72 65 63 75 72 73 69 6f 6e 73 2e 20 20  en recursions.  
1eee0 42 65 6c 6f 77 20 69 73 20 72 65 73 65 74 20 62  Below is reset b
1eef0 65 66 6f 72 65 20 61 6e 64 20 61 66 74 65 72 0a  efore and after.
1ef00 20 20 2a 2a 20 65 61 63 68 20 72 65 63 75 72 73    ** each recurs
1ef10 69 6f 6e 2e 20 20 54 68 65 20 62 6f 75 6e 64 61  ion.  The bounda
1ef20 72 79 20 62 65 74 77 65 65 6e 20 74 68 65 73 65  ry between these
1ef30 20 74 77 6f 20 72 65 67 69 6f 6e 73 20 69 73 20   two regions is 
1ef40 64 65 74 65 72 6d 69 6e 65 64 0a 20 20 2a 2a 20  determined.  ** 
1ef50 75 73 69 6e 67 20 6f 66 66 73 65 74 6f 66 28 50  using offsetof(P
1ef60 61 72 73 65 2c 6e 56 61 72 29 20 73 6f 20 74 68  arse,nVar) so th
1ef70 65 20 6e 56 61 72 20 66 69 65 6c 64 20 6d 75 73  e nVar field mus
1ef80 74 20 62 65 20 74 68 65 20 66 69 72 73 74 20 66  t be the first f
1ef90 69 65 6c 64 0a 20 20 2a 2a 20 69 6e 20 74 68 65  ield.  ** in the
1efa0 20 72 65 63 75 72 73 69 76 65 20 72 65 67 69 6f   recursive regio
1efb0 6e 2e 0a 20 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  n..  ***********
1efc0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1efd0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1efe0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1eff0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a  *************/..
1f000 20 20 79 6e 56 61 72 20 6e 56 61 72 3b 20 20 20    ynVar nVar;   
1f010 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
1f020 75 6d 62 65 72 20 6f 66 20 27 3f 27 20 76 61 72  umber of '?' var
1f030 69 61 62 6c 65 73 20 73 65 65 6e 20 69 6e 20 74  iables seen in t
1f040 68 65 20 53 51 4c 20 73 6f 20 66 61 72 20 2a 2f  he SQL so far */
1f050 0a 20 20 69 6e 74 20 6e 7a 56 61 72 3b 20 20 20  .  int nzVar;   
1f060 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1f070 4e 75 6d 62 65 72 20 6f 66 20 61 76 61 69 6c 61  Number of availa
1f080 62 6c 65 20 73 6c 6f 74 73 20 69 6e 20 61 7a 56  ble slots in azV
1f090 61 72 5b 5d 20 2a 2f 0a 20 20 75 38 20 69 50 6b  ar[] */.  u8 iPk
1f0a0 53 6f 72 74 4f 72 64 65 72 3b 20 20 20 20 20 20  SortOrder;      
1f0b0 20 20 20 20 2f 2a 20 41 53 43 20 6f 72 20 44 45      /* ASC or DE
1f0c0 53 43 20 66 6f 72 20 49 4e 54 45 47 45 52 20 50  SC for INTEGER P
1f0d0 52 49 4d 41 52 59 20 4b 45 59 20 2a 2f 0a 20 20  RIMARY KEY */.  
1f0e0 75 38 20 65 78 70 6c 61 69 6e 3b 20 20 20 20 20  u8 explain;     
1f0f0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75            /* Tru
1f100 65 20 69 66 20 74 68 65 20 45 58 50 4c 41 49 4e  e if the EXPLAIN
1f110 20 66 6c 61 67 20 69 73 20 66 6f 75 6e 64 20 6f   flag is found o
1f120 6e 20 74 68 65 20 71 75 65 72 79 20 2a 2f 0a 23  n the query */.#
1f130 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
1f140 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a  IT_VIRTUALTABLE.
1f150 20 20 75 38 20 64 65 63 6c 61 72 65 56 74 61 62    u8 declareVtab
1f160 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54  ;           /* T
1f170 72 75 65 20 69 66 20 69 6e 73 69 64 65 20 73 71  rue if inside sq
1f180 6c 69 74 65 33 5f 64 65 63 6c 61 72 65 5f 76 74  lite3_declare_vt
1f190 61 62 28 29 20 2a 2f 0a 20 20 69 6e 74 20 6e 56  ab() */.  int nV
1f1a0 74 61 62 4c 6f 63 6b 3b 20 20 20 20 20 20 20 20  tabLock;        
1f1b0 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
1f1c0 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 73 20   virtual tables 
1f1d0 74 6f 20 6c 6f 63 6b 20 2a 2f 0a 23 65 6e 64 69  to lock */.#endi
1f1e0 66 0a 20 20 69 6e 74 20 6e 41 6c 69 61 73 3b 20  f.  int nAlias; 
1f1f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1f200 20 4e 75 6d 62 65 72 20 6f 66 20 61 6c 69 61 73   Number of alias
1f210 65 64 20 72 65 73 75 6c 74 20 73 65 74 20 63 6f  ed result set co
1f220 6c 75 6d 6e 73 20 2a 2f 0a 20 20 69 6e 74 20 6e  lumns */.  int n
1f230 48 65 69 67 68 74 3b 20 20 20 20 20 20 20 20 20  Height;         
1f240 20 20 20 20 20 2f 2a 20 45 78 70 72 65 73 73 69       /* Expressi
1f250 6f 6e 20 74 72 65 65 20 68 65 69 67 68 74 20 6f  on tree height o
1f260 66 20 63 75 72 72 65 6e 74 20 73 75 62 2d 73 65  f current sub-se
1f270 6c 65 63 74 20 2a 2f 0a 23 69 66 6e 64 65 66 20  lect */.#ifndef 
1f280 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 45 58 50 4c  SQLITE_OMIT_EXPL
1f290 41 49 4e 0a 20 20 69 6e 74 20 69 53 65 6c 65 63  AIN.  int iSelec
1f2a0 74 49 64 3b 20 20 20 20 20 20 20 20 20 20 20 20  tId;            
1f2b0 2f 2a 20 49 44 20 6f 66 20 63 75 72 72 65 6e 74  /* ID of current
1f2c0 20 73 65 6c 65 63 74 20 66 6f 72 20 45 58 50 4c   select for EXPL
1f2d0 41 49 4e 20 6f 75 74 70 75 74 20 2a 2f 0a 20 20  AIN output */.  
1f2e0 69 6e 74 20 69 4e 65 78 74 53 65 6c 65 63 74 49  int iNextSelectI
1f2f0 64 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 78  d;        /* Nex
1f300 74 20 61 76 61 69 6c 61 62 6c 65 20 73 65 6c 65  t available sele
1f310 63 74 20 49 44 20 66 6f 72 20 45 58 50 4c 41 49  ct ID for EXPLAI
1f320 4e 20 6f 75 74 70 75 74 20 2a 2f 0a 23 65 6e 64  N output */.#end
1f330 69 66 0a 20 20 63 68 61 72 20 2a 2a 61 7a 56 61  if.  char **azVa
1f340 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  r;             /
1f350 2a 20 50 6f 69 6e 74 65 72 73 20 74 6f 20 6e 61  * Pointers to na
1f360 6d 65 73 20 6f 66 20 70 61 72 61 6d 65 74 65 72  mes of parameter
1f370 73 20 2a 2f 0a 20 20 56 64 62 65 20 2a 70 52 65  s */.  Vdbe *pRe
1f380 70 72 65 70 61 72 65 3b 20 20 20 20 20 20 20 20  prepare;        
1f390 20 2f 2a 20 56 4d 20 62 65 69 6e 67 20 72 65 70   /* VM being rep
1f3a0 72 65 70 61 72 65 64 20 28 73 71 6c 69 74 65 33  repared (sqlite3
1f3b0 52 65 70 72 65 70 61 72 65 28 29 29 20 2a 2f 0a  Reprepare()) */.
1f3c0 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 54    const char *zT
1f3d0 61 69 6c 3b 20 20 20 20 20 20 20 20 2f 2a 20 41  ail;        /* A
1f3e0 6c 6c 20 53 51 4c 20 74 65 78 74 20 70 61 73 74  ll SQL text past
1f3f0 20 74 68 65 20 6c 61 73 74 20 73 65 6d 69 63 6f   the last semico
1f400 6c 6f 6e 20 70 61 72 73 65 64 20 2a 2f 0a 20 20  lon parsed */.  
1f410 54 61 62 6c 65 20 2a 70 4e 65 77 54 61 62 6c 65  Table *pNewTable
1f420 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 41 20 74  ;         /* A t
1f430 61 62 6c 65 20 62 65 69 6e 67 20 63 6f 6e 73 74  able being const
1f440 72 75 63 74 65 64 20 62 79 20 43 52 45 41 54 45  ructed by CREATE
1f450 20 54 41 42 4c 45 20 2a 2f 0a 20 20 54 72 69 67   TABLE */.  Trig
1f460 67 65 72 20 2a 70 4e 65 77 54 72 69 67 67 65 72  ger *pNewTrigger
1f470 3b 20 20 20 20 20 2f 2a 20 54 72 69 67 67 65 72  ;     /* Trigger
1f480 20 75 6e 64 65 72 20 63 6f 6e 73 74 72 75 63 74   under construct
1f490 20 62 79 20 61 20 43 52 45 41 54 45 20 54 52 49   by a CREATE TRI
1f4a0 47 47 45 52 20 2a 2f 0a 20 20 63 6f 6e 73 74 20  GGER */.  const 
1f4b0 63 68 61 72 20 2a 7a 41 75 74 68 43 6f 6e 74 65  char *zAuthConte
1f4c0 78 74 3b 20 2f 2a 20 54 68 65 20 36 74 68 20 70  xt; /* The 6th p
1f4d0 61 72 61 6d 65 74 65 72 20 74 6f 20 64 62 2d 3e  arameter to db->
1f4e0 78 41 75 74 68 20 63 61 6c 6c 62 61 63 6b 73 20  xAuth callbacks 
1f4f0 2a 2f 0a 20 20 54 6f 6b 65 6e 20 73 4e 61 6d 65  */.  Token sName
1f500 54 6f 6b 65 6e 3b 20 20 20 20 20 20 20 20 20 2f  Token;         /
1f510 2a 20 54 6f 6b 65 6e 20 77 69 74 68 20 75 6e 71  * Token with unq
1f520 75 61 6c 69 66 69 65 64 20 73 63 68 65 6d 61 20  ualified schema 
1f530 6f 62 6a 65 63 74 20 6e 61 6d 65 20 2a 2f 0a 20  object name */. 
1f540 20 54 6f 6b 65 6e 20 73 4c 61 73 74 54 6f 6b 65   Token sLastToke
1f550 6e 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68  n;         /* Th
1f560 65 20 6c 61 73 74 20 74 6f 6b 65 6e 20 70 61 72  e last token par
1f570 73 65 64 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53  sed */.#ifndef S
1f580 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
1f590 41 4c 54 41 42 4c 45 0a 20 20 54 6f 6b 65 6e 20  ALTABLE.  Token 
1f5a0 73 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20  sArg;           
1f5b0 20 20 20 20 2f 2a 20 43 6f 6d 70 6c 65 74 65 20      /* Complete 
1f5c0 74 65 78 74 20 6f 66 20 61 20 6d 6f 64 75 6c 65  text of a module
1f5d0 20 61 72 67 75 6d 65 6e 74 20 2a 2f 0a 20 20 54   argument */.  T
1f5e0 61 62 6c 65 20 2a 2a 61 70 56 74 61 62 4c 6f 63  able **apVtabLoc
1f5f0 6b 3b 20 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e  k;       /* Poin
1f600 74 65 72 20 74 6f 20 76 69 72 74 75 61 6c 20 74  ter to virtual t
1f610 61 62 6c 65 73 20 6e 65 65 64 69 6e 67 20 6c 6f  ables needing lo
1f620 63 6b 69 6e 67 20 2a 2f 0a 23 65 6e 64 69 66 0a  cking */.#endif.
1f630 20 20 54 61 62 6c 65 20 2a 70 5a 6f 6d 62 69 65    Table *pZombie
1f640 54 61 62 3b 20 20 20 20 20 20 20 20 2f 2a 20 4c  Tab;        /* L
1f650 69 73 74 20 6f 66 20 54 61 62 6c 65 20 6f 62 6a  ist of Table obj
1f660 65 63 74 73 20 74 6f 20 64 65 6c 65 74 65 20 61  ects to delete a
1f670 66 74 65 72 20 63 6f 64 65 20 67 65 6e 20 2a 2f  fter code gen */
1f680 0a 20 20 54 72 69 67 67 65 72 50 72 67 20 2a 70  .  TriggerPrg *p
1f690 54 72 69 67 67 65 72 50 72 67 3b 20 20 2f 2a 20  TriggerPrg;  /* 
1f6a0 4c 69 6e 6b 65 64 20 6c 69 73 74 20 6f 66 20 63  Linked list of c
1f6b0 6f 64 65 64 20 74 72 69 67 67 65 72 73 20 2a 2f  oded triggers */
1f6c0 0a 20 20 57 69 74 68 20 2a 70 57 69 74 68 3b 20  .  With *pWith; 
1f6d0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1f6e0 43 75 72 72 65 6e 74 20 57 49 54 48 20 63 6c 61  Current WITH cla
1f6f0 75 73 65 2c 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a  use, or NULL */.
1f700 20 20 57 69 74 68 20 2a 70 57 69 74 68 54 6f 46    With *pWithToF
1f710 72 65 65 3b 20 20 20 20 20 20 20 20 2f 2a 20 46  ree;        /* F
1f720 72 65 65 20 74 68 69 73 20 57 49 54 48 20 6f 62  ree this WITH ob
1f730 6a 65 63 74 20 61 74 20 74 68 65 20 65 6e 64 20  ject at the end 
1f740 6f 66 20 74 68 65 20 70 61 72 73 65 20 2a 2f 0a  of the parse */.
1f750 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e  };../*.** Return
1f760 20 74 72 75 65 20 69 66 20 63 75 72 72 65 6e 74   true if current
1f770 6c 79 20 69 6e 73 69 64 65 20 61 6e 20 73 71 6c  ly inside an sql
1f780 69 74 65 33 5f 64 65 63 6c 61 72 65 5f 76 74 61  ite3_declare_vta
1f790 62 28 29 20 63 61 6c 6c 2e 0a 2a 2f 0a 23 69 66  b() call..*/.#if
1f7a0 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
1f7b0 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 20 20 23  VIRTUALTABLE.  #
1f7c0 64 65 66 69 6e 65 20 49 4e 5f 44 45 43 4c 41 52  define IN_DECLAR
1f7d0 45 5f 56 54 41 42 20 30 0a 23 65 6c 73 65 0a 20  E_VTAB 0.#else. 
1f7e0 20 23 64 65 66 69 6e 65 20 49 4e 5f 44 45 43 4c   #define IN_DECL
1f7f0 41 52 45 5f 56 54 41 42 20 28 70 50 61 72 73 65  ARE_VTAB (pParse
1f800 2d 3e 64 65 63 6c 61 72 65 56 74 61 62 29 0a 23  ->declareVtab).#
1f810 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20  endif../*.** An 
1f820 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20  instance of the 
1f830 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74  following struct
1f840 75 72 65 20 63 61 6e 20 62 65 20 64 65 63 6c 61  ure can be decla
1f850 72 65 64 20 6f 6e 20 61 20 73 74 61 63 6b 20 61  red on a stack a
1f860 6e 64 20 75 73 65 64 0a 2a 2a 20 74 6f 20 73 61  nd used.** to sa
1f870 76 65 20 74 68 65 20 50 61 72 73 65 2e 7a 41 75  ve the Parse.zAu
1f880 74 68 43 6f 6e 74 65 78 74 20 76 61 6c 75 65 20  thContext value 
1f890 73 6f 20 74 68 61 74 20 69 74 20 63 61 6e 20 62  so that it can b
1f8a0 65 20 72 65 73 74 6f 72 65 64 20 6c 61 74 65 72  e restored later
1f8b0 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 41 75 74 68  ..*/.struct Auth
1f8c0 43 6f 6e 74 65 78 74 20 7b 0a 20 20 63 6f 6e 73  Context {.  cons
1f8d0 74 20 63 68 61 72 20 2a 7a 41 75 74 68 43 6f 6e  t char *zAuthCon
1f8e0 74 65 78 74 3b 20 20 20 2f 2a 20 50 75 74 20 73  text;   /* Put s
1f8f0 61 76 65 64 20 50 61 72 73 65 2e 7a 41 75 74 68  aved Parse.zAuth
1f900 43 6f 6e 74 65 78 74 20 68 65 72 65 20 2a 2f 0a  Context here */.
1f910 20 20 50 61 72 73 65 20 2a 70 50 61 72 73 65 3b    Parse *pParse;
1f920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1f930 20 54 68 65 20 50 61 72 73 65 20 73 74 72 75 63   The Parse struc
1f940 74 75 72 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  ture */.};../*.*
1f950 2a 20 42 69 74 66 69 65 6c 64 20 66 6c 61 67 73  * Bitfield flags
1f960 20 66 6f 72 20 50 35 20 76 61 6c 75 65 20 69 6e   for P5 value in
1f970 20 76 61 72 69 6f 75 73 20 6f 70 63 6f 64 65 73   various opcodes
1f980 2e 0a 2a 2a 0a 2a 2a 20 56 61 6c 75 65 20 63 6f  ..**.** Value co
1f990 6e 73 74 72 61 69 6e 74 73 20 28 65 6e 66 6f 72  nstraints (enfor
1f9a0 63 65 64 20 76 69 61 20 61 73 73 65 72 74 28 29  ced via assert()
1f9b0 29 3a 0a 2a 2a 20 20 20 20 4f 50 46 4c 41 47 5f  ):.**    OPFLAG_
1f9c0 4c 45 4e 47 54 48 41 52 47 20 20 20 20 3d 3d 20  LENGTHARG    == 
1f9d0 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4c 45 4e 47  SQLITE_FUNC_LENG
1f9e0 54 48 0a 2a 2a 20 20 20 20 4f 50 46 4c 41 47 5f  TH.**    OPFLAG_
1f9f0 54 59 50 45 4f 46 41 52 47 20 20 20 20 3d 3d 20  TYPEOFARG    == 
1fa00 53 51 4c 49 54 45 5f 46 55 4e 43 5f 54 59 50 45  SQLITE_FUNC_TYPE
1fa10 4f 46 0a 2a 2a 20 20 20 20 4f 50 46 4c 41 47 5f  OF.**    OPFLAG_
1fa20 42 55 4c 4b 43 53 52 20 20 20 20 20 20 3d 3d 20  BULKCSR      == 
1fa30 42 54 52 45 45 5f 42 55 4c 4b 4c 4f 41 44 0a 2a  BTREE_BULKLOAD.*
1fa40 2a 20 20 20 20 4f 50 46 4c 41 47 5f 53 45 45 4b  *    OPFLAG_SEEK
1fa50 45 51 20 20 20 20 20 20 20 3d 3d 20 42 54 52 45  EQ       == BTRE
1fa60 45 5f 53 45 45 4b 5f 45 51 0a 2a 2a 20 20 20 20  E_SEEK_EQ.**    
1fa70 4f 50 46 4c 41 47 5f 46 4f 52 44 45 4c 45 54 45  OPFLAG_FORDELETE
1fa80 20 20 20 20 3d 3d 20 42 54 52 45 45 5f 46 4f 52      == BTREE_FOR
1fa90 44 45 4c 45 54 45 0a 2a 2a 20 20 20 20 4f 50 46  DELETE.**    OPF
1faa0 4c 41 47 5f 53 41 56 45 50 4f 53 49 54 49 4f 4e  LAG_SAVEPOSITION
1fab0 20 3d 3d 20 42 54 52 45 45 5f 53 41 56 45 50 4f   == BTREE_SAVEPO
1fac0 53 49 54 49 4f 4e 0a 2a 2a 20 20 20 20 4f 50 46  SITION.**    OPF
1fad0 4c 41 47 5f 41 55 58 44 45 4c 45 54 45 20 20 20  LAG_AUXDELETE   
1fae0 20 3d 3d 20 42 54 52 45 45 5f 41 55 58 44 45 4c   == BTREE_AUXDEL
1faf0 45 54 45 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  ETE.*/.#define O
1fb00 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20 20 20  PFLAG_NCHANGE   
1fb10 20 20 20 20 30 78 30 31 20 20 20 20 2f 2a 20 4f      0x01    /* O
1fb20 50 5f 49 6e 73 65 72 74 3a 20 53 65 74 20 74 6f  P_Insert: Set to
1fb30 20 75 70 64 61 74 65 20 64 62 2d 3e 6e 43 68 61   update db->nCha
1fb40 6e 67 65 20 2a 2f 0a 20 20 20 20 20 20 20 20 20  nge */.         
1fb50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fb60 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41              /* A
1fb70 6c 73 6f 20 75 73 65 64 20 69 6e 20 50 32 20 28  lso used in P2 (
1fb80 6e 6f 74 20 50 35 29 20 6f 66 20 4f 50 5f 44 65  not P5) of OP_De
1fb90 6c 65 74 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  lete */.#define 
1fba0 4f 50 46 4c 41 47 5f 45 50 48 45 4d 20 20 20 20  OPFLAG_EPHEM    
1fbb0 20 20 20 20 20 30 78 30 31 20 20 20 20 2f 2a 20       0x01    /* 
1fbc0 4f 50 5f 43 6f 6c 75 6d 6e 3a 20 45 70 68 65 6d  OP_Column: Ephem
1fbd0 65 72 61 6c 20 6f 75 74 70 75 74 20 69 73 20 6f  eral output is o
1fbe0 6b 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46  k */.#define OPF
1fbf0 4c 41 47 5f 4c 41 53 54 52 4f 57 49 44 20 20 20  LAG_LASTROWID   
1fc00 20 20 30 78 30 32 20 20 20 20 2f 2a 20 53 65 74    0x02    /* Set
1fc10 20 74 6f 20 75 70 64 61 74 65 20 64 62 2d 3e 6c   to update db->l
1fc20 61 73 74 52 6f 77 69 64 20 2a 2f 0a 23 64 65 66  astRowid */.#def
1fc30 69 6e 65 20 4f 50 46 4c 41 47 5f 49 53 55 50 44  ine OPFLAG_ISUPD
1fc40 41 54 45 20 20 20 20 20 20 30 78 30 34 20 20 20  ATE      0x04   
1fc50 20 2f 2a 20 54 68 69 73 20 4f 50 5f 49 6e 73 65   /* This OP_Inse
1fc60 72 74 20 69 73 20 61 6e 20 73 71 6c 20 55 50 44  rt is an sql UPD
1fc70 41 54 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  ATE */.#define O
1fc80 50 46 4c 41 47 5f 41 50 50 45 4e 44 20 20 20 20  PFLAG_APPEND    
1fc90 20 20 20 20 30 78 30 38 20 20 20 20 2f 2a 20 54      0x08    /* T
1fca0 68 69 73 20 69 73 20 6c 69 6b 65 6c 79 20 74 6f  his is likely to
1fcb0 20 62 65 20 61 6e 20 61 70 70 65 6e 64 20 2a 2f   be an append */
1fcc0 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f  .#define OPFLAG_
1fcd0 55 53 45 53 45 45 4b 52 45 53 55 4c 54 20 30 78  USESEEKRESULT 0x
1fce0 31 30 20 20 20 20 2f 2a 20 54 72 79 20 74 6f 20  10    /* Try to 
1fcf0 61 76 6f 69 64 20 61 20 73 65 65 6b 20 69 6e 20  avoid a seek in 
1fd00 42 74 72 65 65 49 6e 73 65 72 74 28 29 20 2a 2f  BtreeInsert() */
1fd10 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45  .#ifdef SQLITE_E
1fd20 4e 41 42 4c 45 5f 50 52 45 55 50 44 41 54 45 5f  NABLE_PREUPDATE_
1fd30 48 4f 4f 4b 0a 23 64 65 66 69 6e 65 20 4f 50 46  HOOK.#define OPF
1fd40 4c 41 47 5f 49 53 4e 4f 4f 50 20 20 20 20 20 20  LAG_ISNOOP      
1fd50 20 20 30 78 34 30 20 20 20 20 2f 2a 20 4f 50 5f    0x40    /* OP_
1fd60 44 65 6c 65 74 65 20 64 6f 65 73 20 70 72 65 2d  Delete does pre-
1fd70 75 70 64 61 74 65 2d 68 6f 6f 6b 20 6f 6e 6c 79  update-hook only
1fd80 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 64 65 66 69   */.#endif.#defi
1fd90 6e 65 20 4f 50 46 4c 41 47 5f 4c 45 4e 47 54 48  ne OPFLAG_LENGTH
1fda0 41 52 47 20 20 20 20 20 30 78 34 30 20 20 20 20  ARG     0x40    
1fdb0 2f 2a 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 6e 6c  /* OP_Column onl
1fdc0 79 20 75 73 65 64 20 66 6f 72 20 6c 65 6e 67 74  y used for lengt
1fdd0 68 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  h() */.#define O
1fde0 50 46 4c 41 47 5f 54 59 50 45 4f 46 41 52 47 20  PFLAG_TYPEOFARG 
1fdf0 20 20 20 20 30 78 38 30 20 20 20 20 2f 2a 20 4f      0x80    /* O
1fe00 50 5f 43 6f 6c 75 6d 6e 20 6f 6e 6c 79 20 75 73  P_Column only us
1fe10 65 64 20 66 6f 72 20 74 79 70 65 6f 66 28 29 20  ed for typeof() 
1fe20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41  */.#define OPFLA
1fe30 47 5f 42 55 4c 4b 43 53 52 20 20 20 20 20 20 20  G_BULKCSR       
1fe40 30 78 30 31 20 20 20 20 2f 2a 20 4f 50 5f 4f 70  0x01    /* OP_Op
1fe50 65 6e 2a 2a 20 75 73 65 64 20 74 6f 20 6f 70 65  en** used to ope
1fe60 6e 20 62 75 6c 6b 20 63 75 72 73 6f 72 20 2a 2f  n bulk cursor */
1fe70 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f  .#define OPFLAG_
1fe80 53 45 45 4b 45 51 20 20 20 20 20 20 20 20 30 78  SEEKEQ        0x
1fe90 30 32 20 20 20 20 2f 2a 20 4f 50 5f 4f 70 65 6e  02    /* OP_Open
1fea0 2a 2a 20 63 75 72 73 6f 72 20 75 73 65 73 20 45  ** cursor uses E
1feb0 51 20 73 65 65 6b 20 6f 6e 6c 79 20 2a 2f 0a 23  Q seek only */.#
1fec0 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 46 4f  define OPFLAG_FO
1fed0 52 44 45 4c 45 54 45 20 20 20 20 20 30 78 30 38  RDELETE     0x08
1fee0 20 20 20 20 2f 2a 20 4f 50 5f 4f 70 65 6e 20 73      /* OP_Open s
1fef0 68 6f 75 6c 64 20 75 73 65 20 42 54 52 45 45 5f  hould use BTREE_
1ff00 46 4f 52 44 45 4c 45 54 45 20 2a 2f 0a 23 64 65  FORDELETE */.#de
1ff10 66 69 6e 65 20 4f 50 46 4c 41 47 5f 50 32 49 53  fine OPFLAG_P2IS
1ff20 52 45 47 20 20 20 20 20 20 20 30 78 31 30 20 20  REG       0x10  
1ff30 20 20 2f 2a 20 50 32 20 74 6f 20 4f 50 5f 4f 70    /* P2 to OP_Op
1ff40 65 6e 2a 2a 20 69 73 20 61 20 72 65 67 69 73 74  en** is a regist
1ff50 65 72 20 6e 75 6d 62 65 72 20 2a 2f 0a 23 64 65  er number */.#de
1ff60 66 69 6e 65 20 4f 50 46 4c 41 47 5f 50 45 52 4d  fine OPFLAG_PERM
1ff70 55 54 45 20 20 20 20 20 20 20 30 78 30 31 20 20  UTE       0x01  
1ff80 20 20 2f 2a 20 4f 50 5f 43 6f 6d 70 61 72 65 3a    /* OP_Compare:
1ff90 20 75 73 65 20 74 68 65 20 70 65 72 6d 75 74 61   use the permuta
1ffa0 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  tion */.#define 
1ffb0 4f 50 46 4c 41 47 5f 53 41 56 45 50 4f 53 49 54  OPFLAG_SAVEPOSIT
1ffc0 49 4f 4e 20 20 30 78 30 32 20 20 20 20 2f 2a 20  ION  0x02    /* 
1ffd0 4f 50 5f 44 65 6c 65 74 65 3a 20 6b 65 65 70 20  OP_Delete: keep 
1ffe0 63 75 72 73 6f 72 20 70 6f 73 69 74 69 6f 6e 20  cursor position 
1fff0 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41  */.#define OPFLA
20000 47 5f 41 55 58 44 45 4c 45 54 45 20 20 20 20 20  G_AUXDELETE     
20010 30 78 30 34 20 20 20 20 2f 2a 20 4f 50 5f 44 65  0x04    /* OP_De
20020 6c 65 74 65 3a 20 69 6e 64 65 78 20 69 6e 20 61  lete: index in a
20030 20 44 45 4c 45 54 45 20 6f 70 20 2a 2f 0a 0a 2f   DELETE op */../
20040 2a 0a 20 2a 20 45 61 63 68 20 74 72 69 67 67 65  *. * Each trigge
20050 72 20 70 72 65 73 65 6e 74 20 69 6e 20 74 68 65  r present in the
20060 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61   database schema
20070 20 69 73 20 73 74 6f 72 65 64 20 61 73 20 61 6e   is stored as an
20080 20 69 6e 73 74 61 6e 63 65 20 6f 66 0a 20 2a 20   instance of. * 
20090 73 74 72 75 63 74 20 54 72 69 67 67 65 72 2e 0a  struct Trigger..
200a0 20 2a 0a 20 2a 20 50 6f 69 6e 74 65 72 73 20 74   *. * Pointers t
200b0 6f 20 69 6e 73 74 61 6e 63 65 73 20 6f 66 20 73  o instances of s
200c0 74 72 75 63 74 20 54 72 69 67 67 65 72 20 61 72  truct Trigger ar
200d0 65 20 73 74 6f 72 65 64 20 69 6e 20 74 77 6f 20  e stored in two 
200e0 77 61 79 73 2e 0a 20 2a 20 31 2e 20 49 6e 20 74  ways.. * 1. In t
200f0 68 65 20 22 74 72 69 67 48 61 73 68 22 20 68 61  he "trigHash" ha
20100 73 68 20 74 61 62 6c 65 20 28 70 61 72 74 20 6f  sh table (part o
20110 66 20 74 68 65 20 73 71 6c 69 74 65 33 2a 20 74  f the sqlite3* t
20120 68 61 74 20 72 65 70 72 65 73 65 6e 74 73 20 74  hat represents t
20130 68 65 0a 20 2a 20 20 20 20 64 61 74 61 62 61 73  he. *    databas
20140 65 29 2e 20 54 68 69 73 20 61 6c 6c 6f 77 73 20  e). This allows 
20150 54 72 69 67 67 65 72 20 73 74 72 75 63 74 75 72  Trigger structur
20160 65 73 20 74 6f 20 62 65 20 72 65 74 72 69 65 76  es to be retriev
20170 65 64 20 62 79 20 6e 61 6d 65 2e 0a 20 2a 20 32  ed by name.. * 2
20180 2e 20 41 6c 6c 20 74 72 69 67 67 65 72 73 20 61  . All triggers a
20190 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 61  ssociated with a
201a0 20 73 69 6e 67 6c 65 20 74 61 62 6c 65 20 66 6f   single table fo
201b0 72 6d 20 61 20 6c 69 6e 6b 65 64 20 6c 69 73 74  rm a linked list
201c0 2c 20 75 73 69 6e 67 20 74 68 65 0a 20 2a 20 20  , using the. *  
201d0 20 20 70 4e 65 78 74 20 6d 65 6d 62 65 72 20 6f    pNext member o
201e0 66 20 73 74 72 75 63 74 20 54 72 69 67 67 65 72  f struct Trigger
201f0 2e 20 41 20 70 6f 69 6e 74 65 72 20 74 6f 20 74  . A pointer to t
20200 68 65 20 66 69 72 73 74 20 65 6c 65 6d 65 6e 74  he first element
20210 20 6f 66 20 74 68 65 0a 20 2a 20 20 20 20 6c 69   of the. *    li
20220 6e 6b 65 64 20 6c 69 73 74 20 69 73 20 73 74 6f  nked list is sto
20230 72 65 64 20 61 73 20 74 68 65 20 22 70 54 72 69  red as the "pTri
20240 67 67 65 72 22 20 6d 65 6d 62 65 72 20 6f 66 20  gger" member of 
20250 74 68 65 20 61 73 73 6f 63 69 61 74 65 64 0a 20  the associated. 
20260 2a 20 20 20 20 73 74 72 75 63 74 20 54 61 62 6c  *    struct Tabl
20270 65 2e 0a 20 2a 0a 20 2a 20 54 68 65 20 22 73 74  e.. *. * The "st
20280 65 70 5f 6c 69 73 74 22 20 6d 65 6d 62 65 72 20  ep_list" member 
20290 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 66 69  points to the fi
202a0 72 73 74 20 65 6c 65 6d 65 6e 74 20 6f 66 20 61  rst element of a
202b0 20 6c 69 6e 6b 65 64 20 6c 69 73 74 0a 20 2a 20   linked list. * 
202c0 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 53  containing the S
202d0 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 73 70  QL statements sp
202e0 65 63 69 66 69 65 64 20 61 73 20 74 68 65 20 74  ecified as the t
202f0 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d 2e 0a  rigger program..
20300 20 2a 2f 0a 73 74 72 75 63 74 20 54 72 69 67 67   */.struct Trigg
20310 65 72 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61  er {.  char *zNa
20320 6d 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  me;            /
20330 2a 20 54 68 65 20 6e 61 6d 65 20 6f 66 20 74 68  * The name of th
20340 65 20 74 72 69 67 67 65 72 20 20 20 20 20 20 20  e trigger       
20350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20360 20 2a 2f 0a 20 20 63 68 61 72 20 2a 74 61 62 6c   */.  char *tabl
20370 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  e;            /*
20380 20 54 68 65 20 74 61 62 6c 65 20 6f 72 20 76 69   The table or vi
20390 65 77 20 74 6f 20 77 68 69 63 68 20 74 68 65 20  ew to which the 
203a0 74 72 69 67 67 65 72 20 61 70 70 6c 69 65 73 20  trigger applies 
203b0 2a 2f 0a 20 20 75 38 20 6f 70 3b 20 20 20 20 20  */.  u8 op;     
203c0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
203d0 4f 6e 65 20 6f 66 20 54 4b 5f 44 45 4c 45 54 45  One of TK_DELETE
203e0 2c 20 54 4b 5f 55 50 44 41 54 45 2c 20 54 4b 5f  , TK_UPDATE, TK_
203f0 49 4e 53 45 52 54 20 20 20 20 20 20 20 20 20 2a  INSERT         *
20400 2f 0a 20 20 75 38 20 74 72 5f 74 6d 3b 20 20 20  /.  u8 tr_tm;   
20410 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f              /* O
20420 6e 65 20 6f 66 20 54 52 49 47 47 45 52 5f 42 45  ne of TRIGGER_BE
20430 46 4f 52 45 2c 20 54 52 49 47 47 45 52 5f 41 46  FORE, TRIGGER_AF
20440 54 45 52 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70  TER */.  Expr *p
20450 57 68 65 6e 3b 20 20 20 20 20 20 20 20 20 20 20  When;           
20460 20 2f 2a 20 54 68 65 20 57 48 45 4e 20 63 6c 61   /* The WHEN cla
20470 75 73 65 20 6f 66 20 74 68 65 20 65 78 70 72 65  use of the expre
20480 73 73 69 6f 6e 20 28 6d 61 79 20 62 65 20 4e 55  ssion (may be NU
20490 4c 4c 29 20 2a 2f 0a 20 20 49 64 4c 69 73 74 20  LL) */.  IdList 
204a0 2a 70 43 6f 6c 75 6d 6e 73 3b 20 20 20 20 20 20  *pColumns;      
204b0 20 2f 2a 20 49 66 20 74 68 69 73 20 69 73 20 61   /* If this is a
204c0 6e 20 55 50 44 41 54 45 20 4f 46 20 3c 63 6f 6c  n UPDATE OF <col
204d0 75 6d 6e 2d 6c 69 73 74 3e 20 74 72 69 67 67 65  umn-list> trigge
204e0 72 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  r,.             
204f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20500 74 68 65 20 3c 63 6f 6c 75 6d 6e 2d 6c 69 73 74  the <column-list
20510 3e 20 69 73 20 73 74 6f 72 65 64 20 68 65 72 65  > is stored here
20520 20 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70 53   */.  Schema *pS
20530 63 68 65 6d 61 3b 20 20 20 20 20 20 20 20 2f 2a  chema;        /*
20540 20 53 63 68 65 6d 61 20 63 6f 6e 74 61 69 6e 69   Schema containi
20550 6e 67 20 74 68 65 20 74 72 69 67 67 65 72 20 2a  ng the trigger *
20560 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70 54 61 62  /.  Schema *pTab
20570 53 63 68 65 6d 61 3b 20 20 20 20 20 2f 2a 20 53  Schema;     /* S
20580 63 68 65 6d 61 20 63 6f 6e 74 61 69 6e 69 6e 67  chema containing
20590 20 74 68 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20   the table */.  
205a0 54 72 69 67 67 65 72 53 74 65 70 20 2a 73 74 65  TriggerStep *ste
205b0 70 5f 6c 69 73 74 3b 20 2f 2a 20 4c 69 6e 6b 20  p_list; /* Link 
205c0 6c 69 73 74 20 6f 66 20 74 72 69 67 67 65 72 20  list of trigger 
205d0 70 72 6f 67 72 61 6d 20 73 74 65 70 73 20 20 20  program steps   
205e0 20 20 20 20 20 20 20 20 20 20 2a 2f 0a 20 20 54            */.  T
205f0 72 69 67 67 65 72 20 2a 70 4e 65 78 74 3b 20 20  rigger *pNext;  
20600 20 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 74         /* Next t
20610 72 69 67 67 65 72 20 61 73 73 6f 63 69 61 74 65  rigger associate
20620 64 20 77 69 74 68 20 74 68 65 20 74 61 62 6c 65  d with the table
20630 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20   */.};../*.** A 
20640 74 72 69 67 67 65 72 20 69 73 20 65 69 74 68 65  trigger is eithe
20650 72 20 61 20 42 45 46 4f 52 45 20 6f 72 20 61 6e  r a BEFORE or an
20660 20 41 46 54 45 52 20 74 72 69 67 67 65 72 2e 20   AFTER trigger. 
20670 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 63   The following c
20680 6f 6e 73 74 61 6e 74 73 0a 2a 2a 20 64 65 74 65  onstants.** dete
20690 72 6d 69 6e 65 20 77 68 69 63 68 2e 0a 2a 2a 0a  rmine which..**.
206a0 2a 2a 20 49 66 20 74 68 65 72 65 20 61 72 65 20  ** If there are 
206b0 6d 75 6c 74 69 70 6c 65 20 74 72 69 67 67 65 72  multiple trigger
206c0 73 2c 20 79 6f 75 20 6d 69 67 68 74 20 6f 66 20  s, you might of 
206d0 73 6f 6d 65 20 42 45 46 4f 52 45 20 61 6e 64 20  some BEFORE and 
206e0 73 6f 6d 65 20 41 46 54 45 52 2e 0a 2a 2a 20 49  some AFTER..** I
206f0 6e 20 74 68 61 74 20 63 61 73 65 73 2c 20 74 68  n that cases, th
20700 65 20 63 6f 6e 73 74 61 6e 74 73 20 62 65 6c 6f  e constants belo
20710 77 20 63 61 6e 20 62 65 20 4f 52 65 64 20 74 6f  w can be ORed to
20720 67 65 74 68 65 72 2e 0a 2a 2f 0a 23 64 65 66 69  gether..*/.#defi
20730 6e 65 20 54 52 49 47 47 45 52 5f 42 45 46 4f 52  ne TRIGGER_BEFOR
20740 45 20 20 31 0a 23 64 65 66 69 6e 65 20 54 52 49  E  1.#define TRI
20750 47 47 45 52 5f 41 46 54 45 52 20 20 20 32 0a 0a  GGER_AFTER   2..
20760 2f 2a 0a 20 2a 20 41 6e 20 69 6e 73 74 61 6e 63  /*. * An instanc
20770 65 20 6f 66 20 73 74 72 75 63 74 20 54 72 69 67  e of struct Trig
20780 67 65 72 53 74 65 70 20 69 73 20 75 73 65 64 20  gerStep is used 
20790 74 6f 20 73 74 6f 72 65 20 61 20 73 69 6e 67 6c  to store a singl
207a0 65 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 0a  e SQL statement.
207b0 20 2a 20 74 68 61 74 20 69 73 20 61 20 70 61 72   * that is a par
207c0 74 20 6f 66 20 61 20 74 72 69 67 67 65 72 2d 70  t of a trigger-p
207d0 72 6f 67 72 61 6d 2e 0a 20 2a 0a 20 2a 20 49 6e  rogram.. *. * In
207e0 73 74 61 6e 63 65 73 20 6f 66 20 73 74 72 75 63  stances of struc
207f0 74 20 54 72 69 67 67 65 72 53 74 65 70 20 61 72  t TriggerStep ar
20800 65 20 73 74 6f 72 65 64 20 69 6e 20 61 20 73 69  e stored in a si
20810 6e 67 6c 79 20 6c 69 6e 6b 65 64 20 6c 69 73 74  ngly linked list
20820 20 28 6c 69 6e 6b 65 64 0a 20 2a 20 75 73 69 6e   (linked. * usin
20830 67 20 74 68 65 20 22 70 4e 65 78 74 22 20 6d 65  g the "pNext" me
20840 6d 62 65 72 29 20 72 65 66 65 72 65 6e 63 65 64  mber) referenced
20850 20 62 79 20 74 68 65 20 22 73 74 65 70 5f 6c 69   by the "step_li
20860 73 74 22 20 6d 65 6d 62 65 72 20 6f 66 20 74 68  st" member of th
20870 65 0a 20 2a 20 61 73 73 6f 63 69 61 74 65 64 20  e. * associated 
20880 73 74 72 75 63 74 20 54 72 69 67 67 65 72 20 69  struct Trigger i
20890 6e 73 74 61 6e 63 65 2e 20 54 68 65 20 66 69 72  nstance. The fir
208a0 73 74 20 65 6c 65 6d 65 6e 74 20 6f 66 20 74 68  st element of th
208b0 65 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 69 73  e linked list is
208c0 0a 20 2a 20 74 68 65 20 66 69 72 73 74 20 73 74  . * the first st
208d0 65 70 20 6f 66 20 74 68 65 20 74 72 69 67 67 65  ep of the trigge
208e0 72 2d 70 72 6f 67 72 61 6d 2e 0a 20 2a 0a 20 2a  r-program.. *. *
208f0 20 54 68 65 20 22 6f 70 22 20 6d 65 6d 62 65 72   The "op" member
20900 20 69 6e 64 69 63 61 74 65 73 20 77 68 65 74 68   indicates wheth
20910 65 72 20 74 68 69 73 20 69 73 20 61 20 22 44 45  er this is a "DE
20920 4c 45 54 45 22 2c 20 22 49 4e 53 45 52 54 22 2c  LETE", "INSERT",
20930 20 22 55 50 44 41 54 45 22 20 6f 72 0a 20 2a 20   "UPDATE" or. * 
20940 22 53 45 4c 45 43 54 22 20 73 74 61 74 65 6d 65  "SELECT" stateme
20950 6e 74 2e 20 54 68 65 20 6d 65 61 6e 69 6e 67 73  nt. The meanings
20960 20 6f 66 20 74 68 65 20 6f 74 68 65 72 20 6d 65   of the other me
20970 6d 62 65 72 73 20 69 73 20 64 65 74 65 72 6d 69  mbers is determi
20980 6e 65 64 20 62 79 20 74 68 65 0a 20 2a 20 76 61  ned by the. * va
20990 6c 75 65 20 6f 66 20 22 6f 70 22 20 61 73 20 66  lue of "op" as f
209a0 6f 6c 6c 6f 77 73 3a 0a 20 2a 0a 20 2a 20 28 6f  ollows:. *. * (o
209b0 70 20 3d 3d 20 54 4b 5f 49 4e 53 45 52 54 29 0a  p == TK_INSERT).
209c0 20 2a 20 6f 72 63 6f 6e 66 20 20 20 20 2d 3e 20   * orconf    -> 
209d0 73 74 6f 72 65 73 20 74 68 65 20 4f 4e 20 43 4f  stores the ON CO
209e0 4e 46 4c 49 43 54 20 61 6c 67 6f 72 69 74 68 6d  NFLICT algorithm
209f0 0a 20 2a 20 70 53 65 6c 65 63 74 20 20 20 2d 3e  . * pSelect   ->
20a00 20 49 66 20 74 68 69 73 20 69 73 20 61 6e 20 49   If this is an I
20a10 4e 53 45 52 54 20 49 4e 54 4f 20 2e 2e 2e 20 53  NSERT INTO ... S
20a20 45 4c 45 43 54 20 2e 2e 2e 20 73 74 61 74 65 6d  ELECT ... statem
20a30 65 6e 74 2c 20 74 68 65 6e 0a 20 2a 20 20 20 20  ent, then. *    
20a40 20 20 20 20 20 20 20 20 20 20 74 68 69 73 20 73            this s
20a50 74 6f 72 65 73 20 61 20 70 6f 69 6e 74 65 72 20  tores a pointer 
20a60 74 6f 20 74 68 65 20 53 45 4c 45 43 54 20 73 74  to the SELECT st
20a70 61 74 65 6d 65 6e 74 2e 20 4f 74 68 65 72 77 69  atement. Otherwi
20a80 73 65 20 4e 55 4c 4c 2e 0a 20 2a 20 7a 54 61 72  se NULL.. * zTar
20a90 67 65 74 20 20 20 2d 3e 20 44 65 71 75 6f 74 65  get   -> Dequote
20aa0 64 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 61  d name of the ta
20ab0 62 6c 65 20 74 6f 20 69 6e 73 65 72 74 20 69 6e  ble to insert in
20ac0 74 6f 2e 0a 20 2a 20 70 45 78 70 72 4c 69 73 74  to.. * pExprList
20ad0 20 2d 3e 20 49 66 20 74 68 69 73 20 69 73 20 61   -> If this is a
20ae0 6e 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 2e 2e  n INSERT INTO ..
20af0 2e 20 56 41 4c 55 45 53 20 2e 2e 2e 20 73 74 61  . VALUES ... sta
20b00 74 65 6d 65 6e 74 2c 20 74 68 65 6e 0a 20 2a 20  tement, then. * 
20b10 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69               thi
20b20 73 20 73 74 6f 72 65 73 20 76 61 6c 75 65 73 20  s stores values 
20b30 74 6f 20 62 65 20 69 6e 73 65 72 74 65 64 2e 20  to be inserted. 
20b40 4f 74 68 65 72 77 69 73 65 20 4e 55 4c 4c 2e 0a  Otherwise NULL..
20b50 20 2a 20 70 49 64 4c 69 73 74 20 20 20 2d 3e 20   * pIdList   -> 
20b60 49 66 20 74 68 69 73 20 69 73 20 61 6e 20 49 4e  If this is an IN
20b70 53 45 52 54 20 49 4e 54 4f 20 2e 2e 2e 20 28 3c  SERT INTO ... (<
20b80 63 6f 6c 75 6d 6e 2d 6e 61 6d 65 73 3e 29 20 56  column-names>) V
20b90 41 4c 55 45 53 20 2e 2e 2e 0a 20 2a 20 20 20 20  ALUES .... *    
20ba0 20 20 20 20 20 20 20 20 20 20 73 74 61 74 65 6d            statem
20bb0 65 6e 74 2c 20 74 68 65 6e 20 74 68 69 73 20 73  ent, then this s
20bc0 74 6f 72 65 73 20 74 68 65 20 63 6f 6c 75 6d 6e  tores the column
20bd0 2d 6e 61 6d 65 73 20 74 6f 20 62 65 0a 20 2a 20  -names to be. * 
20be0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 73               ins
20bf0 65 72 74 65 64 20 69 6e 74 6f 2e 0a 20 2a 0a 20  erted into.. *. 
20c00 2a 20 28 6f 70 20 3d 3d 20 54 4b 5f 44 45 4c 45  * (op == TK_DELE
20c10 54 45 29 0a 20 2a 20 7a 54 61 72 67 65 74 20 20  TE). * zTarget  
20c20 20 2d 3e 20 44 65 71 75 6f 74 65 64 20 6e 61 6d   -> Dequoted nam
20c30 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 74  e of the table t
20c40 6f 20 64 65 6c 65 74 65 20 66 72 6f 6d 2e 0a 20  o delete from.. 
20c50 2a 20 70 57 68 65 72 65 20 20 20 20 2d 3e 20 54  * pWhere    -> T
20c60 68 65 20 57 48 45 52 45 20 63 6c 61 75 73 65 20  he WHERE clause 
20c70 6f 66 20 74 68 65 20 44 45 4c 45 54 45 20 73 74  of the DELETE st
20c80 61 74 65 6d 65 6e 74 20 69 66 20 6f 6e 65 20 69  atement if one i
20c90 73 20 73 70 65 63 69 66 69 65 64 2e 0a 20 2a 20  s specified.. * 
20ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 4f 74 68               Oth
20cb0 65 72 77 69 73 65 20 4e 55 4c 4c 2e 0a 20 2a 0a  erwise NULL.. *.
20cc0 20 2a 20 28 6f 70 20 3d 3d 20 54 4b 5f 55 50 44   * (op == TK_UPD
20cd0 41 54 45 29 0a 20 2a 20 7a 54 61 72 67 65 74 20  ATE). * zTarget 
20ce0 20 20 2d 3e 20 44 65 71 75 6f 74 65 64 20 6e 61    -> Dequoted na
20cf0 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20  me of the table 
20d00 74 6f 20 75 70 64 61 74 65 2e 0a 20 2a 20 70 57  to update.. * pW
20d10 68 65 72 65 20 20 20 20 2d 3e 20 54 68 65 20 57  here    -> The W
20d20 48 45 52 45 20 63 6c 61 75 73 65 20 6f 66 20 74  HERE clause of t
20d30 68 65 20 55 50 44 41 54 45 20 73 74 61 74 65 6d  he UPDATE statem
20d40 65 6e 74 20 69 66 20 6f 6e 65 20 69 73 20 73 70  ent if one is sp
20d50 65 63 69 66 69 65 64 2e 0a 20 2a 20 20 20 20 20  ecified.. *     
20d60 20 20 20 20 20 20 20 20 20 4f 74 68 65 72 77 69           Otherwi
20d70 73 65 20 4e 55 4c 4c 2e 0a 20 2a 20 70 45 78 70  se NULL.. * pExp
20d80 72 4c 69 73 74 20 2d 3e 20 41 20 6c 69 73 74 20  rList -> A list 
20d90 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 73 20 74  of the columns t
20da0 6f 20 75 70 64 61 74 65 20 61 6e 64 20 74 68 65  o update and the
20db0 20 65 78 70 72 65 73 73 69 6f 6e 73 20 74 6f 20   expressions to 
20dc0 75 70 64 61 74 65 0a 20 2a 20 20 20 20 20 20 20  update. *       
20dd0 20 20 20 20 20 20 20 74 68 65 6d 20 74 6f 2e 20         them to. 
20de0 53 65 65 20 73 71 6c 69 74 65 33 55 70 64 61 74  See sqlite3Updat
20df0 65 28 29 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f  e() documentatio
20e00 6e 20 6f 66 20 22 70 43 68 61 6e 67 65 73 22 0a  n of "pChanges".
20e10 20 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20   *              
20e20 61 72 67 75 6d 65 6e 74 2e 0a 20 2a 0a 20 2a 2f  argument.. *. */
20e30 0a 73 74 72 75 63 74 20 54 72 69 67 67 65 72 53  .struct TriggerS
20e40 74 65 70 20 7b 0a 20 20 75 38 20 6f 70 3b 20 20  tep {.  u8 op;  
20e50 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
20e60 4f 6e 65 20 6f 66 20 54 4b 5f 44 45 4c 45 54 45  One of TK_DELETE
20e70 2c 20 54 4b 5f 55 50 44 41 54 45 2c 20 54 4b 5f  , TK_UPDATE, TK_
20e80 49 4e 53 45 52 54 2c 20 54 4b 5f 53 45 4c 45 43  INSERT, TK_SELEC
20e90 54 20 2a 2f 0a 20 20 75 38 20 6f 72 63 6f 6e 66  T */.  u8 orconf
20ea0 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f  ;           /* O
20eb0 45 5f 52 6f 6c 6c 62 61 63 6b 20 65 74 63 2e 20  E_Rollback etc. 
20ec0 2a 2f 0a 20 20 54 72 69 67 67 65 72 20 2a 70 54  */.  Trigger *pT
20ed0 72 69 67 3b 20 20 20 20 20 20 2f 2a 20 54 68 65  rig;      /* The
20ee0 20 74 72 69 67 67 65 72 20 74 68 61 74 20 74 68   trigger that th
20ef0 69 73 20 73 74 65 70 20 69 73 20 61 20 70 61 72  is step is a par
20f00 74 20 6f 66 20 2a 2f 0a 20 20 53 65 6c 65 63 74  t of */.  Select
20f10 20 2a 70 53 65 6c 65 63 74 3b 20 20 20 20 20 2f   *pSelect;     /
20f20 2a 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  * SELECT stateme
20f30 6e 74 20 6f 72 20 52 48 53 20 6f 66 20 49 4e 53  nt or RHS of INS
20f40 45 52 54 20 49 4e 54 4f 20 53 45 4c 45 43 54 20  ERT INTO SELECT 
20f50 2e 2e 2e 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a  ... */.  char *z
20f60 54 61 72 67 65 74 3b 20 20 20 20 20 20 20 2f 2a  Target;       /*
20f70 20 54 61 72 67 65 74 20 74 61 62 6c 65 20 66 6f   Target table fo
20f80 72 20 44 45 4c 45 54 45 2c 20 55 50 44 41 54 45  r DELETE, UPDATE
20f90 2c 20 49 4e 53 45 52 54 20 2a 2f 0a 20 20 45 78  , INSERT */.  Ex
20fa0 70 72 20 2a 70 57 68 65 72 65 3b 20 20 20 20 20  pr *pWhere;     
20fb0 20 20 20 2f 2a 20 54 68 65 20 57 48 45 52 45 20     /* The WHERE 
20fc0 63 6c 61 75 73 65 20 66 6f 72 20 44 45 4c 45 54  clause for DELET
20fd0 45 20 6f 72 20 55 50 44 41 54 45 20 73 74 65 70  E or UPDATE step
20fe0 73 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20  s */.  ExprList 
20ff0 2a 70 45 78 70 72 4c 69 73 74 3b 20 2f 2a 20 53  *pExprList; /* S
21000 45 54 20 63 6c 61 75 73 65 20 66 6f 72 20 55 50  ET clause for UP
21010 44 41 54 45 2e 20 2a 2f 0a 20 20 49 64 4c 69 73  DATE. */.  IdLis
21020 74 20 2a 70 49 64 4c 69 73 74 3b 20 20 20 20 20  t *pIdList;     
21030 2f 2a 20 43 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20  /* Column names 
21040 66 6f 72 20 49 4e 53 45 52 54 20 2a 2f 0a 20 20  for INSERT */.  
21050 54 72 69 67 67 65 72 53 74 65 70 20 2a 70 4e 65  TriggerStep *pNe
21060 78 74 3b 20 20 2f 2a 20 4e 65 78 74 20 69 6e 20  xt;  /* Next in 
21070 74 68 65 20 6c 69 6e 6b 2d 6c 69 73 74 20 2a 2f  the link-list */
21080 0a 20 20 54 72 69 67 67 65 72 53 74 65 70 20 2a  .  TriggerStep *
21090 70 4c 61 73 74 3b 20 20 2f 2a 20 4c 61 73 74 20  pLast;  /* Last 
210a0 65 6c 65 6d 65 6e 74 20 69 6e 20 6c 69 6e 6b 2d  element in link-
210b0 6c 69 73 74 2e 20 56 61 6c 69 64 20 66 6f 72 20  list. Valid for 
210c0 31 73 74 20 65 6c 65 6d 20 6f 6e 6c 79 20 2a 2f  1st elem only */
210d0 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66  .};../*.** The f
210e0 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75  ollowing structu
210f0 72 65 20 63 6f 6e 74 61 69 6e 73 20 69 6e 66 6f  re contains info
21100 72 6d 61 74 69 6f 6e 20 75 73 65 64 20 62 79 20  rmation used by 
21110 74 68 65 20 73 71 6c 69 74 65 46 69 78 2e 2e 2e  the sqliteFix...
21120 0a 2a 2a 20 72 6f 75 74 69 6e 65 73 20 61 73 20  .** routines as 
21130 74 68 65 79 20 77 61 6c 6b 20 74 68 65 20 70 61  they walk the pa
21140 72 73 65 20 74 72 65 65 20 74 6f 20 6d 61 6b 65  rse tree to make
21150 20 64 61 74 61 62 61 73 65 20 72 65 66 65 72 65   database refere
21160 6e 63 65 73 0a 2a 2a 20 65 78 70 6c 69 63 69 74  nces.** explicit
21170 2e 0a 2a 2f 0a 74 79 70 65 64 65 66 20 73 74 72  ..*/.typedef str
21180 75 63 74 20 44 62 46 69 78 65 72 20 44 62 46 69  uct DbFixer DbFi
21190 78 65 72 3b 0a 73 74 72 75 63 74 20 44 62 46 69  xer;.struct DbFi
211a0 78 65 72 20 7b 0a 20 20 50 61 72 73 65 20 2a 70  xer {.  Parse *p
211b0 50 61 72 73 65 3b 20 20 20 20 20 20 2f 2a 20 54  Parse;      /* T
211c0 68 65 20 70 61 72 73 69 6e 67 20 63 6f 6e 74 65  he parsing conte
211d0 78 74 2e 20 20 45 72 72 6f 72 20 6d 65 73 73 61  xt.  Error messa
211e0 67 65 73 20 77 72 69 74 74 65 6e 20 68 65 72 65  ges written here
211f0 20 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70 53   */.  Schema *pS
21200 63 68 65 6d 61 3b 20 20 20 20 2f 2a 20 46 69 78  chema;    /* Fix
21210 20 69 74 65 6d 73 20 74 6f 20 74 68 69 73 20 73   items to this s
21220 63 68 65 6d 61 20 2a 2f 0a 20 20 69 6e 74 20 62  chema */.  int b
21230 56 61 72 4f 6e 6c 79 3b 20 20 20 20 20 20 20 2f  VarOnly;       /
21240 2a 20 43 68 65 63 6b 20 66 6f 72 20 76 61 72 69  * Check for vari
21250 61 62 6c 65 20 72 65 66 65 72 65 6e 63 65 73 20  able references 
21260 6f 6e 6c 79 20 2a 2f 0a 20 20 63 6f 6e 73 74 20  only */.  const 
21270 63 68 61 72 20 2a 7a 44 62 3b 20 20 20 20 2f 2a  char *zDb;    /*
21280 20 4d 61 6b 65 20 73 75 72 65 20 61 6c 6c 20 6f   Make sure all o
21290 62 6a 65 63 74 73 20 61 72 65 20 63 6f 6e 74 61  bjects are conta
212a0 69 6e 65 64 20 69 6e 20 74 68 69 73 20 64 61 74  ined in this dat
212b0 61 62 61 73 65 20 2a 2f 0a 20 20 63 6f 6e 73 74  abase */.  const
212c0 20 63 68 61 72 20 2a 7a 54 79 70 65 3b 20 20 2f   char *zType;  /
212d0 2a 20 54 79 70 65 20 6f 66 20 74 68 65 20 63 6f  * Type of the co
212e0 6e 74 61 69 6e 65 72 20 2d 20 75 73 65 64 20 66  ntainer - used f
212f0 6f 72 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65  or error message
21300 73 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 54 6f 6b  s */.  const Tok
21310 65 6e 20 2a 70 4e 61 6d 65 3b 20 2f 2a 20 4e 61  en *pName; /* Na
21320 6d 65 20 6f 66 20 74 68 65 20 63 6f 6e 74 61 69  me of the contai
21330 6e 65 72 20 2d 20 75 73 65 64 20 66 6f 72 20 65  ner - used for e
21340 72 72 6f 72 20 6d 65 73 73 61 67 65 73 20 2a 2f  rror messages */
21350 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 6f 62  .};../*.** An ob
21360 6a 65 63 74 65 64 20 75 73 65 64 20 74 6f 20 61  jected used to a
21370 63 63 75 6d 75 6c 61 74 65 20 74 68 65 20 74 65  ccumulate the te
21380 78 74 20 6f 66 20 61 20 73 74 72 69 6e 67 20 77  xt of a string w
21390 68 65 72 65 20 77 65 0a 2a 2a 20 64 6f 20 6e 6f  here we.** do no
213a0 74 20 6e 65 63 65 73 73 61 72 69 6c 79 20 6b 6e  t necessarily kn
213b0 6f 77 20 68 6f 77 20 62 69 67 20 74 68 65 20 73  ow how big the s
213c0 74 72 69 6e 67 20 77 69 6c 6c 20 62 65 20 69 6e  tring will be in
213d0 20 74 68 65 20 65 6e 64 2e 0a 2a 2f 0a 73 74 72   the end..*/.str
213e0 75 63 74 20 53 74 72 41 63 63 75 6d 20 7b 0a 20  uct StrAccum {. 
213f0 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 20 20 20   sqlite3 *db;   
21400 20 20 20 20 20 20 2f 2a 20 4f 70 74 69 6f 6e 61        /* Optiona
21410 6c 20 64 61 74 61 62 61 73 65 20 66 6f 72 20 6c  l database for l
21420 6f 6f 6b 61 73 69 64 65 2e 20 20 43 61 6e 20 62  ookaside.  Can b
21430 65 20 4e 55 4c 4c 20 2a 2f 0a 20 20 63 68 61 72  e NULL */.  char
21440 20 2a 7a 42 61 73 65 3b 20 20 20 20 20 20 20 20   *zBase;        
21450 20 2f 2a 20 41 20 62 61 73 65 20 61 6c 6c 6f 63   /* A base alloc
21460 61 74 69 6f 6e 2e 20 20 4e 6f 74 20 66 72 6f 6d  ation.  Not from
21470 20 6d 61 6c 6c 6f 63 2e 20 2a 2f 0a 20 20 63 68   malloc. */.  ch
21480 61 72 20 2a 7a 54 65 78 74 3b 20 20 20 20 20 20  ar *zText;      
21490 20 20 20 2f 2a 20 54 68 65 20 73 74 72 69 6e 67     /* The string
214a0 20 63 6f 6c 6c 65 63 74 65 64 20 73 6f 20 66 61   collected so fa
214b0 72 20 2a 2f 0a 20 20 75 33 32 20 20 6e 43 68 61  r */.  u32  nCha
214c0 72 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c  r;          /* L
214d0 65 6e 67 74 68 20 6f 66 20 74 68 65 20 73 74 72  ength of the str
214e0 69 6e 67 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20  ing so far */.  
214f0 75 33 32 20 20 6e 41 6c 6c 6f 63 3b 20 20 20 20  u32  nAlloc;    
21500 20 20 20 20 20 2f 2a 20 41 6d 6f 75 6e 74 20 6f       /* Amount o
21510 66 20 73 70 61 63 65 20 61 6c 6c 6f 63 61 74 65  f space allocate
21520 64 20 69 6e 20 7a 54 65 78 74 20 2a 2f 0a 20 20  d in zText */.  
21530 75 33 32 20 20 6d 78 41 6c 6c 6f 63 3b 20 20 20  u32  mxAlloc;   
21540 20 20 20 20 20 2f 2a 20 4d 61 78 69 6d 75 6d 20       /* Maximum 
21550 61 6c 6c 6f 77 65 64 20 61 6c 6c 6f 63 61 74 69  allowed allocati
21560 6f 6e 2e 20 20 30 20 66 6f 72 20 6e 6f 20 6d 61  on.  0 for no ma
21570 6c 6c 6f 63 20 75 73 61 67 65 20 2a 2f 0a 20 20  lloc usage */.  
21580 75 38 20 20 20 61 63 63 45 72 72 6f 72 3b 20 20  u8   accError;  
21590 20 20 20 20 20 2f 2a 20 53 54 52 41 43 43 55 4d       /* STRACCUM
215a0 5f 4e 4f 4d 45 4d 20 6f 72 20 53 54 52 41 43 43  _NOMEM or STRACC
215b0 55 4d 5f 54 4f 4f 42 49 47 20 2a 2f 0a 20 20 75  UM_TOOBIG */.  u
215c0 38 20 20 20 70 72 69 6e 74 66 46 6c 61 67 73 3b  8   printfFlags;
215d0 20 20 20 20 2f 2a 20 53 51 4c 49 54 45 5f 50 52      /* SQLITE_PR
215e0 49 4e 54 46 20 66 6c 61 67 73 20 62 65 6c 6f 77  INTF flags below
215f0 20 2a 2f 0a 7d 3b 0a 23 64 65 66 69 6e 65 20 53   */.};.#define S
21600 54 52 41 43 43 55 4d 5f 4e 4f 4d 45 4d 20 20 20  TRACCUM_NOMEM   
21610 31 0a 23 64 65 66 69 6e 65 20 53 54 52 41 43 43  1.#define STRACC
21620 55 4d 5f 54 4f 4f 42 49 47 20 20 32 0a 23 64 65  UM_TOOBIG  2.#de
21630 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 52 49 4e  fine SQLITE_PRIN
21640 54 46 5f 49 4e 54 45 52 4e 41 4c 20 30 78 30 31  TF_INTERNAL 0x01
21650 20 20 2f 2a 20 49 6e 74 65 72 6e 61 6c 2d 75 73    /* Internal-us
21660 65 2d 6f 6e 6c 79 20 63 6f 6e 76 65 72 74 65 72  e-only converter
21670 73 20 61 6c 6c 6f 77 65 64 20 2a 2f 0a 23 64 65  s allowed */.#de
21680 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 52 49 4e  fine SQLITE_PRIN
21690 54 46 5f 53 51 4c 46 55 4e 43 20 20 30 78 30 32  TF_SQLFUNC  0x02
216a0 20 20 2f 2a 20 53 51 4c 20 66 75 6e 63 74 69 6f    /* SQL functio
216b0 6e 20 61 72 67 75 6d 65 6e 74 73 20 74 6f 20 56  n arguments to V
216c0 58 50 72 69 6e 74 66 20 2a 2f 0a 23 64 65 66 69  XPrintf */.#defi
216d0 6e 65 20 53 51 4c 49 54 45 5f 50 52 49 4e 54 46  ne SQLITE_PRINTF
216e0 5f 4d 41 4c 4c 4f 43 45 44 20 30 78 30 34 20 20  _MALLOCED 0x04  
216f0 2f 2a 20 54 72 75 65 20 69 66 20 78 54 65 78 74  /* True if xText
21700 20 69 73 20 61 6c 6c 6f 63 61 74 65 64 20 73 70   is allocated sp
21710 61 63 65 20 2a 2f 0a 0a 23 64 65 66 69 6e 65 20  ace */..#define 
21720 69 73 4d 61 6c 6c 6f 63 65 64 28 58 29 20 20 28  isMalloced(X)  (
21730 28 28 58 29 2d 3e 70 72 69 6e 74 66 46 6c 61 67  ((X)->printfFlag
21740 73 20 26 20 53 51 4c 49 54 45 5f 50 52 49 4e 54  s & SQLITE_PRINT
21750 46 5f 4d 41 4c 4c 4f 43 45 44 29 21 3d 30 29 0a  F_MALLOCED)!=0).
21760 0a 0a 2f 2a 0a 2a 2a 20 41 20 70 6f 69 6e 74 65  ../*.** A pointe
21770 72 20 74 6f 20 74 68 69 73 20 73 74 72 75 63 74  r to this struct
21780 75 72 65 20 69 73 20 75 73 65 64 20 74 6f 20 63  ure is used to c
21790 6f 6d 6d 75 6e 69 63 61 74 65 20 69 6e 66 6f 72  ommunicate infor
217a0 6d 61 74 69 6f 6e 0a 2a 2a 20 66 72 6f 6d 20 73  mation.** from s
217b0 71 6c 69 74 65 33 49 6e 69 74 20 61 6e 64 20 4f  qlite3Init and O
217c0 50 5f 50 61 72 73 65 53 63 68 65 6d 61 20 69 6e  P_ParseSchema in
217d0 74 6f 20 74 68 65 20 73 71 6c 69 74 65 33 49 6e  to the sqlite3In
217e0 69 74 43 61 6c 6c 62 61 63 6b 2e 0a 2a 2f 0a 74  itCallback..*/.t
217f0 79 70 65 64 65 66 20 73 74 72 75 63 74 20 7b 0a  ypedef struct {.
21800 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 20 20    sqlite3 *db;  
21810 20 20 20 20 20 20 2f 2a 20 54 68 65 20 64 61 74        /* The dat
21820 61 62 61 73 65 20 62 65 69 6e 67 20 69 6e 69 74  abase being init
21830 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 63 68 61  ialized */.  cha
21840 72 20 2a 2a 70 7a 45 72 72 4d 73 67 3b 20 20 20  r **pzErrMsg;   
21850 20 2f 2a 20 45 72 72 6f 72 20 6d 65 73 73 61 67   /* Error messag
21860 65 20 73 74 6f 72 65 64 20 68 65 72 65 20 2a 2f  e stored here */
21870 0a 20 20 69 6e 74 20 69 44 62 3b 20 20 20 20 20  .  int iDb;     
21880 20 20 20 20 20 20 20 2f 2a 20 30 20 66 6f 72 20         /* 0 for 
21890 6d 61 69 6e 20 64 61 74 61 62 61 73 65 2e 20 20  main database.  
218a0 31 20 66 6f 72 20 54 45 4d 50 2c 20 32 2e 2e 20  1 for TEMP, 2.. 
218b0 66 6f 72 20 41 54 54 41 43 48 65 64 20 2a 2f 0a  for ATTACHed */.
218c0 20 20 69 6e 74 20 72 63 3b 20 20 20 20 20 20 20    int rc;       
218d0 20 20 20 20 20 20 2f 2a 20 52 65 73 75 6c 74 20        /* Result 
218e0 63 6f 64 65 20 73 74 6f 72 65 64 20 68 65 72 65  code stored here
218f0 20 2a 2f 0a 7d 20 49 6e 69 74 44 61 74 61 3b 0a   */.} InitData;.
21900 0a 2f 2a 0a 2a 2a 20 53 74 72 75 63 74 75 72 65  ./*.** Structure
21910 20 63 6f 6e 74 61 69 6e 69 6e 67 20 67 6c 6f 62   containing glob
21920 61 6c 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  al configuration
21930 20 64 61 74 61 20 66 6f 72 20 74 68 65 20 53 51   data for the SQ
21940 4c 69 74 65 20 6c 69 62 72 61 72 79 2e 0a 2a 2a  Lite library..**
21950 0a 2a 2a 20 54 68 69 73 20 73 74 72 75 63 74 75  .** This structu
21960 72 65 20 61 6c 73 6f 20 63 6f 6e 74 61 69 6e 73  re also contains
21970 20 73 6f 6d 65 20 73 74 61 74 65 20 69 6e 66 6f   some state info
21980 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75  rmation..*/.stru
21990 63 74 20 53 71 6c 69 74 65 33 43 6f 6e 66 69 67  ct Sqlite3Config
219a0 20 7b 0a 20 20 69 6e 74 20 62 4d 65 6d 73 74 61   {.  int bMemsta
219b0 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t;              
219c0 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 74         /* True t
219d0 6f 20 65 6e 61 62 6c 65 20 6d 65 6d 6f 72 79 20  o enable memory 
219e0 73 74 61 74 75 73 20 2a 2f 0a 20 20 69 6e 74 20  status */.  int 
219f0 62 43 6f 72 65 4d 75 74 65 78 3b 20 20 20 20 20  bCoreMutex;     
21a00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
21a10 20 54 72 75 65 20 74 6f 20 65 6e 61 62 6c 65 20   True to enable 
21a20 63 6f 72 65 20 6d 75 74 65 78 69 6e 67 20 2a 2f  core mutexing */
21a30 0a 20 20 69 6e 74 20 62 46 75 6c 6c 4d 75 74 65  .  int bFullMute
21a40 78 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  x;              
21a50 20 20 20 20 20 2f 2a 20 54 72 75 65 20 74 6f 20       /* True to 
21a60 65 6e 61 62 6c 65 20 66 75 6c 6c 20 6d 75 74 65  enable full mute
21a70 78 69 6e 67 20 2a 2f 0a 20 20 69 6e 74 20 62 4f  xing */.  int bO
21a80 70 65 6e 55 72 69 3b 20 20 20 20 20 20 20 20 20  penUri;         
21a90 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
21aa0 72 75 65 20 74 6f 20 69 6e 74 65 72 70 72 65 74  rue to interpret
21ab0 20 66 69 6c 65 6e 61 6d 65 73 20 61 73 20 55 52   filenames as UR
21ac0 49 73 20 2a 2f 0a 20 20 69 6e 74 20 62 55 73 65  Is */.  int bUse
21ad0 43 69 73 3b 20 20 20 20 20 20 20 20 20 20 20 20  Cis;            
21ae0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 55 73 65            /* Use
21af0 20 63 6f 76 65 72 69 6e 67 20 69 6e 64 69 63 65   covering indice
21b00 73 20 66 6f 72 20 66 75 6c 6c 2d 73 63 61 6e 73  s for full-scans
21b10 20 2a 2f 0a 20 20 69 6e 74 20 6d 78 53 74 72 6c   */.  int mxStrl
21b20 65 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  en;             
21b30 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 78 69 6d          /* Maxim
21b40 75 6d 20 73 74 72 69 6e 67 20 6c 65 6e 67 74 68  um string length
21b50 20 2a 2f 0a 20 20 69 6e 74 20 6e 65 76 65 72 43   */.  int neverC
21b60 6f 72 72 75 70 74 3b 20 20 20 20 20 20 20 20 20  orrupt;         
21b70 20 20 20 20 20 20 20 20 2f 2a 20 44 61 74 61 62          /* Datab
21b80 61 73 65 20 69 73 20 61 6c 77 61 79 73 20 77 65  ase is always we
21b90 6c 6c 2d 66 6f 72 6d 65 64 20 2a 2f 0a 20 20 69  ll-formed */.  i
21ba0 6e 74 20 73 7a 4c 6f 6f 6b 61 73 69 64 65 3b 20  nt szLookaside; 
21bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21bc0 20 2f 2a 20 44 65 66 61 75 6c 74 20 6c 6f 6f 6b   /* Default look
21bd0 61 73 69 64 65 20 62 75 66 66 65 72 20 73 69 7a  aside buffer siz
21be0 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 4c 6f 6f 6b  e */.  int nLook
21bf0 61 73 69 64 65 3b 20 20 20 20 20 20 20 20 20 20  aside;          
21c00 20 20 20 20 20 20 20 20 20 2f 2a 20 44 65 66 61           /* Defa
21c10 75 6c 74 20 6c 6f 6f 6b 61 73 69 64 65 20 62 75  ult lookaside bu
21c20 66 66 65 72 20 63 6f 75 6e 74 20 2a 2f 0a 20 20  ffer count */.  
21c30 69 6e 74 20 6e 53 74 6d 74 53 70 69 6c 6c 3b 20  int nStmtSpill; 
21c40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21c50 20 20 2f 2a 20 53 74 6d 74 2d 6a 6f 75 72 6e 61    /* Stmt-journa
21c60 6c 20 73 70 69 6c 6c 2d 74 6f 2d 64 69 73 6b 20  l spill-to-disk 
21c70 74 68 72 65 73 68 6f 6c 64 20 2a 2f 0a 20 20 73  threshold */.  s
21c80 71 6c 69 74 65 33 5f 6d 65 6d 5f 6d 65 74 68 6f  qlite3_mem_metho
21c90 64 73 20 6d 3b 20 20 20 20 20 20 20 20 20 20 20  ds m;           
21ca0 20 2f 2a 20 4c 6f 77 2d 6c 65 76 65 6c 20 6d 65   /* Low-level me
21cb0 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20  mory allocation 
21cc0 69 6e 74 65 72 66 61 63 65 20 2a 2f 0a 20 20 73  interface */.  s
21cd0 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 6d 65 74  qlite3_mutex_met
21ce0 68 6f 64 73 20 6d 75 74 65 78 3b 20 20 20 20 20  hods mutex;     
21cf0 20 2f 2a 20 4c 6f 77 2d 6c 65 76 65 6c 20 6d 75   /* Low-level mu
21d00 74 65 78 20 69 6e 74 65 72 66 61 63 65 20 2a 2f  tex interface */
21d10 0a 20 20 73 71 6c 69 74 65 33 5f 70 63 61 63 68  .  sqlite3_pcach
21d20 65 5f 6d 65 74 68 6f 64 73 32 20 70 63 61 63 68  e_methods2 pcach
21d30 65 32 3b 20 20 2f 2a 20 4c 6f 77 2d 6c 65 76 65  e2;  /* Low-leve
21d40 6c 20 70 61 67 65 2d 63 61 63 68 65 20 69 6e 74  l page-cache int
21d50 65 72 66 61 63 65 20 2a 2f 0a 20 20 76 6f 69 64  erface */.  void
21d60 20 2a 70 48 65 61 70 3b 20 20 20 20 20 20 20 20   *pHeap;        
21d70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
21d80 20 48 65 61 70 20 73 74 6f 72 61 67 65 20 73 70   Heap storage sp
21d90 61 63 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 48 65  ace */.  int nHe
21da0 61 70 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ap;             
21db0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 69             /* Si
21dc0 7a 65 20 6f 66 20 70 48 65 61 70 5b 5d 20 2a 2f  ze of pHeap[] */
21dd0 0a 20 20 69 6e 74 20 6d 6e 52 65 71 2c 20 6d 78  .  int mnReq, mx
21de0 52 65 71 3b 20 20 20 20 20 20 20 20 20 20 20 20  Req;            
21df0 20 20 20 20 20 2f 2a 20 4d 69 6e 20 61 6e 64 20       /* Min and 
21e00 6d 61 78 20 68 65 61 70 20 72 65 71 75 65 73 74  max heap request
21e10 73 20 73 69 7a 65 73 20 2a 2f 0a 20 20 73 71 6c  s sizes */.  sql
21e20 69 74 65 33 5f 69 6e 74 36 34 20 73 7a 4d 6d 61  ite3_int64 szMma
21e30 70 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  p;             /
21e40 2a 20 6d 6d 61 70 28 29 20 73 70 61 63 65 20 70  * mmap() space p
21e50 65 72 20 6f 70 65 6e 20 66 69 6c 65 20 2a 2f 0a  er open file */.
21e60 20 20 73 71 6c 69 74 65 33 5f 69 6e 74 36 34 20    sqlite3_int64 
21e70 6d 78 4d 6d 61 70 3b 20 20 20 20 20 20 20 20 20  mxMmap;         
21e80 20 20 20 20 2f 2a 20 4d 61 78 69 6d 75 6d 20 76      /* Maximum v
21e90 61 6c 75 65 20 66 6f 72 20 73 7a 4d 6d 61 70 20  alue for szMmap 
21ea0 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 53 63 72 61  */.  void *pScra
21eb0 74 63 68 3b 20 20 20 20 20 20 20 20 20 20 20 20  tch;            
21ec0 20 20 20 20 20 20 20 2f 2a 20 53 63 72 61 74 63         /* Scratc
21ed0 68 20 6d 65 6d 6f 72 79 20 2a 2f 0a 20 20 69 6e  h memory */.  in
21ee0 74 20 73 7a 53 63 72 61 74 63 68 3b 20 20 20 20  t szScratch;    
21ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21f00 2f 2a 20 53 69 7a 65 20 6f 66 20 65 61 63 68 20  /* Size of each 
21f10 73 63 72 61 74 63 68 20 62 75 66 66 65 72 20 2a  scratch buffer *
21f20 2f 0a 20 20 69 6e 74 20 6e 53 63 72 61 74 63 68  /.  int nScratch
21f30 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
21f40 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
21f50 6f 66 20 73 63 72 61 74 63 68 20 62 75 66 66 65  of scratch buffe
21f60 72 73 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 50  rs */.  void *pP
21f70 61 67 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  age;            
21f80 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50 61 67            /* Pag
21f90 65 20 63 61 63 68 65 20 6d 65 6d 6f 72 79 20 2a  e cache memory *
21fa0 2f 0a 20 20 69 6e 74 20 73 7a 50 61 67 65 3b 20  /.  int szPage; 
21fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21fc0 20 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66        /* Size of
21fd0 20 65 61 63 68 20 70 61 67 65 20 69 6e 20 70 50   each page in pP
21fe0 61 67 65 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 6e  age[] */.  int n
21ff0 50 61 67 65 3b 20 20 20 20 20 20 20 20 20 20 20  Page;           
22000 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
22010 4e 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73 20  Number of pages 
22020 69 6e 20 70 50 61 67 65 5b 5d 20 2a 2f 0a 20 20  in pPage[] */.  
22030 69 6e 74 20 6d 78 50 61 72 73 65 72 53 74 61 63  int mxParserStac
22040 6b 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  k;              
22050 20 20 2f 2a 20 6d 61 78 69 6d 75 6d 20 64 65 70    /* maximum dep
22060 74 68 20 6f 66 20 74 68 65 20 70 61 72 73 65 72  th of the parser
22070 20 73 74 61 63 6b 20 2a 2f 0a 20 20 69 6e 74 20   stack */.  int 
22080 73 68 61 72 65 64 43 61 63 68 65 45 6e 61 62 6c  sharedCacheEnabl
22090 65 64 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ed;           /*
220a0 20 74 72 75 65 20 69 66 20 73 68 61 72 65 64 2d   true if shared-
220b0 63 61 63 68 65 20 6d 6f 64 65 20 65 6e 61 62 6c  cache mode enabl
220c0 65 64 20 2a 2f 0a 20 20 75 33 32 20 73 7a 50 6d  ed */.  u32 szPm
220d0 61 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  a;              
220e0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 78            /* Max
220f0 69 6d 75 6d 20 53 6f 72 74 65 72 20 50 4d 41 20  imum Sorter PMA 
22100 73 69 7a 65 20 2a 2f 0a 20 20 2f 2a 20 54 68 65  size */.  /* The
22110 20 61 62 6f 76 65 20 6d 69 67 68 74 20 62 65 20   above might be 
22120 69 6e 69 74 69 61 6c 69 7a 65 64 20 74 6f 20 6e  initialized to n
22130 6f 6e 2d 7a 65 72 6f 2e 20 20 54 68 65 20 66 6f  on-zero.  The fo
22140 6c 6c 6f 77 69 6e 67 20 6e 65 65 64 20 74 6f 20  llowing need to 
22150 61 6c 77 61 79 73 0a 20 20 2a 2a 20 69 6e 69 74  always.  ** init
22160 69 61 6c 6c 79 20 62 65 20 7a 65 72 6f 2c 20 68  ially be zero, h
22170 6f 77 65 76 65 72 2e 20 2a 2f 0a 20 20 69 6e 74  owever. */.  int
22180 20 69 73 49 6e 69 74 3b 20 20 20 20 20 20 20 20   isInit;        
22190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
221a0 2a 20 54 72 75 65 20 61 66 74 65 72 20 69 6e 69  * True after ini
221b0 74 69 61 6c 69 7a 61 74 69 6f 6e 20 68 61 73 20  tialization has 
221c0 66 69 6e 69 73 68 65 64 20 2a 2f 0a 20 20 69 6e  finished */.  in
221d0 74 20 69 6e 50 72 6f 67 72 65 73 73 3b 20 20 20  t inProgress;   
221e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
221f0 2f 2a 20 54 72 75 65 20 77 68 69 6c 65 20 69 6e  /* True while in
22200 69 74 69 61 6c 69 7a 61 74 69 6f 6e 20 69 6e 20  itialization in 
22210 70 72 6f 67 72 65 73 73 20 2a 2f 0a 20 20 69 6e  progress */.  in
22220 74 20 69 73 4d 75 74 65 78 49 6e 69 74 3b 20 20  t isMutexInit;  
22230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22240 2f 2a 20 54 72 75 65 20 61 66 74 65 72 20 6d 75  /* True after mu
22250 74 65 78 65 73 20 61 72 65 20 69 6e 69 74 69 61  texes are initia
22260 6c 69 7a 65 64 20 2a 2f 0a 20 20 69 6e 74 20 69  lized */.  int i
22270 73 4d 61 6c 6c 6f 63 49 6e 69 74 3b 20 20 20 20  sMallocInit;    
22280 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
22290 54 72 75 65 20 61 66 74 65 72 20 6d 61 6c 6c 6f  True after mallo
222a0 63 20 69 73 20 69 6e 69 74 69 61 6c 69 7a 65 64  c is initialized
222b0 20 2a 2f 0a 20 20 69 6e 74 20 69 73 50 43 61 63   */.  int isPCac
222c0 68 65 49 6e 69 74 3b 20 20 20 20 20 20 20 20 20  heInit;         
222d0 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20          /* True 
222e0 61 66 74 65 72 20 6d 61 6c 6c 6f 63 20 69 73 20  after malloc is 
222f0 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20  initialized */. 
22300 20 69 6e 74 20 6e 52 65 66 49 6e 69 74 4d 75 74   int nRefInitMut
22310 65 78 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ex;             
22320 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
22330 75 73 65 72 73 20 6f 66 20 70 49 6e 69 74 4d 75  users of pInitMu
22340 74 65 78 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33  tex */.  sqlite3
22350 5f 6d 75 74 65 78 20 2a 70 49 6e 69 74 4d 75 74  _mutex *pInitMut
22360 65 78 3b 20 20 20 20 20 20 20 20 2f 2a 20 4d 75  ex;        /* Mu
22370 74 65 78 20 75 73 65 64 20 62 79 20 73 71 6c 69  tex used by sqli
22380 74 65 33 5f 69 6e 69 74 69 61 6c 69 7a 65 28 29  te3_initialize()
22390 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 4c 6f   */.  void (*xLo
223a0 67 29 28 76 6f 69 64 2a 2c 69 6e 74 2c 63 6f 6e  g)(void*,int,con
223b0 73 74 20 63 68 61 72 2a 29 3b 20 2f 2a 20 46 75  st char*); /* Fu
223c0 6e 63 74 69 6f 6e 20 66 6f 72 20 6c 6f 67 67 69  nction for loggi
223d0 6e 67 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 4c  ng */.  void *pL
223e0 6f 67 41 72 67 3b 20 20 20 20 20 20 20 20 20 20  ogArg;          
223f0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
22400 46 69 72 73 74 20 61 72 67 75 6d 65 6e 74 20 74  First argument t
22410 6f 20 78 4c 6f 67 28 29 20 2a 2f 0a 23 69 66 64  o xLog() */.#ifd
22420 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ef SQLITE_ENABLE
22430 5f 53 51 4c 4c 4f 47 0a 20 20 76 6f 69 64 28 2a  _SQLLOG.  void(*
22440 78 53 71 6c 6c 6f 67 29 28 76 6f 69 64 2a 2c 73  xSqllog)(void*,s
22450 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68  qlite3*,const ch
22460 61 72 2a 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69  ar*, int);.  voi
22470 64 20 2a 70 53 71 6c 6c 6f 67 41 72 67 3b 0a 23  d *pSqllogArg;.#
22480 65 6e 64 69 66 0a 23 69 66 64 65 66 20 53 51 4c  endif.#ifdef SQL
22490 49 54 45 5f 56 44 42 45 5f 43 4f 56 45 52 41 47  ITE_VDBE_COVERAG
224a0 45 0a 20 20 2f 2a 20 54 68 65 20 66 6f 6c 6c 6f  E.  /* The follo
224b0 77 69 6e 67 20 63 61 6c 6c 62 61 63 6b 20 28 69  wing callback (i
224c0 66 20 6e 6f 74 20 4e 55 4c 4c 29 20 69 73 20 69  f not NULL) is i
224d0 6e 76 6f 6b 65 64 20 6f 6e 20 65 76 65 72 79 20  nvoked on every 
224e0 56 44 42 45 20 62 72 61 6e 63 68 0a 20 20 2a 2a  VDBE branch.  **
224f0 20 6f 70 65 72 61 74 69 6f 6e 2e 20 20 53 65 74   operation.  Set
22500 20 74 68 65 20 63 61 6c 6c 62 61 63 6b 20 75 73   the callback us
22510 69 6e 67 20 53 51 4c 49 54 45 5f 54 45 53 54 43  ing SQLITE_TESTC
22520 54 52 4c 5f 56 44 42 45 5f 43 4f 56 45 52 41 47  TRL_VDBE_COVERAG
22530 45 2e 0a 20 20 2a 2f 0a 20 20 76 6f 69 64 20 28  E..  */.  void (
22540 2a 78 56 64 62 65 42 72 61 6e 63 68 29 28 76 6f  *xVdbeBranch)(vo
22550 69 64 2a 2c 69 6e 74 20 69 53 72 63 4c 69 6e 65  id*,int iSrcLine
22560 2c 75 38 20 65 54 68 69 73 2c 75 38 20 65 4d 78  ,u8 eThis,u8 eMx
22570 29 3b 20 20 2f 2a 20 43 61 6c 6c 62 61 63 6b 20  );  /* Callback 
22580 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 56 64 62 65  */.  void *pVdbe
22590 42 72 61 6e 63 68 41 72 67 3b 20 20 20 20 20 20  BranchArg;      
225a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
225b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
225c0 2a 20 31 73 74 20 61 72 67 75 6d 65 6e 74 20 2a  * 1st argument *
225d0 2f 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66  /.#endif.#ifndef
225e0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 55 49   SQLITE_OMIT_BUI
225f0 4c 54 49 4e 5f 54 45 53 54 0a 20 20 69 6e 74 20  LTIN_TEST.  int 
22600 28 2a 78 54 65 73 74 43 61 6c 6c 62 61 63 6b 29  (*xTestCallback)
22610 28 69 6e 74 29 3b 20 20 20 20 20 20 20 20 2f 2a  (int);        /*
22620 20 49 6e 76 6f 6b 65 64 20 62 79 20 73 71 6c 69   Invoked by sqli
22630 74 65 33 46 61 75 6c 74 53 69 6d 28 29 20 2a 2f  te3FaultSim() */
22640 0a 23 65 6e 64 69 66 0a 20 20 69 6e 74 20 62 4c  .#endif.  int bL
22650 6f 63 61 6c 74 69 6d 65 46 61 75 6c 74 3b 20 20  ocaltimeFault;  
22660 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
22670 72 75 65 20 74 6f 20 66 61 69 6c 20 6c 6f 63 61  rue to fail loca
22680 6c 74 69 6d 65 28 29 20 63 61 6c 6c 73 20 2a 2f  ltime() calls */
22690 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20  .};../*.** This 
226a0 6d 61 63 72 6f 20 69 73 20 75 73 65 64 20 69 6e  macro is used in
226b0 73 69 64 65 20 6f 66 20 61 73 73 65 72 74 28 29  side of assert()
226c0 20 73 74 61 74 65 6d 65 6e 74 73 20 74 6f 20 69   statements to i
226d0 6e 64 69 63 61 74 65 20 74 68 61 74 0a 2a 2a 20  ndicate that.** 
226e0 74 68 65 20 61 73 73 65 72 74 20 69 73 20 6f 6e  the assert is on
226f0 6c 79 20 76 61 6c 69 64 20 6f 6e 20 61 20 77 65  ly valid on a we
22700 6c 6c 2d 66 6f 72 6d 65 64 20 64 61 74 61 62 61  ll-formed databa
22710 73 65 2e 20 20 49 6e 73 74 65 61 64 20 6f 66 3a  se.  Instead of:
22720 0a 2a 2a 0a 2a 2a 20 20 20 20 20 61 73 73 65 72  .**.**     asser
22730 74 28 20 58 20 29 3b 0a 2a 2a 0a 2a 2a 20 4f 6e  t( X );.**.** On
22740 65 20 77 72 69 74 65 73 3a 0a 2a 2a 0a 2a 2a 20  e writes:.**.** 
22750 20 20 20 20 61 73 73 65 72 74 28 20 58 20 7c 7c      assert( X ||
22760 20 43 4f 52 52 55 50 54 5f 44 42 20 29 3b 0a 2a   CORRUPT_DB );.*
22770 2a 0a 2a 2a 20 43 4f 52 52 55 50 54 5f 44 42 20  *.** CORRUPT_DB 
22780 69 73 20 74 72 75 65 20 64 75 72 69 6e 67 20 6e  is true during n
22790 6f 72 6d 61 6c 20 6f 70 65 72 61 74 69 6f 6e 2e  ormal operation.
227a0 20 20 43 4f 52 52 55 50 54 5f 44 42 20 64 6f 65    CORRUPT_DB doe
227b0 73 20 6e 6f 74 20 69 6e 64 69 63 61 74 65 0a 2a  s not indicate.*
227c0 2a 20 74 68 61 74 20 74 68 65 20 64 61 74 61 62  * that the datab
227d0 61 73 65 20 69 73 20 64 65 66 69 6e 69 74 65 6c  ase is definitel
227e0 79 20 63 6f 72 72 75 70 74 2c 20 6f 6e 6c 79 20  y corrupt, only 
227f0 74 68 61 74 20 69 74 20 6d 69 67 68 74 20 62 65  that it might be
22800 20 63 6f 72 72 75 70 74 2e 0a 2a 2a 20 46 6f 72   corrupt..** For
22810 20 6d 6f 73 74 20 74 65 73 74 20 63 61 73 65 73   most test cases
22820 2c 20 43 4f 52 52 55 50 54 5f 44 42 20 69 73 20  , CORRUPT_DB is 
22830 73 65 74 20 74 6f 20 66 61 6c 73 65 20 75 73 69  set to false usi
22840 6e 67 20 61 20 73 70 65 63 69 61 6c 0a 2a 2a 20  ng a special.** 
22850 73 71 6c 69 74 65 33 5f 74 65 73 74 5f 63 6f 6e  sqlite3_test_con
22860 74 72 6f 6c 28 29 2e 20 20 54 68 69 73 20 65 6e  trol().  This en
22870 61 62 6c 65 73 20 61 73 73 65 72 74 28 29 20 73  ables assert() s
22880 74 61 74 65 6d 65 6e 74 73 20 74 6f 20 70 72 6f  tatements to pro
22890 76 65 0a 2a 2a 20 74 68 69 6e 67 73 20 74 68 61  ve.** things tha
228a0 74 20 61 72 65 20 61 6c 77 61 79 73 20 74 72 75  t are always tru
228b0 65 20 66 6f 72 20 77 65 6c 6c 2d 66 6f 72 6d 65  e for well-forme
228c0 64 20 64 61 74 61 62 61 73 65 73 2e 0a 2a 2f 0a  d databases..*/.
228d0 23 64 65 66 69 6e 65 20 43 4f 52 52 55 50 54 5f  #define CORRUPT_
228e0 44 42 20 20 28 73 71 6c 69 74 65 33 43 6f 6e 66  DB  (sqlite3Conf
228f0 69 67 2e 6e 65 76 65 72 43 6f 72 72 75 70 74 3d  ig.neverCorrupt=
22900 3d 30 29 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6e 74 65  =0)../*.** Conte
22910 78 74 20 70 6f 69 6e 74 65 72 20 70 61 73 73 65  xt pointer passe
22920 64 20 64 6f 77 6e 20 74 68 72 6f 75 67 68 20 74  d down through t
22930 68 65 20 74 72 65 65 2d 77 61 6c 6b 2e 0a 2a 2f  he tree-walk..*/
22940 0a 73 74 72 75 63 74 20 57 61 6c 6b 65 72 20 7b  .struct Walker {
22950 0a 20 20 50 61 72 73 65 20 2a 70 50 61 72 73 65  .  Parse *pParse
22960 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
22970 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
22980 50 61 72 73 65 72 20 63 6f 6e 74 65 78 74 2e 20  Parser context. 
22990 20 2a 2f 0a 20 20 69 6e 74 20 28 2a 78 45 78 70   */.  int (*xExp
229a0 72 43 61 6c 6c 62 61 63 6b 29 28 57 61 6c 6b 65  rCallback)(Walke
229b0 72 2a 2c 20 45 78 70 72 2a 29 3b 20 20 20 20 20  r*, Expr*);     
229c0 2f 2a 20 43 61 6c 6c 62 61 63 6b 20 66 6f 72 20  /* Callback for 
229d0 65 78 70 72 65 73 73 69 6f 6e 73 20 2a 2f 0a 20  expressions */. 
229e0 20 69 6e 74 20 28 2a 78 53 65 6c 65 63 74 43 61   int (*xSelectCa
229f0 6c 6c 62 61 63 6b 29 28 57 61 6c 6b 65 72 2a 2c  llback)(Walker*,
22a00 53 65 6c 65 63 74 2a 29 3b 20 20 2f 2a 20 43 61  Select*);  /* Ca
22a10 6c 6c 62 61 63 6b 20 66 6f 72 20 53 45 4c 45 43  llback for SELEC
22a20 54 73 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78  Ts */.  void (*x
22a30 53 65 6c 65 63 74 43 61 6c 6c 62 61 63 6b 32 29  SelectCallback2)
22a40 28 57 61 6c 6b 65 72 2a 2c 53 65 6c 65 63 74 2a  (Walker*,Select*
22a50 29 3b 2f 2a 20 53 65 63 6f 6e 64 20 63 61 6c 6c  );/* Second call
22a60 62 61 63 6b 20 66 6f 72 20 53 45 4c 45 43 54 73  back for SELECTs
22a70 20 2a 2f 0a 20 20 69 6e 74 20 77 61 6c 6b 65 72   */.  int walker
22a80 44 65 70 74 68 3b 20 20 20 20 20 20 20 20 20 20  Depth;          
22a90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22aa0 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 73 75 62  /* Number of sub
22ab0 71 75 65 72 69 65 73 20 2a 2f 0a 20 20 75 38 20  queries */.  u8 
22ac0 65 43 6f 64 65 3b 20 20 20 20 20 20 20 20 20 20  eCode;          
22ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22ae0 20 20 20 20 20 20 20 2f 2a 20 41 20 73 6d 61 6c         /* A smal
22af0 6c 20 70 72 6f 63 65 73 73 69 6e 67 20 63 6f 64  l processing cod
22b00 65 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b 20 20  e */.  union {  
22b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22b20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22b30 20 2f 2a 20 45 78 74 72 61 20 64 61 74 61 20 66   /* Extra data f
22b40 6f 72 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20  or callback */. 
22b50 20 20 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20 2a     NameContext *
22b60 70 4e 43 3b 20 20 20 20 20 20 20 20 20 20 20 20  pNC;            
22b70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
22b80 20 4e 61 6d 69 6e 67 20 63 6f 6e 74 65 78 74 20   Naming context 
22b90 2a 2f 0a 20 20 20 20 69 6e 74 20 6e 3b 20 20 20  */.    int n;   
22ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22bc0 20 20 2f 2a 20 41 20 63 6f 75 6e 74 65 72 20 2a    /* A counter *
22bd0 2f 0a 20 20 20 20 69 6e 74 20 69 43 75 72 3b 20  /.    int iCur; 
22be0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22bf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22c00 20 2f 2a 20 41 20 63 75 72 73 6f 72 20 6e 75 6d   /* A cursor num
22c10 62 65 72 20 2a 2f 0a 20 20 20 20 53 72 63 4c 69  ber */.    SrcLi
22c20 73 74 20 2a 70 53 72 63 4c 69 73 74 3b 20 20 20  st *pSrcList;   
22c30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22c40 20 20 20 20 20 20 2f 2a 20 46 52 4f 4d 20 63 6c        /* FROM cl
22c50 61 75 73 65 20 2a 2f 0a 20 20 20 20 73 74 72 75  ause */.    stru
22c60 63 74 20 53 72 63 43 6f 75 6e 74 20 2a 70 53 72  ct SrcCount *pSr
22c70 63 43 6f 75 6e 74 3b 20 20 20 20 20 20 20 20 20  cCount;         
22c80 20 20 20 20 20 20 20 2f 2a 20 43 6f 75 6e 74 69         /* Counti
22c90 6e 67 20 63 6f 6c 75 6d 6e 20 72 65 66 65 72 65  ng column refere
22ca0 6e 63 65 73 20 2a 2f 0a 20 20 20 20 73 74 72 75  nces */.    stru
22cb0 63 74 20 43 43 75 72 48 69 6e 74 20 2a 70 43 43  ct CCurHint *pCC
22cc0 75 72 48 69 6e 74 3b 20 20 20 20 20 20 20 20 20  urHint;         
22cd0 20 20 20 20 20 20 20 2f 2a 20 55 73 65 64 20 62         /* Used b
22ce0 79 20 63 6f 64 65 43 75 72 73 6f 72 48 69 6e 74  y codeCursorHint
22cf0 28 29 20 2a 2f 0a 20 20 20 20 69 6e 74 20 2a 61  () */.    int *a
22d00 69 43 6f 6c 3b 20 20 20 20 20 20 20 20 20 20 20  iCol;           
22d10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22d20 20 20 20 20 20 2f 2a 20 61 72 72 61 79 20 6f 66       /* array of
22d30 20 63 6f 6c 75 6d 6e 20 69 6e 64 65 78 65 73 20   column indexes 
22d40 2a 2f 0a 20 20 7d 20 75 3b 0a 7d 3b 0a 0a 2f 2a  */.  } u;.};../*
22d50 20 46 6f 72 77 61 72 64 20 64 65 63 6c 61 72 61   Forward declara
22d60 74 69 6f 6e 73 20 2a 2f 0a 69 6e 74 20 73 71 6c  tions */.int sql
22d70 69 74 65 33 57 61 6c 6b 45 78 70 72 28 57 61 6c  ite3WalkExpr(Wal
22d80 6b 65 72 2a 2c 20 45 78 70 72 2a 29 3b 0a 69 6e  ker*, Expr*);.in
22d90 74 20 73 71 6c 69 74 65 33 57 61 6c 6b 45 78 70  t sqlite3WalkExp
22da0 72 4c 69 73 74 28 57 61 6c 6b 65 72 2a 2c 20 45  rList(Walker*, E
22db0 78 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73  xprList*);.int s
22dc0 71 6c 69 74 65 33 57 61 6c 6b 53 65 6c 65 63 74  qlite3WalkSelect
22dd0 28 57 61 6c 6b 65 72 2a 2c 20 53 65 6c 65 63 74  (Walker*, Select
22de0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57  *);.int sqlite3W
22df0 61 6c 6b 53 65 6c 65 63 74 45 78 70 72 28 57 61  alkSelectExpr(Wa
22e00 6c 6b 65 72 2a 2c 20 53 65 6c 65 63 74 2a 29 3b  lker*, Select*);
22e10 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 61 6c 6b  .int sqlite3Walk
22e20 53 65 6c 65 63 74 46 72 6f 6d 28 57 61 6c 6b 65  SelectFrom(Walke
22e30 72 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 69 6e  r*, Select*);.in
22e40 74 20 73 71 6c 69 74 65 33 45 78 70 72 57 61 6c  t sqlite3ExprWal
22e50 6b 4e 6f 6f 70 28 57 61 6c 6b 65 72 2a 2c 20 45  kNoop(Walker*, E
22e60 78 70 72 2a 29 3b 0a 0a 2f 2a 0a 2a 2a 20 52 65  xpr*);../*.** Re
22e70 74 75 72 6e 20 63 6f 64 65 20 66 72 6f 6d 20 74  turn code from t
22e80 68 65 20 70 61 72 73 65 2d 74 72 65 65 20 77 61  he parse-tree wa
22e90 6c 6b 69 6e 67 20 70 72 69 6d 69 74 69 76 65 73  lking primitives
22ea0 20 61 6e 64 20 74 68 65 69 72 0a 2a 2a 20 63 61   and their.** ca
22eb0 6c 6c 62 61 63 6b 73 2e 0a 2a 2f 0a 23 64 65 66  llbacks..*/.#def
22ec0 69 6e 65 20 57 52 43 5f 43 6f 6e 74 69 6e 75 65  ine WRC_Continue
22ed0 20 20 20 20 30 20 20 20 2f 2a 20 43 6f 6e 74 69      0   /* Conti
22ee0 6e 75 65 20 64 6f 77 6e 20 69 6e 74 6f 20 63 68  nue down into ch
22ef0 69 6c 64 72 65 6e 20 2a 2f 0a 23 64 65 66 69 6e  ildren */.#defin
22f00 65 20 57 52 43 5f 50 72 75 6e 65 20 20 20 20 20  e WRC_Prune     
22f10 20 20 31 20 20 20 2f 2a 20 4f 6d 69 74 20 63 68    1   /* Omit ch
22f20 69 6c 64 72 65 6e 20 62 75 74 20 63 6f 6e 74 69  ildren but conti
22f30 6e 75 65 20 77 61 6c 6b 69 6e 67 20 73 69 62 6c  nue walking sibl
22f40 69 6e 67 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ings */.#define 
22f50 57 52 43 5f 41 62 6f 72 74 20 20 20 20 20 20 20  WRC_Abort       
22f60 32 20 20 20 2f 2a 20 41 62 61 6e 64 6f 6e 20 74  2   /* Abandon t
22f70 68 65 20 74 72 65 65 20 77 61 6c 6b 20 2a 2f 0a  he tree walk */.
22f80 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e  ./*.** An instan
22f90 63 65 20 6f 66 20 74 68 69 73 20 73 74 72 75 63  ce of this struc
22fa0 74 75 72 65 20 72 65 70 72 65 73 65 6e 74 73 20  ture represents 
22fb0 61 20 73 65 74 20 6f 66 20 6f 6e 65 20 6f 72 20  a set of one or 
22fc0 6d 6f 72 65 20 43 54 45 73 0a 2a 2a 20 28 63 6f  more CTEs.** (co
22fd0 6d 6d 6f 6e 20 74 61 62 6c 65 20 65 78 70 72 65  mmon table expre
22fe0 73 73 69 6f 6e 73 29 20 63 72 65 61 74 65 64 20  ssions) created 
22ff0 62 79 20 61 20 73 69 6e 67 6c 65 20 57 49 54 48  by a single WITH
23000 20 63 6c 61 75 73 65 2e 0a 2a 2f 0a 73 74 72 75   clause..*/.stru
23010 63 74 20 57 69 74 68 20 7b 0a 20 20 69 6e 74 20  ct With {.  int 
23020 6e 43 74 65 3b 20 20 20 20 20 20 20 20 20 20 20  nCte;           
23030 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
23040 75 6d 62 65 72 20 6f 66 20 43 54 45 73 20 69 6e  umber of CTEs in
23050 20 74 68 65 20 57 49 54 48 20 63 6c 61 75 73 65   the WITH clause
23060 20 2a 2f 0a 20 20 57 69 74 68 20 2a 70 4f 75 74   */.  With *pOut
23070 65 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  er;             
23080 20 20 20 20 20 20 2f 2a 20 43 6f 6e 74 61 69 6e        /* Contain
23090 69 6e 67 20 57 49 54 48 20 63 6c 61 75 73 65 2c  ing WITH clause,
230a0 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 20 20 73 74   or NULL */.  st
230b0 72 75 63 74 20 43 74 65 20 7b 20 20 20 20 20 20  ruct Cte {      
230c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
230d0 20 46 6f 72 20 65 61 63 68 20 43 54 45 20 69 6e   For each CTE in
230e0 20 74 68 65 20 57 49 54 48 20 63 6c 61 75 73 65   the WITH clause
230f0 2e 2e 2e 2e 20 2a 2f 0a 20 20 20 20 63 68 61 72  .... */.    char
23100 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20   *zName;        
23110 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
23120 61 6d 65 20 6f 66 20 74 68 69 73 20 43 54 45 20  ame of this CTE 
23130 2a 2f 0a 20 20 20 20 45 78 70 72 4c 69 73 74 20  */.    ExprList 
23140 2a 70 43 6f 6c 73 3b 20 20 20 20 20 20 20 20 20  *pCols;         
23150 20 20 20 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f         /* List o
23160 66 20 65 78 70 6c 69 63 69 74 20 63 6f 6c 75 6d  f explicit colum
23170 6e 20 6e 61 6d 65 73 2c 20 6f 72 20 4e 55 4c 4c  n names, or NULL
23180 20 2a 2f 0a 20 20 20 20 53 65 6c 65 63 74 20 2a   */.    Select *
23190 70 53 65 6c 65 63 74 3b 20 20 20 20 20 20 20 20  pSelect;        
231a0 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 64          /* The d
231b0 65 66 69 6e 69 74 69 6f 6e 20 6f 66 20 74 68 69  efinition of thi
231c0 73 20 43 54 45 20 2a 2f 0a 20 20 20 20 63 6f 6e  s CTE */.    con
231d0 73 74 20 63 68 61 72 20 2a 7a 43 74 65 45 72 72  st char *zCteErr
231e0 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
231f0 45 72 72 6f 72 20 6d 65 73 73 61 67 65 20 66 6f  Error message fo
23200 72 20 63 69 72 63 75 6c 61 72 20 72 65 66 65 72  r circular refer
23210 65 6e 63 65 73 20 2a 2f 0a 20 20 7d 20 61 5b 31  ences */.  } a[1
23220 5d 3b 0a 7d 3b 0a 0a 23 69 66 64 65 66 20 53 51  ];.};..#ifdef SQ
23230 4c 49 54 45 5f 44 45 42 55 47 0a 2f 2a 0a 2a 2a  LITE_DEBUG./*.**
23240 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20   An instance of 
23250 74 68 65 20 54 72 65 65 56 69 65 77 20 6f 62 6a  the TreeView obj
23260 65 63 74 20 69 73 20 75 73 65 64 20 66 6f 72 20  ect is used for 
23270 70 72 69 6e 74 69 6e 67 20 74 68 65 20 63 6f 6e  printing the con
23280 74 65 6e 74 20 6f 66 0a 2a 2a 20 64 61 74 61 20  tent of.** data 
23290 73 74 72 75 63 74 75 72 65 73 20 6f 6e 20 73 71  structures on sq
232a0 6c 69 74 65 33 44 65 62 75 67 50 72 69 6e 74 66  lite3DebugPrintf
232b0 28 29 20 75 73 69 6e 67 20 61 20 74 72 65 65 2d  () using a tree-
232c0 6c 69 6b 65 20 76 69 65 77 2e 0a 2a 2f 0a 73 74  like view..*/.st
232d0 72 75 63 74 20 54 72 65 65 56 69 65 77 20 7b 0a  ruct TreeView {.
232e0 20 20 69 6e 74 20 69 4c 65 76 65 6c 3b 20 20 20    int iLevel;   
232f0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57 68 69            /* Whi
23300 63 68 20 6c 65 76 65 6c 20 6f 66 20 74 68 65 20  ch level of the 
23310 74 72 65 65 20 77 65 20 61 72 65 20 6f 6e 20 2a  tree we are on *
23320 2f 0a 20 20 75 38 20 20 62 4c 69 6e 65 5b 31 30  /.  u8  bLine[10
23330 30 5d 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 44  0];         /* D
23340 72 61 77 20 76 65 72 74 69 63 61 6c 20 69 6e 20  raw vertical in 
23350 63 6f 6c 75 6d 6e 20 69 20 69 66 20 62 4c 69 6e  column i if bLin
23360 65 5b 69 5d 20 69 73 20 74 72 75 65 20 2a 2f 0a  e[i] is true */.
23370 7d 3b 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c  };.#endif /* SQL
23380 49 54 45 5f 44 45 42 55 47 20 2a 2f 0a 0a 2f 2a  ITE_DEBUG */../*
23390 0a 2a 2a 20 41 73 73 75 6d 69 6e 67 20 7a 49 6e  .** Assuming zIn
233a0 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 66   points to the f
233b0 69 72 73 74 20 62 79 74 65 20 6f 66 20 61 20 55  irst byte of a U
233c0 54 46 2d 38 20 63 68 61 72 61 63 74 65 72 2c 0a  TF-8 character,.
233d0 2a 2a 20 61 64 76 61 6e 63 65 20 7a 49 6e 20 74  ** advance zIn t
233e0 6f 20 70 6f 69 6e 74 20 74 6f 20 74 68 65 20 66  o point to the f
233f0 69 72 73 74 20 62 79 74 65 20 6f 66 20 74 68 65  irst byte of the
23400 20 6e 65 78 74 20 55 54 46 2d 38 20 63 68 61 72   next UTF-8 char
23410 61 63 74 65 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e  acter..*/.#defin
23420 65 20 53 51 4c 49 54 45 5f 53 4b 49 50 5f 55 54  e SQLITE_SKIP_UT
23430 46 38 28 7a 49 6e 29 20 7b 20 20 20 20 20 20 20  F8(zIn) {       
23440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23450 20 5c 0a 20 20 69 66 28 20 28 2a 28 7a 49 6e 2b   \.  if( (*(zIn+
23460 2b 29 29 3e 3d 30 78 63 30 20 29 7b 20 20 20 20  +))>=0xc0 ){    
23470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23480 20 20 20 20 20 20 20 20 20 20 5c 0a 20 20 20 20            \.    
23490 77 68 69 6c 65 28 20 28 2a 7a 49 6e 20 26 20 30  while( (*zIn & 0
234a0 78 63 30 29 3d 3d 30 78 38 30 20 29 7b 20 7a 49  xc0)==0x80 ){ zI
234b0 6e 2b 2b 3b 20 7d 20 20 20 20 20 20 20 20 20 20  n++; }          
234c0 20 20 20 5c 0a 20 20 7d 20 20 20 20 20 20 20 20     \.  }        
234d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
234e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
234f0 20 20 20 20 20 20 20 20 20 20 20 20 5c 0a 7d 0a              \.}.
23500 0a 2f 2a 0a 2a 2a 20 54 68 65 20 53 51 4c 49 54  ./*.** The SQLIT
23510 45 5f 2a 5f 42 4b 50 54 20 6d 61 63 72 6f 73 20  E_*_BKPT macros 
23520 61 72 65 20 73 75 62 73 74 69 74 75 74 65 73 20  are substitutes 
23530 66 6f 72 20 74 68 65 20 65 72 72 6f 72 20 63 6f  for the error co
23540 64 65 73 20 77 69 74 68 0a 2a 2a 20 74 68 65 20  des with.** the 
23550 73 61 6d 65 20 6e 61 6d 65 20 62 75 74 20 77 69  same name but wi
23560 74 68 6f 75 74 20 74 68 65 20 5f 42 4b 50 54 20  thout the _BKPT 
23570 73 75 66 66 69 78 2e 20 20 54 68 65 73 65 20 6d  suffix.  These m
23580 61 63 72 6f 73 20 69 6e 76 6f 6b 65 0a 2a 2a 20  acros invoke.** 
23590 72 6f 75 74 69 6e 65 73 20 74 68 61 74 20 72 65  routines that re
235a0 70 6f 72 74 20 74 68 65 20 6c 69 6e 65 2d 6e 75  port the line-nu
235b0 6d 62 65 72 20 6f 6e 20 77 68 69 63 68 20 74 68  mber on which th
235c0 65 20 65 72 72 6f 72 20 6f 72 69 67 69 6e 61 74  e error originat
235d0 65 64 0a 2a 2a 20 75 73 69 6e 67 20 73 71 6c 69  ed.** using sqli
235e0 74 65 33 5f 6c 6f 67 28 29 2e 20 20 54 68 65 20  te3_log().  The 
235f0 72 6f 75 74 69 6e 65 73 20 61 6c 73 6f 20 70 72  routines also pr
23600 6f 76 69 64 65 20 61 20 63 6f 6e 76 65 6e 69 65  ovide a convenie
23610 6e 74 20 70 6c 61 63 65 0a 2a 2a 20 74 6f 20 73  nt place.** to s
23620 65 74 20 61 20 64 65 62 75 67 67 65 72 20 62 72  et a debugger br
23630 65 61 6b 70 6f 69 6e 74 2e 0a 2a 2f 0a 69 6e 74  eakpoint..*/.int
23640 20 73 71 6c 69 74 65 33 43 6f 72 72 75 70 74 45   sqlite3CorruptE
23650 72 72 6f 72 28 69 6e 74 29 3b 0a 69 6e 74 20 73  rror(int);.int s
23660 71 6c 69 74 65 33 4d 69 73 75 73 65 45 72 72 6f  qlite3MisuseErro
23670 72 28 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69  r(int);.int sqli
23680 74 65 33 43 61 6e 74 6f 70 65 6e 45 72 72 6f 72  te3CantopenError
23690 28 69 6e 74 29 3b 0a 23 64 65 66 69 6e 65 20 53  (int);.#define S
236a0 51 4c 49 54 45 5f 43 4f 52 52 55 50 54 5f 42 4b  QLITE_CORRUPT_BK
236b0 50 54 20 73 71 6c 69 74 65 33 43 6f 72 72 75 70  PT sqlite3Corrup
236c0 74 45 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 29  tError(__LINE__)
236d0 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
236e0 4d 49 53 55 53 45 5f 42 4b 50 54 20 73 71 6c 69  MISUSE_BKPT sqli
236f0 74 65 33 4d 69 73 75 73 65 45 72 72 6f 72 28 5f  te3MisuseError(_
23700 5f 4c 49 4e 45 5f 5f 29 0a 23 64 65 66 69 6e 65  _LINE__).#define
23710 20 53 51 4c 49 54 45 5f 43 41 4e 54 4f 50 45 4e   SQLITE_CANTOPEN
23720 5f 42 4b 50 54 20 73 71 6c 69 74 65 33 43 61 6e  _BKPT sqlite3Can
23730 74 6f 70 65 6e 45 72 72 6f 72 28 5f 5f 4c 49 4e  topenError(__LIN
23740 45 5f 5f 29 0a 23 69 66 64 65 66 20 53 51 4c 49  E__).#ifdef SQLI
23750 54 45 5f 44 45 42 55 47 0a 20 20 69 6e 74 20 73  TE_DEBUG.  int s
23760 71 6c 69 74 65 33 4e 6f 6d 65 6d 45 72 72 6f 72  qlite3NomemError
23770 28 69 6e 74 29 3b 0a 20 20 69 6e 74 20 73 71 6c  (int);.  int sql
23780 69 74 65 33 49 6f 65 72 72 6e 6f 6d 65 6d 45 72  ite3IoerrnomemEr
23790 72 6f 72 28 69 6e 74 29 3b 0a 23 20 64 65 66 69  ror(int);.# defi
237a0 6e 65 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 5f  ne SQLITE_NOMEM_
237b0 42 4b 50 54 20 73 71 6c 69 74 65 33 4e 6f 6d 65  BKPT sqlite3Nome
237c0 6d 45 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 29  mError(__LINE__)
237d0 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
237e0 5f 49 4f 45 52 52 5f 4e 4f 4d 45 4d 5f 42 4b 50  _IOERR_NOMEM_BKP
237f0 54 20 73 71 6c 69 74 65 33 49 6f 65 72 72 6e 6f  T sqlite3Ioerrno
23800 6d 65 6d 45 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f  memError(__LINE_
23810 5f 29 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e  _).#else.# defin
23820 65 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 5f 42  e SQLITE_NOMEM_B
23830 4b 50 54 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d  KPT SQLITE_NOMEM
23840 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
23850 5f 49 4f 45 52 52 5f 4e 4f 4d 45 4d 5f 42 4b 50  _IOERR_NOMEM_BKP
23860 54 20 53 51 4c 49 54 45 5f 49 4f 45 52 52 5f 4e  T SQLITE_IOERR_N
23870 4f 4d 45 4d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  OMEM.#endif../*.
23880 2a 2a 20 46 54 53 33 20 61 6e 64 20 46 54 53 34  ** FTS3 and FTS4
23890 20 62 6f 74 68 20 72 65 71 75 69 72 65 20 76 69   both require vi
238a0 72 74 75 61 6c 20 74 61 62 6c 65 20 73 75 70 70  rtual table supp
238b0 6f 72 74 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e  ort.*/.#if defin
238c0 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  ed(SQLITE_OMIT_V
238d0 49 52 54 55 41 4c 54 41 42 4c 45 29 0a 23 20 75  IRTUALTABLE).# u
238e0 6e 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  ndef SQLITE_ENAB
238f0 4c 45 5f 46 54 53 33 0a 23 20 75 6e 64 65 66 20  LE_FTS3.# undef 
23900 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54  SQLITE_ENABLE_FT
23910 53 34 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  S4.#endif../*.**
23920 20 46 54 53 34 20 69 73 20 72 65 61 6c 6c 79 20   FTS4 is really 
23930 61 6e 20 65 78 74 65 6e 73 69 6f 6e 20 66 6f 72  an extension for
23940 20 46 54 53 33 2e 20 20 49 74 20 69 73 20 65 6e   FTS3.  It is en
23950 61 62 6c 65 64 20 75 73 69 6e 67 20 74 68 65 0a  abled using the.
23960 2a 2a 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ** SQLITE_ENABLE
23970 5f 46 54 53 33 20 6d 61 63 72 6f 2e 20 20 42 75  _FTS3 macro.  Bu
23980 74 20 74 6f 20 61 76 6f 69 64 20 63 6f 6e 66 75  t to avoid confu
23990 73 69 6f 6e 20 77 65 20 61 6c 73 6f 20 63 61 6c  sion we also cal
239a0 6c 0a 2a 2a 20 74 68 65 20 53 51 4c 49 54 45 5f  l.** the SQLITE_
239b0 45 4e 41 42 4c 45 5f 46 54 53 34 20 6d 61 63 72  ENABLE_FTS4 macr
239c0 6f 20 74 6f 20 73 65 72 76 65 20 61 73 20 61 6e  o to serve as an
239d0 20 61 6c 69 61 73 20 66 6f 72 20 53 51 4c 49 54   alias for SQLIT
239e0 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33 2e 0a 2a  E_ENABLE_FTS3..*
239f0 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51  /.#if defined(SQ
23a00 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 34  LITE_ENABLE_FTS4
23a10 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 53 51  ) && !defined(SQ
23a20 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33  LITE_ENABLE_FTS3
23a30 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  ).# define SQLIT
23a40 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33 20 31 0a  E_ENABLE_FTS3 1.
23a50 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68  #endif../*.** Th
23a60 65 20 63 74 79 70 65 2e 68 20 68 65 61 64 65 72  e ctype.h header
23a70 20 69 73 20 6e 65 65 64 65 64 20 66 6f 72 20 6e   is needed for n
23a80 6f 6e 2d 41 53 43 49 49 20 73 79 73 74 65 6d 73  on-ASCII systems
23a90 2e 20 20 49 74 20 69 73 20 61 6c 73 6f 0a 2a 2a  .  It is also.**
23aa0 20 6e 65 65 64 65 64 20 62 79 20 46 54 53 33 20   needed by FTS3 
23ab0 77 68 65 6e 20 46 54 53 33 20 69 73 20 69 6e 63  when FTS3 is inc
23ac0 6c 75 64 65 64 20 69 6e 20 74 68 65 20 61 6d 61  luded in the ama
23ad0 6c 67 61 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 23 69  lgamation..*/.#i
23ae0 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  f !defined(SQLIT
23af0 45 5f 41 53 43 49 49 29 20 7c 7c 20 5c 0a 20 20  E_ASCII) || \.  
23b00 20 20 28 64 65 66 69 6e 65 64 28 53 51 4c 49 54    (defined(SQLIT
23b10 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33 29 20 26  E_ENABLE_FTS3) &
23b20 26 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  & defined(SQLITE
23b30 5f 41 4d 41 4c 47 41 4d 41 54 49 4f 4e 29 29 0a  _AMALGAMATION)).
23b40 23 20 69 6e 63 6c 75 64 65 20 3c 63 74 79 70 65  # include <ctype
23b50 2e 68 3e 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  .h>.#endif../*.*
23b60 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  * The following 
23b70 6d 61 63 72 6f 73 20 6d 69 6d 69 63 20 74 68 65  macros mimic the
23b80 20 73 74 61 6e 64 61 72 64 20 6c 69 62 72 61 72   standard librar
23b90 79 20 66 75 6e 63 74 69 6f 6e 73 20 74 6f 75 70  y functions toup
23ba0 70 65 72 28 29 2c 0a 2a 2a 20 69 73 73 70 61 63  per(),.** isspac
23bb0 65 28 29 2c 20 69 73 61 6c 6e 75 6d 28 29 2c 20  e(), isalnum(), 
23bc0 69 73 64 69 67 69 74 28 29 20 61 6e 64 20 69 73  isdigit() and is
23bd0 78 64 69 67 69 74 28 29 2c 20 72 65 73 70 65 63  xdigit(), respec
23be0 74 69 76 65 6c 79 2e 20 54 68 65 0a 2a 2a 20 73  tively. The.** s
23bf0 71 6c 69 74 65 20 76 65 72 73 69 6f 6e 73 20 6f  qlite versions o
23c00 6e 6c 79 20 77 6f 72 6b 20 66 6f 72 20 41 53 43  nly work for ASC
23c10 49 49 20 63 68 61 72 61 63 74 65 72 73 2c 20 72  II characters, r
23c20 65 67 61 72 64 6c 65 73 73 20 6f 66 20 6c 6f 63  egardless of loc
23c30 61 6c 65 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53  ale..*/.#ifdef S
23c40 51 4c 49 54 45 5f 41 53 43 49 49 0a 23 20 64 65  QLITE_ASCII.# de
23c50 66 69 6e 65 20 73 71 6c 69 74 65 33 54 6f 75 70  fine sqlite3Toup
23c60 70 65 72 28 78 29 20 20 28 28 78 29 26 7e 28 73  per(x)  ((x)&~(s
23c70 71 6c 69 74 65 33 43 74 79 70 65 4d 61 70 5b 28  qlite3CtypeMap[(
23c80 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78  unsigned char)(x
23c90 29 5d 26 30 78 32 30 29 29 0a 23 20 64 65 66 69  )]&0x20)).# defi
23ca0 6e 65 20 73 71 6c 69 74 65 33 49 73 73 70 61 63  ne sqlite3Isspac
23cb0 65 28 78 29 20 20 20 28 73 71 6c 69 74 65 33 43  e(x)   (sqlite3C
23cc0 74 79 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65  typeMap[(unsigne
23cd0 64 20 63 68 61 72 29 28 78 29 5d 26 30 78 30 31  d char)(x)]&0x01
23ce0 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
23cf0 65 33 49 73 61 6c 6e 75 6d 28 78 29 20 20 20 28  e3Isalnum(x)   (
23d00 73 71 6c 69 74 65 33 43 74 79 70 65 4d 61 70 5b  sqlite3CtypeMap[
23d10 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28  (unsigned char)(
23d20 78 29 5d 26 30 78 30 36 29 0a 23 20 64 65 66 69  x)]&0x06).# defi
23d30 6e 65 20 73 71 6c 69 74 65 33 49 73 61 6c 70 68  ne sqlite3Isalph
23d40 61 28 78 29 20 20 20 28 73 71 6c 69 74 65 33 43  a(x)   (sqlite3C
23d50 74 79 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65  typeMap[(unsigne
23d60 64 20 63 68 61 72 29 28 78 29 5d 26 30 78 30 32  d char)(x)]&0x02
23d70 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
23d80 65 33 49 73 64 69 67 69 74 28 78 29 20 20 20 28  e3Isdigit(x)   (
23d90 73 71 6c 69 74 65 33 43 74 79 70 65 4d 61 70 5b  sqlite3CtypeMap[
23da0 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28  (unsigned char)(
23db0 78 29 5d 26 30 78 30 34 29 0a 23 20 64 65 66 69  x)]&0x04).# defi
23dc0 6e 65 20 73 71 6c 69 74 65 33 49 73 78 64 69 67  ne sqlite3Isxdig
23dd0 69 74 28 78 29 20 20 28 73 71 6c 69 74 65 33 43  it(x)  (sqlite3C
23de0 74 79 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65  typeMap[(unsigne
23df0 64 20 63 68 61 72 29 28 78 29 5d 26 30 78 30 38  d char)(x)]&0x08
23e00 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
23e10 65 33 54 6f 6c 6f 77 65 72 28 78 29 20 20 20 28  e3Tolower(x)   (
23e20 73 71 6c 69 74 65 33 55 70 70 65 72 54 6f 4c 6f  sqlite3UpperToLo
23e30 77 65 72 5b 28 75 6e 73 69 67 6e 65 64 20 63 68  wer[(unsigned ch
23e40 61 72 29 28 78 29 5d 29 0a 23 20 64 65 66 69 6e  ar)(x)]).# defin
23e50 65 20 73 71 6c 69 74 65 33 49 73 71 75 6f 74 65  e sqlite3Isquote
23e60 28 78 29 20 20 20 28 73 71 6c 69 74 65 33 43 74  (x)   (sqlite3Ct
23e70 79 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64  ypeMap[(unsigned
23e80 20 63 68 61 72 29 28 78 29 5d 26 30 78 38 30 29   char)(x)]&0x80)
23e90 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
23ea0 73 71 6c 69 74 65 33 54 6f 75 70 70 65 72 28 78  sqlite3Toupper(x
23eb0 29 20 20 20 74 6f 75 70 70 65 72 28 28 75 6e 73  )   toupper((uns
23ec0 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 29 0a  igned char)(x)).
23ed0 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
23ee0 49 73 73 70 61 63 65 28 78 29 20 20 20 69 73 73  Isspace(x)   iss
23ef0 70 61 63 65 28 28 75 6e 73 69 67 6e 65 64 20 63  pace((unsigned c
23f00 68 61 72 29 28 78 29 29 0a 23 20 64 65 66 69 6e  har)(x)).# defin
23f10 65 20 73 71 6c 69 74 65 33 49 73 61 6c 6e 75 6d  e sqlite3Isalnum
23f20 28 78 29 20 20 20 69 73 61 6c 6e 75 6d 28 28 75  (x)   isalnum((u
23f30 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29  nsigned char)(x)
23f40 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
23f50 65 33 49 73 61 6c 70 68 61 28 78 29 20 20 20 69  e3Isalpha(x)   i
23f60 73 61 6c 70 68 61 28 28 75 6e 73 69 67 6e 65 64  salpha((unsigned
23f70 20 63 68 61 72 29 28 78 29 29 0a 23 20 64 65 66   char)(x)).# def
23f80 69 6e 65 20 73 71 6c 69 74 65 33 49 73 64 69 67  ine sqlite3Isdig
23f90 69 74 28 78 29 20 20 20 69 73 64 69 67 69 74 28  it(x)   isdigit(
23fa0 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28  (unsigned char)(
23fb0 78 29 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  x)).# define sql
23fc0 69 74 65 33 49 73 78 64 69 67 69 74 28 78 29 20  ite3Isxdigit(x) 
23fd0 20 69 73 78 64 69 67 69 74 28 28 75 6e 73 69 67   isxdigit((unsig
23fe0 6e 65 64 20 63 68 61 72 29 28 78 29 29 0a 23 20  ned char)(x)).# 
23ff0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54 6f  define sqlite3To
24000 6c 6f 77 65 72 28 78 29 20 20 20 74 6f 6c 6f 77  lower(x)   tolow
24010 65 72 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61  er((unsigned cha
24020 72 29 28 78 29 29 0a 23 20 64 65 66 69 6e 65 20  r)(x)).# define 
24030 73 71 6c 69 74 65 33 49 73 71 75 6f 74 65 28 78  sqlite3Isquote(x
24040 29 20 20 20 28 28 78 29 3d 3d 27 22 27 7c 7c 28  )   ((x)=='"'||(
24050 78 29 3d 3d 27 5c 27 27 7c 7c 28 78 29 3d 3d 27  x)=='\''||(x)=='
24060 5b 27 7c 7c 28 78 29 3d 3d 27 60 27 29 0a 23 65  ['||(x)=='`').#e
24070 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c  ndif.#ifndef SQL
24080 49 54 45 5f 4f 4d 49 54 5f 43 4f 4d 50 49 4c 45  ITE_OMIT_COMPILE
24090 4f 50 54 49 4f 4e 5f 44 49 41 47 53 0a 69 6e 74  OPTION_DIAGS.int
240a0 20 73 71 6c 69 74 65 33 49 73 49 64 43 68 61 72   sqlite3IsIdChar
240b0 28 75 38 29 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a  (u8);.#endif../*
240c0 0a 2a 2a 20 49 6e 74 65 72 6e 61 6c 20 66 75 6e  .** Internal fun
240d0 63 74 69 6f 6e 20 70 72 6f 74 6f 74 79 70 65 73  ction prototypes
240e0 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 53  .*/.int sqlite3S
240f0 74 72 49 43 6d 70 28 63 6f 6e 73 74 20 63 68 61  trICmp(const cha
24100 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  r*,const char*);
24110 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 74 72 6c  .int sqlite3Strl
24120 65 6e 33 30 28 63 6f 6e 73 74 20 63 68 61 72 2a  en30(const char*
24130 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33  );.char *sqlite3
24140 43 6f 6c 75 6d 6e 54 79 70 65 28 43 6f 6c 75 6d  ColumnType(Colum
24150 6e 2a 2c 63 68 61 72 2a 29 3b 0a 23 64 65 66 69  n*,char*);.#defi
24160 6e 65 20 73 71 6c 69 74 65 33 53 74 72 4e 49 43  ne sqlite3StrNIC
24170 6d 70 20 73 71 6c 69 74 65 33 5f 73 74 72 6e 69  mp sqlite3_strni
24180 63 6d 70 0a 0a 69 6e 74 20 73 71 6c 69 74 65 33  cmp..int sqlite3
24190 4d 61 6c 6c 6f 63 49 6e 69 74 28 76 6f 69 64 29  MallocInit(void)
241a0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 61  ;.void sqlite3Ma
241b0 6c 6c 6f 63 45 6e 64 28 76 6f 69 64 29 3b 0a 76  llocEnd(void);.v
241c0 6f 69 64 20 2a 73 71 6c 69 74 65 33 4d 61 6c 6c  oid *sqlite3Mall
241d0 6f 63 28 75 36 34 29 3b 0a 76 6f 69 64 20 2a 73  oc(u64);.void *s
241e0 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 5a 65 72 6f  qlite3MallocZero
241f0 28 75 36 34 29 3b 0a 76 6f 69 64 20 2a 73 71 6c  (u64);.void *sql
24200 69 74 65 33 44 62 4d 61 6c 6c 6f 63 5a 65 72 6f  ite3DbMallocZero
24210 28 73 71 6c 69 74 65 33 2a 2c 20 75 36 34 29 3b  (sqlite3*, u64);
24220 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 44 62  .void *sqlite3Db
24230 4d 61 6c 6c 6f 63 52 61 77 28 73 71 6c 69 74 65  MallocRaw(sqlite
24240 33 2a 2c 20 75 36 34 29 3b 0a 76 6f 69 64 20 2a  3*, u64);.void *
24250 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 52  sqlite3DbMallocR
24260 61 77 4e 4e 28 73 71 6c 69 74 65 33 2a 2c 20 75  awNN(sqlite3*, u
24270 36 34 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74  64);.char *sqlit
24280 65 33 44 62 53 74 72 44 75 70 28 73 71 6c 69 74  e3DbStrDup(sqlit
24290 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29  e3*,const char*)
242a0 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33 44  ;.char *sqlite3D
242b0 62 53 74 72 4e 44 75 70 28 73 71 6c 69 74 65 33  bStrNDup(sqlite3
242c0 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 75  *,const char*, u
242d0 36 34 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74  64);.void *sqlit
242e0 65 33 52 65 61 6c 6c 6f 63 28 76 6f 69 64 2a 2c  e3Realloc(void*,
242f0 20 75 36 34 29 3b 0a 76 6f 69 64 20 2a 73 71 6c   u64);.void *sql
24300 69 74 65 33 44 62 52 65 61 6c 6c 6f 63 4f 72 46  ite3DbReallocOrF
24310 72 65 65 28 73 71 6c 69 74 65 33 20 2a 2c 20 76  ree(sqlite3 *, v
24320 6f 69 64 20 2a 2c 20 75 36 34 29 3b 0a 76 6f 69  oid *, u64);.voi
24330 64 20 2a 73 71 6c 69 74 65 33 44 62 52 65 61 6c  d *sqlite3DbReal
24340 6c 6f 63 28 73 71 6c 69 74 65 33 20 2a 2c 20 76  loc(sqlite3 *, v
24350 6f 69 64 20 2a 2c 20 75 36 34 29 3b 0a 76 6f 69  oid *, u64);.voi
24360 64 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28  d sqlite3DbFree(
24370 73 71 6c 69 74 65 33 2a 2c 20 76 6f 69 64 2a 29  sqlite3*, void*)
24380 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4d 61 6c  ;.int sqlite3Mal
24390 6c 6f 63 53 69 7a 65 28 76 6f 69 64 2a 29 3b 0a  locSize(void*);.
243a0 69 6e 74 20 73 71 6c 69 74 65 33 44 62 4d 61 6c  int sqlite3DbMal
243b0 6c 6f 63 53 69 7a 65 28 73 71 6c 69 74 65 33 2a  locSize(sqlite3*
243c0 2c 20 76 6f 69 64 2a 29 3b 0a 76 6f 69 64 20 2a  , void*);.void *
243d0 73 71 6c 69 74 65 33 53 63 72 61 74 63 68 4d 61  sqlite3ScratchMa
243e0 6c 6c 6f 63 28 69 6e 74 29 3b 0a 76 6f 69 64 20  lloc(int);.void 
243f0 73 71 6c 69 74 65 33 53 63 72 61 74 63 68 46 72  sqlite3ScratchFr
24400 65 65 28 76 6f 69 64 2a 29 3b 0a 76 6f 69 64 20  ee(void*);.void 
24410 2a 73 71 6c 69 74 65 33 50 61 67 65 4d 61 6c 6c  *sqlite3PageMall
24420 6f 63 28 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  oc(int);.void sq
24430 6c 69 74 65 33 50 61 67 65 46 72 65 65 28 76 6f  lite3PageFree(vo
24440 69 64 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  id*);.void sqlit
24450 65 33 4d 65 6d 53 65 74 44 65 66 61 75 6c 74 28  e3MemSetDefault(
24460 76 6f 69 64 29 3b 0a 23 69 66 6e 64 65 66 20 53  void);.#ifndef S
24470 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 55 49 4c 54  QLITE_OMIT_BUILT
24480 49 4e 5f 54 45 53 54 0a 76 6f 69 64 20 73 71 6c  IN_TEST.void sql
24490 69 74 65 33 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63  ite3BenignMalloc
244a0 48 6f 6f 6b 73 28 76 6f 69 64 20 28 2a 29 28 76  Hooks(void (*)(v
244b0 6f 69 64 29 2c 20 76 6f 69 64 20 28 2a 29 28 76  oid), void (*)(v
244c0 6f 69 64 29 29 3b 0a 23 65 6e 64 69 66 0a 69 6e  oid));.#endif.in
244d0 74 20 73 71 6c 69 74 65 33 48 65 61 70 4e 65 61  t sqlite3HeapNea
244e0 72 6c 79 46 75 6c 6c 28 76 6f 69 64 29 3b 0a 0a  rlyFull(void);..
244f0 2f 2a 0a 2a 2a 20 4f 6e 20 73 79 73 74 65 6d 73  /*.** On systems
24500 20 77 69 74 68 20 61 6d 70 6c 65 20 73 74 61 63   with ample stac
24510 6b 20 73 70 61 63 65 20 61 6e 64 20 74 68 61 74  k space and that
24520 20 73 75 70 70 6f 72 74 20 61 6c 6c 6f 63 61 28   support alloca(
24530 29 2c 20 6d 61 6b 65 0a 2a 2a 20 75 73 65 20 6f  ), make.** use o
24540 66 20 61 6c 6c 6f 63 61 28 29 20 74 6f 20 6f 62  f alloca() to ob
24550 74 61 69 6e 20 73 70 61 63 65 20 66 6f 72 20 6c  tain space for l
24560 61 72 67 65 20 61 75 74 6f 6d 61 74 69 63 20 6f  arge automatic o
24570 62 6a 65 63 74 73 2e 20 20 42 79 20 64 65 66 61  bjects.  By defa
24580 75 6c 74 2c 0a 2a 2a 20 6f 62 74 61 69 6e 20 73  ult,.** obtain s
24590 70 61 63 65 20 66 72 6f 6d 20 6d 61 6c 6c 6f 63  pace from malloc
245a0 28 29 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 61 6c  ()..**.** The al
245b0 6c 6f 63 61 28 29 20 72 6f 75 74 69 6e 65 20 6e  loca() routine n
245c0 65 76 65 72 20 72 65 74 75 72 6e 73 20 4e 55 4c  ever returns NUL
245d0 4c 2e 20 20 54 68 69 73 20 77 69 6c 6c 20 63 61  L.  This will ca
245e0 75 73 65 20 63 6f 64 65 20 70 61 74 68 73 0a 2a  use code paths.*
245f0 2a 20 74 68 61 74 20 64 65 61 6c 20 77 69 74 68  * that deal with
24600 20 73 71 6c 69 74 65 33 53 74 61 63 6b 41 6c 6c   sqlite3StackAll
24610 6f 63 28 29 20 66 61 69 6c 75 72 65 73 20 74 6f  oc() failures to
24620 20 62 65 20 75 6e 72 65 61 63 68 61 62 6c 65 2e   be unreachable.
24630 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54  .*/.#ifdef SQLIT
24640 45 5f 55 53 45 5f 41 4c 4c 4f 43 41 0a 23 20 64  E_USE_ALLOCA.# d
24650 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74 61  efine sqlite3Sta
24660 63 6b 41 6c 6c 6f 63 52 61 77 28 44 2c 4e 29 20  ckAllocRaw(D,N) 
24670 20 20 61 6c 6c 6f 63 61 28 4e 29 0a 23 20 64 65    alloca(N).# de
24680 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74 61 63  fine sqlite3Stac
24690 6b 41 6c 6c 6f 63 5a 65 72 6f 28 44 2c 4e 29 20  kAllocZero(D,N) 
246a0 20 6d 65 6d 73 65 74 28 61 6c 6c 6f 63 61 28 4e   memset(alloca(N
246b0 29 2c 20 30 2c 20 4e 29 0a 23 20 64 65 66 69 6e  ), 0, N).# defin
246c0 65 20 73 71 6c 69 74 65 33 53 74 61 63 6b 46 72  e sqlite3StackFr
246d0 65 65 28 44 2c 50 29 0a 23 65 6c 73 65 0a 23 20  ee(D,P).#else.# 
246e0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74  define sqlite3St
246f0 61 63 6b 41 6c 6c 6f 63 52 61 77 28 44 2c 4e 29  ackAllocRaw(D,N)
24700 20 20 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c     sqlite3DbMall
24710 6f 63 52 61 77 28 44 2c 4e 29 0a 23 20 64 65 66  ocRaw(D,N).# def
24720 69 6e 65 20 73 71 6c 69 74 65 33 53 74 61 63 6b  ine sqlite3Stack
24730 41 6c 6c 6f 63 5a 65 72 6f 28 44 2c 4e 29 20 20  AllocZero(D,N)  
24740 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 5a  sqlite3DbMallocZ
24750 65 72 6f 28 44 2c 4e 29 0a 23 20 64 65 66 69 6e  ero(D,N).# defin
24760 65 20 73 71 6c 69 74 65 33 53 74 61 63 6b 46 72  e sqlite3StackFr
24770 65 65 28 44 2c 50 29 20 20 20 20 20 20 20 73 71  ee(D,P)       sq
24780 6c 69 74 65 33 44 62 46 72 65 65 28 44 2c 50 29  lite3DbFree(D,P)
24790 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20  .#endif..#ifdef 
247a0 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4d 45  SQLITE_ENABLE_ME
247b0 4d 53 59 53 33 0a 63 6f 6e 73 74 20 73 71 6c 69  MSYS3.const sqli
247c0 74 65 33 5f 6d 65 6d 5f 6d 65 74 68 6f 64 73 20  te3_mem_methods 
247d0 2a 73 71 6c 69 74 65 33 4d 65 6d 47 65 74 4d 65  *sqlite3MemGetMe
247e0 6d 73 79 73 33 28 76 6f 69 64 29 3b 0a 23 65 6e  msys3(void);.#en
247f0 64 69 66 0a 23 69 66 64 65 66 20 53 51 4c 49 54  dif.#ifdef SQLIT
24800 45 5f 45 4e 41 42 4c 45 5f 4d 45 4d 53 59 53 35  E_ENABLE_MEMSYS5
24810 0a 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d  .const sqlite3_m
24820 65 6d 5f 6d 65 74 68 6f 64 73 20 2a 73 71 6c 69  em_methods *sqli
24830 74 65 33 4d 65 6d 47 65 74 4d 65 6d 73 79 73 35  te3MemGetMemsys5
24840 28 76 6f 69 64 29 3b 0a 23 65 6e 64 69 66 0a 0a  (void);.#endif..
24850 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
24860 4d 55 54 45 58 5f 4f 4d 49 54 0a 20 20 73 71 6c  MUTEX_OMIT.  sql
24870 69 74 65 33 5f 6d 75 74 65 78 5f 6d 65 74 68 6f  ite3_mutex_metho
24880 64 73 20 63 6f 6e 73 74 20 2a 73 71 6c 69 74 65  ds const *sqlite
24890 33 44 65 66 61 75 6c 74 4d 75 74 65 78 28 76 6f  3DefaultMutex(vo
248a0 69 64 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f 6d  id);.  sqlite3_m
248b0 75 74 65 78 5f 6d 65 74 68 6f 64 73 20 63 6f 6e  utex_methods con
248c0 73 74 20 2a 73 71 6c 69 74 65 33 4e 6f 6f 70 4d  st *sqlite3NoopM
248d0 75 74 65 78 28 76 6f 69 64 29 3b 0a 20 20 73 71  utex(void);.  sq
248e0 6c 69 74 65 33 5f 6d 75 74 65 78 20 2a 73 71 6c  lite3_mutex *sql
248f0 69 74 65 33 4d 75 74 65 78 41 6c 6c 6f 63 28 69  ite3MutexAlloc(i
24900 6e 74 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74  nt);.  int sqlit
24910 65 33 4d 75 74 65 78 49 6e 69 74 28 76 6f 69 64  e3MutexInit(void
24920 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33  );.  int sqlite3
24930 4d 75 74 65 78 45 6e 64 28 76 6f 69 64 29 3b 0a  MutexEnd(void);.
24940 23 65 6e 64 69 66 0a 23 69 66 20 21 64 65 66 69  #endif.#if !defi
24950 6e 65 64 28 53 51 4c 49 54 45 5f 4d 55 54 45 58  ned(SQLITE_MUTEX
24960 5f 4f 4d 49 54 29 20 26 26 20 21 64 65 66 69 6e  _OMIT) && !defin
24970 65 64 28 53 51 4c 49 54 45 5f 4d 55 54 45 58 5f  ed(SQLITE_MUTEX_
24980 4e 4f 4f 50 29 0a 20 20 76 6f 69 64 20 73 71 6c  NOOP).  void sql
24990 69 74 65 33 4d 65 6d 6f 72 79 42 61 72 72 69 65  ite3MemoryBarrie
249a0 72 28 76 6f 69 64 29 3b 0a 23 65 6c 73 65 0a 23  r(void);.#else.#
249b0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 4d   define sqlite3M
249c0 65 6d 6f 72 79 42 61 72 72 69 65 72 28 29 0a 23  emoryBarrier().#
249d0 65 6e 64 69 66 0a 0a 73 71 6c 69 74 65 33 5f 69  endif..sqlite3_i
249e0 6e 74 36 34 20 73 71 6c 69 74 65 33 53 74 61 74  nt64 sqlite3Stat
249f0 75 73 56 61 6c 75 65 28 69 6e 74 29 3b 0a 76 6f  usValue(int);.vo
24a00 69 64 20 73 71 6c 69 74 65 33 53 74 61 74 75 73  id sqlite3Status
24a10 55 70 28 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f  Up(int, int);.vo
24a20 69 64 20 73 71 6c 69 74 65 33 53 74 61 74 75 73  id sqlite3Status
24a30 44 6f 77 6e 28 69 6e 74 2c 20 69 6e 74 29 3b 0a  Down(int, int);.
24a40 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74 61 74  void sqlite3Stat
24a50 75 73 48 69 67 68 77 61 74 65 72 28 69 6e 74 2c  usHighwater(int,
24a60 20 69 6e 74 29 3b 0a 0a 2f 2a 20 41 63 63 65 73   int);../* Acces
24a70 73 20 74 6f 20 6d 75 74 65 78 65 73 20 75 73 65  s to mutexes use
24a80 64 20 62 79 20 73 71 6c 69 74 65 33 5f 73 74 61  d by sqlite3_sta
24a90 74 75 73 28 29 20 2a 2f 0a 73 71 6c 69 74 65 33  tus() */.sqlite3
24aa0 5f 6d 75 74 65 78 20 2a 73 71 6c 69 74 65 33 50  _mutex *sqlite3P
24ab0 63 61 63 68 65 31 4d 75 74 65 78 28 76 6f 69 64  cache1Mutex(void
24ac0 29 3b 0a 73 71 6c 69 74 65 33 5f 6d 75 74 65 78  );.sqlite3_mutex
24ad0 20 2a 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 4d   *sqlite3MallocM
24ae0 75 74 65 78 28 76 6f 69 64 29 3b 0a 0a 23 69 66  utex(void);..#if
24af0 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
24b00 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 0a  _FLOATING_POINT.
24b10 20 20 69 6e 74 20 73 71 6c 69 74 65 33 49 73 4e    int sqlite3IsN
24b20 61 4e 28 64 6f 75 62 6c 65 29 3b 0a 23 65 6c 73  aN(double);.#els
24b30 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  e.# define sqlit
24b40 65 33 49 73 4e 61 4e 28 58 29 20 20 30 0a 23 65  e3IsNaN(X)  0.#e
24b50 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69  ndif../*.** An i
24b60 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66  nstance of the f
24b70 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75  ollowing structu
24b80 72 65 20 68 6f 6c 64 73 20 69 6e 66 6f 72 6d 61  re holds informa
24b90 74 69 6f 6e 20 61 62 6f 75 74 20 53 51 4c 0a 2a  tion about SQL.*
24ba0 2a 20 66 75 6e 63 74 69 6f 6e 73 20 61 72 67 75  * functions argu
24bb0 6d 65 6e 74 73 20 74 68 61 74 20 61 72 65 20 74  ments that are t
24bc0 68 65 20 70 61 72 61 6d 65 74 65 72 73 20 74 6f  he parameters to
24bd0 20 74 68 65 20 70 72 69 6e 74 66 28 29 20 66 75   the printf() fu
24be0 6e 63 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63  nction..*/.struc
24bf0 74 20 50 72 69 6e 74 66 41 72 67 75 6d 65 6e 74  t PrintfArgument
24c00 73 20 7b 0a 20 20 69 6e 74 20 6e 41 72 67 3b 20  s {.  int nArg; 
24c10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
24c20 2a 20 54 6f 74 61 6c 20 6e 75 6d 62 65 72 20 6f  * Total number o
24c30 66 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f 0a 20  f arguments */. 
24c40 20 69 6e 74 20 6e 55 73 65 64 3b 20 20 20 20 20   int nUsed;     
24c50 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
24c60 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73  ber of arguments
24c70 20 75 73 65 64 20 73 6f 20 66 61 72 20 2a 2f 0a   used so far */.
24c80 20 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20    sqlite3_value 
24c90 2a 2a 61 70 41 72 67 3b 20 20 20 2f 2a 20 54 68  **apArg;   /* Th
24ca0 65 20 61 72 67 75 6d 65 6e 74 20 76 61 6c 75 65  e argument value
24cb0 73 20 2a 2f 0a 7d 3b 0a 0a 76 6f 69 64 20 73 71  s */.};..void sq
24cc0 6c 69 74 65 33 56 58 50 72 69 6e 74 66 28 53 74  lite3VXPrintf(St
24cd0 72 41 63 63 75 6d 2a 2c 20 63 6f 6e 73 74 20 63  rAccum*, const c
24ce0 68 61 72 2a 2c 20 76 61 5f 6c 69 73 74 29 3b 0a  har*, va_list);.
24cf0 76 6f 69 64 20 73 71 6c 69 74 65 33 58 50 72 69  void sqlite3XPri
24d00 6e 74 66 28 53 74 72 41 63 63 75 6d 2a 2c 20 63  ntf(StrAccum*, c
24d10 6f 6e 73 74 20 63 68 61 72 2a 2c 20 2e 2e 2e 29  onst char*, ...)
24d20 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33 4d  ;.char *sqlite3M
24d30 50 72 69 6e 74 66 28 73 71 6c 69 74 65 33 2a 2c  Printf(sqlite3*,
24d40 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 2e 2e 2e  const char*, ...
24d50 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33  );.char *sqlite3
24d60 56 4d 50 72 69 6e 74 66 28 73 71 6c 69 74 65 33  VMPrintf(sqlite3
24d70 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 76  *,const char*, v
24d80 61 5f 6c 69 73 74 29 3b 0a 23 69 66 20 64 65 66  a_list);.#if def
24d90 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42 55  ined(SQLITE_DEBU
24da0 47 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 53 51  G) || defined(SQ
24db0 4c 49 54 45 5f 48 41 56 45 5f 4f 53 5f 54 52 41  LITE_HAVE_OS_TRA
24dc0 43 45 29 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  CE).  void sqlit
24dd0 65 33 44 65 62 75 67 50 72 69 6e 74 66 28 63 6f  e3DebugPrintf(co
24de0 6e 73 74 20 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b  nst char*, ...);
24df0 0a 23 65 6e 64 69 66 0a 23 69 66 20 64 65 66 69  .#endif.#if defi
24e00 6e 65 64 28 53 51 4c 49 54 45 5f 54 45 53 54 29  ned(SQLITE_TEST)
24e10 0a 20 20 76 6f 69 64 20 2a 73 71 6c 69 74 65 33  .  void *sqlite3
24e20 54 65 73 74 54 65 78 74 54 6f 50 74 72 28 63 6f  TestTextToPtr(co
24e30 6e 73 74 20 63 68 61 72 2a 29 3b 0a 23 65 6e 64  nst char*);.#end
24e40 69 66 0a 0a 23 69 66 20 64 65 66 69 6e 65 64 28  if..#if defined(
24e50 53 51 4c 49 54 45 5f 44 45 42 55 47 29 0a 20 20  SQLITE_DEBUG).  
24e60 76 6f 69 64 20 73 71 6c 69 74 65 33 54 72 65 65  void sqlite3Tree
24e70 56 69 65 77 45 78 70 72 28 54 72 65 65 56 69 65  ViewExpr(TreeVie
24e80 77 2a 2c 20 63 6f 6e 73 74 20 45 78 70 72 2a 2c  w*, const Expr*,
24e90 20 75 38 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c   u8);.  void sql
24ea0 69 74 65 33 54 72 65 65 56 69 65 77 45 78 70 72  ite3TreeViewExpr
24eb0 4c 69 73 74 28 54 72 65 65 56 69 65 77 2a 2c 20  List(TreeView*, 
24ec0 63 6f 6e 73 74 20 45 78 70 72 4c 69 73 74 2a 2c  const ExprList*,
24ed0 20 75 38 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a   u8, const char*
24ee0 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
24ef0 33 54 72 65 65 56 69 65 77 53 65 6c 65 63 74 28  3TreeViewSelect(
24f00 54 72 65 65 56 69 65 77 2a 2c 20 63 6f 6e 73 74  TreeView*, const
24f10 20 53 65 6c 65 63 74 2a 2c 20 75 38 29 3b 0a 20   Select*, u8);. 
24f20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 54 72 65   void sqlite3Tre
24f30 65 56 69 65 77 57 69 74 68 28 54 72 65 65 56 69  eViewWith(TreeVi
24f40 65 77 2a 2c 20 63 6f 6e 73 74 20 57 69 74 68 2a  ew*, const With*
24f50 2c 20 75 38 29 3b 0a 23 65 6e 64 69 66 0a 0a 0a  , u8);.#endif...
24f60 76 6f 69 64 20 73 71 6c 69 74 65 33 53 65 74 53  void sqlite3SetS
24f70 74 72 69 6e 67 28 63 68 61 72 20 2a 2a 2c 20 73  tring(char **, s
24f80 71 6c 69 74 65 33 2a 2c 20 63 6f 6e 73 74 20 63  qlite3*, const c
24f90 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  har*);.void sqli
24fa0 74 65 33 45 72 72 6f 72 4d 73 67 28 50 61 72 73  te3ErrorMsg(Pars
24fb0 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c  e*, const char*,
24fc0 20 2e 2e 2e 29 3b 0a 76 6f 69 64 20 73 71 6c 69   ...);.void sqli
24fd0 74 65 33 44 65 71 75 6f 74 65 28 63 68 61 72 2a  te3Dequote(char*
24fe0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 54  );.void sqlite3T
24ff0 6f 6b 65 6e 49 6e 69 74 28 54 6f 6b 65 6e 2a 2c  okenInit(Token*,
25000 63 68 61 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  char*);.int sqli
25010 74 65 33 4b 65 79 77 6f 72 64 43 6f 64 65 28 63  te3KeywordCode(c
25020 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68  onst unsigned ch
25030 61 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73  ar*, int);.int s
25040 71 6c 69 74 65 33 52 75 6e 50 61 72 73 65 72 28  qlite3RunParser(
25050 50 61 72 73 65 2a 2c 20 63 6f 6e 73 74 20 63 68  Parse*, const ch
25060 61 72 2a 2c 20 63 68 61 72 20 2a 2a 29 3b 0a 76  ar*, char **);.v
25070 6f 69 64 20 73 71 6c 69 74 65 33 46 69 6e 69 73  oid sqlite3Finis
25080 68 43 6f 64 69 6e 67 28 50 61 72 73 65 2a 29 3b  hCoding(Parse*);
25090 0a 69 6e 74 20 73 71 6c 69 74 65 33 47 65 74 54  .int sqlite3GetT
250a0 65 6d 70 52 65 67 28 50 61 72 73 65 2a 29 3b 0a  empReg(Parse*);.
250b0 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 6c 65  void sqlite3Rele
250c0 61 73 65 54 65 6d 70 52 65 67 28 50 61 72 73 65  aseTempReg(Parse
250d0 2a 2c 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69  *,int);.int sqli
250e0 74 65 33 47 65 74 54 65 6d 70 52 61 6e 67 65 28  te3GetTempRange(
250f0 50 61 72 73 65 2a 2c 69 6e 74 29 3b 0a 76 6f 69  Parse*,int);.voi
25100 64 20 73 71 6c 69 74 65 33 52 65 6c 65 61 73 65  d sqlite3Release
25110 54 65 6d 70 52 61 6e 67 65 28 50 61 72 73 65 2a  TempRange(Parse*
25120 2c 69 6e 74 2c 69 6e 74 29 3b 0a 76 6f 69 64 20  ,int,int);.void 
25130 73 71 6c 69 74 65 33 43 6c 65 61 72 54 65 6d 70  sqlite3ClearTemp
25140 52 65 67 43 61 63 68 65 28 50 61 72 73 65 2a 29  RegCache(Parse*)
25150 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ;.#ifdef SQLITE_
25160 44 45 42 55 47 0a 69 6e 74 20 73 71 6c 69 74 65  DEBUG.int sqlite
25170 33 4e 6f 54 65 6d 70 73 49 6e 52 61 6e 67 65 28  3NoTempsInRange(
25180 50 61 72 73 65 2a 2c 69 6e 74 2c 69 6e 74 29 3b  Parse*,int,int);
25190 0a 23 65 6e 64 69 66 0a 45 78 70 72 20 2a 73 71  .#endif.Expr *sq
251a0 6c 69 74 65 33 45 78 70 72 41 6c 6c 6f 63 28 73  lite3ExprAlloc(s
251b0 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73  qlite3*,int,cons
251c0 74 20 54 6f 6b 65 6e 2a 2c 69 6e 74 29 3b 0a 45  t Token*,int);.E
251d0 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72  xpr *sqlite3Expr
251e0 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 63 6f  (sqlite3*,int,co
251f0 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64  nst char*);.void
25200 20 73 71 6c 69 74 65 33 45 78 70 72 41 74 74 61   sqlite3ExprAtta
25210 63 68 53 75 62 74 72 65 65 73 28 73 71 6c 69 74  chSubtrees(sqlit
25220 65 33 2a 2c 45 78 70 72 2a 2c 45 78 70 72 2a 2c  e3*,Expr*,Expr*,
25230 45 78 70 72 2a 29 3b 0a 45 78 70 72 20 2a 73 71  Expr*);.Expr *sq
25240 6c 69 74 65 33 50 45 78 70 72 28 50 61 72 73 65  lite3PExpr(Parse
25250 2a 2c 20 69 6e 74 2c 20 45 78 70 72 2a 2c 20 45  *, int, Expr*, E
25260 78 70 72 2a 2c 20 63 6f 6e 73 74 20 54 6f 6b 65  xpr*, const Toke
25270 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  n*);.void sqlite
25280 33 50 45 78 70 72 41 64 64 53 65 6c 65 63 74 28  3PExprAddSelect(
25290 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 53  Parse*, Expr*, S
252a0 65 6c 65 63 74 2a 29 3b 0a 45 78 70 72 20 2a 73  elect*);.Expr *s
252b0 71 6c 69 74 65 33 45 78 70 72 41 6e 64 28 73 71  qlite3ExprAnd(sq
252c0 6c 69 74 65 33 2a 2c 45 78 70 72 2a 2c 20 45 78  lite3*,Expr*, Ex
252d0 70 72 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69  pr*);.Expr *sqli
252e0 74 65 33 45 78 70 72 46 75 6e 63 74 69 6f 6e 28  te3ExprFunction(
252f0 50 61 72 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a  Parse*,ExprList*
25300 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20  , Token*);.void 
25310 73 71 6c 69 74 65 33 45 78 70 72 41 73 73 69 67  sqlite3ExprAssig
25320 6e 56 61 72 4e 75 6d 62 65 72 28 50 61 72 73 65  nVarNumber(Parse
25330 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20  *, Expr*);.void 
25340 73 71 6c 69 74 65 33 45 78 70 72 44 65 6c 65 74  sqlite3ExprDelet
25350 65 28 73 71 6c 69 74 65 33 2a 2c 20 45 78 70 72  e(sqlite3*, Expr
25360 2a 29 3b 0a 45 78 70 72 4c 69 73 74 20 2a 73 71  *);.ExprList *sq
25370 6c 69 74 65 33 45 78 70 72 4c 69 73 74 41 70 70  lite3ExprListApp
25380 65 6e 64 28 50 61 72 73 65 2a 2c 45 78 70 72 4c  end(Parse*,ExprL
25390 69 73 74 2a 2c 45 78 70 72 2a 29 3b 0a 76 6f 69  ist*,Expr*);.voi
253a0 64 20 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73  d sqlite3ExprLis
253b0 74 53 65 74 53 6f 72 74 4f 72 64 65 72 28 45 78  tSetSortOrder(Ex
253c0 70 72 4c 69 73 74 2a 2c 69 6e 74 29 3b 0a 76 6f  prList*,int);.vo
253d0 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 4c 69  id sqlite3ExprLi
253e0 73 74 53 65 74 4e 61 6d 65 28 50 61 72 73 65 2a  stSetName(Parse*
253f0 2c 45 78 70 72 4c 69 73 74 2a 2c 54 6f 6b 65 6e  ,ExprList*,Token
25400 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  *,int);.void sql
25410 69 74 65 33 45 78 70 72 4c 69 73 74 53 65 74 53  ite3ExprListSetS
25420 70 61 6e 28 50 61 72 73 65 2a 2c 45 78 70 72 4c  pan(Parse*,ExprL
25430 69 73 74 2a 2c 45 78 70 72 53 70 61 6e 2a 29 3b  ist*,ExprSpan*);
25440 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
25450 72 4c 69 73 74 44 65 6c 65 74 65 28 73 71 6c 69  rListDelete(sqli
25460 74 65 33 2a 2c 20 45 78 70 72 4c 69 73 74 2a 29  te3*, ExprList*)
25470 3b 0a 75 33 32 20 73 71 6c 69 74 65 33 45 78 70  ;.u32 sqlite3Exp
25480 72 4c 69 73 74 46 6c 61 67 73 28 63 6f 6e 73 74  rListFlags(const
25490 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74   ExprList*);.int
254a0 20 73 71 6c 69 74 65 33 49 6e 69 74 28 73 71 6c   sqlite3Init(sql
254b0 69 74 65 33 2a 2c 20 63 68 61 72 2a 2a 29 3b 0a  ite3*, char**);.
254c0 69 6e 74 20 73 71 6c 69 74 65 33 49 6e 69 74 43  int sqlite3InitC
254d0 61 6c 6c 62 61 63 6b 28 76 6f 69 64 2a 2c 20 69  allback(void*, i
254e0 6e 74 2c 20 63 68 61 72 2a 2a 2c 20 63 68 61 72  nt, char**, char
254f0 2a 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  **);.void sqlite
25500 33 50 72 61 67 6d 61 28 50 61 72 73 65 2a 2c 54  3Pragma(Parse*,T
25510 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b  oken*,Token*,Tok
25520 65 6e 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73  en*,int);.void s
25530 71 6c 69 74 65 33 52 65 73 65 74 41 6c 6c 53 63  qlite3ResetAllSc
25540 68 65 6d 61 73 4f 66 43 6f 6e 6e 65 63 74 69 6f  hemasOfConnectio
25550 6e 28 73 71 6c 69 74 65 33 2a 29 3b 0a 76 6f 69  n(sqlite3*);.voi
25560 64 20 73 71 6c 69 74 65 33 52 65 73 65 74 4f 6e  d sqlite3ResetOn
25570 65 53 63 68 65 6d 61 28 73 71 6c 69 74 65 33 2a  eSchema(sqlite3*
25580 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ,int);.void sqli
25590 74 65 33 43 6f 6c 6c 61 70 73 65 44 61 74 61 62  te3CollapseDatab
255a0 61 73 65 41 72 72 61 79 28 73 71 6c 69 74 65 33  aseArray(sqlite3
255b0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
255c0 43 6f 6d 6d 69 74 49 6e 74 65 72 6e 61 6c 43 68  CommitInternalCh
255d0 61 6e 67 65 73 28 73 71 6c 69 74 65 33 2a 29 3b  anges(sqlite3*);
255e0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65 6c  .void sqlite3Del
255f0 65 74 65 43 6f 6c 75 6d 6e 4e 61 6d 65 73 28 73  eteColumnNames(s
25600 71 6c 69 74 65 33 2a 2c 54 61 62 6c 65 2a 29 3b  qlite3*,Table*);
25610 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 6f 6c 75  .int sqlite3Colu
25620 6d 6e 73 46 72 6f 6d 45 78 70 72 4c 69 73 74 28  mnsFromExprList(
25630 50 61 72 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a  Parse*,ExprList*
25640 2c 69 31 36 2a 2c 43 6f 6c 75 6d 6e 2a 2a 29 3b  ,i16*,Column**);
25650 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 65 6c  .void sqlite3Sel
25660 65 63 74 41 64 64 43 6f 6c 75 6d 6e 54 79 70 65  ectAddColumnType
25670 41 6e 64 43 6f 6c 6c 61 74 69 6f 6e 28 50 61 72  AndCollation(Par
25680 73 65 2a 2c 54 61 62 6c 65 2a 2c 53 65 6c 65 63  se*,Table*,Selec
25690 74 2a 29 3b 0a 54 61 62 6c 65 20 2a 73 71 6c 69  t*);.Table *sqli
256a0 74 65 33 52 65 73 75 6c 74 53 65 74 4f 66 53 65  te3ResultSetOfSe
256b0 6c 65 63 74 28 50 61 72 73 65 2a 2c 53 65 6c 65  lect(Parse*,Sele
256c0 63 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  ct*);.void sqlit
256d0 65 33 4f 70 65 6e 4d 61 73 74 65 72 54 61 62 6c  e3OpenMasterTabl
256e0 65 28 50 61 72 73 65 20 2a 2c 20 69 6e 74 29 3b  e(Parse *, int);
256f0 0a 49 6e 64 65 78 20 2a 73 71 6c 69 74 65 33 50  .Index *sqlite3P
25700 72 69 6d 61 72 79 4b 65 79 49 6e 64 65 78 28 54  rimaryKeyIndex(T
25710 61 62 6c 65 2a 29 3b 0a 69 31 36 20 73 71 6c 69  able*);.i16 sqli
25720 74 65 33 43 6f 6c 75 6d 6e 4f 66 49 6e 64 65 78  te3ColumnOfIndex
25730 28 49 6e 64 65 78 2a 2c 20 69 31 36 29 3b 0a 76  (Index*, i16);.v
25740 6f 69 64 20 73 71 6c 69 74 65 33 53 74 61 72 74  oid sqlite3Start
25750 54 61 62 6c 65 28 50 61 72 73 65 2a 2c 54 6f 6b  Table(Parse*,Tok
25760 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 69 6e 74 2c 69  en*,Token*,int,i
25770 6e 74 2c 69 6e 74 2c 69 6e 74 29 3b 0a 23 69 66  nt,int,int);.#if
25780 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 48   SQLITE_ENABLE_H
25790 49 44 44 45 4e 5f 43 4f 4c 55 4d 4e 53 0a 20 20  IDDEN_COLUMNS.  
257a0 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6c 75  void sqlite3Colu
257b0 6d 6e 50 72 6f 70 65 72 74 69 65 73 46 72 6f 6d  mnPropertiesFrom
257c0 4e 61 6d 65 28 54 61 62 6c 65 2a 2c 20 43 6f 6c  Name(Table*, Col
257d0 75 6d 6e 2a 29 3b 0a 23 65 6c 73 65 0a 23 20 64  umn*);.#else.# d
257e0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 43 6f 6c  efine sqlite3Col
257f0 75 6d 6e 50 72 6f 70 65 72 74 69 65 73 46 72 6f  umnPropertiesFro
25800 6d 4e 61 6d 65 28 54 2c 43 29 20 2f 2a 20 6e 6f  mName(T,C) /* no
25810 2d 6f 70 20 2a 2f 0a 23 65 6e 64 69 66 0a 76 6f  -op */.#endif.vo
25820 69 64 20 73 71 6c 69 74 65 33 41 64 64 43 6f 6c  id sqlite3AddCol
25830 75 6d 6e 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e  umn(Parse*,Token
25840 2a 2c 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20  *,Token*);.void 
25850 73 71 6c 69 74 65 33 41 64 64 4e 6f 74 4e 75 6c  sqlite3AddNotNul
25860 6c 28 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a  l(Parse*, int);.
25870 76 6f 69 64 20 73 71 6c 69 74 65 33 41 64 64 50  void sqlite3AddP
25880 72 69 6d 61 72 79 4b 65 79 28 50 61 72 73 65 2a  rimaryKey(Parse*
25890 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74  , ExprList*, int
258a0 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69  , int, int);.voi
258b0 64 20 73 71 6c 69 74 65 33 41 64 64 43 68 65 63  d sqlite3AddChec
258c0 6b 43 6f 6e 73 74 72 61 69 6e 74 28 50 61 72 73  kConstraint(Pars
258d0 65 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64  e*, Expr*);.void
258e0 20 73 71 6c 69 74 65 33 41 64 64 44 65 66 61 75   sqlite3AddDefau
258f0 6c 74 56 61 6c 75 65 28 50 61 72 73 65 2a 2c 45  ltValue(Parse*,E
25900 78 70 72 53 70 61 6e 2a 29 3b 0a 76 6f 69 64 20  xprSpan*);.void 
25910 73 71 6c 69 74 65 33 41 64 64 43 6f 6c 6c 61 74  sqlite3AddCollat
25920 65 54 79 70 65 28 50 61 72 73 65 2a 2c 20 54 6f  eType(Parse*, To
25930 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ken*);.void sqli
25940 74 65 33 45 6e 64 54 61 62 6c 65 28 50 61 72 73  te3EndTable(Pars
25950 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a  e*,Token*,Token*
25960 2c 75 38 2c 53 65 6c 65 63 74 2a 29 3b 0a 69 6e  ,u8,Select*);.in
25970 74 20 73 71 6c 69 74 65 33 50 61 72 73 65 55 72  t sqlite3ParseUr
25980 69 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f  i(const char*,co
25990 6e 73 74 20 63 68 61 72 2a 2c 75 6e 73 69 67 6e  nst char*,unsign
259a0 65 64 20 69 6e 74 2a 2c 0a 20 20 20 20 20 20 20  ed int*,.       
259b0 20 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c               sql
259c0 69 74 65 33 5f 76 66 73 2a 2a 2c 63 68 61 72 2a  ite3_vfs**,char*
259d0 2a 2c 63 68 61 72 20 2a 2a 29 3b 0a 42 74 72 65  *,char **);.Btre
259e0 65 20 2a 73 71 6c 69 74 65 33 44 62 4e 61 6d 65  e *sqlite3DbName
259f0 54 6f 42 74 72 65 65 28 73 71 6c 69 74 65 33 2a  ToBtree(sqlite3*
25a00 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 69  ,const char*);.i
25a10 6e 74 20 73 71 6c 69 74 65 33 43 6f 64 65 4f 6e  nt sqlite3CodeOn
25a20 63 65 28 50 61 72 73 65 20 2a 29 3b 0a 0a 23 69  ce(Parse *);..#i
25a30 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  fdef SQLITE_OMIT
25a40 5f 42 55 49 4c 54 49 4e 5f 54 45 53 54 0a 23 20  _BUILTIN_TEST.# 
25a50 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46 61  define sqlite3Fa
25a60 75 6c 74 53 69 6d 28 58 29 20 53 51 4c 49 54 45  ultSim(X) SQLITE
25a70 5f 4f 4b 0a 23 65 6c 73 65 0a 20 20 69 6e 74 20  _OK.#else.  int 
25a80 73 71 6c 69 74 65 33 46 61 75 6c 74 53 69 6d 28  sqlite3FaultSim(
25a90 69 6e 74 29 3b 0a 23 65 6e 64 69 66 0a 0a 42 69  int);.#endif..Bi
25aa0 74 76 65 63 20 2a 73 71 6c 69 74 65 33 42 69 74  tvec *sqlite3Bit
25ab0 76 65 63 43 72 65 61 74 65 28 75 33 32 29 3b 0a  vecCreate(u32);.
25ac0 69 6e 74 20 73 71 6c 69 74 65 33 42 69 74 76 65  int sqlite3Bitve
25ad0 63 54 65 73 74 28 42 69 74 76 65 63 2a 2c 20 75  cTest(Bitvec*, u
25ae0 33 32 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  32);.int sqlite3
25af0 42 69 74 76 65 63 54 65 73 74 4e 6f 74 4e 75 6c  BitvecTestNotNul
25b00 6c 28 42 69 74 76 65 63 2a 2c 20 75 33 32 29 3b  l(Bitvec*, u32);
25b10 0a 69 6e 74 20 73 71 6c 69 74 65 33 42 69 74 76  .int sqlite3Bitv
25b20 65 63 53 65 74 28 42 69 74 76 65 63 2a 2c 20 75  ecSet(Bitvec*, u
25b30 33 32 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  32);.void sqlite
25b40 33 42 69 74 76 65 63 43 6c 65 61 72 28 42 69 74  3BitvecClear(Bit
25b50 76 65 63 2a 2c 20 75 33 32 2c 20 76 6f 69 64 2a  vec*, u32, void*
25b60 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42  );.void sqlite3B
25b70 69 74 76 65 63 44 65 73 74 72 6f 79 28 42 69 74  itvecDestroy(Bit
25b80 76 65 63 2a 29 3b 0a 75 33 32 20 73 71 6c 69 74  vec*);.u32 sqlit
25b90 65 33 42 69 74 76 65 63 53 69 7a 65 28 42 69 74  e3BitvecSize(Bit
25ba0 76 65 63 2a 29 3b 0a 23 69 66 6e 64 65 66 20 53  vec*);.#ifndef S
25bb0 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 55 49 4c 54  QLITE_OMIT_BUILT
25bc0 49 4e 5f 54 45 53 54 0a 69 6e 74 20 73 71 6c 69  IN_TEST.int sqli
25bd0 74 65 33 42 69 74 76 65 63 42 75 69 6c 74 69 6e  te3BitvecBuiltin
25be0 54 65 73 74 28 69 6e 74 2c 69 6e 74 2a 29 3b 0a  Test(int,int*);.
25bf0 23 65 6e 64 69 66 0a 0a 52 6f 77 53 65 74 20 2a  #endif..RowSet *
25c00 73 71 6c 69 74 65 33 52 6f 77 53 65 74 49 6e 69  sqlite3RowSetIni
25c10 74 28 73 71 6c 69 74 65 33 2a 2c 20 76 6f 69 64  t(sqlite3*, void
25c20 2a 2c 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 29  *, unsigned int)
25c30 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 6f  ;.void sqlite3Ro
25c40 77 53 65 74 43 6c 65 61 72 28 52 6f 77 53 65 74  wSetClear(RowSet
25c50 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
25c60 52 6f 77 53 65 74 49 6e 73 65 72 74 28 52 6f 77  RowSetInsert(Row
25c70 53 65 74 2a 2c 20 69 36 34 29 3b 0a 69 6e 74 20  Set*, i64);.int 
25c80 73 71 6c 69 74 65 33 52 6f 77 53 65 74 54 65 73  sqlite3RowSetTes
25c90 74 28 52 6f 77 53 65 74 2a 2c 20 69 6e 74 20 69  t(RowSet*, int i
25ca0 42 61 74 63 68 2c 20 69 36 34 29 3b 0a 69 6e 74  Batch, i64);.int
25cb0 20 73 71 6c 69 74 65 33 52 6f 77 53 65 74 4e 65   sqlite3RowSetNe
25cc0 78 74 28 52 6f 77 53 65 74 2a 2c 20 69 36 34 2a  xt(RowSet*, i64*
25cd0 29 3b 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  );..void sqlite3
25ce0 43 72 65 61 74 65 56 69 65 77 28 50 61 72 73 65  CreateView(Parse
25cf0 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c  *,Token*,Token*,
25d00 54 6f 6b 65 6e 2a 2c 45 78 70 72 4c 69 73 74 2a  Token*,ExprList*
25d10 2c 53 65 6c 65 63 74 2a 2c 69 6e 74 2c 69 6e 74  ,Select*,int,int
25d20 29 3b 0a 0a 23 69 66 20 21 64 65 66 69 6e 65 64  );..#if !defined
25d30 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 45  (SQLITE_OMIT_VIE
25d40 57 29 20 7c 7c 20 21 64 65 66 69 6e 65 64 28 53  W) || !defined(S
25d50 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
25d60 41 4c 54 41 42 4c 45 29 0a 20 20 69 6e 74 20 73  ALTABLE).  int s
25d70 71 6c 69 74 65 33 56 69 65 77 47 65 74 43 6f 6c  qlite3ViewGetCol
25d80 75 6d 6e 4e 61 6d 65 73 28 50 61 72 73 65 2a 2c  umnNames(Parse*,
25d90 54 61 62 6c 65 2a 29 3b 0a 23 65 6c 73 65 0a 23  Table*);.#else.#
25da0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56   define sqlite3V
25db0 69 65 77 47 65 74 43 6f 6c 75 6d 6e 4e 61 6d 65  iewGetColumnName
25dc0 73 28 41 2c 42 29 20 30 0a 23 65 6e 64 69 66 0a  s(A,B) 0.#endif.
25dd0 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f  .#if SQLITE_MAX_
25de0 41 54 54 41 43 48 45 44 3e 33 30 0a 20 20 69 6e  ATTACHED>30.  in
25df0 74 20 73 71 6c 69 74 65 33 44 62 4d 61 73 6b 41  t sqlite3DbMaskA
25e00 6c 6c 5a 65 72 6f 28 79 44 62 4d 61 73 6b 29 3b  llZero(yDbMask);
25e10 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c  .#endif.void sql
25e20 69 74 65 33 44 72 6f 70 54 61 62 6c 65 28 50 61  ite3DropTable(Pa
25e30 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20  rse*, SrcList*, 
25e40 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  int, int);.void 
25e50 73 71 6c 69 74 65 33 43 6f 64 65 44 72 6f 70 54  sqlite3CodeDropT
25e60 61 62 6c 65 28 50 61 72 73 65 2a 2c 20 54 61 62  able(Parse*, Tab
25e70 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  le*, int, int);.
25e80 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65 6c 65  void sqlite3Dele
25e90 74 65 54 61 62 6c 65 28 73 71 6c 69 74 65 33 2a  teTable(sqlite3*
25ea0 2c 20 54 61 62 6c 65 2a 29 3b 0a 23 69 66 6e 64  , Table*);.#ifnd
25eb0 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41  ef SQLITE_OMIT_A
25ec0 55 54 4f 49 4e 43 52 45 4d 45 4e 54 0a 20 20 76  UTOINCREMENT.  v
25ed0 6f 69 64 20 73 71 6c 69 74 65 33 41 75 74 6f 69  oid sqlite3Autoi
25ee0 6e 63 72 65 6d 65 6e 74 42 65 67 69 6e 28 50 61  ncrementBegin(Pa
25ef0 72 73 65 20 2a 70 50 61 72 73 65 29 3b 0a 20 20  rse *pParse);.  
25f00 76 6f 69 64 20 73 71 6c 69 74 65 33 41 75 74 6f  void sqlite3Auto
25f10 69 6e 63 72 65 6d 65 6e 74 45 6e 64 28 50 61 72  incrementEnd(Par
25f20 73 65 20 2a 70 50 61 72 73 65 29 3b 0a 23 65 6c  se *pParse);.#el
25f30 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  se.# define sqli
25f40 74 65 33 41 75 74 6f 69 6e 63 72 65 6d 65 6e 74  te3Autoincrement
25f50 42 65 67 69 6e 28 58 29 0a 23 20 64 65 66 69 6e  Begin(X).# defin
25f60 65 20 73 71 6c 69 74 65 33 41 75 74 6f 69 6e 63  e sqlite3Autoinc
25f70 72 65 6d 65 6e 74 45 6e 64 28 58 29 0a 23 65 6e  rementEnd(X).#en
25f80 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  dif.void sqlite3
25f90 49 6e 73 65 72 74 28 50 61 72 73 65 2a 2c 20 53  Insert(Parse*, S
25fa0 72 63 4c 69 73 74 2a 2c 20 53 65 6c 65 63 74 2a  rcList*, Select*
25fb0 2c 20 49 64 4c 69 73 74 2a 2c 20 69 6e 74 29 3b  , IdList*, int);
25fc0 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 41 72  .void *sqlite3Ar
25fd0 72 61 79 41 6c 6c 6f 63 61 74 65 28 73 71 6c 69  rayAllocate(sqli
25fe0 74 65 33 2a 2c 76 6f 69 64 2a 2c 69 6e 74 2c 69  te3*,void*,int,i
25ff0 6e 74 2a 2c 69 6e 74 2a 29 3b 0a 49 64 4c 69 73  nt*,int*);.IdLis
26000 74 20 2a 73 71 6c 69 74 65 33 49 64 4c 69 73 74  t *sqlite3IdList
26010 41 70 70 65 6e 64 28 73 71 6c 69 74 65 33 2a 2c  Append(sqlite3*,
26020 20 49 64 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a   IdList*, Token*
26030 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 64  );.int sqlite3Id
26040 4c 69 73 74 49 6e 64 65 78 28 49 64 4c 69 73 74  ListIndex(IdList
26050 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  *,const char*);.
26060 53 72 63 4c 69 73 74 20 2a 73 71 6c 69 74 65 33  SrcList *sqlite3
26070 53 72 63 4c 69 73 74 45 6e 6c 61 72 67 65 28 73  SrcListEnlarge(s
26080 71 6c 69 74 65 33 2a 2c 20 53 72 63 4c 69 73 74  qlite3*, SrcList
26090 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 53 72  *, int, int);.Sr
260a0 63 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 53 72  cList *sqlite3Sr
260b0 63 4c 69 73 74 41 70 70 65 6e 64 28 73 71 6c 69  cListAppend(sqli
260c0 74 65 33 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20  te3*, SrcList*, 
260d0 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 29 3b  Token*, Token*);
260e0 0a 53 72 63 4c 69 73 74 20 2a 73 71 6c 69 74 65  .SrcList *sqlite
260f0 33 53 72 63 4c 69 73 74 41 70 70 65 6e 64 46 72  3SrcListAppendFr
26100 6f 6d 54 65 72 6d 28 50 61 72 73 65 2a 2c 20 53  omTerm(Parse*, S
26110 72 63 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 2c  rcList*, Token*,
26120 20 54 6f 6b 65 6e 2a 2c 0a 20 20 20 20 20 20 20   Token*,.       
26130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
26150 6f 6b 65 6e 2a 2c 20 53 65 6c 65 63 74 2a 2c 20  oken*, Select*, 
26160 45 78 70 72 2a 2c 20 49 64 4c 69 73 74 2a 29 3b  Expr*, IdList*);
26170 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 72 63  .void sqlite3Src
26180 4c 69 73 74 49 6e 64 65 78 65 64 42 79 28 50 61  ListIndexedBy(Pa
26190 72 73 65 20 2a 2c 20 53 72 63 4c 69 73 74 20 2a  rse *, SrcList *
261a0 2c 20 54 6f 6b 65 6e 20 2a 29 3b 0a 76 6f 69 64  , Token *);.void
261b0 20 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74 46   sqlite3SrcListF
261c0 75 6e 63 41 72 67 73 28 50 61 72 73 65 2a 2c 20  uncArgs(Parse*, 
261d0 53 72 63 4c 69 73 74 2a 2c 20 45 78 70 72 4c 69  SrcList*, ExprLi
261e0 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  st*);.int sqlite
261f0 33 49 6e 64 65 78 65 64 42 79 4c 6f 6f 6b 75 70  3IndexedByLookup
26200 28 50 61 72 73 65 20 2a 2c 20 73 74 72 75 63 74  (Parse *, struct
26210 20 53 72 63 4c 69 73 74 5f 69 74 65 6d 20 2a 29   SrcList_item *)
26220 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 72  ;.void sqlite3Sr
26230 63 4c 69 73 74 53 68 69 66 74 4a 6f 69 6e 54 79  cListShiftJoinTy
26240 70 65 28 53 72 63 4c 69 73 74 2a 29 3b 0a 76 6f  pe(SrcList*);.vo
26250 69 64 20 73 71 6c 69 74 65 33 53 72 63 4c 69 73  id sqlite3SrcLis
26260 74 41 73 73 69 67 6e 43 75 72 73 6f 72 73 28 50  tAssignCursors(P
26270 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 29  arse*, SrcList*)
26280 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 49 64  ;.void sqlite3Id
26290 4c 69 73 74 44 65 6c 65 74 65 28 73 71 6c 69 74  ListDelete(sqlit
262a0 65 33 2a 2c 20 49 64 4c 69 73 74 2a 29 3b 0a 76  e3*, IdList*);.v
262b0 6f 69 64 20 73 71 6c 69 74 65 33 53 72 63 4c 69  oid sqlite3SrcLi
262c0 73 74 44 65 6c 65 74 65 28 73 71 6c 69 74 65 33  stDelete(sqlite3
262d0 2a 2c 20 53 72 63 4c 69 73 74 2a 29 3b 0a 49 6e  *, SrcList*);.In
262e0 64 65 78 20 2a 73 71 6c 69 74 65 33 41 6c 6c 6f  dex *sqlite3Allo
262f0 63 61 74 65 49 6e 64 65 78 4f 62 6a 65 63 74 28  cateIndexObject(
26300 73 71 6c 69 74 65 33 2a 2c 69 31 36 2c 69 6e 74  sqlite3*,i16,int
26310 2c 63 68 61 72 2a 2a 29 3b 0a 76 6f 69 64 20 73  ,char**);.void s
26320 71 6c 69 74 65 33 43 72 65 61 74 65 49 6e 64 65  qlite3CreateInde
26330 78 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c  x(Parse*,Token*,
26340 54 6f 6b 65 6e 2a 2c 53 72 63 4c 69 73 74 2a 2c  Token*,SrcList*,
26350 45 78 70 72 4c 69 73 74 2a 2c 69 6e 74 2c 54 6f  ExprList*,int,To
26360 6b 65 6e 2a 2c 0a 20 20 20 20 20 20 20 20 20 20  ken*,.          
26370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26380 45 78 70 72 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c  Expr*, int, int,
26390 20 75 38 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74   u8);.void sqlit
263a0 65 33 44 72 6f 70 49 6e 64 65 78 28 50 61 72 73  e3DropIndex(Pars
263b0 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 69 6e  e*, SrcList*, in
263c0 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53  t);.int sqlite3S
263d0 65 6c 65 63 74 28 50 61 72 73 65 2a 2c 20 53 65  elect(Parse*, Se
263e0 6c 65 63 74 2a 2c 20 53 65 6c 65 63 74 44 65 73  lect*, SelectDes
263f0 74 2a 29 3b 0a 53 65 6c 65 63 74 20 2a 73 71 6c  t*);.Select *sql
26400 69 74 65 33 53 65 6c 65 63 74 4e 65 77 28 50 61  ite3SelectNew(Pa
26410 72 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 53  rse*,ExprList*,S
26420 72 63 4c 69 73 74 2a 2c 45 78 70 72 2a 2c 45 78  rcList*,Expr*,Ex
26430 70 72 4c 69 73 74 2a 2c 0a 20 20 20 20 20 20 20  prList*,.       
26440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26450 20 20 45 78 70 72 2a 2c 45 78 70 72 4c 69 73 74    Expr*,ExprList
26460 2a 2c 75 33 32 2c 45 78 70 72 2a 2c 45 78 70 72  *,u32,Expr*,Expr
26470 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
26480 53 65 6c 65 63 74 44 65 6c 65 74 65 28 73 71 6c  SelectDelete(sql
26490 69 74 65 33 2a 2c 20 53 65 6c 65 63 74 2a 29 3b  ite3*, Select*);
264a0 0a 54 61 62 6c 65 20 2a 73 71 6c 69 74 65 33 53  .Table *sqlite3S
264b0 72 63 4c 69 73 74 4c 6f 6f 6b 75 70 28 50 61 72  rcListLookup(Par
264c0 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 29 3b 0a  se*, SrcList*);.
264d0 69 6e 74 20 73 71 6c 69 74 65 33 49 73 52 65 61  int sqlite3IsRea
264e0 64 4f 6e 6c 79 28 50 61 72 73 65 2a 2c 20 54 61  dOnly(Parse*, Ta
264f0 62 6c 65 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64  ble*, int);.void
26500 20 73 71 6c 69 74 65 33 4f 70 65 6e 54 61 62 6c   sqlite3OpenTabl
26510 65 28 50 61 72 73 65 2a 2c 20 69 6e 74 20 69 43  e(Parse*, int iC
26520 75 72 2c 20 69 6e 74 20 69 44 62 2c 20 54 61 62  ur, int iDb, Tab
26530 6c 65 2a 2c 20 69 6e 74 29 3b 0a 23 69 66 20 64  le*, int);.#if d
26540 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e  efined(SQLITE_EN
26550 41 42 4c 45 5f 55 50 44 41 54 45 5f 44 45 4c 45  ABLE_UPDATE_DELE
26560 54 45 5f 4c 49 4d 49 54 29 20 26 26 20 21 64 65  TE_LIMIT) && !de
26570 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49  fined(SQLITE_OMI
26580 54 5f 53 55 42 51 55 45 52 59 29 0a 45 78 70 72  T_SUBQUERY).Expr
26590 20 2a 73 71 6c 69 74 65 33 4c 69 6d 69 74 57 68   *sqlite3LimitWh
265a0 65 72 65 28 50 61 72 73 65 2a 2c 53 72 63 4c 69  ere(Parse*,SrcLi
265b0 73 74 2a 2c 45 78 70 72 2a 2c 45 78 70 72 4c 69  st*,Expr*,ExprLi
265c0 73 74 2a 2c 45 78 70 72 2a 2c 45 78 70 72 2a 2c  st*,Expr*,Expr*,
265d0 63 68 61 72 2a 29 3b 0a 23 65 6e 64 69 66 0a 76  char*);.#endif.v
265e0 6f 69 64 20 73 71 6c 69 74 65 33 44 65 6c 65 74  oid sqlite3Delet
265f0 65 46 72 6f 6d 28 50 61 72 73 65 2a 2c 20 53 72  eFrom(Parse*, Sr
26600 63 4c 69 73 74 2a 2c 20 45 78 70 72 2a 29 3b 0a  cList*, Expr*);.
26610 76 6f 69 64 20 73 71 6c 69 74 65 33 55 70 64 61  void sqlite3Upda
26620 74 65 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69  te(Parse*, SrcLi
26630 73 74 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20  st*, ExprList*, 
26640 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 57 68 65  Expr*, int);.Whe
26650 72 65 49 6e 66 6f 20 2a 73 71 6c 69 74 65 33 57  reInfo *sqlite3W
26660 68 65 72 65 42 65 67 69 6e 28 50 61 72 73 65 2a  hereBegin(Parse*
26670 2c 53 72 63 4c 69 73 74 2a 2c 45 78 70 72 2a 2c  ,SrcList*,Expr*,
26680 45 78 70 72 4c 69 73 74 2a 2c 45 78 70 72 4c 69  ExprList*,ExprLi
26690 73 74 2a 2c 75 31 36 2c 69 6e 74 29 3b 0a 76 6f  st*,u16,int);.vo
266a0 69 64 20 73 71 6c 69 74 65 33 57 68 65 72 65 45  id sqlite3WhereE
266b0 6e 64 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a  nd(WhereInfo*);.
266c0 4c 6f 67 45 73 74 20 73 71 6c 69 74 65 33 57 68  LogEst sqlite3Wh
266d0 65 72 65 4f 75 74 70 75 74 52 6f 77 43 6f 75 6e  ereOutputRowCoun
266e0 74 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69  t(WhereInfo*);.i
266f0 6e 74 20 73 71 6c 69 74 65 33 57 68 65 72 65 49  nt sqlite3WhereI
26700 73 44 69 73 74 69 6e 63 74 28 57 68 65 72 65 49  sDistinct(WhereI
26710 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  nfo*);.int sqlit
26720 65 33 57 68 65 72 65 49 73 4f 72 64 65 72 65 64  e3WhereIsOrdered
26730 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e  (WhereInfo*);.in
26740 74 20 73 71 6c 69 74 65 33 57 68 65 72 65 4f 72  t sqlite3WhereOr
26750 64 65 72 65 64 49 6e 6e 65 72 4c 6f 6f 70 28 57  deredInnerLoop(W
26760 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20  hereInfo*);.int 
26770 73 71 6c 69 74 65 33 57 68 65 72 65 49 73 53 6f  sqlite3WhereIsSo
26780 72 74 65 64 28 57 68 65 72 65 49 6e 66 6f 2a 29  rted(WhereInfo*)
26790 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 68 65  ;.int sqlite3Whe
267a0 72 65 43 6f 6e 74 69 6e 75 65 4c 61 62 65 6c 28  reContinueLabel(
267b0 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74  WhereInfo*);.int
267c0 20 73 71 6c 69 74 65 33 57 68 65 72 65 42 72 65   sqlite3WhereBre
267d0 61 6b 4c 61 62 65 6c 28 57 68 65 72 65 49 6e 66  akLabel(WhereInf
267e0 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  o*);.int sqlite3
267f0 57 68 65 72 65 4f 6b 4f 6e 65 50 61 73 73 28 57  WhereOkOnePass(W
26800 68 65 72 65 49 6e 66 6f 2a 2c 20 69 6e 74 2a 29  hereInfo*, int*)
26810 3b 0a 23 64 65 66 69 6e 65 20 4f 4e 45 50 41 53  ;.#define ONEPAS
26820 53 5f 4f 46 46 20 20 20 20 20 20 30 20 20 20 20  S_OFF      0    
26830 20 20 20 20 2f 2a 20 55 73 65 20 6f 66 20 4f 4e      /* Use of ON
26840 45 50 41 53 53 20 6e 6f 74 20 61 6c 6c 6f 77 65  EPASS not allowe
26850 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 4e 45  d */.#define ONE
26860 50 41 53 53 5f 53 49 4e 47 4c 45 20 20 20 31 20  PASS_SINGLE   1 
26870 20 20 20 20 20 20 20 2f 2a 20 4f 4e 45 50 41 53         /* ONEPAS
26880 53 20 76 61 6c 69 64 20 66 6f 72 20 61 20 73 69  S valid for a si
26890 6e 67 6c 65 20 72 6f 77 20 75 70 64 61 74 65 20  ngle row update 
268a0 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 4e 45 50 41  */.#define ONEPA
268b0 53 53 5f 4d 55 4c 54 49 20 20 20 20 32 20 20 20  SS_MULTI    2   
268c0 20 20 20 20 20 2f 2a 20 4f 4e 45 50 41 53 53 20       /* ONEPASS 
268d0 69 73 20 76 61 6c 69 64 20 66 6f 72 20 6d 75 6c  is valid for mul
268e0 74 69 70 6c 65 20 72 6f 77 73 20 2a 2f 0a 76 6f  tiple rows */.vo
268f0 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f  id sqlite3ExprCo
26900 64 65 4c 6f 61 64 49 6e 64 65 78 43 6f 6c 75 6d  deLoadIndexColum
26910 6e 28 50 61 72 73 65 2a 2c 20 49 6e 64 65 78 2a  n(Parse*, Index*
26920 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29  , int, int, int)
26930 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70  ;.int sqlite3Exp
26940 72 43 6f 64 65 47 65 74 43 6f 6c 75 6d 6e 28 50  rCodeGetColumn(P
26950 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69  arse*, Table*, i
26960 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 75 38  nt, int, int, u8
26970 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
26980 78 70 72 43 6f 64 65 47 65 74 43 6f 6c 75 6d 6e  xprCodeGetColumn
26990 54 6f 52 65 67 28 50 61 72 73 65 2a 2c 20 54 61  ToReg(Parse*, Ta
269a0 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20  ble*, int, int, 
269b0 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
269c0 65 33 45 78 70 72 43 6f 64 65 47 65 74 43 6f 6c  e3ExprCodeGetCol
269d0 75 6d 6e 4f 66 54 61 62 6c 65 28 56 64 62 65 2a  umnOfTable(Vdbe*
269e0 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69  , Table*, int, i
269f0 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  nt, int);.void s
26a00 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 4d 6f  qlite3ExprCodeMo
26a10 76 65 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20  ve(Parse*, int, 
26a20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  int, int);.void 
26a30 73 71 6c 69 74 65 33 45 78 70 72 43 61 63 68 65  sqlite3ExprCache
26a40 53 74 6f 72 65 28 50 61 72 73 65 2a 2c 20 69 6e  Store(Parse*, in
26a50 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f  t, int, int);.vo
26a60 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 43 61  id sqlite3ExprCa
26a70 63 68 65 50 75 73 68 28 50 61 72 73 65 2a 29 3b  chePush(Parse*);
26a80 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
26a90 72 43 61 63 68 65 50 6f 70 28 50 61 72 73 65 2a  rCachePop(Parse*
26aa0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
26ab0 78 70 72 43 61 63 68 65 52 65 6d 6f 76 65 28 50  xprCacheRemove(P
26ac0 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 29  arse*, int, int)
26ad0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
26ae0 70 72 43 61 63 68 65 43 6c 65 61 72 28 50 61 72  prCacheClear(Par
26af0 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  se*);.void sqlit
26b00 65 33 45 78 70 72 43 61 63 68 65 41 66 66 69 6e  e3ExprCacheAffin
26b10 69 74 79 43 68 61 6e 67 65 28 50 61 72 73 65 2a  ityChange(Parse*
26b20 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69  , int, int);.voi
26b30 64 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64  d sqlite3ExprCod
26b40 65 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c  e(Parse*, Expr*,
26b50 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
26b60 74 65 33 45 78 70 72 43 6f 64 65 43 6f 70 79 28  te3ExprCodeCopy(
26b70 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69  Parse*, Expr*, i
26b80 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
26b90 33 45 78 70 72 43 6f 64 65 46 61 63 74 6f 72 61  3ExprCodeFactora
26ba0 62 6c 65 28 50 61 72 73 65 2a 2c 20 45 78 70 72  ble(Parse*, Expr
26bb0 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  *, int);.void sq
26bc0 6c 69 74 65 33 45 78 70 72 43 6f 64 65 41 74 49  lite3ExprCodeAtI
26bd0 6e 69 74 28 50 61 72 73 65 2a 2c 20 45 78 70 72  nit(Parse*, Expr
26be0 2a 2c 20 69 6e 74 2c 20 75 38 29 3b 0a 69 6e 74  *, int, u8);.int
26bf0 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65   sqlite3ExprCode
26c00 54 65 6d 70 28 50 61 72 73 65 2a 2c 20 45 78 70  Temp(Parse*, Exp
26c10 72 2a 2c 20 69 6e 74 2a 29 3b 0a 69 6e 74 20 73  r*, int*);.int s
26c20 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 54 61  qlite3ExprCodeTa
26c30 72 67 65 74 28 50 61 72 73 65 2a 2c 20 45 78 70  rget(Parse*, Exp
26c40 72 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  r*, int);.void s
26c50 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 41 6e  qlite3ExprCodeAn
26c60 64 43 61 63 68 65 28 50 61 72 73 65 2a 2c 20 45  dCache(Parse*, E
26c70 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20  xpr*, int);.int 
26c80 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 45  sqlite3ExprCodeE
26c90 78 70 72 4c 69 73 74 28 50 61 72 73 65 2a 2c 20  xprList(Parse*, 
26ca0 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74 2c 20  ExprList*, int, 
26cb0 69 6e 74 2c 20 75 38 29 3b 0a 23 64 65 66 69 6e  int, u8);.#defin
26cc0 65 20 53 51 4c 49 54 45 5f 45 43 45 4c 5f 44 55  e SQLITE_ECEL_DU
26cd0 50 20 20 20 20 20 20 30 78 30 31 20 20 2f 2a 20  P      0x01  /* 
26ce0 44 65 65 70 2c 20 6e 6f 74 20 73 68 61 6c 6c 6f  Deep, not shallo
26cf0 77 20 63 6f 70 69 65 73 20 2a 2f 0a 23 64 65 66  w copies */.#def
26d00 69 6e 65 20 53 51 4c 49 54 45 5f 45 43 45 4c 5f  ine SQLITE_ECEL_
26d10 46 41 43 54 4f 52 20 20 20 30 78 30 32 20 20 2f  FACTOR   0x02  /
26d20 2a 20 46 61 63 74 6f 72 20 6f 75 74 20 63 6f 6e  * Factor out con
26d30 73 74 61 6e 74 20 74 65 72 6d 73 20 2a 2f 0a 23  stant terms */.#
26d40 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 43  define SQLITE_EC
26d50 45 4c 5f 52 45 46 20 20 20 20 20 20 30 78 30 34  EL_REF      0x04
26d60 20 20 2f 2a 20 55 73 65 20 45 78 70 72 4c 69 73    /* Use ExprLis
26d70 74 2e 75 2e 78 2e 69 4f 72 64 65 72 42 79 43 6f  t.u.x.iOrderByCo
26d80 6c 20 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65  l */.void sqlite
26d90 33 45 78 70 72 49 66 54 72 75 65 28 50 61 72 73  3ExprIfTrue(Pars
26da0 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 2c 20  e*, Expr*, int, 
26db0 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
26dc0 65 33 45 78 70 72 49 66 46 61 6c 73 65 28 50 61  e3ExprIfFalse(Pa
26dd0 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74  rse*, Expr*, int
26de0 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
26df0 69 74 65 33 45 78 70 72 49 66 46 61 6c 73 65 44  ite3ExprIfFalseD
26e00 75 70 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a  up(Parse*, Expr*
26e10 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 54 61 62  , int, int);.Tab
26e20 6c 65 20 2a 73 71 6c 69 74 65 33 46 69 6e 64 54  le *sqlite3FindT
26e30 61 62 6c 65 28 73 71 6c 69 74 65 33 2a 2c 63 6f  able(sqlite3*,co
26e40 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74  nst char*, const
26e50 20 63 68 61 72 2a 29 3b 0a 23 64 65 66 69 6e 65   char*);.#define
26e60 20 4c 4f 43 41 54 45 5f 56 49 45 57 20 20 20 20   LOCATE_VIEW    
26e70 30 78 30 31 0a 23 64 65 66 69 6e 65 20 4c 4f 43  0x01.#define LOC
26e80 41 54 45 5f 4e 4f 45 52 52 20 20 20 30 78 30 32  ATE_NOERR   0x02
26e90 0a 54 61 62 6c 65 20 2a 73 71 6c 69 74 65 33 4c  .Table *sqlite3L
26ea0 6f 63 61 74 65 54 61 62 6c 65 28 50 61 72 73 65  ocateTable(Parse
26eb0 2a 2c 75 33 32 20 66 6c 61 67 73 2c 63 6f 6e 73  *,u32 flags,cons
26ec0 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63  t char*, const c
26ed0 68 61 72 2a 29 3b 0a 54 61 62 6c 65 20 2a 73 71  har*);.Table *sq
26ee0 6c 69 74 65 33 4c 6f 63 61 74 65 54 61 62 6c 65  lite3LocateTable
26ef0 49 74 65 6d 28 50 61 72 73 65 2a 2c 75 33 32 20  Item(Parse*,u32 
26f00 66 6c 61 67 73 2c 73 74 72 75 63 74 20 53 72 63  flags,struct Src
26f10 4c 69 73 74 5f 69 74 65 6d 20 2a 29 3b 0a 49 6e  List_item *);.In
26f20 64 65 78 20 2a 73 71 6c 69 74 65 33 46 69 6e 64  dex *sqlite3Find
26f30 49 6e 64 65 78 28 73 71 6c 69 74 65 33 2a 2c 63  Index(sqlite3*,c
26f40 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73  onst char*, cons
26f50 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73  t char*);.void s
26f60 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44  qlite3UnlinkAndD
26f70 65 6c 65 74 65 54 61 62 6c 65 28 73 71 6c 69 74  eleteTable(sqlit
26f80 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68  e3*,int,const ch
26f90 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  ar*);.void sqlit
26fa0 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74  e3UnlinkAndDelet
26fb0 65 49 6e 64 65 78 28 73 71 6c 69 74 65 33 2a 2c  eIndex(sqlite3*,
26fc0 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29  int,const char*)
26fd0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 61  ;.void sqlite3Va
26fe0 63 75 75 6d 28 50 61 72 73 65 2a 29 3b 0a 69 6e  cuum(Parse*);.in
26ff0 74 20 73 71 6c 69 74 65 33 52 75 6e 56 61 63 75  t sqlite3RunVacu
27000 75 6d 28 63 68 61 72 2a 2a 2c 20 73 71 6c 69 74  um(char**, sqlit
27010 65 33 2a 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69  e3*);.char *sqli
27020 74 65 33 4e 61 6d 65 46 72 6f 6d 54 6f 6b 65 6e  te3NameFromToken
27030 28 73 71 6c 69 74 65 33 2a 2c 20 54 6f 6b 65 6e  (sqlite3*, Token
27040 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45  *);.int sqlite3E
27050 78 70 72 43 6f 6d 70 61 72 65 28 45 78 70 72 2a  xprCompare(Expr*
27060 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 69  , Expr*, int);.i
27070 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 4c 69  nt sqlite3ExprLi
27080 73 74 43 6f 6d 70 61 72 65 28 45 78 70 72 4c 69  stCompare(ExprLi
27090 73 74 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20  st*, ExprList*, 
270a0 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  int);.int sqlite
270b0 33 45 78 70 72 49 6d 70 6c 69 65 73 45 78 70 72  3ExprImpliesExpr
270c0 28 45 78 70 72 2a 2c 20 45 78 70 72 2a 2c 20 69  (Expr*, Expr*, i
270d0 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
270e0 33 45 78 70 72 41 6e 61 6c 79 7a 65 41 67 67 72  3ExprAnalyzeAggr
270f0 65 67 61 74 65 73 28 4e 61 6d 65 43 6f 6e 74 65  egates(NameConte
27100 78 74 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69  xt*, Expr*);.voi
27110 64 20 73 71 6c 69 74 65 33 45 78 70 72 41 6e 61  d sqlite3ExprAna
27120 6c 79 7a 65 41 67 67 4c 69 73 74 28 4e 61 6d 65  lyzeAggList(Name
27130 43 6f 6e 74 65 78 74 2a 2c 45 78 70 72 4c 69 73  Context*,ExprLis
27140 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  t*);.int sqlite3
27150 46 75 6e 63 74 69 6f 6e 55 73 65 73 54 68 69 73  FunctionUsesThis
27160 53 72 63 28 45 78 70 72 2a 2c 20 53 72 63 4c 69  Src(Expr*, SrcLi
27170 73 74 2a 29 3b 0a 56 64 62 65 20 2a 73 71 6c 69  st*);.Vdbe *sqli
27180 74 65 33 47 65 74 56 64 62 65 28 50 61 72 73 65  te3GetVdbe(Parse
27190 2a 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  *);.#ifndef SQLI
271a0 54 45 5f 4f 4d 49 54 5f 42 55 49 4c 54 49 4e 5f  TE_OMIT_BUILTIN_
271b0 54 45 53 54 0a 76 6f 69 64 20 73 71 6c 69 74 65  TEST.void sqlite
271c0 33 50 72 6e 67 53 61 76 65 53 74 61 74 65 28 76  3PrngSaveState(v
271d0 6f 69 64 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  oid);.void sqlit
271e0 65 33 50 72 6e 67 52 65 73 74 6f 72 65 53 74 61  e3PrngRestoreSta
271f0 74 65 28 76 6f 69 64 29 3b 0a 23 65 6e 64 69 66  te(void);.#endif
27200 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 6f 6c  .void sqlite3Rol
27210 6c 62 61 63 6b 41 6c 6c 28 73 71 6c 69 74 65 33  lbackAll(sqlite3
27220 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  *,int);.void sql
27230 69 74 65 33 43 6f 64 65 56 65 72 69 66 79 53 63  ite3CodeVerifySc
27240 68 65 6d 61 28 50 61 72 73 65 2a 2c 20 69 6e 74  hema(Parse*, int
27250 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43  );.void sqlite3C
27260 6f 64 65 56 65 72 69 66 79 4e 61 6d 65 64 53 63  odeVerifyNamedSc
27270 68 65 6d 61 28 50 61 72 73 65 2a 2c 20 63 6f 6e  hema(Parse*, con
27280 73 74 20 63 68 61 72 20 2a 7a 44 62 29 3b 0a 76  st char *zDb);.v
27290 6f 69 64 20 73 71 6c 69 74 65 33 42 65 67 69 6e  oid sqlite3Begin
272a0 54 72 61 6e 73 61 63 74 69 6f 6e 28 50 61 72 73  Transaction(Pars
272b0 65 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  e*, int);.void s
272c0 71 6c 69 74 65 33 43 6f 6d 6d 69 74 54 72 61 6e  qlite3CommitTran
272d0 73 61 63 74 69 6f 6e 28 50 61 72 73 65 2a 29 3b  saction(Parse*);
272e0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 6f 6c  .void sqlite3Rol
272f0 6c 62 61 63 6b 54 72 61 6e 73 61 63 74 69 6f 6e  lbackTransaction
27300 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73  (Parse*);.void s
27310 71 6c 69 74 65 33 53 61 76 65 70 6f 69 6e 74 28  qlite3Savepoint(
27320 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 54 6f 6b  Parse*, int, Tok
27330 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  en*);.void sqlit
27340 65 33 43 6c 6f 73 65 53 61 76 65 70 6f 69 6e 74  e3CloseSavepoint
27350 73 28 73 71 6c 69 74 65 33 20 2a 29 3b 0a 76 6f  s(sqlite3 *);.vo
27360 69 64 20 73 71 6c 69 74 65 33 4c 65 61 76 65 4d  id sqlite3LeaveM
27370 75 74 65 78 41 6e 64 43 6c 6f 73 65 5a 6f 6d 62  utexAndCloseZomb
27380 69 65 28 73 71 6c 69 74 65 33 2a 29 3b 0a 69 6e  ie(sqlite3*);.in
27390 74 20 73 71 6c 69 74 65 33 45 78 70 72 49 73 43  t sqlite3ExprIsC
273a0 6f 6e 73 74 61 6e 74 28 45 78 70 72 2a 29 3b 0a  onstant(Expr*);.
273b0 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 49  int sqlite3ExprI
273c0 73 43 6f 6e 73 74 61 6e 74 4e 6f 74 4a 6f 69 6e  sConstantNotJoin
273d0 28 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c  (Expr*);.int sql
273e0 69 74 65 33 45 78 70 72 49 73 43 6f 6e 73 74 61  ite3ExprIsConsta
273f0 6e 74 4f 72 46 75 6e 63 74 69 6f 6e 28 45 78 70  ntOrFunction(Exp
27400 72 2a 2c 20 75 38 29 3b 0a 69 6e 74 20 73 71 6c  r*, u8);.int sql
27410 69 74 65 33 45 78 70 72 49 73 54 61 62 6c 65 43  ite3ExprIsTableC
27420 6f 6e 73 74 61 6e 74 28 45 78 70 72 2a 2c 69 6e  onstant(Expr*,in
27430 74 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54  t);.#ifdef SQLIT
27440 45 5f 45 4e 41 42 4c 45 5f 43 55 52 53 4f 52 5f  E_ENABLE_CURSOR_
27450 48 49 4e 54 53 0a 69 6e 74 20 73 71 6c 69 74 65  HINTS.int sqlite
27460 33 45 78 70 72 43 6f 6e 74 61 69 6e 73 53 75 62  3ExprContainsSub
27470 71 75 65 72 79 28 45 78 70 72 2a 29 3b 0a 23 65  query(Expr*);.#e
27480 6e 64 69 66 0a 69 6e 74 20 73 71 6c 69 74 65 33  ndif.int sqlite3
27490 45 78 70 72 49 73 49 6e 74 65 67 65 72 28 45 78  ExprIsInteger(Ex
274a0 70 72 2a 2c 20 69 6e 74 2a 29 3b 0a 69 6e 74 20  pr*, int*);.int 
274b0 73 71 6c 69 74 65 33 45 78 70 72 43 61 6e 42 65  sqlite3ExprCanBe
274c0 4e 75 6c 6c 28 63 6f 6e 73 74 20 45 78 70 72 2a  Null(const Expr*
274d0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78  );.int sqlite3Ex
274e0 70 72 4e 65 65 64 73 4e 6f 41 66 66 69 6e 69 74  prNeedsNoAffinit
274f0 79 43 68 61 6e 67 65 28 63 6f 6e 73 74 20 45 78  yChange(const Ex
27500 70 72 2a 2c 20 63 68 61 72 29 3b 0a 69 6e 74 20  pr*, char);.int 
27510 73 71 6c 69 74 65 33 49 73 52 6f 77 69 64 28 63  sqlite3IsRowid(c
27520 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69  onst char*);.voi
27530 64 20 73 71 6c 69 74 65 33 47 65 6e 65 72 61 74  d sqlite3Generat
27540 65 52 6f 77 44 65 6c 65 74 65 28 0a 20 20 20 20  eRowDelete(.    
27550 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a 2c 54 72  Parse*,Table*,Tr
27560 69 67 67 65 72 2a 2c 69 6e 74 2c 69 6e 74 2c 69  igger*,int,int,i
27570 6e 74 2c 69 31 36 2c 75 38 2c 75 38 2c 75 38 2c  nt,i16,u8,u8,u8,
27580 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
27590 65 33 47 65 6e 65 72 61 74 65 52 6f 77 49 6e 64  e3GenerateRowInd
275a0 65 78 44 65 6c 65 74 65 28 50 61 72 73 65 2a 2c  exDelete(Parse*,
275b0 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e   Table*, int, in
275c0 74 2c 20 69 6e 74 2a 2c 20 69 6e 74 29 3b 0a 69  t, int*, int);.i
275d0 6e 74 20 73 71 6c 69 74 65 33 47 65 6e 65 72 61  nt sqlite3Genera
275e0 74 65 49 6e 64 65 78 4b 65 79 28 50 61 72 73 65  teIndexKey(Parse
275f0 2a 2c 20 49 6e 64 65 78 2a 2c 20 69 6e 74 2c 20  *, Index*, int, 
27600 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 2a 2c 49  int, int, int*,I
27610 6e 64 65 78 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64  ndex*,int);.void
27620 20 73 71 6c 69 74 65 33 52 65 73 6f 6c 76 65 50   sqlite3ResolveP
27630 61 72 74 49 64 78 4c 61 62 65 6c 28 50 61 72 73  artIdxLabel(Pars
27640 65 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  e*,int);.void sq
27650 6c 69 74 65 33 47 65 6e 65 72 61 74 65 43 6f 6e  lite3GenerateCon
27660 73 74 72 61 69 6e 74 43 68 65 63 6b 73 28 50 61  straintChecks(Pa
27670 72 73 65 2a 2c 54 61 62 6c 65 2a 2c 69 6e 74 2a  rse*,Table*,int*
27680 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74  ,int,int,int,int
27690 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
276a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
276b0 20 20 20 20 20 20 20 75 38 2c 75 38 2c 69 6e 74         u8,u8,int
276c0 2c 69 6e 74 2a 2c 69 6e 74 2a 29 3b 0a 76 6f 69  ,int*,int*);.voi
276d0 64 20 73 71 6c 69 74 65 33 43 6f 6d 70 6c 65 74  d sqlite3Complet
276e0 65 49 6e 73 65 72 74 69 6f 6e 28 50 61 72 73 65  eInsertion(Parse
276f0 2a 2c 54 61 62 6c 65 2a 2c 69 6e 74 2c 69 6e 74  *,Table*,int,int
27700 2c 69 6e 74 2c 69 6e 74 2a 2c 69 6e 74 2c 69 6e  ,int,int*,int,in
27710 74 2c 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69  t,int);.int sqli
27720 74 65 33 4f 70 65 6e 54 61 62 6c 65 41 6e 64 49  te3OpenTableAndI
27730 6e 64 69 63 65 73 28 50 61 72 73 65 2a 2c 20 54  ndices(Parse*, T
27740 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 75 38 2c 20  able*, int, u8, 
27750 69 6e 74 2c 20 75 38 2a 2c 20 69 6e 74 2a 2c 20  int, u8*, int*, 
27760 69 6e 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  int*);.void sqli
27770 74 65 33 42 65 67 69 6e 57 72 69 74 65 4f 70 65  te3BeginWriteOpe
27780 72 61 74 69 6f 6e 28 50 61 72 73 65 2a 2c 20 69  ration(Parse*, i
27790 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  nt, int);.void s
277a0 71 6c 69 74 65 33 4d 75 6c 74 69 57 72 69 74 65  qlite3MultiWrite
277b0 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73  (Parse*);.void s
277c0 71 6c 69 74 65 33 4d 61 79 41 62 6f 72 74 28 50  qlite3MayAbort(P
277d0 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  arse*);.void sql
277e0 69 74 65 33 48 61 6c 74 43 6f 6e 73 74 72 61 69  ite3HaltConstrai
277f0 6e 74 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20  nt(Parse*, int, 
27800 69 6e 74 2c 20 63 68 61 72 2a 2c 20 69 38 2c 20  int, char*, i8, 
27810 75 38 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  u8);.void sqlite
27820 33 55 6e 69 71 75 65 43 6f 6e 73 74 72 61 69 6e  3UniqueConstrain
27830 74 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 49  t(Parse*, int, I
27840 6e 64 65 78 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  ndex*);.void sql
27850 69 74 65 33 52 6f 77 69 64 43 6f 6e 73 74 72 61  ite3RowidConstra
27860 69 6e 74 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c  int(Parse*, int,
27870 20 54 61 62 6c 65 2a 29 3b 0a 45 78 70 72 20 2a   Table*);.Expr *
27880 73 71 6c 69 74 65 33 45 78 70 72 44 75 70 28 73  sqlite3ExprDup(s
27890 71 6c 69 74 65 33 2a 2c 45 78 70 72 2a 2c 69 6e  qlite3*,Expr*,in
278a0 74 29 3b 0a 45 78 70 72 4c 69 73 74 20 2a 73 71  t);.ExprList *sq
278b0 6c 69 74 65 33 45 78 70 72 4c 69 73 74 44 75 70  lite3ExprListDup
278c0 28 73 71 6c 69 74 65 33 2a 2c 45 78 70 72 4c 69  (sqlite3*,ExprLi
278d0 73 74 2a 2c 69 6e 74 29 3b 0a 53 72 63 4c 69 73  st*,int);.SrcLis
278e0 74 20 2a 73 71 6c 69 74 65 33 53 72 63 4c 69 73  t *sqlite3SrcLis
278f0 74 44 75 70 28 73 71 6c 69 74 65 33 2a 2c 53 72  tDup(sqlite3*,Sr
27900 63 4c 69 73 74 2a 2c 69 6e 74 29 3b 0a 49 64 4c  cList*,int);.IdL
27910 69 73 74 20 2a 73 71 6c 69 74 65 33 49 64 4c 69  ist *sqlite3IdLi
27920 73 74 44 75 70 28 73 71 6c 69 74 65 33 2a 2c 49  stDup(sqlite3*,I
27930 64 4c 69 73 74 2a 29 3b 0a 53 65 6c 65 63 74 20  dList*);.Select 
27940 2a 73 71 6c 69 74 65 33 53 65 6c 65 63 74 44 75  *sqlite3SelectDu
27950 70 28 73 71 6c 69 74 65 33 2a 2c 53 65 6c 65 63  p(sqlite3*,Selec
27960 74 2a 2c 69 6e 74 29 3b 0a 23 69 66 20 53 45 4c  t*,int);.#if SEL
27970 45 43 54 54 52 41 43 45 5f 45 4e 41 42 4c 45 44  ECTTRACE_ENABLED
27980 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 65 6c  .void sqlite3Sel
27990 65 63 74 53 65 74 4e 61 6d 65 28 53 65 6c 65 63  ectSetName(Selec
279a0 74 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  t*,const char*);
279b0 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
279c0 73 71 6c 69 74 65 33 53 65 6c 65 63 74 53 65 74  sqlite3SelectSet
279d0 4e 61 6d 65 28 41 2c 42 29 0a 23 65 6e 64 69 66  Name(A,B).#endif
279e0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 49 6e 73  .void sqlite3Ins
279f0 65 72 74 42 75 69 6c 74 69 6e 46 75 6e 63 73 28  ertBuiltinFuncs(
27a00 46 75 6e 63 44 65 66 2a 2c 69 6e 74 29 3b 0a 46  FuncDef*,int);.F
27a10 75 6e 63 44 65 66 20 2a 73 71 6c 69 74 65 33 46  uncDef *sqlite3F
27a20 69 6e 64 46 75 6e 63 74 69 6f 6e 28 73 71 6c 69  indFunction(sqli
27a30 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  te3*,const char*
27a40 2c 69 6e 74 2c 75 38 2c 75 38 29 3b 0a 76 6f 69  ,int,u8,u8);.voi
27a50 64 20 73 71 6c 69 74 65 33 52 65 67 69 73 74 65  d sqlite3Registe
27a60 72 42 75 69 6c 74 69 6e 46 75 6e 63 74 69 6f 6e  rBuiltinFunction
27a70 73 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20 73 71  s(void);.void sq
27a80 6c 69 74 65 33 52 65 67 69 73 74 65 72 44 61 74  lite3RegisterDat
27a90 65 54 69 6d 65 46 75 6e 63 74 69 6f 6e 73 28 76  eTimeFunctions(v
27aa0 6f 69 64 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  oid);.void sqlit
27ab0 65 33 52 65 67 69 73 74 65 72 50 65 72 43 6f 6e  e3RegisterPerCon
27ac0 6e 65 63 74 69 6f 6e 42 75 69 6c 74 69 6e 46 75  nectionBuiltinFu
27ad0 6e 63 74 69 6f 6e 73 28 73 71 6c 69 74 65 33 2a  nctions(sqlite3*
27ae0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 61  );.int sqlite3Sa
27af0 66 65 74 79 43 68 65 63 6b 4f 6b 28 73 71 6c 69  fetyCheckOk(sqli
27b00 74 65 33 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  te3*);.int sqlit
27b10 65 33 53 61 66 65 74 79 43 68 65 63 6b 53 69 63  e3SafetyCheckSic
27b20 6b 4f 72 4f 6b 28 73 71 6c 69 74 65 33 2a 29 3b  kOrOk(sqlite3*);
27b30 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 68 61  .void sqlite3Cha
27b40 6e 67 65 43 6f 6f 6b 69 65 28 50 61 72 73 65 2a  ngeCookie(Parse*
27b50 2c 20 69 6e 74 29 3b 0a 0a 23 69 66 20 21 64 65  , int);..#if !de
27b60 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49  fined(SQLITE_OMI
27b70 54 5f 56 49 45 57 29 20 26 26 20 21 64 65 66 69  T_VIEW) && !defi
27b80 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ned(SQLITE_OMIT_
27b90 54 52 49 47 47 45 52 29 0a 76 6f 69 64 20 73 71  TRIGGER).void sq
27ba0 6c 69 74 65 33 4d 61 74 65 72 69 61 6c 69 7a 65  lite3Materialize
27bb0 56 69 65 77 28 50 61 72 73 65 2a 2c 20 54 61 62  View(Parse*, Tab
27bc0 6c 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29  le*, Expr*, int)
27bd0 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65  ;.#endif..#ifnde
27be0 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52  f SQLITE_OMIT_TR
27bf0 49 47 47 45 52 0a 20 20 76 6f 69 64 20 73 71 6c  IGGER.  void sql
27c00 69 74 65 33 42 65 67 69 6e 54 72 69 67 67 65 72  ite3BeginTrigger
27c10 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c  (Parse*, Token*,
27c20 54 6f 6b 65 6e 2a 2c 69 6e 74 2c 69 6e 74 2c 49  Token*,int,int,I
27c30 64 4c 69 73 74 2a 2c 53 72 63 4c 69 73 74 2a 2c  dList*,SrcList*,
27c40 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
27c50 20 20 20 20 20 20 20 20 20 20 20 20 45 78 70 72              Expr
27c60 2a 2c 69 6e 74 2c 20 69 6e 74 29 3b 0a 20 20 76  *,int, int);.  v
27c70 6f 69 64 20 73 71 6c 69 74 65 33 46 69 6e 69 73  oid sqlite3Finis
27c80 68 54 72 69 67 67 65 72 28 50 61 72 73 65 2a 2c  hTrigger(Parse*,
27c90 20 54 72 69 67 67 65 72 53 74 65 70 2a 2c 20 54   TriggerStep*, T
27ca0 6f 6b 65 6e 2a 29 3b 0a 20 20 76 6f 69 64 20 73  oken*);.  void s
27cb0 71 6c 69 74 65 33 44 72 6f 70 54 72 69 67 67 65  qlite3DropTrigge
27cc0 72 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73  r(Parse*, SrcLis
27cd0 74 2a 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64  t*, int);.  void
27ce0 20 73 71 6c 69 74 65 33 44 72 6f 70 54 72 69 67   sqlite3DropTrig
27cf0 67 65 72 50 74 72 28 50 61 72 73 65 2a 2c 20 54  gerPtr(Parse*, T
27d00 72 69 67 67 65 72 2a 29 3b 0a 20 20 54 72 69 67  rigger*);.  Trig
27d10 67 65 72 20 2a 73 71 6c 69 74 65 33 54 72 69 67  ger *sqlite3Trig
27d20 67 65 72 73 45 78 69 73 74 28 50 61 72 73 65 20  gersExist(Parse 
27d30 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20  *, Table*, int, 
27d40 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74 20 2a  ExprList*, int *
27d50 70 4d 61 73 6b 29 3b 0a 20 20 54 72 69 67 67 65  pMask);.  Trigge
27d60 72 20 2a 73 71 6c 69 74 65 33 54 72 69 67 67 65  r *sqlite3Trigge
27d70 72 4c 69 73 74 28 50 61 72 73 65 20 2a 2c 20 54  rList(Parse *, T
27d80 61 62 6c 65 20 2a 29 3b 0a 20 20 76 6f 69 64 20  able *);.  void 
27d90 73 71 6c 69 74 65 33 43 6f 64 65 52 6f 77 54 72  sqlite3CodeRowTr
27da0 69 67 67 65 72 28 50 61 72 73 65 2a 2c 20 54 72  igger(Parse*, Tr
27db0 69 67 67 65 72 20 2a 2c 20 69 6e 74 2c 20 45 78  igger *, int, Ex
27dc0 70 72 4c 69 73 74 2a 2c 20 69 6e 74 2c 20 54 61  prList*, int, Ta
27dd0 62 6c 65 20 2a 2c 0a 20 20 20 20 20 20 20 20 20  ble *,.         
27de0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27df0 20 20 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74     int, int, int
27e00 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
27e10 33 43 6f 64 65 52 6f 77 54 72 69 67 67 65 72 44  3CodeRowTriggerD
27e20 69 72 65 63 74 28 50 61 72 73 65 20 2a 2c 20 54  irect(Parse *, T
27e30 72 69 67 67 65 72 20 2a 2c 20 54 61 62 6c 65 20  rigger *, Table 
27e40 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74  *, int, int, int
27e50 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
27e60 56 69 65 77 54 72 69 67 67 65 72 73 28 50 61 72  ViewTriggers(Par
27e70 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 45 78 70  se*, Table*, Exp
27e80 72 2a 2c 20 69 6e 74 2c 20 45 78 70 72 4c 69 73  r*, int, ExprLis
27e90 74 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69  t*);.  void sqli
27ea0 74 65 33 44 65 6c 65 74 65 54 72 69 67 67 65 72  te3DeleteTrigger
27eb0 53 74 65 70 28 73 71 6c 69 74 65 33 2a 2c 20 54  Step(sqlite3*, T
27ec0 72 69 67 67 65 72 53 74 65 70 2a 29 3b 0a 20 20  riggerStep*);.  
27ed0 54 72 69 67 67 65 72 53 74 65 70 20 2a 73 71 6c  TriggerStep *sql
27ee0 69 74 65 33 54 72 69 67 67 65 72 53 65 6c 65 63  ite3TriggerSelec
27ef0 74 53 74 65 70 28 73 71 6c 69 74 65 33 2a 2c 53  tStep(sqlite3*,S
27f00 65 6c 65 63 74 2a 29 3b 0a 20 20 54 72 69 67 67  elect*);.  Trigg
27f10 65 72 53 74 65 70 20 2a 73 71 6c 69 74 65 33 54  erStep *sqlite3T
27f20 72 69 67 67 65 72 49 6e 73 65 72 74 53 74 65 70  riggerInsertStep
27f30 28 73 71 6c 69 74 65 33 2a 2c 54 6f 6b 65 6e 2a  (sqlite3*,Token*
27f40 2c 20 49 64 4c 69 73 74 2a 2c 0a 20 20 20 20 20  , IdList*,.     
27f50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27f60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27f70 20 20 20 53 65 6c 65 63 74 2a 2c 75 38 29 3b 0a     Select*,u8);.
27f80 20 20 54 72 69 67 67 65 72 53 74 65 70 20 2a 73    TriggerStep *s
27f90 71 6c 69 74 65 33 54 72 69 67 67 65 72 55 70 64  qlite3TriggerUpd
27fa0 61 74 65 53 74 65 70 28 73 71 6c 69 74 65 33 2a  ateStep(sqlite3*
27fb0 2c 54 6f 6b 65 6e 2a 2c 45 78 70 72 4c 69 73 74  ,Token*,ExprList
27fc0 2a 2c 20 45 78 70 72 2a 2c 20 75 38 29 3b 0a 20  *, Expr*, u8);. 
27fd0 20 54 72 69 67 67 65 72 53 74 65 70 20 2a 73 71   TriggerStep *sq
27fe0 6c 69 74 65 33 54 72 69 67 67 65 72 44 65 6c 65  lite3TriggerDele
27ff0 74 65 53 74 65 70 28 73 71 6c 69 74 65 33 2a 2c  teStep(sqlite3*,
28000 54 6f 6b 65 6e 2a 2c 20 45 78 70 72 2a 29 3b 0a  Token*, Expr*);.
28010 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65    void sqlite3De
28020 6c 65 74 65 54 72 69 67 67 65 72 28 73 71 6c 69  leteTrigger(sqli
28030 74 65 33 2a 2c 20 54 72 69 67 67 65 72 2a 29 3b  te3*, Trigger*);
28040 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 55  .  void sqlite3U
28050 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65 54 72  nlinkAndDeleteTr
28060 69 67 67 65 72 28 73 71 6c 69 74 65 33 2a 2c 69  igger(sqlite3*,i
28070 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  nt,const char*);
28080 0a 20 20 75 33 32 20 73 71 6c 69 74 65 33 54 72  .  u32 sqlite3Tr
28090 69 67 67 65 72 43 6f 6c 6d 61 73 6b 28 50 61 72  iggerColmask(Par
280a0 73 65 2a 2c 54 72 69 67 67 65 72 2a 2c 45 78 70  se*,Trigger*,Exp
280b0 72 4c 69 73 74 2a 2c 69 6e 74 2c 69 6e 74 2c 54  rList*,int,int,T
280c0 61 62 6c 65 2a 2c 69 6e 74 29 3b 0a 23 20 64 65  able*,int);.# de
280d0 66 69 6e 65 20 73 71 6c 69 74 65 33 50 61 72 73  fine sqlite3Pars
280e0 65 54 6f 70 6c 65 76 65 6c 28 70 29 20 28 28 70  eToplevel(p) ((p
280f0 29 2d 3e 70 54 6f 70 6c 65 76 65 6c 20 3f 20 28  )->pToplevel ? (
28100 70 29 2d 3e 70 54 6f 70 6c 65 76 65 6c 20 3a 20  p)->pToplevel : 
28110 28 70 29 29 0a 23 20 64 65 66 69 6e 65 20 73 71  (p)).# define sq
28120 6c 69 74 65 33 49 73 54 6f 70 6c 65 76 65 6c 28  lite3IsToplevel(
28130 70 29 20 28 28 70 29 2d 3e 70 54 6f 70 6c 65 76  p) ((p)->pToplev
28140 65 6c 3d 3d 30 29 0a 23 65 6c 73 65 0a 23 20 64  el==0).#else.# d
28150 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54 72 69  efine sqlite3Tri
28160 67 67 65 72 73 45 78 69 73 74 28 42 2c 43 2c 44  ggersExist(B,C,D
28170 2c 45 2c 46 29 20 30 0a 23 20 64 65 66 69 6e 65  ,E,F) 0.# define
28180 20 73 71 6c 69 74 65 33 44 65 6c 65 74 65 54 72   sqlite3DeleteTr
28190 69 67 67 65 72 28 41 2c 42 29 0a 23 20 64 65 66  igger(A,B).# def
281a0 69 6e 65 20 73 71 6c 69 74 65 33 44 72 6f 70 54  ine sqlite3DropT
281b0 72 69 67 67 65 72 50 74 72 28 41 2c 42 29 0a 23  riggerPtr(A,B).#
281c0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 55   define sqlite3U
281d0 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65 54 72  nlinkAndDeleteTr
281e0 69 67 67 65 72 28 41 2c 42 2c 43 29 0a 23 20 64  igger(A,B,C).# d
281f0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 43 6f 64  efine sqlite3Cod
28200 65 52 6f 77 54 72 69 67 67 65 72 28 41 2c 42 2c  eRowTrigger(A,B,
28210 43 2c 44 2c 45 2c 46 2c 47 2c 48 2c 49 29 0a 23  C,D,E,F,G,H,I).#
28220 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 43   define sqlite3C
28230 6f 64 65 52 6f 77 54 72 69 67 67 65 72 44 69 72  odeRowTriggerDir
28240 65 63 74 28 41 2c 42 2c 43 2c 44 2c 45 2c 46 29  ect(A,B,C,D,E,F)
28250 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
28260 33 54 72 69 67 67 65 72 4c 69 73 74 28 58 2c 20  3TriggerList(X, 
28270 59 29 20 30 0a 23 20 64 65 66 69 6e 65 20 73 71  Y) 0.# define sq
28280 6c 69 74 65 33 50 61 72 73 65 54 6f 70 6c 65 76  lite3ParseToplev
28290 65 6c 28 70 29 20 70 0a 23 20 64 65 66 69 6e 65  el(p) p.# define
282a0 20 73 71 6c 69 74 65 33 49 73 54 6f 70 6c 65 76   sqlite3IsToplev
282b0 65 6c 28 70 29 20 31 0a 23 20 64 65 66 69 6e 65  el(p) 1.# define
282c0 20 73 71 6c 69 74 65 33 54 72 69 67 67 65 72 43   sqlite3TriggerC
282d0 6f 6c 6d 61 73 6b 28 41 2c 42 2c 43 2c 44 2c 45  olmask(A,B,C,D,E
282e0 2c 46 2c 47 29 20 30 0a 23 65 6e 64 69 66 0a 0a  ,F,G) 0.#endif..
282f0 69 6e 74 20 73 71 6c 69 74 65 33 4a 6f 69 6e 54  int sqlite3JoinT
28300 79 70 65 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65  ype(Parse*, Toke
28310 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65  n*, Token*, Toke
28320 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  n*);.void sqlite
28330 33 43 72 65 61 74 65 46 6f 72 65 69 67 6e 4b 65  3CreateForeignKe
28340 79 28 50 61 72 73 65 2a 2c 20 45 78 70 72 4c 69  y(Parse*, ExprLi
28350 73 74 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 45 78 70  st*, Token*, Exp
28360 72 4c 69 73 74 2a 2c 20 69 6e 74 29 3b 0a 76 6f  rList*, int);.vo
28370 69 64 20 73 71 6c 69 74 65 33 44 65 66 65 72 46  id sqlite3DeferF
28380 6f 72 65 69 67 6e 4b 65 79 28 50 61 72 73 65 2a  oreignKey(Parse*
28390 2c 20 69 6e 74 29 3b 0a 23 69 66 6e 64 65 66 20  , int);.#ifndef 
283a0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 48  SQLITE_OMIT_AUTH
283b0 4f 52 49 5a 41 54 49 4f 4e 0a 20 20 76 6f 69 64  ORIZATION.  void
283c0 20 73 71 6c 69 74 65 33 41 75 74 68 52 65 61 64   sqlite3AuthRead
283d0 28 50 61 72 73 65 2a 2c 45 78 70 72 2a 2c 53 63  (Parse*,Expr*,Sc
283e0 68 65 6d 61 2a 2c 53 72 63 4c 69 73 74 2a 29 3b  hema*,SrcList*);
283f0 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 41 75  .  int sqlite3Au
28400 74 68 43 68 65 63 6b 28 50 61 72 73 65 2a 2c 69  thCheck(Parse*,i
28410 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c  nt, const char*,
28420 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f   const char*, co
28430 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20 20 76 6f  nst char*);.  vo
28440 69 64 20 73 71 6c 69 74 65 33 41 75 74 68 43 6f  id sqlite3AuthCo
28450 6e 74 65 78 74 50 75 73 68 28 50 61 72 73 65 2a  ntextPush(Parse*
28460 2c 20 41 75 74 68 43 6f 6e 74 65 78 74 2a 2c 20  , AuthContext*, 
28470 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20 20  const char*);.  
28480 76 6f 69 64 20 73 71 6c 69 74 65 33 41 75 74 68  void sqlite3Auth
28490 43 6f 6e 74 65 78 74 50 6f 70 28 41 75 74 68 43  ContextPop(AuthC
284a0 6f 6e 74 65 78 74 2a 29 3b 0a 20 20 69 6e 74 20  ontext*);.  int 
284b0 73 71 6c 69 74 65 33 41 75 74 68 52 65 61 64 43  sqlite3AuthReadC
284c0 6f 6c 28 50 61 72 73 65 2a 2c 20 63 6f 6e 73 74  ol(Parse*, const
284d0 20 63 68 61 72 20 2a 2c 20 63 6f 6e 73 74 20 63   char *, const c
284e0 68 61 72 20 2a 2c 20 69 6e 74 29 3b 0a 23 65 6c  har *, int);.#el
284f0 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  se.# define sqli
28500 74 65 33 41 75 74 68 52 65 61 64 28 61 2c 62 2c  te3AuthRead(a,b,
28510 63 2c 64 29 0a 23 20 64 65 66 69 6e 65 20 73 71  c,d).# define sq
28520 6c 69 74 65 33 41 75 74 68 43 68 65 63 6b 28 61  lite3AuthCheck(a
28530 2c 62 2c 63 2c 64 2c 65 29 20 20 20 20 53 51 4c  ,b,c,d,e)    SQL
28540 49 54 45 5f 4f 4b 0a 23 20 64 65 66 69 6e 65 20  ITE_OK.# define 
28550 73 71 6c 69 74 65 33 41 75 74 68 43 6f 6e 74 65  sqlite3AuthConte
28560 78 74 50 75 73 68 28 61 2c 62 2c 63 29 0a 23 20  xtPush(a,b,c).# 
28570 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 41 75  define sqlite3Au
28580 74 68 43 6f 6e 74 65 78 74 50 6f 70 28 61 29 20  thContextPop(a) 
28590 20 28 28 76 6f 69 64 29 28 61 29 29 0a 23 65 6e   ((void)(a)).#en
285a0 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  dif.void sqlite3
285b0 41 74 74 61 63 68 28 50 61 72 73 65 2a 2c 20 45  Attach(Parse*, E
285c0 78 70 72 2a 2c 20 45 78 70 72 2a 2c 20 45 78 70  xpr*, Expr*, Exp
285d0 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  r*);.void sqlite
285e0 33 44 65 74 61 63 68 28 50 61 72 73 65 2a 2c 20  3Detach(Parse*, 
285f0 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  Expr*);.void sql
28600 69 74 65 33 46 69 78 49 6e 69 74 28 44 62 46 69  ite3FixInit(DbFi
28610 78 65 72 2a 2c 20 50 61 72 73 65 2a 2c 20 69 6e  xer*, Parse*, in
28620 74 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  t, const char*, 
28630 63 6f 6e 73 74 20 54 6f 6b 65 6e 2a 29 3b 0a 69  const Token*);.i
28640 6e 74 20 73 71 6c 69 74 65 33 46 69 78 53 72 63  nt sqlite3FixSrc
28650 4c 69 73 74 28 44 62 46 69 78 65 72 2a 2c 20 53  List(DbFixer*, S
28660 72 63 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71  rcList*);.int sq
28670 6c 69 74 65 33 46 69 78 53 65 6c 65 63 74 28 44  lite3FixSelect(D
28680 62 46 69 78 65 72 2a 2c 20 53 65 6c 65 63 74 2a  bFixer*, Select*
28690 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69  );.int sqlite3Fi
286a0 78 45 78 70 72 28 44 62 46 69 78 65 72 2a 2c 20  xExpr(DbFixer*, 
286b0 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  Expr*);.int sqli
286c0 74 65 33 46 69 78 45 78 70 72 4c 69 73 74 28 44  te3FixExprList(D
286d0 62 46 69 78 65 72 2a 2c 20 45 78 70 72 4c 69 73  bFixer*, ExprLis
286e0 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  t*);.int sqlite3
286f0 46 69 78 54 72 69 67 67 65 72 53 74 65 70 28 44  FixTriggerStep(D
28700 62 46 69 78 65 72 2a 2c 20 54 72 69 67 67 65 72  bFixer*, Trigger
28710 53 74 65 70 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  Step*);.int sqli
28720 74 65 33 41 74 6f 46 28 63 6f 6e 73 74 20 63 68  te3AtoF(const ch
28730 61 72 20 2a 7a 2c 20 64 6f 75 62 6c 65 2a 2c 20  ar *z, double*, 
28740 69 6e 74 2c 20 75 38 29 3b 0a 69 6e 74 20 73 71  int, u8);.int sq
28750 6c 69 74 65 33 47 65 74 49 6e 74 33 32 28 63 6f  lite3GetInt32(co
28760 6e 73 74 20 63 68 61 72 20 2a 2c 20 69 6e 74 2a  nst char *, int*
28770 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 41 74  );.int sqlite3At
28780 6f 69 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  oi(const char*);
28790 0a 69 6e 74 20 73 71 6c 69 74 65 33 55 74 66 31  .int sqlite3Utf1
287a0 36 42 79 74 65 4c 65 6e 28 63 6f 6e 73 74 20 76  6ByteLen(const v
287b0 6f 69 64 20 2a 70 44 61 74 61 2c 20 69 6e 74 20  oid *pData, int 
287c0 6e 43 68 61 72 29 3b 0a 69 6e 74 20 73 71 6c 69  nChar);.int sqli
287d0 74 65 33 55 74 66 38 43 68 61 72 4c 65 6e 28 63  te3Utf8CharLen(c
287e0 6f 6e 73 74 20 63 68 61 72 20 2a 70 44 61 74 61  onst char *pData
287f0 2c 20 69 6e 74 20 6e 42 79 74 65 29 3b 0a 75 33  , int nByte);.u3
28800 32 20 73 71 6c 69 74 65 33 55 74 66 38 52 65 61  2 sqlite3Utf8Rea
28810 64 28 63 6f 6e 73 74 20 75 38 2a 2a 29 3b 0a 4c  d(const u8**);.L
28820 6f 67 45 73 74 20 73 71 6c 69 74 65 33 4c 6f 67  ogEst sqlite3Log
28830 45 73 74 28 75 36 34 29 3b 0a 4c 6f 67 45 73 74  Est(u64);.LogEst
28840 20 73 71 6c 69 74 65 33 4c 6f 67 45 73 74 41 64   sqlite3LogEstAd
28850 64 28 4c 6f 67 45 73 74 2c 4c 6f 67 45 73 74 29  d(LogEst,LogEst)
28860 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ;.#ifndef SQLITE
28870 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
28880 4c 45 0a 4c 6f 67 45 73 74 20 73 71 6c 69 74 65  LE.LogEst sqlite
28890 33 4c 6f 67 45 73 74 46 72 6f 6d 44 6f 75 62 6c  3LogEstFromDoubl
288a0 65 28 64 6f 75 62 6c 65 29 3b 0a 23 65 6e 64 69  e(double);.#endi
288b0 66 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51  f.#if defined(SQ
288c0 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 4d 54  LITE_ENABLE_STMT
288d0 5f 53 43 41 4e 53 54 41 54 55 53 29 20 7c 7c 20  _SCANSTATUS) || 
288e0 5c 0a 20 20 20 20 64 65 66 69 6e 65 64 28 53 51  \.    defined(SQ
288f0 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54  LITE_ENABLE_STAT
28900 33 5f 4f 52 5f 53 54 41 54 34 29 20 7c 7c 20 5c  3_OR_STAT4) || \
28910 0a 20 20 20 20 64 65 66 69 6e 65 64 28 53 51 4c  .    defined(SQL
28920 49 54 45 5f 45 58 50 4c 41 49 4e 5f 45 53 54 49  ITE_EXPLAIN_ESTI
28930 4d 41 54 45 44 5f 52 4f 57 53 29 0a 75 36 34 20  MATED_ROWS).u64 
28940 73 71 6c 69 74 65 33 4c 6f 67 45 73 74 54 6f 49  sqlite3LogEstToI
28950 6e 74 28 4c 6f 67 45 73 74 29 3b 0a 23 65 6e 64  nt(LogEst);.#end
28960 69 66 0a 0a 2f 2a 0a 2a 2a 20 52 6f 75 74 69 6e  if../*.** Routin
28970 65 73 20 74 6f 20 72 65 61 64 20 61 6e 64 20 77  es to read and w
28980 72 69 74 65 20 76 61 72 69 61 62 6c 65 2d 6c 65  rite variable-le
28990 6e 67 74 68 20 69 6e 74 65 67 65 72 73 2e 20 20  ngth integers.  
289a0 54 68 65 73 65 20 75 73 65 64 20 74 6f 0a 2a 2a  These used to.**
289b0 20 62 65 20 64 65 66 69 6e 65 64 20 6c 6f 63 61   be defined loca
289c0 6c 6c 79 2c 20 62 75 74 20 6e 6f 77 20 77 65 20  lly, but now we 
289d0 75 73 65 20 74 68 65 20 76 61 72 69 6e 74 20 72  use the varint r
289e0 6f 75 74 69 6e 65 73 20 69 6e 20 74 68 65 20 75  outines in the u
289f0 74 69 6c 2e 63 0a 2a 2a 20 66 69 6c 65 2e 0a 2a  til.c.** file..*
28a00 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 50 75 74  /.int sqlite3Put
28a10 56 61 72 69 6e 74 28 75 6e 73 69 67 6e 65 64 20  Varint(unsigned 
28a20 63 68 61 72 2a 2c 20 75 36 34 29 3b 0a 75 38 20  char*, u64);.u8 
28a30 73 71 6c 69 74 65 33 47 65 74 56 61 72 69 6e 74  sqlite3GetVarint
28a40 28 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20  (const unsigned 
28a50 63 68 61 72 20 2a 2c 20 75 36 34 20 2a 29 3b 0a  char *, u64 *);.
28a60 75 38 20 73 71 6c 69 74 65 33 47 65 74 56 61 72  u8 sqlite3GetVar
28a70 69 6e 74 33 32 28 63 6f 6e 73 74 20 75 6e 73 69  int32(const unsi
28a80 67 6e 65 64 20 63 68 61 72 20 2a 2c 20 75 33 32  gned char *, u32
28a90 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33   *);.int sqlite3
28aa0 56 61 72 69 6e 74 4c 65 6e 28 75 36 34 20 76 29  VarintLen(u64 v)
28ab0 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 63 6f 6d  ;../*.** The com
28ac0 6d 6f 6e 20 63 61 73 65 20 69 73 20 66 6f 72 20  mon case is for 
28ad0 61 20 76 61 72 69 6e 74 20 74 6f 20 62 65 20 61  a varint to be a
28ae0 20 73 69 6e 67 6c 65 20 62 79 74 65 2e 20 20 54   single byte.  T
28af0 68 65 79 20 66 6f 6c 6c 6f 77 69 6e 67 0a 2a 2a  hey following.**
28b00 20 6d 61 63 72 6f 73 20 68 61 6e 64 6c 65 20 74   macros handle t
28b10 68 65 20 63 6f 6d 6d 6f 6e 20 63 61 73 65 20 77  he common case w
28b20 69 74 68 6f 75 74 20 61 20 70 72 6f 63 65 64 75  ithout a procedu
28b30 72 65 20 63 61 6c 6c 2c 20 62 75 74 20 74 68 65  re call, but the
28b40 6e 20 63 61 6c 6c 0a 2a 2a 20 74 68 65 20 70 72  n call.** the pr
28b50 6f 63 65 64 75 72 65 20 66 6f 72 20 6c 61 72 67  ocedure for larg
28b60 65 72 20 76 61 72 69 6e 74 73 2e 0a 2a 2f 0a 23  er varints..*/.#
28b70 64 65 66 69 6e 65 20 67 65 74 56 61 72 69 6e 74  define getVarint
28b80 33 32 28 41 2c 42 29 20 20 5c 0a 20 20 28 75 38  32(A,B)  \.  (u8
28b90 29 28 28 2a 28 41 29 3c 28 75 38 29 30 78 38 30  )((*(A)<(u8)0x80
28ba0 29 3f 28 28 42 29 3d 28 75 33 32 29 2a 28 41 29  )?((B)=(u32)*(A)
28bb0 29 2c 31 3a 73 71 6c 69 74 65 33 47 65 74 56 61  ),1:sqlite3GetVa
28bc0 72 69 6e 74 33 32 28 28 41 29 2c 28 75 33 32 20  rint32((A),(u32 
28bd0 2a 29 26 28 42 29 29 29 0a 23 64 65 66 69 6e 65  *)&(B))).#define
28be0 20 70 75 74 56 61 72 69 6e 74 33 32 28 41 2c 42   putVarint32(A,B
28bf0 29 20 20 5c 0a 20 20 28 75 38 29 28 28 28 75 33  )  \.  (u8)(((u3
28c00 32 29 28 42 29 3c 28 75 33 32 29 30 78 38 30 29  2)(B)<(u32)0x80)
28c10 3f 28 2a 28 41 29 3d 28 75 6e 73 69 67 6e 65 64  ?(*(A)=(unsigned
28c20 20 63 68 61 72 29 28 42 29 29 2c 31 3a 5c 0a 20   char)(B)),1:\. 
28c30 20 73 71 6c 69 74 65 33 50 75 74 56 61 72 69 6e   sqlite3PutVarin
28c40 74 28 28 41 29 2c 28 42 29 29 29 0a 23 64 65 66  t((A),(B))).#def
28c50 69 6e 65 20 67 65 74 56 61 72 69 6e 74 20 20 20  ine getVarint   
28c60 20 73 71 6c 69 74 65 33 47 65 74 56 61 72 69 6e   sqlite3GetVarin
28c70 74 0a 23 64 65 66 69 6e 65 20 70 75 74 56 61 72  t.#define putVar
28c80 69 6e 74 20 20 20 20 73 71 6c 69 74 65 33 50 75  int    sqlite3Pu
28c90 74 56 61 72 69 6e 74 0a 0a 0a 63 6f 6e 73 74 20  tVarint...const 
28ca0 63 68 61 72 20 2a 73 71 6c 69 74 65 33 49 6e 64  char *sqlite3Ind
28cb0 65 78 41 66 66 69 6e 69 74 79 53 74 72 28 73 71  exAffinityStr(sq
28cc0 6c 69 74 65 33 2a 2c 20 49 6e 64 65 78 2a 29 3b  lite3*, Index*);
28cd0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 54 61 62  .void sqlite3Tab
28ce0 6c 65 41 66 66 69 6e 69 74 79 28 56 64 62 65 2a  leAffinity(Vdbe*
28cf0 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 29 3b 0a  , Table*, int);.
28d00 63 68 61 72 20 73 71 6c 69 74 65 33 43 6f 6d 70  char sqlite3Comp
28d10 61 72 65 41 66 66 69 6e 69 74 79 28 45 78 70 72  areAffinity(Expr
28d20 20 2a 70 45 78 70 72 2c 20 63 68 61 72 20 61 66   *pExpr, char af
28d30 66 32 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  f2);.int sqlite3
28d40 49 6e 64 65 78 41 66 66 69 6e 69 74 79 4f 6b 28  IndexAffinityOk(
28d50 45 78 70 72 20 2a 70 45 78 70 72 2c 20 63 68 61  Expr *pExpr, cha
28d60 72 20 69 64 78 5f 61 66 66 69 6e 69 74 79 29 3b  r idx_affinity);
28d70 0a 63 68 61 72 20 73 71 6c 69 74 65 33 45 78 70  .char sqlite3Exp
28d80 72 41 66 66 69 6e 69 74 79 28 45 78 70 72 20 2a  rAffinity(Expr *
28d90 70 45 78 70 72 29 3b 0a 69 6e 74 20 73 71 6c 69  pExpr);.int sqli
28da0 74 65 33 41 74 6f 69 36 34 28 63 6f 6e 73 74 20  te3Atoi64(const 
28db0 63 68 61 72 2a 2c 20 69 36 34 2a 2c 20 69 6e 74  char*, i64*, int
28dc0 2c 20 75 38 29 3b 0a 69 6e 74 20 73 71 6c 69 74  , u8);.int sqlit
28dd0 65 33 44 65 63 4f 72 48 65 78 54 6f 49 36 34 28  e3DecOrHexToI64(
28de0 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 69 36 34  const char*, i64
28df0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
28e00 45 72 72 6f 72 57 69 74 68 4d 73 67 28 73 71 6c  ErrorWithMsg(sql
28e10 69 74 65 33 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73  ite3*, int, cons
28e20 74 20 63 68 61 72 2a 2c 2e 2e 2e 29 3b 0a 76 6f  t char*,...);.vo
28e30 69 64 20 73 71 6c 69 74 65 33 45 72 72 6f 72 28  id sqlite3Error(
28e40 73 71 6c 69 74 65 33 2a 2c 69 6e 74 29 3b 0a 76  sqlite3*,int);.v
28e50 6f 69 64 20 73 71 6c 69 74 65 33 53 79 73 74 65  oid sqlite3Syste
28e60 6d 45 72 72 6f 72 28 73 71 6c 69 74 65 33 2a 2c  mError(sqlite3*,
28e70 69 6e 74 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69  int);.void *sqli
28e80 74 65 33 48 65 78 54 6f 42 6c 6f 62 28 73 71 6c  te3HexToBlob(sql
28e90 69 74 65 33 2a 2c 20 63 6f 6e 73 74 20 63 68 61  ite3*, const cha
28ea0 72 20 2a 7a 2c 20 69 6e 74 20 6e 29 3b 0a 75 38  r *z, int n);.u8
28eb0 20 73 71 6c 69 74 65 33 48 65 78 54 6f 49 6e 74   sqlite3HexToInt
28ec0 28 69 6e 74 20 68 29 3b 0a 69 6e 74 20 73 71 6c  (int h);.int sql
28ed0 69 74 65 33 54 77 6f 50 61 72 74 4e 61 6d 65 28  ite3TwoPartName(
28ee0 50 61 72 73 65 20 2a 2c 20 54 6f 6b 65 6e 20 2a  Parse *, Token *
28ef0 2c 20 54 6f 6b 65 6e 20 2a 2c 20 54 6f 6b 65 6e  , Token *, Token
28f00 20 2a 2a 29 3b 0a 0a 23 69 66 20 64 65 66 69 6e   **);..#if defin
28f10 65 64 28 53 51 4c 49 54 45 5f 4e 45 45 44 5f 45  ed(SQLITE_NEED_E
28f20 52 52 5f 4e 41 4d 45 29 0a 63 6f 6e 73 74 20 63  RR_NAME).const c
28f30 68 61 72 20 2a 73 71 6c 69 74 65 33 45 72 72 4e  har *sqlite3ErrN
28f40 61 6d 65 28 69 6e 74 29 3b 0a 23 65 6e 64 69 66  ame(int);.#endif
28f50 0a 0a 63 6f 6e 73 74 20 63 68 61 72 20 2a 73 71  ..const char *sq
28f60 6c 69 74 65 33 45 72 72 53 74 72 28 69 6e 74 29  lite3ErrStr(int)
28f70 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 65 61  ;.int sqlite3Rea
28f80 64 53 63 68 65 6d 61 28 50 61 72 73 65 20 2a 70  dSchema(Parse *p
28f90 50 61 72 73 65 29 3b 0a 43 6f 6c 6c 53 65 71 20  Parse);.CollSeq 
28fa0 2a 73 71 6c 69 74 65 33 46 69 6e 64 43 6f 6c 6c  *sqlite3FindColl
28fb0 53 65 71 28 73 71 6c 69 74 65 33 2a 2c 75 38 20  Seq(sqlite3*,u8 
28fc0 65 6e 63 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  enc, const char*
28fd0 2c 69 6e 74 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a  ,int);.CollSeq *
28fe0 73 71 6c 69 74 65 33 4c 6f 63 61 74 65 43 6f 6c  sqlite3LocateCol
28ff0 6c 53 65 71 28 50 61 72 73 65 20 2a 70 50 61 72  lSeq(Parse *pPar
29000 73 65 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 7a  se, const char*z
29010 4e 61 6d 65 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a  Name);.CollSeq *
29020 73 71 6c 69 74 65 33 45 78 70 72 43 6f 6c 6c 53  sqlite3ExprCollS
29030 65 71 28 50 61 72 73 65 20 2a 70 50 61 72 73 65  eq(Parse *pParse
29040 2c 20 45 78 70 72 20 2a 70 45 78 70 72 29 3b 0a  , Expr *pExpr);.
29050 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70  Expr *sqlite3Exp
29060 72 41 64 64 43 6f 6c 6c 61 74 65 54 6f 6b 65 6e  rAddCollateToken
29070 28 50 61 72 73 65 20 2a 70 50 61 72 73 65 2c 20  (Parse *pParse, 
29080 45 78 70 72 2a 2c 20 63 6f 6e 73 74 20 54 6f 6b  Expr*, const Tok
29090 65 6e 2a 2c 20 69 6e 74 29 3b 0a 45 78 70 72 20  en*, int);.Expr 
290a0 2a 73 71 6c 69 74 65 33 45 78 70 72 41 64 64 43  *sqlite3ExprAddC
290b0 6f 6c 6c 61 74 65 53 74 72 69 6e 67 28 50 61 72  ollateString(Par
290c0 73 65 2a 2c 45 78 70 72 2a 2c 63 6f 6e 73 74 20  se*,Expr*,const 
290d0 63 68 61 72 2a 29 3b 0a 45 78 70 72 20 2a 73 71  char*);.Expr *sq
290e0 6c 69 74 65 33 45 78 70 72 53 6b 69 70 43 6f 6c  lite3ExprSkipCol
290f0 6c 61 74 65 28 45 78 70 72 2a 29 3b 0a 69 6e 74  late(Expr*);.int
29100 20 73 71 6c 69 74 65 33 43 68 65 63 6b 43 6f 6c   sqlite3CheckCol
29110 6c 53 65 71 28 50 61 72 73 65 20 2a 2c 20 43 6f  lSeq(Parse *, Co
29120 6c 6c 53 65 71 20 2a 29 3b 0a 69 6e 74 20 73 71  llSeq *);.int sq
29130 6c 69 74 65 33 43 68 65 63 6b 4f 62 6a 65 63 74  lite3CheckObject
29140 4e 61 6d 65 28 50 61 72 73 65 20 2a 2c 20 63 6f  Name(Parse *, co
29150 6e 73 74 20 63 68 61 72 20 2a 29 3b 0a 76 6f 69  nst char *);.voi
29160 64 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74  d sqlite3VdbeSet
29170 43 68 61 6e 67 65 73 28 73 71 6c 69 74 65 33 20  Changes(sqlite3 
29180 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c  *, int);.int sql
29190 69 74 65 33 41 64 64 49 6e 74 36 34 28 69 36 34  ite3AddInt64(i64
291a0 2a 2c 69 36 34 29 3b 0a 69 6e 74 20 73 71 6c 69  *,i64);.int sqli
291b0 74 65 33 53 75 62 49 6e 74 36 34 28 69 36 34 2a  te3SubInt64(i64*
291c0 2c 69 36 34 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ,i64);.int sqlit
291d0 65 33 4d 75 6c 49 6e 74 36 34 28 69 36 34 2a 2c  e3MulInt64(i64*,
291e0 69 36 34 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  i64);.int sqlite
291f0 33 41 62 73 49 6e 74 33 32 28 69 6e 74 29 3b 0a  3AbsInt32(int);.
29200 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e  #ifdef SQLITE_EN
29210 41 42 4c 45 5f 38 5f 33 5f 4e 41 4d 45 53 0a 76  ABLE_8_3_NAMES.v
29220 6f 69 64 20 73 71 6c 69 74 65 33 46 69 6c 65 53  oid sqlite3FileS
29230 75 66 66 69 78 33 28 63 6f 6e 73 74 20 63 68 61  uffix3(const cha
29240 72 2a 2c 20 63 68 61 72 2a 29 3b 0a 23 65 6c 73  r*, char*);.#els
29250 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  e.# define sqlit
29260 65 33 46 69 6c 65 53 75 66 66 69 78 33 28 58 2c  e3FileSuffix3(X,
29270 59 29 0a 23 65 6e 64 69 66 0a 75 38 20 73 71 6c  Y).#endif.u8 sql
29280 69 74 65 33 47 65 74 42 6f 6f 6c 65 61 6e 28 63  ite3GetBoolean(c
29290 6f 6e 73 74 20 63 68 61 72 20 2a 7a 2c 75 38 29  onst char *z,u8)
292a0 3b 0a 0a 63 6f 6e 73 74 20 76 6f 69 64 20 2a 73  ;..const void *s
292b0 71 6c 69 74 65 33 56 61 6c 75 65 54 65 78 74 28  qlite3ValueText(
292c0 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2c 20  sqlite3_value*, 
292d0 75 38 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  u8);.int sqlite3
292e0 56 61 6c 75 65 42 79 74 65 73 28 73 71 6c 69 74  ValueBytes(sqlit
292f0 65 33 5f 76 61 6c 75 65 2a 2c 20 75 38 29 3b 0a  e3_value*, u8);.
29300 76 6f 69 64 20 73 71 6c 69 74 65 33 56 61 6c 75  void sqlite3Valu
29310 65 53 65 74 53 74 72 28 73 71 6c 69 74 65 33 5f  eSetStr(sqlite3_
29320 76 61 6c 75 65 2a 2c 20 69 6e 74 2c 20 63 6f 6e  value*, int, con
29330 73 74 20 76 6f 69 64 20 2a 2c 75 38 2c 0a 20 20  st void *,u8,.  
29340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29350 20 20 20 20 20 20 76 6f 69 64 28 2a 29 28 76 6f        void(*)(vo
29360 69 64 2a 29 29 3b 0a 76 6f 69 64 20 73 71 6c 69  id*));.void sqli
29370 74 65 33 56 61 6c 75 65 53 65 74 4e 75 6c 6c 28  te3ValueSetNull(
29380 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 29 3b  sqlite3_value*);
29390 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 61 6c  .void sqlite3Val
293a0 75 65 46 72 65 65 28 73 71 6c 69 74 65 33 5f 76  ueFree(sqlite3_v
293b0 61 6c 75 65 2a 29 3b 0a 73 71 6c 69 74 65 33 5f  alue*);.sqlite3_
293c0 76 61 6c 75 65 20 2a 73 71 6c 69 74 65 33 56 61  value *sqlite3Va
293d0 6c 75 65 4e 65 77 28 73 71 6c 69 74 65 33 20 2a  lueNew(sqlite3 *
293e0 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33  );.char *sqlite3
293f0 55 74 66 31 36 74 6f 38 28 73 71 6c 69 74 65 33  Utf16to8(sqlite3
29400 20 2a 2c 20 63 6f 6e 73 74 20 76 6f 69 64 2a 2c   *, const void*,
29410 20 69 6e 74 2c 20 75 38 29 3b 0a 69 6e 74 20 73   int, u8);.int s
29420 71 6c 69 74 65 33 56 61 6c 75 65 46 72 6f 6d 45  qlite3ValueFromE
29430 78 70 72 28 73 71 6c 69 74 65 33 20 2a 2c 20 45  xpr(sqlite3 *, E
29440 78 70 72 20 2a 2c 20 75 38 2c 20 75 38 2c 20 73  xpr *, u8, u8, s
29450 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a 29  qlite3_value **)
29460 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 61  ;.void sqlite3Va
29470 6c 75 65 41 70 70 6c 79 41 66 66 69 6e 69 74 79  lueApplyAffinity
29480 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a  (sqlite3_value *
29490 2c 20 75 38 2c 20 75 38 29 3b 0a 23 69 66 6e 64  , u8, u8);.#ifnd
294a0 65 66 20 53 51 4c 49 54 45 5f 41 4d 41 4c 47 41  ef SQLITE_AMALGA
294b0 4d 41 54 49 4f 4e 0a 65 78 74 65 72 6e 20 63 6f  MATION.extern co
294c0 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61  nst unsigned cha
294d0 72 20 73 71 6c 69 74 65 33 4f 70 63 6f 64 65 50  r sqlite3OpcodeP
294e0 72 6f 70 65 72 74 79 5b 5d 3b 0a 65 78 74 65 72  roperty[];.exter
294f0 6e 20 63 6f 6e 73 74 20 63 68 61 72 20 73 71 6c  n const char sql
29500 69 74 65 33 53 74 72 42 49 4e 41 52 59 5b 5d 3b  ite3StrBINARY[];
29510 0a 65 78 74 65 72 6e 20 63 6f 6e 73 74 20 75 6e  .extern const un
29520 73 69 67 6e 65 64 20 63 68 61 72 20 73 71 6c 69  signed char sqli
29530 74 65 33 55 70 70 65 72 54 6f 4c 6f 77 65 72 5b  te3UpperToLower[
29540 5d 3b 0a 65 78 74 65 72 6e 20 63 6f 6e 73 74 20  ];.extern const 
29550 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 73 71  unsigned char sq
29560 6c 69 74 65 33 43 74 79 70 65 4d 61 70 5b 5d 3b  lite3CtypeMap[];
29570 0a 65 78 74 65 72 6e 20 63 6f 6e 73 74 20 54 6f  .extern const To
29580 6b 65 6e 20 73 71 6c 69 74 65 33 49 6e 74 54 6f  ken sqlite3IntTo
29590 6b 65 6e 73 5b 5d 3b 0a 65 78 74 65 72 6e 20 53  kens[];.extern S
295a0 51 4c 49 54 45 5f 57 53 44 20 73 74 72 75 63 74  QLITE_WSD struct
295b0 20 53 71 6c 69 74 65 33 43 6f 6e 66 69 67 20 73   Sqlite3Config s
295c0 71 6c 69 74 65 33 43 6f 6e 66 69 67 3b 0a 65 78  qlite3Config;.ex
295d0 74 65 72 6e 20 46 75 6e 63 44 65 66 48 61 73 68  tern FuncDefHash
295e0 20 73 71 6c 69 74 65 33 42 75 69 6c 74 69 6e 46   sqlite3BuiltinF
295f0 75 6e 63 74 69 6f 6e 73 3b 0a 23 69 66 6e 64 65  unctions;.#ifnde
29600 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 53  f SQLITE_OMIT_WS
29610 44 0a 65 78 74 65 72 6e 20 69 6e 74 20 73 71 6c  D.extern int sql
29620 69 74 65 33 50 65 6e 64 69 6e 67 42 79 74 65 3b  ite3PendingByte;
29630 0a 23 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 76  .#endif.#endif.v
29640 6f 69 64 20 73 71 6c 69 74 65 33 52 6f 6f 74 50  oid sqlite3RootP
29650 61 67 65 4d 6f 76 65 64 28 73 71 6c 69 74 65 33  ageMoved(sqlite3
29660 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74  *, int, int, int
29670 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52  );.void sqlite3R
29680 65 69 6e 64 65 78 28 50 61 72 73 65 2a 2c 20 54  eindex(Parse*, T
29690 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a  oken*, Token*);.
296a0 76 6f 69 64 20 73 71 6c 69 74 65 33 41 6c 74 65  void sqlite3Alte
296b0 72 46 75 6e 63 74 69 6f 6e 73 28 76 6f 69 64 29  rFunctions(void)
296c0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 6c  ;.void sqlite3Al
296d0 74 65 72 52 65 6e 61 6d 65 54 61 62 6c 65 28 50  terRenameTable(P
296e0 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c  arse*, SrcList*,
296f0 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71   Token*);.int sq
29700 6c 69 74 65 33 47 65 74 54 6f 6b 65 6e 28 63 6f  lite3GetToken(co
29710 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61  nst unsigned cha
29720 72 20 2a 2c 20 69 6e 74 20 2a 29 3b 0a 76 6f 69  r *, int *);.voi
29730 64 20 73 71 6c 69 74 65 33 4e 65 73 74 65 64 50  d sqlite3NestedP
29740 61 72 73 65 28 50 61 72 73 65 2a 2c 20 63 6f 6e  arse(Parse*, con
29750 73 74 20 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a  st char*, ...);.
29760 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 69  void sqlite3Expi
29770 72 65 50 72 65 70 61 72 65 64 53 74 61 74 65 6d  rePreparedStatem
29780 65 6e 74 73 28 73 71 6c 69 74 65 33 2a 29 3b 0a  ents(sqlite3*);.
29790 69 6e 74 20 73 71 6c 69 74 65 33 43 6f 64 65 53  int sqlite3CodeS
297a0 75 62 73 65 6c 65 63 74 28 50 61 72 73 65 20 2a  ubselect(Parse *
297b0 2c 20 45 78 70 72 20 2a 2c 20 69 6e 74 2c 20 69  , Expr *, int, i
297c0 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
297d0 33 53 65 6c 65 63 74 50 72 65 70 28 50 61 72 73  3SelectPrep(Pars
297e0 65 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 4e 61 6d  e*, Select*, Nam
297f0 65 43 6f 6e 74 65 78 74 2a 29 3b 0a 76 6f 69 64  eContext*);.void
29800 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74 57 72   sqlite3SelectWr
29810 6f 6e 67 4e 75 6d 54 65 72 6d 73 45 72 72 6f 72  ongNumTermsError
29820 28 50 61 72 73 65 20 2a 70 50 61 72 73 65 2c 20  (Parse *pParse, 
29830 53 65 6c 65 63 74 20 2a 70 29 3b 0a 69 6e 74 20  Select *p);.int 
29840 73 71 6c 69 74 65 33 4d 61 74 63 68 53 70 61 6e  sqlite3MatchSpan
29850 4e 61 6d 65 28 63 6f 6e 73 74 20 63 68 61 72 2a  Name(const char*
29860 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63  , const char*, c
29870 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73  onst char*, cons
29880 74 20 63 68 61 72 2a 29 3b 0a 69 6e 74 20 73 71  t char*);.int sq
29890 6c 69 74 65 33 52 65 73 6f 6c 76 65 45 78 70 72  lite3ResolveExpr
298a0 4e 61 6d 65 73 28 4e 61 6d 65 43 6f 6e 74 65 78  Names(NameContex
298b0 74 2a 2c 20 45 78 70 72 2a 29 3b 0a 69 6e 74 20  t*, Expr*);.int 
298c0 73 71 6c 69 74 65 33 52 65 73 6f 6c 76 65 45 78  sqlite3ResolveEx
298d0 70 72 4c 69 73 74 4e 61 6d 65 73 28 4e 61 6d 65  prListNames(Name
298e0 43 6f 6e 74 65 78 74 2a 2c 20 45 78 70 72 4c 69  Context*, ExprLi
298f0 73 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  st*);.void sqlit
29900 65 33 52 65 73 6f 6c 76 65 53 65 6c 65 63 74 4e  e3ResolveSelectN
29910 61 6d 65 73 28 50 61 72 73 65 2a 2c 20 53 65 6c  ames(Parse*, Sel
29920 65 63 74 2a 2c 20 4e 61 6d 65 43 6f 6e 74 65 78  ect*, NameContex
29930 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  t*);.void sqlite
29940 33 52 65 73 6f 6c 76 65 53 65 6c 66 52 65 66 65  3ResolveSelfRefe
29950 72 65 6e 63 65 28 50 61 72 73 65 2a 2c 54 61 62  rence(Parse*,Tab
29960 6c 65 2a 2c 69 6e 74 2c 45 78 70 72 2a 2c 45 78  le*,int,Expr*,Ex
29970 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71  prList*);.int sq
29980 6c 69 74 65 33 52 65 73 6f 6c 76 65 4f 72 64 65  lite3ResolveOrde
29990 72 47 72 6f 75 70 42 79 28 50 61 72 73 65 2a 2c  rGroupBy(Parse*,
299a0 20 53 65 6c 65 63 74 2a 2c 20 45 78 70 72 4c 69   Select*, ExprLi
299b0 73 74 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  st*, const char*
299c0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43  );.void sqlite3C
299d0 6f 6c 75 6d 6e 44 65 66 61 75 6c 74 28 56 64 62  olumnDefault(Vdb
299e0 65 20 2a 2c 20 54 61 62 6c 65 20 2a 2c 20 69 6e  e *, Table *, in
299f0 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  t, int);.void sq
29a00 6c 69 74 65 33 41 6c 74 65 72 46 69 6e 69 73 68  lite3AlterFinish
29a10 41 64 64 43 6f 6c 75 6d 6e 28 50 61 72 73 65 20  AddColumn(Parse 
29a20 2a 2c 20 54 6f 6b 65 6e 20 2a 29 3b 0a 76 6f 69  *, Token *);.voi
29a30 64 20 73 71 6c 69 74 65 33 41 6c 74 65 72 42 65  d sqlite3AlterBe
29a40 67 69 6e 41 64 64 43 6f 6c 75 6d 6e 28 50 61 72  ginAddColumn(Par
29a50 73 65 20 2a 2c 20 53 72 63 4c 69 73 74 20 2a 29  se *, SrcList *)
29a60 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73 71 6c 69 74  ;.CollSeq *sqlit
29a70 65 33 47 65 74 43 6f 6c 6c 53 65 71 28 50 61 72  e3GetCollSeq(Par
29a80 73 65 2a 2c 20 75 38 2c 20 43 6f 6c 6c 53 65 71  se*, u8, CollSeq
29a90 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29   *, const char*)
29aa0 3b 0a 63 68 61 72 20 73 71 6c 69 74 65 33 41 66  ;.char sqlite3Af
29ab0 66 69 6e 69 74 79 54 79 70 65 28 63 6f 6e 73 74  finityType(const
29ac0 20 63 68 61 72 2a 2c 20 75 38 2a 29 3b 0a 76 6f   char*, u8*);.vo
29ad0 69 64 20 73 71 6c 69 74 65 33 41 6e 61 6c 79 7a  id sqlite3Analyz
29ae0 65 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a  e(Parse*, Token*
29af0 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73  , Token*);.int s
29b00 71 6c 69 74 65 33 49 6e 76 6f 6b 65 42 75 73 79  qlite3InvokeBusy
29b10 48 61 6e 64 6c 65 72 28 42 75 73 79 48 61 6e 64  Handler(BusyHand
29b20 6c 65 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ler*);.int sqlit
29b30 65 33 46 69 6e 64 44 62 28 73 71 6c 69 74 65 33  e3FindDb(sqlite3
29b40 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20  *, Token*);.int 
29b50 73 71 6c 69 74 65 33 46 69 6e 64 44 62 4e 61 6d  sqlite3FindDbNam
29b60 65 28 73 71 6c 69 74 65 33 20 2a 2c 20 63 6f 6e  e(sqlite3 *, con
29b70 73 74 20 63 68 61 72 20 2a 29 3b 0a 69 6e 74 20  st char *);.int 
29b80 73 71 6c 69 74 65 33 41 6e 61 6c 79 73 69 73 4c  sqlite3AnalysisL
29b90 6f 61 64 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74  oad(sqlite3*,int
29ba0 20 69 44 42 29 3b 0a 76 6f 69 64 20 73 71 6c 69   iDB);.void sqli
29bb0 74 65 33 44 65 6c 65 74 65 49 6e 64 65 78 53 61  te3DeleteIndexSa
29bc0 6d 70 6c 65 73 28 73 71 6c 69 74 65 33 2a 2c 49  mples(sqlite3*,I
29bd0 6e 64 65 78 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  ndex*);.void sql
29be0 69 74 65 33 44 65 66 61 75 6c 74 52 6f 77 45 73  ite3DefaultRowEs
29bf0 74 28 49 6e 64 65 78 2a 29 3b 0a 76 6f 69 64 20  t(Index*);.void 
29c00 73 71 6c 69 74 65 33 52 65 67 69 73 74 65 72 4c  sqlite3RegisterL
29c10 69 6b 65 46 75 6e 63 74 69 6f 6e 73 28 73 71 6c  ikeFunctions(sql
29c20 69 74 65 33 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74  ite3*, int);.int
29c30 20 73 71 6c 69 74 65 33 49 73 4c 69 6b 65 46 75   sqlite3IsLikeFu
29c40 6e 63 74 69 6f 6e 28 73 71 6c 69 74 65 33 2a 2c  nction(sqlite3*,
29c50 45 78 70 72 2a 2c 69 6e 74 2a 2c 63 68 61 72 2a  Expr*,int*,char*
29c60 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53  );.void sqlite3S
29c70 63 68 65 6d 61 43 6c 65 61 72 28 76 6f 69 64 20  chemaClear(void 
29c80 2a 29 3b 0a 53 63 68 65 6d 61 20 2a 73 71 6c 69  *);.Schema *sqli
29c90 74 65 33 53 63 68 65 6d 61 47 65 74 28 73 71 6c  te3SchemaGet(sql
29ca0 69 74 65 33 20 2a 2c 20 42 74 72 65 65 20 2a 29  ite3 *, Btree *)
29cb0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 63 68  ;.int sqlite3Sch
29cc0 65 6d 61 54 6f 49 6e 64 65 78 28 73 71 6c 69 74  emaToIndex(sqlit
29cd0 65 33 20 2a 64 62 2c 20 53 63 68 65 6d 61 20 2a  e3 *db, Schema *
29ce0 29 3b 0a 4b 65 79 49 6e 66 6f 20 2a 73 71 6c 69  );.KeyInfo *sqli
29cf0 74 65 33 4b 65 79 49 6e 66 6f 41 6c 6c 6f 63 28  te3KeyInfoAlloc(
29d00 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 69 6e 74  sqlite3*,int,int
29d10 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4b  );.void sqlite3K
29d20 65 79 49 6e 66 6f 55 6e 72 65 66 28 4b 65 79 49  eyInfoUnref(KeyI
29d30 6e 66 6f 2a 29 3b 0a 4b 65 79 49 6e 66 6f 20 2a  nfo*);.KeyInfo *
29d40 73 71 6c 69 74 65 33 4b 65 79 49 6e 66 6f 52 65  sqlite3KeyInfoRe
29d50 66 28 4b 65 79 49 6e 66 6f 2a 29 3b 0a 4b 65 79  f(KeyInfo*);.Key
29d60 49 6e 66 6f 20 2a 73 71 6c 69 74 65 33 4b 65 79  Info *sqlite3Key
29d70 49 6e 66 6f 4f 66 49 6e 64 65 78 28 50 61 72 73  InfoOfIndex(Pars
29d80 65 2a 2c 20 49 6e 64 65 78 2a 29 3b 0a 23 69 66  e*, Index*);.#if
29d90 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47  def SQLITE_DEBUG
29da0 0a 69 6e 74 20 73 71 6c 69 74 65 33 4b 65 79 49  .int sqlite3KeyI
29db0 6e 66 6f 49 73 57 72 69 74 65 61 62 6c 65 28 4b  nfoIsWriteable(K
29dc0 65 79 49 6e 66 6f 2a 29 3b 0a 23 65 6e 64 69 66  eyInfo*);.#endif
29dd0 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 72 65 61  .int sqlite3Crea
29de0 74 65 46 75 6e 63 28 73 71 6c 69 74 65 33 20 2a  teFunc(sqlite3 *
29df0 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20  , const char *, 
29e00 69 6e 74 2c 20 69 6e 74 2c 20 76 6f 69 64 20 2a  int, int, void *
29e10 2c 0a 20 20 76 6f 69 64 20 28 2a 29 28 73 71 6c  ,.  void (*)(sql
29e20 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e  ite3_context*,in
29e30 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20  t,sqlite3_value 
29e40 2a 2a 29 2c 0a 20 20 76 6f 69 64 20 28 2a 29 28  **),.  void (*)(
29e50 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a  sqlite3_context*
29e60 2c 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c  ,int,sqlite3_val
29e70 75 65 20 2a 2a 29 2c 20 76 6f 69 64 20 28 2a 29  ue **), void (*)
29e80 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74  (sqlite3_context
29e90 2a 29 2c 0a 20 20 46 75 6e 63 44 65 73 74 72 75  *),.  FuncDestru
29ea0 63 74 6f 72 20 2a 70 44 65 73 74 72 75 63 74 6f  ctor *pDestructo
29eb0 72 0a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  r.);.void sqlite
29ec0 33 4f 6f 6d 46 61 75 6c 74 28 73 71 6c 69 74 65  3OomFault(sqlite
29ed0 33 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  3*);.void sqlite
29ee0 33 4f 6f 6d 43 6c 65 61 72 28 73 71 6c 69 74 65  3OomClear(sqlite
29ef0 33 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  3*);.int sqlite3
29f00 41 70 69 45 78 69 74 28 73 71 6c 69 74 65 33 20  ApiExit(sqlite3 
29f10 2a 64 62 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73  *db, int);.int s
29f20 71 6c 69 74 65 33 4f 70 65 6e 54 65 6d 70 44 61  qlite3OpenTempDa
29f30 74 61 62 61 73 65 28 50 61 72 73 65 20 2a 29 3b  tabase(Parse *);
29f40 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74  ..void sqlite3St
29f50 72 41 63 63 75 6d 49 6e 69 74 28 53 74 72 41 63  rAccumInit(StrAc
29f60 63 75 6d 2a 2c 20 73 71 6c 69 74 65 33 2a 2c 20  cum*, sqlite3*, 
29f70 63 68 61 72 2a 2c 20 69 6e 74 2c 20 69 6e 74 29  char*, int, int)
29f80 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74  ;.void sqlite3St
29f90 72 41 63 63 75 6d 41 70 70 65 6e 64 28 53 74 72  rAccumAppend(Str
29fa0 41 63 63 75 6d 2a 2c 63 6f 6e 73 74 20 63 68 61  Accum*,const cha
29fb0 72 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  r*,int);.void sq
29fc0 6c 69 74 65 33 53 74 72 41 63 63 75 6d 41 70 70  lite3StrAccumApp
29fd0 65 6e 64 41 6c 6c 28 53 74 72 41 63 63 75 6d 2a  endAll(StrAccum*
29fe0 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76  ,const char*);.v
29ff0 6f 69 64 20 73 71 6c 69 74 65 33 41 70 70 65 6e  oid sqlite3Appen
2a000 64 43 68 61 72 28 53 74 72 41 63 63 75 6d 2a 2c  dChar(StrAccum*,
2a010 69 6e 74 2c 63 68 61 72 29 3b 0a 63 68 61 72 20  int,char);.char 
2a020 2a 73 71 6c 69 74 65 33 53 74 72 41 63 63 75 6d  *sqlite3StrAccum
2a030 46 69 6e 69 73 68 28 53 74 72 41 63 63 75 6d 2a  Finish(StrAccum*
2a040 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53  );.void sqlite3S
2a050 74 72 41 63 63 75 6d 52 65 73 65 74 28 53 74 72  trAccumReset(Str
2a060 41 63 63 75 6d 2a 29 3b 0a 76 6f 69 64 20 73 71  Accum*);.void sq
2a070 6c 69 74 65 33 53 65 6c 65 63 74 44 65 73 74 49  lite3SelectDestI
2a080 6e 69 74 28 53 65 6c 65 63 74 44 65 73 74 2a 2c  nit(SelectDest*,
2a090 69 6e 74 2c 69 6e 74 29 3b 0a 45 78 70 72 20 2a  int,int);.Expr *
2a0a0 73 71 6c 69 74 65 33 43 72 65 61 74 65 43 6f 6c  sqlite3CreateCol
2a0b0 75 6d 6e 45 78 70 72 28 73 71 6c 69 74 65 33 20  umnExpr(sqlite3 
2a0c0 2a 2c 20 53 72 63 4c 69 73 74 20 2a 2c 20 69 6e  *, SrcList *, in
2a0d0 74 2c 20 69 6e 74 29 3b 0a 0a 76 6f 69 64 20 73  t, int);..void s
2a0e0 71 6c 69 74 65 33 42 61 63 6b 75 70 52 65 73 74  qlite3BackupRest
2a0f0 61 72 74 28 73 71 6c 69 74 65 33 5f 62 61 63 6b  art(sqlite3_back
2a100 75 70 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  up *);.void sqli
2a110 74 65 33 42 61 63 6b 75 70 55 70 64 61 74 65 28  te3BackupUpdate(
2a120 73 71 6c 69 74 65 33 5f 62 61 63 6b 75 70 20 2a  sqlite3_backup *
2a130 2c 20 50 67 6e 6f 2c 20 63 6f 6e 73 74 20 75 38  , Pgno, const u8
2a140 20 2a 29 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c   *);..#ifdef SQL
2a150 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33  ITE_ENABLE_STAT3
2a160 5f 4f 52 5f 53 54 41 54 34 0a 76 6f 69 64 20 73  _OR_STAT4.void s
2a170 71 6c 69 74 65 33 41 6e 61 6c 79 7a 65 46 75 6e  qlite3AnalyzeFun
2a180 63 74 69 6f 6e 73 28 76 6f 69 64 29 3b 0a 69 6e  ctions(void);.in
2a190 74 20 73 71 6c 69 74 65 33 53 74 61 74 34 50 72  t sqlite3Stat4Pr
2a1a0 6f 62 65 53 65 74 56 61 6c 75 65 28 50 61 72 73  obeSetValue(Pars
2a1b0 65 2a 2c 49 6e 64 65 78 2a 2c 55 6e 70 61 63 6b  e*,Index*,Unpack
2a1c0 65 64 52 65 63 6f 72 64 2a 2a 2c 45 78 70 72 2a  edRecord**,Expr*
2a1d0 2c 75 38 2c 69 6e 74 2c 69 6e 74 2a 29 3b 0a 69  ,u8,int,int*);.i
2a1e0 6e 74 20 73 71 6c 69 74 65 33 53 74 61 74 34 56  nt sqlite3Stat4V
2a1f0 61 6c 75 65 46 72 6f 6d 45 78 70 72 28 50 61 72  alueFromExpr(Par
2a200 73 65 2a 2c 20 45 78 70 72 2a 2c 20 75 38 2c 20  se*, Expr*, u8, 
2a210 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2a 29  sqlite3_value**)
2a220 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74  ;.void sqlite3St
2a230 61 74 34 50 72 6f 62 65 46 72 65 65 28 55 6e 70  at4ProbeFree(Unp
2a240 61 63 6b 65 64 52 65 63 6f 72 64 2a 29 3b 0a 69  ackedRecord*);.i
2a250 6e 74 20 73 71 6c 69 74 65 33 53 74 61 74 34 43  nt sqlite3Stat4C
2a260 6f 6c 75 6d 6e 28 73 71 6c 69 74 65 33 2a 2c 20  olumn(sqlite3*, 
2a270 63 6f 6e 73 74 20 76 6f 69 64 2a 2c 20 69 6e 74  const void*, int
2a280 2c 20 69 6e 74 2c 20 73 71 6c 69 74 65 33 5f 76  , int, sqlite3_v
2a290 61 6c 75 65 2a 2a 29 3b 0a 23 65 6e 64 69 66 0a  alue**);.#endif.
2a2a0 0a 2f 2a 0a 2a 2a 20 54 68 65 20 69 6e 74 65 72  ./*.** The inter
2a2b0 66 61 63 65 20 74 6f 20 74 68 65 20 4c 45 4d 4f  face to the LEMO
2a2c0 4e 2d 67 65 6e 65 72 61 74 65 64 20 70 61 72 73  N-generated pars
2a2d0 65 72 0a 2a 2f 0a 76 6f 69 64 20 2a 73 71 6c 69  er.*/.void *sqli
2a2e0 74 65 33 50 61 72 73 65 72 41 6c 6c 6f 63 28 76  te3ParserAlloc(v
2a2f0 6f 69 64 2a 28 2a 29 28 75 36 34 29 29 3b 0a 76  oid*(*)(u64));.v
2a300 6f 69 64 20 73 71 6c 69 74 65 33 50 61 72 73 65  oid sqlite3Parse
2a310 72 46 72 65 65 28 76 6f 69 64 2a 2c 20 76 6f 69  rFree(void*, voi
2a320 64 28 2a 29 28 76 6f 69 64 2a 29 29 3b 0a 76 6f  d(*)(void*));.vo
2a330 69 64 20 73 71 6c 69 74 65 33 50 61 72 73 65 72  id sqlite3Parser
2a340 28 76 6f 69 64 2a 2c 20 69 6e 74 2c 20 54 6f 6b  (void*, int, Tok
2a350 65 6e 2c 20 50 61 72 73 65 2a 29 3b 0a 23 69 66  en, Parse*);.#if
2a360 64 65 66 20 59 59 54 52 41 43 4b 4d 41 58 53 54  def YYTRACKMAXST
2a370 41 43 4b 44 45 50 54 48 0a 20 20 69 6e 74 20 73  ACKDEPTH.  int s
2a380 71 6c 69 74 65 33 50 61 72 73 65 72 53 74 61 63  qlite3ParserStac
2a390 6b 50 65 61 6b 28 76 6f 69 64 2a 29 3b 0a 23 65  kPeak(void*);.#e
2a3a0 6e 64 69 66 0a 0a 76 6f 69 64 20 73 71 6c 69 74  ndif..void sqlit
2a3b0 65 33 41 75 74 6f 4c 6f 61 64 45 78 74 65 6e 73  e3AutoLoadExtens
2a3c0 69 6f 6e 73 28 73 71 6c 69 74 65 33 2a 29 3b 0a  ions(sqlite3*);.
2a3d0 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
2a3e0 4d 49 54 5f 4c 4f 41 44 5f 45 58 54 45 4e 53 49  MIT_LOAD_EXTENSI
2a3f0 4f 4e 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  ON.  void sqlite
2a400 33 43 6c 6f 73 65 45 78 74 65 6e 73 69 6f 6e 73  3CloseExtensions
2a410 28 73 71 6c 69 74 65 33 2a 29 3b 0a 23 65 6c 73  (sqlite3*);.#els
2a420 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  e.# define sqlit
2a430 65 33 43 6c 6f 73 65 45 78 74 65 6e 73 69 6f 6e  e3CloseExtension
2a440 73 28 58 29 0a 23 65 6e 64 69 66 0a 0a 23 69 66  s(X).#endif..#if
2a450 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
2a460 5f 53 48 41 52 45 44 5f 43 41 43 48 45 0a 20 20  _SHARED_CACHE.  
2a470 76 6f 69 64 20 73 71 6c 69 74 65 33 54 61 62 6c  void sqlite3Tabl
2a480 65 4c 6f 63 6b 28 50 61 72 73 65 20 2a 2c 20 69  eLock(Parse *, i
2a490 6e 74 2c 20 69 6e 74 2c 20 75 38 2c 20 63 6f 6e  nt, int, u8, con
2a4a0 73 74 20 63 68 61 72 20 2a 29 3b 0a 23 65 6c 73  st char *);.#els
2a4b0 65 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69  e.  #define sqli
2a4c0 74 65 33 54 61 62 6c 65 4c 6f 63 6b 28 76 2c 77  te3TableLock(v,w
2a4d0 2c 78 2c 79 2c 7a 29 0a 23 65 6e 64 69 66 0a 0a  ,x,y,z).#endif..
2a4e0 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 54 45  #ifdef SQLITE_TE
2a4f0 53 54 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33  ST.  int sqlite3
2a500 55 74 66 38 54 6f 38 28 75 6e 73 69 67 6e 65 64  Utf8To8(unsigned
2a510 20 63 68 61 72 2a 29 3b 0a 23 65 6e 64 69 66 0a   char*);.#endif.
2a520 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f  .#ifdef SQLITE_O
2a530 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
2a540 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74  .#  define sqlit
2a550 65 33 56 74 61 62 43 6c 65 61 72 28 59 29 0a 23  e3VtabClear(Y).#
2a560 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33    define sqlite3
2a570 56 74 61 62 53 79 6e 63 28 58 2c 59 29 20 53 51  VtabSync(X,Y) SQ
2a580 4c 49 54 45 5f 4f 4b 0a 23 20 20 64 65 66 69 6e  LITE_OK.#  defin
2a590 65 20 73 71 6c 69 74 65 33 56 74 61 62 52 6f 6c  e sqlite3VtabRol
2a5a0 6c 62 61 63 6b 28 58 29 0a 23 20 20 64 65 66 69  lback(X).#  defi
2a5b0 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62 43 6f  ne sqlite3VtabCo
2a5c0 6d 6d 69 74 28 58 29 0a 23 20 20 64 65 66 69 6e  mmit(X).#  defin
2a5d0 65 20 73 71 6c 69 74 65 33 56 74 61 62 49 6e 53  e sqlite3VtabInS
2a5e0 79 6e 63 28 64 62 29 20 30 0a 23 20 20 64 65 66  ync(db) 0.#  def
2a5f0 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62 4c  ine sqlite3VtabL
2a600 6f 63 6b 28 58 29 0a 23 20 20 64 65 66 69 6e 65  ock(X).#  define
2a610 20 73 71 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f   sqlite3VtabUnlo
2a620 63 6b 28 58 29 0a 23 20 20 64 65 66 69 6e 65 20  ck(X).#  define 
2a630 73 71 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f 63  sqlite3VtabUnloc
2a640 6b 4c 69 73 74 28 58 29 0a 23 20 20 64 65 66 69  kList(X).#  defi
2a650 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62 53 61  ne sqlite3VtabSa
2a660 76 65 70 6f 69 6e 74 28 58 2c 20 59 2c 20 5a 29  vepoint(X, Y, Z)
2a670 20 53 51 4c 49 54 45 5f 4f 4b 0a 23 20 20 64 65   SQLITE_OK.#  de
2a680 66 69 6e 65 20 73 71 6c 69 74 65 33 47 65 74 56  fine sqlite3GetV
2a690 54 61 62 6c 65 28 58 2c 59 29 20 20 28 28 56 54  Table(X,Y)  ((VT
2a6a0 61 62 6c 65 2a 29 30 29 0a 23 65 6c 73 65 0a 20  able*)0).#else. 
2a6b0 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74    void sqlite3Vt
2a6c0 61 62 43 6c 65 61 72 28 73 71 6c 69 74 65 33 20  abClear(sqlite3 
2a6d0 2a 64 62 2c 20 54 61 62 6c 65 2a 29 3b 0a 20 20  *db, Table*);.  
2a6e0 20 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61   void sqlite3Vta
2a6f0 62 44 69 73 63 6f 6e 6e 65 63 74 28 73 71 6c 69  bDisconnect(sqli
2a700 74 65 33 20 2a 64 62 2c 20 54 61 62 6c 65 20 2a  te3 *db, Table *
2a710 70 29 3b 0a 20 20 20 69 6e 74 20 73 71 6c 69 74  p);.   int sqlit
2a720 65 33 56 74 61 62 53 79 6e 63 28 73 71 6c 69 74  e3VtabSync(sqlit
2a730 65 33 20 2a 64 62 2c 20 56 64 62 65 2a 29 3b 0a  e3 *db, Vdbe*);.
2a740 20 20 20 69 6e 74 20 73 71 6c 69 74 65 33 56 74     int sqlite3Vt
2a750 61 62 52 6f 6c 6c 62 61 63 6b 28 73 71 6c 69 74  abRollback(sqlit
2a760 65 33 20 2a 64 62 29 3b 0a 20 20 20 69 6e 74 20  e3 *db);.   int 
2a770 73 71 6c 69 74 65 33 56 74 61 62 43 6f 6d 6d 69  sqlite3VtabCommi
2a780 74 28 73 71 6c 69 74 65 33 20 2a 64 62 29 3b 0a  t(sqlite3 *db);.
2a790 20 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 56     void sqlite3V
2a7a0 74 61 62 4c 6f 63 6b 28 56 54 61 62 6c 65 20 2a  tabLock(VTable *
2a7b0 29 3b 0a 20 20 20 76 6f 69 64 20 73 71 6c 69 74  );.   void sqlit
2a7c0 65 33 56 74 61 62 55 6e 6c 6f 63 6b 28 56 54 61  e3VtabUnlock(VTa
2a7d0 62 6c 65 20 2a 29 3b 0a 20 20 20 76 6f 69 64 20  ble *);.   void 
2a7e0 73 71 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f 63  sqlite3VtabUnloc
2a7f0 6b 4c 69 73 74 28 73 71 6c 69 74 65 33 2a 29 3b  kList(sqlite3*);
2a800 0a 20 20 20 69 6e 74 20 73 71 6c 69 74 65 33 56  .   int sqlite3V
2a810 74 61 62 53 61 76 65 70 6f 69 6e 74 28 73 71 6c  tabSavepoint(sql
2a820 69 74 65 33 20 2a 2c 20 69 6e 74 2c 20 69 6e 74  ite3 *, int, int
2a830 29 3b 0a 20 20 20 76 6f 69 64 20 73 71 6c 69 74  );.   void sqlit
2a840 65 33 56 74 61 62 49 6d 70 6f 72 74 45 72 72 6d  e3VtabImportErrm
2a850 73 67 28 56 64 62 65 2a 2c 20 73 71 6c 69 74 65  sg(Vdbe*, sqlite
2a860 33 5f 76 74 61 62 2a 29 3b 0a 20 20 20 56 54 61  3_vtab*);.   VTa
2a870 62 6c 65 20 2a 73 71 6c 69 74 65 33 47 65 74 56  ble *sqlite3GetV
2a880 54 61 62 6c 65 28 73 71 6c 69 74 65 33 2a 2c 20  Table(sqlite3*, 
2a890 54 61 62 6c 65 2a 29 3b 0a 23 20 20 64 65 66 69  Table*);.#  defi
2a8a0 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62 49 6e  ne sqlite3VtabIn
2a8b0 53 79 6e 63 28 64 62 29 20 28 28 64 62 29 2d 3e  Sync(db) ((db)->
2a8c0 6e 56 54 72 61 6e 73 3e 30 20 26 26 20 28 64 62  nVTrans>0 && (db
2a8d0 29 2d 3e 61 56 54 72 61 6e 73 3d 3d 30 29 0a 23  )->aVTrans==0).#
2a8e0 65 6e 64 69 66 0a 69 6e 74 20 73 71 6c 69 74 65  endif.int sqlite
2a8f0 33 56 74 61 62 45 70 6f 6e 79 6d 6f 75 73 54 61  3VtabEponymousTa
2a900 62 6c 65 49 6e 69 74 28 50 61 72 73 65 2a 2c 4d  bleInit(Parse*,M
2a910 6f 64 75 6c 65 2a 29 3b 0a 76 6f 69 64 20 73 71  odule*);.void sq
2a920 6c 69 74 65 33 56 74 61 62 45 70 6f 6e 79 6d 6f  lite3VtabEponymo
2a930 75 73 54 61 62 6c 65 43 6c 65 61 72 28 73 71 6c  usTableClear(sql
2a940 69 74 65 33 2a 2c 4d 6f 64 75 6c 65 2a 29 3b 0a  ite3*,Module*);.
2a950 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62  void sqlite3Vtab
2a960 4d 61 6b 65 57 72 69 74 61 62 6c 65 28 50 61 72  MakeWritable(Par
2a970 73 65 2a 2c 54 61 62 6c 65 2a 29 3b 0a 76 6f 69  se*,Table*);.voi
2a980 64 20 73 71 6c 69 74 65 33 56 74 61 62 42 65 67  d sqlite3VtabBeg
2a990 69 6e 50 61 72 73 65 28 50 61 72 73 65 2a 2c 20  inParse(Parse*, 
2a9a0 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c 20  Token*, Token*, 
2a9b0 54 6f 6b 65 6e 2a 2c 20 69 6e 74 29 3b 0a 76 6f  Token*, int);.vo
2a9c0 69 64 20 73 71 6c 69 74 65 33 56 74 61 62 46 69  id sqlite3VtabFi
2a9d0 6e 69 73 68 50 61 72 73 65 28 50 61 72 73 65 2a  nishParse(Parse*
2a9e0 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20  , Token*);.void 
2a9f0 73 71 6c 69 74 65 33 56 74 61 62 41 72 67 49 6e  sqlite3VtabArgIn
2aa00 69 74 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64  it(Parse*);.void
2aa10 20 73 71 6c 69 74 65 33 56 74 61 62 41 72 67 45   sqlite3VtabArgE
2aa20 78 74 65 6e 64 28 50 61 72 73 65 2a 2c 20 54 6f  xtend(Parse*, To
2aa30 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ken*);.int sqlit
2aa40 65 33 56 74 61 62 43 61 6c 6c 43 72 65 61 74 65  e3VtabCallCreate
2aa50 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74 2c 20  (sqlite3*, int, 
2aa60 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20 63 68  const char *, ch
2aa70 61 72 20 2a 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  ar **);.int sqli
2aa80 74 65 33 56 74 61 62 43 61 6c 6c 43 6f 6e 6e 65  te3VtabCallConne
2aa90 63 74 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65  ct(Parse*, Table
2aaa0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56  *);.int sqlite3V
2aab0 74 61 62 43 61 6c 6c 44 65 73 74 72 6f 79 28 73  tabCallDestroy(s
2aac0 71 6c 69 74 65 33 2a 2c 20 69 6e 74 2c 20 63 6f  qlite3*, int, co
2aad0 6e 73 74 20 63 68 61 72 20 2a 29 3b 0a 69 6e 74  nst char *);.int
2aae0 20 73 71 6c 69 74 65 33 56 74 61 62 42 65 67 69   sqlite3VtabBegi
2aaf0 6e 28 73 71 6c 69 74 65 33 20 2a 2c 20 56 54 61  n(sqlite3 *, VTa
2ab00 62 6c 65 20 2a 29 3b 0a 46 75 6e 63 44 65 66 20  ble *);.FuncDef 
2ab10 2a 73 71 6c 69 74 65 33 56 74 61 62 4f 76 65 72  *sqlite3VtabOver
2ab20 6c 6f 61 64 46 75 6e 63 74 69 6f 6e 28 73 71 6c  loadFunction(sql
2ab30 69 74 65 33 20 2a 2c 46 75 6e 63 44 65 66 2a 2c  ite3 *,FuncDef*,
2ab40 20 69 6e 74 20 6e 41 72 67 2c 20 45 78 70 72 2a   int nArg, Expr*
2ab50 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 49  );.void sqlite3I
2ab60 6e 76 61 6c 69 64 46 75 6e 63 74 69 6f 6e 28 73  nvalidFunction(s
2ab70 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c  qlite3_context*,
2ab80 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75  int,sqlite3_valu
2ab90 65 2a 2a 29 3b 0a 73 71 6c 69 74 65 33 5f 69 6e  e**);.sqlite3_in
2aba0 74 36 34 20 73 71 6c 69 74 65 33 53 74 6d 74 43  t64 sqlite3StmtC
2abb0 75 72 72 65 6e 74 54 69 6d 65 28 73 71 6c 69 74  urrentTime(sqlit
2abc0 65 33 5f 63 6f 6e 74 65 78 74 2a 29 3b 0a 69 6e  e3_context*);.in
2abd0 74 20 73 71 6c 69 74 65 33 56 64 62 65 50 61 72  t sqlite3VdbePar
2abe0 61 6d 65 74 65 72 49 6e 64 65 78 28 56 64 62 65  ameterIndex(Vdbe
2abf0 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  *, const char*, 
2ac00 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  int);.int sqlite
2ac10 33 54 72 61 6e 73 66 65 72 42 69 6e 64 69 6e 67  3TransferBinding
2ac20 73 28 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a  s(sqlite3_stmt *
2ac30 2c 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a  , sqlite3_stmt *
2ac40 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50  );.void sqlite3P
2ac50 61 72 73 65 72 52 65 73 65 74 28 50 61 72 73 65  arserReset(Parse
2ac60 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52  *);.int sqlite3R
2ac70 65 70 72 65 70 61 72 65 28 56 64 62 65 2a 29 3b  eprepare(Vdbe*);
2ac80 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
2ac90 72 4c 69 73 74 43 68 65 63 6b 4c 65 6e 67 74 68  rListCheckLength
2aca0 28 50 61 72 73 65 2a 2c 20 45 78 70 72 4c 69 73  (Parse*, ExprLis
2acb0 74 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29  t*, const char*)
2acc0 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73 71 6c 69 74  ;.CollSeq *sqlit
2acd0 65 33 42 69 6e 61 72 79 43 6f 6d 70 61 72 65 43  e3BinaryCompareC
2ace0 6f 6c 6c 53 65 71 28 50 61 72 73 65 20 2a 2c 20  ollSeq(Parse *, 
2acf0 45 78 70 72 20 2a 2c 20 45 78 70 72 20 2a 29 3b  Expr *, Expr *);
2ad00 0a 69 6e 74 20 73 71 6c 69 74 65 33 54 65 6d 70  .int sqlite3Temp
2ad10 49 6e 4d 65 6d 6f 72 79 28 63 6f 6e 73 74 20 73  InMemory(const s
2ad20 71 6c 69 74 65 33 2a 29 3b 0a 63 6f 6e 73 74 20  qlite3*);.const 
2ad30 63 68 61 72 20 2a 73 71 6c 69 74 65 33 4a 6f 75  char *sqlite3Jou
2ad40 72 6e 61 6c 4d 6f 64 65 6e 61 6d 65 28 69 6e 74  rnalModename(int
2ad50 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  );.#ifndef SQLIT
2ad60 45 5f 4f 4d 49 54 5f 57 41 4c 0a 20 20 69 6e 74  E_OMIT_WAL.  int
2ad70 20 73 71 6c 69 74 65 33 43 68 65 63 6b 70 6f 69   sqlite3Checkpoi
2ad80 6e 74 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74  nt(sqlite3*, int
2ad90 2c 20 69 6e 74 2c 20 69 6e 74 2a 2c 20 69 6e 74  , int, int*, int
2ada0 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65  *);.  int sqlite
2adb0 33 57 61 6c 44 65 66 61 75 6c 74 48 6f 6f 6b 28  3WalDefaultHook(
2adc0 76 6f 69 64 2a 2c 73 71 6c 69 74 65 33 2a 2c 63  void*,sqlite3*,c
2add0 6f 6e 73 74 20 63 68 61 72 2a 2c 69 6e 74 29 3b  onst char*,int);
2ade0 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20  .#endif.#ifndef 
2adf0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 54 45 0a  SQLITE_OMIT_CTE.
2ae00 20 20 57 69 74 68 20 2a 73 71 6c 69 74 65 33 57    With *sqlite3W
2ae10 69 74 68 41 64 64 28 50 61 72 73 65 2a 2c 57 69  ithAdd(Parse*,Wi
2ae20 74 68 2a 2c 54 6f 6b 65 6e 2a 2c 45 78 70 72 4c  th*,Token*,ExprL
2ae30 69 73 74 2a 2c 53 65 6c 65 63 74 2a 29 3b 0a 20  ist*,Select*);. 
2ae40 20 76 6f 69 64 20 73 71 6c 69 74 65 33 57 69 74   void sqlite3Wit
2ae50 68 44 65 6c 65 74 65 28 73 71 6c 69 74 65 33 2a  hDelete(sqlite3*
2ae60 2c 57 69 74 68 2a 29 3b 0a 20 20 76 6f 69 64 20  ,With*);.  void 
2ae70 73 71 6c 69 74 65 33 57 69 74 68 50 75 73 68 28  sqlite3WithPush(
2ae80 50 61 72 73 65 2a 2c 20 57 69 74 68 2a 2c 20 75  Parse*, With*, u
2ae90 38 29 3b 0a 23 65 6c 73 65 0a 23 64 65 66 69 6e  8);.#else.#defin
2aea0 65 20 73 71 6c 69 74 65 33 57 69 74 68 50 75 73  e sqlite3WithPus
2aeb0 68 28 78 2c 79 2c 7a 29 0a 23 64 65 66 69 6e 65  h(x,y,z).#define
2aec0 20 73 71 6c 69 74 65 33 57 69 74 68 44 65 6c 65   sqlite3WithDele
2aed0 74 65 28 78 2c 79 29 0a 23 65 6e 64 69 66 0a 0a  te(x,y).#endif..
2aee0 2f 2a 20 44 65 63 6c 61 72 61 74 69 6f 6e 73 20  /* Declarations 
2aef0 66 6f 72 20 66 75 6e 63 74 69 6f 6e 73 20 69 6e  for functions in
2af00 20 66 6b 65 79 2e 63 2e 20 41 6c 6c 20 6f 66 20   fkey.c. All of 
2af10 74 68 65 73 65 20 61 72 65 20 72 65 70 6c 61 63  these are replac
2af20 65 64 20 62 79 0a 2a 2a 20 6e 6f 2d 6f 70 20 6d  ed by.** no-op m
2af30 61 63 72 6f 73 20 69 66 20 4f 4d 49 54 5f 46 4f  acros if OMIT_FO
2af40 52 45 49 47 4e 5f 4b 45 59 20 69 73 20 64 65 66  REIGN_KEY is def
2af50 69 6e 65 64 2e 20 49 6e 20 74 68 69 73 20 63 61  ined. In this ca
2af60 73 65 20 6e 6f 20 66 6f 72 65 69 67 6e 0a 2a 2a  se no foreign.**
2af70 20 6b 65 79 20 66 75 6e 63 74 69 6f 6e 61 6c 69   key functionali
2af80 74 79 20 69 73 20 61 76 61 69 6c 61 62 6c 65 2e  ty is available.
2af90 20 49 66 20 4f 4d 49 54 5f 54 52 49 47 47 45 52   If OMIT_TRIGGER
2afa0 20 69 73 20 64 65 66 69 6e 65 64 20 62 75 74 0a   is defined but.
2afb0 2a 2a 20 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f  ** OMIT_FOREIGN_
2afc0 4b 45 59 20 69 73 20 6e 6f 74 2c 20 6f 6e 6c 79  KEY is not, only
2afd0 20 73 6f 6d 65 20 6f 66 20 74 68 65 20 66 75 6e   some of the fun
2afe0 63 74 69 6f 6e 73 20 61 72 65 20 6e 6f 2d 6f 70  ctions are no-op
2aff0 65 64 2e 20 49 6e 0a 2a 2a 20 74 68 69 73 20 63  ed. In.** this c
2b000 61 73 65 20 66 6f 72 65 69 67 6e 20 6b 65 79 73  ase foreign keys
2b010 20 61 72 65 20 70 61 72 73 65 64 2c 20 62 75 74   are parsed, but
2b020 20 6e 6f 20 6f 74 68 65 72 20 66 75 6e 63 74 69   no other functi
2b030 6f 6e 61 6c 69 74 79 20 69 73 0a 2a 2a 20 70 72  onality is.** pr
2b040 6f 76 69 64 65 64 20 28 65 6e 66 6f 72 63 65 6d  ovided (enforcem
2b050 65 6e 74 20 6f 66 20 46 4b 20 63 6f 6e 73 74 72  ent of FK constr
2b060 61 69 6e 74 73 20 72 65 71 75 69 72 65 73 20 74  aints requires t
2b070 68 65 20 74 72 69 67 67 65 72 73 20 73 75 62 2d  he triggers sub-
2b080 73 79 73 74 65 6d 29 2e 0a 2a 2f 0a 23 69 66 20  system)..*/.#if 
2b090 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
2b0a0 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59  OMIT_FOREIGN_KEY
2b0b0 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 53 51  ) && !defined(SQ
2b0c0 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47 45  LITE_OMIT_TRIGGE
2b0d0 52 29 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  R).  void sqlite
2b0e0 33 46 6b 43 68 65 63 6b 28 50 61 72 73 65 2a 2c  3FkCheck(Parse*,
2b0f0 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e   Table*, int, in
2b100 74 2c 20 69 6e 74 2a 2c 20 69 6e 74 29 3b 0a 20  t, int*, int);. 
2b110 20 76 6f 69 64 20 73 71 6c 69 74 65 33 46 6b 44   void sqlite3FkD
2b120 72 6f 70 54 61 62 6c 65 28 50 61 72 73 65 2a 2c  ropTable(Parse*,
2b130 20 53 72 63 4c 69 73 74 20 2a 2c 20 54 61 62 6c   SrcList *, Tabl
2b140 65 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69  e*);.  void sqli
2b150 74 65 33 46 6b 41 63 74 69 6f 6e 73 28 50 61 72  te3FkActions(Par
2b160 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 45 78 70  se*, Table*, Exp
2b170 72 4c 69 73 74 2a 2c 20 69 6e 74 2c 20 69 6e 74  rList*, int, int
2b180 2a 2c 20 69 6e 74 29 3b 0a 20 20 69 6e 74 20 73  *, int);.  int s
2b190 71 6c 69 74 65 33 46 6b 52 65 71 75 69 72 65 64  qlite3FkRequired
2b1a0 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c  (Parse*, Table*,
2b1b0 20 69 6e 74 2a 2c 20 69 6e 74 29 3b 0a 20 20 75   int*, int);.  u
2b1c0 33 32 20 73 71 6c 69 74 65 33 46 6b 4f 6c 64 6d  32 sqlite3FkOldm
2b1d0 61 73 6b 28 50 61 72 73 65 2a 2c 20 54 61 62 6c  ask(Parse*, Tabl
2b1e0 65 2a 29 3b 0a 20 20 46 4b 65 79 20 2a 73 71 6c  e*);.  FKey *sql
2b1f0 69 74 65 33 46 6b 52 65 66 65 72 65 6e 63 65 73  ite3FkReferences
2b200 28 54 61 62 6c 65 20 2a 29 3b 0a 23 65 6c 73 65  (Table *);.#else
2b210 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74  .  #define sqlit
2b220 65 33 46 6b 41 63 74 69 6f 6e 73 28 61 2c 62 2c  e3FkActions(a,b,
2b230 63 2c 64 2c 65 2c 66 29 0a 20 20 23 64 65 66 69  c,d,e,f).  #defi
2b240 6e 65 20 73 71 6c 69 74 65 33 46 6b 43 68 65 63  ne sqlite3FkChec
2b250 6b 28 61 2c 62 2c 63 2c 64 2c 65 2c 66 29 0a 20  k(a,b,c,d,e,f). 
2b260 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33   #define sqlite3
2b270 46 6b 44 72 6f 70 54 61 62 6c 65 28 61 2c 62 2c  FkDropTable(a,b,
2b280 63 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c  c).  #define sql
2b290 69 74 65 33 46 6b 4f 6c 64 6d 61 73 6b 28 61 2c  ite3FkOldmask(a,
2b2a0 62 29 20 20 20 20 20 20 20 20 20 30 0a 20 20 23  b)         0.  #
2b2b0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46 6b  define sqlite3Fk
2b2c0 52 65 71 75 69 72 65 64 28 61 2c 62 2c 63 2c 64  Required(a,b,c,d
2b2d0 29 20 20 20 20 30 0a 23 65 6e 64 69 66 0a 23 69  )    0.#endif.#i
2b2e0 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
2b2f0 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 0a 20 20  T_FOREIGN_KEY.  
2b300 76 6f 69 64 20 73 71 6c 69 74 65 33 46 6b 44 65  void sqlite3FkDe
2b310 6c 65 74 65 28 73 71 6c 69 74 65 33 20 2a 2c 20  lete(sqlite3 *, 
2b320 54 61 62 6c 65 2a 29 3b 0a 20 20 69 6e 74 20 73  Table*);.  int s
2b330 71 6c 69 74 65 33 46 6b 4c 6f 63 61 74 65 49 6e  qlite3FkLocateIn
2b340 64 65 78 28 50 61 72 73 65 2a 2c 54 61 62 6c 65  dex(Parse*,Table
2b350 2a 2c 46 4b 65 79 2a 2c 49 6e 64 65 78 2a 2a 2c  *,FKey*,Index**,
2b360 69 6e 74 2a 2a 29 3b 0a 23 65 6c 73 65 0a 20 20  int**);.#else.  
2b370 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46  #define sqlite3F
2b380 6b 44 65 6c 65 74 65 28 61 2c 62 29 0a 20 20 23  kDelete(a,b).  #
2b390 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46 6b  define sqlite3Fk
2b3a0 4c 6f 63 61 74 65 49 6e 64 65 78 28 61 2c 62 2c  LocateIndex(a,b,
2b3b0 63 2c 64 2c 65 29 0a 23 65 6e 64 69 66 0a 0a 0a  c,d,e).#endif...
2b3c0 2f 2a 0a 2a 2a 20 41 76 61 69 6c 61 62 6c 65 20  /*.** Available 
2b3d0 66 61 75 6c 74 20 69 6e 6a 65 63 74 6f 72 73 2e  fault injectors.
2b3e0 20 20 53 68 6f 75 6c 64 20 62 65 20 6e 75 6d 62    Should be numb
2b3f0 65 72 65 64 20 62 65 67 69 6e 6e 69 6e 67 20 77  ered beginning w
2b400 69 74 68 20 30 2e 0a 2a 2f 0a 23 64 65 66 69 6e  ith 0..*/.#defin
2b410 65 20 53 51 4c 49 54 45 5f 46 41 55 4c 54 49 4e  e SQLITE_FAULTIN
2b420 4a 45 43 54 4f 52 5f 4d 41 4c 4c 4f 43 20 20 20  JECTOR_MALLOC   
2b430 20 20 30 0a 23 64 65 66 69 6e 65 20 53 51 4c 49    0.#define SQLI
2b440 54 45 5f 46 41 55 4c 54 49 4e 4a 45 43 54 4f 52  TE_FAULTINJECTOR
2b450 5f 43 4f 55 4e 54 20 20 20 20 20 20 31 0a 0a 2f  _COUNT      1../
2b460 2a 0a 2a 2a 20 54 68 65 20 69 6e 74 65 72 66 61  *.** The interfa
2b470 63 65 20 74 6f 20 74 68 65 20 63 6f 64 65 20 69  ce to the code i
2b480 6e 20 66 61 75 6c 74 2e 63 20 75 73 65 64 20 66  n fault.c used f
2b490 6f 72 20 69 64 65 6e 74 69 66 79 69 6e 67 20 22  or identifying "
2b4a0 62 65 6e 69 67 6e 22 0a 2a 2a 20 6d 61 6c 6c 6f  benign".** mallo
2b4b0 63 20 66 61 69 6c 75 72 65 73 2e 20 54 68 69 73  c failures. This
2b4c0 20 69 73 20 6f 6e 6c 79 20 70 72 65 73 65 6e 74   is only present
2b4d0 20 69 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f   if SQLITE_OMIT_
2b4e0 42 55 49 4c 54 49 4e 5f 54 45 53 54 0a 2a 2a 20  BUILTIN_TEST.** 
2b4f0 69 73 20 6e 6f 74 20 64 65 66 69 6e 65 64 2e 0a  is not defined..
2b500 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  */.#ifndef SQLIT
2b510 45 5f 4f 4d 49 54 5f 42 55 49 4c 54 49 4e 5f 54  E_OMIT_BUILTIN_T
2b520 45 53 54 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  EST.  void sqlit
2b530 65 33 42 65 67 69 6e 42 65 6e 69 67 6e 4d 61 6c  e3BeginBenignMal
2b540 6c 6f 63 28 76 6f 69 64 29 3b 0a 20 20 76 6f 69  loc(void);.  voi
2b550 64 20 73 71 6c 69 74 65 33 45 6e 64 42 65 6e 69  d sqlite3EndBeni
2b560 67 6e 4d 61 6c 6c 6f 63 28 76 6f 69 64 29 3b 0a  gnMalloc(void);.
2b570 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20  #else.  #define 
2b580 73 71 6c 69 74 65 33 42 65 67 69 6e 42 65 6e 69  sqlite3BeginBeni
2b590 67 6e 4d 61 6c 6c 6f 63 28 29 0a 20 20 23 64 65  gnMalloc().  #de
2b5a0 66 69 6e 65 20 73 71 6c 69 74 65 33 45 6e 64 42  fine sqlite3EndB
2b5b0 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28 29 0a 23 65  enignMalloc().#e
2b5c0 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f  ndif../*.** Allo
2b5d0 77 65 64 20 72 65 74 75 72 6e 20 76 61 6c 75 65  wed return value
2b5e0 73 20 66 72 6f 6d 20 73 71 6c 69 74 65 33 46 69  s from sqlite3Fi
2b5f0 6e 64 49 6e 49 6e 64 65 78 28 29 0a 2a 2f 0a 23  ndInIndex().*/.#
2b600 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f  define IN_INDEX_
2b610 52 4f 57 49 44 20 20 20 20 20 20 20 20 31 20 20  ROWID        1  
2b620 20 2f 2a 20 53 65 61 72 63 68 20 74 68 65 20 72   /* Search the r
2b630 6f 77 69 64 20 6f 66 20 74 68 65 20 74 61 62 6c  owid of the tabl
2b640 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f  e */.#define IN_
2b650 49 4e 44 45 58 5f 45 50 48 20 20 20 20 20 20 20  INDEX_EPH       
2b660 20 20 20 32 20 20 20 2f 2a 20 53 65 61 72 63 68     2   /* Search
2b670 20 61 6e 20 65 70 68 65 6d 65 72 61 6c 20 62 2d   an ephemeral b-
2b680 74 72 65 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  tree */.#define 
2b690 49 4e 5f 49 4e 44 45 58 5f 49 4e 44 45 58 5f 41  IN_INDEX_INDEX_A
2b6a0 53 43 20 20 20 20 33 20 20 20 2f 2a 20 45 78 69  SC    3   /* Exi
2b6b0 73 74 69 6e 67 20 69 6e 64 65 78 20 41 53 43 45  sting index ASCE
2b6c0 4e 44 49 4e 47 20 2a 2f 0a 23 64 65 66 69 6e 65  NDING */.#define
2b6d0 20 49 4e 5f 49 4e 44 45 58 5f 49 4e 44 45 58 5f   IN_INDEX_INDEX_
2b6e0 44 45 53 43 20 20 20 34 20 20 20 2f 2a 20 45 78  DESC   4   /* Ex
2b6f0 69 73 74 69 6e 67 20 69 6e 64 65 78 20 44 45 53  isting index DES
2b700 43 45 4e 44 49 4e 47 20 2a 2f 0a 23 64 65 66 69  CENDING */.#defi
2b710 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 4e 4f 4f 50  ne IN_INDEX_NOOP
2b720 20 20 20 20 20 20 20 20 20 35 20 20 20 2f 2a 20           5   /* 
2b730 4e 6f 20 74 61 62 6c 65 20 61 76 61 69 6c 61 62  No table availab
2b740 6c 65 2e 20 55 73 65 20 63 6f 6d 70 61 72 69 73  le. Use comparis
2b750 6f 6e 73 20 2a 2f 0a 2f 2a 0a 2a 2a 20 41 6c 6c  ons */./*.** All
2b760 6f 77 65 64 20 66 6c 61 67 73 20 66 6f 72 20 74  owed flags for t
2b770 68 65 20 33 72 64 20 70 61 72 61 6d 65 74 65 72  he 3rd parameter
2b780 20 74 6f 20 73 71 6c 69 74 65 33 46 69 6e 64 49   to sqlite3FindI
2b790 6e 49 6e 64 65 78 28 29 2e 0a 2a 2f 0a 23 64 65  nIndex()..*/.#de
2b7a0 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 4e 4f  fine IN_INDEX_NO
2b7b0 4f 50 5f 4f 4b 20 20 20 20 20 30 78 30 30 30 31  OP_OK     0x0001
2b7c0 20 20 2f 2a 20 4f 4b 20 74 6f 20 72 65 74 75 72    /* OK to retur
2b7d0 6e 20 49 4e 5f 49 4e 44 45 58 5f 4e 4f 4f 50 20  n IN_INDEX_NOOP 
2b7e0 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e  */.#define IN_IN
2b7f0 44 45 58 5f 4d 45 4d 42 45 52 53 48 49 50 20 20  DEX_MEMBERSHIP  
2b800 30 78 30 30 30 32 20 20 2f 2a 20 49 4e 20 6f 70  0x0002  /* IN op
2b810 65 72 61 74 6f 72 20 75 73 65 64 20 66 6f 72 20  erator used for 
2b820 6d 65 6d 62 65 72 73 68 69 70 20 74 65 73 74 20  membership test 
2b830 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e  */.#define IN_IN
2b840 44 45 58 5f 4c 4f 4f 50 20 20 20 20 20 20 20 20  DEX_LOOP        
2b850 30 78 30 30 30 34 20 20 2f 2a 20 49 4e 20 6f 70  0x0004  /* IN op
2b860 65 72 61 74 6f 72 20 75 73 65 64 20 61 73 20 61  erator used as a
2b870 20 6c 6f 6f 70 20 2a 2f 0a 69 6e 74 20 73 71 6c   loop */.int sql
2b880 69 74 65 33 46 69 6e 64 49 6e 49 6e 64 65 78 28  ite3FindInIndex(
2b890 50 61 72 73 65 20 2a 2c 20 45 78 70 72 20 2a 2c  Parse *, Expr *,
2b8a0 20 75 33 32 2c 20 69 6e 74 2a 29 3b 0a 0a 69 6e   u32, int*);..in
2b8b0 74 20 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c  t sqlite3Journal
2b8c0 4f 70 65 6e 28 73 71 6c 69 74 65 33 5f 76 66 73  Open(sqlite3_vfs
2b8d0 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a   *, const char *
2b8e0 2c 20 73 71 6c 69 74 65 33 5f 66 69 6c 65 20 2a  , sqlite3_file *
2b8f0 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 69 6e 74  , int, int);.int
2b900 20 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 53   sqlite3JournalS
2b910 69 7a 65 28 73 71 6c 69 74 65 33 5f 76 66 73 20  ize(sqlite3_vfs 
2b920 2a 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54  *);.#ifdef SQLIT
2b930 45 5f 45 4e 41 42 4c 45 5f 41 54 4f 4d 49 43 5f  E_ENABLE_ATOMIC_
2b940 57 52 49 54 45 0a 20 20 69 6e 74 20 73 71 6c 69  WRITE.  int sqli
2b950 74 65 33 4a 6f 75 72 6e 61 6c 43 72 65 61 74 65  te3JournalCreate
2b960 28 73 71 6c 69 74 65 33 5f 66 69 6c 65 20 2a 29  (sqlite3_file *)
2b970 3b 0a 23 65 6e 64 69 66 0a 0a 69 6e 74 20 73 71  ;.#endif..int sq
2b980 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 49 73 49 6e  lite3JournalIsIn
2b990 4d 65 6d 6f 72 79 28 73 71 6c 69 74 65 33 5f 66  Memory(sqlite3_f
2b9a0 69 6c 65 20 2a 70 29 3b 0a 76 6f 69 64 20 73 71  ile *p);.void sq
2b9b0 6c 69 74 65 33 4d 65 6d 4a 6f 75 72 6e 61 6c 4f  lite3MemJournalO
2b9c0 70 65 6e 28 73 71 6c 69 74 65 33 5f 66 69 6c 65  pen(sqlite3_file
2b9d0 20 2a 29 3b 0a 0a 76 6f 69 64 20 73 71 6c 69 74   *);..void sqlit
2b9e0 65 33 45 78 70 72 53 65 74 48 65 69 67 68 74 41  e3ExprSetHeightA
2b9f0 6e 64 46 6c 61 67 73 28 50 61 72 73 65 20 2a 70  ndFlags(Parse *p
2ba00 50 61 72 73 65 2c 20 45 78 70 72 20 2a 70 29 3b  Parse, Expr *p);
2ba10 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f  .#if SQLITE_MAX_
2ba20 45 58 50 52 5f 44 45 50 54 48 3e 30 0a 20 20 69  EXPR_DEPTH>0.  i
2ba30 6e 74 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74  nt sqlite3Select
2ba40 45 78 70 72 48 65 69 67 68 74 28 53 65 6c 65 63  ExprHeight(Selec
2ba50 74 20 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69  t *);.  int sqli
2ba60 74 65 33 45 78 70 72 43 68 65 63 6b 48 65 69 67  te3ExprCheckHeig
2ba70 68 74 28 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b  ht(Parse*, int);
2ba80 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65  .#else.  #define
2ba90 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74 45 78   sqlite3SelectEx
2baa0 70 72 48 65 69 67 68 74 28 78 29 20 30 0a 20 20  prHeight(x) 0.  
2bab0 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 45  #define sqlite3E
2bac0 78 70 72 43 68 65 63 6b 48 65 69 67 68 74 28 78  xprCheckHeight(x
2bad0 2c 79 29 0a 23 65 6e 64 69 66 0a 0a 75 33 32 20  ,y).#endif..u32 
2bae0 73 71 6c 69 74 65 33 47 65 74 34 62 79 74 65 28  sqlite3Get4byte(
2baf0 63 6f 6e 73 74 20 75 38 2a 29 3b 0a 76 6f 69 64  const u8*);.void
2bb00 20 73 71 6c 69 74 65 33 50 75 74 34 62 79 74 65   sqlite3Put4byte
2bb10 28 75 38 2a 2c 20 75 33 32 29 3b 0a 0a 23 69 66  (u8*, u32);..#if
2bb20 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  def SQLITE_ENABL
2bb30 45 5f 55 4e 4c 4f 43 4b 5f 4e 4f 54 49 46 59 0a  E_UNLOCK_NOTIFY.
2bb40 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f    void sqlite3Co
2bb50 6e 6e 65 63 74 69 6f 6e 42 6c 6f 63 6b 65 64 28  nnectionBlocked(
2bb60 73 71 6c 69 74 65 33 20 2a 2c 20 73 71 6c 69 74  sqlite3 *, sqlit
2bb70 65 33 20 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71  e3 *);.  void sq
2bb80 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 55  lite3ConnectionU
2bb90 6e 6c 6f 63 6b 65 64 28 73 71 6c 69 74 65 33 20  nlocked(sqlite3 
2bba0 2a 64 62 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c  *db);.  void sql
2bbb0 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 43 6c  ite3ConnectionCl
2bbc0 6f 73 65 64 28 73 71 6c 69 74 65 33 20 2a 64 62  osed(sqlite3 *db
2bbd0 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69  );.#else.  #defi
2bbe0 6e 65 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63  ne sqlite3Connec
2bbf0 74 69 6f 6e 42 6c 6f 63 6b 65 64 28 78 2c 79 29  tionBlocked(x,y)
2bc00 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74  .  #define sqlit
2bc10 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 55 6e 6c 6f  e3ConnectionUnlo
2bc20 63 6b 65 64 28 78 29 0a 20 20 23 64 65 66 69 6e  cked(x).  #defin
2bc30 65 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74  e sqlite3Connect
2bc40 69 6f 6e 43 6c 6f 73 65 64 28 78 29 0a 23 65 6e  ionClosed(x).#en
2bc50 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49  dif..#ifdef SQLI
2bc60 54 45 5f 44 45 42 55 47 0a 20 20 76 6f 69 64 20  TE_DEBUG.  void 
2bc70 73 71 6c 69 74 65 33 50 61 72 73 65 72 54 72 61  sqlite3ParserTra
2bc80 63 65 28 46 49 4c 45 2a 2c 20 63 68 61 72 20 2a  ce(FILE*, char *
2bc90 29 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  );.#endif../*.**
2bca0 20 49 66 20 74 68 65 20 53 51 4c 49 54 45 5f 45   If the SQLITE_E
2bcb0 4e 41 42 4c 45 20 49 4f 54 52 41 43 45 20 65 78  NABLE IOTRACE ex
2bcc0 69 73 74 73 20 74 68 65 6e 20 74 68 65 20 67 6c  ists then the gl
2bcd0 6f 62 61 6c 20 76 61 72 69 61 62 6c 65 0a 2a 2a  obal variable.**
2bce0 20 73 71 6c 69 74 65 33 49 6f 54 72 61 63 65 20   sqlite3IoTrace 
2bcf0 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20  is a pointer to 
2bd00 61 20 70 72 69 6e 74 66 2d 6c 69 6b 65 20 72 6f  a printf-like ro
2bd10 75 74 69 6e 65 20 75 73 65 64 20 74 6f 0a 2a 2a  utine used to.**
2bd20 20 70 72 69 6e 74 20 49 2f 4f 20 74 72 61 63 69   print I/O traci
2bd30 6e 67 20 6d 65 73 73 61 67 65 73 2e 0a 2a 2f 0a  ng messages..*/.
2bd40 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e  #ifdef SQLITE_EN
2bd50 41 42 4c 45 5f 49 4f 54 52 41 43 45 0a 23 20 64  ABLE_IOTRACE.# d
2bd60 65 66 69 6e 65 20 49 4f 54 52 41 43 45 28 41 29  efine IOTRACE(A)
2bd70 20 20 69 66 28 20 73 71 6c 69 74 65 33 49 6f 54    if( sqlite3IoT
2bd80 72 61 63 65 20 29 7b 20 73 71 6c 69 74 65 33 49  race ){ sqlite3I
2bd90 6f 54 72 61 63 65 20 41 3b 20 7d 0a 20 20 76 6f  oTrace A; }.  vo
2bda0 69 64 20 73 71 6c 69 74 65 33 56 64 62 65 49 4f  id sqlite3VdbeIO
2bdb0 54 72 61 63 65 53 71 6c 28 56 64 62 65 2a 29 3b  TraceSql(Vdbe*);
2bdc0 0a 53 51 4c 49 54 45 5f 41 50 49 20 53 51 4c 49  .SQLITE_API SQLI
2bdd0 54 45 5f 45 58 54 45 52 4e 20 76 6f 69 64 20 28  TE_EXTERN void (
2bde0 53 51 4c 49 54 45 5f 43 44 45 43 4c 20 2a 73 71  SQLITE_CDECL *sq
2bdf0 6c 69 74 65 33 49 6f 54 72 61 63 65 29 28 63 6f  lite3IoTrace)(co
2be00 6e 73 74 20 63 68 61 72 2a 2c 2e 2e 2e 29 3b 0a  nst char*,...);.
2be10 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 49  #else.# define I
2be20 4f 54 52 41 43 45 28 41 29 0a 23 20 64 65 66 69  OTRACE(A).# defi
2be30 6e 65 20 73 71 6c 69 74 65 33 56 64 62 65 49 4f  ne sqlite3VdbeIO
2be40 54 72 61 63 65 53 71 6c 28 58 29 0a 23 65 6e 64  TraceSql(X).#end
2be50 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 73 65 20  if../*.** These 
2be60 72 6f 75 74 69 6e 65 73 20 61 72 65 20 61 76 61  routines are ava
2be70 69 6c 61 62 6c 65 20 66 6f 72 20 74 68 65 20 6d  ilable for the m
2be80 65 6d 32 2e 63 20 64 65 62 75 67 67 69 6e 67 20  em2.c debugging 
2be90 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 6f 72  memory allocator
2bea0 0a 2a 2a 20 6f 6e 6c 79 2e 20 20 54 68 65 79 20  .** only.  They 
2beb0 61 72 65 20 75 73 65 64 20 74 6f 20 76 65 72 69  are used to veri
2bec0 66 79 20 74 68 61 74 20 64 69 66 66 65 72 65 6e  fy that differen
2bed0 74 20 22 74 79 70 65 73 22 20 6f 66 20 6d 65 6d  t "types" of mem
2bee0 6f 72 79 0a 2a 2a 20 61 6c 6c 6f 63 61 74 69 6f  ory.** allocatio
2bef0 6e 73 20 61 72 65 20 70 72 6f 70 65 72 6c 79 20  ns are properly 
2bf00 74 72 61 63 6b 65 64 20 62 79 20 74 68 65 20 73  tracked by the s
2bf10 79 73 74 65 6d 2e 0a 2a 2a 0a 2a 2a 20 73 71 6c  ystem..**.** sql
2bf20 69 74 65 33 4d 65 6d 64 65 62 75 67 53 65 74 54  ite3MemdebugSetT
2bf30 79 70 65 28 29 20 73 65 74 73 20 74 68 65 20 22  ype() sets the "
2bf40 74 79 70 65 22 20 6f 66 20 61 6e 20 61 6c 6c 6f  type" of an allo
2bf50 63 61 74 69 6f 6e 20 74 6f 20 6f 6e 65 20 6f 66  cation to one of
2bf60 0a 2a 2a 20 74 68 65 20 4d 45 4d 54 59 50 45 5f  .** the MEMTYPE_
2bf70 2a 20 6d 61 63 72 6f 73 20 64 65 66 69 6e 65 64  * macros defined
2bf80 20 62 65 6c 6f 77 2e 20 20 54 68 65 20 74 79 70   below.  The typ
2bf90 65 20 6d 75 73 74 20 62 65 20 61 20 62 69 74 6d  e must be a bitm
2bfa0 61 73 6b 20 77 69 74 68 0a 2a 2a 20 61 20 73 69  ask with.** a si
2bfb0 6e 67 6c 65 20 62 69 74 20 73 65 74 2e 0a 2a 2a  ngle bit set..**
2bfc0 0a 2a 2a 20 73 71 6c 69 74 65 33 4d 65 6d 64 65  .** sqlite3Memde
2bfd0 62 75 67 48 61 73 54 79 70 65 28 29 20 72 65 74  bugHasType() ret
2bfe0 75 72 6e 73 20 74 72 75 65 20 69 66 20 61 6e 79  urns true if any
2bff0 20 6f 66 20 74 68 65 20 62 69 74 73 20 69 6e 20   of the bits in 
2c000 69 74 73 20 73 65 63 6f 6e 64 0a 2a 2a 20 61 72  its second.** ar
2c010 67 75 6d 65 6e 74 20 6d 61 74 63 68 20 74 68 65  gument match the
2c020 20 74 79 70 65 20 73 65 74 20 62 79 20 74 68 65   type set by the
2c030 20 70 72 65 76 69 6f 75 73 20 73 71 6c 69 74 65   previous sqlite
2c040 33 4d 65 6d 64 65 62 75 67 53 65 74 54 79 70 65  3MemdebugSetType
2c050 28 29 2e 0a 2a 2a 20 73 71 6c 69 74 65 33 4d 65  ()..** sqlite3Me
2c060 6d 64 65 62 75 67 48 61 73 54 79 70 65 28 29 20  mdebugHasType() 
2c070 69 73 20 69 6e 74 65 6e 64 65 64 20 66 6f 72 20  is intended for 
2c080 75 73 65 20 69 6e 73 69 64 65 20 61 73 73 65 72  use inside asser
2c090 74 28 29 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a  t() statements..
2c0a0 2a 2a 0a 2a 2a 20 73 71 6c 69 74 65 33 4d 65 6d  **.** sqlite3Mem
2c0b0 64 65 62 75 67 4e 6f 54 79 70 65 28 29 20 72 65  debugNoType() re
2c0c0 74 75 72 6e 73 20 74 72 75 65 20 69 66 20 6e 6f  turns true if no
2c0d0 6e 65 20 6f 66 20 74 68 65 20 62 69 74 73 20 69  ne of the bits i
2c0e0 6e 20 69 74 73 20 73 65 63 6f 6e 64 0a 2a 2a 20  n its second.** 
2c0f0 61 72 67 75 6d 65 6e 74 20 6d 61 74 63 68 20 74  argument match t
2c100 68 65 20 74 79 70 65 20 73 65 74 20 62 79 20 74  he type set by t
2c110 68 65 20 70 72 65 76 69 6f 75 73 20 73 71 6c 69  he previous sqli
2c120 74 65 33 4d 65 6d 64 65 62 75 67 53 65 74 54 79  te3MemdebugSetTy
2c130 70 65 28 29 2e 0a 2a 2a 0a 2a 2a 20 50 65 72 68  pe()..**.** Perh
2c140 61 70 73 20 74 68 65 20 6d 6f 73 74 20 69 6d 70  aps the most imp
2c150 6f 72 74 61 6e 74 20 70 6f 69 6e 74 20 69 73 20  ortant point is 
2c160 74 68 65 20 64 69 66 66 65 72 65 6e 63 65 20 62  the difference b
2c170 65 74 77 65 65 6e 20 4d 45 4d 54 59 50 45 5f 48  etween MEMTYPE_H
2c180 45 41 50 0a 2a 2a 20 61 6e 64 20 4d 45 4d 54 59  EAP.** and MEMTY
2c190 50 45 5f 4c 4f 4f 4b 41 53 49 44 45 2e 20 20 49  PE_LOOKASIDE.  I
2c1a0 66 20 61 6e 20 61 6c 6c 6f 63 61 74 69 6f 6e 20  f an allocation 
2c1b0 69 73 20 4d 45 4d 54 59 50 45 5f 4c 4f 4f 4b 41  is MEMTYPE_LOOKA
2c1c0 53 49 44 45 2c 20 74 68 61 74 20 6d 65 61 6e 73  SIDE, that means
2c1d0 0a 2a 2a 20 69 74 20 6d 69 67 68 74 20 68 61 76  .** it might hav
2c1e0 65 20 62 65 65 6e 20 61 6c 6c 6f 63 61 74 65 64  e been allocated
2c1f0 20 62 79 20 6c 6f 6f 6b 61 73 69 64 65 2c 20 65   by lookaside, e
2c200 78 63 65 70 74 20 74 68 65 20 61 6c 6c 6f 63 61  xcept the alloca
2c210 74 69 6f 6e 20 77 61 73 0a 2a 2a 20 74 6f 6f 20  tion was.** too 
2c220 6c 61 72 67 65 20 6f 72 20 6c 6f 6f 6b 61 73 69  large or lookasi
2c230 64 65 20 77 61 73 20 61 6c 72 65 61 64 79 20 66  de was already f
2c240 75 6c 6c 2e 20 20 49 74 20 69 73 20 69 6d 70 6f  ull.  It is impo
2c250 72 74 61 6e 74 20 74 6f 20 76 65 72 69 66 79 0a  rtant to verify.
2c260 2a 2a 20 74 68 61 74 20 61 6c 6c 6f 63 61 74 69  ** that allocati
2c270 6f 6e 73 20 74 68 61 74 20 6d 69 67 68 74 20 68  ons that might h
2c280 61 76 65 20 62 65 65 6e 20 73 61 74 69 73 66 69  ave been satisfi
2c290 65 64 20 62 79 20 6c 6f 6f 6b 61 73 69 64 65 20  ed by lookaside 
2c2a0 61 72 65 20 6e 6f 74 0a 2a 2a 20 70 61 73 73 65  are not.** passe
2c2b0 64 20 62 61 63 6b 20 74 6f 20 6e 6f 6e 2d 6c 6f  d back to non-lo
2c2c0 6f 6b 61 73 69 64 65 20 66 72 65 65 28 29 20 72  okaside free() r
2c2d0 6f 75 74 69 6e 65 73 2e 20 20 41 73 73 65 72 74  outines.  Assert
2c2e0 73 20 73 75 63 68 20 61 73 20 74 68 65 0a 2a 2a  s such as the.**
2c2f0 20 65 78 61 6d 70 6c 65 20 61 62 6f 76 65 20 61   example above a
2c300 72 65 20 70 6c 61 63 65 64 20 6f 6e 20 74 68 65  re placed on the
2c310 20 6e 6f 6e 2d 6c 6f 6f 6b 61 73 69 64 65 20 66   non-lookaside f
2c320 72 65 65 28 29 20 72 6f 75 74 69 6e 65 73 20 74  ree() routines t
2c330 6f 20 76 65 72 69 66 79 0a 2a 2a 20 74 68 69 73  o verify.** this
2c340 20 63 6f 6e 73 74 72 61 69 6e 74 2e 0a 2a 2a 0a   constraint..**.
2c350 2a 2a 20 41 6c 6c 20 6f 66 20 74 68 69 73 20 69  ** All of this i
2c360 73 20 6e 6f 2d 6f 70 20 66 6f 72 20 61 20 70 72  s no-op for a pr
2c370 6f 64 75 63 74 69 6f 6e 20 62 75 69 6c 64 2e 20  oduction build. 
2c380 20 49 74 20 6f 6e 6c 79 20 63 6f 6d 65 73 20 69   It only comes i
2c390 6e 74 6f 0a 2a 2a 20 70 6c 61 79 20 77 68 65 6e  nto.** play when
2c3a0 20 74 68 65 20 53 51 4c 49 54 45 5f 4d 45 4d 44   the SQLITE_MEMD
2c3b0 45 42 55 47 20 63 6f 6d 70 69 6c 65 2d 74 69 6d  EBUG compile-tim
2c3c0 65 20 6f 70 74 69 6f 6e 20 69 73 20 75 73 65 64  e option is used
2c3d0 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49  ..*/.#ifdef SQLI
2c3e0 54 45 5f 4d 45 4d 44 45 42 55 47 0a 20 20 76 6f  TE_MEMDEBUG.  vo
2c3f0 69 64 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62  id sqlite3Memdeb
2c400 75 67 53 65 74 54 79 70 65 28 76 6f 69 64 2a 2c  ugSetType(void*,
2c410 75 38 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74  u8);.  int sqlit
2c420 65 33 4d 65 6d 64 65 62 75 67 48 61 73 54 79 70  e3MemdebugHasTyp
2c430 65 28 76 6f 69 64 2a 2c 75 38 29 3b 0a 20 20 69  e(void*,u8);.  i
2c440 6e 74 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62  nt sqlite3Memdeb
2c450 75 67 4e 6f 54 79 70 65 28 76 6f 69 64 2a 2c 75  ugNoType(void*,u
2c460 38 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69  8);.#else.# defi
2c470 6e 65 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62  ne sqlite3Memdeb
2c480 75 67 53 65 74 54 79 70 65 28 58 2c 59 29 20 20  ugSetType(X,Y)  
2c490 2f 2a 20 6e 6f 2d 6f 70 20 2a 2f 0a 23 20 64 65  /* no-op */.# de
2c4a0 66 69 6e 65 20 73 71 6c 69 74 65 33 4d 65 6d 64  fine sqlite3Memd
2c4b0 65 62 75 67 48 61 73 54 79 70 65 28 58 2c 59 29  ebugHasType(X,Y)
2c4c0 20 20 31 0a 23 20 64 65 66 69 6e 65 20 73 71 6c    1.# define sql
2c4d0 69 74 65 33 4d 65 6d 64 65 62 75 67 4e 6f 54 79  ite3MemdebugNoTy
2c4e0 70 65 28 58 2c 59 29 20 20 20 31 0a 23 65 6e 64  pe(X,Y)   1.#end
2c4f0 69 66 0a 23 64 65 66 69 6e 65 20 4d 45 4d 54 59  if.#define MEMTY
2c500 50 45 5f 48 45 41 50 20 20 20 20 20 20 20 30 78  PE_HEAP       0x
2c510 30 31 20 20 2f 2a 20 47 65 6e 65 72 61 6c 20 68  01  /* General h
2c520 65 61 70 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20  eap allocations 
2c530 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 45 4d 54 59  */.#define MEMTY
2c540 50 45 5f 4c 4f 4f 4b 41 53 49 44 45 20 20 30 78  PE_LOOKASIDE  0x
2c550 30 32 20 20 2f 2a 20 48 65 61 70 20 74 68 61 74  02  /* Heap that
2c560 20 6d 69 67 68 74 20 68 61 76 65 20 62 65 65 6e   might have been
2c570 20 6c 6f 6f 6b 61 73 69 64 65 20 2a 2f 0a 23 64   lookaside */.#d
2c580 65 66 69 6e 65 20 4d 45 4d 54 59 50 45 5f 53 43  efine MEMTYPE_SC
2c590 52 41 54 43 48 20 20 20 20 30 78 30 34 20 20 2f  RATCH    0x04  /
2c5a0 2a 20 53 63 72 61 74 63 68 20 61 6c 6c 6f 63 61  * Scratch alloca
2c5b0 74 69 6f 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65  tions */.#define
2c5c0 20 4d 45 4d 54 59 50 45 5f 50 43 41 43 48 45 20   MEMTYPE_PCACHE 
2c5d0 20 20 20 20 30 78 30 38 20 20 2f 2a 20 50 61 67      0x08  /* Pag
2c5e0 65 20 63 61 63 68 65 20 61 6c 6c 6f 63 61 74 69  e cache allocati
2c5f0 6f 6e 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68  ons */../*.** Th
2c600 72 65 61 64 69 6e 67 20 69 6e 74 65 72 66 61 63  reading interfac
2c610 65 0a 2a 2f 0a 23 69 66 20 53 51 4c 49 54 45 5f  e.*/.#if SQLITE_
2c620 4d 41 58 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41  MAX_WORKER_THREA
2c630 44 53 3e 30 0a 69 6e 74 20 73 71 6c 69 74 65 33  DS>0.int sqlite3
2c640 54 68 72 65 61 64 43 72 65 61 74 65 28 53 51 4c  ThreadCreate(SQL
2c650 69 74 65 54 68 72 65 61 64 2a 2a 2c 76 6f 69 64  iteThread**,void
2c660 2a 28 2a 29 28 76 6f 69 64 2a 29 2c 76 6f 69 64  *(*)(void*),void
2c670 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 54  *);.int sqlite3T
2c680 68 72 65 61 64 4a 6f 69 6e 28 53 51 4c 69 74 65  hreadJoin(SQLite
2c690 54 68 72 65 61 64 2a 2c 20 76 6f 69 64 2a 2a 29  Thread*, void**)
2c6a0 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 20 64 65  ;.#endif..#if de
2c6b0 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41  fined(SQLITE_ENA
2c6c0 42 4c 45 5f 44 42 53 54 41 54 5f 56 54 41 42 29  BLE_DBSTAT_VTAB)
2c6d0 20 7c 7c 20 64 65 66 69 6e 65 64 28 53 51 4c 49   || defined(SQLI
2c6e0 54 45 5f 54 45 53 54 29 0a 69 6e 74 20 73 71 6c  TE_TEST).int sql
2c6f0 69 74 65 33 44 62 73 74 61 74 52 65 67 69 73 74  ite3DbstatRegist
2c700 65 72 28 73 71 6c 69 74 65 33 2a 29 3b 0a 23 65  er(sqlite3*);.#e
2c710 6e 64 69 66 0a 0a 23 65 6e 64 69 66 20 2f 2a 20  ndif..#endif /* 
2c720 5f 53 51 4c 49 54 45 49 4e 54 5f 48 5f 20 2a 2f  _SQLITEINT_H_ */
2c730 0a                                               .