/ Hex Artifact Content
Login

Artifact 4fe51e4e26d9d576040198cef4f78df3d987387d:


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 44 55 50 4c 49 43 41 54 45 53 5f 4f 4b 20 20  _DUPLICATES_OK  
19ef0 20 20 30 78 30 30 30 38 20 2f 2a 20 4f 6b 20 74    0x0008 /* Ok t
19f00 6f 20 72 65 74 75 72 6e 20 61 20 72 6f 77 20 6d  o return a row m
19f10 6f 72 65 20 74 68 61 6e 20 6f 6e 63 65 20 2a 2f  ore than once */
19f20 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 4f  .#define WHERE_O
19f30 4d 49 54 5f 4f 50 45 4e 5f 43 4c 4f 53 45 20 20  MIT_OPEN_CLOSE  
19f40 30 78 30 30 31 30 20 2f 2a 20 54 61 62 6c 65 20  0x0010 /* Table 
19f50 63 75 72 73 6f 72 73 20 61 72 65 20 61 6c 72 65  cursors are alre
19f60 61 64 79 20 6f 70 65 6e 20 2a 2f 0a 23 64 65 66  ady open */.#def
19f70 69 6e 65 20 57 48 45 52 45 5f 46 4f 52 43 45 5f  ine WHERE_FORCE_
19f80 54 41 42 4c 45 20 20 20 20 20 20 30 78 30 30 32  TABLE      0x002
19f90 30 20 2f 2a 20 44 6f 20 6e 6f 74 20 75 73 65 20  0 /* Do not use 
19fa0 61 6e 20 69 6e 64 65 78 2d 6f 6e 6c 79 20 73 65  an index-only se
19fb0 61 72 63 68 20 2a 2f 0a 23 64 65 66 69 6e 65 20  arch */.#define 
19fc0 57 48 45 52 45 5f 4f 4e 45 54 41 42 4c 45 5f 4f  WHERE_ONETABLE_O
19fd0 4e 4c 59 20 20 20 20 30 78 30 30 34 30 20 2f 2a  NLY    0x0040 /*
19fe0 20 4f 6e 6c 79 20 63 6f 64 65 20 74 68 65 20 31   Only code the 1
19ff0 73 74 20 74 61 62 6c 65 20 69 6e 20 70 54 61 62  st table in pTab
1a000 4c 69 73 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20  List */.#define 
1a010 57 48 45 52 45 5f 4e 4f 5f 41 55 54 4f 49 4e 44  WHERE_NO_AUTOIND
1a020 45 58 20 20 20 20 20 30 78 30 30 38 30 20 2f 2a  EX     0x0080 /*
1a030 20 44 69 73 61 6c 6c 6f 77 20 61 75 74 6f 6d 61   Disallow automa
1a040 74 69 63 20 69 6e 64 65 78 65 73 20 2a 2f 0a 23  tic indexes */.#
1a050 64 65 66 69 6e 65 20 57 48 45 52 45 5f 47 52 4f  define WHERE_GRO
1a060 55 50 42 59 20 20 20 20 20 20 20 20 20 20 30 78  UPBY          0x
1a070 30 31 30 30 20 2f 2a 20 70 4f 72 64 65 72 42 79  0100 /* pOrderBy
1a080 20 69 73 20 72 65 61 6c 6c 79 20 61 20 47 52 4f   is really a GRO
1a090 55 50 20 42 59 20 2a 2f 0a 23 64 65 66 69 6e 65  UP BY */.#define
1a0a0 20 57 48 45 52 45 5f 44 49 53 54 49 4e 43 54 42   WHERE_DISTINCTB
1a0b0 59 20 20 20 20 20 20 20 30 78 30 32 30 30 20 2f  Y       0x0200 /
1a0c0 2a 20 70 4f 72 64 65 72 62 79 20 69 73 20 72 65  * pOrderby is re
1a0d0 61 6c 6c 79 20 61 20 44 49 53 54 49 4e 43 54 20  ally a DISTINCT 
1a0e0 63 6c 61 75 73 65 20 2a 2f 0a 23 64 65 66 69 6e  clause */.#defin
1a0f0 65 20 57 48 45 52 45 5f 57 41 4e 54 5f 44 49 53  e WHERE_WANT_DIS
1a100 54 49 4e 43 54 20 20 20 20 30 78 30 34 30 30 20  TINCT    0x0400 
1a110 2f 2a 20 41 6c 6c 20 6f 75 74 70 75 74 20 6e 65  /* All output ne
1a120 65 64 73 20 74 6f 20 62 65 20 64 69 73 74 69 6e  eds to be distin
1a130 63 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48  ct */.#define WH
1a140 45 52 45 5f 53 4f 52 54 42 59 47 52 4f 55 50 20  ERE_SORTBYGROUP 
1a150 20 20 20 20 20 30 78 30 38 30 30 20 2f 2a 20 53       0x0800 /* S
1a160 75 70 70 6f 72 74 20 73 71 6c 69 74 65 33 57 68  upport sqlite3Wh
1a170 65 72 65 49 73 53 6f 72 74 65 64 28 29 20 2a 2f  ereIsSorted() */
1a180 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 52  .#define WHERE_R
1a190 45 4f 50 45 4e 5f 49 44 58 20 20 20 20 20 20 20  EOPEN_IDX       
1a1a0 30 78 31 30 30 30 20 2f 2a 20 54 72 79 20 74 6f  0x1000 /* Try to
1a1b0 20 75 73 65 20 4f 50 5f 52 65 6f 70 65 6e 49 64   use OP_ReopenId
1a1c0 78 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45  x */.#define WHE
1a1d0 52 45 5f 4f 4e 45 50 41 53 53 5f 4d 55 4c 54 49  RE_ONEPASS_MULTI
1a1e0 52 4f 57 20 30 78 32 30 30 30 20 2f 2a 20 4f 4e  ROW 0x2000 /* ON
1a1f0 45 50 41 53 53 20 69 73 20 6f 6b 20 77 69 74 68  EPASS is ok with
1a200 20 6d 75 6c 74 69 70 6c 65 20 72 6f 77 73 20 2a   multiple rows *
1a210 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f  /.#define WHERE_
1a220 55 53 45 5f 4c 49 4d 49 54 20 20 20 20 20 20 20  USE_LIMIT       
1a230 20 30 78 34 30 30 30 20 2f 2a 20 54 68 65 72 65   0x4000 /* There
1a240 20 69 73 20 61 20 63 6f 6e 73 74 61 6e 74 20 4c   is a constant L
1a250 49 4d 49 54 20 63 6c 61 75 73 65 20 2a 2f 0a 23  IMIT clause */.#
1a260 64 65 66 69 6e 65 20 57 48 45 52 45 5f 53 45 45  define WHERE_SEE
1a270 4b 5f 54 41 42 4c 45 20 20 20 20 20 20 20 30 78  K_TABLE       0x
1a280 38 30 30 30 20 2f 2a 20 44 6f 20 6e 6f 74 20 64  8000 /* Do not d
1a290 65 66 65 72 20 73 65 65 6b 73 20 6f 6e 20 6d 61  efer seeks on ma
1a2a0 69 6e 20 74 61 62 6c 65 20 2a 2f 0a 0a 2f 2a 20  in table */../* 
1a2b0 41 6c 6c 6f 77 65 64 20 72 65 74 75 72 6e 20 76  Allowed return v
1a2c0 61 6c 75 65 73 20 66 72 6f 6d 20 73 71 6c 69 74  alues from sqlit
1a2d0 65 33 57 68 65 72 65 49 73 44 69 73 74 69 6e 63  e3WhereIsDistinc
1a2e0 74 28 29 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 57  t().*/.#define W
1a2f0 48 45 52 45 5f 44 49 53 54 49 4e 43 54 5f 4e 4f  HERE_DISTINCT_NO
1a300 4f 50 20 20 20 20 20 20 30 20 20 2f 2a 20 44 49  OP      0  /* DI
1a310 53 54 49 4e 43 54 20 6b 65 79 77 6f 72 64 20 6e  STINCT keyword n
1a320 6f 74 20 75 73 65 64 20 2a 2f 0a 23 64 65 66 69  ot used */.#defi
1a330 6e 65 20 57 48 45 52 45 5f 44 49 53 54 49 4e 43  ne WHERE_DISTINC
1a340 54 5f 55 4e 49 51 55 45 20 20 20 20 31 20 20 2f  T_UNIQUE    1  /
1a350 2a 20 4e 6f 20 64 75 70 6c 69 63 61 74 65 73 20  * No duplicates 
1a360 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45  */.#define WHERE
1a370 5f 44 49 53 54 49 4e 43 54 5f 4f 52 44 45 52 45  _DISTINCT_ORDERE
1a380 44 20 20 20 32 20 20 2f 2a 20 41 6c 6c 20 64 75  D   2  /* All du
1a390 70 6c 69 63 61 74 65 73 20 61 72 65 20 61 64 6a  plicates are adj
1a3a0 61 63 65 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65  acent */.#define
1a3b0 20 57 48 45 52 45 5f 44 49 53 54 49 4e 43 54 5f   WHERE_DISTINCT_
1a3c0 55 4e 4f 52 44 45 52 45 44 20 33 20 20 2f 2a 20  UNORDERED 3  /* 
1a3d0 44 75 70 6c 69 63 61 74 65 73 20 61 72 65 20 73  Duplicates are s
1a3e0 63 61 74 74 65 72 65 64 20 2a 2f 0a 0a 2f 2a 0a  cattered */../*.
1a3f0 2a 2a 20 41 20 4e 61 6d 65 43 6f 6e 74 65 78 74  ** A NameContext
1a400 20 64 65 66 69 6e 65 73 20 61 20 63 6f 6e 74 65   defines a conte
1a410 78 74 20 69 6e 20 77 68 69 63 68 20 74 6f 20 72  xt in which to r
1a420 65 73 6f 6c 76 65 20 74 61 62 6c 65 20 61 6e 64  esolve table and
1a430 20 63 6f 6c 75 6d 6e 0a 2a 2a 20 6e 61 6d 65 73   column.** names
1a440 2e 20 20 54 68 65 20 63 6f 6e 74 65 78 74 20 63  .  The context c
1a450 6f 6e 73 69 73 74 73 20 6f 66 20 61 20 6c 69 73  onsists of a lis
1a460 74 20 6f 66 20 74 61 62 6c 65 73 20 28 74 68 65  t of tables (the
1a470 20 70 53 72 63 4c 69 73 74 29 20 66 69 65 6c 64   pSrcList) field
1a480 20 61 6e 64 0a 2a 2a 20 61 20 6c 69 73 74 20 6f   and.** a list o
1a490 66 20 6e 61 6d 65 64 20 65 78 70 72 65 73 73 69  f named expressi
1a4a0 6f 6e 20 28 70 45 4c 69 73 74 29 2e 20 20 54 68  on (pEList).  Th
1a4b0 65 20 6e 61 6d 65 64 20 65 78 70 72 65 73 73 69  e named expressi
1a4c0 6f 6e 20 6c 69 73 74 20 6d 61 79 0a 2a 2a 20 62  on list may.** b
1a4d0 65 20 4e 55 4c 4c 2e 20 20 54 68 65 20 70 53 72  e NULL.  The pSr
1a4e0 63 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f  c corresponds to
1a4f0 20 74 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65   the FROM clause
1a500 20 6f 66 20 61 20 53 45 4c 45 43 54 20 6f 72 0a   of a SELECT or.
1a510 2a 2a 20 74 6f 20 74 68 65 20 74 61 62 6c 65 20  ** to the table 
1a520 62 65 69 6e 67 20 6f 70 65 72 61 74 65 64 20 6f  being operated o
1a530 6e 20 62 79 20 49 4e 53 45 52 54 2c 20 55 50 44  n by INSERT, UPD
1a540 41 54 45 2c 20 6f 72 20 44 45 4c 45 54 45 2e 20  ATE, or DELETE. 
1a550 20 54 68 65 0a 2a 2a 20 70 45 4c 69 73 74 20 63   The.** pEList c
1a560 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 74 68  orresponds to th
1a570 65 20 72 65 73 75 6c 74 20 73 65 74 20 6f 66 20  e result set of 
1a580 61 20 53 45 4c 45 43 54 20 61 6e 64 20 69 73 20  a SELECT and is 
1a590 4e 55 4c 4c 20 66 6f 72 0a 2a 2a 20 6f 74 68 65  NULL for.** othe
1a5a0 72 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a 2a 2a  r statements..**
1a5b0 0a 2a 2a 20 4e 61 6d 65 43 6f 6e 74 65 78 74 73  .** NameContexts
1a5c0 20 63 61 6e 20 62 65 20 6e 65 73 74 65 64 2e 20   can be nested. 
1a5d0 20 57 68 65 6e 20 72 65 73 6f 6c 76 69 6e 67 20   When resolving 
1a5e0 6e 61 6d 65 73 2c 20 74 68 65 20 69 6e 6e 65 72  names, the inner
1a5f0 2d 6d 6f 73 74 0a 2a 2a 20 63 6f 6e 74 65 78 74  -most.** context
1a600 20 69 73 20 73 65 61 72 63 68 65 64 20 66 69 72   is searched fir
1a610 73 74 2e 20 20 49 66 20 6e 6f 20 6d 61 74 63 68  st.  If no match
1a620 20 69 73 20 66 6f 75 6e 64 2c 20 74 68 65 20 6e   is found, the n
1a630 65 78 74 20 6f 75 74 65 72 0a 2a 2a 20 63 6f 6e  ext outer.** con
1a640 74 65 78 74 20 69 73 20 63 68 65 63 6b 65 64 2e  text is checked.
1a650 20 20 49 66 20 74 68 65 72 65 20 69 73 20 73 74    If there is st
1a660 69 6c 6c 20 6e 6f 20 6d 61 74 63 68 2c 20 74 68  ill no match, th
1a670 65 20 6e 65 78 74 20 63 6f 6e 74 65 78 74 0a 2a  e next context.*
1a680 2a 20 69 73 20 63 68 65 63 6b 65 64 2e 20 20 54  * is checked.  T
1a690 68 69 73 20 70 72 6f 63 65 73 73 20 63 6f 6e 74  his process cont
1a6a0 69 6e 75 65 73 20 75 6e 74 69 6c 20 65 69 74 68  inues until eith
1a6b0 65 72 20 61 20 6d 61 74 63 68 20 69 73 20 66 6f  er a match is fo
1a6c0 75 6e 64 0a 2a 2a 20 6f 72 20 61 6c 6c 20 63 6f  und.** or all co
1a6d0 6e 74 65 78 74 73 20 61 72 65 20 63 68 65 63 6b  ntexts are check
1a6e0 2e 20 20 57 68 65 6e 20 61 20 6d 61 74 63 68 20  .  When a match 
1a6f0 69 73 20 66 6f 75 6e 64 2c 20 74 68 65 20 6e 52  is found, the nR
1a700 65 66 20 6d 65 6d 62 65 72 20 6f 66 0a 2a 2a 20  ef member of.** 
1a710 74 68 65 20 63 6f 6e 74 65 78 74 20 63 6f 6e 74  the context cont
1a720 61 69 6e 69 6e 67 20 74 68 65 20 6d 61 74 63 68  aining the match
1a730 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 2e   is incremented.
1a740 0a 2a 2a 0a 2a 2a 20 45 61 63 68 20 73 75 62 71  .**.** Each subq
1a750 75 65 72 79 20 67 65 74 73 20 61 20 6e 65 77 20  uery gets a new 
1a760 4e 61 6d 65 43 6f 6e 74 65 78 74 2e 20 20 54 68  NameContext.  Th
1a770 65 20 70 4e 65 78 74 20 66 69 65 6c 64 20 70 6f  e pNext field po
1a780 69 6e 74 73 20 74 6f 20 74 68 65 0a 2a 2a 20 4e  ints to the.** N
1a790 61 6d 65 43 6f 6e 74 65 78 74 20 69 6e 20 74 68  ameContext in th
1a7a0 65 20 70 61 72 65 6e 74 20 71 75 65 72 79 2e 20  e parent query. 
1a7b0 20 54 68 75 73 20 74 68 65 20 70 72 6f 63 65 73   Thus the proces
1a7c0 73 20 6f 66 20 73 63 61 6e 6e 69 6e 67 20 74 68  s of scanning th
1a7d0 65 0a 2a 2a 20 4e 61 6d 65 43 6f 6e 74 65 78 74  e.** NameContext
1a7e0 20 6c 69 73 74 20 63 6f 72 72 65 73 70 6f 6e 64   list correspond
1a7f0 73 20 74 6f 20 73 65 61 72 63 68 69 6e 67 20 74  s to searching t
1a800 68 72 6f 75 67 68 20 73 75 63 63 65 73 73 69 76  hrough successiv
1a810 65 6c 79 20 6f 75 74 65 72 0a 2a 2a 20 73 75 62  ely outer.** sub
1a820 71 75 65 72 69 65 73 20 6c 6f 6f 6b 69 6e 67 20  queries looking 
1a830 66 6f 72 20 61 20 6d 61 74 63 68 2e 0a 2a 2f 0a  for a match..*/.
1a840 73 74 72 75 63 74 20 4e 61 6d 65 43 6f 6e 74 65  struct NameConte
1a850 78 74 20 7b 0a 20 20 50 61 72 73 65 20 2a 70 50  xt {.  Parse *pP
1a860 61 72 73 65 3b 20 20 20 20 20 20 20 2f 2a 20 54  arse;       /* T
1a870 68 65 20 70 61 72 73 65 72 20 2a 2f 0a 20 20 53  he parser */.  S
1a880 72 63 4c 69 73 74 20 2a 70 53 72 63 4c 69 73 74  rcList *pSrcList
1a890 3b 20 20 20 2f 2a 20 4f 6e 65 20 6f 72 20 6d 6f  ;   /* One or mo
1a8a0 72 65 20 74 61 62 6c 65 73 20 75 73 65 64 20 74  re tables used t
1a8b0 6f 20 72 65 73 6f 6c 76 65 20 6e 61 6d 65 73 20  o resolve names 
1a8c0 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70  */.  ExprList *p
1a8d0 45 4c 69 73 74 3b 20 20 20 20 2f 2a 20 4f 70 74  EList;    /* Opt
1a8e0 69 6f 6e 61 6c 20 6c 69 73 74 20 6f 66 20 72 65  ional list of re
1a8f0 73 75 6c 74 2d 73 65 74 20 63 6f 6c 75 6d 6e 73  sult-set columns
1a900 20 2a 2f 0a 20 20 41 67 67 49 6e 66 6f 20 2a 70   */.  AggInfo *p
1a910 41 67 67 49 6e 66 6f 3b 20 20 20 2f 2a 20 49 6e  AggInfo;   /* In
1a920 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20  formation about 
1a930 61 67 67 72 65 67 61 74 65 73 20 61 74 20 74 68  aggregates at th
1a940 69 73 20 6c 65 76 65 6c 20 2a 2f 0a 20 20 4e 61  is level */.  Na
1a950 6d 65 43 6f 6e 74 65 78 74 20 2a 70 4e 65 78 74  meContext *pNext
1a960 3b 20 20 2f 2a 20 4e 65 78 74 20 6f 75 74 65 72  ;  /* Next outer
1a970 20 6e 61 6d 65 20 63 6f 6e 74 65 78 74 2e 20 20   name context.  
1a980 4e 55 4c 4c 20 66 6f 72 20 6f 75 74 65 72 6d 6f  NULL for outermo
1a990 73 74 20 2a 2f 0a 20 20 69 6e 74 20 6e 52 65 66  st */.  int nRef
1a9a0 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
1a9b0 4e 75 6d 62 65 72 20 6f 66 20 6e 61 6d 65 73 20  Number of names 
1a9c0 72 65 73 6f 6c 76 65 64 20 62 79 20 74 68 69 73  resolved by this
1a9d0 20 63 6f 6e 74 65 78 74 20 2a 2f 0a 20 20 69 6e   context */.  in
1a9e0 74 20 6e 45 72 72 3b 20 20 20 20 20 20 20 20 20  t nErr;         
1a9f0 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
1aa00 65 72 72 6f 72 73 20 65 6e 63 6f 75 6e 74 65 72  errors encounter
1aa10 65 64 20 77 68 69 6c 65 20 72 65 73 6f 6c 76 69  ed while resolvi
1aa20 6e 67 20 6e 61 6d 65 73 20 2a 2f 0a 20 20 75 31  ng names */.  u1
1aa30 36 20 6e 63 46 6c 61 67 73 3b 20 20 20 20 20 20  6 ncFlags;      
1aa40 20 20 20 2f 2a 20 5a 65 72 6f 20 6f 72 20 6d 6f     /* Zero or mo
1aa50 72 65 20 4e 43 5f 2a 20 66 6c 61 67 73 20 64 65  re NC_* flags de
1aa60 66 69 6e 65 64 20 62 65 6c 6f 77 20 2a 2f 0a 7d  fined below */.}
1aa70 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64  ;../*.** Allowed
1aa80 20 76 61 6c 75 65 73 20 66 6f 72 20 74 68 65 20   values for the 
1aa90 4e 61 6d 65 43 6f 6e 74 65 78 74 2c 20 6e 63 46  NameContext, ncF
1aaa0 6c 61 67 73 20 66 69 65 6c 64 2e 0a 2a 2a 0a 2a  lags field..**.*
1aab0 2a 20 56 61 6c 75 65 20 63 6f 6e 73 74 72 61 69  * Value constrai
1aac0 6e 74 73 20 28 61 6c 6c 20 63 68 65 63 6b 65 64  nts (all checked
1aad0 20 76 69 61 20 61 73 73 65 72 74 28 29 29 3a 0a   via assert()):.
1aae0 2a 2a 20 20 20 20 4e 43 5f 48 61 73 41 67 67 20  **    NC_HasAgg 
1aaf0 20 20 20 3d 3d 20 53 46 5f 48 61 73 41 67 67 0a     == SF_HasAgg.
1ab00 2a 2a 20 20 20 20 4e 43 5f 4d 69 6e 4d 61 78 41  **    NC_MinMaxA
1ab10 67 67 20 3d 3d 20 53 46 5f 4d 69 6e 4d 61 78 41  gg == SF_MinMaxA
1ab20 67 67 20 3d 3d 20 53 51 4c 49 54 45 5f 46 55 4e  gg == SQLITE_FUN
1ab30 43 5f 4d 49 4e 4d 41 58 0a 2a 2a 0a 2a 2f 0a 23  C_MINMAX.**.*/.#
1ab40 64 65 66 69 6e 65 20 4e 43 5f 41 6c 6c 6f 77 41  define NC_AllowA
1ab50 67 67 20 20 30 78 30 30 30 31 20 20 2f 2a 20 41  gg  0x0001  /* A
1ab60 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f  ggregate functio
1ab70 6e 73 20 61 72 65 20 61 6c 6c 6f 77 65 64 20 68  ns are allowed h
1ab80 65 72 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e  ere */.#define N
1ab90 43 5f 50 61 72 74 49 64 78 20 20 20 30 78 30 30  C_PartIdx   0x00
1aba0 30 32 20 20 2f 2a 20 54 72 75 65 20 69 66 20 72  02  /* True if r
1abb0 65 73 6f 6c 76 69 6e 67 20 61 20 70 61 72 74 69  esolving a parti
1abc0 61 6c 20 69 6e 64 65 78 20 57 48 45 52 45 20 2a  al index WHERE *
1abd0 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 49 73 43  /.#define NC_IsC
1abe0 68 65 63 6b 20 20 20 30 78 30 30 30 34 20 20 2f  heck   0x0004  /
1abf0 2a 20 54 72 75 65 20 69 66 20 72 65 73 6f 6c 76  * True if resolv
1ac00 69 6e 67 20 6e 61 6d 65 73 20 69 6e 20 61 20 43  ing names in a C
1ac10 48 45 43 4b 20 63 6f 6e 73 74 72 61 69 6e 74 20  HECK constraint 
1ac20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 49 6e  */.#define NC_In
1ac30 41 67 67 46 75 6e 63 20 30 78 30 30 30 38 20 20  AggFunc 0x0008  
1ac40 2f 2a 20 54 72 75 65 20 69 66 20 61 6e 61 6c 79  /* True if analy
1ac50 7a 69 6e 67 20 61 72 67 75 6d 65 6e 74 73 20 74  zing arguments t
1ac60 6f 20 61 6e 20 61 67 67 20 66 75 6e 63 20 2a 2f  o an agg func */
1ac70 0a 23 64 65 66 69 6e 65 20 4e 43 5f 48 61 73 41  .#define NC_HasA
1ac80 67 67 20 20 20 20 30 78 30 30 31 30 20 20 2f 2a  gg    0x0010  /*
1ac90 20 4f 6e 65 20 6f 72 20 6d 6f 72 65 20 61 67 67   One or more agg
1aca0 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73  regate functions
1acb0 20 73 65 65 6e 20 2a 2f 0a 23 64 65 66 69 6e 65   seen */.#define
1acc0 20 4e 43 5f 49 64 78 45 78 70 72 20 20 20 30 78   NC_IdxExpr   0x
1acd0 30 30 32 30 20 20 2f 2a 20 54 72 75 65 20 69 66  0020  /* True if
1ace0 20 72 65 73 6f 6c 76 69 6e 67 20 63 6f 6c 75 6d   resolving colum
1acf0 6e 73 20 6f 66 20 43 52 45 41 54 45 20 49 4e 44  ns of CREATE IND
1ad00 45 58 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43  EX */.#define NC
1ad10 5f 56 61 72 53 65 6c 65 63 74 20 30 78 30 30 34  _VarSelect 0x004
1ad20 30 20 20 2f 2a 20 41 20 63 6f 72 72 65 6c 61 74  0  /* A correlat
1ad30 65 64 20 73 75 62 71 75 65 72 79 20 68 61 73 20  ed subquery has 
1ad40 62 65 65 6e 20 73 65 65 6e 20 2a 2f 0a 23 64 65  been seen */.#de
1ad50 66 69 6e 65 20 4e 43 5f 4d 69 6e 4d 61 78 41 67  fine NC_MinMaxAg
1ad60 67 20 30 78 31 30 30 30 20 20 2f 2a 20 6d 69 6e  g 0x1000  /* min
1ad70 2f 6d 61 78 20 61 67 67 72 65 67 61 74 65 73 20  /max aggregates 
1ad80 73 65 65 6e 2e 20 20 53 65 65 20 6e 6f 74 65 20  seen.  See note 
1ad90 61 62 6f 76 65 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20  above */../*.** 
1ada0 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  An instance of t
1adb0 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72  he following str
1adc0 75 63 74 75 72 65 20 63 6f 6e 74 61 69 6e 73 20  ucture contains 
1add0 61 6c 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a  all information.
1ade0 2a 2a 20 6e 65 65 64 65 64 20 74 6f 20 67 65 6e  ** needed to gen
1adf0 65 72 61 74 65 20 63 6f 64 65 20 66 6f 72 20 61  erate code for a
1ae00 20 73 69 6e 67 6c 65 20 53 45 4c 45 43 54 20 73   single SELECT s
1ae10 74 61 74 65 6d 65 6e 74 2e 0a 2a 2a 0a 2a 2a 20  tatement..**.** 
1ae20 6e 4c 69 6d 69 74 20 69 73 20 73 65 74 20 74 6f  nLimit is set to
1ae30 20 2d 31 20 69 66 20 74 68 65 72 65 20 69 73 20   -1 if there is 
1ae40 6e 6f 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 2e  no LIMIT clause.
1ae50 20 20 6e 4f 66 66 73 65 74 20 69 73 20 73 65 74    nOffset is set
1ae60 20 74 6f 20 30 2e 0a 2a 2a 20 49 66 20 74 68 65   to 0..** If the
1ae70 72 65 20 69 73 20 61 20 4c 49 4d 49 54 20 63 6c  re is a LIMIT cl
1ae80 61 75 73 65 2c 20 74 68 65 20 70 61 72 73 65 72  ause, the parser
1ae90 20 73 65 74 73 20 6e 4c 69 6d 69 74 20 74 6f 20   sets nLimit to 
1aea0 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65  the value of the
1aeb0 0a 2a 2a 20 6c 69 6d 69 74 20 61 6e 64 20 6e 4f  .** limit and nO
1aec0 66 66 73 65 74 20 74 6f 20 74 68 65 20 76 61 6c  ffset to the val
1aed0 75 65 20 6f 66 20 74 68 65 20 6f 66 66 73 65 74  ue of the offset
1aee0 20 28 6f 72 20 30 20 69 66 20 74 68 65 72 65 20   (or 0 if there 
1aef0 69 73 20 6e 6f 74 0a 2a 2a 20 6f 66 66 73 65 74  is not.** offset
1af00 29 2e 20 20 42 75 74 20 6c 61 74 65 72 20 6f 6e  ).  But later on
1af10 2c 20 6e 4c 69 6d 69 74 20 61 6e 64 20 6e 4f 66  , nLimit and nOf
1af20 66 73 65 74 20 62 65 63 6f 6d 65 20 74 68 65 20  fset become the 
1af30 6d 65 6d 6f 72 79 20 6c 6f 63 61 74 69 6f 6e 73  memory locations
1af40 0a 2a 2a 20 69 6e 20 74 68 65 20 56 44 42 45 20  .** in the VDBE 
1af50 74 68 61 74 20 72 65 63 6f 72 64 20 74 68 65 20  that record the 
1af60 6c 69 6d 69 74 20 61 6e 64 20 6f 66 66 73 65 74  limit and offset
1af70 20 63 6f 75 6e 74 65 72 73 2e 0a 2a 2a 0a 2a 2a   counters..**.**
1af80 20 61 64 64 72 4f 70 65 6e 45 70 68 6d 5b 5d 20   addrOpenEphm[] 
1af90 65 6e 74 72 69 65 73 20 63 6f 6e 74 61 69 6e 20  entries contain 
1afa0 74 68 65 20 61 64 64 72 65 73 73 20 6f 66 20 4f  the address of O
1afb0 50 5f 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c 20  P_OpenEphemeral 
1afc0 6f 70 63 6f 64 65 73 2e 0a 2a 2a 20 54 68 65 73  opcodes..** Thes
1afd0 65 20 61 64 64 72 65 73 73 65 73 20 6d 75 73 74  e addresses must
1afe0 20 62 65 20 73 74 6f 72 65 64 20 73 6f 20 74 68   be stored so th
1aff0 61 74 20 77 65 20 63 61 6e 20 67 6f 20 62 61 63  at we can go bac
1b000 6b 20 61 6e 64 20 66 69 6c 6c 20 69 6e 0a 2a 2a  k and fill in.**
1b010 20 74 68 65 20 50 34 5f 4b 45 59 49 4e 46 4f 20   the P4_KEYINFO 
1b020 61 6e 64 20 50 32 20 70 61 72 61 6d 65 74 65 72  and P2 parameter
1b030 73 20 6c 61 74 65 72 2e 20 20 4e 65 69 74 68 65  s later.  Neithe
1b040 72 20 74 68 65 20 4b 65 79 49 6e 66 6f 20 6e 6f  r the KeyInfo no
1b050 72 0a 2a 2a 20 74 68 65 20 6e 75 6d 62 65 72 20  r.** the number 
1b060 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 50 32  of columns in P2
1b070 20 63 61 6e 20 62 65 20 63 6f 6d 70 75 74 65 64   can be computed
1b080 20 61 74 20 74 68 65 20 73 61 6d 65 20 74 69 6d   at the same tim
1b090 65 0a 2a 2a 20 61 73 20 74 68 65 20 4f 50 5f 4f  e.** as the OP_O
1b0a0 70 65 6e 45 70 68 6d 20 69 6e 73 74 72 75 63 74  penEphm instruct
1b0b0 69 6f 6e 20 69 73 20 63 6f 64 65 64 20 62 65 63  ion is coded bec
1b0c0 61 75 73 65 20 6e 6f 74 0a 2a 2a 20 65 6e 6f 75  ause not.** enou
1b0d0 67 68 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61  gh information a
1b0e0 62 6f 75 74 20 74 68 65 20 63 6f 6d 70 6f 75 6e  bout the compoun
1b0f0 64 20 71 75 65 72 79 20 69 73 20 6b 6e 6f 77 6e  d query is known
1b100 20 61 74 20 74 68 61 74 20 70 6f 69 6e 74 2e 0a   at that point..
1b110 2a 2a 20 54 68 65 20 4b 65 79 49 6e 66 6f 20 66  ** The KeyInfo f
1b120 6f 72 20 61 64 64 72 4f 70 65 6e 54 72 61 6e 5b  or addrOpenTran[
1b130 30 5d 20 61 6e 64 20 5b 31 5d 20 63 6f 6e 74 61  0] and [1] conta
1b140 69 6e 73 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65  ins collating se
1b150 71 75 65 6e 63 65 73 0a 2a 2a 20 66 6f 72 20 74  quences.** for t
1b160 68 65 20 72 65 73 75 6c 74 20 73 65 74 2e 20 20  he result set.  
1b170 54 68 65 20 4b 65 79 49 6e 66 6f 20 66 6f 72 20  The KeyInfo for 
1b180 61 64 64 72 4f 70 65 6e 45 70 68 6d 5b 32 5d 20  addrOpenEphm[2] 
1b190 63 6f 6e 74 61 69 6e 73 20 63 6f 6c 6c 61 74 69  contains collati
1b1a0 6e 67 0a 2a 2a 20 73 65 71 75 65 6e 63 65 73 20  ng.** sequences 
1b1b0 66 6f 72 20 74 68 65 20 4f 52 44 45 52 20 42 59  for the ORDER BY
1b1c0 20 63 6c 61 75 73 65 2e 0a 2a 2f 0a 73 74 72 75   clause..*/.stru
1b1d0 63 74 20 53 65 6c 65 63 74 20 7b 0a 20 20 45 78  ct Select {.  Ex
1b1e0 70 72 4c 69 73 74 20 2a 70 45 4c 69 73 74 3b 20  prList *pEList; 
1b1f0 20 20 20 20 20 2f 2a 20 54 68 65 20 66 69 65 6c       /* The fiel
1b200 64 73 20 6f 66 20 74 68 65 20 72 65 73 75 6c 74  ds of the result
1b210 20 2a 2f 0a 20 20 75 38 20 6f 70 3b 20 20 20 20   */.  u8 op;    
1b220 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1b230 4f 6e 65 20 6f 66 3a 20 54 4b 5f 55 4e 49 4f 4e  One of: TK_UNION
1b240 20 54 4b 5f 41 4c 4c 20 54 4b 5f 49 4e 54 45 52   TK_ALL TK_INTER
1b250 53 45 43 54 20 54 4b 5f 45 58 43 45 50 54 20 2a  SECT TK_EXCEPT *
1b260 2f 0a 20 20 4c 6f 67 45 73 74 20 6e 53 65 6c 65  /.  LogEst nSele
1b270 63 74 52 6f 77 3b 20 20 20 20 20 2f 2a 20 45 73  ctRow;     /* Es
1b280 74 69 6d 61 74 65 64 20 6e 75 6d 62 65 72 20 6f  timated number o
1b290 66 20 72 65 73 75 6c 74 20 72 6f 77 73 20 2a 2f  f result rows */
1b2a0 0a 20 20 75 33 32 20 73 65 6c 46 6c 61 67 73 3b  .  u32 selFlags;
1b2b0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61 72            /* Var
1b2c0 69 6f 75 73 20 53 46 5f 2a 20 76 61 6c 75 65 73  ious SF_* values
1b2d0 20 2a 2f 0a 20 20 69 6e 74 20 69 4c 69 6d 69 74   */.  int iLimit
1b2e0 2c 20 69 4f 66 66 73 65 74 3b 20 20 20 2f 2a 20  , iOffset;   /* 
1b2f0 4d 65 6d 6f 72 79 20 72 65 67 69 73 74 65 72 73  Memory registers
1b300 20 68 6f 6c 64 69 6e 67 20 4c 49 4d 49 54 20 26   holding LIMIT &
1b310 20 4f 46 46 53 45 54 20 63 6f 75 6e 74 65 72 73   OFFSET counters
1b320 20 2a 2f 0a 23 69 66 20 53 45 4c 45 43 54 54 52   */.#if SELECTTR
1b330 41 43 45 5f 45 4e 41 42 4c 45 44 0a 20 20 63 68  ACE_ENABLED.  ch
1b340 61 72 20 7a 53 65 6c 4e 61 6d 65 5b 31 32 5d 3b  ar zSelName[12];
1b350 20 20 20 20 20 2f 2a 20 53 79 6d 62 6f 6c 69 63       /* Symbolic
1b360 20 6e 61 6d 65 20 6f 66 20 74 68 69 73 20 53 45   name of this SE
1b370 4c 45 43 54 20 75 73 65 20 66 6f 72 20 64 65 62  LECT use for deb
1b380 75 67 67 69 6e 67 20 2a 2f 0a 23 65 6e 64 69 66  ugging */.#endif
1b390 0a 20 20 69 6e 74 20 61 64 64 72 4f 70 65 6e 45  .  int addrOpenE
1b3a0 70 68 6d 5b 32 5d 3b 20 20 20 2f 2a 20 4f 50 5f  phm[2];   /* OP_
1b3b0 4f 70 65 6e 45 70 68 65 6d 20 6f 70 63 6f 64 65  OpenEphem opcode
1b3c0 73 20 72 65 6c 61 74 65 64 20 74 6f 20 74 68 69  s related to thi
1b3d0 73 20 73 65 6c 65 63 74 20 2a 2f 0a 20 20 53 72  s select */.  Sr
1b3e0 63 4c 69 73 74 20 2a 70 53 72 63 3b 20 20 20 20  cList *pSrc;    
1b3f0 20 20 20 20 20 2f 2a 20 54 68 65 20 46 52 4f 4d       /* The FROM
1b400 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 45 78 70   clause */.  Exp
1b410 72 20 2a 70 57 68 65 72 65 3b 20 20 20 20 20 20  r *pWhere;      
1b420 20 20 20 20 2f 2a 20 54 68 65 20 57 48 45 52 45      /* The WHERE
1b430 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 45 78 70   clause */.  Exp
1b440 72 4c 69 73 74 20 2a 70 47 72 6f 75 70 42 79 3b  rList *pGroupBy;
1b450 20 20 20 20 2f 2a 20 54 68 65 20 47 52 4f 55 50      /* The GROUP
1b460 20 42 59 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20   BY clause */.  
1b470 45 78 70 72 20 2a 70 48 61 76 69 6e 67 3b 20 20  Expr *pHaving;  
1b480 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 48 41         /* The HA
1b490 56 49 4e 47 20 63 6c 61 75 73 65 20 2a 2f 0a 20  VING clause */. 
1b4a0 20 45 78 70 72 4c 69 73 74 20 2a 70 4f 72 64 65   ExprList *pOrde
1b4b0 72 42 79 3b 20 20 20 20 2f 2a 20 54 68 65 20 4f  rBy;    /* The O
1b4c0 52 44 45 52 20 42 59 20 63 6c 61 75 73 65 20 2a  RDER BY clause *
1b4d0 2f 0a 20 20 53 65 6c 65 63 74 20 2a 70 50 72 69  /.  Select *pPri
1b4e0 6f 72 3b 20 20 20 20 20 20 20 20 2f 2a 20 50 72  or;        /* Pr
1b4f0 69 6f 72 20 73 65 6c 65 63 74 20 69 6e 20 61 20  ior select in a 
1b500 63 6f 6d 70 6f 75 6e 64 20 73 65 6c 65 63 74 20  compound select 
1b510 73 74 61 74 65 6d 65 6e 74 20 2a 2f 0a 20 20 53  statement */.  S
1b520 65 6c 65 63 74 20 2a 70 4e 65 78 74 3b 20 20 20  elect *pNext;   
1b530 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 73 65        /* Next se
1b540 6c 65 63 74 20 74 6f 20 74 68 65 20 6c 65 66 74  lect to the left
1b550 20 69 6e 20 61 20 63 6f 6d 70 6f 75 6e 64 20 2a   in a compound *
1b560 2f 0a 20 20 45 78 70 72 20 2a 70 4c 69 6d 69 74  /.  Expr *pLimit
1b570 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 49  ;          /* LI
1b580 4d 49 54 20 65 78 70 72 65 73 73 69 6f 6e 2e 20  MIT expression. 
1b590 4e 55 4c 4c 20 6d 65 61 6e 73 20 6e 6f 74 20 75  NULL means not u
1b5a0 73 65 64 2e 20 2a 2f 0a 20 20 45 78 70 72 20 2a  sed. */.  Expr *
1b5b0 70 4f 66 66 73 65 74 3b 20 20 20 20 20 20 20 20  pOffset;        
1b5c0 20 2f 2a 20 4f 46 46 53 45 54 20 65 78 70 72 65   /* OFFSET expre
1b5d0 73 73 69 6f 6e 2e 20 4e 55 4c 4c 20 6d 65 61 6e  ssion. NULL mean
1b5e0 73 20 6e 6f 74 20 75 73 65 64 2e 20 2a 2f 0a 20  s not used. */. 
1b5f0 20 57 69 74 68 20 2a 70 57 69 74 68 3b 20 20 20   With *pWith;   
1b600 20 20 20 20 20 20 20 20 2f 2a 20 57 49 54 48 20          /* WITH 
1b610 63 6c 61 75 73 65 20 61 74 74 61 63 68 65 64 20  clause attached 
1b620 74 6f 20 74 68 69 73 20 73 65 6c 65 63 74 2e 20  to this select. 
1b630 4f 72 20 4e 55 4c 4c 2e 20 2a 2f 0a 7d 3b 0a 0a  Or NULL. */.};..
1b640 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 76 61  /*.** Allowed va
1b650 6c 75 65 73 20 66 6f 72 20 53 65 6c 65 63 74 2e  lues for Select.
1b660 73 65 6c 46 6c 61 67 73 2e 20 20 54 68 65 20 22  selFlags.  The "
1b670 53 46 22 20 70 72 65 66 69 78 20 73 74 61 6e 64  SF" prefix stand
1b680 73 20 66 6f 72 0a 2a 2a 20 22 53 65 6c 65 63 74  s for.** "Select
1b690 20 46 6c 61 67 22 2e 0a 2a 2a 0a 2a 2a 20 56 61   Flag"..**.** Va
1b6a0 6c 75 65 20 63 6f 6e 73 74 72 61 69 6e 74 73 20  lue constraints 
1b6b0 28 61 6c 6c 20 63 68 65 63 6b 65 64 20 76 69 61  (all checked via
1b6c0 20 61 73 73 65 72 74 28 29 29 0a 2a 2a 20 20 20   assert()).**   
1b6d0 20 20 53 46 5f 48 61 73 41 67 67 20 20 20 20 20    SF_HasAgg     
1b6e0 3d 3d 20 4e 43 5f 48 61 73 41 67 67 0a 2a 2a 20  == NC_HasAgg.** 
1b6f0 20 20 20 20 53 46 5f 4d 69 6e 4d 61 78 41 67 67      SF_MinMaxAgg
1b700 20 20 3d 3d 20 4e 43 5f 4d 69 6e 4d 61 78 41 67    == NC_MinMaxAg
1b710 67 20 20 20 20 20 3d 3d 20 53 51 4c 49 54 45 5f  g     == SQLITE_
1b720 46 55 4e 43 5f 4d 49 4e 4d 41 58 0a 2a 2a 20 20  FUNC_MINMAX.**  
1b730 20 20 20 53 46 5f 46 69 78 65 64 4c 69 6d 69 74     SF_FixedLimit
1b740 20 3d 3d 20 57 48 45 52 45 5f 55 53 45 5f 4c 49   == WHERE_USE_LI
1b750 4d 49 54 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53  MIT.*/.#define S
1b760 46 5f 44 69 73 74 69 6e 63 74 20 20 20 20 20 20  F_Distinct      
1b770 20 30 78 30 30 30 30 31 20 20 2f 2a 20 4f 75 74   0x00001  /* Out
1b780 70 75 74 20 73 68 6f 75 6c 64 20 62 65 20 44 49  put should be DI
1b790 53 54 49 4e 43 54 20 2a 2f 0a 23 64 65 66 69 6e  STINCT */.#defin
1b7a0 65 20 53 46 5f 41 6c 6c 20 20 20 20 20 20 20 20  e SF_All        
1b7b0 20 20 20 20 30 78 30 30 30 30 32 20 20 2f 2a 20      0x00002  /* 
1b7c0 49 6e 63 6c 75 64 65 73 20 74 68 65 20 41 4c 4c  Includes the ALL
1b7d0 20 6b 65 79 77 6f 72 64 20 2a 2f 0a 23 64 65 66   keyword */.#def
1b7e0 69 6e 65 20 53 46 5f 52 65 73 6f 6c 76 65 64 20  ine SF_Resolved 
1b7f0 20 20 20 20 20 20 30 78 30 30 30 30 34 20 20 2f        0x00004  /
1b800 2a 20 49 64 65 6e 74 69 66 69 65 72 73 20 68 61  * Identifiers ha
1b810 76 65 20 62 65 65 6e 20 72 65 73 6f 6c 76 65 64  ve been resolved
1b820 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 41   */.#define SF_A
1b830 67 67 72 65 67 61 74 65 20 20 20 20 20 20 30 78  ggregate      0x
1b840 30 30 30 30 38 20 20 2f 2a 20 43 6f 6e 74 61 69  00008  /* Contai
1b850 6e 73 20 61 67 67 20 66 75 6e 63 74 69 6f 6e 73  ns agg functions
1b860 20 6f 72 20 61 20 47 52 4f 55 50 20 42 59 20 2a   or a GROUP BY *
1b870 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 48 61 73  /.#define SF_Has
1b880 41 67 67 20 20 20 20 20 20 20 20 20 30 78 30 30  Agg         0x00
1b890 30 31 30 20 20 2f 2a 20 43 6f 6e 74 61 69 6e 73  010  /* Contains
1b8a0 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74   aggregate funct
1b8b0 69 6f 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ions */.#define 
1b8c0 53 46 5f 55 73 65 73 45 70 68 65 6d 65 72 61 6c  SF_UsesEphemeral
1b8d0 20 20 30 78 30 30 30 32 30 20 20 2f 2a 20 55 73    0x00020  /* Us
1b8e0 65 73 20 74 68 65 20 4f 70 65 6e 45 70 68 65 6d  es the OpenEphem
1b8f0 65 72 61 6c 20 6f 70 63 6f 64 65 20 2a 2f 0a 23  eral opcode */.#
1b900 64 65 66 69 6e 65 20 53 46 5f 45 78 70 61 6e 64  define SF_Expand
1b910 65 64 20 20 20 20 20 20 20 30 78 30 30 30 34 30  ed       0x00040
1b920 20 20 2f 2a 20 73 71 6c 69 74 65 33 53 65 6c 65    /* sqlite3Sele
1b930 63 74 45 78 70 61 6e 64 28 29 20 63 61 6c 6c 65  ctExpand() calle
1b940 64 20 6f 6e 20 74 68 69 73 20 2a 2f 0a 23 64 65  d on this */.#de
1b950 66 69 6e 65 20 53 46 5f 48 61 73 54 79 70 65 49  fine SF_HasTypeI
1b960 6e 66 6f 20 20 20 20 30 78 30 30 30 38 30 20 20  nfo    0x00080  
1b970 2f 2a 20 46 52 4f 4d 20 73 75 62 71 75 65 72 69  /* FROM subqueri
1b980 65 73 20 68 61 76 65 20 54 61 62 6c 65 20 6d 65  es have Table me
1b990 74 61 64 61 74 61 20 2a 2f 0a 23 64 65 66 69 6e  tadata */.#defin
1b9a0 65 20 53 46 5f 43 6f 6d 70 6f 75 6e 64 20 20 20  e SF_Compound   
1b9b0 20 20 20 20 30 78 30 30 31 30 30 20 20 2f 2a 20      0x00100  /* 
1b9c0 50 61 72 74 20 6f 66 20 61 20 63 6f 6d 70 6f 75  Part of a compou
1b9d0 6e 64 20 71 75 65 72 79 20 2a 2f 0a 23 64 65 66  nd query */.#def
1b9e0 69 6e 65 20 53 46 5f 56 61 6c 75 65 73 20 20 20  ine SF_Values   
1b9f0 20 20 20 20 20 20 30 78 30 30 32 30 30 20 20 2f        0x00200  /
1ba00 2a 20 53 79 6e 74 68 65 73 69 7a 65 64 20 66 72  * Synthesized fr
1ba10 6f 6d 20 56 41 4c 55 45 53 20 63 6c 61 75 73 65  om VALUES clause
1ba20 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 4d   */.#define SF_M
1ba30 75 6c 74 69 56 61 6c 75 65 20 20 20 20 20 30 78  ultiValue     0x
1ba40 30 30 34 30 30 20 20 2f 2a 20 53 69 6e 67 6c 65  00400  /* Single
1ba50 20 56 41 4c 55 45 53 20 74 65 72 6d 20 77 69 74   VALUES term wit
1ba60 68 20 6d 75 6c 74 69 70 6c 65 20 72 6f 77 73 20  h multiple rows 
1ba70 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 4e 65  */.#define SF_Ne
1ba80 73 74 65 64 46 72 6f 6d 20 20 20 20 20 30 78 30  stedFrom     0x0
1ba90 30 38 30 30 20 20 2f 2a 20 50 61 72 74 20 6f 66  0800  /* Part of
1baa0 20 61 20 70 61 72 65 6e 74 68 65 73 69 7a 65 64   a parenthesized
1bab0 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 2a 2f 0a   FROM clause */.
1bac0 23 64 65 66 69 6e 65 20 53 46 5f 4d 69 6e 4d 61  #define SF_MinMa
1bad0 78 41 67 67 20 20 20 20 20 20 30 78 30 31 30 30  xAgg      0x0100
1bae0 30 20 20 2f 2a 20 41 67 67 72 65 67 61 74 65 20  0  /* Aggregate 
1baf0 63 6f 6e 74 61 69 6e 69 6e 67 20 6d 69 6e 28 29  containing min()
1bb00 20 6f 72 20 6d 61 78 28 29 20 2a 2f 0a 23 64 65   or max() */.#de
1bb10 66 69 6e 65 20 53 46 5f 52 65 63 75 72 73 69 76  fine SF_Recursiv
1bb20 65 20 20 20 20 20 20 30 78 30 32 30 30 30 20 20  e      0x02000  
1bb30 2f 2a 20 54 68 65 20 72 65 63 75 72 73 69 76 65  /* The recursive
1bb40 20 70 61 72 74 20 6f 66 20 61 20 72 65 63 75 72   part of a recur
1bb50 73 69 76 65 20 43 54 45 20 2a 2f 0a 23 64 65 66  sive CTE */.#def
1bb60 69 6e 65 20 53 46 5f 46 69 78 65 64 4c 69 6d 69  ine SF_FixedLimi
1bb70 74 20 20 20 20 20 30 78 30 34 30 30 30 20 20 2f  t     0x04000  /
1bb80 2a 20 6e 53 65 6c 65 63 74 52 6f 77 20 73 65 74  * nSelectRow set
1bb90 20 62 79 20 61 20 63 6f 6e 73 74 61 6e 74 20 4c   by a constant L
1bba0 49 4d 49 54 20 2a 2f 0a 23 64 65 66 69 6e 65 20  IMIT */.#define 
1bbb0 53 46 5f 4d 61 79 62 65 43 6f 6e 76 65 72 74 20  SF_MaybeConvert 
1bbc0 20 20 30 78 30 38 30 30 30 20 20 2f 2a 20 4e 65    0x08000  /* Ne
1bbd0 65 64 20 63 6f 6e 76 65 72 74 43 6f 6d 70 6f 75  ed convertCompou
1bbe0 6e 64 53 65 6c 65 63 74 54 6f 53 75 62 71 75 65  ndSelectToSubque
1bbf0 72 79 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ry() */.#define 
1bc00 53 46 5f 43 6f 6e 76 65 72 74 65 64 20 20 20 20  SF_Converted    
1bc10 20 20 30 78 31 30 30 30 30 20 20 2f 2a 20 42 79    0x10000  /* By
1bc20 20 63 6f 6e 76 65 72 74 43 6f 6d 70 6f 75 6e 64   convertCompound
1bc30 53 65 6c 65 63 74 54 6f 53 75 62 71 75 65 72 79  SelectToSubquery
1bc40 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46  () */.#define SF
1bc50 5f 49 6e 63 6c 75 64 65 48 69 64 64 65 6e 20 20  _IncludeHidden  
1bc60 30 78 32 30 30 30 30 20 20 2f 2a 20 49 6e 63 6c  0x20000  /* Incl
1bc70 75 64 65 20 68 69 64 64 65 6e 20 63 6f 6c 75 6d  ude hidden colum
1bc80 6e 73 20 69 6e 20 6f 75 74 70 75 74 20 2a 2f 0a  ns in output */.
1bc90 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 72 65 73 75  ../*.** The resu
1bca0 6c 74 73 20 6f 66 20 61 20 53 45 4c 45 43 54 20  lts of a SELECT 
1bcb0 63 61 6e 20 62 65 20 64 69 73 74 72 69 62 75 74  can be distribut
1bcc0 65 64 20 69 6e 20 73 65 76 65 72 61 6c 20 77 61  ed in several wa
1bcd0 79 73 2c 20 61 73 20 64 65 66 69 6e 65 64 0a 2a  ys, as defined.*
1bce0 2a 20 62 79 20 6f 6e 65 20 6f 66 20 74 68 65 20  * by one of the 
1bcf0 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 73  following macros
1bd00 2e 20 20 54 68 65 20 22 53 52 54 22 20 70 72 65  .  The "SRT" pre
1bd10 66 69 78 20 6d 65 61 6e 73 20 22 53 45 4c 45 43  fix means "SELEC
1bd20 54 20 52 65 73 75 6c 74 0a 2a 2a 20 54 79 70 65  T Result.** Type
1bd30 22 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54  "..**.**     SRT
1bd40 5f 55 6e 69 6f 6e 20 20 20 20 20 20 20 53 74 6f  _Union       Sto
1bd50 72 65 20 72 65 73 75 6c 74 73 20 61 73 20 61 20  re results as a 
1bd60 6b 65 79 20 69 6e 20 61 20 74 65 6d 70 6f 72 61  key in a tempora
1bd70 72 79 20 69 6e 64 65 78 0a 2a 2a 20 20 20 20 20  ry index.**     
1bd80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bd90 69 64 65 6e 74 69 66 69 65 64 20 62 79 20 70 44  identified by pD
1bda0 65 73 74 2d 3e 69 53 44 50 61 72 6d 2e 0a 2a 2a  est->iSDParm..**
1bdb0 0a 2a 2a 20 20 20 20 20 53 52 54 5f 45 78 63 65  .**     SRT_Exce
1bdc0 70 74 20 20 20 20 20 20 52 65 6d 6f 76 65 20 72  pt      Remove r
1bdd0 65 73 75 6c 74 73 20 66 72 6f 6d 20 74 68 65 20  esults from the 
1bde0 74 65 6d 70 6f 72 61 72 79 20 69 6e 64 65 78 20  temporary index 
1bdf0 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 2e 0a  pDest->iSDParm..
1be00 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 45 78  **.**     SRT_Ex
1be10 69 73 74 73 20 20 20 20 20 20 53 74 6f 72 65 20  ists      Store 
1be20 61 20 31 20 69 6e 20 6d 65 6d 6f 72 79 20 63 65  a 1 in memory ce
1be30 6c 6c 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72  ll pDest->iSDPar
1be40 6d 20 69 66 20 74 68 65 20 72 65 73 75 6c 74 0a  m if the result.
1be50 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
1be60 20 20 20 20 20 20 20 73 65 74 20 69 73 20 6e 6f         set is no
1be70 74 20 65 6d 70 74 79 2e 0a 2a 2a 0a 2a 2a 20 20  t empty..**.**  
1be80 20 20 20 53 52 54 5f 44 69 73 63 61 72 64 20 20     SRT_Discard  
1be90 20 20 20 54 68 72 6f 77 20 74 68 65 20 72 65 73     Throw the res
1bea0 75 6c 74 73 20 61 77 61 79 2e 20 20 54 68 69 73  ults away.  This
1beb0 20 69 73 20 75 73 65 64 20 62 79 20 53 45 4c 45   is used by SELE
1bec0 43 54 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  CT.**           
1bed0 20 20 20 20 20 20 20 20 20 20 73 74 61 74 65 6d            statem
1bee0 65 6e 74 73 20 77 69 74 68 69 6e 20 74 72 69 67  ents within trig
1bef0 67 65 72 73 20 77 68 6f 73 65 20 6f 6e 6c 79 20  gers whose only 
1bf00 70 75 72 70 6f 73 65 20 69 73 0a 2a 2a 20 20 20  purpose is.**   
1bf10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bf20 20 20 74 68 65 20 73 69 64 65 2d 65 66 66 65 63    the side-effec
1bf30 74 73 20 6f 66 20 66 75 6e 63 74 69 6f 6e 73 2e  ts of functions.
1bf40 0a 2a 2a 0a 2a 2a 20 41 6c 6c 20 6f 66 20 74 68  .**.** All of th
1bf50 65 20 61 62 6f 76 65 20 61 72 65 20 66 72 65 65  e above are free
1bf60 20 74 6f 20 69 67 6e 6f 72 65 20 74 68 65 69 72   to ignore their
1bf70 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73 65   ORDER BY clause
1bf80 2e 20 54 68 6f 73 65 20 74 68 61 74 0a 2a 2a 20  . Those that.** 
1bf90 66 6f 6c 6c 6f 77 20 6d 75 73 74 20 68 6f 6e 6f  follow must hono
1bfa0 72 20 74 68 65 20 4f 52 44 45 52 20 42 59 20 63  r the ORDER BY c
1bfb0 6c 61 75 73 65 2e 0a 2a 2a 0a 2a 2a 20 20 20 20  lause..**.**    
1bfc0 20 53 52 54 5f 4f 75 74 70 75 74 20 20 20 20 20   SRT_Output     
1bfd0 20 47 65 6e 65 72 61 74 65 20 61 20 72 6f 77 20   Generate a row 
1bfe0 6f 66 20 6f 75 74 70 75 74 20 28 75 73 69 6e 67  of output (using
1bff0 20 74 68 65 20 4f 50 5f 52 65 73 75 6c 74 52 6f   the OP_ResultRo
1c000 77 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  w.**            
1c010 20 20 20 20 20 20 20 20 20 6f 70 63 6f 64 65 29           opcode)
1c020 20 66 6f 72 20 65 61 63 68 20 72 6f 77 20 69 6e   for each row in
1c030 20 74 68 65 20 72 65 73 75 6c 74 20 73 65 74 2e   the result set.
1c040 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 4d  .**.**     SRT_M
1c050 65 6d 20 20 20 20 20 20 20 20 20 4f 6e 6c 79 20  em         Only 
1c060 76 61 6c 69 64 20 69 66 20 74 68 65 20 72 65 73  valid if the res
1c070 75 6c 74 20 69 73 20 61 20 73 69 6e 67 6c 65 20  ult is a single 
1c080 63 6f 6c 75 6d 6e 2e 0a 2a 2a 20 20 20 20 20 20  column..**      
1c090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53                 S
1c0a0 74 6f 72 65 20 74 68 65 20 66 69 72 73 74 20 63  tore the first c
1c0b0 6f 6c 75 6d 6e 20 6f 66 20 74 68 65 20 66 69 72  olumn of the fir
1c0c0 73 74 20 72 65 73 75 6c 74 20 72 6f 77 0a 2a 2a  st result row.**
1c0d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c0e0 20 20 20 20 20 69 6e 20 72 65 67 69 73 74 65 72       in register
1c0f0 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 20   pDest->iSDParm 
1c100 74 68 65 6e 20 61 62 61 6e 64 6f 6e 20 74 68 65  then abandon the
1c110 20 72 65 73 74 0a 2a 2a 20 20 20 20 20 20 20 20   rest.**        
1c120 20 20 20 20 20 20 20 20 20 20 20 20 20 6f 66 20               of 
1c130 74 68 65 20 71 75 65 72 79 2e 20 20 54 68 69 73  the query.  This
1c140 20 64 65 73 74 69 6e 61 74 69 6f 6e 20 69 6d 70   destination imp
1c150 6c 69 65 73 20 22 4c 49 4d 49 54 20 31 22 2e 0a  lies "LIMIT 1"..
1c160 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 53 65  **.**     SRT_Se
1c170 74 20 20 20 20 20 20 20 20 20 54 68 65 20 72 65  t         The re
1c180 73 75 6c 74 20 6d 75 73 74 20 62 65 20 61 20 73  sult must be a s
1c190 69 6e 67 6c 65 20 63 6f 6c 75 6d 6e 2e 20 20 53  ingle column.  S
1c1a0 74 6f 72 65 20 65 61 63 68 0a 2a 2a 20 20 20 20  tore each.**    
1c1b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c1c0 20 72 6f 77 20 6f 66 20 72 65 73 75 6c 74 20 61   row of result a
1c1d0 73 20 74 68 65 20 6b 65 79 20 69 6e 20 74 61 62  s the key in tab
1c1e0 6c 65 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72  le pDest->iSDPar
1c1f0 6d 2e 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  m..**           
1c200 20 20 20 20 20 20 20 20 20 20 41 70 70 6c 79 20            Apply 
1c210 74 68 65 20 61 66 66 69 6e 69 74 79 20 70 44 65  the affinity pDe
1c220 73 74 2d 3e 61 66 66 53 64 73 74 20 62 65 66 6f  st->affSdst befo
1c230 72 65 20 73 74 6f 72 69 6e 67 0a 2a 2a 20 20 20  re storing.**   
1c240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c250 20 20 72 65 73 75 6c 74 73 2e 20 20 55 73 65 64    results.  Used
1c260 20 74 6f 20 69 6d 70 6c 65 6d 65 6e 74 20 22 49   to implement "I
1c270 4e 20 28 53 45 4c 45 43 54 20 2e 2e 2e 29 22 2e  N (SELECT ...)".
1c280 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 45  .**.**     SRT_E
1c290 70 68 65 6d 54 61 62 20 20 20 20 43 72 65 61 74  phemTab    Creat
1c2a0 65 20 61 6e 20 74 65 6d 70 6f 72 61 72 79 20 74  e an temporary t
1c2b0 61 62 6c 65 20 70 44 65 73 74 2d 3e 69 53 44 50  able pDest->iSDP
1c2c0 61 72 6d 20 61 6e 64 20 73 74 6f 72 65 0a 2a 2a  arm and store.**
1c2d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c2e0 20 20 20 20 20 74 68 65 20 72 65 73 75 6c 74 20       the result 
1c2f0 74 68 65 72 65 2e 20 54 68 65 20 63 75 72 73 6f  there. The curso
1c300 72 20 69 73 20 6c 65 66 74 20 6f 70 65 6e 20 61  r is left open a
1c310 66 74 65 72 0a 2a 2a 20 20 20 20 20 20 20 20 20  fter.**         
1c320 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
1c330 72 6e 69 6e 67 2e 20 20 54 68 69 73 20 69 73 20  rning.  This is 
1c340 6c 69 6b 65 20 53 52 54 5f 54 61 62 6c 65 20 65  like SRT_Table e
1c350 78 63 65 70 74 20 74 68 61 74 0a 2a 2a 20 20 20  xcept that.**   
1c360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c370 20 20 74 68 69 73 20 64 65 73 74 69 6e 61 74 69    this destinati
1c380 6f 6e 20 75 73 65 73 20 4f 50 5f 4f 70 65 6e 45  on uses OP_OpenE
1c390 70 68 65 6d 65 72 61 6c 20 74 6f 20 63 72 65 61  phemeral to crea
1c3a0 74 65 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  te.**           
1c3b0 20 20 20 20 20 20 20 20 20 20 74 68 65 20 74 61            the ta
1c3c0 62 6c 65 20 66 69 72 73 74 2e 0a 2a 2a 0a 2a 2a  ble first..**.**
1c3d0 20 20 20 20 20 53 52 54 5f 43 6f 72 6f 75 74 69       SRT_Corouti
1c3e0 6e 65 20 20 20 47 65 6e 65 72 61 74 65 20 61 20  ne   Generate a 
1c3f0 63 6f 2d 72 6f 75 74 69 6e 65 20 74 68 61 74 20  co-routine that 
1c400 72 65 74 75 72 6e 73 20 61 20 6e 65 77 20 72 6f  returns a new ro
1c410 77 20 6f 66 0a 2a 2a 20 20 20 20 20 20 20 20 20  w of.**         
1c420 20 20 20 20 20 20 20 20 20 20 20 20 72 65 73 75              resu
1c430 6c 74 73 20 65 61 63 68 20 74 69 6d 65 20 69 74  lts each time it
1c440 20 69 73 20 69 6e 76 6f 6b 65 64 2e 20 20 54 68   is invoked.  Th
1c450 65 20 65 6e 74 72 79 20 70 6f 69 6e 74 0a 2a 2a  e entry point.**
1c460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c470 20 20 20 20 20 6f 66 20 74 68 65 20 63 6f 2d 72       of the co-r
1c480 6f 75 74 69 6e 65 20 69 73 20 73 74 6f 72 65 64  outine is stored
1c490 20 69 6e 20 72 65 67 69 73 74 65 72 20 70 44 65   in register pDe
1c4a0 73 74 2d 3e 69 53 44 50 61 72 6d 0a 2a 2a 20 20  st->iSDParm.**  
1c4b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c4c0 20 20 20 61 6e 64 20 74 68 65 20 72 65 73 75 6c     and the resul
1c4d0 74 20 72 6f 77 20 69 73 20 73 74 6f 72 65 64 20  t row is stored 
1c4e0 69 6e 20 70 44 65 73 74 2d 3e 6e 44 65 73 74 20  in pDest->nDest 
1c4f0 72 65 67 69 73 74 65 72 73 0a 2a 2a 20 20 20 20  registers.**    
1c500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c510 20 73 74 61 72 74 69 6e 67 20 77 69 74 68 20 70   starting with p
1c520 44 65 73 74 2d 3e 69 53 64 73 74 2e 0a 2a 2a 0a  Dest->iSdst..**.
1c530 2a 2a 20 20 20 20 20 53 52 54 5f 54 61 62 6c 65  **     SRT_Table
1c540 20 20 20 20 20 20 20 53 74 6f 72 65 20 72 65 73         Store res
1c550 75 6c 74 73 20 69 6e 20 74 65 6d 70 6f 72 61 72  ults in temporar
1c560 79 20 74 61 62 6c 65 20 70 44 65 73 74 2d 3e 69  y table pDest->i
1c570 53 44 50 61 72 6d 2e 0a 2a 2a 20 20 20 20 20 53  SDParm..**     S
1c580 52 54 5f 46 69 66 6f 20 20 20 20 20 20 20 20 54  RT_Fifo        T
1c590 68 69 73 20 69 73 20 6c 69 6b 65 20 53 52 54 5f  his is like SRT_
1c5a0 45 70 68 65 6d 54 61 62 20 65 78 63 65 70 74 20  EphemTab except 
1c5b0 74 68 61 74 20 74 68 65 20 74 61 62 6c 65 0a 2a  that the table.*
1c5c0 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
1c5d0 20 20 20 20 20 20 69 73 20 61 73 73 75 6d 65 64        is assumed
1c5e0 20 74 6f 20 61 6c 72 65 61 64 79 20 62 65 20 6f   to already be o
1c5f0 70 65 6e 2e 20 20 53 52 54 5f 46 69 66 6f 20 68  pen.  SRT_Fifo h
1c600 61 73 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  as.**           
1c610 20 20 20 20 20 20 20 20 20 20 74 68 65 20 61 64            the ad
1c620 64 69 74 69 6f 6e 61 6c 20 70 72 6f 70 65 72 74  ditional propert
1c630 79 20 6f 66 20 62 65 69 6e 67 20 61 62 6c 65 20  y of being able 
1c640 74 6f 20 69 67 6e 6f 72 65 0a 2a 2a 20 20 20 20  to ignore.**    
1c650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c660 20 74 68 65 20 4f 52 44 45 52 20 42 59 20 63 6c   the ORDER BY cl
1c670 61 75 73 65 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20  ause..**.**     
1c680 53 52 54 5f 44 69 73 74 46 69 66 6f 20 20 20 20  SRT_DistFifo    
1c690 53 74 6f 72 65 20 72 65 73 75 6c 74 73 20 69 6e  Store results in
1c6a0 20 61 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62   a temporary tab
1c6b0 6c 65 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72  le pDest->iSDPar
1c6c0 6d 2e 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  m..**           
1c6d0 20 20 20 20 20 20 20 20 20 20 42 75 74 20 61 6c            But al
1c6e0 73 6f 20 75 73 65 20 74 65 6d 70 6f 72 61 72 79  so use temporary
1c6f0 20 74 61 62 6c 65 20 70 44 65 73 74 2d 3e 69 53   table pDest->iS
1c700 44 50 61 72 6d 2b 31 20 61 73 0a 2a 2a 20 20 20  DParm+1 as.**   
1c710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c720 20 20 61 20 72 65 63 6f 72 64 20 6f 66 20 61 6c    a record of al
1c730 6c 20 70 72 69 6f 72 20 72 65 73 75 6c 74 73 20  l prior results 
1c740 61 6e 64 20 69 67 6e 6f 72 65 20 61 6e 79 20 64  and ignore any d
1c750 75 70 6c 69 63 61 74 65 0a 2a 2a 20 20 20 20 20  uplicate.**     
1c760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c770 72 6f 77 73 2e 20 20 4e 61 6d 65 20 6d 65 61 6e  rows.  Name mean
1c780 73 3a 20 20 22 44 69 73 74 69 6e 63 74 20 46 69  s:  "Distinct Fi
1c790 66 6f 22 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53  fo"..**.**     S
1c7a0 52 54 5f 51 75 65 75 65 20 20 20 20 20 20 20 53  RT_Queue       S
1c7b0 74 6f 72 65 20 72 65 73 75 6c 74 73 20 69 6e 20  tore results in 
1c7c0 70 72 69 6f 72 69 74 79 20 71 75 65 75 65 20 70  priority queue p
1c7d0 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 20 28 72  Dest->iSDParm (r
1c7e0 65 61 6c 6c 79 0a 2a 2a 20 20 20 20 20 20 20 20  eally.**        
1c7f0 20 20 20 20 20 20 20 20 20 20 20 20 20 61 6e 20               an 
1c800 69 6e 64 65 78 29 2e 20 20 41 70 70 65 6e 64 20  index).  Append 
1c810 61 20 73 65 71 75 65 6e 63 65 20 6e 75 6d 62 65  a sequence numbe
1c820 72 20 73 6f 20 74 68 61 74 20 61 6c 6c 20 65 6e  r so that all en
1c830 74 72 69 65 73 0a 2a 2a 20 20 20 20 20 20 20 20  tries.**        
1c840 20 20 20 20 20 20 20 20 20 20 20 20 20 61 72 65               are
1c850 20 64 69 73 74 69 6e 63 74 2e 0a 2a 2a 0a 2a 2a   distinct..**.**
1c860 20 20 20 20 20 53 52 54 5f 44 69 73 74 51 75 65       SRT_DistQue
1c870 75 65 20 20 20 53 74 6f 72 65 20 72 65 73 75 6c  ue   Store resul
1c880 74 73 20 69 6e 20 70 72 69 6f 72 69 74 79 20 71  ts in priority q
1c890 75 65 75 65 20 70 44 65 73 74 2d 3e 69 53 44 50  ueue pDest->iSDP
1c8a0 61 72 6d 20 6f 6e 6c 79 20 69 66 0a 2a 2a 20 20  arm only if.**  
1c8b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c8c0 20 20 20 74 68 65 20 73 61 6d 65 20 72 65 63 6f     the same reco
1c8d0 72 64 20 68 61 73 20 6e 65 76 65 72 20 62 65 65  rd has never bee
1c8e0 6e 20 73 74 6f 72 65 64 20 62 65 66 6f 72 65 2e  n stored before.
1c8f0 20 20 54 68 65 0a 2a 2a 20 20 20 20 20 20 20 20    The.**        
1c900 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 64               ind
1c910 65 78 20 61 74 20 70 44 65 73 74 2d 3e 69 53 44  ex at pDest->iSD
1c920 50 61 72 6d 2b 31 20 68 6f 6c 64 20 61 6c 6c 20  Parm+1 hold all 
1c930 70 72 69 6f 72 20 73 74 6f 72 65 73 2e 0a 2a 2f  prior stores..*/
1c940 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 55 6e 69  .#define SRT_Uni
1c950 6f 6e 20 20 20 20 20 20 20 20 31 20 20 2f 2a 20  on        1  /* 
1c960 53 74 6f 72 65 20 72 65 73 75 6c 74 20 61 73 20  Store result as 
1c970 6b 65 79 73 20 69 6e 20 61 6e 20 69 6e 64 65 78  keys in an index
1c980 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f   */.#define SRT_
1c990 45 78 63 65 70 74 20 20 20 20 20 20 20 32 20 20  Except       2  
1c9a0 2f 2a 20 52 65 6d 6f 76 65 20 72 65 73 75 6c 74  /* Remove result
1c9b0 20 66 72 6f 6d 20 61 20 55 4e 49 4f 4e 20 69 6e   from a UNION in
1c9c0 64 65 78 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  dex */.#define S
1c9d0 52 54 5f 45 78 69 73 74 73 20 20 20 20 20 20 20  RT_Exists       
1c9e0 33 20 20 2f 2a 20 53 74 6f 72 65 20 31 20 69 66  3  /* Store 1 if
1c9f0 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 6e   the result is n
1ca00 6f 74 20 65 6d 70 74 79 20 2a 2f 0a 23 64 65 66  ot empty */.#def
1ca10 69 6e 65 20 53 52 54 5f 44 69 73 63 61 72 64 20  ine SRT_Discard 
1ca20 20 20 20 20 20 34 20 20 2f 2a 20 44 6f 20 6e 6f       4  /* Do no
1ca30 74 20 73 61 76 65 20 74 68 65 20 72 65 73 75 6c  t save the resul
1ca40 74 73 20 61 6e 79 77 68 65 72 65 20 2a 2f 0a 23  ts anywhere */.#
1ca50 64 65 66 69 6e 65 20 53 52 54 5f 46 69 66 6f 20  define SRT_Fifo 
1ca60 20 20 20 20 20 20 20 20 35 20 20 2f 2a 20 53 74          5  /* St
1ca70 6f 72 65 20 72 65 73 75 6c 74 20 61 73 20 64 61  ore result as da
1ca80 74 61 20 77 69 74 68 20 61 6e 20 61 75 74 6f 6d  ta with an autom
1ca90 61 74 69 63 20 72 6f 77 69 64 20 2a 2f 0a 23 64  atic rowid */.#d
1caa0 65 66 69 6e 65 20 53 52 54 5f 44 69 73 74 46 69  efine SRT_DistFi
1cab0 66 6f 20 20 20 20 20 36 20 20 2f 2a 20 4c 69 6b  fo     6  /* Lik
1cac0 65 20 53 52 54 5f 46 69 66 6f 2c 20 62 75 74 20  e SRT_Fifo, but 
1cad0 75 6e 69 71 75 65 20 72 65 73 75 6c 74 73 20 6f  unique results o
1cae0 6e 6c 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  nly */.#define S
1caf0 52 54 5f 51 75 65 75 65 20 20 20 20 20 20 20 20  RT_Queue        
1cb00 37 20 20 2f 2a 20 53 74 6f 72 65 20 72 65 73 75  7  /* Store resu
1cb10 6c 74 20 69 6e 20 61 6e 20 71 75 65 75 65 20 2a  lt in an queue *
1cb20 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 44 69  /.#define SRT_Di
1cb30 73 74 51 75 65 75 65 20 20 20 20 38 20 20 2f 2a  stQueue    8  /*
1cb40 20 4c 69 6b 65 20 53 52 54 5f 51 75 65 75 65 2c   Like SRT_Queue,
1cb50 20 62 75 74 20 75 6e 69 71 75 65 20 72 65 73 75   but unique resu
1cb60 6c 74 73 20 6f 6e 6c 79 20 2a 2f 0a 0a 2f 2a 20  lts only */../* 
1cb70 54 68 65 20 4f 52 44 45 52 20 42 59 20 63 6c 61  The ORDER BY cla
1cb80 75 73 65 20 69 73 20 69 67 6e 6f 72 65 64 20 66  use is ignored f
1cb90 6f 72 20 61 6c 6c 20 6f 66 20 74 68 65 20 61 62  or all of the ab
1cba0 6f 76 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49  ove */.#define I
1cbb0 67 6e 6f 72 61 62 6c 65 4f 72 64 65 72 62 79 28  gnorableOrderby(
1cbc0 58 29 20 28 28 58 2d 3e 65 44 65 73 74 29 3c 3d  X) ((X->eDest)<=
1cbd0 53 52 54 5f 44 69 73 74 51 75 65 75 65 29 0a 0a  SRT_DistQueue)..
1cbe0 23 64 65 66 69 6e 65 20 53 52 54 5f 4f 75 74 70  #define SRT_Outp
1cbf0 75 74 20 20 20 20 20 20 20 39 20 20 2f 2a 20 4f  ut       9  /* O
1cc00 75 74 70 75 74 20 65 61 63 68 20 72 6f 77 20 6f  utput each row o
1cc10 66 20 72 65 73 75 6c 74 20 2a 2f 0a 23 64 65 66  f result */.#def
1cc20 69 6e 65 20 53 52 54 5f 4d 65 6d 20 20 20 20 20  ine SRT_Mem     
1cc30 20 20 20 20 31 30 20 20 2f 2a 20 53 74 6f 72 65      10  /* Store
1cc40 20 72 65 73 75 6c 74 20 69 6e 20 61 20 6d 65 6d   result in a mem
1cc50 6f 72 79 20 63 65 6c 6c 20 2a 2f 0a 23 64 65 66  ory cell */.#def
1cc60 69 6e 65 20 53 52 54 5f 53 65 74 20 20 20 20 20  ine SRT_Set     
1cc70 20 20 20 20 31 31 20 20 2f 2a 20 53 74 6f 72 65      11  /* Store
1cc80 20 72 65 73 75 6c 74 73 20 61 73 20 6b 65 79 73   results as keys
1cc90 20 69 6e 20 61 6e 20 69 6e 64 65 78 20 2a 2f 0a   in an index */.
1cca0 23 64 65 66 69 6e 65 20 53 52 54 5f 45 70 68 65  #define SRT_Ephe
1ccb0 6d 54 61 62 20 20 20 20 31 32 20 20 2f 2a 20 43  mTab    12  /* C
1ccc0 72 65 61 74 65 20 74 72 61 6e 73 69 65 6e 74 20  reate transient 
1ccd0 74 61 62 20 61 6e 64 20 73 74 6f 72 65 20 6c 69  tab and store li
1cce0 6b 65 20 53 52 54 5f 54 61 62 6c 65 20 2a 2f 0a  ke SRT_Table */.
1ccf0 23 64 65 66 69 6e 65 20 53 52 54 5f 43 6f 72 6f  #define SRT_Coro
1cd00 75 74 69 6e 65 20 20 20 31 33 20 20 2f 2a 20 47  utine   13  /* G
1cd10 65 6e 65 72 61 74 65 20 61 20 73 69 6e 67 6c 65  enerate a single
1cd20 20 72 6f 77 20 6f 66 20 72 65 73 75 6c 74 20 2a   row of result *
1cd30 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 54 61  /.#define SRT_Ta
1cd40 62 6c 65 20 20 20 20 20 20 20 31 34 20 20 2f 2a  ble       14  /*
1cd50 20 53 74 6f 72 65 20 72 65 73 75 6c 74 20 61 73   Store result as
1cd60 20 64 61 74 61 20 77 69 74 68 20 61 6e 20 61 75   data with an au
1cd70 74 6f 6d 61 74 69 63 20 72 6f 77 69 64 20 2a 2f  tomatic rowid */
1cd80 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61  ../*.** An insta
1cd90 6e 63 65 20 6f 66 20 74 68 69 73 20 6f 62 6a 65  nce of this obje
1cda0 63 74 20 64 65 73 63 72 69 62 65 73 20 77 68 65  ct describes whe
1cdb0 72 65 20 74 6f 20 70 75 74 20 6f 66 20 74 68 65  re to put of the
1cdc0 20 72 65 73 75 6c 74 73 20 6f 66 0a 2a 2a 20 61   results of.** a
1cdd0 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e   SELECT statemen
1cde0 74 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53 65 6c  t..*/.struct Sel
1cdf0 65 63 74 44 65 73 74 20 7b 0a 20 20 75 38 20 65  ectDest {.  u8 e
1ce00 44 65 73 74 3b 20 20 20 20 20 20 20 20 20 20 20  Dest;           
1ce10 20 2f 2a 20 48 6f 77 20 74 6f 20 64 69 73 70 6f   /* How to dispo
1ce20 73 65 20 6f 66 20 74 68 65 20 72 65 73 75 6c 74  se of the result
1ce30 73 2e 20 20 4f 6e 20 6f 66 20 53 52 54 5f 2a 20  s.  On of SRT_* 
1ce40 61 62 6f 76 65 2e 20 2a 2f 0a 20 20 63 68 61 72  above. */.  char
1ce50 20 61 66 66 53 64 73 74 3b 20 20 20 20 20 20 20   affSdst;       
1ce60 20 2f 2a 20 41 66 66 69 6e 69 74 79 20 75 73 65   /* Affinity use
1ce70 64 20 77 68 65 6e 20 65 44 65 73 74 3d 3d 53 52  d when eDest==SR
1ce80 54 5f 53 65 74 20 2a 2f 0a 20 20 69 6e 74 20 69  T_Set */.  int i
1ce90 53 44 50 61 72 6d 3b 20 20 20 20 20 20 20 20 20  SDParm;         
1cea0 2f 2a 20 41 20 70 61 72 61 6d 65 74 65 72 20 75  /* A parameter u
1ceb0 73 65 64 20 62 79 20 74 68 65 20 65 44 65 73 74  sed by the eDest
1cec0 20 64 69 73 70 6f 73 61 6c 20 6d 65 74 68 6f 64   disposal method
1ced0 20 2a 2f 0a 20 20 69 6e 74 20 69 53 64 73 74 3b   */.  int iSdst;
1cee0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 42 61             /* Ba
1cef0 73 65 20 72 65 67 69 73 74 65 72 20 77 68 65 72  se register wher
1cf00 65 20 72 65 73 75 6c 74 73 20 61 72 65 20 77 72  e results are wr
1cf10 69 74 74 65 6e 20 2a 2f 0a 20 20 69 6e 74 20 6e  itten */.  int n
1cf20 53 64 73 74 3b 20 20 20 20 20 20 20 20 20 20 20  Sdst;           
1cf30 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 72 65 67  /* Number of reg
1cf40 69 73 74 65 72 73 20 61 6c 6c 6f 63 61 74 65 64  isters allocated
1cf50 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20 2a   */.  ExprList *
1cf60 70 4f 72 64 65 72 42 79 3b 20 20 2f 2a 20 4b 65  pOrderBy;  /* Ke
1cf70 79 20 63 6f 6c 75 6d 6e 73 20 66 6f 72 20 53 52  y columns for SR
1cf80 54 5f 51 75 65 75 65 20 61 6e 64 20 53 52 54 5f  T_Queue and SRT_
1cf90 44 69 73 74 51 75 65 75 65 20 2a 2f 0a 7d 3b 0a  DistQueue */.};.
1cfa0 0a 2f 2a 0a 2a 2a 20 44 75 72 69 6e 67 20 63 6f  ./*.** During co
1cfb0 64 65 20 67 65 6e 65 72 61 74 69 6f 6e 20 6f 66  de generation of
1cfc0 20 73 74 61 74 65 6d 65 6e 74 73 20 74 68 61 74   statements that
1cfd0 20 64 6f 20 69 6e 73 65 72 74 73 20 69 6e 74 6f   do inserts into
1cfe0 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 0a 2a   AUTOINCREMENT.*
1cff0 2a 20 74 61 62 6c 65 73 2c 20 74 68 65 20 66 6f  * tables, the fo
1d000 6c 6c 6f 77 69 6e 67 20 69 6e 66 6f 72 6d 61 74  llowing informat
1d010 69 6f 6e 20 69 73 20 61 74 74 61 63 68 65 64 20  ion is attached 
1d020 74 6f 20 74 68 65 20 54 61 62 6c 65 2e 75 2e 61  to the Table.u.a
1d030 75 74 6f 49 6e 63 2e 70 0a 2a 2a 20 70 6f 69 6e  utoInc.p.** poin
1d040 74 65 72 20 6f 66 20 65 61 63 68 20 61 75 74 6f  ter of each auto
1d050 69 6e 63 72 65 6d 65 6e 74 20 74 61 62 6c 65 20  increment table 
1d060 74 6f 20 72 65 63 6f 72 64 20 73 6f 6d 65 20 73  to record some s
1d070 69 64 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  ide information 
1d080 74 68 61 74 0a 2a 2a 20 74 68 65 20 63 6f 64 65  that.** the code
1d090 20 67 65 6e 65 72 61 74 6f 72 20 6e 65 65 64 73   generator needs
1d0a0 2e 20 20 57 65 20 68 61 76 65 20 74 6f 20 6b 65  .  We have to ke
1d0b0 65 70 20 70 65 72 2d 74 61 62 6c 65 20 61 75 74  ep per-table aut
1d0c0 6f 69 6e 63 72 65 6d 65 6e 74 0a 2a 2a 20 69 6e  oincrement.** in
1d0d0 66 6f 72 6d 61 74 69 6f 6e 20 69 6e 20 63 61 73  formation in cas
1d0e0 65 20 69 6e 73 65 72 74 73 20 61 72 65 20 64 6f  e inserts are do
1d0f0 6e 65 20 77 69 74 68 69 6e 20 74 72 69 67 67 65  ne within trigge
1d100 72 73 2e 20 20 54 72 69 67 67 65 72 73 20 64 6f  rs.  Triggers do
1d110 20 6e 6f 74 0a 2a 2a 20 6e 6f 72 6d 61 6c 6c 79   not.** normally
1d120 20 63 6f 6f 72 64 69 6e 61 74 65 20 74 68 65 69   coordinate thei
1d130 72 20 61 63 74 69 76 69 74 69 65 73 2c 20 62 75  r activities, bu
1d140 74 20 77 65 20 64 6f 20 6e 65 65 64 20 74 6f 20  t we do need to 
1d150 63 6f 6f 72 64 69 6e 61 74 65 20 74 68 65 0a 2a  coordinate the.*
1d160 2a 20 6c 6f 61 64 69 6e 67 20 61 6e 64 20 73 61  * loading and sa
1d170 76 69 6e 67 20 6f 66 20 61 75 74 6f 69 6e 63 72  ving of autoincr
1d180 65 6d 65 6e 74 20 69 6e 66 6f 72 6d 61 74 69 6f  ement informatio
1d190 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 41 75 74  n..*/.struct Aut
1d1a0 6f 69 6e 63 49 6e 66 6f 20 7b 0a 20 20 41 75 74  oincInfo {.  Aut
1d1b0 6f 69 6e 63 49 6e 66 6f 20 2a 70 4e 65 78 74 3b  oincInfo *pNext;
1d1c0 20 20 20 2f 2a 20 4e 65 78 74 20 69 6e 66 6f 20     /* Next info 
1d1d0 62 6c 6f 63 6b 20 69 6e 20 61 20 6c 69 73 74 20  block in a list 
1d1e0 6f 66 20 74 68 65 6d 20 61 6c 6c 20 2a 2f 0a 20  of them all */. 
1d1f0 20 54 61 62 6c 65 20 2a 70 54 61 62 3b 20 20 20   Table *pTab;   
1d200 20 20 20 20 20 20 20 2f 2a 20 54 61 62 6c 65 20         /* Table 
1d210 74 68 69 73 20 69 6e 66 6f 20 62 6c 6f 63 6b 20  this info block 
1d220 72 65 66 65 72 73 20 74 6f 20 2a 2f 0a 20 20 69  refers to */.  i
1d230 6e 74 20 69 44 62 3b 20 20 20 20 20 20 20 20 20  nt iDb;         
1d240 20 20 20 20 20 2f 2a 20 49 6e 64 65 78 20 69 6e       /* Index in
1d250 20 73 71 6c 69 74 65 33 2e 61 44 62 5b 5d 20 6f   sqlite3.aDb[] o
1d260 66 20 64 61 74 61 62 61 73 65 20 68 6f 6c 64 69  f database holdi
1d270 6e 67 20 70 54 61 62 20 2a 2f 0a 20 20 69 6e 74  ng pTab */.  int
1d280 20 72 65 67 43 74 72 3b 20 20 20 20 20 20 20 20   regCtr;        
1d290 20 20 20 2f 2a 20 4d 65 6d 6f 72 79 20 72 65 67     /* Memory reg
1d2a0 69 73 74 65 72 20 68 6f 6c 64 69 6e 67 20 74 68  ister holding th
1d2b0 65 20 72 6f 77 69 64 20 63 6f 75 6e 74 65 72 20  e rowid counter 
1d2c0 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 53 69 7a  */.};../*.** Siz
1d2d0 65 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20  e of the column 
1d2e0 63 61 63 68 65 0a 2a 2f 0a 23 69 66 6e 64 65 66  cache.*/.#ifndef
1d2f0 20 53 51 4c 49 54 45 5f 4e 5f 43 4f 4c 43 41 43   SQLITE_N_COLCAC
1d300 48 45 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  HE.# define SQLI
1d310 54 45 5f 4e 5f 43 4f 4c 43 41 43 48 45 20 31 30  TE_N_COLCACHE 10
1d320 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41  .#endif../*.** A
1d330 74 20 6c 65 61 73 74 20 6f 6e 65 20 69 6e 73 74  t least one inst
1d340 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c  ance of the foll
1d350 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 20  owing structure 
1d360 69 73 20 63 72 65 61 74 65 64 20 66 6f 72 20 65  is created for e
1d370 61 63 68 0a 2a 2a 20 74 72 69 67 67 65 72 20 74  ach.** trigger t
1d380 68 61 74 20 6d 61 79 20 62 65 20 66 69 72 65 64  hat may be fired
1d390 20 77 68 69 6c 65 20 70 61 72 73 69 6e 67 20 61   while parsing a
1d3a0 6e 20 49 4e 53 45 52 54 2c 20 55 50 44 41 54 45  n INSERT, UPDATE
1d3b0 20 6f 72 20 44 45 4c 45 54 45 0a 2a 2a 20 73 74   or DELETE.** st
1d3c0 61 74 65 6d 65 6e 74 2e 20 41 6c 6c 20 73 75 63  atement. All suc
1d3d0 68 20 6f 62 6a 65 63 74 73 20 61 72 65 20 73 74  h objects are st
1d3e0 6f 72 65 64 20 69 6e 20 74 68 65 20 6c 69 6e 6b  ored in the link
1d3f0 65 64 20 6c 69 73 74 20 68 65 61 64 65 64 20 61  ed list headed a
1d400 74 0a 2a 2a 20 50 61 72 73 65 2e 70 54 72 69 67  t.** Parse.pTrig
1d410 67 65 72 50 72 67 20 61 6e 64 20 64 65 6c 65 74  gerPrg and delet
1d420 65 64 20 6f 6e 63 65 20 73 74 61 74 65 6d 65 6e  ed once statemen
1d430 74 20 63 6f 6d 70 69 6c 61 74 69 6f 6e 20 68 61  t compilation ha
1d440 73 20 62 65 65 6e 0a 2a 2a 20 63 6f 6d 70 6c 65  s been.** comple
1d450 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 41 20 56 64 62  ted..**.** A Vdb
1d460 65 20 73 75 62 2d 70 72 6f 67 72 61 6d 20 74 68  e sub-program th
1d470 61 74 20 69 6d 70 6c 65 6d 65 6e 74 73 20 74 68  at implements th
1d480 65 20 62 6f 64 79 20 61 6e 64 20 57 48 45 4e 20  e body and WHEN 
1d490 63 6c 61 75 73 65 20 6f 66 20 74 72 69 67 67 65  clause of trigge
1d4a0 72 0a 2a 2a 20 54 72 69 67 67 65 72 50 72 67 2e  r.** TriggerPrg.
1d4b0 70 54 72 69 67 67 65 72 2c 20 61 73 73 75 6d 69  pTrigger, assumi
1d4c0 6e 67 20 61 20 64 65 66 61 75 6c 74 20 4f 4e 20  ng a default ON 
1d4d0 43 4f 4e 46 4c 49 43 54 20 63 6c 61 75 73 65 20  CONFLICT clause 
1d4e0 6f 66 0a 2a 2a 20 54 72 69 67 67 65 72 50 72 67  of.** TriggerPrg
1d4f0 2e 6f 72 63 6f 6e 66 2c 20 69 73 20 73 74 6f 72  .orconf, is stor
1d500 65 64 20 69 6e 20 74 68 65 20 54 72 69 67 67 65  ed in the Trigge
1d510 72 50 72 67 2e 70 50 72 6f 67 72 61 6d 20 76 61  rPrg.pProgram va
1d520 72 69 61 62 6c 65 2e 0a 2a 2a 20 54 68 65 20 50  riable..** The P
1d530 61 72 73 65 2e 70 54 72 69 67 67 65 72 50 72 67  arse.pTriggerPrg
1d540 20 6c 69 73 74 20 6e 65 76 65 72 20 63 6f 6e 74   list never cont
1d550 61 69 6e 73 20 74 77 6f 20 65 6e 74 72 69 65 73  ains two entries
1d560 20 77 69 74 68 20 74 68 65 20 73 61 6d 65 0a 2a   with the same.*
1d570 2a 20 76 61 6c 75 65 73 20 66 6f 72 20 62 6f 74  * values for bot
1d580 68 20 70 54 72 69 67 67 65 72 20 61 6e 64 20 6f  h pTrigger and o
1d590 72 63 6f 6e 66 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  rconf..**.** The
1d5a0 20 54 72 69 67 67 65 72 50 72 67 2e 61 43 6f 6c   TriggerPrg.aCol
1d5b0 6d 61 73 6b 5b 30 5d 20 76 61 72 69 61 62 6c 65  mask[0] variable
1d5c0 20 69 73 20 73 65 74 20 74 6f 20 61 20 6d 61 73   is set to a mas
1d5d0 6b 20 6f 66 20 6f 6c 64 2e 2a 20 63 6f 6c 75 6d  k of old.* colum
1d5e0 6e 73 0a 2a 2a 20 61 63 63 65 73 73 65 64 20 28  ns.** accessed (
1d5f0 6f 72 20 73 65 74 20 74 6f 20 30 20 66 6f 72 20  or set to 0 for 
1d600 74 72 69 67 67 65 72 73 20 66 69 72 65 64 20 61  triggers fired a
1d610 73 20 61 20 72 65 73 75 6c 74 20 6f 66 20 49 4e  s a result of IN
1d620 53 45 52 54 0a 2a 2a 20 73 74 61 74 65 6d 65 6e  SERT.** statemen
1d630 74 73 29 2e 20 53 69 6d 69 6c 61 72 6c 79 2c 20  ts). Similarly, 
1d640 74 68 65 20 54 72 69 67 67 65 72 50 72 67 2e 61  the TriggerPrg.a
1d650 43 6f 6c 6d 61 73 6b 5b 31 5d 20 76 61 72 69 61  Colmask[1] varia
1d660 62 6c 65 20 69 73 20 73 65 74 20 74 6f 0a 2a 2a  ble is set to.**
1d670 20 61 20 6d 61 73 6b 20 6f 66 20 6e 65 77 2e 2a   a mask of new.*
1d680 20 63 6f 6c 75 6d 6e 73 20 75 73 65 64 20 62 79   columns used by
1d690 20 74 68 65 20 70 72 6f 67 72 61 6d 2e 0a 2a 2f   the program..*/
1d6a0 0a 73 74 72 75 63 74 20 54 72 69 67 67 65 72 50  .struct TriggerP
1d6b0 72 67 20 7b 0a 20 20 54 72 69 67 67 65 72 20 2a  rg {.  Trigger *
1d6c0 70 54 72 69 67 67 65 72 3b 20 20 20 20 20 20 2f  pTrigger;      /
1d6d0 2a 20 54 72 69 67 67 65 72 20 74 68 69 73 20 70  * Trigger this p
1d6e0 72 6f 67 72 61 6d 20 77 61 73 20 63 6f 64 65 64  rogram was coded
1d6f0 20 66 72 6f 6d 20 2a 2f 0a 20 20 54 72 69 67 67   from */.  Trigg
1d700 65 72 50 72 67 20 2a 70 4e 65 78 74 3b 20 20 20  erPrg *pNext;   
1d710 20 20 20 2f 2a 20 4e 65 78 74 20 65 6e 74 72 79     /* Next entry
1d720 20 69 6e 20 50 61 72 73 65 2e 70 54 72 69 67 67   in Parse.pTrigg
1d730 65 72 50 72 67 20 6c 69 73 74 20 2a 2f 0a 20 20  erPrg list */.  
1d740 53 75 62 50 72 6f 67 72 61 6d 20 2a 70 50 72 6f  SubProgram *pPro
1d750 67 72 61 6d 3b 20 20 20 2f 2a 20 50 72 6f 67 72  gram;   /* Progr
1d760 61 6d 20 69 6d 70 6c 65 6d 65 6e 74 69 6e 67 20  am implementing 
1d770 70 54 72 69 67 67 65 72 2f 6f 72 63 6f 6e 66 20  pTrigger/orconf 
1d780 2a 2f 0a 20 20 69 6e 74 20 6f 72 63 6f 6e 66 3b  */.  int orconf;
1d790 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1d7a0 44 65 66 61 75 6c 74 20 4f 4e 20 43 4f 4e 46 4c  Default ON CONFL
1d7b0 49 43 54 20 70 6f 6c 69 63 79 20 2a 2f 0a 20 20  ICT policy */.  
1d7c0 75 33 32 20 61 43 6f 6c 6d 61 73 6b 5b 32 5d 3b  u32 aColmask[2];
1d7d0 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 73 6b 73          /* Masks
1d7e0 20 6f 66 20 6f 6c 64 2e 2a 2c 20 6e 65 77 2e 2a   of old.*, new.*
1d7f0 20 63 6f 6c 75 6d 6e 73 20 61 63 63 65 73 73 65   columns accesse
1d800 64 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54  d */.};../*.** T
1d810 68 65 20 79 44 62 4d 61 73 6b 20 64 61 74 61 74  he yDbMask datat
1d820 79 70 65 20 66 6f 72 20 74 68 65 20 62 69 74 6d  ype for the bitm
1d830 61 73 6b 20 6f 66 20 61 6c 6c 20 61 74 74 61 63  ask of all attac
1d840 68 65 64 20 64 61 74 61 62 61 73 65 73 2e 0a 2a  hed databases..*
1d850 2f 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d 41 58  /.#if SQLITE_MAX
1d860 5f 41 54 54 41 43 48 45 44 3e 33 30 0a 20 20 74  _ATTACHED>30.  t
1d870 79 70 65 64 65 66 20 75 6e 73 69 67 6e 65 64 20  ypedef unsigned 
1d880 63 68 61 72 20 79 44 62 4d 61 73 6b 5b 28 53 51  char yDbMask[(SQ
1d890 4c 49 54 45 5f 4d 41 58 5f 41 54 54 41 43 48 45  LITE_MAX_ATTACHE
1d8a0 44 2b 39 29 2f 38 5d 3b 0a 23 20 64 65 66 69 6e  D+9)/8];.# defin
1d8b0 65 20 44 62 4d 61 73 6b 54 65 73 74 28 4d 2c 49  e DbMaskTest(M,I
1d8c0 29 20 20 20 20 28 28 28 4d 29 5b 28 49 29 2f 38  )    (((M)[(I)/8
1d8d0 5d 26 28 31 3c 3c 28 28 49 29 26 37 29 29 29 21  ]&(1<<((I)&7)))!
1d8e0 3d 30 29 0a 23 20 64 65 66 69 6e 65 20 44 62 4d  =0).# define DbM
1d8f0 61 73 6b 5a 65 72 6f 28 4d 29 20 20 20 20 20 20  askZero(M)      
1d900 6d 65 6d 73 65 74 28 28 4d 29 2c 30 2c 73 69 7a  memset((M),0,siz
1d910 65 6f 66 28 4d 29 29 0a 23 20 64 65 66 69 6e 65  eof(M)).# define
1d920 20 44 62 4d 61 73 6b 53 65 74 28 4d 2c 49 29 20   DbMaskSet(M,I) 
1d930 20 20 20 20 28 4d 29 5b 28 49 29 2f 38 5d 7c 3d      (M)[(I)/8]|=
1d940 28 31 3c 3c 28 28 49 29 26 37 29 29 0a 23 20 64  (1<<((I)&7)).# d
1d950 65 66 69 6e 65 20 44 62 4d 61 73 6b 41 6c 6c 5a  efine DbMaskAllZ
1d960 65 72 6f 28 4d 29 20 20 20 73 71 6c 69 74 65 33  ero(M)   sqlite3
1d970 44 62 4d 61 73 6b 41 6c 6c 5a 65 72 6f 28 4d 29  DbMaskAllZero(M)
1d980 0a 23 20 64 65 66 69 6e 65 20 44 62 4d 61 73 6b  .# define DbMask
1d990 4e 6f 6e 5a 65 72 6f 28 4d 29 20 20 20 28 73 71  NonZero(M)   (sq
1d9a0 6c 69 74 65 33 44 62 4d 61 73 6b 41 6c 6c 5a 65  lite3DbMaskAllZe
1d9b0 72 6f 28 4d 29 3d 3d 30 29 0a 23 65 6c 73 65 0a  ro(M)==0).#else.
1d9c0 20 20 74 79 70 65 64 65 66 20 75 6e 73 69 67 6e    typedef unsign
1d9d0 65 64 20 69 6e 74 20 79 44 62 4d 61 73 6b 3b 0a  ed int yDbMask;.
1d9e0 23 20 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 54  # define DbMaskT
1d9f0 65 73 74 28 4d 2c 49 29 20 20 20 20 28 28 28 4d  est(M,I)    (((M
1da00 29 26 28 28 28 79 44 62 4d 61 73 6b 29 31 29 3c  )&(((yDbMask)1)<
1da10 3c 28 49 29 29 29 21 3d 30 29 0a 23 20 64 65 66  <(I)))!=0).# def
1da20 69 6e 65 20 44 62 4d 61 73 6b 5a 65 72 6f 28 4d  ine DbMaskZero(M
1da30 29 20 20 20 20 20 20 28 4d 29 3d 30 0a 23 20 64  )      (M)=0.# d
1da40 65 66 69 6e 65 20 44 62 4d 61 73 6b 53 65 74 28  efine DbMaskSet(
1da50 4d 2c 49 29 20 20 20 20 20 28 4d 29 7c 3d 28 28  M,I)     (M)|=((
1da60 28 79 44 62 4d 61 73 6b 29 31 29 3c 3c 28 49 29  (yDbMask)1)<<(I)
1da70 29 0a 23 20 64 65 66 69 6e 65 20 44 62 4d 61 73  ).# define DbMas
1da80 6b 41 6c 6c 5a 65 72 6f 28 4d 29 20 20 20 28 4d  kAllZero(M)   (M
1da90 29 3d 3d 30 0a 23 20 64 65 66 69 6e 65 20 44 62  )==0.# define Db
1daa0 4d 61 73 6b 4e 6f 6e 5a 65 72 6f 28 4d 29 20 20  MaskNonZero(M)  
1dab0 20 28 4d 29 21 3d 30 0a 23 65 6e 64 69 66 0a 0a   (M)!=0.#endif..
1dac0 2f 2a 0a 2a 2a 20 41 6e 20 53 51 4c 20 70 61 72  /*.** An SQL par
1dad0 73 65 72 20 63 6f 6e 74 65 78 74 2e 20 20 41 20  ser context.  A 
1dae0 63 6f 70 79 20 6f 66 20 74 68 69 73 20 73 74 72  copy of this str
1daf0 75 63 74 75 72 65 20 69 73 20 70 61 73 73 65 64  ucture is passed
1db00 20 74 68 72 6f 75 67 68 0a 2a 2a 20 74 68 65 20   through.** the 
1db10 70 61 72 73 65 72 20 61 6e 64 20 64 6f 77 6e 20  parser and down 
1db20 69 6e 74 6f 20 61 6c 6c 20 74 68 65 20 70 61 72  into all the par
1db30 73 65 72 20 61 63 74 69 6f 6e 20 72 6f 75 74 69  ser action routi
1db40 6e 65 20 69 6e 20 6f 72 64 65 72 20 74 6f 0a 2a  ne in order to.*
1db50 2a 20 63 61 72 72 79 20 61 72 6f 75 6e 64 20 69  * carry around i
1db60 6e 66 6f 72 6d 61 74 69 6f 6e 20 74 68 61 74 20  nformation that 
1db70 69 73 20 67 6c 6f 62 61 6c 20 74 6f 20 74 68 65  is global to the
1db80 20 65 6e 74 69 72 65 20 70 61 72 73 65 2e 0a 2a   entire parse..*
1db90 2a 0a 2a 2a 20 54 68 65 20 73 74 72 75 63 74 75  *.** The structu
1dba0 72 65 20 69 73 20 64 69 76 69 64 65 64 20 69 6e  re is divided in
1dbb0 74 6f 20 74 77 6f 20 70 61 72 74 73 2e 20 20 57  to two parts.  W
1dbc0 68 65 6e 20 74 68 65 20 70 61 72 73 65 72 20 61  hen the parser a
1dbd0 6e 64 20 63 6f 64 65 0a 2a 2a 20 67 65 6e 65 72  nd code.** gener
1dbe0 61 74 65 20 63 61 6c 6c 20 74 68 65 6d 73 65 6c  ate call themsel
1dbf0 76 65 73 20 72 65 63 75 72 73 69 76 65 6c 79 2c  ves recursively,
1dc00 20 74 68 65 20 66 69 72 73 74 20 70 61 72 74 20   the first part 
1dc10 6f 66 20 74 68 65 20 73 74 72 75 63 74 75 72 65  of the structure
1dc20 0a 2a 2a 20 69 73 20 63 6f 6e 73 74 61 6e 74 20  .** is constant 
1dc30 62 75 74 20 74 68 65 20 73 65 63 6f 6e 64 20 70  but the second p
1dc40 61 72 74 20 69 73 20 72 65 73 65 74 20 61 74 20  art is reset at 
1dc50 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 20 61 6e  the beginning an
1dc60 64 20 65 6e 64 20 6f 66 0a 2a 2a 20 65 61 63 68  d end of.** each
1dc70 20 72 65 63 75 72 73 69 6f 6e 2e 0a 2a 2a 0a 2a   recursion..**.*
1dc80 2a 20 54 68 65 20 6e 54 61 62 6c 65 4c 6f 63 6b  * The nTableLock
1dc90 20 61 6e 64 20 61 54 61 62 6c 65 4c 6f 63 6b 20   and aTableLock 
1dca0 76 61 72 69 61 62 6c 65 73 20 61 72 65 20 6f 6e  variables are on
1dcb0 6c 79 20 75 73 65 64 20 69 66 20 74 68 65 20 73  ly used if the s
1dcc0 68 61 72 65 64 2d 63 61 63 68 65 0a 2a 2a 20 66  hared-cache.** f
1dcd0 65 61 74 75 72 65 20 69 73 20 65 6e 61 62 6c 65  eature is enable
1dce0 64 20 28 69 66 20 73 71 6c 69 74 65 33 54 73 64  d (if sqlite3Tsd
1dcf0 28 29 2d 3e 75 73 65 53 68 61 72 65 64 44 61 74  ()->useSharedDat
1dd00 61 20 69 73 20 74 72 75 65 29 2e 20 54 68 65 79  a is true). They
1dd10 20 61 72 65 0a 2a 2a 20 75 73 65 64 20 74 6f 20   are.** used to 
1dd20 73 74 6f 72 65 20 74 68 65 20 73 65 74 20 6f 66  store the set of
1dd30 20 74 61 62 6c 65 2d 6c 6f 63 6b 73 20 72 65 71   table-locks req
1dd40 75 69 72 65 64 20 62 79 20 74 68 65 20 73 74 61  uired by the sta
1dd50 74 65 6d 65 6e 74 20 62 65 69 6e 67 0a 2a 2a 20  tement being.** 
1dd60 63 6f 6d 70 69 6c 65 64 2e 20 46 75 6e 63 74 69  compiled. Functi
1dd70 6f 6e 20 73 71 6c 69 74 65 33 54 61 62 6c 65 4c  on sqlite3TableL
1dd80 6f 63 6b 28 29 20 69 73 20 75 73 65 64 20 74 6f  ock() is used to
1dd90 20 61 64 64 20 65 6e 74 72 69 65 73 20 74 6f 20   add entries to 
1dda0 74 68 65 0a 2a 2a 20 6c 69 73 74 2e 0a 2a 2f 0a  the.** list..*/.
1ddb0 73 74 72 75 63 74 20 50 61 72 73 65 20 7b 0a 20  struct Parse {. 
1ddc0 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 20 20 20   sqlite3 *db;   
1ddd0 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6d 61 69        /* The mai
1dde0 6e 20 64 61 74 61 62 61 73 65 20 73 74 72 75 63  n database struc
1ddf0 74 75 72 65 20 2a 2f 0a 20 20 63 68 61 72 20 2a  ture */.  char *
1de00 7a 45 72 72 4d 73 67 3b 20 20 20 20 20 20 20 2f  zErrMsg;       /
1de10 2a 20 41 6e 20 65 72 72 6f 72 20 6d 65 73 73 61  * An error messa
1de20 67 65 20 2a 2f 0a 20 20 56 64 62 65 20 2a 70 56  ge */.  Vdbe *pV
1de30 64 62 65 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  dbe;         /* 
1de40 41 6e 20 65 6e 67 69 6e 65 20 66 6f 72 20 65 78  An engine for ex
1de50 65 63 75 74 69 6e 67 20 64 61 74 61 62 61 73 65  ecuting database
1de60 20 62 79 74 65 63 6f 64 65 20 2a 2f 0a 20 20 69   bytecode */.  i
1de70 6e 74 20 72 63 3b 20 20 20 20 20 20 20 20 20 20  nt rc;          
1de80 20 20 20 20 2f 2a 20 52 65 74 75 72 6e 20 63 6f      /* Return co
1de90 64 65 20 66 72 6f 6d 20 65 78 65 63 75 74 69 6f  de from executio
1dea0 6e 20 2a 2f 0a 20 20 75 38 20 63 6f 6c 4e 61 6d  n */.  u8 colNam
1deb0 65 73 53 65 74 3b 20 20 20 20 20 20 2f 2a 20 54  esSet;      /* T
1dec0 52 55 45 20 61 66 74 65 72 20 4f 50 5f 43 6f 6c  RUE after OP_Col
1ded0 75 6d 6e 4e 61 6d 65 20 68 61 73 20 62 65 65 6e  umnName has been
1dee0 20 69 73 73 75 65 64 20 74 6f 20 70 56 64 62 65   issued to pVdbe
1def0 20 2a 2f 0a 20 20 75 38 20 63 68 65 63 6b 53 63   */.  u8 checkSc
1df00 68 65 6d 61 3b 20 20 20 20 20 20 2f 2a 20 43 61  hema;      /* Ca
1df10 75 73 65 73 20 73 63 68 65 6d 61 20 63 6f 6f 6b  uses schema cook
1df20 69 65 20 63 68 65 63 6b 20 61 66 74 65 72 20 61  ie check after a
1df30 6e 20 65 72 72 6f 72 20 2a 2f 0a 20 20 75 38 20  n error */.  u8 
1df40 6e 65 73 74 65 64 3b 20 20 20 20 20 20 20 20 20  nested;         
1df50 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6e    /* Number of n
1df60 65 73 74 65 64 20 63 61 6c 6c 73 20 74 6f 20 74  ested calls to t
1df70 68 65 20 70 61 72 73 65 72 2f 63 6f 64 65 20 67  he parser/code g
1df80 65 6e 65 72 61 74 6f 72 20 2a 2f 0a 20 20 75 38  enerator */.  u8
1df90 20 6e 54 65 6d 70 52 65 67 3b 20 20 20 20 20 20   nTempReg;      
1dfa0 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
1dfb0 74 65 6d 70 6f 72 61 72 79 20 72 65 67 69 73 74  temporary regist
1dfc0 65 72 73 20 69 6e 20 61 54 65 6d 70 52 65 67 5b  ers in aTempReg[
1dfd0 5d 20 2a 2f 0a 20 20 75 38 20 69 73 4d 75 6c 74  ] */.  u8 isMult
1dfe0 69 57 72 69 74 65 3b 20 20 20 20 20 2f 2a 20 54  iWrite;     /* T
1dff0 72 75 65 20 69 66 20 73 74 61 74 65 6d 65 6e 74  rue if statement
1e000 20 6d 61 79 20 6d 6f 64 69 66 79 2f 69 6e 73 65   may modify/inse
1e010 72 74 20 6d 75 6c 74 69 70 6c 65 20 72 6f 77 73  rt multiple rows
1e020 20 2a 2f 0a 20 20 75 38 20 6d 61 79 41 62 6f 72   */.  u8 mayAbor
1e030 74 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72  t;         /* Tr
1e040 75 65 20 69 66 20 73 74 61 74 65 6d 65 6e 74 20  ue if statement 
1e050 6d 61 79 20 74 68 72 6f 77 20 61 6e 20 41 42 4f  may throw an ABO
1e060 52 54 20 65 78 63 65 70 74 69 6f 6e 20 2a 2f 0a  RT exception */.
1e070 20 20 75 38 20 68 61 73 43 6f 6d 70 6f 75 6e 64    u8 hasCompound
1e080 3b 20 20 20 20 20 20 2f 2a 20 4e 65 65 64 20 74  ;      /* Need t
1e090 6f 20 69 6e 76 6f 6b 65 20 63 6f 6e 76 65 72 74  o invoke convert
1e0a0 43 6f 6d 70 6f 75 6e 64 53 65 6c 65 63 74 54 6f  CompoundSelectTo
1e0b0 53 75 62 71 75 65 72 79 28 29 20 2a 2f 0a 20 20  Subquery() */.  
1e0c0 75 38 20 6f 6b 43 6f 6e 73 74 46 61 63 74 6f 72  u8 okConstFactor
1e0d0 3b 20 20 20 20 2f 2a 20 4f 4b 20 74 6f 20 66 61  ;    /* OK to fa
1e0e0 63 74 6f 72 20 6f 75 74 20 63 6f 6e 73 74 61 6e  ctor out constan
1e0f0 74 73 20 2a 2f 0a 20 20 75 38 20 64 69 73 61 62  ts */.  u8 disab
1e100 6c 65 4c 6f 6f 6b 61 73 69 64 65 3b 20 2f 2a 20  leLookaside; /* 
1e110 4e 75 6d 62 65 72 20 6f 66 20 74 69 6d 65 73 20  Number of times 
1e120 6c 6f 6f 6b 61 73 69 64 65 20 68 61 73 20 62 65  lookaside has be
1e130 65 6e 20 64 69 73 61 62 6c 65 64 20 2a 2f 0a 20  en disabled */. 
1e140 20 75 38 20 6e 43 6f 6c 43 61 63 68 65 3b 20 20   u8 nColCache;  
1e150 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
1e160 6f 66 20 65 6e 74 72 69 65 73 20 69 6e 20 61 43  of entries in aC
1e170 6f 6c 43 61 63 68 65 5b 5d 20 2a 2f 0a 20 20 69  olCache[] */.  i
1e180 6e 74 20 61 54 65 6d 70 52 65 67 5b 38 5d 3b 20  nt aTempReg[8]; 
1e190 20 20 20 20 2f 2a 20 48 6f 6c 64 69 6e 67 20 61      /* Holding a
1e1a0 72 65 61 20 66 6f 72 20 74 65 6d 70 6f 72 61 72  rea for temporar
1e1b0 79 20 72 65 67 69 73 74 65 72 73 20 2a 2f 0a 20  y registers */. 
1e1c0 20 69 6e 74 20 6e 52 61 6e 67 65 52 65 67 3b 20   int nRangeReg; 
1e1d0 20 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66        /* Size of
1e1e0 20 74 68 65 20 74 65 6d 70 6f 72 61 72 79 20 72   the temporary r
1e1f0 65 67 69 73 74 65 72 20 62 6c 6f 63 6b 20 2a 2f  egister block */
1e200 0a 20 20 69 6e 74 20 69 52 61 6e 67 65 52 65 67  .  int iRangeReg
1e210 3b 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74  ;       /* First
1e220 20 72 65 67 69 73 74 65 72 20 69 6e 20 74 65 6d   register in tem
1e230 70 6f 72 61 72 79 20 72 65 67 69 73 74 65 72 20  porary register 
1e240 62 6c 6f 63 6b 20 2a 2f 0a 20 20 69 6e 74 20 6e  block */.  int n
1e250 45 72 72 3b 20 20 20 20 20 20 20 20 20 20 20 20  Err;            
1e260 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 72 72  /* Number of err
1e270 6f 72 73 20 73 65 65 6e 20 2a 2f 0a 20 20 69 6e  ors seen */.  in
1e280 74 20 6e 54 61 62 3b 20 20 20 20 20 20 20 20 20  t nTab;         
1e290 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
1e2a0 70 72 65 76 69 6f 75 73 6c 79 20 61 6c 6c 6f 63  previously alloc
1e2b0 61 74 65 64 20 56 44 42 45 20 63 75 72 73 6f 72  ated VDBE cursor
1e2c0 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 4d 65 6d 3b  s */.  int nMem;
1e2d0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
1e2e0 75 6d 62 65 72 20 6f 66 20 6d 65 6d 6f 72 79 20  umber of memory 
1e2f0 63 65 6c 6c 73 20 75 73 65 64 20 73 6f 20 66 61  cells used so fa
1e300 72 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 65 74 3b  r */.  int nSet;
1e310 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
1e320 75 6d 62 65 72 20 6f 66 20 73 65 74 73 20 75 73  umber of sets us
1e330 65 64 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20 69  ed so far */.  i
1e340 6e 74 20 6e 4f 6e 63 65 3b 20 20 20 20 20 20 20  nt nOnce;       
1e350 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
1e360 20 4f 50 5f 4f 6e 63 65 20 69 6e 73 74 72 75 63   OP_Once instruc
1e370 74 69 6f 6e 73 20 73 6f 20 66 61 72 20 2a 2f 0a  tions so far */.
1e380 20 20 69 6e 74 20 6e 4f 70 41 6c 6c 6f 63 3b 20    int nOpAlloc; 
1e390 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
1e3a0 20 6f 66 20 73 6c 6f 74 73 20 61 6c 6c 6f 63 61   of slots alloca
1e3b0 74 65 64 20 66 6f 72 20 56 64 62 65 2e 61 4f 70  ted for Vdbe.aOp
1e3c0 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 73 7a 4f 70  [] */.  int szOp
1e3d0 41 6c 6c 6f 63 3b 20 20 20 20 20 20 20 2f 2a 20  Alloc;       /* 
1e3e0 42 79 74 65 73 20 6f 66 20 6d 65 6d 6f 72 79 20  Bytes of memory 
1e3f0 73 70 61 63 65 20 61 6c 6c 6f 63 61 74 65 64 20  space allocated 
1e400 66 6f 72 20 56 64 62 65 2e 61 4f 70 5b 5d 20 2a  for Vdbe.aOp[] *
1e410 2f 0a 20 20 69 6e 74 20 69 46 69 78 65 64 4f 70  /.  int iFixedOp
1e420 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 76 65  ;        /* Neve
1e430 72 20 62 61 63 6b 20 6f 75 74 20 6f 70 63 6f 64  r back out opcod
1e440 65 73 20 69 46 69 78 65 64 4f 70 2d 31 20 6f 72  es iFixedOp-1 or
1e450 20 65 61 72 6c 69 65 72 20 2a 2f 0a 20 20 69 6e   earlier */.  in
1e460 74 20 63 6b 42 61 73 65 3b 20 20 20 20 20 20 20  t ckBase;       
1e470 20 20 20 2f 2a 20 42 61 73 65 20 72 65 67 69 73     /* Base regis
1e480 74 65 72 20 6f 66 20 64 61 74 61 20 64 75 72 69  ter of data duri
1e490 6e 67 20 63 68 65 63 6b 20 63 6f 6e 73 74 72 61  ng check constra
1e4a0 69 6e 74 73 20 2a 2f 0a 20 20 69 6e 74 20 69 53  ints */.  int iS
1e4b0 65 6c 66 54 61 62 3b 20 20 20 20 20 20 20 20 2f  elfTab;        /
1e4c0 2a 20 54 61 62 6c 65 20 6f 66 20 61 6e 20 69 6e  * Table of an in
1e4d0 64 65 78 20 77 68 6f 73 65 20 65 78 70 72 73 20  dex whose exprs 
1e4e0 61 72 65 20 62 65 69 6e 67 20 63 6f 64 65 64 20  are being coded 
1e4f0 2a 2f 0a 20 20 69 6e 74 20 69 43 61 63 68 65 4c  */.  int iCacheL
1e500 65 76 65 6c 3b 20 20 20 20 20 2f 2a 20 43 6f 6c  evel;     /* Col
1e510 43 61 63 68 65 20 76 61 6c 69 64 20 77 68 65 6e  Cache valid when
1e520 20 61 43 6f 6c 43 61 63 68 65 5b 5d 2e 69 4c 65   aColCache[].iLe
1e530 76 65 6c 3c 3d 69 43 61 63 68 65 4c 65 76 65 6c  vel<=iCacheLevel
1e540 20 2a 2f 0a 20 20 69 6e 74 20 69 43 61 63 68 65   */.  int iCache
1e550 43 6e 74 3b 20 20 20 20 20 20 20 2f 2a 20 43 6f  Cnt;       /* Co
1e560 75 6e 74 65 72 20 75 73 65 64 20 74 6f 20 67 65  unter used to ge
1e570 6e 65 72 61 74 65 20 61 43 6f 6c 43 61 63 68 65  nerate aColCache
1e580 5b 5d 2e 6c 72 75 20 76 61 6c 75 65 73 20 2a 2f  [].lru values */
1e590 0a 20 20 69 6e 74 20 6e 4c 61 62 65 6c 3b 20 20  .  int nLabel;  
1e5a0 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
1e5b0 72 20 6f 66 20 6c 61 62 65 6c 73 20 75 73 65 64  r of labels used
1e5c0 20 2a 2f 0a 20 20 69 6e 74 20 2a 61 4c 61 62 65   */.  int *aLabe
1e5d0 6c 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 53 70  l;         /* Sp
1e5e0 61 63 65 20 74 6f 20 68 6f 6c 64 20 74 68 65 20  ace to hold the 
1e5f0 6c 61 62 65 6c 73 20 2a 2f 0a 20 20 73 74 72 75  labels */.  stru
1e600 63 74 20 79 43 6f 6c 43 61 63 68 65 20 7b 0a 20  ct yColCache {. 
1e610 20 20 20 69 6e 74 20 69 54 61 62 6c 65 3b 20 20     int iTable;  
1e620 20 20 20 20 20 20 20 20 20 2f 2a 20 54 61 62 6c           /* Tabl
1e630 65 20 63 75 72 73 6f 72 20 6e 75 6d 62 65 72 20  e cursor number 
1e640 2a 2f 0a 20 20 20 20 69 31 36 20 69 43 6f 6c 75  */.    i16 iColu
1e650 6d 6e 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  mn;          /* 
1e660 54 61 62 6c 65 20 63 6f 6c 75 6d 6e 20 6e 75 6d  Table column num
1e670 62 65 72 20 2a 2f 0a 20 20 20 20 75 38 20 74 65  ber */.    u8 te
1e680 6d 70 52 65 67 3b 20 20 20 20 20 20 20 20 20 20  mpReg;          
1e690 20 2f 2a 20 69 52 65 67 20 69 73 20 61 20 74 65   /* iReg is a te
1e6a0 6d 70 20 72 65 67 69 73 74 65 72 20 74 68 61 74  mp register that
1e6b0 20 6e 65 65 64 73 20 74 6f 20 62 65 20 66 72 65   needs to be fre
1e6c0 65 64 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 4c  ed */.    int iL
1e6d0 65 76 65 6c 3b 20 20 20 20 20 20 20 20 20 20 20  evel;           
1e6e0 2f 2a 20 4e 65 73 74 69 6e 67 20 6c 65 76 65 6c  /* Nesting level
1e6f0 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 52 65 67   */.    int iReg
1e700 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
1e710 20 52 65 67 20 77 69 74 68 20 76 61 6c 75 65 20   Reg with value 
1e720 6f 66 20 74 68 69 73 20 63 6f 6c 75 6d 6e 2e 20  of this column. 
1e730 30 20 6d 65 61 6e 73 20 6e 6f 6e 65 2e 20 2a 2f  0 means none. */
1e740 0a 20 20 20 20 69 6e 74 20 6c 72 75 3b 20 20 20  .    int lru;   
1e750 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 65             /* Le
1e760 61 73 74 20 72 65 63 65 6e 74 6c 79 20 75 73 65  ast recently use
1e770 64 20 65 6e 74 72 79 20 68 61 73 20 74 68 65 20  d entry has the 
1e780 73 6d 61 6c 6c 65 73 74 20 76 61 6c 75 65 20 2a  smallest value *
1e790 2f 0a 20 20 7d 20 61 43 6f 6c 43 61 63 68 65 5b  /.  } aColCache[
1e7a0 53 51 4c 49 54 45 5f 4e 5f 43 4f 4c 43 41 43 48  SQLITE_N_COLCACH
1e7b0 45 5d 3b 20 20 2f 2a 20 4f 6e 65 20 66 6f 72 20  E];  /* One for 
1e7c0 65 61 63 68 20 63 6f 6c 75 6d 6e 20 63 61 63 68  each column cach
1e7d0 65 20 65 6e 74 72 79 20 2a 2f 0a 20 20 45 78 70  e entry */.  Exp
1e7e0 72 4c 69 73 74 20 2a 70 43 6f 6e 73 74 45 78 70  rList *pConstExp
1e7f0 72 3b 2f 2a 20 43 6f 6e 73 74 61 6e 74 20 65 78  r;/* Constant ex
1e800 70 72 65 73 73 69 6f 6e 73 20 2a 2f 0a 20 20 54  pressions */.  T
1e810 6f 6b 65 6e 20 63 6f 6e 73 74 72 61 69 6e 74 4e  oken constraintN
1e820 61 6d 65 3b 2f 2a 20 4e 61 6d 65 20 6f 66 20 74  ame;/* Name of t
1e830 68 65 20 63 6f 6e 73 74 72 61 69 6e 74 20 63 75  he constraint cu
1e840 72 72 65 6e 74 6c 79 20 62 65 69 6e 67 20 70 61  rrently being pa
1e850 72 73 65 64 20 2a 2f 0a 20 20 79 44 62 4d 61 73  rsed */.  yDbMas
1e860 6b 20 77 72 69 74 65 4d 61 73 6b 3b 20 20 20 2f  k writeMask;   /
1e870 2a 20 53 74 61 72 74 20 61 20 77 72 69 74 65 20  * Start a write 
1e880 74 72 61 6e 73 61 63 74 69 6f 6e 20 6f 6e 20 74  transaction on t
1e890 68 65 73 65 20 64 61 74 61 62 61 73 65 73 20 2a  hese databases *
1e8a0 2f 0a 20 20 79 44 62 4d 61 73 6b 20 63 6f 6f 6b  /.  yDbMask cook
1e8b0 69 65 4d 61 73 6b 3b 20 20 2f 2a 20 42 69 74 6d  ieMask;  /* Bitm
1e8c0 61 73 6b 20 6f 66 20 73 63 68 65 6d 61 20 76 65  ask of schema ve
1e8d0 72 69 66 69 65 64 20 64 61 74 61 62 61 73 65 73  rified databases
1e8e0 20 2a 2f 0a 20 20 69 6e 74 20 63 6f 6f 6b 69 65   */.  int cookie
1e8f0 56 61 6c 75 65 5b 53 51 4c 49 54 45 5f 4d 41 58  Value[SQLITE_MAX
1e900 5f 41 54 54 41 43 48 45 44 2b 32 5d 3b 20 20 2f  _ATTACHED+2];  /
1e910 2a 20 56 61 6c 75 65 73 20 6f 66 20 63 6f 6f 6b  * Values of cook
1e920 69 65 73 20 74 6f 20 76 65 72 69 66 79 20 2a 2f  ies to verify */
1e930 0a 20 20 69 6e 74 20 72 65 67 52 6f 77 69 64 3b  .  int regRowid;
1e940 20 20 20 20 20 20 20 20 2f 2a 20 52 65 67 69 73          /* Regis
1e950 74 65 72 20 68 6f 6c 64 69 6e 67 20 72 6f 77 69  ter holding rowi
1e960 64 20 6f 66 20 43 52 45 41 54 45 20 54 41 42 4c  d of CREATE TABL
1e970 45 20 65 6e 74 72 79 20 2a 2f 0a 20 20 69 6e 74  E entry */.  int
1e980 20 72 65 67 52 6f 6f 74 3b 20 20 20 20 20 20 20   regRoot;       
1e990 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20 68 6f    /* Register ho
1e9a0 6c 64 69 6e 67 20 72 6f 6f 74 20 70 61 67 65 20  lding root page 
1e9b0 6e 75 6d 62 65 72 20 66 6f 72 20 6e 65 77 20 6f  number for new o
1e9c0 62 6a 65 63 74 73 20 2a 2f 0a 20 20 69 6e 74 20  bjects */.  int 
1e9d0 6e 4d 61 78 41 72 67 3b 20 20 20 20 20 20 20 20  nMaxArg;        
1e9e0 20 2f 2a 20 4d 61 78 20 61 72 67 73 20 70 61 73   /* Max args pas
1e9f0 73 65 64 20 74 6f 20 75 73 65 72 20 66 75 6e 63  sed to user func
1ea00 74 69 6f 6e 20 62 79 20 73 75 62 2d 70 72 6f 67  tion by sub-prog
1ea10 72 61 6d 20 2a 2f 0a 23 69 66 20 53 45 4c 45 43  ram */.#if SELEC
1ea20 54 54 52 41 43 45 5f 45 4e 41 42 4c 45 44 0a 20  TTRACE_ENABLED. 
1ea30 20 69 6e 74 20 6e 53 65 6c 65 63 74 3b 20 20 20   int nSelect;   
1ea40 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
1ea50 6f 66 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d  of SELECT statem
1ea60 65 6e 74 73 20 73 65 65 6e 20 2a 2f 0a 20 20 69  ents seen */.  i
1ea70 6e 74 20 6e 53 65 6c 65 63 74 49 6e 64 65 6e 74  nt nSelectIndent
1ea80 3b 20 20 20 2f 2a 20 48 6f 77 20 66 61 72 20 74  ;   /* How far t
1ea90 6f 20 69 6e 64 65 6e 74 20 53 45 4c 45 43 54 54  o indent SELECTT
1eaa0 52 41 43 45 28 29 20 6f 75 74 70 75 74 20 2a 2f  RACE() output */
1eab0 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20  .#endif.#ifndef 
1eac0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 48 41 52  SQLITE_OMIT_SHAR
1ead0 45 44 5f 43 41 43 48 45 0a 20 20 69 6e 74 20 6e  ED_CACHE.  int n
1eae0 54 61 62 6c 65 4c 6f 63 6b 3b 20 20 20 20 20 20  TableLock;      
1eaf0 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6c    /* Number of l
1eb00 6f 63 6b 73 20 69 6e 20 61 54 61 62 6c 65 4c 6f  ocks in aTableLo
1eb10 63 6b 20 2a 2f 0a 20 20 54 61 62 6c 65 4c 6f 63  ck */.  TableLoc
1eb20 6b 20 2a 61 54 61 62 6c 65 4c 6f 63 6b 3b 20 2f  k *aTableLock; /
1eb30 2a 20 52 65 71 75 69 72 65 64 20 74 61 62 6c 65  * Required table
1eb40 20 6c 6f 63 6b 73 20 66 6f 72 20 73 68 61 72 65   locks for share
1eb50 64 2d 63 61 63 68 65 20 6d 6f 64 65 20 2a 2f 0a  d-cache mode */.
1eb60 23 65 6e 64 69 66 0a 20 20 41 75 74 6f 69 6e 63  #endif.  Autoinc
1eb70 49 6e 66 6f 20 2a 70 41 69 6e 63 3b 20 20 2f 2a  Info *pAinc;  /*
1eb80 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f   Information abo
1eb90 75 74 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54  ut AUTOINCREMENT
1eba0 20 63 6f 75 6e 74 65 72 73 20 2a 2f 0a 0a 20 20   counters */..  
1ebb0 2f 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 75  /* Information u
1ebc0 73 65 64 20 77 68 69 6c 65 20 63 6f 64 69 6e 67  sed while coding
1ebd0 20 74 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d   trigger program
1ebe0 73 2e 20 2a 2f 0a 20 20 50 61 72 73 65 20 2a 70  s. */.  Parse *p
1ebf0 54 6f 70 6c 65 76 65 6c 3b 20 20 20 20 2f 2a 20  Toplevel;    /* 
1ec00 50 61 72 73 65 20 73 74 72 75 63 74 75 72 65 20  Parse structure 
1ec10 66 6f 72 20 6d 61 69 6e 20 70 72 6f 67 72 61 6d  for main program
1ec20 20 28 6f 72 20 4e 55 4c 4c 29 20 2a 2f 0a 20 20   (or NULL) */.  
1ec30 54 61 62 6c 65 20 2a 70 54 72 69 67 67 65 72 54  Table *pTriggerT
1ec40 61 62 3b 20 20 2f 2a 20 54 61 62 6c 65 20 74 72  ab;  /* Table tr
1ec50 69 67 67 65 72 73 20 61 72 65 20 62 65 69 6e 67  iggers are being
1ec60 20 63 6f 64 65 64 20 66 6f 72 20 2a 2f 0a 20 20   coded for */.  
1ec70 69 6e 74 20 61 64 64 72 43 72 54 61 62 3b 20 20  int addrCrTab;  
1ec80 20 20 20 20 20 2f 2a 20 41 64 64 72 65 73 73 20       /* Address 
1ec90 6f 66 20 4f 50 5f 43 72 65 61 74 65 54 61 62 6c  of OP_CreateTabl
1eca0 65 20 6f 70 63 6f 64 65 20 6f 6e 20 43 52 45 41  e opcode on CREA
1ecb0 54 45 20 54 41 42 4c 45 20 2a 2f 0a 20 20 75 33  TE TABLE */.  u3
1ecc0 32 20 6e 51 75 65 72 79 4c 6f 6f 70 3b 20 20 20  2 nQueryLoop;   
1ecd0 20 20 20 2f 2a 20 45 73 74 20 6e 75 6d 62 65 72     /* Est number
1ece0 20 6f 66 20 69 74 65 72 61 74 69 6f 6e 73 20 6f   of iterations o
1ecf0 66 20 61 20 71 75 65 72 79 20 28 31 30 2a 6c 6f  f a query (10*lo
1ed00 67 32 28 4e 29 29 20 2a 2f 0a 20 20 75 33 32 20  g2(N)) */.  u32 
1ed10 6f 6c 64 6d 61 73 6b 3b 20 20 20 20 20 20 20 20  oldmask;        
1ed20 20 2f 2a 20 4d 61 73 6b 20 6f 66 20 6f 6c 64 2e   /* Mask of old.
1ed30 2a 20 63 6f 6c 75 6d 6e 73 20 72 65 66 65 72 65  * columns refere
1ed40 6e 63 65 64 20 2a 2f 0a 20 20 75 33 32 20 6e 65  nced */.  u32 ne
1ed50 77 6d 61 73 6b 3b 20 20 20 20 20 20 20 20 20 2f  wmask;         /
1ed60 2a 20 4d 61 73 6b 20 6f 66 20 6e 65 77 2e 2a 20  * Mask of new.* 
1ed70 63 6f 6c 75 6d 6e 73 20 72 65 66 65 72 65 6e 63  columns referenc
1ed80 65 64 20 2a 2f 0a 20 20 75 38 20 65 54 72 69 67  ed */.  u8 eTrig
1ed90 67 65 72 4f 70 3b 20 20 20 20 20 20 20 2f 2a 20  gerOp;       /* 
1eda0 54 4b 5f 55 50 44 41 54 45 2c 20 54 4b 5f 49 4e  TK_UPDATE, TK_IN
1edb0 53 45 52 54 20 6f 72 20 54 4b 5f 44 45 4c 45 54  SERT or TK_DELET
1edc0 45 20 2a 2f 0a 20 20 75 38 20 65 4f 72 63 6f 6e  E */.  u8 eOrcon
1edd0 66 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44  f;          /* D
1ede0 65 66 61 75 6c 74 20 4f 4e 20 43 4f 4e 46 4c 49  efault ON CONFLI
1edf0 43 54 20 70 6f 6c 69 63 79 20 66 6f 72 20 74 72  CT policy for tr
1ee00 69 67 67 65 72 20 73 74 65 70 73 20 2a 2f 0a 20  igger steps */. 
1ee10 20 75 38 20 64 69 73 61 62 6c 65 54 72 69 67 67   u8 disableTrigg
1ee20 65 72 73 3b 20 20 2f 2a 20 54 72 75 65 20 74 6f  ers;  /* True to
1ee30 20 64 69 73 61 62 6c 65 20 74 72 69 67 67 65 72   disable trigger
1ee40 73 20 2a 2f 0a 0a 20 20 2f 2a 2a 2a 2a 2a 2a 2a  s */..  /*******
1ee50 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1ee60 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
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 0a 20 20 2a 2a 20 41 62 6f 76 65 20 69 73 20  *.  ** Above is 
1eea0 63 6f 6e 73 74 61 6e 74 20 62 65 74 77 65 65 6e  constant between
1eeb0 20 72 65 63 75 72 73 69 6f 6e 73 2e 20 20 42 65   recursions.  Be
1eec0 6c 6f 77 20 69 73 20 72 65 73 65 74 20 62 65 66  low is reset bef
1eed0 6f 72 65 20 61 6e 64 20 61 66 74 65 72 0a 20 20  ore and after.  
1eee0 2a 2a 20 65 61 63 68 20 72 65 63 75 72 73 69 6f  ** each recursio
1eef0 6e 2e 20 20 54 68 65 20 62 6f 75 6e 64 61 72 79  n.  The boundary
1ef00 20 62 65 74 77 65 65 6e 20 74 68 65 73 65 20 74   between these t
1ef10 77 6f 20 72 65 67 69 6f 6e 73 20 69 73 20 64 65  wo regions is de
1ef20 74 65 72 6d 69 6e 65 64 0a 20 20 2a 2a 20 75 73  termined.  ** us
1ef30 69 6e 67 20 6f 66 66 73 65 74 6f 66 28 50 61 72  ing offsetof(Par
1ef40 73 65 2c 6e 56 61 72 29 20 73 6f 20 74 68 65 20  se,nVar) so the 
1ef50 6e 56 61 72 20 66 69 65 6c 64 20 6d 75 73 74 20  nVar field must 
1ef60 62 65 20 74 68 65 20 66 69 72 73 74 20 66 69 65  be the first fie
1ef70 6c 64 0a 20 20 2a 2a 20 69 6e 20 74 68 65 20 72  ld.  ** in the r
1ef80 65 63 75 72 73 69 76 65 20 72 65 67 69 6f 6e 2e  ecursive region.
1ef90 0a 20 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  .  *************
1efa0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1efb0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
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 2f 0a 0a 20 20  ***********/..  
1efe0 79 6e 56 61 72 20 6e 56 61 72 3b 20 20 20 20 20  ynVar nVar;     
1eff0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
1f000 62 65 72 20 6f 66 20 27 3f 27 20 76 61 72 69 61  ber of '?' varia
1f010 62 6c 65 73 20 73 65 65 6e 20 69 6e 20 74 68 65  bles seen in the
1f020 20 53 51 4c 20 73 6f 20 66 61 72 20 2a 2f 0a 20   SQL so far */. 
1f030 20 69 6e 74 20 6e 7a 56 61 72 3b 20 20 20 20 20   int nzVar;     
1f040 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
1f050 6d 62 65 72 20 6f 66 20 61 76 61 69 6c 61 62 6c  mber of availabl
1f060 65 20 73 6c 6f 74 73 20 69 6e 20 61 7a 56 61 72  e slots in azVar
1f070 5b 5d 20 2a 2f 0a 20 20 75 38 20 69 50 6b 53 6f  [] */.  u8 iPkSo
1f080 72 74 4f 72 64 65 72 3b 20 20 20 20 20 20 20 20  rtOrder;        
1f090 20 20 2f 2a 20 41 53 43 20 6f 72 20 44 45 53 43    /* ASC or DESC
1f0a0 20 66 6f 72 20 49 4e 54 45 47 45 52 20 50 52 49   for INTEGER PRI
1f0b0 4d 41 52 59 20 4b 45 59 20 2a 2f 0a 20 20 75 38  MARY KEY */.  u8
1f0c0 20 65 78 70 6c 61 69 6e 3b 20 20 20 20 20 20 20   explain;       
1f0d0 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20          /* True 
1f0e0 69 66 20 74 68 65 20 45 58 50 4c 41 49 4e 20 66  if the EXPLAIN f
1f0f0 6c 61 67 20 69 73 20 66 6f 75 6e 64 20 6f 6e 20  lag is found on 
1f100 74 68 65 20 71 75 65 72 79 20 2a 2f 0a 23 69 66  the query */.#if
1f110 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
1f120 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 20 20  _VIRTUALTABLE.  
1f130 75 38 20 64 65 63 6c 61 72 65 56 74 61 62 3b 20  u8 declareVtab; 
1f140 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75            /* Tru
1f150 65 20 69 66 20 69 6e 73 69 64 65 20 73 71 6c 69  e if inside sqli
1f160 74 65 33 5f 64 65 63 6c 61 72 65 5f 76 74 61 62  te3_declare_vtab
1f170 28 29 20 2a 2f 0a 20 20 69 6e 74 20 6e 56 74 61  () */.  int nVta
1f180 62 4c 6f 63 6b 3b 20 20 20 20 20 20 20 20 20 20  bLock;          
1f190 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 76    /* Number of v
1f1a0 69 72 74 75 61 6c 20 74 61 62 6c 65 73 20 74 6f  irtual tables to
1f1b0 20 6c 6f 63 6b 20 2a 2f 0a 23 65 6e 64 69 66 0a   lock */.#endif.
1f1c0 20 20 69 6e 74 20 6e 41 6c 69 61 73 3b 20 20 20    int nAlias;   
1f1d0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
1f1e0 75 6d 62 65 72 20 6f 66 20 61 6c 69 61 73 65 64  umber of aliased
1f1f0 20 72 65 73 75 6c 74 20 73 65 74 20 63 6f 6c 75   result set colu
1f200 6d 6e 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 48 65  mns */.  int nHe
1f210 69 67 68 74 3b 20 20 20 20 20 20 20 20 20 20 20  ight;           
1f220 20 20 20 2f 2a 20 45 78 70 72 65 73 73 69 6f 6e     /* Expression
1f230 20 74 72 65 65 20 68 65 69 67 68 74 20 6f 66 20   tree height of 
1f240 63 75 72 72 65 6e 74 20 73 75 62 2d 73 65 6c 65  current sub-sele
1f250 63 74 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51  ct */.#ifndef SQ
1f260 4c 49 54 45 5f 4f 4d 49 54 5f 45 58 50 4c 41 49  LITE_OMIT_EXPLAI
1f270 4e 0a 20 20 69 6e 74 20 69 53 65 6c 65 63 74 49  N.  int iSelectI
1f280 64 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  d;            /*
1f290 20 49 44 20 6f 66 20 63 75 72 72 65 6e 74 20 73   ID of current s
1f2a0 65 6c 65 63 74 20 66 6f 72 20 45 58 50 4c 41 49  elect for EXPLAI
1f2b0 4e 20 6f 75 74 70 75 74 20 2a 2f 0a 20 20 69 6e  N output */.  in
1f2c0 74 20 69 4e 65 78 74 53 65 6c 65 63 74 49 64 3b  t iNextSelectId;
1f2d0 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20          /* Next 
1f2e0 61 76 61 69 6c 61 62 6c 65 20 73 65 6c 65 63 74  available select
1f2f0 20 49 44 20 66 6f 72 20 45 58 50 4c 41 49 4e 20   ID for EXPLAIN 
1f300 6f 75 74 70 75 74 20 2a 2f 0a 23 65 6e 64 69 66  output */.#endif
1f310 0a 20 20 63 68 61 72 20 2a 2a 61 7a 56 61 72 3b  .  char **azVar;
1f320 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1f330 50 6f 69 6e 74 65 72 73 20 74 6f 20 6e 61 6d 65  Pointers to name
1f340 73 20 6f 66 20 70 61 72 61 6d 65 74 65 72 73 20  s of parameters 
1f350 2a 2f 0a 20 20 56 64 62 65 20 2a 70 52 65 70 72  */.  Vdbe *pRepr
1f360 65 70 61 72 65 3b 20 20 20 20 20 20 20 20 20 2f  epare;         /
1f370 2a 20 56 4d 20 62 65 69 6e 67 20 72 65 70 72 65  * VM being repre
1f380 70 61 72 65 64 20 28 73 71 6c 69 74 65 33 52 65  pared (sqlite3Re
1f390 70 72 65 70 61 72 65 28 29 29 20 2a 2f 0a 20 20  prepare()) */.  
1f3a0 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 54 61 69  const char *zTai
1f3b0 6c 3b 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c  l;        /* All
1f3c0 20 53 51 4c 20 74 65 78 74 20 70 61 73 74 20 74   SQL text past t
1f3d0 68 65 20 6c 61 73 74 20 73 65 6d 69 63 6f 6c 6f  he last semicolo
1f3e0 6e 20 70 61 72 73 65 64 20 2a 2f 0a 20 20 54 61  n parsed */.  Ta
1f3f0 62 6c 65 20 2a 70 4e 65 77 54 61 62 6c 65 3b 20  ble *pNewTable; 
1f400 20 20 20 20 20 20 20 20 2f 2a 20 41 20 74 61 62          /* A tab
1f410 6c 65 20 62 65 69 6e 67 20 63 6f 6e 73 74 72 75  le being constru
1f420 63 74 65 64 20 62 79 20 43 52 45 41 54 45 20 54  cted by CREATE T
1f430 41 42 4c 45 20 2a 2f 0a 20 20 54 72 69 67 67 65  ABLE */.  Trigge
1f440 72 20 2a 70 4e 65 77 54 72 69 67 67 65 72 3b 20  r *pNewTrigger; 
1f450 20 20 20 20 2f 2a 20 54 72 69 67 67 65 72 20 75      /* Trigger u
1f460 6e 64 65 72 20 63 6f 6e 73 74 72 75 63 74 20 62  nder construct b
1f470 79 20 61 20 43 52 45 41 54 45 20 54 52 49 47 47  y a CREATE TRIGG
1f480 45 52 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68  ER */.  const ch
1f490 61 72 20 2a 7a 41 75 74 68 43 6f 6e 74 65 78 74  ar *zAuthContext
1f4a0 3b 20 2f 2a 20 54 68 65 20 36 74 68 20 70 61 72  ; /* The 6th par
1f4b0 61 6d 65 74 65 72 20 74 6f 20 64 62 2d 3e 78 41  ameter to db->xA
1f4c0 75 74 68 20 63 61 6c 6c 62 61 63 6b 73 20 2a 2f  uth callbacks */
1f4d0 0a 20 20 54 6f 6b 65 6e 20 73 4e 61 6d 65 54 6f  .  Token sNameTo
1f4e0 6b 65 6e 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  ken;         /* 
1f4f0 54 6f 6b 65 6e 20 77 69 74 68 20 75 6e 71 75 61  Token with unqua
1f500 6c 69 66 69 65 64 20 73 63 68 65 6d 61 20 6f 62  lified schema ob
1f510 6a 65 63 74 20 6e 61 6d 65 20 2a 2f 0a 20 20 54  ject name */.  T
1f520 6f 6b 65 6e 20 73 4c 61 73 74 54 6f 6b 65 6e 3b  oken sLastToken;
1f530 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
1f540 6c 61 73 74 20 74 6f 6b 65 6e 20 70 61 72 73 65  last token parse
1f550 64 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c  d */.#ifndef SQL
1f560 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
1f570 54 41 42 4c 45 0a 20 20 54 6f 6b 65 6e 20 73 41  TABLE.  Token sA
1f580 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  rg;             
1f590 20 20 2f 2a 20 43 6f 6d 70 6c 65 74 65 20 74 65    /* Complete te
1f5a0 78 74 20 6f 66 20 61 20 6d 6f 64 75 6c 65 20 61  xt of a module a
1f5b0 72 67 75 6d 65 6e 74 20 2a 2f 0a 20 20 54 61 62  rgument */.  Tab
1f5c0 6c 65 20 2a 2a 61 70 56 74 61 62 4c 6f 63 6b 3b  le **apVtabLock;
1f5d0 20 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65         /* Pointe
1f5e0 72 20 74 6f 20 76 69 72 74 75 61 6c 20 74 61 62  r to virtual tab
1f5f0 6c 65 73 20 6e 65 65 64 69 6e 67 20 6c 6f 63 6b  les needing lock
1f600 69 6e 67 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20  ing */.#endif.  
1f610 54 61 62 6c 65 20 2a 70 5a 6f 6d 62 69 65 54 61  Table *pZombieTa
1f620 62 3b 20 20 20 20 20 20 20 20 2f 2a 20 4c 69 73  b;        /* Lis
1f630 74 20 6f 66 20 54 61 62 6c 65 20 6f 62 6a 65 63  t of Table objec
1f640 74 73 20 74 6f 20 64 65 6c 65 74 65 20 61 66 74  ts to delete aft
1f650 65 72 20 63 6f 64 65 20 67 65 6e 20 2a 2f 0a 20  er code gen */. 
1f660 20 54 72 69 67 67 65 72 50 72 67 20 2a 70 54 72   TriggerPrg *pTr
1f670 69 67 67 65 72 50 72 67 3b 20 20 2f 2a 20 4c 69  iggerPrg;  /* Li
1f680 6e 6b 65 64 20 6c 69 73 74 20 6f 66 20 63 6f 64  nked list of cod
1f690 65 64 20 74 72 69 67 67 65 72 73 20 2a 2f 0a 20  ed triggers */. 
1f6a0 20 57 69 74 68 20 2a 70 57 69 74 68 3b 20 20 20   With *pWith;   
1f6b0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 75             /* Cu
1f6c0 72 72 65 6e 74 20 57 49 54 48 20 63 6c 61 75 73  rrent WITH claus
1f6d0 65 2c 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 20 20  e, or NULL */.  
1f6e0 57 69 74 68 20 2a 70 57 69 74 68 54 6f 46 72 65  With *pWithToFre
1f6f0 65 3b 20 20 20 20 20 20 20 20 2f 2a 20 46 72 65  e;        /* Fre
1f700 65 20 74 68 69 73 20 57 49 54 48 20 6f 62 6a 65  e this WITH obje
1f710 63 74 20 61 74 20 74 68 65 20 65 6e 64 20 6f 66  ct at the end of
1f720 20 74 68 65 20 70 61 72 73 65 20 2a 2f 0a 7d 3b   the parse */.};
1f730 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74  ../*.** Return t
1f740 72 75 65 20 69 66 20 63 75 72 72 65 6e 74 6c 79  rue if currently
1f750 20 69 6e 73 69 64 65 20 61 6e 20 73 71 6c 69 74   inside an sqlit
1f760 65 33 5f 64 65 63 6c 61 72 65 5f 76 74 61 62 28  e3_declare_vtab(
1f770 29 20 63 61 6c 6c 2e 0a 2a 2f 0a 23 69 66 64 65  ) call..*/.#ifde
1f780 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  f SQLITE_OMIT_VI
1f790 52 54 55 41 4c 54 41 42 4c 45 0a 20 20 23 64 65  RTUALTABLE.  #de
1f7a0 66 69 6e 65 20 49 4e 5f 44 45 43 4c 41 52 45 5f  fine IN_DECLARE_
1f7b0 56 54 41 42 20 30 0a 23 65 6c 73 65 0a 20 20 23  VTAB 0.#else.  #
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 28 70 50 61 72 73 65 2d 3e  E_VTAB (pParse->
1f7e0 64 65 63 6c 61 72 65 56 74 61 62 29 0a 23 65 6e  declareVtab).#en
1f7f0 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e  dif../*.** An in
1f800 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f  stance of the fo
1f810 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72  llowing structur
1f820 65 20 63 61 6e 20 62 65 20 64 65 63 6c 61 72 65  e can be declare
1f830 64 20 6f 6e 20 61 20 73 74 61 63 6b 20 61 6e 64  d on a stack and
1f840 20 75 73 65 64 0a 2a 2a 20 74 6f 20 73 61 76 65   used.** to save
1f850 20 74 68 65 20 50 61 72 73 65 2e 7a 41 75 74 68   the Parse.zAuth
1f860 43 6f 6e 74 65 78 74 20 76 61 6c 75 65 20 73 6f  Context value so
1f870 20 74 68 61 74 20 69 74 20 63 61 6e 20 62 65 20   that it can be 
1f880 72 65 73 74 6f 72 65 64 20 6c 61 74 65 72 2e 0a  restored later..
1f890 2a 2f 0a 73 74 72 75 63 74 20 41 75 74 68 43 6f  */.struct AuthCo
1f8a0 6e 74 65 78 74 20 7b 0a 20 20 63 6f 6e 73 74 20  ntext {.  const 
1f8b0 63 68 61 72 20 2a 7a 41 75 74 68 43 6f 6e 74 65  char *zAuthConte
1f8c0 78 74 3b 20 20 20 2f 2a 20 50 75 74 20 73 61 76  xt;   /* Put sav
1f8d0 65 64 20 50 61 72 73 65 2e 7a 41 75 74 68 43 6f  ed Parse.zAuthCo
1f8e0 6e 74 65 78 74 20 68 65 72 65 20 2a 2f 0a 20 20  ntext here */.  
1f8f0 50 61 72 73 65 20 2a 70 50 61 72 73 65 3b 20 20  Parse *pParse;  
1f900 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
1f910 68 65 20 50 61 72 73 65 20 73 74 72 75 63 74 75  he Parse structu
1f920 72 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  re */.};../*.** 
1f930 42 69 74 66 69 65 6c 64 20 66 6c 61 67 73 20 66  Bitfield flags f
1f940 6f 72 20 50 35 20 76 61 6c 75 65 20 69 6e 20 76  or P5 value in v
1f950 61 72 69 6f 75 73 20 6f 70 63 6f 64 65 73 2e 0a  arious opcodes..
1f960 2a 2a 0a 2a 2a 20 56 61 6c 75 65 20 63 6f 6e 73  **.** Value cons
1f970 74 72 61 69 6e 74 73 20 28 65 6e 66 6f 72 63 65  traints (enforce
1f980 64 20 76 69 61 20 61 73 73 65 72 74 28 29 29 3a  d via assert()):
1f990 0a 2a 2a 20 20 20 20 4f 50 46 4c 41 47 5f 4c 45  .**    OPFLAG_LE
1f9a0 4e 47 54 48 41 52 47 20 20 20 20 3d 3d 20 53 51  NGTHARG    == SQ
1f9b0 4c 49 54 45 5f 46 55 4e 43 5f 4c 45 4e 47 54 48  LITE_FUNC_LENGTH
1f9c0 0a 2a 2a 20 20 20 20 4f 50 46 4c 41 47 5f 54 59  .**    OPFLAG_TY
1f9d0 50 45 4f 46 41 52 47 20 20 20 20 3d 3d 20 53 51  PEOFARG    == SQ
1f9e0 4c 49 54 45 5f 46 55 4e 43 5f 54 59 50 45 4f 46  LITE_FUNC_TYPEOF
1f9f0 0a 2a 2a 20 20 20 20 4f 50 46 4c 41 47 5f 42 55  .**    OPFLAG_BU
1fa00 4c 4b 43 53 52 20 20 20 20 20 20 3d 3d 20 42 54  LKCSR      == BT
1fa10 52 45 45 5f 42 55 4c 4b 4c 4f 41 44 0a 2a 2a 20  REE_BULKLOAD.** 
1fa20 20 20 20 4f 50 46 4c 41 47 5f 53 45 45 4b 45 51     OPFLAG_SEEKEQ
1fa30 20 20 20 20 20 20 20 3d 3d 20 42 54 52 45 45 5f         == BTREE_
1fa40 53 45 45 4b 5f 45 51 0a 2a 2a 20 20 20 20 4f 50  SEEK_EQ.**    OP
1fa50 46 4c 41 47 5f 46 4f 52 44 45 4c 45 54 45 20 20  FLAG_FORDELETE  
1fa60 20 20 3d 3d 20 42 54 52 45 45 5f 46 4f 52 44 45    == BTREE_FORDE
1fa70 4c 45 54 45 0a 2a 2a 20 20 20 20 4f 50 46 4c 41  LETE.**    OPFLA
1fa80 47 5f 53 41 56 45 50 4f 53 49 54 49 4f 4e 20 3d  G_SAVEPOSITION =
1fa90 3d 20 42 54 52 45 45 5f 53 41 56 45 50 4f 53 49  = BTREE_SAVEPOSI
1faa0 54 49 4f 4e 0a 2a 2a 20 20 20 20 4f 50 46 4c 41  TION.**    OPFLA
1fab0 47 5f 41 55 58 44 45 4c 45 54 45 20 20 20 20 3d  G_AUXDELETE    =
1fac0 3d 20 42 54 52 45 45 5f 41 55 58 44 45 4c 45 54  = BTREE_AUXDELET
1fad0 45 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46  E.*/.#define OPF
1fae0 4c 41 47 5f 4e 43 48 41 4e 47 45 20 20 20 20 20  LAG_NCHANGE     
1faf0 20 20 30 78 30 31 20 20 20 20 2f 2a 20 4f 50 5f    0x01    /* OP_
1fb00 49 6e 73 65 72 74 3a 20 53 65 74 20 74 6f 20 75  Insert: Set to u
1fb10 70 64 61 74 65 20 64 62 2d 3e 6e 43 68 61 6e 67  pdate db->nChang
1fb20 65 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20  e */.           
1fb30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fb40 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 73            /* Als
1fb50 6f 20 75 73 65 64 20 69 6e 20 50 32 20 28 6e 6f  o used in P2 (no
1fb60 74 20 50 35 29 20 6f 66 20 4f 50 5f 44 65 6c 65  t P5) of OP_Dele
1fb70 74 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50  te */.#define OP
1fb80 46 4c 41 47 5f 45 50 48 45 4d 20 20 20 20 20 20  FLAG_EPHEM      
1fb90 20 20 20 30 78 30 31 20 20 20 20 2f 2a 20 4f 50     0x01    /* OP
1fba0 5f 43 6f 6c 75 6d 6e 3a 20 45 70 68 65 6d 65 72  _Column: Ephemer
1fbb0 61 6c 20 6f 75 74 70 75 74 20 69 73 20 6f 6b 20  al output is ok 
1fbc0 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41  */.#define OPFLA
1fbd0 47 5f 4c 41 53 54 52 4f 57 49 44 20 20 20 20 20  G_LASTROWID     
1fbe0 30 78 30 32 20 20 20 20 2f 2a 20 53 65 74 20 74  0x02    /* Set t
1fbf0 6f 20 75 70 64 61 74 65 20 64 62 2d 3e 6c 61 73  o update db->las
1fc00 74 52 6f 77 69 64 20 2a 2f 0a 23 64 65 66 69 6e  tRowid */.#defin
1fc10 65 20 4f 50 46 4c 41 47 5f 49 53 55 50 44 41 54  e OPFLAG_ISUPDAT
1fc20 45 20 20 20 20 20 20 30 78 30 34 20 20 20 20 2f  E      0x04    /
1fc30 2a 20 54 68 69 73 20 4f 50 5f 49 6e 73 65 72 74  * This OP_Insert
1fc40 20 69 73 20 61 6e 20 73 71 6c 20 55 50 44 41 54   is an sql UPDAT
1fc50 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46  E */.#define OPF
1fc60 4c 41 47 5f 41 50 50 45 4e 44 20 20 20 20 20 20  LAG_APPEND      
1fc70 20 20 30 78 30 38 20 20 20 20 2f 2a 20 54 68 69    0x08    /* Thi
1fc80 73 20 69 73 20 6c 69 6b 65 6c 79 20 74 6f 20 62  s is likely to b
1fc90 65 20 61 6e 20 61 70 70 65 6e 64 20 2a 2f 0a 23  e an append */.#
1fca0 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 55 53  define OPFLAG_US
1fcb0 45 53 45 45 4b 52 45 53 55 4c 54 20 30 78 31 30  ESEEKRESULT 0x10
1fcc0 20 20 20 20 2f 2a 20 54 72 79 20 74 6f 20 61 76      /* Try to av
1fcd0 6f 69 64 20 61 20 73 65 65 6b 20 69 6e 20 42 74  oid a seek in Bt
1fce0 72 65 65 49 6e 73 65 72 74 28 29 20 2a 2f 0a 23  reeInsert() */.#
1fcf0 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  ifdef SQLITE_ENA
1fd00 42 4c 45 5f 50 52 45 55 50 44 41 54 45 5f 48 4f  BLE_PREUPDATE_HO
1fd10 4f 4b 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41  OK.#define OPFLA
1fd20 47 5f 49 53 4e 4f 4f 50 20 20 20 20 20 20 20 20  G_ISNOOP        
1fd30 30 78 34 30 20 20 20 20 2f 2a 20 4f 50 5f 44 65  0x40    /* OP_De
1fd40 6c 65 74 65 20 64 6f 65 73 20 70 72 65 2d 75 70  lete does pre-up
1fd50 64 61 74 65 2d 68 6f 6f 6b 20 6f 6e 6c 79 20 2a  date-hook only *
1fd60 2f 0a 23 65 6e 64 69 66 0a 23 64 65 66 69 6e 65  /.#endif.#define
1fd70 20 4f 50 46 4c 41 47 5f 4c 45 4e 47 54 48 41 52   OPFLAG_LENGTHAR
1fd80 47 20 20 20 20 20 30 78 34 30 20 20 20 20 2f 2a  G     0x40    /*
1fd90 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 6e 6c 79 20   OP_Column only 
1fda0 75 73 65 64 20 66 6f 72 20 6c 65 6e 67 74 68 28  used for length(
1fdb0 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46  ) */.#define OPF
1fdc0 4c 41 47 5f 54 59 50 45 4f 46 41 52 47 20 20 20  LAG_TYPEOFARG   
1fdd0 20 20 30 78 38 30 20 20 20 20 2f 2a 20 4f 50 5f    0x80    /* OP_
1fde0 43 6f 6c 75 6d 6e 20 6f 6e 6c 79 20 75 73 65 64  Column only used
1fdf0 20 66 6f 72 20 74 79 70 65 6f 66 28 29 20 2a 2f   for typeof() */
1fe00 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f  .#define OPFLAG_
1fe10 42 55 4c 4b 43 53 52 20 20 20 20 20 20 20 30 78  BULKCSR       0x
1fe20 30 31 20 20 20 20 2f 2a 20 4f 50 5f 4f 70 65 6e  01    /* OP_Open
1fe30 2a 2a 20 75 73 65 64 20 74 6f 20 6f 70 65 6e 20  ** used to open 
1fe40 62 75 6c 6b 20 63 75 72 73 6f 72 20 2a 2f 0a 23  bulk cursor */.#
1fe50 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 53 45  define OPFLAG_SE
1fe60 45 4b 45 51 20 20 20 20 20 20 20 20 30 78 30 32  EKEQ        0x02
1fe70 20 20 20 20 2f 2a 20 4f 50 5f 4f 70 65 6e 2a 2a      /* OP_Open**
1fe80 20 63 75 72 73 6f 72 20 75 73 65 73 20 45 51 20   cursor uses EQ 
1fe90 73 65 65 6b 20 6f 6e 6c 79 20 2a 2f 0a 23 64 65  seek only */.#de
1fea0 66 69 6e 65 20 4f 50 46 4c 41 47 5f 46 4f 52 44  fine OPFLAG_FORD
1feb0 45 4c 45 54 45 20 20 20 20 20 30 78 30 38 20 20  ELETE     0x08  
1fec0 20 20 2f 2a 20 4f 50 5f 4f 70 65 6e 20 73 68 6f    /* OP_Open sho
1fed0 75 6c 64 20 75 73 65 20 42 54 52 45 45 5f 46 4f  uld use BTREE_FO
1fee0 52 44 45 4c 45 54 45 20 2a 2f 0a 23 64 65 66 69  RDELETE */.#defi
1fef0 6e 65 20 4f 50 46 4c 41 47 5f 50 32 49 53 52 45  ne OPFLAG_P2ISRE
1ff00 47 20 20 20 20 20 20 20 30 78 31 30 20 20 20 20  G       0x10    
1ff10 2f 2a 20 50 32 20 74 6f 20 4f 50 5f 4f 70 65 6e  /* P2 to OP_Open
1ff20 2a 2a 20 69 73 20 61 20 72 65 67 69 73 74 65 72  ** is a register
1ff30 20 6e 75 6d 62 65 72 20 2a 2f 0a 23 64 65 66 69   number */.#defi
1ff40 6e 65 20 4f 50 46 4c 41 47 5f 50 45 52 4d 55 54  ne OPFLAG_PERMUT
1ff50 45 20 20 20 20 20 20 20 30 78 30 31 20 20 20 20  E       0x01    
1ff60 2f 2a 20 4f 50 5f 43 6f 6d 70 61 72 65 3a 20 75  /* OP_Compare: u
1ff70 73 65 20 74 68 65 20 70 65 72 6d 75 74 61 74 69  se the permutati
1ff80 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50  on */.#define OP
1ff90 46 4c 41 47 5f 53 41 56 45 50 4f 53 49 54 49 4f  FLAG_SAVEPOSITIO
1ffa0 4e 20 20 30 78 30 32 20 20 20 20 2f 2a 20 4f 50  N  0x02    /* OP
1ffb0 5f 44 65 6c 65 74 65 3a 20 6b 65 65 70 20 63 75  _Delete: keep cu
1ffc0 72 73 6f 72 20 70 6f 73 69 74 69 6f 6e 20 2a 2f  rsor position */
1ffd0 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f  .#define OPFLAG_
1ffe0 41 55 58 44 45 4c 45 54 45 20 20 20 20 20 30 78  AUXDELETE     0x
1fff0 30 34 20 20 20 20 2f 2a 20 4f 50 5f 44 65 6c 65  04    /* OP_Dele
20000 74 65 3a 20 69 6e 64 65 78 20 69 6e 20 61 20 44  te: index in a D
20010 45 4c 45 54 45 20 6f 70 20 2a 2f 0a 0a 2f 2a 0a  ELETE op */../*.
20020 20 2a 20 45 61 63 68 20 74 72 69 67 67 65 72 20   * Each trigger 
20030 70 72 65 73 65 6e 74 20 69 6e 20 74 68 65 20 64  present in the d
20040 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 20 69  atabase schema i
20050 73 20 73 74 6f 72 65 64 20 61 73 20 61 6e 20 69  s stored as an i
20060 6e 73 74 61 6e 63 65 20 6f 66 0a 20 2a 20 73 74  nstance of. * st
20070 72 75 63 74 20 54 72 69 67 67 65 72 2e 0a 20 2a  ruct Trigger.. *
20080 0a 20 2a 20 50 6f 69 6e 74 65 72 73 20 74 6f 20  . * Pointers to 
20090 69 6e 73 74 61 6e 63 65 73 20 6f 66 20 73 74 72  instances of str
200a0 75 63 74 20 54 72 69 67 67 65 72 20 61 72 65 20  uct Trigger are 
200b0 73 74 6f 72 65 64 20 69 6e 20 74 77 6f 20 77 61  stored in two wa
200c0 79 73 2e 0a 20 2a 20 31 2e 20 49 6e 20 74 68 65  ys.. * 1. In the
200d0 20 22 74 72 69 67 48 61 73 68 22 20 68 61 73 68   "trigHash" hash
200e0 20 74 61 62 6c 65 20 28 70 61 72 74 20 6f 66 20   table (part of 
200f0 74 68 65 20 73 71 6c 69 74 65 33 2a 20 74 68 61  the sqlite3* tha
20100 74 20 72 65 70 72 65 73 65 6e 74 73 20 74 68 65  t represents the
20110 0a 20 2a 20 20 20 20 64 61 74 61 62 61 73 65 29  . *    database)
20120 2e 20 54 68 69 73 20 61 6c 6c 6f 77 73 20 54 72  . This allows Tr
20130 69 67 67 65 72 20 73 74 72 75 63 74 75 72 65 73  igger structures
20140 20 74 6f 20 62 65 20 72 65 74 72 69 65 76 65 64   to be retrieved
20150 20 62 79 20 6e 61 6d 65 2e 0a 20 2a 20 32 2e 20   by name.. * 2. 
20160 41 6c 6c 20 74 72 69 67 67 65 72 73 20 61 73 73  All triggers ass
20170 6f 63 69 61 74 65 64 20 77 69 74 68 20 61 20 73  ociated with a s
20180 69 6e 67 6c 65 20 74 61 62 6c 65 20 66 6f 72 6d  ingle table form
20190 20 61 20 6c 69 6e 6b 65 64 20 6c 69 73 74 2c 20   a linked list, 
201a0 75 73 69 6e 67 20 74 68 65 0a 20 2a 20 20 20 20  using the. *    
201b0 70 4e 65 78 74 20 6d 65 6d 62 65 72 20 6f 66 20  pNext member of 
201c0 73 74 72 75 63 74 20 54 72 69 67 67 65 72 2e 20  struct Trigger. 
201d0 41 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65  A pointer to the
201e0 20 66 69 72 73 74 20 65 6c 65 6d 65 6e 74 20 6f   first element o
201f0 66 20 74 68 65 0a 20 2a 20 20 20 20 6c 69 6e 6b  f the. *    link
20200 65 64 20 6c 69 73 74 20 69 73 20 73 74 6f 72 65  ed list is store
20210 64 20 61 73 20 74 68 65 20 22 70 54 72 69 67 67  d as the "pTrigg
20220 65 72 22 20 6d 65 6d 62 65 72 20 6f 66 20 74 68  er" member of th
20230 65 20 61 73 73 6f 63 69 61 74 65 64 0a 20 2a 20  e associated. * 
20240 20 20 20 73 74 72 75 63 74 20 54 61 62 6c 65 2e     struct Table.
20250 0a 20 2a 0a 20 2a 20 54 68 65 20 22 73 74 65 70  . *. * The "step
20260 5f 6c 69 73 74 22 20 6d 65 6d 62 65 72 20 70 6f  _list" member po
20270 69 6e 74 73 20 74 6f 20 74 68 65 20 66 69 72 73  ints to the firs
20280 74 20 65 6c 65 6d 65 6e 74 20 6f 66 20 61 20 6c  t element of a l
20290 69 6e 6b 65 64 20 6c 69 73 74 0a 20 2a 20 63 6f  inked list. * co
202a0 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 53 51 4c  ntaining the SQL
202b0 20 73 74 61 74 65 6d 65 6e 74 73 20 73 70 65 63   statements spec
202c0 69 66 69 65 64 20 61 73 20 74 68 65 20 74 72 69  ified as the tri
202d0 67 67 65 72 20 70 72 6f 67 72 61 6d 2e 0a 20 2a  gger program.. *
202e0 2f 0a 73 74 72 75 63 74 20 54 72 69 67 67 65 72  /.struct Trigger
202f0 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65   {.  char *zName
20300 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
20310 54 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20  The name of the 
20320 74 72 69 67 67 65 72 20 20 20 20 20 20 20 20 20  trigger         
20330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a                 *
20340 2f 0a 20 20 63 68 61 72 20 2a 74 61 62 6c 65 3b  /.  char *table;
20350 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
20360 68 65 20 74 61 62 6c 65 20 6f 72 20 76 69 65 77  he table or view
20370 20 74 6f 20 77 68 69 63 68 20 74 68 65 20 74 72   to which the tr
20380 69 67 67 65 72 20 61 70 70 6c 69 65 73 20 2a 2f  igger applies */
20390 0a 20 20 75 38 20 6f 70 3b 20 20 20 20 20 20 20  .  u8 op;       
203a0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e             /* On
203b0 65 20 6f 66 20 54 4b 5f 44 45 4c 45 54 45 2c 20  e of TK_DELETE, 
203c0 54 4b 5f 55 50 44 41 54 45 2c 20 54 4b 5f 49 4e  TK_UPDATE, TK_IN
203d0 53 45 52 54 20 20 20 20 20 20 20 20 20 2a 2f 0a  SERT         */.
203e0 20 20 75 38 20 74 72 5f 74 6d 3b 20 20 20 20 20    u8 tr_tm;     
203f0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65            /* One
20400 20 6f 66 20 54 52 49 47 47 45 52 5f 42 45 46 4f   of TRIGGER_BEFO
20410 52 45 2c 20 54 52 49 47 47 45 52 5f 41 46 54 45  RE, TRIGGER_AFTE
20420 52 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 57 68  R */.  Expr *pWh
20430 65 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  en;            /
20440 2a 20 54 68 65 20 57 48 45 4e 20 63 6c 61 75 73  * The WHEN claus
20450 65 20 6f 66 20 74 68 65 20 65 78 70 72 65 73 73  e of the express
20460 69 6f 6e 20 28 6d 61 79 20 62 65 20 4e 55 4c 4c  ion (may be NULL
20470 29 20 2a 2f 0a 20 20 49 64 4c 69 73 74 20 2a 70  ) */.  IdList *p
20480 43 6f 6c 75 6d 6e 73 3b 20 20 20 20 20 20 20 2f  Columns;       /
20490 2a 20 49 66 20 74 68 69 73 20 69 73 20 61 6e 20  * If this is an 
204a0 55 50 44 41 54 45 20 4f 46 20 3c 63 6f 6c 75 6d  UPDATE OF <colum
204b0 6e 2d 6c 69 73 74 3e 20 74 72 69 67 67 65 72 2c  n-list> trigger,
204c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
204d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
204e0 65 20 3c 63 6f 6c 75 6d 6e 2d 6c 69 73 74 3e 20  e <column-list> 
204f0 69 73 20 73 74 6f 72 65 64 20 68 65 72 65 20 2a  is stored here *
20500 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70 53 63 68  /.  Schema *pSch
20510 65 6d 61 3b 20 20 20 20 20 20 20 20 2f 2a 20 53  ema;        /* S
20520 63 68 65 6d 61 20 63 6f 6e 74 61 69 6e 69 6e 67  chema containing
20530 20 74 68 65 20 74 72 69 67 67 65 72 20 2a 2f 0a   the trigger */.
20540 20 20 53 63 68 65 6d 61 20 2a 70 54 61 62 53 63    Schema *pTabSc
20550 68 65 6d 61 3b 20 20 20 20 20 2f 2a 20 53 63 68  hema;     /* Sch
20560 65 6d 61 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74  ema containing t
20570 68 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20 54 72  he table */.  Tr
20580 69 67 67 65 72 53 74 65 70 20 2a 73 74 65 70 5f  iggerStep *step_
20590 6c 69 73 74 3b 20 2f 2a 20 4c 69 6e 6b 20 6c 69  list; /* Link li
205a0 73 74 20 6f 66 20 74 72 69 67 67 65 72 20 70 72  st of trigger pr
205b0 6f 67 72 61 6d 20 73 74 65 70 73 20 20 20 20 20  ogram steps     
205c0 20 20 20 20 20 20 20 20 2a 2f 0a 20 20 54 72 69          */.  Tri
205d0 67 67 65 72 20 2a 70 4e 65 78 74 3b 20 20 20 20  gger *pNext;    
205e0 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 74 72 69       /* Next tri
205f0 67 67 65 72 20 61 73 73 6f 63 69 61 74 65 64 20  gger associated 
20600 77 69 74 68 20 74 68 65 20 74 61 62 6c 65 20 2a  with the table *
20610 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20 74 72  /.};../*.** A tr
20620 69 67 67 65 72 20 69 73 20 65 69 74 68 65 72 20  igger is either 
20630 61 20 42 45 46 4f 52 45 20 6f 72 20 61 6e 20 41  a BEFORE or an A
20640 46 54 45 52 20 74 72 69 67 67 65 72 2e 20 20 54  FTER trigger.  T
20650 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 63 6f 6e  he following con
20660 73 74 61 6e 74 73 0a 2a 2a 20 64 65 74 65 72 6d  stants.** determ
20670 69 6e 65 20 77 68 69 63 68 2e 0a 2a 2a 0a 2a 2a  ine which..**.**
20680 20 49 66 20 74 68 65 72 65 20 61 72 65 20 6d 75   If there are mu
20690 6c 74 69 70 6c 65 20 74 72 69 67 67 65 72 73 2c  ltiple triggers,
206a0 20 79 6f 75 20 6d 69 67 68 74 20 6f 66 20 73 6f   you might of so
206b0 6d 65 20 42 45 46 4f 52 45 20 61 6e 64 20 73 6f  me BEFORE and so
206c0 6d 65 20 41 46 54 45 52 2e 0a 2a 2a 20 49 6e 20  me AFTER..** In 
206d0 74 68 61 74 20 63 61 73 65 73 2c 20 74 68 65 20  that cases, the 
206e0 63 6f 6e 73 74 61 6e 74 73 20 62 65 6c 6f 77 20  constants below 
206f0 63 61 6e 20 62 65 20 4f 52 65 64 20 74 6f 67 65  can be ORed toge
20700 74 68 65 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  ther..*/.#define
20710 20 54 52 49 47 47 45 52 5f 42 45 46 4f 52 45 20   TRIGGER_BEFORE 
20720 20 31 0a 23 64 65 66 69 6e 65 20 54 52 49 47 47   1.#define TRIGG
20730 45 52 5f 41 46 54 45 52 20 20 20 32 0a 0a 2f 2a  ER_AFTER   2../*
20740 0a 20 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20  . * An instance 
20750 6f 66 20 73 74 72 75 63 74 20 54 72 69 67 67 65  of struct Trigge
20760 72 53 74 65 70 20 69 73 20 75 73 65 64 20 74 6f  rStep is used to
20770 20 73 74 6f 72 65 20 61 20 73 69 6e 67 6c 65 20   store a single 
20780 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 0a 20 2a  SQL statement. *
20790 20 74 68 61 74 20 69 73 20 61 20 70 61 72 74 20   that is a part 
207a0 6f 66 20 61 20 74 72 69 67 67 65 72 2d 70 72 6f  of a trigger-pro
207b0 67 72 61 6d 2e 0a 20 2a 0a 20 2a 20 49 6e 73 74  gram.. *. * Inst
207c0 61 6e 63 65 73 20 6f 66 20 73 74 72 75 63 74 20  ances of struct 
207d0 54 72 69 67 67 65 72 53 74 65 70 20 61 72 65 20  TriggerStep are 
207e0 73 74 6f 72 65 64 20 69 6e 20 61 20 73 69 6e 67  stored in a sing
207f0 6c 79 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 28  ly linked list (
20800 6c 69 6e 6b 65 64 0a 20 2a 20 75 73 69 6e 67 20  linked. * using 
20810 74 68 65 20 22 70 4e 65 78 74 22 20 6d 65 6d 62  the "pNext" memb
20820 65 72 29 20 72 65 66 65 72 65 6e 63 65 64 20 62  er) referenced b
20830 79 20 74 68 65 20 22 73 74 65 70 5f 6c 69 73 74  y the "step_list
20840 22 20 6d 65 6d 62 65 72 20 6f 66 20 74 68 65 0a  " member of the.
20850 20 2a 20 61 73 73 6f 63 69 61 74 65 64 20 73 74   * associated st
20860 72 75 63 74 20 54 72 69 67 67 65 72 20 69 6e 73  ruct Trigger ins
20870 74 61 6e 63 65 2e 20 54 68 65 20 66 69 72 73 74  tance. The first
20880 20 65 6c 65 6d 65 6e 74 20 6f 66 20 74 68 65 20   element of the 
20890 6c 69 6e 6b 65 64 20 6c 69 73 74 20 69 73 0a 20  linked list is. 
208a0 2a 20 74 68 65 20 66 69 72 73 74 20 73 74 65 70  * the first step
208b0 20 6f 66 20 74 68 65 20 74 72 69 67 67 65 72 2d   of the trigger-
208c0 70 72 6f 67 72 61 6d 2e 0a 20 2a 0a 20 2a 20 54  program.. *. * T
208d0 68 65 20 22 6f 70 22 20 6d 65 6d 62 65 72 20 69  he "op" member i
208e0 6e 64 69 63 61 74 65 73 20 77 68 65 74 68 65 72  ndicates whether
208f0 20 74 68 69 73 20 69 73 20 61 20 22 44 45 4c 45   this is a "DELE
20900 54 45 22 2c 20 22 49 4e 53 45 52 54 22 2c 20 22  TE", "INSERT", "
20910 55 50 44 41 54 45 22 20 6f 72 0a 20 2a 20 22 53  UPDATE" or. * "S
20920 45 4c 45 43 54 22 20 73 74 61 74 65 6d 65 6e 74  ELECT" statement
20930 2e 20 54 68 65 20 6d 65 61 6e 69 6e 67 73 20 6f  . The meanings o
20940 66 20 74 68 65 20 6f 74 68 65 72 20 6d 65 6d 62  f the other memb
20950 65 72 73 20 69 73 20 64 65 74 65 72 6d 69 6e 65  ers is determine
20960 64 20 62 79 20 74 68 65 0a 20 2a 20 76 61 6c 75  d by the. * valu
20970 65 20 6f 66 20 22 6f 70 22 20 61 73 20 66 6f 6c  e of "op" as fol
20980 6c 6f 77 73 3a 0a 20 2a 0a 20 2a 20 28 6f 70 20  lows:. *. * (op 
20990 3d 3d 20 54 4b 5f 49 4e 53 45 52 54 29 0a 20 2a  == TK_INSERT). *
209a0 20 6f 72 63 6f 6e 66 20 20 20 20 2d 3e 20 73 74   orconf    -> st
209b0 6f 72 65 73 20 74 68 65 20 4f 4e 20 43 4f 4e 46  ores the ON CONF
209c0 4c 49 43 54 20 61 6c 67 6f 72 69 74 68 6d 0a 20  LICT algorithm. 
209d0 2a 20 70 53 65 6c 65 63 74 20 20 20 2d 3e 20 49  * pSelect   -> I
209e0 66 20 74 68 69 73 20 69 73 20 61 6e 20 49 4e 53  f this is an INS
209f0 45 52 54 20 49 4e 54 4f 20 2e 2e 2e 20 53 45 4c  ERT INTO ... SEL
20a00 45 43 54 20 2e 2e 2e 20 73 74 61 74 65 6d 65 6e  ECT ... statemen
20a10 74 2c 20 74 68 65 6e 0a 20 2a 20 20 20 20 20 20  t, then. *      
20a20 20 20 20 20 20 20 20 20 74 68 69 73 20 73 74 6f          this sto
20a30 72 65 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f  res a pointer to
20a40 20 74 68 65 20 53 45 4c 45 43 54 20 73 74 61 74   the SELECT stat
20a50 65 6d 65 6e 74 2e 20 4f 74 68 65 72 77 69 73 65  ement. Otherwise
20a60 20 4e 55 4c 4c 2e 0a 20 2a 20 7a 54 61 72 67 65   NULL.. * zTarge
20a70 74 20 20 20 2d 3e 20 44 65 71 75 6f 74 65 64 20  t   -> Dequoted 
20a80 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c  name of the tabl
20a90 65 20 74 6f 20 69 6e 73 65 72 74 20 69 6e 74 6f  e to insert into
20aa0 2e 0a 20 2a 20 70 45 78 70 72 4c 69 73 74 20 2d  .. * pExprList -
20ab0 3e 20 49 66 20 74 68 69 73 20 69 73 20 61 6e 20  > If this is an 
20ac0 49 4e 53 45 52 54 20 49 4e 54 4f 20 2e 2e 2e 20  INSERT INTO ... 
20ad0 56 41 4c 55 45 53 20 2e 2e 2e 20 73 74 61 74 65  VALUES ... state
20ae0 6d 65 6e 74 2c 20 74 68 65 6e 0a 20 2a 20 20 20  ment, then. *   
20af0 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73 20             this 
20b00 73 74 6f 72 65 73 20 76 61 6c 75 65 73 20 74 6f  stores values to
20b10 20 62 65 20 69 6e 73 65 72 74 65 64 2e 20 4f 74   be inserted. Ot
20b20 68 65 72 77 69 73 65 20 4e 55 4c 4c 2e 0a 20 2a  herwise NULL.. *
20b30 20 70 49 64 4c 69 73 74 20 20 20 2d 3e 20 49 66   pIdList   -> If
20b40 20 74 68 69 73 20 69 73 20 61 6e 20 49 4e 53 45   this is an INSE
20b50 52 54 20 49 4e 54 4f 20 2e 2e 2e 20 28 3c 63 6f  RT INTO ... (<co
20b60 6c 75 6d 6e 2d 6e 61 6d 65 73 3e 29 20 56 41 4c  lumn-names>) VAL
20b70 55 45 53 20 2e 2e 2e 0a 20 2a 20 20 20 20 20 20  UES .... *      
20b80 20 20 20 20 20 20 20 20 73 74 61 74 65 6d 65 6e          statemen
20b90 74 2c 20 74 68 65 6e 20 74 68 69 73 20 73 74 6f  t, then this sto
20ba0 72 65 73 20 74 68 65 20 63 6f 6c 75 6d 6e 2d 6e  res the column-n
20bb0 61 6d 65 73 20 74 6f 20 62 65 0a 20 2a 20 20 20  ames to be. *   
20bc0 20 20 20 20 20 20 20 20 20 20 20 69 6e 73 65 72             inser
20bd0 74 65 64 20 69 6e 74 6f 2e 0a 20 2a 0a 20 2a 20  ted into.. *. * 
20be0 28 6f 70 20 3d 3d 20 54 4b 5f 44 45 4c 45 54 45  (op == TK_DELETE
20bf0 29 0a 20 2a 20 7a 54 61 72 67 65 74 20 20 20 2d  ). * zTarget   -
20c00 3e 20 44 65 71 75 6f 74 65 64 20 6e 61 6d 65 20  > Dequoted name 
20c10 6f 66 20 74 68 65 20 74 61 62 6c 65 20 74 6f 20  of the table to 
20c20 64 65 6c 65 74 65 20 66 72 6f 6d 2e 0a 20 2a 20  delete from.. * 
20c30 70 57 68 65 72 65 20 20 20 20 2d 3e 20 54 68 65  pWhere    -> The
20c40 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 6f 66   WHERE clause of
20c50 20 74 68 65 20 44 45 4c 45 54 45 20 73 74 61 74   the DELETE stat
20c60 65 6d 65 6e 74 20 69 66 20 6f 6e 65 20 69 73 20  ement if one is 
20c70 73 70 65 63 69 66 69 65 64 2e 0a 20 2a 20 20 20  specified.. *   
20c80 20 20 20 20 20 20 20 20 20 20 20 4f 74 68 65 72             Other
20c90 77 69 73 65 20 4e 55 4c 4c 2e 0a 20 2a 0a 20 2a  wise NULL.. *. *
20ca0 20 28 6f 70 20 3d 3d 20 54 4b 5f 55 50 44 41 54   (op == TK_UPDAT
20cb0 45 29 0a 20 2a 20 7a 54 61 72 67 65 74 20 20 20  E). * zTarget   
20cc0 2d 3e 20 44 65 71 75 6f 74 65 64 20 6e 61 6d 65  -> Dequoted name
20cd0 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 74 6f   of the table to
20ce0 20 75 70 64 61 74 65 2e 0a 20 2a 20 70 57 68 65   update.. * pWhe
20cf0 72 65 20 20 20 20 2d 3e 20 54 68 65 20 57 48 45  re    -> The WHE
20d00 52 45 20 63 6c 61 75 73 65 20 6f 66 20 74 68 65  RE clause of the
20d10 20 55 50 44 41 54 45 20 73 74 61 74 65 6d 65 6e   UPDATE statemen
20d20 74 20 69 66 20 6f 6e 65 20 69 73 20 73 70 65 63  t if one is spec
20d30 69 66 69 65 64 2e 0a 20 2a 20 20 20 20 20 20 20  ified.. *       
20d40 20 20 20 20 20 20 20 4f 74 68 65 72 77 69 73 65         Otherwise
20d50 20 4e 55 4c 4c 2e 0a 20 2a 20 70 45 78 70 72 4c   NULL.. * pExprL
20d60 69 73 74 20 2d 3e 20 41 20 6c 69 73 74 20 6f 66  ist -> A list of
20d70 20 74 68 65 20 63 6f 6c 75 6d 6e 73 20 74 6f 20   the columns to 
20d80 75 70 64 61 74 65 20 61 6e 64 20 74 68 65 20 65  update and the e
20d90 78 70 72 65 73 73 69 6f 6e 73 20 74 6f 20 75 70  xpressions to up
20da0 64 61 74 65 0a 20 2a 20 20 20 20 20 20 20 20 20  date. *         
20db0 20 20 20 20 20 74 68 65 6d 20 74 6f 2e 20 53 65       them to. Se
20dc0 65 20 73 71 6c 69 74 65 33 55 70 64 61 74 65 28  e sqlite3Update(
20dd0 29 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 20  ) documentation 
20de0 6f 66 20 22 70 43 68 61 6e 67 65 73 22 0a 20 2a  of "pChanges". *
20df0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61 72                ar
20e00 67 75 6d 65 6e 74 2e 0a 20 2a 0a 20 2a 2f 0a 73  gument.. *. */.s
20e10 74 72 75 63 74 20 54 72 69 67 67 65 72 53 74 65  truct TriggerSte
20e20 70 20 7b 0a 20 20 75 38 20 6f 70 3b 20 20 20 20  p {.  u8 op;    
20e30 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e             /* On
20e40 65 20 6f 66 20 54 4b 5f 44 45 4c 45 54 45 2c 20  e of TK_DELETE, 
20e50 54 4b 5f 55 50 44 41 54 45 2c 20 54 4b 5f 49 4e  TK_UPDATE, TK_IN
20e60 53 45 52 54 2c 20 54 4b 5f 53 45 4c 45 43 54 20  SERT, TK_SELECT 
20e70 2a 2f 0a 20 20 75 38 20 6f 72 63 6f 6e 66 3b 20  */.  u8 orconf; 
20e80 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 45 5f            /* OE_
20e90 52 6f 6c 6c 62 61 63 6b 20 65 74 63 2e 20 2a 2f  Rollback etc. */
20ea0 0a 20 20 54 72 69 67 67 65 72 20 2a 70 54 72 69  .  Trigger *pTri
20eb0 67 3b 20 20 20 20 20 20 2f 2a 20 54 68 65 20 74  g;      /* The t
20ec0 72 69 67 67 65 72 20 74 68 61 74 20 74 68 69 73  rigger that this
20ed0 20 73 74 65 70 20 69 73 20 61 20 70 61 72 74 20   step is a part 
20ee0 6f 66 20 2a 2f 0a 20 20 53 65 6c 65 63 74 20 2a  of */.  Select *
20ef0 70 53 65 6c 65 63 74 3b 20 20 20 20 20 2f 2a 20  pSelect;     /* 
20f00 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74  SELECT statement
20f10 20 6f 72 20 52 48 53 20 6f 66 20 49 4e 53 45 52   or RHS of INSER
20f20 54 20 49 4e 54 4f 20 53 45 4c 45 43 54 20 2e 2e  T INTO SELECT ..
20f30 2e 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 54 61  . */.  char *zTa
20f40 72 67 65 74 3b 20 20 20 20 20 20 20 2f 2a 20 54  rget;       /* T
20f50 61 72 67 65 74 20 74 61 62 6c 65 20 66 6f 72 20  arget table for 
20f60 44 45 4c 45 54 45 2c 20 55 50 44 41 54 45 2c 20  DELETE, UPDATE, 
20f70 49 4e 53 45 52 54 20 2a 2f 0a 20 20 45 78 70 72  INSERT */.  Expr
20f80 20 2a 70 57 68 65 72 65 3b 20 20 20 20 20 20 20   *pWhere;       
20f90 20 2f 2a 20 54 68 65 20 57 48 45 52 45 20 63 6c   /* The WHERE cl
20fa0 61 75 73 65 20 66 6f 72 20 44 45 4c 45 54 45 20  ause for DELETE 
20fb0 6f 72 20 55 50 44 41 54 45 20 73 74 65 70 73 20  or UPDATE steps 
20fc0 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70  */.  ExprList *p
20fd0 45 78 70 72 4c 69 73 74 3b 20 2f 2a 20 53 45 54  ExprList; /* SET
20fe0 20 63 6c 61 75 73 65 20 66 6f 72 20 55 50 44 41   clause for UPDA
20ff0 54 45 2e 20 2a 2f 0a 20 20 49 64 4c 69 73 74 20  TE. */.  IdList 
21000 2a 70 49 64 4c 69 73 74 3b 20 20 20 20 20 2f 2a  *pIdList;     /*
21010 20 43 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 66 6f   Column names fo
21020 72 20 49 4e 53 45 52 54 20 2a 2f 0a 20 20 54 72  r INSERT */.  Tr
21030 69 67 67 65 72 53 74 65 70 20 2a 70 4e 65 78 74  iggerStep *pNext
21040 3b 20 20 2f 2a 20 4e 65 78 74 20 69 6e 20 74 68  ;  /* Next in th
21050 65 20 6c 69 6e 6b 2d 6c 69 73 74 20 2a 2f 0a 20  e link-list */. 
21060 20 54 72 69 67 67 65 72 53 74 65 70 20 2a 70 4c   TriggerStep *pL
21070 61 73 74 3b 20 20 2f 2a 20 4c 61 73 74 20 65 6c  ast;  /* Last el
21080 65 6d 65 6e 74 20 69 6e 20 6c 69 6e 6b 2d 6c 69  ement in link-li
21090 73 74 2e 20 56 61 6c 69 64 20 66 6f 72 20 31 73  st. Valid for 1s
210a0 74 20 65 6c 65 6d 20 6f 6e 6c 79 20 2a 2f 0a 7d  t elem only */.}
210b0 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c  ;../*.** The fol
210c0 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65  lowing structure
210d0 20 63 6f 6e 74 61 69 6e 73 20 69 6e 66 6f 72 6d   contains inform
210e0 61 74 69 6f 6e 20 75 73 65 64 20 62 79 20 74 68  ation used by th
210f0 65 20 73 71 6c 69 74 65 46 69 78 2e 2e 2e 0a 2a  e sqliteFix....*
21100 2a 20 72 6f 75 74 69 6e 65 73 20 61 73 20 74 68  * routines as th
21110 65 79 20 77 61 6c 6b 20 74 68 65 20 70 61 72 73  ey walk the pars
21120 65 20 74 72 65 65 20 74 6f 20 6d 61 6b 65 20 64  e tree to make d
21130 61 74 61 62 61 73 65 20 72 65 66 65 72 65 6e 63  atabase referenc
21140 65 73 0a 2a 2a 20 65 78 70 6c 69 63 69 74 2e 0a  es.** explicit..
21150 2a 2f 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  */.typedef struc
21160 74 20 44 62 46 69 78 65 72 20 44 62 46 69 78 65  t DbFixer DbFixe
21170 72 3b 0a 73 74 72 75 63 74 20 44 62 46 69 78 65  r;.struct DbFixe
21180 72 20 7b 0a 20 20 50 61 72 73 65 20 2a 70 50 61  r {.  Parse *pPa
21190 72 73 65 3b 20 20 20 20 20 20 2f 2a 20 54 68 65  rse;      /* The
211a0 20 70 61 72 73 69 6e 67 20 63 6f 6e 74 65 78 74   parsing context
211b0 2e 20 20 45 72 72 6f 72 20 6d 65 73 73 61 67 65  .  Error message
211c0 73 20 77 72 69 74 74 65 6e 20 68 65 72 65 20 2a  s written here *
211d0 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70 53 63 68  /.  Schema *pSch
211e0 65 6d 61 3b 20 20 20 20 2f 2a 20 46 69 78 20 69  ema;    /* Fix i
211f0 74 65 6d 73 20 74 6f 20 74 68 69 73 20 73 63 68  tems to this sch
21200 65 6d 61 20 2a 2f 0a 20 20 69 6e 74 20 62 56 61  ema */.  int bVa
21210 72 4f 6e 6c 79 3b 20 20 20 20 20 20 20 2f 2a 20  rOnly;       /* 
21220 43 68 65 63 6b 20 66 6f 72 20 76 61 72 69 61 62  Check for variab
21230 6c 65 20 72 65 66 65 72 65 6e 63 65 73 20 6f 6e  le references on
21240 6c 79 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68  ly */.  const ch
21250 61 72 20 2a 7a 44 62 3b 20 20 20 20 2f 2a 20 4d  ar *zDb;    /* M
21260 61 6b 65 20 73 75 72 65 20 61 6c 6c 20 6f 62 6a  ake sure all obj
21270 65 63 74 73 20 61 72 65 20 63 6f 6e 74 61 69 6e  ects are contain
21280 65 64 20 69 6e 20 74 68 69 73 20 64 61 74 61 62  ed in this datab
21290 61 73 65 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63  ase */.  const c
212a0 68 61 72 20 2a 7a 54 79 70 65 3b 20 20 2f 2a 20  har *zType;  /* 
212b0 54 79 70 65 20 6f 66 20 74 68 65 20 63 6f 6e 74  Type of the cont
212c0 61 69 6e 65 72 20 2d 20 75 73 65 64 20 66 6f 72  ainer - used for
212d0 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 73 20   error messages 
212e0 2a 2f 0a 20 20 63 6f 6e 73 74 20 54 6f 6b 65 6e  */.  const Token
212f0 20 2a 70 4e 61 6d 65 3b 20 2f 2a 20 4e 61 6d 65   *pName; /* Name
21300 20 6f 66 20 74 68 65 20 63 6f 6e 74 61 69 6e 65   of the containe
21310 72 20 2d 20 75 73 65 64 20 66 6f 72 20 65 72 72  r - used for err
21320 6f 72 20 6d 65 73 73 61 67 65 73 20 2a 2f 0a 7d  or messages */.}
21330 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 6f 62 6a 65  ;../*.** An obje
21340 63 74 65 64 20 75 73 65 64 20 74 6f 20 61 63 63  cted used to acc
21350 75 6d 75 6c 61 74 65 20 74 68 65 20 74 65 78 74  umulate the text
21360 20 6f 66 20 61 20 73 74 72 69 6e 67 20 77 68 65   of a string whe
21370 72 65 20 77 65 0a 2a 2a 20 64 6f 20 6e 6f 74 20  re we.** do not 
21380 6e 65 63 65 73 73 61 72 69 6c 79 20 6b 6e 6f 77  necessarily know
21390 20 68 6f 77 20 62 69 67 20 74 68 65 20 73 74 72   how big the str
213a0 69 6e 67 20 77 69 6c 6c 20 62 65 20 69 6e 20 74  ing will be in t
213b0 68 65 20 65 6e 64 2e 0a 2a 2f 0a 73 74 72 75 63  he end..*/.struc
213c0 74 20 53 74 72 41 63 63 75 6d 20 7b 0a 20 20 73  t StrAccum {.  s
213d0 71 6c 69 74 65 33 20 2a 64 62 3b 20 20 20 20 20  qlite3 *db;     
213e0 20 20 20 20 2f 2a 20 4f 70 74 69 6f 6e 61 6c 20      /* Optional 
213f0 64 61 74 61 62 61 73 65 20 66 6f 72 20 6c 6f 6f  database for loo
21400 6b 61 73 69 64 65 2e 20 20 43 61 6e 20 62 65 20  kaside.  Can be 
21410 4e 55 4c 4c 20 2a 2f 0a 20 20 63 68 61 72 20 2a  NULL */.  char *
21420 7a 42 61 73 65 3b 20 20 20 20 20 20 20 20 20 2f  zBase;         /
21430 2a 20 41 20 62 61 73 65 20 61 6c 6c 6f 63 61 74  * A base allocat
21440 69 6f 6e 2e 20 20 4e 6f 74 20 66 72 6f 6d 20 6d  ion.  Not from m
21450 61 6c 6c 6f 63 2e 20 2a 2f 0a 20 20 63 68 61 72  alloc. */.  char
21460 20 2a 7a 54 65 78 74 3b 20 20 20 20 20 20 20 20   *zText;        
21470 20 2f 2a 20 54 68 65 20 73 74 72 69 6e 67 20 63   /* The string c
21480 6f 6c 6c 65 63 74 65 64 20 73 6f 20 66 61 72 20  ollected so far 
21490 2a 2f 0a 20 20 75 33 32 20 20 6e 43 68 61 72 3b  */.  u32  nChar;
214a0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 65 6e            /* Len
214b0 67 74 68 20 6f 66 20 74 68 65 20 73 74 72 69 6e  gth of the strin
214c0 67 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20 75 33  g so far */.  u3
214d0 32 20 20 6e 41 6c 6c 6f 63 3b 20 20 20 20 20 20  2  nAlloc;      
214e0 20 20 20 2f 2a 20 41 6d 6f 75 6e 74 20 6f 66 20     /* Amount of 
214f0 73 70 61 63 65 20 61 6c 6c 6f 63 61 74 65 64 20  space allocated 
21500 69 6e 20 7a 54 65 78 74 20 2a 2f 0a 20 20 75 33  in zText */.  u3
21510 32 20 20 6d 78 41 6c 6c 6f 63 3b 20 20 20 20 20  2  mxAlloc;     
21520 20 20 20 2f 2a 20 4d 61 78 69 6d 75 6d 20 61 6c     /* Maximum al
21530 6c 6f 77 65 64 20 61 6c 6c 6f 63 61 74 69 6f 6e  lowed allocation
21540 2e 20 20 30 20 66 6f 72 20 6e 6f 20 6d 61 6c 6c  .  0 for no mall
21550 6f 63 20 75 73 61 67 65 20 2a 2f 0a 20 20 75 38  oc usage */.  u8
21560 20 20 20 61 63 63 45 72 72 6f 72 3b 20 20 20 20     accError;    
21570 20 20 20 2f 2a 20 53 54 52 41 43 43 55 4d 5f 4e     /* STRACCUM_N
21580 4f 4d 45 4d 20 6f 72 20 53 54 52 41 43 43 55 4d  OMEM or STRACCUM
21590 5f 54 4f 4f 42 49 47 20 2a 2f 0a 20 20 75 38 20  _TOOBIG */.  u8 
215a0 20 20 70 72 69 6e 74 66 46 6c 61 67 73 3b 20 20    printfFlags;  
215b0 20 20 2f 2a 20 53 51 4c 49 54 45 5f 50 52 49 4e    /* SQLITE_PRIN
215c0 54 46 20 66 6c 61 67 73 20 62 65 6c 6f 77 20 2a  TF flags below *
215d0 2f 0a 7d 3b 0a 23 64 65 66 69 6e 65 20 53 54 52  /.};.#define STR
215e0 41 43 43 55 4d 5f 4e 4f 4d 45 4d 20 20 20 31 0a  ACCUM_NOMEM   1.
215f0 23 64 65 66 69 6e 65 20 53 54 52 41 43 43 55 4d  #define STRACCUM
21600 5f 54 4f 4f 42 49 47 20 20 32 0a 23 64 65 66 69  _TOOBIG  2.#defi
21610 6e 65 20 53 51 4c 49 54 45 5f 50 52 49 4e 54 46  ne SQLITE_PRINTF
21620 5f 49 4e 54 45 52 4e 41 4c 20 30 78 30 31 20 20  _INTERNAL 0x01  
21630 2f 2a 20 49 6e 74 65 72 6e 61 6c 2d 75 73 65 2d  /* Internal-use-
21640 6f 6e 6c 79 20 63 6f 6e 76 65 72 74 65 72 73 20  only converters 
21650 61 6c 6c 6f 77 65 64 20 2a 2f 0a 23 64 65 66 69  allowed */.#defi
21660 6e 65 20 53 51 4c 49 54 45 5f 50 52 49 4e 54 46  ne SQLITE_PRINTF
21670 5f 53 51 4c 46 55 4e 43 20 20 30 78 30 32 20 20  _SQLFUNC  0x02  
21680 2f 2a 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 20  /* SQL function 
21690 61 72 67 75 6d 65 6e 74 73 20 74 6f 20 56 58 50  arguments to VXP
216a0 72 69 6e 74 66 20 2a 2f 0a 23 64 65 66 69 6e 65  rintf */.#define
216b0 20 53 51 4c 49 54 45 5f 50 52 49 4e 54 46 5f 4d   SQLITE_PRINTF_M
216c0 41 4c 4c 4f 43 45 44 20 30 78 30 34 20 20 2f 2a  ALLOCED 0x04  /*
216d0 20 54 72 75 65 20 69 66 20 78 54 65 78 74 20 69   True if xText i
216e0 73 20 61 6c 6c 6f 63 61 74 65 64 20 73 70 61 63  s allocated spac
216f0 65 20 2a 2f 0a 0a 23 64 65 66 69 6e 65 20 69 73  e */..#define is
21700 4d 61 6c 6c 6f 63 65 64 28 58 29 20 20 28 28 28  Malloced(X)  (((
21710 58 29 2d 3e 70 72 69 6e 74 66 46 6c 61 67 73 20  X)->printfFlags 
21720 26 20 53 51 4c 49 54 45 5f 50 52 49 4e 54 46 5f  & SQLITE_PRINTF_
21730 4d 41 4c 4c 4f 43 45 44 29 21 3d 30 29 0a 0a 0a  MALLOCED)!=0)...
21740 2f 2a 0a 2a 2a 20 41 20 70 6f 69 6e 74 65 72 20  /*.** A pointer 
21750 74 6f 20 74 68 69 73 20 73 74 72 75 63 74 75 72  to this structur
21760 65 20 69 73 20 75 73 65 64 20 74 6f 20 63 6f 6d  e is used to com
21770 6d 75 6e 69 63 61 74 65 20 69 6e 66 6f 72 6d 61  municate informa
21780 74 69 6f 6e 0a 2a 2a 20 66 72 6f 6d 20 73 71 6c  tion.** from sql
21790 69 74 65 33 49 6e 69 74 20 61 6e 64 20 4f 50 5f  ite3Init and OP_
217a0 50 61 72 73 65 53 63 68 65 6d 61 20 69 6e 74 6f  ParseSchema into
217b0 20 74 68 65 20 73 71 6c 69 74 65 33 49 6e 69 74   the sqlite3Init
217c0 43 61 6c 6c 62 61 63 6b 2e 0a 2a 2f 0a 74 79 70  Callback..*/.typ
217d0 65 64 65 66 20 73 74 72 75 63 74 20 7b 0a 20 20  edef struct {.  
217e0 73 71 6c 69 74 65 33 20 2a 64 62 3b 20 20 20 20  sqlite3 *db;    
217f0 20 20 20 20 2f 2a 20 54 68 65 20 64 61 74 61 62      /* The datab
21800 61 73 65 20 62 65 69 6e 67 20 69 6e 69 74 69 61  ase being initia
21810 6c 69 7a 65 64 20 2a 2f 0a 20 20 63 68 61 72 20  lized */.  char 
21820 2a 2a 70 7a 45 72 72 4d 73 67 3b 20 20 20 20 2f  **pzErrMsg;    /
21830 2a 20 45 72 72 6f 72 20 6d 65 73 73 61 67 65 20  * Error message 
21840 73 74 6f 72 65 64 20 68 65 72 65 20 2a 2f 0a 20  stored here */. 
21850 20 69 6e 74 20 69 44 62 3b 20 20 20 20 20 20 20   int iDb;       
21860 20 20 20 20 20 2f 2a 20 30 20 66 6f 72 20 6d 61       /* 0 for ma
21870 69 6e 20 64 61 74 61 62 61 73 65 2e 20 20 31 20  in database.  1 
21880 66 6f 72 20 54 45 4d 50 2c 20 32 2e 2e 20 66 6f  for TEMP, 2.. fo
21890 72 20 41 54 54 41 43 48 65 64 20 2a 2f 0a 20 20  r ATTACHed */.  
218a0 69 6e 74 20 72 63 3b 20 20 20 20 20 20 20 20 20  int rc;         
218b0 20 20 20 20 2f 2a 20 52 65 73 75 6c 74 20 63 6f      /* Result co
218c0 64 65 20 73 74 6f 72 65 64 20 68 65 72 65 20 2a  de stored here *
218d0 2f 0a 7d 20 49 6e 69 74 44 61 74 61 3b 0a 0a 2f  /.} InitData;../
218e0 2a 0a 2a 2a 20 53 74 72 75 63 74 75 72 65 20 63  *.** Structure c
218f0 6f 6e 74 61 69 6e 69 6e 67 20 67 6c 6f 62 61 6c  ontaining global
21900 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 64   configuration d
21910 61 74 61 20 66 6f 72 20 74 68 65 20 53 51 4c 69  ata for the SQLi
21920 74 65 20 6c 69 62 72 61 72 79 2e 0a 2a 2a 0a 2a  te library..**.*
21930 2a 20 54 68 69 73 20 73 74 72 75 63 74 75 72 65  * This structure
21940 20 61 6c 73 6f 20 63 6f 6e 74 61 69 6e 73 20 73   also contains s
21950 6f 6d 65 20 73 74 61 74 65 20 69 6e 66 6f 72 6d  ome state inform
21960 61 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74  ation..*/.struct
21970 20 53 71 6c 69 74 65 33 43 6f 6e 66 69 67 20 7b   Sqlite3Config {
21980 0a 20 20 69 6e 74 20 62 4d 65 6d 73 74 61 74 3b  .  int bMemstat;
21990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
219a0 20 20 20 20 20 2f 2a 20 54 72 75 65 20 74 6f 20       /* True to 
219b0 65 6e 61 62 6c 65 20 6d 65 6d 6f 72 79 20 73 74  enable memory st
219c0 61 74 75 73 20 2a 2f 0a 20 20 69 6e 74 20 62 43  atus */.  int bC
219d0 6f 72 65 4d 75 74 65 78 3b 20 20 20 20 20 20 20  oreMutex;       
219e0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
219f0 72 75 65 20 74 6f 20 65 6e 61 62 6c 65 20 63 6f  rue to enable co
21a00 72 65 20 6d 75 74 65 78 69 6e 67 20 2a 2f 0a 20  re mutexing */. 
21a10 20 69 6e 74 20 62 46 75 6c 6c 4d 75 74 65 78 3b   int bFullMutex;
21a20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21a30 20 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 65 6e     /* True to en
21a40 61 62 6c 65 20 66 75 6c 6c 20 6d 75 74 65 78 69  able full mutexi
21a50 6e 67 20 2a 2f 0a 20 20 69 6e 74 20 62 4f 70 65  ng */.  int bOpe
21a60 6e 55 72 69 3b 20 20 20 20 20 20 20 20 20 20 20  nUri;           
21a70 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75            /* Tru
21a80 65 20 74 6f 20 69 6e 74 65 72 70 72 65 74 20 66  e to interpret f
21a90 69 6c 65 6e 61 6d 65 73 20 61 73 20 55 52 49 73  ilenames as URIs
21aa0 20 2a 2f 0a 20 20 69 6e 74 20 62 55 73 65 43 69   */.  int bUseCi
21ab0 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  s;              
21ac0 20 20 20 20 20 20 20 20 2f 2a 20 55 73 65 20 63          /* Use c
21ad0 6f 76 65 72 69 6e 67 20 69 6e 64 69 63 65 73 20  overing indices 
21ae0 66 6f 72 20 66 75 6c 6c 2d 73 63 61 6e 73 20 2a  for full-scans *
21af0 2f 0a 20 20 69 6e 74 20 6d 78 53 74 72 6c 65 6e  /.  int mxStrlen
21b00 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
21b10 20 20 20 20 20 20 2f 2a 20 4d 61 78 69 6d 75 6d        /* Maximum
21b20 20 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 2a   string length *
21b30 2f 0a 20 20 69 6e 74 20 6e 65 76 65 72 43 6f 72  /.  int neverCor
21b40 72 75 70 74 3b 20 20 20 20 20 20 20 20 20 20 20  rupt;           
21b50 20 20 20 20 20 20 2f 2a 20 44 61 74 61 62 61 73        /* Databas
21b60 65 20 69 73 20 61 6c 77 61 79 73 20 77 65 6c 6c  e is always well
21b70 2d 66 6f 72 6d 65 64 20 2a 2f 0a 20 20 69 6e 74  -formed */.  int
21b80 20 73 7a 4c 6f 6f 6b 61 73 69 64 65 3b 20 20 20   szLookaside;   
21b90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
21ba0 2a 20 44 65 66 61 75 6c 74 20 6c 6f 6f 6b 61 73  * Default lookas
21bb0 69 64 65 20 62 75 66 66 65 72 20 73 69 7a 65 20  ide buffer size 
21bc0 2a 2f 0a 20 20 69 6e 74 20 6e 4c 6f 6f 6b 61 73  */.  int nLookas
21bd0 69 64 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ide;            
21be0 20 20 20 20 20 20 20 2f 2a 20 44 65 66 61 75 6c         /* Defaul
21bf0 74 20 6c 6f 6f 6b 61 73 69 64 65 20 62 75 66 66  t lookaside buff
21c00 65 72 20 63 6f 75 6e 74 20 2a 2f 0a 20 20 69 6e  er count */.  in
21c10 74 20 6e 53 74 6d 74 53 70 69 6c 6c 3b 20 20 20  t nStmtSpill;   
21c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21c30 2f 2a 20 53 74 6d 74 2d 6a 6f 75 72 6e 61 6c 20  /* Stmt-journal 
21c40 73 70 69 6c 6c 2d 74 6f 2d 64 69 73 6b 20 74 68  spill-to-disk th
21c50 72 65 73 68 6f 6c 64 20 2a 2f 0a 20 20 73 71 6c  reshold */.  sql
21c60 69 74 65 33 5f 6d 65 6d 5f 6d 65 74 68 6f 64 73  ite3_mem_methods
21c70 20 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f   m;            /
21c80 2a 20 4c 6f 77 2d 6c 65 76 65 6c 20 6d 65 6d 6f  * Low-level memo
21c90 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 69 6e  ry allocation in
21ca0 74 65 72 66 61 63 65 20 2a 2f 0a 20 20 73 71 6c  terface */.  sql
21cb0 69 74 65 33 5f 6d 75 74 65 78 5f 6d 65 74 68 6f  ite3_mutex_metho
21cc0 64 73 20 6d 75 74 65 78 3b 20 20 20 20 20 20 2f  ds mutex;      /
21cd0 2a 20 4c 6f 77 2d 6c 65 76 65 6c 20 6d 75 74 65  * Low-level mute
21ce0 78 20 69 6e 74 65 72 66 61 63 65 20 2a 2f 0a 20  x interface */. 
21cf0 20 73 71 6c 69 74 65 33 5f 70 63 61 63 68 65 5f   sqlite3_pcache_
21d00 6d 65 74 68 6f 64 73 32 20 70 63 61 63 68 65 32  methods2 pcache2
21d10 3b 20 20 2f 2a 20 4c 6f 77 2d 6c 65 76 65 6c 20  ;  /* Low-level 
21d20 70 61 67 65 2d 63 61 63 68 65 20 69 6e 74 65 72  page-cache inter
21d30 66 61 63 65 20 2a 2f 0a 20 20 76 6f 69 64 20 2a  face */.  void *
21d40 70 48 65 61 70 3b 20 20 20 20 20 20 20 20 20 20  pHeap;          
21d50 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 48              /* H
21d60 65 61 70 20 73 74 6f 72 61 67 65 20 73 70 61 63  eap storage spac
21d70 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 48 65 61 70  e */.  int nHeap
21d80 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
21d90 20 20 20 20 20 20 20 20 20 2f 2a 20 53 69 7a 65           /* Size
21da0 20 6f 66 20 70 48 65 61 70 5b 5d 20 2a 2f 0a 20   of pHeap[] */. 
21db0 20 69 6e 74 20 6d 6e 52 65 71 2c 20 6d 78 52 65   int mnReq, mxRe
21dc0 71 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  q;              
21dd0 20 20 20 2f 2a 20 4d 69 6e 20 61 6e 64 20 6d 61     /* Min and ma
21de0 78 20 68 65 61 70 20 72 65 71 75 65 73 74 73 20  x heap requests 
21df0 73 69 7a 65 73 20 2a 2f 0a 20 20 73 71 6c 69 74  sizes */.  sqlit
21e00 65 33 5f 69 6e 74 36 34 20 73 7a 4d 6d 61 70 3b  e3_int64 szMmap;
21e10 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
21e20 6d 6d 61 70 28 29 20 73 70 61 63 65 20 70 65 72  mmap() space per
21e30 20 6f 70 65 6e 20 66 69 6c 65 20 2a 2f 0a 20 20   open file */.  
21e40 73 71 6c 69 74 65 33 5f 69 6e 74 36 34 20 6d 78  sqlite3_int64 mx
21e50 4d 6d 61 70 3b 20 20 20 20 20 20 20 20 20 20 20  Mmap;           
21e60 20 20 2f 2a 20 4d 61 78 69 6d 75 6d 20 76 61 6c    /* Maximum val
21e70 75 65 20 66 6f 72 20 73 7a 4d 6d 61 70 20 2a 2f  ue for szMmap */
21e80 0a 20 20 76 6f 69 64 20 2a 70 53 63 72 61 74 63  .  void *pScratc
21e90 68 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  h;              
21ea0 20 20 20 20 20 2f 2a 20 53 63 72 61 74 63 68 20       /* Scratch 
21eb0 6d 65 6d 6f 72 79 20 2a 2f 0a 20 20 69 6e 74 20  memory */.  int 
21ec0 73 7a 53 63 72 61 74 63 68 3b 20 20 20 20 20 20  szScratch;      
21ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
21ee0 20 53 69 7a 65 20 6f 66 20 65 61 63 68 20 73 63   Size of each sc
21ef0 72 61 74 63 68 20 62 75 66 66 65 72 20 2a 2f 0a  ratch buffer */.
21f00 20 20 69 6e 74 20 6e 53 63 72 61 74 63 68 3b 20    int nScratch; 
21f10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21f20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
21f30 20 73 63 72 61 74 63 68 20 62 75 66 66 65 72 73   scratch buffers
21f40 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 50 61 67   */.  void *pPag
21f50 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e;              
21f60 20 20 20 20 20 20 20 20 2f 2a 20 50 61 67 65 20          /* Page 
21f70 63 61 63 68 65 20 6d 65 6d 6f 72 79 20 2a 2f 0a  cache memory */.
21f80 20 20 69 6e 74 20 73 7a 50 61 67 65 3b 20 20 20    int szPage;   
21f90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21fa0 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20 65      /* Size of e
21fb0 61 63 68 20 70 61 67 65 20 69 6e 20 70 50 61 67  ach page in pPag
21fc0 65 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 6e 50 61  e[] */.  int nPa
21fd0 67 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ge;             
21fe0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
21ff0 6d 62 65 72 20 6f 66 20 70 61 67 65 73 20 69 6e  mber of pages in
22000 20 70 50 61 67 65 5b 5d 20 2a 2f 0a 20 20 69 6e   pPage[] */.  in
22010 74 20 6d 78 50 61 72 73 65 72 53 74 61 63 6b 3b  t mxParserStack;
22020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22030 2f 2a 20 6d 61 78 69 6d 75 6d 20 64 65 70 74 68  /* maximum depth
22040 20 6f 66 20 74 68 65 20 70 61 72 73 65 72 20 73   of the parser s
22050 74 61 63 6b 20 2a 2f 0a 20 20 69 6e 74 20 73 68  tack */.  int sh
22060 61 72 65 64 43 61 63 68 65 45 6e 61 62 6c 65 64  aredCacheEnabled
22070 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 74  ;           /* t
22080 72 75 65 20 69 66 20 73 68 61 72 65 64 2d 63 61  rue if shared-ca
22090 63 68 65 20 6d 6f 64 65 20 65 6e 61 62 6c 65 64  che mode enabled
220a0 20 2a 2f 0a 20 20 75 33 32 20 73 7a 50 6d 61 3b   */.  u32 szPma;
220b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
220c0 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 78 69 6d          /* Maxim
220d0 75 6d 20 53 6f 72 74 65 72 20 50 4d 41 20 73 69  um Sorter PMA si
220e0 7a 65 20 2a 2f 0a 20 20 2f 2a 20 54 68 65 20 61  ze */.  /* The a
220f0 62 6f 76 65 20 6d 69 67 68 74 20 62 65 20 69 6e  bove might be in
22100 69 74 69 61 6c 69 7a 65 64 20 74 6f 20 6e 6f 6e  itialized to non
22110 2d 7a 65 72 6f 2e 20 20 54 68 65 20 66 6f 6c 6c  -zero.  The foll
22120 6f 77 69 6e 67 20 6e 65 65 64 20 74 6f 20 61 6c  owing need to al
22130 77 61 79 73 0a 20 20 2a 2a 20 69 6e 69 74 69 61  ways.  ** initia
22140 6c 6c 79 20 62 65 20 7a 65 72 6f 2c 20 68 6f 77  lly be zero, how
22150 65 76 65 72 2e 20 2a 2f 0a 20 20 69 6e 74 20 69  ever. */.  int i
22160 73 49 6e 69 74 3b 20 20 20 20 20 20 20 20 20 20  sInit;          
22170 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
22180 54 72 75 65 20 61 66 74 65 72 20 69 6e 69 74 69  True after initi
22190 61 6c 69 7a 61 74 69 6f 6e 20 68 61 73 20 66 69  alization has fi
221a0 6e 69 73 68 65 64 20 2a 2f 0a 20 20 69 6e 74 20  nished */.  int 
221b0 69 6e 50 72 6f 67 72 65 73 73 3b 20 20 20 20 20  inProgress;     
221c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
221d0 20 54 72 75 65 20 77 68 69 6c 65 20 69 6e 69 74   True while init
221e0 69 61 6c 69 7a 61 74 69 6f 6e 20 69 6e 20 70 72  ialization in pr
221f0 6f 67 72 65 73 73 20 2a 2f 0a 20 20 69 6e 74 20  ogress */.  int 
22200 69 73 4d 75 74 65 78 49 6e 69 74 3b 20 20 20 20  isMutexInit;    
22210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
22220 20 54 72 75 65 20 61 66 74 65 72 20 6d 75 74 65   True after mute
22230 78 65 73 20 61 72 65 20 69 6e 69 74 69 61 6c 69  xes are initiali
22240 7a 65 64 20 2a 2f 0a 20 20 69 6e 74 20 69 73 4d  zed */.  int isM
22250 61 6c 6c 6f 63 49 6e 69 74 3b 20 20 20 20 20 20  allocInit;      
22260 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72             /* Tr
22270 75 65 20 61 66 74 65 72 20 6d 61 6c 6c 6f 63 20  ue after malloc 
22280 69 73 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a  is initialized *
22290 2f 0a 20 20 69 6e 74 20 69 73 50 43 61 63 68 65  /.  int isPCache
222a0 49 6e 69 74 3b 20 20 20 20 20 20 20 20 20 20 20  Init;           
222b0 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 61 66        /* True af
222c0 74 65 72 20 6d 61 6c 6c 6f 63 20 69 73 20 69 6e  ter malloc is in
222d0 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 69  itialized */.  i
222e0 6e 74 20 6e 52 65 66 49 6e 69 74 4d 75 74 65 78  nt nRefInitMutex
222f0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
22300 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 75 73   /* Number of us
22310 65 72 73 20 6f 66 20 70 49 6e 69 74 4d 75 74 65  ers of pInitMute
22320 78 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 6d  x */.  sqlite3_m
22330 75 74 65 78 20 2a 70 49 6e 69 74 4d 75 74 65 78  utex *pInitMutex
22340 3b 20 20 20 20 20 20 20 20 2f 2a 20 4d 75 74 65  ;        /* Mute
22350 78 20 75 73 65 64 20 62 79 20 73 71 6c 69 74 65  x used by sqlite
22360 33 5f 69 6e 69 74 69 61 6c 69 7a 65 28 29 20 2a  3_initialize() *
22370 2f 0a 20 20 76 6f 69 64 20 28 2a 78 4c 6f 67 29  /.  void (*xLog)
22380 28 76 6f 69 64 2a 2c 69 6e 74 2c 63 6f 6e 73 74  (void*,int,const
22390 20 63 68 61 72 2a 29 3b 20 2f 2a 20 46 75 6e 63   char*); /* Func
223a0 74 69 6f 6e 20 66 6f 72 20 6c 6f 67 67 69 6e 67  tion for logging
223b0 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 4c 6f 67   */.  void *pLog
223c0 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20  Arg;            
223d0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 69             /* Fi
223e0 72 73 74 20 61 72 67 75 6d 65 6e 74 20 74 6f 20  rst argument to 
223f0 78 4c 6f 67 28 29 20 2a 2f 0a 23 69 66 64 65 66  xLog() */.#ifdef
22400 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53   SQLITE_ENABLE_S
22410 51 4c 4c 4f 47 0a 20 20 76 6f 69 64 28 2a 78 53  QLLOG.  void(*xS
22420 71 6c 6c 6f 67 29 28 76 6f 69 64 2a 2c 73 71 6c  qllog)(void*,sql
22430 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72  ite3*,const char
22440 2a 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20  *, int);.  void 
22450 2a 70 53 71 6c 6c 6f 67 41 72 67 3b 0a 23 65 6e  *pSqllogArg;.#en
22460 64 69 66 0a 23 69 66 64 65 66 20 53 51 4c 49 54  dif.#ifdef SQLIT
22470 45 5f 56 44 42 45 5f 43 4f 56 45 52 41 47 45 0a  E_VDBE_COVERAGE.
22480 20 20 2f 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69    /* The followi
22490 6e 67 20 63 61 6c 6c 62 61 63 6b 20 28 69 66 20  ng callback (if 
224a0 6e 6f 74 20 4e 55 4c 4c 29 20 69 73 20 69 6e 76  not NULL) is inv
224b0 6f 6b 65 64 20 6f 6e 20 65 76 65 72 79 20 56 44  oked on every VD
224c0 42 45 20 62 72 61 6e 63 68 0a 20 20 2a 2a 20 6f  BE branch.  ** o
224d0 70 65 72 61 74 69 6f 6e 2e 20 20 53 65 74 20 74  peration.  Set t
224e0 68 65 20 63 61 6c 6c 62 61 63 6b 20 75 73 69 6e  he callback usin
224f0 67 20 53 51 4c 49 54 45 5f 54 45 53 54 43 54 52  g SQLITE_TESTCTR
22500 4c 5f 56 44 42 45 5f 43 4f 56 45 52 41 47 45 2e  L_VDBE_COVERAGE.
22510 0a 20 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78  .  */.  void (*x
22520 56 64 62 65 42 72 61 6e 63 68 29 28 76 6f 69 64  VdbeBranch)(void
22530 2a 2c 69 6e 74 20 69 53 72 63 4c 69 6e 65 2c 75  *,int iSrcLine,u
22540 38 20 65 54 68 69 73 2c 75 38 20 65 4d 78 29 3b  8 eThis,u8 eMx);
22550 20 20 2f 2a 20 43 61 6c 6c 62 61 63 6b 20 2a 2f    /* Callback */
22560 0a 20 20 76 6f 69 64 20 2a 70 56 64 62 65 42 72  .  void *pVdbeBr
22570 61 6e 63 68 41 72 67 3b 20 20 20 20 20 20 20 20  anchArg;        
22580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22590 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
225a0 31 73 74 20 61 72 67 75 6d 65 6e 74 20 2a 2f 0a  1st argument */.
225b0 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53  #endif.#ifndef S
225c0 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 55 49 4c 54  QLITE_OMIT_BUILT
225d0 49 4e 5f 54 45 53 54 0a 20 20 69 6e 74 20 28 2a  IN_TEST.  int (*
225e0 78 54 65 73 74 43 61 6c 6c 62 61 63 6b 29 28 69  xTestCallback)(i
225f0 6e 74 29 3b 20 20 20 20 20 20 20 20 2f 2a 20 49  nt);        /* I
22600 6e 76 6f 6b 65 64 20 62 79 20 73 71 6c 69 74 65  nvoked by sqlite
22610 33 46 61 75 6c 74 53 69 6d 28 29 20 2a 2f 0a 23  3FaultSim() */.#
22620 65 6e 64 69 66 0a 20 20 69 6e 74 20 62 4c 6f 63  endif.  int bLoc
22630 61 6c 74 69 6d 65 46 61 75 6c 74 3b 20 20 20 20  altimeFault;    
22640 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75            /* Tru
22650 65 20 74 6f 20 66 61 69 6c 20 6c 6f 63 61 6c 74  e to fail localt
22660 69 6d 65 28 29 20 63 61 6c 6c 73 20 2a 2f 0a 7d  ime() calls */.}
22670 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 6d 61  ;../*.** This ma
22680 63 72 6f 20 69 73 20 75 73 65 64 20 69 6e 73 69  cro is used insi
22690 64 65 20 6f 66 20 61 73 73 65 72 74 28 29 20 73  de of assert() s
226a0 74 61 74 65 6d 65 6e 74 73 20 74 6f 20 69 6e 64  tatements to ind
226b0 69 63 61 74 65 20 74 68 61 74 0a 2a 2a 20 74 68  icate that.** th
226c0 65 20 61 73 73 65 72 74 20 69 73 20 6f 6e 6c 79  e assert is only
226d0 20 76 61 6c 69 64 20 6f 6e 20 61 20 77 65 6c 6c   valid on a well
226e0 2d 66 6f 72 6d 65 64 20 64 61 74 61 62 61 73 65  -formed database
226f0 2e 20 20 49 6e 73 74 65 61 64 20 6f 66 3a 0a 2a  .  Instead of:.*
22700 2a 0a 2a 2a 20 20 20 20 20 61 73 73 65 72 74 28  *.**     assert(
22710 20 58 20 29 3b 0a 2a 2a 0a 2a 2a 20 4f 6e 65 20   X );.**.** One 
22720 77 72 69 74 65 73 3a 0a 2a 2a 0a 2a 2a 20 20 20  writes:.**.**   
22730 20 20 61 73 73 65 72 74 28 20 58 20 7c 7c 20 43    assert( X || C
22740 4f 52 52 55 50 54 5f 44 42 20 29 3b 0a 2a 2a 0a  ORRUPT_DB );.**.
22750 2a 2a 20 43 4f 52 52 55 50 54 5f 44 42 20 69 73  ** CORRUPT_DB is
22760 20 74 72 75 65 20 64 75 72 69 6e 67 20 6e 6f 72   true during nor
22770 6d 61 6c 20 6f 70 65 72 61 74 69 6f 6e 2e 20 20  mal operation.  
22780 43 4f 52 52 55 50 54 5f 44 42 20 64 6f 65 73 20  CORRUPT_DB does 
22790 6e 6f 74 20 69 6e 64 69 63 61 74 65 0a 2a 2a 20  not indicate.** 
227a0 74 68 61 74 20 74 68 65 20 64 61 74 61 62 61 73  that the databas
227b0 65 20 69 73 20 64 65 66 69 6e 69 74 65 6c 79 20  e is definitely 
227c0 63 6f 72 72 75 70 74 2c 20 6f 6e 6c 79 20 74 68  corrupt, only th
227d0 61 74 20 69 74 20 6d 69 67 68 74 20 62 65 20 63  at it might be c
227e0 6f 72 72 75 70 74 2e 0a 2a 2a 20 46 6f 72 20 6d  orrupt..** For m
227f0 6f 73 74 20 74 65 73 74 20 63 61 73 65 73 2c 20  ost test cases, 
22800 43 4f 52 52 55 50 54 5f 44 42 20 69 73 20 73 65  CORRUPT_DB is se
22810 74 20 74 6f 20 66 61 6c 73 65 20 75 73 69 6e 67  t to false using
22820 20 61 20 73 70 65 63 69 61 6c 0a 2a 2a 20 73 71   a special.** sq
22830 6c 69 74 65 33 5f 74 65 73 74 5f 63 6f 6e 74 72  lite3_test_contr
22840 6f 6c 28 29 2e 20 20 54 68 69 73 20 65 6e 61 62  ol().  This enab
22850 6c 65 73 20 61 73 73 65 72 74 28 29 20 73 74 61  les assert() sta
22860 74 65 6d 65 6e 74 73 20 74 6f 20 70 72 6f 76 65  tements to prove
22870 0a 2a 2a 20 74 68 69 6e 67 73 20 74 68 61 74 20  .** things that 
22880 61 72 65 20 61 6c 77 61 79 73 20 74 72 75 65 20  are always true 
22890 66 6f 72 20 77 65 6c 6c 2d 66 6f 72 6d 65 64 20  for well-formed 
228a0 64 61 74 61 62 61 73 65 73 2e 0a 2a 2f 0a 23 64  databases..*/.#d
228b0 65 66 69 6e 65 20 43 4f 52 52 55 50 54 5f 44 42  efine CORRUPT_DB
228c0 20 20 28 73 71 6c 69 74 65 33 43 6f 6e 66 69 67    (sqlite3Config
228d0 2e 6e 65 76 65 72 43 6f 72 72 75 70 74 3d 3d 30  .neverCorrupt==0
228e0 29 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6e 74 65 78 74  )../*.** Context
228f0 20 70 6f 69 6e 74 65 72 20 70 61 73 73 65 64 20   pointer passed 
22900 64 6f 77 6e 20 74 68 72 6f 75 67 68 20 74 68 65  down through the
22910 20 74 72 65 65 2d 77 61 6c 6b 2e 0a 2a 2f 0a 73   tree-walk..*/.s
22920 74 72 75 63 74 20 57 61 6c 6b 65 72 20 7b 0a 20  truct Walker {. 
22930 20 50 61 72 73 65 20 2a 70 50 61 72 73 65 3b 20   Parse *pParse; 
22940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22950 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50 61             /* Pa
22960 72 73 65 72 20 63 6f 6e 74 65 78 74 2e 20 20 2a  rser context.  *
22970 2f 0a 20 20 69 6e 74 20 28 2a 78 45 78 70 72 43  /.  int (*xExprC
22980 61 6c 6c 62 61 63 6b 29 28 57 61 6c 6b 65 72 2a  allback)(Walker*
22990 2c 20 45 78 70 72 2a 29 3b 20 20 20 20 20 2f 2a  , Expr*);     /*
229a0 20 43 61 6c 6c 62 61 63 6b 20 66 6f 72 20 65 78   Callback for ex
229b0 70 72 65 73 73 69 6f 6e 73 20 2a 2f 0a 20 20 69  pressions */.  i
229c0 6e 74 20 28 2a 78 53 65 6c 65 63 74 43 61 6c 6c  nt (*xSelectCall
229d0 62 61 63 6b 29 28 57 61 6c 6b 65 72 2a 2c 53 65  back)(Walker*,Se
229e0 6c 65 63 74 2a 29 3b 20 20 2f 2a 20 43 61 6c 6c  lect*);  /* Call
229f0 62 61 63 6b 20 66 6f 72 20 53 45 4c 45 43 54 73  back for SELECTs
22a00 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 53 65   */.  void (*xSe
22a10 6c 65 63 74 43 61 6c 6c 62 61 63 6b 32 29 28 57  lectCallback2)(W
22a20 61 6c 6b 65 72 2a 2c 53 65 6c 65 63 74 2a 29 3b  alker*,Select*);
22a30 2f 2a 20 53 65 63 6f 6e 64 20 63 61 6c 6c 62 61  /* Second callba
22a40 63 6b 20 66 6f 72 20 53 45 4c 45 43 54 73 20 2a  ck for SELECTs *
22a50 2f 0a 20 20 69 6e 74 20 77 61 6c 6b 65 72 44 65  /.  int walkerDe
22a60 70 74 68 3b 20 20 20 20 20 20 20 20 20 20 20 20  pth;            
22a70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
22a80 20 4e 75 6d 62 65 72 20 6f 66 20 73 75 62 71 75   Number of subqu
22a90 65 72 69 65 73 20 2a 2f 0a 20 20 75 38 20 65 43  eries */.  u8 eC
22aa0 6f 64 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ode;            
22ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22ac0 20 20 20 20 20 2f 2a 20 41 20 73 6d 61 6c 6c 20       /* A small 
22ad0 70 72 6f 63 65 73 73 69 6e 67 20 63 6f 64 65 20  processing code 
22ae0 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b 20 20 20 20  */.  union {    
22af0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22b00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
22b10 2a 20 45 78 74 72 61 20 64 61 74 61 20 66 6f 72  * Extra data for
22b20 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 20   callback */.   
22b30 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20 2a 70 4e   NameContext *pN
22b40 43 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  C;              
22b50 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
22b60 61 6d 69 6e 67 20 63 6f 6e 74 65 78 74 20 2a 2f  aming context */
22b70 0a 20 20 20 20 69 6e 74 20 6e 3b 20 20 20 20 20  .    int n;     
22b80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22b90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22ba0 2f 2a 20 41 20 63 6f 75 6e 74 65 72 20 2a 2f 0a  /* A counter */.
22bb0 20 20 20 20 69 6e 74 20 69 43 75 72 3b 20 20 20      int iCur;   
22bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
22be0 2a 20 41 20 63 75 72 73 6f 72 20 6e 75 6d 62 65  * A cursor numbe
22bf0 72 20 2a 2f 0a 20 20 20 20 53 72 63 4c 69 73 74  r */.    SrcList
22c00 20 2a 70 53 72 63 4c 69 73 74 3b 20 20 20 20 20   *pSrcList;     
22c10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22c20 20 20 20 20 2f 2a 20 46 52 4f 4d 20 63 6c 61 75      /* FROM clau
22c30 73 65 20 2a 2f 0a 20 20 20 20 73 74 72 75 63 74  se */.    struct
22c40 20 53 72 63 43 6f 75 6e 74 20 2a 70 53 72 63 43   SrcCount *pSrcC
22c50 6f 75 6e 74 3b 20 20 20 20 20 20 20 20 20 20 20  ount;           
22c60 20 20 20 20 20 2f 2a 20 43 6f 75 6e 74 69 6e 67       /* Counting
22c70 20 63 6f 6c 75 6d 6e 20 72 65 66 65 72 65 6e 63   column referenc
22c80 65 73 20 2a 2f 0a 20 20 20 20 73 74 72 75 63 74  es */.    struct
22c90 20 43 43 75 72 48 69 6e 74 20 2a 70 43 43 75 72   CCurHint *pCCur
22ca0 48 69 6e 74 3b 20 20 20 20 20 20 20 20 20 20 20  Hint;           
22cb0 20 20 20 20 20 2f 2a 20 55 73 65 64 20 62 79 20       /* Used by 
22cc0 63 6f 64 65 43 75 72 73 6f 72 48 69 6e 74 28 29  codeCursorHint()
22cd0 20 2a 2f 0a 20 20 20 20 69 6e 74 20 2a 61 69 43   */.    int *aiC
22ce0 6f 6c 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ol;             
22cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22d00 20 20 20 2f 2a 20 61 72 72 61 79 20 6f 66 20 63     /* array of c
22d10 6f 6c 75 6d 6e 20 69 6e 64 65 78 65 73 20 2a 2f  olumn indexes */
22d20 0a 20 20 7d 20 75 3b 0a 7d 3b 0a 0a 2f 2a 20 46  .  } u;.};../* F
22d30 6f 72 77 61 72 64 20 64 65 63 6c 61 72 61 74 69  orward declarati
22d40 6f 6e 73 20 2a 2f 0a 69 6e 74 20 73 71 6c 69 74  ons */.int sqlit
22d50 65 33 57 61 6c 6b 45 78 70 72 28 57 61 6c 6b 65  e3WalkExpr(Walke
22d60 72 2a 2c 20 45 78 70 72 2a 29 3b 0a 69 6e 74 20  r*, Expr*);.int 
22d70 73 71 6c 69 74 65 33 57 61 6c 6b 45 78 70 72 4c  sqlite3WalkExprL
22d80 69 73 74 28 57 61 6c 6b 65 72 2a 2c 20 45 78 70  ist(Walker*, Exp
22d90 72 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c  rList*);.int sql
22da0 69 74 65 33 57 61 6c 6b 53 65 6c 65 63 74 28 57  ite3WalkSelect(W
22db0 61 6c 6b 65 72 2a 2c 20 53 65 6c 65 63 74 2a 29  alker*, Select*)
22dc0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 61 6c  ;.int sqlite3Wal
22dd0 6b 53 65 6c 65 63 74 45 78 70 72 28 57 61 6c 6b  kSelectExpr(Walk
22de0 65 72 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 69  er*, Select*);.i
22df0 6e 74 20 73 71 6c 69 74 65 33 57 61 6c 6b 53 65  nt sqlite3WalkSe
22e00 6c 65 63 74 46 72 6f 6d 28 57 61 6c 6b 65 72 2a  lectFrom(Walker*
22e10 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 69 6e 74 20  , Select*);.int 
22e20 73 71 6c 69 74 65 33 45 78 70 72 57 61 6c 6b 4e  sqlite3ExprWalkN
22e30 6f 6f 70 28 57 61 6c 6b 65 72 2a 2c 20 45 78 70  oop(Walker*, Exp
22e40 72 2a 29 3b 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75  r*);../*.** Retu
22e50 72 6e 20 63 6f 64 65 20 66 72 6f 6d 20 74 68 65  rn code from the
22e60 20 70 61 72 73 65 2d 74 72 65 65 20 77 61 6c 6b   parse-tree walk
22e70 69 6e 67 20 70 72 69 6d 69 74 69 76 65 73 20 61  ing primitives a
22e80 6e 64 20 74 68 65 69 72 0a 2a 2a 20 63 61 6c 6c  nd their.** call
22e90 62 61 63 6b 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e  backs..*/.#defin
22ea0 65 20 57 52 43 5f 43 6f 6e 74 69 6e 75 65 20 20  e WRC_Continue  
22eb0 20 20 30 20 20 20 2f 2a 20 43 6f 6e 74 69 6e 75    0   /* Continu
22ec0 65 20 64 6f 77 6e 20 69 6e 74 6f 20 63 68 69 6c  e down into chil
22ed0 64 72 65 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  dren */.#define 
22ee0 57 52 43 5f 50 72 75 6e 65 20 20 20 20 20 20 20  WRC_Prune       
22ef0 31 20 20 20 2f 2a 20 4f 6d 69 74 20 63 68 69 6c  1   /* Omit chil
22f00 64 72 65 6e 20 62 75 74 20 63 6f 6e 74 69 6e 75  dren but continu
22f10 65 20 77 61 6c 6b 69 6e 67 20 73 69 62 6c 69 6e  e walking siblin
22f20 67 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 52  gs */.#define WR
22f30 43 5f 41 62 6f 72 74 20 20 20 20 20 20 20 32 20  C_Abort       2 
22f40 20 20 2f 2a 20 41 62 61 6e 64 6f 6e 20 74 68 65    /* Abandon the
22f50 20 74 72 65 65 20 77 61 6c 6b 20 2a 2f 0a 0a 2f   tree walk */../
22f60 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65  *.** An instance
22f70 20 6f 66 20 74 68 69 73 20 73 74 72 75 63 74 75   of this structu
22f80 72 65 20 72 65 70 72 65 73 65 6e 74 73 20 61 20  re represents a 
22f90 73 65 74 20 6f 66 20 6f 6e 65 20 6f 72 20 6d 6f  set of one or mo
22fa0 72 65 20 43 54 45 73 0a 2a 2a 20 28 63 6f 6d 6d  re CTEs.** (comm
22fb0 6f 6e 20 74 61 62 6c 65 20 65 78 70 72 65 73 73  on table express
22fc0 69 6f 6e 73 29 20 63 72 65 61 74 65 64 20 62 79  ions) created by
22fd0 20 61 20 73 69 6e 67 6c 65 20 57 49 54 48 20 63   a single WITH c
22fe0 6c 61 75 73 65 2e 0a 2a 2f 0a 73 74 72 75 63 74  lause..*/.struct
22ff0 20 57 69 74 68 20 7b 0a 20 20 69 6e 74 20 6e 43   With {.  int nC
23000 74 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  te;             
23010 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
23020 62 65 72 20 6f 66 20 43 54 45 73 20 69 6e 20 74  ber of CTEs in t
23030 68 65 20 57 49 54 48 20 63 6c 61 75 73 65 20 2a  he WITH clause *
23040 2f 0a 20 20 57 69 74 68 20 2a 70 4f 75 74 65 72  /.  With *pOuter
23050 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
23060 20 20 20 20 2f 2a 20 43 6f 6e 74 61 69 6e 69 6e      /* Containin
23070 67 20 57 49 54 48 20 63 6c 61 75 73 65 2c 20 6f  g WITH clause, o
23080 72 20 4e 55 4c 4c 20 2a 2f 0a 20 20 73 74 72 75  r NULL */.  stru
23090 63 74 20 43 74 65 20 7b 20 20 20 20 20 20 20 20  ct Cte {        
230a0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46              /* F
230b0 6f 72 20 65 61 63 68 20 43 54 45 20 69 6e 20 74  or each CTE in t
230c0 68 65 20 57 49 54 48 20 63 6c 61 75 73 65 2e 2e  he WITH clause..
230d0 2e 2e 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a  .. */.    char *
230e0 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20  zName;          
230f0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d            /* Nam
23100 65 20 6f 66 20 74 68 69 73 20 43 54 45 20 2a 2f  e of this CTE */
23110 0a 20 20 20 20 45 78 70 72 4c 69 73 74 20 2a 70  .    ExprList *p
23120 43 6f 6c 73 3b 20 20 20 20 20 20 20 20 20 20 20  Cols;           
23130 20 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20       /* List of 
23140 65 78 70 6c 69 63 69 74 20 63 6f 6c 75 6d 6e 20  explicit column 
23150 6e 61 6d 65 73 2c 20 6f 72 20 4e 55 4c 4c 20 2a  names, or NULL *
23160 2f 0a 20 20 20 20 53 65 6c 65 63 74 20 2a 70 53  /.    Select *pS
23170 65 6c 65 63 74 3b 20 20 20 20 20 20 20 20 20 20  elect;          
23180 20 20 20 20 20 20 2f 2a 20 54 68 65 20 64 65 66        /* The def
23190 69 6e 69 74 69 6f 6e 20 6f 66 20 74 68 69 73 20  inition of this 
231a0 43 54 45 20 2a 2f 0a 20 20 20 20 63 6f 6e 73 74  CTE */.    const
231b0 20 63 68 61 72 20 2a 7a 43 74 65 45 72 72 3b 20   char *zCteErr; 
231c0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 45 72             /* Er
231d0 72 6f 72 20 6d 65 73 73 61 67 65 20 66 6f 72 20  ror message for 
231e0 63 69 72 63 75 6c 61 72 20 72 65 66 65 72 65 6e  circular referen
231f0 63 65 73 20 2a 2f 0a 20 20 7d 20 61 5b 31 5d 3b  ces */.  } a[1];
23200 0a 7d 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49  .};..#ifdef SQLI
23210 54 45 5f 44 45 42 55 47 0a 2f 2a 0a 2a 2a 20 41  TE_DEBUG./*.** A
23220 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  n instance of th
23230 65 20 54 72 65 65 56 69 65 77 20 6f 62 6a 65 63  e TreeView objec
23240 74 20 69 73 20 75 73 65 64 20 66 6f 72 20 70 72  t is used for pr
23250 69 6e 74 69 6e 67 20 74 68 65 20 63 6f 6e 74 65  inting the conte
23260 6e 74 20 6f 66 0a 2a 2a 20 64 61 74 61 20 73 74  nt of.** data st
23270 72 75 63 74 75 72 65 73 20 6f 6e 20 73 71 6c 69  ructures on sqli
23280 74 65 33 44 65 62 75 67 50 72 69 6e 74 66 28 29  te3DebugPrintf()
23290 20 75 73 69 6e 67 20 61 20 74 72 65 65 2d 6c 69   using a tree-li
232a0 6b 65 20 76 69 65 77 2e 0a 2a 2f 0a 73 74 72 75  ke view..*/.stru
232b0 63 74 20 54 72 65 65 56 69 65 77 20 7b 0a 20 20  ct TreeView {.  
232c0 69 6e 74 20 69 4c 65 76 65 6c 3b 20 20 20 20 20  int iLevel;     
232d0 20 20 20 20 20 20 20 20 2f 2a 20 57 68 69 63 68          /* Which
232e0 20 6c 65 76 65 6c 20 6f 66 20 74 68 65 20 74 72   level of the tr
232f0 65 65 20 77 65 20 61 72 65 20 6f 6e 20 2a 2f 0a  ee we are on */.
23300 20 20 75 38 20 20 62 4c 69 6e 65 5b 31 30 30 5d    u8  bLine[100]
23310 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 44 72 61  ;         /* Dra
23320 77 20 76 65 72 74 69 63 61 6c 20 69 6e 20 63 6f  w vertical in co
23330 6c 75 6d 6e 20 69 20 69 66 20 62 4c 69 6e 65 5b  lumn i if bLine[
23340 69 5d 20 69 73 20 74 72 75 65 20 2a 2f 0a 7d 3b  i] is true */.};
23350 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
23360 45 5f 44 45 42 55 47 20 2a 2f 0a 0a 2f 2a 0a 2a  E_DEBUG */../*.*
23370 2a 20 41 73 73 75 6d 69 6e 67 20 7a 49 6e 20 70  * Assuming zIn p
23380 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 66 69 72  oints to the fir
23390 73 74 20 62 79 74 65 20 6f 66 20 61 20 55 54 46  st byte of a UTF
233a0 2d 38 20 63 68 61 72 61 63 74 65 72 2c 0a 2a 2a  -8 character,.**
233b0 20 61 64 76 61 6e 63 65 20 7a 49 6e 20 74 6f 20   advance zIn to 
233c0 70 6f 69 6e 74 20 74 6f 20 74 68 65 20 66 69 72  point to the fir
233d0 73 74 20 62 79 74 65 20 6f 66 20 74 68 65 20 6e  st byte of the n
233e0 65 78 74 20 55 54 46 2d 38 20 63 68 61 72 61 63  ext UTF-8 charac
233f0 74 65 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ter..*/.#define 
23400 53 51 4c 49 54 45 5f 53 4b 49 50 5f 55 54 46 38  SQLITE_SKIP_UTF8
23410 28 7a 49 6e 29 20 7b 20 20 20 20 20 20 20 20 20  (zIn) {         
23420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5c                 \
23430 0a 20 20 69 66 28 20 28 2a 28 7a 49 6e 2b 2b 29  .  if( (*(zIn++)
23440 29 3e 3d 30 78 63 30 20 29 7b 20 20 20 20 20 20  )>=0xc0 ){      
23450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23460 20 20 20 20 20 20 20 20 5c 0a 20 20 20 20 77 68          \.    wh
23470 69 6c 65 28 20 28 2a 7a 49 6e 20 26 20 30 78 63  ile( (*zIn & 0xc
23480 30 29 3d 3d 30 78 38 30 20 29 7b 20 7a 49 6e 2b  0)==0x80 ){ zIn+
23490 2b 3b 20 7d 20 20 20 20 20 20 20 20 20 20 20 20  +; }            
234a0 20 5c 0a 20 20 7d 20 20 20 20 20 20 20 20 20 20   \.  }          
234b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
234c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
234d0 20 20 20 20 20 20 20 20 20 20 5c 0a 7d 0a 0a 2f            \.}../
234e0 2a 0a 2a 2a 20 54 68 65 20 53 51 4c 49 54 45 5f  *.** The SQLITE_
234f0 2a 5f 42 4b 50 54 20 6d 61 63 72 6f 73 20 61 72  *_BKPT macros ar
23500 65 20 73 75 62 73 74 69 74 75 74 65 73 20 66 6f  e substitutes fo
23510 72 20 74 68 65 20 65 72 72 6f 72 20 63 6f 64 65  r the error code
23520 73 20 77 69 74 68 0a 2a 2a 20 74 68 65 20 73 61  s with.** the sa
23530 6d 65 20 6e 61 6d 65 20 62 75 74 20 77 69 74 68  me name but with
23540 6f 75 74 20 74 68 65 20 5f 42 4b 50 54 20 73 75  out the _BKPT su
23550 66 66 69 78 2e 20 20 54 68 65 73 65 20 6d 61 63  ffix.  These mac
23560 72 6f 73 20 69 6e 76 6f 6b 65 0a 2a 2a 20 72 6f  ros invoke.** ro
23570 75 74 69 6e 65 73 20 74 68 61 74 20 72 65 70 6f  utines that repo
23580 72 74 20 74 68 65 20 6c 69 6e 65 2d 6e 75 6d 62  rt the line-numb
23590 65 72 20 6f 6e 20 77 68 69 63 68 20 74 68 65 20  er on which the 
235a0 65 72 72 6f 72 20 6f 72 69 67 69 6e 61 74 65 64  error originated
235b0 0a 2a 2a 20 75 73 69 6e 67 20 73 71 6c 69 74 65  .** using sqlite
235c0 33 5f 6c 6f 67 28 29 2e 20 20 54 68 65 20 72 6f  3_log().  The ro
235d0 75 74 69 6e 65 73 20 61 6c 73 6f 20 70 72 6f 76  utines also prov
235e0 69 64 65 20 61 20 63 6f 6e 76 65 6e 69 65 6e 74  ide a convenient
235f0 20 70 6c 61 63 65 0a 2a 2a 20 74 6f 20 73 65 74   place.** to set
23600 20 61 20 64 65 62 75 67 67 65 72 20 62 72 65 61   a debugger brea
23610 6b 70 6f 69 6e 74 2e 0a 2a 2f 0a 69 6e 74 20 73  kpoint..*/.int s
23620 71 6c 69 74 65 33 43 6f 72 72 75 70 74 45 72 72  qlite3CorruptErr
23630 6f 72 28 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c  or(int);.int sql
23640 69 74 65 33 4d 69 73 75 73 65 45 72 72 6f 72 28  ite3MisuseError(
23650 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  int);.int sqlite
23660 33 43 61 6e 74 6f 70 65 6e 45 72 72 6f 72 28 69  3CantopenError(i
23670 6e 74 29 3b 0a 23 64 65 66 69 6e 65 20 53 51 4c  nt);.#define SQL
23680 49 54 45 5f 43 4f 52 52 55 50 54 5f 42 4b 50 54  ITE_CORRUPT_BKPT
23690 20 73 71 6c 69 74 65 33 43 6f 72 72 75 70 74 45   sqlite3CorruptE
236a0 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 29 0a 23  rror(__LINE__).#
236b0 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 49  define SQLITE_MI
236c0 53 55 53 45 5f 42 4b 50 54 20 73 71 6c 69 74 65  SUSE_BKPT sqlite
236d0 33 4d 69 73 75 73 65 45 72 72 6f 72 28 5f 5f 4c  3MisuseError(__L
236e0 49 4e 45 5f 5f 29 0a 23 64 65 66 69 6e 65 20 53  INE__).#define S
236f0 51 4c 49 54 45 5f 43 41 4e 54 4f 50 45 4e 5f 42  QLITE_CANTOPEN_B
23700 4b 50 54 20 73 71 6c 69 74 65 33 43 61 6e 74 6f  KPT sqlite3Canto
23710 70 65 6e 45 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f  penError(__LINE_
23720 5f 29 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  _).#ifdef SQLITE
23730 5f 44 45 42 55 47 0a 20 20 69 6e 74 20 73 71 6c  _DEBUG.  int sql
23740 69 74 65 33 4e 6f 6d 65 6d 45 72 72 6f 72 28 69  ite3NomemError(i
23750 6e 74 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74  nt);.  int sqlit
23760 65 33 49 6f 65 72 72 6e 6f 6d 65 6d 45 72 72 6f  e3IoerrnomemErro
23770 72 28 69 6e 74 29 3b 0a 23 20 64 65 66 69 6e 65  r(int);.# define
23780 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 5f 42 4b   SQLITE_NOMEM_BK
23790 50 54 20 73 71 6c 69 74 65 33 4e 6f 6d 65 6d 45  PT sqlite3NomemE
237a0 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 29 0a 23  rror(__LINE__).#
237b0 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49   define SQLITE_I
237c0 4f 45 52 52 5f 4e 4f 4d 45 4d 5f 42 4b 50 54 20  OERR_NOMEM_BKPT 
237d0 73 71 6c 69 74 65 33 49 6f 65 72 72 6e 6f 6d 65  sqlite3Ioerrnome
237e0 6d 45 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 29  mError(__LINE__)
237f0 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
23800 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 5f 42 4b 50  SQLITE_NOMEM_BKP
23810 54 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 0a 23  T SQLITE_NOMEM.#
23820 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49   define SQLITE_I
23830 4f 45 52 52 5f 4e 4f 4d 45 4d 5f 42 4b 50 54 20  OERR_NOMEM_BKPT 
23840 53 51 4c 49 54 45 5f 49 4f 45 52 52 5f 4e 4f 4d  SQLITE_IOERR_NOM
23850 45 4d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  EM.#endif../*.**
23860 20 46 54 53 33 20 61 6e 64 20 46 54 53 34 20 62   FTS3 and FTS4 b
23870 6f 74 68 20 72 65 71 75 69 72 65 20 76 69 72 74  oth require virt
23880 75 61 6c 20 74 61 62 6c 65 20 73 75 70 70 6f 72  ual table suppor
23890 74 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64  t.*/.#if defined
238a0 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52  (SQLITE_OMIT_VIR
238b0 54 55 41 4c 54 41 42 4c 45 29 0a 23 20 75 6e 64  TUALTABLE).# und
238c0 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ef SQLITE_ENABLE
238d0 5f 46 54 53 33 0a 23 20 75 6e 64 65 66 20 53 51  _FTS3.# undef SQ
238e0 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 34  LITE_ENABLE_FTS4
238f0 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 46  .#endif../*.** F
23900 54 53 34 20 69 73 20 72 65 61 6c 6c 79 20 61 6e  TS4 is really an
23910 20 65 78 74 65 6e 73 69 6f 6e 20 66 6f 72 20 46   extension for F
23920 54 53 33 2e 20 20 49 74 20 69 73 20 65 6e 61 62  TS3.  It is enab
23930 6c 65 64 20 75 73 69 6e 67 20 74 68 65 0a 2a 2a  led using the.**
23940 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46   SQLITE_ENABLE_F
23950 54 53 33 20 6d 61 63 72 6f 2e 20 20 42 75 74 20  TS3 macro.  But 
23960 74 6f 20 61 76 6f 69 64 20 63 6f 6e 66 75 73 69  to avoid confusi
23970 6f 6e 20 77 65 20 61 6c 73 6f 20 63 61 6c 6c 0a  on we also call.
23980 2a 2a 20 74 68 65 20 53 51 4c 49 54 45 5f 45 4e  ** the SQLITE_EN
23990 41 42 4c 45 5f 46 54 53 34 20 6d 61 63 72 6f 20  ABLE_FTS4 macro 
239a0 74 6f 20 73 65 72 76 65 20 61 73 20 61 6e 20 61  to serve as an a
239b0 6c 69 61 73 20 66 6f 72 20 53 51 4c 49 54 45 5f  lias for SQLITE_
239c0 45 4e 41 42 4c 45 5f 46 54 53 33 2e 0a 2a 2f 0a  ENABLE_FTS3..*/.
239d0 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49  #if defined(SQLI
239e0 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 34 29 20  TE_ENABLE_FTS4) 
239f0 26 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  && !defined(SQLI
23a00 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33 29 0a  TE_ENABLE_FTS3).
23a10 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
23a20 45 4e 41 42 4c 45 5f 46 54 53 33 20 31 0a 23 65  ENABLE_FTS3 1.#e
23a30 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  ndif../*.** The 
23a40 63 74 79 70 65 2e 68 20 68 65 61 64 65 72 20 69  ctype.h header i
23a50 73 20 6e 65 65 64 65 64 20 66 6f 72 20 6e 6f 6e  s needed for non
23a60 2d 41 53 43 49 49 20 73 79 73 74 65 6d 73 2e 20  -ASCII systems. 
23a70 20 49 74 20 69 73 20 61 6c 73 6f 0a 2a 2a 20 6e   It is also.** n
23a80 65 65 64 65 64 20 62 79 20 46 54 53 33 20 77 68  eeded by FTS3 wh
23a90 65 6e 20 46 54 53 33 20 69 73 20 69 6e 63 6c 75  en FTS3 is inclu
23aa0 64 65 64 20 69 6e 20 74 68 65 20 61 6d 61 6c 67  ded in the amalg
23ab0 61 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 23 69 66 20  amation..*/.#if 
23ac0 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
23ad0 41 53 43 49 49 29 20 7c 7c 20 5c 0a 20 20 20 20  ASCII) || \.    
23ae0 28 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  (defined(SQLITE_
23af0 45 4e 41 42 4c 45 5f 46 54 53 33 29 20 26 26 20  ENABLE_FTS3) && 
23b00 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 41  defined(SQLITE_A
23b10 4d 41 4c 47 41 4d 41 54 49 4f 4e 29 29 0a 23 20  MALGAMATION)).# 
23b20 69 6e 63 6c 75 64 65 20 3c 63 74 79 70 65 2e 68  include <ctype.h
23b30 3e 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  >.#endif../*.** 
23b40 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61  The following ma
23b50 63 72 6f 73 20 6d 69 6d 69 63 20 74 68 65 20 73  cros mimic the s
23b60 74 61 6e 64 61 72 64 20 6c 69 62 72 61 72 79 20  tandard library 
23b70 66 75 6e 63 74 69 6f 6e 73 20 74 6f 75 70 70 65  functions touppe
23b80 72 28 29 2c 0a 2a 2a 20 69 73 73 70 61 63 65 28  r(),.** isspace(
23b90 29 2c 20 69 73 61 6c 6e 75 6d 28 29 2c 20 69 73  ), isalnum(), is
23ba0 64 69 67 69 74 28 29 20 61 6e 64 20 69 73 78 64  digit() and isxd
23bb0 69 67 69 74 28 29 2c 20 72 65 73 70 65 63 74 69  igit(), respecti
23bc0 76 65 6c 79 2e 20 54 68 65 0a 2a 2a 20 73 71 6c  vely. The.** sql
23bd0 69 74 65 20 76 65 72 73 69 6f 6e 73 20 6f 6e 6c  ite versions onl
23be0 79 20 77 6f 72 6b 20 66 6f 72 20 41 53 43 49 49  y work for ASCII
23bf0 20 63 68 61 72 61 63 74 65 72 73 2c 20 72 65 67   characters, reg
23c00 61 72 64 6c 65 73 73 20 6f 66 20 6c 6f 63 61 6c  ardless of local
23c10 65 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c  e..*/.#ifdef SQL
23c20 49 54 45 5f 41 53 43 49 49 0a 23 20 64 65 66 69  ITE_ASCII.# defi
23c30 6e 65 20 73 71 6c 69 74 65 33 54 6f 75 70 70 65  ne sqlite3Touppe
23c40 72 28 78 29 20 20 28 28 78 29 26 7e 28 73 71 6c  r(x)  ((x)&~(sql
23c50 69 74 65 33 43 74 79 70 65 4d 61 70 5b 28 75 6e  ite3CtypeMap[(un
23c60 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d  signed char)(x)]
23c70 26 30 78 32 30 29 29 0a 23 20 64 65 66 69 6e 65  &0x20)).# define
23c80 20 73 71 6c 69 74 65 33 49 73 73 70 61 63 65 28   sqlite3Isspace(
23c90 78 29 20 20 20 28 73 71 6c 69 74 65 33 43 74 79  x)   (sqlite3Cty
23ca0 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64 20  peMap[(unsigned 
23cb0 63 68 61 72 29 28 78 29 5d 26 30 78 30 31 29 0a  char)(x)]&0x01).
23cc0 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
23cd0 49 73 61 6c 6e 75 6d 28 78 29 20 20 20 28 73 71  Isalnum(x)   (sq
23ce0 6c 69 74 65 33 43 74 79 70 65 4d 61 70 5b 28 75  lite3CtypeMap[(u
23cf0 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29  nsigned char)(x)
23d00 5d 26 30 78 30 36 29 0a 23 20 64 65 66 69 6e 65  ]&0x06).# define
23d10 20 73 71 6c 69 74 65 33 49 73 61 6c 70 68 61 28   sqlite3Isalpha(
23d20 78 29 20 20 20 28 73 71 6c 69 74 65 33 43 74 79  x)   (sqlite3Cty
23d30 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64 20  peMap[(unsigned 
23d40 63 68 61 72 29 28 78 29 5d 26 30 78 30 32 29 0a  char)(x)]&0x02).
23d50 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
23d60 49 73 64 69 67 69 74 28 78 29 20 20 20 28 73 71  Isdigit(x)   (sq
23d70 6c 69 74 65 33 43 74 79 70 65 4d 61 70 5b 28 75  lite3CtypeMap[(u
23d80 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29  nsigned char)(x)
23d90 5d 26 30 78 30 34 29 0a 23 20 64 65 66 69 6e 65  ]&0x04).# define
23da0 20 73 71 6c 69 74 65 33 49 73 78 64 69 67 69 74   sqlite3Isxdigit
23db0 28 78 29 20 20 28 73 71 6c 69 74 65 33 43 74 79  (x)  (sqlite3Cty
23dc0 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64 20  peMap[(unsigned 
23dd0 63 68 61 72 29 28 78 29 5d 26 30 78 30 38 29 0a  char)(x)]&0x08).
23de0 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
23df0 54 6f 6c 6f 77 65 72 28 78 29 20 20 20 28 73 71  Tolower(x)   (sq
23e00 6c 69 74 65 33 55 70 70 65 72 54 6f 4c 6f 77 65  lite3UpperToLowe
23e10 72 5b 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72  r[(unsigned char
23e20 29 28 78 29 5d 29 0a 23 20 64 65 66 69 6e 65 20  )(x)]).# define 
23e30 73 71 6c 69 74 65 33 49 73 71 75 6f 74 65 28 78  sqlite3Isquote(x
23e40 29 20 20 20 28 73 71 6c 69 74 65 33 43 74 79 70  )   (sqlite3Ctyp
23e50 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64 20 63  eMap[(unsigned c
23e60 68 61 72 29 28 78 29 5d 26 30 78 38 30 29 0a 23  har)(x)]&0x80).#
23e70 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71  else.# define sq
23e80 6c 69 74 65 33 54 6f 75 70 70 65 72 28 78 29 20  lite3Toupper(x) 
23e90 20 20 74 6f 75 70 70 65 72 28 28 75 6e 73 69 67    toupper((unsig
23ea0 6e 65 64 20 63 68 61 72 29 28 78 29 29 0a 23 20  ned char)(x)).# 
23eb0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73  define sqlite3Is
23ec0 73 70 61 63 65 28 78 29 20 20 20 69 73 73 70 61  space(x)   isspa
23ed0 63 65 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61  ce((unsigned cha
23ee0 72 29 28 78 29 29 0a 23 20 64 65 66 69 6e 65 20  r)(x)).# define 
23ef0 73 71 6c 69 74 65 33 49 73 61 6c 6e 75 6d 28 78  sqlite3Isalnum(x
23f00 29 20 20 20 69 73 61 6c 6e 75 6d 28 28 75 6e 73  )   isalnum((uns
23f10 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 29 0a  igned char)(x)).
23f20 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
23f30 49 73 61 6c 70 68 61 28 78 29 20 20 20 69 73 61  Isalpha(x)   isa
23f40 6c 70 68 61 28 28 75 6e 73 69 67 6e 65 64 20 63  lpha((unsigned c
23f50 68 61 72 29 28 78 29 29 0a 23 20 64 65 66 69 6e  har)(x)).# defin
23f60 65 20 73 71 6c 69 74 65 33 49 73 64 69 67 69 74  e sqlite3Isdigit
23f70 28 78 29 20 20 20 69 73 64 69 67 69 74 28 28 75  (x)   isdigit((u
23f80 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29  nsigned char)(x)
23f90 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
23fa0 65 33 49 73 78 64 69 67 69 74 28 78 29 20 20 69  e3Isxdigit(x)  i
23fb0 73 78 64 69 67 69 74 28 28 75 6e 73 69 67 6e 65  sxdigit((unsigne
23fc0 64 20 63 68 61 72 29 28 78 29 29 0a 23 20 64 65  d char)(x)).# de
23fd0 66 69 6e 65 20 73 71 6c 69 74 65 33 54 6f 6c 6f  fine sqlite3Tolo
23fe0 77 65 72 28 78 29 20 20 20 74 6f 6c 6f 77 65 72  wer(x)   tolower
23ff0 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29  ((unsigned char)
24000 28 78 29 29 0a 23 20 64 65 66 69 6e 65 20 73 71  (x)).# define sq
24010 6c 69 74 65 33 49 73 71 75 6f 74 65 28 78 29 20  lite3Isquote(x) 
24020 20 20 28 28 78 29 3d 3d 27 22 27 7c 7c 28 78 29    ((x)=='"'||(x)
24030 3d 3d 27 5c 27 27 7c 7c 28 78 29 3d 3d 27 5b 27  =='\''||(x)=='['
24040 7c 7c 28 78 29 3d 3d 27 60 27 29 0a 23 65 6e 64  ||(x)=='`').#end
24050 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  if.#ifndef SQLIT
24060 45 5f 4f 4d 49 54 5f 43 4f 4d 50 49 4c 45 4f 50  E_OMIT_COMPILEOP
24070 54 49 4f 4e 5f 44 49 41 47 53 0a 69 6e 74 20 73  TION_DIAGS.int s
24080 71 6c 69 74 65 33 49 73 49 64 43 68 61 72 28 75  qlite3IsIdChar(u
24090 38 29 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  8);.#endif../*.*
240a0 2a 20 49 6e 74 65 72 6e 61 6c 20 66 75 6e 63 74  * Internal funct
240b0 69 6f 6e 20 70 72 6f 74 6f 74 79 70 65 73 0a 2a  ion prototypes.*
240c0 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 74 72  /.int sqlite3Str
240d0 49 43 6d 70 28 63 6f 6e 73 74 20 63 68 61 72 2a  ICmp(const char*
240e0 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 69  ,const char*);.i
240f0 6e 74 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e  nt sqlite3Strlen
24100 33 30 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  30(const char*);
24110 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33 43 6f  .char *sqlite3Co
24120 6c 75 6d 6e 54 79 70 65 28 43 6f 6c 75 6d 6e 2a  lumnType(Column*
24130 2c 63 68 61 72 2a 29 3b 0a 23 64 65 66 69 6e 65  ,char*);.#define
24140 20 73 71 6c 69 74 65 33 53 74 72 4e 49 43 6d 70   sqlite3StrNICmp
24150 20 73 71 6c 69 74 65 33 5f 73 74 72 6e 69 63 6d   sqlite3_strnicm
24160 70 0a 0a 69 6e 74 20 73 71 6c 69 74 65 33 4d 61  p..int sqlite3Ma
24170 6c 6c 6f 63 49 6e 69 74 28 76 6f 69 64 29 3b 0a  llocInit(void);.
24180 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 61 6c 6c  void sqlite3Mall
24190 6f 63 45 6e 64 28 76 6f 69 64 29 3b 0a 76 6f 69  ocEnd(void);.voi
241a0 64 20 2a 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63  d *sqlite3Malloc
241b0 28 75 36 34 29 3b 0a 76 6f 69 64 20 2a 73 71 6c  (u64);.void *sql
241c0 69 74 65 33 4d 61 6c 6c 6f 63 5a 65 72 6f 28 75  ite3MallocZero(u
241d0 36 34 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74  64);.void *sqlit
241e0 65 33 44 62 4d 61 6c 6c 6f 63 5a 65 72 6f 28 73  e3DbMallocZero(s
241f0 71 6c 69 74 65 33 2a 2c 20 75 36 34 29 3b 0a 76  qlite3*, u64);.v
24200 6f 69 64 20 2a 73 71 6c 69 74 65 33 44 62 4d 61  oid *sqlite3DbMa
24210 6c 6c 6f 63 52 61 77 28 73 71 6c 69 74 65 33 2a  llocRaw(sqlite3*
24220 2c 20 75 36 34 29 3b 0a 76 6f 69 64 20 2a 73 71  , u64);.void *sq
24230 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 52 61 77  lite3DbMallocRaw
24240 4e 4e 28 73 71 6c 69 74 65 33 2a 2c 20 75 36 34  NN(sqlite3*, u64
24250 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33  );.char *sqlite3
24260 44 62 53 74 72 44 75 70 28 73 71 6c 69 74 65 33  DbStrDup(sqlite3
24270 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  *,const char*);.
24280 63 68 61 72 20 2a 73 71 6c 69 74 65 33 44 62 53  char *sqlite3DbS
24290 74 72 4e 44 75 70 28 73 71 6c 69 74 65 33 2a 2c  trNDup(sqlite3*,
242a0 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 75 36 34  const char*, u64
242b0 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33  );.void *sqlite3
242c0 52 65 61 6c 6c 6f 63 28 76 6f 69 64 2a 2c 20 75  Realloc(void*, u
242d0 36 34 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74  64);.void *sqlit
242e0 65 33 44 62 52 65 61 6c 6c 6f 63 4f 72 46 72 65  e3DbReallocOrFre
242f0 65 28 73 71 6c 69 74 65 33 20 2a 2c 20 76 6f 69  e(sqlite3 *, voi
24300 64 20 2a 2c 20 75 36 34 29 3b 0a 76 6f 69 64 20  d *, u64);.void 
24310 2a 73 71 6c 69 74 65 33 44 62 52 65 61 6c 6c 6f  *sqlite3DbReallo
24320 63 28 73 71 6c 69 74 65 33 20 2a 2c 20 76 6f 69  c(sqlite3 *, voi
24330 64 20 2a 2c 20 75 36 34 29 3b 0a 76 6f 69 64 20  d *, u64);.void 
24340 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 73 71  sqlite3DbFree(sq
24350 6c 69 74 65 33 2a 2c 20 76 6f 69 64 2a 29 3b 0a  lite3*, void*);.
24360 69 6e 74 20 73 71 6c 69 74 65 33 4d 61 6c 6c 6f  int sqlite3Mallo
24370 63 53 69 7a 65 28 76 6f 69 64 2a 29 3b 0a 69 6e  cSize(void*);.in
24380 74 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f  t sqlite3DbMallo
24390 63 53 69 7a 65 28 73 71 6c 69 74 65 33 2a 2c 20  cSize(sqlite3*, 
243a0 76 6f 69 64 2a 29 3b 0a 76 6f 69 64 20 2a 73 71  void*);.void *sq
243b0 6c 69 74 65 33 53 63 72 61 74 63 68 4d 61 6c 6c  lite3ScratchMall
243c0 6f 63 28 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  oc(int);.void sq
243d0 6c 69 74 65 33 53 63 72 61 74 63 68 46 72 65 65  lite3ScratchFree
243e0 28 76 6f 69 64 2a 29 3b 0a 76 6f 69 64 20 2a 73  (void*);.void *s
243f0 71 6c 69 74 65 33 50 61 67 65 4d 61 6c 6c 6f 63  qlite3PageMalloc
24400 28 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69  (int);.void sqli
24410 74 65 33 50 61 67 65 46 72 65 65 28 76 6f 69 64  te3PageFree(void
24420 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
24430 4d 65 6d 53 65 74 44 65 66 61 75 6c 74 28 76 6f  MemSetDefault(vo
24440 69 64 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c  id);.#ifndef SQL
24450 49 54 45 5f 4f 4d 49 54 5f 42 55 49 4c 54 49 4e  ITE_OMIT_BUILTIN
24460 5f 54 45 53 54 0a 76 6f 69 64 20 73 71 6c 69 74  _TEST.void sqlit
24470 65 33 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 48 6f  e3BenignMallocHo
24480 6f 6b 73 28 76 6f 69 64 20 28 2a 29 28 76 6f 69  oks(void (*)(voi
24490 64 29 2c 20 76 6f 69 64 20 28 2a 29 28 76 6f 69  d), void (*)(voi
244a0 64 29 29 3b 0a 23 65 6e 64 69 66 0a 69 6e 74 20  d));.#endif.int 
244b0 73 71 6c 69 74 65 33 48 65 61 70 4e 65 61 72 6c  sqlite3HeapNearl
244c0 79 46 75 6c 6c 28 76 6f 69 64 29 3b 0a 0a 2f 2a  yFull(void);../*
244d0 0a 2a 2a 20 4f 6e 20 73 79 73 74 65 6d 73 20 77  .** On systems w
244e0 69 74 68 20 61 6d 70 6c 65 20 73 74 61 63 6b 20  ith ample stack 
244f0 73 70 61 63 65 20 61 6e 64 20 74 68 61 74 20 73  space and that s
24500 75 70 70 6f 72 74 20 61 6c 6c 6f 63 61 28 29 2c  upport alloca(),
24510 20 6d 61 6b 65 0a 2a 2a 20 75 73 65 20 6f 66 20   make.** use of 
24520 61 6c 6c 6f 63 61 28 29 20 74 6f 20 6f 62 74 61  alloca() to obta
24530 69 6e 20 73 70 61 63 65 20 66 6f 72 20 6c 61 72  in space for lar
24540 67 65 20 61 75 74 6f 6d 61 74 69 63 20 6f 62 6a  ge automatic obj
24550 65 63 74 73 2e 20 20 42 79 20 64 65 66 61 75 6c  ects.  By defaul
24560 74 2c 0a 2a 2a 20 6f 62 74 61 69 6e 20 73 70 61  t,.** obtain spa
24570 63 65 20 66 72 6f 6d 20 6d 61 6c 6c 6f 63 28 29  ce from malloc()
24580 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 61 6c 6c 6f  ..**.** The allo
24590 63 61 28 29 20 72 6f 75 74 69 6e 65 20 6e 65 76  ca() routine nev
245a0 65 72 20 72 65 74 75 72 6e 73 20 4e 55 4c 4c 2e  er returns NULL.
245b0 20 20 54 68 69 73 20 77 69 6c 6c 20 63 61 75 73    This will caus
245c0 65 20 63 6f 64 65 20 70 61 74 68 73 0a 2a 2a 20  e code paths.** 
245d0 74 68 61 74 20 64 65 61 6c 20 77 69 74 68 20 73  that deal with s
245e0 71 6c 69 74 65 33 53 74 61 63 6b 41 6c 6c 6f 63  qlite3StackAlloc
245f0 28 29 20 66 61 69 6c 75 72 65 73 20 74 6f 20 62  () failures to b
24600 65 20 75 6e 72 65 61 63 68 61 62 6c 65 2e 0a 2a  e unreachable..*
24610 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
24620 55 53 45 5f 41 4c 4c 4f 43 41 0a 23 20 64 65 66  USE_ALLOCA.# def
24630 69 6e 65 20 73 71 6c 69 74 65 33 53 74 61 63 6b  ine sqlite3Stack
24640 41 6c 6c 6f 63 52 61 77 28 44 2c 4e 29 20 20 20  AllocRaw(D,N)   
24650 61 6c 6c 6f 63 61 28 4e 29 0a 23 20 64 65 66 69  alloca(N).# defi
24660 6e 65 20 73 71 6c 69 74 65 33 53 74 61 63 6b 41  ne sqlite3StackA
24670 6c 6c 6f 63 5a 65 72 6f 28 44 2c 4e 29 20 20 6d  llocZero(D,N)  m
24680 65 6d 73 65 74 28 61 6c 6c 6f 63 61 28 4e 29 2c  emset(alloca(N),
24690 20 30 2c 20 4e 29 0a 23 20 64 65 66 69 6e 65 20   0, N).# define 
246a0 73 71 6c 69 74 65 33 53 74 61 63 6b 46 72 65 65  sqlite3StackFree
246b0 28 44 2c 50 29 0a 23 65 6c 73 65 0a 23 20 64 65  (D,P).#else.# de
246c0 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74 61 63  fine sqlite3Stac
246d0 6b 41 6c 6c 6f 63 52 61 77 28 44 2c 4e 29 20 20  kAllocRaw(D,N)  
246e0 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63   sqlite3DbMalloc
246f0 52 61 77 28 44 2c 4e 29 0a 23 20 64 65 66 69 6e  Raw(D,N).# defin
24700 65 20 73 71 6c 69 74 65 33 53 74 61 63 6b 41 6c  e sqlite3StackAl
24710 6c 6f 63 5a 65 72 6f 28 44 2c 4e 29 20 20 73 71  locZero(D,N)  sq
24720 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 5a 65 72  lite3DbMallocZer
24730 6f 28 44 2c 4e 29 0a 23 20 64 65 66 69 6e 65 20  o(D,N).# define 
24740 73 71 6c 69 74 65 33 53 74 61 63 6b 46 72 65 65  sqlite3StackFree
24750 28 44 2c 50 29 20 20 20 20 20 20 20 73 71 6c 69  (D,P)       sqli
24760 74 65 33 44 62 46 72 65 65 28 44 2c 50 29 0a 23  te3DbFree(D,P).#
24770 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51  endif..#ifdef SQ
24780 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4d 45 4d 53  LITE_ENABLE_MEMS
24790 59 53 33 0a 63 6f 6e 73 74 20 73 71 6c 69 74 65  YS3.const sqlite
247a0 33 5f 6d 65 6d 5f 6d 65 74 68 6f 64 73 20 2a 73  3_mem_methods *s
247b0 71 6c 69 74 65 33 4d 65 6d 47 65 74 4d 65 6d 73  qlite3MemGetMems
247c0 79 73 33 28 76 6f 69 64 29 3b 0a 23 65 6e 64 69  ys3(void);.#endi
247d0 66 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  f.#ifdef SQLITE_
247e0 45 4e 41 42 4c 45 5f 4d 45 4d 53 59 53 35 0a 63  ENABLE_MEMSYS5.c
247f0 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d 65 6d  onst sqlite3_mem
24800 5f 6d 65 74 68 6f 64 73 20 2a 73 71 6c 69 74 65  _methods *sqlite
24810 33 4d 65 6d 47 65 74 4d 65 6d 73 79 73 35 28 76  3MemGetMemsys5(v
24820 6f 69 64 29 3b 0a 23 65 6e 64 69 66 0a 0a 0a 23  oid);.#endif...#
24830 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4d 55  ifndef SQLITE_MU
24840 54 45 58 5f 4f 4d 49 54 0a 20 20 73 71 6c 69 74  TEX_OMIT.  sqlit
24850 65 33 5f 6d 75 74 65 78 5f 6d 65 74 68 6f 64 73  e3_mutex_methods
24860 20 63 6f 6e 73 74 20 2a 73 71 6c 69 74 65 33 44   const *sqlite3D
24870 65 66 61 75 6c 74 4d 75 74 65 78 28 76 6f 69 64  efaultMutex(void
24880 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 74  );.  sqlite3_mut
24890 65 78 5f 6d 65 74 68 6f 64 73 20 63 6f 6e 73 74  ex_methods const
248a0 20 2a 73 71 6c 69 74 65 33 4e 6f 6f 70 4d 75 74   *sqlite3NoopMut
248b0 65 78 28 76 6f 69 64 29 3b 0a 20 20 73 71 6c 69  ex(void);.  sqli
248c0 74 65 33 5f 6d 75 74 65 78 20 2a 73 71 6c 69 74  te3_mutex *sqlit
248d0 65 33 4d 75 74 65 78 41 6c 6c 6f 63 28 69 6e 74  e3MutexAlloc(int
248e0 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33  );.  int sqlite3
248f0 4d 75 74 65 78 49 6e 69 74 28 76 6f 69 64 29 3b  MutexInit(void);
24900 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 4d 75  .  int sqlite3Mu
24910 74 65 78 45 6e 64 28 76 6f 69 64 29 3b 0a 23 65  texEnd(void);.#e
24920 6e 64 69 66 0a 23 69 66 20 21 64 65 66 69 6e 65  ndif.#if !define
24930 64 28 53 51 4c 49 54 45 5f 4d 55 54 45 58 5f 4f  d(SQLITE_MUTEX_O
24940 4d 49 54 29 20 26 26 20 21 64 65 66 69 6e 65 64  MIT) && !defined
24950 28 53 51 4c 49 54 45 5f 4d 55 54 45 58 5f 4e 4f  (SQLITE_MUTEX_NO
24960 4f 50 29 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  OP).  void sqlit
24970 65 33 4d 65 6d 6f 72 79 42 61 72 72 69 65 72 28  e3MemoryBarrier(
24980 76 6f 69 64 29 3b 0a 23 65 6c 73 65 0a 23 20 64  void);.#else.# d
24990 65 66 69 6e 65 20 73 71 6c 69 74 65 33 4d 65 6d  efine sqlite3Mem
249a0 6f 72 79 42 61 72 72 69 65 72 28 29 0a 23 65 6e  oryBarrier().#en
249b0 64 69 66 0a 0a 73 71 6c 69 74 65 33 5f 69 6e 74  dif..sqlite3_int
249c0 36 34 20 73 71 6c 69 74 65 33 53 74 61 74 75 73  64 sqlite3Status
249d0 56 61 6c 75 65 28 69 6e 74 29 3b 0a 76 6f 69 64  Value(int);.void
249e0 20 73 71 6c 69 74 65 33 53 74 61 74 75 73 55 70   sqlite3StatusUp
249f0 28 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64  (int, int);.void
24a00 20 73 71 6c 69 74 65 33 53 74 61 74 75 73 44 6f   sqlite3StatusDo
24a10 77 6e 28 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f  wn(int, int);.vo
24a20 69 64 20 73 71 6c 69 74 65 33 53 74 61 74 75 73  id sqlite3Status
24a30 48 69 67 68 77 61 74 65 72 28 69 6e 74 2c 20 69  Highwater(int, i
24a40 6e 74 29 3b 0a 0a 2f 2a 20 41 63 63 65 73 73 20  nt);../* Access 
24a50 74 6f 20 6d 75 74 65 78 65 73 20 75 73 65 64 20  to mutexes used 
24a60 62 79 20 73 71 6c 69 74 65 33 5f 73 74 61 74 75  by sqlite3_statu
24a70 73 28 29 20 2a 2f 0a 73 71 6c 69 74 65 33 5f 6d  s() */.sqlite3_m
24a80 75 74 65 78 20 2a 73 71 6c 69 74 65 33 50 63 61  utex *sqlite3Pca
24a90 63 68 65 31 4d 75 74 65 78 28 76 6f 69 64 29 3b  che1Mutex(void);
24aa0 0a 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 20 2a  .sqlite3_mutex *
24ab0 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 4d 75 74  sqlite3MallocMut
24ac0 65 78 28 76 6f 69 64 29 3b 0a 0a 23 69 66 6e 64  ex(void);..#ifnd
24ad0 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46  ef SQLITE_OMIT_F
24ae0 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 0a 20 20  LOATING_POINT.  
24af0 69 6e 74 20 73 71 6c 69 74 65 33 49 73 4e 61 4e  int sqlite3IsNaN
24b00 28 64 6f 75 62 6c 65 29 3b 0a 23 65 6c 73 65 0a  (double);.#else.
24b10 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
24b20 49 73 4e 61 4e 28 58 29 20 20 30 0a 23 65 6e 64  IsNaN(X)  0.#end
24b30 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73  if../*.** An ins
24b40 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c  tance of the fol
24b50 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65  lowing structure
24b60 20 68 6f 6c 64 73 20 69 6e 66 6f 72 6d 61 74 69   holds informati
24b70 6f 6e 20 61 62 6f 75 74 20 53 51 4c 0a 2a 2a 20  on about SQL.** 
24b80 66 75 6e 63 74 69 6f 6e 73 20 61 72 67 75 6d 65  functions argume
24b90 6e 74 73 20 74 68 61 74 20 61 72 65 20 74 68 65  nts that are the
24ba0 20 70 61 72 61 6d 65 74 65 72 73 20 74 6f 20 74   parameters to t
24bb0 68 65 20 70 72 69 6e 74 66 28 29 20 66 75 6e 63  he printf() func
24bc0 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  tion..*/.struct 
24bd0 50 72 69 6e 74 66 41 72 67 75 6d 65 6e 74 73 20  PrintfArguments 
24be0 7b 0a 20 20 69 6e 74 20 6e 41 72 67 3b 20 20 20  {.  int nArg;   
24bf0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
24c00 54 6f 74 61 6c 20 6e 75 6d 62 65 72 20 6f 66 20  Total number of 
24c10 61 72 67 75 6d 65 6e 74 73 20 2a 2f 0a 20 20 69  arguments */.  i
24c20 6e 74 20 6e 55 73 65 64 3b 20 20 20 20 20 20 20  nt nUsed;       
24c30 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
24c40 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 75  r of arguments u
24c50 73 65 64 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20  sed so far */.  
24c60 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a  sqlite3_value **
24c70 61 70 41 72 67 3b 20 20 20 2f 2a 20 54 68 65 20  apArg;   /* The 
24c80 61 72 67 75 6d 65 6e 74 20 76 61 6c 75 65 73 20  argument values 
24c90 2a 2f 0a 7d 3b 0a 0a 76 6f 69 64 20 73 71 6c 69  */.};..void sqli
24ca0 74 65 33 56 58 50 72 69 6e 74 66 28 53 74 72 41  te3VXPrintf(StrA
24cb0 63 63 75 6d 2a 2c 20 63 6f 6e 73 74 20 63 68 61  ccum*, const cha
24cc0 72 2a 2c 20 76 61 5f 6c 69 73 74 29 3b 0a 76 6f  r*, va_list);.vo
24cd0 69 64 20 73 71 6c 69 74 65 33 58 50 72 69 6e 74  id sqlite3XPrint
24ce0 66 28 53 74 72 41 63 63 75 6d 2a 2c 20 63 6f 6e  f(StrAccum*, con
24cf0 73 74 20 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a  st char*, ...);.
24d00 63 68 61 72 20 2a 73 71 6c 69 74 65 33 4d 50 72  char *sqlite3MPr
24d10 69 6e 74 66 28 73 71 6c 69 74 65 33 2a 2c 63 6f  intf(sqlite3*,co
24d20 6e 73 74 20 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b  nst char*, ...);
24d30 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33 56 4d  .char *sqlite3VM
24d40 50 72 69 6e 74 66 28 73 71 6c 69 74 65 33 2a 2c  Printf(sqlite3*,
24d50 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 76 61 5f  const char*, va_
24d60 6c 69 73 74 29 3b 0a 23 69 66 20 64 65 66 69 6e  list);.#if defin
24d70 65 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47 29  ed(SQLITE_DEBUG)
24d80 20 7c 7c 20 64 65 66 69 6e 65 64 28 53 51 4c 49   || defined(SQLI
24d90 54 45 5f 48 41 56 45 5f 4f 53 5f 54 52 41 43 45  TE_HAVE_OS_TRACE
24da0 29 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ).  void sqlite3
24db0 44 65 62 75 67 50 72 69 6e 74 66 28 63 6f 6e 73  DebugPrintf(cons
24dc0 74 20 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 23  t char*, ...);.#
24dd0 65 6e 64 69 66 0a 23 69 66 20 64 65 66 69 6e 65  endif.#if define
24de0 64 28 53 51 4c 49 54 45 5f 54 45 53 54 29 0a 20  d(SQLITE_TEST). 
24df0 20 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 54 65   void *sqlite3Te
24e00 73 74 54 65 78 74 54 6f 50 74 72 28 63 6f 6e 73  stTextToPtr(cons
24e10 74 20 63 68 61 72 2a 29 3b 0a 23 65 6e 64 69 66  t char*);.#endif
24e20 0a 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51  ..#if defined(SQ
24e30 4c 49 54 45 5f 44 45 42 55 47 29 0a 20 20 76 6f  LITE_DEBUG).  vo
24e40 69 64 20 73 71 6c 69 74 65 33 54 72 65 65 56 69  id sqlite3TreeVi
24e50 65 77 45 78 70 72 28 54 72 65 65 56 69 65 77 2a  ewExpr(TreeView*
24e60 2c 20 63 6f 6e 73 74 20 45 78 70 72 2a 2c 20 75  , const Expr*, u
24e70 38 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  8);.  void sqlit
24e80 65 33 54 72 65 65 56 69 65 77 45 78 70 72 4c 69  e3TreeViewExprLi
24e90 73 74 28 54 72 65 65 56 69 65 77 2a 2c 20 63 6f  st(TreeView*, co
24ea0 6e 73 74 20 45 78 70 72 4c 69 73 74 2a 2c 20 75  nst ExprList*, u
24eb0 38 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  8, const char*);
24ec0 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 54  .  void sqlite3T
24ed0 72 65 65 56 69 65 77 53 65 6c 65 63 74 28 54 72  reeViewSelect(Tr
24ee0 65 65 56 69 65 77 2a 2c 20 63 6f 6e 73 74 20 53  eeView*, const S
24ef0 65 6c 65 63 74 2a 2c 20 75 38 29 3b 0a 20 20 76  elect*, u8);.  v
24f00 6f 69 64 20 73 71 6c 69 74 65 33 54 72 65 65 56  oid sqlite3TreeV
24f10 69 65 77 57 69 74 68 28 54 72 65 65 56 69 65 77  iewWith(TreeView
24f20 2a 2c 20 63 6f 6e 73 74 20 57 69 74 68 2a 2c 20  *, const With*, 
24f30 75 38 29 3b 0a 23 65 6e 64 69 66 0a 0a 0a 76 6f  u8);.#endif...vo
24f40 69 64 20 73 71 6c 69 74 65 33 53 65 74 53 74 72  id sqlite3SetStr
24f50 69 6e 67 28 63 68 61 72 20 2a 2a 2c 20 73 71 6c  ing(char **, sql
24f60 69 74 65 33 2a 2c 20 63 6f 6e 73 74 20 63 68 61  ite3*, const cha
24f70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  r*);.void sqlite
24f80 33 45 72 72 6f 72 4d 73 67 28 50 61 72 73 65 2a  3ErrorMsg(Parse*
24f90 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 2e  , const char*, .
24fa0 2e 2e 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  ..);.void sqlite
24fb0 33 44 65 71 75 6f 74 65 28 63 68 61 72 2a 29 3b  3Dequote(char*);
24fc0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 54 6f 6b  .void sqlite3Tok
24fd0 65 6e 49 6e 69 74 28 54 6f 6b 65 6e 2a 2c 63 68  enInit(Token*,ch
24fe0 61 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  ar*);.int sqlite
24ff0 33 4b 65 79 77 6f 72 64 43 6f 64 65 28 63 6f 6e  3KeywordCode(con
25000 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72  st unsigned char
25010 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c  *, int);.int sql
25020 69 74 65 33 52 75 6e 50 61 72 73 65 72 28 50 61  ite3RunParser(Pa
25030 72 73 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  rse*, const char
25040 2a 2c 20 63 68 61 72 20 2a 2a 29 3b 0a 76 6f 69  *, char **);.voi
25050 64 20 73 71 6c 69 74 65 33 46 69 6e 69 73 68 43  d sqlite3FinishC
25060 6f 64 69 6e 67 28 50 61 72 73 65 2a 29 3b 0a 69  oding(Parse*);.i
25070 6e 74 20 73 71 6c 69 74 65 33 47 65 74 54 65 6d  nt sqlite3GetTem
25080 70 52 65 67 28 50 61 72 73 65 2a 29 3b 0a 76 6f  pReg(Parse*);.vo
25090 69 64 20 73 71 6c 69 74 65 33 52 65 6c 65 61 73  id sqlite3Releas
250a0 65 54 65 6d 70 52 65 67 28 50 61 72 73 65 2a 2c  eTempReg(Parse*,
250b0 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  int);.int sqlite
250c0 33 47 65 74 54 65 6d 70 52 61 6e 67 65 28 50 61  3GetTempRange(Pa
250d0 72 73 65 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20  rse*,int);.void 
250e0 73 71 6c 69 74 65 33 52 65 6c 65 61 73 65 54 65  sqlite3ReleaseTe
250f0 6d 70 52 61 6e 67 65 28 50 61 72 73 65 2a 2c 69  mpRange(Parse*,i
25100 6e 74 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  nt,int);.void sq
25110 6c 69 74 65 33 43 6c 65 61 72 54 65 6d 70 52 65  lite3ClearTempRe
25120 67 43 61 63 68 65 28 50 61 72 73 65 2a 29 3b 0a  gCache(Parse*);.
25130 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45  #ifdef SQLITE_DE
25140 42 55 47 0a 69 6e 74 20 73 71 6c 69 74 65 33 4e  BUG.int sqlite3N
25150 6f 54 65 6d 70 73 49 6e 52 61 6e 67 65 28 50 61  oTempsInRange(Pa
25160 72 73 65 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a 23  rse*,int,int);.#
25170 65 6e 64 69 66 0a 45 78 70 72 20 2a 73 71 6c 69  endif.Expr *sqli
25180 74 65 33 45 78 70 72 41 6c 6c 6f 63 28 73 71 6c  te3ExprAlloc(sql
25190 69 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20  ite3*,int,const 
251a0 54 6f 6b 65 6e 2a 2c 69 6e 74 29 3b 0a 45 78 70  Token*,int);.Exp
251b0 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72 28 73  r *sqlite3Expr(s
251c0 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73  qlite3*,int,cons
251d0 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73  t char*);.void s
251e0 71 6c 69 74 65 33 45 78 70 72 41 74 74 61 63 68  qlite3ExprAttach
251f0 53 75 62 74 72 65 65 73 28 73 71 6c 69 74 65 33  Subtrees(sqlite3
25200 2a 2c 45 78 70 72 2a 2c 45 78 70 72 2a 2c 45 78  *,Expr*,Expr*,Ex
25210 70 72 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69  pr*);.Expr *sqli
25220 74 65 33 50 45 78 70 72 28 50 61 72 73 65 2a 2c  te3PExpr(Parse*,
25230 20 69 6e 74 2c 20 45 78 70 72 2a 2c 20 45 78 70   int, Expr*, Exp
25240 72 2a 2c 20 63 6f 6e 73 74 20 54 6f 6b 65 6e 2a  r*, const Token*
25250 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50  );.void sqlite3P
25260 45 78 70 72 41 64 64 53 65 6c 65 63 74 28 50 61  ExprAddSelect(Pa
25270 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 53 65 6c  rse*, Expr*, Sel
25280 65 63 74 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c  ect*);.Expr *sql
25290 69 74 65 33 45 78 70 72 41 6e 64 28 73 71 6c 69  ite3ExprAnd(sqli
252a0 74 65 33 2a 2c 45 78 70 72 2a 2c 20 45 78 70 72  te3*,Expr*, Expr
252b0 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65  *);.Expr *sqlite
252c0 33 45 78 70 72 46 75 6e 63 74 69 6f 6e 28 50 61  3ExprFunction(Pa
252d0 72 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 20  rse*,ExprList*, 
252e0 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71  Token*);.void sq
252f0 6c 69 74 65 33 45 78 70 72 41 73 73 69 67 6e 56  lite3ExprAssignV
25300 61 72 4e 75 6d 62 65 72 28 50 61 72 73 65 2a 2c  arNumber(Parse*,
25310 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71   Expr*);.void sq
25320 6c 69 74 65 33 45 78 70 72 44 65 6c 65 74 65 28  lite3ExprDelete(
25330 73 71 6c 69 74 65 33 2a 2c 20 45 78 70 72 2a 29  sqlite3*, Expr*)
25340 3b 0a 45 78 70 72 4c 69 73 74 20 2a 73 71 6c 69  ;.ExprList *sqli
25350 74 65 33 45 78 70 72 4c 69 73 74 41 70 70 65 6e  te3ExprListAppen
25360 64 28 50 61 72 73 65 2a 2c 45 78 70 72 4c 69 73  d(Parse*,ExprLis
25370 74 2a 2c 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20  t*,Expr*);.void 
25380 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74 53  sqlite3ExprListS
25390 65 74 53 6f 72 74 4f 72 64 65 72 28 45 78 70 72  etSortOrder(Expr
253a0 4c 69 73 74 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64  List*,int);.void
253b0 20 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74   sqlite3ExprList
253c0 53 65 74 4e 61 6d 65 28 50 61 72 73 65 2a 2c 45  SetName(Parse*,E
253d0 78 70 72 4c 69 73 74 2a 2c 54 6f 6b 65 6e 2a 2c  xprList*,Token*,
253e0 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
253f0 65 33 45 78 70 72 4c 69 73 74 53 65 74 53 70 61  e3ExprListSetSpa
25400 6e 28 50 61 72 73 65 2a 2c 45 78 70 72 4c 69 73  n(Parse*,ExprLis
25410 74 2a 2c 45 78 70 72 53 70 61 6e 2a 29 3b 0a 76  t*,ExprSpan*);.v
25420 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 4c  oid sqlite3ExprL
25430 69 73 74 44 65 6c 65 74 65 28 73 71 6c 69 74 65  istDelete(sqlite
25440 33 2a 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a  3*, ExprList*);.
25450 75 33 32 20 73 71 6c 69 74 65 33 45 78 70 72 4c  u32 sqlite3ExprL
25460 69 73 74 46 6c 61 67 73 28 63 6f 6e 73 74 20 45  istFlags(const E
25470 78 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73  xprList*);.int s
25480 71 6c 69 74 65 33 49 6e 69 74 28 73 71 6c 69 74  qlite3Init(sqlit
25490 65 33 2a 2c 20 63 68 61 72 2a 2a 29 3b 0a 69 6e  e3*, char**);.in
254a0 74 20 73 71 6c 69 74 65 33 49 6e 69 74 43 61 6c  t sqlite3InitCal
254b0 6c 62 61 63 6b 28 76 6f 69 64 2a 2c 20 69 6e 74  lback(void*, int
254c0 2c 20 63 68 61 72 2a 2a 2c 20 63 68 61 72 2a 2a  , char**, char**
254d0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50  );.void sqlite3P
254e0 72 61 67 6d 61 28 50 61 72 73 65 2a 2c 54 6f 6b  ragma(Parse*,Tok
254f0 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e  en*,Token*,Token
25500 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  *,int);.void sql
25510 69 74 65 33 52 65 73 65 74 41 6c 6c 53 63 68 65  ite3ResetAllSche
25520 6d 61 73 4f 66 43 6f 6e 6e 65 63 74 69 6f 6e 28  masOfConnection(
25530 73 71 6c 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20  sqlite3*);.void 
25540 73 71 6c 69 74 65 33 52 65 73 65 74 4f 6e 65 53  sqlite3ResetOneS
25550 63 68 65 6d 61 28 73 71 6c 69 74 65 33 2a 2c 69  chema(sqlite3*,i
25560 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
25570 33 43 6f 6c 6c 61 70 73 65 44 61 74 61 62 61 73  3CollapseDatabas
25580 65 41 72 72 61 79 28 73 71 6c 69 74 65 33 2a 29  eArray(sqlite3*)
25590 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f  ;.void sqlite3Co
255a0 6d 6d 69 74 49 6e 74 65 72 6e 61 6c 43 68 61 6e  mmitInternalChan
255b0 67 65 73 28 73 71 6c 69 74 65 33 2a 29 3b 0a 76  ges(sqlite3*);.v
255c0 6f 69 64 20 73 71 6c 69 74 65 33 44 65 6c 65 74  oid sqlite3Delet
255d0 65 43 6f 6c 75 6d 6e 4e 61 6d 65 73 28 73 71 6c  eColumnNames(sql
255e0 69 74 65 33 2a 2c 54 61 62 6c 65 2a 29 3b 0a 69  ite3*,Table*);.i
255f0 6e 74 20 73 71 6c 69 74 65 33 43 6f 6c 75 6d 6e  nt sqlite3Column
25600 73 46 72 6f 6d 45 78 70 72 4c 69 73 74 28 50 61  sFromExprList(Pa
25610 72 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 69  rse*,ExprList*,i
25620 31 36 2a 2c 43 6f 6c 75 6d 6e 2a 2a 29 3b 0a 76  16*,Column**);.v
25630 6f 69 64 20 73 71 6c 69 74 65 33 53 65 6c 65 63  oid sqlite3Selec
25640 74 41 64 64 43 6f 6c 75 6d 6e 54 79 70 65 41 6e  tAddColumnTypeAn
25650 64 43 6f 6c 6c 61 74 69 6f 6e 28 50 61 72 73 65  dCollation(Parse
25660 2a 2c 54 61 62 6c 65 2a 2c 53 65 6c 65 63 74 2a  *,Table*,Select*
25670 29 3b 0a 54 61 62 6c 65 20 2a 73 71 6c 69 74 65  );.Table *sqlite
25680 33 52 65 73 75 6c 74 53 65 74 4f 66 53 65 6c 65  3ResultSetOfSele
25690 63 74 28 50 61 72 73 65 2a 2c 53 65 6c 65 63 74  ct(Parse*,Select
256a0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
256b0 4f 70 65 6e 4d 61 73 74 65 72 54 61 62 6c 65 28  OpenMasterTable(
256c0 50 61 72 73 65 20 2a 2c 20 69 6e 74 29 3b 0a 49  Parse *, int);.I
256d0 6e 64 65 78 20 2a 73 71 6c 69 74 65 33 50 72 69  ndex *sqlite3Pri
256e0 6d 61 72 79 4b 65 79 49 6e 64 65 78 28 54 61 62  maryKeyIndex(Tab
256f0 6c 65 2a 29 3b 0a 69 31 36 20 73 71 6c 69 74 65  le*);.i16 sqlite
25700 33 43 6f 6c 75 6d 6e 4f 66 49 6e 64 65 78 28 49  3ColumnOfIndex(I
25710 6e 64 65 78 2a 2c 20 69 31 36 29 3b 0a 76 6f 69  ndex*, i16);.voi
25720 64 20 73 71 6c 69 74 65 33 53 74 61 72 74 54 61  d sqlite3StartTa
25730 62 6c 65 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e  ble(Parse*,Token
25740 2a 2c 54 6f 6b 65 6e 2a 2c 69 6e 74 2c 69 6e 74  *,Token*,int,int
25750 2c 69 6e 74 2c 69 6e 74 29 3b 0a 23 69 66 20 53  ,int,int);.#if S
25760 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 48 49 44  QLITE_ENABLE_HID
25770 44 45 4e 5f 43 4f 4c 55 4d 4e 53 0a 20 20 76 6f  DEN_COLUMNS.  vo
25780 69 64 20 73 71 6c 69 74 65 33 43 6f 6c 75 6d 6e  id sqlite3Column
25790 50 72 6f 70 65 72 74 69 65 73 46 72 6f 6d 4e 61  PropertiesFromNa
257a0 6d 65 28 54 61 62 6c 65 2a 2c 20 43 6f 6c 75 6d  me(Table*, Colum
257b0 6e 2a 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66  n*);.#else.# def
257c0 69 6e 65 20 73 71 6c 69 74 65 33 43 6f 6c 75 6d  ine sqlite3Colum
257d0 6e 50 72 6f 70 65 72 74 69 65 73 46 72 6f 6d 4e  nPropertiesFromN
257e0 61 6d 65 28 54 2c 43 29 20 2f 2a 20 6e 6f 2d 6f  ame(T,C) /* no-o
257f0 70 20 2a 2f 0a 23 65 6e 64 69 66 0a 76 6f 69 64  p */.#endif.void
25800 20 73 71 6c 69 74 65 33 41 64 64 43 6f 6c 75 6d   sqlite3AddColum
25810 6e 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c  n(Parse*,Token*,
25820 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71  Token*);.void sq
25830 6c 69 74 65 33 41 64 64 4e 6f 74 4e 75 6c 6c 28  lite3AddNotNull(
25840 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 76 6f  Parse*, int);.vo
25850 69 64 20 73 71 6c 69 74 65 33 41 64 64 50 72 69  id sqlite3AddPri
25860 6d 61 72 79 4b 65 79 28 50 61 72 73 65 2a 2c 20  maryKey(Parse*, 
25870 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74 2c 20  ExprList*, int, 
25880 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  int, int);.void 
25890 73 71 6c 69 74 65 33 41 64 64 43 68 65 63 6b 43  sqlite3AddCheckC
258a0 6f 6e 73 74 72 61 69 6e 74 28 50 61 72 73 65 2a  onstraint(Parse*
258b0 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73  , Expr*);.void s
258c0 71 6c 69 74 65 33 41 64 64 44 65 66 61 75 6c 74  qlite3AddDefault
258d0 56 61 6c 75 65 28 50 61 72 73 65 2a 2c 45 78 70  Value(Parse*,Exp
258e0 72 53 70 61 6e 2a 29 3b 0a 76 6f 69 64 20 73 71  rSpan*);.void sq
258f0 6c 69 74 65 33 41 64 64 43 6f 6c 6c 61 74 65 54  lite3AddCollateT
25900 79 70 65 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65  ype(Parse*, Toke
25910 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  n*);.void sqlite
25920 33 45 6e 64 54 61 62 6c 65 28 50 61 72 73 65 2a  3EndTable(Parse*
25930 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 75  ,Token*,Token*,u
25940 38 2c 53 65 6c 65 63 74 2a 29 3b 0a 69 6e 74 20  8,Select*);.int 
25950 73 71 6c 69 74 65 33 50 61 72 73 65 55 72 69 28  sqlite3ParseUri(
25960 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73  const char*,cons
25970 74 20 63 68 61 72 2a 2c 75 6e 73 69 67 6e 65 64  t char*,unsigned
25980 20 69 6e 74 2a 2c 0a 20 20 20 20 20 20 20 20 20   int*,.         
25990 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74             sqlit
259a0 65 33 5f 76 66 73 2a 2a 2c 63 68 61 72 2a 2a 2c  e3_vfs**,char**,
259b0 63 68 61 72 20 2a 2a 29 3b 0a 42 74 72 65 65 20  char **);.Btree 
259c0 2a 73 71 6c 69 74 65 33 44 62 4e 61 6d 65 54 6f  *sqlite3DbNameTo
259d0 42 74 72 65 65 28 73 71 6c 69 74 65 33 2a 2c 63  Btree(sqlite3*,c
259e0 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 69 6e 74  onst char*);.int
259f0 20 73 71 6c 69 74 65 33 43 6f 64 65 4f 6e 63 65   sqlite3CodeOnce
25a00 28 50 61 72 73 65 20 2a 29 3b 0a 0a 23 69 66 64  (Parse *);..#ifd
25a10 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42  ef SQLITE_OMIT_B
25a20 55 49 4c 54 49 4e 5f 54 45 53 54 0a 23 20 64 65  UILTIN_TEST.# de
25a30 66 69 6e 65 20 73 71 6c 69 74 65 33 46 61 75 6c  fine sqlite3Faul
25a40 74 53 69 6d 28 58 29 20 53 51 4c 49 54 45 5f 4f  tSim(X) SQLITE_O
25a50 4b 0a 23 65 6c 73 65 0a 20 20 69 6e 74 20 73 71  K.#else.  int sq
25a60 6c 69 74 65 33 46 61 75 6c 74 53 69 6d 28 69 6e  lite3FaultSim(in
25a70 74 29 3b 0a 23 65 6e 64 69 66 0a 0a 42 69 74 76  t);.#endif..Bitv
25a80 65 63 20 2a 73 71 6c 69 74 65 33 42 69 74 76 65  ec *sqlite3Bitve
25a90 63 43 72 65 61 74 65 28 75 33 32 29 3b 0a 69 6e  cCreate(u32);.in
25aa0 74 20 73 71 6c 69 74 65 33 42 69 74 76 65 63 54  t sqlite3BitvecT
25ab0 65 73 74 28 42 69 74 76 65 63 2a 2c 20 75 33 32  est(Bitvec*, u32
25ac0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 42 69  );.int sqlite3Bi
25ad0 74 76 65 63 54 65 73 74 4e 6f 74 4e 75 6c 6c 28  tvecTestNotNull(
25ae0 42 69 74 76 65 63 2a 2c 20 75 33 32 29 3b 0a 69  Bitvec*, u32);.i
25af0 6e 74 20 73 71 6c 69 74 65 33 42 69 74 76 65 63  nt sqlite3Bitvec
25b00 53 65 74 28 42 69 74 76 65 63 2a 2c 20 75 33 32  Set(Bitvec*, u32
25b10 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42  );.void sqlite3B
25b20 69 74 76 65 63 43 6c 65 61 72 28 42 69 74 76 65  itvecClear(Bitve
25b30 63 2a 2c 20 75 33 32 2c 20 76 6f 69 64 2a 29 3b  c*, u32, void*);
25b40 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42 69 74  .void sqlite3Bit
25b50 76 65 63 44 65 73 74 72 6f 79 28 42 69 74 76 65  vecDestroy(Bitve
25b60 63 2a 29 3b 0a 75 33 32 20 73 71 6c 69 74 65 33  c*);.u32 sqlite3
25b70 42 69 74 76 65 63 53 69 7a 65 28 42 69 74 76 65  BitvecSize(Bitve
25b80 63 2a 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c  c*);.#ifndef SQL
25b90 49 54 45 5f 4f 4d 49 54 5f 42 55 49 4c 54 49 4e  ITE_OMIT_BUILTIN
25ba0 5f 54 45 53 54 0a 69 6e 74 20 73 71 6c 69 74 65  _TEST.int sqlite
25bb0 33 42 69 74 76 65 63 42 75 69 6c 74 69 6e 54 65  3BitvecBuiltinTe
25bc0 73 74 28 69 6e 74 2c 69 6e 74 2a 29 3b 0a 23 65  st(int,int*);.#e
25bd0 6e 64 69 66 0a 0a 52 6f 77 53 65 74 20 2a 73 71  ndif..RowSet *sq
25be0 6c 69 74 65 33 52 6f 77 53 65 74 49 6e 69 74 28  lite3RowSetInit(
25bf0 73 71 6c 69 74 65 33 2a 2c 20 76 6f 69 64 2a 2c  sqlite3*, void*,
25c00 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 29 3b 0a   unsigned int);.
25c10 76 6f 69 64 20 73 71 6c 69 74 65 33 52 6f 77 53  void sqlite3RowS
25c20 65 74 43 6c 65 61 72 28 52 6f 77 53 65 74 2a 29  etClear(RowSet*)
25c30 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 6f  ;.void sqlite3Ro
25c40 77 53 65 74 49 6e 73 65 72 74 28 52 6f 77 53 65  wSetInsert(RowSe
25c50 74 2a 2c 20 69 36 34 29 3b 0a 69 6e 74 20 73 71  t*, i64);.int sq
25c60 6c 69 74 65 33 52 6f 77 53 65 74 54 65 73 74 28  lite3RowSetTest(
25c70 52 6f 77 53 65 74 2a 2c 20 69 6e 74 20 69 42 61  RowSet*, int iBa
25c80 74 63 68 2c 20 69 36 34 29 3b 0a 69 6e 74 20 73  tch, i64);.int s
25c90 71 6c 69 74 65 33 52 6f 77 53 65 74 4e 65 78 74  qlite3RowSetNext
25ca0 28 52 6f 77 53 65 74 2a 2c 20 69 36 34 2a 29 3b  (RowSet*, i64*);
25cb0 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 72  ..void sqlite3Cr
25cc0 65 61 74 65 56 69 65 77 28 50 61 72 73 65 2a 2c  eateView(Parse*,
25cd0 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f  Token*,Token*,To
25ce0 6b 65 6e 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 53  ken*,ExprList*,S
25cf0 65 6c 65 63 74 2a 2c 69 6e 74 2c 69 6e 74 29 3b  elect*,int,int);
25d00 0a 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53  ..#if !defined(S
25d10 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 45 57 29  QLITE_OMIT_VIEW)
25d20 20 7c 7c 20 21 64 65 66 69 6e 65 64 28 53 51 4c   || !defined(SQL
25d30 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
25d40 54 41 42 4c 45 29 0a 20 20 69 6e 74 20 73 71 6c  TABLE).  int sql
25d50 69 74 65 33 56 69 65 77 47 65 74 43 6f 6c 75 6d  ite3ViewGetColum
25d60 6e 4e 61 6d 65 73 28 50 61 72 73 65 2a 2c 54 61  nNames(Parse*,Ta
25d70 62 6c 65 2a 29 3b 0a 23 65 6c 73 65 0a 23 20 64  ble*);.#else.# d
25d80 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 69 65  efine sqlite3Vie
25d90 77 47 65 74 43 6f 6c 75 6d 6e 4e 61 6d 65 73 28  wGetColumnNames(
25da0 41 2c 42 29 20 30 0a 23 65 6e 64 69 66 0a 0a 23  A,B) 0.#endif..#
25db0 69 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 41 54  if SQLITE_MAX_AT
25dc0 54 41 43 48 45 44 3e 33 30 0a 20 20 69 6e 74 20  TACHED>30.  int 
25dd0 73 71 6c 69 74 65 33 44 62 4d 61 73 6b 41 6c 6c  sqlite3DbMaskAll
25de0 5a 65 72 6f 28 79 44 62 4d 61 73 6b 29 3b 0a 23  Zero(yDbMask);.#
25df0 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74  endif.void sqlit
25e00 65 33 44 72 6f 70 54 61 62 6c 65 28 50 61 72 73  e3DropTable(Pars
25e10 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 69 6e  e*, SrcList*, in
25e20 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  t, int);.void sq
25e30 6c 69 74 65 33 43 6f 64 65 44 72 6f 70 54 61 62  lite3CodeDropTab
25e40 6c 65 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65  le(Parse*, Table
25e50 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f  *, int, int);.vo
25e60 69 64 20 73 71 6c 69 74 65 33 44 65 6c 65 74 65  id sqlite3Delete
25e70 54 61 62 6c 65 28 73 71 6c 69 74 65 33 2a 2c 20  Table(sqlite3*, 
25e80 54 61 62 6c 65 2a 29 3b 0a 23 69 66 6e 64 65 66  Table*);.#ifndef
25e90 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54   SQLITE_OMIT_AUT
25ea0 4f 49 4e 43 52 45 4d 45 4e 54 0a 20 20 76 6f 69  OINCREMENT.  voi
25eb0 64 20 73 71 6c 69 74 65 33 41 75 74 6f 69 6e 63  d sqlite3Autoinc
25ec0 72 65 6d 65 6e 74 42 65 67 69 6e 28 50 61 72 73  rementBegin(Pars
25ed0 65 20 2a 70 50 61 72 73 65 29 3b 0a 20 20 76 6f  e *pParse);.  vo
25ee0 69 64 20 73 71 6c 69 74 65 33 41 75 74 6f 69 6e  id sqlite3Autoin
25ef0 63 72 65 6d 65 6e 74 45 6e 64 28 50 61 72 73 65  crementEnd(Parse
25f00 20 2a 70 50 61 72 73 65 29 3b 0a 23 65 6c 73 65   *pParse);.#else
25f10 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
25f20 33 41 75 74 6f 69 6e 63 72 65 6d 65 6e 74 42 65  3AutoincrementBe
25f30 67 69 6e 28 58 29 0a 23 20 64 65 66 69 6e 65 20  gin(X).# define 
25f40 73 71 6c 69 74 65 33 41 75 74 6f 69 6e 63 72 65  sqlite3Autoincre
25f50 6d 65 6e 74 45 6e 64 28 58 29 0a 23 65 6e 64 69  mentEnd(X).#endi
25f60 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 49 6e  f.void sqlite3In
25f70 73 65 72 74 28 50 61 72 73 65 2a 2c 20 53 72 63  sert(Parse*, Src
25f80 4c 69 73 74 2a 2c 20 53 65 6c 65 63 74 2a 2c 20  List*, Select*, 
25f90 49 64 4c 69 73 74 2a 2c 20 69 6e 74 29 3b 0a 76  IdList*, int);.v
25fa0 6f 69 64 20 2a 73 71 6c 69 74 65 33 41 72 72 61  oid *sqlite3Arra
25fb0 79 41 6c 6c 6f 63 61 74 65 28 73 71 6c 69 74 65  yAllocate(sqlite
25fc0 33 2a 2c 76 6f 69 64 2a 2c 69 6e 74 2c 69 6e 74  3*,void*,int,int
25fd0 2a 2c 69 6e 74 2a 29 3b 0a 49 64 4c 69 73 74 20  *,int*);.IdList 
25fe0 2a 73 71 6c 69 74 65 33 49 64 4c 69 73 74 41 70  *sqlite3IdListAp
25ff0 70 65 6e 64 28 73 71 6c 69 74 65 33 2a 2c 20 49  pend(sqlite3*, I
26000 64 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 29 3b  dList*, Token*);
26010 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 64 4c 69  .int sqlite3IdLi
26020 73 74 49 6e 64 65 78 28 49 64 4c 69 73 74 2a 2c  stIndex(IdList*,
26030 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 53 72  const char*);.Sr
26040 63 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 53 72  cList *sqlite3Sr
26050 63 4c 69 73 74 45 6e 6c 61 72 67 65 28 73 71 6c  cListEnlarge(sql
26060 69 74 65 33 2a 2c 20 53 72 63 4c 69 73 74 2a 2c  ite3*, SrcList*,
26070 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 53 72 63 4c   int, int);.SrcL
26080 69 73 74 20 2a 73 71 6c 69 74 65 33 53 72 63 4c  ist *sqlite3SrcL
26090 69 73 74 41 70 70 65 6e 64 28 73 71 6c 69 74 65  istAppend(sqlite
260a0 33 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 54 6f  3*, SrcList*, To
260b0 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 53  ken*, Token*);.S
260c0 72 63 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 53  rcList *sqlite3S
260d0 72 63 4c 69 73 74 41 70 70 65 6e 64 46 72 6f 6d  rcListAppendFrom
260e0 54 65 72 6d 28 50 61 72 73 65 2a 2c 20 53 72 63  Term(Parse*, Src
260f0 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54  List*, Token*, T
26100 6f 6b 65 6e 2a 2c 0a 20 20 20 20 20 20 20 20 20  oken*,.         
26110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26120 20 20 20 20 20 20 20 20 20 20 20 20 20 54 6f 6b               Tok
26130 65 6e 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 45 78  en*, Select*, Ex
26140 70 72 2a 2c 20 49 64 4c 69 73 74 2a 29 3b 0a 76  pr*, IdList*);.v
26150 6f 69 64 20 73 71 6c 69 74 65 33 53 72 63 4c 69  oid sqlite3SrcLi
26160 73 74 49 6e 64 65 78 65 64 42 79 28 50 61 72 73  stIndexedBy(Pars
26170 65 20 2a 2c 20 53 72 63 4c 69 73 74 20 2a 2c 20  e *, SrcList *, 
26180 54 6f 6b 65 6e 20 2a 29 3b 0a 76 6f 69 64 20 73  Token *);.void s
26190 71 6c 69 74 65 33 53 72 63 4c 69 73 74 46 75 6e  qlite3SrcListFun
261a0 63 41 72 67 73 28 50 61 72 73 65 2a 2c 20 53 72  cArgs(Parse*, Sr
261b0 63 4c 69 73 74 2a 2c 20 45 78 70 72 4c 69 73 74  cList*, ExprList
261c0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49  *);.int sqlite3I
261d0 6e 64 65 78 65 64 42 79 4c 6f 6f 6b 75 70 28 50  ndexedByLookup(P
261e0 61 72 73 65 20 2a 2c 20 73 74 72 75 63 74 20 53  arse *, struct S
261f0 72 63 4c 69 73 74 5f 69 74 65 6d 20 2a 29 3b 0a  rcList_item *);.
26200 76 6f 69 64 20 73 71 6c 69 74 65 33 53 72 63 4c  void sqlite3SrcL
26210 69 73 74 53 68 69 66 74 4a 6f 69 6e 54 79 70 65  istShiftJoinType
26220 28 53 72 63 4c 69 73 74 2a 29 3b 0a 76 6f 69 64  (SrcList*);.void
26230 20 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74 41   sqlite3SrcListA
26240 73 73 69 67 6e 43 75 72 73 6f 72 73 28 50 61 72  ssignCursors(Par
26250 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 29 3b 0a  se*, SrcList*);.
26260 76 6f 69 64 20 73 71 6c 69 74 65 33 49 64 4c 69  void sqlite3IdLi
26270 73 74 44 65 6c 65 74 65 28 73 71 6c 69 74 65 33  stDelete(sqlite3
26280 2a 2c 20 49 64 4c 69 73 74 2a 29 3b 0a 76 6f 69  *, IdList*);.voi
26290 64 20 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74  d sqlite3SrcList
262a0 44 65 6c 65 74 65 28 73 71 6c 69 74 65 33 2a 2c  Delete(sqlite3*,
262b0 20 53 72 63 4c 69 73 74 2a 29 3b 0a 49 6e 64 65   SrcList*);.Inde
262c0 78 20 2a 73 71 6c 69 74 65 33 41 6c 6c 6f 63 61  x *sqlite3Alloca
262d0 74 65 49 6e 64 65 78 4f 62 6a 65 63 74 28 73 71  teIndexObject(sq
262e0 6c 69 74 65 33 2a 2c 69 31 36 2c 69 6e 74 2c 63  lite3*,i16,int,c
262f0 68 61 72 2a 2a 29 3b 0a 49 6e 64 65 78 20 2a 73  har**);.Index *s
26300 71 6c 69 74 65 33 43 72 65 61 74 65 49 6e 64 65  qlite3CreateInde
26310 78 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c  x(Parse*,Token*,
26320 54 6f 6b 65 6e 2a 2c 53 72 63 4c 69 73 74 2a 2c  Token*,SrcList*,
26330 45 78 70 72 4c 69 73 74 2a 2c 69 6e 74 2c 54 6f  ExprList*,int,To
26340 6b 65 6e 2a 2c 0a 20 20 20 20 20 20 20 20 20 20  ken*,.          
26350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26360 45 78 70 72 2a 2c 20 69 6e 74 2c 20 69 6e 74 29  Expr*, int, int)
26370 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44 72  ;.void sqlite3Dr
26380 6f 70 49 6e 64 65 78 28 50 61 72 73 65 2a 2c 20  opIndex(Parse*, 
26390 53 72 63 4c 69 73 74 2a 2c 20 69 6e 74 29 3b 0a  SrcList*, int);.
263a0 69 6e 74 20 73 71 6c 69 74 65 33 53 65 6c 65 63  int sqlite3Selec
263b0 74 28 50 61 72 73 65 2a 2c 20 53 65 6c 65 63 74  t(Parse*, Select
263c0 2a 2c 20 53 65 6c 65 63 74 44 65 73 74 2a 29 3b  *, SelectDest*);
263d0 0a 53 65 6c 65 63 74 20 2a 73 71 6c 69 74 65 33  .Select *sqlite3
263e0 53 65 6c 65 63 74 4e 65 77 28 50 61 72 73 65 2a  SelectNew(Parse*
263f0 2c 45 78 70 72 4c 69 73 74 2a 2c 53 72 63 4c 69  ,ExprList*,SrcLi
26400 73 74 2a 2c 45 78 70 72 2a 2c 45 78 70 72 4c 69  st*,Expr*,ExprLi
26410 73 74 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20  st*,.           
26420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 45 78                Ex
26430 70 72 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 75 33  pr*,ExprList*,u3
26440 32 2c 45 78 70 72 2a 2c 45 78 70 72 2a 29 3b 0a  2,Expr*,Expr*);.
26450 76 6f 69 64 20 73 71 6c 69 74 65 33 53 65 6c 65  void sqlite3Sele
26460 63 74 44 65 6c 65 74 65 28 73 71 6c 69 74 65 33  ctDelete(sqlite3
26470 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 54 61 62  *, Select*);.Tab
26480 6c 65 20 2a 73 71 6c 69 74 65 33 53 72 63 4c 69  le *sqlite3SrcLi
26490 73 74 4c 6f 6f 6b 75 70 28 50 61 72 73 65 2a 2c  stLookup(Parse*,
264a0 20 53 72 63 4c 69 73 74 2a 29 3b 0a 69 6e 74 20   SrcList*);.int 
264b0 73 71 6c 69 74 65 33 49 73 52 65 61 64 4f 6e 6c  sqlite3IsReadOnl
264c0 79 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a  y(Parse*, Table*
264d0 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
264e0 69 74 65 33 4f 70 65 6e 54 61 62 6c 65 28 50 61  ite3OpenTable(Pa
264f0 72 73 65 2a 2c 20 69 6e 74 20 69 43 75 72 2c 20  rse*, int iCur, 
26500 69 6e 74 20 69 44 62 2c 20 54 61 62 6c 65 2a 2c  int iDb, Table*,
26510 20 69 6e 74 29 3b 0a 23 69 66 20 64 65 66 69 6e   int);.#if defin
26520 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ed(SQLITE_ENABLE
26530 5f 55 50 44 41 54 45 5f 44 45 4c 45 54 45 5f 4c  _UPDATE_DELETE_L
26540 49 4d 49 54 29 20 26 26 20 21 64 65 66 69 6e 65  IMIT) && !define
26550 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 55  d(SQLITE_OMIT_SU
26560 42 51 55 45 52 59 29 0a 45 78 70 72 20 2a 73 71  BQUERY).Expr *sq
26570 6c 69 74 65 33 4c 69 6d 69 74 57 68 65 72 65 28  lite3LimitWhere(
26580 50 61 72 73 65 2a 2c 53 72 63 4c 69 73 74 2a 2c  Parse*,SrcList*,
26590 45 78 70 72 2a 2c 45 78 70 72 4c 69 73 74 2a 2c  Expr*,ExprList*,
265a0 45 78 70 72 2a 2c 45 78 70 72 2a 2c 63 68 61 72  Expr*,Expr*,char
265b0 2a 29 3b 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20  *);.#endif.void 
265c0 73 71 6c 69 74 65 33 44 65 6c 65 74 65 46 72 6f  sqlite3DeleteFro
265d0 6d 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73  m(Parse*, SrcLis
265e0 74 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64  t*, Expr*);.void
265f0 20 73 71 6c 69 74 65 33 55 70 64 61 74 65 28 50   sqlite3Update(P
26600 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c  arse*, SrcList*,
26610 20 45 78 70 72 4c 69 73 74 2a 2c 20 45 78 70 72   ExprList*, Expr
26620 2a 2c 20 69 6e 74 29 3b 0a 57 68 65 72 65 49 6e  *, int);.WhereIn
26630 66 6f 20 2a 73 71 6c 69 74 65 33 57 68 65 72 65  fo *sqlite3Where
26640 42 65 67 69 6e 28 50 61 72 73 65 2a 2c 53 72 63  Begin(Parse*,Src
26650 4c 69 73 74 2a 2c 45 78 70 72 2a 2c 45 78 70 72  List*,Expr*,Expr
26660 4c 69 73 74 2a 2c 45 78 70 72 4c 69 73 74 2a 2c  List*,ExprList*,
26670 75 31 36 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73  u16,int);.void s
26680 71 6c 69 74 65 33 57 68 65 72 65 45 6e 64 28 57  qlite3WhereEnd(W
26690 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 4c 6f 67 45  hereInfo*);.LogE
266a0 73 74 20 73 71 6c 69 74 65 33 57 68 65 72 65 4f  st sqlite3WhereO
266b0 75 74 70 75 74 52 6f 77 43 6f 75 6e 74 28 57 68  utputRowCount(Wh
266c0 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73  ereInfo*);.int s
266d0 71 6c 69 74 65 33 57 68 65 72 65 49 73 44 69 73  qlite3WhereIsDis
266e0 74 69 6e 63 74 28 57 68 65 72 65 49 6e 66 6f 2a  tinct(WhereInfo*
266f0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 68  );.int sqlite3Wh
26700 65 72 65 49 73 4f 72 64 65 72 65 64 28 57 68 65  ereIsOrdered(Whe
26710 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73 71  reInfo*);.int sq
26720 6c 69 74 65 33 57 68 65 72 65 49 73 53 6f 72 74  lite3WhereIsSort
26730 65 64 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a  ed(WhereInfo*);.
26740 69 6e 74 20 73 71 6c 69 74 65 33 57 68 65 72 65  int sqlite3Where
26750 43 6f 6e 74 69 6e 75 65 4c 61 62 65 6c 28 57 68  ContinueLabel(Wh
26760 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73  ereInfo*);.int s
26770 71 6c 69 74 65 33 57 68 65 72 65 42 72 65 61 6b  qlite3WhereBreak
26780 4c 61 62 65 6c 28 57 68 65 72 65 49 6e 66 6f 2a  Label(WhereInfo*
26790 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 68  );.int sqlite3Wh
267a0 65 72 65 4f 6b 4f 6e 65 50 61 73 73 28 57 68 65  ereOkOnePass(Whe
267b0 72 65 49 6e 66 6f 2a 2c 20 69 6e 74 2a 29 3b 0a  reInfo*, int*);.
267c0 23 64 65 66 69 6e 65 20 4f 4e 45 50 41 53 53 5f  #define ONEPASS_
267d0 4f 46 46 20 20 20 20 20 20 30 20 20 20 20 20 20  OFF      0      
267e0 20 20 2f 2a 20 55 73 65 20 6f 66 20 4f 4e 45 50    /* Use of ONEP
267f0 41 53 53 20 6e 6f 74 20 61 6c 6c 6f 77 65 64 20  ASS not allowed 
26800 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 4e 45 50 41  */.#define ONEPA
26810 53 53 5f 53 49 4e 47 4c 45 20 20 20 31 20 20 20  SS_SINGLE   1   
26820 20 20 20 20 20 2f 2a 20 4f 4e 45 50 41 53 53 20       /* ONEPASS 
26830 76 61 6c 69 64 20 66 6f 72 20 61 20 73 69 6e 67  valid for a sing
26840 6c 65 20 72 6f 77 20 75 70 64 61 74 65 20 2a 2f  le row update */
26850 0a 23 64 65 66 69 6e 65 20 4f 4e 45 50 41 53 53  .#define ONEPASS
26860 5f 4d 55 4c 54 49 20 20 20 20 32 20 20 20 20 20  _MULTI    2     
26870 20 20 20 2f 2a 20 4f 4e 45 50 41 53 53 20 69 73     /* ONEPASS is
26880 20 76 61 6c 69 64 20 66 6f 72 20 6d 75 6c 74 69   valid for multi
26890 70 6c 65 20 72 6f 77 73 20 2a 2f 0a 76 6f 69 64  ple rows */.void
268a0 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65   sqlite3ExprCode
268b0 4c 6f 61 64 49 6e 64 65 78 43 6f 6c 75 6d 6e 28  LoadIndexColumn(
268c0 50 61 72 73 65 2a 2c 20 49 6e 64 65 78 2a 2c 20  Parse*, Index*, 
268d0 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  int, int, int);.
268e0 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 43  int sqlite3ExprC
268f0 6f 64 65 47 65 74 43 6f 6c 75 6d 6e 28 50 61 72  odeGetColumn(Par
26900 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74  se*, Table*, int
26910 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 75 38 29 3b  , int, int, u8);
26920 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
26930 72 43 6f 64 65 47 65 74 43 6f 6c 75 6d 6e 54 6f  rCodeGetColumnTo
26940 52 65 67 28 50 61 72 73 65 2a 2c 20 54 61 62 6c  Reg(Parse*, Tabl
26950 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e  e*, int, int, in
26960 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
26970 45 78 70 72 43 6f 64 65 47 65 74 43 6f 6c 75 6d  ExprCodeGetColum
26980 6e 4f 66 54 61 62 6c 65 28 56 64 62 65 2a 2c 20  nOfTable(Vdbe*, 
26990 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74  Table*, int, int
269a0 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
269b0 69 74 65 33 45 78 70 72 43 6f 64 65 4d 6f 76 65  ite3ExprCodeMove
269c0 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e  (Parse*, int, in
269d0 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  t, int);.void sq
269e0 6c 69 74 65 33 45 78 70 72 43 61 63 68 65 53 74  lite3ExprCacheSt
269f0 6f 72 65 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c  ore(Parse*, int,
26a00 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64   int, int);.void
26a10 20 73 71 6c 69 74 65 33 45 78 70 72 43 61 63 68   sqlite3ExprCach
26a20 65 50 75 73 68 28 50 61 72 73 65 2a 29 3b 0a 76  ePush(Parse*);.v
26a30 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 43  oid sqlite3ExprC
26a40 61 63 68 65 50 6f 70 28 50 61 72 73 65 2a 29 3b  achePop(Parse*);
26a50 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
26a60 72 43 61 63 68 65 52 65 6d 6f 76 65 28 50 61 72  rCacheRemove(Par
26a70 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  se*, int, int);.
26a80 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
26a90 43 61 63 68 65 43 6c 65 61 72 28 50 61 72 73 65  CacheClear(Parse
26aa0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
26ab0 45 78 70 72 43 61 63 68 65 41 66 66 69 6e 69 74  ExprCacheAffinit
26ac0 79 43 68 61 6e 67 65 28 50 61 72 73 65 2a 2c 20  yChange(Parse*, 
26ad0 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  int, int);.void 
26ae0 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 28  sqlite3ExprCode(
26af0 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69  Parse*, Expr*, i
26b00 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
26b10 33 45 78 70 72 43 6f 64 65 43 6f 70 79 28 50 61  3ExprCodeCopy(Pa
26b20 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74  rse*, Expr*, int
26b30 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
26b40 78 70 72 43 6f 64 65 46 61 63 74 6f 72 61 62 6c  xprCodeFactorabl
26b50 65 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c  e(Parse*, Expr*,
26b60 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
26b70 74 65 33 45 78 70 72 43 6f 64 65 41 74 49 6e 69  te3ExprCodeAtIni
26b80 74 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c  t(Parse*, Expr*,
26b90 20 69 6e 74 2c 20 75 38 29 3b 0a 69 6e 74 20 73   int, u8);.int s
26ba0 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 54 65  qlite3ExprCodeTe
26bb0 6d 70 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a  mp(Parse*, Expr*
26bc0 2c 20 69 6e 74 2a 29 3b 0a 69 6e 74 20 73 71 6c  , int*);.int sql
26bd0 69 74 65 33 45 78 70 72 43 6f 64 65 54 61 72 67  ite3ExprCodeTarg
26be0 65 74 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a  et(Parse*, Expr*
26bf0 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
26c00 69 74 65 33 45 78 70 72 43 6f 64 65 41 6e 64 43  ite3ExprCodeAndC
26c10 61 63 68 65 28 50 61 72 73 65 2a 2c 20 45 78 70  ache(Parse*, Exp
26c20 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71  r*, int);.int sq
26c30 6c 69 74 65 33 45 78 70 72 43 6f 64 65 45 78 70  lite3ExprCodeExp
26c40 72 4c 69 73 74 28 50 61 72 73 65 2a 2c 20 45 78  rList(Parse*, Ex
26c50 70 72 4c 69 73 74 2a 2c 20 69 6e 74 2c 20 69 6e  prList*, int, in
26c60 74 2c 20 75 38 29 3b 0a 23 64 65 66 69 6e 65 20  t, u8);.#define 
26c70 53 51 4c 49 54 45 5f 45 43 45 4c 5f 44 55 50 20  SQLITE_ECEL_DUP 
26c80 20 20 20 20 20 30 78 30 31 20 20 2f 2a 20 44 65       0x01  /* De
26c90 65 70 2c 20 6e 6f 74 20 73 68 61 6c 6c 6f 77 20  ep, not shallow 
26ca0 63 6f 70 69 65 73 20 2a 2f 0a 23 64 65 66 69 6e  copies */.#defin
26cb0 65 20 53 51 4c 49 54 45 5f 45 43 45 4c 5f 46 41  e SQLITE_ECEL_FA
26cc0 43 54 4f 52 20 20 20 30 78 30 32 20 20 2f 2a 20  CTOR   0x02  /* 
26cd0 46 61 63 74 6f 72 20 6f 75 74 20 63 6f 6e 73 74  Factor out const
26ce0 61 6e 74 20 74 65 72 6d 73 20 2a 2f 0a 23 64 65  ant terms */.#de
26cf0 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 43 45 4c  fine SQLITE_ECEL
26d00 5f 52 45 46 20 20 20 20 20 20 30 78 30 34 20 20  _REF      0x04  
26d10 2f 2a 20 55 73 65 20 45 78 70 72 4c 69 73 74 2e  /* Use ExprList.
26d20 75 2e 78 2e 69 4f 72 64 65 72 42 79 43 6f 6c 20  u.x.iOrderByCol 
26d30 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  */.void sqlite3E
26d40 78 70 72 49 66 54 72 75 65 28 50 61 72 73 65 2a  xprIfTrue(Parse*
26d50 2c 20 45 78 70 72 2a 2c 20 69 6e 74 2c 20 69 6e  , Expr*, int, in
26d60 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
26d70 45 78 70 72 49 66 46 61 6c 73 65 28 50 61 72 73  ExprIfFalse(Pars
26d80 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 2c 20  e*, Expr*, int, 
26d90 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
26da0 65 33 45 78 70 72 49 66 46 61 6c 73 65 44 75 70  e3ExprIfFalseDup
26db0 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20  (Parse*, Expr*, 
26dc0 69 6e 74 2c 20 69 6e 74 29 3b 0a 54 61 62 6c 65  int, int);.Table
26dd0 20 2a 73 71 6c 69 74 65 33 46 69 6e 64 54 61 62   *sqlite3FindTab
26de0 6c 65 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73  le(sqlite3*,cons
26df0 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63  t char*, const c
26e00 68 61 72 2a 29 3b 0a 54 61 62 6c 65 20 2a 73 71  har*);.Table *sq
26e10 6c 69 74 65 33 4c 6f 63 61 74 65 54 61 62 6c 65  lite3LocateTable
26e20 28 50 61 72 73 65 2a 2c 69 6e 74 20 69 73 56 69  (Parse*,int isVi
26e30 65 77 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  ew,const char*, 
26e40 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 54 61  const char*);.Ta
26e50 62 6c 65 20 2a 73 71 6c 69 74 65 33 4c 6f 63 61  ble *sqlite3Loca
26e60 74 65 54 61 62 6c 65 49 74 65 6d 28 50 61 72 73  teTableItem(Pars
26e70 65 2a 2c 69 6e 74 20 69 73 56 69 65 77 2c 73 74  e*,int isView,st
26e80 72 75 63 74 20 53 72 63 4c 69 73 74 5f 69 74 65  ruct SrcList_ite
26e90 6d 20 2a 29 3b 0a 49 6e 64 65 78 20 2a 73 71 6c  m *);.Index *sql
26ea0 69 74 65 33 46 69 6e 64 49 6e 64 65 78 28 73 71  ite3FindIndex(sq
26eb0 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61  lite3*,const cha
26ec0 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29  r*, const char*)
26ed0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 55 6e  ;.void sqlite3Un
26ee0 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65 54 61 62  linkAndDeleteTab
26ef0 6c 65 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c  le(sqlite3*,int,
26f00 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f  const char*);.vo
26f10 69 64 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b  id sqlite3Unlink
26f20 41 6e 64 44 65 6c 65 74 65 49 6e 64 65 78 28 73  AndDeleteIndex(s
26f30 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73  qlite3*,int,cons
26f40 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73  t char*);.void s
26f50 71 6c 69 74 65 33 56 61 63 75 75 6d 28 50 61 72  qlite3Vacuum(Par
26f60 73 65 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  se*);.int sqlite
26f70 33 52 75 6e 56 61 63 75 75 6d 28 63 68 61 72 2a  3RunVacuum(char*
26f80 2a 2c 20 73 71 6c 69 74 65 33 2a 29 3b 0a 63 68  *, sqlite3*);.ch
26f90 61 72 20 2a 73 71 6c 69 74 65 33 4e 61 6d 65 46  ar *sqlite3NameF
26fa0 72 6f 6d 54 6f 6b 65 6e 28 73 71 6c 69 74 65 33  romToken(sqlite3
26fb0 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20  *, Token*);.int 
26fc0 73 71 6c 69 74 65 33 45 78 70 72 43 6f 6d 70 61  sqlite3ExprCompa
26fd0 72 65 28 45 78 70 72 2a 2c 20 45 78 70 72 2a 2c  re(Expr*, Expr*,
26fe0 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74   int);.int sqlit
26ff0 65 33 45 78 70 72 4c 69 73 74 43 6f 6d 70 61 72  e3ExprListCompar
27000 65 28 45 78 70 72 4c 69 73 74 2a 2c 20 45 78 70  e(ExprList*, Exp
27010 72 4c 69 73 74 2a 2c 20 69 6e 74 29 3b 0a 69 6e  rList*, int);.in
27020 74 20 73 71 6c 69 74 65 33 45 78 70 72 49 6d 70  t sqlite3ExprImp
27030 6c 69 65 73 45 78 70 72 28 45 78 70 72 2a 2c 20  liesExpr(Expr*, 
27040 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69  Expr*, int);.voi
27050 64 20 73 71 6c 69 74 65 33 45 78 70 72 41 6e 61  d sqlite3ExprAna
27060 6c 79 7a 65 41 67 67 72 65 67 61 74 65 73 28 4e  lyzeAggregates(N
27070 61 6d 65 43 6f 6e 74 65 78 74 2a 2c 20 45 78 70  ameContext*, Exp
27080 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  r*);.void sqlite
27090 33 45 78 70 72 41 6e 61 6c 79 7a 65 41 67 67 4c  3ExprAnalyzeAggL
270a0 69 73 74 28 4e 61 6d 65 43 6f 6e 74 65 78 74 2a  ist(NameContext*
270b0 2c 45 78 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74  ,ExprList*);.int
270c0 20 73 71 6c 69 74 65 33 46 75 6e 63 74 69 6f 6e   sqlite3Function
270d0 55 73 65 73 54 68 69 73 53 72 63 28 45 78 70 72  UsesThisSrc(Expr
270e0 2a 2c 20 53 72 63 4c 69 73 74 2a 29 3b 0a 56 64  *, SrcList*);.Vd
270f0 62 65 20 2a 73 71 6c 69 74 65 33 47 65 74 56 64  be *sqlite3GetVd
27100 62 65 28 50 61 72 73 65 2a 29 3b 0a 23 69 66 6e  be(Parse*);.#ifn
27110 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
27120 42 55 49 4c 54 49 4e 5f 54 45 53 54 0a 76 6f 69  BUILTIN_TEST.voi
27130 64 20 73 71 6c 69 74 65 33 50 72 6e 67 53 61 76  d sqlite3PrngSav
27140 65 53 74 61 74 65 28 76 6f 69 64 29 3b 0a 76 6f  eState(void);.vo
27150 69 64 20 73 71 6c 69 74 65 33 50 72 6e 67 52 65  id sqlite3PrngRe
27160 73 74 6f 72 65 53 74 61 74 65 28 76 6f 69 64 29  storeState(void)
27170 3b 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71  ;.#endif.void sq
27180 6c 69 74 65 33 52 6f 6c 6c 62 61 63 6b 41 6c 6c  lite3RollbackAll
27190 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 29 3b 0a  (sqlite3*,int);.
271a0 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 64 65  void sqlite3Code
271b0 56 65 72 69 66 79 53 63 68 65 6d 61 28 50 61 72  VerifySchema(Par
271c0 73 65 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  se*, int);.void 
271d0 73 71 6c 69 74 65 33 43 6f 64 65 56 65 72 69 66  sqlite3CodeVerif
271e0 79 4e 61 6d 65 64 53 63 68 65 6d 61 28 50 61 72  yNamedSchema(Par
271f0 73 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20  se*, const char 
27200 2a 7a 44 62 29 3b 0a 76 6f 69 64 20 73 71 6c 69  *zDb);.void sqli
27210 74 65 33 42 65 67 69 6e 54 72 61 6e 73 61 63 74  te3BeginTransact
27220 69 6f 6e 28 50 61 72 73 65 2a 2c 20 69 6e 74 29  ion(Parse*, int)
27230 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f  ;.void sqlite3Co
27240 6d 6d 69 74 54 72 61 6e 73 61 63 74 69 6f 6e 28  mmitTransaction(
27250 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71  Parse*);.void sq
27260 6c 69 74 65 33 52 6f 6c 6c 62 61 63 6b 54 72 61  lite3RollbackTra
27270 6e 73 61 63 74 69 6f 6e 28 50 61 72 73 65 2a 29  nsaction(Parse*)
27280 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 61  ;.void sqlite3Sa
27290 76 65 70 6f 69 6e 74 28 50 61 72 73 65 2a 2c 20  vepoint(Parse*, 
272a0 69 6e 74 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f  int, Token*);.vo
272b0 69 64 20 73 71 6c 69 74 65 33 43 6c 6f 73 65 53  id sqlite3CloseS
272c0 61 76 65 70 6f 69 6e 74 73 28 73 71 6c 69 74 65  avepoints(sqlite
272d0 33 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  3 *);.void sqlit
272e0 65 33 4c 65 61 76 65 4d 75 74 65 78 41 6e 64 43  e3LeaveMutexAndC
272f0 6c 6f 73 65 5a 6f 6d 62 69 65 28 73 71 6c 69 74  loseZombie(sqlit
27300 65 33 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  e3*);.int sqlite
27310 33 45 78 70 72 49 73 43 6f 6e 73 74 61 6e 74 28  3ExprIsConstant(
27320 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  Expr*);.int sqli
27330 74 65 33 45 78 70 72 49 73 43 6f 6e 73 74 61 6e  te3ExprIsConstan
27340 74 4e 6f 74 4a 6f 69 6e 28 45 78 70 72 2a 29 3b  tNotJoin(Expr*);
27350 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72  .int sqlite3Expr
27360 49 73 43 6f 6e 73 74 61 6e 74 4f 72 46 75 6e 63  IsConstantOrFunc
27370 74 69 6f 6e 28 45 78 70 72 2a 2c 20 75 38 29 3b  tion(Expr*, u8);
27380 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72  .int sqlite3Expr
27390 49 73 54 61 62 6c 65 43 6f 6e 73 74 61 6e 74 28  IsTableConstant(
273a0 45 78 70 72 2a 2c 69 6e 74 29 3b 0a 23 69 66 64  Expr*,int);.#ifd
273b0 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ef SQLITE_ENABLE
273c0 5f 43 55 52 53 4f 52 5f 48 49 4e 54 53 0a 69 6e  _CURSOR_HINTS.in
273d0 74 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 6e  t sqlite3ExprCon
273e0 74 61 69 6e 73 53 75 62 71 75 65 72 79 28 45 78  tainsSubquery(Ex
273f0 70 72 2a 29 3b 0a 23 65 6e 64 69 66 0a 69 6e 74  pr*);.#endif.int
27400 20 73 71 6c 69 74 65 33 45 78 70 72 49 73 49 6e   sqlite3ExprIsIn
27410 74 65 67 65 72 28 45 78 70 72 2a 2c 20 69 6e 74  teger(Expr*, int
27420 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45  *);.int sqlite3E
27430 78 70 72 43 61 6e 42 65 4e 75 6c 6c 28 63 6f 6e  xprCanBeNull(con
27440 73 74 20 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73  st Expr*);.int s
27450 71 6c 69 74 65 33 45 78 70 72 4e 65 65 64 73 4e  qlite3ExprNeedsN
27460 6f 41 66 66 69 6e 69 74 79 43 68 61 6e 67 65 28  oAffinityChange(
27470 63 6f 6e 73 74 20 45 78 70 72 2a 2c 20 63 68 61  const Expr*, cha
27480 72 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49  r);.int sqlite3I
27490 73 52 6f 77 69 64 28 63 6f 6e 73 74 20 63 68 61  sRowid(const cha
274a0 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  r*);.void sqlite
274b0 33 47 65 6e 65 72 61 74 65 52 6f 77 44 65 6c 65  3GenerateRowDele
274c0 74 65 28 0a 20 20 20 20 50 61 72 73 65 2a 2c 54  te(.    Parse*,T
274d0 61 62 6c 65 2a 2c 54 72 69 67 67 65 72 2a 2c 69  able*,Trigger*,i
274e0 6e 74 2c 69 6e 74 2c 69 6e 74 2c 69 31 36 2c 75  nt,int,int,i16,u
274f0 38 2c 75 38 2c 75 38 2c 69 6e 74 29 3b 0a 76 6f  8,u8,u8,int);.vo
27500 69 64 20 73 71 6c 69 74 65 33 47 65 6e 65 72 61  id sqlite3Genera
27510 74 65 52 6f 77 49 6e 64 65 78 44 65 6c 65 74 65  teRowIndexDelete
27520 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c  (Parse*, Table*,
27530 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 2a 2c   int, int, int*,
27540 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74   int);.int sqlit
27550 65 33 47 65 6e 65 72 61 74 65 49 6e 64 65 78 4b  e3GenerateIndexK
27560 65 79 28 50 61 72 73 65 2a 2c 20 49 6e 64 65 78  ey(Parse*, Index
27570 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74  *, int, int, int
27580 2c 20 69 6e 74 2a 2c 49 6e 64 65 78 2a 2c 69 6e  , int*,Index*,in
27590 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
275a0 52 65 73 6f 6c 76 65 50 61 72 74 49 64 78 4c 61  ResolvePartIdxLa
275b0 62 65 6c 28 50 61 72 73 65 2a 2c 69 6e 74 29 3b  bel(Parse*,int);
275c0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 47 65 6e  .void sqlite3Gen
275d0 65 72 61 74 65 43 6f 6e 73 74 72 61 69 6e 74 43  erateConstraintC
275e0 68 65 63 6b 73 28 50 61 72 73 65 2a 2c 54 61 62  hecks(Parse*,Tab
275f0 6c 65 2a 2c 69 6e 74 2a 2c 69 6e 74 2c 69 6e 74  le*,int*,int,int
27600 2c 69 6e 74 2c 69 6e 74 2c 0a 20 20 20 20 20 20  ,int,int,.      
27610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 75                 u
27630 38 2c 75 38 2c 69 6e 74 2c 69 6e 74 2a 2c 69 6e  8,u8,int,int*,in
27640 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  t*);.void sqlite
27650 33 43 6f 6d 70 6c 65 74 65 49 6e 73 65 72 74 69  3CompleteInserti
27660 6f 6e 28 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a  on(Parse*,Table*
27670 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74  ,int,int,int,int
27680 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 29 3b 0a  *,int,int,int);.
27690 69 6e 74 20 73 71 6c 69 74 65 33 4f 70 65 6e 54  int sqlite3OpenT
276a0 61 62 6c 65 41 6e 64 49 6e 64 69 63 65 73 28 50  ableAndIndices(P
276b0 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69  arse*, Table*, i
276c0 6e 74 2c 20 75 38 2c 20 69 6e 74 2c 20 75 38 2a  nt, u8, int, u8*
276d0 2c 20 69 6e 74 2a 2c 20 69 6e 74 2a 29 3b 0a 76  , int*, int*);.v
276e0 6f 69 64 20 73 71 6c 69 74 65 33 42 65 67 69 6e  oid sqlite3Begin
276f0 57 72 69 74 65 4f 70 65 72 61 74 69 6f 6e 28 50  WriteOperation(P
27700 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 29  arse*, int, int)
27710 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 75  ;.void sqlite3Mu
27720 6c 74 69 57 72 69 74 65 28 50 61 72 73 65 2a 29  ltiWrite(Parse*)
27730 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 61  ;.void sqlite3Ma
27740 79 41 62 6f 72 74 28 50 61 72 73 65 2a 29 3b 0a  yAbort(Parse*);.
27750 76 6f 69 64 20 73 71 6c 69 74 65 33 48 61 6c 74  void sqlite3Halt
27760 43 6f 6e 73 74 72 61 69 6e 74 28 50 61 72 73 65  Constraint(Parse
27770 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 63 68 61  *, int, int, cha
27780 72 2a 2c 20 69 38 2c 20 75 38 29 3b 0a 76 6f 69  r*, i8, u8);.voi
27790 64 20 73 71 6c 69 74 65 33 55 6e 69 71 75 65 43  d sqlite3UniqueC
277a0 6f 6e 73 74 72 61 69 6e 74 28 50 61 72 73 65 2a  onstraint(Parse*
277b0 2c 20 69 6e 74 2c 20 49 6e 64 65 78 2a 29 3b 0a  , int, Index*);.
277c0 76 6f 69 64 20 73 71 6c 69 74 65 33 52 6f 77 69  void sqlite3Rowi
277d0 64 43 6f 6e 73 74 72 61 69 6e 74 28 50 61 72 73  dConstraint(Pars
277e0 65 2a 2c 20 69 6e 74 2c 20 54 61 62 6c 65 2a 29  e*, int, Table*)
277f0 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45  ;.Expr *sqlite3E
27800 78 70 72 44 75 70 28 73 71 6c 69 74 65 33 2a 2c  xprDup(sqlite3*,
27810 45 78 70 72 2a 2c 69 6e 74 29 3b 0a 45 78 70 72  Expr*,int);.Expr
27820 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 45 78 70  List *sqlite3Exp
27830 72 4c 69 73 74 44 75 70 28 73 71 6c 69 74 65 33  rListDup(sqlite3
27840 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 69 6e 74 29  *,ExprList*,int)
27850 3b 0a 53 72 63 4c 69 73 74 20 2a 73 71 6c 69 74  ;.SrcList *sqlit
27860 65 33 53 72 63 4c 69 73 74 44 75 70 28 73 71 6c  e3SrcListDup(sql
27870 69 74 65 33 2a 2c 53 72 63 4c 69 73 74 2a 2c 69  ite3*,SrcList*,i
27880 6e 74 29 3b 0a 49 64 4c 69 73 74 20 2a 73 71 6c  nt);.IdList *sql
27890 69 74 65 33 49 64 4c 69 73 74 44 75 70 28 73 71  ite3IdListDup(sq
278a0 6c 69 74 65 33 2a 2c 49 64 4c 69 73 74 2a 29 3b  lite3*,IdList*);
278b0 0a 53 65 6c 65 63 74 20 2a 73 71 6c 69 74 65 33  .Select *sqlite3
278c0 53 65 6c 65 63 74 44 75 70 28 73 71 6c 69 74 65  SelectDup(sqlite
278d0 33 2a 2c 53 65 6c 65 63 74 2a 2c 69 6e 74 29 3b  3*,Select*,int);
278e0 0a 23 69 66 20 53 45 4c 45 43 54 54 52 41 43 45  .#if SELECTTRACE
278f0 5f 45 4e 41 42 4c 45 44 0a 76 6f 69 64 20 73 71  _ENABLED.void sq
27900 6c 69 74 65 33 53 65 6c 65 63 74 53 65 74 4e 61  lite3SelectSetNa
27910 6d 65 28 53 65 6c 65 63 74 2a 2c 63 6f 6e 73 74  me(Select*,const
27920 20 63 68 61 72 2a 29 3b 0a 23 65 6c 73 65 0a 23   char*);.#else.#
27930 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53   define sqlite3S
27940 65 6c 65 63 74 53 65 74 4e 61 6d 65 28 41 2c 42  electSetName(A,B
27950 29 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71  ).#endif.void sq
27960 6c 69 74 65 33 49 6e 73 65 72 74 42 75 69 6c 74  lite3InsertBuilt
27970 69 6e 46 75 6e 63 73 28 46 75 6e 63 44 65 66 2a  inFuncs(FuncDef*
27980 2c 69 6e 74 29 3b 0a 46 75 6e 63 44 65 66 20 2a  ,int);.FuncDef *
27990 73 71 6c 69 74 65 33 46 69 6e 64 46 75 6e 63 74  sqlite3FindFunct
279a0 69 6f 6e 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e  ion(sqlite3*,con
279b0 73 74 20 63 68 61 72 2a 2c 69 6e 74 2c 75 38 2c  st char*,int,u8,
279c0 75 38 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  u8);.void sqlite
279d0 33 52 65 67 69 73 74 65 72 42 75 69 6c 74 69 6e  3RegisterBuiltin
279e0 46 75 6e 63 74 69 6f 6e 73 28 76 6f 69 64 29 3b  Functions(void);
279f0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 67  .void sqlite3Reg
27a00 69 73 74 65 72 44 61 74 65 54 69 6d 65 46 75 6e  isterDateTimeFun
27a10 63 74 69 6f 6e 73 28 76 6f 69 64 29 3b 0a 76 6f  ctions(void);.vo
27a20 69 64 20 73 71 6c 69 74 65 33 52 65 67 69 73 74  id sqlite3Regist
27a30 65 72 50 65 72 43 6f 6e 6e 65 63 74 69 6f 6e 42  erPerConnectionB
27a40 75 69 6c 74 69 6e 46 75 6e 63 74 69 6f 6e 73 28  uiltinFunctions(
27a50 73 71 6c 69 74 65 33 2a 29 3b 0a 69 6e 74 20 73  sqlite3*);.int s
27a60 71 6c 69 74 65 33 53 61 66 65 74 79 43 68 65 63  qlite3SafetyChec
27a70 6b 4f 6b 28 73 71 6c 69 74 65 33 2a 29 3b 0a 69  kOk(sqlite3*);.i
27a80 6e 74 20 73 71 6c 69 74 65 33 53 61 66 65 74 79  nt sqlite3Safety
27a90 43 68 65 63 6b 53 69 63 6b 4f 72 4f 6b 28 73 71  CheckSickOrOk(sq
27aa0 6c 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20 73 71  lite3*);.void sq
27ab0 6c 69 74 65 33 43 68 61 6e 67 65 43 6f 6f 6b 69  lite3ChangeCooki
27ac0 65 28 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a  e(Parse*, int);.
27ad0 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51  .#if !defined(SQ
27ae0 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 45 57 29 20  LITE_OMIT_VIEW) 
27af0 26 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  && !defined(SQLI
27b00 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47 45 52 29  TE_OMIT_TRIGGER)
27b10 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 61 74  .void sqlite3Mat
27b20 65 72 69 61 6c 69 7a 65 56 69 65 77 28 50 61 72  erializeView(Par
27b30 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 45 78 70  se*, Table*, Exp
27b40 72 2a 2c 20 69 6e 74 29 3b 0a 23 65 6e 64 69 66  r*, int);.#endif
27b50 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
27b60 5f 4f 4d 49 54 5f 54 52 49 47 47 45 52 0a 20 20  _OMIT_TRIGGER.  
27b70 76 6f 69 64 20 73 71 6c 69 74 65 33 42 65 67 69  void sqlite3Begi
27b80 6e 54 72 69 67 67 65 72 28 50 61 72 73 65 2a 2c  nTrigger(Parse*,
27b90 20 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 69   Token*,Token*,i
27ba0 6e 74 2c 69 6e 74 2c 49 64 4c 69 73 74 2a 2c 53  nt,int,IdList*,S
27bb0 72 63 4c 69 73 74 2a 2c 0a 20 20 20 20 20 20 20  rcList*,.       
27bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27bd0 20 20 20 20 45 78 70 72 2a 2c 69 6e 74 2c 20 69      Expr*,int, i
27be0 6e 74 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69  nt);.  void sqli
27bf0 74 65 33 46 69 6e 69 73 68 54 72 69 67 67 65 72  te3FinishTrigger
27c00 28 50 61 72 73 65 2a 2c 20 54 72 69 67 67 65 72  (Parse*, Trigger
27c10 53 74 65 70 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a  Step*, Token*);.
27c20 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 44 72    void sqlite3Dr
27c30 6f 70 54 72 69 67 67 65 72 28 50 61 72 73 65 2a  opTrigger(Parse*
27c40 2c 20 53 72 63 4c 69 73 74 2a 2c 20 69 6e 74 29  , SrcList*, int)
27c50 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
27c60 44 72 6f 70 54 72 69 67 67 65 72 50 74 72 28 50  DropTriggerPtr(P
27c70 61 72 73 65 2a 2c 20 54 72 69 67 67 65 72 2a 29  arse*, Trigger*)
27c80 3b 0a 20 20 54 72 69 67 67 65 72 20 2a 73 71 6c  ;.  Trigger *sql
27c90 69 74 65 33 54 72 69 67 67 65 72 73 45 78 69 73  ite3TriggersExis
27ca0 74 28 50 61 72 73 65 20 2a 2c 20 54 61 62 6c 65  t(Parse *, Table
27cb0 2a 2c 20 69 6e 74 2c 20 45 78 70 72 4c 69 73 74  *, int, ExprList
27cc0 2a 2c 20 69 6e 74 20 2a 70 4d 61 73 6b 29 3b 0a  *, int *pMask);.
27cd0 20 20 54 72 69 67 67 65 72 20 2a 73 71 6c 69 74    Trigger *sqlit
27ce0 65 33 54 72 69 67 67 65 72 4c 69 73 74 28 50 61  e3TriggerList(Pa
27cf0 72 73 65 20 2a 2c 20 54 61 62 6c 65 20 2a 29 3b  rse *, Table *);
27d00 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 43  .  void sqlite3C
27d10 6f 64 65 52 6f 77 54 72 69 67 67 65 72 28 50 61  odeRowTrigger(Pa
27d20 72 73 65 2a 2c 20 54 72 69 67 67 65 72 20 2a 2c  rse*, Trigger *,
27d30 20 69 6e 74 2c 20 45 78 70 72 4c 69 73 74 2a 2c   int, ExprList*,
27d40 20 69 6e 74 2c 20 54 61 62 6c 65 20 2a 2c 0a 20   int, Table *,. 
27d50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27d60 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 2c 20             int, 
27d70 69 6e 74 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69  int, int);.  voi
27d80 64 20 73 71 6c 69 74 65 33 43 6f 64 65 52 6f 77  d sqlite3CodeRow
27d90 54 72 69 67 67 65 72 44 69 72 65 63 74 28 50 61  TriggerDirect(Pa
27da0 72 73 65 20 2a 2c 20 54 72 69 67 67 65 72 20 2a  rse *, Trigger *
27db0 2c 20 54 61 62 6c 65 20 2a 2c 20 69 6e 74 2c 20  , Table *, int, 
27dc0 69 6e 74 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69  int, int);.  voi
27dd0 64 20 73 71 6c 69 74 65 56 69 65 77 54 72 69 67  d sqliteViewTrig
27de0 67 65 72 73 28 50 61 72 73 65 2a 2c 20 54 61 62  gers(Parse*, Tab
27df0 6c 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 2c  le*, Expr*, int,
27e00 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a 20 20 76   ExprList*);.  v
27e10 6f 69 64 20 73 71 6c 69 74 65 33 44 65 6c 65 74  oid sqlite3Delet
27e20 65 54 72 69 67 67 65 72 53 74 65 70 28 73 71 6c  eTriggerStep(sql
27e30 69 74 65 33 2a 2c 20 54 72 69 67 67 65 72 53 74  ite3*, TriggerSt
27e40 65 70 2a 29 3b 0a 20 20 54 72 69 67 67 65 72 53  ep*);.  TriggerS
27e50 74 65 70 20 2a 73 71 6c 69 74 65 33 54 72 69 67  tep *sqlite3Trig
27e60 67 65 72 53 65 6c 65 63 74 53 74 65 70 28 73 71  gerSelectStep(sq
27e70 6c 69 74 65 33 2a 2c 53 65 6c 65 63 74 2a 29 3b  lite3*,Select*);
27e80 0a 20 20 54 72 69 67 67 65 72 53 74 65 70 20 2a  .  TriggerStep *
27e90 73 71 6c 69 74 65 33 54 72 69 67 67 65 72 49 6e  sqlite3TriggerIn
27ea0 73 65 72 74 53 74 65 70 28 73 71 6c 69 74 65 33  sertStep(sqlite3
27eb0 2a 2c 54 6f 6b 65 6e 2a 2c 20 49 64 4c 69 73 74  *,Token*, IdList
27ec0 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  *,.             
27ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27ee0 20 20 20 20 20 20 20 20 20 20 20 53 65 6c 65 63             Selec
27ef0 74 2a 2c 75 38 29 3b 0a 20 20 54 72 69 67 67 65  t*,u8);.  Trigge
27f00 72 53 74 65 70 20 2a 73 71 6c 69 74 65 33 54 72  rStep *sqlite3Tr
27f10 69 67 67 65 72 55 70 64 61 74 65 53 74 65 70 28  iggerUpdateStep(
27f20 73 71 6c 69 74 65 33 2a 2c 54 6f 6b 65 6e 2a 2c  sqlite3*,Token*,
27f30 45 78 70 72 4c 69 73 74 2a 2c 20 45 78 70 72 2a  ExprList*, Expr*
27f40 2c 20 75 38 29 3b 0a 20 20 54 72 69 67 67 65 72  , u8);.  Trigger
27f50 53 74 65 70 20 2a 73 71 6c 69 74 65 33 54 72 69  Step *sqlite3Tri
27f60 67 67 65 72 44 65 6c 65 74 65 53 74 65 70 28 73  ggerDeleteStep(s
27f70 71 6c 69 74 65 33 2a 2c 54 6f 6b 65 6e 2a 2c 20  qlite3*,Token*, 
27f80 45 78 70 72 2a 29 3b 0a 20 20 76 6f 69 64 20 73  Expr*);.  void s
27f90 71 6c 69 74 65 33 44 65 6c 65 74 65 54 72 69 67  qlite3DeleteTrig
27fa0 67 65 72 28 73 71 6c 69 74 65 33 2a 2c 20 54 72  ger(sqlite3*, Tr
27fb0 69 67 67 65 72 2a 29 3b 0a 20 20 76 6f 69 64 20  igger*);.  void 
27fc0 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64  sqlite3UnlinkAnd
27fd0 44 65 6c 65 74 65 54 72 69 67 67 65 72 28 73 71  DeleteTrigger(sq
27fe0 6c 69 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74  lite3*,int,const
27ff0 20 63 68 61 72 2a 29 3b 0a 20 20 75 33 32 20 73   char*);.  u32 s
28000 71 6c 69 74 65 33 54 72 69 67 67 65 72 43 6f 6c  qlite3TriggerCol
28010 6d 61 73 6b 28 50 61 72 73 65 2a 2c 54 72 69 67  mask(Parse*,Trig
28020 67 65 72 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 69  ger*,ExprList*,i
28030 6e 74 2c 69 6e 74 2c 54 61 62 6c 65 2a 2c 69 6e  nt,int,Table*,in
28040 74 29 3b 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  t);.# define sql
28050 69 74 65 33 50 61 72 73 65 54 6f 70 6c 65 76 65  ite3ParseTopleve
28060 6c 28 70 29 20 28 28 70 29 2d 3e 70 54 6f 70 6c  l(p) ((p)->pTopl
28070 65 76 65 6c 20 3f 20 28 70 29 2d 3e 70 54 6f 70  evel ? (p)->pTop
28080 6c 65 76 65 6c 20 3a 20 28 70 29 29 0a 23 20 64  level : (p)).# d
28090 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 54  efine sqlite3IsT
280a0 6f 70 6c 65 76 65 6c 28 70 29 20 28 28 70 29 2d  oplevel(p) ((p)-
280b0 3e 70 54 6f 70 6c 65 76 65 6c 3d 3d 30 29 0a 23  >pToplevel==0).#
280c0 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71  else.# define sq
280d0 6c 69 74 65 33 54 72 69 67 67 65 72 73 45 78 69  lite3TriggersExi
280e0 73 74 28 42 2c 43 2c 44 2c 45 2c 46 29 20 30 0a  st(B,C,D,E,F) 0.
280f0 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
28100 44 65 6c 65 74 65 54 72 69 67 67 65 72 28 41 2c  DeleteTrigger(A,
28110 42 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  B).# define sqli
28120 74 65 33 44 72 6f 70 54 72 69 67 67 65 72 50 74  te3DropTriggerPt
28130 72 28 41 2c 42 29 0a 23 20 64 65 66 69 6e 65 20  r(A,B).# define 
28140 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64  sqlite3UnlinkAnd
28150 44 65 6c 65 74 65 54 72 69 67 67 65 72 28 41 2c  DeleteTrigger(A,
28160 42 2c 43 29 0a 23 20 64 65 66 69 6e 65 20 73 71  B,C).# define sq
28170 6c 69 74 65 33 43 6f 64 65 52 6f 77 54 72 69 67  lite3CodeRowTrig
28180 67 65 72 28 41 2c 42 2c 43 2c 44 2c 45 2c 46 2c  ger(A,B,C,D,E,F,
28190 47 2c 48 2c 49 29 0a 23 20 64 65 66 69 6e 65 20  G,H,I).# define 
281a0 73 71 6c 69 74 65 33 43 6f 64 65 52 6f 77 54 72  sqlite3CodeRowTr
281b0 69 67 67 65 72 44 69 72 65 63 74 28 41 2c 42 2c  iggerDirect(A,B,
281c0 43 2c 44 2c 45 2c 46 29 0a 23 20 64 65 66 69 6e  C,D,E,F).# defin
281d0 65 20 73 71 6c 69 74 65 33 54 72 69 67 67 65 72  e sqlite3Trigger
281e0 4c 69 73 74 28 58 2c 20 59 29 20 30 0a 23 20 64  List(X, Y) 0.# d
281f0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 50 61 72  efine sqlite3Par
28200 73 65 54 6f 70 6c 65 76 65 6c 28 70 29 20 70 0a  seToplevel(p) p.
28210 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
28220 49 73 54 6f 70 6c 65 76 65 6c 28 70 29 20 31 0a  IsToplevel(p) 1.
28230 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
28240 54 72 69 67 67 65 72 43 6f 6c 6d 61 73 6b 28 41  TriggerColmask(A
28250 2c 42 2c 43 2c 44 2c 45 2c 46 2c 47 29 20 30 0a  ,B,C,D,E,F,G) 0.
28260 23 65 6e 64 69 66 0a 0a 69 6e 74 20 73 71 6c 69  #endif..int sqli
28270 74 65 33 4a 6f 69 6e 54 79 70 65 28 50 61 72 73  te3JoinType(Pars
28280 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65  e*, Token*, Toke
28290 6e 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69  n*, Token*);.voi
282a0 64 20 73 71 6c 69 74 65 33 43 72 65 61 74 65 46  d sqlite3CreateF
282b0 6f 72 65 69 67 6e 4b 65 79 28 50 61 72 73 65 2a  oreignKey(Parse*
282c0 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 54 6f 6b  , ExprList*, Tok
282d0 65 6e 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20  en*, ExprList*, 
282e0 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
282f0 65 33 44 65 66 65 72 46 6f 72 65 69 67 6e 4b 65  e3DeferForeignKe
28300 79 28 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a  y(Parse*, int);.
28310 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
28320 4d 49 54 5f 41 55 54 48 4f 52 49 5a 41 54 49 4f  MIT_AUTHORIZATIO
28330 4e 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  N.  void sqlite3
28340 41 75 74 68 52 65 61 64 28 50 61 72 73 65 2a 2c  AuthRead(Parse*,
28350 45 78 70 72 2a 2c 53 63 68 65 6d 61 2a 2c 53 72  Expr*,Schema*,Sr
28360 63 4c 69 73 74 2a 29 3b 0a 20 20 69 6e 74 20 73  cList*);.  int s
28370 71 6c 69 74 65 33 41 75 74 68 43 68 65 63 6b 28  qlite3AuthCheck(
28380 50 61 72 73 65 2a 2c 69 6e 74 2c 20 63 6f 6e 73  Parse*,int, cons
28390 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63  t char*, const c
283a0 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  har*, const char
283b0 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  *);.  void sqlit
283c0 65 33 41 75 74 68 43 6f 6e 74 65 78 74 50 75 73  e3AuthContextPus
283d0 68 28 50 61 72 73 65 2a 2c 20 41 75 74 68 43 6f  h(Parse*, AuthCo
283e0 6e 74 65 78 74 2a 2c 20 63 6f 6e 73 74 20 63 68  ntext*, const ch
283f0 61 72 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c  ar*);.  void sql
28400 69 74 65 33 41 75 74 68 43 6f 6e 74 65 78 74 50  ite3AuthContextP
28410 6f 70 28 41 75 74 68 43 6f 6e 74 65 78 74 2a 29  op(AuthContext*)
28420 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 41  ;.  int sqlite3A
28430 75 74 68 52 65 61 64 43 6f 6c 28 50 61 72 73 65  uthReadCol(Parse
28440 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c  *, const char *,
28450 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20 69   const char *, i
28460 6e 74 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66  nt);.#else.# def
28470 69 6e 65 20 73 71 6c 69 74 65 33 41 75 74 68 52  ine sqlite3AuthR
28480 65 61 64 28 61 2c 62 2c 63 2c 64 29 0a 23 20 64  ead(a,b,c,d).# d
28490 65 66 69 6e 65 20 73 71 6c 69 74 65 33 41 75 74  efine sqlite3Aut
284a0 68 43 68 65 63 6b 28 61 2c 62 2c 63 2c 64 2c 65  hCheck(a,b,c,d,e
284b0 29 20 20 20 20 53 51 4c 49 54 45 5f 4f 4b 0a 23  )    SQLITE_OK.#
284c0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 41   define sqlite3A
284d0 75 74 68 43 6f 6e 74 65 78 74 50 75 73 68 28 61  uthContextPush(a
284e0 2c 62 2c 63 29 0a 23 20 64 65 66 69 6e 65 20 73  ,b,c).# define s
284f0 71 6c 69 74 65 33 41 75 74 68 43 6f 6e 74 65 78  qlite3AuthContex
28500 74 50 6f 70 28 61 29 20 20 28 28 76 6f 69 64 29  tPop(a)  ((void)
28510 28 61 29 29 0a 23 65 6e 64 69 66 0a 76 6f 69 64  (a)).#endif.void
28520 20 73 71 6c 69 74 65 33 41 74 74 61 63 68 28 50   sqlite3Attach(P
28530 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 45 78  arse*, Expr*, Ex
28540 70 72 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69  pr*, Expr*);.voi
28550 64 20 73 71 6c 69 74 65 33 44 65 74 61 63 68 28  d sqlite3Detach(
28560 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 29 3b 0a  Parse*, Expr*);.
28570 76 6f 69 64 20 73 71 6c 69 74 65 33 46 69 78 49  void sqlite3FixI
28580 6e 69 74 28 44 62 46 69 78 65 72 2a 2c 20 50 61  nit(DbFixer*, Pa
28590 72 73 65 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74  rse*, int, const
285a0 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 54 6f   char*, const To
285b0 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ken*);.int sqlit
285c0 65 33 46 69 78 53 72 63 4c 69 73 74 28 44 62 46  e3FixSrcList(DbF
285d0 69 78 65 72 2a 2c 20 53 72 63 4c 69 73 74 2a 29  ixer*, SrcList*)
285e0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69 78  ;.int sqlite3Fix
285f0 53 65 6c 65 63 74 28 44 62 46 69 78 65 72 2a 2c  Select(DbFixer*,
28600 20 53 65 6c 65 63 74 2a 29 3b 0a 69 6e 74 20 73   Select*);.int s
28610 71 6c 69 74 65 33 46 69 78 45 78 70 72 28 44 62  qlite3FixExpr(Db
28620 46 69 78 65 72 2a 2c 20 45 78 70 72 2a 29 3b 0a  Fixer*, Expr*);.
28630 69 6e 74 20 73 71 6c 69 74 65 33 46 69 78 45 78  int sqlite3FixEx
28640 70 72 4c 69 73 74 28 44 62 46 69 78 65 72 2a 2c  prList(DbFixer*,
28650 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74   ExprList*);.int
28660 20 73 71 6c 69 74 65 33 46 69 78 54 72 69 67 67   sqlite3FixTrigg
28670 65 72 53 74 65 70 28 44 62 46 69 78 65 72 2a 2c  erStep(DbFixer*,
28680 20 54 72 69 67 67 65 72 53 74 65 70 2a 29 3b 0a   TriggerStep*);.
28690 69 6e 74 20 73 71 6c 69 74 65 33 41 74 6f 46 28  int sqlite3AtoF(
286a0 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 2c 20 64  const char *z, d
286b0 6f 75 62 6c 65 2a 2c 20 69 6e 74 2c 20 75 38 29  ouble*, int, u8)
286c0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 47 65 74  ;.int sqlite3Get
286d0 49 6e 74 33 32 28 63 6f 6e 73 74 20 63 68 61 72  Int32(const char
286e0 20 2a 2c 20 69 6e 74 2a 29 3b 0a 69 6e 74 20 73   *, int*);.int s
286f0 71 6c 69 74 65 33 41 74 6f 69 28 63 6f 6e 73 74  qlite3Atoi(const
28700 20 63 68 61 72 2a 29 3b 0a 69 6e 74 20 73 71 6c   char*);.int sql
28710 69 74 65 33 55 74 66 31 36 42 79 74 65 4c 65 6e  ite3Utf16ByteLen
28720 28 63 6f 6e 73 74 20 76 6f 69 64 20 2a 70 44 61  (const void *pDa
28730 74 61 2c 20 69 6e 74 20 6e 43 68 61 72 29 3b 0a  ta, int nChar);.
28740 69 6e 74 20 73 71 6c 69 74 65 33 55 74 66 38 43  int sqlite3Utf8C
28750 68 61 72 4c 65 6e 28 63 6f 6e 73 74 20 63 68 61  harLen(const cha
28760 72 20 2a 70 44 61 74 61 2c 20 69 6e 74 20 6e 42  r *pData, int nB
28770 79 74 65 29 3b 0a 75 33 32 20 73 71 6c 69 74 65  yte);.u32 sqlite
28780 33 55 74 66 38 52 65 61 64 28 63 6f 6e 73 74 20  3Utf8Read(const 
28790 75 38 2a 2a 29 3b 0a 4c 6f 67 45 73 74 20 73 71  u8**);.LogEst sq
287a0 6c 69 74 65 33 4c 6f 67 45 73 74 28 75 36 34 29  lite3LogEst(u64)
287b0 3b 0a 4c 6f 67 45 73 74 20 73 71 6c 69 74 65 33  ;.LogEst sqlite3
287c0 4c 6f 67 45 73 74 41 64 64 28 4c 6f 67 45 73 74  LogEstAdd(LogEst
287d0 2c 4c 6f 67 45 73 74 29 3b 0a 23 69 66 6e 64 65  ,LogEst);.#ifnde
287e0 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  f SQLITE_OMIT_VI
287f0 52 54 55 41 4c 54 41 42 4c 45 0a 4c 6f 67 45 73  RTUALTABLE.LogEs
28800 74 20 73 71 6c 69 74 65 33 4c 6f 67 45 73 74 46  t sqlite3LogEstF
28810 72 6f 6d 44 6f 75 62 6c 65 28 64 6f 75 62 6c 65  romDouble(double
28820 29 3b 0a 23 65 6e 64 69 66 0a 23 69 66 20 64 65  );.#endif.#if de
28830 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41  fined(SQLITE_ENA
28840 42 4c 45 5f 53 54 4d 54 5f 53 43 41 4e 53 54 41  BLE_STMT_SCANSTA
28850 54 55 53 29 20 7c 7c 20 5c 0a 20 20 20 20 64 65  TUS) || \.    de
28860 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41  fined(SQLITE_ENA
28870 42 4c 45 5f 53 54 41 54 33 5f 4f 52 5f 53 54 41  BLE_STAT3_OR_STA
28880 54 34 29 20 7c 7c 20 5c 0a 20 20 20 20 64 65 66  T4) || \.    def
28890 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 58 50 4c  ined(SQLITE_EXPL
288a0 41 49 4e 5f 45 53 54 49 4d 41 54 45 44 5f 52 4f  AIN_ESTIMATED_RO
288b0 57 53 29 0a 75 36 34 20 73 71 6c 69 74 65 33 4c  WS).u64 sqlite3L
288c0 6f 67 45 73 74 54 6f 49 6e 74 28 4c 6f 67 45 73  ogEstToInt(LogEs
288d0 74 29 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  t);.#endif../*.*
288e0 2a 20 52 6f 75 74 69 6e 65 73 20 74 6f 20 72 65  * Routines to re
288f0 61 64 20 61 6e 64 20 77 72 69 74 65 20 76 61 72  ad and write var
28900 69 61 62 6c 65 2d 6c 65 6e 67 74 68 20 69 6e 74  iable-length int
28910 65 67 65 72 73 2e 20 20 54 68 65 73 65 20 75 73  egers.  These us
28920 65 64 20 74 6f 0a 2a 2a 20 62 65 20 64 65 66 69  ed to.** be defi
28930 6e 65 64 20 6c 6f 63 61 6c 6c 79 2c 20 62 75 74  ned locally, but
28940 20 6e 6f 77 20 77 65 20 75 73 65 20 74 68 65 20   now we use the 
28950 76 61 72 69 6e 74 20 72 6f 75 74 69 6e 65 73 20  varint routines 
28960 69 6e 20 74 68 65 20 75 74 69 6c 2e 63 0a 2a 2a  in the util.c.**
28970 20 66 69 6c 65 2e 0a 2a 2f 0a 69 6e 74 20 73 71   file..*/.int sq
28980 6c 69 74 65 33 50 75 74 56 61 72 69 6e 74 28 75  lite3PutVarint(u
28990 6e 73 69 67 6e 65 64 20 63 68 61 72 2a 2c 20 75  nsigned char*, u
289a0 36 34 29 3b 0a 75 38 20 73 71 6c 69 74 65 33 47  64);.u8 sqlite3G
289b0 65 74 56 61 72 69 6e 74 28 63 6f 6e 73 74 20 75  etVarint(const u
289c0 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a 2c 20  nsigned char *, 
289d0 75 36 34 20 2a 29 3b 0a 75 38 20 73 71 6c 69 74  u64 *);.u8 sqlit
289e0 65 33 47 65 74 56 61 72 69 6e 74 33 32 28 63 6f  e3GetVarint32(co
289f0 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61  nst unsigned cha
28a00 72 20 2a 2c 20 75 33 32 20 2a 29 3b 0a 69 6e 74  r *, u32 *);.int
28a10 20 73 71 6c 69 74 65 33 56 61 72 69 6e 74 4c 65   sqlite3VarintLe
28a20 6e 28 75 36 34 20 76 29 3b 0a 0a 2f 2a 0a 2a 2a  n(u64 v);../*.**
28a30 20 54 68 65 20 63 6f 6d 6d 6f 6e 20 63 61 73 65   The common case
28a40 20 69 73 20 66 6f 72 20 61 20 76 61 72 69 6e 74   is for a varint
28a50 20 74 6f 20 62 65 20 61 20 73 69 6e 67 6c 65 20   to be a single 
28a60 62 79 74 65 2e 20 20 54 68 65 79 20 66 6f 6c 6c  byte.  They foll
28a70 6f 77 69 6e 67 0a 2a 2a 20 6d 61 63 72 6f 73 20  owing.** macros 
28a80 68 61 6e 64 6c 65 20 74 68 65 20 63 6f 6d 6d 6f  handle the commo
28a90 6e 20 63 61 73 65 20 77 69 74 68 6f 75 74 20 61  n case without a
28aa0 20 70 72 6f 63 65 64 75 72 65 20 63 61 6c 6c 2c   procedure call,
28ab0 20 62 75 74 20 74 68 65 6e 20 63 61 6c 6c 0a 2a   but then call.*
28ac0 2a 20 74 68 65 20 70 72 6f 63 65 64 75 72 65 20  * the procedure 
28ad0 66 6f 72 20 6c 61 72 67 65 72 20 76 61 72 69 6e  for larger varin
28ae0 74 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 67  ts..*/.#define g
28af0 65 74 56 61 72 69 6e 74 33 32 28 41 2c 42 29 20  etVarint32(A,B) 
28b00 20 5c 0a 20 20 28 75 38 29 28 28 2a 28 41 29 3c   \.  (u8)((*(A)<
28b10 28 75 38 29 30 78 38 30 29 3f 28 28 42 29 3d 28  (u8)0x80)?((B)=(
28b20 75 33 32 29 2a 28 41 29 29 2c 31 3a 73 71 6c 69  u32)*(A)),1:sqli
28b30 74 65 33 47 65 74 56 61 72 69 6e 74 33 32 28 28  te3GetVarint32((
28b40 41 29 2c 28 75 33 32 20 2a 29 26 28 42 29 29 29  A),(u32 *)&(B)))
28b50 0a 23 64 65 66 69 6e 65 20 70 75 74 56 61 72 69  .#define putVari
28b60 6e 74 33 32 28 41 2c 42 29 20 20 5c 0a 20 20 28  nt32(A,B)  \.  (
28b70 75 38 29 28 28 28 75 33 32 29 28 42 29 3c 28 75  u8)(((u32)(B)<(u
28b80 33 32 29 30 78 38 30 29 3f 28 2a 28 41 29 3d 28  32)0x80)?(*(A)=(
28b90 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 42  unsigned char)(B
28ba0 29 29 2c 31 3a 5c 0a 20 20 73 71 6c 69 74 65 33  )),1:\.  sqlite3
28bb0 50 75 74 56 61 72 69 6e 74 28 28 41 29 2c 28 42  PutVarint((A),(B
28bc0 29 29 29 0a 23 64 65 66 69 6e 65 20 67 65 74 56  ))).#define getV
28bd0 61 72 69 6e 74 20 20 20 20 73 71 6c 69 74 65 33  arint    sqlite3
28be0 47 65 74 56 61 72 69 6e 74 0a 23 64 65 66 69 6e  GetVarint.#defin
28bf0 65 20 70 75 74 56 61 72 69 6e 74 20 20 20 20 73  e putVarint    s
28c00 71 6c 69 74 65 33 50 75 74 56 61 72 69 6e 74 0a  qlite3PutVarint.
28c10 0a 0a 63 6f 6e 73 74 20 63 68 61 72 20 2a 73 71  ..const char *sq
28c20 6c 69 74 65 33 49 6e 64 65 78 41 66 66 69 6e 69  lite3IndexAffini
28c30 74 79 53 74 72 28 73 71 6c 69 74 65 33 2a 2c 20  tyStr(sqlite3*, 
28c40 49 6e 64 65 78 2a 29 3b 0a 76 6f 69 64 20 73 71  Index*);.void sq
28c50 6c 69 74 65 33 54 61 62 6c 65 41 66 66 69 6e 69  lite3TableAffini
28c60 74 79 28 56 64 62 65 2a 2c 20 54 61 62 6c 65 2a  ty(Vdbe*, Table*
28c70 2c 20 69 6e 74 29 3b 0a 63 68 61 72 20 73 71 6c  , int);.char sql
28c80 69 74 65 33 43 6f 6d 70 61 72 65 41 66 66 69 6e  ite3CompareAffin
28c90 69 74 79 28 45 78 70 72 20 2a 70 45 78 70 72 2c  ity(Expr *pExpr,
28ca0 20 63 68 61 72 20 61 66 66 32 29 3b 0a 69 6e 74   char aff2);.int
28cb0 20 73 71 6c 69 74 65 33 49 6e 64 65 78 41 66 66   sqlite3IndexAff
28cc0 69 6e 69 74 79 4f 6b 28 45 78 70 72 20 2a 70 45  inityOk(Expr *pE
28cd0 78 70 72 2c 20 63 68 61 72 20 69 64 78 5f 61 66  xpr, char idx_af
28ce0 66 69 6e 69 74 79 29 3b 0a 63 68 61 72 20 73 71  finity);.char sq
28cf0 6c 69 74 65 33 45 78 70 72 41 66 66 69 6e 69 74  lite3ExprAffinit
28d00 79 28 45 78 70 72 20 2a 70 45 78 70 72 29 3b 0a  y(Expr *pExpr);.
28d10 69 6e 74 20 73 71 6c 69 74 65 33 41 74 6f 69 36  int sqlite3Atoi6
28d20 34 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 69  4(const char*, i
28d30 36 34 2a 2c 20 69 6e 74 2c 20 75 38 29 3b 0a 69  64*, int, u8);.i
28d40 6e 74 20 73 71 6c 69 74 65 33 44 65 63 4f 72 48  nt sqlite3DecOrH
28d50 65 78 54 6f 49 36 34 28 63 6f 6e 73 74 20 63 68  exToI64(const ch
28d60 61 72 2a 2c 20 69 36 34 2a 29 3b 0a 76 6f 69 64  ar*, i64*);.void
28d70 20 73 71 6c 69 74 65 33 45 72 72 6f 72 57 69 74   sqlite3ErrorWit
28d80 68 4d 73 67 28 73 71 6c 69 74 65 33 2a 2c 20 69  hMsg(sqlite3*, i
28d90 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c  nt, const char*,
28da0 2e 2e 2e 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  ...);.void sqlit
28db0 65 33 45 72 72 6f 72 28 73 71 6c 69 74 65 33 2a  e3Error(sqlite3*
28dc0 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ,int);.void sqli
28dd0 74 65 33 53 79 73 74 65 6d 45 72 72 6f 72 28 73  te3SystemError(s
28de0 71 6c 69 74 65 33 2a 2c 69 6e 74 29 3b 0a 76 6f  qlite3*,int);.vo
28df0 69 64 20 2a 73 71 6c 69 74 65 33 48 65 78 54 6f  id *sqlite3HexTo
28e00 42 6c 6f 62 28 73 71 6c 69 74 65 33 2a 2c 20 63  Blob(sqlite3*, c
28e10 6f 6e 73 74 20 63 68 61 72 20 2a 7a 2c 20 69 6e  onst char *z, in
28e20 74 20 6e 29 3b 0a 75 38 20 73 71 6c 69 74 65 33  t n);.u8 sqlite3
28e30 48 65 78 54 6f 49 6e 74 28 69 6e 74 20 68 29 3b  HexToInt(int h);
28e40 0a 69 6e 74 20 73 71 6c 69 74 65 33 54 77 6f 50  .int sqlite3TwoP
28e50 61 72 74 4e 61 6d 65 28 50 61 72 73 65 20 2a 2c  artName(Parse *,
28e60 20 54 6f 6b 65 6e 20 2a 2c 20 54 6f 6b 65 6e 20   Token *, Token 
28e70 2a 2c 20 54 6f 6b 65 6e 20 2a 2a 29 3b 0a 0a 23  *, Token **);..#
28e80 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  if defined(SQLIT
28e90 45 5f 4e 45 45 44 5f 45 52 52 5f 4e 41 4d 45 29  E_NEED_ERR_NAME)
28ea0 0a 63 6f 6e 73 74 20 63 68 61 72 20 2a 73 71 6c  .const char *sql
28eb0 69 74 65 33 45 72 72 4e 61 6d 65 28 69 6e 74 29  ite3ErrName(int)
28ec0 3b 0a 23 65 6e 64 69 66 0a 0a 63 6f 6e 73 74 20  ;.#endif..const 
28ed0 63 68 61 72 20 2a 73 71 6c 69 74 65 33 45 72 72  char *sqlite3Err
28ee0 53 74 72 28 69 6e 74 29 3b 0a 69 6e 74 20 73 71  Str(int);.int sq
28ef0 6c 69 74 65 33 52 65 61 64 53 63 68 65 6d 61 28  lite3ReadSchema(
28f00 50 61 72 73 65 20 2a 70 50 61 72 73 65 29 3b 0a  Parse *pParse);.
28f10 43 6f 6c 6c 53 65 71 20 2a 73 71 6c 69 74 65 33  CollSeq *sqlite3
28f20 46 69 6e 64 43 6f 6c 6c 53 65 71 28 73 71 6c 69  FindCollSeq(sqli
28f30 74 65 33 2a 2c 75 38 20 65 6e 63 2c 20 63 6f 6e  te3*,u8 enc, con
28f40 73 74 20 63 68 61 72 2a 2c 69 6e 74 29 3b 0a 43  st char*,int);.C
28f50 6f 6c 6c 53 65 71 20 2a 73 71 6c 69 74 65 33 4c  ollSeq *sqlite3L
28f60 6f 63 61 74 65 43 6f 6c 6c 53 65 71 28 50 61 72  ocateCollSeq(Par
28f70 73 65 20 2a 70 50 61 72 73 65 2c 20 63 6f 6e 73  se *pParse, cons
28f80 74 20 63 68 61 72 2a 7a 4e 61 6d 65 29 3b 0a 43  t char*zName);.C
28f90 6f 6c 6c 53 65 71 20 2a 73 71 6c 69 74 65 33 45  ollSeq *sqlite3E
28fa0 78 70 72 43 6f 6c 6c 53 65 71 28 50 61 72 73 65  xprCollSeq(Parse
28fb0 20 2a 70 50 61 72 73 65 2c 20 45 78 70 72 20 2a   *pParse, Expr *
28fc0 70 45 78 70 72 29 3b 0a 45 78 70 72 20 2a 73 71  pExpr);.Expr *sq
28fd0 6c 69 74 65 33 45 78 70 72 41 64 64 43 6f 6c 6c  lite3ExprAddColl
28fe0 61 74 65 54 6f 6b 65 6e 28 50 61 72 73 65 20 2a  ateToken(Parse *
28ff0 70 50 61 72 73 65 2c 20 45 78 70 72 2a 2c 20 63  pParse, Expr*, c
29000 6f 6e 73 74 20 54 6f 6b 65 6e 2a 2c 20 69 6e 74  onst Token*, int
29010 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33  );.Expr *sqlite3
29020 45 78 70 72 41 64 64 43 6f 6c 6c 61 74 65 53 74  ExprAddCollateSt
29030 72 69 6e 67 28 50 61 72 73 65 2a 2c 45 78 70 72  ring(Parse*,Expr
29040 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  *,const char*);.
29050 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70  Expr *sqlite3Exp
29060 72 53 6b 69 70 43 6f 6c 6c 61 74 65 28 45 78 70  rSkipCollate(Exp
29070 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  r*);.int sqlite3
29080 43 68 65 63 6b 43 6f 6c 6c 53 65 71 28 50 61 72  CheckCollSeq(Par
29090 73 65 20 2a 2c 20 43 6f 6c 6c 53 65 71 20 2a 29  se *, CollSeq *)
290a0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 68 65  ;.int sqlite3Che
290b0 63 6b 4f 62 6a 65 63 74 4e 61 6d 65 28 50 61 72  ckObjectName(Par
290c0 73 65 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  se *, const char
290d0 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65   *);.void sqlite
290e0 33 56 64 62 65 53 65 74 43 68 61 6e 67 65 73 28  3VdbeSetChanges(
290f0 73 71 6c 69 74 65 33 20 2a 2c 20 69 6e 74 29 3b  sqlite3 *, int);
29100 0a 69 6e 74 20 73 71 6c 69 74 65 33 41 64 64 49  .int sqlite3AddI
29110 6e 74 36 34 28 69 36 34 2a 2c 69 36 34 29 3b 0a  nt64(i64*,i64);.
29120 69 6e 74 20 73 71 6c 69 74 65 33 53 75 62 49 6e  int sqlite3SubIn
29130 74 36 34 28 69 36 34 2a 2c 69 36 34 29 3b 0a 69  t64(i64*,i64);.i
29140 6e 74 20 73 71 6c 69 74 65 33 4d 75 6c 49 6e 74  nt sqlite3MulInt
29150 36 34 28 69 36 34 2a 2c 69 36 34 29 3b 0a 69 6e  64(i64*,i64);.in
29160 74 20 73 71 6c 69 74 65 33 41 62 73 49 6e 74 33  t sqlite3AbsInt3
29170 32 28 69 6e 74 29 3b 0a 23 69 66 64 65 66 20 53  2(int);.#ifdef S
29180 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 38 5f 33  QLITE_ENABLE_8_3
29190 5f 4e 41 4d 45 53 0a 76 6f 69 64 20 73 71 6c 69  _NAMES.void sqli
291a0 74 65 33 46 69 6c 65 53 75 66 66 69 78 33 28 63  te3FileSuffix3(c
291b0 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 68 61 72  onst char*, char
291c0 2a 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69  *);.#else.# defi
291d0 6e 65 20 73 71 6c 69 74 65 33 46 69 6c 65 53 75  ne sqlite3FileSu
291e0 66 66 69 78 33 28 58 2c 59 29 0a 23 65 6e 64 69  ffix3(X,Y).#endi
291f0 66 0a 75 38 20 73 71 6c 69 74 65 33 47 65 74 42  f.u8 sqlite3GetB
29200 6f 6f 6c 65 61 6e 28 63 6f 6e 73 74 20 63 68 61  oolean(const cha
29210 72 20 2a 7a 2c 75 38 29 3b 0a 0a 63 6f 6e 73 74  r *z,u8);..const
29220 20 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 56 61   void *sqlite3Va
29230 6c 75 65 54 65 78 74 28 73 71 6c 69 74 65 33 5f  lueText(sqlite3_
29240 76 61 6c 75 65 2a 2c 20 75 38 29 3b 0a 69 6e 74  value*, u8);.int
29250 20 73 71 6c 69 74 65 33 56 61 6c 75 65 42 79 74   sqlite3ValueByt
29260 65 73 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  es(sqlite3_value
29270 2a 2c 20 75 38 29 3b 0a 76 6f 69 64 20 73 71 6c  *, u8);.void sql
29280 69 74 65 33 56 61 6c 75 65 53 65 74 53 74 72 28  ite3ValueSetStr(
29290 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2c 20  sqlite3_value*, 
292a0 69 6e 74 2c 20 63 6f 6e 73 74 20 76 6f 69 64 20  int, const void 
292b0 2a 2c 75 38 2c 0a 20 20 20 20 20 20 20 20 20 20  *,u8,.          
292c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 76 6f                vo
292d0 69 64 28 2a 29 28 76 6f 69 64 2a 29 29 3b 0a 76  id(*)(void*));.v
292e0 6f 69 64 20 73 71 6c 69 74 65 33 56 61 6c 75 65  oid sqlite3Value
292f0 53 65 74 4e 75 6c 6c 28 73 71 6c 69 74 65 33 5f  SetNull(sqlite3_
29300 76 61 6c 75 65 2a 29 3b 0a 76 6f 69 64 20 73 71  value*);.void sq
29310 6c 69 74 65 33 56 61 6c 75 65 46 72 65 65 28 73  lite3ValueFree(s
29320 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 29 3b 0a  qlite3_value*);.
29330 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 73  sqlite3_value *s
29340 71 6c 69 74 65 33 56 61 6c 75 65 4e 65 77 28 73  qlite3ValueNew(s
29350 71 6c 69 74 65 33 20 2a 29 3b 0a 63 68 61 72 20  qlite3 *);.char 
29360 2a 73 71 6c 69 74 65 33 55 74 66 31 36 74 6f 38  *sqlite3Utf16to8
29370 28 73 71 6c 69 74 65 33 20 2a 2c 20 63 6f 6e 73  (sqlite3 *, cons
29380 74 20 76 6f 69 64 2a 2c 20 69 6e 74 2c 20 75 38  t void*, int, u8
29390 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 61  );.int sqlite3Va
293a0 6c 75 65 46 72 6f 6d 45 78 70 72 28 73 71 6c 69  lueFromExpr(sqli
293b0 74 65 33 20 2a 2c 20 45 78 70 72 20 2a 2c 20 75  te3 *, Expr *, u
293c0 38 2c 20 75 38 2c 20 73 71 6c 69 74 65 33 5f 76  8, u8, sqlite3_v
293d0 61 6c 75 65 20 2a 2a 29 3b 0a 76 6f 69 64 20 73  alue **);.void s
293e0 71 6c 69 74 65 33 56 61 6c 75 65 41 70 70 6c 79  qlite3ValueApply
293f0 41 66 66 69 6e 69 74 79 28 73 71 6c 69 74 65 33  Affinity(sqlite3
29400 5f 76 61 6c 75 65 20 2a 2c 20 75 38 2c 20 75 38  _value *, u8, u8
29410 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  );.#ifndef SQLIT
29420 45 5f 41 4d 41 4c 47 41 4d 41 54 49 4f 4e 0a 65  E_AMALGAMATION.e
29430 78 74 65 72 6e 20 63 6f 6e 73 74 20 75 6e 73 69  xtern const unsi
29440 67 6e 65 64 20 63 68 61 72 20 73 71 6c 69 74 65  gned char sqlite
29450 33 4f 70 63 6f 64 65 50 72 6f 70 65 72 74 79 5b  3OpcodeProperty[
29460 5d 3b 0a 65 78 74 65 72 6e 20 63 6f 6e 73 74 20  ];.extern const 
29470 63 68 61 72 20 73 71 6c 69 74 65 33 53 74 72 42  char sqlite3StrB
29480 49 4e 41 52 59 5b 5d 3b 0a 65 78 74 65 72 6e 20  INARY[];.extern 
29490 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63  const unsigned c
294a0 68 61 72 20 73 71 6c 69 74 65 33 55 70 70 65 72  har sqlite3Upper
294b0 54 6f 4c 6f 77 65 72 5b 5d 3b 0a 65 78 74 65 72  ToLower[];.exter
294c0 6e 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64  n const unsigned
294d0 20 63 68 61 72 20 73 71 6c 69 74 65 33 43 74 79   char sqlite3Cty
294e0 70 65 4d 61 70 5b 5d 3b 0a 65 78 74 65 72 6e 20  peMap[];.extern 
294f0 63 6f 6e 73 74 20 54 6f 6b 65 6e 20 73 71 6c 69  const Token sqli
29500 74 65 33 49 6e 74 54 6f 6b 65 6e 73 5b 5d 3b 0a  te3IntTokens[];.
29510 65 78 74 65 72 6e 20 53 51 4c 49 54 45 5f 57 53  extern SQLITE_WS
29520 44 20 73 74 72 75 63 74 20 53 71 6c 69 74 65 33  D struct Sqlite3
29530 43 6f 6e 66 69 67 20 73 71 6c 69 74 65 33 43 6f  Config sqlite3Co
29540 6e 66 69 67 3b 0a 65 78 74 65 72 6e 20 46 75 6e  nfig;.extern Fun
29550 63 44 65 66 48 61 73 68 20 73 71 6c 69 74 65 33  cDefHash sqlite3
29560 42 75 69 6c 74 69 6e 46 75 6e 63 74 69 6f 6e 73  BuiltinFunctions
29570 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ;.#ifndef SQLITE
29580 5f 4f 4d 49 54 5f 57 53 44 0a 65 78 74 65 72 6e  _OMIT_WSD.extern
29590 20 69 6e 74 20 73 71 6c 69 74 65 33 50 65 6e 64   int sqlite3Pend
295a0 69 6e 67 42 79 74 65 3b 0a 23 65 6e 64 69 66 0a  ingByte;.#endif.
295b0 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c 69  #endif.void sqli
295c0 74 65 33 52 6f 6f 74 50 61 67 65 4d 6f 76 65 64  te3RootPageMoved
295d0 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74 2c 20  (sqlite3*, int, 
295e0 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  int, int);.void 
295f0 73 71 6c 69 74 65 33 52 65 69 6e 64 65 78 28 50  sqlite3Reindex(P
29600 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54  arse*, Token*, T
29610 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  oken*);.void sql
29620 69 74 65 33 41 6c 74 65 72 46 75 6e 63 74 69 6f  ite3AlterFunctio
29630 6e 73 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20 73  ns(void);.void s
29640 71 6c 69 74 65 33 41 6c 74 65 72 52 65 6e 61 6d  qlite3AlterRenam
29650 65 54 61 62 6c 65 28 50 61 72 73 65 2a 2c 20 53  eTable(Parse*, S
29660 72 63 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 29  rcList*, Token*)
29670 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 47 65 74  ;.int sqlite3Get
29680 54 6f 6b 65 6e 28 63 6f 6e 73 74 20 75 6e 73 69  Token(const unsi
29690 67 6e 65 64 20 63 68 61 72 20 2a 2c 20 69 6e 74  gned char *, int
296a0 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65   *);.void sqlite
296b0 33 4e 65 73 74 65 64 50 61 72 73 65 28 50 61 72  3NestedParse(Par
296c0 73 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  se*, const char*
296d0 2c 20 2e 2e 2e 29 3b 0a 76 6f 69 64 20 73 71 6c  , ...);.void sql
296e0 69 74 65 33 45 78 70 69 72 65 50 72 65 70 61 72  ite3ExpirePrepar
296f0 65 64 53 74 61 74 65 6d 65 6e 74 73 28 73 71 6c  edStatements(sql
29700 69 74 65 33 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  ite3*);.int sqli
29710 74 65 33 43 6f 64 65 53 75 62 73 65 6c 65 63 74  te3CodeSubselect
29720 28 50 61 72 73 65 20 2a 2c 20 45 78 70 72 20 2a  (Parse *, Expr *
29730 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69  , int, int);.voi
29740 64 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74 50  d sqlite3SelectP
29750 72 65 70 28 50 61 72 73 65 2a 2c 20 53 65 6c 65  rep(Parse*, Sele
29760 63 74 2a 2c 20 4e 61 6d 65 43 6f 6e 74 65 78 74  ct*, NameContext
29770 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
29780 53 65 6c 65 63 74 57 72 6f 6e 67 4e 75 6d 54 65  SelectWrongNumTe
29790 72 6d 73 45 72 72 6f 72 28 50 61 72 73 65 20 2a  rmsError(Parse *
297a0 70 50 61 72 73 65 2c 20 53 65 6c 65 63 74 20 2a  pParse, Select *
297b0 70 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4d  p);.int sqlite3M
297c0 61 74 63 68 53 70 61 6e 4e 61 6d 65 28 63 6f 6e  atchSpanName(con
297d0 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20  st char*, const 
297e0 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61  char*, const cha
297f0 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29  r*, const char*)
29800 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 65 73  ;.int sqlite3Res
29810 6f 6c 76 65 45 78 70 72 4e 61 6d 65 73 28 4e 61  olveExprNames(Na
29820 6d 65 43 6f 6e 74 65 78 74 2a 2c 20 45 78 70 72  meContext*, Expr
29830 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52  *);.int sqlite3R
29840 65 73 6f 6c 76 65 45 78 70 72 4c 69 73 74 4e 61  esolveExprListNa
29850 6d 65 73 28 4e 61 6d 65 43 6f 6e 74 65 78 74 2a  mes(NameContext*
29860 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a 76 6f  , ExprList*);.vo
29870 69 64 20 73 71 6c 69 74 65 33 52 65 73 6f 6c 76  id sqlite3Resolv
29880 65 53 65 6c 65 63 74 4e 61 6d 65 73 28 50 61 72  eSelectNames(Par
29890 73 65 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 4e 61  se*, Select*, Na
298a0 6d 65 43 6f 6e 74 65 78 74 2a 29 3b 0a 76 6f 69  meContext*);.voi
298b0 64 20 73 71 6c 69 74 65 33 52 65 73 6f 6c 76 65  d sqlite3Resolve
298c0 53 65 6c 66 52 65 66 65 72 65 6e 63 65 28 50 61  SelfReference(Pa
298d0 72 73 65 2a 2c 54 61 62 6c 65 2a 2c 69 6e 74 2c  rse*,Table*,int,
298e0 45 78 70 72 2a 2c 45 78 70 72 4c 69 73 74 2a 29  Expr*,ExprList*)
298f0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 65 73  ;.int sqlite3Res
29900 6f 6c 76 65 4f 72 64 65 72 47 72 6f 75 70 42 79  olveOrderGroupBy
29910 28 50 61 72 73 65 2a 2c 20 53 65 6c 65 63 74 2a  (Parse*, Select*
29920 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 63 6f 6e  , ExprList*, con
29930 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20  st char*);.void 
29940 73 71 6c 69 74 65 33 43 6f 6c 75 6d 6e 44 65 66  sqlite3ColumnDef
29950 61 75 6c 74 28 56 64 62 65 20 2a 2c 20 54 61 62  ault(Vdbe *, Tab
29960 6c 65 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b  le *, int, int);
29970 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 6c 74  .void sqlite3Alt
29980 65 72 46 69 6e 69 73 68 41 64 64 43 6f 6c 75 6d  erFinishAddColum
29990 6e 28 50 61 72 73 65 20 2a 2c 20 54 6f 6b 65 6e  n(Parse *, Token
299a0 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65   *);.void sqlite
299b0 33 41 6c 74 65 72 42 65 67 69 6e 41 64 64 43 6f  3AlterBeginAddCo
299c0 6c 75 6d 6e 28 50 61 72 73 65 20 2a 2c 20 53 72  lumn(Parse *, Sr
299d0 63 4c 69 73 74 20 2a 29 3b 0a 43 6f 6c 6c 53 65  cList *);.CollSe
299e0 71 20 2a 73 71 6c 69 74 65 33 47 65 74 43 6f 6c  q *sqlite3GetCol
299f0 6c 53 65 71 28 50 61 72 73 65 2a 2c 20 75 38 2c  lSeq(Parse*, u8,
29a00 20 43 6f 6c 6c 53 65 71 20 2a 2c 20 63 6f 6e 73   CollSeq *, cons
29a10 74 20 63 68 61 72 2a 29 3b 0a 63 68 61 72 20 73  t char*);.char s
29a20 71 6c 69 74 65 33 41 66 66 69 6e 69 74 79 54 79  qlite3AffinityTy
29a30 70 65 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  pe(const char*, 
29a40 75 38 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  u8*);.void sqlit
29a50 65 33 41 6e 61 6c 79 7a 65 28 50 61 72 73 65 2a  e3Analyze(Parse*
29a60 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a  , Token*, Token*
29a70 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 6e  );.int sqlite3In
29a80 76 6f 6b 65 42 75 73 79 48 61 6e 64 6c 65 72 28  vokeBusyHandler(
29a90 42 75 73 79 48 61 6e 64 6c 65 72 2a 29 3b 0a 69  BusyHandler*);.i
29aa0 6e 74 20 73 71 6c 69 74 65 33 46 69 6e 64 44 62  nt sqlite3FindDb
29ab0 28 73 71 6c 69 74 65 33 2a 2c 20 54 6f 6b 65 6e  (sqlite3*, Token
29ac0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46  *);.int sqlite3F
29ad0 69 6e 64 44 62 4e 61 6d 65 28 73 71 6c 69 74 65  indDbName(sqlite
29ae0 33 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20  3 *, const char 
29af0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 41  *);.int sqlite3A
29b00 6e 61 6c 79 73 69 73 4c 6f 61 64 28 73 71 6c 69  nalysisLoad(sqli
29b10 74 65 33 2a 2c 69 6e 74 20 69 44 42 29 3b 0a 76  te3*,int iDB);.v
29b20 6f 69 64 20 73 71 6c 69 74 65 33 44 65 6c 65 74  oid sqlite3Delet
29b30 65 49 6e 64 65 78 53 61 6d 70 6c 65 73 28 73 71  eIndexSamples(sq
29b40 6c 69 74 65 33 2a 2c 49 6e 64 65 78 2a 29 3b 0a  lite3*,Index*);.
29b50 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65 66 61  void sqlite3Defa
29b60 75 6c 74 52 6f 77 45 73 74 28 49 6e 64 65 78 2a  ultRowEst(Index*
29b70 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52  );.void sqlite3R
29b80 65 67 69 73 74 65 72 4c 69 6b 65 46 75 6e 63 74  egisterLikeFunct
29b90 69 6f 6e 73 28 73 71 6c 69 74 65 33 2a 2c 20 69  ions(sqlite3*, i
29ba0 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  nt);.int sqlite3
29bb0 49 73 4c 69 6b 65 46 75 6e 63 74 69 6f 6e 28 73  IsLikeFunction(s
29bc0 71 6c 69 74 65 33 2a 2c 45 78 70 72 2a 2c 69 6e  qlite3*,Expr*,in
29bd0 74 2a 2c 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20  t*,char*);.void 
29be0 73 71 6c 69 74 65 33 53 63 68 65 6d 61 43 6c 65  sqlite3SchemaCle
29bf0 61 72 28 76 6f 69 64 20 2a 29 3b 0a 53 63 68 65  ar(void *);.Sche
29c00 6d 61 20 2a 73 71 6c 69 74 65 33 53 63 68 65 6d  ma *sqlite3Schem
29c10 61 47 65 74 28 73 71 6c 69 74 65 33 20 2a 2c 20  aGet(sqlite3 *, 
29c20 42 74 72 65 65 20 2a 29 3b 0a 69 6e 74 20 73 71  Btree *);.int sq
29c30 6c 69 74 65 33 53 63 68 65 6d 61 54 6f 49 6e 64  lite3SchemaToInd
29c40 65 78 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20  ex(sqlite3 *db, 
29c50 53 63 68 65 6d 61 20 2a 29 3b 0a 4b 65 79 49 6e  Schema *);.KeyIn
29c60 66 6f 20 2a 73 71 6c 69 74 65 33 4b 65 79 49 6e  fo *sqlite3KeyIn
29c70 66 6f 41 6c 6c 6f 63 28 73 71 6c 69 74 65 33 2a  foAlloc(sqlite3*
29c80 2c 69 6e 74 2c 69 6e 74 29 3b 0a 76 6f 69 64 20  ,int,int);.void 
29c90 73 71 6c 69 74 65 33 4b 65 79 49 6e 66 6f 55 6e  sqlite3KeyInfoUn
29ca0 72 65 66 28 4b 65 79 49 6e 66 6f 2a 29 3b 0a 4b  ref(KeyInfo*);.K
29cb0 65 79 49 6e 66 6f 20 2a 73 71 6c 69 74 65 33 4b  eyInfo *sqlite3K
29cc0 65 79 49 6e 66 6f 52 65 66 28 4b 65 79 49 6e 66  eyInfoRef(KeyInf
29cd0 6f 2a 29 3b 0a 4b 65 79 49 6e 66 6f 20 2a 73 71  o*);.KeyInfo *sq
29ce0 6c 69 74 65 33 4b 65 79 49 6e 66 6f 4f 66 49 6e  lite3KeyInfoOfIn
29cf0 64 65 78 28 50 61 72 73 65 2a 2c 20 49 6e 64 65  dex(Parse*, Inde
29d00 78 2a 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49  x*);.#ifdef SQLI
29d10 54 45 5f 44 45 42 55 47 0a 69 6e 74 20 73 71 6c  TE_DEBUG.int sql
29d20 69 74 65 33 4b 65 79 49 6e 66 6f 49 73 57 72 69  ite3KeyInfoIsWri
29d30 74 65 61 62 6c 65 28 4b 65 79 49 6e 66 6f 2a 29  teable(KeyInfo*)
29d40 3b 0a 23 65 6e 64 69 66 0a 69 6e 74 20 73 71 6c  ;.#endif.int sql
29d50 69 74 65 33 43 72 65 61 74 65 46 75 6e 63 28 73  ite3CreateFunc(s
29d60 71 6c 69 74 65 33 20 2a 2c 20 63 6f 6e 73 74 20  qlite3 *, const 
29d70 63 68 61 72 20 2a 2c 20 69 6e 74 2c 20 69 6e 74  char *, int, int
29d80 2c 20 76 6f 69 64 20 2a 2c 0a 20 20 76 6f 69 64  , void *,.  void
29d90 20 28 2a 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e   (*)(sqlite3_con
29da0 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65  text*,int,sqlite
29db0 33 5f 76 61 6c 75 65 20 2a 2a 29 2c 0a 20 20 76  3_value **),.  v
29dc0 6f 69 64 20 28 2a 29 28 73 71 6c 69 74 65 33 5f  oid (*)(sqlite3_
29dd0 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c  context*,int,sql
29de0 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a 29 2c 20  ite3_value **), 
29df0 76 6f 69 64 20 28 2a 29 28 73 71 6c 69 74 65 33  void (*)(sqlite3
29e00 5f 63 6f 6e 74 65 78 74 2a 29 2c 0a 20 20 46 75  _context*),.  Fu
29e10 6e 63 44 65 73 74 72 75 63 74 6f 72 20 2a 70 44  ncDestructor *pD
29e20 65 73 74 72 75 63 74 6f 72 0a 29 3b 0a 76 6f 69  estructor.);.voi
29e30 64 20 73 71 6c 69 74 65 33 4f 6f 6d 46 61 75 6c  d sqlite3OomFaul
29e40 74 28 73 71 6c 69 74 65 33 2a 29 3b 0a 76 6f 69  t(sqlite3*);.voi
29e50 64 20 73 71 6c 69 74 65 33 4f 6f 6d 43 6c 65 61  d sqlite3OomClea
29e60 72 28 73 71 6c 69 74 65 33 2a 29 3b 0a 69 6e 74  r(sqlite3*);.int
29e70 20 73 71 6c 69 74 65 33 41 70 69 45 78 69 74 28   sqlite3ApiExit(
29e80 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 69 6e 74  sqlite3 *db, int
29e90 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4f 70  );.int sqlite3Op
29ea0 65 6e 54 65 6d 70 44 61 74 61 62 61 73 65 28 50  enTempDatabase(P
29eb0 61 72 73 65 20 2a 29 3b 0a 0a 76 6f 69 64 20 73  arse *);..void s
29ec0 71 6c 69 74 65 33 53 74 72 41 63 63 75 6d 49 6e  qlite3StrAccumIn
29ed0 69 74 28 53 74 72 41 63 63 75 6d 2a 2c 20 73 71  it(StrAccum*, sq
29ee0 6c 69 74 65 33 2a 2c 20 63 68 61 72 2a 2c 20 69  lite3*, char*, i
29ef0 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  nt, int);.void s
29f00 71 6c 69 74 65 33 53 74 72 41 63 63 75 6d 41 70  qlite3StrAccumAp
29f10 70 65 6e 64 28 53 74 72 41 63 63 75 6d 2a 2c 63  pend(StrAccum*,c
29f20 6f 6e 73 74 20 63 68 61 72 2a 2c 69 6e 74 29 3b  onst char*,int);
29f30 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74 72  .void sqlite3Str
29f40 41 63 63 75 6d 41 70 70 65 6e 64 41 6c 6c 28 53  AccumAppendAll(S
29f50 74 72 41 63 63 75 6d 2a 2c 63 6f 6e 73 74 20 63  trAccum*,const c
29f60 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  har*);.void sqli
29f70 74 65 33 41 70 70 65 6e 64 43 68 61 72 28 53 74  te3AppendChar(St
29f80 72 41 63 63 75 6d 2a 2c 69 6e 74 2c 63 68 61 72  rAccum*,int,char
29f90 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33  );.char *sqlite3
29fa0 53 74 72 41 63 63 75 6d 46 69 6e 69 73 68 28 53  StrAccumFinish(S
29fb0 74 72 41 63 63 75 6d 2a 29 3b 0a 76 6f 69 64 20  trAccum*);.void 
29fc0 73 71 6c 69 74 65 33 53 74 72 41 63 63 75 6d 52  sqlite3StrAccumR
29fd0 65 73 65 74 28 53 74 72 41 63 63 75 6d 2a 29 3b  eset(StrAccum*);
29fe0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 65 6c  .void sqlite3Sel
29ff0 65 63 74 44 65 73 74 49 6e 69 74 28 53 65 6c 65  ectDestInit(Sele
2a000 63 74 44 65 73 74 2a 2c 69 6e 74 2c 69 6e 74 29  ctDest*,int,int)
2a010 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33 43  ;.Expr *sqlite3C
2a020 72 65 61 74 65 43 6f 6c 75 6d 6e 45 78 70 72 28  reateColumnExpr(
2a030 73 71 6c 69 74 65 33 20 2a 2c 20 53 72 63 4c 69  sqlite3 *, SrcLi
2a040 73 74 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b  st *, int, int);
2a050 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42 61  ..void sqlite3Ba
2a060 63 6b 75 70 52 65 73 74 61 72 74 28 73 71 6c 69  ckupRestart(sqli
2a070 74 65 33 5f 62 61 63 6b 75 70 20 2a 29 3b 0a 76  te3_backup *);.v
2a080 6f 69 64 20 73 71 6c 69 74 65 33 42 61 63 6b 75  oid sqlite3Backu
2a090 70 55 70 64 61 74 65 28 73 71 6c 69 74 65 33 5f  pUpdate(sqlite3_
2a0a0 62 61 63 6b 75 70 20 2a 2c 20 50 67 6e 6f 2c 20  backup *, Pgno, 
2a0b0 63 6f 6e 73 74 20 75 38 20 2a 29 3b 0a 0a 23 69  const u8 *);..#i
2a0c0 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  fdef SQLITE_ENAB
2a0d0 4c 45 5f 53 54 41 54 33 5f 4f 52 5f 53 54 41 54  LE_STAT3_OR_STAT
2a0e0 34 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 6e  4.void sqlite3An
2a0f0 61 6c 79 7a 65 46 75 6e 63 74 69 6f 6e 73 28 76  alyzeFunctions(v
2a100 6f 69 64 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  oid);.int sqlite
2a110 33 53 74 61 74 34 50 72 6f 62 65 53 65 74 56 61  3Stat4ProbeSetVa
2a120 6c 75 65 28 50 61 72 73 65 2a 2c 49 6e 64 65 78  lue(Parse*,Index
2a130 2a 2c 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64  *,UnpackedRecord
2a140 2a 2a 2c 45 78 70 72 2a 2c 75 38 2c 69 6e 74 2c  **,Expr*,u8,int,
2a150 69 6e 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  int*);.int sqlit
2a160 65 33 53 74 61 74 34 56 61 6c 75 65 46 72 6f 6d  e3Stat4ValueFrom
2a170 45 78 70 72 28 50 61 72 73 65 2a 2c 20 45 78 70  Expr(Parse*, Exp
2a180 72 2a 2c 20 75 38 2c 20 73 71 6c 69 74 65 33 5f  r*, u8, sqlite3_
2a190 76 61 6c 75 65 2a 2a 29 3b 0a 76 6f 69 64 20 73  value**);.void s
2a1a0 71 6c 69 74 65 33 53 74 61 74 34 50 72 6f 62 65  qlite3Stat4Probe
2a1b0 46 72 65 65 28 55 6e 70 61 63 6b 65 64 52 65 63  Free(UnpackedRec
2a1c0 6f 72 64 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ord*);.int sqlit
2a1d0 65 33 53 74 61 74 34 43 6f 6c 75 6d 6e 28 73 71  e3Stat4Column(sq
2a1e0 6c 69 74 65 33 2a 2c 20 63 6f 6e 73 74 20 76 6f  lite3*, const vo
2a1f0 69 64 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 73  id*, int, int, s
2a200 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2a 29 3b  qlite3_value**);
2a210 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54  .#endif../*.** T
2a220 68 65 20 69 6e 74 65 72 66 61 63 65 20 74 6f 20  he interface to 
2a230 74 68 65 20 4c 45 4d 4f 4e 2d 67 65 6e 65 72 61  the LEMON-genera
2a240 74 65 64 20 70 61 72 73 65 72 0a 2a 2f 0a 76 6f  ted parser.*/.vo
2a250 69 64 20 2a 73 71 6c 69 74 65 33 50 61 72 73 65  id *sqlite3Parse
2a260 72 41 6c 6c 6f 63 28 76 6f 69 64 2a 28 2a 29 28  rAlloc(void*(*)(
2a270 75 36 34 29 29 3b 0a 76 6f 69 64 20 73 71 6c 69  u64));.void sqli
2a280 74 65 33 50 61 72 73 65 72 46 72 65 65 28 76 6f  te3ParserFree(vo
2a290 69 64 2a 2c 20 76 6f 69 64 28 2a 29 28 76 6f 69  id*, void(*)(voi
2a2a0 64 2a 29 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  d*));.void sqlit
2a2b0 65 33 50 61 72 73 65 72 28 76 6f 69 64 2a 2c 20  e3Parser(void*, 
2a2c0 69 6e 74 2c 20 54 6f 6b 65 6e 2c 20 50 61 72 73  int, Token, Pars
2a2d0 65 2a 29 3b 0a 23 69 66 64 65 66 20 59 59 54 52  e*);.#ifdef YYTR
2a2e0 41 43 4b 4d 41 58 53 54 41 43 4b 44 45 50 54 48  ACKMAXSTACKDEPTH
2a2f0 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 50 61  .  int sqlite3Pa
2a300 72 73 65 72 53 74 61 63 6b 50 65 61 6b 28 76 6f  rserStackPeak(vo
2a310 69 64 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 76 6f  id*);.#endif..vo
2a320 69 64 20 73 71 6c 69 74 65 33 41 75 74 6f 4c 6f  id sqlite3AutoLo
2a330 61 64 45 78 74 65 6e 73 69 6f 6e 73 28 73 71 6c  adExtensions(sql
2a340 69 74 65 33 2a 29 3b 0a 23 69 66 6e 64 65 66 20  ite3*);.#ifndef 
2a350 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 4c 4f 41 44  SQLITE_OMIT_LOAD
2a360 5f 45 58 54 45 4e 53 49 4f 4e 0a 20 20 76 6f 69  _EXTENSION.  voi
2a370 64 20 73 71 6c 69 74 65 33 43 6c 6f 73 65 45 78  d sqlite3CloseEx
2a380 74 65 6e 73 69 6f 6e 73 28 73 71 6c 69 74 65 33  tensions(sqlite3
2a390 2a 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69  *);.#else.# defi
2a3a0 6e 65 20 73 71 6c 69 74 65 33 43 6c 6f 73 65 45  ne sqlite3CloseE
2a3b0 78 74 65 6e 73 69 6f 6e 73 28 58 29 0a 23 65 6e  xtensions(X).#en
2a3c0 64 69 66 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c  dif..#ifndef SQL
2a3d0 49 54 45 5f 4f 4d 49 54 5f 53 48 41 52 45 44 5f  ITE_OMIT_SHARED_
2a3e0 43 41 43 48 45 0a 20 20 76 6f 69 64 20 73 71 6c  CACHE.  void sql
2a3f0 69 74 65 33 54 61 62 6c 65 4c 6f 63 6b 28 50 61  ite3TableLock(Pa
2a400 72 73 65 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c  rse *, int, int,
2a410 20 75 38 2c 20 63 6f 6e 73 74 20 63 68 61 72 20   u8, const char 
2a420 2a 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65 66  *);.#else.  #def
2a430 69 6e 65 20 73 71 6c 69 74 65 33 54 61 62 6c 65  ine sqlite3Table
2a440 4c 6f 63 6b 28 76 2c 77 2c 78 2c 79 2c 7a 29 0a  Lock(v,w,x,y,z).
2a450 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53  #endif..#ifdef S
2a460 51 4c 49 54 45 5f 54 45 53 54 0a 20 20 69 6e 74  QLITE_TEST.  int
2a470 20 73 71 6c 69 74 65 33 55 74 66 38 54 6f 38 28   sqlite3Utf8To8(
2a480 75 6e 73 69 67 6e 65 64 20 63 68 61 72 2a 29 3b  unsigned char*);
2a490 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20  .#endif..#ifdef 
2a4a0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
2a4b0 55 41 4c 54 41 42 4c 45 0a 23 20 20 64 65 66 69  UALTABLE.#  defi
2a4c0 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62 43 6c  ne sqlite3VtabCl
2a4d0 65 61 72 28 59 29 0a 23 20 20 64 65 66 69 6e 65  ear(Y).#  define
2a4e0 20 73 71 6c 69 74 65 33 56 74 61 62 53 79 6e 63   sqlite3VtabSync
2a4f0 28 58 2c 59 29 20 53 51 4c 49 54 45 5f 4f 4b 0a  (X,Y) SQLITE_OK.
2a500 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  #  define sqlite
2a510 33 56 74 61 62 52 6f 6c 6c 62 61 63 6b 28 58 29  3VtabRollback(X)
2a520 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74  .#  define sqlit
2a530 65 33 56 74 61 62 43 6f 6d 6d 69 74 28 58 29 0a  e3VtabCommit(X).
2a540 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  #  define sqlite
2a550 33 56 74 61 62 49 6e 53 79 6e 63 28 64 62 29 20  3VtabInSync(db) 
2a560 30 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69  0.#  define sqli
2a570 74 65 33 56 74 61 62 4c 6f 63 6b 28 58 29 0a 23  te3VtabLock(X).#
2a580 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33    define sqlite3
2a590 56 74 61 62 55 6e 6c 6f 63 6b 28 58 29 0a 23 20  VtabUnlock(X).# 
2a5a0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56   define sqlite3V
2a5b0 74 61 62 55 6e 6c 6f 63 6b 4c 69 73 74 28 58 29  tabUnlockList(X)
2a5c0 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74  .#  define sqlit
2a5d0 65 33 56 74 61 62 53 61 76 65 70 6f 69 6e 74 28  e3VtabSavepoint(
2a5e0 58 2c 20 59 2c 20 5a 29 20 53 51 4c 49 54 45 5f  X, Y, Z) SQLITE_
2a5f0 4f 4b 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c  OK.#  define sql
2a600 69 74 65 33 47 65 74 56 54 61 62 6c 65 28 58 2c  ite3GetVTable(X,
2a610 59 29 20 20 28 28 56 54 61 62 6c 65 2a 29 30 29  Y)  ((VTable*)0)
2a620 0a 23 65 6c 73 65 0a 20 20 20 76 6f 69 64 20 73  .#else.   void s
2a630 71 6c 69 74 65 33 56 74 61 62 43 6c 65 61 72 28  qlite3VtabClear(
2a640 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 54 61 62  sqlite3 *db, Tab
2a650 6c 65 2a 29 3b 0a 20 20 20 76 6f 69 64 20 73 71  le*);.   void sq
2a660 6c 69 74 65 33 56 74 61 62 44 69 73 63 6f 6e 6e  lite3VtabDisconn
2a670 65 63 74 28 73 71 6c 69 74 65 33 20 2a 64 62 2c  ect(sqlite3 *db,
2a680 20 54 61 62 6c 65 20 2a 70 29 3b 0a 20 20 20 69   Table *p);.   i
2a690 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62 53 79  nt sqlite3VtabSy
2a6a0 6e 63 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20  nc(sqlite3 *db, 
2a6b0 56 64 62 65 2a 29 3b 0a 20 20 20 69 6e 74 20 73  Vdbe*);.   int s
2a6c0 71 6c 69 74 65 33 56 74 61 62 52 6f 6c 6c 62 61  qlite3VtabRollba
2a6d0 63 6b 28 73 71 6c 69 74 65 33 20 2a 64 62 29 3b  ck(sqlite3 *db);
2a6e0 0a 20 20 20 69 6e 74 20 73 71 6c 69 74 65 33 56  .   int sqlite3V
2a6f0 74 61 62 43 6f 6d 6d 69 74 28 73 71 6c 69 74 65  tabCommit(sqlite
2a700 33 20 2a 64 62 29 3b 0a 20 20 20 76 6f 69 64 20  3 *db);.   void 
2a710 73 71 6c 69 74 65 33 56 74 61 62 4c 6f 63 6b 28  sqlite3VtabLock(
2a720 56 54 61 62 6c 65 20 2a 29 3b 0a 20 20 20 76 6f  VTable *);.   vo
2a730 69 64 20 73 71 6c 69 74 65 33 56 74 61 62 55 6e  id sqlite3VtabUn
2a740 6c 6f 63 6b 28 56 54 61 62 6c 65 20 2a 29 3b 0a  lock(VTable *);.
2a750 20 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 56     void sqlite3V
2a760 74 61 62 55 6e 6c 6f 63 6b 4c 69 73 74 28 73 71  tabUnlockList(sq
2a770 6c 69 74 65 33 2a 29 3b 0a 20 20 20 69 6e 74 20  lite3*);.   int 
2a780 73 71 6c 69 74 65 33 56 74 61 62 53 61 76 65 70  sqlite3VtabSavep
2a790 6f 69 6e 74 28 73 71 6c 69 74 65 33 20 2a 2c 20  oint(sqlite3 *, 
2a7a0 69 6e 74 2c 20 69 6e 74 29 3b 0a 20 20 20 76 6f  int, int);.   vo
2a7b0 69 64 20 73 71 6c 69 74 65 33 56 74 61 62 49 6d  id sqlite3VtabIm
2a7c0 70 6f 72 74 45 72 72 6d 73 67 28 56 64 62 65 2a  portErrmsg(Vdbe*
2a7d0 2c 20 73 71 6c 69 74 65 33 5f 76 74 61 62 2a 29  , sqlite3_vtab*)
2a7e0 3b 0a 20 20 20 56 54 61 62 6c 65 20 2a 73 71 6c  ;.   VTable *sql
2a7f0 69 74 65 33 47 65 74 56 54 61 62 6c 65 28 73 71  ite3GetVTable(sq
2a800 6c 69 74 65 33 2a 2c 20 54 61 62 6c 65 2a 29 3b  lite3*, Table*);
2a810 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74  .#  define sqlit
2a820 65 33 56 74 61 62 49 6e 53 79 6e 63 28 64 62 29  e3VtabInSync(db)
2a830 20 28 28 64 62 29 2d 3e 6e 56 54 72 61 6e 73 3e   ((db)->nVTrans>
2a840 30 20 26 26 20 28 64 62 29 2d 3e 61 56 54 72 61  0 && (db)->aVTra
2a850 6e 73 3d 3d 30 29 0a 23 65 6e 64 69 66 0a 69 6e  ns==0).#endif.in
2a860 74 20 73 71 6c 69 74 65 33 56 74 61 62 45 70 6f  t sqlite3VtabEpo
2a870 6e 79 6d 6f 75 73 54 61 62 6c 65 49 6e 69 74 28  nymousTableInit(
2a880 50 61 72 73 65 2a 2c 4d 6f 64 75 6c 65 2a 29 3b  Parse*,Module*);
2a890 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61  .void sqlite3Vta
2a8a0 62 45 70 6f 6e 79 6d 6f 75 73 54 61 62 6c 65 43  bEponymousTableC
2a8b0 6c 65 61 72 28 73 71 6c 69 74 65 33 2a 2c 4d 6f  lear(sqlite3*,Mo
2a8c0 64 75 6c 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  dule*);.void sql
2a8d0 69 74 65 33 56 74 61 62 4d 61 6b 65 57 72 69 74  ite3VtabMakeWrit
2a8e0 61 62 6c 65 28 50 61 72 73 65 2a 2c 54 61 62 6c  able(Parse*,Tabl
2a8f0 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  e*);.void sqlite
2a900 33 56 74 61 62 42 65 67 69 6e 50 61 72 73 65 28  3VtabBeginParse(
2a910 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 20  Parse*, Token*, 
2a920 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c 20  Token*, Token*, 
2a930 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
2a940 65 33 56 74 61 62 46 69 6e 69 73 68 50 61 72 73  e3VtabFinishPars
2a950 65 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a  e(Parse*, Token*
2a960 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56  );.void sqlite3V
2a970 74 61 62 41 72 67 49 6e 69 74 28 50 61 72 73 65  tabArgInit(Parse
2a980 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
2a990 56 74 61 62 41 72 67 45 78 74 65 6e 64 28 50 61  VtabArgExtend(Pa
2a9a0 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69  rse*, Token*);.i
2a9b0 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62 43 61  nt sqlite3VtabCa
2a9c0 6c 6c 43 72 65 61 74 65 28 73 71 6c 69 74 65 33  llCreate(sqlite3
2a9d0 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68  *, int, const ch
2a9e0 61 72 20 2a 2c 20 63 68 61 72 20 2a 2a 29 3b 0a  ar *, char **);.
2a9f0 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62 43  int sqlite3VtabC
2aa00 61 6c 6c 43 6f 6e 6e 65 63 74 28 50 61 72 73 65  allConnect(Parse
2aa10 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a 69 6e 74 20  *, Table*);.int 
2aa20 73 71 6c 69 74 65 33 56 74 61 62 43 61 6c 6c 44  sqlite3VtabCallD
2aa30 65 73 74 72 6f 79 28 73 71 6c 69 74 65 33 2a 2c  estroy(sqlite3*,
2aa40 20 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61 72   int, const char
2aa50 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33   *);.int sqlite3
2aa60 56 74 61 62 42 65 67 69 6e 28 73 71 6c 69 74 65  VtabBegin(sqlite
2aa70 33 20 2a 2c 20 56 54 61 62 6c 65 20 2a 29 3b 0a  3 *, VTable *);.
2aa80 46 75 6e 63 44 65 66 20 2a 73 71 6c 69 74 65 33  FuncDef *sqlite3
2aa90 56 74 61 62 4f 76 65 72 6c 6f 61 64 46 75 6e 63  VtabOverloadFunc
2aaa0 74 69 6f 6e 28 73 71 6c 69 74 65 33 20 2a 2c 46  tion(sqlite3 *,F
2aab0 75 6e 63 44 65 66 2a 2c 20 69 6e 74 20 6e 41 72  uncDef*, int nAr
2aac0 67 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20  g, Expr*);.void 
2aad0 73 71 6c 69 74 65 33 49 6e 76 61 6c 69 64 46 75  sqlite3InvalidFu
2aae0 6e 63 74 69 6f 6e 28 73 71 6c 69 74 65 33 5f 63  nction(sqlite3_c
2aaf0 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69  ontext*,int,sqli
2ab00 74 65 33 5f 76 61 6c 75 65 2a 2a 29 3b 0a 73 71  te3_value**);.sq
2ab10 6c 69 74 65 33 5f 69 6e 74 36 34 20 73 71 6c 69  lite3_int64 sqli
2ab20 74 65 33 53 74 6d 74 43 75 72 72 65 6e 74 54 69  te3StmtCurrentTi
2ab30 6d 65 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65  me(sqlite3_conte
2ab40 78 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  xt*);.int sqlite
2ab50 33 56 64 62 65 50 61 72 61 6d 65 74 65 72 49 6e  3VdbeParameterIn
2ab60 64 65 78 28 56 64 62 65 2a 2c 20 63 6f 6e 73 74  dex(Vdbe*, const
2ab70 20 63 68 61 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e   char*, int);.in
2ab80 74 20 73 71 6c 69 74 65 33 54 72 61 6e 73 66 65  t sqlite3Transfe
2ab90 72 42 69 6e 64 69 6e 67 73 28 73 71 6c 69 74 65  rBindings(sqlite
2aba0 33 5f 73 74 6d 74 20 2a 2c 20 73 71 6c 69 74 65  3_stmt *, sqlite
2abb0 33 5f 73 74 6d 74 20 2a 29 3b 0a 76 6f 69 64 20  3_stmt *);.void 
2abc0 73 71 6c 69 74 65 33 50 61 72 73 65 72 52 65 73  sqlite3ParserRes
2abd0 65 74 28 50 61 72 73 65 2a 29 3b 0a 69 6e 74 20  et(Parse*);.int 
2abe0 73 71 6c 69 74 65 33 52 65 70 72 65 70 61 72 65  sqlite3Reprepare
2abf0 28 56 64 62 65 2a 29 3b 0a 76 6f 69 64 20 73 71  (Vdbe*);.void sq
2ac00 6c 69 74 65 33 45 78 70 72 4c 69 73 74 43 68 65  lite3ExprListChe
2ac10 63 6b 4c 65 6e 67 74 68 28 50 61 72 73 65 2a 2c  ckLength(Parse*,
2ac20 20 45 78 70 72 4c 69 73 74 2a 2c 20 63 6f 6e 73   ExprList*, cons
2ac30 74 20 63 68 61 72 2a 29 3b 0a 43 6f 6c 6c 53 65  t char*);.CollSe
2ac40 71 20 2a 73 71 6c 69 74 65 33 42 69 6e 61 72 79  q *sqlite3Binary
2ac50 43 6f 6d 70 61 72 65 43 6f 6c 6c 53 65 71 28 50  CompareCollSeq(P
2ac60 61 72 73 65 20 2a 2c 20 45 78 70 72 20 2a 2c 20  arse *, Expr *, 
2ac70 45 78 70 72 20 2a 29 3b 0a 69 6e 74 20 73 71 6c  Expr *);.int sql
2ac80 69 74 65 33 54 65 6d 70 49 6e 4d 65 6d 6f 72 79  ite3TempInMemory
2ac90 28 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 2a 29  (const sqlite3*)
2aca0 3b 0a 63 6f 6e 73 74 20 63 68 61 72 20 2a 73 71  ;.const char *sq
2acb0 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 4d 6f 64 65  lite3JournalMode
2acc0 6e 61 6d 65 28 69 6e 74 29 3b 0a 23 69 66 6e 64  name(int);.#ifnd
2acd0 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57  ef SQLITE_OMIT_W
2ace0 41 4c 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33  AL.  int sqlite3
2acf0 43 68 65 63 6b 70 6f 69 6e 74 28 73 71 6c 69 74  Checkpoint(sqlit
2ad00 65 33 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69  e3*, int, int, i
2ad10 6e 74 2a 2c 20 69 6e 74 2a 29 3b 0a 20 20 69 6e  nt*, int*);.  in
2ad20 74 20 73 71 6c 69 74 65 33 57 61 6c 44 65 66 61  t sqlite3WalDefa
2ad30 75 6c 74 48 6f 6f 6b 28 76 6f 69 64 2a 2c 73 71  ultHook(void*,sq
2ad40 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61  lite3*,const cha
2ad50 72 2a 2c 69 6e 74 29 3b 0a 23 65 6e 64 69 66 0a  r*,int);.#endif.
2ad60 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
2ad70 4d 49 54 5f 43 54 45 0a 20 20 57 69 74 68 20 2a  MIT_CTE.  With *
2ad80 73 71 6c 69 74 65 33 57 69 74 68 41 64 64 28 50  sqlite3WithAdd(P
2ad90 61 72 73 65 2a 2c 57 69 74 68 2a 2c 54 6f 6b 65  arse*,With*,Toke
2ada0 6e 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 53 65 6c  n*,ExprList*,Sel
2adb0 65 63 74 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71  ect*);.  void sq
2adc0 6c 69 74 65 33 57 69 74 68 44 65 6c 65 74 65 28  lite3WithDelete(
2add0 73 71 6c 69 74 65 33 2a 2c 57 69 74 68 2a 29 3b  sqlite3*,With*);
2ade0 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 57  .  void sqlite3W
2adf0 69 74 68 50 75 73 68 28 50 61 72 73 65 2a 2c 20  ithPush(Parse*, 
2ae00 57 69 74 68 2a 2c 20 75 38 29 3b 0a 23 65 6c 73  With*, u8);.#els
2ae10 65 0a 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65  e.#define sqlite
2ae20 33 57 69 74 68 50 75 73 68 28 78 2c 79 2c 7a 29  3WithPush(x,y,z)
2ae30 0a 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  .#define sqlite3
2ae40 57 69 74 68 44 65 6c 65 74 65 28 78 2c 79 29 0a  WithDelete(x,y).
2ae50 23 65 6e 64 69 66 0a 0a 2f 2a 20 44 65 63 6c 61  #endif../* Decla
2ae60 72 61 74 69 6f 6e 73 20 66 6f 72 20 66 75 6e 63  rations for func
2ae70 74 69 6f 6e 73 20 69 6e 20 66 6b 65 79 2e 63 2e  tions in fkey.c.
2ae80 20 41 6c 6c 20 6f 66 20 74 68 65 73 65 20 61 72   All of these ar
2ae90 65 20 72 65 70 6c 61 63 65 64 20 62 79 0a 2a 2a  e replaced by.**
2aea0 20 6e 6f 2d 6f 70 20 6d 61 63 72 6f 73 20 69 66   no-op macros if
2aeb0 20 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45   OMIT_FOREIGN_KE
2aec0 59 20 69 73 20 64 65 66 69 6e 65 64 2e 20 49 6e  Y is defined. In
2aed0 20 74 68 69 73 20 63 61 73 65 20 6e 6f 20 66 6f   this case no fo
2aee0 72 65 69 67 6e 0a 2a 2a 20 6b 65 79 20 66 75 6e  reign.** key fun
2aef0 63 74 69 6f 6e 61 6c 69 74 79 20 69 73 20 61 76  ctionality is av
2af00 61 69 6c 61 62 6c 65 2e 20 49 66 20 4f 4d 49 54  ailable. If OMIT
2af10 5f 54 52 49 47 47 45 52 20 69 73 20 64 65 66 69  _TRIGGER is defi
2af20 6e 65 64 20 62 75 74 0a 2a 2a 20 4f 4d 49 54 5f  ned but.** OMIT_
2af30 46 4f 52 45 49 47 4e 5f 4b 45 59 20 69 73 20 6e  FOREIGN_KEY is n
2af40 6f 74 2c 20 6f 6e 6c 79 20 73 6f 6d 65 20 6f 66  ot, only some of
2af50 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 73 20 61   the functions a
2af60 72 65 20 6e 6f 2d 6f 70 65 64 2e 20 49 6e 0a 2a  re no-oped. In.*
2af70 2a 20 74 68 69 73 20 63 61 73 65 20 66 6f 72 65  * this case fore
2af80 69 67 6e 20 6b 65 79 73 20 61 72 65 20 70 61 72  ign keys are par
2af90 73 65 64 2c 20 62 75 74 20 6e 6f 20 6f 74 68 65  sed, but no othe
2afa0 72 20 66 75 6e 63 74 69 6f 6e 61 6c 69 74 79 20  r functionality 
2afb0 69 73 0a 2a 2a 20 70 72 6f 76 69 64 65 64 20 28  is.** provided (
2afc0 65 6e 66 6f 72 63 65 6d 65 6e 74 20 6f 66 20 46  enforcement of F
2afd0 4b 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 72 65  K constraints re
2afe0 71 75 69 72 65 73 20 74 68 65 20 74 72 69 67 67  quires the trigg
2aff0 65 72 73 20 73 75 62 2d 73 79 73 74 65 6d 29 2e  ers sub-system).
2b000 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64  .*/.#if !defined
2b010 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f 52  (SQLITE_OMIT_FOR
2b020 45 49 47 4e 5f 4b 45 59 29 20 26 26 20 21 64 65  EIGN_KEY) && !de
2b030 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49  fined(SQLITE_OMI
2b040 54 5f 54 52 49 47 47 45 52 29 0a 20 20 76 6f 69  T_TRIGGER).  voi
2b050 64 20 73 71 6c 69 74 65 33 46 6b 43 68 65 63 6b  d sqlite3FkCheck
2b060 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c  (Parse*, Table*,
2b070 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 2a 2c   int, int, int*,
2b080 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20 73 71   int);.  void sq
2b090 6c 69 74 65 33 46 6b 44 72 6f 70 54 61 62 6c 65  lite3FkDropTable
2b0a0 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74  (Parse*, SrcList
2b0b0 20 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a 20 20 76   *, Table*);.  v
2b0c0 6f 69 64 20 73 71 6c 69 74 65 33 46 6b 41 63 74  oid sqlite3FkAct
2b0d0 69 6f 6e 73 28 50 61 72 73 65 2a 2c 20 54 61 62  ions(Parse*, Tab
2b0e0 6c 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20  le*, ExprList*, 
2b0f0 69 6e 74 2c 20 69 6e 74 2a 2c 20 69 6e 74 29 3b  int, int*, int);
2b100 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 46 6b  .  int sqlite3Fk
2b110 52 65 71 75 69 72 65 64 28 50 61 72 73 65 2a 2c  Required(Parse*,
2b120 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2a 2c 20 69   Table*, int*, i
2b130 6e 74 29 3b 0a 20 20 75 33 32 20 73 71 6c 69 74  nt);.  u32 sqlit
2b140 65 33 46 6b 4f 6c 64 6d 61 73 6b 28 50 61 72 73  e3FkOldmask(Pars
2b150 65 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a 20 20 46  e*, Table*);.  F
2b160 4b 65 79 20 2a 73 71 6c 69 74 65 33 46 6b 52 65  Key *sqlite3FkRe
2b170 66 65 72 65 6e 63 65 73 28 54 61 62 6c 65 20 2a  ferences(Table *
2b180 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69  );.#else.  #defi
2b190 6e 65 20 73 71 6c 69 74 65 33 46 6b 41 63 74 69  ne sqlite3FkActi
2b1a0 6f 6e 73 28 61 2c 62 2c 63 2c 64 2c 65 2c 66 29  ons(a,b,c,d,e,f)
2b1b0 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74  .  #define sqlit
2b1c0 65 33 46 6b 43 68 65 63 6b 28 61 2c 62 2c 63 2c  e3FkCheck(a,b,c,
2b1d0 64 2c 65 2c 66 29 0a 20 20 23 64 65 66 69 6e 65  d,e,f).  #define
2b1e0 20 73 71 6c 69 74 65 33 46 6b 44 72 6f 70 54 61   sqlite3FkDropTa
2b1f0 62 6c 65 28 61 2c 62 2c 63 29 0a 20 20 23 64 65  ble(a,b,c).  #de
2b200 66 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 4f 6c  fine sqlite3FkOl
2b210 64 6d 61 73 6b 28 61 2c 62 29 20 20 20 20 20 20  dmask(a,b)      
2b220 20 20 20 30 0a 20 20 23 64 65 66 69 6e 65 20 73     0.  #define s
2b230 71 6c 69 74 65 33 46 6b 52 65 71 75 69 72 65 64  qlite3FkRequired
2b240 28 61 2c 62 2c 63 2c 64 29 20 20 20 20 30 0a 23  (a,b,c,d)    0.#
2b250 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51  endif.#ifndef SQ
2b260 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49 47  LITE_OMIT_FOREIG
2b270 4e 5f 4b 45 59 0a 20 20 76 6f 69 64 20 73 71 6c  N_KEY.  void sql
2b280 69 74 65 33 46 6b 44 65 6c 65 74 65 28 73 71 6c  ite3FkDelete(sql
2b290 69 74 65 33 20 2a 2c 20 54 61 62 6c 65 2a 29 3b  ite3 *, Table*);
2b2a0 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 46 6b  .  int sqlite3Fk
2b2b0 4c 6f 63 61 74 65 49 6e 64 65 78 28 50 61 72 73  LocateIndex(Pars
2b2c0 65 2a 2c 54 61 62 6c 65 2a 2c 46 4b 65 79 2a 2c  e*,Table*,FKey*,
2b2d0 49 6e 64 65 78 2a 2a 2c 69 6e 74 2a 2a 29 3b 0a  Index**,int**);.
2b2e0 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20  #else.  #define 
2b2f0 73 71 6c 69 74 65 33 46 6b 44 65 6c 65 74 65 28  sqlite3FkDelete(
2b300 61 2c 62 29 0a 20 20 23 64 65 66 69 6e 65 20 73  a,b).  #define s
2b310 71 6c 69 74 65 33 46 6b 4c 6f 63 61 74 65 49 6e  qlite3FkLocateIn
2b320 64 65 78 28 61 2c 62 2c 63 2c 64 2c 65 29 0a 23  dex(a,b,c,d,e).#
2b330 65 6e 64 69 66 0a 0a 0a 2f 2a 0a 2a 2a 20 41 76  endif.../*.** Av
2b340 61 69 6c 61 62 6c 65 20 66 61 75 6c 74 20 69 6e  ailable fault in
2b350 6a 65 63 74 6f 72 73 2e 20 20 53 68 6f 75 6c 64  jectors.  Should
2b360 20 62 65 20 6e 75 6d 62 65 72 65 64 20 62 65 67   be numbered beg
2b370 69 6e 6e 69 6e 67 20 77 69 74 68 20 30 2e 0a 2a  inning with 0..*
2b380 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
2b390 5f 46 41 55 4c 54 49 4e 4a 45 43 54 4f 52 5f 4d  _FAULTINJECTOR_M
2b3a0 41 4c 4c 4f 43 20 20 20 20 20 30 0a 23 64 65 66  ALLOC     0.#def
2b3b0 69 6e 65 20 53 51 4c 49 54 45 5f 46 41 55 4c 54  ine SQLITE_FAULT
2b3c0 49 4e 4a 45 43 54 4f 52 5f 43 4f 55 4e 54 20 20  INJECTOR_COUNT  
2b3d0 20 20 20 20 31 0a 0a 2f 2a 0a 2a 2a 20 54 68 65      1../*.** The
2b3e0 20 69 6e 74 65 72 66 61 63 65 20 74 6f 20 74 68   interface to th
2b3f0 65 20 63 6f 64 65 20 69 6e 20 66 61 75 6c 74 2e  e code in fault.
2b400 63 20 75 73 65 64 20 66 6f 72 20 69 64 65 6e 74  c used for ident
2b410 69 66 79 69 6e 67 20 22 62 65 6e 69 67 6e 22 0a  ifying "benign".
2b420 2a 2a 20 6d 61 6c 6c 6f 63 20 66 61 69 6c 75 72  ** malloc failur
2b430 65 73 2e 20 54 68 69 73 20 69 73 20 6f 6e 6c 79  es. This is only
2b440 20 70 72 65 73 65 6e 74 20 69 66 20 53 51 4c 49   present if SQLI
2b450 54 45 5f 4f 4d 49 54 5f 42 55 49 4c 54 49 4e 5f  TE_OMIT_BUILTIN_
2b460 54 45 53 54 0a 2a 2a 20 69 73 20 6e 6f 74 20 64  TEST.** is not d
2b470 65 66 69 6e 65 64 2e 0a 2a 2f 0a 23 69 66 6e 64  efined..*/.#ifnd
2b480 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42  ef SQLITE_OMIT_B
2b490 55 49 4c 54 49 4e 5f 54 45 53 54 0a 20 20 76 6f  UILTIN_TEST.  vo
2b4a0 69 64 20 73 71 6c 69 74 65 33 42 65 67 69 6e 42  id sqlite3BeginB
2b4b0 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28 76 6f 69 64  enignMalloc(void
2b4c0 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
2b4d0 33 45 6e 64 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63  3EndBenignMalloc
2b4e0 28 76 6f 69 64 29 3b 0a 23 65 6c 73 65 0a 20 20  (void);.#else.  
2b4f0 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 42  #define sqlite3B
2b500 65 67 69 6e 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63  eginBenignMalloc
2b510 28 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c  ().  #define sql
2b520 69 74 65 33 45 6e 64 42 65 6e 69 67 6e 4d 61 6c  ite3EndBenignMal
2b530 6c 6f 63 28 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a  loc().#endif../*
2b540 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 72 65 74 75  .** Allowed retu
2b550 72 6e 20 76 61 6c 75 65 73 20 66 72 6f 6d 20 73  rn values from s
2b560 71 6c 69 74 65 33 46 69 6e 64 49 6e 49 6e 64 65  qlite3FindInInde
2b570 78 28 29 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 49  x().*/.#define I
2b580 4e 5f 49 4e 44 45 58 5f 52 4f 57 49 44 20 20 20  N_INDEX_ROWID   
2b590 20 20 20 20 20 31 20 20 20 2f 2a 20 53 65 61 72       1   /* Sear
2b5a0 63 68 20 74 68 65 20 72 6f 77 69 64 20 6f 66 20  ch the rowid of 
2b5b0 74 68 65 20 74 61 62 6c 65 20 2a 2f 0a 23 64 65  the table */.#de
2b5c0 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 45 50  fine IN_INDEX_EP
2b5d0 48 20 20 20 20 20 20 20 20 20 20 32 20 20 20 2f  H          2   /
2b5e0 2a 20 53 65 61 72 63 68 20 61 6e 20 65 70 68 65  * Search an ephe
2b5f0 6d 65 72 61 6c 20 62 2d 74 72 65 65 20 2a 2f 0a  meral b-tree */.
2b600 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58  #define IN_INDEX
2b610 5f 49 4e 44 45 58 5f 41 53 43 20 20 20 20 33 20  _INDEX_ASC    3 
2b620 20 20 2f 2a 20 45 78 69 73 74 69 6e 67 20 69 6e    /* Existing in
2b630 64 65 78 20 41 53 43 45 4e 44 49 4e 47 20 2a 2f  dex ASCENDING */
2b640 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45  .#define IN_INDE
2b650 58 5f 49 4e 44 45 58 5f 44 45 53 43 20 20 20 34  X_INDEX_DESC   4
2b660 20 20 20 2f 2a 20 45 78 69 73 74 69 6e 67 20 69     /* Existing i
2b670 6e 64 65 78 20 44 45 53 43 45 4e 44 49 4e 47 20  ndex DESCENDING 
2b680 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e  */.#define IN_IN
2b690 44 45 58 5f 4e 4f 4f 50 20 20 20 20 20 20 20 20  DEX_NOOP        
2b6a0 20 35 20 20 20 2f 2a 20 4e 6f 20 74 61 62 6c 65   5   /* No table
2b6b0 20 61 76 61 69 6c 61 62 6c 65 2e 20 55 73 65 20   available. Use 
2b6c0 63 6f 6d 70 61 72 69 73 6f 6e 73 20 2a 2f 0a 2f  comparisons */./
2b6d0 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 66 6c 61  *.** Allowed fla
2b6e0 67 73 20 66 6f 72 20 74 68 65 20 33 72 64 20 70  gs for the 3rd p
2b6f0 61 72 61 6d 65 74 65 72 20 74 6f 20 73 71 6c 69  arameter to sqli
2b700 74 65 33 46 69 6e 64 49 6e 49 6e 64 65 78 28 29  te3FindInIndex()
2b710 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f  ..*/.#define IN_
2b720 49 4e 44 45 58 5f 4e 4f 4f 50 5f 4f 4b 20 20 20  INDEX_NOOP_OK   
2b730 20 20 30 78 30 30 30 31 20 20 2f 2a 20 4f 4b 20    0x0001  /* OK 
2b740 74 6f 20 72 65 74 75 72 6e 20 49 4e 5f 49 4e 44  to return IN_IND
2b750 45 58 5f 4e 4f 4f 50 20 2a 2f 0a 23 64 65 66 69  EX_NOOP */.#defi
2b760 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 4d 45 4d 42  ne IN_INDEX_MEMB
2b770 45 52 53 48 49 50 20 20 30 78 30 30 30 32 20 20  ERSHIP  0x0002  
2b780 2f 2a 20 49 4e 20 6f 70 65 72 61 74 6f 72 20 75  /* IN operator u
2b790 73 65 64 20 66 6f 72 20 6d 65 6d 62 65 72 73 68  sed for membersh
2b7a0 69 70 20 74 65 73 74 20 2a 2f 0a 23 64 65 66 69  ip test */.#defi
2b7b0 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 4c 4f 4f 50  ne IN_INDEX_LOOP
2b7c0 20 20 20 20 20 20 20 20 30 78 30 30 30 34 20 20          0x0004  
2b7d0 2f 2a 20 49 4e 20 6f 70 65 72 61 74 6f 72 20 75  /* IN operator u
2b7e0 73 65 64 20 61 73 20 61 20 6c 6f 6f 70 20 2a 2f  sed as a loop */
2b7f0 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69 6e 64  .int sqlite3Find
2b800 49 6e 49 6e 64 65 78 28 50 61 72 73 65 20 2a 2c  InIndex(Parse *,
2b810 20 45 78 70 72 20 2a 2c 20 75 33 32 2c 20 69 6e   Expr *, u32, in
2b820 74 2a 29 3b 0a 0a 69 6e 74 20 73 71 6c 69 74 65  t*);..int sqlite
2b830 33 4a 6f 75 72 6e 61 6c 4f 70 65 6e 28 73 71 6c  3JournalOpen(sql
2b840 69 74 65 33 5f 76 66 73 20 2a 2c 20 63 6f 6e 73  ite3_vfs *, cons
2b850 74 20 63 68 61 72 20 2a 2c 20 73 71 6c 69 74 65  t char *, sqlite
2b860 33 5f 66 69 6c 65 20 2a 2c 20 69 6e 74 2c 20 69  3_file *, int, i
2b870 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  nt);.int sqlite3
2b880 4a 6f 75 72 6e 61 6c 53 69 7a 65 28 73 71 6c 69  JournalSize(sqli
2b890 74 65 33 5f 76 66 73 20 2a 29 3b 0a 23 69 66 64  te3_vfs *);.#ifd
2b8a0 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ef SQLITE_ENABLE
2b8b0 5f 41 54 4f 4d 49 43 5f 57 52 49 54 45 0a 20 20  _ATOMIC_WRITE.  
2b8c0 69 6e 74 20 73 71 6c 69 74 65 33 4a 6f 75 72 6e  int sqlite3Journ
2b8d0 61 6c 43 72 65 61 74 65 28 73 71 6c 69 74 65 33  alCreate(sqlite3
2b8e0 5f 66 69 6c 65 20 2a 29 3b 0a 23 65 6e 64 69 66  _file *);.#endif
2b8f0 0a 0a 69 6e 74 20 73 71 6c 69 74 65 33 4a 6f 75  ..int sqlite3Jou
2b900 72 6e 61 6c 49 73 49 6e 4d 65 6d 6f 72 79 28 73  rnalIsInMemory(s
2b910 71 6c 69 74 65 33 5f 66 69 6c 65 20 2a 70 29 3b  qlite3_file *p);
2b920 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 65 6d  .void sqlite3Mem
2b930 4a 6f 75 72 6e 61 6c 4f 70 65 6e 28 73 71 6c 69  JournalOpen(sqli
2b940 74 65 33 5f 66 69 6c 65 20 2a 29 3b 0a 0a 76 6f  te3_file *);..vo
2b950 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 53 65  id sqlite3ExprSe
2b960 74 48 65 69 67 68 74 41 6e 64 46 6c 61 67 73 28  tHeightAndFlags(
2b970 50 61 72 73 65 20 2a 70 50 61 72 73 65 2c 20 45  Parse *pParse, E
2b980 78 70 72 20 2a 70 29 3b 0a 23 69 66 20 53 51 4c  xpr *p);.#if SQL
2b990 49 54 45 5f 4d 41 58 5f 45 58 50 52 5f 44 45 50  ITE_MAX_EXPR_DEP
2b9a0 54 48 3e 30 0a 20 20 69 6e 74 20 73 71 6c 69 74  TH>0.  int sqlit
2b9b0 65 33 53 65 6c 65 63 74 45 78 70 72 48 65 69 67  e3SelectExprHeig
2b9c0 68 74 28 53 65 6c 65 63 74 20 2a 29 3b 0a 20 20  ht(Select *);.  
2b9d0 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 43  int sqlite3ExprC
2b9e0 68 65 63 6b 48 65 69 67 68 74 28 50 61 72 73 65  heckHeight(Parse
2b9f0 2a 2c 20 69 6e 74 29 3b 0a 23 65 6c 73 65 0a 20  *, int);.#else. 
2ba00 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33   #define sqlite3
2ba10 53 65 6c 65 63 74 45 78 70 72 48 65 69 67 68 74  SelectExprHeight
2ba20 28 78 29 20 30 0a 20 20 23 64 65 66 69 6e 65 20  (x) 0.  #define 
2ba30 73 71 6c 69 74 65 33 45 78 70 72 43 68 65 63 6b  sqlite3ExprCheck
2ba40 48 65 69 67 68 74 28 78 2c 79 29 0a 23 65 6e 64  Height(x,y).#end
2ba50 69 66 0a 0a 75 33 32 20 73 71 6c 69 74 65 33 47  if..u32 sqlite3G
2ba60 65 74 34 62 79 74 65 28 63 6f 6e 73 74 20 75 38  et4byte(const u8
2ba70 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
2ba80 50 75 74 34 62 79 74 65 28 75 38 2a 2c 20 75 33  Put4byte(u8*, u3
2ba90 32 29 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49  2);..#ifdef SQLI
2baa0 54 45 5f 45 4e 41 42 4c 45 5f 55 4e 4c 4f 43 4b  TE_ENABLE_UNLOCK
2bab0 5f 4e 4f 54 49 46 59 0a 20 20 76 6f 69 64 20 73  _NOTIFY.  void s
2bac0 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e  qlite3Connection
2bad0 42 6c 6f 63 6b 65 64 28 73 71 6c 69 74 65 33 20  Blocked(sqlite3 
2bae0 2a 2c 20 73 71 6c 69 74 65 33 20 2a 29 3b 0a 20  *, sqlite3 *);. 
2baf0 20 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6e   void sqlite3Con
2bb00 6e 65 63 74 69 6f 6e 55 6e 6c 6f 63 6b 65 64 28  nectionUnlocked(
2bb10 73 71 6c 69 74 65 33 20 2a 64 62 29 3b 0a 20 20  sqlite3 *db);.  
2bb20 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6e 6e  void sqlite3Conn
2bb30 65 63 74 69 6f 6e 43 6c 6f 73 65 64 28 73 71 6c  ectionClosed(sql
2bb40 69 74 65 33 20 2a 64 62 29 3b 0a 23 65 6c 73 65  ite3 *db);.#else
2bb50 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74  .  #define sqlit
2bb60 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 42 6c 6f 63  e3ConnectionBloc
2bb70 6b 65 64 28 78 2c 79 29 0a 20 20 23 64 65 66 69  ked(x,y).  #defi
2bb80 6e 65 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63  ne sqlite3Connec
2bb90 74 69 6f 6e 55 6e 6c 6f 63 6b 65 64 28 78 29 0a  tionUnlocked(x).
2bba0 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65    #define sqlite
2bbb0 33 43 6f 6e 6e 65 63 74 69 6f 6e 43 6c 6f 73 65  3ConnectionClose
2bbc0 64 28 78 29 0a 23 65 6e 64 69 66 0a 0a 23 69 66  d(x).#endif..#if
2bbd0 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47  def SQLITE_DEBUG
2bbe0 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 50  .  void sqlite3P
2bbf0 61 72 73 65 72 54 72 61 63 65 28 46 49 4c 45 2a  arserTrace(FILE*
2bc00 2c 20 63 68 61 72 20 2a 29 3b 0a 23 65 6e 64 69  , char *);.#endi
2bc10 66 0a 0a 2f 2a 0a 2a 2a 20 49 66 20 74 68 65 20  f../*.** If the 
2bc20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 20 49 4f  SQLITE_ENABLE IO
2bc30 54 52 41 43 45 20 65 78 69 73 74 73 20 74 68 65  TRACE exists the
2bc40 6e 20 74 68 65 20 67 6c 6f 62 61 6c 20 76 61 72  n the global var
2bc50 69 61 62 6c 65 0a 2a 2a 20 73 71 6c 69 74 65 33  iable.** sqlite3
2bc60 49 6f 54 72 61 63 65 20 69 73 20 61 20 70 6f 69  IoTrace is a poi
2bc70 6e 74 65 72 20 74 6f 20 61 20 70 72 69 6e 74 66  nter to a printf
2bc80 2d 6c 69 6b 65 20 72 6f 75 74 69 6e 65 20 75 73  -like routine us
2bc90 65 64 20 74 6f 0a 2a 2a 20 70 72 69 6e 74 20 49  ed to.** print I
2bca0 2f 4f 20 74 72 61 63 69 6e 67 20 6d 65 73 73 61  /O tracing messa
2bcb0 67 65 73 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53  ges..*/.#ifdef S
2bcc0 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 49 4f 54  QLITE_ENABLE_IOT
2bcd0 52 41 43 45 0a 23 20 64 65 66 69 6e 65 20 49 4f  RACE.# define IO
2bce0 54 52 41 43 45 28 41 29 20 20 69 66 28 20 73 71  TRACE(A)  if( sq
2bcf0 6c 69 74 65 33 49 6f 54 72 61 63 65 20 29 7b 20  lite3IoTrace ){ 
2bd00 73 71 6c 69 74 65 33 49 6f 54 72 61 63 65 20 41  sqlite3IoTrace A
2bd10 3b 20 7d 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  ; }.  void sqlit
2bd20 65 33 56 64 62 65 49 4f 54 72 61 63 65 53 71 6c  e3VdbeIOTraceSql
2bd30 28 56 64 62 65 2a 29 3b 0a 53 51 4c 49 54 45 5f  (Vdbe*);.SQLITE_
2bd40 41 50 49 20 53 51 4c 49 54 45 5f 45 58 54 45 52  API SQLITE_EXTER
2bd50 4e 20 76 6f 69 64 20 28 53 51 4c 49 54 45 5f 43  N void (SQLITE_C
2bd60 44 45 43 4c 20 2a 73 71 6c 69 74 65 33 49 6f 54  DECL *sqlite3IoT
2bd70 72 61 63 65 29 28 63 6f 6e 73 74 20 63 68 61 72  race)(const char
2bd80 2a 2c 2e 2e 2e 29 3b 0a 23 65 6c 73 65 0a 23 20  *,...);.#else.# 
2bd90 64 65 66 69 6e 65 20 49 4f 54 52 41 43 45 28 41  define IOTRACE(A
2bda0 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
2bdb0 65 33 56 64 62 65 49 4f 54 72 61 63 65 53 71 6c  e3VdbeIOTraceSql
2bdc0 28 58 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  (X).#endif../*.*
2bdd0 2a 20 54 68 65 73 65 20 72 6f 75 74 69 6e 65 73  * These routines
2bde0 20 61 72 65 20 61 76 61 69 6c 61 62 6c 65 20 66   are available f
2bdf0 6f 72 20 74 68 65 20 6d 65 6d 32 2e 63 20 64 65  or the mem2.c de
2be00 62 75 67 67 69 6e 67 20 6d 65 6d 6f 72 79 20 61  bugging memory a
2be10 6c 6c 6f 63 61 74 6f 72 0a 2a 2a 20 6f 6e 6c 79  llocator.** only
2be20 2e 20 20 54 68 65 79 20 61 72 65 20 75 73 65 64  .  They are used
2be30 20 74 6f 20 76 65 72 69 66 79 20 74 68 61 74 20   to verify that 
2be40 64 69 66 66 65 72 65 6e 74 20 22 74 79 70 65 73  different "types
2be50 22 20 6f 66 20 6d 65 6d 6f 72 79 0a 2a 2a 20 61  " of memory.** a
2be60 6c 6c 6f 63 61 74 69 6f 6e 73 20 61 72 65 20 70  llocations are p
2be70 72 6f 70 65 72 6c 79 20 74 72 61 63 6b 65 64 20  roperly tracked 
2be80 62 79 20 74 68 65 20 73 79 73 74 65 6d 2e 0a 2a  by the system..*
2be90 2a 0a 2a 2a 20 73 71 6c 69 74 65 33 4d 65 6d 64  *.** sqlite3Memd
2bea0 65 62 75 67 53 65 74 54 79 70 65 28 29 20 73 65  ebugSetType() se
2beb0 74 73 20 74 68 65 20 22 74 79 70 65 22 20 6f 66  ts the "type" of
2bec0 20 61 6e 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 74   an allocation t
2bed0 6f 20 6f 6e 65 20 6f 66 0a 2a 2a 20 74 68 65 20  o one of.** the 
2bee0 4d 45 4d 54 59 50 45 5f 2a 20 6d 61 63 72 6f 73  MEMTYPE_* macros
2bef0 20 64 65 66 69 6e 65 64 20 62 65 6c 6f 77 2e 20   defined below. 
2bf00 20 54 68 65 20 74 79 70 65 20 6d 75 73 74 20 62   The type must b
2bf10 65 20 61 20 62 69 74 6d 61 73 6b 20 77 69 74 68  e a bitmask with
2bf20 0a 2a 2a 20 61 20 73 69 6e 67 6c 65 20 62 69 74  .** a single bit
2bf30 20 73 65 74 2e 0a 2a 2a 0a 2a 2a 20 73 71 6c 69   set..**.** sqli
2bf40 74 65 33 4d 65 6d 64 65 62 75 67 48 61 73 54 79  te3MemdebugHasTy
2bf50 70 65 28 29 20 72 65 74 75 72 6e 73 20 74 72 75  pe() returns tru
2bf60 65 20 69 66 20 61 6e 79 20 6f 66 20 74 68 65 20  e if any of the 
2bf70 62 69 74 73 20 69 6e 20 69 74 73 20 73 65 63 6f  bits in its seco
2bf80 6e 64 0a 2a 2a 20 61 72 67 75 6d 65 6e 74 20 6d  nd.** argument m
2bf90 61 74 63 68 20 74 68 65 20 74 79 70 65 20 73 65  atch the type se
2bfa0 74 20 62 79 20 74 68 65 20 70 72 65 76 69 6f 75  t by the previou
2bfb0 73 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75  s sqlite3Memdebu
2bfc0 67 53 65 74 54 79 70 65 28 29 2e 0a 2a 2a 20 73  gSetType()..** s
2bfd0 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 48 61  qlite3MemdebugHa
2bfe0 73 54 79 70 65 28 29 20 69 73 20 69 6e 74 65 6e  sType() is inten
2bff0 64 65 64 20 66 6f 72 20 75 73 65 20 69 6e 73 69  ded for use insi
2c000 64 65 20 61 73 73 65 72 74 28 29 20 73 74 61 74  de assert() stat
2c010 65 6d 65 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20 73 71  ements..**.** sq
2c020 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 4e 6f 54  lite3MemdebugNoT
2c030 79 70 65 28 29 20 72 65 74 75 72 6e 73 20 74 72  ype() returns tr
2c040 75 65 20 69 66 20 6e 6f 6e 65 20 6f 66 20 74 68  ue if none of th
2c050 65 20 62 69 74 73 20 69 6e 20 69 74 73 20 73 65  e bits in its se
2c060 63 6f 6e 64 0a 2a 2a 20 61 72 67 75 6d 65 6e 74  cond.** argument
2c070 20 6d 61 74 63 68 20 74 68 65 20 74 79 70 65 20   match the type 
2c080 73 65 74 20 62 79 20 74 68 65 20 70 72 65 76 69  set by the previ
2c090 6f 75 73 20 73 71 6c 69 74 65 33 4d 65 6d 64 65  ous sqlite3Memde
2c0a0 62 75 67 53 65 74 54 79 70 65 28 29 2e 0a 2a 2a  bugSetType()..**
2c0b0 0a 2a 2a 20 50 65 72 68 61 70 73 20 74 68 65 20  .** Perhaps the 
2c0c0 6d 6f 73 74 20 69 6d 70 6f 72 74 61 6e 74 20 70  most important p
2c0d0 6f 69 6e 74 20 69 73 20 74 68 65 20 64 69 66 66  oint is the diff
2c0e0 65 72 65 6e 63 65 20 62 65 74 77 65 65 6e 20 4d  erence between M
2c0f0 45 4d 54 59 50 45 5f 48 45 41 50 0a 2a 2a 20 61  EMTYPE_HEAP.** a
2c100 6e 64 20 4d 45 4d 54 59 50 45 5f 4c 4f 4f 4b 41  nd MEMTYPE_LOOKA
2c110 53 49 44 45 2e 20 20 49 66 20 61 6e 20 61 6c 6c  SIDE.  If an all
2c120 6f 63 61 74 69 6f 6e 20 69 73 20 4d 45 4d 54 59  ocation is MEMTY
2c130 50 45 5f 4c 4f 4f 4b 41 53 49 44 45 2c 20 74 68  PE_LOOKASIDE, th
2c140 61 74 20 6d 65 61 6e 73 0a 2a 2a 20 69 74 20 6d  at means.** it m
2c150 69 67 68 74 20 68 61 76 65 20 62 65 65 6e 20 61  ight have been a
2c160 6c 6c 6f 63 61 74 65 64 20 62 79 20 6c 6f 6f 6b  llocated by look
2c170 61 73 69 64 65 2c 20 65 78 63 65 70 74 20 74 68  aside, except th
2c180 65 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 77 61 73  e allocation was
2c190 0a 2a 2a 20 74 6f 6f 20 6c 61 72 67 65 20 6f 72  .** too large or
2c1a0 20 6c 6f 6f 6b 61 73 69 64 65 20 77 61 73 20 61   lookaside was a
2c1b0 6c 72 65 61 64 79 20 66 75 6c 6c 2e 20 20 49 74  lready full.  It
2c1c0 20 69 73 20 69 6d 70 6f 72 74 61 6e 74 20 74 6f   is important to
2c1d0 20 76 65 72 69 66 79 0a 2a 2a 20 74 68 61 74 20   verify.** that 
2c1e0 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 74 68 61 74  allocations that
2c1f0 20 6d 69 67 68 74 20 68 61 76 65 20 62 65 65 6e   might have been
2c200 20 73 61 74 69 73 66 69 65 64 20 62 79 20 6c 6f   satisfied by lo
2c210 6f 6b 61 73 69 64 65 20 61 72 65 20 6e 6f 74 0a  okaside are not.
2c220 2a 2a 20 70 61 73 73 65 64 20 62 61 63 6b 20 74  ** passed back t
2c230 6f 20 6e 6f 6e 2d 6c 6f 6f 6b 61 73 69 64 65 20  o non-lookaside 
2c240 66 72 65 65 28 29 20 72 6f 75 74 69 6e 65 73 2e  free() routines.
2c250 20 20 41 73 73 65 72 74 73 20 73 75 63 68 20 61    Asserts such a
2c260 73 20 74 68 65 0a 2a 2a 20 65 78 61 6d 70 6c 65  s the.** example
2c270 20 61 62 6f 76 65 20 61 72 65 20 70 6c 61 63 65   above are place
2c280 64 20 6f 6e 20 74 68 65 20 6e 6f 6e 2d 6c 6f 6f  d on the non-loo
2c290 6b 61 73 69 64 65 20 66 72 65 65 28 29 20 72 6f  kaside free() ro
2c2a0 75 74 69 6e 65 73 20 74 6f 20 76 65 72 69 66 79  utines to verify
2c2b0 0a 2a 2a 20 74 68 69 73 20 63 6f 6e 73 74 72 61  .** this constra
2c2c0 69 6e 74 2e 0a 2a 2a 0a 2a 2a 20 41 6c 6c 20 6f  int..**.** All o
2c2d0 66 20 74 68 69 73 20 69 73 20 6e 6f 2d 6f 70 20  f this is no-op 
2c2e0 66 6f 72 20 61 20 70 72 6f 64 75 63 74 69 6f 6e  for a production
2c2f0 20 62 75 69 6c 64 2e 20 20 49 74 20 6f 6e 6c 79   build.  It only
2c300 20 63 6f 6d 65 73 20 69 6e 74 6f 0a 2a 2a 20 70   comes into.** p
2c310 6c 61 79 20 77 68 65 6e 20 74 68 65 20 53 51 4c  lay when the SQL
2c320 49 54 45 5f 4d 45 4d 44 45 42 55 47 20 63 6f 6d  ITE_MEMDEBUG com
2c330 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e  pile-time option
2c340 20 69 73 20 75 73 65 64 2e 0a 2a 2f 0a 23 69 66   is used..*/.#if
2c350 64 65 66 20 53 51 4c 49 54 45 5f 4d 45 4d 44 45  def SQLITE_MEMDE
2c360 42 55 47 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  BUG.  void sqlit
2c370 65 33 4d 65 6d 64 65 62 75 67 53 65 74 54 79 70  e3MemdebugSetTyp
2c380 65 28 76 6f 69 64 2a 2c 75 38 29 3b 0a 20 20 69  e(void*,u8);.  i
2c390 6e 74 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62  nt sqlite3Memdeb
2c3a0 75 67 48 61 73 54 79 70 65 28 76 6f 69 64 2a 2c  ugHasType(void*,
2c3b0 75 38 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74  u8);.  int sqlit
2c3c0 65 33 4d 65 6d 64 65 62 75 67 4e 6f 54 79 70 65  e3MemdebugNoType
2c3d0 28 76 6f 69 64 2a 2c 75 38 29 3b 0a 23 65 6c 73  (void*,u8);.#els
2c3e0 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  e.# define sqlit
2c3f0 65 33 4d 65 6d 64 65 62 75 67 53 65 74 54 79 70  e3MemdebugSetTyp
2c400 65 28 58 2c 59 29 20 20 2f 2a 20 6e 6f 2d 6f 70  e(X,Y)  /* no-op
2c410 20 2a 2f 0a 23 20 64 65 66 69 6e 65 20 73 71 6c   */.# define sql
2c420 69 74 65 33 4d 65 6d 64 65 62 75 67 48 61 73 54  ite3MemdebugHasT
2c430 79 70 65 28 58 2c 59 29 20 20 31 0a 23 20 64 65  ype(X,Y)  1.# de
2c440 66 69 6e 65 20 73 71 6c 69 74 65 33 4d 65 6d 64  fine sqlite3Memd
2c450 65 62 75 67 4e 6f 54 79 70 65 28 58 2c 59 29 20  ebugNoType(X,Y) 
2c460 20 20 31 0a 23 65 6e 64 69 66 0a 23 64 65 66 69    1.#endif.#defi
2c470 6e 65 20 4d 45 4d 54 59 50 45 5f 48 45 41 50 20  ne MEMTYPE_HEAP 
2c480 20 20 20 20 20 20 30 78 30 31 20 20 2f 2a 20 47        0x01  /* G
2c490 65 6e 65 72 61 6c 20 68 65 61 70 20 61 6c 6c 6f  eneral heap allo
2c4a0 63 61 74 69 6f 6e 73 20 2a 2f 0a 23 64 65 66 69  cations */.#defi
2c4b0 6e 65 20 4d 45 4d 54 59 50 45 5f 4c 4f 4f 4b 41  ne MEMTYPE_LOOKA
2c4c0 53 49 44 45 20 20 30 78 30 32 20 20 2f 2a 20 48  SIDE  0x02  /* H
2c4d0 65 61 70 20 74 68 61 74 20 6d 69 67 68 74 20 68  eap that might h
2c4e0 61 76 65 20 62 65 65 6e 20 6c 6f 6f 6b 61 73 69  ave been lookasi
2c4f0 64 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 45  de */.#define ME
2c500 4d 54 59 50 45 5f 53 43 52 41 54 43 48 20 20 20  MTYPE_SCRATCH   
2c510 20 30 78 30 34 20 20 2f 2a 20 53 63 72 61 74 63   0x04  /* Scratc
2c520 68 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 2a 2f  h allocations */
2c530 0a 23 64 65 66 69 6e 65 20 4d 45 4d 54 59 50 45  .#define MEMTYPE
2c540 5f 50 43 41 43 48 45 20 20 20 20 20 30 78 30 38  _PCACHE     0x08
2c550 20 20 2f 2a 20 50 61 67 65 20 63 61 63 68 65 20    /* Page cache 
2c560 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 2a 2f 0a 0a  allocations */..
2c570 2f 2a 0a 2a 2a 20 54 68 72 65 61 64 69 6e 67 20  /*.** Threading 
2c580 69 6e 74 65 72 66 61 63 65 0a 2a 2f 0a 23 69 66  interface.*/.#if
2c590 20 53 51 4c 49 54 45 5f 4d 41 58 5f 57 4f 52 4b   SQLITE_MAX_WORK
2c5a0 45 52 5f 54 48 52 45 41 44 53 3e 30 0a 69 6e 74  ER_THREADS>0.int
2c5b0 20 73 71 6c 69 74 65 33 54 68 72 65 61 64 43 72   sqlite3ThreadCr
2c5c0 65 61 74 65 28 53 51 4c 69 74 65 54 68 72 65 61  eate(SQLiteThrea
2c5d0 64 2a 2a 2c 76 6f 69 64 2a 28 2a 29 28 76 6f 69  d**,void*(*)(voi
2c5e0 64 2a 29 2c 76 6f 69 64 2a 29 3b 0a 69 6e 74 20  d*),void*);.int 
2c5f0 73 71 6c 69 74 65 33 54 68 72 65 61 64 4a 6f 69  sqlite3ThreadJoi
2c600 6e 28 53 51 4c 69 74 65 54 68 72 65 61 64 2a 2c  n(SQLiteThread*,
2c610 20 76 6f 69 64 2a 2a 29 3b 0a 23 65 6e 64 69 66   void**);.#endif
2c620 0a 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51  ..#if defined(SQ
2c630 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 44 42 53 54  LITE_ENABLE_DBST
2c640 41 54 5f 56 54 41 42 29 20 7c 7c 20 64 65 66 69  AT_VTAB) || defi
2c650 6e 65 64 28 53 51 4c 49 54 45 5f 54 45 53 54 29  ned(SQLITE_TEST)
2c660 0a 69 6e 74 20 73 71 6c 69 74 65 33 44 62 73 74  .int sqlite3Dbst
2c670 61 74 52 65 67 69 73 74 65 72 28 73 71 6c 69 74  atRegister(sqlit
2c680 65 33 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 65  e3*);.#endif..#e
2c690 6e 64 69 66 20 2f 2a 20 5f 53 51 4c 49 54 45 49  ndif /* _SQLITEI
2c6a0 4e 54 5f 48 5f 20 2a 2f 0a                       NT_H_ */.