/ Hex Artifact Content
Login

Artifact 95836c91a6ce6606d157ff508e23a0c2d6ac7ac499d9495097a9e668f9b802df:


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 53 51 4c 49 54 45 49 4e 54 5f 48 0a 23  ef SQLITEINT_H.#
01c0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 49 4e 54  define SQLITEINT
01d0: 5f 48 0a 0a 2f 2a 20 53 70 65 63 69 61 6c 20 43  _H../* Special C
01e0: 6f 6d 6d 65 6e 74 73 3a 0a 2a 2a 0a 2a 2a 20 53  omments:.**.** S
01f0: 6f 6d 65 20 63 6f 6d 6d 65 6e 74 73 20 68 61 76  ome comments hav
0200: 65 20 73 70 65 63 69 61 6c 20 6d 65 61 6e 69 6e  e special meanin
0210: 67 20 74 6f 20 74 68 65 20 74 6f 6f 6c 73 20 74  g to the tools t
0220: 68 61 74 20 6d 65 61 73 75 72 65 20 74 65 73 74  hat measure test
0230: 0a 2a 2a 20 63 6f 76 65 72 61 67 65 3a 0a 2a 2a  .** coverage:.**
0240: 0a 2a 2a 20 20 20 20 4e 4f 5f 54 45 53 54 20 20  .**    NO_TEST  
0250: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0260: 20 20 20 2d 20 54 68 65 20 62 72 61 6e 63 68 65     - The branche
0270: 73 20 6f 6e 20 74 68 69 73 20 6c 69 6e 65 20 61  s on this line a
0280: 72 65 20 6e 6f 74 0a 2a 2a 20 20 20 20 20 20 20  re 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 6d 65 61 73 75             measu
02b0: 72 65 64 20 62 79 20 62 72 61 6e 63 68 20 63 6f  red by branch co
02c0: 76 65 72 61 67 65 2e 20 20 54 68 69 73 20 69 73  verage.  This is
02d0: 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
02e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
02f0: 20 20 20 20 20 75 73 65 64 20 6f 6e 20 6c 69 6e       used on lin
0300: 65 73 20 6f 66 20 63 6f 64 65 20 74 68 61 74 20  es of code that 
0310: 61 63 74 75 61 6c 6c 79 0a 2a 2a 20 20 20 20 20  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 69 6d 70               imp
0340: 6c 65 6d 65 6e 74 20 70 61 72 74 73 20 6f 66 20  lement parts of 
0350: 63 6f 76 65 72 61 67 65 20 74 65 73 74 69 6e 67  coverage testing
0360: 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 4f 50 54 49 4d  ..**.**    OPTIM
0370: 49 5a 41 54 49 4f 4e 2d 49 46 2d 54 52 55 45 20  IZATION-IF-TRUE 
0380: 20 20 20 20 20 20 20 2d 20 54 68 69 73 20 62 72         - This br
0390: 61 6e 63 68 20 69 73 20 61 6c 6c 6f 77 65 64 20  anch is allowed 
03a0: 74 6f 20 61 6c 77 61 79 20 62 65 20 66 61 6c 73  to alway be fals
03b0: 65 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  e.**            
03c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
03d0: 20 20 20 20 20 20 61 6e 64 20 74 68 65 20 63 6f        and the co
03e0: 72 72 65 63 74 20 61 6e 73 77 65 72 20 69 73 20  rrect answer is 
03f0: 73 74 69 6c 6c 20 6f 62 74 61 69 6e 65 64 2c 0a  still obtained,.
0400: 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
0410: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0420: 20 20 20 20 74 68 6f 75 67 68 20 70 65 72 68 61      though perha
0430: 70 73 20 6d 6f 72 65 20 73 6c 6f 77 6c 79 2e 0a  ps more slowly..
0440: 2a 2a 0a 2a 2a 20 20 20 20 4f 50 54 49 4d 49 5a  **.**    OPTIMIZ
0450: 41 54 49 4f 4e 2d 49 46 2d 46 41 4c 53 45 20 20  ATION-IF-FALSE  
0460: 20 20 20 20 20 2d 20 54 68 69 73 20 62 72 61 6e       - This bran
0470: 63 68 20 69 73 20 61 6c 6c 6f 77 65 64 20 74 6f  ch is allowed to
0480: 20 61 6c 77 61 79 20 62 65 20 74 72 75 65 0a 2a   alway be true.*
0490: 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
04a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
04b0: 20 20 20 61 6e 64 20 74 68 65 20 63 6f 72 72 65     and the corre
04c0: 63 74 20 61 6e 73 77 65 72 20 69 73 20 73 74 69  ct answer is sti
04d0: 6c 6c 20 6f 62 74 61 69 6e 65 64 2c 0a 2a 2a 20  ll obtained,.** 
04e0: 20 20 20 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 74 68 6f 75 67 68 20 70 65 72 68 61 70 73 20   though perhaps 
0510: 6d 6f 72 65 20 73 6c 6f 77 6c 79 2e 0a 2a 2a 0a  more slowly..**.
0520: 2a 2a 20 20 20 20 50 52 45 56 45 4e 54 53 2d 48  **    PREVENTS-H
0530: 41 52 4d 4c 45 53 53 2d 4f 56 45 52 52 45 41 44  ARMLESS-OVERREAD
0540: 20 20 2d 20 54 68 69 73 20 62 72 61 6e 63 68 20    - This branch 
0550: 70 72 65 76 65 6e 74 73 20 61 20 62 75 66 66 65  prevents a buffe
0560: 72 20 6f 76 65 72 72 65 61 64 0a 2a 2a 20 20 20  r overread.**   
0570: 20 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 74                 t
0590: 68 61 74 20 77 6f 75 6c 64 20 62 65 20 68 61 72  hat would be har
05a0: 6d 6c 65 73 73 20 61 6e 64 20 75 6e 64 65 74 65  mless and undete
05b0: 63 74 61 62 6c 65 0a 2a 2a 20 20 20 20 20 20 20  ctable.**       
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 69 66 20 69 74             if it
05e0: 20 64 69 64 20 6f 63 63 75 72 2e 20 20 0a 2a 2a   did occur.  .**
05f0: 0a 2a 2a 20 49 6e 20 61 6c 6c 20 63 61 73 65 73  .** In all cases
0600: 2c 20 74 68 65 20 73 70 65 63 69 61 6c 20 63 6f  , the special co
0610: 6d 6d 65 6e 74 20 6d 75 73 74 20 62 65 20 65 6e  mment must be en
0620: 63 6c 6f 73 65 64 20 69 6e 20 74 68 65 20 75 73  closed in the us
0630: 75 61 6c 0a 2a 2a 20 73 6c 61 73 68 2d 61 73 74  ual.** slash-ast
0640: 65 72 69 73 6b 2e 2e 2e 61 73 74 65 72 69 73 6b  erisk...asterisk
0650: 2d 73 6c 61 73 68 20 63 6f 6d 6d 65 6e 74 20 6d  -slash comment m
0660: 61 72 6b 73 2c 20 77 69 74 68 20 6e 6f 20 73 70  arks, with no sp
0670: 61 63 65 73 20 62 65 74 77 65 65 6e 20 74 68 65  aces between the
0680: 20 0a 2a 2a 20 61 73 74 65 72 69 73 6b 73 20 61   .** asterisks a
0690: 6e 64 20 74 68 65 20 63 6f 6d 6d 65 6e 74 20 74  nd the comment t
06a0: 65 78 74 2e 0a 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 4d  ext..*/../*.** M
06b0: 61 6b 65 20 73 75 72 65 20 74 68 65 20 54 63 6c  ake sure the Tcl
06c0: 20 63 61 6c 6c 69 6e 67 20 63 6f 6e 76 65 6e 74   calling convent
06d0: 69 6f 6e 20 6d 61 63 72 6f 20 69 73 20 64 65 66  ion macro is def
06e0: 69 6e 65 64 2e 20 20 54 68 69 73 20 6d 61 63 72  ined.  This macr
06f0: 6f 20 69 73 0a 2a 2a 20 6f 6e 6c 79 20 75 73 65  o is.** only use
0700: 64 20 62 79 20 74 65 73 74 20 63 6f 64 65 20 61  d by test code a
0710: 6e 64 20 54 63 6c 20 69 6e 74 65 67 72 61 74 69  nd Tcl integrati
0720: 6f 6e 20 63 6f 64 65 2e 0a 2a 2f 0a 23 69 66 6e  on code..*/.#ifn
0730: 64 65 66 20 53 51 4c 49 54 45 5f 54 43 4c 41 50  def SQLITE_TCLAP
0740: 49 0a 23 20 20 64 65 66 69 6e 65 20 53 51 4c 49  I.#  define SQLI
0750: 54 45 5f 54 43 4c 41 50 49 0a 23 65 6e 64 69 66  TE_TCLAPI.#endif
0760: 0a 0a 2f 2a 0a 2a 2a 20 49 6e 63 6c 75 64 65 20  ../*.** Include 
0770: 74 68 65 20 68 65 61 64 65 72 20 66 69 6c 65 20  the header file 
0780: 75 73 65 64 20 74 6f 20 63 75 73 74 6f 6d 69 7a  used to customiz
0790: 65 20 74 68 65 20 63 6f 6d 70 69 6c 65 72 20 6f  e the compiler o
07a0: 70 74 69 6f 6e 73 20 66 6f 72 20 4d 53 56 43 2e  ptions for MSVC.
07b0: 0a 2a 2a 20 54 68 69 73 20 73 68 6f 75 6c 64 20  .** This should 
07c0: 62 65 20 64 6f 6e 65 20 66 69 72 73 74 20 73 6f  be done first so
07d0: 20 74 68 61 74 20 69 74 20 63 61 6e 20 73 75 63   that it can suc
07e0: 63 65 73 73 66 75 6c 6c 79 20 70 72 65 76 65 6e  cessfully preven
07f0: 74 20 73 70 75 72 69 6f 75 73 0a 2a 2a 20 63 6f  t spurious.** co
0800: 6d 70 69 6c 65 72 20 77 61 72 6e 69 6e 67 73 20  mpiler warnings 
0810: 64 75 65 20 74 6f 20 73 75 62 73 65 71 75 65 6e  due to subsequen
0820: 74 20 63 6f 6e 74 65 6e 74 20 69 6e 20 74 68 69  t content in thi
0830: 73 20 66 69 6c 65 20 61 6e 64 20 6f 74 68 65 72  s file and other
0840: 20 66 69 6c 65 73 0a 2a 2a 20 74 68 61 74 20 61   files.** that a
0850: 72 65 20 69 6e 63 6c 75 64 65 64 20 62 79 20 74  re included by t
0860: 68 69 73 20 66 69 6c 65 2e 0a 2a 2f 0a 23 69 6e  his file..*/.#in
0870: 63 6c 75 64 65 20 22 6d 73 76 63 2e 68 22 0a 0a  clude "msvc.h"..
0880: 2f 2a 0a 2a 2a 20 53 70 65 63 69 61 6c 20 73 65  /*.** Special se
0890: 74 75 70 20 66 6f 72 20 56 78 57 6f 72 6b 73 0a  tup for VxWorks.
08a0: 2a 2f 0a 23 69 6e 63 6c 75 64 65 20 22 76 78 77  */.#include "vxw
08b0: 6f 72 6b 73 2e 68 22 0a 0a 2f 2a 0a 2a 2a 20 54  orks.h"../*.** T
08c0: 68 65 73 65 20 23 64 65 66 69 6e 65 73 20 73 68  hese #defines sh
08d0: 6f 75 6c 64 20 65 6e 61 62 6c 65 20 3e 32 47 42  ould enable >2GB
08e0: 20 66 69 6c 65 20 73 75 70 70 6f 72 74 20 6f 6e   file support on
08f0: 20 50 4f 53 49 58 20 69 66 20 74 68 65 0a 2a 2a   POSIX if the.**
0900: 20 75 6e 64 65 72 6c 79 69 6e 67 20 6f 70 65 72   underlying oper
0910: 61 74 69 6e 67 20 73 79 73 74 65 6d 20 73 75 70  ating system sup
0920: 70 6f 72 74 73 20 69 74 2e 20 20 49 66 20 74 68  ports it.  If th
0930: 65 20 4f 53 20 6c 61 63 6b 73 0a 2a 2a 20 6c 61  e OS lacks.** la
0940: 72 67 65 20 66 69 6c 65 20 73 75 70 70 6f 72 74  rge file support
0950: 2c 20 6f 72 20 69 66 20 74 68 65 20 4f 53 20 69  , or if the OS i
0960: 73 20 77 69 6e 64 6f 77 73 2c 20 74 68 65 73 65  s windows, these
0970: 20 73 68 6f 75 6c 64 20 62 65 20 6e 6f 2d 6f 70   should be no-op
0980: 73 2e 0a 2a 2a 0a 2a 2a 20 54 69 63 6b 65 74 20  s..**.** Ticket 
0990: 23 32 37 33 39 3a 20 20 54 68 65 20 5f 4c 41 52  #2739:  The _LAR
09a0: 47 45 46 49 4c 45 5f 53 4f 55 52 43 45 20 6d 61  GEFILE_SOURCE ma
09b0: 63 72 6f 20 6d 75 73 74 20 61 70 70 65 61 72 20  cro must appear 
09c0: 62 65 66 6f 72 65 20 61 6e 79 0a 2a 2a 20 73 79  before any.** sy
09d0: 73 74 65 6d 20 23 69 6e 63 6c 75 64 65 73 2e 20  stem #includes. 
09e0: 20 48 65 6e 63 65 2c 20 74 68 69 73 20 62 6c 6f   Hence, this blo
09f0: 63 6b 20 6f 66 20 63 6f 64 65 20 6d 75 73 74 20  ck of code must 
0a00: 62 65 20 74 68 65 20 76 65 72 79 20 66 69 72 73  be the very firs
0a10: 74 0a 2a 2a 20 63 6f 64 65 20 69 6e 20 61 6c 6c  t.** code in all
0a20: 20 73 6f 75 72 63 65 20 66 69 6c 65 73 2e 0a 2a   source files..*
0a30: 2a 0a 2a 2a 20 4c 61 72 67 65 20 66 69 6c 65 20  *.** Large file 
0a40: 73 75 70 70 6f 72 74 20 63 61 6e 20 62 65 20 64  support can be d
0a50: 69 73 61 62 6c 65 64 20 75 73 69 6e 67 20 74 68  isabled using th
0a60: 65 20 2d 44 53 51 4c 49 54 45 5f 44 49 53 41 42  e -DSQLITE_DISAB
0a70: 4c 45 5f 4c 46 53 20 73 77 69 74 63 68 0a 2a 2a  LE_LFS switch.**
0a80: 20 6f 6e 20 74 68 65 20 63 6f 6d 70 69 6c 65 72   on the compiler
0a90: 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 2e 20 20   command line.  
0aa0: 54 68 69 73 20 69 73 20 6e 65 63 65 73 73 61 72  This is necessar
0ab0: 79 20 69 66 20 79 6f 75 20 61 72 65 20 63 6f 6d  y if you are com
0ac0: 70 69 6c 69 6e 67 0a 2a 2a 20 6f 6e 20 61 20 72  piling.** on a r
0ad0: 65 63 65 6e 74 20 6d 61 63 68 69 6e 65 20 28 65  ecent machine (e
0ae0: 78 3a 20 52 65 64 20 48 61 74 20 37 2e 32 29 20  x: Red Hat 7.2) 
0af0: 62 75 74 20 79 6f 75 20 77 61 6e 74 20 79 6f 75  but you want you
0b00: 72 20 63 6f 64 65 20 74 6f 20 77 6f 72 6b 0a 2a  r code to work.*
0b10: 2a 20 6f 6e 20 61 6e 20 6f 6c 64 65 72 20 6d 61  * on an older ma
0b20: 63 68 69 6e 65 20 28 65 78 3a 20 52 65 64 20 48  chine (ex: Red H
0b30: 61 74 20 36 2e 30 29 2e 20 20 49 66 20 79 6f 75  at 6.0).  If you
0b40: 20 63 6f 6d 70 69 6c 65 20 6f 6e 20 52 65 64 20   compile on Red 
0b50: 48 61 74 20 37 2e 32 0a 2a 2a 20 77 69 74 68 6f  Hat 7.2.** witho
0b60: 75 74 20 74 68 69 73 20 6f 70 74 69 6f 6e 2c 20  ut this option, 
0b70: 4c 46 53 20 69 73 20 65 6e 61 62 6c 65 2e 20 20  LFS is enable.  
0b80: 42 75 74 20 4c 46 53 20 64 6f 65 73 20 6e 6f 74  But LFS does not
0b90: 20 65 78 69 73 74 20 69 6e 20 74 68 65 20 6b 65   exist in the ke
0ba0: 72 6e 65 6c 0a 2a 2a 20 69 6e 20 52 65 64 20 48  rnel.** in Red H
0bb0: 61 74 20 36 2e 30 2c 20 73 6f 20 74 68 65 20 63  at 6.0, so the c
0bc0: 6f 64 65 20 77 6f 6e 27 74 20 77 6f 72 6b 2e 20  ode won't work. 
0bd0: 20 48 65 6e 63 65 2c 20 66 6f 72 20 6d 61 78 69   Hence, for maxi
0be0: 6d 75 6d 20 62 69 6e 61 72 79 0a 2a 2a 20 70 6f  mum binary.** po
0bf0: 72 74 61 62 69 6c 69 74 79 20 79 6f 75 20 73 68  rtability you sh
0c00: 6f 75 6c 64 20 6f 6d 69 74 20 4c 46 53 2e 0a 2a  ould omit LFS..*
0c10: 2a 0a 2a 2a 20 54 68 65 20 70 72 65 76 69 6f 75  *.** The previou
0c20: 73 20 70 61 72 61 67 72 61 70 68 20 77 61 73 20  s paragraph was 
0c30: 77 72 69 74 74 65 6e 20 69 6e 20 32 30 30 35 2e  written in 2005.
0c40: 20 20 28 54 68 69 73 20 70 61 72 61 67 72 61 70    (This paragrap
0c50: 68 20 69 73 20 77 72 69 74 74 65 6e 0a 2a 2a 20  h is written.** 
0c60: 6f 6e 20 32 30 30 38 2d 31 31 2d 32 38 2e 29 20  on 2008-11-28.) 
0c70: 54 68 65 73 65 20 64 61 79 73 2c 20 61 6c 6c 20  These days, all 
0c80: 4c 69 6e 75 78 20 6b 65 72 6e 65 6c 73 20 73 75  Linux kernels su
0c90: 70 70 6f 72 74 20 6c 61 72 67 65 20 66 69 6c 65  pport large file
0ca0: 73 2c 20 73 6f 0a 2a 2a 20 79 6f 75 20 73 68 6f  s, so.** you sho
0cb0: 75 6c 64 20 70 72 6f 62 61 62 6c 79 20 6c 65 61  uld probably lea
0cc0: 76 65 20 4c 46 53 20 65 6e 61 62 6c 65 64 2e 20  ve LFS enabled. 
0cd0: 20 42 75 74 20 73 6f 6d 65 20 65 6d 62 65 64 64   But some embedd
0ce0: 65 64 20 70 6c 61 74 66 6f 72 6d 73 20 6d 69 67  ed platforms mig
0cf0: 68 74 0a 2a 2a 20 6c 61 63 6b 20 4c 46 53 20 69  ht.** lack LFS i
0d00: 6e 20 77 68 69 63 68 20 63 61 73 65 20 74 68 65  n which case the
0d10: 20 53 51 4c 49 54 45 5f 44 49 53 41 42 4c 45 5f   SQLITE_DISABLE_
0d20: 4c 46 53 20 6d 61 63 72 6f 20 6d 69 67 68 74 20  LFS macro might 
0d30: 73 74 69 6c 6c 20 62 65 20 75 73 65 66 75 6c 2e  still be useful.
0d40: 0a 2a 2a 0a 2a 2a 20 53 69 6d 69 6c 61 72 20 69  .**.** Similar i
0d50: 73 20 74 72 75 65 20 66 6f 72 20 4d 61 63 20 4f  s true for Mac O
0d60: 53 20 58 2e 20 20 4c 46 53 20 69 73 20 6f 6e 6c  S X.  LFS is onl
0d70: 79 20 73 75 70 70 6f 72 74 65 64 20 6f 6e 20 4d  y supported on M
0d80: 61 63 20 4f 53 20 58 20 39 20 61 6e 64 20 6c 61  ac OS X 9 and la
0d90: 74 65 72 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20  ter..*/.#ifndef 
0da0: 53 51 4c 49 54 45 5f 44 49 53 41 42 4c 45 5f 4c  SQLITE_DISABLE_L
0db0: 46 53 0a 23 20 64 65 66 69 6e 65 20 5f 4c 41 52  FS.# define _LAR
0dc0: 47 45 5f 46 49 4c 45 20 20 20 20 20 20 20 31 0a  GE_FILE       1.
0dd0: 23 20 69 66 6e 64 65 66 20 5f 46 49 4c 45 5f 4f  # ifndef _FILE_O
0de0: 46 46 53 45 54 5f 42 49 54 53 0a 23 20 20 20 64  FFSET_BITS.#   d
0df0: 65 66 69 6e 65 20 5f 46 49 4c 45 5f 4f 46 46 53  efine _FILE_OFFS
0e00: 45 54 5f 42 49 54 53 20 36 34 0a 23 20 65 6e 64  ET_BITS 64.# end
0e10: 69 66 0a 23 20 64 65 66 69 6e 65 20 5f 4c 41 52  if.# define _LAR
0e20: 47 45 46 49 4c 45 5f 53 4f 55 52 43 45 20 31 0a  GEFILE_SOURCE 1.
0e30: 23 65 6e 64 69 66 0a 0a 2f 2a 20 54 68 65 20 47  #endif../* The G
0e40: 43 43 5f 56 45 52 53 49 4f 4e 20 61 6e 64 20 4d  CC_VERSION and M
0e50: 53 56 43 5f 56 45 52 53 49 4f 4e 20 6d 61 63 72  SVC_VERSION macr
0e60: 6f 73 20 61 72 65 20 75 73 65 64 20 74 6f 0a 2a  os are used to.*
0e70: 2a 20 63 6f 6e 64 69 74 69 6f 6e 61 6c 6c 79 20  * conditionally 
0e80: 69 6e 63 6c 75 64 65 20 6f 70 74 69 6d 69 7a 61  include optimiza
0e90: 74 69 6f 6e 73 20 66 6f 72 20 65 61 63 68 20 6f  tions for each o
0ea0: 66 20 74 68 65 73 65 20 63 6f 6d 70 69 6c 65 72  f these compiler
0eb0: 73 2e 20 20 41 0a 2a 2a 20 76 61 6c 75 65 20 6f  s.  A.** value o
0ec0: 66 20 30 20 6d 65 61 6e 73 20 74 68 61 74 20 63  f 0 means that c
0ed0: 6f 6d 70 69 6c 65 72 20 69 73 20 6e 6f 74 20 62  ompiler is not b
0ee0: 65 69 6e 67 20 75 73 65 64 2e 20 20 54 68 65 0a  eing used.  The.
0ef0: 2a 2a 20 53 51 4c 49 54 45 5f 44 49 53 41 42 4c  ** SQLITE_DISABL
0f00: 45 5f 49 4e 54 52 49 4e 53 49 43 20 6d 61 63 72  E_INTRINSIC macr
0f10: 6f 20 6d 65 61 6e 73 20 64 6f 20 6e 6f 74 20 75  o means do not u
0f20: 73 65 20 61 6e 79 20 63 6f 6d 70 69 6c 65 72 2d  se any compiler-
0f30: 73 70 65 63 69 66 69 63 0a 2a 2a 20 6f 70 74 69  specific.** opti
0f40: 6d 69 7a 61 74 69 6f 6e 73 2c 20 61 6e 64 20 68  mizations, and h
0f50: 65 6e 63 65 20 73 65 74 20 61 6c 6c 20 63 6f 6d  ence set all com
0f60: 70 69 6c 65 72 20 6d 61 63 72 6f 73 20 74 6f 20  piler macros to 
0f70: 30 0a 2a 2a 0a 2a 2a 20 54 68 65 72 65 20 77 61  0.**.** There wa
0f80: 73 20 6f 6e 63 65 20 61 6c 73 6f 20 61 20 43 4c  s once also a CL
0f90: 41 4e 47 5f 56 45 52 53 49 4f 4e 20 6d 61 63 72  ANG_VERSION macr
0fa0: 6f 2e 20 20 48 6f 77 65 76 65 72 2c 20 77 65 20  o.  However, we 
0fb0: 6c 65 61 72 6e 20 74 68 61 74 20 74 68 65 0a 2a  learn that the.*
0fc0: 2a 20 76 65 72 73 69 6f 6e 20 6e 75 6d 62 65 72  * version number
0fd0: 73 20 69 6e 20 63 6c 61 6e 67 20 61 72 65 20 66  s in clang are f
0fe0: 6f 72 20 22 6d 61 72 6b 65 74 69 6e 67 22 20 6f  or "marketing" o
0ff0: 6e 6c 79 20 61 6e 64 20 61 72 65 20 69 6e 63 6f  nly and are inco
1000: 6e 73 69 73 74 65 6e 74 0a 2a 2a 20 61 6e 64 20  nsistent.** and 
1010: 75 6e 72 65 6c 69 61 62 6c 65 2e 20 20 46 6f 72  unreliable.  For
1020: 74 75 6e 61 74 65 6c 79 2c 20 61 6c 6c 20 76 65  tunately, all ve
1030: 72 73 69 6f 6e 73 20 6f 66 20 63 6c 61 6e 67 20  rsions of clang 
1040: 61 6c 73 6f 20 72 65 63 6f 67 6e 69 7a 65 20 74  also recognize t
1050: 68 65 0a 2a 2a 20 67 63 63 20 76 65 72 73 69 6f  he.** gcc versio
1060: 6e 20 6e 75 6d 62 65 72 73 20 61 6e 64 20 68 61  n numbers and ha
1070: 76 65 20 72 65 61 73 6f 6e 61 62 6c 65 20 73 65  ve reasonable se
1080: 74 74 69 6e 67 73 20 66 6f 72 20 67 63 63 20 76  ttings for gcc v
1090: 65 72 73 69 6f 6e 20 6e 75 6d 62 65 72 73 2c 0a  ersion numbers,.
10a0: 2a 2a 20 73 6f 20 74 68 65 20 47 43 43 5f 56 45  ** so the GCC_VE
10b0: 52 53 49 4f 4e 20 6d 61 63 72 6f 20 77 69 6c 6c  RSION macro will
10c0: 20 62 65 20 73 65 74 20 74 6f 20 61 20 63 6f 72   be set to a cor
10d0: 72 65 63 74 20 6e 6f 6e 2d 7a 65 72 6f 20 76 61  rect non-zero va
10e0: 6c 75 65 20 65 76 65 6e 0a 2a 2a 20 77 68 65 6e  lue even.** when
10f0: 20 63 6f 6d 70 69 6c 69 6e 67 20 77 69 74 68 20   compiling with 
1100: 63 6c 61 6e 67 2e 0a 2a 2f 0a 23 69 66 20 64 65  clang..*/.#if de
1110: 66 69 6e 65 64 28 5f 5f 47 4e 55 43 5f 5f 29 20  fined(__GNUC__) 
1120: 26 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  && !defined(SQLI
1130: 54 45 5f 44 49 53 41 42 4c 45 5f 49 4e 54 52 49  TE_DISABLE_INTRI
1140: 4e 53 49 43 29 0a 23 20 64 65 66 69 6e 65 20 47  NSIC).# define G
1150: 43 43 5f 56 45 52 53 49 4f 4e 20 28 5f 5f 47 4e  CC_VERSION (__GN
1160: 55 43 5f 5f 2a 31 30 30 30 30 30 30 2b 5f 5f 47  UC__*1000000+__G
1170: 4e 55 43 5f 4d 49 4e 4f 52 5f 5f 2a 31 30 30 30  NUC_MINOR__*1000
1180: 2b 5f 5f 47 4e 55 43 5f 50 41 54 43 48 4c 45 56  +__GNUC_PATCHLEV
1190: 45 4c 5f 5f 29 0a 23 65 6c 73 65 0a 23 20 64 65  EL__).#else.# de
11a0: 66 69 6e 65 20 47 43 43 5f 56 45 52 53 49 4f 4e  fine GCC_VERSION
11b0: 20 30 0a 23 65 6e 64 69 66 0a 23 69 66 20 64 65   0.#endif.#if de
11c0: 66 69 6e 65 64 28 5f 4d 53 43 5f 56 45 52 29 20  fined(_MSC_VER) 
11d0: 26 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  && !defined(SQLI
11e0: 54 45 5f 44 49 53 41 42 4c 45 5f 49 4e 54 52 49  TE_DISABLE_INTRI
11f0: 4e 53 49 43 29 0a 23 20 64 65 66 69 6e 65 20 4d  NSIC).# define M
1200: 53 56 43 5f 56 45 52 53 49 4f 4e 20 5f 4d 53 43  SVC_VERSION _MSC
1210: 5f 56 45 52 0a 23 65 6c 73 65 0a 23 20 64 65 66  _VER.#else.# def
1220: 69 6e 65 20 4d 53 56 43 5f 56 45 52 53 49 4f 4e  ine MSVC_VERSION
1230: 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 4e 65   0.#endif../* Ne
1240: 65 64 65 64 20 66 6f 72 20 76 61 72 69 6f 75 73  eded for various
1250: 20 64 65 66 69 6e 69 74 69 6f 6e 73 2e 2e 2e 20   definitions... 
1260: 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28 5f  */.#if defined(_
1270: 5f 47 4e 55 43 5f 5f 29 20 26 26 20 21 64 65 66  _GNUC__) && !def
1280: 69 6e 65 64 28 5f 47 4e 55 5f 53 4f 55 52 43 45  ined(_GNU_SOURCE
1290: 29 0a 23 20 64 65 66 69 6e 65 20 5f 47 4e 55 5f  ).# define _GNU_
12a0: 53 4f 55 52 43 45 0a 23 65 6e 64 69 66 0a 0a 23  SOURCE.#endif..#
12b0: 69 66 20 64 65 66 69 6e 65 64 28 5f 5f 4f 70 65  if defined(__Ope
12c0: 6e 42 53 44 5f 5f 29 20 26 26 20 21 64 65 66 69  nBSD__) && !defi
12d0: 6e 65 64 28 5f 42 53 44 5f 53 4f 55 52 43 45 29  ned(_BSD_SOURCE)
12e0: 0a 23 20 64 65 66 69 6e 65 20 5f 42 53 44 5f 53  .# define _BSD_S
12f0: 4f 55 52 43 45 0a 23 65 6e 64 69 66 0a 0a 2f 2a  OURCE.#endif../*
1300: 0a 2a 2a 20 46 6f 72 20 4d 69 6e 47 57 2c 20 63  .** For MinGW, c
1310: 68 65 63 6b 20 74 6f 20 73 65 65 20 69 66 20 77  heck to see if w
1320: 65 20 63 61 6e 20 69 6e 63 6c 75 64 65 20 74 68  e can include th
1330: 65 20 68 65 61 64 65 72 20 66 69 6c 65 20 63 6f  e header file co
1340: 6e 74 61 69 6e 69 6e 67 20 69 74 73 0a 2a 2a 20  ntaining its.** 
1350: 76 65 72 73 69 6f 6e 20 69 6e 66 6f 72 6d 61 74  version informat
1360: 69 6f 6e 2c 20 61 6d 6f 6e 67 20 6f 74 68 65 72  ion, among other
1370: 20 74 68 69 6e 67 73 2e 20 20 4e 6f 72 6d 61 6c   things.  Normal
1380: 6c 79 2c 20 74 68 69 73 20 69 6e 74 65 72 6e 61  ly, this interna
1390: 6c 20 4d 69 6e 47 57 0a 2a 2a 20 68 65 61 64 65  l MinGW.** heade
13a0: 72 20 66 69 6c 65 20 77 6f 75 6c 64 20 5b 6f 6e  r file would [on
13b0: 6c 79 5d 20 62 65 20 69 6e 63 6c 75 64 65 64 20  ly] be included 
13c0: 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 62 79  automatically by
13d0: 20 6f 74 68 65 72 20 4d 69 6e 47 57 20 68 65 61   other MinGW hea
13e0: 64 65 72 0a 2a 2a 20 66 69 6c 65 73 3b 20 68 6f  der.** files; ho
13f0: 77 65 76 65 72 2c 20 74 68 65 20 63 6f 6e 74 61  wever, the conta
1400: 69 6e 65 64 20 76 65 72 73 69 6f 6e 20 69 6e 66  ined version inf
1410: 6f 72 6d 61 74 69 6f 6e 20 69 73 20 6e 6f 77 20  ormation is now 
1420: 72 65 71 75 69 72 65 64 20 62 79 20 74 68 69 73  required by this
1430: 0a 2a 2a 20 68 65 61 64 65 72 20 66 69 6c 65 20  .** header file 
1440: 74 6f 20 77 6f 72 6b 20 61 72 6f 75 6e 64 20 62  to work around b
1450: 69 6e 61 72 79 20 63 6f 6d 70 61 74 69 62 69 6c  inary compatibil
1460: 69 74 79 20 69 73 73 75 65 73 20 28 73 65 65 20  ity issues (see 
1470: 62 65 6c 6f 77 29 20 61 6e 64 0a 2a 2a 20 74 68  below) and.** th
1480: 69 73 20 69 73 20 74 68 65 20 6f 6e 6c 79 20 6b  is is the only k
1490: 6e 6f 77 6e 20 77 61 79 20 74 6f 20 72 65 6c 69  nown way to reli
14a0: 61 62 6c 79 20 6f 62 74 61 69 6e 20 69 74 2e 20  ably obtain it. 
14b0: 20 54 68 69 73 20 65 6e 74 69 72 65 20 23 69 66   This entire #if
14c0: 20 62 6c 6f 63 6b 0a 2a 2a 20 77 6f 75 6c 64 20   block.** would 
14d0: 62 65 20 63 6f 6d 70 6c 65 74 65 6c 79 20 75 6e  be completely un
14e0: 6e 65 63 65 73 73 61 72 79 20 69 66 20 74 68 65  necessary if the
14f0: 72 65 20 77 61 73 20 61 6e 79 20 6f 74 68 65 72  re was any other
1500: 20 77 61 79 20 6f 66 20 64 65 74 65 63 74 69 6e   way of detectin
1510: 67 0a 2a 2a 20 4d 69 6e 47 57 20 76 69 61 20 74  g.** MinGW via t
1520: 68 65 69 72 20 70 72 65 70 72 6f 63 65 73 73 6f  heir preprocesso
1530: 72 20 28 65 2e 67 2e 20 69 66 20 74 68 65 79 20  r (e.g. if they 
1540: 63 75 73 74 6f 6d 69 7a 65 64 20 74 68 65 69 72  customized their
1550: 20 47 43 43 20 74 6f 20 64 65 66 69 6e 65 0a 2a   GCC to define.*
1560: 2a 20 73 6f 6d 65 20 4d 69 6e 47 57 2d 73 70 65  * some MinGW-spe
1570: 63 69 66 69 63 20 6d 61 63 72 6f 73 29 2e 20 20  cific macros).  
1580: 57 68 65 6e 20 63 6f 6d 70 69 6c 69 6e 67 20 66  When compiling f
1590: 6f 72 20 4d 69 6e 47 57 2c 20 65 69 74 68 65 72  or MinGW, either
15a0: 20 74 68 65 0a 2a 2a 20 5f 48 41 56 45 5f 4d 49   the.** _HAVE_MI
15b0: 4e 47 57 5f 48 20 6f 72 20 5f 48 41 56 45 5f 5f  NGW_H or _HAVE__
15c0: 4d 49 4e 47 57 5f 48 20 28 6e 6f 74 65 20 74 68  MINGW_H (note th
15d0: 65 20 65 78 74 72 61 20 75 6e 64 65 72 73 63 6f  e extra undersco
15e0: 72 65 29 20 6d 61 63 72 6f 20 6d 75 73 74 20 62  re) macro must b
15f0: 65 0a 2a 2a 20 64 65 66 69 6e 65 64 3b 20 6f 74  e.** defined; ot
1600: 68 65 72 77 69 73 65 2c 20 64 65 74 65 63 74 69  herwise, detecti
1610: 6f 6e 20 6f 66 20 63 6f 6e 64 69 74 69 6f 6e 73  on of conditions
1620: 20 73 70 65 63 69 66 69 63 20 74 6f 20 4d 69 6e   specific to Min
1630: 47 57 20 77 69 6c 6c 20 62 65 0a 2a 2a 20 64 69  GW will be.** di
1640: 73 61 62 6c 65 64 2e 0a 2a 2f 0a 23 69 66 20 64  sabled..*/.#if d
1650: 65 66 69 6e 65 64 28 5f 48 41 56 45 5f 4d 49 4e  efined(_HAVE_MIN
1660: 47 57 5f 48 29 0a 23 20 69 6e 63 6c 75 64 65 20  GW_H).# include 
1670: 22 6d 69 6e 67 77 2e 68 22 0a 23 65 6c 69 66 20  "mingw.h".#elif 
1680: 64 65 66 69 6e 65 64 28 5f 48 41 56 45 5f 5f 4d  defined(_HAVE__M
1690: 49 4e 47 57 5f 48 29 0a 23 20 69 6e 63 6c 75 64  INGW_H).# includ
16a0: 65 20 22 5f 6d 69 6e 67 77 2e 68 22 0a 23 65 6e  e "_mingw.h".#en
16b0: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 46 6f 72 20 4d  dif../*.** For M
16c0: 69 6e 47 57 20 76 65 72 73 69 6f 6e 20 34 2e 78  inGW version 4.x
16d0: 20 28 61 6e 64 20 68 69 67 68 65 72 29 2c 20 63   (and higher), c
16e0: 68 65 63 6b 20 74 6f 20 73 65 65 20 69 66 20 74  heck to see if t
16f0: 68 65 20 5f 55 53 45 5f 33 32 42 49 54 5f 54 49  he _USE_32BIT_TI
1700: 4d 45 5f 54 0a 2a 2a 20 64 65 66 69 6e 65 20 69  ME_T.** define i
1710: 73 20 72 65 71 75 69 72 65 64 20 74 6f 20 6d 61  s required to ma
1720: 69 6e 74 61 69 6e 20 62 69 6e 61 72 79 20 63 6f  intain binary co
1730: 6d 70 61 74 69 62 69 6c 69 74 79 20 77 69 74 68  mpatibility with
1740: 20 74 68 65 20 4d 53 56 43 20 72 75 6e 74 69 6d   the MSVC runtim
1750: 65 0a 2a 2a 20 6c 69 62 72 61 72 79 20 69 6e 20  e.** library in 
1760: 75 73 65 20 28 65 2e 67 2e 20 66 6f 72 20 57 69  use (e.g. for Wi
1770: 6e 64 6f 77 73 20 58 50 29 2e 0a 2a 2f 0a 23 69  ndows XP)..*/.#i
1780: 66 20 21 64 65 66 69 6e 65 64 28 5f 55 53 45 5f  f !defined(_USE_
1790: 33 32 42 49 54 5f 54 49 4d 45 5f 54 29 20 26 26  32BIT_TIME_T) &&
17a0: 20 21 64 65 66 69 6e 65 64 28 5f 55 53 45 5f 36   !defined(_USE_6
17b0: 34 42 49 54 5f 54 49 4d 45 5f 54 29 20 26 26 20  4BIT_TIME_T) && 
17c0: 5c 0a 20 20 20 20 64 65 66 69 6e 65 64 28 5f 57  \.    defined(_W
17d0: 49 4e 33 32 29 20 26 26 20 21 64 65 66 69 6e 65  IN32) && !define
17e0: 64 28 5f 57 49 4e 36 34 29 20 26 26 20 5c 0a 20  d(_WIN64) && \. 
17f0: 20 20 20 64 65 66 69 6e 65 64 28 5f 5f 4d 49 4e     defined(__MIN
1800: 47 57 5f 4d 41 4a 4f 52 5f 56 45 52 53 49 4f 4e  GW_MAJOR_VERSION
1810: 29 20 26 26 20 5f 5f 4d 49 4e 47 57 5f 4d 41 4a  ) && __MINGW_MAJ
1820: 4f 52 5f 56 45 52 53 49 4f 4e 20 3e 3d 20 34 20  OR_VERSION >= 4 
1830: 26 26 20 5c 0a 20 20 20 20 64 65 66 69 6e 65 64  && \.    defined
1840: 28 5f 5f 4d 53 56 43 52 54 5f 5f 29 0a 23 20 64  (__MSVCRT__).# d
1850: 65 66 69 6e 65 20 5f 55 53 45 5f 33 32 42 49 54  efine _USE_32BIT
1860: 5f 54 49 4d 45 5f 54 0a 23 65 6e 64 69 66 0a 0a  _TIME_T.#endif..
1870: 2f 2a 20 54 68 65 20 70 75 62 6c 69 63 20 53 51  /* The public SQ
1880: 4c 69 74 65 20 69 6e 74 65 72 66 61 63 65 2e 20  Lite interface. 
1890: 20 54 68 65 20 5f 46 49 4c 45 5f 4f 46 46 53 45   The _FILE_OFFSE
18a0: 54 5f 42 49 54 53 20 6d 61 63 72 6f 20 6d 75 73  T_BITS macro mus
18b0: 74 20 61 70 70 65 61 72 0a 2a 2a 20 66 69 72 73  t appear.** firs
18c0: 74 20 69 6e 20 51 4e 58 2e 20 20 41 6c 73 6f 2c  t in QNX.  Also,
18d0: 20 74 68 65 20 5f 55 53 45 5f 33 32 42 49 54 5f   the _USE_32BIT_
18e0: 54 49 4d 45 5f 54 20 6d 61 63 72 6f 20 6d 75 73  TIME_T macro mus
18f0: 74 20 61 70 70 65 61 72 20 66 69 72 73 74 20 66  t appear first f
1900: 6f 72 0a 2a 2a 20 4d 69 6e 47 57 2e 0a 2a 2f 0a  or.** MinGW..*/.
1910: 23 69 6e 63 6c 75 64 65 20 22 73 71 6c 69 74 65  #include "sqlite
1920: 33 2e 68 22 0a 0a 2f 2a 0a 2a 2a 20 49 6e 63 6c  3.h"../*.** Incl
1930: 75 64 65 20 74 68 65 20 63 6f 6e 66 69 67 75 72  ude the configur
1940: 61 74 69 6f 6e 20 68 65 61 64 65 72 20 6f 75 74  ation header out
1950: 70 75 74 20 62 79 20 27 63 6f 6e 66 69 67 75 72  put by 'configur
1960: 65 27 20 69 66 20 77 65 27 72 65 20 75 73 69 6e  e' if we're usin
1970: 67 20 74 68 65 0a 2a 2a 20 61 75 74 6f 63 6f 6e  g the.** autocon
1980: 66 2d 62 61 73 65 64 20 62 75 69 6c 64 0a 2a 2f  f-based build.*/
1990: 0a 23 69 66 20 64 65 66 69 6e 65 64 28 5f 48 41  .#if defined(_HA
19a0: 56 45 5f 53 51 4c 49 54 45 5f 43 4f 4e 46 49 47  VE_SQLITE_CONFIG
19b0: 5f 48 29 20 26 26 20 21 64 65 66 69 6e 65 64 28  _H) && !defined(
19c0: 53 51 4c 49 54 45 43 4f 4e 46 49 47 5f 48 29 0a  SQLITECONFIG_H).
19d0: 23 69 6e 63 6c 75 64 65 20 22 63 6f 6e 66 69 67  #include "config
19e0: 2e 68 22 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  .h".#define SQLI
19f0: 54 45 43 4f 4e 46 49 47 5f 48 20 31 0a 23 65 6e  TECONFIG_H 1.#en
1a00: 64 69 66 0a 0a 23 69 6e 63 6c 75 64 65 20 22 73  dif..#include "s
1a10: 71 6c 69 74 65 4c 69 6d 69 74 2e 68 22 0a 0a 2f  qliteLimit.h"../
1a20: 2a 20 44 69 73 61 62 6c 65 20 6e 75 69 73 61 6e  * Disable nuisan
1a30: 63 65 20 77 61 72 6e 69 6e 67 73 20 6f 6e 20 42  ce warnings on B
1a40: 6f 72 6c 61 6e 64 20 63 6f 6d 70 69 6c 65 72 73  orland compilers
1a50: 20 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28   */.#if defined(
1a60: 5f 5f 42 4f 52 4c 41 4e 44 43 5f 5f 29 0a 23 70  __BORLANDC__).#p
1a70: 72 61 67 6d 61 20 77 61 72 6e 20 2d 72 63 68 20  ragma warn -rch 
1a80: 2f 2a 20 75 6e 72 65 61 63 68 61 62 6c 65 20 63  /* unreachable c
1a90: 6f 64 65 20 2a 2f 0a 23 70 72 61 67 6d 61 20 77  ode */.#pragma w
1aa0: 61 72 6e 20 2d 63 63 63 20 2f 2a 20 43 6f 6e 64  arn -ccc /* Cond
1ab0: 69 74 69 6f 6e 20 69 73 20 61 6c 77 61 79 73 20  ition is always 
1ac0: 74 72 75 65 20 6f 72 20 66 61 6c 73 65 20 2a 2f  true or false */
1ad0: 0a 23 70 72 61 67 6d 61 20 77 61 72 6e 20 2d 61  .#pragma warn -a
1ae0: 75 73 20 2f 2a 20 41 73 73 69 67 6e 65 64 20 76  us /* Assigned v
1af0: 61 6c 75 65 20 69 73 20 6e 65 76 65 72 20 75 73  alue is never us
1b00: 65 64 20 2a 2f 0a 23 70 72 61 67 6d 61 20 77 61  ed */.#pragma wa
1b10: 72 6e 20 2d 63 73 75 20 2f 2a 20 43 6f 6d 70 61  rn -csu /* Compa
1b20: 72 69 6e 67 20 73 69 67 6e 65 64 20 61 6e 64 20  ring signed and 
1b30: 75 6e 73 69 67 6e 65 64 20 2a 2f 0a 23 70 72 61  unsigned */.#pra
1b40: 67 6d 61 20 77 61 72 6e 20 2d 73 70 61 20 2f 2a  gma warn -spa /*
1b50: 20 53 75 73 70 69 63 69 6f 75 73 20 70 6f 69 6e   Suspicious poin
1b60: 74 65 72 20 61 72 69 74 68 6d 65 74 69 63 20 2a  ter arithmetic *
1b70: 2f 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  /.#endif../*.** 
1b80: 49 6e 63 6c 75 64 65 20 73 74 61 6e 64 61 72 64  Include standard
1b90: 20 68 65 61 64 65 72 20 66 69 6c 65 73 20 61 73   header files as
1ba0: 20 6e 65 63 65 73 73 61 72 79 0a 2a 2f 0a 23 69   necessary.*/.#i
1bb0: 66 64 65 66 20 48 41 56 45 5f 53 54 44 49 4e 54  fdef HAVE_STDINT
1bc0: 5f 48 0a 23 69 6e 63 6c 75 64 65 20 3c 73 74 64  _H.#include <std
1bd0: 69 6e 74 2e 68 3e 0a 23 65 6e 64 69 66 0a 23 69  int.h>.#endif.#i
1be0: 66 64 65 66 20 48 41 56 45 5f 49 4e 54 54 59 50  fdef HAVE_INTTYP
1bf0: 45 53 5f 48 0a 23 69 6e 63 6c 75 64 65 20 3c 69  ES_H.#include <i
1c00: 6e 74 74 79 70 65 73 2e 68 3e 0a 23 65 6e 64 69  nttypes.h>.#endi
1c10: 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c  f../*.** The fol
1c20: 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 73 20 61 72  lowing macros ar
1c30: 65 20 75 73 65 64 20 74 6f 20 63 61 73 74 20 70  e used to cast p
1c40: 6f 69 6e 74 65 72 73 20 74 6f 20 69 6e 74 65 67  ointers to integ
1c50: 65 72 73 20 61 6e 64 0a 2a 2a 20 69 6e 74 65 67  ers and.** integ
1c60: 65 72 73 20 74 6f 20 70 6f 69 6e 74 65 72 73 2e  ers to pointers.
1c70: 20 20 54 68 65 20 77 61 79 20 79 6f 75 20 64 6f    The way you do
1c80: 20 74 68 69 73 20 76 61 72 69 65 73 20 66 72 6f   this varies fro
1c90: 6d 20 6f 6e 65 20 63 6f 6d 70 69 6c 65 72 0a 2a  m one compiler.*
1ca0: 2a 20 74 6f 20 74 68 65 20 6e 65 78 74 2c 20 73  * to the next, s
1cb0: 6f 20 77 65 20 68 61 76 65 20 64 65 76 65 6c 6f  o we have develo
1cc0: 70 65 64 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e  ped the followin
1cd0: 67 20 73 65 74 20 6f 66 20 23 69 66 20 73 74 61  g set of #if sta
1ce0: 74 65 6d 65 6e 74 73 0a 2a 2a 20 74 6f 20 67 65  tements.** to ge
1cf0: 6e 65 72 61 74 65 20 61 70 70 72 6f 70 72 69 61  nerate appropria
1d00: 74 65 20 6d 61 63 72 6f 73 20 66 6f 72 20 61 20  te macros for a 
1d10: 77 69 64 65 20 72 61 6e 67 65 20 6f 66 20 63 6f  wide range of co
1d20: 6d 70 69 6c 65 72 73 2e 0a 2a 2a 0a 2a 2a 20 54  mpilers..**.** T
1d30: 68 65 20 63 6f 72 72 65 63 74 20 22 41 4e 53 49  he correct "ANSI
1d40: 22 20 77 61 79 20 74 6f 20 64 6f 20 74 68 69 73  " way to do this
1d50: 20 69 73 20 74 6f 20 75 73 65 20 74 68 65 20 69   is to use the i
1d60: 6e 74 70 74 72 5f 74 20 74 79 70 65 2e 0a 2a 2a  ntptr_t type..**
1d70: 20 55 6e 66 6f 72 74 75 6e 61 74 65 6c 79 2c 20   Unfortunately, 
1d80: 74 68 61 74 20 74 79 70 65 64 65 66 20 69 73 20  that typedef is 
1d90: 6e 6f 74 20 61 76 61 69 6c 61 62 6c 65 20 6f 6e  not available on
1da0: 20 61 6c 6c 20 63 6f 6d 70 69 6c 65 72 73 2c 20   all compilers, 
1db0: 6f 72 0a 2a 2a 20 69 66 20 69 74 20 69 73 20 61  or.** if it is a
1dc0: 76 61 69 6c 61 62 6c 65 2c 20 69 74 20 72 65 71  vailable, it req
1dd0: 75 69 72 65 73 20 61 6e 20 23 69 6e 63 6c 75 64  uires an #includ
1de0: 65 20 6f 66 20 73 70 65 63 69 66 69 63 20 68 65  e of specific he
1df0: 61 64 65 72 73 0a 2a 2a 20 74 68 61 74 20 76 61  aders.** that va
1e00: 72 79 20 66 72 6f 6d 20 6f 6e 65 20 6d 61 63 68  ry from one mach
1e10: 69 6e 65 20 74 6f 20 74 68 65 20 6e 65 78 74 2e  ine to the next.
1e20: 0a 2a 2a 0a 2a 2a 20 54 69 63 6b 65 74 20 23 33  .**.** Ticket #3
1e30: 38 36 30 3a 20 20 54 68 65 20 6c 6c 76 6d 2d 67  860:  The llvm-g
1e40: 63 63 2d 34 2e 32 20 63 6f 6d 70 69 6c 65 72 20  cc-4.2 compiler 
1e50: 66 72 6f 6d 20 41 70 70 6c 65 20 63 68 6f 6b 65  from Apple choke
1e60: 73 20 6f 6e 0a 2a 2a 20 74 68 65 20 28 28 76 6f  s on.** the ((vo
1e70: 69 64 2a 29 26 28 28 63 68 61 72 2a 29 30 29 5b  id*)&((char*)0)[
1e80: 58 5d 29 20 63 6f 6e 73 74 72 75 63 74 2e 20 20  X]) construct.  
1e90: 42 75 74 20 4d 53 56 43 20 63 68 6f 6b 65 73 20  But MSVC chokes 
1ea0: 6f 6e 20 28 28 76 6f 69 64 2a 29 28 58 29 29 2e  on ((void*)(X)).
1eb0: 0a 2a 2a 20 53 6f 20 77 65 20 68 61 76 65 20 74  .** So we have t
1ec0: 6f 20 64 65 66 69 6e 65 20 74 68 65 20 6d 61 63  o define the mac
1ed0: 72 6f 73 20 69 6e 20 64 69 66 66 65 72 65 6e 74  ros in different
1ee0: 20 77 61 79 73 20 64 65 70 65 6e 64 69 6e 67 20   ways depending 
1ef0: 6f 6e 20 74 68 65 0a 2a 2a 20 63 6f 6d 70 69 6c  on the.** compil
1f00: 65 72 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e  er..*/.#if defin
1f10: 65 64 28 5f 5f 50 54 52 44 49 46 46 5f 54 59 50  ed(__PTRDIFF_TYP
1f20: 45 5f 5f 29 20 20 2f 2a 20 54 68 69 73 20 63 61  E__)  /* This ca
1f30: 73 65 20 73 68 6f 75 6c 64 20 77 6f 72 6b 20 66  se should work f
1f40: 6f 72 20 47 43 43 20 2a 2f 0a 23 20 64 65 66 69  or GCC */.# defi
1f50: 6e 65 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f  ne SQLITE_INT_TO
1f60: 5f 50 54 52 28 58 29 20 20 28 28 76 6f 69 64 2a  _PTR(X)  ((void*
1f70: 29 28 5f 5f 50 54 52 44 49 46 46 5f 54 59 50 45  )(__PTRDIFF_TYPE
1f80: 5f 5f 29 28 58 29 29 0a 23 20 64 65 66 69 6e 65  __)(X)).# define
1f90: 20 53 51 4c 49 54 45 5f 50 54 52 5f 54 4f 5f 49   SQLITE_PTR_TO_I
1fa0: 4e 54 28 58 29 20 20 28 28 69 6e 74 29 28 5f 5f  NT(X)  ((int)(__
1fb0: 50 54 52 44 49 46 46 5f 54 59 50 45 5f 5f 29 28  PTRDIFF_TYPE__)(
1fc0: 58 29 29 0a 23 65 6c 69 66 20 21 64 65 66 69 6e  X)).#elif !defin
1fd0: 65 64 28 5f 5f 47 4e 55 43 5f 5f 29 20 20 20 20  ed(__GNUC__)    
1fe0: 20 20 20 2f 2a 20 57 6f 72 6b 73 20 66 6f 72 20     /* Works for 
1ff0: 63 6f 6d 70 69 6c 65 72 73 20 6f 74 68 65 72 20  compilers other 
2000: 74 68 61 6e 20 4c 4c 56 4d 20 2a 2f 0a 23 20 64  than LLVM */.# d
2010: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49 4e 54  efine SQLITE_INT
2020: 5f 54 4f 5f 50 54 52 28 58 29 20 20 28 28 76 6f  _TO_PTR(X)  ((vo
2030: 69 64 2a 29 26 28 28 63 68 61 72 2a 29 30 29 5b  id*)&((char*)0)[
2040: 58 5d 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  X]).# define SQL
2050: 49 54 45 5f 50 54 52 5f 54 4f 5f 49 4e 54 28 58  ITE_PTR_TO_INT(X
2060: 29 20 20 28 28 69 6e 74 29 28 28 28 63 68 61 72  )  ((int)(((char
2070: 2a 29 58 29 2d 28 63 68 61 72 2a 29 30 29 29 0a  *)X)-(char*)0)).
2080: 23 65 6c 69 66 20 64 65 66 69 6e 65 64 28 48 41  #elif defined(HA
2090: 56 45 5f 53 54 44 49 4e 54 5f 48 29 20 20 20 2f  VE_STDINT_H)   /
20a0: 2a 20 55 73 65 20 74 68 69 73 20 63 61 73 65 20  * Use this case 
20b0: 69 66 20 77 65 20 68 61 76 65 20 41 4e 53 49 20  if we have ANSI 
20c0: 68 65 61 64 65 72 73 20 2a 2f 0a 23 20 64 65 66  headers */.# def
20d0: 69 6e 65 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54  ine SQLITE_INT_T
20e0: 4f 5f 50 54 52 28 58 29 20 20 28 28 76 6f 69 64  O_PTR(X)  ((void
20f0: 2a 29 28 69 6e 74 70 74 72 5f 74 29 28 58 29 29  *)(intptr_t)(X))
2100: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
2110: 5f 50 54 52 5f 54 4f 5f 49 4e 54 28 58 29 20 20  _PTR_TO_INT(X)  
2120: 28 28 69 6e 74 29 28 69 6e 74 70 74 72 5f 74 29  ((int)(intptr_t)
2130: 28 58 29 29 0a 23 65 6c 73 65 20 20 20 20 20 20  (X)).#else      
2140: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2150: 20 20 20 20 2f 2a 20 47 65 6e 65 72 61 74 65 73      /* Generates
2160: 20 61 20 77 61 72 6e 69 6e 67 20 2d 20 62 75 74   a warning - but
2170: 20 69 74 20 61 6c 77 61 79 73 20 77 6f 72 6b 73   it always works
2180: 20 2a 2f 0a 23 20 64 65 66 69 6e 65 20 53 51 4c   */.# define SQL
2190: 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 58  ITE_INT_TO_PTR(X
21a0: 29 20 20 28 28 76 6f 69 64 2a 29 28 58 29 29 0a  )  ((void*)(X)).
21b0: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
21c0: 50 54 52 5f 54 4f 5f 49 4e 54 28 58 29 20 20 28  PTR_TO_INT(X)  (
21d0: 28 69 6e 74 29 28 58 29 29 0a 23 65 6e 64 69 66  (int)(X)).#endif
21e0: 0a 0a 2f 2a 0a 2a 2a 20 41 20 6d 61 63 72 6f 20  ../*.** A macro 
21f0: 74 6f 20 68 69 6e 74 20 74 6f 20 74 68 65 20 63  to hint to the c
2200: 6f 6d 70 69 6c 65 72 20 74 68 61 74 20 61 20 66  ompiler that a f
2210: 75 6e 63 74 69 6f 6e 20 73 68 6f 75 6c 64 20 6e  unction should n
2220: 6f 74 20 62 65 0a 2a 2a 20 69 6e 6c 69 6e 65 64  ot be.** inlined
2230: 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64  ..*/.#if defined
2240: 28 5f 5f 47 4e 55 43 5f 5f 29 0a 23 20 20 64 65  (__GNUC__).#  de
2250: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e 4f 49 4e  fine SQLITE_NOIN
2260: 4c 49 4e 45 20 20 5f 5f 61 74 74 72 69 62 75 74  LINE  __attribut
2270: 65 5f 5f 28 28 6e 6f 69 6e 6c 69 6e 65 29 29 0a  e__((noinline)).
2280: 23 65 6c 69 66 20 64 65 66 69 6e 65 64 28 5f 4d  #elif defined(_M
2290: 53 43 5f 56 45 52 29 20 26 26 20 5f 4d 53 43 5f  SC_VER) && _MSC_
22a0: 56 45 52 3e 3d 31 33 31 30 0a 23 20 20 64 65 66  VER>=1310.#  def
22b0: 69 6e 65 20 53 51 4c 49 54 45 5f 4e 4f 49 4e 4c  ine SQLITE_NOINL
22c0: 49 4e 45 20 20 5f 5f 64 65 63 6c 73 70 65 63 28  INE  __declspec(
22d0: 6e 6f 69 6e 6c 69 6e 65 29 0a 23 65 6c 73 65 0a  noinline).#else.
22e0: 23 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  #  define SQLITE
22f0: 5f 4e 4f 49 4e 4c 49 4e 45 0a 23 65 6e 64 69 66  _NOINLINE.#endif
2300: 0a 0a 2f 2a 0a 2a 2a 20 4d 61 6b 65 20 73 75 72  ../*.** Make sur
2310: 65 20 74 68 61 74 20 74 68 65 20 63 6f 6d 70 69  e that the compi
2320: 6c 65 72 20 69 6e 74 72 69 6e 73 69 63 73 20 77  ler intrinsics w
2330: 65 20 64 65 73 69 72 65 20 61 72 65 20 65 6e 61  e desire are ena
2340: 62 6c 65 64 20 77 68 65 6e 0a 2a 2a 20 63 6f 6d  bled when.** com
2350: 70 69 6c 69 6e 67 20 77 69 74 68 20 61 6e 20 61  piling with an a
2360: 70 70 72 6f 70 72 69 61 74 65 20 76 65 72 73 69  ppropriate versi
2370: 6f 6e 20 6f 66 20 4d 53 56 43 20 75 6e 6c 65 73  on of MSVC unles
2380: 73 20 70 72 65 76 65 6e 74 65 64 20 62 79 0a 2a  s prevented by.*
2390: 2a 20 74 68 65 20 53 51 4c 49 54 45 5f 44 49 53  * the SQLITE_DIS
23a0: 41 42 4c 45 5f 49 4e 54 52 49 4e 53 49 43 20 64  ABLE_INTRINSIC d
23b0: 65 66 69 6e 65 2e 0a 2a 2f 0a 23 69 66 20 21 64  efine..*/.#if !d
23c0: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 49  efined(SQLITE_DI
23d0: 53 41 42 4c 45 5f 49 4e 54 52 49 4e 53 49 43 29  SABLE_INTRINSIC)
23e0: 0a 23 20 20 69 66 20 64 65 66 69 6e 65 64 28 5f  .#  if defined(_
23f0: 4d 53 43 5f 56 45 52 29 20 26 26 20 5f 4d 53 43  MSC_VER) && _MSC
2400: 5f 56 45 52 3e 3d 31 34 30 30 0a 23 20 20 20 20  _VER>=1400.#    
2410: 69 66 20 21 64 65 66 69 6e 65 64 28 5f 57 49 4e  if !defined(_WIN
2420: 33 32 5f 57 43 45 29 0a 23 20 20 20 20 20 20 69  32_WCE).#      i
2430: 6e 63 6c 75 64 65 20 3c 69 6e 74 72 69 6e 2e 68  nclude <intrin.h
2440: 3e 0a 23 20 20 20 20 20 20 70 72 61 67 6d 61 20  >.#      pragma 
2450: 69 6e 74 72 69 6e 73 69 63 28 5f 62 79 74 65 73  intrinsic(_bytes
2460: 77 61 70 5f 75 73 68 6f 72 74 29 0a 23 20 20 20  wap_ushort).#   
2470: 20 20 20 70 72 61 67 6d 61 20 69 6e 74 72 69 6e     pragma intrin
2480: 73 69 63 28 5f 62 79 74 65 73 77 61 70 5f 75 6c  sic(_byteswap_ul
2490: 6f 6e 67 29 0a 23 20 20 20 20 20 20 70 72 61 67  ong).#      prag
24a0: 6d 61 20 69 6e 74 72 69 6e 73 69 63 28 5f 62 79  ma intrinsic(_by
24b0: 74 65 73 77 61 70 5f 75 69 6e 74 36 34 29 0a 23  teswap_uint64).#
24c0: 20 20 20 20 20 20 70 72 61 67 6d 61 20 69 6e 74        pragma int
24d0: 72 69 6e 73 69 63 28 5f 52 65 61 64 57 72 69 74  rinsic(_ReadWrit
24e0: 65 42 61 72 72 69 65 72 29 0a 23 20 20 20 20 65  eBarrier).#    e
24f0: 6c 73 65 0a 23 20 20 20 20 20 20 69 6e 63 6c 75  lse.#      inclu
2500: 64 65 20 3c 63 6d 6e 69 6e 74 72 69 6e 2e 68 3e  de <cmnintrin.h>
2510: 0a 23 20 20 20 20 65 6e 64 69 66 0a 23 20 20 65  .#    endif.#  e
2520: 6e 64 69 66 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  ndif.#endif../*.
2530: 2a 2a 20 54 68 65 20 53 51 4c 49 54 45 5f 54 48  ** The SQLITE_TH
2540: 52 45 41 44 53 41 46 45 20 6d 61 63 72 6f 20 6d  READSAFE macro m
2550: 75 73 74 20 62 65 20 64 65 66 69 6e 65 64 20 61  ust be defined a
2560: 73 20 30 2c 20 31 2c 20 6f 72 20 32 2e 0a 2a 2a  s 0, 1, or 2..**
2570: 20 30 20 6d 65 61 6e 73 20 6d 75 74 65 78 65 73   0 means mutexes
2580: 20 61 72 65 20 70 65 72 6d 61 6e 65 6e 74 6c 79   are permanently
2590: 20 64 69 73 61 62 6c 65 20 61 6e 64 20 74 68 65   disable and the
25a0: 20 6c 69 62 72 61 72 79 20 69 73 20 6e 65 76 65   library is neve
25b0: 72 0a 2a 2a 20 74 68 72 65 61 64 73 61 66 65 2e  r.** threadsafe.
25c0: 20 20 31 20 6d 65 61 6e 73 20 74 68 65 20 6c 69    1 means the li
25d0: 62 72 61 72 79 20 69 73 20 73 65 72 69 61 6c 69  brary is seriali
25e0: 7a 65 64 20 77 68 69 63 68 20 69 73 20 74 68 65  zed which is the
25f0: 20 68 69 67 68 65 73 74 0a 2a 2a 20 6c 65 76 65   highest.** leve
2600: 6c 20 6f 66 20 74 68 72 65 61 64 73 61 66 65 74  l of threadsafet
2610: 79 2e 20 20 32 20 6d 65 61 6e 73 20 74 68 65 20  y.  2 means the 
2620: 6c 69 62 72 61 72 79 20 69 73 20 6d 75 6c 74 69  library is multi
2630: 74 68 72 65 61 64 65 64 20 2d 20 6d 75 6c 74 69  threaded - multi
2640: 70 6c 65 0a 2a 2a 20 74 68 72 65 61 64 73 20 63  ple.** threads c
2650: 61 6e 20 75 73 65 20 53 51 4c 69 74 65 20 61 73  an use SQLite as
2660: 20 6c 6f 6e 67 20 61 73 20 6e 6f 20 74 77 6f 20   long as no two 
2670: 74 68 72 65 61 64 73 20 74 72 79 20 74 6f 20 75  threads try to u
2680: 73 65 20 74 68 65 20 73 61 6d 65 0a 2a 2a 20 64  se the same.** d
2690: 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
26a0: 6f 6e 20 61 74 20 74 68 65 20 73 61 6d 65 20 74  on at the same t
26b0: 69 6d 65 2e 0a 2a 2a 0a 2a 2a 20 4f 6c 64 65 72  ime..**.** Older
26c0: 20 76 65 72 73 69 6f 6e 73 20 6f 66 20 53 51 4c   versions of SQL
26d0: 69 74 65 20 75 73 65 64 20 61 6e 20 6f 70 74 69  ite used an opti
26e0: 6f 6e 61 6c 20 54 48 52 45 41 44 53 41 46 45 20  onal THREADSAFE 
26f0: 6d 61 63 72 6f 2e 0a 2a 2a 20 57 65 20 73 75 70  macro..** We sup
2700: 70 6f 72 74 20 74 68 61 74 20 66 6f 72 20 6c 65  port that for le
2710: 67 61 63 79 2e 0a 2a 2a 0a 2a 2a 20 54 6f 20 65  gacy..**.** To e
2720: 6e 73 75 72 65 20 74 68 61 74 20 74 68 65 20 63  nsure that the c
2730: 6f 72 72 65 63 74 20 76 61 6c 75 65 20 6f 66 20  orrect value of 
2740: 22 54 48 52 45 41 44 53 41 46 45 22 20 69 73 20  "THREADSAFE" is 
2750: 72 65 70 6f 72 74 65 64 20 77 68 65 6e 20 71 75  reported when qu
2760: 65 72 79 69 6e 67 0a 2a 2a 20 66 6f 72 20 63 6f  erying.** for co
2770: 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f  mpile-time optio
2780: 6e 73 20 61 74 20 72 75 6e 74 69 6d 65 20 28 65  ns at runtime (e
2790: 2e 67 2e 20 22 50 52 41 47 4d 41 20 63 6f 6d 70  .g. "PRAGMA comp
27a0: 69 6c 65 5f 6f 70 74 69 6f 6e 73 22 29 2c 20 74  ile_options"), t
27b0: 68 69 73 0a 2a 2a 20 6c 6f 67 69 63 20 69 73 20  his.** logic is 
27c0: 70 61 72 74 69 61 6c 6c 79 20 72 65 70 6c 69 63  partially replic
27d0: 61 74 65 64 20 69 6e 20 63 74 69 6d 65 2e 63 2e  ated in ctime.c.
27e0: 20 49 66 20 69 74 20 69 73 20 75 70 64 61 74 65   If it is update
27f0: 64 20 68 65 72 65 2c 20 69 74 20 73 68 6f 75 6c  d here, it shoul
2800: 64 0a 2a 2a 20 61 6c 73 6f 20 62 65 20 75 70 64  d.** also be upd
2810: 61 74 65 64 20 74 68 65 72 65 2e 0a 2a 2f 0a 23  ated there..*/.#
2820: 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  if !defined(SQLI
2830: 54 45 5f 54 48 52 45 41 44 53 41 46 45 29 0a 23  TE_THREADSAFE).#
2840: 20 69 66 20 64 65 66 69 6e 65 64 28 54 48 52 45   if defined(THRE
2850: 41 44 53 41 46 45 29 0a 23 20 20 20 64 65 66 69  ADSAFE).#   defi
2860: 6e 65 20 53 51 4c 49 54 45 5f 54 48 52 45 41 44  ne SQLITE_THREAD
2870: 53 41 46 45 20 54 48 52 45 41 44 53 41 46 45 0a  SAFE THREADSAFE.
2880: 23 20 65 6c 73 65 0a 23 20 20 20 64 65 66 69 6e  # else.#   defin
2890: 65 20 53 51 4c 49 54 45 5f 54 48 52 45 41 44 53  e SQLITE_THREADS
28a0: 41 46 45 20 31 20 2f 2a 20 49 4d 50 3a 20 52 2d  AFE 1 /* IMP: R-
28b0: 30 37 32 37 32 2d 32 32 33 30 39 20 2a 2f 0a 23  07272-22309 */.#
28c0: 20 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 0a 2f   endif.#endif../
28d0: 2a 0a 2a 2a 20 50 6f 77 65 72 73 61 66 65 20 6f  *.** Powersafe o
28e0: 76 65 72 77 72 69 74 65 20 69 73 20 6f 6e 20 62  verwrite is on b
28f0: 79 20 64 65 66 61 75 6c 74 2e 20 20 42 75 74 20  y default.  But 
2900: 63 61 6e 20 62 65 20 74 75 72 6e 65 64 20 6f 66  can be turned of
2910: 66 20 75 73 69 6e 67 0a 2a 2a 20 74 68 65 20 2d  f using.** the -
2920: 44 53 51 4c 49 54 45 5f 50 4f 57 45 52 53 41 46  DSQLITE_POWERSAF
2930: 45 5f 4f 56 45 52 57 52 49 54 45 3d 30 20 63 6f  E_OVERWRITE=0 co
2940: 6d 6d 61 6e 64 2d 6c 69 6e 65 20 6f 70 74 69 6f  mmand-line optio
2950: 6e 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51  n..*/.#ifndef SQ
2960: 4c 49 54 45 5f 50 4f 57 45 52 53 41 46 45 5f 4f  LITE_POWERSAFE_O
2970: 56 45 52 57 52 49 54 45 0a 23 20 64 65 66 69 6e  VERWRITE.# defin
2980: 65 20 53 51 4c 49 54 45 5f 50 4f 57 45 52 53 41  e SQLITE_POWERSA
2990: 46 45 5f 4f 56 45 52 57 52 49 54 45 20 31 0a 23  FE_OVERWRITE 1.#
29a0: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 45 56 49  endif../*.** EVI
29b0: 44 45 4e 43 45 2d 4f 46 3a 20 52 2d 32 35 37 31  DENCE-OF: R-2571
29c0: 35 2d 33 37 30 37 32 20 4d 65 6d 6f 72 79 20 61  5-37072 Memory a
29d0: 6c 6c 6f 63 61 74 69 6f 6e 20 73 74 61 74 69 73  llocation statis
29e0: 74 69 63 73 20 61 72 65 20 65 6e 61 62 6c 65 64  tics are enabled
29f0: 20 62 79 0a 2a 2a 20 64 65 66 61 75 6c 74 20 75   by.** default u
2a00: 6e 6c 65 73 73 20 53 51 4c 69 74 65 20 69 73 20  nless SQLite is 
2a10: 63 6f 6d 70 69 6c 65 64 20 77 69 74 68 20 53 51  compiled with SQ
2a20: 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d 45 4d  LITE_DEFAULT_MEM
2a30: 53 54 41 54 55 53 3d 30 20 69 6e 0a 2a 2a 20 77  STATUS=0 in.** w
2a40: 68 69 63 68 20 63 61 73 65 20 6d 65 6d 6f 72 79  hich case memory
2a50: 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 73 74 61 74   allocation stat
2a60: 69 73 74 69 63 73 20 61 72 65 20 64 69 73 61 62  istics are disab
2a70: 6c 65 64 20 62 79 20 64 65 66 61 75 6c 74 2e 0a  led by default..
2a80: 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28  */.#if !defined(
2a90: 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d  SQLITE_DEFAULT_M
2aa0: 45 4d 53 54 41 54 55 53 29 0a 23 20 64 65 66 69  EMSTATUS).# defi
2ab0: 6e 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c  ne SQLITE_DEFAUL
2ac0: 54 5f 4d 45 4d 53 54 41 54 55 53 20 31 0a 23 65  T_MEMSTATUS 1.#e
2ad0: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 45 78 61 63  ndif../*.** Exac
2ae0: 74 6c 79 20 6f 6e 65 20 6f 66 20 74 68 65 20 66  tly one of the f
2af0: 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 73 20  ollowing macros 
2b00: 6d 75 73 74 20 62 65 20 64 65 66 69 6e 65 64 20  must be defined 
2b10: 69 6e 20 6f 72 64 65 72 20 74 6f 0a 2a 2a 20 73  in order to.** s
2b20: 70 65 63 69 66 79 20 77 68 69 63 68 20 6d 65 6d  pecify which mem
2b30: 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 73  ory allocation s
2b40: 75 62 73 79 73 74 65 6d 20 74 6f 20 75 73 65 2e  ubsystem to use.
2b50: 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 51 4c 49 54  .**.**     SQLIT
2b60: 45 5f 53 59 53 54 45 4d 5f 4d 41 4c 4c 4f 43 20  E_SYSTEM_MALLOC 
2b70: 20 20 20 20 20 20 20 20 20 2f 2f 20 55 73 65 20           // Use 
2b80: 6e 6f 72 6d 61 6c 20 73 79 73 74 65 6d 20 6d 61  normal system ma
2b90: 6c 6c 6f 63 28 29 0a 2a 2a 20 20 20 20 20 53 51  lloc().**     SQ
2ba0: 4c 49 54 45 5f 57 49 4e 33 32 5f 4d 41 4c 4c 4f  LITE_WIN32_MALLO
2bb0: 43 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 55  C           // U
2bc0: 73 65 20 57 69 6e 33 32 20 6e 61 74 69 76 65 20  se Win32 native 
2bd0: 68 65 61 70 20 41 50 49 0a 2a 2a 20 20 20 20 20  heap API.**     
2be0: 53 51 4c 49 54 45 5f 5a 45 52 4f 5f 4d 41 4c 4c  SQLITE_ZERO_MALL
2bf0: 4f 43 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  OC            //
2c00: 20 55 73 65 20 61 20 73 74 75 62 20 61 6c 6c 6f   Use a stub allo
2c10: 63 61 74 6f 72 20 74 68 61 74 20 61 6c 77 61 79  cator that alway
2c20: 73 20 66 61 69 6c 73 0a 2a 2a 20 20 20 20 20 53  s fails.**     S
2c30: 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47 20 20  QLITE_MEMDEBUG  
2c40: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
2c50: 44 65 62 75 67 67 69 6e 67 20 76 65 72 73 69 6f  Debugging versio
2c60: 6e 20 6f 66 20 73 79 73 74 65 6d 20 6d 61 6c 6c  n of system mall
2c70: 6f 63 28 29 0a 2a 2a 0a 2a 2a 20 4f 6e 20 57 69  oc().**.** On Wi
2c80: 6e 64 6f 77 73 2c 20 69 66 20 74 68 65 20 53 51  ndows, if the SQ
2c90: 4c 49 54 45 5f 57 49 4e 33 32 5f 4d 41 4c 4c 4f  LITE_WIN32_MALLO
2ca0: 43 5f 56 41 4c 49 44 41 54 45 20 6d 61 63 72 6f  C_VALIDATE macro
2cb0: 20 69 73 20 64 65 66 69 6e 65 64 20 61 6e 64 20   is defined and 
2cc0: 74 68 65 0a 2a 2a 20 61 73 73 65 72 74 28 29 20  the.** assert() 
2cd0: 6d 61 63 72 6f 20 69 73 20 65 6e 61 62 6c 65 64  macro is enabled
2ce0: 2c 20 65 61 63 68 20 63 61 6c 6c 20 69 6e 74 6f  , each call into
2cf0: 20 74 68 65 20 57 69 6e 33 32 20 6e 61 74 69 76   the Win32 nativ
2d00: 65 20 68 65 61 70 20 73 75 62 73 79 73 74 65 6d  e heap subsystem
2d10: 0a 2a 2a 20 77 69 6c 6c 20 63 61 75 73 65 20 48  .** will cause H
2d20: 65 61 70 56 61 6c 69 64 61 74 65 20 74 6f 20 62  eapValidate to b
2d30: 65 20 63 61 6c 6c 65 64 2e 20 20 49 66 20 68 65  e called.  If he
2d40: 61 70 20 76 61 6c 69 64 61 74 69 6f 6e 20 73 68  ap validation sh
2d50: 6f 75 6c 64 20 66 61 69 6c 2c 20 61 6e 0a 2a 2a  ould fail, an.**
2d60: 20 61 73 73 65 72 74 69 6f 6e 20 77 69 6c 6c 20   assertion will 
2d70: 62 65 20 74 72 69 67 67 65 72 65 64 2e 0a 2a 2a  be triggered..**
2d80: 0a 2a 2a 20 49 66 20 6e 6f 6e 65 20 6f 66 20 74  .** If none of t
2d90: 68 65 20 61 62 6f 76 65 20 61 72 65 20 64 65 66  he above are def
2da0: 69 6e 65 64 2c 20 74 68 65 6e 20 73 65 74 20 53  ined, then set S
2db0: 51 4c 49 54 45 5f 53 59 53 54 45 4d 5f 4d 41 4c  QLITE_SYSTEM_MAL
2dc0: 4c 4f 43 20 61 73 0a 2a 2a 20 74 68 65 20 64 65  LOC as.** the de
2dd0: 66 61 75 6c 74 2e 0a 2a 2f 0a 23 69 66 20 64 65  fault..*/.#if de
2de0: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 53 59 53  fined(SQLITE_SYS
2df0: 54 45 4d 5f 4d 41 4c 4c 4f 43 29 20 5c 0a 20 20  TEM_MALLOC) \.  
2e00: 2b 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  + defined(SQLITE
2e10: 5f 57 49 4e 33 32 5f 4d 41 4c 4c 4f 43 29 20 5c  _WIN32_MALLOC) \
2e20: 0a 20 20 2b 20 64 65 66 69 6e 65 64 28 53 51 4c  .  + defined(SQL
2e30: 49 54 45 5f 5a 45 52 4f 5f 4d 41 4c 4c 4f 43 29  ITE_ZERO_MALLOC)
2e40: 20 5c 0a 20 20 2b 20 64 65 66 69 6e 65 64 28 53   \.  + defined(S
2e50: 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47 29 3e  QLITE_MEMDEBUG)>
2e60: 31 0a 23 20 65 72 72 6f 72 20 22 54 77 6f 20 6f  1.# error "Two o
2e70: 72 20 6d 6f 72 65 20 6f 66 20 74 68 65 20 66 6f  r more of the fo
2e80: 6c 6c 6f 77 69 6e 67 20 63 6f 6d 70 69 6c 65 2d  llowing compile-
2e90: 74 69 6d 65 20 63 6f 6e 66 69 67 75 72 61 74 69  time configurati
2ea0: 6f 6e 20 6f 70 74 69 6f 6e 73 5c 0a 20 61 72 65  on options\. are
2eb0: 20 64 65 66 69 6e 65 64 20 62 75 74 20 61 74 20   defined but at 
2ec0: 6d 6f 73 74 20 6f 6e 65 20 69 73 20 61 6c 6c 6f  most one is allo
2ed0: 77 65 64 3a 5c 0a 20 53 51 4c 49 54 45 5f 53 59  wed:\. SQLITE_SY
2ee0: 53 54 45 4d 5f 4d 41 4c 4c 4f 43 2c 20 53 51 4c  STEM_MALLOC, SQL
2ef0: 49 54 45 5f 57 49 4e 33 32 5f 4d 41 4c 4c 4f 43  ITE_WIN32_MALLOC
2f00: 2c 20 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55  , SQLITE_MEMDEBU
2f10: 47 2c 5c 0a 20 53 51 4c 49 54 45 5f 5a 45 52 4f  G,\. SQLITE_ZERO
2f20: 5f 4d 41 4c 4c 4f 43 22 0a 23 65 6e 64 69 66 0a  _MALLOC".#endif.
2f30: 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49  #if defined(SQLI
2f40: 54 45 5f 53 59 53 54 45 4d 5f 4d 41 4c 4c 4f 43  TE_SYSTEM_MALLOC
2f50: 29 20 5c 0a 20 20 2b 20 64 65 66 69 6e 65 64 28  ) \.  + defined(
2f60: 53 51 4c 49 54 45 5f 57 49 4e 33 32 5f 4d 41 4c  SQLITE_WIN32_MAL
2f70: 4c 4f 43 29 20 5c 0a 20 20 2b 20 64 65 66 69 6e  LOC) \.  + defin
2f80: 65 64 28 53 51 4c 49 54 45 5f 5a 45 52 4f 5f 4d  ed(SQLITE_ZERO_M
2f90: 41 4c 4c 4f 43 29 20 5c 0a 20 20 2b 20 64 65 66  ALLOC) \.  + def
2fa0: 69 6e 65 64 28 53 51 4c 49 54 45 5f 4d 45 4d 44  ined(SQLITE_MEMD
2fb0: 45 42 55 47 29 3d 3d 30 0a 23 20 64 65 66 69 6e  EBUG)==0.# defin
2fc0: 65 20 53 51 4c 49 54 45 5f 53 59 53 54 45 4d 5f  e SQLITE_SYSTEM_
2fd0: 4d 41 4c 4c 4f 43 20 31 0a 23 65 6e 64 69 66 0a  MALLOC 1.#endif.
2fe0: 0a 2f 2a 0a 2a 2a 20 49 66 20 53 51 4c 49 54 45  ./*.** If SQLITE
2ff0: 5f 4d 41 4c 4c 4f 43 5f 53 4f 46 54 5f 4c 49 4d  _MALLOC_SOFT_LIM
3000: 49 54 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20  IT is not zero, 
3010: 74 68 65 6e 20 74 72 79 20 74 6f 20 6b 65 65 70  then try to keep
3020: 20 74 68 65 0a 2a 2a 20 73 69 7a 65 73 20 6f 66   the.** sizes of
3030: 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69   memory allocati
3040: 6f 6e 73 20 62 65 6c 6f 77 20 74 68 69 73 20 76  ons below this v
3050: 61 6c 75 65 20 77 68 65 72 65 20 70 6f 73 73 69  alue where possi
3060: 62 6c 65 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66  ble..*/.#if !def
3070: 69 6e 65 64 28 53 51 4c 49 54 45 5f 4d 41 4c 4c  ined(SQLITE_MALL
3080: 4f 43 5f 53 4f 46 54 5f 4c 49 4d 49 54 29 0a 23  OC_SOFT_LIMIT).#
3090: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d   define SQLITE_M
30a0: 41 4c 4c 4f 43 5f 53 4f 46 54 5f 4c 49 4d 49 54  ALLOC_SOFT_LIMIT
30b0: 20 31 30 32 34 0a 23 65 6e 64 69 66 0a 0a 2f 2a   1024.#endif../*
30c0: 0a 2a 2a 20 57 65 20 6e 65 65 64 20 74 6f 20 64  .** We need to d
30d0: 65 66 69 6e 65 20 5f 58 4f 50 45 4e 5f 53 4f 55  efine _XOPEN_SOU
30e0: 52 43 45 20 61 73 20 66 6f 6c 6c 6f 77 73 20 69  RCE as follows i
30f0: 6e 20 6f 72 64 65 72 20 74 6f 20 65 6e 61 62 6c  n order to enabl
3100: 65 0a 2a 2a 20 72 65 63 75 72 73 69 76 65 20 6d  e.** recursive m
3110: 75 74 65 78 65 73 20 6f 6e 20 6d 6f 73 74 20 55  utexes on most U
3120: 6e 69 78 20 73 79 73 74 65 6d 73 20 61 6e 64 20  nix systems and 
3130: 66 63 68 6d 6f 64 28 29 20 6f 6e 20 4f 70 65 6e  fchmod() on Open
3140: 42 53 44 2e 0a 2a 2a 20 42 75 74 20 5f 58 4f 50  BSD..** But _XOP
3150: 45 4e 5f 53 4f 55 52 43 45 20 64 65 66 69 6e 65  EN_SOURCE define
3160: 20 63 61 75 73 65 73 20 70 72 6f 62 6c 65 6d 73   causes problems
3170: 20 66 6f 72 20 4d 61 63 20 4f 53 20 58 2c 20 73   for Mac OS X, s
3180: 6f 20 6f 6d 69 74 0a 2a 2a 20 69 74 2e 0a 2a 2f  o omit.** it..*/
3190: 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 5f 58  .#if !defined(_X
31a0: 4f 50 45 4e 5f 53 4f 55 52 43 45 29 20 26 26 20  OPEN_SOURCE) && 
31b0: 21 64 65 66 69 6e 65 64 28 5f 5f 44 41 52 57 49  !defined(__DARWI
31c0: 4e 5f 5f 29 20 26 26 20 21 64 65 66 69 6e 65 64  N__) && !defined
31d0: 28 5f 5f 41 50 50 4c 45 5f 5f 29 0a 23 20 20 64  (__APPLE__).#  d
31e0: 65 66 69 6e 65 20 5f 58 4f 50 45 4e 5f 53 4f 55  efine _XOPEN_SOU
31f0: 52 43 45 20 36 30 30 0a 23 65 6e 64 69 66 0a 0a  RCE 600.#endif..
3200: 2f 2a 0a 2a 2a 20 4e 44 45 42 55 47 20 61 6e 64  /*.** NDEBUG and
3210: 20 53 51 4c 49 54 45 5f 44 45 42 55 47 20 61 72   SQLITE_DEBUG ar
3220: 65 20 6f 70 70 6f 73 69 74 65 73 2e 20 20 49 74  e opposites.  It
3230: 20 73 68 6f 75 6c 64 20 61 6c 77 61 79 73 20 62   should always b
3240: 65 20 74 72 75 65 20 74 68 61 74 0a 2a 2a 20 64  e true that.** d
3250: 65 66 69 6e 65 64 28 4e 44 45 42 55 47 29 3d 3d  efined(NDEBUG)==
3260: 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
3270: 44 45 42 55 47 29 2e 20 20 49 66 20 74 68 69 73  DEBUG).  If this
3280: 20 69 73 20 6e 6f 74 20 63 75 72 72 65 6e 74 6c   is not currentl
3290: 79 20 74 72 75 65 2c 0a 2a 2a 20 6d 61 6b 65 20  y true,.** make 
32a0: 69 74 20 74 72 75 65 20 62 79 20 64 65 66 69 6e  it true by defin
32b0: 69 6e 67 20 6f 72 20 75 6e 64 65 66 69 6e 69 6e  ing or undefinin
32c0: 67 20 4e 44 45 42 55 47 2e 0a 2a 2a 0a 2a 2a 20  g NDEBUG..**.** 
32d0: 53 65 74 74 69 6e 67 20 4e 44 45 42 55 47 20 6d  Setting NDEBUG m
32e0: 61 6b 65 73 20 74 68 65 20 63 6f 64 65 20 73 6d  akes the code sm
32f0: 61 6c 6c 65 72 20 61 6e 64 20 66 61 73 74 65 72  aller and faster
3300: 20 62 79 20 64 69 73 61 62 6c 69 6e 67 20 74 68   by disabling th
3310: 65 0a 2a 2a 20 61 73 73 65 72 74 28 29 20 73 74  e.** assert() st
3320: 61 74 65 6d 65 6e 74 73 20 69 6e 20 74 68 65 20  atements in the 
3330: 63 6f 64 65 2e 20 20 53 6f 20 77 65 20 77 61 6e  code.  So we wan
3340: 74 20 74 68 65 20 64 65 66 61 75 6c 74 20 61 63  t the default ac
3350: 74 69 6f 6e 0a 2a 2a 20 74 6f 20 62 65 20 66 6f  tion.** to be fo
3360: 72 20 4e 44 45 42 55 47 20 74 6f 20 62 65 20 73  r NDEBUG to be s
3370: 65 74 20 61 6e 64 20 4e 44 45 42 55 47 20 74 6f  et and NDEBUG to
3380: 20 62 65 20 75 6e 64 65 66 69 6e 65 64 20 6f 6e   be undefined on
3390: 6c 79 20 69 66 20 53 51 4c 49 54 45 5f 44 45 42  ly if SQLITE_DEB
33a0: 55 47 0a 2a 2a 20 69 73 20 73 65 74 2e 20 20 54  UG.** is set.  T
33b0: 68 75 73 20 4e 44 45 42 55 47 20 62 65 63 6f 6d  hus NDEBUG becom
33c0: 65 73 20 61 6e 20 6f 70 74 2d 69 6e 20 72 61 74  es an opt-in rat
33d0: 68 65 72 20 74 68 61 6e 20 61 6e 20 6f 70 74 2d  her than an opt-
33e0: 6f 75 74 0a 2a 2a 20 66 65 61 74 75 72 65 2e 0a  out.** feature..
33f0: 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28  */.#if !defined(
3400: 4e 44 45 42 55 47 29 20 26 26 20 21 64 65 66 69  NDEBUG) && !defi
3410: 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47  ned(SQLITE_DEBUG
3420: 29 0a 23 20 64 65 66 69 6e 65 20 4e 44 45 42 55  ).# define NDEBU
3430: 47 20 31 0a 23 65 6e 64 69 66 0a 23 69 66 20 64  G 1.#endif.#if d
3440: 65 66 69 6e 65 64 28 4e 44 45 42 55 47 29 20 26  efined(NDEBUG) &
3450: 26 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  & defined(SQLITE
3460: 5f 44 45 42 55 47 29 0a 23 20 75 6e 64 65 66 20  _DEBUG).# undef 
3470: 4e 44 45 42 55 47 0a 23 65 6e 64 69 66 0a 0a 2f  NDEBUG.#endif../
3480: 2a 20 53 51 4c 49 54 45 5f 44 45 42 55 47 5f 43  * SQLITE_DEBUG_C
3490: 4f 4c 55 4d 4e 43 41 43 48 45 20 69 73 20 73 79  OLUMNCACHE is sy
34a0: 6e 6f 6d 6f 75 73 20 77 69 74 68 20 53 51 4c 49  nomous with SQLI
34b0: 54 45 5f 44 45 42 55 47 2e 20 20 54 68 65 20 0a  TE_DEBUG.  The .
34c0: 2a 2a 20 53 51 4c 49 54 45 5f 44 45 42 55 47 5f  ** SQLITE_DEBUG_
34d0: 43 4f 4c 55 4d 4e 43 41 43 48 45 20 73 79 6d 62  COLUMNCACHE symb
34e0: 6f 6c 20 6f 6e 6c 79 20 65 78 69 73 74 73 20 74  ol only exists t
34f0: 6f 20 70 72 6f 76 69 64 65 20 61 20 63 6f 6e 76  o provide a conv
3500: 65 6e 69 65 6e 74 0a 2a 2a 20 77 61 79 20 74 6f  enient.** way to
3510: 20 73 65 61 72 63 68 20 66 6f 72 20 61 6c 6c 20   search for all 
3520: 63 6f 64 65 20 74 68 61 74 20 64 65 61 6c 73 20  code that deals 
3530: 77 69 74 68 20 76 65 72 69 66 79 69 6e 67 20 63  with verifying c
3540: 6f 72 72 65 63 74 20 62 65 68 61 76 69 6f 72 0a  orrect behavior.
3550: 2a 2a 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e  ** of the column
3560: 20 63 61 63 68 65 2e 0a 2a 2f 0a 23 69 66 64 65   cache..*/.#ifde
3570: 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 23  f SQLITE_DEBUG.#
3580: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44   define SQLITE_D
3590: 45 42 55 47 5f 43 4f 4c 55 4d 4e 43 41 43 48 45  EBUG_COLUMNCACHE
35a0: 20 31 0a 23 65 6c 73 65 0a 23 20 75 6e 64 65 66   1.#else.# undef
35b0: 20 53 51 4c 49 54 5f 44 45 42 55 47 5f 43 4f 4c   SQLIT_DEBUG_COL
35c0: 55 4d 4e 43 41 43 48 45 0a 23 65 6e 64 69 66 0a  UMNCACHE.#endif.
35d0: 0a 2f 2a 0a 2a 2a 20 45 6e 61 62 6c 65 20 53 51  ./*.** Enable SQ
35e0: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 45 58 50 4c  LITE_ENABLE_EXPL
35f0: 41 49 4e 5f 43 4f 4d 4d 45 4e 54 53 20 69 66 20  AIN_COMMENTS if 
3600: 53 51 4c 49 54 45 5f 44 45 42 55 47 20 69 73 20  SQLITE_DEBUG is 
3610: 74 75 72 6e 65 64 20 6f 6e 2e 0a 2a 2f 0a 23 69  turned on..*/.#i
3620: 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  f !defined(SQLIT
3630: 45 5f 45 4e 41 42 4c 45 5f 45 58 50 4c 41 49 4e  E_ENABLE_EXPLAIN
3640: 5f 43 4f 4d 4d 45 4e 54 53 29 20 26 26 20 64 65  _COMMENTS) && de
3650: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42  fined(SQLITE_DEB
3660: 55 47 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  UG).# define SQL
3670: 49 54 45 5f 45 4e 41 42 4c 45 5f 45 58 50 4c 41  ITE_ENABLE_EXPLA
3680: 49 4e 5f 43 4f 4d 4d 45 4e 54 53 20 31 0a 23 65  IN_COMMENTS 1.#e
3690: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  ndif../*.** The 
36a0: 74 65 73 74 63 61 73 65 28 29 20 6d 61 63 72 6f  testcase() macro
36b0: 20 69 73 20 75 73 65 64 20 74 6f 20 61 69 64 20   is used to aid 
36c0: 69 6e 20 63 6f 76 65 72 61 67 65 20 74 65 73 74  in coverage test
36d0: 69 6e 67 2e 20 20 57 68 65 6e 0a 2a 2a 20 64 6f  ing.  When.** do
36e0: 69 6e 67 20 63 6f 76 65 72 61 67 65 20 74 65 73  ing coverage tes
36f0: 74 69 6e 67 2c 20 74 68 65 20 63 6f 6e 64 69 74  ting, the condit
3700: 69 6f 6e 20 69 6e 73 69 64 65 20 74 68 65 20 61  ion inside the a
3710: 72 67 75 6d 65 6e 74 20 74 6f 0a 2a 2a 20 74 65  rgument to.** te
3720: 73 74 63 61 73 65 28 29 20 6d 75 73 74 20 62 65  stcase() must be
3730: 20 65 76 61 6c 75 61 74 65 64 20 62 6f 74 68 20   evaluated both 
3740: 74 72 75 65 20 61 6e 64 20 66 61 6c 73 65 20 69  true and false i
3750: 6e 20 6f 72 64 65 72 20 74 6f 0a 2a 2a 20 67 65  n order to.** ge
3760: 74 20 66 75 6c 6c 20 62 72 61 6e 63 68 20 63 6f  t full branch co
3770: 76 65 72 61 67 65 2e 20 20 54 68 65 20 74 65 73  verage.  The tes
3780: 74 63 61 73 65 28 29 20 6d 61 63 72 6f 20 69 73  tcase() macro is
3790: 20 69 6e 73 65 72 74 65 64 0a 2a 2a 20 74 6f 20   inserted.** to 
37a0: 68 65 6c 70 20 65 6e 73 75 72 65 20 61 64 65 71  help ensure adeq
37b0: 75 61 74 65 20 74 65 73 74 20 63 6f 76 65 72 61  uate test covera
37c0: 67 65 20 69 6e 20 70 6c 61 63 65 73 20 77 68 65  ge in places whe
37d0: 72 65 20 73 69 6d 70 6c 65 0a 2a 2a 20 63 6f 6e  re simple.** con
37e0: 64 69 74 69 6f 6e 2f 64 65 63 69 73 69 6f 6e 20  dition/decision 
37f0: 63 6f 76 65 72 61 67 65 20 69 73 20 69 6e 61 64  coverage is inad
3800: 65 71 75 61 74 65 2e 20 20 46 6f 72 20 65 78 61  equate.  For exa
3810: 6d 70 6c 65 2c 20 74 65 73 74 63 61 73 65 28 29  mple, testcase()
3820: 0a 2a 2a 20 63 61 6e 20 62 65 20 75 73 65 64 20  .** can be used 
3830: 74 6f 20 6d 61 6b 65 20 73 75 72 65 20 62 6f 75  to make sure bou
3840: 6e 64 61 72 79 20 76 61 6c 75 65 73 20 61 72 65  ndary values are
3850: 20 74 65 73 74 65 64 2e 20 20 46 6f 72 0a 2a 2a   tested.  For.**
3860: 20 62 69 74 6d 61 73 6b 20 74 65 73 74 73 2c 20   bitmask tests, 
3870: 74 65 73 74 63 61 73 65 28 29 20 63 61 6e 20 62  testcase() can b
3880: 65 20 75 73 65 64 20 74 6f 20 6d 61 6b 65 20 73  e used to make s
3890: 75 72 65 20 65 61 63 68 20 62 69 74 0a 2a 2a 20  ure each bit.** 
38a0: 69 73 20 73 69 67 6e 69 66 69 63 61 6e 74 20 61  is significant a
38b0: 6e 64 20 75 73 65 64 20 61 74 20 6c 65 61 73 74  nd used at least
38c0: 20 6f 6e 63 65 2e 20 20 4f 6e 20 73 77 69 74 63   once.  On switc
38d0: 68 20 73 74 61 74 65 6d 65 6e 74 73 0a 2a 2a 20  h statements.** 
38e0: 77 68 65 72 65 20 6d 75 6c 74 69 70 6c 65 20 63  where multiple c
38f0: 61 73 65 73 20 67 6f 20 74 6f 20 74 68 65 20 73  ases go to the s
3900: 61 6d 65 20 62 6c 6f 63 6b 20 6f 66 20 63 6f 64  ame block of cod
3910: 65 2c 20 74 65 73 74 63 61 73 65 28 29 0a 2a 2a  e, testcase().**
3920: 20 63 61 6e 20 69 6e 73 75 72 65 20 74 68 61 74   can insure that
3930: 20 61 6c 6c 20 63 61 73 65 73 20 61 72 65 20 65   all cases are e
3940: 76 61 6c 75 61 74 65 64 2e 0a 2a 2a 0a 2a 2f 0a  valuated..**.*/.
3950: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 43 4f  #ifdef SQLITE_CO
3960: 56 45 52 41 47 45 5f 54 45 53 54 0a 20 20 76 6f  VERAGE_TEST.  vo
3970: 69 64 20 73 71 6c 69 74 65 33 43 6f 76 65 72 61  id sqlite3Covera
3980: 67 65 28 69 6e 74 29 3b 0a 23 20 64 65 66 69 6e  ge(int);.# defin
3990: 65 20 74 65 73 74 63 61 73 65 28 58 29 20 20 69  e testcase(X)  i
39a0: 66 28 20 58 20 29 7b 20 73 71 6c 69 74 65 33 43  f( X ){ sqlite3C
39b0: 6f 76 65 72 61 67 65 28 5f 5f 4c 49 4e 45 5f 5f  overage(__LINE__
39c0: 29 3b 20 7d 0a 23 65 6c 73 65 0a 23 20 64 65 66  ); }.#else.# def
39d0: 69 6e 65 20 74 65 73 74 63 61 73 65 28 58 29 0a  ine testcase(X).
39e0: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68  #endif../*.** Th
39f0: 65 20 54 45 53 54 4f 4e 4c 59 20 6d 61 63 72 6f  e TESTONLY macro
3a00: 20 69 73 20 75 73 65 64 20 74 6f 20 65 6e 63 6c   is used to encl
3a10: 6f 73 65 20 76 61 72 69 61 62 6c 65 20 64 65 63  ose variable dec
3a20: 6c 61 72 61 74 69 6f 6e 73 20 6f 72 0a 2a 2a 20  larations or.** 
3a30: 6f 74 68 65 72 20 62 69 74 73 20 6f 66 20 63 6f  other bits of co
3a40: 64 65 20 74 68 61 74 20 61 72 65 20 6e 65 65 64  de that are need
3a50: 65 64 20 74 6f 20 73 75 70 70 6f 72 74 20 74 68  ed to support th
3a60: 65 20 61 72 67 75 6d 65 6e 74 73 0a 2a 2a 20 77  e arguments.** w
3a70: 69 74 68 69 6e 20 74 65 73 74 63 61 73 65 28 29  ithin testcase()
3a80: 20 61 6e 64 20 61 73 73 65 72 74 28 29 20 6d 61   and assert() ma
3a90: 63 72 6f 73 2e 0a 2a 2f 0a 23 69 66 20 21 64 65  cros..*/.#if !de
3aa0: 66 69 6e 65 64 28 4e 44 45 42 55 47 29 20 7c 7c  fined(NDEBUG) ||
3ab0: 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
3ac0: 43 4f 56 45 52 41 47 45 5f 54 45 53 54 29 0a 23  COVERAGE_TEST).#
3ad0: 20 64 65 66 69 6e 65 20 54 45 53 54 4f 4e 4c 59   define TESTONLY
3ae0: 28 58 29 20 20 58 0a 23 65 6c 73 65 0a 23 20 64  (X)  X.#else.# d
3af0: 65 66 69 6e 65 20 54 45 53 54 4f 4e 4c 59 28 58  efine TESTONLY(X
3b00: 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  ).#endif../*.** 
3b10: 53 6f 6d 65 74 69 6d 65 73 20 77 65 20 6e 65 65  Sometimes we nee
3b20: 64 20 61 20 73 6d 61 6c 6c 20 61 6d 6f 75 6e 74  d a small amount
3b30: 20 6f 66 20 63 6f 64 65 20 73 75 63 68 20 61 73   of code such as
3b40: 20 61 20 76 61 72 69 61 62 6c 65 20 69 6e 69 74   a variable init
3b50: 69 61 6c 69 7a 61 74 69 6f 6e 0a 2a 2a 20 74 6f  ialization.** to
3b60: 20 73 65 74 75 70 20 66 6f 72 20 61 20 6c 61 74   setup for a lat
3b70: 65 72 20 61 73 73 65 72 74 28 29 20 73 74 61 74  er assert() stat
3b80: 65 6d 65 6e 74 2e 20 20 57 65 20 64 6f 20 6e 6f  ement.  We do no
3b90: 74 20 77 61 6e 74 20 74 68 69 73 20 63 6f 64 65  t want this code
3ba0: 20 74 6f 0a 2a 2a 20 61 70 70 65 61 72 20 77 68   to.** appear wh
3bb0: 65 6e 20 61 73 73 65 72 74 28 29 20 69 73 20 64  en assert() is d
3bc0: 69 73 61 62 6c 65 64 2e 20 20 54 68 65 20 66 6f  isabled.  The fo
3bd0: 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 20 69 73  llowing macro is
3be0: 20 74 68 65 72 65 66 6f 72 65 0a 2a 2a 20 75 73   therefore.** us
3bf0: 65 64 20 74 6f 20 63 6f 6e 74 61 69 6e 20 74 68  ed to contain th
3c00: 61 74 20 73 65 74 75 70 20 63 6f 64 65 2e 20 20  at setup code.  
3c10: 54 68 65 20 22 56 56 41 22 20 61 63 72 6f 6e 79  The "VVA" acrony
3c20: 6d 20 73 74 61 6e 64 73 20 66 6f 72 0a 2a 2a 20  m stands for.** 
3c30: 22 56 65 72 69 66 69 63 61 74 69 6f 6e 2c 20 56  "Verification, V
3c40: 61 6c 69 64 61 74 69 6f 6e 2c 20 61 6e 64 20 41  alidation, and A
3c50: 63 63 72 65 64 69 74 61 74 69 6f 6e 22 2e 20 20  ccreditation".  
3c60: 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20  In other words, 
3c70: 74 68 65 0a 2a 2a 20 63 6f 64 65 20 77 69 74 68  the.** code with
3c80: 69 6e 20 56 56 41 5f 4f 4e 4c 59 28 29 20 77 69  in VVA_ONLY() wi
3c90: 6c 6c 20 6f 6e 6c 79 20 72 75 6e 20 64 75 72 69  ll only run duri
3ca0: 6e 67 20 76 65 72 69 66 69 63 61 74 69 6f 6e 20  ng verification 
3cb0: 70 72 6f 63 65 73 73 65 73 2e 0a 2a 2f 0a 23 69  processes..*/.#i
3cc0: 66 6e 64 65 66 20 4e 44 45 42 55 47 0a 23 20 64  fndef NDEBUG.# d
3cd0: 65 66 69 6e 65 20 56 56 41 5f 4f 4e 4c 59 28 58  efine VVA_ONLY(X
3ce0: 29 20 20 58 0a 23 65 6c 73 65 0a 23 20 64 65 66  )  X.#else.# def
3cf0: 69 6e 65 20 56 56 41 5f 4f 4e 4c 59 28 58 29 0a  ine VVA_ONLY(X).
3d00: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68  #endif../*.** Th
3d10: 65 20 41 4c 57 41 59 53 20 61 6e 64 20 4e 45 56  e ALWAYS and NEV
3d20: 45 52 20 6d 61 63 72 6f 73 20 73 75 72 72 6f 75  ER macros surrou
3d30: 6e 64 20 62 6f 6f 6c 65 61 6e 20 65 78 70 72 65  nd boolean expre
3d40: 73 73 69 6f 6e 73 20 77 68 69 63 68 0a 2a 2a 20  ssions which.** 
3d50: 61 72 65 20 69 6e 74 65 6e 64 65 64 20 74 6f 20  are intended to 
3d60: 61 6c 77 61 79 73 20 62 65 20 74 72 75 65 20 6f  always be true o
3d70: 72 20 66 61 6c 73 65 2c 20 72 65 73 70 65 63 74  r false, respect
3d80: 69 76 65 6c 79 2e 20 20 53 75 63 68 0a 2a 2a 20  ively.  Such.** 
3d90: 65 78 70 72 65 73 73 69 6f 6e 73 20 63 6f 75 6c  expressions coul
3da0: 64 20 62 65 20 6f 6d 69 74 74 65 64 20 66 72 6f  d be omitted fro
3db0: 6d 20 74 68 65 20 63 6f 64 65 20 63 6f 6d 70 6c  m the code compl
3dc0: 65 74 65 6c 79 2e 20 20 42 75 74 20 74 68 65 79  etely.  But they
3dd0: 0a 2a 2a 20 61 72 65 20 69 6e 63 6c 75 64 65 64  .** are included
3de0: 20 69 6e 20 61 20 66 65 77 20 63 61 73 65 73 20   in a few cases 
3df0: 69 6e 20 6f 72 64 65 72 20 74 6f 20 65 6e 68 61  in order to enha
3e00: 6e 63 65 20 74 68 65 20 72 65 73 69 6c 69 65 6e  nce the resilien
3e10: 63 65 0a 2a 2a 20 6f 66 20 53 51 4c 69 74 65 20  ce.** of SQLite 
3e20: 74 6f 20 75 6e 65 78 70 65 63 74 65 64 20 62 65  to unexpected be
3e30: 68 61 76 69 6f 72 20 2d 20 74 6f 20 6d 61 6b 65  havior - to make
3e40: 20 74 68 65 20 63 6f 64 65 20 22 73 65 6c 66 2d   the code "self-
3e50: 68 65 61 6c 69 6e 67 22 0a 2a 2a 20 6f 72 20 22  healing".** or "
3e60: 64 75 63 74 69 6c 65 22 20 72 61 74 68 65 72 20  ductile" rather 
3e70: 74 68 61 6e 20 62 65 69 6e 67 20 22 62 72 69 74  than being "brit
3e80: 74 6c 65 22 20 61 6e 64 20 63 72 61 73 68 69 6e  tle" and crashin
3e90: 67 20 61 74 20 74 68 65 20 66 69 72 73 74 0a 2a  g at the first.*
3ea0: 2a 20 68 69 6e 74 20 6f 66 20 75 6e 70 6c 61 6e  * hint of unplan
3eb0: 6e 65 64 20 62 65 68 61 76 69 6f 72 2e 0a 2a 2a  ned behavior..**
3ec0: 0a 2a 2a 20 49 6e 20 6f 74 68 65 72 20 77 6f 72  .** In other wor
3ed0: 64 73 2c 20 41 4c 57 41 59 53 20 61 6e 64 20 4e  ds, ALWAYS and N
3ee0: 45 56 45 52 20 61 72 65 20 61 64 64 65 64 20 66  EVER are added f
3ef0: 6f 72 20 64 65 66 65 6e 73 69 76 65 20 63 6f 64  or defensive cod
3f00: 65 2e 0a 2a 2a 0a 2a 2a 20 57 68 65 6e 20 64 6f  e..**.** When do
3f10: 69 6e 67 20 63 6f 76 65 72 61 67 65 20 74 65 73  ing coverage tes
3f20: 74 69 6e 67 20 41 4c 57 41 59 53 20 61 6e 64 20  ting ALWAYS and 
3f30: 4e 45 56 45 52 20 61 72 65 20 68 61 72 64 2d 63  NEVER are hard-c
3f40: 6f 64 65 64 20 74 6f 0a 2a 2a 20 62 65 20 74 72  oded to.** be tr
3f50: 75 65 20 61 6e 64 20 66 61 6c 73 65 20 73 6f 20  ue and false so 
3f60: 74 68 61 74 20 74 68 65 20 75 6e 72 65 61 63 68  that the unreach
3f70: 61 62 6c 65 20 63 6f 64 65 20 74 68 65 79 20 73  able code they s
3f80: 70 65 63 69 66 79 20 77 69 6c 6c 0a 2a 2a 20 6e  pecify will.** n
3f90: 6f 74 20 62 65 20 63 6f 75 6e 74 65 64 20 61 73  ot be counted as
3fa0: 20 75 6e 74 65 73 74 65 64 20 63 6f 64 65 2e 0a   untested code..
3fb0: 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53  */.#if defined(S
3fc0: 51 4c 49 54 45 5f 43 4f 56 45 52 41 47 45 5f 54  QLITE_COVERAGE_T
3fd0: 45 53 54 29 20 7c 7c 20 64 65 66 69 6e 65 64 28  EST) || defined(
3fe0: 53 51 4c 49 54 45 5f 4d 55 54 41 54 49 4f 4e 5f  SQLITE_MUTATION_
3ff0: 54 45 53 54 29 0a 23 20 64 65 66 69 6e 65 20 41  TEST).# define A
4000: 4c 57 41 59 53 28 58 29 20 20 20 20 20 20 28 31  LWAYS(X)      (1
4010: 29 0a 23 20 64 65 66 69 6e 65 20 4e 45 56 45 52  ).# define NEVER
4020: 28 58 29 20 20 20 20 20 20 20 28 30 29 0a 23 65  (X)       (0).#e
4030: 6c 69 66 20 21 64 65 66 69 6e 65 64 28 4e 44 45  lif !defined(NDE
4040: 42 55 47 29 0a 23 20 64 65 66 69 6e 65 20 41 4c  BUG).# define AL
4050: 57 41 59 53 28 58 29 20 20 20 20 20 20 28 28 58  WAYS(X)      ((X
4060: 29 3f 31 3a 28 61 73 73 65 72 74 28 30 29 2c 30  )?1:(assert(0),0
4070: 29 29 0a 23 20 64 65 66 69 6e 65 20 4e 45 56 45  )).# define NEVE
4080: 52 28 58 29 20 20 20 20 20 20 20 28 28 58 29 3f  R(X)       ((X)?
4090: 28 61 73 73 65 72 74 28 30 29 2c 31 29 3a 30 29  (assert(0),1):0)
40a0: 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
40b0: 41 4c 57 41 59 53 28 58 29 20 20 20 20 20 20 28  ALWAYS(X)      (
40c0: 58 29 0a 23 20 64 65 66 69 6e 65 20 4e 45 56 45  X).# define NEVE
40d0: 52 28 58 29 20 20 20 20 20 20 20 28 58 29 0a 23  R(X)       (X).#
40e0: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 53 6f 6d  endif../*.** Som
40f0: 65 20 63 6f 6e 64 69 74 69 6f 6e 61 6c 73 20 61  e conditionals a
4100: 72 65 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73  re optimizations
4110: 20 6f 6e 6c 79 2e 20 20 49 6e 20 6f 74 68 65 72   only.  In other
4120: 20 77 6f 72 64 73 2c 20 69 66 20 74 68 65 0a 2a   words, if the.*
4130: 2a 20 63 6f 6e 64 69 74 69 6f 6e 61 6c 73 20 61  * conditionals a
4140: 72 65 20 72 65 70 6c 61 63 65 64 20 77 69 74 68  re replaced with
4150: 20 61 20 63 6f 6e 73 74 61 6e 74 20 31 20 28 74   a constant 1 (t
4160: 72 75 65 29 20 6f 72 20 30 20 28 66 61 6c 73 65  rue) or 0 (false
4170: 29 20 74 68 65 6e 0a 2a 2a 20 74 68 65 20 63 6f  ) then.** the co
4180: 72 72 65 63 74 20 61 6e 73 77 65 72 20 69 73 20  rrect answer is 
4190: 73 74 69 6c 6c 20 6f 62 74 61 69 6e 65 64 2c 20  still obtained, 
41a0: 74 68 6f 75 67 68 20 70 65 72 68 61 70 73 20 6e  though perhaps n
41b0: 6f 74 20 61 73 20 71 75 69 63 6b 6c 79 2e 0a 2a  ot as quickly..*
41c0: 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69  *.** The followi
41d0: 6e 67 20 6d 61 63 72 6f 73 20 6d 61 72 6b 20 74  ng macros mark t
41e0: 68 65 73 65 20 6f 70 74 69 6d 69 7a 61 74 69 6f  hese optimizatio
41f0: 6e 73 20 63 6f 6e 64 69 74 69 6f 6e 61 6c 73 2e  ns conditionals.
4200: 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28  .*/.#if defined(
4210: 53 51 4c 49 54 45 5f 4d 55 54 41 54 49 4f 4e 5f  SQLITE_MUTATION_
4220: 54 45 53 54 29 0a 23 20 64 65 66 69 6e 65 20 4f  TEST).# define O
4230: 4b 5f 49 46 5f 41 4c 57 41 59 53 5f 54 52 55 45  K_IF_ALWAYS_TRUE
4240: 28 58 29 20 20 28 31 29 0a 23 20 64 65 66 69 6e  (X)  (1).# defin
4250: 65 20 4f 4b 5f 49 46 5f 41 4c 57 41 59 53 5f 46  e OK_IF_ALWAYS_F
4260: 41 4c 53 45 28 58 29 20 28 30 29 0a 23 65 6c 73  ALSE(X) (0).#els
4270: 65 0a 23 20 64 65 66 69 6e 65 20 4f 4b 5f 49 46  e.# define OK_IF
4280: 5f 41 4c 57 41 59 53 5f 54 52 55 45 28 58 29 20  _ALWAYS_TRUE(X) 
4290: 20 28 58 29 0a 23 20 64 65 66 69 6e 65 20 4f 4b   (X).# define OK
42a0: 5f 49 46 5f 41 4c 57 41 59 53 5f 46 41 4c 53 45  _IF_ALWAYS_FALSE
42b0: 28 58 29 20 28 58 29 0a 23 65 6e 64 69 66 0a 0a  (X) (X).#endif..
42c0: 2f 2a 0a 2a 2a 20 53 6f 6d 65 20 6d 61 6c 6c 6f  /*.** Some mallo
42d0: 63 20 66 61 69 6c 75 72 65 73 20 61 72 65 20 6f  c failures are o
42e0: 6e 6c 79 20 70 6f 73 73 69 62 6c 65 20 69 66 20  nly possible if 
42f0: 53 51 4c 49 54 45 5f 54 45 53 54 5f 52 45 41 4c  SQLITE_TEST_REAL
4300: 4c 4f 43 5f 53 54 52 45 53 53 20 69 73 0a 2a 2a  LOC_STRESS is.**
4310: 20 64 65 66 69 6e 65 64 2e 20 20 57 65 20 6e 65   defined.  We ne
4320: 65 64 20 74 6f 20 64 65 66 65 6e 64 20 61 67 61  ed to defend aga
4330: 69 6e 73 74 20 74 68 6f 73 65 20 66 61 69 6c 75  inst those failu
4340: 72 65 73 20 77 68 65 6e 20 74 65 73 74 69 6e 67  res when testing
4350: 20 77 69 74 68 0a 2a 2a 20 53 51 4c 49 54 45 5f   with.** SQLITE_
4360: 54 45 53 54 5f 52 45 41 4c 4c 4f 43 5f 53 54 52  TEST_REALLOC_STR
4370: 45 53 53 2c 20 62 75 74 20 77 65 20 64 6f 6e 27  ESS, but we don'
4380: 74 20 77 61 6e 74 20 74 68 65 20 75 6e 72 65 61  t want the unrea
4390: 63 68 61 62 6c 65 20 62 72 61 6e 63 68 65 73 0a  chable branches.
43a0: 2a 2a 20 64 75 72 69 6e 67 20 61 20 6e 6f 72 6d  ** during a norm
43b0: 61 6c 20 62 75 69 6c 64 2e 20 20 54 68 65 20 66  al build.  The f
43c0: 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 20 63  ollowing macro c
43d0: 61 6e 20 62 65 20 75 73 65 64 20 74 6f 20 64 69  an be used to di
43e0: 73 61 62 6c 65 20 74 65 73 74 73 0a 2a 2a 20 74  sable tests.** t
43f0: 68 61 74 20 61 72 65 20 61 6c 77 61 79 73 20 66  hat are always f
4400: 61 6c 73 65 20 65 78 63 65 70 74 20 77 68 65 6e  alse except when
4410: 20 53 51 4c 49 54 45 5f 54 45 53 54 5f 52 45 41   SQLITE_TEST_REA
4420: 4c 4c 4f 43 5f 53 54 52 45 53 53 20 69 73 20 73  LLOC_STRESS is s
4430: 65 74 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e  et..*/.#if defin
4440: 65 64 28 53 51 4c 49 54 45 5f 54 45 53 54 5f 52  ed(SQLITE_TEST_R
4450: 45 41 4c 4c 4f 43 5f 53 54 52 45 53 53 29 0a 23  EALLOC_STRESS).#
4460: 20 64 65 66 69 6e 65 20 4f 4e 4c 59 5f 49 46 5f   define ONLY_IF_
4470: 52 45 41 4c 4c 4f 43 5f 53 54 52 45 53 53 28 58  REALLOC_STRESS(X
4480: 29 20 20 28 58 29 0a 23 65 6c 69 66 20 21 64 65  )  (X).#elif !de
4490: 66 69 6e 65 64 28 4e 44 45 42 55 47 29 0a 23 20  fined(NDEBUG).# 
44a0: 64 65 66 69 6e 65 20 4f 4e 4c 59 5f 49 46 5f 52  define ONLY_IF_R
44b0: 45 41 4c 4c 4f 43 5f 53 54 52 45 53 53 28 58 29  EALLOC_STRESS(X)
44c0: 20 20 28 28 58 29 3f 28 61 73 73 65 72 74 28 30    ((X)?(assert(0
44d0: 29 2c 31 29 3a 30 29 0a 23 65 6c 73 65 0a 23 20  ),1):0).#else.# 
44e0: 64 65 66 69 6e 65 20 4f 4e 4c 59 5f 49 46 5f 52  define ONLY_IF_R
44f0: 45 41 4c 4c 4f 43 5f 53 54 52 45 53 53 28 58 29  EALLOC_STRESS(X)
4500: 20 20 28 30 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a    (0).#endif../*
4510: 0a 2a 2a 20 44 65 63 6c 61 72 61 74 69 6f 6e 73  .** Declarations
4520: 20 75 73 65 64 20 66 6f 72 20 74 72 61 63 69 6e   used for tracin
4530: 67 20 74 68 65 20 6f 70 65 72 61 74 69 6e 67 20  g the operating 
4540: 73 79 73 74 65 6d 20 69 6e 74 65 72 66 61 63 65  system interface
4550: 73 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65  s..*/.#if define
4560: 64 28 53 51 4c 49 54 45 5f 46 4f 52 43 45 5f 4f  d(SQLITE_FORCE_O
4570: 53 5f 54 52 41 43 45 29 20 7c 7c 20 64 65 66 69  S_TRACE) || defi
4580: 6e 65 64 28 53 51 4c 49 54 45 5f 54 45 53 54 29  ned(SQLITE_TEST)
4590: 20 7c 7c 20 5c 0a 20 20 20 20 28 64 65 66 69 6e   || \.    (defin
45a0: 65 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47 29  ed(SQLITE_DEBUG)
45b0: 20 26 26 20 53 51 4c 49 54 45 5f 4f 53 5f 57 49   && SQLITE_OS_WI
45c0: 4e 29 0a 20 20 65 78 74 65 72 6e 20 69 6e 74 20  N).  extern int 
45d0: 73 71 6c 69 74 65 33 4f 53 54 72 61 63 65 3b 0a  sqlite3OSTrace;.
45e0: 23 20 64 65 66 69 6e 65 20 4f 53 54 52 41 43 45  # define OSTRACE
45f0: 28 58 29 20 20 20 20 20 20 20 20 20 20 69 66 28  (X)          if(
4600: 20 73 71 6c 69 74 65 33 4f 53 54 72 61 63 65 20   sqlite3OSTrace 
4610: 29 20 73 71 6c 69 74 65 33 44 65 62 75 67 50 72  ) sqlite3DebugPr
4620: 69 6e 74 66 20 58 0a 23 20 64 65 66 69 6e 65 20  intf X.# define 
4630: 53 51 4c 49 54 45 5f 48 41 56 45 5f 4f 53 5f 54  SQLITE_HAVE_OS_T
4640: 52 41 43 45 0a 23 65 6c 73 65 0a 23 20 64 65 66  RACE.#else.# def
4650: 69 6e 65 20 4f 53 54 52 41 43 45 28 58 29 0a 23  ine OSTRACE(X).#
4660: 20 75 6e 64 65 66 20 20 53 51 4c 49 54 45 5f 48   undef  SQLITE_H
4670: 41 56 45 5f 4f 53 5f 54 52 41 43 45 0a 23 65 6e  AVE_OS_TRACE.#en
4680: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 73 20 74 68  dif../*.** Is th
4690: 65 20 73 71 6c 69 74 65 33 45 72 72 4e 61 6d 65  e sqlite3ErrName
46a0: 28 29 20 66 75 6e 63 74 69 6f 6e 20 6e 65 65 64  () function need
46b0: 65 64 20 69 6e 20 74 68 65 20 62 75 69 6c 64 3f  ed in the build?
46c0: 20 20 43 75 72 72 65 6e 74 6c 79 2c 0a 2a 2a 20    Currently,.** 
46d0: 69 74 20 69 73 20 6e 65 65 64 65 64 20 62 79 20  it is needed by 
46e0: 22 6d 75 74 65 78 5f 77 33 32 2e 63 22 20 28 77  "mutex_w32.c" (w
46f0: 68 65 6e 20 64 65 62 75 67 67 69 6e 67 29 2c 20  hen debugging), 
4700: 22 6f 73 5f 77 69 6e 2e 63 22 20 28 77 68 65 6e  "os_win.c" (when
4710: 0a 2a 2a 20 4f 53 54 52 41 43 45 20 69 73 20 65  .** OSTRACE is e
4720: 6e 61 62 6c 65 64 29 2c 20 61 6e 64 20 62 79 20  nabled), and by 
4730: 73 65 76 65 72 61 6c 20 22 74 65 73 74 2a 2e 63  several "test*.c
4740: 22 20 66 69 6c 65 73 20 28 77 68 69 63 68 20 61  " files (which a
4750: 72 65 0a 2a 2a 20 63 6f 6d 70 69 6c 65 64 20 75  re.** compiled u
4760: 73 69 6e 67 20 53 51 4c 49 54 45 5f 54 45 53 54  sing SQLITE_TEST
4770: 29 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65  )..*/.#if define
4780: 64 28 53 51 4c 49 54 45 5f 48 41 56 45 5f 4f 53  d(SQLITE_HAVE_OS
4790: 5f 54 52 41 43 45 29 20 7c 7c 20 64 65 66 69 6e  _TRACE) || defin
47a0: 65 64 28 53 51 4c 49 54 45 5f 54 45 53 54 29 20  ed(SQLITE_TEST) 
47b0: 7c 7c 20 5c 0a 20 20 20 20 28 64 65 66 69 6e 65  || \.    (define
47c0: 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47 29 20  d(SQLITE_DEBUG) 
47d0: 26 26 20 53 51 4c 49 54 45 5f 4f 53 5f 57 49 4e  && SQLITE_OS_WIN
47e0: 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  ).# define SQLIT
47f0: 45 5f 4e 45 45 44 5f 45 52 52 5f 4e 41 4d 45 0a  E_NEED_ERR_NAME.
4800: 23 65 6c 73 65 0a 23 20 75 6e 64 65 66 20 20 53  #else.# undef  S
4810: 51 4c 49 54 45 5f 4e 45 45 44 5f 45 52 52 5f 4e  QLITE_NEED_ERR_N
4820: 41 4d 45 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  AME.#endif../*.*
4830: 2a 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  * SQLITE_ENABLE_
4840: 45 58 50 4c 41 49 4e 5f 43 4f 4d 4d 45 4e 54 53  EXPLAIN_COMMENTS
4850: 20 69 73 20 69 6e 63 6f 6d 70 61 74 69 62 6c 65   is incompatible
4860: 20 77 69 74 68 20 53 51 4c 49 54 45 5f 4f 4d 49   with SQLITE_OMI
4870: 54 5f 45 58 50 4c 41 49 4e 0a 2a 2f 0a 23 69 66  T_EXPLAIN.*/.#if
4880: 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
4890: 45 58 50 4c 41 49 4e 0a 23 20 75 6e 64 65 66 20  EXPLAIN.# undef 
48a0: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 45 58  SQLITE_ENABLE_EX
48b0: 50 4c 41 49 4e 5f 43 4f 4d 4d 45 4e 54 53 0a 23  PLAIN_COMMENTS.#
48c0: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 52 65 74  endif../*.** Ret
48d0: 75 72 6e 20 74 72 75 65 20 28 6e 6f 6e 2d 7a 65  urn true (non-ze
48e0: 72 6f 29 20 69 66 20 74 68 65 20 69 6e 70 75 74  ro) if the input
48f0: 20 69 73 20 61 6e 20 69 6e 74 65 67 65 72 20 74   is an integer t
4900: 68 61 74 20 69 73 20 74 6f 6f 20 6c 61 72 67 65  hat is too large
4910: 0a 2a 2a 20 74 6f 20 66 69 74 20 69 6e 20 33 32  .** to fit in 32
4920: 2d 62 69 74 73 2e 20 20 54 68 69 73 20 6d 61 63  -bits.  This mac
4930: 72 6f 20 69 73 20 75 73 65 64 20 69 6e 73 69 64  ro is used insid
4940: 65 20 6f 66 20 76 61 72 69 6f 75 73 20 74 65 73  e of various tes
4950: 74 63 61 73 65 28 29 0a 2a 2a 20 6d 61 63 72 6f  tcase().** macro
4960: 73 20 74 6f 20 76 65 72 69 66 79 20 74 68 61 74  s to verify that
4970: 20 77 65 20 68 61 76 65 20 74 65 73 74 65 64 20   we have tested 
4980: 53 51 4c 69 74 65 20 66 6f 72 20 6c 61 72 67 65  SQLite for large
4990: 2d 66 69 6c 65 20 73 75 70 70 6f 72 74 2e 0a 2a  -file support..*
49a0: 2f 0a 23 64 65 66 69 6e 65 20 49 53 5f 42 49 47  /.#define IS_BIG
49b0: 5f 49 4e 54 28 58 29 20 20 28 28 28 58 29 26 7e  _INT(X)  (((X)&~
49c0: 28 69 36 34 29 30 78 66 66 66 66 66 66 66 66 29  (i64)0xffffffff)
49d0: 21 3d 30 29 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  !=0)../*.** The 
49e0: 6d 61 63 72 6f 20 75 6e 6c 69 6b 65 6c 79 28 29  macro unlikely()
49f0: 20 69 73 20 61 20 68 69 6e 74 20 74 68 61 74 20   is a hint that 
4a00: 73 75 72 72 6f 75 6e 64 73 20 61 20 62 6f 6f 6c  surrounds a bool
4a10: 65 61 6e 0a 2a 2a 20 65 78 70 72 65 73 73 69 6f  ean.** expressio
4a20: 6e 20 74 68 61 74 20 69 73 20 75 73 75 61 6c 6c  n that is usuall
4a30: 79 20 66 61 6c 73 65 2e 20 20 4d 61 63 72 6f 20  y false.  Macro 
4a40: 6c 69 6b 65 6c 79 28 29 20 73 75 72 72 6f 75 6e  likely() surroun
4a50: 64 73 0a 2a 2a 20 61 20 62 6f 6f 6c 65 61 6e 20  ds.** a boolean 
4a60: 65 78 70 72 65 73 73 69 6f 6e 20 74 68 61 74 20  expression that 
4a70: 69 73 20 75 73 75 61 6c 6c 79 20 74 72 75 65 2e  is usually true.
4a80: 20 20 54 68 65 73 65 20 68 69 6e 74 73 20 63 6f    These hints co
4a90: 75 6c 64 2c 0a 2a 2a 20 69 6e 20 74 68 65 6f 72  uld,.** in theor
4aa0: 79 2c 20 62 65 20 75 73 65 64 20 62 79 20 74 68  y, be used by th
4ab0: 65 20 63 6f 6d 70 69 6c 65 72 20 74 6f 20 67 65  e compiler to ge
4ac0: 6e 65 72 61 74 65 20 62 65 74 74 65 72 20 63 6f  nerate better co
4ad0: 64 65 2c 20 62 75 74 0a 2a 2a 20 63 75 72 72 65  de, but.** curre
4ae0: 6e 74 6c 79 20 74 68 65 79 20 61 72 65 20 6a 75  ntly they are ju
4af0: 73 74 20 63 6f 6d 6d 65 6e 74 73 20 66 6f 72 20  st comments for 
4b00: 68 75 6d 61 6e 20 72 65 61 64 65 72 73 2e 0a 2a  human readers..*
4b10: 2f 0a 23 64 65 66 69 6e 65 20 6c 69 6b 65 6c 79  /.#define likely
4b20: 28 58 29 20 20 20 20 28 58 29 0a 23 64 65 66 69  (X)    (X).#defi
4b30: 6e 65 20 75 6e 6c 69 6b 65 6c 79 28 58 29 20 20  ne unlikely(X)  
4b40: 28 58 29 0a 0a 23 69 6e 63 6c 75 64 65 20 22 68  (X)..#include "h
4b50: 61 73 68 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20  ash.h".#include 
4b60: 22 70 61 72 73 65 2e 68 22 0a 23 69 6e 63 6c 75  "parse.h".#inclu
4b70: 64 65 20 3c 73 74 64 69 6f 2e 68 3e 0a 23 69 6e  de <stdio.h>.#in
4b80: 63 6c 75 64 65 20 3c 73 74 64 6c 69 62 2e 68 3e  clude <stdlib.h>
4b90: 0a 23 69 6e 63 6c 75 64 65 20 3c 73 74 72 69 6e  .#include <strin
4ba0: 67 2e 68 3e 0a 23 69 6e 63 6c 75 64 65 20 3c 61  g.h>.#include <a
4bb0: 73 73 65 72 74 2e 68 3e 0a 23 69 6e 63 6c 75 64  ssert.h>.#includ
4bc0: 65 20 3c 73 74 64 64 65 66 2e 68 3e 0a 0a 2f 2a  e <stddef.h>../*
4bd0: 0a 2a 2a 20 55 73 65 20 61 20 6d 61 63 72 6f 20  .** Use a macro 
4be0: 74 6f 20 72 65 70 6c 61 63 65 20 6d 65 6d 63 70  to replace memcp
4bf0: 79 28 29 20 69 66 20 63 6f 6d 70 69 6c 65 64 20  y() if compiled 
4c00: 77 69 74 68 20 53 51 4c 49 54 45 5f 49 4e 4c 49  with SQLITE_INLI
4c10: 4e 45 5f 4d 45 4d 43 50 59 2e 0a 2a 2a 20 54 68  NE_MEMCPY..** Th
4c20: 69 73 20 61 6c 6c 6f 77 73 20 62 65 74 74 65 72  is allows better
4c30: 20 6d 65 61 73 75 72 65 6d 65 6e 74 73 20 6f 66   measurements of
4c40: 20 77 68 65 72 65 20 6d 65 6d 63 70 79 28 29 20   where memcpy() 
4c50: 69 73 20 75 73 65 64 20 77 68 65 6e 20 72 75 6e  is used when run
4c60: 6e 69 6e 67 0a 2a 2a 20 63 61 63 68 65 67 72 69  ning.** cachegri
4c70: 6e 64 2e 20 20 42 75 74 20 74 68 69 73 20 6d 61  nd.  But this ma
4c80: 63 72 6f 20 76 65 72 73 69 6f 6e 20 6f 66 20 6d  cro version of m
4c90: 65 6d 63 70 79 28 29 20 69 73 20 76 65 72 79 20  emcpy() is very 
4ca0: 73 6c 6f 77 20 73 6f 20 69 74 0a 2a 2a 20 73 68  slow so it.** sh
4cb0: 6f 75 6c 64 20 6e 6f 74 20 62 65 20 75 73 65 64  ould not be used
4cc0: 20 69 6e 20 70 72 6f 64 75 63 74 69 6f 6e 2e 20   in production. 
4cd0: 20 54 68 69 73 20 69 73 20 61 20 70 65 72 66 6f   This is a perfo
4ce0: 72 6d 61 6e 63 65 20 6d 65 61 73 75 72 65 6d 65  rmance measureme
4cf0: 6e 74 0a 2a 2a 20 68 61 63 6b 20 6f 6e 6c 79 2e  nt.** hack only.
4d00: 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54  .*/.#ifdef SQLIT
4d10: 45 5f 49 4e 4c 49 4e 45 5f 4d 45 4d 43 50 59 0a  E_INLINE_MEMCPY.
4d20: 23 20 64 65 66 69 6e 65 20 6d 65 6d 63 70 79 28  # define memcpy(
4d30: 44 2c 53 2c 4e 29 20 7b 63 68 61 72 2a 78 78 64  D,S,N) {char*xxd
4d40: 3d 28 63 68 61 72 2a 29 28 44 29 3b 63 6f 6e 73  =(char*)(D);cons
4d50: 74 20 63 68 61 72 2a 78 78 73 3d 28 63 6f 6e 73  t char*xxs=(cons
4d60: 74 20 63 68 61 72 2a 29 28 53 29 3b 5c 0a 20 20  t char*)(S);\.  
4d70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4d80: 20 20 20 20 20 20 69 6e 74 20 78 78 6e 3d 28 4e        int xxn=(N
4d90: 29 3b 77 68 69 6c 65 28 78 78 6e 2d 2d 3e 30 29  );while(xxn-->0)
4da0: 2a 28 78 78 64 2b 2b 29 3d 2a 28 78 78 73 2b 2b  *(xxd++)=*(xxs++
4db0: 29 3b 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  );}.#endif../*.*
4dc0: 2a 20 49 66 20 63 6f 6d 70 69 6c 69 6e 67 20 66  * If compiling f
4dd0: 6f 72 20 61 20 70 72 6f 63 65 73 73 6f 72 20 74  or a processor t
4de0: 68 61 74 20 6c 61 63 6b 73 20 66 6c 6f 61 74 69  hat lacks floati
4df0: 6e 67 20 70 6f 69 6e 74 20 73 75 70 70 6f 72 74  ng point support
4e00: 2c 0a 2a 2a 20 73 75 62 73 74 69 74 75 74 65 20  ,.** substitute 
4e10: 69 6e 74 65 67 65 72 20 66 6f 72 20 66 6c 6f 61  integer for floa
4e20: 74 69 6e 67 2d 70 6f 69 6e 74 0a 2a 2f 0a 23 69  ting-point.*/.#i
4e30: 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  fdef SQLITE_OMIT
4e40: 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 0a  _FLOATING_POINT.
4e50: 23 20 64 65 66 69 6e 65 20 64 6f 75 62 6c 65 20  # define double 
4e60: 73 71 6c 69 74 65 5f 69 6e 74 36 34 0a 23 20 64  sqlite_int64.# d
4e70: 65 66 69 6e 65 20 66 6c 6f 61 74 20 73 71 6c 69  efine float sqli
4e80: 74 65 5f 69 6e 74 36 34 0a 23 20 64 65 66 69 6e  te_int64.# defin
4e90: 65 20 4c 4f 4e 47 44 4f 55 42 4c 45 5f 54 59 50  e LONGDOUBLE_TYP
4ea0: 45 20 73 71 6c 69 74 65 5f 69 6e 74 36 34 0a 23  E sqlite_int64.#
4eb0: 20 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 42   ifndef SQLITE_B
4ec0: 49 47 5f 44 42 4c 0a 23 20 20 20 64 65 66 69 6e  IG_DBL.#   defin
4ed0: 65 20 53 51 4c 49 54 45 5f 42 49 47 5f 44 42 4c  e SQLITE_BIG_DBL
4ee0: 20 28 28 28 73 71 6c 69 74 65 33 5f 69 6e 74 36   (((sqlite3_int6
4ef0: 34 29 31 29 3c 3c 35 30 29 0a 23 20 65 6e 64 69  4)1)<<50).# endi
4f00: 66 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  f.# define SQLIT
4f10: 45 5f 4f 4d 49 54 5f 44 41 54 45 54 49 4d 45 5f  E_OMIT_DATETIME_
4f20: 46 55 4e 43 53 20 31 0a 23 20 64 65 66 69 6e 65  FUNCS 1.# define
4f30: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 41   SQLITE_OMIT_TRA
4f40: 43 45 20 31 0a 23 20 75 6e 64 65 66 20 53 51 4c  CE 1.# undef SQL
4f50: 49 54 45 5f 4d 49 58 45 44 5f 45 4e 44 49 41 4e  ITE_MIXED_ENDIAN
4f60: 5f 36 34 42 49 54 5f 46 4c 4f 41 54 0a 23 20 75  _64BIT_FLOAT.# u
4f70: 6e 64 65 66 20 53 51 4c 49 54 45 5f 48 41 56 45  ndef SQLITE_HAVE
4f80: 5f 49 53 4e 41 4e 0a 23 65 6e 64 69 66 0a 23 69  _ISNAN.#endif.#i
4f90: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 42 49 47  fndef SQLITE_BIG
4fa0: 5f 44 42 4c 0a 23 20 64 65 66 69 6e 65 20 53 51  _DBL.# define SQ
4fb0: 4c 49 54 45 5f 42 49 47 5f 44 42 4c 20 28 31 65  LITE_BIG_DBL (1e
4fc0: 39 39 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  99).#endif../*.*
4fd0: 2a 20 4f 4d 49 54 5f 54 45 4d 50 44 42 20 69 73  * OMIT_TEMPDB is
4fe0: 20 73 65 74 20 74 6f 20 31 20 69 66 20 53 51 4c   set to 1 if SQL
4ff0: 49 54 45 5f 4f 4d 49 54 5f 54 45 4d 50 44 42 20  ITE_OMIT_TEMPDB 
5000: 69 73 20 64 65 66 69 6e 65 64 2c 20 6f 72 20 30  is defined, or 0
5010: 0a 2a 2a 20 61 66 74 65 72 77 61 72 64 2e 20 48  .** afterward. H
5020: 61 76 69 6e 67 20 74 68 69 73 20 6d 61 63 72 6f  aving this macro
5030: 20 61 6c 6c 6f 77 73 20 75 73 20 74 6f 20 63 61   allows us to ca
5040: 75 73 65 20 74 68 65 20 43 20 63 6f 6d 70 69 6c  use the C compil
5050: 65 72 0a 2a 2a 20 74 6f 20 6f 6d 69 74 20 63 6f  er.** to omit co
5060: 64 65 20 75 73 65 64 20 62 79 20 54 45 4d 50 20  de used by TEMP 
5070: 74 61 62 6c 65 73 20 77 69 74 68 6f 75 74 20 6d  tables without m
5080: 65 73 73 79 20 23 69 66 6e 64 65 66 20 73 74 61  essy #ifndef sta
5090: 74 65 6d 65 6e 74 73 2e 0a 2a 2f 0a 23 69 66 64  tements..*/.#ifd
50a0: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54  ef SQLITE_OMIT_T
50b0: 45 4d 50 44 42 0a 23 64 65 66 69 6e 65 20 4f 4d  EMPDB.#define OM
50c0: 49 54 5f 54 45 4d 50 44 42 20 31 0a 23 65 6c 73  IT_TEMPDB 1.#els
50d0: 65 0a 23 64 65 66 69 6e 65 20 4f 4d 49 54 5f 54  e.#define OMIT_T
50e0: 45 4d 50 44 42 20 30 0a 23 65 6e 64 69 66 0a 0a  EMPDB 0.#endif..
50f0: 2f 2a 0a 2a 2a 20 54 68 65 20 22 66 69 6c 65 20  /*.** The "file 
5100: 66 6f 72 6d 61 74 22 20 6e 75 6d 62 65 72 20 69  format" number i
5110: 73 20 61 6e 20 69 6e 74 65 67 65 72 20 74 68 61  s an integer tha
5120: 74 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64  t is incremented
5130: 20 77 68 65 6e 65 76 65 72 0a 2a 2a 20 74 68 65   whenever.** the
5140: 20 56 44 42 45 2d 6c 65 76 65 6c 20 66 69 6c 65   VDBE-level file
5150: 20 66 6f 72 6d 61 74 20 63 68 61 6e 67 65 73 2e   format changes.
5160: 20 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20    The following 
5170: 6d 61 63 72 6f 73 20 64 65 66 69 6e 65 20 74 68  macros define th
5180: 65 0a 2a 2a 20 74 68 65 20 64 65 66 61 75 6c 74  e.** the default
5190: 20 66 69 6c 65 20 66 6f 72 6d 61 74 20 66 6f 72   file format for
51a0: 20 6e 65 77 20 64 61 74 61 62 61 73 65 73 20 61   new databases a
51b0: 6e 64 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 66  nd the maximum f
51c0: 69 6c 65 20 66 6f 72 6d 61 74 0a 2a 2a 20 74 68  ile format.** th
51d0: 61 74 20 74 68 65 20 6c 69 62 72 61 72 79 20 63  at the library c
51e0: 61 6e 20 72 65 61 64 2e 0a 2a 2f 0a 23 64 65 66  an read..*/.#def
51f0: 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 58 5f 46  ine SQLITE_MAX_F
5200: 49 4c 45 5f 46 4f 52 4d 41 54 20 34 0a 23 69 66  ILE_FORMAT 4.#if
5210: 6e 64 65 66 20 53 51 4c 49 54 45 5f 44 45 46 41  ndef SQLITE_DEFA
5220: 55 4c 54 5f 46 49 4c 45 5f 46 4f 52 4d 41 54 0a  ULT_FILE_FORMAT.
5230: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
5240: 44 45 46 41 55 4c 54 5f 46 49 4c 45 5f 46 4f 52  DEFAULT_FILE_FOR
5250: 4d 41 54 20 34 0a 23 65 6e 64 69 66 0a 0a 2f 2a  MAT 4.#endif../*
5260: 0a 2a 2a 20 44 65 74 65 72 6d 69 6e 65 20 77 68  .** Determine wh
5270: 65 74 68 65 72 20 74 72 69 67 67 65 72 73 20 61  ether triggers a
5280: 72 65 20 72 65 63 75 72 73 69 76 65 20 62 79 20  re recursive by 
5290: 64 65 66 61 75 6c 74 2e 20 20 54 68 69 73 20 63  default.  This c
52a0: 61 6e 20 62 65 0a 2a 2a 20 63 68 61 6e 67 65 64  an be.** changed
52b0: 20 61 74 20 72 75 6e 2d 74 69 6d 65 20 75 73 69   at run-time usi
52c0: 6e 67 20 61 20 70 72 61 67 6d 61 2e 0a 2a 2f 0a  ng a pragma..*/.
52d0: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 44  #ifndef SQLITE_D
52e0: 45 46 41 55 4c 54 5f 52 45 43 55 52 53 49 56 45  EFAULT_RECURSIVE
52f0: 5f 54 52 49 47 47 45 52 53 0a 23 20 64 65 66 69  _TRIGGERS.# defi
5300: 6e 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c  ne SQLITE_DEFAUL
5310: 54 5f 52 45 43 55 52 53 49 56 45 5f 54 52 49 47  T_RECURSIVE_TRIG
5320: 47 45 52 53 20 30 0a 23 65 6e 64 69 66 0a 0a 2f  GERS 0.#endif../
5330: 2a 0a 2a 2a 20 50 72 6f 76 69 64 65 20 61 20 64  *.** Provide a d
5340: 65 66 61 75 6c 74 20 76 61 6c 75 65 20 66 6f 72  efault value for
5350: 20 53 51 4c 49 54 45 5f 54 45 4d 50 5f 53 54 4f   SQLITE_TEMP_STO
5360: 52 45 20 69 6e 20 63 61 73 65 20 69 74 20 69 73  RE in case it is
5370: 20 6e 6f 74 20 73 70 65 63 69 66 69 65 64 0a 2a   not specified.*
5380: 2a 20 6f 6e 20 74 68 65 20 63 6f 6d 6d 61 6e 64  * on the command
5390: 2d 6c 69 6e 65 0a 2a 2f 0a 23 69 66 6e 64 65 66  -line.*/.#ifndef
53a0: 20 53 51 4c 49 54 45 5f 54 45 4d 50 5f 53 54 4f   SQLITE_TEMP_STO
53b0: 52 45 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  RE.# define SQLI
53c0: 54 45 5f 54 45 4d 50 5f 53 54 4f 52 45 20 31 0a  TE_TEMP_STORE 1.
53d0: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 66  #endif../*.** If
53e0: 20 6e 6f 20 76 61 6c 75 65 20 68 61 73 20 62 65   no value has be
53f0: 65 6e 20 70 72 6f 76 69 64 65 64 20 66 6f 72 20  en provided for 
5400: 53 51 4c 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45  SQLITE_MAX_WORKE
5410: 52 5f 54 48 52 45 41 44 53 2c 20 6f 72 20 69 66  R_THREADS, or if
5420: 0a 2a 2a 20 53 51 4c 49 54 45 5f 54 45 4d 50 5f  .** SQLITE_TEMP_
5430: 53 54 4f 52 45 20 69 73 20 73 65 74 20 74 6f 20  STORE is set to 
5440: 33 20 28 6e 65 76 65 72 20 75 73 65 20 74 65 6d  3 (never use tem
5450: 70 6f 72 61 72 79 20 66 69 6c 65 73 29 2c 20 73  porary files), s
5460: 65 74 20 69 74 0a 2a 2a 20 74 6f 20 7a 65 72 6f  et it.** to zero
5470: 2e 0a 2a 2f 0a 23 69 66 20 53 51 4c 49 54 45 5f  ..*/.#if SQLITE_
5480: 54 45 4d 50 5f 53 54 4f 52 45 3d 3d 33 20 7c 7c  TEMP_STORE==3 ||
5490: 20 53 51 4c 49 54 45 5f 54 48 52 45 41 44 53 41   SQLITE_THREADSA
54a0: 46 45 3d 3d 30 0a 23 20 75 6e 64 65 66 20 53 51  FE==0.# undef SQ
54b0: 4c 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f  LITE_MAX_WORKER_
54c0: 54 48 52 45 41 44 53 0a 23 20 64 65 66 69 6e 65  THREADS.# define
54d0: 20 53 51 4c 49 54 45 5f 4d 41 58 5f 57 4f 52 4b   SQLITE_MAX_WORK
54e0: 45 52 5f 54 48 52 45 41 44 53 20 30 0a 23 65 6e  ER_THREADS 0.#en
54f0: 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  dif.#ifndef SQLI
5500: 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54 48  TE_MAX_WORKER_TH
5510: 52 45 41 44 53 0a 23 20 64 65 66 69 6e 65 20 53  READS.# define S
5520: 51 4c 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52  QLITE_MAX_WORKER
5530: 5f 54 48 52 45 41 44 53 20 38 0a 23 65 6e 64 69  _THREADS 8.#endi
5540: 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  f.#ifndef SQLITE
5550: 5f 44 45 46 41 55 4c 54 5f 57 4f 52 4b 45 52 5f  _DEFAULT_WORKER_
5560: 54 48 52 45 41 44 53 0a 23 20 64 65 66 69 6e 65  THREADS.# define
5570: 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f   SQLITE_DEFAULT_
5580: 57 4f 52 4b 45 52 5f 54 48 52 45 41 44 53 20 30  WORKER_THREADS 0
5590: 0a 23 65 6e 64 69 66 0a 23 69 66 20 53 51 4c 49  .#endif.#if SQLI
55a0: 54 45 5f 44 45 46 41 55 4c 54 5f 57 4f 52 4b 45  TE_DEFAULT_WORKE
55b0: 52 5f 54 48 52 45 41 44 53 3e 53 51 4c 49 54 45  R_THREADS>SQLITE
55c0: 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54 48 52 45  _MAX_WORKER_THRE
55d0: 41 44 53 0a 23 20 75 6e 64 65 66 20 53 51 4c 49  ADS.# undef SQLI
55e0: 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54 48  TE_MAX_WORKER_TH
55f0: 52 45 41 44 53 0a 23 20 64 65 66 69 6e 65 20 53  READS.# define S
5600: 51 4c 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52  QLITE_MAX_WORKER
5610: 5f 54 48 52 45 41 44 53 20 53 51 4c 49 54 45 5f  _THREADS SQLITE_
5620: 44 45 46 41 55 4c 54 5f 57 4f 52 4b 45 52 5f 54  DEFAULT_WORKER_T
5630: 48 52 45 41 44 53 0a 23 65 6e 64 69 66 0a 0a 2f  HREADS.#endif../
5640: 2a 0a 2a 2a 20 54 68 65 20 64 65 66 61 75 6c 74  *.** The default
5650: 20 69 6e 69 74 69 61 6c 20 61 6c 6c 6f 63 61 74   initial allocat
5660: 69 6f 6e 20 66 6f 72 20 74 68 65 20 70 61 67 65  ion for the page
5670: 63 61 63 68 65 20 77 68 65 6e 20 75 73 69 6e 67  cache when using
5680: 20 73 65 70 61 72 61 74 65 0a 2a 2a 20 70 61 67   separate.** pag
5690: 65 63 61 63 68 65 73 20 66 6f 72 20 65 61 63 68  ecaches for each
56a0: 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63   database connec
56b0: 74 69 6f 6e 2e 20 20 41 20 70 6f 73 69 74 69 76  tion.  A positiv
56c0: 65 20 6e 75 6d 62 65 72 20 69 73 20 74 68 65 0a  e number is the.
56d0: 2a 2a 20 6e 75 6d 62 65 72 20 6f 66 20 70 61 67  ** number of pag
56e0: 65 73 2e 20 20 41 20 6e 65 67 61 74 69 76 65 20  es.  A negative 
56f0: 6e 75 6d 62 65 72 20 4e 20 74 72 61 6e 73 6c 61  number N transla
5700: 74 69 6f 6e 73 20 6d 65 61 6e 73 20 74 68 61 74  tions means that
5710: 20 61 20 62 75 66 66 65 72 0a 2a 2a 20 6f 66 20   a buffer.** of 
5720: 2d 31 30 32 34 2a 4e 20 62 79 74 65 73 20 69 73  -1024*N bytes is
5730: 20 61 6c 6c 6f 63 61 74 65 64 20 61 6e 64 20 75   allocated and u
5740: 73 65 64 20 66 6f 72 20 61 73 20 6d 61 6e 79 20  sed for as many 
5750: 70 61 67 65 73 20 61 73 20 69 74 20 77 69 6c 6c  pages as it will
5760: 20 68 6f 6c 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65   hold..**.** The
5770: 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20 6f   default value o
5780: 66 20 22 32 30 22 20 77 61 73 20 63 68 6f 6f 73  f "20" was choos
5790: 65 6e 20 74 6f 20 6d 69 6e 69 6d 69 7a 65 20 74  en to minimize t
57a0: 68 65 20 72 75 6e 2d 74 69 6d 65 20 6f 66 20 74  he run-time of t
57b0: 68 65 0a 2a 2a 20 73 70 65 65 64 74 65 73 74 31  he.** speedtest1
57c0: 20 74 65 73 74 20 70 72 6f 67 72 61 6d 20 77 69   test program wi
57d0: 74 68 20 6f 70 74 69 6f 6e 73 3a 20 2d 2d 73 68  th options: --sh
57e0: 72 69 6e 6b 2d 6d 65 6d 6f 72 79 20 2d 2d 72 65  rink-memory --re
57f0: 70 72 65 70 61 72 65 0a 2a 2f 0a 23 69 66 6e 64  prepare.*/.#ifnd
5800: 65 66 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c  ef SQLITE_DEFAUL
5810: 54 5f 50 43 41 43 48 45 5f 49 4e 49 54 53 5a 0a  T_PCACHE_INITSZ.
5820: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
5830: 44 45 46 41 55 4c 54 5f 50 43 41 43 48 45 5f 49  DEFAULT_PCACHE_I
5840: 4e 49 54 53 5a 20 32 30 0a 23 65 6e 64 69 66 0a  NITSZ 20.#endif.
5850: 0a 2f 2a 0a 2a 2a 20 44 65 66 61 75 6c 74 20 76  ./*.** Default v
5860: 61 6c 75 65 20 66 6f 72 20 74 68 65 20 53 51 4c  alue for the SQL
5870: 49 54 45 5f 43 4f 4e 46 49 47 5f 53 4f 52 54 45  ITE_CONFIG_SORTE
5880: 52 52 45 46 5f 53 49 5a 45 20 6f 70 74 69 6f 6e  RREF_SIZE option
5890: 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c  ..*/.#ifndef SQL
58a0: 49 54 45 5f 44 45 46 41 55 4c 54 5f 53 4f 52 54  ITE_DEFAULT_SORT
58b0: 45 52 52 45 46 5f 53 49 5a 45 0a 23 20 64 65 66  ERREF_SIZE.# def
58c0: 69 6e 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55  ine SQLITE_DEFAU
58d0: 4c 54 5f 53 4f 52 54 45 52 52 45 46 5f 53 49 5a  LT_SORTERREF_SIZ
58e0: 45 20 30 78 37 66 66 66 66 66 66 66 0a 23 65 6e  E 0x7fffffff.#en
58f0: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 63  dif../*.** The c
5900: 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69  ompile-time opti
5910: 6f 6e 73 20 53 51 4c 49 54 45 5f 4d 4d 41 50 5f  ons SQLITE_MMAP_
5920: 52 45 41 44 57 52 49 54 45 20 61 6e 64 20 0a 2a  READWRITE and .*
5930: 2a 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  * SQLITE_ENABLE_
5940: 42 41 54 43 48 5f 41 54 4f 4d 49 43 5f 57 52 49  BATCH_ATOMIC_WRI
5950: 54 45 20 61 72 65 20 6e 6f 74 20 63 6f 6d 70 61  TE are not compa
5960: 74 69 62 6c 65 20 77 69 74 68 20 6f 6e 65 20 61  tible with one a
5970: 6e 6f 74 68 65 72 2e 0a 2a 2a 20 59 6f 75 20 6d  nother..** You m
5980: 75 73 74 20 63 68 6f 6f 73 65 20 6f 6e 65 20 6f  ust choose one o
5990: 72 20 74 68 65 20 6f 74 68 65 72 20 28 6f 72 20  r the other (or 
59a0: 6e 65 69 74 68 65 72 29 20 62 75 74 20 6e 6f 74  neither) but not
59b0: 20 62 6f 74 68 2e 0a 2a 2f 0a 23 69 66 20 64 65   both..*/.#if de
59c0: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4d 4d 41  fined(SQLITE_MMA
59d0: 50 5f 52 45 41 44 57 52 49 54 45 29 20 26 26 20  P_READWRITE) && 
59e0: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45  defined(SQLITE_E
59f0: 4e 41 42 4c 45 5f 42 41 54 43 48 5f 41 54 4f 4d  NABLE_BATCH_ATOM
5a00: 49 43 5f 57 52 49 54 45 29 0a 23 65 72 72 6f 72  IC_WRITE).#error
5a10: 20 43 61 6e 6e 6f 74 20 75 73 65 20 62 6f 74 68   Cannot use both
5a20: 20 53 51 4c 49 54 45 5f 4d 4d 41 50 5f 52 45 41   SQLITE_MMAP_REA
5a30: 44 57 52 49 54 45 20 61 6e 64 20 53 51 4c 49 54  DWRITE and SQLIT
5a40: 45 5f 45 4e 41 42 4c 45 5f 42 41 54 43 48 5f 41  E_ENABLE_BATCH_A
5a50: 54 4f 4d 49 43 5f 57 52 49 54 45 0a 23 65 6e 64  TOMIC_WRITE.#end
5a60: 69 66 0a 0a 2f 2a 0a 2a 2a 20 47 43 43 20 64 6f  if../*.** GCC do
5a70: 65 73 20 6e 6f 74 20 64 65 66 69 6e 65 20 74 68  es not define th
5a80: 65 20 6f 66 66 73 65 74 6f 66 28 29 20 6d 61 63  e offsetof() mac
5a90: 72 6f 20 73 6f 20 77 65 27 6c 6c 20 68 61 76 65  ro so we'll have
5aa0: 20 74 6f 20 64 6f 20 69 74 0a 2a 2a 20 6f 75 72   to do it.** our
5ab0: 73 65 6c 76 65 73 2e 0a 2a 2f 0a 23 69 66 6e 64  selves..*/.#ifnd
5ac0: 65 66 20 6f 66 66 73 65 74 6f 66 0a 23 64 65 66  ef offsetof.#def
5ad0: 69 6e 65 20 6f 66 66 73 65 74 6f 66 28 53 54 52  ine offsetof(STR
5ae0: 55 43 54 55 52 45 2c 46 49 45 4c 44 29 20 28 28  UCTURE,FIELD) ((
5af0: 69 6e 74 29 28 28 63 68 61 72 2a 29 26 28 28 53  int)((char*)&((S
5b00: 54 52 55 43 54 55 52 45 2a 29 30 29 2d 3e 46 49  TRUCTURE*)0)->FI
5b10: 45 4c 44 29 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a  ELD)).#endif../*
5b20: 0a 2a 2a 20 4d 61 63 72 6f 73 20 74 6f 20 63 6f  .** Macros to co
5b30: 6d 70 75 74 65 20 6d 69 6e 69 6d 75 6d 20 61 6e  mpute minimum an
5b40: 64 20 6d 61 78 69 6d 75 6d 20 6f 66 20 74 77 6f  d maximum of two
5b50: 20 6e 75 6d 62 65 72 73 2e 0a 2a 2f 0a 23 69 66   numbers..*/.#if
5b60: 6e 64 65 66 20 4d 49 4e 0a 23 20 64 65 66 69 6e  ndef MIN.# defin
5b70: 65 20 4d 49 4e 28 41 2c 42 29 20 28 28 41 29 3c  e MIN(A,B) ((A)<
5b80: 28 42 29 3f 28 41 29 3a 28 42 29 29 0a 23 65 6e  (B)?(A):(B)).#en
5b90: 64 69 66 0a 23 69 66 6e 64 65 66 20 4d 41 58 0a  dif.#ifndef MAX.
5ba0: 23 20 64 65 66 69 6e 65 20 4d 41 58 28 41 2c 42  # define MAX(A,B
5bb0: 29 20 28 28 41 29 3e 28 42 29 3f 28 41 29 3a 28  ) ((A)>(B)?(A):(
5bc0: 42 29 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  B)).#endif../*.*
5bd0: 2a 20 53 77 61 70 20 74 77 6f 20 6f 62 6a 65 63  * Swap two objec
5be0: 74 73 20 6f 66 20 74 79 70 65 20 54 59 50 45 2e  ts of type TYPE.
5bf0: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 57 41 50  .*/.#define SWAP
5c00: 28 54 59 50 45 2c 41 2c 42 29 20 7b 54 59 50 45  (TYPE,A,B) {TYPE
5c10: 20 74 3d 41 3b 20 41 3d 42 3b 20 42 3d 74 3b 7d   t=A; A=B; B=t;}
5c20: 0a 0a 2f 2a 0a 2a 2a 20 43 68 65 63 6b 20 74 6f  ../*.** Check to
5c30: 20 73 65 65 20 69 66 20 74 68 69 73 20 6d 61 63   see if this mac
5c40: 68 69 6e 65 20 75 73 65 73 20 45 42 43 44 49 43  hine uses EBCDIC
5c50: 2e 20 20 28 59 65 73 2c 20 62 65 6c 69 65 76 65  .  (Yes, believe
5c60: 20 69 74 20 6f 72 0a 2a 2a 20 6e 6f 74 2c 20 74   it or.** not, t
5c70: 68 65 72 65 20 61 72 65 20 73 74 69 6c 6c 20 6d  here are still m
5c80: 61 63 68 69 6e 65 73 20 6f 75 74 20 74 68 65 72  achines out ther
5c90: 65 20 74 68 61 74 20 75 73 65 20 45 42 43 44 49  e that use EBCDI
5ca0: 43 2e 29 0a 2a 2f 0a 23 69 66 20 27 41 27 20 3d  C.).*/.#if 'A' =
5cb0: 3d 20 27 5c 33 30 31 27 0a 23 20 64 65 66 69 6e  = '\301'.# defin
5cc0: 65 20 53 51 4c 49 54 45 5f 45 42 43 44 49 43 20  e SQLITE_EBCDIC 
5cd0: 31 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65  1.#else.# define
5ce0: 20 53 51 4c 49 54 45 5f 41 53 43 49 49 20 31 0a   SQLITE_ASCII 1.
5cf0: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 6e  #endif../*.** In
5d00: 74 65 67 65 72 73 20 6f 66 20 6b 6e 6f 77 6e 20  tegers of known 
5d10: 73 69 7a 65 73 2e 20 20 54 68 65 73 65 20 74 79  sizes.  These ty
5d20: 70 65 64 65 66 73 20 6d 69 67 68 74 20 63 68 61  pedefs might cha
5d30: 6e 67 65 20 66 6f 72 20 61 72 63 68 69 74 65 63  nge for architec
5d40: 74 75 72 65 73 0a 2a 2a 20 77 68 65 72 65 20 74  tures.** where t
5d50: 68 65 20 73 69 7a 65 73 20 76 65 72 79 2e 20 20  he sizes very.  
5d60: 50 72 65 70 72 6f 63 65 73 73 6f 72 20 6d 61 63  Preprocessor mac
5d70: 72 6f 73 20 61 72 65 20 61 76 61 69 6c 61 62 6c  ros are availabl
5d80: 65 20 73 6f 20 74 68 61 74 20 74 68 65 0a 2a 2a  e so that the.**
5d90: 20 74 79 70 65 73 20 63 61 6e 20 62 65 20 63 6f   types can be co
5da0: 6e 76 65 6e 69 65 6e 74 6c 79 20 72 65 64 65 66  nveniently redef
5db0: 69 6e 65 64 20 61 74 20 63 6f 6d 70 69 6c 65 2d  ined at compile-
5dc0: 74 79 70 65 2e 20 20 4c 69 6b 65 20 74 68 69 73  type.  Like this
5dd0: 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 20 20 20 20  :.**.**         
5de0: 63 63 20 27 2d 44 55 49 4e 54 50 54 52 5f 54 59  cc '-DUINTPTR_TY
5df0: 50 45 3d 6c 6f 6e 67 20 6c 6f 6e 67 20 69 6e 74  PE=long long int
5e00: 27 20 2e 2e 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66  ' ....*/.#ifndef
5e10: 20 55 49 4e 54 33 32 5f 54 59 50 45 0a 23 20 69   UINT32_TYPE.# i
5e20: 66 64 65 66 20 48 41 56 45 5f 55 49 4e 54 33 32  fdef HAVE_UINT32
5e30: 5f 54 0a 23 20 20 64 65 66 69 6e 65 20 55 49 4e  _T.#  define UIN
5e40: 54 33 32 5f 54 59 50 45 20 75 69 6e 74 33 32 5f  T32_TYPE uint32_
5e50: 74 0a 23 20 65 6c 73 65 0a 23 20 20 64 65 66 69  t.# else.#  defi
5e60: 6e 65 20 55 49 4e 54 33 32 5f 54 59 50 45 20 75  ne UINT32_TYPE u
5e70: 6e 73 69 67 6e 65 64 20 69 6e 74 0a 23 20 65 6e  nsigned int.# en
5e80: 64 69 66 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64  dif.#endif.#ifnd
5e90: 65 66 20 55 49 4e 54 31 36 5f 54 59 50 45 0a 23  ef UINT16_TYPE.#
5ea0: 20 69 66 64 65 66 20 48 41 56 45 5f 55 49 4e 54   ifdef HAVE_UINT
5eb0: 31 36 5f 54 0a 23 20 20 64 65 66 69 6e 65 20 55  16_T.#  define U
5ec0: 49 4e 54 31 36 5f 54 59 50 45 20 75 69 6e 74 31  INT16_TYPE uint1
5ed0: 36 5f 74 0a 23 20 65 6c 73 65 0a 23 20 20 64 65  6_t.# else.#  de
5ee0: 66 69 6e 65 20 55 49 4e 54 31 36 5f 54 59 50 45  fine UINT16_TYPE
5ef0: 20 75 6e 73 69 67 6e 65 64 20 73 68 6f 72 74 20   unsigned short 
5f00: 69 6e 74 0a 23 20 65 6e 64 69 66 0a 23 65 6e 64  int.# endif.#end
5f10: 69 66 0a 23 69 66 6e 64 65 66 20 49 4e 54 31 36  if.#ifndef INT16
5f20: 5f 54 59 50 45 0a 23 20 69 66 64 65 66 20 48 41  _TYPE.# ifdef HA
5f30: 56 45 5f 49 4e 54 31 36 5f 54 0a 23 20 20 64 65  VE_INT16_T.#  de
5f40: 66 69 6e 65 20 49 4e 54 31 36 5f 54 59 50 45 20  fine INT16_TYPE 
5f50: 69 6e 74 31 36 5f 74 0a 23 20 65 6c 73 65 0a 23  int16_t.# else.#
5f60: 20 20 64 65 66 69 6e 65 20 49 4e 54 31 36 5f 54    define INT16_T
5f70: 59 50 45 20 73 68 6f 72 74 20 69 6e 74 0a 23 20  YPE short int.# 
5f80: 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 23 69 66  endif.#endif.#if
5f90: 6e 64 65 66 20 55 49 4e 54 38 5f 54 59 50 45 0a  ndef UINT8_TYPE.
5fa0: 23 20 69 66 64 65 66 20 48 41 56 45 5f 55 49 4e  # ifdef HAVE_UIN
5fb0: 54 38 5f 54 0a 23 20 20 64 65 66 69 6e 65 20 55  T8_T.#  define U
5fc0: 49 4e 54 38 5f 54 59 50 45 20 75 69 6e 74 38 5f  INT8_TYPE uint8_
5fd0: 74 0a 23 20 65 6c 73 65 0a 23 20 20 64 65 66 69  t.# else.#  defi
5fe0: 6e 65 20 55 49 4e 54 38 5f 54 59 50 45 20 75 6e  ne UINT8_TYPE un
5ff0: 73 69 67 6e 65 64 20 63 68 61 72 0a 23 20 65 6e  signed char.# en
6000: 64 69 66 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64  dif.#endif.#ifnd
6010: 65 66 20 49 4e 54 38 5f 54 59 50 45 0a 23 20 69  ef INT8_TYPE.# i
6020: 66 64 65 66 20 48 41 56 45 5f 49 4e 54 38 5f 54  fdef HAVE_INT8_T
6030: 0a 23 20 20 64 65 66 69 6e 65 20 49 4e 54 38 5f  .#  define INT8_
6040: 54 59 50 45 20 69 6e 74 38 5f 74 0a 23 20 65 6c  TYPE int8_t.# el
6050: 73 65 0a 23 20 20 64 65 66 69 6e 65 20 49 4e 54  se.#  define INT
6060: 38 5f 54 59 50 45 20 73 69 67 6e 65 64 20 63 68  8_TYPE signed ch
6070: 61 72 0a 23 20 65 6e 64 69 66 0a 23 65 6e 64 69  ar.# endif.#endi
6080: 66 0a 23 69 66 6e 64 65 66 20 4c 4f 4e 47 44 4f  f.#ifndef LONGDO
6090: 55 42 4c 45 5f 54 59 50 45 0a 23 20 64 65 66 69  UBLE_TYPE.# defi
60a0: 6e 65 20 4c 4f 4e 47 44 4f 55 42 4c 45 5f 54 59  ne LONGDOUBLE_TY
60b0: 50 45 20 6c 6f 6e 67 20 64 6f 75 62 6c 65 0a 23  PE long double.#
60c0: 65 6e 64 69 66 0a 74 79 70 65 64 65 66 20 73 71  endif.typedef sq
60d0: 6c 69 74 65 5f 69 6e 74 36 34 20 69 36 34 3b 20  lite_int64 i64; 
60e0: 20 20 20 20 20 20 20 20 20 2f 2a 20 38 2d 62 79           /* 8-by
60f0: 74 65 20 73 69 67 6e 65 64 20 69 6e 74 65 67 65  te signed intege
6100: 72 20 2a 2f 0a 74 79 70 65 64 65 66 20 73 71 6c  r */.typedef sql
6110: 69 74 65 5f 75 69 6e 74 36 34 20 75 36 34 3b 20  ite_uint64 u64; 
6120: 20 20 20 20 20 20 20 20 2f 2a 20 38 2d 62 79 74          /* 8-byt
6130: 65 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 65 67  e unsigned integ
6140: 65 72 20 2a 2f 0a 74 79 70 65 64 65 66 20 55 49  er */.typedef UI
6150: 4e 54 33 32 5f 54 59 50 45 20 75 33 32 3b 20 20  NT32_TYPE u32;  
6160: 20 20 20 20 20 20 20 20 20 2f 2a 20 34 2d 62 79           /* 4-by
6170: 74 65 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 65  te unsigned inte
6180: 67 65 72 20 2a 2f 0a 74 79 70 65 64 65 66 20 55  ger */.typedef U
6190: 49 4e 54 31 36 5f 54 59 50 45 20 75 31 36 3b 20  INT16_TYPE u16; 
61a0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 32 2d 62            /* 2-b
61b0: 79 74 65 20 75 6e 73 69 67 6e 65 64 20 69 6e 74  yte unsigned int
61c0: 65 67 65 72 20 2a 2f 0a 74 79 70 65 64 65 66 20  eger */.typedef 
61d0: 49 4e 54 31 36 5f 54 59 50 45 20 69 31 36 3b 20  INT16_TYPE i16; 
61e0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 32 2d             /* 2-
61f0: 62 79 74 65 20 73 69 67 6e 65 64 20 69 6e 74 65  byte signed inte
6200: 67 65 72 20 2a 2f 0a 74 79 70 65 64 65 66 20 55  ger */.typedef U
6210: 49 4e 54 38 5f 54 59 50 45 20 75 38 3b 20 20 20  INT8_TYPE u8;   
6220: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 31 2d 62            /* 1-b
6230: 79 74 65 20 75 6e 73 69 67 6e 65 64 20 69 6e 74  yte unsigned int
6240: 65 67 65 72 20 2a 2f 0a 74 79 70 65 64 65 66 20  eger */.typedef 
6250: 49 4e 54 38 5f 54 59 50 45 20 69 38 3b 20 20 20  INT8_TYPE i8;   
6260: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 31 2d             /* 1-
6270: 62 79 74 65 20 73 69 67 6e 65 64 20 69 6e 74 65  byte signed inte
6280: 67 65 72 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 53 51  ger */../*.** SQ
6290: 4c 49 54 45 5f 4d 41 58 5f 55 33 32 20 69 73 20  LITE_MAX_U32 is 
62a0: 61 20 75 36 34 20 63 6f 6e 73 74 61 6e 74 20 74  a u64 constant t
62b0: 68 61 74 20 69 73 20 74 68 65 20 6d 61 78 69 6d  hat is the maxim
62c0: 75 6d 20 75 36 34 20 76 61 6c 75 65 0a 2a 2a 20  um u64 value.** 
62d0: 74 68 61 74 20 63 61 6e 20 62 65 20 73 74 6f 72  that can be stor
62e0: 65 64 20 69 6e 20 61 20 75 33 32 20 77 69 74 68  ed in a u32 with
62f0: 6f 75 74 20 6c 6f 73 73 20 6f 66 20 64 61 74 61  out loss of data
6300: 2e 20 20 54 68 65 20 76 61 6c 75 65 0a 2a 2a 20  .  The value.** 
6310: 69 73 20 30 78 30 30 30 30 30 30 30 30 66 66 66  is 0x00000000fff
6320: 66 66 66 66 66 2e 20 20 42 75 74 20 62 65 63 61  fffff.  But beca
6330: 75 73 65 20 6f 66 20 71 75 69 72 6b 73 20 6f 66  use of quirks of
6340: 20 73 6f 6d 65 20 63 6f 6d 70 69 6c 65 72 73 2c   some compilers,
6350: 20 77 65 0a 2a 2a 20 68 61 76 65 20 74 6f 20 73   we.** have to s
6360: 70 65 63 69 66 79 20 74 68 65 20 76 61 6c 75 65  pecify the value
6370: 20 69 6e 20 74 68 65 20 6c 65 73 73 20 69 6e 74   in the less int
6380: 75 69 74 69 76 65 20 6d 61 6e 6e 65 72 20 73 68  uitive manner sh
6390: 6f 77 6e 3a 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  own:.*/.#define 
63a0: 53 51 4c 49 54 45 5f 4d 41 58 5f 55 33 32 20 20  SQLITE_MAX_U32  
63b0: 28 28 28 28 75 36 34 29 31 29 3c 3c 33 32 29 2d  ((((u64)1)<<32)-
63c0: 31 29 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 64 61  1)../*.** The da
63d0: 74 61 74 79 70 65 20 75 73 65 64 20 74 6f 20 73  tatype used to s
63e0: 74 6f 72 65 20 65 73 74 69 6d 61 74 65 73 20 6f  tore estimates o
63f0: 66 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  f the number of 
6400: 72 6f 77 73 20 69 6e 20 61 0a 2a 2a 20 74 61 62  rows in a.** tab
6410: 6c 65 20 6f 72 20 69 6e 64 65 78 2e 20 20 54 68  le or index.  Th
6420: 69 73 20 69 73 20 61 6e 20 75 6e 73 69 67 6e 65  is is an unsigne
6430: 64 20 69 6e 74 65 67 65 72 20 74 79 70 65 2e 20  d integer type. 
6440: 20 46 6f 72 20 39 39 2e 39 25 20 6f 66 0a 2a 2a   For 99.9% of.**
6450: 20 74 68 65 20 77 6f 72 6c 64 2c 20 61 20 33 32   the world, a 32
6460: 2d 62 69 74 20 69 6e 74 65 67 65 72 20 69 73 20  -bit integer is 
6470: 73 75 66 66 69 63 69 65 6e 74 2e 20 20 42 75 74  sufficient.  But
6480: 20 61 20 36 34 2d 62 69 74 20 69 6e 74 65 67 65   a 64-bit intege
6490: 72 0a 2a 2a 20 63 61 6e 20 62 65 20 75 73 65 64  r.** can be used
64a0: 20 61 74 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65   at compile-time
64b0: 20 69 66 20 64 65 73 69 72 65 64 2e 0a 2a 2f 0a   if desired..*/.
64c0: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 36 34  #ifdef SQLITE_64
64d0: 42 49 54 5f 53 54 41 54 53 0a 20 74 79 70 65 64  BIT_STATS. typed
64e0: 65 66 20 75 36 34 20 74 52 6f 77 63 6e 74 3b 20  ef u64 tRowcnt; 
64f0: 20 20 20 2f 2a 20 36 34 2d 62 69 74 20 6f 6e 6c     /* 64-bit onl
6500: 79 20 69 66 20 72 65 71 75 65 73 74 65 64 20 61  y if requested a
6510: 74 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 2a  t compile-time *
6520: 2f 0a 23 65 6c 73 65 0a 20 74 79 70 65 64 65 66  /.#else. typedef
6530: 20 75 33 32 20 74 52 6f 77 63 6e 74 3b 20 20 20   u32 tRowcnt;   
6540: 20 2f 2a 20 33 32 2d 62 69 74 20 69 73 20 74 68   /* 32-bit is th
6550: 65 20 64 65 66 61 75 6c 74 20 2a 2f 0a 23 65 6e  e default */.#en
6560: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 45 73 74 69 6d  dif../*.** Estim
6570: 61 74 65 64 20 71 75 61 6e 74 69 74 69 65 73 20  ated quantities 
6580: 75 73 65 64 20 66 6f 72 20 71 75 65 72 79 20 70  used for query p
6590: 6c 61 6e 6e 69 6e 67 20 61 72 65 20 73 74 6f 72  lanning are stor
65a0: 65 64 20 61 73 20 31 36 2d 62 69 74 0a 2a 2a 20  ed as 16-bit.** 
65b0: 6c 6f 67 61 72 69 74 68 6d 73 2e 20 20 46 6f 72  logarithms.  For
65c0: 20 71 75 61 6e 74 69 74 79 20 58 2c 20 74 68 65   quantity X, the
65d0: 20 76 61 6c 75 65 20 73 74 6f 72 65 64 20 69 73   value stored is
65e0: 20 31 30 2a 6c 6f 67 32 28 58 29 2e 20 20 54 68   10*log2(X).  Th
65f0: 69 73 0a 2a 2a 20 67 69 76 65 73 20 61 20 70 6f  is.** gives a po
6600: 73 73 69 62 6c 65 20 72 61 6e 67 65 20 6f 66 20  ssible range of 
6610: 76 61 6c 75 65 73 20 6f 66 20 61 70 70 72 6f 78  values of approx
6620: 69 6d 61 74 65 6c 79 20 31 2e 30 65 39 38 36 20  imately 1.0e986 
6630: 74 6f 20 31 65 2d 39 38 36 2e 0a 2a 2a 20 42 75  to 1e-986..** Bu
6640: 74 20 74 68 65 20 61 6c 6c 6f 77 65 64 20 76 61  t the allowed va
6650: 6c 75 65 73 20 61 72 65 20 22 67 72 61 69 6e 79  lues are "grainy
6660: 22 2e 20 20 4e 6f 74 20 65 76 65 72 79 20 76 61  ".  Not every va
6670: 6c 75 65 20 69 73 20 72 65 70 72 65 73 65 6e 74  lue is represent
6680: 61 62 6c 65 2e 0a 2a 2a 20 46 6f 72 20 65 78 61  able..** For exa
6690: 6d 70 6c 65 2c 20 71 75 61 6e 74 69 74 69 65 73  mple, quantities
66a0: 20 31 36 20 61 6e 64 20 31 37 20 61 72 65 20 62   16 and 17 are b
66b0: 6f 74 68 20 72 65 70 72 65 73 65 6e 74 65 64 20  oth represented 
66c0: 62 79 20 61 20 4c 6f 67 45 73 74 0a 2a 2a 20 6f  by a LogEst.** o
66d0: 66 20 34 30 2e 20 20 48 6f 77 65 76 65 72 2c 20  f 40.  However, 
66e0: 73 69 6e 63 65 20 4c 6f 67 45 73 74 20 71 75 61  since LogEst qua
66f0: 6e 74 69 74 69 65 73 20 61 72 65 20 73 75 70 70  ntities are supp
6700: 6f 73 65 20 74 6f 20 62 65 20 65 73 74 69 6d 61  ose to be estima
6710: 74 65 73 2c 0a 2a 2a 20 6e 6f 74 20 65 78 61 63  tes,.** not exac
6720: 74 20 76 61 6c 75 65 73 2c 20 74 68 69 73 20 69  t values, this i
6730: 6d 70 72 65 63 69 73 69 6f 6e 20 69 73 20 6e 6f  mprecision is no
6740: 74 20 61 20 70 72 6f 62 6c 65 6d 2e 0a 2a 2a 0a  t a problem..**.
6750: 2a 2a 20 22 4c 6f 67 45 73 74 22 20 69 73 20 73  ** "LogEst" is s
6760: 68 6f 72 74 20 66 6f 72 20 22 4c 6f 67 61 72 69  hort for "Logari
6770: 74 68 6d 69 63 20 45 73 74 69 6d 61 74 65 22 2e  thmic Estimate".
6780: 0a 2a 2a 0a 2a 2a 20 45 78 61 6d 70 6c 65 73 3a  .**.** Examples:
6790: 0a 2a 2a 20 20 20 20 20 20 31 20 2d 3e 20 30 20  .**      1 -> 0 
67a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 32 30 20               20 
67b0: 2d 3e 20 34 33 20 20 20 20 20 20 20 20 20 20 31  -> 43          1
67c0: 30 30 30 30 20 2d 3e 20 31 33 32 0a 2a 2a 20 20  0000 -> 132.**  
67d0: 20 20 20 20 32 20 2d 3e 20 31 30 20 20 20 20 20      2 -> 10     
67e0: 20 20 20 20 20 20 20 20 32 35 20 2d 3e 20 34 36          25 -> 46
67f0: 20 20 20 20 20 20 20 20 20 20 32 35 30 30 30 20            25000 
6800: 2d 3e 20 31 34 36 0a 2a 2a 20 20 20 20 20 20 33  -> 146.**      3
6810: 20 2d 3e 20 31 36 20 20 20 20 20 20 20 20 20 20   -> 16          
6820: 20 20 31 30 30 20 2d 3e 20 36 36 20 20 20 20 20    100 -> 66     
6830: 20 20 20 31 30 30 30 30 30 30 20 2d 3e 20 31 39     1000000 -> 19
6840: 39 0a 2a 2a 20 20 20 20 20 20 34 20 2d 3e 20 32  9.**      4 -> 2
6850: 30 20 20 20 20 20 20 20 20 20 20 20 31 30 30 30  0           1000
6860: 20 2d 3e 20 39 39 20 20 20 20 20 20 20 20 31 30   -> 99        10
6870: 34 38 35 37 36 20 2d 3e 20 32 30 30 0a 2a 2a 20  48576 -> 200.** 
6880: 20 20 20 20 31 30 20 2d 3e 20 33 33 20 20 20 20      10 -> 33    
6890: 20 20 20 20 20 20 20 31 30 32 34 20 2d 3e 20 31         1024 -> 1
68a0: 30 30 20 20 20 20 34 32 39 34 39 36 37 32 39 36  00    4294967296
68b0: 20 2d 3e 20 33 32 30 0a 2a 2a 0a 2a 2a 20 54 68   -> 320.**.** Th
68c0: 65 20 4c 6f 67 45 73 74 20 63 61 6e 20 62 65 20  e LogEst can be 
68d0: 6e 65 67 61 74 69 76 65 20 74 6f 20 69 6e 64 69  negative to indi
68e0: 63 61 74 65 20 66 72 61 63 74 69 6f 6e 61 6c 20  cate fractional 
68f0: 76 61 6c 75 65 73 2e 0a 2a 2a 20 45 78 61 6d 70  values..** Examp
6900: 6c 65 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 30 2e  les:.**.**    0.
6910: 35 20 2d 3e 20 2d 31 30 20 20 20 20 20 20 20 20  5 -> -10        
6920: 20 20 20 30 2e 31 20 2d 3e 20 2d 33 33 20 20 20     0.1 -> -33   
6930: 20 20 20 20 20 30 2e 30 36 32 35 20 2d 3e 20 2d       0.0625 -> -
6940: 34 30 0a 2a 2f 0a 74 79 70 65 64 65 66 20 49 4e  40.*/.typedef IN
6950: 54 31 36 5f 54 59 50 45 20 4c 6f 67 45 73 74 3b  T16_TYPE LogEst;
6960: 0a 0a 2f 2a 0a 2a 2a 20 53 65 74 20 74 68 65 20  ../*.** Set the 
6970: 53 51 4c 49 54 45 5f 50 54 52 53 49 5a 45 20 6d  SQLITE_PTRSIZE m
6980: 61 63 72 6f 20 74 6f 20 74 68 65 20 6e 75 6d 62  acro to the numb
6990: 65 72 20 6f 66 20 62 79 74 65 73 20 69 6e 20 61  er of bytes in a
69a0: 20 70 6f 69 6e 74 65 72 0a 2a 2f 0a 23 69 66 6e   pointer.*/.#ifn
69b0: 64 65 66 20 53 51 4c 49 54 45 5f 50 54 52 53 49  def SQLITE_PTRSI
69c0: 5a 45 0a 23 20 69 66 20 64 65 66 69 6e 65 64 28  ZE.# if defined(
69d0: 5f 5f 53 49 5a 45 4f 46 5f 50 4f 49 4e 54 45 52  __SIZEOF_POINTER
69e0: 5f 5f 29 0a 23 20 20 20 64 65 66 69 6e 65 20 53  __).#   define S
69f0: 51 4c 49 54 45 5f 50 54 52 53 49 5a 45 20 5f 5f  QLITE_PTRSIZE __
6a00: 53 49 5a 45 4f 46 5f 50 4f 49 4e 54 45 52 5f 5f  SIZEOF_POINTER__
6a10: 0a 23 20 65 6c 69 66 20 64 65 66 69 6e 65 64 28  .# elif defined(
6a20: 69 33 38 36 29 20 20 20 20 20 7c 7c 20 64 65 66  i386)     || def
6a30: 69 6e 65 64 28 5f 5f 69 33 38 36 5f 5f 29 20 20  ined(__i386__)  
6a40: 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 4d 5f 49   || defined(_M_I
6a50: 58 38 36 29 20 7c 7c 20 20 20 20 5c 0a 20 20 20  X86) ||    \.   
6a60: 20 20 20 20 64 65 66 69 6e 65 64 28 5f 4d 5f 41      defined(_M_A
6a70: 52 4d 29 20 20 20 7c 7c 20 64 65 66 69 6e 65 64  RM)   || defined
6a80: 28 5f 5f 61 72 6d 5f 5f 29 20 20 20 20 7c 7c 20  (__arm__)    || 
6a90: 64 65 66 69 6e 65 64 28 5f 5f 78 38 36 29 0a 23  defined(__x86).#
6aa0: 20 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45     define SQLITE
6ab0: 5f 50 54 52 53 49 5a 45 20 34 0a 23 20 65 6c 73  _PTRSIZE 4.# els
6ac0: 65 0a 23 20 20 20 64 65 66 69 6e 65 20 53 51 4c  e.#   define SQL
6ad0: 49 54 45 5f 50 54 52 53 49 5a 45 20 38 0a 23 20  ITE_PTRSIZE 8.# 
6ae0: 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 0a 2f 2a  endif.#endif../*
6af0: 20 54 68 65 20 75 70 74 72 20 74 79 70 65 20 69   The uptr type i
6b00: 73 20 61 6e 20 75 6e 73 69 67 6e 65 64 20 69 6e  s an unsigned in
6b10: 74 65 67 65 72 20 6c 61 72 67 65 20 65 6e 6f 75  teger large enou
6b20: 67 68 20 74 6f 20 68 6f 6c 64 20 61 20 70 6f 69  gh to hold a poi
6b30: 6e 74 65 72 0a 2a 2f 0a 23 69 66 20 64 65 66 69  nter.*/.#if defi
6b40: 6e 65 64 28 48 41 56 45 5f 53 54 44 49 4e 54 5f  ned(HAVE_STDINT_
6b50: 48 29 0a 20 20 74 79 70 65 64 65 66 20 75 69 6e  H).  typedef uin
6b60: 74 70 74 72 5f 74 20 75 70 74 72 3b 0a 23 65 6c  tptr_t uptr;.#el
6b70: 69 66 20 53 51 4c 49 54 45 5f 50 54 52 53 49 5a  if SQLITE_PTRSIZ
6b80: 45 3d 3d 34 0a 20 20 74 79 70 65 64 65 66 20 75  E==4.  typedef u
6b90: 33 32 20 75 70 74 72 3b 0a 23 65 6c 73 65 0a 20  32 uptr;.#else. 
6ba0: 20 74 79 70 65 64 65 66 20 75 36 34 20 75 70 74   typedef u64 upt
6bb0: 72 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  r;.#endif../*.**
6bc0: 20 54 68 65 20 53 51 4c 49 54 45 5f 57 49 54 48   The SQLITE_WITH
6bd0: 49 4e 28 50 2c 53 2c 45 29 20 6d 61 63 72 6f 20  IN(P,S,E) macro 
6be0: 63 68 65 63 6b 73 20 74 6f 20 73 65 65 20 69 66  checks to see if
6bf0: 20 70 6f 69 6e 74 65 72 20 50 20 70 6f 69 6e 74   pointer P point
6c00: 73 20 74 6f 0a 2a 2a 20 73 6f 6d 65 74 68 69 6e  s to.** somethin
6c10: 67 20 62 65 74 77 65 65 6e 20 53 20 28 69 6e 63  g between S (inc
6c20: 6c 75 73 69 76 65 29 20 61 6e 64 20 45 20 28 65  lusive) and E (e
6c30: 78 63 6c 75 73 69 76 65 29 2e 0a 2a 2a 0a 2a 2a  xclusive)..**.**
6c40: 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c   In other words,
6c50: 20 53 20 69 73 20 61 20 62 75 66 66 65 72 20 61   S is a buffer a
6c60: 6e 64 20 45 20 69 73 20 61 20 70 6f 69 6e 74 65  nd E is a pointe
6c70: 72 20 74 6f 20 74 68 65 20 66 69 72 73 74 20 62  r to the first b
6c80: 79 74 65 20 61 66 74 65 72 0a 2a 2a 20 74 68 65  yte after.** the
6c90: 20 65 6e 64 20 6f 66 20 62 75 66 66 65 72 20 53   end of buffer S
6ca0: 2e 20 20 54 68 69 73 20 6d 61 63 72 6f 20 72 65  .  This macro re
6cb0: 74 75 72 6e 73 20 74 72 75 65 20 69 66 20 50 20  turns true if P 
6cc0: 70 6f 69 6e 74 73 20 74 6f 20 73 6f 6d 65 74 68  points to someth
6cd0: 69 6e 67 0a 2a 2a 20 63 6f 6e 74 61 69 6e 65 64  ing.** contained
6ce0: 20 77 69 74 68 69 6e 20 74 68 65 20 62 75 66 66   within the buff
6cf0: 65 72 20 53 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  er S..*/.#define
6d00: 20 53 51 4c 49 54 45 5f 57 49 54 48 49 4e 28 50   SQLITE_WITHIN(P
6d10: 2c 53 2c 45 29 20 28 28 28 75 70 74 72 29 28 50  ,S,E) (((uptr)(P
6d20: 29 3e 3d 28 75 70 74 72 29 28 53 29 29 26 26 28  )>=(uptr)(S))&&(
6d30: 28 75 70 74 72 29 28 50 29 3c 28 75 70 74 72 29  (uptr)(P)<(uptr)
6d40: 28 45 29 29 29 0a 0a 0a 2f 2a 0a 2a 2a 20 4d 61  (E))).../*.** Ma
6d50: 63 72 6f 73 20 74 6f 20 64 65 74 65 72 6d 69 6e  cros to determin
6d60: 65 20 77 68 65 74 68 65 72 20 74 68 65 20 6d 61  e whether the ma
6d70: 63 68 69 6e 65 20 69 73 20 62 69 67 20 6f 72 20  chine is big or 
6d80: 6c 69 74 74 6c 65 20 65 6e 64 69 61 6e 2c 0a 2a  little endian,.*
6d90: 2a 20 61 6e 64 20 77 68 65 74 68 65 72 20 6f 72  * and whether or
6da0: 20 6e 6f 74 20 74 68 61 74 20 64 65 74 65 72 6d   not that determ
6db0: 69 6e 61 74 69 6f 6e 20 69 73 20 72 75 6e 2d 74  ination is run-t
6dc0: 69 6d 65 20 6f 72 20 63 6f 6d 70 69 6c 65 2d 74  ime or compile-t
6dd0: 69 6d 65 2e 0a 2a 2a 0a 2a 2a 20 46 6f 72 20 62  ime..**.** For b
6de0: 65 73 74 20 70 65 72 66 6f 72 6d 61 6e 63 65 2c  est performance,
6df0: 20 61 6e 20 61 74 74 65 6d 70 74 20 69 73 20 6d   an attempt is m
6e00: 61 64 65 20 74 6f 20 67 75 65 73 73 20 61 74 20  ade to guess at 
6e10: 74 68 65 20 62 79 74 65 2d 6f 72 64 65 72 0a 2a  the byte-order.*
6e20: 2a 20 75 73 69 6e 67 20 43 2d 70 72 65 70 72 6f  * using C-prepro
6e30: 63 65 73 73 6f 72 20 6d 61 63 72 6f 73 2e 20 20  cessor macros.  
6e40: 49 66 20 74 68 61 74 20 69 73 20 75 6e 73 75 63  If that is unsuc
6e50: 63 65 73 73 66 75 6c 2c 20 6f 72 20 69 66 0a 2a  cessful, or if.*
6e60: 2a 20 2d 44 53 51 4c 49 54 45 5f 42 59 54 45 4f  * -DSQLITE_BYTEO
6e70: 52 44 45 52 3d 30 20 69 73 20 73 65 74 2c 20 74  RDER=0 is set, t
6e80: 68 65 6e 20 62 79 74 65 2d 6f 72 64 65 72 20 69  hen byte-order i
6e90: 73 20 64 65 74 65 72 6d 69 6e 65 64 0a 2a 2a 20  s determined.** 
6ea0: 61 74 20 72 75 6e 2d 74 69 6d 65 2e 0a 2a 2f 0a  at run-time..*/.
6eb0: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 42  #ifndef SQLITE_B
6ec0: 59 54 45 4f 52 44 45 52 0a 23 20 69 66 20 64 65  YTEORDER.# if de
6ed0: 66 69 6e 65 64 28 69 33 38 36 29 20 20 20 20 20  fined(i386)     
6ee0: 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 69 33 38  || defined(__i38
6ef0: 36 5f 5f 29 20 20 20 7c 7c 20 64 65 66 69 6e 65  6__)   || define
6f00: 64 28 5f 4d 5f 49 58 38 36 29 20 7c 7c 20 20 20  d(_M_IX86) ||   
6f10: 20 5c 0a 20 20 20 20 20 64 65 66 69 6e 65 64 28   \.     defined(
6f20: 5f 5f 78 38 36 5f 36 34 29 20 7c 7c 20 64 65 66  __x86_64) || def
6f30: 69 6e 65 64 28 5f 5f 78 38 36 5f 36 34 5f 5f 29  ined(__x86_64__)
6f40: 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 4d 5f 58   || defined(_M_X
6f50: 36 34 29 20 20 7c 7c 20 20 20 20 5c 0a 20 20 20  64)  ||    \.   
6f60: 20 20 64 65 66 69 6e 65 64 28 5f 4d 5f 41 4d 44    defined(_M_AMD
6f70: 36 34 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f  64) || defined(_
6f80: 4d 5f 41 52 4d 29 20 20 20 20 20 7c 7c 20 64 65  M_ARM)     || de
6f90: 66 69 6e 65 64 28 5f 5f 78 38 36 29 20 20 20 7c  fined(__x86)   |
6fa0: 7c 20 20 20 20 5c 0a 20 20 20 20 20 64 65 66 69  |    \.     defi
6fb0: 6e 65 64 28 5f 5f 61 72 6d 5f 5f 29 0a 23 20 20  ned(__arm__).#  
6fc0: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 42   define SQLITE_B
6fd0: 59 54 45 4f 52 44 45 52 20 20 20 20 31 32 33 34  YTEORDER    1234
6fe0: 0a 23 20 65 6c 69 66 20 64 65 66 69 6e 65 64 28  .# elif defined(
6ff0: 73 70 61 72 63 29 20 20 20 20 7c 7c 20 64 65 66  sparc)    || def
7000: 69 6e 65 64 28 5f 5f 70 70 63 5f 5f 29 0a 23 20  ined(__ppc__).# 
7010: 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f    define SQLITE_
7020: 42 59 54 45 4f 52 44 45 52 20 20 20 20 34 33 32  BYTEORDER    432
7030: 31 0a 23 20 65 6c 73 65 0a 23 20 20 20 64 65 66  1.# else.#   def
7040: 69 6e 65 20 53 51 4c 49 54 45 5f 42 59 54 45 4f  ine SQLITE_BYTEO
7050: 52 44 45 52 20 30 0a 23 20 65 6e 64 69 66 0a 23  RDER 0.# endif.#
7060: 65 6e 64 69 66 0a 23 69 66 20 53 51 4c 49 54 45  endif.#if SQLITE
7070: 5f 42 59 54 45 4f 52 44 45 52 3d 3d 34 33 32 31  _BYTEORDER==4321
7080: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
7090: 5f 42 49 47 45 4e 44 49 41 4e 20 20 20 20 31 0a  _BIGENDIAN    1.
70a0: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
70b0: 4c 49 54 54 4c 45 45 4e 44 49 41 4e 20 30 0a 23  LITTLEENDIAN 0.#
70c0: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 55   define SQLITE_U
70d0: 54 46 31 36 4e 41 54 49 56 45 20 20 53 51 4c 49  TF16NATIVE  SQLI
70e0: 54 45 5f 55 54 46 31 36 42 45 0a 23 65 6c 69 66  TE_UTF16BE.#elif
70f0: 20 53 51 4c 49 54 45 5f 42 59 54 45 4f 52 44 45   SQLITE_BYTEORDE
7100: 52 3d 3d 31 32 33 34 0a 23 20 64 65 66 69 6e 65  R==1234.# define
7110: 20 53 51 4c 49 54 45 5f 42 49 47 45 4e 44 49 41   SQLITE_BIGENDIA
7120: 4e 20 20 20 20 30 0a 23 20 64 65 66 69 6e 65 20  N    0.# define 
7130: 53 51 4c 49 54 45 5f 4c 49 54 54 4c 45 45 4e 44  SQLITE_LITTLEEND
7140: 49 41 4e 20 31 0a 23 20 64 65 66 69 6e 65 20 53  IAN 1.# define S
7150: 51 4c 49 54 45 5f 55 54 46 31 36 4e 41 54 49 56  QLITE_UTF16NATIV
7160: 45 20 20 53 51 4c 49 54 45 5f 55 54 46 31 36 4c  E  SQLITE_UTF16L
7170: 45 0a 23 65 6c 73 65 0a 23 20 69 66 64 65 66 20  E.#else.# ifdef 
7180: 53 51 4c 49 54 45 5f 41 4d 41 4c 47 41 4d 41 54  SQLITE_AMALGAMAT
7190: 49 4f 4e 0a 20 20 63 6f 6e 73 74 20 69 6e 74 20  ION.  const int 
71a0: 73 71 6c 69 74 65 33 6f 6e 65 20 3d 20 31 3b 0a  sqlite3one = 1;.
71b0: 23 20 65 6c 73 65 0a 20 20 65 78 74 65 72 6e 20  # else.  extern 
71c0: 63 6f 6e 73 74 20 69 6e 74 20 73 71 6c 69 74 65  const int sqlite
71d0: 33 6f 6e 65 3b 0a 23 20 65 6e 64 69 66 0a 23 20  3one;.# endif.# 
71e0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 42 49  define SQLITE_BI
71f0: 47 45 4e 44 49 41 4e 20 20 20 20 28 2a 28 63 68  GENDIAN    (*(ch
7200: 61 72 20 2a 29 28 26 73 71 6c 69 74 65 33 6f 6e  ar *)(&sqlite3on
7210: 65 29 3d 3d 30 29 0a 23 20 64 65 66 69 6e 65 20  e)==0).# define 
7220: 53 51 4c 49 54 45 5f 4c 49 54 54 4c 45 45 4e 44  SQLITE_LITTLEEND
7230: 49 41 4e 20 28 2a 28 63 68 61 72 20 2a 29 28 26  IAN (*(char *)(&
7240: 73 71 6c 69 74 65 33 6f 6e 65 29 3d 3d 31 29 0a  sqlite3one)==1).
7250: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
7260: 55 54 46 31 36 4e 41 54 49 56 45 20 20 28 53 51  UTF16NATIVE  (SQ
7270: 4c 49 54 45 5f 42 49 47 45 4e 44 49 41 4e 3f 53  LITE_BIGENDIAN?S
7280: 51 4c 49 54 45 5f 55 54 46 31 36 42 45 3a 53 51  QLITE_UTF16BE:SQ
7290: 4c 49 54 45 5f 55 54 46 31 36 4c 45 29 0a 23 65  LITE_UTF16LE).#e
72a0: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6e 73  ndif../*.** Cons
72b0: 74 61 6e 74 73 20 66 6f 72 20 74 68 65 20 6c 61  tants for the la
72c0: 72 67 65 73 74 20 61 6e 64 20 73 6d 61 6c 6c 65  rgest and smalle
72d0: 73 74 20 70 6f 73 73 69 62 6c 65 20 36 34 2d 62  st possible 64-b
72e0: 69 74 20 73 69 67 6e 65 64 20 69 6e 74 65 67 65  it signed intege
72f0: 72 73 2e 0a 2a 2a 20 54 68 65 73 65 20 6d 61 63  rs..** These mac
7300: 72 6f 73 20 61 72 65 20 64 65 73 69 67 6e 65 64  ros are designed
7310: 20 74 6f 20 77 6f 72 6b 20 63 6f 72 72 65 63 74   to work correct
7320: 6c 79 20 6f 6e 20 62 6f 74 68 20 33 32 2d 62 69  ly on both 32-bi
7330: 74 20 61 6e 64 20 36 34 2d 62 69 74 0a 2a 2a 20  t and 64-bit.** 
7340: 63 6f 6d 70 69 6c 65 72 73 2e 0a 2a 2f 0a 23 64  compilers..*/.#d
7350: 65 66 69 6e 65 20 4c 41 52 47 45 53 54 5f 49 4e  efine LARGEST_IN
7360: 54 36 34 20 20 28 30 78 66 66 66 66 66 66 66 66  T64  (0xffffffff
7370: 7c 28 28 28 69 36 34 29 30 78 37 66 66 66 66 66  |(((i64)0x7fffff
7380: 66 66 29 3c 3c 33 32 29 29 0a 23 64 65 66 69 6e  ff)<<32)).#defin
7390: 65 20 53 4d 41 4c 4c 45 53 54 5f 49 4e 54 36 34  e SMALLEST_INT64
73a0: 20 28 28 28 69 36 34 29 2d 31 29 20 2d 20 4c 41   (((i64)-1) - LA
73b0: 52 47 45 53 54 5f 49 4e 54 36 34 29 0a 0a 2f 2a  RGEST_INT64)../*
73c0: 0a 2a 2a 20 52 6f 75 6e 64 20 75 70 20 61 20 6e  .** Round up a n
73d0: 75 6d 62 65 72 20 74 6f 20 74 68 65 20 6e 65 78  umber to the nex
73e0: 74 20 6c 61 72 67 65 72 20 6d 75 6c 74 69 70 6c  t larger multipl
73f0: 65 20 6f 66 20 38 2e 20 20 54 68 69 73 20 69 73  e of 8.  This is
7400: 20 75 73 65 64 0a 2a 2a 20 74 6f 20 66 6f 72 63   used.** to forc
7410: 65 20 38 2d 62 79 74 65 20 61 6c 69 67 6e 6d 65  e 8-byte alignme
7420: 6e 74 20 6f 6e 20 36 34 2d 62 69 74 20 61 72 63  nt on 64-bit arc
7430: 68 69 74 65 63 74 75 72 65 73 2e 0a 2a 2f 0a 23  hitectures..*/.#
7440: 64 65 66 69 6e 65 20 52 4f 55 4e 44 38 28 78 29  define ROUND8(x)
7450: 20 20 20 20 20 28 28 28 78 29 2b 37 29 26 7e 37       (((x)+7)&~7
7460: 29 0a 0a 2f 2a 0a 2a 2a 20 52 6f 75 6e 64 20 64  )../*.** Round d
7470: 6f 77 6e 20 74 6f 20 74 68 65 20 6e 65 61 72 65  own to the neare
7480: 73 74 20 6d 75 6c 74 69 70 6c 65 20 6f 66 20 38  st multiple of 8
7490: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 52 4f 55 4e  .*/.#define ROUN
74a0: 44 44 4f 57 4e 38 28 78 29 20 28 28 78 29 26 7e  DDOWN8(x) ((x)&~
74b0: 37 29 0a 0a 2f 2a 0a 2a 2a 20 41 73 73 65 72 74  7)../*.** Assert
74c0: 20 74 68 61 74 20 74 68 65 20 70 6f 69 6e 74 65   that the pointe
74d0: 72 20 58 20 69 73 20 61 6c 69 67 6e 65 64 20 74  r X is aligned t
74e0: 6f 20 61 6e 20 38 2d 62 79 74 65 20 62 6f 75 6e  o an 8-byte boun
74f0: 64 61 72 79 2e 20 20 54 68 69 73 0a 2a 2a 20 6d  dary.  This.** m
7500: 61 63 72 6f 20 69 73 20 75 73 65 64 20 6f 6e 6c  acro is used onl
7510: 79 20 77 69 74 68 69 6e 20 61 73 73 65 72 74 28  y within assert(
7520: 29 20 74 6f 20 76 65 72 69 66 79 20 74 68 61 74  ) to verify that
7530: 20 74 68 65 20 63 6f 64 65 20 67 65 74 73 0a 2a   the code gets.*
7540: 2a 20 61 6c 6c 20 61 6c 69 67 6e 6d 65 6e 74 20  * all alignment 
7550: 72 65 73 74 72 69 63 74 69 6f 6e 73 20 63 6f 72  restrictions cor
7560: 72 65 63 74 2e 0a 2a 2a 0a 2a 2a 20 45 78 63 65  rect..**.** Exce
7570: 70 74 2c 20 69 66 20 53 51 4c 49 54 45 5f 34 5f  pt, if SQLITE_4_
7580: 42 59 54 45 5f 41 4c 49 47 4e 45 44 5f 4d 41 4c  BYTE_ALIGNED_MAL
7590: 4c 4f 43 20 69 73 20 64 65 66 69 6e 65 64 2c 20  LOC is defined, 
75a0: 74 68 65 6e 20 74 68 65 0a 2a 2a 20 75 6e 64 65  then the.** unde
75b0: 72 6c 79 69 6e 67 20 6d 61 6c 6c 6f 63 28 29 20  rlying malloc() 
75c0: 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6d  implementation m
75d0: 69 67 68 74 20 72 65 74 75 72 6e 20 75 73 20 34  ight return us 4
75e0: 2d 62 79 74 65 20 61 6c 69 67 6e 65 64 0a 2a 2a  -byte aligned.**
75f0: 20 70 6f 69 6e 74 65 72 73 2e 20 20 49 6e 20 74   pointers.  In t
7600: 68 61 74 20 63 61 73 65 2c 20 6f 6e 6c 79 20 76  hat case, only v
7610: 65 72 69 66 79 20 34 2d 62 79 74 65 20 61 6c 69  erify 4-byte ali
7620: 67 6e 6d 65 6e 74 2e 0a 2a 2f 0a 23 69 66 64 65  gnment..*/.#ifde
7630: 66 20 53 51 4c 49 54 45 5f 34 5f 42 59 54 45 5f  f SQLITE_4_BYTE_
7640: 41 4c 49 47 4e 45 44 5f 4d 41 4c 4c 4f 43 0a 23  ALIGNED_MALLOC.#
7650: 20 64 65 66 69 6e 65 20 45 49 47 48 54 5f 42 59   define EIGHT_BY
7660: 54 45 5f 41 4c 49 47 4e 4d 45 4e 54 28 58 29 20  TE_ALIGNMENT(X) 
7670: 20 20 28 28 28 28 63 68 61 72 2a 29 28 58 29 20    ((((char*)(X) 
7680: 2d 20 28 63 68 61 72 2a 29 30 29 26 33 29 3d 3d  - (char*)0)&3)==
7690: 30 29 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e  0).#else.# defin
76a0: 65 20 45 49 47 48 54 5f 42 59 54 45 5f 41 4c 49  e EIGHT_BYTE_ALI
76b0: 47 4e 4d 45 4e 54 28 58 29 20 20 20 28 28 28 28  GNMENT(X)   ((((
76c0: 63 68 61 72 2a 29 28 58 29 20 2d 20 28 63 68 61  char*)(X) - (cha
76d0: 72 2a 29 30 29 26 37 29 3d 3d 30 29 0a 23 65 6e  r*)0)&7)==0).#en
76e0: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 44 69 73 61 62  dif../*.** Disab
76f0: 6c 65 20 4d 4d 41 50 20 6f 6e 20 70 6c 61 74 66  le MMAP on platf
7700: 6f 72 6d 73 20 77 68 65 72 65 20 69 74 20 69 73  orms where it is
7710: 20 6b 6e 6f 77 6e 20 74 6f 20 6e 6f 74 20 77 6f   known to not wo
7720: 72 6b 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65  rk.*/.#if define
7730: 64 28 5f 5f 4f 70 65 6e 42 53 44 5f 5f 29 20 7c  d(__OpenBSD__) |
7740: 7c 20 64 65 66 69 6e 65 64 28 5f 5f 51 4e 58 4e  | defined(__QNXN
7750: 54 4f 5f 5f 29 0a 23 20 75 6e 64 65 66 20 53 51  TO__).# undef SQ
7760: 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49  LITE_MAX_MMAP_SI
7770: 5a 45 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  ZE.# define SQLI
7780: 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45  TE_MAX_MMAP_SIZE
7790: 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a   0.#endif../*.**
77a0: 20 44 65 66 61 75 6c 74 20 6d 61 78 69 6d 75 6d   Default maximum
77b0: 20 73 69 7a 65 20 6f 66 20 6d 65 6d 6f 72 79 20   size of memory 
77c0: 75 73 65 64 20 62 79 20 6d 65 6d 6f 72 79 2d 6d  used by memory-m
77d0: 61 70 70 65 64 20 49 2f 4f 20 69 6e 20 74 68 65  apped I/O in the
77e0: 20 56 46 53 0a 2a 2f 0a 23 69 66 64 65 66 20 5f   VFS.*/.#ifdef _
77f0: 5f 41 50 50 4c 45 5f 5f 0a 23 20 69 6e 63 6c 75  _APPLE__.# inclu
7800: 64 65 20 3c 54 61 72 67 65 74 43 6f 6e 64 69 74  de <TargetCondit
7810: 69 6f 6e 61 6c 73 2e 68 3e 0a 23 65 6e 64 69 66  ionals.h>.#endif
7820: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
7830: 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 0a 23 20  MAX_MMAP_SIZE.# 
7840: 69 66 20 64 65 66 69 6e 65 64 28 5f 5f 6c 69 6e  if defined(__lin
7850: 75 78 5f 5f 29 20 5c 0a 20 20 7c 7c 20 64 65 66  ux__) \.  || def
7860: 69 6e 65 64 28 5f 57 49 4e 33 32 29 20 5c 0a 20  ined(_WIN32) \. 
7870: 20 7c 7c 20 28 64 65 66 69 6e 65 64 28 5f 5f 41   || (defined(__A
7880: 50 50 4c 45 5f 5f 29 20 26 26 20 64 65 66 69 6e  PPLE__) && defin
7890: 65 64 28 5f 5f 4d 41 43 48 5f 5f 29 29 20 5c 0a  ed(__MACH__)) \.
78a0: 20 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 73    || defined(__s
78b0: 75 6e 29 20 5c 0a 20 20 7c 7c 20 64 65 66 69 6e  un) \.  || defin
78c0: 65 64 28 5f 5f 46 72 65 65 42 53 44 5f 5f 29 20  ed(__FreeBSD__) 
78d0: 5c 0a 20 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f  \.  || defined(_
78e0: 5f 44 72 61 67 6f 6e 46 6c 79 5f 5f 29 0a 23 20  _DragonFly__).# 
78f0: 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f    define SQLITE_
7900: 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 20 30 78  MAX_MMAP_SIZE 0x
7910: 37 66 66 66 30 30 30 30 20 20 2f 2a 20 32 31 34  7fff0000  /* 214
7920: 37 34 31 38 31 31 32 20 2a 2f 0a 23 20 65 6c 73  7418112 */.# els
7930: 65 0a 23 20 20 20 64 65 66 69 6e 65 20 53 51 4c  e.#   define SQL
7940: 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a  ITE_MAX_MMAP_SIZ
7950: 45 20 30 0a 23 20 65 6e 64 69 66 0a 23 65 6e 64  E 0.# endif.#end
7960: 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 64 65  if../*.** The de
7970: 66 61 75 6c 74 20 4d 4d 41 50 5f 53 49 5a 45 20  fault MMAP_SIZE 
7980: 69 73 20 7a 65 72 6f 20 6f 6e 20 61 6c 6c 20 70  is zero on all p
7990: 6c 61 74 66 6f 72 6d 73 2e 20 20 4f 72 2c 20 65  latforms.  Or, e
79a0: 76 65 6e 20 69 66 20 61 20 6c 61 72 67 65 72 0a  ven if a larger.
79b0: 2a 2a 20 64 65 66 61 75 6c 74 20 4d 4d 41 50 5f  ** default MMAP_
79c0: 53 49 5a 45 20 69 73 20 73 70 65 63 69 66 69 65  SIZE is specifie
79d0: 64 20 61 74 20 63 6f 6d 70 69 6c 65 2d 74 69 6d  d at compile-tim
79e0: 65 2c 20 6d 61 6b 65 20 73 75 72 65 20 74 68 61  e, make sure tha
79f0: 74 20 69 74 20 64 6f 65 73 0a 2a 2a 20 6e 6f 74  t it does.** not
7a00: 20 65 78 63 65 65 64 20 74 68 65 20 6d 61 78 69   exceed the maxi
7a10: 6d 75 6d 20 6d 6d 61 70 20 73 69 7a 65 2e 0a 2a  mum mmap size..*
7a20: 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  /.#ifndef SQLITE
7a30: 5f 44 45 46 41 55 4c 54 5f 4d 4d 41 50 5f 53 49  _DEFAULT_MMAP_SI
7a40: 5a 45 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  ZE.# define SQLI
7a50: 54 45 5f 44 45 46 41 55 4c 54 5f 4d 4d 41 50 5f  TE_DEFAULT_MMAP_
7a60: 53 49 5a 45 20 30 0a 23 65 6e 64 69 66 0a 23 69  SIZE 0.#endif.#i
7a70: 66 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54  f SQLITE_DEFAULT
7a80: 5f 4d 4d 41 50 5f 53 49 5a 45 3e 53 51 4c 49 54  _MMAP_SIZE>SQLIT
7a90: 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 0a  E_MAX_MMAP_SIZE.
7aa0: 23 20 75 6e 64 65 66 20 53 51 4c 49 54 45 5f 44  # undef SQLITE_D
7ab0: 45 46 41 55 4c 54 5f 4d 4d 41 50 5f 53 49 5a 45  EFAULT_MMAP_SIZE
7ac0: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
7ad0: 5f 44 45 46 41 55 4c 54 5f 4d 4d 41 50 5f 53 49  _DEFAULT_MMAP_SI
7ae0: 5a 45 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d  ZE SQLITE_MAX_MM
7af0: 41 50 5f 53 49 5a 45 0a 23 65 6e 64 69 66 0a 0a  AP_SIZE.#endif..
7b00: 2f 2a 0a 2a 2a 20 4f 6e 6c 79 20 6f 6e 65 20 6f  /*.** Only one o
7b10: 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
7b20: 53 54 41 54 33 20 6f 72 20 53 51 4c 49 54 45 5f  STAT3 or SQLITE_
7b30: 45 4e 41 42 4c 45 5f 53 54 41 54 34 20 63 61 6e  ENABLE_STAT4 can
7b40: 20 62 65 20 64 65 66 69 6e 65 64 2e 0a 2a 2a 20   be defined..** 
7b50: 50 72 69 6f 72 69 74 79 20 69 73 20 67 69 76 65  Priority is give
7b60: 6e 20 74 6f 20 53 51 4c 49 54 45 5f 45 4e 41 42  n to SQLITE_ENAB
7b70: 4c 45 5f 53 54 41 54 34 2e 20 20 49 66 20 65 69  LE_STAT4.  If ei
7b80: 74 68 65 72 20 61 72 65 20 64 65 66 69 6e 65 64  ther are defined
7b90: 2c 20 61 6c 73 6f 0a 2a 2a 20 64 65 66 69 6e 65  , also.** define
7ba0: 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53   SQLITE_ENABLE_S
7bb0: 54 41 54 33 5f 4f 52 5f 53 54 41 54 34 0a 2a 2f  TAT3_OR_STAT4.*/
7bc0: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45  .#ifdef SQLITE_E
7bd0: 4e 41 42 4c 45 5f 53 54 41 54 34 0a 23 20 75 6e  NABLE_STAT4.# un
7be0: 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  def SQLITE_ENABL
7bf0: 45 5f 53 54 41 54 33 0a 23 20 64 65 66 69 6e 65  E_STAT3.# define
7c00: 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53   SQLITE_ENABLE_S
7c10: 54 41 54 33 5f 4f 52 5f 53 54 41 54 34 20 31 0a  TAT3_OR_STAT4 1.
7c20: 23 65 6c 69 66 20 53 51 4c 49 54 45 5f 45 4e 41  #elif SQLITE_ENA
7c30: 42 4c 45 5f 53 54 41 54 33 0a 23 20 64 65 66 69  BLE_STAT3.# defi
7c40: 6e 65 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ne SQLITE_ENABLE
7c50: 5f 53 54 41 54 33 5f 4f 52 5f 53 54 41 54 34 20  _STAT3_OR_STAT4 
7c60: 31 0a 23 65 6c 69 66 20 53 51 4c 49 54 45 5f 45  1.#elif SQLITE_E
7c70: 4e 41 42 4c 45 5f 53 54 41 54 33 5f 4f 52 5f 53  NABLE_STAT3_OR_S
7c80: 54 41 54 34 0a 23 20 75 6e 64 65 66 20 53 51 4c  TAT4.# undef SQL
7c90: 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33  ITE_ENABLE_STAT3
7ca0: 5f 4f 52 5f 53 54 41 54 34 0a 23 65 6e 64 69 66  _OR_STAT4.#endif
7cb0: 0a 0a 2f 2a 0a 2a 2a 20 53 45 4c 45 43 54 54 52  ../*.** SELECTTR
7cc0: 41 43 45 5f 45 4e 41 42 4c 45 44 20 77 69 6c 6c  ACE_ENABLED will
7cd0: 20 62 65 20 65 69 74 68 65 72 20 31 20 6f 72 20   be either 1 or 
7ce0: 30 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20 77  0 depending on w
7cf0: 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 0a 2a 2a  hether or not.**
7d00: 20 74 68 65 20 53 65 6c 65 63 74 20 71 75 65 72   the Select quer
7d10: 79 20 67 65 6e 65 72 61 74 6f 72 20 74 72 61 63  y generator trac
7d20: 69 6e 67 20 6c 6f 67 69 63 20 69 73 20 74 75 72  ing logic is tur
7d30: 6e 65 64 20 6f 6e 2e 0a 2a 2f 0a 23 69 66 20 64  ned on..*/.#if d
7d40: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e  efined(SQLITE_EN
7d50: 41 42 4c 45 5f 53 45 4c 45 43 54 54 52 41 43 45  ABLE_SELECTTRACE
7d60: 29 0a 23 20 64 65 66 69 6e 65 20 53 45 4c 45 43  ).# define SELEC
7d70: 54 54 52 41 43 45 5f 45 4e 41 42 4c 45 44 20 31  TTRACE_ENABLED 1
7d80: 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
7d90: 53 45 4c 45 43 54 54 52 41 43 45 5f 45 4e 41 42  SELECTTRACE_ENAB
7da0: 4c 45 44 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a  LED 0.#endif../*
7db0: 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20  .** An instance 
7dc0: 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  of the following
7dd0: 20 73 74 72 75 63 74 75 72 65 20 69 73 20 75 73   structure is us
7de0: 65 64 20 74 6f 20 73 74 6f 72 65 20 74 68 65 20  ed to store the 
7df0: 62 75 73 79 2d 68 61 6e 64 6c 65 72 0a 2a 2a 20  busy-handler.** 
7e00: 63 61 6c 6c 62 61 63 6b 20 66 6f 72 20 61 20 67  callback for a g
7e10: 69 76 65 6e 20 73 71 6c 69 74 65 20 68 61 6e 64  iven sqlite hand
7e20: 6c 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 73 71  le..**.** The sq
7e30: 6c 69 74 65 2e 62 75 73 79 48 61 6e 64 6c 65 72  lite.busyHandler
7e40: 20 6d 65 6d 62 65 72 20 6f 66 20 74 68 65 20 73   member of the s
7e50: 71 6c 69 74 65 20 73 74 72 75 63 74 20 63 6f 6e  qlite struct con
7e60: 74 61 69 6e 73 20 74 68 65 20 62 75 73 79 0a 2a  tains the busy.*
7e70: 2a 20 63 61 6c 6c 62 61 63 6b 20 66 6f 72 20 74  * callback for t
7e80: 68 65 20 64 61 74 61 62 61 73 65 20 68 61 6e 64  he database hand
7e90: 6c 65 2e 20 45 61 63 68 20 70 61 67 65 72 20 6f  le. Each pager o
7ea0: 70 65 6e 65 64 20 76 69 61 20 74 68 65 20 73 71  pened via the sq
7eb0: 6c 69 74 65 0a 2a 2a 20 68 61 6e 64 6c 65 20 69  lite.** handle i
7ec0: 73 20 70 61 73 73 65 64 20 61 20 70 6f 69 6e 74  s passed a point
7ed0: 65 72 20 74 6f 20 73 71 6c 69 74 65 2e 62 75 73  er to sqlite.bus
7ee0: 79 48 61 6e 64 6c 65 72 2e 20 54 68 65 20 62 75  yHandler. The bu
7ef0: 73 79 2d 68 61 6e 64 6c 65 72 0a 2a 2a 20 63 61  sy-handler.** ca
7f00: 6c 6c 62 61 63 6b 20 69 73 20 63 75 72 72 65 6e  llback is curren
7f10: 74 6c 79 20 69 6e 76 6f 6b 65 64 20 6f 6e 6c 79  tly invoked only
7f20: 20 66 72 6f 6d 20 77 69 74 68 69 6e 20 70 61 67   from within pag
7f30: 65 72 2e 63 2e 0a 2a 2f 0a 74 79 70 65 64 65 66  er.c..*/.typedef
7f40: 20 73 74 72 75 63 74 20 42 75 73 79 48 61 6e 64   struct BusyHand
7f50: 6c 65 72 20 42 75 73 79 48 61 6e 64 6c 65 72 3b  ler BusyHandler;
7f60: 0a 73 74 72 75 63 74 20 42 75 73 79 48 61 6e 64  .struct BusyHand
7f70: 6c 65 72 20 7b 0a 20 20 69 6e 74 20 28 2a 78 42  ler {.  int (*xB
7f80: 75 73 79 48 61 6e 64 6c 65 72 29 28 76 6f 69 64  usyHandler)(void
7f90: 20 2a 2c 69 6e 74 29 3b 20 20 2f 2a 20 54 68 65   *,int);  /* The
7fa0: 20 62 75 73 79 20 63 61 6c 6c 62 61 63 6b 20 2a   busy callback *
7fb0: 2f 0a 20 20 76 6f 69 64 20 2a 70 42 75 73 79 41  /.  void *pBusyA
7fc0: 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  rg;             
7fd0: 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20 61        /* First a
7fe0: 72 67 20 74 6f 20 62 75 73 79 20 63 61 6c 6c 62  rg to busy callb
7ff0: 61 63 6b 20 2a 2f 0a 20 20 69 6e 74 20 6e 42 75  ack */.  int nBu
8000: 73 79 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  sy;             
8010: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e             /* In
8020: 63 72 65 6d 65 6e 74 65 64 20 77 69 74 68 20 65  cremented with e
8030: 61 63 68 20 62 75 73 79 20 63 61 6c 6c 20 2a 2f  ach busy call */
8040: 0a 20 20 75 38 20 62 45 78 74 72 61 46 69 6c 65  .  u8 bExtraFile
8050: 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20  Arg;            
8060: 20 20 20 20 20 2f 2a 20 49 6e 63 6c 75 64 65 20       /* Include 
8070: 73 71 6c 69 74 65 33 5f 66 69 6c 65 20 61 73 20  sqlite3_file as 
8080: 63 61 6c 6c 62 61 63 6b 20 61 72 67 20 2a 2f 0a  callback arg */.
8090: 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 4e 61 6d 65 20 6f  };../*.** Name o
80a0: 66 20 74 68 65 20 6d 61 73 74 65 72 20 64 61 74  f the master dat
80b0: 61 62 61 73 65 20 74 61 62 6c 65 2e 20 20 54 68  abase table.  Th
80c0: 65 20 6d 61 73 74 65 72 20 64 61 74 61 62 61 73  e master databas
80d0: 65 20 74 61 62 6c 65 0a 2a 2a 20 69 73 20 61 20  e table.** is a 
80e0: 73 70 65 63 69 61 6c 20 74 61 62 6c 65 20 74 68  special table th
80f0: 61 74 20 68 6f 6c 64 73 20 74 68 65 20 6e 61 6d  at holds the nam
8100: 65 73 20 61 6e 64 20 61 74 74 72 69 62 75 74 65  es and attribute
8110: 73 20 6f 66 20 61 6c 6c 0a 2a 2a 20 75 73 65 72  s of all.** user
8120: 20 74 61 62 6c 65 73 20 61 6e 64 20 69 6e 64 69   tables and indi
8130: 63 65 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ces..*/.#define 
8140: 4d 41 53 54 45 52 5f 4e 41 4d 45 20 20 20 20 20  MASTER_NAME     
8150: 20 20 22 73 71 6c 69 74 65 5f 6d 61 73 74 65 72    "sqlite_master
8160: 22 0a 23 64 65 66 69 6e 65 20 54 45 4d 50 5f 4d  ".#define TEMP_M
8170: 41 53 54 45 52 5f 4e 41 4d 45 20 20 22 73 71 6c  ASTER_NAME  "sql
8180: 69 74 65 5f 74 65 6d 70 5f 6d 61 73 74 65 72 22  ite_temp_master"
8190: 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 72 6f 6f 74  ../*.** The root
81a0: 2d 70 61 67 65 20 6f 66 20 74 68 65 20 6d 61 73  -page of the mas
81b0: 74 65 72 20 64 61 74 61 62 61 73 65 20 74 61 62  ter database tab
81c0: 6c 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4d  le..*/.#define M
81d0: 41 53 54 45 52 5f 52 4f 4f 54 20 20 20 20 20 20  ASTER_ROOT      
81e0: 20 31 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6e 61   1../*.** The na
81f0: 6d 65 20 6f 66 20 74 68 65 20 73 63 68 65 6d 61  me of the schema
8200: 20 74 61 62 6c 65 2e 0a 2a 2f 0a 23 64 65 66 69   table..*/.#defi
8210: 6e 65 20 53 43 48 45 4d 41 5f 54 41 42 4c 45 28  ne SCHEMA_TABLE(
8220: 78 29 20 20 28 28 21 4f 4d 49 54 5f 54 45 4d 50  x)  ((!OMIT_TEMP
8230: 44 42 29 26 26 28 78 3d 3d 31 29 3f 54 45 4d 50  DB)&&(x==1)?TEMP
8240: 5f 4d 41 53 54 45 52 5f 4e 41 4d 45 3a 4d 41 53  _MASTER_NAME:MAS
8250: 54 45 52 5f 4e 41 4d 45 29 0a 0a 2f 2a 0a 2a 2a  TER_NAME)../*.**
8260: 20 41 20 63 6f 6e 76 65 6e 69 65 6e 63 65 20 6d   A convenience m
8270: 61 63 72 6f 20 74 68 61 74 20 72 65 74 75 72 6e  acro that return
8280: 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  s the number of 
8290: 65 6c 65 6d 65 6e 74 73 20 69 6e 0a 2a 2a 20 61  elements in.** a
82a0: 6e 20 61 72 72 61 79 2e 0a 2a 2f 0a 23 64 65 66  n array..*/.#def
82b0: 69 6e 65 20 41 72 72 61 79 53 69 7a 65 28 58 29  ine ArraySize(X)
82c0: 20 20 20 20 28 28 69 6e 74 29 28 73 69 7a 65 6f      ((int)(sizeo
82d0: 66 28 58 29 2f 73 69 7a 65 6f 66 28 58 5b 30 5d  f(X)/sizeof(X[0]
82e0: 29 29 29 0a 0a 2f 2a 0a 2a 2a 20 44 65 74 65 72  )))../*.** Deter
82f0: 6d 69 6e 65 20 69 66 20 74 68 65 20 61 72 67 75  mine if the argu
8300: 6d 65 6e 74 20 69 73 20 61 20 70 6f 77 65 72 20  ment is a power 
8310: 6f 66 20 74 77 6f 0a 2a 2f 0a 23 64 65 66 69 6e  of two.*/.#defin
8320: 65 20 49 73 50 6f 77 65 72 4f 66 54 77 6f 28 58  e IsPowerOfTwo(X
8330: 29 20 28 28 28 58 29 26 28 28 58 29 2d 31 29 29  ) (((X)&((X)-1))
8340: 3d 3d 30 29 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  ==0)../*.** The 
8350: 66 6f 6c 6c 6f 77 69 6e 67 20 76 61 6c 75 65 20  following value 
8360: 61 73 20 61 20 64 65 73 74 72 75 63 74 6f 72 20  as a destructor 
8370: 6d 65 61 6e 73 20 74 6f 20 75 73 65 20 73 71 6c  means to use sql
8380: 69 74 65 33 44 62 46 72 65 65 28 29 2e 0a 2a 2a  ite3DbFree()..**
8390: 20 54 68 65 20 73 71 6c 69 74 65 33 44 62 46 72   The sqlite3DbFr
83a0: 65 65 28 29 20 72 6f 75 74 69 6e 65 20 72 65 71  ee() routine req
83b0: 75 69 72 65 73 20 74 77 6f 20 70 61 72 61 6d 65  uires two parame
83c0: 74 65 72 73 20 69 6e 73 74 65 61 64 20 6f 66 20  ters instead of 
83d0: 74 68 65 0a 2a 2a 20 6f 6e 65 20 70 61 72 61 6d  the.** one param
83e0: 65 74 65 72 20 74 68 61 74 20 64 65 73 74 72 75  eter that destru
83f0: 63 74 6f 72 73 20 6e 6f 72 6d 61 6c 6c 79 20 77  ctors normally w
8400: 61 6e 74 2e 20 20 53 6f 20 77 65 20 68 61 76 65  ant.  So we have
8410: 20 74 6f 20 69 6e 74 72 6f 64 75 63 65 0a 2a 2a   to introduce.**
8420: 20 74 68 69 73 20 6d 61 67 69 63 20 76 61 6c 75   this magic valu
8430: 65 20 74 68 61 74 20 74 68 65 20 63 6f 64 65 20  e that the code 
8440: 6b 6e 6f 77 73 20 74 6f 20 68 61 6e 64 6c 65 20  knows to handle 
8450: 64 69 66 66 65 72 65 6e 74 6c 79 2e 20 20 41 6e  differently.  An
8460: 79 0a 2a 2a 20 70 6f 69 6e 74 65 72 20 77 69 6c  y.** pointer wil
8470: 6c 20 77 6f 72 6b 20 68 65 72 65 20 61 73 20 6c  l work here as l
8480: 6f 6e 67 20 61 73 20 69 74 20 69 73 20 64 69 73  ong as it is dis
8490: 74 69 6e 63 74 20 66 72 6f 6d 20 53 51 4c 49 54  tinct from SQLIT
84a0: 45 5f 53 54 41 54 49 43 0a 2a 2a 20 61 6e 64 20  E_STATIC.** and 
84b0: 53 51 4c 49 54 45 5f 54 52 41 4e 53 49 45 4e 54  SQLITE_TRANSIENT
84c0: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  ..*/.#define SQL
84d0: 49 54 45 5f 44 59 4e 41 4d 49 43 20 20 20 28 28  ITE_DYNAMIC   ((
84e0: 73 71 6c 69 74 65 33 5f 64 65 73 74 72 75 63 74  sqlite3_destruct
84f0: 6f 72 5f 74 79 70 65 29 73 71 6c 69 74 65 33 4d  or_type)sqlite3M
8500: 61 6c 6c 6f 63 53 69 7a 65 29 0a 0a 2f 2a 0a 2a  allocSize)../*.*
8510: 2a 20 57 68 65 6e 20 53 51 4c 49 54 45 5f 4f 4d  * When SQLITE_OM
8520: 49 54 5f 57 53 44 20 69 73 20 64 65 66 69 6e 65  IT_WSD is define
8530: 64 2c 20 69 74 20 6d 65 61 6e 73 20 74 68 61 74  d, it means that
8540: 20 74 68 65 20 74 61 72 67 65 74 20 70 6c 61 74   the target plat
8550: 66 6f 72 6d 20 64 6f 65 73 0a 2a 2a 20 6e 6f 74  form does.** not
8560: 20 73 75 70 70 6f 72 74 20 57 72 69 74 61 62 6c   support Writabl
8570: 65 20 53 74 61 74 69 63 20 44 61 74 61 20 28 57  e Static Data (W
8580: 53 44 29 20 73 75 63 68 20 61 73 20 67 6c 6f 62  SD) such as glob
8590: 61 6c 20 61 6e 64 20 73 74 61 74 69 63 20 76 61  al and static va
85a0: 72 69 61 62 6c 65 73 2e 0a 2a 2a 20 41 6c 6c 20  riables..** All 
85b0: 76 61 72 69 61 62 6c 65 73 20 6d 75 73 74 20 65  variables must e
85c0: 69 74 68 65 72 20 62 65 20 6f 6e 20 74 68 65 20  ither be on the 
85d0: 73 74 61 63 6b 20 6f 72 20 64 79 6e 61 6d 69 63  stack or dynamic
85e0: 61 6c 6c 79 20 61 6c 6c 6f 63 61 74 65 64 20 66  ally allocated f
85f0: 72 6f 6d 0a 2a 2a 20 74 68 65 20 68 65 61 70 2e  rom.** the heap.
8600: 20 20 57 68 65 6e 20 57 53 44 20 69 73 20 75 6e    When WSD is un
8610: 73 75 70 70 6f 72 74 65 64 2c 20 74 68 65 20 76  supported, the v
8620: 61 72 69 61 62 6c 65 20 64 65 63 6c 61 72 61 74  ariable declarat
8630: 69 6f 6e 73 20 73 63 61 74 74 65 72 65 64 0a 2a  ions scattered.*
8640: 2a 20 74 68 72 6f 75 67 68 6f 75 74 20 74 68 65  * throughout the
8650: 20 53 51 4c 69 74 65 20 63 6f 64 65 20 6d 75 73   SQLite code mus
8660: 74 20 62 65 63 6f 6d 65 20 63 6f 6e 73 74 61 6e  t become constan
8670: 74 73 20 69 6e 73 74 65 61 64 2e 20 20 54 68 65  ts instead.  The
8680: 20 53 51 4c 49 54 45 5f 57 53 44 0a 2a 2a 20 6d   SQLITE_WSD.** m
8690: 61 63 72 6f 20 69 73 20 75 73 65 64 20 66 6f 72  acro is used for
86a0: 20 74 68 69 73 20 70 75 72 70 6f 73 65 2e 20 20   this purpose.  
86b0: 41 6e 64 20 69 6e 73 74 65 61 64 20 6f 66 20 72  And instead of r
86c0: 65 66 65 72 65 6e 63 69 6e 67 20 74 68 65 20 76  eferencing the v
86d0: 61 72 69 61 62 6c 65 0a 2a 2a 20 64 69 72 65 63  ariable.** direc
86e0: 74 6c 79 2c 20 77 65 20 75 73 65 20 69 74 73 20  tly, we use its 
86f0: 63 6f 6e 73 74 61 6e 74 20 61 73 20 61 20 6b 65  constant as a ke
8700: 79 20 74 6f 20 6c 6f 6f 6b 75 70 20 74 68 65 20  y to lookup the 
8710: 72 75 6e 2d 74 69 6d 65 20 61 6c 6c 6f 63 61 74  run-time allocat
8720: 65 64 0a 2a 2a 20 62 75 66 66 65 72 20 74 68 61  ed.** buffer tha
8730: 74 20 68 6f 6c 64 73 20 72 65 61 6c 20 76 61 72  t holds real var
8740: 69 61 62 6c 65 2e 20 20 54 68 65 20 63 6f 6e 73  iable.  The cons
8750: 74 61 6e 74 20 69 73 20 61 6c 73 6f 20 74 68 65  tant is also the
8760: 20 69 6e 69 74 69 61 6c 69 7a 65 72 0a 2a 2a 20   initializer.** 
8770: 66 6f 72 20 74 68 65 20 72 75 6e 2d 74 69 6d 65  for the run-time
8780: 20 61 6c 6c 6f 63 61 74 65 64 20 62 75 66 66 65   allocated buffe
8790: 72 2e 0a 2a 2a 0a 2a 2a 20 49 6e 20 74 68 65 20  r..**.** In the 
87a0: 75 73 75 61 6c 20 63 61 73 65 20 77 68 65 72 65  usual case where
87b0: 20 57 53 44 20 69 73 20 73 75 70 70 6f 72 74 65   WSD is supporte
87c0: 64 2c 20 74 68 65 20 53 51 4c 49 54 45 5f 57 53  d, the SQLITE_WS
87d0: 44 20 61 6e 64 20 47 4c 4f 42 41 4c 0a 2a 2a 20  D and GLOBAL.** 
87e0: 6d 61 63 72 6f 73 20 62 65 63 6f 6d 65 20 6e 6f  macros become no
87f0: 2d 6f 70 73 20 61 6e 64 20 68 61 76 65 20 7a 65  -ops and have ze
8800: 72 6f 20 70 65 72 66 6f 72 6d 61 6e 63 65 20 69  ro performance i
8810: 6d 70 61 63 74 2e 0a 2a 2f 0a 23 69 66 64 65 66  mpact..*/.#ifdef
8820: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 53 44   SQLITE_OMIT_WSD
8830: 0a 20 20 23 64 65 66 69 6e 65 20 53 51 4c 49 54  .  #define SQLIT
8840: 45 5f 57 53 44 20 63 6f 6e 73 74 0a 20 20 23 64  E_WSD const.  #d
8850: 65 66 69 6e 65 20 47 4c 4f 42 41 4c 28 74 2c 76  efine GLOBAL(t,v
8860: 29 20 28 2a 28 74 2a 29 73 71 6c 69 74 65 33 5f  ) (*(t*)sqlite3_
8870: 77 73 64 5f 66 69 6e 64 28 28 76 6f 69 64 2a 29  wsd_find((void*)
8880: 26 28 76 29 2c 20 73 69 7a 65 6f 66 28 76 29 29  &(v), sizeof(v))
8890: 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69  ).  #define sqli
88a0: 74 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 20  te3GlobalConfig 
88b0: 47 4c 4f 42 41 4c 28 73 74 72 75 63 74 20 53 71  GLOBAL(struct Sq
88c0: 6c 69 74 65 33 43 6f 6e 66 69 67 2c 20 73 71 6c  lite3Config, sql
88d0: 69 74 65 33 43 6f 6e 66 69 67 29 0a 20 20 69 6e  ite3Config).  in
88e0: 74 20 73 71 6c 69 74 65 33 5f 77 73 64 5f 69 6e  t sqlite3_wsd_in
88f0: 69 74 28 69 6e 74 20 4e 2c 20 69 6e 74 20 4a 29  it(int N, int J)
8900: 3b 0a 20 20 76 6f 69 64 20 2a 73 71 6c 69 74 65  ;.  void *sqlite
8910: 33 5f 77 73 64 5f 66 69 6e 64 28 76 6f 69 64 20  3_wsd_find(void 
8920: 2a 4b 2c 20 69 6e 74 20 4c 29 3b 0a 23 65 6c 73  *K, int L);.#els
8930: 65 0a 20 20 23 64 65 66 69 6e 65 20 53 51 4c 49  e.  #define SQLI
8940: 54 45 5f 57 53 44 0a 20 20 23 64 65 66 69 6e 65  TE_WSD.  #define
8950: 20 47 4c 4f 42 41 4c 28 74 2c 76 29 20 76 0a 20   GLOBAL(t,v) v. 
8960: 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33   #define sqlite3
8970: 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 20 73 71 6c  GlobalConfig sql
8980: 69 74 65 33 43 6f 6e 66 69 67 0a 23 65 6e 64 69  ite3Config.#endi
8990: 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c  f../*.** The fol
89a0: 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 73 20 61 72  lowing macros ar
89b0: 65 20 75 73 65 64 20 74 6f 20 73 75 70 70 72 65  e used to suppre
89c0: 73 73 20 63 6f 6d 70 69 6c 65 72 20 77 61 72 6e  ss compiler warn
89d0: 69 6e 67 73 20 61 6e 64 20 74 6f 0a 2a 2a 20 6d  ings and to.** m
89e0: 61 6b 65 20 69 74 20 63 6c 65 61 72 20 74 6f 20  ake it clear to 
89f0: 68 75 6d 61 6e 20 72 65 61 64 65 72 73 20 77 68  human readers wh
8a00: 65 6e 20 61 20 66 75 6e 63 74 69 6f 6e 20 70 61  en a function pa
8a10: 72 61 6d 65 74 65 72 20 69 73 20 64 65 6c 69 62  rameter is delib
8a20: 65 72 61 74 65 6c 79 0a 2a 2a 20 6c 65 66 74 20  erately.** left 
8a30: 75 6e 75 73 65 64 20 77 69 74 68 69 6e 20 74 68  unused within th
8a40: 65 20 62 6f 64 79 20 6f 66 20 61 20 66 75 6e 63  e body of a func
8a50: 74 69 6f 6e 2e 20 54 68 69 73 20 75 73 75 61 6c  tion. This usual
8a60: 6c 79 20 68 61 70 70 65 6e 73 20 77 68 65 6e 0a  ly happens when.
8a70: 2a 2a 20 61 20 66 75 6e 63 74 69 6f 6e 20 69 73  ** a function is
8a80: 20 63 61 6c 6c 65 64 20 76 69 61 20 61 20 66 75   called via a fu
8a90: 6e 63 74 69 6f 6e 20 70 6f 69 6e 74 65 72 2e 20  nction pointer. 
8aa0: 46 6f 72 20 65 78 61 6d 70 6c 65 20 74 68 65 0a  For example the.
8ab0: 2a 2a 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  ** implementatio
8ac0: 6e 20 6f 66 20 61 6e 20 53 51 4c 20 61 67 67 72  n of an SQL aggr
8ad0: 65 67 61 74 65 20 73 74 65 70 20 63 61 6c 6c 62  egate step callb
8ae0: 61 63 6b 20 6d 61 79 20 6e 6f 74 20 75 73 65 20  ack may not use 
8af0: 74 68 65 0a 2a 2a 20 70 61 72 61 6d 65 74 65 72  the.** parameter
8b00: 20 69 6e 64 69 63 61 74 69 6e 67 20 74 68 65 20   indicating the 
8b10: 6e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65  number of argume
8b20: 6e 74 73 20 70 61 73 73 65 64 20 74 6f 20 74 68  nts passed to th
8b30: 65 20 61 67 67 72 65 67 61 74 65 2c 0a 2a 2a 20  e aggregate,.** 
8b40: 69 66 20 69 74 20 6b 6e 6f 77 73 20 74 68 61 74  if it knows that
8b50: 20 74 68 69 73 20 69 73 20 65 6e 66 6f 72 63 65   this is enforce
8b60: 64 20 65 6c 73 65 77 68 65 72 65 2e 0a 2a 2a 0a  d elsewhere..**.
8b70: 2a 2a 20 57 68 65 6e 20 61 20 66 75 6e 63 74 69  ** When a functi
8b80: 6f 6e 20 70 61 72 61 6d 65 74 65 72 20 69 73 20  on parameter is 
8b90: 6e 6f 74 20 75 73 65 64 20 61 74 20 61 6c 6c 20  not used at all 
8ba0: 77 69 74 68 69 6e 20 74 68 65 20 62 6f 64 79 20  within the body 
8bb0: 6f 66 20 61 20 66 75 6e 63 74 69 6f 6e 2c 0a 2a  of a function,.*
8bc0: 2a 20 69 74 20 69 73 20 67 65 6e 65 72 61 6c 6c  * it is generall
8bd0: 79 20 6e 61 6d 65 64 20 22 4e 6f 74 55 73 65 64  y named "NotUsed
8be0: 22 20 6f 72 20 22 4e 6f 74 55 73 65 64 32 22 20  " or "NotUsed2" 
8bf0: 74 6f 20 6d 61 6b 65 20 74 68 69 6e 67 73 20 65  to make things e
8c00: 76 65 6e 20 63 6c 65 61 72 65 72 2e 0a 2a 2a 20  ven clearer..** 
8c10: 48 6f 77 65 76 65 72 2c 20 74 68 65 73 65 20 6d  However, these m
8c20: 61 63 72 6f 73 20 6d 61 79 20 61 6c 73 6f 20 62  acros may also b
8c30: 65 20 75 73 65 64 20 74 6f 20 73 75 70 70 72 65  e used to suppre
8c40: 73 73 20 77 61 72 6e 69 6e 67 73 20 72 65 6c 61  ss warnings rela
8c50: 74 65 64 20 74 6f 0a 2a 2a 20 70 61 72 61 6d 65  ted to.** parame
8c60: 74 65 72 73 20 74 68 61 74 20 6d 61 79 20 6f 72  ters that may or
8c70: 20 6d 61 79 20 6e 6f 74 20 62 65 20 75 73 65 64   may not be used
8c80: 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20 63 6f   depending on co
8c90: 6d 70 69 6c 61 74 69 6f 6e 20 6f 70 74 69 6f 6e  mpilation option
8ca0: 73 2e 0a 2a 2a 20 46 6f 72 20 65 78 61 6d 70 6c  s..** For exampl
8cb0: 65 20 74 68 6f 73 65 20 70 61 72 61 6d 65 74 65  e those paramete
8cc0: 72 73 20 6f 6e 6c 79 20 75 73 65 64 20 69 6e 20  rs only used in 
8cd0: 61 73 73 65 72 74 28 29 20 73 74 61 74 65 6d 65  assert() stateme
8ce0: 6e 74 73 2e 20 49 6e 20 74 68 65 73 65 0a 2a 2a  nts. In these.**
8cf0: 20 63 61 73 65 73 20 74 68 65 20 70 61 72 61 6d   cases the param
8d00: 65 74 65 72 73 20 61 72 65 20 6e 61 6d 65 64 20  eters are named 
8d10: 61 73 20 70 65 72 20 74 68 65 20 75 73 75 61 6c  as per the usual
8d20: 20 63 6f 6e 76 65 6e 74 69 6f 6e 73 2e 0a 2a 2f   conventions..*/
8d30: 0a 23 64 65 66 69 6e 65 20 55 4e 55 53 45 44 5f  .#define UNUSED_
8d40: 50 41 52 41 4d 45 54 45 52 28 78 29 20 28 76 6f  PARAMETER(x) (vo
8d50: 69 64 29 28 78 29 0a 23 64 65 66 69 6e 65 20 55  id)(x).#define U
8d60: 4e 55 53 45 44 5f 50 41 52 41 4d 45 54 45 52 32  NUSED_PARAMETER2
8d70: 28 78 2c 79 29 20 55 4e 55 53 45 44 5f 50 41 52  (x,y) UNUSED_PAR
8d80: 41 4d 45 54 45 52 28 78 29 2c 55 4e 55 53 45 44  AMETER(x),UNUSED
8d90: 5f 50 41 52 41 4d 45 54 45 52 28 79 29 0a 0a 2f  _PARAMETER(y)../
8da0: 2a 0a 2a 2a 20 46 6f 72 77 61 72 64 20 72 65 66  *.** Forward ref
8db0: 65 72 65 6e 63 65 73 20 74 6f 20 73 74 72 75 63  erences to struc
8dc0: 74 75 72 65 73 0a 2a 2f 0a 74 79 70 65 64 65 66  tures.*/.typedef
8dd0: 20 73 74 72 75 63 74 20 41 67 67 49 6e 66 6f 20   struct AggInfo 
8de0: 41 67 67 49 6e 66 6f 3b 0a 74 79 70 65 64 65 66  AggInfo;.typedef
8df0: 20 73 74 72 75 63 74 20 41 75 74 68 43 6f 6e 74   struct AuthCont
8e00: 65 78 74 20 41 75 74 68 43 6f 6e 74 65 78 74 3b  ext AuthContext;
8e10: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
8e20: 41 75 74 6f 69 6e 63 49 6e 66 6f 20 41 75 74 6f  AutoincInfo Auto
8e30: 69 6e 63 49 6e 66 6f 3b 0a 74 79 70 65 64 65 66  incInfo;.typedef
8e40: 20 73 74 72 75 63 74 20 42 69 74 76 65 63 20 42   struct Bitvec B
8e50: 69 74 76 65 63 3b 0a 74 79 70 65 64 65 66 20 73  itvec;.typedef s
8e60: 74 72 75 63 74 20 43 6f 6c 6c 53 65 71 20 43 6f  truct CollSeq Co
8e70: 6c 6c 53 65 71 3b 0a 74 79 70 65 64 65 66 20 73  llSeq;.typedef s
8e80: 74 72 75 63 74 20 43 6f 6c 75 6d 6e 20 43 6f 6c  truct Column Col
8e90: 75 6d 6e 3b 0a 74 79 70 65 64 65 66 20 73 74 72  umn;.typedef str
8ea0: 75 63 74 20 44 62 20 44 62 3b 0a 74 79 70 65 64  uct Db Db;.typed
8eb0: 65 66 20 73 74 72 75 63 74 20 53 63 68 65 6d 61  ef struct Schema
8ec0: 20 53 63 68 65 6d 61 3b 0a 74 79 70 65 64 65 66   Schema;.typedef
8ed0: 20 73 74 72 75 63 74 20 45 78 70 72 20 45 78 70   struct Expr Exp
8ee0: 72 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  r;.typedef struc
8ef0: 74 20 45 78 70 72 4c 69 73 74 20 45 78 70 72 4c  t ExprList ExprL
8f00: 69 73 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72  ist;.typedef str
8f10: 75 63 74 20 46 4b 65 79 20 46 4b 65 79 3b 0a 74  uct FKey FKey;.t
8f20: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 46 75  ypedef struct Fu
8f30: 6e 63 44 65 73 74 72 75 63 74 6f 72 20 46 75 6e  ncDestructor Fun
8f40: 63 44 65 73 74 72 75 63 74 6f 72 3b 0a 74 79 70  cDestructor;.typ
8f50: 65 64 65 66 20 73 74 72 75 63 74 20 46 75 6e 63  edef struct Func
8f60: 44 65 66 20 46 75 6e 63 44 65 66 3b 0a 74 79 70  Def FuncDef;.typ
8f70: 65 64 65 66 20 73 74 72 75 63 74 20 46 75 6e 63  edef struct Func
8f80: 44 65 66 48 61 73 68 20 46 75 6e 63 44 65 66 48  DefHash FuncDefH
8f90: 61 73 68 3b 0a 74 79 70 65 64 65 66 20 73 74 72  ash;.typedef str
8fa0: 75 63 74 20 49 64 4c 69 73 74 20 49 64 4c 69 73  uct IdList IdLis
8fb0: 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  t;.typedef struc
8fc0: 74 20 49 6e 64 65 78 20 49 6e 64 65 78 3b 0a 74  t Index Index;.t
8fd0: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 49 6e  ypedef struct In
8fe0: 64 65 78 53 61 6d 70 6c 65 20 49 6e 64 65 78 53  dexSample IndexS
8ff0: 61 6d 70 6c 65 3b 0a 74 79 70 65 64 65 66 20 73  ample;.typedef s
9000: 74 72 75 63 74 20 4b 65 79 43 6c 61 73 73 20 4b  truct KeyClass K
9010: 65 79 43 6c 61 73 73 3b 0a 74 79 70 65 64 65 66  eyClass;.typedef
9020: 20 73 74 72 75 63 74 20 4b 65 79 49 6e 66 6f 20   struct KeyInfo 
9030: 4b 65 79 49 6e 66 6f 3b 0a 74 79 70 65 64 65 66  KeyInfo;.typedef
9040: 20 73 74 72 75 63 74 20 4c 6f 6f 6b 61 73 69 64   struct Lookasid
9050: 65 20 4c 6f 6f 6b 61 73 69 64 65 3b 0a 74 79 70  e Lookaside;.typ
9060: 65 64 65 66 20 73 74 72 75 63 74 20 4c 6f 6f 6b  edef struct Look
9070: 61 73 69 64 65 53 6c 6f 74 20 4c 6f 6f 6b 61 73  asideSlot Lookas
9080: 69 64 65 53 6c 6f 74 3b 0a 74 79 70 65 64 65 66  ideSlot;.typedef
9090: 20 73 74 72 75 63 74 20 4d 6f 64 75 6c 65 20 4d   struct Module M
90a0: 6f 64 75 6c 65 3b 0a 74 79 70 65 64 65 66 20 73  odule;.typedef s
90b0: 74 72 75 63 74 20 4e 61 6d 65 43 6f 6e 74 65 78  truct NameContex
90c0: 74 20 4e 61 6d 65 43 6f 6e 74 65 78 74 3b 0a 74  t NameContext;.t
90d0: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 50 61  ypedef struct Pa
90e0: 72 73 65 20 50 61 72 73 65 3b 0a 74 79 70 65 64  rse Parse;.typed
90f0: 65 66 20 73 74 72 75 63 74 20 50 72 65 55 70 64  ef struct PreUpd
9100: 61 74 65 20 50 72 65 55 70 64 61 74 65 3b 0a 74  ate PreUpdate;.t
9110: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 50 72  ypedef struct Pr
9120: 69 6e 74 66 41 72 67 75 6d 65 6e 74 73 20 50 72  intfArguments Pr
9130: 69 6e 74 66 41 72 67 75 6d 65 6e 74 73 3b 0a 74  intfArguments;.t
9140: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 52 6f  ypedef struct Ro
9150: 77 53 65 74 20 52 6f 77 53 65 74 3b 0a 74 79 70  wSet RowSet;.typ
9160: 65 64 65 66 20 73 74 72 75 63 74 20 53 61 76 65  edef struct Save
9170: 70 6f 69 6e 74 20 53 61 76 65 70 6f 69 6e 74 3b  point Savepoint;
9180: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
9190: 53 65 6c 65 63 74 20 53 65 6c 65 63 74 3b 0a 74  Select Select;.t
91a0: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 53 51  ypedef struct SQ
91b0: 4c 69 74 65 54 68 72 65 61 64 20 53 51 4c 69 74  LiteThread SQLit
91c0: 65 54 68 72 65 61 64 3b 0a 74 79 70 65 64 65 66  eThread;.typedef
91d0: 20 73 74 72 75 63 74 20 53 65 6c 65 63 74 44 65   struct SelectDe
91e0: 73 74 20 53 65 6c 65 63 74 44 65 73 74 3b 0a 74  st SelectDest;.t
91f0: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 53 72  ypedef struct Sr
9200: 63 4c 69 73 74 20 53 72 63 4c 69 73 74 3b 0a 74  cList SrcList;.t
9210: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 73 71  ypedef struct sq
9220: 6c 69 74 65 33 5f 73 74 72 20 53 74 72 41 63 63  lite3_str StrAcc
9230: 75 6d 3b 20 2f 2a 20 49 6e 74 65 72 6e 61 6c 20  um; /* Internal 
9240: 61 6c 69 61 73 20 66 6f 72 20 73 71 6c 69 74 65  alias for sqlite
9250: 33 5f 73 74 72 20 2a 2f 0a 74 79 70 65 64 65 66  3_str */.typedef
9260: 20 73 74 72 75 63 74 20 54 61 62 6c 65 20 54 61   struct Table Ta
9270: 62 6c 65 3b 0a 74 79 70 65 64 65 66 20 73 74 72  ble;.typedef str
9280: 75 63 74 20 54 61 62 6c 65 4c 6f 63 6b 20 54 61  uct TableLock Ta
9290: 62 6c 65 4c 6f 63 6b 3b 0a 74 79 70 65 64 65 66  bleLock;.typedef
92a0: 20 73 74 72 75 63 74 20 54 6f 6b 65 6e 20 54 6f   struct Token To
92b0: 6b 65 6e 3b 0a 74 79 70 65 64 65 66 20 73 74 72  ken;.typedef str
92c0: 75 63 74 20 54 72 65 65 56 69 65 77 20 54 72 65  uct TreeView Tre
92d0: 65 56 69 65 77 3b 0a 74 79 70 65 64 65 66 20 73  eView;.typedef s
92e0: 74 72 75 63 74 20 54 72 69 67 67 65 72 20 54 72  truct Trigger Tr
92f0: 69 67 67 65 72 3b 0a 74 79 70 65 64 65 66 20 73  igger;.typedef s
9300: 74 72 75 63 74 20 54 72 69 67 67 65 72 50 72 67  truct TriggerPrg
9310: 20 54 72 69 67 67 65 72 50 72 67 3b 0a 74 79 70   TriggerPrg;.typ
9320: 65 64 65 66 20 73 74 72 75 63 74 20 54 72 69 67  edef struct Trig
9330: 67 65 72 53 74 65 70 20 54 72 69 67 67 65 72 53  gerStep TriggerS
9340: 74 65 70 3b 0a 74 79 70 65 64 65 66 20 73 74 72  tep;.typedef str
9350: 75 63 74 20 55 6e 70 61 63 6b 65 64 52 65 63 6f  uct UnpackedReco
9360: 72 64 20 55 6e 70 61 63 6b 65 64 52 65 63 6f 72  rd UnpackedRecor
9370: 64 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  d;.typedef struc
9380: 74 20 55 70 73 65 72 74 20 55 70 73 65 72 74 3b  t Upsert Upsert;
9390: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
93a0: 56 54 61 62 6c 65 20 56 54 61 62 6c 65 3b 0a 74  VTable VTable;.t
93b0: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 56 74  ypedef struct Vt
93c0: 61 62 43 74 78 20 56 74 61 62 43 74 78 3b 0a 74  abCtx VtabCtx;.t
93d0: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 57 61  ypedef struct Wa
93e0: 6c 6b 65 72 20 57 61 6c 6b 65 72 3b 0a 74 79 70  lker Walker;.typ
93f0: 65 64 65 66 20 73 74 72 75 63 74 20 57 68 65 72  edef struct Wher
9400: 65 49 6e 66 6f 20 57 68 65 72 65 49 6e 66 6f 3b  eInfo WhereInfo;
9410: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
9420: 57 69 74 68 20 57 69 74 68 3b 0a 0a 0a 2f 2a 0a  With With;.../*.
9430: 2a 2a 20 54 68 65 20 62 69 74 6d 61 73 6b 20 64  ** The bitmask d
9440: 61 74 61 74 79 70 65 20 64 65 66 69 6e 65 64 20  atatype defined 
9450: 62 65 6c 6f 77 20 69 73 20 75 73 65 64 20 66 6f  below is used fo
9460: 72 20 76 61 72 69 6f 75 73 20 6f 70 74 69 6d 69  r various optimi
9470: 7a 61 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 43  zations..**.** C
9480: 68 61 6e 67 69 6e 67 20 74 68 69 73 20 66 72 6f  hanging this fro
9490: 6d 20 61 20 36 34 2d 62 69 74 20 74 6f 20 61 20  m a 64-bit to a 
94a0: 33 32 2d 62 69 74 20 74 79 70 65 20 6c 69 6d 69  32-bit type limi
94b0: 74 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  ts the number of
94c0: 0a 2a 2a 20 74 61 62 6c 65 73 20 69 6e 20 61 20  .** tables in a 
94d0: 6a 6f 69 6e 20 74 6f 20 33 32 20 69 6e 73 74 65  join to 32 inste
94e0: 61 64 20 6f 66 20 36 34 2e 20 20 42 75 74 20 69  ad of 64.  But i
94f0: 74 20 61 6c 73 6f 20 72 65 64 75 63 65 73 20 74  t also reduces t
9500: 68 65 20 73 69 7a 65 0a 2a 2a 20 6f 66 20 74 68  he size.** of th
9510: 65 20 6c 69 62 72 61 72 79 20 62 79 20 37 33 38  e library by 738
9520: 20 62 79 74 65 73 20 6f 6e 20 69 78 38 36 2e 0a   bytes on ix86..
9530: 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
9540: 5f 42 49 54 4d 41 53 4b 5f 54 59 50 45 0a 20 20  _BITMASK_TYPE.  
9550: 74 79 70 65 64 65 66 20 53 51 4c 49 54 45 5f 42  typedef SQLITE_B
9560: 49 54 4d 41 53 4b 5f 54 59 50 45 20 42 69 74 6d  ITMASK_TYPE Bitm
9570: 61 73 6b 3b 0a 23 65 6c 73 65 0a 20 20 74 79 70  ask;.#else.  typ
9580: 65 64 65 66 20 75 36 34 20 42 69 74 6d 61 73 6b  edef u64 Bitmask
9590: 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  ;.#endif../*.** 
95a0: 54 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 62 69  The number of bi
95b0: 74 73 20 69 6e 20 61 20 42 69 74 6d 61 73 6b 2e  ts in a Bitmask.
95c0: 20 20 22 42 4d 53 22 20 6d 65 61 6e 73 20 22 42    "BMS" means "B
95d0: 69 74 4d 61 73 6b 20 53 69 7a 65 22 2e 0a 2a 2f  itMask Size"..*/
95e0: 0a 23 64 65 66 69 6e 65 20 42 4d 53 20 20 28 28  .#define BMS  ((
95f0: 69 6e 74 29 28 73 69 7a 65 6f 66 28 42 69 74 6d  int)(sizeof(Bitm
9600: 61 73 6b 29 2a 38 29 29 0a 0a 2f 2a 0a 2a 2a 20  ask)*8))../*.** 
9610: 41 20 62 69 74 20 69 6e 20 61 20 42 69 74 6d 61  A bit in a Bitma
9620: 73 6b 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 41  sk.*/.#define MA
9630: 53 4b 42 49 54 28 6e 29 20 20 20 28 28 28 42 69  SKBIT(n)   (((Bi
9640: 74 6d 61 73 6b 29 31 29 3c 3c 28 6e 29 29 0a 23  tmask)1)<<(n)).#
9650: 64 65 66 69 6e 65 20 4d 41 53 4b 42 49 54 33 32  define MASKBIT32
9660: 28 6e 29 20 28 28 28 75 6e 73 69 67 6e 65 64 20  (n) (((unsigned 
9670: 69 6e 74 29 31 29 3c 3c 28 6e 29 29 0a 23 64 65  int)1)<<(n)).#de
9680: 66 69 6e 65 20 41 4c 4c 42 49 54 53 20 20 20 20  fine ALLBITS    
9690: 20 20 28 28 42 69 74 6d 61 73 6b 29 2d 31 29 0a    ((Bitmask)-1).
96a0: 0a 2f 2a 20 41 20 56 4c 69 73 74 20 6f 62 6a 65  ./* A VList obje
96b0: 63 74 20 72 65 63 6f 72 64 73 20 61 20 6d 61 70  ct records a map
96c0: 70 69 6e 67 20 62 65 74 77 65 65 6e 20 70 61 72  ping between par
96d0: 61 6d 65 74 65 72 73 2f 76 61 72 69 61 62 6c 65  ameters/variable
96e0: 73 2f 77 69 6c 64 63 61 72 64 73 0a 2a 2a 20 69  s/wildcards.** i
96f0: 6e 20 74 68 65 20 53 51 4c 20 73 74 61 74 65 6d  n the SQL statem
9700: 65 6e 74 20 28 73 75 63 68 20 61 73 20 24 61 62  ent (such as $ab
9710: 63 2c 20 40 70 71 72 2c 20 6f 72 20 3a 78 79 7a  c, @pqr, or :xyz
9720: 29 20 61 6e 64 20 74 68 65 20 69 6e 74 65 67 65  ) and the intege
9730: 72 0a 2a 2a 20 76 61 72 69 61 62 6c 65 20 6e 75  r.** variable nu
9740: 6d 62 65 72 20 61 73 73 6f 63 69 61 74 65 64 20  mber associated 
9750: 77 69 74 68 20 74 68 61 74 20 70 61 72 61 6d 65  with that parame
9760: 74 65 72 2e 20 20 53 65 65 20 74 68 65 20 66 6f  ter.  See the fo
9770: 72 6d 61 74 20 64 65 73 63 72 69 70 74 69 6f 6e  rmat description
9780: 0a 2a 2a 20 6f 6e 20 74 68 65 20 73 71 6c 69 74  .** on the sqlit
9790: 65 33 56 4c 69 73 74 41 64 64 28 29 20 72 6f 75  e3VListAdd() rou
97a0: 74 69 6e 65 20 66 6f 72 20 6d 6f 72 65 20 69 6e  tine for more in
97b0: 66 6f 72 6d 61 74 69 6f 6e 2e 20 20 41 20 56 4c  formation.  A VL
97c0: 69 73 74 20 69 73 20 72 65 61 6c 6c 79 0a 2a 2a  ist is really.**
97d0: 20 6a 75 73 74 20 61 6e 20 61 72 72 61 79 20 6f   just an array o
97e0: 66 20 69 6e 74 65 67 65 72 73 2e 0a 2a 2f 0a 74  f integers..*/.t
97f0: 79 70 65 64 65 66 20 69 6e 74 20 56 4c 69 73 74  ypedef int VList
9800: 3b 0a 0a 2f 2a 0a 2a 2a 20 44 65 66 65 72 20 73  ;../*.** Defer s
9810: 6f 75 72 63 69 6e 67 20 76 64 62 65 2e 68 20 61  ourcing vdbe.h a
9820: 6e 64 20 62 74 72 65 65 2e 68 20 75 6e 74 69 6c  nd btree.h until
9830: 20 61 66 74 65 72 20 74 68 65 20 22 75 38 22 20   after the "u8" 
9840: 61 6e 64 0a 2a 2a 20 22 42 75 73 79 48 61 6e 64  and.** "BusyHand
9850: 6c 65 72 22 20 74 79 70 65 64 65 66 73 2e 20 76  ler" typedefs. v
9860: 64 62 65 2e 68 20 61 6c 73 6f 20 72 65 71 75 69  dbe.h also requi
9870: 72 65 73 20 61 20 66 65 77 20 6f 66 20 74 68 65  res a few of the
9880: 20 6f 70 61 71 75 65 0a 2a 2a 20 70 6f 69 6e 74   opaque.** point
9890: 65 72 20 74 79 70 65 73 20 28 69 2e 65 2e 20 46  er types (i.e. F
98a0: 75 6e 63 44 65 66 29 20 64 65 66 69 6e 65 64 20  uncDef) defined 
98b0: 61 62 6f 76 65 2e 0a 2a 2f 0a 23 69 6e 63 6c 75  above..*/.#inclu
98c0: 64 65 20 22 62 74 72 65 65 2e 68 22 0a 23 69 6e  de "btree.h".#in
98d0: 63 6c 75 64 65 20 22 76 64 62 65 2e 68 22 0a 23  clude "vdbe.h".#
98e0: 69 6e 63 6c 75 64 65 20 22 70 61 67 65 72 2e 68  include "pager.h
98f0: 22 0a 23 69 6e 63 6c 75 64 65 20 22 70 63 61 63  ".#include "pcac
9900: 68 65 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20 22  he.h".#include "
9910: 6f 73 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20 22  os.h".#include "
9920: 6d 75 74 65 78 2e 68 22 0a 0a 2f 2a 20 54 68 65  mutex.h"../* The
9930: 20 53 51 4c 49 54 45 5f 45 58 54 52 41 5f 44 55   SQLITE_EXTRA_DU
9940: 52 41 42 4c 45 20 63 6f 6d 70 69 6c 65 2d 74 69  RABLE compile-ti
9950: 6d 65 20 6f 70 74 69 6f 6e 20 75 73 65 64 20 74  me option used t
9960: 6f 20 73 65 74 20 74 68 65 20 64 65 66 61 75 6c  o set the defaul
9970: 74 0a 2a 2a 20 73 79 6e 63 68 72 6f 6e 6f 75 73  t.** synchronous
9980: 20 73 65 74 74 69 6e 67 20 74 6f 20 45 58 54 52   setting to EXTR
9990: 41 2e 20 20 49 74 20 69 73 20 6e 6f 20 6c 6f 6e  A.  It is no lon
99a0: 67 65 72 20 73 75 70 70 6f 72 74 65 64 2e 0a 2a  ger supported..*
99b0: 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
99c0: 45 58 54 52 41 5f 44 55 52 41 42 4c 45 0a 23 20  EXTRA_DURABLE.# 
99d0: 77 61 72 6e 69 6e 67 20 55 73 65 20 53 51 4c 49  warning Use SQLI
99e0: 54 45 5f 44 45 46 41 55 4c 54 5f 53 59 4e 43 48  TE_DEFAULT_SYNCH
99f0: 52 4f 4e 4f 55 53 3d 33 20 69 6e 73 74 65 61 64  RONOUS=3 instead
9a00: 20 6f 66 20 53 51 4c 49 54 45 5f 45 58 54 52 41   of SQLITE_EXTRA
9a10: 5f 44 55 52 41 42 4c 45 0a 23 20 64 65 66 69 6e  _DURABLE.# defin
9a20: 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54  e SQLITE_DEFAULT
9a30: 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 20 33 0a 23  _SYNCHRONOUS 3.#
9a40: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 44 65 66  endif../*.** Def
9a50: 61 75 6c 74 20 73 79 6e 63 68 72 6f 6e 6f 75 73  ault synchronous
9a60: 20 6c 65 76 65 6c 73 2e 0a 2a 2a 0a 2a 2a 20 4e   levels..**.** N
9a70: 6f 74 65 20 74 68 61 74 20 28 66 6f 72 20 68 69  ote that (for hi
9a80: 73 74 6f 72 63 61 6c 20 72 65 61 73 6f 6e 73 29  storcal reasons)
9a90: 20 74 68 65 20 50 41 47 45 52 5f 53 59 4e 43 48   the PAGER_SYNCH
9aa0: 52 4f 4e 4f 55 53 5f 2a 20 6d 61 63 72 6f 73 20  RONOUS_* macros 
9ab0: 64 69 66 66 65 72 0a 2a 2a 20 66 72 6f 6d 20 74  differ.** from t
9ac0: 68 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c  he SQLITE_DEFAUL
9ad0: 54 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 20 76 61  T_SYNCHRONOUS va
9ae0: 6c 75 65 20 62 79 20 31 2e 0a 2a 2a 0a 2a 2a 20  lue by 1..**.** 
9af0: 20 20 20 20 20 20 20 20 20 20 50 41 47 45 52 5f            PAGER_
9b00: 53 59 4e 43 48 52 4f 4e 4f 55 53 20 20 20 20 20  SYNCHRONOUS     
9b10: 20 20 44 45 46 41 55 4c 54 5f 53 59 4e 43 48 52    DEFAULT_SYNCHR
9b20: 4f 4e 4f 55 53 0a 2a 2a 20 20 20 4f 46 46 20 20  ONOUS.**   OFF  
9b30: 20 20 20 20 20 20 20 20 20 31 20 20 20 20 20 20           1      
9b40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9b50: 20 20 20 30 0a 2a 2a 20 20 20 4e 4f 52 4d 41 4c     0.**   NORMAL
9b60: 20 20 20 20 20 20 20 20 32 20 20 20 20 20 20 20          2       
9b70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9b80: 20 20 31 0a 2a 2a 20 20 20 46 55 4c 4c 20 20 20    1.**   FULL   
9b90: 20 20 20 20 20 20 20 33 20 20 20 20 20 20 20 20         3        
9ba0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9bb0: 20 32 0a 2a 2a 20 20 20 45 58 54 52 41 20 20 20   2.**   EXTRA   
9bc0: 20 20 20 20 20 20 34 20 20 20 20 20 20 20 20 20        4         
9bd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9be0: 33 0a 2a 2a 0a 2a 2a 20 54 68 65 20 22 50 52 41  3.**.** The "PRA
9bf0: 47 4d 41 20 73 79 6e 63 68 72 6f 6e 6f 75 73 22  GMA synchronous"
9c00: 20 73 74 61 74 65 6d 65 6e 74 20 61 6c 73 6f 20   statement also 
9c10: 75 73 65 73 20 74 68 65 20 7a 65 72 6f 2d 62 61  uses the zero-ba
9c20: 73 65 64 20 6e 75 6d 62 65 72 73 2e 0a 2a 2a 20  sed numbers..** 
9c30: 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20  In other words, 
9c40: 74 68 65 20 7a 65 72 6f 2d 62 61 73 65 64 20 6e  the zero-based n
9c50: 75 6d 62 65 72 73 20 61 72 65 20 75 73 65 64 20  umbers are used 
9c60: 66 6f 72 20 61 6c 6c 20 65 78 74 65 72 6e 61 6c  for all external
9c70: 20 69 6e 74 65 72 66 61 63 65 73 0a 2a 2a 20 61   interfaces.** a
9c80: 6e 64 20 74 68 65 20 6f 6e 65 2d 62 61 73 65 64  nd the one-based
9c90: 20 76 61 6c 75 65 73 20 61 72 65 20 75 73 65 64   values are used
9ca0: 20 69 6e 74 65 72 6e 61 6c 6c 79 2e 0a 2a 2f 0a   internally..*/.
9cb0: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 44  #ifndef SQLITE_D
9cc0: 45 46 41 55 4c 54 5f 53 59 4e 43 48 52 4f 4e 4f  EFAULT_SYNCHRONO
9cd0: 55 53 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  US.# define SQLI
9ce0: 54 45 5f 44 45 46 41 55 4c 54 5f 53 59 4e 43 48  TE_DEFAULT_SYNCH
9cf0: 52 4f 4e 4f 55 53 20 32 0a 23 65 6e 64 69 66 0a  RONOUS 2.#endif.
9d00: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 44  #ifndef SQLITE_D
9d10: 45 46 41 55 4c 54 5f 57 41 4c 5f 53 59 4e 43 48  EFAULT_WAL_SYNCH
9d20: 52 4f 4e 4f 55 53 0a 23 20 64 65 66 69 6e 65 20  RONOUS.# define 
9d30: 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 57  SQLITE_DEFAULT_W
9d40: 41 4c 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 20 53  AL_SYNCHRONOUS S
9d50: 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 53 59  QLITE_DEFAULT_SY
9d60: 4e 43 48 52 4f 4e 4f 55 53 0a 23 65 6e 64 69 66  NCHRONOUS.#endif
9d70: 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 64 61 74  ../*.** Each dat
9d80: 61 62 61 73 65 20 66 69 6c 65 20 74 6f 20 62 65  abase file to be
9d90: 20 61 63 63 65 73 73 65 64 20 62 79 20 74 68 65   accessed by the
9da0: 20 73 79 73 74 65 6d 20 69 73 20 61 6e 20 69 6e   system is an in
9db0: 73 74 61 6e 63 65 0a 2a 2a 20 6f 66 20 74 68 65  stance.** of the
9dc0: 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63   following struc
9dd0: 74 75 72 65 2e 20 20 54 68 65 72 65 20 61 72 65  ture.  There are
9de0: 20 6e 6f 72 6d 61 6c 6c 79 20 74 77 6f 20 6f 66   normally two of
9df0: 20 74 68 65 73 65 20 73 74 72 75 63 74 75 72 65   these structure
9e00: 73 0a 2a 2a 20 69 6e 20 74 68 65 20 73 71 6c 69  s.** in the sqli
9e10: 74 65 2e 61 44 62 5b 5d 20 61 72 72 61 79 2e 20  te.aDb[] array. 
9e20: 20 61 44 62 5b 30 5d 20 69 73 20 74 68 65 20 6d   aDb[0] is the m
9e30: 61 69 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c  ain database fil
9e40: 65 20 61 6e 64 0a 2a 2a 20 61 44 62 5b 31 5d 20  e and.** aDb[1] 
9e50: 69 73 20 74 68 65 20 64 61 74 61 62 61 73 65 20  is the database 
9e60: 66 69 6c 65 20 75 73 65 64 20 74 6f 20 68 6f 6c  file used to hol
9e70: 64 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c  d temporary tabl
9e80: 65 73 2e 20 20 41 64 64 69 74 69 6f 6e 61 6c 0a  es.  Additional.
9e90: 2a 2a 20 64 61 74 61 62 61 73 65 73 20 6d 61 79  ** databases may
9ea0: 20 62 65 20 61 74 74 61 63 68 65 64 2e 0a 2a 2f   be attached..*/
9eb0: 0a 73 74 72 75 63 74 20 44 62 20 7b 0a 20 20 63  .struct Db {.  c
9ec0: 68 61 72 20 2a 7a 44 62 53 4e 61 6d 65 3b 20 20  har *zDbSName;  
9ed0: 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74      /* Name of t
9ee0: 68 69 73 20 64 61 74 61 62 61 73 65 2e 20 28 73  his database. (s
9ef0: 63 68 65 6d 61 20 6e 61 6d 65 2c 20 6e 6f 74 20  chema name, not 
9f00: 66 69 6c 65 6e 61 6d 65 29 20 2a 2f 0a 20 20 42  filename) */.  B
9f10: 74 72 65 65 20 2a 70 42 74 3b 20 20 20 20 20 20  tree *pBt;      
9f20: 20 20 20 20 2f 2a 20 54 68 65 20 42 2a 54 72 65      /* The B*Tre
9f30: 65 20 73 74 72 75 63 74 75 72 65 20 66 6f 72 20  e structure for 
9f40: 74 68 69 73 20 64 61 74 61 62 61 73 65 20 66 69  this database fi
9f50: 6c 65 20 2a 2f 0a 20 20 75 38 20 73 61 66 65 74  le */.  u8 safet
9f60: 79 5f 6c 65 76 65 6c 3b 20 20 20 20 20 2f 2a 20  y_level;     /* 
9f70: 48 6f 77 20 61 67 67 72 65 73 73 69 76 65 20 61  How aggressive a
9f80: 74 20 73 79 6e 63 69 6e 67 20 64 61 74 61 20 74  t syncing data t
9f90: 6f 20 64 69 73 6b 20 2a 2f 0a 20 20 75 38 20 62  o disk */.  u8 b
9fa0: 53 79 6e 63 53 65 74 3b 20 20 20 20 20 20 20 20  SyncSet;        
9fb0: 20 2f 2a 20 54 72 75 65 20 69 66 20 22 50 52 41   /* True if "PRA
9fc0: 47 4d 41 20 73 79 6e 63 68 72 6f 6e 6f 75 73 3d  GMA synchronous=
9fd0: 4e 22 20 68 61 73 20 62 65 65 6e 20 72 75 6e 20  N" has been run 
9fe0: 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70 53 63  */.  Schema *pSc
9ff0: 68 65 6d 61 3b 20 20 20 20 20 2f 2a 20 50 6f 69  hema;     /* Poi
a000: 6e 74 65 72 20 74 6f 20 64 61 74 61 62 61 73 65  nter to database
a010: 20 73 63 68 65 6d 61 20 28 70 6f 73 73 69 62 6c   schema (possibl
a020: 79 20 73 68 61 72 65 64 29 20 2a 2f 0a 7d 3b 0a  y shared) */.};.
a030: 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e  ./*.** An instan
a040: 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77  ce of the follow
a050: 69 6e 67 20 73 74 72 75 63 74 75 72 65 20 73 74  ing structure st
a060: 6f 72 65 73 20 61 20 64 61 74 61 62 61 73 65 20  ores a database 
a070: 73 63 68 65 6d 61 2e 0a 2a 2a 0a 2a 2a 20 4d 6f  schema..**.** Mo
a080: 73 74 20 53 63 68 65 6d 61 20 6f 62 6a 65 63 74  st Schema object
a090: 73 20 61 72 65 20 61 73 73 6f 63 69 61 74 65 64  s are associated
a0a0: 20 77 69 74 68 20 61 20 42 74 72 65 65 2e 20 20   with a Btree.  
a0b0: 54 68 65 20 65 78 63 65 70 74 69 6f 6e 20 69 73  The exception is
a0c0: 0a 2a 2a 20 74 68 65 20 53 63 68 65 6d 61 20 66  .** the Schema f
a0d0: 6f 72 20 74 68 65 20 54 45 4d 50 20 64 61 74 61  or the TEMP data
a0e0: 62 61 65 73 20 28 73 71 6c 69 74 65 33 2e 61 44  baes (sqlite3.aD
a0f0: 62 5b 31 5d 29 20 77 68 69 63 68 20 69 73 20 66  b[1]) which is f
a100: 72 65 65 2d 73 74 61 6e 64 69 6e 67 2e 0a 2a 2a  ree-standing..**
a110: 20 49 6e 20 73 68 61 72 65 64 20 63 61 63 68 65   In shared cache
a120: 20 6d 6f 64 65 2c 20 61 20 73 69 6e 67 6c 65 20   mode, a single 
a130: 53 63 68 65 6d 61 20 6f 62 6a 65 63 74 20 63 61  Schema object ca
a140: 6e 20 62 65 20 73 68 61 72 65 64 20 62 79 20 6d  n be shared by m
a150: 75 6c 74 69 70 6c 65 0a 2a 2a 20 42 74 72 65 65  ultiple.** Btree
a160: 73 20 74 68 61 74 20 72 65 66 65 72 20 74 6f 20  s that refer to 
a170: 74 68 65 20 73 61 6d 65 20 75 6e 64 65 72 6c 79  the same underly
a180: 69 6e 67 20 42 74 53 68 61 72 65 64 20 6f 62 6a  ing BtShared obj
a190: 65 63 74 2e 0a 2a 2a 0a 2a 2a 20 53 63 68 65 6d  ect..**.** Schem
a1a0: 61 20 6f 62 6a 65 63 74 73 20 61 72 65 20 61 75  a objects are au
a1b0: 74 6f 6d 61 74 69 63 61 6c 6c 79 20 64 65 61 6c  tomatically deal
a1c0: 6c 6f 63 61 74 65 64 20 77 68 65 6e 20 74 68 65  located when the
a1d0: 20 6c 61 73 74 20 42 74 72 65 65 20 74 68 61 74   last Btree that
a1e0: 0a 2a 2a 20 72 65 66 65 72 65 6e 63 65 73 20 74  .** references t
a1f0: 68 65 6d 20 69 73 20 64 65 73 74 72 6f 79 65 64  hem is destroyed
a200: 2e 20 20 20 54 68 65 20 54 45 4d 50 20 53 63 68  .   The TEMP Sch
a210: 65 6d 61 20 69 73 20 6d 61 6e 75 61 6c 6c 79 20  ema is manually 
a220: 66 72 65 65 64 20 62 79 0a 2a 2a 20 73 71 6c 69  freed by.** sqli
a230: 74 65 33 5f 63 6c 6f 73 65 28 29 2e 0a 2a 0a 2a  te3_close()..*.*
a240: 2a 20 41 20 74 68 72 65 61 64 20 6d 75 73 74 20  * A thread must 
a250: 62 65 20 68 6f 6c 64 69 6e 67 20 61 20 6d 75 74  be holding a mut
a260: 65 78 20 6f 6e 20 74 68 65 20 63 6f 72 72 65 73  ex on the corres
a270: 70 6f 6e 64 69 6e 67 20 42 74 72 65 65 20 69 6e  ponding Btree in
a280: 20 6f 72 64 65 72 0a 2a 2a 20 74 6f 20 61 63 63   order.** to acc
a290: 65 73 73 20 53 63 68 65 6d 61 20 63 6f 6e 74 65  ess Schema conte
a2a0: 6e 74 2e 20 20 54 68 69 73 20 69 6d 70 6c 69 65  nt.  This implie
a2b0: 73 20 74 68 61 74 20 74 68 65 20 74 68 72 65 61  s that the threa
a2c0: 64 20 6d 75 73 74 20 61 6c 73 6f 20 62 65 0a 2a  d must also be.*
a2d0: 2a 20 68 6f 6c 64 69 6e 67 20 61 20 6d 75 74 65  * holding a mute
a2e0: 78 20 6f 6e 20 74 68 65 20 73 71 6c 69 74 65 33  x on the sqlite3
a2f0: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 70 6f 69 6e   connection poin
a300: 74 65 72 20 74 68 61 74 20 6f 77 6e 73 20 74 68  ter that owns th
a310: 65 20 42 74 72 65 65 2e 0a 2a 2a 20 46 6f 72 20  e Btree..** For 
a320: 61 20 54 45 4d 50 20 53 63 68 65 6d 61 2c 20 6f  a TEMP Schema, o
a330: 6e 6c 79 20 74 68 65 20 63 6f 6e 6e 65 63 74 69  nly the connecti
a340: 6f 6e 20 6d 75 74 65 78 20 69 73 20 72 65 71 75  on mutex is requ
a350: 69 72 65 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  ired..*/.struct 
a360: 53 63 68 65 6d 61 20 7b 0a 20 20 69 6e 74 20 73  Schema {.  int s
a370: 63 68 65 6d 61 5f 63 6f 6f 6b 69 65 3b 20 20 20  chema_cookie;   
a380: 2f 2a 20 44 61 74 61 62 61 73 65 20 73 63 68 65  /* Database sche
a390: 6d 61 20 76 65 72 73 69 6f 6e 20 6e 75 6d 62 65  ma version numbe
a3a0: 72 20 66 6f 72 20 74 68 69 73 20 66 69 6c 65 20  r for this file 
a3b0: 2a 2f 0a 20 20 69 6e 74 20 69 47 65 6e 65 72 61  */.  int iGenera
a3c0: 74 69 6f 6e 3b 20 20 20 20 20 2f 2a 20 47 65 6e  tion;     /* Gen
a3d0: 65 72 61 74 69 6f 6e 20 63 6f 75 6e 74 65 72 2e  eration counter.
a3e0: 20 20 49 6e 63 72 65 6d 65 6e 74 65 64 20 77 69    Incremented wi
a3f0: 74 68 20 65 61 63 68 20 63 68 61 6e 67 65 20 2a  th each change *
a400: 2f 0a 20 20 48 61 73 68 20 74 62 6c 48 61 73 68  /.  Hash tblHash
a410: 3b 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20  ;        /* All 
a420: 74 61 62 6c 65 73 20 69 6e 64 65 78 65 64 20 62  tables indexed b
a430: 79 20 6e 61 6d 65 20 2a 2f 0a 20 20 48 61 73 68  y name */.  Hash
a440: 20 69 64 78 48 61 73 68 3b 20 20 20 20 20 20 20   idxHash;       
a450: 20 2f 2a 20 41 6c 6c 20 28 6e 61 6d 65 64 29 20   /* All (named) 
a460: 69 6e 64 69 63 65 73 20 69 6e 64 65 78 65 64 20  indices indexed 
a470: 62 79 20 6e 61 6d 65 20 2a 2f 0a 20 20 48 61 73  by name */.  Has
a480: 68 20 74 72 69 67 48 61 73 68 3b 20 20 20 20 20  h trigHash;     
a490: 20 20 2f 2a 20 41 6c 6c 20 74 72 69 67 67 65 72    /* All trigger
a4a0: 73 20 69 6e 64 65 78 65 64 20 62 79 20 6e 61 6d  s indexed by nam
a4b0: 65 20 2a 2f 0a 20 20 48 61 73 68 20 66 6b 65 79  e */.  Hash fkey
a4c0: 48 61 73 68 3b 20 20 20 20 20 20 20 2f 2a 20 41  Hash;       /* A
a4d0: 6c 6c 20 66 6f 72 65 69 67 6e 20 6b 65 79 73 20  ll foreign keys 
a4e0: 62 79 20 72 65 66 65 72 65 6e 63 65 64 20 74 61  by referenced ta
a4f0: 62 6c 65 20 6e 61 6d 65 20 2a 2f 0a 20 20 54 61  ble name */.  Ta
a500: 62 6c 65 20 2a 70 53 65 71 54 61 62 3b 20 20 20  ble *pSeqTab;   
a510: 20 20 20 2f 2a 20 54 68 65 20 73 71 6c 69 74 65     /* The sqlite
a520: 5f 73 65 71 75 65 6e 63 65 20 74 61 62 6c 65 20  _sequence table 
a530: 75 73 65 64 20 62 79 20 41 55 54 4f 49 4e 43 52  used by AUTOINCR
a540: 45 4d 45 4e 54 20 2a 2f 0a 20 20 75 38 20 66 69  EMENT */.  u8 fi
a550: 6c 65 5f 66 6f 72 6d 61 74 3b 20 20 20 20 20 20  le_format;      
a560: 2f 2a 20 53 63 68 65 6d 61 20 66 6f 72 6d 61 74  /* Schema format
a570: 20 76 65 72 73 69 6f 6e 20 66 6f 72 20 74 68 69   version for thi
a580: 73 20 66 69 6c 65 20 2a 2f 0a 20 20 75 38 20 65  s file */.  u8 e
a590: 6e 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  nc;             
a5a0: 20 2f 2a 20 54 65 78 74 20 65 6e 63 6f 64 69 6e   /* Text encodin
a5b0: 67 20 75 73 65 64 20 62 79 20 74 68 69 73 20 64  g used by this d
a5c0: 61 74 61 62 61 73 65 20 2a 2f 0a 20 20 75 31 36  atabase */.  u16
a5d0: 20 73 63 68 65 6d 61 46 6c 61 67 73 3b 20 20 20   schemaFlags;   
a5e0: 20 20 2f 2a 20 46 6c 61 67 73 20 61 73 73 6f 63    /* Flags assoc
a5f0: 69 61 74 65 64 20 77 69 74 68 20 74 68 69 73 20  iated with this 
a600: 73 63 68 65 6d 61 20 2a 2f 0a 20 20 69 6e 74 20  schema */.  int 
a610: 63 61 63 68 65 5f 73 69 7a 65 3b 20 20 20 20 20  cache_size;     
a620: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 70 61   /* Number of pa
a630: 67 65 73 20 74 6f 20 75 73 65 20 69 6e 20 74 68  ges to use in th
a640: 65 20 63 61 63 68 65 20 2a 2f 0a 7d 3b 0a 0a 2f  e cache */.};../
a650: 2a 0a 2a 2a 20 54 68 65 73 65 20 6d 61 63 72 6f  *.** These macro
a660: 73 20 63 61 6e 20 62 65 20 75 73 65 64 20 74 6f  s can be used to
a670: 20 74 65 73 74 2c 20 73 65 74 2c 20 6f 72 20 63   test, set, or c
a680: 6c 65 61 72 20 62 69 74 73 20 69 6e 20 74 68 65  lear bits in the
a690: 0a 2a 2a 20 44 62 2e 70 53 63 68 65 6d 61 2d 3e  .** Db.pSchema->
a6a0: 66 6c 61 67 73 20 66 69 65 6c 64 2e 0a 2a 2f 0a  flags field..*/.
a6b0: 23 64 65 66 69 6e 65 20 44 62 48 61 73 50 72 6f  #define DbHasPro
a6c0: 70 65 72 74 79 28 44 2c 49 2c 50 29 20 20 20 20  perty(D,I,P)    
a6d0: 20 28 28 28 44 29 2d 3e 61 44 62 5b 49 5d 2e 70   (((D)->aDb[I].p
a6e0: 53 63 68 65 6d 61 2d 3e 73 63 68 65 6d 61 46 6c  Schema->schemaFl
a6f0: 61 67 73 26 28 50 29 29 3d 3d 28 50 29 29 0a 23  ags&(P))==(P)).#
a700: 64 65 66 69 6e 65 20 44 62 48 61 73 41 6e 79 50  define DbHasAnyP
a710: 72 6f 70 65 72 74 79 28 44 2c 49 2c 50 29 20 20  roperty(D,I,P)  
a720: 28 28 28 44 29 2d 3e 61 44 62 5b 49 5d 2e 70 53  (((D)->aDb[I].pS
a730: 63 68 65 6d 61 2d 3e 73 63 68 65 6d 61 46 6c 61  chema->schemaFla
a740: 67 73 26 28 50 29 29 21 3d 30 29 0a 23 64 65 66  gs&(P))!=0).#def
a750: 69 6e 65 20 44 62 53 65 74 50 72 6f 70 65 72 74  ine DbSetPropert
a760: 79 28 44 2c 49 2c 50 29 20 20 20 20 20 28 44 29  y(D,I,P)     (D)
a770: 2d 3e 61 44 62 5b 49 5d 2e 70 53 63 68 65 6d 61  ->aDb[I].pSchema
a780: 2d 3e 73 63 68 65 6d 61 46 6c 61 67 73 7c 3d 28  ->schemaFlags|=(
a790: 50 29 0a 23 64 65 66 69 6e 65 20 44 62 43 6c 65  P).#define DbCle
a7a0: 61 72 50 72 6f 70 65 72 74 79 28 44 2c 49 2c 50  arProperty(D,I,P
a7b0: 29 20 20 20 28 44 29 2d 3e 61 44 62 5b 49 5d 2e  )   (D)->aDb[I].
a7c0: 70 53 63 68 65 6d 61 2d 3e 73 63 68 65 6d 61 46  pSchema->schemaF
a7d0: 6c 61 67 73 26 3d 7e 28 50 29 0a 0a 2f 2a 0a 2a  lags&=~(P)../*.*
a7e0: 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73  * Allowed values
a7f0: 20 66 6f 72 20 74 68 65 20 44 42 2e 70 53 63 68   for the DB.pSch
a800: 65 6d 61 2d 3e 66 6c 61 67 73 20 66 69 65 6c 64  ema->flags field
a810: 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 44 42 5f 53  ..**.** The DB_S
a820: 63 68 65 6d 61 4c 6f 61 64 65 64 20 66 6c 61 67  chemaLoaded flag
a830: 20 69 73 20 73 65 74 20 61 66 74 65 72 20 74 68   is set after th
a840: 65 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d  e database schem
a850: 61 20 68 61 73 20 62 65 65 6e 0a 2a 2a 20 72 65  a has been.** re
a860: 61 64 20 69 6e 74 6f 20 69 6e 74 65 72 6e 61 6c  ad into internal
a870: 20 68 61 73 68 20 74 61 62 6c 65 73 2e 0a 2a 2a   hash tables..**
a880: 0a 2a 2a 20 44 42 5f 55 6e 72 65 73 65 74 56 69  .** DB_UnresetVi
a890: 65 77 73 20 6d 65 61 6e 73 20 74 68 61 74 20 6f  ews means that o
a8a0: 6e 65 20 6f 72 20 6d 6f 72 65 20 76 69 65 77 73  ne or more views
a8b0: 20 68 61 76 65 20 63 6f 6c 75 6d 6e 20 6e 61 6d   have column nam
a8c0: 65 73 20 74 68 61 74 0a 2a 2a 20 68 61 76 65 20  es that.** have 
a8d0: 62 65 65 6e 20 66 69 6c 6c 65 64 20 6f 75 74 2e  been filled out.
a8e0: 20 20 49 66 20 74 68 65 20 73 63 68 65 6d 61 20    If the schema 
a8f0: 63 68 61 6e 67 65 73 2c 20 74 68 65 73 65 20 63  changes, these c
a900: 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 6d 69 67 68  olumn names migh
a910: 74 0a 2a 2a 20 63 68 61 6e 67 65 73 20 61 6e 64  t.** changes and
a920: 20 73 6f 20 74 68 65 20 76 69 65 77 20 77 69 6c   so the view wil
a930: 6c 20 6e 65 65 64 20 74 6f 20 62 65 20 72 65 73  l need to be res
a940: 65 74 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 44  et..*/.#define D
a950: 42 5f 53 63 68 65 6d 61 4c 6f 61 64 65 64 20 20  B_SchemaLoaded  
a960: 20 20 30 78 30 30 30 31 20 20 2f 2a 20 54 68 65    0x0001  /* The
a970: 20 73 63 68 65 6d 61 20 68 61 73 20 62 65 65 6e   schema has been
a980: 20 6c 6f 61 64 65 64 20 2a 2f 0a 23 64 65 66 69   loaded */.#defi
a990: 6e 65 20 44 42 5f 55 6e 72 65 73 65 74 56 69 65  ne DB_UnresetVie
a9a0: 77 73 20 20 20 20 30 78 30 30 30 32 20 20 2f 2a  ws    0x0002  /*
a9b0: 20 53 6f 6d 65 20 76 69 65 77 73 20 68 61 76 65   Some views have
a9c0: 20 64 65 66 69 6e 65 64 20 63 6f 6c 75 6d 6e 20   defined column 
a9d0: 6e 61 6d 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65  names */.#define
a9e0: 20 44 42 5f 45 6d 70 74 79 20 20 20 20 20 20 20   DB_Empty       
a9f0: 20 20 20 20 30 78 30 30 30 34 20 20 2f 2a 20 54      0x0004  /* T
aa00: 68 65 20 66 69 6c 65 20 69 73 20 65 6d 70 74 79  he file is empty
aa10: 20 28 6c 65 6e 67 74 68 20 30 20 62 79 74 65 73   (length 0 bytes
aa20: 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 44 42 5f  ) */.#define DB_
aa30: 52 65 73 65 74 57 61 6e 74 65 64 20 20 20 20 20  ResetWanted     
aa40: 30 78 30 30 30 38 20 20 2f 2a 20 52 65 73 65 74  0x0008  /* Reset
aa50: 20 74 68 65 20 73 63 68 65 6d 61 20 77 68 65 6e   the schema when
aa60: 20 6e 53 63 68 65 6d 61 4c 6f 63 6b 3d 3d 30 20   nSchemaLock==0 
aa70: 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6e 75  */../*.** The nu
aa80: 6d 62 65 72 20 6f 66 20 64 69 66 66 65 72 65 6e  mber of differen
aa90: 74 20 6b 69 6e 64 73 20 6f 66 20 74 68 69 6e 67  t kinds of thing
aaa0: 73 20 74 68 61 74 20 63 61 6e 20 62 65 20 6c 69  s that can be li
aab0: 6d 69 74 65 64 0a 2a 2a 20 75 73 69 6e 67 20 74  mited.** using t
aac0: 68 65 20 73 71 6c 69 74 65 33 5f 6c 69 6d 69 74  he sqlite3_limit
aad0: 28 29 20 69 6e 74 65 72 66 61 63 65 2e 0a 2a 2f  () interface..*/
aae0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
aaf0: 4e 5f 4c 49 4d 49 54 20 28 53 51 4c 49 54 45 5f  N_LIMIT (SQLITE_
ab00: 4c 49 4d 49 54 5f 57 4f 52 4b 45 52 5f 54 48 52  LIMIT_WORKER_THR
ab10: 45 41 44 53 2b 31 29 0a 0a 2f 2a 0a 2a 2a 20 4c  EADS+1)../*.** L
ab20: 6f 6f 6b 61 73 69 64 65 20 6d 61 6c 6c 6f 63 20  ookaside malloc 
ab30: 69 73 20 61 20 73 65 74 20 6f 66 20 66 69 78 65  is a set of fixe
ab40: 64 2d 73 69 7a 65 20 62 75 66 66 65 72 73 20 74  d-size buffers t
ab50: 68 61 74 20 63 61 6e 20 62 65 20 75 73 65 64 0a  hat can be used.
ab60: 2a 2a 20 74 6f 20 73 61 74 69 73 66 79 20 73 6d  ** to satisfy sm
ab70: 61 6c 6c 20 74 72 61 6e 73 69 65 6e 74 20 6d 65  all transient me
ab80: 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20  mory allocation 
ab90: 72 65 71 75 65 73 74 73 20 66 6f 72 20 6f 62 6a  requests for obj
aba0: 65 63 74 73 0a 2a 2a 20 61 73 73 6f 63 69 61 74  ects.** associat
abb0: 65 64 20 77 69 74 68 20 61 20 70 61 72 74 69 63  ed with a partic
abc0: 75 6c 61 72 20 64 61 74 61 62 61 73 65 20 63 6f  ular database co
abd0: 6e 6e 65 63 74 69 6f 6e 2e 20 20 54 68 65 20 75  nnection.  The u
abe0: 73 65 20 6f 66 0a 2a 2a 20 6c 6f 6f 6b 61 73 69  se of.** lookasi
abf0: 64 65 20 6d 61 6c 6c 6f 63 20 70 72 6f 76 69 64  de malloc provid
ac00: 65 73 20 61 20 73 69 67 6e 69 66 69 63 61 6e 74  es a significant
ac10: 20 70 65 72 66 6f 72 6d 61 6e 63 65 20 65 6e 68   performance enh
ac20: 61 6e 63 65 6d 65 6e 74 0a 2a 2a 20 28 61 70 70  ancement.** (app
ac30: 72 6f 78 20 31 30 25 29 20 62 79 20 61 76 6f 69  rox 10%) by avoi
ac40: 64 69 6e 67 20 6e 75 6d 65 72 6f 75 73 20 6d 61  ding numerous ma
ac50: 6c 6c 6f 63 2f 66 72 65 65 20 72 65 71 75 65 73  lloc/free reques
ac60: 74 73 20 77 68 69 6c 65 20 70 61 72 73 69 6e 67  ts while parsing
ac70: 0a 2a 2a 20 53 51 4c 20 73 74 61 74 65 6d 65 6e  .** SQL statemen
ac80: 74 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 4c 6f  ts..**.** The Lo
ac90: 6f 6b 61 73 69 64 65 20 73 74 72 75 63 74 75 72  okaside structur
aca0: 65 20 68 6f 6c 64 73 20 63 6f 6e 66 69 67 75 72  e holds configur
acb0: 61 74 69 6f 6e 20 69 6e 66 6f 72 6d 61 74 69 6f  ation informatio
acc0: 6e 20 61 62 6f 75 74 20 74 68 65 0a 2a 2a 20 6c  n about the.** l
acd0: 6f 6f 6b 61 73 69 64 65 20 6d 61 6c 6c 6f 63 20  ookaside malloc 
ace0: 73 75 62 73 79 73 74 65 6d 2e 20 20 45 61 63 68  subsystem.  Each
acf0: 20 61 76 61 69 6c 61 62 6c 65 20 6d 65 6d 6f 72   available memor
ad00: 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 69 6e 0a  y allocation in.
ad10: 2a 2a 20 74 68 65 20 6c 6f 6f 6b 61 73 69 64 65  ** the lookaside
ad20: 20 73 75 62 73 79 73 74 65 6d 20 69 73 20 73 74   subsystem is st
ad30: 6f 72 65 64 20 6f 6e 20 61 20 6c 69 6e 6b 65 64  ored on a linked
ad40: 20 6c 69 73 74 20 6f 66 20 4c 6f 6f 6b 61 73 69   list of Lookasi
ad50: 64 65 53 6c 6f 74 0a 2a 2a 20 6f 62 6a 65 63 74  deSlot.** object
ad60: 73 2e 0a 2a 2a 0a 2a 2a 20 4c 6f 6f 6b 61 73 69  s..**.** Lookasi
ad70: 64 65 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 61  de allocations a
ad80: 72 65 20 6f 6e 6c 79 20 61 6c 6c 6f 77 65 64 20  re only allowed 
ad90: 66 6f 72 20 6f 62 6a 65 63 74 73 20 74 68 61 74  for objects that
ada0: 20 61 72 65 20 61 73 73 6f 63 69 61 74 65 64 0a   are associated.
adb0: 2a 2a 20 77 69 74 68 20 61 20 70 61 72 74 69 63  ** with a partic
adc0: 75 6c 61 72 20 64 61 74 61 62 61 73 65 20 63 6f  ular database co
add0: 6e 6e 65 63 74 69 6f 6e 2e 20 20 48 65 6e 63 65  nnection.  Hence
ade0: 2c 20 73 63 68 65 6d 61 20 69 6e 66 6f 72 6d 61  , schema informa
adf0: 74 69 6f 6e 20 63 61 6e 6e 6f 74 0a 2a 2a 20 62  tion cannot.** b
ae00: 65 20 73 74 6f 72 65 64 20 69 6e 20 6c 6f 6f 6b  e stored in look
ae10: 61 73 69 64 65 20 62 65 63 61 75 73 65 20 69 6e  aside because in
ae20: 20 73 68 61 72 65 64 20 63 61 63 68 65 20 6d 6f   shared cache mo
ae30: 64 65 20 74 68 65 20 73 63 68 65 6d 61 20 69 6e  de the schema in
ae40: 66 6f 72 6d 61 74 69 6f 6e 0a 2a 2a 20 69 73 20  formation.** is 
ae50: 73 68 61 72 65 64 20 62 79 20 6d 75 6c 74 69 70  shared by multip
ae60: 6c 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e  le database conn
ae70: 65 63 74 69 6f 6e 73 2e 20 20 54 68 65 72 65 66  ections.  Theref
ae80: 6f 72 65 2c 20 77 68 69 6c 65 20 70 61 72 73 69  ore, while parsi
ae90: 6e 67 0a 2a 2a 20 73 63 68 65 6d 61 20 69 6e 66  ng.** schema inf
aea0: 6f 72 6d 61 74 69 6f 6e 2c 20 74 68 65 20 4c 6f  ormation, the Lo
aeb0: 6f 6b 61 73 69 64 65 2e 62 45 6e 61 62 6c 65 64  okaside.bEnabled
aec0: 20 66 6c 61 67 20 69 73 20 63 6c 65 61 72 65 64   flag is cleared
aed0: 20 73 6f 20 74 68 61 74 0a 2a 2a 20 6c 6f 6f 6b   so that.** look
aee0: 61 73 69 64 65 20 61 6c 6c 6f 63 61 74 69 6f 6e  aside allocation
aef0: 73 20 61 72 65 20 6e 6f 74 20 75 73 65 64 20 74  s are not used t
af00: 6f 20 63 6f 6e 73 74 72 75 63 74 20 74 68 65 20  o construct the 
af10: 73 63 68 65 6d 61 20 6f 62 6a 65 63 74 73 2e 0a  schema objects..
af20: 2a 2f 0a 73 74 72 75 63 74 20 4c 6f 6f 6b 61 73  */.struct Lookas
af30: 69 64 65 20 7b 0a 20 20 75 33 32 20 62 44 69 73  ide {.  u32 bDis
af40: 61 62 6c 65 3b 20 20 20 20 20 20 20 20 20 20 20  able;           
af50: 2f 2a 20 4f 6e 6c 79 20 6f 70 65 72 61 74 65 20  /* Only operate 
af60: 74 68 65 20 6c 6f 6f 6b 61 73 69 64 65 20 77 68  the lookaside wh
af70: 65 6e 20 7a 65 72 6f 20 2a 2f 0a 20 20 75 31 36  en zero */.  u16
af80: 20 73 7a 3b 20 20 20 20 20 20 20 20 20 20 20 20   sz;            
af90: 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20       /* Size of 
afa0: 65 61 63 68 20 62 75 66 66 65 72 20 69 6e 20 62  each buffer in b
afb0: 79 74 65 73 20 2a 2f 0a 20 20 75 38 20 62 4d 61  ytes */.  u8 bMa
afc0: 6c 6c 6f 63 65 64 3b 20 20 20 20 20 20 20 20 20  lloced;         
afd0: 20 20 2f 2a 20 54 72 75 65 20 69 66 20 70 53 74    /* True if pSt
afe0: 61 72 74 20 6f 62 74 61 69 6e 65 64 20 66 72 6f  art obtained fro
aff0: 6d 20 73 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63  m sqlite3_malloc
b000: 28 29 20 2a 2f 0a 20 20 75 33 32 20 6e 53 6c 6f  () */.  u32 nSlo
b010: 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t;              
b020: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6c 6f 6f  /* Number of loo
b030: 6b 61 73 69 64 65 20 73 6c 6f 74 73 20 61 6c 6c  kaside slots all
b040: 6f 63 61 74 65 64 20 2a 2f 0a 20 20 75 33 32 20  ocated */.  u32 
b050: 61 6e 53 74 61 74 5b 33 5d 3b 20 20 20 20 20 20  anStat[3];      
b060: 20 20 20 20 2f 2a 20 30 3a 20 68 69 74 73 2e 20      /* 0: hits. 
b070: 20 31 3a 20 73 69 7a 65 20 6d 69 73 73 65 73 2e   1: size misses.
b080: 20 20 32 3a 20 66 75 6c 6c 20 6d 69 73 73 65 73    2: full misses
b090: 20 2a 2f 0a 20 20 4c 6f 6f 6b 61 73 69 64 65 53   */.  LookasideS
b0a0: 6c 6f 74 20 2a 70 49 6e 69 74 3b 20 20 20 2f 2a  lot *pInit;   /*
b0b0: 20 4c 69 73 74 20 6f 66 20 62 75 66 66 65 72 73   List of buffers
b0c0: 20 6e 6f 74 20 70 72 65 76 69 6f 75 73 6c 79 20   not previously 
b0d0: 75 73 65 64 20 2a 2f 0a 20 20 4c 6f 6f 6b 61 73  used */.  Lookas
b0e0: 69 64 65 53 6c 6f 74 20 2a 70 46 72 65 65 3b 20  ideSlot *pFree; 
b0f0: 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 61 76 61    /* List of ava
b100: 69 6c 61 62 6c 65 20 62 75 66 66 65 72 73 20 2a  ilable buffers *
b110: 2f 0a 20 20 76 6f 69 64 20 2a 70 53 74 61 72 74  /.  void *pStart
b120: 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46  ;           /* F
b130: 69 72 73 74 20 62 79 74 65 20 6f 66 20 61 76 61  irst byte of ava
b140: 69 6c 61 62 6c 65 20 6d 65 6d 6f 72 79 20 73 70  ilable memory sp
b150: 61 63 65 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70  ace */.  void *p
b160: 45 6e 64 3b 20 20 20 20 20 20 20 20 20 20 20 20  End;            
b170: 20 2f 2a 20 46 69 72 73 74 20 62 79 74 65 20 70   /* First byte p
b180: 61 73 74 20 65 6e 64 20 6f 66 20 61 76 61 69 6c  ast end of avail
b190: 61 62 6c 65 20 73 70 61 63 65 20 2a 2f 0a 7d 3b  able space */.};
b1a0: 0a 73 74 72 75 63 74 20 4c 6f 6f 6b 61 73 69 64  .struct Lookasid
b1b0: 65 53 6c 6f 74 20 7b 0a 20 20 4c 6f 6f 6b 61 73  eSlot {.  Lookas
b1c0: 69 64 65 53 6c 6f 74 20 2a 70 4e 65 78 74 3b 20  ideSlot *pNext; 
b1d0: 20 20 20 2f 2a 20 4e 65 78 74 20 62 75 66 66 65     /* Next buffe
b1e0: 72 20 69 6e 20 74 68 65 20 6c 69 73 74 20 6f 66  r in the list of
b1f0: 20 66 72 65 65 20 62 75 66 66 65 72 73 20 2a 2f   free buffers */
b200: 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20 68 61 73  .};../*.** A has
b210: 68 20 74 61 62 6c 65 20 66 6f 72 20 62 75 69 6c  h table for buil
b220: 74 2d 69 6e 20 66 75 6e 63 74 69 6f 6e 20 64 65  t-in function de
b230: 66 69 6e 69 74 69 6f 6e 73 2e 20 20 28 41 70 70  finitions.  (App
b240: 6c 69 63 61 74 69 6f 6e 2d 64 65 66 69 6e 65 64  lication-defined
b250: 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 73 20 75 73  .** functions us
b260: 65 20 61 20 72 65 67 75 6c 61 72 20 74 61 62 6c  e a regular tabl
b270: 65 20 74 61 62 6c 65 20 66 72 6f 6d 20 68 61 73  e table from has
b280: 68 2e 68 2e 29 0a 2a 2a 0a 2a 2a 20 48 61 73 68  h.h.).**.** Hash
b290: 20 65 61 63 68 20 46 75 6e 63 44 65 66 20 73 74   each FuncDef st
b2a0: 72 75 63 74 75 72 65 20 69 6e 74 6f 20 6f 6e 65  ructure into one
b2b0: 20 6f 66 20 74 68 65 20 46 75 6e 63 44 65 66 48   of the FuncDefH
b2c0: 61 73 68 2e 61 5b 5d 20 73 6c 6f 74 73 2e 0a 2a  ash.a[] slots..*
b2d0: 2a 20 43 6f 6c 6c 69 73 69 6f 6e 73 20 61 72 65  * Collisions are
b2e0: 20 6f 6e 20 74 68 65 20 46 75 6e 63 44 65 66 2e   on the FuncDef.
b2f0: 75 2e 70 48 61 73 68 20 63 68 61 69 6e 2e 0a 2a  u.pHash chain..*
b300: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
b310: 5f 46 55 4e 43 5f 48 41 53 48 5f 53 5a 20 32 33  _FUNC_HASH_SZ 23
b320: 0a 73 74 72 75 63 74 20 46 75 6e 63 44 65 66 48  .struct FuncDefH
b330: 61 73 68 20 7b 0a 20 20 46 75 6e 63 44 65 66 20  ash {.  FuncDef 
b340: 2a 61 5b 53 51 4c 49 54 45 5f 46 55 4e 43 5f 48  *a[SQLITE_FUNC_H
b350: 41 53 48 5f 53 5a 5d 3b 20 20 20 20 20 20 20 2f  ASH_SZ];       /
b360: 2a 20 48 61 73 68 20 74 61 62 6c 65 20 66 6f 72  * Hash table for
b370: 20 66 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a 7d 3b   functions */.};
b380: 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ..#ifdef SQLITE_
b390: 55 53 45 52 5f 41 55 54 48 45 4e 54 49 43 41 54  USER_AUTHENTICAT
b3a0: 49 4f 4e 0a 2f 2a 0a 2a 2a 20 49 6e 66 6f 72 6d  ION./*.** Inform
b3b0: 61 74 69 6f 6e 20 68 65 6c 64 20 69 6e 20 74 68  ation held in th
b3c0: 65 20 22 73 71 6c 69 74 65 33 22 20 64 61 74 61  e "sqlite3" data
b3d0: 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20  base connection 
b3e0: 6f 62 6a 65 63 74 20 61 6e 64 20 75 73 65 64 0a  object and used.
b3f0: 2a 2a 20 74 6f 20 6d 61 6e 61 67 65 20 75 73 65  ** to manage use
b400: 72 20 61 75 74 68 65 6e 74 69 63 61 74 69 6f 6e  r authentication
b410: 2e 0a 2a 2f 0a 74 79 70 65 64 65 66 20 73 74 72  ..*/.typedef str
b420: 75 63 74 20 73 71 6c 69 74 65 33 5f 75 73 65 72  uct sqlite3_user
b430: 61 75 74 68 20 73 71 6c 69 74 65 33 5f 75 73 65  auth sqlite3_use
b440: 72 61 75 74 68 3b 0a 73 74 72 75 63 74 20 73 71  rauth;.struct sq
b450: 6c 69 74 65 33 5f 75 73 65 72 61 75 74 68 20 7b  lite3_userauth {
b460: 0a 20 20 75 38 20 61 75 74 68 4c 65 76 65 6c 3b  .  u8 authLevel;
b470: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b480: 20 2f 2a 20 43 75 72 72 65 6e 74 20 61 75 74 68   /* Current auth
b490: 65 6e 74 69 63 61 74 69 6f 6e 20 6c 65 76 65 6c  entication level
b4a0: 20 2a 2f 0a 20 20 69 6e 74 20 6e 41 75 74 68 50   */.  int nAuthP
b4b0: 57 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  W;              
b4c0: 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20 74      /* Size of t
b4d0: 68 65 20 7a 41 75 74 68 50 57 20 69 6e 20 62 79  he zAuthPW in by
b4e0: 74 65 73 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a  tes */.  char *z
b4f0: 41 75 74 68 50 57 3b 20 20 20 20 20 20 20 20 20  AuthPW;         
b500: 20 20 20 20 20 20 20 2f 2a 20 50 61 73 73 77 6f         /* Passwo
b510: 72 64 20 75 73 65 64 20 74 6f 20 61 75 74 68 65  rd used to authe
b520: 6e 74 69 63 61 74 65 20 2a 2f 0a 20 20 63 68 61  nticate */.  cha
b530: 72 20 2a 7a 41 75 74 68 55 73 65 72 3b 20 20 20  r *zAuthUser;   
b540: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 55 73             /* Us
b550: 65 72 20 6e 61 6d 65 20 75 73 65 64 20 74 6f 20  er name used to 
b560: 61 75 74 68 65 6e 74 69 63 61 74 65 20 2a 2f 0a  authenticate */.
b570: 7d 3b 0a 0a 2f 2a 20 41 6c 6c 6f 77 65 64 20 76  };../* Allowed v
b580: 61 6c 75 65 73 20 66 6f 72 20 73 71 6c 69 74 65  alues for sqlite
b590: 33 5f 75 73 65 72 61 75 74 68 2e 61 75 74 68 4c  3_userauth.authL
b5a0: 65 76 65 6c 20 2a 2f 0a 23 64 65 66 69 6e 65 20  evel */.#define 
b5b0: 55 41 55 54 48 5f 55 6e 6b 6e 6f 77 6e 20 20 20  UAUTH_Unknown   
b5c0: 20 20 30 20 20 20 20 20 2f 2a 20 41 75 74 68 65    0     /* Authe
b5d0: 6e 74 69 63 61 74 69 6f 6e 20 6e 6f 74 20 79 65  ntication not ye
b5e0: 74 20 63 68 65 63 6b 65 64 20 2a 2f 0a 23 64 65  t checked */.#de
b5f0: 66 69 6e 65 20 55 41 55 54 48 5f 46 61 69 6c 20  fine UAUTH_Fail 
b600: 20 20 20 20 20 20 20 31 20 20 20 20 20 2f 2a 20         1     /* 
b610: 55 73 65 72 20 61 75 74 68 65 6e 74 69 63 61 74  User authenticat
b620: 69 6f 6e 20 66 61 69 6c 65 64 20 2a 2f 0a 23 64  ion failed */.#d
b630: 65 66 69 6e 65 20 55 41 55 54 48 5f 55 73 65 72  efine UAUTH_User
b640: 20 20 20 20 20 20 20 20 32 20 20 20 20 20 2f 2a          2     /*
b650: 20 41 75 74 68 65 6e 74 69 63 61 74 65 64 20 61   Authenticated a
b660: 73 20 61 20 6e 6f 72 6d 61 6c 20 75 73 65 72 20  s a normal user 
b670: 2a 2f 0a 23 64 65 66 69 6e 65 20 55 41 55 54 48  */.#define UAUTH
b680: 5f 41 64 6d 69 6e 20 20 20 20 20 20 20 33 20 20  _Admin       3  
b690: 20 20 20 2f 2a 20 41 75 74 68 65 6e 74 69 63 61     /* Authentica
b6a0: 74 65 64 20 61 73 20 61 6e 20 61 64 6d 69 6e 69  ted as an admini
b6b0: 73 74 72 61 74 6f 72 20 2a 2f 0a 0a 2f 2a 20 46  strator */../* F
b6c0: 75 6e 63 74 69 6f 6e 73 20 75 73 65 64 20 6f 6e  unctions used on
b6d0: 6c 79 20 62 79 20 75 73 65 72 20 61 75 74 68 6f  ly by user autho
b6e0: 72 69 7a 61 74 69 6f 6e 20 6c 6f 67 69 63 20 2a  rization logic *
b6f0: 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 55 73 65  /.int sqlite3Use
b700: 72 41 75 74 68 54 61 62 6c 65 28 63 6f 6e 73 74  rAuthTable(const
b710: 20 63 68 61 72 2a 29 3b 0a 69 6e 74 20 73 71 6c   char*);.int sql
b720: 69 74 65 33 55 73 65 72 41 75 74 68 43 68 65 63  ite3UserAuthChec
b730: 6b 4c 6f 67 69 6e 28 73 71 6c 69 74 65 33 2a 2c  kLogin(sqlite3*,
b740: 63 6f 6e 73 74 20 63 68 61 72 2a 2c 75 38 2a 29  const char*,u8*)
b750: 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 55 73  ;.void sqlite3Us
b760: 65 72 41 75 74 68 49 6e 69 74 28 73 71 6c 69 74  erAuthInit(sqlit
b770: 65 33 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  e3*);.void sqlit
b780: 65 33 43 72 79 70 74 46 75 6e 63 28 73 71 6c 69  e3CryptFunc(sqli
b790: 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74  te3_context*,int
b7a0: 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2a  ,sqlite3_value**
b7b0: 29 3b 0a 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51  );..#endif /* SQ
b7c0: 4c 49 54 45 5f 55 53 45 52 5f 41 55 54 48 45 4e  LITE_USER_AUTHEN
b7d0: 54 49 43 41 54 49 4f 4e 20 2a 2f 0a 0a 2f 2a 0a  TICATION */../*.
b7e0: 2a 2a 20 74 79 70 65 64 65 66 20 66 6f 72 20 74  ** typedef for t
b7f0: 68 65 20 61 75 74 68 6f 72 69 7a 61 74 69 6f 6e  he authorization
b800: 20 63 61 6c 6c 62 61 63 6b 20 66 75 6e 63 74 69   callback functi
b810: 6f 6e 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51  on..*/.#ifdef SQ
b820: 4c 49 54 45 5f 55 53 45 52 5f 41 55 54 48 45 4e  LITE_USER_AUTHEN
b830: 54 49 43 41 54 49 4f 4e 0a 20 20 74 79 70 65 64  TICATION.  typed
b840: 65 66 20 69 6e 74 20 28 2a 73 71 6c 69 74 65 33  ef int (*sqlite3
b850: 5f 78 61 75 74 68 29 28 76 6f 69 64 2a 2c 69 6e  _xauth)(void*,in
b860: 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f  t,const char*,co
b870: 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20  nst char*,const 
b880: 63 68 61 72 2a 2c 0a 20 20 20 20 20 20 20 20 20  char*,.         
b890: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b8a0: 20 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72        const char
b8b0: 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  *, const char*);
b8c0: 0a 23 65 6c 73 65 0a 20 20 74 79 70 65 64 65 66  .#else.  typedef
b8d0: 20 69 6e 74 20 28 2a 73 71 6c 69 74 65 33 5f 78   int (*sqlite3_x
b8e0: 61 75 74 68 29 28 76 6f 69 64 2a 2c 69 6e 74 2c  auth)(void*,int,
b8f0: 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73  const char*,cons
b900: 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68  t char*,const ch
b910: 61 72 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20  ar*,.           
b920: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b930: 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 2a 29      const char*)
b940: 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65  ;.#endif..#ifnde
b950: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 44 45  f SQLITE_OMIT_DE
b960: 50 52 45 43 41 54 45 44 0a 2f 2a 20 54 68 69 73  PRECATED./* This
b970: 20 69 73 20 61 6e 20 65 78 74 72 61 20 53 51 4c   is an extra SQL
b980: 49 54 45 5f 54 52 41 43 45 20 6d 61 63 72 6f 20  ITE_TRACE macro 
b990: 74 68 61 74 20 69 6e 64 69 63 61 74 65 73 20 22  that indicates "
b9a0: 6c 65 67 61 63 79 22 20 74 72 61 63 69 6e 67 0a  legacy" tracing.
b9b0: 2a 2a 20 69 6e 20 74 68 65 20 73 74 79 6c 65 20  ** in the style 
b9c0: 6f 66 20 73 71 6c 69 74 65 33 5f 74 72 61 63 65  of sqlite3_trace
b9d0: 28 29 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  ().*/.#define SQ
b9e0: 4c 49 54 45 5f 54 52 41 43 45 5f 4c 45 47 41 43  LITE_TRACE_LEGAC
b9f0: 59 20 20 30 78 38 30 0a 23 65 6c 73 65 0a 23 64  Y  0x80.#else.#d
ba00: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 54 52 41  efine SQLITE_TRA
ba10: 43 45 5f 4c 45 47 41 43 59 20 20 30 0a 23 65 6e  CE_LEGACY  0.#en
ba20: 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d  dif /* SQLITE_OM
ba30: 49 54 5f 44 45 50 52 45 43 41 54 45 44 20 2a 2f  IT_DEPRECATED */
ba40: 0a 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 64 61  .../*.** Each da
ba50: 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f  tabase connectio
ba60: 6e 20 69 73 20 61 6e 20 69 6e 73 74 61 6e 63 65  n is an instance
ba70: 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   of the followin
ba80: 67 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2f 0a  g structure..*/.
ba90: 73 74 72 75 63 74 20 73 71 6c 69 74 65 33 20 7b  struct sqlite3 {
baa0: 0a 20 20 73 71 6c 69 74 65 33 5f 76 66 73 20 2a  .  sqlite3_vfs *
bab0: 70 56 66 73 3b 20 20 20 20 20 20 20 20 20 20 20  pVfs;           
bac0: 20 2f 2a 20 4f 53 20 49 6e 74 65 72 66 61 63 65   /* OS Interface
bad0: 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 56 64 62   */.  struct Vdb
bae0: 65 20 2a 70 56 64 62 65 3b 20 20 20 20 20 20 20  e *pVdbe;       
baf0: 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 61      /* List of a
bb00: 63 74 69 76 65 20 76 69 72 74 75 61 6c 20 6d 61  ctive virtual ma
bb10: 63 68 69 6e 65 73 20 2a 2f 0a 20 20 43 6f 6c 6c  chines */.  Coll
bb20: 53 65 71 20 2a 70 44 66 6c 74 43 6f 6c 6c 3b 20  Seq *pDfltColl; 
bb30: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
bb40: 20 64 65 66 61 75 6c 74 20 63 6f 6c 6c 61 74 69   default collati
bb50: 6e 67 20 73 65 71 75 65 6e 63 65 20 28 42 49 4e  ng sequence (BIN
bb60: 41 52 59 29 20 2a 2f 0a 20 20 73 71 6c 69 74 65  ARY) */.  sqlite
bb70: 33 5f 6d 75 74 65 78 20 2a 6d 75 74 65 78 3b 20  3_mutex *mutex; 
bb80: 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6e 6e 65          /* Conne
bb90: 63 74 69 6f 6e 20 6d 75 74 65 78 20 2a 2f 0a 20  ction mutex */. 
bba0: 20 44 62 20 2a 61 44 62 3b 20 20 20 20 20 20 20   Db *aDb;       
bbb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
bbc0: 2a 20 41 6c 6c 20 62 61 63 6b 65 6e 64 73 20 2a  * All backends *
bbd0: 2f 0a 20 20 69 6e 74 20 6e 44 62 3b 20 20 20 20  /.  int nDb;    
bbe0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bbf0: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62    /* Number of b
bc00: 61 63 6b 65 6e 64 73 20 63 75 72 72 65 6e 74 6c  ackends currentl
bc10: 79 20 69 6e 20 75 73 65 20 2a 2f 0a 20 20 75 33  y in use */.  u3
bc20: 32 20 6d 44 62 46 6c 61 67 73 3b 20 20 20 20 20  2 mDbFlags;     
bc30: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 66              /* f
bc40: 6c 61 67 73 20 72 65 63 6f 72 64 69 6e 67 20 69  lags recording i
bc50: 6e 74 65 72 6e 61 6c 20 73 74 61 74 65 20 2a 2f  nternal state */
bc60: 0a 20 20 75 33 32 20 66 6c 61 67 73 3b 20 20 20  .  u32 flags;   
bc70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bc80: 20 2f 2a 20 66 6c 61 67 73 20 73 65 74 74 61 62   /* flags settab
bc90: 6c 65 20 62 79 20 70 72 61 67 6d 61 73 2e 20 53  le by pragmas. S
bca0: 65 65 20 62 65 6c 6f 77 20 2a 2f 0a 20 20 69 36  ee below */.  i6
bcb0: 34 20 6c 61 73 74 52 6f 77 69 64 3b 20 20 20 20  4 lastRowid;    
bcc0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52              /* R
bcd0: 4f 57 49 44 20 6f 66 20 6d 6f 73 74 20 72 65 63  OWID of most rec
bce0: 65 6e 74 20 69 6e 73 65 72 74 20 28 73 65 65 20  ent insert (see 
bcf0: 61 62 6f 76 65 29 20 2a 2f 0a 20 20 69 36 34 20  above) */.  i64 
bd00: 73 7a 4d 6d 61 70 3b 20 20 20 20 20 20 20 20 20  szMmap;         
bd10: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 65 66            /* Def
bd20: 61 75 6c 74 20 6d 6d 61 70 5f 73 69 7a 65 20 73  ault mmap_size s
bd30: 65 74 74 69 6e 67 20 2a 2f 0a 20 20 75 33 32 20  etting */.  u32 
bd40: 6e 53 63 68 65 6d 61 4c 6f 63 6b 3b 20 20 20 20  nSchemaLock;    
bd50: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 6f 20            /* Do 
bd60: 6e 6f 74 20 72 65 73 65 74 20 74 68 65 20 73 63  not reset the sc
bd70: 68 65 6d 61 20 77 68 65 6e 20 6e 6f 6e 2d 7a 65  hema when non-ze
bd80: 72 6f 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64  ro */.  unsigned
bd90: 20 69 6e 74 20 6f 70 65 6e 46 6c 61 67 73 3b 20   int openFlags; 
bda0: 20 20 20 20 20 20 2f 2a 20 46 6c 61 67 73 20 70        /* Flags p
bdb0: 61 73 73 65 64 20 74 6f 20 73 71 6c 69 74 65 33  assed to sqlite3
bdc0: 5f 76 66 73 2e 78 4f 70 65 6e 28 29 20 2a 2f 0a  _vfs.xOpen() */.
bdd0: 20 20 69 6e 74 20 65 72 72 43 6f 64 65 3b 20 20    int errCode;  
bde0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bdf0: 2f 2a 20 4d 6f 73 74 20 72 65 63 65 6e 74 20 65  /* Most recent e
be00: 72 72 6f 72 20 63 6f 64 65 20 28 53 51 4c 49 54  rror code (SQLIT
be10: 45 5f 2a 29 20 2a 2f 0a 20 20 69 6e 74 20 65 72  E_*) */.  int er
be20: 72 4d 61 73 6b 3b 20 20 20 20 20 20 20 20 20 20  rMask;          
be30: 20 20 20 20 20 20 20 20 2f 2a 20 26 20 72 65 73          /* & res
be40: 75 6c 74 20 63 6f 64 65 73 20 77 69 74 68 20 74  ult codes with t
be50: 68 69 73 20 62 65 66 6f 72 65 20 72 65 74 75 72  his before retur
be60: 6e 69 6e 67 20 2a 2f 0a 20 20 69 6e 74 20 69 53  ning */.  int iS
be70: 79 73 45 72 72 6e 6f 3b 20 20 20 20 20 20 20 20  ysErrno;        
be80: 20 20 20 20 20 20 20 20 2f 2a 20 45 72 72 6e 6f          /* Errno
be90: 20 76 61 6c 75 65 20 66 72 6f 6d 20 6c 61 73 74   value from last
bea0: 20 73 79 73 74 65 6d 20 65 72 72 6f 72 20 2a 2f   system error */
beb0: 0a 20 20 75 31 36 20 64 62 4f 70 74 46 6c 61 67  .  u16 dbOptFlag
bec0: 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  s;              
bed0: 20 2f 2a 20 46 6c 61 67 73 20 74 6f 20 65 6e 61   /* Flags to ena
bee0: 62 6c 65 2f 64 69 73 61 62 6c 65 20 6f 70 74 69  ble/disable opti
bef0: 6d 69 7a 61 74 69 6f 6e 73 20 2a 2f 0a 20 20 75  mizations */.  u
bf00: 38 20 65 6e 63 3b 20 20 20 20 20 20 20 20 20 20  8 enc;          
bf10: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
bf20: 54 65 78 74 20 65 6e 63 6f 64 69 6e 67 20 2a 2f  Text encoding */
bf30: 0a 20 20 75 38 20 61 75 74 6f 43 6f 6d 6d 69 74  .  u8 autoCommit
bf40: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
bf50: 20 2f 2a 20 54 68 65 20 61 75 74 6f 2d 63 6f 6d   /* The auto-com
bf60: 6d 69 74 20 66 6c 61 67 2e 20 2a 2f 0a 20 20 75  mit flag. */.  u
bf70: 38 20 74 65 6d 70 5f 73 74 6f 72 65 3b 20 20 20  8 temp_store;   
bf80: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
bf90: 31 3a 20 66 69 6c 65 20 32 3a 20 6d 65 6d 6f 72  1: file 2: memor
bfa0: 79 20 30 3a 20 64 65 66 61 75 6c 74 20 2a 2f 0a  y 0: default */.
bfb0: 20 20 75 38 20 6d 61 6c 6c 6f 63 46 61 69 6c 65    u8 mallocFaile
bfc0: 64 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  d;              
bfd0: 2f 2a 20 54 72 75 65 20 69 66 20 77 65 20 68 61  /* True if we ha
bfe0: 76 65 20 73 65 65 6e 20 61 20 6d 61 6c 6c 6f 63  ve seen a malloc
bff0: 20 66 61 69 6c 75 72 65 20 2a 2f 0a 20 20 75 38   failure */.  u8
c000: 20 62 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 3b 20   bBenignMalloc; 
c010: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44              /* D
c020: 6f 20 6e 6f 74 20 72 65 71 75 69 72 65 20 4f 4f  o not require OO
c030: 4d 73 20 69 66 20 74 72 75 65 20 2a 2f 0a 20 20  Ms if true */.  
c040: 75 38 20 64 66 6c 74 4c 6f 63 6b 4d 6f 64 65 3b  u8 dfltLockMode;
c050: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
c060: 20 44 65 66 61 75 6c 74 20 6c 6f 63 6b 69 6e 67   Default locking
c070: 2d 6d 6f 64 65 20 66 6f 72 20 61 74 74 61 63 68  -mode for attach
c080: 65 64 20 64 62 73 20 2a 2f 0a 20 20 73 69 67 6e  ed dbs */.  sign
c090: 65 64 20 63 68 61 72 20 6e 65 78 74 41 75 74 6f  ed char nextAuto
c0a0: 76 61 63 3b 20 20 20 20 20 20 2f 2a 20 41 75 74  vac;      /* Aut
c0b0: 6f 76 61 63 20 73 65 74 74 69 6e 67 20 61 66 74  ovac setting aft
c0c0: 65 72 20 56 41 43 55 55 4d 20 69 66 20 3e 3d 30  er VACUUM if >=0
c0d0: 20 2a 2f 0a 20 20 75 38 20 73 75 70 70 72 65 73   */.  u8 suppres
c0e0: 73 45 72 72 3b 20 20 20 20 20 20 20 20 20 20 20  sErr;           
c0f0: 20 20 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 69 73      /* Do not is
c100: 73 75 65 20 65 72 72 6f 72 20 6d 65 73 73 61 67  sue error messag
c110: 65 73 20 69 66 20 74 72 75 65 20 2a 2f 0a 20 20  es if true */.  
c120: 75 38 20 76 74 61 62 4f 6e 43 6f 6e 66 6c 69 63  u8 vtabOnConflic
c130: 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  t;            /*
c140: 20 56 61 6c 75 65 20 74 6f 20 72 65 74 75 72 6e   Value to return
c150: 20 66 6f 72 20 73 33 5f 76 74 61 62 5f 6f 6e 5f   for s3_vtab_on_
c160: 63 6f 6e 66 6c 69 63 74 28 29 20 2a 2f 0a 20 20  conflict() */.  
c170: 75 38 20 69 73 54 72 61 6e 73 61 63 74 69 6f 6e  u8 isTransaction
c180: 53 61 76 65 70 6f 69 6e 74 3b 20 20 20 20 2f 2a  Savepoint;    /*
c190: 20 54 72 75 65 20 69 66 20 74 68 65 20 6f 75 74   True if the out
c1a0: 65 72 6d 6f 73 74 20 73 61 76 65 70 6f 69 6e 74  ermost savepoint
c1b0: 20 69 73 20 61 20 54 53 20 2a 2f 0a 20 20 75 38   is a TS */.  u8
c1c0: 20 6d 54 72 61 63 65 3b 20 20 20 20 20 20 20 20   mTrace;        
c1d0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 7a              /* z
c1e0: 65 72 6f 20 6f 72 20 6d 6f 72 65 20 53 51 4c 49  ero or more SQLI
c1f0: 54 45 5f 54 52 41 43 45 20 66 6c 61 67 73 20 2a  TE_TRACE flags *
c200: 2f 0a 20 20 75 38 20 6e 6f 53 68 61 72 65 64 43  /.  u8 noSharedC
c210: 61 63 68 65 3b 20 20 20 20 20 20 20 20 20 20 20  ache;           
c220: 20 20 2f 2a 20 54 72 75 65 20 69 66 20 6e 6f 20    /* True if no 
c230: 73 68 61 72 65 64 2d 63 61 63 68 65 20 62 61 63  shared-cache bac
c240: 6b 65 6e 64 73 20 2a 2f 0a 20 20 75 38 20 6e 53  kends */.  u8 nS
c250: 71 6c 45 78 65 63 3b 20 20 20 20 20 20 20 20 20  qlExec;         
c260: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
c270: 65 72 20 6f 66 20 70 65 6e 64 69 6e 67 20 4f 50  er of pending OP
c280: 5f 53 71 6c 45 78 65 63 20 6f 70 63 6f 64 65 73  _SqlExec opcodes
c290: 20 2a 2f 0a 20 20 69 6e 74 20 6e 65 78 74 50 61   */.  int nextPa
c2a0: 67 65 73 69 7a 65 3b 20 20 20 20 20 20 20 20 20  gesize;         
c2b0: 20 20 20 20 2f 2a 20 50 61 67 65 73 69 7a 65 20      /* Pagesize 
c2c0: 61 66 74 65 72 20 56 41 43 55 55 4d 20 69 66 20  after VACUUM if 
c2d0: 3e 30 20 2a 2f 0a 20 20 75 33 32 20 6d 61 67 69  >0 */.  u32 magi
c2e0: 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  c;              
c2f0: 20 20 20 20 20 20 2f 2a 20 4d 61 67 69 63 20 6e        /* Magic n
c300: 75 6d 62 65 72 20 66 6f 72 20 64 65 74 65 63 74  umber for detect
c310: 20 6c 69 62 72 61 72 79 20 6d 69 73 75 73 65 20   library misuse 
c320: 2a 2f 0a 20 20 69 6e 74 20 6e 43 68 61 6e 67 65  */.  int nChange
c330: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
c340: 20 20 20 2f 2a 20 56 61 6c 75 65 20 72 65 74 75     /* Value retu
c350: 72 6e 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f  rned by sqlite3_
c360: 63 68 61 6e 67 65 73 28 29 20 2a 2f 0a 20 20 69  changes() */.  i
c370: 6e 74 20 6e 54 6f 74 61 6c 43 68 61 6e 67 65 3b  nt nTotalChange;
c380: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
c390: 56 61 6c 75 65 20 72 65 74 75 72 6e 65 64 20 62  Value returned b
c3a0: 79 20 73 71 6c 69 74 65 33 5f 74 6f 74 61 6c 5f  y sqlite3_total_
c3b0: 63 68 61 6e 67 65 73 28 29 20 2a 2f 0a 20 20 69  changes() */.  i
c3c0: 6e 74 20 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45  nt aLimit[SQLITE
c3d0: 5f 4e 5f 4c 49 4d 49 54 5d 3b 20 20 20 2f 2a 20  _N_LIMIT];   /* 
c3e0: 4c 69 6d 69 74 73 20 2a 2f 0a 20 20 69 6e 74 20  Limits */.  int 
c3f0: 6e 4d 61 78 53 6f 72 74 65 72 4d 6d 61 70 3b 20  nMaxSorterMmap; 
c400: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 78            /* Max
c410: 69 6d 75 6d 20 73 69 7a 65 20 6f 66 20 72 65 67  imum size of reg
c420: 69 6f 6e 73 20 6d 61 70 70 65 64 20 62 79 20 73  ions mapped by s
c430: 6f 72 74 65 72 20 2a 2f 0a 20 20 73 74 72 75 63  orter */.  struc
c440: 74 20 73 71 6c 69 74 65 33 49 6e 69 74 49 6e 66  t sqlite3InitInf
c450: 6f 20 7b 20 20 20 20 20 20 2f 2a 20 49 6e 66 6f  o {      /* Info
c460: 72 6d 61 74 69 6f 6e 20 75 73 65 64 20 64 75 72  rmation used dur
c470: 69 6e 67 20 69 6e 69 74 69 61 6c 69 7a 61 74 69  ing initializati
c480: 6f 6e 20 2a 2f 0a 20 20 20 20 69 6e 74 20 6e 65  on */.    int ne
c490: 77 54 6e 75 6d 3b 20 20 20 20 20 20 20 20 20 20  wTnum;          
c4a0: 20 20 20 20 20 20 2f 2a 20 52 6f 6f 74 70 61 67        /* Rootpag
c4b0: 65 20 6f 66 20 74 61 62 6c 65 20 62 65 69 6e 67  e of table being
c4c0: 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a   initialized */.
c4d0: 20 20 20 20 75 38 20 69 44 62 3b 20 20 20 20 20      u8 iDb;     
c4e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c4f0: 2f 2a 20 57 68 69 63 68 20 64 62 20 66 69 6c 65  /* Which db file
c500: 20 69 73 20 62 65 69 6e 67 20 69 6e 69 74 69 61   is being initia
c510: 6c 69 7a 65 64 20 2a 2f 0a 20 20 20 20 75 38 20  lized */.    u8 
c520: 62 75 73 79 3b 20 20 20 20 20 20 20 20 20 20 20  busy;           
c530: 20 20 20 20 20 20 20 20 20 2f 2a 20 54 52 55 45           /* TRUE
c540: 20 69 66 20 63 75 72 72 65 6e 74 6c 79 20 69 6e   if currently in
c550: 69 74 69 61 6c 69 7a 69 6e 67 20 2a 2f 0a 20 20  itializing */.  
c560: 20 20 75 6e 73 69 67 6e 65 64 20 6f 72 70 68 61    unsigned orpha
c570: 6e 54 72 69 67 67 65 72 20 3a 20 31 3b 20 2f 2a  nTrigger : 1; /*
c580: 20 4c 61 73 74 20 73 74 61 74 65 6d 65 6e 74 20   Last statement 
c590: 69 73 20 6f 72 70 68 61 6e 65 64 20 54 45 4d 50  is orphaned TEMP
c5a0: 20 74 72 69 67 67 65 72 20 2a 2f 0a 20 20 20 20   trigger */.    
c5b0: 75 6e 73 69 67 6e 65 64 20 69 6d 70 6f 73 74 65  unsigned imposte
c5c0: 72 54 61 62 6c 65 20 3a 20 31 3b 20 2f 2a 20 42  rTable : 1; /* B
c5d0: 75 69 6c 64 69 6e 67 20 61 6e 20 69 6d 70 6f 73  uilding an impos
c5e0: 74 65 72 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20  ter table */.   
c5f0: 20 75 6e 73 69 67 6e 65 64 20 72 65 6f 70 65 6e   unsigned reopen
c600: 4d 65 6d 64 62 20 3a 20 31 3b 20 20 20 2f 2a 20  Memdb : 1;   /* 
c610: 41 54 54 41 43 48 20 69 73 20 72 65 61 6c 6c 79  ATTACH is really
c620: 20 61 20 72 65 6f 70 65 6e 20 75 73 69 6e 67 20   a reopen using 
c630: 4d 65 6d 44 42 20 2a 2f 0a 20 20 7d 20 69 6e 69  MemDB */.  } ini
c640: 74 3b 0a 20 20 69 6e 74 20 6e 56 64 62 65 41 63  t;.  int nVdbeAc
c650: 74 69 76 65 3b 20 20 20 20 20 20 20 20 20 20 20  tive;           
c660: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
c670: 56 44 42 45 73 20 63 75 72 72 65 6e 74 6c 79 20  VDBEs currently 
c680: 72 75 6e 6e 69 6e 67 20 2a 2f 0a 20 20 69 6e 74  running */.  int
c690: 20 6e 56 64 62 65 52 65 61 64 3b 20 20 20 20 20   nVdbeRead;     
c6a0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
c6b0: 6d 62 65 72 20 6f 66 20 61 63 74 69 76 65 20 56  mber of active V
c6c0: 44 42 45 73 20 74 68 61 74 20 72 65 61 64 20 6f  DBEs that read o
c6d0: 72 20 77 72 69 74 65 20 2a 2f 0a 20 20 69 6e 74  r write */.  int
c6e0: 20 6e 56 64 62 65 57 72 69 74 65 3b 20 20 20 20   nVdbeWrite;    
c6f0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
c700: 6d 62 65 72 20 6f 66 20 61 63 74 69 76 65 20 56  mber of active V
c710: 44 42 45 73 20 74 68 61 74 20 72 65 61 64 20 61  DBEs that read a
c720: 6e 64 20 77 72 69 74 65 20 2a 2f 0a 20 20 69 6e  nd write */.  in
c730: 74 20 6e 56 64 62 65 45 78 65 63 3b 20 20 20 20  t nVdbeExec;    
c740: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
c750: 75 6d 62 65 72 20 6f 66 20 6e 65 73 74 65 64 20  umber of nested 
c760: 63 61 6c 6c 73 20 74 6f 20 56 64 62 65 45 78 65  calls to VdbeExe
c770: 63 28 29 20 2a 2f 0a 20 20 69 6e 74 20 6e 56 44  c() */.  int nVD
c780: 65 73 74 72 6f 79 3b 20 20 20 20 20 20 20 20 20  estroy;         
c790: 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
c7a0: 20 6f 66 20 61 63 74 69 76 65 20 4f 50 5f 56 44   of active OP_VD
c7b0: 65 73 74 72 6f 79 20 6f 70 65 72 61 74 69 6f 6e  estroy operation
c7c0: 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 45 78 74 65  s */.  int nExte
c7d0: 6e 73 69 6f 6e 3b 20 20 20 20 20 20 20 20 20 20  nsion;          
c7e0: 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
c7f0: 66 20 6c 6f 61 64 65 64 20 65 78 74 65 6e 73 69  f loaded extensi
c800: 6f 6e 73 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 2a  ons */.  void **
c810: 61 45 78 74 65 6e 73 69 6f 6e 3b 20 20 20 20 20  aExtension;     
c820: 20 20 20 20 20 20 20 2f 2a 20 41 72 72 61 79 20         /* Array 
c830: 6f 66 20 73 68 61 72 65 64 20 6c 69 62 72 61 72  of shared librar
c840: 79 20 68 61 6e 64 6c 65 73 20 2a 2f 0a 20 20 69  y handles */.  i
c850: 6e 74 20 28 2a 78 54 72 61 63 65 29 28 75 33 32  nt (*xTrace)(u32
c860: 2c 76 6f 69 64 2a 2c 76 6f 69 64 2a 2c 76 6f 69  ,void*,void*,voi
c870: 64 2a 29 3b 20 20 20 20 20 2f 2a 20 54 72 61 63  d*);     /* Trac
c880: 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20  e function */.  
c890: 76 6f 69 64 20 2a 70 54 72 61 63 65 41 72 67 3b  void *pTraceArg;
c8a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c8b0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72 67            /* Arg
c8c0: 75 6d 65 6e 74 20 74 6f 20 74 68 65 20 74 72 61  ument to the tra
c8d0: 63 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20  ce function */. 
c8e0: 20 76 6f 69 64 20 28 2a 78 50 72 6f 66 69 6c 65   void (*xProfile
c8f0: 29 28 76 6f 69 64 2a 2c 63 6f 6e 73 74 20 63 68  )(void*,const ch
c900: 61 72 2a 2c 75 36 34 29 3b 20 20 2f 2a 20 50 72  ar*,u64);  /* Pr
c910: 6f 66 69 6c 69 6e 67 20 66 75 6e 63 74 69 6f 6e  ofiling function
c920: 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 50 72 6f   */.  void *pPro
c930: 66 69 6c 65 41 72 67 3b 20 20 20 20 20 20 20 20  fileArg;        
c940: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c950: 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f 20 70  /* Argument to p
c960: 72 6f 66 69 6c 65 20 66 75 6e 63 74 69 6f 6e 20  rofile function 
c970: 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 43 6f 6d 6d  */.  void *pComm
c980: 69 74 41 72 67 3b 20 20 20 20 20 20 20 20 20 20  itArg;          
c990: 20 20 20 20 20 20 20 2f 2a 20 41 72 67 75 6d 65         /* Argume
c9a0: 6e 74 20 74 6f 20 78 43 6f 6d 6d 69 74 43 61 6c  nt to xCommitCal
c9b0: 6c 62 61 63 6b 28 29 20 2a 2f 0a 20 20 69 6e 74  lback() */.  int
c9c0: 20 28 2a 78 43 6f 6d 6d 69 74 43 61 6c 6c 62 61   (*xCommitCallba
c9d0: 63 6b 29 28 76 6f 69 64 2a 29 3b 20 20 20 20 2f  ck)(void*);    /
c9e0: 2a 20 49 6e 76 6f 6b 65 64 20 61 74 20 65 76 65  * Invoked at eve
c9f0: 72 79 20 63 6f 6d 6d 69 74 2e 20 2a 2f 0a 20 20  ry commit. */.  
ca00: 76 6f 69 64 20 2a 70 52 6f 6c 6c 62 61 63 6b 41  void *pRollbackA
ca10: 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  rg;             
ca20: 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f    /* Argument to
ca30: 20 78 52 6f 6c 6c 62 61 63 6b 43 61 6c 6c 62 61   xRollbackCallba
ca40: 63 6b 28 29 20 2a 2f 0a 20 20 76 6f 69 64 20 28  ck() */.  void (
ca50: 2a 78 52 6f 6c 6c 62 61 63 6b 43 61 6c 6c 62 61  *xRollbackCallba
ca60: 63 6b 29 28 76 6f 69 64 2a 29 3b 20 2f 2a 20 49  ck)(void*); /* I
ca70: 6e 76 6f 6b 65 64 20 61 74 20 65 76 65 72 79 20  nvoked at every 
ca80: 63 6f 6d 6d 69 74 2e 20 2a 2f 0a 20 20 76 6f 69  commit. */.  voi
ca90: 64 20 2a 70 55 70 64 61 74 65 41 72 67 3b 0a 20  d *pUpdateArg;. 
caa0: 20 76 6f 69 64 20 28 2a 78 55 70 64 61 74 65 43   void (*xUpdateC
cab0: 61 6c 6c 62 61 63 6b 29 28 76 6f 69 64 2a 2c 69  allback)(void*,i
cac0: 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c  nt, const char*,
cad0: 63 6f 6e 73 74 20 63 68 61 72 2a 2c 73 71 6c 69  const char*,sqli
cae0: 74 65 5f 69 6e 74 36 34 29 3b 0a 23 69 66 64 65  te_int64);.#ifde
caf0: 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
cb00: 50 52 45 55 50 44 41 54 45 5f 48 4f 4f 4b 0a 20  PREUPDATE_HOOK. 
cb10: 20 76 6f 69 64 20 2a 70 50 72 65 55 70 64 61 74   void *pPreUpdat
cb20: 65 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 2f  eArg;          /
cb30: 2a 20 46 69 72 73 74 20 61 72 67 75 6d 65 6e 74  * First argument
cb40: 20 74 6f 20 78 50 72 65 55 70 64 61 74 65 43 61   to xPreUpdateCa
cb50: 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 76 6f 69 64  llback */.  void
cb60: 20 28 2a 78 50 72 65 55 70 64 61 74 65 43 61 6c   (*xPreUpdateCal
cb70: 6c 62 61 63 6b 29 28 20 20 20 2f 2a 20 52 65 67  lback)(   /* Reg
cb80: 69 73 74 65 72 65 64 20 75 73 69 6e 67 20 73 71  istered using sq
cb90: 6c 69 74 65 33 5f 70 72 65 75 70 64 61 74 65 5f  lite3_preupdate_
cba0: 68 6f 6f 6b 28 29 20 2a 2f 0a 20 20 20 20 76 6f  hook() */.    vo
cbb0: 69 64 2a 2c 73 71 6c 69 74 65 33 2a 2c 69 6e 74  id*,sqlite3*,int
cbc0: 2c 63 68 61 72 20 63 6f 6e 73 74 2a 2c 63 68 61  ,char const*,cha
cbd0: 72 20 63 6f 6e 73 74 2a 2c 73 71 6c 69 74 65 33  r const*,sqlite3
cbe0: 5f 69 6e 74 36 34 2c 73 71 6c 69 74 65 33 5f 69  _int64,sqlite3_i
cbf0: 6e 74 36 34 0a 20 20 29 3b 0a 20 20 50 72 65 55  nt64.  );.  PreU
cc00: 70 64 61 74 65 20 2a 70 50 72 65 55 70 64 61 74  pdate *pPreUpdat
cc10: 65 3b 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6e  e;        /* Con
cc20: 74 65 78 74 20 66 6f 72 20 61 63 74 69 76 65 20  text for active 
cc30: 70 72 65 2d 75 70 64 61 74 65 20 63 61 6c 6c 62  pre-update callb
cc40: 61 63 6b 20 2a 2f 0a 23 65 6e 64 69 66 20 2f 2a  ack */.#endif /*
cc50: 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 50   SQLITE_ENABLE_P
cc60: 52 45 55 50 44 41 54 45 5f 48 4f 4f 4b 20 2a 2f  REUPDATE_HOOK */
cc70: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
cc80: 4f 4d 49 54 5f 57 41 4c 0a 20 20 69 6e 74 20 28  OMIT_WAL.  int (
cc90: 2a 78 57 61 6c 43 61 6c 6c 62 61 63 6b 29 28 76  *xWalCallback)(v
cca0: 6f 69 64 20 2a 2c 20 73 71 6c 69 74 65 33 20 2a  oid *, sqlite3 *
ccb0: 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20  , const char *, 
ccc0: 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20 2a 70 57  int);.  void *pW
ccd0: 61 6c 41 72 67 3b 0a 23 65 6e 64 69 66 0a 20 20  alArg;.#endif.  
cce0: 76 6f 69 64 28 2a 78 43 6f 6c 6c 4e 65 65 64 65  void(*xCollNeede
ccf0: 64 29 28 76 6f 69 64 2a 2c 73 71 6c 69 74 65 33  d)(void*,sqlite3
cd00: 2a 2c 69 6e 74 20 65 54 65 78 74 52 65 70 2c 63  *,int eTextRep,c
cd10: 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20 20 76  onst char*);.  v
cd20: 6f 69 64 28 2a 78 43 6f 6c 6c 4e 65 65 64 65 64  oid(*xCollNeeded
cd30: 31 36 29 28 76 6f 69 64 2a 2c 73 71 6c 69 74 65  16)(void*,sqlite
cd40: 33 2a 2c 69 6e 74 20 65 54 65 78 74 52 65 70 2c  3*,int eTextRep,
cd50: 63 6f 6e 73 74 20 76 6f 69 64 2a 29 3b 0a 20 20  const void*);.  
cd60: 76 6f 69 64 20 2a 70 43 6f 6c 6c 4e 65 65 64 65  void *pCollNeede
cd70: 64 41 72 67 3b 0a 20 20 73 71 6c 69 74 65 33 5f  dArg;.  sqlite3_
cd80: 76 61 6c 75 65 20 2a 70 45 72 72 3b 20 20 20 20  value *pErr;    
cd90: 20 20 20 20 20 20 2f 2a 20 4d 6f 73 74 20 72 65        /* Most re
cda0: 63 65 6e 74 20 65 72 72 6f 72 20 6d 65 73 73 61  cent error messa
cdb0: 67 65 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b 0a  ge */.  union {.
cdc0: 20 20 20 20 76 6f 6c 61 74 69 6c 65 20 69 6e 74      volatile int
cdd0: 20 69 73 49 6e 74 65 72 72 75 70 74 65 64 3b 20   isInterrupted; 
cde0: 2f 2a 20 54 72 75 65 20 69 66 20 73 71 6c 69 74  /* True if sqlit
cdf0: 65 33 5f 69 6e 74 65 72 72 75 70 74 20 68 61 73  e3_interrupt has
ce00: 20 62 65 65 6e 20 63 61 6c 6c 65 64 20 2a 2f 0a   been called */.
ce10: 20 20 20 20 64 6f 75 62 6c 65 20 6e 6f 74 55 73      double notUs
ce20: 65 64 31 3b 20 20 20 20 20 20 20 20 20 20 20 20  ed1;            
ce30: 2f 2a 20 53 70 61 63 65 72 20 2a 2f 0a 20 20 7d  /* Spacer */.  }
ce40: 20 75 31 3b 0a 20 20 4c 6f 6f 6b 61 73 69 64 65   u1;.  Lookaside
ce50: 20 6c 6f 6f 6b 61 73 69 64 65 3b 20 20 20 20 20   lookaside;     
ce60: 20 20 20 20 20 2f 2a 20 4c 6f 6f 6b 61 73 69 64       /* Lookasid
ce70: 65 20 6d 61 6c 6c 6f 63 20 63 6f 6e 66 69 67 75  e malloc configu
ce80: 72 61 74 69 6f 6e 20 2a 2f 0a 23 69 66 6e 64 65  ration */.#ifnde
ce90: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55  f SQLITE_OMIT_AU
cea0: 54 48 4f 52 49 5a 41 54 49 4f 4e 0a 20 20 73 71  THORIZATION.  sq
ceb0: 6c 69 74 65 33 5f 78 61 75 74 68 20 78 41 75 74  lite3_xauth xAut
cec0: 68 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41  h;          /* A
ced0: 63 63 65 73 73 20 61 75 74 68 6f 72 69 7a 61 74  ccess authorizat
cee0: 69 6f 6e 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a  ion function */.
cef0: 20 20 76 6f 69 64 20 2a 70 41 75 74 68 41 72 67    void *pAuthArg
cf00: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
cf10: 2f 2a 20 31 73 74 20 61 72 67 75 6d 65 6e 74 20  /* 1st argument 
cf20: 74 6f 20 74 68 65 20 61 63 63 65 73 73 20 61 75  to the access au
cf30: 74 68 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23  th function */.#
cf40: 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51  endif.#ifndef SQ
cf50: 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 4f 47 52 45  LITE_OMIT_PROGRE
cf60: 53 53 5f 43 41 4c 4c 42 41 43 4b 0a 20 20 69 6e  SS_CALLBACK.  in
cf70: 74 20 28 2a 78 50 72 6f 67 72 65 73 73 29 28 76  t (*xProgress)(v
cf80: 6f 69 64 20 2a 29 3b 20 20 20 20 20 2f 2a 20 54  oid *);     /* T
cf90: 68 65 20 70 72 6f 67 72 65 73 73 20 63 61 6c 6c  he progress call
cfa0: 62 61 63 6b 20 2a 2f 0a 20 20 76 6f 69 64 20 2a  back */.  void *
cfb0: 70 50 72 6f 67 72 65 73 73 41 72 67 3b 20 20 20  pProgressArg;   
cfc0: 20 20 20 20 20 20 20 20 2f 2a 20 41 72 67 75 6d          /* Argum
cfd0: 65 6e 74 20 74 6f 20 74 68 65 20 70 72 6f 67 72  ent to the progr
cfe0: 65 73 73 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a  ess callback */.
cff0: 20 20 75 6e 73 69 67 6e 65 64 20 6e 50 72 6f 67    unsigned nProg
d000: 72 65 73 73 4f 70 73 3b 20 20 20 20 20 20 20 20  ressOps;        
d010: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6f 70 63  /* Number of opc
d020: 6f 64 65 73 20 66 6f 72 20 70 72 6f 67 72 65 73  odes for progres
d030: 73 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 23 65  s callback */.#e
d040: 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c  ndif.#ifndef SQL
d050: 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
d060: 54 41 42 4c 45 0a 20 20 69 6e 74 20 6e 56 54 72  TABLE.  int nVTr
d070: 61 6e 73 3b 20 20 20 20 20 20 20 20 20 20 20 20  ans;            
d080: 20 20 20 20 20 20 2f 2a 20 41 6c 6c 6f 63 61 74        /* Allocat
d090: 65 64 20 73 69 7a 65 20 6f 66 20 61 56 54 72 61  ed size of aVTra
d0a0: 6e 73 20 2a 2f 0a 20 20 48 61 73 68 20 61 4d 6f  ns */.  Hash aMo
d0b0: 64 75 6c 65 3b 20 20 20 20 20 20 20 20 20 20 20  dule;           
d0c0: 20 20 20 20 20 20 2f 2a 20 70 6f 70 75 6c 61 74        /* populat
d0d0: 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f 63 72  ed by sqlite3_cr
d0e0: 65 61 74 65 5f 6d 6f 64 75 6c 65 28 29 20 2a 2f  eate_module() */
d0f0: 0a 20 20 56 74 61 62 43 74 78 20 2a 70 56 74 61  .  VtabCtx *pVta
d100: 62 43 74 78 3b 20 20 20 20 20 20 20 20 20 20 20  bCtx;           
d110: 20 2f 2a 20 43 6f 6e 74 65 78 74 20 66 6f 72 20   /* Context for 
d120: 61 63 74 69 76 65 20 76 74 61 62 20 63 6f 6e 6e  active vtab conn
d130: 65 63 74 2f 63 72 65 61 74 65 20 2a 2f 0a 20 20  ect/create */.  
d140: 56 54 61 62 6c 65 20 2a 2a 61 56 54 72 61 6e 73  VTable **aVTrans
d150: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
d160: 20 56 69 72 74 75 61 6c 20 74 61 62 6c 65 73 20   Virtual tables 
d170: 77 69 74 68 20 6f 70 65 6e 20 74 72 61 6e 73 61  with open transa
d180: 63 74 69 6f 6e 73 20 2a 2f 0a 20 20 56 54 61 62  ctions */.  VTab
d190: 6c 65 20 2a 70 44 69 73 63 6f 6e 6e 65 63 74 3b  le *pDisconnect;
d1a0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 69 73            /* Dis
d1b0: 63 6f 6e 6e 65 63 74 20 74 68 65 73 65 20 69 6e  connect these in
d1c0: 20 6e 65 78 74 20 73 71 6c 69 74 65 33 5f 70 72   next sqlite3_pr
d1d0: 65 70 61 72 65 28 29 20 2a 2f 0a 23 65 6e 64 69  epare() */.#endi
d1e0: 66 0a 20 20 48 61 73 68 20 61 46 75 6e 63 3b 20  f.  Hash aFunc; 
d1f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d200: 20 20 2f 2a 20 48 61 73 68 20 74 61 62 6c 65 20    /* Hash table 
d210: 6f 66 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 66 75  of connection fu
d220: 6e 63 74 69 6f 6e 73 20 2a 2f 0a 20 20 48 61 73  nctions */.  Has
d230: 68 20 61 43 6f 6c 6c 53 65 71 3b 20 20 20 20 20  h aCollSeq;     
d240: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 6c             /* Al
d250: 6c 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75  l collating sequ
d260: 65 6e 63 65 73 20 2a 2f 0a 20 20 42 75 73 79 48  ences */.  BusyH
d270: 61 6e 64 6c 65 72 20 62 75 73 79 48 61 6e 64 6c  andler busyHandl
d280: 65 72 3b 20 20 20 20 20 20 2f 2a 20 42 75 73 79  er;      /* Busy
d290: 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 44   callback */.  D
d2a0: 62 20 61 44 62 53 74 61 74 69 63 5b 32 5d 3b 20  b aDbStatic[2]; 
d2b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
d2c0: 53 74 61 74 69 63 20 73 70 61 63 65 20 66 6f 72  Static space for
d2d0: 20 74 68 65 20 32 20 64 65 66 61 75 6c 74 20 62   the 2 default b
d2e0: 61 63 6b 65 6e 64 73 20 2a 2f 0a 20 20 53 61 76  ackends */.  Sav
d2f0: 65 70 6f 69 6e 74 20 2a 70 53 61 76 65 70 6f 69  epoint *pSavepoi
d300: 6e 74 3b 20 20 20 20 20 20 20 20 2f 2a 20 4c 69  nt;        /* Li
d310: 73 74 20 6f 66 20 61 63 74 69 76 65 20 73 61 76  st of active sav
d320: 65 70 6f 69 6e 74 73 20 2a 2f 0a 20 20 69 6e 74  epoints */.  int
d330: 20 62 75 73 79 54 69 6d 65 6f 75 74 3b 20 20 20   busyTimeout;   
d340: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 42 75             /* Bu
d350: 73 79 20 68 61 6e 64 6c 65 72 20 74 69 6d 65 6f  sy handler timeo
d360: 75 74 2c 20 69 6e 20 6d 73 65 63 20 2a 2f 0a 20  ut, in msec */. 
d370: 20 69 6e 74 20 6e 53 61 76 65 70 6f 69 6e 74 3b   int nSavepoint;
d380: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
d390: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6e 6f 6e 2d  * Number of non-
d3a0: 74 72 61 6e 73 61 63 74 69 6f 6e 20 73 61 76 65  transaction save
d3b0: 70 6f 69 6e 74 73 20 2a 2f 0a 20 20 69 6e 74 20  points */.  int 
d3c0: 6e 53 74 61 74 65 6d 65 6e 74 3b 20 20 20 20 20  nStatement;     
d3d0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
d3e0: 62 65 72 20 6f 66 20 6e 65 73 74 65 64 20 73 74  ber of nested st
d3f0: 61 74 65 6d 65 6e 74 2d 74 72 61 6e 73 61 63 74  atement-transact
d400: 69 6f 6e 73 20 20 2a 2f 0a 20 20 69 36 34 20 6e  ions  */.  i64 n
d410: 44 65 66 65 72 72 65 64 43 6f 6e 73 3b 20 20 20  DeferredCons;   
d420: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 74 20           /* Net 
d430: 64 65 66 65 72 72 65 64 20 63 6f 6e 73 74 72 61  deferred constra
d440: 69 6e 74 73 20 74 68 69 73 20 74 72 61 6e 73 61  ints this transa
d450: 63 74 69 6f 6e 2e 20 2a 2f 0a 20 20 69 36 34 20  ction. */.  i64 
d460: 6e 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73  nDeferredImmCons
d470: 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 74  ;         /* Net
d480: 20 64 65 66 65 72 72 65 64 20 69 6d 6d 65 64 69   deferred immedi
d490: 61 74 65 20 63 6f 6e 73 74 72 61 69 6e 74 73 20  ate constraints 
d4a0: 2a 2f 0a 20 20 69 6e 74 20 2a 70 6e 42 79 74 65  */.  int *pnByte
d4b0: 73 46 72 65 65 64 3b 20 20 20 20 20 20 20 20 20  sFreed;         
d4c0: 20 20 20 2f 2a 20 49 66 20 6e 6f 74 20 4e 55 4c     /* If not NUL
d4d0: 4c 2c 20 69 6e 63 72 65 6d 65 6e 74 20 74 68 69  L, increment thi
d4e0: 73 20 69 6e 20 44 62 46 72 65 65 28 29 20 2a 2f  s in DbFree() */
d4f0: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45  .#ifdef SQLITE_E
d500: 4e 41 42 4c 45 5f 55 4e 4c 4f 43 4b 5f 4e 4f 54  NABLE_UNLOCK_NOT
d510: 49 46 59 0a 20 20 2f 2a 20 54 68 65 20 66 6f 6c  IFY.  /* The fol
d520: 6c 6f 77 69 6e 67 20 76 61 72 69 61 62 6c 65 73  lowing variables
d530: 20 61 72 65 20 61 6c 6c 20 70 72 6f 74 65 63 74   are all protect
d540: 65 64 20 62 79 20 74 68 65 20 53 54 41 54 49 43  ed by the STATIC
d550: 5f 4d 41 53 54 45 52 0a 20 20 2a 2a 20 6d 75 74  _MASTER.  ** mut
d560: 65 78 2c 20 6e 6f 74 20 62 79 20 73 71 6c 69 74  ex, not by sqlit
d570: 65 33 2e 6d 75 74 65 78 2e 20 54 68 65 79 20 61  e3.mutex. They a
d580: 72 65 20 75 73 65 64 20 62 79 20 63 6f 64 65 20  re used by code 
d590: 69 6e 20 6e 6f 74 69 66 79 2e 63 2e 0a 20 20 2a  in notify.c..  *
d5a0: 2a 0a 20 20 2a 2a 20 57 68 65 6e 20 58 2e 70 55  *.  ** When X.pU
d5b0: 6e 6c 6f 63 6b 43 6f 6e 6e 65 63 74 69 6f 6e 3d  nlockConnection=
d5c0: 3d 59 2c 20 74 68 61 74 20 6d 65 61 6e 73 20 74  =Y, that means t
d5d0: 68 61 74 20 58 20 69 73 20 77 61 69 74 69 6e 67  hat X is waiting
d5e0: 20 66 6f 72 20 59 20 74 6f 0a 20 20 2a 2a 20 75   for Y to.  ** u
d5f0: 6e 6c 6f 63 6b 20 73 6f 20 74 68 61 74 20 69 74  nlock so that it
d600: 20 63 61 6e 20 70 72 6f 63 65 65 64 2e 0a 20 20   can proceed..  
d610: 2a 2a 0a 20 20 2a 2a 20 57 68 65 6e 20 58 2e 70  **.  ** When X.p
d620: 42 6c 6f 63 6b 69 6e 67 43 6f 6e 6e 65 63 74 69  BlockingConnecti
d630: 6f 6e 3d 3d 59 2c 20 74 68 61 74 20 6d 65 61 6e  on==Y, that mean
d640: 73 20 74 68 61 74 20 73 6f 6d 65 74 68 69 6e 67  s that something
d650: 20 74 68 61 74 20 58 20 74 72 69 65 64 0a 20 20   that X tried.  
d660: 2a 2a 20 74 72 69 65 64 20 74 6f 20 64 6f 20 72  ** tried to do r
d670: 65 63 65 6e 74 6c 79 20 66 61 69 6c 65 64 20 77  ecently failed w
d680: 69 74 68 20 61 6e 20 53 51 4c 49 54 45 5f 4c 4f  ith an SQLITE_LO
d690: 43 4b 45 44 20 65 72 72 6f 72 20 64 75 65 20 74  CKED error due t
d6a0: 6f 20 6c 6f 63 6b 73 0a 20 20 2a 2a 20 68 65 6c  o locks.  ** hel
d6b0: 64 20 62 79 20 59 2e 0a 20 20 2a 2f 0a 20 20 73  d by Y..  */.  s
d6c0: 71 6c 69 74 65 33 20 2a 70 42 6c 6f 63 6b 69 6e  qlite3 *pBlockin
d6d0: 67 43 6f 6e 6e 65 63 74 69 6f 6e 3b 20 2f 2a 20  gConnection; /* 
d6e0: 43 6f 6e 6e 65 63 74 69 6f 6e 20 74 68 61 74 20  Connection that 
d6f0: 63 61 75 73 65 64 20 53 51 4c 49 54 45 5f 4c 4f  caused SQLITE_LO
d700: 43 4b 45 44 20 2a 2f 0a 20 20 73 71 6c 69 74 65  CKED */.  sqlite
d710: 33 20 2a 70 55 6e 6c 6f 63 6b 43 6f 6e 6e 65 63  3 *pUnlockConnec
d720: 74 69 6f 6e 3b 20 20 20 20 20 20 20 20 20 20 20  tion;           
d730: 2f 2a 20 43 6f 6e 6e 65 63 74 69 6f 6e 20 74 6f  /* Connection to
d740: 20 77 61 74 63 68 20 66 6f 72 20 75 6e 6c 6f 63   watch for unloc
d750: 6b 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 55 6e  k */.  void *pUn
d760: 6c 6f 63 6b 41 72 67 3b 20 20 20 20 20 20 20 20  lockArg;        
d770: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
d780: 41 72 67 75 6d 65 6e 74 20 74 6f 20 78 55 6e 6c  Argument to xUnl
d790: 6f 63 6b 4e 6f 74 69 66 79 20 2a 2f 0a 20 20 76  ockNotify */.  v
d7a0: 6f 69 64 20 28 2a 78 55 6e 6c 6f 63 6b 4e 6f 74  oid (*xUnlockNot
d7b0: 69 66 79 29 28 76 6f 69 64 20 2a 2a 2c 20 69 6e  ify)(void **, in
d7c0: 74 29 3b 20 20 2f 2a 20 55 6e 6c 6f 63 6b 20 6e  t);  /* Unlock n
d7d0: 6f 74 69 66 79 20 63 61 6c 6c 62 61 63 6b 20 2a  otify callback *
d7e0: 2f 0a 20 20 73 71 6c 69 74 65 33 20 2a 70 4e 65  /.  sqlite3 *pNe
d7f0: 78 74 42 6c 6f 63 6b 65 64 3b 20 20 20 20 20 20  xtBlocked;      
d800: 20 20 2f 2a 20 4e 65 78 74 20 69 6e 20 6c 69 73    /* Next in lis
d810: 74 20 6f 66 20 61 6c 6c 20 62 6c 6f 63 6b 65 64  t of all blocked
d820: 20 63 6f 6e 6e 65 63 74 69 6f 6e 73 20 2a 2f 0a   connections */.
d830: 23 65 6e 64 69 66 0a 23 69 66 64 65 66 20 53 51  #endif.#ifdef SQ
d840: 4c 49 54 45 5f 55 53 45 52 5f 41 55 54 48 45 4e  LITE_USER_AUTHEN
d850: 54 49 43 41 54 49 4f 4e 0a 20 20 73 71 6c 69 74  TICATION.  sqlit
d860: 65 33 5f 75 73 65 72 61 75 74 68 20 61 75 74 68  e3_userauth auth
d870: 3b 20 20 20 20 20 20 20 20 2f 2a 20 55 73 65 72  ;        /* User
d880: 20 61 75 74 68 65 6e 74 69 63 61 74 69 6f 6e 20   authentication 
d890: 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 2a 2f 0a 23  information */.#
d8a0: 65 6e 64 69 66 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  endif.};../*.** 
d8b0: 41 20 6d 61 63 72 6f 20 74 6f 20 64 69 73 63 6f  A macro to disco
d8c0: 76 65 72 20 74 68 65 20 65 6e 63 6f 64 69 6e 67  ver the encoding
d8d0: 20 6f 66 20 61 20 64 61 74 61 62 61 73 65 2e 0a   of a database..
d8e0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 43 48 45 4d  */.#define SCHEM
d8f0: 41 5f 45 4e 43 28 64 62 29 20 28 28 64 62 29 2d  A_ENC(db) ((db)-
d900: 3e 61 44 62 5b 30 5d 2e 70 53 63 68 65 6d 61 2d  >aDb[0].pSchema-
d910: 3e 65 6e 63 29 0a 23 64 65 66 69 6e 65 20 45 4e  >enc).#define EN
d920: 43 28 64 62 29 20 20 20 20 20 20 20 20 28 28 64  C(db)        ((d
d930: 62 29 2d 3e 65 6e 63 29 0a 0a 2f 2a 0a 2a 2a 20  b)->enc)../*.** 
d940: 50 6f 73 73 69 62 6c 65 20 76 61 6c 75 65 73 20  Possible values 
d950: 66 6f 72 20 74 68 65 20 73 71 6c 69 74 65 33 2e  for the sqlite3.
d960: 66 6c 61 67 73 2e 0a 2a 2a 0a 2a 2a 20 56 61 6c  flags..**.** Val
d970: 75 65 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 28  ue constraints (
d980: 65 6e 66 6f 72 63 65 64 20 76 69 61 20 61 73 73  enforced via ass
d990: 65 72 74 28 29 29 3a 0a 2a 2a 20 20 20 20 20 20  ert()):.**      
d9a0: 53 51 4c 49 54 45 5f 46 75 6c 6c 46 53 79 6e 63  SQLITE_FullFSync
d9b0: 20 20 20 20 20 3d 3d 20 50 41 47 45 52 5f 46 55       == PAGER_FU
d9c0: 4c 4c 46 53 59 4e 43 0a 2a 2a 20 20 20 20 20 20  LLFSYNC.**      
d9d0: 53 51 4c 49 54 45 5f 43 6b 70 74 46 75 6c 6c 46  SQLITE_CkptFullF
d9e0: 53 79 6e 63 20 3d 3d 20 50 41 47 45 52 5f 43 4b  Sync == PAGER_CK
d9f0: 50 54 5f 46 55 4c 4c 46 53 59 4e 43 0a 2a 2a 20  PT_FULLFSYNC.** 
da00: 20 20 20 20 20 53 51 4c 49 54 45 5f 43 61 63 68       SQLITE_Cach
da10: 65 53 70 69 6c 6c 20 20 20 20 3d 3d 20 50 41 47  eSpill    == PAG
da20: 45 52 5f 43 41 43 48 45 5f 53 50 49 4c 4c 0a 2a  ER_CACHE_SPILL.*
da30: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
da40: 5f 57 72 69 74 65 53 63 68 65 6d 61 20 20 20 20  _WriteSchema    
da50: 30 78 30 30 30 30 30 30 30 31 20 20 2f 2a 20 4f  0x00000001  /* O
da60: 4b 20 74 6f 20 75 70 64 61 74 65 20 53 51 4c 49  K to update SQLI
da70: 54 45 5f 4d 41 53 54 45 52 20 2a 2f 0a 23 64 65  TE_MASTER */.#de
da80: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4c 65 67 61  fine SQLITE_Lega
da90: 63 79 46 69 6c 65 46 6d 74 20 20 30 78 30 30 30  cyFileFmt  0x000
daa0: 30 30 30 30 32 20 20 2f 2a 20 43 72 65 61 74 65  00002  /* Create
dab0: 20 6e 65 77 20 64 61 74 61 62 61 73 65 73 20 69   new databases i
dac0: 6e 20 66 6f 72 6d 61 74 20 31 20 2a 2f 0a 23 64  n format 1 */.#d
dad0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 75 6c  efine SQLITE_Ful
dae0: 6c 43 6f 6c 4e 61 6d 65 73 20 20 20 30 78 30 30  lColNames   0x00
daf0: 30 30 30 30 30 34 20 20 2f 2a 20 53 68 6f 77 20  000004  /* Show 
db00: 66 75 6c 6c 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65  full column name
db10: 73 20 6f 6e 20 53 45 4c 45 43 54 20 2a 2f 0a 23  s on SELECT */.#
db20: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 75  define SQLITE_Fu
db30: 6c 6c 46 53 79 6e 63 20 20 20 20 20 20 30 78 30  llFSync      0x0
db40: 30 30 30 30 30 30 38 20 20 2f 2a 20 55 73 65 20  0000008  /* Use 
db50: 66 75 6c 6c 20 66 73 79 6e 63 20 6f 6e 20 74 68  full fsync on th
db60: 65 20 62 61 63 6b 65 6e 64 20 2a 2f 0a 23 64 65  e backend */.#de
db70: 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 6b 70 74  fine SQLITE_Ckpt
db80: 46 75 6c 6c 46 53 79 6e 63 20 20 30 78 30 30 30  FullFSync  0x000
db90: 30 30 30 31 30 20 20 2f 2a 20 55 73 65 20 66 75  00010  /* Use fu
dba0: 6c 6c 20 66 73 79 6e 63 20 66 6f 72 20 63 68 65  ll fsync for che
dbb0: 63 6b 70 6f 69 6e 74 20 2a 2f 0a 23 64 65 66 69  ckpoint */.#defi
dbc0: 6e 65 20 53 51 4c 49 54 45 5f 43 61 63 68 65 53  ne SQLITE_CacheS
dbd0: 70 69 6c 6c 20 20 20 20 20 30 78 30 30 30 30 30  pill     0x00000
dbe0: 30 32 30 20 20 2f 2a 20 4f 4b 20 74 6f 20 73 70  020  /* OK to sp
dbf0: 69 6c 6c 20 70 61 67 65 72 20 63 61 63 68 65 20  ill pager cache 
dc00: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
dc10: 45 5f 53 68 6f 72 74 43 6f 6c 4e 61 6d 65 73 20  E_ShortColNames 
dc20: 20 30 78 30 30 30 30 30 30 34 30 20 20 2f 2a 20   0x00000040  /* 
dc30: 53 68 6f 77 20 73 68 6f 72 74 20 63 6f 6c 75 6d  Show short colum
dc40: 6e 73 20 6e 61 6d 65 73 20 2a 2f 0a 23 64 65 66  ns names */.#def
dc50: 69 6e 65 20 53 51 4c 49 54 45 5f 43 6f 75 6e 74  ine SQLITE_Count
dc60: 52 6f 77 73 20 20 20 20 20 20 30 78 30 30 30 30  Rows      0x0000
dc70: 30 30 38 30 20 20 2f 2a 20 43 6f 75 6e 74 20 72  0080  /* Count r
dc80: 6f 77 73 20 63 68 61 6e 67 65 64 20 62 79 20 49  ows changed by I
dc90: 4e 53 45 52 54 2c 20 2a 2f 0a 20 20 20 20 20 20  NSERT, */.      
dca0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dcb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dcc0: 20 20 20 20 2f 2a 20 20 20 44 45 4c 45 54 45 2c      /*   DELETE,
dcd0: 20 6f 72 20 55 50 44 41 54 45 20 61 6e 64 20 72   or UPDATE and r
dce0: 65 74 75 72 6e 20 2a 2f 0a 20 20 20 20 20 20 20  eturn */.       
dcf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dd00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dd10: 20 20 20 2f 2a 20 20 20 74 68 65 20 63 6f 75 6e     /*   the coun
dd20: 74 20 75 73 69 6e 67 20 61 20 63 61 6c 6c 62 61  t using a callba
dd30: 63 6b 2e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ck. */.#define S
dd40: 51 4c 49 54 45 5f 4e 75 6c 6c 43 61 6c 6c 62 61  QLITE_NullCallba
dd50: 63 6b 20 20 20 30 78 30 30 30 30 30 31 30 30 20  ck   0x00000100 
dd60: 20 2f 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20 63   /* Invoke the c
dd70: 61 6c 6c 62 61 63 6b 20 6f 6e 63 65 20 69 66 20  allback once if 
dd80: 74 68 65 20 2a 2f 0a 20 20 20 20 20 20 20 20 20  the */.         
dd90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dda0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ddb0: 20 2f 2a 20 20 20 72 65 73 75 6c 74 20 73 65 74   /*   result set
ddc0: 20 69 73 20 65 6d 70 74 79 20 2a 2f 0a 23 64 65   is empty */.#de
ddd0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 49 67 6e 6f  fine SQLITE_Igno
dde0: 72 65 43 68 65 63 6b 73 20 20 20 30 78 30 30 30  reChecks   0x000
ddf0: 30 30 32 30 30 20 20 2f 2a 20 44 6f 20 6e 6f 74  00200  /* Do not
de00: 20 65 6e 66 6f 72 63 65 20 63 68 65 63 6b 20 63   enforce check c
de10: 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f 0a 23 64  onstraints */.#d
de20: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 52 65 61  efine SQLITE_Rea
de30: 64 55 6e 63 6f 6d 6d 69 74 20 20 20 30 78 30 30  dUncommit   0x00
de40: 30 30 30 34 30 30 20 20 2f 2a 20 52 45 41 44 20  000400  /* READ 
de50: 55 4e 43 4f 4d 4d 49 54 54 45 44 20 69 6e 20 73  UNCOMMITTED in s
de60: 68 61 72 65 64 2d 63 61 63 68 65 20 2a 2f 0a 23  hared-cache */.#
de70: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e 6f  define SQLITE_No
de80: 43 6b 70 74 4f 6e 43 6c 6f 73 65 20 20 30 78 30  CkptOnClose  0x0
de90: 30 30 30 30 38 30 30 20 20 2f 2a 20 4e 6f 20 63  0000800  /* No c
dea0: 68 65 63 6b 70 6f 69 6e 74 20 6f 6e 20 63 6c 6f  heckpoint on clo
deb0: 73 65 28 29 2f 44 45 54 41 43 48 20 2a 2f 0a 23  se()/DETACH */.#
dec0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 52 65  define SQLITE_Re
ded0: 76 65 72 73 65 4f 72 64 65 72 20 20 20 30 78 30  verseOrder   0x0
dee0: 30 30 30 31 30 30 30 20 20 2f 2a 20 52 65 76 65  0001000  /* Reve
def0: 72 73 65 20 75 6e 6f 72 64 65 72 65 64 20 53 45  rse unordered SE
df00: 4c 45 43 54 73 20 2a 2f 0a 23 64 65 66 69 6e 65  LECTs */.#define
df10: 20 53 51 4c 49 54 45 5f 52 65 63 54 72 69 67 67   SQLITE_RecTrigg
df20: 65 72 73 20 20 20 20 30 78 30 30 30 30 32 30 30  ers    0x0000200
df30: 30 20 20 2f 2a 20 45 6e 61 62 6c 65 20 72 65 63  0  /* Enable rec
df40: 75 72 73 69 76 65 20 74 72 69 67 67 65 72 73 20  ursive triggers 
df50: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
df60: 45 5f 46 6f 72 65 69 67 6e 4b 65 79 73 20 20 20  E_ForeignKeys   
df70: 20 30 78 30 30 30 30 34 30 30 30 20 20 2f 2a 20   0x00004000  /* 
df80: 45 6e 66 6f 72 63 65 20 66 6f 72 65 69 67 6e 20  Enforce foreign 
df90: 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 73 20  key constraints 
dfa0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
dfb0: 54 45 5f 41 75 74 6f 49 6e 64 65 78 20 20 20 20  TE_AutoIndex    
dfc0: 20 20 30 78 30 30 30 30 38 30 30 30 20 20 2f 2a    0x00008000  /*
dfd0: 20 45 6e 61 62 6c 65 20 61 75 74 6f 6d 61 74 69   Enable automati
dfe0: 63 20 69 6e 64 65 78 65 73 20 2a 2f 0a 23 64 65  c indexes */.#de
dff0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4c 6f 61 64  fine SQLITE_Load
e000: 45 78 74 65 6e 73 69 6f 6e 20 20 30 78 30 30 30  Extension  0x000
e010: 31 30 30 30 30 20 20 2f 2a 20 45 6e 61 62 6c 65  10000  /* Enable
e020: 20 6c 6f 61 64 5f 65 78 74 65 6e 73 69 6f 6e 20   load_extension 
e030: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
e040: 45 5f 4c 6f 61 64 45 78 74 46 75 6e 63 20 20 20  E_LoadExtFunc   
e050: 20 30 78 30 30 30 32 30 30 30 30 20 20 2f 2a 20   0x00020000  /* 
e060: 45 6e 61 62 6c 65 20 6c 6f 61 64 5f 65 78 74 65  Enable load_exte
e070: 6e 73 69 6f 6e 28 29 20 53 51 4c 20 66 75 6e 63  nsion() SQL func
e080: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
e090: 54 45 5f 45 6e 61 62 6c 65 54 72 69 67 67 65 72  TE_EnableTrigger
e0a0: 20 20 30 78 30 30 30 34 30 30 30 30 20 20 2f 2a    0x00040000  /*
e0b0: 20 54 72 75 65 20 74 6f 20 65 6e 61 62 6c 65 20   True to enable 
e0c0: 74 72 69 67 67 65 72 73 20 2a 2f 0a 23 64 65 66  triggers */.#def
e0d0: 69 6e 65 20 53 51 4c 49 54 45 5f 44 65 66 65 72  ine SQLITE_Defer
e0e0: 46 4b 73 20 20 20 20 20 20 20 30 78 30 30 30 38  FKs       0x0008
e0f0: 30 30 30 30 20 20 2f 2a 20 44 65 66 65 72 20 61  0000  /* Defer a
e100: 6c 6c 20 46 4b 20 63 6f 6e 73 74 72 61 69 6e 74  ll FK constraint
e110: 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  s */.#define SQL
e120: 49 54 45 5f 51 75 65 72 79 4f 6e 6c 79 20 20 20  ITE_QueryOnly   
e130: 20 20 20 30 78 30 30 31 30 30 30 30 30 20 20 2f     0x00100000  /
e140: 2a 20 44 69 73 61 62 6c 65 20 64 61 74 61 62 61  * Disable databa
e150: 73 65 20 63 68 61 6e 67 65 73 20 2a 2f 0a 23 64  se changes */.#d
e160: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 65 6c  efine SQLITE_Cel
e170: 6c 53 69 7a 65 43 6b 20 20 20 20 20 30 78 30 30  lSizeCk     0x00
e180: 32 30 30 30 30 30 20 20 2f 2a 20 43 68 65 63 6b  200000  /* Check
e190: 20 62 74 72 65 65 20 63 65 6c 6c 20 73 69 7a 65   btree cell size
e1a0: 73 20 6f 6e 20 6c 6f 61 64 20 2a 2f 0a 23 64 65  s on load */.#de
e1b0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 74 73 33  fine SQLITE_Fts3
e1c0: 54 6f 6b 65 6e 69 7a 65 72 20 20 30 78 30 30 34  Tokenizer  0x004
e1d0: 30 30 30 30 30 20 20 2f 2a 20 45 6e 61 62 6c 65  00000  /* Enable
e1e0: 20 66 74 73 33 5f 74 6f 6b 65 6e 69 7a 65 72 28   fts3_tokenizer(
e1f0: 32 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  2) */.#define SQ
e200: 4c 49 54 45 5f 45 6e 61 62 6c 65 51 50 53 47 20  LITE_EnableQPSG 
e210: 20 20 20 20 30 78 30 30 38 30 30 30 30 30 20 20      0x00800000  
e220: 2f 2a 20 51 75 65 72 79 20 50 6c 61 6e 6e 65 72  /* Query Planner
e230: 20 53 74 61 62 69 6c 69 74 79 20 47 75 61 72 61   Stability Guara
e240: 6e 74 65 65 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ntee*/.#define S
e250: 51 4c 49 54 45 5f 54 72 69 67 67 65 72 45 51 50  QLITE_TriggerEQP
e260: 20 20 20 20 20 30 78 30 31 30 30 30 30 30 30 20       0x01000000 
e270: 20 2f 2a 20 53 68 6f 77 20 74 72 69 67 67 65 72   /* Show trigger
e280: 20 45 58 50 4c 41 49 4e 20 51 55 45 52 59 20 50   EXPLAIN QUERY P
e290: 4c 41 4e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  LAN */.#define S
e2a0: 51 4c 49 54 45 5f 52 65 73 65 74 44 61 74 61 62  QLITE_ResetDatab
e2b0: 61 73 65 20 20 30 78 30 32 30 30 30 30 30 30 20  ase  0x02000000 
e2c0: 20 2f 2a 20 52 65 73 65 74 20 74 68 65 20 64 61   /* Reset the da
e2d0: 74 61 62 61 73 65 20 2a 2f 0a 0a 2f 2a 20 46 6c  tabase */../* Fl
e2e0: 61 67 73 20 75 73 65 64 20 6f 6e 6c 79 20 69 66  ags used only if
e2f0: 20 64 65 62 75 67 67 69 6e 67 20 2a 2f 0a 23 69   debugging */.#i
e300: 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55  fdef SQLITE_DEBU
e310: 47 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  G.#define SQLITE
e320: 5f 53 71 6c 54 72 61 63 65 20 20 20 20 20 20 20  _SqlTrace       
e330: 30 78 30 38 30 30 30 30 30 30 20 20 2f 2a 20 44  0x08000000  /* D
e340: 65 62 75 67 20 70 72 69 6e 74 20 53 51 4c 20 61  ebug print SQL a
e350: 73 20 69 74 20 65 78 65 63 75 74 65 73 20 2a 2f  s it executes */
e360: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
e370: 56 64 62 65 4c 69 73 74 69 6e 67 20 20 20 20 30  VdbeListing    0
e380: 78 31 30 30 30 30 30 30 30 20 20 2f 2a 20 44 65  x10000000  /* De
e390: 62 75 67 20 6c 69 73 74 69 6e 67 73 20 6f 66 20  bug listings of 
e3a0: 56 44 42 45 20 70 72 6f 67 72 61 6d 73 20 2a 2f  VDBE programs */
e3b0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
e3c0: 56 64 62 65 54 72 61 63 65 20 20 20 20 20 20 30  VdbeTrace      0
e3d0: 78 32 30 30 30 30 30 30 30 20 20 2f 2a 20 54 72  x20000000  /* Tr
e3e0: 75 65 20 74 6f 20 74 72 61 63 65 20 56 44 42 45  ue to trace VDBE
e3f0: 20 65 78 65 63 75 74 69 6f 6e 20 2a 2f 0a 23 64   execution */.#d
e400: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 56 64 62  efine SQLITE_Vdb
e410: 65 41 64 64 6f 70 54 72 61 63 65 20 30 78 34 30  eAddopTrace 0x40
e420: 30 30 30 30 30 30 20 20 2f 2a 20 54 72 61 63 65  000000  /* Trace
e430: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
e440: 70 28 29 20 63 61 6c 6c 73 20 2a 2f 0a 23 64 65  p() calls */.#de
e450: 66 69 6e 65 20 53 51 4c 49 54 45 5f 56 64 62 65  fine SQLITE_Vdbe
e460: 45 51 50 20 20 20 20 20 20 20 20 30 78 38 30 30  EQP        0x800
e470: 30 30 30 30 30 20 20 2f 2a 20 44 65 62 75 67 20  00000  /* Debug 
e480: 45 58 50 4c 41 49 4e 20 51 55 45 52 59 20 50 4c  EXPLAIN QUERY PL
e490: 41 4e 20 2a 2f 0a 23 65 6e 64 69 66 0a 0a 2f 2a  AN */.#endif../*
e4a0: 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75  .** Allowed valu
e4b0: 65 73 20 66 6f 72 20 73 71 6c 69 74 65 33 2e 6d  es for sqlite3.m
e4c0: 44 62 46 6c 61 67 73 0a 2a 2f 0a 23 64 65 66 69  DbFlags.*/.#defi
e4d0: 6e 65 20 44 42 46 4c 41 47 5f 53 63 68 65 6d 61  ne DBFLAG_Schema
e4e0: 43 68 61 6e 67 65 20 20 20 30 78 30 30 30 31 20  Change   0x0001 
e4f0: 20 2f 2a 20 55 6e 63 6f 6d 6d 69 74 74 65 64 20   /* Uncommitted 
e500: 48 61 73 68 20 74 61 62 6c 65 20 63 68 61 6e 67  Hash table chang
e510: 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 44 42  es */.#define DB
e520: 46 4c 41 47 5f 50 72 65 66 65 72 42 75 69 6c 74  FLAG_PreferBuilt
e530: 69 6e 20 20 30 78 30 30 30 32 20 20 2f 2a 20 50  in  0x0002  /* P
e540: 72 65 66 65 72 65 6e 63 65 20 74 6f 20 62 75 69  reference to bui
e550: 6c 74 2d 69 6e 20 66 75 6e 63 73 20 2a 2f 0a 23  lt-in funcs */.#
e560: 64 65 66 69 6e 65 20 44 42 46 4c 41 47 5f 56 61  define DBFLAG_Va
e570: 63 75 75 6d 20 20 20 20 20 20 20 20 20 30 78 30  cuum         0x0
e580: 30 30 34 20 20 2f 2a 20 43 75 72 72 65 6e 74 6c  004  /* Currentl
e590: 79 20 69 6e 20 61 20 56 41 43 55 55 4d 20 2a 2f  y in a VACUUM */
e5a0: 0a 23 64 65 66 69 6e 65 20 44 42 46 4c 41 47 5f  .#define DBFLAG_
e5b0: 53 63 68 65 6d 61 4b 6e 6f 77 6e 4f 6b 20 20 30  SchemaKnownOk  0
e5c0: 78 30 30 30 38 20 20 2f 2a 20 53 63 68 65 6d 61  x0008  /* Schema
e5d0: 20 69 73 20 6b 6e 6f 77 6e 20 74 6f 20 62 65 20   is known to be 
e5e0: 76 61 6c 69 64 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20  valid */../*.** 
e5f0: 42 69 74 73 20 6f 66 20 74 68 65 20 73 71 6c 69  Bits of the sqli
e600: 74 65 33 2e 64 62 4f 70 74 46 6c 61 67 73 20 66  te3.dbOptFlags f
e610: 69 65 6c 64 20 74 68 61 74 20 61 72 65 20 75 73  ield that are us
e620: 65 64 20 62 79 20 74 68 65 0a 2a 2a 20 73 71 6c  ed by the.** sql
e630: 69 74 65 33 5f 74 65 73 74 5f 63 6f 6e 74 72 6f  ite3_test_contro
e640: 6c 28 53 51 4c 49 54 45 5f 54 45 53 54 43 54 52  l(SQLITE_TESTCTR
e650: 4c 5f 4f 50 54 49 4d 49 5a 41 54 49 4f 4e 53 2c  L_OPTIMIZATIONS,
e660: 2e 2e 2e 29 20 69 6e 74 65 72 66 61 63 65 20 74  ...) interface t
e670: 6f 0a 2a 2a 20 73 65 6c 65 63 74 69 76 65 6c 79  o.** selectively
e680: 20 64 69 73 61 62 6c 65 20 76 61 72 69 6f 75 73   disable various
e690: 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73 2e 0a   optimizations..
e6a0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
e6b0: 45 5f 51 75 65 72 79 46 6c 61 74 74 65 6e 65 72  E_QueryFlattener
e6c0: 20 30 78 30 30 30 31 20 20 20 2f 2a 20 51 75 65   0x0001   /* Que
e6d0: 72 79 20 66 6c 61 74 74 65 6e 69 6e 67 20 2a 2f  ry flattening */
e6e0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
e6f0: 43 6f 6c 75 6d 6e 43 61 63 68 65 20 20 20 20 30  ColumnCache    0
e700: 78 30 30 30 32 20 20 20 2f 2a 20 43 6f 6c 75 6d  x0002   /* Colum
e710: 6e 20 63 61 63 68 65 20 2a 2f 0a 23 64 65 66 69  n cache */.#defi
e720: 6e 65 20 53 51 4c 49 54 45 5f 47 72 6f 75 70 42  ne SQLITE_GroupB
e730: 79 4f 72 64 65 72 20 20 20 30 78 30 30 30 34 20  yOrder   0x0004 
e740: 20 20 2f 2a 20 47 52 4f 55 50 42 59 20 63 6f 76    /* GROUPBY cov
e750: 65 72 20 6f 66 20 4f 52 44 45 52 42 59 20 2a 2f  er of ORDERBY */
e760: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
e770: 46 61 63 74 6f 72 4f 75 74 43 6f 6e 73 74 20 30  FactorOutConst 0
e780: 78 30 30 30 38 20 20 20 2f 2a 20 43 6f 6e 73 74  x0008   /* Const
e790: 61 6e 74 20 66 61 63 74 6f 72 69 6e 67 20 2a 2f  ant factoring */
e7a0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
e7b0: 44 69 73 74 69 6e 63 74 4f 70 74 20 20 20 20 30  DistinctOpt    0
e7c0: 78 30 30 31 30 20 20 20 2f 2a 20 44 49 53 54 49  x0010   /* DISTI
e7d0: 4e 43 54 20 75 73 69 6e 67 20 69 6e 64 65 78 65  NCT using indexe
e7e0: 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  s */.#define SQL
e7f0: 49 54 45 5f 43 6f 76 65 72 49 64 78 53 63 61 6e  ITE_CoverIdxScan
e800: 20 20 20 30 78 30 30 32 30 20 20 20 2f 2a 20 43     0x0020   /* C
e810: 6f 76 65 72 69 6e 67 20 69 6e 64 65 78 20 73 63  overing index sc
e820: 61 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ans */.#define S
e830: 51 4c 49 54 45 5f 4f 72 64 65 72 42 79 49 64 78  QLITE_OrderByIdx
e840: 4a 6f 69 6e 20 30 78 30 30 34 30 20 20 20 2f 2a  Join 0x0040   /*
e850: 20 4f 52 44 45 52 20 42 59 20 6f 66 20 6a 6f 69   ORDER BY of joi
e860: 6e 73 20 76 69 61 20 69 6e 64 65 78 20 2a 2f 0a  ns via index */.
e870: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 54  #define SQLITE_T
e880: 72 61 6e 73 69 74 69 76 65 20 20 20 20 20 30 78  ransitive     0x
e890: 30 30 38 30 20 20 20 2f 2a 20 54 72 61 6e 73 69  0080   /* Transi
e8a0: 74 69 76 65 20 63 6f 6e 73 74 72 61 69 6e 74 73  tive constraints
e8b0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
e8c0: 54 45 5f 4f 6d 69 74 4e 6f 6f 70 4a 6f 69 6e 20  TE_OmitNoopJoin 
e8d0: 20 20 30 78 30 31 30 30 20 20 20 2f 2a 20 4f 6d    0x0100   /* Om
e8e0: 69 74 20 75 6e 75 73 65 64 20 74 61 62 6c 65 73  it unused tables
e8f0: 20 69 6e 20 6a 6f 69 6e 73 20 2a 2f 0a 23 64 65   in joins */.#de
e900: 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 6f 75 6e  fine SQLITE_Coun
e910: 74 4f 66 56 69 65 77 20 20 20 20 30 78 30 32 30  tOfView    0x020
e920: 30 20 20 20 2f 2a 20 54 68 65 20 63 6f 75 6e 74  0   /* The count
e930: 2d 6f 66 2d 76 69 65 77 20 6f 70 74 69 6d 69 7a  -of-view optimiz
e940: 61 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65  ation */.#define
e950: 20 53 51 4c 49 54 45 5f 43 75 72 73 6f 72 48 69   SQLITE_CursorHi
e960: 6e 74 73 20 20 20 20 30 78 30 34 30 30 20 20 20  nts    0x0400   
e970: 2f 2a 20 41 64 64 20 4f 50 5f 43 75 72 73 6f 72  /* Add OP_Cursor
e980: 48 69 6e 74 20 6f 70 63 6f 64 65 73 20 2a 2f 0a  Hint opcodes */.
e990: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53  #define SQLITE_S
e9a0: 74 61 74 33 34 20 20 20 20 20 20 20 20 20 30 78  tat34         0x
e9b0: 30 38 30 30 20 20 20 2f 2a 20 55 73 65 20 53 54  0800   /* Use ST
e9c0: 41 54 33 20 6f 72 20 53 54 41 54 34 20 64 61 74  AT3 or STAT4 dat
e9d0: 61 20 2a 2f 0a 20 20 20 2f 2a 20 54 48 33 20 65  a */.   /* TH3 e
e9e0: 78 70 65 63 74 73 20 74 68 65 20 53 74 61 74 33  xpects the Stat3
e9f0: 34 20 20 5e 5e 5e 5e 5e 5e 20 76 61 6c 75 65 20  4  ^^^^^^ value 
ea00: 74 6f 20 62 65 20 30 78 30 38 30 30 2e 20 20 44  to be 0x0800.  D
ea10: 6f 6e 27 74 20 63 68 61 6e 67 65 20 69 74 20 2a  on't change it *
ea20: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
ea30: 5f 50 75 73 68 44 6f 77 6e 20 20 20 20 20 20 20  _PushDown       
ea40: 30 78 31 30 30 30 20 20 20 2f 2a 20 54 68 65 20  0x1000   /* The 
ea50: 70 75 73 68 2d 64 6f 77 6e 20 6f 70 74 69 6d 69  push-down optimi
ea60: 7a 61 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e  zation */.#defin
ea70: 65 20 53 51 4c 49 54 45 5f 53 69 6d 70 6c 69 66  e SQLITE_Simplif
ea80: 79 4a 6f 69 6e 20 20 20 30 78 32 30 30 30 20 20  yJoin   0x2000  
ea90: 20 2f 2a 20 43 6f 6e 76 65 72 74 20 4c 45 46 54   /* Convert LEFT
eaa0: 20 4a 4f 49 4e 20 74 6f 20 4a 4f 49 4e 20 2a 2f   JOIN to JOIN */
eab0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
eac0: 41 6c 6c 4f 70 74 73 20 20 20 20 20 20 20 20 30  AllOpts        0
ead0: 78 66 66 66 66 20 20 20 2f 2a 20 41 6c 6c 20 6f  xffff   /* All o
eae0: 70 74 69 6d 69 7a 61 74 69 6f 6e 73 20 2a 2f 0a  ptimizations */.
eaf0: 0a 2f 2a 0a 2a 2a 20 4d 61 63 72 6f 73 20 66 6f  ./*.** Macros fo
eb00: 72 20 74 65 73 74 69 6e 67 20 77 68 65 74 68 65  r testing whethe
eb10: 72 20 6f 72 20 6e 6f 74 20 6f 70 74 69 6d 69 7a  r or not optimiz
eb20: 61 74 69 6f 6e 73 20 61 72 65 20 65 6e 61 62 6c  ations are enabl
eb30: 65 64 20 6f 72 20 64 69 73 61 62 6c 65 64 2e 0a  ed or disabled..
eb40: 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 70 74 69 6d  */.#define Optim
eb50: 69 7a 61 74 69 6f 6e 44 69 73 61 62 6c 65 64 28  izationDisabled(
eb60: 64 62 2c 20 6d 61 73 6b 29 20 20 28 28 28 64 62  db, mask)  (((db
eb70: 29 2d 3e 64 62 4f 70 74 46 6c 61 67 73 26 28 6d  )->dbOptFlags&(m
eb80: 61 73 6b 29 29 21 3d 30 29 0a 23 64 65 66 69 6e  ask))!=0).#defin
eb90: 65 20 4f 70 74 69 6d 69 7a 61 74 69 6f 6e 45 6e  e OptimizationEn
eba0: 61 62 6c 65 64 28 64 62 2c 20 6d 61 73 6b 29 20  abled(db, mask) 
ebb0: 20 20 28 28 28 64 62 29 2d 3e 64 62 4f 70 74 46    (((db)->dbOptF
ebc0: 6c 61 67 73 26 28 6d 61 73 6b 29 29 3d 3d 30 29  lags&(mask))==0)
ebd0: 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74  ../*.** Return t
ebe0: 72 75 65 20 69 66 20 69 74 20 4f 4b 20 74 6f 20  rue if it OK to 
ebf0: 66 61 63 74 6f 72 20 63 6f 6e 73 74 61 6e 74 20  factor constant 
ec00: 65 78 70 72 65 73 73 69 6f 6e 73 20 69 6e 74 6f  expressions into
ec10: 20 74 68 65 20 69 6e 69 74 69 61 6c 69 7a 61 74   the initializat
ec20: 69 6f 6e 0a 2a 2a 20 63 6f 64 65 2e 20 54 68 65  ion.** code. The
ec30: 20 61 72 67 75 6d 65 6e 74 20 69 73 20 61 20 50   argument is a P
ec40: 61 72 73 65 20 6f 62 6a 65 63 74 20 66 6f 72 20  arse object for 
ec50: 74 68 65 20 63 6f 64 65 20 67 65 6e 65 72 61 74  the code generat
ec60: 6f 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 43  or..*/.#define C
ec70: 6f 6e 73 74 46 61 63 74 6f 72 4f 6b 28 50 29 20  onstFactorOk(P) 
ec80: 28 28 50 29 2d 3e 6f 6b 43 6f 6e 73 74 46 61 63  ((P)->okConstFac
ec90: 74 6f 72 29 0a 0a 2f 2a 0a 2a 2a 20 50 6f 73 73  tor)../*.** Poss
eca0: 69 62 6c 65 20 76 61 6c 75 65 73 20 66 6f 72 20  ible values for 
ecb0: 74 68 65 20 73 71 6c 69 74 65 2e 6d 61 67 69 63  the sqlite.magic
ecc0: 20 66 69 65 6c 64 2e 0a 2a 2a 20 54 68 65 20 6e   field..** The n
ecd0: 75 6d 62 65 72 73 20 61 72 65 20 6f 62 74 61 69  umbers are obtai
ece0: 6e 65 64 20 61 74 20 72 61 6e 64 6f 6d 20 61 6e  ned at random an
ecf0: 64 20 68 61 76 65 20 6e 6f 20 73 70 65 63 69 61  d have no specia
ed00: 6c 20 6d 65 61 6e 69 6e 67 2c 20 6f 74 68 65 72  l meaning, other
ed10: 0a 2a 2a 20 74 68 61 6e 20 62 65 69 6e 67 20 64  .** than being d
ed20: 69 73 74 69 6e 63 74 20 66 72 6f 6d 20 6f 6e 65  istinct from one
ed30: 20 61 6e 6f 74 68 65 72 2e 0a 2a 2f 0a 23 64 65   another..*/.#de
ed40: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47 49  fine SQLITE_MAGI
ed50: 43 5f 4f 50 45 4e 20 20 20 20 20 30 78 61 30 32  C_OPEN     0xa02
ed60: 39 61 36 39 37 20 20 2f 2a 20 44 61 74 61 62 61  9a697  /* Databa
ed70: 73 65 20 69 73 20 6f 70 65 6e 20 2a 2f 0a 23 64  se is open */.#d
ed80: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47  efine SQLITE_MAG
ed90: 49 43 5f 43 4c 4f 53 45 44 20 20 20 30 78 39 66  IC_CLOSED   0x9f
eda0: 33 63 32 64 33 33 20 20 2f 2a 20 44 61 74 61 62  3c2d33  /* Datab
edb0: 61 73 65 20 69 73 20 63 6c 6f 73 65 64 20 2a 2f  ase is closed */
edc0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
edd0: 4d 41 47 49 43 5f 53 49 43 4b 20 20 20 20 20 30  MAGIC_SICK     0
ede0: 78 34 62 37 37 31 32 39 30 20 20 2f 2a 20 45 72  x4b771290  /* Er
edf0: 72 6f 72 20 61 6e 64 20 61 77 61 69 74 69 6e 67  ror and awaiting
ee00: 20 63 6c 6f 73 65 20 2a 2f 0a 23 64 65 66 69 6e   close */.#defin
ee10: 65 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 42  e SQLITE_MAGIC_B
ee20: 55 53 59 20 20 20 20 20 30 78 66 30 33 62 37 39  USY     0xf03b79
ee30: 30 36 20 20 2f 2a 20 44 61 74 61 62 61 73 65 20  06  /* Database 
ee40: 63 75 72 72 65 6e 74 6c 79 20 69 6e 20 75 73 65  currently in use
ee50: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
ee60: 54 45 5f 4d 41 47 49 43 5f 45 52 52 4f 52 20 20  TE_MAGIC_ERROR  
ee70: 20 20 30 78 62 35 33 35 37 39 33 30 20 20 2f 2a    0xb5357930  /*
ee80: 20 41 6e 20 53 51 4c 49 54 45 5f 4d 49 53 55 53   An SQLITE_MISUS
ee90: 45 20 65 72 72 6f 72 20 6f 63 63 75 72 72 65 64  E error occurred
eea0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
eeb0: 54 45 5f 4d 41 47 49 43 5f 5a 4f 4d 42 49 45 20  TE_MAGIC_ZOMBIE 
eec0: 20 20 30 78 36 34 63 66 66 63 37 66 20 20 2f 2a    0x64cffc7f  /*
eed0: 20 43 6c 6f 73 65 20 77 69 74 68 20 6c 61 73 74   Close with last
eee0: 20 73 74 61 74 65 6d 65 6e 74 20 63 6c 6f 73 65   statement close
eef0: 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20   */../*.** Each 
ef00: 53 51 4c 20 66 75 6e 63 74 69 6f 6e 20 69 73 20  SQL function is 
ef10: 64 65 66 69 6e 65 64 20 62 79 20 61 6e 20 69 6e  defined by an in
ef20: 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f  stance of the fo
ef30: 6c 6c 6f 77 69 6e 67 0a 2a 2a 20 73 74 72 75 63  llowing.** struc
ef40: 74 75 72 65 2e 20 20 46 6f 72 20 67 6c 6f 62 61  ture.  For globa
ef50: 6c 20 62 75 69 6c 74 2d 69 6e 20 66 75 6e 63 74  l built-in funct
ef60: 69 6f 6e 73 20 28 65 78 3a 20 73 75 62 73 74 72  ions (ex: substr
ef70: 28 29 2c 20 6d 61 78 28 29 2c 20 63 6f 75 6e 74  (), max(), count
ef80: 28 29 29 0a 2a 2a 20 61 20 70 6f 69 6e 74 65 72  ()).** a pointer
ef90: 20 74 6f 20 74 68 69 73 20 73 74 72 75 63 74 75   to this structu
efa0: 72 65 20 69 73 20 68 65 6c 64 20 69 6e 20 74 68  re is held in th
efb0: 65 20 73 71 6c 69 74 65 33 42 75 69 6c 74 69 6e  e sqlite3Builtin
efc0: 46 75 6e 63 74 69 6f 6e 73 20 6f 62 6a 65 63 74  Functions object
efd0: 2e 0a 2a 2a 20 46 6f 72 20 70 65 72 2d 63 6f 6e  ..** For per-con
efe0: 6e 65 63 74 69 6f 6e 20 61 70 70 6c 69 63 61 74  nection applicat
eff0: 69 6f 6e 2d 64 65 66 69 6e 65 64 20 66 75 6e 63  ion-defined func
f000: 74 69 6f 6e 73 2c 20 61 20 70 6f 69 6e 74 65 72  tions, a pointer
f010: 20 74 6f 20 74 68 69 73 0a 2a 2a 20 73 74 72 75   to this.** stru
f020: 63 74 75 72 65 20 69 73 20 68 65 6c 64 20 69 6e  cture is held in
f030: 20 74 68 65 20 64 62 2d 3e 61 48 61 73 68 20 68   the db->aHash h
f040: 61 73 68 20 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a  ash table..**.**
f050: 20 54 68 65 20 75 2e 70 48 61 73 68 20 66 69 65   The u.pHash fie
f060: 6c 64 20 69 73 20 75 73 65 64 20 62 79 20 74 68  ld is used by th
f070: 65 20 67 6c 6f 62 61 6c 20 62 75 69 6c 74 2d 69  e global built-i
f080: 6e 73 2e 20 20 54 68 65 20 75 2e 70 44 65 73 74  ns.  The u.pDest
f090: 72 75 63 74 6f 72 0a 2a 2a 20 66 69 65 6c 64 20  ructor.** field 
f0a0: 69 73 20 75 73 65 64 20 62 79 20 70 65 72 2d 63  is used by per-c
f0b0: 6f 6e 6e 65 63 74 69 6f 6e 20 61 70 70 2d 64 65  onnection app-de
f0c0: 66 20 66 75 6e 63 74 69 6f 6e 73 2e 0a 2a 2f 0a  f functions..*/.
f0d0: 73 74 72 75 63 74 20 46 75 6e 63 44 65 66 20 7b  struct FuncDef {
f0e0: 0a 20 20 69 38 20 6e 41 72 67 3b 20 20 20 20 20  .  i8 nArg;     
f0f0: 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
f100: 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 2e 20  r of arguments. 
f110: 20 2d 31 20 6d 65 61 6e 73 20 75 6e 6c 69 6d 69   -1 means unlimi
f120: 74 65 64 20 2a 2f 0a 20 20 75 31 36 20 66 75 6e  ted */.  u16 fun
f130: 63 46 6c 61 67 73 3b 20 20 20 20 20 20 20 2f 2a  cFlags;       /*
f140: 20 53 6f 6d 65 20 63 6f 6d 62 69 6e 61 74 69 6f   Some combinatio
f150: 6e 20 6f 66 20 53 51 4c 49 54 45 5f 46 55 4e 43  n of SQLITE_FUNC
f160: 5f 2a 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 55  _* */.  void *pU
f170: 73 65 72 44 61 74 61 3b 20 20 20 20 20 2f 2a 20  serData;     /* 
f180: 55 73 65 72 20 64 61 74 61 20 70 61 72 61 6d 65  User data parame
f190: 74 65 72 20 2a 2f 0a 20 20 46 75 6e 63 44 65 66  ter */.  FuncDef
f1a0: 20 2a 70 4e 65 78 74 3b 20 20 20 20 20 20 2f 2a   *pNext;      /*
f1b0: 20 4e 65 78 74 20 66 75 6e 63 74 69 6f 6e 20 77   Next function w
f1c0: 69 74 68 20 73 61 6d 65 20 6e 61 6d 65 20 2a 2f  ith same name */
f1d0: 0a 20 20 76 6f 69 64 20 28 2a 78 53 46 75 6e 63  .  void (*xSFunc
f1e0: 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78  )(sqlite3_contex
f1f0: 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76  t*,int,sqlite3_v
f200: 61 6c 75 65 2a 2a 29 3b 20 2f 2a 20 66 75 6e 63  alue**); /* func
f210: 20 6f 72 20 61 67 67 2d 73 74 65 70 20 2a 2f 0a   or agg-step */.
f220: 20 20 76 6f 69 64 20 28 2a 78 46 69 6e 61 6c 69    void (*xFinali
f230: 7a 65 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74  ze)(sqlite3_cont
f240: 65 78 74 2a 29 3b 20 20 20 20 20 20 20 20 20 20  ext*);          
f250: 20 20 20 20 20 20 20 20 2f 2a 20 41 67 67 20 66          /* Agg f
f260: 69 6e 61 6c 69 7a 65 72 20 2a 2f 0a 20 20 63 6f  inalizer */.  co
f270: 6e 73 74 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b  nst char *zName;
f280: 20 20 20 2f 2a 20 53 51 4c 20 6e 61 6d 65 20 6f     /* SQL name o
f290: 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 2e 20  f the function. 
f2a0: 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b 0a 20 20 20  */.  union {.   
f2b0: 20 46 75 6e 63 44 65 66 20 2a 70 48 61 73 68 3b   FuncDef *pHash;
f2c0: 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 77 69        /* Next wi
f2d0: 74 68 20 61 20 64 69 66 66 65 72 65 6e 74 20 6e  th a different n
f2e0: 61 6d 65 20 62 75 74 20 74 68 65 20 73 61 6d 65  ame but the same
f2f0: 20 68 61 73 68 20 2a 2f 0a 20 20 20 20 46 75 6e   hash */.    Fun
f300: 63 44 65 73 74 72 75 63 74 6f 72 20 2a 70 44 65  cDestructor *pDe
f310: 73 74 72 75 63 74 6f 72 3b 20 20 20 2f 2a 20 52  structor;   /* R
f320: 65 66 65 72 65 6e 63 65 20 63 6f 75 6e 74 65 64  eference counted
f330: 20 64 65 73 74 72 75 63 74 6f 72 20 66 75 6e 63   destructor func
f340: 74 69 6f 6e 20 2a 2f 0a 20 20 7d 20 75 3b 0a 7d  tion */.  } u;.}
f350: 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 73 74  ;../*.** This st
f360: 72 75 63 74 75 72 65 20 65 6e 63 61 70 73 75 6c  ructure encapsul
f370: 61 74 65 73 20 61 20 75 73 65 72 2d 66 75 6e 63  ates a user-func
f380: 74 69 6f 6e 20 64 65 73 74 72 75 63 74 6f 72 20  tion destructor 
f390: 63 61 6c 6c 62 61 63 6b 20 28 61 73 0a 2a 2a 20  callback (as.** 
f3a0: 63 6f 6e 66 69 67 75 72 65 64 20 75 73 69 6e 67  configured using
f3b0: 20 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e   create_function
f3c0: 5f 76 32 28 29 29 20 61 6e 64 20 61 20 72 65 66  _v2()) and a ref
f3d0: 65 72 65 6e 63 65 20 63 6f 75 6e 74 65 72 2e 20  erence counter. 
f3e0: 57 68 65 6e 0a 2a 2a 20 63 72 65 61 74 65 5f 66  When.** create_f
f3f0: 75 6e 63 74 69 6f 6e 5f 76 32 28 29 20 69 73 20  unction_v2() is 
f400: 63 61 6c 6c 65 64 20 74 6f 20 63 72 65 61 74 65  called to create
f410: 20 61 20 66 75 6e 63 74 69 6f 6e 20 77 69 74 68   a function with
f420: 20 61 20 64 65 73 74 72 75 63 74 6f 72 2c 0a 2a   a destructor,.*
f430: 2a 20 61 20 73 69 6e 67 6c 65 20 6f 62 6a 65 63  * a single objec
f440: 74 20 6f 66 20 74 68 69 73 20 74 79 70 65 20 69  t of this type i
f450: 73 20 61 6c 6c 6f 63 61 74 65 64 2e 20 46 75 6e  s allocated. Fun
f460: 63 44 65 73 74 72 75 63 74 6f 72 2e 6e 52 65 66  cDestructor.nRef
f470: 20 69 73 20 73 65 74 20 74 6f 0a 2a 2a 20 74 68   is set to.** th
f480: 65 20 6e 75 6d 62 65 72 20 6f 66 20 46 75 6e 63  e number of Func
f490: 44 65 66 20 6f 62 6a 65 63 74 73 20 63 72 65 61  Def objects crea
f4a0: 74 65 64 20 28 65 69 74 68 65 72 20 31 20 6f 72  ted (either 1 or
f4b0: 20 33 2c 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e   3, depending on
f4c0: 20 77 68 65 74 68 65 72 0a 2a 2a 20 6f 72 20 6e   whether.** or n
f4d0: 6f 74 20 74 68 65 20 73 70 65 63 69 66 69 65 64  ot the specified
f4e0: 20 65 6e 63 6f 64 69 6e 67 20 69 73 20 53 51 4c   encoding is SQL
f4f0: 49 54 45 5f 41 4e 59 29 2e 20 54 68 65 20 46 75  ITE_ANY). The Fu
f500: 6e 63 44 65 66 2e 70 44 65 73 74 72 75 63 74 6f  ncDef.pDestructo
f510: 72 0a 2a 2a 20 6d 65 6d 62 65 72 20 6f 66 20 65  r.** member of e
f520: 61 63 68 20 6f 66 20 74 68 65 20 6e 65 77 20 46  ach of the new F
f530: 75 6e 63 44 65 66 20 6f 62 6a 65 63 74 73 20 69  uncDef objects i
f540: 73 20 73 65 74 20 74 6f 20 70 6f 69 6e 74 20 74  s set to point t
f550: 6f 20 74 68 65 20 61 6c 6c 6f 63 61 74 65 64 0a  o the allocated.
f560: 2a 2a 20 46 75 6e 63 44 65 73 74 72 75 63 74 6f  ** FuncDestructo
f570: 72 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 72 65 61 66  r..**.** Thereaf
f580: 74 65 72 2c 20 77 68 65 6e 20 6f 6e 65 20 6f 66  ter, when one of
f590: 20 74 68 65 20 46 75 6e 63 44 65 66 20 6f 62 6a   the FuncDef obj
f5a0: 65 63 74 73 20 69 73 20 64 65 6c 65 74 65 64 2c  ects is deleted,
f5b0: 20 74 68 65 20 72 65 66 65 72 65 6e 63 65 0a 2a   the reference.*
f5c0: 2a 20 63 6f 75 6e 74 20 6f 6e 20 74 68 69 73 20  * count on this 
f5d0: 6f 62 6a 65 63 74 20 69 73 20 64 65 63 72 65 6d  object is decrem
f5e0: 65 6e 74 65 64 2e 20 57 68 65 6e 20 69 74 20 72  ented. When it r
f5f0: 65 61 63 68 65 73 20 30 2c 20 74 68 65 20 64 65  eaches 0, the de
f600: 73 74 72 75 63 74 6f 72 0a 2a 2a 20 69 73 20 69  structor.** is i
f610: 6e 76 6f 6b 65 64 20 61 6e 64 20 74 68 65 20 46  nvoked and the F
f620: 75 6e 63 44 65 73 74 72 75 63 74 6f 72 20 73 74  uncDestructor st
f630: 72 75 63 74 75 72 65 20 66 72 65 65 64 2e 0a 2a  ructure freed..*
f640: 2f 0a 73 74 72 75 63 74 20 46 75 6e 63 44 65 73  /.struct FuncDes
f650: 74 72 75 63 74 6f 72 20 7b 0a 20 20 69 6e 74 20  tructor {.  int 
f660: 6e 52 65 66 3b 0a 20 20 76 6f 69 64 20 28 2a 78  nRef;.  void (*x
f670: 44 65 73 74 72 6f 79 29 28 76 6f 69 64 20 2a 29  Destroy)(void *)
f680: 3b 0a 20 20 76 6f 69 64 20 2a 70 55 73 65 72 44  ;.  void *pUserD
f690: 61 74 61 3b 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 50  ata;.};../*.** P
f6a0: 6f 73 73 69 62 6c 65 20 76 61 6c 75 65 73 20 66  ossible values f
f6b0: 6f 72 20 46 75 6e 63 44 65 66 2e 66 6c 61 67 73  or FuncDef.flags
f6c0: 2e 20 20 4e 6f 74 65 20 74 68 61 74 20 74 68 65  .  Note that the
f6d0: 20 5f 4c 45 4e 47 54 48 20 61 6e 64 20 5f 54 59   _LENGTH and _TY
f6e0: 50 45 4f 46 0a 2a 2a 20 76 61 6c 75 65 73 20 6d  PEOF.** values m
f6f0: 75 73 74 20 63 6f 72 72 65 73 70 6f 6e 64 20 74  ust correspond t
f700: 6f 20 4f 50 46 4c 41 47 5f 4c 45 4e 47 54 48 41  o OPFLAG_LENGTHA
f710: 52 47 20 61 6e 64 20 4f 50 46 4c 41 47 5f 54 59  RG and OPFLAG_TY
f720: 50 45 4f 46 41 52 47 2e 20 20 41 6e 64 0a 2a 2a  PEOFARG.  And.**
f730: 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e   SQLITE_FUNC_CON
f740: 53 54 41 4e 54 20 6d 75 73 74 20 62 65 20 74 68  STANT must be th
f750: 65 20 73 61 6d 65 20 61 73 20 53 51 4c 49 54 45  e same as SQLITE
f760: 5f 44 45 54 45 52 4d 49 4e 49 53 54 49 43 2e 20  _DETERMINISTIC. 
f770: 20 54 68 65 72 65 0a 2a 2a 20 61 72 65 20 61 73   There.** are as
f780: 73 65 72 74 28 29 20 73 74 61 74 65 6d 65 6e 74  sert() statement
f790: 73 20 69 6e 20 74 68 65 20 63 6f 64 65 20 74 6f  s in the code to
f7a0: 20 76 65 72 69 66 79 20 74 68 69 73 2e 0a 2a 2a   verify this..**
f7b0: 0a 2a 2a 20 56 61 6c 75 65 20 63 6f 6e 73 74 72  .** Value constr
f7c0: 61 69 6e 74 73 20 28 65 6e 66 6f 72 63 65 64 20  aints (enforced 
f7d0: 76 69 61 20 61 73 73 65 72 74 28 29 29 3a 0a 2a  via assert()):.*
f7e0: 2a 20 20 20 20 20 53 51 4c 49 54 45 5f 46 55 4e  *     SQLITE_FUN
f7f0: 43 5f 4d 49 4e 4d 41 58 20 20 20 20 3d 3d 20 20  C_MINMAX    ==  
f800: 4e 43 5f 4d 69 6e 4d 61 78 41 67 67 20 20 20 20  NC_MinMaxAgg    
f810: 20 20 3d 3d 20 53 46 5f 4d 69 6e 4d 61 78 41 67    == SF_MinMaxAg
f820: 67 0a 2a 2a 20 20 20 20 20 53 51 4c 49 54 45 5f  g.**     SQLITE_
f830: 46 55 4e 43 5f 4c 45 4e 47 54 48 20 20 20 20 3d  FUNC_LENGTH    =
f840: 3d 20 20 4f 50 46 4c 41 47 5f 4c 45 4e 47 54 48  =  OPFLAG_LENGTH
f850: 41 52 47 0a 2a 2a 20 20 20 20 20 53 51 4c 49 54  ARG.**     SQLIT
f860: 45 5f 46 55 4e 43 5f 54 59 50 45 4f 46 20 20 20  E_FUNC_TYPEOF   
f870: 20 3d 3d 20 20 4f 50 46 4c 41 47 5f 54 59 50 45   ==  OPFLAG_TYPE
f880: 4f 46 41 52 47 0a 2a 2a 20 20 20 20 20 53 51 4c  OFARG.**     SQL
f890: 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e  ITE_FUNC_CONSTAN
f8a0: 54 20 20 3d 3d 20 20 53 51 4c 49 54 45 5f 44 45  T  ==  SQLITE_DE
f8b0: 54 45 52 4d 49 4e 49 53 54 49 43 20 66 72 6f 6d  TERMINISTIC from
f8c0: 20 74 68 65 20 41 50 49 0a 2a 2a 20 20 20 20 20   the API.**     
f8d0: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 45 4e 43 4d  SQLITE_FUNC_ENCM
f8e0: 41 53 4b 20 20 20 64 65 70 65 6e 64 73 20 6f 6e  ASK   depends on
f8f0: 20 53 51 4c 49 54 45 5f 55 54 46 2a 20 6d 61 63   SQLITE_UTF* mac
f900: 72 6f 73 20 69 6e 20 74 68 65 20 41 50 49 0a 2a  ros in the API.*
f910: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
f920: 5f 46 55 4e 43 5f 45 4e 43 4d 41 53 4b 20 20 30  _FUNC_ENCMASK  0
f930: 78 30 30 30 33 20 2f 2a 20 53 51 4c 49 54 45 5f  x0003 /* SQLITE_
f940: 55 54 46 38 2c 20 53 51 4c 49 54 45 5f 55 54 46  UTF8, SQLITE_UTF
f950: 31 36 42 45 20 6f 72 20 55 54 46 31 36 4c 45 20  16BE or UTF16LE 
f960: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
f970: 45 5f 46 55 4e 43 5f 4c 49 4b 45 20 20 20 20 20  E_FUNC_LIKE     
f980: 30 78 30 30 30 34 20 2f 2a 20 43 61 6e 64 69 64  0x0004 /* Candid
f990: 61 74 65 20 66 6f 72 20 74 68 65 20 4c 49 4b 45  ate for the LIKE
f9a0: 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 20 2a 2f   optimization */
f9b0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
f9c0: 46 55 4e 43 5f 43 41 53 45 20 20 20 20 20 30 78  FUNC_CASE     0x
f9d0: 30 30 30 38 20 2f 2a 20 43 61 73 65 2d 73 65 6e  0008 /* Case-sen
f9e0: 73 69 74 69 76 65 20 4c 49 4b 45 2d 74 79 70 65  sitive LIKE-type
f9f0: 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65   function */.#de
fa00: 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43  fine SQLITE_FUNC
fa10: 5f 45 50 48 45 4d 20 20 20 20 30 78 30 30 31 30  _EPHEM    0x0010
fa20: 20 2f 2a 20 45 70 68 65 6d 65 72 61 6c 2e 20 20   /* Ephemeral.  
fa30: 44 65 6c 65 74 65 20 77 69 74 68 20 56 44 42 45  Delete with VDBE
fa40: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
fa50: 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c  TE_FUNC_NEEDCOLL
fa60: 20 30 78 30 30 32 30 20 2f 2a 20 73 71 6c 69 74   0x0020 /* sqlit
fa70: 65 33 47 65 74 46 75 6e 63 43 6f 6c 6c 53 65 71  e3GetFuncCollSeq
fa80: 28 29 20 6d 69 67 68 74 20 62 65 20 63 61 6c 6c  () might be call
fa90: 65 64 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  ed*/.#define SQL
faa0: 49 54 45 5f 46 55 4e 43 5f 4c 45 4e 47 54 48 20  ITE_FUNC_LENGTH 
fab0: 20 20 30 78 30 30 34 30 20 2f 2a 20 42 75 69 6c    0x0040 /* Buil
fac0: 74 2d 69 6e 20 6c 65 6e 67 74 68 28 29 20 66 75  t-in length() fu
fad0: 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e  nction */.#defin
fae0: 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 54 59  e SQLITE_FUNC_TY
faf0: 50 45 4f 46 20 20 20 30 78 30 30 38 30 20 2f 2a  PEOF   0x0080 /*
fb00: 20 42 75 69 6c 74 2d 69 6e 20 74 79 70 65 6f 66   Built-in typeof
fb10: 28 29 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23  () function */.#
fb20: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55  define SQLITE_FU
fb30: 4e 43 5f 43 4f 55 4e 54 20 20 20 20 30 78 30 31  NC_COUNT    0x01
fb40: 30 30 20 2f 2a 20 42 75 69 6c 74 2d 69 6e 20 63  00 /* Built-in c
fb50: 6f 75 6e 74 28 2a 29 20 61 67 67 72 65 67 61 74  ount(*) aggregat
fb60: 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  e */.#define SQL
fb70: 49 54 45 5f 46 55 4e 43 5f 43 4f 41 4c 45 53 43  ITE_FUNC_COALESC
fb80: 45 20 30 78 30 32 30 30 20 2f 2a 20 42 75 69 6c  E 0x0200 /* Buil
fb90: 74 2d 69 6e 20 63 6f 61 6c 65 73 63 65 28 29 20  t-in coalesce() 
fba0: 6f 72 20 69 66 6e 75 6c 6c 28 29 20 2a 2f 0a 23  or ifnull() */.#
fbb0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55  define SQLITE_FU
fbc0: 4e 43 5f 55 4e 4c 49 4b 45 4c 59 20 30 78 30 34  NC_UNLIKELY 0x04
fbd0: 30 30 20 2f 2a 20 42 75 69 6c 74 2d 69 6e 20 75  00 /* Built-in u
fbe0: 6e 6c 69 6b 65 6c 79 28 29 20 66 75 6e 63 74 69  nlikely() functi
fbf0: 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  on */.#define SQ
fc00: 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41  LITE_FUNC_CONSTA
fc10: 4e 54 20 30 78 30 38 30 30 20 2f 2a 20 43 6f 6e  NT 0x0800 /* Con
fc20: 73 74 61 6e 74 20 69 6e 70 75 74 73 20 67 69 76  stant inputs giv
fc30: 65 20 61 20 63 6f 6e 73 74 61 6e 74 20 6f 75 74  e a constant out
fc40: 70 75 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  put */.#define S
fc50: 51 4c 49 54 45 5f 46 55 4e 43 5f 4d 49 4e 4d 41  QLITE_FUNC_MINMA
fc60: 58 20 20 20 30 78 31 30 30 30 20 2f 2a 20 54 72  X   0x1000 /* Tr
fc70: 75 65 20 66 6f 72 20 6d 69 6e 28 29 20 61 6e 64  ue for min() and
fc80: 20 6d 61 78 28 29 20 61 67 67 72 65 67 61 74 65   max() aggregate
fc90: 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  s */.#define SQL
fca0: 49 54 45 5f 46 55 4e 43 5f 53 4c 4f 43 48 4e 47  ITE_FUNC_SLOCHNG
fcb0: 20 20 30 78 32 30 30 30 20 2f 2a 20 22 53 6c 6f    0x2000 /* "Slo
fcc0: 77 20 43 68 61 6e 67 65 22 2e 20 56 61 6c 75 65  w Change". Value
fcd0: 20 63 6f 6e 73 74 61 6e 74 20 64 75 72 69 6e 67   constant during
fce0: 20 61 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   a.             
fcf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fd00: 20 20 20 20 20 20 20 2a 2a 20 73 69 6e 67 6c 65         ** single
fd10: 20 71 75 65 72 79 20 2d 20 6d 69 67 68 74 20 63   query - might c
fd20: 68 61 6e 67 65 20 6f 76 65 72 20 74 69 6d 65 20  hange over time 
fd30: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
fd40: 45 5f 46 55 4e 43 5f 41 46 46 49 4e 49 54 59 20  E_FUNC_AFFINITY 
fd50: 30 78 34 30 30 30 20 2f 2a 20 42 75 69 6c 74 2d  0x4000 /* Built-
fd60: 69 6e 20 61 66 66 69 6e 69 74 79 28 29 20 66 75  in affinity() fu
fd70: 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e  nction */.#defin
fd80: 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4f 46  e SQLITE_FUNC_OF
fd90: 46 53 45 54 20 20 20 30 78 38 30 30 30 20 2f 2a  FSET   0x8000 /*
fda0: 20 42 75 69 6c 74 2d 69 6e 20 73 71 6c 69 74 65   Built-in sqlite
fdb0: 5f 6f 66 66 73 65 74 28 29 20 66 75 6e 63 74 69  _offset() functi
fdc0: 6f 6e 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  on */../*.** The
fdd0: 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 68 72 65 65   following three
fde0: 20 6d 61 63 72 6f 73 2c 20 46 55 4e 43 54 49 4f   macros, FUNCTIO
fdf0: 4e 28 29 2c 20 4c 49 4b 45 46 55 4e 43 28 29 20  N(), LIKEFUNC() 
fe00: 61 6e 64 20 41 47 47 52 45 47 41 54 45 28 29 20  and AGGREGATE() 
fe10: 61 72 65 0a 2a 2a 20 75 73 65 64 20 74 6f 20 63  are.** used to c
fe20: 72 65 61 74 65 20 74 68 65 20 69 6e 69 74 69 61  reate the initia
fe30: 6c 69 7a 65 72 73 20 66 6f 72 20 74 68 65 20 46  lizers for the F
fe40: 75 6e 63 44 65 66 20 73 74 72 75 63 74 75 72 65  uncDef structure
fe50: 73 2e 0a 2a 2a 0a 2a 2a 20 20 20 46 55 4e 43 54  s..**.**   FUNCT
fe60: 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c  ION(zName, nArg,
fe70: 20 69 41 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e   iArg, bNC, xFun
fe80: 63 29 0a 2a 2a 20 20 20 20 20 55 73 65 64 20 74  c).**     Used t
fe90: 6f 20 63 72 65 61 74 65 20 61 20 73 63 61 6c 61  o create a scala
fea0: 72 20 66 75 6e 63 74 69 6f 6e 20 64 65 66 69 6e  r function defin
feb0: 69 74 69 6f 6e 20 6f 66 20 61 20 66 75 6e 63 74  ition of a funct
fec0: 69 6f 6e 20 7a 4e 61 6d 65 0a 2a 2a 20 20 20 20  ion zName.**    
fed0: 20 69 6d 70 6c 65 6d 65 6e 74 65 64 20 62 79 20   implemented by 
fee0: 43 20 66 75 6e 63 74 69 6f 6e 20 78 46 75 6e 63  C function xFunc
fef0: 20 74 68 61 74 20 61 63 63 65 70 74 73 20 6e 41   that accepts nA
ff00: 72 67 20 61 72 67 75 6d 65 6e 74 73 2e 20 54 68  rg arguments. Th
ff10: 65 0a 2a 2a 20 20 20 20 20 76 61 6c 75 65 20 70  e.**     value p
ff20: 61 73 73 65 64 20 61 73 20 69 41 72 67 20 69 73  assed as iArg is
ff30: 20 63 61 73 74 20 74 6f 20 61 20 28 76 6f 69 64   cast to a (void
ff40: 2a 29 20 61 6e 64 20 6d 61 64 65 20 61 76 61 69  *) and made avai
ff50: 6c 61 62 6c 65 0a 2a 2a 20 20 20 20 20 61 73 20  lable.**     as 
ff60: 74 68 65 20 75 73 65 72 2d 64 61 74 61 20 28 73  the user-data (s
ff70: 71 6c 69 74 65 33 5f 75 73 65 72 5f 64 61 74 61  qlite3_user_data
ff80: 28 29 29 20 66 6f 72 20 74 68 65 20 66 75 6e 63  ()) for the func
ff90: 74 69 6f 6e 2e 20 49 66 0a 2a 2a 20 20 20 20 20  tion. If.**     
ffa0: 61 72 67 75 6d 65 6e 74 20 62 4e 43 20 69 73 20  argument bNC is 
ffb0: 74 72 75 65 2c 20 74 68 65 6e 20 74 68 65 20 53  true, then the S
ffc0: 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43  QLITE_FUNC_NEEDC
ffd0: 4f 4c 4c 20 66 6c 61 67 20 69 73 20 73 65 74 2e  OLL flag is set.
ffe0: 0a 2a 2a 0a 2a 2a 20 20 20 56 46 55 4e 43 54 49  .**.**   VFUNCTI
fff0: 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20  ON(zName, nArg, 
10000 69 41 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63  iArg, bNC, xFunc
10010 29 0a 2a 2a 20 20 20 20 20 4c 69 6b 65 20 46 55  ).**     Like FU
10020 4e 43 54 49 4f 4e 20 65 78 63 65 70 74 20 69 74  NCTION except it
10030 20 6f 6d 69 74 73 20 74 68 65 20 53 51 4c 49 54   omits the SQLIT
10040 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 20  E_FUNC_CONSTANT 
10050 66 6c 61 67 2e 0a 2a 2a 0a 2a 2a 20 20 20 44 46  flag..**.**   DF
10060 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e  UNCTION(zName, n
10070 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20  Arg, iArg, bNC, 
10080 78 46 75 6e 63 29 0a 2a 2a 20 20 20 20 20 4c 69  xFunc).**     Li
10090 6b 65 20 46 55 4e 43 54 49 4f 4e 20 65 78 63 65  ke FUNCTION exce
100a0 70 74 20 69 74 20 6f 6d 69 74 73 20 74 68 65 20  pt it omits the 
100b0 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53  SQLITE_FUNC_CONS
100c0 54 41 4e 54 20 66 6c 61 67 20 61 6e 64 0a 2a 2a  TANT flag and.**
100d0 20 20 20 20 20 61 64 64 73 20 74 68 65 20 53 51       adds the SQ
100e0 4c 49 54 45 5f 46 55 4e 43 5f 53 4c 4f 43 48 4e  LITE_FUNC_SLOCHN
100f0 47 20 66 6c 61 67 2e 20 20 55 73 65 64 20 66 6f  G flag.  Used fo
10100 72 20 64 61 74 65 20 26 20 74 69 6d 65 20 66 75  r date & time fu
10110 6e 63 74 69 6f 6e 73 0a 2a 2a 20 20 20 20 20 61  nctions.**     a
10120 6e 64 20 66 75 6e 63 74 69 6f 6e 73 20 6c 69 6b  nd functions lik
10130 65 20 73 71 6c 69 74 65 5f 76 65 72 73 69 6f 6e  e sqlite_version
10140 28 29 20 74 68 61 74 20 63 61 6e 20 63 68 61 6e  () that can chan
10150 67 65 2c 20 62 75 74 20 6e 6f 74 20 64 75 72 69  ge, but not duri
10160 6e 67 0a 2a 2a 20 20 20 20 20 61 20 73 69 6e 67  ng.**     a sing
10170 6c 65 20 71 75 65 72 79 2e 20 20 54 68 65 20 69  le query.  The i
10180 41 72 67 20 69 73 20 69 67 6e 6f 72 65 64 2e 20  Arg is ignored. 
10190 20 54 68 65 20 75 73 65 72 2d 64 61 74 61 20 69   The user-data i
101a0 73 20 61 6c 77 61 79 73 20 73 65 74 0a 2a 2a 20  s always set.** 
101b0 20 20 20 20 74 6f 20 61 20 4e 55 4c 4c 20 70 6f      to a NULL po
101c0 69 6e 74 65 72 2e 20 20 54 68 65 20 62 4e 43 20  inter.  The bNC 
101d0 70 61 72 61 6d 65 74 65 72 20 69 73 20 6e 6f 74  parameter is not
101e0 20 75 73 65 64 2e 0a 2a 2a 0a 2a 2a 20 20 20 50   used..**.**   P
101f0 55 52 45 5f 44 41 54 45 28 7a 4e 61 6d 65 2c 20  URE_DATE(zName, 
10200 6e 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c  nArg, iArg, bNC,
10210 20 78 46 75 6e 63 29 0a 2a 2a 20 20 20 20 20 55   xFunc).**     U
10220 73 65 64 20 66 6f 72 20 22 70 75 72 65 22 20 64  sed for "pure" d
10230 61 74 65 2f 74 69 6d 65 20 66 75 6e 63 74 69 6f  ate/time functio
10240 6e 73 2c 20 74 68 69 73 20 6d 61 63 72 6f 20 69  ns, this macro i
10250 73 20 6c 69 6b 65 20 44 46 55 4e 43 54 49 4f 4e  s like DFUNCTION
10260 0a 2a 2a 20 20 20 20 20 65 78 63 65 70 74 20 74  .**     except t
10270 68 61 74 20 69 74 20 64 6f 65 73 20 73 65 74 20  hat it does set 
10280 74 68 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f  the SQLITE_FUNC_
10290 43 4f 4e 53 54 41 4e 54 20 66 6c 61 67 73 2e 20  CONSTANT flags. 
102a0 20 69 41 72 67 20 69 73 0a 2a 2a 20 20 20 20 20   iArg is.**     
102b0 69 67 6e 6f 72 65 64 20 61 6e 64 20 74 68 65 20  ignored and the 
102c0 75 73 65 72 2d 64 61 74 61 20 66 6f 72 20 74 68  user-data for th
102d0 65 73 65 20 66 75 6e 63 74 69 6f 6e 73 20 69 73  ese functions is
102e0 20 73 65 74 20 74 6f 20 61 6e 20 0a 2a 2a 20 20   set to an .**  
102f0 20 20 20 61 72 62 69 74 72 61 72 79 20 6e 6f 6e     arbitrary non
10300 2d 4e 55 4c 4c 20 70 6f 69 6e 74 65 72 2e 20 20  -NULL pointer.  
10310 54 68 65 20 62 4e 43 20 70 61 72 61 6d 65 74 65  The bNC paramete
10320 72 20 69 73 20 6e 6f 74 20 75 73 65 64 2e 0a 2a  r is not used..*
10330 2a 0a 2a 2a 20 20 20 41 47 47 52 45 47 41 54 45  *.**   AGGREGATE
10340 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41  (zName, nArg, iA
10350 72 67 2c 20 62 4e 43 2c 20 78 53 74 65 70 2c 20  rg, bNC, xStep, 
10360 78 46 69 6e 61 6c 29 0a 2a 2a 20 20 20 20 20 55  xFinal).**     U
10370 73 65 64 20 74 6f 20 63 72 65 61 74 65 20 61 6e  sed to create an
10380 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74   aggregate funct
10390 69 6f 6e 20 64 65 66 69 6e 69 74 69 6f 6e 20 69  ion definition i
103a0 6d 70 6c 65 6d 65 6e 74 65 64 20 62 79 0a 2a 2a  mplemented by.**
103b0 20 20 20 20 20 74 68 65 20 43 20 66 75 6e 63 74       the C funct
103c0 69 6f 6e 73 20 78 53 74 65 70 20 61 6e 64 20 78  ions xStep and x
103d0 46 69 6e 61 6c 2e 20 54 68 65 20 66 69 72 73 74  Final. The first
103e0 20 66 6f 75 72 20 70 61 72 61 6d 65 74 65 72 73   four parameters
103f0 0a 2a 2a 20 20 20 20 20 61 72 65 20 69 6e 74 65  .**     are inte
10400 72 70 72 65 74 65 64 20 69 6e 20 74 68 65 20 73  rpreted in the s
10410 61 6d 65 20 77 61 79 20 61 73 20 74 68 65 20 66  ame way as the f
10420 69 72 73 74 20 34 20 70 61 72 61 6d 65 74 65 72  irst 4 parameter
10430 73 20 74 6f 0a 2a 2a 20 20 20 20 20 46 55 4e 43  s to.**     FUNC
10440 54 49 4f 4e 28 29 2e 0a 2a 2a 0a 2a 2a 20 20 20  TION()..**.**   
10450 4c 49 4b 45 46 55 4e 43 28 7a 4e 61 6d 65 2c 20  LIKEFUNC(zName, 
10460 6e 41 72 67 2c 20 70 41 72 67 2c 20 66 6c 61 67  nArg, pArg, flag
10470 73 29 0a 2a 2a 20 20 20 20 20 55 73 65 64 20 74  s).**     Used t
10480 6f 20 63 72 65 61 74 65 20 61 20 73 63 61 6c 61  o create a scala
10490 72 20 66 75 6e 63 74 69 6f 6e 20 64 65 66 69 6e  r function defin
104a0 69 74 69 6f 6e 20 6f 66 20 61 20 66 75 6e 63 74  ition of a funct
104b0 69 6f 6e 20 7a 4e 61 6d 65 0a 2a 2a 20 20 20 20  ion zName.**    
104c0 20 74 68 61 74 20 61 63 63 65 70 74 73 20 6e 41   that accepts nA
104d0 72 67 20 61 72 67 75 6d 65 6e 74 73 20 61 6e 64  rg arguments and
104e0 20 69 73 20 69 6d 70 6c 65 6d 65 6e 74 65 64 20   is implemented 
104f0 62 79 20 61 20 63 61 6c 6c 20 74 6f 20 43 0a 2a  by a call to C.*
10500 2a 20 20 20 20 20 66 75 6e 63 74 69 6f 6e 20 6c  *     function l
10510 69 6b 65 46 75 6e 63 2e 20 41 72 67 75 6d 65 6e  ikeFunc. Argumen
10520 74 20 70 41 72 67 20 69 73 20 63 61 73 74 20 74  t pArg is cast t
10530 6f 20 61 20 28 76 6f 69 64 20 2a 29 20 61 6e 64  o a (void *) and
10540 20 6d 61 64 65 0a 2a 2a 20 20 20 20 20 61 76 61   made.**     ava
10550 69 6c 61 62 6c 65 20 61 73 20 74 68 65 20 66 75  ilable as the fu
10560 6e 63 74 69 6f 6e 20 75 73 65 72 2d 64 61 74 61  nction user-data
10570 20 28 73 71 6c 69 74 65 33 5f 75 73 65 72 5f 64   (sqlite3_user_d
10580 61 74 61 28 29 29 2e 20 54 68 65 0a 2a 2a 20 20  ata()). The.**  
10590 20 20 20 46 75 6e 63 44 65 66 2e 66 6c 61 67 73     FuncDef.flags
105a0 20 76 61 72 69 61 62 6c 65 20 69 73 20 73 65 74   variable is set
105b0 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20 70 61   to the value pa
105c0 73 73 65 64 20 61 73 20 74 68 65 20 66 6c 61 67  ssed as the flag
105d0 73 0a 2a 2a 20 20 20 20 20 70 61 72 61 6d 65 74  s.**     paramet
105e0 65 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 46  er..*/.#define F
105f0 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e  UNCTION(zName, n
10600 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20  Arg, iArg, bNC, 
10610 78 46 75 6e 63 29 20 5c 0a 20 20 7b 6e 41 72 67  xFunc) \.  {nArg
10620 2c 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f  , SQLITE_FUNC_CO
10630 4e 53 54 41 4e 54 7c 53 51 4c 49 54 45 5f 55 54  NSTANT|SQLITE_UT
10640 46 38 7c 28 62 4e 43 2a 53 51 4c 49 54 45 5f 46  F8|(bNC*SQLITE_F
10650 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 2c 20 5c  UNC_NEEDCOLL), \
10660 0a 20 20 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54  .   SQLITE_INT_T
10670 4f 5f 50 54 52 28 69 41 72 67 29 2c 20 30 2c 20  O_PTR(iArg), 0, 
10680 78 46 75 6e 63 2c 20 30 2c 20 23 7a 4e 61 6d 65  xFunc, 0, #zName
10690 2c 20 7b 30 7d 20 7d 0a 23 64 65 66 69 6e 65 20  , {0} }.#define 
106a0 56 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c  VFUNCTION(zName,
106b0 20 6e 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43   nArg, iArg, bNC
106c0 2c 20 78 46 75 6e 63 29 20 5c 0a 20 20 7b 6e 41  , xFunc) \.  {nA
106d0 72 67 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 7c  rg, SQLITE_UTF8|
106e0 28 62 4e 43 2a 53 51 4c 49 54 45 5f 46 55 4e 43  (bNC*SQLITE_FUNC
106f0 5f 4e 45 45 44 43 4f 4c 4c 29 2c 20 5c 0a 20 20  _NEEDCOLL), \.  
10700 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50   SQLITE_INT_TO_P
10710 54 52 28 69 41 72 67 29 2c 20 30 2c 20 78 46 75  TR(iArg), 0, xFu
10720 6e 63 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c 20 7b  nc, 0, #zName, {
10730 30 7d 20 7d 0a 23 64 65 66 69 6e 65 20 44 46 55  0} }.#define DFU
10740 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41  NCTION(zName, nA
10750 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78  rg, iArg, bNC, x
10760 46 75 6e 63 29 20 5c 0a 20 20 7b 6e 41 72 67 2c  Func) \.  {nArg,
10770 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 53 4c 4f   SQLITE_FUNC_SLO
10780 43 48 4e 47 7c 53 51 4c 49 54 45 5f 55 54 46 38  CHNG|SQLITE_UTF8
10790 2c 20 5c 0a 20 20 20 30 2c 20 30 2c 20 78 46 75  , \.   0, 0, xFu
107a0 6e 63 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c 20 7b  nc, 0, #zName, {
107b0 30 7d 20 7d 0a 23 64 65 66 69 6e 65 20 50 55 52  0} }.#define PUR
107c0 45 5f 44 41 54 45 28 7a 4e 61 6d 65 2c 20 6e 41  E_DATE(zName, nA
107d0 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78  rg, iArg, bNC, x
107e0 46 75 6e 63 29 20 5c 0a 20 20 7b 6e 41 72 67 2c  Func) \.  {nArg,
107f0 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 53 4c 4f   SQLITE_FUNC_SLO
10800 43 48 4e 47 7c 53 51 4c 49 54 45 5f 55 54 46 38  CHNG|SQLITE_UTF8
10810 7c 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e  |SQLITE_FUNC_CON
10820 53 54 41 4e 54 2c 20 5c 0a 20 20 20 28 76 6f 69  STANT, \.   (voi
10830 64 2a 29 26 73 71 6c 69 74 65 33 43 6f 6e 66 69  d*)&sqlite3Confi
10840 67 2c 20 30 2c 20 78 46 75 6e 63 2c 20 30 2c 20  g, 0, xFunc, 0, 
10850 23 7a 4e 61 6d 65 2c 20 7b 30 7d 20 7d 0a 23 64  #zName, {0} }.#d
10860 65 66 69 6e 65 20 46 55 4e 43 54 49 4f 4e 32 28  efine FUNCTION2(
10870 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72  zName, nArg, iAr
10880 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63 2c 20 65  g, bNC, xFunc, e
10890 78 74 72 61 46 6c 61 67 73 29 20 5c 0a 20 20 7b  xtraFlags) \.  {
108a0 6e 41 72 67 2c 53 51 4c 49 54 45 5f 46 55 4e 43  nArg,SQLITE_FUNC
108b0 5f 43 4f 4e 53 54 41 4e 54 7c 53 51 4c 49 54 45  _CONSTANT|SQLITE
108c0 5f 55 54 46 38 7c 28 62 4e 43 2a 53 51 4c 49 54  _UTF8|(bNC*SQLIT
108d0 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29  E_FUNC_NEEDCOLL)
108e0 7c 65 78 74 72 61 46 6c 61 67 73 2c 5c 0a 20 20  |extraFlags,\.  
108f0 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50   SQLITE_INT_TO_P
10900 54 52 28 69 41 72 67 29 2c 20 30 2c 20 78 46 75  TR(iArg), 0, xFu
10910 6e 63 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c 20 7b  nc, 0, #zName, {
10920 30 7d 20 7d 0a 23 64 65 66 69 6e 65 20 53 54 52  0} }.#define STR
10930 5f 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c  _FUNCTION(zName,
10940 20 6e 41 72 67 2c 20 70 41 72 67 2c 20 62 4e 43   nArg, pArg, bNC
10950 2c 20 78 46 75 6e 63 29 20 5c 0a 20 20 7b 6e 41  , xFunc) \.  {nA
10960 72 67 2c 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f  rg, SQLITE_FUNC_
10970 53 4c 4f 43 48 4e 47 7c 53 51 4c 49 54 45 5f 55  SLOCHNG|SQLITE_U
10980 54 46 38 7c 28 62 4e 43 2a 53 51 4c 49 54 45 5f  TF8|(bNC*SQLITE_
10990 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 2c 20  FUNC_NEEDCOLL), 
109a0 5c 0a 20 20 20 70 41 72 67 2c 20 30 2c 20 78 46  \.   pArg, 0, xF
109b0 75 6e 63 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c 20  unc, 0, #zName, 
109c0 7d 0a 23 64 65 66 69 6e 65 20 4c 49 4b 45 46 55  }.#define LIKEFU
109d0 4e 43 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20  NC(zName, nArg, 
109e0 61 72 67 2c 20 66 6c 61 67 73 29 20 5c 0a 20 20  arg, flags) \.  
109f0 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f 46 55  {nArg, SQLITE_FU
10a00 4e 43 5f 43 4f 4e 53 54 41 4e 54 7c 53 51 4c 49  NC_CONSTANT|SQLI
10a10 54 45 5f 55 54 46 38 7c 66 6c 61 67 73 2c 20 5c  TE_UTF8|flags, \
10a20 0a 20 20 20 28 76 6f 69 64 20 2a 29 61 72 67 2c  .   (void *)arg,
10a30 20 30 2c 20 6c 69 6b 65 46 75 6e 63 2c 20 30 2c   0, likeFunc, 0,
10a40 20 23 7a 4e 61 6d 65 2c 20 7b 30 7d 20 7d 0a 23   #zName, {0} }.#
10a50 64 65 66 69 6e 65 20 41 47 47 52 45 47 41 54 45  define AGGREGATE
10a60 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 61 72  (zName, nArg, ar
10a70 67 2c 20 6e 63 2c 20 78 53 74 65 70 2c 20 78 46  g, nc, xStep, xF
10a80 69 6e 61 6c 29 20 5c 0a 20 20 7b 6e 41 72 67 2c  inal) \.  {nArg,
10a90 20 53 51 4c 49 54 45 5f 55 54 46 38 7c 28 6e 63   SQLITE_UTF8|(nc
10aa0 2a 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45  *SQLITE_FUNC_NEE
10ab0 44 43 4f 4c 4c 29 2c 20 5c 0a 20 20 20 53 51 4c  DCOLL), \.   SQL
10ac0 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 61  ITE_INT_TO_PTR(a
10ad0 72 67 29 2c 20 30 2c 20 78 53 74 65 70 2c 78 46  rg), 0, xStep,xF
10ae0 69 6e 61 6c 2c 23 7a 4e 61 6d 65 2c 20 7b 30 7d  inal,#zName, {0}
10af0 7d 0a 23 64 65 66 69 6e 65 20 41 47 47 52 45 47  }.#define AGGREG
10b00 41 54 45 32 28 7a 4e 61 6d 65 2c 20 6e 41 72 67  ATE2(zName, nArg
10b10 2c 20 61 72 67 2c 20 6e 63 2c 20 78 53 74 65 70  , arg, nc, xStep
10b20 2c 20 78 46 69 6e 61 6c 2c 20 65 78 74 72 61 46  , xFinal, extraF
10b30 6c 61 67 73 29 20 5c 0a 20 20 7b 6e 41 72 67 2c  lags) \.  {nArg,
10b40 20 53 51 4c 49 54 45 5f 55 54 46 38 7c 28 6e 63   SQLITE_UTF8|(nc
10b50 2a 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45  *SQLITE_FUNC_NEE
10b60 44 43 4f 4c 4c 29 7c 65 78 74 72 61 46 6c 61 67  DCOLL)|extraFlag
10b70 73 2c 20 5c 0a 20 20 20 53 51 4c 49 54 45 5f 49  s, \.   SQLITE_I
10b80 4e 54 5f 54 4f 5f 50 54 52 28 61 72 67 29 2c 20  NT_TO_PTR(arg), 
10b90 30 2c 20 78 53 74 65 70 2c 78 46 69 6e 61 6c 2c  0, xStep,xFinal,
10ba0 23 7a 4e 61 6d 65 2c 20 7b 30 7d 7d 0a 0a 2f 2a  #zName, {0}}../*
10bb0 0a 2a 2a 20 41 6c 6c 20 63 75 72 72 65 6e 74 20  .** All current 
10bc0 73 61 76 65 70 6f 69 6e 74 73 20 61 72 65 20 73  savepoints are s
10bd0 74 6f 72 65 64 20 69 6e 20 61 20 6c 69 6e 6b 65  tored in a linke
10be0 64 20 6c 69 73 74 20 73 74 61 72 74 69 6e 67 20  d list starting 
10bf0 61 74 0a 2a 2a 20 73 71 6c 69 74 65 33 2e 70 53  at.** sqlite3.pS
10c00 61 76 65 70 6f 69 6e 74 2e 20 54 68 65 20 66 69  avepoint. The fi
10c10 72 73 74 20 65 6c 65 6d 65 6e 74 20 69 6e 20 74  rst element in t
10c20 68 65 20 6c 69 73 74 20 69 73 20 74 68 65 20 6d  he list is the m
10c30 6f 73 74 20 72 65 63 65 6e 74 6c 79 0a 2a 2a 20  ost recently.** 
10c40 6f 70 65 6e 65 64 20 73 61 76 65 70 6f 69 6e 74  opened savepoint
10c50 2e 20 53 61 76 65 70 6f 69 6e 74 73 20 61 72 65  . Savepoints are
10c60 20 61 64 64 65 64 20 74 6f 20 74 68 65 20 6c 69   added to the li
10c70 73 74 20 62 79 20 74 68 65 20 76 64 62 65 0a 2a  st by the vdbe.*
10c80 2a 20 4f 50 5f 53 61 76 65 70 6f 69 6e 74 20 69  * OP_Savepoint i
10c90 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 73  nstruction..*/.s
10ca0 74 72 75 63 74 20 53 61 76 65 70 6f 69 6e 74 20  truct Savepoint 
10cb0 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b  {.  char *zName;
10cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10cd0 20 20 20 20 20 20 20 20 2f 2a 20 53 61 76 65 70          /* Savep
10ce0 6f 69 6e 74 20 6e 61 6d 65 20 28 6e 75 6c 2d 74  oint name (nul-t
10cf0 65 72 6d 69 6e 61 74 65 64 29 20 2a 2f 0a 20 20  erminated) */.  
10d00 69 36 34 20 6e 44 65 66 65 72 72 65 64 43 6f 6e  i64 nDeferredCon
10d10 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  s;              
10d20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
10d30 20 64 65 66 65 72 72 65 64 20 66 6b 20 76 69 6f   deferred fk vio
10d40 6c 61 74 69 6f 6e 73 20 2a 2f 0a 20 20 69 36 34  lations */.  i64
10d50 20 6e 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e   nDeferredImmCon
10d60 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  s;              
10d70 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 64 65   /* Number of de
10d80 66 65 72 72 65 64 20 69 6d 6d 20 66 6b 2e 20 2a  ferred imm fk. *
10d90 2f 0a 20 20 53 61 76 65 70 6f 69 6e 74 20 2a 70  /.  Savepoint *p
10da0 4e 65 78 74 3b 20 20 20 20 20 20 20 20 20 20 20  Next;           
10db0 20 20 20 20 20 20 20 20 2f 2a 20 50 61 72 65 6e          /* Paren
10dc0 74 20 73 61 76 65 70 6f 69 6e 74 20 28 69 66 20  t savepoint (if 
10dd0 61 6e 79 29 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  any) */.};../*.*
10de0 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  * The following 
10df0 61 72 65 20 75 73 65 64 20 61 73 20 74 68 65 20  are used as the 
10e00 73 65 63 6f 6e 64 20 70 61 72 61 6d 65 74 65 72  second parameter
10e10 20 74 6f 20 73 71 6c 69 74 65 33 53 61 76 65 70   to sqlite3Savep
10e20 6f 69 6e 74 28 29 2c 0a 2a 2a 20 61 6e 64 20 61  oint(),.** and a
10e30 73 20 74 68 65 20 50 31 20 61 72 67 75 6d 65 6e  s the P1 argumen
10e40 74 20 74 6f 20 74 68 65 20 4f 50 5f 53 61 76 65  t to the OP_Save
10e50 70 6f 69 6e 74 20 69 6e 73 74 72 75 63 74 69 6f  point instructio
10e60 6e 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 41  n..*/.#define SA
10e70 56 45 50 4f 49 4e 54 5f 42 45 47 49 4e 20 20 20  VEPOINT_BEGIN   
10e80 20 20 20 30 0a 23 64 65 66 69 6e 65 20 53 41 56     0.#define SAV
10e90 45 50 4f 49 4e 54 5f 52 45 4c 45 41 53 45 20 20  EPOINT_RELEASE  
10ea0 20 20 31 0a 23 64 65 66 69 6e 65 20 53 41 56 45    1.#define SAVE
10eb0 50 4f 49 4e 54 5f 52 4f 4c 4c 42 41 43 4b 20 20  POINT_ROLLBACK  
10ec0 20 32 0a 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20   2.../*.** Each 
10ed0 53 51 4c 69 74 65 20 6d 6f 64 75 6c 65 20 28 76  SQLite module (v
10ee0 69 72 74 75 61 6c 20 74 61 62 6c 65 20 64 65 66  irtual table def
10ef0 69 6e 69 74 69 6f 6e 29 20 69 73 20 64 65 66 69  inition) is defi
10f00 6e 65 64 20 62 79 20 61 6e 0a 2a 2a 20 69 6e 73  ned by an.** ins
10f10 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c  tance of the fol
10f20 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65  lowing structure
10f30 2c 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20  , stored in the 
10f40 73 71 6c 69 74 65 33 2e 61 4d 6f 64 75 6c 65 0a  sqlite3.aModule.
10f50 2a 2a 20 68 61 73 68 20 74 61 62 6c 65 2e 0a 2a  ** hash table..*
10f60 2f 0a 73 74 72 75 63 74 20 4d 6f 64 75 6c 65 20  /.struct Module 
10f70 7b 0a 20 20 63 6f 6e 73 74 20 73 71 6c 69 74 65  {.  const sqlite
10f80 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c  3_module *pModul
10f90 65 3b 20 20 20 20 20 20 20 2f 2a 20 43 61 6c 6c  e;       /* Call
10fa0 62 61 63 6b 20 70 6f 69 6e 74 65 72 73 20 2a 2f  back pointers */
10fb0 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  .  const char *z
10fc0 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20 20  Name;           
10fd0 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20          /* Name 
10fe0 70 61 73 73 65 64 20 74 6f 20 63 72 65 61 74 65  passed to create
10ff0 5f 6d 6f 64 75 6c 65 28 29 20 2a 2f 0a 20 20 76  _module() */.  v
11000 6f 69 64 20 2a 70 41 75 78 3b 20 20 20 20 20 20  oid *pAux;      
11010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11020 20 20 20 20 2f 2a 20 70 41 75 78 20 70 61 73 73      /* pAux pass
11030 65 64 20 74 6f 20 63 72 65 61 74 65 5f 6d 6f 64  ed to create_mod
11040 75 6c 65 28 29 20 2a 2f 0a 20 20 76 6f 69 64 20  ule() */.  void 
11050 28 2a 78 44 65 73 74 72 6f 79 29 28 76 6f 69 64  (*xDestroy)(void
11060 20 2a 29 3b 20 20 20 20 20 20 20 20 20 20 20 20   *);            
11070 2f 2a 20 4d 6f 64 75 6c 65 20 64 65 73 74 72 75  /* Module destru
11080 63 74 6f 72 20 66 75 6e 63 74 69 6f 6e 20 2a 2f  ctor function */
11090 0a 20 20 54 61 62 6c 65 20 2a 70 45 70 6f 54 61  .  Table *pEpoTa
110a0 62 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  b;              
110b0 20 20 20 20 20 20 20 20 2f 2a 20 45 70 6f 6e 79          /* Epony
110c0 6d 6f 75 73 20 74 61 62 6c 65 20 66 6f 72 20 74  mous table for t
110d0 68 69 73 20 6d 6f 64 75 6c 65 20 2a 2f 0a 7d 3b  his module */.};
110e0 0a 0a 2f 2a 0a 2a 2a 20 69 6e 66 6f 72 6d 61 74  ../*.** informat
110f0 69 6f 6e 20 61 62 6f 75 74 20 65 61 63 68 20 63  ion about each c
11100 6f 6c 75 6d 6e 20 6f 66 20 61 6e 20 53 51 4c 20  olumn of an SQL 
11110 74 61 62 6c 65 20 69 73 20 68 65 6c 64 20 69 6e  table is held in
11120 20 61 6e 20 69 6e 73 74 61 6e 63 65 0a 2a 2a 20   an instance.** 
11130 6f 66 20 74 68 69 73 20 73 74 72 75 63 74 75 72  of this structur
11140 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 43 6f 6c  e..*/.struct Col
11150 75 6d 6e 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e  umn {.  char *zN
11160 61 6d 65 3b 20 20 20 20 20 2f 2a 20 4e 61 6d 65  ame;     /* Name
11170 20 6f 66 20 74 68 69 73 20 63 6f 6c 75 6d 6e 2c   of this column,
11180 20 5c 30 30 30 2c 20 74 68 65 6e 20 74 68 65 20   \000, then the 
11190 74 79 70 65 20 2a 2f 0a 20 20 45 78 70 72 20 2a  type */.  Expr *
111a0 70 44 66 6c 74 3b 20 20 20 20 20 2f 2a 20 44 65  pDflt;     /* De
111b0 66 61 75 6c 74 20 76 61 6c 75 65 20 6f 66 20 74  fault value of t
111c0 68 69 73 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20  his column */.  
111d0 63 68 61 72 20 2a 7a 43 6f 6c 6c 3b 20 20 20 20  char *zColl;    
111e0 20 2f 2a 20 43 6f 6c 6c 61 74 69 6e 67 20 73 65   /* Collating se
111f0 71 75 65 6e 63 65 2e 20 20 49 66 20 4e 55 4c 4c  quence.  If NULL
11200 2c 20 75 73 65 20 74 68 65 20 64 65 66 61 75 6c  , use the defaul
11210 74 20 2a 2f 0a 20 20 75 38 20 6e 6f 74 4e 75 6c  t */.  u8 notNul
11220 6c 3b 20 20 20 20 20 20 2f 2a 20 41 6e 20 4f 45  l;      /* An OE
11230 5f 20 63 6f 64 65 20 66 6f 72 20 68 61 6e 64 6c  _ code for handl
11240 69 6e 67 20 61 20 4e 4f 54 20 4e 55 4c 4c 20 63  ing a NOT NULL c
11250 6f 6e 73 74 72 61 69 6e 74 20 2a 2f 0a 20 20 63  onstraint */.  c
11260 68 61 72 20 61 66 66 69 6e 69 74 79 3b 20 20 20  har affinity;   
11270 2f 2a 20 4f 6e 65 20 6f 66 20 74 68 65 20 53 51  /* One of the SQ
11280 4c 49 54 45 5f 41 46 46 5f 2e 2e 2e 20 76 61 6c  LITE_AFF_... val
11290 75 65 73 20 2a 2f 0a 20 20 75 38 20 73 7a 45 73  ues */.  u8 szEs
112a0 74 3b 20 20 20 20 20 20 20 20 2f 2a 20 45 73 74  t;        /* Est
112b0 69 6d 61 74 65 64 20 73 69 7a 65 20 6f 66 20 76  imated size of v
112c0 61 6c 75 65 20 69 6e 20 74 68 69 73 20 63 6f 6c  alue in this col
112d0 75 6d 6e 2e 20 73 69 7a 65 6f 66 28 49 4e 54 29  umn. sizeof(INT)
112e0 3d 3d 31 20 2a 2f 0a 20 20 75 38 20 63 6f 6c 46  ==1 */.  u8 colF
112f0 6c 61 67 73 3b 20 20 20 20 20 2f 2a 20 42 6f 6f  lags;     /* Boo
11300 6c 65 61 6e 20 70 72 6f 70 65 72 74 69 65 73 2e  lean properties.
11310 20 20 53 65 65 20 43 4f 4c 46 4c 41 47 5f 20 64    See COLFLAG_ d
11320 65 66 69 6e 65 73 20 62 65 6c 6f 77 20 2a 2f 0a  efines below */.
11330 7d 3b 0a 0a 2f 2a 20 41 6c 6c 6f 77 65 64 20 76  };../* Allowed v
11340 61 6c 75 65 73 20 66 6f 72 20 43 6f 6c 75 6d 6e  alues for Column
11350 2e 63 6f 6c 46 6c 61 67 73 3a 0a 2a 2f 0a 23 64  .colFlags:.*/.#d
11360 65 66 69 6e 65 20 43 4f 4c 46 4c 41 47 5f 50 52  efine COLFLAG_PR
11370 49 4d 4b 45 59 20 20 30 78 30 30 30 31 20 20 20  IMKEY  0x0001   
11380 20 2f 2a 20 43 6f 6c 75 6d 6e 20 69 73 20 70 61   /* Column is pa
11390 72 74 20 6f 66 20 74 68 65 20 70 72 69 6d 61 72  rt of the primar
113a0 79 20 6b 65 79 20 2a 2f 0a 23 64 65 66 69 6e 65  y key */.#define
113b0 20 43 4f 4c 46 4c 41 47 5f 48 49 44 44 45 4e 20   COLFLAG_HIDDEN 
113c0 20 20 30 78 30 30 30 32 20 20 20 20 2f 2a 20 41    0x0002    /* A
113d0 20 68 69 64 64 65 6e 20 63 6f 6c 75 6d 6e 20 69   hidden column i
113e0 6e 20 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c  n a virtual tabl
113f0 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 43 4f 4c  e */.#define COL
11400 46 4c 41 47 5f 48 41 53 54 59 50 45 20 20 30 78  FLAG_HASTYPE  0x
11410 30 30 30 34 20 20 20 20 2f 2a 20 54 79 70 65 20  0004    /* Type 
11420 6e 61 6d 65 20 66 6f 6c 6c 6f 77 73 20 63 6f 6c  name follows col
11430 75 6d 6e 20 6e 61 6d 65 20 2a 2f 0a 23 64 65 66  umn name */.#def
11440 69 6e 65 20 43 4f 4c 46 4c 41 47 5f 55 4e 49 51  ine COLFLAG_UNIQ
11450 55 45 20 20 20 30 78 30 30 30 38 20 20 20 20 2f  UE   0x0008    /
11460 2a 20 43 6f 6c 75 6d 6e 20 64 65 66 20 63 6f 6e  * Column def con
11470 74 61 69 6e 73 20 22 55 4e 49 51 55 45 22 20 6f  tains "UNIQUE" o
11480 72 20 22 50 4b 22 20 2a 2f 0a 23 64 65 66 69 6e  r "PK" */.#defin
11490 65 20 43 4f 4c 46 4c 41 47 5f 53 4f 52 54 45 52  e COLFLAG_SORTER
114a0 52 45 46 20 30 78 30 30 31 30 20 20 20 2f 2a 20  REF 0x0010   /* 
114b0 55 73 65 20 73 6f 72 74 65 72 2d 72 65 66 73 20  Use sorter-refs 
114c0 77 69 74 68 20 74 68 69 73 20 63 6f 6c 75 6d 6e  with this column
114d0 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 20 22 43 6f   */../*.** A "Co
114e0 6c 6c 61 74 69 6e 67 20 53 65 71 75 65 6e 63 65  llating Sequence
114f0 22 20 69 73 20 64 65 66 69 6e 65 64 20 62 79 20  " is defined by 
11500 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  an instance of t
11510 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 0a 2a 2a 20  he following.** 
11520 73 74 72 75 63 74 75 72 65 2e 20 43 6f 6e 63 65  structure. Conce
11530 70 74 75 61 6c 6c 79 2c 20 61 20 63 6f 6c 6c 61  ptually, a colla
11540 74 69 6e 67 20 73 65 71 75 65 6e 63 65 20 63 6f  ting sequence co
11550 6e 73 69 73 74 73 20 6f 66 20 61 20 6e 61 6d 65  nsists of a name
11560 20 61 6e 64 0a 2a 2a 20 61 20 63 6f 6d 70 61 72   and.** a compar
11570 69 73 6f 6e 20 72 6f 75 74 69 6e 65 20 74 68 61  ison routine tha
11580 74 20 64 65 66 69 6e 65 73 20 74 68 65 20 6f 72  t defines the or
11590 64 65 72 20 6f 66 20 74 68 61 74 20 73 65 71 75  der of that sequ
115a0 65 6e 63 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 43  ence..**.** If C
115b0 6f 6c 6c 53 65 71 2e 78 43 6d 70 20 69 73 20 4e  ollSeq.xCmp is N
115c0 55 4c 4c 2c 20 69 74 20 6d 65 61 6e 73 20 74 68  ULL, it means th
115d0 61 74 20 74 68 65 0a 2a 2a 20 63 6f 6c 6c 61 74  at the.** collat
115e0 69 6e 67 20 73 65 71 75 65 6e 63 65 20 69 73 20  ing sequence is 
115f0 75 6e 64 65 66 69 6e 65 64 2e 20 20 49 6e 64 69  undefined.  Indi
11600 63 65 73 20 62 75 69 6c 74 20 6f 6e 20 61 6e 20  ces built on an 
11610 75 6e 64 65 66 69 6e 65 64 0a 2a 2a 20 63 6f 6c  undefined.** col
11620 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 20  lating sequence 
11630 6d 61 79 20 6e 6f 74 20 62 65 20 72 65 61 64 20  may not be read 
11640 6f 72 20 77 72 69 74 74 65 6e 2e 0a 2a 2f 0a 73  or written..*/.s
11650 74 72 75 63 74 20 43 6f 6c 6c 53 65 71 20 7b 0a  truct CollSeq {.
11660 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20    char *zName;  
11670 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20          /* Name 
11680 6f 66 20 74 68 65 20 63 6f 6c 6c 61 74 69 6e 67  of the collating
11690 20 73 65 71 75 65 6e 63 65 2c 20 55 54 46 2d 38   sequence, UTF-8
116a0 20 65 6e 63 6f 64 65 64 20 2a 2f 0a 20 20 75 38   encoded */.  u8
116b0 20 65 6e 63 3b 20 20 20 20 20 20 20 20 20 20 20   enc;           
116c0 20 20 20 20 2f 2a 20 54 65 78 74 20 65 6e 63 6f      /* Text enco
116d0 64 69 6e 67 20 68 61 6e 64 6c 65 64 20 62 79 20  ding handled by 
116e0 78 43 6d 70 28 29 20 2a 2f 0a 20 20 76 6f 69 64  xCmp() */.  void
116f0 20 2a 70 55 73 65 72 3b 20 20 20 20 20 20 20 20   *pUser;        
11700 20 20 2f 2a 20 46 69 72 73 74 20 61 72 67 75 6d    /* First argum
11710 65 6e 74 20 74 6f 20 78 43 6d 70 28 29 20 2a 2f  ent to xCmp() */
11720 0a 20 20 69 6e 74 20 28 2a 78 43 6d 70 29 28 76  .  int (*xCmp)(v
11730 6f 69 64 2a 2c 69 6e 74 2c 20 63 6f 6e 73 74 20  oid*,int, const 
11740 76 6f 69 64 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73  void*, int, cons
11750 74 20 76 6f 69 64 2a 29 3b 0a 20 20 76 6f 69 64  t void*);.  void
11760 20 28 2a 78 44 65 6c 29 28 76 6f 69 64 2a 29 3b   (*xDel)(void*);
11770 20 20 2f 2a 20 44 65 73 74 72 75 63 74 6f 72 20    /* Destructor 
11780 66 6f 72 20 70 55 73 65 72 20 2a 2f 0a 7d 3b 0a  for pUser */.};.
11790 0a 2f 2a 0a 2a 2a 20 41 20 73 6f 72 74 20 6f 72  ./*.** A sort or
117a0 64 65 72 20 63 61 6e 20 62 65 20 65 69 74 68 65  der can be eithe
117b0 72 20 41 53 43 20 6f 72 20 44 45 53 43 2e 0a 2a  r ASC or DESC..*
117c0 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
117d0 5f 53 4f 5f 41 53 43 20 20 20 20 20 20 20 30 20  _SO_ASC       0 
117e0 20 2f 2a 20 53 6f 72 74 20 69 6e 20 61 73 63 65   /* Sort in asce
117f0 6e 64 69 6e 67 20 6f 72 64 65 72 20 2a 2f 0a 23  nding order */.#
11800 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 4f  define SQLITE_SO
11810 5f 44 45 53 43 20 20 20 20 20 20 31 20 20 2f 2a  _DESC      1  /*
11820 20 53 6f 72 74 20 69 6e 20 61 73 63 65 6e 64 69   Sort in ascendi
11830 6e 67 20 6f 72 64 65 72 20 2a 2f 0a 23 64 65 66  ng order */.#def
11840 69 6e 65 20 53 51 4c 49 54 45 5f 53 4f 5f 55 4e  ine SQLITE_SO_UN
11850 44 45 46 49 4e 45 44 20 2d 31 20 2f 2a 20 4e 6f  DEFINED -1 /* No
11860 20 73 6f 72 74 20 6f 72 64 65 72 20 73 70 65 63   sort order spec
11870 69 66 69 65 64 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20  ified */../*.** 
11880 43 6f 6c 75 6d 6e 20 61 66 66 69 6e 69 74 79 20  Column affinity 
11890 74 79 70 65 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  types..**.** The
118a0 73 65 20 75 73 65 64 20 74 6f 20 68 61 76 65 20  se used to have 
118b0 6d 6e 65 6d 6f 6e 69 63 20 6e 61 6d 65 20 6c 69  mnemonic name li
118c0 6b 65 20 27 69 27 20 66 6f 72 20 53 51 4c 49 54  ke 'i' for SQLIT
118d0 45 5f 41 46 46 5f 49 4e 54 45 47 45 52 20 61 6e  E_AFF_INTEGER an
118e0 64 0a 2a 2a 20 27 74 27 20 66 6f 72 20 53 51 4c  d.** 't' for SQL
118f0 49 54 45 5f 41 46 46 5f 54 45 58 54 2e 20 20 42  ITE_AFF_TEXT.  B
11900 75 74 20 77 65 20 63 61 6e 20 73 61 76 65 20 61  ut we can save a
11910 20 6c 69 74 74 6c 65 20 73 70 61 63 65 20 61 6e   little space an
11920 64 20 69 6d 70 72 6f 76 65 0a 2a 2a 20 74 68 65  d improve.** the
11930 20 73 70 65 65 64 20 61 20 6c 69 74 74 6c 65 20   speed a little 
11940 62 79 20 6e 75 6d 62 65 72 69 6e 67 20 74 68 65  by numbering the
11950 20 76 61 6c 75 65 73 20 63 6f 6e 73 65 63 75 74   values consecut
11960 69 76 65 6c 79 2e 0a 2a 2a 0a 2a 2a 20 42 75 74  ively..**.** But
11970 20 72 61 74 68 65 72 20 74 68 61 6e 20 73 74 61   rather than sta
11980 72 74 20 77 69 74 68 20 30 20 6f 72 20 31 2c 20  rt with 0 or 1, 
11990 77 65 20 62 65 67 69 6e 20 77 69 74 68 20 27 41  we begin with 'A
119a0 27 2e 20 20 54 68 61 74 20 77 61 79 2c 0a 2a 2a  '.  That way,.**
119b0 20 77 68 65 6e 20 6d 75 6c 74 69 70 6c 65 20 61   when multiple a
119c0 66 66 69 6e 69 74 79 20 74 79 70 65 73 20 61 72  ffinity types ar
119d0 65 20 63 6f 6e 63 61 74 65 6e 61 74 65 64 20 69  e concatenated i
119e0 6e 74 6f 20 61 20 73 74 72 69 6e 67 20 61 6e 64  nto a string and
119f0 0a 2a 2a 20 75 73 65 64 20 61 73 20 74 68 65 20  .** used as the 
11a00 50 34 20 6f 70 65 72 61 6e 64 2c 20 74 68 65 79  P4 operand, they
11a10 20 77 69 6c 6c 20 62 65 20 6d 6f 72 65 20 72 65   will be more re
11a20 61 64 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 4e 6f  adable..**.** No
11a30 74 65 20 61 6c 73 6f 20 74 68 61 74 20 74 68 65  te also that the
11a40 20 6e 75 6d 65 72 69 63 20 74 79 70 65 73 20 61   numeric types a
11a50 72 65 20 67 72 6f 75 70 65 64 20 74 6f 67 65 74  re grouped toget
11a60 68 65 72 20 73 6f 20 74 68 61 74 20 74 65 73 74  her so that test
11a70 69 6e 67 0a 2a 2a 20 66 6f 72 20 61 20 6e 75 6d  ing.** for a num
11a80 65 72 69 63 20 74 79 70 65 20 69 73 20 61 20 73  eric type is a s
11a90 69 6e 67 6c 65 20 63 6f 6d 70 61 72 69 73 6f 6e  ingle comparison
11aa0 2e 20 20 41 6e 64 20 74 68 65 20 42 4c 4f 42 20  .  And the BLOB 
11ab0 74 79 70 65 20 69 73 20 66 69 72 73 74 2e 0a 2a  type is first..*
11ac0 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
11ad0 5f 41 46 46 5f 42 4c 4f 42 20 20 20 20 20 27 41  _AFF_BLOB     'A
11ae0 27 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  '.#define SQLITE
11af0 5f 41 46 46 5f 54 45 58 54 20 20 20 20 20 27 42  _AFF_TEXT     'B
11b00 27 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  '.#define SQLITE
11b10 5f 41 46 46 5f 4e 55 4d 45 52 49 43 20 20 27 43  _AFF_NUMERIC  'C
11b20 27 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  '.#define SQLITE
11b30 5f 41 46 46 5f 49 4e 54 45 47 45 52 20 20 27 44  _AFF_INTEGER  'D
11b40 27 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  '.#define SQLITE
11b50 5f 41 46 46 5f 52 45 41 4c 20 20 20 20 20 27 45  _AFF_REAL     'E
11b60 27 0a 0a 23 64 65 66 69 6e 65 20 73 71 6c 69 74  '..#define sqlit
11b70 65 33 49 73 4e 75 6d 65 72 69 63 41 66 66 69 6e  e3IsNumericAffin
11b80 69 74 79 28 58 29 20 20 28 28 58 29 3e 3d 53 51  ity(X)  ((X)>=SQ
11b90 4c 49 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49 43  LITE_AFF_NUMERIC
11ba0 29 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 53 51 4c  )../*.** The SQL
11bb0 49 54 45 5f 41 46 46 5f 4d 41 53 4b 20 76 61 6c  ITE_AFF_MASK val
11bc0 75 65 73 20 6d 61 73 6b 73 20 6f 66 66 20 74 68  ues masks off th
11bd0 65 20 73 69 67 6e 69 66 69 63 61 6e 74 20 62 69  e significant bi
11be0 74 73 20 6f 66 20 61 6e 0a 2a 2a 20 61 66 66 69  ts of an.** affi
11bf0 6e 69 74 79 20 76 61 6c 75 65 2e 0a 2a 2f 0a 23  nity value..*/.#
11c00 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 46  define SQLITE_AF
11c10 46 5f 4d 41 53 4b 20 20 20 20 20 30 78 34 37 0a  F_MASK     0x47.
11c20 0a 2f 2a 0a 2a 2a 20 41 64 64 69 74 69 6f 6e 61  ./*.** Additiona
11c30 6c 20 62 69 74 20 76 61 6c 75 65 73 20 74 68 61  l bit values tha
11c40 74 20 63 61 6e 20 62 65 20 4f 52 65 64 20 77 69  t can be ORed wi
11c50 74 68 20 61 6e 20 61 66 66 69 6e 69 74 79 20 77  th an affinity w
11c60 69 74 68 6f 75 74 0a 2a 2a 20 63 68 61 6e 67 69  ithout.** changi
11c70 6e 67 20 74 68 65 20 61 66 66 69 6e 69 74 79 2e  ng the affinity.
11c80 0a 2a 2a 0a 2a 2a 20 54 68 65 20 53 51 4c 49 54  .**.** The SQLIT
11c90 45 5f 4e 4f 54 4e 55 4c 4c 20 66 6c 61 67 20 69  E_NOTNULL flag i
11ca0 73 20 61 20 63 6f 6d 62 69 6e 61 74 69 6f 6e 20  s a combination 
11cb0 6f 66 20 4e 55 4c 4c 45 51 20 61 6e 64 20 4a 55  of NULLEQ and JU
11cc0 4d 50 49 46 4e 55 4c 4c 2e 0a 2a 2a 20 49 74 20  MPIFNULL..** It 
11cd0 63 61 75 73 65 73 20 61 6e 20 61 73 73 65 72 74  causes an assert
11ce0 28 29 20 74 6f 20 66 69 72 65 20 69 66 20 65 69  () to fire if ei
11cf0 74 68 65 72 20 6f 70 65 72 61 6e 64 20 74 6f 20  ther operand to 
11d00 61 20 63 6f 6d 70 61 72 69 73 6f 6e 0a 2a 2a 20  a comparison.** 
11d10 6f 70 65 72 61 74 6f 72 20 69 73 20 4e 55 4c 4c  operator is NULL
11d20 2e 20 20 49 74 20 69 73 20 61 64 64 65 64 20 74  .  It is added t
11d30 6f 20 63 65 72 74 61 69 6e 20 63 6f 6d 70 61 72  o certain compar
11d40 69 73 6f 6e 20 6f 70 65 72 61 74 6f 72 73 20 74  ison operators t
11d50 6f 0a 2a 2a 20 70 72 6f 76 65 20 74 68 61 74 20  o.** prove that 
11d60 74 68 65 20 6f 70 65 72 61 6e 64 73 20 61 72 65  the operands are
11d70 20 61 6c 77 61 79 73 20 4e 4f 54 20 4e 55 4c 4c   always NOT NULL
11d80 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  ..*/.#define SQL
11d90 49 54 45 5f 4b 45 45 50 4e 55 4c 4c 20 20 20 20  ITE_KEEPNULL    
11da0 20 30 78 30 38 20 20 2f 2a 20 55 73 65 64 20 62   0x08  /* Used b
11db0 79 20 76 65 63 74 6f 72 20 3d 3d 20 6f 72 20 3c  y vector == or <
11dc0 3e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  > */.#define SQL
11dd0 49 54 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c 20 20  ITE_JUMPIFNULL  
11de0 20 30 78 31 30 20 20 2f 2a 20 6a 75 6d 70 73 20   0x10  /* jumps 
11df0 69 66 20 65 69 74 68 65 72 20 6f 70 65 72 61 6e  if either operan
11e00 64 20 69 73 20 4e 55 4c 4c 20 2a 2f 0a 23 64 65  d is NULL */.#de
11e10 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 54 4f 52  fine SQLITE_STOR
11e20 45 50 32 20 20 20 20 20 20 30 78 32 30 20 20 2f  EP2      0x20  /
11e30 2a 20 53 74 6f 72 65 20 72 65 73 75 6c 74 20 69  * Store result i
11e40 6e 20 72 65 67 5b 50 32 5d 20 72 61 74 68 65 72  n reg[P2] rather
11e50 20 74 68 61 6e 20 6a 75 6d 70 20 2a 2f 0a 23 64   than jump */.#d
11e60 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e 55 4c  efine SQLITE_NUL
11e70 4c 45 51 20 20 20 20 20 20 20 30 78 38 30 20 20  LEQ       0x80  
11e80 2f 2a 20 4e 55 4c 4c 3d 4e 55 4c 4c 20 2a 2f 0a  /* NULL=NULL */.
11e90 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e  #define SQLITE_N
11ea0 4f 54 4e 55 4c 4c 20 20 20 20 20 20 30 78 39 30  OTNULL      0x90
11eb0 20 20 2f 2a 20 41 73 73 65 72 74 20 74 68 61 74    /* Assert that
11ec0 20 6f 70 65 72 61 6e 64 73 20 61 72 65 20 6e 65   operands are ne
11ed0 76 65 72 20 4e 55 4c 4c 20 2a 2f 0a 0a 2f 2a 0a  ver NULL */../*.
11ee0 2a 2a 20 41 6e 20 6f 62 6a 65 63 74 20 6f 66 20  ** An object of 
11ef0 74 68 69 73 20 74 79 70 65 20 69 73 20 63 72 65  this type is cre
11f00 61 74 65 64 20 66 6f 72 20 65 61 63 68 20 76 69  ated for each vi
11f10 72 74 75 61 6c 20 74 61 62 6c 65 20 70 72 65 73  rtual table pres
11f20 65 6e 74 20 69 6e 0a 2a 2a 20 74 68 65 20 64 61  ent in.** the da
11f30 74 61 62 61 73 65 20 73 63 68 65 6d 61 2e 0a 2a  tabase schema..*
11f40 2a 0a 2a 2a 20 49 66 20 74 68 65 20 64 61 74 61  *.** If the data
11f50 62 61 73 65 20 73 63 68 65 6d 61 20 69 73 20 73  base schema is s
11f60 68 61 72 65 64 2c 20 74 68 65 6e 20 74 68 65 72  hared, then ther
11f70 65 20 69 73 20 6f 6e 65 20 69 6e 73 74 61 6e 63  e is one instanc
11f80 65 20 6f 66 20 74 68 69 73 0a 2a 2a 20 73 74 72  e of this.** str
11f90 75 63 74 75 72 65 20 66 6f 72 20 65 61 63 68 20  ucture for each 
11fa0 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74  database connect
11fb0 69 6f 6e 20 28 73 71 6c 69 74 65 33 2a 29 20 74  ion (sqlite3*) t
11fc0 68 61 74 20 75 73 65 73 20 74 68 65 20 73 68 61  hat uses the sha
11fd0 72 65 64 0a 2a 2a 20 73 63 68 65 6d 61 2e 20 54  red.** schema. T
11fe0 68 69 73 20 69 73 20 62 65 63 61 75 73 65 20 65  his is because e
11ff0 61 63 68 20 64 61 74 61 62 61 73 65 20 63 6f 6e  ach database con
12000 6e 65 63 74 69 6f 6e 20 72 65 71 75 69 72 65 73  nection requires
12010 20 69 74 73 20 6f 77 6e 20 75 6e 69 71 75 65 0a   its own unique.
12020 2a 2a 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  ** instance of t
12030 68 65 20 73 71 6c 69 74 65 33 5f 76 74 61 62 2a  he sqlite3_vtab*
12040 20 68 61 6e 64 6c 65 20 75 73 65 64 20 74 6f 20   handle used to 
12050 61 63 63 65 73 73 20 74 68 65 20 76 69 72 74 75  access the virtu
12060 61 6c 20 74 61 62 6c 65 0a 2a 2a 20 69 6d 70 6c  al table.** impl
12070 65 6d 65 6e 74 61 74 69 6f 6e 2e 20 73 71 6c 69  ementation. sqli
12080 74 65 33 5f 76 74 61 62 2a 20 68 61 6e 64 6c 65  te3_vtab* handle
12090 73 20 63 61 6e 20 6e 6f 74 20 62 65 20 73 68 61  s can not be sha
120a0 72 65 64 20 62 65 74 77 65 65 6e 0a 2a 2a 20 64  red between.** d
120b0 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
120c0 6f 6e 73 2c 20 65 76 65 6e 20 77 68 65 6e 20 74  ons, even when t
120d0 68 65 20 72 65 73 74 20 6f 66 20 74 68 65 20 69  he rest of the i
120e0 6e 2d 6d 65 6d 6f 72 79 20 64 61 74 61 62 61 73  n-memory databas
120f0 65 0a 2a 2a 20 73 63 68 65 6d 61 20 69 73 20 73  e.** schema is s
12100 68 61 72 65 64 2c 20 61 73 20 74 68 65 20 69 6d  hared, as the im
12110 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 74  plementation oft
12120 65 6e 20 73 74 6f 72 65 73 20 74 68 65 20 64 61  en stores the da
12130 74 61 62 61 73 65 0a 2a 2a 20 63 6f 6e 6e 65 63  tabase.** connec
12140 74 69 6f 6e 20 68 61 6e 64 6c 65 20 70 61 73 73  tion handle pass
12150 65 64 20 74 6f 20 69 74 20 76 69 61 20 74 68 65  ed to it via the
12160 20 78 43 6f 6e 6e 65 63 74 28 29 20 6f 72 20 78   xConnect() or x
12170 43 72 65 61 74 65 28 29 20 6d 65 74 68 6f 64 0a  Create() method.
12180 2a 2a 20 64 75 72 69 6e 67 20 69 6e 69 74 69 61  ** during initia
12190 6c 69 7a 61 74 69 6f 6e 20 69 6e 74 65 72 6e 61  lization interna
121a0 6c 6c 79 2e 20 54 68 69 73 20 64 61 74 61 62 61  lly. This databa
121b0 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61  se connection ha
121c0 6e 64 6c 65 20 6d 61 79 0a 2a 2a 20 74 68 65 6e  ndle may.** then
121d0 20 62 65 20 75 73 65 64 20 62 79 20 74 68 65 20   be used by the 
121e0 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 69 6d  virtual table im
121f0 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 74 6f 20  plementation to 
12200 61 63 63 65 73 73 20 72 65 61 6c 20 74 61 62 6c  access real tabl
12210 65 73 0a 2a 2a 20 77 69 74 68 69 6e 20 74 68 65  es.** within the
12220 20 64 61 74 61 62 61 73 65 2e 20 53 6f 20 74 68   database. So th
12230 61 74 20 74 68 65 79 20 61 70 70 65 61 72 20 61  at they appear a
12240 73 20 70 61 72 74 20 6f 66 20 74 68 65 20 63 61  s part of the ca
12250 6c 6c 65 72 73 0a 2a 2a 20 74 72 61 6e 73 61 63  llers.** transac
12260 74 69 6f 6e 2c 20 74 68 65 73 65 20 61 63 63 65  tion, these acce
12270 73 73 65 73 20 6e 65 65 64 20 74 6f 20 62 65 20  sses need to be 
12280 6d 61 64 65 20 76 69 61 20 74 68 65 20 73 61 6d  made via the sam
12290 65 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 63 6f  e database.** co
122a0 6e 6e 65 63 74 69 6f 6e 20 61 73 20 74 68 61 74  nnection as that
122b0 20 75 73 65 64 20 74 6f 20 65 78 65 63 75 74 65   used to execute
122c0 20 53 51 4c 20 6f 70 65 72 61 74 69 6f 6e 73 20   SQL operations 
122d0 6f 6e 20 74 68 65 20 76 69 72 74 75 61 6c 20 74  on the virtual t
122e0 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 41 6c 6c 20  able..**.** All 
122f0 56 54 61 62 6c 65 20 6f 62 6a 65 63 74 73 20 74  VTable objects t
12300 68 61 74 20 63 6f 72 72 65 73 70 6f 6e 64 20 74  hat correspond t
12310 6f 20 61 20 73 69 6e 67 6c 65 20 74 61 62 6c 65  o a single table
12320 20 69 6e 20 61 20 73 68 61 72 65 64 0a 2a 2a 20   in a shared.** 
12330 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 20  database schema 
12340 61 72 65 20 69 6e 69 74 69 61 6c 6c 79 20 73 74  are initially st
12350 6f 72 65 64 20 69 6e 20 61 20 6c 69 6e 6b 65 64  ored in a linked
12360 2d 6c 69 73 74 20 70 6f 69 6e 74 65 64 20 74 6f  -list pointed to
12370 20 62 79 0a 2a 2a 20 74 68 65 20 54 61 62 6c 65   by.** the Table
12380 2e 70 56 54 61 62 6c 65 20 6d 65 6d 62 65 72 20  .pVTable member 
12390 76 61 72 69 61 62 6c 65 20 6f 66 20 74 68 65 20  variable of the 
123a0 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 54 61  corresponding Ta
123b0 62 6c 65 20 6f 62 6a 65 63 74 2e 0a 2a 2a 20 57  ble object..** W
123c0 68 65 6e 20 61 6e 20 73 71 6c 69 74 65 33 5f 70  hen an sqlite3_p
123d0 72 65 70 61 72 65 28 29 20 6f 70 65 72 61 74 69  repare() operati
123e0 6f 6e 20 69 73 20 72 65 71 75 69 72 65 64 20 74  on is required t
123f0 6f 20 61 63 63 65 73 73 20 74 68 65 20 76 69 72  o access the vir
12400 74 75 61 6c 0a 2a 2a 20 74 61 62 6c 65 2c 20 69  tual.** table, i
12410 74 20 73 65 61 72 63 68 65 73 20 74 68 65 20 6c  t searches the l
12420 69 73 74 20 66 6f 72 20 74 68 65 20 56 54 61 62  ist for the VTab
12430 6c 65 20 74 68 61 74 20 63 6f 72 72 65 73 70 6f  le that correspo
12440 6e 64 73 20 74 6f 20 74 68 65 0a 2a 2a 20 64 61  nds to the.** da
12450 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f  tabase connectio
12460 6e 20 64 6f 69 6e 67 20 74 68 65 20 70 72 65 70  n doing the prep
12470 61 72 69 6e 67 20 73 6f 20 61 73 20 74 6f 20 75  aring so as to u
12480 73 65 20 74 68 65 20 63 6f 72 72 65 63 74 0a 2a  se the correct.*
12490 2a 20 73 71 6c 69 74 65 33 5f 76 74 61 62 2a 20  * sqlite3_vtab* 
124a0 68 61 6e 64 6c 65 20 69 6e 20 74 68 65 20 63 6f  handle in the co
124b0 6d 70 69 6c 65 64 20 71 75 65 72 79 2e 0a 2a 2a  mpiled query..**
124c0 0a 2a 2a 20 57 68 65 6e 20 61 6e 20 69 6e 2d 6d  .** When an in-m
124d0 65 6d 6f 72 79 20 54 61 62 6c 65 20 6f 62 6a 65  emory Table obje
124e0 63 74 20 69 73 20 64 65 6c 65 74 65 64 20 28 66  ct is deleted (f
124f0 6f 72 20 65 78 61 6d 70 6c 65 20 77 68 65 6e 20  or example when 
12500 74 68 65 0a 2a 2a 20 73 63 68 65 6d 61 20 69 73  the.** schema is
12510 20 62 65 69 6e 67 20 72 65 6c 6f 61 64 65 64 20   being reloaded 
12520 66 6f 72 20 73 6f 6d 65 20 72 65 61 73 6f 6e 29  for some reason)
12530 2c 20 74 68 65 20 56 54 61 62 6c 65 20 6f 62 6a  , the VTable obj
12540 65 63 74 73 20 61 72 65 20 6e 6f 74 0a 2a 2a 20  ects are not.** 
12550 64 65 6c 65 74 65 64 20 61 6e 64 20 74 68 65 20  deleted and the 
12560 73 71 6c 69 74 65 33 5f 76 74 61 62 2a 20 68 61  sqlite3_vtab* ha
12570 6e 64 6c 65 73 20 61 72 65 20 6e 6f 74 20 78 44  ndles are not xD
12580 69 73 63 6f 6e 6e 65 63 74 28 29 65 64 0a 2a 2a  isconnect()ed.**
12590 20 69 6d 6d 65 64 69 61 74 65 6c 79 2e 20 49 6e   immediately. In
125a0 73 74 65 61 64 2c 20 74 68 65 79 20 61 72 65 20  stead, they are 
125b0 6d 6f 76 65 64 20 66 72 6f 6d 20 74 68 65 20 54  moved from the T
125c0 61 62 6c 65 2e 70 56 54 61 62 6c 65 20 6c 69 73  able.pVTable lis
125d0 74 20 74 6f 0a 2a 2a 20 61 6e 6f 74 68 65 72 20  t to.** another 
125e0 6c 69 6e 6b 65 64 20 6c 69 73 74 20 68 65 61 64  linked list head
125f0 65 64 20 62 79 20 74 68 65 20 73 71 6c 69 74 65  ed by the sqlite
12600 33 2e 70 44 69 73 63 6f 6e 6e 65 63 74 20 6d 65  3.pDisconnect me
12610 6d 62 65 72 20 6f 66 20 74 68 65 0a 2a 2a 20 63  mber of the.** c
12620 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 73 71 6c  orresponding sql
12630 69 74 65 33 20 73 74 72 75 63 74 75 72 65 2e 20  ite3 structure. 
12640 54 68 65 79 20 61 72 65 20 74 68 65 6e 20 64 65  They are then de
12650 6c 65 74 65 64 2f 78 44 69 73 63 6f 6e 6e 65 63  leted/xDisconnec
12660 74 65 64 0a 2a 2a 20 6e 65 78 74 20 74 69 6d 65  ted.** next time
12670 20 61 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20   a statement is 
12680 70 72 65 70 61 72 65 64 20 75 73 69 6e 67 20 73  prepared using s
12690 61 69 64 20 73 71 6c 69 74 65 33 2a 2e 20 54 68  aid sqlite3*. Th
126a0 69 73 20 69 73 20 64 6f 6e 65 0a 2a 2a 20 74 6f  is is done.** to
126b0 20 61 76 6f 69 64 20 64 65 61 64 6c 6f 63 6b 20   avoid deadlock 
126c0 69 73 73 75 65 73 20 69 6e 76 6f 6c 76 69 6e 67  issues involving
126d0 20 6d 75 6c 74 69 70 6c 65 20 73 71 6c 69 74 65   multiple sqlite
126e0 33 2e 6d 75 74 65 78 20 6d 75 74 65 78 65 73 2e  3.mutex mutexes.
126f0 0a 2a 2a 20 52 65 66 65 72 20 74 6f 20 63 6f 6d  .** Refer to com
12700 6d 65 6e 74 73 20 61 62 6f 76 65 20 66 75 6e 63  ments above func
12710 74 69 6f 6e 20 73 71 6c 69 74 65 33 56 74 61 62  tion sqlite3Vtab
12720 55 6e 6c 6f 63 6b 4c 69 73 74 28 29 20 66 6f 72  UnlockList() for
12730 20 61 6e 0a 2a 2a 20 65 78 70 6c 61 6e 61 74 69   an.** explanati
12740 6f 6e 20 61 73 20 74 6f 20 77 68 79 20 69 74 20  on as to why it 
12750 69 73 20 73 61 66 65 20 74 6f 20 61 64 64 20 61  is safe to add a
12760 6e 20 65 6e 74 72 79 20 74 6f 20 61 6e 20 73 71  n entry to an sq
12770 6c 69 74 65 33 2e 70 44 69 73 63 6f 6e 6e 65 63  lite3.pDisconnec
12780 74 0a 2a 2a 20 6c 69 73 74 20 77 69 74 68 6f 75  t.** list withou
12790 74 20 68 6f 6c 64 69 6e 67 20 74 68 65 20 63 6f  t holding the co
127a0 72 72 65 73 70 6f 6e 64 69 6e 67 20 73 71 6c 69  rresponding sqli
127b0 74 65 33 2e 6d 75 74 65 78 20 6d 75 74 65 78 2e  te3.mutex mutex.
127c0 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6d 65 6d 6f 72  .**.** The memor
127d0 79 20 66 6f 72 20 6f 62 6a 65 63 74 73 20 6f 66  y for objects of
127e0 20 74 68 69 73 20 74 79 70 65 20 69 73 20 61 6c   this type is al
127f0 77 61 79 73 20 61 6c 6c 6f 63 61 74 65 64 20 62  ways allocated b
12800 79 0a 2a 2a 20 73 71 6c 69 74 65 33 44 62 4d 61  y.** sqlite3DbMa
12810 6c 6c 6f 63 28 29 2c 20 75 73 69 6e 67 20 74 68  lloc(), using th
12820 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e  e connection han
12830 64 6c 65 20 73 74 6f 72 65 64 20 69 6e 20 56 54  dle stored in VT
12840 61 62 6c 65 2e 64 62 20 61 73 0a 2a 2a 20 74 68  able.db as.** th
12850 65 20 66 69 72 73 74 20 61 72 67 75 6d 65 6e 74  e first argument
12860 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 56 54 61 62  ..*/.struct VTab
12870 6c 65 20 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a  le {.  sqlite3 *
12880 64 62 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  db;             
12890 20 2f 2a 20 44 61 74 61 62 61 73 65 20 63 6f 6e   /* Database con
128a0 6e 65 63 74 69 6f 6e 20 61 73 73 6f 63 69 61 74  nection associat
128b0 65 64 20 77 69 74 68 20 74 68 69 73 20 74 61 62  ed with this tab
128c0 6c 65 20 2a 2f 0a 20 20 4d 6f 64 75 6c 65 20 2a  le */.  Module *
128d0 70 4d 6f 64 3b 20 20 20 20 20 20 20 20 20 20 20  pMod;           
128e0 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20    /* Pointer to 
128f0 6d 6f 64 75 6c 65 20 69 6d 70 6c 65 6d 65 6e 74  module implement
12900 61 74 69 6f 6e 20 2a 2f 0a 20 20 73 71 6c 69 74  ation */.  sqlit
12910 65 33 5f 76 74 61 62 20 2a 70 56 74 61 62 3b 20  e3_vtab *pVtab; 
12920 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20       /* Pointer 
12930 74 6f 20 76 74 61 62 20 69 6e 73 74 61 6e 63 65  to vtab instance
12940 20 2a 2f 0a 20 20 69 6e 74 20 6e 52 65 66 3b 20   */.  int nRef; 
12950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12960 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 70 6f 69  /* Number of poi
12970 6e 74 65 72 73 20 74 6f 20 74 68 69 73 20 73 74  nters to this st
12980 72 75 63 74 75 72 65 20 2a 2f 0a 20 20 75 38 20  ructure */.  u8 
12990 62 43 6f 6e 73 74 72 61 69 6e 74 3b 20 20 20 20  bConstraint;    
129a0 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69         /* True i
129b0 66 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 61 72  f constraints ar
129c0 65 20 73 75 70 70 6f 72 74 65 64 20 2a 2f 0a 20  e supported */. 
129d0 20 69 6e 74 20 69 53 61 76 65 70 6f 69 6e 74 3b   int iSavepoint;
129e0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 65             /* De
129f0 70 74 68 20 6f 66 20 74 68 65 20 53 41 56 45 50  pth of the SAVEP
12a00 4f 49 4e 54 20 73 74 61 63 6b 20 2a 2f 0a 20 20  OINT stack */.  
12a10 56 54 61 62 6c 65 20 2a 70 4e 65 78 74 3b 20 20  VTable *pNext;  
12a20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 78            /* Nex
12a30 74 20 69 6e 20 6c 69 6e 6b 65 64 20 6c 69 73 74  t in linked list
12a40 20 28 73 65 65 20 61 62 6f 76 65 29 20 2a 2f 0a   (see above) */.
12a50 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 73 63  };../*.** The sc
12a60 68 65 6d 61 20 66 6f 72 20 65 61 63 68 20 53 51  hema for each SQ
12a70 4c 20 74 61 62 6c 65 20 61 6e 64 20 76 69 65 77  L table and view
12a80 20 69 73 20 72 65 70 72 65 73 65 6e 74 65 64 20   is represented 
12a90 69 6e 20 6d 65 6d 6f 72 79 0a 2a 2a 20 62 79 20  in memory.** by 
12aa0 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  an instance of t
12ab0 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72  he following str
12ac0 75 63 74 75 72 65 2e 0a 2a 2f 0a 73 74 72 75 63  ucture..*/.struc
12ad0 74 20 54 61 62 6c 65 20 7b 0a 20 20 63 68 61 72  t Table {.  char
12ae0 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20   *zName;        
12af0 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65 20   /* Name of the 
12b00 74 61 62 6c 65 20 6f 72 20 76 69 65 77 20 2a 2f  table or view */
12b10 0a 20 20 43 6f 6c 75 6d 6e 20 2a 61 43 6f 6c 3b  .  Column *aCol;
12b20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 66 6f 72          /* Infor
12b30 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 65 61 63  mation about eac
12b40 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 49 6e  h column */.  In
12b50 64 65 78 20 2a 70 49 6e 64 65 78 3b 20 20 20 20  dex *pIndex;    
12b60 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 53 51     /* List of SQ
12b70 4c 20 69 6e 64 65 78 65 73 20 6f 6e 20 74 68 69  L indexes on thi
12b80 73 20 74 61 62 6c 65 2e 20 2a 2f 0a 20 20 53 65  s table. */.  Se
12b90 6c 65 63 74 20 2a 70 53 65 6c 65 63 74 3b 20 20  lect *pSelect;  
12ba0 20 20 20 2f 2a 20 4e 55 4c 4c 20 66 6f 72 20 74     /* NULL for t
12bb0 61 62 6c 65 73 2e 20 20 50 6f 69 6e 74 73 20 74  ables.  Points t
12bc0 6f 20 64 65 66 69 6e 69 74 69 6f 6e 20 69 66 20  o definition if 
12bd0 61 20 76 69 65 77 2e 20 2a 2f 0a 20 20 46 4b 65  a view. */.  FKe
12be0 79 20 2a 70 46 4b 65 79 3b 20 20 20 20 20 20 20  y *pFKey;       
12bf0 20 20 2f 2a 20 4c 69 6e 6b 65 64 20 6c 69 73 74    /* Linked list
12c00 20 6f 66 20 61 6c 6c 20 66 6f 72 65 69 67 6e 20   of all foreign 
12c10 6b 65 79 73 20 69 6e 20 74 68 69 73 20 74 61 62  keys in this tab
12c20 6c 65 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 43  le */.  char *zC
12c30 6f 6c 41 66 66 3b 20 20 20 20 20 20 20 2f 2a 20  olAff;       /* 
12c40 53 74 72 69 6e 67 20 64 65 66 69 6e 69 6e 67 20  String defining 
12c50 74 68 65 20 61 66 66 69 6e 69 74 79 20 6f 66 20  the affinity of 
12c60 65 61 63 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20  each column */. 
12c70 20 45 78 70 72 4c 69 73 74 20 2a 70 43 68 65 63   ExprList *pChec
12c80 6b 3b 20 20 20 20 2f 2a 20 41 6c 6c 20 43 48 45  k;    /* All CHE
12c90 43 4b 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a  CK constraints *
12ca0 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  /.              
12cb0 20 20 20 20 20 20 20 20 20 2f 2a 20 20 20 2e 2e           /*   ..
12cc0 2e 20 61 6c 73 6f 20 75 73 65 64 20 61 73 20 63  . also used as c
12cd0 6f 6c 75 6d 6e 20 6e 61 6d 65 20 6c 69 73 74 20  olumn name list 
12ce0 69 6e 20 61 20 56 49 45 57 20 2a 2f 0a 20 20 69  in a VIEW */.  i
12cf0 6e 74 20 74 6e 75 6d 3b 20 20 20 20 20 20 20 20  nt tnum;        
12d00 20 20 20 20 2f 2a 20 52 6f 6f 74 20 42 54 72 65      /* Root BTre
12d10 65 20 70 61 67 65 20 66 6f 72 20 74 68 69 73 20  e page for this 
12d20 74 61 62 6c 65 20 2a 2f 0a 20 20 75 33 32 20 6e  table */.  u32 n
12d30 54 61 62 52 65 66 3b 20 20 20 20 20 20 20 20 20  TabRef;         
12d40 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 70 6f 69  /* Number of poi
12d50 6e 74 65 72 73 20 74 6f 20 74 68 69 73 20 54 61  nters to this Ta
12d60 62 6c 65 20 2a 2f 0a 20 20 75 33 32 20 74 61 62  ble */.  u32 tab
12d70 46 6c 61 67 73 3b 20 20 20 20 20 20 20 20 2f 2a  Flags;        /*
12d80 20 4d 61 73 6b 20 6f 66 20 54 46 5f 2a 20 76 61   Mask of TF_* va
12d90 6c 75 65 73 20 2a 2f 0a 20 20 69 31 36 20 69 50  lues */.  i16 iP
12da0 4b 65 79 3b 20 20 20 20 20 20 20 20 20 20 20 2f  Key;           /
12db0 2a 20 49 66 20 6e 6f 74 20 6e 65 67 61 74 69 76  * If not negativ
12dc0 65 2c 20 75 73 65 20 61 43 6f 6c 5b 69 50 4b 65  e, use aCol[iPKe
12dd0 79 5d 20 61 73 20 74 68 65 20 72 6f 77 69 64 20  y] as the rowid 
12de0 2a 2f 0a 20 20 69 31 36 20 6e 43 6f 6c 3b 20 20  */.  i16 nCol;  
12df0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
12e00 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69  ber of columns i
12e10 6e 20 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a  n this table */.
12e20 20 20 4c 6f 67 45 73 74 20 6e 52 6f 77 4c 6f 67    LogEst nRowLog
12e30 45 73 74 3b 20 20 20 2f 2a 20 45 73 74 69 6d 61  Est;   /* Estima
12e40 74 65 64 20 72 6f 77 73 20 69 6e 20 74 61 62 6c  ted rows in tabl
12e50 65 20 2d 20 66 72 6f 6d 20 73 71 6c 69 74 65 5f  e - from sqlite_
12e60 73 74 61 74 31 20 74 61 62 6c 65 20 2a 2f 0a 20  stat1 table */. 
12e70 20 4c 6f 67 45 73 74 20 73 7a 54 61 62 52 6f 77   LogEst szTabRow
12e80 3b 20 20 20 20 20 2f 2a 20 45 73 74 69 6d 61 74  ;     /* Estimat
12e90 65 64 20 73 69 7a 65 20 6f 66 20 65 61 63 68 20  ed size of each 
12ea0 74 61 62 6c 65 20 72 6f 77 20 69 6e 20 62 79 74  table row in byt
12eb0 65 73 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c  es */.#ifdef SQL
12ec0 49 54 45 5f 45 4e 41 42 4c 45 5f 43 4f 53 54 4d  ITE_ENABLE_COSTM
12ed0 55 4c 54 0a 20 20 4c 6f 67 45 73 74 20 63 6f 73  ULT.  LogEst cos
12ee0 74 4d 75 6c 74 3b 20 20 20 20 20 2f 2a 20 43 6f  tMult;     /* Co
12ef0 73 74 20 6d 75 6c 74 69 70 6c 69 65 72 20 66 6f  st multiplier fo
12f00 72 20 75 73 69 6e 67 20 74 68 69 73 20 74 61 62  r using this tab
12f10 6c 65 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 75  le */.#endif.  u
12f20 38 20 6b 65 79 43 6f 6e 66 3b 20 20 20 20 20 20  8 keyConf;      
12f30 20 20 20 20 2f 2a 20 57 68 61 74 20 74 6f 20 64      /* What to d
12f40 6f 20 69 6e 20 63 61 73 65 20 6f 66 20 75 6e 69  o in case of uni
12f50 71 75 65 6e 65 73 73 20 63 6f 6e 66 6c 69 63 74  queness conflict
12f60 20 6f 6e 20 69 50 4b 65 79 20 2a 2f 0a 23 69 66   on iPKey */.#if
12f70 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
12f80 5f 41 4c 54 45 52 54 41 42 4c 45 0a 20 20 69 6e  _ALTERTABLE.  in
12f90 74 20 61 64 64 43 6f 6c 4f 66 66 73 65 74 3b 20  t addColOffset; 
12fa0 20 20 20 2f 2a 20 4f 66 66 73 65 74 20 69 6e 20     /* Offset in 
12fb0 43 52 45 41 54 45 20 54 41 42 4c 45 20 73 74 6d  CREATE TABLE stm
12fc0 74 20 74 6f 20 61 64 64 20 61 20 6e 65 77 20 63  t to add a new c
12fd0 6f 6c 75 6d 6e 20 2a 2f 0a 23 65 6e 64 69 66 0a  olumn */.#endif.
12fe0 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
12ff0 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
13000 0a 20 20 69 6e 74 20 6e 4d 6f 64 75 6c 65 41 72  .  int nModuleAr
13010 67 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65  g;      /* Numbe
13020 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 74  r of arguments t
13030 6f 20 74 68 65 20 6d 6f 64 75 6c 65 20 2a 2f 0a  o the module */.
13040 20 20 63 68 61 72 20 2a 2a 61 7a 4d 6f 64 75 6c    char **azModul
13050 65 41 72 67 3b 20 20 2f 2a 20 30 3a 20 6d 6f 64  eArg;  /* 0: mod
13060 75 6c 65 20 31 3a 20 73 63 68 65 6d 61 20 32 3a  ule 1: schema 2:
13070 20 76 74 61 62 20 6e 61 6d 65 20 33 2e 2e 2e 3a   vtab name 3...:
13080 20 61 72 67 73 20 2a 2f 0a 20 20 56 54 61 62 6c   args */.  VTabl
13090 65 20 2a 70 56 54 61 62 6c 65 3b 20 20 20 20 20  e *pVTable;     
130a0 2f 2a 20 4c 69 73 74 20 6f 66 20 56 54 61 62 6c  /* List of VTabl
130b0 65 20 6f 62 6a 65 63 74 73 2e 20 2a 2f 0a 23 65  e objects. */.#e
130c0 6e 64 69 66 0a 20 20 54 72 69 67 67 65 72 20 2a  ndif.  Trigger *
130d0 70 54 72 69 67 67 65 72 3b 20 20 20 2f 2a 20 4c  pTrigger;   /* L
130e0 69 73 74 20 6f 66 20 74 72 69 67 67 65 72 73 20  ist of triggers 
130f0 73 74 6f 72 65 64 20 69 6e 20 70 53 63 68 65 6d  stored in pSchem
13100 61 20 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70  a */.  Schema *p
13110 53 63 68 65 6d 61 3b 20 20 20 20 20 2f 2a 20 53  Schema;     /* S
13120 63 68 65 6d 61 20 74 68 61 74 20 63 6f 6e 74 61  chema that conta
13130 69 6e 73 20 74 68 69 73 20 74 61 62 6c 65 20 2a  ins this table *
13140 2f 0a 20 20 54 61 62 6c 65 20 2a 70 4e 65 78 74  /.  Table *pNext
13150 5a 6f 6d 62 69 65 3b 20 20 2f 2a 20 4e 65 78 74  Zombie;  /* Next
13160 20 6f 6e 20 74 68 65 20 50 61 72 73 65 2e 70 5a   on the Parse.pZ
13170 6f 6d 62 69 65 54 61 62 20 6c 69 73 74 20 2a 2f  ombieTab list */
13180 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77  .};../*.** Allow
13190 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20 54 61  ed values for Ta
131a0 62 6c 65 2e 74 61 62 46 6c 61 67 73 2e 0a 2a 2a  ble.tabFlags..**
131b0 0a 2a 2a 20 54 46 5f 4f 4f 4f 48 69 64 64 65 6e  .** TF_OOOHidden
131c0 20 61 70 70 6c 69 65 73 20 74 6f 20 74 61 62 6c   applies to tabl
131d0 65 73 20 6f 72 20 76 69 65 77 20 74 68 61 74 20  es or view that 
131e0 68 61 76 65 20 68 69 64 64 65 6e 20 63 6f 6c 75  have hidden colu
131f0 6d 6e 73 20 74 68 61 74 20 61 72 65 0a 2a 2a 20  mns that are.** 
13200 66 6f 6c 6c 6f 77 65 64 20 62 79 20 6e 6f 6e 2d  followed by non-
13210 68 69 64 64 65 6e 20 63 6f 6c 75 6d 6e 73 2e 20  hidden columns. 
13220 20 45 78 61 6d 70 6c 65 3a 20 20 22 43 52 45 41   Example:  "CREA
13230 54 45 20 56 49 52 54 55 41 4c 20 54 41 42 4c 45  TE VIRTUAL TABLE
13240 20 78 20 55 53 49 4e 47 0a 2a 2a 20 76 74 61 62   x USING.** vtab
13250 31 28 61 20 48 49 44 44 45 4e 2c 20 62 29 3b 22  1(a HIDDEN, b);"
13260 2e 20 20 53 69 6e 63 65 20 22 62 22 20 69 73 20  .  Since "b" is 
13270 61 20 6e 6f 6e 2d 68 69 64 64 65 6e 20 63 6f 6c  a non-hidden col
13280 75 6d 6e 20 62 75 74 20 22 61 22 20 69 73 20 68  umn but "a" is h
13290 69 64 64 65 6e 2c 0a 2a 2a 20 74 68 65 20 54 46  idden,.** the TF
132a0 5f 4f 4f 4f 48 69 64 64 65 6e 20 61 74 74 72 69  _OOOHidden attri
132b0 62 75 74 65 20 77 6f 75 6c 64 20 61 70 70 6c 79  bute would apply
132c0 20 69 6e 20 74 68 69 73 20 63 61 73 65 2e 20 20   in this case.  
132d0 53 75 63 68 20 74 61 62 6c 65 73 20 72 65 71 75  Such tables requ
132e0 69 72 65 0a 2a 2a 20 73 70 65 63 69 61 6c 20 68  ire.** special h
132f0 61 6e 64 6c 69 6e 67 20 64 75 72 69 6e 67 20 49  andling during I
13300 4e 53 45 52 54 20 70 72 6f 63 65 73 73 69 6e 67  NSERT processing
13310 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f  ..*/.#define TF_
13320 52 65 61 64 6f 6e 6c 79 20 20 20 20 20 20 20 20  Readonly        
13330 30 78 30 30 30 31 20 20 20 20 2f 2a 20 52 65 61  0x0001    /* Rea
13340 64 2d 6f 6e 6c 79 20 73 79 73 74 65 6d 20 74 61  d-only system ta
13350 62 6c 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54  ble */.#define T
13360 46 5f 45 70 68 65 6d 65 72 61 6c 20 20 20 20 20  F_Ephemeral     
13370 20 20 30 78 30 30 30 32 20 20 20 20 2f 2a 20 41    0x0002    /* A
13380 6e 20 65 70 68 65 6d 65 72 61 6c 20 74 61 62 6c  n ephemeral tabl
13390 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f  e */.#define TF_
133a0 48 61 73 50 72 69 6d 61 72 79 4b 65 79 20 20 20  HasPrimaryKey   
133b0 30 78 30 30 30 34 20 20 20 20 2f 2a 20 54 61 62  0x0004    /* Tab
133c0 6c 65 20 68 61 73 20 61 20 70 72 69 6d 61 72 79  le has a primary
133d0 20 6b 65 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20   key */.#define 
133e0 54 46 5f 41 75 74 6f 69 6e 63 72 65 6d 65 6e 74  TF_Autoincrement
133f0 20 20 20 30 78 30 30 30 38 20 20 20 20 2f 2a 20     0x0008    /* 
13400 49 6e 74 65 67 65 72 20 70 72 69 6d 61 72 79 20  Integer primary 
13410 6b 65 79 20 69 73 20 61 75 74 6f 69 6e 63 72 65  key is autoincre
13420 6d 65 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ment */.#define 
13430 54 46 5f 48 61 73 53 74 61 74 31 20 20 20 20 20  TF_HasStat1     
13440 20 20 20 30 78 30 30 31 30 20 20 20 20 2f 2a 20     0x0010    /* 
13450 6e 52 6f 77 4c 6f 67 45 73 74 20 73 65 74 20 66  nRowLogEst set f
13460 72 6f 6d 20 73 71 6c 69 74 65 5f 73 74 61 74 31  rom sqlite_stat1
13470 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 57   */.#define TF_W
13480 69 74 68 6f 75 74 52 6f 77 69 64 20 20 20 20 30  ithoutRowid    0
13490 78 30 30 32 30 20 20 20 20 2f 2a 20 4e 6f 20 72  x0020    /* No r
134a0 6f 77 69 64 2e 20 20 50 52 49 4d 41 52 59 20 4b  owid.  PRIMARY K
134b0 45 59 20 69 73 20 74 68 65 20 6b 65 79 20 2a 2f  EY is the key */
134c0 0a 23 64 65 66 69 6e 65 20 54 46 5f 4e 6f 56 69  .#define TF_NoVi
134d0 73 69 62 6c 65 52 6f 77 69 64 20 20 30 78 30 30  sibleRowid  0x00
134e0 34 30 20 20 20 20 2f 2a 20 4e 6f 20 75 73 65 72  40    /* No user
134f0 2d 76 69 73 69 62 6c 65 20 22 72 6f 77 69 64 22  -visible "rowid"
13500 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 23 64 65 66 69   column */.#defi
13510 6e 65 20 54 46 5f 4f 4f 4f 48 69 64 64 65 6e 20  ne TF_OOOHidden 
13520 20 20 20 20 20 20 30 78 30 30 38 30 20 20 20 20        0x0080    
13530 2f 2a 20 4f 75 74 2d 6f 66 2d 4f 72 64 65 72 20  /* Out-of-Order 
13540 68 69 64 64 65 6e 20 63 6f 6c 75 6d 6e 73 20 2a  hidden columns *
13550 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 53 74 61  /.#define TF_Sta
13560 74 73 55 73 65 64 20 20 20 20 20 20 20 30 78 30  tsUsed       0x0
13570 31 30 30 20 20 20 20 2f 2a 20 51 75 65 72 79 20  100    /* Query 
13580 70 6c 61 6e 6e 65 72 20 64 65 63 69 73 69 6f 6e  planner decision
13590 73 20 61 66 66 65 63 74 65 64 20 62 79 0a 20 20  s affected by.  
135a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
135b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
135c0 20 20 20 2a 2a 20 49 6e 64 65 78 2e 61 69 52 6f     ** Index.aiRo
135d0 77 4c 6f 67 45 73 74 5b 5d 20 76 61 6c 75 65 73  wLogEst[] values
135e0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 48   */.#define TF_H
135f0 61 73 4e 6f 74 4e 75 6c 6c 20 20 20 20 20 20 30  asNotNull      0
13600 78 30 32 30 30 20 20 20 20 2f 2a 20 43 6f 6e 74  x0200    /* Cont
13610 61 69 6e 73 20 4e 4f 54 20 4e 55 4c 4c 20 63 6f  ains NOT NULL co
13620 6e 73 74 72 61 69 6e 74 73 20 2a 2f 0a 0a 2f 2a  nstraints */../*
13630 0a 2a 2a 20 54 65 73 74 20 74 6f 20 73 65 65 20  .** Test to see 
13640 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 61  whether or not a
13650 20 74 61 62 6c 65 20 69 73 20 61 20 76 69 72 74   table is a virt
13660 75 61 6c 20 74 61 62 6c 65 2e 20 20 54 68 69 73  ual table.  This
13670 20 69 73 0a 2a 2a 20 64 6f 6e 65 20 61 73 20 61   is.** done as a
13680 20 6d 61 63 72 6f 20 73 6f 20 74 68 61 74 20 69   macro so that i
13690 74 20 77 69 6c 6c 20 62 65 20 6f 70 74 69 6d 69  t will be optimi
136a0 7a 65 64 20 6f 75 74 20 77 68 65 6e 20 76 69 72  zed out when vir
136b0 74 75 61 6c 0a 2a 2a 20 74 61 62 6c 65 20 73 75  tual.** table su
136c0 70 70 6f 72 74 20 69 73 20 6f 6d 69 74 74 65 64  pport is omitted
136d0 20 66 72 6f 6d 20 74 68 65 20 62 75 69 6c 64 2e   from the build.
136e0 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  .*/.#ifndef SQLI
136f0 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
13700 41 42 4c 45 0a 23 20 20 64 65 66 69 6e 65 20 49  ABLE.#  define I
13710 73 56 69 72 74 75 61 6c 28 58 29 20 20 20 20 20  sVirtual(X)     
13720 20 28 28 58 29 2d 3e 6e 4d 6f 64 75 6c 65 41 72   ((X)->nModuleAr
13730 67 29 0a 23 65 6c 73 65 0a 23 20 20 64 65 66 69  g).#else.#  defi
13740 6e 65 20 49 73 56 69 72 74 75 61 6c 28 58 29 20  ne IsVirtual(X) 
13750 20 20 20 20 20 30 0a 23 65 6e 64 69 66 0a 0a 2f       0.#endif../
13760 2a 0a 2a 2a 20 4d 61 63 72 6f 73 20 74 6f 20 64  *.** Macros to d
13770 65 74 65 72 6d 69 6e 65 20 69 66 20 61 20 63 6f  etermine if a co
13780 6c 75 6d 6e 20 69 73 20 68 69 64 64 65 6e 2e 20  lumn is hidden. 
13790 20 49 73 4f 72 64 69 6e 61 72 79 48 69 64 64 65   IsOrdinaryHidde
137a0 6e 43 6f 6c 75 6d 6e 28 29 0a 2a 2a 20 6f 6e 6c  nColumn().** onl
137b0 79 20 77 6f 72 6b 73 20 66 6f 72 20 6e 6f 6e 2d  y works for non-
137c0 76 69 72 74 75 61 6c 20 74 61 62 6c 65 73 20 28  virtual tables (
137d0 6f 72 64 69 6e 61 72 79 20 74 61 62 6c 65 73 20  ordinary tables 
137e0 61 6e 64 20 76 69 65 77 73 29 20 61 6e 64 20 69  and views) and i
137f0 73 0a 2a 2a 20 61 6c 77 61 79 73 20 66 61 6c 73  s.** always fals
13800 65 20 75 6e 6c 65 73 73 20 53 51 4c 49 54 45 5f  e unless SQLITE_
13810 45 4e 41 42 4c 45 5f 48 49 44 44 45 4e 5f 43 4f  ENABLE_HIDDEN_CO
13820 4c 55 4d 4e 53 20 69 73 20 64 65 66 69 6e 65 64  LUMNS is defined
13830 2e 20 20 54 68 65 0a 2a 2a 20 49 73 48 69 64 64  .  The.** IsHidd
13840 65 6e 43 6f 6c 75 6d 6e 28 29 20 6d 61 63 72 6f  enColumn() macro
13850 20 69 73 20 67 65 6e 65 72 61 6c 20 70 75 72 70   is general purp
13860 6f 73 65 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69  ose..*/.#if defi
13870 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c  ned(SQLITE_ENABL
13880 45 5f 48 49 44 44 45 4e 5f 43 4f 4c 55 4d 4e 53  E_HIDDEN_COLUMNS
13890 29 0a 23 20 20 64 65 66 69 6e 65 20 49 73 48 69  ).#  define IsHi
138a0 64 64 65 6e 43 6f 6c 75 6d 6e 28 58 29 20 20 20  ddenColumn(X)   
138b0 20 20 20 20 20 20 28 28 28 58 29 2d 3e 63 6f 6c        (((X)->col
138c0 46 6c 61 67 73 20 26 20 43 4f 4c 46 4c 41 47 5f  Flags & COLFLAG_
138d0 48 49 44 44 45 4e 29 21 3d 30 29 0a 23 20 20 64  HIDDEN)!=0).#  d
138e0 65 66 69 6e 65 20 49 73 4f 72 64 69 6e 61 72 79  efine IsOrdinary
138f0 48 69 64 64 65 6e 43 6f 6c 75 6d 6e 28 58 29 20  HiddenColumn(X) 
13900 28 28 28 58 29 2d 3e 63 6f 6c 46 6c 61 67 73 20  (((X)->colFlags 
13910 26 20 43 4f 4c 46 4c 41 47 5f 48 49 44 44 45 4e  & COLFLAG_HIDDEN
13920 29 21 3d 30 29 0a 23 65 6c 69 66 20 21 64 65 66  )!=0).#elif !def
13930 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54  ined(SQLITE_OMIT
13940 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 29 0a 23  _VIRTUALTABLE).#
13950 20 20 64 65 66 69 6e 65 20 49 73 48 69 64 64 65    define IsHidde
13960 6e 43 6f 6c 75 6d 6e 28 58 29 20 20 20 20 20 20  nColumn(X)      
13970 20 20 20 28 28 28 58 29 2d 3e 63 6f 6c 46 6c 61     (((X)->colFla
13980 67 73 20 26 20 43 4f 4c 46 4c 41 47 5f 48 49 44  gs & COLFLAG_HID
13990 44 45 4e 29 21 3d 30 29 0a 23 20 20 64 65 66 69  DEN)!=0).#  defi
139a0 6e 65 20 49 73 4f 72 64 69 6e 61 72 79 48 69 64  ne IsOrdinaryHid
139b0 64 65 6e 43 6f 6c 75 6d 6e 28 58 29 20 30 0a 23  denColumn(X) 0.#
139c0 65 6c 73 65 0a 23 20 20 64 65 66 69 6e 65 20 49  else.#  define I
139d0 73 48 69 64 64 65 6e 43 6f 6c 75 6d 6e 28 58 29  sHiddenColumn(X)
139e0 20 20 20 20 20 20 20 20 20 30 0a 23 20 20 64 65           0.#  de
139f0 66 69 6e 65 20 49 73 4f 72 64 69 6e 61 72 79 48  fine IsOrdinaryH
13a00 69 64 64 65 6e 43 6f 6c 75 6d 6e 28 58 29 20 30  iddenColumn(X) 0
13a10 0a 23 65 6e 64 69 66 0a 0a 0a 2f 2a 20 44 6f 65  .#endif.../* Doe
13a20 73 20 74 68 65 20 74 61 62 6c 65 20 68 61 76 65  s the table have
13a30 20 61 20 72 6f 77 69 64 20 2a 2f 0a 23 64 65 66   a rowid */.#def
13a40 69 6e 65 20 48 61 73 52 6f 77 69 64 28 58 29 20  ine HasRowid(X) 
13a50 20 20 20 20 28 28 28 58 29 2d 3e 74 61 62 46 6c      (((X)->tabFl
13a60 61 67 73 20 26 20 54 46 5f 57 69 74 68 6f 75 74  ags & TF_Without
13a70 52 6f 77 69 64 29 3d 3d 30 29 0a 23 64 65 66 69  Rowid)==0).#defi
13a80 6e 65 20 56 69 73 69 62 6c 65 52 6f 77 69 64 28  ne VisibleRowid(
13a90 58 29 20 28 28 28 58 29 2d 3e 74 61 62 46 6c 61  X) (((X)->tabFla
13aa0 67 73 20 26 20 54 46 5f 4e 6f 56 69 73 69 62 6c  gs & TF_NoVisibl
13ab0 65 52 6f 77 69 64 29 3d 3d 30 29 0a 0a 2f 2a 0a  eRowid)==0)../*.
13ac0 2a 2a 20 45 61 63 68 20 66 6f 72 65 69 67 6e 20  ** Each foreign 
13ad0 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 20 69  key constraint i
13ae0 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  s an instance of
13af0 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   the following s
13b00 74 72 75 63 74 75 72 65 2e 0a 2a 2a 0a 2a 2a 20  tructure..**.** 
13b10 41 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 69 73  A foreign key is
13b20 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68   associated with
13b30 20 74 77 6f 20 74 61 62 6c 65 73 2e 20 20 54 68   two tables.  Th
13b40 65 20 22 66 72 6f 6d 22 20 74 61 62 6c 65 20 69  e "from" table i
13b50 73 0a 2a 2a 20 74 68 65 20 74 61 62 6c 65 20 74  s.** the table t
13b60 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 74 68 65  hat contains the
13b70 20 52 45 46 45 52 45 4e 43 45 53 20 63 6c 61 75   REFERENCES clau
13b80 73 65 20 74 68 61 74 20 63 72 65 61 74 65 73 20  se that creates 
13b90 74 68 65 20 66 6f 72 65 69 67 6e 0a 2a 2a 20 6b  the foreign.** k
13ba0 65 79 2e 20 20 54 68 65 20 22 74 6f 22 20 74 61  ey.  The "to" ta
13bb0 62 6c 65 20 69 73 20 74 68 65 20 74 61 62 6c 65  ble is the table
13bc0 20 74 68 61 74 20 69 73 20 6e 61 6d 65 64 20 69   that is named i
13bd0 6e 20 74 68 65 20 52 45 46 45 52 45 4e 43 45 53  n the REFERENCES
13be0 20 63 6c 61 75 73 65 2e 0a 2a 2a 20 43 6f 6e 73   clause..** Cons
13bf0 69 64 65 72 20 74 68 69 73 20 65 78 61 6d 70 6c  ider this exampl
13c00 65 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 43 52 45  e:.**.**     CRE
13c10 41 54 45 20 54 41 42 4c 45 20 65 78 31 28 0a 2a  ATE TABLE ex1(.*
13c20 2a 20 20 20 20 20 20 20 61 20 49 4e 54 45 47 45  *       a INTEGE
13c30 52 20 50 52 49 4d 41 52 59 20 4b 45 59 2c 0a 2a  R PRIMARY KEY,.*
13c40 2a 20 20 20 20 20 20 20 62 20 49 4e 54 45 47 45  *       b INTEGE
13c50 52 20 43 4f 4e 53 54 52 41 49 4e 54 20 66 6b 31  R CONSTRAINT fk1
13c60 20 52 45 46 45 52 45 4e 43 45 53 20 65 78 32 28   REFERENCES ex2(
13c70 78 29 0a 2a 2a 20 20 20 20 20 29 3b 0a 2a 2a 0a  x).**     );.**.
13c80 2a 2a 20 46 6f 72 20 66 6f 72 65 69 67 6e 20 6b  ** For foreign k
13c90 65 79 20 22 66 6b 31 22 2c 20 74 68 65 20 66 72  ey "fk1", the fr
13ca0 6f 6d 2d 74 61 62 6c 65 20 69 73 20 22 65 78 31  om-table is "ex1
13cb0 22 20 61 6e 64 20 74 68 65 20 74 6f 2d 74 61 62  " and the to-tab
13cc0 6c 65 20 69 73 20 22 65 78 32 22 2e 0a 2a 2a 20  le is "ex2"..** 
13cd0 45 71 75 69 76 61 6c 65 6e 74 20 6e 61 6d 65 73  Equivalent names
13ce0 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 66 72 6f 6d  :.**.**     from
13cf0 2d 74 61 62 6c 65 20 3d 3d 20 63 68 69 6c 64 2d  -table == child-
13d00 74 61 62 6c 65 0a 2a 2a 20 20 20 20 20 20 20 74  table.**       t
13d10 6f 2d 74 61 62 6c 65 20 3d 3d 20 70 61 72 65 6e  o-table == paren
13d20 74 2d 74 61 62 6c 65 0a 2a 2a 0a 2a 2a 20 45 61  t-table.**.** Ea
13d30 63 68 20 52 45 46 45 52 45 4e 43 45 53 20 63 6c  ch REFERENCES cl
13d40 61 75 73 65 20 67 65 6e 65 72 61 74 65 73 20 61  ause generates a
13d50 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  n instance of th
13d60 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75  e following stru
13d70 63 74 75 72 65 0a 2a 2a 20 77 68 69 63 68 20 69  cture.** which i
13d80 73 20 61 74 74 61 63 68 65 64 20 74 6f 20 74 68  s attached to th
13d90 65 20 66 72 6f 6d 2d 74 61 62 6c 65 2e 20 20 54  e from-table.  T
13da0 68 65 20 74 6f 2d 74 61 62 6c 65 20 6e 65 65 64  he to-table need
13db0 20 6e 6f 74 20 65 78 69 73 74 20 77 68 65 6e 0a   not exist when.
13dc0 2a 2a 20 74 68 65 20 66 72 6f 6d 2d 74 61 62 6c  ** the from-tabl
13dd0 65 20 69 73 20 63 72 65 61 74 65 64 2e 20 20 54  e is created.  T
13de0 68 65 20 65 78 69 73 74 65 6e 63 65 20 6f 66 20  he existence of 
13df0 74 68 65 20 74 6f 2d 74 61 62 6c 65 20 69 73 20  the to-table is 
13e00 6e 6f 74 20 63 68 65 63 6b 65 64 2e 0a 2a 2a 0a  not checked..**.
13e10 2a 2a 20 54 68 65 20 6c 69 73 74 20 6f 66 20 61  ** The list of a
13e20 6c 6c 20 70 61 72 65 6e 74 73 20 66 6f 72 20 63  ll parents for c
13e30 68 69 6c 64 20 54 61 62 6c 65 20 58 20 69 73 20  hild Table X is 
13e40 68 65 6c 64 20 61 74 20 58 2e 70 46 4b 65 79 2e  held at X.pFKey.
13e50 0a 2a 2a 0a 2a 2a 20 41 20 6c 69 73 74 20 6f 66  .**.** A list of
13e60 20 61 6c 6c 20 63 68 69 6c 64 72 65 6e 20 66 6f   all children fo
13e70 72 20 61 20 74 61 62 6c 65 20 6e 61 6d 65 64 20  r a table named 
13e80 5a 20 28 77 68 69 63 68 20 6d 69 67 68 74 20 6e  Z (which might n
13e90 6f 74 20 65 76 65 6e 20 65 78 69 73 74 29 0a 2a  ot even exist).*
13ea0 2a 20 69 73 20 68 65 6c 64 20 69 6e 20 53 63 68  * is held in Sch
13eb0 65 6d 61 2e 66 6b 65 79 48 61 73 68 20 77 69 74  ema.fkeyHash wit
13ec0 68 20 61 20 68 61 73 68 20 6b 65 79 20 6f 66 20  h a hash key of 
13ed0 5a 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 46 4b 65  Z..*/.struct FKe
13ee0 79 20 7b 0a 20 20 54 61 62 6c 65 20 2a 70 46 72  y {.  Table *pFr
13ef0 6f 6d 3b 20 20 20 20 20 2f 2a 20 54 61 62 6c 65  om;     /* Table
13f00 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20   containing the 
13f10 52 45 46 45 52 45 4e 43 45 53 20 63 6c 61 75 73  REFERENCES claus
13f20 65 20 28 61 6b 61 3a 20 43 68 69 6c 64 29 20 2a  e (aka: Child) *
13f30 2f 0a 20 20 46 4b 65 79 20 2a 70 4e 65 78 74 46  /.  FKey *pNextF
13f40 72 6f 6d 3b 20 20 2f 2a 20 4e 65 78 74 20 46 4b  rom;  /* Next FK
13f50 65 79 20 77 69 74 68 20 74 68 65 20 73 61 6d 65  ey with the same
13f60 20 69 6e 20 70 46 72 6f 6d 2e 20 4e 65 78 74 20   in pFrom. Next 
13f70 70 61 72 65 6e 74 20 6f 66 20 70 46 72 6f 6d 20  parent of pFrom 
13f80 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 54 6f 3b 20  */.  char *zTo; 
13f90 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f         /* Name o
13fa0 66 20 74 61 62 6c 65 20 74 68 61 74 20 74 68 65  f table that the
13fb0 20 6b 65 79 20 70 6f 69 6e 74 73 20 74 6f 20 28   key points to (
13fc0 61 6b 61 3a 20 50 61 72 65 6e 74 29 20 2a 2f 0a  aka: Parent) */.
13fd0 20 20 46 4b 65 79 20 2a 70 4e 65 78 74 54 6f 3b    FKey *pNextTo;
13fe0 20 20 20 20 2f 2a 20 4e 65 78 74 20 77 69 74 68      /* Next with
13ff0 20 74 68 65 20 73 61 6d 65 20 7a 54 6f 2e 20 4e   the same zTo. N
14000 65 78 74 20 63 68 69 6c 64 20 6f 66 20 7a 54 6f  ext child of zTo
14010 2e 20 2a 2f 0a 20 20 46 4b 65 79 20 2a 70 50 72  . */.  FKey *pPr
14020 65 76 54 6f 3b 20 20 20 20 2f 2a 20 50 72 65 76  evTo;    /* Prev
14030 69 6f 75 73 20 77 69 74 68 20 74 68 65 20 73 61  ious with the sa
14040 6d 65 20 7a 54 6f 20 2a 2f 0a 20 20 69 6e 74 20  me zTo */.  int 
14050 6e 43 6f 6c 3b 20 20 20 20 20 20 20 20 20 2f 2a  nCol;         /*
14060 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d   Number of colum
14070 6e 73 20 69 6e 20 74 68 69 73 20 6b 65 79 20 2a  ns in this key *
14080 2f 0a 20 20 2f 2a 20 45 56 3a 20 52 2d 33 30 33  /.  /* EV: R-303
14090 32 33 2d 32 31 39 31 37 20 2a 2f 0a 20 20 75 38  23-21917 */.  u8
140a0 20 69 73 44 65 66 65 72 72 65 64 3b 20 20 20 20   isDeferred;    
140b0 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 63 6f     /* True if co
140c0 6e 73 74 72 61 69 6e 74 20 63 68 65 63 6b 69 6e  nstraint checkin
140d0 67 20 69 73 20 64 65 66 65 72 72 65 64 20 74 69  g is deferred ti
140e0 6c 6c 20 43 4f 4d 4d 49 54 20 2a 2f 0a 20 20 75  ll COMMIT */.  u
140f0 38 20 61 41 63 74 69 6f 6e 5b 32 5d 3b 20 20 20  8 aAction[2];   
14100 20 20 20 20 20 2f 2a 20 4f 4e 20 44 45 4c 45 54       /* ON DELET
14110 45 20 61 6e 64 20 4f 4e 20 55 50 44 41 54 45 20  E and ON UPDATE 
14120 61 63 74 69 6f 6e 73 2c 20 72 65 73 70 65 63 74  actions, respect
14130 69 76 65 6c 79 20 2a 2f 0a 20 20 54 72 69 67 67  ively */.  Trigg
14140 65 72 20 2a 61 70 54 72 69 67 67 65 72 5b 32 5d  er *apTrigger[2]
14150 3b 2f 2a 20 54 72 69 67 67 65 72 73 20 66 6f 72  ;/* Triggers for
14160 20 61 41 63 74 69 6f 6e 5b 5d 20 61 63 74 69 6f   aAction[] actio
14170 6e 73 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 73  ns */.  struct s
14180 43 6f 6c 4d 61 70 20 7b 20 20 20 20 20 20 2f 2a  ColMap {      /*
14190 20 4d 61 70 70 69 6e 67 20 6f 66 20 63 6f 6c 75   Mapping of colu
141a0 6d 6e 73 20 69 6e 20 70 46 72 6f 6d 20 74 6f 20  mns in pFrom to 
141b0 63 6f 6c 75 6d 6e 73 20 69 6e 20 7a 54 6f 20 2a  columns in zTo *
141c0 2f 0a 20 20 20 20 69 6e 74 20 69 46 72 6f 6d 3b  /.    int iFrom;
141d0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49              /* I
141e0 6e 64 65 78 20 6f 66 20 63 6f 6c 75 6d 6e 20 69  ndex of column i
141f0 6e 20 70 46 72 6f 6d 20 2a 2f 0a 20 20 20 20 63  n pFrom */.    c
14200 68 61 72 20 2a 7a 43 6f 6c 3b 20 20 20 20 20 20  har *zCol;      
14210 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20       /* Name of 
14220 63 6f 6c 75 6d 6e 20 69 6e 20 7a 54 6f 2e 20 20  column in zTo.  
14230 49 66 20 4e 55 4c 4c 20 75 73 65 20 50 52 49 4d  If NULL use PRIM
14240 41 52 59 20 4b 45 59 20 2a 2f 0a 20 20 7d 20 61  ARY KEY */.  } a
14250 43 6f 6c 5b 31 5d 3b 20 20 20 20 20 20 20 20 20  Col[1];         
14260 20 20 20 2f 2a 20 4f 6e 65 20 65 6e 74 72 79 20     /* One entry 
14270 66 6f 72 20 65 61 63 68 20 6f 66 20 6e 43 6f 6c  for each of nCol
14280 20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 7d 3b 0a 0a   columns */.};..
14290 2f 2a 0a 2a 2a 20 53 51 4c 69 74 65 20 73 75 70  /*.** SQLite sup
142a0 70 6f 72 74 73 20 6d 61 6e 79 20 64 69 66 66 65  ports many diffe
142b0 72 65 6e 74 20 77 61 79 73 20 74 6f 20 72 65 73  rent ways to res
142c0 6f 6c 76 65 20 61 20 63 6f 6e 73 74 72 61 69 6e  olve a constrain
142d0 74 0a 2a 2a 20 65 72 72 6f 72 2e 20 20 52 4f 4c  t.** error.  ROL
142e0 4c 42 41 43 4b 20 70 72 6f 63 65 73 73 69 6e 67  LBACK processing
142f0 20 6d 65 61 6e 73 20 74 68 61 74 20 61 20 63 6f   means that a co
14300 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69  nstraint violati
14310 6f 6e 0a 2a 2a 20 63 61 75 73 65 73 20 74 68 65  on.** causes the
14320 20 6f 70 65 72 61 74 69 6f 6e 20 69 6e 20 70 72   operation in pr
14330 6f 63 65 73 73 20 74 6f 20 66 61 69 6c 20 61 6e  ocess to fail an
14340 64 20 66 6f 72 20 74 68 65 20 63 75 72 72 65 6e  d for the curren
14350 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 0a 2a 2a  t transaction.**
14360 20 74 6f 20 62 65 20 72 6f 6c 6c 65 64 20 62 61   to be rolled ba
14370 63 6b 2e 20 20 41 42 4f 52 54 20 70 72 6f 63 65  ck.  ABORT proce
14380 73 73 69 6e 67 20 6d 65 61 6e 73 20 74 68 65 20  ssing means the 
14390 6f 70 65 72 61 74 69 6f 6e 20 69 6e 20 70 72 6f  operation in pro
143a0 63 65 73 73 0a 2a 2a 20 66 61 69 6c 73 20 61 6e  cess.** fails an
143b0 64 20 61 6e 79 20 70 72 69 6f 72 20 63 68 61 6e  d any prior chan
143c0 67 65 73 20 66 72 6f 6d 20 74 68 61 74 20 6f 6e  ges from that on
143d0 65 20 6f 70 65 72 61 74 69 6f 6e 20 61 72 65 20  e operation are 
143e0 62 61 63 6b 65 64 20 6f 75 74 2c 0a 2a 2a 20 62  backed out,.** b
143f0 75 74 20 74 68 65 20 74 72 61 6e 73 61 63 74 69  ut the transacti
14400 6f 6e 20 69 73 20 6e 6f 74 20 72 6f 6c 6c 65 64  on is not rolled
14410 20 62 61 63 6b 2e 20 20 46 41 49 4c 20 70 72 6f   back.  FAIL pro
14420 63 65 73 73 69 6e 67 20 6d 65 61 6e 73 20 74 68  cessing means th
14430 61 74 0a 2a 2a 20 74 68 65 20 6f 70 65 72 61 74  at.** the operat
14440 69 6f 6e 20 69 6e 20 70 72 6f 67 72 65 73 73 20  ion in progress 
14450 73 74 6f 70 73 20 61 6e 64 20 72 65 74 75 72 6e  stops and return
14460 73 20 61 6e 20 65 72 72 6f 72 20 63 6f 64 65 2e  s an error code.
14470 20 20 42 75 74 20 70 72 69 6f 72 0a 2a 2a 20 63    But prior.** c
14480 68 61 6e 67 65 73 20 64 75 65 20 74 6f 20 74 68  hanges due to th
14490 65 20 73 61 6d 65 20 6f 70 65 72 61 74 69 6f 6e  e same operation
144a0 20 61 72 65 20 6e 6f 74 20 62 61 63 6b 65 64 20   are not backed 
144b0 6f 75 74 20 61 6e 64 20 6e 6f 20 72 6f 6c 6c 62  out and no rollb
144c0 61 63 6b 0a 2a 2a 20 6f 63 63 75 72 73 2e 20 20  ack.** occurs.  
144d0 49 47 4e 4f 52 45 20 6d 65 61 6e 73 20 74 68 61  IGNORE means tha
144e0 74 20 74 68 65 20 70 61 72 74 69 63 75 6c 61 72  t the particular
144f0 20 72 6f 77 20 74 68 61 74 20 63 61 75 73 65 64   row that caused
14500 20 74 68 65 20 63 6f 6e 73 74 72 61 69 6e 74 0a   the constraint.
14510 2a 2a 20 65 72 72 6f 72 20 69 73 20 6e 6f 74 20  ** error is not 
14520 69 6e 73 65 72 74 65 64 20 6f 72 20 75 70 64 61  inserted or upda
14530 74 65 64 2e 20 20 50 72 6f 63 65 73 73 69 6e 67  ted.  Processing
14540 20 63 6f 6e 74 69 6e 75 65 73 20 61 6e 64 20 6e   continues and n
14550 6f 20 65 72 72 6f 72 0a 2a 2a 20 69 73 20 72 65  o error.** is re
14560 74 75 72 6e 65 64 2e 20 20 52 45 50 4c 41 43 45  turned.  REPLACE
14570 20 6d 65 61 6e 73 20 74 68 61 74 20 70 72 65 65   means that pree
14580 78 69 73 74 69 6e 67 20 64 61 74 61 62 61 73 65  xisting database
14590 20 72 6f 77 73 20 74 68 61 74 20 63 61 75 73 65   rows that cause
145a0 64 0a 2a 2a 20 61 20 55 4e 49 51 55 45 20 63 6f  d.** a UNIQUE co
145b0 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69  nstraint violati
145c0 6f 6e 20 61 72 65 20 72 65 6d 6f 76 65 64 20 73  on are removed s
145d0 6f 20 74 68 61 74 20 74 68 65 20 6e 65 77 20 69  o that the new i
145e0 6e 73 65 72 74 20 6f 72 0a 2a 2a 20 75 70 64 61  nsert or.** upda
145f0 74 65 20 63 61 6e 20 70 72 6f 63 65 65 64 2e 20  te can proceed. 
14600 20 50 72 6f 63 65 73 73 69 6e 67 20 63 6f 6e 74   Processing cont
14610 69 6e 75 65 73 20 61 6e 64 20 6e 6f 20 65 72 72  inues and no err
14620 6f 72 20 69 73 20 72 65 70 6f 72 74 65 64 2e 0a  or is reported..
14630 2a 2a 0a 2a 2a 20 52 45 53 54 52 49 43 54 2c 20  **.** RESTRICT, 
14640 53 45 54 4e 55 4c 4c 2c 20 61 6e 64 20 43 41 53  SETNULL, and CAS
14650 43 41 44 45 20 61 63 74 69 6f 6e 73 20 61 70 70  CADE actions app
14660 6c 79 20 6f 6e 6c 79 20 74 6f 20 66 6f 72 65 69  ly only to forei
14670 67 6e 20 6b 65 79 73 2e 0a 2a 2a 20 52 45 53 54  gn keys..** REST
14680 52 49 43 54 20 69 73 20 74 68 65 20 73 61 6d 65  RICT is the same
14690 20 61 73 20 41 42 4f 52 54 20 66 6f 72 20 49 4d   as ABORT for IM
146a0 4d 45 44 49 41 54 45 20 66 6f 72 65 69 67 6e 20  MEDIATE foreign 
146b0 6b 65 79 73 20 61 6e 64 20 74 68 65 0a 2a 2a 20  keys and the.** 
146c0 73 61 6d 65 20 61 73 20 52 4f 4c 4c 42 41 43 4b  same as ROLLBACK
146d0 20 66 6f 72 20 44 45 46 45 52 52 45 44 20 6b 65   for DEFERRED ke
146e0 79 73 2e 20 20 53 45 54 4e 55 4c 4c 20 6d 65 61  ys.  SETNULL mea
146f0 6e 73 20 74 68 61 74 20 74 68 65 20 66 6f 72 65  ns that the fore
14700 69 67 6e 0a 2a 2a 20 6b 65 79 20 69 73 20 73 65  ign.** key is se
14710 74 20 74 6f 20 4e 55 4c 4c 2e 20 20 43 41 53 43  t to NULL.  CASC
14720 41 44 45 20 6d 65 61 6e 73 20 74 68 61 74 20 61  ADE means that a
14730 20 44 45 4c 45 54 45 20 6f 72 20 55 50 44 41 54   DELETE or UPDAT
14740 45 20 6f 66 20 74 68 65 0a 2a 2a 20 72 65 66 65  E of the.** refe
14750 72 65 6e 63 65 64 20 74 61 62 6c 65 20 72 6f 77  renced table row
14760 20 69 73 20 70 72 6f 70 61 67 61 74 65 64 20 69   is propagated i
14770 6e 74 6f 20 74 68 65 20 72 6f 77 20 74 68 61 74  nto the row that
14780 20 68 6f 6c 64 73 20 74 68 65 0a 2a 2a 20 66 6f   holds the.** fo
14790 72 65 69 67 6e 20 6b 65 79 2e 0a 2a 2a 0a 2a 2a  reign key..**.**
147a0 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   The following s
147b0 79 6d 62 6f 6c 69 63 20 76 61 6c 75 65 73 20 61  ymbolic values a
147c0 72 65 20 75 73 65 64 20 74 6f 20 72 65 63 6f 72  re used to recor
147d0 64 20 77 68 69 63 68 20 74 79 70 65 0a 2a 2a 20  d which type.** 
147e0 6f 66 20 61 63 74 69 6f 6e 20 74 6f 20 74 61 6b  of action to tak
147f0 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45  e..*/.#define OE
14800 5f 4e 6f 6e 65 20 20 20 20 20 30 20 20 20 2f 2a  _None     0   /*
14810 20 54 68 65 72 65 20 69 73 20 6e 6f 20 63 6f 6e   There is no con
14820 73 74 72 61 69 6e 74 20 74 6f 20 63 68 65 63 6b  straint to check
14830 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 52   */.#define OE_R
14840 6f 6c 6c 62 61 63 6b 20 31 20 20 20 2f 2a 20 46  ollback 1   /* F
14850 61 69 6c 20 74 68 65 20 6f 70 65 72 61 74 69 6f  ail the operatio
14860 6e 20 61 6e 64 20 72 6f 6c 6c 62 61 63 6b 20 74  n and rollback t
14870 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 2a  he transaction *
14880 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 41 62 6f  /.#define OE_Abo
14890 72 74 20 20 20 20 32 20 20 20 2f 2a 20 42 61 63  rt    2   /* Bac
148a0 6b 20 6f 75 74 20 63 68 61 6e 67 65 73 20 62 75  k out changes bu
148b0 74 20 64 6f 20 6e 6f 20 72 6f 6c 6c 62 61 63 6b  t do no rollback
148c0 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 2a 2f 0a   transaction */.
148d0 23 64 65 66 69 6e 65 20 4f 45 5f 46 61 69 6c 20  #define OE_Fail 
148e0 20 20 20 20 33 20 20 20 2f 2a 20 53 74 6f 70 20      3   /* Stop 
148f0 74 68 65 20 6f 70 65 72 61 74 69 6f 6e 20 62 75  the operation bu
14900 74 20 6c 65 61 76 65 20 61 6c 6c 20 70 72 69 6f  t leave all prio
14910 72 20 63 68 61 6e 67 65 73 20 2a 2f 0a 23 64 65  r changes */.#de
14920 66 69 6e 65 20 4f 45 5f 49 67 6e 6f 72 65 20 20  fine OE_Ignore  
14930 20 34 20 20 20 2f 2a 20 49 67 6e 6f 72 65 20 74   4   /* Ignore t
14940 68 65 20 65 72 72 6f 72 2e 20 44 6f 20 6e 6f 74  he error. Do not
14950 20 64 6f 20 74 68 65 20 49 4e 53 45 52 54 20 6f   do the INSERT o
14960 72 20 55 50 44 41 54 45 20 2a 2f 0a 23 64 65 66  r UPDATE */.#def
14970 69 6e 65 20 4f 45 5f 52 65 70 6c 61 63 65 20 20  ine OE_Replace  
14980 35 20 20 20 2f 2a 20 44 65 6c 65 74 65 20 65 78  5   /* Delete ex
14990 69 73 74 69 6e 67 20 72 65 63 6f 72 64 2c 20 74  isting record, t
149a0 68 65 6e 20 64 6f 20 49 4e 53 45 52 54 20 6f 72  hen do INSERT or
149b0 20 55 50 44 41 54 45 20 2a 2f 0a 23 64 65 66 69   UPDATE */.#defi
149c0 6e 65 20 4f 45 5f 55 70 64 61 74 65 20 20 20 36  ne OE_Update   6
149d0 20 20 20 2f 2a 20 50 72 6f 63 65 73 73 20 61 73     /* Process as
149e0 20 61 20 44 4f 20 55 50 44 41 54 45 20 69 6e 20   a DO UPDATE in 
149f0 61 6e 20 75 70 73 65 72 74 20 2a 2f 0a 23 64 65  an upsert */.#de
14a00 66 69 6e 65 20 4f 45 5f 52 65 73 74 72 69 63 74  fine OE_Restrict
14a10 20 37 20 20 20 2f 2a 20 4f 45 5f 41 62 6f 72 74   7   /* OE_Abort
14a20 20 66 6f 72 20 49 4d 4d 45 44 49 41 54 45 2c 20   for IMMEDIATE, 
14a30 4f 45 5f 52 6f 6c 6c 62 61 63 6b 20 66 6f 72 20  OE_Rollback for 
14a40 44 45 46 45 52 52 45 44 20 2a 2f 0a 23 64 65 66  DEFERRED */.#def
14a50 69 6e 65 20 4f 45 5f 53 65 74 4e 75 6c 6c 20 20  ine OE_SetNull  
14a60 38 20 20 20 2f 2a 20 53 65 74 20 74 68 65 20 66  8   /* Set the f
14a70 6f 72 65 69 67 6e 20 6b 65 79 20 76 61 6c 75 65  oreign key value
14a80 20 74 6f 20 4e 55 4c 4c 20 2a 2f 0a 23 64 65 66   to NULL */.#def
14a90 69 6e 65 20 4f 45 5f 53 65 74 44 66 6c 74 20 20  ine OE_SetDflt  
14aa0 39 20 20 20 2f 2a 20 53 65 74 20 74 68 65 20 66  9   /* Set the f
14ab0 6f 72 65 69 67 6e 20 6b 65 79 20 76 61 6c 75 65  oreign key value
14ac0 20 74 6f 20 69 74 73 20 64 65 66 61 75 6c 74 20   to its default 
14ad0 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 43 61  */.#define OE_Ca
14ae0 73 63 61 64 65 20 20 31 30 20 20 2f 2a 20 43 61  scade  10  /* Ca
14af0 73 63 61 64 65 20 74 68 65 20 63 68 61 6e 67 65  scade the change
14b00 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f  s */.#define OE_
14b10 44 65 66 61 75 6c 74 20 20 31 31 20 20 2f 2a 20  Default  11  /* 
14b20 44 6f 20 77 68 61 74 65 76 65 72 20 74 68 65 20  Do whatever the 
14b30 64 65 66 61 75 6c 74 20 61 63 74 69 6f 6e 20 69  default action i
14b40 73 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20  s */.../*.** An 
14b50 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20  instance of the 
14b60 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74  following struct
14b70 75 72 65 20 69 73 20 70 61 73 73 65 64 20 61 73  ure is passed as
14b80 20 74 68 65 20 66 69 72 73 74 0a 2a 2a 20 61 72   the first.** ar
14b90 67 75 6d 65 6e 74 20 74 6f 20 73 71 6c 69 74 65  gument to sqlite
14ba0 33 56 64 62 65 4b 65 79 43 6f 6d 70 61 72 65 20  3VdbeKeyCompare 
14bb0 61 6e 64 20 69 73 20 75 73 65 64 20 74 6f 20 63  and is used to c
14bc0 6f 6e 74 72 6f 6c 20 74 68 65 0a 2a 2a 20 63 6f  ontrol the.** co
14bd0 6d 70 61 72 69 73 6f 6e 20 6f 66 20 74 68 65 20  mparison of the 
14be0 74 77 6f 20 69 6e 64 65 78 20 6b 65 79 73 2e 0a  two index keys..
14bf0 2a 2a 0a 2a 2a 20 4e 6f 74 65 20 74 68 61 74 20  **.** Note that 
14c00 61 53 6f 72 74 4f 72 64 65 72 5b 5d 20 61 6e 64  aSortOrder[] and
14c10 20 61 43 6f 6c 6c 5b 5d 20 68 61 76 65 20 6e 46   aColl[] have nF
14c20 69 65 6c 64 2b 31 20 73 6c 6f 74 73 2e 20 20 54  ield+1 slots.  T
14c30 68 65 72 65 0a 2a 2a 20 61 72 65 20 6e 46 69 65  here.** are nFie
14c40 6c 64 20 73 6c 6f 74 73 20 66 6f 72 20 74 68 65  ld slots for the
14c50 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 61 6e 20 69   columns of an i
14c60 6e 64 65 78 20 74 68 65 6e 20 6f 6e 65 20 65 78  ndex then one ex
14c70 74 72 61 20 73 6c 6f 74 0a 2a 2a 20 66 6f 72 20  tra slot.** for 
14c80 74 68 65 20 72 6f 77 69 64 20 61 74 20 74 68 65  the rowid at the
14c90 20 65 6e 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20   end..*/.struct 
14ca0 4b 65 79 49 6e 66 6f 20 7b 0a 20 20 75 33 32 20  KeyInfo {.  u32 
14cb0 6e 52 65 66 3b 20 20 20 20 20 20 20 20 20 20 20  nRef;           
14cc0 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 72 65 66  /* Number of ref
14cd0 65 72 65 6e 63 65 73 20 74 6f 20 74 68 69 73 20  erences to this 
14ce0 4b 65 79 49 6e 66 6f 20 6f 62 6a 65 63 74 20 2a  KeyInfo object *
14cf0 2f 0a 20 20 75 38 20 65 6e 63 3b 20 20 20 20 20  /.  u8 enc;     
14d00 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78 74 20          /* Text 
14d10 65 6e 63 6f 64 69 6e 67 20 2d 20 6f 6e 65 20 6f  encoding - one o
14d20 66 20 74 68 65 20 53 51 4c 49 54 45 5f 55 54 46  f the SQLITE_UTF
14d30 2a 20 76 61 6c 75 65 73 20 2a 2f 0a 20 20 75 31  * values */.  u1
14d40 36 20 6e 4b 65 79 46 69 65 6c 64 3b 20 20 20 20  6 nKeyField;    
14d50 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6b    /* Number of k
14d60 65 79 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68  ey columns in th
14d70 65 20 69 6e 64 65 78 20 2a 2f 0a 20 20 75 31 36  e index */.  u16
14d80 20 6e 41 6c 6c 46 69 65 6c 64 3b 20 20 20 20 20   nAllField;     
14d90 20 2f 2a 20 54 6f 74 61 6c 20 63 6f 6c 75 6d 6e   /* Total column
14da0 73 2c 20 69 6e 63 6c 75 64 69 6e 67 20 6b 65 79  s, including key
14db0 20 70 6c 75 73 20 6f 74 68 65 72 73 20 2a 2f 0a   plus others */.
14dc0 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 20 20    sqlite3 *db;  
14dd0 20 20 20 20 20 20 2f 2a 20 54 68 65 20 64 61 74        /* The dat
14de0 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  abase connection
14df0 20 2a 2f 0a 20 20 75 38 20 2a 61 53 6f 72 74 4f   */.  u8 *aSortO
14e00 72 64 65 72 3b 20 20 20 20 20 2f 2a 20 53 6f 72  rder;     /* Sor
14e10 74 20 6f 72 64 65 72 20 66 6f 72 20 65 61 63 68  t order for each
14e20 20 63 6f 6c 75 6d 6e 2e 20 2a 2f 0a 20 20 43 6f   column. */.  Co
14e30 6c 6c 53 65 71 20 2a 61 43 6f 6c 6c 5b 31 5d 3b  llSeq *aColl[1];
14e40 20 20 2f 2a 20 43 6f 6c 6c 61 74 69 6e 67 20 73    /* Collating s
14e50 65 71 75 65 6e 63 65 20 66 6f 72 20 65 61 63 68  equence for each
14e60 20 74 65 72 6d 20 6f 66 20 74 68 65 20 6b 65 79   term of the key
14e70 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68   */.};../*.** Th
14e80 69 73 20 6f 62 6a 65 63 74 20 68 6f 6c 64 73 20  is object holds 
14e90 61 20 72 65 63 6f 72 64 20 77 68 69 63 68 20 68  a record which h
14ea0 61 73 20 62 65 65 6e 20 70 61 72 73 65 64 20 6f  as been parsed o
14eb0 75 74 20 69 6e 74 6f 20 69 6e 64 69 76 69 64 75  ut into individu
14ec0 61 6c 0a 2a 2a 20 66 69 65 6c 64 73 2c 20 66 6f  al.** fields, fo
14ed0 72 20 74 68 65 20 70 75 72 70 6f 73 65 73 20 6f  r the purposes o
14ee0 66 20 64 6f 69 6e 67 20 61 20 63 6f 6d 70 61 72  f doing a compar
14ef0 69 73 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 41 20 72 65  ison..**.** A re
14f00 63 6f 72 64 20 69 73 20 61 6e 20 6f 62 6a 65 63  cord is an objec
14f10 74 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20  t that contains 
14f20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 66 69 65 6c  one or more fiel
14f30 64 73 20 6f 66 20 64 61 74 61 2e 0a 2a 2a 20 52  ds of data..** R
14f40 65 63 6f 72 64 73 20 61 72 65 20 75 73 65 64 20  ecords are used 
14f50 74 6f 20 73 74 6f 72 65 20 74 68 65 20 63 6f 6e  to store the con
14f60 74 65 6e 74 20 6f 66 20 61 20 74 61 62 6c 65 20  tent of a table 
14f70 72 6f 77 20 61 6e 64 20 74 6f 20 73 74 6f 72 65  row and to store
14f80 0a 2a 2a 20 74 68 65 20 6b 65 79 20 6f 66 20 61  .** the key of a
14f90 6e 20 69 6e 64 65 78 2e 20 20 41 20 62 6c 6f 62  n index.  A blob
14fa0 20 65 6e 63 6f 64 69 6e 67 20 6f 66 20 61 20 72   encoding of a r
14fb0 65 63 6f 72 64 20 69 73 20 63 72 65 61 74 65 64  ecord is created
14fc0 20 62 79 0a 2a 2a 20 74 68 65 20 4f 50 5f 4d 61   by.** the OP_Ma
14fd0 6b 65 52 65 63 6f 72 64 20 6f 70 63 6f 64 65 20  keRecord opcode 
14fe0 6f 66 20 74 68 65 20 56 44 42 45 20 61 6e 64 20  of the VDBE and 
14ff0 69 73 20 64 69 73 61 73 73 65 6d 62 6c 65 64 20  is disassembled 
15000 62 79 20 74 68 65 0a 2a 2a 20 4f 50 5f 43 6f 6c  by the.** OP_Col
15010 75 6d 6e 20 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a  umn opcode..**.*
15020 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  * An instance of
15030 20 74 68 69 73 20 6f 62 6a 65 63 74 20 73 65 72   this object ser
15040 76 65 73 20 61 73 20 61 20 22 6b 65 79 22 20 66  ves as a "key" f
15050 6f 72 20 64 6f 69 6e 67 20 61 20 73 65 61 72 63  or doing a searc
15060 68 20 6f 6e 0a 2a 2a 20 61 6e 20 69 6e 64 65 78  h on.** an index
15070 20 62 2b 74 72 65 65 2e 20 54 68 65 20 67 6f 61   b+tree. The goa
15080 6c 20 6f 66 20 74 68 65 20 73 65 61 72 63 68 20  l of the search 
15090 69 73 20 74 6f 20 66 69 6e 64 20 74 68 65 20 65  is to find the e
150a0 6e 74 72 79 20 74 68 61 74 0a 2a 2a 20 69 73 20  ntry that.** is 
150b0 63 6c 6f 73 65 64 20 74 6f 20 74 68 65 20 6b 65  closed to the ke
150c0 79 20 64 65 73 63 72 69 62 65 64 20 62 79 20 74  y described by t
150d0 68 69 73 20 6f 62 6a 65 63 74 2e 20 20 54 68 69  his object.  Thi
150e0 73 20 6f 62 6a 65 63 74 20 6d 69 67 68 74 20 68  s object might h
150f0 6f 6c 64 0a 2a 2a 20 6a 75 73 74 20 61 20 70 72  old.** just a pr
15100 65 66 69 78 20 6f 66 20 74 68 65 20 6b 65 79 2e  efix of the key.
15110 20 20 54 68 65 20 6e 75 6d 62 65 72 20 6f 66 20    The number of 
15120 66 69 65 6c 64 73 20 69 73 20 67 69 76 65 6e 20  fields is given 
15130 62 79 0a 2a 2a 20 70 4b 65 79 49 6e 66 6f 2d 3e  by.** pKeyInfo->
15140 6e 46 69 65 6c 64 2e 0a 2a 2a 0a 2a 2a 20 54 68  nField..**.** Th
15150 65 20 72 31 20 61 6e 64 20 72 32 20 66 69 65 6c  e r1 and r2 fiel
15160 64 73 20 61 72 65 20 74 68 65 20 76 61 6c 75 65  ds are the value
15170 73 20 74 6f 20 72 65 74 75 72 6e 20 69 66 20 74  s to return if t
15180 68 69 73 20 6b 65 79 20 69 73 20 6c 65 73 73 20  his key is less 
15190 74 68 61 6e 0a 2a 2a 20 6f 72 20 67 72 65 61 74  than.** or great
151a0 65 72 20 74 68 61 6e 20 61 20 6b 65 79 20 69 6e  er than a key in
151b0 20 74 68 65 20 62 74 72 65 65 2c 20 72 65 73 70   the btree, resp
151c0 65 63 74 69 76 65 6c 79 2e 20 20 54 68 65 73 65  ectively.  These
151d0 20 61 72 65 20 6e 6f 72 6d 61 6c 6c 79 0a 2a 2a   are normally.**
151e0 20 2d 31 20 61 6e 64 20 2b 31 20 72 65 73 70 65   -1 and +1 respe
151f0 63 74 69 76 65 6c 79 2c 20 62 75 74 20 6d 69 67  ctively, but mig
15200 68 74 20 62 65 20 69 6e 76 65 72 74 65 64 20 74  ht be inverted t
15210 6f 20 2b 31 20 61 6e 64 20 2d 31 20 69 66 20 74  o +1 and -1 if t
15220 68 65 20 62 2d 74 72 65 65 0a 2a 2a 20 69 73 20  he b-tree.** is 
15230 69 6e 20 44 45 53 43 20 6f 72 64 65 72 2e 0a 2a  in DESC order..*
15240 2a 0a 2a 2a 20 54 68 65 20 6b 65 79 20 63 6f 6d  *.** The key com
15250 70 61 72 69 73 6f 6e 20 66 75 6e 63 74 69 6f 6e  parison function
15260 73 20 61 63 74 75 61 6c 6c 79 20 72 65 74 75 72  s actually retur
15270 6e 20 64 65 66 61 75 6c 74 5f 72 63 20 77 68 65  n default_rc whe
15280 6e 20 74 68 65 79 20 66 69 6e 64 0a 2a 2a 20 61  n they find.** a
15290 6e 20 65 71 75 61 6c 73 20 63 6f 6d 70 61 72 69  n equals compari
152a0 73 6f 6e 2e 20 20 64 65 66 61 75 6c 74 5f 72 63  son.  default_rc
152b0 20 63 61 6e 20 62 65 20 2d 31 2c 20 30 2c 20 6f   can be -1, 0, o
152c0 72 20 2b 31 2e 20 20 49 66 20 74 68 65 72 65 20  r +1.  If there 
152d0 61 72 65 0a 2a 2a 20 6d 75 6c 74 69 70 6c 65 20  are.** multiple 
152e0 65 6e 74 72 69 65 73 20 69 6e 20 74 68 65 20 62  entries in the b
152f0 2d 74 72 65 65 20 77 69 74 68 20 74 68 65 20 73  -tree with the s
15300 61 6d 65 20 6b 65 79 20 28 77 68 65 6e 20 6f 6e  ame key (when on
15310 6c 79 20 6c 6f 6f 6b 69 6e 67 0a 2a 2a 20 61 74  ly looking.** at
15320 20 74 68 65 20 66 69 72 73 74 20 70 4b 65 79 49   the first pKeyI
15330 6e 66 6f 2d 3e 6e 46 69 65 6c 64 73 2c 29 20 74  nfo->nFields,) t
15340 68 65 6e 20 64 65 66 61 75 6c 74 5f 72 63 20 63  hen default_rc c
15350 61 6e 20 62 65 20 73 65 74 20 74 6f 20 2d 31 20  an be set to -1 
15360 74 6f 0a 2a 2a 20 63 61 75 73 65 20 74 68 65 20  to.** cause the 
15370 73 65 61 72 63 68 20 74 6f 20 66 69 6e 64 20 74  search to find t
15380 68 65 20 6c 61 73 74 20 6d 61 74 63 68 2c 20 6f  he last match, o
15390 72 20 2b 31 20 74 6f 20 63 61 75 73 65 20 74 68  r +1 to cause th
153a0 65 20 73 65 61 72 63 68 20 74 6f 0a 2a 2a 20 66  e search to.** f
153b0 69 6e 64 20 74 68 65 20 66 69 72 73 74 20 6d 61  ind the first ma
153c0 74 63 68 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6b  tch..**.** The k
153d0 65 79 20 63 6f 6d 70 61 72 69 73 6f 6e 20 66 75  ey comparison fu
153e0 6e 63 74 69 6f 6e 73 20 77 69 6c 6c 20 73 65 74  nctions will set
153f0 20 65 71 53 65 65 6e 20 74 6f 20 74 72 75 65 20   eqSeen to true 
15400 69 66 20 74 68 65 79 20 65 76 65 72 0a 2a 2a 20  if they ever.** 
15410 67 65 74 20 61 6e 64 20 65 71 75 61 6c 20 72 65  get and equal re
15420 73 75 6c 74 73 20 77 68 65 6e 20 63 6f 6d 70 61  sults when compa
15430 72 69 6e 67 20 74 68 69 73 20 73 74 72 75 63 74  ring this struct
15440 75 72 65 20 74 6f 20 61 20 62 2d 74 72 65 65 20  ure to a b-tree 
15450 72 65 63 6f 72 64 2e 0a 2a 2a 20 57 68 65 6e 20  record..** When 
15460 64 65 66 61 75 6c 74 5f 72 63 21 3d 30 2c 20 74  default_rc!=0, t
15470 68 65 20 73 65 61 72 63 68 20 6d 69 67 68 74 20  he search might 
15480 65 6e 64 20 75 70 20 6f 6e 20 74 68 65 20 72 65  end up on the re
15490 63 6f 72 64 20 69 6d 6d 65 64 69 61 74 65 6c 79  cord immediately
154a0 0a 2a 2a 20 62 65 66 6f 72 65 20 74 68 65 20 66  .** before the f
154b0 69 72 73 74 20 6d 61 74 63 68 20 6f 72 20 69 6d  irst match or im
154c0 6d 65 64 69 61 74 65 6c 79 20 61 66 74 65 72 20  mediately after 
154d0 74 68 65 20 6c 61 73 74 20 6d 61 74 63 68 2e 20  the last match. 
154e0 20 54 68 65 0a 2a 2a 20 65 71 53 65 65 6e 20 66   The.** eqSeen f
154f0 69 65 6c 64 20 77 69 6c 6c 20 69 6e 64 69 63 61  ield will indica
15500 74 65 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f  te whether or no
15510 74 20 61 6e 20 65 78 61 63 74 20 6d 61 74 63 68  t an exact match
15520 20 65 78 69 73 74 73 20 69 6e 20 74 68 65 0a 2a   exists in the.*
15530 2a 20 62 2d 74 72 65 65 2e 0a 2a 2f 0a 73 74 72  * b-tree..*/.str
15540 75 63 74 20 55 6e 70 61 63 6b 65 64 52 65 63 6f  uct UnpackedReco
15550 72 64 20 7b 0a 20 20 4b 65 79 49 6e 66 6f 20 2a  rd {.  KeyInfo *
15560 70 4b 65 79 49 6e 66 6f 3b 20 20 2f 2a 20 43 6f  pKeyInfo;  /* Co
15570 6c 6c 61 74 69 6f 6e 20 61 6e 64 20 73 6f 72 74  llation and sort
15580 2d 6f 72 64 65 72 20 69 6e 66 6f 72 6d 61 74 69  -order informati
15590 6f 6e 20 2a 2f 0a 20 20 4d 65 6d 20 2a 61 4d 65  on */.  Mem *aMe
155a0 6d 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56  m;          /* V
155b0 61 6c 75 65 73 20 2a 2f 0a 20 20 75 31 36 20 6e  alues */.  u16 n
155c0 46 69 65 6c 64 3b 20 20 20 20 20 20 20 20 20 2f  Field;         /
155d0 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 6e 74 72  * Number of entr
155e0 69 65 73 20 69 6e 20 61 70 4d 65 6d 5b 5d 20 2a  ies in apMem[] *
155f0 2f 0a 20 20 69 38 20 64 65 66 61 75 6c 74 5f 72  /.  i8 default_r
15600 63 3b 20 20 20 20 20 20 2f 2a 20 43 6f 6d 70 61  c;      /* Compa
15610 72 69 73 6f 6e 20 72 65 73 75 6c 74 20 69 66 20  rison result if 
15620 6b 65 79 73 20 61 72 65 20 65 71 75 61 6c 20 2a  keys are equal *
15630 2f 0a 20 20 75 38 20 65 72 72 43 6f 64 65 3b 20  /.  u8 errCode; 
15640 20 20 20 20 20 20 20 20 2f 2a 20 45 72 72 6f 72          /* Error
15650 20 64 65 74 65 63 74 65 64 20 62 79 20 78 52 65   detected by xRe
15660 63 6f 72 64 43 6f 6d 70 61 72 65 20 28 43 4f 52  cordCompare (COR
15670 52 55 50 54 20 6f 72 20 4e 4f 4d 45 4d 29 20 2a  RUPT or NOMEM) *
15680 2f 0a 20 20 69 38 20 72 31 3b 20 20 20 20 20 20  /.  i8 r1;      
15690 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65          /* Value
156a0 20 74 6f 20 72 65 74 75 72 6e 20 69 66 20 28 6c   to return if (l
156b0 68 73 20 3c 20 72 68 73 29 20 2a 2f 0a 20 20 69  hs < rhs) */.  i
156c0 38 20 72 32 3b 20 20 20 20 20 20 20 20 20 20 20  8 r2;           
156d0 20 20 20 2f 2a 20 56 61 6c 75 65 20 74 6f 20 72     /* Value to r
156e0 65 74 75 72 6e 20 69 66 20 28 6c 68 73 20 3e 20  eturn if (lhs > 
156f0 72 68 73 29 20 2a 2f 0a 20 20 75 38 20 65 71 53  rhs) */.  u8 eqS
15700 65 65 6e 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  een;          /*
15710 20 54 72 75 65 20 69 66 20 61 6e 20 65 71 75 61   True if an equa
15720 6c 69 74 79 20 63 6f 6d 70 61 72 69 73 6f 6e 20  lity comparison 
15730 68 61 73 20 62 65 65 6e 20 73 65 65 6e 20 2a 2f  has been seen */
15740 0a 7d 3b 0a 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68  .};.../*.** Each
15750 20 53 51 4c 20 69 6e 64 65 78 20 69 73 20 72 65   SQL index is re
15760 70 72 65 73 65 6e 74 65 64 20 69 6e 20 6d 65 6d  presented in mem
15770 6f 72 79 20 62 79 20 61 6e 0a 2a 2a 20 69 6e 73  ory by an.** ins
15780 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c  tance of the fol
15790 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65  lowing structure
157a0 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f 6c 75  ..**.** The colu
157b0 6d 6e 73 20 6f 66 20 74 68 65 20 74 61 62 6c 65  mns of the table
157c0 20 74 68 61 74 20 61 72 65 20 74 6f 20 62 65 20   that are to be 
157d0 69 6e 64 65 78 65 64 20 61 72 65 20 64 65 73 63  indexed are desc
157e0 72 69 62 65 64 0a 2a 2a 20 62 79 20 74 68 65 20  ribed.** by the 
157f0 61 69 43 6f 6c 75 6d 6e 5b 5d 20 66 69 65 6c 64  aiColumn[] field
15800 20 6f 66 20 74 68 69 73 20 73 74 72 75 63 74 75   of this structu
15810 72 65 2e 20 20 46 6f 72 20 65 78 61 6d 70 6c 65  re.  For example
15820 2c 20 73 75 70 70 6f 73 65 0a 2a 2a 20 77 65 20  , suppose.** we 
15830 68 61 76 65 20 74 68 65 20 66 6f 6c 6c 6f 77 69  have the followi
15840 6e 67 20 74 61 62 6c 65 20 61 6e 64 20 69 6e 64  ng table and ind
15850 65 78 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 43 52  ex:.**.**     CR
15860 45 41 54 45 20 54 41 42 4c 45 20 45 78 31 28 63  EATE TABLE Ex1(c
15870 31 20 69 6e 74 2c 20 63 32 20 69 6e 74 2c 20 63  1 int, c2 int, c
15880 33 20 74 65 78 74 29 3b 0a 2a 2a 20 20 20 20 20  3 text);.**     
15890 43 52 45 41 54 45 20 49 4e 44 45 58 20 45 78 32  CREATE INDEX Ex2
158a0 20 4f 4e 20 45 78 31 28 63 33 2c 63 31 29 3b 0a   ON Ex1(c3,c1);.
158b0 2a 2a 0a 2a 2a 20 49 6e 20 74 68 65 20 54 61 62  **.** In the Tab
158c0 6c 65 20 73 74 72 75 63 74 75 72 65 20 64 65 73  le structure des
158d0 63 72 69 62 69 6e 67 20 45 78 31 2c 20 6e 43 6f  cribing Ex1, nCo
158e0 6c 3d 3d 33 20 62 65 63 61 75 73 65 20 74 68 65  l==3 because the
158f0 72 65 20 61 72 65 0a 2a 2a 20 74 68 72 65 65 20  re are.** three 
15900 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 74  columns in the t
15910 61 62 6c 65 2e 20 20 49 6e 20 74 68 65 20 49 6e  able.  In the In
15920 64 65 78 20 73 74 72 75 63 74 75 72 65 20 64 65  dex structure de
15930 73 63 72 69 62 69 6e 67 0a 2a 2a 20 45 78 32 2c  scribing.** Ex2,
15940 20 6e 43 6f 6c 75 6d 6e 3d 3d 32 20 73 69 6e 63   nColumn==2 sinc
15950 65 20 32 20 6f 66 20 74 68 65 20 33 20 63 6f 6c  e 2 of the 3 col
15960 75 6d 6e 73 20 6f 66 20 45 78 31 20 61 72 65 20  umns of Ex1 are 
15970 69 6e 64 65 78 65 64 2e 0a 2a 2a 20 54 68 65 20  indexed..** The 
15980 76 61 6c 75 65 20 6f 66 20 61 69 43 6f 6c 75 6d  value of aiColum
15990 6e 20 69 73 20 7b 32 2c 20 30 7d 2e 20 20 61 69  n is {2, 0}.  ai
159a0 43 6f 6c 75 6d 6e 5b 30 5d 3d 3d 32 20 62 65 63  Column[0]==2 bec
159b0 61 75 73 65 20 74 68 65 0a 2a 2a 20 66 69 72 73  ause the.** firs
159c0 74 20 63 6f 6c 75 6d 6e 20 74 6f 20 62 65 20 69  t column to be i
159d0 6e 64 65 78 65 64 20 28 63 33 29 20 68 61 73 20  ndexed (c3) has 
159e0 61 6e 20 69 6e 64 65 78 20 6f 66 20 32 20 69 6e  an index of 2 in
159f0 20 45 78 31 2e 61 43 6f 6c 5b 5d 2e 0a 2a 2a 20   Ex1.aCol[]..** 
15a00 54 68 65 20 73 65 63 6f 6e 64 20 63 6f 6c 75 6d  The second colum
15a10 6e 20 74 6f 20 62 65 20 69 6e 64 65 78 65 64 20  n to be indexed 
15a20 28 63 31 29 20 68 61 73 20 61 6e 20 69 6e 64 65  (c1) has an inde
15a30 78 20 6f 66 20 30 20 69 6e 0a 2a 2a 20 45 78 31  x of 0 in.** Ex1
15a40 2e 61 43 6f 6c 5b 5d 2c 20 68 65 6e 63 65 20 45  .aCol[], hence E
15a50 78 32 2e 61 69 43 6f 6c 75 6d 6e 5b 31 5d 3d 3d  x2.aiColumn[1]==
15a60 30 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 49 6e 64  0..**.** The Ind
15a70 65 78 2e 6f 6e 45 72 72 6f 72 20 66 69 65 6c 64  ex.onError field
15a80 20 64 65 74 65 72 6d 69 6e 65 73 20 77 68 65 74   determines whet
15a90 68 65 72 20 6f 72 20 6e 6f 74 20 74 68 65 20 69  her or not the i
15aa0 6e 64 65 78 65 64 20 63 6f 6c 75 6d 6e 73 0a 2a  ndexed columns.*
15ab0 2a 20 6d 75 73 74 20 62 65 20 75 6e 69 71 75 65  * must be unique
15ac0 20 61 6e 64 20 77 68 61 74 20 74 6f 20 64 6f 20   and what to do 
15ad0 69 66 20 74 68 65 79 20 61 72 65 20 6e 6f 74 2e  if they are not.
15ae0 20 20 57 68 65 6e 20 49 6e 64 65 78 2e 6f 6e 45    When Index.onE
15af0 72 72 6f 72 3d 4f 45 5f 4e 6f 6e 65 2c 0a 2a 2a  rror=OE_None,.**
15b00 20 69 74 20 6d 65 61 6e 73 20 74 68 69 73 20 69   it means this i
15b10 73 20 6e 6f 74 20 61 20 75 6e 69 71 75 65 20 69  s not a unique i
15b20 6e 64 65 78 2e 20 20 4f 74 68 65 72 77 69 73 65  ndex.  Otherwise
15b30 20 69 74 20 69 73 20 61 20 75 6e 69 71 75 65 20   it is a unique 
15b40 69 6e 64 65 78 0a 2a 2a 20 61 6e 64 20 74 68 65  index.** and the
15b50 20 76 61 6c 75 65 20 6f 66 20 49 6e 64 65 78 2e   value of Index.
15b60 6f 6e 45 72 72 6f 72 20 69 6e 64 69 63 61 74 65  onError indicate
15b70 20 74 68 65 20 77 68 69 63 68 20 63 6f 6e 66 6c   the which confl
15b80 69 63 74 20 72 65 73 6f 6c 75 74 69 6f 6e 0a 2a  ict resolution.*
15b90 2a 20 61 6c 67 6f 72 69 74 68 6d 20 74 6f 20 65  * algorithm to e
15ba0 6d 70 6c 6f 79 20 77 68 65 6e 65 76 65 72 20 61  mploy whenever a
15bb0 6e 20 61 74 74 65 6d 70 74 20 69 73 20 6d 61 64  n attempt is mad
15bc0 65 20 74 6f 20 69 6e 73 65 72 74 20 61 20 6e 6f  e to insert a no
15bd0 6e 2d 75 6e 69 71 75 65 0a 2a 2a 20 65 6c 65 6d  n-unique.** elem
15be0 65 6e 74 2e 0a 2a 2a 0a 2a 2a 20 57 68 69 6c 65  ent..**.** While
15bf0 20 70 61 72 73 69 6e 67 20 61 20 43 52 45 41 54   parsing a CREAT
15c00 45 20 54 41 42 4c 45 20 6f 72 20 43 52 45 41 54  E TABLE or CREAT
15c10 45 20 49 4e 44 45 58 20 73 74 61 74 65 6d 65 6e  E INDEX statemen
15c20 74 20 69 6e 20 6f 72 64 65 72 20 74 6f 0a 2a 2a  t in order to.**
15c30 20 67 65 6e 65 72 61 74 65 20 56 44 42 45 20 63   generate VDBE c
15c40 6f 64 65 20 28 61 73 20 6f 70 70 6f 73 65 64 20  ode (as opposed 
15c50 74 6f 20 70 61 72 73 69 6e 67 20 6f 6e 65 20 72  to parsing one r
15c60 65 61 64 20 66 72 6f 6d 20 61 6e 20 73 71 6c 69  ead from an sqli
15c70 74 65 5f 6d 61 73 74 65 72 0a 2a 2a 20 74 61 62  te_master.** tab
15c80 6c 65 20 61 73 20 70 61 72 74 20 6f 66 20 70 61  le as part of pa
15c90 72 73 69 6e 67 20 61 6e 20 65 78 69 73 74 69 6e  rsing an existin
15ca0 67 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d  g database schem
15cb0 61 29 2c 20 74 72 61 6e 73 69 65 6e 74 20 69 6e  a), transient in
15cc0 73 74 61 6e 63 65 73 0a 2a 2a 20 6f 66 20 74 68  stances.** of th
15cd0 69 73 20 73 74 72 75 63 74 75 72 65 20 6d 61 79  is structure may
15ce0 20 62 65 20 63 72 65 61 74 65 64 2e 20 49 6e 20   be created. In 
15cf0 74 68 69 73 20 63 61 73 65 20 74 68 65 20 49 6e  this case the In
15d00 64 65 78 2e 74 6e 75 6d 20 76 61 72 69 61 62 6c  dex.tnum variabl
15d10 65 20 69 73 0a 2a 2a 20 75 73 65 64 20 74 6f 20  e is.** used to 
15d20 73 74 6f 72 65 20 74 68 65 20 61 64 64 72 65 73  store the addres
15d30 73 20 6f 66 20 61 20 56 44 42 45 20 69 6e 73 74  s of a VDBE inst
15d40 72 75 63 74 69 6f 6e 2c 20 6e 6f 74 20 61 20 64  ruction, not a d
15d50 61 74 61 62 61 73 65 20 70 61 67 65 0a 2a 2a 20  atabase page.** 
15d60 6e 75 6d 62 65 72 20 28 69 74 20 63 61 6e 6e 6f  number (it canno
15d70 74 20 2d 20 74 68 65 20 64 61 74 61 62 61 73 65  t - the database
15d80 20 70 61 67 65 20 69 73 20 6e 6f 74 20 61 6c 6c   page is not all
15d90 6f 63 61 74 65 64 20 75 6e 74 69 6c 20 74 68 65  ocated until the
15da0 20 56 44 42 45 0a 2a 2a 20 70 72 6f 67 72 61 6d   VDBE.** program
15db0 20 69 73 20 65 78 65 63 75 74 65 64 29 2e 20 53   is executed). S
15dc0 65 65 20 63 6f 6e 76 65 72 74 54 6f 57 69 74 68  ee convertToWith
15dd0 6f 75 74 52 6f 77 69 64 54 61 62 6c 65 28 29 20  outRowidTable() 
15de0 66 6f 72 20 64 65 74 61 69 6c 73 2e 0a 2a 2f 0a  for details..*/.
15df0 73 74 72 75 63 74 20 49 6e 64 65 78 20 7b 0a 20  struct Index {. 
15e00 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20   char *zName;   
15e10 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d            /* Nam
15e20 65 20 6f 66 20 74 68 69 73 20 69 6e 64 65 78 20  e of this index 
15e30 2a 2f 0a 20 20 69 31 36 20 2a 61 69 43 6f 6c 75  */.  i16 *aiColu
15e40 6d 6e 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  mn;           /*
15e50 20 57 68 69 63 68 20 63 6f 6c 75 6d 6e 73 20 61   Which columns a
15e60 72 65 20 75 73 65 64 20 62 79 20 74 68 69 73 20  re used by this 
15e70 69 6e 64 65 78 2e 20 20 31 73 74 20 69 73 20 30  index.  1st is 0
15e80 20 2a 2f 0a 20 20 4c 6f 67 45 73 74 20 2a 61 69   */.  LogEst *ai
15e90 52 6f 77 4c 6f 67 45 73 74 3b 20 20 20 20 20 2f  RowLogEst;     /
15ea0 2a 20 46 72 6f 6d 20 41 4e 41 4c 59 5a 45 3a 20  * From ANALYZE: 
15eb0 45 73 74 2e 20 72 6f 77 73 20 73 65 6c 65 63 74  Est. rows select
15ec0 65 64 20 62 79 20 65 61 63 68 20 63 6f 6c 75 6d  ed by each colum
15ed0 6e 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70 54  n */.  Table *pT
15ee0 61 62 6c 65 3b 20 20 20 20 20 20 20 20 20 20 20  able;           
15ef0 2f 2a 20 54 68 65 20 53 51 4c 20 74 61 62 6c 65  /* The SQL table
15f00 20 62 65 69 6e 67 20 69 6e 64 65 78 65 64 20 2a   being indexed *
15f10 2f 0a 20 20 63 68 61 72 20 2a 7a 43 6f 6c 41 66  /.  char *zColAf
15f20 66 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  f;           /* 
15f30 53 74 72 69 6e 67 20 64 65 66 69 6e 69 6e 67 20  String defining 
15f40 74 68 65 20 61 66 66 69 6e 69 74 79 20 6f 66 20  the affinity of 
15f50 65 61 63 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20  each column */. 
15f60 20 49 6e 64 65 78 20 2a 70 4e 65 78 74 3b 20 20   Index *pNext;  
15f70 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
15f80 20 6e 65 78 74 20 69 6e 64 65 78 20 61 73 73 6f   next index asso
15f90 63 69 61 74 65 64 20 77 69 74 68 20 74 68 65 20  ciated with the 
15fa0 73 61 6d 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20  same table */.  
15fb0 53 63 68 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b  Schema *pSchema;
15fc0 20 20 20 20 20 20 20 20 20 2f 2a 20 53 63 68 65           /* Sche
15fd0 6d 61 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68  ma containing th
15fe0 69 73 20 69 6e 64 65 78 20 2a 2f 0a 20 20 75 38  is index */.  u8
15ff0 20 2a 61 53 6f 72 74 4f 72 64 65 72 3b 20 20 20   *aSortOrder;   
16000 20 20 20 20 20 20 20 2f 2a 20 66 6f 72 20 65 61         /* for ea
16010 63 68 20 63 6f 6c 75 6d 6e 3a 20 54 72 75 65 3d  ch column: True=
16020 3d 44 45 53 43 2c 20 46 61 6c 73 65 3d 3d 41 53  =DESC, False==AS
16030 43 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61  C */.  const cha
16040 72 20 2a 2a 61 7a 43 6f 6c 6c 3b 20 20 20 20 20  r **azColl;     
16050 2f 2a 20 41 72 72 61 79 20 6f 66 20 63 6f 6c 6c  /* Array of coll
16060 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 6e  ation sequence n
16070 61 6d 65 73 20 66 6f 72 20 69 6e 64 65 78 20 2a  ames for index *
16080 2f 0a 20 20 45 78 70 72 20 2a 70 50 61 72 74 49  /.  Expr *pPartI
16090 64 78 57 68 65 72 65 3b 20 20 20 20 20 2f 2a 20  dxWhere;     /* 
160a0 57 48 45 52 45 20 63 6c 61 75 73 65 20 66 6f 72  WHERE clause for
160b0 20 70 61 72 74 69 61 6c 20 69 6e 64 69 63 65 73   partial indices
160c0 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20 2a   */.  ExprList *
160d0 61 43 6f 6c 45 78 70 72 3b 20 20 20 20 20 20 2f  aColExpr;      /
160e0 2a 20 43 6f 6c 75 6d 6e 20 65 78 70 72 65 73 73  * Column express
160f0 69 6f 6e 73 20 2a 2f 0a 20 20 69 6e 74 20 74 6e  ions */.  int tn
16100 75 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  um;             
16110 20 20 20 2f 2a 20 44 42 20 50 61 67 65 20 63 6f     /* DB Page co
16120 6e 74 61 69 6e 69 6e 67 20 72 6f 6f 74 20 6f 66  ntaining root of
16130 20 74 68 69 73 20 69 6e 64 65 78 20 2a 2f 0a 20   this index */. 
16140 20 4c 6f 67 45 73 74 20 73 7a 49 64 78 52 6f 77   LogEst szIdxRow
16150 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 45 73 74  ;         /* Est
16160 69 6d 61 74 65 64 20 61 76 65 72 61 67 65 20 72  imated average r
16170 6f 77 20 73 69 7a 65 20 69 6e 20 62 79 74 65 73  ow size in bytes
16180 20 2a 2f 0a 20 20 75 31 36 20 6e 4b 65 79 43 6f   */.  u16 nKeyCo
16190 6c 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  l;             /
161a0 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75  * Number of colu
161b0 6d 6e 73 20 66 6f 72 6d 69 6e 67 20 74 68 65 20  mns forming the 
161c0 6b 65 79 20 2a 2f 0a 20 20 75 31 36 20 6e 43 6f  key */.  u16 nCo
161d0 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20 20 20 20  lumn;           
161e0 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63    /* Number of c
161f0 6f 6c 75 6d 6e 73 20 73 74 6f 72 65 64 20 69 6e  olumns stored in
16200 20 74 68 65 20 69 6e 64 65 78 20 2a 2f 0a 20 20   the index */.  
16210 75 38 20 6f 6e 45 72 72 6f 72 3b 20 20 20 20 20  u8 onError;     
16220 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 45 5f 41           /* OE_A
16230 62 6f 72 74 2c 20 4f 45 5f 49 67 6e 6f 72 65 2c  bort, OE_Ignore,
16240 20 4f 45 5f 52 65 70 6c 61 63 65 2c 20 6f 72 20   OE_Replace, or 
16250 4f 45 5f 4e 6f 6e 65 20 2a 2f 0a 20 20 75 6e 73  OE_None */.  uns
16260 69 67 6e 65 64 20 69 64 78 54 79 70 65 3a 32 3b  igned idxType:2;
16270 20 20 20 20 20 20 2f 2a 20 31 3d 3d 55 4e 49 51        /* 1==UNIQ
16280 55 45 2c 20 32 3d 3d 50 52 49 4d 41 52 59 20 4b  UE, 2==PRIMARY K
16290 45 59 2c 20 30 3d 3d 43 52 45 41 54 45 20 49 4e  EY, 0==CREATE IN
162a0 44 45 58 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65  DEX */.  unsigne
162b0 64 20 62 55 6e 6f 72 64 65 72 65 64 3a 31 3b 20  d bUnordered:1; 
162c0 20 20 2f 2a 20 55 73 65 20 74 68 69 73 20 69 6e    /* Use this in
162d0 64 65 78 20 66 6f 72 20 3d 3d 20 6f 72 20 49 4e  dex for == or IN
162e0 20 71 75 65 72 69 65 73 20 6f 6e 6c 79 20 2a 2f   queries only */
162f0 0a 20 20 75 6e 73 69 67 6e 65 64 20 75 6e 69 71  .  unsigned uniq
16300 4e 6f 74 4e 75 6c 6c 3a 31 3b 20 20 2f 2a 20 54  NotNull:1;  /* T
16310 72 75 65 20 69 66 20 55 4e 49 51 55 45 20 61 6e  rue if UNIQUE an
16320 64 20 4e 4f 54 20 4e 55 4c 4c 20 66 6f 72 20 61  d NOT NULL for a
16330 6c 6c 20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 20 20  ll columns */.  
16340 75 6e 73 69 67 6e 65 64 20 69 73 52 65 73 69 7a  unsigned isResiz
16350 65 64 3a 31 3b 20 20 20 20 2f 2a 20 54 72 75 65  ed:1;    /* True
16360 20 69 66 20 72 65 73 69 7a 65 49 6e 64 65 78 4f   if resizeIndexO
16370 62 6a 65 63 74 28 29 20 68 61 73 20 62 65 65 6e  bject() has been
16380 20 63 61 6c 6c 65 64 20 2a 2f 0a 20 20 75 6e 73   called */.  uns
16390 69 67 6e 65 64 20 69 73 43 6f 76 65 72 69 6e 67  igned isCovering
163a0 3a 31 3b 20 20 20 2f 2a 20 54 72 75 65 20 69 66  :1;   /* True if
163b0 20 74 68 69 73 20 69 73 20 61 20 63 6f 76 65 72   this is a cover
163c0 69 6e 67 20 69 6e 64 65 78 20 2a 2f 0a 20 20 75  ing index */.  u
163d0 6e 73 69 67 6e 65 64 20 6e 6f 53 6b 69 70 53 63  nsigned noSkipSc
163e0 61 6e 3a 31 3b 20 20 20 2f 2a 20 44 6f 20 6e 6f  an:1;   /* Do no
163f0 74 20 74 72 79 20 74 6f 20 75 73 65 20 73 6b 69  t try to use ski
16400 70 2d 73 63 61 6e 20 69 66 20 74 72 75 65 20 2a  p-scan if true *
16410 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 68 61 73  /.  unsigned has
16420 53 74 61 74 31 3a 31 3b 20 20 20 20 20 2f 2a 20  Stat1:1;     /* 
16430 61 69 52 6f 77 4c 6f 67 45 73 74 20 76 61 6c 75  aiRowLogEst valu
16440 65 73 20 63 6f 6d 65 20 66 72 6f 6d 20 73 71 6c  es come from sql
16450 69 74 65 5f 73 74 61 74 31 20 2a 2f 0a 20 20 75  ite_stat1 */.  u
16460 6e 73 69 67 6e 65 64 20 62 4e 6f 51 75 65 72 79  nsigned bNoQuery
16470 3a 31 3b 20 20 20 20 20 2f 2a 20 44 6f 20 6e 6f  :1;     /* Do no
16480 74 20 75 73 65 20 74 68 69 73 20 69 6e 64 65 78  t use this index
16490 20 74 6f 20 6f 70 74 69 6d 69 7a 65 20 71 75 65   to optimize que
164a0 72 69 65 73 20 2a 2f 0a 23 69 66 64 65 66 20 53  ries */.#ifdef S
164b0 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41  QLITE_ENABLE_STA
164c0 54 33 5f 4f 52 5f 53 54 41 54 34 0a 20 20 69 6e  T3_OR_STAT4.  in
164d0 74 20 6e 53 61 6d 70 6c 65 3b 20 20 20 20 20 20  t nSample;      
164e0 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
164f0 20 6f 66 20 65 6c 65 6d 65 6e 74 73 20 69 6e 20   of elements in 
16500 61 53 61 6d 70 6c 65 5b 5d 20 2a 2f 0a 20 20 69  aSample[] */.  i
16510 6e 74 20 6e 53 61 6d 70 6c 65 43 6f 6c 3b 20 20  nt nSampleCol;  
16520 20 20 20 20 20 20 20 20 2f 2a 20 53 69 7a 65 20          /* Size 
16530 6f 66 20 49 6e 64 65 78 53 61 6d 70 6c 65 2e 61  of IndexSample.a
16540 6e 45 71 5b 5d 20 61 6e 64 20 73 6f 20 6f 6e 20  nEq[] and so on 
16550 2a 2f 0a 20 20 74 52 6f 77 63 6e 74 20 2a 61 41  */.  tRowcnt *aA
16560 76 67 45 71 3b 20 20 20 20 20 20 20 20 20 2f 2a  vgEq;         /*
16570 20 41 76 65 72 61 67 65 20 6e 45 71 20 76 61 6c   Average nEq val
16580 75 65 73 20 66 6f 72 20 6b 65 79 73 20 6e 6f 74  ues for keys not
16590 20 69 6e 20 61 53 61 6d 70 6c 65 20 2a 2f 0a 20   in aSample */. 
165a0 20 49 6e 64 65 78 53 61 6d 70 6c 65 20 2a 61 53   IndexSample *aS
165b0 61 6d 70 6c 65 3b 20 20 20 20 2f 2a 20 53 61 6d  ample;    /* Sam
165c0 70 6c 65 73 20 6f 66 20 74 68 65 20 6c 65 66 74  ples of the left
165d0 2d 6d 6f 73 74 20 6b 65 79 20 2a 2f 0a 20 20 74  -most key */.  t
165e0 52 6f 77 63 6e 74 20 2a 61 69 52 6f 77 45 73 74  Rowcnt *aiRowEst
165f0 3b 20 20 20 20 20 20 20 2f 2a 20 4e 6f 6e 2d 6c  ;       /* Non-l
16600 6f 67 61 72 69 74 68 6d 69 63 20 73 74 61 74 31  ogarithmic stat1
16610 20 64 61 74 61 20 66 6f 72 20 74 68 69 73 20 69   data for this i
16620 6e 64 65 78 20 2a 2f 0a 20 20 74 52 6f 77 63 6e  ndex */.  tRowcn
16630 74 20 6e 52 6f 77 45 73 74 30 3b 20 20 20 20 20  t nRowEst0;     
16640 20 20 20 2f 2a 20 4e 6f 6e 2d 6c 6f 67 61 72 69     /* Non-logari
16650 74 68 6d 69 63 20 6e 75 6d 62 65 72 20 6f 66 20  thmic number of 
16660 72 6f 77 73 20 69 6e 20 74 68 65 20 69 6e 64 65  rows in the inde
16670 78 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 42 69  x */.#endif.  Bi
16680 74 6d 61 73 6b 20 63 6f 6c 4e 6f 74 49 64 78 65  tmask colNotIdxe
16690 64 3b 20 20 20 20 20 2f 2a 20 30 20 66 6f 72 20  d;     /* 0 for 
166a0 75 6e 69 6e 64 65 78 65 64 20 63 6f 6c 75 6d 6e  unindexed column
166b0 73 20 69 6e 20 70 54 61 62 20 2a 2f 0a 7d 3b 0a  s in pTab */.};.
166c0 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 76  ./*.** Allowed v
166d0 61 6c 75 65 73 20 66 6f 72 20 49 6e 64 65 78 2e  alues for Index.
166e0 69 64 78 54 79 70 65 0a 2a 2f 0a 23 64 65 66 69  idxType.*/.#defi
166f0 6e 65 20 53 51 4c 49 54 45 5f 49 44 58 54 59 50  ne SQLITE_IDXTYP
16700 45 5f 41 50 50 44 45 46 20 20 20 20 20 20 30 20  E_APPDEF      0 
16710 20 20 2f 2a 20 43 72 65 61 74 65 64 20 75 73 69    /* Created usi
16720 6e 67 20 43 52 45 41 54 45 20 49 4e 44 45 58 20  ng CREATE INDEX 
16730 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
16740 45 5f 49 44 58 54 59 50 45 5f 55 4e 49 51 55 45  E_IDXTYPE_UNIQUE
16750 20 20 20 20 20 20 31 20 20 20 2f 2a 20 49 6d 70        1   /* Imp
16760 6c 65 6d 65 6e 74 73 20 61 20 55 4e 49 51 55 45  lements a UNIQUE
16770 20 63 6f 6e 73 74 72 61 69 6e 74 20 2a 2f 0a 23   constraint */.#
16780 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49 44  define SQLITE_ID
16790 58 54 59 50 45 5f 50 52 49 4d 41 52 59 4b 45 59  XTYPE_PRIMARYKEY
167a0 20 20 32 20 20 20 2f 2a 20 49 73 20 74 68 65 20    2   /* Is the 
167b0 50 52 49 4d 41 52 59 20 4b 45 59 20 66 6f 72 20  PRIMARY KEY for 
167c0 74 68 65 20 74 61 62 6c 65 20 2a 2f 0a 0a 2f 2a  the table */../*
167d0 20 52 65 74 75 72 6e 20 74 72 75 65 20 69 66 20   Return true if 
167e0 69 6e 64 65 78 20 58 20 69 73 20 61 20 50 52 49  index X is a PRI
167f0 4d 41 52 59 20 4b 45 59 20 69 6e 64 65 78 20 2a  MARY KEY index *
16800 2f 0a 23 64 65 66 69 6e 65 20 49 73 50 72 69 6d  /.#define IsPrim
16810 61 72 79 4b 65 79 49 6e 64 65 78 28 58 29 20 20  aryKeyIndex(X)  
16820 28 28 58 29 2d 3e 69 64 78 54 79 70 65 3d 3d 53  ((X)->idxType==S
16830 51 4c 49 54 45 5f 49 44 58 54 59 50 45 5f 50 52  QLITE_IDXTYPE_PR
16840 49 4d 41 52 59 4b 45 59 29 0a 0a 2f 2a 20 52 65  IMARYKEY)../* Re
16850 74 75 72 6e 20 74 72 75 65 20 69 66 20 69 6e 64  turn true if ind
16860 65 78 20 58 20 69 73 20 61 20 55 4e 49 51 55 45  ex X is a UNIQUE
16870 20 69 6e 64 65 78 20 2a 2f 0a 23 64 65 66 69 6e   index */.#defin
16880 65 20 49 73 55 6e 69 71 75 65 49 6e 64 65 78 28  e IsUniqueIndex(
16890 58 29 20 20 20 20 20 20 28 28 58 29 2d 3e 6f 6e  X)      ((X)->on
168a0 45 72 72 6f 72 21 3d 4f 45 5f 4e 6f 6e 65 29 0a  Error!=OE_None).
168b0 0a 2f 2a 20 54 68 65 20 49 6e 64 65 78 2e 61 69  ./* The Index.ai
168c0 43 6f 6c 75 6d 6e 5b 5d 20 76 61 6c 75 65 73 20  Column[] values 
168d0 61 72 65 20 6e 6f 72 6d 61 6c 6c 79 20 70 6f 73  are normally pos
168e0 69 74 69 76 65 20 69 6e 74 65 67 65 72 2e 20 20  itive integer.  
168f0 42 75 74 0a 2a 2a 20 74 68 65 72 65 20 61 72 65  But.** there are
16900 20 73 6f 6d 65 20 6e 65 67 61 74 69 76 65 20 76   some negative v
16910 61 6c 75 65 73 20 74 68 61 74 20 68 61 76 65 20  alues that have 
16920 73 70 65 63 69 61 6c 20 6d 65 61 6e 69 6e 67 3a  special meaning:
16930 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 58 4e 5f 52  .*/.#define XN_R
16940 4f 57 49 44 20 20 20 20 20 28 2d 31 29 20 20 20  OWID     (-1)   
16950 20 20 2f 2a 20 49 6e 64 65 78 65 64 20 63 6f 6c    /* Indexed col
16960 75 6d 6e 20 69 73 20 74 68 65 20 72 6f 77 69 64  umn is the rowid
16970 20 2a 2f 0a 23 64 65 66 69 6e 65 20 58 4e 5f 45   */.#define XN_E
16980 58 50 52 20 20 20 20 20 20 28 2d 32 29 20 20 20  XPR      (-2)   
16990 20 20 2f 2a 20 49 6e 64 65 78 65 64 20 63 6f 6c    /* Indexed col
169a0 75 6d 6e 20 69 73 20 61 6e 20 65 78 70 72 65 73  umn is an expres
169b0 73 69 6f 6e 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 45  sion */../*.** E
169c0 61 63 68 20 73 61 6d 70 6c 65 20 73 74 6f 72 65  ach sample store
169d0 64 20 69 6e 20 74 68 65 20 73 71 6c 69 74 65 5f  d in the sqlite_
169e0 73 74 61 74 33 20 74 61 62 6c 65 20 69 73 20 72  stat3 table is r
169f0 65 70 72 65 73 65 6e 74 65 64 20 69 6e 20 6d 65  epresented in me
16a00 6d 6f 72 79 0a 2a 2a 20 75 73 69 6e 67 20 61 20  mory.** using a 
16a10 73 74 72 75 63 74 75 72 65 20 6f 66 20 74 68 69  structure of thi
16a20 73 20 74 79 70 65 2e 20 20 53 65 65 20 64 6f 63  s type.  See doc
16a30 75 6d 65 6e 74 61 74 69 6f 6e 20 61 74 20 74 68  umentation at th
16a40 65 20 74 6f 70 20 6f 66 20 74 68 65 0a 2a 2a 20  e top of the.** 
16a50 61 6e 61 6c 79 7a 65 2e 63 20 73 6f 75 72 63 65  analyze.c source
16a60 20 66 69 6c 65 20 66 6f 72 20 61 64 64 69 74 69   file for additi
16a70 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  onal information
16a80 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 49 6e 64 65  ..*/.struct Inde
16a90 78 53 61 6d 70 6c 65 20 7b 0a 20 20 76 6f 69 64  xSample {.  void
16aa0 20 2a 70 3b 20 20 20 20 20 20 20 20 20 20 2f 2a   *p;          /*
16ab0 20 50 6f 69 6e 74 65 72 20 74 6f 20 73 61 6d 70   Pointer to samp
16ac0 6c 65 64 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20  led record */.  
16ad0 69 6e 74 20 6e 3b 20 20 20 20 20 20 20 20 20 20  int n;          
16ae0 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20 72 65 63    /* Size of rec
16af0 6f 72 64 20 69 6e 20 62 79 74 65 73 20 2a 2f 0a  ord in bytes */.
16b00 20 20 74 52 6f 77 63 6e 74 20 2a 61 6e 45 71 3b    tRowcnt *anEq;
16b10 20 20 20 20 2f 2a 20 45 73 74 2e 20 6e 75 6d 62      /* Est. numb
16b20 65 72 20 6f 66 20 72 6f 77 73 20 77 68 65 72 65  er of rows where
16b30 20 74 68 65 20 6b 65 79 20 65 71 75 61 6c 73 20   the key equals 
16b40 74 68 69 73 20 73 61 6d 70 6c 65 20 2a 2f 0a 20  this sample */. 
16b50 20 74 52 6f 77 63 6e 74 20 2a 61 6e 4c 74 3b 20   tRowcnt *anLt; 
16b60 20 20 20 2f 2a 20 45 73 74 2e 20 6e 75 6d 62 65     /* Est. numbe
16b70 72 20 6f 66 20 72 6f 77 73 20 77 68 65 72 65 20  r of rows where 
16b80 6b 65 79 20 69 73 20 6c 65 73 73 20 74 68 61 6e  key is less than
16b90 20 74 68 69 73 20 73 61 6d 70 6c 65 20 2a 2f 0a   this sample */.
16ba0 20 20 74 52 6f 77 63 6e 74 20 2a 61 6e 44 4c 74    tRowcnt *anDLt
16bb0 3b 20 20 20 2f 2a 20 45 73 74 2e 20 6e 75 6d 62  ;   /* Est. numb
16bc0 65 72 20 6f 66 20 64 69 73 74 69 6e 63 74 20 6b  er of distinct k
16bd0 65 79 73 20 6c 65 73 73 20 74 68 61 6e 20 74 68  eys less than th
16be0 69 73 20 73 61 6d 70 6c 65 20 2a 2f 0a 7d 3b 0a  is sample */.};.
16bf0 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 74 6f 6b 65  ./*.** Each toke
16c00 6e 20 63 6f 6d 69 6e 67 20 6f 75 74 20 6f 66 20  n coming out of 
16c10 74 68 65 20 6c 65 78 65 72 20 69 73 20 61 6e 20  the lexer is an 
16c20 69 6e 73 74 61 6e 63 65 20 6f 66 0a 2a 2a 20 74  instance of.** t
16c30 68 69 73 20 73 74 72 75 63 74 75 72 65 2e 20 20  his structure.  
16c40 54 6f 6b 65 6e 73 20 61 72 65 20 61 6c 73 6f 20  Tokens are also 
16c50 75 73 65 64 20 61 73 20 70 61 72 74 20 6f 66 20  used as part of 
16c60 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 2e 0a 2a  an expression..*
16c70 2a 0a 2a 2a 20 4e 6f 74 65 20 69 66 20 54 6f 6b  *.** Note if Tok
16c80 65 6e 2e 7a 3d 3d 30 20 74 68 65 6e 20 54 6f 6b  en.z==0 then Tok
16c90 65 6e 2e 64 79 6e 20 61 6e 64 20 54 6f 6b 65 6e  en.dyn and Token
16ca0 2e 6e 20 61 72 65 20 75 6e 64 65 66 69 6e 65 64  .n are undefined
16cb0 20 61 6e 64 0a 2a 2a 20 6d 61 79 20 63 6f 6e 74   and.** may cont
16cc0 61 69 6e 20 72 61 6e 64 6f 6d 20 76 61 6c 75 65  ain random value
16cd0 73 2e 20 20 44 6f 20 6e 6f 74 20 6d 61 6b 65 20  s.  Do not make 
16ce0 61 6e 79 20 61 73 73 75 6d 70 74 69 6f 6e 73 20  any assumptions 
16cf0 61 62 6f 75 74 20 54 6f 6b 65 6e 2e 64 79 6e 0a  about Token.dyn.
16d00 2a 2a 20 61 6e 64 20 54 6f 6b 65 6e 2e 6e 20 77  ** and Token.n w
16d10 68 65 6e 20 54 6f 6b 65 6e 2e 7a 3d 3d 30 2e 0a  hen Token.z==0..
16d20 2a 2f 0a 73 74 72 75 63 74 20 54 6f 6b 65 6e 20  */.struct Token 
16d30 7b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  {.  const char *
16d40 7a 3b 20 20 20 20 20 2f 2a 20 54 65 78 74 20 6f  z;     /* Text o
16d50 66 20 74 68 65 20 74 6f 6b 65 6e 2e 20 20 4e 6f  f the token.  No
16d60 74 20 4e 55 4c 4c 2d 74 65 72 6d 69 6e 61 74 65  t NULL-terminate
16d70 64 21 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64  d! */.  unsigned
16d80 20 69 6e 74 20 6e 3b 20 20 20 20 2f 2a 20 4e 75   int n;    /* Nu
16d90 6d 62 65 72 20 6f 66 20 63 68 61 72 61 63 74 65  mber of characte
16da0 72 73 20 69 6e 20 74 68 69 73 20 74 6f 6b 65 6e  rs in this token
16db0 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e   */.};../*.** An
16dc0 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 69   instance of thi
16dd0 73 20 73 74 72 75 63 74 75 72 65 20 63 6f 6e 74  s structure cont
16de0 61 69 6e 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  ains information
16df0 20 6e 65 65 64 65 64 20 74 6f 20 67 65 6e 65 72   needed to gener
16e00 61 74 65 0a 2a 2a 20 63 6f 64 65 20 66 6f 72 20  ate.** code for 
16e10 61 20 53 45 4c 45 43 54 20 74 68 61 74 20 63 6f  a SELECT that co
16e20 6e 74 61 69 6e 73 20 61 67 67 72 65 67 61 74 65  ntains aggregate
16e30 20 66 75 6e 63 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a   functions..**.*
16e40 2a 20 49 66 20 45 78 70 72 2e 6f 70 3d 3d 54 4b  * If Expr.op==TK
16e50 5f 41 47 47 5f 43 4f 4c 55 4d 4e 20 6f 72 20 54  _AGG_COLUMN or T
16e60 4b 5f 41 47 47 5f 46 55 4e 43 54 49 4f 4e 20 74  K_AGG_FUNCTION t
16e70 68 65 6e 20 45 78 70 72 2e 70 41 67 67 49 6e 66  hen Expr.pAggInf
16e80 6f 20 69 73 20 61 0a 2a 2a 20 70 6f 69 6e 74 65  o is a.** pointe
16e90 72 20 74 6f 20 74 68 69 73 20 73 74 72 75 63 74  r to this struct
16ea0 75 72 65 2e 20 20 54 68 65 20 45 78 70 72 2e 69  ure.  The Expr.i
16eb0 43 6f 6c 75 6d 6e 20 66 69 65 6c 64 20 69 73 20  Column field is 
16ec0 74 68 65 20 69 6e 64 65 78 20 69 6e 0a 2a 2a 20  the index in.** 
16ed0 41 67 67 49 6e 66 6f 2e 61 43 6f 6c 5b 5d 20 6f  AggInfo.aCol[] o
16ee0 72 20 41 67 67 49 6e 66 6f 2e 61 46 75 6e 63 5b  r AggInfo.aFunc[
16ef0 5d 20 6f 66 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  ] of information
16f00 20 6e 65 65 64 65 64 20 74 6f 20 67 65 6e 65 72   needed to gener
16f10 61 74 65 0a 2a 2a 20 63 6f 64 65 20 66 6f 72 20  ate.** code for 
16f20 74 68 61 74 20 6e 6f 64 65 2e 0a 2a 2a 0a 2a 2a  that node..**.**
16f30 20 41 67 67 49 6e 66 6f 2e 70 47 72 6f 75 70 42   AggInfo.pGroupB
16f40 79 20 61 6e 64 20 41 67 67 49 6e 66 6f 2e 61 46  y and AggInfo.aF
16f50 75 6e 63 2e 70 45 78 70 72 20 70 6f 69 6e 74 20  unc.pExpr point 
16f60 74 6f 20 66 69 65 6c 64 73 20 77 69 74 68 69 6e  to fields within
16f70 20 74 68 65 0a 2a 2a 20 6f 72 69 67 69 6e 61 6c   the.** original
16f80 20 53 65 6c 65 63 74 20 73 74 72 75 63 74 75 72   Select structur
16f90 65 20 74 68 61 74 20 64 65 73 63 72 69 62 65 73  e that describes
16fa0 20 74 68 65 20 53 45 4c 45 43 54 20 73 74 61 74   the SELECT stat
16fb0 65 6d 65 6e 74 2e 20 20 54 68 65 73 65 0a 2a 2a  ement.  These.**
16fc0 20 66 69 65 6c 64 73 20 64 6f 20 6e 6f 74 20 6e   fields do not n
16fd0 65 65 64 20 74 6f 20 62 65 20 66 72 65 65 64 20  eed to be freed 
16fe0 77 68 65 6e 20 64 65 61 6c 6c 6f 63 61 74 69 6e  when deallocatin
16ff0 67 20 74 68 65 20 41 67 67 49 6e 66 6f 20 73 74  g the AggInfo st
17000 72 75 63 74 75 72 65 2e 0a 2a 2f 0a 73 74 72 75  ructure..*/.stru
17010 63 74 20 41 67 67 49 6e 66 6f 20 7b 0a 20 20 75  ct AggInfo {.  u
17020 38 20 64 69 72 65 63 74 4d 6f 64 65 3b 20 20 20  8 directMode;   
17030 20 20 20 20 20 20 20 2f 2a 20 44 69 72 65 63 74         /* Direct
17040 20 72 65 6e 64 65 72 69 6e 67 20 6d 6f 64 65 20   rendering mode 
17050 6d 65 61 6e 73 20 74 61 6b 65 20 64 61 74 61 20  means take data 
17060 64 69 72 65 63 74 6c 79 0a 20 20 20 20 20 20 20  directly.       
17070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17080 20 20 20 2a 2a 20 66 72 6f 6d 20 73 6f 75 72 63     ** from sourc
17090 65 20 74 61 62 6c 65 73 20 72 61 74 68 65 72 20  e tables rather 
170a0 74 68 61 6e 20 66 72 6f 6d 20 61 63 63 75 6d 75  than from accumu
170b0 6c 61 74 6f 72 73 20 2a 2f 0a 20 20 75 38 20 75  lators */.  u8 u
170c0 73 65 53 6f 72 74 69 6e 67 49 64 78 3b 20 20 20  seSortingIdx;   
170d0 20 20 20 20 2f 2a 20 49 6e 20 64 69 72 65 63 74      /* In direct
170e0 20 6d 6f 64 65 2c 20 72 65 66 65 72 65 6e 63 65   mode, reference
170f0 20 74 68 65 20 73 6f 72 74 69 6e 67 20 69 6e 64   the sorting ind
17100 65 78 20 72 61 74 68 65 72 0a 20 20 20 20 20 20  ex rather.      
17110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17120 20 20 20 20 2a 2a 20 74 68 61 6e 20 74 68 65 20      ** than the 
17130 73 6f 75 72 63 65 20 74 61 62 6c 65 20 2a 2f 0a  source table */.
17140 20 20 69 6e 74 20 73 6f 72 74 69 6e 67 49 64 78    int sortingIdx
17150 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 43 75 72  ;         /* Cur
17160 73 6f 72 20 6e 75 6d 62 65 72 20 6f 66 20 74 68  sor number of th
17170 65 20 73 6f 72 74 69 6e 67 20 69 6e 64 65 78 20  e sorting index 
17180 2a 2f 0a 20 20 69 6e 74 20 73 6f 72 74 69 6e 67  */.  int sorting
17190 49 64 78 50 54 61 62 3b 20 20 20 20 20 2f 2a 20  IdxPTab;     /* 
171a0 43 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 6f 66  Cursor number of
171b0 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 20 2a 2f   pseudo-table */
171c0 0a 20 20 69 6e 74 20 6e 53 6f 72 74 69 6e 67 43  .  int nSortingC
171d0 6f 6c 75 6d 6e 3b 20 20 20 20 20 2f 2a 20 4e 75  olumn;     /* Nu
171e0 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20  mber of columns 
171f0 69 6e 20 74 68 65 20 73 6f 72 74 69 6e 67 20 69  in the sorting i
17200 6e 64 65 78 20 2a 2f 0a 20 20 69 6e 74 20 6d 6e  ndex */.  int mn
17210 52 65 67 2c 20 6d 78 52 65 67 3b 20 20 20 20 20  Reg, mxReg;     
17220 20 20 2f 2a 20 52 61 6e 67 65 20 6f 66 20 72 65    /* Range of re
17230 67 69 73 74 65 72 73 20 61 6c 6c 6f 63 61 74 65  gisters allocate
17240 64 20 66 6f 72 20 61 43 6f 6c 20 61 6e 64 20 61  d for aCol and a
17250 46 75 6e 63 20 2a 2f 0a 20 20 45 78 70 72 4c 69  Func */.  ExprLi
17260 73 74 20 2a 70 47 72 6f 75 70 42 79 3b 20 20 20  st *pGroupBy;   
17270 20 20 2f 2a 20 54 68 65 20 67 72 6f 75 70 20 62    /* The group b
17280 79 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 73 74  y clause */.  st
17290 72 75 63 74 20 41 67 67 49 6e 66 6f 5f 63 6f 6c  ruct AggInfo_col
172a0 20 7b 20 20 20 20 2f 2a 20 46 6f 72 20 65 61 63   {    /* For eac
172b0 68 20 63 6f 6c 75 6d 6e 20 75 73 65 64 20 69 6e  h column used in
172c0 20 73 6f 75 72 63 65 20 74 61 62 6c 65 73 20 2a   source tables *
172d0 2f 0a 20 20 20 20 54 61 62 6c 65 20 2a 70 54 61  /.    Table *pTa
172e0 62 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  b;             /
172f0 2a 20 53 6f 75 72 63 65 20 74 61 62 6c 65 20 2a  * Source table *
17300 2f 0a 20 20 20 20 69 6e 74 20 69 54 61 62 6c 65  /.    int iTable
17310 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
17320 2a 20 43 75 72 73 6f 72 20 6e 75 6d 62 65 72 20  * Cursor number 
17330 6f 66 20 74 68 65 20 73 6f 75 72 63 65 20 74 61  of the source ta
17340 62 6c 65 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69  ble */.    int i
17350 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20 20  Column;         
17360 20 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20 6e 75      /* Column nu
17370 6d 62 65 72 20 77 69 74 68 69 6e 20 74 68 65 20  mber within the 
17380 73 6f 75 72 63 65 20 74 61 62 6c 65 20 2a 2f 0a  source table */.
17390 20 20 20 20 69 6e 74 20 69 53 6f 72 74 65 72 43      int iSorterC
173a0 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20 2f 2a 20  olumn;       /* 
173b0 43 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 69 6e  Column number in
173c0 20 74 68 65 20 73 6f 72 74 69 6e 67 20 69 6e 64   the sorting ind
173d0 65 78 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 4d  ex */.    int iM
173e0 65 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  em;             
173f0 20 20 20 2f 2a 20 4d 65 6d 6f 72 79 20 6c 6f 63     /* Memory loc
17400 61 74 69 6f 6e 20 74 68 61 74 20 61 63 74 73 20  ation that acts 
17410 61 73 20 61 63 63 75 6d 75 6c 61 74 6f 72 20 2a  as accumulator *
17420 2f 0a 20 20 20 20 45 78 70 72 20 2a 70 45 78 70  /.    Expr *pExp
17430 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  r;             /
17440 2a 20 54 68 65 20 6f 72 69 67 69 6e 61 6c 20 65  * The original e
17450 78 70 72 65 73 73 69 6f 6e 20 2a 2f 0a 20 20 7d  xpression */.  }
17460 20 2a 61 43 6f 6c 3b 0a 20 20 69 6e 74 20 6e 43   *aCol;.  int nC
17470 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20 20 20  olumn;          
17480 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 75    /* Number of u
17490 73 65 64 20 65 6e 74 72 69 65 73 20 69 6e 20 61  sed entries in a
174a0 43 6f 6c 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 6e  Col[] */.  int n
174b0 41 63 63 75 6d 75 6c 61 74 6f 72 3b 20 20 20 20  Accumulator;    
174c0 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
174d0 63 6f 6c 75 6d 6e 73 20 74 68 61 74 20 73 68 6f  columns that sho
174e0 77 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65  w through to the
174f0 20 6f 75 74 70 75 74 2e 0a 20 20 20 20 20 20 20   output..       
17500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17510 20 20 20 2a 2a 20 41 64 64 69 74 69 6f 6e 61 6c     ** Additional
17520 20 63 6f 6c 75 6d 6e 73 20 61 72 65 20 75 73 65   columns are use
17530 64 20 6f 6e 6c 79 20 61 73 20 70 61 72 61 6d 65  d only as parame
17540 74 65 72 73 20 74 6f 0a 20 20 20 20 20 20 20 20  ters to.        
17550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17560 20 20 2a 2a 20 61 67 67 72 65 67 61 74 65 20 66    ** aggregate f
17570 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a 20 20 73 74  unctions */.  st
17580 72 75 63 74 20 41 67 67 49 6e 66 6f 5f 66 75 6e  ruct AggInfo_fun
17590 63 20 7b 20 20 20 2f 2a 20 46 6f 72 20 65 61 63  c {   /* For eac
175a0 68 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63  h aggregate func
175b0 74 69 6f 6e 20 2a 2f 0a 20 20 20 20 45 78 70 72  tion */.    Expr
175c0 20 2a 70 45 78 70 72 3b 20 20 20 20 20 20 20 20   *pExpr;        
175d0 20 20 20 20 20 2f 2a 20 45 78 70 72 65 73 73 69       /* Expressi
175e0 6f 6e 20 65 6e 63 6f 64 69 6e 67 20 74 68 65 20  on encoding the 
175f0 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 20 20  function */.    
17600 46 75 6e 63 44 65 66 20 2a 70 46 75 6e 63 3b 20  FuncDef *pFunc; 
17610 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
17620 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69  aggregate functi
17630 6f 6e 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  on implementatio
17640 6e 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 4d 65  n */.    int iMe
17650 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  m;              
17660 20 20 2f 2a 20 4d 65 6d 6f 72 79 20 6c 6f 63 61    /* Memory loca
17670 74 69 6f 6e 20 74 68 61 74 20 61 63 74 73 20 61  tion that acts a
17680 73 20 61 63 63 75 6d 75 6c 61 74 6f 72 20 2a 2f  s accumulator */
17690 0a 20 20 20 20 69 6e 74 20 69 44 69 73 74 69 6e  .    int iDistin
176a0 63 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ct;           /*
176b0 20 45 70 68 65 6d 65 72 61 6c 20 74 61 62 6c 65   Ephemeral table
176c0 20 75 73 65 64 20 74 6f 20 65 6e 66 6f 72 63 65   used to enforce
176d0 20 44 49 53 54 49 4e 43 54 20 2a 2f 0a 20 20 7d   DISTINCT */.  }
176e0 20 2a 61 46 75 6e 63 3b 0a 20 20 69 6e 74 20 6e   *aFunc;.  int n
176f0 46 75 6e 63 3b 20 20 20 20 20 20 20 20 20 20 20  Func;           
17700 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
17710 65 6e 74 72 69 65 73 20 69 6e 20 61 46 75 6e 63  entries in aFunc
17720 5b 5d 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  [] */.};../*.** 
17730 54 68 65 20 64 61 74 61 74 79 70 65 20 79 6e 56  The datatype ynV
17740 61 72 20 69 73 20 61 20 73 69 67 6e 65 64 20 69  ar is a signed i
17750 6e 74 65 67 65 72 2c 20 65 69 74 68 65 72 20 31  nteger, either 1
17760 36 2d 62 69 74 20 6f 72 20 33 32 2d 62 69 74 2e  6-bit or 32-bit.
17770 0a 2a 2a 20 55 73 75 61 6c 6c 79 20 69 74 20 69  .** Usually it i
17780 73 20 31 36 2d 62 69 74 73 2e 20 20 42 75 74 20  s 16-bits.  But 
17790 69 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 56 41  if SQLITE_MAX_VA
177a0 52 49 41 42 4c 45 5f 4e 55 4d 42 45 52 20 69 73  RIABLE_NUMBER is
177b0 20 67 72 65 61 74 65 72 0a 2a 2a 20 74 68 61 6e   greater.** than
177c0 20 33 32 37 36 37 20 77 65 20 68 61 76 65 20 74   32767 we have t
177d0 6f 20 6d 61 6b 65 20 69 74 20 33 32 2d 62 69 74  o make it 32-bit
177e0 2e 20 20 31 36 2d 62 69 74 20 69 73 20 70 72 65  .  16-bit is pre
177f0 66 65 72 72 65 64 20 62 65 63 61 75 73 65 0a 2a  ferred because.*
17800 2a 20 69 74 20 75 73 65 73 20 6c 65 73 73 20 6d  * it uses less m
17810 65 6d 6f 72 79 20 69 6e 20 74 68 65 20 45 78 70  emory in the Exp
17820 72 20 6f 62 6a 65 63 74 2c 20 77 68 69 63 68 20  r object, which 
17830 69 73 20 61 20 62 69 67 20 6d 65 6d 6f 72 79 20  is a big memory 
17840 75 73 65 72 0a 2a 2a 20 69 6e 20 73 79 73 74 65  user.** in syste
17850 6d 73 20 77 69 74 68 20 6c 6f 74 73 20 6f 66 20  ms with lots of 
17860 70 72 65 70 61 72 65 64 20 73 74 61 74 65 6d 65  prepared stateme
17870 6e 74 73 2e 20 20 41 6e 64 20 66 65 77 20 61 70  nts.  And few ap
17880 70 6c 69 63 61 74 69 6f 6e 73 0a 2a 2a 20 6e 65  plications.** ne
17890 65 64 20 6d 6f 72 65 20 74 68 61 6e 20 61 62 6f  ed more than abo
178a0 75 74 20 31 30 20 6f 72 20 32 30 20 76 61 72 69  ut 10 or 20 vari
178b0 61 62 6c 65 73 2e 20 20 42 75 74 20 73 6f 6d 65  ables.  But some
178c0 20 65 78 74 72 65 6d 65 20 75 73 65 72 73 20 77   extreme users w
178d0 61 6e 74 0a 2a 2a 20 74 6f 20 68 61 76 65 20 70  ant.** to have p
178e0 72 65 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e  repared statemen
178f0 74 73 20 77 69 74 68 20 6f 76 65 72 20 33 32 37  ts with over 327
17900 36 37 20 76 61 72 69 61 62 6c 65 73 2c 20 61 6e  67 variables, an
17910 64 20 66 6f 72 20 74 68 65 6d 0a 2a 2a 20 74 68  d for them.** th
17920 65 20 6f 70 74 69 6f 6e 20 69 73 20 61 76 61 69  e option is avai
17930 6c 61 62 6c 65 20 28 61 74 20 63 6f 6d 70 69 6c  lable (at compil
17940 65 2d 74 69 6d 65 29 2e 0a 2a 2f 0a 23 69 66 20  e-time)..*/.#if 
17950 53 51 4c 49 54 45 5f 4d 41 58 5f 56 41 52 49 41  SQLITE_MAX_VARIA
17960 42 4c 45 5f 4e 55 4d 42 45 52 3c 3d 33 32 37 36  BLE_NUMBER<=3276
17970 37 0a 74 79 70 65 64 65 66 20 69 31 36 20 79 6e  7.typedef i16 yn
17980 56 61 72 3b 0a 23 65 6c 73 65 0a 74 79 70 65 64  Var;.#else.typed
17990 65 66 20 69 6e 74 20 79 6e 56 61 72 3b 0a 23 65  ef int ynVar;.#e
179a0 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68  ndif../*.** Each
179b0 20 6e 6f 64 65 20 6f 66 20 61 6e 20 65 78 70 72   node of an expr
179c0 65 73 73 69 6f 6e 20 69 6e 20 74 68 65 20 70 61  ession in the pa
179d0 72 73 65 20 74 72 65 65 20 69 73 20 61 6e 20 69  rse tree is an i
179e0 6e 73 74 61 6e 63 65 0a 2a 2a 20 6f 66 20 74 68  nstance.** of th
179f0 69 73 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a  is structure..**
17a00 0a 2a 2a 20 45 78 70 72 2e 6f 70 20 69 73 20 74  .** Expr.op is t
17a10 68 65 20 6f 70 63 6f 64 65 2e 20 54 68 65 20 69  he opcode. The i
17a20 6e 74 65 67 65 72 20 70 61 72 73 65 72 20 74 6f  nteger parser to
17a30 6b 65 6e 20 63 6f 64 65 73 20 61 72 65 20 72 65  ken codes are re
17a40 75 73 65 64 0a 2a 2a 20 61 73 20 6f 70 63 6f 64  used.** as opcod
17a50 65 73 20 68 65 72 65 2e 20 46 6f 72 20 65 78 61  es here. For exa
17a60 6d 70 6c 65 2c 20 74 68 65 20 70 61 72 73 65 72  mple, the parser
17a70 20 64 65 66 69 6e 65 73 20 54 4b 5f 47 45 20 74   defines TK_GE t
17a80 6f 20 62 65 20 61 6e 20 69 6e 74 65 67 65 72 0a  o be an integer.
17a90 2a 2a 20 63 6f 64 65 20 72 65 70 72 65 73 65 6e  ** code represen
17aa0 74 69 6e 67 20 74 68 65 20 22 3e 3d 22 20 6f 70  ting the ">=" op
17ab0 65 72 61 74 6f 72 2e 20 54 68 69 73 20 73 61 6d  erator. This sam
17ac0 65 20 69 6e 74 65 67 65 72 20 63 6f 64 65 20 69  e integer code i
17ad0 73 20 72 65 75 73 65 64 0a 2a 2a 20 74 6f 20 72  s reused.** to r
17ae0 65 70 72 65 73 65 6e 74 20 74 68 65 20 67 72 65  epresent the gre
17af0 61 74 65 72 2d 74 68 61 6e 2d 6f 72 2d 65 71 75  ater-than-or-equ
17b00 61 6c 2d 74 6f 20 6f 70 65 72 61 74 6f 72 20 69  al-to operator i
17b10 6e 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e  n the expression
17b20 0a 2a 2a 20 74 72 65 65 2e 0a 2a 2a 0a 2a 2a 20  .** tree..**.** 
17b30 49 66 20 74 68 65 20 65 78 70 72 65 73 73 69 6f  If the expressio
17b40 6e 20 69 73 20 61 6e 20 53 51 4c 20 6c 69 74 65  n is an SQL lite
17b50 72 61 6c 20 28 54 4b 5f 49 4e 54 45 47 45 52 2c  ral (TK_INTEGER,
17b60 20 54 4b 5f 46 4c 4f 41 54 2c 20 54 4b 5f 42 4c   TK_FLOAT, TK_BL
17b70 4f 42 2c 0a 2a 2a 20 6f 72 20 54 4b 5f 53 54 52  OB,.** or TK_STR
17b80 49 4e 47 29 2c 20 74 68 65 6e 20 45 78 70 72 2e  ING), then Expr.
17b90 74 6f 6b 65 6e 20 63 6f 6e 74 61 69 6e 73 20 74  token contains t
17ba0 68 65 20 74 65 78 74 20 6f 66 20 74 68 65 20 53  he text of the S
17bb0 51 4c 20 6c 69 74 65 72 61 6c 2e 20 49 66 0a 2a  QL literal. If.*
17bc0 2a 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e  * the expression
17bd0 20 69 73 20 61 20 76 61 72 69 61 62 6c 65 20 28   is a variable (
17be0 54 4b 5f 56 41 52 49 41 42 4c 45 29 2c 20 74 68  TK_VARIABLE), th
17bf0 65 6e 20 45 78 70 72 2e 74 6f 6b 65 6e 20 63 6f  en Expr.token co
17c00 6e 74 61 69 6e 73 20 74 68 65 0a 2a 2a 20 76 61  ntains the.** va
17c10 72 69 61 62 6c 65 20 6e 61 6d 65 2e 20 46 69 6e  riable name. Fin
17c20 61 6c 6c 79 2c 20 69 66 20 74 68 65 20 65 78 70  ally, if the exp
17c30 72 65 73 73 69 6f 6e 20 69 73 20 61 6e 20 53 51  ression is an SQ
17c40 4c 20 66 75 6e 63 74 69 6f 6e 20 28 54 4b 5f 46  L function (TK_F
17c50 55 4e 43 54 49 4f 4e 29 2c 0a 2a 2a 20 74 68 65  UNCTION),.** the
17c60 6e 20 45 78 70 72 2e 74 6f 6b 65 6e 20 63 6f 6e  n Expr.token con
17c70 74 61 69 6e 73 20 74 68 65 20 6e 61 6d 65 20 6f  tains the name o
17c80 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 2e 0a  f the function..
17c90 2a 2a 0a 2a 2a 20 45 78 70 72 2e 70 52 69 67 68  **.** Expr.pRigh
17ca0 74 20 61 6e 64 20 45 78 70 72 2e 70 4c 65 66 74  t and Expr.pLeft
17cb0 20 61 72 65 20 74 68 65 20 6c 65 66 74 20 61 6e   are the left an
17cc0 64 20 72 69 67 68 74 20 73 75 62 65 78 70 72 65  d right subexpre
17cd0 73 73 69 6f 6e 73 20 6f 66 20 61 0a 2a 2a 20 62  ssions of a.** b
17ce0 69 6e 61 72 79 20 6f 70 65 72 61 74 6f 72 2e 20  inary operator. 
17cf0 45 69 74 68 65 72 20 6f 72 20 62 6f 74 68 20 6d  Either or both m
17d00 61 79 20 62 65 20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a  ay be NULL..**.*
17d10 2a 20 45 78 70 72 2e 78 2e 70 4c 69 73 74 20 69  * Expr.x.pList i
17d20 73 20 61 20 6c 69 73 74 20 6f 66 20 61 72 67 75  s a list of argu
17d30 6d 65 6e 74 73 20 69 66 20 74 68 65 20 65 78 70  ments if the exp
17d40 72 65 73 73 69 6f 6e 20 69 73 20 61 6e 20 53 51  ression is an SQ
17d50 4c 20 66 75 6e 63 74 69 6f 6e 2c 0a 2a 2a 20 61  L function,.** a
17d60 20 43 41 53 45 20 65 78 70 72 65 73 73 69 6f 6e   CASE expression
17d70 20 6f 72 20 61 6e 20 49 4e 20 65 78 70 72 65 73   or an IN expres
17d80 73 69 6f 6e 20 6f 66 20 74 68 65 20 66 6f 72 6d  sion of the form
17d90 20 22 3c 6c 68 73 3e 20 49 4e 20 28 3c 79 3e 2c   "<lhs> IN (<y>,
17da0 20 3c 7a 3e 2e 2e 2e 29 22 2e 0a 2a 2a 20 45 78   <z>...)"..** Ex
17db0 70 72 2e 78 2e 70 53 65 6c 65 63 74 20 69 73 20  pr.x.pSelect is 
17dc0 75 73 65 64 20 69 66 20 74 68 65 20 65 78 70 72  used if the expr
17dd0 65 73 73 69 6f 6e 20 69 73 20 61 20 73 75 62 2d  ession is a sub-
17de0 73 65 6c 65 63 74 20 6f 72 20 61 6e 20 65 78 70  select or an exp
17df0 72 65 73 73 69 6f 6e 20 6f 66 0a 2a 2a 20 74 68  ression of.** th
17e00 65 20 66 6f 72 6d 20 22 3c 6c 68 73 3e 20 49 4e  e form "<lhs> IN
17e10 20 28 53 45 4c 45 43 54 20 2e 2e 2e 29 22 2e 20   (SELECT ...)". 
17e20 49 66 20 74 68 65 20 45 50 5f 78 49 73 53 65 6c  If the EP_xIsSel
17e30 65 63 74 20 62 69 74 20 69 73 20 73 65 74 20 69  ect bit is set i
17e40 6e 20 74 68 65 0a 2a 2a 20 45 78 70 72 2e 66 6c  n the.** Expr.fl
17e50 61 67 73 20 6d 61 73 6b 2c 20 74 68 65 6e 20 45  ags mask, then E
17e60 78 70 72 2e 78 2e 70 53 65 6c 65 63 74 20 69 73  xpr.x.pSelect is
17e70 20 76 61 6c 69 64 2e 20 4f 74 68 65 72 77 69 73   valid. Otherwis
17e80 65 2c 20 45 78 70 72 2e 78 2e 70 4c 69 73 74 20  e, Expr.x.pList 
17e90 69 73 0a 2a 2a 20 76 61 6c 69 64 2e 0a 2a 2a 0a  is.** valid..**.
17ea0 2a 2a 20 41 6e 20 65 78 70 72 65 73 73 69 6f 6e  ** An expression
17eb0 20 6f 66 20 74 68 65 20 66 6f 72 6d 20 49 44 20   of the form ID 
17ec0 6f 72 20 49 44 2e 49 44 20 72 65 66 65 72 73 20  or ID.ID refers 
17ed0 74 6f 20 61 20 63 6f 6c 75 6d 6e 20 69 6e 20 61  to a column in a
17ee0 20 74 61 62 6c 65 2e 0a 2a 2a 20 46 6f 72 20 73   table..** For s
17ef0 75 63 68 20 65 78 70 72 65 73 73 69 6f 6e 73 2c  uch expressions,
17f00 20 45 78 70 72 2e 6f 70 20 69 73 20 73 65 74 20   Expr.op is set 
17f10 74 6f 20 54 4b 5f 43 4f 4c 55 4d 4e 20 61 6e 64  to TK_COLUMN and
17f20 20 45 78 70 72 2e 69 54 61 62 6c 65 20 69 73 0a   Expr.iTable is.
17f30 2a 2a 20 74 68 65 20 69 6e 74 65 67 65 72 20 63  ** the integer c
17f40 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 6f 66 20  ursor number of 
17f50 61 20 56 44 42 45 20 63 75 72 73 6f 72 20 70 6f  a VDBE cursor po
17f60 69 6e 74 69 6e 67 20 74 6f 20 74 68 61 74 20 74  inting to that t
17f70 61 62 6c 65 20 61 6e 64 0a 2a 2a 20 45 78 70 72  able and.** Expr
17f80 2e 69 43 6f 6c 75 6d 6e 20 69 73 20 74 68 65 20  .iColumn is the 
17f90 63 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 66 6f  column number fo
17fa0 72 20 74 68 65 20 73 70 65 63 69 66 69 63 20 63  r the specific c
17fb0 6f 6c 75 6d 6e 2e 20 20 49 66 20 74 68 65 0a 2a  olumn.  If the.*
17fc0 2a 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20  * expression is 
17fd0 75 73 65 64 20 61 73 20 61 20 72 65 73 75 6c 74  used as a result
17fe0 20 69 6e 20 61 6e 20 61 67 67 72 65 67 61 74 65   in an aggregate
17ff0 20 53 45 4c 45 43 54 2c 20 74 68 65 6e 20 74 68   SELECT, then th
18000 65 0a 2a 2a 20 76 61 6c 75 65 20 69 73 20 61 6c  e.** value is al
18010 73 6f 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65  so stored in the
18020 20 45 78 70 72 2e 69 41 67 67 20 63 6f 6c 75 6d   Expr.iAgg colum
18030 6e 20 69 6e 20 74 68 65 20 61 67 67 72 65 67 61  n in the aggrega
18040 74 65 20 73 6f 20 74 68 61 74 0a 2a 2a 20 69 74  te so that.** it
18050 20 63 61 6e 20 62 65 20 61 63 63 65 73 73 65 64   can be accessed
18060 20 61 66 74 65 72 20 61 6c 6c 20 61 67 67 72 65   after all aggre
18070 67 61 74 65 73 20 61 72 65 20 63 6f 6d 70 75 74  gates are comput
18080 65 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  ed..**.** If the
18090 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61   expression is a
180a0 6e 20 75 6e 62 6f 75 6e 64 20 76 61 72 69 61 62  n unbound variab
180b0 6c 65 20 6d 61 72 6b 65 72 20 28 61 20 71 75 65  le marker (a que
180c0 73 74 69 6f 6e 20 6d 61 72 6b 0a 2a 2a 20 63 68  stion mark.** ch
180d0 61 72 61 63 74 65 72 20 27 3f 27 20 69 6e 20 74  aracter '?' in t
180e0 68 65 20 6f 72 69 67 69 6e 61 6c 20 53 51 4c 29  he original SQL)
180f0 20 74 68 65 6e 20 74 68 65 20 45 78 70 72 2e 69   then the Expr.i
18100 54 61 62 6c 65 20 68 6f 6c 64 73 20 74 68 65 20  Table holds the 
18110 69 6e 64 65 78 0a 2a 2a 20 6e 75 6d 62 65 72 20  index.** number 
18120 66 6f 72 20 74 68 61 74 20 76 61 72 69 61 62 6c  for that variabl
18130 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  e..**.** If the 
18140 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61 20  expression is a 
18150 73 75 62 71 75 65 72 79 20 74 68 65 6e 20 45 78  subquery then Ex
18160 70 72 2e 69 43 6f 6c 75 6d 6e 20 68 6f 6c 64 73  pr.iColumn holds
18170 20 61 6e 20 69 6e 74 65 67 65 72 0a 2a 2a 20 72   an integer.** r
18180 65 67 69 73 74 65 72 20 6e 75 6d 62 65 72 20 63  egister number c
18190 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 72 65  ontaining the re
181a0 73 75 6c 74 20 6f 66 20 74 68 65 20 73 75 62 71  sult of the subq
181b0 75 65 72 79 2e 20 20 49 66 20 74 68 65 0a 2a 2a  uery.  If the.**
181c0 20 73 75 62 71 75 65 72 79 20 67 69 76 65 73 20   subquery gives 
181d0 61 20 63 6f 6e 73 74 61 6e 74 20 72 65 73 75 6c  a constant resul
181e0 74 2c 20 74 68 65 6e 20 69 54 61 62 6c 65 20 69  t, then iTable i
181f0 73 20 2d 31 2e 20 20 49 66 20 74 68 65 20 73 75  s -1.  If the su
18200 62 71 75 65 72 79 0a 2a 2a 20 67 69 76 65 73 20  bquery.** gives 
18210 61 20 64 69 66 66 65 72 65 6e 74 20 61 6e 73 77  a different answ
18220 65 72 20 61 74 20 64 69 66 66 65 72 65 6e 74 20  er at different 
18230 74 69 6d 65 73 20 64 75 72 69 6e 67 20 73 74 61  times during sta
18240 74 65 6d 65 6e 74 20 70 72 6f 63 65 73 73 69 6e  tement processin
18250 67 0a 2a 2a 20 74 68 65 6e 20 69 54 61 62 6c 65  g.** then iTable
18260 20 69 73 20 74 68 65 20 61 64 64 72 65 73 73 20   is the address 
18270 6f 66 20 61 20 73 75 62 72 6f 75 74 69 6e 65 20  of a subroutine 
18280 74 68 61 74 20 63 6f 6d 70 75 74 65 73 20 74 68  that computes th
18290 65 20 73 75 62 71 75 65 72 79 2e 0a 2a 2a 0a 2a  e subquery..**.*
182a0 2a 20 49 66 20 74 68 65 20 45 78 70 72 20 69 73  * If the Expr is
182b0 20 6f 66 20 74 79 70 65 20 4f 50 5f 43 6f 6c 75   of type OP_Colu
182c0 6d 6e 2c 20 61 6e 64 20 74 68 65 20 74 61 62 6c  mn, and the tabl
182d0 65 20 69 74 20 69 73 20 73 65 6c 65 63 74 69 6e  e it is selectin
182e0 67 20 66 72 6f 6d 0a 2a 2a 20 69 73 20 61 20 64  g from.** is a d
182f0 69 73 6b 20 74 61 62 6c 65 20 6f 72 20 74 68 65  isk table or the
18300 20 22 6f 6c 64 2e 2a 22 20 70 73 65 75 64 6f 2d   "old.*" pseudo-
18310 74 61 62 6c 65 2c 20 74 68 65 6e 20 70 54 61 62  table, then pTab
18320 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 0a 2a   points to the.*
18330 2a 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20  * corresponding 
18340 74 61 62 6c 65 20 64 65 66 69 6e 69 74 69 6f 6e  table definition
18350 2e 0a 2a 2a 0a 2a 2a 20 41 4c 4c 4f 43 41 54 49  ..**.** ALLOCATI
18360 4f 4e 20 4e 4f 54 45 53 3a 0a 2a 2a 0a 2a 2a 20  ON NOTES:.**.** 
18370 45 78 70 72 20 6f 62 6a 65 63 74 73 20 63 61 6e  Expr objects can
18380 20 75 73 65 20 61 20 6c 6f 74 20 6f 66 20 6d 65   use a lot of me
18390 6d 6f 72 79 20 73 70 61 63 65 20 69 6e 20 64 61  mory space in da
183a0 74 61 62 61 73 65 20 73 63 68 65 6d 61 2e 20 20  tabase schema.  
183b0 54 6f 0a 2a 2a 20 68 65 6c 70 20 72 65 64 75 63  To.** help reduc
183c0 65 20 6d 65 6d 6f 72 79 20 72 65 71 75 69 72 65  e memory require
183d0 6d 65 6e 74 73 2c 20 73 6f 6d 65 74 69 6d 65 73  ments, sometimes
183e0 20 61 6e 20 45 78 70 72 20 6f 62 6a 65 63 74 20   an Expr object 
183f0 77 69 6c 6c 20 62 65 0a 2a 2a 20 74 72 75 6e 63  will be.** trunc
18400 61 74 65 64 2e 20 20 41 6e 64 20 74 6f 20 72 65  ated.  And to re
18410 64 75 63 65 20 74 68 65 20 6e 75 6d 62 65 72 20  duce the number 
18420 6f 66 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61  of memory alloca
18430 74 69 6f 6e 73 2c 20 73 6f 6d 65 74 69 6d 65 73  tions, sometimes
18440 0a 2a 2a 20 74 77 6f 20 6f 72 20 6d 6f 72 65 20  .** two or more 
18450 45 78 70 72 20 6f 62 6a 65 63 74 73 20 77 69 6c  Expr objects wil
18460 6c 20 62 65 20 73 74 6f 72 65 64 20 69 6e 20 61  l be stored in a
18470 20 73 69 6e 67 6c 65 20 6d 65 6d 6f 72 79 20 61   single memory a
18480 6c 6c 6f 63 61 74 69 6f 6e 2c 0a 2a 2a 20 74 6f  llocation,.** to
18490 67 65 74 68 65 72 20 77 69 74 68 20 45 78 70 72  gether with Expr
184a0 2e 7a 54 6f 6b 65 6e 20 73 74 72 69 6e 67 73 2e  .zToken strings.
184b0 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 45 50  .**.** If the EP
184c0 5f 52 65 64 75 63 65 64 20 61 6e 64 20 45 50 5f  _Reduced and EP_
184d0 54 6f 6b 65 6e 4f 6e 6c 79 20 66 6c 61 67 73 20  TokenOnly flags 
184e0 61 72 65 20 73 65 74 20 77 68 65 6e 0a 2a 2a 20  are set when.** 
184f0 61 6e 20 45 78 70 72 20 6f 62 6a 65 63 74 20 69  an Expr object i
18500 73 20 74 72 75 6e 63 61 74 65 64 2e 20 20 57 68  s truncated.  Wh
18510 65 6e 20 45 50 5f 52 65 64 75 63 65 64 20 69 73  en EP_Reduced is
18520 20 73 65 74 2c 20 74 68 65 6e 20 61 6c 6c 0a 2a   set, then all.*
18530 2a 20 74 68 65 20 63 68 69 6c 64 20 45 78 70 72  * the child Expr
18540 20 6f 62 6a 65 63 74 73 20 69 6e 20 74 68 65 20   objects in the 
18550 45 78 70 72 2e 70 4c 65 66 74 20 61 6e 64 20 45  Expr.pLeft and E
18560 78 70 72 2e 70 52 69 67 68 74 20 73 75 62 74 72  xpr.pRight subtr
18570 65 65 73 0a 2a 2a 20 61 72 65 20 63 6f 6e 74 61  ees.** are conta
18580 69 6e 65 64 20 77 69 74 68 69 6e 20 74 68 65 20  ined within the 
18590 73 61 6d 65 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f  same memory allo
185a0 63 61 74 69 6f 6e 2e 20 20 4e 6f 74 65 2c 20 68  cation.  Note, h
185b0 6f 77 65 76 65 72 2c 20 74 68 61 74 0a 2a 2a 20  owever, that.** 
185c0 74 68 65 20 73 75 62 74 72 65 65 73 20 69 6e 20  the subtrees in 
185d0 45 78 70 72 2e 78 2e 70 4c 69 73 74 20 6f 72 20  Expr.x.pList or 
185e0 45 78 70 72 2e 78 2e 70 53 65 6c 65 63 74 20 61  Expr.x.pSelect a
185f0 72 65 20 61 6c 77 61 79 73 20 73 65 70 61 72 61  re always separa
18600 74 65 6c 79 0a 2a 2a 20 61 6c 6c 6f 63 61 74 65  tely.** allocate
18610 64 2c 20 72 65 67 61 72 64 6c 65 73 73 20 6f 66  d, regardless of
18620 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20   whether or not 
18630 45 50 5f 52 65 64 75 63 65 64 20 69 73 20 73 65  EP_Reduced is se
18640 74 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 45 78 70  t..*/.struct Exp
18650 72 20 7b 0a 20 20 75 38 20 6f 70 3b 20 20 20 20  r {.  u8 op;    
18660 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
18670 4f 70 65 72 61 74 69 6f 6e 20 70 65 72 66 6f 72  Operation perfor
18680 6d 65 64 20 62 79 20 74 68 69 73 20 6e 6f 64 65  med by this node
18690 20 2a 2f 0a 20 20 63 68 61 72 20 61 66 66 69 6e   */.  char affin
186a0 69 74 79 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  ity;         /* 
186b0 54 68 65 20 61 66 66 69 6e 69 74 79 20 6f 66 20  The affinity of 
186c0 74 68 65 20 63 6f 6c 75 6d 6e 20 6f 72 20 30 20  the column or 0 
186d0 69 66 20 6e 6f 74 20 61 20 63 6f 6c 75 6d 6e 20  if not a column 
186e0 2a 2f 0a 20 20 75 33 32 20 66 6c 61 67 73 3b 20  */.  u32 flags; 
186f0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56              /* V
18700 61 72 69 6f 75 73 20 66 6c 61 67 73 2e 20 20 45  arious flags.  E
18710 50 5f 2a 20 53 65 65 20 62 65 6c 6f 77 20 2a 2f  P_* See below */
18720 0a 20 20 75 6e 69 6f 6e 20 7b 0a 20 20 20 20 63  .  union {.    c
18730 68 61 72 20 2a 7a 54 6f 6b 65 6e 3b 20 20 20 20  har *zToken;    
18740 20 20 20 20 20 20 2f 2a 20 54 6f 6b 65 6e 20 76        /* Token v
18750 61 6c 75 65 2e 20 5a 65 72 6f 20 74 65 72 6d 69  alue. Zero termi
18760 6e 61 74 65 64 20 61 6e 64 20 64 65 71 75 6f 74  nated and dequot
18770 65 64 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 56  ed */.    int iV
18780 61 6c 75 65 3b 20 20 20 20 20 20 20 20 20 20 20  alue;           
18790 20 2f 2a 20 4e 6f 6e 2d 6e 65 67 61 74 69 76 65   /* Non-negative
187a0 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20 69   integer value i
187b0 66 20 45 50 5f 49 6e 74 56 61 6c 75 65 20 2a 2f  f EP_IntValue */
187c0 0a 20 20 7d 20 75 3b 0a 0a 20 20 2f 2a 20 49 66  .  } u;..  /* If
187d0 20 74 68 65 20 45 50 5f 54 6f 6b 65 6e 4f 6e 6c   the EP_TokenOnl
187e0 79 20 66 6c 61 67 20 69 73 20 73 65 74 20 69 6e  y flag is set in
187f0 20 74 68 65 20 45 78 70 72 2e 66 6c 61 67 73 20   the Expr.flags 
18800 6d 61 73 6b 2c 20 74 68 65 6e 20 6e 6f 0a 20 20  mask, then no.  
18810 2a 2a 20 73 70 61 63 65 20 69 73 20 61 6c 6c 6f  ** space is allo
18820 63 61 74 65 64 20 66 6f 72 20 74 68 65 20 66 69  cated for the fi
18830 65 6c 64 73 20 62 65 6c 6f 77 20 74 68 69 73 20  elds below this 
18840 70 6f 69 6e 74 2e 20 41 6e 20 61 74 74 65 6d 70  point. An attemp
18850 74 20 74 6f 0a 20 20 2a 2a 20 61 63 63 65 73 73  t to.  ** access
18860 20 74 68 65 6d 20 77 69 6c 6c 20 72 65 73 75 6c   them will resul
18870 74 20 69 6e 20 61 20 73 65 67 66 61 75 6c 74 20  t in a segfault 
18880 6f 72 20 6d 61 6c 66 75 6e 63 74 69 6f 6e 2e 0a  or malfunction..
18890 20 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a    **************
188a0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
188b0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
188c0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
188d0 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 20 20 45 78 70 72  *******/..  Expr
188e0 20 2a 70 4c 65 66 74 3b 20 20 20 20 20 20 20 20   *pLeft;        
188f0 20 20 20 2f 2a 20 4c 65 66 74 20 73 75 62 6e 6f     /* Left subno
18900 64 65 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 52  de */.  Expr *pR
18910 69 67 68 74 3b 20 20 20 20 20 20 20 20 20 20 2f  ight;          /
18920 2a 20 52 69 67 68 74 20 73 75 62 6e 6f 64 65 20  * Right subnode 
18930 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b 0a 20 20 20  */.  union {.   
18940 20 45 78 70 72 4c 69 73 74 20 2a 70 4c 69 73 74   ExprList *pList
18950 3b 20 20 20 20 20 2f 2a 20 6f 70 20 3d 20 49 4e  ;     /* op = IN
18960 2c 20 45 58 49 53 54 53 2c 20 53 45 4c 45 43 54  , EXISTS, SELECT
18970 2c 20 43 41 53 45 2c 20 46 55 4e 43 54 49 4f 4e  , CASE, FUNCTION
18980 2c 20 42 45 54 57 45 45 4e 20 2a 2f 0a 20 20 20  , BETWEEN */.   
18990 20 53 65 6c 65 63 74 20 2a 70 53 65 6c 65 63 74   Select *pSelect
189a0 3b 20 20 20 20 20 2f 2a 20 45 50 5f 78 49 73 53  ;     /* EP_xIsS
189b0 65 6c 65 63 74 20 61 6e 64 20 6f 70 20 3d 20 49  elect and op = I
189c0 4e 2c 20 45 58 49 53 54 53 2c 20 53 45 4c 45 43  N, EXISTS, SELEC
189d0 54 20 2a 2f 0a 20 20 7d 20 78 3b 0a 0a 20 20 2f  T */.  } x;..  /
189e0 2a 20 49 66 20 74 68 65 20 45 50 5f 52 65 64 75  * If the EP_Redu
189f0 63 65 64 20 66 6c 61 67 20 69 73 20 73 65 74 20  ced flag is set 
18a00 69 6e 20 74 68 65 20 45 78 70 72 2e 66 6c 61 67  in the Expr.flag
18a10 73 20 6d 61 73 6b 2c 20 74 68 65 6e 20 6e 6f 0a  s mask, then no.
18a20 20 20 2a 2a 20 73 70 61 63 65 20 69 73 20 61 6c    ** space is al
18a30 6c 6f 63 61 74 65 64 20 66 6f 72 20 74 68 65 20  located for the 
18a40 66 69 65 6c 64 73 20 62 65 6c 6f 77 20 74 68 69  fields below thi
18a50 73 20 70 6f 69 6e 74 2e 20 41 6e 20 61 74 74 65  s point. An atte
18a60 6d 70 74 20 74 6f 0a 20 20 2a 2a 20 61 63 63 65  mpt to.  ** acce
18a70 73 73 20 74 68 65 6d 20 77 69 6c 6c 20 72 65 73  ss them will res
18a80 75 6c 74 20 69 6e 20 61 20 73 65 67 66 61 75 6c  ult in a segfaul
18a90 74 20 6f 72 20 6d 61 6c 66 75 6e 63 74 69 6f 6e  t or malfunction
18aa0 2e 0a 20 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ..  ************
18ab0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
18ac0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
18ad0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
18ae0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 23 69 66 20  *********/..#if 
18af0 53 51 4c 49 54 45 5f 4d 41 58 5f 45 58 50 52 5f  SQLITE_MAX_EXPR_
18b00 44 45 50 54 48 3e 30 0a 20 20 69 6e 74 20 6e 48  DEPTH>0.  int nH
18b10 65 69 67 68 74 3b 20 20 20 20 20 20 20 20 20 20  eight;          
18b20 20 2f 2a 20 48 65 69 67 68 74 20 6f 66 20 74 68   /* Height of th
18b30 65 20 74 72 65 65 20 68 65 61 64 65 64 20 62 79  e tree headed by
18b40 20 74 68 69 73 20 6e 6f 64 65 20 2a 2f 0a 23 65   this node */.#e
18b50 6e 64 69 66 0a 20 20 69 6e 74 20 69 54 61 62 6c  ndif.  int iTabl
18b60 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  e;            /*
18b70 20 54 4b 5f 43 4f 4c 55 4d 4e 3a 20 63 75 72 73   TK_COLUMN: curs
18b80 6f 72 20 6e 75 6d 62 65 72 20 6f 66 20 74 61 62  or number of tab
18b90 6c 65 20 68 6f 6c 64 69 6e 67 20 63 6f 6c 75 6d  le holding colum
18ba0 6e 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  n.              
18bb0 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 54 4b             ** TK
18bc0 5f 52 45 47 49 53 54 45 52 3a 20 72 65 67 69 73  _REGISTER: regis
18bd0 74 65 72 20 6e 75 6d 62 65 72 0a 20 20 20 20 20  ter number.     
18be0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18bf0 20 20 20 20 2a 2a 20 54 4b 5f 54 52 49 47 47 45      ** TK_TRIGGE
18c00 52 3a 20 31 20 2d 3e 20 6e 65 77 2c 20 30 20 2d  R: 1 -> new, 0 -
18c10 3e 20 6f 6c 64 0a 20 20 20 20 20 20 20 20 20 20  > old.          
18c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a                 *
18c30 2a 20 45 50 5f 55 6e 6c 69 6b 65 6c 79 3a 20 20  * EP_Unlikely:  
18c40 31 33 34 32 31 37 37 32 38 20 74 69 6d 65 73 20  134217728 times 
18c50 6c 69 6b 65 6c 69 68 6f 6f 64 0a 20 20 20 20 20  likelihood.     
18c60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18c70 20 20 20 20 2a 2a 20 54 4b 5f 53 45 4c 45 43 54      ** TK_SELECT
18c80 3a 20 31 73 74 20 72 65 67 69 73 74 65 72 20 6f  : 1st register o
18c90 66 20 72 65 73 75 6c 74 20 76 65 63 74 6f 72 20  f result vector 
18ca0 2a 2f 0a 20 20 79 6e 56 61 72 20 69 43 6f 6c 75  */.  ynVar iColu
18cb0 6d 6e 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54  mn;         /* T
18cc0 4b 5f 43 4f 4c 55 4d 4e 3a 20 63 6f 6c 75 6d 6e  K_COLUMN: column
18cd0 20 69 6e 64 65 78 2e 20 20 2d 31 20 66 6f 72 20   index.  -1 for 
18ce0 72 6f 77 69 64 2e 0a 20 20 20 20 20 20 20 20 20  rowid..         
18cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18d00 2a 2a 20 54 4b 5f 56 41 52 49 41 42 4c 45 3a 20  ** TK_VARIABLE: 
18d10 76 61 72 69 61 62 6c 65 20 6e 75 6d 62 65 72 20  variable number 
18d20 28 61 6c 77 61 79 73 20 3e 3d 20 31 29 2e 0a 20  (always >= 1).. 
18d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18d40 20 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f 53 45          ** TK_SE
18d50 4c 45 43 54 5f 43 4f 4c 55 4d 4e 3a 20 63 6f 6c  LECT_COLUMN: col
18d60 75 6d 6e 20 6f 66 20 74 68 65 20 72 65 73 75 6c  umn of the resul
18d70 74 20 76 65 63 74 6f 72 20 2a 2f 0a 20 20 69 31  t vector */.  i1
18d80 36 20 69 41 67 67 3b 20 20 20 20 20 20 20 20 20  6 iAgg;         
18d90 20 20 20 20 20 2f 2a 20 57 68 69 63 68 20 65 6e       /* Which en
18da0 74 72 79 20 69 6e 20 70 41 67 67 49 6e 66 6f 2d  try in pAggInfo-
18db0 3e 61 43 6f 6c 5b 5d 20 6f 72 20 2d 3e 61 46 75  >aCol[] or ->aFu
18dc0 6e 63 5b 5d 20 2a 2f 0a 20 20 69 31 36 20 69 52  nc[] */.  i16 iR
18dd0 69 67 68 74 4a 6f 69 6e 54 61 62 6c 65 3b 20 20  ightJoinTable;  
18de0 20 2f 2a 20 49 66 20 45 50 5f 46 72 6f 6d 4a 6f   /* If EP_FromJo
18df0 69 6e 2c 20 74 68 65 20 72 69 67 68 74 20 74 61  in, the right ta
18e00 62 6c 65 20 6f 66 20 74 68 65 20 6a 6f 69 6e 20  ble of the join 
18e10 2a 2f 0a 20 20 75 38 20 6f 70 32 3b 20 20 20 20  */.  u8 op2;    
18e20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
18e30 4b 5f 52 45 47 49 53 54 45 52 3a 20 6f 72 69 67  K_REGISTER: orig
18e40 69 6e 61 6c 20 76 61 6c 75 65 20 6f 66 20 45 78  inal value of Ex
18e50 70 72 2e 6f 70 0a 20 20 20 20 20 20 20 20 20 20  pr.op.          
18e60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a                 *
18e70 2a 20 54 4b 5f 43 4f 4c 55 4d 4e 3a 20 74 68 65  * TK_COLUMN: the
18e80 20 76 61 6c 75 65 20 6f 66 20 70 35 20 66 6f 72   value of p5 for
18e90 20 4f 50 5f 43 6f 6c 75 6d 6e 0a 20 20 20 20 20   OP_Column.     
18ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18eb0 20 20 20 20 2a 2a 20 54 4b 5f 41 47 47 5f 46 55      ** TK_AGG_FU
18ec0 4e 43 54 49 4f 4e 3a 20 6e 65 73 74 69 6e 67 20  NCTION: nesting 
18ed0 64 65 70 74 68 20 2a 2f 0a 20 20 41 67 67 49 6e  depth */.  AggIn
18ee0 66 6f 20 2a 70 41 67 67 49 6e 66 6f 3b 20 20 20  fo *pAggInfo;   
18ef0 20 20 2f 2a 20 55 73 65 64 20 62 79 20 54 4b 5f    /* Used by TK_
18f00 41 47 47 5f 43 4f 4c 55 4d 4e 20 61 6e 64 20 54  AGG_COLUMN and T
18f10 4b 5f 41 47 47 5f 46 55 4e 43 54 49 4f 4e 20 2a  K_AGG_FUNCTION *
18f20 2f 0a 20 20 54 61 62 6c 65 20 2a 70 54 61 62 3b  /.  Table *pTab;
18f30 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 61             /* Ta
18f40 62 6c 65 20 66 6f 72 20 54 4b 5f 43 4f 4c 55 4d  ble for TK_COLUM
18f50 4e 20 65 78 70 72 65 73 73 69 6f 6e 73 2e 20 20  N expressions.  
18f60 43 61 6e 20 62 65 20 4e 55 4c 4c 0a 20 20 20 20  Can be NULL.    
18f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18f80 20 20 20 20 20 2a 2a 20 66 6f 72 20 61 20 63 6f       ** for a co
18f90 6c 75 6d 6e 20 6f 66 20 61 6e 20 69 6e 64 65 78  lumn of an index
18fa0 20 6f 6e 20 61 6e 20 65 78 70 72 65 73 73 69 6f   on an expressio
18fb0 6e 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54  n */.};../*.** T
18fc0 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 72 65  he following are
18fd0 20 74 68 65 20 6d 65 61 6e 69 6e 67 73 20 6f 66   the meanings of
18fe0 20 62 69 74 73 20 69 6e 20 74 68 65 20 45 78 70   bits in the Exp
18ff0 72 2e 66 6c 61 67 73 20 66 69 65 6c 64 2e 0a 2a  r.flags field..*
19000 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 46 72 6f  /.#define EP_Fro
19010 6d 4a 6f 69 6e 20 20 30 78 30 30 30 30 30 31 20  mJoin  0x000001 
19020 2f 2a 20 4f 72 69 67 69 6e 61 74 65 73 20 69 6e  /* Originates in
19030 20 4f 4e 2f 55 53 49 4e 47 20 63 6c 61 75 73 65   ON/USING clause
19040 20 6f 66 20 6f 75 74 65 72 20 6a 6f 69 6e 20 2a   of outer join *
19050 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 41 67 67  /.#define EP_Agg
19060 20 20 20 20 20 20 20 30 78 30 30 30 30 30 32 20         0x000002 
19070 2f 2a 20 43 6f 6e 74 61 69 6e 73 20 6f 6e 65 20  /* Contains one 
19080 6f 72 20 6d 6f 72 65 20 61 67 67 72 65 67 61 74  or more aggregat
19090 65 20 66 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a 23  e functions */.#
190a0 64 65 66 69 6e 65 20 45 50 5f 48 61 73 46 75 6e  define EP_HasFun
190b0 63 20 20 20 30 78 30 30 30 30 30 34 20 2f 2a 20  c   0x000004 /* 
190c0 43 6f 6e 74 61 69 6e 73 20 6f 6e 65 20 6f 72 20  Contains one or 
190d0 6d 6f 72 65 20 66 75 6e 63 74 69 6f 6e 73 20 6f  more functions o
190e0 66 20 61 6e 79 20 6b 69 6e 64 20 2a 2f 0a 20 20  f any kind */.  
190f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19100 2f 2a 20 30 78 30 30 30 30 30 38 20 2f 2f 20 61  /* 0x000008 // a
19110 76 61 69 6c 61 62 6c 65 20 66 6f 72 20 75 73 65  vailable for use
19120 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 44   */.#define EP_D
19130 69 73 74 69 6e 63 74 20 20 30 78 30 30 30 30 31  istinct  0x00001
19140 30 20 2f 2a 20 41 67 67 72 65 67 61 74 65 20 66  0 /* Aggregate f
19150 75 6e 63 74 69 6f 6e 20 77 69 74 68 20 44 49 53  unction with DIS
19160 54 49 4e 43 54 20 6b 65 79 77 6f 72 64 20 2a 2f  TINCT keyword */
19170 0a 23 64 65 66 69 6e 65 20 45 50 5f 56 61 72 53  .#define EP_VarS
19180 65 6c 65 63 74 20 30 78 30 30 30 30 32 30 20 2f  elect 0x000020 /
19190 2a 20 70 53 65 6c 65 63 74 20 69 73 20 63 6f 72  * pSelect is cor
191a0 72 65 6c 61 74 65 64 2c 20 6e 6f 74 20 63 6f 6e  related, not con
191b0 73 74 61 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65  stant */.#define
191c0 20 45 50 5f 44 62 6c 51 75 6f 74 65 64 20 30 78   EP_DblQuoted 0x
191d0 30 30 30 30 34 30 20 2f 2a 20 74 6f 6b 65 6e 2e  000040 /* token.
191e0 7a 20 77 61 73 20 6f 72 69 67 69 6e 61 6c 6c 79  z was originally
191f0 20 69 6e 20 22 2e 2e 2e 22 20 2a 2f 0a 23 64 65   in "..." */.#de
19200 66 69 6e 65 20 45 50 5f 49 6e 66 69 78 46 75 6e  fine EP_InfixFun
19210 63 20 30 78 30 30 30 30 38 30 20 2f 2a 20 54 72  c 0x000080 /* Tr
19220 75 65 20 66 6f 72 20 61 6e 20 69 6e 66 69 78 20  ue for an infix 
19230 66 75 6e 63 74 69 6f 6e 3a 20 4c 49 4b 45 2c 20  function: LIKE, 
19240 47 4c 4f 42 2c 20 65 74 63 20 2a 2f 0a 23 64 65  GLOB, etc */.#de
19250 66 69 6e 65 20 45 50 5f 43 6f 6c 6c 61 74 65 20  fine EP_Collate 
19260 20 20 30 78 30 30 30 31 30 30 20 2f 2a 20 54 72    0x000100 /* Tr
19270 65 65 20 63 6f 6e 74 61 69 6e 73 20 61 20 54 4b  ee contains a TK
19280 5f 43 4f 4c 4c 41 54 45 20 6f 70 65 72 61 74 6f  _COLLATE operato
19290 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  r */.#define EP_
192a0 47 65 6e 65 72 69 63 20 20 20 30 78 30 30 30 32  Generic   0x0002
192b0 30 30 20 2f 2a 20 49 67 6e 6f 72 65 20 43 4f 4c  00 /* Ignore COL
192c0 4c 41 54 45 20 6f 72 20 61 66 66 69 6e 69 74 79  LATE or affinity
192d0 20 6f 6e 20 74 68 69 73 20 74 72 65 65 20 2a 2f   on this tree */
192e0 0a 23 64 65 66 69 6e 65 20 45 50 5f 49 6e 74 56  .#define EP_IntV
192f0 61 6c 75 65 20 20 30 78 30 30 30 34 30 30 20 2f  alue  0x000400 /
19300 2a 20 49 6e 74 65 67 65 72 20 76 61 6c 75 65 20  * Integer value 
19310 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20 75 2e 69  contained in u.i
19320 56 61 6c 75 65 20 2a 2f 0a 23 64 65 66 69 6e 65  Value */.#define
19330 20 45 50 5f 78 49 73 53 65 6c 65 63 74 20 30 78   EP_xIsSelect 0x
19340 30 30 30 38 30 30 20 2f 2a 20 78 2e 70 53 65 6c  000800 /* x.pSel
19350 65 63 74 20 69 73 20 76 61 6c 69 64 20 28 6f 74  ect is valid (ot
19360 68 65 72 77 69 73 65 20 78 2e 70 4c 69 73 74 20  herwise x.pList 
19370 69 73 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45  is) */.#define E
19380 50 5f 53 6b 69 70 20 20 20 20 20 20 30 78 30 30  P_Skip      0x00
19390 31 30 30 30 20 2f 2a 20 43 4f 4c 4c 41 54 45 2c  1000 /* COLLATE,
193a0 20 41 53 2c 20 6f 72 20 55 4e 4c 49 4b 45 4c 59   AS, or UNLIKELY
193b0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 52   */.#define EP_R
193c0 65 64 75 63 65 64 20 20 20 30 78 30 30 32 30 30  educed   0x00200
193d0 30 20 2f 2a 20 45 78 70 72 20 73 74 72 75 63 74  0 /* Expr struct
193e0 20 45 58 50 52 5f 52 45 44 55 43 45 44 53 49 5a   EXPR_REDUCEDSIZ
193f0 45 20 62 79 74 65 73 20 6f 6e 6c 79 20 2a 2f 0a  E bytes only */.
19400 23 64 65 66 69 6e 65 20 45 50 5f 54 6f 6b 65 6e  #define EP_Token
19410 4f 6e 6c 79 20 30 78 30 30 34 30 30 30 20 2f 2a  Only 0x004000 /*
19420 20 45 78 70 72 20 73 74 72 75 63 74 20 45 58 50   Expr struct EXP
19430 52 5f 54 4f 4b 45 4e 4f 4e 4c 59 53 49 5a 45 20  R_TOKENONLYSIZE 
19440 62 79 74 65 73 20 6f 6e 6c 79 20 2a 2f 0a 23 64  bytes only */.#d
19450 65 66 69 6e 65 20 45 50 5f 53 74 61 74 69 63 20  efine EP_Static 
19460 20 20 20 30 78 30 30 38 30 30 30 20 2f 2a 20 48     0x008000 /* H
19470 65 6c 64 20 69 6e 20 6d 65 6d 6f 72 79 20 6e 6f  eld in memory no
19480 74 20 6f 62 74 61 69 6e 65 64 20 66 72 6f 6d 20  t obtained from 
19490 6d 61 6c 6c 6f 63 28 29 20 2a 2f 0a 23 64 65 66  malloc() */.#def
194a0 69 6e 65 20 45 50 5f 4d 65 6d 54 6f 6b 65 6e 20  ine EP_MemToken 
194b0 20 30 78 30 31 30 30 30 30 20 2f 2a 20 4e 65 65   0x010000 /* Nee
194c0 64 20 74 6f 20 73 71 6c 69 74 65 33 44 62 46 72  d to sqlite3DbFr
194d0 65 65 28 29 20 45 78 70 72 2e 7a 54 6f 6b 65 6e  ee() Expr.zToken
194e0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 4e   */.#define EP_N
194f0 6f 52 65 64 75 63 65 20 20 30 78 30 32 30 30 30  oReduce  0x02000
19500 30 20 2f 2a 20 43 61 6e 6e 6f 74 20 45 58 50 52  0 /* Cannot EXPR
19510 44 55 50 5f 52 45 44 55 43 45 20 74 68 69 73 20  DUP_REDUCE this 
19520 45 78 70 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20  Expr */.#define 
19530 45 50 5f 55 6e 6c 69 6b 65 6c 79 20 20 30 78 30  EP_Unlikely  0x0
19540 34 30 30 30 30 20 2f 2a 20 75 6e 6c 69 6b 65 6c  40000 /* unlikel
19550 79 28 29 20 6f 72 20 6c 69 6b 65 6c 69 68 6f 6f  y() or likelihoo
19560 64 28 29 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a  d() function */.
19570 23 64 65 66 69 6e 65 20 45 50 5f 43 6f 6e 73 74  #define EP_Const
19580 46 75 6e 63 20 30 78 30 38 30 30 30 30 20 2f 2a  Func 0x080000 /*
19590 20 41 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43   A SQLITE_FUNC_C
195a0 4f 4e 53 54 41 4e 54 20 6f 72 20 5f 53 4c 4f 43  ONSTANT or _SLOC
195b0 48 4e 47 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a  HNG function */.
195c0 23 64 65 66 69 6e 65 20 45 50 5f 43 61 6e 42 65  #define EP_CanBe
195d0 4e 75 6c 6c 20 30 78 31 30 30 30 30 30 20 2f 2a  Null 0x100000 /*
195e0 20 43 61 6e 20 62 65 20 6e 75 6c 6c 20 64 65 73   Can be null des
195f0 70 69 74 65 20 4e 4f 54 20 4e 55 4c 4c 20 63 6f  pite NOT NULL co
19600 6e 73 74 72 61 69 6e 74 20 2a 2f 0a 23 64 65 66  nstraint */.#def
19610 69 6e 65 20 45 50 5f 53 75 62 71 75 65 72 79 20  ine EP_Subquery 
19620 20 30 78 32 30 30 30 30 30 20 2f 2a 20 54 72 65   0x200000 /* Tre
19630 65 20 63 6f 6e 74 61 69 6e 73 20 61 20 54 4b 5f  e contains a TK_
19640 53 45 4c 45 43 54 20 6f 70 65 72 61 74 6f 72 20  SELECT operator 
19650 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 41 6c  */.#define EP_Al
19660 69 61 73 20 20 20 20 20 30 78 34 30 30 30 30 30  ias     0x400000
19670 20 2f 2a 20 49 73 20 61 6e 20 61 6c 69 61 73 20   /* Is an alias 
19680 66 6f 72 20 61 20 72 65 73 75 6c 74 20 73 65 74  for a result set
19690 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 23 64 65 66 69   column */.#defi
196a0 6e 65 20 45 50 5f 4c 65 61 66 20 20 20 20 20 20  ne EP_Leaf      
196b0 30 78 38 30 30 30 30 30 20 2f 2a 20 45 78 70 72  0x800000 /* Expr
196c0 2e 70 4c 65 66 74 2c 20 2e 70 52 69 67 68 74 2c  .pLeft, .pRight,
196d0 20 2e 75 2e 70 53 65 6c 65 63 74 20 61 6c 6c 20   .u.pSelect all 
196e0 4e 55 4c 4c 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54  NULL */../*.** T
196f0 68 65 20 45 50 5f 50 72 6f 70 61 67 61 74 65 20  he EP_Propagate 
19700 6d 61 73 6b 20 69 73 20 61 20 73 65 74 20 6f 66  mask is a set of
19710 20 70 72 6f 70 65 72 74 69 65 73 20 74 68 61 74   properties that
19720 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 70   automatically p
19730 72 6f 70 61 67 61 74 65 0a 2a 2a 20 75 70 77 61  ropagate.** upwa
19740 72 64 73 20 69 6e 74 6f 20 70 61 72 65 6e 74 20  rds into parent 
19750 6e 6f 64 65 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e  nodes..*/.#defin
19760 65 20 45 50 5f 50 72 6f 70 61 67 61 74 65 20 28  e EP_Propagate (
19770 45 50 5f 43 6f 6c 6c 61 74 65 7c 45 50 5f 53 75  EP_Collate|EP_Su
19780 62 71 75 65 72 79 7c 45 50 5f 48 61 73 46 75 6e  bquery|EP_HasFun
19790 63 29 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 73 65 20  c)../*.** These 
197a0 6d 61 63 72 6f 73 20 63 61 6e 20 62 65 20 75 73  macros can be us
197b0 65 64 20 74 6f 20 74 65 73 74 2c 20 73 65 74 2c  ed to test, set,
197c0 20 6f 72 20 63 6c 65 61 72 20 62 69 74 73 20 69   or clear bits i
197d0 6e 20 74 68 65 0a 2a 2a 20 45 78 70 72 2e 66 6c  n the.** Expr.fl
197e0 61 67 73 20 66 69 65 6c 64 2e 0a 2a 2f 0a 23 64  ags field..*/.#d
197f0 65 66 69 6e 65 20 45 78 70 72 48 61 73 50 72 6f  efine ExprHasPro
19800 70 65 72 74 79 28 45 2c 50 29 20 20 20 20 20 28  perty(E,P)     (
19810 28 28 45 29 2d 3e 66 6c 61 67 73 26 28 50 29 29  ((E)->flags&(P))
19820 21 3d 30 29 0a 23 64 65 66 69 6e 65 20 45 78 70  !=0).#define Exp
19830 72 48 61 73 41 6c 6c 50 72 6f 70 65 72 74 79 28  rHasAllProperty(
19840 45 2c 50 29 20 20 28 28 28 45 29 2d 3e 66 6c 61  E,P)  (((E)->fla
19850 67 73 26 28 50 29 29 3d 3d 28 50 29 29 0a 23 64  gs&(P))==(P)).#d
19860 65 66 69 6e 65 20 45 78 70 72 53 65 74 50 72 6f  efine ExprSetPro
19870 70 65 72 74 79 28 45 2c 50 29 20 20 20 20 20 28  perty(E,P)     (
19880 45 29 2d 3e 66 6c 61 67 73 7c 3d 28 50 29 0a 23  E)->flags|=(P).#
19890 64 65 66 69 6e 65 20 45 78 70 72 43 6c 65 61 72  define ExprClear
198a0 50 72 6f 70 65 72 74 79 28 45 2c 50 29 20 20 20  Property(E,P)   
198b0 28 45 29 2d 3e 66 6c 61 67 73 26 3d 7e 28 50 29  (E)->flags&=~(P)
198c0 0a 0a 2f 2a 20 54 68 65 20 45 78 70 72 53 65 74  ../* The ExprSet
198d0 56 56 41 50 72 6f 70 65 72 74 79 28 29 20 6d 61  VVAProperty() ma
198e0 63 72 6f 20 69 73 20 75 73 65 64 20 66 6f 72 20  cro is used for 
198f0 56 65 72 69 66 69 63 61 74 69 6f 6e 2c 20 56 61  Verification, Va
19900 6c 69 64 61 74 69 6f 6e 2c 0a 2a 2a 20 61 6e 64  lidation,.** and
19910 20 41 63 63 72 65 64 69 74 61 74 69 6f 6e 20 6f   Accreditation o
19920 6e 6c 79 2e 20 20 49 74 20 77 6f 72 6b 73 20 6c  nly.  It works l
19930 69 6b 65 20 45 78 70 72 53 65 74 50 72 6f 70 65  ike ExprSetPrope
19940 72 74 79 28 29 20 64 75 72 69 6e 67 20 56 56 41  rty() during VVA
19950 0a 2a 2a 20 70 72 6f 63 65 73 73 65 73 20 62 75  .** processes bu
19960 74 20 69 73 20 61 20 6e 6f 2d 6f 70 20 66 6f 72  t is a no-op for
19970 20 64 65 6c 69 76 65 72 79 2e 0a 2a 2f 0a 23 69   delivery..*/.#i
19980 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55  fdef SQLITE_DEBU
19990 47 0a 23 20 64 65 66 69 6e 65 20 45 78 70 72 53  G.# define ExprS
199a0 65 74 56 56 41 50 72 6f 70 65 72 74 79 28 45 2c  etVVAProperty(E,
199b0 50 29 20 20 28 45 29 2d 3e 66 6c 61 67 73 7c 3d  P)  (E)->flags|=
199c0 28 50 29 0a 23 65 6c 73 65 0a 23 20 64 65 66 69  (P).#else.# defi
199d0 6e 65 20 45 78 70 72 53 65 74 56 56 41 50 72 6f  ne ExprSetVVAPro
199e0 70 65 72 74 79 28 45 2c 50 29 0a 23 65 6e 64 69  perty(E,P).#endi
199f0 66 0a 0a 2f 2a 0a 2a 2a 20 4d 61 63 72 6f 73 20  f../*.** Macros 
19a00 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 74 68 65  to determine the
19a10 20 6e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73   number of bytes
19a20 20 72 65 71 75 69 72 65 64 20 62 79 20 61 20 6e   required by a n
19a30 6f 72 6d 61 6c 20 45 78 70 72 0a 2a 2a 20 73 74  ormal Expr.** st
19a40 72 75 63 74 2c 20 61 6e 20 45 78 70 72 20 73 74  ruct, an Expr st
19a50 72 75 63 74 20 77 69 74 68 20 74 68 65 20 45 50  ruct with the EP
19a60 5f 52 65 64 75 63 65 64 20 66 6c 61 67 20 73 65  _Reduced flag se
19a70 74 20 69 6e 20 45 78 70 72 2e 66 6c 61 67 73 0a  t in Expr.flags.
19a80 2a 2a 20 61 6e 64 20 61 6e 20 45 78 70 72 20 73  ** and an Expr s
19a90 74 72 75 63 74 20 77 69 74 68 20 74 68 65 20 45  truct with the E
19aa0 50 5f 54 6f 6b 65 6e 4f 6e 6c 79 20 66 6c 61 67  P_TokenOnly flag
19ab0 20 73 65 74 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65   set..*/.#define
19ac0 20 45 58 50 52 5f 46 55 4c 4c 53 49 5a 45 20 20   EXPR_FULLSIZE  
19ad0 20 20 20 20 20 20 20 20 20 73 69 7a 65 6f 66 28           sizeof(
19ae0 45 78 70 72 29 20 20 20 20 20 20 20 20 20 20 20  Expr)           
19af0 2f 2a 20 46 75 6c 6c 20 73 69 7a 65 20 2a 2f 0a  /* Full size */.
19b00 23 64 65 66 69 6e 65 20 45 58 50 52 5f 52 45 44  #define EXPR_RED
19b10 55 43 45 44 53 49 5a 45 20 20 20 20 20 20 20 20  UCEDSIZE        
19b20 6f 66 66 73 65 74 6f 66 28 45 78 70 72 2c 69 54  offsetof(Expr,iT
19b30 61 62 6c 65 29 20 20 2f 2a 20 43 6f 6d 6d 6f 6e  able)  /* Common
19b40 20 66 65 61 74 75 72 65 73 20 2a 2f 0a 23 64 65   features */.#de
19b50 66 69 6e 65 20 45 58 50 52 5f 54 4f 4b 45 4e 4f  fine EXPR_TOKENO
19b60 4e 4c 59 53 49 5a 45 20 20 20 20 20 20 6f 66 66  NLYSIZE      off
19b70 73 65 74 6f 66 28 45 78 70 72 2c 70 4c 65 66 74  setof(Expr,pLeft
19b80 29 20 20 20 2f 2a 20 46 65 77 65 72 20 66 65 61  )   /* Fewer fea
19b90 74 75 72 65 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20  tures */../*.** 
19ba0 46 6c 61 67 73 20 70 61 73 73 65 64 20 74 6f 20  Flags passed to 
19bb0 74 68 65 20 73 71 6c 69 74 65 33 45 78 70 72 44  the sqlite3ExprD
19bc0 75 70 28 29 20 66 75 6e 63 74 69 6f 6e 2e 20 53  up() function. S
19bd0 65 65 20 74 68 65 20 68 65 61 64 65 72 20 63 6f  ee the header co
19be0 6d 6d 65 6e 74 0a 2a 2a 20 61 62 6f 76 65 20 73  mment.** above s
19bf0 71 6c 69 74 65 33 45 78 70 72 44 75 70 28 29 20  qlite3ExprDup() 
19c00 66 6f 72 20 64 65 74 61 69 6c 73 2e 0a 2a 2f 0a  for details..*/.
19c10 23 64 65 66 69 6e 65 20 45 58 50 52 44 55 50 5f  #define EXPRDUP_
19c20 52 45 44 55 43 45 20 20 20 20 20 20 20 20 20 30  REDUCE         0
19c30 78 30 30 30 31 20 20 2f 2a 20 55 73 65 64 20 72  x0001  /* Used r
19c40 65 64 75 63 65 64 2d 73 69 7a 65 20 45 78 70 72  educed-size Expr
19c50 20 6e 6f 64 65 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a   nodes */../*.**
19c60 20 41 20 6c 69 73 74 20 6f 66 20 65 78 70 72 65   A list of expre
19c70 73 73 69 6f 6e 73 2e 20 20 45 61 63 68 20 65 78  ssions.  Each ex
19c80 70 72 65 73 73 69 6f 6e 20 6d 61 79 20 6f 70 74  pression may opt
19c90 69 6f 6e 61 6c 6c 79 20 68 61 76 65 20 61 0a 2a  ionally have a.*
19ca0 2a 20 6e 61 6d 65 2e 20 20 41 6e 20 65 78 70 72  * name.  An expr
19cb0 2f 6e 61 6d 65 20 63 6f 6d 62 69 6e 61 74 69 6f  /name combinatio
19cc0 6e 20 63 61 6e 20 62 65 20 75 73 65 64 20 69 6e  n can be used in
19cd0 20 73 65 76 65 72 61 6c 20 77 61 79 73 2c 20 73   several ways, s
19ce0 75 63 68 0a 2a 2a 20 61 73 20 74 68 65 20 6c 69  uch.** as the li
19cf0 73 74 20 6f 66 20 22 65 78 70 72 20 41 53 20 49  st of "expr AS I
19d00 44 22 20 66 69 65 6c 64 73 20 66 6f 6c 6c 6f 77  D" fields follow
19d10 69 6e 67 20 61 20 22 53 45 4c 45 43 54 22 20 6f  ing a "SELECT" o
19d20 72 20 69 6e 20 74 68 65 0a 2a 2a 20 6c 69 73 74  r in the.** list
19d30 20 6f 66 20 22 49 44 20 3d 20 65 78 70 72 22 20   of "ID = expr" 
19d40 69 74 65 6d 73 20 69 6e 20 61 6e 20 55 50 44 41  items in an UPDA
19d50 54 45 2e 20 20 41 20 6c 69 73 74 20 6f 66 20 65  TE.  A list of e
19d60 78 70 72 65 73 73 69 6f 6e 73 20 63 61 6e 0a 2a  xpressions can.*
19d70 2a 20 61 6c 73 6f 20 62 65 20 75 73 65 64 20 61  * also be used a
19d80 73 20 74 68 65 20 61 72 67 75 6d 65 6e 74 20 74  s the argument t
19d90 6f 20 61 20 66 75 6e 63 74 69 6f 6e 2c 20 69 6e  o a function, in
19da0 20 77 68 69 63 68 20 63 61 73 65 20 74 68 65 20   which case the 
19db0 61 2e 7a 4e 61 6d 65 0a 2a 2a 20 66 69 65 6c 64  a.zName.** field
19dc0 20 69 73 20 6e 6f 74 20 75 73 65 64 2e 0a 2a 2a   is not used..**
19dd0 0a 2a 2a 20 42 79 20 64 65 66 61 75 6c 74 20 74  .** By default t
19de0 68 65 20 45 78 70 72 2e 7a 53 70 61 6e 20 66 69  he Expr.zSpan fi
19df0 65 6c 64 20 68 6f 6c 64 73 20 61 20 68 75 6d 61  eld holds a huma
19e00 6e 2d 72 65 61 64 61 62 6c 65 20 64 65 73 63 72  n-readable descr
19e10 69 70 74 69 6f 6e 20 6f 66 0a 2a 2a 20 74 68 65  iption of.** the
19e20 20 65 78 70 72 65 73 73 69 6f 6e 20 74 68 61 74   expression that
19e30 20 69 73 20 75 73 65 64 20 69 6e 20 74 68 65 20   is used in the 
19e40 67 65 6e 65 72 61 74 69 6f 6e 20 6f 66 20 65 72  generation of er
19e50 72 6f 72 20 6d 65 73 73 61 67 65 73 20 61 6e 64  ror messages and
19e60 0a 2a 2a 20 63 6f 6c 75 6d 6e 20 6c 61 62 65 6c  .** column label
19e70 73 2e 20 20 49 6e 20 74 68 69 73 20 63 61 73 65  s.  In this case
19e80 2c 20 45 78 70 72 2e 7a 53 70 61 6e 20 69 73 20  , Expr.zSpan is 
19e90 74 79 70 69 63 61 6c 6c 79 20 74 68 65 20 74 65  typically the te
19ea0 78 74 20 6f 66 20 61 0a 2a 2a 20 63 6f 6c 75 6d  xt of a.** colum
19eb0 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 61 73 20  n expression as 
19ec0 69 74 20 65 78 69 73 74 73 20 69 6e 20 61 20 53  it exists in a S
19ed0 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e  ELECT statement.
19ee0 20 20 48 6f 77 65 76 65 72 2c 20 69 66 0a 2a 2a    However, if.**
19ef0 20 74 68 65 20 62 53 70 61 6e 49 73 54 61 62 20   the bSpanIsTab 
19f00 66 6c 61 67 20 69 73 20 73 65 74 2c 20 74 68 65  flag is set, the
19f10 6e 20 7a 53 70 61 6e 20 69 73 20 6f 76 65 72 6c  n zSpan is overl
19f20 6f 61 64 65 64 20 74 6f 20 6d 65 61 6e 20 74 68  oaded to mean th
19f30 65 20 6e 61 6d 65 0a 2a 2a 20 6f 66 20 74 68 65  e name.** of the
19f40 20 72 65 73 75 6c 74 20 63 6f 6c 75 6d 6e 20 69   result column i
19f50 6e 20 74 68 65 20 66 6f 72 6d 3a 20 44 41 54 41  n the form: DATA
19f60 42 41 53 45 2e 54 41 42 4c 45 2e 43 4f 4c 55 4d  BASE.TABLE.COLUM
19f70 4e 2e 20 20 54 68 69 73 20 6c 61 74 65 72 0a 2a  N.  This later.*
19f80 2a 20 66 6f 72 6d 20 69 73 20 75 73 65 64 20 66  * form is used f
19f90 6f 72 20 6e 61 6d 65 20 72 65 73 6f 6c 75 74 69  or name resoluti
19fa0 6f 6e 20 77 69 74 68 20 6e 65 73 74 65 64 20 46  on with nested F
19fb0 52 4f 4d 20 63 6c 61 75 73 65 73 2e 0a 2a 2f 0a  ROM clauses..*/.
19fc0 73 74 72 75 63 74 20 45 78 70 72 4c 69 73 74 20  struct ExprList 
19fd0 7b 0a 20 20 69 6e 74 20 6e 45 78 70 72 3b 20 20  {.  int nExpr;  
19fe0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
19ff0 6d 62 65 72 20 6f 66 20 65 78 70 72 65 73 73 69  mber of expressi
1a000 6f 6e 73 20 6f 6e 20 74 68 65 20 6c 69 73 74 20  ons on the list 
1a010 2a 2f 0a 20 20 73 74 72 75 63 74 20 45 78 70 72  */.  struct Expr
1a020 4c 69 73 74 5f 69 74 65 6d 20 7b 20 2f 2a 20 46  List_item { /* F
1a030 6f 72 20 65 61 63 68 20 65 78 70 72 65 73 73 69  or each expressi
1a040 6f 6e 20 69 6e 20 74 68 65 20 6c 69 73 74 20 2a  on in the list *
1a050 2f 0a 20 20 20 20 45 78 70 72 20 2a 70 45 78 70  /.    Expr *pExp
1a060 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  r;            /*
1a070 20 54 68 65 20 70 61 72 73 65 20 74 72 65 65 20   The parse tree 
1a080 66 6f 72 20 74 68 69 73 20 65 78 70 72 65 73 73  for this express
1a090 69 6f 6e 20 2a 2f 0a 20 20 20 20 63 68 61 72 20  ion */.    char 
1a0a0 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20  *zName;         
1a0b0 20 20 20 2f 2a 20 54 6f 6b 65 6e 20 61 73 73 6f     /* Token asso
1a0c0 63 69 61 74 65 64 20 77 69 74 68 20 74 68 69 73  ciated with this
1a0d0 20 65 78 70 72 65 73 73 69 6f 6e 20 2a 2f 0a 20   expression */. 
1a0e0 20 20 20 63 68 61 72 20 2a 7a 53 70 61 6e 3b 20     char *zSpan; 
1a0f0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 72             /* Or
1a100 69 67 69 6e 61 6c 20 74 65 78 74 20 6f 66 20 74  iginal text of t
1a110 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 2a 2f  he expression */
1a120 0a 20 20 20 20 75 38 20 73 6f 72 74 4f 72 64 65  .    u8 sortOrde
1a130 72 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  r;           /* 
1a140 31 20 66 6f 72 20 44 45 53 43 20 6f 72 20 30 20  1 for DESC or 0 
1a150 66 6f 72 20 41 53 43 20 2a 2f 0a 20 20 20 20 75  for ASC */.    u
1a160 6e 73 69 67 6e 65 64 20 64 6f 6e 65 20 3a 31 3b  nsigned done :1;
1a170 20 20 20 20 20 20 20 2f 2a 20 41 20 66 6c 61 67         /* A flag
1a180 20 74 6f 20 69 6e 64 69 63 61 74 65 20 77 68 65   to indicate whe
1a190 6e 20 70 72 6f 63 65 73 73 69 6e 67 20 69 73 20  n processing is 
1a1a0 66 69 6e 69 73 68 65 64 20 2a 2f 0a 20 20 20 20  finished */.    
1a1b0 75 6e 73 69 67 6e 65 64 20 62 53 70 61 6e 49 73  unsigned bSpanIs
1a1c0 54 61 62 20 3a 31 3b 20 2f 2a 20 7a 53 70 61 6e  Tab :1; /* zSpan
1a1d0 20 68 6f 6c 64 73 20 44 42 2e 54 41 42 4c 45 2e   holds DB.TABLE.
1a1e0 43 4f 4c 55 4d 4e 20 2a 2f 0a 20 20 20 20 75 6e  COLUMN */.    un
1a1f0 73 69 67 6e 65 64 20 72 65 75 73 61 62 6c 65 20  signed reusable 
1a200 3a 31 3b 20 20 20 2f 2a 20 43 6f 6e 73 74 61 6e  :1;   /* Constan
1a210 74 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20  t expression is 
1a220 72 65 75 73 61 62 6c 65 20 2a 2f 0a 20 20 20 20  reusable */.    
1a230 75 6e 73 69 67 6e 65 64 20 62 53 6f 72 74 65 72  unsigned bSorter
1a240 52 65 66 20 3a 31 3b 20 2f 2a 20 44 65 66 65 72  Ref :1; /* Defer
1a250 20 65 76 61 6c 75 61 74 69 6f 6e 20 75 6e 74 69   evaluation unti
1a260 6c 20 61 66 74 65 72 20 73 6f 72 74 69 6e 67 20  l after sorting 
1a270 2a 2f 0a 20 20 20 20 75 6e 69 6f 6e 20 7b 0a 20  */.    union {. 
1a280 20 20 20 20 20 73 74 72 75 63 74 20 7b 0a 20 20       struct {.  
1a290 20 20 20 20 20 20 75 31 36 20 69 4f 72 64 65 72        u16 iOrder
1a2a0 42 79 43 6f 6c 3b 20 20 20 20 20 20 2f 2a 20 46  ByCol;      /* F
1a2b0 6f 72 20 4f 52 44 45 52 20 42 59 2c 20 63 6f 6c  or ORDER BY, col
1a2c0 75 6d 6e 20 6e 75 6d 62 65 72 20 69 6e 20 72 65  umn number in re
1a2d0 73 75 6c 74 20 73 65 74 20 2a 2f 0a 20 20 20 20  sult set */.    
1a2e0 20 20 20 20 75 31 36 20 69 41 6c 69 61 73 3b 20      u16 iAlias; 
1a2f0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 64            /* Ind
1a300 65 78 20 69 6e 74 6f 20 50 61 72 73 65 2e 61 41  ex into Parse.aA
1a310 6c 69 61 73 5b 5d 20 66 6f 72 20 7a 4e 61 6d 65  lias[] for zName
1a320 20 2a 2f 0a 20 20 20 20 20 20 7d 20 78 3b 0a 20   */.      } x;. 
1a330 20 20 20 20 20 69 6e 74 20 69 43 6f 6e 73 74 45       int iConstE
1a340 78 70 72 52 65 67 3b 20 20 20 20 20 20 2f 2a 20  xprReg;      /* 
1a350 52 65 67 69 73 74 65 72 20 69 6e 20 77 68 69 63  Register in whic
1a360 68 20 45 78 70 72 20 76 61 6c 75 65 20 69 73 20  h Expr value is 
1a370 63 61 63 68 65 64 20 2a 2f 0a 20 20 20 20 7d 20  cached */.    } 
1a380 75 3b 0a 20 20 7d 20 61 5b 31 5d 3b 20 20 20 20  u;.  } a[1];    
1a390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1a3a0 20 4f 6e 65 20 73 6c 6f 74 20 66 6f 72 20 65 61   One slot for ea
1a3b0 63 68 20 65 78 70 72 65 73 73 69 6f 6e 20 69 6e  ch expression in
1a3c0 20 74 68 65 20 6c 69 73 74 20 2a 2f 0a 7d 3b 0a   the list */.};.
1a3d0 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e  ./*.** An instan
1a3e0 63 65 20 6f 66 20 74 68 69 73 20 73 74 72 75 63  ce of this struc
1a3f0 74 75 72 65 20 63 61 6e 20 68 6f 6c 64 20 61 20  ture can hold a 
1a400 73 69 6d 70 6c 65 20 6c 69 73 74 20 6f 66 20 69  simple list of i
1a410 64 65 6e 74 69 66 69 65 72 73 2c 0a 2a 2a 20 73  dentifiers,.** s
1a420 75 63 68 20 61 73 20 74 68 65 20 6c 69 73 74 20  uch as the list 
1a430 22 61 2c 62 2c 63 22 20 69 6e 20 74 68 65 20 66  "a,b,c" in the f
1a440 6f 6c 6c 6f 77 69 6e 67 20 73 74 61 74 65 6d 65  ollowing stateme
1a450 6e 74 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 20  nts:.**.**      
1a460 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 28 61 2c  INSERT INTO t(a,
1a470 62 2c 63 29 20 56 41 4c 55 45 53 20 2e 2e 2e 3b  b,c) VALUES ...;
1a480 0a 2a 2a 20 20 20 20 20 20 43 52 45 41 54 45 20  .**      CREATE 
1a490 49 4e 44 45 58 20 69 64 78 20 4f 4e 20 74 28 61  INDEX idx ON t(a
1a4a0 2c 62 2c 63 29 3b 0a 2a 2a 20 20 20 20 20 20 43  ,b,c);.**      C
1a4b0 52 45 41 54 45 20 54 52 49 47 47 45 52 20 74 72  REATE TRIGGER tr
1a4c0 69 67 20 42 45 46 4f 52 45 20 55 50 44 41 54 45  ig BEFORE UPDATE
1a4d0 20 4f 4e 20 74 28 61 2c 62 2c 63 29 20 2e 2e 2e   ON t(a,b,c) ...
1a4e0 3b 0a 2a 2a 0a 2a 2a 20 54 68 65 20 49 64 4c 69  ;.**.** The IdLi
1a4f0 73 74 2e 61 2e 69 64 78 20 66 69 65 6c 64 20 69  st.a.idx field i
1a500 73 20 75 73 65 64 20 77 68 65 6e 20 74 68 65 20  s used when the 
1a510 49 64 4c 69 73 74 20 72 65 70 72 65 73 65 6e 74  IdList represent
1a520 73 20 74 68 65 20 6c 69 73 74 20 6f 66 0a 2a 2a  s the list of.**
1a530 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 61 66   column names af
1a540 74 65 72 20 61 20 74 61 62 6c 65 20 6e 61 6d 65  ter a table name
1a550 20 69 6e 20 61 6e 20 49 4e 53 45 52 54 20 73 74   in an INSERT st
1a560 61 74 65 6d 65 6e 74 2e 20 20 49 6e 20 74 68 65  atement.  In the
1a570 20 73 74 61 74 65 6d 65 6e 74 0a 2a 2a 0a 2a 2a   statement.**.**
1a580 20 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f       INSERT INTO
1a590 20 74 28 61 2c 62 2c 63 29 20 2e 2e 2e 0a 2a 2a   t(a,b,c) ....**
1a5a0 0a 2a 2a 20 49 66 20 22 61 22 20 69 73 20 74 68  .** If "a" is th
1a5b0 65 20 6b 2d 74 68 20 63 6f 6c 75 6d 6e 20 6f 66  e k-th column of
1a5c0 20 74 61 62 6c 65 20 22 74 22 2c 20 74 68 65 6e   table "t", then
1a5d0 20 49 64 4c 69 73 74 2e 61 5b 30 5d 2e 69 64 78   IdList.a[0].idx
1a5e0 3d 3d 6b 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 49  ==k..*/.struct I
1a5f0 64 4c 69 73 74 20 7b 0a 20 20 73 74 72 75 63 74  dList {.  struct
1a600 20 49 64 4c 69 73 74 5f 69 74 65 6d 20 7b 0a 20   IdList_item {. 
1a610 20 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20     char *zName; 
1a620 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20       /* Name of 
1a630 74 68 65 20 69 64 65 6e 74 69 66 69 65 72 20 2a  the identifier *
1a640 2f 0a 20 20 20 20 69 6e 74 20 69 64 78 3b 20 20  /.    int idx;  
1a650 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 64 65 78          /* Index
1a660 20 69 6e 20 73 6f 6d 65 20 54 61 62 6c 65 2e 61   in some Table.a
1a670 43 6f 6c 5b 5d 20 6f 66 20 61 20 63 6f 6c 75 6d  Col[] of a colum
1a680 6e 20 6e 61 6d 65 64 20 7a 4e 61 6d 65 20 2a 2f  n named zName */
1a690 0a 20 20 7d 20 2a 61 3b 0a 20 20 69 6e 74 20 6e  .  } *a;.  int n
1a6a0 49 64 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e  Id;         /* N
1a6b0 75 6d 62 65 72 20 6f 66 20 69 64 65 6e 74 69 66  umber of identif
1a6c0 69 65 72 73 20 6f 6e 20 74 68 65 20 6c 69 73 74  iers on the list
1a6d0 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68   */.};../*.** Th
1a6e0 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75  e following stru
1a6f0 63 74 75 72 65 20 64 65 73 63 72 69 62 65 73 20  cture describes 
1a700 74 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 20  the FROM clause 
1a710 6f 66 20 61 20 53 45 4c 45 43 54 20 73 74 61 74  of a SELECT stat
1a720 65 6d 65 6e 74 2e 0a 2a 2a 20 45 61 63 68 20 74  ement..** Each t
1a730 61 62 6c 65 20 6f 72 20 73 75 62 71 75 65 72 79  able or subquery
1a740 20 69 6e 20 74 68 65 20 46 52 4f 4d 20 63 6c 61   in the FROM cla
1a750 75 73 65 20 69 73 20 61 20 73 65 70 61 72 61 74  use is a separat
1a760 65 20 65 6c 65 6d 65 6e 74 20 6f 66 0a 2a 2a 20  e element of.** 
1a770 74 68 65 20 53 72 63 4c 69 73 74 2e 61 5b 5d 20  the SrcList.a[] 
1a780 61 72 72 61 79 2e 0a 2a 2a 0a 2a 2a 20 57 69 74  array..**.** Wit
1a790 68 20 74 68 65 20 61 64 64 69 74 69 6f 6e 20 6f  h the addition o
1a7a0 66 20 6d 75 6c 74 69 70 6c 65 20 64 61 74 61 62  f multiple datab
1a7b0 61 73 65 20 73 75 70 70 6f 72 74 2c 20 74 68 65  ase support, the
1a7c0 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63   following struc
1a7d0 74 75 72 65 0a 2a 2a 20 63 61 6e 20 61 6c 73 6f  ture.** can also
1a7e0 20 62 65 20 75 73 65 64 20 74 6f 20 64 65 73 63   be used to desc
1a7f0 72 69 62 65 20 61 20 70 61 72 74 69 63 75 6c 61  ribe a particula
1a800 72 20 74 61 62 6c 65 20 73 75 63 68 20 61 73 20  r table such as 
1a810 74 68 65 20 74 61 62 6c 65 20 74 68 61 74 0a 2a  the table that.*
1a820 2a 20 69 73 20 6d 6f 64 69 66 69 65 64 20 62 79  * is modified by
1a830 20 61 6e 20 49 4e 53 45 52 54 2c 20 44 45 4c 45   an INSERT, DELE
1a840 54 45 2c 20 6f 72 20 55 50 44 41 54 45 20 73 74  TE, or UPDATE st
1a850 61 74 65 6d 65 6e 74 2e 20 20 49 6e 20 73 74 61  atement.  In sta
1a860 6e 64 61 72 64 20 53 51 4c 2c 0a 2a 2a 20 73 75  ndard SQL,.** su
1a870 63 68 20 61 20 74 61 62 6c 65 20 6d 75 73 74 20  ch a table must 
1a880 62 65 20 61 20 73 69 6d 70 6c 65 20 6e 61 6d 65  be a simple name
1a890 3a 20 49 44 2e 20 20 42 75 74 20 69 6e 20 53 51  : ID.  But in SQ
1a8a0 4c 69 74 65 2c 20 74 68 65 20 74 61 62 6c 65 20  Lite, the table 
1a8b0 63 61 6e 0a 2a 2a 20 6e 6f 77 20 62 65 20 69 64  can.** now be id
1a8c0 65 6e 74 69 66 69 65 64 20 62 79 20 61 20 64 61  entified by a da
1a8d0 74 61 62 61 73 65 20 6e 61 6d 65 2c 20 61 20 64  tabase name, a d
1a8e0 6f 74 2c 20 74 68 65 6e 20 74 68 65 20 74 61 62  ot, then the tab
1a8f0 6c 65 20 6e 61 6d 65 3a 20 49 44 2e 49 44 2e 0a  le name: ID.ID..
1a900 2a 2a 0a 2a 2a 20 54 68 65 20 6a 6f 69 6e 74 79  **.** The jointy
1a910 70 65 20 73 74 61 72 74 73 20 6f 75 74 20 73 68  pe starts out sh
1a920 6f 77 69 6e 67 20 74 68 65 20 6a 6f 69 6e 20 74  owing the join t
1a930 79 70 65 20 62 65 74 77 65 65 6e 20 74 68 65 20  ype between the 
1a940 63 75 72 72 65 6e 74 20 74 61 62 6c 65 0a 2a 2a  current table.**
1a950 20 61 6e 64 20 74 68 65 20 6e 65 78 74 20 74 61   and the next ta
1a960 62 6c 65 20 6f 6e 20 74 68 65 20 6c 69 73 74 2e  ble on the list.
1a970 20 20 54 68 65 20 70 61 72 73 65 72 20 62 75 69    The parser bui
1a980 6c 64 73 20 74 68 65 20 6c 69 73 74 20 74 68 69  lds the list thi
1a990 73 20 77 61 79 2e 0a 2a 2a 20 42 75 74 20 73 71  s way..** But sq
1a9a0 6c 69 74 65 33 53 72 63 4c 69 73 74 53 68 69 66  lite3SrcListShif
1a9b0 74 4a 6f 69 6e 54 79 70 65 28 29 20 6c 61 74 65  tJoinType() late
1a9c0 72 20 73 68 69 66 74 73 20 74 68 65 20 6a 6f 69  r shifts the joi
1a9d0 6e 74 79 70 65 73 20 73 6f 20 74 68 61 74 20 65  ntypes so that e
1a9e0 61 63 68 0a 2a 2a 20 6a 6f 69 6e 74 79 70 65 20  ach.** jointype 
1a9f0 65 78 70 72 65 73 73 65 73 20 74 68 65 20 6a 6f  expresses the jo
1aa00 69 6e 20 62 65 74 77 65 65 6e 20 74 68 65 20 74  in between the t
1aa10 61 62 6c 65 20 61 6e 64 20 74 68 65 20 70 72 65  able and the pre
1aa20 76 69 6f 75 73 20 74 61 62 6c 65 2e 0a 2a 2a 0a  vious table..**.
1aa30 2a 2a 20 49 6e 20 74 68 65 20 63 6f 6c 55 73 65  ** In the colUse
1aa40 64 20 66 69 65 6c 64 2c 20 74 68 65 20 68 69 67  d field, the hig
1aa50 68 2d 6f 72 64 65 72 20 62 69 74 20 28 62 69 74  h-order bit (bit
1aa60 20 36 33 29 20 69 73 20 73 65 74 20 69 66 20 74   63) is set if t
1aa70 68 65 20 74 61 62 6c 65 0a 2a 2a 20 63 6f 6e 74  he table.** cont
1aa80 61 69 6e 73 20 6d 6f 72 65 20 74 68 61 6e 20 36  ains more than 6
1aa90 33 20 63 6f 6c 75 6d 6e 73 20 61 6e 64 20 74 68  3 columns and th
1aaa0 65 20 36 34 2d 74 68 20 6f 72 20 6c 61 74 65 72  e 64-th or later
1aab0 20 63 6f 6c 75 6d 6e 20 69 73 20 75 73 65 64 2e   column is used.
1aac0 0a 2a 2f 0a 73 74 72 75 63 74 20 53 72 63 4c 69  .*/.struct SrcLi
1aad0 73 74 20 7b 0a 20 20 69 6e 74 20 6e 53 72 63 3b  st {.  int nSrc;
1aae0 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
1aaf0 72 20 6f 66 20 74 61 62 6c 65 73 20 6f 72 20 73  r of tables or s
1ab00 75 62 71 75 65 72 69 65 73 20 69 6e 20 74 68 65  ubqueries in the
1ab10 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 2a 2f 0a   FROM clause */.
1ab20 20 20 75 33 32 20 6e 41 6c 6c 6f 63 3b 20 20 20    u32 nAlloc;   
1ab30 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
1ab40 65 6e 74 72 69 65 73 20 61 6c 6c 6f 63 61 74 65  entries allocate
1ab50 64 20 69 6e 20 61 5b 5d 20 62 65 6c 6f 77 20 2a  d in a[] below *
1ab60 2f 0a 20 20 73 74 72 75 63 74 20 53 72 63 4c 69  /.  struct SrcLi
1ab70 73 74 5f 69 74 65 6d 20 7b 0a 20 20 20 20 53 63  st_item {.    Sc
1ab80 68 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20 20  hema *pSchema;  
1ab90 2f 2a 20 53 63 68 65 6d 61 20 74 6f 20 77 68 69  /* Schema to whi
1aba0 63 68 20 74 68 69 73 20 69 74 65 6d 20 69 73 20  ch this item is 
1abb0 66 69 78 65 64 20 2a 2f 0a 20 20 20 20 63 68 61  fixed */.    cha
1abc0 72 20 2a 7a 44 61 74 61 62 61 73 65 3b 20 20 2f  r *zDatabase;  /
1abd0 2a 20 4e 61 6d 65 20 6f 66 20 64 61 74 61 62 61  * Name of databa
1abe0 73 65 20 68 6f 6c 64 69 6e 67 20 74 68 69 73 20  se holding this 
1abf0 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20 63 68 61  table */.    cha
1ac00 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 2f  r *zName;      /
1ac10 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65 20 74 61  * Name of the ta
1ac20 62 6c 65 20 2a 2f 0a 20 20 20 20 63 68 61 72 20  ble */.    char 
1ac30 2a 7a 41 6c 69 61 73 3b 20 20 20 20 20 2f 2a 20  *zAlias;     /* 
1ac40 54 68 65 20 22 42 22 20 70 61 72 74 20 6f 66 20  The "B" part of 
1ac50 61 20 22 41 20 41 53 20 42 22 20 70 68 72 61 73  a "A AS B" phras
1ac60 65 2e 20 20 7a 4e 61 6d 65 20 69 73 20 74 68 65  e.  zName is the
1ac70 20 22 41 22 20 2a 2f 0a 20 20 20 20 54 61 62 6c   "A" */.    Tabl
1ac80 65 20 2a 70 54 61 62 3b 20 20 20 20 20 20 2f 2a  e *pTab;      /*
1ac90 20 41 6e 20 53 51 4c 20 74 61 62 6c 65 20 63 6f   An SQL table co
1aca0 72 72 65 73 70 6f 6e 64 69 6e 67 20 74 6f 20 7a  rresponding to z
1acb0 4e 61 6d 65 20 2a 2f 0a 20 20 20 20 53 65 6c 65  Name */.    Sele
1acc0 63 74 20 2a 70 53 65 6c 65 63 74 3b 20 20 2f 2a  ct *pSelect;  /*
1acd0 20 41 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d   A SELECT statem
1ace0 65 6e 74 20 75 73 65 64 20 69 6e 20 70 6c 61 63  ent used in plac
1acf0 65 20 6f 66 20 61 20 74 61 62 6c 65 20 6e 61 6d  e of a table nam
1ad00 65 20 2a 2f 0a 20 20 20 20 69 6e 74 20 61 64 64  e */.    int add
1ad10 72 46 69 6c 6c 53 75 62 3b 20 20 2f 2a 20 41 64  rFillSub;  /* Ad
1ad20 64 72 65 73 73 20 6f 66 20 73 75 62 72 6f 75 74  dress of subrout
1ad30 69 6e 65 20 74 6f 20 6d 61 6e 69 66 65 73 74 20  ine to manifest 
1ad40 61 20 73 75 62 71 75 65 72 79 20 2a 2f 0a 20 20  a subquery */.  
1ad50 20 20 69 6e 74 20 72 65 67 52 65 74 75 72 6e 3b    int regReturn;
1ad60 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20      /* Register 
1ad70 68 6f 6c 64 69 6e 67 20 72 65 74 75 72 6e 20 61  holding return a
1ad80 64 64 72 65 73 73 20 6f 66 20 61 64 64 72 46 69  ddress of addrFi
1ad90 6c 6c 53 75 62 20 2a 2f 0a 20 20 20 20 69 6e 74  llSub */.    int
1ada0 20 72 65 67 52 65 73 75 6c 74 3b 20 20 20 20 2f   regResult;    /
1adb0 2a 20 52 65 67 69 73 74 65 72 73 20 68 6f 6c 64  * Registers hold
1adc0 69 6e 67 20 72 65 73 75 6c 74 73 20 6f 66 20 61  ing results of a
1add0 20 63 6f 2d 72 6f 75 74 69 6e 65 20 2a 2f 0a 20   co-routine */. 
1ade0 20 20 20 73 74 72 75 63 74 20 7b 0a 20 20 20 20     struct {.    
1adf0 20 20 75 38 20 6a 6f 69 6e 74 79 70 65 3b 20 20    u8 jointype;  
1ae00 20 20 20 20 2f 2a 20 54 79 70 65 20 6f 66 20 6a      /* Type of j
1ae10 6f 69 6e 20 62 65 74 77 65 65 6e 20 74 68 69 73  oin between this
1ae20 20 74 61 62 6c 65 20 61 6e 64 20 74 68 65 20 70   table and the p
1ae30 72 65 76 69 6f 75 73 20 2a 2f 0a 20 20 20 20 20  revious */.     
1ae40 20 75 6e 73 69 67 6e 65 64 20 6e 6f 74 49 6e 64   unsigned notInd
1ae50 65 78 65 64 20 3a 31 3b 20 20 20 20 2f 2a 20 54  exed :1;    /* T
1ae60 72 75 65 20 69 66 20 74 68 65 72 65 20 69 73 20  rue if there is 
1ae70 61 20 4e 4f 54 20 49 4e 44 45 58 45 44 20 63 6c  a NOT INDEXED cl
1ae80 61 75 73 65 20 2a 2f 0a 20 20 20 20 20 20 75 6e  ause */.      un
1ae90 73 69 67 6e 65 64 20 69 73 49 6e 64 65 78 65 64  signed isIndexed
1aea0 42 79 20 3a 31 3b 20 20 20 2f 2a 20 54 72 75 65  By :1;   /* True
1aeb0 20 69 66 20 74 68 65 72 65 20 69 73 20 61 6e 20   if there is an 
1aec0 49 4e 44 45 58 45 44 20 42 59 20 63 6c 61 75 73  INDEXED BY claus
1aed0 65 20 2a 2f 0a 20 20 20 20 20 20 75 6e 73 69 67  e */.      unsig
1aee0 6e 65 64 20 69 73 54 61 62 46 75 6e 63 20 3a 31  ned isTabFunc :1
1aef0 3b 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66  ;     /* True if
1af00 20 74 61 62 6c 65 2d 76 61 6c 75 65 64 2d 66 75   table-valued-fu
1af10 6e 63 74 69 6f 6e 20 73 79 6e 74 61 78 20 2a 2f  nction syntax */
1af20 0a 20 20 20 20 20 20 75 6e 73 69 67 6e 65 64 20  .      unsigned 
1af30 69 73 43 6f 72 72 65 6c 61 74 65 64 20 3a 31 3b  isCorrelated :1;
1af40 20 20 2f 2a 20 54 72 75 65 20 69 66 20 73 75 62    /* True if sub
1af50 2d 71 75 65 72 79 20 69 73 20 63 6f 72 72 65 6c  -query is correl
1af60 61 74 65 64 20 2a 2f 0a 20 20 20 20 20 20 75 6e  ated */.      un
1af70 73 69 67 6e 65 64 20 76 69 61 43 6f 72 6f 75 74  signed viaCorout
1af80 69 6e 65 20 3a 31 3b 20 20 2f 2a 20 49 6d 70 6c  ine :1;  /* Impl
1af90 65 6d 65 6e 74 65 64 20 61 73 20 61 20 63 6f 2d  emented as a co-
1afa0 72 6f 75 74 69 6e 65 20 2a 2f 0a 20 20 20 20 20  routine */.     
1afb0 20 75 6e 73 69 67 6e 65 64 20 69 73 52 65 63 75   unsigned isRecu
1afc0 72 73 69 76 65 20 3a 31 3b 20 20 20 2f 2a 20 54  rsive :1;   /* T
1afd0 72 75 65 20 66 6f 72 20 72 65 63 75 72 73 69 76  rue for recursiv
1afe0 65 20 72 65 66 65 72 65 6e 63 65 20 69 6e 20 57  e reference in W
1aff0 49 54 48 20 2a 2f 0a 20 20 20 20 7d 20 66 67 3b  ITH */.    } fg;
1b000 0a 20 20 20 20 69 6e 74 20 69 43 75 72 73 6f 72  .    int iCursor
1b010 3b 20 20 20 20 20 20 2f 2a 20 54 68 65 20 56 44  ;      /* The VD
1b020 42 45 20 63 75 72 73 6f 72 20 6e 75 6d 62 65 72  BE cursor number
1b030 20 75 73 65 64 20 74 6f 20 61 63 63 65 73 73 20   used to access 
1b040 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20  this table */.  
1b050 20 20 45 78 70 72 20 2a 70 4f 6e 3b 20 20 20 20    Expr *pOn;    
1b060 20 20 20 20 2f 2a 20 54 68 65 20 4f 4e 20 63 6c      /* The ON cl
1b070 61 75 73 65 20 6f 66 20 61 20 6a 6f 69 6e 20 2a  ause of a join *
1b080 2f 0a 20 20 20 20 49 64 4c 69 73 74 20 2a 70 55  /.    IdList *pU
1b090 73 69 6e 67 3b 20 20 20 2f 2a 20 54 68 65 20 55  sing;   /* The U
1b0a0 53 49 4e 47 20 63 6c 61 75 73 65 20 6f 66 20 61  SING clause of a
1b0b0 20 6a 6f 69 6e 20 2a 2f 0a 20 20 20 20 42 69 74   join */.    Bit
1b0c0 6d 61 73 6b 20 63 6f 6c 55 73 65 64 3b 20 20 2f  mask colUsed;  /
1b0d0 2a 20 42 69 74 20 4e 20 28 31 3c 3c 4e 29 20 73  * Bit N (1<<N) s
1b0e0 65 74 20 69 66 20 63 6f 6c 75 6d 6e 20 4e 20 6f  et if column N o
1b0f0 66 20 70 54 61 62 20 69 73 20 75 73 65 64 20 2a  f pTab is used *
1b100 2f 0a 20 20 20 20 75 6e 69 6f 6e 20 7b 0a 20 20  /.    union {.  
1b110 20 20 20 20 63 68 61 72 20 2a 7a 49 6e 64 65 78      char *zIndex
1b120 65 64 42 79 3b 20 20 20 20 2f 2a 20 49 64 65 6e  edBy;    /* Iden
1b130 74 69 66 69 65 72 20 66 72 6f 6d 20 22 49 4e 44  tifier from "IND
1b140 45 58 45 44 20 42 59 20 3c 7a 49 6e 64 65 78 3e  EXED BY <zIndex>
1b150 22 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 20 20  " clause */.    
1b160 20 20 45 78 70 72 4c 69 73 74 20 2a 70 46 75 6e    ExprList *pFun
1b170 63 41 72 67 3b 20 20 2f 2a 20 41 72 67 75 6d 65  cArg;  /* Argume
1b180 6e 74 73 20 74 6f 20 74 61 62 6c 65 2d 76 61 6c  nts to table-val
1b190 75 65 64 2d 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a  ued-function */.
1b1a0 20 20 20 20 7d 20 75 31 3b 0a 20 20 20 20 49 6e      } u1;.    In
1b1b0 64 65 78 20 2a 70 49 42 49 6e 64 65 78 3b 20 20  dex *pIBIndex;  
1b1c0 2f 2a 20 49 6e 64 65 78 20 73 74 72 75 63 74 75  /* Index structu
1b1d0 72 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67  re corresponding
1b1e0 20 74 6f 20 75 31 2e 7a 49 6e 64 65 78 65 64 42   to u1.zIndexedB
1b1f0 79 20 2a 2f 0a 20 20 7d 20 61 5b 31 5d 3b 20 20  y */.  } a[1];  
1b200 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e             /* On
1b210 65 20 65 6e 74 72 79 20 66 6f 72 20 65 61 63 68  e entry for each
1b220 20 69 64 65 6e 74 69 66 69 65 72 20 6f 6e 20 74   identifier on t
1b230 68 65 20 6c 69 73 74 20 2a 2f 0a 7d 3b 0a 0a 2f  he list */.};../
1b240 2a 0a 2a 2a 20 50 65 72 6d 69 74 74 65 64 20 76  *.** Permitted v
1b250 61 6c 75 65 73 20 6f 66 20 74 68 65 20 53 72 63  alues of the Src
1b260 4c 69 73 74 2e 61 2e 6a 6f 69 6e 74 79 70 65 20  List.a.jointype 
1b270 66 69 65 6c 64 0a 2a 2f 0a 23 64 65 66 69 6e 65  field.*/.#define
1b280 20 4a 54 5f 49 4e 4e 45 52 20 20 20 20 20 30 78   JT_INNER     0x
1b290 30 30 30 31 20 20 20 20 2f 2a 20 41 6e 79 20 6b  0001    /* Any k
1b2a0 69 6e 64 20 6f 66 20 69 6e 6e 65 72 20 6f 72 20  ind of inner or 
1b2b0 63 72 6f 73 73 20 6a 6f 69 6e 20 2a 2f 0a 23 64  cross join */.#d
1b2c0 65 66 69 6e 65 20 4a 54 5f 43 52 4f 53 53 20 20  efine JT_CROSS  
1b2d0 20 20 20 30 78 30 30 30 32 20 20 20 20 2f 2a 20     0x0002    /* 
1b2e0 45 78 70 6c 69 63 69 74 20 75 73 65 20 6f 66 20  Explicit use of 
1b2f0 74 68 65 20 43 52 4f 53 53 20 6b 65 79 77 6f 72  the CROSS keywor
1b300 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f  d */.#define JT_
1b310 4e 41 54 55 52 41 4c 20 20 20 30 78 30 30 30 34  NATURAL   0x0004
1b320 20 20 20 20 2f 2a 20 54 72 75 65 20 66 6f 72 20      /* True for 
1b330 61 20 22 6e 61 74 75 72 61 6c 22 20 6a 6f 69 6e  a "natural" join
1b340 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f 4c   */.#define JT_L
1b350 45 46 54 20 20 20 20 20 20 30 78 30 30 30 38 20  EFT      0x0008 
1b360 20 20 20 2f 2a 20 4c 65 66 74 20 6f 75 74 65 72     /* Left outer
1b370 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66 69 6e 65   join */.#define
1b380 20 4a 54 5f 52 49 47 48 54 20 20 20 20 20 30 78   JT_RIGHT     0x
1b390 30 30 31 30 20 20 20 20 2f 2a 20 52 69 67 68 74  0010    /* Right
1b3a0 20 6f 75 74 65 72 20 6a 6f 69 6e 20 2a 2f 0a 23   outer join */.#
1b3b0 64 65 66 69 6e 65 20 4a 54 5f 4f 55 54 45 52 20  define JT_OUTER 
1b3c0 20 20 20 20 30 78 30 30 32 30 20 20 20 20 2f 2a      0x0020    /*
1b3d0 20 54 68 65 20 22 4f 55 54 45 52 22 20 6b 65 79   The "OUTER" key
1b3e0 77 6f 72 64 20 69 73 20 70 72 65 73 65 6e 74 20  word is present 
1b3f0 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f 45 52  */.#define JT_ER
1b400 52 4f 52 20 20 20 20 20 30 78 30 30 34 30 20 20  ROR     0x0040  
1b410 20 20 2f 2a 20 75 6e 6b 6e 6f 77 6e 20 6f 72 20    /* unknown or 
1b420 75 6e 73 75 70 70 6f 72 74 65 64 20 6a 6f 69 6e  unsupported join
1b430 20 74 79 70 65 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a   type */.../*.**
1b440 20 46 6c 61 67 73 20 61 70 70 72 6f 70 72 69 61   Flags appropria
1b450 74 65 20 66 6f 72 20 74 68 65 20 77 63 74 72 6c  te for the wctrl
1b460 46 6c 61 67 73 20 70 61 72 61 6d 65 74 65 72 20  Flags parameter 
1b470 6f 66 20 73 71 6c 69 74 65 33 57 68 65 72 65 42  of sqlite3WhereB
1b480 65 67 69 6e 28 29 0a 2a 2a 20 61 6e 64 20 74 68  egin().** and th
1b490 65 20 57 68 65 72 65 49 6e 66 6f 2e 77 63 74 72  e WhereInfo.wctr
1b4a0 6c 46 6c 61 67 73 20 6d 65 6d 62 65 72 2e 0a 2a  lFlags member..*
1b4b0 2a 0a 2a 2a 20 56 61 6c 75 65 20 63 6f 6e 73 74  *.** Value const
1b4c0 72 61 69 6e 74 73 20 28 65 6e 66 6f 72 63 65 64  raints (enforced
1b4d0 20 76 69 61 20 61 73 73 65 72 74 28 29 29 3a 0a   via assert()):.
1b4e0 2a 2a 20 20 20 20 20 57 48 45 52 45 5f 55 53 45  **     WHERE_USE
1b4f0 5f 4c 49 4d 49 54 20 20 3d 3d 20 53 46 5f 46 69  _LIMIT  == SF_Fi
1b500 78 65 64 4c 69 6d 69 74 0a 2a 2f 0a 23 64 65 66  xedLimit.*/.#def
1b510 69 6e 65 20 57 48 45 52 45 5f 4f 52 44 45 52 42  ine WHERE_ORDERB
1b520 59 5f 4e 4f 52 4d 41 4c 20 20 20 30 78 30 30 30  Y_NORMAL   0x000
1b530 30 20 2f 2a 20 4e 6f 2d 6f 70 20 2a 2f 0a 23 64  0 /* No-op */.#d
1b540 65 66 69 6e 65 20 57 48 45 52 45 5f 4f 52 44 45  efine WHERE_ORDE
1b550 52 42 59 5f 4d 49 4e 20 20 20 20 20 20 30 78 30  RBY_MIN      0x0
1b560 30 30 31 20 2f 2a 20 4f 52 44 45 52 20 42 59 20  001 /* ORDER BY 
1b570 70 72 6f 63 65 73 73 69 6e 67 20 66 6f 72 20 6d  processing for m
1b580 69 6e 28 29 20 66 75 6e 63 20 2a 2f 0a 23 64 65  in() func */.#de
1b590 66 69 6e 65 20 57 48 45 52 45 5f 4f 52 44 45 52  fine WHERE_ORDER
1b5a0 42 59 5f 4d 41 58 20 20 20 20 20 20 30 78 30 30  BY_MAX      0x00
1b5b0 30 32 20 2f 2a 20 4f 52 44 45 52 20 42 59 20 70  02 /* ORDER BY p
1b5c0 72 6f 63 65 73 73 69 6e 67 20 66 6f 72 20 6d 61  rocessing for ma
1b5d0 78 28 29 20 66 75 6e 63 20 2a 2f 0a 23 64 65 66  x() func */.#def
1b5e0 69 6e 65 20 57 48 45 52 45 5f 4f 4e 45 50 41 53  ine WHERE_ONEPAS
1b5f0 53 5f 44 45 53 49 52 45 44 20 20 30 78 30 30 30  S_DESIRED  0x000
1b600 34 20 2f 2a 20 57 61 6e 74 20 74 6f 20 64 6f 20  4 /* Want to do 
1b610 6f 6e 65 2d 70 61 73 73 20 55 50 44 41 54 45 2f  one-pass UPDATE/
1b620 44 45 4c 45 54 45 20 2a 2f 0a 23 64 65 66 69 6e  DELETE */.#defin
1b630 65 20 57 48 45 52 45 5f 4f 4e 45 50 41 53 53 5f  e WHERE_ONEPASS_
1b640 4d 55 4c 54 49 52 4f 57 20 30 78 30 30 30 38 20  MULTIROW 0x0008 
1b650 2f 2a 20 4f 4e 45 50 41 53 53 20 69 73 20 6f 6b  /* ONEPASS is ok
1b660 20 77 69 74 68 20 6d 75 6c 74 69 70 6c 65 20 72   with multiple r
1b670 6f 77 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57  ows */.#define W
1b680 48 45 52 45 5f 44 55 50 4c 49 43 41 54 45 53 5f  HERE_DUPLICATES_
1b690 4f 4b 20 20 20 20 30 78 30 30 31 30 20 2f 2a 20  OK    0x0010 /* 
1b6a0 4f 6b 20 74 6f 20 72 65 74 75 72 6e 20 61 20 72  Ok to return a r
1b6b0 6f 77 20 6d 6f 72 65 20 74 68 61 6e 20 6f 6e 63  ow more than onc
1b6c0 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45  e */.#define WHE
1b6d0 52 45 5f 4f 52 5f 53 55 42 43 4c 41 55 53 45 20  RE_OR_SUBCLAUSE 
1b6e0 20 20 20 20 30 78 30 30 32 30 20 2f 2a 20 50 72      0x0020 /* Pr
1b6f0 6f 63 65 73 73 69 6e 67 20 61 20 73 75 62 2d 57  ocessing a sub-W
1b700 48 45 52 45 20 61 73 20 70 61 72 74 20 6f 66 0a  HERE as part of.
1b710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b730 20 20 20 20 20 20 2a 2a 20 74 68 65 20 4f 52 20        ** the OR 
1b740 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 20 20 2a 2f  optimization  */
1b750 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 47  .#define WHERE_G
1b760 52 4f 55 50 42 59 20 20 20 20 20 20 20 20 20 20  ROUPBY          
1b770 30 78 30 30 34 30 20 2f 2a 20 70 4f 72 64 65 72  0x0040 /* pOrder
1b780 42 79 20 69 73 20 72 65 61 6c 6c 79 20 61 20 47  By is really a G
1b790 52 4f 55 50 20 42 59 20 2a 2f 0a 23 64 65 66 69  ROUP BY */.#defi
1b7a0 6e 65 20 57 48 45 52 45 5f 44 49 53 54 49 4e 43  ne WHERE_DISTINC
1b7b0 54 42 59 20 20 20 20 20 20 20 30 78 30 30 38 30  TBY       0x0080
1b7c0 20 2f 2a 20 70 4f 72 64 65 72 62 79 20 69 73 20   /* pOrderby is 
1b7d0 72 65 61 6c 6c 79 20 61 20 44 49 53 54 49 4e 43  really a DISTINC
1b7e0 54 20 63 6c 61 75 73 65 20 2a 2f 0a 23 64 65 66  T clause */.#def
1b7f0 69 6e 65 20 57 48 45 52 45 5f 57 41 4e 54 5f 44  ine WHERE_WANT_D
1b800 49 53 54 49 4e 43 54 20 20 20 20 30 78 30 31 30  ISTINCT    0x010
1b810 30 20 2f 2a 20 41 6c 6c 20 6f 75 74 70 75 74 20  0 /* All output 
1b820 6e 65 65 64 73 20 74 6f 20 62 65 20 64 69 73 74  needs to be dist
1b830 69 6e 63 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20  inct */.#define 
1b840 57 48 45 52 45 5f 53 4f 52 54 42 59 47 52 4f 55  WHERE_SORTBYGROU
1b850 50 20 20 20 20 20 20 30 78 30 32 30 30 20 2f 2a  P      0x0200 /*
1b860 20 53 75 70 70 6f 72 74 20 73 71 6c 69 74 65 33   Support sqlite3
1b870 57 68 65 72 65 49 73 53 6f 72 74 65 64 28 29 20  WhereIsSorted() 
1b880 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45  */.#define WHERE
1b890 5f 53 45 45 4b 5f 54 41 42 4c 45 20 20 20 20 20  _SEEK_TABLE     
1b8a0 20 20 30 78 30 34 30 30 20 2f 2a 20 44 6f 20 6e    0x0400 /* Do n
1b8b0 6f 74 20 64 65 66 65 72 20 73 65 65 6b 73 20 6f  ot defer seeks o
1b8c0 6e 20 6d 61 69 6e 20 74 61 62 6c 65 20 2a 2f 0a  n main table */.
1b8d0 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 4f 52  #define WHERE_OR
1b8e0 44 45 52 42 59 5f 4c 49 4d 49 54 20 20 20 20 30  DERBY_LIMIT    0
1b8f0 78 30 38 30 30 20 2f 2a 20 4f 52 44 45 52 42 59  x0800 /* ORDERBY
1b900 2b 4c 49 4d 49 54 20 6f 6e 20 74 68 65 20 69 6e  +LIMIT on the in
1b910 6e 65 72 20 6c 6f 6f 70 20 2a 2f 0a 23 64 65 66  ner loop */.#def
1b920 69 6e 65 20 57 48 45 52 45 5f 53 45 45 4b 5f 55  ine WHERE_SEEK_U
1b930 4e 49 51 5f 54 41 42 4c 45 20 20 30 78 31 30 30  NIQ_TABLE  0x100
1b940 30 20 2f 2a 20 44 6f 20 6e 6f 74 20 64 65 66 65  0 /* Do not defe
1b950 72 20 73 65 65 6b 73 20 69 66 20 75 6e 69 71 75  r seeks if uniqu
1b960 65 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20  e */.           
1b970 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1b980 20 20 20 20 30 78 32 30 30 30 20 20 20 20 6e 6f      0x2000    no
1b990 74 20 63 75 72 72 65 6e 74 6c 79 20 75 73 65 64  t currently used
1b9a0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52   */.#define WHER
1b9b0 45 5f 55 53 45 5f 4c 49 4d 49 54 20 20 20 20 20  E_USE_LIMIT     
1b9c0 20 20 20 30 78 34 30 30 30 20 2f 2a 20 55 73 65     0x4000 /* Use
1b9d0 20 74 68 65 20 4c 49 4d 49 54 20 69 6e 20 63 6f   the LIMIT in co
1b9e0 73 74 20 65 73 74 69 6d 61 74 65 73 20 2a 2f 0a  st estimates */.
1b9f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ba00 20 20 20 20 20 20 20 20 2f 2a 20 20 20 20 20 30          /*     0
1ba10 78 38 30 30 30 20 20 20 20 6e 6f 74 20 63 75 72  x8000    not cur
1ba20 72 65 6e 74 6c 79 20 75 73 65 64 20 2a 2f 0a 0a  rently used */..
1ba30 2f 2a 20 41 6c 6c 6f 77 65 64 20 72 65 74 75 72  /* Allowed retur
1ba40 6e 20 76 61 6c 75 65 73 20 66 72 6f 6d 20 73 71  n values from sq
1ba50 6c 69 74 65 33 57 68 65 72 65 49 73 44 69 73 74  lite3WhereIsDist
1ba60 69 6e 63 74 28 29 0a 2a 2f 0a 23 64 65 66 69 6e  inct().*/.#defin
1ba70 65 20 57 48 45 52 45 5f 44 49 53 54 49 4e 43 54  e WHERE_DISTINCT
1ba80 5f 4e 4f 4f 50 20 20 20 20 20 20 30 20 20 2f 2a  _NOOP      0  /*
1ba90 20 44 49 53 54 49 4e 43 54 20 6b 65 79 77 6f 72   DISTINCT keywor
1baa0 64 20 6e 6f 74 20 75 73 65 64 20 2a 2f 0a 23 64  d not used */.#d
1bab0 65 66 69 6e 65 20 57 48 45 52 45 5f 44 49 53 54  efine WHERE_DIST
1bac0 49 4e 43 54 5f 55 4e 49 51 55 45 20 20 20 20 31  INCT_UNIQUE    1
1bad0 20 20 2f 2a 20 4e 6f 20 64 75 70 6c 69 63 61 74    /* No duplicat
1bae0 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48  es */.#define WH
1baf0 45 52 45 5f 44 49 53 54 49 4e 43 54 5f 4f 52 44  ERE_DISTINCT_ORD
1bb00 45 52 45 44 20 20 20 32 20 20 2f 2a 20 41 6c 6c  ERED   2  /* All
1bb10 20 64 75 70 6c 69 63 61 74 65 73 20 61 72 65 20   duplicates are 
1bb20 61 64 6a 61 63 65 6e 74 20 2a 2f 0a 23 64 65 66  adjacent */.#def
1bb30 69 6e 65 20 57 48 45 52 45 5f 44 49 53 54 49 4e  ine WHERE_DISTIN
1bb40 43 54 5f 55 4e 4f 52 44 45 52 45 44 20 33 20 20  CT_UNORDERED 3  
1bb50 2f 2a 20 44 75 70 6c 69 63 61 74 65 73 20 61 72  /* Duplicates ar
1bb60 65 20 73 63 61 74 74 65 72 65 64 20 2a 2f 0a 0a  e scattered */..
1bb70 2f 2a 0a 2a 2a 20 41 20 4e 61 6d 65 43 6f 6e 74  /*.** A NameCont
1bb80 65 78 74 20 64 65 66 69 6e 65 73 20 61 20 63 6f  ext defines a co
1bb90 6e 74 65 78 74 20 69 6e 20 77 68 69 63 68 20 74  ntext in which t
1bba0 6f 20 72 65 73 6f 6c 76 65 20 74 61 62 6c 65 20  o resolve table 
1bbb0 61 6e 64 20 63 6f 6c 75 6d 6e 0a 2a 2a 20 6e 61  and column.** na
1bbc0 6d 65 73 2e 20 20 54 68 65 20 63 6f 6e 74 65 78  mes.  The contex
1bbd0 74 20 63 6f 6e 73 69 73 74 73 20 6f 66 20 61 20  t consists of a 
1bbe0 6c 69 73 74 20 6f 66 20 74 61 62 6c 65 73 20 28  list of tables (
1bbf0 74 68 65 20 70 53 72 63 4c 69 73 74 29 20 66 69  the pSrcList) fi
1bc00 65 6c 64 20 61 6e 64 0a 2a 2a 20 61 20 6c 69 73  eld and.** a lis
1bc10 74 20 6f 66 20 6e 61 6d 65 64 20 65 78 70 72 65  t of named expre
1bc20 73 73 69 6f 6e 20 28 70 45 4c 69 73 74 29 2e 20  ssion (pEList). 
1bc30 20 54 68 65 20 6e 61 6d 65 64 20 65 78 70 72 65   The named expre
1bc40 73 73 69 6f 6e 20 6c 69 73 74 20 6d 61 79 0a 2a  ssion list may.*
1bc50 2a 20 62 65 20 4e 55 4c 4c 2e 20 20 54 68 65 20  * be NULL.  The 
1bc60 70 53 72 63 20 63 6f 72 72 65 73 70 6f 6e 64 73  pSrc corresponds
1bc70 20 74 6f 20 74 68 65 20 46 52 4f 4d 20 63 6c 61   to the FROM cla
1bc80 75 73 65 20 6f 66 20 61 20 53 45 4c 45 43 54 20  use of a SELECT 
1bc90 6f 72 0a 2a 2a 20 74 6f 20 74 68 65 20 74 61 62  or.** to the tab
1bca0 6c 65 20 62 65 69 6e 67 20 6f 70 65 72 61 74 65  le being operate
1bcb0 64 20 6f 6e 20 62 79 20 49 4e 53 45 52 54 2c 20  d on by INSERT, 
1bcc0 55 50 44 41 54 45 2c 20 6f 72 20 44 45 4c 45 54  UPDATE, or DELET
1bcd0 45 2e 20 20 54 68 65 0a 2a 2a 20 70 45 4c 69 73  E.  The.** pELis
1bce0 74 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f  t corresponds to
1bcf0 20 74 68 65 20 72 65 73 75 6c 74 20 73 65 74 20   the result set 
1bd00 6f 66 20 61 20 53 45 4c 45 43 54 20 61 6e 64 20  of a SELECT and 
1bd10 69 73 20 4e 55 4c 4c 20 66 6f 72 0a 2a 2a 20 6f  is NULL for.** o
1bd20 74 68 65 72 20 73 74 61 74 65 6d 65 6e 74 73 2e  ther statements.
1bd30 0a 2a 2a 0a 2a 2a 20 4e 61 6d 65 43 6f 6e 74 65  .**.** NameConte
1bd40 78 74 73 20 63 61 6e 20 62 65 20 6e 65 73 74 65  xts can be neste
1bd50 64 2e 20 20 57 68 65 6e 20 72 65 73 6f 6c 76 69  d.  When resolvi
1bd60 6e 67 20 6e 61 6d 65 73 2c 20 74 68 65 20 69 6e  ng names, the in
1bd70 6e 65 72 2d 6d 6f 73 74 0a 2a 2a 20 63 6f 6e 74  ner-most.** cont
1bd80 65 78 74 20 69 73 20 73 65 61 72 63 68 65 64 20  ext is searched 
1bd90 66 69 72 73 74 2e 20 20 49 66 20 6e 6f 20 6d 61  first.  If no ma
1bda0 74 63 68 20 69 73 20 66 6f 75 6e 64 2c 20 74 68  tch is found, th
1bdb0 65 20 6e 65 78 74 20 6f 75 74 65 72 0a 2a 2a 20  e next outer.** 
1bdc0 63 6f 6e 74 65 78 74 20 69 73 20 63 68 65 63 6b  context is check
1bdd0 65 64 2e 20 20 49 66 20 74 68 65 72 65 20 69 73  ed.  If there is
1bde0 20 73 74 69 6c 6c 20 6e 6f 20 6d 61 74 63 68 2c   still no match,
1bdf0 20 74 68 65 20 6e 65 78 74 20 63 6f 6e 74 65 78   the next contex
1be00 74 0a 2a 2a 20 69 73 20 63 68 65 63 6b 65 64 2e  t.** is checked.
1be10 20 20 54 68 69 73 20 70 72 6f 63 65 73 73 20 63    This process c
1be20 6f 6e 74 69 6e 75 65 73 20 75 6e 74 69 6c 20 65  ontinues until e
1be30 69 74 68 65 72 20 61 20 6d 61 74 63 68 20 69 73  ither a match is
1be40 20 66 6f 75 6e 64 0a 2a 2a 20 6f 72 20 61 6c 6c   found.** or all
1be50 20 63 6f 6e 74 65 78 74 73 20 61 72 65 20 63 68   contexts are ch
1be60 65 63 6b 2e 20 20 57 68 65 6e 20 61 20 6d 61 74  eck.  When a mat
1be70 63 68 20 69 73 20 66 6f 75 6e 64 2c 20 74 68 65  ch is found, the
1be80 20 6e 52 65 66 20 6d 65 6d 62 65 72 20 6f 66 0a   nRef member of.
1be90 2a 2a 20 74 68 65 20 63 6f 6e 74 65 78 74 20 63  ** the context c
1bea0 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 6d 61  ontaining the ma
1beb0 74 63 68 20 69 73 20 69 6e 63 72 65 6d 65 6e 74  tch is increment
1bec0 65 64 2e 0a 2a 2a 0a 2a 2a 20 45 61 63 68 20 73  ed..**.** Each s
1bed0 75 62 71 75 65 72 79 20 67 65 74 73 20 61 20 6e  ubquery gets a n
1bee0 65 77 20 4e 61 6d 65 43 6f 6e 74 65 78 74 2e 20  ew NameContext. 
1bef0 20 54 68 65 20 70 4e 65 78 74 20 66 69 65 6c 64   The pNext field
1bf00 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 0a 2a   points to the.*
1bf10 2a 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20 69 6e  * NameContext in
1bf20 20 74 68 65 20 70 61 72 65 6e 74 20 71 75 65 72   the parent quer
1bf30 79 2e 20 20 54 68 75 73 20 74 68 65 20 70 72 6f  y.  Thus the pro
1bf40 63 65 73 73 20 6f 66 20 73 63 61 6e 6e 69 6e 67  cess of scanning
1bf50 20 74 68 65 0a 2a 2a 20 4e 61 6d 65 43 6f 6e 74   the.** NameCont
1bf60 65 78 74 20 6c 69 73 74 20 63 6f 72 72 65 73 70  ext list corresp
1bf70 6f 6e 64 73 20 74 6f 20 73 65 61 72 63 68 69 6e  onds to searchin
1bf80 67 20 74 68 72 6f 75 67 68 20 73 75 63 63 65 73  g through succes
1bf90 73 69 76 65 6c 79 20 6f 75 74 65 72 0a 2a 2a 20  sively outer.** 
1bfa0 73 75 62 71 75 65 72 69 65 73 20 6c 6f 6f 6b 69  subqueries looki
1bfb0 6e 67 20 66 6f 72 20 61 20 6d 61 74 63 68 2e 0a  ng for a match..
1bfc0 2a 2f 0a 73 74 72 75 63 74 20 4e 61 6d 65 43 6f  */.struct NameCo
1bfd0 6e 74 65 78 74 20 7b 0a 20 20 50 61 72 73 65 20  ntext {.  Parse 
1bfe0 2a 70 50 61 72 73 65 3b 20 20 20 20 20 20 20 2f  *pParse;       /
1bff0 2a 20 54 68 65 20 70 61 72 73 65 72 20 2a 2f 0a  * The parser */.
1c000 20 20 53 72 63 4c 69 73 74 20 2a 70 53 72 63 4c    SrcList *pSrcL
1c010 69 73 74 3b 20 20 20 2f 2a 20 4f 6e 65 20 6f 72  ist;   /* One or
1c020 20 6d 6f 72 65 20 74 61 62 6c 65 73 20 75 73 65   more tables use
1c030 64 20 74 6f 20 72 65 73 6f 6c 76 65 20 6e 61 6d  d to resolve nam
1c040 65 73 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b 0a  es */.  union {.
1c050 20 20 20 20 45 78 70 72 4c 69 73 74 20 2a 70 45      ExprList *pE
1c060 4c 69 73 74 3b 20 20 20 20 2f 2a 20 4f 70 74 69  List;    /* Opti
1c070 6f 6e 61 6c 20 6c 69 73 74 20 6f 66 20 72 65 73  onal list of res
1c080 75 6c 74 2d 73 65 74 20 63 6f 6c 75 6d 6e 73 20  ult-set columns 
1c090 2a 2f 0a 20 20 20 20 41 67 67 49 6e 66 6f 20 2a  */.    AggInfo *
1c0a0 70 41 67 67 49 6e 66 6f 3b 20 20 20 2f 2a 20 49  pAggInfo;   /* I
1c0b0 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74  nformation about
1c0c0 20 61 67 67 72 65 67 61 74 65 73 20 61 74 20 74   aggregates at t
1c0d0 68 69 73 20 6c 65 76 65 6c 20 2a 2f 0a 20 20 20  his level */.   
1c0e0 20 55 70 73 65 72 74 20 2a 70 55 70 73 65 72 74   Upsert *pUpsert
1c0f0 3b 20 20 20 20 20 2f 2a 20 4f 4e 20 43 4f 4e 46  ;     /* ON CONF
1c100 4c 49 43 54 20 63 6c 61 75 73 65 20 69 6e 66 6f  LICT clause info
1c110 72 6d 61 74 69 6f 6e 20 66 72 6f 6d 20 61 6e 20  rmation from an 
1c120 75 70 73 65 72 74 20 2a 2f 0a 20 20 7d 20 75 4e  upsert */.  } uN
1c130 43 3b 0a 20 20 4e 61 6d 65 43 6f 6e 74 65 78 74  C;.  NameContext
1c140 20 2a 70 4e 65 78 74 3b 20 20 2f 2a 20 4e 65 78   *pNext;  /* Nex
1c150 74 20 6f 75 74 65 72 20 6e 61 6d 65 20 63 6f 6e  t outer name con
1c160 74 65 78 74 2e 20 20 4e 55 4c 4c 20 66 6f 72 20  text.  NULL for 
1c170 6f 75 74 65 72 6d 6f 73 74 20 2a 2f 0a 20 20 69  outermost */.  i
1c180 6e 74 20 6e 52 65 66 3b 20 20 20 20 20 20 20 20  nt nRef;        
1c190 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
1c1a0 20 6e 61 6d 65 73 20 72 65 73 6f 6c 76 65 64 20   names resolved 
1c1b0 62 79 20 74 68 69 73 20 63 6f 6e 74 65 78 74 20  by this context 
1c1c0 2a 2f 0a 20 20 69 6e 74 20 6e 45 72 72 3b 20 20  */.  int nErr;  
1c1d0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
1c1e0 62 65 72 20 6f 66 20 65 72 72 6f 72 73 20 65 6e  ber of errors en
1c1f0 63 6f 75 6e 74 65 72 65 64 20 77 68 69 6c 65 20  countered while 
1c200 72 65 73 6f 6c 76 69 6e 67 20 6e 61 6d 65 73 20  resolving names 
1c210 2a 2f 0a 20 20 75 31 36 20 6e 63 46 6c 61 67 73  */.  u16 ncFlags
1c220 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 5a 65 72  ;         /* Zer
1c230 6f 20 6f 72 20 6d 6f 72 65 20 4e 43 5f 2a 20 66  o or more NC_* f
1c240 6c 61 67 73 20 64 65 66 69 6e 65 64 20 62 65 6c  lags defined bel
1c250 6f 77 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  ow */.};../*.** 
1c260 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20 66  Allowed values f
1c270 6f 72 20 74 68 65 20 4e 61 6d 65 43 6f 6e 74 65  or the NameConte
1c280 78 74 2c 20 6e 63 46 6c 61 67 73 20 66 69 65 6c  xt, ncFlags fiel
1c290 64 2e 0a 2a 2a 0a 2a 2a 20 56 61 6c 75 65 20 63  d..**.** Value c
1c2a0 6f 6e 73 74 72 61 69 6e 74 73 20 28 61 6c 6c 20  onstraints (all 
1c2b0 63 68 65 63 6b 65 64 20 76 69 61 20 61 73 73 65  checked via asse
1c2c0 72 74 28 29 29 3a 0a 2a 2a 20 20 20 20 4e 43 5f  rt()):.**    NC_
1c2d0 48 61 73 41 67 67 20 20 20 20 3d 3d 20 53 46 5f  HasAgg    == SF_
1c2e0 48 61 73 41 67 67 0a 2a 2a 20 20 20 20 4e 43 5f  HasAgg.**    NC_
1c2f0 4d 69 6e 4d 61 78 41 67 67 20 3d 3d 20 53 46 5f  MinMaxAgg == SF_
1c300 4d 69 6e 4d 61 78 41 67 67 20 3d 3d 20 53 51 4c  MinMaxAgg == SQL
1c310 49 54 45 5f 46 55 4e 43 5f 4d 49 4e 4d 41 58 0a  ITE_FUNC_MINMAX.
1c320 2a 2a 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43  **.*/.#define NC
1c330 5f 41 6c 6c 6f 77 41 67 67 20 20 30 78 30 30 30  _AllowAgg  0x000
1c340 31 20 20 2f 2a 20 41 67 67 72 65 67 61 74 65 20  1  /* Aggregate 
1c350 66 75 6e 63 74 69 6f 6e 73 20 61 72 65 20 61 6c  functions are al
1c360 6c 6f 77 65 64 20 68 65 72 65 20 2a 2f 0a 23 64  lowed here */.#d
1c370 65 66 69 6e 65 20 4e 43 5f 50 61 72 74 49 64 78  efine NC_PartIdx
1c380 20 20 20 30 78 30 30 30 32 20 20 2f 2a 20 54 72     0x0002  /* Tr
1c390 75 65 20 69 66 20 72 65 73 6f 6c 76 69 6e 67 20  ue if resolving 
1c3a0 61 20 70 61 72 74 69 61 6c 20 69 6e 64 65 78 20  a partial index 
1c3b0 57 48 45 52 45 20 2a 2f 0a 23 64 65 66 69 6e 65  WHERE */.#define
1c3c0 20 4e 43 5f 49 73 43 68 65 63 6b 20 20 20 30 78   NC_IsCheck   0x
1c3d0 30 30 30 34 20 20 2f 2a 20 54 72 75 65 20 69 66  0004  /* True if
1c3e0 20 72 65 73 6f 6c 76 69 6e 67 20 6e 61 6d 65 73   resolving names
1c3f0 20 69 6e 20 61 20 43 48 45 43 4b 20 63 6f 6e 73   in a CHECK cons
1c400 74 72 61 69 6e 74 20 2a 2f 0a 23 64 65 66 69 6e  traint */.#defin
1c410 65 20 4e 43 5f 49 6e 41 67 67 46 75 6e 63 20 30  e NC_InAggFunc 0
1c420 78 30 30 30 38 20 20 2f 2a 20 54 72 75 65 20 69  x0008  /* True i
1c430 66 20 61 6e 61 6c 79 7a 69 6e 67 20 61 72 67 75  f analyzing argu
1c440 6d 65 6e 74 73 20 74 6f 20 61 6e 20 61 67 67 20  ments to an agg 
1c450 66 75 6e 63 20 2a 2f 0a 23 64 65 66 69 6e 65 20  func */.#define 
1c460 4e 43 5f 48 61 73 41 67 67 20 20 20 20 30 78 30  NC_HasAgg    0x0
1c470 30 31 30 20 20 2f 2a 20 4f 6e 65 20 6f 72 20 6d  010  /* One or m
1c480 6f 72 65 20 61 67 67 72 65 67 61 74 65 20 66 75  ore aggregate fu
1c490 6e 63 74 69 6f 6e 73 20 73 65 65 6e 20 2a 2f 0a  nctions seen */.
1c4a0 23 64 65 66 69 6e 65 20 4e 43 5f 49 64 78 45 78  #define NC_IdxEx
1c4b0 70 72 20 20 20 30 78 30 30 32 30 20 20 2f 2a 20  pr   0x0020  /* 
1c4c0 54 72 75 65 20 69 66 20 72 65 73 6f 6c 76 69 6e  True if resolvin
1c4d0 67 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 43 52 45  g columns of CRE
1c4e0 41 54 45 20 49 4e 44 45 58 20 2a 2f 0a 23 64 65  ATE INDEX */.#de
1c4f0 66 69 6e 65 20 4e 43 5f 56 61 72 53 65 6c 65 63  fine NC_VarSelec
1c500 74 20 30 78 30 30 34 30 20 20 2f 2a 20 41 20 63  t 0x0040  /* A c
1c510 6f 72 72 65 6c 61 74 65 64 20 73 75 62 71 75 65  orrelated subque
1c520 72 79 20 68 61 73 20 62 65 65 6e 20 73 65 65 6e  ry has been seen
1c530 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 55   */.#define NC_U
1c540 45 4c 69 73 74 20 20 20 20 30 78 30 30 38 30 20  EList    0x0080 
1c550 20 2f 2a 20 54 72 75 65 20 69 66 20 75 4e 43 2e   /* True if uNC.
1c560 70 45 4c 69 73 74 20 69 73 20 75 73 65 64 20 2a  pEList is used *
1c570 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 55 41 67  /.#define NC_UAg
1c580 67 49 6e 66 6f 20 20 30 78 30 31 30 30 20 20 2f  gInfo  0x0100  /
1c590 2a 20 54 72 75 65 20 69 66 20 75 4e 43 2e 70 41  * True if uNC.pA
1c5a0 67 67 49 6e 66 6f 20 69 73 20 75 73 65 64 20 2a  ggInfo is used *
1c5b0 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 55 55 70  /.#define NC_UUp
1c5c0 73 65 72 74 20 20 20 30 78 30 32 30 30 20 20 2f  sert   0x0200  /
1c5d0 2a 20 54 72 75 65 20 69 66 20 75 4e 43 2e 70 55  * True if uNC.pU
1c5e0 70 73 65 72 74 20 69 73 20 75 73 65 64 20 2a 2f  psert is used */
1c5f0 0a 23 64 65 66 69 6e 65 20 4e 43 5f 4d 69 6e 4d  .#define NC_MinM
1c600 61 78 41 67 67 20 30 78 31 30 30 30 20 20 2f 2a  axAgg 0x1000  /*
1c610 20 6d 69 6e 2f 6d 61 78 20 61 67 67 72 65 67 61   min/max aggrega
1c620 74 65 73 20 73 65 65 6e 2e 20 20 53 65 65 20 6e  tes seen.  See n
1c630 6f 74 65 20 61 62 6f 76 65 20 2a 2f 0a 23 64 65  ote above */.#de
1c640 66 69 6e 65 20 4e 43 5f 43 6f 6d 70 6c 65 78 20  fine NC_Complex 
1c650 20 20 30 78 32 30 30 30 20 20 2f 2a 20 54 72 75    0x2000  /* Tru
1c660 65 20 69 66 20 61 20 66 75 6e 63 74 69 6f 6e 20  e if a function 
1c670 6f 72 20 73 75 62 71 75 65 72 79 20 73 65 65 6e  or subquery seen
1c680 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e   */../*.** An in
1c690 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f  stance of the fo
1c6a0 6c 6c 6f 77 69 6e 67 20 6f 62 6a 65 63 74 20 64  llowing object d
1c6b0 65 73 63 72 69 62 65 73 20 61 20 73 69 6e 67 6c  escribes a singl
1c6c0 65 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 0a 2a 2a  e ON CONFLICT.**
1c6d0 20 63 6c 61 75 73 65 20 69 6e 20 61 6e 20 75 70   clause in an up
1c6e0 73 65 72 74 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  sert..**.** The 
1c6f0 70 55 70 73 65 72 74 54 61 72 67 65 74 20 66 69  pUpsertTarget fi
1c700 65 6c 64 20 69 73 20 6f 6e 6c 79 20 73 65 74 20  eld is only set 
1c710 69 66 20 74 68 65 20 4f 4e 20 43 4f 4e 46 4c 49  if the ON CONFLI
1c720 43 54 20 63 6c 61 75 73 65 20 69 6e 63 6c 75 64  CT clause includ
1c730 65 73 0a 2a 2a 20 63 6f 6e 66 6c 69 63 74 2d 74  es.** conflict-t
1c740 61 72 67 65 74 20 63 6c 61 75 73 65 2e 20 20 28  arget clause.  (
1c750 49 6e 20 22 4f 4e 20 43 4f 4e 46 4c 49 43 54 28  In "ON CONFLICT(
1c760 61 2c 62 29 22 20 74 68 65 20 22 28 61 2c 62 29  a,b)" the "(a,b)
1c770 22 20 69 73 20 74 68 65 0a 2a 2a 20 63 6f 6e 66  " is the.** conf
1c780 6c 69 63 74 2d 74 61 72 67 65 74 20 63 6c 61 75  lict-target clau
1c790 73 65 2e 29 20 20 54 68 65 20 70 55 70 73 65 72  se.)  The pUpser
1c7a0 74 54 61 72 67 65 74 57 68 65 72 65 20 69 73 20  tTargetWhere is 
1c7b0 74 68 65 20 6f 70 74 69 6f 6e 61 6c 0a 2a 2a 20  the optional.** 
1c7c0 57 48 45 52 45 20 63 6c 61 75 73 65 20 75 73 65  WHERE clause use
1c7d0 64 20 74 6f 20 69 64 65 6e 74 69 66 79 20 70 61  d to identify pa
1c7e0 72 74 69 61 6c 20 75 6e 69 71 75 65 20 69 6e 64  rtial unique ind
1c7f0 65 78 65 73 2e 0a 2a 2a 0a 2a 2a 20 70 55 70 73  exes..**.** pUps
1c800 65 72 74 53 65 74 20 69 73 20 74 68 65 20 6c 69  ertSet is the li
1c810 73 74 20 6f 66 20 63 6f 6c 75 6d 6e 3d 65 78 70  st of column=exp
1c820 72 20 74 65 72 6d 73 20 6f 66 20 74 68 65 20 55  r terms of the U
1c830 50 44 41 54 45 20 73 74 61 74 65 6d 65 6e 74 2e  PDATE statement.
1c840 20 0a 2a 2a 20 54 68 65 20 70 55 70 73 65 72 74   .** The pUpsert
1c850 53 65 74 20 66 69 65 6c 64 20 69 73 20 4e 55 4c  Set field is NUL
1c860 4c 20 66 6f 72 20 61 20 4f 4e 20 43 4f 4e 46 4c  L for a ON CONFL
1c870 49 43 54 20 44 4f 20 4e 4f 54 48 49 4e 47 2e 20  ICT DO NOTHING. 
1c880 20 54 68 65 0a 2a 2a 20 70 55 70 73 65 72 74 57   The.** pUpsertW
1c890 68 65 72 65 20 69 73 20 74 68 65 20 57 48 45 52  here is the WHER
1c8a0 45 20 63 6c 61 75 73 65 20 66 6f 72 20 74 68 65  E clause for the
1c8b0 20 55 50 44 41 54 45 20 61 6e 64 20 69 73 20 4e   UPDATE and is N
1c8c0 55 4c 4c 20 69 66 20 74 68 65 0a 2a 2a 20 57 48  ULL if the.** WH
1c8d0 45 52 45 20 63 6c 61 75 73 65 20 69 73 20 6f 6d  ERE clause is om
1c8e0 69 74 74 65 64 2e 0a 2a 2f 0a 73 74 72 75 63 74  itted..*/.struct
1c8f0 20 55 70 73 65 72 74 20 7b 0a 20 20 45 78 70 72   Upsert {.  Expr
1c900 4c 69 73 74 20 2a 70 55 70 73 65 72 74 54 61 72  List *pUpsertTar
1c910 67 65 74 3b 20 20 2f 2a 20 4f 70 74 69 6f 6e 61  get;  /* Optiona
1c920 6c 20 64 65 73 63 72 69 70 74 69 6f 6e 20 6f 66  l description of
1c930 20 63 6f 6e 66 6c 69 63 74 69 6e 67 20 69 6e 64   conflicting ind
1c940 65 78 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 55  ex */.  Expr *pU
1c950 70 73 65 72 74 54 61 72 67 65 74 57 68 65 72 65  psertTargetWhere
1c960 3b 20 2f 2a 20 57 48 45 52 45 20 63 6c 61 75 73  ; /* WHERE claus
1c970 65 20 66 6f 72 20 70 61 72 74 69 61 6c 20 69 6e  e for partial in
1c980 64 65 78 20 74 61 72 67 65 74 73 20 2a 2f 0a 20  dex targets */. 
1c990 20 45 78 70 72 4c 69 73 74 20 2a 70 55 70 73 65   ExprList *pUpse
1c9a0 72 74 53 65 74 3b 20 20 20 20 20 2f 2a 20 54 68  rtSet;     /* Th
1c9b0 65 20 53 45 54 20 63 6c 61 75 73 65 20 66 72 6f  e SET clause fro
1c9c0 6d 20 61 6e 20 4f 4e 20 43 4f 4e 46 4c 49 43 54  m an ON CONFLICT
1c9d0 20 55 50 44 41 54 45 20 2a 2f 0a 20 20 45 78 70   UPDATE */.  Exp
1c9e0 72 20 2a 70 55 70 73 65 72 74 57 68 65 72 65 3b  r *pUpsertWhere;
1c9f0 20 20 20 20 20 20 20 2f 2a 20 57 48 45 52 45 20         /* WHERE 
1ca00 63 6c 61 75 73 65 20 66 6f 72 20 74 68 65 20 4f  clause for the O
1ca10 4e 20 43 4f 4e 46 4c 49 43 54 20 55 50 44 41 54  N CONFLICT UPDAT
1ca20 45 20 2a 2f 0a 20 20 2f 2a 20 54 68 65 20 66 69  E */.  /* The fi
1ca30 65 6c 64 73 20 61 62 6f 76 65 20 63 6f 6d 70 72  elds above compr
1ca40 69 73 65 20 74 68 65 20 70 61 72 73 65 20 74 72  ise the parse tr
1ca50 65 65 20 66 6f 72 20 74 68 65 20 75 70 73 65 72  ee for the upser
1ca60 74 20 63 6c 61 75 73 65 2e 0a 20 20 2a 2a 20 54  t clause..  ** T
1ca70 68 65 20 66 69 65 6c 64 73 20 62 65 6c 6f 77 20  he fields below 
1ca80 61 72 65 20 75 73 65 64 20 74 6f 20 74 72 61 6e  are used to tran
1ca90 73 66 65 72 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  sfer information
1caa0 20 66 72 6f 6d 20 74 68 65 20 49 4e 53 45 52 54   from the INSERT
1cab0 0a 20 20 2a 2a 20 70 72 6f 63 65 73 73 69 6e 67  .  ** processing
1cac0 20 64 6f 77 6e 20 69 6e 74 6f 20 74 68 65 20 55   down into the U
1cad0 50 44 41 54 45 20 70 72 6f 63 65 73 73 69 6e 67  PDATE processing
1cae0 20 77 68 69 6c 65 20 67 65 6e 65 72 61 74 69 6e   while generatin
1caf0 67 20 63 6f 64 65 2e 0a 20 20 2a 2a 20 55 70 73  g code..  ** Ups
1cb00 65 72 74 20 6f 77 6e 73 20 74 68 65 20 6d 65 6d  ert owns the mem
1cb10 6f 72 79 20 61 6c 6c 6f 63 61 74 65 64 20 61 62  ory allocated ab
1cb20 6f 76 65 2c 20 62 75 74 20 6e 6f 74 20 74 68 65  ove, but not the
1cb30 20 6d 65 6d 6f 72 79 20 62 65 6c 6f 77 2e 20 2a   memory below. *
1cb40 2f 0a 20 20 49 6e 64 65 78 20 2a 70 55 70 73 65  /.  Index *pUpse
1cb50 72 74 49 64 78 3b 20 20 20 20 20 20 20 20 2f 2a  rtIdx;        /*
1cb60 20 43 6f 6e 73 74 72 61 69 6e 74 20 74 68 61 74   Constraint that
1cb70 20 70 55 70 73 65 72 74 54 61 72 67 65 74 20 69   pUpsertTarget i
1cb80 64 65 6e 74 69 66 69 65 73 20 2a 2f 0a 20 20 53  dentifies */.  S
1cb90 72 63 4c 69 73 74 20 2a 70 55 70 73 65 72 74 53  rcList *pUpsertS
1cba0 72 63 3b 20 20 20 20 20 20 2f 2a 20 54 61 62 6c  rc;      /* Tabl
1cbb0 65 20 74 6f 20 62 65 20 75 70 64 61 74 65 64 20  e to be updated 
1cbc0 2a 2f 0a 20 20 69 6e 74 20 72 65 67 44 61 74 61  */.  int regData
1cbd0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
1cbe0 2a 20 46 69 72 73 74 20 72 65 67 69 73 74 65 72  * First register
1cbf0 20 68 6f 6c 64 69 6e 67 20 61 72 72 61 79 20 6f   holding array o
1cc00 66 20 56 41 4c 55 45 53 20 2a 2f 0a 20 20 69 6e  f VALUES */.  in
1cc10 74 20 69 44 61 74 61 43 75 72 3b 20 20 20 20 20  t iDataCur;     
1cc20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 64 65 78          /* Index
1cc30 20 6f 66 20 74 68 65 20 64 61 74 61 20 63 75 72   of the data cur
1cc40 73 6f 72 20 2a 2f 0a 20 20 69 6e 74 20 69 49 64  sor */.  int iId
1cc50 78 43 75 72 3b 20 20 20 20 20 20 20 20 20 20 20  xCur;           
1cc60 20 20 20 2f 2a 20 49 6e 64 65 78 20 6f 66 20 74     /* Index of t
1cc70 68 65 20 66 69 72 73 74 20 69 6e 64 65 78 20 63  he first index c
1cc80 75 72 73 6f 72 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a  ursor */.};../*.
1cc90 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f  ** An instance o
1cca0 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  f the following 
1ccb0 73 74 72 75 63 74 75 72 65 20 63 6f 6e 74 61 69  structure contai
1ccc0 6e 73 20 61 6c 6c 20 69 6e 66 6f 72 6d 61 74 69  ns all informati
1ccd0 6f 6e 0a 2a 2a 20 6e 65 65 64 65 64 20 74 6f 20  on.** needed to 
1cce0 67 65 6e 65 72 61 74 65 20 63 6f 64 65 20 66 6f  generate code fo
1ccf0 72 20 61 20 73 69 6e 67 6c 65 20 53 45 4c 45 43  r a single SELEC
1cd00 54 20 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2a 0a  T statement..**.
1cd10 2a 2a 20 53 65 65 20 74 68 65 20 68 65 61 64 65  ** See the heade
1cd20 72 20 63 6f 6d 6d 65 6e 74 20 6f 6e 20 74 68 65  r comment on the
1cd30 20 63 6f 6d 70 75 74 65 4c 69 6d 69 74 52 65 67   computeLimitReg
1cd40 69 73 74 65 72 73 28 29 20 72 6f 75 74 69 6e 65  isters() routine
1cd50 20 66 6f 72 20 61 0a 2a 2a 20 64 65 74 61 69 6c   for a.** detail
1cd60 65 64 20 64 65 73 63 72 69 70 74 69 6f 6e 20 6f  ed description o
1cd70 66 20 74 68 65 20 6d 65 61 6e 69 6e 67 20 6f 66  f the meaning of
1cd80 20 74 68 65 20 69 4c 69 6d 69 74 20 61 6e 64 20   the iLimit and 
1cd90 69 4f 66 66 73 65 74 20 66 69 65 6c 64 73 2e 0a  iOffset fields..
1cda0 2a 2a 0a 2a 2a 20 61 64 64 72 4f 70 65 6e 45 70  **.** addrOpenEp
1cdb0 68 6d 5b 5d 20 65 6e 74 72 69 65 73 20 63 6f 6e  hm[] entries con
1cdc0 74 61 69 6e 20 74 68 65 20 61 64 64 72 65 73 73  tain the address
1cdd0 20 6f 66 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d   of OP_OpenEphem
1cde0 65 72 61 6c 20 6f 70 63 6f 64 65 73 2e 0a 2a 2a  eral opcodes..**
1cdf0 20 54 68 65 73 65 20 61 64 64 72 65 73 73 65 73   These addresses
1ce00 20 6d 75 73 74 20 62 65 20 73 74 6f 72 65 64 20   must be stored 
1ce10 73 6f 20 74 68 61 74 20 77 65 20 63 61 6e 20 67  so that we can g
1ce20 6f 20 62 61 63 6b 20 61 6e 64 20 66 69 6c 6c 20  o back and fill 
1ce30 69 6e 0a 2a 2a 20 74 68 65 20 50 34 5f 4b 45 59  in.** the P4_KEY
1ce40 49 4e 46 4f 20 61 6e 64 20 50 32 20 70 61 72 61  INFO and P2 para
1ce50 6d 65 74 65 72 73 20 6c 61 74 65 72 2e 20 20 4e  meters later.  N
1ce60 65 69 74 68 65 72 20 74 68 65 20 4b 65 79 49 6e  either the KeyIn
1ce70 66 6f 20 6e 6f 72 0a 2a 2a 20 74 68 65 20 6e 75  fo nor.** the nu
1ce80 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20  mber of columns 
1ce90 69 6e 20 50 32 20 63 61 6e 20 62 65 20 63 6f 6d  in P2 can be com
1cea0 70 75 74 65 64 20 61 74 20 74 68 65 20 73 61 6d  puted at the sam
1ceb0 65 20 74 69 6d 65 0a 2a 2a 20 61 73 20 74 68 65  e time.** as the
1cec0 20 4f 50 5f 4f 70 65 6e 45 70 68 6d 20 69 6e 73   OP_OpenEphm ins
1ced0 74 72 75 63 74 69 6f 6e 20 69 73 20 63 6f 64 65  truction is code
1cee0 64 20 62 65 63 61 75 73 65 20 6e 6f 74 0a 2a 2a  d because not.**
1cef0 20 65 6e 6f 75 67 68 20 69 6e 66 6f 72 6d 61 74   enough informat
1cf00 69 6f 6e 20 61 62 6f 75 74 20 74 68 65 20 63 6f  ion about the co
1cf10 6d 70 6f 75 6e 64 20 71 75 65 72 79 20 69 73 20  mpound query is 
1cf20 6b 6e 6f 77 6e 20 61 74 20 74 68 61 74 20 70 6f  known at that po
1cf30 69 6e 74 2e 0a 2a 2a 20 54 68 65 20 4b 65 79 49  int..** The KeyI
1cf40 6e 66 6f 20 66 6f 72 20 61 64 64 72 4f 70 65 6e  nfo for addrOpen
1cf50 54 72 61 6e 5b 30 5d 20 61 6e 64 20 5b 31 5d 20  Tran[0] and [1] 
1cf60 63 6f 6e 74 61 69 6e 73 20 63 6f 6c 6c 61 74 69  contains collati
1cf70 6e 67 20 73 65 71 75 65 6e 63 65 73 0a 2a 2a 20  ng sequences.** 
1cf80 66 6f 72 20 74 68 65 20 72 65 73 75 6c 74 20 73  for the result s
1cf90 65 74 2e 20 20 54 68 65 20 4b 65 79 49 6e 66 6f  et.  The KeyInfo
1cfa0 20 66 6f 72 20 61 64 64 72 4f 70 65 6e 45 70 68   for addrOpenEph
1cfb0 6d 5b 32 5d 20 63 6f 6e 74 61 69 6e 73 20 63 6f  m[2] contains co
1cfc0 6c 6c 61 74 69 6e 67 0a 2a 2a 20 73 65 71 75 65  llating.** seque
1cfd0 6e 63 65 73 20 66 6f 72 20 74 68 65 20 4f 52 44  nces for the ORD
1cfe0 45 52 20 42 59 20 63 6c 61 75 73 65 2e 0a 2a 2f  ER BY clause..*/
1cff0 0a 73 74 72 75 63 74 20 53 65 6c 65 63 74 20 7b  .struct Select {
1d000 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70 45 4c  .  ExprList *pEL
1d010 69 73 74 3b 20 20 20 20 20 20 2f 2a 20 54 68 65  ist;      /* The
1d020 20 66 69 65 6c 64 73 20 6f 66 20 74 68 65 20 72   fields of the r
1d030 65 73 75 6c 74 20 2a 2f 0a 20 20 75 38 20 6f 70  esult */.  u8 op
1d040 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1d050 20 20 2f 2a 20 4f 6e 65 20 6f 66 3a 20 54 4b 5f    /* One of: TK_
1d060 55 4e 49 4f 4e 20 54 4b 5f 41 4c 4c 20 54 4b 5f  UNION TK_ALL TK_
1d070 49 4e 54 45 52 53 45 43 54 20 54 4b 5f 45 58 43  INTERSECT TK_EXC
1d080 45 50 54 20 2a 2f 0a 20 20 4c 6f 67 45 73 74 20  EPT */.  LogEst 
1d090 6e 53 65 6c 65 63 74 52 6f 77 3b 20 20 20 20 20  nSelectRow;     
1d0a0 2f 2a 20 45 73 74 69 6d 61 74 65 64 20 6e 75 6d  /* Estimated num
1d0b0 62 65 72 20 6f 66 20 72 65 73 75 6c 74 20 72 6f  ber of result ro
1d0c0 77 73 20 2a 2f 0a 20 20 75 33 32 20 73 65 6c 46  ws */.  u32 selF
1d0d0 6c 61 67 73 3b 20 20 20 20 20 20 20 20 20 20 2f  lags;          /
1d0e0 2a 20 56 61 72 69 6f 75 73 20 53 46 5f 2a 20 76  * Various SF_* v
1d0f0 61 6c 75 65 73 20 2a 2f 0a 20 20 69 6e 74 20 69  alues */.  int i
1d100 4c 69 6d 69 74 2c 20 69 4f 66 66 73 65 74 3b 20  Limit, iOffset; 
1d110 20 20 2f 2a 20 4d 65 6d 6f 72 79 20 72 65 67 69    /* Memory regi
1d120 73 74 65 72 73 20 68 6f 6c 64 69 6e 67 20 4c 49  sters holding LI
1d130 4d 49 54 20 26 20 4f 46 46 53 45 54 20 63 6f 75  MIT & OFFSET cou
1d140 6e 74 65 72 73 20 2a 2f 0a 23 69 66 20 53 45 4c  nters */.#if SEL
1d150 45 43 54 54 52 41 43 45 5f 45 4e 41 42 4c 45 44  ECTTRACE_ENABLED
1d160 0a 20 20 63 68 61 72 20 7a 53 65 6c 4e 61 6d 65  .  char zSelName
1d170 5b 31 32 5d 3b 20 20 20 20 20 2f 2a 20 53 79 6d  [12];     /* Sym
1d180 62 6f 6c 69 63 20 6e 61 6d 65 20 6f 66 20 74 68  bolic name of th
1d190 69 73 20 53 45 4c 45 43 54 20 75 73 65 20 66 6f  is SELECT use fo
1d1a0 72 20 64 65 62 75 67 67 69 6e 67 20 2a 2f 0a 23  r debugging */.#
1d1b0 65 6e 64 69 66 0a 20 20 69 6e 74 20 61 64 64 72  endif.  int addr
1d1c0 4f 70 65 6e 45 70 68 6d 5b 32 5d 3b 20 20 20 2f  OpenEphm[2];   /
1d1d0 2a 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 20 6f  * OP_OpenEphem o
1d1e0 70 63 6f 64 65 73 20 72 65 6c 61 74 65 64 20 74  pcodes related t
1d1f0 6f 20 74 68 69 73 20 73 65 6c 65 63 74 20 2a 2f  o this select */
1d200 0a 20 20 53 72 63 4c 69 73 74 20 2a 70 53 72 63  .  SrcList *pSrc
1d210 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65  ;         /* The
1d220 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 2a 2f 0a   FROM clause */.
1d230 20 20 45 78 70 72 20 2a 70 57 68 65 72 65 3b 20    Expr *pWhere; 
1d240 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
1d250 57 48 45 52 45 20 63 6c 61 75 73 65 20 2a 2f 0a  WHERE clause */.
1d260 20 20 45 78 70 72 4c 69 73 74 20 2a 70 47 72 6f    ExprList *pGro
1d270 75 70 42 79 3b 20 20 20 20 2f 2a 20 54 68 65 20  upBy;    /* The 
1d280 47 52 4f 55 50 20 42 59 20 63 6c 61 75 73 65 20  GROUP BY clause 
1d290 2a 2f 0a 20 20 45 78 70 72 20 2a 70 48 61 76 69  */.  Expr *pHavi
1d2a0 6e 67 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54  ng;         /* T
1d2b0 68 65 20 48 41 56 49 4e 47 20 63 6c 61 75 73 65  he HAVING clause
1d2c0 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20 2a   */.  ExprList *
1d2d0 70 4f 72 64 65 72 42 79 3b 20 20 20 20 2f 2a 20  pOrderBy;    /* 
1d2e0 54 68 65 20 4f 52 44 45 52 20 42 59 20 63 6c 61  The ORDER BY cla
1d2f0 75 73 65 20 2a 2f 0a 20 20 53 65 6c 65 63 74 20  use */.  Select 
1d300 2a 70 50 72 69 6f 72 3b 20 20 20 20 20 20 20 20  *pPrior;        
1d310 2f 2a 20 50 72 69 6f 72 20 73 65 6c 65 63 74 20  /* Prior select 
1d320 69 6e 20 61 20 63 6f 6d 70 6f 75 6e 64 20 73 65  in a compound se
1d330 6c 65 63 74 20 73 74 61 74 65 6d 65 6e 74 20 2a  lect statement *
1d340 2f 0a 20 20 53 65 6c 65 63 74 20 2a 70 4e 65 78  /.  Select *pNex
1d350 74 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 65  t;         /* Ne
1d360 78 74 20 73 65 6c 65 63 74 20 74 6f 20 74 68 65  xt select to the
1d370 20 6c 65 66 74 20 69 6e 20 61 20 63 6f 6d 70 6f   left in a compo
1d380 75 6e 64 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70  und */.  Expr *p
1d390 4c 69 6d 69 74 3b 20 20 20 20 20 20 20 20 20 20  Limit;          
1d3a0 2f 2a 20 4c 49 4d 49 54 20 65 78 70 72 65 73 73  /* LIMIT express
1d3b0 69 6f 6e 2e 20 4e 55 4c 4c 20 6d 65 61 6e 73 20  ion. NULL means 
1d3c0 6e 6f 74 20 75 73 65 64 2e 20 2a 2f 0a 20 20 57  not used. */.  W
1d3d0 69 74 68 20 2a 70 57 69 74 68 3b 20 20 20 20 20  ith *pWith;     
1d3e0 20 20 20 20 20 20 2f 2a 20 57 49 54 48 20 63 6c        /* WITH cl
1d3f0 61 75 73 65 20 61 74 74 61 63 68 65 64 20 74 6f  ause attached to
1d400 20 74 68 69 73 20 73 65 6c 65 63 74 2e 20 4f 72   this select. Or
1d410 20 4e 55 4c 4c 2e 20 2a 2f 0a 7d 3b 0a 0a 2f 2a   NULL. */.};../*
1d420 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75  .** Allowed valu
1d430 65 73 20 66 6f 72 20 53 65 6c 65 63 74 2e 73 65  es for Select.se
1d440 6c 46 6c 61 67 73 2e 20 20 54 68 65 20 22 53 46  lFlags.  The "SF
1d450 22 20 70 72 65 66 69 78 20 73 74 61 6e 64 73 20  " prefix stands 
1d460 66 6f 72 0a 2a 2a 20 22 53 65 6c 65 63 74 20 46  for.** "Select F
1d470 6c 61 67 22 2e 0a 2a 2a 0a 2a 2a 20 56 61 6c 75  lag"..**.** Valu
1d480 65 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 28 61  e constraints (a
1d490 6c 6c 20 63 68 65 63 6b 65 64 20 76 69 61 20 61  ll checked via a
1d4a0 73 73 65 72 74 28 29 29 0a 2a 2a 20 20 20 20 20  ssert()).**     
1d4b0 53 46 5f 48 61 73 41 67 67 20 20 20 20 20 3d 3d  SF_HasAgg     ==
1d4c0 20 4e 43 5f 48 61 73 41 67 67 0a 2a 2a 20 20 20   NC_HasAgg.**   
1d4d0 20 20 53 46 5f 4d 69 6e 4d 61 78 41 67 67 20 20    SF_MinMaxAgg  
1d4e0 3d 3d 20 4e 43 5f 4d 69 6e 4d 61 78 41 67 67 20  == NC_MinMaxAgg 
1d4f0 20 20 20 20 3d 3d 20 53 51 4c 49 54 45 5f 46 55      == SQLITE_FU
1d500 4e 43 5f 4d 49 4e 4d 41 58 0a 2a 2a 20 20 20 20  NC_MINMAX.**    
1d510 20 53 46 5f 46 69 78 65 64 4c 69 6d 69 74 20 3d   SF_FixedLimit =
1d520 3d 20 57 48 45 52 45 5f 55 53 45 5f 4c 49 4d 49  = WHERE_USE_LIMI
1d530 54 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f  T.*/.#define SF_
1d540 44 69 73 74 69 6e 63 74 20 20 20 20 20 20 20 30  Distinct       0
1d550 78 30 30 30 30 31 20 20 2f 2a 20 4f 75 74 70 75  x00001  /* Outpu
1d560 74 20 73 68 6f 75 6c 64 20 62 65 20 44 49 53 54  t should be DIST
1d570 49 4e 43 54 20 2a 2f 0a 23 64 65 66 69 6e 65 20  INCT */.#define 
1d580 53 46 5f 41 6c 6c 20 20 20 20 20 20 20 20 20 20  SF_All          
1d590 20 20 30 78 30 30 30 30 32 20 20 2f 2a 20 49 6e    0x00002  /* In
1d5a0 63 6c 75 64 65 73 20 74 68 65 20 41 4c 4c 20 6b  cludes the ALL k
1d5b0 65 79 77 6f 72 64 20 2a 2f 0a 23 64 65 66 69 6e  eyword */.#defin
1d5c0 65 20 53 46 5f 52 65 73 6f 6c 76 65 64 20 20 20  e SF_Resolved   
1d5d0 20 20 20 20 30 78 30 30 30 30 34 20 20 2f 2a 20      0x00004  /* 
1d5e0 49 64 65 6e 74 69 66 69 65 72 73 20 68 61 76 65  Identifiers have
1d5f0 20 62 65 65 6e 20 72 65 73 6f 6c 76 65 64 20 2a   been resolved *
1d600 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 41 67 67  /.#define SF_Agg
1d610 72 65 67 61 74 65 20 20 20 20 20 20 30 78 30 30  regate      0x00
1d620 30 30 38 20 20 2f 2a 20 43 6f 6e 74 61 69 6e 73  008  /* Contains
1d630 20 61 67 67 20 66 75 6e 63 74 69 6f 6e 73 20 6f   agg functions o
1d640 72 20 61 20 47 52 4f 55 50 20 42 59 20 2a 2f 0a  r a GROUP BY */.
1d650 23 64 65 66 69 6e 65 20 53 46 5f 48 61 73 41 67  #define SF_HasAg
1d660 67 20 20 20 20 20 20 20 20 20 30 78 30 30 30 31  g         0x0001
1d670 30 20 20 2f 2a 20 43 6f 6e 74 61 69 6e 73 20 61  0  /* Contains a
1d680 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f  ggregate functio
1d690 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46  ns */.#define SF
1d6a0 5f 55 73 65 73 45 70 68 65 6d 65 72 61 6c 20 20  _UsesEphemeral  
1d6b0 30 78 30 30 30 32 30 20 20 2f 2a 20 55 73 65 73  0x00020  /* Uses
1d6c0 20 74 68 65 20 4f 70 65 6e 45 70 68 65 6d 65 72   the OpenEphemer
1d6d0 61 6c 20 6f 70 63 6f 64 65 20 2a 2f 0a 23 64 65  al opcode */.#de
1d6e0 66 69 6e 65 20 53 46 5f 45 78 70 61 6e 64 65 64  fine SF_Expanded
1d6f0 20 20 20 20 20 20 20 30 78 30 30 30 34 30 20 20         0x00040  
1d700 2f 2a 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74  /* sqlite3Select
1d710 45 78 70 61 6e 64 28 29 20 63 61 6c 6c 65 64 20  Expand() called 
1d720 6f 6e 20 74 68 69 73 20 2a 2f 0a 23 64 65 66 69  on this */.#defi
1d730 6e 65 20 53 46 5f 48 61 73 54 79 70 65 49 6e 66  ne SF_HasTypeInf
1d740 6f 20 20 20 20 30 78 30 30 30 38 30 20 20 2f 2a  o    0x00080  /*
1d750 20 46 52 4f 4d 20 73 75 62 71 75 65 72 69 65 73   FROM subqueries
1d760 20 68 61 76 65 20 54 61 62 6c 65 20 6d 65 74 61   have Table meta
1d770 64 61 74 61 20 2a 2f 0a 23 64 65 66 69 6e 65 20  data */.#define 
1d780 53 46 5f 43 6f 6d 70 6f 75 6e 64 20 20 20 20 20  SF_Compound     
1d790 20 20 30 78 30 30 31 30 30 20 20 2f 2a 20 50 61    0x00100  /* Pa
1d7a0 72 74 20 6f 66 20 61 20 63 6f 6d 70 6f 75 6e 64  rt of a compound
1d7b0 20 71 75 65 72 79 20 2a 2f 0a 23 64 65 66 69 6e   query */.#defin
1d7c0 65 20 53 46 5f 56 61 6c 75 65 73 20 20 20 20 20  e SF_Values     
1d7d0 20 20 20 20 30 78 30 30 32 30 30 20 20 2f 2a 20      0x00200  /* 
1d7e0 53 79 6e 74 68 65 73 69 7a 65 64 20 66 72 6f 6d  Synthesized from
1d7f0 20 56 41 4c 55 45 53 20 63 6c 61 75 73 65 20 2a   VALUES clause *
1d800 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 4d 75 6c  /.#define SF_Mul
1d810 74 69 56 61 6c 75 65 20 20 20 20 20 30 78 30 30  tiValue     0x00
1d820 34 30 30 20 20 2f 2a 20 53 69 6e 67 6c 65 20 56  400  /* Single V
1d830 41 4c 55 45 53 20 74 65 72 6d 20 77 69 74 68 20  ALUES term with 
1d840 6d 75 6c 74 69 70 6c 65 20 72 6f 77 73 20 2a 2f  multiple rows */
1d850 0a 23 64 65 66 69 6e 65 20 53 46 5f 4e 65 73 74  .#define SF_Nest
1d860 65 64 46 72 6f 6d 20 20 20 20 20 30 78 30 30 38  edFrom     0x008
1d870 30 30 20 20 2f 2a 20 50 61 72 74 20 6f 66 20 61  00  /* Part of a
1d880 20 70 61 72 65 6e 74 68 65 73 69 7a 65 64 20 46   parenthesized F
1d890 52 4f 4d 20 63 6c 61 75 73 65 20 2a 2f 0a 23 64  ROM clause */.#d
1d8a0 65 66 69 6e 65 20 53 46 5f 4d 69 6e 4d 61 78 41  efine SF_MinMaxA
1d8b0 67 67 20 20 20 20 20 20 30 78 30 31 30 30 30 20  gg      0x01000 
1d8c0 20 2f 2a 20 41 67 67 72 65 67 61 74 65 20 63 6f   /* Aggregate co
1d8d0 6e 74 61 69 6e 69 6e 67 20 6d 69 6e 28 29 20 6f  ntaining min() o
1d8e0 72 20 6d 61 78 28 29 20 2a 2f 0a 23 64 65 66 69  r max() */.#defi
1d8f0 6e 65 20 53 46 5f 52 65 63 75 72 73 69 76 65 20  ne SF_Recursive 
1d900 20 20 20 20 20 30 78 30 32 30 30 30 20 20 2f 2a       0x02000  /*
1d910 20 54 68 65 20 72 65 63 75 72 73 69 76 65 20 70   The recursive p
1d920 61 72 74 20 6f 66 20 61 20 72 65 63 75 72 73 69  art of a recursi
1d930 76 65 20 43 54 45 20 2a 2f 0a 23 64 65 66 69 6e  ve CTE */.#defin
1d940 65 20 53 46 5f 46 69 78 65 64 4c 69 6d 69 74 20  e SF_FixedLimit 
1d950 20 20 20 20 30 78 30 34 30 30 30 20 20 2f 2a 20      0x04000  /* 
1d960 6e 53 65 6c 65 63 74 52 6f 77 20 73 65 74 20 62  nSelectRow set b
1d970 79 20 61 20 63 6f 6e 73 74 61 6e 74 20 4c 49 4d  y a constant LIM
1d980 49 54 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46  IT */.#define SF
1d990 5f 4d 61 79 62 65 43 6f 6e 76 65 72 74 20 20 20  _MaybeConvert   
1d9a0 30 78 30 38 30 30 30 20 20 2f 2a 20 4e 65 65 64  0x08000  /* Need
1d9b0 20 63 6f 6e 76 65 72 74 43 6f 6d 70 6f 75 6e 64   convertCompound
1d9c0 53 65 6c 65 63 74 54 6f 53 75 62 71 75 65 72 79  SelectToSubquery
1d9d0 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46  () */.#define SF
1d9e0 5f 43 6f 6e 76 65 72 74 65 64 20 20 20 20 20 20  _Converted      
1d9f0 30 78 31 30 30 30 30 20 20 2f 2a 20 42 79 20 63  0x10000  /* By c
1da00 6f 6e 76 65 72 74 43 6f 6d 70 6f 75 6e 64 53 65  onvertCompoundSe
1da10 6c 65 63 74 54 6f 53 75 62 71 75 65 72 79 28 29  lectToSubquery()
1da20 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 49   */.#define SF_I
1da30 6e 63 6c 75 64 65 48 69 64 64 65 6e 20 20 30 78  ncludeHidden  0x
1da40 32 30 30 30 30 20 20 2f 2a 20 49 6e 63 6c 75 64  20000  /* Includ
1da50 65 20 68 69 64 64 65 6e 20 63 6f 6c 75 6d 6e 73  e hidden columns
1da60 20 69 6e 20 6f 75 74 70 75 74 20 2a 2f 0a 23 64   in output */.#d
1da70 65 66 69 6e 65 20 53 46 5f 43 6f 6d 70 6c 65 78  efine SF_Complex
1da80 52 65 73 75 6c 74 20 20 30 78 34 30 30 30 30 20  Result  0x40000 
1da90 20 2f 2a 20 52 65 73 75 6c 74 20 63 6f 6e 74 61   /* Result conta
1daa0 69 6e 73 20 73 75 62 71 75 65 72 79 20 6f 72 20  ins subquery or 
1dab0 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 0a 2f 2a 0a  function */../*.
1dac0 2a 2a 20 54 68 65 20 72 65 73 75 6c 74 73 20 6f  ** The results o
1dad0 66 20 61 20 53 45 4c 45 43 54 20 63 61 6e 20 62  f a SELECT can b
1dae0 65 20 64 69 73 74 72 69 62 75 74 65 64 20 69 6e  e distributed in
1daf0 20 73 65 76 65 72 61 6c 20 77 61 79 73 2c 20 61   several ways, a
1db00 73 20 64 65 66 69 6e 65 64 0a 2a 2a 20 62 79 20  s defined.** by 
1db10 6f 6e 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f  one of the follo
1db20 77 69 6e 67 20 6d 61 63 72 6f 73 2e 20 20 54 68  wing macros.  Th
1db30 65 20 22 53 52 54 22 20 70 72 65 66 69 78 20 6d  e "SRT" prefix m
1db40 65 61 6e 73 20 22 53 45 4c 45 43 54 20 52 65 73  eans "SELECT Res
1db50 75 6c 74 0a 2a 2a 20 54 79 70 65 22 2e 0a 2a 2a  ult.** Type"..**
1db60 0a 2a 2a 20 20 20 20 20 53 52 54 5f 55 6e 69 6f  .**     SRT_Unio
1db70 6e 20 20 20 20 20 20 20 53 74 6f 72 65 20 72 65  n       Store re
1db80 73 75 6c 74 73 20 61 73 20 61 20 6b 65 79 20 69  sults as a key i
1db90 6e 20 61 20 74 65 6d 70 6f 72 61 72 79 20 69 6e  n a temporary in
1dba0 64 65 78 0a 2a 2a 20 20 20 20 20 20 20 20 20 20  dex.**          
1dbb0 20 20 20 20 20 20 20 20 20 20 20 69 64 65 6e 74             ident
1dbc0 69 66 69 65 64 20 62 79 20 70 44 65 73 74 2d 3e  ified by pDest->
1dbd0 69 53 44 50 61 72 6d 2e 0a 2a 2a 0a 2a 2a 20 20  iSDParm..**.**  
1dbe0 20 20 20 53 52 54 5f 45 78 63 65 70 74 20 20 20     SRT_Except   
1dbf0 20 20 20 52 65 6d 6f 76 65 20 72 65 73 75 6c 74     Remove result
1dc00 73 20 66 72 6f 6d 20 74 68 65 20 74 65 6d 70 6f  s from the tempo
1dc10 72 61 72 79 20 69 6e 64 65 78 20 70 44 65 73 74  rary index pDest
1dc20 2d 3e 69 53 44 50 61 72 6d 2e 0a 2a 2a 0a 2a 2a  ->iSDParm..**.**
1dc30 20 20 20 20 20 53 52 54 5f 45 78 69 73 74 73 20       SRT_Exists 
1dc40 20 20 20 20 20 53 74 6f 72 65 20 61 20 31 20 69       Store a 1 i
1dc50 6e 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 70 44  n memory cell pD
1dc60 65 73 74 2d 3e 69 53 44 50 61 72 6d 20 69 66 20  est->iSDParm if 
1dc70 74 68 65 20 72 65 73 75 6c 74 0a 2a 2a 20 20 20  the result.**   
1dc80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dc90 20 20 73 65 74 20 69 73 20 6e 6f 74 20 65 6d 70    set is not emp
1dca0 74 79 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52  ty..**.**     SR
1dcb0 54 5f 44 69 73 63 61 72 64 20 20 20 20 20 54 68  T_Discard     Th
1dcc0 72 6f 77 20 74 68 65 20 72 65 73 75 6c 74 73 20  row the results 
1dcd0 61 77 61 79 2e 20 20 54 68 69 73 20 69 73 20 75  away.  This is u
1dce0 73 65 64 20 62 79 20 53 45 4c 45 43 54 0a 2a 2a  sed by SELECT.**
1dcf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dd00 20 20 20 20 20 73 74 61 74 65 6d 65 6e 74 73 20       statements 
1dd10 77 69 74 68 69 6e 20 74 72 69 67 67 65 72 73 20  within triggers 
1dd20 77 68 6f 73 65 20 6f 6e 6c 79 20 70 75 72 70 6f  whose only purpo
1dd30 73 65 20 69 73 0a 2a 2a 20 20 20 20 20 20 20 20  se is.**        
1dd40 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 65               the
1dd50 20 73 69 64 65 2d 65 66 66 65 63 74 73 20 6f 66   side-effects of
1dd60 20 66 75 6e 63 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a   functions..**.*
1dd70 2a 20 41 6c 6c 20 6f 66 20 74 68 65 20 61 62 6f  * All of the abo
1dd80 76 65 20 61 72 65 20 66 72 65 65 20 74 6f 20 69  ve are free to i
1dd90 67 6e 6f 72 65 20 74 68 65 69 72 20 4f 52 44 45  gnore their ORDE
1dda0 52 20 42 59 20 63 6c 61 75 73 65 2e 20 54 68 6f  R BY clause. Tho
1ddb0 73 65 20 74 68 61 74 0a 2a 2a 20 66 6f 6c 6c 6f  se that.** follo
1ddc0 77 20 6d 75 73 74 20 68 6f 6e 6f 72 20 74 68 65  w must honor the
1ddd0 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73 65   ORDER BY clause
1dde0 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f  ..**.**     SRT_
1ddf0 4f 75 74 70 75 74 20 20 20 20 20 20 47 65 6e 65  Output      Gene
1de00 72 61 74 65 20 61 20 72 6f 77 20 6f 66 20 6f 75  rate a row of ou
1de10 74 70 75 74 20 28 75 73 69 6e 67 20 74 68 65 20  tput (using the 
1de20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 0a 2a 2a 20  OP_ResultRow.** 
1de30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1de40 20 20 20 20 6f 70 63 6f 64 65 29 20 66 6f 72 20      opcode) for 
1de50 65 61 63 68 20 72 6f 77 20 69 6e 20 74 68 65 20  each row in the 
1de60 72 65 73 75 6c 74 20 73 65 74 2e 0a 2a 2a 0a 2a  result set..**.*
1de70 2a 20 20 20 20 20 53 52 54 5f 4d 65 6d 20 20 20  *     SRT_Mem   
1de80 20 20 20 20 20 20 4f 6e 6c 79 20 76 61 6c 69 64        Only valid
1de90 20 69 66 20 74 68 65 20 72 65 73 75 6c 74 20 69   if the result i
1dea0 73 20 61 20 73 69 6e 67 6c 65 20 63 6f 6c 75 6d  s a single colum
1deb0 6e 2e 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  n..**           
1dec0 20 20 20 20 20 20 20 20 20 20 53 74 6f 72 65 20            Store 
1ded0 74 68 65 20 66 69 72 73 74 20 63 6f 6c 75 6d 6e  the first column
1dee0 20 6f 66 20 74 68 65 20 66 69 72 73 74 20 72 65   of the first re
1def0 73 75 6c 74 20 72 6f 77 0a 2a 2a 20 20 20 20 20  sult row.**     
1df00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1df10 69 6e 20 72 65 67 69 73 74 65 72 20 70 44 65 73  in register pDes
1df20 74 2d 3e 69 53 44 50 61 72 6d 20 74 68 65 6e 20  t->iSDParm then 
1df30 61 62 61 6e 64 6f 6e 20 74 68 65 20 72 65 73 74  abandon the rest
1df40 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
1df50 20 20 20 20 20 20 20 20 6f 66 20 74 68 65 20 71          of the q
1df60 75 65 72 79 2e 20 20 54 68 69 73 20 64 65 73 74  uery.  This dest
1df70 69 6e 61 74 69 6f 6e 20 69 6d 70 6c 69 65 73 20  ination implies 
1df80 22 4c 49 4d 49 54 20 31 22 2e 0a 2a 2a 0a 2a 2a  "LIMIT 1"..**.**
1df90 20 20 20 20 20 53 52 54 5f 53 65 74 20 20 20 20       SRT_Set    
1dfa0 20 20 20 20 20 54 68 65 20 72 65 73 75 6c 74 20       The result 
1dfb0 6d 75 73 74 20 62 65 20 61 20 73 69 6e 67 6c 65  must be a single
1dfc0 20 63 6f 6c 75 6d 6e 2e 20 20 53 74 6f 72 65 20   column.  Store 
1dfd0 65 61 63 68 0a 2a 2a 20 20 20 20 20 20 20 20 20  each.**         
1dfe0 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 77 20              row 
1dff0 6f 66 20 72 65 73 75 6c 74 20 61 73 20 74 68 65  of result as the
1e000 20 6b 65 79 20 69 6e 20 74 61 62 6c 65 20 70 44   key in table pD
1e010 65 73 74 2d 3e 69 53 44 50 61 72 6d 2e 0a 2a 2a  est->iSDParm..**
1e020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e030 20 20 20 20 20 41 70 70 6c 79 20 74 68 65 20 61       Apply the a
1e040 66 66 69 6e 69 74 79 20 70 44 65 73 74 2d 3e 61  ffinity pDest->a
1e050 66 66 53 64 73 74 20 62 65 66 6f 72 65 20 73 74  ffSdst before st
1e060 6f 72 69 6e 67 0a 2a 2a 20 20 20 20 20 20 20 20  oring.**        
1e070 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 73               res
1e080 75 6c 74 73 2e 20 20 55 73 65 64 20 74 6f 20 69  ults.  Used to i
1e090 6d 70 6c 65 6d 65 6e 74 20 22 49 4e 20 28 53 45  mplement "IN (SE
1e0a0 4c 45 43 54 20 2e 2e 2e 29 22 2e 0a 2a 2a 0a 2a  LECT ...)"..**.*
1e0b0 2a 20 20 20 20 20 53 52 54 5f 45 70 68 65 6d 54  *     SRT_EphemT
1e0c0 61 62 20 20 20 20 43 72 65 61 74 65 20 61 6e 20  ab    Create an 
1e0d0 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 20  temporary table 
1e0e0 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 20 61  pDest->iSDParm a
1e0f0 6e 64 20 73 74 6f 72 65 0a 2a 2a 20 20 20 20 20  nd store.**     
1e100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e110 74 68 65 20 72 65 73 75 6c 74 20 74 68 65 72 65  the result there
1e120 2e 20 54 68 65 20 63 75 72 73 6f 72 20 69 73 20  . The cursor is 
1e130 6c 65 66 74 20 6f 70 65 6e 20 61 66 74 65 72 0a  left open after.
1e140 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
1e150 20 20 20 20 20 20 20 72 65 74 75 72 6e 69 6e 67         returning
1e160 2e 20 20 54 68 69 73 20 69 73 20 6c 69 6b 65 20  .  This is like 
1e170 53 52 54 5f 54 61 62 6c 65 20 65 78 63 65 70 74  SRT_Table except
1e180 20 74 68 61 74 0a 2a 2a 20 20 20 20 20 20 20 20   that.**        
1e190 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69               thi
1e1a0 73 20 64 65 73 74 69 6e 61 74 69 6f 6e 20 75 73  s destination us
1e1b0 65 73 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 65  es OP_OpenEpheme
1e1c0 72 61 6c 20 74 6f 20 63 72 65 61 74 65 0a 2a 2a  ral to create.**
1e1d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e1e0 20 20 20 20 20 74 68 65 20 74 61 62 6c 65 20 66       the table f
1e1f0 69 72 73 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20  irst..**.**     
1e200 53 52 54 5f 43 6f 72 6f 75 74 69 6e 65 20 20 20  SRT_Coroutine   
1e210 47 65 6e 65 72 61 74 65 20 61 20 63 6f 2d 72 6f  Generate a co-ro
1e220 75 74 69 6e 65 20 74 68 61 74 20 72 65 74 75 72  utine that retur
1e230 6e 73 20 61 20 6e 65 77 20 72 6f 77 20 6f 66 0a  ns a new row of.
1e240 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
1e250 20 20 20 20 20 20 20 72 65 73 75 6c 74 73 20 65         results e
1e260 61 63 68 20 74 69 6d 65 20 69 74 20 69 73 20 69  ach time it is i
1e270 6e 76 6f 6b 65 64 2e 20 20 54 68 65 20 65 6e 74  nvoked.  The ent
1e280 72 79 20 70 6f 69 6e 74 0a 2a 2a 20 20 20 20 20  ry point.**     
1e290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e2a0 6f 66 20 74 68 65 20 63 6f 2d 72 6f 75 74 69 6e  of the co-routin
1e2b0 65 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 72  e is stored in r
1e2c0 65 67 69 73 74 65 72 20 70 44 65 73 74 2d 3e 69  egister pDest->i
1e2d0 53 44 50 61 72 6d 0a 2a 2a 20 20 20 20 20 20 20  SDParm.**       
1e2e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61 6e                an
1e2f0 64 20 74 68 65 20 72 65 73 75 6c 74 20 72 6f 77  d the result row
1e300 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 70 44   is stored in pD
1e310 65 73 74 2d 3e 6e 44 65 73 74 20 72 65 67 69 73  est->nDest regis
1e320 74 65 72 73 0a 2a 2a 20 20 20 20 20 20 20 20 20  ters.**         
1e330 20 20 20 20 20 20 20 20 20 20 20 20 73 74 61 72              star
1e340 74 69 6e 67 20 77 69 74 68 20 70 44 65 73 74 2d  ting with pDest-
1e350 3e 69 53 64 73 74 2e 0a 2a 2a 0a 2a 2a 20 20 20  >iSdst..**.**   
1e360 20 20 53 52 54 5f 54 61 62 6c 65 20 20 20 20 20    SRT_Table     
1e370 20 20 53 74 6f 72 65 20 72 65 73 75 6c 74 73 20    Store results 
1e380 69 6e 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62  in temporary tab
1e390 6c 65 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72  le pDest->iSDPar
1e3a0 6d 2e 0a 2a 2a 20 20 20 20 20 53 52 54 5f 46 69  m..**     SRT_Fi
1e3b0 66 6f 20 20 20 20 20 20 20 20 54 68 69 73 20 69  fo        This i
1e3c0 73 20 6c 69 6b 65 20 53 52 54 5f 45 70 68 65 6d  s like SRT_Ephem
1e3d0 54 61 62 20 65 78 63 65 70 74 20 74 68 61 74 20  Tab except that 
1e3e0 74 68 65 20 74 61 62 6c 65 0a 2a 2a 20 20 20 20  the table.**    
1e3f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e400 20 69 73 20 61 73 73 75 6d 65 64 20 74 6f 20 61   is assumed to a
1e410 6c 72 65 61 64 79 20 62 65 20 6f 70 65 6e 2e 20  lready be open. 
1e420 20 53 52 54 5f 46 69 66 6f 20 68 61 73 0a 2a 2a   SRT_Fifo has.**
1e430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e440 20 20 20 20 20 74 68 65 20 61 64 64 69 74 69 6f       the additio
1e450 6e 61 6c 20 70 72 6f 70 65 72 74 79 20 6f 66 20  nal property of 
1e460 62 65 69 6e 67 20 61 62 6c 65 20 74 6f 20 69 67  being able to ig
1e470 6e 6f 72 65 0a 2a 2a 20 20 20 20 20 20 20 20 20  nore.**         
1e480 20 20 20 20 20 20 20 20 20 20 20 20 74 68 65 20              the 
1e490 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73 65 2e  ORDER BY clause.
1e4a0 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 44  .**.**     SRT_D
1e4b0 69 73 74 46 69 66 6f 20 20 20 20 53 74 6f 72 65  istFifo    Store
1e4c0 20 72 65 73 75 6c 74 73 20 69 6e 20 61 20 74 65   results in a te
1e4d0 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 20 70 44  mporary table pD
1e4e0 65 73 74 2d 3e 69 53 44 50 61 72 6d 2e 0a 2a 2a  est->iSDParm..**
1e4f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e500 20 20 20 20 20 42 75 74 20 61 6c 73 6f 20 75 73       But also us
1e510 65 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c  e temporary tabl
1e520 65 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d  e pDest->iSDParm
1e530 2b 31 20 61 73 0a 2a 2a 20 20 20 20 20 20 20 20  +1 as.**        
1e540 20 20 20 20 20 20 20 20 20 20 20 20 20 61 20 72               a r
1e550 65 63 6f 72 64 20 6f 66 20 61 6c 6c 20 70 72 69  ecord of all pri
1e560 6f 72 20 72 65 73 75 6c 74 73 20 61 6e 64 20 69  or results and i
1e570 67 6e 6f 72 65 20 61 6e 79 20 64 75 70 6c 69 63  gnore any duplic
1e580 61 74 65 0a 2a 2a 20 20 20 20 20 20 20 20 20 20  ate.**          
1e590 20 20 20 20 20 20 20 20 20 20 20 72 6f 77 73 2e             rows.
1e5a0 20 20 4e 61 6d 65 20 6d 65 61 6e 73 3a 20 20 22    Name means:  "
1e5b0 44 69 73 74 69 6e 63 74 20 46 69 66 6f 22 2e 0a  Distinct Fifo"..
1e5c0 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 51 75  **.**     SRT_Qu
1e5d0 65 75 65 20 20 20 20 20 20 20 53 74 6f 72 65 20  eue       Store 
1e5e0 72 65 73 75 6c 74 73 20 69 6e 20 70 72 69 6f 72  results in prior
1e5f0 69 74 79 20 71 75 65 75 65 20 70 44 65 73 74 2d  ity queue pDest-
1e600 3e 69 53 44 50 61 72 6d 20 28 72 65 61 6c 6c 79  >iSDParm (really
1e610 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
1e620 20 20 20 20 20 20 20 20 61 6e 20 69 6e 64 65 78          an index
1e630 29 2e 20 20 41 70 70 65 6e 64 20 61 20 73 65 71  ).  Append a seq
1e640 75 65 6e 63 65 20 6e 75 6d 62 65 72 20 73 6f 20  uence number so 
1e650 74 68 61 74 20 61 6c 6c 20 65 6e 74 72 69 65 73  that all entries
1e660 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
1e670 20 20 20 20 20 20 20 20 61 72 65 20 64 69 73 74          are dist
1e680 69 6e 63 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20  inct..**.**     
1e690 53 52 54 5f 44 69 73 74 51 75 65 75 65 20 20 20  SRT_DistQueue   
1e6a0 53 74 6f 72 65 20 72 65 73 75 6c 74 73 20 69 6e  Store results in
1e6b0 20 70 72 69 6f 72 69 74 79 20 71 75 65 75 65 20   priority queue 
1e6c0 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 20 6f  pDest->iSDParm o
1e6d0 6e 6c 79 20 69 66 0a 2a 2a 20 20 20 20 20 20 20  nly if.**       
1e6e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
1e6f0 65 20 73 61 6d 65 20 72 65 63 6f 72 64 20 68 61  e same record ha
1e700 73 20 6e 65 76 65 72 20 62 65 65 6e 20 73 74 6f  s never been sto
1e710 72 65 64 20 62 65 66 6f 72 65 2e 20 20 54 68 65  red before.  The
1e720 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
1e730 20 20 20 20 20 20 20 20 69 6e 64 65 78 20 61 74          index at
1e740 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 2b   pDest->iSDParm+
1e750 31 20 68 6f 6c 64 20 61 6c 6c 20 70 72 69 6f 72  1 hold all prior
1e760 20 73 74 6f 72 65 73 2e 0a 2a 2f 0a 23 64 65 66   stores..*/.#def
1e770 69 6e 65 20 53 52 54 5f 55 6e 69 6f 6e 20 20 20  ine SRT_Union   
1e780 20 20 20 20 20 31 20 20 2f 2a 20 53 74 6f 72 65       1  /* Store
1e790 20 72 65 73 75 6c 74 20 61 73 20 6b 65 79 73 20   result as keys 
1e7a0 69 6e 20 61 6e 20 69 6e 64 65 78 20 2a 2f 0a 23  in an index */.#
1e7b0 64 65 66 69 6e 65 20 53 52 54 5f 45 78 63 65 70  define SRT_Excep
1e7c0 74 20 20 20 20 20 20 20 32 20 20 2f 2a 20 52 65  t       2  /* Re
1e7d0 6d 6f 76 65 20 72 65 73 75 6c 74 20 66 72 6f 6d  move result from
1e7e0 20 61 20 55 4e 49 4f 4e 20 69 6e 64 65 78 20 2a   a UNION index *
1e7f0 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 45 78  /.#define SRT_Ex
1e800 69 73 74 73 20 20 20 20 20 20 20 33 20 20 2f 2a  ists       3  /*
1e810 20 53 74 6f 72 65 20 31 20 69 66 20 74 68 65 20   Store 1 if the 
1e820 72 65 73 75 6c 74 20 69 73 20 6e 6f 74 20 65 6d  result is not em
1e830 70 74 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  pty */.#define S
1e840 52 54 5f 44 69 73 63 61 72 64 20 20 20 20 20 20  RT_Discard      
1e850 34 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 73 61 76  4  /* Do not sav
1e860 65 20 74 68 65 20 72 65 73 75 6c 74 73 20 61 6e  e the results an
1e870 79 77 68 65 72 65 20 2a 2f 0a 23 64 65 66 69 6e  ywhere */.#defin
1e880 65 20 53 52 54 5f 46 69 66 6f 20 20 20 20 20 20  e SRT_Fifo      
1e890 20 20 20 35 20 20 2f 2a 20 53 74 6f 72 65 20 72     5  /* Store r
1e8a0 65 73 75 6c 74 20 61 73 20 64 61 74 61 20 77 69  esult as data wi
1e8b0 74 68 20 61 6e 20 61 75 74 6f 6d 61 74 69 63 20  th an automatic 
1e8c0 72 6f 77 69 64 20 2a 2f 0a 23 64 65 66 69 6e 65  rowid */.#define
1e8d0 20 53 52 54 5f 44 69 73 74 46 69 66 6f 20 20 20   SRT_DistFifo   
1e8e0 20 20 36 20 20 2f 2a 20 4c 69 6b 65 20 53 52 54    6  /* Like SRT
1e8f0 5f 46 69 66 6f 2c 20 62 75 74 20 75 6e 69 71 75  _Fifo, but uniqu
1e900 65 20 72 65 73 75 6c 74 73 20 6f 6e 6c 79 20 2a  e results only *
1e910 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 51 75  /.#define SRT_Qu
1e920 65 75 65 20 20 20 20 20 20 20 20 37 20 20 2f 2a  eue        7  /*
1e930 20 53 74 6f 72 65 20 72 65 73 75 6c 74 20 69 6e   Store result in
1e940 20 61 6e 20 71 75 65 75 65 20 2a 2f 0a 23 64 65   an queue */.#de
1e950 66 69 6e 65 20 53 52 54 5f 44 69 73 74 51 75 65  fine SRT_DistQue
1e960 75 65 20 20 20 20 38 20 20 2f 2a 20 4c 69 6b 65  ue    8  /* Like
1e970 20 53 52 54 5f 51 75 65 75 65 2c 20 62 75 74 20   SRT_Queue, but 
1e980 75 6e 69 71 75 65 20 72 65 73 75 6c 74 73 20 6f  unique results o
1e990 6e 6c 79 20 2a 2f 0a 0a 2f 2a 20 54 68 65 20 4f  nly */../* The O
1e9a0 52 44 45 52 20 42 59 20 63 6c 61 75 73 65 20 69  RDER BY clause i
1e9b0 73 20 69 67 6e 6f 72 65 64 20 66 6f 72 20 61 6c  s ignored for al
1e9c0 6c 20 6f 66 20 74 68 65 20 61 62 6f 76 65 20 2a  l of the above *
1e9d0 2f 0a 23 64 65 66 69 6e 65 20 49 67 6e 6f 72 61  /.#define Ignora
1e9e0 62 6c 65 4f 72 64 65 72 62 79 28 58 29 20 28 28  bleOrderby(X) ((
1e9f0 58 2d 3e 65 44 65 73 74 29 3c 3d 53 52 54 5f 44  X->eDest)<=SRT_D
1ea00 69 73 74 51 75 65 75 65 29 0a 0a 23 64 65 66 69  istQueue)..#defi
1ea10 6e 65 20 53 52 54 5f 4f 75 74 70 75 74 20 20 20  ne SRT_Output   
1ea20 20 20 20 20 39 20 20 2f 2a 20 4f 75 74 70 75 74      9  /* Output
1ea30 20 65 61 63 68 20 72 6f 77 20 6f 66 20 72 65 73   each row of res
1ea40 75 6c 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ult */.#define S
1ea50 52 54 5f 4d 65 6d 20 20 20 20 20 20 20 20 20 31  RT_Mem         1
1ea60 30 20 20 2f 2a 20 53 74 6f 72 65 20 72 65 73 75  0  /* Store resu
1ea70 6c 74 20 69 6e 20 61 20 6d 65 6d 6f 72 79 20 63  lt in a memory c
1ea80 65 6c 6c 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ell */.#define S
1ea90 52 54 5f 53 65 74 20 20 20 20 20 20 20 20 20 31  RT_Set         1
1eaa0 31 20 20 2f 2a 20 53 74 6f 72 65 20 72 65 73 75  1  /* Store resu
1eab0 6c 74 73 20 61 73 20 6b 65 79 73 20 69 6e 20 61  lts as keys in a
1eac0 6e 20 69 6e 64 65 78 20 2a 2f 0a 23 64 65 66 69  n index */.#defi
1ead0 6e 65 20 53 52 54 5f 45 70 68 65 6d 54 61 62 20  ne SRT_EphemTab 
1eae0 20 20 20 31 32 20 20 2f 2a 20 43 72 65 61 74 65     12  /* Create
1eaf0 20 74 72 61 6e 73 69 65 6e 74 20 74 61 62 20 61   transient tab a
1eb00 6e 64 20 73 74 6f 72 65 20 6c 69 6b 65 20 53 52  nd store like SR
1eb10 54 5f 54 61 62 6c 65 20 2a 2f 0a 23 64 65 66 69  T_Table */.#defi
1eb20 6e 65 20 53 52 54 5f 43 6f 72 6f 75 74 69 6e 65  ne SRT_Coroutine
1eb30 20 20 20 31 33 20 20 2f 2a 20 47 65 6e 65 72 61     13  /* Genera
1eb40 74 65 20 61 20 73 69 6e 67 6c 65 20 72 6f 77 20  te a single row 
1eb50 6f 66 20 72 65 73 75 6c 74 20 2a 2f 0a 23 64 65  of result */.#de
1eb60 66 69 6e 65 20 53 52 54 5f 54 61 62 6c 65 20 20  fine SRT_Table  
1eb70 20 20 20 20 20 31 34 20 20 2f 2a 20 53 74 6f 72       14  /* Stor
1eb80 65 20 72 65 73 75 6c 74 20 61 73 20 64 61 74 61  e result as data
1eb90 20 77 69 74 68 20 61 6e 20 61 75 74 6f 6d 61 74   with an automat
1eba0 69 63 20 72 6f 77 69 64 20 2a 2f 0a 0a 2f 2a 0a  ic rowid */../*.
1ebb0 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f  ** An instance o
1ebc0 66 20 74 68 69 73 20 6f 62 6a 65 63 74 20 64 65  f this object de
1ebd0 73 63 72 69 62 65 73 20 77 68 65 72 65 20 74 6f  scribes where to
1ebe0 20 70 75 74 20 6f 66 20 74 68 65 20 72 65 73 75   put of the resu
1ebf0 6c 74 73 20 6f 66 0a 2a 2a 20 61 20 53 45 4c 45  lts of.** a SELE
1ec00 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2f  CT statement..*/
1ec10 0a 73 74 72 75 63 74 20 53 65 6c 65 63 74 44 65  .struct SelectDe
1ec20 73 74 20 7b 0a 20 20 75 38 20 65 44 65 73 74 3b  st {.  u8 eDest;
1ec30 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 48              /* H
1ec40 6f 77 20 74 6f 20 64 69 73 70 6f 73 65 20 6f 66  ow to dispose of
1ec50 20 74 68 65 20 72 65 73 75 6c 74 73 2e 20 20 4f   the results.  O
1ec60 6e 20 6f 66 20 53 52 54 5f 2a 20 61 62 6f 76 65  n of SRT_* above
1ec70 2e 20 2a 2f 0a 20 20 69 6e 74 20 69 53 44 50 61  . */.  int iSDPa
1ec80 72 6d 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 41  rm;         /* A
1ec90 20 70 61 72 61 6d 65 74 65 72 20 75 73 65 64 20   parameter used 
1eca0 62 79 20 74 68 65 20 65 44 65 73 74 20 64 69 73  by the eDest dis
1ecb0 70 6f 73 61 6c 20 6d 65 74 68 6f 64 20 2a 2f 0a  posal method */.
1ecc0 20 20 69 6e 74 20 69 53 64 73 74 3b 20 20 20 20    int iSdst;    
1ecd0 20 20 20 20 20 20 20 2f 2a 20 42 61 73 65 20 72         /* Base r
1ece0 65 67 69 73 74 65 72 20 77 68 65 72 65 20 72 65  egister where re
1ecf0 73 75 6c 74 73 20 61 72 65 20 77 72 69 74 74 65  sults are writte
1ed00 6e 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 64 73 74  n */.  int nSdst
1ed10 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e  ;           /* N
1ed20 75 6d 62 65 72 20 6f 66 20 72 65 67 69 73 74 65  umber of registe
1ed30 72 73 20 61 6c 6c 6f 63 61 74 65 64 20 2a 2f 0a  rs allocated */.
1ed40 20 20 63 68 61 72 20 2a 7a 41 66 66 53 64 73 74    char *zAffSdst
1ed50 3b 20 20 20 20 20 20 2f 2a 20 41 66 66 69 6e 69  ;      /* Affini
1ed60 74 79 20 75 73 65 64 20 77 68 65 6e 20 65 44 65  ty used when eDe
1ed70 73 74 3d 3d 53 52 54 5f 53 65 74 20 2a 2f 0a 20  st==SRT_Set */. 
1ed80 20 45 78 70 72 4c 69 73 74 20 2a 70 4f 72 64 65   ExprList *pOrde
1ed90 72 42 79 3b 20 20 2f 2a 20 4b 65 79 20 63 6f 6c  rBy;  /* Key col
1eda0 75 6d 6e 73 20 66 6f 72 20 53 52 54 5f 51 75 65  umns for SRT_Que
1edb0 75 65 20 61 6e 64 20 53 52 54 5f 44 69 73 74 51  ue and SRT_DistQ
1edc0 75 65 75 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  ueue */.};../*.*
1edd0 2a 20 44 75 72 69 6e 67 20 63 6f 64 65 20 67 65  * During code ge
1ede0 6e 65 72 61 74 69 6f 6e 20 6f 66 20 73 74 61 74  neration of stat
1edf0 65 6d 65 6e 74 73 20 74 68 61 74 20 64 6f 20 69  ements that do i
1ee00 6e 73 65 72 74 73 20 69 6e 74 6f 20 41 55 54 4f  nserts into AUTO
1ee10 49 4e 43 52 45 4d 45 4e 54 0a 2a 2a 20 74 61 62  INCREMENT.** tab
1ee20 6c 65 73 2c 20 74 68 65 20 66 6f 6c 6c 6f 77 69  les, the followi
1ee30 6e 67 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 69  ng information i
1ee40 73 20 61 74 74 61 63 68 65 64 20 74 6f 20 74 68  s attached to th
1ee50 65 20 54 61 62 6c 65 2e 75 2e 61 75 74 6f 49 6e  e Table.u.autoIn
1ee60 63 2e 70 0a 2a 2a 20 70 6f 69 6e 74 65 72 20 6f  c.p.** pointer o
1ee70 66 20 65 61 63 68 20 61 75 74 6f 69 6e 63 72 65  f each autoincre
1ee80 6d 65 6e 74 20 74 61 62 6c 65 20 74 6f 20 72 65  ment table to re
1ee90 63 6f 72 64 20 73 6f 6d 65 20 73 69 64 65 20 69  cord some side i
1eea0 6e 66 6f 72 6d 61 74 69 6f 6e 20 74 68 61 74 0a  nformation that.
1eeb0 2a 2a 20 74 68 65 20 63 6f 64 65 20 67 65 6e 65  ** the code gene
1eec0 72 61 74 6f 72 20 6e 65 65 64 73 2e 20 20 57 65  rator needs.  We
1eed0 20 68 61 76 65 20 74 6f 20 6b 65 65 70 20 70 65   have to keep pe
1eee0 72 2d 74 61 62 6c 65 20 61 75 74 6f 69 6e 63 72  r-table autoincr
1eef0 65 6d 65 6e 74 0a 2a 2a 20 69 6e 66 6f 72 6d 61  ement.** informa
1ef00 74 69 6f 6e 20 69 6e 20 63 61 73 65 20 69 6e 73  tion in case ins
1ef10 65 72 74 73 20 61 72 65 20 64 6f 6e 65 20 77 69  erts are done wi
1ef20 74 68 69 6e 20 74 72 69 67 67 65 72 73 2e 20 20  thin triggers.  
1ef30 54 72 69 67 67 65 72 73 20 64 6f 20 6e 6f 74 0a  Triggers do not.
1ef40 2a 2a 20 6e 6f 72 6d 61 6c 6c 79 20 63 6f 6f 72  ** normally coor
1ef50 64 69 6e 61 74 65 20 74 68 65 69 72 20 61 63 74  dinate their act
1ef60 69 76 69 74 69 65 73 2c 20 62 75 74 20 77 65 20  ivities, but we 
1ef70 64 6f 20 6e 65 65 64 20 74 6f 20 63 6f 6f 72 64  do need to coord
1ef80 69 6e 61 74 65 20 74 68 65 0a 2a 2a 20 6c 6f 61  inate the.** loa
1ef90 64 69 6e 67 20 61 6e 64 20 73 61 76 69 6e 67 20  ding and saving 
1efa0 6f 66 20 61 75 74 6f 69 6e 63 72 65 6d 65 6e 74  of autoincrement
1efb0 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f   information..*/
1efc0 0a 73 74 72 75 63 74 20 41 75 74 6f 69 6e 63 49  .struct AutoincI
1efd0 6e 66 6f 20 7b 0a 20 20 41 75 74 6f 69 6e 63 49  nfo {.  AutoincI
1efe0 6e 66 6f 20 2a 70 4e 65 78 74 3b 20 20 20 2f 2a  nfo *pNext;   /*
1eff0 20 4e 65 78 74 20 69 6e 66 6f 20 62 6c 6f 63 6b   Next info block
1f000 20 69 6e 20 61 20 6c 69 73 74 20 6f 66 20 74 68   in a list of th
1f010 65 6d 20 61 6c 6c 20 2a 2f 0a 20 20 54 61 62 6c  em all */.  Tabl
1f020 65 20 2a 70 54 61 62 3b 20 20 20 20 20 20 20 20  e *pTab;        
1f030 20 20 2f 2a 20 54 61 62 6c 65 20 74 68 69 73 20    /* Table this 
1f040 69 6e 66 6f 20 62 6c 6f 63 6b 20 72 65 66 65 72  info block refer
1f050 73 20 74 6f 20 2a 2f 0a 20 20 69 6e 74 20 69 44  s to */.  int iD
1f060 62 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  b;              
1f070 2f 2a 20 49 6e 64 65 78 20 69 6e 20 73 71 6c 69  /* Index in sqli
1f080 74 65 33 2e 61 44 62 5b 5d 20 6f 66 20 64 61 74  te3.aDb[] of dat
1f090 61 62 61 73 65 20 68 6f 6c 64 69 6e 67 20 70 54  abase holding pT
1f0a0 61 62 20 2a 2f 0a 20 20 69 6e 74 20 72 65 67 43  ab */.  int regC
1f0b0 74 72 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  tr;           /*
1f0c0 20 4d 65 6d 6f 72 79 20 72 65 67 69 73 74 65 72   Memory register
1f0d0 20 68 6f 6c 64 69 6e 67 20 74 68 65 20 72 6f 77   holding the row
1f0e0 69 64 20 63 6f 75 6e 74 65 72 20 2a 2f 0a 7d 3b  id counter */.};
1f0f0 0a 0a 2f 2a 0a 2a 2a 20 53 69 7a 65 20 6f 66 20  ../*.** Size of 
1f100 74 68 65 20 63 6f 6c 75 6d 6e 20 63 61 63 68 65  the column cache
1f110 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  .*/.#ifndef SQLI
1f120 54 45 5f 4e 5f 43 4f 4c 43 41 43 48 45 0a 23 20  TE_N_COLCACHE.# 
1f130 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e 5f  define SQLITE_N_
1f140 43 4f 4c 43 41 43 48 45 20 31 30 0a 23 65 6e 64  COLCACHE 10.#end
1f150 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 74 20 6c 65 61  if../*.** At lea
1f160 73 74 20 6f 6e 65 20 69 6e 73 74 61 6e 63 65 20  st one instance 
1f170 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  of the following
1f180 20 73 74 72 75 63 74 75 72 65 20 69 73 20 63 72   structure is cr
1f190 65 61 74 65 64 20 66 6f 72 20 65 61 63 68 0a 2a  eated for each.*
1f1a0 2a 20 74 72 69 67 67 65 72 20 74 68 61 74 20 6d  * trigger that m
1f1b0 61 79 20 62 65 20 66 69 72 65 64 20 77 68 69 6c  ay be fired whil
1f1c0 65 20 70 61 72 73 69 6e 67 20 61 6e 20 49 4e 53  e parsing an INS
1f1d0 45 52 54 2c 20 55 50 44 41 54 45 20 6f 72 20 44  ERT, UPDATE or D
1f1e0 45 4c 45 54 45 0a 2a 2a 20 73 74 61 74 65 6d 65  ELETE.** stateme
1f1f0 6e 74 2e 20 41 6c 6c 20 73 75 63 68 20 6f 62 6a  nt. All such obj
1f200 65 63 74 73 20 61 72 65 20 73 74 6f 72 65 64 20  ects are stored 
1f210 69 6e 20 74 68 65 20 6c 69 6e 6b 65 64 20 6c 69  in the linked li
1f220 73 74 20 68 65 61 64 65 64 20 61 74 0a 2a 2a 20  st headed at.** 
1f230 50 61 72 73 65 2e 70 54 72 69 67 67 65 72 50 72  Parse.pTriggerPr
1f240 67 20 61 6e 64 20 64 65 6c 65 74 65 64 20 6f 6e  g and deleted on
1f250 63 65 20 73 74 61 74 65 6d 65 6e 74 20 63 6f 6d  ce statement com
1f260 70 69 6c 61 74 69 6f 6e 20 68 61 73 20 62 65 65  pilation has bee
1f270 6e 0a 2a 2a 20 63 6f 6d 70 6c 65 74 65 64 2e 0a  n.** completed..
1f280 2a 2a 0a 2a 2a 20 41 20 56 64 62 65 20 73 75 62  **.** A Vdbe sub
1f290 2d 70 72 6f 67 72 61 6d 20 74 68 61 74 20 69 6d  -program that im
1f2a0 70 6c 65 6d 65 6e 74 73 20 74 68 65 20 62 6f 64  plements the bod
1f2b0 79 20 61 6e 64 20 57 48 45 4e 20 63 6c 61 75 73  y and WHEN claus
1f2c0 65 20 6f 66 20 74 72 69 67 67 65 72 0a 2a 2a 20  e of trigger.** 
1f2d0 54 72 69 67 67 65 72 50 72 67 2e 70 54 72 69 67  TriggerPrg.pTrig
1f2e0 67 65 72 2c 20 61 73 73 75 6d 69 6e 67 20 61 20  ger, assuming a 
1f2f0 64 65 66 61 75 6c 74 20 4f 4e 20 43 4f 4e 46 4c  default ON CONFL
1f300 49 43 54 20 63 6c 61 75 73 65 20 6f 66 0a 2a 2a  ICT clause of.**
1f310 20 54 72 69 67 67 65 72 50 72 67 2e 6f 72 63 6f   TriggerPrg.orco
1f320 6e 66 2c 20 69 73 20 73 74 6f 72 65 64 20 69 6e  nf, is stored in
1f330 20 74 68 65 20 54 72 69 67 67 65 72 50 72 67 2e   the TriggerPrg.
1f340 70 50 72 6f 67 72 61 6d 20 76 61 72 69 61 62 6c  pProgram variabl
1f350 65 2e 0a 2a 2a 20 54 68 65 20 50 61 72 73 65 2e  e..** The Parse.
1f360 70 54 72 69 67 67 65 72 50 72 67 20 6c 69 73 74  pTriggerPrg list
1f370 20 6e 65 76 65 72 20 63 6f 6e 74 61 69 6e 73 20   never contains 
1f380 74 77 6f 20 65 6e 74 72 69 65 73 20 77 69 74 68  two entries with
1f390 20 74 68 65 20 73 61 6d 65 0a 2a 2a 20 76 61 6c   the same.** val
1f3a0 75 65 73 20 66 6f 72 20 62 6f 74 68 20 70 54 72  ues for both pTr
1f3b0 69 67 67 65 72 20 61 6e 64 20 6f 72 63 6f 6e 66  igger and orconf
1f3c0 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 54 72 69 67  ..**.** The Trig
1f3d0 67 65 72 50 72 67 2e 61 43 6f 6c 6d 61 73 6b 5b  gerPrg.aColmask[
1f3e0 30 5d 20 76 61 72 69 61 62 6c 65 20 69 73 20 73  0] variable is s
1f3f0 65 74 20 74 6f 20 61 20 6d 61 73 6b 20 6f 66 20  et to a mask of 
1f400 6f 6c 64 2e 2a 20 63 6f 6c 75 6d 6e 73 0a 2a 2a  old.* columns.**
1f410 20 61 63 63 65 73 73 65 64 20 28 6f 72 20 73 65   accessed (or se
1f420 74 20 74 6f 20 30 20 66 6f 72 20 74 72 69 67 67  t to 0 for trigg
1f430 65 72 73 20 66 69 72 65 64 20 61 73 20 61 20 72  ers fired as a r
1f440 65 73 75 6c 74 20 6f 66 20 49 4e 53 45 52 54 0a  esult of INSERT.
1f450 2a 2a 20 73 74 61 74 65 6d 65 6e 74 73 29 2e 20  ** statements). 
1f460 53 69 6d 69 6c 61 72 6c 79 2c 20 74 68 65 20 54  Similarly, the T
1f470 72 69 67 67 65 72 50 72 67 2e 61 43 6f 6c 6d 61  riggerPrg.aColma
1f480 73 6b 5b 31 5d 20 76 61 72 69 61 62 6c 65 20 69  sk[1] variable i
1f490 73 20 73 65 74 20 74 6f 0a 2a 2a 20 61 20 6d 61  s set to.** a ma
1f4a0 73 6b 20 6f 66 20 6e 65 77 2e 2a 20 63 6f 6c 75  sk of new.* colu
1f4b0 6d 6e 73 20 75 73 65 64 20 62 79 20 74 68 65 20  mns used by the 
1f4c0 70 72 6f 67 72 61 6d 2e 0a 2a 2f 0a 73 74 72 75  program..*/.stru
1f4d0 63 74 20 54 72 69 67 67 65 72 50 72 67 20 7b 0a  ct TriggerPrg {.
1f4e0 20 20 54 72 69 67 67 65 72 20 2a 70 54 72 69 67    Trigger *pTrig
1f4f0 67 65 72 3b 20 20 20 20 20 20 2f 2a 20 54 72 69  ger;      /* Tri
1f500 67 67 65 72 20 74 68 69 73 20 70 72 6f 67 72 61  gger this progra
1f510 6d 20 77 61 73 20 63 6f 64 65 64 20 66 72 6f 6d  m was coded from
1f520 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 50 72 67   */.  TriggerPrg
1f530 20 2a 70 4e 65 78 74 3b 20 20 20 20 20 20 2f 2a   *pNext;      /*
1f540 20 4e 65 78 74 20 65 6e 74 72 79 20 69 6e 20 50   Next entry in P
1f550 61 72 73 65 2e 70 54 72 69 67 67 65 72 50 72 67  arse.pTriggerPrg
1f560 20 6c 69 73 74 20 2a 2f 0a 20 20 53 75 62 50 72   list */.  SubPr
1f570 6f 67 72 61 6d 20 2a 70 50 72 6f 67 72 61 6d 3b  ogram *pProgram;
1f580 20 20 20 2f 2a 20 50 72 6f 67 72 61 6d 20 69 6d     /* Program im
1f590 70 6c 65 6d 65 6e 74 69 6e 67 20 70 54 72 69 67  plementing pTrig
1f5a0 67 65 72 2f 6f 72 63 6f 6e 66 20 2a 2f 0a 20 20  ger/orconf */.  
1f5b0 69 6e 74 20 6f 72 63 6f 6e 66 3b 20 20 20 20 20  int orconf;     
1f5c0 20 20 20 20 20 20 20 20 2f 2a 20 44 65 66 61 75          /* Defau
1f5d0 6c 74 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 70  lt ON CONFLICT p
1f5e0 6f 6c 69 63 79 20 2a 2f 0a 20 20 75 33 32 20 61  olicy */.  u32 a
1f5f0 43 6f 6c 6d 61 73 6b 5b 32 5d 3b 20 20 20 20 20  Colmask[2];     
1f600 20 20 20 2f 2a 20 4d 61 73 6b 73 20 6f 66 20 6f     /* Masks of o
1f610 6c 64 2e 2a 2c 20 6e 65 77 2e 2a 20 63 6f 6c 75  ld.*, new.* colu
1f620 6d 6e 73 20 61 63 63 65 73 73 65 64 20 2a 2f 0a  mns accessed */.
1f630 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 79 44  };../*.** The yD
1f640 62 4d 61 73 6b 20 64 61 74 61 74 79 70 65 20 66  bMask datatype f
1f650 6f 72 20 74 68 65 20 62 69 74 6d 61 73 6b 20 6f  or the bitmask o
1f660 66 20 61 6c 6c 20 61 74 74 61 63 68 65 64 20 64  f all attached d
1f670 61 74 61 62 61 73 65 73 2e 0a 2a 2f 0a 23 69 66  atabases..*/.#if
1f680 20 53 51 4c 49 54 45 5f 4d 41 58 5f 41 54 54 41   SQLITE_MAX_ATTA
1f690 43 48 45 44 3e 33 30 0a 20 20 74 79 70 65 64 65  CHED>30.  typede
1f6a0 66 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20  f unsigned char 
1f6b0 79 44 62 4d 61 73 6b 5b 28 53 51 4c 49 54 45 5f  yDbMask[(SQLITE_
1f6c0 4d 41 58 5f 41 54 54 41 43 48 45 44 2b 39 29 2f  MAX_ATTACHED+9)/
1f6d0 38 5d 3b 0a 23 20 64 65 66 69 6e 65 20 44 62 4d  8];.# define DbM
1f6e0 61 73 6b 54 65 73 74 28 4d 2c 49 29 20 20 20 20  askTest(M,I)    
1f6f0 28 28 28 4d 29 5b 28 49 29 2f 38 5d 26 28 31 3c  (((M)[(I)/8]&(1<
1f700 3c 28 28 49 29 26 37 29 29 29 21 3d 30 29 0a 23  <((I)&7)))!=0).#
1f710 20 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 5a 65   define DbMaskZe
1f720 72 6f 28 4d 29 20 20 20 20 20 20 6d 65 6d 73 65  ro(M)      memse
1f730 74 28 28 4d 29 2c 30 2c 73 69 7a 65 6f 66 28 4d  t((M),0,sizeof(M
1f740 29 29 0a 23 20 64 65 66 69 6e 65 20 44 62 4d 61  )).# define DbMa
1f750 73 6b 53 65 74 28 4d 2c 49 29 20 20 20 20 20 28  skSet(M,I)     (
1f760 4d 29 5b 28 49 29 2f 38 5d 7c 3d 28 31 3c 3c 28  M)[(I)/8]|=(1<<(
1f770 28 49 29 26 37 29 29 0a 23 20 64 65 66 69 6e 65  (I)&7)).# define
1f780 20 44 62 4d 61 73 6b 41 6c 6c 5a 65 72 6f 28 4d   DbMaskAllZero(M
1f790 29 20 20 20 73 71 6c 69 74 65 33 44 62 4d 61 73  )   sqlite3DbMas
1f7a0 6b 41 6c 6c 5a 65 72 6f 28 4d 29 0a 23 20 64 65  kAllZero(M).# de
1f7b0 66 69 6e 65 20 44 62 4d 61 73 6b 4e 6f 6e 5a 65  fine DbMaskNonZe
1f7c0 72 6f 28 4d 29 20 20 20 28 73 71 6c 69 74 65 33  ro(M)   (sqlite3
1f7d0 44 62 4d 61 73 6b 41 6c 6c 5a 65 72 6f 28 4d 29  DbMaskAllZero(M)
1f7e0 3d 3d 30 29 0a 23 65 6c 73 65 0a 20 20 74 79 70  ==0).#else.  typ
1f7f0 65 64 65 66 20 75 6e 73 69 67 6e 65 64 20 69 6e  edef unsigned in
1f800 74 20 79 44 62 4d 61 73 6b 3b 0a 23 20 64 65 66  t yDbMask;.# def
1f810 69 6e 65 20 44 62 4d 61 73 6b 54 65 73 74 28 4d  ine DbMaskTest(M
1f820 2c 49 29 20 20 20 20 28 28 28 4d 29 26 28 28 28  ,I)    (((M)&(((
1f830 79 44 62 4d 61 73 6b 29 31 29 3c 3c 28 49 29 29  yDbMask)1)<<(I))
1f840 29 21 3d 30 29 0a 23 20 64 65 66 69 6e 65 20 44  )!=0).# define D
1f850 62 4d 61 73 6b 5a 65 72 6f 28 4d 29 20 20 20 20  bMaskZero(M)    
1f860 20 20 28 4d 29 3d 30 0a 23 20 64 65 66 69 6e 65    (M)=0.# define
1f870 20 44 62 4d 61 73 6b 53 65 74 28 4d 2c 49 29 20   DbMaskSet(M,I) 
1f880 20 20 20 20 28 4d 29 7c 3d 28 28 28 79 44 62 4d      (M)|=(((yDbM
1f890 61 73 6b 29 31 29 3c 3c 28 49 29 29 0a 23 20 64  ask)1)<<(I)).# d
1f8a0 65 66 69 6e 65 20 44 62 4d 61 73 6b 41 6c 6c 5a  efine DbMaskAllZ
1f8b0 65 72 6f 28 4d 29 20 20 20 28 4d 29 3d 3d 30 0a  ero(M)   (M)==0.
1f8c0 23 20 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 4e  # define DbMaskN
1f8d0 6f 6e 5a 65 72 6f 28 4d 29 20 20 20 28 4d 29 21  onZero(M)   (M)!
1f8e0 3d 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  =0.#endif../*.**
1f8f0 20 41 6e 20 53 51 4c 20 70 61 72 73 65 72 20 63   An SQL parser c
1f900 6f 6e 74 65 78 74 2e 20 20 41 20 63 6f 70 79 20  ontext.  A copy 
1f910 6f 66 20 74 68 69 73 20 73 74 72 75 63 74 75 72  of this structur
1f920 65 20 69 73 20 70 61 73 73 65 64 20 74 68 72 6f  e is passed thro
1f930 75 67 68 0a 2a 2a 20 74 68 65 20 70 61 72 73 65  ugh.** the parse
1f940 72 20 61 6e 64 20 64 6f 77 6e 20 69 6e 74 6f 20  r and down into 
1f950 61 6c 6c 20 74 68 65 20 70 61 72 73 65 72 20 61  all the parser a
1f960 63 74 69 6f 6e 20 72 6f 75 74 69 6e 65 20 69 6e  ction routine in
1f970 20 6f 72 64 65 72 20 74 6f 0a 2a 2a 20 63 61 72   order to.** car
1f980 72 79 20 61 72 6f 75 6e 64 20 69 6e 66 6f 72 6d  ry around inform
1f990 61 74 69 6f 6e 20 74 68 61 74 20 69 73 20 67 6c  ation that is gl
1f9a0 6f 62 61 6c 20 74 6f 20 74 68 65 20 65 6e 74 69  obal to the enti
1f9b0 72 65 20 70 61 72 73 65 2e 0a 2a 2a 0a 2a 2a 20  re parse..**.** 
1f9c0 54 68 65 20 73 74 72 75 63 74 75 72 65 20 69 73  The structure is
1f9d0 20 64 69 76 69 64 65 64 20 69 6e 74 6f 20 74 77   divided into tw
1f9e0 6f 20 70 61 72 74 73 2e 20 20 57 68 65 6e 20 74  o parts.  When t
1f9f0 68 65 20 70 61 72 73 65 72 20 61 6e 64 20 63 6f  he parser and co
1fa00 64 65 0a 2a 2a 20 67 65 6e 65 72 61 74 65 20 63  de.** generate c
1fa10 61 6c 6c 20 74 68 65 6d 73 65 6c 76 65 73 20 72  all themselves r
1fa20 65 63 75 72 73 69 76 65 6c 79 2c 20 74 68 65 20  ecursively, the 
1fa30 66 69 72 73 74 20 70 61 72 74 20 6f 66 20 74 68  first part of th
1fa40 65 20 73 74 72 75 63 74 75 72 65 0a 2a 2a 20 69  e structure.** i
1fa50 73 20 63 6f 6e 73 74 61 6e 74 20 62 75 74 20 74  s constant but t
1fa60 68 65 20 73 65 63 6f 6e 64 20 70 61 72 74 20 69  he second part i
1fa70 73 20 72 65 73 65 74 20 61 74 20 74 68 65 20 62  s reset at the b
1fa80 65 67 69 6e 6e 69 6e 67 20 61 6e 64 20 65 6e 64  eginning and end
1fa90 20 6f 66 0a 2a 2a 20 65 61 63 68 20 72 65 63 75   of.** each recu
1faa0 72 73 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  rsion..**.** The
1fab0 20 6e 54 61 62 6c 65 4c 6f 63 6b 20 61 6e 64 20   nTableLock and 
1fac0 61 54 61 62 6c 65 4c 6f 63 6b 20 76 61 72 69 61  aTableLock varia
1fad0 62 6c 65 73 20 61 72 65 20 6f 6e 6c 79 20 75 73  bles are only us
1fae0 65 64 20 69 66 20 74 68 65 20 73 68 61 72 65 64  ed if the shared
1faf0 2d 63 61 63 68 65 0a 2a 2a 20 66 65 61 74 75 72  -cache.** featur
1fb00 65 20 69 73 20 65 6e 61 62 6c 65 64 20 28 69 66  e is enabled (if
1fb10 20 73 71 6c 69 74 65 33 54 73 64 28 29 2d 3e 75   sqlite3Tsd()->u
1fb20 73 65 53 68 61 72 65 64 44 61 74 61 20 69 73 20  seSharedData is 
1fb30 74 72 75 65 29 2e 20 54 68 65 79 20 61 72 65 0a  true). They are.
1fb40 2a 2a 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65  ** used to store
1fb50 20 74 68 65 20 73 65 74 20 6f 66 20 74 61 62 6c   the set of tabl
1fb60 65 2d 6c 6f 63 6b 73 20 72 65 71 75 69 72 65 64  e-locks required
1fb70 20 62 79 20 74 68 65 20 73 74 61 74 65 6d 65 6e   by the statemen
1fb80 74 20 62 65 69 6e 67 0a 2a 2a 20 63 6f 6d 70 69  t being.** compi
1fb90 6c 65 64 2e 20 46 75 6e 63 74 69 6f 6e 20 73 71  led. Function sq
1fba0 6c 69 74 65 33 54 61 62 6c 65 4c 6f 63 6b 28 29  lite3TableLock()
1fbb0 20 69 73 20 75 73 65 64 20 74 6f 20 61 64 64 20   is used to add 
1fbc0 65 6e 74 72 69 65 73 20 74 6f 20 74 68 65 0a 2a  entries to the.*
1fbd0 2a 20 6c 69 73 74 2e 0a 2a 2f 0a 73 74 72 75 63  * list..*/.struc
1fbe0 74 20 50 61 72 73 65 20 7b 0a 20 20 73 71 6c 69  t Parse {.  sqli
1fbf0 74 65 33 20 2a 64 62 3b 20 20 20 20 20 20 20 20  te3 *db;        
1fc00 20 2f 2a 20 54 68 65 20 6d 61 69 6e 20 64 61 74   /* The main dat
1fc10 61 62 61 73 65 20 73 74 72 75 63 74 75 72 65 20  abase structure 
1fc20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 45 72 72 4d  */.  char *zErrM
1fc30 73 67 3b 20 20 20 20 20 20 20 2f 2a 20 41 6e 20  sg;       /* An 
1fc40 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20 2a 2f  error message */
1fc50 0a 20 20 56 64 62 65 20 2a 70 56 64 62 65 3b 20  .  Vdbe *pVdbe; 
1fc60 20 20 20 20 20 20 20 20 2f 2a 20 41 6e 20 65 6e          /* An en
1fc70 67 69 6e 65 20 66 6f 72 20 65 78 65 63 75 74 69  gine for executi
1fc80 6e 67 20 64 61 74 61 62 61 73 65 20 62 79 74 65  ng database byte
1fc90 63 6f 64 65 20 2a 2f 0a 20 20 69 6e 74 20 72 63  code */.  int rc
1fca0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
1fcb0 2a 20 52 65 74 75 72 6e 20 63 6f 64 65 20 66 72  * Return code fr
1fcc0 6f 6d 20 65 78 65 63 75 74 69 6f 6e 20 2a 2f 0a  om execution */.
1fcd0 20 20 75 38 20 63 6f 6c 4e 61 6d 65 73 53 65 74    u8 colNamesSet
1fce0 3b 20 20 20 20 20 20 2f 2a 20 54 52 55 45 20 61  ;      /* TRUE a
1fcf0 66 74 65 72 20 4f 50 5f 43 6f 6c 75 6d 6e 4e 61  fter OP_ColumnNa
1fd00 6d 65 20 68 61 73 20 62 65 65 6e 20 69 73 73 75  me has been issu
1fd10 65 64 20 74 6f 20 70 56 64 62 65 20 2a 2f 0a 20  ed to pVdbe */. 
1fd20 20 75 38 20 63 68 65 63 6b 53 63 68 65 6d 61 3b   u8 checkSchema;
1fd30 20 20 20 20 20 20 2f 2a 20 43 61 75 73 65 73 20        /* Causes 
1fd40 73 63 68 65 6d 61 20 63 6f 6f 6b 69 65 20 63 68  schema cookie ch
1fd50 65 63 6b 20 61 66 74 65 72 20 61 6e 20 65 72 72  eck after an err
1fd60 6f 72 20 2a 2f 0a 20 20 75 38 20 6e 65 73 74 65  or */.  u8 neste
1fd70 64 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  d;           /* 
1fd80 4e 75 6d 62 65 72 20 6f 66 20 6e 65 73 74 65 64  Number of nested
1fd90 20 63 61 6c 6c 73 20 74 6f 20 74 68 65 20 70 61   calls to the pa
1fda0 72 73 65 72 2f 63 6f 64 65 20 67 65 6e 65 72 61  rser/code genera
1fdb0 74 6f 72 20 2a 2f 0a 20 20 75 38 20 6e 54 65 6d  tor */.  u8 nTem
1fdc0 70 52 65 67 3b 20 20 20 20 20 20 20 20 20 2f 2a  pReg;         /*
1fdd0 20 4e 75 6d 62 65 72 20 6f 66 20 74 65 6d 70 6f   Number of tempo
1fde0 72 61 72 79 20 72 65 67 69 73 74 65 72 73 20 69  rary registers i
1fdf0 6e 20 61 54 65 6d 70 52 65 67 5b 5d 20 2a 2f 0a  n aTempReg[] */.
1fe00 20 20 75 38 20 69 73 4d 75 6c 74 69 57 72 69 74    u8 isMultiWrit
1fe10 65 3b 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69  e;     /* True i
1fe20 66 20 73 74 61 74 65 6d 65 6e 74 20 6d 61 79 20  f statement may 
1fe30 6d 6f 64 69 66 79 2f 69 6e 73 65 72 74 20 6d 75  modify/insert mu
1fe40 6c 74 69 70 6c 65 20 72 6f 77 73 20 2a 2f 0a 20  ltiple rows */. 
1fe50 20 75 38 20 6d 61 79 41 62 6f 72 74 3b 20 20 20   u8 mayAbort;   
1fe60 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66        /* True if
1fe70 20 73 74 61 74 65 6d 65 6e 74 20 6d 61 79 20 74   statement may t
1fe80 68 72 6f 77 20 61 6e 20 41 42 4f 52 54 20 65 78  hrow an ABORT ex
1fe90 63 65 70 74 69 6f 6e 20 2a 2f 0a 20 20 75 38 20  ception */.  u8 
1fea0 68 61 73 43 6f 6d 70 6f 75 6e 64 3b 20 20 20 20  hasCompound;    
1feb0 20 20 2f 2a 20 4e 65 65 64 20 74 6f 20 69 6e 76    /* Need to inv
1fec0 6f 6b 65 20 63 6f 6e 76 65 72 74 43 6f 6d 70 6f  oke convertCompo
1fed0 75 6e 64 53 65 6c 65 63 74 54 6f 53 75 62 71 75  undSelectToSubqu
1fee0 65 72 79 28 29 20 2a 2f 0a 20 20 75 38 20 6f 6b  ery() */.  u8 ok
1fef0 43 6f 6e 73 74 46 61 63 74 6f 72 3b 20 20 20 20  ConstFactor;    
1ff00 2f 2a 20 4f 4b 20 74 6f 20 66 61 63 74 6f 72 20  /* OK to factor 
1ff10 6f 75 74 20 63 6f 6e 73 74 61 6e 74 73 20 2a 2f  out constants */
1ff20 0a 20 20 75 38 20 64 69 73 61 62 6c 65 4c 6f 6f  .  u8 disableLoo
1ff30 6b 61 73 69 64 65 3b 20 2f 2a 20 4e 75 6d 62 65  kaside; /* Numbe
1ff40 72 20 6f 66 20 74 69 6d 65 73 20 6c 6f 6f 6b 61  r of times looka
1ff50 73 69 64 65 20 68 61 73 20 62 65 65 6e 20 64 69  side has been di
1ff60 73 61 62 6c 65 64 20 2a 2f 0a 20 20 75 38 20 6e  sabled */.  u8 n
1ff70 43 6f 6c 43 61 63 68 65 3b 20 20 20 20 20 20 20  ColCache;       
1ff80 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 6e   /* Number of en
1ff90 74 72 69 65 73 20 69 6e 20 61 43 6f 6c 43 61 63  tries in aColCac
1ffa0 68 65 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 6e 52  he[] */.  int nR
1ffb0 61 6e 67 65 52 65 67 3b 20 20 20 20 20 20 20 2f  angeReg;       /
1ffc0 2a 20 53 69 7a 65 20 6f 66 20 74 68 65 20 74 65  * Size of the te
1ffd0 6d 70 6f 72 61 72 79 20 72 65 67 69 73 74 65 72  mporary register
1ffe0 20 62 6c 6f 63 6b 20 2a 2f 0a 20 20 69 6e 74 20   block */.  int 
1fff0 69 52 61 6e 67 65 52 65 67 3b 20 20 20 20 20 20  iRangeReg;      
20000 20 2f 2a 20 46 69 72 73 74 20 72 65 67 69 73 74   /* First regist
20010 65 72 20 69 6e 20 74 65 6d 70 6f 72 61 72 79 20  er in temporary 
20020 72 65 67 69 73 74 65 72 20 62 6c 6f 63 6b 20 2a  register block *
20030 2f 0a 20 20 69 6e 74 20 6e 45 72 72 3b 20 20 20  /.  int nErr;   
20040 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
20050 65 72 20 6f 66 20 65 72 72 6f 72 73 20 73 65 65  er of errors see
20060 6e 20 2a 2f 0a 20 20 69 6e 74 20 6e 54 61 62 3b  n */.  int nTab;
20070 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
20080 75 6d 62 65 72 20 6f 66 20 70 72 65 76 69 6f 75  umber of previou
20090 73 6c 79 20 61 6c 6c 6f 63 61 74 65 64 20 56 44  sly allocated VD
200a0 42 45 20 63 75 72 73 6f 72 73 20 2a 2f 0a 20 20  BE cursors */.  
200b0 69 6e 74 20 6e 4d 65 6d 3b 20 20 20 20 20 20 20  int nMem;       
200c0 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
200d0 66 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 73 20 75  f memory cells u
200e0 73 65 64 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20  sed so far */.  
200f0 69 6e 74 20 6e 4f 70 41 6c 6c 6f 63 3b 20 20 20  int nOpAlloc;   
20100 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
20110 66 20 73 6c 6f 74 73 20 61 6c 6c 6f 63 61 74 65  f slots allocate
20120 64 20 66 6f 72 20 56 64 62 65 2e 61 4f 70 5b 5d  d for Vdbe.aOp[]
20130 20 2a 2f 0a 20 20 69 6e 74 20 73 7a 4f 70 41 6c   */.  int szOpAl
20140 6c 6f 63 3b 20 20 20 20 20 20 20 2f 2a 20 42 79  loc;       /* By
20150 74 65 73 20 6f 66 20 6d 65 6d 6f 72 79 20 73 70  tes of memory sp
20160 61 63 65 20 61 6c 6c 6f 63 61 74 65 64 20 66 6f  ace allocated fo
20170 72 20 56 64 62 65 2e 61 4f 70 5b 5d 20 2a 2f 0a  r Vdbe.aOp[] */.
20180 20 20 69 6e 74 20 69 53 65 6c 66 54 61 62 3b 20    int iSelfTab; 
20190 20 20 20 20 20 20 20 2f 2a 20 54 61 62 6c 65 20         /* Table 
201a0 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20  associated with 
201b0 61 6e 20 69 6e 64 65 78 20 6f 6e 20 65 78 70 72  an index on expr
201c0 2c 20 6f 72 20 6e 65 67 61 74 69 76 65 0a 20 20  , or negative.  
201d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
201e0 20 20 20 20 20 2a 2a 20 6f 66 20 74 68 65 20 62       ** of the b
201f0 61 73 65 20 72 65 67 69 73 74 65 72 20 64 75 72  ase register dur
20200 69 6e 67 20 63 68 65 63 6b 2d 63 6f 6e 73 74 72  ing check-constr
20210 61 69 6e 74 20 65 76 61 6c 20 2a 2f 0a 20 20 69  aint eval */.  i
20220 6e 74 20 69 43 61 63 68 65 4c 65 76 65 6c 3b 20  nt iCacheLevel; 
20230 20 20 20 20 2f 2a 20 43 6f 6c 43 61 63 68 65 20      /* ColCache 
20240 76 61 6c 69 64 20 77 68 65 6e 20 61 43 6f 6c 43  valid when aColC
20250 61 63 68 65 5b 5d 2e 69 4c 65 76 65 6c 3c 3d 69  ache[].iLevel<=i
20260 43 61 63 68 65 4c 65 76 65 6c 20 2a 2f 0a 20 20  CacheLevel */.  
20270 69 6e 74 20 69 43 61 63 68 65 43 6e 74 3b 20 20  int iCacheCnt;  
20280 20 20 20 20 20 2f 2a 20 43 6f 75 6e 74 65 72 20       /* Counter 
20290 75 73 65 64 20 74 6f 20 67 65 6e 65 72 61 74 65  used to generate
202a0 20 61 43 6f 6c 43 61 63 68 65 5b 5d 2e 6c 72 75   aColCache[].lru
202b0 20 76 61 6c 75 65 73 20 2a 2f 0a 20 20 69 6e 74   values */.  int
202c0 20 6e 4c 61 62 65 6c 3b 20 20 20 20 20 20 20 20   nLabel;        
202d0 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6c    /* Number of l
202e0 61 62 65 6c 73 20 75 73 65 64 20 2a 2f 0a 20 20  abels used */.  
202f0 69 6e 74 20 2a 61 4c 61 62 65 6c 3b 20 20 20 20  int *aLabel;    
20300 20 20 20 20 20 2f 2a 20 53 70 61 63 65 20 74 6f       /* Space to
20310 20 68 6f 6c 64 20 74 68 65 20 6c 61 62 65 6c 73   hold the labels
20320 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20 2a   */.  ExprList *
20330 70 43 6f 6e 73 74 45 78 70 72 3b 2f 2a 20 43 6f  pConstExpr;/* Co
20340 6e 73 74 61 6e 74 20 65 78 70 72 65 73 73 69 6f  nstant expressio
20350 6e 73 20 2a 2f 0a 20 20 54 6f 6b 65 6e 20 63 6f  ns */.  Token co
20360 6e 73 74 72 61 69 6e 74 4e 61 6d 65 3b 2f 2a 20  nstraintName;/* 
20370 4e 61 6d 65 20 6f 66 20 74 68 65 20 63 6f 6e 73  Name of the cons
20380 74 72 61 69 6e 74 20 63 75 72 72 65 6e 74 6c 79  traint currently
20390 20 62 65 69 6e 67 20 70 61 72 73 65 64 20 2a 2f   being parsed */
203a0 0a 20 20 79 44 62 4d 61 73 6b 20 77 72 69 74 65  .  yDbMask write
203b0 4d 61 73 6b 3b 20 20 20 2f 2a 20 53 74 61 72 74  Mask;   /* Start
203c0 20 61 20 77 72 69 74 65 20 74 72 61 6e 73 61 63   a write transac
203d0 74 69 6f 6e 20 6f 6e 20 74 68 65 73 65 20 64 61  tion on these da
203e0 74 61 62 61 73 65 73 20 2a 2f 0a 20 20 79 44 62  tabases */.  yDb
203f0 4d 61 73 6b 20 63 6f 6f 6b 69 65 4d 61 73 6b 3b  Mask cookieMask;
20400 20 20 2f 2a 20 42 69 74 6d 61 73 6b 20 6f 66 20    /* Bitmask of 
20410 73 63 68 65 6d 61 20 76 65 72 69 66 69 65 64 20  schema verified 
20420 64 61 74 61 62 61 73 65 73 20 2a 2f 0a 20 20 69  databases */.  i
20430 6e 74 20 72 65 67 52 6f 77 69 64 3b 20 20 20 20  nt regRowid;    
20440 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20      /* Register 
20450 68 6f 6c 64 69 6e 67 20 72 6f 77 69 64 20 6f 66  holding rowid of
20460 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 65 6e   CREATE TABLE en
20470 74 72 79 20 2a 2f 0a 20 20 69 6e 74 20 72 65 67  try */.  int reg
20480 52 6f 6f 74 3b 20 20 20 20 20 20 20 20 20 2f 2a  Root;         /*
20490 20 52 65 67 69 73 74 65 72 20 68 6f 6c 64 69 6e   Register holdin
204a0 67 20 72 6f 6f 74 20 70 61 67 65 20 6e 75 6d 62  g root page numb
204b0 65 72 20 66 6f 72 20 6e 65 77 20 6f 62 6a 65 63  er for new objec
204c0 74 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 4d 61 78  ts */.  int nMax
204d0 41 72 67 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  Arg;         /* 
204e0 4d 61 78 20 61 72 67 73 20 70 61 73 73 65 64 20  Max args passed 
204f0 74 6f 20 75 73 65 72 20 66 75 6e 63 74 69 6f 6e  to user function
20500 20 62 79 20 73 75 62 2d 70 72 6f 67 72 61 6d 20   by sub-program 
20510 2a 2f 0a 23 69 66 20 53 45 4c 45 43 54 54 52 41  */.#if SELECTTRA
20520 43 45 5f 45 4e 41 42 4c 45 44 0a 20 20 69 6e 74  CE_ENABLED.  int
20530 20 6e 53 65 6c 65 63 74 3b 20 20 20 20 20 20 20   nSelect;       
20540 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 53    /* Number of S
20550 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 73  ELECT statements
20560 20 73 65 65 6e 20 2a 2f 0a 23 65 6e 64 69 66 0a   seen */.#endif.
20570 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
20580 4d 49 54 5f 53 48 41 52 45 44 5f 43 41 43 48 45  MIT_SHARED_CACHE
20590 0a 20 20 69 6e 74 20 6e 54 61 62 6c 65 4c 6f 63  .  int nTableLoc
205a0 6b 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d  k;        /* Num
205b0 62 65 72 20 6f 66 20 6c 6f 63 6b 73 20 69 6e 20  ber of locks in 
205c0 61 54 61 62 6c 65 4c 6f 63 6b 20 2a 2f 0a 20 20  aTableLock */.  
205d0 54 61 62 6c 65 4c 6f 63 6b 20 2a 61 54 61 62 6c  TableLock *aTabl
205e0 65 4c 6f 63 6b 3b 20 2f 2a 20 52 65 71 75 69 72  eLock; /* Requir
205f0 65 64 20 74 61 62 6c 65 20 6c 6f 63 6b 73 20 66  ed table locks f
20600 6f 72 20 73 68 61 72 65 64 2d 63 61 63 68 65 20  or shared-cache 
20610 6d 6f 64 65 20 2a 2f 0a 23 65 6e 64 69 66 0a 20  mode */.#endif. 
20620 20 41 75 74 6f 69 6e 63 49 6e 66 6f 20 2a 70 41   AutoincInfo *pA
20630 69 6e 63 3b 20 20 2f 2a 20 49 6e 66 6f 72 6d 61  inc;  /* Informa
20640 74 69 6f 6e 20 61 62 6f 75 74 20 41 55 54 4f 49  tion about AUTOI
20650 4e 43 52 45 4d 45 4e 54 20 63 6f 75 6e 74 65 72  NCREMENT counter
20660 73 20 2a 2f 0a 20 20 50 61 72 73 65 20 2a 70 54  s */.  Parse *pT
20670 6f 70 6c 65 76 65 6c 3b 20 20 20 20 2f 2a 20 50  oplevel;    /* P
20680 61 72 73 65 20 73 74 72 75 63 74 75 72 65 20 66  arse structure f
20690 6f 72 20 6d 61 69 6e 20 70 72 6f 67 72 61 6d 20  or main program 
206a0 28 6f 72 20 4e 55 4c 4c 29 20 2a 2f 0a 20 20 54  (or NULL) */.  T
206b0 61 62 6c 65 20 2a 70 54 72 69 67 67 65 72 54 61  able *pTriggerTa
206c0 62 3b 20 20 2f 2a 20 54 61 62 6c 65 20 74 72 69  b;  /* Table tri
206d0 67 67 65 72 73 20 61 72 65 20 62 65 69 6e 67 20  ggers are being 
206e0 63 6f 64 65 64 20 66 6f 72 20 2a 2f 0a 20 20 69  coded for */.  i
206f0 6e 74 20 61 64 64 72 43 72 54 61 62 3b 20 20 20  nt addrCrTab;   
20700 20 20 20 20 2f 2a 20 41 64 64 72 65 73 73 20 6f      /* Address o
20710 66 20 4f 50 5f 43 72 65 61 74 65 42 74 72 65 65  f OP_CreateBtree
20720 20 6f 70 63 6f 64 65 20 6f 6e 20 43 52 45 41 54   opcode on CREAT
20730 45 20 54 41 42 4c 45 20 2a 2f 0a 20 20 75 33 32  E TABLE */.  u32
20740 20 6e 51 75 65 72 79 4c 6f 6f 70 3b 20 20 20 20   nQueryLoop;    
20750 20 20 2f 2a 20 45 73 74 20 6e 75 6d 62 65 72 20    /* Est number 
20760 6f 66 20 69 74 65 72 61 74 69 6f 6e 73 20 6f 66  of iterations of
20770 20 61 20 71 75 65 72 79 20 28 31 30 2a 6c 6f 67   a query (10*log
20780 32 28 4e 29 29 20 2a 2f 0a 20 20 75 33 32 20 6f  2(N)) */.  u32 o
20790 6c 64 6d 61 73 6b 3b 20 20 20 20 20 20 20 20 20  ldmask;         
207a0 2f 2a 20 4d 61 73 6b 20 6f 66 20 6f 6c 64 2e 2a  /* Mask of old.*
207b0 20 63 6f 6c 75 6d 6e 73 20 72 65 66 65 72 65 6e   columns referen
207c0 63 65 64 20 2a 2f 0a 20 20 75 33 32 20 6e 65 77  ced */.  u32 new
207d0 6d 61 73 6b 3b 20 20 20 20 20 20 20 20 20 2f 2a  mask;         /*
207e0 20 4d 61 73 6b 20 6f 66 20 6e 65 77 2e 2a 20 63   Mask of new.* c
207f0 6f 6c 75 6d 6e 73 20 72 65 66 65 72 65 6e 63 65  olumns reference
20800 64 20 2a 2f 0a 20 20 75 38 20 65 54 72 69 67 67  d */.  u8 eTrigg
20810 65 72 4f 70 3b 20 20 20 20 20 20 20 2f 2a 20 54  erOp;       /* T
20820 4b 5f 55 50 44 41 54 45 2c 20 54 4b 5f 49 4e 53  K_UPDATE, TK_INS
20830 45 52 54 20 6f 72 20 54 4b 5f 44 45 4c 45 54 45  ERT or TK_DELETE
20840 20 2a 2f 0a 20 20 75 38 20 65 4f 72 63 6f 6e 66   */.  u8 eOrconf
20850 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 65  ;          /* De
20860 66 61 75 6c 74 20 4f 4e 20 43 4f 4e 46 4c 49 43  fault ON CONFLIC
20870 54 20 70 6f 6c 69 63 79 20 66 6f 72 20 74 72 69  T policy for tri
20880 67 67 65 72 20 73 74 65 70 73 20 2a 2f 0a 20 20  gger steps */.  
20890 75 38 20 64 69 73 61 62 6c 65 54 72 69 67 67 65  u8 disableTrigge
208a0 72 73 3b 20 20 2f 2a 20 54 72 75 65 20 74 6f 20  rs;  /* True to 
208b0 64 69 73 61 62 6c 65 20 74 72 69 67 67 65 72 73  disable triggers
208c0 20 2a 2f 0a 0a 20 20 2f 2a 2a 2a 2a 2a 2a 2a 2a   */..  /********
208d0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
208e0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
208f0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
20900 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
20910 2a 2a 0a 20 20 2a 2a 20 46 69 65 6c 64 73 20 61  **.  ** Fields a
20920 62 6f 76 65 20 6d 75 73 74 20 62 65 20 69 6e 69  bove must be ini
20930 74 69 61 6c 69 7a 65 64 20 74 6f 20 7a 65 72 6f  tialized to zero
20940 2e 20 20 54 68 65 20 66 69 65 6c 64 73 20 74 68  .  The fields th
20950 61 74 20 66 6f 6c 6c 6f 77 2c 0a 20 20 2a 2a 20  at follow,.  ** 
20960 64 6f 77 6e 20 74 6f 20 74 68 65 20 62 65 67 69  down to the begi
20970 6e 6e 69 6e 67 20 6f 66 20 74 68 65 20 72 65 63  nning of the rec
20980 75 72 73 69 76 65 20 73 65 63 74 69 6f 6e 2c 20  ursive section, 
20990 64 6f 20 6e 6f 74 20 6e 65 65 64 20 74 6f 20 62  do not need to b
209a0 65 0a 20 20 2a 2a 20 69 6e 69 74 69 61 6c 69 7a  e.  ** initializ
209b0 65 64 20 61 73 20 74 68 65 79 20 77 69 6c 6c 20  ed as they will 
209c0 62 65 20 73 65 74 20 62 65 66 6f 72 65 20 62 65  be set before be
209d0 69 6e 67 20 75 73 65 64 2e 20 20 54 68 65 20 62  ing used.  The b
209e0 6f 75 6e 64 61 72 79 20 69 73 0a 20 20 2a 2a 20  oundary is.  ** 
209f0 64 65 74 65 72 6d 69 6e 65 64 20 62 79 20 6f 66  determined by of
20a00 66 73 65 74 6f 66 28 50 61 72 73 65 2c 61 43 6f  fsetof(Parse,aCo
20a10 6c 43 61 63 68 65 29 2e 0a 20 20 2a 2a 2a 2a 2a  lCache)..  *****
20a20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
20a30 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
20a40 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
20a50 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
20a60 2a 2a 2a 2a 2a 2f 0a 0a 20 20 73 74 72 75 63 74  *****/..  struct
20a70 20 79 43 6f 6c 43 61 63 68 65 20 7b 0a 20 20 20   yColCache {.   
20a80 20 69 6e 74 20 69 54 61 62 6c 65 3b 20 20 20 20   int iTable;    
20a90 20 20 20 20 20 20 20 2f 2a 20 54 61 62 6c 65 20         /* Table 
20aa0 63 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 2a 2f  cursor number */
20ab0 0a 20 20 20 20 69 31 36 20 69 43 6f 6c 75 6d 6e  .    i16 iColumn
20ac0 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 61  ;          /* Ta
20ad0 62 6c 65 20 63 6f 6c 75 6d 6e 20 6e 75 6d 62 65  ble column numbe
20ae0 72 20 2a 2f 0a 20 20 20 20 75 38 20 74 65 6d 70  r */.    u8 temp
20af0 52 65 67 3b 20 20 20 20 20 20 20 20 20 20 20 2f  Reg;           /
20b00 2a 20 69 52 65 67 20 69 73 20 61 20 74 65 6d 70  * iReg is a temp
20b10 20 72 65 67 69 73 74 65 72 20 74 68 61 74 20 6e   register that n
20b20 65 65 64 73 20 74 6f 20 62 65 20 66 72 65 65 64  eeds to be freed
20b30 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 4c 65 76   */.    int iLev
20b40 65 6c 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  el;           /*
20b50 20 4e 65 73 74 69 6e 67 20 6c 65 76 65 6c 20 2a   Nesting level *
20b60 2f 0a 20 20 20 20 69 6e 74 20 69 52 65 67 3b 20  /.    int iReg; 
20b70 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52              /* R
20b80 65 67 20 77 69 74 68 20 76 61 6c 75 65 20 6f 66  eg with value of
20b90 20 74 68 69 73 20 63 6f 6c 75 6d 6e 2e 20 30 20   this column. 0 
20ba0 6d 65 61 6e 73 20 6e 6f 6e 65 2e 20 2a 2f 0a 20  means none. */. 
20bb0 20 20 20 69 6e 74 20 6c 72 75 3b 20 20 20 20 20     int lru;     
20bc0 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 65 61 73           /* Leas
20bd0 74 20 72 65 63 65 6e 74 6c 79 20 75 73 65 64 20  t recently used 
20be0 65 6e 74 72 79 20 68 61 73 20 74 68 65 20 73 6d  entry has the sm
20bf0 61 6c 6c 65 73 74 20 76 61 6c 75 65 20 2a 2f 0a  allest value */.
20c00 20 20 7d 20 61 43 6f 6c 43 61 63 68 65 5b 53 51    } aColCache[SQ
20c10 4c 49 54 45 5f 4e 5f 43 4f 4c 43 41 43 48 45 5d  LITE_N_COLCACHE]
20c20 3b 20 20 2f 2a 20 4f 6e 65 20 66 6f 72 20 65 61  ;  /* One for ea
20c30 63 68 20 63 6f 6c 75 6d 6e 20 63 61 63 68 65 20  ch column cache 
20c40 65 6e 74 72 79 20 2a 2f 0a 20 20 69 6e 74 20 61  entry */.  int a
20c50 54 65 6d 70 52 65 67 5b 38 5d 3b 20 20 20 20 20  TempReg[8];     
20c60 20 20 20 2f 2a 20 48 6f 6c 64 69 6e 67 20 61 72     /* Holding ar
20c70 65 61 20 66 6f 72 20 74 65 6d 70 6f 72 61 72 79  ea for temporary
20c80 20 72 65 67 69 73 74 65 72 73 20 2a 2f 0a 20 20   registers */.  
20c90 54 6f 6b 65 6e 20 73 4e 61 6d 65 54 6f 6b 65 6e  Token sNameToken
20ca0 3b 20 20 20 20 20 20 20 2f 2a 20 54 6f 6b 65 6e  ;       /* Token
20cb0 20 77 69 74 68 20 75 6e 71 75 61 6c 69 66 69 65   with unqualifie
20cc0 64 20 73 63 68 65 6d 61 20 6f 62 6a 65 63 74 20  d schema object 
20cd0 6e 61 6d 65 20 2a 2f 0a 0a 20 20 2f 2a 2a 2a 2a  name */..  /****
20ce0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
20cf0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
20d00 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
20d10 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
20d20 2a 2a 2a 2a 0a 20 20 2a 2a 20 41 62 6f 76 65 20  ****.  ** Above 
20d30 69 73 20 63 6f 6e 73 74 61 6e 74 20 62 65 74 77  is constant betw
20d40 65 65 6e 20 72 65 63 75 72 73 69 6f 6e 73 2e 20  een recursions. 
20d50 20 42 65 6c 6f 77 20 69 73 20 72 65 73 65 74 20   Below is reset 
20d60 62 65 66 6f 72 65 20 61 6e 64 20 61 66 74 65 72  before and after
20d70 0a 20 20 2a 2a 20 65 61 63 68 20 72 65 63 75 72  .  ** each recur
20d80 73 69 6f 6e 2e 20 20 54 68 65 20 62 6f 75 6e 64  sion.  The bound
20d90 61 72 79 20 62 65 74 77 65 65 6e 20 74 68 65 73  ary between thes
20da0 65 20 74 77 6f 20 72 65 67 69 6f 6e 73 20 69 73  e two regions is
20db0 20 64 65 74 65 72 6d 69 6e 65 64 0a 20 20 2a 2a   determined.  **
20dc0 20 75 73 69 6e 67 20 6f 66 66 73 65 74 6f 66 28   using offsetof(
20dd0 50 61 72 73 65 2c 73 4c 61 73 74 54 6f 6b 65 6e  Parse,sLastToken
20de0 29 20 73 6f 20 74 68 65 20 73 4c 61 73 74 54 6f  ) so the sLastTo
20df0 6b 65 6e 20 66 69 65 6c 64 20 6d 75 73 74 20 62  ken field must b
20e00 65 20 74 68 65 0a 20 20 2a 2a 20 66 69 72 73 74  e the.  ** first
20e10 20 66 69 65 6c 64 20 69 6e 20 74 68 65 20 72 65   field in the re
20e20 63 75 72 73 69 76 65 20 72 65 67 69 6f 6e 2e 0a  cursive region..
20e30 20 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a    **************
20e40 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
20e50 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
20e60 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
20e70 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 20 20 54  **********/..  T
20e80 6f 6b 65 6e 20 73 4c 61 73 74 54 6f 6b 65 6e 3b  oken sLastToken;
20e90 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6c 61         /* The la
20ea0 73 74 20 74 6f 6b 65 6e 20 70 61 72 73 65 64 20  st token parsed 
20eb0 2a 2f 0a 20 20 79 6e 56 61 72 20 6e 56 61 72 3b  */.  ynVar nVar;
20ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
20ed0 2a 20 4e 75 6d 62 65 72 20 6f 66 20 27 3f 27 20  * Number of '?' 
20ee0 76 61 72 69 61 62 6c 65 73 20 73 65 65 6e 20 69  variables seen i
20ef0 6e 20 74 68 65 20 53 51 4c 20 73 6f 20 66 61 72  n the SQL so far
20f00 20 2a 2f 0a 20 20 75 38 20 69 50 6b 53 6f 72 74   */.  u8 iPkSort
20f10 4f 72 64 65 72 3b 20 20 20 20 20 20 20 20 20 20  Order;          
20f20 2f 2a 20 41 53 43 20 6f 72 20 44 45 53 43 20 66  /* ASC or DESC f
20f30 6f 72 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41  or INTEGER PRIMA
20f40 52 59 20 4b 45 59 20 2a 2f 0a 20 20 75 38 20 65  RY KEY */.  u8 e
20f50 78 70 6c 61 69 6e 3b 20 20 20 20 20 20 20 20 20  xplain;         
20f60 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66        /* True if
20f70 20 74 68 65 20 45 58 50 4c 41 49 4e 20 66 6c 61   the EXPLAIN fla
20f80 67 20 69 73 20 66 6f 75 6e 64 20 6f 6e 20 74 68  g is found on th
20f90 65 20 71 75 65 72 79 20 2a 2f 0a 23 69 66 6e 64  e query */.#ifnd
20fa0 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  ef SQLITE_OMIT_V
20fb0 49 52 54 55 41 4c 54 41 42 4c 45 0a 20 20 75 38  IRTUALTABLE.  u8
20fc0 20 64 65 63 6c 61 72 65 56 74 61 62 3b 20 20 20   declareVtab;   
20fd0 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20          /* True 
20fe0 69 66 20 69 6e 73 69 64 65 20 73 71 6c 69 74 65  if inside sqlite
20ff0 33 5f 64 65 63 6c 61 72 65 5f 76 74 61 62 28 29  3_declare_vtab()
21000 20 2a 2f 0a 20 20 69 6e 74 20 6e 56 74 61 62 4c   */.  int nVtabL
21010 6f 63 6b 3b 20 20 20 20 20 20 20 20 20 20 20 20  ock;            
21020 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 76 69 72  /* Number of vir
21030 74 75 61 6c 20 74 61 62 6c 65 73 20 74 6f 20 6c  tual tables to l
21040 6f 63 6b 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20  ock */.#endif.  
21050 69 6e 74 20 6e 48 65 69 67 68 74 3b 20 20 20 20  int nHeight;    
21060 20 20 20 20 20 20 20 20 20 20 2f 2a 20 45 78 70            /* Exp
21070 72 65 73 73 69 6f 6e 20 74 72 65 65 20 68 65 69  ression tree hei
21080 67 68 74 20 6f 66 20 63 75 72 72 65 6e 74 20 73  ght of current s
21090 75 62 2d 73 65 6c 65 63 74 20 2a 2f 0a 23 69 66  ub-select */.#if
210a0 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
210b0 5f 45 58 50 4c 41 49 4e 0a 20 20 69 6e 74 20 61  _EXPLAIN.  int a
210c0 64 64 72 45 78 70 6c 61 69 6e 3b 20 20 20 20 20  ddrExplain;     
210d0 20 20 20 20 20 2f 2a 20 41 64 64 72 65 73 73 20       /* Address 
210e0 6f 66 20 63 75 72 72 65 6e 74 20 4f 50 5f 45 78  of current OP_Ex
210f0 70 6c 61 69 6e 20 6f 70 63 6f 64 65 20 2a 2f 0a  plain opcode */.
21100 23 65 6e 64 69 66 0a 20 20 56 4c 69 73 74 20 2a  #endif.  VList *
21110 70 56 4c 69 73 74 3b 20 20 20 20 20 20 20 20 20  pVList;         
21120 20 20 20 2f 2a 20 4d 61 70 70 69 6e 67 20 62 65     /* Mapping be
21130 74 77 65 65 6e 20 76 61 72 69 61 62 6c 65 20 6e  tween variable n
21140 61 6d 65 73 20 61 6e 64 20 6e 75 6d 62 65 72 73  ames and numbers
21150 20 2a 2f 0a 20 20 56 64 62 65 20 2a 70 52 65 70   */.  Vdbe *pRep
21160 72 65 70 61 72 65 3b 20 20 20 20 20 20 20 20 20  repare;         
21170 2f 2a 20 56 4d 20 62 65 69 6e 67 20 72 65 70 72  /* VM being repr
21180 65 70 61 72 65 64 20 28 73 71 6c 69 74 65 33 52  epared (sqlite3R
21190 65 70 72 65 70 61 72 65 28 29 29 20 2a 2f 0a 20  eprepare()) */. 
211a0 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 54 61   const char *zTa
211b0 69 6c 3b 20 20 20 20 20 20 20 20 2f 2a 20 41 6c  il;        /* Al
211c0 6c 20 53 51 4c 20 74 65 78 74 20 70 61 73 74 20  l SQL text past 
211d0 74 68 65 20 6c 61 73 74 20 73 65 6d 69 63 6f 6c  the last semicol
211e0 6f 6e 20 70 61 72 73 65 64 20 2a 2f 0a 20 20 54  on parsed */.  T
211f0 61 62 6c 65 20 2a 70 4e 65 77 54 61 62 6c 65 3b  able *pNewTable;
21200 20 20 20 20 20 20 20 20 20 2f 2a 20 41 20 74 61           /* A ta
21210 62 6c 65 20 62 65 69 6e 67 20 63 6f 6e 73 74 72  ble being constr
21220 75 63 74 65 64 20 62 79 20 43 52 45 41 54 45 20  ucted by CREATE 
21230 54 41 42 4c 45 20 2a 2f 0a 20 20 54 72 69 67 67  TABLE */.  Trigg
21240 65 72 20 2a 70 4e 65 77 54 72 69 67 67 65 72 3b  er *pNewTrigger;
21250 20 20 20 20 20 2f 2a 20 54 72 69 67 67 65 72 20       /* Trigger 
21260 75 6e 64 65 72 20 63 6f 6e 73 74 72 75 63 74 20  under construct 
21270 62 79 20 61 20 43 52 45 41 54 45 20 54 52 49 47  by a CREATE TRIG
21280 47 45 52 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63  GER */.  const c
21290 68 61 72 20 2a 7a 41 75 74 68 43 6f 6e 74 65 78  har *zAuthContex
212a0 74 3b 20 2f 2a 20 54 68 65 20 36 74 68 20 70 61  t; /* The 6th pa
212b0 72 61 6d 65 74 65 72 20 74 6f 20 64 62 2d 3e 78  rameter to db->x
212c0 41 75 74 68 20 63 61 6c 6c 62 61 63 6b 73 20 2a  Auth callbacks *
212d0 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  /.#ifndef SQLITE
212e0 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
212f0 4c 45 0a 20 20 54 6f 6b 65 6e 20 73 41 72 67 3b  LE.  Token sArg;
21300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
21310 2a 20 43 6f 6d 70 6c 65 74 65 20 74 65 78 74 20  * Complete text 
21320 6f 66 20 61 20 6d 6f 64 75 6c 65 20 61 72 67 75  of a module argu
21330 6d 65 6e 74 20 2a 2f 0a 20 20 54 61 62 6c 65 20  ment */.  Table 
21340 2a 2a 61 70 56 74 61 62 4c 6f 63 6b 3b 20 20 20  **apVtabLock;   
21350 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74      /* Pointer t
21360 6f 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 73  o virtual tables
21370 20 6e 65 65 64 69 6e 67 20 6c 6f 63 6b 69 6e 67   needing locking
21380 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 54 61 62   */.#endif.  Tab
21390 6c 65 20 2a 70 5a 6f 6d 62 69 65 54 61 62 3b 20  le *pZombieTab; 
213a0 20 20 20 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f         /* List o
213b0 66 20 54 61 62 6c 65 20 6f 62 6a 65 63 74 73 20  f Table objects 
213c0 74 6f 20 64 65 6c 65 74 65 20 61 66 74 65 72 20  to delete after 
213d0 63 6f 64 65 20 67 65 6e 20 2a 2f 0a 20 20 54 72  code gen */.  Tr
213e0 69 67 67 65 72 50 72 67 20 2a 70 54 72 69 67 67  iggerPrg *pTrigg
213f0 65 72 50 72 67 3b 20 20 2f 2a 20 4c 69 6e 6b 65  erPrg;  /* Linke
21400 64 20 6c 69 73 74 20 6f 66 20 63 6f 64 65 64 20  d list of coded 
21410 74 72 69 67 67 65 72 73 20 2a 2f 0a 20 20 57 69  triggers */.  Wi
21420 74 68 20 2a 70 57 69 74 68 3b 20 20 20 20 20 20  th *pWith;      
21430 20 20 20 20 20 20 20 20 2f 2a 20 43 75 72 72 65          /* Curre
21440 6e 74 20 57 49 54 48 20 63 6c 61 75 73 65 2c 20  nt WITH clause, 
21450 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 20 20 57 69 74  or NULL */.  Wit
21460 68 20 2a 70 57 69 74 68 54 6f 46 72 65 65 3b 20  h *pWithToFree; 
21470 20 20 20 20 20 20 20 2f 2a 20 46 72 65 65 20 74         /* Free t
21480 68 69 73 20 57 49 54 48 20 6f 62 6a 65 63 74 20  his WITH object 
21490 61 74 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68  at the end of th
214a0 65 20 70 61 72 73 65 20 2a 2f 0a 7d 3b 0a 0a 2f  e parse */.};../
214b0 2a 0a 2a 2a 20 53 69 7a 65 73 20 61 6e 64 20 70  *.** Sizes and p
214c0 6f 69 6e 74 65 72 73 20 6f 66 20 76 61 72 69 6f  ointers of vario
214d0 75 73 20 70 61 72 74 73 20 6f 66 20 74 68 65 20  us parts of the 
214e0 50 61 72 73 65 20 6f 62 6a 65 63 74 2e 0a 2a 2f  Parse object..*/
214f0 0a 23 64 65 66 69 6e 65 20 50 41 52 53 45 5f 48  .#define PARSE_H
21500 44 52 5f 53 5a 20 6f 66 66 73 65 74 6f 66 28 50  DR_SZ offsetof(P
21510 61 72 73 65 2c 61 43 6f 6c 43 61 63 68 65 29 20  arse,aColCache) 
21520 2f 2a 20 52 65 63 75 72 73 69 76 65 20 70 61 72  /* Recursive par
21530 74 20 77 2f 6f 20 61 43 6f 6c 43 61 63 68 65 2a  t w/o aColCache*
21540 2f 0a 23 64 65 66 69 6e 65 20 50 41 52 53 45 5f  /.#define PARSE_
21550 52 45 43 55 52 53 45 5f 53 5a 20 6f 66 66 73 65  RECURSE_SZ offse
21560 74 6f 66 28 50 61 72 73 65 2c 73 4c 61 73 74 54  tof(Parse,sLastT
21570 6f 6b 65 6e 29 20 20 20 20 2f 2a 20 52 65 63 75  oken)    /* Recu
21580 72 73 69 76 65 20 70 61 72 74 20 2a 2f 0a 23 64  rsive part */.#d
21590 65 66 69 6e 65 20 50 41 52 53 45 5f 54 41 49 4c  efine PARSE_TAIL
215a0 5f 53 5a 20 28 73 69 7a 65 6f 66 28 50 61 72 73  _SZ (sizeof(Pars
215b0 65 29 2d 50 41 52 53 45 5f 52 45 43 55 52 53 45  e)-PARSE_RECURSE
215c0 5f 53 5a 29 20 2f 2a 20 4e 6f 6e 2d 72 65 63 75  _SZ) /* Non-recu
215d0 72 73 69 76 65 20 70 61 72 74 20 2a 2f 0a 23 64  rsive part */.#d
215e0 65 66 69 6e 65 20 50 41 52 53 45 5f 54 41 49 4c  efine PARSE_TAIL
215f0 28 58 29 20 28 28 28 63 68 61 72 2a 29 28 58 29  (X) (((char*)(X)
21600 29 2b 50 41 52 53 45 5f 52 45 43 55 52 53 45 5f  )+PARSE_RECURSE_
21610 53 5a 29 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20  SZ)  /* Pointer 
21620 74 6f 20 74 61 69 6c 20 2a 2f 0a 0a 2f 2a 0a 2a  to tail */../*.*
21630 2a 20 52 65 74 75 72 6e 20 74 72 75 65 20 69 66  * Return true if
21640 20 63 75 72 72 65 6e 74 6c 79 20 69 6e 73 69 64   currently insid
21650 65 20 61 6e 20 73 71 6c 69 74 65 33 5f 64 65 63  e an sqlite3_dec
21660 6c 61 72 65 5f 76 74 61 62 28 29 20 63 61 6c 6c  lare_vtab() call
21670 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49  ..*/.#ifdef SQLI
21680 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
21690 41 42 4c 45 0a 20 20 23 64 65 66 69 6e 65 20 49  ABLE.  #define I
216a0 4e 5f 44 45 43 4c 41 52 45 5f 56 54 41 42 20 30  N_DECLARE_VTAB 0
216b0 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65  .#else.  #define
216c0 20 49 4e 5f 44 45 43 4c 41 52 45 5f 56 54 41 42   IN_DECLARE_VTAB
216d0 20 28 70 50 61 72 73 65 2d 3e 64 65 63 6c 61 72   (pParse->declar
216e0 65 56 74 61 62 29 0a 23 65 6e 64 69 66 0a 0a 2f  eVtab).#endif../
216f0 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65  *.** An instance
21700 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   of the followin
21710 67 20 73 74 72 75 63 74 75 72 65 20 63 61 6e 20  g structure can 
21720 62 65 20 64 65 63 6c 61 72 65 64 20 6f 6e 20 61  be declared on a
21730 20 73 74 61 63 6b 20 61 6e 64 20 75 73 65 64 0a   stack and used.
21740 2a 2a 20 74 6f 20 73 61 76 65 20 74 68 65 20 50  ** to save the P
21750 61 72 73 65 2e 7a 41 75 74 68 43 6f 6e 74 65 78  arse.zAuthContex
21760 74 20 76 61 6c 75 65 20 73 6f 20 74 68 61 74 20  t value so that 
21770 69 74 20 63 61 6e 20 62 65 20 72 65 73 74 6f 72  it can be restor
21780 65 64 20 6c 61 74 65 72 2e 0a 2a 2f 0a 73 74 72  ed later..*/.str
21790 75 63 74 20 41 75 74 68 43 6f 6e 74 65 78 74 20  uct AuthContext 
217a0 7b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  {.  const char *
217b0 7a 41 75 74 68 43 6f 6e 74 65 78 74 3b 20 20 20  zAuthContext;   
217c0 2f 2a 20 50 75 74 20 73 61 76 65 64 20 50 61 72  /* Put saved Par
217d0 73 65 2e 7a 41 75 74 68 43 6f 6e 74 65 78 74 20  se.zAuthContext 
217e0 68 65 72 65 20 2a 2f 0a 20 20 50 61 72 73 65 20  here */.  Parse 
217f0 2a 70 50 61 72 73 65 3b 20 20 20 20 20 20 20 20  *pParse;        
21800 20 20 20 20 20 20 2f 2a 20 54 68 65 20 50 61 72        /* The Par
21810 73 65 20 73 74 72 75 63 74 75 72 65 20 2a 2f 0a  se structure */.
21820 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 42 69 74 66 69 65  };../*.** Bitfie
21830 6c 64 20 66 6c 61 67 73 20 66 6f 72 20 50 35 20  ld flags for P5 
21840 76 61 6c 75 65 20 69 6e 20 76 61 72 69 6f 75 73  value in various
21850 20 6f 70 63 6f 64 65 73 2e 0a 2a 2a 0a 2a 2a 20   opcodes..**.** 
21860 56 61 6c 75 65 20 63 6f 6e 73 74 72 61 69 6e 74  Value constraint
21870 73 20 28 65 6e 66 6f 72 63 65 64 20 76 69 61 20  s (enforced via 
21880 61 73 73 65 72 74 28 29 29 3a 0a 2a 2a 20 20 20  assert()):.**   
21890 20 4f 50 46 4c 41 47 5f 4c 45 4e 47 54 48 41 52   OPFLAG_LENGTHAR
218a0 47 20 20 20 20 3d 3d 20 53 51 4c 49 54 45 5f 46  G    == SQLITE_F
218b0 55 4e 43 5f 4c 45 4e 47 54 48 0a 2a 2a 20 20 20  UNC_LENGTH.**   
218c0 20 4f 50 46 4c 41 47 5f 54 59 50 45 4f 46 41 52   OPFLAG_TYPEOFAR
218d0 47 20 20 20 20 3d 3d 20 53 51 4c 49 54 45 5f 46  G    == SQLITE_F
218e0 55 4e 43 5f 54 59 50 45 4f 46 0a 2a 2a 20 20 20  UNC_TYPEOF.**   
218f0 20 4f 50 46 4c 41 47 5f 42 55 4c 4b 43 53 52 20   OPFLAG_BULKCSR 
21900 20 20 20 20 20 3d 3d 20 42 54 52 45 45 5f 42 55       == BTREE_BU
21910 4c 4b 4c 4f 41 44 0a 2a 2a 20 20 20 20 4f 50 46  LKLOAD.**    OPF
21920 4c 41 47 5f 53 45 45 4b 45 51 20 20 20 20 20 20  LAG_SEEKEQ      
21930 20 3d 3d 20 42 54 52 45 45 5f 53 45 45 4b 5f 45   == BTREE_SEEK_E
21940 51 0a 2a 2a 20 20 20 20 4f 50 46 4c 41 47 5f 46  Q.**    OPFLAG_F
21950 4f 52 44 45 4c 45 54 45 20 20 20 20 3d 3d 20 42  ORDELETE    == B
21960 54 52 45 45 5f 46 4f 52 44 45 4c 45 54 45 0a 2a  TREE_FORDELETE.*
21970 2a 20 20 20 20 4f 50 46 4c 41 47 5f 53 41 56 45  *    OPFLAG_SAVE
21980 50 4f 53 49 54 49 4f 4e 20 3d 3d 20 42 54 52 45  POSITION == BTRE
21990 45 5f 53 41 56 45 50 4f 53 49 54 49 4f 4e 0a 2a  E_SAVEPOSITION.*
219a0 2a 20 20 20 20 4f 50 46 4c 41 47 5f 41 55 58 44  *    OPFLAG_AUXD
219b0 45 4c 45 54 45 20 20 20 20 3d 3d 20 42 54 52 45  ELETE    == BTRE
219c0 45 5f 41 55 58 44 45 4c 45 54 45 0a 2a 2f 0a 23  E_AUXDELETE.*/.#
219d0 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 4e 43  define OPFLAG_NC
219e0 48 41 4e 47 45 20 20 20 20 20 20 20 30 78 30 31  HANGE       0x01
219f0 20 20 20 20 2f 2a 20 4f 50 5f 49 6e 73 65 72 74      /* OP_Insert
21a00 3a 20 53 65 74 20 74 6f 20 75 70 64 61 74 65 20  : Set to update 
21a10 64 62 2d 3e 6e 43 68 61 6e 67 65 20 2a 2f 0a 20  db->nChange */. 
21a20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21a30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21a40 20 20 20 20 2f 2a 20 41 6c 73 6f 20 75 73 65 64      /* Also used
21a50 20 69 6e 20 50 32 20 28 6e 6f 74 20 50 35 29 20   in P2 (not P5) 
21a60 6f 66 20 4f 50 5f 44 65 6c 65 74 65 20 2a 2f 0a  of OP_Delete */.
21a70 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 45  #define OPFLAG_E
21a80 50 48 45 4d 20 20 20 20 20 20 20 20 20 30 78 30  PHEM         0x0
21a90 31 20 20 20 20 2f 2a 20 4f 50 5f 43 6f 6c 75 6d  1    /* OP_Colum
21aa0 6e 3a 20 45 70 68 65 6d 65 72 61 6c 20 6f 75 74  n: Ephemeral out
21ab0 70 75 74 20 69 73 20 6f 6b 20 2a 2f 0a 23 64 65  put is ok */.#de
21ac0 66 69 6e 65 20 4f 50 46 4c 41 47 5f 4c 41 53 54  fine OPFLAG_LAST
21ad0 52 4f 57 49 44 20 20 20 20 20 30 78 32 30 20 20  ROWID     0x20  
21ae0 20 20 2f 2a 20 53 65 74 20 74 6f 20 75 70 64 61    /* Set to upda
21af0 74 65 20 64 62 2d 3e 6c 61 73 74 52 6f 77 69 64  te db->lastRowid
21b00 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c   */.#define OPFL
21b10 41 47 5f 49 53 55 50 44 41 54 45 20 20 20 20 20  AG_ISUPDATE     
21b20 20 30 78 30 34 20 20 20 20 2f 2a 20 54 68 69 73   0x04    /* This
21b30 20 4f 50 5f 49 6e 73 65 72 74 20 69 73 20 61 6e   OP_Insert is an
21b40 20 73 71 6c 20 55 50 44 41 54 45 20 2a 2f 0a 23   sql UPDATE */.#
21b50 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 41 50  define OPFLAG_AP
21b60 50 45 4e 44 20 20 20 20 20 20 20 20 30 78 30 38  PEND        0x08
21b70 20 20 20 20 2f 2a 20 54 68 69 73 20 69 73 20 6c      /* This is l
21b80 69 6b 65 6c 79 20 74 6f 20 62 65 20 61 6e 20 61  ikely to be an a
21b90 70 70 65 6e 64 20 2a 2f 0a 23 64 65 66 69 6e 65  ppend */.#define
21ba0 20 4f 50 46 4c 41 47 5f 55 53 45 53 45 45 4b 52   OPFLAG_USESEEKR
21bb0 45 53 55 4c 54 20 30 78 31 30 20 20 20 20 2f 2a  ESULT 0x10    /*
21bc0 20 54 72 79 20 74 6f 20 61 76 6f 69 64 20 61 20   Try to avoid a 
21bd0 73 65 65 6b 20 69 6e 20 42 74 72 65 65 49 6e 73  seek in BtreeIns
21be0 65 72 74 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65  ert() */.#define
21bf0 20 4f 50 46 4c 41 47 5f 49 53 4e 4f 4f 50 20 20   OPFLAG_ISNOOP  
21c00 20 20 20 20 20 20 30 78 34 30 20 20 20 20 2f 2a        0x40    /*
21c10 20 4f 50 5f 44 65 6c 65 74 65 20 64 6f 65 73 20   OP_Delete does 
21c20 70 72 65 2d 75 70 64 61 74 65 2d 68 6f 6f 6b 20  pre-update-hook 
21c30 6f 6e 6c 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20  only */.#define 
21c40 4f 50 46 4c 41 47 5f 4c 45 4e 47 54 48 41 52 47  OPFLAG_LENGTHARG
21c50 20 20 20 20 20 30 78 34 30 20 20 20 20 2f 2a 20       0x40    /* 
21c60 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 6e 6c 79 20 75  OP_Column only u
21c70 73 65 64 20 66 6f 72 20 6c 65 6e 67 74 68 28 29  sed for length()
21c80 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c   */.#define OPFL
21c90 41 47 5f 54 59 50 45 4f 46 41 52 47 20 20 20 20  AG_TYPEOFARG    
21ca0 20 30 78 38 30 20 20 20 20 2f 2a 20 4f 50 5f 43   0x80    /* OP_C
21cb0 6f 6c 75 6d 6e 20 6f 6e 6c 79 20 75 73 65 64 20  olumn only used 
21cc0 66 6f 72 20 74 79 70 65 6f 66 28 29 20 2a 2f 0a  for typeof() */.
21cd0 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 42  #define OPFLAG_B
21ce0 55 4c 4b 43 53 52 20 20 20 20 20 20 20 30 78 30  ULKCSR       0x0
21cf0 31 20 20 20 20 2f 2a 20 4f 50 5f 4f 70 65 6e 2a  1    /* OP_Open*
21d00 2a 20 75 73 65 64 20 74 6f 20 6f 70 65 6e 20 62  * used to open b
21d10 75 6c 6b 20 63 75 72 73 6f 72 20 2a 2f 0a 23 64  ulk cursor */.#d
21d20 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 53 45 45  efine OPFLAG_SEE
21d30 4b 45 51 20 20 20 20 20 20 20 20 30 78 30 32 20  KEQ        0x02 
21d40 20 20 20 2f 2a 20 4f 50 5f 4f 70 65 6e 2a 2a 20     /* OP_Open** 
21d50 63 75 72 73 6f 72 20 75 73 65 73 20 45 51 20 73  cursor uses EQ s
21d60 65 65 6b 20 6f 6e 6c 79 20 2a 2f 0a 23 64 65 66  eek only */.#def
21d70 69 6e 65 20 4f 50 46 4c 41 47 5f 46 4f 52 44 45  ine OPFLAG_FORDE
21d80 4c 45 54 45 20 20 20 20 20 30 78 30 38 20 20 20  LETE     0x08   
21d90 20 2f 2a 20 4f 50 5f 4f 70 65 6e 20 73 68 6f 75   /* OP_Open shou
21da0 6c 64 20 75 73 65 20 42 54 52 45 45 5f 46 4f 52  ld use BTREE_FOR
21db0 44 45 4c 45 54 45 20 2a 2f 0a 23 64 65 66 69 6e  DELETE */.#defin
21dc0 65 20 4f 50 46 4c 41 47 5f 50 32 49 53 52 45 47  e OPFLAG_P2ISREG
21dd0 20 20 20 20 20 20 20 30 78 31 30 20 20 20 20 2f         0x10    /
21de0 2a 20 50 32 20 74 6f 20 4f 50 5f 4f 70 65 6e 2a  * P2 to OP_Open*
21df0 2a 20 69 73 20 61 20 72 65 67 69 73 74 65 72 20  * is a register 
21e00 6e 75 6d 62 65 72 20 2a 2f 0a 23 64 65 66 69 6e  number */.#defin
21e10 65 20 4f 50 46 4c 41 47 5f 50 45 52 4d 55 54 45  e OPFLAG_PERMUTE
21e20 20 20 20 20 20 20 20 30 78 30 31 20 20 20 20 2f         0x01    /
21e30 2a 20 4f 50 5f 43 6f 6d 70 61 72 65 3a 20 75 73  * OP_Compare: us
21e40 65 20 74 68 65 20 70 65 72 6d 75 74 61 74 69 6f  e the permutatio
21e50 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46  n */.#define OPF
21e60 4c 41 47 5f 53 41 56 45 50 4f 53 49 54 49 4f 4e  LAG_SAVEPOSITION
21e70 20 20 30 78 30 32 20 20 20 20 2f 2a 20 4f 50 5f    0x02    /* OP_
21e80 44 65 6c 65 74 65 2f 49 6e 73 65 72 74 3a 20 73  Delete/Insert: s
21e90 61 76 65 20 63 75 72 73 6f 72 20 70 6f 73 20 2a  ave cursor pos *
21ea0 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47  /.#define OPFLAG
21eb0 5f 41 55 58 44 45 4c 45 54 45 20 20 20 20 20 30  _AUXDELETE     0
21ec0 78 30 34 20 20 20 20 2f 2a 20 4f 50 5f 44 65 6c  x04    /* OP_Del
21ed0 65 74 65 3a 20 69 6e 64 65 78 20 69 6e 20 61 20  ete: index in a 
21ee0 44 45 4c 45 54 45 20 6f 70 20 2a 2f 0a 23 64 65  DELETE op */.#de
21ef0 66 69 6e 65 20 4f 50 46 4c 41 47 5f 4e 4f 43 48  fine OPFLAG_NOCH
21f00 4e 47 5f 4d 41 47 49 43 20 20 30 78 36 64 20 20  NG_MAGIC  0x6d  
21f10 20 20 2f 2a 20 4f 50 5f 4d 61 6b 65 52 65 63 6f    /* OP_MakeReco
21f20 72 64 3a 20 73 65 72 69 61 6c 74 79 70 65 20 31  rd: serialtype 1
21f30 30 20 69 73 20 6f 6b 20 2a 2f 0a 0a 2f 2a 0a 20  0 is ok */../*. 
21f40 2a 20 45 61 63 68 20 74 72 69 67 67 65 72 20 70  * Each trigger p
21f50 72 65 73 65 6e 74 20 69 6e 20 74 68 65 20 64 61  resent in the da
21f60 74 61 62 61 73 65 20 73 63 68 65 6d 61 20 69 73  tabase schema is
21f70 20 73 74 6f 72 65 64 20 61 73 20 61 6e 20 69 6e   stored as an in
21f80 73 74 61 6e 63 65 20 6f 66 0a 20 2a 20 73 74 72  stance of. * str
21f90 75 63 74 20 54 72 69 67 67 65 72 2e 0a 20 2a 0a  uct Trigger.. *.
21fa0 20 2a 20 50 6f 69 6e 74 65 72 73 20 74 6f 20 69   * Pointers to i
21fb0 6e 73 74 61 6e 63 65 73 20 6f 66 20 73 74 72 75  nstances of stru
21fc0 63 74 20 54 72 69 67 67 65 72 20 61 72 65 20 73  ct Trigger are s
21fd0 74 6f 72 65 64 20 69 6e 20 74 77 6f 20 77 61 79  tored in two way
21fe0 73 2e 0a 20 2a 20 31 2e 20 49 6e 20 74 68 65 20  s.. * 1. In the 
21ff0 22 74 72 69 67 48 61 73 68 22 20 68 61 73 68 20  "trigHash" hash 
22000 74 61 62 6c 65 20 28 70 61 72 74 20 6f 66 20 74  table (part of t
22010 68 65 20 73 71 6c 69 74 65 33 2a 20 74 68 61 74  he sqlite3* that
22020 20 72 65 70 72 65 73 65 6e 74 73 20 74 68 65 0a   represents the.
22030 20 2a 20 20 20 20 64 61 74 61 62 61 73 65 29 2e   *    database).
22040 20 54 68 69 73 20 61 6c 6c 6f 77 73 20 54 72 69   This allows Tri
22050 67 67 65 72 20 73 74 72 75 63 74 75 72 65 73 20  gger structures 
22060 74 6f 20 62 65 20 72 65 74 72 69 65 76 65 64 20  to be retrieved 
22070 62 79 20 6e 61 6d 65 2e 0a 20 2a 20 32 2e 20 41  by name.. * 2. A
22080 6c 6c 20 74 72 69 67 67 65 72 73 20 61 73 73 6f  ll triggers asso
22090 63 69 61 74 65 64 20 77 69 74 68 20 61 20 73 69  ciated with a si
220a0 6e 67 6c 65 20 74 61 62 6c 65 20 66 6f 72 6d 20  ngle table form 
220b0 61 20 6c 69 6e 6b 65 64 20 6c 69 73 74 2c 20 75  a linked list, u
220c0 73 69 6e 67 20 74 68 65 0a 20 2a 20 20 20 20 70  sing the. *    p
220d0 4e 65 78 74 20 6d 65 6d 62 65 72 20 6f 66 20 73  Next member of s
220e0 74 72 75 63 74 20 54 72 69 67 67 65 72 2e 20 41  truct Trigger. A
220f0 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20   pointer to the 
22100 66 69 72 73 74 20 65 6c 65 6d 65 6e 74 20 6f 66  first element of
22110 20 74 68 65 0a 20 2a 20 20 20 20 6c 69 6e 6b 65   the. *    linke
22120 64 20 6c 69 73 74 20 69 73 20 73 74 6f 72 65 64  d list is stored
22130 20 61 73 20 74 68 65 20 22 70 54 72 69 67 67 65   as the "pTrigge
22140 72 22 20 6d 65 6d 62 65 72 20 6f 66 20 74 68 65  r" member of the
22150 20 61 73 73 6f 63 69 61 74 65 64 0a 20 2a 20 20   associated. *  
22160 20 20 73 74 72 75 63 74 20 54 61 62 6c 65 2e 0a    struct Table..
22170 20 2a 0a 20 2a 20 54 68 65 20 22 73 74 65 70 5f   *. * The "step_
22180 6c 69 73 74 22 20 6d 65 6d 62 65 72 20 70 6f 69  list" member poi
22190 6e 74 73 20 74 6f 20 74 68 65 20 66 69 72 73 74  nts to the first
221a0 20 65 6c 65 6d 65 6e 74 20 6f 66 20 61 20 6c 69   element of a li
221b0 6e 6b 65 64 20 6c 69 73 74 0a 20 2a 20 63 6f 6e  nked list. * con
221c0 74 61 69 6e 69 6e 67 20 74 68 65 20 53 51 4c 20  taining the SQL 
221d0 73 74 61 74 65 6d 65 6e 74 73 20 73 70 65 63 69  statements speci
221e0 66 69 65 64 20 61 73 20 74 68 65 20 74 72 69 67  fied as the trig
221f0 67 65 72 20 70 72 6f 67 72 61 6d 2e 0a 20 2a 2f  ger program.. */
22200 0a 73 74 72 75 63 74 20 54 72 69 67 67 65 72 20  .struct Trigger 
22210 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b  {.  char *zName;
22220 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
22230 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74  he name of the t
22240 72 69 67 67 65 72 20 20 20 20 20 20 20 20 20 20  rigger          
22250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2f                */
22260 0a 20 20 63 68 61 72 20 2a 74 61 62 6c 65 3b 20  .  char *table; 
22270 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68             /* Th
22280 65 20 74 61 62 6c 65 20 6f 72 20 76 69 65 77 20  e table or view 
22290 74 6f 20 77 68 69 63 68 20 74 68 65 20 74 72 69  to which the tri
222a0 67 67 65 72 20 61 70 70 6c 69 65 73 20 2a 2f 0a  gger applies */.
222b0 20 20 75 38 20 6f 70 3b 20 20 20 20 20 20 20 20    u8 op;        
222c0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65            /* One
222d0 20 6f 66 20 54 4b 5f 44 45 4c 45 54 45 2c 20 54   of TK_DELETE, T
222e0 4b 5f 55 50 44 41 54 45 2c 20 54 4b 5f 49 4e 53  K_UPDATE, TK_INS
222f0 45 52 54 20 20 20 20 20 20 20 20 20 2a 2f 0a 20  ERT         */. 
22300 20 75 38 20 74 72 5f 74 6d 3b 20 20 20 20 20 20   u8 tr_tm;      
22310 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20           /* One 
22320 6f 66 20 54 52 49 47 47 45 52 5f 42 45 46 4f 52  of TRIGGER_BEFOR
22330 45 2c 20 54 52 49 47 47 45 52 5f 41 46 54 45 52  E, TRIGGER_AFTER
22340 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 57 68 65   */.  Expr *pWhe
22350 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  n;            /*
22360 20 54 68 65 20 57 48 45 4e 20 63 6c 61 75 73 65   The WHEN clause
22370 20 6f 66 20 74 68 65 20 65 78 70 72 65 73 73 69   of the expressi
22380 6f 6e 20 28 6d 61 79 20 62 65 20 4e 55 4c 4c 29  on (may be NULL)
22390 20 2a 2f 0a 20 20 49 64 4c 69 73 74 20 2a 70 43   */.  IdList *pC
223a0 6f 6c 75 6d 6e 73 3b 20 20 20 20 20 20 20 2f 2a  olumns;       /*
223b0 20 49 66 20 74 68 69 73 20 69 73 20 61 6e 20 55   If this is an U
223c0 50 44 41 54 45 20 4f 46 20 3c 63 6f 6c 75 6d 6e  PDATE OF <column
223d0 2d 6c 69 73 74 3e 20 74 72 69 67 67 65 72 2c 0a  -list> trigger,.
223e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
223f0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 65               the
22400 20 3c 63 6f 6c 75 6d 6e 2d 6c 69 73 74 3e 20 69   <column-list> i
22410 73 20 73 74 6f 72 65 64 20 68 65 72 65 20 2a 2f  s stored here */
22420 0a 20 20 53 63 68 65 6d 61 20 2a 70 53 63 68 65  .  Schema *pSche
22430 6d 61 3b 20 20 20 20 20 20 20 20 2f 2a 20 53 63  ma;        /* Sc
22440 68 65 6d 61 20 63 6f 6e 74 61 69 6e 69 6e 67 20  hema containing 
22450 74 68 65 20 74 72 69 67 67 65 72 20 2a 2f 0a 20  the trigger */. 
22460 20 53 63 68 65 6d 61 20 2a 70 54 61 62 53 63 68   Schema *pTabSch
22470 65 6d 61 3b 20 20 20 20 20 2f 2a 20 53 63 68 65  ema;     /* Sche
22480 6d 61 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68  ma containing th
22490 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20 54 72 69  e table */.  Tri
224a0 67 67 65 72 53 74 65 70 20 2a 73 74 65 70 5f 6c  ggerStep *step_l
224b0 69 73 74 3b 20 2f 2a 20 4c 69 6e 6b 20 6c 69 73  ist; /* Link lis
224c0 74 20 6f 66 20 74 72 69 67 67 65 72 20 70 72 6f  t of trigger pro
224d0 67 72 61 6d 20 73 74 65 70 73 20 20 20 20 20 20  gram steps      
224e0 20 20 20 20 20 20 20 2a 2f 0a 20 20 54 72 69 67         */.  Trig
224f0 67 65 72 20 2a 70 4e 65 78 74 3b 20 20 20 20 20  ger *pNext;     
22500 20 20 20 20 2f 2a 20 4e 65 78 74 20 74 72 69 67      /* Next trig
22510 67 65 72 20 61 73 73 6f 63 69 61 74 65 64 20 77  ger associated w
22520 69 74 68 20 74 68 65 20 74 61 62 6c 65 20 2a 2f  ith the table */
22530 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20 74 72 69  .};../*.** A tri
22540 67 67 65 72 20 69 73 20 65 69 74 68 65 72 20 61  gger is either a
22550 20 42 45 46 4f 52 45 20 6f 72 20 61 6e 20 41 46   BEFORE or an AF
22560 54 45 52 20 74 72 69 67 67 65 72 2e 20 20 54 68  TER trigger.  Th
22570 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 63 6f 6e 73  e following cons
22580 74 61 6e 74 73 0a 2a 2a 20 64 65 74 65 72 6d 69  tants.** determi
22590 6e 65 20 77 68 69 63 68 2e 0a 2a 2a 0a 2a 2a 20  ne which..**.** 
225a0 49 66 20 74 68 65 72 65 20 61 72 65 20 6d 75 6c  If there are mul
225b0 74 69 70 6c 65 20 74 72 69 67 67 65 72 73 2c 20  tiple triggers, 
225c0 79 6f 75 20 6d 69 67 68 74 20 6f 66 20 73 6f 6d  you might of som
225d0 65 20 42 45 46 4f 52 45 20 61 6e 64 20 73 6f 6d  e BEFORE and som
225e0 65 20 41 46 54 45 52 2e 0a 2a 2a 20 49 6e 20 74  e AFTER..** In t
225f0 68 61 74 20 63 61 73 65 73 2c 20 74 68 65 20 63  hat cases, the c
22600 6f 6e 73 74 61 6e 74 73 20 62 65 6c 6f 77 20 63  onstants below c
22610 61 6e 20 62 65 20 4f 52 65 64 20 74 6f 67 65 74  an be ORed toget
22620 68 65 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  her..*/.#define 
22630 54 52 49 47 47 45 52 5f 42 45 46 4f 52 45 20 20  TRIGGER_BEFORE  
22640 31 0a 23 64 65 66 69 6e 65 20 54 52 49 47 47 45  1.#define TRIGGE
22650 52 5f 41 46 54 45 52 20 20 20 32 0a 0a 2f 2a 0a  R_AFTER   2../*.
22660 20 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f   * An instance o
22670 66 20 73 74 72 75 63 74 20 54 72 69 67 67 65 72  f struct Trigger
22680 53 74 65 70 20 69 73 20 75 73 65 64 20 74 6f 20  Step is used to 
22690 73 74 6f 72 65 20 61 20 73 69 6e 67 6c 65 20 53  store a single S
226a0 51 4c 20 73 74 61 74 65 6d 65 6e 74 0a 20 2a 20  QL statement. * 
226b0 74 68 61 74 20 69 73 20 61 20 70 61 72 74 20 6f  that is a part o
226c0 66 20 61 20 74 72 69 67 67 65 72 2d 70 72 6f 67  f a trigger-prog
226d0 72 61 6d 2e 0a 20 2a 0a 20 2a 20 49 6e 73 74 61  ram.. *. * Insta
226e0 6e 63 65 73 20 6f 66 20 73 74 72 75 63 74 20 54  nces of struct T
226f0 72 69 67 67 65 72 53 74 65 70 20 61 72 65 20 73  riggerStep are s
22700 74 6f 72 65 64 20 69 6e 20 61 20 73 69 6e 67 6c  tored in a singl
22710 79 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 28 6c  y linked list (l
22720 69 6e 6b 65 64 0a 20 2a 20 75 73 69 6e 67 20 74  inked. * using t
22730 68 65 20 22 70 4e 65 78 74 22 20 6d 65 6d 62 65  he "pNext" membe
22740 72 29 20 72 65 66 65 72 65 6e 63 65 64 20 62 79  r) referenced by
22750 20 74 68 65 20 22 73 74 65 70 5f 6c 69 73 74 22   the "step_list"
22760 20 6d 65 6d 62 65 72 20 6f 66 20 74 68 65 0a 20   member of the. 
22770 2a 20 61 73 73 6f 63 69 61 74 65 64 20 73 74 72  * associated str
22780 75 63 74 20 54 72 69 67 67 65 72 20 69 6e 73 74  uct Trigger inst
22790 61 6e 63 65 2e 20 54 68 65 20 66 69 72 73 74 20  ance. The first 
227a0 65 6c 65 6d 65 6e 74 20 6f 66 20 74 68 65 20 6c  element of the l
227b0 69 6e 6b 65 64 20 6c 69 73 74 20 69 73 0a 20 2a  inked list is. *
227c0 20 74 68 65 20 66 69 72 73 74 20 73 74 65 70 20   the first step 
227d0 6f 66 20 74 68 65 20 74 72 69 67 67 65 72 2d 70  of the trigger-p
227e0 72 6f 67 72 61 6d 2e 0a 20 2a 0a 20 2a 20 54 68  rogram.. *. * Th
227f0 65 20 22 6f 70 22 20 6d 65 6d 62 65 72 20 69 6e  e "op" member in
22800 64 69 63 61 74 65 73 20 77 68 65 74 68 65 72 20  dicates whether 
22810 74 68 69 73 20 69 73 20 61 20 22 44 45 4c 45 54  this is a "DELET
22820 45 22 2c 20 22 49 4e 53 45 52 54 22 2c 20 22 55  E", "INSERT", "U
22830 50 44 41 54 45 22 20 6f 72 0a 20 2a 20 22 53 45  PDATE" or. * "SE
22840 4c 45 43 54 22 20 73 74 61 74 65 6d 65 6e 74 2e  LECT" statement.
22850 20 54 68 65 20 6d 65 61 6e 69 6e 67 73 20 6f 66   The meanings of
22860 20 74 68 65 20 6f 74 68 65 72 20 6d 65 6d 62 65   the other membe
22870 72 73 20 69 73 20 64 65 74 65 72 6d 69 6e 65 64  rs is determined
22880 20 62 79 20 74 68 65 0a 20 2a 20 76 61 6c 75 65   by the. * value
22890 20 6f 66 20 22 6f 70 22 20 61 73 20 66 6f 6c 6c   of "op" as foll
228a0 6f 77 73 3a 0a 20 2a 0a 20 2a 20 28 6f 70 20 3d  ows:. *. * (op =
228b0 3d 20 54 4b 5f 49 4e 53 45 52 54 29 0a 20 2a 20  = TK_INSERT). * 
228c0 6f 72 63 6f 6e 66 20 20 20 20 2d 3e 20 73 74 6f  orconf    -> sto
228d0 72 65 73 20 74 68 65 20 4f 4e 20 43 4f 4e 46 4c  res the ON CONFL
228e0 49 43 54 20 61 6c 67 6f 72 69 74 68 6d 0a 20 2a  ICT algorithm. *
228f0 20 70 53 65 6c 65 63 74 20 20 20 2d 3e 20 49 66   pSelect   -> If
22900 20 74 68 69 73 20 69 73 20 61 6e 20 49 4e 53 45   this is an INSE
22910 52 54 20 49 4e 54 4f 20 2e 2e 2e 20 53 45 4c 45  RT INTO ... SELE
22920 43 54 20 2e 2e 2e 20 73 74 61 74 65 6d 65 6e 74  CT ... statement
22930 2c 20 74 68 65 6e 0a 20 2a 20 20 20 20 20 20 20  , then. *       
22940 20 20 20 20 20 20 20 74 68 69 73 20 73 74 6f 72         this stor
22950 65 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20  es a pointer to 
22960 74 68 65 20 53 45 4c 45 43 54 20 73 74 61 74 65  the SELECT state
22970 6d 65 6e 74 2e 20 4f 74 68 65 72 77 69 73 65 20  ment. Otherwise 
22980 4e 55 4c 4c 2e 0a 20 2a 20 7a 54 61 72 67 65 74  NULL.. * zTarget
22990 20 20 20 2d 3e 20 44 65 71 75 6f 74 65 64 20 6e     -> Dequoted n
229a0 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65  ame of the table
229b0 20 74 6f 20 69 6e 73 65 72 74 20 69 6e 74 6f 2e   to insert into.
229c0 0a 20 2a 20 70 45 78 70 72 4c 69 73 74 20 2d 3e  . * pExprList ->
229d0 20 49 66 20 74 68 69 73 20 69 73 20 61 6e 20 49   If this is an I
229e0 4e 53 45 52 54 20 49 4e 54 4f 20 2e 2e 2e 20 56  NSERT INTO ... V
229f0 41 4c 55 45 53 20 2e 2e 2e 20 73 74 61 74 65 6d  ALUES ... statem
22a00 65 6e 74 2c 20 74 68 65 6e 0a 20 2a 20 20 20 20  ent, then. *    
22a10 20 20 20 20 20 20 20 20 20 20 74 68 69 73 20 73            this s
22a20 74 6f 72 65 73 20 76 61 6c 75 65 73 20 74 6f 20  tores values to 
22a30 62 65 20 69 6e 73 65 72 74 65 64 2e 20 4f 74 68  be inserted. Oth
22a40 65 72 77 69 73 65 20 4e 55 4c 4c 2e 0a 20 2a 20  erwise NULL.. * 
22a50 70 49 64 4c 69 73 74 20 20 20 2d 3e 20 49 66 20  pIdList   -> If 
22a60 74 68 69 73 20 69 73 20 61 6e 20 49 4e 53 45 52  this is an INSER
22a70 54 20 49 4e 54 4f 20 2e 2e 2e 20 28 3c 63 6f 6c  T INTO ... (<col
22a80 75 6d 6e 2d 6e 61 6d 65 73 3e 29 20 56 41 4c 55  umn-names>) VALU
22a90 45 53 20 2e 2e 2e 0a 20 2a 20 20 20 20 20 20 20  ES .... *       
22aa0 20 20 20 20 20 20 20 73 74 61 74 65 6d 65 6e 74         statement
22ab0 2c 20 74 68 65 6e 20 74 68 69 73 20 73 74 6f 72  , then this stor
22ac0 65 73 20 74 68 65 20 63 6f 6c 75 6d 6e 2d 6e 61  es the column-na
22ad0 6d 65 73 20 74 6f 20 62 65 0a 20 2a 20 20 20 20  mes to be. *    
22ae0 20 20 20 20 20 20 20 20 20 20 69 6e 73 65 72 74            insert
22af0 65 64 20 69 6e 74 6f 2e 0a 20 2a 0a 20 2a 20 28  ed into.. *. * (
22b00 6f 70 20 3d 3d 20 54 4b 5f 44 45 4c 45 54 45 29  op == TK_DELETE)
22b10 0a 20 2a 20 7a 54 61 72 67 65 74 20 20 20 2d 3e  . * zTarget   ->
22b20 20 44 65 71 75 6f 74 65 64 20 6e 61 6d 65 20 6f   Dequoted name o
22b30 66 20 74 68 65 20 74 61 62 6c 65 20 74 6f 20 64  f the table to d
22b40 65 6c 65 74 65 20 66 72 6f 6d 2e 0a 20 2a 20 70  elete from.. * p
22b50 57 68 65 72 65 20 20 20 20 2d 3e 20 54 68 65 20  Where    -> The 
22b60 57 48 45 52 45 20 63 6c 61 75 73 65 20 6f 66 20  WHERE clause of 
22b70 74 68 65 20 44 45 4c 45 54 45 20 73 74 61 74 65  the DELETE state
22b80 6d 65 6e 74 20 69 66 20 6f 6e 65 20 69 73 20 73  ment if one is s
22b90 70 65 63 69 66 69 65 64 2e 0a 20 2a 20 20 20 20  pecified.. *    
22ba0 20 20 20 20 20 20 20 20 20 20 4f 74 68 65 72 77            Otherw
22bb0 69 73 65 20 4e 55 4c 4c 2e 0a 20 2a 0a 20 2a 20  ise NULL.. *. * 
22bc0 28 6f 70 20 3d 3d 20 54 4b 5f 55 50 44 41 54 45  (op == TK_UPDATE
22bd0 29 0a 20 2a 20 7a 54 61 72 67 65 74 20 20 20 2d  ). * zTarget   -
22be0 3e 20 44 65 71 75 6f 74 65 64 20 6e 61 6d 65 20  > Dequoted name 
22bf0 6f 66 20 74 68 65 20 74 61 62 6c 65 20 74 6f 20  of the table to 
22c00 75 70 64 61 74 65 2e 0a 20 2a 20 70 57 68 65 72  update.. * pWher
22c10 65 20 20 20 20 2d 3e 20 54 68 65 20 57 48 45 52  e    -> The WHER
22c20 45 20 63 6c 61 75 73 65 20 6f 66 20 74 68 65 20  E clause of the 
22c30 55 50 44 41 54 45 20 73 74 61 74 65 6d 65 6e 74  UPDATE statement
22c40 20 69 66 20 6f 6e 65 20 69 73 20 73 70 65 63 69   if one is speci
22c50 66 69 65 64 2e 0a 20 2a 20 20 20 20 20 20 20 20  fied.. *        
22c60 20 20 20 20 20 20 4f 74 68 65 72 77 69 73 65 20        Otherwise 
22c70 4e 55 4c 4c 2e 0a 20 2a 20 70 45 78 70 72 4c 69  NULL.. * pExprLi
22c80 73 74 20 2d 3e 20 41 20 6c 69 73 74 20 6f 66 20  st -> A list of 
22c90 74 68 65 20 63 6f 6c 75 6d 6e 73 20 74 6f 20 75  the columns to u
22ca0 70 64 61 74 65 20 61 6e 64 20 74 68 65 20 65 78  pdate and the ex
22cb0 70 72 65 73 73 69 6f 6e 73 20 74 6f 20 75 70 64  pressions to upd
22cc0 61 74 65 0a 20 2a 20 20 20 20 20 20 20 20 20 20  ate. *          
22cd0 20 20 20 20 74 68 65 6d 20 74 6f 2e 20 53 65 65      them to. See
22ce0 20 73 71 6c 69 74 65 33 55 70 64 61 74 65 28 29   sqlite3Update()
22cf0 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 20 6f   documentation o
22d00 66 20 22 70 43 68 61 6e 67 65 73 22 0a 20 2a 20  f "pChanges". * 
22d10 20 20 20 20 20 20 20 20 20 20 20 20 20 61 72 67               arg
22d20 75 6d 65 6e 74 2e 0a 20 2a 0a 20 2a 2f 0a 73 74  ument.. *. */.st
22d30 72 75 63 74 20 54 72 69 67 67 65 72 53 74 65 70  ruct TriggerStep
22d40 20 7b 0a 20 20 75 38 20 6f 70 3b 20 20 20 20 20   {.  u8 op;     
22d50 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65            /* One
22d60 20 6f 66 20 54 4b 5f 44 45 4c 45 54 45 2c 20 54   of TK_DELETE, T
22d70 4b 5f 55 50 44 41 54 45 2c 20 54 4b 5f 49 4e 53  K_UPDATE, TK_INS
22d80 45 52 54 2c 20 54 4b 5f 53 45 4c 45 43 54 20 2a  ERT, TK_SELECT *
22d90 2f 0a 20 20 75 38 20 6f 72 63 6f 6e 66 3b 20 20  /.  u8 orconf;  
22da0 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 45 5f 52           /* OE_R
22db0 6f 6c 6c 62 61 63 6b 20 65 74 63 2e 20 2a 2f 0a  ollback etc. */.
22dc0 20 20 54 72 69 67 67 65 72 20 2a 70 54 72 69 67    Trigger *pTrig
22dd0 3b 20 20 20 20 20 20 2f 2a 20 54 68 65 20 74 72  ;      /* The tr
22de0 69 67 67 65 72 20 74 68 61 74 20 74 68 69 73 20  igger that this 
22df0 73 74 65 70 20 69 73 20 61 20 70 61 72 74 20 6f  step is a part o
22e00 66 20 2a 2f 0a 20 20 53 65 6c 65 63 74 20 2a 70  f */.  Select *p
22e10 53 65 6c 65 63 74 3b 20 20 20 20 20 2f 2a 20 53  Select;     /* S
22e20 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 20  ELECT statement 
22e30 6f 72 20 52 48 53 20 6f 66 20 49 4e 53 45 52 54  or RHS of INSERT
22e40 20 49 4e 54 4f 20 53 45 4c 45 43 54 20 2e 2e 2e   INTO SELECT ...
22e50 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 54 61 72   */.  char *zTar
22e60 67 65 74 3b 20 20 20 20 20 20 20 2f 2a 20 54 61  get;       /* Ta
22e70 72 67 65 74 20 74 61 62 6c 65 20 66 6f 72 20 44  rget table for D
22e80 45 4c 45 54 45 2c 20 55 50 44 41 54 45 2c 20 49  ELETE, UPDATE, I
22e90 4e 53 45 52 54 20 2a 2f 0a 20 20 45 78 70 72 20  NSERT */.  Expr 
22ea0 2a 70 57 68 65 72 65 3b 20 20 20 20 20 20 20 20  *pWhere;        
22eb0 2f 2a 20 54 68 65 20 57 48 45 52 45 20 63 6c 61  /* The WHERE cla
22ec0 75 73 65 20 66 6f 72 20 44 45 4c 45 54 45 20 6f  use for DELETE o
22ed0 72 20 55 50 44 41 54 45 20 73 74 65 70 73 20 2a  r UPDATE steps *
22ee0 2f 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70 45  /.  ExprList *pE
22ef0 78 70 72 4c 69 73 74 3b 20 2f 2a 20 53 45 54 20  xprList; /* SET 
22f00 63 6c 61 75 73 65 20 66 6f 72 20 55 50 44 41 54  clause for UPDAT
22f10 45 20 2a 2f 0a 20 20 49 64 4c 69 73 74 20 2a 70  E */.  IdList *p
22f20 49 64 4c 69 73 74 3b 20 20 20 20 20 2f 2a 20 43  IdList;     /* C
22f30 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 66 6f 72 20  olumn names for 
22f40 49 4e 53 45 52 54 20 2a 2f 0a 20 20 55 70 73 65  INSERT */.  Upse
22f50 72 74 20 2a 70 55 70 73 65 72 74 3b 20 20 20 20  rt *pUpsert;    
22f60 20 2f 2a 20 55 70 73 65 72 74 20 63 6c 61 75 73   /* Upsert claus
22f70 65 73 20 6f 6e 20 61 6e 20 49 4e 53 45 52 54 20  es on an INSERT 
22f80 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 53 70 61 6e  */.  char *zSpan
22f90 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 72 69  ;         /* Ori
22fa0 67 69 6e 61 6c 20 53 51 4c 20 74 65 78 74 20 6f  ginal SQL text o
22fb0 66 20 74 68 69 73 20 63 6f 6d 6d 61 6e 64 20 2a  f this command *
22fc0 2f 0a 20 20 54 72 69 67 67 65 72 53 74 65 70 20  /.  TriggerStep 
22fd0 2a 70 4e 65 78 74 3b 20 20 2f 2a 20 4e 65 78 74  *pNext;  /* Next
22fe0 20 69 6e 20 74 68 65 20 6c 69 6e 6b 2d 6c 69 73   in the link-lis
22ff0 74 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 53 74  t */.  TriggerSt
23000 65 70 20 2a 70 4c 61 73 74 3b 20 20 2f 2a 20 4c  ep *pLast;  /* L
23010 61 73 74 20 65 6c 65 6d 65 6e 74 20 69 6e 20 6c  ast element in l
23020 69 6e 6b 2d 6c 69 73 74 2e 20 56 61 6c 69 64 20  ink-list. Valid 
23030 66 6f 72 20 31 73 74 20 65 6c 65 6d 20 6f 6e 6c  for 1st elem onl
23040 79 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54  y */.};../*.** T
23050 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72  he following str
23060 75 63 74 75 72 65 20 63 6f 6e 74 61 69 6e 73 20  ucture contains 
23070 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 75 73 65 64  information used
23080 20 62 79 20 74 68 65 20 73 71 6c 69 74 65 46 69   by the sqliteFi
23090 78 2e 2e 2e 0a 2a 2a 20 72 6f 75 74 69 6e 65 73  x....** routines
230a0 20 61 73 20 74 68 65 79 20 77 61 6c 6b 20 74 68   as they walk th
230b0 65 20 70 61 72 73 65 20 74 72 65 65 20 74 6f 20  e parse tree to 
230c0 6d 61 6b 65 20 64 61 74 61 62 61 73 65 20 72 65  make database re
230d0 66 65 72 65 6e 63 65 73 0a 2a 2a 20 65 78 70 6c  ferences.** expl
230e0 69 63 69 74 2e 0a 2a 2f 0a 74 79 70 65 64 65 66  icit..*/.typedef
230f0 20 73 74 72 75 63 74 20 44 62 46 69 78 65 72 20   struct DbFixer 
23100 44 62 46 69 78 65 72 3b 0a 73 74 72 75 63 74 20  DbFixer;.struct 
23110 44 62 46 69 78 65 72 20 7b 0a 20 20 50 61 72 73  DbFixer {.  Pars
23120 65 20 2a 70 50 61 72 73 65 3b 20 20 20 20 20 20  e *pParse;      
23130 2f 2a 20 54 68 65 20 70 61 72 73 69 6e 67 20 63  /* The parsing c
23140 6f 6e 74 65 78 74 2e 20 20 45 72 72 6f 72 20 6d  ontext.  Error m
23150 65 73 73 61 67 65 73 20 77 72 69 74 74 65 6e 20  essages written 
23160 68 65 72 65 20 2a 2f 0a 20 20 53 63 68 65 6d 61  here */.  Schema
23170 20 2a 70 53 63 68 65 6d 61 3b 20 20 20 20 2f 2a   *pSchema;    /*
23180 20 46 69 78 20 69 74 65 6d 73 20 74 6f 20 74 68   Fix items to th
23190 69 73 20 73 63 68 65 6d 61 20 2a 2f 0a 20 20 69  is schema */.  i
231a0 6e 74 20 62 56 61 72 4f 6e 6c 79 3b 20 20 20 20  nt bVarOnly;    
231b0 20 20 20 2f 2a 20 43 68 65 63 6b 20 66 6f 72 20     /* Check for 
231c0 76 61 72 69 61 62 6c 65 20 72 65 66 65 72 65 6e  variable referen
231d0 63 65 73 20 6f 6e 6c 79 20 2a 2f 0a 20 20 63 6f  ces only */.  co
231e0 6e 73 74 20 63 68 61 72 20 2a 7a 44 62 3b 20 20  nst char *zDb;  
231f0 20 20 2f 2a 20 4d 61 6b 65 20 73 75 72 65 20 61    /* Make sure a
23200 6c 6c 20 6f 62 6a 65 63 74 73 20 61 72 65 20 63  ll objects are c
23210 6f 6e 74 61 69 6e 65 64 20 69 6e 20 74 68 69 73  ontained in this
23220 20 64 61 74 61 62 61 73 65 20 2a 2f 0a 20 20 63   database */.  c
23230 6f 6e 73 74 20 63 68 61 72 20 2a 7a 54 79 70 65  onst char *zType
23240 3b 20 20 2f 2a 20 54 79 70 65 20 6f 66 20 74 68  ;  /* Type of th
23250 65 20 63 6f 6e 74 61 69 6e 65 72 20 2d 20 75 73  e container - us
23260 65 64 20 66 6f 72 20 65 72 72 6f 72 20 6d 65 73  ed for error mes
23270 73 61 67 65 73 20 2a 2f 0a 20 20 63 6f 6e 73 74  sages */.  const
23280 20 54 6f 6b 65 6e 20 2a 70 4e 61 6d 65 3b 20 2f   Token *pName; /
23290 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65 20 63 6f  * Name of the co
232a0 6e 74 61 69 6e 65 72 20 2d 20 75 73 65 64 20 66  ntainer - used f
232b0 6f 72 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65  or error message
232c0 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41  s */.};../*.** A
232d0 6e 20 6f 62 6a 65 63 74 65 64 20 75 73 65 64 20  n objected used 
232e0 74 6f 20 61 63 63 75 6d 75 6c 61 74 65 20 74 68  to accumulate th
232f0 65 20 74 65 78 74 20 6f 66 20 61 20 73 74 72 69  e text of a stri
23300 6e 67 20 77 68 65 72 65 20 77 65 0a 2a 2a 20 64  ng where we.** d
23310 6f 20 6e 6f 74 20 6e 65 63 65 73 73 61 72 69 6c  o not necessaril
23320 79 20 6b 6e 6f 77 20 68 6f 77 20 62 69 67 20 74  y know how big t
23330 68 65 20 73 74 72 69 6e 67 20 77 69 6c 6c 20 62  he string will b
23340 65 20 69 6e 20 74 68 65 20 65 6e 64 2e 0a 2a 2f  e in the end..*/
23350 0a 73 74 72 75 63 74 20 73 71 6c 69 74 65 33 5f  .struct sqlite3_
23360 73 74 72 20 7b 0a 20 20 73 71 6c 69 74 65 33 20  str {.  sqlite3 
23370 2a 64 62 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  *db;         /* 
23380 4f 70 74 69 6f 6e 61 6c 20 64 61 74 61 62 61 73  Optional databas
23390 65 20 66 6f 72 20 6c 6f 6f 6b 61 73 69 64 65 2e  e for lookaside.
233a0 20 20 43 61 6e 20 62 65 20 4e 55 4c 4c 20 2a 2f    Can be NULL */
233b0 0a 20 20 63 68 61 72 20 2a 7a 54 65 78 74 3b 20  .  char *zText; 
233c0 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 73          /* The s
233d0 74 72 69 6e 67 20 63 6f 6c 6c 65 63 74 65 64 20  tring collected 
233e0 73 6f 20 66 61 72 20 2a 2f 0a 20 20 75 33 32 20  so far */.  u32 
233f0 20 6e 41 6c 6c 6f 63 3b 20 20 20 20 20 20 20 20   nAlloc;        
23400 20 2f 2a 20 41 6d 6f 75 6e 74 20 6f 66 20 73 70   /* Amount of sp
23410 61 63 65 20 61 6c 6c 6f 63 61 74 65 64 20 69 6e  ace allocated in
23420 20 7a 54 65 78 74 20 2a 2f 0a 20 20 75 33 32 20   zText */.  u32 
23430 20 6d 78 41 6c 6c 6f 63 3b 20 20 20 20 20 20 20   mxAlloc;       
23440 20 2f 2a 20 4d 61 78 69 6d 75 6d 20 61 6c 6c 6f   /* Maximum allo
23450 77 65 64 20 61 6c 6c 6f 63 61 74 69 6f 6e 2e 20  wed allocation. 
23460 20 30 20 66 6f 72 20 6e 6f 20 6d 61 6c 6c 6f 63   0 for no malloc
23470 20 75 73 61 67 65 20 2a 2f 0a 20 20 75 33 32 20   usage */.  u32 
23480 20 6e 43 68 61 72 3b 20 20 20 20 20 20 20 20 20   nChar;         
23490 20 2f 2a 20 4c 65 6e 67 74 68 20 6f 66 20 74 68   /* Length of th
234a0 65 20 73 74 72 69 6e 67 20 73 6f 20 66 61 72 20  e string so far 
234b0 2a 2f 0a 20 20 75 38 20 20 20 61 63 63 45 72 72  */.  u8   accErr
234c0 6f 72 3b 20 20 20 20 20 20 20 2f 2a 20 53 51 4c  or;       /* SQL
234d0 49 54 45 5f 4e 4f 4d 45 4d 20 6f 72 20 53 51 4c  ITE_NOMEM or SQL
234e0 49 54 45 5f 54 4f 4f 42 49 47 20 2a 2f 0a 20 20  ITE_TOOBIG */.  
234f0 75 38 20 20 20 70 72 69 6e 74 66 46 6c 61 67 73  u8   printfFlags
23500 3b 20 20 20 20 2f 2a 20 53 51 4c 49 54 45 5f 50  ;    /* SQLITE_P
23510 52 49 4e 54 46 20 66 6c 61 67 73 20 62 65 6c 6f  RINTF flags belo
23520 77 20 2a 2f 0a 7d 3b 0a 23 64 65 66 69 6e 65 20  w */.};.#define 
23530 53 51 4c 49 54 45 5f 50 52 49 4e 54 46 5f 49 4e  SQLITE_PRINTF_IN
23540 54 45 52 4e 41 4c 20 30 78 30 31 20 20 2f 2a 20  TERNAL 0x01  /* 
23550 49 6e 74 65 72 6e 61 6c 2d 75 73 65 2d 6f 6e 6c  Internal-use-onl
23560 79 20 63 6f 6e 76 65 72 74 65 72 73 20 61 6c 6c  y converters all
23570 6f 77 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20  owed */.#define 
23580 53 51 4c 49 54 45 5f 50 52 49 4e 54 46 5f 53 51  SQLITE_PRINTF_SQ
23590 4c 46 55 4e 43 20 20 30 78 30 32 20 20 2f 2a 20  LFUNC  0x02  /* 
235a0 53 51 4c 20 66 75 6e 63 74 69 6f 6e 20 61 72 67  SQL function arg
235b0 75 6d 65 6e 74 73 20 74 6f 20 56 58 50 72 69 6e  uments to VXPrin
235c0 74 66 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  tf */.#define SQ
235d0 4c 49 54 45 5f 50 52 49 4e 54 46 5f 4d 41 4c 4c  LITE_PRINTF_MALL
235e0 4f 43 45 44 20 30 78 30 34 20 20 2f 2a 20 54 72  OCED 0x04  /* Tr
235f0 75 65 20 69 66 20 78 54 65 78 74 20 69 73 20 61  ue if xText is a
23600 6c 6c 6f 63 61 74 65 64 20 73 70 61 63 65 20 2a  llocated space *
23610 2f 0a 0a 23 64 65 66 69 6e 65 20 69 73 4d 61 6c  /..#define isMal
23620 6c 6f 63 65 64 28 58 29 20 20 28 28 28 58 29 2d  loced(X)  (((X)-
23630 3e 70 72 69 6e 74 66 46 6c 61 67 73 20 26 20 53  >printfFlags & S
23640 51 4c 49 54 45 5f 50 52 49 4e 54 46 5f 4d 41 4c  QLITE_PRINTF_MAL
23650 4c 4f 43 45 44 29 21 3d 30 29 0a 0a 0a 2f 2a 0a  LOCED)!=0).../*.
23660 2a 2a 20 41 20 70 6f 69 6e 74 65 72 20 74 6f 20  ** A pointer to 
23670 74 68 69 73 20 73 74 72 75 63 74 75 72 65 20 69  this structure i
23680 73 20 75 73 65 64 20 74 6f 20 63 6f 6d 6d 75 6e  s used to commun
23690 69 63 61 74 65 20 69 6e 66 6f 72 6d 61 74 69 6f  icate informatio
236a0 6e 0a 2a 2a 20 66 72 6f 6d 20 73 71 6c 69 74 65  n.** from sqlite
236b0 33 49 6e 69 74 20 61 6e 64 20 4f 50 5f 50 61 72  3Init and OP_Par
236c0 73 65 53 63 68 65 6d 61 20 69 6e 74 6f 20 74 68  seSchema into th
236d0 65 20 73 71 6c 69 74 65 33 49 6e 69 74 43 61 6c  e sqlite3InitCal
236e0 6c 62 61 63 6b 2e 0a 2a 2f 0a 74 79 70 65 64 65  lback..*/.typede
236f0 66 20 73 74 72 75 63 74 20 7b 0a 20 20 73 71 6c  f struct {.  sql
23700 69 74 65 33 20 2a 64 62 3b 20 20 20 20 20 20 20  ite3 *db;       
23710 20 2f 2a 20 54 68 65 20 64 61 74 61 62 61 73 65   /* The database
23720 20 62 65 69 6e 67 20 69 6e 69 74 69 61 6c 69 7a   being initializ
23730 65 64 20 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 70  ed */.  char **p
23740 7a 45 72 72 4d 73 67 3b 20 20 20 20 2f 2a 20 45  zErrMsg;    /* E
23750 72 72 6f 72 20 6d 65 73 73 61 67 65 20 73 74 6f  rror message sto
23760 72 65 64 20 68 65 72 65 20 2a 2f 0a 20 20 69 6e  red here */.  in
23770 74 20 69 44 62 3b 20 20 20 20 20 20 20 20 20 20  t iDb;          
23780 20 20 2f 2a 20 30 20 66 6f 72 20 6d 61 69 6e 20    /* 0 for main 
23790 64 61 74 61 62 61 73 65 2e 20 20 31 20 66 6f 72  database.  1 for
237a0 20 54 45 4d 50 2c 20 32 2e 2e 20 66 6f 72 20 41   TEMP, 2.. for A
237b0 54 54 41 43 48 65 64 20 2a 2f 0a 20 20 69 6e 74  TTACHed */.  int
237c0 20 72 63 3b 20 20 20 20 20 20 20 20 20 20 20 20   rc;            
237d0 20 2f 2a 20 52 65 73 75 6c 74 20 63 6f 64 65 20   /* Result code 
237e0 73 74 6f 72 65 64 20 68 65 72 65 20 2a 2f 0a 7d  stored here */.}
237f0 20 49 6e 69 74 44 61 74 61 3b 0a 0a 2f 2a 0a 2a   InitData;../*.*
23800 2a 20 53 74 72 75 63 74 75 72 65 20 63 6f 6e 74  * Structure cont
23810 61 69 6e 69 6e 67 20 67 6c 6f 62 61 6c 20 63 6f  aining global co
23820 6e 66 69 67 75 72 61 74 69 6f 6e 20 64 61 74 61  nfiguration data
23830 20 66 6f 72 20 74 68 65 20 53 51 4c 69 74 65 20   for the SQLite 
23840 6c 69 62 72 61 72 79 2e 0a 2a 2a 0a 2a 2a 20 54  library..**.** T
23850 68 69 73 20 73 74 72 75 63 74 75 72 65 20 61 6c  his structure al
23860 73 6f 20 63 6f 6e 74 61 69 6e 73 20 73 6f 6d 65  so contains some
23870 20 73 74 61 74 65 20 69 6e 66 6f 72 6d 61 74 69   state informati
23880 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53 71  on..*/.struct Sq
23890 6c 69 74 65 33 43 6f 6e 66 69 67 20 7b 0a 20 20  lite3Config {.  
238a0 69 6e 74 20 62 4d 65 6d 73 74 61 74 3b 20 20 20  int bMemstat;   
238b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
238c0 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 65 6e 61    /* True to ena
238d0 62 6c 65 20 6d 65 6d 6f 72 79 20 73 74 61 74 75  ble memory statu
238e0 73 20 2a 2f 0a 20 20 69 6e 74 20 62 43 6f 72 65  s */.  int bCore
238f0 4d 75 74 65 78 3b 20 20 20 20 20 20 20 20 20 20  Mutex;          
23900 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65           /* True
23910 20 74 6f 20 65 6e 61 62 6c 65 20 63 6f 72 65 20   to enable core 
23920 6d 75 74 65 78 69 6e 67 20 2a 2f 0a 20 20 69 6e  mutexing */.  in
23930 74 20 62 46 75 6c 6c 4d 75 74 65 78 3b 20 20 20  t bFullMutex;   
23940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23950 2f 2a 20 54 72 75 65 20 74 6f 20 65 6e 61 62 6c  /* True to enabl
23960 65 20 66 75 6c 6c 20 6d 75 74 65 78 69 6e 67 20  e full mutexing 
23970 2a 2f 0a 20 20 69 6e 74 20 62 4f 70 65 6e 55 72  */.  int bOpenUr
23980 69 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  i;              
23990 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 74         /* True t
239a0 6f 20 69 6e 74 65 72 70 72 65 74 20 66 69 6c 65  o interpret file
239b0 6e 61 6d 65 73 20 61 73 20 55 52 49 73 20 2a 2f  names as URIs */
239c0 0a 20 20 69 6e 74 20 62 55 73 65 43 69 73 3b 20  .  int bUseCis; 
239d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
239e0 20 20 20 20 20 2f 2a 20 55 73 65 20 63 6f 76 65       /* Use cove
239f0 72 69 6e 67 20 69 6e 64 69 63 65 73 20 66 6f 72  ring indices for
23a00 20 66 75 6c 6c 2d 73 63 61 6e 73 20 2a 2f 0a 20   full-scans */. 
23a10 20 69 6e 74 20 62 53 6d 61 6c 6c 4d 61 6c 6c 6f   int bSmallMallo
23a20 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  c;              
23a30 20 20 20 2f 2a 20 41 76 6f 69 64 20 6c 61 72 67     /* Avoid larg
23a40 65 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74  e memory allocat
23a50 69 6f 6e 73 20 69 66 20 74 72 75 65 20 2a 2f 0a  ions if true */.
23a60 20 20 69 6e 74 20 6d 78 53 74 72 6c 65 6e 3b 20    int mxStrlen; 
23a70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23a80 20 20 20 20 2f 2a 20 4d 61 78 69 6d 75 6d 20 73      /* Maximum s
23a90 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 2a 2f 0a  tring length */.
23aa0 20 20 69 6e 74 20 6e 65 76 65 72 43 6f 72 72 75    int neverCorru
23ab0 70 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  pt;             
23ac0 20 20 20 20 2f 2a 20 44 61 74 61 62 61 73 65 20      /* Database 
23ad0 69 73 20 61 6c 77 61 79 73 20 77 65 6c 6c 2d 66  is always well-f
23ae0 6f 72 6d 65 64 20 2a 2f 0a 20 20 69 6e 74 20 73  ormed */.  int s
23af0 7a 4c 6f 6f 6b 61 73 69 64 65 3b 20 20 20 20 20  zLookaside;     
23b00 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
23b10 44 65 66 61 75 6c 74 20 6c 6f 6f 6b 61 73 69 64  Default lookasid
23b20 65 20 62 75 66 66 65 72 20 73 69 7a 65 20 2a 2f  e buffer size */
23b30 0a 20 20 69 6e 74 20 6e 4c 6f 6f 6b 61 73 69 64  .  int nLookasid
23b40 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e;              
23b50 20 20 20 20 20 2f 2a 20 44 65 66 61 75 6c 74 20       /* Default 
23b60 6c 6f 6f 6b 61 73 69 64 65 20 62 75 66 66 65 72  lookaside buffer
23b70 20 63 6f 75 6e 74 20 2a 2f 0a 20 20 69 6e 74 20   count */.  int 
23b80 6e 53 74 6d 74 53 70 69 6c 6c 3b 20 20 20 20 20  nStmtSpill;     
23b90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
23ba0 20 53 74 6d 74 2d 6a 6f 75 72 6e 61 6c 20 73 70   Stmt-journal sp
23bb0 69 6c 6c 2d 74 6f 2d 64 69 73 6b 20 74 68 72 65  ill-to-disk thre
23bc0 73 68 6f 6c 64 20 2a 2f 0a 20 20 73 71 6c 69 74  shold */.  sqlit
23bd0 65 33 5f 6d 65 6d 5f 6d 65 74 68 6f 64 73 20 6d  e3_mem_methods m
23be0 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
23bf0 4c 6f 77 2d 6c 65 76 65 6c 20 6d 65 6d 6f 72 79  Low-level memory
23c00 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 69 6e 74 65   allocation inte
23c10 72 66 61 63 65 20 2a 2f 0a 20 20 73 71 6c 69 74  rface */.  sqlit
23c20 65 33 5f 6d 75 74 65 78 5f 6d 65 74 68 6f 64 73  e3_mutex_methods
23c30 20 6d 75 74 65 78 3b 20 20 20 20 20 20 2f 2a 20   mutex;      /* 
23c40 4c 6f 77 2d 6c 65 76 65 6c 20 6d 75 74 65 78 20  Low-level mutex 
23c50 69 6e 74 65 72 66 61 63 65 20 2a 2f 0a 20 20 73  interface */.  s
23c60 71 6c 69 74 65 33 5f 70 63 61 63 68 65 5f 6d 65  qlite3_pcache_me
23c70 74 68 6f 64 73 32 20 70 63 61 63 68 65 32 3b 20  thods2 pcache2; 
23c80 20 2f 2a 20 4c 6f 77 2d 6c 65 76 65 6c 20 70 61   /* Low-level pa
23c90 67 65 2d 63 61 63 68 65 20 69 6e 74 65 72 66 61  ge-cache interfa
23ca0 63 65 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 48  ce */.  void *pH
23cb0 65 61 70 3b 20 20 20 20 20 20 20 20 20 20 20 20  eap;            
23cc0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 48 65 61            /* Hea
23cd0 70 20 73 74 6f 72 61 67 65 20 73 70 61 63 65 20  p storage space 
23ce0 2a 2f 0a 20 20 69 6e 74 20 6e 48 65 61 70 3b 20  */.  int nHeap; 
23cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23d00 20 20 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f         /* Size o
23d10 66 20 70 48 65 61 70 5b 5d 20 2a 2f 0a 20 20 69  f pHeap[] */.  i
23d20 6e 74 20 6d 6e 52 65 71 2c 20 6d 78 52 65 71 3b  nt mnReq, mxReq;
23d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23d40 20 2f 2a 20 4d 69 6e 20 61 6e 64 20 6d 61 78 20   /* Min and max 
23d50 68 65 61 70 20 72 65 71 75 65 73 74 73 20 73 69  heap requests si
23d60 7a 65 73 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33  zes */.  sqlite3
23d70 5f 69 6e 74 36 34 20 73 7a 4d 6d 61 70 3b 20 20  _int64 szMmap;  
23d80 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6d 6d             /* mm
23d90 61 70 28 29 20 73 70 61 63 65 20 70 65 72 20 6f  ap() space per o
23da0 70 65 6e 20 66 69 6c 65 20 2a 2f 0a 20 20 73 71  pen file */.  sq
23db0 6c 69 74 65 33 5f 69 6e 74 36 34 20 6d 78 4d 6d  lite3_int64 mxMm
23dc0 61 70 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ap;             
23dd0 2f 2a 20 4d 61 78 69 6d 75 6d 20 76 61 6c 75 65  /* Maximum value
23de0 20 66 6f 72 20 73 7a 4d 6d 61 70 20 2a 2f 0a 20   for szMmap */. 
23df0 20 76 6f 69 64 20 2a 70 50 61 67 65 3b 20 20 20   void *pPage;   
23e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23e10 20 20 20 2f 2a 20 50 61 67 65 20 63 61 63 68 65     /* Page cache
23e20 20 6d 65 6d 6f 72 79 20 2a 2f 0a 20 20 69 6e 74   memory */.  int
23e30 20 73 7a 50 61 67 65 3b 20 20 20 20 20 20 20 20   szPage;        
23e40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
23e50 2a 20 53 69 7a 65 20 6f 66 20 65 61 63 68 20 70  * Size of each p
23e60 61 67 65 20 69 6e 20 70 50 61 67 65 5b 5d 20 2a  age in pPage[] *
23e70 2f 0a 20 20 69 6e 74 20 6e 50 61 67 65 3b 20 20  /.  int nPage;  
23e80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23e90 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
23ea0 6f 66 20 70 61 67 65 73 20 69 6e 20 70 50 61 67  of pages in pPag
23eb0 65 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 6d 78 50  e[] */.  int mxP
23ec0 61 72 73 65 72 53 74 61 63 6b 3b 20 20 20 20 20  arserStack;     
23ed0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6d 61             /* ma
23ee0 78 69 6d 75 6d 20 64 65 70 74 68 20 6f 66 20 74  ximum depth of t
23ef0 68 65 20 70 61 72 73 65 72 20 73 74 61 63 6b 20  he parser stack 
23f00 2a 2f 0a 20 20 69 6e 74 20 73 68 61 72 65 64 43  */.  int sharedC
23f10 61 63 68 65 45 6e 61 62 6c 65 64 3b 20 20 20 20  acheEnabled;    
23f20 20 20 20 20 20 20 20 2f 2a 20 74 72 75 65 20 69         /* true i
23f30 66 20 73 68 61 72 65 64 2d 63 61 63 68 65 20 6d  f shared-cache m
23f40 6f 64 65 20 65 6e 61 62 6c 65 64 20 2a 2f 0a 20  ode enabled */. 
23f50 20 75 33 32 20 73 7a 50 6d 61 3b 20 20 20 20 20   u32 szPma;     
23f60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23f70 20 20 20 2f 2a 20 4d 61 78 69 6d 75 6d 20 53 6f     /* Maximum So
23f80 72 74 65 72 20 50 4d 41 20 73 69 7a 65 20 2a 2f  rter PMA size */
23f90 0a 20 20 2f 2a 20 54 68 65 20 61 62 6f 76 65 20  .  /* The above 
23fa0 6d 69 67 68 74 20 62 65 20 69 6e 69 74 69 61 6c  might be initial
23fb0 69 7a 65 64 20 74 6f 20 6e 6f 6e 2d 7a 65 72 6f  ized to non-zero
23fc0 2e 20 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  .  The following
23fd0 20 6e 65 65 64 20 74 6f 20 61 6c 77 61 79 73 0a   need to always.
23fe0 20 20 2a 2a 20 69 6e 69 74 69 61 6c 6c 79 20 62    ** initially b
23ff0 65 20 7a 65 72 6f 2c 20 68 6f 77 65 76 65 72 2e  e zero, however.
24000 20 2a 2f 0a 20 20 69 6e 74 20 69 73 49 6e 69 74   */.  int isInit
24010 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
24020 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20          /* True 
24030 61 66 74 65 72 20 69 6e 69 74 69 61 6c 69 7a 61  after initializa
24040 74 69 6f 6e 20 68 61 73 20 66 69 6e 69 73 68 65  tion has finishe
24050 64 20 2a 2f 0a 20 20 69 6e 74 20 69 6e 50 72 6f  d */.  int inPro
24060 67 72 65 73 73 3b 20 20 20 20 20 20 20 20 20 20  gress;          
24070 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65           /* True
24080 20 77 68 69 6c 65 20 69 6e 69 74 69 61 6c 69 7a   while initializ
24090 61 74 69 6f 6e 20 69 6e 20 70 72 6f 67 72 65 73  ation in progres
240a0 73 20 2a 2f 0a 20 20 69 6e 74 20 69 73 4d 75 74  s */.  int isMut
240b0 65 78 49 6e 69 74 3b 20 20 20 20 20 20 20 20 20  exInit;         
240c0 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65           /* True
240d0 20 61 66 74 65 72 20 6d 75 74 65 78 65 73 20 61   after mutexes a
240e0 72 65 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a  re initialized *
240f0 2f 0a 20 20 69 6e 74 20 69 73 4d 61 6c 6c 6f 63  /.  int isMalloc
24100 49 6e 69 74 3b 20 20 20 20 20 20 20 20 20 20 20  Init;           
24110 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 61 66        /* True af
24120 74 65 72 20 6d 61 6c 6c 6f 63 20 69 73 20 69 6e  ter malloc is in
24130 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 69  itialized */.  i
24140 6e 74 20 69 73 50 43 61 63 68 65 49 6e 69 74 3b  nt isPCacheInit;
24150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24160 20 2f 2a 20 54 72 75 65 20 61 66 74 65 72 20 6d   /* True after m
24170 61 6c 6c 6f 63 20 69 73 20 69 6e 69 74 69 61 6c  alloc is initial
24180 69 7a 65 64 20 2a 2f 0a 20 20 69 6e 74 20 6e 52  ized */.  int nR
24190 65 66 49 6e 69 74 4d 75 74 65 78 3b 20 20 20 20  efInitMutex;    
241a0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
241b0 75 6d 62 65 72 20 6f 66 20 75 73 65 72 73 20 6f  umber of users o
241c0 66 20 70 49 6e 69 74 4d 75 74 65 78 20 2a 2f 0a  f pInitMutex */.
241d0 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 20    sqlite3_mutex 
241e0 2a 70 49 6e 69 74 4d 75 74 65 78 3b 20 20 20 20  *pInitMutex;    
241f0 20 20 20 20 2f 2a 20 4d 75 74 65 78 20 75 73 65      /* Mutex use
24200 64 20 62 79 20 73 71 6c 69 74 65 33 5f 69 6e 69  d by sqlite3_ini
24210 74 69 61 6c 69 7a 65 28 29 20 2a 2f 0a 20 20 76  tialize() */.  v
24220 6f 69 64 20 28 2a 78 4c 6f 67 29 28 76 6f 69 64  oid (*xLog)(void
24230 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72  *,int,const char
24240 2a 29 3b 20 2f 2a 20 46 75 6e 63 74 69 6f 6e 20  *); /* Function 
24250 66 6f 72 20 6c 6f 67 67 69 6e 67 20 2a 2f 0a 20  for logging */. 
24260 20 76 6f 69 64 20 2a 70 4c 6f 67 41 72 67 3b 20   void *pLogArg; 
24270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24280 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20 61        /* First a
24290 72 67 75 6d 65 6e 74 20 74 6f 20 78 4c 6f 67 28  rgument to xLog(
242a0 29 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49  ) */.#ifdef SQLI
242b0 54 45 5f 45 4e 41 42 4c 45 5f 53 51 4c 4c 4f 47  TE_ENABLE_SQLLOG
242c0 0a 20 20 76 6f 69 64 28 2a 78 53 71 6c 6c 6f 67  .  void(*xSqllog
242d0 29 28 76 6f 69 64 2a 2c 73 71 6c 69 74 65 33 2a  )(void*,sqlite3*
242e0 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 69 6e  ,const char*, in
242f0 74 29 3b 0a 20 20 76 6f 69 64 20 2a 70 53 71 6c  t);.  void *pSql
24300 6c 6f 67 41 72 67 3b 0a 23 65 6e 64 69 66 0a 23  logArg;.#endif.#
24310 69 66 64 65 66 20 53 51 4c 49 54 45 5f 56 44 42  ifdef SQLITE_VDB
24320 45 5f 43 4f 56 45 52 41 47 45 0a 20 20 2f 2a 20  E_COVERAGE.  /* 
24330 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 63 61  The following ca
24340 6c 6c 62 61 63 6b 20 28 69 66 20 6e 6f 74 20 4e  llback (if not N
24350 55 4c 4c 29 20 69 73 20 69 6e 76 6f 6b 65 64 20  ULL) is invoked 
24360 6f 6e 20 65 76 65 72 79 20 56 44 42 45 20 62 72  on every VDBE br
24370 61 6e 63 68 0a 20 20 2a 2a 20 6f 70 65 72 61 74  anch.  ** operat
24380 69 6f 6e 2e 20 20 53 65 74 20 74 68 65 20 63 61  ion.  Set the ca
24390 6c 6c 62 61 63 6b 20 75 73 69 6e 67 20 53 51 4c  llback using SQL
243a0 49 54 45 5f 54 45 53 54 43 54 52 4c 5f 56 44 42  ITE_TESTCTRL_VDB
243b0 45 5f 43 4f 56 45 52 41 47 45 2e 0a 20 20 2a 2f  E_COVERAGE..  */
243c0 0a 20 20 76 6f 69 64 20 28 2a 78 56 64 62 65 42  .  void (*xVdbeB
243d0 72 61 6e 63 68 29 28 76 6f 69 64 2a 2c 69 6e 74  ranch)(void*,int
243e0 20 69 53 72 63 4c 69 6e 65 2c 75 38 20 65 54 68   iSrcLine,u8 eTh
243f0 69 73 2c 75 38 20 65 4d 78 29 3b 20 20 2f 2a 20  is,u8 eMx);  /* 
24400 43 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 76 6f  Callback */.  vo
24410 69 64 20 2a 70 56 64 62 65 42 72 61 6e 63 68 41  id *pVdbeBranchA
24420 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  rg;             
24430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24440 20 20 20 20 20 20 20 20 2f 2a 20 31 73 74 20 61          /* 1st a
24450 72 67 75 6d 65 6e 74 20 2a 2f 0a 23 65 6e 64 69  rgument */.#endi
24460 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  f.#ifndef SQLITE
24470 5f 55 4e 54 45 53 54 41 42 4c 45 0a 20 20 69 6e  _UNTESTABLE.  in
24480 74 20 28 2a 78 54 65 73 74 43 61 6c 6c 62 61 63  t (*xTestCallbac
24490 6b 29 28 69 6e 74 29 3b 20 20 20 20 20 20 20 20  k)(int);        
244a0 2f 2a 20 49 6e 76 6f 6b 65 64 20 62 79 20 73 71  /* Invoked by sq
244b0 6c 69 74 65 33 46 61 75 6c 74 53 69 6d 28 29 20  lite3FaultSim() 
244c0 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 69 6e 74 20  */.#endif.  int 
244d0 62 4c 6f 63 61 6c 74 69 6d 65 46 61 75 6c 74 3b  bLocaltimeFault;
244e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
244f0 20 54 72 75 65 20 74 6f 20 66 61 69 6c 20 6c 6f   True to fail lo
24500 63 61 6c 74 69 6d 65 28 29 20 63 61 6c 6c 73 20  caltime() calls 
24510 2a 2f 0a 20 20 69 6e 74 20 62 4f 66 64 4c 6f 63  */.  int bOfdLoc
24520 6b 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ks;             
24530 20 20 20 20 20 20 20 2f 2a 20 55 73 65 20 4f 46         /* Use OF
24540 44 20 6c 6f 63 6b 73 20 6f 6e 20 73 75 70 70 6f  D locks on suppo
24550 72 74 65 64 20 73 79 73 74 65 6d 73 20 2a 2f 0a  rted systems */.
24560 20 20 69 6e 74 20 69 4f 6e 63 65 52 65 73 65 74    int iOnceReset
24570 54 68 72 65 73 68 6f 6c 64 3b 20 20 20 20 20 20  Threshold;      
24580 20 20 20 20 2f 2a 20 57 68 65 6e 20 74 6f 20 72      /* When to r
24590 65 73 65 74 20 4f 50 5f 4f 6e 63 65 20 63 6f 75  eset OP_Once cou
245a0 6e 74 65 72 73 20 2a 2f 0a 20 20 75 33 32 20 73  nters */.  u32 s
245b0 7a 53 6f 72 74 65 72 52 65 66 3b 20 20 20 20 20  zSorterRef;     
245c0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
245d0 4d 69 6e 20 73 69 7a 65 20 69 6e 20 62 79 74 65  Min size in byte
245e0 73 20 74 6f 20 75 73 65 20 73 6f 72 74 65 72 2d  s to use sorter-
245f0 72 65 66 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  refs */.};../*.*
24600 2a 20 54 68 69 73 20 6d 61 63 72 6f 20 69 73 20  * This macro is 
24610 75 73 65 64 20 69 6e 73 69 64 65 20 6f 66 20 61  used inside of a
24620 73 73 65 72 74 28 29 20 73 74 61 74 65 6d 65 6e  ssert() statemen
24630 74 73 20 74 6f 20 69 6e 64 69 63 61 74 65 20 74  ts to indicate t
24640 68 61 74 0a 2a 2a 20 74 68 65 20 61 73 73 65 72  hat.** the asser
24650 74 20 69 73 20 6f 6e 6c 79 20 76 61 6c 69 64 20  t is only valid 
24660 6f 6e 20 61 20 77 65 6c 6c 2d 66 6f 72 6d 65 64  on a well-formed
24670 20 64 61 74 61 62 61 73 65 2e 20 20 49 6e 73 74   database.  Inst
24680 65 61 64 20 6f 66 3a 0a 2a 2a 0a 2a 2a 20 20 20  ead of:.**.**   
24690 20 20 61 73 73 65 72 74 28 20 58 20 29 3b 0a 2a    assert( X );.*
246a0 2a 0a 2a 2a 20 4f 6e 65 20 77 72 69 74 65 73 3a  *.** One writes:
246b0 0a 2a 2a 0a 2a 2a 20 20 20 20 20 61 73 73 65 72  .**.**     asser
246c0 74 28 20 58 20 7c 7c 20 43 4f 52 52 55 50 54 5f  t( X || CORRUPT_
246d0 44 42 20 29 3b 0a 2a 2a 0a 2a 2a 20 43 4f 52 52  DB );.**.** CORR
246e0 55 50 54 5f 44 42 20 69 73 20 74 72 75 65 20 64  UPT_DB is true d
246f0 75 72 69 6e 67 20 6e 6f 72 6d 61 6c 20 6f 70 65  uring normal ope
24700 72 61 74 69 6f 6e 2e 20 20 43 4f 52 52 55 50 54  ration.  CORRUPT
24710 5f 44 42 20 64 6f 65 73 20 6e 6f 74 20 69 6e 64  _DB does not ind
24720 69 63 61 74 65 0a 2a 2a 20 74 68 61 74 20 74 68  icate.** that th
24730 65 20 64 61 74 61 62 61 73 65 20 69 73 20 64 65  e database is de
24740 66 69 6e 69 74 65 6c 79 20 63 6f 72 72 75 70 74  finitely corrupt
24750 2c 20 6f 6e 6c 79 20 74 68 61 74 20 69 74 20 6d  , only that it m
24760 69 67 68 74 20 62 65 20 63 6f 72 72 75 70 74 2e  ight be corrupt.
24770 0a 2a 2a 20 46 6f 72 20 6d 6f 73 74 20 74 65 73  .** For most tes
24780 74 20 63 61 73 65 73 2c 20 43 4f 52 52 55 50 54  t cases, CORRUPT
24790 5f 44 42 20 69 73 20 73 65 74 20 74 6f 20 66 61  _DB is set to fa
247a0 6c 73 65 20 75 73 69 6e 67 20 61 20 73 70 65 63  lse using a spec
247b0 69 61 6c 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 74  ial.** sqlite3_t
247c0 65 73 74 5f 63 6f 6e 74 72 6f 6c 28 29 2e 20 20  est_control().  
247d0 54 68 69 73 20 65 6e 61 62 6c 65 73 20 61 73 73  This enables ass
247e0 65 72 74 28 29 20 73 74 61 74 65 6d 65 6e 74 73  ert() statements
247f0 20 74 6f 20 70 72 6f 76 65 0a 2a 2a 20 74 68 69   to prove.** thi
24800 6e 67 73 20 74 68 61 74 20 61 72 65 20 61 6c 77  ngs that are alw
24810 61 79 73 20 74 72 75 65 20 66 6f 72 20 77 65 6c  ays true for wel
24820 6c 2d 66 6f 72 6d 65 64 20 64 61 74 61 62 61 73  l-formed databas
24830 65 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 43  es..*/.#define C
24840 4f 52 52 55 50 54 5f 44 42 20 20 28 73 71 6c 69  ORRUPT_DB  (sqli
24850 74 65 33 43 6f 6e 66 69 67 2e 6e 65 76 65 72 43  te3Config.neverC
24860 6f 72 72 75 70 74 3d 3d 30 29 0a 0a 2f 2a 0a 2a  orrupt==0)../*.*
24870 2a 20 43 6f 6e 74 65 78 74 20 70 6f 69 6e 74 65  * Context pointe
24880 72 20 70 61 73 73 65 64 20 64 6f 77 6e 20 74 68  r passed down th
24890 72 6f 75 67 68 20 74 68 65 20 74 72 65 65 2d 77  rough the tree-w
248a0 61 6c 6b 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 57  alk..*/.struct W
248b0 61 6c 6b 65 72 20 7b 0a 20 20 50 61 72 73 65 20  alker {.  Parse 
248c0 2a 70 50 61 72 73 65 3b 20 20 20 20 20 20 20 20  *pParse;        
248d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
248e0 20 20 20 20 2f 2a 20 50 61 72 73 65 72 20 63 6f      /* Parser co
248f0 6e 74 65 78 74 2e 20 20 2a 2f 0a 20 20 69 6e 74  ntext.  */.  int
24900 20 28 2a 78 45 78 70 72 43 61 6c 6c 62 61 63 6b   (*xExprCallback
24910 29 28 57 61 6c 6b 65 72 2a 2c 20 45 78 70 72 2a  )(Walker*, Expr*
24920 29 3b 20 20 20 20 20 2f 2a 20 43 61 6c 6c 62 61  );     /* Callba
24930 63 6b 20 66 6f 72 20 65 78 70 72 65 73 73 69 6f  ck for expressio
24940 6e 73 20 2a 2f 0a 20 20 69 6e 74 20 28 2a 78 53  ns */.  int (*xS
24950 65 6c 65 63 74 43 61 6c 6c 62 61 63 6b 29 28 57  electCallback)(W
24960 61 6c 6b 65 72 2a 2c 53 65 6c 65 63 74 2a 29 3b  alker*,Select*);
24970 20 20 2f 2a 20 43 61 6c 6c 62 61 63 6b 20 66 6f    /* Callback fo
24980 72 20 53 45 4c 45 43 54 73 20 2a 2f 0a 20 20 76  r SELECTs */.  v
24990 6f 69 64 20 28 2a 78 53 65 6c 65 63 74 43 61 6c  oid (*xSelectCal
249a0 6c 62 61 63 6b 32 29 28 57 61 6c 6b 65 72 2a 2c  lback2)(Walker*,
249b0 53 65 6c 65 63 74 2a 29 3b 2f 2a 20 53 65 63 6f  Select*);/* Seco
249c0 6e 64 20 63 61 6c 6c 62 61 63 6b 20 66 6f 72 20  nd callback for 
249d0 53 45 4c 45 43 54 73 20 2a 2f 0a 20 20 69 6e 74  SELECTs */.  int
249e0 20 77 61 6c 6b 65 72 44 65 70 74 68 3b 20 20 20   walkerDepth;   
249f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24a00 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
24a10 20 6f 66 20 73 75 62 71 75 65 72 69 65 73 20 2a   of subqueries *
24a20 2f 0a 20 20 75 38 20 65 43 6f 64 65 3b 20 20 20  /.  u8 eCode;   
24a30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24a40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
24a50 20 41 20 73 6d 61 6c 6c 20 70 72 6f 63 65 73 73   A small process
24a60 69 6e 67 20 63 6f 64 65 20 2a 2f 0a 20 20 75 6e  ing code */.  un
24a70 69 6f 6e 20 7b 20 20 20 20 20 20 20 20 20 20 20  ion {           
24a80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24a90 20 20 20 20 20 20 20 20 2f 2a 20 45 78 74 72 61          /* Extra
24aa0 20 64 61 74 61 20 66 6f 72 20 63 61 6c 6c 62 61   data for callba
24ab0 63 6b 20 2a 2f 0a 20 20 20 20 4e 61 6d 65 43 6f  ck */.    NameCo
24ac0 6e 74 65 78 74 20 2a 70 4e 43 3b 20 20 20 20 20  ntext *pNC;     
24ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24ae0 20 20 20 20 2f 2a 20 4e 61 6d 69 6e 67 20 63 6f      /* Naming co
24af0 6e 74 65 78 74 20 2a 2f 0a 20 20 20 20 69 6e 74  ntext */.    int
24b00 20 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20 20   n;             
24b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24b20 20 20 20 20 20 20 20 2f 2a 20 41 20 63 6f 75 6e         /* A coun
24b30 74 65 72 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69  ter */.    int i
24b40 43 75 72 3b 20 20 20 20 20 20 20 20 20 20 20 20  Cur;            
24b50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24b60 20 20 20 20 20 2f 2a 20 41 20 63 75 72 73 6f 72       /* A cursor
24b70 20 6e 75 6d 62 65 72 20 2a 2f 0a 20 20 20 20 53   number */.    S
24b80 72 63 4c 69 73 74 20 2a 70 53 72 63 4c 69 73 74  rcList *pSrcList
24b90 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
24ba0 20 20 20 20 20 20 20 20 20 2f 2a 20 46 52 4f 4d           /* FROM
24bb0 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 20 20 73   clause */.    s
24bc0 74 72 75 63 74 20 53 72 63 43 6f 75 6e 74 20 2a  truct SrcCount *
24bd0 70 53 72 63 43 6f 75 6e 74 3b 20 20 20 20 20 20  pSrcCount;      
24be0 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 75 6e           /* Coun
24bf0 74 69 6e 67 20 63 6f 6c 75 6d 6e 20 72 65 66 65  ting column refe
24c00 72 65 6e 63 65 73 20 2a 2f 0a 20 20 20 20 73 74  rences */.    st
24c10 72 75 63 74 20 43 43 75 72 48 69 6e 74 20 2a 70  ruct CCurHint *p
24c20 43 43 75 72 48 69 6e 74 3b 20 20 20 20 20 20 20  CCurHint;       
24c30 20 20 20 20 20 20 20 20 2f 2a 20 55 73 65 64 20          /* Used 
24c40 62 79 20 63 6f 64 65 43 75 72 73 6f 72 48 69 6e  by codeCursorHin
24c50 74 28 29 20 2a 2f 0a 20 20 20 20 69 6e 74 20 2a  t() */.    int *
24c60 61 69 43 6f 6c 3b 20 20 20 20 20 20 20 20 20 20  aiCol;          
24c70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24c80 20 20 20 20 20 2f 2a 20 61 72 72 61 79 20 6f 66       /* array of
24c90 20 63 6f 6c 75 6d 6e 20 69 6e 64 65 78 65 73 20   column indexes 
24ca0 2a 2f 0a 20 20 20 20 73 74 72 75 63 74 20 49 64  */.    struct Id
24cb0 78 43 6f 76 65 72 20 2a 70 49 64 78 43 6f 76 65  xCover *pIdxCove
24cc0 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  r;              
24cd0 20 2f 2a 20 43 68 65 63 6b 20 66 6f 72 20 69 6e   /* Check for in
24ce0 64 65 78 20 63 6f 76 65 72 61 67 65 20 2a 2f 0a  dex coverage */.
24cf0 20 20 20 20 73 74 72 75 63 74 20 49 64 78 45 78      struct IdxEx
24d00 70 72 54 72 61 6e 73 20 2a 70 49 64 78 54 72 61  prTrans *pIdxTra
24d10 6e 73 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ns;           /*
24d20 20 43 6f 6e 76 65 72 74 20 69 64 78 65 64 20 65   Convert idxed e
24d30 78 70 72 20 74 6f 20 63 6f 6c 75 6d 6e 20 2a 2f  xpr to column */
24d40 0a 20 20 20 20 45 78 70 72 4c 69 73 74 20 2a 70  .    ExprList *p
24d50 47 72 6f 75 70 42 79 3b 20 20 20 20 20 20 20 20  GroupBy;        
24d60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
24d70 2a 20 47 52 4f 55 50 20 42 59 20 63 6c 61 75 73  * GROUP BY claus
24d80 65 20 2a 2f 0a 20 20 20 20 53 65 6c 65 63 74 20  e */.    Select 
24d90 2a 70 53 65 6c 65 63 74 3b 20 20 20 20 20 20 20  *pSelect;       
24da0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24db0 20 20 20 2f 2a 20 48 41 56 49 4e 47 20 74 6f 20     /* HAVING to 
24dc0 57 48 45 52 45 20 63 6c 61 75 73 65 20 63 74 78  WHERE clause ctx
24dd0 20 2a 2f 0a 20 20 7d 20 75 3b 0a 7d 3b 0a 0a 2f   */.  } u;.};../
24de0 2a 20 46 6f 72 77 61 72 64 20 64 65 63 6c 61 72  * Forward declar
24df0 61 74 69 6f 6e 73 20 2a 2f 0a 69 6e 74 20 73 71  ations */.int sq
24e00 6c 69 74 65 33 57 61 6c 6b 45 78 70 72 28 57 61  lite3WalkExpr(Wa
24e10 6c 6b 65 72 2a 2c 20 45 78 70 72 2a 29 3b 0a 69  lker*, Expr*);.i
24e20 6e 74 20 73 71 6c 69 74 65 33 57 61 6c 6b 45 78  nt sqlite3WalkEx
24e30 70 72 4c 69 73 74 28 57 61 6c 6b 65 72 2a 2c 20  prList(Walker*, 
24e40 45 78 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74 20  ExprList*);.int 
24e50 73 71 6c 69 74 65 33 57 61 6c 6b 53 65 6c 65 63  sqlite3WalkSelec
24e60 74 28 57 61 6c 6b 65 72 2a 2c 20 53 65 6c 65 63  t(Walker*, Selec
24e70 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  t*);.int sqlite3
24e80 57 61 6c 6b 53 65 6c 65 63 74 45 78 70 72 28 57  WalkSelectExpr(W
24e90 61 6c 6b 65 72 2a 2c 20 53 65 6c 65 63 74 2a 29  alker*, Select*)
24ea0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 61 6c  ;.int sqlite3Wal
24eb0 6b 53 65 6c 65 63 74 46 72 6f 6d 28 57 61 6c 6b  kSelectFrom(Walk
24ec0 65 72 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 69  er*, Select*);.i
24ed0 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 57 61  nt sqlite3ExprWa
24ee0 6c 6b 4e 6f 6f 70 28 57 61 6c 6b 65 72 2a 2c 20  lkNoop(Walker*, 
24ef0 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  Expr*);.int sqli
24f00 74 65 33 53 65 6c 65 63 74 57 61 6c 6b 4e 6f 6f  te3SelectWalkNoo
24f10 70 28 57 61 6c 6b 65 72 2a 2c 20 53 65 6c 65 63  p(Walker*, Selec
24f20 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  t*);.int sqlite3
24f30 53 65 6c 65 63 74 57 61 6c 6b 46 61 69 6c 28 57  SelectWalkFail(W
24f40 61 6c 6b 65 72 2a 2c 20 53 65 6c 65 63 74 2a 29  alker*, Select*)
24f50 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ;.#ifdef SQLITE_
24f60 44 45 42 55 47 0a 76 6f 69 64 20 73 71 6c 69 74  DEBUG.void sqlit
24f70 65 33 53 65 6c 65 63 74 57 61 6c 6b 41 73 73 65  e3SelectWalkAsse
24f80 72 74 32 28 57 61 6c 6b 65 72 2a 2c 20 53 65 6c  rt2(Walker*, Sel
24f90 65 63 74 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 2f  ect*);.#endif../
24fa0 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 63 6f 64 65  *.** Return code
24fb0 20 66 72 6f 6d 20 74 68 65 20 70 61 72 73 65 2d   from the parse-
24fc0 74 72 65 65 20 77 61 6c 6b 69 6e 67 20 70 72 69  tree walking pri
24fd0 6d 69 74 69 76 65 73 20 61 6e 64 20 74 68 65 69  mitives and thei
24fe0 72 0a 2a 2a 20 63 61 6c 6c 62 61 63 6b 73 2e 0a  r.** callbacks..
24ff0 2a 2f 0a 23 64 65 66 69 6e 65 20 57 52 43 5f 43  */.#define WRC_C
25000 6f 6e 74 69 6e 75 65 20 20 20 20 30 20 20 20 2f  ontinue    0   /
25010 2a 20 43 6f 6e 74 69 6e 75 65 20 64 6f 77 6e 20  * Continue down 
25020 69 6e 74 6f 20 63 68 69 6c 64 72 65 6e 20 2a 2f  into children */
25030 0a 23 64 65 66 69 6e 65 20 57 52 43 5f 50 72 75  .#define WRC_Pru
25040 6e 65 20 20 20 20 20 20 20 31 20 20 20 2f 2a 20  ne       1   /* 
25050 4f 6d 69 74 20 63 68 69 6c 64 72 65 6e 20 62 75  Omit children bu
25060 74 20 63 6f 6e 74 69 6e 75 65 20 77 61 6c 6b 69  t continue walki
25070 6e 67 20 73 69 62 6c 69 6e 67 73 20 2a 2f 0a 23  ng siblings */.#
25080 64 65 66 69 6e 65 20 57 52 43 5f 41 62 6f 72 74  define WRC_Abort
25090 20 20 20 20 20 20 20 32 20 20 20 2f 2a 20 41 62         2   /* Ab
250a0 61 6e 64 6f 6e 20 74 68 65 20 74 72 65 65 20 77  andon the tree w
250b0 61 6c 6b 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 6e  alk */../*.** An
250c0 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 69   instance of thi
250d0 73 20 73 74 72 75 63 74 75 72 65 20 72 65 70 72  s structure repr
250e0 65 73 65 6e 74 73 20 61 20 73 65 74 20 6f 66 20  esents a set of 
250f0 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 43 54 45 73  one or more CTEs
25100 0a 2a 2a 20 28 63 6f 6d 6d 6f 6e 20 74 61 62 6c  .** (common tabl
25110 65 20 65 78 70 72 65 73 73 69 6f 6e 73 29 20 63  e expressions) c
25120 72 65 61 74 65 64 20 62 79 20 61 20 73 69 6e 67  reated by a sing
25130 6c 65 20 57 49 54 48 20 63 6c 61 75 73 65 2e 0a  le WITH clause..
25140 2a 2f 0a 73 74 72 75 63 74 20 57 69 74 68 20 7b  */.struct With {
25150 0a 20 20 69 6e 74 20 6e 43 74 65 3b 20 20 20 20  .  int nCte;    
25160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25170 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
25180 43 54 45 73 20 69 6e 20 74 68 65 20 57 49 54 48  CTEs in the WITH
25190 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 57 69 74   clause */.  Wit
251a0 68 20 2a 70 4f 75 74 65 72 3b 20 20 20 20 20 20  h *pOuter;      
251b0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
251c0 43 6f 6e 74 61 69 6e 69 6e 67 20 57 49 54 48 20  Containing WITH 
251d0 63 6c 61 75 73 65 2c 20 6f 72 20 4e 55 4c 4c 20  clause, or NULL 
251e0 2a 2f 0a 20 20 73 74 72 75 63 74 20 43 74 65 20  */.  struct Cte 
251f0 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  {               
25200 20 20 20 20 20 2f 2a 20 46 6f 72 20 65 61 63 68       /* For each
25210 20 43 54 45 20 69 6e 20 74 68 65 20 57 49 54 48   CTE in the WITH
25220 20 63 6c 61 75 73 65 2e 2e 2e 2e 20 2a 2f 0a 20   clause.... */. 
25230 20 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20     char *zName; 
25240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25250 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68     /* Name of th
25260 69 73 20 43 54 45 20 2a 2f 0a 20 20 20 20 45 78  is CTE */.    Ex
25270 70 72 4c 69 73 74 20 2a 70 43 6f 6c 73 3b 20 20  prList *pCols;  
25280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
25290 20 4c 69 73 74 20 6f 66 20 65 78 70 6c 69 63 69   List of explici
252a0 74 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 2c 20  t column names, 
252b0 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 20 20 20 20 53  or NULL */.    S
252c0 65 6c 65 63 74 20 2a 70 53 65 6c 65 63 74 3b 20  elect *pSelect; 
252d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
252e0 2a 20 54 68 65 20 64 65 66 69 6e 69 74 69 6f 6e  * The definition
252f0 20 6f 66 20 74 68 69 73 20 43 54 45 20 2a 2f 0a   of this CTE */.
25300 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a      const char *
25310 7a 43 74 65 45 72 72 3b 20 20 20 20 20 20 20 20  zCteErr;        
25320 20 20 20 20 2f 2a 20 45 72 72 6f 72 20 6d 65 73      /* Error mes
25330 73 61 67 65 20 66 6f 72 20 63 69 72 63 75 6c 61  sage for circula
25340 72 20 72 65 66 65 72 65 6e 63 65 73 20 2a 2f 0a  r references */.
25350 20 20 7d 20 61 5b 31 5d 3b 0a 7d 3b 0a 0a 23 69    } a[1];.};..#i
25360 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55  fdef SQLITE_DEBU
25370 47 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61  G./*.** An insta
25380 6e 63 65 20 6f 66 20 74 68 65 20 54 72 65 65 56  nce of the TreeV
25390 69 65 77 20 6f 62 6a 65 63 74 20 69 73 20 75 73  iew object is us
253a0 65 64 20 66 6f 72 20 70 72 69 6e 74 69 6e 67 20  ed for printing 
253b0 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 0a 2a  the content of.*
253c0 2a 20 64 61 74 61 20 73 74 72 75 63 74 75 72 65  * data structure
253d0 73 20 6f 6e 20 73 71 6c 69 74 65 33 44 65 62 75  s on sqlite3Debu
253e0 67 50 72 69 6e 74 66 28 29 20 75 73 69 6e 67 20  gPrintf() using 
253f0 61 20 74 72 65 65 2d 6c 69 6b 65 20 76 69 65 77  a tree-like view
25400 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 54 72 65 65  ..*/.struct Tree
25410 56 69 65 77 20 7b 0a 20 20 69 6e 74 20 69 4c 65  View {.  int iLe
25420 76 65 6c 3b 20 20 20 20 20 20 20 20 20 20 20 20  vel;            
25430 20 2f 2a 20 57 68 69 63 68 20 6c 65 76 65 6c 20   /* Which level 
25440 6f 66 20 74 68 65 20 74 72 65 65 20 77 65 20 61  of the tree we a
25450 72 65 20 6f 6e 20 2a 2f 0a 20 20 75 38 20 20 62  re on */.  u8  b
25460 4c 69 6e 65 5b 31 30 30 5d 3b 20 20 20 20 20 20  Line[100];      
25470 20 20 20 2f 2a 20 44 72 61 77 20 76 65 72 74 69     /* Draw verti
25480 63 61 6c 20 69 6e 20 63 6f 6c 75 6d 6e 20 69 20  cal in column i 
25490 69 66 20 62 4c 69 6e 65 5b 69 5d 20 69 73 20 74  if bLine[i] is t
254a0 72 75 65 20 2a 2f 0a 7d 3b 0a 23 65 6e 64 69 66  rue */.};.#endif
254b0 20 2f 2a 20 53 51 4c 49 54 45 5f 44 45 42 55 47   /* SQLITE_DEBUG
254c0 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 73 73 75 6d   */../*.** Assum
254d0 69 6e 67 20 7a 49 6e 20 70 6f 69 6e 74 73 20 74  ing zIn points t
254e0 6f 20 74 68 65 20 66 69 72 73 74 20 62 79 74 65  o the first byte
254f0 20 6f 66 20 61 20 55 54 46 2d 38 20 63 68 61 72   of a UTF-8 char
25500 61 63 74 65 72 2c 0a 2a 2a 20 61 64 76 61 6e 63  acter,.** advanc
25510 65 20 7a 49 6e 20 74 6f 20 70 6f 69 6e 74 20 74  e zIn to point t
25520 6f 20 74 68 65 20 66 69 72 73 74 20 62 79 74 65  o the first byte
25530 20 6f 66 20 74 68 65 20 6e 65 78 74 20 55 54 46   of the next UTF
25540 2d 38 20 63 68 61 72 61 63 74 65 72 2e 0a 2a 2f  -8 character..*/
25550 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
25560 53 4b 49 50 5f 55 54 46 38 28 7a 49 6e 29 20 7b  SKIP_UTF8(zIn) {
25570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25580 20 20 20 20 20 20 20 20 5c 0a 20 20 69 66 28 20          \.  if( 
25590 28 2a 28 7a 49 6e 2b 2b 29 29 3e 3d 30 78 63 30  (*(zIn++))>=0xc0
255a0 20 29 7b 20 20 20 20 20 20 20 20 20 20 20 20 20   ){             
255b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
255c0 20 5c 0a 20 20 20 20 77 68 69 6c 65 28 20 28 2a   \.    while( (*
255d0 7a 49 6e 20 26 20 30 78 63 30 29 3d 3d 30 78 38  zIn & 0xc0)==0x8
255e0 30 20 29 7b 20 7a 49 6e 2b 2b 3b 20 7d 20 20 20  0 ){ zIn++; }   
255f0 20 20 20 20 20 20 20 20 20 20 5c 0a 20 20 7d 20            \.  } 
25600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25630 20 20 20 5c 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68     \.}../*.** Th
25640 65 20 53 51 4c 49 54 45 5f 2a 5f 42 4b 50 54 20  e SQLITE_*_BKPT 
25650 6d 61 63 72 6f 73 20 61 72 65 20 73 75 62 73 74  macros are subst
25660 69 74 75 74 65 73 20 66 6f 72 20 74 68 65 20 65  itutes for the e
25670 72 72 6f 72 20 63 6f 64 65 73 20 77 69 74 68 0a  rror codes with.
25680 2a 2a 20 74 68 65 20 73 61 6d 65 20 6e 61 6d 65  ** the same name
25690 20 62 75 74 20 77 69 74 68 6f 75 74 20 74 68 65   but without the
256a0 20 5f 42 4b 50 54 20 73 75 66 66 69 78 2e 20 20   _BKPT suffix.  
256b0 54 68 65 73 65 20 6d 61 63 72 6f 73 20 69 6e 76  These macros inv
256c0 6f 6b 65 0a 2a 2a 20 72 6f 75 74 69 6e 65 73 20  oke.** routines 
256d0 74 68 61 74 20 72 65 70 6f 72 74 20 74 68 65 20  that report the 
256e0 6c 69 6e 65 2d 6e 75 6d 62 65 72 20 6f 6e 20 77  line-number on w
256f0 68 69 63 68 20 74 68 65 20 65 72 72 6f 72 20 6f  hich the error o
25700 72 69 67 69 6e 61 74 65 64 0a 2a 2a 20 75 73 69  riginated.** usi
25710 6e 67 20 73 71 6c 69 74 65 33 5f 6c 6f 67 28 29  ng sqlite3_log()
25720 2e 20 20 54 68 65 20 72 6f 75 74 69 6e 65 73 20  .  The routines 
25730 61 6c 73 6f 20 70 72 6f 76 69 64 65 20 61 20 63  also provide a c
25740 6f 6e 76 65 6e 69 65 6e 74 20 70 6c 61 63 65 0a  onvenient place.
25750 2a 2a 20 74 6f 20 73 65 74 20 61 20 64 65 62 75  ** to set a debu
25760 67 67 65 72 20 62 72 65 61 6b 70 6f 69 6e 74 2e  gger breakpoint.
25770 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 52  .*/.int sqlite3R
25780 65 70 6f 72 74 45 72 72 6f 72 28 69 6e 74 20 69  eportError(int i
25790 45 72 72 2c 20 69 6e 74 20 6c 69 6e 65 6e 6f 2c  Err, int lineno,
257a0 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 54 79   const char *zTy
257b0 70 65 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  pe);.int sqlite3
257c0 43 6f 72 72 75 70 74 45 72 72 6f 72 28 69 6e 74  CorruptError(int
257d0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4d 69  );.int sqlite3Mi
257e0 73 75 73 65 45 72 72 6f 72 28 69 6e 74 29 3b 0a  suseError(int);.
257f0 69 6e 74 20 73 71 6c 69 74 65 33 43 61 6e 74 6f  int sqlite3Canto
25800 70 65 6e 45 72 72 6f 72 28 69 6e 74 29 3b 0a 23  penError(int);.#
25810 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 4f  define SQLITE_CO
25820 52 52 55 50 54 5f 42 4b 50 54 20 73 71 6c 69 74  RRUPT_BKPT sqlit
25830 65 33 43 6f 72 72 75 70 74 45 72 72 6f 72 28 5f  e3CorruptError(_
25840 5f 4c 49 4e 45 5f 5f 29 0a 23 64 65 66 69 6e 65  _LINE__).#define
25850 20 53 51 4c 49 54 45 5f 4d 49 53 55 53 45 5f 42   SQLITE_MISUSE_B
25860 4b 50 54 20 73 71 6c 69 74 65 33 4d 69 73 75 73  KPT sqlite3Misus
25870 65 45 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 29  eError(__LINE__)
25880 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
25890 43 41 4e 54 4f 50 45 4e 5f 42 4b 50 54 20 73 71  CANTOPEN_BKPT sq
258a0 6c 69 74 65 33 43 61 6e 74 6f 70 65 6e 45 72 72  lite3CantopenErr
258b0 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 29 0a 23 69 66  or(__LINE__).#if
258c0 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47  def SQLITE_DEBUG
258d0 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 4e 6f  .  int sqlite3No
258e0 6d 65 6d 45 72 72 6f 72 28 69 6e 74 29 3b 0a 20  memError(int);. 
258f0 20 69 6e 74 20 73 71 6c 69 74 65 33 49 6f 65 72   int sqlite3Ioer
25900 72 6e 6f 6d 65 6d 45 72 72 6f 72 28 69 6e 74 29  rnomemError(int)
25910 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 43  ;.  int sqlite3C
25920 6f 72 72 75 70 74 50 67 6e 6f 45 72 72 6f 72 28  orruptPgnoError(
25930 69 6e 74 2c 50 67 6e 6f 29 3b 0a 23 20 64 65 66  int,Pgno);.# def
25940 69 6e 65 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d  ine SQLITE_NOMEM
25950 5f 42 4b 50 54 20 73 71 6c 69 74 65 33 4e 6f 6d  _BKPT sqlite3Nom
25960 65 6d 45 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f  emError(__LINE__
25970 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  ).# define SQLIT
25980 45 5f 49 4f 45 52 52 5f 4e 4f 4d 45 4d 5f 42 4b  E_IOERR_NOMEM_BK
25990 50 54 20 73 71 6c 69 74 65 33 49 6f 65 72 72 6e  PT sqlite3Ioerrn
259a0 6f 6d 65 6d 45 72 72 6f 72 28 5f 5f 4c 49 4e 45  omemError(__LINE
259b0 5f 5f 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  __).# define SQL
259c0 49 54 45 5f 43 4f 52 52 55 50 54 5f 50 47 4e 4f  ITE_CORRUPT_PGNO
259d0 28 50 29 20 73 71 6c 69 74 65 33 43 6f 72 72 75  (P) sqlite3Corru
259e0 70 74 50 67 6e 6f 45 72 72 6f 72 28 5f 5f 4c 49  ptPgnoError(__LI
259f0 4e 45 5f 5f 2c 28 50 29 29 0a 23 65 6c 73 65 0a  NE__,(P)).#else.
25a00 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
25a10 4e 4f 4d 45 4d 5f 42 4b 50 54 20 53 51 4c 49 54  NOMEM_BKPT SQLIT
25a20 45 5f 4e 4f 4d 45 4d 0a 23 20 64 65 66 69 6e 65  E_NOMEM.# define
25a30 20 53 51 4c 49 54 45 5f 49 4f 45 52 52 5f 4e 4f   SQLITE_IOERR_NO
25a40 4d 45 4d 5f 42 4b 50 54 20 53 51 4c 49 54 45 5f  MEM_BKPT SQLITE_
25a50 49 4f 45 52 52 5f 4e 4f 4d 45 4d 0a 23 20 64 65  IOERR_NOMEM.# de
25a60 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 4f 52 52  fine SQLITE_CORR
25a70 55 50 54 5f 50 47 4e 4f 28 50 29 20 73 71 6c 69  UPT_PGNO(P) sqli
25a80 74 65 33 43 6f 72 72 75 70 74 45 72 72 6f 72 28  te3CorruptError(
25a90 5f 5f 4c 49 4e 45 5f 5f 29 0a 23 65 6e 64 69 66  __LINE__).#endif
25aa0 0a 0a 2f 2a 0a 2a 2a 20 46 54 53 33 20 61 6e 64  ../*.** FTS3 and
25ab0 20 46 54 53 34 20 62 6f 74 68 20 72 65 71 75 69   FTS4 both requi
25ac0 72 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  re virtual table
25ad0 20 73 75 70 70 6f 72 74 0a 2a 2f 0a 23 69 66 20   support.*/.#if 
25ae0 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
25af0 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
25b00 29 0a 23 20 75 6e 64 65 66 20 53 51 4c 49 54 45  ).# undef SQLITE
25b10 5f 45 4e 41 42 4c 45 5f 46 54 53 33 0a 23 20 75  _ENABLE_FTS3.# u
25b20 6e 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  ndef SQLITE_ENAB
25b30 4c 45 5f 46 54 53 34 0a 23 65 6e 64 69 66 0a 0a  LE_FTS4.#endif..
25b40 2f 2a 0a 2a 2a 20 46 54 53 34 20 69 73 20 72 65  /*.** FTS4 is re
25b50 61 6c 6c 79 20 61 6e 20 65 78 74 65 6e 73 69 6f  ally an extensio
25b60 6e 20 66 6f 72 20 46 54 53 33 2e 20 20 49 74 20  n for FTS3.  It 
25b70 69 73 20 65 6e 61 62 6c 65 64 20 75 73 69 6e 67  is enabled using
25b80 20 74 68 65 0a 2a 2a 20 53 51 4c 49 54 45 5f 45   the.** SQLITE_E
25b90 4e 41 42 4c 45 5f 46 54 53 33 20 6d 61 63 72 6f  NABLE_FTS3 macro
25ba0 2e 20 20 42 75 74 20 74 6f 20 61 76 6f 69 64 20  .  But to avoid 
25bb0 63 6f 6e 66 75 73 69 6f 6e 20 77 65 20 61 6c 73  confusion we als
25bc0 6f 20 63 61 6c 6c 0a 2a 2a 20 74 68 65 20 53 51  o call.** the SQ
25bd0 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 34  LITE_ENABLE_FTS4
25be0 20 6d 61 63 72 6f 20 74 6f 20 73 65 72 76 65 20   macro to serve 
25bf0 61 73 20 61 6e 20 61 6c 69 61 73 20 66 6f 72 20  as an alias for 
25c00 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54  SQLITE_ENABLE_FT
25c10 53 33 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e  S3..*/.#if defin
25c20 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ed(SQLITE_ENABLE
25c30 5f 46 54 53 34 29 20 26 26 20 21 64 65 66 69 6e  _FTS4) && !defin
25c40 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ed(SQLITE_ENABLE
25c50 5f 46 54 53 33 29 0a 23 20 64 65 66 69 6e 65 20  _FTS3).# define 
25c60 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54  SQLITE_ENABLE_FT
25c70 53 33 20 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  S3 1.#endif../*.
25c80 2a 2a 20 54 68 65 20 63 74 79 70 65 2e 68 20 68  ** The ctype.h h
25c90 65 61 64 65 72 20 69 73 20 6e 65 65 64 65 64 20  eader is needed 
25ca0 66 6f 72 20 6e 6f 6e 2d 41 53 43 49 49 20 73 79  for non-ASCII sy
25cb0 73 74 65 6d 73 2e 20 20 49 74 20 69 73 20 61 6c  stems.  It is al
25cc0 73 6f 0a 2a 2a 20 6e 65 65 64 65 64 20 62 79 20  so.** needed by 
25cd0 46 54 53 33 20 77 68 65 6e 20 46 54 53 33 20 69  FTS3 when FTS3 i
25ce0 73 20 69 6e 63 6c 75 64 65 64 20 69 6e 20 74 68  s included in th
25cf0 65 20 61 6d 61 6c 67 61 6d 61 74 69 6f 6e 2e 0a  e amalgamation..
25d00 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28  */.#if !defined(
25d10 53 51 4c 49 54 45 5f 41 53 43 49 49 29 20 7c 7c  SQLITE_ASCII) ||
25d20 20 5c 0a 20 20 20 20 28 64 65 66 69 6e 65 64 28   \.    (defined(
25d30 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54  SQLITE_ENABLE_FT
25d40 53 33 29 20 26 26 20 64 65 66 69 6e 65 64 28 53  S3) && defined(S
25d50 51 4c 49 54 45 5f 41 4d 41 4c 47 41 4d 41 54 49  QLITE_AMALGAMATI
25d60 4f 4e 29 29 0a 23 20 69 6e 63 6c 75 64 65 20 3c  ON)).# include <
25d70 63 74 79 70 65 2e 68 3e 0a 23 65 6e 64 69 66 0a  ctype.h>.#endif.
25d80 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f  ./*.** The follo
25d90 77 69 6e 67 20 6d 61 63 72 6f 73 20 6d 69 6d 69  wing macros mimi
25da0 63 20 74 68 65 20 73 74 61 6e 64 61 72 64 20 6c  c the standard l
25db0 69 62 72 61 72 79 20 66 75 6e 63 74 69 6f 6e 73  ibrary functions
25dc0 20 74 6f 75 70 70 65 72 28 29 2c 0a 2a 2a 20 69   toupper(),.** i
25dd0 73 73 70 61 63 65 28 29 2c 20 69 73 61 6c 6e 75  sspace(), isalnu
25de0 6d 28 29 2c 20 69 73 64 69 67 69 74 28 29 20 61  m(), isdigit() a
25df0 6e 64 20 69 73 78 64 69 67 69 74 28 29 2c 20 72  nd isxdigit(), r
25e00 65 73 70 65 63 74 69 76 65 6c 79 2e 20 54 68 65  espectively. The
25e10 0a 2a 2a 20 73 71 6c 69 74 65 20 76 65 72 73 69  .** sqlite versi
25e20 6f 6e 73 20 6f 6e 6c 79 20 77 6f 72 6b 20 66 6f  ons only work fo
25e30 72 20 41 53 43 49 49 20 63 68 61 72 61 63 74 65  r ASCII characte
25e40 72 73 2c 20 72 65 67 61 72 64 6c 65 73 73 20 6f  rs, regardless o
25e50 66 20 6c 6f 63 61 6c 65 2e 0a 2a 2f 0a 23 69 66  f locale..*/.#if
25e60 64 65 66 20 53 51 4c 49 54 45 5f 41 53 43 49 49  def SQLITE_ASCII
25e70 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
25e80 33 54 6f 75 70 70 65 72 28 78 29 20 20 28 28 78  3Toupper(x)  ((x
25e90 29 26 7e 28 73 71 6c 69 74 65 33 43 74 79 70 65  )&~(sqlite3Ctype
25ea0 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64 20 63 68  Map[(unsigned ch
25eb0 61 72 29 28 78 29 5d 26 30 78 32 30 29 29 0a 23  ar)(x)]&0x20)).#
25ec0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49   define sqlite3I
25ed0 73 73 70 61 63 65 28 78 29 20 20 20 28 73 71 6c  sspace(x)   (sql
25ee0 69 74 65 33 43 74 79 70 65 4d 61 70 5b 28 75 6e  ite3CtypeMap[(un
25ef0 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d  signed char)(x)]
25f00 26 30 78 30 31 29 0a 23 20 64 65 66 69 6e 65 20  &0x01).# define 
25f10 73 71 6c 69 74 65 33 49 73 61 6c 6e 75 6d 28 78  sqlite3Isalnum(x
25f20 29 20 20 20 28 73 71 6c 69 74 65 33 43 74 79 70  )   (sqlite3Ctyp
25f30 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64 20 63  eMap[(unsigned c
25f40 68 61 72 29 28 78 29 5d 26 30 78 30 36 29 0a 23  har)(x)]&0x06).#
25f50 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49   define sqlite3I
25f60 73 61 6c 70 68 61 28 78 29 20 20 20 28 73 71 6c  salpha(x)   (sql
25f70 69 74 65 33 43 74 79 70 65 4d 61 70 5b 28 75 6e  ite3CtypeMap[(un
25f80 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d  signed char)(x)]
25f90 26 30 78 30 32 29 0a 23 20 64 65 66 69 6e 65 20  &0x02).# define 
25fa0 73 71 6c 69 74 65 33 49 73 64 69 67 69 74 28 78  sqlite3Isdigit(x
25fb0 29 20 20 20 28 73 71 6c 69 74 65 33 43 74 79 70  )   (sqlite3Ctyp
25fc0 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64 20 63  eMap[(unsigned c
25fd0 68 61 72 29 28 78 29 5d 26 30 78 30 34 29 0a 23  har)(x)]&0x04).#
25fe0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49   define sqlite3I
25ff0 73 78 64 69 67 69 74 28 78 29 20 20 28 73 71 6c  sxdigit(x)  (sql
26000 69 74 65 33 43 74 79 70 65 4d 61 70 5b 28 75 6e  ite3CtypeMap[(un
26010 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d  signed char)(x)]
26020 26 30 78 30 38 29 0a 23 20 64 65 66 69 6e 65 20  &0x08).# define 
26030 73 71 6c 69 74 65 33 54 6f 6c 6f 77 65 72 28 78  sqlite3Tolower(x
26040 29 20 20 20 28 73 71 6c 69 74 65 33 55 70 70 65  )   (sqlite3Uppe
26050 72 54 6f 4c 6f 77 65 72 5b 28 75 6e 73 69 67 6e  rToLower[(unsign
26060 65 64 20 63 68 61 72 29 28 78 29 5d 29 0a 23 20  ed char)(x)]).# 
26070 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73  define sqlite3Is
26080 71 75 6f 74 65 28 78 29 20 20 20 28 73 71 6c 69  quote(x)   (sqli
26090 74 65 33 43 74 79 70 65 4d 61 70 5b 28 75 6e 73  te3CtypeMap[(uns
260a0 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d 26  igned char)(x)]&
260b0 30 78 38 30 29 0a 23 65 6c 73 65 0a 23 20 64 65  0x80).#else.# de
260c0 66 69 6e 65 20 73 71 6c 69 74 65 33 54 6f 75 70  fine sqlite3Toup
260d0 70 65 72 28 78 29 20 20 20 74 6f 75 70 70 65 72  per(x)   toupper
260e0 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29  ((unsigned char)
260f0 28 78 29 29 0a 23 20 64 65 66 69 6e 65 20 73 71  (x)).# define sq
26100 6c 69 74 65 33 49 73 73 70 61 63 65 28 78 29 20  lite3Isspace(x) 
26110 20 20 69 73 73 70 61 63 65 28 28 75 6e 73 69 67    isspace((unsig
26120 6e 65 64 20 63 68 61 72 29 28 78 29 29 0a 23 20  ned char)(x)).# 
26130 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73  define sqlite3Is
26140 61 6c 6e 75 6d 28 78 29 20 20 20 69 73 61 6c 6e  alnum(x)   isaln
26150 75 6d 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61  um((unsigned cha
26160 72 29 28 78 29 29 0a 23 20 64 65 66 69 6e 65 20  r)(x)).# define 
26170 73 71 6c 69 74 65 33 49 73 61 6c 70 68 61 28 78  sqlite3Isalpha(x
26180 29 20 20 20 69 73 61 6c 70 68 61 28 28 75 6e 73  )   isalpha((uns
26190 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 29 0a  igned char)(x)).
261a0 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
261b0 49 73 64 69 67 69 74 28 78 29 20 20 20 69 73 64  Isdigit(x)   isd
261c0 69 67 69 74 28 28 75 6e 73 69 67 6e 65 64 20 63  igit((unsigned c
261d0 68 61 72 29 28 78 29 29 0a 23 20 64 65 66 69 6e  har)(x)).# defin
261e0 65 20 73 71 6c 69 74 65 33 49 73 78 64 69 67 69  e sqlite3Isxdigi
261f0 74 28 78 29 20 20 69 73 78 64 69 67 69 74 28 28  t(x)  isxdigit((
26200 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78  unsigned char)(x
26210 29 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  )).# define sqli
26220 74 65 33 54 6f 6c 6f 77 65 72 28 78 29 20 20 20  te3Tolower(x)   
26230 74 6f 6c 6f 77 65 72 28 28 75 6e 73 69 67 6e 65  tolower((unsigne
26240 64 20 63 68 61 72 29 28 78 29 29 0a 23 20 64 65  d char)(x)).# de
26250 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 71 75  fine sqlite3Isqu
26260 6f 74 65 28 78 29 20 20 20 28 28 78 29 3d 3d 27  ote(x)   ((x)=='
26270 22 27 7c 7c 28 78 29 3d 3d 27 5c 27 27 7c 7c 28  "'||(x)=='\''||(
26280 78 29 3d 3d 27 5b 27 7c 7c 28 78 29 3d 3d 27 60  x)=='['||(x)=='`
26290 27 29 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65  ').#endif.#ifnde
262a0 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 4f  f SQLITE_OMIT_CO
262b0 4d 50 49 4c 45 4f 50 54 49 4f 4e 5f 44 49 41 47  MPILEOPTION_DIAG
262c0 53 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 73 49  S.int sqlite3IsI
262d0 64 43 68 61 72 28 75 38 29 3b 0a 23 65 6e 64 69  dChar(u8);.#endi
262e0 66 0a 0a 2f 2a 0a 2a 2a 20 49 6e 74 65 72 6e 61  f../*.** Interna
262f0 6c 20 66 75 6e 63 74 69 6f 6e 20 70 72 6f 74 6f  l function proto
26300 74 79 70 65 73 0a 2a 2f 0a 69 6e 74 20 73 71 6c  types.*/.int sql
26310 69 74 65 33 53 74 72 49 43 6d 70 28 63 6f 6e 73  ite3StrICmp(cons
26320 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68  t char*,const ch
26330 61 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  ar*);.int sqlite
26340 33 53 74 72 6c 65 6e 33 30 28 63 6f 6e 73 74 20  3Strlen30(const 
26350 63 68 61 72 2a 29 3b 0a 63 68 61 72 20 2a 73 71  char*);.char *sq
26360 6c 69 74 65 33 43 6f 6c 75 6d 6e 54 79 70 65 28  lite3ColumnType(
26370 43 6f 6c 75 6d 6e 2a 2c 63 68 61 72 2a 29 3b 0a  Column*,char*);.
26380 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53  #define sqlite3S
26390 74 72 4e 49 43 6d 70 20 73 71 6c 69 74 65 33 5f  trNICmp sqlite3_
263a0 73 74 72 6e 69 63 6d 70 0a 0a 69 6e 74 20 73 71  strnicmp..int sq
263b0 6c 69 74 65 33 4d 61 6c 6c 6f 63 49 6e 69 74 28  lite3MallocInit(
263c0 76 6f 69 64 29 3b 0a 76 6f 69 64 20 73 71 6c 69  void);.void sqli
263d0 74 65 33 4d 61 6c 6c 6f 63 45 6e 64 28 76 6f 69  te3MallocEnd(voi
263e0 64 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65  d);.void *sqlite
263f0 33 4d 61 6c 6c 6f 63 28 75 36 34 29 3b 0a 76 6f  3Malloc(u64);.vo
26400 69 64 20 2a 73 71 6c 69 74 65 33 4d 61 6c 6c 6f  id *sqlite3Mallo
26410 63 5a 65 72 6f 28 75 36 34 29 3b 0a 76 6f 69 64  cZero(u64);.void
26420 20 2a 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f   *sqlite3DbMallo
26430 63 5a 65 72 6f 28 73 71 6c 69 74 65 33 2a 2c 20  cZero(sqlite3*, 
26440 75 36 34 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69  u64);.void *sqli
26450 74 65 33 44 62 4d 61 6c 6c 6f 63 52 61 77 28 73  te3DbMallocRaw(s
26460 71 6c 69 74 65 33 2a 2c 20 75 36 34 29 3b 0a 76  qlite3*, u64);.v
26470 6f 69 64 20 2a 73 71 6c 69 74 65 33 44 62 4d 61  oid *sqlite3DbMa
26480 6c 6c 6f 63 52 61 77 4e 4e 28 73 71 6c 69 74 65  llocRawNN(sqlite
26490 33 2a 2c 20 75 36 34 29 3b 0a 63 68 61 72 20 2a  3*, u64);.char *
264a0 73 71 6c 69 74 65 33 44 62 53 74 72 44 75 70 28  sqlite3DbStrDup(
264b0 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63  sqlite3*,const c
264c0 68 61 72 2a 29 3b 0a 63 68 61 72 20 2a 73 71 6c  har*);.char *sql
264d0 69 74 65 33 44 62 53 74 72 4e 44 75 70 28 73 71  ite3DbStrNDup(sq
264e0 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61  lite3*,const cha
264f0 72 2a 2c 20 75 36 34 29 3b 0a 63 68 61 72 20 2a  r*, u64);.char *
26500 73 71 6c 69 74 65 33 44 62 53 70 61 6e 44 75 70  sqlite3DbSpanDup
26510 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20  (sqlite3*,const 
26520 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72  char*,const char
26530 2a 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65  *);.void *sqlite
26540 33 52 65 61 6c 6c 6f 63 28 76 6f 69 64 2a 2c 20  3Realloc(void*, 
26550 75 36 34 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69  u64);.void *sqli
26560 74 65 33 44 62 52 65 61 6c 6c 6f 63 4f 72 46 72  te3DbReallocOrFr
26570 65 65 28 73 71 6c 69 74 65 33 20 2a 2c 20 76 6f  ee(sqlite3 *, vo
26580 69 64 20 2a 2c 20 75 36 34 29 3b 0a 76 6f 69 64  id *, u64);.void
26590 20 2a 73 71 6c 69 74 65 33 44 62 52 65 61 6c 6c   *sqlite3DbReall
265a0 6f 63 28 73 71 6c 69 74 65 33 20 2a 2c 20 76 6f  oc(sqlite3 *, vo
265b0 69 64 20 2a 2c 20 75 36 34 29 3b 0a 76 6f 69 64  id *, u64);.void
265c0 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 73   sqlite3DbFree(s
265d0 71 6c 69 74 65 33 2a 2c 20 76 6f 69 64 2a 29 3b  qlite3*, void*);
265e0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44 62 46  .void sqlite3DbF
265f0 72 65 65 4e 4e 28 73 71 6c 69 74 65 33 2a 2c 20  reeNN(sqlite3*, 
26600 76 6f 69 64 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  void*);.int sqli
26610 74 65 33 4d 61 6c 6c 6f 63 53 69 7a 65 28 76 6f  te3MallocSize(vo
26620 69 64 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  id*);.int sqlite
26630 33 44 62 4d 61 6c 6c 6f 63 53 69 7a 65 28 73 71  3DbMallocSize(sq
26640 6c 69 74 65 33 2a 2c 20 76 6f 69 64 2a 29 3b 0a  lite3*, void*);.
26650 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 50 61 67  void *sqlite3Pag
26660 65 4d 61 6c 6c 6f 63 28 69 6e 74 29 3b 0a 76 6f  eMalloc(int);.vo
26670 69 64 20 73 71 6c 69 74 65 33 50 61 67 65 46 72  id sqlite3PageFr
26680 65 65 28 76 6f 69 64 2a 29 3b 0a 76 6f 69 64 20  ee(void*);.void 
26690 73 71 6c 69 74 65 33 4d 65 6d 53 65 74 44 65 66  sqlite3MemSetDef
266a0 61 75 6c 74 28 76 6f 69 64 29 3b 0a 23 69 66 6e  ault(void);.#ifn
266b0 64 65 66 20 53 51 4c 49 54 45 5f 55 4e 54 45 53  def SQLITE_UNTES
266c0 54 41 42 4c 45 0a 76 6f 69 64 20 73 71 6c 69 74  TABLE.void sqlit
266d0 65 33 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 48 6f  e3BenignMallocHo
266e0 6f 6b 73 28 76 6f 69 64 20 28 2a 29 28 76 6f 69  oks(void (*)(voi
266f0 64 29 2c 20 76 6f 69 64 20 28 2a 29 28 76 6f 69  d), void (*)(voi
26700 64 29 29 3b 0a 23 65 6e 64 69 66 0a 69 6e 74 20  d));.#endif.int 
26710 73 71 6c 69 74 65 33 48 65 61 70 4e 65 61 72 6c  sqlite3HeapNearl
26720 79 46 75 6c 6c 28 76 6f 69 64 29 3b 0a 0a 2f 2a  yFull(void);../*
26730 0a 2a 2a 20 4f 6e 20 73 79 73 74 65 6d 73 20 77  .** On systems w
26740 69 74 68 20 61 6d 70 6c 65 20 73 74 61 63 6b 20  ith ample stack 
26750 73 70 61 63 65 20 61 6e 64 20 74 68 61 74 20 73  space and that s
26760 75 70 70 6f 72 74 20 61 6c 6c 6f 63 61 28 29 2c  upport alloca(),
26770 20 6d 61 6b 65 0a 2a 2a 20 75 73 65 20 6f 66 20   make.** use of 
26780 61 6c 6c 6f 63 61 28 29 20 74 6f 20 6f 62 74 61  alloca() to obta
26790 69 6e 20 73 70 61 63 65 20 66 6f 72 20 6c 61 72  in space for lar
267a0 67 65 20 61 75 74 6f 6d 61 74 69 63 20 6f 62 6a  ge automatic obj
267b0 65 63 74 73 2e 20 20 42 79 20 64 65 66 61 75 6c  ects.  By defaul
267c0 74 2c 0a 2a 2a 20 6f 62 74 61 69 6e 20 73 70 61  t,.** obtain spa
267d0 63 65 20 66 72 6f 6d 20 6d 61 6c 6c 6f 63 28 29  ce from malloc()
267e0 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 61 6c 6c 6f  ..**.** The allo
267f0 63 61 28 29 20 72 6f 75 74 69 6e 65 20 6e 65 76  ca() routine nev
26800 65 72 20 72 65 74 75 72 6e 73 20 4e 55 4c 4c 2e  er returns NULL.
26810 20 20 54 68 69 73 20 77 69 6c 6c 20 63 61 75 73    This will caus
26820 65 20 63 6f 64 65 20 70 61 74 68 73 0a 2a 2a 20  e code paths.** 
26830 74 68 61 74 20 64 65 61 6c 20 77 69 74 68 20 73  that deal with s
26840 71 6c 69 74 65 33 53 74 61 63 6b 41 6c 6c 6f 63  qlite3StackAlloc
26850 28 29 20 66 61 69 6c 75 72 65 73 20 74 6f 20 62  () failures to b
26860 65 20 75 6e 72 65 61 63 68 61 62 6c 65 2e 0a 2a  e unreachable..*
26870 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
26880 55 53 45 5f 41 4c 4c 4f 43 41 0a 23 20 64 65 66  USE_ALLOCA.# def
26890 69 6e 65 20 73 71 6c 69 74 65 33 53 74 61 63 6b  ine sqlite3Stack
268a0 41 6c 6c 6f 63 52 61 77 28 44 2c 4e 29 20 20 20  AllocRaw(D,N)   
268b0 61 6c 6c 6f 63 61 28 4e 29 0a 23 20 64 65 66 69  alloca(N).# defi
268c0 6e 65 20 73 71 6c 69 74 65 33 53 74 61 63 6b 41  ne sqlite3StackA
268d0 6c 6c 6f 63 5a 65 72 6f 28 44 2c 4e 29 20 20 6d  llocZero(D,N)  m
268e0 65 6d 73 65 74 28 61 6c 6c 6f 63 61 28 4e 29 2c  emset(alloca(N),
268f0 20 30 2c 20 4e 29 0a 23 20 64 65 66 69 6e 65 20   0, N).# define 
26900 73 71 6c 69 74 65 33 53 74 61 63 6b 46 72 65 65  sqlite3StackFree
26910 28 44 2c 50 29 0a 23 65 6c 73 65 0a 23 20 64 65  (D,P).#else.# de
26920 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74 61 63  fine sqlite3Stac
26930 6b 41 6c 6c 6f 63 52 61 77 28 44 2c 4e 29 20 20  kAllocRaw(D,N)  
26940 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63   sqlite3DbMalloc
26950 52 61 77 28 44 2c 4e 29 0a 23 20 64 65 66 69 6e  Raw(D,N).# defin
26960 65 20 73 71 6c 69 74 65 33 53 74 61 63 6b 41 6c  e sqlite3StackAl
26970 6c 6f 63 5a 65 72 6f 28 44 2c 4e 29 20 20 73 71  locZero(D,N)  sq
26980 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 5a 65 72  lite3DbMallocZer
26990 6f 28 44 2c 4e 29 0a 23 20 64 65 66 69 6e 65 20  o(D,N).# define 
269a0 73 71 6c 69 74 65 33 53 74 61 63 6b 46 72 65 65  sqlite3StackFree
269b0 28 44 2c 50 29 20 20 20 20 20 20 20 73 71 6c 69  (D,P)       sqli
269c0 74 65 33 44 62 46 72 65 65 28 44 2c 50 29 0a 23  te3DbFree(D,P).#
269d0 65 6e 64 69 66 0a 0a 2f 2a 20 44 6f 20 6e 6f 74  endif../* Do not
269e0 20 61 6c 6c 6f 77 20 62 6f 74 68 20 4d 45 4d 53   allow both MEMS
269f0 59 53 35 20 61 6e 64 20 4d 45 4d 53 59 53 33 20  YS5 and MEMSYS3 
26a00 74 6f 20 62 65 20 64 65 66 69 6e 65 64 20 74 6f  to be defined to
26a10 67 65 74 68 65 72 2e 20 20 49 66 20 74 68 65 79  gether.  If they
26a20 0a 2a 2a 20 61 72 65 2c 20 64 69 73 61 62 6c 65  .** are, disable
26a30 20 4d 45 4d 53 59 53 33 0a 2a 2f 0a 23 69 66 64   MEMSYS3.*/.#ifd
26a40 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ef SQLITE_ENABLE
26a50 5f 4d 45 4d 53 59 53 35 0a 63 6f 6e 73 74 20 73  _MEMSYS5.const s
26a60 71 6c 69 74 65 33 5f 6d 65 6d 5f 6d 65 74 68 6f  qlite3_mem_metho
26a70 64 73 20 2a 73 71 6c 69 74 65 33 4d 65 6d 47 65  ds *sqlite3MemGe
26a80 74 4d 65 6d 73 79 73 35 28 76 6f 69 64 29 3b 0a  tMemsys5(void);.
26a90 23 75 6e 64 65 66 20 53 51 4c 49 54 45 5f 45 4e  #undef SQLITE_EN
26aa0 41 42 4c 45 5f 4d 45 4d 53 59 53 33 0a 23 65 6e  ABLE_MEMSYS3.#en
26ab0 64 69 66 0a 23 69 66 64 65 66 20 53 51 4c 49 54  dif.#ifdef SQLIT
26ac0 45 5f 45 4e 41 42 4c 45 5f 4d 45 4d 53 59 53 33  E_ENABLE_MEMSYS3
26ad0 0a 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d  .const sqlite3_m
26ae0 65 6d 5f 6d 65 74 68 6f 64 73 20 2a 73 71 6c 69  em_methods *sqli
26af0 74 65 33 4d 65 6d 47 65 74 4d 65 6d 73 79 73 33  te3MemGetMemsys3
26b00 28 76 6f 69 64 29 3b 0a 23 65 6e 64 69 66 0a 0a  (void);.#endif..
26b10 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
26b20 4d 55 54 45 58 5f 4f 4d 49 54 0a 20 20 73 71 6c  MUTEX_OMIT.  sql
26b30 69 74 65 33 5f 6d 75 74 65 78 5f 6d 65 74 68 6f  ite3_mutex_metho
26b40 64 73 20 63 6f 6e 73 74 20 2a 73 71 6c 69 74 65  ds const *sqlite
26b50 33 44 65 66 61 75 6c 74 4d 75 74 65 78 28 76 6f  3DefaultMutex(vo
26b60 69 64 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f 6d  id);.  sqlite3_m
26b70 75 74 65 78 5f 6d 65 74 68 6f 64 73 20 63 6f 6e  utex_methods con
26b80 73 74 20 2a 73 71 6c 69 74 65 33 4e 6f 6f 70 4d  st *sqlite3NoopM
26b90 75 74 65 78 28 76 6f 69 64 29 3b 0a 20 20 73 71  utex(void);.  sq
26ba0 6c 69 74 65 33 5f 6d 75 74 65 78 20 2a 73 71 6c  lite3_mutex *sql
26bb0 69 74 65 33 4d 75 74 65 78 41 6c 6c 6f 63 28 69  ite3MutexAlloc(i
26bc0 6e 74 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74  nt);.  int sqlit
26bd0 65 33 4d 75 74 65 78 49 6e 69 74 28 76 6f 69 64  e3MutexInit(void
26be0 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33  );.  int sqlite3
26bf0 4d 75 74 65 78 45 6e 64 28 76 6f 69 64 29 3b 0a  MutexEnd(void);.
26c00 23 65 6e 64 69 66 0a 23 69 66 20 21 64 65 66 69  #endif.#if !defi
26c10 6e 65 64 28 53 51 4c 49 54 45 5f 4d 55 54 45 58  ned(SQLITE_MUTEX
26c20 5f 4f 4d 49 54 29 20 26 26 20 21 64 65 66 69 6e  _OMIT) && !defin
26c30 65 64 28 53 51 4c 49 54 45 5f 4d 55 54 45 58 5f  ed(SQLITE_MUTEX_
26c40 4e 4f 4f 50 29 0a 20 20 76 6f 69 64 20 73 71 6c  NOOP).  void sql
26c50 69 74 65 33 4d 65 6d 6f 72 79 42 61 72 72 69 65  ite3MemoryBarrie
26c60 72 28 76 6f 69 64 29 3b 0a 23 65 6c 73 65 0a 23  r(void);.#else.#
26c70 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 4d   define sqlite3M
26c80 65 6d 6f 72 79 42 61 72 72 69 65 72 28 29 0a 23  emoryBarrier().#
26c90 65 6e 64 69 66 0a 0a 73 71 6c 69 74 65 33 5f 69  endif..sqlite3_i
26ca0 6e 74 36 34 20 73 71 6c 69 74 65 33 53 74 61 74  nt64 sqlite3Stat
26cb0 75 73 56 61 6c 75 65 28 69 6e 74 29 3b 0a 76 6f  usValue(int);.vo
26cc0 69 64 20 73 71 6c 69 74 65 33 53 74 61 74 75 73  id sqlite3Status
26cd0 55 70 28 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f  Up(int, int);.vo
26ce0 69 64 20 73 71 6c 69 74 65 33 53 74 61 74 75 73  id sqlite3Status
26cf0 44 6f 77 6e 28 69 6e 74 2c 20 69 6e 74 29 3b 0a  Down(int, int);.
26d00 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74 61 74  void sqlite3Stat
26d10 75 73 48 69 67 68 77 61 74 65 72 28 69 6e 74 2c  usHighwater(int,
26d20 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74   int);.int sqlit
26d30 65 33 4c 6f 6f 6b 61 73 69 64 65 55 73 65 64 28  e3LookasideUsed(
26d40 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2a 29 3b 0a  sqlite3*,int*);.
26d50 0a 2f 2a 20 41 63 63 65 73 73 20 74 6f 20 6d 75  ./* Access to mu
26d60 74 65 78 65 73 20 75 73 65 64 20 62 79 20 73 71  texes used by sq
26d70 6c 69 74 65 33 5f 73 74 61 74 75 73 28 29 20 2a  lite3_status() *
26d80 2f 0a 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 20  /.sqlite3_mutex 
26d90 2a 73 71 6c 69 74 65 33 50 63 61 63 68 65 31 4d  *sqlite3Pcache1M
26da0 75 74 65 78 28 76 6f 69 64 29 3b 0a 73 71 6c 69  utex(void);.sqli
26db0 74 65 33 5f 6d 75 74 65 78 20 2a 73 71 6c 69 74  te3_mutex *sqlit
26dc0 65 33 4d 61 6c 6c 6f 63 4d 75 74 65 78 28 76 6f  e3MallocMutex(vo
26dd0 69 64 29 3b 0a 0a 23 69 66 20 64 65 66 69 6e 65  id);..#if define
26de0 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  d(SQLITE_ENABLE_
26df0 4d 55 4c 54 49 54 48 52 45 41 44 45 44 5f 43 48  MULTITHREADED_CH
26e00 45 43 4b 53 29 20 26 26 20 21 64 65 66 69 6e 65  ECKS) && !define
26e10 64 28 53 51 4c 49 54 45 5f 4d 55 54 45 58 5f 4f  d(SQLITE_MUTEX_O
26e20 4d 49 54 29 0a 76 6f 69 64 20 73 71 6c 69 74 65  MIT).void sqlite
26e30 33 4d 75 74 65 78 57 61 72 6e 4f 6e 43 6f 6e 74  3MutexWarnOnCont
26e40 65 6e 74 69 6f 6e 28 73 71 6c 69 74 65 33 5f 6d  ention(sqlite3_m
26e50 75 74 65 78 2a 29 3b 0a 23 65 6c 73 65 0a 23 20  utex*);.#else.# 
26e60 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 4d 75  define sqlite3Mu
26e70 74 65 78 57 61 72 6e 4f 6e 43 6f 6e 74 65 6e 74  texWarnOnContent
26e80 69 6f 6e 28 78 29 0a 23 65 6e 64 69 66 0a 0a 23  ion(x).#endif..#
26e90 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
26ea0 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e  IT_FLOATING_POIN
26eb0 54 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 49  T.  int sqlite3I
26ec0 73 4e 61 4e 28 64 6f 75 62 6c 65 29 3b 0a 23 65  sNaN(double);.#e
26ed0 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  lse.# define sql
26ee0 69 74 65 33 49 73 4e 61 4e 28 58 29 20 20 30 0a  ite3IsNaN(X)  0.
26ef0 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6e  #endif../*.** An
26f00 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65   instance of the
26f10 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63   following struc
26f20 74 75 72 65 20 68 6f 6c 64 73 20 69 6e 66 6f 72  ture holds infor
26f30 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 53 51 4c  mation about SQL
26f40 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 73 20 61 72  .** functions ar
26f50 67 75 6d 65 6e 74 73 20 74 68 61 74 20 61 72 65  guments that are
26f60 20 74 68 65 20 70 61 72 61 6d 65 74 65 72 73 20   the parameters 
26f70 74 6f 20 74 68 65 20 70 72 69 6e 74 66 28 29 20  to the printf() 
26f80 66 75 6e 63 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72  function..*/.str
26f90 75 63 74 20 50 72 69 6e 74 66 41 72 67 75 6d 65  uct PrintfArgume
26fa0 6e 74 73 20 7b 0a 20 20 69 6e 74 20 6e 41 72 67  nts {.  int nArg
26fb0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
26fc0 20 2f 2a 20 54 6f 74 61 6c 20 6e 75 6d 62 65 72   /* Total number
26fd0 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f   of arguments */
26fe0 0a 20 20 69 6e 74 20 6e 55 73 65 64 3b 20 20 20  .  int nUsed;   
26ff0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
27000 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e  umber of argumen
27010 74 73 20 75 73 65 64 20 73 6f 20 66 61 72 20 2a  ts used so far *
27020 2f 0a 20 20 73 71 6c 69 74 65 33 5f 76 61 6c 75  /.  sqlite3_valu
27030 65 20 2a 2a 61 70 41 72 67 3b 20 20 20 2f 2a 20  e **apArg;   /* 
27040 54 68 65 20 61 72 67 75 6d 65 6e 74 20 76 61 6c  The argument val
27050 75 65 73 20 2a 2f 0a 7d 3b 0a 0a 63 68 61 72 20  ues */.};..char 
27060 2a 73 71 6c 69 74 65 33 4d 50 72 69 6e 74 66 28  *sqlite3MPrintf(
27070 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63  sqlite3*,const c
27080 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 63 68 61 72  har*, ...);.char
27090 20 2a 73 71 6c 69 74 65 33 56 4d 50 72 69 6e 74   *sqlite3VMPrint
270a0 66 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74  f(sqlite3*,const
270b0 20 63 68 61 72 2a 2c 20 76 61 5f 6c 69 73 74 29   char*, va_list)
270c0 3b 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51  ;.#if defined(SQ
270d0 4c 49 54 45 5f 44 45 42 55 47 29 20 7c 7c 20 64  LITE_DEBUG) || d
270e0 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 48 41  efined(SQLITE_HA
270f0 56 45 5f 4f 53 5f 54 52 41 43 45 29 0a 20 20 76  VE_OS_TRACE).  v
27100 6f 69 64 20 73 71 6c 69 74 65 33 44 65 62 75 67  oid sqlite3Debug
27110 50 72 69 6e 74 66 28 63 6f 6e 73 74 20 63 68 61  Printf(const cha
27120 72 2a 2c 20 2e 2e 2e 29 3b 0a 23 65 6e 64 69 66  r*, ...);.#endif
27130 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c  .#if defined(SQL
27140 49 54 45 5f 54 45 53 54 29 0a 20 20 76 6f 69 64  ITE_TEST).  void
27150 20 2a 73 71 6c 69 74 65 33 54 65 73 74 54 65 78   *sqlite3TestTex
27160 74 54 6f 50 74 72 28 63 6f 6e 73 74 20 63 68 61  tToPtr(const cha
27170 72 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66  r*);.#endif..#if
27180 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
27190 44 45 42 55 47 29 0a 20 20 76 6f 69 64 20 73 71  DEBUG).  void sq
271a0 6c 69 74 65 33 54 72 65 65 56 69 65 77 45 78 70  lite3TreeViewExp
271b0 72 28 54 72 65 65 56 69 65 77 2a 2c 20 63 6f 6e  r(TreeView*, con
271c0 73 74 20 45 78 70 72 2a 2c 20 75 38 29 3b 0a 20  st Expr*, u8);. 
271d0 20 76 6f 69 64 20 73 71 6c 69 74 65 33 54 72 65   void sqlite3Tre
271e0 65 56 69 65 77 42 61 72 65 45 78 70 72 4c 69 73  eViewBareExprLis
271f0 74 28 54 72 65 65 56 69 65 77 2a 2c 20 63 6f 6e  t(TreeView*, con
27200 73 74 20 45 78 70 72 4c 69 73 74 2a 2c 20 63 6f  st ExprList*, co
27210 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20 20 76 6f  nst char*);.  vo
27220 69 64 20 73 71 6c 69 74 65 33 54 72 65 65 56 69  id sqlite3TreeVi
27230 65 77 45 78 70 72 4c 69 73 74 28 54 72 65 65 56  ewExprList(TreeV
27240 69 65 77 2a 2c 20 63 6f 6e 73 74 20 45 78 70 72  iew*, const Expr
27250 4c 69 73 74 2a 2c 20 75 38 2c 20 63 6f 6e 73 74  List*, u8, const
27260 20 63 68 61 72 2a 29 3b 0a 20 20 76 6f 69 64 20   char*);.  void 
27270 73 71 6c 69 74 65 33 54 72 65 65 56 69 65 77 53  sqlite3TreeViewS
27280 65 6c 65 63 74 28 54 72 65 65 56 69 65 77 2a 2c  elect(TreeView*,
27290 20 63 6f 6e 73 74 20 53 65 6c 65 63 74 2a 2c 20   const Select*, 
272a0 75 38 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69  u8);.  void sqli
272b0 74 65 33 54 72 65 65 56 69 65 77 57 69 74 68 28  te3TreeViewWith(
272c0 54 72 65 65 56 69 65 77 2a 2c 20 63 6f 6e 73 74  TreeView*, const
272d0 20 57 69 74 68 2a 2c 20 75 38 29 3b 0a 23 65 6e   With*, u8);.#en
272e0 64 69 66 0a 0a 0a 76 6f 69 64 20 73 71 6c 69 74  dif...void sqlit
272f0 65 33 53 65 74 53 74 72 69 6e 67 28 63 68 61 72  e3SetString(char
27300 20 2a 2a 2c 20 73 71 6c 69 74 65 33 2a 2c 20 63   **, sqlite3*, c
27310 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69  onst char*);.voi
27320 64 20 73 71 6c 69 74 65 33 45 72 72 6f 72 4d 73  d sqlite3ErrorMs
27330 67 28 50 61 72 73 65 2a 2c 20 63 6f 6e 73 74 20  g(Parse*, const 
27340 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 76 6f 69  char*, ...);.voi
27350 64 20 73 71 6c 69 74 65 33 44 65 71 75 6f 74 65  d sqlite3Dequote
27360 28 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71  (char*);.void sq
27370 6c 69 74 65 33 54 6f 6b 65 6e 49 6e 69 74 28 54  lite3TokenInit(T
27380 6f 6b 65 6e 2a 2c 63 68 61 72 2a 29 3b 0a 69 6e  oken*,char*);.in
27390 74 20 73 71 6c 69 74 65 33 4b 65 79 77 6f 72 64  t sqlite3Keyword
273a0 43 6f 64 65 28 63 6f 6e 73 74 20 75 6e 73 69 67  Code(const unsig
273b0 6e 65 64 20 63 68 61 72 2a 2c 20 69 6e 74 29 3b  ned char*, int);
273c0 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 75 6e 50  .int sqlite3RunP
273d0 61 72 73 65 72 28 50 61 72 73 65 2a 2c 20 63 6f  arser(Parse*, co
273e0 6e 73 74 20 63 68 61 72 2a 2c 20 63 68 61 72 20  nst char*, char 
273f0 2a 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  **);.void sqlite
27400 33 46 69 6e 69 73 68 43 6f 64 69 6e 67 28 50 61  3FinishCoding(Pa
27410 72 73 65 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  rse*);.int sqlit
27420 65 33 47 65 74 54 65 6d 70 52 65 67 28 50 61 72  e3GetTempReg(Par
27430 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  se*);.void sqlit
27440 65 33 52 65 6c 65 61 73 65 54 65 6d 70 52 65 67  e3ReleaseTempReg
27450 28 50 61 72 73 65 2a 2c 69 6e 74 29 3b 0a 69 6e  (Parse*,int);.in
27460 74 20 73 71 6c 69 74 65 33 47 65 74 54 65 6d 70  t sqlite3GetTemp
27470 52 61 6e 67 65 28 50 61 72 73 65 2a 2c 69 6e 74  Range(Parse*,int
27480 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52  );.void sqlite3R
27490 65 6c 65 61 73 65 54 65 6d 70 52 61 6e 67 65 28  eleaseTempRange(
274a0 50 61 72 73 65 2a 2c 69 6e 74 2c 69 6e 74 29 3b  Parse*,int,int);
274b0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6c 65  .void sqlite3Cle
274c0 61 72 54 65 6d 70 52 65 67 43 61 63 68 65 28 50  arTempRegCache(P
274d0 61 72 73 65 2a 29 3b 0a 23 69 66 64 65 66 20 53  arse*);.#ifdef S
274e0 51 4c 49 54 45 5f 44 45 42 55 47 0a 69 6e 74 20  QLITE_DEBUG.int 
274f0 73 71 6c 69 74 65 33 4e 6f 54 65 6d 70 73 49 6e  sqlite3NoTempsIn
27500 52 61 6e 67 65 28 50 61 72 73 65 2a 2c 69 6e 74  Range(Parse*,int
27510 2c 69 6e 74 29 3b 0a 23 65 6e 64 69 66 0a 45 78  ,int);.#endif.Ex
27520 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72 41  pr *sqlite3ExprA
27530 6c 6c 6f 63 28 73 71 6c 69 74 65 33 2a 2c 69 6e  lloc(sqlite3*,in
27540 74 2c 63 6f 6e 73 74 20 54 6f 6b 65 6e 2a 2c 69  t,const Token*,i
27550 6e 74 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74  nt);.Expr *sqlit
27560 65 33 45 78 70 72 28 73 71 6c 69 74 65 33 2a 2c  e3Expr(sqlite3*,
27570 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29  int,const char*)
27580 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
27590 70 72 41 74 74 61 63 68 53 75 62 74 72 65 65 73  prAttachSubtrees
275a0 28 73 71 6c 69 74 65 33 2a 2c 45 78 70 72 2a 2c  (sqlite3*,Expr*,
275b0 45 78 70 72 2a 2c 45 78 70 72 2a 29 3b 0a 45 78  Expr*,Expr*);.Ex
275c0 70 72 20 2a 73 71 6c 69 74 65 33 50 45 78 70 72  pr *sqlite3PExpr
275d0 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 45 78  (Parse*, int, Ex
275e0 70 72 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69  pr*, Expr*);.voi
275f0 64 20 73 71 6c 69 74 65 33 50 45 78 70 72 41 64  d sqlite3PExprAd
27600 64 53 65 6c 65 63 74 28 50 61 72 73 65 2a 2c 20  dSelect(Parse*, 
27610 45 78 70 72 2a 2c 20 53 65 6c 65 63 74 2a 29 3b  Expr*, Select*);
27620 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78  .Expr *sqlite3Ex
27630 70 72 41 6e 64 28 73 71 6c 69 74 65 33 2a 2c 45  prAnd(sqlite3*,E
27640 78 70 72 2a 2c 20 45 78 70 72 2a 29 3b 0a 45 78  xpr*, Expr*);.Ex
27650 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72 46  pr *sqlite3ExprF
27660 75 6e 63 74 69 6f 6e 28 50 61 72 73 65 2a 2c 45  unction(Parse*,E
27670 78 70 72 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a  xprList*, Token*
27680 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
27690 78 70 72 41 73 73 69 67 6e 56 61 72 4e 75 6d 62  xprAssignVarNumb
276a0 65 72 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a  er(Parse*, Expr*
276b0 2c 20 75 33 32 29 3b 0a 76 6f 69 64 20 73 71 6c  , u32);.void sql
276c0 69 74 65 33 45 78 70 72 44 65 6c 65 74 65 28 73  ite3ExprDelete(s
276d0 71 6c 69 74 65 33 2a 2c 20 45 78 70 72 2a 29 3b  qlite3*, Expr*);
276e0 0a 45 78 70 72 4c 69 73 74 20 2a 73 71 6c 69 74  .ExprList *sqlit
276f0 65 33 45 78 70 72 4c 69 73 74 41 70 70 65 6e 64  e3ExprListAppend
27700 28 50 61 72 73 65 2a 2c 45 78 70 72 4c 69 73 74  (Parse*,ExprList
27710 2a 2c 45 78 70 72 2a 29 3b 0a 45 78 70 72 4c 69  *,Expr*);.ExprLi
27720 73 74 20 2a 73 71 6c 69 74 65 33 45 78 70 72 4c  st *sqlite3ExprL
27730 69 73 74 41 70 70 65 6e 64 56 65 63 74 6f 72 28  istAppendVector(
27740 50 61 72 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a  Parse*,ExprList*
27750 2c 49 64 4c 69 73 74 2a 2c 45 78 70 72 2a 29 3b  ,IdList*,Expr*);
27760 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
27770 72 4c 69 73 74 53 65 74 53 6f 72 74 4f 72 64 65  rListSetSortOrde
27780 72 28 45 78 70 72 4c 69 73 74 2a 2c 69 6e 74 29  r(ExprList*,int)
27790 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
277a0 70 72 4c 69 73 74 53 65 74 4e 61 6d 65 28 50 61  prListSetName(Pa
277b0 72 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 54  rse*,ExprList*,T
277c0 6f 6b 65 6e 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64  oken*,int);.void
277d0 20 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74   sqlite3ExprList
277e0 53 65 74 53 70 61 6e 28 50 61 72 73 65 2a 2c 45  SetSpan(Parse*,E
277f0 78 70 72 4c 69 73 74 2a 2c 63 6f 6e 73 74 20 63  xprList*,const c
27800 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  har*,const char*
27810 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
27820 78 70 72 4c 69 73 74 44 65 6c 65 74 65 28 73 71  xprListDelete(sq
27830 6c 69 74 65 33 2a 2c 20 45 78 70 72 4c 69 73 74  lite3*, ExprList
27840 2a 29 3b 0a 75 33 32 20 73 71 6c 69 74 65 33 45  *);.u32 sqlite3E
27850 78 70 72 4c 69 73 74 46 6c 61 67 73 28 63 6f 6e  xprListFlags(con
27860 73 74 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a 69  st ExprList*);.i
27870 6e 74 20 73 71 6c 69 74 65 33 49 6e 69 74 28 73  nt sqlite3Init(s
27880 71 6c 69 74 65 33 2a 2c 20 63 68 61 72 2a 2a 29  qlite3*, char**)
27890 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 6e 69  ;.int sqlite3Ini
278a0 74 43 61 6c 6c 62 61 63 6b 28 76 6f 69 64 2a 2c  tCallback(void*,
278b0 20 69 6e 74 2c 20 63 68 61 72 2a 2a 2c 20 63 68   int, char**, ch
278c0 61 72 2a 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ar**);.void sqli
278d0 74 65 33 50 72 61 67 6d 61 28 50 61 72 73 65 2a  te3Pragma(Parse*
278e0 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 54  ,Token*,Token*,T
278f0 6f 6b 65 6e 2a 2c 69 6e 74 29 3b 0a 23 69 66 6e  oken*,int);.#ifn
27900 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
27910 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 4d 6f 64  VIRTUALTABLE.Mod
27920 75 6c 65 20 2a 73 71 6c 69 74 65 33 50 72 61 67  ule *sqlite3Prag
27930 6d 61 56 74 61 62 52 65 67 69 73 74 65 72 28 73  maVtabRegister(s
27940 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68  qlite3*,const ch
27950 61 72 20 2a 7a 4e 61 6d 65 29 3b 0a 23 65 6e 64  ar *zName);.#end
27960 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52  if.void sqlite3R
27970 65 73 65 74 41 6c 6c 53 63 68 65 6d 61 73 4f 66  esetAllSchemasOf
27980 43 6f 6e 6e 65 63 74 69 6f 6e 28 73 71 6c 69 74  Connection(sqlit
27990 65 33 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  e3*);.void sqlit
279a0 65 33 52 65 73 65 74 4f 6e 65 53 63 68 65 6d 61  e3ResetOneSchema
279b0 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 29 3b 0a  (sqlite3*,int);.
279c0 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6c 6c  void sqlite3Coll
279d0 61 70 73 65 44 61 74 61 62 61 73 65 41 72 72 61  apseDatabaseArra
279e0 79 28 73 71 6c 69 74 65 33 2a 29 3b 0a 76 6f 69  y(sqlite3*);.voi
279f0 64 20 73 71 6c 69 74 65 33 43 6f 6d 6d 69 74 49  d sqlite3CommitI
27a00 6e 74 65 72 6e 61 6c 43 68 61 6e 67 65 73 28 73  nternalChanges(s
27a10 71 6c 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20 73  qlite3*);.void s
27a20 71 6c 69 74 65 33 44 65 6c 65 74 65 43 6f 6c 75  qlite3DeleteColu
27a30 6d 6e 4e 61 6d 65 73 28 73 71 6c 69 74 65 33 2a  mnNames(sqlite3*
27a40 2c 54 61 62 6c 65 2a 29 3b 0a 69 6e 74 20 73 71  ,Table*);.int sq
27a50 6c 69 74 65 33 43 6f 6c 75 6d 6e 73 46 72 6f 6d  lite3ColumnsFrom
27a60 45 78 70 72 4c 69 73 74 28 50 61 72 73 65 2a 2c  ExprList(Parse*,
27a70 45 78 70 72 4c 69 73 74 2a 2c 69 31 36 2a 2c 43  ExprList*,i16*,C
27a80 6f 6c 75 6d 6e 2a 2a 29 3b 0a 76 6f 69 64 20 73  olumn**);.void s
27a90 71 6c 69 74 65 33 53 65 6c 65 63 74 41 64 64 43  qlite3SelectAddC
27aa0 6f 6c 75 6d 6e 54 79 70 65 41 6e 64 43 6f 6c 6c  olumnTypeAndColl
27ab0 61 74 69 6f 6e 28 50 61 72 73 65 2a 2c 54 61 62  ation(Parse*,Tab
27ac0 6c 65 2a 2c 53 65 6c 65 63 74 2a 29 3b 0a 54 61  le*,Select*);.Ta
27ad0 62 6c 65 20 2a 73 71 6c 69 74 65 33 52 65 73 75  ble *sqlite3Resu
27ae0 6c 74 53 65 74 4f 66 53 65 6c 65 63 74 28 50 61  ltSetOfSelect(Pa
27af0 72 73 65 2a 2c 53 65 6c 65 63 74 2a 29 3b 0a 76  rse*,Select*);.v
27b00 6f 69 64 20 73 71 6c 69 74 65 33 4f 70 65 6e 4d  oid sqlite3OpenM
27b10 61 73 74 65 72 54 61 62 6c 65 28 50 61 72 73 65  asterTable(Parse
27b20 20 2a 2c 20 69 6e 74 29 3b 0a 49 6e 64 65 78 20   *, int);.Index 
27b30 2a 73 71 6c 69 74 65 33 50 72 69 6d 61 72 79 4b  *sqlite3PrimaryK
27b40 65 79 49 6e 64 65 78 28 54 61 62 6c 65 2a 29 3b  eyIndex(Table*);
27b50 0a 69 31 36 20 73 71 6c 69 74 65 33 43 6f 6c 75  .i16 sqlite3Colu
27b60 6d 6e 4f 66 49 6e 64 65 78 28 49 6e 64 65 78 2a  mnOfIndex(Index*
27b70 2c 20 69 31 36 29 3b 0a 76 6f 69 64 20 73 71 6c  , i16);.void sql
27b80 69 74 65 33 53 74 61 72 74 54 61 62 6c 65 28 50  ite3StartTable(P
27b90 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b  arse*,Token*,Tok
27ba0 65 6e 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c  en*,int,int,int,
27bb0 69 6e 74 29 3b 0a 23 69 66 20 53 51 4c 49 54 45  int);.#if SQLITE
27bc0 5f 45 4e 41 42 4c 45 5f 48 49 44 44 45 4e 5f 43  _ENABLE_HIDDEN_C
27bd0 4f 4c 55 4d 4e 53 0a 20 20 76 6f 69 64 20 73 71  OLUMNS.  void sq
27be0 6c 69 74 65 33 43 6f 6c 75 6d 6e 50 72 6f 70 65  lite3ColumnPrope
27bf0 72 74 69 65 73 46 72 6f 6d 4e 61 6d 65 28 54 61  rtiesFromName(Ta
27c00 62 6c 65 2a 2c 20 43 6f 6c 75 6d 6e 2a 29 3b 0a  ble*, Column*);.
27c10 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73  #else.# define s
27c20 71 6c 69 74 65 33 43 6f 6c 75 6d 6e 50 72 6f 70  qlite3ColumnProp
27c30 65 72 74 69 65 73 46 72 6f 6d 4e 61 6d 65 28 54  ertiesFromName(T
27c40 2c 43 29 20 2f 2a 20 6e 6f 2d 6f 70 20 2a 2f 0a  ,C) /* no-op */.
27c50 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c 69  #endif.void sqli
27c60 74 65 33 41 64 64 43 6f 6c 75 6d 6e 28 50 61 72  te3AddColumn(Par
27c70 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e  se*,Token*,Token
27c80 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
27c90 41 64 64 4e 6f 74 4e 75 6c 6c 28 50 61 72 73 65  AddNotNull(Parse
27ca0 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  *, int);.void sq
27cb0 6c 69 74 65 33 41 64 64 50 72 69 6d 61 72 79 4b  lite3AddPrimaryK
27cc0 65 79 28 50 61 72 73 65 2a 2c 20 45 78 70 72 4c  ey(Parse*, ExprL
27cd0 69 73 74 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20  ist*, int, int, 
27ce0 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
27cf0 65 33 41 64 64 43 68 65 63 6b 43 6f 6e 73 74 72  e3AddCheckConstr
27d00 61 69 6e 74 28 50 61 72 73 65 2a 2c 20 45 78 70  aint(Parse*, Exp
27d10 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  r*);.void sqlite
27d20 33 41 64 64 44 65 66 61 75 6c 74 56 61 6c 75 65  3AddDefaultValue
27d30 28 50 61 72 73 65 2a 2c 45 78 70 72 2a 2c 63 6f  (Parse*,Expr*,co
27d40 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20  nst char*,const 
27d50 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  char*);.void sql
27d60 69 74 65 33 41 64 64 43 6f 6c 6c 61 74 65 54 79  ite3AddCollateTy
27d70 70 65 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e  pe(Parse*, Token
27d80 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
27d90 45 6e 64 54 61 62 6c 65 28 50 61 72 73 65 2a 2c  EndTable(Parse*,
27da0 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 75 38  Token*,Token*,u8
27db0 2c 53 65 6c 65 63 74 2a 29 3b 0a 69 6e 74 20 73  ,Select*);.int s
27dc0 71 6c 69 74 65 33 50 61 72 73 65 55 72 69 28 63  qlite3ParseUri(c
27dd0 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74  onst char*,const
27de0 20 63 68 61 72 2a 2c 75 6e 73 69 67 6e 65 64 20   char*,unsigned 
27df0 69 6e 74 2a 2c 0a 20 20 20 20 20 20 20 20 20 20  int*,.          
27e00 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
27e10 33 5f 76 66 73 2a 2a 2c 63 68 61 72 2a 2a 2c 63  3_vfs**,char**,c
27e20 68 61 72 20 2a 2a 29 3b 0a 42 74 72 65 65 20 2a  har **);.Btree *
27e30 73 71 6c 69 74 65 33 44 62 4e 61 6d 65 54 6f 42  sqlite3DbNameToB
27e40 74 72 65 65 28 73 71 6c 69 74 65 33 2a 2c 63 6f  tree(sqlite3*,co
27e50 6e 73 74 20 63 68 61 72 2a 29 3b 0a 0a 23 69 66  nst char*);..#if
27e60 64 65 66 20 53 51 4c 49 54 45 5f 55 4e 54 45 53  def SQLITE_UNTES
27e70 54 41 42 4c 45 0a 23 20 64 65 66 69 6e 65 20 73  TABLE.# define s
27e80 71 6c 69 74 65 33 46 61 75 6c 74 53 69 6d 28 58  qlite3FaultSim(X
27e90 29 20 53 51 4c 49 54 45 5f 4f 4b 0a 23 65 6c 73  ) SQLITE_OK.#els
27ea0 65 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 46  e.  int sqlite3F
27eb0 61 75 6c 74 53 69 6d 28 69 6e 74 29 3b 0a 23 65  aultSim(int);.#e
27ec0 6e 64 69 66 0a 0a 42 69 74 76 65 63 20 2a 73 71  ndif..Bitvec *sq
27ed0 6c 69 74 65 33 42 69 74 76 65 63 43 72 65 61 74  lite3BitvecCreat
27ee0 65 28 75 33 32 29 3b 0a 69 6e 74 20 73 71 6c 69  e(u32);.int sqli
27ef0 74 65 33 42 69 74 76 65 63 54 65 73 74 28 42 69  te3BitvecTest(Bi
27f00 74 76 65 63 2a 2c 20 75 33 32 29 3b 0a 69 6e 74  tvec*, u32);.int
27f10 20 73 71 6c 69 74 65 33 42 69 74 76 65 63 54 65   sqlite3BitvecTe
27f20 73 74 4e 6f 74 4e 75 6c 6c 28 42 69 74 76 65 63  stNotNull(Bitvec
27f30 2a 2c 20 75 33 32 29 3b 0a 69 6e 74 20 73 71 6c  *, u32);.int sql
27f40 69 74 65 33 42 69 74 76 65 63 53 65 74 28 42 69  ite3BitvecSet(Bi
27f50 74 76 65 63 2a 2c 20 75 33 32 29 3b 0a 76 6f 69  tvec*, u32);.voi
27f60 64 20 73 71 6c 69 74 65 33 42 69 74 76 65 63 43  d sqlite3BitvecC
27f70 6c 65 61 72 28 42 69 74 76 65 63 2a 2c 20 75 33  lear(Bitvec*, u3
27f80 32 2c 20 76 6f 69 64 2a 29 3b 0a 76 6f 69 64 20  2, void*);.void 
27f90 73 71 6c 69 74 65 33 42 69 74 76 65 63 44 65 73  sqlite3BitvecDes
27fa0 74 72 6f 79 28 42 69 74 76 65 63 2a 29 3b 0a 75  troy(Bitvec*);.u
27fb0 33 32 20 73 71 6c 69 74 65 33 42 69 74 76 65 63  32 sqlite3Bitvec
27fc0 53 69 7a 65 28 42 69 74 76 65 63 2a 29 3b 0a 23  Size(Bitvec*);.#
27fd0 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 55 4e  ifndef SQLITE_UN
27fe0 54 45 53 54 41 42 4c 45 0a 69 6e 74 20 73 71 6c  TESTABLE.int sql
27ff0 69 74 65 33 42 69 74 76 65 63 42 75 69 6c 74 69  ite3BitvecBuilti
28000 6e 54 65 73 74 28 69 6e 74 2c 69 6e 74 2a 29 3b  nTest(int,int*);
28010 0a 23 65 6e 64 69 66 0a 0a 52 6f 77 53 65 74 20  .#endif..RowSet 
28020 2a 73 71 6c 69 74 65 33 52 6f 77 53 65 74 49 6e  *sqlite3RowSetIn
28030 69 74 28 73 71 6c 69 74 65 33 2a 2c 20 76 6f 69  it(sqlite3*, voi
28040 64 2a 2c 20 75 6e 73 69 67 6e 65 64 20 69 6e 74  d*, unsigned int
28050 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52  );.void sqlite3R
28060 6f 77 53 65 74 43 6c 65 61 72 28 52 6f 77 53 65  owSetClear(RowSe
28070 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  t*);.void sqlite
28080 33 52 6f 77 53 65 74 49 6e 73 65 72 74 28 52 6f  3RowSetInsert(Ro
28090 77 53 65 74 2a 2c 20 69 36 34 29 3b 0a 69 6e 74  wSet*, i64);.int
280a0 20 73 71 6c 69 74 65 33 52 6f 77 53 65 74 54 65   sqlite3RowSetTe
280b0 73 74 28 52 6f 77 53 65 74 2a 2c 20 69 6e 74 20  st(RowSet*, int 
280c0 69 42 61 74 63 68 2c 20 69 36 34 29 3b 0a 69 6e  iBatch, i64);.in
280d0 74 20 73 71 6c 69 74 65 33 52 6f 77 53 65 74 4e  t sqlite3RowSetN
280e0 65 78 74 28 52 6f 77 53 65 74 2a 2c 20 69 36 34  ext(RowSet*, i64
280f0 2a 29 3b 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65  *);..void sqlite
28100 33 43 72 65 61 74 65 56 69 65 77 28 50 61 72 73  3CreateView(Pars
28110 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a  e*,Token*,Token*
28120 2c 54 6f 6b 65 6e 2a 2c 45 78 70 72 4c 69 73 74  ,Token*,ExprList
28130 2a 2c 53 65 6c 65 63 74 2a 2c 69 6e 74 2c 69 6e  *,Select*,int,in
28140 74 29 3b 0a 0a 23 69 66 20 21 64 65 66 69 6e 65  t);..#if !define
28150 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  d(SQLITE_OMIT_VI
28160 45 57 29 20 7c 7c 20 21 64 65 66 69 6e 65 64 28  EW) || !defined(
28170 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
28180 55 41 4c 54 41 42 4c 45 29 0a 20 20 69 6e 74 20  UALTABLE).  int 
28190 73 71 6c 69 74 65 33 56 69 65 77 47 65 74 43 6f  sqlite3ViewGetCo
281a0 6c 75 6d 6e 4e 61 6d 65 73 28 50 61 72 73 65 2a  lumnNames(Parse*
281b0 2c 54 61 62 6c 65 2a 29 3b 0a 23 65 6c 73 65 0a  ,Table*);.#else.
281c0 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
281d0 56 69 65 77 47 65 74 43 6f 6c 75 6d 6e 4e 61 6d  ViewGetColumnNam
281e0 65 73 28 41 2c 42 29 20 30 0a 23 65 6e 64 69 66  es(A,B) 0.#endif
281f0 0a 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d 41 58  ..#if SQLITE_MAX
28200 5f 41 54 54 41 43 48 45 44 3e 33 30 0a 20 20 69  _ATTACHED>30.  i
28210 6e 74 20 73 71 6c 69 74 65 33 44 62 4d 61 73 6b  nt sqlite3DbMask
28220 41 6c 6c 5a 65 72 6f 28 79 44 62 4d 61 73 6b 29  AllZero(yDbMask)
28230 3b 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71  ;.#endif.void sq
28240 6c 69 74 65 33 44 72 6f 70 54 61 62 6c 65 28 50  lite3DropTable(P
28250 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c  arse*, SrcList*,
28260 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64   int, int);.void
28270 20 73 71 6c 69 74 65 33 43 6f 64 65 44 72 6f 70   sqlite3CodeDrop
28280 54 61 62 6c 65 28 50 61 72 73 65 2a 2c 20 54 61  Table(Parse*, Ta
28290 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b  ble*, int, int);
282a0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65 6c  .void sqlite3Del
282b0 65 74 65 54 61 62 6c 65 28 73 71 6c 69 74 65 33  eteTable(sqlite3
282c0 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a 23 69 66 6e  *, Table*);.#ifn
282d0 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
282e0 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 0a 20 20  AUTOINCREMENT.  
282f0 76 6f 69 64 20 73 71 6c 69 74 65 33 41 75 74 6f  void sqlite3Auto
28300 69 6e 63 72 65 6d 65 6e 74 42 65 67 69 6e 28 50  incrementBegin(P
28310 61 72 73 65 20 2a 70 50 61 72 73 65 29 3b 0a 20  arse *pParse);. 
28320 20 76 6f 69 64 20 73 71 6c 69 74 65 33 41 75 74   void sqlite3Aut
28330 6f 69 6e 63 72 65 6d 65 6e 74 45 6e 64 28 50 61  oincrementEnd(Pa
28340 72 73 65 20 2a 70 50 61 72 73 65 29 3b 0a 23 65  rse *pParse);.#e
28350 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  lse.# define sql
28360 69 74 65 33 41 75 74 6f 69 6e 63 72 65 6d 65 6e  ite3Autoincremen
28370 74 42 65 67 69 6e 28 58 29 0a 23 20 64 65 66 69  tBegin(X).# defi
28380 6e 65 20 73 71 6c 69 74 65 33 41 75 74 6f 69 6e  ne sqlite3Autoin
28390 63 72 65 6d 65 6e 74 45 6e 64 28 58 29 0a 23 65  crementEnd(X).#e
283a0 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65  ndif.void sqlite
283b0 33 49 6e 73 65 72 74 28 50 61 72 73 65 2a 2c 20  3Insert(Parse*, 
283c0 53 72 63 4c 69 73 74 2a 2c 20 53 65 6c 65 63 74  SrcList*, Select
283d0 2a 2c 20 49 64 4c 69 73 74 2a 2c 20 69 6e 74 2c  *, IdList*, int,
283e0 20 55 70 73 65 72 74 2a 29 3b 0a 76 6f 69 64 20   Upsert*);.void 
283f0 2a 73 71 6c 69 74 65 33 41 72 72 61 79 41 6c 6c  *sqlite3ArrayAll
28400 6f 63 61 74 65 28 73 71 6c 69 74 65 33 2a 2c 76  ocate(sqlite3*,v
28410 6f 69 64 2a 2c 69 6e 74 2c 69 6e 74 2a 2c 69 6e  oid*,int,int*,in
28420 74 2a 29 3b 0a 49 64 4c 69 73 74 20 2a 73 71 6c  t*);.IdList *sql
28430 69 74 65 33 49 64 4c 69 73 74 41 70 70 65 6e 64  ite3IdListAppend
28440 28 73 71 6c 69 74 65 33 2a 2c 20 49 64 4c 69 73  (sqlite3*, IdLis
28450 74 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74  t*, Token*);.int
28460 20 73 71 6c 69 74 65 33 49 64 4c 69 73 74 49 6e   sqlite3IdListIn
28470 64 65 78 28 49 64 4c 69 73 74 2a 2c 63 6f 6e 73  dex(IdList*,cons
28480 74 20 63 68 61 72 2a 29 3b 0a 53 72 63 4c 69 73  t char*);.SrcLis
28490 74 20 2a 73 71 6c 69 74 65 33 53 72 63 4c 69 73  t *sqlite3SrcLis
284a0 74 45 6e 6c 61 72 67 65 28 73 71 6c 69 74 65 33  tEnlarge(sqlite3
284b0 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 69 6e 74  *, SrcList*, int
284c0 2c 20 69 6e 74 29 3b 0a 53 72 63 4c 69 73 74 20  , int);.SrcList 
284d0 2a 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74 41  *sqlite3SrcListA
284e0 70 70 65 6e 64 28 73 71 6c 69 74 65 33 2a 2c 20  ppend(sqlite3*, 
284f0 53 72 63 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a  SrcList*, Token*
28500 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 53 72 63 4c 69  , Token*);.SrcLi
28510 73 74 20 2a 73 71 6c 69 74 65 33 53 72 63 4c 69  st *sqlite3SrcLi
28520 73 74 41 70 70 65 6e 64 46 72 6f 6d 54 65 72 6d  stAppendFromTerm
28530 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74  (Parse*, SrcList
28540 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e  *, Token*, Token
28550 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  *,.             
28560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28570 20 20 20 20 20 20 20 20 20 54 6f 6b 65 6e 2a 2c           Token*,
28580 20 53 65 6c 65 63 74 2a 2c 20 45 78 70 72 2a 2c   Select*, Expr*,
28590 20 49 64 4c 69 73 74 2a 29 3b 0a 76 6f 69 64 20   IdList*);.void 
285a0 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74 49 6e  sqlite3SrcListIn
285b0 64 65 78 65 64 42 79 28 50 61 72 73 65 20 2a 2c  dexedBy(Parse *,
285c0 20 53 72 63 4c 69 73 74 20 2a 2c 20 54 6f 6b 65   SrcList *, Toke
285d0 6e 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  n *);.void sqlit
285e0 65 33 53 72 63 4c 69 73 74 46 75 6e 63 41 72 67  e3SrcListFuncArg
285f0 73 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73  s(Parse*, SrcLis
28600 74 2a 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a  t*, ExprList*);.
28610 69 6e 74 20 73 71 6c 69 74 65 33 49 6e 64 65 78  int sqlite3Index
28620 65 64 42 79 4c 6f 6f 6b 75 70 28 50 61 72 73 65  edByLookup(Parse
28630 20 2a 2c 20 73 74 72 75 63 74 20 53 72 63 4c 69   *, struct SrcLi
28640 73 74 5f 69 74 65 6d 20 2a 29 3b 0a 76 6f 69 64  st_item *);.void
28650 20 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74 53   sqlite3SrcListS
28660 68 69 66 74 4a 6f 69 6e 54 79 70 65 28 53 72 63  hiftJoinType(Src
28670 4c 69 73 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  List*);.void sql
28680 69 74 65 33 53 72 63 4c 69 73 74 41 73 73 69 67  ite3SrcListAssig
28690 6e 43 75 72 73 6f 72 73 28 50 61 72 73 65 2a 2c  nCursors(Parse*,
286a0 20 53 72 63 4c 69 73 74 2a 29 3b 0a 76 6f 69 64   SrcList*);.void
286b0 20 73 71 6c 69 74 65 33 49 64 4c 69 73 74 44 65   sqlite3IdListDe
286c0 6c 65 74 65 28 73 71 6c 69 74 65 33 2a 2c 20 49  lete(sqlite3*, I
286d0 64 4c 69 73 74 2a 29 3b 0a 76 6f 69 64 20 73 71  dList*);.void sq
286e0 6c 69 74 65 33 53 72 63 4c 69 73 74 44 65 6c 65  lite3SrcListDele
286f0 74 65 28 73 71 6c 69 74 65 33 2a 2c 20 53 72 63  te(sqlite3*, Src
28700 4c 69 73 74 2a 29 3b 0a 49 6e 64 65 78 20 2a 73  List*);.Index *s
28710 71 6c 69 74 65 33 41 6c 6c 6f 63 61 74 65 49 6e  qlite3AllocateIn
28720 64 65 78 4f 62 6a 65 63 74 28 73 71 6c 69 74 65  dexObject(sqlite
28730 33 2a 2c 69 31 36 2c 69 6e 74 2c 63 68 61 72 2a  3*,i16,int,char*
28740 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
28750 43 72 65 61 74 65 49 6e 64 65 78 28 50 61 72 73  CreateIndex(Pars
28760 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a  e*,Token*,Token*
28770 2c 53 72 63 4c 69 73 74 2a 2c 45 78 70 72 4c 69  ,SrcList*,ExprLi
28780 73 74 2a 2c 69 6e 74 2c 54 6f 6b 65 6e 2a 2c 0a  st*,int,Token*,.
28790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
287a0 20 20 20 20 20 20 20 20 20 20 45 78 70 72 2a 2c            Expr*,
287b0 20 69 6e 74 2c 20 69 6e 74 2c 20 75 38 29 3b 0a   int, int, u8);.
287c0 76 6f 69 64 20 73 71 6c 69 74 65 33 44 72 6f 70  void sqlite3Drop
287d0 49 6e 64 65 78 28 50 61 72 73 65 2a 2c 20 53 72  Index(Parse*, Sr
287e0 63 4c 69 73 74 2a 2c 20 69 6e 74 29 3b 0a 69 6e  cList*, int);.in
287f0 74 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74 28  t sqlite3Select(
28800 50 61 72 73 65 2a 2c 20 53 65 6c 65 63 74 2a 2c  Parse*, Select*,
28810 20 53 65 6c 65 63 74 44 65 73 74 2a 29 3b 0a 53   SelectDest*);.S
28820 65 6c 65 63 74 20 2a 73 71 6c 69 74 65 33 53 65  elect *sqlite3Se
28830 6c 65 63 74 4e 65 77 28 50 61 72 73 65 2a 2c 45  lectNew(Parse*,E
28840 78 70 72 4c 69 73 74 2a 2c 53 72 63 4c 69 73 74  xprList*,SrcList
28850 2a 2c 45 78 70 72 2a 2c 45 78 70 72 4c 69 73 74  *,Expr*,ExprList
28860 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  *,.             
28870 20 20 20 20 20 20 20 20 20 20 20 20 45 78 70 72              Expr
28880 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 75 33 32 2c  *,ExprList*,u32,
28890 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  Expr*);.void sql
288a0 69 74 65 33 53 65 6c 65 63 74 44 65 6c 65 74 65  ite3SelectDelete
288b0 28 73 71 6c 69 74 65 33 2a 2c 20 53 65 6c 65 63  (sqlite3*, Selec
288c0 74 2a 29 3b 0a 54 61 62 6c 65 20 2a 73 71 6c 69  t*);.Table *sqli
288d0 74 65 33 53 72 63 4c 69 73 74 4c 6f 6f 6b 75 70  te3SrcListLookup
288e0 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74  (Parse*, SrcList
288f0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49  *);.int sqlite3I
28900 73 52 65 61 64 4f 6e 6c 79 28 50 61 72 73 65 2a  sReadOnly(Parse*
28910 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 29 3b 0a  , Table*, int);.
28920 76 6f 69 64 20 73 71 6c 69 74 65 33 4f 70 65 6e  void sqlite3Open
28930 54 61 62 6c 65 28 50 61 72 73 65 2a 2c 20 69 6e  Table(Parse*, in
28940 74 20 69 43 75 72 2c 20 69 6e 74 20 69 44 62 2c  t iCur, int iDb,
28950 20 54 61 62 6c 65 2a 2c 20 69 6e 74 29 3b 0a 23   Table*, int);.#
28960 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  if defined(SQLIT
28970 45 5f 45 4e 41 42 4c 45 5f 55 50 44 41 54 45 5f  E_ENABLE_UPDATE_
28980 44 45 4c 45 54 45 5f 4c 49 4d 49 54 29 20 26 26  DELETE_LIMIT) &&
28990 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
289a0 5f 4f 4d 49 54 5f 53 55 42 51 55 45 52 59 29 0a  _OMIT_SUBQUERY).
289b0 45 78 70 72 20 2a 73 71 6c 69 74 65 33 4c 69 6d  Expr *sqlite3Lim
289c0 69 74 57 68 65 72 65 28 50 61 72 73 65 2a 2c 53  itWhere(Parse*,S
289d0 72 63 4c 69 73 74 2a 2c 45 78 70 72 2a 2c 45 78  rcList*,Expr*,Ex
289e0 70 72 4c 69 73 74 2a 2c 45 78 70 72 2a 2c 63 68  prList*,Expr*,ch
289f0 61 72 2a 29 3b 0a 23 65 6e 64 69 66 0a 76 6f 69  ar*);.#endif.voi
28a00 64 20 73 71 6c 69 74 65 33 44 65 6c 65 74 65 46  d sqlite3DeleteF
28a10 72 6f 6d 28 50 61 72 73 65 2a 2c 20 53 72 63 4c  rom(Parse*, SrcL
28a20 69 73 74 2a 2c 20 45 78 70 72 2a 2c 20 45 78 70  ist*, Expr*, Exp
28a30 72 4c 69 73 74 2a 2c 20 45 78 70 72 2a 29 3b 0a  rList*, Expr*);.
28a40 76 6f 69 64 20 73 71 6c 69 74 65 33 55 70 64 61  void sqlite3Upda
28a50 74 65 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69  te(Parse*, SrcLi
28a60 73 74 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 45  st*, ExprList*,E
28a70 78 70 72 2a 2c 69 6e 74 2c 45 78 70 72 4c 69 73  xpr*,int,ExprLis
28a80 74 2a 2c 45 78 70 72 2a 2c 0a 20 20 20 20 20 20  t*,Expr*,.      
28a90 20 20 20 20 20 20 20 20 20 20 20 20 20 55 70 73               Ups
28aa0 65 72 74 2a 29 3b 0a 57 68 65 72 65 49 6e 66 6f  ert*);.WhereInfo
28ab0 20 2a 73 71 6c 69 74 65 33 57 68 65 72 65 42 65   *sqlite3WhereBe
28ac0 67 69 6e 28 50 61 72 73 65 2a 2c 53 72 63 4c 69  gin(Parse*,SrcLi
28ad0 73 74 2a 2c 45 78 70 72 2a 2c 45 78 70 72 4c 69  st*,Expr*,ExprLi
28ae0 73 74 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 75 31  st*,ExprList*,u1
28af0 36 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  6,int);.void sql
28b00 69 74 65 33 57 68 65 72 65 45 6e 64 28 57 68 65  ite3WhereEnd(Whe
28b10 72 65 49 6e 66 6f 2a 29 3b 0a 4c 6f 67 45 73 74  reInfo*);.LogEst
28b20 20 73 71 6c 69 74 65 33 57 68 65 72 65 4f 75 74   sqlite3WhereOut
28b30 70 75 74 52 6f 77 43 6f 75 6e 74 28 57 68 65 72  putRowCount(Wher
28b40 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c  eInfo*);.int sql
28b50 69 74 65 33 57 68 65 72 65 49 73 44 69 73 74 69  ite3WhereIsDisti
28b60 6e 63 74 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b  nct(WhereInfo*);
28b70 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 68 65 72  .int sqlite3Wher
28b80 65 49 73 4f 72 64 65 72 65 64 28 57 68 65 72 65  eIsOrdered(Where
28b90 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  Info*);.int sqli
28ba0 74 65 33 57 68 65 72 65 4f 72 64 65 72 65 64 49  te3WhereOrderedI
28bb0 6e 6e 65 72 4c 6f 6f 70 28 57 68 65 72 65 49 6e  nnerLoop(WhereIn
28bc0 66 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  fo*);.int sqlite
28bd0 33 57 68 65 72 65 49 73 53 6f 72 74 65 64 28 57  3WhereIsSorted(W
28be0 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20  hereInfo*);.int 
28bf0 73 71 6c 69 74 65 33 57 68 65 72 65 43 6f 6e 74  sqlite3WhereCont
28c00 69 6e 75 65 4c 61 62 65 6c 28 57 68 65 72 65 49  inueLabel(WhereI
28c10 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  nfo*);.int sqlit
28c20 65 33 57 68 65 72 65 42 72 65 61 6b 4c 61 62 65  e3WhereBreakLabe
28c30 6c 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69  l(WhereInfo*);.i
28c40 6e 74 20 73 71 6c 69 74 65 33 57 68 65 72 65 4f  nt sqlite3WhereO
28c50 6b 4f 6e 65 50 61 73 73 28 57 68 65 72 65 49 6e  kOnePass(WhereIn
28c60 66 6f 2a 2c 20 69 6e 74 2a 29 3b 0a 23 64 65 66  fo*, int*);.#def
28c70 69 6e 65 20 4f 4e 45 50 41 53 53 5f 4f 46 46 20  ine ONEPASS_OFF 
28c80 20 20 20 20 20 30 20 20 20 20 20 20 20 20 2f 2a       0        /*
28c90 20 55 73 65 20 6f 66 20 4f 4e 45 50 41 53 53 20   Use of ONEPASS 
28ca0 6e 6f 74 20 61 6c 6c 6f 77 65 64 20 2a 2f 0a 23  not allowed */.#
28cb0 64 65 66 69 6e 65 20 4f 4e 45 50 41 53 53 5f 53  define ONEPASS_S
28cc0 49 4e 47 4c 45 20 20 20 31 20 20 20 20 20 20 20  INGLE   1       
28cd0 20 2f 2a 20 4f 4e 45 50 41 53 53 20 76 61 6c 69   /* ONEPASS vali
28ce0 64 20 66 6f 72 20 61 20 73 69 6e 67 6c 65 20 72  d for a single r
28cf0 6f 77 20 75 70 64 61 74 65 20 2a 2f 0a 23 64 65  ow update */.#de
28d00 66 69 6e 65 20 4f 4e 45 50 41 53 53 5f 4d 55 4c  fine ONEPASS_MUL
28d10 54 49 20 20 20 20 32 20 20 20 20 20 20 20 20 2f  TI    2        /
28d20 2a 20 4f 4e 45 50 41 53 53 20 69 73 20 76 61 6c  * ONEPASS is val
28d30 69 64 20 66 6f 72 20 6d 75 6c 74 69 70 6c 65 20  id for multiple 
28d40 72 6f 77 73 20 2a 2f 0a 76 6f 69 64 20 73 71 6c  rows */.void sql
28d50 69 74 65 33 45 78 70 72 43 6f 64 65 4c 6f 61 64  ite3ExprCodeLoad
28d60 49 6e 64 65 78 43 6f 6c 75 6d 6e 28 50 61 72 73  IndexColumn(Pars
28d70 65 2a 2c 20 49 6e 64 65 78 2a 2c 20 69 6e 74 2c  e*, Index*, int,
28d80 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 69 6e 74 20   int, int);.int 
28d90 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 47  sqlite3ExprCodeG
28da0 65 74 43 6f 6c 75 6d 6e 28 50 61 72 73 65 2a 2c  etColumn(Parse*,
28db0 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e   Table*, int, in
28dc0 74 2c 20 69 6e 74 2c 20 75 38 29 3b 0a 76 6f 69  t, int, u8);.voi
28dd0 64 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64  d sqlite3ExprCod
28de0 65 47 65 74 43 6f 6c 75 6d 6e 54 6f 52 65 67 28  eGetColumnToReg(
28df0 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20  Parse*, Table*, 
28e00 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  int, int, int);.
28e10 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
28e20 43 6f 64 65 47 65 74 43 6f 6c 75 6d 6e 4f 66 54  CodeGetColumnOfT
28e30 61 62 6c 65 28 56 64 62 65 2a 2c 20 54 61 62 6c  able(Vdbe*, Tabl
28e40 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e  e*, int, int, in
28e50 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
28e60 45 78 70 72 43 6f 64 65 4d 6f 76 65 28 50 61 72  ExprCodeMove(Par
28e70 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69  se*, int, int, i
28e80 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
28e90 33 45 78 70 72 43 61 63 68 65 53 74 6f 72 65 28  3ExprCacheStore(
28ea0 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74  Parse*, int, int
28eb0 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
28ec0 69 74 65 33 45 78 70 72 43 61 63 68 65 50 75 73  ite3ExprCachePus
28ed0 68 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20  h(Parse*);.void 
28ee0 73 71 6c 69 74 65 33 45 78 70 72 43 61 63 68 65  sqlite3ExprCache
28ef0 50 6f 70 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69  Pop(Parse*);.voi
28f00 64 20 73 71 6c 69 74 65 33 45 78 70 72 43 61 63  d sqlite3ExprCac
28f10 68 65 52 65 6d 6f 76 65 28 50 61 72 73 65 2a 2c  heRemove(Parse*,
28f20 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64   int, int);.void
28f30 20 73 71 6c 69 74 65 33 45 78 70 72 43 61 63 68   sqlite3ExprCach
28f40 65 43 6c 65 61 72 28 50 61 72 73 65 2a 29 3b 0a  eClear(Parse*);.
28f50 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
28f60 43 61 63 68 65 41 66 66 69 6e 69 74 79 43 68 61  CacheAffinityCha
28f70 6e 67 65 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c  nge(Parse*, int,
28f80 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
28f90 74 65 33 45 78 70 72 43 6f 64 65 28 50 61 72 73  te3ExprCode(Pars
28fa0 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b  e*, Expr*, int);
28fb0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
28fc0 72 43 6f 64 65 43 6f 70 79 28 50 61 72 73 65 2a  rCodeCopy(Parse*
28fd0 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 76  , Expr*, int);.v
28fe0 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 43  oid sqlite3ExprC
28ff0 6f 64 65 46 61 63 74 6f 72 61 62 6c 65 28 50 61  odeFactorable(Pa
29000 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74  rse*, Expr*, int
29010 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78  );.int sqlite3Ex
29020 70 72 43 6f 64 65 41 74 49 6e 69 74 28 50 61 72  prCodeAtInit(Par
29030 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29  se*, Expr*, int)
29040 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70  ;.int sqlite3Exp
29050 72 43 6f 64 65 54 65 6d 70 28 50 61 72 73 65 2a  rCodeTemp(Parse*
29060 2c 20 45 78 70 72 2a 2c 20 69 6e 74 2a 29 3b 0a  , Expr*, int*);.
29070 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 43  int sqlite3ExprC
29080 6f 64 65 54 61 72 67 65 74 28 50 61 72 73 65 2a  odeTarget(Parse*
29090 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 76  , Expr*, int);.v
290a0 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 43  oid sqlite3ExprC
290b0 6f 64 65 41 6e 64 43 61 63 68 65 28 50 61 72 73  odeAndCache(Pars
290c0 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b  e*, Expr*, int);
290d0 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72  .int sqlite3Expr
290e0 43 6f 64 65 45 78 70 72 4c 69 73 74 28 50 61 72  CodeExprList(Par
290f0 73 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20  se*, ExprList*, 
29100 69 6e 74 2c 20 69 6e 74 2c 20 75 38 29 3b 0a 23  int, int, u8);.#
29110 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 43  define SQLITE_EC
29120 45 4c 5f 44 55 50 20 20 20 20 20 20 30 78 30 31  EL_DUP      0x01
29130 20 20 2f 2a 20 44 65 65 70 2c 20 6e 6f 74 20 73    /* Deep, not s
29140 68 61 6c 6c 6f 77 20 63 6f 70 69 65 73 20 2a 2f  hallow copies */
29150 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
29160 45 43 45 4c 5f 46 41 43 54 4f 52 20 20 20 30 78  ECEL_FACTOR   0x
29170 30 32 20 20 2f 2a 20 46 61 63 74 6f 72 20 6f 75  02  /* Factor ou
29180 74 20 63 6f 6e 73 74 61 6e 74 20 74 65 72 6d 73  t constant terms
29190 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
291a0 54 45 5f 45 43 45 4c 5f 52 45 46 20 20 20 20 20  TE_ECEL_REF     
291b0 20 30 78 30 34 20 20 2f 2a 20 55 73 65 20 45 78   0x04  /* Use Ex
291c0 70 72 4c 69 73 74 2e 75 2e 78 2e 69 4f 72 64 65  prList.u.x.iOrde
291d0 72 42 79 43 6f 6c 20 2a 2f 0a 23 64 65 66 69 6e  rByCol */.#defin
291e0 65 20 53 51 4c 49 54 45 5f 45 43 45 4c 5f 4f 4d  e SQLITE_ECEL_OM
291f0 49 54 52 45 46 20 20 30 78 30 38 20 20 2f 2a 20  ITREF  0x08  /* 
29200 4f 6d 69 74 20 69 66 20 45 78 70 72 4c 69 73 74  Omit if ExprList
29210 2e 75 2e 78 2e 69 4f 72 64 65 72 42 79 43 6f 6c  .u.x.iOrderByCol
29220 20 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65 33   */.void sqlite3
29230 45 78 70 72 49 66 54 72 75 65 28 50 61 72 73 65  ExprIfTrue(Parse
29240 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 2c 20 69  *, Expr*, int, i
29250 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
29260 33 45 78 70 72 49 66 46 61 6c 73 65 28 50 61 72  3ExprIfFalse(Par
29270 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 2c  se*, Expr*, int,
29280 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
29290 74 65 33 45 78 70 72 49 66 46 61 6c 73 65 44 75  te3ExprIfFalseDu
292a0 70 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c  p(Parse*, Expr*,
292b0 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 54 61 62 6c   int, int);.Tabl
292c0 65 20 2a 73 71 6c 69 74 65 33 46 69 6e 64 54 61  e *sqlite3FindTa
292d0 62 6c 65 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e  ble(sqlite3*,con
292e0 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20  st char*, const 
292f0 63 68 61 72 2a 29 3b 0a 23 64 65 66 69 6e 65 20  char*);.#define 
29300 4c 4f 43 41 54 45 5f 56 49 45 57 20 20 20 20 30  LOCATE_VIEW    0
29310 78 30 31 0a 23 64 65 66 69 6e 65 20 4c 4f 43 41  x01.#define LOCA
29320 54 45 5f 4e 4f 45 52 52 20 20 20 30 78 30 32 0a  TE_NOERR   0x02.
29330 54 61 62 6c 65 20 2a 73 71 6c 69 74 65 33 4c 6f  Table *sqlite3Lo
29340 63 61 74 65 54 61 62 6c 65 28 50 61 72 73 65 2a  cateTable(Parse*
29350 2c 75 33 32 20 66 6c 61 67 73 2c 63 6f 6e 73 74  ,u32 flags,const
29360 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68   char*, const ch
29370 61 72 2a 29 3b 0a 54 61 62 6c 65 20 2a 73 71 6c  ar*);.Table *sql
29380 69 74 65 33 4c 6f 63 61 74 65 54 61 62 6c 65 49  ite3LocateTableI
29390 74 65 6d 28 50 61 72 73 65 2a 2c 75 33 32 20 66  tem(Parse*,u32 f
293a0 6c 61 67 73 2c 73 74 72 75 63 74 20 53 72 63 4c  lags,struct SrcL
293b0 69 73 74 5f 69 74 65 6d 20 2a 29 3b 0a 49 6e 64  ist_item *);.Ind
293c0 65 78 20 2a 73 71 6c 69 74 65 33 46 69 6e 64 49  ex *sqlite3FindI
293d0 6e 64 65 78 28 73 71 6c 69 74 65 33 2a 2c 63 6f  ndex(sqlite3*,co
293e0 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74  nst char*, const
293f0 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71   char*);.void sq
29400 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65  lite3UnlinkAndDe
29410 6c 65 74 65 54 61 62 6c 65 28 73 71 6c 69 74 65  leteTable(sqlite
29420 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61  3*,int,const cha
29430 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  r*);.void sqlite
29440 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65  3UnlinkAndDelete
29450 49 6e 64 65 78 28 73 71 6c 69 74 65 33 2a 2c 69  Index(sqlite3*,i
29460 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  nt,const char*);
29470 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 61 63  .void sqlite3Vac
29480 75 75 6d 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e  uum(Parse*,Token
29490 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52  *);.int sqlite3R
294a0 75 6e 56 61 63 75 75 6d 28 63 68 61 72 2a 2a 2c  unVacuum(char**,
294b0 20 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74 29 3b   sqlite3*, int);
294c0 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33 4e 61  .char *sqlite3Na
294d0 6d 65 46 72 6f 6d 54 6f 6b 65 6e 28 73 71 6c 69  meFromToken(sqli
294e0 74 65 33 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69  te3*, Token*);.i
294f0 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f  nt sqlite3ExprCo
29500 6d 70 61 72 65 28 50 61 72 73 65 2a 2c 45 78 70  mpare(Parse*,Exp
29510 72 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b  r*, Expr*, int);
29520 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72  .int sqlite3Expr
29530 43 6f 6d 70 61 72 65 53 6b 69 70 28 45 78 70 72  CompareSkip(Expr
29540 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a  *, Expr*, int);.
29550 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 4c  int sqlite3ExprL
29560 69 73 74 43 6f 6d 70 61 72 65 28 45 78 70 72 4c  istCompare(ExprL
29570 69 73 74 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c  ist*, ExprList*,
29580 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74   int);.int sqlit
29590 65 33 45 78 70 72 49 6d 70 6c 69 65 73 45 78 70  e3ExprImpliesExp
295a0 72 28 50 61 72 73 65 2a 2c 45 78 70 72 2a 2c 20  r(Parse*,Expr*, 
295b0 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74  Expr*, int);.int
295c0 20 73 71 6c 69 74 65 33 45 78 70 72 49 6d 70 6c   sqlite3ExprImpl
295d0 69 65 73 4e 6f 6e 4e 75 6c 6c 52 6f 77 28 45 78  iesNonNullRow(Ex
295e0 70 72 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73  pr*,int);.void s
295f0 71 6c 69 74 65 33 45 78 70 72 41 6e 61 6c 79 7a  qlite3ExprAnalyz
29600 65 41 67 67 72 65 67 61 74 65 73 28 4e 61 6d 65  eAggregates(Name
29610 43 6f 6e 74 65 78 74 2a 2c 20 45 78 70 72 2a 29  Context*, Expr*)
29620 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
29630 70 72 41 6e 61 6c 79 7a 65 41 67 67 4c 69 73 74  prAnalyzeAggList
29640 28 4e 61 6d 65 43 6f 6e 74 65 78 74 2a 2c 45 78  (NameContext*,Ex
29650 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71  prList*);.int sq
29660 6c 69 74 65 33 45 78 70 72 43 6f 76 65 72 65 64  lite3ExprCovered
29670 42 79 49 6e 64 65 78 28 45 78 70 72 2a 2c 20 69  ByIndex(Expr*, i
29680 6e 74 20 69 43 75 72 2c 20 49 6e 64 65 78 20 2a  nt iCur, Index *
29690 70 49 64 78 29 3b 0a 69 6e 74 20 73 71 6c 69 74  pIdx);.int sqlit
296a0 65 33 46 75 6e 63 74 69 6f 6e 55 73 65 73 54 68  e3FunctionUsesTh
296b0 69 73 53 72 63 28 45 78 70 72 2a 2c 20 53 72 63  isSrc(Expr*, Src
296c0 4c 69 73 74 2a 29 3b 0a 56 64 62 65 20 2a 73 71  List*);.Vdbe *sq
296d0 6c 69 74 65 33 47 65 74 56 64 62 65 28 50 61 72  lite3GetVdbe(Par
296e0 73 65 2a 29 3b 0a 23 69 66 6e 64 65 66 20 53 51  se*);.#ifndef SQ
296f0 4c 49 54 45 5f 55 4e 54 45 53 54 41 42 4c 45 0a  LITE_UNTESTABLE.
29700 76 6f 69 64 20 73 71 6c 69 74 65 33 50 72 6e 67  void sqlite3Prng
29710 53 61 76 65 53 74 61 74 65 28 76 6f 69 64 29 3b  SaveState(void);
29720 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50 72 6e  .void sqlite3Prn
29730 67 52 65 73 74 6f 72 65 53 74 61 74 65 28 76 6f  gRestoreState(vo
29740 69 64 29 3b 0a 23 65 6e 64 69 66 0a 76 6f 69 64  id);.#endif.void
29750 20 73 71 6c 69 74 65 33 52 6f 6c 6c 62 61 63 6b   sqlite3Rollback
29760 41 6c 6c 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74  All(sqlite3*,int
29770 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43  );.void sqlite3C
29780 6f 64 65 56 65 72 69 66 79 53 63 68 65 6d 61 28  odeVerifySchema(
29790 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 76 6f  Parse*, int);.vo
297a0 69 64 20 73 71 6c 69 74 65 33 43 6f 64 65 56 65  id sqlite3CodeVe
297b0 72 69 66 79 4e 61 6d 65 64 53 63 68 65 6d 61 28  rifyNamedSchema(
297c0 50 61 72 73 65 2a 2c 20 63 6f 6e 73 74 20 63 68  Parse*, const ch
297d0 61 72 20 2a 7a 44 62 29 3b 0a 76 6f 69 64 20 73  ar *zDb);.void s
297e0 71 6c 69 74 65 33 42 65 67 69 6e 54 72 61 6e 73  qlite3BeginTrans
297f0 61 63 74 69 6f 6e 28 50 61 72 73 65 2a 2c 20 69  action(Parse*, i
29800 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
29810 33 45 6e 64 54 72 61 6e 73 61 63 74 69 6f 6e 28  3EndTransaction(
29820 50 61 72 73 65 2a 2c 69 6e 74 29 3b 0a 76 6f 69  Parse*,int);.voi
29830 64 20 73 71 6c 69 74 65 33 53 61 76 65 70 6f 69  d sqlite3Savepoi
29840 6e 74 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20  nt(Parse*, int, 
29850 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71  Token*);.void sq
29860 6c 69 74 65 33 43 6c 6f 73 65 53 61 76 65 70 6f  lite3CloseSavepo
29870 69 6e 74 73 28 73 71 6c 69 74 65 33 20 2a 29 3b  ints(sqlite3 *);
29880 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4c 65 61  .void sqlite3Lea
29890 76 65 4d 75 74 65 78 41 6e 64 43 6c 6f 73 65 5a  veMutexAndCloseZ
298a0 6f 6d 62 69 65 28 73 71 6c 69 74 65 33 2a 29 3b  ombie(sqlite3*);
298b0 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72  .int sqlite3Expr
298c0 49 64 54 6f 54 72 75 65 46 61 6c 73 65 28 45 78  IdToTrueFalse(Ex
298d0 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  pr*);.int sqlite
298e0 33 45 78 70 72 54 72 75 74 68 56 61 6c 75 65 28  3ExprTruthValue(
298f0 63 6f 6e 73 74 20 45 78 70 72 2a 29 3b 0a 69 6e  const Expr*);.in
29900 74 20 73 71 6c 69 74 65 33 45 78 70 72 49 73 43  t sqlite3ExprIsC
29910 6f 6e 73 74 61 6e 74 28 45 78 70 72 2a 29 3b 0a  onstant(Expr*);.
29920 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 49  int sqlite3ExprI
29930 73 43 6f 6e 73 74 61 6e 74 4e 6f 74 4a 6f 69 6e  sConstantNotJoin
29940 28 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c  (Expr*);.int sql
29950 69 74 65 33 45 78 70 72 49 73 43 6f 6e 73 74 61  ite3ExprIsConsta
29960 6e 74 4f 72 46 75 6e 63 74 69 6f 6e 28 45 78 70  ntOrFunction(Exp
29970 72 2a 2c 20 75 38 29 3b 0a 69 6e 74 20 73 71 6c  r*, u8);.int sql
29980 69 74 65 33 45 78 70 72 49 73 43 6f 6e 73 74 61  ite3ExprIsConsta
29990 6e 74 4f 72 47 72 6f 75 70 42 79 28 50 61 72 73  ntOrGroupBy(Pars
299a0 65 2a 2c 20 45 78 70 72 2a 2c 20 45 78 70 72 4c  e*, Expr*, ExprL
299b0 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ist*);.int sqlit
299c0 65 33 45 78 70 72 49 73 54 61 62 6c 65 43 6f 6e  e3ExprIsTableCon
299d0 73 74 61 6e 74 28 45 78 70 72 2a 2c 69 6e 74 29  stant(Expr*,int)
299e0 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ;.#ifdef SQLITE_
299f0 45 4e 41 42 4c 45 5f 43 55 52 53 4f 52 5f 48 49  ENABLE_CURSOR_HI
29a00 4e 54 53 0a 69 6e 74 20 73 71 6c 69 74 65 33 45  NTS.int sqlite3E
29a10 78 70 72 43 6f 6e 74 61 69 6e 73 53 75 62 71 75  xprContainsSubqu
29a20 65 72 79 28 45 78 70 72 2a 29 3b 0a 23 65 6e 64  ery(Expr*);.#end
29a30 69 66 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78  if.int sqlite3Ex
29a40 70 72 49 73 49 6e 74 65 67 65 72 28 45 78 70 72  prIsInteger(Expr
29a50 2a 2c 20 69 6e 74 2a 29 3b 0a 69 6e 74 20 73 71  *, int*);.int sq
29a60 6c 69 74 65 33 45 78 70 72 43 61 6e 42 65 4e 75  lite3ExprCanBeNu
29a70 6c 6c 28 63 6f 6e 73 74 20 45 78 70 72 2a 29 3b  ll(const Expr*);
29a80 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72  .int sqlite3Expr
29a90 4e 65 65 64 73 4e 6f 41 66 66 69 6e 69 74 79 43  NeedsNoAffinityC
29aa0 68 61 6e 67 65 28 63 6f 6e 73 74 20 45 78 70 72  hange(const Expr
29ab0 2a 2c 20 63 68 61 72 29 3b 0a 69 6e 74 20 73 71  *, char);.int sq
29ac0 6c 69 74 65 33 49 73 52 6f 77 69 64 28 63 6f 6e  lite3IsRowid(con
29ad0 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20  st char*);.void 
29ae0 73 71 6c 69 74 65 33 47 65 6e 65 72 61 74 65 52  sqlite3GenerateR
29af0 6f 77 44 65 6c 65 74 65 28 0a 20 20 20 20 50 61  owDelete(.    Pa
29b00 72 73 65 2a 2c 54 61 62 6c 65 2a 2c 54 72 69 67  rse*,Table*,Trig
29b10 67 65 72 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74  ger*,int,int,int
29b20 2c 69 31 36 2c 75 38 2c 75 38 2c 75 38 2c 69 6e  ,i16,u8,u8,u8,in
29b30 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
29b40 47 65 6e 65 72 61 74 65 52 6f 77 49 6e 64 65 78  GenerateRowIndex
29b50 44 65 6c 65 74 65 28 50 61 72 73 65 2a 2c 20 54  Delete(Parse*, T
29b60 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c  able*, int, int,
29b70 20 69 6e 74 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74   int*, int);.int
29b80 20 73 71 6c 69 74 65 33 47 65 6e 65 72 61 74 65   sqlite3Generate
29b90 49 6e 64 65 78 4b 65 79 28 50 61 72 73 65 2a 2c  IndexKey(Parse*,
29ba0 20 49 6e 64 65 78 2a 2c 20 69 6e 74 2c 20 69 6e   Index*, int, in
29bb0 74 2c 20 69 6e 74 2c 20 69 6e 74 2a 2c 49 6e 64  t, int, int*,Ind
29bc0 65 78 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73  ex*,int);.void s
29bd0 71 6c 69 74 65 33 52 65 73 6f 6c 76 65 50 61 72  qlite3ResolvePar
29be0 74 49 64 78 4c 61 62 65 6c 28 50 61 72 73 65 2a  tIdxLabel(Parse*
29bf0 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ,int);.void sqli
29c00 74 65 33 47 65 6e 65 72 61 74 65 43 6f 6e 73 74  te3GenerateConst
29c10 72 61 69 6e 74 43 68 65 63 6b 73 28 50 61 72 73  raintChecks(Pars
29c20 65 2a 2c 54 61 62 6c 65 2a 2c 69 6e 74 2a 2c 69  e*,Table*,int*,i
29c30 6e 74 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c 0a  nt,int,int,int,.
29c40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29c50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29c60 20 20 20 20 20 75 38 2c 75 38 2c 69 6e 74 2c 69       u8,u8,int,i
29c70 6e 74 2a 2c 69 6e 74 2a 2c 55 70 73 65 72 74 2a  nt*,int*,Upsert*
29c80 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  );.#ifdef SQLITE
29c90 5f 45 4e 41 42 4c 45 5f 4e 55 4c 4c 5f 54 52 49  _ENABLE_NULL_TRI
29ca0 4d 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  M.  void sqlite3
29cb0 53 65 74 4d 61 6b 65 52 65 63 6f 72 64 50 35 28  SetMakeRecordP5(
29cc0 56 64 62 65 2a 2c 54 61 62 6c 65 2a 29 3b 0a 23  Vdbe*,Table*);.#
29cd0 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71  else.# define sq
29ce0 6c 69 74 65 33 53 65 74 4d 61 6b 65 52 65 63 6f  lite3SetMakeReco
29cf0 72 64 50 35 28 41 2c 42 29 0a 23 65 6e 64 69 66  rdP5(A,B).#endif
29d00 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6d  .void sqlite3Com
29d10 70 6c 65 74 65 49 6e 73 65 72 74 69 6f 6e 28 50  pleteInsertion(P
29d20 61 72 73 65 2a 2c 54 61 62 6c 65 2a 2c 69 6e 74  arse*,Table*,int
29d30 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 2a 2c 69 6e  ,int,int,int*,in
29d40 74 2c 69 6e 74 2c 69 6e 74 29 3b 0a 69 6e 74 20  t,int,int);.int 
29d50 73 71 6c 69 74 65 33 4f 70 65 6e 54 61 62 6c 65  sqlite3OpenTable
29d60 41 6e 64 49 6e 64 69 63 65 73 28 50 61 72 73 65  AndIndices(Parse
29d70 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20  *, Table*, int, 
29d80 75 38 2c 20 69 6e 74 2c 20 75 38 2a 2c 20 69 6e  u8, int, u8*, in
29d90 74 2a 2c 20 69 6e 74 2a 29 3b 0a 76 6f 69 64 20  t*, int*);.void 
29da0 73 71 6c 69 74 65 33 42 65 67 69 6e 57 72 69 74  sqlite3BeginWrit
29db0 65 4f 70 65 72 61 74 69 6f 6e 28 50 61 72 73 65  eOperation(Parse
29dc0 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f  *, int, int);.vo
29dd0 69 64 20 73 71 6c 69 74 65 33 4d 75 6c 74 69 57  id sqlite3MultiW
29de0 72 69 74 65 28 50 61 72 73 65 2a 29 3b 0a 76 6f  rite(Parse*);.vo
29df0 69 64 20 73 71 6c 69 74 65 33 4d 61 79 41 62 6f  id sqlite3MayAbo
29e00 72 74 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64  rt(Parse*);.void
29e10 20 73 71 6c 69 74 65 33 48 61 6c 74 43 6f 6e 73   sqlite3HaltCons
29e20 74 72 61 69 6e 74 28 50 61 72 73 65 2a 2c 20 69  traint(Parse*, i
29e30 6e 74 2c 20 69 6e 74 2c 20 63 68 61 72 2a 2c 20  nt, int, char*, 
29e40 69 38 2c 20 75 38 29 3b 0a 76 6f 69 64 20 73 71  i8, u8);.void sq
29e50 6c 69 74 65 33 55 6e 69 71 75 65 43 6f 6e 73 74  lite3UniqueConst
29e60 72 61 69 6e 74 28 50 61 72 73 65 2a 2c 20 69 6e  raint(Parse*, in
29e70 74 2c 20 49 6e 64 65 78 2a 29 3b 0a 76 6f 69 64  t, Index*);.void
29e80 20 73 71 6c 69 74 65 33 52 6f 77 69 64 43 6f 6e   sqlite3RowidCon
29e90 73 74 72 61 69 6e 74 28 50 61 72 73 65 2a 2c 20  straint(Parse*, 
29ea0 69 6e 74 2c 20 54 61 62 6c 65 2a 29 3b 0a 45 78  int, Table*);.Ex
29eb0 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72 44  pr *sqlite3ExprD
29ec0 75 70 28 73 71 6c 69 74 65 33 2a 2c 45 78 70 72  up(sqlite3*,Expr
29ed0 2a 2c 69 6e 74 29 3b 0a 45 78 70 72 4c 69 73 74  *,int);.ExprList
29ee0 20 2a 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73   *sqlite3ExprLis
29ef0 74 44 75 70 28 73 71 6c 69 74 65 33 2a 2c 45 78  tDup(sqlite3*,Ex
29f00 70 72 4c 69 73 74 2a 2c 69 6e 74 29 3b 0a 53 72  prList*,int);.Sr
29f10 63 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 53 72  cList *sqlite3Sr
29f20 63 4c 69 73 74 44 75 70 28 73 71 6c 69 74 65 33  cListDup(sqlite3
29f30 2a 2c 53 72 63 4c 69 73 74 2a 2c 69 6e 74 29 3b  *,SrcList*,int);
29f40 0a 49 64 4c 69 73 74 20 2a 73 71 6c 69 74 65 33  .IdList *sqlite3
29f50 49 64 4c 69 73 74 44 75 70 28 73 71 6c 69 74 65  IdListDup(sqlite
29f60 33 2a 2c 49 64 4c 69 73 74 2a 29 3b 0a 53 65 6c  3*,IdList*);.Sel
29f70 65 63 74 20 2a 73 71 6c 69 74 65 33 53 65 6c 65  ect *sqlite3Sele
29f80 63 74 44 75 70 28 73 71 6c 69 74 65 33 2a 2c 53  ctDup(sqlite3*,S
29f90 65 6c 65 63 74 2a 2c 69 6e 74 29 3b 0a 23 69 66  elect*,int);.#if
29fa0 20 53 45 4c 45 43 54 54 52 41 43 45 5f 45 4e 41   SELECTTRACE_ENA
29fb0 42 4c 45 44 0a 76 6f 69 64 20 73 71 6c 69 74 65  BLED.void sqlite
29fc0 33 53 65 6c 65 63 74 53 65 74 4e 61 6d 65 28 53  3SelectSetName(S
29fd0 65 6c 65 63 74 2a 2c 63 6f 6e 73 74 20 63 68 61  elect*,const cha
29fe0 72 2a 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66  r*);.#else.# def
29ff0 69 6e 65 20 73 71 6c 69 74 65 33 53 65 6c 65 63  ine sqlite3Selec
2a000 74 53 65 74 4e 61 6d 65 28 41 2c 42 29 0a 23 65  tSetName(A,B).#e
2a010 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65  ndif.void sqlite
2a020 33 49 6e 73 65 72 74 42 75 69 6c 74 69 6e 46 75  3InsertBuiltinFu
2a030 6e 63 73 28 46 75 6e 63 44 65 66 2a 2c 69 6e 74  ncs(FuncDef*,int
2a040 29 3b 0a 46 75 6e 63 44 65 66 20 2a 73 71 6c 69  );.FuncDef *sqli
2a050 74 65 33 46 69 6e 64 46 75 6e 63 74 69 6f 6e 28  te3FindFunction(
2a060 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63  sqlite3*,const c
2a070 68 61 72 2a 2c 69 6e 74 2c 75 38 2c 75 38 29 3b  har*,int,u8,u8);
2a080 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 67  .void sqlite3Reg
2a090 69 73 74 65 72 42 75 69 6c 74 69 6e 46 75 6e 63  isterBuiltinFunc
2a0a0 74 69 6f 6e 73 28 76 6f 69 64 29 3b 0a 76 6f 69  tions(void);.voi
2a0b0 64 20 73 71 6c 69 74 65 33 52 65 67 69 73 74 65  d sqlite3Registe
2a0c0 72 44 61 74 65 54 69 6d 65 46 75 6e 63 74 69 6f  rDateTimeFunctio
2a0d0 6e 73 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20 73  ns(void);.void s
2a0e0 71 6c 69 74 65 33 52 65 67 69 73 74 65 72 50 65  qlite3RegisterPe
2a0f0 72 43 6f 6e 6e 65 63 74 69 6f 6e 42 75 69 6c 74  rConnectionBuilt
2a100 69 6e 46 75 6e 63 74 69 6f 6e 73 28 73 71 6c 69  inFunctions(sqli
2a110 74 65 33 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  te3*);.int sqlit
2a120 65 33 53 61 66 65 74 79 43 68 65 63 6b 4f 6b 28  e3SafetyCheckOk(
2a130 73 71 6c 69 74 65 33 2a 29 3b 0a 69 6e 74 20 73  sqlite3*);.int s
2a140 71 6c 69 74 65 33 53 61 66 65 74 79 43 68 65 63  qlite3SafetyChec
2a150 6b 53 69 63 6b 4f 72 4f 6b 28 73 71 6c 69 74 65  kSickOrOk(sqlite
2a160 33 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  3*);.void sqlite
2a170 33 43 68 61 6e 67 65 43 6f 6f 6b 69 65 28 50 61  3ChangeCookie(Pa
2a180 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 0a 23 69 66  rse*, int);..#if
2a190 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
2a1a0 5f 4f 4d 49 54 5f 56 49 45 57 29 20 26 26 20 21  _OMIT_VIEW) && !
2a1b0 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
2a1c0 4d 49 54 5f 54 52 49 47 47 45 52 29 0a 76 6f 69  MIT_TRIGGER).voi
2a1d0 64 20 73 71 6c 69 74 65 33 4d 61 74 65 72 69 61  d sqlite3Materia
2a1e0 6c 69 7a 65 56 69 65 77 28 50 61 72 73 65 2a 2c  lizeView(Parse*,
2a1f0 20 54 61 62 6c 65 2a 2c 20 45 78 70 72 2a 2c 20   Table*, Expr*, 
2a200 45 78 70 72 4c 69 73 74 2a 2c 45 78 70 72 2a 2c  ExprList*,Expr*,
2a210 69 6e 74 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69  int);.#endif..#i
2a220 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
2a230 54 5f 54 52 49 47 47 45 52 0a 20 20 76 6f 69 64  T_TRIGGER.  void
2a240 20 73 71 6c 69 74 65 33 42 65 67 69 6e 54 72 69   sqlite3BeginTri
2a250 67 67 65 72 28 50 61 72 73 65 2a 2c 20 54 6f 6b  gger(Parse*, Tok
2a260 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 69 6e 74 2c 69  en*,Token*,int,i
2a270 6e 74 2c 49 64 4c 69 73 74 2a 2c 53 72 63 4c 69  nt,IdList*,SrcLi
2a280 73 74 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20  st*,.           
2a290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a2a0 45 78 70 72 2a 2c 69 6e 74 2c 20 69 6e 74 29 3b  Expr*,int, int);
2a2b0 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 46  .  void sqlite3F
2a2c0 69 6e 69 73 68 54 72 69 67 67 65 72 28 50 61 72  inishTrigger(Par
2a2d0 73 65 2a 2c 20 54 72 69 67 67 65 72 53 74 65 70  se*, TriggerStep
2a2e0 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 20 20 76 6f  *, Token*);.  vo
2a2f0 69 64 20 73 71 6c 69 74 65 33 44 72 6f 70 54 72  id sqlite3DropTr
2a300 69 67 67 65 72 28 50 61 72 73 65 2a 2c 20 53 72  igger(Parse*, Sr
2a310 63 4c 69 73 74 2a 2c 20 69 6e 74 29 3b 0a 20 20  cList*, int);.  
2a320 76 6f 69 64 20 73 71 6c 69 74 65 33 44 72 6f 70  void sqlite3Drop
2a330 54 72 69 67 67 65 72 50 74 72 28 50 61 72 73 65  TriggerPtr(Parse
2a340 2a 2c 20 54 72 69 67 67 65 72 2a 29 3b 0a 20 20  *, Trigger*);.  
2a350 54 72 69 67 67 65 72 20 2a 73 71 6c 69 74 65 33  Trigger *sqlite3
2a360 54 72 69 67 67 65 72 73 45 78 69 73 74 28 50 61  TriggersExist(Pa
2a370 72 73 65 20 2a 2c 20 54 61 62 6c 65 2a 2c 20 69  rse *, Table*, i
2a380 6e 74 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 69  nt, ExprList*, i
2a390 6e 74 20 2a 70 4d 61 73 6b 29 3b 0a 20 20 54 72  nt *pMask);.  Tr
2a3a0 69 67 67 65 72 20 2a 73 71 6c 69 74 65 33 54 72  igger *sqlite3Tr
2a3b0 69 67 67 65 72 4c 69 73 74 28 50 61 72 73 65 20  iggerList(Parse 
2a3c0 2a 2c 20 54 61 62 6c 65 20 2a 29 3b 0a 20 20 76  *, Table *);.  v
2a3d0 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 64 65 52  oid sqlite3CodeR
2a3e0 6f 77 54 72 69 67 67 65 72 28 50 61 72 73 65 2a  owTrigger(Parse*
2a3f0 2c 20 54 72 69 67 67 65 72 20 2a 2c 20 69 6e 74  , Trigger *, int
2a400 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74  , ExprList*, int
2a410 2c 20 54 61 62 6c 65 20 2a 2c 0a 20 20 20 20 20  , Table *,.     
2a420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a430 20 20 20 20 20 20 20 69 6e 74 2c 20 69 6e 74 2c         int, int,
2a440 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20 73 71   int);.  void sq
2a450 6c 69 74 65 33 43 6f 64 65 52 6f 77 54 72 69 67  lite3CodeRowTrig
2a460 67 65 72 44 69 72 65 63 74 28 50 61 72 73 65 20  gerDirect(Parse 
2a470 2a 2c 20 54 72 69 67 67 65 72 20 2a 2c 20 54 61  *, Trigger *, Ta
2a480 62 6c 65 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c  ble *, int, int,
2a490 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20 73 71   int);.  void sq
2a4a0 6c 69 74 65 56 69 65 77 54 72 69 67 67 65 72 73  liteViewTriggers
2a4b0 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c  (Parse*, Table*,
2a4c0 20 45 78 70 72 2a 2c 20 69 6e 74 2c 20 45 78 70   Expr*, int, Exp
2a4d0 72 4c 69 73 74 2a 29 3b 0a 20 20 76 6f 69 64 20  rList*);.  void 
2a4e0 73 71 6c 69 74 65 33 44 65 6c 65 74 65 54 72 69  sqlite3DeleteTri
2a4f0 67 67 65 72 53 74 65 70 28 73 71 6c 69 74 65 33  ggerStep(sqlite3
2a500 2a 2c 20 54 72 69 67 67 65 72 53 74 65 70 2a 29  *, TriggerStep*)
2a510 3b 0a 20 20 54 72 69 67 67 65 72 53 74 65 70 20  ;.  TriggerStep 
2a520 2a 73 71 6c 69 74 65 33 54 72 69 67 67 65 72 53  *sqlite3TriggerS
2a530 65 6c 65 63 74 53 74 65 70 28 73 71 6c 69 74 65  electStep(sqlite
2a540 33 2a 2c 53 65 6c 65 63 74 2a 2c 0a 20 20 20 20  3*,Select*,.    
2a550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a570 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c      const char*,
2a580 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20 20  const char*);.  
2a590 54 72 69 67 67 65 72 53 74 65 70 20 2a 73 71 6c  TriggerStep *sql
2a5a0 69 74 65 33 54 72 69 67 67 65 72 49 6e 73 65 72  ite3TriggerInser
2a5b0 74 53 74 65 70 28 73 71 6c 69 74 65 33 2a 2c 54  tStep(sqlite3*,T
2a5c0 6f 6b 65 6e 2a 2c 20 49 64 4c 69 73 74 2a 2c 0a  oken*, IdList*,.
2a5d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a5e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a5f0 20 20 20 20 20 20 20 20 53 65 6c 65 63 74 2a 2c          Select*,
2a600 75 38 2c 55 70 73 65 72 74 2a 2c 0a 20 20 20 20  u8,Upsert*,.    
2a610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a630 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c      const char*,
2a640 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20 20  const char*);.  
2a650 54 72 69 67 67 65 72 53 74 65 70 20 2a 73 71 6c  TriggerStep *sql
2a660 69 74 65 33 54 72 69 67 67 65 72 55 70 64 61 74  ite3TriggerUpdat
2a670 65 53 74 65 70 28 73 71 6c 69 74 65 33 2a 2c 54  eStep(sqlite3*,T
2a680 6f 6b 65 6e 2a 2c 45 78 70 72 4c 69 73 74 2a 2c  oken*,ExprList*,
2a690 20 45 78 70 72 2a 2c 20 75 38 2c 0a 20 20 20 20   Expr*, u8,.    
2a6a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a6b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a6c0 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c      const char*,
2a6d0 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20 20  const char*);.  
2a6e0 54 72 69 67 67 65 72 53 74 65 70 20 2a 73 71 6c  TriggerStep *sql
2a6f0 69 74 65 33 54 72 69 67 67 65 72 44 65 6c 65 74  ite3TriggerDelet
2a700 65 53 74 65 70 28 73 71 6c 69 74 65 33 2a 2c 54  eStep(sqlite3*,T
2a710 6f 6b 65 6e 2a 2c 20 45 78 70 72 2a 2c 0a 20 20  oken*, Expr*,.  
2a720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a740 20 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72        const char
2a750 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  *,const char*);.
2a760 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65    void sqlite3De
2a770 6c 65 74 65 54 72 69 67 67 65 72 28 73 71 6c 69  leteTrigger(sqli
2a780 74 65 33 2a 2c 20 54 72 69 67 67 65 72 2a 29 3b  te3*, Trigger*);
2a790 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 55  .  void sqlite3U
2a7a0 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65 54 72  nlinkAndDeleteTr
2a7b0 69 67 67 65 72 28 73 71 6c 69 74 65 33 2a 2c 69  igger(sqlite3*,i
2a7c0 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  nt,const char*);
2a7d0 0a 20 20 75 33 32 20 73 71 6c 69 74 65 33 54 72  .  u32 sqlite3Tr
2a7e0 69 67 67 65 72 43 6f 6c 6d 61 73 6b 28 50 61 72  iggerColmask(Par
2a7f0 73 65 2a 2c 54 72 69 67 67 65 72 2a 2c 45 78 70  se*,Trigger*,Exp
2a800 72 4c 69 73 74 2a 2c 69 6e 74 2c 69 6e 74 2c 54  rList*,int,int,T
2a810 61 62 6c 65 2a 2c 69 6e 74 29 3b 0a 23 20 64 65  able*,int);.# de
2a820 66 69 6e 65 20 73 71 6c 69 74 65 33 50 61 72 73  fine sqlite3Pars
2a830 65 54 6f 70 6c 65 76 65 6c 28 70 29 20 28 28 70  eToplevel(p) ((p
2a840 29 2d 3e 70 54 6f 70 6c 65 76 65 6c 20 3f 20 28  )->pToplevel ? (
2a850 70 29 2d 3e 70 54 6f 70 6c 65 76 65 6c 20 3a 20  p)->pToplevel : 
2a860 28 70 29 29 0a 23 20 64 65 66 69 6e 65 20 73 71  (p)).# define sq
2a870 6c 69 74 65 33 49 73 54 6f 70 6c 65 76 65 6c 28  lite3IsToplevel(
2a880 70 29 20 28 28 70 29 2d 3e 70 54 6f 70 6c 65 76  p) ((p)->pToplev
2a890 65 6c 3d 3d 30 29 0a 23 65 6c 73 65 0a 23 20 64  el==0).#else.# d
2a8a0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54 72 69  efine sqlite3Tri
2a8b0 67 67 65 72 73 45 78 69 73 74 28 42 2c 43 2c 44  ggersExist(B,C,D
2a8c0 2c 45 2c 46 29 20 30 0a 23 20 64 65 66 69 6e 65  ,E,F) 0.# define
2a8d0 20 73 71 6c 69 74 65 33 44 65 6c 65 74 65 54 72   sqlite3DeleteTr
2a8e0 69 67 67 65 72 28 41 2c 42 29 0a 23 20 64 65 66  igger(A,B).# def
2a8f0 69 6e 65 20 73 71 6c 69 74 65 33 44 72 6f 70 54  ine sqlite3DropT
2a900 72 69 67 67 65 72 50 74 72 28 41 2c 42 29 0a 23  riggerPtr(A,B).#
2a910 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 55   define sqlite3U
2a920 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65 54 72  nlinkAndDeleteTr
2a930 69 67 67 65 72 28 41 2c 42 2c 43 29 0a 23 20 64  igger(A,B,C).# d
2a940 65 66 69 6e 65 20 73 71 6c 69 74 65 33 43 6f 64  efine sqlite3Cod
2a950 65 52 6f 77 54 72 69 67 67 65 72 28 41 2c 42 2c  eRowTrigger(A,B,
2a960 43 2c 44 2c 45 2c 46 2c 47 2c 48 2c 49 29 0a 23  C,D,E,F,G,H,I).#
2a970 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 43   define sqlite3C
2a980 6f 64 65 52 6f 77 54 72 69 67 67 65 72 44 69 72  odeRowTriggerDir
2a990 65 63 74 28 41 2c 42 2c 43 2c 44 2c 45 2c 46 29  ect(A,B,C,D,E,F)
2a9a0 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
2a9b0 33 54 72 69 67 67 65 72 4c 69 73 74 28 58 2c 20  3TriggerList(X, 
2a9c0 59 29 20 30 0a 23 20 64 65 66 69 6e 65 20 73 71  Y) 0.# define sq
2a9d0 6c 69 74 65 33 50 61 72 73 65 54 6f 70 6c 65 76  lite3ParseToplev
2a9e0 65 6c 28 70 29 20 70 0a 23 20 64 65 66 69 6e 65  el(p) p.# define
2a9f0 20 73 71 6c 69 74 65 33 49 73 54 6f 70 6c 65 76   sqlite3IsToplev
2aa00 65 6c 28 70 29 20 31 0a 23 20 64 65 66 69 6e 65  el(p) 1.# define
2aa10 20 73 71 6c 69 74 65 33 54 72 69 67 67 65 72 43   sqlite3TriggerC
2aa20 6f 6c 6d 61 73 6b 28 41 2c 42 2c 43 2c 44 2c 45  olmask(A,B,C,D,E
2aa30 2c 46 2c 47 29 20 30 0a 23 65 6e 64 69 66 0a 0a  ,F,G) 0.#endif..
2aa40 69 6e 74 20 73 71 6c 69 74 65 33 4a 6f 69 6e 54  int sqlite3JoinT
2aa50 79 70 65 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65  ype(Parse*, Toke
2aa60 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65  n*, Token*, Toke
2aa70 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  n*);.void sqlite
2aa80 33 43 72 65 61 74 65 46 6f 72 65 69 67 6e 4b 65  3CreateForeignKe
2aa90 79 28 50 61 72 73 65 2a 2c 20 45 78 70 72 4c 69  y(Parse*, ExprLi
2aaa0 73 74 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 45 78 70  st*, Token*, Exp
2aab0 72 4c 69 73 74 2a 2c 20 69 6e 74 29 3b 0a 76 6f  rList*, int);.vo
2aac0 69 64 20 73 71 6c 69 74 65 33 44 65 66 65 72 46  id sqlite3DeferF
2aad0 6f 72 65 69 67 6e 4b 65 79 28 50 61 72 73 65 2a  oreignKey(Parse*
2aae0 2c 20 69 6e 74 29 3b 0a 23 69 66 6e 64 65 66 20  , int);.#ifndef 
2aaf0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 48  SQLITE_OMIT_AUTH
2ab00 4f 52 49 5a 41 54 49 4f 4e 0a 20 20 76 6f 69 64  ORIZATION.  void
2ab10 20 73 71 6c 69 74 65 33 41 75 74 68 52 65 61 64   sqlite3AuthRead
2ab20 28 50 61 72 73 65 2a 2c 45 78 70 72 2a 2c 53 63  (Parse*,Expr*,Sc
2ab30 68 65 6d 61 2a 2c 53 72 63 4c 69 73 74 2a 29 3b  hema*,SrcList*);
2ab40 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 41 75  .  int sqlite3Au
2ab50 74 68 43 68 65 63 6b 28 50 61 72 73 65 2a 2c 69  thCheck(Parse*,i
2ab60 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c  nt, const char*,
2ab70 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f   const char*, co
2ab80 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20 20 76 6f  nst char*);.  vo
2ab90 69 64 20 73 71 6c 69 74 65 33 41 75 74 68 43 6f  id sqlite3AuthCo
2aba0 6e 74 65 78 74 50 75 73 68 28 50 61 72 73 65 2a  ntextPush(Parse*
2abb0 2c 20 41 75 74 68 43 6f 6e 74 65 78 74 2a 2c 20  , AuthContext*, 
2abc0 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20 20  const char*);.  
2abd0 76 6f 69 64 20 73 71 6c 69 74 65 33 41 75 74 68  void sqlite3Auth
2abe0 43 6f 6e 74 65 78 74 50 6f 70 28 41 75 74 68 43  ContextPop(AuthC
2abf0 6f 6e 74 65 78 74 2a 29 3b 0a 20 20 69 6e 74 20  ontext*);.  int 
2ac00 73 71 6c 69 74 65 33 41 75 74 68 52 65 61 64 43  sqlite3AuthReadC
2ac10 6f 6c 28 50 61 72 73 65 2a 2c 20 63 6f 6e 73 74  ol(Parse*, const
2ac20 20 63 68 61 72 20 2a 2c 20 63 6f 6e 73 74 20 63   char *, const c
2ac30 68 61 72 20 2a 2c 20 69 6e 74 29 3b 0a 23 65 6c  har *, int);.#el
2ac40 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  se.# define sqli
2ac50 74 65 33 41 75 74 68 52 65 61 64 28 61 2c 62 2c  te3AuthRead(a,b,
2ac60 63 2c 64 29 0a 23 20 64 65 66 69 6e 65 20 73 71  c,d).# define sq
2ac70 6c 69 74 65 33 41 75 74 68 43 68 65 63 6b 28 61  lite3AuthCheck(a
2ac80 2c 62 2c 63 2c 64 2c 65 29 20 20 20 20 53 51 4c  ,b,c,d,e)    SQL
2ac90 49 54 45 5f 4f 4b 0a 23 20 64 65 66 69 6e 65 20  ITE_OK.# define 
2aca0 73 71 6c 69 74 65 33 41 75 74 68 43 6f 6e 74 65  sqlite3AuthConte
2acb0 78 74 50 75 73 68 28 61 2c 62 2c 63 29 0a 23 20  xtPush(a,b,c).# 
2acc0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 41 75  define sqlite3Au
2acd0 74 68 43 6f 6e 74 65 78 74 50 6f 70 28 61 29 20  thContextPop(a) 
2ace0 20 28 28 76 6f 69 64 29 28 61 29 29 0a 23 65 6e   ((void)(a)).#en
2acf0 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  dif.void sqlite3
2ad00 41 74 74 61 63 68 28 50 61 72 73 65 2a 2c 20 45  Attach(Parse*, E
2ad10 78 70 72 2a 2c 20 45 78 70 72 2a 2c 20 45 78 70  xpr*, Expr*, Exp
2ad20 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  r*);.void sqlite
2ad30 33 44 65 74 61 63 68 28 50 61 72 73 65 2a 2c 20  3Detach(Parse*, 
2ad40 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  Expr*);.void sql
2ad50 69 74 65 33 46 69 78 49 6e 69 74 28 44 62 46 69  ite3FixInit(DbFi
2ad60 78 65 72 2a 2c 20 50 61 72 73 65 2a 2c 20 69 6e  xer*, Parse*, in
2ad70 74 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  t, const char*, 
2ad80 63 6f 6e 73 74 20 54 6f 6b 65 6e 2a 29 3b 0a 69  const Token*);.i
2ad90 6e 74 20 73 71 6c 69 74 65 33 46 69 78 53 72 63  nt sqlite3FixSrc
2ada0 4c 69 73 74 28 44 62 46 69 78 65 72 2a 2c 20 53  List(DbFixer*, S
2adb0 72 63 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71  rcList*);.int sq
2adc0 6c 69 74 65 33 46 69 78 53 65 6c 65 63 74 28 44  lite3FixSelect(D
2add0 62 46 69 78 65 72 2a 2c 20 53 65 6c 65 63 74 2a  bFixer*, Select*
2ade0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69  );.int sqlite3Fi
2adf0 78 45 78 70 72 28 44 62 46 69 78 65 72 2a 2c 20  xExpr(DbFixer*, 
2ae00 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  Expr*);.int sqli
2ae10 74 65 33 46 69 78 45 78 70 72 4c 69 73 74 28 44  te3FixExprList(D
2ae20 62 46 69 78 65 72 2a 2c 20 45 78 70 72 4c 69 73  bFixer*, ExprLis
2ae30 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  t*);.int sqlite3
2ae40 46 69 78 54 72 69 67 67 65 72 53 74 65 70 28 44  FixTriggerStep(D
2ae50 62 46 69 78 65 72 2a 2c 20 54 72 69 67 67 65 72  bFixer*, Trigger
2ae60 53 74 65 70 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  Step*);.int sqli
2ae70 74 65 33 41 74 6f 46 28 63 6f 6e 73 74 20 63 68  te3AtoF(const ch
2ae80 61 72 20 2a 7a 2c 20 64 6f 75 62 6c 65 2a 2c 20  ar *z, double*, 
2ae90 69 6e 74 2c 20 75 38 29 3b 0a 69 6e 74 20 73 71  int, u8);.int sq
2aea0 6c 69 74 65 33 47 65 74 49 6e 74 33 32 28 63 6f  lite3GetInt32(co
2aeb0 6e 73 74 20 63 68 61 72 20 2a 2c 20 69 6e 74 2a  nst char *, int*
2aec0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 41 74  );.int sqlite3At
2aed0 6f 69 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  oi(const char*);
2aee0 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
2aef0 4f 4d 49 54 5f 55 54 46 31 36 0a 69 6e 74 20 73  OMIT_UTF16.int s
2af00 71 6c 69 74 65 33 55 74 66 31 36 42 79 74 65 4c  qlite3Utf16ByteL
2af10 65 6e 28 63 6f 6e 73 74 20 76 6f 69 64 20 2a 70  en(const void *p
2af20 44 61 74 61 2c 20 69 6e 74 20 6e 43 68 61 72 29  Data, int nChar)
2af30 3b 0a 23 65 6e 64 69 66 0a 69 6e 74 20 73 71 6c  ;.#endif.int sql
2af40 69 74 65 33 55 74 66 38 43 68 61 72 4c 65 6e 28  ite3Utf8CharLen(
2af50 63 6f 6e 73 74 20 63 68 61 72 20 2a 70 44 61 74  const char *pDat
2af60 61 2c 20 69 6e 74 20 6e 42 79 74 65 29 3b 0a 75  a, int nByte);.u
2af70 33 32 20 73 71 6c 69 74 65 33 55 74 66 38 52 65  32 sqlite3Utf8Re
2af80 61 64 28 63 6f 6e 73 74 20 75 38 2a 2a 29 3b 0a  ad(const u8**);.
2af90 4c 6f 67 45 73 74 20 73 71 6c 69 74 65 33 4c 6f  LogEst sqlite3Lo
2afa0 67 45 73 74 28 75 36 34 29 3b 0a 4c 6f 67 45 73  gEst(u64);.LogEs
2afb0 74 20 73 71 6c 69 74 65 33 4c 6f 67 45 73 74 41  t sqlite3LogEstA
2afc0 64 64 28 4c 6f 67 45 73 74 2c 4c 6f 67 45 73 74  dd(LogEst,LogEst
2afd0 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  );.#ifndef SQLIT
2afe0 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
2aff0 42 4c 45 0a 4c 6f 67 45 73 74 20 73 71 6c 69 74  BLE.LogEst sqlit
2b000 65 33 4c 6f 67 45 73 74 46 72 6f 6d 44 6f 75 62  e3LogEstFromDoub
2b010 6c 65 28 64 6f 75 62 6c 65 29 3b 0a 23 65 6e 64  le(double);.#end
2b020 69 66 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53  if.#if defined(S
2b030 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 4d  QLITE_ENABLE_STM
2b040 54 5f 53 43 41 4e 53 54 41 54 55 53 29 20 7c 7c  T_SCANSTATUS) ||
2b050 20 5c 0a 20 20 20 20 64 65 66 69 6e 65 64 28 53   \.    defined(S
2b060 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41  QLITE_ENABLE_STA
2b070 54 33 5f 4f 52 5f 53 54 41 54 34 29 20 7c 7c 20  T3_OR_STAT4) || 
2b080 5c 0a 20 20 20 20 64 65 66 69 6e 65 64 28 53 51  \.    defined(SQ
2b090 4c 49 54 45 5f 45 58 50 4c 41 49 4e 5f 45 53 54  LITE_EXPLAIN_EST
2b0a0 49 4d 41 54 45 44 5f 52 4f 57 53 29 0a 75 36 34  IMATED_ROWS).u64
2b0b0 20 73 71 6c 69 74 65 33 4c 6f 67 45 73 74 54 6f   sqlite3LogEstTo
2b0c0 49 6e 74 28 4c 6f 67 45 73 74 29 3b 0a 23 65 6e  Int(LogEst);.#en
2b0d0 64 69 66 0a 56 4c 69 73 74 20 2a 73 71 6c 69 74  dif.VList *sqlit
2b0e0 65 33 56 4c 69 73 74 41 64 64 28 73 71 6c 69 74  e3VListAdd(sqlit
2b0f0 65 33 2a 2c 56 4c 69 73 74 2a 2c 63 6f 6e 73 74  e3*,VList*,const
2b100 20 63 68 61 72 2a 2c 69 6e 74 2c 69 6e 74 29 3b   char*,int,int);
2b110 0a 63 6f 6e 73 74 20 63 68 61 72 20 2a 73 71 6c  .const char *sql
2b120 69 74 65 33 56 4c 69 73 74 4e 75 6d 54 6f 4e 61  ite3VListNumToNa
2b130 6d 65 28 56 4c 69 73 74 2a 2c 69 6e 74 29 3b 0a  me(VList*,int);.
2b140 69 6e 74 20 73 71 6c 69 74 65 33 56 4c 69 73 74  int sqlite3VList
2b150 4e 61 6d 65 54 6f 4e 75 6d 28 56 4c 69 73 74 2a  NameToNum(VList*
2b160 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 69 6e 74  ,const char*,int
2b170 29 3b 0a 0a 2f 2a 0a 2a 2a 20 52 6f 75 74 69 6e  );../*.** Routin
2b180 65 73 20 74 6f 20 72 65 61 64 20 61 6e 64 20 77  es to read and w
2b190 72 69 74 65 20 76 61 72 69 61 62 6c 65 2d 6c 65  rite variable-le
2b1a0 6e 67 74 68 20 69 6e 74 65 67 65 72 73 2e 20 20  ngth integers.  
2b1b0 54 68 65 73 65 20 75 73 65 64 20 74 6f 0a 2a 2a  These used to.**
2b1c0 20 62 65 20 64 65 66 69 6e 65 64 20 6c 6f 63 61   be defined loca
2b1d0 6c 6c 79 2c 20 62 75 74 20 6e 6f 77 20 77 65 20  lly, but now we 
2b1e0 75 73 65 20 74 68 65 20 76 61 72 69 6e 74 20 72  use the varint r
2b1f0 6f 75 74 69 6e 65 73 20 69 6e 20 74 68 65 20 75  outines in the u
2b200 74 69 6c 2e 63 0a 2a 2a 20 66 69 6c 65 2e 0a 2a  til.c.** file..*
2b210 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 50 75 74  /.int sqlite3Put
2b220 56 61 72 69 6e 74 28 75 6e 73 69 67 6e 65 64 20  Varint(unsigned 
2b230 63 68 61 72 2a 2c 20 75 36 34 29 3b 0a 75 38 20  char*, u64);.u8 
2b240 73 71 6c 69 74 65 33 47 65 74 56 61 72 69 6e 74  sqlite3GetVarint
2b250 28 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20  (const unsigned 
2b260 63 68 61 72 20 2a 2c 20 75 36 34 20 2a 29 3b 0a  char *, u64 *);.
2b270 75 38 20 73 71 6c 69 74 65 33 47 65 74 56 61 72  u8 sqlite3GetVar
2b280 69 6e 74 33 32 28 63 6f 6e 73 74 20 75 6e 73 69  int32(const unsi
2b290 67 6e 65 64 20 63 68 61 72 20 2a 2c 20 75 33 32  gned char *, u32
2b2a0 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33   *);.int sqlite3
2b2b0 56 61 72 69 6e 74 4c 65 6e 28 75 36 34 20 76 29  VarintLen(u64 v)
2b2c0 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 63 6f 6d  ;../*.** The com
2b2d0 6d 6f 6e 20 63 61 73 65 20 69 73 20 66 6f 72 20  mon case is for 
2b2e0 61 20 76 61 72 69 6e 74 20 74 6f 20 62 65 20 61  a varint to be a
2b2f0 20 73 69 6e 67 6c 65 20 62 79 74 65 2e 20 20 54   single byte.  T
2b300 68 65 79 20 66 6f 6c 6c 6f 77 69 6e 67 0a 2a 2a  hey following.**
2b310 20 6d 61 63 72 6f 73 20 68 61 6e 64 6c 65 20 74   macros handle t
2b320 68 65 20 63 6f 6d 6d 6f 6e 20 63 61 73 65 20 77  he common case w
2b330 69 74 68 6f 75 74 20 61 20 70 72 6f 63 65 64 75  ithout a procedu
2b340 72 65 20 63 61 6c 6c 2c 20 62 75 74 20 74 68 65  re call, but the
2b350 6e 20 63 61 6c 6c 0a 2a 2a 20 74 68 65 20 70 72  n call.** the pr
2b360 6f 63 65 64 75 72 65 20 66 6f 72 20 6c 61 72 67  ocedure for larg
2b370 65 72 20 76 61 72 69 6e 74 73 2e 0a 2a 2f 0a 23  er varints..*/.#
2b380 64 65 66 69 6e 65 20 67 65 74 56 61 72 69 6e 74  define getVarint
2b390 33 32 28 41 2c 42 29 20 20 5c 0a 20 20 28 75 38  32(A,B)  \.  (u8
2b3a0 29 28 28 2a 28 41 29 3c 28 75 38 29 30 78 38 30  )((*(A)<(u8)0x80
2b3b0 29 3f 28 28 42 29 3d 28 75 33 32 29 2a 28 41 29  )?((B)=(u32)*(A)
2b3c0 29 2c 31 3a 73 71 6c 69 74 65 33 47 65 74 56 61  ),1:sqlite3GetVa
2b3d0 72 69 6e 74 33 32 28 28 41 29 2c 28 75 33 32 20  rint32((A),(u32 
2b3e0 2a 29 26 28 42 29 29 29 0a 23 64 65 66 69 6e 65  *)&(B))).#define
2b3f0 20 70 75 74 56 61 72 69 6e 74 33 32 28 41 2c 42   putVarint32(A,B
2b400 29 20 20 5c 0a 20 20 28 75 38 29 28 28 28 75 33  )  \.  (u8)(((u3
2b410 32 29 28 42 29 3c 28 75 33 32 29 30 78 38 30 29  2)(B)<(u32)0x80)
2b420 3f 28 2a 28 41 29 3d 28 75 6e 73 69 67 6e 65 64  ?(*(A)=(unsigned
2b430 20 63 68 61 72 29 28 42 29 29 2c 31 3a 5c 0a 20   char)(B)),1:\. 
2b440 20 73 71 6c 69 74 65 33 50 75 74 56 61 72 69 6e   sqlite3PutVarin
2b450 74 28 28 41 29 2c 28 42 29 29 29 0a 23 64 65 66  t((A),(B))).#def
2b460 69 6e 65 20 67 65 74 56 61 72 69 6e 74 20 20 20  ine getVarint   
2b470 20 73 71 6c 69 74 65 33 47 65 74 56 61 72 69 6e   sqlite3GetVarin
2b480 74 0a 23 64 65 66 69 6e 65 20 70 75 74 56 61 72  t.#define putVar
2b490 69 6e 74 20 20 20 20 73 71 6c 69 74 65 33 50 75  int    sqlite3Pu
2b4a0 74 56 61 72 69 6e 74 0a 0a 0a 63 6f 6e 73 74 20  tVarint...const 
2b4b0 63 68 61 72 20 2a 73 71 6c 69 74 65 33 49 6e 64  char *sqlite3Ind
2b4c0 65 78 41 66 66 69 6e 69 74 79 53 74 72 28 73 71  exAffinityStr(sq
2b4d0 6c 69 74 65 33 2a 2c 20 49 6e 64 65 78 2a 29 3b  lite3*, Index*);
2b4e0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 54 61 62  .void sqlite3Tab
2b4f0 6c 65 41 66 66 69 6e 69 74 79 28 56 64 62 65 2a  leAffinity(Vdbe*
2b500 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 29 3b 0a  , Table*, int);.
2b510 63 68 61 72 20 73 71 6c 69 74 65 33 43 6f 6d 70  char sqlite3Comp
2b520 61 72 65 41 66 66 69 6e 69 74 79 28 45 78 70 72  areAffinity(Expr
2b530 20 2a 70 45 78 70 72 2c 20 63 68 61 72 20 61 66   *pExpr, char af
2b540 66 32 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  f2);.int sqlite3
2b550 49 6e 64 65 78 41 66 66 69 6e 69 74 79 4f 6b 28  IndexAffinityOk(
2b560 45 78 70 72 20 2a 70 45 78 70 72 2c 20 63 68 61  Expr *pExpr, cha
2b570 72 20 69 64 78 5f 61 66 66 69 6e 69 74 79 29 3b  r idx_affinity);
2b580 0a 63 68 61 72 20 73 71 6c 69 74 65 33 54 61 62  .char sqlite3Tab
2b590 6c 65 43 6f 6c 75 6d 6e 41 66 66 69 6e 69 74 79  leColumnAffinity
2b5a0 28 54 61 62 6c 65 2a 2c 69 6e 74 29 3b 0a 63 68  (Table*,int);.ch
2b5b0 61 72 20 73 71 6c 69 74 65 33 45 78 70 72 41 66  ar sqlite3ExprAf
2b5c0 66 69 6e 69 74 79 28 45 78 70 72 20 2a 70 45 78  finity(Expr *pEx
2b5d0 70 72 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  pr);.int sqlite3
2b5e0 41 74 6f 69 36 34 28 63 6f 6e 73 74 20 63 68 61  Atoi64(const cha
2b5f0 72 2a 2c 20 69 36 34 2a 2c 20 69 6e 74 2c 20 75  r*, i64*, int, u
2b600 38 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 44  8);.int sqlite3D
2b610 65 63 4f 72 48 65 78 54 6f 49 36 34 28 63 6f 6e  ecOrHexToI64(con
2b620 73 74 20 63 68 61 72 2a 2c 20 69 36 34 2a 29 3b  st char*, i64*);
2b630 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 72 72  .void sqlite3Err
2b640 6f 72 57 69 74 68 4d 73 67 28 73 71 6c 69 74 65  orWithMsg(sqlite
2b650 33 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20 63  3*, int, const c
2b660 68 61 72 2a 2c 2e 2e 2e 29 3b 0a 76 6f 69 64 20  har*,...);.void 
2b670 73 71 6c 69 74 65 33 45 72 72 6f 72 28 73 71 6c  sqlite3Error(sql
2b680 69 74 65 33 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64  ite3*,int);.void
2b690 20 73 71 6c 69 74 65 33 53 79 73 74 65 6d 45 72   sqlite3SystemEr
2b6a0 72 6f 72 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74  ror(sqlite3*,int
2b6b0 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33  );.void *sqlite3
2b6c0 48 65 78 54 6f 42 6c 6f 62 28 73 71 6c 69 74 65  HexToBlob(sqlite
2b6d0 33 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  3*, const char *
2b6e0 7a 2c 20 69 6e 74 20 6e 29 3b 0a 75 38 20 73 71  z, int n);.u8 sq
2b6f0 6c 69 74 65 33 48 65 78 54 6f 49 6e 74 28 69 6e  lite3HexToInt(in
2b700 74 20 68 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  t h);.int sqlite
2b710 33 54 77 6f 50 61 72 74 4e 61 6d 65 28 50 61 72  3TwoPartName(Par
2b720 73 65 20 2a 2c 20 54 6f 6b 65 6e 20 2a 2c 20 54  se *, Token *, T
2b730 6f 6b 65 6e 20 2a 2c 20 54 6f 6b 65 6e 20 2a 2a  oken *, Token **
2b740 29 3b 0a 0a 23 69 66 20 64 65 66 69 6e 65 64 28  );..#if defined(
2b750 53 51 4c 49 54 45 5f 4e 45 45 44 5f 45 52 52 5f  SQLITE_NEED_ERR_
2b760 4e 41 4d 45 29 0a 63 6f 6e 73 74 20 63 68 61 72  NAME).const char
2b770 20 2a 73 71 6c 69 74 65 33 45 72 72 4e 61 6d 65   *sqlite3ErrName
2b780 28 69 6e 74 29 3b 0a 23 65 6e 64 69 66 0a 0a 23  (int);.#endif..#
2b790 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  ifdef SQLITE_ENA
2b7a0 42 4c 45 5f 44 45 53 45 52 49 41 4c 49 5a 45 0a  BLE_DESERIALIZE.
2b7b0 69 6e 74 20 73 71 6c 69 74 65 33 4d 65 6d 64 62  int sqlite3Memdb
2b7c0 49 6e 69 74 28 76 6f 69 64 29 3b 0a 23 65 6e 64  Init(void);.#end
2b7d0 69 66 0a 0a 63 6f 6e 73 74 20 63 68 61 72 20 2a  if..const char *
2b7e0 73 71 6c 69 74 65 33 45 72 72 53 74 72 28 69 6e  sqlite3ErrStr(in
2b7f0 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52  t);.int sqlite3R
2b800 65 61 64 53 63 68 65 6d 61 28 50 61 72 73 65 20  eadSchema(Parse 
2b810 2a 70 50 61 72 73 65 29 3b 0a 43 6f 6c 6c 53 65  *pParse);.CollSe
2b820 71 20 2a 73 71 6c 69 74 65 33 46 69 6e 64 43 6f  q *sqlite3FindCo
2b830 6c 6c 53 65 71 28 73 71 6c 69 74 65 33 2a 2c 75  llSeq(sqlite3*,u
2b840 38 20 65 6e 63 2c 20 63 6f 6e 73 74 20 63 68 61  8 enc, const cha
2b850 72 2a 2c 69 6e 74 29 3b 0a 43 6f 6c 6c 53 65 71  r*,int);.CollSeq
2b860 20 2a 73 71 6c 69 74 65 33 4c 6f 63 61 74 65 43   *sqlite3LocateC
2b870 6f 6c 6c 53 65 71 28 50 61 72 73 65 20 2a 70 50  ollSeq(Parse *pP
2b880 61 72 73 65 2c 20 63 6f 6e 73 74 20 63 68 61 72  arse, const char
2b890 2a 7a 4e 61 6d 65 29 3b 0a 43 6f 6c 6c 53 65 71  *zName);.CollSeq
2b8a0 20 2a 73 71 6c 69 74 65 33 45 78 70 72 43 6f 6c   *sqlite3ExprCol
2b8b0 6c 53 65 71 28 50 61 72 73 65 20 2a 70 50 61 72  lSeq(Parse *pPar
2b8c0 73 65 2c 20 45 78 70 72 20 2a 70 45 78 70 72 29  se, Expr *pExpr)
2b8d0 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73 71 6c 69 74  ;.CollSeq *sqlit
2b8e0 65 33 45 78 70 72 4e 4e 43 6f 6c 6c 53 65 71 28  e3ExprNNCollSeq(
2b8f0 50 61 72 73 65 20 2a 70 50 61 72 73 65 2c 20 45  Parse *pParse, E
2b900 78 70 72 20 2a 70 45 78 70 72 29 3b 0a 69 6e 74  xpr *pExpr);.int
2b910 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 6c 6c   sqlite3ExprColl
2b920 53 65 71 4d 61 74 63 68 28 50 61 72 73 65 2a 2c  SeqMatch(Parse*,
2b930 45 78 70 72 2a 2c 45 78 70 72 2a 29 3b 0a 45 78  Expr*,Expr*);.Ex
2b940 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72 41  pr *sqlite3ExprA
2b950 64 64 43 6f 6c 6c 61 74 65 54 6f 6b 65 6e 28 50  ddCollateToken(P
2b960 61 72 73 65 20 2a 70 50 61 72 73 65 2c 20 45 78  arse *pParse, Ex
2b970 70 72 2a 2c 20 63 6f 6e 73 74 20 54 6f 6b 65 6e  pr*, const Token
2b980 2a 2c 20 69 6e 74 29 3b 0a 45 78 70 72 20 2a 73  *, int);.Expr *s
2b990 71 6c 69 74 65 33 45 78 70 72 41 64 64 43 6f 6c  qlite3ExprAddCol
2b9a0 6c 61 74 65 53 74 72 69 6e 67 28 50 61 72 73 65  lateString(Parse
2b9b0 2a 2c 45 78 70 72 2a 2c 63 6f 6e 73 74 20 63 68  *,Expr*,const ch
2b9c0 61 72 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69  ar*);.Expr *sqli
2b9d0 74 65 33 45 78 70 72 53 6b 69 70 43 6f 6c 6c 61  te3ExprSkipColla
2b9e0 74 65 28 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73  te(Expr*);.int s
2b9f0 71 6c 69 74 65 33 43 68 65 63 6b 43 6f 6c 6c 53  qlite3CheckCollS
2ba00 65 71 28 50 61 72 73 65 20 2a 2c 20 43 6f 6c 6c  eq(Parse *, Coll
2ba10 53 65 71 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  Seq *);.int sqli
2ba20 74 65 33 43 68 65 63 6b 4f 62 6a 65 63 74 4e 61  te3CheckObjectNa
2ba30 6d 65 28 50 61 72 73 65 20 2a 2c 20 63 6f 6e 73  me(Parse *, cons
2ba40 74 20 63 68 61 72 20 2a 29 3b 0a 76 6f 69 64 20  t char *);.void 
2ba50 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 68  sqlite3VdbeSetCh
2ba60 61 6e 67 65 73 28 73 71 6c 69 74 65 33 20 2a 2c  anges(sqlite3 *,
2ba70 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74   int);.int sqlit
2ba80 65 33 41 64 64 49 6e 74 36 34 28 69 36 34 2a 2c  e3AddInt64(i64*,
2ba90 69 36 34 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  i64);.int sqlite
2baa0 33 53 75 62 49 6e 74 36 34 28 69 36 34 2a 2c 69  3SubInt64(i64*,i
2bab0 36 34 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  64);.int sqlite3
2bac0 4d 75 6c 49 6e 74 36 34 28 69 36 34 2a 2c 69 36  MulInt64(i64*,i6
2bad0 34 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 41  4);.int sqlite3A
2bae0 62 73 49 6e 74 33 32 28 69 6e 74 29 3b 0a 23 69  bsInt32(int);.#i
2baf0 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  fdef SQLITE_ENAB
2bb00 4c 45 5f 38 5f 33 5f 4e 41 4d 45 53 0a 76 6f 69  LE_8_3_NAMES.voi
2bb10 64 20 73 71 6c 69 74 65 33 46 69 6c 65 53 75 66  d sqlite3FileSuf
2bb20 66 69 78 33 28 63 6f 6e 73 74 20 63 68 61 72 2a  fix3(const char*
2bb30 2c 20 63 68 61 72 2a 29 3b 0a 23 65 6c 73 65 0a  , char*);.#else.
2bb40 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
2bb50 46 69 6c 65 53 75 66 66 69 78 33 28 58 2c 59 29  FileSuffix3(X,Y)
2bb60 0a 23 65 6e 64 69 66 0a 75 38 20 73 71 6c 69 74  .#endif.u8 sqlit
2bb70 65 33 47 65 74 42 6f 6f 6c 65 61 6e 28 63 6f 6e  e3GetBoolean(con
2bb80 73 74 20 63 68 61 72 20 2a 7a 2c 75 38 29 3b 0a  st char *z,u8);.
2bb90 0a 63 6f 6e 73 74 20 76 6f 69 64 20 2a 73 71 6c  .const void *sql
2bba0 69 74 65 33 56 61 6c 75 65 54 65 78 74 28 73 71  ite3ValueText(sq
2bbb0 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2c 20 75 38  lite3_value*, u8
2bbc0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 61  );.int sqlite3Va
2bbd0 6c 75 65 42 79 74 65 73 28 73 71 6c 69 74 65 33  lueBytes(sqlite3
2bbe0 5f 76 61 6c 75 65 2a 2c 20 75 38 29 3b 0a 76 6f  _value*, u8);.vo
2bbf0 69 64 20 73 71 6c 69 74 65 33 56 61 6c 75 65 53  id sqlite3ValueS
2bc00 65 74 53 74 72 28 73 71 6c 69 74 65 33 5f 76 61  etStr(sqlite3_va
2bc10 6c 75 65 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74  lue*, int, const
2bc20 20 76 6f 69 64 20 2a 2c 75 38 2c 0a 20 20 20 20   void *,u8,.    
2bc30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bc40 20 20 20 20 76 6f 69 64 28 2a 29 28 76 6f 69 64      void(*)(void
2bc50 2a 29 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  *));.void sqlite
2bc60 33 56 61 6c 75 65 53 65 74 4e 75 6c 6c 28 73 71  3ValueSetNull(sq
2bc70 6c 69 74 65 33 5f 76 61 6c 75 65 2a 29 3b 0a 76  lite3_value*);.v
2bc80 6f 69 64 20 73 71 6c 69 74 65 33 56 61 6c 75 65  oid sqlite3Value
2bc90 46 72 65 65 28 73 71 6c 69 74 65 33 5f 76 61 6c  Free(sqlite3_val
2bca0 75 65 2a 29 3b 0a 73 71 6c 69 74 65 33 5f 76 61  ue*);.sqlite3_va
2bcb0 6c 75 65 20 2a 73 71 6c 69 74 65 33 56 61 6c 75  lue *sqlite3Valu
2bcc0 65 4e 65 77 28 73 71 6c 69 74 65 33 20 2a 29 3b  eNew(sqlite3 *);
2bcd0 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
2bce0 4f 4d 49 54 5f 55 54 46 31 36 0a 63 68 61 72 20  OMIT_UTF16.char 
2bcf0 2a 73 71 6c 69 74 65 33 55 74 66 31 36 74 6f 38  *sqlite3Utf16to8
2bd00 28 73 71 6c 69 74 65 33 20 2a 2c 20 63 6f 6e 73  (sqlite3 *, cons
2bd10 74 20 76 6f 69 64 2a 2c 20 69 6e 74 2c 20 75 38  t void*, int, u8
2bd20 29 3b 0a 23 65 6e 64 69 66 0a 69 6e 74 20 73 71  );.#endif.int sq
2bd30 6c 69 74 65 33 56 61 6c 75 65 46 72 6f 6d 45 78  lite3ValueFromEx
2bd40 70 72 28 73 71 6c 69 74 65 33 20 2a 2c 20 45 78  pr(sqlite3 *, Ex
2bd50 70 72 20 2a 2c 20 75 38 2c 20 75 38 2c 20 73 71  pr *, u8, u8, sq
2bd60 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a 29 3b  lite3_value **);
2bd70 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 61 6c  .void sqlite3Val
2bd80 75 65 41 70 70 6c 79 41 66 66 69 6e 69 74 79 28  ueApplyAffinity(
2bd90 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2c  sqlite3_value *,
2bda0 20 75 38 2c 20 75 38 29 3b 0a 23 69 66 6e 64 65   u8, u8);.#ifnde
2bdb0 66 20 53 51 4c 49 54 45 5f 41 4d 41 4c 47 41 4d  f SQLITE_AMALGAM
2bdc0 41 54 49 4f 4e 0a 65 78 74 65 72 6e 20 63 6f 6e  ATION.extern con
2bdd0 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72  st unsigned char
2bde0 20 73 71 6c 69 74 65 33 4f 70 63 6f 64 65 50 72   sqlite3OpcodePr
2bdf0 6f 70 65 72 74 79 5b 5d 3b 0a 65 78 74 65 72 6e  operty[];.extern
2be00 20 63 6f 6e 73 74 20 63 68 61 72 20 73 71 6c 69   const char sqli
2be10 74 65 33 53 74 72 42 49 4e 41 52 59 5b 5d 3b 0a  te3StrBINARY[];.
2be20 65 78 74 65 72 6e 20 63 6f 6e 73 74 20 75 6e 73  extern const uns
2be30 69 67 6e 65 64 20 63 68 61 72 20 73 71 6c 69 74  igned char sqlit
2be40 65 33 55 70 70 65 72 54 6f 4c 6f 77 65 72 5b 5d  e3UpperToLower[]
2be50 3b 0a 65 78 74 65 72 6e 20 63 6f 6e 73 74 20 75  ;.extern const u
2be60 6e 73 69 67 6e 65 64 20 63 68 61 72 20 73 71 6c  nsigned char sql
2be70 69 74 65 33 43 74 79 70 65 4d 61 70 5b 5d 3b 0a  ite3CtypeMap[];.
2be80 65 78 74 65 72 6e 20 63 6f 6e 73 74 20 54 6f 6b  extern const Tok
2be90 65 6e 20 73 71 6c 69 74 65 33 49 6e 74 54 6f 6b  en sqlite3IntTok
2bea0 65 6e 73 5b 5d 3b 0a 65 78 74 65 72 6e 20 53 51  ens[];.extern SQ
2beb0 4c 49 54 45 5f 57 53 44 20 73 74 72 75 63 74 20  LITE_WSD struct 
2bec0 53 71 6c 69 74 65 33 43 6f 6e 66 69 67 20 73 71  Sqlite3Config sq
2bed0 6c 69 74 65 33 43 6f 6e 66 69 67 3b 0a 65 78 74  lite3Config;.ext
2bee0 65 72 6e 20 46 75 6e 63 44 65 66 48 61 73 68 20  ern FuncDefHash 
2bef0 73 71 6c 69 74 65 33 42 75 69 6c 74 69 6e 46 75  sqlite3BuiltinFu
2bf00 6e 63 74 69 6f 6e 73 3b 0a 23 69 66 6e 64 65 66  nctions;.#ifndef
2bf10 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 53 44   SQLITE_OMIT_WSD
2bf20 0a 65 78 74 65 72 6e 20 69 6e 74 20 73 71 6c 69  .extern int sqli
2bf30 74 65 33 50 65 6e 64 69 6e 67 42 79 74 65 3b 0a  te3PendingByte;.
2bf40 23 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 23 69  #endif.#endif.#i
2bf50 66 64 65 66 20 56 44 42 45 5f 50 52 4f 46 49 4c  fdef VDBE_PROFIL
2bf60 45 0a 65 78 74 65 72 6e 20 73 71 6c 69 74 65 33  E.extern sqlite3
2bf70 5f 75 69 6e 74 36 34 20 73 71 6c 69 74 65 33 4e  _uint64 sqlite3N
2bf80 50 72 6f 66 69 6c 65 43 6e 74 3b 0a 23 65 6e 64  ProfileCnt;.#end
2bf90 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52  if.void sqlite3R
2bfa0 6f 6f 74 50 61 67 65 4d 6f 76 65 64 28 73 71 6c  ootPageMoved(sql
2bfb0 69 74 65 33 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c  ite3*, int, int,
2bfc0 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
2bfd0 74 65 33 52 65 69 6e 64 65 78 28 50 61 72 73 65  te3Reindex(Parse
2bfe0 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e  *, Token*, Token
2bff0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
2c000 41 6c 74 65 72 46 75 6e 63 74 69 6f 6e 73 28 76  AlterFunctions(v
2c010 6f 69 64 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  oid);.void sqlit
2c020 65 33 41 6c 74 65 72 52 65 6e 61 6d 65 54 61 62  e3AlterRenameTab
2c030 6c 65 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69  le(Parse*, SrcLi
2c040 73 74 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e  st*, Token*);.in
2c050 74 20 73 71 6c 69 74 65 33 47 65 74 54 6f 6b 65  t sqlite3GetToke
2c060 6e 28 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64  n(const unsigned
2c070 20 63 68 61 72 20 2a 2c 20 69 6e 74 20 2a 29 3b   char *, int *);
2c080 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4e 65 73  .void sqlite3Nes
2c090 74 65 64 50 61 72 73 65 28 50 61 72 73 65 2a 2c  tedParse(Parse*,
2c0a0 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 2e 2e   const char*, ..
2c0b0 2e 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  .);.void sqlite3
2c0c0 45 78 70 69 72 65 50 72 65 70 61 72 65 64 53 74  ExpirePreparedSt
2c0d0 61 74 65 6d 65 6e 74 73 28 73 71 6c 69 74 65 33  atements(sqlite3
2c0e0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 43  *);.int sqlite3C
2c0f0 6f 64 65 53 75 62 73 65 6c 65 63 74 28 50 61 72  odeSubselect(Par
2c100 73 65 2a 2c 20 45 78 70 72 20 2a 2c 20 69 6e 74  se*, Expr *, int
2c110 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
2c120 69 74 65 33 53 65 6c 65 63 74 50 72 65 70 28 50  ite3SelectPrep(P
2c130 61 72 73 65 2a 2c 20 53 65 6c 65 63 74 2a 2c 20  arse*, Select*, 
2c140 4e 61 6d 65 43 6f 6e 74 65 78 74 2a 29 3b 0a 76  NameContext*);.v
2c150 6f 69 64 20 73 71 6c 69 74 65 33 53 65 6c 65 63  oid sqlite3Selec
2c160 74 57 72 6f 6e 67 4e 75 6d 54 65 72 6d 73 45 72  tWrongNumTermsEr
2c170 72 6f 72 28 50 61 72 73 65 20 2a 70 50 61 72 73  ror(Parse *pPars
2c180 65 2c 20 53 65 6c 65 63 74 20 2a 70 29 3b 0a 69  e, Select *p);.i
2c190 6e 74 20 73 71 6c 69 74 65 33 4d 61 74 63 68 53  nt sqlite3MatchS
2c1a0 70 61 6e 4e 61 6d 65 28 63 6f 6e 73 74 20 63 68  panName(const ch
2c1b0 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  ar*, const char*
2c1c0 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63  , const char*, c
2c1d0 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 69 6e 74  onst char*);.int
2c1e0 20 73 71 6c 69 74 65 33 52 65 73 6f 6c 76 65 45   sqlite3ResolveE
2c1f0 78 70 72 4e 61 6d 65 73 28 4e 61 6d 65 43 6f 6e  xprNames(NameCon
2c200 74 65 78 74 2a 2c 20 45 78 70 72 2a 29 3b 0a 69  text*, Expr*);.i
2c210 6e 74 20 73 71 6c 69 74 65 33 52 65 73 6f 6c 76  nt sqlite3Resolv
2c220 65 45 78 70 72 4c 69 73 74 4e 61 6d 65 73 28 4e  eExprListNames(N
2c230 61 6d 65 43 6f 6e 74 65 78 74 2a 2c 20 45 78 70  ameContext*, Exp
2c240 72 4c 69 73 74 2a 29 3b 0a 76 6f 69 64 20 73 71  rList*);.void sq
2c250 6c 69 74 65 33 52 65 73 6f 6c 76 65 53 65 6c 65  lite3ResolveSele
2c260 63 74 4e 61 6d 65 73 28 50 61 72 73 65 2a 2c 20  ctNames(Parse*, 
2c270 53 65 6c 65 63 74 2a 2c 20 4e 61 6d 65 43 6f 6e  Select*, NameCon
2c280 74 65 78 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  text*);.void sql
2c290 69 74 65 33 52 65 73 6f 6c 76 65 53 65 6c 66 52  ite3ResolveSelfR
2c2a0 65 66 65 72 65 6e 63 65 28 50 61 72 73 65 2a 2c  eference(Parse*,
2c2b0 54 61 62 6c 65 2a 2c 69 6e 74 2c 45 78 70 72 2a  Table*,int,Expr*
2c2c0 2c 45 78 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74  ,ExprList*);.int
2c2d0 20 73 71 6c 69 74 65 33 52 65 73 6f 6c 76 65 4f   sqlite3ResolveO
2c2e0 72 64 65 72 47 72 6f 75 70 42 79 28 50 61 72 73  rderGroupBy(Pars
2c2f0 65 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 45 78 70  e*, Select*, Exp
2c300 72 4c 69 73 74 2a 2c 20 63 6f 6e 73 74 20 63 68  rList*, const ch
2c310 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  ar*);.void sqlit
2c320 65 33 43 6f 6c 75 6d 6e 44 65 66 61 75 6c 74 28  e3ColumnDefault(
2c330 56 64 62 65 20 2a 2c 20 54 61 62 6c 65 20 2a 2c  Vdbe *, Table *,
2c340 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64   int, int);.void
2c350 20 73 71 6c 69 74 65 33 41 6c 74 65 72 46 69 6e   sqlite3AlterFin
2c360 69 73 68 41 64 64 43 6f 6c 75 6d 6e 28 50 61 72  ishAddColumn(Par
2c370 73 65 20 2a 2c 20 54 6f 6b 65 6e 20 2a 29 3b 0a  se *, Token *);.
2c380 76 6f 69 64 20 73 71 6c 69 74 65 33 41 6c 74 65  void sqlite3Alte
2c390 72 42 65 67 69 6e 41 64 64 43 6f 6c 75 6d 6e 28  rBeginAddColumn(
2c3a0 50 61 72 73 65 20 2a 2c 20 53 72 63 4c 69 73 74  Parse *, SrcList
2c3b0 20 2a 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73 71   *);.CollSeq *sq
2c3c0 6c 69 74 65 33 47 65 74 43 6f 6c 6c 53 65 71 28  lite3GetCollSeq(
2c3d0 50 61 72 73 65 2a 2c 20 75 38 2c 20 43 6f 6c 6c  Parse*, u8, Coll
2c3e0 53 65 71 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61  Seq *, const cha
2c3f0 72 2a 29 3b 0a 63 68 61 72 20 73 71 6c 69 74 65  r*);.char sqlite
2c400 33 41 66 66 69 6e 69 74 79 54 79 70 65 28 63 6f  3AffinityType(co
2c410 6e 73 74 20 63 68 61 72 2a 2c 20 43 6f 6c 75 6d  nst char*, Colum
2c420 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  n*);.void sqlite
2c430 33 41 6e 61 6c 79 7a 65 28 50 61 72 73 65 2a 2c  3Analyze(Parse*,
2c440 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 29   Token*, Token*)
2c450 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 6e 76  ;.int sqlite3Inv
2c460 6f 6b 65 42 75 73 79 48 61 6e 64 6c 65 72 28 42  okeBusyHandler(B
2c470 75 73 79 48 61 6e 64 6c 65 72 2a 2c 20 73 71 6c  usyHandler*, sql
2c480 69 74 65 33 5f 66 69 6c 65 2a 29 3b 0a 69 6e 74  ite3_file*);.int
2c490 20 73 71 6c 69 74 65 33 46 69 6e 64 44 62 28 73   sqlite3FindDb(s
2c4a0 71 6c 69 74 65 33 2a 2c 20 54 6f 6b 65 6e 2a 29  qlite3*, Token*)
2c4b0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69 6e  ;.int sqlite3Fin
2c4c0 64 44 62 4e 61 6d 65 28 73 71 6c 69 74 65 33 20  dDbName(sqlite3 
2c4d0 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 29  *, const char *)
2c4e0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 41 6e 61  ;.int sqlite3Ana
2c4f0 6c 79 73 69 73 4c 6f 61 64 28 73 71 6c 69 74 65  lysisLoad(sqlite
2c500 33 2a 2c 69 6e 74 20 69 44 42 29 3b 0a 76 6f 69  3*,int iDB);.voi
2c510 64 20 73 71 6c 69 74 65 33 44 65 6c 65 74 65 49  d sqlite3DeleteI
2c520 6e 64 65 78 53 61 6d 70 6c 65 73 28 73 71 6c 69  ndexSamples(sqli
2c530 74 65 33 2a 2c 49 6e 64 65 78 2a 29 3b 0a 76 6f  te3*,Index*);.vo
2c540 69 64 20 73 71 6c 69 74 65 33 44 65 66 61 75 6c  id sqlite3Defaul
2c550 74 52 6f 77 45 73 74 28 49 6e 64 65 78 2a 29 3b  tRowEst(Index*);
2c560 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 67  .void sqlite3Reg
2c570 69 73 74 65 72 4c 69 6b 65 46 75 6e 63 74 69 6f  isterLikeFunctio
2c580 6e 73 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74  ns(sqlite3*, int
2c590 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 73  );.int sqlite3Is
2c5a0 4c 69 6b 65 46 75 6e 63 74 69 6f 6e 28 73 71 6c  LikeFunction(sql
2c5b0 69 74 65 33 2a 2c 45 78 70 72 2a 2c 69 6e 74 2a  ite3*,Expr*,int*
2c5c0 2c 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71  ,char*);.void sq
2c5d0 6c 69 74 65 33 53 63 68 65 6d 61 43 6c 65 61 72  lite3SchemaClear
2c5e0 28 76 6f 69 64 20 2a 29 3b 0a 53 63 68 65 6d 61  (void *);.Schema
2c5f0 20 2a 73 71 6c 69 74 65 33 53 63 68 65 6d 61 47   *sqlite3SchemaG
2c600 65 74 28 73 71 6c 69 74 65 33 20 2a 2c 20 42 74  et(sqlite3 *, Bt
2c610 72 65 65 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  ree *);.int sqli
2c620 74 65 33 53 63 68 65 6d 61 54 6f 49 6e 64 65 78  te3SchemaToIndex
2c630 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 53 63  (sqlite3 *db, Sc
2c640 68 65 6d 61 20 2a 29 3b 0a 4b 65 79 49 6e 66 6f  hema *);.KeyInfo
2c650 20 2a 73 71 6c 69 74 65 33 4b 65 79 49 6e 66 6f   *sqlite3KeyInfo
2c660 41 6c 6c 6f 63 28 73 71 6c 69 74 65 33 2a 2c 69  Alloc(sqlite3*,i
2c670 6e 74 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  nt,int);.void sq
2c680 6c 69 74 65 33 4b 65 79 49 6e 66 6f 55 6e 72 65  lite3KeyInfoUnre
2c690 66 28 4b 65 79 49 6e 66 6f 2a 29 3b 0a 4b 65 79  f(KeyInfo*);.Key
2c6a0 49 6e 66 6f 20 2a 73 71 6c 69 74 65 33 4b 65 79  Info *sqlite3Key
2c6b0 49 6e 66 6f 52 65 66 28 4b 65 79 49 6e 66 6f 2a  InfoRef(KeyInfo*
2c6c0 29 3b 0a 4b 65 79 49 6e 66 6f 20 2a 73 71 6c 69  );.KeyInfo *sqli
2c6d0 74 65 33 4b 65 79 49 6e 66 6f 4f 66 49 6e 64 65  te3KeyInfoOfInde
2c6e0 78 28 50 61 72 73 65 2a 2c 20 49 6e 64 65 78 2a  x(Parse*, Index*
2c6f0 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  );.#ifdef SQLITE
2c700 5f 44 45 42 55 47 0a 69 6e 74 20 73 71 6c 69 74  _DEBUG.int sqlit
2c710 65 33 4b 65 79 49 6e 66 6f 49 73 57 72 69 74 65  e3KeyInfoIsWrite
2c720 61 62 6c 65 28 4b 65 79 49 6e 66 6f 2a 29 3b 0a  able(KeyInfo*);.
2c730 23 65 6e 64 69 66 0a 69 6e 74 20 73 71 6c 69 74  #endif.int sqlit
2c740 65 33 43 72 65 61 74 65 46 75 6e 63 28 73 71 6c  e3CreateFunc(sql
2c750 69 74 65 33 20 2a 2c 20 63 6f 6e 73 74 20 63 68  ite3 *, const ch
2c760 61 72 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20  ar *, int, int, 
2c770 76 6f 69 64 20 2a 2c 0a 20 20 76 6f 69 64 20 28  void *,.  void (
2c780 2a 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65  *)(sqlite3_conte
2c790 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33 5f  xt*,int,sqlite3_
2c7a0 76 61 6c 75 65 20 2a 2a 29 2c 0a 20 20 76 6f 69  value **),.  voi
2c7b0 64 20 28 2a 29 28 73 71 6c 69 74 65 33 5f 63 6f  d (*)(sqlite3_co
2c7c0 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74  ntext*,int,sqlit
2c7d0 65 33 5f 76 61 6c 75 65 20 2a 2a 29 2c 20 76 6f  e3_value **), vo
2c7e0 69 64 20 28 2a 29 28 73 71 6c 69 74 65 33 5f 63  id (*)(sqlite3_c
2c7f0 6f 6e 74 65 78 74 2a 29 2c 0a 20 20 46 75 6e 63  ontext*),.  Func
2c800 44 65 73 74 72 75 63 74 6f 72 20 2a 70 44 65 73  Destructor *pDes
2c810 74 72 75 63 74 6f 72 0a 29 3b 0a 76 6f 69 64 20  tructor.);.void 
2c820 73 71 6c 69 74 65 33 4e 6f 6f 70 44 65 73 74 72  sqlite3NoopDestr
2c830 75 63 74 6f 72 28 76 6f 69 64 2a 29 3b 0a 76 6f  uctor(void*);.vo
2c840 69 64 20 73 71 6c 69 74 65 33 4f 6f 6d 46 61 75  id sqlite3OomFau
2c850 6c 74 28 73 71 6c 69 74 65 33 2a 29 3b 0a 76 6f  lt(sqlite3*);.vo
2c860 69 64 20 73 71 6c 69 74 65 33 4f 6f 6d 43 6c 65  id sqlite3OomCle
2c870 61 72 28 73 71 6c 69 74 65 33 2a 29 3b 0a 69 6e  ar(sqlite3*);.in
2c880 74 20 73 71 6c 69 74 65 33 41 70 69 45 78 69 74  t sqlite3ApiExit
2c890 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 69 6e  (sqlite3 *db, in
2c8a0 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4f  t);.int sqlite3O
2c8b0 70 65 6e 54 65 6d 70 44 61 74 61 62 61 73 65 28  penTempDatabase(
2c8c0 50 61 72 73 65 20 2a 29 3b 0a 0a 76 6f 69 64 20  Parse *);..void 
2c8d0 73 71 6c 69 74 65 33 53 74 72 41 63 63 75 6d 49  sqlite3StrAccumI
2c8e0 6e 69 74 28 53 74 72 41 63 63 75 6d 2a 2c 20 73  nit(StrAccum*, s
2c8f0 71 6c 69 74 65 33 2a 2c 20 63 68 61 72 2a 2c 20  qlite3*, char*, 
2c900 69 6e 74 2c 20 69 6e 74 29 3b 0a 63 68 61 72 20  int, int);.char 
2c910 2a 73 71 6c 69 74 65 33 53 74 72 41 63 63 75 6d  *sqlite3StrAccum
2c920 46 69 6e 69 73 68 28 53 74 72 41 63 63 75 6d 2a  Finish(StrAccum*
2c930 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53  );.void sqlite3S
2c940 65 6c 65 63 74 44 65 73 74 49 6e 69 74 28 53 65  electDestInit(Se
2c950 6c 65 63 74 44 65 73 74 2a 2c 69 6e 74 2c 69 6e  lectDest*,int,in
2c960 74 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65  t);.Expr *sqlite
2c970 33 43 72 65 61 74 65 43 6f 6c 75 6d 6e 45 78 70  3CreateColumnExp
2c980 72 28 73 71 6c 69 74 65 33 20 2a 2c 20 53 72 63  r(sqlite3 *, Src
2c990 4c 69 73 74 20 2a 2c 20 69 6e 74 2c 20 69 6e 74  List *, int, int
2c9a0 29 3b 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  );..void sqlite3
2c9b0 42 61 63 6b 75 70 52 65 73 74 61 72 74 28 73 71  BackupRestart(sq
2c9c0 6c 69 74 65 33 5f 62 61 63 6b 75 70 20 2a 29 3b  lite3_backup *);
2c9d0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42 61 63  .void sqlite3Bac
2c9e0 6b 75 70 55 70 64 61 74 65 28 73 71 6c 69 74 65  kupUpdate(sqlite
2c9f0 33 5f 62 61 63 6b 75 70 20 2a 2c 20 50 67 6e 6f  3_backup *, Pgno
2ca00 2c 20 63 6f 6e 73 74 20 75 38 20 2a 29 3b 0a 0a  , const u8 *);..
2ca10 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
2ca20 4d 49 54 5f 53 55 42 51 55 45 52 59 0a 69 6e 74  MIT_SUBQUERY.int
2ca30 20 73 71 6c 69 74 65 33 45 78 70 72 43 68 65 63   sqlite3ExprChec
2ca40 6b 49 4e 28 50 61 72 73 65 2a 2c 20 45 78 70 72  kIN(Parse*, Expr
2ca50 2a 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69  *);.#else.# defi
2ca60 6e 65 20 73 71 6c 69 74 65 33 45 78 70 72 43 68  ne sqlite3ExprCh
2ca70 65 63 6b 49 4e 28 78 2c 79 29 20 53 51 4c 49 54  eckIN(x,y) SQLIT
2ca80 45 5f 4f 4b 0a 23 65 6e 64 69 66 0a 0a 23 69 66  E_OK.#endif..#if
2ca90 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  def SQLITE_ENABL
2caa0 45 5f 53 54 41 54 33 5f 4f 52 5f 53 54 41 54 34  E_STAT3_OR_STAT4
2cab0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 6e 61  .void sqlite3Ana
2cac0 6c 79 7a 65 46 75 6e 63 74 69 6f 6e 73 28 76 6f  lyzeFunctions(vo
2cad0 69 64 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  id);.int sqlite3
2cae0 53 74 61 74 34 50 72 6f 62 65 53 65 74 56 61 6c  Stat4ProbeSetVal
2caf0 75 65 28 0a 20 20 20 20 50 61 72 73 65 2a 2c 49  ue(.    Parse*,I
2cb00 6e 64 65 78 2a 2c 55 6e 70 61 63 6b 65 64 52 65  ndex*,UnpackedRe
2cb10 63 6f 72 64 2a 2a 2c 45 78 70 72 2a 2c 69 6e 74  cord**,Expr*,int
2cb20 2c 69 6e 74 2c 69 6e 74 2a 29 3b 0a 69 6e 74 20  ,int,int*);.int 
2cb30 73 71 6c 69 74 65 33 53 74 61 74 34 56 61 6c 75  sqlite3Stat4Valu
2cb40 65 46 72 6f 6d 45 78 70 72 28 50 61 72 73 65 2a  eFromExpr(Parse*
2cb50 2c 20 45 78 70 72 2a 2c 20 75 38 2c 20 73 71 6c  , Expr*, u8, sql
2cb60 69 74 65 33 5f 76 61 6c 75 65 2a 2a 29 3b 0a 76  ite3_value**);.v
2cb70 6f 69 64 20 73 71 6c 69 74 65 33 53 74 61 74 34  oid sqlite3Stat4
2cb80 50 72 6f 62 65 46 72 65 65 28 55 6e 70 61 63 6b  ProbeFree(Unpack
2cb90 65 64 52 65 63 6f 72 64 2a 29 3b 0a 69 6e 74 20  edRecord*);.int 
2cba0 73 71 6c 69 74 65 33 53 74 61 74 34 43 6f 6c 75  sqlite3Stat4Colu
2cbb0 6d 6e 28 73 71 6c 69 74 65 33 2a 2c 20 63 6f 6e  mn(sqlite3*, con
2cbc0 73 74 20 76 6f 69 64 2a 2c 20 69 6e 74 2c 20 69  st void*, int, i
2cbd0 6e 74 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c 75  nt, sqlite3_valu
2cbe0 65 2a 2a 29 3b 0a 63 68 61 72 20 73 71 6c 69 74  e**);.char sqlit
2cbf0 65 33 49 6e 64 65 78 43 6f 6c 75 6d 6e 41 66 66  e3IndexColumnAff
2cc00 69 6e 69 74 79 28 73 71 6c 69 74 65 33 2a 2c 20  inity(sqlite3*, 
2cc10 49 6e 64 65 78 2a 2c 20 69 6e 74 29 3b 0a 23 65  Index*, int);.#e
2cc20 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  ndif../*.** The 
2cc30 69 6e 74 65 72 66 61 63 65 20 74 6f 20 74 68 65  interface to the
2cc40 20 4c 45 4d 4f 4e 2d 67 65 6e 65 72 61 74 65 64   LEMON-generated
2cc50 20 70 61 72 73 65 72 0a 2a 2f 0a 23 69 66 6e 64   parser.*/.#ifnd
2cc60 65 66 20 53 51 4c 49 54 45 5f 41 4d 41 4c 47 41  ef SQLITE_AMALGA
2cc70 4d 41 54 49 4f 4e 0a 20 20 76 6f 69 64 20 2a 73  MATION.  void *s
2cc80 71 6c 69 74 65 33 50 61 72 73 65 72 41 6c 6c 6f  qlite3ParserAllo
2cc90 63 28 76 6f 69 64 2a 28 2a 29 28 75 36 34 29 2c  c(void*(*)(u64),
2cca0 20 50 61 72 73 65 2a 29 3b 0a 20 20 76 6f 69 64   Parse*);.  void
2ccb0 20 73 71 6c 69 74 65 33 50 61 72 73 65 72 46 72   sqlite3ParserFr
2ccc0 65 65 28 76 6f 69 64 2a 2c 20 76 6f 69 64 28 2a  ee(void*, void(*
2ccd0 29 28 76 6f 69 64 2a 29 29 3b 0a 23 65 6e 64 69  )(void*));.#endi
2cce0 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50 61  f.void sqlite3Pa
2ccf0 72 73 65 72 28 76 6f 69 64 2a 2c 20 69 6e 74 2c  rser(void*, int,
2cd00 20 54 6f 6b 65 6e 29 3b 0a 23 69 66 64 65 66 20   Token);.#ifdef 
2cd10 59 59 54 52 41 43 4b 4d 41 58 53 54 41 43 4b 44  YYTRACKMAXSTACKD
2cd20 45 50 54 48 0a 20 20 69 6e 74 20 73 71 6c 69 74  EPTH.  int sqlit
2cd30 65 33 50 61 72 73 65 72 53 74 61 63 6b 50 65 61  e3ParserStackPea
2cd40 6b 28 76 6f 69 64 2a 29 3b 0a 23 65 6e 64 69 66  k(void*);.#endif
2cd50 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 75  ..void sqlite3Au
2cd60 74 6f 4c 6f 61 64 45 78 74 65 6e 73 69 6f 6e 73  toLoadExtensions
2cd70 28 73 71 6c 69 74 65 33 2a 29 3b 0a 23 69 66 6e  (sqlite3*);.#ifn
2cd80 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
2cd90 4c 4f 41 44 5f 45 58 54 45 4e 53 49 4f 4e 0a 20  LOAD_EXTENSION. 
2cda0 20 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6c 6f   void sqlite3Clo
2cdb0 73 65 45 78 74 65 6e 73 69 6f 6e 73 28 73 71 6c  seExtensions(sql
2cdc0 69 74 65 33 2a 29 3b 0a 23 65 6c 73 65 0a 23 20  ite3*);.#else.# 
2cdd0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 43 6c  define sqlite3Cl
2cde0 6f 73 65 45 78 74 65 6e 73 69 6f 6e 73 28 58 29  oseExtensions(X)
2cdf0 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66  .#endif..#ifndef
2ce00 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 48 41   SQLITE_OMIT_SHA
2ce10 52 45 44 5f 43 41 43 48 45 0a 20 20 76 6f 69 64  RED_CACHE.  void
2ce20 20 73 71 6c 69 74 65 33 54 61 62 6c 65 4c 6f 63   sqlite3TableLoc
2ce30 6b 28 50 61 72 73 65 20 2a 2c 20 69 6e 74 2c 20  k(Parse *, int, 
2ce40 69 6e 74 2c 20 75 38 2c 20 63 6f 6e 73 74 20 63  int, u8, const c
2ce50 68 61 72 20 2a 29 3b 0a 23 65 6c 73 65 0a 20 20  har *);.#else.  
2ce60 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54  #define sqlite3T
2ce70 61 62 6c 65 4c 6f 63 6b 28 76 2c 77 2c 78 2c 79  ableLock(v,w,x,y
2ce80 2c 7a 29 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64  ,z).#endif..#ifd
2ce90 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 20  ef SQLITE_TEST. 
2cea0 20 69 6e 74 20 73 71 6c 69 74 65 33 55 74 66 38   int sqlite3Utf8
2ceb0 54 6f 38 28 75 6e 73 69 67 6e 65 64 20 63 68 61  To8(unsigned cha
2cec0 72 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66  r*);.#endif..#if
2ced0 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
2cee0 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 23 20 20  VIRTUALTABLE.#  
2cef0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74  define sqlite3Vt
2cf00 61 62 43 6c 65 61 72 28 59 29 0a 23 20 20 64 65  abClear(Y).#  de
2cf10 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62  fine sqlite3Vtab
2cf20 53 79 6e 63 28 58 2c 59 29 20 53 51 4c 49 54 45  Sync(X,Y) SQLITE
2cf30 5f 4f 4b 0a 23 20 20 64 65 66 69 6e 65 20 73 71  _OK.#  define sq
2cf40 6c 69 74 65 33 56 74 61 62 52 6f 6c 6c 62 61 63  lite3VtabRollbac
2cf50 6b 28 58 29 0a 23 20 20 64 65 66 69 6e 65 20 73  k(X).#  define s
2cf60 71 6c 69 74 65 33 56 74 61 62 43 6f 6d 6d 69 74  qlite3VtabCommit
2cf70 28 58 29 0a 23 20 20 64 65 66 69 6e 65 20 73 71  (X).#  define sq
2cf80 6c 69 74 65 33 56 74 61 62 49 6e 53 79 6e 63 28  lite3VtabInSync(
2cf90 64 62 29 20 30 0a 23 20 20 64 65 66 69 6e 65 20  db) 0.#  define 
2cfa0 73 71 6c 69 74 65 33 56 74 61 62 4c 6f 63 6b 28  sqlite3VtabLock(
2cfb0 58 29 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c  X).#  define sql
2cfc0 69 74 65 33 56 74 61 62 55 6e 6c 6f 63 6b 28 58  ite3VtabUnlock(X
2cfd0 29 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69  ).#  define sqli
2cfe0 74 65 33 56 74 61 62 55 6e 6c 6f 63 6b 4c 69 73  te3VtabUnlockLis
2cff0 74 28 58 29 0a 23 20 20 64 65 66 69 6e 65 20 73  t(X).#  define s
2d000 71 6c 69 74 65 33 56 74 61 62 53 61 76 65 70 6f  qlite3VtabSavepo
2d010 69 6e 74 28 58 2c 20 59 2c 20 5a 29 20 53 51 4c  int(X, Y, Z) SQL
2d020 49 54 45 5f 4f 4b 0a 23 20 20 64 65 66 69 6e 65  ITE_OK.#  define
2d030 20 73 71 6c 69 74 65 33 47 65 74 56 54 61 62 6c   sqlite3GetVTabl
2d040 65 28 58 2c 59 29 20 20 28 28 56 54 61 62 6c 65  e(X,Y)  ((VTable
2d050 2a 29 30 29 0a 23 65 6c 73 65 0a 20 20 20 76 6f  *)0).#else.   vo
2d060 69 64 20 73 71 6c 69 74 65 33 56 74 61 62 43 6c  id sqlite3VtabCl
2d070 65 61 72 28 73 71 6c 69 74 65 33 20 2a 64 62 2c  ear(sqlite3 *db,
2d080 20 54 61 62 6c 65 2a 29 3b 0a 20 20 20 76 6f 69   Table*);.   voi
2d090 64 20 73 71 6c 69 74 65 33 56 74 61 62 44 69 73  d sqlite3VtabDis
2d0a0 63 6f 6e 6e 65 63 74 28 73 71 6c 69 74 65 33 20  connect(sqlite3 
2d0b0 2a 64 62 2c 20 54 61 62 6c 65 20 2a 70 29 3b 0a  *db, Table *p);.
2d0c0 20 20 20 69 6e 74 20 73 71 6c 69 74 65 33 56 74     int sqlite3Vt
2d0d0 61 62 53 79 6e 63 28 73 71 6c 69 74 65 33 20 2a  abSync(sqlite3 *
2d0e0 64 62 2c 20 56 64 62 65 2a 29 3b 0a 20 20 20 69  db, Vdbe*);.   i
2d0f0 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62 52 6f  nt sqlite3VtabRo
2d100 6c 6c 62 61 63 6b 28 73 71 6c 69 74 65 33 20 2a  llback(sqlite3 *
2d110 64 62 29 3b 0a 20 20 20 69 6e 74 20 73 71 6c 69  db);.   int sqli
2d120 74 65 33 56 74 61 62 43 6f 6d 6d 69 74 28 73 71  te3VtabCommit(sq
2d130 6c 69 74 65 33 20 2a 64 62 29 3b 0a 20 20 20 76  lite3 *db);.   v
2d140 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62 4c  oid sqlite3VtabL
2d150 6f 63 6b 28 56 54 61 62 6c 65 20 2a 29 3b 0a 20  ock(VTable *);. 
2d160 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74    void sqlite3Vt
2d170 61 62 55 6e 6c 6f 63 6b 28 56 54 61 62 6c 65 20  abUnlock(VTable 
2d180 2a 29 3b 0a 20 20 20 76 6f 69 64 20 73 71 6c 69  *);.   void sqli
2d190 74 65 33 56 74 61 62 55 6e 6c 6f 63 6b 4c 69 73  te3VtabUnlockLis
2d1a0 74 28 73 71 6c 69 74 65 33 2a 29 3b 0a 20 20 20  t(sqlite3*);.   
2d1b0 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62 53  int sqlite3VtabS
2d1c0 61 76 65 70 6f 69 6e 74 28 73 71 6c 69 74 65 33  avepoint(sqlite3
2d1d0 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 20   *, int, int);. 
2d1e0 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74    void sqlite3Vt
2d1f0 61 62 49 6d 70 6f 72 74 45 72 72 6d 73 67 28 56  abImportErrmsg(V
2d200 64 62 65 2a 2c 20 73 71 6c 69 74 65 33 5f 76 74  dbe*, sqlite3_vt
2d210 61 62 2a 29 3b 0a 20 20 20 56 54 61 62 6c 65 20  ab*);.   VTable 
2d220 2a 73 71 6c 69 74 65 33 47 65 74 56 54 61 62 6c  *sqlite3GetVTabl
2d230 65 28 73 71 6c 69 74 65 33 2a 2c 20 54 61 62 6c  e(sqlite3*, Tabl
2d240 65 2a 29 3b 0a 20 20 20 4d 6f 64 75 6c 65 20 2a  e*);.   Module *
2d250 73 71 6c 69 74 65 33 56 74 61 62 43 72 65 61 74  sqlite3VtabCreat
2d260 65 4d 6f 64 75 6c 65 28 0a 20 20 20 20 20 73 71  eModule(.     sq
2d270 6c 69 74 65 33 2a 2c 0a 20 20 20 20 20 63 6f 6e  lite3*,.     con
2d280 73 74 20 63 68 61 72 2a 2c 0a 20 20 20 20 20 63  st char*,.     c
2d290 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d 6f 64  onst sqlite3_mod
2d2a0 75 6c 65 2a 2c 0a 20 20 20 20 20 76 6f 69 64 2a  ule*,.     void*
2d2b0 2c 0a 20 20 20 20 20 76 6f 69 64 28 2a 29 28 76  ,.     void(*)(v
2d2c0 6f 69 64 2a 29 0a 20 20 20 29 3b 0a 23 20 20 64  oid*).   );.#  d
2d2d0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61  efine sqlite3Vta
2d2e0 62 49 6e 53 79 6e 63 28 64 62 29 20 28 28 64 62  bInSync(db) ((db
2d2f0 29 2d 3e 6e 56 54 72 61 6e 73 3e 30 20 26 26 20  )->nVTrans>0 && 
2d300 28 64 62 29 2d 3e 61 56 54 72 61 6e 73 3d 3d 30  (db)->aVTrans==0
2d310 29 0a 23 65 6e 64 69 66 0a 69 6e 74 20 73 71 6c  ).#endif.int sql
2d320 69 74 65 33 56 74 61 62 45 70 6f 6e 79 6d 6f 75  ite3VtabEponymou
2d330 73 54 61 62 6c 65 49 6e 69 74 28 50 61 72 73 65  sTableInit(Parse
2d340 2a 2c 4d 6f 64 75 6c 65 2a 29 3b 0a 76 6f 69 64  *,Module*);.void
2d350 20 73 71 6c 69 74 65 33 56 74 61 62 45 70 6f 6e   sqlite3VtabEpon
2d360 79 6d 6f 75 73 54 61 62 6c 65 43 6c 65 61 72 28  ymousTableClear(
2d370 73 71 6c 69 74 65 33 2a 2c 4d 6f 64 75 6c 65 2a  sqlite3*,Module*
2d380 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56  );.void sqlite3V
2d390 74 61 62 4d 61 6b 65 57 72 69 74 61 62 6c 65 28  tabMakeWritable(
2d3a0 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a 29 3b 0a  Parse*,Table*);.
2d3b0 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62  void sqlite3Vtab
2d3c0 42 65 67 69 6e 50 61 72 73 65 28 50 61 72 73 65  BeginParse(Parse
2d3d0 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e  *, Token*, Token
2d3e0 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 69 6e 74 29 3b  *, Token*, int);
2d3f0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61  .void sqlite3Vta
2d400 62 46 69 6e 69 73 68 50 61 72 73 65 28 50 61 72  bFinishParse(Par
2d410 73 65 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f  se*, Token*);.vo
2d420 69 64 20 73 71 6c 69 74 65 33 56 74 61 62 41 72  id sqlite3VtabAr
2d430 67 49 6e 69 74 28 50 61 72 73 65 2a 29 3b 0a 76  gInit(Parse*);.v
2d440 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62 41  oid sqlite3VtabA
2d450 72 67 45 78 74 65 6e 64 28 50 61 72 73 65 2a 2c  rgExtend(Parse*,
2d460 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71   Token*);.int sq
2d470 6c 69 74 65 33 56 74 61 62 43 61 6c 6c 43 72 65  lite3VtabCallCre
2d480 61 74 65 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e  ate(sqlite3*, in
2d490 74 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c  t, const char *,
2d4a0 20 63 68 61 72 20 2a 2a 29 3b 0a 69 6e 74 20 73   char **);.int s
2d4b0 71 6c 69 74 65 33 56 74 61 62 43 61 6c 6c 43 6f  qlite3VtabCallCo
2d4c0 6e 6e 65 63 74 28 50 61 72 73 65 2a 2c 20 54 61  nnect(Parse*, Ta
2d4d0 62 6c 65 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ble*);.int sqlit
2d4e0 65 33 56 74 61 62 43 61 6c 6c 44 65 73 74 72 6f  e3VtabCallDestro
2d4f0 79 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74 2c  y(sqlite3*, int,
2d500 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 29 3b 0a   const char *);.
2d510 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62 42  int sqlite3VtabB
2d520 65 67 69 6e 28 73 71 6c 69 74 65 33 20 2a 2c 20  egin(sqlite3 *, 
2d530 56 54 61 62 6c 65 20 2a 29 3b 0a 46 75 6e 63 44  VTable *);.FuncD
2d540 65 66 20 2a 73 71 6c 69 74 65 33 56 74 61 62 4f  ef *sqlite3VtabO
2d550 76 65 72 6c 6f 61 64 46 75 6e 63 74 69 6f 6e 28  verloadFunction(
2d560 73 71 6c 69 74 65 33 20 2a 2c 46 75 6e 63 44 65  sqlite3 *,FuncDe
2d570 66 2a 2c 20 69 6e 74 20 6e 41 72 67 2c 20 45 78  f*, int nArg, Ex
2d580 70 72 2a 29 3b 0a 73 71 6c 69 74 65 33 5f 69 6e  pr*);.sqlite3_in
2d590 74 36 34 20 73 71 6c 69 74 65 33 53 74 6d 74 43  t64 sqlite3StmtC
2d5a0 75 72 72 65 6e 74 54 69 6d 65 28 73 71 6c 69 74  urrentTime(sqlit
2d5b0 65 33 5f 63 6f 6e 74 65 78 74 2a 29 3b 0a 69 6e  e3_context*);.in
2d5c0 74 20 73 71 6c 69 74 65 33 56 64 62 65 50 61 72  t sqlite3VdbePar
2d5d0 61 6d 65 74 65 72 49 6e 64 65 78 28 56 64 62 65  ameterIndex(Vdbe
2d5e0 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  *, const char*, 
2d5f0 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  int);.int sqlite
2d600 33 54 72 61 6e 73 66 65 72 42 69 6e 64 69 6e 67  3TransferBinding
2d610 73 28 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a  s(sqlite3_stmt *
2d620 2c 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a  , sqlite3_stmt *
2d630 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50  );.void sqlite3P
2d640 61 72 73 65 72 52 65 73 65 74 28 50 61 72 73 65  arserReset(Parse
2d650 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52  *);.int sqlite3R
2d660 65 70 72 65 70 61 72 65 28 56 64 62 65 2a 29 3b  eprepare(Vdbe*);
2d670 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
2d680 72 4c 69 73 74 43 68 65 63 6b 4c 65 6e 67 74 68  rListCheckLength
2d690 28 50 61 72 73 65 2a 2c 20 45 78 70 72 4c 69 73  (Parse*, ExprLis
2d6a0 74 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29  t*, const char*)
2d6b0 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73 71 6c 69 74  ;.CollSeq *sqlit
2d6c0 65 33 42 69 6e 61 72 79 43 6f 6d 70 61 72 65 43  e3BinaryCompareC
2d6d0 6f 6c 6c 53 65 71 28 50 61 72 73 65 20 2a 2c 20  ollSeq(Parse *, 
2d6e0 45 78 70 72 20 2a 2c 20 45 78 70 72 20 2a 29 3b  Expr *, Expr *);
2d6f0 0a 69 6e 74 20 73 71 6c 69 74 65 33 54 65 6d 70  .int sqlite3Temp
2d700 49 6e 4d 65 6d 6f 72 79 28 63 6f 6e 73 74 20 73  InMemory(const s
2d710 71 6c 69 74 65 33 2a 29 3b 0a 63 6f 6e 73 74 20  qlite3*);.const 
2d720 63 68 61 72 20 2a 73 71 6c 69 74 65 33 4a 6f 75  char *sqlite3Jou
2d730 72 6e 61 6c 4d 6f 64 65 6e 61 6d 65 28 69 6e 74  rnalModename(int
2d740 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  );.#ifndef SQLIT
2d750 45 5f 4f 4d 49 54 5f 57 41 4c 0a 20 20 69 6e 74  E_OMIT_WAL.  int
2d760 20 73 71 6c 69 74 65 33 43 68 65 63 6b 70 6f 69   sqlite3Checkpoi
2d770 6e 74 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74  nt(sqlite3*, int
2d780 2c 20 69 6e 74 2c 20 69 6e 74 2a 2c 20 69 6e 74  , int, int*, int
2d790 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65  *);.  int sqlite
2d7a0 33 57 61 6c 44 65 66 61 75 6c 74 48 6f 6f 6b 28  3WalDefaultHook(
2d7b0 76 6f 69 64 2a 2c 73 71 6c 69 74 65 33 2a 2c 63  void*,sqlite3*,c
2d7c0 6f 6e 73 74 20 63 68 61 72 2a 2c 69 6e 74 29 3b  onst char*,int);
2d7d0 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20  .#endif.#ifndef 
2d7e0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 54 45 0a  SQLITE_OMIT_CTE.
2d7f0 20 20 57 69 74 68 20 2a 73 71 6c 69 74 65 33 57    With *sqlite3W
2d800 69 74 68 41 64 64 28 50 61 72 73 65 2a 2c 57 69  ithAdd(Parse*,Wi
2d810 74 68 2a 2c 54 6f 6b 65 6e 2a 2c 45 78 70 72 4c  th*,Token*,ExprL
2d820 69 73 74 2a 2c 53 65 6c 65 63 74 2a 29 3b 0a 20  ist*,Select*);. 
2d830 20 76 6f 69 64 20 73 71 6c 69 74 65 33 57 69 74   void sqlite3Wit
2d840 68 44 65 6c 65 74 65 28 73 71 6c 69 74 65 33 2a  hDelete(sqlite3*
2d850 2c 57 69 74 68 2a 29 3b 0a 20 20 76 6f 69 64 20  ,With*);.  void 
2d860 73 71 6c 69 74 65 33 57 69 74 68 50 75 73 68 28  sqlite3WithPush(
2d870 50 61 72 73 65 2a 2c 20 57 69 74 68 2a 2c 20 75  Parse*, With*, u
2d880 38 29 3b 0a 23 65 6c 73 65 0a 23 64 65 66 69 6e  8);.#else.#defin
2d890 65 20 73 71 6c 69 74 65 33 57 69 74 68 50 75 73  e sqlite3WithPus
2d8a0 68 28 78 2c 79 2c 7a 29 0a 23 64 65 66 69 6e 65  h(x,y,z).#define
2d8b0 20 73 71 6c 69 74 65 33 57 69 74 68 44 65 6c 65   sqlite3WithDele
2d8c0 74 65 28 78 2c 79 29 0a 23 65 6e 64 69 66 0a 23  te(x,y).#endif.#
2d8d0 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
2d8e0 49 54 5f 55 50 53 45 52 54 0a 20 20 55 70 73 65  IT_UPSERT.  Upse
2d8f0 72 74 20 2a 73 71 6c 69 74 65 33 55 70 73 65 72  rt *sqlite3Upser
2d900 74 4e 65 77 28 73 71 6c 69 74 65 33 2a 2c 45 78  tNew(sqlite3*,Ex
2d910 70 72 4c 69 73 74 2a 2c 45 78 70 72 2a 2c 45 78  prList*,Expr*,Ex
2d920 70 72 4c 69 73 74 2a 2c 45 78 70 72 2a 29 3b 0a  prList*,Expr*);.
2d930 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 55 70    void sqlite3Up
2d940 73 65 72 74 44 65 6c 65 74 65 28 73 71 6c 69 74  sertDelete(sqlit
2d950 65 33 2a 2c 55 70 73 65 72 74 2a 29 3b 0a 20 20  e3*,Upsert*);.  
2d960 55 70 73 65 72 74 20 2a 73 71 6c 69 74 65 33 55  Upsert *sqlite3U
2d970 70 73 65 72 74 44 75 70 28 73 71 6c 69 74 65 33  psertDup(sqlite3
2d980 2a 2c 55 70 73 65 72 74 2a 29 3b 0a 20 20 69 6e  *,Upsert*);.  in
2d990 74 20 73 71 6c 69 74 65 33 55 70 73 65 72 74 41  t sqlite3UpsertA
2d9a0 6e 61 6c 79 7a 65 54 61 72 67 65 74 28 50 61 72  nalyzeTarget(Par
2d9b0 73 65 2a 2c 53 72 63 4c 69 73 74 2a 2c 55 70 73  se*,SrcList*,Ups
2d9c0 65 72 74 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71  ert*);.  void sq
2d9d0 6c 69 74 65 33 55 70 73 65 72 74 44 6f 55 70 64  lite3UpsertDoUpd
2d9e0 61 74 65 28 50 61 72 73 65 2a 2c 55 70 73 65 72  ate(Parse*,Upser
2d9f0 74 2a 2c 54 61 62 6c 65 2a 2c 49 6e 64 65 78 2a  t*,Table*,Index*
2da00 2c 69 6e 74 29 3b 0a 23 65 6c 73 65 0a 23 64 65  ,int);.#else.#de
2da10 66 69 6e 65 20 73 71 6c 69 74 65 33 55 70 73 65  fine sqlite3Upse
2da20 72 74 4e 65 77 28 76 2c 77 2c 78 2c 79 2c 7a 29  rtNew(v,w,x,y,z)
2da30 20 28 28 55 70 73 65 72 74 2a 29 30 29 0a 23 64   ((Upsert*)0).#d
2da40 65 66 69 6e 65 20 73 71 6c 69 74 65 33 55 70 73  efine sqlite3Ups
2da50 65 72 74 44 65 6c 65 74 65 28 78 2c 79 29 0a 23  ertDelete(x,y).#
2da60 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 55 70  define sqlite3Up
2da70 73 65 72 74 44 75 70 28 78 2c 79 29 20 20 20 20  sertDup(x,y)    
2da80 20 20 20 28 28 55 70 73 65 72 74 2a 29 30 29 0a     ((Upsert*)0).
2da90 23 65 6e 64 69 66 0a 0a 0a 2f 2a 20 44 65 63 6c  #endif.../* Decl
2daa0 61 72 61 74 69 6f 6e 73 20 66 6f 72 20 66 75 6e  arations for fun
2dab0 63 74 69 6f 6e 73 20 69 6e 20 66 6b 65 79 2e 63  ctions in fkey.c
2dac0 2e 20 41 6c 6c 20 6f 66 20 74 68 65 73 65 20 61  . All of these a
2dad0 72 65 20 72 65 70 6c 61 63 65 64 20 62 79 0a 2a  re replaced by.*
2dae0 2a 20 6e 6f 2d 6f 70 20 6d 61 63 72 6f 73 20 69  * no-op macros i
2daf0 66 20 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b  f OMIT_FOREIGN_K
2db00 45 59 20 69 73 20 64 65 66 69 6e 65 64 2e 20 49  EY is defined. I
2db10 6e 20 74 68 69 73 20 63 61 73 65 20 6e 6f 20 66  n this case no f
2db20 6f 72 65 69 67 6e 0a 2a 2a 20 6b 65 79 20 66 75  oreign.** key fu
2db30 6e 63 74 69 6f 6e 61 6c 69 74 79 20 69 73 20 61  nctionality is a
2db40 76 61 69 6c 61 62 6c 65 2e 20 49 66 20 4f 4d 49  vailable. If OMI
2db50 54 5f 54 52 49 47 47 45 52 20 69 73 20 64 65 66  T_TRIGGER is def
2db60 69 6e 65 64 20 62 75 74 0a 2a 2a 20 4f 4d 49 54  ined but.** OMIT
2db70 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 20 69 73 20  _FOREIGN_KEY is 
2db80 6e 6f 74 2c 20 6f 6e 6c 79 20 73 6f 6d 65 20 6f  not, only some o
2db90 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 73 20  f the functions 
2dba0 61 72 65 20 6e 6f 2d 6f 70 65 64 2e 20 49 6e 0a  are no-oped. In.
2dbb0 2a 2a 20 74 68 69 73 20 63 61 73 65 20 66 6f 72  ** this case for
2dbc0 65 69 67 6e 20 6b 65 79 73 20 61 72 65 20 70 61  eign keys are pa
2dbd0 72 73 65 64 2c 20 62 75 74 20 6e 6f 20 6f 74 68  rsed, but no oth
2dbe0 65 72 20 66 75 6e 63 74 69 6f 6e 61 6c 69 74 79  er functionality
2dbf0 20 69 73 0a 2a 2a 20 70 72 6f 76 69 64 65 64 20   is.** provided 
2dc00 28 65 6e 66 6f 72 63 65 6d 65 6e 74 20 6f 66 20  (enforcement of 
2dc10 46 4b 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 72  FK constraints r
2dc20 65 71 75 69 72 65 73 20 74 68 65 20 74 72 69 67  equires the trig
2dc30 67 65 72 73 20 73 75 62 2d 73 79 73 74 65 6d 29  gers sub-system)
2dc40 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e 65  ..*/.#if !define
2dc50 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f  d(SQLITE_OMIT_FO
2dc60 52 45 49 47 4e 5f 4b 45 59 29 20 26 26 20 21 64  REIGN_KEY) && !d
2dc70 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d  efined(SQLITE_OM
2dc80 49 54 5f 54 52 49 47 47 45 52 29 0a 20 20 76 6f  IT_TRIGGER).  vo
2dc90 69 64 20 73 71 6c 69 74 65 33 46 6b 43 68 65 63  id sqlite3FkChec
2dca0 6b 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a  k(Parse*, Table*
2dcb0 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 2a  , int, int, int*
2dcc0 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20 73  , int);.  void s
2dcd0 71 6c 69 74 65 33 46 6b 44 72 6f 70 54 61 62 6c  qlite3FkDropTabl
2dce0 65 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73  e(Parse*, SrcLis
2dcf0 74 20 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a 20 20  t *, Table*);.  
2dd00 76 6f 69 64 20 73 71 6c 69 74 65 33 46 6b 41 63  void sqlite3FkAc
2dd10 74 69 6f 6e 73 28 50 61 72 73 65 2a 2c 20 54 61  tions(Parse*, Ta
2dd20 62 6c 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c  ble*, ExprList*,
2dd30 20 69 6e 74 2c 20 69 6e 74 2a 2c 20 69 6e 74 29   int, int*, int)
2dd40 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 46  ;.  int sqlite3F
2dd50 6b 52 65 71 75 69 72 65 64 28 50 61 72 73 65 2a  kRequired(Parse*
2dd60 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2a 2c 20  , Table*, int*, 
2dd70 69 6e 74 29 3b 0a 20 20 75 33 32 20 73 71 6c 69  int);.  u32 sqli
2dd80 74 65 33 46 6b 4f 6c 64 6d 61 73 6b 28 50 61 72  te3FkOldmask(Par
2dd90 73 65 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a 20 20  se*, Table*);.  
2dda0 46 4b 65 79 20 2a 73 71 6c 69 74 65 33 46 6b 52  FKey *sqlite3FkR
2ddb0 65 66 65 72 65 6e 63 65 73 28 54 61 62 6c 65 20  eferences(Table 
2ddc0 2a 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65 66  *);.#else.  #def
2ddd0 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 41 63 74  ine sqlite3FkAct
2dde0 69 6f 6e 73 28 61 2c 62 2c 63 2c 64 2c 65 2c 66  ions(a,b,c,d,e,f
2ddf0 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69  ).  #define sqli
2de00 74 65 33 46 6b 43 68 65 63 6b 28 61 2c 62 2c 63  te3FkCheck(a,b,c
2de10 2c 64 2c 65 2c 66 29 0a 20 20 23 64 65 66 69 6e  ,d,e,f).  #defin
2de20 65 20 73 71 6c 69 74 65 33 46 6b 44 72 6f 70 54  e sqlite3FkDropT
2de30 61 62 6c 65 28 61 2c 62 2c 63 29 0a 20 20 23 64  able(a,b,c).  #d
2de40 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 4f  efine sqlite3FkO
2de50 6c 64 6d 61 73 6b 28 61 2c 62 29 20 20 20 20 20  ldmask(a,b)     
2de60 20 20 20 20 30 0a 20 20 23 64 65 66 69 6e 65 20      0.  #define 
2de70 73 71 6c 69 74 65 33 46 6b 52 65 71 75 69 72 65  sqlite3FkRequire
2de80 64 28 61 2c 62 2c 63 2c 64 29 20 20 20 20 30 0a  d(a,b,c,d)    0.
2de90 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65    #define sqlite
2dea0 33 46 6b 52 65 66 65 72 65 6e 63 65 73 28 61 29  3FkReferences(a)
2deb0 20 20 20 20 20 20 20 20 30 0a 23 65 6e 64 69 66          0.#endif
2dec0 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
2ded0 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59  OMIT_FOREIGN_KEY
2dee0 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 46  .  void sqlite3F
2def0 6b 44 65 6c 65 74 65 28 73 71 6c 69 74 65 33 20  kDelete(sqlite3 
2df00 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a 20 20 69 6e  *, Table*);.  in
2df10 74 20 73 71 6c 69 74 65 33 46 6b 4c 6f 63 61 74  t sqlite3FkLocat
2df20 65 49 6e 64 65 78 28 50 61 72 73 65 2a 2c 54 61  eIndex(Parse*,Ta
2df30 62 6c 65 2a 2c 46 4b 65 79 2a 2c 49 6e 64 65 78  ble*,FKey*,Index
2df40 2a 2a 2c 69 6e 74 2a 2a 29 3b 0a 23 65 6c 73 65  **,int**);.#else
2df50 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74  .  #define sqlit
2df60 65 33 46 6b 44 65 6c 65 74 65 28 61 2c 62 29 0a  e3FkDelete(a,b).
2df70 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65    #define sqlite
2df80 33 46 6b 4c 6f 63 61 74 65 49 6e 64 65 78 28 61  3FkLocateIndex(a
2df90 2c 62 2c 63 2c 64 2c 65 29 0a 23 65 6e 64 69 66  ,b,c,d,e).#endif
2dfa0 0a 0a 0a 2f 2a 0a 2a 2a 20 41 76 61 69 6c 61 62  .../*.** Availab
2dfb0 6c 65 20 66 61 75 6c 74 20 69 6e 6a 65 63 74 6f  le fault injecto
2dfc0 72 73 2e 20 20 53 68 6f 75 6c 64 20 62 65 20 6e  rs.  Should be n
2dfd0 75 6d 62 65 72 65 64 20 62 65 67 69 6e 6e 69 6e  umbered beginnin
2dfe0 67 20 77 69 74 68 20 30 2e 0a 2a 2f 0a 23 64 65  g with 0..*/.#de
2dff0 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 41 55 4c  fine SQLITE_FAUL
2e000 54 49 4e 4a 45 43 54 4f 52 5f 4d 41 4c 4c 4f 43  TINJECTOR_MALLOC
2e010 20 20 20 20 20 30 0a 23 64 65 66 69 6e 65 20 53       0.#define S
2e020 51 4c 49 54 45 5f 46 41 55 4c 54 49 4e 4a 45 43  QLITE_FAULTINJEC
2e030 54 4f 52 5f 43 4f 55 4e 54 20 20 20 20 20 20 31  TOR_COUNT      1
2e040 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 69 6e 74 65  ../*.** The inte
2e050 72 66 61 63 65 20 74 6f 20 74 68 65 20 63 6f 64  rface to the cod
2e060 65 20 69 6e 20 66 61 75 6c 74 2e 63 20 75 73 65  e in fault.c use
2e070 64 20 66 6f 72 20 69 64 65 6e 74 69 66 79 69 6e  d for identifyin
2e080 67 20 22 62 65 6e 69 67 6e 22 0a 2a 2a 20 6d 61  g "benign".** ma
2e090 6c 6c 6f 63 20 66 61 69 6c 75 72 65 73 2e 20 54  lloc failures. T
2e0a0 68 69 73 20 69 73 20 6f 6e 6c 79 20 70 72 65 73  his is only pres
2e0b0 65 6e 74 20 69 66 20 53 51 4c 49 54 45 5f 55 4e  ent if SQLITE_UN
2e0c0 54 45 53 54 41 42 4c 45 0a 2a 2a 20 69 73 20 6e  TESTABLE.** is n
2e0d0 6f 74 20 64 65 66 69 6e 65 64 2e 0a 2a 2f 0a 23  ot defined..*/.#
2e0e0 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 55 4e  ifndef SQLITE_UN
2e0f0 54 45 53 54 41 42 4c 45 0a 20 20 76 6f 69 64 20  TESTABLE.  void 
2e100 73 71 6c 69 74 65 33 42 65 67 69 6e 42 65 6e 69  sqlite3BeginBeni
2e110 67 6e 4d 61 6c 6c 6f 63 28 76 6f 69 64 29 3b 0a  gnMalloc(void);.
2e120 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 45 6e    void sqlite3En
2e130 64 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28 76 6f  dBenignMalloc(vo
2e140 69 64 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65  id);.#else.  #de
2e150 66 69 6e 65 20 73 71 6c 69 74 65 33 42 65 67 69  fine sqlite3Begi
2e160 6e 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28 29 0a  nBenignMalloc().
2e170 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65    #define sqlite
2e180 33 45 6e 64 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63  3EndBenignMalloc
2e190 28 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  ().#endif../*.**
2e1a0 20 41 6c 6c 6f 77 65 64 20 72 65 74 75 72 6e 20   Allowed return 
2e1b0 76 61 6c 75 65 73 20 66 72 6f 6d 20 73 71 6c 69  values from sqli
2e1c0 74 65 33 46 69 6e 64 49 6e 49 6e 64 65 78 28 29  te3FindInIndex()
2e1d0 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49  .*/.#define IN_I
2e1e0 4e 44 45 58 5f 52 4f 57 49 44 20 20 20 20 20 20  NDEX_ROWID      
2e1f0 20 20 31 20 20 20 2f 2a 20 53 65 61 72 63 68 20    1   /* Search 
2e200 74 68 65 20 72 6f 77 69 64 20 6f 66 20 74 68 65  the rowid of the
2e210 20 74 61 62 6c 65 20 2a 2f 0a 23 64 65 66 69 6e   table */.#defin
2e220 65 20 49 4e 5f 49 4e 44 45 58 5f 45 50 48 20 20  e IN_INDEX_EPH  
2e230 20 20 20 20 20 20 20 20 32 20 20 20 2f 2a 20 53          2   /* S
2e240 65 61 72 63 68 20 61 6e 20 65 70 68 65 6d 65 72  earch an ephemer
2e250 61 6c 20 62 2d 74 72 65 65 20 2a 2f 0a 23 64 65  al b-tree */.#de
2e260 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 49 4e  fine IN_INDEX_IN
2e270 44 45 58 5f 41 53 43 20 20 20 20 33 20 20 20 2f  DEX_ASC    3   /
2e280 2a 20 45 78 69 73 74 69 6e 67 20 69 6e 64 65 78  * Existing index
2e290 20 41 53 43 45 4e 44 49 4e 47 20 2a 2f 0a 23 64   ASCENDING */.#d
2e2a0 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 49  efine IN_INDEX_I
2e2b0 4e 44 45 58 5f 44 45 53 43 20 20 20 34 20 20 20  NDEX_DESC   4   
2e2c0 2f 2a 20 45 78 69 73 74 69 6e 67 20 69 6e 64 65  /* Existing inde
2e2d0 78 20 44 45 53 43 45 4e 44 49 4e 47 20 2a 2f 0a  x DESCENDING */.
2e2e0 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58  #define IN_INDEX
2e2f0 5f 4e 4f 4f 50 20 20 20 20 20 20 20 20 20 35 20  _NOOP         5 
2e300 20 20 2f 2a 20 4e 6f 20 74 61 62 6c 65 20 61 76    /* No table av
2e310 61 69 6c 61 62 6c 65 2e 20 55 73 65 20 63 6f 6d  ailable. Use com
2e320 70 61 72 69 73 6f 6e 73 20 2a 2f 0a 2f 2a 0a 2a  parisons */./*.*
2e330 2a 20 41 6c 6c 6f 77 65 64 20 66 6c 61 67 73 20  * Allowed flags 
2e340 66 6f 72 20 74 68 65 20 33 72 64 20 70 61 72 61  for the 3rd para
2e350 6d 65 74 65 72 20 74 6f 20 73 71 6c 69 74 65 33  meter to sqlite3
2e360 46 69 6e 64 49 6e 49 6e 64 65 78 28 29 2e 0a 2a  FindInIndex()..*
2e370 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44  /.#define IN_IND
2e380 45 58 5f 4e 4f 4f 50 5f 4f 4b 20 20 20 20 20 30  EX_NOOP_OK     0
2e390 78 30 30 30 31 20 20 2f 2a 20 4f 4b 20 74 6f 20  x0001  /* OK to 
2e3a0 72 65 74 75 72 6e 20 49 4e 5f 49 4e 44 45 58 5f  return IN_INDEX_
2e3b0 4e 4f 4f 50 20 2a 2f 0a 23 64 65 66 69 6e 65 20  NOOP */.#define 
2e3c0 49 4e 5f 49 4e 44 45 58 5f 4d 45 4d 42 45 52 53  IN_INDEX_MEMBERS
2e3d0 48 49 50 20 20 30 78 30 30 30 32 20 20 2f 2a 20  HIP  0x0002  /* 
2e3e0 49 4e 20 6f 70 65 72 61 74 6f 72 20 75 73 65 64  IN operator used
2e3f0 20 66 6f 72 20 6d 65 6d 62 65 72 73 68 69 70 20   for membership 
2e400 74 65 73 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20  test */.#define 
2e410 49 4e 5f 49 4e 44 45 58 5f 4c 4f 4f 50 20 20 20  IN_INDEX_LOOP   
2e420 20 20 20 20 20 30 78 30 30 30 34 20 20 2f 2a 20       0x0004  /* 
2e430 49 4e 20 6f 70 65 72 61 74 6f 72 20 75 73 65 64  IN operator used
2e440 20 61 73 20 61 20 6c 6f 6f 70 20 2a 2f 0a 69 6e   as a loop */.in
2e450 74 20 73 71 6c 69 74 65 33 46 69 6e 64 49 6e 49  t sqlite3FindInI
2e460 6e 64 65 78 28 50 61 72 73 65 20 2a 2c 20 45 78  ndex(Parse *, Ex
2e470 70 72 20 2a 2c 20 75 33 32 2c 20 69 6e 74 2a 2c  pr *, u32, int*,
2e480 20 69 6e 74 2a 29 3b 0a 0a 69 6e 74 20 73 71 6c   int*);..int sql
2e490 69 74 65 33 4a 6f 75 72 6e 61 6c 4f 70 65 6e 28  ite3JournalOpen(
2e4a0 73 71 6c 69 74 65 33 5f 76 66 73 20 2a 2c 20 63  sqlite3_vfs *, c
2e4b0 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20 73 71 6c  onst char *, sql
2e4c0 69 74 65 33 5f 66 69 6c 65 20 2a 2c 20 69 6e 74  ite3_file *, int
2e4d0 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69  , int);.int sqli
2e4e0 74 65 33 4a 6f 75 72 6e 61 6c 53 69 7a 65 28 73  te3JournalSize(s
2e4f0 71 6c 69 74 65 33 5f 76 66 73 20 2a 29 3b 0a 23  qlite3_vfs *);.#
2e500 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  if defined(SQLIT
2e510 45 5f 45 4e 41 42 4c 45 5f 41 54 4f 4d 49 43 5f  E_ENABLE_ATOMIC_
2e520 57 52 49 54 45 29 20 5c 0a 20 7c 7c 20 64 65 66  WRITE) \. || def
2e530 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42  ined(SQLITE_ENAB
2e540 4c 45 5f 42 41 54 43 48 5f 41 54 4f 4d 49 43 5f  LE_BATCH_ATOMIC_
2e550 57 52 49 54 45 29 0a 20 20 69 6e 74 20 73 71 6c  WRITE).  int sql
2e560 69 74 65 33 4a 6f 75 72 6e 61 6c 43 72 65 61 74  ite3JournalCreat
2e570 65 28 73 71 6c 69 74 65 33 5f 66 69 6c 65 20 2a  e(sqlite3_file *
2e580 29 3b 0a 23 65 6e 64 69 66 0a 0a 69 6e 74 20 73  );.#endif..int s
2e590 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 49 73 49  qlite3JournalIsI
2e5a0 6e 4d 65 6d 6f 72 79 28 73 71 6c 69 74 65 33 5f  nMemory(sqlite3_
2e5b0 66 69 6c 65 20 2a 70 29 3b 0a 76 6f 69 64 20 73  file *p);.void s
2e5c0 71 6c 69 74 65 33 4d 65 6d 4a 6f 75 72 6e 61 6c  qlite3MemJournal
2e5d0 4f 70 65 6e 28 73 71 6c 69 74 65 33 5f 66 69 6c  Open(sqlite3_fil
2e5e0 65 20 2a 29 3b 0a 0a 76 6f 69 64 20 73 71 6c 69  e *);..void sqli
2e5f0 74 65 33 45 78 70 72 53 65 74 48 65 69 67 68 74  te3ExprSetHeight
2e600 41 6e 64 46 6c 61 67 73 28 50 61 72 73 65 20 2a  AndFlags(Parse *
2e610 70 50 61 72 73 65 2c 20 45 78 70 72 20 2a 70 29  pParse, Expr *p)
2e620 3b 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d 41 58  ;.#if SQLITE_MAX
2e630 5f 45 58 50 52 5f 44 45 50 54 48 3e 30 0a 20 20  _EXPR_DEPTH>0.  
2e640 69 6e 74 20 73 71 6c 69 74 65 33 53 65 6c 65 63  int sqlite3Selec
2e650 74 45 78 70 72 48 65 69 67 68 74 28 53 65 6c 65  tExprHeight(Sele
2e660 63 74 20 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c  ct *);.  int sql
2e670 69 74 65 33 45 78 70 72 43 68 65 63 6b 48 65 69  ite3ExprCheckHei
2e680 67 68 74 28 50 61 72 73 65 2a 2c 20 69 6e 74 29  ght(Parse*, int)
2e690 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e  ;.#else.  #defin
2e6a0 65 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74 45  e sqlite3SelectE
2e6b0 78 70 72 48 65 69 67 68 74 28 78 29 20 30 0a 20  xprHeight(x) 0. 
2e6c0 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33   #define sqlite3
2e6d0 45 78 70 72 43 68 65 63 6b 48 65 69 67 68 74 28  ExprCheckHeight(
2e6e0 78 2c 79 29 0a 23 65 6e 64 69 66 0a 0a 75 33 32  x,y).#endif..u32
2e6f0 20 73 71 6c 69 74 65 33 47 65 74 34 62 79 74 65   sqlite3Get4byte
2e700 28 63 6f 6e 73 74 20 75 38 2a 29 3b 0a 76 6f 69  (const u8*);.voi
2e710 64 20 73 71 6c 69 74 65 33 50 75 74 34 62 79 74  d sqlite3Put4byt
2e720 65 28 75 38 2a 2c 20 75 33 32 29 3b 0a 0a 23 69  e(u8*, u32);..#i
2e730 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  fdef SQLITE_ENAB
2e740 4c 45 5f 55 4e 4c 4f 43 4b 5f 4e 4f 54 49 46 59  LE_UNLOCK_NOTIFY
2e750 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 43  .  void sqlite3C
2e760 6f 6e 6e 65 63 74 69 6f 6e 42 6c 6f 63 6b 65 64  onnectionBlocked
2e770 28 73 71 6c 69 74 65 33 20 2a 2c 20 73 71 6c 69  (sqlite3 *, sqli
2e780 74 65 33 20 2a 29 3b 0a 20 20 76 6f 69 64 20 73  te3 *);.  void s
2e790 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e  qlite3Connection
2e7a0 55 6e 6c 6f 63 6b 65 64 28 73 71 6c 69 74 65 33  Unlocked(sqlite3
2e7b0 20 2a 64 62 29 3b 0a 20 20 76 6f 69 64 20 73 71   *db);.  void sq
2e7c0 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 43  lite3ConnectionC
2e7d0 6c 6f 73 65 64 28 73 71 6c 69 74 65 33 20 2a 64  losed(sqlite3 *d
2e7e0 62 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65 66  b);.#else.  #def
2e7f0 69 6e 65 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65  ine sqlite3Conne
2e800 63 74 69 6f 6e 42 6c 6f 63 6b 65 64 28 78 2c 79  ctionBlocked(x,y
2e810 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69  ).  #define sqli
2e820 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 55 6e 6c  te3ConnectionUnl
2e830 6f 63 6b 65 64 28 78 29 0a 20 20 23 64 65 66 69  ocked(x).  #defi
2e840 6e 65 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63  ne sqlite3Connec
2e850 74 69 6f 6e 43 6c 6f 73 65 64 28 78 29 0a 23 65  tionClosed(x).#e
2e860 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c  ndif..#ifdef SQL
2e870 49 54 45 5f 44 45 42 55 47 0a 20 20 76 6f 69 64  ITE_DEBUG.  void
2e880 20 73 71 6c 69 74 65 33 50 61 72 73 65 72 54 72   sqlite3ParserTr
2e890 61 63 65 28 46 49 4c 45 2a 2c 20 63 68 61 72 20  ace(FILE*, char 
2e8a0 2a 29 3b 0a 23 65 6e 64 69 66 0a 23 69 66 20 64  *);.#endif.#if d
2e8b0 65 66 69 6e 65 64 28 59 59 43 4f 56 45 52 41 47  efined(YYCOVERAG
2e8c0 45 29 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33  E).  int sqlite3
2e8d0 50 61 72 73 65 72 43 6f 76 65 72 61 67 65 28 46  ParserCoverage(F
2e8e0 49 4c 45 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 2f  ILE*);.#endif../
2e8f0 2a 0a 2a 2a 20 49 66 20 74 68 65 20 53 51 4c 49  *.** If the SQLI
2e900 54 45 5f 45 4e 41 42 4c 45 20 49 4f 54 52 41 43  TE_ENABLE IOTRAC
2e910 45 20 65 78 69 73 74 73 20 74 68 65 6e 20 74 68  E exists then th
2e920 65 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c  e global variabl
2e930 65 0a 2a 2a 20 73 71 6c 69 74 65 33 49 6f 54 72  e.** sqlite3IoTr
2e940 61 63 65 20 69 73 20 61 20 70 6f 69 6e 74 65 72  ace is a pointer
2e950 20 74 6f 20 61 20 70 72 69 6e 74 66 2d 6c 69 6b   to a printf-lik
2e960 65 20 72 6f 75 74 69 6e 65 20 75 73 65 64 20 74  e routine used t
2e970 6f 0a 2a 2a 20 70 72 69 6e 74 20 49 2f 4f 20 74  o.** print I/O t
2e980 72 61 63 69 6e 67 20 6d 65 73 73 61 67 65 73 2e  racing messages.
2e990 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54  .*/.#ifdef SQLIT
2e9a0 45 5f 45 4e 41 42 4c 45 5f 49 4f 54 52 41 43 45  E_ENABLE_IOTRACE
2e9b0 0a 23 20 64 65 66 69 6e 65 20 49 4f 54 52 41 43  .# define IOTRAC
2e9c0 45 28 41 29 20 20 69 66 28 20 73 71 6c 69 74 65  E(A)  if( sqlite
2e9d0 33 49 6f 54 72 61 63 65 20 29 7b 20 73 71 6c 69  3IoTrace ){ sqli
2e9e0 74 65 33 49 6f 54 72 61 63 65 20 41 3b 20 7d 0a  te3IoTrace A; }.
2e9f0 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 56 64    void sqlite3Vd
2ea00 62 65 49 4f 54 72 61 63 65 53 71 6c 28 56 64 62  beIOTraceSql(Vdb
2ea10 65 2a 29 3b 0a 53 51 4c 49 54 45 5f 41 50 49 20  e*);.SQLITE_API 
2ea20 53 51 4c 49 54 45 5f 45 58 54 45 52 4e 20 76 6f  SQLITE_EXTERN vo
2ea30 69 64 20 28 53 51 4c 49 54 45 5f 43 44 45 43 4c  id (SQLITE_CDECL
2ea40 20 2a 73 71 6c 69 74 65 33 49 6f 54 72 61 63 65   *sqlite3IoTrace
2ea50 29 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 2e 2e  )(const char*,..
2ea60 2e 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69  .);.#else.# defi
2ea70 6e 65 20 49 4f 54 52 41 43 45 28 41 29 0a 23 20  ne IOTRACE(A).# 
2ea80 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 64  define sqlite3Vd
2ea90 62 65 49 4f 54 72 61 63 65 53 71 6c 28 58 29 0a  beIOTraceSql(X).
2eaa0 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68  #endif../*.** Th
2eab0 65 73 65 20 72 6f 75 74 69 6e 65 73 20 61 72 65  ese routines are
2eac0 20 61 76 61 69 6c 61 62 6c 65 20 66 6f 72 20 74   available for t
2ead0 68 65 20 6d 65 6d 32 2e 63 20 64 65 62 75 67 67  he mem2.c debugg
2eae0 69 6e 67 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63  ing memory alloc
2eaf0 61 74 6f 72 0a 2a 2a 20 6f 6e 6c 79 2e 20 20 54  ator.** only.  T
2eb00 68 65 79 20 61 72 65 20 75 73 65 64 20 74 6f 20  hey are used to 
2eb10 76 65 72 69 66 79 20 74 68 61 74 20 64 69 66 66  verify that diff
2eb20 65 72 65 6e 74 20 22 74 79 70 65 73 22 20 6f 66  erent "types" of
2eb30 20 6d 65 6d 6f 72 79 0a 2a 2a 20 61 6c 6c 6f 63   memory.** alloc
2eb40 61 74 69 6f 6e 73 20 61 72 65 20 70 72 6f 70 65  ations are prope
2eb50 72 6c 79 20 74 72 61 63 6b 65 64 20 62 79 20 74  rly tracked by t
2eb60 68 65 20 73 79 73 74 65 6d 2e 0a 2a 2a 0a 2a 2a  he system..**.**
2eb70 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67   sqlite3Memdebug
2eb80 53 65 74 54 79 70 65 28 29 20 73 65 74 73 20 74  SetType() sets t
2eb90 68 65 20 22 74 79 70 65 22 20 6f 66 20 61 6e 20  he "type" of an 
2eba0 61 6c 6c 6f 63 61 74 69 6f 6e 20 74 6f 20 6f 6e  allocation to on
2ebb0 65 20 6f 66 0a 2a 2a 20 74 68 65 20 4d 45 4d 54  e of.** the MEMT
2ebc0 59 50 45 5f 2a 20 6d 61 63 72 6f 73 20 64 65 66  YPE_* macros def
2ebd0 69 6e 65 64 20 62 65 6c 6f 77 2e 20 20 54 68 65  ined below.  The
2ebe0 20 74 79 70 65 20 6d 75 73 74 20 62 65 20 61 20   type must be a 
2ebf0 62 69 74 6d 61 73 6b 20 77 69 74 68 0a 2a 2a 20  bitmask with.** 
2ec00 61 20 73 69 6e 67 6c 65 20 62 69 74 20 73 65 74  a single bit set
2ec10 2e 0a 2a 2a 0a 2a 2a 20 73 71 6c 69 74 65 33 4d  ..**.** sqlite3M
2ec20 65 6d 64 65 62 75 67 48 61 73 54 79 70 65 28 29  emdebugHasType()
2ec30 20 72 65 74 75 72 6e 73 20 74 72 75 65 20 69 66   returns true if
2ec40 20 61 6e 79 20 6f 66 20 74 68 65 20 62 69 74 73   any of the bits
2ec50 20 69 6e 20 69 74 73 20 73 65 63 6f 6e 64 0a 2a   in its second.*
2ec60 2a 20 61 72 67 75 6d 65 6e 74 20 6d 61 74 63 68  * argument match
2ec70 20 74 68 65 20 74 79 70 65 20 73 65 74 20 62 79   the type set by
2ec80 20 74 68 65 20 70 72 65 76 69 6f 75 73 20 73 71   the previous sq
2ec90 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 53 65 74  lite3MemdebugSet
2eca0 54 79 70 65 28 29 2e 0a 2a 2a 20 73 71 6c 69 74  Type()..** sqlit
2ecb0 65 33 4d 65 6d 64 65 62 75 67 48 61 73 54 79 70  e3MemdebugHasTyp
2ecc0 65 28 29 20 69 73 20 69 6e 74 65 6e 64 65 64 20  e() is intended 
2ecd0 66 6f 72 20 75 73 65 20 69 6e 73 69 64 65 20 61  for use inside a
2ece0 73 73 65 72 74 28 29 20 73 74 61 74 65 6d 65 6e  ssert() statemen
2ecf0 74 73 2e 0a 2a 2a 0a 2a 2a 20 73 71 6c 69 74 65  ts..**.** sqlite
2ed00 33 4d 65 6d 64 65 62 75 67 4e 6f 54 79 70 65 28  3MemdebugNoType(
2ed10 29 20 72 65 74 75 72 6e 73 20 74 72 75 65 20 69  ) returns true i
2ed20 66 20 6e 6f 6e 65 20 6f 66 20 74 68 65 20 62 69  f none of the bi
2ed30 74 73 20 69 6e 20 69 74 73 20 73 65 63 6f 6e 64  ts in its second
2ed40 0a 2a 2a 20 61 72 67 75 6d 65 6e 74 20 6d 61 74  .** argument mat
2ed50 63 68 20 74 68 65 20 74 79 70 65 20 73 65 74 20  ch the type set 
2ed60 62 79 20 74 68 65 20 70 72 65 76 69 6f 75 73 20  by the previous 
2ed70 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 53  sqlite3MemdebugS
2ed80 65 74 54 79 70 65 28 29 2e 0a 2a 2a 0a 2a 2a 20  etType()..**.** 
2ed90 50 65 72 68 61 70 73 20 74 68 65 20 6d 6f 73 74  Perhaps the most
2eda0 20 69 6d 70 6f 72 74 61 6e 74 20 70 6f 69 6e 74   important point
2edb0 20 69 73 20 74 68 65 20 64 69 66 66 65 72 65 6e   is the differen
2edc0 63 65 20 62 65 74 77 65 65 6e 20 4d 45 4d 54 59  ce between MEMTY
2edd0 50 45 5f 48 45 41 50 0a 2a 2a 20 61 6e 64 20 4d  PE_HEAP.** and M
2ede0 45 4d 54 59 50 45 5f 4c 4f 4f 4b 41 53 49 44 45  EMTYPE_LOOKASIDE
2edf0 2e 20 20 49 66 20 61 6e 20 61 6c 6c 6f 63 61 74  .  If an allocat
2ee00 69 6f 6e 20 69 73 20 4d 45 4d 54 59 50 45 5f 4c  ion is MEMTYPE_L
2ee10 4f 4f 4b 41 53 49 44 45 2c 20 74 68 61 74 20 6d  OOKASIDE, that m
2ee20 65 61 6e 73 0a 2a 2a 20 69 74 20 6d 69 67 68 74  eans.** it might
2ee30 20 68 61 76 65 20 62 65 65 6e 20 61 6c 6c 6f 63   have been alloc
2ee40 61 74 65 64 20 62 79 20 6c 6f 6f 6b 61 73 69 64  ated by lookasid
2ee50 65 2c 20 65 78 63 65 70 74 20 74 68 65 20 61 6c  e, except the al
2ee60 6c 6f 63 61 74 69 6f 6e 20 77 61 73 0a 2a 2a 20  location was.** 
2ee70 74 6f 6f 20 6c 61 72 67 65 20 6f 72 20 6c 6f 6f  too large or loo
2ee80 6b 61 73 69 64 65 20 77 61 73 20 61 6c 72 65 61  kaside was alrea
2ee90 64 79 20 66 75 6c 6c 2e 20 20 49 74 20 69 73 20  dy full.  It is 
2eea0 69 6d 70 6f 72 74 61 6e 74 20 74 6f 20 76 65 72  important to ver
2eeb0 69 66 79 0a 2a 2a 20 74 68 61 74 20 61 6c 6c 6f  ify.** that allo
2eec0 63 61 74 69 6f 6e 73 20 74 68 61 74 20 6d 69 67  cations that mig
2eed0 68 74 20 68 61 76 65 20 62 65 65 6e 20 73 61 74  ht have been sat
2eee0 69 73 66 69 65 64 20 62 79 20 6c 6f 6f 6b 61 73  isfied by lookas
2eef0 69 64 65 20 61 72 65 20 6e 6f 74 0a 2a 2a 20 70  ide are not.** p
2ef00 61 73 73 65 64 20 62 61 63 6b 20 74 6f 20 6e 6f  assed back to no
2ef10 6e 2d 6c 6f 6f 6b 61 73 69 64 65 20 66 72 65 65  n-lookaside free
2ef20 28 29 20 72 6f 75 74 69 6e 65 73 2e 20 20 41 73  () routines.  As
2ef30 73 65 72 74 73 20 73 75 63 68 20 61 73 20 74 68  serts such as th
2ef40 65 0a 2a 2a 20 65 78 61 6d 70 6c 65 20 61 62 6f  e.** example abo
2ef50 76 65 20 61 72 65 20 70 6c 61 63 65 64 20 6f 6e  ve are placed on
2ef60 20 74 68 65 20 6e 6f 6e 2d 6c 6f 6f 6b 61 73 69   the non-lookasi
2ef70 64 65 20 66 72 65 65 28 29 20 72 6f 75 74 69 6e  de free() routin
2ef80 65 73 20 74 6f 20 76 65 72 69 66 79 0a 2a 2a 20  es to verify.** 
2ef90 74 68 69 73 20 63 6f 6e 73 74 72 61 69 6e 74 2e  this constraint.
2efa0 0a 2a 2a 0a 2a 2a 20 41 6c 6c 20 6f 66 20 74 68  .**.** All of th
2efb0 69 73 20 69 73 20 6e 6f 2d 6f 70 20 66 6f 72 20  is is no-op for 
2efc0 61 20 70 72 6f 64 75 63 74 69 6f 6e 20 62 75 69  a production bui
2efd0 6c 64 2e 20 20 49 74 20 6f 6e 6c 79 20 63 6f 6d  ld.  It only com
2efe0 65 73 20 69 6e 74 6f 0a 2a 2a 20 70 6c 61 79 20  es into.** play 
2eff0 77 68 65 6e 20 74 68 65 20 53 51 4c 49 54 45 5f  when the SQLITE_
2f000 4d 45 4d 44 45 42 55 47 20 63 6f 6d 70 69 6c 65  MEMDEBUG compile
2f010 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 20 69 73 20  -time option is 
2f020 75 73 65 64 2e 0a 2a 2f 0a 23 69 66 64 65 66 20  used..*/.#ifdef 
2f030 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47 0a  SQLITE_MEMDEBUG.
2f040 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 65    void sqlite3Me
2f050 6d 64 65 62 75 67 53 65 74 54 79 70 65 28 76 6f  mdebugSetType(vo
2f060 69 64 2a 2c 75 38 29 3b 0a 20 20 69 6e 74 20 73  id*,u8);.  int s
2f070 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 48 61  qlite3MemdebugHa
2f080 73 54 79 70 65 28 76 6f 69 64 2a 2c 75 38 29 3b  sType(void*,u8);
2f090 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 4d 65  .  int sqlite3Me
2f0a0 6d 64 65 62 75 67 4e 6f 54 79 70 65 28 76 6f 69  mdebugNoType(voi
2f0b0 64 2a 2c 75 38 29 3b 0a 23 65 6c 73 65 0a 23 20  d*,u8);.#else.# 
2f0c0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 4d 65  define sqlite3Me
2f0d0 6d 64 65 62 75 67 53 65 74 54 79 70 65 28 58 2c  mdebugSetType(X,
2f0e0 59 29 20 20 2f 2a 20 6e 6f 2d 6f 70 20 2a 2f 0a  Y)  /* no-op */.
2f0f0 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
2f100 4d 65 6d 64 65 62 75 67 48 61 73 54 79 70 65 28  MemdebugHasType(
2f110 58 2c 59 29 20 20 31 0a 23 20 64 65 66 69 6e 65  X,Y)  1.# define
2f120 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67   sqlite3Memdebug
2f130 4e 6f 54 79 70 65 28 58 2c 59 29 20 20 20 31 0a  NoType(X,Y)   1.
2f140 23 65 6e 64 69 66 0a 23 64 65 66 69 6e 65 20 4d  #endif.#define M
2f150 45 4d 54 59 50 45 5f 48 45 41 50 20 20 20 20 20  EMTYPE_HEAP     
2f160 20 20 30 78 30 31 20 20 2f 2a 20 47 65 6e 65 72    0x01  /* Gener
2f170 61 6c 20 68 65 61 70 20 61 6c 6c 6f 63 61 74 69  al heap allocati
2f180 6f 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4d  ons */.#define M
2f190 45 4d 54 59 50 45 5f 4c 4f 4f 4b 41 53 49 44 45  EMTYPE_LOOKASIDE
2f1a0 20 20 30 78 30 32 20 20 2f 2a 20 48 65 61 70 20    0x02  /* Heap 
2f1b0 74 68 61 74 20 6d 69 67 68 74 20 68 61 76 65 20  that might have 
2f1c0 62 65 65 6e 20 6c 6f 6f 6b 61 73 69 64 65 20 2a  been lookaside *
2f1d0 2f 0a 23 64 65 66 69 6e 65 20 4d 45 4d 54 59 50  /.#define MEMTYP
2f1e0 45 5f 50 43 41 43 48 45 20 20 20 20 20 30 78 30  E_PCACHE     0x0
2f1f0 34 20 20 2f 2a 20 50 61 67 65 20 63 61 63 68 65  4  /* Page cache
2f200 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 2a 2f 0a   allocations */.
2f210 0a 2f 2a 0a 2a 2a 20 54 68 72 65 61 64 69 6e 67  ./*.** Threading
2f220 20 69 6e 74 65 72 66 61 63 65 0a 2a 2f 0a 23 69   interface.*/.#i
2f230 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 57 4f 52  f SQLITE_MAX_WOR
2f240 4b 45 52 5f 54 48 52 45 41 44 53 3e 30 0a 69 6e  KER_THREADS>0.in
2f250 74 20 73 71 6c 69 74 65 33 54 68 72 65 61 64 43  t sqlite3ThreadC
2f260 72 65 61 74 65 28 53 51 4c 69 74 65 54 68 72 65  reate(SQLiteThre
2f270 61 64 2a 2a 2c 76 6f 69 64 2a 28 2a 29 28 76 6f  ad**,void*(*)(vo
2f280 69 64 2a 29 2c 76 6f 69 64 2a 29 3b 0a 69 6e 74  id*),void*);.int
2f290 20 73 71 6c 69 74 65 33 54 68 72 65 61 64 4a 6f   sqlite3ThreadJo
2f2a0 69 6e 28 53 51 4c 69 74 65 54 68 72 65 61 64 2a  in(SQLiteThread*
2f2b0 2c 20 76 6f 69 64 2a 2a 29 3b 0a 23 65 6e 64 69  , void**);.#endi
2f2c0 66 0a 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53  f..#if defined(S
2f2d0 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 44 42 50  QLITE_ENABLE_DBP
2f2e0 41 47 45 5f 56 54 41 42 29 20 7c 7c 20 64 65 66  AGE_VTAB) || def
2f2f0 69 6e 65 64 28 53 51 4c 49 54 45 5f 54 45 53 54  ined(SQLITE_TEST
2f300 29 0a 69 6e 74 20 73 71 6c 69 74 65 33 44 62 70  ).int sqlite3Dbp
2f310 61 67 65 52 65 67 69 73 74 65 72 28 73 71 6c 69  ageRegister(sqli
2f320 74 65 33 2a 29 3b 0a 23 65 6e 64 69 66 0a 23 69  te3*);.#endif.#i
2f330 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  f defined(SQLITE
2f340 5f 45 4e 41 42 4c 45 5f 44 42 53 54 41 54 5f 56  _ENABLE_DBSTAT_V
2f350 54 41 42 29 20 7c 7c 20 64 65 66 69 6e 65 64 28  TAB) || defined(
2f360 53 51 4c 49 54 45 5f 54 45 53 54 29 0a 69 6e 74  SQLITE_TEST).int
2f370 20 73 71 6c 69 74 65 33 44 62 73 74 61 74 52 65   sqlite3DbstatRe
2f380 67 69 73 74 65 72 28 73 71 6c 69 74 65 33 2a 29  gister(sqlite3*)
2f390 3b 0a 23 65 6e 64 69 66 0a 0a 69 6e 74 20 73 71  ;.#endif..int sq
2f3a0 6c 69 74 65 33 45 78 70 72 56 65 63 74 6f 72 53  lite3ExprVectorS
2f3b0 69 7a 65 28 45 78 70 72 20 2a 70 45 78 70 72 29  ize(Expr *pExpr)
2f3c0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70  ;.int sqlite3Exp
2f3d0 72 49 73 56 65 63 74 6f 72 28 45 78 70 72 20 2a  rIsVector(Expr *
2f3e0 70 45 78 70 72 29 3b 0a 45 78 70 72 20 2a 73 71  pExpr);.Expr *sq
2f3f0 6c 69 74 65 33 56 65 63 74 6f 72 46 69 65 6c 64  lite3VectorField
2f400 53 75 62 65 78 70 72 28 45 78 70 72 2a 2c 20 69  Subexpr(Expr*, i
2f410 6e 74 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74  nt);.Expr *sqlit
2f420 65 33 45 78 70 72 46 6f 72 56 65 63 74 6f 72 46  e3ExprForVectorF
2f430 69 65 6c 64 28 50 61 72 73 65 2a 2c 45 78 70 72  ield(Parse*,Expr
2f440 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  *,int);.void sql
2f450 69 74 65 33 56 65 63 74 6f 72 45 72 72 6f 72 4d  ite3VectorErrorM
2f460 73 67 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a  sg(Parse*, Expr*
2f470 29 3b 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  );..#ifndef SQLI
2f480 54 45 5f 4f 4d 49 54 5f 43 4f 4d 50 49 4c 45 4f  TE_OMIT_COMPILEO
2f490 50 54 49 4f 4e 5f 44 49 41 47 53 0a 63 6f 6e 73  PTION_DIAGS.cons
2f4a0 74 20 63 68 61 72 20 2a 2a 73 71 6c 69 74 65 33  t char **sqlite3
2f4b0 43 6f 6d 70 69 6c 65 4f 70 74 69 6f 6e 73 28 69  CompileOptions(i
2f4c0 6e 74 20 2a 70 6e 4f 70 74 29 3b 0a 23 65 6e 64  nt *pnOpt);.#end
2f4d0 69 66 0a 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51  if..#endif /* SQ
2f4e0 4c 49 54 45 49 4e 54 5f 48 20 2a 2f 0a           LITEINT_H */.