/ Hex Artifact Content
Login

Artifact e8308e4ca96cf77f495537c45239d101c221cc262dbbf187cd083646870aa7c5:


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 0a 2a 2a 20 45 6e 61 62 6c 65 20 53 51 4c 49  *.** Enable SQLI
3490: 54 45 5f 45 4e 41 42 4c 45 5f 45 58 50 4c 41 49  TE_ENABLE_EXPLAI
34a0: 4e 5f 43 4f 4d 4d 45 4e 54 53 20 69 66 20 53 51  N_COMMENTS if SQ
34b0: 4c 49 54 45 5f 44 45 42 55 47 20 69 73 20 74 75  LITE_DEBUG is tu
34c0: 72 6e 65 64 20 6f 6e 2e 0a 2a 2f 0a 23 69 66 20  rned on..*/.#if 
34d0: 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
34e0: 45 4e 41 42 4c 45 5f 45 58 50 4c 41 49 4e 5f 43  ENABLE_EXPLAIN_C
34f0: 4f 4d 4d 45 4e 54 53 29 20 26 26 20 64 65 66 69  OMMENTS) && defi
3500: 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47  ned(SQLITE_DEBUG
3510: 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  ).# define SQLIT
3520: 45 5f 45 4e 41 42 4c 45 5f 45 58 50 4c 41 49 4e  E_ENABLE_EXPLAIN
3530: 5f 43 4f 4d 4d 45 4e 54 53 20 31 0a 23 65 6e 64  _COMMENTS 1.#end
3540: 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 74 65  if../*.** The te
3550: 73 74 63 61 73 65 28 29 20 6d 61 63 72 6f 20 69  stcase() macro i
3560: 73 20 75 73 65 64 20 74 6f 20 61 69 64 20 69 6e  s used to aid in
3570: 20 63 6f 76 65 72 61 67 65 20 74 65 73 74 69 6e   coverage testin
3580: 67 2e 20 20 57 68 65 6e 0a 2a 2a 20 64 6f 69 6e  g.  When.** doin
3590: 67 20 63 6f 76 65 72 61 67 65 20 74 65 73 74 69  g coverage testi
35a0: 6e 67 2c 20 74 68 65 20 63 6f 6e 64 69 74 69 6f  ng, the conditio
35b0: 6e 20 69 6e 73 69 64 65 20 74 68 65 20 61 72 67  n inside the arg
35c0: 75 6d 65 6e 74 20 74 6f 0a 2a 2a 20 74 65 73 74  ument to.** test
35d0: 63 61 73 65 28 29 20 6d 75 73 74 20 62 65 20 65  case() must be e
35e0: 76 61 6c 75 61 74 65 64 20 62 6f 74 68 20 74 72  valuated both tr
35f0: 75 65 20 61 6e 64 20 66 61 6c 73 65 20 69 6e 20  ue and false in 
3600: 6f 72 64 65 72 20 74 6f 0a 2a 2a 20 67 65 74 20  order to.** get 
3610: 66 75 6c 6c 20 62 72 61 6e 63 68 20 63 6f 76 65  full branch cove
3620: 72 61 67 65 2e 20 20 54 68 65 20 74 65 73 74 63  rage.  The testc
3630: 61 73 65 28 29 20 6d 61 63 72 6f 20 69 73 20 69  ase() macro is i
3640: 6e 73 65 72 74 65 64 0a 2a 2a 20 74 6f 20 68 65  nserted.** to he
3650: 6c 70 20 65 6e 73 75 72 65 20 61 64 65 71 75 61  lp ensure adequa
3660: 74 65 20 74 65 73 74 20 63 6f 76 65 72 61 67 65  te test coverage
3670: 20 69 6e 20 70 6c 61 63 65 73 20 77 68 65 72 65   in places where
3680: 20 73 69 6d 70 6c 65 0a 2a 2a 20 63 6f 6e 64 69   simple.** condi
3690: 74 69 6f 6e 2f 64 65 63 69 73 69 6f 6e 20 63 6f  tion/decision co
36a0: 76 65 72 61 67 65 20 69 73 20 69 6e 61 64 65 71  verage is inadeq
36b0: 75 61 74 65 2e 20 20 46 6f 72 20 65 78 61 6d 70  uate.  For examp
36c0: 6c 65 2c 20 74 65 73 74 63 61 73 65 28 29 0a 2a  le, testcase().*
36d0: 2a 20 63 61 6e 20 62 65 20 75 73 65 64 20 74 6f  * can be used to
36e0: 20 6d 61 6b 65 20 73 75 72 65 20 62 6f 75 6e 64   make sure bound
36f0: 61 72 79 20 76 61 6c 75 65 73 20 61 72 65 20 74  ary values are t
3700: 65 73 74 65 64 2e 20 20 46 6f 72 0a 2a 2a 20 62  ested.  For.** b
3710: 69 74 6d 61 73 6b 20 74 65 73 74 73 2c 20 74 65  itmask tests, te
3720: 73 74 63 61 73 65 28 29 20 63 61 6e 20 62 65 20  stcase() can be 
3730: 75 73 65 64 20 74 6f 20 6d 61 6b 65 20 73 75 72  used to make sur
3740: 65 20 65 61 63 68 20 62 69 74 0a 2a 2a 20 69 73  e each bit.** is
3750: 20 73 69 67 6e 69 66 69 63 61 6e 74 20 61 6e 64   significant and
3760: 20 75 73 65 64 20 61 74 20 6c 65 61 73 74 20 6f   used at least o
3770: 6e 63 65 2e 20 20 4f 6e 20 73 77 69 74 63 68 20  nce.  On switch 
3780: 73 74 61 74 65 6d 65 6e 74 73 0a 2a 2a 20 77 68  statements.** wh
3790: 65 72 65 20 6d 75 6c 74 69 70 6c 65 20 63 61 73  ere multiple cas
37a0: 65 73 20 67 6f 20 74 6f 20 74 68 65 20 73 61 6d  es go to the sam
37b0: 65 20 62 6c 6f 63 6b 20 6f 66 20 63 6f 64 65 2c  e block of code,
37c0: 20 74 65 73 74 63 61 73 65 28 29 0a 2a 2a 20 63   testcase().** c
37d0: 61 6e 20 69 6e 73 75 72 65 20 74 68 61 74 20 61  an insure that a
37e0: 6c 6c 20 63 61 73 65 73 20 61 72 65 20 65 76 61  ll cases are eva
37f0: 6c 75 61 74 65 64 2e 0a 2a 2a 0a 2a 2f 0a 23 69  luated..**.*/.#i
3800: 66 64 65 66 20 53 51 4c 49 54 45 5f 43 4f 56 45  fdef SQLITE_COVE
3810: 52 41 47 45 5f 54 45 53 54 0a 20 20 76 6f 69 64  RAGE_TEST.  void
3820: 20 73 71 6c 69 74 65 33 43 6f 76 65 72 61 67 65   sqlite3Coverage
3830: 28 69 6e 74 29 3b 0a 23 20 64 65 66 69 6e 65 20  (int);.# define 
3840: 74 65 73 74 63 61 73 65 28 58 29 20 20 69 66 28  testcase(X)  if(
3850: 20 58 20 29 7b 20 73 71 6c 69 74 65 33 43 6f 76   X ){ sqlite3Cov
3860: 65 72 61 67 65 28 5f 5f 4c 49 4e 45 5f 5f 29 3b  erage(__LINE__);
3870: 20 7d 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e   }.#else.# defin
3880: 65 20 74 65 73 74 63 61 73 65 28 58 29 0a 23 65  e testcase(X).#e
3890: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  ndif../*.** The 
38a0: 54 45 53 54 4f 4e 4c 59 20 6d 61 63 72 6f 20 69  TESTONLY macro i
38b0: 73 20 75 73 65 64 20 74 6f 20 65 6e 63 6c 6f 73  s used to enclos
38c0: 65 20 76 61 72 69 61 62 6c 65 20 64 65 63 6c 61  e variable decla
38d0: 72 61 74 69 6f 6e 73 20 6f 72 0a 2a 2a 20 6f 74  rations or.** ot
38e0: 68 65 72 20 62 69 74 73 20 6f 66 20 63 6f 64 65  her bits of code
38f0: 20 74 68 61 74 20 61 72 65 20 6e 65 65 64 65 64   that are needed
3900: 20 74 6f 20 73 75 70 70 6f 72 74 20 74 68 65 20   to support the 
3910: 61 72 67 75 6d 65 6e 74 73 0a 2a 2a 20 77 69 74  arguments.** wit
3920: 68 69 6e 20 74 65 73 74 63 61 73 65 28 29 20 61  hin testcase() a
3930: 6e 64 20 61 73 73 65 72 74 28 29 20 6d 61 63 72  nd assert() macr
3940: 6f 73 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69  os..*/.#if !defi
3950: 6e 65 64 28 4e 44 45 42 55 47 29 20 7c 7c 20 64  ned(NDEBUG) || d
3960: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 43 4f  efined(SQLITE_CO
3970: 56 45 52 41 47 45 5f 54 45 53 54 29 0a 23 20 64  VERAGE_TEST).# d
3980: 65 66 69 6e 65 20 54 45 53 54 4f 4e 4c 59 28 58  efine TESTONLY(X
3990: 29 20 20 58 0a 23 65 6c 73 65 0a 23 20 64 65 66  )  X.#else.# def
39a0: 69 6e 65 20 54 45 53 54 4f 4e 4c 59 28 58 29 0a  ine TESTONLY(X).
39b0: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 53 6f  #endif../*.** So
39c0: 6d 65 74 69 6d 65 73 20 77 65 20 6e 65 65 64 20  metimes we need 
39d0: 61 20 73 6d 61 6c 6c 20 61 6d 6f 75 6e 74 20 6f  a small amount o
39e0: 66 20 63 6f 64 65 20 73 75 63 68 20 61 73 20 61  f code such as a
39f0: 20 76 61 72 69 61 62 6c 65 20 69 6e 69 74 69 61   variable initia
3a00: 6c 69 7a 61 74 69 6f 6e 0a 2a 2a 20 74 6f 20 73  lization.** to s
3a10: 65 74 75 70 20 66 6f 72 20 61 20 6c 61 74 65 72  etup for a later
3a20: 20 61 73 73 65 72 74 28 29 20 73 74 61 74 65 6d   assert() statem
3a30: 65 6e 74 2e 20 20 57 65 20 64 6f 20 6e 6f 74 20  ent.  We do not 
3a40: 77 61 6e 74 20 74 68 69 73 20 63 6f 64 65 20 74  want this code t
3a50: 6f 0a 2a 2a 20 61 70 70 65 61 72 20 77 68 65 6e  o.** appear when
3a60: 20 61 73 73 65 72 74 28 29 20 69 73 20 64 69 73   assert() is dis
3a70: 61 62 6c 65 64 2e 20 20 54 68 65 20 66 6f 6c 6c  abled.  The foll
3a80: 6f 77 69 6e 67 20 6d 61 63 72 6f 20 69 73 20 74  owing macro is t
3a90: 68 65 72 65 66 6f 72 65 0a 2a 2a 20 75 73 65 64  herefore.** used
3aa0: 20 74 6f 20 63 6f 6e 74 61 69 6e 20 74 68 61 74   to contain that
3ab0: 20 73 65 74 75 70 20 63 6f 64 65 2e 20 20 54 68   setup code.  Th
3ac0: 65 20 22 56 56 41 22 20 61 63 72 6f 6e 79 6d 20  e "VVA" acronym 
3ad0: 73 74 61 6e 64 73 20 66 6f 72 0a 2a 2a 20 22 56  stands for.** "V
3ae0: 65 72 69 66 69 63 61 74 69 6f 6e 2c 20 56 61 6c  erification, Val
3af0: 69 64 61 74 69 6f 6e 2c 20 61 6e 64 20 41 63 63  idation, and Acc
3b00: 72 65 64 69 74 61 74 69 6f 6e 22 2e 20 20 49 6e  reditation".  In
3b10: 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68   other words, th
3b20: 65 0a 2a 2a 20 63 6f 64 65 20 77 69 74 68 69 6e  e.** code within
3b30: 20 56 56 41 5f 4f 4e 4c 59 28 29 20 77 69 6c 6c   VVA_ONLY() will
3b40: 20 6f 6e 6c 79 20 72 75 6e 20 64 75 72 69 6e 67   only run during
3b50: 20 76 65 72 69 66 69 63 61 74 69 6f 6e 20 70 72   verification pr
3b60: 6f 63 65 73 73 65 73 2e 0a 2a 2f 0a 23 69 66 6e  ocesses..*/.#ifn
3b70: 64 65 66 20 4e 44 45 42 55 47 0a 23 20 64 65 66  def NDEBUG.# def
3b80: 69 6e 65 20 56 56 41 5f 4f 4e 4c 59 28 58 29 20  ine VVA_ONLY(X) 
3b90: 20 58 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e   X.#else.# defin
3ba0: 65 20 56 56 41 5f 4f 4e 4c 59 28 58 29 0a 23 65  e VVA_ONLY(X).#e
3bb0: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  ndif../*.** The 
3bc0: 41 4c 57 41 59 53 20 61 6e 64 20 4e 45 56 45 52  ALWAYS and NEVER
3bd0: 20 6d 61 63 72 6f 73 20 73 75 72 72 6f 75 6e 64   macros surround
3be0: 20 62 6f 6f 6c 65 61 6e 20 65 78 70 72 65 73 73   boolean express
3bf0: 69 6f 6e 73 20 77 68 69 63 68 0a 2a 2a 20 61 72  ions which.** ar
3c00: 65 20 69 6e 74 65 6e 64 65 64 20 74 6f 20 61 6c  e intended to al
3c10: 77 61 79 73 20 62 65 20 74 72 75 65 20 6f 72 20  ways be true or 
3c20: 66 61 6c 73 65 2c 20 72 65 73 70 65 63 74 69 76  false, respectiv
3c30: 65 6c 79 2e 20 20 53 75 63 68 0a 2a 2a 20 65 78  ely.  Such.** ex
3c40: 70 72 65 73 73 69 6f 6e 73 20 63 6f 75 6c 64 20  pressions could 
3c50: 62 65 20 6f 6d 69 74 74 65 64 20 66 72 6f 6d 20  be omitted from 
3c60: 74 68 65 20 63 6f 64 65 20 63 6f 6d 70 6c 65 74  the code complet
3c70: 65 6c 79 2e 20 20 42 75 74 20 74 68 65 79 0a 2a  ely.  But they.*
3c80: 2a 20 61 72 65 20 69 6e 63 6c 75 64 65 64 20 69  * are included i
3c90: 6e 20 61 20 66 65 77 20 63 61 73 65 73 20 69 6e  n a few cases in
3ca0: 20 6f 72 64 65 72 20 74 6f 20 65 6e 68 61 6e 63   order to enhanc
3cb0: 65 20 74 68 65 20 72 65 73 69 6c 69 65 6e 63 65  e the resilience
3cc0: 0a 2a 2a 20 6f 66 20 53 51 4c 69 74 65 20 74 6f  .** of SQLite to
3cd0: 20 75 6e 65 78 70 65 63 74 65 64 20 62 65 68 61   unexpected beha
3ce0: 76 69 6f 72 20 2d 20 74 6f 20 6d 61 6b 65 20 74  vior - to make t
3cf0: 68 65 20 63 6f 64 65 20 22 73 65 6c 66 2d 68 65  he code "self-he
3d00: 61 6c 69 6e 67 22 0a 2a 2a 20 6f 72 20 22 64 75  aling".** or "du
3d10: 63 74 69 6c 65 22 20 72 61 74 68 65 72 20 74 68  ctile" rather th
3d20: 61 6e 20 62 65 69 6e 67 20 22 62 72 69 74 74 6c  an being "brittl
3d30: 65 22 20 61 6e 64 20 63 72 61 73 68 69 6e 67 20  e" and crashing 
3d40: 61 74 20 74 68 65 20 66 69 72 73 74 0a 2a 2a 20  at the first.** 
3d50: 68 69 6e 74 20 6f 66 20 75 6e 70 6c 61 6e 6e 65  hint of unplanne
3d60: 64 20 62 65 68 61 76 69 6f 72 2e 0a 2a 2a 0a 2a  d behavior..**.*
3d70: 2a 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73  * In other words
3d80: 2c 20 41 4c 57 41 59 53 20 61 6e 64 20 4e 45 56  , ALWAYS and NEV
3d90: 45 52 20 61 72 65 20 61 64 64 65 64 20 66 6f 72  ER are added for
3da0: 20 64 65 66 65 6e 73 69 76 65 20 63 6f 64 65 2e   defensive code.
3db0: 0a 2a 2a 0a 2a 2a 20 57 68 65 6e 20 64 6f 69 6e  .**.** When doin
3dc0: 67 20 63 6f 76 65 72 61 67 65 20 74 65 73 74 69  g coverage testi
3dd0: 6e 67 20 41 4c 57 41 59 53 20 61 6e 64 20 4e 45  ng ALWAYS and NE
3de0: 56 45 52 20 61 72 65 20 68 61 72 64 2d 63 6f 64  VER are hard-cod
3df0: 65 64 20 74 6f 0a 2a 2a 20 62 65 20 74 72 75 65  ed to.** be true
3e00: 20 61 6e 64 20 66 61 6c 73 65 20 73 6f 20 74 68   and false so th
3e10: 61 74 20 74 68 65 20 75 6e 72 65 61 63 68 61 62  at the unreachab
3e20: 6c 65 20 63 6f 64 65 20 74 68 65 79 20 73 70 65  le code they spe
3e30: 63 69 66 79 20 77 69 6c 6c 0a 2a 2a 20 6e 6f 74  cify will.** not
3e40: 20 62 65 20 63 6f 75 6e 74 65 64 20 61 73 20 75   be counted as u
3e50: 6e 74 65 73 74 65 64 20 63 6f 64 65 2e 0a 2a 2f  ntested code..*/
3e60: 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c  .#if defined(SQL
3e70: 49 54 45 5f 43 4f 56 45 52 41 47 45 5f 54 45 53  ITE_COVERAGE_TES
3e80: 54 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 53 51  T) || defined(SQ
3e90: 4c 49 54 45 5f 4d 55 54 41 54 49 4f 4e 5f 54 45  LITE_MUTATION_TE
3ea0: 53 54 29 0a 23 20 64 65 66 69 6e 65 20 41 4c 57  ST).# define ALW
3eb0: 41 59 53 28 58 29 20 20 20 20 20 20 28 31 29 0a  AYS(X)      (1).
3ec0: 23 20 64 65 66 69 6e 65 20 4e 45 56 45 52 28 58  # define NEVER(X
3ed0: 29 20 20 20 20 20 20 20 28 30 29 0a 23 65 6c 69  )       (0).#eli
3ee0: 66 20 21 64 65 66 69 6e 65 64 28 4e 44 45 42 55  f !defined(NDEBU
3ef0: 47 29 0a 23 20 64 65 66 69 6e 65 20 41 4c 57 41  G).# define ALWA
3f00: 59 53 28 58 29 20 20 20 20 20 20 28 28 58 29 3f  YS(X)      ((X)?
3f10: 31 3a 28 61 73 73 65 72 74 28 30 29 2c 30 29 29  1:(assert(0),0))
3f20: 0a 23 20 64 65 66 69 6e 65 20 4e 45 56 45 52 28  .# define NEVER(
3f30: 58 29 20 20 20 20 20 20 20 28 28 58 29 3f 28 61  X)       ((X)?(a
3f40: 73 73 65 72 74 28 30 29 2c 31 29 3a 30 29 0a 23  ssert(0),1):0).#
3f50: 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 41 4c  else.# define AL
3f60: 57 41 59 53 28 58 29 20 20 20 20 20 20 28 58 29  WAYS(X)      (X)
3f70: 0a 23 20 64 65 66 69 6e 65 20 4e 45 56 45 52 28  .# define NEVER(
3f80: 58 29 20 20 20 20 20 20 20 28 58 29 0a 23 65 6e  X)       (X).#en
3f90: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 53 6f 6d 65 20  dif../*.** Some 
3fa0: 63 6f 6e 64 69 74 69 6f 6e 61 6c 73 20 61 72 65  conditionals are
3fb0: 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73 20 6f   optimizations o
3fc0: 6e 6c 79 2e 20 20 49 6e 20 6f 74 68 65 72 20 77  nly.  In other w
3fd0: 6f 72 64 73 2c 20 69 66 20 74 68 65 0a 2a 2a 20  ords, if the.** 
3fe0: 63 6f 6e 64 69 74 69 6f 6e 61 6c 73 20 61 72 65  conditionals are
3ff0: 20 72 65 70 6c 61 63 65 64 20 77 69 74 68 20 61   replaced with a
4000: 20 63 6f 6e 73 74 61 6e 74 20 31 20 28 74 72 75   constant 1 (tru
4010: 65 29 20 6f 72 20 30 20 28 66 61 6c 73 65 29 20  e) or 0 (false) 
4020: 74 68 65 6e 0a 2a 2a 20 74 68 65 20 63 6f 72 72  then.** the corr
4030: 65 63 74 20 61 6e 73 77 65 72 20 69 73 20 73 74  ect answer is st
4040: 69 6c 6c 20 6f 62 74 61 69 6e 65 64 2c 20 74 68  ill obtained, th
4050: 6f 75 67 68 20 70 65 72 68 61 70 73 20 6e 6f 74  ough perhaps not
4060: 20 61 73 20 71 75 69 63 6b 6c 79 2e 0a 2a 2a 0a   as quickly..**.
4070: 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  ** The following
4080: 20 6d 61 63 72 6f 73 20 6d 61 72 6b 20 74 68 65   macros mark the
4090: 73 65 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73  se optimizations
40a0: 20 63 6f 6e 64 69 74 69 6f 6e 61 6c 73 2e 0a 2a   conditionals..*
40b0: 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51  /.#if defined(SQ
40c0: 4c 49 54 45 5f 4d 55 54 41 54 49 4f 4e 5f 54 45  LITE_MUTATION_TE
40d0: 53 54 29 0a 23 20 64 65 66 69 6e 65 20 4f 4b 5f  ST).# define OK_
40e0: 49 46 5f 41 4c 57 41 59 53 5f 54 52 55 45 28 58  IF_ALWAYS_TRUE(X
40f0: 29 20 20 28 31 29 0a 23 20 64 65 66 69 6e 65 20  )  (1).# define 
4100: 4f 4b 5f 49 46 5f 41 4c 57 41 59 53 5f 46 41 4c  OK_IF_ALWAYS_FAL
4110: 53 45 28 58 29 20 28 30 29 0a 23 65 6c 73 65 0a  SE(X) (0).#else.
4120: 23 20 64 65 66 69 6e 65 20 4f 4b 5f 49 46 5f 41  # define OK_IF_A
4130: 4c 57 41 59 53 5f 54 52 55 45 28 58 29 20 20 28  LWAYS_TRUE(X)  (
4140: 58 29 0a 23 20 64 65 66 69 6e 65 20 4f 4b 5f 49  X).# define OK_I
4150: 46 5f 41 4c 57 41 59 53 5f 46 41 4c 53 45 28 58  F_ALWAYS_FALSE(X
4160: 29 20 28 58 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a  ) (X).#endif../*
4170: 0a 2a 2a 20 53 6f 6d 65 20 6d 61 6c 6c 6f 63 20  .** Some malloc 
4180: 66 61 69 6c 75 72 65 73 20 61 72 65 20 6f 6e 6c  failures are onl
4190: 79 20 70 6f 73 73 69 62 6c 65 20 69 66 20 53 51  y possible if SQ
41a0: 4c 49 54 45 5f 54 45 53 54 5f 52 45 41 4c 4c 4f  LITE_TEST_REALLO
41b0: 43 5f 53 54 52 45 53 53 20 69 73 0a 2a 2a 20 64  C_STRESS is.** d
41c0: 65 66 69 6e 65 64 2e 20 20 57 65 20 6e 65 65 64  efined.  We need
41d0: 20 74 6f 20 64 65 66 65 6e 64 20 61 67 61 69 6e   to defend again
41e0: 73 74 20 74 68 6f 73 65 20 66 61 69 6c 75 72 65  st those failure
41f0: 73 20 77 68 65 6e 20 74 65 73 74 69 6e 67 20 77  s when testing w
4200: 69 74 68 0a 2a 2a 20 53 51 4c 49 54 45 5f 54 45  ith.** SQLITE_TE
4210: 53 54 5f 52 45 41 4c 4c 4f 43 5f 53 54 52 45 53  ST_REALLOC_STRES
4220: 53 2c 20 62 75 74 20 77 65 20 64 6f 6e 27 74 20  S, but we don't 
4230: 77 61 6e 74 20 74 68 65 20 75 6e 72 65 61 63 68  want the unreach
4240: 61 62 6c 65 20 62 72 61 6e 63 68 65 73 0a 2a 2a  able branches.**
4250: 20 64 75 72 69 6e 67 20 61 20 6e 6f 72 6d 61 6c   during a normal
4260: 20 62 75 69 6c 64 2e 20 20 54 68 65 20 66 6f 6c   build.  The fol
4270: 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 20 63 61 6e  lowing macro can
4280: 20 62 65 20 75 73 65 64 20 74 6f 20 64 69 73 61   be used to disa
4290: 62 6c 65 20 74 65 73 74 73 0a 2a 2a 20 74 68 61  ble tests.** tha
42a0: 74 20 61 72 65 20 61 6c 77 61 79 73 20 66 61 6c  t are always fal
42b0: 73 65 20 65 78 63 65 70 74 20 77 68 65 6e 20 53  se except when S
42c0: 51 4c 49 54 45 5f 54 45 53 54 5f 52 45 41 4c 4c  QLITE_TEST_REALL
42d0: 4f 43 5f 53 54 52 45 53 53 20 69 73 20 73 65 74  OC_STRESS is set
42e0: 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64  ..*/.#if defined
42f0: 28 53 51 4c 49 54 45 5f 54 45 53 54 5f 52 45 41  (SQLITE_TEST_REA
4300: 4c 4c 4f 43 5f 53 54 52 45 53 53 29 0a 23 20 64  LLOC_STRESS).# d
4310: 65 66 69 6e 65 20 4f 4e 4c 59 5f 49 46 5f 52 45  efine ONLY_IF_RE
4320: 41 4c 4c 4f 43 5f 53 54 52 45 53 53 28 58 29 20  ALLOC_STRESS(X) 
4330: 20 28 58 29 0a 23 65 6c 69 66 20 21 64 65 66 69   (X).#elif !defi
4340: 6e 65 64 28 4e 44 45 42 55 47 29 0a 23 20 64 65  ned(NDEBUG).# de
4350: 66 69 6e 65 20 4f 4e 4c 59 5f 49 46 5f 52 45 41  fine ONLY_IF_REA
4360: 4c 4c 4f 43 5f 53 54 52 45 53 53 28 58 29 20 20  LLOC_STRESS(X)  
4370: 28 28 58 29 3f 28 61 73 73 65 72 74 28 30 29 2c  ((X)?(assert(0),
4380: 31 29 3a 30 29 0a 23 65 6c 73 65 0a 23 20 64 65  1):0).#else.# de
4390: 66 69 6e 65 20 4f 4e 4c 59 5f 49 46 5f 52 45 41  fine ONLY_IF_REA
43a0: 4c 4c 4f 43 5f 53 54 52 45 53 53 28 58 29 20 20  LLOC_STRESS(X)  
43b0: 28 30 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  (0).#endif../*.*
43c0: 2a 20 44 65 63 6c 61 72 61 74 69 6f 6e 73 20 75  * Declarations u
43d0: 73 65 64 20 66 6f 72 20 74 72 61 63 69 6e 67 20  sed for tracing 
43e0: 74 68 65 20 6f 70 65 72 61 74 69 6e 67 20 73 79  the operating sy
43f0: 73 74 65 6d 20 69 6e 74 65 72 66 61 63 65 73 2e  stem interfaces.
4400: 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28  .*/.#if defined(
4410: 53 51 4c 49 54 45 5f 46 4f 52 43 45 5f 4f 53 5f  SQLITE_FORCE_OS_
4420: 54 52 41 43 45 29 20 7c 7c 20 64 65 66 69 6e 65  TRACE) || define
4430: 64 28 53 51 4c 49 54 45 5f 54 45 53 54 29 20 7c  d(SQLITE_TEST) |
4440: 7c 20 5c 0a 20 20 20 20 28 64 65 66 69 6e 65 64  | \.    (defined
4450: 28 53 51 4c 49 54 45 5f 44 45 42 55 47 29 20 26  (SQLITE_DEBUG) &
4460: 26 20 53 51 4c 49 54 45 5f 4f 53 5f 57 49 4e 29  & SQLITE_OS_WIN)
4470: 0a 20 20 65 78 74 65 72 6e 20 69 6e 74 20 73 71  .  extern int sq
4480: 6c 69 74 65 33 4f 53 54 72 61 63 65 3b 0a 23 20  lite3OSTrace;.# 
4490: 64 65 66 69 6e 65 20 4f 53 54 52 41 43 45 28 58  define OSTRACE(X
44a0: 29 20 20 20 20 20 20 20 20 20 20 69 66 28 20 73  )          if( s
44b0: 71 6c 69 74 65 33 4f 53 54 72 61 63 65 20 29 20  qlite3OSTrace ) 
44c0: 73 71 6c 69 74 65 33 44 65 62 75 67 50 72 69 6e  sqlite3DebugPrin
44d0: 74 66 20 58 0a 23 20 64 65 66 69 6e 65 20 53 51  tf X.# define SQ
44e0: 4c 49 54 45 5f 48 41 56 45 5f 4f 53 5f 54 52 41  LITE_HAVE_OS_TRA
44f0: 43 45 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e  CE.#else.# defin
4500: 65 20 4f 53 54 52 41 43 45 28 58 29 0a 23 20 75  e OSTRACE(X).# u
4510: 6e 64 65 66 20 20 53 51 4c 49 54 45 5f 48 41 56  ndef  SQLITE_HAV
4520: 45 5f 4f 53 5f 54 52 41 43 45 0a 23 65 6e 64 69  E_OS_TRACE.#endi
4530: 66 0a 0a 2f 2a 0a 2a 2a 20 49 73 20 74 68 65 20  f../*.** Is the 
4540: 73 71 6c 69 74 65 33 45 72 72 4e 61 6d 65 28 29  sqlite3ErrName()
4550: 20 66 75 6e 63 74 69 6f 6e 20 6e 65 65 64 65 64   function needed
4560: 20 69 6e 20 74 68 65 20 62 75 69 6c 64 3f 20 20   in the build?  
4570: 43 75 72 72 65 6e 74 6c 79 2c 0a 2a 2a 20 69 74  Currently,.** it
4580: 20 69 73 20 6e 65 65 64 65 64 20 62 79 20 22 6d   is needed by "m
4590: 75 74 65 78 5f 77 33 32 2e 63 22 20 28 77 68 65  utex_w32.c" (whe
45a0: 6e 20 64 65 62 75 67 67 69 6e 67 29 2c 20 22 6f  n debugging), "o
45b0: 73 5f 77 69 6e 2e 63 22 20 28 77 68 65 6e 0a 2a  s_win.c" (when.*
45c0: 2a 20 4f 53 54 52 41 43 45 20 69 73 20 65 6e 61  * OSTRACE is ena
45d0: 62 6c 65 64 29 2c 20 61 6e 64 20 62 79 20 73 65  bled), and by se
45e0: 76 65 72 61 6c 20 22 74 65 73 74 2a 2e 63 22 20  veral "test*.c" 
45f0: 66 69 6c 65 73 20 28 77 68 69 63 68 20 61 72 65  files (which are
4600: 0a 2a 2a 20 63 6f 6d 70 69 6c 65 64 20 75 73 69  .** compiled usi
4610: 6e 67 20 53 51 4c 49 54 45 5f 54 45 53 54 29 2e  ng SQLITE_TEST).
4620: 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28  .*/.#if defined(
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 29 20 7c 7c 20 64 65 66 69 6e 65 64  RACE) || defined
4650: 28 53 51 4c 49 54 45 5f 54 45 53 54 29 20 7c 7c  (SQLITE_TEST) ||
4660: 20 5c 0a 20 20 20 20 28 64 65 66 69 6e 65 64 28   \.    (defined(
4670: 53 51 4c 49 54 45 5f 44 45 42 55 47 29 20 26 26  SQLITE_DEBUG) &&
4680: 20 53 51 4c 49 54 45 5f 4f 53 5f 57 49 4e 29 0a   SQLITE_OS_WIN).
4690: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
46a0: 4e 45 45 44 5f 45 52 52 5f 4e 41 4d 45 0a 23 65  NEED_ERR_NAME.#e
46b0: 6c 73 65 0a 23 20 75 6e 64 65 66 20 20 53 51 4c  lse.# undef  SQL
46c0: 49 54 45 5f 4e 45 45 44 5f 45 52 52 5f 4e 41 4d  ITE_NEED_ERR_NAM
46d0: 45 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  E.#endif../*.** 
46e0: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 45 58  SQLITE_ENABLE_EX
46f0: 50 4c 41 49 4e 5f 43 4f 4d 4d 45 4e 54 53 20 69  PLAIN_COMMENTS i
4700: 73 20 69 6e 63 6f 6d 70 61 74 69 62 6c 65 20 77  s incompatible w
4710: 69 74 68 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ith SQLITE_OMIT_
4720: 45 58 50 4c 41 49 4e 0a 2a 2f 0a 23 69 66 64 65  EXPLAIN.*/.#ifde
4730: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 45 58  f SQLITE_OMIT_EX
4740: 50 4c 41 49 4e 0a 23 20 75 6e 64 65 66 20 53 51  PLAIN.# undef SQ
4750: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 45 58 50 4c  LITE_ENABLE_EXPL
4760: 41 49 4e 5f 43 4f 4d 4d 45 4e 54 53 0a 23 65 6e  AIN_COMMENTS.#en
4770: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72  dif../*.** Retur
4780: 6e 20 74 72 75 65 20 28 6e 6f 6e 2d 7a 65 72 6f  n true (non-zero
4790: 29 20 69 66 20 74 68 65 20 69 6e 70 75 74 20 69  ) if the input i
47a0: 73 20 61 6e 20 69 6e 74 65 67 65 72 20 74 68 61  s an integer tha
47b0: 74 20 69 73 20 74 6f 6f 20 6c 61 72 67 65 0a 2a  t is too large.*
47c0: 2a 20 74 6f 20 66 69 74 20 69 6e 20 33 32 2d 62  * to fit in 32-b
47d0: 69 74 73 2e 20 20 54 68 69 73 20 6d 61 63 72 6f  its.  This macro
47e0: 20 69 73 20 75 73 65 64 20 69 6e 73 69 64 65 20   is used inside 
47f0: 6f 66 20 76 61 72 69 6f 75 73 20 74 65 73 74 63  of various testc
4800: 61 73 65 28 29 0a 2a 2a 20 6d 61 63 72 6f 73 20  ase().** macros 
4810: 74 6f 20 76 65 72 69 66 79 20 74 68 61 74 20 77  to verify that w
4820: 65 20 68 61 76 65 20 74 65 73 74 65 64 20 53 51  e have tested SQ
4830: 4c 69 74 65 20 66 6f 72 20 6c 61 72 67 65 2d 66  Lite for large-f
4840: 69 6c 65 20 73 75 70 70 6f 72 74 2e 0a 2a 2f 0a  ile support..*/.
4850: 23 64 65 66 69 6e 65 20 49 53 5f 42 49 47 5f 49  #define IS_BIG_I
4860: 4e 54 28 58 29 20 20 28 28 28 58 29 26 7e 28 69  NT(X)  (((X)&~(i
4870: 36 34 29 30 78 66 66 66 66 66 66 66 66 29 21 3d  64)0xffffffff)!=
4880: 30 29 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6d 61  0)../*.** The ma
4890: 63 72 6f 20 75 6e 6c 69 6b 65 6c 79 28 29 20 69  cro unlikely() i
48a0: 73 20 61 20 68 69 6e 74 20 74 68 61 74 20 73 75  s a hint that su
48b0: 72 72 6f 75 6e 64 73 20 61 20 62 6f 6f 6c 65 61  rrounds a boolea
48c0: 6e 0a 2a 2a 20 65 78 70 72 65 73 73 69 6f 6e 20  n.** expression 
48d0: 74 68 61 74 20 69 73 20 75 73 75 61 6c 6c 79 20  that is usually 
48e0: 66 61 6c 73 65 2e 20 20 4d 61 63 72 6f 20 6c 69  false.  Macro li
48f0: 6b 65 6c 79 28 29 20 73 75 72 72 6f 75 6e 64 73  kely() surrounds
4900: 0a 2a 2a 20 61 20 62 6f 6f 6c 65 61 6e 20 65 78  .** a boolean ex
4910: 70 72 65 73 73 69 6f 6e 20 74 68 61 74 20 69 73  pression that is
4920: 20 75 73 75 61 6c 6c 79 20 74 72 75 65 2e 20 20   usually true.  
4930: 54 68 65 73 65 20 68 69 6e 74 73 20 63 6f 75 6c  These hints coul
4940: 64 2c 0a 2a 2a 20 69 6e 20 74 68 65 6f 72 79 2c  d,.** in theory,
4950: 20 62 65 20 75 73 65 64 20 62 79 20 74 68 65 20   be used by the 
4960: 63 6f 6d 70 69 6c 65 72 20 74 6f 20 67 65 6e 65  compiler to gene
4970: 72 61 74 65 20 62 65 74 74 65 72 20 63 6f 64 65  rate better code
4980: 2c 20 62 75 74 0a 2a 2a 20 63 75 72 72 65 6e 74  , but.** current
4990: 6c 79 20 74 68 65 79 20 61 72 65 20 6a 75 73 74  ly they are just
49a0: 20 63 6f 6d 6d 65 6e 74 73 20 66 6f 72 20 68 75   comments for hu
49b0: 6d 61 6e 20 72 65 61 64 65 72 73 2e 0a 2a 2f 0a  man readers..*/.
49c0: 23 64 65 66 69 6e 65 20 6c 69 6b 65 6c 79 28 58  #define likely(X
49d0: 29 20 20 20 20 28 58 29 0a 23 64 65 66 69 6e 65  )    (X).#define
49e0: 20 75 6e 6c 69 6b 65 6c 79 28 58 29 20 20 28 58   unlikely(X)  (X
49f0: 29 0a 0a 23 69 6e 63 6c 75 64 65 20 22 68 61 73  )..#include "has
4a00: 68 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20 22 70  h.h".#include "p
4a10: 61 72 73 65 2e 68 22 0a 23 69 6e 63 6c 75 64 65  arse.h".#include
4a20: 20 3c 73 74 64 69 6f 2e 68 3e 0a 23 69 6e 63 6c   <stdio.h>.#incl
4a30: 75 64 65 20 3c 73 74 64 6c 69 62 2e 68 3e 0a 23  ude <stdlib.h>.#
4a40: 69 6e 63 6c 75 64 65 20 3c 73 74 72 69 6e 67 2e  include <string.
4a50: 68 3e 0a 23 69 6e 63 6c 75 64 65 20 3c 61 73 73  h>.#include <ass
4a60: 65 72 74 2e 68 3e 0a 23 69 6e 63 6c 75 64 65 20  ert.h>.#include 
4a70: 3c 73 74 64 64 65 66 2e 68 3e 0a 0a 2f 2a 0a 2a  <stddef.h>../*.*
4a80: 2a 20 55 73 65 20 61 20 6d 61 63 72 6f 20 74 6f  * Use a macro to
4a90: 20 72 65 70 6c 61 63 65 20 6d 65 6d 63 70 79 28   replace memcpy(
4aa0: 29 20 69 66 20 63 6f 6d 70 69 6c 65 64 20 77 69  ) if compiled wi
4ab0: 74 68 20 53 51 4c 49 54 45 5f 49 4e 4c 49 4e 45  th SQLITE_INLINE
4ac0: 5f 4d 45 4d 43 50 59 2e 0a 2a 2a 20 54 68 69 73  _MEMCPY..** This
4ad0: 20 61 6c 6c 6f 77 73 20 62 65 74 74 65 72 20 6d   allows better m
4ae0: 65 61 73 75 72 65 6d 65 6e 74 73 20 6f 66 20 77  easurements of w
4af0: 68 65 72 65 20 6d 65 6d 63 70 79 28 29 20 69 73  here memcpy() is
4b00: 20 75 73 65 64 20 77 68 65 6e 20 72 75 6e 6e 69   used when runni
4b10: 6e 67 0a 2a 2a 20 63 61 63 68 65 67 72 69 6e 64  ng.** cachegrind
4b20: 2e 20 20 42 75 74 20 74 68 69 73 20 6d 61 63 72  .  But this macr
4b30: 6f 20 76 65 72 73 69 6f 6e 20 6f 66 20 6d 65 6d  o version of mem
4b40: 63 70 79 28 29 20 69 73 20 76 65 72 79 20 73 6c  cpy() is very sl
4b50: 6f 77 20 73 6f 20 69 74 0a 2a 2a 20 73 68 6f 75  ow so it.** shou
4b60: 6c 64 20 6e 6f 74 20 62 65 20 75 73 65 64 20 69  ld not be used i
4b70: 6e 20 70 72 6f 64 75 63 74 69 6f 6e 2e 20 20 54  n production.  T
4b80: 68 69 73 20 69 73 20 61 20 70 65 72 66 6f 72 6d  his is a perform
4b90: 61 6e 63 65 20 6d 65 61 73 75 72 65 6d 65 6e 74  ance measurement
4ba0: 0a 2a 2a 20 68 61 63 6b 20 6f 6e 6c 79 2e 0a 2a  .** hack only..*
4bb0: 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
4bc0: 49 4e 4c 49 4e 45 5f 4d 45 4d 43 50 59 0a 23 20  INLINE_MEMCPY.# 
4bd0: 64 65 66 69 6e 65 20 6d 65 6d 63 70 79 28 44 2c  define memcpy(D,
4be0: 53 2c 4e 29 20 7b 63 68 61 72 2a 78 78 64 3d 28  S,N) {char*xxd=(
4bf0: 63 68 61 72 2a 29 28 44 29 3b 63 6f 6e 73 74 20  char*)(D);const 
4c00: 63 68 61 72 2a 78 78 73 3d 28 63 6f 6e 73 74 20  char*xxs=(const 
4c10: 63 68 61 72 2a 29 28 53 29 3b 5c 0a 20 20 20 20  char*)(S);\.    
4c20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4c30: 20 20 20 20 69 6e 74 20 78 78 6e 3d 28 4e 29 3b      int xxn=(N);
4c40: 77 68 69 6c 65 28 78 78 6e 2d 2d 3e 30 29 2a 28  while(xxn-->0)*(
4c50: 78 78 64 2b 2b 29 3d 2a 28 78 78 73 2b 2b 29 3b  xxd++)=*(xxs++);
4c60: 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  }.#endif../*.** 
4c70: 49 66 20 63 6f 6d 70 69 6c 69 6e 67 20 66 6f 72  If compiling for
4c80: 20 61 20 70 72 6f 63 65 73 73 6f 72 20 74 68 61   a processor tha
4c90: 74 20 6c 61 63 6b 73 20 66 6c 6f 61 74 69 6e 67  t lacks floating
4ca0: 20 70 6f 69 6e 74 20 73 75 70 70 6f 72 74 2c 0a   point support,.
4cb0: 2a 2a 20 73 75 62 73 74 69 74 75 74 65 20 69 6e  ** substitute in
4cc0: 74 65 67 65 72 20 66 6f 72 20 66 6c 6f 61 74 69  teger for floati
4cd0: 6e 67 2d 70 6f 69 6e 74 0a 2a 2f 0a 23 69 66 64  ng-point.*/.#ifd
4ce0: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46  ef SQLITE_OMIT_F
4cf0: 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 0a 23 20  LOATING_POINT.# 
4d00: 64 65 66 69 6e 65 20 64 6f 75 62 6c 65 20 73 71  define double sq
4d10: 6c 69 74 65 5f 69 6e 74 36 34 0a 23 20 64 65 66  lite_int64.# def
4d20: 69 6e 65 20 66 6c 6f 61 74 20 73 71 6c 69 74 65  ine float sqlite
4d30: 5f 69 6e 74 36 34 0a 23 20 64 65 66 69 6e 65 20  _int64.# define 
4d40: 4c 4f 4e 47 44 4f 55 42 4c 45 5f 54 59 50 45 20  LONGDOUBLE_TYPE 
4d50: 73 71 6c 69 74 65 5f 69 6e 74 36 34 0a 23 20 69  sqlite_int64.# i
4d60: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 42 49 47  fndef SQLITE_BIG
4d70: 5f 44 42 4c 0a 23 20 20 20 64 65 66 69 6e 65 20  _DBL.#   define 
4d80: 53 51 4c 49 54 45 5f 42 49 47 5f 44 42 4c 20 28  SQLITE_BIG_DBL (
4d90: 28 28 73 71 6c 69 74 65 33 5f 69 6e 74 36 34 29  ((sqlite3_int64)
4da0: 31 29 3c 3c 35 30 29 0a 23 20 65 6e 64 69 66 0a  1)<<50).# endif.
4db0: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
4dc0: 4f 4d 49 54 5f 44 41 54 45 54 49 4d 45 5f 46 55  OMIT_DATETIME_FU
4dd0: 4e 43 53 20 31 0a 23 20 64 65 66 69 6e 65 20 53  NCS 1.# define S
4de0: 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 41 43 45  QLITE_OMIT_TRACE
4df0: 20 31 0a 23 20 75 6e 64 65 66 20 53 51 4c 49 54   1.# undef SQLIT
4e00: 45 5f 4d 49 58 45 44 5f 45 4e 44 49 41 4e 5f 36  E_MIXED_ENDIAN_6
4e10: 34 42 49 54 5f 46 4c 4f 41 54 0a 23 20 75 6e 64  4BIT_FLOAT.# und
4e20: 65 66 20 53 51 4c 49 54 45 5f 48 41 56 45 5f 49  ef SQLITE_HAVE_I
4e30: 53 4e 41 4e 0a 23 65 6e 64 69 66 0a 23 69 66 6e  SNAN.#endif.#ifn
4e40: 64 65 66 20 53 51 4c 49 54 45 5f 42 49 47 5f 44  def SQLITE_BIG_D
4e50: 42 4c 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  BL.# define SQLI
4e60: 54 45 5f 42 49 47 5f 44 42 4c 20 28 31 65 39 39  TE_BIG_DBL (1e99
4e70: 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  ).#endif../*.** 
4e80: 4f 4d 49 54 5f 54 45 4d 50 44 42 20 69 73 20 73  OMIT_TEMPDB is s
4e90: 65 74 20 74 6f 20 31 20 69 66 20 53 51 4c 49 54  et to 1 if SQLIT
4ea0: 45 5f 4f 4d 49 54 5f 54 45 4d 50 44 42 20 69 73  E_OMIT_TEMPDB is
4eb0: 20 64 65 66 69 6e 65 64 2c 20 6f 72 20 30 0a 2a   defined, or 0.*
4ec0: 2a 20 61 66 74 65 72 77 61 72 64 2e 20 48 61 76  * afterward. Hav
4ed0: 69 6e 67 20 74 68 69 73 20 6d 61 63 72 6f 20 61  ing this macro a
4ee0: 6c 6c 6f 77 73 20 75 73 20 74 6f 20 63 61 75 73  llows us to caus
4ef0: 65 20 74 68 65 20 43 20 63 6f 6d 70 69 6c 65 72  e the C compiler
4f00: 0a 2a 2a 20 74 6f 20 6f 6d 69 74 20 63 6f 64 65  .** to omit code
4f10: 20 75 73 65 64 20 62 79 20 54 45 4d 50 20 74 61   used by TEMP ta
4f20: 62 6c 65 73 20 77 69 74 68 6f 75 74 20 6d 65 73  bles without mes
4f30: 73 79 20 23 69 66 6e 64 65 66 20 73 74 61 74 65  sy #ifndef state
4f40: 6d 65 6e 74 73 2e 0a 2a 2f 0a 23 69 66 64 65 66  ments..*/.#ifdef
4f50: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 45 4d   SQLITE_OMIT_TEM
4f60: 50 44 42 0a 23 64 65 66 69 6e 65 20 4f 4d 49 54  PDB.#define OMIT
4f70: 5f 54 45 4d 50 44 42 20 31 0a 23 65 6c 73 65 0a  _TEMPDB 1.#else.
4f80: 23 64 65 66 69 6e 65 20 4f 4d 49 54 5f 54 45 4d  #define OMIT_TEM
4f90: 50 44 42 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a  PDB 0.#endif../*
4fa0: 0a 2a 2a 20 54 68 65 20 22 66 69 6c 65 20 66 6f  .** The "file fo
4fb0: 72 6d 61 74 22 20 6e 75 6d 62 65 72 20 69 73 20  rmat" number is 
4fc0: 61 6e 20 69 6e 74 65 67 65 72 20 74 68 61 74 20  an integer that 
4fd0: 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 77  is incremented w
4fe0: 68 65 6e 65 76 65 72 0a 2a 2a 20 74 68 65 20 56  henever.** the V
4ff0: 44 42 45 2d 6c 65 76 65 6c 20 66 69 6c 65 20 66  DBE-level file f
5000: 6f 72 6d 61 74 20 63 68 61 6e 67 65 73 2e 20 20  ormat changes.  
5010: 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61  The following ma
5020: 63 72 6f 73 20 64 65 66 69 6e 65 20 74 68 65 0a  cros define the.
5030: 2a 2a 20 74 68 65 20 64 65 66 61 75 6c 74 20 66  ** the default f
5040: 69 6c 65 20 66 6f 72 6d 61 74 20 66 6f 72 20 6e  ile format for n
5050: 65 77 20 64 61 74 61 62 61 73 65 73 20 61 6e 64  ew databases and
5060: 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 66 69 6c   the maximum fil
5070: 65 20 66 6f 72 6d 61 74 0a 2a 2a 20 74 68 61 74  e format.** that
5080: 20 74 68 65 20 6c 69 62 72 61 72 79 20 63 61 6e   the library can
5090: 20 72 65 61 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e   read..*/.#defin
50a0: 65 20 53 51 4c 49 54 45 5f 4d 41 58 5f 46 49 4c  e SQLITE_MAX_FIL
50b0: 45 5f 46 4f 52 4d 41 54 20 34 0a 23 69 66 6e 64  E_FORMAT 4.#ifnd
50c0: 65 66 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c  ef SQLITE_DEFAUL
50d0: 54 5f 46 49 4c 45 5f 46 4f 52 4d 41 54 0a 23 20  T_FILE_FORMAT.# 
50e0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 45  define SQLITE_DE
50f0: 46 41 55 4c 54 5f 46 49 4c 45 5f 46 4f 52 4d 41  FAULT_FILE_FORMA
5100: 54 20 34 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  T 4.#endif../*.*
5110: 2a 20 44 65 74 65 72 6d 69 6e 65 20 77 68 65 74  * Determine whet
5120: 68 65 72 20 74 72 69 67 67 65 72 73 20 61 72 65  her triggers are
5130: 20 72 65 63 75 72 73 69 76 65 20 62 79 20 64 65   recursive by de
5140: 66 61 75 6c 74 2e 20 20 54 68 69 73 20 63 61 6e  fault.  This can
5150: 20 62 65 0a 2a 2a 20 63 68 61 6e 67 65 64 20 61   be.** changed a
5160: 74 20 72 75 6e 2d 74 69 6d 65 20 75 73 69 6e 67  t run-time using
5170: 20 61 20 70 72 61 67 6d 61 2e 0a 2a 2f 0a 23 69   a pragma..*/.#i
5180: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 44 45 46  fndef SQLITE_DEF
5190: 41 55 4c 54 5f 52 45 43 55 52 53 49 56 45 5f 54  AULT_RECURSIVE_T
51a0: 52 49 47 47 45 52 53 0a 23 20 64 65 66 69 6e 65  RIGGERS.# define
51b0: 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f   SQLITE_DEFAULT_
51c0: 52 45 43 55 52 53 49 56 45 5f 54 52 49 47 47 45  RECURSIVE_TRIGGE
51d0: 52 53 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  RS 0.#endif../*.
51e0: 2a 2a 20 50 72 6f 76 69 64 65 20 61 20 64 65 66  ** Provide a def
51f0: 61 75 6c 74 20 76 61 6c 75 65 20 66 6f 72 20 53  ault value for S
5200: 51 4c 49 54 45 5f 54 45 4d 50 5f 53 54 4f 52 45  QLITE_TEMP_STORE
5210: 20 69 6e 20 63 61 73 65 20 69 74 20 69 73 20 6e   in case it is n
5220: 6f 74 20 73 70 65 63 69 66 69 65 64 0a 2a 2a 20  ot specified.** 
5230: 6f 6e 20 74 68 65 20 63 6f 6d 6d 61 6e 64 2d 6c  on the command-l
5240: 69 6e 65 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53  ine.*/.#ifndef S
5250: 51 4c 49 54 45 5f 54 45 4d 50 5f 53 54 4f 52 45  QLITE_TEMP_STORE
5260: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
5270: 5f 54 45 4d 50 5f 53 54 4f 52 45 20 31 0a 23 65  _TEMP_STORE 1.#e
5280: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 66 20 6e  ndif../*.** If n
5290: 6f 20 76 61 6c 75 65 20 68 61 73 20 62 65 65 6e  o value has been
52a0: 20 70 72 6f 76 69 64 65 64 20 66 6f 72 20 53 51   provided for SQ
52b0: 4c 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f  LITE_MAX_WORKER_
52c0: 54 48 52 45 41 44 53 2c 20 6f 72 20 69 66 0a 2a  THREADS, or if.*
52d0: 2a 20 53 51 4c 49 54 45 5f 54 45 4d 50 5f 53 54  * SQLITE_TEMP_ST
52e0: 4f 52 45 20 69 73 20 73 65 74 20 74 6f 20 33 20  ORE is set to 3 
52f0: 28 6e 65 76 65 72 20 75 73 65 20 74 65 6d 70 6f  (never use tempo
5300: 72 61 72 79 20 66 69 6c 65 73 29 2c 20 73 65 74  rary files), set
5310: 20 69 74 0a 2a 2a 20 74 6f 20 7a 65 72 6f 2e 0a   it.** to zero..
5320: 2a 2f 0a 23 69 66 20 53 51 4c 49 54 45 5f 54 45  */.#if SQLITE_TE
5330: 4d 50 5f 53 54 4f 52 45 3d 3d 33 20 7c 7c 20 53  MP_STORE==3 || S
5340: 51 4c 49 54 45 5f 54 48 52 45 41 44 53 41 46 45  QLITE_THREADSAFE
5350: 3d 3d 30 0a 23 20 75 6e 64 65 66 20 53 51 4c 49  ==0.# undef SQLI
5360: 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54 48  TE_MAX_WORKER_TH
5370: 52 45 41 44 53 0a 23 20 64 65 66 69 6e 65 20 53  READS.# define S
5380: 51 4c 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52  QLITE_MAX_WORKER
5390: 5f 54 48 52 45 41 44 53 20 30 0a 23 65 6e 64 69  _THREADS 0.#endi
53a0: 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  f.#ifndef SQLITE
53b0: 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54 48 52 45  _MAX_WORKER_THRE
53c0: 41 44 53 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  ADS.# define SQL
53d0: 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54  ITE_MAX_WORKER_T
53e0: 48 52 45 41 44 53 20 38 0a 23 65 6e 64 69 66 0a  HREADS 8.#endif.
53f0: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 44  #ifndef SQLITE_D
5400: 45 46 41 55 4c 54 5f 57 4f 52 4b 45 52 5f 54 48  EFAULT_WORKER_TH
5410: 52 45 41 44 53 0a 23 20 64 65 66 69 6e 65 20 53  READS.# define S
5420: 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 57 4f  QLITE_DEFAULT_WO
5430: 52 4b 45 52 5f 54 48 52 45 41 44 53 20 30 0a 23  RKER_THREADS 0.#
5440: 65 6e 64 69 66 0a 23 69 66 20 53 51 4c 49 54 45  endif.#if SQLITE
5450: 5f 44 45 46 41 55 4c 54 5f 57 4f 52 4b 45 52 5f  _DEFAULT_WORKER_
5460: 54 48 52 45 41 44 53 3e 53 51 4c 49 54 45 5f 4d  THREADS>SQLITE_M
5470: 41 58 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41 44  AX_WORKER_THREAD
5480: 53 0a 23 20 75 6e 64 65 66 20 53 51 4c 49 54 45  S.# undef SQLITE
5490: 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54 48 52 45  _MAX_WORKER_THRE
54a0: 41 44 53 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  ADS.# define SQL
54b0: 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54  ITE_MAX_WORKER_T
54c0: 48 52 45 41 44 53 20 53 51 4c 49 54 45 5f 44 45  HREADS SQLITE_DE
54d0: 46 41 55 4c 54 5f 57 4f 52 4b 45 52 5f 54 48 52  FAULT_WORKER_THR
54e0: 45 41 44 53 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  EADS.#endif../*.
54f0: 2a 2a 20 54 68 65 20 64 65 66 61 75 6c 74 20 69  ** The default i
5500: 6e 69 74 69 61 6c 20 61 6c 6c 6f 63 61 74 69 6f  nitial allocatio
5510: 6e 20 66 6f 72 20 74 68 65 20 70 61 67 65 63 61  n for the pageca
5520: 63 68 65 20 77 68 65 6e 20 75 73 69 6e 67 20 73  che when using s
5530: 65 70 61 72 61 74 65 0a 2a 2a 20 70 61 67 65 63  eparate.** pagec
5540: 61 63 68 65 73 20 66 6f 72 20 65 61 63 68 20 64  aches for each d
5550: 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
5560: 6f 6e 2e 20 20 41 20 70 6f 73 69 74 69 76 65 20  on.  A positive 
5570: 6e 75 6d 62 65 72 20 69 73 20 74 68 65 0a 2a 2a  number is the.**
5580: 20 6e 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73   number of pages
5590: 2e 20 20 41 20 6e 65 67 61 74 69 76 65 20 6e 75  .  A negative nu
55a0: 6d 62 65 72 20 4e 20 74 72 61 6e 73 6c 61 74 69  mber N translati
55b0: 6f 6e 73 20 6d 65 61 6e 73 20 74 68 61 74 20 61  ons means that a
55c0: 20 62 75 66 66 65 72 0a 2a 2a 20 6f 66 20 2d 31   buffer.** of -1
55d0: 30 32 34 2a 4e 20 62 79 74 65 73 20 69 73 20 61  024*N bytes is a
55e0: 6c 6c 6f 63 61 74 65 64 20 61 6e 64 20 75 73 65  llocated and use
55f0: 64 20 66 6f 72 20 61 73 20 6d 61 6e 79 20 70 61  d for as many pa
5600: 67 65 73 20 61 73 20 69 74 20 77 69 6c 6c 20 68  ges as it will h
5610: 6f 6c 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 64  old..**.** The d
5620: 65 66 61 75 6c 74 20 76 61 6c 75 65 20 6f 66 20  efault value of 
5630: 22 32 30 22 20 77 61 73 20 63 68 6f 6f 73 65 6e  "20" was choosen
5640: 20 74 6f 20 6d 69 6e 69 6d 69 7a 65 20 74 68 65   to minimize the
5650: 20 72 75 6e 2d 74 69 6d 65 20 6f 66 20 74 68 65   run-time of the
5660: 0a 2a 2a 20 73 70 65 65 64 74 65 73 74 31 20 74  .** speedtest1 t
5670: 65 73 74 20 70 72 6f 67 72 61 6d 20 77 69 74 68  est program with
5680: 20 6f 70 74 69 6f 6e 73 3a 20 2d 2d 73 68 72 69   options: --shri
5690: 6e 6b 2d 6d 65 6d 6f 72 79 20 2d 2d 72 65 70 72  nk-memory --repr
56a0: 65 70 61 72 65 0a 2a 2f 0a 23 69 66 6e 64 65 66  epare.*/.#ifndef
56b0: 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f   SQLITE_DEFAULT_
56c0: 50 43 41 43 48 45 5f 49 4e 49 54 53 5a 0a 23 20  PCACHE_INITSZ.# 
56d0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 45  define SQLITE_DE
56e0: 46 41 55 4c 54 5f 50 43 41 43 48 45 5f 49 4e 49  FAULT_PCACHE_INI
56f0: 54 53 5a 20 32 30 0a 23 65 6e 64 69 66 0a 0a 2f  TSZ 20.#endif../
5700: 2a 0a 2a 2a 20 44 65 66 61 75 6c 74 20 76 61 6c  *.** Default val
5710: 75 65 20 66 6f 72 20 74 68 65 20 53 51 4c 49 54  ue for the SQLIT
5720: 45 5f 43 4f 4e 46 49 47 5f 53 4f 52 54 45 52 52  E_CONFIG_SORTERR
5730: 45 46 5f 53 49 5a 45 20 6f 70 74 69 6f 6e 2e 0a  EF_SIZE option..
5740: 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  */.#ifndef SQLIT
5750: 45 5f 44 45 46 41 55 4c 54 5f 53 4f 52 54 45 52  E_DEFAULT_SORTER
5760: 52 45 46 5f 53 49 5a 45 0a 23 20 64 65 66 69 6e  REF_SIZE.# defin
5770: 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54  e SQLITE_DEFAULT
5780: 5f 53 4f 52 54 45 52 52 45 46 5f 53 49 5a 45 20  _SORTERREF_SIZE 
5790: 30 78 37 66 66 66 66 66 66 66 0a 23 65 6e 64 69  0x7fffffff.#endi
57a0: 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 63 6f 6d  f../*.** The com
57b0: 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e  pile-time option
57c0: 73 20 53 51 4c 49 54 45 5f 4d 4d 41 50 5f 52 45  s SQLITE_MMAP_RE
57d0: 41 44 57 52 49 54 45 20 61 6e 64 20 0a 2a 2a 20  ADWRITE and .** 
57e0: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 42 41  SQLITE_ENABLE_BA
57f0: 54 43 48 5f 41 54 4f 4d 49 43 5f 57 52 49 54 45  TCH_ATOMIC_WRITE
5800: 20 61 72 65 20 6e 6f 74 20 63 6f 6d 70 61 74 69   are not compati
5810: 62 6c 65 20 77 69 74 68 20 6f 6e 65 20 61 6e 6f  ble with one ano
5820: 74 68 65 72 2e 0a 2a 2a 20 59 6f 75 20 6d 75 73  ther..** You mus
5830: 74 20 63 68 6f 6f 73 65 20 6f 6e 65 20 6f 72 20  t choose one or 
5840: 74 68 65 20 6f 74 68 65 72 20 28 6f 72 20 6e 65  the other (or ne
5850: 69 74 68 65 72 29 20 62 75 74 20 6e 6f 74 20 62  ither) but not b
5860: 6f 74 68 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69  oth..*/.#if defi
5870: 6e 65 64 28 53 51 4c 49 54 45 5f 4d 4d 41 50 5f  ned(SQLITE_MMAP_
5880: 52 45 41 44 57 52 49 54 45 29 20 26 26 20 64 65  READWRITE) && de
5890: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41  fined(SQLITE_ENA
58a0: 42 4c 45 5f 42 41 54 43 48 5f 41 54 4f 4d 49 43  BLE_BATCH_ATOMIC
58b0: 5f 57 52 49 54 45 29 0a 23 65 72 72 6f 72 20 43  _WRITE).#error C
58c0: 61 6e 6e 6f 74 20 75 73 65 20 62 6f 74 68 20 53  annot use both S
58d0: 51 4c 49 54 45 5f 4d 4d 41 50 5f 52 45 41 44 57  QLITE_MMAP_READW
58e0: 52 49 54 45 20 61 6e 64 20 53 51 4c 49 54 45 5f  RITE and SQLITE_
58f0: 45 4e 41 42 4c 45 5f 42 41 54 43 48 5f 41 54 4f  ENABLE_BATCH_ATO
5900: 4d 49 43 5f 57 52 49 54 45 0a 23 65 6e 64 69 66  MIC_WRITE.#endif
5910: 0a 0a 2f 2a 0a 2a 2a 20 47 43 43 20 64 6f 65 73  ../*.** GCC does
5920: 20 6e 6f 74 20 64 65 66 69 6e 65 20 74 68 65 20   not define the 
5930: 6f 66 66 73 65 74 6f 66 28 29 20 6d 61 63 72 6f  offsetof() macro
5940: 20 73 6f 20 77 65 27 6c 6c 20 68 61 76 65 20 74   so we'll have t
5950: 6f 20 64 6f 20 69 74 0a 2a 2a 20 6f 75 72 73 65  o do it.** ourse
5960: 6c 76 65 73 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66  lves..*/.#ifndef
5970: 20 6f 66 66 73 65 74 6f 66 0a 23 64 65 66 69 6e   offsetof.#defin
5980: 65 20 6f 66 66 73 65 74 6f 66 28 53 54 52 55 43  e offsetof(STRUC
5990: 54 55 52 45 2c 46 49 45 4c 44 29 20 28 28 69 6e  TURE,FIELD) ((in
59a0: 74 29 28 28 63 68 61 72 2a 29 26 28 28 53 54 52  t)((char*)&((STR
59b0: 55 43 54 55 52 45 2a 29 30 29 2d 3e 46 49 45 4c  UCTURE*)0)->FIEL
59c0: 44 29 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  D)).#endif../*.*
59d0: 2a 20 4d 61 63 72 6f 73 20 74 6f 20 63 6f 6d 70  * Macros to comp
59e0: 75 74 65 20 6d 69 6e 69 6d 75 6d 20 61 6e 64 20  ute minimum and 
59f0: 6d 61 78 69 6d 75 6d 20 6f 66 20 74 77 6f 20 6e  maximum of two n
5a00: 75 6d 62 65 72 73 2e 0a 2a 2f 0a 23 69 66 6e 64  umbers..*/.#ifnd
5a10: 65 66 20 4d 49 4e 0a 23 20 64 65 66 69 6e 65 20  ef MIN.# define 
5a20: 4d 49 4e 28 41 2c 42 29 20 28 28 41 29 3c 28 42  MIN(A,B) ((A)<(B
5a30: 29 3f 28 41 29 3a 28 42 29 29 0a 23 65 6e 64 69  )?(A):(B)).#endi
5a40: 66 0a 23 69 66 6e 64 65 66 20 4d 41 58 0a 23 20  f.#ifndef MAX.# 
5a50: 64 65 66 69 6e 65 20 4d 41 58 28 41 2c 42 29 20  define MAX(A,B) 
5a60: 28 28 41 29 3e 28 42 29 3f 28 41 29 3a 28 42 29  ((A)>(B)?(A):(B)
5a70: 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  ).#endif../*.** 
5a80: 53 77 61 70 20 74 77 6f 20 6f 62 6a 65 63 74 73  Swap two objects
5a90: 20 6f 66 20 74 79 70 65 20 54 59 50 45 2e 0a 2a   of type TYPE..*
5aa0: 2f 0a 23 64 65 66 69 6e 65 20 53 57 41 50 28 54  /.#define SWAP(T
5ab0: 59 50 45 2c 41 2c 42 29 20 7b 54 59 50 45 20 74  YPE,A,B) {TYPE t
5ac0: 3d 41 3b 20 41 3d 42 3b 20 42 3d 74 3b 7d 0a 0a  =A; A=B; B=t;}..
5ad0: 2f 2a 0a 2a 2a 20 43 68 65 63 6b 20 74 6f 20 73  /*.** Check to s
5ae0: 65 65 20 69 66 20 74 68 69 73 20 6d 61 63 68 69  ee if this machi
5af0: 6e 65 20 75 73 65 73 20 45 42 43 44 49 43 2e 20  ne uses EBCDIC. 
5b00: 20 28 59 65 73 2c 20 62 65 6c 69 65 76 65 20 69   (Yes, believe i
5b10: 74 20 6f 72 0a 2a 2a 20 6e 6f 74 2c 20 74 68 65  t or.** not, the
5b20: 72 65 20 61 72 65 20 73 74 69 6c 6c 20 6d 61 63  re are still mac
5b30: 68 69 6e 65 73 20 6f 75 74 20 74 68 65 72 65 20  hines out there 
5b40: 74 68 61 74 20 75 73 65 20 45 42 43 44 49 43 2e  that use EBCDIC.
5b50: 29 0a 2a 2f 0a 23 69 66 20 27 41 27 20 3d 3d 20  ).*/.#if 'A' == 
5b60: 27 5c 33 30 31 27 0a 23 20 64 65 66 69 6e 65 20  '\301'.# define 
5b70: 53 51 4c 49 54 45 5f 45 42 43 44 49 43 20 31 0a  SQLITE_EBCDIC 1.
5b80: 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 53  #else.# define S
5b90: 51 4c 49 54 45 5f 41 53 43 49 49 20 31 0a 23 65  QLITE_ASCII 1.#e
5ba0: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 6e 74 65  ndif../*.** Inte
5bb0: 67 65 72 73 20 6f 66 20 6b 6e 6f 77 6e 20 73 69  gers of known si
5bc0: 7a 65 73 2e 20 20 54 68 65 73 65 20 74 79 70 65  zes.  These type
5bd0: 64 65 66 73 20 6d 69 67 68 74 20 63 68 61 6e 67  defs might chang
5be0: 65 20 66 6f 72 20 61 72 63 68 69 74 65 63 74 75  e for architectu
5bf0: 72 65 73 0a 2a 2a 20 77 68 65 72 65 20 74 68 65  res.** where the
5c00: 20 73 69 7a 65 73 20 76 65 72 79 2e 20 20 50 72   sizes very.  Pr
5c10: 65 70 72 6f 63 65 73 73 6f 72 20 6d 61 63 72 6f  eprocessor macro
5c20: 73 20 61 72 65 20 61 76 61 69 6c 61 62 6c 65 20  s are available 
5c30: 73 6f 20 74 68 61 74 20 74 68 65 0a 2a 2a 20 74  so that the.** t
5c40: 79 70 65 73 20 63 61 6e 20 62 65 20 63 6f 6e 76  ypes can be conv
5c50: 65 6e 69 65 6e 74 6c 79 20 72 65 64 65 66 69 6e  eniently redefin
5c60: 65 64 20 61 74 20 63 6f 6d 70 69 6c 65 2d 74 79  ed at compile-ty
5c70: 70 65 2e 20 20 4c 69 6b 65 20 74 68 69 73 3a 0a  pe.  Like this:.
5c80: 2a 2a 0a 2a 2a 20 20 20 20 20 20 20 20 20 63 63  **.**         cc
5c90: 20 27 2d 44 55 49 4e 54 50 54 52 5f 54 59 50 45   '-DUINTPTR_TYPE
5ca0: 3d 6c 6f 6e 67 20 6c 6f 6e 67 20 69 6e 74 27 20  =long long int' 
5cb0: 2e 2e 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 55  ....*/.#ifndef U
5cc0: 49 4e 54 33 32 5f 54 59 50 45 0a 23 20 69 66 64  INT32_TYPE.# ifd
5cd0: 65 66 20 48 41 56 45 5f 55 49 4e 54 33 32 5f 54  ef HAVE_UINT32_T
5ce0: 0a 23 20 20 64 65 66 69 6e 65 20 55 49 4e 54 33  .#  define UINT3
5cf0: 32 5f 54 59 50 45 20 75 69 6e 74 33 32 5f 74 0a  2_TYPE uint32_t.
5d00: 23 20 65 6c 73 65 0a 23 20 20 64 65 66 69 6e 65  # else.#  define
5d10: 20 55 49 4e 54 33 32 5f 54 59 50 45 20 75 6e 73   UINT32_TYPE uns
5d20: 69 67 6e 65 64 20 69 6e 74 0a 23 20 65 6e 64 69  igned int.# endi
5d30: 66 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66  f.#endif.#ifndef
5d40: 20 55 49 4e 54 31 36 5f 54 59 50 45 0a 23 20 69   UINT16_TYPE.# i
5d50: 66 64 65 66 20 48 41 56 45 5f 55 49 4e 54 31 36  fdef HAVE_UINT16
5d60: 5f 54 0a 23 20 20 64 65 66 69 6e 65 20 55 49 4e  _T.#  define UIN
5d70: 54 31 36 5f 54 59 50 45 20 75 69 6e 74 31 36 5f  T16_TYPE uint16_
5d80: 74 0a 23 20 65 6c 73 65 0a 23 20 20 64 65 66 69  t.# else.#  defi
5d90: 6e 65 20 55 49 4e 54 31 36 5f 54 59 50 45 20 75  ne UINT16_TYPE u
5da0: 6e 73 69 67 6e 65 64 20 73 68 6f 72 74 20 69 6e  nsigned short in
5db0: 74 0a 23 20 65 6e 64 69 66 0a 23 65 6e 64 69 66  t.# endif.#endif
5dc0: 0a 23 69 66 6e 64 65 66 20 49 4e 54 31 36 5f 54  .#ifndef INT16_T
5dd0: 59 50 45 0a 23 20 69 66 64 65 66 20 48 41 56 45  YPE.# ifdef HAVE
5de0: 5f 49 4e 54 31 36 5f 54 0a 23 20 20 64 65 66 69  _INT16_T.#  defi
5df0: 6e 65 20 49 4e 54 31 36 5f 54 59 50 45 20 69 6e  ne INT16_TYPE in
5e00: 74 31 36 5f 74 0a 23 20 65 6c 73 65 0a 23 20 20  t16_t.# else.#  
5e10: 64 65 66 69 6e 65 20 49 4e 54 31 36 5f 54 59 50  define INT16_TYP
5e20: 45 20 73 68 6f 72 74 20 69 6e 74 0a 23 20 65 6e  E short int.# en
5e30: 64 69 66 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64  dif.#endif.#ifnd
5e40: 65 66 20 55 49 4e 54 38 5f 54 59 50 45 0a 23 20  ef UINT8_TYPE.# 
5e50: 69 66 64 65 66 20 48 41 56 45 5f 55 49 4e 54 38  ifdef HAVE_UINT8
5e60: 5f 54 0a 23 20 20 64 65 66 69 6e 65 20 55 49 4e  _T.#  define UIN
5e70: 54 38 5f 54 59 50 45 20 75 69 6e 74 38 5f 74 0a  T8_TYPE uint8_t.
5e80: 23 20 65 6c 73 65 0a 23 20 20 64 65 66 69 6e 65  # else.#  define
5e90: 20 55 49 4e 54 38 5f 54 59 50 45 20 75 6e 73 69   UINT8_TYPE unsi
5ea0: 67 6e 65 64 20 63 68 61 72 0a 23 20 65 6e 64 69  gned char.# endi
5eb0: 66 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66  f.#endif.#ifndef
5ec0: 20 49 4e 54 38 5f 54 59 50 45 0a 23 20 69 66 64   INT8_TYPE.# ifd
5ed0: 65 66 20 48 41 56 45 5f 49 4e 54 38 5f 54 0a 23  ef HAVE_INT8_T.#
5ee0: 20 20 64 65 66 69 6e 65 20 49 4e 54 38 5f 54 59    define INT8_TY
5ef0: 50 45 20 69 6e 74 38 5f 74 0a 23 20 65 6c 73 65  PE int8_t.# else
5f00: 0a 23 20 20 64 65 66 69 6e 65 20 49 4e 54 38 5f  .#  define INT8_
5f10: 54 59 50 45 20 73 69 67 6e 65 64 20 63 68 61 72  TYPE signed char
5f20: 0a 23 20 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a  .# endif.#endif.
5f30: 23 69 66 6e 64 65 66 20 4c 4f 4e 47 44 4f 55 42  #ifndef LONGDOUB
5f40: 4c 45 5f 54 59 50 45 0a 23 20 64 65 66 69 6e 65  LE_TYPE.# define
5f50: 20 4c 4f 4e 47 44 4f 55 42 4c 45 5f 54 59 50 45   LONGDOUBLE_TYPE
5f60: 20 6c 6f 6e 67 20 64 6f 75 62 6c 65 0a 23 65 6e   long double.#en
5f70: 64 69 66 0a 74 79 70 65 64 65 66 20 73 71 6c 69  dif.typedef sqli
5f80: 74 65 5f 69 6e 74 36 34 20 69 36 34 3b 20 20 20  te_int64 i64;   
5f90: 20 20 20 20 20 20 20 2f 2a 20 38 2d 62 79 74 65         /* 8-byte
5fa0: 20 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20   signed integer 
5fb0: 2a 2f 0a 74 79 70 65 64 65 66 20 73 71 6c 69 74  */.typedef sqlit
5fc0: 65 5f 75 69 6e 74 36 34 20 75 36 34 3b 20 20 20  e_uint64 u64;   
5fd0: 20 20 20 20 20 20 2f 2a 20 38 2d 62 79 74 65 20        /* 8-byte 
5fe0: 75 6e 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72  unsigned integer
5ff0: 20 2a 2f 0a 74 79 70 65 64 65 66 20 55 49 4e 54   */.typedef UINT
6000: 33 32 5f 54 59 50 45 20 75 33 32 3b 20 20 20 20  32_TYPE u32;    
6010: 20 20 20 20 20 20 20 2f 2a 20 34 2d 62 79 74 65         /* 4-byte
6020: 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 65 67 65   unsigned intege
6030: 72 20 2a 2f 0a 74 79 70 65 64 65 66 20 55 49 4e  r */.typedef UIN
6040: 54 31 36 5f 54 59 50 45 20 75 31 36 3b 20 20 20  T16_TYPE u16;   
6050: 20 20 20 20 20 20 20 20 2f 2a 20 32 2d 62 79 74          /* 2-byt
6060: 65 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 65 67  e unsigned integ
6070: 65 72 20 2a 2f 0a 74 79 70 65 64 65 66 20 49 4e  er */.typedef IN
6080: 54 31 36 5f 54 59 50 45 20 69 31 36 3b 20 20 20  T16_TYPE i16;   
6090: 20 20 20 20 20 20 20 20 20 2f 2a 20 32 2d 62 79           /* 2-by
60a0: 74 65 20 73 69 67 6e 65 64 20 69 6e 74 65 67 65  te signed intege
60b0: 72 20 2a 2f 0a 74 79 70 65 64 65 66 20 55 49 4e  r */.typedef UIN
60c0: 54 38 5f 54 59 50 45 20 75 38 3b 20 20 20 20 20  T8_TYPE u8;     
60d0: 20 20 20 20 20 20 20 20 2f 2a 20 31 2d 62 79 74          /* 1-byt
60e0: 65 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 65 67  e unsigned integ
60f0: 65 72 20 2a 2f 0a 74 79 70 65 64 65 66 20 49 4e  er */.typedef IN
6100: 54 38 5f 54 59 50 45 20 69 38 3b 20 20 20 20 20  T8_TYPE i8;     
6110: 20 20 20 20 20 20 20 20 20 2f 2a 20 31 2d 62 79           /* 1-by
6120: 74 65 20 73 69 67 6e 65 64 20 69 6e 74 65 67 65  te signed intege
6130: 72 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 53 51 4c 49  r */../*.** SQLI
6140: 54 45 5f 4d 41 58 5f 55 33 32 20 69 73 20 61 20  TE_MAX_U32 is a 
6150: 75 36 34 20 63 6f 6e 73 74 61 6e 74 20 74 68 61  u64 constant tha
6160: 74 20 69 73 20 74 68 65 20 6d 61 78 69 6d 75 6d  t is the maximum
6170: 20 75 36 34 20 76 61 6c 75 65 0a 2a 2a 20 74 68   u64 value.** th
6180: 61 74 20 63 61 6e 20 62 65 20 73 74 6f 72 65 64  at can be stored
6190: 20 69 6e 20 61 20 75 33 32 20 77 69 74 68 6f 75   in a u32 withou
61a0: 74 20 6c 6f 73 73 20 6f 66 20 64 61 74 61 2e 20  t loss of data. 
61b0: 20 54 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69 73   The value.** is
61c0: 20 30 78 30 30 30 30 30 30 30 30 66 66 66 66 66   0x00000000fffff
61d0: 66 66 66 2e 20 20 42 75 74 20 62 65 63 61 75 73  fff.  But becaus
61e0: 65 20 6f 66 20 71 75 69 72 6b 73 20 6f 66 20 73  e of quirks of s
61f0: 6f 6d 65 20 63 6f 6d 70 69 6c 65 72 73 2c 20 77  ome compilers, w
6200: 65 0a 2a 2a 20 68 61 76 65 20 74 6f 20 73 70 65  e.** have to spe
6210: 63 69 66 79 20 74 68 65 20 76 61 6c 75 65 20 69  cify the value i
6220: 6e 20 74 68 65 20 6c 65 73 73 20 69 6e 74 75 69  n the less intui
6230: 74 69 76 65 20 6d 61 6e 6e 65 72 20 73 68 6f 77  tive manner show
6240: 6e 3a 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  n:.*/.#define SQ
6250: 4c 49 54 45 5f 4d 41 58 5f 55 33 32 20 20 28 28  LITE_MAX_U32  ((
6260: 28 28 75 36 34 29 31 29 3c 3c 33 32 29 2d 31 29  ((u64)1)<<32)-1)
6270: 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 64 61 74 61  ../*.** The data
6280: 74 79 70 65 20 75 73 65 64 20 74 6f 20 73 74 6f  type used to sto
6290: 72 65 20 65 73 74 69 6d 61 74 65 73 20 6f 66 20  re estimates of 
62a0: 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f  the number of ro
62b0: 77 73 20 69 6e 20 61 0a 2a 2a 20 74 61 62 6c 65  ws in a.** table
62c0: 20 6f 72 20 69 6e 64 65 78 2e 20 20 54 68 69 73   or index.  This
62d0: 20 69 73 20 61 6e 20 75 6e 73 69 67 6e 65 64 20   is an unsigned 
62e0: 69 6e 74 65 67 65 72 20 74 79 70 65 2e 20 20 46  integer type.  F
62f0: 6f 72 20 39 39 2e 39 25 20 6f 66 0a 2a 2a 20 74  or 99.9% of.** t
6300: 68 65 20 77 6f 72 6c 64 2c 20 61 20 33 32 2d 62  he world, a 32-b
6310: 69 74 20 69 6e 74 65 67 65 72 20 69 73 20 73 75  it integer is su
6320: 66 66 69 63 69 65 6e 74 2e 20 20 42 75 74 20 61  fficient.  But a
6330: 20 36 34 2d 62 69 74 20 69 6e 74 65 67 65 72 0a   64-bit integer.
6340: 2a 2a 20 63 61 6e 20 62 65 20 75 73 65 64 20 61  ** can be used a
6350: 74 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 69  t compile-time i
6360: 66 20 64 65 73 69 72 65 64 2e 0a 2a 2f 0a 23 69  f desired..*/.#i
6370: 66 64 65 66 20 53 51 4c 49 54 45 5f 36 34 42 49  fdef SQLITE_64BI
6380: 54 5f 53 54 41 54 53 0a 20 74 79 70 65 64 65 66  T_STATS. typedef
6390: 20 75 36 34 20 74 52 6f 77 63 6e 74 3b 20 20 20   u64 tRowcnt;   
63a0: 20 2f 2a 20 36 34 2d 62 69 74 20 6f 6e 6c 79 20   /* 64-bit only 
63b0: 69 66 20 72 65 71 75 65 73 74 65 64 20 61 74 20  if requested at 
63c0: 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 2a 2f 0a  compile-time */.
63d0: 23 65 6c 73 65 0a 20 74 79 70 65 64 65 66 20 75  #else. typedef u
63e0: 33 32 20 74 52 6f 77 63 6e 74 3b 20 20 20 20 2f  32 tRowcnt;    /
63f0: 2a 20 33 32 2d 62 69 74 20 69 73 20 74 68 65 20  * 32-bit is the 
6400: 64 65 66 61 75 6c 74 20 2a 2f 0a 23 65 6e 64 69  default */.#endi
6410: 66 0a 0a 2f 2a 0a 2a 2a 20 45 73 74 69 6d 61 74  f../*.** Estimat
6420: 65 64 20 71 75 61 6e 74 69 74 69 65 73 20 75 73  ed quantities us
6430: 65 64 20 66 6f 72 20 71 75 65 72 79 20 70 6c 61  ed for query pla
6440: 6e 6e 69 6e 67 20 61 72 65 20 73 74 6f 72 65 64  nning are stored
6450: 20 61 73 20 31 36 2d 62 69 74 0a 2a 2a 20 6c 6f   as 16-bit.** lo
6460: 67 61 72 69 74 68 6d 73 2e 20 20 46 6f 72 20 71  garithms.  For q
6470: 75 61 6e 74 69 74 79 20 58 2c 20 74 68 65 20 76  uantity X, the v
6480: 61 6c 75 65 20 73 74 6f 72 65 64 20 69 73 20 31  alue stored is 1
6490: 30 2a 6c 6f 67 32 28 58 29 2e 20 20 54 68 69 73  0*log2(X).  This
64a0: 0a 2a 2a 20 67 69 76 65 73 20 61 20 70 6f 73 73  .** gives a poss
64b0: 69 62 6c 65 20 72 61 6e 67 65 20 6f 66 20 76 61  ible range of va
64c0: 6c 75 65 73 20 6f 66 20 61 70 70 72 6f 78 69 6d  lues of approxim
64d0: 61 74 65 6c 79 20 31 2e 30 65 39 38 36 20 74 6f  ately 1.0e986 to
64e0: 20 31 65 2d 39 38 36 2e 0a 2a 2a 20 42 75 74 20   1e-986..** But 
64f0: 74 68 65 20 61 6c 6c 6f 77 65 64 20 76 61 6c 75  the allowed valu
6500: 65 73 20 61 72 65 20 22 67 72 61 69 6e 79 22 2e  es are "grainy".
6510: 20 20 4e 6f 74 20 65 76 65 72 79 20 76 61 6c 75    Not every valu
6520: 65 20 69 73 20 72 65 70 72 65 73 65 6e 74 61 62  e is representab
6530: 6c 65 2e 0a 2a 2a 20 46 6f 72 20 65 78 61 6d 70  le..** For examp
6540: 6c 65 2c 20 71 75 61 6e 74 69 74 69 65 73 20 31  le, quantities 1
6550: 36 20 61 6e 64 20 31 37 20 61 72 65 20 62 6f 74  6 and 17 are bot
6560: 68 20 72 65 70 72 65 73 65 6e 74 65 64 20 62 79  h represented by
6570: 20 61 20 4c 6f 67 45 73 74 0a 2a 2a 20 6f 66 20   a LogEst.** of 
6580: 34 30 2e 20 20 48 6f 77 65 76 65 72 2c 20 73 69  40.  However, si
6590: 6e 63 65 20 4c 6f 67 45 73 74 20 71 75 61 6e 74  nce LogEst quant
65a0: 69 74 69 65 73 20 61 72 65 20 73 75 70 70 6f 73  ities are suppos
65b0: 65 20 74 6f 20 62 65 20 65 73 74 69 6d 61 74 65  e to be estimate
65c0: 73 2c 0a 2a 2a 20 6e 6f 74 20 65 78 61 63 74 20  s,.** not exact 
65d0: 76 61 6c 75 65 73 2c 20 74 68 69 73 20 69 6d 70  values, this imp
65e0: 72 65 63 69 73 69 6f 6e 20 69 73 20 6e 6f 74 20  recision is not 
65f0: 61 20 70 72 6f 62 6c 65 6d 2e 0a 2a 2a 0a 2a 2a  a problem..**.**
6600: 20 22 4c 6f 67 45 73 74 22 20 69 73 20 73 68 6f   "LogEst" is sho
6610: 72 74 20 66 6f 72 20 22 4c 6f 67 61 72 69 74 68  rt for "Logarith
6620: 6d 69 63 20 45 73 74 69 6d 61 74 65 22 2e 0a 2a  mic Estimate"..*
6630: 2a 0a 2a 2a 20 45 78 61 6d 70 6c 65 73 3a 0a 2a  *.** Examples:.*
6640: 2a 20 20 20 20 20 20 31 20 2d 3e 20 30 20 20 20  *      1 -> 0   
6650: 20 20 20 20 20 20 20 20 20 20 20 32 30 20 2d 3e             20 ->
6660: 20 34 33 20 20 20 20 20 20 20 20 20 20 31 30 30   43          100
6670: 30 30 20 2d 3e 20 31 33 32 0a 2a 2a 20 20 20 20  00 -> 132.**    
6680: 20 20 32 20 2d 3e 20 31 30 20 20 20 20 20 20 20    2 -> 10       
6690: 20 20 20 20 20 20 32 35 20 2d 3e 20 34 36 20 20        25 -> 46  
66a0: 20 20 20 20 20 20 20 20 32 35 30 30 30 20 2d 3e          25000 ->
66b0: 20 31 34 36 0a 2a 2a 20 20 20 20 20 20 33 20 2d   146.**      3 -
66c0: 3e 20 31 36 20 20 20 20 20 20 20 20 20 20 20 20  > 16            
66d0: 31 30 30 20 2d 3e 20 36 36 20 20 20 20 20 20 20  100 -> 66       
66e0: 20 31 30 30 30 30 30 30 20 2d 3e 20 31 39 39 0a   1000000 -> 199.
66f0: 2a 2a 20 20 20 20 20 20 34 20 2d 3e 20 32 30 20  **      4 -> 20 
6700: 20 20 20 20 20 20 20 20 20 20 31 30 30 30 20 2d            1000 -
6710: 3e 20 39 39 20 20 20 20 20 20 20 20 31 30 34 38  > 99        1048
6720: 35 37 36 20 2d 3e 20 32 30 30 0a 2a 2a 20 20 20  576 -> 200.**   
6730: 20 20 31 30 20 2d 3e 20 33 33 20 20 20 20 20 20    10 -> 33      
6740: 20 20 20 20 20 31 30 32 34 20 2d 3e 20 31 30 30       1024 -> 100
6750: 20 20 20 20 34 32 39 34 39 36 37 32 39 36 20 2d      4294967296 -
6760: 3e 20 33 32 30 0a 2a 2a 0a 2a 2a 20 54 68 65 20  > 320.**.** The 
6770: 4c 6f 67 45 73 74 20 63 61 6e 20 62 65 20 6e 65  LogEst can be ne
6780: 67 61 74 69 76 65 20 74 6f 20 69 6e 64 69 63 61  gative to indica
6790: 74 65 20 66 72 61 63 74 69 6f 6e 61 6c 20 76 61  te fractional va
67a0: 6c 75 65 73 2e 0a 2a 2a 20 45 78 61 6d 70 6c 65  lues..** Example
67b0: 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 30 2e 35 20  s:.**.**    0.5 
67c0: 2d 3e 20 2d 31 30 20 20 20 20 20 20 20 20 20 20  -> -10          
67d0: 20 30 2e 31 20 2d 3e 20 2d 33 33 20 20 20 20 20   0.1 -> -33     
67e0: 20 20 20 30 2e 30 36 32 35 20 2d 3e 20 2d 34 30     0.0625 -> -40
67f0: 0a 2a 2f 0a 74 79 70 65 64 65 66 20 49 4e 54 31  .*/.typedef INT1
6800: 36 5f 54 59 50 45 20 4c 6f 67 45 73 74 3b 0a 0a  6_TYPE LogEst;..
6810: 2f 2a 0a 2a 2a 20 53 65 74 20 74 68 65 20 53 51  /*.** Set the SQ
6820: 4c 49 54 45 5f 50 54 52 53 49 5a 45 20 6d 61 63  LITE_PTRSIZE mac
6830: 72 6f 20 74 6f 20 74 68 65 20 6e 75 6d 62 65 72  ro to the number
6840: 20 6f 66 20 62 79 74 65 73 20 69 6e 20 61 20 70   of bytes in a p
6850: 6f 69 6e 74 65 72 0a 2a 2f 0a 23 69 66 6e 64 65  ointer.*/.#ifnde
6860: 66 20 53 51 4c 49 54 45 5f 50 54 52 53 49 5a 45  f SQLITE_PTRSIZE
6870: 0a 23 20 69 66 20 64 65 66 69 6e 65 64 28 5f 5f  .# if defined(__
6880: 53 49 5a 45 4f 46 5f 50 4f 49 4e 54 45 52 5f 5f  SIZEOF_POINTER__
6890: 29 0a 23 20 20 20 64 65 66 69 6e 65 20 53 51 4c  ).#   define SQL
68a0: 49 54 45 5f 50 54 52 53 49 5a 45 20 5f 5f 53 49  ITE_PTRSIZE __SI
68b0: 5a 45 4f 46 5f 50 4f 49 4e 54 45 52 5f 5f 0a 23  ZEOF_POINTER__.#
68c0: 20 65 6c 69 66 20 64 65 66 69 6e 65 64 28 69 33   elif defined(i3
68d0: 38 36 29 20 20 20 20 20 7c 7c 20 64 65 66 69 6e  86)     || defin
68e0: 65 64 28 5f 5f 69 33 38 36 5f 5f 29 20 20 20 7c  ed(__i386__)   |
68f0: 7c 20 64 65 66 69 6e 65 64 28 5f 4d 5f 49 58 38  | defined(_M_IX8
6900: 36 29 20 7c 7c 20 20 20 20 5c 0a 20 20 20 20 20  6) ||    \.     
6910: 20 20 64 65 66 69 6e 65 64 28 5f 4d 5f 41 52 4d    defined(_M_ARM
6920: 29 20 20 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f  )   || defined(_
6930: 5f 61 72 6d 5f 5f 29 20 20 20 20 7c 7c 20 64 65  _arm__)    || de
6940: 66 69 6e 65 64 28 5f 5f 78 38 36 29 0a 23 20 20  fined(__x86).#  
6950: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50   define SQLITE_P
6960: 54 52 53 49 5a 45 20 34 0a 23 20 65 6c 73 65 0a  TRSIZE 4.# else.
6970: 23 20 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54  #   define SQLIT
6980: 45 5f 50 54 52 53 49 5a 45 20 38 0a 23 20 65 6e  E_PTRSIZE 8.# en
6990: 64 69 66 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 54  dif.#endif../* T
69a0: 68 65 20 75 70 74 72 20 74 79 70 65 20 69 73 20  he uptr type is 
69b0: 61 6e 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 65  an unsigned inte
69c0: 67 65 72 20 6c 61 72 67 65 20 65 6e 6f 75 67 68  ger large enough
69d0: 20 74 6f 20 68 6f 6c 64 20 61 20 70 6f 69 6e 74   to hold a point
69e0: 65 72 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65  er.*/.#if define
69f0: 64 28 48 41 56 45 5f 53 54 44 49 4e 54 5f 48 29  d(HAVE_STDINT_H)
6a00: 0a 20 20 74 79 70 65 64 65 66 20 75 69 6e 74 70  .  typedef uintp
6a10: 74 72 5f 74 20 75 70 74 72 3b 0a 23 65 6c 69 66  tr_t uptr;.#elif
6a20: 20 53 51 4c 49 54 45 5f 50 54 52 53 49 5a 45 3d   SQLITE_PTRSIZE=
6a30: 3d 34 0a 20 20 74 79 70 65 64 65 66 20 75 33 32  =4.  typedef u32
6a40: 20 75 70 74 72 3b 0a 23 65 6c 73 65 0a 20 20 74   uptr;.#else.  t
6a50: 79 70 65 64 65 66 20 75 36 34 20 75 70 74 72 3b  ypedef u64 uptr;
6a60: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54  .#endif../*.** T
6a70: 68 65 20 53 51 4c 49 54 45 5f 57 49 54 48 49 4e  he SQLITE_WITHIN
6a80: 28 50 2c 53 2c 45 29 20 6d 61 63 72 6f 20 63 68  (P,S,E) macro ch
6a90: 65 63 6b 73 20 74 6f 20 73 65 65 20 69 66 20 70  ecks to see if p
6aa0: 6f 69 6e 74 65 72 20 50 20 70 6f 69 6e 74 73 20  ointer P points 
6ab0: 74 6f 0a 2a 2a 20 73 6f 6d 65 74 68 69 6e 67 20  to.** something 
6ac0: 62 65 74 77 65 65 6e 20 53 20 28 69 6e 63 6c 75  between S (inclu
6ad0: 73 69 76 65 29 20 61 6e 64 20 45 20 28 65 78 63  sive) and E (exc
6ae0: 6c 75 73 69 76 65 29 2e 0a 2a 2a 0a 2a 2a 20 49  lusive)..**.** I
6af0: 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 53  n other words, S
6b00: 20 69 73 20 61 20 62 75 66 66 65 72 20 61 6e 64   is a buffer and
6b10: 20 45 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20   E is a pointer 
6b20: 74 6f 20 74 68 65 20 66 69 72 73 74 20 62 79 74  to the first byt
6b30: 65 20 61 66 74 65 72 0a 2a 2a 20 74 68 65 20 65  e after.** the e
6b40: 6e 64 20 6f 66 20 62 75 66 66 65 72 20 53 2e 20  nd of buffer S. 
6b50: 20 54 68 69 73 20 6d 61 63 72 6f 20 72 65 74 75   This macro retu
6b60: 72 6e 73 20 74 72 75 65 20 69 66 20 50 20 70 6f  rns true if P po
6b70: 69 6e 74 73 20 74 6f 20 73 6f 6d 65 74 68 69 6e  ints to somethin
6b80: 67 0a 2a 2a 20 63 6f 6e 74 61 69 6e 65 64 20 77  g.** contained w
6b90: 69 74 68 69 6e 20 74 68 65 20 62 75 66 66 65 72  ithin the buffer
6ba0: 20 53 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53   S..*/.#define S
6bb0: 51 4c 49 54 45 5f 57 49 54 48 49 4e 28 50 2c 53  QLITE_WITHIN(P,S
6bc0: 2c 45 29 20 28 28 28 75 70 74 72 29 28 50 29 3e  ,E) (((uptr)(P)>
6bd0: 3d 28 75 70 74 72 29 28 53 29 29 26 26 28 28 75  =(uptr)(S))&&((u
6be0: 70 74 72 29 28 50 29 3c 28 75 70 74 72 29 28 45  ptr)(P)<(uptr)(E
6bf0: 29 29 29 0a 0a 0a 2f 2a 0a 2a 2a 20 4d 61 63 72  ))).../*.** Macr
6c00: 6f 73 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20  os to determine 
6c10: 77 68 65 74 68 65 72 20 74 68 65 20 6d 61 63 68  whether the mach
6c20: 69 6e 65 20 69 73 20 62 69 67 20 6f 72 20 6c 69  ine is big or li
6c30: 74 74 6c 65 20 65 6e 64 69 61 6e 2c 0a 2a 2a 20  ttle endian,.** 
6c40: 61 6e 64 20 77 68 65 74 68 65 72 20 6f 72 20 6e  and whether or n
6c50: 6f 74 20 74 68 61 74 20 64 65 74 65 72 6d 69 6e  ot that determin
6c60: 61 74 69 6f 6e 20 69 73 20 72 75 6e 2d 74 69 6d  ation is run-tim
6c70: 65 20 6f 72 20 63 6f 6d 70 69 6c 65 2d 74 69 6d  e or compile-tim
6c80: 65 2e 0a 2a 2a 0a 2a 2a 20 46 6f 72 20 62 65 73  e..**.** For bes
6c90: 74 20 70 65 72 66 6f 72 6d 61 6e 63 65 2c 20 61  t performance, a
6ca0: 6e 20 61 74 74 65 6d 70 74 20 69 73 20 6d 61 64  n attempt is mad
6cb0: 65 20 74 6f 20 67 75 65 73 73 20 61 74 20 74 68  e to guess at th
6cc0: 65 20 62 79 74 65 2d 6f 72 64 65 72 0a 2a 2a 20  e byte-order.** 
6cd0: 75 73 69 6e 67 20 43 2d 70 72 65 70 72 6f 63 65  using C-preproce
6ce0: 73 73 6f 72 20 6d 61 63 72 6f 73 2e 20 20 49 66  ssor macros.  If
6cf0: 20 74 68 61 74 20 69 73 20 75 6e 73 75 63 63 65   that is unsucce
6d00: 73 73 66 75 6c 2c 20 6f 72 20 69 66 0a 2a 2a 20  ssful, or if.** 
6d10: 2d 44 53 51 4c 49 54 45 5f 42 59 54 45 4f 52 44  -DSQLITE_BYTEORD
6d20: 45 52 3d 30 20 69 73 20 73 65 74 2c 20 74 68 65  ER=0 is set, the
6d30: 6e 20 62 79 74 65 2d 6f 72 64 65 72 20 69 73 20  n byte-order is 
6d40: 64 65 74 65 72 6d 69 6e 65 64 0a 2a 2a 20 61 74  determined.** at
6d50: 20 72 75 6e 2d 74 69 6d 65 2e 0a 2a 2f 0a 23 69   run-time..*/.#i
6d60: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 42 59 54  fndef SQLITE_BYT
6d70: 45 4f 52 44 45 52 0a 23 20 69 66 20 64 65 66 69  EORDER.# if defi
6d80: 6e 65 64 28 69 33 38 36 29 20 20 20 20 20 7c 7c  ned(i386)     ||
6d90: 20 64 65 66 69 6e 65 64 28 5f 5f 69 33 38 36 5f   defined(__i386_
6da0: 5f 29 20 20 20 7c 7c 20 64 65 66 69 6e 65 64 28  _)   || defined(
6db0: 5f 4d 5f 49 58 38 36 29 20 7c 7c 20 20 20 20 5c  _M_IX86) ||    \
6dc0: 0a 20 20 20 20 20 64 65 66 69 6e 65 64 28 5f 5f  .     defined(__
6dd0: 78 38 36 5f 36 34 29 20 7c 7c 20 64 65 66 69 6e  x86_64) || defin
6de0: 65 64 28 5f 5f 78 38 36 5f 36 34 5f 5f 29 20 7c  ed(__x86_64__) |
6df0: 7c 20 64 65 66 69 6e 65 64 28 5f 4d 5f 58 36 34  | defined(_M_X64
6e00: 29 20 20 7c 7c 20 20 20 20 5c 0a 20 20 20 20 20  )  ||    \.     
6e10: 64 65 66 69 6e 65 64 28 5f 4d 5f 41 4d 44 36 34  defined(_M_AMD64
6e20: 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 4d 5f  ) || defined(_M_
6e30: 41 52 4d 29 20 20 20 20 20 7c 7c 20 64 65 66 69  ARM)     || defi
6e40: 6e 65 64 28 5f 5f 78 38 36 29 20 20 20 7c 7c 20  ned(__x86)   || 
6e50: 20 20 20 5c 0a 20 20 20 20 20 64 65 66 69 6e 65     \.     define
6e60: 64 28 5f 5f 61 72 6d 5f 5f 29 0a 23 20 20 20 64  d(__arm__).#   d
6e70: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 42 59 54  efine SQLITE_BYT
6e80: 45 4f 52 44 45 52 20 20 20 20 31 32 33 34 0a 23  EORDER    1234.#
6e90: 20 65 6c 69 66 20 64 65 66 69 6e 65 64 28 73 70   elif defined(sp
6ea0: 61 72 63 29 20 20 20 20 7c 7c 20 64 65 66 69 6e  arc)    || defin
6eb0: 65 64 28 5f 5f 70 70 63 5f 5f 29 0a 23 20 20 20  ed(__ppc__).#   
6ec0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 42 59  define SQLITE_BY
6ed0: 54 45 4f 52 44 45 52 20 20 20 20 34 33 32 31 0a  TEORDER    4321.
6ee0: 23 20 65 6c 73 65 0a 23 20 20 20 64 65 66 69 6e  # else.#   defin
6ef0: 65 20 53 51 4c 49 54 45 5f 42 59 54 45 4f 52 44  e SQLITE_BYTEORD
6f00: 45 52 20 30 0a 23 20 65 6e 64 69 66 0a 23 65 6e  ER 0.# endif.#en
6f10: 64 69 66 0a 23 69 66 20 53 51 4c 49 54 45 5f 42  dif.#if SQLITE_B
6f20: 59 54 45 4f 52 44 45 52 3d 3d 34 33 32 31 0a 23  YTEORDER==4321.#
6f30: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 42   define SQLITE_B
6f40: 49 47 45 4e 44 49 41 4e 20 20 20 20 31 0a 23 20  IGENDIAN    1.# 
6f50: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4c 49  define SQLITE_LI
6f60: 54 54 4c 45 45 4e 44 49 41 4e 20 30 0a 23 20 64  TTLEENDIAN 0.# d
6f70: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 55 54 46  efine SQLITE_UTF
6f80: 31 36 4e 41 54 49 56 45 20 20 53 51 4c 49 54 45  16NATIVE  SQLITE
6f90: 5f 55 54 46 31 36 42 45 0a 23 65 6c 69 66 20 53  _UTF16BE.#elif S
6fa0: 51 4c 49 54 45 5f 42 59 54 45 4f 52 44 45 52 3d  QLITE_BYTEORDER=
6fb0: 3d 31 32 33 34 0a 23 20 64 65 66 69 6e 65 20 53  =1234.# define S
6fc0: 51 4c 49 54 45 5f 42 49 47 45 4e 44 49 41 4e 20  QLITE_BIGENDIAN 
6fd0: 20 20 20 30 0a 23 20 64 65 66 69 6e 65 20 53 51     0.# define SQ
6fe0: 4c 49 54 45 5f 4c 49 54 54 4c 45 45 4e 44 49 41  LITE_LITTLEENDIA
6ff0: 4e 20 31 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  N 1.# define SQL
7000: 49 54 45 5f 55 54 46 31 36 4e 41 54 49 56 45 20  ITE_UTF16NATIVE 
7010: 20 53 51 4c 49 54 45 5f 55 54 46 31 36 4c 45 0a   SQLITE_UTF16LE.
7020: 23 65 6c 73 65 0a 23 20 69 66 64 65 66 20 53 51  #else.# ifdef SQ
7030: 4c 49 54 45 5f 41 4d 41 4c 47 41 4d 41 54 49 4f  LITE_AMALGAMATIO
7040: 4e 0a 20 20 63 6f 6e 73 74 20 69 6e 74 20 73 71  N.  const int sq
7050: 6c 69 74 65 33 6f 6e 65 20 3d 20 31 3b 0a 23 20  lite3one = 1;.# 
7060: 65 6c 73 65 0a 20 20 65 78 74 65 72 6e 20 63 6f  else.  extern co
7070: 6e 73 74 20 69 6e 74 20 73 71 6c 69 74 65 33 6f  nst int sqlite3o
7080: 6e 65 3b 0a 23 20 65 6e 64 69 66 0a 23 20 64 65  ne;.# endif.# de
7090: 66 69 6e 65 20 53 51 4c 49 54 45 5f 42 49 47 45  fine SQLITE_BIGE
70a0: 4e 44 49 41 4e 20 20 20 20 28 2a 28 63 68 61 72  NDIAN    (*(char
70b0: 20 2a 29 28 26 73 71 6c 69 74 65 33 6f 6e 65 29   *)(&sqlite3one)
70c0: 3d 3d 30 29 0a 23 20 64 65 66 69 6e 65 20 53 51  ==0).# define SQ
70d0: 4c 49 54 45 5f 4c 49 54 54 4c 45 45 4e 44 49 41  LITE_LITTLEENDIA
70e0: 4e 20 28 2a 28 63 68 61 72 20 2a 29 28 26 73 71  N (*(char *)(&sq
70f0: 6c 69 74 65 33 6f 6e 65 29 3d 3d 31 29 0a 23 20  lite3one)==1).# 
7100: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 55 54  define SQLITE_UT
7110: 46 31 36 4e 41 54 49 56 45 20 20 28 53 51 4c 49  F16NATIVE  (SQLI
7120: 54 45 5f 42 49 47 45 4e 44 49 41 4e 3f 53 51 4c  TE_BIGENDIAN?SQL
7130: 49 54 45 5f 55 54 46 31 36 42 45 3a 53 51 4c 49  ITE_UTF16BE:SQLI
7140: 54 45 5f 55 54 46 31 36 4c 45 29 0a 23 65 6e 64  TE_UTF16LE).#end
7150: 69 66 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6e 73 74 61  if../*.** Consta
7160: 6e 74 73 20 66 6f 72 20 74 68 65 20 6c 61 72 67  nts for the larg
7170: 65 73 74 20 61 6e 64 20 73 6d 61 6c 6c 65 73 74  est and smallest
7180: 20 70 6f 73 73 69 62 6c 65 20 36 34 2d 62 69 74   possible 64-bit
7190: 20 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 73   signed integers
71a0: 2e 0a 2a 2a 20 54 68 65 73 65 20 6d 61 63 72 6f  ..** These macro
71b0: 73 20 61 72 65 20 64 65 73 69 67 6e 65 64 20 74  s are designed t
71c0: 6f 20 77 6f 72 6b 20 63 6f 72 72 65 63 74 6c 79  o work correctly
71d0: 20 6f 6e 20 62 6f 74 68 20 33 32 2d 62 69 74 20   on both 32-bit 
71e0: 61 6e 64 20 36 34 2d 62 69 74 0a 2a 2a 20 63 6f  and 64-bit.** co
71f0: 6d 70 69 6c 65 72 73 2e 0a 2a 2f 0a 23 64 65 66  mpilers..*/.#def
7200: 69 6e 65 20 4c 41 52 47 45 53 54 5f 49 4e 54 36  ine LARGEST_INT6
7210: 34 20 20 28 30 78 66 66 66 66 66 66 66 66 7c 28  4  (0xffffffff|(
7220: 28 28 69 36 34 29 30 78 37 66 66 66 66 66 66 66  ((i64)0x7fffffff
7230: 29 3c 3c 33 32 29 29 0a 23 64 65 66 69 6e 65 20  )<<32)).#define 
7240: 53 4d 41 4c 4c 45 53 54 5f 49 4e 54 36 34 20 28  SMALLEST_INT64 (
7250: 28 28 69 36 34 29 2d 31 29 20 2d 20 4c 41 52 47  ((i64)-1) - LARG
7260: 45 53 54 5f 49 4e 54 36 34 29 0a 0a 2f 2a 0a 2a  EST_INT64)../*.*
7270: 2a 20 52 6f 75 6e 64 20 75 70 20 61 20 6e 75 6d  * Round up a num
7280: 62 65 72 20 74 6f 20 74 68 65 20 6e 65 78 74 20  ber to the next 
7290: 6c 61 72 67 65 72 20 6d 75 6c 74 69 70 6c 65 20  larger multiple 
72a0: 6f 66 20 38 2e 20 20 54 68 69 73 20 69 73 20 75  of 8.  This is u
72b0: 73 65 64 0a 2a 2a 20 74 6f 20 66 6f 72 63 65 20  sed.** to force 
72c0: 38 2d 62 79 74 65 20 61 6c 69 67 6e 6d 65 6e 74  8-byte alignment
72d0: 20 6f 6e 20 36 34 2d 62 69 74 20 61 72 63 68 69   on 64-bit archi
72e0: 74 65 63 74 75 72 65 73 2e 0a 2a 2f 0a 23 64 65  tectures..*/.#de
72f0: 66 69 6e 65 20 52 4f 55 4e 44 38 28 78 29 20 20  fine ROUND8(x)  
7300: 20 20 20 28 28 28 78 29 2b 37 29 26 7e 37 29 0a     (((x)+7)&~7).
7310: 0a 2f 2a 0a 2a 2a 20 52 6f 75 6e 64 20 64 6f 77  ./*.** Round dow
7320: 6e 20 74 6f 20 74 68 65 20 6e 65 61 72 65 73 74  n to the nearest
7330: 20 6d 75 6c 74 69 70 6c 65 20 6f 66 20 38 0a 2a   multiple of 8.*
7340: 2f 0a 23 64 65 66 69 6e 65 20 52 4f 55 4e 44 44  /.#define ROUNDD
7350: 4f 57 4e 38 28 78 29 20 28 28 78 29 26 7e 37 29  OWN8(x) ((x)&~7)
7360: 0a 0a 2f 2a 0a 2a 2a 20 41 73 73 65 72 74 20 74  ../*.** Assert t
7370: 68 61 74 20 74 68 65 20 70 6f 69 6e 74 65 72 20  hat the pointer 
7380: 58 20 69 73 20 61 6c 69 67 6e 65 64 20 74 6f 20  X is aligned to 
7390: 61 6e 20 38 2d 62 79 74 65 20 62 6f 75 6e 64 61  an 8-byte bounda
73a0: 72 79 2e 20 20 54 68 69 73 0a 2a 2a 20 6d 61 63  ry.  This.** mac
73b0: 72 6f 20 69 73 20 75 73 65 64 20 6f 6e 6c 79 20  ro is used only 
73c0: 77 69 74 68 69 6e 20 61 73 73 65 72 74 28 29 20  within assert() 
73d0: 74 6f 20 76 65 72 69 66 79 20 74 68 61 74 20 74  to verify that t
73e0: 68 65 20 63 6f 64 65 20 67 65 74 73 0a 2a 2a 20  he code gets.** 
73f0: 61 6c 6c 20 61 6c 69 67 6e 6d 65 6e 74 20 72 65  all alignment re
7400: 73 74 72 69 63 74 69 6f 6e 73 20 63 6f 72 72 65  strictions corre
7410: 63 74 2e 0a 2a 2a 0a 2a 2a 20 45 78 63 65 70 74  ct..**.** Except
7420: 2c 20 69 66 20 53 51 4c 49 54 45 5f 34 5f 42 59  , if SQLITE_4_BY
7430: 54 45 5f 41 4c 49 47 4e 45 44 5f 4d 41 4c 4c 4f  TE_ALIGNED_MALLO
7440: 43 20 69 73 20 64 65 66 69 6e 65 64 2c 20 74 68  C is defined, th
7450: 65 6e 20 74 68 65 0a 2a 2a 20 75 6e 64 65 72 6c  en the.** underl
7460: 79 69 6e 67 20 6d 61 6c 6c 6f 63 28 29 20 69 6d  ying malloc() im
7470: 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6d 69 67  plementation mig
7480: 68 74 20 72 65 74 75 72 6e 20 75 73 20 34 2d 62  ht return us 4-b
7490: 79 74 65 20 61 6c 69 67 6e 65 64 0a 2a 2a 20 70  yte aligned.** p
74a0: 6f 69 6e 74 65 72 73 2e 20 20 49 6e 20 74 68 61  ointers.  In tha
74b0: 74 20 63 61 73 65 2c 20 6f 6e 6c 79 20 76 65 72  t case, only ver
74c0: 69 66 79 20 34 2d 62 79 74 65 20 61 6c 69 67 6e  ify 4-byte align
74d0: 6d 65 6e 74 2e 0a 2a 2f 0a 23 69 66 64 65 66 20  ment..*/.#ifdef 
74e0: 53 51 4c 49 54 45 5f 34 5f 42 59 54 45 5f 41 4c  SQLITE_4_BYTE_AL
74f0: 49 47 4e 45 44 5f 4d 41 4c 4c 4f 43 0a 23 20 64  IGNED_MALLOC.# d
7500: 65 66 69 6e 65 20 45 49 47 48 54 5f 42 59 54 45  efine EIGHT_BYTE
7510: 5f 41 4c 49 47 4e 4d 45 4e 54 28 58 29 20 20 20  _ALIGNMENT(X)   
7520: 28 28 28 28 63 68 61 72 2a 29 28 58 29 20 2d 20  ((((char*)(X) - 
7530: 28 63 68 61 72 2a 29 30 29 26 33 29 3d 3d 30 29  (char*)0)&3)==0)
7540: 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
7550: 45 49 47 48 54 5f 42 59 54 45 5f 41 4c 49 47 4e  EIGHT_BYTE_ALIGN
7560: 4d 45 4e 54 28 58 29 20 20 20 28 28 28 28 63 68  MENT(X)   ((((ch
7570: 61 72 2a 29 28 58 29 20 2d 20 28 63 68 61 72 2a  ar*)(X) - (char*
7580: 29 30 29 26 37 29 3d 3d 30 29 0a 23 65 6e 64 69  )0)&7)==0).#endi
7590: 66 0a 0a 2f 2a 0a 2a 2a 20 44 69 73 61 62 6c 65  f../*.** Disable
75a0: 20 4d 4d 41 50 20 6f 6e 20 70 6c 61 74 66 6f 72   MMAP on platfor
75b0: 6d 73 20 77 68 65 72 65 20 69 74 20 69 73 20 6b  ms where it is k
75c0: 6e 6f 77 6e 20 74 6f 20 6e 6f 74 20 77 6f 72 6b  nown to not work
75d0: 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28  .*/.#if defined(
75e0: 5f 5f 4f 70 65 6e 42 53 44 5f 5f 29 20 7c 7c 20  __OpenBSD__) || 
75f0: 64 65 66 69 6e 65 64 28 5f 5f 51 4e 58 4e 54 4f  defined(__QNXNTO
7600: 5f 5f 29 0a 23 20 75 6e 64 65 66 20 53 51 4c 49  __).# undef SQLI
7610: 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45  TE_MAX_MMAP_SIZE
7620: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
7630: 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 20 30  _MAX_MMAP_SIZE 0
7640: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 44  .#endif../*.** D
7650: 65 66 61 75 6c 74 20 6d 61 78 69 6d 75 6d 20 73  efault maximum s
7660: 69 7a 65 20 6f 66 20 6d 65 6d 6f 72 79 20 75 73  ize of memory us
7670: 65 64 20 62 79 20 6d 65 6d 6f 72 79 2d 6d 61 70  ed by memory-map
7680: 70 65 64 20 49 2f 4f 20 69 6e 20 74 68 65 20 56  ped I/O in the V
7690: 46 53 0a 2a 2f 0a 23 69 66 64 65 66 20 5f 5f 41  FS.*/.#ifdef __A
76a0: 50 50 4c 45 5f 5f 0a 23 20 69 6e 63 6c 75 64 65  PPLE__.# include
76b0: 20 3c 54 61 72 67 65 74 43 6f 6e 64 69 74 69 6f   <TargetConditio
76c0: 6e 61 6c 73 2e 68 3e 0a 23 65 6e 64 69 66 0a 23  nals.h>.#endif.#
76d0: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4d 41  ifndef SQLITE_MA
76e0: 58 5f 4d 4d 41 50 5f 53 49 5a 45 0a 23 20 69 66  X_MMAP_SIZE.# if
76f0: 20 64 65 66 69 6e 65 64 28 5f 5f 6c 69 6e 75 78   defined(__linux
7700: 5f 5f 29 20 5c 0a 20 20 7c 7c 20 64 65 66 69 6e  __) \.  || defin
7710: 65 64 28 5f 57 49 4e 33 32 29 20 5c 0a 20 20 7c  ed(_WIN32) \.  |
7720: 7c 20 28 64 65 66 69 6e 65 64 28 5f 5f 41 50 50  | (defined(__APP
7730: 4c 45 5f 5f 29 20 26 26 20 64 65 66 69 6e 65 64  LE__) && defined
7740: 28 5f 5f 4d 41 43 48 5f 5f 29 29 20 5c 0a 20 20  (__MACH__)) \.  
7750: 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 73 75 6e  || defined(__sun
7760: 29 20 5c 0a 20 20 7c 7c 20 64 65 66 69 6e 65 64  ) \.  || defined
7770: 28 5f 5f 46 72 65 65 42 53 44 5f 5f 29 20 5c 0a  (__FreeBSD__) \.
7780: 20 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 44    || defined(__D
7790: 72 61 67 6f 6e 46 6c 79 5f 5f 29 0a 23 20 20 20  ragonFly__).#   
77a0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41  define SQLITE_MA
77b0: 58 5f 4d 4d 41 50 5f 53 49 5a 45 20 30 78 37 66  X_MMAP_SIZE 0x7f
77c0: 66 66 30 30 30 30 20 20 2f 2a 20 32 31 34 37 34  ff0000  /* 21474
77d0: 31 38 31 31 32 20 2a 2f 0a 23 20 65 6c 73 65 0a  18112 */.# else.
77e0: 23 20 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54  #   define SQLIT
77f0: 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 20  E_MAX_MMAP_SIZE 
7800: 30 0a 23 20 65 6e 64 69 66 0a 23 65 6e 64 69 66  0.# endif.#endif
7810: 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 64 65 66 61  ../*.** The defa
7820: 75 6c 74 20 4d 4d 41 50 5f 53 49 5a 45 20 69 73  ult MMAP_SIZE is
7830: 20 7a 65 72 6f 20 6f 6e 20 61 6c 6c 20 70 6c 61   zero on all pla
7840: 74 66 6f 72 6d 73 2e 20 20 4f 72 2c 20 65 76 65  tforms.  Or, eve
7850: 6e 20 69 66 20 61 20 6c 61 72 67 65 72 0a 2a 2a  n if a larger.**
7860: 20 64 65 66 61 75 6c 74 20 4d 4d 41 50 5f 53 49   default MMAP_SI
7870: 5a 45 20 69 73 20 73 70 65 63 69 66 69 65 64 20  ZE is specified 
7880: 61 74 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 2c  at compile-time,
7890: 20 6d 61 6b 65 20 73 75 72 65 20 74 68 61 74 20   make sure that 
78a0: 69 74 20 64 6f 65 73 0a 2a 2a 20 6e 6f 74 20 65  it does.** not e
78b0: 78 63 65 65 64 20 74 68 65 20 6d 61 78 69 6d 75  xceed the maximu
78c0: 6d 20 6d 6d 61 70 20 73 69 7a 65 2e 0a 2a 2f 0a  m mmap size..*/.
78d0: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 44  #ifndef SQLITE_D
78e0: 45 46 41 55 4c 54 5f 4d 4d 41 50 5f 53 49 5a 45  EFAULT_MMAP_SIZE
78f0: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
7900: 5f 44 45 46 41 55 4c 54 5f 4d 4d 41 50 5f 53 49  _DEFAULT_MMAP_SI
7910: 5a 45 20 30 0a 23 65 6e 64 69 66 0a 23 69 66 20  ZE 0.#endif.#if 
7920: 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d  SQLITE_DEFAULT_M
7930: 4d 41 50 5f 53 49 5a 45 3e 53 51 4c 49 54 45 5f  MAP_SIZE>SQLITE_
7940: 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 0a 23 20  MAX_MMAP_SIZE.# 
7950: 75 6e 64 65 66 20 53 51 4c 49 54 45 5f 44 45 46  undef SQLITE_DEF
7960: 41 55 4c 54 5f 4d 4d 41 50 5f 53 49 5a 45 0a 23  AULT_MMAP_SIZE.#
7970: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44   define SQLITE_D
7980: 45 46 41 55 4c 54 5f 4d 4d 41 50 5f 53 49 5a 45  EFAULT_MMAP_SIZE
7990: 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50   SQLITE_MAX_MMAP
79a0: 5f 53 49 5a 45 0a 23 65 6e 64 69 66 0a 0a 2f 2a  _SIZE.#endif../*
79b0: 0a 2a 2a 20 4f 6e 6c 79 20 6f 6e 65 20 6f 66 20  .** Only one of 
79c0: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54  SQLITE_ENABLE_ST
79d0: 41 54 33 20 6f 72 20 53 51 4c 49 54 45 5f 45 4e  AT3 or SQLITE_EN
79e0: 41 42 4c 45 5f 53 54 41 54 34 20 63 61 6e 20 62  ABLE_STAT4 can b
79f0: 65 20 64 65 66 69 6e 65 64 2e 0a 2a 2a 20 50 72  e defined..** Pr
7a00: 69 6f 72 69 74 79 20 69 73 20 67 69 76 65 6e 20  iority is given 
7a10: 74 6f 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  to SQLITE_ENABLE
7a20: 5f 53 54 41 54 34 2e 20 20 49 66 20 65 69 74 68  _STAT4.  If eith
7a30: 65 72 20 61 72 65 20 64 65 66 69 6e 65 64 2c 20  er are defined, 
7a40: 61 6c 73 6f 0a 2a 2a 20 64 65 66 69 6e 65 20 53  also.** define S
7a50: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41  QLITE_ENABLE_STA
7a60: 54 33 5f 4f 52 5f 53 54 41 54 34 0a 2a 2f 0a 23  T3_OR_STAT4.*/.#
7a70: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  ifdef SQLITE_ENA
7a80: 42 4c 45 5f 53 54 41 54 34 0a 23 20 75 6e 64 65  BLE_STAT4.# unde
7a90: 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
7aa0: 53 54 41 54 33 0a 23 20 64 65 66 69 6e 65 20 53  STAT3.# define S
7ab0: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41  QLITE_ENABLE_STA
7ac0: 54 33 5f 4f 52 5f 53 54 41 54 34 20 31 0a 23 65  T3_OR_STAT4 1.#e
7ad0: 6c 69 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  lif SQLITE_ENABL
7ae0: 45 5f 53 54 41 54 33 0a 23 20 64 65 66 69 6e 65  E_STAT3.# define
7af0: 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53   SQLITE_ENABLE_S
7b00: 54 41 54 33 5f 4f 52 5f 53 54 41 54 34 20 31 0a  TAT3_OR_STAT4 1.
7b10: 23 65 6c 69 66 20 53 51 4c 49 54 45 5f 45 4e 41  #elif SQLITE_ENA
7b20: 42 4c 45 5f 53 54 41 54 33 5f 4f 52 5f 53 54 41  BLE_STAT3_OR_STA
7b30: 54 34 0a 23 20 75 6e 64 65 66 20 53 51 4c 49 54  T4.# undef SQLIT
7b40: 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 5f 4f  E_ENABLE_STAT3_O
7b50: 52 5f 53 54 41 54 34 0a 23 65 6e 64 69 66 0a 0a  R_STAT4.#endif..
7b60: 2f 2a 0a 2a 2a 20 53 45 4c 45 43 54 54 52 41 43  /*.** SELECTTRAC
7b70: 45 5f 45 4e 41 42 4c 45 44 20 77 69 6c 6c 20 62  E_ENABLED will b
7b80: 65 20 65 69 74 68 65 72 20 31 20 6f 72 20 30 20  e either 1 or 0 
7b90: 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20 77 68 65  depending on whe
7ba0: 74 68 65 72 20 6f 72 20 6e 6f 74 0a 2a 2a 20 74  ther or not.** t
7bb0: 68 65 20 53 65 6c 65 63 74 20 71 75 65 72 79 20  he Select query 
7bc0: 67 65 6e 65 72 61 74 6f 72 20 74 72 61 63 69 6e  generator tracin
7bd0: 67 20 6c 6f 67 69 63 20 69 73 20 74 75 72 6e 65  g logic is turne
7be0: 64 20 6f 6e 2e 0a 2a 2f 0a 23 69 66 20 64 65 66  d on..*/.#if def
7bf0: 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42  ined(SQLITE_ENAB
7c00: 4c 45 5f 53 45 4c 45 43 54 54 52 41 43 45 29 0a  LE_SELECTTRACE).
7c10: 23 20 64 65 66 69 6e 65 20 53 45 4c 45 43 54 54  # define SELECTT
7c20: 52 41 43 45 5f 45 4e 41 42 4c 45 44 20 31 0a 23  RACE_ENABLED 1.#
7c30: 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 53 45  else.# define SE
7c40: 4c 45 43 54 54 52 41 43 45 5f 45 4e 41 42 4c 45  LECTTRACE_ENABLE
7c50: 44 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  D 0.#endif../*.*
7c60: 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  * An instance of
7c70: 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   the following s
7c80: 74 72 75 63 74 75 72 65 20 69 73 20 75 73 65 64  tructure is used
7c90: 20 74 6f 20 73 74 6f 72 65 20 74 68 65 20 62 75   to store the bu
7ca0: 73 79 2d 68 61 6e 64 6c 65 72 0a 2a 2a 20 63 61  sy-handler.** ca
7cb0: 6c 6c 62 61 63 6b 20 66 6f 72 20 61 20 67 69 76  llback for a giv
7cc0: 65 6e 20 73 71 6c 69 74 65 20 68 61 6e 64 6c 65  en sqlite handle
7cd0: 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 73 71 6c 69  ..**.** The sqli
7ce0: 74 65 2e 62 75 73 79 48 61 6e 64 6c 65 72 20 6d  te.busyHandler m
7cf0: 65 6d 62 65 72 20 6f 66 20 74 68 65 20 73 71 6c  ember of the sql
7d00: 69 74 65 20 73 74 72 75 63 74 20 63 6f 6e 74 61  ite struct conta
7d10: 69 6e 73 20 74 68 65 20 62 75 73 79 0a 2a 2a 20  ins the busy.** 
7d20: 63 61 6c 6c 62 61 63 6b 20 66 6f 72 20 74 68 65  callback for the
7d30: 20 64 61 74 61 62 61 73 65 20 68 61 6e 64 6c 65   database handle
7d40: 2e 20 45 61 63 68 20 70 61 67 65 72 20 6f 70 65  . Each pager ope
7d50: 6e 65 64 20 76 69 61 20 74 68 65 20 73 71 6c 69  ned via the sqli
7d60: 74 65 0a 2a 2a 20 68 61 6e 64 6c 65 20 69 73 20  te.** handle is 
7d70: 70 61 73 73 65 64 20 61 20 70 6f 69 6e 74 65 72  passed a pointer
7d80: 20 74 6f 20 73 71 6c 69 74 65 2e 62 75 73 79 48   to sqlite.busyH
7d90: 61 6e 64 6c 65 72 2e 20 54 68 65 20 62 75 73 79  andler. The busy
7da0: 2d 68 61 6e 64 6c 65 72 0a 2a 2a 20 63 61 6c 6c  -handler.** call
7db0: 62 61 63 6b 20 69 73 20 63 75 72 72 65 6e 74 6c  back is currentl
7dc0: 79 20 69 6e 76 6f 6b 65 64 20 6f 6e 6c 79 20 66  y invoked only f
7dd0: 72 6f 6d 20 77 69 74 68 69 6e 20 70 61 67 65 72  rom within pager
7de0: 2e 63 2e 0a 2a 2f 0a 74 79 70 65 64 65 66 20 73  .c..*/.typedef s
7df0: 74 72 75 63 74 20 42 75 73 79 48 61 6e 64 6c 65  truct BusyHandle
7e00: 72 20 42 75 73 79 48 61 6e 64 6c 65 72 3b 0a 73  r BusyHandler;.s
7e10: 74 72 75 63 74 20 42 75 73 79 48 61 6e 64 6c 65  truct BusyHandle
7e20: 72 20 7b 0a 20 20 69 6e 74 20 28 2a 78 42 75 73  r {.  int (*xBus
7e30: 79 48 61 6e 64 6c 65 72 29 28 76 6f 69 64 20 2a  yHandler)(void *
7e40: 2c 69 6e 74 29 3b 20 20 2f 2a 20 54 68 65 20 62  ,int);  /* The b
7e50: 75 73 79 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a  usy callback */.
7e60: 20 20 76 6f 69 64 20 2a 70 42 75 73 79 41 72 67    void *pBusyArg
7e70: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
7e80: 20 20 20 20 2f 2a 20 46 69 72 73 74 20 61 72 67      /* First arg
7e90: 20 74 6f 20 62 75 73 79 20 63 61 6c 6c 62 61 63   to busy callbac
7ea0: 6b 20 2a 2f 0a 20 20 69 6e 74 20 6e 42 75 73 79  k */.  int nBusy
7eb0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
7ec0: 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 63 72           /* Incr
7ed0: 65 6d 65 6e 74 65 64 20 77 69 74 68 20 65 61 63  emented with eac
7ee0: 68 20 62 75 73 79 20 63 61 6c 6c 20 2a 2f 0a 20  h busy call */. 
7ef0: 20 75 38 20 62 45 78 74 72 61 46 69 6c 65 41 72   u8 bExtraFileAr
7f00: 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  g;              
7f10: 20 20 20 2f 2a 20 49 6e 63 6c 75 64 65 20 73 71     /* Include sq
7f20: 6c 69 74 65 33 5f 66 69 6c 65 20 61 73 20 63 61  lite3_file as ca
7f30: 6c 6c 62 61 63 6b 20 61 72 67 20 2a 2f 0a 7d 3b  llback arg */.};
7f40: 0a 0a 2f 2a 0a 2a 2a 20 4e 61 6d 65 20 6f 66 20  ../*.** Name of 
7f50: 74 68 65 20 6d 61 73 74 65 72 20 64 61 74 61 62  the master datab
7f60: 61 73 65 20 74 61 62 6c 65 2e 20 20 54 68 65 20  ase table.  The 
7f70: 6d 61 73 74 65 72 20 64 61 74 61 62 61 73 65 20  master database 
7f80: 74 61 62 6c 65 0a 2a 2a 20 69 73 20 61 20 73 70  table.** is a sp
7f90: 65 63 69 61 6c 20 74 61 62 6c 65 20 74 68 61 74  ecial table that
7fa0: 20 68 6f 6c 64 73 20 74 68 65 20 6e 61 6d 65 73   holds the names
7fb0: 20 61 6e 64 20 61 74 74 72 69 62 75 74 65 73 20   and attributes 
7fc0: 6f 66 20 61 6c 6c 0a 2a 2a 20 75 73 65 72 20 74  of all.** user t
7fd0: 61 62 6c 65 73 20 61 6e 64 20 69 6e 64 69 63 65  ables and indice
7fe0: 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 41  s..*/.#define MA
7ff0: 53 54 45 52 5f 4e 41 4d 45 20 20 20 20 20 20 20  STER_NAME       
8000: 22 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 22 0a  "sqlite_master".
8010: 23 64 65 66 69 6e 65 20 54 45 4d 50 5f 4d 41 53  #define TEMP_MAS
8020: 54 45 52 5f 4e 41 4d 45 20 20 22 73 71 6c 69 74  TER_NAME  "sqlit
8030: 65 5f 74 65 6d 70 5f 6d 61 73 74 65 72 22 0a 0a  e_temp_master"..
8040: 2f 2a 0a 2a 2a 20 54 68 65 20 72 6f 6f 74 2d 70  /*.** The root-p
8050: 61 67 65 20 6f 66 20 74 68 65 20 6d 61 73 74 65  age of the maste
8060: 72 20 64 61 74 61 62 61 73 65 20 74 61 62 6c 65  r database table
8070: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 41 53  ..*/.#define MAS
8080: 54 45 52 5f 52 4f 4f 54 20 20 20 20 20 20 20 31  TER_ROOT       1
8090: 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6e 61 6d 65  ../*.** The name
80a0: 20 6f 66 20 74 68 65 20 73 63 68 65 6d 61 20 74   of the schema t
80b0: 61 62 6c 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  able..*/.#define
80c0: 20 53 43 48 45 4d 41 5f 54 41 42 4c 45 28 78 29   SCHEMA_TABLE(x)
80d0: 20 20 28 28 21 4f 4d 49 54 5f 54 45 4d 50 44 42    ((!OMIT_TEMPDB
80e0: 29 26 26 28 78 3d 3d 31 29 3f 54 45 4d 50 5f 4d  )&&(x==1)?TEMP_M
80f0: 41 53 54 45 52 5f 4e 41 4d 45 3a 4d 41 53 54 45  ASTER_NAME:MASTE
8100: 52 5f 4e 41 4d 45 29 0a 0a 2f 2a 0a 2a 2a 20 41  R_NAME)../*.** A
8110: 20 63 6f 6e 76 65 6e 69 65 6e 63 65 20 6d 61 63   convenience mac
8120: 72 6f 20 74 68 61 74 20 72 65 74 75 72 6e 73 20  ro that returns 
8130: 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 65 6c  the number of el
8140: 65 6d 65 6e 74 73 20 69 6e 0a 2a 2a 20 61 6e 20  ements in.** an 
8150: 61 72 72 61 79 2e 0a 2a 2f 0a 23 64 65 66 69 6e  array..*/.#defin
8160: 65 20 41 72 72 61 79 53 69 7a 65 28 58 29 20 20  e ArraySize(X)  
8170: 20 20 28 28 69 6e 74 29 28 73 69 7a 65 6f 66 28    ((int)(sizeof(
8180: 58 29 2f 73 69 7a 65 6f 66 28 58 5b 30 5d 29 29  X)/sizeof(X[0]))
8190: 29 0a 0a 2f 2a 0a 2a 2a 20 44 65 74 65 72 6d 69  )../*.** Determi
81a0: 6e 65 20 69 66 20 74 68 65 20 61 72 67 75 6d 65  ne if the argume
81b0: 6e 74 20 69 73 20 61 20 70 6f 77 65 72 20 6f 66  nt is a power of
81c0: 20 74 77 6f 0a 2a 2f 0a 23 64 65 66 69 6e 65 20   two.*/.#define 
81d0: 49 73 50 6f 77 65 72 4f 66 54 77 6f 28 58 29 20  IsPowerOfTwo(X) 
81e0: 28 28 28 58 29 26 28 28 58 29 2d 31 29 29 3d 3d  (((X)&((X)-1))==
81f0: 30 29 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f  0)../*.** The fo
8200: 6c 6c 6f 77 69 6e 67 20 76 61 6c 75 65 20 61 73  llowing value as
8210: 20 61 20 64 65 73 74 72 75 63 74 6f 72 20 6d 65   a destructor me
8220: 61 6e 73 20 74 6f 20 75 73 65 20 73 71 6c 69 74  ans to use sqlit
8230: 65 33 44 62 46 72 65 65 28 29 2e 0a 2a 2a 20 54  e3DbFree()..** T
8240: 68 65 20 73 71 6c 69 74 65 33 44 62 46 72 65 65  he sqlite3DbFree
8250: 28 29 20 72 6f 75 74 69 6e 65 20 72 65 71 75 69  () routine requi
8260: 72 65 73 20 74 77 6f 20 70 61 72 61 6d 65 74 65  res two paramete
8270: 72 73 20 69 6e 73 74 65 61 64 20 6f 66 20 74 68  rs instead of th
8280: 65 0a 2a 2a 20 6f 6e 65 20 70 61 72 61 6d 65 74  e.** one paramet
8290: 65 72 20 74 68 61 74 20 64 65 73 74 72 75 63 74  er that destruct
82a0: 6f 72 73 20 6e 6f 72 6d 61 6c 6c 79 20 77 61 6e  ors normally wan
82b0: 74 2e 20 20 53 6f 20 77 65 20 68 61 76 65 20 74  t.  So we have t
82c0: 6f 20 69 6e 74 72 6f 64 75 63 65 0a 2a 2a 20 74  o introduce.** t
82d0: 68 69 73 20 6d 61 67 69 63 20 76 61 6c 75 65 20  his magic value 
82e0: 74 68 61 74 20 74 68 65 20 63 6f 64 65 20 6b 6e  that the code kn
82f0: 6f 77 73 20 74 6f 20 68 61 6e 64 6c 65 20 64 69  ows to handle di
8300: 66 66 65 72 65 6e 74 6c 79 2e 20 20 41 6e 79 0a  fferently.  Any.
8310: 2a 2a 20 70 6f 69 6e 74 65 72 20 77 69 6c 6c 20  ** pointer will 
8320: 77 6f 72 6b 20 68 65 72 65 20 61 73 20 6c 6f 6e  work here as lon
8330: 67 20 61 73 20 69 74 20 69 73 20 64 69 73 74 69  g as it is disti
8340: 6e 63 74 20 66 72 6f 6d 20 53 51 4c 49 54 45 5f  nct from SQLITE_
8350: 53 54 41 54 49 43 0a 2a 2a 20 61 6e 64 20 53 51  STATIC.** and SQ
8360: 4c 49 54 45 5f 54 52 41 4e 53 49 45 4e 54 2e 0a  LITE_TRANSIENT..
8370: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
8380: 45 5f 44 59 4e 41 4d 49 43 20 20 20 28 28 73 71  E_DYNAMIC   ((sq
8390: 6c 69 74 65 33 5f 64 65 73 74 72 75 63 74 6f 72  lite3_destructor
83a0: 5f 74 79 70 65 29 73 71 6c 69 74 65 33 4d 61 6c  _type)sqlite3Mal
83b0: 6c 6f 63 53 69 7a 65 29 0a 0a 2f 2a 0a 2a 2a 20  locSize)../*.** 
83c0: 57 68 65 6e 20 53 51 4c 49 54 45 5f 4f 4d 49 54  When SQLITE_OMIT
83d0: 5f 57 53 44 20 69 73 20 64 65 66 69 6e 65 64 2c  _WSD is defined,
83e0: 20 69 74 20 6d 65 61 6e 73 20 74 68 61 74 20 74   it means that t
83f0: 68 65 20 74 61 72 67 65 74 20 70 6c 61 74 66 6f  he target platfo
8400: 72 6d 20 64 6f 65 73 0a 2a 2a 20 6e 6f 74 20 73  rm does.** not s
8410: 75 70 70 6f 72 74 20 57 72 69 74 61 62 6c 65 20  upport Writable 
8420: 53 74 61 74 69 63 20 44 61 74 61 20 28 57 53 44  Static Data (WSD
8430: 29 20 73 75 63 68 20 61 73 20 67 6c 6f 62 61 6c  ) such as global
8440: 20 61 6e 64 20 73 74 61 74 69 63 20 76 61 72 69   and static vari
8450: 61 62 6c 65 73 2e 0a 2a 2a 20 41 6c 6c 20 76 61  ables..** All va
8460: 72 69 61 62 6c 65 73 20 6d 75 73 74 20 65 69 74  riables must eit
8470: 68 65 72 20 62 65 20 6f 6e 20 74 68 65 20 73 74  her be on the st
8480: 61 63 6b 20 6f 72 20 64 79 6e 61 6d 69 63 61 6c  ack or dynamical
8490: 6c 79 20 61 6c 6c 6f 63 61 74 65 64 20 66 72 6f  ly allocated fro
84a0: 6d 0a 2a 2a 20 74 68 65 20 68 65 61 70 2e 20 20  m.** the heap.  
84b0: 57 68 65 6e 20 57 53 44 20 69 73 20 75 6e 73 75  When WSD is unsu
84c0: 70 70 6f 72 74 65 64 2c 20 74 68 65 20 76 61 72  pported, the var
84d0: 69 61 62 6c 65 20 64 65 63 6c 61 72 61 74 69 6f  iable declaratio
84e0: 6e 73 20 73 63 61 74 74 65 72 65 64 0a 2a 2a 20  ns scattered.** 
84f0: 74 68 72 6f 75 67 68 6f 75 74 20 74 68 65 20 53  throughout the S
8500: 51 4c 69 74 65 20 63 6f 64 65 20 6d 75 73 74 20  QLite code must 
8510: 62 65 63 6f 6d 65 20 63 6f 6e 73 74 61 6e 74 73  become constants
8520: 20 69 6e 73 74 65 61 64 2e 20 20 54 68 65 20 53   instead.  The S
8530: 51 4c 49 54 45 5f 57 53 44 0a 2a 2a 20 6d 61 63  QLITE_WSD.** mac
8540: 72 6f 20 69 73 20 75 73 65 64 20 66 6f 72 20 74  ro is used for t
8550: 68 69 73 20 70 75 72 70 6f 73 65 2e 20 20 41 6e  his purpose.  An
8560: 64 20 69 6e 73 74 65 61 64 20 6f 66 20 72 65 66  d instead of ref
8570: 65 72 65 6e 63 69 6e 67 20 74 68 65 20 76 61 72  erencing the var
8580: 69 61 62 6c 65 0a 2a 2a 20 64 69 72 65 63 74 6c  iable.** directl
8590: 79 2c 20 77 65 20 75 73 65 20 69 74 73 20 63 6f  y, we use its co
85a0: 6e 73 74 61 6e 74 20 61 73 20 61 20 6b 65 79 20  nstant as a key 
85b0: 74 6f 20 6c 6f 6f 6b 75 70 20 74 68 65 20 72 75  to lookup the ru
85c0: 6e 2d 74 69 6d 65 20 61 6c 6c 6f 63 61 74 65 64  n-time allocated
85d0: 0a 2a 2a 20 62 75 66 66 65 72 20 74 68 61 74 20  .** buffer that 
85e0: 68 6f 6c 64 73 20 72 65 61 6c 20 76 61 72 69 61  holds real varia
85f0: 62 6c 65 2e 20 20 54 68 65 20 63 6f 6e 73 74 61  ble.  The consta
8600: 6e 74 20 69 73 20 61 6c 73 6f 20 74 68 65 20 69  nt is also the i
8610: 6e 69 74 69 61 6c 69 7a 65 72 0a 2a 2a 20 66 6f  nitializer.** fo
8620: 72 20 74 68 65 20 72 75 6e 2d 74 69 6d 65 20 61  r the run-time a
8630: 6c 6c 6f 63 61 74 65 64 20 62 75 66 66 65 72 2e  llocated buffer.
8640: 0a 2a 2a 0a 2a 2a 20 49 6e 20 74 68 65 20 75 73  .**.** In the us
8650: 75 61 6c 20 63 61 73 65 20 77 68 65 72 65 20 57  ual case where W
8660: 53 44 20 69 73 20 73 75 70 70 6f 72 74 65 64 2c  SD is supported,
8670: 20 74 68 65 20 53 51 4c 49 54 45 5f 57 53 44 20   the SQLITE_WSD 
8680: 61 6e 64 20 47 4c 4f 42 41 4c 0a 2a 2a 20 6d 61  and GLOBAL.** ma
8690: 63 72 6f 73 20 62 65 63 6f 6d 65 20 6e 6f 2d 6f  cros become no-o
86a0: 70 73 20 61 6e 64 20 68 61 76 65 20 7a 65 72 6f  ps and have zero
86b0: 20 70 65 72 66 6f 72 6d 61 6e 63 65 20 69 6d 70   performance imp
86c0: 61 63 74 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53  act..*/.#ifdef S
86d0: 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 53 44 0a 20  QLITE_OMIT_WSD. 
86e0: 20 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f   #define SQLITE_
86f0: 57 53 44 20 63 6f 6e 73 74 0a 20 20 23 64 65 66  WSD const.  #def
8700: 69 6e 65 20 47 4c 4f 42 41 4c 28 74 2c 76 29 20  ine GLOBAL(t,v) 
8710: 28 2a 28 74 2a 29 73 71 6c 69 74 65 33 5f 77 73  (*(t*)sqlite3_ws
8720: 64 5f 66 69 6e 64 28 28 76 6f 69 64 2a 29 26 28  d_find((void*)&(
8730: 76 29 2c 20 73 69 7a 65 6f 66 28 76 29 29 29 0a  v), sizeof(v))).
8740: 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65    #define sqlite
8750: 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 20 47 4c  3GlobalConfig GL
8760: 4f 42 41 4c 28 73 74 72 75 63 74 20 53 71 6c 69  OBAL(struct Sqli
8770: 74 65 33 43 6f 6e 66 69 67 2c 20 73 71 6c 69 74  te3Config, sqlit
8780: 65 33 43 6f 6e 66 69 67 29 0a 20 20 69 6e 74 20  e3Config).  int 
8790: 73 71 6c 69 74 65 33 5f 77 73 64 5f 69 6e 69 74  sqlite3_wsd_init
87a0: 28 69 6e 74 20 4e 2c 20 69 6e 74 20 4a 29 3b 0a  (int N, int J);.
87b0: 20 20 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 5f    void *sqlite3_
87c0: 77 73 64 5f 66 69 6e 64 28 76 6f 69 64 20 2a 4b  wsd_find(void *K
87d0: 2c 20 69 6e 74 20 4c 29 3b 0a 23 65 6c 73 65 0a  , int L);.#else.
87e0: 20 20 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45    #define SQLITE
87f0: 5f 57 53 44 0a 20 20 23 64 65 66 69 6e 65 20 47  _WSD.  #define G
8800: 4c 4f 42 41 4c 28 74 2c 76 29 20 76 0a 20 20 23  LOBAL(t,v) v.  #
8810: 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 47 6c  define sqlite3Gl
8820: 6f 62 61 6c 43 6f 6e 66 69 67 20 73 71 6c 69 74  obalConfig sqlit
8830: 65 33 43 6f 6e 66 69 67 0a 23 65 6e 64 69 66 0a  e3Config.#endif.
8840: 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f  ./*.** The follo
8850: 77 69 6e 67 20 6d 61 63 72 6f 73 20 61 72 65 20  wing macros are 
8860: 75 73 65 64 20 74 6f 20 73 75 70 70 72 65 73 73  used to suppress
8870: 20 63 6f 6d 70 69 6c 65 72 20 77 61 72 6e 69 6e   compiler warnin
8880: 67 73 20 61 6e 64 20 74 6f 0a 2a 2a 20 6d 61 6b  gs and to.** mak
8890: 65 20 69 74 20 63 6c 65 61 72 20 74 6f 20 68 75  e it clear to hu
88a0: 6d 61 6e 20 72 65 61 64 65 72 73 20 77 68 65 6e  man readers when
88b0: 20 61 20 66 75 6e 63 74 69 6f 6e 20 70 61 72 61   a function para
88c0: 6d 65 74 65 72 20 69 73 20 64 65 6c 69 62 65 72  meter is deliber
88d0: 61 74 65 6c 79 0a 2a 2a 20 6c 65 66 74 20 75 6e  ately.** left un
88e0: 75 73 65 64 20 77 69 74 68 69 6e 20 74 68 65 20  used within the 
88f0: 62 6f 64 79 20 6f 66 20 61 20 66 75 6e 63 74 69  body of a functi
8900: 6f 6e 2e 20 54 68 69 73 20 75 73 75 61 6c 6c 79  on. This usually
8910: 20 68 61 70 70 65 6e 73 20 77 68 65 6e 0a 2a 2a   happens when.**
8920: 20 61 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 63   a function is c
8930: 61 6c 6c 65 64 20 76 69 61 20 61 20 66 75 6e 63  alled via a func
8940: 74 69 6f 6e 20 70 6f 69 6e 74 65 72 2e 20 46 6f  tion pointer. Fo
8950: 72 20 65 78 61 6d 70 6c 65 20 74 68 65 0a 2a 2a  r example the.**
8960: 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20   implementation 
8970: 6f 66 20 61 6e 20 53 51 4c 20 61 67 67 72 65 67  of an SQL aggreg
8980: 61 74 65 20 73 74 65 70 20 63 61 6c 6c 62 61 63  ate step callbac
8990: 6b 20 6d 61 79 20 6e 6f 74 20 75 73 65 20 74 68  k may not use th
89a0: 65 0a 2a 2a 20 70 61 72 61 6d 65 74 65 72 20 69  e.** parameter i
89b0: 6e 64 69 63 61 74 69 6e 67 20 74 68 65 20 6e 75  ndicating the nu
89c0: 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74  mber of argument
89d0: 73 20 70 61 73 73 65 64 20 74 6f 20 74 68 65 20  s passed to the 
89e0: 61 67 67 72 65 67 61 74 65 2c 0a 2a 2a 20 69 66  aggregate,.** if
89f0: 20 69 74 20 6b 6e 6f 77 73 20 74 68 61 74 20 74   it knows that t
8a00: 68 69 73 20 69 73 20 65 6e 66 6f 72 63 65 64 20  his is enforced 
8a10: 65 6c 73 65 77 68 65 72 65 2e 0a 2a 2a 0a 2a 2a  elsewhere..**.**
8a20: 20 57 68 65 6e 20 61 20 66 75 6e 63 74 69 6f 6e   When a function
8a30: 20 70 61 72 61 6d 65 74 65 72 20 69 73 20 6e 6f   parameter is no
8a40: 74 20 75 73 65 64 20 61 74 20 61 6c 6c 20 77 69  t used at all wi
8a50: 74 68 69 6e 20 74 68 65 20 62 6f 64 79 20 6f 66  thin the body of
8a60: 20 61 20 66 75 6e 63 74 69 6f 6e 2c 0a 2a 2a 20   a function,.** 
8a70: 69 74 20 69 73 20 67 65 6e 65 72 61 6c 6c 79 20  it is generally 
8a80: 6e 61 6d 65 64 20 22 4e 6f 74 55 73 65 64 22 20  named "NotUsed" 
8a90: 6f 72 20 22 4e 6f 74 55 73 65 64 32 22 20 74 6f  or "NotUsed2" to
8aa0: 20 6d 61 6b 65 20 74 68 69 6e 67 73 20 65 76 65   make things eve
8ab0: 6e 20 63 6c 65 61 72 65 72 2e 0a 2a 2a 20 48 6f  n clearer..** Ho
8ac0: 77 65 76 65 72 2c 20 74 68 65 73 65 20 6d 61 63  wever, these mac
8ad0: 72 6f 73 20 6d 61 79 20 61 6c 73 6f 20 62 65 20  ros may also be 
8ae0: 75 73 65 64 20 74 6f 20 73 75 70 70 72 65 73 73  used to suppress
8af0: 20 77 61 72 6e 69 6e 67 73 20 72 65 6c 61 74 65   warnings relate
8b00: 64 20 74 6f 0a 2a 2a 20 70 61 72 61 6d 65 74 65  d to.** paramete
8b10: 72 73 20 74 68 61 74 20 6d 61 79 20 6f 72 20 6d  rs that may or m
8b20: 61 79 20 6e 6f 74 20 62 65 20 75 73 65 64 20 64  ay not be used d
8b30: 65 70 65 6e 64 69 6e 67 20 6f 6e 20 63 6f 6d 70  epending on comp
8b40: 69 6c 61 74 69 6f 6e 20 6f 70 74 69 6f 6e 73 2e  ilation options.
8b50: 0a 2a 2a 20 46 6f 72 20 65 78 61 6d 70 6c 65 20  .** For example 
8b60: 74 68 6f 73 65 20 70 61 72 61 6d 65 74 65 72 73  those parameters
8b70: 20 6f 6e 6c 79 20 75 73 65 64 20 69 6e 20 61 73   only used in as
8b80: 73 65 72 74 28 29 20 73 74 61 74 65 6d 65 6e 74  sert() statement
8b90: 73 2e 20 49 6e 20 74 68 65 73 65 0a 2a 2a 20 63  s. In these.** c
8ba0: 61 73 65 73 20 74 68 65 20 70 61 72 61 6d 65 74  ases the paramet
8bb0: 65 72 73 20 61 72 65 20 6e 61 6d 65 64 20 61 73  ers are named as
8bc0: 20 70 65 72 20 74 68 65 20 75 73 75 61 6c 20 63   per the usual c
8bd0: 6f 6e 76 65 6e 74 69 6f 6e 73 2e 0a 2a 2f 0a 23  onventions..*/.#
8be0: 64 65 66 69 6e 65 20 55 4e 55 53 45 44 5f 50 41  define UNUSED_PA
8bf0: 52 41 4d 45 54 45 52 28 78 29 20 28 76 6f 69 64  RAMETER(x) (void
8c00: 29 28 78 29 0a 23 64 65 66 69 6e 65 20 55 4e 55  )(x).#define UNU
8c10: 53 45 44 5f 50 41 52 41 4d 45 54 45 52 32 28 78  SED_PARAMETER2(x
8c20: 2c 79 29 20 55 4e 55 53 45 44 5f 50 41 52 41 4d  ,y) UNUSED_PARAM
8c30: 45 54 45 52 28 78 29 2c 55 4e 55 53 45 44 5f 50  ETER(x),UNUSED_P
8c40: 41 52 41 4d 45 54 45 52 28 79 29 0a 0a 2f 2a 0a  ARAMETER(y)../*.
8c50: 2a 2a 20 46 6f 72 77 61 72 64 20 72 65 66 65 72  ** Forward refer
8c60: 65 6e 63 65 73 20 74 6f 20 73 74 72 75 63 74 75  ences to structu
8c70: 72 65 73 0a 2a 2f 0a 74 79 70 65 64 65 66 20 73  res.*/.typedef s
8c80: 74 72 75 63 74 20 41 67 67 49 6e 66 6f 20 41 67  truct AggInfo Ag
8c90: 67 49 6e 66 6f 3b 0a 74 79 70 65 64 65 66 20 73  gInfo;.typedef s
8ca0: 74 72 75 63 74 20 41 75 74 68 43 6f 6e 74 65 78  truct AuthContex
8cb0: 74 20 41 75 74 68 43 6f 6e 74 65 78 74 3b 0a 74  t AuthContext;.t
8cc0: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 41 75  ypedef struct Au
8cd0: 74 6f 69 6e 63 49 6e 66 6f 20 41 75 74 6f 69 6e  toincInfo Autoin
8ce0: 63 49 6e 66 6f 3b 0a 74 79 70 65 64 65 66 20 73  cInfo;.typedef s
8cf0: 74 72 75 63 74 20 42 69 74 76 65 63 20 42 69 74  truct Bitvec Bit
8d00: 76 65 63 3b 0a 74 79 70 65 64 65 66 20 73 74 72  vec;.typedef str
8d10: 75 63 74 20 43 6f 6c 6c 53 65 71 20 43 6f 6c 6c  uct CollSeq Coll
8d20: 53 65 71 3b 0a 74 79 70 65 64 65 66 20 73 74 72  Seq;.typedef str
8d30: 75 63 74 20 43 6f 6c 75 6d 6e 20 43 6f 6c 75 6d  uct Column Colum
8d40: 6e 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  n;.typedef struc
8d50: 74 20 44 62 20 44 62 3b 0a 74 79 70 65 64 65 66  t Db Db;.typedef
8d60: 20 73 74 72 75 63 74 20 53 63 68 65 6d 61 20 53   struct Schema S
8d70: 63 68 65 6d 61 3b 0a 74 79 70 65 64 65 66 20 73  chema;.typedef s
8d80: 74 72 75 63 74 20 45 78 70 72 20 45 78 70 72 3b  truct Expr Expr;
8d90: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
8da0: 45 78 70 72 4c 69 73 74 20 45 78 70 72 4c 69 73  ExprList ExprLis
8db0: 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  t;.typedef struc
8dc0: 74 20 46 4b 65 79 20 46 4b 65 79 3b 0a 74 79 70  t FKey FKey;.typ
8dd0: 65 64 65 66 20 73 74 72 75 63 74 20 46 75 6e 63  edef struct Func
8de0: 44 65 73 74 72 75 63 74 6f 72 20 46 75 6e 63 44  Destructor FuncD
8df0: 65 73 74 72 75 63 74 6f 72 3b 0a 74 79 70 65 64  estructor;.typed
8e00: 65 66 20 73 74 72 75 63 74 20 46 75 6e 63 44 65  ef struct FuncDe
8e10: 66 20 46 75 6e 63 44 65 66 3b 0a 74 79 70 65 64  f FuncDef;.typed
8e20: 65 66 20 73 74 72 75 63 74 20 46 75 6e 63 44 65  ef struct FuncDe
8e30: 66 48 61 73 68 20 46 75 6e 63 44 65 66 48 61 73  fHash FuncDefHas
8e40: 68 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  h;.typedef struc
8e50: 74 20 49 64 4c 69 73 74 20 49 64 4c 69 73 74 3b  t IdList IdList;
8e60: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
8e70: 49 6e 64 65 78 20 49 6e 64 65 78 3b 0a 74 79 70  Index Index;.typ
8e80: 65 64 65 66 20 73 74 72 75 63 74 20 49 6e 64 65  edef struct Inde
8e90: 78 53 61 6d 70 6c 65 20 49 6e 64 65 78 53 61 6d  xSample IndexSam
8ea0: 70 6c 65 3b 0a 74 79 70 65 64 65 66 20 73 74 72  ple;.typedef str
8eb0: 75 63 74 20 4b 65 79 43 6c 61 73 73 20 4b 65 79  uct KeyClass Key
8ec0: 43 6c 61 73 73 3b 0a 74 79 70 65 64 65 66 20 73  Class;.typedef s
8ed0: 74 72 75 63 74 20 4b 65 79 49 6e 66 6f 20 4b 65  truct KeyInfo Ke
8ee0: 79 49 6e 66 6f 3b 0a 74 79 70 65 64 65 66 20 73  yInfo;.typedef s
8ef0: 74 72 75 63 74 20 4c 6f 6f 6b 61 73 69 64 65 20  truct Lookaside 
8f00: 4c 6f 6f 6b 61 73 69 64 65 3b 0a 74 79 70 65 64  Lookaside;.typed
8f10: 65 66 20 73 74 72 75 63 74 20 4c 6f 6f 6b 61 73  ef struct Lookas
8f20: 69 64 65 53 6c 6f 74 20 4c 6f 6f 6b 61 73 69 64  ideSlot Lookasid
8f30: 65 53 6c 6f 74 3b 0a 74 79 70 65 64 65 66 20 73  eSlot;.typedef s
8f40: 74 72 75 63 74 20 4d 6f 64 75 6c 65 20 4d 6f 64  truct Module Mod
8f50: 75 6c 65 3b 0a 74 79 70 65 64 65 66 20 73 74 72  ule;.typedef str
8f60: 75 63 74 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20  uct NameContext 
8f70: 4e 61 6d 65 43 6f 6e 74 65 78 74 3b 0a 74 79 70  NameContext;.typ
8f80: 65 64 65 66 20 73 74 72 75 63 74 20 50 61 72 73  edef struct Pars
8f90: 65 20 50 61 72 73 65 3b 0a 74 79 70 65 64 65 66  e Parse;.typedef
8fa0: 20 73 74 72 75 63 74 20 50 72 65 55 70 64 61 74   struct PreUpdat
8fb0: 65 20 50 72 65 55 70 64 61 74 65 3b 0a 74 79 70  e PreUpdate;.typ
8fc0: 65 64 65 66 20 73 74 72 75 63 74 20 50 72 69 6e  edef struct Prin
8fd0: 74 66 41 72 67 75 6d 65 6e 74 73 20 50 72 69 6e  tfArguments Prin
8fe0: 74 66 41 72 67 75 6d 65 6e 74 73 3b 0a 74 79 70  tfArguments;.typ
8ff0: 65 64 65 66 20 73 74 72 75 63 74 20 52 6f 77 53  edef struct RowS
9000: 65 74 20 52 6f 77 53 65 74 3b 0a 74 79 70 65 64  et RowSet;.typed
9010: 65 66 20 73 74 72 75 63 74 20 53 61 76 65 70 6f  ef struct Savepo
9020: 69 6e 74 20 53 61 76 65 70 6f 69 6e 74 3b 0a 74  int Savepoint;.t
9030: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 53 65  ypedef struct Se
9040: 6c 65 63 74 20 53 65 6c 65 63 74 3b 0a 74 79 70  lect Select;.typ
9050: 65 64 65 66 20 73 74 72 75 63 74 20 53 51 4c 69  edef struct SQLi
9060: 74 65 54 68 72 65 61 64 20 53 51 4c 69 74 65 54  teThread SQLiteT
9070: 68 72 65 61 64 3b 0a 74 79 70 65 64 65 66 20 73  hread;.typedef s
9080: 74 72 75 63 74 20 53 65 6c 65 63 74 44 65 73 74  truct SelectDest
9090: 20 53 65 6c 65 63 74 44 65 73 74 3b 0a 74 79 70   SelectDest;.typ
90a0: 65 64 65 66 20 73 74 72 75 63 74 20 53 72 63 4c  edef struct SrcL
90b0: 69 73 74 20 53 72 63 4c 69 73 74 3b 0a 74 79 70  ist SrcList;.typ
90c0: 65 64 65 66 20 73 74 72 75 63 74 20 53 74 72 41  edef struct StrA
90d0: 63 63 75 6d 20 53 74 72 41 63 63 75 6d 3b 0a 74  ccum StrAccum;.t
90e0: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 54 61  ypedef struct Ta
90f0: 62 6c 65 20 54 61 62 6c 65 3b 0a 74 79 70 65 64  ble Table;.typed
9100: 65 66 20 73 74 72 75 63 74 20 54 61 62 6c 65 4c  ef struct TableL
9110: 6f 63 6b 20 54 61 62 6c 65 4c 6f 63 6b 3b 0a 74  ock TableLock;.t
9120: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 54 6f  ypedef struct To
9130: 6b 65 6e 20 54 6f 6b 65 6e 3b 0a 74 79 70 65 64  ken Token;.typed
9140: 65 66 20 73 74 72 75 63 74 20 54 72 65 65 56 69  ef struct TreeVi
9150: 65 77 20 54 72 65 65 56 69 65 77 3b 0a 74 79 70  ew TreeView;.typ
9160: 65 64 65 66 20 73 74 72 75 63 74 20 54 72 69 67  edef struct Trig
9170: 67 65 72 20 54 72 69 67 67 65 72 3b 0a 74 79 70  ger Trigger;.typ
9180: 65 64 65 66 20 73 74 72 75 63 74 20 54 72 69 67  edef struct Trig
9190: 67 65 72 50 72 67 20 54 72 69 67 67 65 72 50 72  gerPrg TriggerPr
91a0: 67 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  g;.typedef struc
91b0: 74 20 54 72 69 67 67 65 72 53 74 65 70 20 54 72  t TriggerStep Tr
91c0: 69 67 67 65 72 53 74 65 70 3b 0a 74 79 70 65 64  iggerStep;.typed
91d0: 65 66 20 73 74 72 75 63 74 20 55 6e 70 61 63 6b  ef struct Unpack
91e0: 65 64 52 65 63 6f 72 64 20 55 6e 70 61 63 6b 65  edRecord Unpacke
91f0: 64 52 65 63 6f 72 64 3b 0a 74 79 70 65 64 65 66  dRecord;.typedef
9200: 20 73 74 72 75 63 74 20 55 70 73 65 72 74 20 55   struct Upsert U
9210: 70 73 65 72 74 3b 0a 74 79 70 65 64 65 66 20 73  psert;.typedef s
9220: 74 72 75 63 74 20 56 54 61 62 6c 65 20 56 54 61  truct VTable VTa
9230: 62 6c 65 3b 0a 74 79 70 65 64 65 66 20 73 74 72  ble;.typedef str
9240: 75 63 74 20 56 74 61 62 43 74 78 20 56 74 61 62  uct VtabCtx Vtab
9250: 43 74 78 3b 0a 74 79 70 65 64 65 66 20 73 74 72  Ctx;.typedef str
9260: 75 63 74 20 57 61 6c 6b 65 72 20 57 61 6c 6b 65  uct Walker Walke
9270: 72 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  r;.typedef struc
9280: 74 20 57 68 65 72 65 49 6e 66 6f 20 57 68 65 72  t WhereInfo Wher
9290: 65 49 6e 66 6f 3b 0a 74 79 70 65 64 65 66 20 73  eInfo;.typedef s
92a0: 74 72 75 63 74 20 57 69 74 68 20 57 69 74 68 3b  truct With With;
92b0: 0a 0a 2f 2a 20 41 20 56 4c 69 73 74 20 6f 62 6a  ../* A VList obj
92c0: 65 63 74 20 72 65 63 6f 72 64 73 20 61 20 6d 61  ect records a ma
92d0: 70 70 69 6e 67 20 62 65 74 77 65 65 6e 20 70 61  pping between pa
92e0: 72 61 6d 65 74 65 72 73 2f 76 61 72 69 61 62 6c  rameters/variabl
92f0: 65 73 2f 77 69 6c 64 63 61 72 64 73 0a 2a 2a 20  es/wildcards.** 
9300: 69 6e 20 74 68 65 20 53 51 4c 20 73 74 61 74 65  in the SQL state
9310: 6d 65 6e 74 20 28 73 75 63 68 20 61 73 20 24 61  ment (such as $a
9320: 62 63 2c 20 40 70 71 72 2c 20 6f 72 20 3a 78 79  bc, @pqr, or :xy
9330: 7a 29 20 61 6e 64 20 74 68 65 20 69 6e 74 65 67  z) and the integ
9340: 65 72 0a 2a 2a 20 76 61 72 69 61 62 6c 65 20 6e  er.** variable n
9350: 75 6d 62 65 72 20 61 73 73 6f 63 69 61 74 65 64  umber associated
9360: 20 77 69 74 68 20 74 68 61 74 20 70 61 72 61 6d   with that param
9370: 65 74 65 72 2e 20 20 53 65 65 20 74 68 65 20 66  eter.  See the f
9380: 6f 72 6d 61 74 20 64 65 73 63 72 69 70 74 69 6f  ormat descriptio
9390: 6e 0a 2a 2a 20 6f 6e 20 74 68 65 20 73 71 6c 69  n.** on the sqli
93a0: 74 65 33 56 4c 69 73 74 41 64 64 28 29 20 72 6f  te3VListAdd() ro
93b0: 75 74 69 6e 65 20 66 6f 72 20 6d 6f 72 65 20 69  utine for more i
93c0: 6e 66 6f 72 6d 61 74 69 6f 6e 2e 20 20 41 20 56  nformation.  A V
93d0: 4c 69 73 74 20 69 73 20 72 65 61 6c 6c 79 0a 2a  List is really.*
93e0: 2a 20 6a 75 73 74 20 61 6e 20 61 72 72 61 79 20  * just an array 
93f0: 6f 66 20 69 6e 74 65 67 65 72 73 2e 0a 2a 2f 0a  of integers..*/.
9400: 74 79 70 65 64 65 66 20 69 6e 74 20 56 4c 69 73  typedef int VLis
9410: 74 3b 0a 0a 2f 2a 0a 2a 2a 20 44 65 66 65 72 20  t;../*.** Defer 
9420: 73 6f 75 72 63 69 6e 67 20 76 64 62 65 2e 68 20  sourcing vdbe.h 
9430: 61 6e 64 20 62 74 72 65 65 2e 68 20 75 6e 74 69  and btree.h unti
9440: 6c 20 61 66 74 65 72 20 74 68 65 20 22 75 38 22  l after the "u8"
9450: 20 61 6e 64 0a 2a 2a 20 22 42 75 73 79 48 61 6e   and.** "BusyHan
9460: 64 6c 65 72 22 20 74 79 70 65 64 65 66 73 2e 20  dler" typedefs. 
9470: 76 64 62 65 2e 68 20 61 6c 73 6f 20 72 65 71 75  vdbe.h also requ
9480: 69 72 65 73 20 61 20 66 65 77 20 6f 66 20 74 68  ires a few of th
9490: 65 20 6f 70 61 71 75 65 0a 2a 2a 20 70 6f 69 6e  e opaque.** poin
94a0: 74 65 72 20 74 79 70 65 73 20 28 69 2e 65 2e 20  ter types (i.e. 
94b0: 46 75 6e 63 44 65 66 29 20 64 65 66 69 6e 65 64  FuncDef) defined
94c0: 20 61 62 6f 76 65 2e 0a 2a 2f 0a 23 69 6e 63 6c   above..*/.#incl
94d0: 75 64 65 20 22 62 74 72 65 65 2e 68 22 0a 23 69  ude "btree.h".#i
94e0: 6e 63 6c 75 64 65 20 22 76 64 62 65 2e 68 22 0a  nclude "vdbe.h".
94f0: 23 69 6e 63 6c 75 64 65 20 22 70 61 67 65 72 2e  #include "pager.
9500: 68 22 0a 23 69 6e 63 6c 75 64 65 20 22 70 63 61  h".#include "pca
9510: 63 68 65 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20  che.h".#include 
9520: 22 6f 73 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20  "os.h".#include 
9530: 22 6d 75 74 65 78 2e 68 22 0a 0a 2f 2a 20 54 68  "mutex.h"../* Th
9540: 65 20 53 51 4c 49 54 45 5f 45 58 54 52 41 5f 44  e SQLITE_EXTRA_D
9550: 55 52 41 42 4c 45 20 63 6f 6d 70 69 6c 65 2d 74  URABLE compile-t
9560: 69 6d 65 20 6f 70 74 69 6f 6e 20 75 73 65 64 20  ime option used 
9570: 74 6f 20 73 65 74 20 74 68 65 20 64 65 66 61 75  to set the defau
9580: 6c 74 0a 2a 2a 20 73 79 6e 63 68 72 6f 6e 6f 75  lt.** synchronou
9590: 73 20 73 65 74 74 69 6e 67 20 74 6f 20 45 58 54  s setting to EXT
95a0: 52 41 2e 20 20 49 74 20 69 73 20 6e 6f 20 6c 6f  RA.  It is no lo
95b0: 6e 67 65 72 20 73 75 70 70 6f 72 74 65 64 2e 0a  nger supported..
95c0: 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
95d0: 5f 45 58 54 52 41 5f 44 55 52 41 42 4c 45 0a 23  _EXTRA_DURABLE.#
95e0: 20 77 61 72 6e 69 6e 67 20 55 73 65 20 53 51 4c   warning Use SQL
95f0: 49 54 45 5f 44 45 46 41 55 4c 54 5f 53 59 4e 43  ITE_DEFAULT_SYNC
9600: 48 52 4f 4e 4f 55 53 3d 33 20 69 6e 73 74 65 61  HRONOUS=3 instea
9610: 64 20 6f 66 20 53 51 4c 49 54 45 5f 45 58 54 52  d of SQLITE_EXTR
9620: 41 5f 44 55 52 41 42 4c 45 0a 23 20 64 65 66 69  A_DURABLE.# defi
9630: 6e 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c  ne SQLITE_DEFAUL
9640: 54 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 20 33 0a  T_SYNCHRONOUS 3.
9650: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 44 65  #endif../*.** De
9660: 66 61 75 6c 74 20 73 79 6e 63 68 72 6f 6e 6f 75  fault synchronou
9670: 73 20 6c 65 76 65 6c 73 2e 0a 2a 2a 0a 2a 2a 20  s levels..**.** 
9680: 4e 6f 74 65 20 74 68 61 74 20 28 66 6f 72 20 68  Note that (for h
9690: 69 73 74 6f 72 63 61 6c 20 72 65 61 73 6f 6e 73  istorcal reasons
96a0: 29 20 74 68 65 20 50 41 47 45 52 5f 53 59 4e 43  ) the PAGER_SYNC
96b0: 48 52 4f 4e 4f 55 53 5f 2a 20 6d 61 63 72 6f 73  HRONOUS_* macros
96c0: 20 64 69 66 66 65 72 0a 2a 2a 20 66 72 6f 6d 20   differ.** from 
96d0: 74 68 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55  the SQLITE_DEFAU
96e0: 4c 54 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 20 76  LT_SYNCHRONOUS v
96f0: 61 6c 75 65 20 62 79 20 31 2e 0a 2a 2a 0a 2a 2a  alue by 1..**.**
9700: 20 20 20 20 20 20 20 20 20 20 20 50 41 47 45 52             PAGER
9710: 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 20 20 20 20  _SYNCHRONOUS    
9720: 20 20 20 44 45 46 41 55 4c 54 5f 53 59 4e 43 48     DEFAULT_SYNCH
9730: 52 4f 4e 4f 55 53 0a 2a 2a 20 20 20 4f 46 46 20  RONOUS.**   OFF 
9740: 20 20 20 20 20 20 20 20 20 20 31 20 20 20 20 20            1     
9750: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9760: 20 20 20 20 30 0a 2a 2a 20 20 20 4e 4f 52 4d 41      0.**   NORMA
9770: 4c 20 20 20 20 20 20 20 20 32 20 20 20 20 20 20  L        2      
9780: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9790: 20 20 20 31 0a 2a 2a 20 20 20 46 55 4c 4c 20 20     1.**   FULL  
97a0: 20 20 20 20 20 20 20 20 33 20 20 20 20 20 20 20          3       
97b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
97c0: 20 20 32 0a 2a 2a 20 20 20 45 58 54 52 41 20 20    2.**   EXTRA  
97d0: 20 20 20 20 20 20 20 34 20 20 20 20 20 20 20 20         4        
97e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
97f0: 20 33 0a 2a 2a 0a 2a 2a 20 54 68 65 20 22 50 52   3.**.** The "PR
9800: 41 47 4d 41 20 73 79 6e 63 68 72 6f 6e 6f 75 73  AGMA synchronous
9810: 22 20 73 74 61 74 65 6d 65 6e 74 20 61 6c 73 6f  " statement also
9820: 20 75 73 65 73 20 74 68 65 20 7a 65 72 6f 2d 62   uses the zero-b
9830: 61 73 65 64 20 6e 75 6d 62 65 72 73 2e 0a 2a 2a  ased numbers..**
9840: 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c   In other words,
9850: 20 74 68 65 20 7a 65 72 6f 2d 62 61 73 65 64 20   the zero-based 
9860: 6e 75 6d 62 65 72 73 20 61 72 65 20 75 73 65 64  numbers are used
9870: 20 66 6f 72 20 61 6c 6c 20 65 78 74 65 72 6e 61   for all externa
9880: 6c 20 69 6e 74 65 72 66 61 63 65 73 0a 2a 2a 20  l interfaces.** 
9890: 61 6e 64 20 74 68 65 20 6f 6e 65 2d 62 61 73 65  and the one-base
98a0: 64 20 76 61 6c 75 65 73 20 61 72 65 20 75 73 65  d values are use
98b0: 64 20 69 6e 74 65 72 6e 61 6c 6c 79 2e 0a 2a 2f  d internally..*/
98c0: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
98d0: 44 45 46 41 55 4c 54 5f 53 59 4e 43 48 52 4f 4e  DEFAULT_SYNCHRON
98e0: 4f 55 53 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  OUS.# define SQL
98f0: 49 54 45 5f 44 45 46 41 55 4c 54 5f 53 59 4e 43  ITE_DEFAULT_SYNC
9900: 48 52 4f 4e 4f 55 53 20 32 0a 23 65 6e 64 69 66  HRONOUS 2.#endif
9910: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
9920: 44 45 46 41 55 4c 54 5f 57 41 4c 5f 53 59 4e 43  DEFAULT_WAL_SYNC
9930: 48 52 4f 4e 4f 55 53 0a 23 20 64 65 66 69 6e 65  HRONOUS.# define
9940: 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f   SQLITE_DEFAULT_
9950: 57 41 4c 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 20  WAL_SYNCHRONOUS 
9960: 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 53  SQLITE_DEFAULT_S
9970: 59 4e 43 48 52 4f 4e 4f 55 53 0a 23 65 6e 64 69  YNCHRONOUS.#endi
9980: 66 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 64 61  f../*.** Each da
9990: 74 61 62 61 73 65 20 66 69 6c 65 20 74 6f 20 62  tabase file to b
99a0: 65 20 61 63 63 65 73 73 65 64 20 62 79 20 74 68  e accessed by th
99b0: 65 20 73 79 73 74 65 6d 20 69 73 20 61 6e 20 69  e system is an i
99c0: 6e 73 74 61 6e 63 65 0a 2a 2a 20 6f 66 20 74 68  nstance.** of th
99d0: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75  e following stru
99e0: 63 74 75 72 65 2e 20 20 54 68 65 72 65 20 61 72  cture.  There ar
99f0: 65 20 6e 6f 72 6d 61 6c 6c 79 20 74 77 6f 20 6f  e normally two o
9a00: 66 20 74 68 65 73 65 20 73 74 72 75 63 74 75 72  f these structur
9a10: 65 73 0a 2a 2a 20 69 6e 20 74 68 65 20 73 71 6c  es.** in the sql
9a20: 69 74 65 2e 61 44 62 5b 5d 20 61 72 72 61 79 2e  ite.aDb[] array.
9a30: 20 20 61 44 62 5b 30 5d 20 69 73 20 74 68 65 20    aDb[0] is the 
9a40: 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 66 69  main database fi
9a50: 6c 65 20 61 6e 64 0a 2a 2a 20 61 44 62 5b 31 5d  le and.** aDb[1]
9a60: 20 69 73 20 74 68 65 20 64 61 74 61 62 61 73 65   is the database
9a70: 20 66 69 6c 65 20 75 73 65 64 20 74 6f 20 68 6f   file used to ho
9a80: 6c 64 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62  ld temporary tab
9a90: 6c 65 73 2e 20 20 41 64 64 69 74 69 6f 6e 61 6c  les.  Additional
9aa0: 0a 2a 2a 20 64 61 74 61 62 61 73 65 73 20 6d 61  .** databases ma
9ab0: 79 20 62 65 20 61 74 74 61 63 68 65 64 2e 0a 2a  y be attached..*
9ac0: 2f 0a 73 74 72 75 63 74 20 44 62 20 7b 0a 20 20  /.struct Db {.  
9ad0: 63 68 61 72 20 2a 7a 44 62 53 4e 61 6d 65 3b 20  char *zDbSName; 
9ae0: 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20       /* Name of 
9af0: 74 68 69 73 20 64 61 74 61 62 61 73 65 2e 20 28  this database. (
9b00: 73 63 68 65 6d 61 20 6e 61 6d 65 2c 20 6e 6f 74  schema name, not
9b10: 20 66 69 6c 65 6e 61 6d 65 29 20 2a 2f 0a 20 20   filename) */.  
9b20: 42 74 72 65 65 20 2a 70 42 74 3b 20 20 20 20 20  Btree *pBt;     
9b30: 20 20 20 20 20 2f 2a 20 54 68 65 20 42 2a 54 72       /* The B*Tr
9b40: 65 65 20 73 74 72 75 63 74 75 72 65 20 66 6f 72  ee structure for
9b50: 20 74 68 69 73 20 64 61 74 61 62 61 73 65 20 66   this database f
9b60: 69 6c 65 20 2a 2f 0a 20 20 75 38 20 73 61 66 65  ile */.  u8 safe
9b70: 74 79 5f 6c 65 76 65 6c 3b 20 20 20 20 20 2f 2a  ty_level;     /*
9b80: 20 48 6f 77 20 61 67 67 72 65 73 73 69 76 65 20   How aggressive 
9b90: 61 74 20 73 79 6e 63 69 6e 67 20 64 61 74 61 20  at syncing data 
9ba0: 74 6f 20 64 69 73 6b 20 2a 2f 0a 20 20 75 38 20  to disk */.  u8 
9bb0: 62 53 79 6e 63 53 65 74 3b 20 20 20 20 20 20 20  bSyncSet;       
9bc0: 20 20 2f 2a 20 54 72 75 65 20 69 66 20 22 50 52    /* True if "PR
9bd0: 41 47 4d 41 20 73 79 6e 63 68 72 6f 6e 6f 75 73  AGMA synchronous
9be0: 3d 4e 22 20 68 61 73 20 62 65 65 6e 20 72 75 6e  =N" has been run
9bf0: 20 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70 53   */.  Schema *pS
9c00: 63 68 65 6d 61 3b 20 20 20 20 20 2f 2a 20 50 6f  chema;     /* Po
9c10: 69 6e 74 65 72 20 74 6f 20 64 61 74 61 62 61 73  inter to databas
9c20: 65 20 73 63 68 65 6d 61 20 28 70 6f 73 73 69 62  e schema (possib
9c30: 6c 79 20 73 68 61 72 65 64 29 20 2a 2f 0a 7d 3b  ly shared) */.};
9c40: 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61  ../*.** An insta
9c50: 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f  nce of the follo
9c60: 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 20 73  wing structure s
9c70: 74 6f 72 65 73 20 61 20 64 61 74 61 62 61 73 65  tores a database
9c80: 20 73 63 68 65 6d 61 2e 0a 2a 2a 0a 2a 2a 20 4d   schema..**.** M
9c90: 6f 73 74 20 53 63 68 65 6d 61 20 6f 62 6a 65 63  ost Schema objec
9ca0: 74 73 20 61 72 65 20 61 73 73 6f 63 69 61 74 65  ts are associate
9cb0: 64 20 77 69 74 68 20 61 20 42 74 72 65 65 2e 20  d with a Btree. 
9cc0: 20 54 68 65 20 65 78 63 65 70 74 69 6f 6e 20 69   The exception i
9cd0: 73 0a 2a 2a 20 74 68 65 20 53 63 68 65 6d 61 20  s.** the Schema 
9ce0: 66 6f 72 20 74 68 65 20 54 45 4d 50 20 64 61 74  for the TEMP dat
9cf0: 61 62 61 65 73 20 28 73 71 6c 69 74 65 33 2e 61  abaes (sqlite3.a
9d00: 44 62 5b 31 5d 29 20 77 68 69 63 68 20 69 73 20  Db[1]) which is 
9d10: 66 72 65 65 2d 73 74 61 6e 64 69 6e 67 2e 0a 2a  free-standing..*
9d20: 2a 20 49 6e 20 73 68 61 72 65 64 20 63 61 63 68  * In shared cach
9d30: 65 20 6d 6f 64 65 2c 20 61 20 73 69 6e 67 6c 65  e mode, a single
9d40: 20 53 63 68 65 6d 61 20 6f 62 6a 65 63 74 20 63   Schema object c
9d50: 61 6e 20 62 65 20 73 68 61 72 65 64 20 62 79 20  an be shared by 
9d60: 6d 75 6c 74 69 70 6c 65 0a 2a 2a 20 42 74 72 65  multiple.** Btre
9d70: 65 73 20 74 68 61 74 20 72 65 66 65 72 20 74 6f  es that refer to
9d80: 20 74 68 65 20 73 61 6d 65 20 75 6e 64 65 72 6c   the same underl
9d90: 79 69 6e 67 20 42 74 53 68 61 72 65 64 20 6f 62  ying BtShared ob
9da0: 6a 65 63 74 2e 0a 2a 2a 0a 2a 2a 20 53 63 68 65  ject..**.** Sche
9db0: 6d 61 20 6f 62 6a 65 63 74 73 20 61 72 65 20 61  ma objects are a
9dc0: 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 64 65 61  utomatically dea
9dd0: 6c 6c 6f 63 61 74 65 64 20 77 68 65 6e 20 74 68  llocated when th
9de0: 65 20 6c 61 73 74 20 42 74 72 65 65 20 74 68 61  e last Btree tha
9df0: 74 0a 2a 2a 20 72 65 66 65 72 65 6e 63 65 73 20  t.** references 
9e00: 74 68 65 6d 20 69 73 20 64 65 73 74 72 6f 79 65  them is destroye
9e10: 64 2e 20 20 20 54 68 65 20 54 45 4d 50 20 53 63  d.   The TEMP Sc
9e20: 68 65 6d 61 20 69 73 20 6d 61 6e 75 61 6c 6c 79  hema is manually
9e30: 20 66 72 65 65 64 20 62 79 0a 2a 2a 20 73 71 6c   freed by.** sql
9e40: 69 74 65 33 5f 63 6c 6f 73 65 28 29 2e 0a 2a 0a  ite3_close()..*.
9e50: 2a 2a 20 41 20 74 68 72 65 61 64 20 6d 75 73 74  ** A thread must
9e60: 20 62 65 20 68 6f 6c 64 69 6e 67 20 61 20 6d 75   be holding a mu
9e70: 74 65 78 20 6f 6e 20 74 68 65 20 63 6f 72 72 65  tex on the corre
9e80: 73 70 6f 6e 64 69 6e 67 20 42 74 72 65 65 20 69  sponding Btree i
9e90: 6e 20 6f 72 64 65 72 0a 2a 2a 20 74 6f 20 61 63  n order.** to ac
9ea0: 63 65 73 73 20 53 63 68 65 6d 61 20 63 6f 6e 74  cess Schema cont
9eb0: 65 6e 74 2e 20 20 54 68 69 73 20 69 6d 70 6c 69  ent.  This impli
9ec0: 65 73 20 74 68 61 74 20 74 68 65 20 74 68 72 65  es that the thre
9ed0: 61 64 20 6d 75 73 74 20 61 6c 73 6f 20 62 65 0a  ad must also be.
9ee0: 2a 2a 20 68 6f 6c 64 69 6e 67 20 61 20 6d 75 74  ** holding a mut
9ef0: 65 78 20 6f 6e 20 74 68 65 20 73 71 6c 69 74 65  ex on the sqlite
9f00: 33 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 70 6f 69  3 connection poi
9f10: 6e 74 65 72 20 74 68 61 74 20 6f 77 6e 73 20 74  nter that owns t
9f20: 68 65 20 42 74 72 65 65 2e 0a 2a 2a 20 46 6f 72  he Btree..** For
9f30: 20 61 20 54 45 4d 50 20 53 63 68 65 6d 61 2c 20   a TEMP Schema, 
9f40: 6f 6e 6c 79 20 74 68 65 20 63 6f 6e 6e 65 63 74  only the connect
9f50: 69 6f 6e 20 6d 75 74 65 78 20 69 73 20 72 65 71  ion mutex is req
9f60: 75 69 72 65 64 2e 0a 2a 2f 0a 73 74 72 75 63 74  uired..*/.struct
9f70: 20 53 63 68 65 6d 61 20 7b 0a 20 20 69 6e 74 20   Schema {.  int 
9f80: 73 63 68 65 6d 61 5f 63 6f 6f 6b 69 65 3b 20 20  schema_cookie;  
9f90: 20 2f 2a 20 44 61 74 61 62 61 73 65 20 73 63 68   /* Database sch
9fa0: 65 6d 61 20 76 65 72 73 69 6f 6e 20 6e 75 6d 62  ema version numb
9fb0: 65 72 20 66 6f 72 20 74 68 69 73 20 66 69 6c 65  er for this file
9fc0: 20 2a 2f 0a 20 20 69 6e 74 20 69 47 65 6e 65 72   */.  int iGener
9fd0: 61 74 69 6f 6e 3b 20 20 20 20 20 2f 2a 20 47 65  ation;     /* Ge
9fe0: 6e 65 72 61 74 69 6f 6e 20 63 6f 75 6e 74 65 72  neration counter
9ff0: 2e 20 20 49 6e 63 72 65 6d 65 6e 74 65 64 20 77  .  Incremented w
a000: 69 74 68 20 65 61 63 68 20 63 68 61 6e 67 65 20  ith each change 
a010: 2a 2f 0a 20 20 48 61 73 68 20 74 62 6c 48 61 73  */.  Hash tblHas
a020: 68 3b 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c  h;        /* All
a030: 20 74 61 62 6c 65 73 20 69 6e 64 65 78 65 64 20   tables indexed 
a040: 62 79 20 6e 61 6d 65 20 2a 2f 0a 20 20 48 61 73  by name */.  Has
a050: 68 20 69 64 78 48 61 73 68 3b 20 20 20 20 20 20  h idxHash;      
a060: 20 20 2f 2a 20 41 6c 6c 20 28 6e 61 6d 65 64 29    /* All (named)
a070: 20 69 6e 64 69 63 65 73 20 69 6e 64 65 78 65 64   indices indexed
a080: 20 62 79 20 6e 61 6d 65 20 2a 2f 0a 20 20 48 61   by name */.  Ha
a090: 73 68 20 74 72 69 67 48 61 73 68 3b 20 20 20 20  sh trigHash;    
a0a0: 20 20 20 2f 2a 20 41 6c 6c 20 74 72 69 67 67 65     /* All trigge
a0b0: 72 73 20 69 6e 64 65 78 65 64 20 62 79 20 6e 61  rs indexed by na
a0c0: 6d 65 20 2a 2f 0a 20 20 48 61 73 68 20 66 6b 65  me */.  Hash fke
a0d0: 79 48 61 73 68 3b 20 20 20 20 20 20 20 2f 2a 20  yHash;       /* 
a0e0: 41 6c 6c 20 66 6f 72 65 69 67 6e 20 6b 65 79 73  All foreign keys
a0f0: 20 62 79 20 72 65 66 65 72 65 6e 63 65 64 20 74   by referenced t
a100: 61 62 6c 65 20 6e 61 6d 65 20 2a 2f 0a 20 20 54  able name */.  T
a110: 61 62 6c 65 20 2a 70 53 65 71 54 61 62 3b 20 20  able *pSeqTab;  
a120: 20 20 20 20 2f 2a 20 54 68 65 20 73 71 6c 69 74      /* The sqlit
a130: 65 5f 73 65 71 75 65 6e 63 65 20 74 61 62 6c 65  e_sequence table
a140: 20 75 73 65 64 20 62 79 20 41 55 54 4f 49 4e 43   used by AUTOINC
a150: 52 45 4d 45 4e 54 20 2a 2f 0a 20 20 75 38 20 66  REMENT */.  u8 f
a160: 69 6c 65 5f 66 6f 72 6d 61 74 3b 20 20 20 20 20  ile_format;     
a170: 20 2f 2a 20 53 63 68 65 6d 61 20 66 6f 72 6d 61   /* Schema forma
a180: 74 20 76 65 72 73 69 6f 6e 20 66 6f 72 20 74 68  t version for th
a190: 69 73 20 66 69 6c 65 20 2a 2f 0a 20 20 75 38 20  is file */.  u8 
a1a0: 65 6e 63 3b 20 20 20 20 20 20 20 20 20 20 20 20  enc;            
a1b0: 20 20 2f 2a 20 54 65 78 74 20 65 6e 63 6f 64 69    /* Text encodi
a1c0: 6e 67 20 75 73 65 64 20 62 79 20 74 68 69 73 20  ng used by this 
a1d0: 64 61 74 61 62 61 73 65 20 2a 2f 0a 20 20 75 31  database */.  u1
a1e0: 36 20 73 63 68 65 6d 61 46 6c 61 67 73 3b 20 20  6 schemaFlags;  
a1f0: 20 20 20 2f 2a 20 46 6c 61 67 73 20 61 73 73 6f     /* Flags asso
a200: 63 69 61 74 65 64 20 77 69 74 68 20 74 68 69 73  ciated with this
a210: 20 73 63 68 65 6d 61 20 2a 2f 0a 20 20 69 6e 74   schema */.  int
a220: 20 63 61 63 68 65 5f 73 69 7a 65 3b 20 20 20 20   cache_size;    
a230: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 70    /* Number of p
a240: 61 67 65 73 20 74 6f 20 75 73 65 20 69 6e 20 74  ages to use in t
a250: 68 65 20 63 61 63 68 65 20 2a 2f 0a 7d 3b 0a 0a  he cache */.};..
a260: 2f 2a 0a 2a 2a 20 54 68 65 73 65 20 6d 61 63 72  /*.** These macr
a270: 6f 73 20 63 61 6e 20 62 65 20 75 73 65 64 20 74  os can be used t
a280: 6f 20 74 65 73 74 2c 20 73 65 74 2c 20 6f 72 20  o test, set, or 
a290: 63 6c 65 61 72 20 62 69 74 73 20 69 6e 20 74 68  clear bits in th
a2a0: 65 0a 2a 2a 20 44 62 2e 70 53 63 68 65 6d 61 2d  e.** Db.pSchema-
a2b0: 3e 66 6c 61 67 73 20 66 69 65 6c 64 2e 0a 2a 2f  >flags field..*/
a2c0: 0a 23 64 65 66 69 6e 65 20 44 62 48 61 73 50 72  .#define DbHasPr
a2d0: 6f 70 65 72 74 79 28 44 2c 49 2c 50 29 20 20 20  operty(D,I,P)   
a2e0: 20 20 28 28 28 44 29 2d 3e 61 44 62 5b 49 5d 2e    (((D)->aDb[I].
a2f0: 70 53 63 68 65 6d 61 2d 3e 73 63 68 65 6d 61 46  pSchema->schemaF
a300: 6c 61 67 73 26 28 50 29 29 3d 3d 28 50 29 29 0a  lags&(P))==(P)).
a310: 23 64 65 66 69 6e 65 20 44 62 48 61 73 41 6e 79  #define DbHasAny
a320: 50 72 6f 70 65 72 74 79 28 44 2c 49 2c 50 29 20  Property(D,I,P) 
a330: 20 28 28 28 44 29 2d 3e 61 44 62 5b 49 5d 2e 70   (((D)->aDb[I].p
a340: 53 63 68 65 6d 61 2d 3e 73 63 68 65 6d 61 46 6c  Schema->schemaFl
a350: 61 67 73 26 28 50 29 29 21 3d 30 29 0a 23 64 65  ags&(P))!=0).#de
a360: 66 69 6e 65 20 44 62 53 65 74 50 72 6f 70 65 72  fine DbSetProper
a370: 74 79 28 44 2c 49 2c 50 29 20 20 20 20 20 28 44  ty(D,I,P)     (D
a380: 29 2d 3e 61 44 62 5b 49 5d 2e 70 53 63 68 65 6d  )->aDb[I].pSchem
a390: 61 2d 3e 73 63 68 65 6d 61 46 6c 61 67 73 7c 3d  a->schemaFlags|=
a3a0: 28 50 29 0a 23 64 65 66 69 6e 65 20 44 62 43 6c  (P).#define DbCl
a3b0: 65 61 72 50 72 6f 70 65 72 74 79 28 44 2c 49 2c  earProperty(D,I,
a3c0: 50 29 20 20 20 28 44 29 2d 3e 61 44 62 5b 49 5d  P)   (D)->aDb[I]
a3d0: 2e 70 53 63 68 65 6d 61 2d 3e 73 63 68 65 6d 61  .pSchema->schema
a3e0: 46 6c 61 67 73 26 3d 7e 28 50 29 0a 0a 2f 2a 0a  Flags&=~(P)../*.
a3f0: 2a 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65  ** Allowed value
a400: 73 20 66 6f 72 20 74 68 65 20 44 42 2e 70 53 63  s for the DB.pSc
a410: 68 65 6d 61 2d 3e 66 6c 61 67 73 20 66 69 65 6c  hema->flags fiel
a420: 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 44 42 5f  d..**.** The DB_
a430: 53 63 68 65 6d 61 4c 6f 61 64 65 64 20 66 6c 61  SchemaLoaded fla
a440: 67 20 69 73 20 73 65 74 20 61 66 74 65 72 20 74  g is set after t
a450: 68 65 20 64 61 74 61 62 61 73 65 20 73 63 68 65  he database sche
a460: 6d 61 20 68 61 73 20 62 65 65 6e 0a 2a 2a 20 72  ma has been.** r
a470: 65 61 64 20 69 6e 74 6f 20 69 6e 74 65 72 6e 61  ead into interna
a480: 6c 20 68 61 73 68 20 74 61 62 6c 65 73 2e 0a 2a  l hash tables..*
a490: 2a 0a 2a 2a 20 44 42 5f 55 6e 72 65 73 65 74 56  *.** DB_UnresetV
a4a0: 69 65 77 73 20 6d 65 61 6e 73 20 74 68 61 74 20  iews means that 
a4b0: 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 76 69 65 77  one or more view
a4c0: 73 20 68 61 76 65 20 63 6f 6c 75 6d 6e 20 6e 61  s have column na
a4d0: 6d 65 73 20 74 68 61 74 0a 2a 2a 20 68 61 76 65  mes that.** have
a4e0: 20 62 65 65 6e 20 66 69 6c 6c 65 64 20 6f 75 74   been filled out
a4f0: 2e 20 20 49 66 20 74 68 65 20 73 63 68 65 6d 61  .  If the schema
a500: 20 63 68 61 6e 67 65 73 2c 20 74 68 65 73 65 20   changes, these 
a510: 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 6d 69 67  column names mig
a520: 68 74 0a 2a 2a 20 63 68 61 6e 67 65 73 20 61 6e  ht.** changes an
a530: 64 20 73 6f 20 74 68 65 20 76 69 65 77 20 77 69  d so the view wi
a540: 6c 6c 20 6e 65 65 64 20 74 6f 20 62 65 20 72 65  ll need to be re
a550: 73 65 74 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  set..*/.#define 
a560: 44 42 5f 53 63 68 65 6d 61 4c 6f 61 64 65 64 20  DB_SchemaLoaded 
a570: 20 20 20 30 78 30 30 30 31 20 20 2f 2a 20 54 68     0x0001  /* Th
a580: 65 20 73 63 68 65 6d 61 20 68 61 73 20 62 65 65  e schema has bee
a590: 6e 20 6c 6f 61 64 65 64 20 2a 2f 0a 23 64 65 66  n loaded */.#def
a5a0: 69 6e 65 20 44 42 5f 55 6e 72 65 73 65 74 56 69  ine DB_UnresetVi
a5b0: 65 77 73 20 20 20 20 30 78 30 30 30 32 20 20 2f  ews    0x0002  /
a5c0: 2a 20 53 6f 6d 65 20 76 69 65 77 73 20 68 61 76  * Some views hav
a5d0: 65 20 64 65 66 69 6e 65 64 20 63 6f 6c 75 6d 6e  e defined column
a5e0: 20 6e 61 6d 65 73 20 2a 2f 0a 23 64 65 66 69 6e   names */.#defin
a5f0: 65 20 44 42 5f 45 6d 70 74 79 20 20 20 20 20 20  e DB_Empty      
a600: 20 20 20 20 20 30 78 30 30 30 34 20 20 2f 2a 20       0x0004  /* 
a610: 54 68 65 20 66 69 6c 65 20 69 73 20 65 6d 70 74  The file is empt
a620: 79 20 28 6c 65 6e 67 74 68 20 30 20 62 79 74 65  y (length 0 byte
a630: 73 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 44 42  s) */.#define DB
a640: 5f 52 65 73 65 74 57 61 6e 74 65 64 20 20 20 20  _ResetWanted    
a650: 20 30 78 30 30 30 38 20 20 2f 2a 20 52 65 73 65   0x0008  /* Rese
a660: 74 20 74 68 65 20 73 63 68 65 6d 61 20 77 68 65  t the schema whe
a670: 6e 20 6e 53 63 68 65 6d 61 4c 6f 63 6b 3d 3d 30  n nSchemaLock==0
a680: 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6e   */../*.** The n
a690: 75 6d 62 65 72 20 6f 66 20 64 69 66 66 65 72 65  umber of differe
a6a0: 6e 74 20 6b 69 6e 64 73 20 6f 66 20 74 68 69 6e  nt kinds of thin
a6b0: 67 73 20 74 68 61 74 20 63 61 6e 20 62 65 20 6c  gs that can be l
a6c0: 69 6d 69 74 65 64 0a 2a 2a 20 75 73 69 6e 67 20  imited.** using 
a6d0: 74 68 65 20 73 71 6c 69 74 65 33 5f 6c 69 6d 69  the sqlite3_limi
a6e0: 74 28 29 20 69 6e 74 65 72 66 61 63 65 2e 0a 2a  t() interface..*
a6f0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
a700: 5f 4e 5f 4c 49 4d 49 54 20 28 53 51 4c 49 54 45  _N_LIMIT (SQLITE
a710: 5f 4c 49 4d 49 54 5f 57 4f 52 4b 45 52 5f 54 48  _LIMIT_WORKER_TH
a720: 52 45 41 44 53 2b 31 29 0a 0a 2f 2a 0a 2a 2a 20  READS+1)../*.** 
a730: 4c 6f 6f 6b 61 73 69 64 65 20 6d 61 6c 6c 6f 63  Lookaside malloc
a740: 20 69 73 20 61 20 73 65 74 20 6f 66 20 66 69 78   is a set of fix
a750: 65 64 2d 73 69 7a 65 20 62 75 66 66 65 72 73 20  ed-size buffers 
a760: 74 68 61 74 20 63 61 6e 20 62 65 20 75 73 65 64  that can be used
a770: 0a 2a 2a 20 74 6f 20 73 61 74 69 73 66 79 20 73  .** to satisfy s
a780: 6d 61 6c 6c 20 74 72 61 6e 73 69 65 6e 74 20 6d  mall transient m
a790: 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e  emory allocation
a7a0: 20 72 65 71 75 65 73 74 73 20 66 6f 72 20 6f 62   requests for ob
a7b0: 6a 65 63 74 73 0a 2a 2a 20 61 73 73 6f 63 69 61  jects.** associa
a7c0: 74 65 64 20 77 69 74 68 20 61 20 70 61 72 74 69  ted with a parti
a7d0: 63 75 6c 61 72 20 64 61 74 61 62 61 73 65 20 63  cular database c
a7e0: 6f 6e 6e 65 63 74 69 6f 6e 2e 20 20 54 68 65 20  onnection.  The 
a7f0: 75 73 65 20 6f 66 0a 2a 2a 20 6c 6f 6f 6b 61 73  use of.** lookas
a800: 69 64 65 20 6d 61 6c 6c 6f 63 20 70 72 6f 76 69  ide malloc provi
a810: 64 65 73 20 61 20 73 69 67 6e 69 66 69 63 61 6e  des a significan
a820: 74 20 70 65 72 66 6f 72 6d 61 6e 63 65 20 65 6e  t performance en
a830: 68 61 6e 63 65 6d 65 6e 74 0a 2a 2a 20 28 61 70  hancement.** (ap
a840: 70 72 6f 78 20 31 30 25 29 20 62 79 20 61 76 6f  prox 10%) by avo
a850: 69 64 69 6e 67 20 6e 75 6d 65 72 6f 75 73 20 6d  iding numerous m
a860: 61 6c 6c 6f 63 2f 66 72 65 65 20 72 65 71 75 65  alloc/free reque
a870: 73 74 73 20 77 68 69 6c 65 20 70 61 72 73 69 6e  sts while parsin
a880: 67 0a 2a 2a 20 53 51 4c 20 73 74 61 74 65 6d 65  g.** SQL stateme
a890: 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 4c  nts..**.** The L
a8a0: 6f 6f 6b 61 73 69 64 65 20 73 74 72 75 63 74 75  ookaside structu
a8b0: 72 65 20 68 6f 6c 64 73 20 63 6f 6e 66 69 67 75  re holds configu
a8c0: 72 61 74 69 6f 6e 20 69 6e 66 6f 72 6d 61 74 69  ration informati
a8d0: 6f 6e 20 61 62 6f 75 74 20 74 68 65 0a 2a 2a 20  on about the.** 
a8e0: 6c 6f 6f 6b 61 73 69 64 65 20 6d 61 6c 6c 6f 63  lookaside malloc
a8f0: 20 73 75 62 73 79 73 74 65 6d 2e 20 20 45 61 63   subsystem.  Eac
a900: 68 20 61 76 61 69 6c 61 62 6c 65 20 6d 65 6d 6f  h available memo
a910: 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 69 6e  ry allocation in
a920: 0a 2a 2a 20 74 68 65 20 6c 6f 6f 6b 61 73 69 64  .** the lookasid
a930: 65 20 73 75 62 73 79 73 74 65 6d 20 69 73 20 73  e subsystem is s
a940: 74 6f 72 65 64 20 6f 6e 20 61 20 6c 69 6e 6b 65  tored on a linke
a950: 64 20 6c 69 73 74 20 6f 66 20 4c 6f 6f 6b 61 73  d list of Lookas
a960: 69 64 65 53 6c 6f 74 0a 2a 2a 20 6f 62 6a 65 63  ideSlot.** objec
a970: 74 73 2e 0a 2a 2a 0a 2a 2a 20 4c 6f 6f 6b 61 73  ts..**.** Lookas
a980: 69 64 65 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20  ide allocations 
a990: 61 72 65 20 6f 6e 6c 79 20 61 6c 6c 6f 77 65 64  are only allowed
a9a0: 20 66 6f 72 20 6f 62 6a 65 63 74 73 20 74 68 61   for objects tha
a9b0: 74 20 61 72 65 20 61 73 73 6f 63 69 61 74 65 64  t are associated
a9c0: 0a 2a 2a 20 77 69 74 68 20 61 20 70 61 72 74 69  .** with a parti
a9d0: 63 75 6c 61 72 20 64 61 74 61 62 61 73 65 20 63  cular database c
a9e0: 6f 6e 6e 65 63 74 69 6f 6e 2e 20 20 48 65 6e 63  onnection.  Henc
a9f0: 65 2c 20 73 63 68 65 6d 61 20 69 6e 66 6f 72 6d  e, schema inform
aa00: 61 74 69 6f 6e 20 63 61 6e 6e 6f 74 0a 2a 2a 20  ation cannot.** 
aa10: 62 65 20 73 74 6f 72 65 64 20 69 6e 20 6c 6f 6f  be stored in loo
aa20: 6b 61 73 69 64 65 20 62 65 63 61 75 73 65 20 69  kaside because i
aa30: 6e 20 73 68 61 72 65 64 20 63 61 63 68 65 20 6d  n shared cache m
aa40: 6f 64 65 20 74 68 65 20 73 63 68 65 6d 61 20 69  ode the schema i
aa50: 6e 66 6f 72 6d 61 74 69 6f 6e 0a 2a 2a 20 69 73  nformation.** is
aa60: 20 73 68 61 72 65 64 20 62 79 20 6d 75 6c 74 69   shared by multi
aa70: 70 6c 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e  ple database con
aa80: 6e 65 63 74 69 6f 6e 73 2e 20 20 54 68 65 72 65  nections.  There
aa90: 66 6f 72 65 2c 20 77 68 69 6c 65 20 70 61 72 73  fore, while pars
aaa0: 69 6e 67 0a 2a 2a 20 73 63 68 65 6d 61 20 69 6e  ing.** schema in
aab0: 66 6f 72 6d 61 74 69 6f 6e 2c 20 74 68 65 20 4c  formation, the L
aac0: 6f 6f 6b 61 73 69 64 65 2e 62 45 6e 61 62 6c 65  ookaside.bEnable
aad0: 64 20 66 6c 61 67 20 69 73 20 63 6c 65 61 72 65  d flag is cleare
aae0: 64 20 73 6f 20 74 68 61 74 0a 2a 2a 20 6c 6f 6f  d so that.** loo
aaf0: 6b 61 73 69 64 65 20 61 6c 6c 6f 63 61 74 69 6f  kaside allocatio
ab00: 6e 73 20 61 72 65 20 6e 6f 74 20 75 73 65 64 20  ns are not used 
ab10: 74 6f 20 63 6f 6e 73 74 72 75 63 74 20 74 68 65  to construct the
ab20: 20 73 63 68 65 6d 61 20 6f 62 6a 65 63 74 73 2e   schema objects.
ab30: 0a 2a 2f 0a 73 74 72 75 63 74 20 4c 6f 6f 6b 61  .*/.struct Looka
ab40: 73 69 64 65 20 7b 0a 20 20 75 33 32 20 62 44 69  side {.  u32 bDi
ab50: 73 61 62 6c 65 3b 20 20 20 20 20 20 20 20 20 20  sable;          
ab60: 20 2f 2a 20 4f 6e 6c 79 20 6f 70 65 72 61 74 65   /* Only operate
ab70: 20 74 68 65 20 6c 6f 6f 6b 61 73 69 64 65 20 77   the lookaside w
ab80: 68 65 6e 20 7a 65 72 6f 20 2a 2f 0a 20 20 75 31  hen zero */.  u1
ab90: 36 20 73 7a 3b 20 20 20 20 20 20 20 20 20 20 20  6 sz;           
aba0: 20 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66        /* Size of
abb0: 20 65 61 63 68 20 62 75 66 66 65 72 20 69 6e 20   each buffer in 
abc0: 62 79 74 65 73 20 2a 2f 0a 20 20 75 38 20 62 4d  bytes */.  u8 bM
abd0: 61 6c 6c 6f 63 65 64 3b 20 20 20 20 20 20 20 20  alloced;        
abe0: 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 70 53     /* True if pS
abf0: 74 61 72 74 20 6f 62 74 61 69 6e 65 64 20 66 72  tart obtained fr
ac00: 6f 6d 20 73 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f  om sqlite3_mallo
ac10: 63 28 29 20 2a 2f 0a 20 20 75 33 32 20 6e 53 6c  c() */.  u32 nSl
ac20: 6f 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ot;             
ac30: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6c 6f   /* Number of lo
ac40: 6f 6b 61 73 69 64 65 20 73 6c 6f 74 73 20 61 6c  okaside slots al
ac50: 6c 6f 63 61 74 65 64 20 2a 2f 0a 20 20 75 33 32  located */.  u32
ac60: 20 61 6e 53 74 61 74 5b 33 5d 3b 20 20 20 20 20   anStat[3];     
ac70: 20 20 20 20 20 2f 2a 20 30 3a 20 68 69 74 73 2e       /* 0: hits.
ac80: 20 20 31 3a 20 73 69 7a 65 20 6d 69 73 73 65 73    1: size misses
ac90: 2e 20 20 32 3a 20 66 75 6c 6c 20 6d 69 73 73 65  .  2: full misse
aca0: 73 20 2a 2f 0a 20 20 4c 6f 6f 6b 61 73 69 64 65  s */.  Lookaside
acb0: 53 6c 6f 74 20 2a 70 49 6e 69 74 3b 20 20 20 2f  Slot *pInit;   /
acc0: 2a 20 4c 69 73 74 20 6f 66 20 62 75 66 66 65 72  * List of buffer
acd0: 73 20 6e 6f 74 20 70 72 65 76 69 6f 75 73 6c 79  s not previously
ace0: 20 75 73 65 64 20 2a 2f 0a 20 20 4c 6f 6f 6b 61   used */.  Looka
acf0: 73 69 64 65 53 6c 6f 74 20 2a 70 46 72 65 65 3b  sideSlot *pFree;
ad00: 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 61 76     /* List of av
ad10: 61 69 6c 61 62 6c 65 20 62 75 66 66 65 72 73 20  ailable buffers 
ad20: 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 53 74 61 72  */.  void *pStar
ad30: 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  t;           /* 
ad40: 46 69 72 73 74 20 62 79 74 65 20 6f 66 20 61 76  First byte of av
ad50: 61 69 6c 61 62 6c 65 20 6d 65 6d 6f 72 79 20 73  ailable memory s
ad60: 70 61 63 65 20 2a 2f 0a 20 20 76 6f 69 64 20 2a  pace */.  void *
ad70: 70 45 6e 64 3b 20 20 20 20 20 20 20 20 20 20 20  pEnd;           
ad80: 20 20 2f 2a 20 46 69 72 73 74 20 62 79 74 65 20    /* First byte 
ad90: 70 61 73 74 20 65 6e 64 20 6f 66 20 61 76 61 69  past end of avai
ada0: 6c 61 62 6c 65 20 73 70 61 63 65 20 2a 2f 0a 7d  lable space */.}
adb0: 3b 0a 73 74 72 75 63 74 20 4c 6f 6f 6b 61 73 69  ;.struct Lookasi
adc0: 64 65 53 6c 6f 74 20 7b 0a 20 20 4c 6f 6f 6b 61  deSlot {.  Looka
add0: 73 69 64 65 53 6c 6f 74 20 2a 70 4e 65 78 74 3b  sideSlot *pNext;
ade0: 20 20 20 20 2f 2a 20 4e 65 78 74 20 62 75 66 66      /* Next buff
adf0: 65 72 20 69 6e 20 74 68 65 20 6c 69 73 74 20 6f  er in the list o
ae00: 66 20 66 72 65 65 20 62 75 66 66 65 72 73 20 2a  f free buffers *
ae10: 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20 68 61  /.};../*.** A ha
ae20: 73 68 20 74 61 62 6c 65 20 66 6f 72 20 62 75 69  sh table for bui
ae30: 6c 74 2d 69 6e 20 66 75 6e 63 74 69 6f 6e 20 64  lt-in function d
ae40: 65 66 69 6e 69 74 69 6f 6e 73 2e 20 20 28 41 70  efinitions.  (Ap
ae50: 70 6c 69 63 61 74 69 6f 6e 2d 64 65 66 69 6e 65  plication-define
ae60: 64 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 73 20 75  d.** functions u
ae70: 73 65 20 61 20 72 65 67 75 6c 61 72 20 74 61 62  se a regular tab
ae80: 6c 65 20 74 61 62 6c 65 20 66 72 6f 6d 20 68 61  le table from ha
ae90: 73 68 2e 68 2e 29 0a 2a 2a 0a 2a 2a 20 48 61 73  sh.h.).**.** Has
aea0: 68 20 65 61 63 68 20 46 75 6e 63 44 65 66 20 73  h each FuncDef s
aeb0: 74 72 75 63 74 75 72 65 20 69 6e 74 6f 20 6f 6e  tructure into on
aec0: 65 20 6f 66 20 74 68 65 20 46 75 6e 63 44 65 66  e of the FuncDef
aed0: 48 61 73 68 2e 61 5b 5d 20 73 6c 6f 74 73 2e 0a  Hash.a[] slots..
aee0: 2a 2a 20 43 6f 6c 6c 69 73 69 6f 6e 73 20 61 72  ** Collisions ar
aef0: 65 20 6f 6e 20 74 68 65 20 46 75 6e 63 44 65 66  e on the FuncDef
af00: 2e 75 2e 70 48 61 73 68 20 63 68 61 69 6e 2e 0a  .u.pHash chain..
af10: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
af20: 45 5f 46 55 4e 43 5f 48 41 53 48 5f 53 5a 20 32  E_FUNC_HASH_SZ 2
af30: 33 0a 73 74 72 75 63 74 20 46 75 6e 63 44 65 66  3.struct FuncDef
af40: 48 61 73 68 20 7b 0a 20 20 46 75 6e 63 44 65 66  Hash {.  FuncDef
af50: 20 2a 61 5b 53 51 4c 49 54 45 5f 46 55 4e 43 5f   *a[SQLITE_FUNC_
af60: 48 41 53 48 5f 53 5a 5d 3b 20 20 20 20 20 20 20  HASH_SZ];       
af70: 2f 2a 20 48 61 73 68 20 74 61 62 6c 65 20 66 6f  /* Hash table fo
af80: 72 20 66 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a 7d  r functions */.}
af90: 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  ;..#ifdef SQLITE
afa0: 5f 55 53 45 52 5f 41 55 54 48 45 4e 54 49 43 41  _USER_AUTHENTICA
afb0: 54 49 4f 4e 0a 2f 2a 0a 2a 2a 20 49 6e 66 6f 72  TION./*.** Infor
afc0: 6d 61 74 69 6f 6e 20 68 65 6c 64 20 69 6e 20 74  mation held in t
afd0: 68 65 20 22 73 71 6c 69 74 65 33 22 20 64 61 74  he "sqlite3" dat
afe0: 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  abase connection
aff0: 20 6f 62 6a 65 63 74 20 61 6e 64 20 75 73 65 64   object and used
b000: 0a 2a 2a 20 74 6f 20 6d 61 6e 61 67 65 20 75 73  .** to manage us
b010: 65 72 20 61 75 74 68 65 6e 74 69 63 61 74 69 6f  er authenticatio
b020: 6e 2e 0a 2a 2f 0a 74 79 70 65 64 65 66 20 73 74  n..*/.typedef st
b030: 72 75 63 74 20 73 71 6c 69 74 65 33 5f 75 73 65  ruct sqlite3_use
b040: 72 61 75 74 68 20 73 71 6c 69 74 65 33 5f 75 73  rauth sqlite3_us
b050: 65 72 61 75 74 68 3b 0a 73 74 72 75 63 74 20 73  erauth;.struct s
b060: 71 6c 69 74 65 33 5f 75 73 65 72 61 75 74 68 20  qlite3_userauth 
b070: 7b 0a 20 20 75 38 20 61 75 74 68 4c 65 76 65 6c  {.  u8 authLevel
b080: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
b090: 20 20 2f 2a 20 43 75 72 72 65 6e 74 20 61 75 74    /* Current aut
b0a0: 68 65 6e 74 69 63 61 74 69 6f 6e 20 6c 65 76 65  hentication leve
b0b0: 6c 20 2a 2f 0a 20 20 69 6e 74 20 6e 41 75 74 68  l */.  int nAuth
b0c0: 50 57 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  PW;             
b0d0: 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20       /* Size of 
b0e0: 74 68 65 20 7a 41 75 74 68 50 57 20 69 6e 20 62  the zAuthPW in b
b0f0: 79 74 65 73 20 2a 2f 0a 20 20 63 68 61 72 20 2a  ytes */.  char *
b100: 7a 41 75 74 68 50 57 3b 20 20 20 20 20 20 20 20  zAuthPW;        
b110: 20 20 20 20 20 20 20 20 2f 2a 20 50 61 73 73 77          /* Passw
b120: 6f 72 64 20 75 73 65 64 20 74 6f 20 61 75 74 68  ord used to auth
b130: 65 6e 74 69 63 61 74 65 20 2a 2f 0a 20 20 63 68  enticate */.  ch
b140: 61 72 20 2a 7a 41 75 74 68 55 73 65 72 3b 20 20  ar *zAuthUser;  
b150: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 55              /* U
b160: 73 65 72 20 6e 61 6d 65 20 75 73 65 64 20 74 6f  ser name used to
b170: 20 61 75 74 68 65 6e 74 69 63 61 74 65 20 2a 2f   authenticate */
b180: 0a 7d 3b 0a 0a 2f 2a 20 41 6c 6c 6f 77 65 64 20  .};../* Allowed 
b190: 76 61 6c 75 65 73 20 66 6f 72 20 73 71 6c 69 74  values for sqlit
b1a0: 65 33 5f 75 73 65 72 61 75 74 68 2e 61 75 74 68  e3_userauth.auth
b1b0: 4c 65 76 65 6c 20 2a 2f 0a 23 64 65 66 69 6e 65  Level */.#define
b1c0: 20 55 41 55 54 48 5f 55 6e 6b 6e 6f 77 6e 20 20   UAUTH_Unknown  
b1d0: 20 20 20 30 20 20 20 20 20 2f 2a 20 41 75 74 68     0     /* Auth
b1e0: 65 6e 74 69 63 61 74 69 6f 6e 20 6e 6f 74 20 79  entication not y
b1f0: 65 74 20 63 68 65 63 6b 65 64 20 2a 2f 0a 23 64  et checked */.#d
b200: 65 66 69 6e 65 20 55 41 55 54 48 5f 46 61 69 6c  efine UAUTH_Fail
b210: 20 20 20 20 20 20 20 20 31 20 20 20 20 20 2f 2a          1     /*
b220: 20 55 73 65 72 20 61 75 74 68 65 6e 74 69 63 61   User authentica
b230: 74 69 6f 6e 20 66 61 69 6c 65 64 20 2a 2f 0a 23  tion failed */.#
b240: 64 65 66 69 6e 65 20 55 41 55 54 48 5f 55 73 65  define UAUTH_Use
b250: 72 20 20 20 20 20 20 20 20 32 20 20 20 20 20 2f  r        2     /
b260: 2a 20 41 75 74 68 65 6e 74 69 63 61 74 65 64 20  * Authenticated 
b270: 61 73 20 61 20 6e 6f 72 6d 61 6c 20 75 73 65 72  as a normal user
b280: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 55 41 55 54   */.#define UAUT
b290: 48 5f 41 64 6d 69 6e 20 20 20 20 20 20 20 33 20  H_Admin       3 
b2a0: 20 20 20 20 2f 2a 20 41 75 74 68 65 6e 74 69 63      /* Authentic
b2b0: 61 74 65 64 20 61 73 20 61 6e 20 61 64 6d 69 6e  ated as an admin
b2c0: 69 73 74 72 61 74 6f 72 20 2a 2f 0a 0a 2f 2a 20  istrator */../* 
b2d0: 46 75 6e 63 74 69 6f 6e 73 20 75 73 65 64 20 6f  Functions used o
b2e0: 6e 6c 79 20 62 79 20 75 73 65 72 20 61 75 74 68  nly by user auth
b2f0: 6f 72 69 7a 61 74 69 6f 6e 20 6c 6f 67 69 63 20  orization logic 
b300: 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 55 73  */.int sqlite3Us
b310: 65 72 41 75 74 68 54 61 62 6c 65 28 63 6f 6e 73  erAuthTable(cons
b320: 74 20 63 68 61 72 2a 29 3b 0a 69 6e 74 20 73 71  t char*);.int sq
b330: 6c 69 74 65 33 55 73 65 72 41 75 74 68 43 68 65  lite3UserAuthChe
b340: 63 6b 4c 6f 67 69 6e 28 73 71 6c 69 74 65 33 2a  ckLogin(sqlite3*
b350: 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 75 38 2a  ,const char*,u8*
b360: 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 55  );.void sqlite3U
b370: 73 65 72 41 75 74 68 49 6e 69 74 28 73 71 6c 69  serAuthInit(sqli
b380: 74 65 33 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  te3*);.void sqli
b390: 74 65 33 43 72 79 70 74 46 75 6e 63 28 73 71 6c  te3CryptFunc(sql
b3a0: 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e  ite3_context*,in
b3b0: 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a  t,sqlite3_value*
b3c0: 2a 29 3b 0a 0a 23 65 6e 64 69 66 20 2f 2a 20 53  *);..#endif /* S
b3d0: 51 4c 49 54 45 5f 55 53 45 52 5f 41 55 54 48 45  QLITE_USER_AUTHE
b3e0: 4e 54 49 43 41 54 49 4f 4e 20 2a 2f 0a 0a 2f 2a  NTICATION */../*
b3f0: 0a 2a 2a 20 74 79 70 65 64 65 66 20 66 6f 72 20  .** typedef for 
b400: 74 68 65 20 61 75 74 68 6f 72 69 7a 61 74 69 6f  the authorizatio
b410: 6e 20 63 61 6c 6c 62 61 63 6b 20 66 75 6e 63 74  n callback funct
b420: 69 6f 6e 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53  ion..*/.#ifdef S
b430: 51 4c 49 54 45 5f 55 53 45 52 5f 41 55 54 48 45  QLITE_USER_AUTHE
b440: 4e 54 49 43 41 54 49 4f 4e 0a 20 20 74 79 70 65  NTICATION.  type
b450: 64 65 66 20 69 6e 74 20 28 2a 73 71 6c 69 74 65  def int (*sqlite
b460: 33 5f 78 61 75 74 68 29 28 76 6f 69 64 2a 2c 69  3_xauth)(void*,i
b470: 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63  nt,const char*,c
b480: 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74  onst char*,const
b490: 20 63 68 61 72 2a 2c 0a 20 20 20 20 20 20 20 20   char*,.        
b4a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b4b0: 20 20 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61         const cha
b4c0: 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29  r*, const char*)
b4d0: 3b 0a 23 65 6c 73 65 0a 20 20 74 79 70 65 64 65  ;.#else.  typede
b4e0: 66 20 69 6e 74 20 28 2a 73 71 6c 69 74 65 33 5f  f int (*sqlite3_
b4f0: 78 61 75 74 68 29 28 76 6f 69 64 2a 2c 69 6e 74  xauth)(void*,int
b500: 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e  ,const char*,con
b510: 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63  st char*,const c
b520: 68 61 72 2a 2c 0a 20 20 20 20 20 20 20 20 20 20  har*,.          
b530: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b540: 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 2a       const char*
b550: 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64  );.#endif..#ifnd
b560: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 44  ef SQLITE_OMIT_D
b570: 45 50 52 45 43 41 54 45 44 0a 2f 2a 20 54 68 69  EPRECATED./* Thi
b580: 73 20 69 73 20 61 6e 20 65 78 74 72 61 20 53 51  s is an extra SQ
b590: 4c 49 54 45 5f 54 52 41 43 45 20 6d 61 63 72 6f  LITE_TRACE macro
b5a0: 20 74 68 61 74 20 69 6e 64 69 63 61 74 65 73 20   that indicates 
b5b0: 22 6c 65 67 61 63 79 22 20 74 72 61 63 69 6e 67  "legacy" tracing
b5c0: 0a 2a 2a 20 69 6e 20 74 68 65 20 73 74 79 6c 65  .** in the style
b5d0: 20 6f 66 20 73 71 6c 69 74 65 33 5f 74 72 61 63   of sqlite3_trac
b5e0: 65 28 29 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53  e().*/.#define S
b5f0: 51 4c 49 54 45 5f 54 52 41 43 45 5f 4c 45 47 41  QLITE_TRACE_LEGA
b600: 43 59 20 20 30 78 38 30 0a 23 65 6c 73 65 0a 23  CY  0x80.#else.#
b610: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 54 52  define SQLITE_TR
b620: 41 43 45 5f 4c 45 47 41 43 59 20 20 30 0a 23 65  ACE_LEGACY  0.#e
b630: 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f  ndif /* SQLITE_O
b640: 4d 49 54 5f 44 45 50 52 45 43 41 54 45 44 20 2a  MIT_DEPRECATED *
b650: 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 64  /.../*.** Each d
b660: 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
b670: 6f 6e 20 69 73 20 61 6e 20 69 6e 73 74 61 6e 63  on is an instanc
b680: 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69  e of the followi
b690: 6e 67 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2f  ng structure..*/
b6a0: 0a 73 74 72 75 63 74 20 73 71 6c 69 74 65 33 20  .struct sqlite3 
b6b0: 7b 0a 20 20 73 71 6c 69 74 65 33 5f 76 66 73 20  {.  sqlite3_vfs 
b6c0: 2a 70 56 66 73 3b 20 20 20 20 20 20 20 20 20 20  *pVfs;          
b6d0: 20 20 2f 2a 20 4f 53 20 49 6e 74 65 72 66 61 63    /* OS Interfac
b6e0: 65 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 56 64  e */.  struct Vd
b6f0: 62 65 20 2a 70 56 64 62 65 3b 20 20 20 20 20 20  be *pVdbe;      
b700: 20 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20       /* List of 
b710: 61 63 74 69 76 65 20 76 69 72 74 75 61 6c 20 6d  active virtual m
b720: 61 63 68 69 6e 65 73 20 2a 2f 0a 20 20 43 6f 6c  achines */.  Col
b730: 6c 53 65 71 20 2a 70 44 66 6c 74 43 6f 6c 6c 3b  lSeq *pDfltColl;
b740: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68             /* Th
b750: 65 20 64 65 66 61 75 6c 74 20 63 6f 6c 6c 61 74  e default collat
b760: 69 6e 67 20 73 65 71 75 65 6e 63 65 20 28 42 49  ing sequence (BI
b770: 4e 41 52 59 29 20 2a 2f 0a 20 20 73 71 6c 69 74  NARY) */.  sqlit
b780: 65 33 5f 6d 75 74 65 78 20 2a 6d 75 74 65 78 3b  e3_mutex *mutex;
b790: 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6e 6e           /* Conn
b7a0: 65 63 74 69 6f 6e 20 6d 75 74 65 78 20 2a 2f 0a  ection mutex */.
b7b0: 20 20 44 62 20 2a 61 44 62 3b 20 20 20 20 20 20    Db *aDb;      
b7c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b7d0: 2f 2a 20 41 6c 6c 20 62 61 63 6b 65 6e 64 73 20  /* All backends 
b7e0: 2a 2f 0a 20 20 69 6e 74 20 6e 44 62 3b 20 20 20  */.  int nDb;   
b7f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b800: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
b810: 62 61 63 6b 65 6e 64 73 20 63 75 72 72 65 6e 74  backends current
b820: 6c 79 20 69 6e 20 75 73 65 20 2a 2f 0a 20 20 75  ly in use */.  u
b830: 33 32 20 6d 44 62 46 6c 61 67 73 3b 20 20 20 20  32 mDbFlags;    
b840: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
b850: 66 6c 61 67 73 20 72 65 63 6f 72 64 69 6e 67 20  flags recording 
b860: 69 6e 74 65 72 6e 61 6c 20 73 74 61 74 65 20 2a  internal state *
b870: 2f 0a 20 20 75 33 32 20 66 6c 61 67 73 3b 20 20  /.  u32 flags;  
b880: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b890: 20 20 2f 2a 20 66 6c 61 67 73 20 73 65 74 74 61    /* flags setta
b8a0: 62 6c 65 20 62 79 20 70 72 61 67 6d 61 73 2e 20  ble by pragmas. 
b8b0: 53 65 65 20 62 65 6c 6f 77 20 2a 2f 0a 20 20 69  See below */.  i
b8c0: 36 34 20 6c 61 73 74 52 6f 77 69 64 3b 20 20 20  64 lastRowid;   
b8d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
b8e0: 52 4f 57 49 44 20 6f 66 20 6d 6f 73 74 20 72 65  ROWID of most re
b8f0: 63 65 6e 74 20 69 6e 73 65 72 74 20 28 73 65 65  cent insert (see
b900: 20 61 62 6f 76 65 29 20 2a 2f 0a 20 20 69 36 34   above) */.  i64
b910: 20 73 7a 4d 6d 61 70 3b 20 20 20 20 20 20 20 20   szMmap;        
b920: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 65             /* De
b930: 66 61 75 6c 74 20 6d 6d 61 70 5f 73 69 7a 65 20  fault mmap_size 
b940: 73 65 74 74 69 6e 67 20 2a 2f 0a 20 20 75 33 32  setting */.  u32
b950: 20 6e 53 63 68 65 6d 61 4c 6f 63 6b 3b 20 20 20   nSchemaLock;   
b960: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 6f             /* Do
b970: 20 6e 6f 74 20 72 65 73 65 74 20 74 68 65 20 73   not reset the s
b980: 63 68 65 6d 61 20 77 68 65 6e 20 6e 6f 6e 2d 7a  chema when non-z
b990: 65 72 6f 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65  ero */.  unsigne
b9a0: 64 20 69 6e 74 20 6f 70 65 6e 46 6c 61 67 73 3b  d int openFlags;
b9b0: 20 20 20 20 20 20 20 2f 2a 20 46 6c 61 67 73 20         /* Flags 
b9c0: 70 61 73 73 65 64 20 74 6f 20 73 71 6c 69 74 65  passed to sqlite
b9d0: 33 5f 76 66 73 2e 78 4f 70 65 6e 28 29 20 2a 2f  3_vfs.xOpen() */
b9e0: 0a 20 20 69 6e 74 20 65 72 72 43 6f 64 65 3b 20  .  int errCode; 
b9f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ba00: 20 2f 2a 20 4d 6f 73 74 20 72 65 63 65 6e 74 20   /* Most recent 
ba10: 65 72 72 6f 72 20 63 6f 64 65 20 28 53 51 4c 49  error code (SQLI
ba20: 54 45 5f 2a 29 20 2a 2f 0a 20 20 69 6e 74 20 65  TE_*) */.  int e
ba30: 72 72 4d 61 73 6b 3b 20 20 20 20 20 20 20 20 20  rrMask;         
ba40: 20 20 20 20 20 20 20 20 20 2f 2a 20 26 20 72 65           /* & re
ba50: 73 75 6c 74 20 63 6f 64 65 73 20 77 69 74 68 20  sult codes with 
ba60: 74 68 69 73 20 62 65 66 6f 72 65 20 72 65 74 75  this before retu
ba70: 72 6e 69 6e 67 20 2a 2f 0a 20 20 69 6e 74 20 69  rning */.  int i
ba80: 53 79 73 45 72 72 6e 6f 3b 20 20 20 20 20 20 20  SysErrno;       
ba90: 20 20 20 20 20 20 20 20 20 2f 2a 20 45 72 72 6e           /* Errn
baa0: 6f 20 76 61 6c 75 65 20 66 72 6f 6d 20 6c 61 73  o value from las
bab0: 74 20 73 79 73 74 65 6d 20 65 72 72 6f 72 20 2a  t system error *
bac0: 2f 0a 20 20 75 31 36 20 64 62 4f 70 74 46 6c 61  /.  u16 dbOptFla
bad0: 67 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  gs;             
bae0: 20 20 2f 2a 20 46 6c 61 67 73 20 74 6f 20 65 6e    /* Flags to en
baf0: 61 62 6c 65 2f 64 69 73 61 62 6c 65 20 6f 70 74  able/disable opt
bb00: 69 6d 69 7a 61 74 69 6f 6e 73 20 2a 2f 0a 20 20  imizations */.  
bb10: 75 38 20 65 6e 63 3b 20 20 20 20 20 20 20 20 20  u8 enc;         
bb20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
bb30: 20 54 65 78 74 20 65 6e 63 6f 64 69 6e 67 20 2a   Text encoding *
bb40: 2f 0a 20 20 75 38 20 61 75 74 6f 43 6f 6d 6d 69  /.  u8 autoCommi
bb50: 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t;              
bb60: 20 20 2f 2a 20 54 68 65 20 61 75 74 6f 2d 63 6f    /* The auto-co
bb70: 6d 6d 69 74 20 66 6c 61 67 2e 20 2a 2f 0a 20 20  mmit flag. */.  
bb80: 75 38 20 74 65 6d 70 5f 73 74 6f 72 65 3b 20 20  u8 temp_store;  
bb90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
bba0: 20 31 3a 20 66 69 6c 65 20 32 3a 20 6d 65 6d 6f   1: file 2: memo
bbb0: 72 79 20 30 3a 20 64 65 66 61 75 6c 74 20 2a 2f  ry 0: default */
bbc0: 0a 20 20 75 38 20 6d 61 6c 6c 6f 63 46 61 69 6c  .  u8 mallocFail
bbd0: 65 64 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ed;             
bbe0: 20 2f 2a 20 54 72 75 65 20 69 66 20 77 65 20 68   /* True if we h
bbf0: 61 76 65 20 73 65 65 6e 20 61 20 6d 61 6c 6c 6f  ave seen a mallo
bc00: 63 20 66 61 69 6c 75 72 65 20 2a 2f 0a 20 20 75  c failure */.  u
bc10: 38 20 62 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 3b  8 bBenignMalloc;
bc20: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
bc30: 44 6f 20 6e 6f 74 20 72 65 71 75 69 72 65 20 4f  Do not require O
bc40: 4f 4d 73 20 69 66 20 74 72 75 65 20 2a 2f 0a 20  OMs if true */. 
bc50: 20 75 38 20 64 66 6c 74 4c 6f 63 6b 4d 6f 64 65   u8 dfltLockMode
bc60: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
bc70: 2a 20 44 65 66 61 75 6c 74 20 6c 6f 63 6b 69 6e  * Default lockin
bc80: 67 2d 6d 6f 64 65 20 66 6f 72 20 61 74 74 61 63  g-mode for attac
bc90: 68 65 64 20 64 62 73 20 2a 2f 0a 20 20 73 69 67  hed dbs */.  sig
bca0: 6e 65 64 20 63 68 61 72 20 6e 65 78 74 41 75 74  ned char nextAut
bcb0: 6f 76 61 63 3b 20 20 20 20 20 20 2f 2a 20 41 75  ovac;      /* Au
bcc0: 74 6f 76 61 63 20 73 65 74 74 69 6e 67 20 61 66  tovac setting af
bcd0: 74 65 72 20 56 41 43 55 55 4d 20 69 66 20 3e 3d  ter VACUUM if >=
bce0: 30 20 2a 2f 0a 20 20 75 38 20 73 75 70 70 72 65  0 */.  u8 suppre
bcf0: 73 73 45 72 72 3b 20 20 20 20 20 20 20 20 20 20  ssErr;          
bd00: 20 20 20 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 69       /* Do not i
bd10: 73 73 75 65 20 65 72 72 6f 72 20 6d 65 73 73 61  ssue error messa
bd20: 67 65 73 20 69 66 20 74 72 75 65 20 2a 2f 0a 20  ges if true */. 
bd30: 20 75 38 20 76 74 61 62 4f 6e 43 6f 6e 66 6c 69   u8 vtabOnConfli
bd40: 63 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  ct;            /
bd50: 2a 20 56 61 6c 75 65 20 74 6f 20 72 65 74 75 72  * Value to retur
bd60: 6e 20 66 6f 72 20 73 33 5f 76 74 61 62 5f 6f 6e  n for s3_vtab_on
bd70: 5f 63 6f 6e 66 6c 69 63 74 28 29 20 2a 2f 0a 20  _conflict() */. 
bd80: 20 75 38 20 69 73 54 72 61 6e 73 61 63 74 69 6f   u8 isTransactio
bd90: 6e 53 61 76 65 70 6f 69 6e 74 3b 20 20 20 20 2f  nSavepoint;    /
bda0: 2a 20 54 72 75 65 20 69 66 20 74 68 65 20 6f 75  * True if the ou
bdb0: 74 65 72 6d 6f 73 74 20 73 61 76 65 70 6f 69 6e  termost savepoin
bdc0: 74 20 69 73 20 61 20 54 53 20 2a 2f 0a 20 20 75  t is a TS */.  u
bdd0: 38 20 6d 54 72 61 63 65 3b 20 20 20 20 20 20 20  8 mTrace;       
bde0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
bdf0: 7a 65 72 6f 20 6f 72 20 6d 6f 72 65 20 53 51 4c  zero or more SQL
be00: 49 54 45 5f 54 52 41 43 45 20 66 6c 61 67 73 20  ITE_TRACE flags 
be10: 2a 2f 0a 20 20 75 38 20 6e 6f 53 68 61 72 65 64  */.  u8 noShared
be20: 43 61 63 68 65 3b 20 20 20 20 20 20 20 20 20 20  Cache;          
be30: 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 6e 6f     /* True if no
be40: 20 73 68 61 72 65 64 2d 63 61 63 68 65 20 62 61   shared-cache ba
be50: 63 6b 65 6e 64 73 20 2a 2f 0a 20 20 75 38 20 6e  ckends */.  u8 n
be60: 53 71 6c 45 78 65 63 3b 20 20 20 20 20 20 20 20  SqlExec;        
be70: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
be80: 62 65 72 20 6f 66 20 70 65 6e 64 69 6e 67 20 4f  ber of pending O
be90: 50 5f 53 71 6c 45 78 65 63 20 6f 70 63 6f 64 65  P_SqlExec opcode
bea0: 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 65 78 74 50  s */.  int nextP
beb0: 61 67 65 73 69 7a 65 3b 20 20 20 20 20 20 20 20  agesize;        
bec0: 20 20 20 20 20 2f 2a 20 50 61 67 65 73 69 7a 65       /* Pagesize
bed0: 20 61 66 74 65 72 20 56 41 43 55 55 4d 20 69 66   after VACUUM if
bee0: 20 3e 30 20 2a 2f 0a 20 20 75 33 32 20 6d 61 67   >0 */.  u32 mag
bef0: 69 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ic;             
bf00: 20 20 20 20 20 20 20 2f 2a 20 4d 61 67 69 63 20         /* Magic 
bf10: 6e 75 6d 62 65 72 20 66 6f 72 20 64 65 74 65 63  number for detec
bf20: 74 20 6c 69 62 72 61 72 79 20 6d 69 73 75 73 65  t library misuse
bf30: 20 2a 2f 0a 20 20 69 6e 74 20 6e 43 68 61 6e 67   */.  int nChang
bf40: 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e;              
bf50: 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 72 65 74      /* Value ret
bf60: 75 72 6e 65 64 20 62 79 20 73 71 6c 69 74 65 33  urned by sqlite3
bf70: 5f 63 68 61 6e 67 65 73 28 29 20 2a 2f 0a 20 20  _changes() */.  
bf80: 69 6e 74 20 6e 54 6f 74 61 6c 43 68 61 6e 67 65  int nTotalChange
bf90: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
bfa0: 20 56 61 6c 75 65 20 72 65 74 75 72 6e 65 64 20   Value returned 
bfb0: 62 79 20 73 71 6c 69 74 65 33 5f 74 6f 74 61 6c  by sqlite3_total
bfc0: 5f 63 68 61 6e 67 65 73 28 29 20 2a 2f 0a 20 20  _changes() */.  
bfd0: 69 6e 74 20 61 4c 69 6d 69 74 5b 53 51 4c 49 54  int aLimit[SQLIT
bfe0: 45 5f 4e 5f 4c 49 4d 49 54 5d 3b 20 20 20 2f 2a  E_N_LIMIT];   /*
bff0: 20 4c 69 6d 69 74 73 20 2a 2f 0a 20 20 69 6e 74   Limits */.  int
c000: 20 6e 4d 61 78 53 6f 72 74 65 72 4d 6d 61 70 3b   nMaxSorterMmap;
c010: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61             /* Ma
c020: 78 69 6d 75 6d 20 73 69 7a 65 20 6f 66 20 72 65  ximum size of re
c030: 67 69 6f 6e 73 20 6d 61 70 70 65 64 20 62 79 20  gions mapped by 
c040: 73 6f 72 74 65 72 20 2a 2f 0a 20 20 73 74 72 75  sorter */.  stru
c050: 63 74 20 73 71 6c 69 74 65 33 49 6e 69 74 49 6e  ct sqlite3InitIn
c060: 66 6f 20 7b 20 20 20 20 20 20 2f 2a 20 49 6e 66  fo {      /* Inf
c070: 6f 72 6d 61 74 69 6f 6e 20 75 73 65 64 20 64 75  ormation used du
c080: 72 69 6e 67 20 69 6e 69 74 69 61 6c 69 7a 61 74  ring initializat
c090: 69 6f 6e 20 2a 2f 0a 20 20 20 20 69 6e 74 20 6e  ion */.    int n
c0a0: 65 77 54 6e 75 6d 3b 20 20 20 20 20 20 20 20 20  ewTnum;         
c0b0: 20 20 20 20 20 20 20 2f 2a 20 52 6f 6f 74 70 61         /* Rootpa
c0c0: 67 65 20 6f 66 20 74 61 62 6c 65 20 62 65 69 6e  ge of table bein
c0d0: 67 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f  g initialized */
c0e0: 0a 20 20 20 20 75 38 20 69 44 62 3b 20 20 20 20  .    u8 iDb;    
c0f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c100: 20 2f 2a 20 57 68 69 63 68 20 64 62 20 66 69 6c   /* Which db fil
c110: 65 20 69 73 20 62 65 69 6e 67 20 69 6e 69 74 69  e is being initi
c120: 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 20 20 75 38  alized */.    u8
c130: 20 62 75 73 79 3b 20 20 20 20 20 20 20 20 20 20   busy;          
c140: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 52 55            /* TRU
c150: 45 20 69 66 20 63 75 72 72 65 6e 74 6c 79 20 69  E if currently i
c160: 6e 69 74 69 61 6c 69 7a 69 6e 67 20 2a 2f 0a 20  nitializing */. 
c170: 20 20 20 75 6e 73 69 67 6e 65 64 20 6f 72 70 68     unsigned orph
c180: 61 6e 54 72 69 67 67 65 72 20 3a 20 31 3b 20 2f  anTrigger : 1; /
c190: 2a 20 4c 61 73 74 20 73 74 61 74 65 6d 65 6e 74  * Last statement
c1a0: 20 69 73 20 6f 72 70 68 61 6e 65 64 20 54 45 4d   is orphaned TEM
c1b0: 50 20 74 72 69 67 67 65 72 20 2a 2f 0a 20 20 20  P trigger */.   
c1c0: 20 75 6e 73 69 67 6e 65 64 20 69 6d 70 6f 73 74   unsigned impost
c1d0: 65 72 54 61 62 6c 65 20 3a 20 31 3b 20 2f 2a 20  erTable : 1; /* 
c1e0: 42 75 69 6c 64 69 6e 67 20 61 6e 20 69 6d 70 6f  Building an impo
c1f0: 73 74 65 72 20 74 61 62 6c 65 20 2a 2f 0a 20 20  ster table */.  
c200: 20 20 75 6e 73 69 67 6e 65 64 20 72 65 6f 70 65    unsigned reope
c210: 6e 4d 65 6d 64 62 20 3a 20 31 3b 20 20 20 2f 2a  nMemdb : 1;   /*
c220: 20 41 54 54 41 43 48 20 69 73 20 72 65 61 6c 6c   ATTACH is reall
c230: 79 20 61 20 72 65 6f 70 65 6e 20 75 73 69 6e 67  y a reopen using
c240: 20 4d 65 6d 44 42 20 2a 2f 0a 20 20 7d 20 69 6e   MemDB */.  } in
c250: 69 74 3b 0a 20 20 69 6e 74 20 6e 56 64 62 65 41  it;.  int nVdbeA
c260: 63 74 69 76 65 3b 20 20 20 20 20 20 20 20 20 20  ctive;          
c270: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
c280: 20 56 44 42 45 73 20 63 75 72 72 65 6e 74 6c 79   VDBEs currently
c290: 20 72 75 6e 6e 69 6e 67 20 2a 2f 0a 20 20 69 6e   running */.  in
c2a0: 74 20 6e 56 64 62 65 52 65 61 64 3b 20 20 20 20  t nVdbeRead;    
c2b0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
c2c0: 75 6d 62 65 72 20 6f 66 20 61 63 74 69 76 65 20  umber of active 
c2d0: 56 44 42 45 73 20 74 68 61 74 20 72 65 61 64 20  VDBEs that read 
c2e0: 6f 72 20 77 72 69 74 65 20 2a 2f 0a 20 20 69 6e  or write */.  in
c2f0: 74 20 6e 56 64 62 65 57 72 69 74 65 3b 20 20 20  t nVdbeWrite;   
c300: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
c310: 75 6d 62 65 72 20 6f 66 20 61 63 74 69 76 65 20  umber of active 
c320: 56 44 42 45 73 20 74 68 61 74 20 72 65 61 64 20  VDBEs that read 
c330: 61 6e 64 20 77 72 69 74 65 20 2a 2f 0a 20 20 69  and write */.  i
c340: 6e 74 20 6e 56 64 62 65 45 78 65 63 3b 20 20 20  nt nVdbeExec;   
c350: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
c360: 4e 75 6d 62 65 72 20 6f 66 20 6e 65 73 74 65 64  Number of nested
c370: 20 63 61 6c 6c 73 20 74 6f 20 56 64 62 65 45 78   calls to VdbeEx
c380: 65 63 28 29 20 2a 2f 0a 20 20 69 6e 74 20 6e 56  ec() */.  int nV
c390: 44 65 73 74 72 6f 79 3b 20 20 20 20 20 20 20 20  Destroy;        
c3a0: 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
c3b0: 72 20 6f 66 20 61 63 74 69 76 65 20 4f 50 5f 56  r of active OP_V
c3c0: 44 65 73 74 72 6f 79 20 6f 70 65 72 61 74 69 6f  Destroy operatio
c3d0: 6e 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 45 78 74  ns */.  int nExt
c3e0: 65 6e 73 69 6f 6e 3b 20 20 20 20 20 20 20 20 20  ension;         
c3f0: 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
c400: 6f 66 20 6c 6f 61 64 65 64 20 65 78 74 65 6e 73  of loaded extens
c410: 69 6f 6e 73 20 2a 2f 0a 20 20 76 6f 69 64 20 2a  ions */.  void *
c420: 2a 61 45 78 74 65 6e 73 69 6f 6e 3b 20 20 20 20  *aExtension;    
c430: 20 20 20 20 20 20 20 20 2f 2a 20 41 72 72 61 79          /* Array
c440: 20 6f 66 20 73 68 61 72 65 64 20 6c 69 62 72 61   of shared libra
c450: 72 79 20 68 61 6e 64 6c 65 73 20 2a 2f 0a 20 20  ry handles */.  
c460: 69 6e 74 20 28 2a 78 54 72 61 63 65 29 28 75 33  int (*xTrace)(u3
c470: 32 2c 76 6f 69 64 2a 2c 76 6f 69 64 2a 2c 76 6f  2,void*,void*,vo
c480: 69 64 2a 29 3b 20 20 20 20 20 2f 2a 20 54 72 61  id*);     /* Tra
c490: 63 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20  ce function */. 
c4a0: 20 76 6f 69 64 20 2a 70 54 72 61 63 65 41 72 67   void *pTraceArg
c4b0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
c4c0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72             /* Ar
c4d0: 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20 74 72  gument to the tr
c4e0: 61 63 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a  ace function */.
c4f0: 20 20 76 6f 69 64 20 28 2a 78 50 72 6f 66 69 6c    void (*xProfil
c500: 65 29 28 76 6f 69 64 2a 2c 63 6f 6e 73 74 20 63  e)(void*,const c
c510: 68 61 72 2a 2c 75 36 34 29 3b 20 20 2f 2a 20 50  har*,u64);  /* P
c520: 72 6f 66 69 6c 69 6e 67 20 66 75 6e 63 74 69 6f  rofiling functio
c530: 6e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 50 72  n */.  void *pPr
c540: 6f 66 69 6c 65 41 72 67 3b 20 20 20 20 20 20 20  ofileArg;       
c550: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c560: 20 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f 20   /* Argument to 
c570: 70 72 6f 66 69 6c 65 20 66 75 6e 63 74 69 6f 6e  profile function
c580: 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 43 6f 6d   */.  void *pCom
c590: 6d 69 74 41 72 67 3b 20 20 20 20 20 20 20 20 20  mitArg;         
c5a0: 20 20 20 20 20 20 20 20 2f 2a 20 41 72 67 75 6d          /* Argum
c5b0: 65 6e 74 20 74 6f 20 78 43 6f 6d 6d 69 74 43 61  ent to xCommitCa
c5c0: 6c 6c 62 61 63 6b 28 29 20 2a 2f 0a 20 20 69 6e  llback() */.  in
c5d0: 74 20 28 2a 78 43 6f 6d 6d 69 74 43 61 6c 6c 62  t (*xCommitCallb
c5e0: 61 63 6b 29 28 76 6f 69 64 2a 29 3b 20 20 20 20  ack)(void*);    
c5f0: 2f 2a 20 49 6e 76 6f 6b 65 64 20 61 74 20 65 76  /* Invoked at ev
c600: 65 72 79 20 63 6f 6d 6d 69 74 2e 20 2a 2f 0a 20  ery commit. */. 
c610: 20 76 6f 69 64 20 2a 70 52 6f 6c 6c 62 61 63 6b   void *pRollback
c620: 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20  Arg;            
c630: 20 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74     /* Argument t
c640: 6f 20 78 52 6f 6c 6c 62 61 63 6b 43 61 6c 6c 62  o xRollbackCallb
c650: 61 63 6b 28 29 20 2a 2f 0a 20 20 76 6f 69 64 20  ack() */.  void 
c660: 28 2a 78 52 6f 6c 6c 62 61 63 6b 43 61 6c 6c 62  (*xRollbackCallb
c670: 61 63 6b 29 28 76 6f 69 64 2a 29 3b 20 2f 2a 20  ack)(void*); /* 
c680: 49 6e 76 6f 6b 65 64 20 61 74 20 65 76 65 72 79  Invoked at every
c690: 20 63 6f 6d 6d 69 74 2e 20 2a 2f 0a 20 20 76 6f   commit. */.  vo
c6a0: 69 64 20 2a 70 55 70 64 61 74 65 41 72 67 3b 0a  id *pUpdateArg;.
c6b0: 20 20 76 6f 69 64 20 28 2a 78 55 70 64 61 74 65    void (*xUpdate
c6c0: 43 61 6c 6c 62 61 63 6b 29 28 76 6f 69 64 2a 2c  Callback)(void*,
c6d0: 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  int, const char*
c6e0: 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 73 71 6c  ,const char*,sql
c6f0: 69 74 65 5f 69 6e 74 36 34 29 3b 0a 23 69 66 64  ite_int64);.#ifd
c700: 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ef SQLITE_ENABLE
c710: 5f 50 52 45 55 50 44 41 54 45 5f 48 4f 4f 4b 0a  _PREUPDATE_HOOK.
c720: 20 20 76 6f 69 64 20 2a 70 50 72 65 55 70 64 61    void *pPreUpda
c730: 74 65 41 72 67 3b 20 20 20 20 20 20 20 20 20 20  teArg;          
c740: 2f 2a 20 46 69 72 73 74 20 61 72 67 75 6d 65 6e  /* First argumen
c750: 74 20 74 6f 20 78 50 72 65 55 70 64 61 74 65 43  t to xPreUpdateC
c760: 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 76 6f 69  allback */.  voi
c770: 64 20 28 2a 78 50 72 65 55 70 64 61 74 65 43 61  d (*xPreUpdateCa
c780: 6c 6c 62 61 63 6b 29 28 20 20 20 2f 2a 20 52 65  llback)(   /* Re
c790: 67 69 73 74 65 72 65 64 20 75 73 69 6e 67 20 73  gistered using s
c7a0: 71 6c 69 74 65 33 5f 70 72 65 75 70 64 61 74 65  qlite3_preupdate
c7b0: 5f 68 6f 6f 6b 28 29 20 2a 2f 0a 20 20 20 20 76  _hook() */.    v
c7c0: 6f 69 64 2a 2c 73 71 6c 69 74 65 33 2a 2c 69 6e  oid*,sqlite3*,in
c7d0: 74 2c 63 68 61 72 20 63 6f 6e 73 74 2a 2c 63 68  t,char const*,ch
c7e0: 61 72 20 63 6f 6e 73 74 2a 2c 73 71 6c 69 74 65  ar const*,sqlite
c7f0: 33 5f 69 6e 74 36 34 2c 73 71 6c 69 74 65 33 5f  3_int64,sqlite3_
c800: 69 6e 74 36 34 0a 20 20 29 3b 0a 20 20 50 72 65  int64.  );.  Pre
c810: 55 70 64 61 74 65 20 2a 70 50 72 65 55 70 64 61  Update *pPreUpda
c820: 74 65 3b 20 20 20 20 20 20 20 20 2f 2a 20 43 6f  te;        /* Co
c830: 6e 74 65 78 74 20 66 6f 72 20 61 63 74 69 76 65  ntext for active
c840: 20 70 72 65 2d 75 70 64 61 74 65 20 63 61 6c 6c   pre-update call
c850: 62 61 63 6b 20 2a 2f 0a 23 65 6e 64 69 66 20 2f  back */.#endif /
c860: 2a 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  * SQLITE_ENABLE_
c870: 50 52 45 55 50 44 41 54 45 5f 48 4f 4f 4b 20 2a  PREUPDATE_HOOK *
c880: 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  /.#ifndef SQLITE
c890: 5f 4f 4d 49 54 5f 57 41 4c 0a 20 20 69 6e 74 20  _OMIT_WAL.  int 
c8a0: 28 2a 78 57 61 6c 43 61 6c 6c 62 61 63 6b 29 28  (*xWalCallback)(
c8b0: 76 6f 69 64 20 2a 2c 20 73 71 6c 69 74 65 33 20  void *, sqlite3 
c8c0: 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c  *, const char *,
c8d0: 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20 2a 70   int);.  void *p
c8e0: 57 61 6c 41 72 67 3b 0a 23 65 6e 64 69 66 0a 20  WalArg;.#endif. 
c8f0: 20 76 6f 69 64 28 2a 78 43 6f 6c 6c 4e 65 65 64   void(*xCollNeed
c900: 65 64 29 28 76 6f 69 64 2a 2c 73 71 6c 69 74 65  ed)(void*,sqlite
c910: 33 2a 2c 69 6e 74 20 65 54 65 78 74 52 65 70 2c  3*,int eTextRep,
c920: 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20 20  const char*);.  
c930: 76 6f 69 64 28 2a 78 43 6f 6c 6c 4e 65 65 64 65  void(*xCollNeede
c940: 64 31 36 29 28 76 6f 69 64 2a 2c 73 71 6c 69 74  d16)(void*,sqlit
c950: 65 33 2a 2c 69 6e 74 20 65 54 65 78 74 52 65 70  e3*,int eTextRep
c960: 2c 63 6f 6e 73 74 20 76 6f 69 64 2a 29 3b 0a 20  ,const void*);. 
c970: 20 76 6f 69 64 20 2a 70 43 6f 6c 6c 4e 65 65 64   void *pCollNeed
c980: 65 64 41 72 67 3b 0a 20 20 73 71 6c 69 74 65 33  edArg;.  sqlite3
c990: 5f 76 61 6c 75 65 20 2a 70 45 72 72 3b 20 20 20  _value *pErr;   
c9a0: 20 20 20 20 20 20 20 2f 2a 20 4d 6f 73 74 20 72         /* Most r
c9b0: 65 63 65 6e 74 20 65 72 72 6f 72 20 6d 65 73 73  ecent error mess
c9c0: 61 67 65 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b  age */.  union {
c9d0: 0a 20 20 20 20 76 6f 6c 61 74 69 6c 65 20 69 6e  .    volatile in
c9e0: 74 20 69 73 49 6e 74 65 72 72 75 70 74 65 64 3b  t isInterrupted;
c9f0: 20 2f 2a 20 54 72 75 65 20 69 66 20 73 71 6c 69   /* True if sqli
ca00: 74 65 33 5f 69 6e 74 65 72 72 75 70 74 20 68 61  te3_interrupt ha
ca10: 73 20 62 65 65 6e 20 63 61 6c 6c 65 64 20 2a 2f  s been called */
ca20: 0a 20 20 20 20 64 6f 75 62 6c 65 20 6e 6f 74 55  .    double notU
ca30: 73 65 64 31 3b 20 20 20 20 20 20 20 20 20 20 20  sed1;           
ca40: 20 2f 2a 20 53 70 61 63 65 72 20 2a 2f 0a 20 20   /* Spacer */.  
ca50: 7d 20 75 31 3b 0a 20 20 4c 6f 6f 6b 61 73 69 64  } u1;.  Lookasid
ca60: 65 20 6c 6f 6f 6b 61 73 69 64 65 3b 20 20 20 20  e lookaside;    
ca70: 20 20 20 20 20 20 2f 2a 20 4c 6f 6f 6b 61 73 69        /* Lookasi
ca80: 64 65 20 6d 61 6c 6c 6f 63 20 63 6f 6e 66 69 67  de malloc config
ca90: 75 72 61 74 69 6f 6e 20 2a 2f 0a 23 69 66 6e 64  uration */.#ifnd
caa0: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41  ef SQLITE_OMIT_A
cab0: 55 54 48 4f 52 49 5a 41 54 49 4f 4e 0a 20 20 73  UTHORIZATION.  s
cac0: 71 6c 69 74 65 33 5f 78 61 75 74 68 20 78 41 75  qlite3_xauth xAu
cad0: 74 68 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  th;          /* 
cae0: 41 63 63 65 73 73 20 61 75 74 68 6f 72 69 7a 61  Access authoriza
caf0: 74 69 6f 6e 20 66 75 6e 63 74 69 6f 6e 20 2a 2f  tion function */
cb00: 0a 20 20 76 6f 69 64 20 2a 70 41 75 74 68 41 72  .  void *pAuthAr
cb10: 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  g;              
cb20: 20 2f 2a 20 31 73 74 20 61 72 67 75 6d 65 6e 74   /* 1st argument
cb30: 20 74 6f 20 74 68 65 20 61 63 63 65 73 73 20 61   to the access a
cb40: 75 74 68 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a  uth function */.
cb50: 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53  #endif.#ifndef S
cb60: 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 4f 47 52  QLITE_OMIT_PROGR
cb70: 45 53 53 5f 43 41 4c 4c 42 41 43 4b 0a 20 20 69  ESS_CALLBACK.  i
cb80: 6e 74 20 28 2a 78 50 72 6f 67 72 65 73 73 29 28  nt (*xProgress)(
cb90: 76 6f 69 64 20 2a 29 3b 20 20 20 20 20 2f 2a 20  void *);     /* 
cba0: 54 68 65 20 70 72 6f 67 72 65 73 73 20 63 61 6c  The progress cal
cbb0: 6c 62 61 63 6b 20 2a 2f 0a 20 20 76 6f 69 64 20  lback */.  void 
cbc0: 2a 70 50 72 6f 67 72 65 73 73 41 72 67 3b 20 20  *pProgressArg;  
cbd0: 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72 67 75           /* Argu
cbe0: 6d 65 6e 74 20 74 6f 20 74 68 65 20 70 72 6f 67  ment to the prog
cbf0: 72 65 73 73 20 63 61 6c 6c 62 61 63 6b 20 2a 2f  ress callback */
cc00: 0a 20 20 75 6e 73 69 67 6e 65 64 20 6e 50 72 6f  .  unsigned nPro
cc10: 67 72 65 73 73 4f 70 73 3b 20 20 20 20 20 20 20  gressOps;       
cc20: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6f 70   /* Number of op
cc30: 63 6f 64 65 73 20 66 6f 72 20 70 72 6f 67 72 65  codes for progre
cc40: 73 73 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 23  ss callback */.#
cc50: 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51  endif.#ifndef SQ
cc60: 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
cc70: 4c 54 41 42 4c 45 0a 20 20 69 6e 74 20 6e 56 54  LTABLE.  int nVT
cc80: 72 61 6e 73 3b 20 20 20 20 20 20 20 20 20 20 20  rans;           
cc90: 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 6f 63 61         /* Alloca
cca0: 74 65 64 20 73 69 7a 65 20 6f 66 20 61 56 54 72  ted size of aVTr
ccb0: 61 6e 73 20 2a 2f 0a 20 20 48 61 73 68 20 61 4d  ans */.  Hash aM
ccc0: 6f 64 75 6c 65 3b 20 20 20 20 20 20 20 20 20 20  odule;          
ccd0: 20 20 20 20 20 20 20 2f 2a 20 70 6f 70 75 6c 61         /* popula
cce0: 74 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f 63  ted by sqlite3_c
ccf0: 72 65 61 74 65 5f 6d 6f 64 75 6c 65 28 29 20 2a  reate_module() *
cd00: 2f 0a 20 20 56 74 61 62 43 74 78 20 2a 70 56 74  /.  VtabCtx *pVt
cd10: 61 62 43 74 78 3b 20 20 20 20 20 20 20 20 20 20  abCtx;          
cd20: 20 20 2f 2a 20 43 6f 6e 74 65 78 74 20 66 6f 72    /* Context for
cd30: 20 61 63 74 69 76 65 20 76 74 61 62 20 63 6f 6e   active vtab con
cd40: 6e 65 63 74 2f 63 72 65 61 74 65 20 2a 2f 0a 20  nect/create */. 
cd50: 20 56 54 61 62 6c 65 20 2a 2a 61 56 54 72 61 6e   VTable **aVTran
cd60: 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  s;             /
cd70: 2a 20 56 69 72 74 75 61 6c 20 74 61 62 6c 65 73  * Virtual tables
cd80: 20 77 69 74 68 20 6f 70 65 6e 20 74 72 61 6e 73   with open trans
cd90: 61 63 74 69 6f 6e 73 20 2a 2f 0a 20 20 56 54 61  actions */.  VTa
cda0: 62 6c 65 20 2a 70 44 69 73 63 6f 6e 6e 65 63 74  ble *pDisconnect
cdb0: 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 69  ;          /* Di
cdc0: 73 63 6f 6e 6e 65 63 74 20 74 68 65 73 65 20 69  sconnect these i
cdd0: 6e 20 6e 65 78 74 20 73 71 6c 69 74 65 33 5f 70  n next sqlite3_p
cde0: 72 65 70 61 72 65 28 29 20 2a 2f 0a 23 65 6e 64  repare() */.#end
cdf0: 69 66 0a 20 20 48 61 73 68 20 61 46 75 6e 63 3b  if.  Hash aFunc;
ce00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ce10: 20 20 20 2f 2a 20 48 61 73 68 20 74 61 62 6c 65     /* Hash table
ce20: 20 6f 66 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 66   of connection f
ce30: 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a 20 20 48 61  unctions */.  Ha
ce40: 73 68 20 61 43 6f 6c 6c 53 65 71 3b 20 20 20 20  sh aCollSeq;    
ce50: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41              /* A
ce60: 6c 6c 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71  ll collating seq
ce70: 75 65 6e 63 65 73 20 2a 2f 0a 20 20 42 75 73 79  uences */.  Busy
ce80: 48 61 6e 64 6c 65 72 20 62 75 73 79 48 61 6e 64  Handler busyHand
ce90: 6c 65 72 3b 20 20 20 20 20 20 2f 2a 20 42 75 73  ler;      /* Bus
cea0: 79 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20  y callback */.  
ceb0: 44 62 20 61 44 62 53 74 61 74 69 63 5b 32 5d 3b  Db aDbStatic[2];
cec0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
ced0: 20 53 74 61 74 69 63 20 73 70 61 63 65 20 66 6f   Static space fo
cee0: 72 20 74 68 65 20 32 20 64 65 66 61 75 6c 74 20  r the 2 default 
cef0: 62 61 63 6b 65 6e 64 73 20 2a 2f 0a 20 20 53 61  backends */.  Sa
cf00: 76 65 70 6f 69 6e 74 20 2a 70 53 61 76 65 70 6f  vepoint *pSavepo
cf10: 69 6e 74 3b 20 20 20 20 20 20 20 20 2f 2a 20 4c  int;        /* L
cf20: 69 73 74 20 6f 66 20 61 63 74 69 76 65 20 73 61  ist of active sa
cf30: 76 65 70 6f 69 6e 74 73 20 2a 2f 0a 20 20 69 6e  vepoints */.  in
cf40: 74 20 62 75 73 79 54 69 6d 65 6f 75 74 3b 20 20  t busyTimeout;  
cf50: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 42              /* B
cf60: 75 73 79 20 68 61 6e 64 6c 65 72 20 74 69 6d 65  usy handler time
cf70: 6f 75 74 2c 20 69 6e 20 6d 73 65 63 20 2a 2f 0a  out, in msec */.
cf80: 20 20 69 6e 74 20 6e 53 61 76 65 70 6f 69 6e 74    int nSavepoint
cf90: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
cfa0: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6e 6f 6e  /* Number of non
cfb0: 2d 74 72 61 6e 73 61 63 74 69 6f 6e 20 73 61 76  -transaction sav
cfc0: 65 70 6f 69 6e 74 73 20 2a 2f 0a 20 20 69 6e 74  epoints */.  int
cfd0: 20 6e 53 74 61 74 65 6d 65 6e 74 3b 20 20 20 20   nStatement;    
cfe0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
cff0: 6d 62 65 72 20 6f 66 20 6e 65 73 74 65 64 20 73  mber of nested s
d000: 74 61 74 65 6d 65 6e 74 2d 74 72 61 6e 73 61 63  tatement-transac
d010: 74 69 6f 6e 73 20 20 2a 2f 0a 20 20 69 36 34 20  tions  */.  i64 
d020: 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 3b 20 20  nDeferredCons;  
d030: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 74            /* Net
d040: 20 64 65 66 65 72 72 65 64 20 63 6f 6e 73 74 72   deferred constr
d050: 61 69 6e 74 73 20 74 68 69 73 20 74 72 61 6e 73  aints this trans
d060: 61 63 74 69 6f 6e 2e 20 2a 2f 0a 20 20 69 36 34  action. */.  i64
d070: 20 6e 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e   nDeferredImmCon
d080: 73 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 65  s;         /* Ne
d090: 74 20 64 65 66 65 72 72 65 64 20 69 6d 6d 65 64  t deferred immed
d0a0: 69 61 74 65 20 63 6f 6e 73 74 72 61 69 6e 74 73  iate constraints
d0b0: 20 2a 2f 0a 20 20 69 6e 74 20 2a 70 6e 42 79 74   */.  int *pnByt
d0c0: 65 73 46 72 65 65 64 3b 20 20 20 20 20 20 20 20  esFreed;        
d0d0: 20 20 20 20 2f 2a 20 49 66 20 6e 6f 74 20 4e 55      /* If not NU
d0e0: 4c 4c 2c 20 69 6e 63 72 65 6d 65 6e 74 20 74 68  LL, increment th
d0f0: 69 73 20 69 6e 20 44 62 46 72 65 65 28 29 20 2a  is in DbFree() *
d100: 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
d110: 45 4e 41 42 4c 45 5f 55 4e 4c 4f 43 4b 5f 4e 4f  ENABLE_UNLOCK_NO
d120: 54 49 46 59 0a 20 20 2f 2a 20 54 68 65 20 66 6f  TIFY.  /* The fo
d130: 6c 6c 6f 77 69 6e 67 20 76 61 72 69 61 62 6c 65  llowing variable
d140: 73 20 61 72 65 20 61 6c 6c 20 70 72 6f 74 65 63  s are all protec
d150: 74 65 64 20 62 79 20 74 68 65 20 53 54 41 54 49  ted by the STATI
d160: 43 5f 4d 41 53 54 45 52 0a 20 20 2a 2a 20 6d 75  C_MASTER.  ** mu
d170: 74 65 78 2c 20 6e 6f 74 20 62 79 20 73 71 6c 69  tex, not by sqli
d180: 74 65 33 2e 6d 75 74 65 78 2e 20 54 68 65 79 20  te3.mutex. They 
d190: 61 72 65 20 75 73 65 64 20 62 79 20 63 6f 64 65  are used by code
d1a0: 20 69 6e 20 6e 6f 74 69 66 79 2e 63 2e 0a 20 20   in notify.c..  
d1b0: 2a 2a 0a 20 20 2a 2a 20 57 68 65 6e 20 58 2e 70  **.  ** When X.p
d1c0: 55 6e 6c 6f 63 6b 43 6f 6e 6e 65 63 74 69 6f 6e  UnlockConnection
d1d0: 3d 3d 59 2c 20 74 68 61 74 20 6d 65 61 6e 73 20  ==Y, that means 
d1e0: 74 68 61 74 20 58 20 69 73 20 77 61 69 74 69 6e  that X is waitin
d1f0: 67 20 66 6f 72 20 59 20 74 6f 0a 20 20 2a 2a 20  g for Y to.  ** 
d200: 75 6e 6c 6f 63 6b 20 73 6f 20 74 68 61 74 20 69  unlock so that i
d210: 74 20 63 61 6e 20 70 72 6f 63 65 65 64 2e 0a 20  t can proceed.. 
d220: 20 2a 2a 0a 20 20 2a 2a 20 57 68 65 6e 20 58 2e   **.  ** When X.
d230: 70 42 6c 6f 63 6b 69 6e 67 43 6f 6e 6e 65 63 74  pBlockingConnect
d240: 69 6f 6e 3d 3d 59 2c 20 74 68 61 74 20 6d 65 61  ion==Y, that mea
d250: 6e 73 20 74 68 61 74 20 73 6f 6d 65 74 68 69 6e  ns that somethin
d260: 67 20 74 68 61 74 20 58 20 74 72 69 65 64 0a 20  g that X tried. 
d270: 20 2a 2a 20 74 72 69 65 64 20 74 6f 20 64 6f 20   ** tried to do 
d280: 72 65 63 65 6e 74 6c 79 20 66 61 69 6c 65 64 20  recently failed 
d290: 77 69 74 68 20 61 6e 20 53 51 4c 49 54 45 5f 4c  with an SQLITE_L
d2a0: 4f 43 4b 45 44 20 65 72 72 6f 72 20 64 75 65 20  OCKED error due 
d2b0: 74 6f 20 6c 6f 63 6b 73 0a 20 20 2a 2a 20 68 65  to locks.  ** he
d2c0: 6c 64 20 62 79 20 59 2e 0a 20 20 2a 2f 0a 20 20  ld by Y..  */.  
d2d0: 73 71 6c 69 74 65 33 20 2a 70 42 6c 6f 63 6b 69  sqlite3 *pBlocki
d2e0: 6e 67 43 6f 6e 6e 65 63 74 69 6f 6e 3b 20 2f 2a  ngConnection; /*
d2f0: 20 43 6f 6e 6e 65 63 74 69 6f 6e 20 74 68 61 74   Connection that
d300: 20 63 61 75 73 65 64 20 53 51 4c 49 54 45 5f 4c   caused SQLITE_L
d310: 4f 43 4b 45 44 20 2a 2f 0a 20 20 73 71 6c 69 74  OCKED */.  sqlit
d320: 65 33 20 2a 70 55 6e 6c 6f 63 6b 43 6f 6e 6e 65  e3 *pUnlockConne
d330: 63 74 69 6f 6e 3b 20 20 20 20 20 20 20 20 20 20  ction;          
d340: 20 2f 2a 20 43 6f 6e 6e 65 63 74 69 6f 6e 20 74   /* Connection t
d350: 6f 20 77 61 74 63 68 20 66 6f 72 20 75 6e 6c 6f  o watch for unlo
d360: 63 6b 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 55  ck */.  void *pU
d370: 6e 6c 6f 63 6b 41 72 67 3b 20 20 20 20 20 20 20  nlockArg;       
d380: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
d390: 20 41 72 67 75 6d 65 6e 74 20 74 6f 20 78 55 6e   Argument to xUn
d3a0: 6c 6f 63 6b 4e 6f 74 69 66 79 20 2a 2f 0a 20 20  lockNotify */.  
d3b0: 76 6f 69 64 20 28 2a 78 55 6e 6c 6f 63 6b 4e 6f  void (*xUnlockNo
d3c0: 74 69 66 79 29 28 76 6f 69 64 20 2a 2a 2c 20 69  tify)(void **, i
d3d0: 6e 74 29 3b 20 20 2f 2a 20 55 6e 6c 6f 63 6b 20  nt);  /* Unlock 
d3e0: 6e 6f 74 69 66 79 20 63 61 6c 6c 62 61 63 6b 20  notify callback 
d3f0: 2a 2f 0a 20 20 73 71 6c 69 74 65 33 20 2a 70 4e  */.  sqlite3 *pN
d400: 65 78 74 42 6c 6f 63 6b 65 64 3b 20 20 20 20 20  extBlocked;     
d410: 20 20 20 2f 2a 20 4e 65 78 74 20 69 6e 20 6c 69     /* Next in li
d420: 73 74 20 6f 66 20 61 6c 6c 20 62 6c 6f 63 6b 65  st of all blocke
d430: 64 20 63 6f 6e 6e 65 63 74 69 6f 6e 73 20 2a 2f  d connections */
d440: 0a 23 65 6e 64 69 66 0a 23 69 66 64 65 66 20 53  .#endif.#ifdef S
d450: 51 4c 49 54 45 5f 55 53 45 52 5f 41 55 54 48 45  QLITE_USER_AUTHE
d460: 4e 54 49 43 41 54 49 4f 4e 0a 20 20 73 71 6c 69  NTICATION.  sqli
d470: 74 65 33 5f 75 73 65 72 61 75 74 68 20 61 75 74  te3_userauth aut
d480: 68 3b 20 20 20 20 20 20 20 20 2f 2a 20 55 73 65  h;        /* Use
d490: 72 20 61 75 74 68 65 6e 74 69 63 61 74 69 6f 6e  r authentication
d4a0: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 2a 2f 0a   information */.
d4b0: 23 65 6e 64 69 66 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  #endif.};../*.**
d4c0: 20 41 20 6d 61 63 72 6f 20 74 6f 20 64 69 73 63   A macro to disc
d4d0: 6f 76 65 72 20 74 68 65 20 65 6e 63 6f 64 69 6e  over the encodin
d4e0: 67 20 6f 66 20 61 20 64 61 74 61 62 61 73 65 2e  g of a database.
d4f0: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 43 48 45  .*/.#define SCHE
d500: 4d 41 5f 45 4e 43 28 64 62 29 20 28 28 64 62 29  MA_ENC(db) ((db)
d510: 2d 3e 61 44 62 5b 30 5d 2e 70 53 63 68 65 6d 61  ->aDb[0].pSchema
d520: 2d 3e 65 6e 63 29 0a 23 64 65 66 69 6e 65 20 45  ->enc).#define E
d530: 4e 43 28 64 62 29 20 20 20 20 20 20 20 20 28 28  NC(db)        ((
d540: 64 62 29 2d 3e 65 6e 63 29 0a 0a 2f 2a 0a 2a 2a  db)->enc)../*.**
d550: 20 50 6f 73 73 69 62 6c 65 20 76 61 6c 75 65 73   Possible values
d560: 20 66 6f 72 20 74 68 65 20 73 71 6c 69 74 65 33   for the sqlite3
d570: 2e 66 6c 61 67 73 2e 0a 2a 2a 0a 2a 2a 20 56 61  .flags..**.** Va
d580: 6c 75 65 20 63 6f 6e 73 74 72 61 69 6e 74 73 20  lue constraints 
d590: 28 65 6e 66 6f 72 63 65 64 20 76 69 61 20 61 73  (enforced via as
d5a0: 73 65 72 74 28 29 29 3a 0a 2a 2a 20 20 20 20 20  sert()):.**     
d5b0: 20 53 51 4c 49 54 45 5f 46 75 6c 6c 46 53 79 6e   SQLITE_FullFSyn
d5c0: 63 20 20 20 20 20 3d 3d 20 50 41 47 45 52 5f 46  c     == PAGER_F
d5d0: 55 4c 4c 46 53 59 4e 43 0a 2a 2a 20 20 20 20 20  ULLFSYNC.**     
d5e0: 20 53 51 4c 49 54 45 5f 43 6b 70 74 46 75 6c 6c   SQLITE_CkptFull
d5f0: 46 53 79 6e 63 20 3d 3d 20 50 41 47 45 52 5f 43  FSync == PAGER_C
d600: 4b 50 54 5f 46 55 4c 4c 46 53 59 4e 43 0a 2a 2a  KPT_FULLFSYNC.**
d610: 20 20 20 20 20 20 53 51 4c 49 54 45 5f 43 61 63        SQLITE_Cac
d620: 68 65 53 70 69 6c 6c 20 20 20 20 3d 3d 20 50 41  heSpill    == PA
d630: 47 45 52 5f 43 41 43 48 45 5f 53 50 49 4c 4c 0a  GER_CACHE_SPILL.
d640: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
d650: 45 5f 57 72 69 74 65 53 63 68 65 6d 61 20 20 20  E_WriteSchema   
d660: 20 30 78 30 30 30 30 30 30 30 31 20 20 2f 2a 20   0x00000001  /* 
d670: 4f 4b 20 74 6f 20 75 70 64 61 74 65 20 53 51 4c  OK to update SQL
d680: 49 54 45 5f 4d 41 53 54 45 52 20 2a 2f 0a 23 64  ITE_MASTER */.#d
d690: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4c 65 67  efine SQLITE_Leg
d6a0: 61 63 79 46 69 6c 65 46 6d 74 20 20 30 78 30 30  acyFileFmt  0x00
d6b0: 30 30 30 30 30 32 20 20 2f 2a 20 43 72 65 61 74  000002  /* Creat
d6c0: 65 20 6e 65 77 20 64 61 74 61 62 61 73 65 73 20  e new databases 
d6d0: 69 6e 20 66 6f 72 6d 61 74 20 31 20 2a 2f 0a 23  in format 1 */.#
d6e0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 75  define SQLITE_Fu
d6f0: 6c 6c 43 6f 6c 4e 61 6d 65 73 20 20 20 30 78 30  llColNames   0x0
d700: 30 30 30 30 30 30 34 20 20 2f 2a 20 53 68 6f 77  0000004  /* Show
d710: 20 66 75 6c 6c 20 63 6f 6c 75 6d 6e 20 6e 61 6d   full column nam
d720: 65 73 20 6f 6e 20 53 45 4c 45 43 54 20 2a 2f 0a  es on SELECT */.
d730: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46  #define SQLITE_F
d740: 75 6c 6c 46 53 79 6e 63 20 20 20 20 20 20 30 78  ullFSync      0x
d750: 30 30 30 30 30 30 30 38 20 20 2f 2a 20 55 73 65  00000008  /* Use
d760: 20 66 75 6c 6c 20 66 73 79 6e 63 20 6f 6e 20 74   full fsync on t
d770: 68 65 20 62 61 63 6b 65 6e 64 20 2a 2f 0a 23 64  he backend */.#d
d780: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 6b 70  efine SQLITE_Ckp
d790: 74 46 75 6c 6c 46 53 79 6e 63 20 20 30 78 30 30  tFullFSync  0x00
d7a0: 30 30 30 30 31 30 20 20 2f 2a 20 55 73 65 20 66  000010  /* Use f
d7b0: 75 6c 6c 20 66 73 79 6e 63 20 66 6f 72 20 63 68  ull fsync for ch
d7c0: 65 63 6b 70 6f 69 6e 74 20 2a 2f 0a 23 64 65 66  eckpoint */.#def
d7d0: 69 6e 65 20 53 51 4c 49 54 45 5f 43 61 63 68 65  ine SQLITE_Cache
d7e0: 53 70 69 6c 6c 20 20 20 20 20 30 78 30 30 30 30  Spill     0x0000
d7f0: 30 30 32 30 20 20 2f 2a 20 4f 4b 20 74 6f 20 73  0020  /* OK to s
d800: 70 69 6c 6c 20 70 61 67 65 72 20 63 61 63 68 65  pill pager cache
d810: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
d820: 54 45 5f 53 68 6f 72 74 43 6f 6c 4e 61 6d 65 73  TE_ShortColNames
d830: 20 20 30 78 30 30 30 30 30 30 34 30 20 20 2f 2a    0x00000040  /*
d840: 20 53 68 6f 77 20 73 68 6f 72 74 20 63 6f 6c 75   Show short colu
d850: 6d 6e 73 20 6e 61 6d 65 73 20 2a 2f 0a 23 64 65  mns names */.#de
d860: 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 6f 75 6e  fine SQLITE_Coun
d870: 74 52 6f 77 73 20 20 20 20 20 20 30 78 30 30 30  tRows      0x000
d880: 30 30 30 38 30 20 20 2f 2a 20 43 6f 75 6e 74 20  00080  /* Count 
d890: 72 6f 77 73 20 63 68 61 6e 67 65 64 20 62 79 20  rows changed by 
d8a0: 49 4e 53 45 52 54 2c 20 2a 2f 0a 20 20 20 20 20  INSERT, */.     
d8b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d8c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d8d0: 20 20 20 20 20 2f 2a 20 20 20 44 45 4c 45 54 45       /*   DELETE
d8e0: 2c 20 6f 72 20 55 50 44 41 54 45 20 61 6e 64 20  , or UPDATE and 
d8f0: 72 65 74 75 72 6e 20 2a 2f 0a 20 20 20 20 20 20  return */.      
d900: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d910: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d920: 20 20 20 20 2f 2a 20 20 20 74 68 65 20 63 6f 75      /*   the cou
d930: 6e 74 20 75 73 69 6e 67 20 61 20 63 61 6c 6c 62  nt using a callb
d940: 61 63 6b 2e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ack. */.#define 
d950: 53 51 4c 49 54 45 5f 4e 75 6c 6c 43 61 6c 6c 62  SQLITE_NullCallb
d960: 61 63 6b 20 20 20 30 78 30 30 30 30 30 31 30 30  ack   0x00000100
d970: 20 20 2f 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20    /* Invoke the 
d980: 63 61 6c 6c 62 61 63 6b 20 6f 6e 63 65 20 69 66  callback once if
d990: 20 74 68 65 20 2a 2f 0a 20 20 20 20 20 20 20 20   the */.        
d9a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d9b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d9c0: 20 20 2f 2a 20 20 20 72 65 73 75 6c 74 20 73 65    /*   result se
d9d0: 74 20 69 73 20 65 6d 70 74 79 20 2a 2f 0a 23 64  t is empty */.#d
d9e0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49 67 6e  efine SQLITE_Ign
d9f0: 6f 72 65 43 68 65 63 6b 73 20 20 20 30 78 30 30  oreChecks   0x00
da00: 30 30 30 32 30 30 20 20 2f 2a 20 44 6f 20 6e 6f  000200  /* Do no
da10: 74 20 65 6e 66 6f 72 63 65 20 63 68 65 63 6b 20  t enforce check 
da20: 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f 0a 23  constraints */.#
da30: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 52 65  define SQLITE_Re
da40: 61 64 55 6e 63 6f 6d 6d 69 74 20 20 20 30 78 30  adUncommit   0x0
da50: 30 30 30 30 34 30 30 20 20 2f 2a 20 52 45 41 44  0000400  /* READ
da60: 20 55 4e 43 4f 4d 4d 49 54 54 45 44 20 69 6e 20   UNCOMMITTED in 
da70: 73 68 61 72 65 64 2d 63 61 63 68 65 20 2a 2f 0a  shared-cache */.
da80: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e  #define SQLITE_N
da90: 6f 43 6b 70 74 4f 6e 43 6c 6f 73 65 20 20 30 78  oCkptOnClose  0x
daa0: 30 30 30 30 30 38 30 30 20 20 2f 2a 20 4e 6f 20  00000800  /* No 
dab0: 63 68 65 63 6b 70 6f 69 6e 74 20 6f 6e 20 63 6c  checkpoint on cl
dac0: 6f 73 65 28 29 2f 44 45 54 41 43 48 20 2a 2f 0a  ose()/DETACH */.
dad0: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 52  #define SQLITE_R
dae0: 65 76 65 72 73 65 4f 72 64 65 72 20 20 20 30 78  everseOrder   0x
daf0: 30 30 30 30 31 30 30 30 20 20 2f 2a 20 52 65 76  00001000  /* Rev
db00: 65 72 73 65 20 75 6e 6f 72 64 65 72 65 64 20 53  erse unordered S
db10: 45 4c 45 43 54 73 20 2a 2f 0a 23 64 65 66 69 6e  ELECTs */.#defin
db20: 65 20 53 51 4c 49 54 45 5f 52 65 63 54 72 69 67  e SQLITE_RecTrig
db30: 67 65 72 73 20 20 20 20 30 78 30 30 30 30 32 30  gers    0x000020
db40: 30 30 20 20 2f 2a 20 45 6e 61 62 6c 65 20 72 65  00  /* Enable re
db50: 63 75 72 73 69 76 65 20 74 72 69 67 67 65 72 73  cursive triggers
db60: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
db70: 54 45 5f 46 6f 72 65 69 67 6e 4b 65 79 73 20 20  TE_ForeignKeys  
db80: 20 20 30 78 30 30 30 30 34 30 30 30 20 20 2f 2a    0x00004000  /*
db90: 20 45 6e 66 6f 72 63 65 20 66 6f 72 65 69 67 6e   Enforce foreign
dba0: 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 73   key constraints
dbb0: 20 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c    */.#define SQL
dbc0: 49 54 45 5f 41 75 74 6f 49 6e 64 65 78 20 20 20  ITE_AutoIndex   
dbd0: 20 20 20 30 78 30 30 30 30 38 30 30 30 20 20 2f     0x00008000  /
dbe0: 2a 20 45 6e 61 62 6c 65 20 61 75 74 6f 6d 61 74  * Enable automat
dbf0: 69 63 20 69 6e 64 65 78 65 73 20 2a 2f 0a 23 64  ic indexes */.#d
dc00: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4c 6f 61  efine SQLITE_Loa
dc10: 64 45 78 74 65 6e 73 69 6f 6e 20 20 30 78 30 30  dExtension  0x00
dc20: 30 31 30 30 30 30 20 20 2f 2a 20 45 6e 61 62 6c  010000  /* Enabl
dc30: 65 20 6c 6f 61 64 5f 65 78 74 65 6e 73 69 6f 6e  e load_extension
dc40: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
dc50: 54 45 5f 4c 6f 61 64 45 78 74 46 75 6e 63 20 20  TE_LoadExtFunc  
dc60: 20 20 30 78 30 30 30 32 30 30 30 30 20 20 2f 2a    0x00020000  /*
dc70: 20 45 6e 61 62 6c 65 20 6c 6f 61 64 5f 65 78 74   Enable load_ext
dc80: 65 6e 73 69 6f 6e 28 29 20 53 51 4c 20 66 75 6e  ension() SQL fun
dc90: 63 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  c */.#define SQL
dca0: 49 54 45 5f 45 6e 61 62 6c 65 54 72 69 67 67 65  ITE_EnableTrigge
dcb0: 72 20 20 30 78 30 30 30 34 30 30 30 30 20 20 2f  r  0x00040000  /
dcc0: 2a 20 54 72 75 65 20 74 6f 20 65 6e 61 62 6c 65  * True to enable
dcd0: 20 74 72 69 67 67 65 72 73 20 2a 2f 0a 23 64 65   triggers */.#de
dce0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 65 66 65  fine SQLITE_Defe
dcf0: 72 46 4b 73 20 20 20 20 20 20 20 30 78 30 30 30  rFKs       0x000
dd00: 38 30 30 30 30 20 20 2f 2a 20 44 65 66 65 72 20  80000  /* Defer 
dd10: 61 6c 6c 20 46 4b 20 63 6f 6e 73 74 72 61 69 6e  all FK constrain
dd20: 74 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  ts */.#define SQ
dd30: 4c 49 54 45 5f 51 75 65 72 79 4f 6e 6c 79 20 20  LITE_QueryOnly  
dd40: 20 20 20 20 30 78 30 30 31 30 30 30 30 30 20 20      0x00100000  
dd50: 2f 2a 20 44 69 73 61 62 6c 65 20 64 61 74 61 62  /* Disable datab
dd60: 61 73 65 20 63 68 61 6e 67 65 73 20 2a 2f 0a 23  ase changes */.#
dd70: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 65  define SQLITE_Ce
dd80: 6c 6c 53 69 7a 65 43 6b 20 20 20 20 20 30 78 30  llSizeCk     0x0
dd90: 30 32 30 30 30 30 30 20 20 2f 2a 20 43 68 65 63  0200000  /* Chec
dda0: 6b 20 62 74 72 65 65 20 63 65 6c 6c 20 73 69 7a  k btree cell siz
ddb0: 65 73 20 6f 6e 20 6c 6f 61 64 20 2a 2f 0a 23 64  es on load */.#d
ddc0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 74 73  efine SQLITE_Fts
ddd0: 33 54 6f 6b 65 6e 69 7a 65 72 20 20 30 78 30 30  3Tokenizer  0x00
dde0: 34 30 30 30 30 30 20 20 2f 2a 20 45 6e 61 62 6c  400000  /* Enabl
ddf0: 65 20 66 74 73 33 5f 74 6f 6b 65 6e 69 7a 65 72  e fts3_tokenizer
de00: 28 32 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  (2) */.#define S
de10: 51 4c 49 54 45 5f 45 6e 61 62 6c 65 51 50 53 47  QLITE_EnableQPSG
de20: 20 20 20 20 20 30 78 30 30 38 30 30 30 30 30 20       0x00800000 
de30: 20 2f 2a 20 51 75 65 72 79 20 50 6c 61 6e 6e 65   /* Query Planne
de40: 72 20 53 74 61 62 69 6c 69 74 79 20 47 75 61 72  r Stability Guar
de50: 61 6e 74 65 65 2a 2f 0a 23 64 65 66 69 6e 65 20  antee*/.#define 
de60: 53 51 4c 49 54 45 5f 54 72 69 67 67 65 72 45 51  SQLITE_TriggerEQ
de70: 50 20 20 20 20 20 30 78 30 31 30 30 30 30 30 30  P     0x01000000
de80: 20 20 2f 2a 20 53 68 6f 77 20 74 72 69 67 67 65    /* Show trigge
de90: 72 20 45 58 50 4c 41 49 4e 20 51 55 45 52 59 20  r EXPLAIN QUERY 
dea0: 50 4c 41 4e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  PLAN */.#define 
deb0: 53 51 4c 49 54 45 5f 52 65 73 65 74 44 61 74 61  SQLITE_ResetData
dec0: 62 61 73 65 20 20 30 78 30 32 30 30 30 30 30 30  base  0x02000000
ded0: 20 20 2f 2a 20 52 65 73 65 74 20 74 68 65 20 64    /* Reset the d
dee0: 61 74 61 62 61 73 65 20 2a 2f 0a 0a 2f 2a 20 46  atabase */../* F
def0: 6c 61 67 73 20 75 73 65 64 20 6f 6e 6c 79 20 69  lags used only i
df00: 66 20 64 65 62 75 67 67 69 6e 67 20 2a 2f 0a 23  f debugging */.#
df10: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42  ifdef SQLITE_DEB
df20: 55 47 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  UG.#define SQLIT
df30: 45 5f 53 71 6c 54 72 61 63 65 20 20 20 20 20 20  E_SqlTrace      
df40: 20 30 78 30 38 30 30 30 30 30 30 20 20 2f 2a 20   0x08000000  /* 
df50: 44 65 62 75 67 20 70 72 69 6e 74 20 53 51 4c 20  Debug print SQL 
df60: 61 73 20 69 74 20 65 78 65 63 75 74 65 73 20 2a  as it executes *
df70: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
df80: 5f 56 64 62 65 4c 69 73 74 69 6e 67 20 20 20 20  _VdbeListing    
df90: 30 78 31 30 30 30 30 30 30 30 20 20 2f 2a 20 44  0x10000000  /* D
dfa0: 65 62 75 67 20 6c 69 73 74 69 6e 67 73 20 6f 66  ebug listings of
dfb0: 20 56 44 42 45 20 70 72 6f 67 72 61 6d 73 20 2a   VDBE programs *
dfc0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
dfd0: 5f 56 64 62 65 54 72 61 63 65 20 20 20 20 20 20  _VdbeTrace      
dfe0: 30 78 32 30 30 30 30 30 30 30 20 20 2f 2a 20 54  0x20000000  /* T
dff0: 72 75 65 20 74 6f 20 74 72 61 63 65 20 56 44 42  rue to trace VDB
e000: 45 20 65 78 65 63 75 74 69 6f 6e 20 2a 2f 0a 23  E execution */.#
e010: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 56 64  define SQLITE_Vd
e020: 62 65 41 64 64 6f 70 54 72 61 63 65 20 30 78 34  beAddopTrace 0x4
e030: 30 30 30 30 30 30 30 20 20 2f 2a 20 54 72 61 63  0000000  /* Trac
e040: 65 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64  e sqlite3VdbeAdd
e050: 4f 70 28 29 20 63 61 6c 6c 73 20 2a 2f 0a 23 64  Op() calls */.#d
e060: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 56 64 62  efine SQLITE_Vdb
e070: 65 45 51 50 20 20 20 20 20 20 20 20 30 78 38 30  eEQP        0x80
e080: 30 30 30 30 30 30 20 20 2f 2a 20 44 65 62 75 67  000000  /* Debug
e090: 20 45 58 50 4c 41 49 4e 20 51 55 45 52 59 20 50   EXPLAIN QUERY P
e0a0: 4c 41 4e 20 2a 2f 0a 23 65 6e 64 69 66 0a 0a 2f  LAN */.#endif../
e0b0: 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c  *.** Allowed val
e0c0: 75 65 73 20 66 6f 72 20 73 71 6c 69 74 65 33 2e  ues for sqlite3.
e0d0: 6d 44 62 46 6c 61 67 73 0a 2a 2f 0a 23 64 65 66  mDbFlags.*/.#def
e0e0: 69 6e 65 20 44 42 46 4c 41 47 5f 53 63 68 65 6d  ine DBFLAG_Schem
e0f0: 61 43 68 61 6e 67 65 20 20 20 30 78 30 30 30 31  aChange   0x0001
e100: 20 20 2f 2a 20 55 6e 63 6f 6d 6d 69 74 74 65 64    /* Uncommitted
e110: 20 48 61 73 68 20 74 61 62 6c 65 20 63 68 61 6e   Hash table chan
e120: 67 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 44  ges */.#define D
e130: 42 46 4c 41 47 5f 50 72 65 66 65 72 42 75 69 6c  BFLAG_PreferBuil
e140: 74 69 6e 20 20 30 78 30 30 30 32 20 20 2f 2a 20  tin  0x0002  /* 
e150: 50 72 65 66 65 72 65 6e 63 65 20 74 6f 20 62 75  Preference to bu
e160: 69 6c 74 2d 69 6e 20 66 75 6e 63 73 20 2a 2f 0a  ilt-in funcs */.
e170: 23 64 65 66 69 6e 65 20 44 42 46 4c 41 47 5f 56  #define DBFLAG_V
e180: 61 63 75 75 6d 20 20 20 20 20 20 20 20 20 30 78  acuum         0x
e190: 30 30 30 34 20 20 2f 2a 20 43 75 72 72 65 6e 74  0004  /* Current
e1a0: 6c 79 20 69 6e 20 61 20 56 41 43 55 55 4d 20 2a  ly in a VACUUM *
e1b0: 2f 0a 23 64 65 66 69 6e 65 20 44 42 46 4c 41 47  /.#define DBFLAG
e1c0: 5f 53 63 68 65 6d 61 4b 6e 6f 77 6e 4f 6b 20 20  _SchemaKnownOk  
e1d0: 30 78 30 30 30 38 20 20 2f 2a 20 53 63 68 65 6d  0x0008  /* Schem
e1e0: 61 20 69 73 20 6b 6e 6f 77 6e 20 74 6f 20 62 65  a is known to be
e1f0: 20 76 61 6c 69 64 20 2a 2f 0a 0a 2f 2a 0a 2a 2a   valid */../*.**
e200: 20 42 69 74 73 20 6f 66 20 74 68 65 20 73 71 6c   Bits of the sql
e210: 69 74 65 33 2e 64 62 4f 70 74 46 6c 61 67 73 20  ite3.dbOptFlags 
e220: 66 69 65 6c 64 20 74 68 61 74 20 61 72 65 20 75  field that are u
e230: 73 65 64 20 62 79 20 74 68 65 0a 2a 2a 20 73 71  sed by the.** sq
e240: 6c 69 74 65 33 5f 74 65 73 74 5f 63 6f 6e 74 72  lite3_test_contr
e250: 6f 6c 28 53 51 4c 49 54 45 5f 54 45 53 54 43 54  ol(SQLITE_TESTCT
e260: 52 4c 5f 4f 50 54 49 4d 49 5a 41 54 49 4f 4e 53  RL_OPTIMIZATIONS
e270: 2c 2e 2e 2e 29 20 69 6e 74 65 72 66 61 63 65 20  ,...) interface 
e280: 74 6f 0a 2a 2a 20 73 65 6c 65 63 74 69 76 65 6c  to.** selectivel
e290: 79 20 64 69 73 61 62 6c 65 20 76 61 72 69 6f 75  y disable variou
e2a0: 73 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73 2e  s optimizations.
e2b0: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  .*/.#define SQLI
e2c0: 54 45 5f 51 75 65 72 79 46 6c 61 74 74 65 6e 65  TE_QueryFlattene
e2d0: 72 20 30 78 30 30 30 31 20 20 20 2f 2a 20 51 75  r 0x0001   /* Qu
e2e0: 65 72 79 20 66 6c 61 74 74 65 6e 69 6e 67 20 2a  ery flattening *
e2f0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
e300: 5f 43 6f 6c 75 6d 6e 43 61 63 68 65 20 20 20 20  _ColumnCache    
e310: 30 78 30 30 30 32 20 20 20 2f 2a 20 43 6f 6c 75  0x0002   /* Colu
e320: 6d 6e 20 63 61 63 68 65 20 2a 2f 0a 23 64 65 66  mn cache */.#def
e330: 69 6e 65 20 53 51 4c 49 54 45 5f 47 72 6f 75 70  ine SQLITE_Group
e340: 42 79 4f 72 64 65 72 20 20 20 30 78 30 30 30 34  ByOrder   0x0004
e350: 20 20 20 2f 2a 20 47 52 4f 55 50 42 59 20 63 6f     /* GROUPBY co
e360: 76 65 72 20 6f 66 20 4f 52 44 45 52 42 59 20 2a  ver of ORDERBY *
e370: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
e380: 5f 46 61 63 74 6f 72 4f 75 74 43 6f 6e 73 74 20  _FactorOutConst 
e390: 30 78 30 30 30 38 20 20 20 2f 2a 20 43 6f 6e 73  0x0008   /* Cons
e3a0: 74 61 6e 74 20 66 61 63 74 6f 72 69 6e 67 20 2a  tant factoring *
e3b0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
e3c0: 5f 44 69 73 74 69 6e 63 74 4f 70 74 20 20 20 20  _DistinctOpt    
e3d0: 30 78 30 30 31 30 20 20 20 2f 2a 20 44 49 53 54  0x0010   /* DIST
e3e0: 49 4e 43 54 20 75 73 69 6e 67 20 69 6e 64 65 78  INCT using index
e3f0: 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  es */.#define SQ
e400: 4c 49 54 45 5f 43 6f 76 65 72 49 64 78 53 63 61  LITE_CoverIdxSca
e410: 6e 20 20 20 30 78 30 30 32 30 20 20 20 2f 2a 20  n   0x0020   /* 
e420: 43 6f 76 65 72 69 6e 67 20 69 6e 64 65 78 20 73  Covering index s
e430: 63 61 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  cans */.#define 
e440: 53 51 4c 49 54 45 5f 4f 72 64 65 72 42 79 49 64  SQLITE_OrderById
e450: 78 4a 6f 69 6e 20 30 78 30 30 34 30 20 20 20 2f  xJoin 0x0040   /
e460: 2a 20 4f 52 44 45 52 20 42 59 20 6f 66 20 6a 6f  * ORDER BY of jo
e470: 69 6e 73 20 76 69 61 20 69 6e 64 65 78 20 2a 2f  ins via index */
e480: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
e490: 54 72 61 6e 73 69 74 69 76 65 20 20 20 20 20 30  Transitive     0
e4a0: 78 30 30 38 30 20 20 20 2f 2a 20 54 72 61 6e 73  x0080   /* Trans
e4b0: 69 74 69 76 65 20 63 6f 6e 73 74 72 61 69 6e 74  itive constraint
e4c0: 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  s */.#define SQL
e4d0: 49 54 45 5f 4f 6d 69 74 4e 6f 6f 70 4a 6f 69 6e  ITE_OmitNoopJoin
e4e0: 20 20 20 30 78 30 31 30 30 20 20 20 2f 2a 20 4f     0x0100   /* O
e4f0: 6d 69 74 20 75 6e 75 73 65 64 20 74 61 62 6c 65  mit unused table
e500: 73 20 69 6e 20 6a 6f 69 6e 73 20 2a 2f 0a 23 64  s in joins */.#d
e510: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 6f 75  efine SQLITE_Cou
e520: 6e 74 4f 66 56 69 65 77 20 20 20 20 30 78 30 32  ntOfView    0x02
e530: 30 30 20 20 20 2f 2a 20 54 68 65 20 63 6f 75 6e  00   /* The coun
e540: 74 2d 6f 66 2d 76 69 65 77 20 6f 70 74 69 6d 69  t-of-view optimi
e550: 7a 61 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e  zation */.#defin
e560: 65 20 53 51 4c 49 54 45 5f 43 75 72 73 6f 72 48  e SQLITE_CursorH
e570: 69 6e 74 73 20 20 20 20 30 78 30 34 30 30 20 20  ints    0x0400  
e580: 20 2f 2a 20 41 64 64 20 4f 50 5f 43 75 72 73 6f   /* Add OP_Curso
e590: 72 48 69 6e 74 20 6f 70 63 6f 64 65 73 20 2a 2f  rHint opcodes */
e5a0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
e5b0: 53 74 61 74 33 34 20 20 20 20 20 20 20 20 20 30  Stat34         0
e5c0: 78 30 38 30 30 20 20 20 2f 2a 20 55 73 65 20 53  x0800   /* Use S
e5d0: 54 41 54 33 20 6f 72 20 53 54 41 54 34 20 64 61  TAT3 or STAT4 da
e5e0: 74 61 20 2a 2f 0a 20 20 20 2f 2a 20 54 48 33 20  ta */.   /* TH3 
e5f0: 65 78 70 65 63 74 73 20 74 68 65 20 53 74 61 74  expects the Stat
e600: 33 34 20 20 5e 5e 5e 5e 5e 5e 20 76 61 6c 75 65  34  ^^^^^^ value
e610: 20 74 6f 20 62 65 20 30 78 30 38 30 30 2e 20 20   to be 0x0800.  
e620: 44 6f 6e 27 74 20 63 68 61 6e 67 65 20 69 74 20  Don't change it 
e630: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
e640: 45 5f 50 75 73 68 44 6f 77 6e 20 20 20 20 20 20  E_PushDown      
e650: 20 30 78 31 30 30 30 20 20 20 2f 2a 20 54 68 65   0x1000   /* The
e660: 20 70 75 73 68 2d 64 6f 77 6e 20 6f 70 74 69 6d   push-down optim
e670: 69 7a 61 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69  ization */.#defi
e680: 6e 65 20 53 51 4c 49 54 45 5f 53 69 6d 70 6c 69  ne SQLITE_Simpli
e690: 66 79 4a 6f 69 6e 20 20 20 30 78 32 30 30 30 20  fyJoin   0x2000 
e6a0: 20 20 2f 2a 20 43 6f 6e 76 65 72 74 20 4c 45 46    /* Convert LEF
e6b0: 54 20 4a 4f 49 4e 20 74 6f 20 4a 4f 49 4e 20 2a  T JOIN to JOIN *
e6c0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
e6d0: 5f 41 6c 6c 4f 70 74 73 20 20 20 20 20 20 20 20  _AllOpts        
e6e0: 30 78 66 66 66 66 20 20 20 2f 2a 20 41 6c 6c 20  0xffff   /* All 
e6f0: 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73 20 2a 2f  optimizations */
e700: 0a 0a 2f 2a 0a 2a 2a 20 4d 61 63 72 6f 73 20 66  ../*.** Macros f
e710: 6f 72 20 74 65 73 74 69 6e 67 20 77 68 65 74 68  or testing wheth
e720: 65 72 20 6f 72 20 6e 6f 74 20 6f 70 74 69 6d 69  er or not optimi
e730: 7a 61 74 69 6f 6e 73 20 61 72 65 20 65 6e 61 62  zations are enab
e740: 6c 65 64 20 6f 72 20 64 69 73 61 62 6c 65 64 2e  led or disabled.
e750: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 70 74 69  .*/.#define Opti
e760: 6d 69 7a 61 74 69 6f 6e 44 69 73 61 62 6c 65 64  mizationDisabled
e770: 28 64 62 2c 20 6d 61 73 6b 29 20 20 28 28 28 64  (db, mask)  (((d
e780: 62 29 2d 3e 64 62 4f 70 74 46 6c 61 67 73 26 28  b)->dbOptFlags&(
e790: 6d 61 73 6b 29 29 21 3d 30 29 0a 23 64 65 66 69  mask))!=0).#defi
e7a0: 6e 65 20 4f 70 74 69 6d 69 7a 61 74 69 6f 6e 45  ne OptimizationE
e7b0: 6e 61 62 6c 65 64 28 64 62 2c 20 6d 61 73 6b 29  nabled(db, mask)
e7c0: 20 20 20 28 28 28 64 62 29 2d 3e 64 62 4f 70 74     (((db)->dbOpt
e7d0: 46 6c 61 67 73 26 28 6d 61 73 6b 29 29 3d 3d 30  Flags&(mask))==0
e7e0: 29 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20  )../*.** Return 
e7f0: 74 72 75 65 20 69 66 20 69 74 20 4f 4b 20 74 6f  true if it OK to
e800: 20 66 61 63 74 6f 72 20 63 6f 6e 73 74 61 6e 74   factor constant
e810: 20 65 78 70 72 65 73 73 69 6f 6e 73 20 69 6e 74   expressions int
e820: 6f 20 74 68 65 20 69 6e 69 74 69 61 6c 69 7a 61  o the initializa
e830: 74 69 6f 6e 0a 2a 2a 20 63 6f 64 65 2e 20 54 68  tion.** code. Th
e840: 65 20 61 72 67 75 6d 65 6e 74 20 69 73 20 61 20  e argument is a 
e850: 50 61 72 73 65 20 6f 62 6a 65 63 74 20 66 6f 72  Parse object for
e860: 20 74 68 65 20 63 6f 64 65 20 67 65 6e 65 72 61   the code genera
e870: 74 6f 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  tor..*/.#define 
e880: 43 6f 6e 73 74 46 61 63 74 6f 72 4f 6b 28 50 29  ConstFactorOk(P)
e890: 20 28 28 50 29 2d 3e 6f 6b 43 6f 6e 73 74 46 61   ((P)->okConstFa
e8a0: 63 74 6f 72 29 0a 0a 2f 2a 0a 2a 2a 20 50 6f 73  ctor)../*.** Pos
e8b0: 73 69 62 6c 65 20 76 61 6c 75 65 73 20 66 6f 72  sible values for
e8c0: 20 74 68 65 20 73 71 6c 69 74 65 2e 6d 61 67 69   the sqlite.magi
e8d0: 63 20 66 69 65 6c 64 2e 0a 2a 2a 20 54 68 65 20  c field..** The 
e8e0: 6e 75 6d 62 65 72 73 20 61 72 65 20 6f 62 74 61  numbers are obta
e8f0: 69 6e 65 64 20 61 74 20 72 61 6e 64 6f 6d 20 61  ined at random a
e900: 6e 64 20 68 61 76 65 20 6e 6f 20 73 70 65 63 69  nd have no speci
e910: 61 6c 20 6d 65 61 6e 69 6e 67 2c 20 6f 74 68 65  al meaning, othe
e920: 72 0a 2a 2a 20 74 68 61 6e 20 62 65 69 6e 67 20  r.** than being 
e930: 64 69 73 74 69 6e 63 74 20 66 72 6f 6d 20 6f 6e  distinct from on
e940: 65 20 61 6e 6f 74 68 65 72 2e 0a 2a 2f 0a 23 64  e another..*/.#d
e950: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47  efine SQLITE_MAG
e960: 49 43 5f 4f 50 45 4e 20 20 20 20 20 30 78 61 30  IC_OPEN     0xa0
e970: 32 39 61 36 39 37 20 20 2f 2a 20 44 61 74 61 62  29a697  /* Datab
e980: 61 73 65 20 69 73 20 6f 70 65 6e 20 2a 2f 0a 23  ase is open */.#
e990: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41  define SQLITE_MA
e9a0: 47 49 43 5f 43 4c 4f 53 45 44 20 20 20 30 78 39  GIC_CLOSED   0x9
e9b0: 66 33 63 32 64 33 33 20 20 2f 2a 20 44 61 74 61  f3c2d33  /* Data
e9c0: 62 61 73 65 20 69 73 20 63 6c 6f 73 65 64 20 2a  base is closed *
e9d0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
e9e0: 5f 4d 41 47 49 43 5f 53 49 43 4b 20 20 20 20 20  _MAGIC_SICK     
e9f0: 30 78 34 62 37 37 31 32 39 30 20 20 2f 2a 20 45  0x4b771290  /* E
ea00: 72 72 6f 72 20 61 6e 64 20 61 77 61 69 74 69 6e  rror and awaitin
ea10: 67 20 63 6c 6f 73 65 20 2a 2f 0a 23 64 65 66 69  g close */.#defi
ea20: 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f  ne SQLITE_MAGIC_
ea30: 42 55 53 59 20 20 20 20 20 30 78 66 30 33 62 37  BUSY     0xf03b7
ea40: 39 30 36 20 20 2f 2a 20 44 61 74 61 62 61 73 65  906  /* Database
ea50: 20 63 75 72 72 65 6e 74 6c 79 20 69 6e 20 75 73   currently in us
ea60: 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  e */.#define SQL
ea70: 49 54 45 5f 4d 41 47 49 43 5f 45 52 52 4f 52 20  ITE_MAGIC_ERROR 
ea80: 20 20 20 30 78 62 35 33 35 37 39 33 30 20 20 2f     0xb5357930  /
ea90: 2a 20 41 6e 20 53 51 4c 49 54 45 5f 4d 49 53 55  * An SQLITE_MISU
eaa0: 53 45 20 65 72 72 6f 72 20 6f 63 63 75 72 72 65  SE error occurre
eab0: 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  d */.#define SQL
eac0: 49 54 45 5f 4d 41 47 49 43 5f 5a 4f 4d 42 49 45  ITE_MAGIC_ZOMBIE
ead0: 20 20 20 30 78 36 34 63 66 66 63 37 66 20 20 2f     0x64cffc7f  /
eae0: 2a 20 43 6c 6f 73 65 20 77 69 74 68 20 6c 61 73  * Close with las
eaf0: 74 20 73 74 61 74 65 6d 65 6e 74 20 63 6c 6f 73  t statement clos
eb00: 65 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68  e */../*.** Each
eb10: 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 20 69 73   SQL function is
eb20: 20 64 65 66 69 6e 65 64 20 62 79 20 61 6e 20 69   defined by an i
eb30: 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66  nstance of the f
eb40: 6f 6c 6c 6f 77 69 6e 67 0a 2a 2a 20 73 74 72 75  ollowing.** stru
eb50: 63 74 75 72 65 2e 20 20 46 6f 72 20 67 6c 6f 62  cture.  For glob
eb60: 61 6c 20 62 75 69 6c 74 2d 69 6e 20 66 75 6e 63  al built-in func
eb70: 74 69 6f 6e 73 20 28 65 78 3a 20 73 75 62 73 74  tions (ex: subst
eb80: 72 28 29 2c 20 6d 61 78 28 29 2c 20 63 6f 75 6e  r(), max(), coun
eb90: 74 28 29 29 0a 2a 2a 20 61 20 70 6f 69 6e 74 65  t()).** a pointe
eba0: 72 20 74 6f 20 74 68 69 73 20 73 74 72 75 63 74  r to this struct
ebb0: 75 72 65 20 69 73 20 68 65 6c 64 20 69 6e 20 74  ure is held in t
ebc0: 68 65 20 73 71 6c 69 74 65 33 42 75 69 6c 74 69  he sqlite3Builti
ebd0: 6e 46 75 6e 63 74 69 6f 6e 73 20 6f 62 6a 65 63  nFunctions objec
ebe0: 74 2e 0a 2a 2a 20 46 6f 72 20 70 65 72 2d 63 6f  t..** For per-co
ebf0: 6e 6e 65 63 74 69 6f 6e 20 61 70 70 6c 69 63 61  nnection applica
ec00: 74 69 6f 6e 2d 64 65 66 69 6e 65 64 20 66 75 6e  tion-defined fun
ec10: 63 74 69 6f 6e 73 2c 20 61 20 70 6f 69 6e 74 65  ctions, a pointe
ec20: 72 20 74 6f 20 74 68 69 73 0a 2a 2a 20 73 74 72  r to this.** str
ec30: 75 63 74 75 72 65 20 69 73 20 68 65 6c 64 20 69  ucture is held i
ec40: 6e 20 74 68 65 20 64 62 2d 3e 61 48 61 73 68 20  n the db->aHash 
ec50: 68 61 73 68 20 74 61 62 6c 65 2e 0a 2a 2a 0a 2a  hash table..**.*
ec60: 2a 20 54 68 65 20 75 2e 70 48 61 73 68 20 66 69  * The u.pHash fi
ec70: 65 6c 64 20 69 73 20 75 73 65 64 20 62 79 20 74  eld is used by t
ec80: 68 65 20 67 6c 6f 62 61 6c 20 62 75 69 6c 74 2d  he global built-
ec90: 69 6e 73 2e 20 20 54 68 65 20 75 2e 70 44 65 73  ins.  The u.pDes
eca0: 74 72 75 63 74 6f 72 0a 2a 2a 20 66 69 65 6c 64  tructor.** field
ecb0: 20 69 73 20 75 73 65 64 20 62 79 20 70 65 72 2d   is used by per-
ecc0: 63 6f 6e 6e 65 63 74 69 6f 6e 20 61 70 70 2d 64  connection app-d
ecd0: 65 66 20 66 75 6e 63 74 69 6f 6e 73 2e 0a 2a 2f  ef functions..*/
ece0: 0a 73 74 72 75 63 74 20 46 75 6e 63 44 65 66 20  .struct FuncDef 
ecf0: 7b 0a 20 20 69 38 20 6e 41 72 67 3b 20 20 20 20  {.  i8 nArg;    
ed00: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
ed10: 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 2e  er of arguments.
ed20: 20 20 2d 31 20 6d 65 61 6e 73 20 75 6e 6c 69 6d    -1 means unlim
ed30: 69 74 65 64 20 2a 2f 0a 20 20 75 31 36 20 66 75  ited */.  u16 fu
ed40: 6e 63 46 6c 61 67 73 3b 20 20 20 20 20 20 20 2f  ncFlags;       /
ed50: 2a 20 53 6f 6d 65 20 63 6f 6d 62 69 6e 61 74 69  * Some combinati
ed60: 6f 6e 20 6f 66 20 53 51 4c 49 54 45 5f 46 55 4e  on of SQLITE_FUN
ed70: 43 5f 2a 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70  C_* */.  void *p
ed80: 55 73 65 72 44 61 74 61 3b 20 20 20 20 20 2f 2a  UserData;     /*
ed90: 20 55 73 65 72 20 64 61 74 61 20 70 61 72 61 6d   User data param
eda0: 65 74 65 72 20 2a 2f 0a 20 20 46 75 6e 63 44 65  eter */.  FuncDe
edb0: 66 20 2a 70 4e 65 78 74 3b 20 20 20 20 20 20 2f  f *pNext;      /
edc0: 2a 20 4e 65 78 74 20 66 75 6e 63 74 69 6f 6e 20  * Next function 
edd0: 77 69 74 68 20 73 61 6d 65 20 6e 61 6d 65 20 2a  with same name *
ede0: 2f 0a 20 20 76 6f 69 64 20 28 2a 78 53 46 75 6e  /.  void (*xSFun
edf0: 63 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65  c)(sqlite3_conte
ee00: 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33 5f  xt*,int,sqlite3_
ee10: 76 61 6c 75 65 2a 2a 29 3b 20 2f 2a 20 66 75 6e  value**); /* fun
ee20: 63 20 6f 72 20 61 67 67 2d 73 74 65 70 20 2a 2f  c or agg-step */
ee30: 0a 20 20 76 6f 69 64 20 28 2a 78 46 69 6e 61 6c  .  void (*xFinal
ee40: 69 7a 65 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e  ize)(sqlite3_con
ee50: 74 65 78 74 2a 29 3b 20 20 20 20 20 20 20 20 20  text*);         
ee60: 20 20 20 20 20 20 20 20 20 2f 2a 20 41 67 67 20           /* Agg 
ee70: 66 69 6e 61 6c 69 7a 65 72 20 2a 2f 0a 20 20 63  finalizer */.  c
ee80: 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4e 61 6d 65  onst char *zName
ee90: 3b 20 20 20 2f 2a 20 53 51 4c 20 6e 61 6d 65 20  ;   /* SQL name 
eea0: 6f 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 2e  of the function.
eeb0: 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b 0a 20 20   */.  union {.  
eec0: 20 20 46 75 6e 63 44 65 66 20 2a 70 48 61 73 68    FuncDef *pHash
eed0: 3b 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 77  ;      /* Next w
eee0: 69 74 68 20 61 20 64 69 66 66 65 72 65 6e 74 20  ith a different 
eef0: 6e 61 6d 65 20 62 75 74 20 74 68 65 20 73 61 6d  name but the sam
ef00: 65 20 68 61 73 68 20 2a 2f 0a 20 20 20 20 46 75  e hash */.    Fu
ef10: 6e 63 44 65 73 74 72 75 63 74 6f 72 20 2a 70 44  ncDestructor *pD
ef20: 65 73 74 72 75 63 74 6f 72 3b 20 20 20 2f 2a 20  estructor;   /* 
ef30: 52 65 66 65 72 65 6e 63 65 20 63 6f 75 6e 74 65  Reference counte
ef40: 64 20 64 65 73 74 72 75 63 74 6f 72 20 66 75 6e  d destructor fun
ef50: 63 74 69 6f 6e 20 2a 2f 0a 20 20 7d 20 75 3b 0a  ction */.  } u;.
ef60: 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 73  };../*.** This s
ef70: 74 72 75 63 74 75 72 65 20 65 6e 63 61 70 73 75  tructure encapsu
ef80: 6c 61 74 65 73 20 61 20 75 73 65 72 2d 66 75 6e  lates a user-fun
ef90: 63 74 69 6f 6e 20 64 65 73 74 72 75 63 74 6f 72  ction destructor
efa0: 20 63 61 6c 6c 62 61 63 6b 20 28 61 73 0a 2a 2a   callback (as.**
efb0: 20 63 6f 6e 66 69 67 75 72 65 64 20 75 73 69 6e   configured usin
efc0: 67 20 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f  g create_functio
efd0: 6e 5f 76 32 28 29 29 20 61 6e 64 20 61 20 72 65  n_v2()) and a re
efe0: 66 65 72 65 6e 63 65 20 63 6f 75 6e 74 65 72 2e  ference counter.
eff0: 20 57 68 65 6e 0a 2a 2a 20 63 72 65 61 74 65 5f   When.** create_
f000: 66 75 6e 63 74 69 6f 6e 5f 76 32 28 29 20 69 73  function_v2() is
f010: 20 63 61 6c 6c 65 64 20 74 6f 20 63 72 65 61 74   called to creat
f020: 65 20 61 20 66 75 6e 63 74 69 6f 6e 20 77 69 74  e a function wit
f030: 68 20 61 20 64 65 73 74 72 75 63 74 6f 72 2c 0a  h a destructor,.
f040: 2a 2a 20 61 20 73 69 6e 67 6c 65 20 6f 62 6a 65  ** a single obje
f050: 63 74 20 6f 66 20 74 68 69 73 20 74 79 70 65 20  ct of this type 
f060: 69 73 20 61 6c 6c 6f 63 61 74 65 64 2e 20 46 75  is allocated. Fu
f070: 6e 63 44 65 73 74 72 75 63 74 6f 72 2e 6e 52 65  ncDestructor.nRe
f080: 66 20 69 73 20 73 65 74 20 74 6f 0a 2a 2a 20 74  f is set to.** t
f090: 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 46 75 6e  he number of Fun
f0a0: 63 44 65 66 20 6f 62 6a 65 63 74 73 20 63 72 65  cDef objects cre
f0b0: 61 74 65 64 20 28 65 69 74 68 65 72 20 31 20 6f  ated (either 1 o
f0c0: 72 20 33 2c 20 64 65 70 65 6e 64 69 6e 67 20 6f  r 3, depending o
f0d0: 6e 20 77 68 65 74 68 65 72 0a 2a 2a 20 6f 72 20  n whether.** or 
f0e0: 6e 6f 74 20 74 68 65 20 73 70 65 63 69 66 69 65  not the specifie
f0f0: 64 20 65 6e 63 6f 64 69 6e 67 20 69 73 20 53 51  d encoding is SQ
f100: 4c 49 54 45 5f 41 4e 59 29 2e 20 54 68 65 20 46  LITE_ANY). The F
f110: 75 6e 63 44 65 66 2e 70 44 65 73 74 72 75 63 74  uncDef.pDestruct
f120: 6f 72 0a 2a 2a 20 6d 65 6d 62 65 72 20 6f 66 20  or.** member of 
f130: 65 61 63 68 20 6f 66 20 74 68 65 20 6e 65 77 20  each of the new 
f140: 46 75 6e 63 44 65 66 20 6f 62 6a 65 63 74 73 20  FuncDef objects 
f150: 69 73 20 73 65 74 20 74 6f 20 70 6f 69 6e 74 20  is set to point 
f160: 74 6f 20 74 68 65 20 61 6c 6c 6f 63 61 74 65 64  to the allocated
f170: 0a 2a 2a 20 46 75 6e 63 44 65 73 74 72 75 63 74  .** FuncDestruct
f180: 6f 72 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 72 65 61  or..**.** Therea
f190: 66 74 65 72 2c 20 77 68 65 6e 20 6f 6e 65 20 6f  fter, when one o
f1a0: 66 20 74 68 65 20 46 75 6e 63 44 65 66 20 6f 62  f the FuncDef ob
f1b0: 6a 65 63 74 73 20 69 73 20 64 65 6c 65 74 65 64  jects is deleted
f1c0: 2c 20 74 68 65 20 72 65 66 65 72 65 6e 63 65 0a  , the reference.
f1d0: 2a 2a 20 63 6f 75 6e 74 20 6f 6e 20 74 68 69 73  ** count on this
f1e0: 20 6f 62 6a 65 63 74 20 69 73 20 64 65 63 72 65   object is decre
f1f0: 6d 65 6e 74 65 64 2e 20 57 68 65 6e 20 69 74 20  mented. When it 
f200: 72 65 61 63 68 65 73 20 30 2c 20 74 68 65 20 64  reaches 0, the d
f210: 65 73 74 72 75 63 74 6f 72 0a 2a 2a 20 69 73 20  estructor.** is 
f220: 69 6e 76 6f 6b 65 64 20 61 6e 64 20 74 68 65 20  invoked and the 
f230: 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72 20 73  FuncDestructor s
f240: 74 72 75 63 74 75 72 65 20 66 72 65 65 64 2e 0a  tructure freed..
f250: 2a 2f 0a 73 74 72 75 63 74 20 46 75 6e 63 44 65  */.struct FuncDe
f260: 73 74 72 75 63 74 6f 72 20 7b 0a 20 20 69 6e 74  structor {.  int
f270: 20 6e 52 65 66 3b 0a 20 20 76 6f 69 64 20 28 2a   nRef;.  void (*
f280: 78 44 65 73 74 72 6f 79 29 28 76 6f 69 64 20 2a  xDestroy)(void *
f290: 29 3b 0a 20 20 76 6f 69 64 20 2a 70 55 73 65 72  );.  void *pUser
f2a0: 44 61 74 61 3b 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  Data;.};../*.** 
f2b0: 50 6f 73 73 69 62 6c 65 20 76 61 6c 75 65 73 20  Possible values 
f2c0: 66 6f 72 20 46 75 6e 63 44 65 66 2e 66 6c 61 67  for FuncDef.flag
f2d0: 73 2e 20 20 4e 6f 74 65 20 74 68 61 74 20 74 68  s.  Note that th
f2e0: 65 20 5f 4c 45 4e 47 54 48 20 61 6e 64 20 5f 54  e _LENGTH and _T
f2f0: 59 50 45 4f 46 0a 2a 2a 20 76 61 6c 75 65 73 20  YPEOF.** values 
f300: 6d 75 73 74 20 63 6f 72 72 65 73 70 6f 6e 64 20  must correspond 
f310: 74 6f 20 4f 50 46 4c 41 47 5f 4c 45 4e 47 54 48  to OPFLAG_LENGTH
f320: 41 52 47 20 61 6e 64 20 4f 50 46 4c 41 47 5f 54  ARG and OPFLAG_T
f330: 59 50 45 4f 46 41 52 47 2e 20 20 41 6e 64 0a 2a  YPEOFARG.  And.*
f340: 2a 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f  * SQLITE_FUNC_CO
f350: 4e 53 54 41 4e 54 20 6d 75 73 74 20 62 65 20 74  NSTANT must be t
f360: 68 65 20 73 61 6d 65 20 61 73 20 53 51 4c 49 54  he same as SQLIT
f370: 45 5f 44 45 54 45 52 4d 49 4e 49 53 54 49 43 2e  E_DETERMINISTIC.
f380: 20 20 54 68 65 72 65 0a 2a 2a 20 61 72 65 20 61    There.** are a
f390: 73 73 65 72 74 28 29 20 73 74 61 74 65 6d 65 6e  ssert() statemen
f3a0: 74 73 20 69 6e 20 74 68 65 20 63 6f 64 65 20 74  ts in the code t
f3b0: 6f 20 76 65 72 69 66 79 20 74 68 69 73 2e 0a 2a  o verify this..*
f3c0: 2a 0a 2a 2a 20 56 61 6c 75 65 20 63 6f 6e 73 74  *.** Value const
f3d0: 72 61 69 6e 74 73 20 28 65 6e 66 6f 72 63 65 64  raints (enforced
f3e0: 20 76 69 61 20 61 73 73 65 72 74 28 29 29 3a 0a   via assert()):.
f3f0: 2a 2a 20 20 20 20 20 53 51 4c 49 54 45 5f 46 55  **     SQLITE_FU
f400: 4e 43 5f 4d 49 4e 4d 41 58 20 20 20 20 3d 3d 20  NC_MINMAX    == 
f410: 20 4e 43 5f 4d 69 6e 4d 61 78 41 67 67 20 20 20   NC_MinMaxAgg   
f420: 20 20 20 3d 3d 20 53 46 5f 4d 69 6e 4d 61 78 41     == SF_MinMaxA
f430: 67 67 0a 2a 2a 20 20 20 20 20 53 51 4c 49 54 45  gg.**     SQLITE
f440: 5f 46 55 4e 43 5f 4c 45 4e 47 54 48 20 20 20 20  _FUNC_LENGTH    
f450: 3d 3d 20 20 4f 50 46 4c 41 47 5f 4c 45 4e 47 54  ==  OPFLAG_LENGT
f460: 48 41 52 47 0a 2a 2a 20 20 20 20 20 53 51 4c 49  HARG.**     SQLI
f470: 54 45 5f 46 55 4e 43 5f 54 59 50 45 4f 46 20 20  TE_FUNC_TYPEOF  
f480: 20 20 3d 3d 20 20 4f 50 46 4c 41 47 5f 54 59 50    ==  OPFLAG_TYP
f490: 45 4f 46 41 52 47 0a 2a 2a 20 20 20 20 20 53 51  EOFARG.**     SQ
f4a0: 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41  LITE_FUNC_CONSTA
f4b0: 4e 54 20 20 3d 3d 20 20 53 51 4c 49 54 45 5f 44  NT  ==  SQLITE_D
f4c0: 45 54 45 52 4d 49 4e 49 53 54 49 43 20 66 72 6f  ETERMINISTIC fro
f4d0: 6d 20 74 68 65 20 41 50 49 0a 2a 2a 20 20 20 20  m the API.**    
f4e0: 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 45 4e 43   SQLITE_FUNC_ENC
f4f0: 4d 41 53 4b 20 20 20 64 65 70 65 6e 64 73 20 6f  MASK   depends o
f500: 6e 20 53 51 4c 49 54 45 5f 55 54 46 2a 20 6d 61  n SQLITE_UTF* ma
f510: 63 72 6f 73 20 69 6e 20 74 68 65 20 41 50 49 0a  cros in the API.
f520: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
f530: 45 5f 46 55 4e 43 5f 45 4e 43 4d 41 53 4b 20 20  E_FUNC_ENCMASK  
f540: 30 78 30 30 30 33 20 2f 2a 20 53 51 4c 49 54 45  0x0003 /* SQLITE
f550: 5f 55 54 46 38 2c 20 53 51 4c 49 54 45 5f 55 54  _UTF8, SQLITE_UT
f560: 46 31 36 42 45 20 6f 72 20 55 54 46 31 36 4c 45  F16BE or UTF16LE
f570: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
f580: 54 45 5f 46 55 4e 43 5f 4c 49 4b 45 20 20 20 20  TE_FUNC_LIKE    
f590: 20 30 78 30 30 30 34 20 2f 2a 20 43 61 6e 64 69   0x0004 /* Candi
f5a0: 64 61 74 65 20 66 6f 72 20 74 68 65 20 4c 49 4b  date for the LIK
f5b0: 45 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 20 2a  E optimization *
f5c0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
f5d0: 5f 46 55 4e 43 5f 43 41 53 45 20 20 20 20 20 30  _FUNC_CASE     0
f5e0: 78 30 30 30 38 20 2f 2a 20 43 61 73 65 2d 73 65  x0008 /* Case-se
f5f0: 6e 73 69 74 69 76 65 20 4c 49 4b 45 2d 74 79 70  nsitive LIKE-typ
f600: 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64  e function */.#d
f610: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e  efine SQLITE_FUN
f620: 43 5f 45 50 48 45 4d 20 20 20 20 30 78 30 30 31  C_EPHEM    0x001
f630: 30 20 2f 2a 20 45 70 68 65 6d 65 72 61 6c 2e 20  0 /* Ephemeral. 
f640: 20 44 65 6c 65 74 65 20 77 69 74 68 20 56 44 42   Delete with VDB
f650: 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  E */.#define SQL
f660: 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c  ITE_FUNC_NEEDCOL
f670: 4c 20 30 78 30 30 32 30 20 2f 2a 20 73 71 6c 69  L 0x0020 /* sqli
f680: 74 65 33 47 65 74 46 75 6e 63 43 6f 6c 6c 53 65  te3GetFuncCollSe
f690: 71 28 29 20 6d 69 67 68 74 20 62 65 20 63 61 6c  q() might be cal
f6a0: 6c 65 64 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  led*/.#define SQ
f6b0: 4c 49 54 45 5f 46 55 4e 43 5f 4c 45 4e 47 54 48  LITE_FUNC_LENGTH
f6c0: 20 20 20 30 78 30 30 34 30 20 2f 2a 20 42 75 69     0x0040 /* Bui
f6d0: 6c 74 2d 69 6e 20 6c 65 6e 67 74 68 28 29 20 66  lt-in length() f
f6e0: 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69  unction */.#defi
f6f0: 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 54  ne SQLITE_FUNC_T
f700: 59 50 45 4f 46 20 20 20 30 78 30 30 38 30 20 2f  YPEOF   0x0080 /
f710: 2a 20 42 75 69 6c 74 2d 69 6e 20 74 79 70 65 6f  * Built-in typeo
f720: 66 28 29 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a  f() function */.
f730: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46  #define SQLITE_F
f740: 55 4e 43 5f 43 4f 55 4e 54 20 20 20 20 30 78 30  UNC_COUNT    0x0
f750: 31 30 30 20 2f 2a 20 42 75 69 6c 74 2d 69 6e 20  100 /* Built-in 
f760: 63 6f 75 6e 74 28 2a 29 20 61 67 67 72 65 67 61  count(*) aggrega
f770: 74 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  te */.#define SQ
f780: 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 41 4c 45 53  LITE_FUNC_COALES
f790: 43 45 20 30 78 30 32 30 30 20 2f 2a 20 42 75 69  CE 0x0200 /* Bui
f7a0: 6c 74 2d 69 6e 20 63 6f 61 6c 65 73 63 65 28 29  lt-in coalesce()
f7b0: 20 6f 72 20 69 66 6e 75 6c 6c 28 29 20 2a 2f 0a   or ifnull() */.
f7c0: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46  #define SQLITE_F
f7d0: 55 4e 43 5f 55 4e 4c 49 4b 45 4c 59 20 30 78 30  UNC_UNLIKELY 0x0
f7e0: 34 30 30 20 2f 2a 20 42 75 69 6c 74 2d 69 6e 20  400 /* Built-in 
f7f0: 75 6e 6c 69 6b 65 6c 79 28 29 20 66 75 6e 63 74  unlikely() funct
f800: 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ion */.#define S
f810: 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54  QLITE_FUNC_CONST
f820: 41 4e 54 20 30 78 30 38 30 30 20 2f 2a 20 43 6f  ANT 0x0800 /* Co
f830: 6e 73 74 61 6e 74 20 69 6e 70 75 74 73 20 67 69  nstant inputs gi
f840: 76 65 20 61 20 63 6f 6e 73 74 61 6e 74 20 6f 75  ve a constant ou
f850: 74 70 75 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20  tput */.#define 
f860: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4d 49 4e 4d  SQLITE_FUNC_MINM
f870: 41 58 20 20 20 30 78 31 30 30 30 20 2f 2a 20 54  AX   0x1000 /* T
f880: 72 75 65 20 66 6f 72 20 6d 69 6e 28 29 20 61 6e  rue for min() an
f890: 64 20 6d 61 78 28 29 20 61 67 67 72 65 67 61 74  d max() aggregat
f8a0: 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  es */.#define SQ
f8b0: 4c 49 54 45 5f 46 55 4e 43 5f 53 4c 4f 43 48 4e  LITE_FUNC_SLOCHN
f8c0: 47 20 20 30 78 32 30 30 30 20 2f 2a 20 22 53 6c  G  0x2000 /* "Sl
f8d0: 6f 77 20 43 68 61 6e 67 65 22 2e 20 56 61 6c 75  ow Change". Valu
f8e0: 65 20 63 6f 6e 73 74 61 6e 74 20 64 75 72 69 6e  e constant durin
f8f0: 67 20 61 0a 20 20 20 20 20 20 20 20 20 20 20 20  g a.            
f900: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f910: 20 20 20 20 20 20 20 20 2a 2a 20 73 69 6e 67 6c          ** singl
f920: 65 20 71 75 65 72 79 20 2d 20 6d 69 67 68 74 20  e query - might 
f930: 63 68 61 6e 67 65 20 6f 76 65 72 20 74 69 6d 65  change over time
f940: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
f950: 54 45 5f 46 55 4e 43 5f 41 46 46 49 4e 49 54 59  TE_FUNC_AFFINITY
f960: 20 30 78 34 30 30 30 20 2f 2a 20 42 75 69 6c 74   0x4000 /* Built
f970: 2d 69 6e 20 61 66 66 69 6e 69 74 79 28 29 20 66  -in affinity() f
f980: 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69  unction */.#defi
f990: 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4f  ne SQLITE_FUNC_O
f9a0: 46 46 53 45 54 20 20 20 30 78 38 30 30 30 20 2f  FFSET   0x8000 /
f9b0: 2a 20 42 75 69 6c 74 2d 69 6e 20 73 71 6c 69 74  * Built-in sqlit
f9c0: 65 5f 6f 66 66 73 65 74 28 29 20 66 75 6e 63 74  e_offset() funct
f9d0: 69 6f 6e 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68  ion */../*.** Th
f9e0: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 68 72 65  e following thre
f9f0: 65 20 6d 61 63 72 6f 73 2c 20 46 55 4e 43 54 49  e macros, FUNCTI
fa00: 4f 4e 28 29 2c 20 4c 49 4b 45 46 55 4e 43 28 29  ON(), LIKEFUNC()
fa10: 20 61 6e 64 20 41 47 47 52 45 47 41 54 45 28 29   and AGGREGATE()
fa20: 20 61 72 65 0a 2a 2a 20 75 73 65 64 20 74 6f 20   are.** used to 
fa30: 63 72 65 61 74 65 20 74 68 65 20 69 6e 69 74 69  create the initi
fa40: 61 6c 69 7a 65 72 73 20 66 6f 72 20 74 68 65 20  alizers for the 
fa50: 46 75 6e 63 44 65 66 20 73 74 72 75 63 74 75 72  FuncDef structur
fa60: 65 73 2e 0a 2a 2a 0a 2a 2a 20 20 20 46 55 4e 43  es..**.**   FUNC
fa70: 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72 67  TION(zName, nArg
fa80: 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78 46 75  , iArg, bNC, xFu
fa90: 6e 63 29 0a 2a 2a 20 20 20 20 20 55 73 65 64 20  nc).**     Used 
faa0: 74 6f 20 63 72 65 61 74 65 20 61 20 73 63 61 6c  to create a scal
fab0: 61 72 20 66 75 6e 63 74 69 6f 6e 20 64 65 66 69  ar function defi
fac0: 6e 69 74 69 6f 6e 20 6f 66 20 61 20 66 75 6e 63  nition of a func
fad0: 74 69 6f 6e 20 7a 4e 61 6d 65 0a 2a 2a 20 20 20  tion zName.**   
fae0: 20 20 69 6d 70 6c 65 6d 65 6e 74 65 64 20 62 79    implemented by
faf0: 20 43 20 66 75 6e 63 74 69 6f 6e 20 78 46 75 6e   C function xFun
fb00: 63 20 74 68 61 74 20 61 63 63 65 70 74 73 20 6e  c that accepts n
fb10: 41 72 67 20 61 72 67 75 6d 65 6e 74 73 2e 20 54  Arg arguments. T
fb20: 68 65 0a 2a 2a 20 20 20 20 20 76 61 6c 75 65 20  he.**     value 
fb30: 70 61 73 73 65 64 20 61 73 20 69 41 72 67 20 69  passed as iArg i
fb40: 73 20 63 61 73 74 20 74 6f 20 61 20 28 76 6f 69  s cast to a (voi
fb50: 64 2a 29 20 61 6e 64 20 6d 61 64 65 20 61 76 61  d*) and made ava
fb60: 69 6c 61 62 6c 65 0a 2a 2a 20 20 20 20 20 61 73  ilable.**     as
fb70: 20 74 68 65 20 75 73 65 72 2d 64 61 74 61 20 28   the user-data (
fb80: 73 71 6c 69 74 65 33 5f 75 73 65 72 5f 64 61 74  sqlite3_user_dat
fb90: 61 28 29 29 20 66 6f 72 20 74 68 65 20 66 75 6e  a()) for the fun
fba0: 63 74 69 6f 6e 2e 20 49 66 0a 2a 2a 20 20 20 20  ction. If.**    
fbb0: 20 61 72 67 75 6d 65 6e 74 20 62 4e 43 20 69 73   argument bNC is
fbc0: 20 74 72 75 65 2c 20 74 68 65 6e 20 74 68 65 20   true, then the 
fbd0: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44  SQLITE_FUNC_NEED
fbe0: 43 4f 4c 4c 20 66 6c 61 67 20 69 73 20 73 65 74  COLL flag is set
fbf0: 2e 0a 2a 2a 0a 2a 2a 20 20 20 56 46 55 4e 43 54  ..**.**   VFUNCT
fc00: 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c  ION(zName, nArg,
fc10: 20 69 41 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e   iArg, bNC, xFun
fc20: 63 29 0a 2a 2a 20 20 20 20 20 4c 69 6b 65 20 46  c).**     Like F
fc30: 55 4e 43 54 49 4f 4e 20 65 78 63 65 70 74 20 69  UNCTION except i
fc40: 74 20 6f 6d 69 74 73 20 74 68 65 20 53 51 4c 49  t omits the SQLI
fc50: 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54  TE_FUNC_CONSTANT
fc60: 20 66 6c 61 67 2e 0a 2a 2a 0a 2a 2a 20 20 20 44   flag..**.**   D
fc70: 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20  FUNCTION(zName, 
fc80: 6e 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c  nArg, iArg, bNC,
fc90: 20 78 46 75 6e 63 29 0a 2a 2a 20 20 20 20 20 4c   xFunc).**     L
fca0: 69 6b 65 20 46 55 4e 43 54 49 4f 4e 20 65 78 63  ike FUNCTION exc
fcb0: 65 70 74 20 69 74 20 6f 6d 69 74 73 20 74 68 65  ept it omits the
fcc0: 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e   SQLITE_FUNC_CON
fcd0: 53 54 41 4e 54 20 66 6c 61 67 20 61 6e 64 0a 2a  STANT flag and.*
fce0: 2a 20 20 20 20 20 61 64 64 73 20 74 68 65 20 53  *     adds the S
fcf0: 51 4c 49 54 45 5f 46 55 4e 43 5f 53 4c 4f 43 48  QLITE_FUNC_SLOCH
fd00: 4e 47 20 66 6c 61 67 2e 20 20 55 73 65 64 20 66  NG flag.  Used f
fd10: 6f 72 20 64 61 74 65 20 26 20 74 69 6d 65 20 66  or date & time f
fd20: 75 6e 63 74 69 6f 6e 73 0a 2a 2a 20 20 20 20 20  unctions.**     
fd30: 61 6e 64 20 66 75 6e 63 74 69 6f 6e 73 20 6c 69  and functions li
fd40: 6b 65 20 73 71 6c 69 74 65 5f 76 65 72 73 69 6f  ke sqlite_versio
fd50: 6e 28 29 20 74 68 61 74 20 63 61 6e 20 63 68 61  n() that can cha
fd60: 6e 67 65 2c 20 62 75 74 20 6e 6f 74 20 64 75 72  nge, but not dur
fd70: 69 6e 67 0a 2a 2a 20 20 20 20 20 61 20 73 69 6e  ing.**     a sin
fd80: 67 6c 65 20 71 75 65 72 79 2e 20 20 54 68 65 20  gle query.  The 
fd90: 69 41 72 67 20 69 73 20 69 67 6e 6f 72 65 64 2e  iArg is ignored.
fda0: 20 20 54 68 65 20 75 73 65 72 2d 64 61 74 61 20    The user-data 
fdb0: 69 73 20 61 6c 77 61 79 73 20 73 65 74 0a 2a 2a  is always set.**
fdc0: 20 20 20 20 20 74 6f 20 61 20 4e 55 4c 4c 20 70       to a NULL p
fdd0: 6f 69 6e 74 65 72 2e 20 20 54 68 65 20 62 4e 43  ointer.  The bNC
fde0: 20 70 61 72 61 6d 65 74 65 72 20 69 73 20 6e 6f   parameter is no
fdf0: 74 20 75 73 65 64 2e 0a 2a 2a 0a 2a 2a 20 20 20  t used..**.**   
fe00: 50 55 52 45 5f 44 41 54 45 28 7a 4e 61 6d 65 2c  PURE_DATE(zName,
fe10: 20 6e 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43   nArg, iArg, bNC
fe20: 2c 20 78 46 75 6e 63 29 0a 2a 2a 20 20 20 20 20  , xFunc).**     
fe30: 55 73 65 64 20 66 6f 72 20 22 70 75 72 65 22 20  Used for "pure" 
fe40: 64 61 74 65 2f 74 69 6d 65 20 66 75 6e 63 74 69  date/time functi
fe50: 6f 6e 73 2c 20 74 68 69 73 20 6d 61 63 72 6f 20  ons, this macro 
fe60: 69 73 20 6c 69 6b 65 20 44 46 55 4e 43 54 49 4f  is like DFUNCTIO
fe70: 4e 0a 2a 2a 20 20 20 20 20 65 78 63 65 70 74 20  N.**     except 
fe80: 74 68 61 74 20 69 74 20 64 6f 65 73 20 73 65 74  that it does set
fe90: 20 74 68 65 20 53 51 4c 49 54 45 5f 46 55 4e 43   the SQLITE_FUNC
fea0: 5f 43 4f 4e 53 54 41 4e 54 20 66 6c 61 67 73 2e  _CONSTANT flags.
feb0: 20 20 69 41 72 67 20 69 73 0a 2a 2a 20 20 20 20    iArg is.**    
fec0: 20 69 67 6e 6f 72 65 64 20 61 6e 64 20 74 68 65   ignored and the
fed0: 20 75 73 65 72 2d 64 61 74 61 20 66 6f 72 20 74   user-data for t
fee0: 68 65 73 65 20 66 75 6e 63 74 69 6f 6e 73 20 69  hese functions i
fef0: 73 20 73 65 74 20 74 6f 20 61 6e 20 0a 2a 2a 20  s set to an .** 
ff00: 20 20 20 20 61 72 62 69 74 72 61 72 79 20 6e 6f      arbitrary no
ff10: 6e 2d 4e 55 4c 4c 20 70 6f 69 6e 74 65 72 2e 20  n-NULL pointer. 
ff20: 20 54 68 65 20 62 4e 43 20 70 61 72 61 6d 65 74   The bNC paramet
ff30: 65 72 20 69 73 20 6e 6f 74 20 75 73 65 64 2e 0a  er is not used..
ff40: 2a 2a 0a 2a 2a 20 20 20 41 47 47 52 45 47 41 54  **.**   AGGREGAT
ff50: 45 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69  E(zName, nArg, i
ff60: 41 72 67 2c 20 62 4e 43 2c 20 78 53 74 65 70 2c  Arg, bNC, xStep,
ff70: 20 78 46 69 6e 61 6c 29 0a 2a 2a 20 20 20 20 20   xFinal).**     
ff80: 55 73 65 64 20 74 6f 20 63 72 65 61 74 65 20 61  Used to create a
ff90: 6e 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63  n aggregate func
ffa0: 74 69 6f 6e 20 64 65 66 69 6e 69 74 69 6f 6e 20  tion definition 
ffb0: 69 6d 70 6c 65 6d 65 6e 74 65 64 20 62 79 0a 2a  implemented by.*
ffc0: 2a 20 20 20 20 20 74 68 65 20 43 20 66 75 6e 63  *     the C func
ffd0: 74 69 6f 6e 73 20 78 53 74 65 70 20 61 6e 64 20  tions xStep and 
ffe0: 78 46 69 6e 61 6c 2e 20 54 68 65 20 66 69 72 73  xFinal. The firs
fff0: 74 20 66 6f 75 72 20 70 61 72 61 6d 65 74 65 72  t four parameter
10000 73 0a 2a 2a 20 20 20 20 20 61 72 65 20 69 6e 74  s.**     are int
10010 65 72 70 72 65 74 65 64 20 69 6e 20 74 68 65 20  erpreted in the 
10020 73 61 6d 65 20 77 61 79 20 61 73 20 74 68 65 20  same way as the 
10030 66 69 72 73 74 20 34 20 70 61 72 61 6d 65 74 65  first 4 paramete
10040 72 73 20 74 6f 0a 2a 2a 20 20 20 20 20 46 55 4e  rs to.**     FUN
10050 43 54 49 4f 4e 28 29 2e 0a 2a 2a 0a 2a 2a 20 20  CTION()..**.**  
10060 20 4c 49 4b 45 46 55 4e 43 28 7a 4e 61 6d 65 2c   LIKEFUNC(zName,
10070 20 6e 41 72 67 2c 20 70 41 72 67 2c 20 66 6c 61   nArg, pArg, fla
10080 67 73 29 0a 2a 2a 20 20 20 20 20 55 73 65 64 20  gs).**     Used 
10090 74 6f 20 63 72 65 61 74 65 20 61 20 73 63 61 6c  to create a scal
100a0 61 72 20 66 75 6e 63 74 69 6f 6e 20 64 65 66 69  ar function defi
100b0 6e 69 74 69 6f 6e 20 6f 66 20 61 20 66 75 6e 63  nition of a func
100c0 74 69 6f 6e 20 7a 4e 61 6d 65 0a 2a 2a 20 20 20  tion zName.**   
100d0 20 20 74 68 61 74 20 61 63 63 65 70 74 73 20 6e    that accepts n
100e0 41 72 67 20 61 72 67 75 6d 65 6e 74 73 20 61 6e  Arg arguments an
100f0 64 20 69 73 20 69 6d 70 6c 65 6d 65 6e 74 65 64  d is implemented
10100 20 62 79 20 61 20 63 61 6c 6c 20 74 6f 20 43 0a   by a call to C.
10110 2a 2a 20 20 20 20 20 66 75 6e 63 74 69 6f 6e 20  **     function 
10120 6c 69 6b 65 46 75 6e 63 2e 20 41 72 67 75 6d 65  likeFunc. Argume
10130 6e 74 20 70 41 72 67 20 69 73 20 63 61 73 74 20  nt pArg is cast 
10140 74 6f 20 61 20 28 76 6f 69 64 20 2a 29 20 61 6e  to a (void *) an
10150 64 20 6d 61 64 65 0a 2a 2a 20 20 20 20 20 61 76  d made.**     av
10160 61 69 6c 61 62 6c 65 20 61 73 20 74 68 65 20 66  ailable as the f
10170 75 6e 63 74 69 6f 6e 20 75 73 65 72 2d 64 61 74  unction user-dat
10180 61 20 28 73 71 6c 69 74 65 33 5f 75 73 65 72 5f  a (sqlite3_user_
10190 64 61 74 61 28 29 29 2e 20 54 68 65 0a 2a 2a 20  data()). The.** 
101a0 20 20 20 20 46 75 6e 63 44 65 66 2e 66 6c 61 67      FuncDef.flag
101b0 73 20 76 61 72 69 61 62 6c 65 20 69 73 20 73 65  s variable is se
101c0 74 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20 70  t to the value p
101d0 61 73 73 65 64 20 61 73 20 74 68 65 20 66 6c 61  assed as the fla
101e0 67 73 0a 2a 2a 20 20 20 20 20 70 61 72 61 6d 65  gs.**     parame
101f0 74 65 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ter..*/.#define 
10200 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20  FUNCTION(zName, 
10210 6e 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c  nArg, iArg, bNC,
10220 20 78 46 75 6e 63 29 20 5c 0a 20 20 7b 6e 41 72   xFunc) \.  {nAr
10230 67 2c 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43  g, SQLITE_FUNC_C
10240 4f 4e 53 54 41 4e 54 7c 53 51 4c 49 54 45 5f 55  ONSTANT|SQLITE_U
10250 54 46 38 7c 28 62 4e 43 2a 53 51 4c 49 54 45 5f  TF8|(bNC*SQLITE_
10260 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 2c 20  FUNC_NEEDCOLL), 
10270 5c 0a 20 20 20 53 51 4c 49 54 45 5f 49 4e 54 5f  \.   SQLITE_INT_
10280 54 4f 5f 50 54 52 28 69 41 72 67 29 2c 20 30 2c  TO_PTR(iArg), 0,
10290 20 78 46 75 6e 63 2c 20 30 2c 20 23 7a 4e 61 6d   xFunc, 0, #zNam
102a0 65 2c 20 7b 30 7d 20 7d 0a 23 64 65 66 69 6e 65  e, {0} }.#define
102b0 20 56 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65   VFUNCTION(zName
102c0 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c 20 62 4e  , nArg, iArg, bN
102d0 43 2c 20 78 46 75 6e 63 29 20 5c 0a 20 20 7b 6e  C, xFunc) \.  {n
102e0 41 72 67 2c 20 53 51 4c 49 54 45 5f 55 54 46 38  Arg, SQLITE_UTF8
102f0 7c 28 62 4e 43 2a 53 51 4c 49 54 45 5f 46 55 4e  |(bNC*SQLITE_FUN
10300 43 5f 4e 45 45 44 43 4f 4c 4c 29 2c 20 5c 0a 20  C_NEEDCOLL), \. 
10310 20 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f    SQLITE_INT_TO_
10320 50 54 52 28 69 41 72 67 29 2c 20 30 2c 20 78 46  PTR(iArg), 0, xF
10330 75 6e 63 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c 20  unc, 0, #zName, 
10340 7b 30 7d 20 7d 0a 23 64 65 66 69 6e 65 20 44 46  {0} }.#define DF
10350 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e  UNCTION(zName, n
10360 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20  Arg, iArg, bNC, 
10370 78 46 75 6e 63 29 20 5c 0a 20 20 7b 6e 41 72 67  xFunc) \.  {nArg
10380 2c 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 53 4c  , SQLITE_FUNC_SL
10390 4f 43 48 4e 47 7c 53 51 4c 49 54 45 5f 55 54 46  OCHNG|SQLITE_UTF
103a0 38 2c 20 5c 0a 20 20 20 30 2c 20 30 2c 20 78 46  8, \.   0, 0, xF
103b0 75 6e 63 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c 20  unc, 0, #zName, 
103c0 7b 30 7d 20 7d 0a 23 64 65 66 69 6e 65 20 50 55  {0} }.#define PU
103d0 52 45 5f 44 41 54 45 28 7a 4e 61 6d 65 2c 20 6e  RE_DATE(zName, n
103e0 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20  Arg, iArg, bNC, 
103f0 78 46 75 6e 63 29 20 5c 0a 20 20 7b 6e 41 72 67  xFunc) \.  {nArg
10400 2c 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 53 4c  , SQLITE_FUNC_SL
10410 4f 43 48 4e 47 7c 53 51 4c 49 54 45 5f 55 54 46  OCHNG|SQLITE_UTF
10420 38 7c 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f  8|SQLITE_FUNC_CO
10430 4e 53 54 41 4e 54 2c 20 5c 0a 20 20 20 28 76 6f  NSTANT, \.   (vo
10440 69 64 2a 29 26 73 71 6c 69 74 65 33 43 6f 6e 66  id*)&sqlite3Conf
10450 69 67 2c 20 30 2c 20 78 46 75 6e 63 2c 20 30 2c  ig, 0, xFunc, 0,
10460 20 23 7a 4e 61 6d 65 2c 20 7b 30 7d 20 7d 0a 23   #zName, {0} }.#
10470 64 65 66 69 6e 65 20 46 55 4e 43 54 49 4f 4e 32  define FUNCTION2
10480 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41  (zName, nArg, iA
10490 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63 2c 20  rg, bNC, xFunc, 
104a0 65 78 74 72 61 46 6c 61 67 73 29 20 5c 0a 20 20  extraFlags) \.  
104b0 7b 6e 41 72 67 2c 53 51 4c 49 54 45 5f 46 55 4e  {nArg,SQLITE_FUN
104c0 43 5f 43 4f 4e 53 54 41 4e 54 7c 53 51 4c 49 54  C_CONSTANT|SQLIT
104d0 45 5f 55 54 46 38 7c 28 62 4e 43 2a 53 51 4c 49  E_UTF8|(bNC*SQLI
104e0 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c  TE_FUNC_NEEDCOLL
104f0 29 7c 65 78 74 72 61 46 6c 61 67 73 2c 5c 0a 20  )|extraFlags,\. 
10500 20 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f    SQLITE_INT_TO_
10510 50 54 52 28 69 41 72 67 29 2c 20 30 2c 20 78 46  PTR(iArg), 0, xF
10520 75 6e 63 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c 20  unc, 0, #zName, 
10530 7b 30 7d 20 7d 0a 23 64 65 66 69 6e 65 20 53 54  {0} }.#define ST
10540 52 5f 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65  R_FUNCTION(zName
10550 2c 20 6e 41 72 67 2c 20 70 41 72 67 2c 20 62 4e  , nArg, pArg, bN
10560 43 2c 20 78 46 75 6e 63 29 20 5c 0a 20 20 7b 6e  C, xFunc) \.  {n
10570 41 72 67 2c 20 53 51 4c 49 54 45 5f 46 55 4e 43  Arg, SQLITE_FUNC
10580 5f 53 4c 4f 43 48 4e 47 7c 53 51 4c 49 54 45 5f  _SLOCHNG|SQLITE_
10590 55 54 46 38 7c 28 62 4e 43 2a 53 51 4c 49 54 45  UTF8|(bNC*SQLITE
105a0 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 2c  _FUNC_NEEDCOLL),
105b0 20 5c 0a 20 20 20 70 41 72 67 2c 20 30 2c 20 78   \.   pArg, 0, x
105c0 46 75 6e 63 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c  Func, 0, #zName,
105d0 20 7d 0a 23 64 65 66 69 6e 65 20 4c 49 4b 45 46   }.#define LIKEF
105e0 55 4e 43 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c  UNC(zName, nArg,
105f0 20 61 72 67 2c 20 66 6c 61 67 73 29 20 5c 0a 20   arg, flags) \. 
10600 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f 46   {nArg, SQLITE_F
10610 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 7c 53 51 4c  UNC_CONSTANT|SQL
10620 49 54 45 5f 55 54 46 38 7c 66 6c 61 67 73 2c 20  ITE_UTF8|flags, 
10630 5c 0a 20 20 20 28 76 6f 69 64 20 2a 29 61 72 67  \.   (void *)arg
10640 2c 20 30 2c 20 6c 69 6b 65 46 75 6e 63 2c 20 30  , 0, likeFunc, 0
10650 2c 20 23 7a 4e 61 6d 65 2c 20 7b 30 7d 20 7d 0a  , #zName, {0} }.
10660 23 64 65 66 69 6e 65 20 41 47 47 52 45 47 41 54  #define AGGREGAT
10670 45 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 61  E(zName, nArg, a
10680 72 67 2c 20 6e 63 2c 20 78 53 74 65 70 2c 20 78  rg, nc, xStep, x
10690 46 69 6e 61 6c 29 20 5c 0a 20 20 7b 6e 41 72 67  Final) \.  {nArg
106a0 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 7c 28 6e  , SQLITE_UTF8|(n
106b0 63 2a 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45  c*SQLITE_FUNC_NE
106c0 45 44 43 4f 4c 4c 29 2c 20 5c 0a 20 20 20 53 51  EDCOLL), \.   SQ
106d0 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28  LITE_INT_TO_PTR(
106e0 61 72 67 29 2c 20 30 2c 20 78 53 74 65 70 2c 78  arg), 0, xStep,x
106f0 46 69 6e 61 6c 2c 23 7a 4e 61 6d 65 2c 20 7b 30  Final,#zName, {0
10700 7d 7d 0a 23 64 65 66 69 6e 65 20 41 47 47 52 45  }}.#define AGGRE
10710 47 41 54 45 32 28 7a 4e 61 6d 65 2c 20 6e 41 72  GATE2(zName, nAr
10720 67 2c 20 61 72 67 2c 20 6e 63 2c 20 78 53 74 65  g, arg, nc, xSte
10730 70 2c 20 78 46 69 6e 61 6c 2c 20 65 78 74 72 61  p, xFinal, extra
10740 46 6c 61 67 73 29 20 5c 0a 20 20 7b 6e 41 72 67  Flags) \.  {nArg
10750 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 7c 28 6e  , SQLITE_UTF8|(n
10760 63 2a 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45  c*SQLITE_FUNC_NE
10770 45 44 43 4f 4c 4c 29 7c 65 78 74 72 61 46 6c 61  EDCOLL)|extraFla
10780 67 73 2c 20 5c 0a 20 20 20 53 51 4c 49 54 45 5f  gs, \.   SQLITE_
10790 49 4e 54 5f 54 4f 5f 50 54 52 28 61 72 67 29 2c  INT_TO_PTR(arg),
107a0 20 30 2c 20 78 53 74 65 70 2c 78 46 69 6e 61 6c   0, xStep,xFinal
107b0 2c 23 7a 4e 61 6d 65 2c 20 7b 30 7d 7d 0a 0a 2f  ,#zName, {0}}../
107c0 2a 0a 2a 2a 20 41 6c 6c 20 63 75 72 72 65 6e 74  *.** All current
107d0 20 73 61 76 65 70 6f 69 6e 74 73 20 61 72 65 20   savepoints are 
107e0 73 74 6f 72 65 64 20 69 6e 20 61 20 6c 69 6e 6b  stored in a link
107f0 65 64 20 6c 69 73 74 20 73 74 61 72 74 69 6e 67  ed list starting
10800 20 61 74 0a 2a 2a 20 73 71 6c 69 74 65 33 2e 70   at.** sqlite3.p
10810 53 61 76 65 70 6f 69 6e 74 2e 20 54 68 65 20 66  Savepoint. The f
10820 69 72 73 74 20 65 6c 65 6d 65 6e 74 20 69 6e 20  irst element in 
10830 74 68 65 20 6c 69 73 74 20 69 73 20 74 68 65 20  the list is the 
10840 6d 6f 73 74 20 72 65 63 65 6e 74 6c 79 0a 2a 2a  most recently.**
10850 20 6f 70 65 6e 65 64 20 73 61 76 65 70 6f 69 6e   opened savepoin
10860 74 2e 20 53 61 76 65 70 6f 69 6e 74 73 20 61 72  t. Savepoints ar
10870 65 20 61 64 64 65 64 20 74 6f 20 74 68 65 20 6c  e added to the l
10880 69 73 74 20 62 79 20 74 68 65 20 76 64 62 65 0a  ist by the vdbe.
10890 2a 2a 20 4f 50 5f 53 61 76 65 70 6f 69 6e 74 20  ** OP_Savepoint 
108a0 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a  instruction..*/.
108b0 73 74 72 75 63 74 20 53 61 76 65 70 6f 69 6e 74  struct Savepoint
108c0 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65   {.  char *zName
108d0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
108e0 20 20 20 20 20 20 20 20 20 2f 2a 20 53 61 76 65           /* Save
108f0 70 6f 69 6e 74 20 6e 61 6d 65 20 28 6e 75 6c 2d  point name (nul-
10900 74 65 72 6d 69 6e 61 74 65 64 29 20 2a 2f 0a 20  terminated) */. 
10910 20 69 36 34 20 6e 44 65 66 65 72 72 65 64 43 6f   i64 nDeferredCo
10920 6e 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ns;             
10930 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
10940 66 20 64 65 66 65 72 72 65 64 20 66 6b 20 76 69  f deferred fk vi
10950 6f 6c 61 74 69 6f 6e 73 20 2a 2f 0a 20 20 69 36  olations */.  i6
10960 34 20 6e 44 65 66 65 72 72 65 64 49 6d 6d 43 6f  4 nDeferredImmCo
10970 6e 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ns;             
10980 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 64    /* Number of d
10990 65 66 65 72 72 65 64 20 69 6d 6d 20 66 6b 2e 20  eferred imm fk. 
109a0 2a 2f 0a 20 20 53 61 76 65 70 6f 69 6e 74 20 2a  */.  Savepoint *
109b0 70 4e 65 78 74 3b 20 20 20 20 20 20 20 20 20 20  pNext;          
109c0 20 20 20 20 20 20 20 20 20 2f 2a 20 50 61 72 65           /* Pare
109d0 6e 74 20 73 61 76 65 70 6f 69 6e 74 20 28 69 66  nt savepoint (if
109e0 20 61 6e 79 29 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a   any) */.};../*.
109f0 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  ** The following
10a00 20 61 72 65 20 75 73 65 64 20 61 73 20 74 68 65   are used as the
10a10 20 73 65 63 6f 6e 64 20 70 61 72 61 6d 65 74 65   second paramete
10a20 72 20 74 6f 20 73 71 6c 69 74 65 33 53 61 76 65  r to sqlite3Save
10a30 70 6f 69 6e 74 28 29 2c 0a 2a 2a 20 61 6e 64 20  point(),.** and 
10a40 61 73 20 74 68 65 20 50 31 20 61 72 67 75 6d 65  as the P1 argume
10a50 6e 74 20 74 6f 20 74 68 65 20 4f 50 5f 53 61 76  nt to the OP_Sav
10a60 65 70 6f 69 6e 74 20 69 6e 73 74 72 75 63 74 69  epoint instructi
10a70 6f 6e 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53  on..*/.#define S
10a80 41 56 45 50 4f 49 4e 54 5f 42 45 47 49 4e 20 20  AVEPOINT_BEGIN  
10a90 20 20 20 20 30 0a 23 64 65 66 69 6e 65 20 53 41      0.#define SA
10aa0 56 45 50 4f 49 4e 54 5f 52 45 4c 45 41 53 45 20  VEPOINT_RELEASE 
10ab0 20 20 20 31 0a 23 64 65 66 69 6e 65 20 53 41 56     1.#define SAV
10ac0 45 50 4f 49 4e 54 5f 52 4f 4c 4c 42 41 43 4b 20  EPOINT_ROLLBACK 
10ad0 20 20 32 0a 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68    2.../*.** Each
10ae0 20 53 51 4c 69 74 65 20 6d 6f 64 75 6c 65 20 28   SQLite module (
10af0 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 64 65  virtual table de
10b00 66 69 6e 69 74 69 6f 6e 29 20 69 73 20 64 65 66  finition) is def
10b10 69 6e 65 64 20 62 79 20 61 6e 0a 2a 2a 20 69 6e  ined by an.** in
10b20 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f  stance of the fo
10b30 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72  llowing structur
10b40 65 2c 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65  e, stored in the
10b50 20 73 71 6c 69 74 65 33 2e 61 4d 6f 64 75 6c 65   sqlite3.aModule
10b60 0a 2a 2a 20 68 61 73 68 20 74 61 62 6c 65 2e 0a  .** hash table..
10b70 2a 2f 0a 73 74 72 75 63 74 20 4d 6f 64 75 6c 65  */.struct Module
10b80 20 7b 0a 20 20 63 6f 6e 73 74 20 73 71 6c 69 74   {.  const sqlit
10b90 65 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64 75  e3_module *pModu
10ba0 6c 65 3b 20 20 20 20 20 20 20 2f 2a 20 43 61 6c  le;       /* Cal
10bb0 6c 62 61 63 6b 20 70 6f 69 6e 74 65 72 73 20 2a  lback pointers *
10bc0 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  /.  const char *
10bd0 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20  zName;          
10be0 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65           /* Name
10bf0 20 70 61 73 73 65 64 20 74 6f 20 63 72 65 61 74   passed to creat
10c00 65 5f 6d 6f 64 75 6c 65 28 29 20 2a 2f 0a 20 20  e_module() */.  
10c10 76 6f 69 64 20 2a 70 41 75 78 3b 20 20 20 20 20  void *pAux;     
10c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10c30 20 20 20 20 20 2f 2a 20 70 41 75 78 20 70 61 73       /* pAux pas
10c40 73 65 64 20 74 6f 20 63 72 65 61 74 65 5f 6d 6f  sed to create_mo
10c50 64 75 6c 65 28 29 20 2a 2f 0a 20 20 76 6f 69 64  dule() */.  void
10c60 20 28 2a 78 44 65 73 74 72 6f 79 29 28 76 6f 69   (*xDestroy)(voi
10c70 64 20 2a 29 3b 20 20 20 20 20 20 20 20 20 20 20  d *);           
10c80 20 2f 2a 20 4d 6f 64 75 6c 65 20 64 65 73 74 72   /* Module destr
10c90 75 63 74 6f 72 20 66 75 6e 63 74 69 6f 6e 20 2a  uctor function *
10ca0 2f 0a 20 20 54 61 62 6c 65 20 2a 70 45 70 6f 54  /.  Table *pEpoT
10cb0 61 62 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ab;             
10cc0 20 20 20 20 20 20 20 20 20 2f 2a 20 45 70 6f 6e           /* Epon
10cd0 79 6d 6f 75 73 20 74 61 62 6c 65 20 66 6f 72 20  ymous table for 
10ce0 74 68 69 73 20 6d 6f 64 75 6c 65 20 2a 2f 0a 7d  this module */.}
10cf0 3b 0a 0a 2f 2a 0a 2a 2a 20 69 6e 66 6f 72 6d 61  ;../*.** informa
10d00 74 69 6f 6e 20 61 62 6f 75 74 20 65 61 63 68 20  tion about each 
10d10 63 6f 6c 75 6d 6e 20 6f 66 20 61 6e 20 53 51 4c  column of an SQL
10d20 20 74 61 62 6c 65 20 69 73 20 68 65 6c 64 20 69   table is held i
10d30 6e 20 61 6e 20 69 6e 73 74 61 6e 63 65 0a 2a 2a  n an instance.**
10d40 20 6f 66 20 74 68 69 73 20 73 74 72 75 63 74 75   of this structu
10d50 72 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 43 6f  re..*/.struct Co
10d60 6c 75 6d 6e 20 7b 0a 20 20 63 68 61 72 20 2a 7a  lumn {.  char *z
10d70 4e 61 6d 65 3b 20 20 20 20 20 2f 2a 20 4e 61 6d  Name;     /* Nam
10d80 65 20 6f 66 20 74 68 69 73 20 63 6f 6c 75 6d 6e  e of this column
10d90 2c 20 5c 30 30 30 2c 20 74 68 65 6e 20 74 68 65  , \000, then the
10da0 20 74 79 70 65 20 2a 2f 0a 20 20 45 78 70 72 20   type */.  Expr 
10db0 2a 70 44 66 6c 74 3b 20 20 20 20 20 2f 2a 20 44  *pDflt;     /* D
10dc0 65 66 61 75 6c 74 20 76 61 6c 75 65 20 6f 66 20  efault value of 
10dd0 74 68 69 73 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20  this column */. 
10de0 20 63 68 61 72 20 2a 7a 43 6f 6c 6c 3b 20 20 20   char *zColl;   
10df0 20 20 2f 2a 20 43 6f 6c 6c 61 74 69 6e 67 20 73    /* Collating s
10e00 65 71 75 65 6e 63 65 2e 20 20 49 66 20 4e 55 4c  equence.  If NUL
10e10 4c 2c 20 75 73 65 20 74 68 65 20 64 65 66 61 75  L, use the defau
10e20 6c 74 20 2a 2f 0a 20 20 75 38 20 6e 6f 74 4e 75  lt */.  u8 notNu
10e30 6c 6c 3b 20 20 20 20 20 20 2f 2a 20 41 6e 20 4f  ll;      /* An O
10e40 45 5f 20 63 6f 64 65 20 66 6f 72 20 68 61 6e 64  E_ code for hand
10e50 6c 69 6e 67 20 61 20 4e 4f 54 20 4e 55 4c 4c 20  ling a NOT NULL 
10e60 63 6f 6e 73 74 72 61 69 6e 74 20 2a 2f 0a 20 20  constraint */.  
10e70 63 68 61 72 20 61 66 66 69 6e 69 74 79 3b 20 20  char affinity;  
10e80 20 2f 2a 20 4f 6e 65 20 6f 66 20 74 68 65 20 53   /* One of the S
10e90 51 4c 49 54 45 5f 41 46 46 5f 2e 2e 2e 20 76 61  QLITE_AFF_... va
10ea0 6c 75 65 73 20 2a 2f 0a 20 20 75 38 20 73 7a 45  lues */.  u8 szE
10eb0 73 74 3b 20 20 20 20 20 20 20 20 2f 2a 20 45 73  st;        /* Es
10ec0 74 69 6d 61 74 65 64 20 73 69 7a 65 20 6f 66 20  timated size of 
10ed0 76 61 6c 75 65 20 69 6e 20 74 68 69 73 20 63 6f  value in this co
10ee0 6c 75 6d 6e 2e 20 73 69 7a 65 6f 66 28 49 4e 54  lumn. sizeof(INT
10ef0 29 3d 3d 31 20 2a 2f 0a 20 20 75 38 20 63 6f 6c  )==1 */.  u8 col
10f00 46 6c 61 67 73 3b 20 20 20 20 20 2f 2a 20 42 6f  Flags;     /* Bo
10f10 6f 6c 65 61 6e 20 70 72 6f 70 65 72 74 69 65 73  olean properties
10f20 2e 20 20 53 65 65 20 43 4f 4c 46 4c 41 47 5f 20  .  See COLFLAG_ 
10f30 64 65 66 69 6e 65 73 20 62 65 6c 6f 77 20 2a 2f  defines below */
10f40 0a 7d 3b 0a 0a 2f 2a 20 41 6c 6c 6f 77 65 64 20  .};../* Allowed 
10f50 76 61 6c 75 65 73 20 66 6f 72 20 43 6f 6c 75 6d  values for Colum
10f60 6e 2e 63 6f 6c 46 6c 61 67 73 3a 0a 2a 2f 0a 23  n.colFlags:.*/.#
10f70 64 65 66 69 6e 65 20 43 4f 4c 46 4c 41 47 5f 50  define COLFLAG_P
10f80 52 49 4d 4b 45 59 20 20 30 78 30 30 30 31 20 20  RIMKEY  0x0001  
10f90 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20 69 73 20 70    /* Column is p
10fa0 61 72 74 20 6f 66 20 74 68 65 20 70 72 69 6d 61  art of the prima
10fb0 72 79 20 6b 65 79 20 2a 2f 0a 23 64 65 66 69 6e  ry key */.#defin
10fc0 65 20 43 4f 4c 46 4c 41 47 5f 48 49 44 44 45 4e  e COLFLAG_HIDDEN
10fd0 20 20 20 30 78 30 30 30 32 20 20 20 20 2f 2a 20     0x0002    /* 
10fe0 41 20 68 69 64 64 65 6e 20 63 6f 6c 75 6d 6e 20  A hidden column 
10ff0 69 6e 20 61 20 76 69 72 74 75 61 6c 20 74 61 62  in a virtual tab
11000 6c 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 43 4f  le */.#define CO
11010 4c 46 4c 41 47 5f 48 41 53 54 59 50 45 20 20 30  LFLAG_HASTYPE  0
11020 78 30 30 30 34 20 20 20 20 2f 2a 20 54 79 70 65  x0004    /* Type
11030 20 6e 61 6d 65 20 66 6f 6c 6c 6f 77 73 20 63 6f   name follows co
11040 6c 75 6d 6e 20 6e 61 6d 65 20 2a 2f 0a 23 64 65  lumn name */.#de
11050 66 69 6e 65 20 43 4f 4c 46 4c 41 47 5f 55 4e 49  fine COLFLAG_UNI
11060 51 55 45 20 20 20 30 78 30 30 30 38 20 20 20 20  QUE   0x0008    
11070 2f 2a 20 43 6f 6c 75 6d 6e 20 64 65 66 20 63 6f  /* Column def co
11080 6e 74 61 69 6e 73 20 22 55 4e 49 51 55 45 22 20  ntains "UNIQUE" 
11090 6f 72 20 22 50 4b 22 20 2a 2f 0a 23 64 65 66 69  or "PK" */.#defi
110a0 6e 65 20 43 4f 4c 46 4c 41 47 5f 53 4f 52 54 45  ne COLFLAG_SORTE
110b0 52 52 45 46 20 30 78 30 30 31 30 20 20 20 2f 2a  RREF 0x0010   /*
110c0 20 55 73 65 20 73 6f 72 74 65 72 2d 72 65 66 73   Use sorter-refs
110d0 20 77 69 74 68 20 74 68 69 73 20 63 6f 6c 75 6d   with this colum
110e0 6e 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 20 22 43  n */../*.** A "C
110f0 6f 6c 6c 61 74 69 6e 67 20 53 65 71 75 65 6e 63  ollating Sequenc
11100 65 22 20 69 73 20 64 65 66 69 6e 65 64 20 62 79  e" is defined by
11110 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20   an instance of 
11120 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 0a 2a 2a  the following.**
11130 20 73 74 72 75 63 74 75 72 65 2e 20 43 6f 6e 63   structure. Conc
11140 65 70 74 75 61 6c 6c 79 2c 20 61 20 63 6f 6c 6c  eptually, a coll
11150 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 20 63  ating sequence c
11160 6f 6e 73 69 73 74 73 20 6f 66 20 61 20 6e 61 6d  onsists of a nam
11170 65 20 61 6e 64 0a 2a 2a 20 61 20 63 6f 6d 70 61  e and.** a compa
11180 72 69 73 6f 6e 20 72 6f 75 74 69 6e 65 20 74 68  rison routine th
11190 61 74 20 64 65 66 69 6e 65 73 20 74 68 65 20 6f  at defines the o
111a0 72 64 65 72 20 6f 66 20 74 68 61 74 20 73 65 71  rder of that seq
111b0 75 65 6e 63 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  uence..**.** If 
111c0 43 6f 6c 6c 53 65 71 2e 78 43 6d 70 20 69 73 20  CollSeq.xCmp is 
111d0 4e 55 4c 4c 2c 20 69 74 20 6d 65 61 6e 73 20 74  NULL, it means t
111e0 68 61 74 20 74 68 65 0a 2a 2a 20 63 6f 6c 6c 61  hat the.** colla
111f0 74 69 6e 67 20 73 65 71 75 65 6e 63 65 20 69 73  ting sequence is
11200 20 75 6e 64 65 66 69 6e 65 64 2e 20 20 49 6e 64   undefined.  Ind
11210 69 63 65 73 20 62 75 69 6c 74 20 6f 6e 20 61 6e  ices built on an
11220 20 75 6e 64 65 66 69 6e 65 64 0a 2a 2a 20 63 6f   undefined.** co
11230 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65  llating sequence
11240 20 6d 61 79 20 6e 6f 74 20 62 65 20 72 65 61 64   may not be read
11250 20 6f 72 20 77 72 69 74 74 65 6e 2e 0a 2a 2f 0a   or written..*/.
11260 73 74 72 75 63 74 20 43 6f 6c 6c 53 65 71 20 7b  struct CollSeq {
11270 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20  .  char *zName; 
11280 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65           /* Name
11290 20 6f 66 20 74 68 65 20 63 6f 6c 6c 61 74 69 6e   of the collatin
112a0 67 20 73 65 71 75 65 6e 63 65 2c 20 55 54 46 2d  g sequence, UTF-
112b0 38 20 65 6e 63 6f 64 65 64 20 2a 2f 0a 20 20 75  8 encoded */.  u
112c0 38 20 65 6e 63 3b 20 20 20 20 20 20 20 20 20 20  8 enc;          
112d0 20 20 20 20 20 2f 2a 20 54 65 78 74 20 65 6e 63       /* Text enc
112e0 6f 64 69 6e 67 20 68 61 6e 64 6c 65 64 20 62 79  oding handled by
112f0 20 78 43 6d 70 28 29 20 2a 2f 0a 20 20 76 6f 69   xCmp() */.  voi
11300 64 20 2a 70 55 73 65 72 3b 20 20 20 20 20 20 20  d *pUser;       
11310 20 20 20 2f 2a 20 46 69 72 73 74 20 61 72 67 75     /* First argu
11320 6d 65 6e 74 20 74 6f 20 78 43 6d 70 28 29 20 2a  ment to xCmp() *
11330 2f 0a 20 20 69 6e 74 20 28 2a 78 43 6d 70 29 28  /.  int (*xCmp)(
11340 76 6f 69 64 2a 2c 69 6e 74 2c 20 63 6f 6e 73 74  void*,int, const
11350 20 76 6f 69 64 2a 2c 20 69 6e 74 2c 20 63 6f 6e   void*, int, con
11360 73 74 20 76 6f 69 64 2a 29 3b 0a 20 20 76 6f 69  st void*);.  voi
11370 64 20 28 2a 78 44 65 6c 29 28 76 6f 69 64 2a 29  d (*xDel)(void*)
11380 3b 20 20 2f 2a 20 44 65 73 74 72 75 63 74 6f 72  ;  /* Destructor
11390 20 66 6f 72 20 70 55 73 65 72 20 2a 2f 0a 7d 3b   for pUser */.};
113a0 0a 0a 2f 2a 0a 2a 2a 20 41 20 73 6f 72 74 20 6f  ../*.** A sort o
113b0 72 64 65 72 20 63 61 6e 20 62 65 20 65 69 74 68  rder can be eith
113c0 65 72 20 41 53 43 20 6f 72 20 44 45 53 43 2e 0a  er ASC or DESC..
113d0 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
113e0 45 5f 53 4f 5f 41 53 43 20 20 20 20 20 20 20 30  E_SO_ASC       0
113f0 20 20 2f 2a 20 53 6f 72 74 20 69 6e 20 61 73 63    /* Sort in asc
11400 65 6e 64 69 6e 67 20 6f 72 64 65 72 20 2a 2f 0a  ending order */.
11410 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53  #define SQLITE_S
11420 4f 5f 44 45 53 43 20 20 20 20 20 20 31 20 20 2f  O_DESC      1  /
11430 2a 20 53 6f 72 74 20 69 6e 20 61 73 63 65 6e 64  * Sort in ascend
11440 69 6e 67 20 6f 72 64 65 72 20 2a 2f 0a 23 64 65  ing order */.#de
11450 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 4f 5f 55  fine SQLITE_SO_U
11460 4e 44 45 46 49 4e 45 44 20 2d 31 20 2f 2a 20 4e  NDEFINED -1 /* N
11470 6f 20 73 6f 72 74 20 6f 72 64 65 72 20 73 70 65  o sort order spe
11480 63 69 66 69 65 64 20 2a 2f 0a 0a 2f 2a 0a 2a 2a  cified */../*.**
11490 20 43 6f 6c 75 6d 6e 20 61 66 66 69 6e 69 74 79   Column affinity
114a0 20 74 79 70 65 73 2e 0a 2a 2a 0a 2a 2a 20 54 68   types..**.** Th
114b0 65 73 65 20 75 73 65 64 20 74 6f 20 68 61 76 65  ese used to have
114c0 20 6d 6e 65 6d 6f 6e 69 63 20 6e 61 6d 65 20 6c   mnemonic name l
114d0 69 6b 65 20 27 69 27 20 66 6f 72 20 53 51 4c 49  ike 'i' for SQLI
114e0 54 45 5f 41 46 46 5f 49 4e 54 45 47 45 52 20 61  TE_AFF_INTEGER a
114f0 6e 64 0a 2a 2a 20 27 74 27 20 66 6f 72 20 53 51  nd.** 't' for SQ
11500 4c 49 54 45 5f 41 46 46 5f 54 45 58 54 2e 20 20  LITE_AFF_TEXT.  
11510 42 75 74 20 77 65 20 63 61 6e 20 73 61 76 65 20  But we can save 
11520 61 20 6c 69 74 74 6c 65 20 73 70 61 63 65 20 61  a little space a
11530 6e 64 20 69 6d 70 72 6f 76 65 0a 2a 2a 20 74 68  nd improve.** th
11540 65 20 73 70 65 65 64 20 61 20 6c 69 74 74 6c 65  e speed a little
11550 20 62 79 20 6e 75 6d 62 65 72 69 6e 67 20 74 68   by numbering th
11560 65 20 76 61 6c 75 65 73 20 63 6f 6e 73 65 63 75  e values consecu
11570 74 69 76 65 6c 79 2e 0a 2a 2a 0a 2a 2a 20 42 75  tively..**.** Bu
11580 74 20 72 61 74 68 65 72 20 74 68 61 6e 20 73 74  t rather than st
11590 61 72 74 20 77 69 74 68 20 30 20 6f 72 20 31 2c  art with 0 or 1,
115a0 20 77 65 20 62 65 67 69 6e 20 77 69 74 68 20 27   we begin with '
115b0 41 27 2e 20 20 54 68 61 74 20 77 61 79 2c 0a 2a  A'.  That way,.*
115c0 2a 20 77 68 65 6e 20 6d 75 6c 74 69 70 6c 65 20  * when multiple 
115d0 61 66 66 69 6e 69 74 79 20 74 79 70 65 73 20 61  affinity types a
115e0 72 65 20 63 6f 6e 63 61 74 65 6e 61 74 65 64 20  re concatenated 
115f0 69 6e 74 6f 20 61 20 73 74 72 69 6e 67 20 61 6e  into a string an
11600 64 0a 2a 2a 20 75 73 65 64 20 61 73 20 74 68 65  d.** used as the
11610 20 50 34 20 6f 70 65 72 61 6e 64 2c 20 74 68 65   P4 operand, the
11620 79 20 77 69 6c 6c 20 62 65 20 6d 6f 72 65 20 72  y will be more r
11630 65 61 64 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 4e  eadable..**.** N
11640 6f 74 65 20 61 6c 73 6f 20 74 68 61 74 20 74 68  ote also that th
11650 65 20 6e 75 6d 65 72 69 63 20 74 79 70 65 73 20  e numeric types 
11660 61 72 65 20 67 72 6f 75 70 65 64 20 74 6f 67 65  are grouped toge
11670 74 68 65 72 20 73 6f 20 74 68 61 74 20 74 65 73  ther so that tes
11680 74 69 6e 67 0a 2a 2a 20 66 6f 72 20 61 20 6e 75  ting.** for a nu
11690 6d 65 72 69 63 20 74 79 70 65 20 69 73 20 61 20  meric type is a 
116a0 73 69 6e 67 6c 65 20 63 6f 6d 70 61 72 69 73 6f  single compariso
116b0 6e 2e 20 20 41 6e 64 20 74 68 65 20 42 4c 4f 42  n.  And the BLOB
116c0 20 74 79 70 65 20 69 73 20 66 69 72 73 74 2e 0a   type is first..
116d0 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
116e0 45 5f 41 46 46 5f 42 4c 4f 42 20 20 20 20 20 27  E_AFF_BLOB     '
116f0 41 27 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  A'.#define SQLIT
11700 45 5f 41 46 46 5f 54 45 58 54 20 20 20 20 20 27  E_AFF_TEXT     '
11710 42 27 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  B'.#define SQLIT
11720 45 5f 41 46 46 5f 4e 55 4d 45 52 49 43 20 20 27  E_AFF_NUMERIC  '
11730 43 27 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  C'.#define SQLIT
11740 45 5f 41 46 46 5f 49 4e 54 45 47 45 52 20 20 27  E_AFF_INTEGER  '
11750 44 27 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  D'.#define SQLIT
11760 45 5f 41 46 46 5f 52 45 41 4c 20 20 20 20 20 27  E_AFF_REAL     '
11770 45 27 0a 0a 23 64 65 66 69 6e 65 20 73 71 6c 69  E'..#define sqli
11780 74 65 33 49 73 4e 75 6d 65 72 69 63 41 66 66 69  te3IsNumericAffi
11790 6e 69 74 79 28 58 29 20 20 28 28 58 29 3e 3d 53  nity(X)  ((X)>=S
117a0 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49  QLITE_AFF_NUMERI
117b0 43 29 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 53 51  C)../*.** The SQ
117c0 4c 49 54 45 5f 41 46 46 5f 4d 41 53 4b 20 76 61  LITE_AFF_MASK va
117d0 6c 75 65 73 20 6d 61 73 6b 73 20 6f 66 66 20 74  lues masks off t
117e0 68 65 20 73 69 67 6e 69 66 69 63 61 6e 74 20 62  he significant b
117f0 69 74 73 20 6f 66 20 61 6e 0a 2a 2a 20 61 66 66  its of an.** aff
11800 69 6e 69 74 79 20 76 61 6c 75 65 2e 0a 2a 2f 0a  inity value..*/.
11810 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41  #define SQLITE_A
11820 46 46 5f 4d 41 53 4b 20 20 20 20 20 30 78 34 37  FF_MASK     0x47
11830 0a 0a 2f 2a 0a 2a 2a 20 41 64 64 69 74 69 6f 6e  ../*.** Addition
11840 61 6c 20 62 69 74 20 76 61 6c 75 65 73 20 74 68  al bit values th
11850 61 74 20 63 61 6e 20 62 65 20 4f 52 65 64 20 77  at can be ORed w
11860 69 74 68 20 61 6e 20 61 66 66 69 6e 69 74 79 20  ith an affinity 
11870 77 69 74 68 6f 75 74 0a 2a 2a 20 63 68 61 6e 67  without.** chang
11880 69 6e 67 20 74 68 65 20 61 66 66 69 6e 69 74 79  ing the affinity
11890 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 53 51 4c 49  ..**.** The SQLI
118a0 54 45 5f 4e 4f 54 4e 55 4c 4c 20 66 6c 61 67 20  TE_NOTNULL flag 
118b0 69 73 20 61 20 63 6f 6d 62 69 6e 61 74 69 6f 6e  is a combination
118c0 20 6f 66 20 4e 55 4c 4c 45 51 20 61 6e 64 20 4a   of NULLEQ and J
118d0 55 4d 50 49 46 4e 55 4c 4c 2e 0a 2a 2a 20 49 74  UMPIFNULL..** It
118e0 20 63 61 75 73 65 73 20 61 6e 20 61 73 73 65 72   causes an asser
118f0 74 28 29 20 74 6f 20 66 69 72 65 20 69 66 20 65  t() to fire if e
11900 69 74 68 65 72 20 6f 70 65 72 61 6e 64 20 74 6f  ither operand to
11910 20 61 20 63 6f 6d 70 61 72 69 73 6f 6e 0a 2a 2a   a comparison.**
11920 20 6f 70 65 72 61 74 6f 72 20 69 73 20 4e 55 4c   operator is NUL
11930 4c 2e 20 20 49 74 20 69 73 20 61 64 64 65 64 20  L.  It is added 
11940 74 6f 20 63 65 72 74 61 69 6e 20 63 6f 6d 70 61  to certain compa
11950 72 69 73 6f 6e 20 6f 70 65 72 61 74 6f 72 73 20  rison operators 
11960 74 6f 0a 2a 2a 20 70 72 6f 76 65 20 74 68 61 74  to.** prove that
11970 20 74 68 65 20 6f 70 65 72 61 6e 64 73 20 61 72   the operands ar
11980 65 20 61 6c 77 61 79 73 20 4e 4f 54 20 4e 55 4c  e always NOT NUL
11990 4c 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  L..*/.#define SQ
119a0 4c 49 54 45 5f 4b 45 45 50 4e 55 4c 4c 20 20 20  LITE_KEEPNULL   
119b0 20 20 30 78 30 38 20 20 2f 2a 20 55 73 65 64 20    0x08  /* Used 
119c0 62 79 20 76 65 63 74 6f 72 20 3d 3d 20 6f 72 20  by vector == or 
119d0 3c 3e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  <> */.#define SQ
119e0 4c 49 54 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c 20  LITE_JUMPIFNULL 
119f0 20 20 30 78 31 30 20 20 2f 2a 20 6a 75 6d 70 73    0x10  /* jumps
11a00 20 69 66 20 65 69 74 68 65 72 20 6f 70 65 72 61   if either opera
11a10 6e 64 20 69 73 20 4e 55 4c 4c 20 2a 2f 0a 23 64  nd is NULL */.#d
11a20 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 54 4f  efine SQLITE_STO
11a30 52 45 50 32 20 20 20 20 20 20 30 78 32 30 20 20  REP2      0x20  
11a40 2f 2a 20 53 74 6f 72 65 20 72 65 73 75 6c 74 20  /* Store result 
11a50 69 6e 20 72 65 67 5b 50 32 5d 20 72 61 74 68 65  in reg[P2] rathe
11a60 72 20 74 68 61 6e 20 6a 75 6d 70 20 2a 2f 0a 23  r than jump */.#
11a70 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e 55  define SQLITE_NU
11a80 4c 4c 45 51 20 20 20 20 20 20 20 30 78 38 30 20  LLEQ       0x80 
11a90 20 2f 2a 20 4e 55 4c 4c 3d 4e 55 4c 4c 20 2a 2f   /* NULL=NULL */
11aa0 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
11ab0 4e 4f 54 4e 55 4c 4c 20 20 20 20 20 20 30 78 39  NOTNULL      0x9
11ac0 30 20 20 2f 2a 20 41 73 73 65 72 74 20 74 68 61  0  /* Assert tha
11ad0 74 20 6f 70 65 72 61 6e 64 73 20 61 72 65 20 6e  t operands are n
11ae0 65 76 65 72 20 4e 55 4c 4c 20 2a 2f 0a 0a 2f 2a  ever NULL */../*
11af0 0a 2a 2a 20 41 6e 20 6f 62 6a 65 63 74 20 6f 66  .** An object of
11b00 20 74 68 69 73 20 74 79 70 65 20 69 73 20 63 72   this type is cr
11b10 65 61 74 65 64 20 66 6f 72 20 65 61 63 68 20 76  eated for each v
11b20 69 72 74 75 61 6c 20 74 61 62 6c 65 20 70 72 65  irtual table pre
11b30 73 65 6e 74 20 69 6e 0a 2a 2a 20 74 68 65 20 64  sent in.** the d
11b40 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 2e 0a  atabase schema..
11b50 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 64 61 74  **.** If the dat
11b60 61 62 61 73 65 20 73 63 68 65 6d 61 20 69 73 20  abase schema is 
11b70 73 68 61 72 65 64 2c 20 74 68 65 6e 20 74 68 65  shared, then the
11b80 72 65 20 69 73 20 6f 6e 65 20 69 6e 73 74 61 6e  re is one instan
11b90 63 65 20 6f 66 20 74 68 69 73 0a 2a 2a 20 73 74  ce of this.** st
11ba0 72 75 63 74 75 72 65 20 66 6f 72 20 65 61 63 68  ructure for each
11bb0 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63   database connec
11bc0 74 69 6f 6e 20 28 73 71 6c 69 74 65 33 2a 29 20  tion (sqlite3*) 
11bd0 74 68 61 74 20 75 73 65 73 20 74 68 65 20 73 68  that uses the sh
11be0 61 72 65 64 0a 2a 2a 20 73 63 68 65 6d 61 2e 20  ared.** schema. 
11bf0 54 68 69 73 20 69 73 20 62 65 63 61 75 73 65 20  This is because 
11c00 65 61 63 68 20 64 61 74 61 62 61 73 65 20 63 6f  each database co
11c10 6e 6e 65 63 74 69 6f 6e 20 72 65 71 75 69 72 65  nnection require
11c20 73 20 69 74 73 20 6f 77 6e 20 75 6e 69 71 75 65  s its own unique
11c30 0a 2a 2a 20 69 6e 73 74 61 6e 63 65 20 6f 66 20  .** instance of 
11c40 74 68 65 20 73 71 6c 69 74 65 33 5f 76 74 61 62  the sqlite3_vtab
11c50 2a 20 68 61 6e 64 6c 65 20 75 73 65 64 20 74 6f  * handle used to
11c60 20 61 63 63 65 73 73 20 74 68 65 20 76 69 72 74   access the virt
11c70 75 61 6c 20 74 61 62 6c 65 0a 2a 2a 20 69 6d 70  ual table.** imp
11c80 6c 65 6d 65 6e 74 61 74 69 6f 6e 2e 20 73 71 6c  lementation. sql
11c90 69 74 65 33 5f 76 74 61 62 2a 20 68 61 6e 64 6c  ite3_vtab* handl
11ca0 65 73 20 63 61 6e 20 6e 6f 74 20 62 65 20 73 68  es can not be sh
11cb0 61 72 65 64 20 62 65 74 77 65 65 6e 0a 2a 2a 20  ared between.** 
11cc0 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74  database connect
11cd0 69 6f 6e 73 2c 20 65 76 65 6e 20 77 68 65 6e 20  ions, even when 
11ce0 74 68 65 20 72 65 73 74 20 6f 66 20 74 68 65 20  the rest of the 
11cf0 69 6e 2d 6d 65 6d 6f 72 79 20 64 61 74 61 62 61  in-memory databa
11d00 73 65 0a 2a 2a 20 73 63 68 65 6d 61 20 69 73 20  se.** schema is 
11d10 73 68 61 72 65 64 2c 20 61 73 20 74 68 65 20 69  shared, as the i
11d20 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6f 66  mplementation of
11d30 74 65 6e 20 73 74 6f 72 65 73 20 74 68 65 20 64  ten stores the d
11d40 61 74 61 62 61 73 65 0a 2a 2a 20 63 6f 6e 6e 65  atabase.** conne
11d50 63 74 69 6f 6e 20 68 61 6e 64 6c 65 20 70 61 73  ction handle pas
11d60 73 65 64 20 74 6f 20 69 74 20 76 69 61 20 74 68  sed to it via th
11d70 65 20 78 43 6f 6e 6e 65 63 74 28 29 20 6f 72 20  e xConnect() or 
11d80 78 43 72 65 61 74 65 28 29 20 6d 65 74 68 6f 64  xCreate() method
11d90 0a 2a 2a 20 64 75 72 69 6e 67 20 69 6e 69 74 69  .** during initi
11da0 61 6c 69 7a 61 74 69 6f 6e 20 69 6e 74 65 72 6e  alization intern
11db0 61 6c 6c 79 2e 20 54 68 69 73 20 64 61 74 61 62  ally. This datab
11dc0 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68  ase connection h
11dd0 61 6e 64 6c 65 20 6d 61 79 0a 2a 2a 20 74 68 65  andle may.** the
11de0 6e 20 62 65 20 75 73 65 64 20 62 79 20 74 68 65  n be used by the
11df0 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 69   virtual table i
11e00 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 74 6f  mplementation to
11e10 20 61 63 63 65 73 73 20 72 65 61 6c 20 74 61 62   access real tab
11e20 6c 65 73 0a 2a 2a 20 77 69 74 68 69 6e 20 74 68  les.** within th
11e30 65 20 64 61 74 61 62 61 73 65 2e 20 53 6f 20 74  e database. So t
11e40 68 61 74 20 74 68 65 79 20 61 70 70 65 61 72 20  hat they appear 
11e50 61 73 20 70 61 72 74 20 6f 66 20 74 68 65 20 63  as part of the c
11e60 61 6c 6c 65 72 73 0a 2a 2a 20 74 72 61 6e 73 61  allers.** transa
11e70 63 74 69 6f 6e 2c 20 74 68 65 73 65 20 61 63 63  ction, these acc
11e80 65 73 73 65 73 20 6e 65 65 64 20 74 6f 20 62 65  esses need to be
11e90 20 6d 61 64 65 20 76 69 61 20 74 68 65 20 73 61   made via the sa
11ea0 6d 65 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 63  me database.** c
11eb0 6f 6e 6e 65 63 74 69 6f 6e 20 61 73 20 74 68 61  onnection as tha
11ec0 74 20 75 73 65 64 20 74 6f 20 65 78 65 63 75 74  t used to execut
11ed0 65 20 53 51 4c 20 6f 70 65 72 61 74 69 6f 6e 73  e SQL operations
11ee0 20 6f 6e 20 74 68 65 20 76 69 72 74 75 61 6c 20   on the virtual 
11ef0 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 41 6c 6c  table..**.** All
11f00 20 56 54 61 62 6c 65 20 6f 62 6a 65 63 74 73 20   VTable objects 
11f10 74 68 61 74 20 63 6f 72 72 65 73 70 6f 6e 64 20  that correspond 
11f20 74 6f 20 61 20 73 69 6e 67 6c 65 20 74 61 62 6c  to a single tabl
11f30 65 20 69 6e 20 61 20 73 68 61 72 65 64 0a 2a 2a  e in a shared.**
11f40 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61   database schema
11f50 20 61 72 65 20 69 6e 69 74 69 61 6c 6c 79 20 73   are initially s
11f60 74 6f 72 65 64 20 69 6e 20 61 20 6c 69 6e 6b 65  tored in a linke
11f70 64 2d 6c 69 73 74 20 70 6f 69 6e 74 65 64 20 74  d-list pointed t
11f80 6f 20 62 79 0a 2a 2a 20 74 68 65 20 54 61 62 6c  o by.** the Tabl
11f90 65 2e 70 56 54 61 62 6c 65 20 6d 65 6d 62 65 72  e.pVTable member
11fa0 20 76 61 72 69 61 62 6c 65 20 6f 66 20 74 68 65   variable of the
11fb0 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 54   corresponding T
11fc0 61 62 6c 65 20 6f 62 6a 65 63 74 2e 0a 2a 2a 20  able object..** 
11fd0 57 68 65 6e 20 61 6e 20 73 71 6c 69 74 65 33 5f  When an sqlite3_
11fe0 70 72 65 70 61 72 65 28 29 20 6f 70 65 72 61 74  prepare() operat
11ff0 69 6f 6e 20 69 73 20 72 65 71 75 69 72 65 64 20  ion is required 
12000 74 6f 20 61 63 63 65 73 73 20 74 68 65 20 76 69  to access the vi
12010 72 74 75 61 6c 0a 2a 2a 20 74 61 62 6c 65 2c 20  rtual.** table, 
12020 69 74 20 73 65 61 72 63 68 65 73 20 74 68 65 20  it searches the 
12030 6c 69 73 74 20 66 6f 72 20 74 68 65 20 56 54 61  list for the VTa
12040 62 6c 65 20 74 68 61 74 20 63 6f 72 72 65 73 70  ble that corresp
12050 6f 6e 64 73 20 74 6f 20 74 68 65 0a 2a 2a 20 64  onds to the.** d
12060 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
12070 6f 6e 20 64 6f 69 6e 67 20 74 68 65 20 70 72 65  on doing the pre
12080 70 61 72 69 6e 67 20 73 6f 20 61 73 20 74 6f 20  paring so as to 
12090 75 73 65 20 74 68 65 20 63 6f 72 72 65 63 74 0a  use the correct.
120a0 2a 2a 20 73 71 6c 69 74 65 33 5f 76 74 61 62 2a  ** sqlite3_vtab*
120b0 20 68 61 6e 64 6c 65 20 69 6e 20 74 68 65 20 63   handle in the c
120c0 6f 6d 70 69 6c 65 64 20 71 75 65 72 79 2e 0a 2a  ompiled query..*
120d0 2a 0a 2a 2a 20 57 68 65 6e 20 61 6e 20 69 6e 2d  *.** When an in-
120e0 6d 65 6d 6f 72 79 20 54 61 62 6c 65 20 6f 62 6a  memory Table obj
120f0 65 63 74 20 69 73 20 64 65 6c 65 74 65 64 20 28  ect is deleted (
12100 66 6f 72 20 65 78 61 6d 70 6c 65 20 77 68 65 6e  for example when
12110 20 74 68 65 0a 2a 2a 20 73 63 68 65 6d 61 20 69   the.** schema i
12120 73 20 62 65 69 6e 67 20 72 65 6c 6f 61 64 65 64  s being reloaded
12130 20 66 6f 72 20 73 6f 6d 65 20 72 65 61 73 6f 6e   for some reason
12140 29 2c 20 74 68 65 20 56 54 61 62 6c 65 20 6f 62  ), the VTable ob
12150 6a 65 63 74 73 20 61 72 65 20 6e 6f 74 0a 2a 2a  jects are not.**
12160 20 64 65 6c 65 74 65 64 20 61 6e 64 20 74 68 65   deleted and the
12170 20 73 71 6c 69 74 65 33 5f 76 74 61 62 2a 20 68   sqlite3_vtab* h
12180 61 6e 64 6c 65 73 20 61 72 65 20 6e 6f 74 20 78  andles are not x
12190 44 69 73 63 6f 6e 6e 65 63 74 28 29 65 64 0a 2a  Disconnect()ed.*
121a0 2a 20 69 6d 6d 65 64 69 61 74 65 6c 79 2e 20 49  * immediately. I
121b0 6e 73 74 65 61 64 2c 20 74 68 65 79 20 61 72 65  nstead, they are
121c0 20 6d 6f 76 65 64 20 66 72 6f 6d 20 74 68 65 20   moved from the 
121d0 54 61 62 6c 65 2e 70 56 54 61 62 6c 65 20 6c 69  Table.pVTable li
121e0 73 74 20 74 6f 0a 2a 2a 20 61 6e 6f 74 68 65 72  st to.** another
121f0 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 68 65 61   linked list hea
12200 64 65 64 20 62 79 20 74 68 65 20 73 71 6c 69 74  ded by the sqlit
12210 65 33 2e 70 44 69 73 63 6f 6e 6e 65 63 74 20 6d  e3.pDisconnect m
12220 65 6d 62 65 72 20 6f 66 20 74 68 65 0a 2a 2a 20  ember of the.** 
12230 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 73 71  corresponding sq
12240 6c 69 74 65 33 20 73 74 72 75 63 74 75 72 65 2e  lite3 structure.
12250 20 54 68 65 79 20 61 72 65 20 74 68 65 6e 20 64   They are then d
12260 65 6c 65 74 65 64 2f 78 44 69 73 63 6f 6e 6e 65  eleted/xDisconne
12270 63 74 65 64 0a 2a 2a 20 6e 65 78 74 20 74 69 6d  cted.** next tim
12280 65 20 61 20 73 74 61 74 65 6d 65 6e 74 20 69 73  e a statement is
12290 20 70 72 65 70 61 72 65 64 20 75 73 69 6e 67 20   prepared using 
122a0 73 61 69 64 20 73 71 6c 69 74 65 33 2a 2e 20 54  said sqlite3*. T
122b0 68 69 73 20 69 73 20 64 6f 6e 65 0a 2a 2a 20 74  his is done.** t
122c0 6f 20 61 76 6f 69 64 20 64 65 61 64 6c 6f 63 6b  o avoid deadlock
122d0 20 69 73 73 75 65 73 20 69 6e 76 6f 6c 76 69 6e   issues involvin
122e0 67 20 6d 75 6c 74 69 70 6c 65 20 73 71 6c 69 74  g multiple sqlit
122f0 65 33 2e 6d 75 74 65 78 20 6d 75 74 65 78 65 73  e3.mutex mutexes
12300 2e 0a 2a 2a 20 52 65 66 65 72 20 74 6f 20 63 6f  ..** Refer to co
12310 6d 6d 65 6e 74 73 20 61 62 6f 76 65 20 66 75 6e  mments above fun
12320 63 74 69 6f 6e 20 73 71 6c 69 74 65 33 56 74 61  ction sqlite3Vta
12330 62 55 6e 6c 6f 63 6b 4c 69 73 74 28 29 20 66 6f  bUnlockList() fo
12340 72 20 61 6e 0a 2a 2a 20 65 78 70 6c 61 6e 61 74  r an.** explanat
12350 69 6f 6e 20 61 73 20 74 6f 20 77 68 79 20 69 74  ion as to why it
12360 20 69 73 20 73 61 66 65 20 74 6f 20 61 64 64 20   is safe to add 
12370 61 6e 20 65 6e 74 72 79 20 74 6f 20 61 6e 20 73  an entry to an s
12380 71 6c 69 74 65 33 2e 70 44 69 73 63 6f 6e 6e 65  qlite3.pDisconne
12390 63 74 0a 2a 2a 20 6c 69 73 74 20 77 69 74 68 6f  ct.** list witho
123a0 75 74 20 68 6f 6c 64 69 6e 67 20 74 68 65 20 63  ut holding the c
123b0 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 73 71 6c  orresponding sql
123c0 69 74 65 33 2e 6d 75 74 65 78 20 6d 75 74 65 78  ite3.mutex mutex
123d0 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6d 65 6d 6f  ..**.** The memo
123e0 72 79 20 66 6f 72 20 6f 62 6a 65 63 74 73 20 6f  ry for objects o
123f0 66 20 74 68 69 73 20 74 79 70 65 20 69 73 20 61  f this type is a
12400 6c 77 61 79 73 20 61 6c 6c 6f 63 61 74 65 64 20  lways allocated 
12410 62 79 0a 2a 2a 20 73 71 6c 69 74 65 33 44 62 4d  by.** sqlite3DbM
12420 61 6c 6c 6f 63 28 29 2c 20 75 73 69 6e 67 20 74  alloc(), using t
12430 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61  he connection ha
12440 6e 64 6c 65 20 73 74 6f 72 65 64 20 69 6e 20 56  ndle stored in V
12450 54 61 62 6c 65 2e 64 62 20 61 73 0a 2a 2a 20 74  Table.db as.** t
12460 68 65 20 66 69 72 73 74 20 61 72 67 75 6d 65 6e  he first argumen
12470 74 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 56 54 61  t..*/.struct VTa
12480 62 6c 65 20 7b 0a 20 20 73 71 6c 69 74 65 33 20  ble {.  sqlite3 
12490 2a 64 62 3b 20 20 20 20 20 20 20 20 20 20 20 20  *db;            
124a0 20 20 2f 2a 20 44 61 74 61 62 61 73 65 20 63 6f    /* Database co
124b0 6e 6e 65 63 74 69 6f 6e 20 61 73 73 6f 63 69 61  nnection associa
124c0 74 65 64 20 77 69 74 68 20 74 68 69 73 20 74 61  ted with this ta
124d0 62 6c 65 20 2a 2f 0a 20 20 4d 6f 64 75 6c 65 20  ble */.  Module 
124e0 2a 70 4d 6f 64 3b 20 20 20 20 20 20 20 20 20 20  *pMod;          
124f0 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f     /* Pointer to
12500 20 6d 6f 64 75 6c 65 20 69 6d 70 6c 65 6d 65 6e   module implemen
12510 74 61 74 69 6f 6e 20 2a 2f 0a 20 20 73 71 6c 69  tation */.  sqli
12520 74 65 33 5f 76 74 61 62 20 2a 70 56 74 61 62 3b  te3_vtab *pVtab;
12530 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72        /* Pointer
12540 20 74 6f 20 76 74 61 62 20 69 6e 73 74 61 6e 63   to vtab instanc
12550 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 52 65 66 3b  e */.  int nRef;
12560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12570 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 70 6f   /* Number of po
12580 69 6e 74 65 72 73 20 74 6f 20 74 68 69 73 20 73  inters to this s
12590 74 72 75 63 74 75 72 65 20 2a 2f 0a 20 20 75 38  tructure */.  u8
125a0 20 62 43 6f 6e 73 74 72 61 69 6e 74 3b 20 20 20   bConstraint;   
125b0 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20          /* True 
125c0 69 66 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 61  if constraints a
125d0 72 65 20 73 75 70 70 6f 72 74 65 64 20 2a 2f 0a  re supported */.
125e0 20 20 69 6e 74 20 69 53 61 76 65 70 6f 69 6e 74    int iSavepoint
125f0 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44  ;           /* D
12600 65 70 74 68 20 6f 66 20 74 68 65 20 53 41 56 45  epth of the SAVE
12610 50 4f 49 4e 54 20 73 74 61 63 6b 20 2a 2f 0a 20  POINT stack */. 
12620 20 56 54 61 62 6c 65 20 2a 70 4e 65 78 74 3b 20   VTable *pNext; 
12630 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 65             /* Ne
12640 78 74 20 69 6e 20 6c 69 6e 6b 65 64 20 6c 69 73  xt in linked lis
12650 74 20 28 73 65 65 20 61 62 6f 76 65 29 20 2a 2f  t (see above) */
12660 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 73  .};../*.** The s
12670 63 68 65 6d 61 20 66 6f 72 20 65 61 63 68 20 53  chema for each S
12680 51 4c 20 74 61 62 6c 65 20 61 6e 64 20 76 69 65  QL table and vie
12690 77 20 69 73 20 72 65 70 72 65 73 65 6e 74 65 64  w is represented
126a0 20 69 6e 20 6d 65 6d 6f 72 79 0a 2a 2a 20 62 79   in memory.** by
126b0 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20   an instance of 
126c0 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74  the following st
126d0 72 75 63 74 75 72 65 2e 0a 2a 2f 0a 73 74 72 75  ructure..*/.stru
126e0 63 74 20 54 61 62 6c 65 20 7b 0a 20 20 63 68 61  ct Table {.  cha
126f0 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20  r *zName;       
12700 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65    /* Name of the
12710 20 74 61 62 6c 65 20 6f 72 20 76 69 65 77 20 2a   table or view *
12720 2f 0a 20 20 43 6f 6c 75 6d 6e 20 2a 61 43 6f 6c  /.  Column *aCol
12730 3b 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 66 6f  ;        /* Info
12740 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 65 61  rmation about ea
12750 63 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 49  ch column */.  I
12760 6e 64 65 78 20 2a 70 49 6e 64 65 78 3b 20 20 20  ndex *pIndex;   
12770 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 53      /* List of S
12780 51 4c 20 69 6e 64 65 78 65 73 20 6f 6e 20 74 68  QL indexes on th
12790 69 73 20 74 61 62 6c 65 2e 20 2a 2f 0a 20 20 53  is table. */.  S
127a0 65 6c 65 63 74 20 2a 70 53 65 6c 65 63 74 3b 20  elect *pSelect; 
127b0 20 20 20 20 2f 2a 20 4e 55 4c 4c 20 66 6f 72 20      /* NULL for 
127c0 74 61 62 6c 65 73 2e 20 20 50 6f 69 6e 74 73 20  tables.  Points 
127d0 74 6f 20 64 65 66 69 6e 69 74 69 6f 6e 20 69 66  to definition if
127e0 20 61 20 76 69 65 77 2e 20 2a 2f 0a 20 20 46 4b   a view. */.  FK
127f0 65 79 20 2a 70 46 4b 65 79 3b 20 20 20 20 20 20  ey *pFKey;      
12800 20 20 20 2f 2a 20 4c 69 6e 6b 65 64 20 6c 69 73     /* Linked lis
12810 74 20 6f 66 20 61 6c 6c 20 66 6f 72 65 69 67 6e  t of all foreign
12820 20 6b 65 79 73 20 69 6e 20 74 68 69 73 20 74 61   keys in this ta
12830 62 6c 65 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a  ble */.  char *z
12840 43 6f 6c 41 66 66 3b 20 20 20 20 20 20 20 2f 2a  ColAff;       /*
12850 20 53 74 72 69 6e 67 20 64 65 66 69 6e 69 6e 67   String defining
12860 20 74 68 65 20 61 66 66 69 6e 69 74 79 20 6f 66   the affinity of
12870 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a   each column */.
12880 20 20 45 78 70 72 4c 69 73 74 20 2a 70 43 68 65    ExprList *pChe
12890 63 6b 3b 20 20 20 20 2f 2a 20 41 6c 6c 20 43 48  ck;    /* All CH
128a0 45 43 4b 20 63 6f 6e 73 74 72 61 69 6e 74 73 20  ECK constraints 
128b0 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  */.             
128c0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 20 20 2e            /*   .
128d0 2e 2e 20 61 6c 73 6f 20 75 73 65 64 20 61 73 20  .. also used as 
128e0 63 6f 6c 75 6d 6e 20 6e 61 6d 65 20 6c 69 73 74  column name list
128f0 20 69 6e 20 61 20 56 49 45 57 20 2a 2f 0a 20 20   in a VIEW */.  
12900 69 6e 74 20 74 6e 75 6d 3b 20 20 20 20 20 20 20  int tnum;       
12910 20 20 20 20 20 2f 2a 20 52 6f 6f 74 20 42 54 72       /* Root BTr
12920 65 65 20 70 61 67 65 20 66 6f 72 20 74 68 69 73  ee page for this
12930 20 74 61 62 6c 65 20 2a 2f 0a 20 20 75 33 32 20   table */.  u32 
12940 6e 54 61 62 52 65 66 3b 20 20 20 20 20 20 20 20  nTabRef;        
12950 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 70 6f   /* Number of po
12960 69 6e 74 65 72 73 20 74 6f 20 74 68 69 73 20 54  inters to this T
12970 61 62 6c 65 20 2a 2f 0a 20 20 75 33 32 20 74 61  able */.  u32 ta
12980 62 46 6c 61 67 73 3b 20 20 20 20 20 20 20 20 2f  bFlags;        /
12990 2a 20 4d 61 73 6b 20 6f 66 20 54 46 5f 2a 20 76  * Mask of TF_* v
129a0 61 6c 75 65 73 20 2a 2f 0a 20 20 69 31 36 20 69  alues */.  i16 i
129b0 50 4b 65 79 3b 20 20 20 20 20 20 20 20 20 20 20  PKey;           
129c0 2f 2a 20 49 66 20 6e 6f 74 20 6e 65 67 61 74 69  /* If not negati
129d0 76 65 2c 20 75 73 65 20 61 43 6f 6c 5b 69 50 4b  ve, use aCol[iPK
129e0 65 79 5d 20 61 73 20 74 68 65 20 72 6f 77 69 64  ey] as the rowid
129f0 20 2a 2f 0a 20 20 69 31 36 20 6e 43 6f 6c 3b 20   */.  i16 nCol; 
12a00 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
12a10 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20  mber of columns 
12a20 69 6e 20 74 68 69 73 20 74 61 62 6c 65 20 2a 2f  in this table */
12a30 0a 20 20 4c 6f 67 45 73 74 20 6e 52 6f 77 4c 6f  .  LogEst nRowLo
12a40 67 45 73 74 3b 20 20 20 2f 2a 20 45 73 74 69 6d  gEst;   /* Estim
12a50 61 74 65 64 20 72 6f 77 73 20 69 6e 20 74 61 62  ated rows in tab
12a60 6c 65 20 2d 20 66 72 6f 6d 20 73 71 6c 69 74 65  le - from sqlite
12a70 5f 73 74 61 74 31 20 74 61 62 6c 65 20 2a 2f 0a  _stat1 table */.
12a80 20 20 4c 6f 67 45 73 74 20 73 7a 54 61 62 52 6f    LogEst szTabRo
12a90 77 3b 20 20 20 20 20 2f 2a 20 45 73 74 69 6d 61  w;     /* Estima
12aa0 74 65 64 20 73 69 7a 65 20 6f 66 20 65 61 63 68  ted size of each
12ab0 20 74 61 62 6c 65 20 72 6f 77 20 69 6e 20 62 79   table row in by
12ac0 74 65 73 20 2a 2f 0a 23 69 66 64 65 66 20 53 51  tes */.#ifdef SQ
12ad0 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 43 4f 53 54  LITE_ENABLE_COST
12ae0 4d 55 4c 54 0a 20 20 4c 6f 67 45 73 74 20 63 6f  MULT.  LogEst co
12af0 73 74 4d 75 6c 74 3b 20 20 20 20 20 2f 2a 20 43  stMult;     /* C
12b00 6f 73 74 20 6d 75 6c 74 69 70 6c 69 65 72 20 66  ost multiplier f
12b10 6f 72 20 75 73 69 6e 67 20 74 68 69 73 20 74 61  or using this ta
12b20 62 6c 65 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20  ble */.#endif.  
12b30 75 38 20 6b 65 79 43 6f 6e 66 3b 20 20 20 20 20  u8 keyConf;     
12b40 20 20 20 20 20 2f 2a 20 57 68 61 74 20 74 6f 20       /* What to 
12b50 64 6f 20 69 6e 20 63 61 73 65 20 6f 66 20 75 6e  do in case of un
12b60 69 71 75 65 6e 65 73 73 20 63 6f 6e 66 6c 69 63  iqueness conflic
12b70 74 20 6f 6e 20 69 50 4b 65 79 20 2a 2f 0a 23 69  t on iPKey */.#i
12b80 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
12b90 54 5f 41 4c 54 45 52 54 41 42 4c 45 0a 20 20 69  T_ALTERTABLE.  i
12ba0 6e 74 20 61 64 64 43 6f 6c 4f 66 66 73 65 74 3b  nt addColOffset;
12bb0 20 20 20 20 2f 2a 20 4f 66 66 73 65 74 20 69 6e      /* Offset in
12bc0 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 73 74   CREATE TABLE st
12bd0 6d 74 20 74 6f 20 61 64 64 20 61 20 6e 65 77 20  mt to add a new 
12be0 63 6f 6c 75 6d 6e 20 2a 2f 0a 23 65 6e 64 69 66  column */.#endif
12bf0 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
12c00 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
12c10 45 0a 20 20 69 6e 74 20 6e 4d 6f 64 75 6c 65 41  E.  int nModuleA
12c20 72 67 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62  rg;      /* Numb
12c30 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20  er of arguments 
12c40 74 6f 20 74 68 65 20 6d 6f 64 75 6c 65 20 2a 2f  to the module */
12c50 0a 20 20 63 68 61 72 20 2a 2a 61 7a 4d 6f 64 75  .  char **azModu
12c60 6c 65 41 72 67 3b 20 20 2f 2a 20 30 3a 20 6d 6f  leArg;  /* 0: mo
12c70 64 75 6c 65 20 31 3a 20 73 63 68 65 6d 61 20 32  dule 1: schema 2
12c80 3a 20 76 74 61 62 20 6e 61 6d 65 20 33 2e 2e 2e  : vtab name 3...
12c90 3a 20 61 72 67 73 20 2a 2f 0a 20 20 56 54 61 62  : args */.  VTab
12ca0 6c 65 20 2a 70 56 54 61 62 6c 65 3b 20 20 20 20  le *pVTable;    
12cb0 20 2f 2a 20 4c 69 73 74 20 6f 66 20 56 54 61 62   /* List of VTab
12cc0 6c 65 20 6f 62 6a 65 63 74 73 2e 20 2a 2f 0a 23  le objects. */.#
12cd0 65 6e 64 69 66 0a 20 20 54 72 69 67 67 65 72 20  endif.  Trigger 
12ce0 2a 70 54 72 69 67 67 65 72 3b 20 20 20 2f 2a 20  *pTrigger;   /* 
12cf0 4c 69 73 74 20 6f 66 20 74 72 69 67 67 65 72 73  List of triggers
12d00 20 73 74 6f 72 65 64 20 69 6e 20 70 53 63 68 65   stored in pSche
12d10 6d 61 20 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a  ma */.  Schema *
12d20 70 53 63 68 65 6d 61 3b 20 20 20 20 20 2f 2a 20  pSchema;     /* 
12d30 53 63 68 65 6d 61 20 74 68 61 74 20 63 6f 6e 74  Schema that cont
12d40 61 69 6e 73 20 74 68 69 73 20 74 61 62 6c 65 20  ains this table 
12d50 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70 4e 65 78  */.  Table *pNex
12d60 74 5a 6f 6d 62 69 65 3b 20 20 2f 2a 20 4e 65 78  tZombie;  /* Nex
12d70 74 20 6f 6e 20 74 68 65 20 50 61 72 73 65 2e 70  t on the Parse.p
12d80 5a 6f 6d 62 69 65 54 61 62 20 6c 69 73 74 20 2a  ZombieTab list *
12d90 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f  /.};../*.** Allo
12da0 77 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20 54  wed values for T
12db0 61 62 6c 65 2e 74 61 62 46 6c 61 67 73 2e 0a 2a  able.tabFlags..*
12dc0 2a 0a 2a 2a 20 54 46 5f 4f 4f 4f 48 69 64 64 65  *.** TF_OOOHidde
12dd0 6e 20 61 70 70 6c 69 65 73 20 74 6f 20 74 61 62  n applies to tab
12de0 6c 65 73 20 6f 72 20 76 69 65 77 20 74 68 61 74  les or view that
12df0 20 68 61 76 65 20 68 69 64 64 65 6e 20 63 6f 6c   have hidden col
12e00 75 6d 6e 73 20 74 68 61 74 20 61 72 65 0a 2a 2a  umns that are.**
12e10 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 6e 6f 6e   followed by non
12e20 2d 68 69 64 64 65 6e 20 63 6f 6c 75 6d 6e 73 2e  -hidden columns.
12e30 20 20 45 78 61 6d 70 6c 65 3a 20 20 22 43 52 45    Example:  "CRE
12e40 41 54 45 20 56 49 52 54 55 41 4c 20 54 41 42 4c  ATE VIRTUAL TABL
12e50 45 20 78 20 55 53 49 4e 47 0a 2a 2a 20 76 74 61  E x USING.** vta
12e60 62 31 28 61 20 48 49 44 44 45 4e 2c 20 62 29 3b  b1(a HIDDEN, b);
12e70 22 2e 20 20 53 69 6e 63 65 20 22 62 22 20 69 73  ".  Since "b" is
12e80 20 61 20 6e 6f 6e 2d 68 69 64 64 65 6e 20 63 6f   a non-hidden co
12e90 6c 75 6d 6e 20 62 75 74 20 22 61 22 20 69 73 20  lumn but "a" is 
12ea0 68 69 64 64 65 6e 2c 0a 2a 2a 20 74 68 65 20 54  hidden,.** the T
12eb0 46 5f 4f 4f 4f 48 69 64 64 65 6e 20 61 74 74 72  F_OOOHidden attr
12ec0 69 62 75 74 65 20 77 6f 75 6c 64 20 61 70 70 6c  ibute would appl
12ed0 79 20 69 6e 20 74 68 69 73 20 63 61 73 65 2e 20  y in this case. 
12ee0 20 53 75 63 68 20 74 61 62 6c 65 73 20 72 65 71   Such tables req
12ef0 75 69 72 65 0a 2a 2a 20 73 70 65 63 69 61 6c 20  uire.** special 
12f00 68 61 6e 64 6c 69 6e 67 20 64 75 72 69 6e 67 20  handling during 
12f10 49 4e 53 45 52 54 20 70 72 6f 63 65 73 73 69 6e  INSERT processin
12f20 67 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46  g..*/.#define TF
12f30 5f 52 65 61 64 6f 6e 6c 79 20 20 20 20 20 20 20  _Readonly       
12f40 20 30 78 30 30 30 31 20 20 20 20 2f 2a 20 52 65   0x0001    /* Re
12f50 61 64 2d 6f 6e 6c 79 20 73 79 73 74 65 6d 20 74  ad-only system t
12f60 61 62 6c 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  able */.#define 
12f70 54 46 5f 45 70 68 65 6d 65 72 61 6c 20 20 20 20  TF_Ephemeral    
12f80 20 20 20 30 78 30 30 30 32 20 20 20 20 2f 2a 20     0x0002    /* 
12f90 41 6e 20 65 70 68 65 6d 65 72 61 6c 20 74 61 62  An ephemeral tab
12fa0 6c 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46  le */.#define TF
12fb0 5f 48 61 73 50 72 69 6d 61 72 79 4b 65 79 20 20  _HasPrimaryKey  
12fc0 20 30 78 30 30 30 34 20 20 20 20 2f 2a 20 54 61   0x0004    /* Ta
12fd0 62 6c 65 20 68 61 73 20 61 20 70 72 69 6d 61 72  ble has a primar
12fe0 79 20 6b 65 79 20 2a 2f 0a 23 64 65 66 69 6e 65  y key */.#define
12ff0 20 54 46 5f 41 75 74 6f 69 6e 63 72 65 6d 65 6e   TF_Autoincremen
13000 74 20 20 20 30 78 30 30 30 38 20 20 20 20 2f 2a  t   0x0008    /*
13010 20 49 6e 74 65 67 65 72 20 70 72 69 6d 61 72 79   Integer primary
13020 20 6b 65 79 20 69 73 20 61 75 74 6f 69 6e 63 72   key is autoincr
13030 65 6d 65 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65  ement */.#define
13040 20 54 46 5f 48 61 73 53 74 61 74 31 20 20 20 20   TF_HasStat1    
13050 20 20 20 20 30 78 30 30 31 30 20 20 20 20 2f 2a      0x0010    /*
13060 20 6e 52 6f 77 4c 6f 67 45 73 74 20 73 65 74 20   nRowLogEst set 
13070 66 72 6f 6d 20 73 71 6c 69 74 65 5f 73 74 61 74  from sqlite_stat
13080 31 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f  1 */.#define TF_
13090 57 69 74 68 6f 75 74 52 6f 77 69 64 20 20 20 20  WithoutRowid    
130a0 30 78 30 30 32 30 20 20 20 20 2f 2a 20 4e 6f 20  0x0020    /* No 
130b0 72 6f 77 69 64 2e 20 20 50 52 49 4d 41 52 59 20  rowid.  PRIMARY 
130c0 4b 45 59 20 69 73 20 74 68 65 20 6b 65 79 20 2a  KEY is the key *
130d0 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 4e 6f 56  /.#define TF_NoV
130e0 69 73 69 62 6c 65 52 6f 77 69 64 20 20 30 78 30  isibleRowid  0x0
130f0 30 34 30 20 20 20 20 2f 2a 20 4e 6f 20 75 73 65  040    /* No use
13100 72 2d 76 69 73 69 62 6c 65 20 22 72 6f 77 69 64  r-visible "rowid
13110 22 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 23 64 65 66  " column */.#def
13120 69 6e 65 20 54 46 5f 4f 4f 4f 48 69 64 64 65 6e  ine TF_OOOHidden
13130 20 20 20 20 20 20 20 30 78 30 30 38 30 20 20 20         0x0080   
13140 20 2f 2a 20 4f 75 74 2d 6f 66 2d 4f 72 64 65 72   /* Out-of-Order
13150 20 68 69 64 64 65 6e 20 63 6f 6c 75 6d 6e 73 20   hidden columns 
13160 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 53 74  */.#define TF_St
13170 61 74 73 55 73 65 64 20 20 20 20 20 20 20 30 78  atsUsed       0x
13180 30 31 30 30 20 20 20 20 2f 2a 20 51 75 65 72 79  0100    /* Query
13190 20 70 6c 61 6e 6e 65 72 20 64 65 63 69 73 69 6f   planner decisio
131a0 6e 73 20 61 66 66 65 63 74 65 64 20 62 79 0a 20  ns affected by. 
131b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
131c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
131d0 20 20 20 20 2a 2a 20 49 6e 64 65 78 2e 61 69 52      ** Index.aiR
131e0 6f 77 4c 6f 67 45 73 74 5b 5d 20 76 61 6c 75 65  owLogEst[] value
131f0 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f  s */.#define TF_
13200 48 61 73 4e 6f 74 4e 75 6c 6c 20 20 20 20 20 20  HasNotNull      
13210 30 78 30 32 30 30 20 20 20 20 2f 2a 20 43 6f 6e  0x0200    /* Con
13220 74 61 69 6e 73 20 4e 4f 54 20 4e 55 4c 4c 20 63  tains NOT NULL c
13230 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f 0a 0a 2f  onstraints */../
13240 2a 0a 2a 2a 20 54 65 73 74 20 74 6f 20 73 65 65  *.** Test to see
13250 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20   whether or not 
13260 61 20 74 61 62 6c 65 20 69 73 20 61 20 76 69 72  a table is a vir
13270 74 75 61 6c 20 74 61 62 6c 65 2e 20 20 54 68 69  tual table.  Thi
13280 73 20 69 73 0a 2a 2a 20 64 6f 6e 65 20 61 73 20  s is.** done as 
13290 61 20 6d 61 63 72 6f 20 73 6f 20 74 68 61 74 20  a macro so that 
132a0 69 74 20 77 69 6c 6c 20 62 65 20 6f 70 74 69 6d  it will be optim
132b0 69 7a 65 64 20 6f 75 74 20 77 68 65 6e 20 76 69  ized out when vi
132c0 72 74 75 61 6c 0a 2a 2a 20 74 61 62 6c 65 20 73  rtual.** table s
132d0 75 70 70 6f 72 74 20 69 73 20 6f 6d 69 74 74 65  upport is omitte
132e0 64 20 66 72 6f 6d 20 74 68 65 20 62 75 69 6c 64  d from the build
132f0 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c  ..*/.#ifndef SQL
13300 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
13310 54 41 42 4c 45 0a 23 20 20 64 65 66 69 6e 65 20  TABLE.#  define 
13320 49 73 56 69 72 74 75 61 6c 28 58 29 20 20 20 20  IsVirtual(X)    
13330 20 20 28 28 58 29 2d 3e 6e 4d 6f 64 75 6c 65 41    ((X)->nModuleA
13340 72 67 29 0a 23 65 6c 73 65 0a 23 20 20 64 65 66  rg).#else.#  def
13350 69 6e 65 20 49 73 56 69 72 74 75 61 6c 28 58 29  ine IsVirtual(X)
13360 20 20 20 20 20 20 30 0a 23 65 6e 64 69 66 0a 0a        0.#endif..
13370 2f 2a 0a 2a 2a 20 4d 61 63 72 6f 73 20 74 6f 20  /*.** Macros to 
13380 64 65 74 65 72 6d 69 6e 65 20 69 66 20 61 20 63  determine if a c
13390 6f 6c 75 6d 6e 20 69 73 20 68 69 64 64 65 6e 2e  olumn is hidden.
133a0 20 20 49 73 4f 72 64 69 6e 61 72 79 48 69 64 64    IsOrdinaryHidd
133b0 65 6e 43 6f 6c 75 6d 6e 28 29 0a 2a 2a 20 6f 6e  enColumn().** on
133c0 6c 79 20 77 6f 72 6b 73 20 66 6f 72 20 6e 6f 6e  ly works for non
133d0 2d 76 69 72 74 75 61 6c 20 74 61 62 6c 65 73 20  -virtual tables 
133e0 28 6f 72 64 69 6e 61 72 79 20 74 61 62 6c 65 73  (ordinary tables
133f0 20 61 6e 64 20 76 69 65 77 73 29 20 61 6e 64 20   and views) and 
13400 69 73 0a 2a 2a 20 61 6c 77 61 79 73 20 66 61 6c  is.** always fal
13410 73 65 20 75 6e 6c 65 73 73 20 53 51 4c 49 54 45  se unless SQLITE
13420 5f 45 4e 41 42 4c 45 5f 48 49 44 44 45 4e 5f 43  _ENABLE_HIDDEN_C
13430 4f 4c 55 4d 4e 53 20 69 73 20 64 65 66 69 6e 65  OLUMNS is define
13440 64 2e 20 20 54 68 65 0a 2a 2a 20 49 73 48 69 64  d.  The.** IsHid
13450 64 65 6e 43 6f 6c 75 6d 6e 28 29 20 6d 61 63 72  denColumn() macr
13460 6f 20 69 73 20 67 65 6e 65 72 61 6c 20 70 75 72  o is general pur
13470 70 6f 73 65 2e 0a 2a 2f 0a 23 69 66 20 64 65 66  pose..*/.#if def
13480 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42  ined(SQLITE_ENAB
13490 4c 45 5f 48 49 44 44 45 4e 5f 43 4f 4c 55 4d 4e  LE_HIDDEN_COLUMN
134a0 53 29 0a 23 20 20 64 65 66 69 6e 65 20 49 73 48  S).#  define IsH
134b0 69 64 64 65 6e 43 6f 6c 75 6d 6e 28 58 29 20 20  iddenColumn(X)  
134c0 20 20 20 20 20 20 20 28 28 28 58 29 2d 3e 63 6f         (((X)->co
134d0 6c 46 6c 61 67 73 20 26 20 43 4f 4c 46 4c 41 47  lFlags & COLFLAG
134e0 5f 48 49 44 44 45 4e 29 21 3d 30 29 0a 23 20 20  _HIDDEN)!=0).#  
134f0 64 65 66 69 6e 65 20 49 73 4f 72 64 69 6e 61 72  define IsOrdinar
13500 79 48 69 64 64 65 6e 43 6f 6c 75 6d 6e 28 58 29  yHiddenColumn(X)
13510 20 28 28 28 58 29 2d 3e 63 6f 6c 46 6c 61 67 73   (((X)->colFlags
13520 20 26 20 43 4f 4c 46 4c 41 47 5f 48 49 44 44 45   & COLFLAG_HIDDE
13530 4e 29 21 3d 30 29 0a 23 65 6c 69 66 20 21 64 65  N)!=0).#elif !de
13540 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49  fined(SQLITE_OMI
13550 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 29 0a  T_VIRTUALTABLE).
13560 23 20 20 64 65 66 69 6e 65 20 49 73 48 69 64 64  #  define IsHidd
13570 65 6e 43 6f 6c 75 6d 6e 28 58 29 20 20 20 20 20  enColumn(X)     
13580 20 20 20 20 28 28 28 58 29 2d 3e 63 6f 6c 46 6c      (((X)->colFl
13590 61 67 73 20 26 20 43 4f 4c 46 4c 41 47 5f 48 49  ags & COLFLAG_HI
135a0 44 44 45 4e 29 21 3d 30 29 0a 23 20 20 64 65 66  DDEN)!=0).#  def
135b0 69 6e 65 20 49 73 4f 72 64 69 6e 61 72 79 48 69  ine IsOrdinaryHi
135c0 64 64 65 6e 43 6f 6c 75 6d 6e 28 58 29 20 30 0a  ddenColumn(X) 0.
135d0 23 65 6c 73 65 0a 23 20 20 64 65 66 69 6e 65 20  #else.#  define 
135e0 49 73 48 69 64 64 65 6e 43 6f 6c 75 6d 6e 28 58  IsHiddenColumn(X
135f0 29 20 20 20 20 20 20 20 20 20 30 0a 23 20 20 64  )         0.#  d
13600 65 66 69 6e 65 20 49 73 4f 72 64 69 6e 61 72 79  efine IsOrdinary
13610 48 69 64 64 65 6e 43 6f 6c 75 6d 6e 28 58 29 20  HiddenColumn(X) 
13620 30 0a 23 65 6e 64 69 66 0a 0a 0a 2f 2a 20 44 6f  0.#endif.../* Do
13630 65 73 20 74 68 65 20 74 61 62 6c 65 20 68 61 76  es the table hav
13640 65 20 61 20 72 6f 77 69 64 20 2a 2f 0a 23 64 65  e a rowid */.#de
13650 66 69 6e 65 20 48 61 73 52 6f 77 69 64 28 58 29  fine HasRowid(X)
13660 20 20 20 20 20 28 28 28 58 29 2d 3e 74 61 62 46       (((X)->tabF
13670 6c 61 67 73 20 26 20 54 46 5f 57 69 74 68 6f 75  lags & TF_Withou
13680 74 52 6f 77 69 64 29 3d 3d 30 29 0a 23 64 65 66  tRowid)==0).#def
13690 69 6e 65 20 56 69 73 69 62 6c 65 52 6f 77 69 64  ine VisibleRowid
136a0 28 58 29 20 28 28 28 58 29 2d 3e 74 61 62 46 6c  (X) (((X)->tabFl
136b0 61 67 73 20 26 20 54 46 5f 4e 6f 56 69 73 69 62  ags & TF_NoVisib
136c0 6c 65 52 6f 77 69 64 29 3d 3d 30 29 0a 0a 2f 2a  leRowid)==0)../*
136d0 0a 2a 2a 20 45 61 63 68 20 66 6f 72 65 69 67 6e  .** Each foreign
136e0 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 20   key constraint 
136f0 69 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f  is an instance o
13700 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  f the following 
13710 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a 0a 2a 2a  structure..**.**
13720 20 41 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 69   A foreign key i
13730 73 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  s associated wit
13740 68 20 74 77 6f 20 74 61 62 6c 65 73 2e 20 20 54  h two tables.  T
13750 68 65 20 22 66 72 6f 6d 22 20 74 61 62 6c 65 20  he "from" table 
13760 69 73 0a 2a 2a 20 74 68 65 20 74 61 62 6c 65 20  is.** the table 
13770 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 74 68  that contains th
13780 65 20 52 45 46 45 52 45 4e 43 45 53 20 63 6c 61  e REFERENCES cla
13790 75 73 65 20 74 68 61 74 20 63 72 65 61 74 65 73  use that creates
137a0 20 74 68 65 20 66 6f 72 65 69 67 6e 0a 2a 2a 20   the foreign.** 
137b0 6b 65 79 2e 20 20 54 68 65 20 22 74 6f 22 20 74  key.  The "to" t
137c0 61 62 6c 65 20 69 73 20 74 68 65 20 74 61 62 6c  able is the tabl
137d0 65 20 74 68 61 74 20 69 73 20 6e 61 6d 65 64 20  e that is named 
137e0 69 6e 20 74 68 65 20 52 45 46 45 52 45 4e 43 45  in the REFERENCE
137f0 53 20 63 6c 61 75 73 65 2e 0a 2a 2a 20 43 6f 6e  S clause..** Con
13800 73 69 64 65 72 20 74 68 69 73 20 65 78 61 6d 70  sider this examp
13810 6c 65 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 43 52  le:.**.**     CR
13820 45 41 54 45 20 54 41 42 4c 45 20 65 78 31 28 0a  EATE TABLE ex1(.
13830 2a 2a 20 20 20 20 20 20 20 61 20 49 4e 54 45 47  **       a INTEG
13840 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59 2c 0a  ER PRIMARY KEY,.
13850 2a 2a 20 20 20 20 20 20 20 62 20 49 4e 54 45 47  **       b INTEG
13860 45 52 20 43 4f 4e 53 54 52 41 49 4e 54 20 66 6b  ER CONSTRAINT fk
13870 31 20 52 45 46 45 52 45 4e 43 45 53 20 65 78 32  1 REFERENCES ex2
13880 28 78 29 0a 2a 2a 20 20 20 20 20 29 3b 0a 2a 2a  (x).**     );.**
13890 0a 2a 2a 20 46 6f 72 20 66 6f 72 65 69 67 6e 20  .** For foreign 
138a0 6b 65 79 20 22 66 6b 31 22 2c 20 74 68 65 20 66  key "fk1", the f
138b0 72 6f 6d 2d 74 61 62 6c 65 20 69 73 20 22 65 78  rom-table is "ex
138c0 31 22 20 61 6e 64 20 74 68 65 20 74 6f 2d 74 61  1" and the to-ta
138d0 62 6c 65 20 69 73 20 22 65 78 32 22 2e 0a 2a 2a  ble is "ex2"..**
138e0 20 45 71 75 69 76 61 6c 65 6e 74 20 6e 61 6d 65   Equivalent name
138f0 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 66 72 6f  s:.**.**     fro
13900 6d 2d 74 61 62 6c 65 20 3d 3d 20 63 68 69 6c 64  m-table == child
13910 2d 74 61 62 6c 65 0a 2a 2a 20 20 20 20 20 20 20  -table.**       
13920 74 6f 2d 74 61 62 6c 65 20 3d 3d 20 70 61 72 65  to-table == pare
13930 6e 74 2d 74 61 62 6c 65 0a 2a 2a 0a 2a 2a 20 45  nt-table.**.** E
13940 61 63 68 20 52 45 46 45 52 45 4e 43 45 53 20 63  ach REFERENCES c
13950 6c 61 75 73 65 20 67 65 6e 65 72 61 74 65 73 20  lause generates 
13960 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  an instance of t
13970 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72  he following str
13980 75 63 74 75 72 65 0a 2a 2a 20 77 68 69 63 68 20  ucture.** which 
13990 69 73 20 61 74 74 61 63 68 65 64 20 74 6f 20 74  is attached to t
139a0 68 65 20 66 72 6f 6d 2d 74 61 62 6c 65 2e 20 20  he from-table.  
139b0 54 68 65 20 74 6f 2d 74 61 62 6c 65 20 6e 65 65  The to-table nee
139c0 64 20 6e 6f 74 20 65 78 69 73 74 20 77 68 65 6e  d not exist when
139d0 0a 2a 2a 20 74 68 65 20 66 72 6f 6d 2d 74 61 62  .** the from-tab
139e0 6c 65 20 69 73 20 63 72 65 61 74 65 64 2e 20 20  le is created.  
139f0 54 68 65 20 65 78 69 73 74 65 6e 63 65 20 6f 66  The existence of
13a00 20 74 68 65 20 74 6f 2d 74 61 62 6c 65 20 69 73   the to-table is
13a10 20 6e 6f 74 20 63 68 65 63 6b 65 64 2e 0a 2a 2a   not checked..**
13a20 0a 2a 2a 20 54 68 65 20 6c 69 73 74 20 6f 66 20  .** The list of 
13a30 61 6c 6c 20 70 61 72 65 6e 74 73 20 66 6f 72 20  all parents for 
13a40 63 68 69 6c 64 20 54 61 62 6c 65 20 58 20 69 73  child Table X is
13a50 20 68 65 6c 64 20 61 74 20 58 2e 70 46 4b 65 79   held at X.pFKey
13a60 2e 0a 2a 2a 0a 2a 2a 20 41 20 6c 69 73 74 20 6f  ..**.** A list o
13a70 66 20 61 6c 6c 20 63 68 69 6c 64 72 65 6e 20 66  f all children f
13a80 6f 72 20 61 20 74 61 62 6c 65 20 6e 61 6d 65 64  or a table named
13a90 20 5a 20 28 77 68 69 63 68 20 6d 69 67 68 74 20   Z (which might 
13aa0 6e 6f 74 20 65 76 65 6e 20 65 78 69 73 74 29 0a  not even exist).
13ab0 2a 2a 20 69 73 20 68 65 6c 64 20 69 6e 20 53 63  ** is held in Sc
13ac0 68 65 6d 61 2e 66 6b 65 79 48 61 73 68 20 77 69  hema.fkeyHash wi
13ad0 74 68 20 61 20 68 61 73 68 20 6b 65 79 20 6f 66  th a hash key of
13ae0 20 5a 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 46 4b   Z..*/.struct FK
13af0 65 79 20 7b 0a 20 20 54 61 62 6c 65 20 2a 70 46  ey {.  Table *pF
13b00 72 6f 6d 3b 20 20 20 20 20 2f 2a 20 54 61 62 6c  rom;     /* Tabl
13b10 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65  e containing the
13b20 20 52 45 46 45 52 45 4e 43 45 53 20 63 6c 61 75   REFERENCES clau
13b30 73 65 20 28 61 6b 61 3a 20 43 68 69 6c 64 29 20  se (aka: Child) 
13b40 2a 2f 0a 20 20 46 4b 65 79 20 2a 70 4e 65 78 74  */.  FKey *pNext
13b50 46 72 6f 6d 3b 20 20 2f 2a 20 4e 65 78 74 20 46  From;  /* Next F
13b60 4b 65 79 20 77 69 74 68 20 74 68 65 20 73 61 6d  Key with the sam
13b70 65 20 69 6e 20 70 46 72 6f 6d 2e 20 4e 65 78 74  e in pFrom. Next
13b80 20 70 61 72 65 6e 74 20 6f 66 20 70 46 72 6f 6d   parent of pFrom
13b90 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 54 6f 3b   */.  char *zTo;
13ba0 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20          /* Name 
13bb0 6f 66 20 74 61 62 6c 65 20 74 68 61 74 20 74 68  of table that th
13bc0 65 20 6b 65 79 20 70 6f 69 6e 74 73 20 74 6f 20  e key points to 
13bd0 28 61 6b 61 3a 20 50 61 72 65 6e 74 29 20 2a 2f  (aka: Parent) */
13be0 0a 20 20 46 4b 65 79 20 2a 70 4e 65 78 74 54 6f  .  FKey *pNextTo
13bf0 3b 20 20 20 20 2f 2a 20 4e 65 78 74 20 77 69 74  ;    /* Next wit
13c00 68 20 74 68 65 20 73 61 6d 65 20 7a 54 6f 2e 20  h the same zTo. 
13c10 4e 65 78 74 20 63 68 69 6c 64 20 6f 66 20 7a 54  Next child of zT
13c20 6f 2e 20 2a 2f 0a 20 20 46 4b 65 79 20 2a 70 50  o. */.  FKey *pP
13c30 72 65 76 54 6f 3b 20 20 20 20 2f 2a 20 50 72 65  revTo;    /* Pre
13c40 76 69 6f 75 73 20 77 69 74 68 20 74 68 65 20 73  vious with the s
13c50 61 6d 65 20 7a 54 6f 20 2a 2f 0a 20 20 69 6e 74  ame zTo */.  int
13c60 20 6e 43 6f 6c 3b 20 20 20 20 20 20 20 20 20 2f   nCol;         /
13c70 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75  * Number of colu
13c80 6d 6e 73 20 69 6e 20 74 68 69 73 20 6b 65 79 20  mns in this key 
13c90 2a 2f 0a 20 20 2f 2a 20 45 56 3a 20 52 2d 33 30  */.  /* EV: R-30
13ca0 33 32 33 2d 32 31 39 31 37 20 2a 2f 0a 20 20 75  323-21917 */.  u
13cb0 38 20 69 73 44 65 66 65 72 72 65 64 3b 20 20 20  8 isDeferred;   
13cc0 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 63      /* True if c
13cd0 6f 6e 73 74 72 61 69 6e 74 20 63 68 65 63 6b 69  onstraint checki
13ce0 6e 67 20 69 73 20 64 65 66 65 72 72 65 64 20 74  ng is deferred t
13cf0 69 6c 6c 20 43 4f 4d 4d 49 54 20 2a 2f 0a 20 20  ill COMMIT */.  
13d00 75 38 20 61 41 63 74 69 6f 6e 5b 32 5d 3b 20 20  u8 aAction[2];  
13d10 20 20 20 20 20 20 2f 2a 20 4f 4e 20 44 45 4c 45        /* ON DELE
13d20 54 45 20 61 6e 64 20 4f 4e 20 55 50 44 41 54 45  TE and ON UPDATE
13d30 20 61 63 74 69 6f 6e 73 2c 20 72 65 73 70 65 63   actions, respec
13d40 74 69 76 65 6c 79 20 2a 2f 0a 20 20 54 72 69 67  tively */.  Trig
13d50 67 65 72 20 2a 61 70 54 72 69 67 67 65 72 5b 32  ger *apTrigger[2
13d60 5d 3b 2f 2a 20 54 72 69 67 67 65 72 73 20 66 6f  ];/* Triggers fo
13d70 72 20 61 41 63 74 69 6f 6e 5b 5d 20 61 63 74 69  r aAction[] acti
13d80 6f 6e 73 20 2a 2f 0a 20 20 73 74 72 75 63 74 20  ons */.  struct 
13d90 73 43 6f 6c 4d 61 70 20 7b 20 20 20 20 20 20 2f  sColMap {      /
13da0 2a 20 4d 61 70 70 69 6e 67 20 6f 66 20 63 6f 6c  * Mapping of col
13db0 75 6d 6e 73 20 69 6e 20 70 46 72 6f 6d 20 74 6f  umns in pFrom to
13dc0 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 7a 54 6f 20   columns in zTo 
13dd0 2a 2f 0a 20 20 20 20 69 6e 74 20 69 46 72 6f 6d  */.    int iFrom
13de0 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
13df0 49 6e 64 65 78 20 6f 66 20 63 6f 6c 75 6d 6e 20  Index of column 
13e00 69 6e 20 70 46 72 6f 6d 20 2a 2f 0a 20 20 20 20  in pFrom */.    
13e10 63 68 61 72 20 2a 7a 43 6f 6c 3b 20 20 20 20 20  char *zCol;     
13e20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66        /* Name of
13e30 20 63 6f 6c 75 6d 6e 20 69 6e 20 7a 54 6f 2e 20   column in zTo. 
13e40 20 49 66 20 4e 55 4c 4c 20 75 73 65 20 50 52 49   If NULL use PRI
13e50 4d 41 52 59 20 4b 45 59 20 2a 2f 0a 20 20 7d 20  MARY KEY */.  } 
13e60 61 43 6f 6c 5b 31 5d 3b 20 20 20 20 20 20 20 20  aCol[1];        
13e70 20 20 20 20 2f 2a 20 4f 6e 65 20 65 6e 74 72 79      /* One entry
13e80 20 66 6f 72 20 65 61 63 68 20 6f 66 20 6e 43 6f   for each of nCo
13e90 6c 20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 7d 3b 0a  l columns */.};.
13ea0 0a 2f 2a 0a 2a 2a 20 53 51 4c 69 74 65 20 73 75  ./*.** SQLite su
13eb0 70 70 6f 72 74 73 20 6d 61 6e 79 20 64 69 66 66  pports many diff
13ec0 65 72 65 6e 74 20 77 61 79 73 20 74 6f 20 72 65  erent ways to re
13ed0 73 6f 6c 76 65 20 61 20 63 6f 6e 73 74 72 61 69  solve a constrai
13ee0 6e 74 0a 2a 2a 20 65 72 72 6f 72 2e 20 20 52 4f  nt.** error.  RO
13ef0 4c 4c 42 41 43 4b 20 70 72 6f 63 65 73 73 69 6e  LLBACK processin
13f00 67 20 6d 65 61 6e 73 20 74 68 61 74 20 61 20 63  g means that a c
13f10 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74  onstraint violat
13f20 69 6f 6e 0a 2a 2a 20 63 61 75 73 65 73 20 74 68  ion.** causes th
13f30 65 20 6f 70 65 72 61 74 69 6f 6e 20 69 6e 20 70  e operation in p
13f40 72 6f 63 65 73 73 20 74 6f 20 66 61 69 6c 20 61  rocess to fail a
13f50 6e 64 20 66 6f 72 20 74 68 65 20 63 75 72 72 65  nd for the curre
13f60 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 0a 2a  nt transaction.*
13f70 2a 20 74 6f 20 62 65 20 72 6f 6c 6c 65 64 20 62  * to be rolled b
13f80 61 63 6b 2e 20 20 41 42 4f 52 54 20 70 72 6f 63  ack.  ABORT proc
13f90 65 73 73 69 6e 67 20 6d 65 61 6e 73 20 74 68 65  essing means the
13fa0 20 6f 70 65 72 61 74 69 6f 6e 20 69 6e 20 70 72   operation in pr
13fb0 6f 63 65 73 73 0a 2a 2a 20 66 61 69 6c 73 20 61  ocess.** fails a
13fc0 6e 64 20 61 6e 79 20 70 72 69 6f 72 20 63 68 61  nd any prior cha
13fd0 6e 67 65 73 20 66 72 6f 6d 20 74 68 61 74 20 6f  nges from that o
13fe0 6e 65 20 6f 70 65 72 61 74 69 6f 6e 20 61 72 65  ne operation are
13ff0 20 62 61 63 6b 65 64 20 6f 75 74 2c 0a 2a 2a 20   backed out,.** 
14000 62 75 74 20 74 68 65 20 74 72 61 6e 73 61 63 74  but the transact
14010 69 6f 6e 20 69 73 20 6e 6f 74 20 72 6f 6c 6c 65  ion is not rolle
14020 64 20 62 61 63 6b 2e 20 20 46 41 49 4c 20 70 72  d back.  FAIL pr
14030 6f 63 65 73 73 69 6e 67 20 6d 65 61 6e 73 20 74  ocessing means t
14040 68 61 74 0a 2a 2a 20 74 68 65 20 6f 70 65 72 61  hat.** the opera
14050 74 69 6f 6e 20 69 6e 20 70 72 6f 67 72 65 73 73  tion in progress
14060 20 73 74 6f 70 73 20 61 6e 64 20 72 65 74 75 72   stops and retur
14070 6e 73 20 61 6e 20 65 72 72 6f 72 20 63 6f 64 65  ns an error code
14080 2e 20 20 42 75 74 20 70 72 69 6f 72 0a 2a 2a 20  .  But prior.** 
14090 63 68 61 6e 67 65 73 20 64 75 65 20 74 6f 20 74  changes due to t
140a0 68 65 20 73 61 6d 65 20 6f 70 65 72 61 74 69 6f  he same operatio
140b0 6e 20 61 72 65 20 6e 6f 74 20 62 61 63 6b 65 64  n are not backed
140c0 20 6f 75 74 20 61 6e 64 20 6e 6f 20 72 6f 6c 6c   out and no roll
140d0 62 61 63 6b 0a 2a 2a 20 6f 63 63 75 72 73 2e 20  back.** occurs. 
140e0 20 49 47 4e 4f 52 45 20 6d 65 61 6e 73 20 74 68   IGNORE means th
140f0 61 74 20 74 68 65 20 70 61 72 74 69 63 75 6c 61  at the particula
14100 72 20 72 6f 77 20 74 68 61 74 20 63 61 75 73 65  r row that cause
14110 64 20 74 68 65 20 63 6f 6e 73 74 72 61 69 6e 74  d the constraint
14120 0a 2a 2a 20 65 72 72 6f 72 20 69 73 20 6e 6f 74  .** error is not
14130 20 69 6e 73 65 72 74 65 64 20 6f 72 20 75 70 64   inserted or upd
14140 61 74 65 64 2e 20 20 50 72 6f 63 65 73 73 69 6e  ated.  Processin
14150 67 20 63 6f 6e 74 69 6e 75 65 73 20 61 6e 64 20  g continues and 
14160 6e 6f 20 65 72 72 6f 72 0a 2a 2a 20 69 73 20 72  no error.** is r
14170 65 74 75 72 6e 65 64 2e 20 20 52 45 50 4c 41 43  eturned.  REPLAC
14180 45 20 6d 65 61 6e 73 20 74 68 61 74 20 70 72 65  E means that pre
14190 65 78 69 73 74 69 6e 67 20 64 61 74 61 62 61 73  existing databas
141a0 65 20 72 6f 77 73 20 74 68 61 74 20 63 61 75 73  e rows that caus
141b0 65 64 0a 2a 2a 20 61 20 55 4e 49 51 55 45 20 63  ed.** a UNIQUE c
141c0 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74  onstraint violat
141d0 69 6f 6e 20 61 72 65 20 72 65 6d 6f 76 65 64 20  ion are removed 
141e0 73 6f 20 74 68 61 74 20 74 68 65 20 6e 65 77 20  so that the new 
141f0 69 6e 73 65 72 74 20 6f 72 0a 2a 2a 20 75 70 64  insert or.** upd
14200 61 74 65 20 63 61 6e 20 70 72 6f 63 65 65 64 2e  ate can proceed.
14210 20 20 50 72 6f 63 65 73 73 69 6e 67 20 63 6f 6e    Processing con
14220 74 69 6e 75 65 73 20 61 6e 64 20 6e 6f 20 65 72  tinues and no er
14230 72 6f 72 20 69 73 20 72 65 70 6f 72 74 65 64 2e  ror is reported.
14240 0a 2a 2a 0a 2a 2a 20 52 45 53 54 52 49 43 54 2c  .**.** RESTRICT,
14250 20 53 45 54 4e 55 4c 4c 2c 20 61 6e 64 20 43 41   SETNULL, and CA
14260 53 43 41 44 45 20 61 63 74 69 6f 6e 73 20 61 70  SCADE actions ap
14270 70 6c 79 20 6f 6e 6c 79 20 74 6f 20 66 6f 72 65  ply only to fore
14280 69 67 6e 20 6b 65 79 73 2e 0a 2a 2a 20 52 45 53  ign keys..** RES
14290 54 52 49 43 54 20 69 73 20 74 68 65 20 73 61 6d  TRICT is the sam
142a0 65 20 61 73 20 41 42 4f 52 54 20 66 6f 72 20 49  e as ABORT for I
142b0 4d 4d 45 44 49 41 54 45 20 66 6f 72 65 69 67 6e  MMEDIATE foreign
142c0 20 6b 65 79 73 20 61 6e 64 20 74 68 65 0a 2a 2a   keys and the.**
142d0 20 73 61 6d 65 20 61 73 20 52 4f 4c 4c 42 41 43   same as ROLLBAC
142e0 4b 20 66 6f 72 20 44 45 46 45 52 52 45 44 20 6b  K for DEFERRED k
142f0 65 79 73 2e 20 20 53 45 54 4e 55 4c 4c 20 6d 65  eys.  SETNULL me
14300 61 6e 73 20 74 68 61 74 20 74 68 65 20 66 6f 72  ans that the for
14310 65 69 67 6e 0a 2a 2a 20 6b 65 79 20 69 73 20 73  eign.** key is s
14320 65 74 20 74 6f 20 4e 55 4c 4c 2e 20 20 43 41 53  et to NULL.  CAS
14330 43 41 44 45 20 6d 65 61 6e 73 20 74 68 61 74 20  CADE means that 
14340 61 20 44 45 4c 45 54 45 20 6f 72 20 55 50 44 41  a DELETE or UPDA
14350 54 45 20 6f 66 20 74 68 65 0a 2a 2a 20 72 65 66  TE of the.** ref
14360 65 72 65 6e 63 65 64 20 74 61 62 6c 65 20 72 6f  erenced table ro
14370 77 20 69 73 20 70 72 6f 70 61 67 61 74 65 64 20  w is propagated 
14380 69 6e 74 6f 20 74 68 65 20 72 6f 77 20 74 68 61  into the row tha
14390 74 20 68 6f 6c 64 73 20 74 68 65 0a 2a 2a 20 66  t holds the.** f
143a0 6f 72 65 69 67 6e 20 6b 65 79 2e 0a 2a 2a 0a 2a  oreign key..**.*
143b0 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  * The following 
143c0 73 79 6d 62 6f 6c 69 63 20 76 61 6c 75 65 73 20  symbolic values 
143d0 61 72 65 20 75 73 65 64 20 74 6f 20 72 65 63 6f  are used to reco
143e0 72 64 20 77 68 69 63 68 20 74 79 70 65 0a 2a 2a  rd which type.**
143f0 20 6f 66 20 61 63 74 69 6f 6e 20 74 6f 20 74 61   of action to ta
14400 6b 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  ke..*/.#define O
14410 45 5f 4e 6f 6e 65 20 20 20 20 20 30 20 20 20 2f  E_None     0   /
14420 2a 20 54 68 65 72 65 20 69 73 20 6e 6f 20 63 6f  * There is no co
14430 6e 73 74 72 61 69 6e 74 20 74 6f 20 63 68 65 63  nstraint to chec
14440 6b 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f  k */.#define OE_
14450 52 6f 6c 6c 62 61 63 6b 20 31 20 20 20 2f 2a 20  Rollback 1   /* 
14460 46 61 69 6c 20 74 68 65 20 6f 70 65 72 61 74 69  Fail the operati
14470 6f 6e 20 61 6e 64 20 72 6f 6c 6c 62 61 63 6b 20  on and rollback 
14480 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  the transaction 
14490 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 41 62  */.#define OE_Ab
144a0 6f 72 74 20 20 20 20 32 20 20 20 2f 2a 20 42 61  ort    2   /* Ba
144b0 63 6b 20 6f 75 74 20 63 68 61 6e 67 65 73 20 62  ck out changes b
144c0 75 74 20 64 6f 20 6e 6f 20 72 6f 6c 6c 62 61 63  ut do no rollbac
144d0 6b 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 2a 2f  k transaction */
144e0 0a 23 64 65 66 69 6e 65 20 4f 45 5f 46 61 69 6c  .#define OE_Fail
144f0 20 20 20 20 20 33 20 20 20 2f 2a 20 53 74 6f 70       3   /* Stop
14500 20 74 68 65 20 6f 70 65 72 61 74 69 6f 6e 20 62   the operation b
14510 75 74 20 6c 65 61 76 65 20 61 6c 6c 20 70 72 69  ut leave all pri
14520 6f 72 20 63 68 61 6e 67 65 73 20 2a 2f 0a 23 64  or changes */.#d
14530 65 66 69 6e 65 20 4f 45 5f 49 67 6e 6f 72 65 20  efine OE_Ignore 
14540 20 20 34 20 20 20 2f 2a 20 49 67 6e 6f 72 65 20    4   /* Ignore 
14550 74 68 65 20 65 72 72 6f 72 2e 20 44 6f 20 6e 6f  the error. Do no
14560 74 20 64 6f 20 74 68 65 20 49 4e 53 45 52 54 20  t do the INSERT 
14570 6f 72 20 55 50 44 41 54 45 20 2a 2f 0a 23 64 65  or UPDATE */.#de
14580 66 69 6e 65 20 4f 45 5f 52 65 70 6c 61 63 65 20  fine OE_Replace 
14590 20 35 20 20 20 2f 2a 20 44 65 6c 65 74 65 20 65   5   /* Delete e
145a0 78 69 73 74 69 6e 67 20 72 65 63 6f 72 64 2c 20  xisting record, 
145b0 74 68 65 6e 20 64 6f 20 49 4e 53 45 52 54 20 6f  then do INSERT o
145c0 72 20 55 50 44 41 54 45 20 2a 2f 0a 23 64 65 66  r UPDATE */.#def
145d0 69 6e 65 20 4f 45 5f 55 70 64 61 74 65 20 20 20  ine OE_Update   
145e0 36 20 20 20 2f 2a 20 50 72 6f 63 65 73 73 20 61  6   /* Process a
145f0 73 20 61 20 44 4f 20 55 50 44 41 54 45 20 69 6e  s a DO UPDATE in
14600 20 61 6e 20 75 70 73 65 72 74 20 2a 2f 0a 23 64   an upsert */.#d
14610 65 66 69 6e 65 20 4f 45 5f 52 65 73 74 72 69 63  efine OE_Restric
14620 74 20 37 20 20 20 2f 2a 20 4f 45 5f 41 62 6f 72  t 7   /* OE_Abor
14630 74 20 66 6f 72 20 49 4d 4d 45 44 49 41 54 45 2c  t for IMMEDIATE,
14640 20 4f 45 5f 52 6f 6c 6c 62 61 63 6b 20 66 6f 72   OE_Rollback for
14650 20 44 45 46 45 52 52 45 44 20 2a 2f 0a 23 64 65   DEFERRED */.#de
14660 66 69 6e 65 20 4f 45 5f 53 65 74 4e 75 6c 6c 20  fine OE_SetNull 
14670 20 38 20 20 20 2f 2a 20 53 65 74 20 74 68 65 20   8   /* Set the 
14680 66 6f 72 65 69 67 6e 20 6b 65 79 20 76 61 6c 75  foreign key valu
14690 65 20 74 6f 20 4e 55 4c 4c 20 2a 2f 0a 23 64 65  e to NULL */.#de
146a0 66 69 6e 65 20 4f 45 5f 53 65 74 44 66 6c 74 20  fine OE_SetDflt 
146b0 20 39 20 20 20 2f 2a 20 53 65 74 20 74 68 65 20   9   /* Set the 
146c0 66 6f 72 65 69 67 6e 20 6b 65 79 20 76 61 6c 75  foreign key valu
146d0 65 20 74 6f 20 69 74 73 20 64 65 66 61 75 6c 74  e to its default
146e0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 43   */.#define OE_C
146f0 61 73 63 61 64 65 20 20 31 30 20 20 2f 2a 20 43  ascade  10  /* C
14700 61 73 63 61 64 65 20 74 68 65 20 63 68 61 6e 67  ascade the chang
14710 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45  es */.#define OE
14720 5f 44 65 66 61 75 6c 74 20 20 31 31 20 20 2f 2a  _Default  11  /*
14730 20 44 6f 20 77 68 61 74 65 76 65 72 20 74 68 65   Do whatever the
14740 20 64 65 66 61 75 6c 74 20 61 63 74 69 6f 6e 20   default action 
14750 69 73 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 41 6e  is */.../*.** An
14760 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65   instance of the
14770 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63   following struc
14780 74 75 72 65 20 69 73 20 70 61 73 73 65 64 20 61  ture is passed a
14790 73 20 74 68 65 20 66 69 72 73 74 0a 2a 2a 20 61  s the first.** a
147a0 72 67 75 6d 65 6e 74 20 74 6f 20 73 71 6c 69 74  rgument to sqlit
147b0 65 33 56 64 62 65 4b 65 79 43 6f 6d 70 61 72 65  e3VdbeKeyCompare
147c0 20 61 6e 64 20 69 73 20 75 73 65 64 20 74 6f 20   and is used to 
147d0 63 6f 6e 74 72 6f 6c 20 74 68 65 0a 2a 2a 20 63  control the.** c
147e0 6f 6d 70 61 72 69 73 6f 6e 20 6f 66 20 74 68 65  omparison of the
147f0 20 74 77 6f 20 69 6e 64 65 78 20 6b 65 79 73 2e   two index keys.
14800 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65 20 74 68 61 74  .**.** Note that
14810 20 61 53 6f 72 74 4f 72 64 65 72 5b 5d 20 61 6e   aSortOrder[] an
14820 64 20 61 43 6f 6c 6c 5b 5d 20 68 61 76 65 20 6e  d aColl[] have n
14830 46 69 65 6c 64 2b 31 20 73 6c 6f 74 73 2e 20 20  Field+1 slots.  
14840 54 68 65 72 65 0a 2a 2a 20 61 72 65 20 6e 46 69  There.** are nFi
14850 65 6c 64 20 73 6c 6f 74 73 20 66 6f 72 20 74 68  eld slots for th
14860 65 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 61 6e 20  e columns of an 
14870 69 6e 64 65 78 20 74 68 65 6e 20 6f 6e 65 20 65  index then one e
14880 78 74 72 61 20 73 6c 6f 74 0a 2a 2a 20 66 6f 72  xtra slot.** for
14890 20 74 68 65 20 72 6f 77 69 64 20 61 74 20 74 68   the rowid at th
148a0 65 20 65 6e 64 2e 0a 2a 2f 0a 73 74 72 75 63 74  e end..*/.struct
148b0 20 4b 65 79 49 6e 66 6f 20 7b 0a 20 20 75 33 32   KeyInfo {.  u32
148c0 20 6e 52 65 66 3b 20 20 20 20 20 20 20 20 20 20   nRef;          
148d0 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 72 65   /* Number of re
148e0 66 65 72 65 6e 63 65 73 20 74 6f 20 74 68 69 73  ferences to this
148f0 20 4b 65 79 49 6e 66 6f 20 6f 62 6a 65 63 74 20   KeyInfo object 
14900 2a 2f 0a 20 20 75 38 20 65 6e 63 3b 20 20 20 20  */.  u8 enc;    
14910 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78 74           /* Text
14920 20 65 6e 63 6f 64 69 6e 67 20 2d 20 6f 6e 65 20   encoding - one 
14930 6f 66 20 74 68 65 20 53 51 4c 49 54 45 5f 55 54  of the SQLITE_UT
14940 46 2a 20 76 61 6c 75 65 73 20 2a 2f 0a 20 20 75  F* values */.  u
14950 31 36 20 6e 4b 65 79 46 69 65 6c 64 3b 20 20 20  16 nKeyField;   
14960 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
14970 6b 65 79 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74  key columns in t
14980 68 65 20 69 6e 64 65 78 20 2a 2f 0a 20 20 75 31  he index */.  u1
14990 36 20 6e 41 6c 6c 46 69 65 6c 64 3b 20 20 20 20  6 nAllField;    
149a0 20 20 2f 2a 20 54 6f 74 61 6c 20 63 6f 6c 75 6d    /* Total colum
149b0 6e 73 2c 20 69 6e 63 6c 75 64 69 6e 67 20 6b 65  ns, including ke
149c0 79 20 70 6c 75 73 20 6f 74 68 65 72 73 20 2a 2f  y plus others */
149d0 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 20  .  sqlite3 *db; 
149e0 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 64 61         /* The da
149f0 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f  tabase connectio
14a00 6e 20 2a 2f 0a 20 20 75 38 20 2a 61 53 6f 72 74  n */.  u8 *aSort
14a10 4f 72 64 65 72 3b 20 20 20 20 20 2f 2a 20 53 6f  Order;     /* So
14a20 72 74 20 6f 72 64 65 72 20 66 6f 72 20 65 61 63  rt order for eac
14a30 68 20 63 6f 6c 75 6d 6e 2e 20 2a 2f 0a 20 20 43  h column. */.  C
14a40 6f 6c 6c 53 65 71 20 2a 61 43 6f 6c 6c 5b 31 5d  ollSeq *aColl[1]
14a50 3b 20 20 2f 2a 20 43 6f 6c 6c 61 74 69 6e 67 20  ;  /* Collating 
14a60 73 65 71 75 65 6e 63 65 20 66 6f 72 20 65 61 63  sequence for eac
14a70 68 20 74 65 72 6d 20 6f 66 20 74 68 65 20 6b 65  h term of the ke
14a80 79 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54  y */.};../*.** T
14a90 68 69 73 20 6f 62 6a 65 63 74 20 68 6f 6c 64 73  his object holds
14aa0 20 61 20 72 65 63 6f 72 64 20 77 68 69 63 68 20   a record which 
14ab0 68 61 73 20 62 65 65 6e 20 70 61 72 73 65 64 20  has been parsed 
14ac0 6f 75 74 20 69 6e 74 6f 20 69 6e 64 69 76 69 64  out into individ
14ad0 75 61 6c 0a 2a 2a 20 66 69 65 6c 64 73 2c 20 66  ual.** fields, f
14ae0 6f 72 20 74 68 65 20 70 75 72 70 6f 73 65 73 20  or the purposes 
14af0 6f 66 20 64 6f 69 6e 67 20 61 20 63 6f 6d 70 61  of doing a compa
14b00 72 69 73 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 41 20 72  rison..**.** A r
14b10 65 63 6f 72 64 20 69 73 20 61 6e 20 6f 62 6a 65  ecord is an obje
14b20 63 74 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73  ct that contains
14b30 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 66 69 65   one or more fie
14b40 6c 64 73 20 6f 66 20 64 61 74 61 2e 0a 2a 2a 20  lds of data..** 
14b50 52 65 63 6f 72 64 73 20 61 72 65 20 75 73 65 64  Records are used
14b60 20 74 6f 20 73 74 6f 72 65 20 74 68 65 20 63 6f   to store the co
14b70 6e 74 65 6e 74 20 6f 66 20 61 20 74 61 62 6c 65  ntent of a table
14b80 20 72 6f 77 20 61 6e 64 20 74 6f 20 73 74 6f 72   row and to stor
14b90 65 0a 2a 2a 20 74 68 65 20 6b 65 79 20 6f 66 20  e.** the key of 
14ba0 61 6e 20 69 6e 64 65 78 2e 20 20 41 20 62 6c 6f  an index.  A blo
14bb0 62 20 65 6e 63 6f 64 69 6e 67 20 6f 66 20 61 20  b encoding of a 
14bc0 72 65 63 6f 72 64 20 69 73 20 63 72 65 61 74 65  record is create
14bd0 64 20 62 79 0a 2a 2a 20 74 68 65 20 4f 50 5f 4d  d by.** the OP_M
14be0 61 6b 65 52 65 63 6f 72 64 20 6f 70 63 6f 64 65  akeRecord opcode
14bf0 20 6f 66 20 74 68 65 20 56 44 42 45 20 61 6e 64   of the VDBE and
14c00 20 69 73 20 64 69 73 61 73 73 65 6d 62 6c 65 64   is disassembled
14c10 20 62 79 20 74 68 65 0a 2a 2a 20 4f 50 5f 43 6f   by the.** OP_Co
14c20 6c 75 6d 6e 20 6f 70 63 6f 64 65 2e 0a 2a 2a 0a  lumn opcode..**.
14c30 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f  ** An instance o
14c40 66 20 74 68 69 73 20 6f 62 6a 65 63 74 20 73 65  f this object se
14c50 72 76 65 73 20 61 73 20 61 20 22 6b 65 79 22 20  rves as a "key" 
14c60 66 6f 72 20 64 6f 69 6e 67 20 61 20 73 65 61 72  for doing a sear
14c70 63 68 20 6f 6e 0a 2a 2a 20 61 6e 20 69 6e 64 65  ch on.** an inde
14c80 78 20 62 2b 74 72 65 65 2e 20 54 68 65 20 67 6f  x b+tree. The go
14c90 61 6c 20 6f 66 20 74 68 65 20 73 65 61 72 63 68  al of the search
14ca0 20 69 73 20 74 6f 20 66 69 6e 64 20 74 68 65 20   is to find the 
14cb0 65 6e 74 72 79 20 74 68 61 74 0a 2a 2a 20 69 73  entry that.** is
14cc0 20 63 6c 6f 73 65 64 20 74 6f 20 74 68 65 20 6b   closed to the k
14cd0 65 79 20 64 65 73 63 72 69 62 65 64 20 62 79 20  ey described by 
14ce0 74 68 69 73 20 6f 62 6a 65 63 74 2e 20 20 54 68  this object.  Th
14cf0 69 73 20 6f 62 6a 65 63 74 20 6d 69 67 68 74 20  is object might 
14d00 68 6f 6c 64 0a 2a 2a 20 6a 75 73 74 20 61 20 70  hold.** just a p
14d10 72 65 66 69 78 20 6f 66 20 74 68 65 20 6b 65 79  refix of the key
14d20 2e 20 20 54 68 65 20 6e 75 6d 62 65 72 20 6f 66  .  The number of
14d30 20 66 69 65 6c 64 73 20 69 73 20 67 69 76 65 6e   fields is given
14d40 20 62 79 0a 2a 2a 20 70 4b 65 79 49 6e 66 6f 2d   by.** pKeyInfo-
14d50 3e 6e 46 69 65 6c 64 2e 0a 2a 2a 0a 2a 2a 20 54  >nField..**.** T
14d60 68 65 20 72 31 20 61 6e 64 20 72 32 20 66 69 65  he r1 and r2 fie
14d70 6c 64 73 20 61 72 65 20 74 68 65 20 76 61 6c 75  lds are the valu
14d80 65 73 20 74 6f 20 72 65 74 75 72 6e 20 69 66 20  es to return if 
14d90 74 68 69 73 20 6b 65 79 20 69 73 20 6c 65 73 73  this key is less
14da0 20 74 68 61 6e 0a 2a 2a 20 6f 72 20 67 72 65 61   than.** or grea
14db0 74 65 72 20 74 68 61 6e 20 61 20 6b 65 79 20 69  ter than a key i
14dc0 6e 20 74 68 65 20 62 74 72 65 65 2c 20 72 65 73  n the btree, res
14dd0 70 65 63 74 69 76 65 6c 79 2e 20 20 54 68 65 73  pectively.  Thes
14de0 65 20 61 72 65 20 6e 6f 72 6d 61 6c 6c 79 0a 2a  e are normally.*
14df0 2a 20 2d 31 20 61 6e 64 20 2b 31 20 72 65 73 70  * -1 and +1 resp
14e00 65 63 74 69 76 65 6c 79 2c 20 62 75 74 20 6d 69  ectively, but mi
14e10 67 68 74 20 62 65 20 69 6e 76 65 72 74 65 64 20  ght be inverted 
14e20 74 6f 20 2b 31 20 61 6e 64 20 2d 31 20 69 66 20  to +1 and -1 if 
14e30 74 68 65 20 62 2d 74 72 65 65 0a 2a 2a 20 69 73  the b-tree.** is
14e40 20 69 6e 20 44 45 53 43 20 6f 72 64 65 72 2e 0a   in DESC order..
14e50 2a 2a 0a 2a 2a 20 54 68 65 20 6b 65 79 20 63 6f  **.** The key co
14e60 6d 70 61 72 69 73 6f 6e 20 66 75 6e 63 74 69 6f  mparison functio
14e70 6e 73 20 61 63 74 75 61 6c 6c 79 20 72 65 74 75  ns actually retu
14e80 72 6e 20 64 65 66 61 75 6c 74 5f 72 63 20 77 68  rn default_rc wh
14e90 65 6e 20 74 68 65 79 20 66 69 6e 64 0a 2a 2a 20  en they find.** 
14ea0 61 6e 20 65 71 75 61 6c 73 20 63 6f 6d 70 61 72  an equals compar
14eb0 69 73 6f 6e 2e 20 20 64 65 66 61 75 6c 74 5f 72  ison.  default_r
14ec0 63 20 63 61 6e 20 62 65 20 2d 31 2c 20 30 2c 20  c can be -1, 0, 
14ed0 6f 72 20 2b 31 2e 20 20 49 66 20 74 68 65 72 65  or +1.  If there
14ee0 20 61 72 65 0a 2a 2a 20 6d 75 6c 74 69 70 6c 65   are.** multiple
14ef0 20 65 6e 74 72 69 65 73 20 69 6e 20 74 68 65 20   entries in the 
14f00 62 2d 74 72 65 65 20 77 69 74 68 20 74 68 65 20  b-tree with the 
14f10 73 61 6d 65 20 6b 65 79 20 28 77 68 65 6e 20 6f  same key (when o
14f20 6e 6c 79 20 6c 6f 6f 6b 69 6e 67 0a 2a 2a 20 61  nly looking.** a
14f30 74 20 74 68 65 20 66 69 72 73 74 20 70 4b 65 79  t the first pKey
14f40 49 6e 66 6f 2d 3e 6e 46 69 65 6c 64 73 2c 29 20  Info->nFields,) 
14f50 74 68 65 6e 20 64 65 66 61 75 6c 74 5f 72 63 20  then default_rc 
14f60 63 61 6e 20 62 65 20 73 65 74 20 74 6f 20 2d 31  can be set to -1
14f70 20 74 6f 0a 2a 2a 20 63 61 75 73 65 20 74 68 65   to.** cause the
14f80 20 73 65 61 72 63 68 20 74 6f 20 66 69 6e 64 20   search to find 
14f90 74 68 65 20 6c 61 73 74 20 6d 61 74 63 68 2c 20  the last match, 
14fa0 6f 72 20 2b 31 20 74 6f 20 63 61 75 73 65 20 74  or +1 to cause t
14fb0 68 65 20 73 65 61 72 63 68 20 74 6f 0a 2a 2a 20  he search to.** 
14fc0 66 69 6e 64 20 74 68 65 20 66 69 72 73 74 20 6d  find the first m
14fd0 61 74 63 68 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  atch..**.** The 
14fe0 6b 65 79 20 63 6f 6d 70 61 72 69 73 6f 6e 20 66  key comparison f
14ff0 75 6e 63 74 69 6f 6e 73 20 77 69 6c 6c 20 73 65  unctions will se
15000 74 20 65 71 53 65 65 6e 20 74 6f 20 74 72 75 65  t eqSeen to true
15010 20 69 66 20 74 68 65 79 20 65 76 65 72 0a 2a 2a   if they ever.**
15020 20 67 65 74 20 61 6e 64 20 65 71 75 61 6c 20 72   get and equal r
15030 65 73 75 6c 74 73 20 77 68 65 6e 20 63 6f 6d 70  esults when comp
15040 61 72 69 6e 67 20 74 68 69 73 20 73 74 72 75 63  aring this struc
15050 74 75 72 65 20 74 6f 20 61 20 62 2d 74 72 65 65  ture to a b-tree
15060 20 72 65 63 6f 72 64 2e 0a 2a 2a 20 57 68 65 6e   record..** When
15070 20 64 65 66 61 75 6c 74 5f 72 63 21 3d 30 2c 20   default_rc!=0, 
15080 74 68 65 20 73 65 61 72 63 68 20 6d 69 67 68 74  the search might
15090 20 65 6e 64 20 75 70 20 6f 6e 20 74 68 65 20 72   end up on the r
150a0 65 63 6f 72 64 20 69 6d 6d 65 64 69 61 74 65 6c  ecord immediatel
150b0 79 0a 2a 2a 20 62 65 66 6f 72 65 20 74 68 65 20  y.** before the 
150c0 66 69 72 73 74 20 6d 61 74 63 68 20 6f 72 20 69  first match or i
150d0 6d 6d 65 64 69 61 74 65 6c 79 20 61 66 74 65 72  mmediately after
150e0 20 74 68 65 20 6c 61 73 74 20 6d 61 74 63 68 2e   the last match.
150f0 20 20 54 68 65 0a 2a 2a 20 65 71 53 65 65 6e 20    The.** eqSeen 
15100 66 69 65 6c 64 20 77 69 6c 6c 20 69 6e 64 69 63  field will indic
15110 61 74 65 20 77 68 65 74 68 65 72 20 6f 72 20 6e  ate whether or n
15120 6f 74 20 61 6e 20 65 78 61 63 74 20 6d 61 74 63  ot an exact matc
15130 68 20 65 78 69 73 74 73 20 69 6e 20 74 68 65 0a  h exists in the.
15140 2a 2a 20 62 2d 74 72 65 65 2e 0a 2a 2f 0a 73 74  ** b-tree..*/.st
15150 72 75 63 74 20 55 6e 70 61 63 6b 65 64 52 65 63  ruct UnpackedRec
15160 6f 72 64 20 7b 0a 20 20 4b 65 79 49 6e 66 6f 20  ord {.  KeyInfo 
15170 2a 70 4b 65 79 49 6e 66 6f 3b 20 20 2f 2a 20 43  *pKeyInfo;  /* C
15180 6f 6c 6c 61 74 69 6f 6e 20 61 6e 64 20 73 6f 72  ollation and sor
15190 74 2d 6f 72 64 65 72 20 69 6e 66 6f 72 6d 61 74  t-order informat
151a0 69 6f 6e 20 2a 2f 0a 20 20 4d 65 6d 20 2a 61 4d  ion */.  Mem *aM
151b0 65 6d 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  em;          /* 
151c0 56 61 6c 75 65 73 20 2a 2f 0a 20 20 75 31 36 20  Values */.  u16 
151d0 6e 46 69 65 6c 64 3b 20 20 20 20 20 20 20 20 20  nField;         
151e0 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 6e 74  /* Number of ent
151f0 72 69 65 73 20 69 6e 20 61 70 4d 65 6d 5b 5d 20  ries in apMem[] 
15200 2a 2f 0a 20 20 69 38 20 64 65 66 61 75 6c 74 5f  */.  i8 default_
15210 72 63 3b 20 20 20 20 20 20 2f 2a 20 43 6f 6d 70  rc;      /* Comp
15220 61 72 69 73 6f 6e 20 72 65 73 75 6c 74 20 69 66  arison result if
15230 20 6b 65 79 73 20 61 72 65 20 65 71 75 61 6c 20   keys are equal 
15240 2a 2f 0a 20 20 75 38 20 65 72 72 43 6f 64 65 3b  */.  u8 errCode;
15250 20 20 20 20 20 20 20 20 20 2f 2a 20 45 72 72 6f           /* Erro
15260 72 20 64 65 74 65 63 74 65 64 20 62 79 20 78 52  r detected by xR
15270 65 63 6f 72 64 43 6f 6d 70 61 72 65 20 28 43 4f  ecordCompare (CO
15280 52 52 55 50 54 20 6f 72 20 4e 4f 4d 45 4d 29 20  RRUPT or NOMEM) 
15290 2a 2f 0a 20 20 69 38 20 72 31 3b 20 20 20 20 20  */.  i8 r1;     
152a0 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75           /* Valu
152b0 65 20 74 6f 20 72 65 74 75 72 6e 20 69 66 20 28  e to return if (
152c0 6c 68 73 20 3c 20 72 68 73 29 20 2a 2f 0a 20 20  lhs < rhs) */.  
152d0 69 38 20 72 32 3b 20 20 20 20 20 20 20 20 20 20  i8 r2;          
152e0 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 74 6f 20      /* Value to 
152f0 72 65 74 75 72 6e 20 69 66 20 28 6c 68 73 20 3e  return if (lhs >
15300 20 72 68 73 29 20 2a 2f 0a 20 20 75 38 20 65 71   rhs) */.  u8 eq
15310 53 65 65 6e 3b 20 20 20 20 20 20 20 20 20 20 2f  Seen;          /
15320 2a 20 54 72 75 65 20 69 66 20 61 6e 20 65 71 75  * True if an equ
15330 61 6c 69 74 79 20 63 6f 6d 70 61 72 69 73 6f 6e  ality comparison
15340 20 68 61 73 20 62 65 65 6e 20 73 65 65 6e 20 2a   has been seen *
15350 2f 0a 7d 3b 0a 0a 0a 2f 2a 0a 2a 2a 20 45 61 63  /.};.../*.** Eac
15360 68 20 53 51 4c 20 69 6e 64 65 78 20 69 73 20 72  h SQL index is r
15370 65 70 72 65 73 65 6e 74 65 64 20 69 6e 20 6d 65  epresented in me
15380 6d 6f 72 79 20 62 79 20 61 6e 0a 2a 2a 20 69 6e  mory by an.** in
15390 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f  stance of the fo
153a0 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72  llowing structur
153b0 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f 6c  e..**.** The col
153c0 75 6d 6e 73 20 6f 66 20 74 68 65 20 74 61 62 6c  umns of the tabl
153d0 65 20 74 68 61 74 20 61 72 65 20 74 6f 20 62 65  e that are to be
153e0 20 69 6e 64 65 78 65 64 20 61 72 65 20 64 65 73   indexed are des
153f0 63 72 69 62 65 64 0a 2a 2a 20 62 79 20 74 68 65  cribed.** by the
15400 20 61 69 43 6f 6c 75 6d 6e 5b 5d 20 66 69 65 6c   aiColumn[] fiel
15410 64 20 6f 66 20 74 68 69 73 20 73 74 72 75 63 74  d of this struct
15420 75 72 65 2e 20 20 46 6f 72 20 65 78 61 6d 70 6c  ure.  For exampl
15430 65 2c 20 73 75 70 70 6f 73 65 0a 2a 2a 20 77 65  e, suppose.** we
15440 20 68 61 76 65 20 74 68 65 20 66 6f 6c 6c 6f 77   have the follow
15450 69 6e 67 20 74 61 62 6c 65 20 61 6e 64 20 69 6e  ing table and in
15460 64 65 78 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 43  dex:.**.**     C
15470 52 45 41 54 45 20 54 41 42 4c 45 20 45 78 31 28  REATE TABLE Ex1(
15480 63 31 20 69 6e 74 2c 20 63 32 20 69 6e 74 2c 20  c1 int, c2 int, 
15490 63 33 20 74 65 78 74 29 3b 0a 2a 2a 20 20 20 20  c3 text);.**    
154a0 20 43 52 45 41 54 45 20 49 4e 44 45 58 20 45 78   CREATE INDEX Ex
154b0 32 20 4f 4e 20 45 78 31 28 63 33 2c 63 31 29 3b  2 ON Ex1(c3,c1);
154c0 0a 2a 2a 0a 2a 2a 20 49 6e 20 74 68 65 20 54 61  .**.** In the Ta
154d0 62 6c 65 20 73 74 72 75 63 74 75 72 65 20 64 65  ble structure de
154e0 73 63 72 69 62 69 6e 67 20 45 78 31 2c 20 6e 43  scribing Ex1, nC
154f0 6f 6c 3d 3d 33 20 62 65 63 61 75 73 65 20 74 68  ol==3 because th
15500 65 72 65 20 61 72 65 0a 2a 2a 20 74 68 72 65 65  ere are.** three
15510 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20   columns in the 
15520 74 61 62 6c 65 2e 20 20 49 6e 20 74 68 65 20 49  table.  In the I
15530 6e 64 65 78 20 73 74 72 75 63 74 75 72 65 20 64  ndex structure d
15540 65 73 63 72 69 62 69 6e 67 0a 2a 2a 20 45 78 32  escribing.** Ex2
15550 2c 20 6e 43 6f 6c 75 6d 6e 3d 3d 32 20 73 69 6e  , nColumn==2 sin
15560 63 65 20 32 20 6f 66 20 74 68 65 20 33 20 63 6f  ce 2 of the 3 co
15570 6c 75 6d 6e 73 20 6f 66 20 45 78 31 20 61 72 65  lumns of Ex1 are
15580 20 69 6e 64 65 78 65 64 2e 0a 2a 2a 20 54 68 65   indexed..** The
15590 20 76 61 6c 75 65 20 6f 66 20 61 69 43 6f 6c 75   value of aiColu
155a0 6d 6e 20 69 73 20 7b 32 2c 20 30 7d 2e 20 20 61  mn is {2, 0}.  a
155b0 69 43 6f 6c 75 6d 6e 5b 30 5d 3d 3d 32 20 62 65  iColumn[0]==2 be
155c0 63 61 75 73 65 20 74 68 65 0a 2a 2a 20 66 69 72  cause the.** fir
155d0 73 74 20 63 6f 6c 75 6d 6e 20 74 6f 20 62 65 20  st column to be 
155e0 69 6e 64 65 78 65 64 20 28 63 33 29 20 68 61 73  indexed (c3) has
155f0 20 61 6e 20 69 6e 64 65 78 20 6f 66 20 32 20 69   an index of 2 i
15600 6e 20 45 78 31 2e 61 43 6f 6c 5b 5d 2e 0a 2a 2a  n Ex1.aCol[]..**
15610 20 54 68 65 20 73 65 63 6f 6e 64 20 63 6f 6c 75   The second colu
15620 6d 6e 20 74 6f 20 62 65 20 69 6e 64 65 78 65 64  mn to be indexed
15630 20 28 63 31 29 20 68 61 73 20 61 6e 20 69 6e 64   (c1) has an ind
15640 65 78 20 6f 66 20 30 20 69 6e 0a 2a 2a 20 45 78  ex of 0 in.** Ex
15650 31 2e 61 43 6f 6c 5b 5d 2c 20 68 65 6e 63 65 20  1.aCol[], hence 
15660 45 78 32 2e 61 69 43 6f 6c 75 6d 6e 5b 31 5d 3d  Ex2.aiColumn[1]=
15670 3d 30 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 49 6e  =0..**.** The In
15680 64 65 78 2e 6f 6e 45 72 72 6f 72 20 66 69 65 6c  dex.onError fiel
15690 64 20 64 65 74 65 72 6d 69 6e 65 73 20 77 68 65  d determines whe
156a0 74 68 65 72 20 6f 72 20 6e 6f 74 20 74 68 65 20  ther or not the 
156b0 69 6e 64 65 78 65 64 20 63 6f 6c 75 6d 6e 73 0a  indexed columns.
156c0 2a 2a 20 6d 75 73 74 20 62 65 20 75 6e 69 71 75  ** must be uniqu
156d0 65 20 61 6e 64 20 77 68 61 74 20 74 6f 20 64 6f  e and what to do
156e0 20 69 66 20 74 68 65 79 20 61 72 65 20 6e 6f 74   if they are not
156f0 2e 20 20 57 68 65 6e 20 49 6e 64 65 78 2e 6f 6e  .  When Index.on
15700 45 72 72 6f 72 3d 4f 45 5f 4e 6f 6e 65 2c 0a 2a  Error=OE_None,.*
15710 2a 20 69 74 20 6d 65 61 6e 73 20 74 68 69 73 20  * it means this 
15720 69 73 20 6e 6f 74 20 61 20 75 6e 69 71 75 65 20  is not a unique 
15730 69 6e 64 65 78 2e 20 20 4f 74 68 65 72 77 69 73  index.  Otherwis
15740 65 20 69 74 20 69 73 20 61 20 75 6e 69 71 75 65  e it is a unique
15750 20 69 6e 64 65 78 0a 2a 2a 20 61 6e 64 20 74 68   index.** and th
15760 65 20 76 61 6c 75 65 20 6f 66 20 49 6e 64 65 78  e value of Index
15770 2e 6f 6e 45 72 72 6f 72 20 69 6e 64 69 63 61 74  .onError indicat
15780 65 20 74 68 65 20 77 68 69 63 68 20 63 6f 6e 66  e the which conf
15790 6c 69 63 74 20 72 65 73 6f 6c 75 74 69 6f 6e 0a  lict resolution.
157a0 2a 2a 20 61 6c 67 6f 72 69 74 68 6d 20 74 6f 20  ** algorithm to 
157b0 65 6d 70 6c 6f 79 20 77 68 65 6e 65 76 65 72 20  employ whenever 
157c0 61 6e 20 61 74 74 65 6d 70 74 20 69 73 20 6d 61  an attempt is ma
157d0 64 65 20 74 6f 20 69 6e 73 65 72 74 20 61 20 6e  de to insert a n
157e0 6f 6e 2d 75 6e 69 71 75 65 0a 2a 2a 20 65 6c 65  on-unique.** ele
157f0 6d 65 6e 74 2e 0a 2a 2a 0a 2a 2a 20 57 68 69 6c  ment..**.** Whil
15800 65 20 70 61 72 73 69 6e 67 20 61 20 43 52 45 41  e parsing a CREA
15810 54 45 20 54 41 42 4c 45 20 6f 72 20 43 52 45 41  TE TABLE or CREA
15820 54 45 20 49 4e 44 45 58 20 73 74 61 74 65 6d 65  TE INDEX stateme
15830 6e 74 20 69 6e 20 6f 72 64 65 72 20 74 6f 0a 2a  nt in order to.*
15840 2a 20 67 65 6e 65 72 61 74 65 20 56 44 42 45 20  * generate VDBE 
15850 63 6f 64 65 20 28 61 73 20 6f 70 70 6f 73 65 64  code (as opposed
15860 20 74 6f 20 70 61 72 73 69 6e 67 20 6f 6e 65 20   to parsing one 
15870 72 65 61 64 20 66 72 6f 6d 20 61 6e 20 73 71 6c  read from an sql
15880 69 74 65 5f 6d 61 73 74 65 72 0a 2a 2a 20 74 61  ite_master.** ta
15890 62 6c 65 20 61 73 20 70 61 72 74 20 6f 66 20 70  ble as part of p
158a0 61 72 73 69 6e 67 20 61 6e 20 65 78 69 73 74 69  arsing an existi
158b0 6e 67 20 64 61 74 61 62 61 73 65 20 73 63 68 65  ng database sche
158c0 6d 61 29 2c 20 74 72 61 6e 73 69 65 6e 74 20 69  ma), transient i
158d0 6e 73 74 61 6e 63 65 73 0a 2a 2a 20 6f 66 20 74  nstances.** of t
158e0 68 69 73 20 73 74 72 75 63 74 75 72 65 20 6d 61  his structure ma
158f0 79 20 62 65 20 63 72 65 61 74 65 64 2e 20 49 6e  y be created. In
15900 20 74 68 69 73 20 63 61 73 65 20 74 68 65 20 49   this case the I
15910 6e 64 65 78 2e 74 6e 75 6d 20 76 61 72 69 61 62  ndex.tnum variab
15920 6c 65 20 69 73 0a 2a 2a 20 75 73 65 64 20 74 6f  le is.** used to
15930 20 73 74 6f 72 65 20 74 68 65 20 61 64 64 72 65   store the addre
15940 73 73 20 6f 66 20 61 20 56 44 42 45 20 69 6e 73  ss of a VDBE ins
15950 74 72 75 63 74 69 6f 6e 2c 20 6e 6f 74 20 61 20  truction, not a 
15960 64 61 74 61 62 61 73 65 20 70 61 67 65 0a 2a 2a  database page.**
15970 20 6e 75 6d 62 65 72 20 28 69 74 20 63 61 6e 6e   number (it cann
15980 6f 74 20 2d 20 74 68 65 20 64 61 74 61 62 61 73  ot - the databas
15990 65 20 70 61 67 65 20 69 73 20 6e 6f 74 20 61 6c  e page is not al
159a0 6c 6f 63 61 74 65 64 20 75 6e 74 69 6c 20 74 68  located until th
159b0 65 20 56 44 42 45 0a 2a 2a 20 70 72 6f 67 72 61  e VDBE.** progra
159c0 6d 20 69 73 20 65 78 65 63 75 74 65 64 29 2e 20  m is executed). 
159d0 53 65 65 20 63 6f 6e 76 65 72 74 54 6f 57 69 74  See convertToWit
159e0 68 6f 75 74 52 6f 77 69 64 54 61 62 6c 65 28 29  houtRowidTable()
159f0 20 66 6f 72 20 64 65 74 61 69 6c 73 2e 0a 2a 2f   for details..*/
15a00 0a 73 74 72 75 63 74 20 49 6e 64 65 78 20 7b 0a  .struct Index {.
15a10 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20    char *zName;  
15a20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61             /* Na
15a30 6d 65 20 6f 66 20 74 68 69 73 20 69 6e 64 65 78  me of this index
15a40 20 2a 2f 0a 20 20 69 31 36 20 2a 61 69 43 6f 6c   */.  i16 *aiCol
15a50 75 6d 6e 3b 20 20 20 20 20 20 20 20 20 20 20 2f  umn;           /
15a60 2a 20 57 68 69 63 68 20 63 6f 6c 75 6d 6e 73 20  * Which columns 
15a70 61 72 65 20 75 73 65 64 20 62 79 20 74 68 69 73  are used by this
15a80 20 69 6e 64 65 78 2e 20 20 31 73 74 20 69 73 20   index.  1st is 
15a90 30 20 2a 2f 0a 20 20 4c 6f 67 45 73 74 20 2a 61  0 */.  LogEst *a
15aa0 69 52 6f 77 4c 6f 67 45 73 74 3b 20 20 20 20 20  iRowLogEst;     
15ab0 2f 2a 20 46 72 6f 6d 20 41 4e 41 4c 59 5a 45 3a  /* From ANALYZE:
15ac0 20 45 73 74 2e 20 72 6f 77 73 20 73 65 6c 65 63   Est. rows selec
15ad0 74 65 64 20 62 79 20 65 61 63 68 20 63 6f 6c 75  ted by each colu
15ae0 6d 6e 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70  mn */.  Table *p
15af0 54 61 62 6c 65 3b 20 20 20 20 20 20 20 20 20 20  Table;          
15b00 20 2f 2a 20 54 68 65 20 53 51 4c 20 74 61 62 6c   /* The SQL tabl
15b10 65 20 62 65 69 6e 67 20 69 6e 64 65 78 65 64 20  e being indexed 
15b20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 43 6f 6c 41  */.  char *zColA
15b30 66 66 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ff;           /*
15b40 20 53 74 72 69 6e 67 20 64 65 66 69 6e 69 6e 67   String defining
15b50 20 74 68 65 20 61 66 66 69 6e 69 74 79 20 6f 66   the affinity of
15b60 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a   each column */.
15b70 20 20 49 6e 64 65 78 20 2a 70 4e 65 78 74 3b 20    Index *pNext; 
15b80 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68             /* Th
15b90 65 20 6e 65 78 74 20 69 6e 64 65 78 20 61 73 73  e next index ass
15ba0 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 68 65  ociated with the
15bb0 20 73 61 6d 65 20 74 61 62 6c 65 20 2a 2f 0a 20   same table */. 
15bc0 20 53 63 68 65 6d 61 20 2a 70 53 63 68 65 6d 61   Schema *pSchema
15bd0 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 53 63 68  ;         /* Sch
15be0 65 6d 61 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74  ema containing t
15bf0 68 69 73 20 69 6e 64 65 78 20 2a 2f 0a 20 20 75  his index */.  u
15c00 38 20 2a 61 53 6f 72 74 4f 72 64 65 72 3b 20 20  8 *aSortOrder;  
15c10 20 20 20 20 20 20 20 20 2f 2a 20 66 6f 72 20 65          /* for e
15c20 61 63 68 20 63 6f 6c 75 6d 6e 3a 20 54 72 75 65  ach column: True
15c30 3d 3d 44 45 53 43 2c 20 46 61 6c 73 65 3d 3d 41  ==DESC, False==A
15c40 53 43 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68  SC */.  const ch
15c50 61 72 20 2a 2a 61 7a 43 6f 6c 6c 3b 20 20 20 20  ar **azColl;    
15c60 20 2f 2a 20 41 72 72 61 79 20 6f 66 20 63 6f 6c   /* Array of col
15c70 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20  lation sequence 
15c80 6e 61 6d 65 73 20 66 6f 72 20 69 6e 64 65 78 20  names for index 
15c90 2a 2f 0a 20 20 45 78 70 72 20 2a 70 50 61 72 74  */.  Expr *pPart
15ca0 49 64 78 57 68 65 72 65 3b 20 20 20 20 20 2f 2a  IdxWhere;     /*
15cb0 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 66 6f   WHERE clause fo
15cc0 72 20 70 61 72 74 69 61 6c 20 69 6e 64 69 63 65  r partial indice
15cd0 73 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20  s */.  ExprList 
15ce0 2a 61 43 6f 6c 45 78 70 72 3b 20 20 20 20 20 20  *aColExpr;      
15cf0 2f 2a 20 43 6f 6c 75 6d 6e 20 65 78 70 72 65 73  /* Column expres
15d00 73 69 6f 6e 73 20 2a 2f 0a 20 20 69 6e 74 20 74  sions */.  int t
15d10 6e 75 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20  num;            
15d20 20 20 20 20 2f 2a 20 44 42 20 50 61 67 65 20 63      /* DB Page c
15d30 6f 6e 74 61 69 6e 69 6e 67 20 72 6f 6f 74 20 6f  ontaining root o
15d40 66 20 74 68 69 73 20 69 6e 64 65 78 20 2a 2f 0a  f this index */.
15d50 20 20 4c 6f 67 45 73 74 20 73 7a 49 64 78 52 6f    LogEst szIdxRo
15d60 77 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 45 73  w;         /* Es
15d70 74 69 6d 61 74 65 64 20 61 76 65 72 61 67 65 20  timated average 
15d80 72 6f 77 20 73 69 7a 65 20 69 6e 20 62 79 74 65  row size in byte
15d90 73 20 2a 2f 0a 20 20 75 31 36 20 6e 4b 65 79 43  s */.  u16 nKeyC
15da0 6f 6c 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ol;             
15db0 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c  /* Number of col
15dc0 75 6d 6e 73 20 66 6f 72 6d 69 6e 67 20 74 68 65  umns forming the
15dd0 20 6b 65 79 20 2a 2f 0a 20 20 75 31 36 20 6e 43   key */.  u16 nC
15de0 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20 20 20  olumn;          
15df0 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
15e00 63 6f 6c 75 6d 6e 73 20 73 74 6f 72 65 64 20 69  columns stored i
15e10 6e 20 74 68 65 20 69 6e 64 65 78 20 2a 2f 0a 20  n the index */. 
15e20 20 75 38 20 6f 6e 45 72 72 6f 72 3b 20 20 20 20   u8 onError;    
15e30 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 45 5f            /* OE_
15e40 41 62 6f 72 74 2c 20 4f 45 5f 49 67 6e 6f 72 65  Abort, OE_Ignore
15e50 2c 20 4f 45 5f 52 65 70 6c 61 63 65 2c 20 6f 72  , OE_Replace, or
15e60 20 4f 45 5f 4e 6f 6e 65 20 2a 2f 0a 20 20 75 6e   OE_None */.  un
15e70 73 69 67 6e 65 64 20 69 64 78 54 79 70 65 3a 32  signed idxType:2
15e80 3b 20 20 20 20 20 20 2f 2a 20 31 3d 3d 55 4e 49  ;      /* 1==UNI
15e90 51 55 45 2c 20 32 3d 3d 50 52 49 4d 41 52 59 20  QUE, 2==PRIMARY 
15ea0 4b 45 59 2c 20 30 3d 3d 43 52 45 41 54 45 20 49  KEY, 0==CREATE I
15eb0 4e 44 45 58 20 2a 2f 0a 20 20 75 6e 73 69 67 6e  NDEX */.  unsign
15ec0 65 64 20 62 55 6e 6f 72 64 65 72 65 64 3a 31 3b  ed bUnordered:1;
15ed0 20 20 20 2f 2a 20 55 73 65 20 74 68 69 73 20 69     /* Use this i
15ee0 6e 64 65 78 20 66 6f 72 20 3d 3d 20 6f 72 20 49  ndex for == or I
15ef0 4e 20 71 75 65 72 69 65 73 20 6f 6e 6c 79 20 2a  N queries only *
15f00 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 75 6e 69  /.  unsigned uni
15f10 71 4e 6f 74 4e 75 6c 6c 3a 31 3b 20 20 2f 2a 20  qNotNull:1;  /* 
15f20 54 72 75 65 20 69 66 20 55 4e 49 51 55 45 20 61  True if UNIQUE a
15f30 6e 64 20 4e 4f 54 20 4e 55 4c 4c 20 66 6f 72 20  nd NOT NULL for 
15f40 61 6c 6c 20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 20  all columns */. 
15f50 20 75 6e 73 69 67 6e 65 64 20 69 73 52 65 73 69   unsigned isResi
15f60 7a 65 64 3a 31 3b 20 20 20 20 2f 2a 20 54 72 75  zed:1;    /* Tru
15f70 65 20 69 66 20 72 65 73 69 7a 65 49 6e 64 65 78  e if resizeIndex
15f80 4f 62 6a 65 63 74 28 29 20 68 61 73 20 62 65 65  Object() has bee
15f90 6e 20 63 61 6c 6c 65 64 20 2a 2f 0a 20 20 75 6e  n called */.  un
15fa0 73 69 67 6e 65 64 20 69 73 43 6f 76 65 72 69 6e  signed isCoverin
15fb0 67 3a 31 3b 20 20 20 2f 2a 20 54 72 75 65 20 69  g:1;   /* True i
15fc0 66 20 74 68 69 73 20 69 73 20 61 20 63 6f 76 65  f this is a cove
15fd0 72 69 6e 67 20 69 6e 64 65 78 20 2a 2f 0a 20 20  ring index */.  
15fe0 75 6e 73 69 67 6e 65 64 20 6e 6f 53 6b 69 70 53  unsigned noSkipS
15ff0 63 61 6e 3a 31 3b 20 20 20 2f 2a 20 44 6f 20 6e  can:1;   /* Do n
16000 6f 74 20 74 72 79 20 74 6f 20 75 73 65 20 73 6b  ot try to use sk
16010 69 70 2d 73 63 61 6e 20 69 66 20 74 72 75 65 20  ip-scan if true 
16020 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 68 61  */.  unsigned ha
16030 73 53 74 61 74 31 3a 31 3b 20 20 20 20 20 2f 2a  sStat1:1;     /*
16040 20 61 69 52 6f 77 4c 6f 67 45 73 74 20 76 61 6c   aiRowLogEst val
16050 75 65 73 20 63 6f 6d 65 20 66 72 6f 6d 20 73 71  ues come from sq
16060 6c 69 74 65 5f 73 74 61 74 31 20 2a 2f 0a 20 20  lite_stat1 */.  
16070 75 6e 73 69 67 6e 65 64 20 62 4e 6f 51 75 65 72  unsigned bNoQuer
16080 79 3a 31 3b 20 20 20 20 20 2f 2a 20 44 6f 20 6e  y:1;     /* Do n
16090 6f 74 20 75 73 65 20 74 68 69 73 20 69 6e 64 65  ot use this inde
160a0 78 20 74 6f 20 6f 70 74 69 6d 69 7a 65 20 71 75  x to optimize qu
160b0 65 72 69 65 73 20 2a 2f 0a 23 69 66 64 65 66 20  eries */.#ifdef 
160c0 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54  SQLITE_ENABLE_ST
160d0 41 54 33 5f 4f 52 5f 53 54 41 54 34 0a 20 20 69  AT3_OR_STAT4.  i
160e0 6e 74 20 6e 53 61 6d 70 6c 65 3b 20 20 20 20 20  nt nSample;     
160f0 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
16100 72 20 6f 66 20 65 6c 65 6d 65 6e 74 73 20 69 6e  r of elements in
16110 20 61 53 61 6d 70 6c 65 5b 5d 20 2a 2f 0a 20 20   aSample[] */.  
16120 69 6e 74 20 6e 53 61 6d 70 6c 65 43 6f 6c 3b 20  int nSampleCol; 
16130 20 20 20 20 20 20 20 20 20 2f 2a 20 53 69 7a 65           /* Size
16140 20 6f 66 20 49 6e 64 65 78 53 61 6d 70 6c 65 2e   of IndexSample.
16150 61 6e 45 71 5b 5d 20 61 6e 64 20 73 6f 20 6f 6e  anEq[] and so on
16160 20 2a 2f 0a 20 20 74 52 6f 77 63 6e 74 20 2a 61   */.  tRowcnt *a
16170 41 76 67 45 71 3b 20 20 20 20 20 20 20 20 20 2f  AvgEq;         /
16180 2a 20 41 76 65 72 61 67 65 20 6e 45 71 20 76 61  * Average nEq va
16190 6c 75 65 73 20 66 6f 72 20 6b 65 79 73 20 6e 6f  lues for keys no
161a0 74 20 69 6e 20 61 53 61 6d 70 6c 65 20 2a 2f 0a  t in aSample */.
161b0 20 20 49 6e 64 65 78 53 61 6d 70 6c 65 20 2a 61    IndexSample *a
161c0 53 61 6d 70 6c 65 3b 20 20 20 20 2f 2a 20 53 61  Sample;    /* Sa
161d0 6d 70 6c 65 73 20 6f 66 20 74 68 65 20 6c 65 66  mples of the lef
161e0 74 2d 6d 6f 73 74 20 6b 65 79 20 2a 2f 0a 20 20  t-most key */.  
161f0 74 52 6f 77 63 6e 74 20 2a 61 69 52 6f 77 45 73  tRowcnt *aiRowEs
16200 74 3b 20 20 20 20 20 20 20 2f 2a 20 4e 6f 6e 2d  t;       /* Non-
16210 6c 6f 67 61 72 69 74 68 6d 69 63 20 73 74 61 74  logarithmic stat
16220 31 20 64 61 74 61 20 66 6f 72 20 74 68 69 73 20  1 data for this 
16230 69 6e 64 65 78 20 2a 2f 0a 20 20 74 52 6f 77 63  index */.  tRowc
16240 6e 74 20 6e 52 6f 77 45 73 74 30 3b 20 20 20 20  nt nRowEst0;    
16250 20 20 20 20 2f 2a 20 4e 6f 6e 2d 6c 6f 67 61 72      /* Non-logar
16260 69 74 68 6d 69 63 20 6e 75 6d 62 65 72 20 6f 66  ithmic number of
16270 20 72 6f 77 73 20 69 6e 20 74 68 65 20 69 6e 64   rows in the ind
16280 65 78 20 2a 2f 0a 23 65 6e 64 69 66 0a 7d 3b 0a  ex */.#endif.};.
16290 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 76  ./*.** Allowed v
162a0 61 6c 75 65 73 20 66 6f 72 20 49 6e 64 65 78 2e  alues for Index.
162b0 69 64 78 54 79 70 65 0a 2a 2f 0a 23 64 65 66 69  idxType.*/.#defi
162c0 6e 65 20 53 51 4c 49 54 45 5f 49 44 58 54 59 50  ne SQLITE_IDXTYP
162d0 45 5f 41 50 50 44 45 46 20 20 20 20 20 20 30 20  E_APPDEF      0 
162e0 20 20 2f 2a 20 43 72 65 61 74 65 64 20 75 73 69    /* Created usi
162f0 6e 67 20 43 52 45 41 54 45 20 49 4e 44 45 58 20  ng CREATE INDEX 
16300 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
16310 45 5f 49 44 58 54 59 50 45 5f 55 4e 49 51 55 45  E_IDXTYPE_UNIQUE
16320 20 20 20 20 20 20 31 20 20 20 2f 2a 20 49 6d 70        1   /* Imp
16330 6c 65 6d 65 6e 74 73 20 61 20 55 4e 49 51 55 45  lements a UNIQUE
16340 20 63 6f 6e 73 74 72 61 69 6e 74 20 2a 2f 0a 23   constraint */.#
16350 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49 44  define SQLITE_ID
16360 58 54 59 50 45 5f 50 52 49 4d 41 52 59 4b 45 59  XTYPE_PRIMARYKEY
16370 20 20 32 20 20 20 2f 2a 20 49 73 20 74 68 65 20    2   /* Is the 
16380 50 52 49 4d 41 52 59 20 4b 45 59 20 66 6f 72 20  PRIMARY KEY for 
16390 74 68 65 20 74 61 62 6c 65 20 2a 2f 0a 0a 2f 2a  the table */../*
163a0 20 52 65 74 75 72 6e 20 74 72 75 65 20 69 66 20   Return true if 
163b0 69 6e 64 65 78 20 58 20 69 73 20 61 20 50 52 49  index X is a PRI
163c0 4d 41 52 59 20 4b 45 59 20 69 6e 64 65 78 20 2a  MARY KEY index *
163d0 2f 0a 23 64 65 66 69 6e 65 20 49 73 50 72 69 6d  /.#define IsPrim
163e0 61 72 79 4b 65 79 49 6e 64 65 78 28 58 29 20 20  aryKeyIndex(X)  
163f0 28 28 58 29 2d 3e 69 64 78 54 79 70 65 3d 3d 53  ((X)->idxType==S
16400 51 4c 49 54 45 5f 49 44 58 54 59 50 45 5f 50 52  QLITE_IDXTYPE_PR
16410 49 4d 41 52 59 4b 45 59 29 0a 0a 2f 2a 20 52 65  IMARYKEY)../* Re
16420 74 75 72 6e 20 74 72 75 65 20 69 66 20 69 6e 64  turn true if ind
16430 65 78 20 58 20 69 73 20 61 20 55 4e 49 51 55 45  ex X is a UNIQUE
16440 20 69 6e 64 65 78 20 2a 2f 0a 23 64 65 66 69 6e   index */.#defin
16450 65 20 49 73 55 6e 69 71 75 65 49 6e 64 65 78 28  e IsUniqueIndex(
16460 58 29 20 20 20 20 20 20 28 28 58 29 2d 3e 6f 6e  X)      ((X)->on
16470 45 72 72 6f 72 21 3d 4f 45 5f 4e 6f 6e 65 29 0a  Error!=OE_None).
16480 0a 2f 2a 20 54 68 65 20 49 6e 64 65 78 2e 61 69  ./* The Index.ai
16490 43 6f 6c 75 6d 6e 5b 5d 20 76 61 6c 75 65 73 20  Column[] values 
164a0 61 72 65 20 6e 6f 72 6d 61 6c 6c 79 20 70 6f 73  are normally pos
164b0 69 74 69 76 65 20 69 6e 74 65 67 65 72 2e 20 20  itive integer.  
164c0 42 75 74 0a 2a 2a 20 74 68 65 72 65 20 61 72 65  But.** there are
164d0 20 73 6f 6d 65 20 6e 65 67 61 74 69 76 65 20 76   some negative v
164e0 61 6c 75 65 73 20 74 68 61 74 20 68 61 76 65 20  alues that have 
164f0 73 70 65 63 69 61 6c 20 6d 65 61 6e 69 6e 67 3a  special meaning:
16500 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 58 4e 5f 52  .*/.#define XN_R
16510 4f 57 49 44 20 20 20 20 20 28 2d 31 29 20 20 20  OWID     (-1)   
16520 20 20 2f 2a 20 49 6e 64 65 78 65 64 20 63 6f 6c    /* Indexed col
16530 75 6d 6e 20 69 73 20 74 68 65 20 72 6f 77 69 64  umn is the rowid
16540 20 2a 2f 0a 23 64 65 66 69 6e 65 20 58 4e 5f 45   */.#define XN_E
16550 58 50 52 20 20 20 20 20 20 28 2d 32 29 20 20 20  XPR      (-2)   
16560 20 20 2f 2a 20 49 6e 64 65 78 65 64 20 63 6f 6c    /* Indexed col
16570 75 6d 6e 20 69 73 20 61 6e 20 65 78 70 72 65 73  umn is an expres
16580 73 69 6f 6e 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 45  sion */../*.** E
16590 61 63 68 20 73 61 6d 70 6c 65 20 73 74 6f 72 65  ach sample store
165a0 64 20 69 6e 20 74 68 65 20 73 71 6c 69 74 65 5f  d in the sqlite_
165b0 73 74 61 74 33 20 74 61 62 6c 65 20 69 73 20 72  stat3 table is r
165c0 65 70 72 65 73 65 6e 74 65 64 20 69 6e 20 6d 65  epresented in me
165d0 6d 6f 72 79 0a 2a 2a 20 75 73 69 6e 67 20 61 20  mory.** using a 
165e0 73 74 72 75 63 74 75 72 65 20 6f 66 20 74 68 69  structure of thi
165f0 73 20 74 79 70 65 2e 20 20 53 65 65 20 64 6f 63  s type.  See doc
16600 75 6d 65 6e 74 61 74 69 6f 6e 20 61 74 20 74 68  umentation at th
16610 65 20 74 6f 70 20 6f 66 20 74 68 65 0a 2a 2a 20  e top of the.** 
16620 61 6e 61 6c 79 7a 65 2e 63 20 73 6f 75 72 63 65  analyze.c source
16630 20 66 69 6c 65 20 66 6f 72 20 61 64 64 69 74 69   file for additi
16640 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  onal information
16650 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 49 6e 64 65  ..*/.struct Inde
16660 78 53 61 6d 70 6c 65 20 7b 0a 20 20 76 6f 69 64  xSample {.  void
16670 20 2a 70 3b 20 20 20 20 20 20 20 20 20 20 2f 2a   *p;          /*
16680 20 50 6f 69 6e 74 65 72 20 74 6f 20 73 61 6d 70   Pointer to samp
16690 6c 65 64 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20  led record */.  
166a0 69 6e 74 20 6e 3b 20 20 20 20 20 20 20 20 20 20  int n;          
166b0 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20 72 65 63    /* Size of rec
166c0 6f 72 64 20 69 6e 20 62 79 74 65 73 20 2a 2f 0a  ord in bytes */.
166d0 20 20 74 52 6f 77 63 6e 74 20 2a 61 6e 45 71 3b    tRowcnt *anEq;
166e0 20 20 20 20 2f 2a 20 45 73 74 2e 20 6e 75 6d 62      /* Est. numb
166f0 65 72 20 6f 66 20 72 6f 77 73 20 77 68 65 72 65  er of rows where
16700 20 74 68 65 20 6b 65 79 20 65 71 75 61 6c 73 20   the key equals 
16710 74 68 69 73 20 73 61 6d 70 6c 65 20 2a 2f 0a 20  this sample */. 
16720 20 74 52 6f 77 63 6e 74 20 2a 61 6e 4c 74 3b 20   tRowcnt *anLt; 
16730 20 20 20 2f 2a 20 45 73 74 2e 20 6e 75 6d 62 65     /* Est. numbe
16740 72 20 6f 66 20 72 6f 77 73 20 77 68 65 72 65 20  r of rows where 
16750 6b 65 79 20 69 73 20 6c 65 73 73 20 74 68 61 6e  key is less than
16760 20 74 68 69 73 20 73 61 6d 70 6c 65 20 2a 2f 0a   this sample */.
16770 20 20 74 52 6f 77 63 6e 74 20 2a 61 6e 44 4c 74    tRowcnt *anDLt
16780 3b 20 20 20 2f 2a 20 45 73 74 2e 20 6e 75 6d 62  ;   /* Est. numb
16790 65 72 20 6f 66 20 64 69 73 74 69 6e 63 74 20 6b  er of distinct k
167a0 65 79 73 20 6c 65 73 73 20 74 68 61 6e 20 74 68  eys less than th
167b0 69 73 20 73 61 6d 70 6c 65 20 2a 2f 0a 7d 3b 0a  is sample */.};.
167c0 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 74 6f 6b 65  ./*.** Each toke
167d0 6e 20 63 6f 6d 69 6e 67 20 6f 75 74 20 6f 66 20  n coming out of 
167e0 74 68 65 20 6c 65 78 65 72 20 69 73 20 61 6e 20  the lexer is an 
167f0 69 6e 73 74 61 6e 63 65 20 6f 66 0a 2a 2a 20 74  instance of.** t
16800 68 69 73 20 73 74 72 75 63 74 75 72 65 2e 20 20  his structure.  
16810 54 6f 6b 65 6e 73 20 61 72 65 20 61 6c 73 6f 20  Tokens are also 
16820 75 73 65 64 20 61 73 20 70 61 72 74 20 6f 66 20  used as part of 
16830 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 2e 0a 2a  an expression..*
16840 2a 0a 2a 2a 20 4e 6f 74 65 20 69 66 20 54 6f 6b  *.** Note if Tok
16850 65 6e 2e 7a 3d 3d 30 20 74 68 65 6e 20 54 6f 6b  en.z==0 then Tok
16860 65 6e 2e 64 79 6e 20 61 6e 64 20 54 6f 6b 65 6e  en.dyn and Token
16870 2e 6e 20 61 72 65 20 75 6e 64 65 66 69 6e 65 64  .n are undefined
16880 20 61 6e 64 0a 2a 2a 20 6d 61 79 20 63 6f 6e 74   and.** may cont
16890 61 69 6e 20 72 61 6e 64 6f 6d 20 76 61 6c 75 65  ain random value
168a0 73 2e 20 20 44 6f 20 6e 6f 74 20 6d 61 6b 65 20  s.  Do not make 
168b0 61 6e 79 20 61 73 73 75 6d 70 74 69 6f 6e 73 20  any assumptions 
168c0 61 62 6f 75 74 20 54 6f 6b 65 6e 2e 64 79 6e 0a  about Token.dyn.
168d0 2a 2a 20 61 6e 64 20 54 6f 6b 65 6e 2e 6e 20 77  ** and Token.n w
168e0 68 65 6e 20 54 6f 6b 65 6e 2e 7a 3d 3d 30 2e 0a  hen Token.z==0..
168f0 2a 2f 0a 73 74 72 75 63 74 20 54 6f 6b 65 6e 20  */.struct Token 
16900 7b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  {.  const char *
16910 7a 3b 20 20 20 20 20 2f 2a 20 54 65 78 74 20 6f  z;     /* Text o
16920 66 20 74 68 65 20 74 6f 6b 65 6e 2e 20 20 4e 6f  f the token.  No
16930 74 20 4e 55 4c 4c 2d 74 65 72 6d 69 6e 61 74 65  t NULL-terminate
16940 64 21 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64  d! */.  unsigned
16950 20 69 6e 74 20 6e 3b 20 20 20 20 2f 2a 20 4e 75   int n;    /* Nu
16960 6d 62 65 72 20 6f 66 20 63 68 61 72 61 63 74 65  mber of characte
16970 72 73 20 69 6e 20 74 68 69 73 20 74 6f 6b 65 6e  rs in this token
16980 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e   */.};../*.** An
16990 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 69   instance of thi
169a0 73 20 73 74 72 75 63 74 75 72 65 20 63 6f 6e 74  s structure cont
169b0 61 69 6e 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  ains information
169c0 20 6e 65 65 64 65 64 20 74 6f 20 67 65 6e 65 72   needed to gener
169d0 61 74 65 0a 2a 2a 20 63 6f 64 65 20 66 6f 72 20  ate.** code for 
169e0 61 20 53 45 4c 45 43 54 20 74 68 61 74 20 63 6f  a SELECT that co
169f0 6e 74 61 69 6e 73 20 61 67 67 72 65 67 61 74 65  ntains aggregate
16a00 20 66 75 6e 63 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a   functions..**.*
16a10 2a 20 49 66 20 45 78 70 72 2e 6f 70 3d 3d 54 4b  * If Expr.op==TK
16a20 5f 41 47 47 5f 43 4f 4c 55 4d 4e 20 6f 72 20 54  _AGG_COLUMN or T
16a30 4b 5f 41 47 47 5f 46 55 4e 43 54 49 4f 4e 20 74  K_AGG_FUNCTION t
16a40 68 65 6e 20 45 78 70 72 2e 70 41 67 67 49 6e 66  hen Expr.pAggInf
16a50 6f 20 69 73 20 61 0a 2a 2a 20 70 6f 69 6e 74 65  o is a.** pointe
16a60 72 20 74 6f 20 74 68 69 73 20 73 74 72 75 63 74  r to this struct
16a70 75 72 65 2e 20 20 54 68 65 20 45 78 70 72 2e 69  ure.  The Expr.i
16a80 43 6f 6c 75 6d 6e 20 66 69 65 6c 64 20 69 73 20  Column field is 
16a90 74 68 65 20 69 6e 64 65 78 20 69 6e 0a 2a 2a 20  the index in.** 
16aa0 41 67 67 49 6e 66 6f 2e 61 43 6f 6c 5b 5d 20 6f  AggInfo.aCol[] o
16ab0 72 20 41 67 67 49 6e 66 6f 2e 61 46 75 6e 63 5b  r AggInfo.aFunc[
16ac0 5d 20 6f 66 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  ] of information
16ad0 20 6e 65 65 64 65 64 20 74 6f 20 67 65 6e 65 72   needed to gener
16ae0 61 74 65 0a 2a 2a 20 63 6f 64 65 20 66 6f 72 20  ate.** code for 
16af0 74 68 61 74 20 6e 6f 64 65 2e 0a 2a 2a 0a 2a 2a  that node..**.**
16b00 20 41 67 67 49 6e 66 6f 2e 70 47 72 6f 75 70 42   AggInfo.pGroupB
16b10 79 20 61 6e 64 20 41 67 67 49 6e 66 6f 2e 61 46  y and AggInfo.aF
16b20 75 6e 63 2e 70 45 78 70 72 20 70 6f 69 6e 74 20  unc.pExpr point 
16b30 74 6f 20 66 69 65 6c 64 73 20 77 69 74 68 69 6e  to fields within
16b40 20 74 68 65 0a 2a 2a 20 6f 72 69 67 69 6e 61 6c   the.** original
16b50 20 53 65 6c 65 63 74 20 73 74 72 75 63 74 75 72   Select structur
16b60 65 20 74 68 61 74 20 64 65 73 63 72 69 62 65 73  e that describes
16b70 20 74 68 65 20 53 45 4c 45 43 54 20 73 74 61 74   the SELECT stat
16b80 65 6d 65 6e 74 2e 20 20 54 68 65 73 65 0a 2a 2a  ement.  These.**
16b90 20 66 69 65 6c 64 73 20 64 6f 20 6e 6f 74 20 6e   fields do not n
16ba0 65 65 64 20 74 6f 20 62 65 20 66 72 65 65 64 20  eed to be freed 
16bb0 77 68 65 6e 20 64 65 61 6c 6c 6f 63 61 74 69 6e  when deallocatin
16bc0 67 20 74 68 65 20 41 67 67 49 6e 66 6f 20 73 74  g the AggInfo st
16bd0 72 75 63 74 75 72 65 2e 0a 2a 2f 0a 73 74 72 75  ructure..*/.stru
16be0 63 74 20 41 67 67 49 6e 66 6f 20 7b 0a 20 20 75  ct AggInfo {.  u
16bf0 38 20 64 69 72 65 63 74 4d 6f 64 65 3b 20 20 20  8 directMode;   
16c00 20 20 20 20 20 20 20 2f 2a 20 44 69 72 65 63 74         /* Direct
16c10 20 72 65 6e 64 65 72 69 6e 67 20 6d 6f 64 65 20   rendering mode 
16c20 6d 65 61 6e 73 20 74 61 6b 65 20 64 61 74 61 20  means take data 
16c30 64 69 72 65 63 74 6c 79 0a 20 20 20 20 20 20 20  directly.       
16c40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16c50 20 20 20 2a 2a 20 66 72 6f 6d 20 73 6f 75 72 63     ** from sourc
16c60 65 20 74 61 62 6c 65 73 20 72 61 74 68 65 72 20  e tables rather 
16c70 74 68 61 6e 20 66 72 6f 6d 20 61 63 63 75 6d 75  than from accumu
16c80 6c 61 74 6f 72 73 20 2a 2f 0a 20 20 75 38 20 75  lators */.  u8 u
16c90 73 65 53 6f 72 74 69 6e 67 49 64 78 3b 20 20 20  seSortingIdx;   
16ca0 20 20 20 20 2f 2a 20 49 6e 20 64 69 72 65 63 74      /* In direct
16cb0 20 6d 6f 64 65 2c 20 72 65 66 65 72 65 6e 63 65   mode, reference
16cc0 20 74 68 65 20 73 6f 72 74 69 6e 67 20 69 6e 64   the sorting ind
16cd0 65 78 20 72 61 74 68 65 72 0a 20 20 20 20 20 20  ex rather.      
16ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16cf0 20 20 20 20 2a 2a 20 74 68 61 6e 20 74 68 65 20      ** than the 
16d00 73 6f 75 72 63 65 20 74 61 62 6c 65 20 2a 2f 0a  source table */.
16d10 20 20 69 6e 74 20 73 6f 72 74 69 6e 67 49 64 78    int sortingIdx
16d20 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 43 75 72  ;         /* Cur
16d30 73 6f 72 20 6e 75 6d 62 65 72 20 6f 66 20 74 68  sor number of th
16d40 65 20 73 6f 72 74 69 6e 67 20 69 6e 64 65 78 20  e sorting index 
16d50 2a 2f 0a 20 20 69 6e 74 20 73 6f 72 74 69 6e 67  */.  int sorting
16d60 49 64 78 50 54 61 62 3b 20 20 20 20 20 2f 2a 20  IdxPTab;     /* 
16d70 43 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 6f 66  Cursor number of
16d80 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 20 2a 2f   pseudo-table */
16d90 0a 20 20 69 6e 74 20 6e 53 6f 72 74 69 6e 67 43  .  int nSortingC
16da0 6f 6c 75 6d 6e 3b 20 20 20 20 20 2f 2a 20 4e 75  olumn;     /* Nu
16db0 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20  mber of columns 
16dc0 69 6e 20 74 68 65 20 73 6f 72 74 69 6e 67 20 69  in the sorting i
16dd0 6e 64 65 78 20 2a 2f 0a 20 20 69 6e 74 20 6d 6e  ndex */.  int mn
16de0 52 65 67 2c 20 6d 78 52 65 67 3b 20 20 20 20 20  Reg, mxReg;     
16df0 20 20 2f 2a 20 52 61 6e 67 65 20 6f 66 20 72 65    /* Range of re
16e00 67 69 73 74 65 72 73 20 61 6c 6c 6f 63 61 74 65  gisters allocate
16e10 64 20 66 6f 72 20 61 43 6f 6c 20 61 6e 64 20 61  d for aCol and a
16e20 46 75 6e 63 20 2a 2f 0a 20 20 45 78 70 72 4c 69  Func */.  ExprLi
16e30 73 74 20 2a 70 47 72 6f 75 70 42 79 3b 20 20 20  st *pGroupBy;   
16e40 20 20 2f 2a 20 54 68 65 20 67 72 6f 75 70 20 62    /* The group b
16e50 79 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 73 74  y clause */.  st
16e60 72 75 63 74 20 41 67 67 49 6e 66 6f 5f 63 6f 6c  ruct AggInfo_col
16e70 20 7b 20 20 20 20 2f 2a 20 46 6f 72 20 65 61 63   {    /* For eac
16e80 68 20 63 6f 6c 75 6d 6e 20 75 73 65 64 20 69 6e  h column used in
16e90 20 73 6f 75 72 63 65 20 74 61 62 6c 65 73 20 2a   source tables *
16ea0 2f 0a 20 20 20 20 54 61 62 6c 65 20 2a 70 54 61  /.    Table *pTa
16eb0 62 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  b;             /
16ec0 2a 20 53 6f 75 72 63 65 20 74 61 62 6c 65 20 2a  * Source table *
16ed0 2f 0a 20 20 20 20 69 6e 74 20 69 54 61 62 6c 65  /.    int iTable
16ee0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
16ef0 2a 20 43 75 72 73 6f 72 20 6e 75 6d 62 65 72 20  * Cursor number 
16f00 6f 66 20 74 68 65 20 73 6f 75 72 63 65 20 74 61  of the source ta
16f10 62 6c 65 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69  ble */.    int i
16f20 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20 20  Column;         
16f30 20 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20 6e 75      /* Column nu
16f40 6d 62 65 72 20 77 69 74 68 69 6e 20 74 68 65 20  mber within the 
16f50 73 6f 75 72 63 65 20 74 61 62 6c 65 20 2a 2f 0a  source table */.
16f60 20 20 20 20 69 6e 74 20 69 53 6f 72 74 65 72 43      int iSorterC
16f70 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20 2f 2a 20  olumn;       /* 
16f80 43 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 69 6e  Column number in
16f90 20 74 68 65 20 73 6f 72 74 69 6e 67 20 69 6e 64   the sorting ind
16fa0 65 78 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 4d  ex */.    int iM
16fb0 65 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  em;             
16fc0 20 20 20 2f 2a 20 4d 65 6d 6f 72 79 20 6c 6f 63     /* Memory loc
16fd0 61 74 69 6f 6e 20 74 68 61 74 20 61 63 74 73 20  ation that acts 
16fe0 61 73 20 61 63 63 75 6d 75 6c 61 74 6f 72 20 2a  as accumulator *
16ff0 2f 0a 20 20 20 20 45 78 70 72 20 2a 70 45 78 70  /.    Expr *pExp
17000 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  r;             /
17010 2a 20 54 68 65 20 6f 72 69 67 69 6e 61 6c 20 65  * The original e
17020 78 70 72 65 73 73 69 6f 6e 20 2a 2f 0a 20 20 7d  xpression */.  }
17030 20 2a 61 43 6f 6c 3b 0a 20 20 69 6e 74 20 6e 43   *aCol;.  int nC
17040 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20 20 20  olumn;          
17050 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 75    /* Number of u
17060 73 65 64 20 65 6e 74 72 69 65 73 20 69 6e 20 61  sed entries in a
17070 43 6f 6c 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 6e  Col[] */.  int n
17080 41 63 63 75 6d 75 6c 61 74 6f 72 3b 20 20 20 20  Accumulator;    
17090 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
170a0 63 6f 6c 75 6d 6e 73 20 74 68 61 74 20 73 68 6f  columns that sho
170b0 77 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65  w through to the
170c0 20 6f 75 74 70 75 74 2e 0a 20 20 20 20 20 20 20   output..       
170d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
170e0 20 20 20 2a 2a 20 41 64 64 69 74 69 6f 6e 61 6c     ** Additional
170f0 20 63 6f 6c 75 6d 6e 73 20 61 72 65 20 75 73 65   columns are use
17100 64 20 6f 6e 6c 79 20 61 73 20 70 61 72 61 6d 65  d only as parame
17110 74 65 72 73 20 74 6f 0a 20 20 20 20 20 20 20 20  ters to.        
17120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17130 20 20 2a 2a 20 61 67 67 72 65 67 61 74 65 20 66    ** aggregate f
17140 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a 20 20 73 74  unctions */.  st
17150 72 75 63 74 20 41 67 67 49 6e 66 6f 5f 66 75 6e  ruct AggInfo_fun
17160 63 20 7b 20 20 20 2f 2a 20 46 6f 72 20 65 61 63  c {   /* For eac
17170 68 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63  h aggregate func
17180 74 69 6f 6e 20 2a 2f 0a 20 20 20 20 45 78 70 72  tion */.    Expr
17190 20 2a 70 45 78 70 72 3b 20 20 20 20 20 20 20 20   *pExpr;        
171a0 20 20 20 20 20 2f 2a 20 45 78 70 72 65 73 73 69       /* Expressi
171b0 6f 6e 20 65 6e 63 6f 64 69 6e 67 20 74 68 65 20  on encoding the 
171c0 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 20 20  function */.    
171d0 46 75 6e 63 44 65 66 20 2a 70 46 75 6e 63 3b 20  FuncDef *pFunc; 
171e0 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
171f0 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69  aggregate functi
17200 6f 6e 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  on implementatio
17210 6e 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 4d 65  n */.    int iMe
17220 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  m;              
17230 20 20 2f 2a 20 4d 65 6d 6f 72 79 20 6c 6f 63 61    /* Memory loca
17240 74 69 6f 6e 20 74 68 61 74 20 61 63 74 73 20 61  tion that acts a
17250 73 20 61 63 63 75 6d 75 6c 61 74 6f 72 20 2a 2f  s accumulator */
17260 0a 20 20 20 20 69 6e 74 20 69 44 69 73 74 69 6e  .    int iDistin
17270 63 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ct;           /*
17280 20 45 70 68 65 6d 65 72 61 6c 20 74 61 62 6c 65   Ephemeral table
17290 20 75 73 65 64 20 74 6f 20 65 6e 66 6f 72 63 65   used to enforce
172a0 20 44 49 53 54 49 4e 43 54 20 2a 2f 0a 20 20 7d   DISTINCT */.  }
172b0 20 2a 61 46 75 6e 63 3b 0a 20 20 69 6e 74 20 6e   *aFunc;.  int n
172c0 46 75 6e 63 3b 20 20 20 20 20 20 20 20 20 20 20  Func;           
172d0 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
172e0 65 6e 74 72 69 65 73 20 69 6e 20 61 46 75 6e 63  entries in aFunc
172f0 5b 5d 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  [] */.};../*.** 
17300 54 68 65 20 64 61 74 61 74 79 70 65 20 79 6e 56  The datatype ynV
17310 61 72 20 69 73 20 61 20 73 69 67 6e 65 64 20 69  ar is a signed i
17320 6e 74 65 67 65 72 2c 20 65 69 74 68 65 72 20 31  nteger, either 1
17330 36 2d 62 69 74 20 6f 72 20 33 32 2d 62 69 74 2e  6-bit or 32-bit.
17340 0a 2a 2a 20 55 73 75 61 6c 6c 79 20 69 74 20 69  .** Usually it i
17350 73 20 31 36 2d 62 69 74 73 2e 20 20 42 75 74 20  s 16-bits.  But 
17360 69 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 56 41  if SQLITE_MAX_VA
17370 52 49 41 42 4c 45 5f 4e 55 4d 42 45 52 20 69 73  RIABLE_NUMBER is
17380 20 67 72 65 61 74 65 72 0a 2a 2a 20 74 68 61 6e   greater.** than
17390 20 33 32 37 36 37 20 77 65 20 68 61 76 65 20 74   32767 we have t
173a0 6f 20 6d 61 6b 65 20 69 74 20 33 32 2d 62 69 74  o make it 32-bit
173b0 2e 20 20 31 36 2d 62 69 74 20 69 73 20 70 72 65  .  16-bit is pre
173c0 66 65 72 72 65 64 20 62 65 63 61 75 73 65 0a 2a  ferred because.*
173d0 2a 20 69 74 20 75 73 65 73 20 6c 65 73 73 20 6d  * it uses less m
173e0 65 6d 6f 72 79 20 69 6e 20 74 68 65 20 45 78 70  emory in the Exp
173f0 72 20 6f 62 6a 65 63 74 2c 20 77 68 69 63 68 20  r object, which 
17400 69 73 20 61 20 62 69 67 20 6d 65 6d 6f 72 79 20  is a big memory 
17410 75 73 65 72 0a 2a 2a 20 69 6e 20 73 79 73 74 65  user.** in syste
17420 6d 73 20 77 69 74 68 20 6c 6f 74 73 20 6f 66 20  ms with lots of 
17430 70 72 65 70 61 72 65 64 20 73 74 61 74 65 6d 65  prepared stateme
17440 6e 74 73 2e 20 20 41 6e 64 20 66 65 77 20 61 70  nts.  And few ap
17450 70 6c 69 63 61 74 69 6f 6e 73 0a 2a 2a 20 6e 65  plications.** ne
17460 65 64 20 6d 6f 72 65 20 74 68 61 6e 20 61 62 6f  ed more than abo
17470 75 74 20 31 30 20 6f 72 20 32 30 20 76 61 72 69  ut 10 or 20 vari
17480 61 62 6c 65 73 2e 20 20 42 75 74 20 73 6f 6d 65  ables.  But some
17490 20 65 78 74 72 65 6d 65 20 75 73 65 72 73 20 77   extreme users w
174a0 61 6e 74 0a 2a 2a 20 74 6f 20 68 61 76 65 20 70  ant.** to have p
174b0 72 65 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e  repared statemen
174c0 74 73 20 77 69 74 68 20 6f 76 65 72 20 33 32 37  ts with over 327
174d0 36 37 20 76 61 72 69 61 62 6c 65 73 2c 20 61 6e  67 variables, an
174e0 64 20 66 6f 72 20 74 68 65 6d 0a 2a 2a 20 74 68  d for them.** th
174f0 65 20 6f 70 74 69 6f 6e 20 69 73 20 61 76 61 69  e option is avai
17500 6c 61 62 6c 65 20 28 61 74 20 63 6f 6d 70 69 6c  lable (at compil
17510 65 2d 74 69 6d 65 29 2e 0a 2a 2f 0a 23 69 66 20  e-time)..*/.#if 
17520 53 51 4c 49 54 45 5f 4d 41 58 5f 56 41 52 49 41  SQLITE_MAX_VARIA
17530 42 4c 45 5f 4e 55 4d 42 45 52 3c 3d 33 32 37 36  BLE_NUMBER<=3276
17540 37 0a 74 79 70 65 64 65 66 20 69 31 36 20 79 6e  7.typedef i16 yn
17550 56 61 72 3b 0a 23 65 6c 73 65 0a 74 79 70 65 64  Var;.#else.typed
17560 65 66 20 69 6e 74 20 79 6e 56 61 72 3b 0a 23 65  ef int ynVar;.#e
17570 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68  ndif../*.** Each
17580 20 6e 6f 64 65 20 6f 66 20 61 6e 20 65 78 70 72   node of an expr
17590 65 73 73 69 6f 6e 20 69 6e 20 74 68 65 20 70 61  ession in the pa
175a0 72 73 65 20 74 72 65 65 20 69 73 20 61 6e 20 69  rse tree is an i
175b0 6e 73 74 61 6e 63 65 0a 2a 2a 20 6f 66 20 74 68  nstance.** of th
175c0 69 73 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a  is structure..**
175d0 0a 2a 2a 20 45 78 70 72 2e 6f 70 20 69 73 20 74  .** Expr.op is t
175e0 68 65 20 6f 70 63 6f 64 65 2e 20 54 68 65 20 69  he opcode. The i
175f0 6e 74 65 67 65 72 20 70 61 72 73 65 72 20 74 6f  nteger parser to
17600 6b 65 6e 20 63 6f 64 65 73 20 61 72 65 20 72 65  ken codes are re
17610 75 73 65 64 0a 2a 2a 20 61 73 20 6f 70 63 6f 64  used.** as opcod
17620 65 73 20 68 65 72 65 2e 20 46 6f 72 20 65 78 61  es here. For exa
17630 6d 70 6c 65 2c 20 74 68 65 20 70 61 72 73 65 72  mple, the parser
17640 20 64 65 66 69 6e 65 73 20 54 4b 5f 47 45 20 74   defines TK_GE t
17650 6f 20 62 65 20 61 6e 20 69 6e 74 65 67 65 72 0a  o be an integer.
17660 2a 2a 20 63 6f 64 65 20 72 65 70 72 65 73 65 6e  ** code represen
17670 74 69 6e 67 20 74 68 65 20 22 3e 3d 22 20 6f 70  ting the ">=" op
17680 65 72 61 74 6f 72 2e 20 54 68 69 73 20 73 61 6d  erator. This sam
17690 65 20 69 6e 74 65 67 65 72 20 63 6f 64 65 20 69  e integer code i
176a0 73 20 72 65 75 73 65 64 0a 2a 2a 20 74 6f 20 72  s reused.** to r
176b0 65 70 72 65 73 65 6e 74 20 74 68 65 20 67 72 65  epresent the gre
176c0 61 74 65 72 2d 74 68 61 6e 2d 6f 72 2d 65 71 75  ater-than-or-equ
176d0 61 6c 2d 74 6f 20 6f 70 65 72 61 74 6f 72 20 69  al-to operator i
176e0 6e 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e  n the expression
176f0 0a 2a 2a 20 74 72 65 65 2e 0a 2a 2a 0a 2a 2a 20  .** tree..**.** 
17700 49 66 20 74 68 65 20 65 78 70 72 65 73 73 69 6f  If the expressio
17710 6e 20 69 73 20 61 6e 20 53 51 4c 20 6c 69 74 65  n is an SQL lite
17720 72 61 6c 20 28 54 4b 5f 49 4e 54 45 47 45 52 2c  ral (TK_INTEGER,
17730 20 54 4b 5f 46 4c 4f 41 54 2c 20 54 4b 5f 42 4c   TK_FLOAT, TK_BL
17740 4f 42 2c 0a 2a 2a 20 6f 72 20 54 4b 5f 53 54 52  OB,.** or TK_STR
17750 49 4e 47 29 2c 20 74 68 65 6e 20 45 78 70 72 2e  ING), then Expr.
17760 74 6f 6b 65 6e 20 63 6f 6e 74 61 69 6e 73 20 74  token contains t
17770 68 65 20 74 65 78 74 20 6f 66 20 74 68 65 20 53  he text of the S
17780 51 4c 20 6c 69 74 65 72 61 6c 2e 20 49 66 0a 2a  QL literal. If.*
17790 2a 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e  * the expression
177a0 20 69 73 20 61 20 76 61 72 69 61 62 6c 65 20 28   is a variable (
177b0 54 4b 5f 56 41 52 49 41 42 4c 45 29 2c 20 74 68  TK_VARIABLE), th
177c0 65 6e 20 45 78 70 72 2e 74 6f 6b 65 6e 20 63 6f  en Expr.token co
177d0 6e 74 61 69 6e 73 20 74 68 65 0a 2a 2a 20 76 61  ntains the.** va
177e0 72 69 61 62 6c 65 20 6e 61 6d 65 2e 20 46 69 6e  riable name. Fin
177f0 61 6c 6c 79 2c 20 69 66 20 74 68 65 20 65 78 70  ally, if the exp
17800 72 65 73 73 69 6f 6e 20 69 73 20 61 6e 20 53 51  ression is an SQ
17810 4c 20 66 75 6e 63 74 69 6f 6e 20 28 54 4b 5f 46  L function (TK_F
17820 55 4e 43 54 49 4f 4e 29 2c 0a 2a 2a 20 74 68 65  UNCTION),.** the
17830 6e 20 45 78 70 72 2e 74 6f 6b 65 6e 20 63 6f 6e  n Expr.token con
17840 74 61 69 6e 73 20 74 68 65 20 6e 61 6d 65 20 6f  tains the name o
17850 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 2e 0a  f the function..
17860 2a 2a 0a 2a 2a 20 45 78 70 72 2e 70 52 69 67 68  **.** Expr.pRigh
17870 74 20 61 6e 64 20 45 78 70 72 2e 70 4c 65 66 74  t and Expr.pLeft
17880 20 61 72 65 20 74 68 65 20 6c 65 66 74 20 61 6e   are the left an
17890 64 20 72 69 67 68 74 20 73 75 62 65 78 70 72 65  d right subexpre
178a0 73 73 69 6f 6e 73 20 6f 66 20 61 0a 2a 2a 20 62  ssions of a.** b
178b0 69 6e 61 72 79 20 6f 70 65 72 61 74 6f 72 2e 20  inary operator. 
178c0 45 69 74 68 65 72 20 6f 72 20 62 6f 74 68 20 6d  Either or both m
178d0 61 79 20 62 65 20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a  ay be NULL..**.*
178e0 2a 20 45 78 70 72 2e 78 2e 70 4c 69 73 74 20 69  * Expr.x.pList i
178f0 73 20 61 20 6c 69 73 74 20 6f 66 20 61 72 67 75  s a list of argu
17900 6d 65 6e 74 73 20 69 66 20 74 68 65 20 65 78 70  ments if the exp
17910 72 65 73 73 69 6f 6e 20 69 73 20 61 6e 20 53 51  ression is an SQ
17920 4c 20 66 75 6e 63 74 69 6f 6e 2c 0a 2a 2a 20 61  L function,.** a
17930 20 43 41 53 45 20 65 78 70 72 65 73 73 69 6f 6e   CASE expression
17940 20 6f 72 20 61 6e 20 49 4e 20 65 78 70 72 65 73   or an IN expres
17950 73 69 6f 6e 20 6f 66 20 74 68 65 20 66 6f 72 6d  sion of the form
17960 20 22 3c 6c 68 73 3e 20 49 4e 20 28 3c 79 3e 2c   "<lhs> IN (<y>,
17970 20 3c 7a 3e 2e 2e 2e 29 22 2e 0a 2a 2a 20 45 78   <z>...)"..** Ex
17980 70 72 2e 78 2e 70 53 65 6c 65 63 74 20 69 73 20  pr.x.pSelect is 
17990 75 73 65 64 20 69 66 20 74 68 65 20 65 78 70 72  used if the expr
179a0 65 73 73 69 6f 6e 20 69 73 20 61 20 73 75 62 2d  ession is a sub-
179b0 73 65 6c 65 63 74 20 6f 72 20 61 6e 20 65 78 70  select or an exp
179c0 72 65 73 73 69 6f 6e 20 6f 66 0a 2a 2a 20 74 68  ression of.** th
179d0 65 20 66 6f 72 6d 20 22 3c 6c 68 73 3e 20 49 4e  e form "<lhs> IN
179e0 20 28 53 45 4c 45 43 54 20 2e 2e 2e 29 22 2e 20   (SELECT ...)". 
179f0 49 66 20 74 68 65 20 45 50 5f 78 49 73 53 65 6c  If the EP_xIsSel
17a00 65 63 74 20 62 69 74 20 69 73 20 73 65 74 20 69  ect bit is set i
17a10 6e 20 74 68 65 0a 2a 2a 20 45 78 70 72 2e 66 6c  n the.** Expr.fl
17a20 61 67 73 20 6d 61 73 6b 2c 20 74 68 65 6e 20 45  ags mask, then E
17a30 78 70 72 2e 78 2e 70 53 65 6c 65 63 74 20 69 73  xpr.x.pSelect is
17a40 20 76 61 6c 69 64 2e 20 4f 74 68 65 72 77 69 73   valid. Otherwis
17a50 65 2c 20 45 78 70 72 2e 78 2e 70 4c 69 73 74 20  e, Expr.x.pList 
17a60 69 73 0a 2a 2a 20 76 61 6c 69 64 2e 0a 2a 2a 0a  is.** valid..**.
17a70 2a 2a 20 41 6e 20 65 78 70 72 65 73 73 69 6f 6e  ** An expression
17a80 20 6f 66 20 74 68 65 20 66 6f 72 6d 20 49 44 20   of the form ID 
17a90 6f 72 20 49 44 2e 49 44 20 72 65 66 65 72 73 20  or ID.ID refers 
17aa0 74 6f 20 61 20 63 6f 6c 75 6d 6e 20 69 6e 20 61  to a column in a
17ab0 20 74 61 62 6c 65 2e 0a 2a 2a 20 46 6f 72 20 73   table..** For s
17ac0 75 63 68 20 65 78 70 72 65 73 73 69 6f 6e 73 2c  uch expressions,
17ad0 20 45 78 70 72 2e 6f 70 20 69 73 20 73 65 74 20   Expr.op is set 
17ae0 74 6f 20 54 4b 5f 43 4f 4c 55 4d 4e 20 61 6e 64  to TK_COLUMN and
17af0 20 45 78 70 72 2e 69 54 61 62 6c 65 20 69 73 0a   Expr.iTable is.
17b00 2a 2a 20 74 68 65 20 69 6e 74 65 67 65 72 20 63  ** the integer c
17b10 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 6f 66 20  ursor number of 
17b20 61 20 56 44 42 45 20 63 75 72 73 6f 72 20 70 6f  a VDBE cursor po
17b30 69 6e 74 69 6e 67 20 74 6f 20 74 68 61 74 20 74  inting to that t
17b40 61 62 6c 65 20 61 6e 64 0a 2a 2a 20 45 78 70 72  able and.** Expr
17b50 2e 69 43 6f 6c 75 6d 6e 20 69 73 20 74 68 65 20  .iColumn is the 
17b60 63 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 66 6f  column number fo
17b70 72 20 74 68 65 20 73 70 65 63 69 66 69 63 20 63  r the specific c
17b80 6f 6c 75 6d 6e 2e 20 20 49 66 20 74 68 65 0a 2a  olumn.  If the.*
17b90 2a 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20  * expression is 
17ba0 75 73 65 64 20 61 73 20 61 20 72 65 73 75 6c 74  used as a result
17bb0 20 69 6e 20 61 6e 20 61 67 67 72 65 67 61 74 65   in an aggregate
17bc0 20 53 45 4c 45 43 54 2c 20 74 68 65 6e 20 74 68   SELECT, then th
17bd0 65 0a 2a 2a 20 76 61 6c 75 65 20 69 73 20 61 6c  e.** value is al
17be0 73 6f 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65  so stored in the
17bf0 20 45 78 70 72 2e 69 41 67 67 20 63 6f 6c 75 6d   Expr.iAgg colum
17c00 6e 20 69 6e 20 74 68 65 20 61 67 67 72 65 67 61  n in the aggrega
17c10 74 65 20 73 6f 20 74 68 61 74 0a 2a 2a 20 69 74  te so that.** it
17c20 20 63 61 6e 20 62 65 20 61 63 63 65 73 73 65 64   can be accessed
17c30 20 61 66 74 65 72 20 61 6c 6c 20 61 67 67 72 65   after all aggre
17c40 67 61 74 65 73 20 61 72 65 20 63 6f 6d 70 75 74  gates are comput
17c50 65 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  ed..**.** If the
17c60 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61   expression is a
17c70 6e 20 75 6e 62 6f 75 6e 64 20 76 61 72 69 61 62  n unbound variab
17c80 6c 65 20 6d 61 72 6b 65 72 20 28 61 20 71 75 65  le marker (a que
17c90 73 74 69 6f 6e 20 6d 61 72 6b 0a 2a 2a 20 63 68  stion mark.** ch
17ca0 61 72 61 63 74 65 72 20 27 3f 27 20 69 6e 20 74  aracter '?' in t
17cb0 68 65 20 6f 72 69 67 69 6e 61 6c 20 53 51 4c 29  he original SQL)
17cc0 20 74 68 65 6e 20 74 68 65 20 45 78 70 72 2e 69   then the Expr.i
17cd0 54 61 62 6c 65 20 68 6f 6c 64 73 20 74 68 65 20  Table holds the 
17ce0 69 6e 64 65 78 0a 2a 2a 20 6e 75 6d 62 65 72 20  index.** number 
17cf0 66 6f 72 20 74 68 61 74 20 76 61 72 69 61 62 6c  for that variabl
17d00 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  e..**.** If the 
17d10 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61 20  expression is a 
17d20 73 75 62 71 75 65 72 79 20 74 68 65 6e 20 45 78  subquery then Ex
17d30 70 72 2e 69 43 6f 6c 75 6d 6e 20 68 6f 6c 64 73  pr.iColumn holds
17d40 20 61 6e 20 69 6e 74 65 67 65 72 0a 2a 2a 20 72   an integer.** r
17d50 65 67 69 73 74 65 72 20 6e 75 6d 62 65 72 20 63  egister number c
17d60 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 72 65  ontaining the re
17d70 73 75 6c 74 20 6f 66 20 74 68 65 20 73 75 62 71  sult of the subq
17d80 75 65 72 79 2e 20 20 49 66 20 74 68 65 0a 2a 2a  uery.  If the.**
17d90 20 73 75 62 71 75 65 72 79 20 67 69 76 65 73 20   subquery gives 
17da0 61 20 63 6f 6e 73 74 61 6e 74 20 72 65 73 75 6c  a constant resul
17db0 74 2c 20 74 68 65 6e 20 69 54 61 62 6c 65 20 69  t, then iTable i
17dc0 73 20 2d 31 2e 20 20 49 66 20 74 68 65 20 73 75  s -1.  If the su
17dd0 62 71 75 65 72 79 0a 2a 2a 20 67 69 76 65 73 20  bquery.** gives 
17de0 61 20 64 69 66 66 65 72 65 6e 74 20 61 6e 73 77  a different answ
17df0 65 72 20 61 74 20 64 69 66 66 65 72 65 6e 74 20  er at different 
17e00 74 69 6d 65 73 20 64 75 72 69 6e 67 20 73 74 61  times during sta
17e10 74 65 6d 65 6e 74 20 70 72 6f 63 65 73 73 69 6e  tement processin
17e20 67 0a 2a 2a 20 74 68 65 6e 20 69 54 61 62 6c 65  g.** then iTable
17e30 20 69 73 20 74 68 65 20 61 64 64 72 65 73 73 20   is the address 
17e40 6f 66 20 61 20 73 75 62 72 6f 75 74 69 6e 65 20  of a subroutine 
17e50 74 68 61 74 20 63 6f 6d 70 75 74 65 73 20 74 68  that computes th
17e60 65 20 73 75 62 71 75 65 72 79 2e 0a 2a 2a 0a 2a  e subquery..**.*
17e70 2a 20 49 66 20 74 68 65 20 45 78 70 72 20 69 73  * If the Expr is
17e80 20 6f 66 20 74 79 70 65 20 4f 50 5f 43 6f 6c 75   of type OP_Colu
17e90 6d 6e 2c 20 61 6e 64 20 74 68 65 20 74 61 62 6c  mn, and the tabl
17ea0 65 20 69 74 20 69 73 20 73 65 6c 65 63 74 69 6e  e it is selectin
17eb0 67 20 66 72 6f 6d 0a 2a 2a 20 69 73 20 61 20 64  g from.** is a d
17ec0 69 73 6b 20 74 61 62 6c 65 20 6f 72 20 74 68 65  isk table or the
17ed0 20 22 6f 6c 64 2e 2a 22 20 70 73 65 75 64 6f 2d   "old.*" pseudo-
17ee0 74 61 62 6c 65 2c 20 74 68 65 6e 20 70 54 61 62  table, then pTab
17ef0 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 0a 2a   points to the.*
17f00 2a 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20  * corresponding 
17f10 74 61 62 6c 65 20 64 65 66 69 6e 69 74 69 6f 6e  table definition
17f20 2e 0a 2a 2a 0a 2a 2a 20 41 4c 4c 4f 43 41 54 49  ..**.** ALLOCATI
17f30 4f 4e 20 4e 4f 54 45 53 3a 0a 2a 2a 0a 2a 2a 20  ON NOTES:.**.** 
17f40 45 78 70 72 20 6f 62 6a 65 63 74 73 20 63 61 6e  Expr objects can
17f50 20 75 73 65 20 61 20 6c 6f 74 20 6f 66 20 6d 65   use a lot of me
17f60 6d 6f 72 79 20 73 70 61 63 65 20 69 6e 20 64 61  mory space in da
17f70 74 61 62 61 73 65 20 73 63 68 65 6d 61 2e 20 20  tabase schema.  
17f80 54 6f 0a 2a 2a 20 68 65 6c 70 20 72 65 64 75 63  To.** help reduc
17f90 65 20 6d 65 6d 6f 72 79 20 72 65 71 75 69 72 65  e memory require
17fa0 6d 65 6e 74 73 2c 20 73 6f 6d 65 74 69 6d 65 73  ments, sometimes
17fb0 20 61 6e 20 45 78 70 72 20 6f 62 6a 65 63 74 20   an Expr object 
17fc0 77 69 6c 6c 20 62 65 0a 2a 2a 20 74 72 75 6e 63  will be.** trunc
17fd0 61 74 65 64 2e 20 20 41 6e 64 20 74 6f 20 72 65  ated.  And to re
17fe0 64 75 63 65 20 74 68 65 20 6e 75 6d 62 65 72 20  duce the number 
17ff0 6f 66 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61  of memory alloca
18000 74 69 6f 6e 73 2c 20 73 6f 6d 65 74 69 6d 65 73  tions, sometimes
18010 0a 2a 2a 20 74 77 6f 20 6f 72 20 6d 6f 72 65 20  .** two or more 
18020 45 78 70 72 20 6f 62 6a 65 63 74 73 20 77 69 6c  Expr objects wil
18030 6c 20 62 65 20 73 74 6f 72 65 64 20 69 6e 20 61  l be stored in a
18040 20 73 69 6e 67 6c 65 20 6d 65 6d 6f 72 79 20 61   single memory a
18050 6c 6c 6f 63 61 74 69 6f 6e 2c 0a 2a 2a 20 74 6f  llocation,.** to
18060 67 65 74 68 65 72 20 77 69 74 68 20 45 78 70 72  gether with Expr
18070 2e 7a 54 6f 6b 65 6e 20 73 74 72 69 6e 67 73 2e  .zToken strings.
18080 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 45 50  .**.** If the EP
18090 5f 52 65 64 75 63 65 64 20 61 6e 64 20 45 50 5f  _Reduced and EP_
180a0 54 6f 6b 65 6e 4f 6e 6c 79 20 66 6c 61 67 73 20  TokenOnly flags 
180b0 61 72 65 20 73 65 74 20 77 68 65 6e 0a 2a 2a 20  are set when.** 
180c0 61 6e 20 45 78 70 72 20 6f 62 6a 65 63 74 20 69  an Expr object i
180d0 73 20 74 72 75 6e 63 61 74 65 64 2e 20 20 57 68  s truncated.  Wh
180e0 65 6e 20 45 50 5f 52 65 64 75 63 65 64 20 69 73  en EP_Reduced is
180f0 20 73 65 74 2c 20 74 68 65 6e 20 61 6c 6c 0a 2a   set, then all.*
18100 2a 20 74 68 65 20 63 68 69 6c 64 20 45 78 70 72  * the child Expr
18110 20 6f 62 6a 65 63 74 73 20 69 6e 20 74 68 65 20   objects in the 
18120 45 78 70 72 2e 70 4c 65 66 74 20 61 6e 64 20 45  Expr.pLeft and E
18130 78 70 72 2e 70 52 69 67 68 74 20 73 75 62 74 72  xpr.pRight subtr
18140 65 65 73 0a 2a 2a 20 61 72 65 20 63 6f 6e 74 61  ees.** are conta
18150 69 6e 65 64 20 77 69 74 68 69 6e 20 74 68 65 20  ined within the 
18160 73 61 6d 65 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f  same memory allo
18170 63 61 74 69 6f 6e 2e 20 20 4e 6f 74 65 2c 20 68  cation.  Note, h
18180 6f 77 65 76 65 72 2c 20 74 68 61 74 0a 2a 2a 20  owever, that.** 
18190 74 68 65 20 73 75 62 74 72 65 65 73 20 69 6e 20  the subtrees in 
181a0 45 78 70 72 2e 78 2e 70 4c 69 73 74 20 6f 72 20  Expr.x.pList or 
181b0 45 78 70 72 2e 78 2e 70 53 65 6c 65 63 74 20 61  Expr.x.pSelect a
181c0 72 65 20 61 6c 77 61 79 73 20 73 65 70 61 72 61  re always separa
181d0 74 65 6c 79 0a 2a 2a 20 61 6c 6c 6f 63 61 74 65  tely.** allocate
181e0 64 2c 20 72 65 67 61 72 64 6c 65 73 73 20 6f 66  d, regardless of
181f0 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20   whether or not 
18200 45 50 5f 52 65 64 75 63 65 64 20 69 73 20 73 65  EP_Reduced is se
18210 74 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 45 78 70  t..*/.struct Exp
18220 72 20 7b 0a 20 20 75 38 20 6f 70 3b 20 20 20 20  r {.  u8 op;    
18230 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
18240 4f 70 65 72 61 74 69 6f 6e 20 70 65 72 66 6f 72  Operation perfor
18250 6d 65 64 20 62 79 20 74 68 69 73 20 6e 6f 64 65  med by this node
18260 20 2a 2f 0a 20 20 63 68 61 72 20 61 66 66 69 6e   */.  char affin
18270 69 74 79 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  ity;         /* 
18280 54 68 65 20 61 66 66 69 6e 69 74 79 20 6f 66 20  The affinity of 
18290 74 68 65 20 63 6f 6c 75 6d 6e 20 6f 72 20 30 20  the column or 0 
182a0 69 66 20 6e 6f 74 20 61 20 63 6f 6c 75 6d 6e 20  if not a column 
182b0 2a 2f 0a 20 20 75 33 32 20 66 6c 61 67 73 3b 20  */.  u32 flags; 
182c0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56              /* V
182d0 61 72 69 6f 75 73 20 66 6c 61 67 73 2e 20 20 45  arious flags.  E
182e0 50 5f 2a 20 53 65 65 20 62 65 6c 6f 77 20 2a 2f  P_* See below */
182f0 0a 20 20 75 6e 69 6f 6e 20 7b 0a 20 20 20 20 63  .  union {.    c
18300 68 61 72 20 2a 7a 54 6f 6b 65 6e 3b 20 20 20 20  har *zToken;    
18310 20 20 20 20 20 20 2f 2a 20 54 6f 6b 65 6e 20 76        /* Token v
18320 61 6c 75 65 2e 20 5a 65 72 6f 20 74 65 72 6d 69  alue. Zero termi
18330 6e 61 74 65 64 20 61 6e 64 20 64 65 71 75 6f 74  nated and dequot
18340 65 64 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 56  ed */.    int iV
18350 61 6c 75 65 3b 20 20 20 20 20 20 20 20 20 20 20  alue;           
18360 20 2f 2a 20 4e 6f 6e 2d 6e 65 67 61 74 69 76 65   /* Non-negative
18370 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20 69   integer value i
18380 66 20 45 50 5f 49 6e 74 56 61 6c 75 65 20 2a 2f  f EP_IntValue */
18390 0a 20 20 7d 20 75 3b 0a 0a 20 20 2f 2a 20 49 66  .  } u;..  /* If
183a0 20 74 68 65 20 45 50 5f 54 6f 6b 65 6e 4f 6e 6c   the EP_TokenOnl
183b0 79 20 66 6c 61 67 20 69 73 20 73 65 74 20 69 6e  y flag is set in
183c0 20 74 68 65 20 45 78 70 72 2e 66 6c 61 67 73 20   the Expr.flags 
183d0 6d 61 73 6b 2c 20 74 68 65 6e 20 6e 6f 0a 20 20  mask, then no.  
183e0 2a 2a 20 73 70 61 63 65 20 69 73 20 61 6c 6c 6f  ** space is allo
183f0 63 61 74 65 64 20 66 6f 72 20 74 68 65 20 66 69  cated for the fi
18400 65 6c 64 73 20 62 65 6c 6f 77 20 74 68 69 73 20  elds below this 
18410 70 6f 69 6e 74 2e 20 41 6e 20 61 74 74 65 6d 70  point. An attemp
18420 74 20 74 6f 0a 20 20 2a 2a 20 61 63 63 65 73 73  t to.  ** access
18430 20 74 68 65 6d 20 77 69 6c 6c 20 72 65 73 75 6c   them will resul
18440 74 20 69 6e 20 61 20 73 65 67 66 61 75 6c 74 20  t in a segfault 
18450 6f 72 20 6d 61 6c 66 75 6e 63 74 69 6f 6e 2e 0a  or malfunction..
18460 20 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a    **************
18470 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
18480 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
18490 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
184a0 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 20 20 45 78 70 72  *******/..  Expr
184b0 20 2a 70 4c 65 66 74 3b 20 20 20 20 20 20 20 20   *pLeft;        
184c0 20 20 20 2f 2a 20 4c 65 66 74 20 73 75 62 6e 6f     /* Left subno
184d0 64 65 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 52  de */.  Expr *pR
184e0 69 67 68 74 3b 20 20 20 20 20 20 20 20 20 20 2f  ight;          /
184f0 2a 20 52 69 67 68 74 20 73 75 62 6e 6f 64 65 20  * Right subnode 
18500 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b 0a 20 20 20  */.  union {.   
18510 20 45 78 70 72 4c 69 73 74 20 2a 70 4c 69 73 74   ExprList *pList
18520 3b 20 20 20 20 20 2f 2a 20 6f 70 20 3d 20 49 4e  ;     /* op = IN
18530 2c 20 45 58 49 53 54 53 2c 20 53 45 4c 45 43 54  , EXISTS, SELECT
18540 2c 20 43 41 53 45 2c 20 46 55 4e 43 54 49 4f 4e  , CASE, FUNCTION
18550 2c 20 42 45 54 57 45 45 4e 20 2a 2f 0a 20 20 20  , BETWEEN */.   
18560 20 53 65 6c 65 63 74 20 2a 70 53 65 6c 65 63 74   Select *pSelect
18570 3b 20 20 20 20 20 2f 2a 20 45 50 5f 78 49 73 53  ;     /* EP_xIsS
18580 65 6c 65 63 74 20 61 6e 64 20 6f 70 20 3d 20 49  elect and op = I
18590 4e 2c 20 45 58 49 53 54 53 2c 20 53 45 4c 45 43  N, EXISTS, SELEC
185a0 54 20 2a 2f 0a 20 20 7d 20 78 3b 0a 0a 20 20 2f  T */.  } x;..  /
185b0 2a 20 49 66 20 74 68 65 20 45 50 5f 52 65 64 75  * If the EP_Redu
185c0 63 65 64 20 66 6c 61 67 20 69 73 20 73 65 74 20  ced flag is set 
185d0 69 6e 20 74 68 65 20 45 78 70 72 2e 66 6c 61 67  in the Expr.flag
185e0 73 20 6d 61 73 6b 2c 20 74 68 65 6e 20 6e 6f 0a  s mask, then no.
185f0 20 20 2a 2a 20 73 70 61 63 65 20 69 73 20 61 6c    ** space is al
18600 6c 6f 63 61 74 65 64 20 66 6f 72 20 74 68 65 20  located for the 
18610 66 69 65 6c 64 73 20 62 65 6c 6f 77 20 74 68 69  fields below thi
18620 73 20 70 6f 69 6e 74 2e 20 41 6e 20 61 74 74 65  s point. An atte
18630 6d 70 74 20 74 6f 0a 20 20 2a 2a 20 61 63 63 65  mpt to.  ** acce
18640 73 73 20 74 68 65 6d 20 77 69 6c 6c 20 72 65 73  ss them will res
18650 75 6c 74 20 69 6e 20 61 20 73 65 67 66 61 75 6c  ult in a segfaul
18660 74 20 6f 72 20 6d 61 6c 66 75 6e 63 74 69 6f 6e  t or malfunction
18670 2e 0a 20 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ..  ************
18680 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
18690 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
186a0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
186b0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 23 69 66 20  *********/..#if 
186c0 53 51 4c 49 54 45 5f 4d 41 58 5f 45 58 50 52 5f  SQLITE_MAX_EXPR_
186d0 44 45 50 54 48 3e 30 0a 20 20 69 6e 74 20 6e 48  DEPTH>0.  int nH
186e0 65 69 67 68 74 3b 20 20 20 20 20 20 20 20 20 20  eight;          
186f0 20 2f 2a 20 48 65 69 67 68 74 20 6f 66 20 74 68   /* Height of th
18700 65 20 74 72 65 65 20 68 65 61 64 65 64 20 62 79  e tree headed by
18710 20 74 68 69 73 20 6e 6f 64 65 20 2a 2f 0a 23 65   this node */.#e
18720 6e 64 69 66 0a 20 20 69 6e 74 20 69 54 61 62 6c  ndif.  int iTabl
18730 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  e;            /*
18740 20 54 4b 5f 43 4f 4c 55 4d 4e 3a 20 63 75 72 73   TK_COLUMN: curs
18750 6f 72 20 6e 75 6d 62 65 72 20 6f 66 20 74 61 62  or number of tab
18760 6c 65 20 68 6f 6c 64 69 6e 67 20 63 6f 6c 75 6d  le holding colum
18770 6e 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  n.              
18780 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 54 4b             ** TK
18790 5f 52 45 47 49 53 54 45 52 3a 20 72 65 67 69 73  _REGISTER: regis
187a0 74 65 72 20 6e 75 6d 62 65 72 0a 20 20 20 20 20  ter number.     
187b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
187c0 20 20 20 20 2a 2a 20 54 4b 5f 54 52 49 47 47 45      ** TK_TRIGGE
187d0 52 3a 20 31 20 2d 3e 20 6e 65 77 2c 20 30 20 2d  R: 1 -> new, 0 -
187e0 3e 20 6f 6c 64 0a 20 20 20 20 20 20 20 20 20 20  > old.          
187f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a                 *
18800 2a 20 45 50 5f 55 6e 6c 69 6b 65 6c 79 3a 20 20  * EP_Unlikely:  
18810 31 33 34 32 31 37 37 32 38 20 74 69 6d 65 73 20  134217728 times 
18820 6c 69 6b 65 6c 69 68 6f 6f 64 0a 20 20 20 20 20  likelihood.     
18830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18840 20 20 20 20 2a 2a 20 54 4b 5f 53 45 4c 45 43 54      ** TK_SELECT
18850 3a 20 31 73 74 20 72 65 67 69 73 74 65 72 20 6f  : 1st register o
18860 66 20 72 65 73 75 6c 74 20 76 65 63 74 6f 72 20  f result vector 
18870 2a 2f 0a 20 20 79 6e 56 61 72 20 69 43 6f 6c 75  */.  ynVar iColu
18880 6d 6e 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54  mn;         /* T
18890 4b 5f 43 4f 4c 55 4d 4e 3a 20 63 6f 6c 75 6d 6e  K_COLUMN: column
188a0 20 69 6e 64 65 78 2e 20 20 2d 31 20 66 6f 72 20   index.  -1 for 
188b0 72 6f 77 69 64 2e 0a 20 20 20 20 20 20 20 20 20  rowid..         
188c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
188d0 2a 2a 20 54 4b 5f 56 41 52 49 41 42 4c 45 3a 20  ** TK_VARIABLE: 
188e0 76 61 72 69 61 62 6c 65 20 6e 75 6d 62 65 72 20  variable number 
188f0 28 61 6c 77 61 79 73 20 3e 3d 20 31 29 2e 0a 20  (always >= 1).. 
18900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18910 20 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f 53 45          ** TK_SE
18920 4c 45 43 54 5f 43 4f 4c 55 4d 4e 3a 20 63 6f 6c  LECT_COLUMN: col
18930 75 6d 6e 20 6f 66 20 74 68 65 20 72 65 73 75 6c  umn of the resul
18940 74 20 76 65 63 74 6f 72 20 2a 2f 0a 20 20 69 31  t vector */.  i1
18950 36 20 69 41 67 67 3b 20 20 20 20 20 20 20 20 20  6 iAgg;         
18960 20 20 20 20 20 2f 2a 20 57 68 69 63 68 20 65 6e       /* Which en
18970 74 72 79 20 69 6e 20 70 41 67 67 49 6e 66 6f 2d  try in pAggInfo-
18980 3e 61 43 6f 6c 5b 5d 20 6f 72 20 2d 3e 61 46 75  >aCol[] or ->aFu
18990 6e 63 5b 5d 20 2a 2f 0a 20 20 69 31 36 20 69 52  nc[] */.  i16 iR
189a0 69 67 68 74 4a 6f 69 6e 54 61 62 6c 65 3b 20 20  ightJoinTable;  
189b0 20 2f 2a 20 49 66 20 45 50 5f 46 72 6f 6d 4a 6f   /* If EP_FromJo
189c0 69 6e 2c 20 74 68 65 20 72 69 67 68 74 20 74 61  in, the right ta
189d0 62 6c 65 20 6f 66 20 74 68 65 20 6a 6f 69 6e 20  ble of the join 
189e0 2a 2f 0a 20 20 75 38 20 6f 70 32 3b 20 20 20 20  */.  u8 op2;    
189f0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
18a00 4b 5f 52 45 47 49 53 54 45 52 3a 20 6f 72 69 67  K_REGISTER: orig
18a10 69 6e 61 6c 20 76 61 6c 75 65 20 6f 66 20 45 78  inal value of Ex
18a20 70 72 2e 6f 70 0a 20 20 20 20 20 20 20 20 20 20  pr.op.          
18a30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a                 *
18a40 2a 20 54 4b 5f 43 4f 4c 55 4d 4e 3a 20 74 68 65  * TK_COLUMN: the
18a50 20 76 61 6c 75 65 20 6f 66 20 70 35 20 66 6f 72   value of p5 for
18a60 20 4f 50 5f 43 6f 6c 75 6d 6e 0a 20 20 20 20 20   OP_Column.     
18a70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18a80 20 20 20 20 2a 2a 20 54 4b 5f 41 47 47 5f 46 55      ** TK_AGG_FU
18a90 4e 43 54 49 4f 4e 3a 20 6e 65 73 74 69 6e 67 20  NCTION: nesting 
18aa0 64 65 70 74 68 20 2a 2f 0a 20 20 41 67 67 49 6e  depth */.  AggIn
18ab0 66 6f 20 2a 70 41 67 67 49 6e 66 6f 3b 20 20 20  fo *pAggInfo;   
18ac0 20 20 2f 2a 20 55 73 65 64 20 62 79 20 54 4b 5f    /* Used by TK_
18ad0 41 47 47 5f 43 4f 4c 55 4d 4e 20 61 6e 64 20 54  AGG_COLUMN and T
18ae0 4b 5f 41 47 47 5f 46 55 4e 43 54 49 4f 4e 20 2a  K_AGG_FUNCTION *
18af0 2f 0a 20 20 54 61 62 6c 65 20 2a 70 54 61 62 3b  /.  Table *pTab;
18b00 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 61             /* Ta
18b10 62 6c 65 20 66 6f 72 20 54 4b 5f 43 4f 4c 55 4d  ble for TK_COLUM
18b20 4e 20 65 78 70 72 65 73 73 69 6f 6e 73 2e 20 20  N expressions.  
18b30 43 61 6e 20 62 65 20 4e 55 4c 4c 0a 20 20 20 20  Can be NULL.    
18b40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18b50 20 20 20 20 20 2a 2a 20 66 6f 72 20 61 20 63 6f       ** for a co
18b60 6c 75 6d 6e 20 6f 66 20 61 6e 20 69 6e 64 65 78  lumn of an index
18b70 20 6f 6e 20 61 6e 20 65 78 70 72 65 73 73 69 6f   on an expressio
18b80 6e 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54  n */.};../*.** T
18b90 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 72 65  he following are
18ba0 20 74 68 65 20 6d 65 61 6e 69 6e 67 73 20 6f 66   the meanings of
18bb0 20 62 69 74 73 20 69 6e 20 74 68 65 20 45 78 70   bits in the Exp
18bc0 72 2e 66 6c 61 67 73 20 66 69 65 6c 64 2e 0a 2a  r.flags field..*
18bd0 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 46 72 6f  /.#define EP_Fro
18be0 6d 4a 6f 69 6e 20 20 30 78 30 30 30 30 30 31 20  mJoin  0x000001 
18bf0 2f 2a 20 4f 72 69 67 69 6e 61 74 65 73 20 69 6e  /* Originates in
18c00 20 4f 4e 2f 55 53 49 4e 47 20 63 6c 61 75 73 65   ON/USING clause
18c10 20 6f 66 20 6f 75 74 65 72 20 6a 6f 69 6e 20 2a   of outer join *
18c20 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 41 67 67  /.#define EP_Agg
18c30 20 20 20 20 20 20 20 30 78 30 30 30 30 30 32 20         0x000002 
18c40 2f 2a 20 43 6f 6e 74 61 69 6e 73 20 6f 6e 65 20  /* Contains one 
18c50 6f 72 20 6d 6f 72 65 20 61 67 67 72 65 67 61 74  or more aggregat
18c60 65 20 66 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a 23  e functions */.#
18c70 64 65 66 69 6e 65 20 45 50 5f 48 61 73 46 75 6e  define EP_HasFun
18c80 63 20 20 20 30 78 30 30 30 30 30 34 20 2f 2a 20  c   0x000004 /* 
18c90 43 6f 6e 74 61 69 6e 73 20 6f 6e 65 20 6f 72 20  Contains one or 
18ca0 6d 6f 72 65 20 66 75 6e 63 74 69 6f 6e 73 20 6f  more functions o
18cb0 66 20 61 6e 79 20 6b 69 6e 64 20 2a 2f 0a 20 20  f any kind */.  
18cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18cd0 2f 2a 20 30 78 30 30 30 30 30 38 20 2f 2f 20 61  /* 0x000008 // a
18ce0 76 61 69 6c 61 62 6c 65 20 66 6f 72 20 75 73 65  vailable for use
18cf0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 44   */.#define EP_D
18d00 69 73 74 69 6e 63 74 20 20 30 78 30 30 30 30 31  istinct  0x00001
18d10 30 20 2f 2a 20 41 67 67 72 65 67 61 74 65 20 66  0 /* Aggregate f
18d20 75 6e 63 74 69 6f 6e 20 77 69 74 68 20 44 49 53  unction with DIS
18d30 54 49 4e 43 54 20 6b 65 79 77 6f 72 64 20 2a 2f  TINCT keyword */
18d40 0a 23 64 65 66 69 6e 65 20 45 50 5f 56 61 72 53  .#define EP_VarS
18d50 65 6c 65 63 74 20 30 78 30 30 30 30 32 30 20 2f  elect 0x000020 /
18d60 2a 20 70 53 65 6c 65 63 74 20 69 73 20 63 6f 72  * pSelect is cor
18d70 72 65 6c 61 74 65 64 2c 20 6e 6f 74 20 63 6f 6e  related, not con
18d80 73 74 61 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65  stant */.#define
18d90 20 45 50 5f 44 62 6c 51 75 6f 74 65 64 20 30 78   EP_DblQuoted 0x
18da0 30 30 30 30 34 30 20 2f 2a 20 74 6f 6b 65 6e 2e  000040 /* token.
18db0 7a 20 77 61 73 20 6f 72 69 67 69 6e 61 6c 6c 79  z was originally
18dc0 20 69 6e 20 22 2e 2e 2e 22 20 2a 2f 0a 23 64 65   in "..." */.#de
18dd0 66 69 6e 65 20 45 50 5f 49 6e 66 69 78 46 75 6e  fine EP_InfixFun
18de0 63 20 30 78 30 30 30 30 38 30 20 2f 2a 20 54 72  c 0x000080 /* Tr
18df0 75 65 20 66 6f 72 20 61 6e 20 69 6e 66 69 78 20  ue for an infix 
18e00 66 75 6e 63 74 69 6f 6e 3a 20 4c 49 4b 45 2c 20  function: LIKE, 
18e10 47 4c 4f 42 2c 20 65 74 63 20 2a 2f 0a 23 64 65  GLOB, etc */.#de
18e20 66 69 6e 65 20 45 50 5f 43 6f 6c 6c 61 74 65 20  fine EP_Collate 
18e30 20 20 30 78 30 30 30 31 30 30 20 2f 2a 20 54 72    0x000100 /* Tr
18e40 65 65 20 63 6f 6e 74 61 69 6e 73 20 61 20 54 4b  ee contains a TK
18e50 5f 43 4f 4c 4c 41 54 45 20 6f 70 65 72 61 74 6f  _COLLATE operato
18e60 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  r */.#define EP_
18e70 47 65 6e 65 72 69 63 20 20 20 30 78 30 30 30 32  Generic   0x0002
18e80 30 30 20 2f 2a 20 49 67 6e 6f 72 65 20 43 4f 4c  00 /* Ignore COL
18e90 4c 41 54 45 20 6f 72 20 61 66 66 69 6e 69 74 79  LATE or affinity
18ea0 20 6f 6e 20 74 68 69 73 20 74 72 65 65 20 2a 2f   on this tree */
18eb0 0a 23 64 65 66 69 6e 65 20 45 50 5f 49 6e 74 56  .#define EP_IntV
18ec0 61 6c 75 65 20 20 30 78 30 30 30 34 30 30 20 2f  alue  0x000400 /
18ed0 2a 20 49 6e 74 65 67 65 72 20 76 61 6c 75 65 20  * Integer value 
18ee0 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20 75 2e 69  contained in u.i
18ef0 56 61 6c 75 65 20 2a 2f 0a 23 64 65 66 69 6e 65  Value */.#define
18f00 20 45 50 5f 78 49 73 53 65 6c 65 63 74 20 30 78   EP_xIsSelect 0x
18f10 30 30 30 38 30 30 20 2f 2a 20 78 2e 70 53 65 6c  000800 /* x.pSel
18f20 65 63 74 20 69 73 20 76 61 6c 69 64 20 28 6f 74  ect is valid (ot
18f30 68 65 72 77 69 73 65 20 78 2e 70 4c 69 73 74 20  herwise x.pList 
18f40 69 73 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45  is) */.#define E
18f50 50 5f 53 6b 69 70 20 20 20 20 20 20 30 78 30 30  P_Skip      0x00
18f60 31 30 30 30 20 2f 2a 20 43 4f 4c 4c 41 54 45 2c  1000 /* COLLATE,
18f70 20 41 53 2c 20 6f 72 20 55 4e 4c 49 4b 45 4c 59   AS, or UNLIKELY
18f80 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 52   */.#define EP_R
18f90 65 64 75 63 65 64 20 20 20 30 78 30 30 32 30 30  educed   0x00200
18fa0 30 20 2f 2a 20 45 78 70 72 20 73 74 72 75 63 74  0 /* Expr struct
18fb0 20 45 58 50 52 5f 52 45 44 55 43 45 44 53 49 5a   EXPR_REDUCEDSIZ
18fc0 45 20 62 79 74 65 73 20 6f 6e 6c 79 20 2a 2f 0a  E bytes only */.
18fd0 23 64 65 66 69 6e 65 20 45 50 5f 54 6f 6b 65 6e  #define EP_Token
18fe0 4f 6e 6c 79 20 30 78 30 30 34 30 30 30 20 2f 2a  Only 0x004000 /*
18ff0 20 45 78 70 72 20 73 74 72 75 63 74 20 45 58 50   Expr struct EXP
19000 52 5f 54 4f 4b 45 4e 4f 4e 4c 59 53 49 5a 45 20  R_TOKENONLYSIZE 
19010 62 79 74 65 73 20 6f 6e 6c 79 20 2a 2f 0a 23 64  bytes only */.#d
19020 65 66 69 6e 65 20 45 50 5f 53 74 61 74 69 63 20  efine EP_Static 
19030 20 20 20 30 78 30 30 38 30 30 30 20 2f 2a 20 48     0x008000 /* H
19040 65 6c 64 20 69 6e 20 6d 65 6d 6f 72 79 20 6e 6f  eld in memory no
19050 74 20 6f 62 74 61 69 6e 65 64 20 66 72 6f 6d 20  t obtained from 
19060 6d 61 6c 6c 6f 63 28 29 20 2a 2f 0a 23 64 65 66  malloc() */.#def
19070 69 6e 65 20 45 50 5f 4d 65 6d 54 6f 6b 65 6e 20  ine EP_MemToken 
19080 20 30 78 30 31 30 30 30 30 20 2f 2a 20 4e 65 65   0x010000 /* Nee
19090 64 20 74 6f 20 73 71 6c 69 74 65 33 44 62 46 72  d to sqlite3DbFr
190a0 65 65 28 29 20 45 78 70 72 2e 7a 54 6f 6b 65 6e  ee() Expr.zToken
190b0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 4e   */.#define EP_N
190c0 6f 52 65 64 75 63 65 20 20 30 78 30 32 30 30 30  oReduce  0x02000
190d0 30 20 2f 2a 20 43 61 6e 6e 6f 74 20 45 58 50 52  0 /* Cannot EXPR
190e0 44 55 50 5f 52 45 44 55 43 45 20 74 68 69 73 20  DUP_REDUCE this 
190f0 45 78 70 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20  Expr */.#define 
19100 45 50 5f 55 6e 6c 69 6b 65 6c 79 20 20 30 78 30  EP_Unlikely  0x0
19110 34 30 30 30 30 20 2f 2a 20 75 6e 6c 69 6b 65 6c  40000 /* unlikel
19120 79 28 29 20 6f 72 20 6c 69 6b 65 6c 69 68 6f 6f  y() or likelihoo
19130 64 28 29 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a  d() function */.
19140 23 64 65 66 69 6e 65 20 45 50 5f 43 6f 6e 73 74  #define EP_Const
19150 46 75 6e 63 20 30 78 30 38 30 30 30 30 20 2f 2a  Func 0x080000 /*
19160 20 41 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43   A SQLITE_FUNC_C
19170 4f 4e 53 54 41 4e 54 20 6f 72 20 5f 53 4c 4f 43  ONSTANT or _SLOC
19180 48 4e 47 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a  HNG function */.
19190 23 64 65 66 69 6e 65 20 45 50 5f 43 61 6e 42 65  #define EP_CanBe
191a0 4e 75 6c 6c 20 30 78 31 30 30 30 30 30 20 2f 2a  Null 0x100000 /*
191b0 20 43 61 6e 20 62 65 20 6e 75 6c 6c 20 64 65 73   Can be null des
191c0 70 69 74 65 20 4e 4f 54 20 4e 55 4c 4c 20 63 6f  pite NOT NULL co
191d0 6e 73 74 72 61 69 6e 74 20 2a 2f 0a 23 64 65 66  nstraint */.#def
191e0 69 6e 65 20 45 50 5f 53 75 62 71 75 65 72 79 20  ine EP_Subquery 
191f0 20 30 78 32 30 30 30 30 30 20 2f 2a 20 54 72 65   0x200000 /* Tre
19200 65 20 63 6f 6e 74 61 69 6e 73 20 61 20 54 4b 5f  e contains a TK_
19210 53 45 4c 45 43 54 20 6f 70 65 72 61 74 6f 72 20  SELECT operator 
19220 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 41 6c  */.#define EP_Al
19230 69 61 73 20 20 20 20 20 30 78 34 30 30 30 30 30  ias     0x400000
19240 20 2f 2a 20 49 73 20 61 6e 20 61 6c 69 61 73 20   /* Is an alias 
19250 66 6f 72 20 61 20 72 65 73 75 6c 74 20 73 65 74  for a result set
19260 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 23 64 65 66 69   column */.#defi
19270 6e 65 20 45 50 5f 4c 65 61 66 20 20 20 20 20 20  ne EP_Leaf      
19280 30 78 38 30 30 30 30 30 20 2f 2a 20 45 78 70 72  0x800000 /* Expr
19290 2e 70 4c 65 66 74 2c 20 2e 70 52 69 67 68 74 2c  .pLeft, .pRight,
192a0 20 2e 75 2e 70 53 65 6c 65 63 74 20 61 6c 6c 20   .u.pSelect all 
192b0 4e 55 4c 4c 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54  NULL */../*.** T
192c0 68 65 20 45 50 5f 50 72 6f 70 61 67 61 74 65 20  he EP_Propagate 
192d0 6d 61 73 6b 20 69 73 20 61 20 73 65 74 20 6f 66  mask is a set of
192e0 20 70 72 6f 70 65 72 74 69 65 73 20 74 68 61 74   properties that
192f0 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 70   automatically p
19300 72 6f 70 61 67 61 74 65 0a 2a 2a 20 75 70 77 61  ropagate.** upwa
19310 72 64 73 20 69 6e 74 6f 20 70 61 72 65 6e 74 20  rds into parent 
19320 6e 6f 64 65 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e  nodes..*/.#defin
19330 65 20 45 50 5f 50 72 6f 70 61 67 61 74 65 20 28  e EP_Propagate (
19340 45 50 5f 43 6f 6c 6c 61 74 65 7c 45 50 5f 53 75  EP_Collate|EP_Su
19350 62 71 75 65 72 79 7c 45 50 5f 48 61 73 46 75 6e  bquery|EP_HasFun
19360 63 29 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 73 65 20  c)../*.** These 
19370 6d 61 63 72 6f 73 20 63 61 6e 20 62 65 20 75 73  macros can be us
19380 65 64 20 74 6f 20 74 65 73 74 2c 20 73 65 74 2c  ed to test, set,
19390 20 6f 72 20 63 6c 65 61 72 20 62 69 74 73 20 69   or clear bits i
193a0 6e 20 74 68 65 0a 2a 2a 20 45 78 70 72 2e 66 6c  n the.** Expr.fl
193b0 61 67 73 20 66 69 65 6c 64 2e 0a 2a 2f 0a 23 64  ags field..*/.#d
193c0 65 66 69 6e 65 20 45 78 70 72 48 61 73 50 72 6f  efine ExprHasPro
193d0 70 65 72 74 79 28 45 2c 50 29 20 20 20 20 20 28  perty(E,P)     (
193e0 28 28 45 29 2d 3e 66 6c 61 67 73 26 28 50 29 29  ((E)->flags&(P))
193f0 21 3d 30 29 0a 23 64 65 66 69 6e 65 20 45 78 70  !=0).#define Exp
19400 72 48 61 73 41 6c 6c 50 72 6f 70 65 72 74 79 28  rHasAllProperty(
19410 45 2c 50 29 20 20 28 28 28 45 29 2d 3e 66 6c 61  E,P)  (((E)->fla
19420 67 73 26 28 50 29 29 3d 3d 28 50 29 29 0a 23 64  gs&(P))==(P)).#d
19430 65 66 69 6e 65 20 45 78 70 72 53 65 74 50 72 6f  efine ExprSetPro
19440 70 65 72 74 79 28 45 2c 50 29 20 20 20 20 20 28  perty(E,P)     (
19450 45 29 2d 3e 66 6c 61 67 73 7c 3d 28 50 29 0a 23  E)->flags|=(P).#
19460 64 65 66 69 6e 65 20 45 78 70 72 43 6c 65 61 72  define ExprClear
19470 50 72 6f 70 65 72 74 79 28 45 2c 50 29 20 20 20  Property(E,P)   
19480 28 45 29 2d 3e 66 6c 61 67 73 26 3d 7e 28 50 29  (E)->flags&=~(P)
19490 0a 0a 2f 2a 20 54 68 65 20 45 78 70 72 53 65 74  ../* The ExprSet
194a0 56 56 41 50 72 6f 70 65 72 74 79 28 29 20 6d 61  VVAProperty() ma
194b0 63 72 6f 20 69 73 20 75 73 65 64 20 66 6f 72 20  cro is used for 
194c0 56 65 72 69 66 69 63 61 74 69 6f 6e 2c 20 56 61  Verification, Va
194d0 6c 69 64 61 74 69 6f 6e 2c 0a 2a 2a 20 61 6e 64  lidation,.** and
194e0 20 41 63 63 72 65 64 69 74 61 74 69 6f 6e 20 6f   Accreditation o
194f0 6e 6c 79 2e 20 20 49 74 20 77 6f 72 6b 73 20 6c  nly.  It works l
19500 69 6b 65 20 45 78 70 72 53 65 74 50 72 6f 70 65  ike ExprSetPrope
19510 72 74 79 28 29 20 64 75 72 69 6e 67 20 56 56 41  rty() during VVA
19520 0a 2a 2a 20 70 72 6f 63 65 73 73 65 73 20 62 75  .** processes bu
19530 74 20 69 73 20 61 20 6e 6f 2d 6f 70 20 66 6f 72  t is a no-op for
19540 20 64 65 6c 69 76 65 72 79 2e 0a 2a 2f 0a 23 69   delivery..*/.#i
19550 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55  fdef SQLITE_DEBU
19560 47 0a 23 20 64 65 66 69 6e 65 20 45 78 70 72 53  G.# define ExprS
19570 65 74 56 56 41 50 72 6f 70 65 72 74 79 28 45 2c  etVVAProperty(E,
19580 50 29 20 20 28 45 29 2d 3e 66 6c 61 67 73 7c 3d  P)  (E)->flags|=
19590 28 50 29 0a 23 65 6c 73 65 0a 23 20 64 65 66 69  (P).#else.# defi
195a0 6e 65 20 45 78 70 72 53 65 74 56 56 41 50 72 6f  ne ExprSetVVAPro
195b0 70 65 72 74 79 28 45 2c 50 29 0a 23 65 6e 64 69  perty(E,P).#endi
195c0 66 0a 0a 2f 2a 0a 2a 2a 20 4d 61 63 72 6f 73 20  f../*.** Macros 
195d0 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 74 68 65  to determine the
195e0 20 6e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73   number of bytes
195f0 20 72 65 71 75 69 72 65 64 20 62 79 20 61 20 6e   required by a n
19600 6f 72 6d 61 6c 20 45 78 70 72 0a 2a 2a 20 73 74  ormal Expr.** st
19610 72 75 63 74 2c 20 61 6e 20 45 78 70 72 20 73 74  ruct, an Expr st
19620 72 75 63 74 20 77 69 74 68 20 74 68 65 20 45 50  ruct with the EP
19630 5f 52 65 64 75 63 65 64 20 66 6c 61 67 20 73 65  _Reduced flag se
19640 74 20 69 6e 20 45 78 70 72 2e 66 6c 61 67 73 0a  t in Expr.flags.
19650 2a 2a 20 61 6e 64 20 61 6e 20 45 78 70 72 20 73  ** and an Expr s
19660 74 72 75 63 74 20 77 69 74 68 20 74 68 65 20 45  truct with the E
19670 50 5f 54 6f 6b 65 6e 4f 6e 6c 79 20 66 6c 61 67  P_TokenOnly flag
19680 20 73 65 74 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65   set..*/.#define
19690 20 45 58 50 52 5f 46 55 4c 4c 53 49 5a 45 20 20   EXPR_FULLSIZE  
196a0 20 20 20 20 20 20 20 20 20 73 69 7a 65 6f 66 28           sizeof(
196b0 45 78 70 72 29 20 20 20 20 20 20 20 20 20 20 20  Expr)           
196c0 2f 2a 20 46 75 6c 6c 20 73 69 7a 65 20 2a 2f 0a  /* Full size */.
196d0 23 64 65 66 69 6e 65 20 45 58 50 52 5f 52 45 44  #define EXPR_RED
196e0 55 43 45 44 53 49 5a 45 20 20 20 20 20 20 20 20  UCEDSIZE        
196f0 6f 66 66 73 65 74 6f 66 28 45 78 70 72 2c 69 54  offsetof(Expr,iT
19700 61 62 6c 65 29 20 20 2f 2a 20 43 6f 6d 6d 6f 6e  able)  /* Common
19710 20 66 65 61 74 75 72 65 73 20 2a 2f 0a 23 64 65   features */.#de
19720 66 69 6e 65 20 45 58 50 52 5f 54 4f 4b 45 4e 4f  fine EXPR_TOKENO
19730 4e 4c 59 53 49 5a 45 20 20 20 20 20 20 6f 66 66  NLYSIZE      off
19740 73 65 74 6f 66 28 45 78 70 72 2c 70 4c 65 66 74  setof(Expr,pLeft
19750 29 20 20 20 2f 2a 20 46 65 77 65 72 20 66 65 61  )   /* Fewer fea
19760 74 75 72 65 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20  tures */../*.** 
19770 46 6c 61 67 73 20 70 61 73 73 65 64 20 74 6f 20  Flags passed to 
19780 74 68 65 20 73 71 6c 69 74 65 33 45 78 70 72 44  the sqlite3ExprD
19790 75 70 28 29 20 66 75 6e 63 74 69 6f 6e 2e 20 53  up() function. S
197a0 65 65 20 74 68 65 20 68 65 61 64 65 72 20 63 6f  ee the header co
197b0 6d 6d 65 6e 74 0a 2a 2a 20 61 62 6f 76 65 20 73  mment.** above s
197c0 71 6c 69 74 65 33 45 78 70 72 44 75 70 28 29 20  qlite3ExprDup() 
197d0 66 6f 72 20 64 65 74 61 69 6c 73 2e 0a 2a 2f 0a  for details..*/.
197e0 23 64 65 66 69 6e 65 20 45 58 50 52 44 55 50 5f  #define EXPRDUP_
197f0 52 45 44 55 43 45 20 20 20 20 20 20 20 20 20 30  REDUCE         0
19800 78 30 30 30 31 20 20 2f 2a 20 55 73 65 64 20 72  x0001  /* Used r
19810 65 64 75 63 65 64 2d 73 69 7a 65 20 45 78 70 72  educed-size Expr
19820 20 6e 6f 64 65 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a   nodes */../*.**
19830 20 41 20 6c 69 73 74 20 6f 66 20 65 78 70 72 65   A list of expre
19840 73 73 69 6f 6e 73 2e 20 20 45 61 63 68 20 65 78  ssions.  Each ex
19850 70 72 65 73 73 69 6f 6e 20 6d 61 79 20 6f 70 74  pression may opt
19860 69 6f 6e 61 6c 6c 79 20 68 61 76 65 20 61 0a 2a  ionally have a.*
19870 2a 20 6e 61 6d 65 2e 20 20 41 6e 20 65 78 70 72  * name.  An expr
19880 2f 6e 61 6d 65 20 63 6f 6d 62 69 6e 61 74 69 6f  /name combinatio
19890 6e 20 63 61 6e 20 62 65 20 75 73 65 64 20 69 6e  n can be used in
198a0 20 73 65 76 65 72 61 6c 20 77 61 79 73 2c 20 73   several ways, s
198b0 75 63 68 0a 2a 2a 20 61 73 20 74 68 65 20 6c 69  uch.** as the li
198c0 73 74 20 6f 66 20 22 65 78 70 72 20 41 53 20 49  st of "expr AS I
198d0 44 22 20 66 69 65 6c 64 73 20 66 6f 6c 6c 6f 77  D" fields follow
198e0 69 6e 67 20 61 20 22 53 45 4c 45 43 54 22 20 6f  ing a "SELECT" o
198f0 72 20 69 6e 20 74 68 65 0a 2a 2a 20 6c 69 73 74  r in the.** list
19900 20 6f 66 20 22 49 44 20 3d 20 65 78 70 72 22 20   of "ID = expr" 
19910 69 74 65 6d 73 20 69 6e 20 61 6e 20 55 50 44 41  items in an UPDA
19920 54 45 2e 20 20 41 20 6c 69 73 74 20 6f 66 20 65  TE.  A list of e
19930 78 70 72 65 73 73 69 6f 6e 73 20 63 61 6e 0a 2a  xpressions can.*
19940 2a 20 61 6c 73 6f 20 62 65 20 75 73 65 64 20 61  * also be used a
19950 73 20 74 68 65 20 61 72 67 75 6d 65 6e 74 20 74  s the argument t
19960 6f 20 61 20 66 75 6e 63 74 69 6f 6e 2c 20 69 6e  o a function, in
19970 20 77 68 69 63 68 20 63 61 73 65 20 74 68 65 20   which case the 
19980 61 2e 7a 4e 61 6d 65 0a 2a 2a 20 66 69 65 6c 64  a.zName.** field
19990 20 69 73 20 6e 6f 74 20 75 73 65 64 2e 0a 2a 2a   is not used..**
199a0 0a 2a 2a 20 42 79 20 64 65 66 61 75 6c 74 20 74  .** By default t
199b0 68 65 20 45 78 70 72 2e 7a 53 70 61 6e 20 66 69  he Expr.zSpan fi
199c0 65 6c 64 20 68 6f 6c 64 73 20 61 20 68 75 6d 61  eld holds a huma
199d0 6e 2d 72 65 61 64 61 62 6c 65 20 64 65 73 63 72  n-readable descr
199e0 69 70 74 69 6f 6e 20 6f 66 0a 2a 2a 20 74 68 65  iption of.** the
199f0 20 65 78 70 72 65 73 73 69 6f 6e 20 74 68 61 74   expression that
19a00 20 69 73 20 75 73 65 64 20 69 6e 20 74 68 65 20   is used in the 
19a10 67 65 6e 65 72 61 74 69 6f 6e 20 6f 66 20 65 72  generation of er
19a20 72 6f 72 20 6d 65 73 73 61 67 65 73 20 61 6e 64  ror messages and
19a30 0a 2a 2a 20 63 6f 6c 75 6d 6e 20 6c 61 62 65 6c  .** column label
19a40 73 2e 20 20 49 6e 20 74 68 69 73 20 63 61 73 65  s.  In this case
19a50 2c 20 45 78 70 72 2e 7a 53 70 61 6e 20 69 73 20  , Expr.zSpan is 
19a60 74 79 70 69 63 61 6c 6c 79 20 74 68 65 20 74 65  typically the te
19a70 78 74 20 6f 66 20 61 0a 2a 2a 20 63 6f 6c 75 6d  xt of a.** colum
19a80 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 61 73 20  n expression as 
19a90 69 74 20 65 78 69 73 74 73 20 69 6e 20 61 20 53  it exists in a S
19aa0 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e  ELECT statement.
19ab0 20 20 48 6f 77 65 76 65 72 2c 20 69 66 0a 2a 2a    However, if.**
19ac0 20 74 68 65 20 62 53 70 61 6e 49 73 54 61 62 20   the bSpanIsTab 
19ad0 66 6c 61 67 20 69 73 20 73 65 74 2c 20 74 68 65  flag is set, the
19ae0 6e 20 7a 53 70 61 6e 20 69 73 20 6f 76 65 72 6c  n zSpan is overl
19af0 6f 61 64 65 64 20 74 6f 20 6d 65 61 6e 20 74 68  oaded to mean th
19b00 65 20 6e 61 6d 65 0a 2a 2a 20 6f 66 20 74 68 65  e name.** of the
19b10 20 72 65 73 75 6c 74 20 63 6f 6c 75 6d 6e 20 69   result column i
19b20 6e 20 74 68 65 20 66 6f 72 6d 3a 20 44 41 54 41  n the form: DATA
19b30 42 41 53 45 2e 54 41 42 4c 45 2e 43 4f 4c 55 4d  BASE.TABLE.COLUM
19b40 4e 2e 20 20 54 68 69 73 20 6c 61 74 65 72 0a 2a  N.  This later.*
19b50 2a 20 66 6f 72 6d 20 69 73 20 75 73 65 64 20 66  * form is used f
19b60 6f 72 20 6e 61 6d 65 20 72 65 73 6f 6c 75 74 69  or name resoluti
19b70 6f 6e 20 77 69 74 68 20 6e 65 73 74 65 64 20 46  on with nested F
19b80 52 4f 4d 20 63 6c 61 75 73 65 73 2e 0a 2a 2f 0a  ROM clauses..*/.
19b90 73 74 72 75 63 74 20 45 78 70 72 4c 69 73 74 20  struct ExprList 
19ba0 7b 0a 20 20 69 6e 74 20 6e 45 78 70 72 3b 20 20  {.  int nExpr;  
19bb0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
19bc0 6d 62 65 72 20 6f 66 20 65 78 70 72 65 73 73 69  mber of expressi
19bd0 6f 6e 73 20 6f 6e 20 74 68 65 20 6c 69 73 74 20  ons on the list 
19be0 2a 2f 0a 20 20 73 74 72 75 63 74 20 45 78 70 72  */.  struct Expr
19bf0 4c 69 73 74 5f 69 74 65 6d 20 7b 20 2f 2a 20 46  List_item { /* F
19c00 6f 72 20 65 61 63 68 20 65 78 70 72 65 73 73 69  or each expressi
19c10 6f 6e 20 69 6e 20 74 68 65 20 6c 69 73 74 20 2a  on in the list *
19c20 2f 0a 20 20 20 20 45 78 70 72 20 2a 70 45 78 70  /.    Expr *pExp
19c30 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  r;            /*
19c40 20 54 68 65 20 70 61 72 73 65 20 74 72 65 65 20   The parse tree 
19c50 66 6f 72 20 74 68 69 73 20 65 78 70 72 65 73 73  for this express
19c60 69 6f 6e 20 2a 2f 0a 20 20 20 20 63 68 61 72 20  ion */.    char 
19c70 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20  *zName;         
19c80 20 20 20 2f 2a 20 54 6f 6b 65 6e 20 61 73 73 6f     /* Token asso
19c90 63 69 61 74 65 64 20 77 69 74 68 20 74 68 69 73  ciated with this
19ca0 20 65 78 70 72 65 73 73 69 6f 6e 20 2a 2f 0a 20   expression */. 
19cb0 20 20 20 63 68 61 72 20 2a 7a 53 70 61 6e 3b 20     char *zSpan; 
19cc0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 72             /* Or
19cd0 69 67 69 6e 61 6c 20 74 65 78 74 20 6f 66 20 74  iginal text of t
19ce0 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 2a 2f  he expression */
19cf0 0a 20 20 20 20 75 38 20 73 6f 72 74 4f 72 64 65  .    u8 sortOrde
19d00 72 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  r;           /* 
19d10 31 20 66 6f 72 20 44 45 53 43 20 6f 72 20 30 20  1 for DESC or 0 
19d20 66 6f 72 20 41 53 43 20 2a 2f 0a 20 20 20 20 75  for ASC */.    u
19d30 6e 73 69 67 6e 65 64 20 64 6f 6e 65 20 3a 31 3b  nsigned done :1;
19d40 20 20 20 20 20 20 20 2f 2a 20 41 20 66 6c 61 67         /* A flag
19d50 20 74 6f 20 69 6e 64 69 63 61 74 65 20 77 68 65   to indicate whe
19d60 6e 20 70 72 6f 63 65 73 73 69 6e 67 20 69 73 20  n processing is 
19d70 66 69 6e 69 73 68 65 64 20 2a 2f 0a 20 20 20 20  finished */.    
19d80 75 6e 73 69 67 6e 65 64 20 62 53 70 61 6e 49 73  unsigned bSpanIs
19d90 54 61 62 20 3a 31 3b 20 2f 2a 20 7a 53 70 61 6e  Tab :1; /* zSpan
19da0 20 68 6f 6c 64 73 20 44 42 2e 54 41 42 4c 45 2e   holds DB.TABLE.
19db0 43 4f 4c 55 4d 4e 20 2a 2f 0a 20 20 20 20 75 6e  COLUMN */.    un
19dc0 73 69 67 6e 65 64 20 72 65 75 73 61 62 6c 65 20  signed reusable 
19dd0 3a 31 3b 20 20 20 2f 2a 20 43 6f 6e 73 74 61 6e  :1;   /* Constan
19de0 74 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20  t expression is 
19df0 72 65 75 73 61 62 6c 65 20 2a 2f 0a 20 20 20 20  reusable */.    
19e00 75 6e 73 69 67 6e 65 64 20 62 53 6f 72 74 65 72  unsigned bSorter
19e10 52 65 66 20 3a 31 3b 20 2f 2a 20 44 65 66 65 72  Ref :1; /* Defer
19e20 20 65 76 61 6c 75 61 74 69 6f 6e 20 75 6e 74 69   evaluation unti
19e30 6c 20 61 66 74 65 72 20 73 6f 72 74 69 6e 67 20  l after sorting 
19e40 2a 2f 0a 20 20 20 20 75 6e 69 6f 6e 20 7b 0a 20  */.    union {. 
19e50 20 20 20 20 20 73 74 72 75 63 74 20 7b 0a 20 20       struct {.  
19e60 20 20 20 20 20 20 75 31 36 20 69 4f 72 64 65 72        u16 iOrder
19e70 42 79 43 6f 6c 3b 20 20 20 20 20 20 2f 2a 20 46  ByCol;      /* F
19e80 6f 72 20 4f 52 44 45 52 20 42 59 2c 20 63 6f 6c  or ORDER BY, col
19e90 75 6d 6e 20 6e 75 6d 62 65 72 20 69 6e 20 72 65  umn number in re
19ea0 73 75 6c 74 20 73 65 74 20 2a 2f 0a 20 20 20 20  sult set */.    
19eb0 20 20 20 20 75 31 36 20 69 41 6c 69 61 73 3b 20      u16 iAlias; 
19ec0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 64            /* Ind
19ed0 65 78 20 69 6e 74 6f 20 50 61 72 73 65 2e 61 41  ex into Parse.aA
19ee0 6c 69 61 73 5b 5d 20 66 6f 72 20 7a 4e 61 6d 65  lias[] for zName
19ef0 20 2a 2f 0a 20 20 20 20 20 20 7d 20 78 3b 0a 20   */.      } x;. 
19f00 20 20 20 20 20 69 6e 74 20 69 43 6f 6e 73 74 45       int iConstE
19f10 78 70 72 52 65 67 3b 20 20 20 20 20 20 2f 2a 20  xprReg;      /* 
19f20 52 65 67 69 73 74 65 72 20 69 6e 20 77 68 69 63  Register in whic
19f30 68 20 45 78 70 72 20 76 61 6c 75 65 20 69 73 20  h Expr value is 
19f40 63 61 63 68 65 64 20 2a 2f 0a 20 20 20 20 7d 20  cached */.    } 
19f50 75 3b 0a 20 20 7d 20 61 5b 31 5d 3b 20 20 20 20  u;.  } a[1];    
19f60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
19f70 20 4f 6e 65 20 73 6c 6f 74 20 66 6f 72 20 65 61   One slot for ea
19f80 63 68 20 65 78 70 72 65 73 73 69 6f 6e 20 69 6e  ch expression in
19f90 20 74 68 65 20 6c 69 73 74 20 2a 2f 0a 7d 3b 0a   the list */.};.
19fa0 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e  ./*.** An instan
19fb0 63 65 20 6f 66 20 74 68 69 73 20 73 74 72 75 63  ce of this struc
19fc0 74 75 72 65 20 63 61 6e 20 68 6f 6c 64 20 61 20  ture can hold a 
19fd0 73 69 6d 70 6c 65 20 6c 69 73 74 20 6f 66 20 69  simple list of i
19fe0 64 65 6e 74 69 66 69 65 72 73 2c 0a 2a 2a 20 73  dentifiers,.** s
19ff0 75 63 68 20 61 73 20 74 68 65 20 6c 69 73 74 20  uch as the list 
1a000 22 61 2c 62 2c 63 22 20 69 6e 20 74 68 65 20 66  "a,b,c" in the f
1a010 6f 6c 6c 6f 77 69 6e 67 20 73 74 61 74 65 6d 65  ollowing stateme
1a020 6e 74 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 20  nts:.**.**      
1a030 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 28 61 2c  INSERT INTO t(a,
1a040 62 2c 63 29 20 56 41 4c 55 45 53 20 2e 2e 2e 3b  b,c) VALUES ...;
1a050 0a 2a 2a 20 20 20 20 20 20 43 52 45 41 54 45 20  .**      CREATE 
1a060 49 4e 44 45 58 20 69 64 78 20 4f 4e 20 74 28 61  INDEX idx ON t(a
1a070 2c 62 2c 63 29 3b 0a 2a 2a 20 20 20 20 20 20 43  ,b,c);.**      C
1a080 52 45 41 54 45 20 54 52 49 47 47 45 52 20 74 72  REATE TRIGGER tr
1a090 69 67 20 42 45 46 4f 52 45 20 55 50 44 41 54 45  ig BEFORE UPDATE
1a0a0 20 4f 4e 20 74 28 61 2c 62 2c 63 29 20 2e 2e 2e   ON t(a,b,c) ...
1a0b0 3b 0a 2a 2a 0a 2a 2a 20 54 68 65 20 49 64 4c 69  ;.**.** The IdLi
1a0c0 73 74 2e 61 2e 69 64 78 20 66 69 65 6c 64 20 69  st.a.idx field i
1a0d0 73 20 75 73 65 64 20 77 68 65 6e 20 74 68 65 20  s used when the 
1a0e0 49 64 4c 69 73 74 20 72 65 70 72 65 73 65 6e 74  IdList represent
1a0f0 73 20 74 68 65 20 6c 69 73 74 20 6f 66 0a 2a 2a  s the list of.**
1a100 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 61 66   column names af
1a110 74 65 72 20 61 20 74 61 62 6c 65 20 6e 61 6d 65  ter a table name
1a120 20 69 6e 20 61 6e 20 49 4e 53 45 52 54 20 73 74   in an INSERT st
1a130 61 74 65 6d 65 6e 74 2e 20 20 49 6e 20 74 68 65  atement.  In the
1a140 20 73 74 61 74 65 6d 65 6e 74 0a 2a 2a 0a 2a 2a   statement.**.**
1a150 20 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f       INSERT INTO
1a160 20 74 28 61 2c 62 2c 63 29 20 2e 2e 2e 0a 2a 2a   t(a,b,c) ....**
1a170 0a 2a 2a 20 49 66 20 22 61 22 20 69 73 20 74 68  .** If "a" is th
1a180 65 20 6b 2d 74 68 20 63 6f 6c 75 6d 6e 20 6f 66  e k-th column of
1a190 20 74 61 62 6c 65 20 22 74 22 2c 20 74 68 65 6e   table "t", then
1a1a0 20 49 64 4c 69 73 74 2e 61 5b 30 5d 2e 69 64 78   IdList.a[0].idx
1a1b0 3d 3d 6b 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 49  ==k..*/.struct I
1a1c0 64 4c 69 73 74 20 7b 0a 20 20 73 74 72 75 63 74  dList {.  struct
1a1d0 20 49 64 4c 69 73 74 5f 69 74 65 6d 20 7b 0a 20   IdList_item {. 
1a1e0 20 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20     char *zName; 
1a1f0 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20       /* Name of 
1a200 74 68 65 20 69 64 65 6e 74 69 66 69 65 72 20 2a  the identifier *
1a210 2f 0a 20 20 20 20 69 6e 74 20 69 64 78 3b 20 20  /.    int idx;  
1a220 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 64 65 78          /* Index
1a230 20 69 6e 20 73 6f 6d 65 20 54 61 62 6c 65 2e 61   in some Table.a
1a240 43 6f 6c 5b 5d 20 6f 66 20 61 20 63 6f 6c 75 6d  Col[] of a colum
1a250 6e 20 6e 61 6d 65 64 20 7a 4e 61 6d 65 20 2a 2f  n named zName */
1a260 0a 20 20 7d 20 2a 61 3b 0a 20 20 69 6e 74 20 6e  .  } *a;.  int n
1a270 49 64 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e  Id;         /* N
1a280 75 6d 62 65 72 20 6f 66 20 69 64 65 6e 74 69 66  umber of identif
1a290 69 65 72 73 20 6f 6e 20 74 68 65 20 6c 69 73 74  iers on the list
1a2a0 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68   */.};../*.** Th
1a2b0 65 20 62 69 74 6d 61 73 6b 20 64 61 74 61 74 79  e bitmask dataty
1a2c0 70 65 20 64 65 66 69 6e 65 64 20 62 65 6c 6f 77  pe defined below
1a2d0 20 69 73 20 75 73 65 64 20 66 6f 72 20 76 61 72   is used for var
1a2e0 69 6f 75 73 20 6f 70 74 69 6d 69 7a 61 74 69 6f  ious optimizatio
1a2f0 6e 73 2e 0a 2a 2a 0a 2a 2a 20 43 68 61 6e 67 69  ns..**.** Changi
1a300 6e 67 20 74 68 69 73 20 66 72 6f 6d 20 61 20 36  ng this from a 6
1a310 34 2d 62 69 74 20 74 6f 20 61 20 33 32 2d 62 69  4-bit to a 32-bi
1a320 74 20 74 79 70 65 20 6c 69 6d 69 74 73 20 74 68  t type limits th
1a330 65 20 6e 75 6d 62 65 72 20 6f 66 0a 2a 2a 20 74  e number of.** t
1a340 61 62 6c 65 73 20 69 6e 20 61 20 6a 6f 69 6e 20  ables in a join 
1a350 74 6f 20 33 32 20 69 6e 73 74 65 61 64 20 6f 66  to 32 instead of
1a360 20 36 34 2e 20 20 42 75 74 20 69 74 20 61 6c 73   64.  But it als
1a370 6f 20 72 65 64 75 63 65 73 20 74 68 65 20 73 69  o reduces the si
1a380 7a 65 0a 2a 2a 20 6f 66 20 74 68 65 20 6c 69 62  ze.** of the lib
1a390 72 61 72 79 20 62 79 20 37 33 38 20 62 79 74 65  rary by 738 byte
1a3a0 73 20 6f 6e 20 69 78 38 36 2e 0a 2a 2f 0a 23 69  s on ix86..*/.#i
1a3b0 66 64 65 66 20 53 51 4c 49 54 45 5f 42 49 54 4d  fdef SQLITE_BITM
1a3c0 41 53 4b 5f 54 59 50 45 0a 20 20 74 79 70 65 64  ASK_TYPE.  typed
1a3d0 65 66 20 53 51 4c 49 54 45 5f 42 49 54 4d 41 53  ef SQLITE_BITMAS
1a3e0 4b 5f 54 59 50 45 20 42 69 74 6d 61 73 6b 3b 0a  K_TYPE Bitmask;.
1a3f0 23 65 6c 73 65 0a 20 20 74 79 70 65 64 65 66 20  #else.  typedef 
1a400 75 36 34 20 42 69 74 6d 61 73 6b 3b 0a 23 65 6e  u64 Bitmask;.#en
1a410 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6e  dif../*.** The n
1a420 75 6d 62 65 72 20 6f 66 20 62 69 74 73 20 69 6e  umber of bits in
1a430 20 61 20 42 69 74 6d 61 73 6b 2e 20 20 22 42 4d   a Bitmask.  "BM
1a440 53 22 20 6d 65 61 6e 73 20 22 42 69 74 4d 61 73  S" means "BitMas
1a450 6b 20 53 69 7a 65 22 2e 0a 2a 2f 0a 23 64 65 66  k Size"..*/.#def
1a460 69 6e 65 20 42 4d 53 20 20 28 28 69 6e 74 29 28  ine BMS  ((int)(
1a470 73 69 7a 65 6f 66 28 42 69 74 6d 61 73 6b 29 2a  sizeof(Bitmask)*
1a480 38 29 29 0a 0a 2f 2a 0a 2a 2a 20 41 20 62 69 74  8))../*.** A bit
1a490 20 69 6e 20 61 20 42 69 74 6d 61 73 6b 0a 2a 2f   in a Bitmask.*/
1a4a0 0a 23 64 65 66 69 6e 65 20 4d 41 53 4b 42 49 54  .#define MASKBIT
1a4b0 28 6e 29 20 20 20 28 28 28 42 69 74 6d 61 73 6b  (n)   (((Bitmask
1a4c0 29 31 29 3c 3c 28 6e 29 29 0a 23 64 65 66 69 6e  )1)<<(n)).#defin
1a4d0 65 20 4d 41 53 4b 42 49 54 33 32 28 6e 29 20 28  e MASKBIT32(n) (
1a4e0 28 28 75 6e 73 69 67 6e 65 64 20 69 6e 74 29 31  ((unsigned int)1
1a4f0 29 3c 3c 28 6e 29 29 0a 23 64 65 66 69 6e 65 20  )<<(n)).#define 
1a500 41 4c 4c 42 49 54 53 20 20 20 20 20 20 28 28 42  ALLBITS      ((B
1a510 69 74 6d 61 73 6b 29 2d 31 29 0a 0a 2f 2a 0a 2a  itmask)-1)../*.*
1a520 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  * The following 
1a530 73 74 72 75 63 74 75 72 65 20 64 65 73 63 72 69  structure descri
1a540 62 65 73 20 74 68 65 20 46 52 4f 4d 20 63 6c 61  bes the FROM cla
1a550 75 73 65 20 6f 66 20 61 20 53 45 4c 45 43 54 20  use of a SELECT 
1a560 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2a 20 45 61  statement..** Ea
1a570 63 68 20 74 61 62 6c 65 20 6f 72 20 73 75 62 71  ch table or subq
1a580 75 65 72 79 20 69 6e 20 74 68 65 20 46 52 4f 4d  uery in the FROM
1a590 20 63 6c 61 75 73 65 20 69 73 20 61 20 73 65 70   clause is a sep
1a5a0 61 72 61 74 65 20 65 6c 65 6d 65 6e 74 20 6f 66  arate element of
1a5b0 0a 2a 2a 20 74 68 65 20 53 72 63 4c 69 73 74 2e  .** the SrcList.
1a5c0 61 5b 5d 20 61 72 72 61 79 2e 0a 2a 2a 0a 2a 2a  a[] array..**.**
1a5d0 20 57 69 74 68 20 74 68 65 20 61 64 64 69 74 69   With the additi
1a5e0 6f 6e 20 6f 66 20 6d 75 6c 74 69 70 6c 65 20 64  on of multiple d
1a5f0 61 74 61 62 61 73 65 20 73 75 70 70 6f 72 74 2c  atabase support,
1a600 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   the following s
1a610 74 72 75 63 74 75 72 65 0a 2a 2a 20 63 61 6e 20  tructure.** can 
1a620 61 6c 73 6f 20 62 65 20 75 73 65 64 20 74 6f 20  also be used to 
1a630 64 65 73 63 72 69 62 65 20 61 20 70 61 72 74 69  describe a parti
1a640 63 75 6c 61 72 20 74 61 62 6c 65 20 73 75 63 68  cular table such
1a650 20 61 73 20 74 68 65 20 74 61 62 6c 65 20 74 68   as the table th
1a660 61 74 0a 2a 2a 20 69 73 20 6d 6f 64 69 66 69 65  at.** is modifie
1a670 64 20 62 79 20 61 6e 20 49 4e 53 45 52 54 2c 20  d by an INSERT, 
1a680 44 45 4c 45 54 45 2c 20 6f 72 20 55 50 44 41 54  DELETE, or UPDAT
1a690 45 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 49 6e  E statement.  In
1a6a0 20 73 74 61 6e 64 61 72 64 20 53 51 4c 2c 0a 2a   standard SQL,.*
1a6b0 2a 20 73 75 63 68 20 61 20 74 61 62 6c 65 20 6d  * such a table m
1a6c0 75 73 74 20 62 65 20 61 20 73 69 6d 70 6c 65 20  ust be a simple 
1a6d0 6e 61 6d 65 3a 20 49 44 2e 20 20 42 75 74 20 69  name: ID.  But i
1a6e0 6e 20 53 51 4c 69 74 65 2c 20 74 68 65 20 74 61  n SQLite, the ta
1a6f0 62 6c 65 20 63 61 6e 0a 2a 2a 20 6e 6f 77 20 62  ble can.** now b
1a700 65 20 69 64 65 6e 74 69 66 69 65 64 20 62 79 20  e identified by 
1a710 61 20 64 61 74 61 62 61 73 65 20 6e 61 6d 65 2c  a database name,
1a720 20 61 20 64 6f 74 2c 20 74 68 65 6e 20 74 68 65   a dot, then the
1a730 20 74 61 62 6c 65 20 6e 61 6d 65 3a 20 49 44 2e   table name: ID.
1a740 49 44 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6a 6f  ID..**.** The jo
1a750 69 6e 74 79 70 65 20 73 74 61 72 74 73 20 6f 75  intype starts ou
1a760 74 20 73 68 6f 77 69 6e 67 20 74 68 65 20 6a 6f  t showing the jo
1a770 69 6e 20 74 79 70 65 20 62 65 74 77 65 65 6e 20  in type between 
1a780 74 68 65 20 63 75 72 72 65 6e 74 20 74 61 62 6c  the current tabl
1a790 65 0a 2a 2a 20 61 6e 64 20 74 68 65 20 6e 65 78  e.** and the nex
1a7a0 74 20 74 61 62 6c 65 20 6f 6e 20 74 68 65 20 6c  t table on the l
1a7b0 69 73 74 2e 20 20 54 68 65 20 70 61 72 73 65 72  ist.  The parser
1a7c0 20 62 75 69 6c 64 73 20 74 68 65 20 6c 69 73 74   builds the list
1a7d0 20 74 68 69 73 20 77 61 79 2e 0a 2a 2a 20 42 75   this way..** Bu
1a7e0 74 20 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74  t sqlite3SrcList
1a7f0 53 68 69 66 74 4a 6f 69 6e 54 79 70 65 28 29 20  ShiftJoinType() 
1a800 6c 61 74 65 72 20 73 68 69 66 74 73 20 74 68 65  later shifts the
1a810 20 6a 6f 69 6e 74 79 70 65 73 20 73 6f 20 74 68   jointypes so th
1a820 61 74 20 65 61 63 68 0a 2a 2a 20 6a 6f 69 6e 74  at each.** joint
1a830 79 70 65 20 65 78 70 72 65 73 73 65 73 20 74 68  ype expresses th
1a840 65 20 6a 6f 69 6e 20 62 65 74 77 65 65 6e 20 74  e join between t
1a850 68 65 20 74 61 62 6c 65 20 61 6e 64 20 74 68 65  he table and the
1a860 20 70 72 65 76 69 6f 75 73 20 74 61 62 6c 65 2e   previous table.
1a870 0a 2a 2a 0a 2a 2a 20 49 6e 20 74 68 65 20 63 6f  .**.** In the co
1a880 6c 55 73 65 64 20 66 69 65 6c 64 2c 20 74 68 65  lUsed field, the
1a890 20 68 69 67 68 2d 6f 72 64 65 72 20 62 69 74 20   high-order bit 
1a8a0 28 62 69 74 20 36 33 29 20 69 73 20 73 65 74 20  (bit 63) is set 
1a8b0 69 66 20 74 68 65 20 74 61 62 6c 65 0a 2a 2a 20  if the table.** 
1a8c0 63 6f 6e 74 61 69 6e 73 20 6d 6f 72 65 20 74 68  contains more th
1a8d0 61 6e 20 36 33 20 63 6f 6c 75 6d 6e 73 20 61 6e  an 63 columns an
1a8e0 64 20 74 68 65 20 36 34 2d 74 68 20 6f 72 20 6c  d the 64-th or l
1a8f0 61 74 65 72 20 63 6f 6c 75 6d 6e 20 69 73 20 75  ater column is u
1a900 73 65 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53  sed..*/.struct S
1a910 72 63 4c 69 73 74 20 7b 0a 20 20 69 6e 74 20 6e  rcList {.  int n
1a920 53 72 63 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e  Src;        /* N
1a930 75 6d 62 65 72 20 6f 66 20 74 61 62 6c 65 73 20  umber of tables 
1a940 6f 72 20 73 75 62 71 75 65 72 69 65 73 20 69 6e  or subqueries in
1a950 20 74 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65   the FROM clause
1a960 20 2a 2f 0a 20 20 75 33 32 20 6e 41 6c 6c 6f 63   */.  u32 nAlloc
1a970 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72  ;      /* Number
1a980 20 6f 66 20 65 6e 74 72 69 65 73 20 61 6c 6c 6f   of entries allo
1a990 63 61 74 65 64 20 69 6e 20 61 5b 5d 20 62 65 6c  cated in a[] bel
1a9a0 6f 77 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 53  ow */.  struct S
1a9b0 72 63 4c 69 73 74 5f 69 74 65 6d 20 7b 0a 20 20  rcList_item {.  
1a9c0 20 20 53 63 68 65 6d 61 20 2a 70 53 63 68 65 6d    Schema *pSchem
1a9d0 61 3b 20 20 2f 2a 20 53 63 68 65 6d 61 20 74 6f  a;  /* Schema to
1a9e0 20 77 68 69 63 68 20 74 68 69 73 20 69 74 65 6d   which this item
1a9f0 20 69 73 20 66 69 78 65 64 20 2a 2f 0a 20 20 20   is fixed */.   
1aa00 20 63 68 61 72 20 2a 7a 44 61 74 61 62 61 73 65   char *zDatabase
1aa10 3b 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 64 61  ;  /* Name of da
1aa20 74 61 62 61 73 65 20 68 6f 6c 64 69 6e 67 20 74  tabase holding t
1aa30 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20  his table */.   
1aa40 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20   char *zName;   
1aa50 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68     /* Name of th
1aa60 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20 63  e table */.    c
1aa70 68 61 72 20 2a 7a 41 6c 69 61 73 3b 20 20 20 20  har *zAlias;    
1aa80 20 2f 2a 20 54 68 65 20 22 42 22 20 70 61 72 74   /* The "B" part
1aa90 20 6f 66 20 61 20 22 41 20 41 53 20 42 22 20 70   of a "A AS B" p
1aaa0 68 72 61 73 65 2e 20 20 7a 4e 61 6d 65 20 69 73  hrase.  zName is
1aab0 20 74 68 65 20 22 41 22 20 2a 2f 0a 20 20 20 20   the "A" */.    
1aac0 54 61 62 6c 65 20 2a 70 54 61 62 3b 20 20 20 20  Table *pTab;    
1aad0 20 20 2f 2a 20 41 6e 20 53 51 4c 20 74 61 62 6c    /* An SQL tabl
1aae0 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20  e corresponding 
1aaf0 74 6f 20 7a 4e 61 6d 65 20 2a 2f 0a 20 20 20 20  to zName */.    
1ab00 53 65 6c 65 63 74 20 2a 70 53 65 6c 65 63 74 3b  Select *pSelect;
1ab10 20 20 2f 2a 20 41 20 53 45 4c 45 43 54 20 73 74    /* A SELECT st
1ab20 61 74 65 6d 65 6e 74 20 75 73 65 64 20 69 6e 20  atement used in 
1ab30 70 6c 61 63 65 20 6f 66 20 61 20 74 61 62 6c 65  place of a table
1ab40 20 6e 61 6d 65 20 2a 2f 0a 20 20 20 20 69 6e 74   name */.    int
1ab50 20 61 64 64 72 46 69 6c 6c 53 75 62 3b 20 20 2f   addrFillSub;  /
1ab60 2a 20 41 64 64 72 65 73 73 20 6f 66 20 73 75 62  * Address of sub
1ab70 72 6f 75 74 69 6e 65 20 74 6f 20 6d 61 6e 69 66  routine to manif
1ab80 65 73 74 20 61 20 73 75 62 71 75 65 72 79 20 2a  est a subquery *
1ab90 2f 0a 20 20 20 20 69 6e 74 20 72 65 67 52 65 74  /.    int regRet
1aba0 75 72 6e 3b 20 20 20 20 2f 2a 20 52 65 67 69 73  urn;    /* Regis
1abb0 74 65 72 20 68 6f 6c 64 69 6e 67 20 72 65 74 75  ter holding retu
1abc0 72 6e 20 61 64 64 72 65 73 73 20 6f 66 20 61 64  rn address of ad
1abd0 64 72 46 69 6c 6c 53 75 62 20 2a 2f 0a 20 20 20  drFillSub */.   
1abe0 20 69 6e 74 20 72 65 67 52 65 73 75 6c 74 3b 20   int regResult; 
1abf0 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72 73 20     /* Registers 
1ac00 68 6f 6c 64 69 6e 67 20 72 65 73 75 6c 74 73 20  holding results 
1ac10 6f 66 20 61 20 63 6f 2d 72 6f 75 74 69 6e 65 20  of a co-routine 
1ac20 2a 2f 0a 20 20 20 20 73 74 72 75 63 74 20 7b 0a  */.    struct {.
1ac30 20 20 20 20 20 20 75 38 20 6a 6f 69 6e 74 79 70        u8 jointyp
1ac40 65 3b 20 20 20 20 20 20 2f 2a 20 54 79 70 65 20  e;      /* Type 
1ac50 6f 66 20 6a 6f 69 6e 20 62 65 74 77 65 65 6e 20  of join between 
1ac60 74 68 69 73 20 74 61 62 6c 65 20 61 6e 64 20 74  this table and t
1ac70 68 65 20 70 72 65 76 69 6f 75 73 20 2a 2f 0a 20  he previous */. 
1ac80 20 20 20 20 20 75 6e 73 69 67 6e 65 64 20 6e 6f       unsigned no
1ac90 74 49 6e 64 65 78 65 64 20 3a 31 3b 20 20 20 20  tIndexed :1;    
1aca0 2f 2a 20 54 72 75 65 20 69 66 20 74 68 65 72 65  /* True if there
1acb0 20 69 73 20 61 20 4e 4f 54 20 49 4e 44 45 58 45   is a NOT INDEXE
1acc0 44 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 20 20  D clause */.    
1acd0 20 20 75 6e 73 69 67 6e 65 64 20 69 73 49 6e 64    unsigned isInd
1ace0 65 78 65 64 42 79 20 3a 31 3b 20 20 20 2f 2a 20  exedBy :1;   /* 
1acf0 54 72 75 65 20 69 66 20 74 68 65 72 65 20 69 73  True if there is
1ad00 20 61 6e 20 49 4e 44 45 58 45 44 20 42 59 20 63   an INDEXED BY c
1ad10 6c 61 75 73 65 20 2a 2f 0a 20 20 20 20 20 20 75  lause */.      u
1ad20 6e 73 69 67 6e 65 64 20 69 73 54 61 62 46 75 6e  nsigned isTabFun
1ad30 63 20 3a 31 3b 20 20 20 20 20 2f 2a 20 54 72 75  c :1;     /* Tru
1ad40 65 20 69 66 20 74 61 62 6c 65 2d 76 61 6c 75 65  e if table-value
1ad50 64 2d 66 75 6e 63 74 69 6f 6e 20 73 79 6e 74 61  d-function synta
1ad60 78 20 2a 2f 0a 20 20 20 20 20 20 75 6e 73 69 67  x */.      unsig
1ad70 6e 65 64 20 69 73 43 6f 72 72 65 6c 61 74 65 64  ned isCorrelated
1ad80 20 3a 31 3b 20 20 2f 2a 20 54 72 75 65 20 69 66   :1;  /* True if
1ad90 20 73 75 62 2d 71 75 65 72 79 20 69 73 20 63 6f   sub-query is co
1ada0 72 72 65 6c 61 74 65 64 20 2a 2f 0a 20 20 20 20  rrelated */.    
1adb0 20 20 75 6e 73 69 67 6e 65 64 20 76 69 61 43 6f    unsigned viaCo
1adc0 72 6f 75 74 69 6e 65 20 3a 31 3b 20 20 2f 2a 20  routine :1;  /* 
1add0 49 6d 70 6c 65 6d 65 6e 74 65 64 20 61 73 20 61  Implemented as a
1ade0 20 63 6f 2d 72 6f 75 74 69 6e 65 20 2a 2f 0a 20   co-routine */. 
1adf0 20 20 20 20 20 75 6e 73 69 67 6e 65 64 20 69 73       unsigned is
1ae00 52 65 63 75 72 73 69 76 65 20 3a 31 3b 20 20 20  Recursive :1;   
1ae10 2f 2a 20 54 72 75 65 20 66 6f 72 20 72 65 63 75  /* True for recu
1ae20 72 73 69 76 65 20 72 65 66 65 72 65 6e 63 65 20  rsive reference 
1ae30 69 6e 20 57 49 54 48 20 2a 2f 0a 20 20 20 20 7d  in WITH */.    }
1ae40 20 66 67 3b 0a 20 20 20 20 69 6e 74 20 69 43 75   fg;.    int iCu
1ae50 72 73 6f 72 3b 20 20 20 20 20 20 2f 2a 20 54 68  rsor;      /* Th
1ae60 65 20 56 44 42 45 20 63 75 72 73 6f 72 20 6e 75  e VDBE cursor nu
1ae70 6d 62 65 72 20 75 73 65 64 20 74 6f 20 61 63 63  mber used to acc
1ae80 65 73 73 20 74 68 69 73 20 74 61 62 6c 65 20 2a  ess this table *
1ae90 2f 0a 20 20 20 20 45 78 70 72 20 2a 70 4f 6e 3b  /.    Expr *pOn;
1aea0 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 4f          /* The O
1aeb0 4e 20 63 6c 61 75 73 65 20 6f 66 20 61 20 6a 6f  N clause of a jo
1aec0 69 6e 20 2a 2f 0a 20 20 20 20 49 64 4c 69 73 74  in */.    IdList
1aed0 20 2a 70 55 73 69 6e 67 3b 20 20 20 2f 2a 20 54   *pUsing;   /* T
1aee0 68 65 20 55 53 49 4e 47 20 63 6c 61 75 73 65 20  he USING clause 
1aef0 6f 66 20 61 20 6a 6f 69 6e 20 2a 2f 0a 20 20 20  of a join */.   
1af00 20 42 69 74 6d 61 73 6b 20 63 6f 6c 55 73 65 64   Bitmask colUsed
1af10 3b 20 20 2f 2a 20 42 69 74 20 4e 20 28 31 3c 3c  ;  /* Bit N (1<<
1af20 4e 29 20 73 65 74 20 69 66 20 63 6f 6c 75 6d 6e  N) set if column
1af30 20 4e 20 6f 66 20 70 54 61 62 20 69 73 20 75 73   N of pTab is us
1af40 65 64 20 2a 2f 0a 20 20 20 20 75 6e 69 6f 6e 20  ed */.    union 
1af50 7b 0a 20 20 20 20 20 20 63 68 61 72 20 2a 7a 49  {.      char *zI
1af60 6e 64 65 78 65 64 42 79 3b 20 20 20 20 2f 2a 20  ndexedBy;    /* 
1af70 49 64 65 6e 74 69 66 69 65 72 20 66 72 6f 6d 20  Identifier from 
1af80 22 49 4e 44 45 58 45 44 20 42 59 20 3c 7a 49 6e  "INDEXED BY <zIn
1af90 64 65 78 3e 22 20 63 6c 61 75 73 65 20 2a 2f 0a  dex>" clause */.
1afa0 20 20 20 20 20 20 45 78 70 72 4c 69 73 74 20 2a        ExprList *
1afb0 70 46 75 6e 63 41 72 67 3b 20 20 2f 2a 20 41 72  pFuncArg;  /* Ar
1afc0 67 75 6d 65 6e 74 73 20 74 6f 20 74 61 62 6c 65  guments to table
1afd0 2d 76 61 6c 75 65 64 2d 66 75 6e 63 74 69 6f 6e  -valued-function
1afe0 20 2a 2f 0a 20 20 20 20 7d 20 75 31 3b 0a 20 20   */.    } u1;.  
1aff0 20 20 49 6e 64 65 78 20 2a 70 49 42 49 6e 64 65    Index *pIBInde
1b000 78 3b 20 20 2f 2a 20 49 6e 64 65 78 20 73 74 72  x;  /* Index str
1b010 75 63 74 75 72 65 20 63 6f 72 72 65 73 70 6f 6e  ucture correspon
1b020 64 69 6e 67 20 74 6f 20 75 31 2e 7a 49 6e 64 65  ding to u1.zInde
1b030 78 65 64 42 79 20 2a 2f 0a 20 20 7d 20 61 5b 31  xedBy */.  } a[1
1b040 5d 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ];             /
1b050 2a 20 4f 6e 65 20 65 6e 74 72 79 20 66 6f 72 20  * One entry for 
1b060 65 61 63 68 20 69 64 65 6e 74 69 66 69 65 72 20  each identifier 
1b070 6f 6e 20 74 68 65 20 6c 69 73 74 20 2a 2f 0a 7d  on the list */.}
1b080 3b 0a 0a 2f 2a 0a 2a 2a 20 50 65 72 6d 69 74 74  ;../*.** Permitt
1b090 65 64 20 76 61 6c 75 65 73 20 6f 66 20 74 68 65  ed values of the
1b0a0 20 53 72 63 4c 69 73 74 2e 61 2e 6a 6f 69 6e 74   SrcList.a.joint
1b0b0 79 70 65 20 66 69 65 6c 64 0a 2a 2f 0a 23 64 65  ype field.*/.#de
1b0c0 66 69 6e 65 20 4a 54 5f 49 4e 4e 45 52 20 20 20  fine JT_INNER   
1b0d0 20 20 30 78 30 30 30 31 20 20 20 20 2f 2a 20 41    0x0001    /* A
1b0e0 6e 79 20 6b 69 6e 64 20 6f 66 20 69 6e 6e 65 72  ny kind of inner
1b0f0 20 6f 72 20 63 72 6f 73 73 20 6a 6f 69 6e 20 2a   or cross join *
1b100 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f 43 52 4f  /.#define JT_CRO
1b110 53 53 20 20 20 20 20 30 78 30 30 30 32 20 20 20  SS     0x0002   
1b120 20 2f 2a 20 45 78 70 6c 69 63 69 74 20 75 73 65   /* Explicit use
1b130 20 6f 66 20 74 68 65 20 43 52 4f 53 53 20 6b 65   of the CROSS ke
1b140 79 77 6f 72 64 20 2a 2f 0a 23 64 65 66 69 6e 65  yword */.#define
1b150 20 4a 54 5f 4e 41 54 55 52 41 4c 20 20 20 30 78   JT_NATURAL   0x
1b160 30 30 30 34 20 20 20 20 2f 2a 20 54 72 75 65 20  0004    /* True 
1b170 66 6f 72 20 61 20 22 6e 61 74 75 72 61 6c 22 20  for a "natural" 
1b180 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  join */.#define 
1b190 4a 54 5f 4c 45 46 54 20 20 20 20 20 20 30 78 30  JT_LEFT      0x0
1b1a0 30 30 38 20 20 20 20 2f 2a 20 4c 65 66 74 20 6f  008    /* Left o
1b1b0 75 74 65 72 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65  uter join */.#de
1b1c0 66 69 6e 65 20 4a 54 5f 52 49 47 48 54 20 20 20  fine JT_RIGHT   
1b1d0 20 20 30 78 30 30 31 30 20 20 20 20 2f 2a 20 52    0x0010    /* R
1b1e0 69 67 68 74 20 6f 75 74 65 72 20 6a 6f 69 6e 20  ight outer join 
1b1f0 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f 4f 55  */.#define JT_OU
1b200 54 45 52 20 20 20 20 20 30 78 30 30 32 30 20 20  TER     0x0020  
1b210 20 20 2f 2a 20 54 68 65 20 22 4f 55 54 45 52 22    /* The "OUTER"
1b220 20 6b 65 79 77 6f 72 64 20 69 73 20 70 72 65 73   keyword is pres
1b230 65 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a  ent */.#define J
1b240 54 5f 45 52 52 4f 52 20 20 20 20 20 30 78 30 30  T_ERROR     0x00
1b250 34 30 20 20 20 20 2f 2a 20 75 6e 6b 6e 6f 77 6e  40    /* unknown
1b260 20 6f 72 20 75 6e 73 75 70 70 6f 72 74 65 64 20   or unsupported 
1b270 6a 6f 69 6e 20 74 79 70 65 20 2a 2f 0a 0a 0a 2f  join type */.../
1b280 2a 0a 2a 2a 20 46 6c 61 67 73 20 61 70 70 72 6f  *.** Flags appro
1b290 70 72 69 61 74 65 20 66 6f 72 20 74 68 65 20 77  priate for the w
1b2a0 63 74 72 6c 46 6c 61 67 73 20 70 61 72 61 6d 65  ctrlFlags parame
1b2b0 74 65 72 20 6f 66 20 73 71 6c 69 74 65 33 57 68  ter of sqlite3Wh
1b2c0 65 72 65 42 65 67 69 6e 28 29 0a 2a 2a 20 61 6e  ereBegin().** an
1b2d0 64 20 74 68 65 20 57 68 65 72 65 49 6e 66 6f 2e  d the WhereInfo.
1b2e0 77 63 74 72 6c 46 6c 61 67 73 20 6d 65 6d 62 65  wctrlFlags membe
1b2f0 72 2e 0a 2a 2a 0a 2a 2a 20 56 61 6c 75 65 20 63  r..**.** Value c
1b300 6f 6e 73 74 72 61 69 6e 74 73 20 28 65 6e 66 6f  onstraints (enfo
1b310 72 63 65 64 20 76 69 61 20 61 73 73 65 72 74 28  rced via assert(
1b320 29 29 3a 0a 2a 2a 20 20 20 20 20 57 48 45 52 45  )):.**     WHERE
1b330 5f 55 53 45 5f 4c 49 4d 49 54 20 20 3d 3d 20 53  _USE_LIMIT  == S
1b340 46 5f 46 69 78 65 64 4c 69 6d 69 74 0a 2a 2f 0a  F_FixedLimit.*/.
1b350 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 4f 52  #define WHERE_OR
1b360 44 45 52 42 59 5f 4e 4f 52 4d 41 4c 20 20 20 30  DERBY_NORMAL   0
1b370 78 30 30 30 30 20 2f 2a 20 4e 6f 2d 6f 70 20 2a  x0000 /* No-op *
1b380 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f  /.#define WHERE_
1b390 4f 52 44 45 52 42 59 5f 4d 49 4e 20 20 20 20 20  ORDERBY_MIN     
1b3a0 20 30 78 30 30 30 31 20 2f 2a 20 4f 52 44 45 52   0x0001 /* ORDER
1b3b0 20 42 59 20 70 72 6f 63 65 73 73 69 6e 67 20 66   BY processing f
1b3c0 6f 72 20 6d 69 6e 28 29 20 66 75 6e 63 20 2a 2f  or min() func */
1b3d0 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 4f  .#define WHERE_O
1b3e0 52 44 45 52 42 59 5f 4d 41 58 20 20 20 20 20 20  RDERBY_MAX      
1b3f0 30 78 30 30 30 32 20 2f 2a 20 4f 52 44 45 52 20  0x0002 /* ORDER 
1b400 42 59 20 70 72 6f 63 65 73 73 69 6e 67 20 66 6f  BY processing fo
1b410 72 20 6d 61 78 28 29 20 66 75 6e 63 20 2a 2f 0a  r max() func */.
1b420 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 4f 4e  #define WHERE_ON
1b430 45 50 41 53 53 5f 44 45 53 49 52 45 44 20 20 30  EPASS_DESIRED  0
1b440 78 30 30 30 34 20 2f 2a 20 57 61 6e 74 20 74 6f  x0004 /* Want to
1b450 20 64 6f 20 6f 6e 65 2d 70 61 73 73 20 55 50 44   do one-pass UPD
1b460 41 54 45 2f 44 45 4c 45 54 45 20 2a 2f 0a 23 64  ATE/DELETE */.#d
1b470 65 66 69 6e 65 20 57 48 45 52 45 5f 4f 4e 45 50  efine WHERE_ONEP
1b480 41 53 53 5f 4d 55 4c 54 49 52 4f 57 20 30 78 30  ASS_MULTIROW 0x0
1b490 30 30 38 20 2f 2a 20 4f 4e 45 50 41 53 53 20 69  008 /* ONEPASS i
1b4a0 73 20 6f 6b 20 77 69 74 68 20 6d 75 6c 74 69 70  s ok with multip
1b4b0 6c 65 20 72 6f 77 73 20 2a 2f 0a 23 64 65 66 69  le rows */.#defi
1b4c0 6e 65 20 57 48 45 52 45 5f 44 55 50 4c 49 43 41  ne WHERE_DUPLICA
1b4d0 54 45 53 5f 4f 4b 20 20 20 20 30 78 30 30 31 30  TES_OK    0x0010
1b4e0 20 2f 2a 20 4f 6b 20 74 6f 20 72 65 74 75 72 6e   /* Ok to return
1b4f0 20 61 20 72 6f 77 20 6d 6f 72 65 20 74 68 61 6e   a row more than
1b500 20 6f 6e 63 65 20 2a 2f 0a 23 64 65 66 69 6e 65   once */.#define
1b510 20 57 48 45 52 45 5f 4f 52 5f 53 55 42 43 4c 41   WHERE_OR_SUBCLA
1b520 55 53 45 20 20 20 20 20 30 78 30 30 32 30 20 2f  USE     0x0020 /
1b530 2a 20 50 72 6f 63 65 73 73 69 6e 67 20 61 20 73  * Processing a s
1b540 75 62 2d 57 48 45 52 45 20 61 73 20 70 61 72 74  ub-WHERE as part
1b550 20 6f 66 0a 20 20 20 20 20 20 20 20 20 20 20 20   of.            
1b560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b570 20 20 20 20 20 20 20 20 20 20 2a 2a 20 74 68 65            ** the
1b580 20 4f 52 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e   OR optimization
1b590 20 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45    */.#define WHE
1b5a0 52 45 5f 47 52 4f 55 50 42 59 20 20 20 20 20 20  RE_GROUPBY      
1b5b0 20 20 20 20 30 78 30 30 34 30 20 2f 2a 20 70 4f      0x0040 /* pO
1b5c0 72 64 65 72 42 79 20 69 73 20 72 65 61 6c 6c 79  rderBy is really
1b5d0 20 61 20 47 52 4f 55 50 20 42 59 20 2a 2f 0a 23   a GROUP BY */.#
1b5e0 64 65 66 69 6e 65 20 57 48 45 52 45 5f 44 49 53  define WHERE_DIS
1b5f0 54 49 4e 43 54 42 59 20 20 20 20 20 20 20 30 78  TINCTBY       0x
1b600 30 30 38 30 20 2f 2a 20 70 4f 72 64 65 72 62 79  0080 /* pOrderby
1b610 20 69 73 20 72 65 61 6c 6c 79 20 61 20 44 49 53   is really a DIS
1b620 54 49 4e 43 54 20 63 6c 61 75 73 65 20 2a 2f 0a  TINCT clause */.
1b630 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 57 41  #define WHERE_WA
1b640 4e 54 5f 44 49 53 54 49 4e 43 54 20 20 20 20 30  NT_DISTINCT    0
1b650 78 30 31 30 30 20 2f 2a 20 41 6c 6c 20 6f 75 74  x0100 /* All out
1b660 70 75 74 20 6e 65 65 64 73 20 74 6f 20 62 65 20  put needs to be 
1b670 64 69 73 74 69 6e 63 74 20 2a 2f 0a 23 64 65 66  distinct */.#def
1b680 69 6e 65 20 57 48 45 52 45 5f 53 4f 52 54 42 59  ine WHERE_SORTBY
1b690 47 52 4f 55 50 20 20 20 20 20 20 30 78 30 32 30  GROUP      0x020
1b6a0 30 20 2f 2a 20 53 75 70 70 6f 72 74 20 73 71 6c  0 /* Support sql
1b6b0 69 74 65 33 57 68 65 72 65 49 73 53 6f 72 74 65  ite3WhereIsSorte
1b6c0 64 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57  d() */.#define W
1b6d0 48 45 52 45 5f 53 45 45 4b 5f 54 41 42 4c 45 20  HERE_SEEK_TABLE 
1b6e0 20 20 20 20 20 20 30 78 30 34 30 30 20 2f 2a 20        0x0400 /* 
1b6f0 44 6f 20 6e 6f 74 20 64 65 66 65 72 20 73 65 65  Do not defer see
1b700 6b 73 20 6f 6e 20 6d 61 69 6e 20 74 61 62 6c 65  ks on main table
1b710 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52   */.#define WHER
1b720 45 5f 4f 52 44 45 52 42 59 5f 4c 49 4d 49 54 20  E_ORDERBY_LIMIT 
1b730 20 20 20 30 78 30 38 30 30 20 2f 2a 20 4f 52 44     0x0800 /* ORD
1b740 45 52 42 59 2b 4c 49 4d 49 54 20 6f 6e 20 74 68  ERBY+LIMIT on th
1b750 65 20 69 6e 6e 65 72 20 6c 6f 6f 70 20 2a 2f 0a  e inner loop */.
1b760 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 53 45  #define WHERE_SE
1b770 45 4b 5f 55 4e 49 51 5f 54 41 42 4c 45 20 20 30  EK_UNIQ_TABLE  0
1b780 78 31 30 30 30 20 2f 2a 20 44 6f 20 6e 6f 74 20  x1000 /* Do not 
1b790 64 65 66 65 72 20 73 65 65 6b 73 20 69 66 20 75  defer seeks if u
1b7a0 6e 69 71 75 65 20 2a 2f 0a 20 20 20 20 20 20 20  nique */.       
1b7b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b7c0 20 2f 2a 20 20 20 20 20 30 78 32 30 30 30 20 20   /*     0x2000  
1b7d0 20 20 6e 6f 74 20 63 75 72 72 65 6e 74 6c 79 20    not currently 
1b7e0 75 73 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20  used */.#define 
1b7f0 57 48 45 52 45 5f 55 53 45 5f 4c 49 4d 49 54 20  WHERE_USE_LIMIT 
1b800 20 20 20 20 20 20 20 30 78 34 30 30 30 20 2f 2a         0x4000 /*
1b810 20 55 73 65 20 74 68 65 20 4c 49 4d 49 54 20 69   Use the LIMIT i
1b820 6e 20 63 6f 73 74 20 65 73 74 69 6d 61 74 65 73  n cost estimates
1b830 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20   */.            
1b840 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 20              /*  
1b850 20 20 20 30 78 38 30 30 30 20 20 20 20 6e 6f 74     0x8000    not
1b860 20 63 75 72 72 65 6e 74 6c 79 20 75 73 65 64 20   currently used 
1b870 2a 2f 0a 0a 2f 2a 20 41 6c 6c 6f 77 65 64 20 72  */../* Allowed r
1b880 65 74 75 72 6e 20 76 61 6c 75 65 73 20 66 72 6f  eturn values fro
1b890 6d 20 73 71 6c 69 74 65 33 57 68 65 72 65 49 73  m sqlite3WhereIs
1b8a0 44 69 73 74 69 6e 63 74 28 29 0a 2a 2f 0a 23 64  Distinct().*/.#d
1b8b0 65 66 69 6e 65 20 57 48 45 52 45 5f 44 49 53 54  efine WHERE_DIST
1b8c0 49 4e 43 54 5f 4e 4f 4f 50 20 20 20 20 20 20 30  INCT_NOOP      0
1b8d0 20 20 2f 2a 20 44 49 53 54 49 4e 43 54 20 6b 65    /* DISTINCT ke
1b8e0 79 77 6f 72 64 20 6e 6f 74 20 75 73 65 64 20 2a  yword not used *
1b8f0 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f  /.#define WHERE_
1b900 44 49 53 54 49 4e 43 54 5f 55 4e 49 51 55 45 20  DISTINCT_UNIQUE 
1b910 20 20 20 31 20 20 2f 2a 20 4e 6f 20 64 75 70 6c     1  /* No dupl
1b920 69 63 61 74 65 73 20 2a 2f 0a 23 64 65 66 69 6e  icates */.#defin
1b930 65 20 57 48 45 52 45 5f 44 49 53 54 49 4e 43 54  e WHERE_DISTINCT
1b940 5f 4f 52 44 45 52 45 44 20 20 20 32 20 20 2f 2a  _ORDERED   2  /*
1b950 20 41 6c 6c 20 64 75 70 6c 69 63 61 74 65 73 20   All duplicates 
1b960 61 72 65 20 61 64 6a 61 63 65 6e 74 20 2a 2f 0a  are adjacent */.
1b970 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 44 49  #define WHERE_DI
1b980 53 54 49 4e 43 54 5f 55 4e 4f 52 44 45 52 45 44  STINCT_UNORDERED
1b990 20 33 20 20 2f 2a 20 44 75 70 6c 69 63 61 74 65   3  /* Duplicate
1b9a0 73 20 61 72 65 20 73 63 61 74 74 65 72 65 64 20  s are scattered 
1b9b0 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 20 4e 61 6d 65  */../*.** A Name
1b9c0 43 6f 6e 74 65 78 74 20 64 65 66 69 6e 65 73 20  Context defines 
1b9d0 61 20 63 6f 6e 74 65 78 74 20 69 6e 20 77 68 69  a context in whi
1b9e0 63 68 20 74 6f 20 72 65 73 6f 6c 76 65 20 74 61  ch to resolve ta
1b9f0 62 6c 65 20 61 6e 64 20 63 6f 6c 75 6d 6e 0a 2a  ble and column.*
1ba00 2a 20 6e 61 6d 65 73 2e 20 20 54 68 65 20 63 6f  * names.  The co
1ba10 6e 74 65 78 74 20 63 6f 6e 73 69 73 74 73 20 6f  ntext consists o
1ba20 66 20 61 20 6c 69 73 74 20 6f 66 20 74 61 62 6c  f a list of tabl
1ba30 65 73 20 28 74 68 65 20 70 53 72 63 4c 69 73 74  es (the pSrcList
1ba40 29 20 66 69 65 6c 64 20 61 6e 64 0a 2a 2a 20 61  ) field and.** a
1ba50 20 6c 69 73 74 20 6f 66 20 6e 61 6d 65 64 20 65   list of named e
1ba60 78 70 72 65 73 73 69 6f 6e 20 28 70 45 4c 69 73  xpression (pELis
1ba70 74 29 2e 20 20 54 68 65 20 6e 61 6d 65 64 20 65  t).  The named e
1ba80 78 70 72 65 73 73 69 6f 6e 20 6c 69 73 74 20 6d  xpression list m
1ba90 61 79 0a 2a 2a 20 62 65 20 4e 55 4c 4c 2e 20 20  ay.** be NULL.  
1baa0 54 68 65 20 70 53 72 63 20 63 6f 72 72 65 73 70  The pSrc corresp
1bab0 6f 6e 64 73 20 74 6f 20 74 68 65 20 46 52 4f 4d  onds to the FROM
1bac0 20 63 6c 61 75 73 65 20 6f 66 20 61 20 53 45 4c   clause of a SEL
1bad0 45 43 54 20 6f 72 0a 2a 2a 20 74 6f 20 74 68 65  ECT or.** to the
1bae0 20 74 61 62 6c 65 20 62 65 69 6e 67 20 6f 70 65   table being ope
1baf0 72 61 74 65 64 20 6f 6e 20 62 79 20 49 4e 53 45  rated on by INSE
1bb00 52 54 2c 20 55 50 44 41 54 45 2c 20 6f 72 20 44  RT, UPDATE, or D
1bb10 45 4c 45 54 45 2e 20 20 54 68 65 0a 2a 2a 20 70  ELETE.  The.** p
1bb20 45 4c 69 73 74 20 63 6f 72 72 65 73 70 6f 6e 64  EList correspond
1bb30 73 20 74 6f 20 74 68 65 20 72 65 73 75 6c 74 20  s to the result 
1bb40 73 65 74 20 6f 66 20 61 20 53 45 4c 45 43 54 20  set of a SELECT 
1bb50 61 6e 64 20 69 73 20 4e 55 4c 4c 20 66 6f 72 0a  and is NULL for.
1bb60 2a 2a 20 6f 74 68 65 72 20 73 74 61 74 65 6d 65  ** other stateme
1bb70 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20 4e 61 6d 65 43  nts..**.** NameC
1bb80 6f 6e 74 65 78 74 73 20 63 61 6e 20 62 65 20 6e  ontexts can be n
1bb90 65 73 74 65 64 2e 20 20 57 68 65 6e 20 72 65 73  ested.  When res
1bba0 6f 6c 76 69 6e 67 20 6e 61 6d 65 73 2c 20 74 68  olving names, th
1bbb0 65 20 69 6e 6e 65 72 2d 6d 6f 73 74 0a 2a 2a 20  e inner-most.** 
1bbc0 63 6f 6e 74 65 78 74 20 69 73 20 73 65 61 72 63  context is searc
1bbd0 68 65 64 20 66 69 72 73 74 2e 20 20 49 66 20 6e  hed first.  If n
1bbe0 6f 20 6d 61 74 63 68 20 69 73 20 66 6f 75 6e 64  o match is found
1bbf0 2c 20 74 68 65 20 6e 65 78 74 20 6f 75 74 65 72  , the next outer
1bc00 0a 2a 2a 20 63 6f 6e 74 65 78 74 20 69 73 20 63  .** context is c
1bc10 68 65 63 6b 65 64 2e 20 20 49 66 20 74 68 65 72  hecked.  If ther
1bc20 65 20 69 73 20 73 74 69 6c 6c 20 6e 6f 20 6d 61  e is still no ma
1bc30 74 63 68 2c 20 74 68 65 20 6e 65 78 74 20 63 6f  tch, the next co
1bc40 6e 74 65 78 74 0a 2a 2a 20 69 73 20 63 68 65 63  ntext.** is chec
1bc50 6b 65 64 2e 20 20 54 68 69 73 20 70 72 6f 63 65  ked.  This proce
1bc60 73 73 20 63 6f 6e 74 69 6e 75 65 73 20 75 6e 74  ss continues unt
1bc70 69 6c 20 65 69 74 68 65 72 20 61 20 6d 61 74 63  il either a matc
1bc80 68 20 69 73 20 66 6f 75 6e 64 0a 2a 2a 20 6f 72  h is found.** or
1bc90 20 61 6c 6c 20 63 6f 6e 74 65 78 74 73 20 61 72   all contexts ar
1bca0 65 20 63 68 65 63 6b 2e 20 20 57 68 65 6e 20 61  e check.  When a
1bcb0 20 6d 61 74 63 68 20 69 73 20 66 6f 75 6e 64 2c   match is found,
1bcc0 20 74 68 65 20 6e 52 65 66 20 6d 65 6d 62 65 72   the nRef member
1bcd0 20 6f 66 0a 2a 2a 20 74 68 65 20 63 6f 6e 74 65   of.** the conte
1bce0 78 74 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68  xt containing th
1bcf0 65 20 6d 61 74 63 68 20 69 73 20 69 6e 63 72 65  e match is incre
1bd00 6d 65 6e 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 45 61  mented..**.** Ea
1bd10 63 68 20 73 75 62 71 75 65 72 79 20 67 65 74 73  ch subquery gets
1bd20 20 61 20 6e 65 77 20 4e 61 6d 65 43 6f 6e 74 65   a new NameConte
1bd30 78 74 2e 20 20 54 68 65 20 70 4e 65 78 74 20 66  xt.  The pNext f
1bd40 69 65 6c 64 20 70 6f 69 6e 74 73 20 74 6f 20 74  ield points to t
1bd50 68 65 0a 2a 2a 20 4e 61 6d 65 43 6f 6e 74 65 78  he.** NameContex
1bd60 74 20 69 6e 20 74 68 65 20 70 61 72 65 6e 74 20  t in the parent 
1bd70 71 75 65 72 79 2e 20 20 54 68 75 73 20 74 68 65  query.  Thus the
1bd80 20 70 72 6f 63 65 73 73 20 6f 66 20 73 63 61 6e   process of scan
1bd90 6e 69 6e 67 20 74 68 65 0a 2a 2a 20 4e 61 6d 65  ning the.** Name
1bda0 43 6f 6e 74 65 78 74 20 6c 69 73 74 20 63 6f 72  Context list cor
1bdb0 72 65 73 70 6f 6e 64 73 20 74 6f 20 73 65 61 72  responds to sear
1bdc0 63 68 69 6e 67 20 74 68 72 6f 75 67 68 20 73 75  ching through su
1bdd0 63 63 65 73 73 69 76 65 6c 79 20 6f 75 74 65 72  ccessively outer
1bde0 0a 2a 2a 20 73 75 62 71 75 65 72 69 65 73 20 6c  .** subqueries l
1bdf0 6f 6f 6b 69 6e 67 20 66 6f 72 20 61 20 6d 61 74  ooking for a mat
1be00 63 68 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 4e 61  ch..*/.struct Na
1be10 6d 65 43 6f 6e 74 65 78 74 20 7b 0a 20 20 50 61  meContext {.  Pa
1be20 72 73 65 20 2a 70 50 61 72 73 65 3b 20 20 20 20  rse *pParse;    
1be30 20 20 20 2f 2a 20 54 68 65 20 70 61 72 73 65 72     /* The parser
1be40 20 2a 2f 0a 20 20 53 72 63 4c 69 73 74 20 2a 70   */.  SrcList *p
1be50 53 72 63 4c 69 73 74 3b 20 20 20 2f 2a 20 4f 6e  SrcList;   /* On
1be60 65 20 6f 72 20 6d 6f 72 65 20 74 61 62 6c 65 73  e or more tables
1be70 20 75 73 65 64 20 74 6f 20 72 65 73 6f 6c 76 65   used to resolve
1be80 20 6e 61 6d 65 73 20 2a 2f 0a 20 20 75 6e 69 6f   names */.  unio
1be90 6e 20 7b 0a 20 20 20 20 45 78 70 72 4c 69 73 74  n {.    ExprList
1bea0 20 2a 70 45 4c 69 73 74 3b 20 20 20 20 2f 2a 20   *pEList;    /* 
1beb0 4f 70 74 69 6f 6e 61 6c 20 6c 69 73 74 20 6f 66  Optional list of
1bec0 20 72 65 73 75 6c 74 2d 73 65 74 20 63 6f 6c 75   result-set colu
1bed0 6d 6e 73 20 2a 2f 0a 20 20 20 20 41 67 67 49 6e  mns */.    AggIn
1bee0 66 6f 20 2a 70 41 67 67 49 6e 66 6f 3b 20 20 20  fo *pAggInfo;   
1bef0 2f 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 61  /* Information a
1bf00 62 6f 75 74 20 61 67 67 72 65 67 61 74 65 73 20  bout aggregates 
1bf10 61 74 20 74 68 69 73 20 6c 65 76 65 6c 20 2a 2f  at this level */
1bf20 0a 20 20 20 20 55 70 73 65 72 74 20 2a 70 55 70  .    Upsert *pUp
1bf30 73 65 72 74 3b 20 20 20 20 20 2f 2a 20 4f 4e 20  sert;     /* ON 
1bf40 43 4f 4e 46 4c 49 43 54 20 63 6c 61 75 73 65 20  CONFLICT clause 
1bf50 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 66 72 6f 6d  information from
1bf60 20 61 6e 20 75 70 73 65 72 74 20 2a 2f 0a 20 20   an upsert */.  
1bf70 7d 20 75 4e 43 3b 0a 20 20 4e 61 6d 65 43 6f 6e  } uNC;.  NameCon
1bf80 74 65 78 74 20 2a 70 4e 65 78 74 3b 20 20 2f 2a  text *pNext;  /*
1bf90 20 4e 65 78 74 20 6f 75 74 65 72 20 6e 61 6d 65   Next outer name
1bfa0 20 63 6f 6e 74 65 78 74 2e 20 20 4e 55 4c 4c 20   context.  NULL 
1bfb0 66 6f 72 20 6f 75 74 65 72 6d 6f 73 74 20 2a 2f  for outermost */
1bfc0 0a 20 20 69 6e 74 20 6e 52 65 66 3b 20 20 20 20  .  int nRef;    
1bfd0 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
1bfe0 72 20 6f 66 20 6e 61 6d 65 73 20 72 65 73 6f 6c  r of names resol
1bff0 76 65 64 20 62 79 20 74 68 69 73 20 63 6f 6e 74  ved by this cont
1c000 65 78 74 20 2a 2f 0a 20 20 69 6e 74 20 6e 45 72  ext */.  int nEr
1c010 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  r;            /*
1c020 20 4e 75 6d 62 65 72 20 6f 66 20 65 72 72 6f 72   Number of error
1c030 73 20 65 6e 63 6f 75 6e 74 65 72 65 64 20 77 68  s encountered wh
1c040 69 6c 65 20 72 65 73 6f 6c 76 69 6e 67 20 6e 61  ile resolving na
1c050 6d 65 73 20 2a 2f 0a 20 20 75 31 36 20 6e 63 46  mes */.  u16 ncF
1c060 6c 61 67 73 3b 20 20 20 20 20 20 20 20 20 2f 2a  lags;         /*
1c070 20 5a 65 72 6f 20 6f 72 20 6d 6f 72 65 20 4e 43   Zero or more NC
1c080 5f 2a 20 66 6c 61 67 73 20 64 65 66 69 6e 65 64  _* flags defined
1c090 20 62 65 6c 6f 77 20 2a 2f 0a 7d 3b 0a 0a 2f 2a   below */.};../*
1c0a0 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75  .** Allowed valu
1c0b0 65 73 20 66 6f 72 20 74 68 65 20 4e 61 6d 65 43  es for the NameC
1c0c0 6f 6e 74 65 78 74 2c 20 6e 63 46 6c 61 67 73 20  ontext, ncFlags 
1c0d0 66 69 65 6c 64 2e 0a 2a 2a 0a 2a 2a 20 56 61 6c  field..**.** Val
1c0e0 75 65 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 28  ue constraints (
1c0f0 61 6c 6c 20 63 68 65 63 6b 65 64 20 76 69 61 20  all checked via 
1c100 61 73 73 65 72 74 28 29 29 3a 0a 2a 2a 20 20 20  assert()):.**   
1c110 20 4e 43 5f 48 61 73 41 67 67 20 20 20 20 3d 3d   NC_HasAgg    ==
1c120 20 53 46 5f 48 61 73 41 67 67 0a 2a 2a 20 20 20   SF_HasAgg.**   
1c130 20 4e 43 5f 4d 69 6e 4d 61 78 41 67 67 20 3d 3d   NC_MinMaxAgg ==
1c140 20 53 46 5f 4d 69 6e 4d 61 78 41 67 67 20 3d 3d   SF_MinMaxAgg ==
1c150 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4d 49 4e   SQLITE_FUNC_MIN
1c160 4d 41 58 0a 2a 2a 0a 2a 2f 0a 23 64 65 66 69 6e  MAX.**.*/.#defin
1c170 65 20 4e 43 5f 41 6c 6c 6f 77 41 67 67 20 20 30  e NC_AllowAgg  0
1c180 78 30 30 30 31 20 20 2f 2a 20 41 67 67 72 65 67  x0001  /* Aggreg
1c190 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 20 61 72  ate functions ar
1c1a0 65 20 61 6c 6c 6f 77 65 64 20 68 65 72 65 20 2a  e allowed here *
1c1b0 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 50 61 72  /.#define NC_Par
1c1c0 74 49 64 78 20 20 20 30 78 30 30 30 32 20 20 2f  tIdx   0x0002  /
1c1d0 2a 20 54 72 75 65 20 69 66 20 72 65 73 6f 6c 76  * True if resolv
1c1e0 69 6e 67 20 61 20 70 61 72 74 69 61 6c 20 69 6e  ing a partial in
1c1f0 64 65 78 20 57 48 45 52 45 20 2a 2f 0a 23 64 65  dex WHERE */.#de
1c200 66 69 6e 65 20 4e 43 5f 49 73 43 68 65 63 6b 20  fine NC_IsCheck 
1c210 20 20 30 78 30 30 30 34 20 20 2f 2a 20 54 72 75    0x0004  /* Tru
1c220 65 20 69 66 20 72 65 73 6f 6c 76 69 6e 67 20 6e  e if resolving n
1c230 61 6d 65 73 20 69 6e 20 61 20 43 48 45 43 4b 20  ames in a CHECK 
1c240 63 6f 6e 73 74 72 61 69 6e 74 20 2a 2f 0a 23 64  constraint */.#d
1c250 65 66 69 6e 65 20 4e 43 5f 49 6e 41 67 67 46 75  efine NC_InAggFu
1c260 6e 63 20 30 78 30 30 30 38 20 20 2f 2a 20 54 72  nc 0x0008  /* Tr
1c270 75 65 20 69 66 20 61 6e 61 6c 79 7a 69 6e 67 20  ue if analyzing 
1c280 61 72 67 75 6d 65 6e 74 73 20 74 6f 20 61 6e 20  arguments to an 
1c290 61 67 67 20 66 75 6e 63 20 2a 2f 0a 23 64 65 66  agg func */.#def
1c2a0 69 6e 65 20 4e 43 5f 48 61 73 41 67 67 20 20 20  ine NC_HasAgg   
1c2b0 20 30 78 30 30 31 30 20 20 2f 2a 20 4f 6e 65 20   0x0010  /* One 
1c2c0 6f 72 20 6d 6f 72 65 20 61 67 67 72 65 67 61 74  or more aggregat
1c2d0 65 20 66 75 6e 63 74 69 6f 6e 73 20 73 65 65 6e  e functions seen
1c2e0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 49   */.#define NC_I
1c2f0 64 78 45 78 70 72 20 20 20 30 78 30 30 32 30 20  dxExpr   0x0020 
1c300 20 2f 2a 20 54 72 75 65 20 69 66 20 72 65 73 6f   /* True if reso
1c310 6c 76 69 6e 67 20 63 6f 6c 75 6d 6e 73 20 6f 66  lving columns of
1c320 20 43 52 45 41 54 45 20 49 4e 44 45 58 20 2a 2f   CREATE INDEX */
1c330 0a 23 64 65 66 69 6e 65 20 4e 43 5f 56 61 72 53  .#define NC_VarS
1c340 65 6c 65 63 74 20 30 78 30 30 34 30 20 20 2f 2a  elect 0x0040  /*
1c350 20 41 20 63 6f 72 72 65 6c 61 74 65 64 20 73 75   A correlated su
1c360 62 71 75 65 72 79 20 68 61 73 20 62 65 65 6e 20  bquery has been 
1c370 73 65 65 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  seen */.#define 
1c380 4e 43 5f 55 45 4c 69 73 74 20 20 20 20 30 78 30  NC_UEList    0x0
1c390 30 38 30 20 20 2f 2a 20 54 72 75 65 20 69 66 20  080  /* True if 
1c3a0 75 4e 43 2e 70 45 4c 69 73 74 20 69 73 20 75 73  uNC.pEList is us
1c3b0 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43  ed */.#define NC
1c3c0 5f 55 41 67 67 49 6e 66 6f 20 20 30 78 30 31 30  _UAggInfo  0x010
1c3d0 30 20 20 2f 2a 20 54 72 75 65 20 69 66 20 75 4e  0  /* True if uN
1c3e0 43 2e 70 41 67 67 49 6e 66 6f 20 69 73 20 75 73  C.pAggInfo is us
1c3f0 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43  ed */.#define NC
1c400 5f 55 55 70 73 65 72 74 20 20 20 30 78 30 32 30  _UUpsert   0x020
1c410 30 20 20 2f 2a 20 54 72 75 65 20 69 66 20 75 4e  0  /* True if uN
1c420 43 2e 70 55 70 73 65 72 74 20 69 73 20 75 73 65  C.pUpsert is use
1c430 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f  d */.#define NC_
1c440 4d 69 6e 4d 61 78 41 67 67 20 30 78 31 30 30 30  MinMaxAgg 0x1000
1c450 20 20 2f 2a 20 6d 69 6e 2f 6d 61 78 20 61 67 67    /* min/max agg
1c460 72 65 67 61 74 65 73 20 73 65 65 6e 2e 20 20 53  regates seen.  S
1c470 65 65 20 6e 6f 74 65 20 61 62 6f 76 65 20 2a 2f  ee note above */
1c480 0a 23 64 65 66 69 6e 65 20 4e 43 5f 43 6f 6d 70  .#define NC_Comp
1c490 6c 65 78 20 20 20 30 78 32 30 30 30 20 20 2f 2a  lex   0x2000  /*
1c4a0 20 54 72 75 65 20 69 66 20 61 20 66 75 6e 63 74   True if a funct
1c4b0 69 6f 6e 20 6f 72 20 73 75 62 71 75 65 72 79 20  ion or subquery 
1c4c0 73 65 65 6e 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41  seen */../*.** A
1c4d0 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  n instance of th
1c4e0 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6f 62 6a 65  e following obje
1c4f0 63 74 20 64 65 73 63 72 69 62 65 73 20 61 20 73  ct describes a s
1c500 69 6e 67 6c 65 20 4f 4e 20 43 4f 4e 46 4c 49 43  ingle ON CONFLIC
1c510 54 0a 2a 2a 20 63 6c 61 75 73 65 20 69 6e 20 61  T.** clause in a
1c520 6e 20 75 70 73 65 72 74 2e 0a 2a 2a 0a 2a 2a 20  n upsert..**.** 
1c530 54 68 65 20 70 55 70 73 65 72 74 54 61 72 67 65  The pUpsertTarge
1c540 74 20 66 69 65 6c 64 20 69 73 20 6f 6e 6c 79 20  t field is only 
1c550 73 65 74 20 69 66 20 74 68 65 20 4f 4e 20 43 4f  set if the ON CO
1c560 4e 46 4c 49 43 54 20 63 6c 61 75 73 65 20 69 6e  NFLICT clause in
1c570 63 6c 75 64 65 73 0a 2a 2a 20 63 6f 6e 66 6c 69  cludes.** confli
1c580 63 74 2d 74 61 72 67 65 74 20 63 6c 61 75 73 65  ct-target clause
1c590 2e 20 20 28 49 6e 20 22 4f 4e 20 43 4f 4e 46 4c  .  (In "ON CONFL
1c5a0 49 43 54 28 61 2c 62 29 22 20 74 68 65 20 22 28  ICT(a,b)" the "(
1c5b0 61 2c 62 29 22 20 69 73 20 74 68 65 0a 2a 2a 20  a,b)" is the.** 
1c5c0 63 6f 6e 66 6c 69 63 74 2d 74 61 72 67 65 74 20  conflict-target 
1c5d0 63 6c 61 75 73 65 2e 29 20 20 54 68 65 20 70 55  clause.)  The pU
1c5e0 70 73 65 72 74 54 61 72 67 65 74 57 68 65 72 65  psertTargetWhere
1c5f0 20 69 73 20 74 68 65 20 6f 70 74 69 6f 6e 61 6c   is the optional
1c600 0a 2a 2a 20 57 48 45 52 45 20 63 6c 61 75 73 65  .** WHERE clause
1c610 20 75 73 65 64 20 74 6f 20 69 64 65 6e 74 69 66   used to identif
1c620 79 20 70 61 72 74 69 61 6c 20 75 6e 69 71 75 65  y partial unique
1c630 20 69 6e 64 65 78 65 73 2e 0a 2a 2a 0a 2a 2a 20   indexes..**.** 
1c640 70 55 70 73 65 72 74 53 65 74 20 69 73 20 74 68  pUpsertSet is th
1c650 65 20 6c 69 73 74 20 6f 66 20 63 6f 6c 75 6d 6e  e list of column
1c660 3d 65 78 70 72 20 74 65 72 6d 73 20 6f 66 20 74  =expr terms of t
1c670 68 65 20 55 50 44 41 54 45 20 73 74 61 74 65 6d  he UPDATE statem
1c680 65 6e 74 2e 20 0a 2a 2a 20 54 68 65 20 70 55 70  ent. .** The pUp
1c690 73 65 72 74 53 65 74 20 66 69 65 6c 64 20 69 73  sertSet field is
1c6a0 20 4e 55 4c 4c 20 66 6f 72 20 61 20 4f 4e 20 43   NULL for a ON C
1c6b0 4f 4e 46 4c 49 43 54 20 44 4f 20 4e 4f 54 48 49  ONFLICT DO NOTHI
1c6c0 4e 47 2e 20 20 54 68 65 0a 2a 2a 20 70 55 70 73  NG.  The.** pUps
1c6d0 65 72 74 57 68 65 72 65 20 69 73 20 74 68 65 20  ertWhere is the 
1c6e0 57 48 45 52 45 20 63 6c 61 75 73 65 20 66 6f 72  WHERE clause for
1c6f0 20 74 68 65 20 55 50 44 41 54 45 20 61 6e 64 20   the UPDATE and 
1c700 69 73 20 4e 55 4c 4c 20 69 66 20 74 68 65 0a 2a  is NULL if the.*
1c710 2a 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 69  * WHERE clause i
1c720 73 20 6f 6d 69 74 74 65 64 2e 0a 2a 2f 0a 73 74  s omitted..*/.st
1c730 72 75 63 74 20 55 70 73 65 72 74 20 7b 0a 20 20  ruct Upsert {.  
1c740 45 78 70 72 4c 69 73 74 20 2a 70 55 70 73 65 72  ExprList *pUpser
1c750 74 54 61 72 67 65 74 3b 20 20 2f 2a 20 4f 70 74  tTarget;  /* Opt
1c760 69 6f 6e 61 6c 20 64 65 73 63 72 69 70 74 69 6f  ional descriptio
1c770 6e 20 6f 66 20 63 6f 6e 66 6c 69 63 74 69 6e 67  n of conflicting
1c780 20 69 6e 64 65 78 20 2a 2f 0a 20 20 45 78 70 72   index */.  Expr
1c790 20 2a 70 55 70 73 65 72 74 54 61 72 67 65 74 57   *pUpsertTargetW
1c7a0 68 65 72 65 3b 20 2f 2a 20 57 48 45 52 45 20 63  here; /* WHERE c
1c7b0 6c 61 75 73 65 20 66 6f 72 20 70 61 72 74 69 61  lause for partia
1c7c0 6c 20 69 6e 64 65 78 20 74 61 72 67 65 74 73 20  l index targets 
1c7d0 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70  */.  ExprList *p
1c7e0 55 70 73 65 72 74 53 65 74 3b 20 20 20 20 20 2f  UpsertSet;     /
1c7f0 2a 20 54 68 65 20 53 45 54 20 63 6c 61 75 73 65  * The SET clause
1c800 20 66 72 6f 6d 20 61 6e 20 4f 4e 20 43 4f 4e 46   from an ON CONF
1c810 4c 49 43 54 20 55 50 44 41 54 45 20 2a 2f 0a 20  LICT UPDATE */. 
1c820 20 45 78 70 72 20 2a 70 55 70 73 65 72 74 57 68   Expr *pUpsertWh
1c830 65 72 65 3b 20 20 20 20 20 20 20 2f 2a 20 57 48  ere;       /* WH
1c840 45 52 45 20 63 6c 61 75 73 65 20 66 6f 72 20 74  ERE clause for t
1c850 68 65 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 55  he ON CONFLICT U
1c860 50 44 41 54 45 20 2a 2f 0a 20 20 2f 2a 20 54 68  PDATE */.  /* Th
1c870 65 20 66 69 65 6c 64 73 20 61 62 6f 76 65 20 63  e fields above c
1c880 6f 6d 70 72 69 73 65 20 74 68 65 20 70 61 72 73  omprise the pars
1c890 65 20 74 72 65 65 20 66 6f 72 20 74 68 65 20 75  e tree for the u
1c8a0 70 73 65 72 74 20 63 6c 61 75 73 65 2e 0a 20 20  psert clause..  
1c8b0 2a 2a 20 54 68 65 20 66 69 65 6c 64 73 20 62 65  ** The fields be
1c8c0 6c 6f 77 20 61 72 65 20 75 73 65 64 20 74 6f 20  low are used to 
1c8d0 74 72 61 6e 73 66 65 72 20 69 6e 66 6f 72 6d 61  transfer informa
1c8e0 74 69 6f 6e 20 66 72 6f 6d 20 74 68 65 20 49 4e  tion from the IN
1c8f0 53 45 52 54 0a 20 20 2a 2a 20 70 72 6f 63 65 73  SERT.  ** proces
1c900 73 69 6e 67 20 64 6f 77 6e 20 69 6e 74 6f 20 74  sing down into t
1c910 68 65 20 55 50 44 41 54 45 20 70 72 6f 63 65 73  he UPDATE proces
1c920 73 69 6e 67 20 77 68 69 6c 65 20 67 65 6e 65 72  sing while gener
1c930 61 74 69 6e 67 20 63 6f 64 65 2e 0a 20 20 2a 2a  ating code..  **
1c940 20 55 70 73 65 72 74 20 6f 77 6e 73 20 74 68 65   Upsert owns the
1c950 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 65   memory allocate
1c960 64 20 61 62 6f 76 65 2c 20 62 75 74 20 6e 6f 74  d above, but not
1c970 20 74 68 65 20 6d 65 6d 6f 72 79 20 62 65 6c 6f   the memory belo
1c980 77 2e 20 2a 2f 0a 20 20 49 6e 64 65 78 20 2a 70  w. */.  Index *p
1c990 55 70 73 65 72 74 49 64 78 3b 20 20 20 20 20 20  UpsertIdx;      
1c9a0 20 20 2f 2a 20 43 6f 6e 73 74 72 61 69 6e 74 20    /* Constraint 
1c9b0 74 68 61 74 20 70 55 70 73 65 72 74 54 61 72 67  that pUpsertTarg
1c9c0 65 74 20 69 64 65 6e 74 69 66 69 65 73 20 2a 2f  et identifies */
1c9d0 0a 20 20 53 72 63 4c 69 73 74 20 2a 70 55 70 73  .  SrcList *pUps
1c9e0 65 72 74 53 72 63 3b 20 20 20 20 20 20 2f 2a 20  ertSrc;      /* 
1c9f0 54 61 62 6c 65 20 74 6f 20 62 65 20 75 70 64 61  Table to be upda
1ca00 74 65 64 20 2a 2f 0a 20 20 69 6e 74 20 72 65 67  ted */.  int reg
1ca10 44 61 74 61 3b 20 20 20 20 20 20 20 20 20 20 20  Data;           
1ca20 20 20 20 2f 2a 20 46 69 72 73 74 20 72 65 67 69     /* First regi
1ca30 73 74 65 72 20 68 6f 6c 64 69 6e 67 20 61 72 72  ster holding arr
1ca40 61 79 20 6f 66 20 56 41 4c 55 45 53 20 2a 2f 0a  ay of VALUES */.
1ca50 20 20 69 6e 74 20 69 44 61 74 61 43 75 72 3b 20    int iDataCur; 
1ca60 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49              /* I
1ca70 6e 64 65 78 20 6f 66 20 74 68 65 20 64 61 74 61  ndex of the data
1ca80 20 63 75 72 73 6f 72 20 2a 2f 0a 20 20 69 6e 74   cursor */.  int
1ca90 20 69 49 64 78 43 75 72 3b 20 20 20 20 20 20 20   iIdxCur;       
1caa0 20 20 20 20 20 20 20 2f 2a 20 49 6e 64 65 78 20         /* Index 
1cab0 6f 66 20 74 68 65 20 66 69 72 73 74 20 69 6e 64  of the first ind
1cac0 65 78 20 63 75 72 73 6f 72 20 2a 2f 0a 7d 3b 0a  ex cursor */.};.
1cad0 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e  ./*.** An instan
1cae0 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77  ce of the follow
1caf0 69 6e 67 20 73 74 72 75 63 74 75 72 65 20 63 6f  ing structure co
1cb00 6e 74 61 69 6e 73 20 61 6c 6c 20 69 6e 66 6f 72  ntains all infor
1cb10 6d 61 74 69 6f 6e 0a 2a 2a 20 6e 65 65 64 65 64  mation.** needed
1cb20 20 74 6f 20 67 65 6e 65 72 61 74 65 20 63 6f 64   to generate cod
1cb30 65 20 66 6f 72 20 61 20 73 69 6e 67 6c 65 20 53  e for a single S
1cb40 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e  ELECT statement.
1cb50 0a 2a 2a 0a 2a 2a 20 53 65 65 20 74 68 65 20 68  .**.** See the h
1cb60 65 61 64 65 72 20 63 6f 6d 6d 65 6e 74 20 6f 6e  eader comment on
1cb70 20 74 68 65 20 63 6f 6d 70 75 74 65 4c 69 6d 69   the computeLimi
1cb80 74 52 65 67 69 73 74 65 72 73 28 29 20 72 6f 75  tRegisters() rou
1cb90 74 69 6e 65 20 66 6f 72 20 61 0a 2a 2a 20 64 65  tine for a.** de
1cba0 74 61 69 6c 65 64 20 64 65 73 63 72 69 70 74 69  tailed descripti
1cbb0 6f 6e 20 6f 66 20 74 68 65 20 6d 65 61 6e 69 6e  on of the meanin
1cbc0 67 20 6f 66 20 74 68 65 20 69 4c 69 6d 69 74 20  g of the iLimit 
1cbd0 61 6e 64 20 69 4f 66 66 73 65 74 20 66 69 65 6c  and iOffset fiel
1cbe0 64 73 2e 0a 2a 2a 0a 2a 2a 20 61 64 64 72 4f 70  ds..**.** addrOp
1cbf0 65 6e 45 70 68 6d 5b 5d 20 65 6e 74 72 69 65 73  enEphm[] entries
1cc00 20 63 6f 6e 74 61 69 6e 20 74 68 65 20 61 64 64   contain the add
1cc10 72 65 73 73 20 6f 66 20 4f 50 5f 4f 70 65 6e 45  ress of OP_OpenE
1cc20 70 68 65 6d 65 72 61 6c 20 6f 70 63 6f 64 65 73  phemeral opcodes
1cc30 2e 0a 2a 2a 20 54 68 65 73 65 20 61 64 64 72 65  ..** These addre
1cc40 73 73 65 73 20 6d 75 73 74 20 62 65 20 73 74 6f  sses must be sto
1cc50 72 65 64 20 73 6f 20 74 68 61 74 20 77 65 20 63  red so that we c
1cc60 61 6e 20 67 6f 20 62 61 63 6b 20 61 6e 64 20 66  an go back and f
1cc70 69 6c 6c 20 69 6e 0a 2a 2a 20 74 68 65 20 50 34  ill in.** the P4
1cc80 5f 4b 45 59 49 4e 46 4f 20 61 6e 64 20 50 32 20  _KEYINFO and P2 
1cc90 70 61 72 61 6d 65 74 65 72 73 20 6c 61 74 65 72  parameters later
1cca0 2e 20 20 4e 65 69 74 68 65 72 20 74 68 65 20 4b  .  Neither the K
1ccb0 65 79 49 6e 66 6f 20 6e 6f 72 0a 2a 2a 20 74 68  eyInfo nor.** th
1ccc0 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75  e number of colu
1ccd0 6d 6e 73 20 69 6e 20 50 32 20 63 61 6e 20 62 65  mns in P2 can be
1cce0 20 63 6f 6d 70 75 74 65 64 20 61 74 20 74 68 65   computed at the
1ccf0 20 73 61 6d 65 20 74 69 6d 65 0a 2a 2a 20 61 73   same time.** as
1cd00 20 74 68 65 20 4f 50 5f 4f 70 65 6e 45 70 68 6d   the OP_OpenEphm
1cd10 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 73 20   instruction is 
1cd20 63 6f 64 65 64 20 62 65 63 61 75 73 65 20 6e 6f  coded because no
1cd30 74 0a 2a 2a 20 65 6e 6f 75 67 68 20 69 6e 66 6f  t.** enough info
1cd40 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 74 68  rmation about th
1cd50 65 20 63 6f 6d 70 6f 75 6e 64 20 71 75 65 72 79  e compound query
1cd60 20 69 73 20 6b 6e 6f 77 6e 20 61 74 20 74 68 61   is known at tha
1cd70 74 20 70 6f 69 6e 74 2e 0a 2a 2a 20 54 68 65 20  t point..** The 
1cd80 4b 65 79 49 6e 66 6f 20 66 6f 72 20 61 64 64 72  KeyInfo for addr
1cd90 4f 70 65 6e 54 72 61 6e 5b 30 5d 20 61 6e 64 20  OpenTran[0] and 
1cda0 5b 31 5d 20 63 6f 6e 74 61 69 6e 73 20 63 6f 6c  [1] contains col
1cdb0 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 73  lating sequences
1cdc0 0a 2a 2a 20 66 6f 72 20 74 68 65 20 72 65 73 75  .** for the resu
1cdd0 6c 74 20 73 65 74 2e 20 20 54 68 65 20 4b 65 79  lt set.  The Key
1cde0 49 6e 66 6f 20 66 6f 72 20 61 64 64 72 4f 70 65  Info for addrOpe
1cdf0 6e 45 70 68 6d 5b 32 5d 20 63 6f 6e 74 61 69 6e  nEphm[2] contain
1ce00 73 20 63 6f 6c 6c 61 74 69 6e 67 0a 2a 2a 20 73  s collating.** s
1ce10 65 71 75 65 6e 63 65 73 20 66 6f 72 20 74 68 65  equences for the
1ce20 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73 65   ORDER BY clause
1ce30 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53 65 6c 65  ..*/.struct Sele
1ce40 63 74 20 7b 0a 20 20 45 78 70 72 4c 69 73 74 20  ct {.  ExprList 
1ce50 2a 70 45 4c 69 73 74 3b 20 20 20 20 20 20 2f 2a  *pEList;      /*
1ce60 20 54 68 65 20 66 69 65 6c 64 73 20 6f 66 20 74   The fields of t
1ce70 68 65 20 72 65 73 75 6c 74 20 2a 2f 0a 20 20 75  he result */.  u
1ce80 38 20 6f 70 3b 20 20 20 20 20 20 20 20 20 20 20  8 op;           
1ce90 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 3a        /* One of:
1cea0 20 54 4b 5f 55 4e 49 4f 4e 20 54 4b 5f 41 4c 4c   TK_UNION TK_ALL
1ceb0 20 54 4b 5f 49 4e 54 45 52 53 45 43 54 20 54 4b   TK_INTERSECT TK
1cec0 5f 45 58 43 45 50 54 20 2a 2f 0a 20 20 4c 6f 67  _EXCEPT */.  Log
1ced0 45 73 74 20 6e 53 65 6c 65 63 74 52 6f 77 3b 20  Est nSelectRow; 
1cee0 20 20 20 20 2f 2a 20 45 73 74 69 6d 61 74 65 64      /* Estimated
1cef0 20 6e 75 6d 62 65 72 20 6f 66 20 72 65 73 75 6c   number of resul
1cf00 74 20 72 6f 77 73 20 2a 2f 0a 20 20 75 33 32 20  t rows */.  u32 
1cf10 73 65 6c 46 6c 61 67 73 3b 20 20 20 20 20 20 20  selFlags;       
1cf20 20 20 20 2f 2a 20 56 61 72 69 6f 75 73 20 53 46     /* Various SF
1cf30 5f 2a 20 76 61 6c 75 65 73 20 2a 2f 0a 20 20 69  _* values */.  i
1cf40 6e 74 20 69 4c 69 6d 69 74 2c 20 69 4f 66 66 73  nt iLimit, iOffs
1cf50 65 74 3b 20 20 20 2f 2a 20 4d 65 6d 6f 72 79 20  et;   /* Memory 
1cf60 72 65 67 69 73 74 65 72 73 20 68 6f 6c 64 69 6e  registers holdin
1cf70 67 20 4c 49 4d 49 54 20 26 20 4f 46 46 53 45 54  g LIMIT & OFFSET
1cf80 20 63 6f 75 6e 74 65 72 73 20 2a 2f 0a 23 69 66   counters */.#if
1cf90 20 53 45 4c 45 43 54 54 52 41 43 45 5f 45 4e 41   SELECTTRACE_ENA
1cfa0 42 4c 45 44 0a 20 20 63 68 61 72 20 7a 53 65 6c  BLED.  char zSel
1cfb0 4e 61 6d 65 5b 31 32 5d 3b 20 20 20 20 20 2f 2a  Name[12];     /*
1cfc0 20 53 79 6d 62 6f 6c 69 63 20 6e 61 6d 65 20 6f   Symbolic name o
1cfd0 66 20 74 68 69 73 20 53 45 4c 45 43 54 20 75 73  f this SELECT us
1cfe0 65 20 66 6f 72 20 64 65 62 75 67 67 69 6e 67 20  e for debugging 
1cff0 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 69 6e 74 20  */.#endif.  int 
1d000 61 64 64 72 4f 70 65 6e 45 70 68 6d 5b 32 5d 3b  addrOpenEphm[2];
1d010 20 20 20 2f 2a 20 4f 50 5f 4f 70 65 6e 45 70 68     /* OP_OpenEph
1d020 65 6d 20 6f 70 63 6f 64 65 73 20 72 65 6c 61 74  em opcodes relat
1d030 65 64 20 74 6f 20 74 68 69 73 20 73 65 6c 65 63  ed to this selec
1d040 74 20 2a 2f 0a 20 20 53 72 63 4c 69 73 74 20 2a  t */.  SrcList *
1d050 70 53 72 63 3b 20 20 20 20 20 20 20 20 20 2f 2a  pSrc;         /*
1d060 20 54 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65   The FROM clause
1d070 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 57 68 65   */.  Expr *pWhe
1d080 72 65 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  re;          /* 
1d090 54 68 65 20 57 48 45 52 45 20 63 6c 61 75 73 65  The WHERE clause
1d0a0 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20 2a   */.  ExprList *
1d0b0 70 47 72 6f 75 70 42 79 3b 20 20 20 20 2f 2a 20  pGroupBy;    /* 
1d0c0 54 68 65 20 47 52 4f 55 50 20 42 59 20 63 6c 61  The GROUP BY cla
1d0d0 75 73 65 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70  use */.  Expr *p
1d0e0 48 61 76 69 6e 67 3b 20 20 20 20 20 20 20 20 20  Having;         
1d0f0 2f 2a 20 54 68 65 20 48 41 56 49 4e 47 20 63 6c  /* The HAVING cl
1d100 61 75 73 65 20 2a 2f 0a 20 20 45 78 70 72 4c 69  ause */.  ExprLi
1d110 73 74 20 2a 70 4f 72 64 65 72 42 79 3b 20 20 20  st *pOrderBy;   
1d120 20 2f 2a 20 54 68 65 20 4f 52 44 45 52 20 42 59   /* The ORDER BY
1d130 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 53 65 6c   clause */.  Sel
1d140 65 63 74 20 2a 70 50 72 69 6f 72 3b 20 20 20 20  ect *pPrior;    
1d150 20 20 20 20 2f 2a 20 50 72 69 6f 72 20 73 65 6c      /* Prior sel
1d160 65 63 74 20 69 6e 20 61 20 63 6f 6d 70 6f 75 6e  ect in a compoun
1d170 64 20 73 65 6c 65 63 74 20 73 74 61 74 65 6d 65  d select stateme
1d180 6e 74 20 2a 2f 0a 20 20 53 65 6c 65 63 74 20 2a  nt */.  Select *
1d190 70 4e 65 78 74 3b 20 20 20 20 20 20 20 20 20 2f  pNext;         /
1d1a0 2a 20 4e 65 78 74 20 73 65 6c 65 63 74 20 74 6f  * Next select to
1d1b0 20 74 68 65 20 6c 65 66 74 20 69 6e 20 61 20 63   the left in a c
1d1c0 6f 6d 70 6f 75 6e 64 20 2a 2f 0a 20 20 45 78 70  ompound */.  Exp
1d1d0 72 20 2a 70 4c 69 6d 69 74 3b 20 20 20 20 20 20  r *pLimit;      
1d1e0 20 20 20 20 2f 2a 20 4c 49 4d 49 54 20 65 78 70      /* LIMIT exp
1d1f0 72 65 73 73 69 6f 6e 2e 20 4e 55 4c 4c 20 6d 65  ression. NULL me
1d200 61 6e 73 20 6e 6f 74 20 75 73 65 64 2e 20 2a 2f  ans not used. */
1d210 0a 20 20 57 69 74 68 20 2a 70 57 69 74 68 3b 20  .  With *pWith; 
1d220 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57 49 54            /* WIT
1d230 48 20 63 6c 61 75 73 65 20 61 74 74 61 63 68 65  H clause attache
1d240 64 20 74 6f 20 74 68 69 73 20 73 65 6c 65 63 74  d to this select
1d250 2e 20 4f 72 20 4e 55 4c 4c 2e 20 2a 2f 0a 7d 3b  . Or NULL. */.};
1d260 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20  ../*.** Allowed 
1d270 76 61 6c 75 65 73 20 66 6f 72 20 53 65 6c 65 63  values for Selec
1d280 74 2e 73 65 6c 46 6c 61 67 73 2e 20 20 54 68 65  t.selFlags.  The
1d290 20 22 53 46 22 20 70 72 65 66 69 78 20 73 74 61   "SF" prefix sta
1d2a0 6e 64 73 20 66 6f 72 0a 2a 2a 20 22 53 65 6c 65  nds for.** "Sele
1d2b0 63 74 20 46 6c 61 67 22 2e 0a 2a 2a 0a 2a 2a 20  ct Flag"..**.** 
1d2c0 56 61 6c 75 65 20 63 6f 6e 73 74 72 61 69 6e 74  Value constraint
1d2d0 73 20 28 61 6c 6c 20 63 68 65 63 6b 65 64 20 76  s (all checked v
1d2e0 69 61 20 61 73 73 65 72 74 28 29 29 0a 2a 2a 20  ia assert()).** 
1d2f0 20 20 20 20 53 46 5f 48 61 73 41 67 67 20 20 20      SF_HasAgg   
1d300 20 20 3d 3d 20 4e 43 5f 48 61 73 41 67 67 0a 2a    == NC_HasAgg.*
1d310 2a 20 20 20 20 20 53 46 5f 4d 69 6e 4d 61 78 41  *     SF_MinMaxA
1d320 67 67 20 20 3d 3d 20 4e 43 5f 4d 69 6e 4d 61 78  gg  == NC_MinMax
1d330 41 67 67 20 20 20 20 20 3d 3d 20 53 51 4c 49 54  Agg     == SQLIT
1d340 45 5f 46 55 4e 43 5f 4d 49 4e 4d 41 58 0a 2a 2a  E_FUNC_MINMAX.**
1d350 20 20 20 20 20 53 46 5f 46 69 78 65 64 4c 69 6d       SF_FixedLim
1d360 69 74 20 3d 3d 20 57 48 45 52 45 5f 55 53 45 5f  it == WHERE_USE_
1d370 4c 49 4d 49 54 0a 2a 2f 0a 23 64 65 66 69 6e 65  LIMIT.*/.#define
1d380 20 53 46 5f 44 69 73 74 69 6e 63 74 20 20 20 20   SF_Distinct    
1d390 20 20 20 30 78 30 30 30 30 31 20 20 2f 2a 20 4f     0x00001  /* O
1d3a0 75 74 70 75 74 20 73 68 6f 75 6c 64 20 62 65 20  utput should be 
1d3b0 44 49 53 54 49 4e 43 54 20 2a 2f 0a 23 64 65 66  DISTINCT */.#def
1d3c0 69 6e 65 20 53 46 5f 41 6c 6c 20 20 20 20 20 20  ine SF_All      
1d3d0 20 20 20 20 20 20 30 78 30 30 30 30 32 20 20 2f        0x00002  /
1d3e0 2a 20 49 6e 63 6c 75 64 65 73 20 74 68 65 20 41  * Includes the A
1d3f0 4c 4c 20 6b 65 79 77 6f 72 64 20 2a 2f 0a 23 64  LL keyword */.#d
1d400 65 66 69 6e 65 20 53 46 5f 52 65 73 6f 6c 76 65  efine SF_Resolve
1d410 64 20 20 20 20 20 20 20 30 78 30 30 30 30 34 20  d       0x00004 
1d420 20 2f 2a 20 49 64 65 6e 74 69 66 69 65 72 73 20   /* Identifiers 
1d430 68 61 76 65 20 62 65 65 6e 20 72 65 73 6f 6c 76  have been resolv
1d440 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46  ed */.#define SF
1d450 5f 41 67 67 72 65 67 61 74 65 20 20 20 20 20 20  _Aggregate      
1d460 30 78 30 30 30 30 38 20 20 2f 2a 20 43 6f 6e 74  0x00008  /* Cont
1d470 61 69 6e 73 20 61 67 67 20 66 75 6e 63 74 69 6f  ains agg functio
1d480 6e 73 20 6f 72 20 61 20 47 52 4f 55 50 20 42 59  ns or a GROUP BY
1d490 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 48   */.#define SF_H
1d4a0 61 73 41 67 67 20 20 20 20 20 20 20 20 20 30 78  asAgg         0x
1d4b0 30 30 30 31 30 20 20 2f 2a 20 43 6f 6e 74 61 69  00010  /* Contai
1d4c0 6e 73 20 61 67 67 72 65 67 61 74 65 20 66 75 6e  ns aggregate fun
1d4d0 63 74 69 6f 6e 73 20 2a 2f 0a 23 64 65 66 69 6e  ctions */.#defin
1d4e0 65 20 53 46 5f 55 73 65 73 45 70 68 65 6d 65 72  e SF_UsesEphemer
1d4f0 61 6c 20 20 30 78 30 30 30 32 30 20 20 2f 2a 20  al  0x00020  /* 
1d500 55 73 65 73 20 74 68 65 20 4f 70 65 6e 45 70 68  Uses the OpenEph
1d510 65 6d 65 72 61 6c 20 6f 70 63 6f 64 65 20 2a 2f  emeral opcode */
1d520 0a 23 64 65 66 69 6e 65 20 53 46 5f 45 78 70 61  .#define SF_Expa
1d530 6e 64 65 64 20 20 20 20 20 20 20 30 78 30 30 30  nded       0x000
1d540 34 30 20 20 2f 2a 20 73 71 6c 69 74 65 33 53 65  40  /* sqlite3Se
1d550 6c 65 63 74 45 78 70 61 6e 64 28 29 20 63 61 6c  lectExpand() cal
1d560 6c 65 64 20 6f 6e 20 74 68 69 73 20 2a 2f 0a 23  led on this */.#
1d570 64 65 66 69 6e 65 20 53 46 5f 48 61 73 54 79 70  define SF_HasTyp
1d580 65 49 6e 66 6f 20 20 20 20 30 78 30 30 30 38 30  eInfo    0x00080
1d590 20 20 2f 2a 20 46 52 4f 4d 20 73 75 62 71 75 65    /* FROM subque
1d5a0 72 69 65 73 20 68 61 76 65 20 54 61 62 6c 65 20  ries have Table 
1d5b0 6d 65 74 61 64 61 74 61 20 2a 2f 0a 23 64 65 66  metadata */.#def
1d5c0 69 6e 65 20 53 46 5f 43 6f 6d 70 6f 75 6e 64 20  ine SF_Compound 
1d5d0 20 20 20 20 20 20 30 78 30 30 31 30 30 20 20 2f        0x00100  /
1d5e0 2a 20 50 61 72 74 20 6f 66 20 61 20 63 6f 6d 70  * Part of a comp
1d5f0 6f 75 6e 64 20 71 75 65 72 79 20 2a 2f 0a 23 64  ound query */.#d
1d600 65 66 69 6e 65 20 53 46 5f 56 61 6c 75 65 73 20  efine SF_Values 
1d610 20 20 20 20 20 20 20 20 30 78 30 30 32 30 30 20          0x00200 
1d620 20 2f 2a 20 53 79 6e 74 68 65 73 69 7a 65 64 20   /* Synthesized 
1d630 66 72 6f 6d 20 56 41 4c 55 45 53 20 63 6c 61 75  from VALUES clau
1d640 73 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46  se */.#define SF
1d650 5f 4d 75 6c 74 69 56 61 6c 75 65 20 20 20 20 20  _MultiValue     
1d660 30 78 30 30 34 30 30 20 20 2f 2a 20 53 69 6e 67  0x00400  /* Sing
1d670 6c 65 20 56 41 4c 55 45 53 20 74 65 72 6d 20 77  le VALUES term w
1d680 69 74 68 20 6d 75 6c 74 69 70 6c 65 20 72 6f 77  ith multiple row
1d690 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f  s */.#define SF_
1d6a0 4e 65 73 74 65 64 46 72 6f 6d 20 20 20 20 20 30  NestedFrom     0
1d6b0 78 30 30 38 30 30 20 20 2f 2a 20 50 61 72 74 20  x00800  /* Part 
1d6c0 6f 66 20 61 20 70 61 72 65 6e 74 68 65 73 69 7a  of a parenthesiz
1d6d0 65 64 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 2a  ed FROM clause *
1d6e0 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 4d 69 6e  /.#define SF_Min
1d6f0 4d 61 78 41 67 67 20 20 20 20 20 20 30 78 30 31  MaxAgg      0x01
1d700 30 30 30 20 20 2f 2a 20 41 67 67 72 65 67 61 74  000  /* Aggregat
1d710 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20 6d 69 6e  e containing min
1d720 28 29 20 6f 72 20 6d 61 78 28 29 20 2a 2f 0a 23  () or max() */.#
1d730 64 65 66 69 6e 65 20 53 46 5f 52 65 63 75 72 73  define SF_Recurs
1d740 69 76 65 20 20 20 20 20 20 30 78 30 32 30 30 30  ive      0x02000
1d750 20 20 2f 2a 20 54 68 65 20 72 65 63 75 72 73 69    /* The recursi
1d760 76 65 20 70 61 72 74 20 6f 66 20 61 20 72 65 63  ve part of a rec
1d770 75 72 73 69 76 65 20 43 54 45 20 2a 2f 0a 23 64  ursive CTE */.#d
1d780 65 66 69 6e 65 20 53 46 5f 46 69 78 65 64 4c 69  efine SF_FixedLi
1d790 6d 69 74 20 20 20 20 20 30 78 30 34 30 30 30 20  mit     0x04000 
1d7a0 20 2f 2a 20 6e 53 65 6c 65 63 74 52 6f 77 20 73   /* nSelectRow s
1d7b0 65 74 20 62 79 20 61 20 63 6f 6e 73 74 61 6e 74  et by a constant
1d7c0 20 4c 49 4d 49 54 20 2a 2f 0a 23 64 65 66 69 6e   LIMIT */.#defin
1d7d0 65 20 53 46 5f 4d 61 79 62 65 43 6f 6e 76 65 72  e SF_MaybeConver
1d7e0 74 20 20 20 30 78 30 38 30 30 30 20 20 2f 2a 20  t   0x08000  /* 
1d7f0 4e 65 65 64 20 63 6f 6e 76 65 72 74 43 6f 6d 70  Need convertComp
1d800 6f 75 6e 64 53 65 6c 65 63 74 54 6f 53 75 62 71  oundSelectToSubq
1d810 75 65 72 79 28 29 20 2a 2f 0a 23 64 65 66 69 6e  uery() */.#defin
1d820 65 20 53 46 5f 43 6f 6e 76 65 72 74 65 64 20 20  e SF_Converted  
1d830 20 20 20 20 30 78 31 30 30 30 30 20 20 2f 2a 20      0x10000  /* 
1d840 42 79 20 63 6f 6e 76 65 72 74 43 6f 6d 70 6f 75  By convertCompou
1d850 6e 64 53 65 6c 65 63 74 54 6f 53 75 62 71 75 65  ndSelectToSubque
1d860 72 79 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ry() */.#define 
1d870 53 46 5f 49 6e 63 6c 75 64 65 48 69 64 64 65 6e  SF_IncludeHidden
1d880 20 20 30 78 32 30 30 30 30 20 20 2f 2a 20 49 6e    0x20000  /* In
1d890 63 6c 75 64 65 20 68 69 64 64 65 6e 20 63 6f 6c  clude hidden col
1d8a0 75 6d 6e 73 20 69 6e 20 6f 75 74 70 75 74 20 2a  umns in output *
1d8b0 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 43 6f 6d  /.#define SF_Com
1d8c0 70 6c 65 78 52 65 73 75 6c 74 20 20 30 78 34 30  plexResult  0x40
1d8d0 30 30 30 20 20 2f 2a 20 52 65 73 75 6c 74 20 63  000  /* Result c
1d8e0 6f 6e 74 61 69 6e 73 20 73 75 62 71 75 65 72 79  ontains subquery
1d8f0 20 6f 72 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a   or function */.
1d900 0a 2f 2a 0a 2a 2a 20 54 68 65 20 72 65 73 75 6c  ./*.** The resul
1d910 74 73 20 6f 66 20 61 20 53 45 4c 45 43 54 20 63  ts of a SELECT c
1d920 61 6e 20 62 65 20 64 69 73 74 72 69 62 75 74 65  an be distribute
1d930 64 20 69 6e 20 73 65 76 65 72 61 6c 20 77 61 79  d in several way
1d940 73 2c 20 61 73 20 64 65 66 69 6e 65 64 0a 2a 2a  s, as defined.**
1d950 20 62 79 20 6f 6e 65 20 6f 66 20 74 68 65 20 66   by one of the f
1d960 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 73 2e  ollowing macros.
1d970 20 20 54 68 65 20 22 53 52 54 22 20 70 72 65 66    The "SRT" pref
1d980 69 78 20 6d 65 61 6e 73 20 22 53 45 4c 45 43 54  ix means "SELECT
1d990 20 52 65 73 75 6c 74 0a 2a 2a 20 54 79 70 65 22   Result.** Type"
1d9a0 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f  ..**.**     SRT_
1d9b0 55 6e 69 6f 6e 20 20 20 20 20 20 20 53 74 6f 72  Union       Stor
1d9c0 65 20 72 65 73 75 6c 74 73 20 61 73 20 61 20 6b  e results as a k
1d9d0 65 79 20 69 6e 20 61 20 74 65 6d 70 6f 72 61 72  ey in a temporar
1d9e0 79 20 69 6e 64 65 78 0a 2a 2a 20 20 20 20 20 20  y index.**      
1d9f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
1da00 64 65 6e 74 69 66 69 65 64 20 62 79 20 70 44 65  dentified by pDe
1da10 73 74 2d 3e 69 53 44 50 61 72 6d 2e 0a 2a 2a 0a  st->iSDParm..**.
1da20 2a 2a 20 20 20 20 20 53 52 54 5f 45 78 63 65 70  **     SRT_Excep
1da30 74 20 20 20 20 20 20 52 65 6d 6f 76 65 20 72 65  t      Remove re
1da40 73 75 6c 74 73 20 66 72 6f 6d 20 74 68 65 20 74  sults from the t
1da50 65 6d 70 6f 72 61 72 79 20 69 6e 64 65 78 20 70  emporary index p
1da60 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 2e 0a 2a  Dest->iSDParm..*
1da70 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 45 78 69  *.**     SRT_Exi
1da80 73 74 73 20 20 20 20 20 20 53 74 6f 72 65 20 61  sts      Store a
1da90 20 31 20 69 6e 20 6d 65 6d 6f 72 79 20 63 65 6c   1 in memory cel
1daa0 6c 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d  l pDest->iSDParm
1dab0 20 69 66 20 74 68 65 20 72 65 73 75 6c 74 0a 2a   if the result.*
1dac0 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
1dad0 20 20 20 20 20 20 73 65 74 20 69 73 20 6e 6f 74        set is not
1dae0 20 65 6d 70 74 79 2e 0a 2a 2a 0a 2a 2a 20 20 20   empty..**.**   
1daf0 20 20 53 52 54 5f 44 69 73 63 61 72 64 20 20 20    SRT_Discard   
1db00 20 20 54 68 72 6f 77 20 74 68 65 20 72 65 73 75    Throw the resu
1db10 6c 74 73 20 61 77 61 79 2e 20 20 54 68 69 73 20  lts away.  This 
1db20 69 73 20 75 73 65 64 20 62 79 20 53 45 4c 45 43  is used by SELEC
1db30 54 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  T.**            
1db40 20 20 20 20 20 20 20 20 20 73 74 61 74 65 6d 65           stateme
1db50 6e 74 73 20 77 69 74 68 69 6e 20 74 72 69 67 67  nts within trigg
1db60 65 72 73 20 77 68 6f 73 65 20 6f 6e 6c 79 20 70  ers whose only p
1db70 75 72 70 6f 73 65 20 69 73 0a 2a 2a 20 20 20 20  urpose is.**    
1db80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1db90 20 74 68 65 20 73 69 64 65 2d 65 66 66 65 63 74   the side-effect
1dba0 73 20 6f 66 20 66 75 6e 63 74 69 6f 6e 73 2e 0a  s of functions..
1dbb0 2a 2a 0a 2a 2a 20 41 6c 6c 20 6f 66 20 74 68 65  **.** All of the
1dbc0 20 61 62 6f 76 65 20 61 72 65 20 66 72 65 65 20   above are free 
1dbd0 74 6f 20 69 67 6e 6f 72 65 20 74 68 65 69 72 20  to ignore their 
1dbe0 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73 65 2e  ORDER BY clause.
1dbf0 20 54 68 6f 73 65 20 74 68 61 74 0a 2a 2a 20 66   Those that.** f
1dc00 6f 6c 6c 6f 77 20 6d 75 73 74 20 68 6f 6e 6f 72  ollow must honor
1dc10 20 74 68 65 20 4f 52 44 45 52 20 42 59 20 63 6c   the ORDER BY cl
1dc20 61 75 73 65 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20  ause..**.**     
1dc30 53 52 54 5f 4f 75 74 70 75 74 20 20 20 20 20 20  SRT_Output      
1dc40 47 65 6e 65 72 61 74 65 20 61 20 72 6f 77 20 6f  Generate a row o
1dc50 66 20 6f 75 74 70 75 74 20 28 75 73 69 6e 67 20  f output (using 
1dc60 74 68 65 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77  the OP_ResultRow
1dc70 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
1dc80 20 20 20 20 20 20 20 20 6f 70 63 6f 64 65 29 20          opcode) 
1dc90 66 6f 72 20 65 61 63 68 20 72 6f 77 20 69 6e 20  for each row in 
1dca0 74 68 65 20 72 65 73 75 6c 74 20 73 65 74 2e 0a  the result set..
1dcb0 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 4d 65  **.**     SRT_Me
1dcc0 6d 20 20 20 20 20 20 20 20 20 4f 6e 6c 79 20 76  m         Only v
1dcd0 61 6c 69 64 20 69 66 20 74 68 65 20 72 65 73 75  alid if the resu
1dce0 6c 74 20 69 73 20 61 20 73 69 6e 67 6c 65 20 63  lt is a single c
1dcf0 6f 6c 75 6d 6e 2e 0a 2a 2a 20 20 20 20 20 20 20  olumn..**       
1dd00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 74                St
1dd10 6f 72 65 20 74 68 65 20 66 69 72 73 74 20 63 6f  ore the first co
1dd20 6c 75 6d 6e 20 6f 66 20 74 68 65 20 66 69 72 73  lumn of the firs
1dd30 74 20 72 65 73 75 6c 74 20 72 6f 77 0a 2a 2a 20  t result row.** 
1dd40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dd50 20 20 20 20 69 6e 20 72 65 67 69 73 74 65 72 20      in register 
1dd60 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 20 74  pDest->iSDParm t
1dd70 68 65 6e 20 61 62 61 6e 64 6f 6e 20 74 68 65 20  hen abandon the 
1dd80 72 65 73 74 0a 2a 2a 20 20 20 20 20 20 20 20 20  rest.**         
1dd90 20 20 20 20 20 20 20 20 20 20 20 20 6f 66 20 74              of t
1dda0 68 65 20 71 75 65 72 79 2e 20 20 54 68 69 73 20  he query.  This 
1ddb0 64 65 73 74 69 6e 61 74 69 6f 6e 20 69 6d 70 6c  destination impl
1ddc0 69 65 73 20 22 4c 49 4d 49 54 20 31 22 2e 0a 2a  ies "LIMIT 1"..*
1ddd0 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 53 65 74  *.**     SRT_Set
1dde0 20 20 20 20 20 20 20 20 20 54 68 65 20 72 65 73           The res
1ddf0 75 6c 74 20 6d 75 73 74 20 62 65 20 61 20 73 69  ult must be a si
1de00 6e 67 6c 65 20 63 6f 6c 75 6d 6e 2e 20 20 53 74  ngle column.  St
1de10 6f 72 65 20 65 61 63 68 0a 2a 2a 20 20 20 20 20  ore each.**     
1de20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1de30 72 6f 77 20 6f 66 20 72 65 73 75 6c 74 20 61 73  row of result as
1de40 20 74 68 65 20 6b 65 79 20 69 6e 20 74 61 62 6c   the key in tabl
1de50 65 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d  e pDest->iSDParm
1de60 2e 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  ..**            
1de70 20 20 20 20 20 20 20 20 20 41 70 70 6c 79 20 74           Apply t
1de80 68 65 20 61 66 66 69 6e 69 74 79 20 70 44 65 73  he affinity pDes
1de90 74 2d 3e 61 66 66 53 64 73 74 20 62 65 66 6f 72  t->affSdst befor
1dea0 65 20 73 74 6f 72 69 6e 67 0a 2a 2a 20 20 20 20  e storing.**    
1deb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dec0 20 72 65 73 75 6c 74 73 2e 20 20 55 73 65 64 20   results.  Used 
1ded0 74 6f 20 69 6d 70 6c 65 6d 65 6e 74 20 22 49 4e  to implement "IN
1dee0 20 28 53 45 4c 45 43 54 20 2e 2e 2e 29 22 2e 0a   (SELECT ...)"..
1def0 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 45 70  **.**     SRT_Ep
1df00 68 65 6d 54 61 62 20 20 20 20 43 72 65 61 74 65  hemTab    Create
1df10 20 61 6e 20 74 65 6d 70 6f 72 61 72 79 20 74 61   an temporary ta
1df20 62 6c 65 20 70 44 65 73 74 2d 3e 69 53 44 50 61  ble pDest->iSDPa
1df30 72 6d 20 61 6e 64 20 73 74 6f 72 65 0a 2a 2a 20  rm and store.** 
1df40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1df50 20 20 20 20 74 68 65 20 72 65 73 75 6c 74 20 74      the result t
1df60 68 65 72 65 2e 20 54 68 65 20 63 75 72 73 6f 72  here. The cursor
1df70 20 69 73 20 6c 65 66 74 20 6f 70 65 6e 20 61 66   is left open af
1df80 74 65 72 0a 2a 2a 20 20 20 20 20 20 20 20 20 20  ter.**          
1df90 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
1dfa0 6e 69 6e 67 2e 20 20 54 68 69 73 20 69 73 20 6c  ning.  This is l
1dfb0 69 6b 65 20 53 52 54 5f 54 61 62 6c 65 20 65 78  ike SRT_Table ex
1dfc0 63 65 70 74 20 74 68 61 74 0a 2a 2a 20 20 20 20  cept that.**    
1dfd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dfe0 20 74 68 69 73 20 64 65 73 74 69 6e 61 74 69 6f   this destinatio
1dff0 6e 20 75 73 65 73 20 4f 50 5f 4f 70 65 6e 45 70  n uses OP_OpenEp
1e000 68 65 6d 65 72 61 6c 20 74 6f 20 63 72 65 61 74  hemeral to creat
1e010 65 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  e.**            
1e020 20 20 20 20 20 20 20 20 20 74 68 65 20 74 61 62           the tab
1e030 6c 65 20 66 69 72 73 74 2e 0a 2a 2a 0a 2a 2a 20  le first..**.** 
1e040 20 20 20 20 53 52 54 5f 43 6f 72 6f 75 74 69 6e      SRT_Coroutin
1e050 65 20 20 20 47 65 6e 65 72 61 74 65 20 61 20 63  e   Generate a c
1e060 6f 2d 72 6f 75 74 69 6e 65 20 74 68 61 74 20 72  o-routine that r
1e070 65 74 75 72 6e 73 20 61 20 6e 65 77 20 72 6f 77  eturns a new row
1e080 20 6f 66 0a 2a 2a 20 20 20 20 20 20 20 20 20 20   of.**          
1e090 20 20 20 20 20 20 20 20 20 20 20 72 65 73 75 6c             resul
1e0a0 74 73 20 65 61 63 68 20 74 69 6d 65 20 69 74 20  ts each time it 
1e0b0 69 73 20 69 6e 76 6f 6b 65 64 2e 20 20 54 68 65  is invoked.  The
1e0c0 20 65 6e 74 72 79 20 70 6f 69 6e 74 0a 2a 2a 20   entry point.** 
1e0d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e0e0 20 20 20 20 6f 66 20 74 68 65 20 63 6f 2d 72 6f      of the co-ro
1e0f0 75 74 69 6e 65 20 69 73 20 73 74 6f 72 65 64 20  utine is stored 
1e100 69 6e 20 72 65 67 69 73 74 65 72 20 70 44 65 73  in register pDes
1e110 74 2d 3e 69 53 44 50 61 72 6d 0a 2a 2a 20 20 20  t->iSDParm.**   
1e120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e130 20 20 61 6e 64 20 74 68 65 20 72 65 73 75 6c 74    and the result
1e140 20 72 6f 77 20 69 73 20 73 74 6f 72 65 64 20 69   row is stored i
1e150 6e 20 70 44 65 73 74 2d 3e 6e 44 65 73 74 20 72  n pDest->nDest r
1e160 65 67 69 73 74 65 72 73 0a 2a 2a 20 20 20 20 20  egisters.**     
1e170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e180 73 74 61 72 74 69 6e 67 20 77 69 74 68 20 70 44  starting with pD
1e190 65 73 74 2d 3e 69 53 64 73 74 2e 0a 2a 2a 0a 2a  est->iSdst..**.*
1e1a0 2a 20 20 20 20 20 53 52 54 5f 54 61 62 6c 65 20  *     SRT_Table 
1e1b0 20 20 20 20 20 20 53 74 6f 72 65 20 72 65 73 75        Store resu
1e1c0 6c 74 73 20 69 6e 20 74 65 6d 70 6f 72 61 72 79  lts in temporary
1e1d0 20 74 61 62 6c 65 20 70 44 65 73 74 2d 3e 69 53   table pDest->iS
1e1e0 44 50 61 72 6d 2e 0a 2a 2a 20 20 20 20 20 53 52  DParm..**     SR
1e1f0 54 5f 46 69 66 6f 20 20 20 20 20 20 20 20 54 68  T_Fifo        Th
1e200 69 73 20 69 73 20 6c 69 6b 65 20 53 52 54 5f 45  is is like SRT_E
1e210 70 68 65 6d 54 61 62 20 65 78 63 65 70 74 20 74  phemTab except t
1e220 68 61 74 20 74 68 65 20 74 61 62 6c 65 0a 2a 2a  hat the table.**
1e230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e240 20 20 20 20 20 69 73 20 61 73 73 75 6d 65 64 20       is assumed 
1e250 74 6f 20 61 6c 72 65 61 64 79 20 62 65 20 6f 70  to already be op
1e260 65 6e 2e 20 20 53 52 54 5f 46 69 66 6f 20 68 61  en.  SRT_Fifo ha
1e270 73 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  s.**            
1e280 20 20 20 20 20 20 20 20 20 74 68 65 20 61 64 64           the add
1e290 69 74 69 6f 6e 61 6c 20 70 72 6f 70 65 72 74 79  itional property
1e2a0 20 6f 66 20 62 65 69 6e 67 20 61 62 6c 65 20 74   of being able t
1e2b0 6f 20 69 67 6e 6f 72 65 0a 2a 2a 20 20 20 20 20  o ignore.**     
1e2c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e2d0 74 68 65 20 4f 52 44 45 52 20 42 59 20 63 6c 61  the ORDER BY cla
1e2e0 75 73 65 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53  use..**.**     S
1e2f0 52 54 5f 44 69 73 74 46 69 66 6f 20 20 20 20 53  RT_DistFifo    S
1e300 74 6f 72 65 20 72 65 73 75 6c 74 73 20 69 6e 20  tore results in 
1e310 61 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c  a temporary tabl
1e320 65 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d  e pDest->iSDParm
1e330 2e 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  ..**            
1e340 20 20 20 20 20 20 20 20 20 42 75 74 20 61 6c 73           But als
1e350 6f 20 75 73 65 20 74 65 6d 70 6f 72 61 72 79 20  o use temporary 
1e360 74 61 62 6c 65 20 70 44 65 73 74 2d 3e 69 53 44  table pDest->iSD
1e370 50 61 72 6d 2b 31 20 61 73 0a 2a 2a 20 20 20 20  Parm+1 as.**    
1e380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e390 20 61 20 72 65 63 6f 72 64 20 6f 66 20 61 6c 6c   a record of all
1e3a0 20 70 72 69 6f 72 20 72 65 73 75 6c 74 73 20 61   prior results a
1e3b0 6e 64 20 69 67 6e 6f 72 65 20 61 6e 79 20 64 75  nd ignore any du
1e3c0 70 6c 69 63 61 74 65 0a 2a 2a 20 20 20 20 20 20  plicate.**      
1e3d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
1e3e0 6f 77 73 2e 20 20 4e 61 6d 65 20 6d 65 61 6e 73  ows.  Name means
1e3f0 3a 20 20 22 44 69 73 74 69 6e 63 74 20 46 69 66  :  "Distinct Fif
1e400 6f 22 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52  o"..**.**     SR
1e410 54 5f 51 75 65 75 65 20 20 20 20 20 20 20 53 74  T_Queue       St
1e420 6f 72 65 20 72 65 73 75 6c 74 73 20 69 6e 20 70  ore results in p
1e430 72 69 6f 72 69 74 79 20 71 75 65 75 65 20 70 44  riority queue pD
1e440 65 73 74 2d 3e 69 53 44 50 61 72 6d 20 28 72 65  est->iSDParm (re
1e450 61 6c 6c 79 0a 2a 2a 20 20 20 20 20 20 20 20 20  ally.**         
1e460 20 20 20 20 20 20 20 20 20 20 20 20 61 6e 20 69              an i
1e470 6e 64 65 78 29 2e 20 20 41 70 70 65 6e 64 20 61  ndex).  Append a
1e480 20 73 65 71 75 65 6e 63 65 20 6e 75 6d 62 65 72   sequence number
1e490 20 73 6f 20 74 68 61 74 20 61 6c 6c 20 65 6e 74   so that all ent
1e4a0 72 69 65 73 0a 2a 2a 20 20 20 20 20 20 20 20 20  ries.**         
1e4b0 20 20 20 20 20 20 20 20 20 20 20 20 61 72 65 20              are 
1e4c0 64 69 73 74 69 6e 63 74 2e 0a 2a 2a 0a 2a 2a 20  distinct..**.** 
1e4d0 20 20 20 20 53 52 54 5f 44 69 73 74 51 75 65 75      SRT_DistQueu
1e4e0 65 20 20 20 53 74 6f 72 65 20 72 65 73 75 6c 74  e   Store result
1e4f0 73 20 69 6e 20 70 72 69 6f 72 69 74 79 20 71 75  s in priority qu
1e500 65 75 65 20 70 44 65 73 74 2d 3e 69 53 44 50 61  eue pDest->iSDPa
1e510 72 6d 20 6f 6e 6c 79 20 69 66 0a 2a 2a 20 20 20  rm only if.**   
1e520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e530 20 20 74 68 65 20 73 61 6d 65 20 72 65 63 6f 72    the same recor
1e540 64 20 68 61 73 20 6e 65 76 65 72 20 62 65 65 6e  d has never been
1e550 20 73 74 6f 72 65 64 20 62 65 66 6f 72 65 2e 20   stored before. 
1e560 20 54 68 65 0a 2a 2a 20 20 20 20 20 20 20 20 20   The.**         
1e570 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 64 65              inde
1e580 78 20 61 74 20 70 44 65 73 74 2d 3e 69 53 44 50  x at pDest->iSDP
1e590 61 72 6d 2b 31 20 68 6f 6c 64 20 61 6c 6c 20 70  arm+1 hold all p
1e5a0 72 69 6f 72 20 73 74 6f 72 65 73 2e 0a 2a 2f 0a  rior stores..*/.
1e5b0 23 64 65 66 69 6e 65 20 53 52 54 5f 55 6e 69 6f  #define SRT_Unio
1e5c0 6e 20 20 20 20 20 20 20 20 31 20 20 2f 2a 20 53  n        1  /* S
1e5d0 74 6f 72 65 20 72 65 73 75 6c 74 20 61 73 20 6b  tore result as k
1e5e0 65 79 73 20 69 6e 20 61 6e 20 69 6e 64 65 78 20  eys in an index 
1e5f0 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 45  */.#define SRT_E
1e600 78 63 65 70 74 20 20 20 20 20 20 20 32 20 20 2f  xcept       2  /
1e610 2a 20 52 65 6d 6f 76 65 20 72 65 73 75 6c 74 20  * Remove result 
1e620 66 72 6f 6d 20 61 20 55 4e 49 4f 4e 20 69 6e 64  from a UNION ind
1e630 65 78 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52  ex */.#define SR
1e640 54 5f 45 78 69 73 74 73 20 20 20 20 20 20 20 33  T_Exists       3
1e650 20 20 2f 2a 20 53 74 6f 72 65 20 31 20 69 66 20    /* Store 1 if 
1e660 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 6e 6f  the result is no
1e670 74 20 65 6d 70 74 79 20 2a 2f 0a 23 64 65 66 69  t empty */.#defi
1e680 6e 65 20 53 52 54 5f 44 69 73 63 61 72 64 20 20  ne SRT_Discard  
1e690 20 20 20 20 34 20 20 2f 2a 20 44 6f 20 6e 6f 74      4  /* Do not
1e6a0 20 73 61 76 65 20 74 68 65 20 72 65 73 75 6c 74   save the result
1e6b0 73 20 61 6e 79 77 68 65 72 65 20 2a 2f 0a 23 64  s anywhere */.#d
1e6c0 65 66 69 6e 65 20 53 52 54 5f 46 69 66 6f 20 20  efine SRT_Fifo  
1e6d0 20 20 20 20 20 20 20 35 20 20 2f 2a 20 53 74 6f         5  /* Sto
1e6e0 72 65 20 72 65 73 75 6c 74 20 61 73 20 64 61 74  re result as dat
1e6f0 61 20 77 69 74 68 20 61 6e 20 61 75 74 6f 6d 61  a with an automa
1e700 74 69 63 20 72 6f 77 69 64 20 2a 2f 0a 23 64 65  tic rowid */.#de
1e710 66 69 6e 65 20 53 52 54 5f 44 69 73 74 46 69 66  fine SRT_DistFif
1e720 6f 20 20 20 20 20 36 20 20 2f 2a 20 4c 69 6b 65  o     6  /* Like
1e730 20 53 52 54 5f 46 69 66 6f 2c 20 62 75 74 20 75   SRT_Fifo, but u
1e740 6e 69 71 75 65 20 72 65 73 75 6c 74 73 20 6f 6e  nique results on
1e750 6c 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52  ly */.#define SR
1e760 54 5f 51 75 65 75 65 20 20 20 20 20 20 20 20 37  T_Queue        7
1e770 20 20 2f 2a 20 53 74 6f 72 65 20 72 65 73 75 6c    /* Store resul
1e780 74 20 69 6e 20 61 6e 20 71 75 65 75 65 20 2a 2f  t in an queue */
1e790 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 44 69 73  .#define SRT_Dis
1e7a0 74 51 75 65 75 65 20 20 20 20 38 20 20 2f 2a 20  tQueue    8  /* 
1e7b0 4c 69 6b 65 20 53 52 54 5f 51 75 65 75 65 2c 20  Like SRT_Queue, 
1e7c0 62 75 74 20 75 6e 69 71 75 65 20 72 65 73 75 6c  but unique resul
1e7d0 74 73 20 6f 6e 6c 79 20 2a 2f 0a 0a 2f 2a 20 54  ts only */../* T
1e7e0 68 65 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75  he ORDER BY clau
1e7f0 73 65 20 69 73 20 69 67 6e 6f 72 65 64 20 66 6f  se is ignored fo
1e800 72 20 61 6c 6c 20 6f 66 20 74 68 65 20 61 62 6f  r all of the abo
1e810 76 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49 67  ve */.#define Ig
1e820 6e 6f 72 61 62 6c 65 4f 72 64 65 72 62 79 28 58  norableOrderby(X
1e830 29 20 28 28 58 2d 3e 65 44 65 73 74 29 3c 3d 53  ) ((X->eDest)<=S
1e840 52 54 5f 44 69 73 74 51 75 65 75 65 29 0a 0a 23  RT_DistQueue)..#
1e850 64 65 66 69 6e 65 20 53 52 54 5f 4f 75 74 70 75  define SRT_Outpu
1e860 74 20 20 20 20 20 20 20 39 20 20 2f 2a 20 4f 75  t       9  /* Ou
1e870 74 70 75 74 20 65 61 63 68 20 72 6f 77 20 6f 66  tput each row of
1e880 20 72 65 73 75 6c 74 20 2a 2f 0a 23 64 65 66 69   result */.#defi
1e890 6e 65 20 53 52 54 5f 4d 65 6d 20 20 20 20 20 20  ne SRT_Mem      
1e8a0 20 20 20 31 30 20 20 2f 2a 20 53 74 6f 72 65 20     10  /* Store 
1e8b0 72 65 73 75 6c 74 20 69 6e 20 61 20 6d 65 6d 6f  result in a memo
1e8c0 72 79 20 63 65 6c 6c 20 2a 2f 0a 23 64 65 66 69  ry cell */.#defi
1e8d0 6e 65 20 53 52 54 5f 53 65 74 20 20 20 20 20 20  ne SRT_Set      
1e8e0 20 20 20 31 31 20 20 2f 2a 20 53 74 6f 72 65 20     11  /* Store 
1e8f0 72 65 73 75 6c 74 73 20 61 73 20 6b 65 79 73 20  results as keys 
1e900 69 6e 20 61 6e 20 69 6e 64 65 78 20 2a 2f 0a 23  in an index */.#
1e910 64 65 66 69 6e 65 20 53 52 54 5f 45 70 68 65 6d  define SRT_Ephem
1e920 54 61 62 20 20 20 20 31 32 20 20 2f 2a 20 43 72  Tab    12  /* Cr
1e930 65 61 74 65 20 74 72 61 6e 73 69 65 6e 74 20 74  eate transient t
1e940 61 62 20 61 6e 64 20 73 74 6f 72 65 20 6c 69 6b  ab and store lik
1e950 65 20 53 52 54 5f 54 61 62 6c 65 20 2a 2f 0a 23  e SRT_Table */.#
1e960 64 65 66 69 6e 65 20 53 52 54 5f 43 6f 72 6f 75  define SRT_Corou
1e970 74 69 6e 65 20 20 20 31 33 20 20 2f 2a 20 47 65  tine   13  /* Ge
1e980 6e 65 72 61 74 65 20 61 20 73 69 6e 67 6c 65 20  nerate a single 
1e990 72 6f 77 20 6f 66 20 72 65 73 75 6c 74 20 2a 2f  row of result */
1e9a0 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 54 61 62  .#define SRT_Tab
1e9b0 6c 65 20 20 20 20 20 20 20 31 34 20 20 2f 2a 20  le       14  /* 
1e9c0 53 74 6f 72 65 20 72 65 73 75 6c 74 20 61 73 20  Store result as 
1e9d0 64 61 74 61 20 77 69 74 68 20 61 6e 20 61 75 74  data with an aut
1e9e0 6f 6d 61 74 69 63 20 72 6f 77 69 64 20 2a 2f 0a  omatic rowid */.
1e9f0 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e  ./*.** An instan
1ea00 63 65 20 6f 66 20 74 68 69 73 20 6f 62 6a 65 63  ce of this objec
1ea10 74 20 64 65 73 63 72 69 62 65 73 20 77 68 65 72  t describes wher
1ea20 65 20 74 6f 20 70 75 74 20 6f 66 20 74 68 65 20  e to put of the 
1ea30 72 65 73 75 6c 74 73 20 6f 66 0a 2a 2a 20 61 20  results of.** a 
1ea40 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74  SELECT statement
1ea50 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53 65 6c 65  ..*/.struct Sele
1ea60 63 74 44 65 73 74 20 7b 0a 20 20 75 38 20 65 44  ctDest {.  u8 eD
1ea70 65 73 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  est;            
1ea80 2f 2a 20 48 6f 77 20 74 6f 20 64 69 73 70 6f 73  /* How to dispos
1ea90 65 20 6f 66 20 74 68 65 20 72 65 73 75 6c 74 73  e of the results
1eaa0 2e 20 20 4f 6e 20 6f 66 20 53 52 54 5f 2a 20 61  .  On of SRT_* a
1eab0 62 6f 76 65 2e 20 2a 2f 0a 20 20 69 6e 74 20 69  bove. */.  int i
1eac0 53 44 50 61 72 6d 3b 20 20 20 20 20 20 20 20 20  SDParm;         
1ead0 2f 2a 20 41 20 70 61 72 61 6d 65 74 65 72 20 75  /* A parameter u
1eae0 73 65 64 20 62 79 20 74 68 65 20 65 44 65 73 74  sed by the eDest
1eaf0 20 64 69 73 70 6f 73 61 6c 20 6d 65 74 68 6f 64   disposal method
1eb00 20 2a 2f 0a 20 20 69 6e 74 20 69 53 64 73 74 3b   */.  int iSdst;
1eb10 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 42 61             /* Ba
1eb20 73 65 20 72 65 67 69 73 74 65 72 20 77 68 65 72  se register wher
1eb30 65 20 72 65 73 75 6c 74 73 20 61 72 65 20 77 72  e results are wr
1eb40 69 74 74 65 6e 20 2a 2f 0a 20 20 69 6e 74 20 6e  itten */.  int n
1eb50 53 64 73 74 3b 20 20 20 20 20 20 20 20 20 20 20  Sdst;           
1eb60 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 72 65 67  /* Number of reg
1eb70 69 73 74 65 72 73 20 61 6c 6c 6f 63 61 74 65 64  isters allocated
1eb80 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 41 66 66   */.  char *zAff
1eb90 53 64 73 74 3b 20 20 20 20 20 20 2f 2a 20 41 66  Sdst;      /* Af
1eba0 66 69 6e 69 74 79 20 75 73 65 64 20 77 68 65 6e  finity used when
1ebb0 20 65 44 65 73 74 3d 3d 53 52 54 5f 53 65 74 20   eDest==SRT_Set 
1ebc0 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70  */.  ExprList *p
1ebd0 4f 72 64 65 72 42 79 3b 20 20 2f 2a 20 4b 65 79  OrderBy;  /* Key
1ebe0 20 63 6f 6c 75 6d 6e 73 20 66 6f 72 20 53 52 54   columns for SRT
1ebf0 5f 51 75 65 75 65 20 61 6e 64 20 53 52 54 5f 44  _Queue and SRT_D
1ec00 69 73 74 51 75 65 75 65 20 2a 2f 0a 7d 3b 0a 0a  istQueue */.};..
1ec10 2f 2a 0a 2a 2a 20 44 75 72 69 6e 67 20 63 6f 64  /*.** During cod
1ec20 65 20 67 65 6e 65 72 61 74 69 6f 6e 20 6f 66 20  e generation of 
1ec30 73 74 61 74 65 6d 65 6e 74 73 20 74 68 61 74 20  statements that 
1ec40 64 6f 20 69 6e 73 65 72 74 73 20 69 6e 74 6f 20  do inserts into 
1ec50 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 0a 2a 2a  AUTOINCREMENT.**
1ec60 20 74 61 62 6c 65 73 2c 20 74 68 65 20 66 6f 6c   tables, the fol
1ec70 6c 6f 77 69 6e 67 20 69 6e 66 6f 72 6d 61 74 69  lowing informati
1ec80 6f 6e 20 69 73 20 61 74 74 61 63 68 65 64 20 74  on is attached t
1ec90 6f 20 74 68 65 20 54 61 62 6c 65 2e 75 2e 61 75  o the Table.u.au
1eca0 74 6f 49 6e 63 2e 70 0a 2a 2a 20 70 6f 69 6e 74  toInc.p.** point
1ecb0 65 72 20 6f 66 20 65 61 63 68 20 61 75 74 6f 69  er of each autoi
1ecc0 6e 63 72 65 6d 65 6e 74 20 74 61 62 6c 65 20 74  ncrement table t
1ecd0 6f 20 72 65 63 6f 72 64 20 73 6f 6d 65 20 73 69  o record some si
1ece0 64 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 74  de information t
1ecf0 68 61 74 0a 2a 2a 20 74 68 65 20 63 6f 64 65 20  hat.** the code 
1ed00 67 65 6e 65 72 61 74 6f 72 20 6e 65 65 64 73 2e  generator needs.
1ed10 20 20 57 65 20 68 61 76 65 20 74 6f 20 6b 65 65    We have to kee
1ed20 70 20 70 65 72 2d 74 61 62 6c 65 20 61 75 74 6f  p per-table auto
1ed30 69 6e 63 72 65 6d 65 6e 74 0a 2a 2a 20 69 6e 66  increment.** inf
1ed40 6f 72 6d 61 74 69 6f 6e 20 69 6e 20 63 61 73 65  ormation in case
1ed50 20 69 6e 73 65 72 74 73 20 61 72 65 20 64 6f 6e   inserts are don
1ed60 65 20 77 69 74 68 69 6e 20 74 72 69 67 67 65 72  e within trigger
1ed70 73 2e 20 20 54 72 69 67 67 65 72 73 20 64 6f 20  s.  Triggers do 
1ed80 6e 6f 74 0a 2a 2a 20 6e 6f 72 6d 61 6c 6c 79 20  not.** normally 
1ed90 63 6f 6f 72 64 69 6e 61 74 65 20 74 68 65 69 72  coordinate their
1eda0 20 61 63 74 69 76 69 74 69 65 73 2c 20 62 75 74   activities, but
1edb0 20 77 65 20 64 6f 20 6e 65 65 64 20 74 6f 20 63   we do need to c
1edc0 6f 6f 72 64 69 6e 61 74 65 20 74 68 65 0a 2a 2a  oordinate the.**
1edd0 20 6c 6f 61 64 69 6e 67 20 61 6e 64 20 73 61 76   loading and sav
1ede0 69 6e 67 20 6f 66 20 61 75 74 6f 69 6e 63 72 65  ing of autoincre
1edf0 6d 65 6e 74 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  ment information
1ee00 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 41 75 74 6f  ..*/.struct Auto
1ee10 69 6e 63 49 6e 66 6f 20 7b 0a 20 20 41 75 74 6f  incInfo {.  Auto
1ee20 69 6e 63 49 6e 66 6f 20 2a 70 4e 65 78 74 3b 20  incInfo *pNext; 
1ee30 20 20 2f 2a 20 4e 65 78 74 20 69 6e 66 6f 20 62    /* Next info b
1ee40 6c 6f 63 6b 20 69 6e 20 61 20 6c 69 73 74 20 6f  lock in a list o
1ee50 66 20 74 68 65 6d 20 61 6c 6c 20 2a 2f 0a 20 20  f them all */.  
1ee60 54 61 62 6c 65 20 2a 70 54 61 62 3b 20 20 20 20  Table *pTab;    
1ee70 20 20 20 20 20 20 2f 2a 20 54 61 62 6c 65 20 74        /* Table t
1ee80 68 69 73 20 69 6e 66 6f 20 62 6c 6f 63 6b 20 72  his info block r
1ee90 65 66 65 72 73 20 74 6f 20 2a 2f 0a 20 20 69 6e  efers to */.  in
1eea0 74 20 69 44 62 3b 20 20 20 20 20 20 20 20 20 20  t iDb;          
1eeb0 20 20 20 20 2f 2a 20 49 6e 64 65 78 20 69 6e 20      /* Index in 
1eec0 73 71 6c 69 74 65 33 2e 61 44 62 5b 5d 20 6f 66  sqlite3.aDb[] of
1eed0 20 64 61 74 61 62 61 73 65 20 68 6f 6c 64 69 6e   database holdin
1eee0 67 20 70 54 61 62 20 2a 2f 0a 20 20 69 6e 74 20  g pTab */.  int 
1eef0 72 65 67 43 74 72 3b 20 20 20 20 20 20 20 20 20  regCtr;         
1ef00 20 20 2f 2a 20 4d 65 6d 6f 72 79 20 72 65 67 69    /* Memory regi
1ef10 73 74 65 72 20 68 6f 6c 64 69 6e 67 20 74 68 65  ster holding the
1ef20 20 72 6f 77 69 64 20 63 6f 75 6e 74 65 72 20 2a   rowid counter *
1ef30 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 53 69 7a 65  /.};../*.** Size
1ef40 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20 63   of the column c
1ef50 61 63 68 65 0a 2a 2f 0a 23 69 66 6e 64 65 66 20  ache.*/.#ifndef 
1ef60 53 51 4c 49 54 45 5f 4e 5f 43 4f 4c 43 41 43 48  SQLITE_N_COLCACH
1ef70 45 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  E.# define SQLIT
1ef80 45 5f 4e 5f 43 4f 4c 43 41 43 48 45 20 31 30 0a  E_N_COLCACHE 10.
1ef90 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 74  #endif../*.** At
1efa0 20 6c 65 61 73 74 20 6f 6e 65 20 69 6e 73 74 61   least one insta
1efb0 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f  nce of the follo
1efc0 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 20 69  wing structure i
1efd0 73 20 63 72 65 61 74 65 64 20 66 6f 72 20 65 61  s created for ea
1efe0 63 68 0a 2a 2a 20 74 72 69 67 67 65 72 20 74 68  ch.** trigger th
1eff0 61 74 20 6d 61 79 20 62 65 20 66 69 72 65 64 20  at may be fired 
1f000 77 68 69 6c 65 20 70 61 72 73 69 6e 67 20 61 6e  while parsing an
1f010 20 49 4e 53 45 52 54 2c 20 55 50 44 41 54 45 20   INSERT, UPDATE 
1f020 6f 72 20 44 45 4c 45 54 45 0a 2a 2a 20 73 74 61  or DELETE.** sta
1f030 74 65 6d 65 6e 74 2e 20 41 6c 6c 20 73 75 63 68  tement. All such
1f040 20 6f 62 6a 65 63 74 73 20 61 72 65 20 73 74 6f   objects are sto
1f050 72 65 64 20 69 6e 20 74 68 65 20 6c 69 6e 6b 65  red in the linke
1f060 64 20 6c 69 73 74 20 68 65 61 64 65 64 20 61 74  d list headed at
1f070 0a 2a 2a 20 50 61 72 73 65 2e 70 54 72 69 67 67  .** Parse.pTrigg
1f080 65 72 50 72 67 20 61 6e 64 20 64 65 6c 65 74 65  erPrg and delete
1f090 64 20 6f 6e 63 65 20 73 74 61 74 65 6d 65 6e 74  d once statement
1f0a0 20 63 6f 6d 70 69 6c 61 74 69 6f 6e 20 68 61 73   compilation has
1f0b0 20 62 65 65 6e 0a 2a 2a 20 63 6f 6d 70 6c 65 74   been.** complet
1f0c0 65 64 2e 0a 2a 2a 0a 2a 2a 20 41 20 56 64 62 65  ed..**.** A Vdbe
1f0d0 20 73 75 62 2d 70 72 6f 67 72 61 6d 20 74 68 61   sub-program tha
1f0e0 74 20 69 6d 70 6c 65 6d 65 6e 74 73 20 74 68 65  t implements the
1f0f0 20 62 6f 64 79 20 61 6e 64 20 57 48 45 4e 20 63   body and WHEN c
1f100 6c 61 75 73 65 20 6f 66 20 74 72 69 67 67 65 72  lause of trigger
1f110 0a 2a 2a 20 54 72 69 67 67 65 72 50 72 67 2e 70  .** TriggerPrg.p
1f120 54 72 69 67 67 65 72 2c 20 61 73 73 75 6d 69 6e  Trigger, assumin
1f130 67 20 61 20 64 65 66 61 75 6c 74 20 4f 4e 20 43  g a default ON C
1f140 4f 4e 46 4c 49 43 54 20 63 6c 61 75 73 65 20 6f  ONFLICT clause o
1f150 66 0a 2a 2a 20 54 72 69 67 67 65 72 50 72 67 2e  f.** TriggerPrg.
1f160 6f 72 63 6f 6e 66 2c 20 69 73 20 73 74 6f 72 65  orconf, is store
1f170 64 20 69 6e 20 74 68 65 20 54 72 69 67 67 65 72  d in the Trigger
1f180 50 72 67 2e 70 50 72 6f 67 72 61 6d 20 76 61 72  Prg.pProgram var
1f190 69 61 62 6c 65 2e 0a 2a 2a 20 54 68 65 20 50 61  iable..** The Pa
1f1a0 72 73 65 2e 70 54 72 69 67 67 65 72 50 72 67 20  rse.pTriggerPrg 
1f1b0 6c 69 73 74 20 6e 65 76 65 72 20 63 6f 6e 74 61  list never conta
1f1c0 69 6e 73 20 74 77 6f 20 65 6e 74 72 69 65 73 20  ins two entries 
1f1d0 77 69 74 68 20 74 68 65 20 73 61 6d 65 0a 2a 2a  with the same.**
1f1e0 20 76 61 6c 75 65 73 20 66 6f 72 20 62 6f 74 68   values for both
1f1f0 20 70 54 72 69 67 67 65 72 20 61 6e 64 20 6f 72   pTrigger and or
1f200 63 6f 6e 66 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  conf..**.** The 
1f210 54 72 69 67 67 65 72 50 72 67 2e 61 43 6f 6c 6d  TriggerPrg.aColm
1f220 61 73 6b 5b 30 5d 20 76 61 72 69 61 62 6c 65 20  ask[0] variable 
1f230 69 73 20 73 65 74 20 74 6f 20 61 20 6d 61 73 6b  is set to a mask
1f240 20 6f 66 20 6f 6c 64 2e 2a 20 63 6f 6c 75 6d 6e   of old.* column
1f250 73 0a 2a 2a 20 61 63 63 65 73 73 65 64 20 28 6f  s.** accessed (o
1f260 72 20 73 65 74 20 74 6f 20 30 20 66 6f 72 20 74  r set to 0 for t
1f270 72 69 67 67 65 72 73 20 66 69 72 65 64 20 61 73  riggers fired as
1f280 20 61 20 72 65 73 75 6c 74 20 6f 66 20 49 4e 53   a result of INS
1f290 45 52 54 0a 2a 2a 20 73 74 61 74 65 6d 65 6e 74  ERT.** statement
1f2a0 73 29 2e 20 53 69 6d 69 6c 61 72 6c 79 2c 20 74  s). Similarly, t
1f2b0 68 65 20 54 72 69 67 67 65 72 50 72 67 2e 61 43  he TriggerPrg.aC
1f2c0 6f 6c 6d 61 73 6b 5b 31 5d 20 76 61 72 69 61 62  olmask[1] variab
1f2d0 6c 65 20 69 73 20 73 65 74 20 74 6f 0a 2a 2a 20  le is set to.** 
1f2e0 61 20 6d 61 73 6b 20 6f 66 20 6e 65 77 2e 2a 20  a mask of new.* 
1f2f0 63 6f 6c 75 6d 6e 73 20 75 73 65 64 20 62 79 20  columns used by 
1f300 74 68 65 20 70 72 6f 67 72 61 6d 2e 0a 2a 2f 0a  the program..*/.
1f310 73 74 72 75 63 74 20 54 72 69 67 67 65 72 50 72  struct TriggerPr
1f320 67 20 7b 0a 20 20 54 72 69 67 67 65 72 20 2a 70  g {.  Trigger *p
1f330 54 72 69 67 67 65 72 3b 20 20 20 20 20 20 2f 2a  Trigger;      /*
1f340 20 54 72 69 67 67 65 72 20 74 68 69 73 20 70 72   Trigger this pr
1f350 6f 67 72 61 6d 20 77 61 73 20 63 6f 64 65 64 20  ogram was coded 
1f360 66 72 6f 6d 20 2a 2f 0a 20 20 54 72 69 67 67 65  from */.  Trigge
1f370 72 50 72 67 20 2a 70 4e 65 78 74 3b 20 20 20 20  rPrg *pNext;    
1f380 20 20 2f 2a 20 4e 65 78 74 20 65 6e 74 72 79 20    /* Next entry 
1f390 69 6e 20 50 61 72 73 65 2e 70 54 72 69 67 67 65  in Parse.pTrigge
1f3a0 72 50 72 67 20 6c 69 73 74 20 2a 2f 0a 20 20 53  rPrg list */.  S
1f3b0 75 62 50 72 6f 67 72 61 6d 20 2a 70 50 72 6f 67  ubProgram *pProg
1f3c0 72 61 6d 3b 20 20 20 2f 2a 20 50 72 6f 67 72 61  ram;   /* Progra
1f3d0 6d 20 69 6d 70 6c 65 6d 65 6e 74 69 6e 67 20 70  m implementing p
1f3e0 54 72 69 67 67 65 72 2f 6f 72 63 6f 6e 66 20 2a  Trigger/orconf *
1f3f0 2f 0a 20 20 69 6e 74 20 6f 72 63 6f 6e 66 3b 20  /.  int orconf; 
1f400 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44              /* D
1f410 65 66 61 75 6c 74 20 4f 4e 20 43 4f 4e 46 4c 49  efault ON CONFLI
1f420 43 54 20 70 6f 6c 69 63 79 20 2a 2f 0a 20 20 75  CT policy */.  u
1f430 33 32 20 61 43 6f 6c 6d 61 73 6b 5b 32 5d 3b 20  32 aColmask[2]; 
1f440 20 20 20 20 20 20 20 2f 2a 20 4d 61 73 6b 73 20         /* Masks 
1f450 6f 66 20 6f 6c 64 2e 2a 2c 20 6e 65 77 2e 2a 20  of old.*, new.* 
1f460 63 6f 6c 75 6d 6e 73 20 61 63 63 65 73 73 65 64  columns accessed
1f470 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68   */.};../*.** Th
1f480 65 20 79 44 62 4d 61 73 6b 20 64 61 74 61 74 79  e yDbMask dataty
1f490 70 65 20 66 6f 72 20 74 68 65 20 62 69 74 6d 61  pe for the bitma
1f4a0 73 6b 20 6f 66 20 61 6c 6c 20 61 74 74 61 63 68  sk of all attach
1f4b0 65 64 20 64 61 74 61 62 61 73 65 73 2e 0a 2a 2f  ed databases..*/
1f4c0 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f  .#if SQLITE_MAX_
1f4d0 41 54 54 41 43 48 45 44 3e 33 30 0a 20 20 74 79  ATTACHED>30.  ty
1f4e0 70 65 64 65 66 20 75 6e 73 69 67 6e 65 64 20 63  pedef unsigned c
1f4f0 68 61 72 20 79 44 62 4d 61 73 6b 5b 28 53 51 4c  har yDbMask[(SQL
1f500 49 54 45 5f 4d 41 58 5f 41 54 54 41 43 48 45 44  ITE_MAX_ATTACHED
1f510 2b 39 29 2f 38 5d 3b 0a 23 20 64 65 66 69 6e 65  +9)/8];.# define
1f520 20 44 62 4d 61 73 6b 54 65 73 74 28 4d 2c 49 29   DbMaskTest(M,I)
1f530 20 20 20 20 28 28 28 4d 29 5b 28 49 29 2f 38 5d      (((M)[(I)/8]
1f540 26 28 31 3c 3c 28 28 49 29 26 37 29 29 29 21 3d  &(1<<((I)&7)))!=
1f550 30 29 0a 23 20 64 65 66 69 6e 65 20 44 62 4d 61  0).# define DbMa
1f560 73 6b 5a 65 72 6f 28 4d 29 20 20 20 20 20 20 6d  skZero(M)      m
1f570 65 6d 73 65 74 28 28 4d 29 2c 30 2c 73 69 7a 65  emset((M),0,size
1f580 6f 66 28 4d 29 29 0a 23 20 64 65 66 69 6e 65 20  of(M)).# define 
1f590 44 62 4d 61 73 6b 53 65 74 28 4d 2c 49 29 20 20  DbMaskSet(M,I)  
1f5a0 20 20 20 28 4d 29 5b 28 49 29 2f 38 5d 7c 3d 28     (M)[(I)/8]|=(
1f5b0 31 3c 3c 28 28 49 29 26 37 29 29 0a 23 20 64 65  1<<((I)&7)).# de
1f5c0 66 69 6e 65 20 44 62 4d 61 73 6b 41 6c 6c 5a 65  fine DbMaskAllZe
1f5d0 72 6f 28 4d 29 20 20 20 73 71 6c 69 74 65 33 44  ro(M)   sqlite3D
1f5e0 62 4d 61 73 6b 41 6c 6c 5a 65 72 6f 28 4d 29 0a  bMaskAllZero(M).
1f5f0 23 20 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 4e  # define DbMaskN
1f600 6f 6e 5a 65 72 6f 28 4d 29 20 20 20 28 73 71 6c  onZero(M)   (sql
1f610 69 74 65 33 44 62 4d 61 73 6b 41 6c 6c 5a 65 72  ite3DbMaskAllZer
1f620 6f 28 4d 29 3d 3d 30 29 0a 23 65 6c 73 65 0a 20  o(M)==0).#else. 
1f630 20 74 79 70 65 64 65 66 20 75 6e 73 69 67 6e 65   typedef unsigne
1f640 64 20 69 6e 74 20 79 44 62 4d 61 73 6b 3b 0a 23  d int yDbMask;.#
1f650 20 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 54 65   define DbMaskTe
1f660 73 74 28 4d 2c 49 29 20 20 20 20 28 28 28 4d 29  st(M,I)    (((M)
1f670 26 28 28 28 79 44 62 4d 61 73 6b 29 31 29 3c 3c  &(((yDbMask)1)<<
1f680 28 49 29 29 29 21 3d 30 29 0a 23 20 64 65 66 69  (I)))!=0).# defi
1f690 6e 65 20 44 62 4d 61 73 6b 5a 65 72 6f 28 4d 29  ne DbMaskZero(M)
1f6a0 20 20 20 20 20 20 28 4d 29 3d 30 0a 23 20 64 65        (M)=0.# de
1f6b0 66 69 6e 65 20 44 62 4d 61 73 6b 53 65 74 28 4d  fine DbMaskSet(M
1f6c0 2c 49 29 20 20 20 20 20 28 4d 29 7c 3d 28 28 28  ,I)     (M)|=(((
1f6d0 79 44 62 4d 61 73 6b 29 31 29 3c 3c 28 49 29 29  yDbMask)1)<<(I))
1f6e0 0a 23 20 64 65 66 69 6e 65 20 44 62 4d 61 73 6b  .# define DbMask
1f6f0 41 6c 6c 5a 65 72 6f 28 4d 29 20 20 20 28 4d 29  AllZero(M)   (M)
1f700 3d 3d 30 0a 23 20 64 65 66 69 6e 65 20 44 62 4d  ==0.# define DbM
1f710 61 73 6b 4e 6f 6e 5a 65 72 6f 28 4d 29 20 20 20  askNonZero(M)   
1f720 28 4d 29 21 3d 30 0a 23 65 6e 64 69 66 0a 0a 2f  (M)!=0.#endif../
1f730 2a 0a 2a 2a 20 41 6e 20 53 51 4c 20 70 61 72 73  *.** An SQL pars
1f740 65 72 20 63 6f 6e 74 65 78 74 2e 20 20 41 20 63  er context.  A c
1f750 6f 70 79 20 6f 66 20 74 68 69 73 20 73 74 72 75  opy of this stru
1f760 63 74 75 72 65 20 69 73 20 70 61 73 73 65 64 20  cture is passed 
1f770 74 68 72 6f 75 67 68 0a 2a 2a 20 74 68 65 20 70  through.** the p
1f780 61 72 73 65 72 20 61 6e 64 20 64 6f 77 6e 20 69  arser and down i
1f790 6e 74 6f 20 61 6c 6c 20 74 68 65 20 70 61 72 73  nto all the pars
1f7a0 65 72 20 61 63 74 69 6f 6e 20 72 6f 75 74 69 6e  er action routin
1f7b0 65 20 69 6e 20 6f 72 64 65 72 20 74 6f 0a 2a 2a  e in order to.**
1f7c0 20 63 61 72 72 79 20 61 72 6f 75 6e 64 20 69 6e   carry around in
1f7d0 66 6f 72 6d 61 74 69 6f 6e 20 74 68 61 74 20 69  formation that i
1f7e0 73 20 67 6c 6f 62 61 6c 20 74 6f 20 74 68 65 20  s global to the 
1f7f0 65 6e 74 69 72 65 20 70 61 72 73 65 2e 0a 2a 2a  entire parse..**
1f800 0a 2a 2a 20 54 68 65 20 73 74 72 75 63 74 75 72  .** The structur
1f810 65 20 69 73 20 64 69 76 69 64 65 64 20 69 6e 74  e is divided int
1f820 6f 20 74 77 6f 20 70 61 72 74 73 2e 20 20 57 68  o two parts.  Wh
1f830 65 6e 20 74 68 65 20 70 61 72 73 65 72 20 61 6e  en the parser an
1f840 64 20 63 6f 64 65 0a 2a 2a 20 67 65 6e 65 72 61  d code.** genera
1f850 74 65 20 63 61 6c 6c 20 74 68 65 6d 73 65 6c 76  te call themselv
1f860 65 73 20 72 65 63 75 72 73 69 76 65 6c 79 2c 20  es recursively, 
1f870 74 68 65 20 66 69 72 73 74 20 70 61 72 74 20 6f  the first part o
1f880 66 20 74 68 65 20 73 74 72 75 63 74 75 72 65 0a  f the structure.
1f890 2a 2a 20 69 73 20 63 6f 6e 73 74 61 6e 74 20 62  ** is constant b
1f8a0 75 74 20 74 68 65 20 73 65 63 6f 6e 64 20 70 61  ut the second pa
1f8b0 72 74 20 69 73 20 72 65 73 65 74 20 61 74 20 74  rt is reset at t
1f8c0 68 65 20 62 65 67 69 6e 6e 69 6e 67 20 61 6e 64  he beginning and
1f8d0 20 65 6e 64 20 6f 66 0a 2a 2a 20 65 61 63 68 20   end of.** each 
1f8e0 72 65 63 75 72 73 69 6f 6e 2e 0a 2a 2a 0a 2a 2a  recursion..**.**
1f8f0 20 54 68 65 20 6e 54 61 62 6c 65 4c 6f 63 6b 20   The nTableLock 
1f900 61 6e 64 20 61 54 61 62 6c 65 4c 6f 63 6b 20 76  and aTableLock v
1f910 61 72 69 61 62 6c 65 73 20 61 72 65 20 6f 6e 6c  ariables are onl
1f920 79 20 75 73 65 64 20 69 66 20 74 68 65 20 73 68  y used if the sh
1f930 61 72 65 64 2d 63 61 63 68 65 0a 2a 2a 20 66 65  ared-cache.** fe
1f940 61 74 75 72 65 20 69 73 20 65 6e 61 62 6c 65 64  ature is enabled
1f950 20 28 69 66 20 73 71 6c 69 74 65 33 54 73 64 28   (if sqlite3Tsd(
1f960 29 2d 3e 75 73 65 53 68 61 72 65 64 44 61 74 61  )->useSharedData
1f970 20 69 73 20 74 72 75 65 29 2e 20 54 68 65 79 20   is true). They 
1f980 61 72 65 0a 2a 2a 20 75 73 65 64 20 74 6f 20 73  are.** used to s
1f990 74 6f 72 65 20 74 68 65 20 73 65 74 20 6f 66 20  tore the set of 
1f9a0 74 61 62 6c 65 2d 6c 6f 63 6b 73 20 72 65 71 75  table-locks requ
1f9b0 69 72 65 64 20 62 79 20 74 68 65 20 73 74 61 74  ired by the stat
1f9c0 65 6d 65 6e 74 20 62 65 69 6e 67 0a 2a 2a 20 63  ement being.** c
1f9d0 6f 6d 70 69 6c 65 64 2e 20 46 75 6e 63 74 69 6f  ompiled. Functio
1f9e0 6e 20 73 71 6c 69 74 65 33 54 61 62 6c 65 4c 6f  n sqlite3TableLo
1f9f0 63 6b 28 29 20 69 73 20 75 73 65 64 20 74 6f 20  ck() is used to 
1fa00 61 64 64 20 65 6e 74 72 69 65 73 20 74 6f 20 74  add entries to t
1fa10 68 65 0a 2a 2a 20 6c 69 73 74 2e 0a 2a 2f 0a 73  he.** list..*/.s
1fa20 74 72 75 63 74 20 50 61 72 73 65 20 7b 0a 20 20  truct Parse {.  
1fa30 73 71 6c 69 74 65 33 20 2a 64 62 3b 20 20 20 20  sqlite3 *db;    
1fa40 20 20 20 20 20 2f 2a 20 54 68 65 20 6d 61 69 6e       /* The main
1fa50 20 64 61 74 61 62 61 73 65 20 73 74 72 75 63 74   database struct
1fa60 75 72 65 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a  ure */.  char *z
1fa70 45 72 72 4d 73 67 3b 20 20 20 20 20 20 20 2f 2a  ErrMsg;       /*
1fa80 20 41 6e 20 65 72 72 6f 72 20 6d 65 73 73 61 67   An error messag
1fa90 65 20 2a 2f 0a 20 20 56 64 62 65 20 2a 70 56 64  e */.  Vdbe *pVd
1faa0 62 65 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 41  be;         /* A
1fab0 6e 20 65 6e 67 69 6e 65 20 66 6f 72 20 65 78 65  n engine for exe
1fac0 63 75 74 69 6e 67 20 64 61 74 61 62 61 73 65 20  cuting database 
1fad0 62 79 74 65 63 6f 64 65 20 2a 2f 0a 20 20 69 6e  bytecode */.  in
1fae0 74 20 72 63 3b 20 20 20 20 20 20 20 20 20 20 20  t rc;           
1faf0 20 20 20 2f 2a 20 52 65 74 75 72 6e 20 63 6f 64     /* Return cod
1fb00 65 20 66 72 6f 6d 20 65 78 65 63 75 74 69 6f 6e  e from execution
1fb10 20 2a 2f 0a 20 20 75 38 20 63 6f 6c 4e 61 6d 65   */.  u8 colName
1fb20 73 53 65 74 3b 20 20 20 20 20 20 2f 2a 20 54 52  sSet;      /* TR
1fb30 55 45 20 61 66 74 65 72 20 4f 50 5f 43 6f 6c 75  UE after OP_Colu
1fb40 6d 6e 4e 61 6d 65 20 68 61 73 20 62 65 65 6e 20  mnName has been 
1fb50 69 73 73 75 65 64 20 74 6f 20 70 56 64 62 65 20  issued to pVdbe 
1fb60 2a 2f 0a 20 20 75 38 20 63 68 65 63 6b 53 63 68  */.  u8 checkSch
1fb70 65 6d 61 3b 20 20 20 20 20 20 2f 2a 20 43 61 75  ema;      /* Cau
1fb80 73 65 73 20 73 63 68 65 6d 61 20 63 6f 6f 6b 69  ses schema cooki
1fb90 65 20 63 68 65 63 6b 20 61 66 74 65 72 20 61 6e  e check after an
1fba0 20 65 72 72 6f 72 20 2a 2f 0a 20 20 75 38 20 6e   error */.  u8 n
1fbb0 65 73 74 65 64 3b 20 20 20 20 20 20 20 20 20 20  ested;          
1fbc0 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6e 65   /* Number of ne
1fbd0 73 74 65 64 20 63 61 6c 6c 73 20 74 6f 20 74 68  sted calls to th
1fbe0 65 20 70 61 72 73 65 72 2f 63 6f 64 65 20 67 65  e parser/code ge
1fbf0 6e 65 72 61 74 6f 72 20 2a 2f 0a 20 20 75 38 20  nerator */.  u8 
1fc00 6e 54 65 6d 70 52 65 67 3b 20 20 20 20 20 20 20  nTempReg;       
1fc10 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 74    /* Number of t
1fc20 65 6d 70 6f 72 61 72 79 20 72 65 67 69 73 74 65  emporary registe
1fc30 72 73 20 69 6e 20 61 54 65 6d 70 52 65 67 5b 5d  rs in aTempReg[]
1fc40 20 2a 2f 0a 20 20 75 38 20 69 73 4d 75 6c 74 69   */.  u8 isMulti
1fc50 57 72 69 74 65 3b 20 20 20 20 20 2f 2a 20 54 72  Write;     /* Tr
1fc60 75 65 20 69 66 20 73 74 61 74 65 6d 65 6e 74 20  ue if statement 
1fc70 6d 61 79 20 6d 6f 64 69 66 79 2f 69 6e 73 65 72  may modify/inser
1fc80 74 20 6d 75 6c 74 69 70 6c 65 20 72 6f 77 73 20  t multiple rows 
1fc90 2a 2f 0a 20 20 75 38 20 6d 61 79 41 62 6f 72 74  */.  u8 mayAbort
1fca0 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75  ;         /* Tru
1fcb0 65 20 69 66 20 73 74 61 74 65 6d 65 6e 74 20 6d  e if statement m
1fcc0 61 79 20 74 68 72 6f 77 20 61 6e 20 41 42 4f 52  ay throw an ABOR
1fcd0 54 20 65 78 63 65 70 74 69 6f 6e 20 2a 2f 0a 20  T exception */. 
1fce0 20 75 38 20 68 61 73 43 6f 6d 70 6f 75 6e 64 3b   u8 hasCompound;
1fcf0 20 20 20 20 20 20 2f 2a 20 4e 65 65 64 20 74 6f        /* Need to
1fd00 20 69 6e 76 6f 6b 65 20 63 6f 6e 76 65 72 74 43   invoke convertC
1fd10 6f 6d 70 6f 75 6e 64 53 65 6c 65 63 74 54 6f 53  ompoundSelectToS
1fd20 75 62 71 75 65 72 79 28 29 20 2a 2f 0a 20 20 75  ubquery() */.  u
1fd30 38 20 6f 6b 43 6f 6e 73 74 46 61 63 74 6f 72 3b  8 okConstFactor;
1fd40 20 20 20 20 2f 2a 20 4f 4b 20 74 6f 20 66 61 63      /* OK to fac
1fd50 74 6f 72 20 6f 75 74 20 63 6f 6e 73 74 61 6e 74  tor out constant
1fd60 73 20 2a 2f 0a 20 20 75 38 20 64 69 73 61 62 6c  s */.  u8 disabl
1fd70 65 4c 6f 6f 6b 61 73 69 64 65 3b 20 2f 2a 20 4e  eLookaside; /* N
1fd80 75 6d 62 65 72 20 6f 66 20 74 69 6d 65 73 20 6c  umber of times l
1fd90 6f 6f 6b 61 73 69 64 65 20 68 61 73 20 62 65 65  ookaside has bee
1fda0 6e 20 64 69 73 61 62 6c 65 64 20 2a 2f 0a 20 20  n disabled */.  
1fdb0 75 38 20 6e 43 6f 6c 43 61 63 68 65 3b 20 20 20  u8 nColCache;   
1fdc0 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
1fdd0 66 20 65 6e 74 72 69 65 73 20 69 6e 20 61 43 6f  f entries in aCo
1fde0 6c 43 61 63 68 65 5b 5d 20 2a 2f 0a 20 20 69 6e  lCache[] */.  in
1fdf0 74 20 6e 52 61 6e 67 65 52 65 67 3b 20 20 20 20  t nRangeReg;    
1fe00 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20 74 68     /* Size of th
1fe10 65 20 74 65 6d 70 6f 72 61 72 79 20 72 65 67 69  e temporary regi
1fe20 73 74 65 72 20 62 6c 6f 63 6b 20 2a 2f 0a 20 20  ster block */.  
1fe30 69 6e 74 20 69 52 61 6e 67 65 52 65 67 3b 20 20  int iRangeReg;  
1fe40 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20 72 65       /* First re
1fe50 67 69 73 74 65 72 20 69 6e 20 74 65 6d 70 6f 72  gister in tempor
1fe60 61 72 79 20 72 65 67 69 73 74 65 72 20 62 6c 6f  ary register blo
1fe70 63 6b 20 2a 2f 0a 20 20 69 6e 74 20 6e 45 72 72  ck */.  int nErr
1fe80 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
1fe90 4e 75 6d 62 65 72 20 6f 66 20 65 72 72 6f 72 73  Number of errors
1fea0 20 73 65 65 6e 20 2a 2f 0a 20 20 69 6e 74 20 6e   seen */.  int n
1feb0 54 61 62 3b 20 20 20 20 20 20 20 20 20 20 20 20  Tab;            
1fec0 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 70 72 65  /* Number of pre
1fed0 76 69 6f 75 73 6c 79 20 61 6c 6c 6f 63 61 74 65  viously allocate
1fee0 64 20 56 44 42 45 20 63 75 72 73 6f 72 73 20 2a  d VDBE cursors *
1fef0 2f 0a 20 20 69 6e 74 20 6e 4d 65 6d 3b 20 20 20  /.  int nMem;   
1ff00 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
1ff10 65 72 20 6f 66 20 6d 65 6d 6f 72 79 20 63 65 6c  er of memory cel
1ff20 6c 73 20 75 73 65 64 20 73 6f 20 66 61 72 20 2a  ls used so far *
1ff30 2f 0a 20 20 69 6e 74 20 6e 4f 70 41 6c 6c 6f 63  /.  int nOpAlloc
1ff40 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62  ;        /* Numb
1ff50 65 72 20 6f 66 20 73 6c 6f 74 73 20 61 6c 6c 6f  er of slots allo
1ff60 63 61 74 65 64 20 66 6f 72 20 56 64 62 65 2e 61  cated for Vdbe.a
1ff70 4f 70 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 73 7a  Op[] */.  int sz
1ff80 4f 70 41 6c 6c 6f 63 3b 20 20 20 20 20 20 20 2f  OpAlloc;       /
1ff90 2a 20 42 79 74 65 73 20 6f 66 20 6d 65 6d 6f 72  * Bytes of memor
1ffa0 79 20 73 70 61 63 65 20 61 6c 6c 6f 63 61 74 65  y space allocate
1ffb0 64 20 66 6f 72 20 56 64 62 65 2e 61 4f 70 5b 5d  d for Vdbe.aOp[]
1ffc0 20 2a 2f 0a 20 20 69 6e 74 20 69 53 65 6c 66 54   */.  int iSelfT
1ffd0 61 62 3b 20 20 20 20 20 20 20 20 2f 2a 20 54 61  ab;        /* Ta
1ffe0 62 6c 65 20 61 73 73 6f 63 69 61 74 65 64 20 77  ble associated w
1fff0 69 74 68 20 61 6e 20 69 6e 64 65 78 20 6f 6e 20  ith an index on 
20000 65 78 70 72 2c 20 6f 72 20 6e 65 67 61 74 69 76  expr, or negativ
20010 65 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e.              
20020 20 20 20 20 20 20 20 20 20 2a 2a 20 6f 66 20 74           ** of t
20030 68 65 20 62 61 73 65 20 72 65 67 69 73 74 65 72  he base register
20040 20 64 75 72 69 6e 67 20 63 68 65 63 6b 2d 63 6f   during check-co
20050 6e 73 74 72 61 69 6e 74 20 65 76 61 6c 20 2a 2f  nstraint eval */
20060 0a 20 20 69 6e 74 20 69 43 61 63 68 65 4c 65 76  .  int iCacheLev
20070 65 6c 3b 20 20 20 20 20 2f 2a 20 43 6f 6c 43 61  el;     /* ColCa
20080 63 68 65 20 76 61 6c 69 64 20 77 68 65 6e 20 61  che valid when a
20090 43 6f 6c 43 61 63 68 65 5b 5d 2e 69 4c 65 76 65  ColCache[].iLeve
200a0 6c 3c 3d 69 43 61 63 68 65 4c 65 76 65 6c 20 2a  l<=iCacheLevel *
200b0 2f 0a 20 20 69 6e 74 20 69 43 61 63 68 65 43 6e  /.  int iCacheCn
200c0 74 3b 20 20 20 20 20 20 20 2f 2a 20 43 6f 75 6e  t;       /* Coun
200d0 74 65 72 20 75 73 65 64 20 74 6f 20 67 65 6e 65  ter used to gene
200e0 72 61 74 65 20 61 43 6f 6c 43 61 63 68 65 5b 5d  rate aColCache[]
200f0 2e 6c 72 75 20 76 61 6c 75 65 73 20 2a 2f 0a 20  .lru values */. 
20100 20 69 6e 74 20 6e 4c 61 62 65 6c 3b 20 20 20 20   int nLabel;    
20110 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
20120 6f 66 20 6c 61 62 65 6c 73 20 75 73 65 64 20 2a  of labels used *
20130 2f 0a 20 20 69 6e 74 20 2a 61 4c 61 62 65 6c 3b  /.  int *aLabel;
20140 20 20 20 20 20 20 20 20 20 2f 2a 20 53 70 61 63           /* Spac
20150 65 20 74 6f 20 68 6f 6c 64 20 74 68 65 20 6c 61  e to hold the la
20160 62 65 6c 73 20 2a 2f 0a 20 20 45 78 70 72 4c 69  bels */.  ExprLi
20170 73 74 20 2a 70 43 6f 6e 73 74 45 78 70 72 3b 2f  st *pConstExpr;/
20180 2a 20 43 6f 6e 73 74 61 6e 74 20 65 78 70 72 65  * Constant expre
20190 73 73 69 6f 6e 73 20 2a 2f 0a 20 20 54 6f 6b 65  ssions */.  Toke
201a0 6e 20 63 6f 6e 73 74 72 61 69 6e 74 4e 61 6d 65  n constraintName
201b0 3b 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65 20  ;/* Name of the 
201c0 63 6f 6e 73 74 72 61 69 6e 74 20 63 75 72 72 65  constraint curre
201d0 6e 74 6c 79 20 62 65 69 6e 67 20 70 61 72 73 65  ntly being parse
201e0 64 20 2a 2f 0a 20 20 79 44 62 4d 61 73 6b 20 77  d */.  yDbMask w
201f0 72 69 74 65 4d 61 73 6b 3b 20 20 20 2f 2a 20 53  riteMask;   /* S
20200 74 61 72 74 20 61 20 77 72 69 74 65 20 74 72 61  tart a write tra
20210 6e 73 61 63 74 69 6f 6e 20 6f 6e 20 74 68 65 73  nsaction on thes
20220 65 20 64 61 74 61 62 61 73 65 73 20 2a 2f 0a 20  e databases */. 
20230 20 79 44 62 4d 61 73 6b 20 63 6f 6f 6b 69 65 4d   yDbMask cookieM
20240 61 73 6b 3b 20 20 2f 2a 20 42 69 74 6d 61 73 6b  ask;  /* Bitmask
20250 20 6f 66 20 73 63 68 65 6d 61 20 76 65 72 69 66   of schema verif
20260 69 65 64 20 64 61 74 61 62 61 73 65 73 20 2a 2f  ied databases */
20270 0a 20 20 69 6e 74 20 72 65 67 52 6f 77 69 64 3b  .  int regRowid;
20280 20 20 20 20 20 20 20 20 2f 2a 20 52 65 67 69 73          /* Regis
20290 74 65 72 20 68 6f 6c 64 69 6e 67 20 72 6f 77 69  ter holding rowi
202a0 64 20 6f 66 20 43 52 45 41 54 45 20 54 41 42 4c  d of CREATE TABL
202b0 45 20 65 6e 74 72 79 20 2a 2f 0a 20 20 69 6e 74  E entry */.  int
202c0 20 72 65 67 52 6f 6f 74 3b 20 20 20 20 20 20 20   regRoot;       
202d0 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20 68 6f    /* Register ho
202e0 6c 64 69 6e 67 20 72 6f 6f 74 20 70 61 67 65 20  lding root page 
202f0 6e 75 6d 62 65 72 20 66 6f 72 20 6e 65 77 20 6f  number for new o
20300 62 6a 65 63 74 73 20 2a 2f 0a 20 20 69 6e 74 20  bjects */.  int 
20310 6e 4d 61 78 41 72 67 3b 20 20 20 20 20 20 20 20  nMaxArg;        
20320 20 2f 2a 20 4d 61 78 20 61 72 67 73 20 70 61 73   /* Max args pas
20330 73 65 64 20 74 6f 20 75 73 65 72 20 66 75 6e 63  sed to user func
20340 74 69 6f 6e 20 62 79 20 73 75 62 2d 70 72 6f 67  tion by sub-prog
20350 72 61 6d 20 2a 2f 0a 23 69 66 20 53 45 4c 45 43  ram */.#if SELEC
20360 54 54 52 41 43 45 5f 45 4e 41 42 4c 45 44 0a 20  TTRACE_ENABLED. 
20370 20 69 6e 74 20 6e 53 65 6c 65 63 74 3b 20 20 20   int nSelect;   
20380 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
20390 6f 66 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d  of SELECT statem
203a0 65 6e 74 73 20 73 65 65 6e 20 2a 2f 0a 23 65 6e  ents seen */.#en
203b0 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  dif.#ifndef SQLI
203c0 54 45 5f 4f 4d 49 54 5f 53 48 41 52 45 44 5f 43  TE_OMIT_SHARED_C
203d0 41 43 48 45 0a 20 20 69 6e 74 20 6e 54 61 62 6c  ACHE.  int nTabl
203e0 65 4c 6f 63 6b 3b 20 20 20 20 20 20 20 20 2f 2a  eLock;        /*
203f0 20 4e 75 6d 62 65 72 20 6f 66 20 6c 6f 63 6b 73   Number of locks
20400 20 69 6e 20 61 54 61 62 6c 65 4c 6f 63 6b 20 2a   in aTableLock *
20410 2f 0a 20 20 54 61 62 6c 65 4c 6f 63 6b 20 2a 61  /.  TableLock *a
20420 54 61 62 6c 65 4c 6f 63 6b 3b 20 2f 2a 20 52 65  TableLock; /* Re
20430 71 75 69 72 65 64 20 74 61 62 6c 65 20 6c 6f 63  quired table loc
20440 6b 73 20 66 6f 72 20 73 68 61 72 65 64 2d 63 61  ks for shared-ca
20450 63 68 65 20 6d 6f 64 65 20 2a 2f 0a 23 65 6e 64  che mode */.#end
20460 69 66 0a 20 20 41 75 74 6f 69 6e 63 49 6e 66 6f  if.  AutoincInfo
20470 20 2a 70 41 69 6e 63 3b 20 20 2f 2a 20 49 6e 66   *pAinc;  /* Inf
20480 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 41  ormation about A
20490 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 63 6f 75  UTOINCREMENT cou
204a0 6e 74 65 72 73 20 2a 2f 0a 20 20 50 61 72 73 65  nters */.  Parse
204b0 20 2a 70 54 6f 70 6c 65 76 65 6c 3b 20 20 20 20   *pToplevel;    
204c0 2f 2a 20 50 61 72 73 65 20 73 74 72 75 63 74 75  /* Parse structu
204d0 72 65 20 66 6f 72 20 6d 61 69 6e 20 70 72 6f 67  re for main prog
204e0 72 61 6d 20 28 6f 72 20 4e 55 4c 4c 29 20 2a 2f  ram (or NULL) */
204f0 0a 20 20 54 61 62 6c 65 20 2a 70 54 72 69 67 67  .  Table *pTrigg
20500 65 72 54 61 62 3b 20 20 2f 2a 20 54 61 62 6c 65  erTab;  /* Table
20510 20 74 72 69 67 67 65 72 73 20 61 72 65 20 62 65   triggers are be
20520 69 6e 67 20 63 6f 64 65 64 20 66 6f 72 20 2a 2f  ing coded for */
20530 0a 20 20 69 6e 74 20 61 64 64 72 43 72 54 61 62  .  int addrCrTab
20540 3b 20 20 20 20 20 20 20 2f 2a 20 41 64 64 72 65  ;       /* Addre
20550 73 73 20 6f 66 20 4f 50 5f 43 72 65 61 74 65 42  ss of OP_CreateB
20560 74 72 65 65 20 6f 70 63 6f 64 65 20 6f 6e 20 43  tree opcode on C
20570 52 45 41 54 45 20 54 41 42 4c 45 20 2a 2f 0a 20  REATE TABLE */. 
20580 20 75 33 32 20 6e 51 75 65 72 79 4c 6f 6f 70 3b   u32 nQueryLoop;
20590 20 20 20 20 20 20 2f 2a 20 45 73 74 20 6e 75 6d        /* Est num
205a0 62 65 72 20 6f 66 20 69 74 65 72 61 74 69 6f 6e  ber of iteration
205b0 73 20 6f 66 20 61 20 71 75 65 72 79 20 28 31 30  s of a query (10
205c0 2a 6c 6f 67 32 28 4e 29 29 20 2a 2f 0a 20 20 75  *log2(N)) */.  u
205d0 33 32 20 6f 6c 64 6d 61 73 6b 3b 20 20 20 20 20  32 oldmask;     
205e0 20 20 20 20 2f 2a 20 4d 61 73 6b 20 6f 66 20 6f      /* Mask of o
205f0 6c 64 2e 2a 20 63 6f 6c 75 6d 6e 73 20 72 65 66  ld.* columns ref
20600 65 72 65 6e 63 65 64 20 2a 2f 0a 20 20 75 33 32  erenced */.  u32
20610 20 6e 65 77 6d 61 73 6b 3b 20 20 20 20 20 20 20   newmask;       
20620 20 20 2f 2a 20 4d 61 73 6b 20 6f 66 20 6e 65 77    /* Mask of new
20630 2e 2a 20 63 6f 6c 75 6d 6e 73 20 72 65 66 65 72  .* columns refer
20640 65 6e 63 65 64 20 2a 2f 0a 20 20 75 38 20 65 54  enced */.  u8 eT
20650 72 69 67 67 65 72 4f 70 3b 20 20 20 20 20 20 20  riggerOp;       
20660 2f 2a 20 54 4b 5f 55 50 44 41 54 45 2c 20 54 4b  /* TK_UPDATE, TK
20670 5f 49 4e 53 45 52 54 20 6f 72 20 54 4b 5f 44 45  _INSERT or TK_DE
20680 4c 45 54 45 20 2a 2f 0a 20 20 75 38 20 65 4f 72  LETE */.  u8 eOr
20690 63 6f 6e 66 3b 20 20 20 20 20 20 20 20 20 20 2f  conf;          /
206a0 2a 20 44 65 66 61 75 6c 74 20 4f 4e 20 43 4f 4e  * Default ON CON
206b0 46 4c 49 43 54 20 70 6f 6c 69 63 79 20 66 6f 72  FLICT policy for
206c0 20 74 72 69 67 67 65 72 20 73 74 65 70 73 20 2a   trigger steps *
206d0 2f 0a 20 20 75 38 20 64 69 73 61 62 6c 65 54 72  /.  u8 disableTr
206e0 69 67 67 65 72 73 3b 20 20 2f 2a 20 54 72 75 65  iggers;  /* True
206f0 20 74 6f 20 64 69 73 61 62 6c 65 20 74 72 69 67   to disable trig
20700 67 65 72 73 20 2a 2f 0a 0a 20 20 2f 2a 2a 2a 2a  gers */..  /****
20710 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
20720 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
20730 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
20740 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
20750 2a 2a 2a 2a 2a 2a 0a 20 20 2a 2a 20 46 69 65 6c  ******.  ** Fiel
20760 64 73 20 61 62 6f 76 65 20 6d 75 73 74 20 62 65  ds above must be
20770 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 74 6f 20   initialized to 
20780 7a 65 72 6f 2e 20 20 54 68 65 20 66 69 65 6c 64  zero.  The field
20790 73 20 74 68 61 74 20 66 6f 6c 6c 6f 77 2c 0a 20  s that follow,. 
207a0 20 2a 2a 20 64 6f 77 6e 20 74 6f 20 74 68 65 20   ** down to the 
207b0 62 65 67 69 6e 6e 69 6e 67 20 6f 66 20 74 68 65  beginning of the
207c0 20 72 65 63 75 72 73 69 76 65 20 73 65 63 74 69   recursive secti
207d0 6f 6e 2c 20 64 6f 20 6e 6f 74 20 6e 65 65 64 20  on, do not need 
207e0 74 6f 20 62 65 0a 20 20 2a 2a 20 69 6e 69 74 69  to be.  ** initi
207f0 61 6c 69 7a 65 64 20 61 73 20 74 68 65 79 20 77  alized as they w
20800 69 6c 6c 20 62 65 20 73 65 74 20 62 65 66 6f 72  ill be set befor
20810 65 20 62 65 69 6e 67 20 75 73 65 64 2e 20 20 54  e being used.  T
20820 68 65 20 62 6f 75 6e 64 61 72 79 20 69 73 0a 20  he boundary is. 
20830 20 2a 2a 20 64 65 74 65 72 6d 69 6e 65 64 20 62   ** determined b
20840 79 20 6f 66 66 73 65 74 6f 66 28 50 61 72 73 65  y offsetof(Parse
20850 2c 61 43 6f 6c 43 61 63 68 65 29 2e 0a 20 20 2a  ,aColCache)..  *
20860 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
20870 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
20880 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
20890 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
208a0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 20 20 73 74  *********/..  st
208b0 72 75 63 74 20 79 43 6f 6c 43 61 63 68 65 20 7b  ruct yColCache {
208c0 0a 20 20 20 20 69 6e 74 20 69 54 61 62 6c 65 3b  .    int iTable;
208d0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 61             /* Ta
208e0 62 6c 65 20 63 75 72 73 6f 72 20 6e 75 6d 62 65  ble cursor numbe
208f0 72 20 2a 2f 0a 20 20 20 20 69 31 36 20 69 43 6f  r */.    i16 iCo
20900 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20 20 20 2f  lumn;          /
20910 2a 20 54 61 62 6c 65 20 63 6f 6c 75 6d 6e 20 6e  * Table column n
20920 75 6d 62 65 72 20 2a 2f 0a 20 20 20 20 75 38 20  umber */.    u8 
20930 74 65 6d 70 52 65 67 3b 20 20 20 20 20 20 20 20  tempReg;        
20940 20 20 20 2f 2a 20 69 52 65 67 20 69 73 20 61 20     /* iReg is a 
20950 74 65 6d 70 20 72 65 67 69 73 74 65 72 20 74 68  temp register th
20960 61 74 20 6e 65 65 64 73 20 74 6f 20 62 65 20 66  at needs to be f
20970 72 65 65 64 20 2a 2f 0a 20 20 20 20 69 6e 74 20  reed */.    int 
20980 69 4c 65 76 65 6c 3b 20 20 20 20 20 20 20 20 20  iLevel;         
20990 20 20 2f 2a 20 4e 65 73 74 69 6e 67 20 6c 65 76    /* Nesting lev
209a0 65 6c 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 52  el */.    int iR
209b0 65 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  eg;             
209c0 2f 2a 20 52 65 67 20 77 69 74 68 20 76 61 6c 75  /* Reg with valu
209d0 65 20 6f 66 20 74 68 69 73 20 63 6f 6c 75 6d 6e  e of this column
209e0 2e 20 30 20 6d 65 61 6e 73 20 6e 6f 6e 65 2e 20  . 0 means none. 
209f0 2a 2f 0a 20 20 20 20 69 6e 74 20 6c 72 75 3b 20  */.    int lru; 
20a00 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
20a10 4c 65 61 73 74 20 72 65 63 65 6e 74 6c 79 20 75  Least recently u
20a20 73 65 64 20 65 6e 74 72 79 20 68 61 73 20 74 68  sed entry has th
20a30 65 20 73 6d 61 6c 6c 65 73 74 20 76 61 6c 75 65  e smallest value
20a40 20 2a 2f 0a 20 20 7d 20 61 43 6f 6c 43 61 63 68   */.  } aColCach
20a50 65 5b 53 51 4c 49 54 45 5f 4e 5f 43 4f 4c 43 41  e[SQLITE_N_COLCA
20a60 43 48 45 5d 3b 20 20 2f 2a 20 4f 6e 65 20 66 6f  CHE];  /* One fo
20a70 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 63 61  r each column ca
20a80 63 68 65 20 65 6e 74 72 79 20 2a 2f 0a 20 20 69  che entry */.  i
20a90 6e 74 20 61 54 65 6d 70 52 65 67 5b 38 5d 3b 20  nt aTempReg[8]; 
20aa0 20 20 20 20 20 20 20 2f 2a 20 48 6f 6c 64 69 6e         /* Holdin
20ab0 67 20 61 72 65 61 20 66 6f 72 20 74 65 6d 70 6f  g area for tempo
20ac0 72 61 72 79 20 72 65 67 69 73 74 65 72 73 20 2a  rary registers *
20ad0 2f 0a 20 20 54 6f 6b 65 6e 20 73 4e 61 6d 65 54  /.  Token sNameT
20ae0 6f 6b 65 6e 3b 20 20 20 20 20 20 20 2f 2a 20 54  oken;       /* T
20af0 6f 6b 65 6e 20 77 69 74 68 20 75 6e 71 75 61 6c  oken with unqual
20b00 69 66 69 65 64 20 73 63 68 65 6d 61 20 6f 62 6a  ified schema obj
20b10 65 63 74 20 6e 61 6d 65 20 2a 2f 0a 0a 20 20 2f  ect name */..  /
20b20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
20b30 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
20b40 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
20b50 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
20b60 2a 2a 2a 2a 2a 2a 2a 2a 0a 20 20 2a 2a 20 41 62  ********.  ** Ab
20b70 6f 76 65 20 69 73 20 63 6f 6e 73 74 61 6e 74 20  ove is constant 
20b80 62 65 74 77 65 65 6e 20 72 65 63 75 72 73 69 6f  between recursio
20b90 6e 73 2e 20 20 42 65 6c 6f 77 20 69 73 20 72 65  ns.  Below is re
20ba0 73 65 74 20 62 65 66 6f 72 65 20 61 6e 64 20 61  set before and a
20bb0 66 74 65 72 0a 20 20 2a 2a 20 65 61 63 68 20 72  fter.  ** each r
20bc0 65 63 75 72 73 69 6f 6e 2e 20 20 54 68 65 20 62  ecursion.  The b
20bd0 6f 75 6e 64 61 72 79 20 62 65 74 77 65 65 6e 20  oundary between 
20be0 74 68 65 73 65 20 74 77 6f 20 72 65 67 69 6f 6e  these two region
20bf0 73 20 69 73 20 64 65 74 65 72 6d 69 6e 65 64 0a  s is determined.
20c00 20 20 2a 2a 20 75 73 69 6e 67 20 6f 66 66 73 65    ** using offse
20c10 74 6f 66 28 50 61 72 73 65 2c 73 4c 61 73 74 54  tof(Parse,sLastT
20c20 6f 6b 65 6e 29 20 73 6f 20 74 68 65 20 73 4c 61  oken) so the sLa
20c30 73 74 54 6f 6b 65 6e 20 66 69 65 6c 64 20 6d 75  stToken field mu
20c40 73 74 20 62 65 20 74 68 65 0a 20 20 2a 2a 20 66  st be the.  ** f
20c50 69 72 73 74 20 66 69 65 6c 64 20 69 6e 20 74 68  irst field in th
20c60 65 20 72 65 63 75 72 73 69 76 65 20 72 65 67 69  e recursive regi
20c70 6f 6e 2e 0a 20 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  on..  **********
20c80 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
20c90 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
20ca0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
20cb0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a  **************/.
20cc0 0a 20 20 54 6f 6b 65 6e 20 73 4c 61 73 74 54 6f  .  Token sLastTo
20cd0 6b 65 6e 3b 20 20 20 20 20 20 20 2f 2a 20 54 68  ken;       /* Th
20ce0 65 20 6c 61 73 74 20 74 6f 6b 65 6e 20 70 61 72  e last token par
20cf0 73 65 64 20 2a 2f 0a 20 20 79 6e 56 61 72 20 6e  sed */.  ynVar n
20d00 56 61 72 3b 20 20 20 20 20 20 20 20 20 20 20 20  Var;            
20d10 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
20d20 27 3f 27 20 76 61 72 69 61 62 6c 65 73 20 73 65  '?' variables se
20d30 65 6e 20 69 6e 20 74 68 65 20 53 51 4c 20 73 6f  en in the SQL so
20d40 20 66 61 72 20 2a 2f 0a 20 20 75 38 20 69 50 6b   far */.  u8 iPk
20d50 53 6f 72 74 4f 72 64 65 72 3b 20 20 20 20 20 20  SortOrder;      
20d60 20 20 20 20 2f 2a 20 41 53 43 20 6f 72 20 44 45      /* ASC or DE
20d70 53 43 20 66 6f 72 20 49 4e 54 45 47 45 52 20 50  SC for INTEGER P
20d80 52 49 4d 41 52 59 20 4b 45 59 20 2a 2f 0a 20 20  RIMARY KEY */.  
20d90 75 38 20 65 78 70 6c 61 69 6e 3b 20 20 20 20 20  u8 explain;     
20da0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75            /* Tru
20db0 65 20 69 66 20 74 68 65 20 45 58 50 4c 41 49 4e  e if the EXPLAIN
20dc0 20 66 6c 61 67 20 69 73 20 66 6f 75 6e 64 20 6f   flag is found o
20dd0 6e 20 74 68 65 20 71 75 65 72 79 20 2a 2f 0a 23  n the query */.#
20de0 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
20df0 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a  IT_VIRTUALTABLE.
20e00 20 20 75 38 20 64 65 63 6c 61 72 65 56 74 61 62    u8 declareVtab
20e10 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54  ;           /* T
20e20 72 75 65 20 69 66 20 69 6e 73 69 64 65 20 73 71  rue if inside sq
20e30 6c 69 74 65 33 5f 64 65 63 6c 61 72 65 5f 76 74  lite3_declare_vt
20e40 61 62 28 29 20 2a 2f 0a 20 20 69 6e 74 20 6e 56  ab() */.  int nV
20e50 74 61 62 4c 6f 63 6b 3b 20 20 20 20 20 20 20 20  tabLock;        
20e60 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
20e70 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 73 20   virtual tables 
20e80 74 6f 20 6c 6f 63 6b 20 2a 2f 0a 23 65 6e 64 69  to lock */.#endi
20e90 66 0a 20 20 69 6e 74 20 6e 48 65 69 67 68 74 3b  f.  int nHeight;
20ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
20eb0 20 45 78 70 72 65 73 73 69 6f 6e 20 74 72 65 65   Expression tree
20ec0 20 68 65 69 67 68 74 20 6f 66 20 63 75 72 72 65   height of curre
20ed0 6e 74 20 73 75 62 2d 73 65 6c 65 63 74 20 2a 2f  nt sub-select */
20ee0 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
20ef0 4f 4d 49 54 5f 45 58 50 4c 41 49 4e 0a 20 20 69  OMIT_EXPLAIN.  i
20f00 6e 74 20 61 64 64 72 45 78 70 6c 61 69 6e 3b 20  nt addrExplain; 
20f10 20 20 20 20 20 20 20 20 20 2f 2a 20 41 64 64 72           /* Addr
20f20 65 73 73 20 6f 66 20 63 75 72 72 65 6e 74 20 4f  ess of current O
20f30 50 5f 45 78 70 6c 61 69 6e 20 6f 70 63 6f 64 65  P_Explain opcode
20f40 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 56 4c 69   */.#endif.  VLi
20f50 73 74 20 2a 70 56 4c 69 73 74 3b 20 20 20 20 20  st *pVList;     
20f60 20 20 20 20 20 20 20 2f 2a 20 4d 61 70 70 69 6e         /* Mappin
20f70 67 20 62 65 74 77 65 65 6e 20 76 61 72 69 61 62  g between variab
20f80 6c 65 20 6e 61 6d 65 73 20 61 6e 64 20 6e 75 6d  le names and num
20f90 62 65 72 73 20 2a 2f 0a 20 20 56 64 62 65 20 2a  bers */.  Vdbe *
20fa0 70 52 65 70 72 65 70 61 72 65 3b 20 20 20 20 20  pReprepare;     
20fb0 20 20 20 20 2f 2a 20 56 4d 20 62 65 69 6e 67 20      /* VM being 
20fc0 72 65 70 72 65 70 61 72 65 64 20 28 73 71 6c 69  reprepared (sqli
20fd0 74 65 33 52 65 70 72 65 70 61 72 65 28 29 29 20  te3Reprepare()) 
20fe0 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20  */.  const char 
20ff0 2a 7a 54 61 69 6c 3b 20 20 20 20 20 20 20 20 2f  *zTail;        /
21000 2a 20 41 6c 6c 20 53 51 4c 20 74 65 78 74 20 70  * All SQL text p
21010 61 73 74 20 74 68 65 20 6c 61 73 74 20 73 65 6d  ast the last sem
21020 69 63 6f 6c 6f 6e 20 70 61 72 73 65 64 20 2a 2f  icolon parsed */
21030 0a 20 20 54 61 62 6c 65 20 2a 70 4e 65 77 54 61  .  Table *pNewTa
21040 62 6c 65 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  ble;         /* 
21050 41 20 74 61 62 6c 65 20 62 65 69 6e 67 20 63 6f  A table being co
21060 6e 73 74 72 75 63 74 65 64 20 62 79 20 43 52 45  nstructed by CRE
21070 41 54 45 20 54 41 42 4c 45 20 2a 2f 0a 20 20 54  ATE TABLE */.  T
21080 72 69 67 67 65 72 20 2a 70 4e 65 77 54 72 69 67  rigger *pNewTrig
21090 67 65 72 3b 20 20 20 20 20 2f 2a 20 54 72 69 67  ger;     /* Trig
210a0 67 65 72 20 75 6e 64 65 72 20 63 6f 6e 73 74 72  ger under constr
210b0 75 63 74 20 62 79 20 61 20 43 52 45 41 54 45 20  uct by a CREATE 
210c0 54 52 49 47 47 45 52 20 2a 2f 0a 20 20 63 6f 6e  TRIGGER */.  con
210d0 73 74 20 63 68 61 72 20 2a 7a 41 75 74 68 43 6f  st char *zAuthCo
210e0 6e 74 65 78 74 3b 20 2f 2a 20 54 68 65 20 36 74  ntext; /* The 6t
210f0 68 20 70 61 72 61 6d 65 74 65 72 20 74 6f 20 64  h parameter to d
21100 62 2d 3e 78 41 75 74 68 20 63 61 6c 6c 62 61 63  b->xAuth callbac
21110 6b 73 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51  ks */.#ifndef SQ
21120 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
21130 4c 54 41 42 4c 45 0a 20 20 54 6f 6b 65 6e 20 73  LTABLE.  Token s
21140 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20  Arg;            
21150 20 20 20 2f 2a 20 43 6f 6d 70 6c 65 74 65 20 74     /* Complete t
21160 65 78 74 20 6f 66 20 61 20 6d 6f 64 75 6c 65 20  ext of a module 
21170 61 72 67 75 6d 65 6e 74 20 2a 2f 0a 20 20 54 61  argument */.  Ta
21180 62 6c 65 20 2a 2a 61 70 56 74 61 62 4c 6f 63 6b  ble **apVtabLock
21190 3b 20 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74  ;       /* Point
211a0 65 72 20 74 6f 20 76 69 72 74 75 61 6c 20 74 61  er to virtual ta
211b0 62 6c 65 73 20 6e 65 65 64 69 6e 67 20 6c 6f 63  bles needing loc
211c0 6b 69 6e 67 20 2a 2f 0a 23 65 6e 64 69 66 0a 20  king */.#endif. 
211d0 20 54 61 62 6c 65 20 2a 70 5a 6f 6d 62 69 65 54   Table *pZombieT
211e0 61 62 3b 20 20 20 20 20 20 20 20 2f 2a 20 4c 69  ab;        /* Li
211f0 73 74 20 6f 66 20 54 61 62 6c 65 20 6f 62 6a 65  st of Table obje
21200 63 74 73 20 74 6f 20 64 65 6c 65 74 65 20 61 66  cts to delete af
21210 74 65 72 20 63 6f 64 65 20 67 65 6e 20 2a 2f 0a  ter code gen */.
21220 20 20 54 72 69 67 67 65 72 50 72 67 20 2a 70 54    TriggerPrg *pT
21230 72 69 67 67 65 72 50 72 67 3b 20 20 2f 2a 20 4c  riggerPrg;  /* L
21240 69 6e 6b 65 64 20 6c 69 73 74 20 6f 66 20 63 6f  inked list of co
21250 64 65 64 20 74 72 69 67 67 65 72 73 20 2a 2f 0a  ded triggers */.
21260 20 20 57 69 74 68 20 2a 70 57 69 74 68 3b 20 20    With *pWith;  
21270 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43              /* C
21280 75 72 72 65 6e 74 20 57 49 54 48 20 63 6c 61 75  urrent WITH clau
21290 73 65 2c 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 20  se, or NULL */. 
212a0 20 57 69 74 68 20 2a 70 57 69 74 68 54 6f 46 72   With *pWithToFr
212b0 65 65 3b 20 20 20 20 20 20 20 20 2f 2a 20 46 72  ee;        /* Fr
212c0 65 65 20 74 68 69 73 20 57 49 54 48 20 6f 62 6a  ee this WITH obj
212d0 65 63 74 20 61 74 20 74 68 65 20 65 6e 64 20 6f  ect at the end o
212e0 66 20 74 68 65 20 70 61 72 73 65 20 2a 2f 0a 7d  f the parse */.}
212f0 3b 0a 0a 2f 2a 0a 2a 2a 20 53 69 7a 65 73 20 61  ;../*.** Sizes a
21300 6e 64 20 70 6f 69 6e 74 65 72 73 20 6f 66 20 76  nd pointers of v
21310 61 72 69 6f 75 73 20 70 61 72 74 73 20 6f 66 20  arious parts of 
21320 74 68 65 20 50 61 72 73 65 20 6f 62 6a 65 63 74  the Parse object
21330 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 50 41 52  ..*/.#define PAR
21340 53 45 5f 48 44 52 5f 53 5a 20 6f 66 66 73 65 74  SE_HDR_SZ offset
21350 6f 66 28 50 61 72 73 65 2c 61 43 6f 6c 43 61 63  of(Parse,aColCac
21360 68 65 29 20 2f 2a 20 52 65 63 75 72 73 69 76 65  he) /* Recursive
21370 20 70 61 72 74 20 77 2f 6f 20 61 43 6f 6c 43 61   part w/o aColCa
21380 63 68 65 2a 2f 0a 23 64 65 66 69 6e 65 20 50 41  che*/.#define PA
21390 52 53 45 5f 52 45 43 55 52 53 45 5f 53 5a 20 6f  RSE_RECURSE_SZ o
213a0 66 66 73 65 74 6f 66 28 50 61 72 73 65 2c 73 4c  ffsetof(Parse,sL
213b0 61 73 74 54 6f 6b 65 6e 29 20 20 20 20 2f 2a 20  astToken)    /* 
213c0 52 65 63 75 72 73 69 76 65 20 70 61 72 74 20 2a  Recursive part *
213d0 2f 0a 23 64 65 66 69 6e 65 20 50 41 52 53 45 5f  /.#define PARSE_
213e0 54 41 49 4c 5f 53 5a 20 28 73 69 7a 65 6f 66 28  TAIL_SZ (sizeof(
213f0 50 61 72 73 65 29 2d 50 41 52 53 45 5f 52 45 43  Parse)-PARSE_REC
21400 55 52 53 45 5f 53 5a 29 20 2f 2a 20 4e 6f 6e 2d  URSE_SZ) /* Non-
21410 72 65 63 75 72 73 69 76 65 20 70 61 72 74 20 2a  recursive part *
21420 2f 0a 23 64 65 66 69 6e 65 20 50 41 52 53 45 5f  /.#define PARSE_
21430 54 41 49 4c 28 58 29 20 28 28 28 63 68 61 72 2a  TAIL(X) (((char*
21440 29 28 58 29 29 2b 50 41 52 53 45 5f 52 45 43 55  )(X))+PARSE_RECU
21450 52 53 45 5f 53 5a 29 20 20 2f 2a 20 50 6f 69 6e  RSE_SZ)  /* Poin
21460 74 65 72 20 74 6f 20 74 61 69 6c 20 2a 2f 0a 0a  ter to tail */..
21470 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74 72 75  /*.** Return tru
21480 65 20 69 66 20 63 75 72 72 65 6e 74 6c 79 20 69  e if currently i
21490 6e 73 69 64 65 20 61 6e 20 73 71 6c 69 74 65 33  nside an sqlite3
214a0 5f 64 65 63 6c 61 72 65 5f 76 74 61 62 28 29 20  _declare_vtab() 
214b0 63 61 6c 6c 2e 0a 2a 2f 0a 23 69 66 64 65 66 20  call..*/.#ifdef 
214c0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
214d0 55 41 4c 54 41 42 4c 45 0a 20 20 23 64 65 66 69  UALTABLE.  #defi
214e0 6e 65 20 49 4e 5f 44 45 43 4c 41 52 45 5f 56 54  ne IN_DECLARE_VT
214f0 41 42 20 30 0a 23 65 6c 73 65 0a 20 20 23 64 65  AB 0.#else.  #de
21500 66 69 6e 65 20 49 4e 5f 44 45 43 4c 41 52 45 5f  fine IN_DECLARE_
21510 56 54 41 42 20 28 70 50 61 72 73 65 2d 3e 64 65  VTAB (pParse->de
21520 63 6c 61 72 65 56 74 61 62 29 0a 23 65 6e 64 69  clareVtab).#endi
21530 66 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74  f../*.** An inst
21540 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c  ance of the foll
21550 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 20  owing structure 
21560 63 61 6e 20 62 65 20 64 65 63 6c 61 72 65 64 20  can be declared 
21570 6f 6e 20 61 20 73 74 61 63 6b 20 61 6e 64 20 75  on a stack and u
21580 73 65 64 0a 2a 2a 20 74 6f 20 73 61 76 65 20 74  sed.** to save t
21590 68 65 20 50 61 72 73 65 2e 7a 41 75 74 68 43 6f  he Parse.zAuthCo
215a0 6e 74 65 78 74 20 76 61 6c 75 65 20 73 6f 20 74  ntext value so t
215b0 68 61 74 20 69 74 20 63 61 6e 20 62 65 20 72 65  hat it can be re
215c0 73 74 6f 72 65 64 20 6c 61 74 65 72 2e 0a 2a 2f  stored later..*/
215d0 0a 73 74 72 75 63 74 20 41 75 74 68 43 6f 6e 74  .struct AuthCont
215e0 65 78 74 20 7b 0a 20 20 63 6f 6e 73 74 20 63 68  ext {.  const ch
215f0 61 72 20 2a 7a 41 75 74 68 43 6f 6e 74 65 78 74  ar *zAuthContext
21600 3b 20 20 20 2f 2a 20 50 75 74 20 73 61 76 65 64  ;   /* Put saved
21610 20 50 61 72 73 65 2e 7a 41 75 74 68 43 6f 6e 74   Parse.zAuthCont
21620 65 78 74 20 68 65 72 65 20 2a 2f 0a 20 20 50 61  ext here */.  Pa
21630 72 73 65 20 2a 70 50 61 72 73 65 3b 20 20 20 20  rse *pParse;    
21640 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
21650 20 50 61 72 73 65 20 73 74 72 75 63 74 75 72 65   Parse structure
21660 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 42 69   */.};../*.** Bi
21670 74 66 69 65 6c 64 20 66 6c 61 67 73 20 66 6f 72  tfield flags for
21680 20 50 35 20 76 61 6c 75 65 20 69 6e 20 76 61 72   P5 value in var
21690 69 6f 75 73 20 6f 70 63 6f 64 65 73 2e 0a 2a 2a  ious opcodes..**
216a0 0a 2a 2a 20 56 61 6c 75 65 20 63 6f 6e 73 74 72  .** Value constr
216b0 61 69 6e 74 73 20 28 65 6e 66 6f 72 63 65 64 20  aints (enforced 
216c0 76 69 61 20 61 73 73 65 72 74 28 29 29 3a 0a 2a  via assert()):.*
216d0 2a 20 20 20 20 4f 50 46 4c 41 47 5f 4c 45 4e 47  *    OPFLAG_LENG
216e0 54 48 41 52 47 20 20 20 20 3d 3d 20 53 51 4c 49  THARG    == SQLI
216f0 54 45 5f 46 55 4e 43 5f 4c 45 4e 47 54 48 0a 2a  TE_FUNC_LENGTH.*
21700 2a 20 20 20 20 4f 50 46 4c 41 47 5f 54 59 50 45  *    OPFLAG_TYPE
21710 4f 46 41 52 47 20 20 20 20 3d 3d 20 53 51 4c 49  OFARG    == SQLI
21720 54 45 5f 46 55 4e 43 5f 54 59 50 45 4f 46 0a 2a  TE_FUNC_TYPEOF.*
21730 2a 20 20 20 20 4f 50 46 4c 41 47 5f 42 55 4c 4b  *    OPFLAG_BULK
21740 43 53 52 20 20 20 20 20 20 3d 3d 20 42 54 52 45  CSR      == BTRE
21750 45 5f 42 55 4c 4b 4c 4f 41 44 0a 2a 2a 20 20 20  E_BULKLOAD.**   
21760 20 4f 50 46 4c 41 47 5f 53 45 45 4b 45 51 20 20   OPFLAG_SEEKEQ  
21770 20 20 20 20 20 3d 3d 20 42 54 52 45 45 5f 53 45       == BTREE_SE
21780 45 4b 5f 45 51 0a 2a 2a 20 20 20 20 4f 50 46 4c  EK_EQ.**    OPFL
21790 41 47 5f 46 4f 52 44 45 4c 45 54 45 20 20 20 20  AG_FORDELETE    
217a0 3d 3d 20 42 54 52 45 45 5f 46 4f 52 44 45 4c 45  == BTREE_FORDELE
217b0 54 45 0a 2a 2a 20 20 20 20 4f 50 46 4c 41 47 5f  TE.**    OPFLAG_
217c0 53 41 56 45 50 4f 53 49 54 49 4f 4e 20 3d 3d 20  SAVEPOSITION == 
217d0 42 54 52 45 45 5f 53 41 56 45 50 4f 53 49 54 49  BTREE_SAVEPOSITI
217e0 4f 4e 0a 2a 2a 20 20 20 20 4f 50 46 4c 41 47 5f  ON.**    OPFLAG_
217f0 41 55 58 44 45 4c 45 54 45 20 20 20 20 3d 3d 20  AUXDELETE    == 
21800 42 54 52 45 45 5f 41 55 58 44 45 4c 45 54 45 0a  BTREE_AUXDELETE.
21810 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41  */.#define OPFLA
21820 47 5f 4e 43 48 41 4e 47 45 20 20 20 20 20 20 20  G_NCHANGE       
21830 30 78 30 31 20 20 20 20 2f 2a 20 4f 50 5f 49 6e  0x01    /* OP_In
21840 73 65 72 74 3a 20 53 65 74 20 74 6f 20 75 70 64  sert: Set to upd
21850 61 74 65 20 64 62 2d 3e 6e 43 68 61 6e 67 65 20  ate db->nChange 
21860 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  */.             
21870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21880 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 73 6f 20          /* Also 
21890 75 73 65 64 20 69 6e 20 50 32 20 28 6e 6f 74 20  used in P2 (not 
218a0 50 35 29 20 6f 66 20 4f 50 5f 44 65 6c 65 74 65  P5) of OP_Delete
218b0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c   */.#define OPFL
218c0 41 47 5f 45 50 48 45 4d 20 20 20 20 20 20 20 20  AG_EPHEM        
218d0 20 30 78 30 31 20 20 20 20 2f 2a 20 4f 50 5f 43   0x01    /* OP_C
218e0 6f 6c 75 6d 6e 3a 20 45 70 68 65 6d 65 72 61 6c  olumn: Ephemeral
218f0 20 6f 75 74 70 75 74 20 69 73 20 6f 6b 20 2a 2f   output is ok */
21900 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f  .#define OPFLAG_
21910 4c 41 53 54 52 4f 57 49 44 20 20 20 20 20 30 78  LASTROWID     0x
21920 32 30 20 20 20 20 2f 2a 20 53 65 74 20 74 6f 20  20    /* Set to 
21930 75 70 64 61 74 65 20 64 62 2d 3e 6c 61 73 74 52  update db->lastR
21940 6f 77 69 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20  owid */.#define 
21950 4f 50 46 4c 41 47 5f 49 53 55 50 44 41 54 45 20  OPFLAG_ISUPDATE 
21960 20 20 20 20 20 30 78 30 34 20 20 20 20 2f 2a 20       0x04    /* 
21970 54 68 69 73 20 4f 50 5f 49 6e 73 65 72 74 20 69  This OP_Insert i
21980 73 20 61 6e 20 73 71 6c 20 55 50 44 41 54 45 20  s an sql UPDATE 
21990 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41  */.#define OPFLA
219a0 47 5f 41 50 50 45 4e 44 20 20 20 20 20 20 20 20  G_APPEND        
219b0 30 78 30 38 20 20 20 20 2f 2a 20 54 68 69 73 20  0x08    /* This 
219c0 69 73 20 6c 69 6b 65 6c 79 20 74 6f 20 62 65 20  is likely to be 
219d0 61 6e 20 61 70 70 65 6e 64 20 2a 2f 0a 23 64 65  an append */.#de
219e0 66 69 6e 65 20 4f 50 46 4c 41 47 5f 55 53 45 53  fine OPFLAG_USES
219f0 45 45 4b 52 45 53 55 4c 54 20 30 78 31 30 20 20  EEKRESULT 0x10  
21a00 20 20 2f 2a 20 54 72 79 20 74 6f 20 61 76 6f 69    /* Try to avoi
21a10 64 20 61 20 73 65 65 6b 20 69 6e 20 42 74 72 65  d a seek in Btre
21a20 65 49 6e 73 65 72 74 28 29 20 2a 2f 0a 23 64 65  eInsert() */.#de
21a30 66 69 6e 65 20 4f 50 46 4c 41 47 5f 49 53 4e 4f  fine OPFLAG_ISNO
21a40 4f 50 20 20 20 20 20 20 20 20 30 78 34 30 20 20  OP        0x40  
21a50 20 20 2f 2a 20 4f 50 5f 44 65 6c 65 74 65 20 64    /* OP_Delete d
21a60 6f 65 73 20 70 72 65 2d 75 70 64 61 74 65 2d 68  oes pre-update-h
21a70 6f 6f 6b 20 6f 6e 6c 79 20 2a 2f 0a 23 64 65 66  ook only */.#def
21a80 69 6e 65 20 4f 50 46 4c 41 47 5f 4c 45 4e 47 54  ine OPFLAG_LENGT
21a90 48 41 52 47 20 20 20 20 20 30 78 34 30 20 20 20  HARG     0x40   
21aa0 20 2f 2a 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 6e   /* OP_Column on
21ab0 6c 79 20 75 73 65 64 20 66 6f 72 20 6c 65 6e 67  ly used for leng
21ac0 74 68 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20  th() */.#define 
21ad0 4f 50 46 4c 41 47 5f 54 59 50 45 4f 46 41 52 47  OPFLAG_TYPEOFARG
21ae0 20 20 20 20 20 30 78 38 30 20 20 20 20 2f 2a 20       0x80    /* 
21af0 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 6e 6c 79 20 75  OP_Column only u
21b00 73 65 64 20 66 6f 72 20 74 79 70 65 6f 66 28 29  sed for typeof()
21b10 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c   */.#define OPFL
21b20 41 47 5f 42 55 4c 4b 43 53 52 20 20 20 20 20 20  AG_BULKCSR      
21b30 20 30 78 30 31 20 20 20 20 2f 2a 20 4f 50 5f 4f   0x01    /* OP_O
21b40 70 65 6e 2a 2a 20 75 73 65 64 20 74 6f 20 6f 70  pen** used to op
21b50 65 6e 20 62 75 6c 6b 20 63 75 72 73 6f 72 20 2a  en bulk cursor *
21b60 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47  /.#define OPFLAG
21b70 5f 53 45 45 4b 45 51 20 20 20 20 20 20 20 20 30  _SEEKEQ        0
21b80 78 30 32 20 20 20 20 2f 2a 20 4f 50 5f 4f 70 65  x02    /* OP_Ope
21b90 6e 2a 2a 20 63 75 72 73 6f 72 20 75 73 65 73 20  n** cursor uses 
21ba0 45 51 20 73 65 65 6b 20 6f 6e 6c 79 20 2a 2f 0a  EQ seek only */.
21bb0 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 46  #define OPFLAG_F
21bc0 4f 52 44 45 4c 45 54 45 20 20 20 20 20 30 78 30  ORDELETE     0x0
21bd0 38 20 20 20 20 2f 2a 20 4f 50 5f 4f 70 65 6e 20  8    /* OP_Open 
21be0 73 68 6f 75 6c 64 20 75 73 65 20 42 54 52 45 45  should use BTREE
21bf0 5f 46 4f 52 44 45 4c 45 54 45 20 2a 2f 0a 23 64  _FORDELETE */.#d
21c00 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 50 32 49  efine OPFLAG_P2I
21c10 53 52 45 47 20 20 20 20 20 20 20 30 78 31 30 20  SREG       0x10 
21c20 20 20 20 2f 2a 20 50 32 20 74 6f 20 4f 50 5f 4f     /* P2 to OP_O
21c30 70 65 6e 2a 2a 20 69 73 20 61 20 72 65 67 69 73  pen** is a regis
21c40 74 65 72 20 6e 75 6d 62 65 72 20 2a 2f 0a 23 64  ter number */.#d
21c50 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 50 45 52  efine OPFLAG_PER
21c60 4d 55 54 45 20 20 20 20 20 20 20 30 78 30 31 20  MUTE       0x01 
21c70 20 20 20 2f 2a 20 4f 50 5f 43 6f 6d 70 61 72 65     /* OP_Compare
21c80 3a 20 75 73 65 20 74 68 65 20 70 65 72 6d 75 74  : use the permut
21c90 61 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65  ation */.#define
21ca0 20 4f 50 46 4c 41 47 5f 53 41 56 45 50 4f 53 49   OPFLAG_SAVEPOSI
21cb0 54 49 4f 4e 20 20 30 78 30 32 20 20 20 20 2f 2a  TION  0x02    /*
21cc0 20 4f 50 5f 44 65 6c 65 74 65 2f 49 6e 73 65 72   OP_Delete/Inser
21cd0 74 3a 20 73 61 76 65 20 63 75 72 73 6f 72 20 70  t: save cursor p
21ce0 6f 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50  os */.#define OP
21cf0 46 4c 41 47 5f 41 55 58 44 45 4c 45 54 45 20 20  FLAG_AUXDELETE  
21d00 20 20 20 30 78 30 34 20 20 20 20 2f 2a 20 4f 50     0x04    /* OP
21d10 5f 44 65 6c 65 74 65 3a 20 69 6e 64 65 78 20 69  _Delete: index i
21d20 6e 20 61 20 44 45 4c 45 54 45 20 6f 70 20 2a 2f  n a DELETE op */
21d30 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f  .#define OPFLAG_
21d40 4e 4f 43 48 4e 47 5f 4d 41 47 49 43 20 20 30 78  NOCHNG_MAGIC  0x
21d50 36 64 20 20 20 20 2f 2a 20 4f 50 5f 4d 61 6b 65  6d    /* OP_Make
21d60 52 65 63 6f 72 64 3a 20 73 65 72 69 61 6c 74 79  Record: serialty
21d70 70 65 20 31 30 20 69 73 20 6f 6b 20 2a 2f 0a 0a  pe 10 is ok */..
21d80 2f 2a 0a 20 2a 20 45 61 63 68 20 74 72 69 67 67  /*. * Each trigg
21d90 65 72 20 70 72 65 73 65 6e 74 20 69 6e 20 74 68  er present in th
21da0 65 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d  e database schem
21db0 61 20 69 73 20 73 74 6f 72 65 64 20 61 73 20 61  a is stored as a
21dc0 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 0a 20 2a  n instance of. *
21dd0 20 73 74 72 75 63 74 20 54 72 69 67 67 65 72 2e   struct Trigger.
21de0 0a 20 2a 0a 20 2a 20 50 6f 69 6e 74 65 72 73 20  . *. * Pointers 
21df0 74 6f 20 69 6e 73 74 61 6e 63 65 73 20 6f 66 20  to instances of 
21e00 73 74 72 75 63 74 20 54 72 69 67 67 65 72 20 61  struct Trigger a
21e10 72 65 20 73 74 6f 72 65 64 20 69 6e 20 74 77 6f  re stored in two
21e20 20 77 61 79 73 2e 0a 20 2a 20 31 2e 20 49 6e 20   ways.. * 1. In 
21e30 74 68 65 20 22 74 72 69 67 48 61 73 68 22 20 68  the "trigHash" h
21e40 61 73 68 20 74 61 62 6c 65 20 28 70 61 72 74 20  ash table (part 
21e50 6f 66 20 74 68 65 20 73 71 6c 69 74 65 33 2a 20  of the sqlite3* 
21e60 74 68 61 74 20 72 65 70 72 65 73 65 6e 74 73 20  that represents 
21e70 74 68 65 0a 20 2a 20 20 20 20 64 61 74 61 62 61  the. *    databa
21e80 73 65 29 2e 20 54 68 69 73 20 61 6c 6c 6f 77 73  se). This allows
21e90 20 54 72 69 67 67 65 72 20 73 74 72 75 63 74 75   Trigger structu
21ea0 72 65 73 20 74 6f 20 62 65 20 72 65 74 72 69 65  res to be retrie
21eb0 76 65 64 20 62 79 20 6e 61 6d 65 2e 0a 20 2a 20  ved by name.. * 
21ec0 32 2e 20 41 6c 6c 20 74 72 69 67 67 65 72 73 20  2. All triggers 
21ed0 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20  associated with 
21ee0 61 20 73 69 6e 67 6c 65 20 74 61 62 6c 65 20 66  a single table f
21ef0 6f 72 6d 20 61 20 6c 69 6e 6b 65 64 20 6c 69 73  orm a linked lis
21f00 74 2c 20 75 73 69 6e 67 20 74 68 65 0a 20 2a 20  t, using the. * 
21f10 20 20 20 70 4e 65 78 74 20 6d 65 6d 62 65 72 20     pNext member 
21f20 6f 66 20 73 74 72 75 63 74 20 54 72 69 67 67 65  of struct Trigge
21f30 72 2e 20 41 20 70 6f 69 6e 74 65 72 20 74 6f 20  r. A pointer to 
21f40 74 68 65 20 66 69 72 73 74 20 65 6c 65 6d 65 6e  the first elemen
21f50 74 20 6f 66 20 74 68 65 0a 20 2a 20 20 20 20 6c  t of the. *    l
21f60 69 6e 6b 65 64 20 6c 69 73 74 20 69 73 20 73 74  inked list is st
21f70 6f 72 65 64 20 61 73 20 74 68 65 20 22 70 54 72  ored as the "pTr
21f80 69 67 67 65 72 22 20 6d 65 6d 62 65 72 20 6f 66  igger" member of
21f90 20 74 68 65 20 61 73 73 6f 63 69 61 74 65 64 0a   the associated.
21fa0 20 2a 20 20 20 20 73 74 72 75 63 74 20 54 61 62   *    struct Tab
21fb0 6c 65 2e 0a 20 2a 0a 20 2a 20 54 68 65 20 22 73  le.. *. * The "s
21fc0 74 65 70 5f 6c 69 73 74 22 20 6d 65 6d 62 65 72  tep_list" member
21fd0 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 66   points to the f
21fe0 69 72 73 74 20 65 6c 65 6d 65 6e 74 20 6f 66 20  irst element of 
21ff0 61 20 6c 69 6e 6b 65 64 20 6c 69 73 74 0a 20 2a  a linked list. *
22000 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20   containing the 
22010 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 73  SQL statements s
22020 70 65 63 69 66 69 65 64 20 61 73 20 74 68 65 20  pecified as the 
22030 74 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d 2e  trigger program.
22040 0a 20 2a 2f 0a 73 74 72 75 63 74 20 54 72 69 67  . */.struct Trig
22050 67 65 72 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e  ger {.  char *zN
22060 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ame;            
22070 2f 2a 20 54 68 65 20 6e 61 6d 65 20 6f 66 20 74  /* The name of t
22080 68 65 20 74 72 69 67 67 65 72 20 20 20 20 20 20  he trigger      
22090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
220a0 20 20 2a 2f 0a 20 20 63 68 61 72 20 2a 74 61 62    */.  char *tab
220b0 6c 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  le;            /
220c0 2a 20 54 68 65 20 74 61 62 6c 65 20 6f 72 20 76  * The table or v
220d0 69 65 77 20 74 6f 20 77 68 69 63 68 20 74 68 65  iew to which the
220e0 20 74 72 69 67 67 65 72 20 61 70 70 6c 69 65 73   trigger applies
220f0 20 2a 2f 0a 20 20 75 38 20 6f 70 3b 20 20 20 20   */.  u8 op;    
22100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
22110 20 4f 6e 65 20 6f 66 20 54 4b 5f 44 45 4c 45 54   One of TK_DELET
22120 45 2c 20 54 4b 5f 55 50 44 41 54 45 2c 20 54 4b  E, TK_UPDATE, TK
22130 5f 49 4e 53 45 52 54 20 20 20 20 20 20 20 20 20  _INSERT         
22140 2a 2f 0a 20 20 75 38 20 74 72 5f 74 6d 3b 20 20  */.  u8 tr_tm;  
22150 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
22160 4f 6e 65 20 6f 66 20 54 52 49 47 47 45 52 5f 42  One of TRIGGER_B
22170 45 46 4f 52 45 2c 20 54 52 49 47 47 45 52 5f 41  EFORE, TRIGGER_A
22180 46 54 45 52 20 2a 2f 0a 20 20 45 78 70 72 20 2a  FTER */.  Expr *
22190 70 57 68 65 6e 3b 20 20 20 20 20 20 20 20 20 20  pWhen;          
221a0 20 20 2f 2a 20 54 68 65 20 57 48 45 4e 20 63 6c    /* The WHEN cl
221b0 61 75 73 65 20 6f 66 20 74 68 65 20 65 78 70 72  ause of the expr
221c0 65 73 73 69 6f 6e 20 28 6d 61 79 20 62 65 20 4e  ession (may be N
221d0 55 4c 4c 29 20 2a 2f 0a 20 20 49 64 4c 69 73 74  ULL) */.  IdList
221e0 20 2a 70 43 6f 6c 75 6d 6e 73 3b 20 20 20 20 20   *pColumns;     
221f0 20 20 2f 2a 20 49 66 20 74 68 69 73 20 69 73 20    /* If this is 
22200 61 6e 20 55 50 44 41 54 45 20 4f 46 20 3c 63 6f  an UPDATE OF <co
22210 6c 75 6d 6e 2d 6c 69 73 74 3e 20 74 72 69 67 67  lumn-list> trigg
22220 65 72 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  er,.            
22230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22240 20 74 68 65 20 3c 63 6f 6c 75 6d 6e 2d 6c 69 73   the <column-lis
22250 74 3e 20 69 73 20 73 74 6f 72 65 64 20 68 65 72  t> is stored her
22260 65 20 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70  e */.  Schema *p
22270 53 63 68 65 6d 61 3b 20 20 20 20 20 20 20 20 2f  Schema;        /
22280 2a 20 53 63 68 65 6d 61 20 63 6f 6e 74 61 69 6e  * Schema contain
22290 69 6e 67 20 74 68 65 20 74 72 69 67 67 65 72 20  ing the trigger 
222a0 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70 54 61  */.  Schema *pTa
222b0 62 53 63 68 65 6d 61 3b 20 20 20 20 20 2f 2a 20  bSchema;     /* 
222c0 53 63 68 65 6d 61 20 63 6f 6e 74 61 69 6e 69 6e  Schema containin
222d0 67 20 74 68 65 20 74 61 62 6c 65 20 2a 2f 0a 20  g the table */. 
222e0 20 54 72 69 67 67 65 72 53 74 65 70 20 2a 73 74   TriggerStep *st
222f0 65 70 5f 6c 69 73 74 3b 20 2f 2a 20 4c 69 6e 6b  ep_list; /* Link
22300 20 6c 69 73 74 20 6f 66 20 74 72 69 67 67 65 72   list of trigger
22310 20 70 72 6f 67 72 61 6d 20 73 74 65 70 73 20 20   program steps  
22320 20 20 20 20 20 20 20 20 20 20 20 2a 2f 0a 20 20             */.  
22330 54 72 69 67 67 65 72 20 2a 70 4e 65 78 74 3b 20  Trigger *pNext; 
22340 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20          /* Next 
22350 74 72 69 67 67 65 72 20 61 73 73 6f 63 69 61 74  trigger associat
22360 65 64 20 77 69 74 68 20 74 68 65 20 74 61 62 6c  ed with the tabl
22370 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41  e */.};../*.** A
22380 20 74 72 69 67 67 65 72 20 69 73 20 65 69 74 68   trigger is eith
22390 65 72 20 61 20 42 45 46 4f 52 45 20 6f 72 20 61  er a BEFORE or a
223a0 6e 20 41 46 54 45 52 20 74 72 69 67 67 65 72 2e  n AFTER trigger.
223b0 20 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20    The following 
223c0 63 6f 6e 73 74 61 6e 74 73 0a 2a 2a 20 64 65 74  constants.** det
223d0 65 72 6d 69 6e 65 20 77 68 69 63 68 2e 0a 2a 2a  ermine which..**
223e0 0a 2a 2a 20 49 66 20 74 68 65 72 65 20 61 72 65  .** If there are
223f0 20 6d 75 6c 74 69 70 6c 65 20 74 72 69 67 67 65   multiple trigge
22400 72 73 2c 20 79 6f 75 20 6d 69 67 68 74 20 6f 66  rs, you might of
22410 20 73 6f 6d 65 20 42 45 46 4f 52 45 20 61 6e 64   some BEFORE and
22420 20 73 6f 6d 65 20 41 46 54 45 52 2e 0a 2a 2a 20   some AFTER..** 
22430 49 6e 20 74 68 61 74 20 63 61 73 65 73 2c 20 74  In that cases, t
22440 68 65 20 63 6f 6e 73 74 61 6e 74 73 20 62 65 6c  he constants bel
22450 6f 77 20 63 61 6e 20 62 65 20 4f 52 65 64 20 74  ow can be ORed t
22460 6f 67 65 74 68 65 72 2e 0a 2a 2f 0a 23 64 65 66  ogether..*/.#def
22470 69 6e 65 20 54 52 49 47 47 45 52 5f 42 45 46 4f  ine TRIGGER_BEFO
22480 52 45 20 20 31 0a 23 64 65 66 69 6e 65 20 54 52  RE  1.#define TR
22490 49 47 47 45 52 5f 41 46 54 45 52 20 20 20 32 0a  IGGER_AFTER   2.
224a0 0a 2f 2a 0a 20 2a 20 41 6e 20 69 6e 73 74 61 6e  ./*. * An instan
224b0 63 65 20 6f 66 20 73 74 72 75 63 74 20 54 72 69  ce of struct Tri
224c0 67 67 65 72 53 74 65 70 20 69 73 20 75 73 65 64  ggerStep is used
224d0 20 74 6f 20 73 74 6f 72 65 20 61 20 73 69 6e 67   to store a sing
224e0 6c 65 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74  le SQL statement
224f0 0a 20 2a 20 74 68 61 74 20 69 73 20 61 20 70 61  . * that is a pa
22500 72 74 20 6f 66 20 61 20 74 72 69 67 67 65 72 2d  rt of a trigger-
22510 70 72 6f 67 72 61 6d 2e 0a 20 2a 0a 20 2a 20 49  program.. *. * I
22520 6e 73 74 61 6e 63 65 73 20 6f 66 20 73 74 72 75  nstances of stru
22530 63 74 20 54 72 69 67 67 65 72 53 74 65 70 20 61  ct TriggerStep a
22540 72 65 20 73 74 6f 72 65 64 20 69 6e 20 61 20 73  re stored in a s
22550 69 6e 67 6c 79 20 6c 69 6e 6b 65 64 20 6c 69 73  ingly linked lis
22560 74 20 28 6c 69 6e 6b 65 64 0a 20 2a 20 75 73 69  t (linked. * usi
22570 6e 67 20 74 68 65 20 22 70 4e 65 78 74 22 20 6d  ng the "pNext" m
22580 65 6d 62 65 72 29 20 72 65 66 65 72 65 6e 63 65  ember) reference
22590 64 20 62 79 20 74 68 65 20 22 73 74 65 70 5f 6c  d by the "step_l
225a0 69 73 74 22 20 6d 65 6d 62 65 72 20 6f 66 20 74  ist" member of t
225b0 68 65 0a 20 2a 20 61 73 73 6f 63 69 61 74 65 64  he. * associated
225c0 20 73 74 72 75 63 74 20 54 72 69 67 67 65 72 20   struct Trigger 
225d0 69 6e 73 74 61 6e 63 65 2e 20 54 68 65 20 66 69  instance. The fi
225e0 72 73 74 20 65 6c 65 6d 65 6e 74 20 6f 66 20 74  rst element of t
225f0 68 65 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 69  he linked list i
22600 73 0a 20 2a 20 74 68 65 20 66 69 72 73 74 20 73  s. * the first s
22610 74 65 70 20 6f 66 20 74 68 65 20 74 72 69 67 67  tep of the trigg
22620 65 72 2d 70 72 6f 67 72 61 6d 2e 0a 20 2a 0a 20  er-program.. *. 
22630 2a 20 54 68 65 20 22 6f 70 22 20 6d 65 6d 62 65  * The "op" membe
22640 72 20 69 6e 64 69 63 61 74 65 73 20 77 68 65 74  r indicates whet
22650 68 65 72 20 74 68 69 73 20 69 73 20 61 20 22 44  her this is a "D
22660 45 4c 45 54 45 22 2c 20 22 49 4e 53 45 52 54 22  ELETE", "INSERT"
22670 2c 20 22 55 50 44 41 54 45 22 20 6f 72 0a 20 2a  , "UPDATE" or. *
22680 20 22 53 45 4c 45 43 54 22 20 73 74 61 74 65 6d   "SELECT" statem
22690 65 6e 74 2e 20 54 68 65 20 6d 65 61 6e 69 6e 67  ent. The meaning
226a0 73 20 6f 66 20 74 68 65 20 6f 74 68 65 72 20 6d  s of the other m
226b0 65 6d 62 65 72 73 20 69 73 20 64 65 74 65 72 6d  embers is determ
226c0 69 6e 65 64 20 62 79 20 74 68 65 0a 20 2a 20 76  ined by the. * v
226d0 61 6c 75 65 20 6f 66 20 22 6f 70 22 20 61 73 20  alue of "op" as 
226e0 66 6f 6c 6c 6f 77 73 3a 0a 20 2a 0a 20 2a 20 28  follows:. *. * (
226f0 6f 70 20 3d 3d 20 54 4b 5f 49 4e 53 45 52 54 29  op == TK_INSERT)
22700 0a 20 2a 20 6f 72 63 6f 6e 66 20 20 20 20 2d 3e  . * orconf    ->
22710 20 73 74 6f 72 65 73 20 74 68 65 20 4f 4e 20 43   stores the ON C
22720 4f 4e 46 4c 49 43 54 20 61 6c 67 6f 72 69 74 68  ONFLICT algorith
22730 6d 0a 20 2a 20 70 53 65 6c 65 63 74 20 20 20 2d  m. * pSelect   -
22740 3e 20 49 66 20 74 68 69 73 20 69 73 20 61 6e 20  > If this is an 
22750 49 4e 53 45 52 54 20 49 4e 54 4f 20 2e 2e 2e 20  INSERT INTO ... 
22760 53 45 4c 45 43 54 20 2e 2e 2e 20 73 74 61 74 65  SELECT ... state
22770 6d 65 6e 74 2c 20 74 68 65 6e 0a 20 2a 20 20 20  ment, then. *   
22780 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73 20             this 
22790 73 74 6f 72 65 73 20 61 20 70 6f 69 6e 74 65 72  stores a pointer
227a0 20 74 6f 20 74 68 65 20 53 45 4c 45 43 54 20 73   to the SELECT s
227b0 74 61 74 65 6d 65 6e 74 2e 20 4f 74 68 65 72 77  tatement. Otherw
227c0 69 73 65 20 4e 55 4c 4c 2e 0a 20 2a 20 7a 54 61  ise NULL.. * zTa
227d0 72 67 65 74 20 20 20 2d 3e 20 44 65 71 75 6f 74  rget   -> Dequot
227e0 65 64 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74  ed name of the t
227f0 61 62 6c 65 20 74 6f 20 69 6e 73 65 72 74 20 69  able to insert i
22800 6e 74 6f 2e 0a 20 2a 20 70 45 78 70 72 4c 69 73  nto.. * pExprLis
22810 74 20 2d 3e 20 49 66 20 74 68 69 73 20 69 73 20  t -> If this is 
22820 61 6e 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 2e  an INSERT INTO .
22830 2e 2e 20 56 41 4c 55 45 53 20 2e 2e 2e 20 73 74  .. VALUES ... st
22840 61 74 65 6d 65 6e 74 2c 20 74 68 65 6e 0a 20 2a  atement, then. *
22850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
22860 69 73 20 73 74 6f 72 65 73 20 76 61 6c 75 65 73  is stores values
22870 20 74 6f 20 62 65 20 69 6e 73 65 72 74 65 64 2e   to be inserted.
22880 20 4f 74 68 65 72 77 69 73 65 20 4e 55 4c 4c 2e   Otherwise NULL.
22890 0a 20 2a 20 70 49 64 4c 69 73 74 20 20 20 2d 3e  . * pIdList   ->
228a0 20 49 66 20 74 68 69 73 20 69 73 20 61 6e 20 49   If this is an I
228b0 4e 53 45 52 54 20 49 4e 54 4f 20 2e 2e 2e 20 28  NSERT INTO ... (
228c0 3c 63 6f 6c 75 6d 6e 2d 6e 61 6d 65 73 3e 29 20  <column-names>) 
228d0 56 41 4c 55 45 53 20 2e 2e 2e 0a 20 2a 20 20 20  VALUES .... *   
228e0 20 20 20 20 20 20 20 20 20 20 20 73 74 61 74 65             state
228f0 6d 65 6e 74 2c 20 74 68 65 6e 20 74 68 69 73 20  ment, then this 
22900 73 74 6f 72 65 73 20 74 68 65 20 63 6f 6c 75 6d  stores the colum
22910 6e 2d 6e 61 6d 65 73 20 74 6f 20 62 65 0a 20 2a  n-names to be. *
22920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e                in
22930 73 65 72 74 65 64 20 69 6e 74 6f 2e 0a 20 2a 0a  serted into.. *.
22940 20 2a 20 28 6f 70 20 3d 3d 20 54 4b 5f 44 45 4c   * (op == TK_DEL
22950 45 54 45 29 0a 20 2a 20 7a 54 61 72 67 65 74 20  ETE). * zTarget 
22960 20 20 2d 3e 20 44 65 71 75 6f 74 65 64 20 6e 61    -> Dequoted na
22970 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20  me of the table 
22980 74 6f 20 64 65 6c 65 74 65 20 66 72 6f 6d 2e 0a  to delete from..
22990 20 2a 20 70 57 68 65 72 65 20 20 20 20 2d 3e 20   * pWhere    -> 
229a0 54 68 65 20 57 48 45 52 45 20 63 6c 61 75 73 65  The WHERE clause
229b0 20 6f 66 20 74 68 65 20 44 45 4c 45 54 45 20 73   of the DELETE s
229c0 74 61 74 65 6d 65 6e 74 20 69 66 20 6f 6e 65 20  tatement if one 
229d0 69 73 20 73 70 65 63 69 66 69 65 64 2e 0a 20 2a  is specified.. *
229e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4f 74                Ot
229f0 68 65 72 77 69 73 65 20 4e 55 4c 4c 2e 0a 20 2a  herwise NULL.. *
22a00 0a 20 2a 20 28 6f 70 20 3d 3d 20 54 4b 5f 55 50  . * (op == TK_UP
22a10 44 41 54 45 29 0a 20 2a 20 7a 54 61 72 67 65 74  DATE). * zTarget
22a20 20 20 20 2d 3e 20 44 65 71 75 6f 74 65 64 20 6e     -> Dequoted n
22a30 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65  ame of the table
22a40 20 74 6f 20 75 70 64 61 74 65 2e 0a 20 2a 20 70   to update.. * p
22a50 57 68 65 72 65 20 20 20 20 2d 3e 20 54 68 65 20  Where    -> The 
22a60 57 48 45 52 45 20 63 6c 61 75 73 65 20 6f 66 20  WHERE clause of 
22a70 74 68 65 20 55 50 44 41 54 45 20 73 74 61 74 65  the UPDATE state
22a80 6d 65 6e 74 20 69 66 20 6f 6e 65 20 69 73 20 73  ment if one is s
22a90 70 65 63 69 66 69 65 64 2e 0a 20 2a 20 20 20 20  pecified.. *    
22aa0 20 20 20 20 20 20 20 20 20 20 4f 74 68 65 72 77            Otherw
22ab0 69 73 65 20 4e 55 4c 4c 2e 0a 20 2a 20 70 45 78  ise NULL.. * pEx
22ac0 70 72 4c 69 73 74 20 2d 3e 20 41 20 6c 69 73 74  prList -> A list
22ad0 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 73 20   of the columns 
22ae0 74 6f 20 75 70 64 61 74 65 20 61 6e 64 20 74 68  to update and th
22af0 65 20 65 78 70 72 65 73 73 69 6f 6e 73 20 74 6f  e expressions to
22b00 20 75 70 64 61 74 65 0a 20 2a 20 20 20 20 20 20   update. *      
22b10 20 20 20 20 20 20 20 20 74 68 65 6d 20 74 6f 2e          them to.
22b20 20 53 65 65 20 73 71 6c 69 74 65 33 55 70 64 61   See sqlite3Upda
22b30 74 65 28 29 20 64 6f 63 75 6d 65 6e 74 61 74 69  te() documentati
22b40 6f 6e 20 6f 66 20 22 70 43 68 61 6e 67 65 73 22  on of "pChanges"
22b50 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  . *             
22b60 20 61 72 67 75 6d 65 6e 74 2e 0a 20 2a 0a 20 2a   argument.. *. *
22b70 2f 0a 73 74 72 75 63 74 20 54 72 69 67 67 65 72  /.struct Trigger
22b80 53 74 65 70 20 7b 0a 20 20 75 38 20 6f 70 3b 20  Step {.  u8 op; 
22b90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
22ba0 20 4f 6e 65 20 6f 66 20 54 4b 5f 44 45 4c 45 54   One of TK_DELET
22bb0 45 2c 20 54 4b 5f 55 50 44 41 54 45 2c 20 54 4b  E, TK_UPDATE, TK
22bc0 5f 49 4e 53 45 52 54 2c 20 54 4b 5f 53 45 4c 45  _INSERT, TK_SELE
22bd0 43 54 20 2a 2f 0a 20 20 75 38 20 6f 72 63 6f 6e  CT */.  u8 orcon
22be0 66 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  f;           /* 
22bf0 4f 45 5f 52 6f 6c 6c 62 61 63 6b 20 65 74 63 2e  OE_Rollback etc.
22c00 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 20 2a 70   */.  Trigger *p
22c10 54 72 69 67 3b 20 20 20 20 20 20 2f 2a 20 54 68  Trig;      /* Th
22c20 65 20 74 72 69 67 67 65 72 20 74 68 61 74 20 74  e trigger that t
22c30 68 69 73 20 73 74 65 70 20 69 73 20 61 20 70 61  his step is a pa
22c40 72 74 20 6f 66 20 2a 2f 0a 20 20 53 65 6c 65 63  rt of */.  Selec
22c50 74 20 2a 70 53 65 6c 65 63 74 3b 20 20 20 20 20  t *pSelect;     
22c60 2f 2a 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d  /* SELECT statem
22c70 65 6e 74 20 6f 72 20 52 48 53 20 6f 66 20 49 4e  ent or RHS of IN
22c80 53 45 52 54 20 49 4e 54 4f 20 53 45 4c 45 43 54  SERT INTO SELECT
22c90 20 2e 2e 2e 20 2a 2f 0a 20 20 63 68 61 72 20 2a   ... */.  char *
22ca0 7a 54 61 72 67 65 74 3b 20 20 20 20 20 20 20 2f  zTarget;       /
22cb0 2a 20 54 61 72 67 65 74 20 74 61 62 6c 65 20 66  * Target table f
22cc0 6f 72 20 44 45 4c 45 54 45 2c 20 55 50 44 41 54  or DELETE, UPDAT
22cd0 45 2c 20 49 4e 53 45 52 54 20 2a 2f 0a 20 20 45  E, INSERT */.  E
22ce0 78 70 72 20 2a 70 57 68 65 72 65 3b 20 20 20 20  xpr *pWhere;    
22cf0 20 20 20 20 2f 2a 20 54 68 65 20 57 48 45 52 45      /* The WHERE
22d00 20 63 6c 61 75 73 65 20 66 6f 72 20 44 45 4c 45   clause for DELE
22d10 54 45 20 6f 72 20 55 50 44 41 54 45 20 73 74 65  TE or UPDATE ste
22d20 70 73 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74  ps */.  ExprList
22d30 20 2a 70 45 78 70 72 4c 69 73 74 3b 20 2f 2a 20   *pExprList; /* 
22d40 53 45 54 20 63 6c 61 75 73 65 20 66 6f 72 20 55  SET clause for U
22d50 50 44 41 54 45 20 2a 2f 0a 20 20 49 64 4c 69 73  PDATE */.  IdLis
22d60 74 20 2a 70 49 64 4c 69 73 74 3b 20 20 20 20 20  t *pIdList;     
22d70 2f 2a 20 43 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20  /* Column names 
22d80 66 6f 72 20 49 4e 53 45 52 54 20 2a 2f 0a 20 20  for INSERT */.  
22d90 55 70 73 65 72 74 20 2a 70 55 70 73 65 72 74 3b  Upsert *pUpsert;
22da0 20 20 20 20 20 2f 2a 20 55 70 73 65 72 74 20 63       /* Upsert c
22db0 6c 61 75 73 65 73 20 6f 6e 20 61 6e 20 49 4e 53  lauses on an INS
22dc0 45 52 54 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a  ERT */.  char *z
22dd0 53 70 61 6e 3b 20 20 20 20 20 20 20 20 20 2f 2a  Span;         /*
22de0 20 4f 72 69 67 69 6e 61 6c 20 53 51 4c 20 74 65   Original SQL te
22df0 78 74 20 6f 66 20 74 68 69 73 20 63 6f 6d 6d 61  xt of this comma
22e00 6e 64 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 53  nd */.  TriggerS
22e10 74 65 70 20 2a 70 4e 65 78 74 3b 20 20 2f 2a 20  tep *pNext;  /* 
22e20 4e 65 78 74 20 69 6e 20 74 68 65 20 6c 69 6e 6b  Next in the link
22e30 2d 6c 69 73 74 20 2a 2f 0a 20 20 54 72 69 67 67  -list */.  Trigg
22e40 65 72 53 74 65 70 20 2a 70 4c 61 73 74 3b 20 20  erStep *pLast;  
22e50 2f 2a 20 4c 61 73 74 20 65 6c 65 6d 65 6e 74 20  /* Last element 
22e60 69 6e 20 6c 69 6e 6b 2d 6c 69 73 74 2e 20 56 61  in link-list. Va
22e70 6c 69 64 20 66 6f 72 20 31 73 74 20 65 6c 65 6d  lid for 1st elem
22e80 20 6f 6e 6c 79 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a   only */.};../*.
22e90 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  ** The following
22ea0 20 73 74 72 75 63 74 75 72 65 20 63 6f 6e 74 61   structure conta
22eb0 69 6e 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  ins information 
22ec0 75 73 65 64 20 62 79 20 74 68 65 20 73 71 6c 69  used by the sqli
22ed0 74 65 46 69 78 2e 2e 2e 0a 2a 2a 20 72 6f 75 74  teFix....** rout
22ee0 69 6e 65 73 20 61 73 20 74 68 65 79 20 77 61 6c  ines as they wal
22ef0 6b 20 74 68 65 20 70 61 72 73 65 20 74 72 65 65  k the parse tree
22f00 20 74 6f 20 6d 61 6b 65 20 64 61 74 61 62 61 73   to make databas
22f10 65 20 72 65 66 65 72 65 6e 63 65 73 0a 2a 2a 20  e references.** 
22f20 65 78 70 6c 69 63 69 74 2e 0a 2a 2f 0a 74 79 70  explicit..*/.typ
22f30 65 64 65 66 20 73 74 72 75 63 74 20 44 62 46 69  edef struct DbFi
22f40 78 65 72 20 44 62 46 69 78 65 72 3b 0a 73 74 72  xer DbFixer;.str
22f50 75 63 74 20 44 62 46 69 78 65 72 20 7b 0a 20 20  uct DbFixer {.  
22f60 50 61 72 73 65 20 2a 70 50 61 72 73 65 3b 20 20  Parse *pParse;  
22f70 20 20 20 20 2f 2a 20 54 68 65 20 70 61 72 73 69      /* The parsi
22f80 6e 67 20 63 6f 6e 74 65 78 74 2e 20 20 45 72 72  ng context.  Err
22f90 6f 72 20 6d 65 73 73 61 67 65 73 20 77 72 69 74  or messages writ
22fa0 74 65 6e 20 68 65 72 65 20 2a 2f 0a 20 20 53 63  ten here */.  Sc
22fb0 68 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20 20  hema *pSchema;  
22fc0 20 20 2f 2a 20 46 69 78 20 69 74 65 6d 73 20 74    /* Fix items t
22fd0 6f 20 74 68 69 73 20 73 63 68 65 6d 61 20 2a 2f  o this schema */
22fe0 0a 20 20 69 6e 74 20 62 56 61 72 4f 6e 6c 79 3b  .  int bVarOnly;
22ff0 20 20 20 20 20 20 20 2f 2a 20 43 68 65 63 6b 20         /* Check 
23000 66 6f 72 20 76 61 72 69 61 62 6c 65 20 72 65 66  for variable ref
23010 65 72 65 6e 63 65 73 20 6f 6e 6c 79 20 2a 2f 0a  erences only */.
23020 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 44    const char *zD
23030 62 3b 20 20 20 20 2f 2a 20 4d 61 6b 65 20 73 75  b;    /* Make su
23040 72 65 20 61 6c 6c 20 6f 62 6a 65 63 74 73 20 61  re all objects a
23050 72 65 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20  re contained in 
23060 74 68 69 73 20 64 61 74 61 62 61 73 65 20 2a 2f  this database */
23070 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  .  const char *z
23080 54 79 70 65 3b 20 20 2f 2a 20 54 79 70 65 20 6f  Type;  /* Type o
23090 66 20 74 68 65 20 63 6f 6e 74 61 69 6e 65 72 20  f the container 
230a0 2d 20 75 73 65 64 20 66 6f 72 20 65 72 72 6f 72  - used for error
230b0 20 6d 65 73 73 61 67 65 73 20 2a 2f 0a 20 20 63   messages */.  c
230c0 6f 6e 73 74 20 54 6f 6b 65 6e 20 2a 70 4e 61 6d  onst Token *pNam
230d0 65 3b 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68  e; /* Name of th
230e0 65 20 63 6f 6e 74 61 69 6e 65 72 20 2d 20 75 73  e container - us
230f0 65 64 20 66 6f 72 20 65 72 72 6f 72 20 6d 65 73  ed for error mes
23100 73 61 67 65 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a  sages */.};../*.
23110 2a 2a 20 41 6e 20 6f 62 6a 65 63 74 65 64 20 75  ** An objected u
23120 73 65 64 20 74 6f 20 61 63 63 75 6d 75 6c 61 74  sed to accumulat
23130 65 20 74 68 65 20 74 65 78 74 20 6f 66 20 61 20  e the text of a 
23140 73 74 72 69 6e 67 20 77 68 65 72 65 20 77 65 0a  string where we.
23150 2a 2a 20 64 6f 20 6e 6f 74 20 6e 65 63 65 73 73  ** do not necess
23160 61 72 69 6c 79 20 6b 6e 6f 77 20 68 6f 77 20 62  arily know how b
23170 69 67 20 74 68 65 20 73 74 72 69 6e 67 20 77 69  ig the string wi
23180 6c 6c 20 62 65 20 69 6e 20 74 68 65 20 65 6e 64  ll be in the end
23190 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53 74 72 41  ..*/.struct StrA
231a0 63 63 75 6d 20 7b 0a 20 20 73 71 6c 69 74 65 33  ccum {.  sqlite3
231b0 20 2a 64 62 3b 20 20 20 20 20 20 20 20 20 2f 2a   *db;         /*
231c0 20 4f 70 74 69 6f 6e 61 6c 20 64 61 74 61 62 61   Optional databa
231d0 73 65 20 66 6f 72 20 6c 6f 6f 6b 61 73 69 64 65  se for lookaside
231e0 2e 20 20 43 61 6e 20 62 65 20 4e 55 4c 4c 20 2a  .  Can be NULL *
231f0 2f 0a 20 20 63 68 61 72 20 2a 7a 54 65 78 74 3b  /.  char *zText;
23200 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
23210 73 74 72 69 6e 67 20 63 6f 6c 6c 65 63 74 65 64  string collected
23220 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20 75 33 32   so far */.  u32
23230 20 20 6e 41 6c 6c 6f 63 3b 20 20 20 20 20 20 20    nAlloc;       
23240 20 20 2f 2a 20 41 6d 6f 75 6e 74 20 6f 66 20 73    /* Amount of s
23250 70 61 63 65 20 61 6c 6c 6f 63 61 74 65 64 20 69  pace allocated i
23260 6e 20 7a 54 65 78 74 20 2a 2f 0a 20 20 75 33 32  n zText */.  u32
23270 20 20 6d 78 41 6c 6c 6f 63 3b 20 20 20 20 20 20    mxAlloc;      
23280 20 20 2f 2a 20 4d 61 78 69 6d 75 6d 20 61 6c 6c    /* Maximum all
23290 6f 77 65 64 20 61 6c 6c 6f 63 61 74 69 6f 6e 2e  owed allocation.
232a0 20 20 30 20 66 6f 72 20 6e 6f 20 6d 61 6c 6c 6f    0 for no mallo
232b0 63 20 75 73 61 67 65 20 2a 2f 0a 20 20 75 33 32  c usage */.  u32
232c0 20 20 6e 43 68 61 72 3b 20 20 20 20 20 20 20 20    nChar;        
232d0 20 20 2f 2a 20 4c 65 6e 67 74 68 20 6f 66 20 74    /* Length of t
232e0 68 65 20 73 74 72 69 6e 67 20 73 6f 20 66 61 72  he string so far
232f0 20 2a 2f 0a 20 20 75 38 20 20 20 61 63 63 45 72   */.  u8   accEr
23300 72 6f 72 3b 20 20 20 20 20 20 20 2f 2a 20 53 54  ror;       /* ST
23310 52 41 43 43 55 4d 5f 4e 4f 4d 45 4d 20 6f 72 20  RACCUM_NOMEM or 
23320 53 54 52 41 43 43 55 4d 5f 54 4f 4f 42 49 47 20  STRACCUM_TOOBIG 
23330 2a 2f 0a 20 20 75 38 20 20 20 70 72 69 6e 74 66  */.  u8   printf
23340 46 6c 61 67 73 3b 20 20 20 20 2f 2a 20 53 51 4c  Flags;    /* SQL
23350 49 54 45 5f 50 52 49 4e 54 46 20 66 6c 61 67 73  ITE_PRINTF flags
23360 20 62 65 6c 6f 77 20 2a 2f 0a 7d 3b 0a 23 64 65   below */.};.#de
23370 66 69 6e 65 20 53 54 52 41 43 43 55 4d 5f 4e 4f  fine STRACCUM_NO
23380 4d 45 4d 20 20 20 31 0a 23 64 65 66 69 6e 65 20  MEM   1.#define 
23390 53 54 52 41 43 43 55 4d 5f 54 4f 4f 42 49 47 20  STRACCUM_TOOBIG 
233a0 20 32 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54   2.#define SQLIT
233b0 45 5f 50 52 49 4e 54 46 5f 49 4e 54 45 52 4e 41  E_PRINTF_INTERNA
233c0 4c 20 30 78 30 31 20 20 2f 2a 20 49 6e 74 65 72  L 0x01  /* Inter
233d0 6e 61 6c 2d 75 73 65 2d 6f 6e 6c 79 20 63 6f 6e  nal-use-only con
233e0 76 65 72 74 65 72 73 20 61 6c 6c 6f 77 65 64 20  verters allowed 
233f0 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
23400 45 5f 50 52 49 4e 54 46 5f 53 51 4c 46 55 4e 43  E_PRINTF_SQLFUNC
23410 20 20 30 78 30 32 20 20 2f 2a 20 53 51 4c 20 66    0x02  /* SQL f
23420 75 6e 63 74 69 6f 6e 20 61 72 67 75 6d 65 6e 74  unction argument
23430 73 20 74 6f 20 56 58 50 72 69 6e 74 66 20 2a 2f  s to VXPrintf */
23440 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
23450 50 52 49 4e 54 46 5f 4d 41 4c 4c 4f 43 45 44 20  PRINTF_MALLOCED 
23460 30 78 30 34 20 20 2f 2a 20 54 72 75 65 20 69 66  0x04  /* True if
23470 20 78 54 65 78 74 20 69 73 20 61 6c 6c 6f 63 61   xText is alloca
23480 74 65 64 20 73 70 61 63 65 20 2a 2f 0a 0a 23 64  ted space */..#d
23490 65 66 69 6e 65 20 69 73 4d 61 6c 6c 6f 63 65 64  efine isMalloced
234a0 28 58 29 20 20 28 28 28 58 29 2d 3e 70 72 69 6e  (X)  (((X)->prin
234b0 74 66 46 6c 61 67 73 20 26 20 53 51 4c 49 54 45  tfFlags & SQLITE
234c0 5f 50 52 49 4e 54 46 5f 4d 41 4c 4c 4f 43 45 44  _PRINTF_MALLOCED
234d0 29 21 3d 30 29 0a 0a 0a 2f 2a 0a 2a 2a 20 41 20  )!=0).../*.** A 
234e0 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 69 73 20  pointer to this 
234f0 73 74 72 75 63 74 75 72 65 20 69 73 20 75 73 65  structure is use
23500 64 20 74 6f 20 63 6f 6d 6d 75 6e 69 63 61 74 65  d to communicate
23510 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a 2a 2a 20   information.** 
23520 66 72 6f 6d 20 73 71 6c 69 74 65 33 49 6e 69 74  from sqlite3Init
23530 20 61 6e 64 20 4f 50 5f 50 61 72 73 65 53 63 68   and OP_ParseSch
23540 65 6d 61 20 69 6e 74 6f 20 74 68 65 20 73 71 6c  ema into the sql
23550 69 74 65 33 49 6e 69 74 43 61 6c 6c 62 61 63 6b  ite3InitCallback
23560 2e 0a 2a 2f 0a 74 79 70 65 64 65 66 20 73 74 72  ..*/.typedef str
23570 75 63 74 20 7b 0a 20 20 73 71 6c 69 74 65 33 20  uct {.  sqlite3 
23580 2a 64 62 3b 20 20 20 20 20 20 20 20 2f 2a 20 54  *db;        /* T
23590 68 65 20 64 61 74 61 62 61 73 65 20 62 65 69 6e  he database bein
235a0 67 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f  g initialized */
235b0 0a 20 20 63 68 61 72 20 2a 2a 70 7a 45 72 72 4d  .  char **pzErrM
235c0 73 67 3b 20 20 20 20 2f 2a 20 45 72 72 6f 72 20  sg;    /* Error 
235d0 6d 65 73 73 61 67 65 20 73 74 6f 72 65 64 20 68  message stored h
235e0 65 72 65 20 2a 2f 0a 20 20 69 6e 74 20 69 44 62  ere */.  int iDb
235f0 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
23600 30 20 66 6f 72 20 6d 61 69 6e 20 64 61 74 61 62  0 for main datab
23610 61 73 65 2e 20 20 31 20 66 6f 72 20 54 45 4d 50  ase.  1 for TEMP
23620 2c 20 32 2e 2e 20 66 6f 72 20 41 54 54 41 43 48  , 2.. for ATTACH
23630 65 64 20 2a 2f 0a 20 20 69 6e 74 20 72 63 3b 20  ed */.  int rc; 
23640 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52              /* R
23650 65 73 75 6c 74 20 63 6f 64 65 20 73 74 6f 72 65  esult code store
23660 64 20 68 65 72 65 20 2a 2f 0a 7d 20 49 6e 69 74  d here */.} Init
23670 44 61 74 61 3b 0a 0a 2f 2a 0a 2a 2a 20 53 74 72  Data;../*.** Str
23680 75 63 74 75 72 65 20 63 6f 6e 74 61 69 6e 69 6e  ucture containin
23690 67 20 67 6c 6f 62 61 6c 20 63 6f 6e 66 69 67 75  g global configu
236a0 72 61 74 69 6f 6e 20 64 61 74 61 20 66 6f 72 20  ration data for 
236b0 74 68 65 20 53 51 4c 69 74 65 20 6c 69 62 72 61  the SQLite libra
236c0 72 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 73  ry..**.** This s
236d0 74 72 75 63 74 75 72 65 20 61 6c 73 6f 20 63 6f  tructure also co
236e0 6e 74 61 69 6e 73 20 73 6f 6d 65 20 73 74 61 74  ntains some stat
236f0 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a  e information..*
23700 2f 0a 73 74 72 75 63 74 20 53 71 6c 69 74 65 33  /.struct Sqlite3
23710 43 6f 6e 66 69 67 20 7b 0a 20 20 69 6e 74 20 62  Config {.  int b
23720 4d 65 6d 73 74 61 74 3b 20 20 20 20 20 20 20 20  Memstat;        
23730 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
23740 54 72 75 65 20 74 6f 20 65 6e 61 62 6c 65 20 6d  True to enable m
23750 65 6d 6f 72 79 20 73 74 61 74 75 73 20 2a 2f 0a  emory status */.
23760 20 20 69 6e 74 20 62 43 6f 72 65 4d 75 74 65 78    int bCoreMutex
23770 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
23780 20 20 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 65      /* True to e
23790 6e 61 62 6c 65 20 63 6f 72 65 20 6d 75 74 65 78  nable core mutex
237a0 69 6e 67 20 2a 2f 0a 20 20 69 6e 74 20 62 46 75  ing */.  int bFu
237b0 6c 6c 4d 75 74 65 78 3b 20 20 20 20 20 20 20 20  llMutex;        
237c0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72             /* Tr
237d0 75 65 20 74 6f 20 65 6e 61 62 6c 65 20 66 75 6c  ue to enable ful
237e0 6c 20 6d 75 74 65 78 69 6e 67 20 2a 2f 0a 20 20  l mutexing */.  
237f0 69 6e 74 20 62 4f 70 65 6e 55 72 69 3b 20 20 20  int bOpenUri;   
23800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23810 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 69 6e 74    /* True to int
23820 65 72 70 72 65 74 20 66 69 6c 65 6e 61 6d 65 73  erpret filenames
23830 20 61 73 20 55 52 49 73 20 2a 2f 0a 20 20 69 6e   as URIs */.  in
23840 74 20 62 55 73 65 43 69 73 3b 20 20 20 20 20 20  t bUseCis;      
23850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23860 2f 2a 20 55 73 65 20 63 6f 76 65 72 69 6e 67 20  /* Use covering 
23870 69 6e 64 69 63 65 73 20 66 6f 72 20 66 75 6c 6c  indices for full
23880 2d 73 63 61 6e 73 20 2a 2f 0a 20 20 69 6e 74 20  -scans */.  int 
23890 62 53 6d 61 6c 6c 4d 61 6c 6c 6f 63 3b 20 20 20  bSmallMalloc;   
238a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
238b0 20 41 76 6f 69 64 20 6c 61 72 67 65 20 6d 65 6d   Avoid large mem
238c0 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20  ory allocations 
238d0 69 66 20 74 72 75 65 20 2a 2f 0a 20 20 69 6e 74  if true */.  int
238e0 20 6d 78 53 74 72 6c 65 6e 3b 20 20 20 20 20 20   mxStrlen;      
238f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
23900 2a 20 4d 61 78 69 6d 75 6d 20 73 74 72 69 6e 67  * Maximum string
23910 20 6c 65 6e 67 74 68 20 2a 2f 0a 20 20 69 6e 74   length */.  int
23920 20 6e 65 76 65 72 43 6f 72 72 75 70 74 3b 20 20   neverCorrupt;  
23930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
23940 2a 20 44 61 74 61 62 61 73 65 20 69 73 20 61 6c  * Database is al
23950 77 61 79 73 20 77 65 6c 6c 2d 66 6f 72 6d 65 64  ways well-formed
23960 20 2a 2f 0a 20 20 69 6e 74 20 73 7a 4c 6f 6f 6b   */.  int szLook
23970 61 73 69 64 65 3b 20 20 20 20 20 20 20 20 20 20  aside;          
23980 20 20 20 20 20 20 20 20 2f 2a 20 44 65 66 61 75          /* Defau
23990 6c 74 20 6c 6f 6f 6b 61 73 69 64 65 20 62 75 66  lt lookaside buf
239a0 66 65 72 20 73 69 7a 65 20 2a 2f 0a 20 20 69 6e  fer size */.  in
239b0 74 20 6e 4c 6f 6f 6b 61 73 69 64 65 3b 20 20 20  t nLookaside;   
239c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
239d0 2f 2a 20 44 65 66 61 75 6c 74 20 6c 6f 6f 6b 61  /* Default looka
239e0 73 69 64 65 20 62 75 66 66 65 72 20 63 6f 75 6e  side buffer coun
239f0 74 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 74 6d 74  t */.  int nStmt
23a00 53 70 69 6c 6c 3b 20 20 20 20 20 20 20 20 20 20  Spill;          
23a10 20 20 20 20 20 20 20 20 20 2f 2a 20 53 74 6d 74           /* Stmt
23a20 2d 6a 6f 75 72 6e 61 6c 20 73 70 69 6c 6c 2d 74  -journal spill-t
23a30 6f 2d 64 69 73 6b 20 74 68 72 65 73 68 6f 6c 64  o-disk threshold
23a40 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 6d 65   */.  sqlite3_me
23a50 6d 5f 6d 65 74 68 6f 64 73 20 6d 3b 20 20 20 20  m_methods m;    
23a60 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f 77 2d 6c          /* Low-l
23a70 65 76 65 6c 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f  evel memory allo
23a80 63 61 74 69 6f 6e 20 69 6e 74 65 72 66 61 63 65  cation interface
23a90 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75   */.  sqlite3_mu
23aa0 74 65 78 5f 6d 65 74 68 6f 64 73 20 6d 75 74 65  tex_methods mute
23ab0 78 3b 20 20 20 20 20 20 2f 2a 20 4c 6f 77 2d 6c  x;      /* Low-l
23ac0 65 76 65 6c 20 6d 75 74 65 78 20 69 6e 74 65 72  evel mutex inter
23ad0 66 61 63 65 20 2a 2f 0a 20 20 73 71 6c 69 74 65  face */.  sqlite
23ae0 33 5f 70 63 61 63 68 65 5f 6d 65 74 68 6f 64 73  3_pcache_methods
23af0 32 20 70 63 61 63 68 65 32 3b 20 20 2f 2a 20 4c  2 pcache2;  /* L
23b00 6f 77 2d 6c 65 76 65 6c 20 70 61 67 65 2d 63 61  ow-level page-ca
23b10 63 68 65 20 69 6e 74 65 72 66 61 63 65 20 2a 2f  che interface */
23b20 0a 20 20 76 6f 69 64 20 2a 70 48 65 61 70 3b 20  .  void *pHeap; 
23b30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23b40 20 20 20 20 20 2f 2a 20 48 65 61 70 20 73 74 6f       /* Heap sto
23b50 72 61 67 65 20 73 70 61 63 65 20 2a 2f 0a 20 20  rage space */.  
23b60 69 6e 74 20 6e 48 65 61 70 3b 20 20 20 20 20 20  int nHeap;      
23b70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23b80 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20 70 48 65    /* Size of pHe
23b90 61 70 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 6d 6e  ap[] */.  int mn
23ba0 52 65 71 2c 20 6d 78 52 65 71 3b 20 20 20 20 20  Req, mxReq;     
23bb0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d              /* M
23bc0 69 6e 20 61 6e 64 20 6d 61 78 20 68 65 61 70 20  in and max heap 
23bd0 72 65 71 75 65 73 74 73 20 73 69 7a 65 73 20 2a  requests sizes *
23be0 2f 0a 20 20 73 71 6c 69 74 65 33 5f 69 6e 74 36  /.  sqlite3_int6
23bf0 34 20 73 7a 4d 6d 61 70 3b 20 20 20 20 20 20 20  4 szMmap;       
23c00 20 20 20 20 20 20 2f 2a 20 6d 6d 61 70 28 29 20        /* mmap() 
23c10 73 70 61 63 65 20 70 65 72 20 6f 70 65 6e 20 66  space per open f
23c20 69 6c 65 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33  ile */.  sqlite3
23c30 5f 69 6e 74 36 34 20 6d 78 4d 6d 61 70 3b 20 20  _int64 mxMmap;  
23c40 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61             /* Ma
23c50 78 69 6d 75 6d 20 76 61 6c 75 65 20 66 6f 72 20  ximum value for 
23c60 73 7a 4d 6d 61 70 20 2a 2f 0a 20 20 76 6f 69 64  szMmap */.  void
23c70 20 2a 70 50 61 67 65 3b 20 20 20 20 20 20 20 20   *pPage;        
23c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
23c90 20 50 61 67 65 20 63 61 63 68 65 20 6d 65 6d 6f   Page cache memo
23ca0 72 79 20 2a 2f 0a 20 20 69 6e 74 20 73 7a 50 61  ry */.  int szPa
23cb0 67 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ge;             
23cc0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 69 7a            /* Siz
23cd0 65 20 6f 66 20 65 61 63 68 20 70 61 67 65 20 69  e of each page i
23ce0 6e 20 70 50 61 67 65 5b 5d 20 2a 2f 0a 20 20 69  n pPage[] */.  i
23cf0 6e 74 20 6e 50 61 67 65 3b 20 20 20 20 20 20 20  nt nPage;       
23d00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23d10 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 70 61   /* Number of pa
23d20 67 65 73 20 69 6e 20 70 50 61 67 65 5b 5d 20 2a  ges in pPage[] *
23d30 2f 0a 20 20 69 6e 74 20 6d 78 50 61 72 73 65 72  /.  int mxParser
23d40 53 74 61 63 6b 3b 20 20 20 20 20 20 20 20 20 20  Stack;          
23d50 20 20 20 20 20 20 2f 2a 20 6d 61 78 69 6d 75 6d        /* maximum
23d60 20 64 65 70 74 68 20 6f 66 20 74 68 65 20 70 61   depth of the pa
23d70 72 73 65 72 20 73 74 61 63 6b 20 2a 2f 0a 20 20  rser stack */.  
23d80 69 6e 74 20 73 68 61 72 65 64 43 61 63 68 65 45  int sharedCacheE
23d90 6e 61 62 6c 65 64 3b 20 20 20 20 20 20 20 20 20  nabled;         
23da0 20 20 2f 2a 20 74 72 75 65 20 69 66 20 73 68 61    /* true if sha
23db0 72 65 64 2d 63 61 63 68 65 20 6d 6f 64 65 20 65  red-cache mode e
23dc0 6e 61 62 6c 65 64 20 2a 2f 0a 20 20 75 33 32 20  nabled */.  u32 
23dd0 73 7a 50 6d 61 3b 20 20 20 20 20 20 20 20 20 20  szPma;          
23de0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
23df0 20 4d 61 78 69 6d 75 6d 20 53 6f 72 74 65 72 20   Maximum Sorter 
23e00 50 4d 41 20 73 69 7a 65 20 2a 2f 0a 20 20 2f 2a  PMA size */.  /*
23e10 20 54 68 65 20 61 62 6f 76 65 20 6d 69 67 68 74   The above might
23e20 20 62 65 20 69 6e 69 74 69 61 6c 69 7a 65 64 20   be initialized 
23e30 74 6f 20 6e 6f 6e 2d 7a 65 72 6f 2e 20 20 54 68  to non-zero.  Th
23e40 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6e 65 65 64  e following need
23e50 20 74 6f 20 61 6c 77 61 79 73 0a 20 20 2a 2a 20   to always.  ** 
23e60 69 6e 69 74 69 61 6c 6c 79 20 62 65 20 7a 65 72  initially be zer
23e70 6f 2c 20 68 6f 77 65 76 65 72 2e 20 2a 2f 0a 20  o, however. */. 
23e80 20 69 6e 74 20 69 73 49 6e 69 74 3b 20 20 20 20   int isInit;    
23e90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23ea0 20 20 20 2f 2a 20 54 72 75 65 20 61 66 74 65 72     /* True after
23eb0 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e 20   initialization 
23ec0 68 61 73 20 66 69 6e 69 73 68 65 64 20 2a 2f 0a  has finished */.
23ed0 20 20 69 6e 74 20 69 6e 50 72 6f 67 72 65 73 73    int inProgress
23ee0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
23ef0 20 20 20 20 2f 2a 20 54 72 75 65 20 77 68 69 6c      /* True whil
23f00 65 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e  e initialization
23f10 20 69 6e 20 70 72 6f 67 72 65 73 73 20 2a 2f 0a   in progress */.
23f20 20 20 69 6e 74 20 69 73 4d 75 74 65 78 49 6e 69    int isMutexIni
23f30 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t;              
23f40 20 20 20 20 2f 2a 20 54 72 75 65 20 61 66 74 65      /* True afte
23f50 72 20 6d 75 74 65 78 65 73 20 61 72 65 20 69 6e  r mutexes are in
23f60 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 69  itialized */.  i
23f70 6e 74 20 69 73 4d 61 6c 6c 6f 63 49 6e 69 74 3b  nt isMallocInit;
23f80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23f90 20 2f 2a 20 54 72 75 65 20 61 66 74 65 72 20 6d   /* True after m
23fa0 61 6c 6c 6f 63 20 69 73 20 69 6e 69 74 69 61 6c  alloc is initial
23fb0 69 7a 65 64 20 2a 2f 0a 20 20 69 6e 74 20 69 73  ized */.  int is
23fc0 50 43 61 63 68 65 49 6e 69 74 3b 20 20 20 20 20  PCacheInit;     
23fd0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
23fe0 72 75 65 20 61 66 74 65 72 20 6d 61 6c 6c 6f 63  rue after malloc
23ff0 20 69 73 20 69 6e 69 74 69 61 6c 69 7a 65 64 20   is initialized 
24000 2a 2f 0a 20 20 69 6e 74 20 6e 52 65 66 49 6e 69  */.  int nRefIni
24010 74 4d 75 74 65 78 3b 20 20 20 20 20 20 20 20 20  tMutex;         
24020 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
24030 20 6f 66 20 75 73 65 72 73 20 6f 66 20 70 49 6e   of users of pIn
24040 69 74 4d 75 74 65 78 20 2a 2f 0a 20 20 73 71 6c  itMutex */.  sql
24050 69 74 65 33 5f 6d 75 74 65 78 20 2a 70 49 6e 69  ite3_mutex *pIni
24060 74 4d 75 74 65 78 3b 20 20 20 20 20 20 20 20 2f  tMutex;        /
24070 2a 20 4d 75 74 65 78 20 75 73 65 64 20 62 79 20  * Mutex used by 
24080 73 71 6c 69 74 65 33 5f 69 6e 69 74 69 61 6c 69  sqlite3_initiali
24090 7a 65 28 29 20 2a 2f 0a 20 20 76 6f 69 64 20 28  ze() */.  void (
240a0 2a 78 4c 6f 67 29 28 76 6f 69 64 2a 2c 69 6e 74  *xLog)(void*,int
240b0 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 20 2f  ,const char*); /
240c0 2a 20 46 75 6e 63 74 69 6f 6e 20 66 6f 72 20 6c  * Function for l
240d0 6f 67 67 69 6e 67 20 2a 2f 0a 20 20 76 6f 69 64  ogging */.  void
240e0 20 2a 70 4c 6f 67 41 72 67 3b 20 20 20 20 20 20   *pLogArg;      
240f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24100 20 2f 2a 20 46 69 72 73 74 20 61 72 67 75 6d 65   /* First argume
24110 6e 74 20 74 6f 20 78 4c 6f 67 28 29 20 2a 2f 0a  nt to xLog() */.
24120 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e  #ifdef SQLITE_EN
24130 41 42 4c 45 5f 53 51 4c 4c 4f 47 0a 20 20 76 6f  ABLE_SQLLOG.  vo
24140 69 64 28 2a 78 53 71 6c 6c 6f 67 29 28 76 6f 69  id(*xSqllog)(voi
24150 64 2a 2c 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73  d*,sqlite3*,cons
24160 74 20 63 68 61 72 2a 2c 20 69 6e 74 29 3b 0a 20  t char*, int);. 
24170 20 76 6f 69 64 20 2a 70 53 71 6c 6c 6f 67 41 72   void *pSqllogAr
24180 67 3b 0a 23 65 6e 64 69 66 0a 23 69 66 64 65 66  g;.#endif.#ifdef
24190 20 53 51 4c 49 54 45 5f 56 44 42 45 5f 43 4f 56   SQLITE_VDBE_COV
241a0 45 52 41 47 45 0a 20 20 2f 2a 20 54 68 65 20 66  ERAGE.  /* The f
241b0 6f 6c 6c 6f 77 69 6e 67 20 63 61 6c 6c 62 61 63  ollowing callbac
241c0 6b 20 28 69 66 20 6e 6f 74 20 4e 55 4c 4c 29 20  k (if not NULL) 
241d0 69 73 20 69 6e 76 6f 6b 65 64 20 6f 6e 20 65 76  is invoked on ev
241e0 65 72 79 20 56 44 42 45 20 62 72 61 6e 63 68 0a  ery VDBE branch.
241f0 20 20 2a 2a 20 6f 70 65 72 61 74 69 6f 6e 2e 20    ** operation. 
24200 20 53 65 74 20 74 68 65 20 63 61 6c 6c 62 61 63   Set the callbac
24210 6b 20 75 73 69 6e 67 20 53 51 4c 49 54 45 5f 54  k using SQLITE_T
24220 45 53 54 43 54 52 4c 5f 56 44 42 45 5f 43 4f 56  ESTCTRL_VDBE_COV
24230 45 52 41 47 45 2e 0a 20 20 2a 2f 0a 20 20 76 6f  ERAGE..  */.  vo
24240 69 64 20 28 2a 78 56 64 62 65 42 72 61 6e 63 68  id (*xVdbeBranch
24250 29 28 76 6f 69 64 2a 2c 69 6e 74 20 69 53 72 63  )(void*,int iSrc
24260 4c 69 6e 65 2c 75 38 20 65 54 68 69 73 2c 75 38  Line,u8 eThis,u8
24270 20 65 4d 78 29 3b 20 20 2f 2a 20 43 61 6c 6c 62   eMx);  /* Callb
24280 61 63 6b 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70  ack */.  void *p
24290 56 64 62 65 42 72 61 6e 63 68 41 72 67 3b 20 20  VdbeBranchArg;  
242a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
242b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
242c0 20 20 20 2f 2a 20 31 73 74 20 61 72 67 75 6d 65     /* 1st argume
242d0 6e 74 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66  nt */.#endif.#if
242e0 6e 64 65 66 20 53 51 4c 49 54 45 5f 55 4e 54 45  ndef SQLITE_UNTE
242f0 53 54 41 42 4c 45 0a 20 20 69 6e 74 20 28 2a 78  STABLE.  int (*x
24300 54 65 73 74 43 61 6c 6c 62 61 63 6b 29 28 69 6e  TestCallback)(in
24310 74 29 3b 20 20 20 20 20 20 20 20 2f 2a 20 49 6e  t);        /* In
24320 76 6f 6b 65 64 20 62 79 20 73 71 6c 69 74 65 33  voked by sqlite3
24330 46 61 75 6c 74 53 69 6d 28 29 20 2a 2f 0a 23 65  FaultSim() */.#e
24340 6e 64 69 66 0a 20 20 69 6e 74 20 62 4c 6f 63 61  ndif.  int bLoca
24350 6c 74 69 6d 65 46 61 75 6c 74 3b 20 20 20 20 20  ltimeFault;     
24360 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65           /* True
24370 20 74 6f 20 66 61 69 6c 20 6c 6f 63 61 6c 74 69   to fail localti
24380 6d 65 28 29 20 63 61 6c 6c 73 20 2a 2f 0a 20 20  me() calls */.  
24390 69 6e 74 20 69 4f 6e 63 65 52 65 73 65 74 54 68  int iOnceResetTh
243a0 72 65 73 68 6f 6c 64 3b 20 20 20 20 20 20 20 20  reshold;        
243b0 20 20 2f 2a 20 57 68 65 6e 20 74 6f 20 72 65 73    /* When to res
243c0 65 74 20 4f 50 5f 4f 6e 63 65 20 63 6f 75 6e 74  et OP_Once count
243d0 65 72 73 20 2a 2f 0a 20 20 75 33 32 20 73 7a 53  ers */.  u32 szS
243e0 6f 72 74 65 72 52 65 66 3b 20 20 20 20 20 20 20  orterRef;       
243f0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 69             /* Mi
24400 6e 20 73 69 7a 65 20 69 6e 20 62 79 74 65 73 20  n size in bytes 
24410 74 6f 20 75 73 65 20 73 6f 72 74 65 72 2d 72 65  to use sorter-re
24420 66 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  fs */.};../*.** 
24430 54 68 69 73 20 6d 61 63 72 6f 20 69 73 20 75 73  This macro is us
24440 65 64 20 69 6e 73 69 64 65 20 6f 66 20 61 73 73  ed inside of ass
24450 65 72 74 28 29 20 73 74 61 74 65 6d 65 6e 74 73  ert() statements
24460 20 74 6f 20 69 6e 64 69 63 61 74 65 20 74 68 61   to indicate tha
24470 74 0a 2a 2a 20 74 68 65 20 61 73 73 65 72 74 20  t.** the assert 
24480 69 73 20 6f 6e 6c 79 20 76 61 6c 69 64 20 6f 6e  is only valid on
24490 20 61 20 77 65 6c 6c 2d 66 6f 72 6d 65 64 20 64   a well-formed d
244a0 61 74 61 62 61 73 65 2e 20 20 49 6e 73 74 65 61  atabase.  Instea
244b0 64 20 6f 66 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20  d of:.**.**     
244c0 61 73 73 65 72 74 28 20 58 20 29 3b 0a 2a 2a 0a  assert( X );.**.
244d0 2a 2a 20 4f 6e 65 20 77 72 69 74 65 73 3a 0a 2a  ** One writes:.*
244e0 2a 0a 2a 2a 20 20 20 20 20 61 73 73 65 72 74 28  *.**     assert(
244f0 20 58 20 7c 7c 20 43 4f 52 52 55 50 54 5f 44 42   X || CORRUPT_DB
24500 20 29 3b 0a 2a 2a 0a 2a 2a 20 43 4f 52 52 55 50   );.**.** CORRUP
24510 54 5f 44 42 20 69 73 20 74 72 75 65 20 64 75 72  T_DB is true dur
24520 69 6e 67 20 6e 6f 72 6d 61 6c 20 6f 70 65 72 61  ing normal opera
24530 74 69 6f 6e 2e 20 20 43 4f 52 52 55 50 54 5f 44  tion.  CORRUPT_D
24540 42 20 64 6f 65 73 20 6e 6f 74 20 69 6e 64 69 63  B does not indic
24550 61 74 65 0a 2a 2a 20 74 68 61 74 20 74 68 65 20  ate.** that the 
24560 64 61 74 61 62 61 73 65 20 69 73 20 64 65 66 69  database is defi
24570 6e 69 74 65 6c 79 20 63 6f 72 72 75 70 74 2c 20  nitely corrupt, 
24580 6f 6e 6c 79 20 74 68 61 74 20 69 74 20 6d 69 67  only that it mig
24590 68 74 20 62 65 20 63 6f 72 72 75 70 74 2e 0a 2a  ht be corrupt..*
245a0 2a 20 46 6f 72 20 6d 6f 73 74 20 74 65 73 74 20  * For most test 
245b0 63 61 73 65 73 2c 20 43 4f 52 52 55 50 54 5f 44  cases, CORRUPT_D
245c0 42 20 69 73 20 73 65 74 20 74 6f 20 66 61 6c 73  B is set to fals
245d0 65 20 75 73 69 6e 67 20 61 20 73 70 65 63 69 61  e using a specia
245e0 6c 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 74 65 73  l.** sqlite3_tes
245f0 74 5f 63 6f 6e 74 72 6f 6c 28 29 2e 20 20 54 68  t_control().  Th
24600 69 73 20 65 6e 61 62 6c 65 73 20 61 73 73 65 72  is enables asser
24610 74 28 29 20 73 74 61 74 65 6d 65 6e 74 73 20 74  t() statements t
24620 6f 20 70 72 6f 76 65 0a 2a 2a 20 74 68 69 6e 67  o prove.** thing
24630 73 20 74 68 61 74 20 61 72 65 20 61 6c 77 61 79  s that are alway
24640 73 20 74 72 75 65 20 66 6f 72 20 77 65 6c 6c 2d  s true for well-
24650 66 6f 72 6d 65 64 20 64 61 74 61 62 61 73 65 73  formed databases
24660 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 43 4f 52  ..*/.#define COR
24670 52 55 50 54 5f 44 42 20 20 28 73 71 6c 69 74 65  RUPT_DB  (sqlite
24680 33 43 6f 6e 66 69 67 2e 6e 65 76 65 72 43 6f 72  3Config.neverCor
24690 72 75 70 74 3d 3d 30 29 0a 0a 2f 2a 0a 2a 2a 20  rupt==0)../*.** 
246a0 43 6f 6e 74 65 78 74 20 70 6f 69 6e 74 65 72 20  Context pointer 
246b0 70 61 73 73 65 64 20 64 6f 77 6e 20 74 68 72 6f  passed down thro
246c0 75 67 68 20 74 68 65 20 74 72 65 65 2d 77 61 6c  ugh the tree-wal
246d0 6b 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 57 61 6c  k..*/.struct Wal
246e0 6b 65 72 20 7b 0a 20 20 50 61 72 73 65 20 2a 70  ker {.  Parse *p
246f0 50 61 72 73 65 3b 20 20 20 20 20 20 20 20 20 20  Parse;          
24700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24710 20 20 2f 2a 20 50 61 72 73 65 72 20 63 6f 6e 74    /* Parser cont
24720 65 78 74 2e 20 20 2a 2f 0a 20 20 69 6e 74 20 28  ext.  */.  int (
24730 2a 78 45 78 70 72 43 61 6c 6c 62 61 63 6b 29 28  *xExprCallback)(
24740 57 61 6c 6b 65 72 2a 2c 20 45 78 70 72 2a 29 3b  Walker*, Expr*);
24750 20 20 20 20 20 2f 2a 20 43 61 6c 6c 62 61 63 6b       /* Callback
24760 20 66 6f 72 20 65 78 70 72 65 73 73 69 6f 6e 73   for expressions
24770 20 2a 2f 0a 20 20 69 6e 74 20 28 2a 78 53 65 6c   */.  int (*xSel
24780 65 63 74 43 61 6c 6c 62 61 63 6b 29 28 57 61 6c  ectCallback)(Wal
24790 6b 65 72 2a 2c 53 65 6c 65 63 74 2a 29 3b 20 20  ker*,Select*);  
247a0 2f 2a 20 43 61 6c 6c 62 61 63 6b 20 66 6f 72 20  /* Callback for 
247b0 53 45 4c 45 43 54 73 20 2a 2f 0a 20 20 76 6f 69  SELECTs */.  voi
247c0 64 20 28 2a 78 53 65 6c 65 63 74 43 61 6c 6c 62  d (*xSelectCallb
247d0 61 63 6b 32 29 28 57 61 6c 6b 65 72 2a 2c 53 65  ack2)(Walker*,Se
247e0 6c 65 63 74 2a 29 3b 2f 2a 20 53 65 63 6f 6e 64  lect*);/* Second
247f0 20 63 61 6c 6c 62 61 63 6b 20 66 6f 72 20 53 45   callback for SE
24800 4c 45 43 54 73 20 2a 2f 0a 20 20 69 6e 74 20 77  LECTs */.  int w
24810 61 6c 6b 65 72 44 65 70 74 68 3b 20 20 20 20 20  alkerDepth;     
24820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24830 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
24840 66 20 73 75 62 71 75 65 72 69 65 73 20 2a 2f 0a  f subqueries */.
24850 20 20 75 38 20 65 43 6f 64 65 3b 20 20 20 20 20    u8 eCode;     
24860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24870 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41              /* A
24880 20 73 6d 61 6c 6c 20 70 72 6f 63 65 73 73 69 6e   small processin
24890 67 20 63 6f 64 65 20 2a 2f 0a 20 20 75 6e 69 6f  g code */.  unio
248a0 6e 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20  n {             
248b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
248c0 20 20 20 20 20 20 2f 2a 20 45 78 74 72 61 20 64        /* Extra d
248d0 61 74 61 20 66 6f 72 20 63 61 6c 6c 62 61 63 6b  ata for callback
248e0 20 2a 2f 0a 20 20 20 20 4e 61 6d 65 43 6f 6e 74   */.    NameCont
248f0 65 78 74 20 2a 70 4e 43 3b 20 20 20 20 20 20 20  ext *pNC;       
24900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24910 20 20 2f 2a 20 4e 61 6d 69 6e 67 20 63 6f 6e 74    /* Naming cont
24920 65 78 74 20 2a 2f 0a 20 20 20 20 69 6e 74 20 6e  ext */.    int n
24930 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
24940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24950 20 20 20 20 20 2f 2a 20 41 20 63 6f 75 6e 74 65       /* A counte
24960 72 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 43 75  r */.    int iCu
24970 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  r;              
24980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24990 20 20 20 2f 2a 20 41 20 63 75 72 73 6f 72 20 6e     /* A cursor n
249a0 75 6d 62 65 72 20 2a 2f 0a 20 20 20 20 53 72 63  umber */.    Src
249b0 4c 69 73 74 20 2a 70 53 72 63 4c 69 73 74 3b 20  List *pSrcList; 
249c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
249d0 20 20 20 20 20 20 20 2f 2a 20 46 52 4f 4d 20 63         /* FROM c
249e0 6c 61 75 73 65 20 2a 2f 0a 20 20 20 20 73 74 72  lause */.    str
249f0 75 63 74 20 53 72 63 43 6f 75 6e 74 20 2a 70 53  uct SrcCount *pS
24a00 72 63 43 6f 75 6e 74 3b 20 20 20 20 20 20 20 20  rcCount;        
24a10 20 20 20 20 20 20 20 2f 2a 20 43 6f 75 6e 74 69         /* Counti
24a20 6e 67 20 63 6f 6c 75 6d 6e 20 72 65 66 65 72 65  ng column refere
24a30 6e 63 65 73 20 2a 2f 0a 20 20 20 20 73 74 72 75  nces */.    stru
24a40 63 74 20 43 43 75 72 48 69 6e 74 20 2a 70 43 43  ct CCurHint *pCC
24a50 75 72 48 69 6e 74 3b 20 20 20 20 20 20 20 20 20  urHint;         
24a60 20 20 20 20 20 20 2f 2a 20 55 73 65 64 20 62 79        /* Used by
24a70 20 63 6f 64 65 43 75 72 73 6f 72 48 69 6e 74 28   codeCursorHint(
24a80 29 20 2a 2f 0a 20 20 20 20 69 6e 74 20 2a 61 69  ) */.    int *ai
24a90 43 6f 6c 3b 20 20 20 20 20 20 20 20 20 20 20 20  Col;            
24aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24ab0 20 20 20 2f 2a 20 61 72 72 61 79 20 6f 66 20 63     /* array of c
24ac0 6f 6c 75 6d 6e 20 69 6e 64 65 78 65 73 20 2a 2f  olumn indexes */
24ad0 0a 20 20 20 20 73 74 72 75 63 74 20 49 64 78 43  .    struct IdxC
24ae0 6f 76 65 72 20 2a 70 49 64 78 43 6f 76 65 72 3b  over *pIdxCover;
24af0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
24b00 2a 20 43 68 65 63 6b 20 66 6f 72 20 69 6e 64 65  * Check for inde
24b10 78 20 63 6f 76 65 72 61 67 65 20 2a 2f 0a 20 20  x coverage */.  
24b20 20 20 73 74 72 75 63 74 20 49 64 78 45 78 70 72    struct IdxExpr
24b30 54 72 61 6e 73 20 2a 70 49 64 78 54 72 61 6e 73  Trans *pIdxTrans
24b40 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43  ;           /* C
24b50 6f 6e 76 65 72 74 20 69 64 78 65 64 20 65 78 70  onvert idxed exp
24b60 72 20 74 6f 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20  r to column */. 
24b70 20 20 20 45 78 70 72 4c 69 73 74 20 2a 70 47 72     ExprList *pGr
24b80 6f 75 70 42 79 3b 20 20 20 20 20 20 20 20 20 20  oupBy;          
24b90 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
24ba0 47 52 4f 55 50 20 42 59 20 63 6c 61 75 73 65 20  GROUP BY clause 
24bb0 2a 2f 0a 20 20 20 20 53 65 6c 65 63 74 20 2a 70  */.    Select *p
24bc0 53 65 6c 65 63 74 3b 20 20 20 20 20 20 20 20 20  Select;         
24bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24be0 20 2f 2a 20 48 41 56 49 4e 47 20 74 6f 20 57 48   /* HAVING to WH
24bf0 45 52 45 20 63 6c 61 75 73 65 20 63 74 78 20 2a  ERE clause ctx *
24c00 2f 0a 20 20 7d 20 75 3b 0a 7d 3b 0a 0a 2f 2a 20  /.  } u;.};../* 
24c10 46 6f 72 77 61 72 64 20 64 65 63 6c 61 72 61 74  Forward declarat
24c20 69 6f 6e 73 20 2a 2f 0a 69 6e 74 20 73 71 6c 69  ions */.int sqli
24c30 74 65 33 57 61 6c 6b 45 78 70 72 28 57 61 6c 6b  te3WalkExpr(Walk
24c40 65 72 2a 2c 20 45 78 70 72 2a 29 3b 0a 69 6e 74  er*, Expr*);.int
24c50 20 73 71 6c 69 74 65 33 57 61 6c 6b 45 78 70 72   sqlite3WalkExpr
24c60 4c 69 73 74 28 57 61 6c 6b 65 72 2a 2c 20 45 78  List(Walker*, Ex
24c70 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71  prList*);.int sq
24c80 6c 69 74 65 33 57 61 6c 6b 53 65 6c 65 63 74 28  lite3WalkSelect(
24c90 57 61 6c 6b 65 72 2a 2c 20 53 65 6c 65 63 74 2a  Walker*, Select*
24ca0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 61  );.int sqlite3Wa
24cb0 6c 6b 53 65 6c 65 63 74 45 78 70 72 28 57 61 6c  lkSelectExpr(Wal
24cc0 6b 65 72 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a  ker*, Select*);.
24cd0 69 6e 74 20 73 71 6c 69 74 65 33 57 61 6c 6b 53  int sqlite3WalkS
24ce0 65 6c 65 63 74 46 72 6f 6d 28 57 61 6c 6b 65 72  electFrom(Walker
24cf0 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 69 6e 74  *, Select*);.int
24d00 20 73 71 6c 69 74 65 33 45 78 70 72 57 61 6c 6b   sqlite3ExprWalk
24d10 4e 6f 6f 70 28 57 61 6c 6b 65 72 2a 2c 20 45 78  Noop(Walker*, Ex
24d20 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  pr*);.int sqlite
24d30 33 53 65 6c 65 63 74 57 61 6c 6b 4e 6f 6f 70 28  3SelectWalkNoop(
24d40 57 61 6c 6b 65 72 2a 2c 20 53 65 6c 65 63 74 2a  Walker*, Select*
24d50 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 65  );.int sqlite3Se
24d60 6c 65 63 74 57 61 6c 6b 46 61 69 6c 28 57 61 6c  lectWalkFail(Wal
24d70 6b 65 72 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a  ker*, Select*);.
24d80 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45  #ifdef SQLITE_DE
24d90 42 55 47 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  BUG.void sqlite3
24da0 53 65 6c 65 63 74 57 61 6c 6b 41 73 73 65 72 74  SelectWalkAssert
24db0 32 28 57 61 6c 6b 65 72 2a 2c 20 53 65 6c 65 63  2(Walker*, Selec
24dc0 74 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  t*);.#endif../*.
24dd0 2a 2a 20 52 65 74 75 72 6e 20 63 6f 64 65 20 66  ** Return code f
24de0 72 6f 6d 20 74 68 65 20 70 61 72 73 65 2d 74 72  rom the parse-tr
24df0 65 65 20 77 61 6c 6b 69 6e 67 20 70 72 69 6d 69  ee walking primi
24e00 74 69 76 65 73 20 61 6e 64 20 74 68 65 69 72 0a  tives and their.
24e10 2a 2a 20 63 61 6c 6c 62 61 63 6b 73 2e 0a 2a 2f  ** callbacks..*/
24e20 0a 23 64 65 66 69 6e 65 20 57 52 43 5f 43 6f 6e  .#define WRC_Con
24e30 74 69 6e 75 65 20 20 20 20 30 20 20 20 2f 2a 20  tinue    0   /* 
24e40 43 6f 6e 74 69 6e 75 65 20 64 6f 77 6e 20 69 6e  Continue down in
24e50 74 6f 20 63 68 69 6c 64 72 65 6e 20 2a 2f 0a 23  to children */.#
24e60 64 65 66 69 6e 65 20 57 52 43 5f 50 72 75 6e 65  define WRC_Prune
24e70 20 20 20 20 20 20 20 31 20 20 20 2f 2a 20 4f 6d         1   /* Om
24e80 69 74 20 63 68 69 6c 64 72 65 6e 20 62 75 74 20  it children but 
24e90 63 6f 6e 74 69 6e 75 65 20 77 61 6c 6b 69 6e 67  continue walking
24ea0 20 73 69 62 6c 69 6e 67 73 20 2a 2f 0a 23 64 65   siblings */.#de
24eb0 66 69 6e 65 20 57 52 43 5f 41 62 6f 72 74 20 20  fine WRC_Abort  
24ec0 20 20 20 20 20 32 20 20 20 2f 2a 20 41 62 61 6e       2   /* Aban
24ed0 64 6f 6e 20 74 68 65 20 74 72 65 65 20 77 61 6c  don the tree wal
24ee0 6b 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69  k */../*.** An i
24ef0 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73 20  nstance of this 
24f00 73 74 72 75 63 74 75 72 65 20 72 65 70 72 65 73  structure repres
24f10 65 6e 74 73 20 61 20 73 65 74 20 6f 66 20 6f 6e  ents a set of on
24f20 65 20 6f 72 20 6d 6f 72 65 20 43 54 45 73 0a 2a  e or more CTEs.*
24f30 2a 20 28 63 6f 6d 6d 6f 6e 20 74 61 62 6c 65 20  * (common table 
24f40 65 78 70 72 65 73 73 69 6f 6e 73 29 20 63 72 65  expressions) cre
24f50 61 74 65 64 20 62 79 20 61 20 73 69 6e 67 6c 65  ated by a single
24f60 20 57 49 54 48 20 63 6c 61 75 73 65 2e 0a 2a 2f   WITH clause..*/
24f70 0a 73 74 72 75 63 74 20 57 69 74 68 20 7b 0a 20  .struct With {. 
24f80 20 69 6e 74 20 6e 43 74 65 3b 20 20 20 20 20 20   int nCte;      
24f90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24fa0 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 43 54   /* Number of CT
24fb0 45 73 20 69 6e 20 74 68 65 20 57 49 54 48 20 63  Es in the WITH c
24fc0 6c 61 75 73 65 20 2a 2f 0a 20 20 57 69 74 68 20  lause */.  With 
24fd0 2a 70 4f 75 74 65 72 3b 20 20 20 20 20 20 20 20  *pOuter;        
24fe0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f             /* Co
24ff0 6e 74 61 69 6e 69 6e 67 20 57 49 54 48 20 63 6c  ntaining WITH cl
25000 61 75 73 65 2c 20 6f 72 20 4e 55 4c 4c 20 2a 2f  ause, or NULL */
25010 0a 20 20 73 74 72 75 63 74 20 43 74 65 20 7b 20  .  struct Cte { 
25020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25030 20 20 20 2f 2a 20 46 6f 72 20 65 61 63 68 20 43     /* For each C
25040 54 45 20 69 6e 20 74 68 65 20 57 49 54 48 20 63  TE in the WITH c
25050 6c 61 75 73 65 2e 2e 2e 2e 20 2a 2f 0a 20 20 20  lause.... */.   
25060 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20   char *zName;   
25070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25080 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 69 73   /* Name of this
25090 20 43 54 45 20 2a 2f 0a 20 20 20 20 45 78 70 72   CTE */.    Expr
250a0 4c 69 73 74 20 2a 70 43 6f 6c 73 3b 20 20 20 20  List *pCols;    
250b0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c              /* L
250c0 69 73 74 20 6f 66 20 65 78 70 6c 69 63 69 74 20  ist of explicit 
250d0 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 2c 20 6f 72  column names, or
250e0 20 4e 55 4c 4c 20 2a 2f 0a 20 20 20 20 53 65 6c   NULL */.    Sel
250f0 65 63 74 20 2a 70 53 65 6c 65 63 74 3b 20 20 20  ect *pSelect;   
25100 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
25110 54 68 65 20 64 65 66 69 6e 69 74 69 6f 6e 20 6f  The definition o
25120 66 20 74 68 69 73 20 43 54 45 20 2a 2f 0a 20 20  f this CTE */.  
25130 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 43    const char *zC
25140 74 65 45 72 72 3b 20 20 20 20 20 20 20 20 20 20  teErr;          
25150 20 20 2f 2a 20 45 72 72 6f 72 20 6d 65 73 73 61    /* Error messa
25160 67 65 20 66 6f 72 20 63 69 72 63 75 6c 61 72 20  ge for circular 
25170 72 65 66 65 72 65 6e 63 65 73 20 2a 2f 0a 20 20  references */.  
25180 7d 20 61 5b 31 5d 3b 0a 7d 3b 0a 0a 23 69 66 64  } a[1];.};..#ifd
25190 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
251a0 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63  /*.** An instanc
251b0 65 20 6f 66 20 74 68 65 20 54 72 65 65 56 69 65  e of the TreeVie
251c0 77 20 6f 62 6a 65 63 74 20 69 73 20 75 73 65 64  w object is used
251d0 20 66 6f 72 20 70 72 69 6e 74 69 6e 67 20 74 68   for printing th
251e0 65 20 63 6f 6e 74 65 6e 74 20 6f 66 0a 2a 2a 20  e content of.** 
251f0 64 61 74 61 20 73 74 72 75 63 74 75 72 65 73 20  data structures 
25200 6f 6e 20 73 71 6c 69 74 65 33 44 65 62 75 67 50  on sqlite3DebugP
25210 72 69 6e 74 66 28 29 20 75 73 69 6e 67 20 61 20  rintf() using a 
25220 74 72 65 65 2d 6c 69 6b 65 20 76 69 65 77 2e 0a  tree-like view..
25230 2a 2f 0a 73 74 72 75 63 74 20 54 72 65 65 56 69  */.struct TreeVi
25240 65 77 20 7b 0a 20 20 69 6e 74 20 69 4c 65 76 65  ew {.  int iLeve
25250 6c 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  l;             /
25260 2a 20 57 68 69 63 68 20 6c 65 76 65 6c 20 6f 66  * Which level of
25270 20 74 68 65 20 74 72 65 65 20 77 65 20 61 72 65   the tree we are
25280 20 6f 6e 20 2a 2f 0a 20 20 75 38 20 20 62 4c 69   on */.  u8  bLi
25290 6e 65 5b 31 30 30 5d 3b 20 20 20 20 20 20 20 20  ne[100];        
252a0 20 2f 2a 20 44 72 61 77 20 76 65 72 74 69 63 61   /* Draw vertica
252b0 6c 20 69 6e 20 63 6f 6c 75 6d 6e 20 69 20 69 66  l in column i if
252c0 20 62 4c 69 6e 65 5b 69 5d 20 69 73 20 74 72 75   bLine[i] is tru
252d0 65 20 2a 2f 0a 7d 3b 0a 23 65 6e 64 69 66 20 2f  e */.};.#endif /
252e0 2a 20 53 51 4c 49 54 45 5f 44 45 42 55 47 20 2a  * SQLITE_DEBUG *
252f0 2f 0a 0a 2f 2a 0a 2a 2a 20 41 73 73 75 6d 69 6e  /../*.** Assumin
25300 67 20 7a 49 6e 20 70 6f 69 6e 74 73 20 74 6f 20  g zIn points to 
25310 74 68 65 20 66 69 72 73 74 20 62 79 74 65 20 6f  the first byte o
25320 66 20 61 20 55 54 46 2d 38 20 63 68 61 72 61 63  f a UTF-8 charac
25330 74 65 72 2c 0a 2a 2a 20 61 64 76 61 6e 63 65 20  ter,.** advance 
25340 7a 49 6e 20 74 6f 20 70 6f 69 6e 74 20 74 6f 20  zIn to point to 
25350 74 68 65 20 66 69 72 73 74 20 62 79 74 65 20 6f  the first byte o
25360 66 20 74 68 65 20 6e 65 78 74 20 55 54 46 2d 38  f the next UTF-8
25370 20 63 68 61 72 61 63 74 65 72 2e 0a 2a 2f 0a 23   character..*/.#
25380 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 4b  define SQLITE_SK
25390 49 50 5f 55 54 46 38 28 7a 49 6e 29 20 7b 20 20  IP_UTF8(zIn) {  
253a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
253b0 20 20 20 20 20 20 5c 0a 20 20 69 66 28 20 28 2a        \.  if( (*
253c0 28 7a 49 6e 2b 2b 29 29 3e 3d 30 78 63 30 20 29  (zIn++))>=0xc0 )
253d0 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  {               
253e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5c                 \
253f0 0a 20 20 20 20 77 68 69 6c 65 28 20 28 2a 7a 49  .    while( (*zI
25400 6e 20 26 20 30 78 63 30 29 3d 3d 30 78 38 30 20  n & 0xc0)==0x80 
25410 29 7b 20 7a 49 6e 2b 2b 3b 20 7d 20 20 20 20 20  ){ zIn++; }     
25420 20 20 20 20 20 20 20 20 5c 0a 20 20 7d 20 20 20          \.  }   
25430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25460 20 5c 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20   \.}../*.** The 
25470 53 51 4c 49 54 45 5f 2a 5f 42 4b 50 54 20 6d 61  SQLITE_*_BKPT ma
25480 63 72 6f 73 20 61 72 65 20 73 75 62 73 74 69 74  cros are substit
25490 75 74 65 73 20 66 6f 72 20 74 68 65 20 65 72 72  utes for the err
254a0 6f 72 20 63 6f 64 65 73 20 77 69 74 68 0a 2a 2a  or codes with.**
254b0 20 74 68 65 20 73 61 6d 65 20 6e 61 6d 65 20 62   the same name b
254c0 75 74 20 77 69 74 68 6f 75 74 20 74 68 65 20 5f  ut without the _
254d0 42 4b 50 54 20 73 75 66 66 69 78 2e 20 20 54 68  BKPT suffix.  Th
254e0 65 73 65 20 6d 61 63 72 6f 73 20 69 6e 76 6f 6b  ese macros invok
254f0 65 0a 2a 2a 20 72 6f 75 74 69 6e 65 73 20 74 68  e.** routines th
25500 61 74 20 72 65 70 6f 72 74 20 74 68 65 20 6c 69  at report the li
25510 6e 65 2d 6e 75 6d 62 65 72 20 6f 6e 20 77 68 69  ne-number on whi
25520 63 68 20 74 68 65 20 65 72 72 6f 72 20 6f 72 69  ch the error ori
25530 67 69 6e 61 74 65 64 0a 2a 2a 20 75 73 69 6e 67  ginated.** using
25540 20 73 71 6c 69 74 65 33 5f 6c 6f 67 28 29 2e 20   sqlite3_log(). 
25550 20 54 68 65 20 72 6f 75 74 69 6e 65 73 20 61 6c   The routines al
25560 73 6f 20 70 72 6f 76 69 64 65 20 61 20 63 6f 6e  so provide a con
25570 76 65 6e 69 65 6e 74 20 70 6c 61 63 65 0a 2a 2a  venient place.**
25580 20 74 6f 20 73 65 74 20 61 20 64 65 62 75 67 67   to set a debugg
25590 65 72 20 62 72 65 61 6b 70 6f 69 6e 74 2e 0a 2a  er breakpoint..*
255a0 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 65 70  /.int sqlite3Rep
255b0 6f 72 74 45 72 72 6f 72 28 69 6e 74 20 69 45 72  ortError(int iEr
255c0 72 2c 20 69 6e 74 20 6c 69 6e 65 6e 6f 2c 20 63  r, int lineno, c
255d0 6f 6e 73 74 20 63 68 61 72 20 2a 7a 54 79 70 65  onst char *zType
255e0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 6f  );.int sqlite3Co
255f0 72 72 75 70 74 45 72 72 6f 72 28 69 6e 74 29 3b  rruptError(int);
25600 0a 69 6e 74 20 73 71 6c 69 74 65 33 4d 69 73 75  .int sqlite3Misu
25610 73 65 45 72 72 6f 72 28 69 6e 74 29 3b 0a 69 6e  seError(int);.in
25620 74 20 73 71 6c 69 74 65 33 43 61 6e 74 6f 70 65  t sqlite3Cantope
25630 6e 45 72 72 6f 72 28 69 6e 74 29 3b 0a 23 64 65  nError(int);.#de
25640 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 4f 52 52  fine SQLITE_CORR
25650 55 50 54 5f 42 4b 50 54 20 73 71 6c 69 74 65 33  UPT_BKPT sqlite3
25660 43 6f 72 72 75 70 74 45 72 72 6f 72 28 5f 5f 4c  CorruptError(__L
25670 49 4e 45 5f 5f 29 0a 23 64 65 66 69 6e 65 20 53  INE__).#define S
25680 51 4c 49 54 45 5f 4d 49 53 55 53 45 5f 42 4b 50  QLITE_MISUSE_BKP
25690 54 20 73 71 6c 69 74 65 33 4d 69 73 75 73 65 45  T sqlite3MisuseE
256a0 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 29 0a 23  rror(__LINE__).#
256b0 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 41  define SQLITE_CA
256c0 4e 54 4f 50 45 4e 5f 42 4b 50 54 20 73 71 6c 69  NTOPEN_BKPT sqli
256d0 74 65 33 43 61 6e 74 6f 70 65 6e 45 72 72 6f 72  te3CantopenError
256e0 28 5f 5f 4c 49 4e 45 5f 5f 29 0a 23 69 66 64 65  (__LINE__).#ifde
256f0 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20  f SQLITE_DEBUG. 
25700 20 69 6e 74 20 73 71 6c 69 74 65 33 4e 6f 6d 65   int sqlite3Nome
25710 6d 45 72 72 6f 72 28 69 6e 74 29 3b 0a 20 20 69  mError(int);.  i
25720 6e 74 20 73 71 6c 69 74 65 33 49 6f 65 72 72 6e  nt sqlite3Ioerrn
25730 6f 6d 65 6d 45 72 72 6f 72 28 69 6e 74 29 3b 0a  omemError(int);.
25740 20 20 69 6e 74 20 73 71 6c 69 74 65 33 43 6f 72    int sqlite3Cor
25750 72 75 70 74 50 67 6e 6f 45 72 72 6f 72 28 69 6e  ruptPgnoError(in
25760 74 2c 50 67 6e 6f 29 3b 0a 23 20 64 65 66 69 6e  t,Pgno);.# defin
25770 65 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 5f 42  e SQLITE_NOMEM_B
25780 4b 50 54 20 73 71 6c 69 74 65 33 4e 6f 6d 65 6d  KPT sqlite3Nomem
25790 45 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 29 0a  Error(__LINE__).
257a0 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
257b0 49 4f 45 52 52 5f 4e 4f 4d 45 4d 5f 42 4b 50 54  IOERR_NOMEM_BKPT
257c0 20 73 71 6c 69 74 65 33 49 6f 65 72 72 6e 6f 6d   sqlite3Ioerrnom
257d0 65 6d 45 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f  emError(__LINE__
257e0 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  ).# define SQLIT
257f0 45 5f 43 4f 52 52 55 50 54 5f 50 47 4e 4f 28 50  E_CORRUPT_PGNO(P
25800 29 20 73 71 6c 69 74 65 33 43 6f 72 72 75 70 74  ) sqlite3Corrupt
25810 50 67 6e 6f 45 72 72 6f 72 28 5f 5f 4c 49 4e 45  PgnoError(__LINE
25820 5f 5f 2c 28 50 29 29 0a 23 65 6c 73 65 0a 23 20  __,(P)).#else.# 
25830 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e 4f  define SQLITE_NO
25840 4d 45 4d 5f 42 4b 50 54 20 53 51 4c 49 54 45 5f  MEM_BKPT SQLITE_
25850 4e 4f 4d 45 4d 0a 23 20 64 65 66 69 6e 65 20 53  NOMEM.# define S
25860 51 4c 49 54 45 5f 49 4f 45 52 52 5f 4e 4f 4d 45  QLITE_IOERR_NOME
25870 4d 5f 42 4b 50 54 20 53 51 4c 49 54 45 5f 49 4f  M_BKPT SQLITE_IO
25880 45 52 52 5f 4e 4f 4d 45 4d 0a 23 20 64 65 66 69  ERR_NOMEM.# defi
25890 6e 65 20 53 51 4c 49 54 45 5f 43 4f 52 52 55 50  ne SQLITE_CORRUP
258a0 54 5f 50 47 4e 4f 28 50 29 20 73 71 6c 69 74 65  T_PGNO(P) sqlite
258b0 33 43 6f 72 72 75 70 74 45 72 72 6f 72 28 5f 5f  3CorruptError(__
258c0 4c 49 4e 45 5f 5f 29 0a 23 65 6e 64 69 66 0a 0a  LINE__).#endif..
258d0 2f 2a 0a 2a 2a 20 46 54 53 33 20 61 6e 64 20 46  /*.** FTS3 and F
258e0 54 53 34 20 62 6f 74 68 20 72 65 71 75 69 72 65  TS4 both require
258f0 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 73   virtual table s
25900 75 70 70 6f 72 74 0a 2a 2f 0a 23 69 66 20 64 65  upport.*/.#if de
25910 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49  fined(SQLITE_OMI
25920 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 29 0a  T_VIRTUALTABLE).
25930 23 20 75 6e 64 65 66 20 53 51 4c 49 54 45 5f 45  # undef SQLITE_E
25940 4e 41 42 4c 45 5f 46 54 53 33 0a 23 20 75 6e 64  NABLE_FTS3.# und
25950 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ef SQLITE_ENABLE
25960 5f 46 54 53 34 0a 23 65 6e 64 69 66 0a 0a 2f 2a  _FTS4.#endif../*
25970 0a 2a 2a 20 46 54 53 34 20 69 73 20 72 65 61 6c  .** FTS4 is real
25980 6c 79 20 61 6e 20 65 78 74 65 6e 73 69 6f 6e 20  ly an extension 
25990 66 6f 72 20 46 54 53 33 2e 20 20 49 74 20 69 73  for FTS3.  It is
259a0 20 65 6e 61 62 6c 65 64 20 75 73 69 6e 67 20 74   enabled using t
259b0 68 65 0a 2a 2a 20 53 51 4c 49 54 45 5f 45 4e 41  he.** SQLITE_ENA
259c0 42 4c 45 5f 46 54 53 33 20 6d 61 63 72 6f 2e 20  BLE_FTS3 macro. 
259d0 20 42 75 74 20 74 6f 20 61 76 6f 69 64 20 63 6f   But to avoid co
259e0 6e 66 75 73 69 6f 6e 20 77 65 20 61 6c 73 6f 20  nfusion we also 
259f0 63 61 6c 6c 0a 2a 2a 20 74 68 65 20 53 51 4c 49  call.** the SQLI
25a00 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 34 20 6d  TE_ENABLE_FTS4 m
25a10 61 63 72 6f 20 74 6f 20 73 65 72 76 65 20 61 73  acro to serve as
25a20 20 61 6e 20 61 6c 69 61 73 20 66 6f 72 20 53 51   an alias for SQ
25a30 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33  LITE_ENABLE_FTS3
25a40 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64  ..*/.#if defined
25a50 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46  (SQLITE_ENABLE_F
25a60 54 53 34 29 20 26 26 20 21 64 65 66 69 6e 65 64  TS4) && !defined
25a70 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46  (SQLITE_ENABLE_F
25a80 54 53 33 29 0a 23 20 64 65 66 69 6e 65 20 53 51  TS3).# define SQ
25a90 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33  LITE_ENABLE_FTS3
25aa0 20 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a   1.#endif../*.**
25ab0 20 54 68 65 20 63 74 79 70 65 2e 68 20 68 65 61   The ctype.h hea
25ac0 64 65 72 20 69 73 20 6e 65 65 64 65 64 20 66 6f  der is needed fo
25ad0 72 20 6e 6f 6e 2d 41 53 43 49 49 20 73 79 73 74  r non-ASCII syst
25ae0 65 6d 73 2e 20 20 49 74 20 69 73 20 61 6c 73 6f  ems.  It is also
25af0 0a 2a 2a 20 6e 65 65 64 65 64 20 62 79 20 46 54  .** needed by FT
25b00 53 33 20 77 68 65 6e 20 46 54 53 33 20 69 73 20  S3 when FTS3 is 
25b10 69 6e 63 6c 75 64 65 64 20 69 6e 20 74 68 65 20  included in the 
25b20 61 6d 61 6c 67 61 6d 61 74 69 6f 6e 2e 0a 2a 2f  amalgamation..*/
25b30 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51  .#if !defined(SQ
25b40 4c 49 54 45 5f 41 53 43 49 49 29 20 7c 7c 20 5c  LITE_ASCII) || \
25b50 0a 20 20 20 20 28 64 65 66 69 6e 65 64 28 53 51  .    (defined(SQ
25b60 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33  LITE_ENABLE_FTS3
25b70 29 20 26 26 20 64 65 66 69 6e 65 64 28 53 51 4c  ) && defined(SQL
25b80 49 54 45 5f 41 4d 41 4c 47 41 4d 41 54 49 4f 4e  ITE_AMALGAMATION
25b90 29 29 0a 23 20 69 6e 63 6c 75 64 65 20 3c 63 74  )).# include <ct
25ba0 79 70 65 2e 68 3e 0a 23 65 6e 64 69 66 0a 0a 2f  ype.h>.#endif../
25bb0 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69  *.** The followi
25bc0 6e 67 20 6d 61 63 72 6f 73 20 6d 69 6d 69 63 20  ng macros mimic 
25bd0 74 68 65 20 73 74 61 6e 64 61 72 64 20 6c 69 62  the standard lib
25be0 72 61 72 79 20 66 75 6e 63 74 69 6f 6e 73 20 74  rary functions t
25bf0 6f 75 70 70 65 72 28 29 2c 0a 2a 2a 20 69 73 73  oupper(),.** iss
25c00 70 61 63 65 28 29 2c 20 69 73 61 6c 6e 75 6d 28  pace(), isalnum(
25c10 29 2c 20 69 73 64 69 67 69 74 28 29 20 61 6e 64  ), isdigit() and
25c20 20 69 73 78 64 69 67 69 74 28 29 2c 20 72 65 73   isxdigit(), res
25c30 70 65 63 74 69 76 65 6c 79 2e 20 54 68 65 0a 2a  pectively. The.*
25c40 2a 20 73 71 6c 69 74 65 20 76 65 72 73 69 6f 6e  * sqlite version
25c50 73 20 6f 6e 6c 79 20 77 6f 72 6b 20 66 6f 72 20  s only work for 
25c60 41 53 43 49 49 20 63 68 61 72 61 63 74 65 72 73  ASCII characters
25c70 2c 20 72 65 67 61 72 64 6c 65 73 73 20 6f 66 20  , regardless of 
25c80 6c 6f 63 61 6c 65 2e 0a 2a 2f 0a 23 69 66 64 65  locale..*/.#ifde
25c90 66 20 53 51 4c 49 54 45 5f 41 53 43 49 49 0a 23  f SQLITE_ASCII.#
25ca0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54   define sqlite3T
25cb0 6f 75 70 70 65 72 28 78 29 20 20 28 28 78 29 26  oupper(x)  ((x)&
25cc0 7e 28 73 71 6c 69 74 65 33 43 74 79 70 65 4d 61  ~(sqlite3CtypeMa
25cd0 70 5b 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72  p[(unsigned char
25ce0 29 28 78 29 5d 26 30 78 32 30 29 29 0a 23 20 64  )(x)]&0x20)).# d
25cf0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 73  efine sqlite3Iss
25d00 70 61 63 65 28 78 29 20 20 20 28 73 71 6c 69 74  pace(x)   (sqlit
25d10 65 33 43 74 79 70 65 4d 61 70 5b 28 75 6e 73 69  e3CtypeMap[(unsi
25d20 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d 26 30  gned char)(x)]&0
25d30 78 30 31 29 0a 23 20 64 65 66 69 6e 65 20 73 71  x01).# define sq
25d40 6c 69 74 65 33 49 73 61 6c 6e 75 6d 28 78 29 20  lite3Isalnum(x) 
25d50 20 20 28 73 71 6c 69 74 65 33 43 74 79 70 65 4d    (sqlite3CtypeM
25d60 61 70 5b 28 75 6e 73 69 67 6e 65 64 20 63 68 61  ap[(unsigned cha
25d70 72 29 28 78 29 5d 26 30 78 30 36 29 0a 23 20 64  r)(x)]&0x06).# d
25d80 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 61  efine sqlite3Isa
25d90 6c 70 68 61 28 78 29 20 20 20 28 73 71 6c 69 74  lpha(x)   (sqlit
25da0 65 33 43 74 79 70 65 4d 61 70 5b 28 75 6e 73 69  e3CtypeMap[(unsi
25db0 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d 26 30  gned char)(x)]&0
25dc0 78 30 32 29 0a 23 20 64 65 66 69 6e 65 20 73 71  x02).# define sq
25dd0 6c 69 74 65 33 49 73 64 69 67 69 74 28 78 29 20  lite3Isdigit(x) 
25de0 20 20 28 73 71 6c 69 74 65 33 43 74 79 70 65 4d    (sqlite3CtypeM
25df0 61 70 5b 28 75 6e 73 69 67 6e 65 64 20 63 68 61  ap[(unsigned cha
25e00 72 29 28 78 29 5d 26 30 78 30 34 29 0a 23 20 64  r)(x)]&0x04).# d
25e10 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 78  efine sqlite3Isx
25e20 64 69 67 69 74 28 78 29 20 20 28 73 71 6c 69 74  digit(x)  (sqlit
25e30 65 33 43 74 79 70 65 4d 61 70 5b 28 75 6e 73 69  e3CtypeMap[(unsi
25e40 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d 26 30  gned char)(x)]&0
25e50 78 30 38 29 0a 23 20 64 65 66 69 6e 65 20 73 71  x08).# define sq
25e60 6c 69 74 65 33 54 6f 6c 6f 77 65 72 28 78 29 20  lite3Tolower(x) 
25e70 20 20 28 73 71 6c 69 74 65 33 55 70 70 65 72 54    (sqlite3UpperT
25e80 6f 4c 6f 77 65 72 5b 28 75 6e 73 69 67 6e 65 64  oLower[(unsigned
25e90 20 63 68 61 72 29 28 78 29 5d 29 0a 23 20 64 65   char)(x)]).# de
25ea0 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 71 75  fine sqlite3Isqu
25eb0 6f 74 65 28 78 29 20 20 20 28 73 71 6c 69 74 65  ote(x)   (sqlite
25ec0 33 43 74 79 70 65 4d 61 70 5b 28 75 6e 73 69 67  3CtypeMap[(unsig
25ed0 6e 65 64 20 63 68 61 72 29 28 78 29 5d 26 30 78  ned char)(x)]&0x
25ee0 38 30 29 0a 23 65 6c 73 65 0a 23 20 64 65 66 69  80).#else.# defi
25ef0 6e 65 20 73 71 6c 69 74 65 33 54 6f 75 70 70 65  ne sqlite3Touppe
25f00 72 28 78 29 20 20 20 74 6f 75 70 70 65 72 28 28  r(x)   toupper((
25f10 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78  unsigned char)(x
25f20 29 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  )).# define sqli
25f30 74 65 33 49 73 73 70 61 63 65 28 78 29 20 20 20  te3Isspace(x)   
25f40 69 73 73 70 61 63 65 28 28 75 6e 73 69 67 6e 65  isspace((unsigne
25f50 64 20 63 68 61 72 29 28 78 29 29 0a 23 20 64 65  d char)(x)).# de
25f60 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 61 6c  fine sqlite3Isal
25f70 6e 75 6d 28 78 29 20 20 20 69 73 61 6c 6e 75 6d  num(x)   isalnum
25f80 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29  ((unsigned char)
25f90 28 78 29 29 0a 23 20 64 65 66 69 6e 65 20 73 71  (x)).# define sq
25fa0 6c 69 74 65 33 49 73 61 6c 70 68 61 28 78 29 20  lite3Isalpha(x) 
25fb0 20 20 69 73 61 6c 70 68 61 28 28 75 6e 73 69 67    isalpha((unsig
25fc0 6e 65 64 20 63 68 61 72 29 28 78 29 29 0a 23 20  ned char)(x)).# 
25fd0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73  define sqlite3Is
25fe0 64 69 67 69 74 28 78 29 20 20 20 69 73 64 69 67  digit(x)   isdig
25ff0 69 74 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61  it((unsigned cha
26000 72 29 28 78 29 29 0a 23 20 64 65 66 69 6e 65 20  r)(x)).# define 
26010 73 71 6c 69 74 65 33 49 73 78 64 69 67 69 74 28  sqlite3Isxdigit(
26020 78 29 20 20 69 73 78 64 69 67 69 74 28 28 75 6e  x)  isxdigit((un
26030 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 29  signed char)(x))
26040 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
26050 33 54 6f 6c 6f 77 65 72 28 78 29 20 20 20 74 6f  3Tolower(x)   to
26060 6c 6f 77 65 72 28 28 75 6e 73 69 67 6e 65 64 20  lower((unsigned 
26070 63 68 61 72 29 28 78 29 29 0a 23 20 64 65 66 69  char)(x)).# defi
26080 6e 65 20 73 71 6c 69 74 65 33 49 73 71 75 6f 74  ne sqlite3Isquot
26090 65 28 78 29 20 20 20 28 28 78 29 3d 3d 27 22 27  e(x)   ((x)=='"'
260a0 7c 7c 28 78 29 3d 3d 27 5c 27 27 7c 7c 28 78 29  ||(x)=='\''||(x)
260b0 3d 3d 27 5b 27 7c 7c 28 78 29 3d 3d 27 60 27 29  =='['||(x)=='`')
260c0 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20  .#endif.#ifndef 
260d0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 4f 4d 50  SQLITE_OMIT_COMP
260e0 49 4c 45 4f 50 54 49 4f 4e 5f 44 49 41 47 53 0a  ILEOPTION_DIAGS.
260f0 69 6e 74 20 73 71 6c 69 74 65 33 49 73 49 64 43  int sqlite3IsIdC
26100 68 61 72 28 75 38 29 3b 0a 23 65 6e 64 69 66 0a  har(u8);.#endif.
26110 0a 2f 2a 0a 2a 2a 20 49 6e 74 65 72 6e 61 6c 20  ./*.** Internal 
26120 66 75 6e 63 74 69 6f 6e 20 70 72 6f 74 6f 74 79  function prototy
26130 70 65 73 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74  pes.*/.int sqlit
26140 65 33 53 74 72 49 43 6d 70 28 63 6f 6e 73 74 20  e3StrICmp(const 
26150 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72  char*,const char
26160 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53  *);.int sqlite3S
26170 74 72 6c 65 6e 33 30 28 63 6f 6e 73 74 20 63 68  trlen30(const ch
26180 61 72 2a 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69  ar*);.char *sqli
26190 74 65 33 43 6f 6c 75 6d 6e 54 79 70 65 28 43 6f  te3ColumnType(Co
261a0 6c 75 6d 6e 2a 2c 63 68 61 72 2a 29 3b 0a 23 64  lumn*,char*);.#d
261b0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74 72  efine sqlite3Str
261c0 4e 49 43 6d 70 20 73 71 6c 69 74 65 33 5f 73 74  NICmp sqlite3_st
261d0 72 6e 69 63 6d 70 0a 0a 69 6e 74 20 73 71 6c 69  rnicmp..int sqli
261e0 74 65 33 4d 61 6c 6c 6f 63 49 6e 69 74 28 76 6f  te3MallocInit(vo
261f0 69 64 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  id);.void sqlite
26200 33 4d 61 6c 6c 6f 63 45 6e 64 28 76 6f 69 64 29  3MallocEnd(void)
26210 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 4d  ;.void *sqlite3M
26220 61 6c 6c 6f 63 28 75 36 34 29 3b 0a 76 6f 69 64  alloc(u64);.void
26230 20 2a 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 5a   *sqlite3MallocZ
26240 65 72 6f 28 75 36 34 29 3b 0a 76 6f 69 64 20 2a  ero(u64);.void *
26250 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 5a  sqlite3DbMallocZ
26260 65 72 6f 28 73 71 6c 69 74 65 33 2a 2c 20 75 36  ero(sqlite3*, u6
26270 34 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65  4);.void *sqlite
26280 33 44 62 4d 61 6c 6c 6f 63 52 61 77 28 73 71 6c  3DbMallocRaw(sql
26290 69 74 65 33 2a 2c 20 75 36 34 29 3b 0a 76 6f 69  ite3*, u64);.voi
262a0 64 20 2a 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c  d *sqlite3DbMall
262b0 6f 63 52 61 77 4e 4e 28 73 71 6c 69 74 65 33 2a  ocRawNN(sqlite3*
262c0 2c 20 75 36 34 29 3b 0a 63 68 61 72 20 2a 73 71  , u64);.char *sq
262d0 6c 69 74 65 33 44 62 53 74 72 44 75 70 28 73 71  lite3DbStrDup(sq
262e0 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61  lite3*,const cha
262f0 72 2a 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74  r*);.char *sqlit
26300 65 33 44 62 53 74 72 4e 44 75 70 28 73 71 6c 69  e3DbStrNDup(sqli
26310 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  te3*,const char*
26320 2c 20 75 36 34 29 3b 0a 63 68 61 72 20 2a 73 71  , u64);.char *sq
26330 6c 69 74 65 33 44 62 53 70 61 6e 44 75 70 28 73  lite3DbSpanDup(s
26340 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68  qlite3*,const ch
26350 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29  ar*,const char*)
26360 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 52  ;.void *sqlite3R
26370 65 61 6c 6c 6f 63 28 76 6f 69 64 2a 2c 20 75 36  ealloc(void*, u6
26380 34 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65  4);.void *sqlite
26390 33 44 62 52 65 61 6c 6c 6f 63 4f 72 46 72 65 65  3DbReallocOrFree
263a0 28 73 71 6c 69 74 65 33 20 2a 2c 20 76 6f 69 64  (sqlite3 *, void
263b0 20 2a 2c 20 75 36 34 29 3b 0a 76 6f 69 64 20 2a   *, u64);.void *
263c0 73 71 6c 69 74 65 33 44 62 52 65 61 6c 6c 6f 63  sqlite3DbRealloc
263d0 28 73 71 6c 69 74 65 33 20 2a 2c 20 76 6f 69 64  (sqlite3 *, void
263e0 20 2a 2c 20 75 36 34 29 3b 0a 76 6f 69 64 20 73   *, u64);.void s
263f0 71 6c 69 74 65 33 44 62 46 72 65 65 28 73 71 6c  qlite3DbFree(sql
26400 69 74 65 33 2a 2c 20 76 6f 69 64 2a 29 3b 0a 76  ite3*, void*);.v
26410 6f 69 64 20 73 71 6c 69 74 65 33 44 62 46 72 65  oid sqlite3DbFre
26420 65 4e 4e 28 73 71 6c 69 74 65 33 2a 2c 20 76 6f  eNN(sqlite3*, vo
26430 69 64 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  id*);.int sqlite
26440 33 4d 61 6c 6c 6f 63 53 69 7a 65 28 76 6f 69 64  3MallocSize(void
26450 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 44  *);.int sqlite3D
26460 62 4d 61 6c 6c 6f 63 53 69 7a 65 28 73 71 6c 69  bMallocSize(sqli
26470 74 65 33 2a 2c 20 76 6f 69 64 2a 29 3b 0a 76 6f  te3*, void*);.vo
26480 69 64 20 2a 73 71 6c 69 74 65 33 50 61 67 65 4d  id *sqlite3PageM
26490 61 6c 6c 6f 63 28 69 6e 74 29 3b 0a 76 6f 69 64  alloc(int);.void
264a0 20 73 71 6c 69 74 65 33 50 61 67 65 46 72 65 65   sqlite3PageFree
264b0 28 76 6f 69 64 2a 29 3b 0a 76 6f 69 64 20 73 71  (void*);.void sq
264c0 6c 69 74 65 33 4d 65 6d 53 65 74 44 65 66 61 75  lite3MemSetDefau
264d0 6c 74 28 76 6f 69 64 29 3b 0a 23 69 66 6e 64 65  lt(void);.#ifnde
264e0 66 20 53 51 4c 49 54 45 5f 55 4e 54 45 53 54 41  f SQLITE_UNTESTA
264f0 42 4c 45 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  BLE.void sqlite3
26500 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 48 6f 6f 6b  BenignMallocHook
26510 73 28 76 6f 69 64 20 28 2a 29 28 76 6f 69 64 29  s(void (*)(void)
26520 2c 20 76 6f 69 64 20 28 2a 29 28 76 6f 69 64 29  , void (*)(void)
26530 29 3b 0a 23 65 6e 64 69 66 0a 69 6e 74 20 73 71  );.#endif.int sq
26540 6c 69 74 65 33 48 65 61 70 4e 65 61 72 6c 79 46  lite3HeapNearlyF
26550 75 6c 6c 28 76 6f 69 64 29 3b 0a 0a 2f 2a 0a 2a  ull(void);../*.*
26560 2a 20 4f 6e 20 73 79 73 74 65 6d 73 20 77 69 74  * On systems wit
26570 68 20 61 6d 70 6c 65 20 73 74 61 63 6b 20 73 70  h ample stack sp
26580 61 63 65 20 61 6e 64 20 74 68 61 74 20 73 75 70  ace and that sup
26590 70 6f 72 74 20 61 6c 6c 6f 63 61 28 29 2c 20 6d  port alloca(), m
265a0 61 6b 65 0a 2a 2a 20 75 73 65 20 6f 66 20 61 6c  ake.** use of al
265b0 6c 6f 63 61 28 29 20 74 6f 20 6f 62 74 61 69 6e  loca() to obtain
265c0 20 73 70 61 63 65 20 66 6f 72 20 6c 61 72 67 65   space for large
265d0 20 61 75 74 6f 6d 61 74 69 63 20 6f 62 6a 65 63   automatic objec
265e0 74 73 2e 20 20 42 79 20 64 65 66 61 75 6c 74 2c  ts.  By default,
265f0 0a 2a 2a 20 6f 62 74 61 69 6e 20 73 70 61 63 65  .** obtain space
26600 20 66 72 6f 6d 20 6d 61 6c 6c 6f 63 28 29 2e 0a   from malloc()..
26610 2a 2a 0a 2a 2a 20 54 68 65 20 61 6c 6c 6f 63 61  **.** The alloca
26620 28 29 20 72 6f 75 74 69 6e 65 20 6e 65 76 65 72  () routine never
26630 20 72 65 74 75 72 6e 73 20 4e 55 4c 4c 2e 20 20   returns NULL.  
26640 54 68 69 73 20 77 69 6c 6c 20 63 61 75 73 65 20  This will cause 
26650 63 6f 64 65 20 70 61 74 68 73 0a 2a 2a 20 74 68  code paths.** th
26660 61 74 20 64 65 61 6c 20 77 69 74 68 20 73 71 6c  at deal with sql
26670 69 74 65 33 53 74 61 63 6b 41 6c 6c 6f 63 28 29  ite3StackAlloc()
26680 20 66 61 69 6c 75 72 65 73 20 74 6f 20 62 65 20   failures to be 
26690 75 6e 72 65 61 63 68 61 62 6c 65 2e 0a 2a 2f 0a  unreachable..*/.
266a0 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 55 53  #ifdef SQLITE_US
266b0 45 5f 41 4c 4c 4f 43 41 0a 23 20 64 65 66 69 6e  E_ALLOCA.# defin
266c0 65 20 73 71 6c 69 74 65 33 53 74 61 63 6b 41 6c  e sqlite3StackAl
266d0 6c 6f 63 52 61 77 28 44 2c 4e 29 20 20 20 61 6c  locRaw(D,N)   al
266e0 6c 6f 63 61 28 4e 29 0a 23 20 64 65 66 69 6e 65  loca(N).# define
266f0 20 73 71 6c 69 74 65 33 53 74 61 63 6b 41 6c 6c   sqlite3StackAll
26700 6f 63 5a 65 72 6f 28 44 2c 4e 29 20 20 6d 65 6d  ocZero(D,N)  mem
26710 73 65 74 28 61 6c 6c 6f 63 61 28 4e 29 2c 20 30  set(alloca(N), 0
26720 2c 20 4e 29 0a 23 20 64 65 66 69 6e 65 20 73 71  , N).# define sq
26730 6c 69 74 65 33 53 74 61 63 6b 46 72 65 65 28 44  lite3StackFree(D
26740 2c 50 29 0a 23 65 6c 73 65 0a 23 20 64 65 66 69  ,P).#else.# defi
26750 6e 65 20 73 71 6c 69 74 65 33 53 74 61 63 6b 41  ne sqlite3StackA
26760 6c 6c 6f 63 52 61 77 28 44 2c 4e 29 20 20 20 73  llocRaw(D,N)   s
26770 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 52 61  qlite3DbMallocRa
26780 77 28 44 2c 4e 29 0a 23 20 64 65 66 69 6e 65 20  w(D,N).# define 
26790 73 71 6c 69 74 65 33 53 74 61 63 6b 41 6c 6c 6f  sqlite3StackAllo
267a0 63 5a 65 72 6f 28 44 2c 4e 29 20 20 73 71 6c 69  cZero(D,N)  sqli
267b0 74 65 33 44 62 4d 61 6c 6c 6f 63 5a 65 72 6f 28  te3DbMallocZero(
267c0 44 2c 4e 29 0a 23 20 64 65 66 69 6e 65 20 73 71  D,N).# define sq
267d0 6c 69 74 65 33 53 74 61 63 6b 46 72 65 65 28 44  lite3StackFree(D
267e0 2c 50 29 20 20 20 20 20 20 20 73 71 6c 69 74 65  ,P)       sqlite
267f0 33 44 62 46 72 65 65 28 44 2c 50 29 0a 23 65 6e  3DbFree(D,P).#en
26800 64 69 66 0a 0a 2f 2a 20 44 6f 20 6e 6f 74 20 61  dif../* Do not a
26810 6c 6c 6f 77 20 62 6f 74 68 20 4d 45 4d 53 59 53  llow both MEMSYS
26820 35 20 61 6e 64 20 4d 45 4d 53 59 53 33 20 74 6f  5 and MEMSYS3 to
26830 20 62 65 20 64 65 66 69 6e 65 64 20 74 6f 67 65   be defined toge
26840 74 68 65 72 2e 20 20 49 66 20 74 68 65 79 0a 2a  ther.  If they.*
26850 2a 20 61 72 65 2c 20 64 69 73 61 62 6c 65 20 4d  * are, disable M
26860 45 4d 53 59 53 33 0a 2a 2f 0a 23 69 66 64 65 66  EMSYS3.*/.#ifdef
26870 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4d   SQLITE_ENABLE_M
26880 45 4d 53 59 53 35 0a 63 6f 6e 73 74 20 73 71 6c  EMSYS5.const sql
26890 69 74 65 33 5f 6d 65 6d 5f 6d 65 74 68 6f 64 73  ite3_mem_methods
268a0 20 2a 73 71 6c 69 74 65 33 4d 65 6d 47 65 74 4d   *sqlite3MemGetM
268b0 65 6d 73 79 73 35 28 76 6f 69 64 29 3b 0a 23 75  emsys5(void);.#u
268c0 6e 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  ndef SQLITE_ENAB
268d0 4c 45 5f 4d 45 4d 53 59 53 33 0a 23 65 6e 64 69  LE_MEMSYS3.#endi
268e0 66 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  f.#ifdef SQLITE_
268f0 45 4e 41 42 4c 45 5f 4d 45 4d 53 59 53 33 0a 63  ENABLE_MEMSYS3.c
26900 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d 65 6d  onst sqlite3_mem
26910 5f 6d 65 74 68 6f 64 73 20 2a 73 71 6c 69 74 65  _methods *sqlite
26920 33 4d 65 6d 47 65 74 4d 65 6d 73 79 73 33 28 76  3MemGetMemsys3(v
26930 6f 69 64 29 3b 0a 23 65 6e 64 69 66 0a 0a 0a 23  oid);.#endif...#
26940 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4d 55  ifndef SQLITE_MU
26950 54 45 58 5f 4f 4d 49 54 0a 20 20 73 71 6c 69 74  TEX_OMIT.  sqlit
26960 65 33 5f 6d 75 74 65 78 5f 6d 65 74 68 6f 64 73  e3_mutex_methods
26970 20 63 6f 6e 73 74 20 2a 73 71 6c 69 74 65 33 44   const *sqlite3D
26980 65 66 61 75 6c 74 4d 75 74 65 78 28 76 6f 69 64  efaultMutex(void
26990 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 74  );.  sqlite3_mut
269a0 65 78 5f 6d 65 74 68 6f 64 73 20 63 6f 6e 73 74  ex_methods const
269b0 20 2a 73 71 6c 69 74 65 33 4e 6f 6f 70 4d 75 74   *sqlite3NoopMut
269c0 65 78 28 76 6f 69 64 29 3b 0a 20 20 73 71 6c 69  ex(void);.  sqli
269d0 74 65 33 5f 6d 75 74 65 78 20 2a 73 71 6c 69 74  te3_mutex *sqlit
269e0 65 33 4d 75 74 65 78 41 6c 6c 6f 63 28 69 6e 74  e3MutexAlloc(int
269f0 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33  );.  int sqlite3
26a00 4d 75 74 65 78 49 6e 69 74 28 76 6f 69 64 29 3b  MutexInit(void);
26a10 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 4d 75  .  int sqlite3Mu
26a20 74 65 78 45 6e 64 28 76 6f 69 64 29 3b 0a 23 65  texEnd(void);.#e
26a30 6e 64 69 66 0a 23 69 66 20 21 64 65 66 69 6e 65  ndif.#if !define
26a40 64 28 53 51 4c 49 54 45 5f 4d 55 54 45 58 5f 4f  d(SQLITE_MUTEX_O
26a50 4d 49 54 29 20 26 26 20 21 64 65 66 69 6e 65 64  MIT) && !defined
26a60 28 53 51 4c 49 54 45 5f 4d 55 54 45 58 5f 4e 4f  (SQLITE_MUTEX_NO
26a70 4f 50 29 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  OP).  void sqlit
26a80 65 33 4d 65 6d 6f 72 79 42 61 72 72 69 65 72 28  e3MemoryBarrier(
26a90 76 6f 69 64 29 3b 0a 23 65 6c 73 65 0a 23 20 64  void);.#else.# d
26aa0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 4d 65 6d  efine sqlite3Mem
26ab0 6f 72 79 42 61 72 72 69 65 72 28 29 0a 23 65 6e  oryBarrier().#en
26ac0 64 69 66 0a 0a 73 71 6c 69 74 65 33 5f 69 6e 74  dif..sqlite3_int
26ad0 36 34 20 73 71 6c 69 74 65 33 53 74 61 74 75 73  64 sqlite3Status
26ae0 56 61 6c 75 65 28 69 6e 74 29 3b 0a 76 6f 69 64  Value(int);.void
26af0 20 73 71 6c 69 74 65 33 53 74 61 74 75 73 55 70   sqlite3StatusUp
26b00 28 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64  (int, int);.void
26b10 20 73 71 6c 69 74 65 33 53 74 61 74 75 73 44 6f   sqlite3StatusDo
26b20 77 6e 28 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f  wn(int, int);.vo
26b30 69 64 20 73 71 6c 69 74 65 33 53 74 61 74 75 73  id sqlite3Status
26b40 48 69 67 68 77 61 74 65 72 28 69 6e 74 2c 20 69  Highwater(int, i
26b50 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  nt);.int sqlite3
26b60 4c 6f 6f 6b 61 73 69 64 65 55 73 65 64 28 73 71  LookasideUsed(sq
26b70 6c 69 74 65 33 2a 2c 69 6e 74 2a 29 3b 0a 0a 2f  lite3*,int*);../
26b80 2a 20 41 63 63 65 73 73 20 74 6f 20 6d 75 74 65  * Access to mute
26b90 78 65 73 20 75 73 65 64 20 62 79 20 73 71 6c 69  xes used by sqli
26ba0 74 65 33 5f 73 74 61 74 75 73 28 29 20 2a 2f 0a  te3_status() */.
26bb0 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 20 2a 73  sqlite3_mutex *s
26bc0 71 6c 69 74 65 33 50 63 61 63 68 65 31 4d 75 74  qlite3Pcache1Mut
26bd0 65 78 28 76 6f 69 64 29 3b 0a 73 71 6c 69 74 65  ex(void);.sqlite
26be0 33 5f 6d 75 74 65 78 20 2a 73 71 6c 69 74 65 33  3_mutex *sqlite3
26bf0 4d 61 6c 6c 6f 63 4d 75 74 65 78 28 76 6f 69 64  MallocMutex(void
26c00 29 3b 0a 0a 23 69 66 20 64 65 66 69 6e 65 64 28  );..#if defined(
26c10 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4d 55  SQLITE_ENABLE_MU
26c20 4c 54 49 54 48 52 45 41 44 45 44 5f 43 48 45 43  LTITHREADED_CHEC
26c30 4b 53 29 20 26 26 20 21 64 65 66 69 6e 65 64 28  KS) && !defined(
26c40 53 51 4c 49 54 45 5f 4d 55 54 45 58 5f 4f 4d 49  SQLITE_MUTEX_OMI
26c50 54 29 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4d  T).void sqlite3M
26c60 75 74 65 78 57 61 72 6e 4f 6e 43 6f 6e 74 65 6e  utexWarnOnConten
26c70 74 69 6f 6e 28 73 71 6c 69 74 65 33 5f 6d 75 74  tion(sqlite3_mut
26c80 65 78 2a 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65  ex*);.#else.# de
26c90 66 69 6e 65 20 73 71 6c 69 74 65 33 4d 75 74 65  fine sqlite3Mute
26ca0 78 57 61 72 6e 4f 6e 43 6f 6e 74 65 6e 74 69 6f  xWarnOnContentio
26cb0 6e 28 78 29 0a 23 65 6e 64 69 66 0a 0a 23 69 66  n(x).#endif..#if
26cc0 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
26cd0 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 0a  _FLOATING_POINT.
26ce0 20 20 69 6e 74 20 73 71 6c 69 74 65 33 49 73 4e    int sqlite3IsN
26cf0 61 4e 28 64 6f 75 62 6c 65 29 3b 0a 23 65 6c 73  aN(double);.#els
26d00 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  e.# define sqlit
26d10 65 33 49 73 4e 61 4e 28 58 29 20 20 30 0a 23 65  e3IsNaN(X)  0.#e
26d20 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69  ndif../*.** An i
26d30 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66  nstance of the f
26d40 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75  ollowing structu
26d50 72 65 20 68 6f 6c 64 73 20 69 6e 66 6f 72 6d 61  re holds informa
26d60 74 69 6f 6e 20 61 62 6f 75 74 20 53 51 4c 0a 2a  tion about SQL.*
26d70 2a 20 66 75 6e 63 74 69 6f 6e 73 20 61 72 67 75  * functions argu
26d80 6d 65 6e 74 73 20 74 68 61 74 20 61 72 65 20 74  ments that are t
26d90 68 65 20 70 61 72 61 6d 65 74 65 72 73 20 74 6f  he parameters to
26da0 20 74 68 65 20 70 72 69 6e 74 66 28 29 20 66 75   the printf() fu
26db0 6e 63 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63  nction..*/.struc
26dc0 74 20 50 72 69 6e 74 66 41 72 67 75 6d 65 6e 74  t PrintfArgument
26dd0 73 20 7b 0a 20 20 69 6e 74 20 6e 41 72 67 3b 20  s {.  int nArg; 
26de0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
26df0 2a 20 54 6f 74 61 6c 20 6e 75 6d 62 65 72 20 6f  * Total number o
26e00 66 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f 0a 20  f arguments */. 
26e10 20 69 6e 74 20 6e 55 73 65 64 3b 20 20 20 20 20   int nUsed;     
26e20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
26e30 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73  ber of arguments
26e40 20 75 73 65 64 20 73 6f 20 66 61 72 20 2a 2f 0a   used so far */.
26e50 20 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20    sqlite3_value 
26e60 2a 2a 61 70 41 72 67 3b 20 20 20 2f 2a 20 54 68  **apArg;   /* Th
26e70 65 20 61 72 67 75 6d 65 6e 74 20 76 61 6c 75 65  e argument value
26e80 73 20 2a 2f 0a 7d 3b 0a 0a 76 6f 69 64 20 73 71  s */.};..void sq
26e90 6c 69 74 65 33 56 58 50 72 69 6e 74 66 28 53 74  lite3VXPrintf(St
26ea0 72 41 63 63 75 6d 2a 2c 20 63 6f 6e 73 74 20 63  rAccum*, const c
26eb0 68 61 72 2a 2c 20 76 61 5f 6c 69 73 74 29 3b 0a  har*, va_list);.
26ec0 76 6f 69 64 20 73 71 6c 69 74 65 33 58 50 72 69  void sqlite3XPri
26ed0 6e 74 66 28 53 74 72 41 63 63 75 6d 2a 2c 20 63  ntf(StrAccum*, c
26ee0 6f 6e 73 74 20 63 68 61 72 2a 2c 20 2e 2e 2e 29  onst char*, ...)
26ef0 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33 4d  ;.char *sqlite3M
26f00 50 72 69 6e 74 66 28 73 71 6c 69 74 65 33 2a 2c  Printf(sqlite3*,
26f10 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 2e 2e 2e  const char*, ...
26f20 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33  );.char *sqlite3
26f30 56 4d 50 72 69 6e 74 66 28 73 71 6c 69 74 65 33  VMPrintf(sqlite3
26f40 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 76  *,const char*, v
26f50 61 5f 6c 69 73 74 29 3b 0a 23 69 66 20 64 65 66  a_list);.#if def
26f60 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42 55  ined(SQLITE_DEBU
26f70 47 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 53 51  G) || defined(SQ
26f80 4c 49 54 45 5f 48 41 56 45 5f 4f 53 5f 54 52 41  LITE_HAVE_OS_TRA
26f90 43 45 29 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  CE).  void sqlit
26fa0 65 33 44 65 62 75 67 50 72 69 6e 74 66 28 63 6f  e3DebugPrintf(co
26fb0 6e 73 74 20 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b  nst char*, ...);
26fc0 0a 23 65 6e 64 69 66 0a 23 69 66 20 64 65 66 69  .#endif.#if defi
26fd0 6e 65 64 28 53 51 4c 49 54 45 5f 54 45 53 54 29  ned(SQLITE_TEST)
26fe0 0a 20 20 76 6f 69 64 20 2a 73 71 6c 69 74 65 33  .  void *sqlite3
26ff0 54 65 73 74 54 65 78 74 54 6f 50 74 72 28 63 6f  TestTextToPtr(co
27000 6e 73 74 20 63 68 61 72 2a 29 3b 0a 23 65 6e 64  nst char*);.#end
27010 69 66 0a 0a 23 69 66 20 64 65 66 69 6e 65 64 28  if..#if defined(
27020 53 51 4c 49 54 45 5f 44 45 42 55 47 29 0a 20 20  SQLITE_DEBUG).  
27030 76 6f 69 64 20 73 71 6c 69 74 65 33 54 72 65 65  void sqlite3Tree
27040 56 69 65 77 45 78 70 72 28 54 72 65 65 56 69 65  ViewExpr(TreeVie
27050 77 2a 2c 20 63 6f 6e 73 74 20 45 78 70 72 2a 2c  w*, const Expr*,
27060 20 75 38 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c   u8);.  void sql
27070 69 74 65 33 54 72 65 65 56 69 65 77 42 61 72 65  ite3TreeViewBare
27080 45 78 70 72 4c 69 73 74 28 54 72 65 65 56 69 65  ExprList(TreeVie
27090 77 2a 2c 20 63 6f 6e 73 74 20 45 78 70 72 4c 69  w*, const ExprLi
270a0 73 74 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  st*, const char*
270b0 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
270c0 33 54 72 65 65 56 69 65 77 45 78 70 72 4c 69 73  3TreeViewExprLis
270d0 74 28 54 72 65 65 56 69 65 77 2a 2c 20 63 6f 6e  t(TreeView*, con
270e0 73 74 20 45 78 70 72 4c 69 73 74 2a 2c 20 75 38  st ExprList*, u8
270f0 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  , const char*);.
27100 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 54 72    void sqlite3Tr
27110 65 65 56 69 65 77 53 65 6c 65 63 74 28 54 72 65  eeViewSelect(Tre
27120 65 56 69 65 77 2a 2c 20 63 6f 6e 73 74 20 53 65  eView*, const Se
27130 6c 65 63 74 2a 2c 20 75 38 29 3b 0a 20 20 76 6f  lect*, u8);.  vo
27140 69 64 20 73 71 6c 69 74 65 33 54 72 65 65 56 69  id sqlite3TreeVi
27150 65 77 57 69 74 68 28 54 72 65 65 56 69 65 77 2a  ewWith(TreeView*
27160 2c 20 63 6f 6e 73 74 20 57 69 74 68 2a 2c 20 75  , const With*, u
27170 38 29 3b 0a 23 65 6e 64 69 66 0a 0a 0a 76 6f 69  8);.#endif...voi
27180 64 20 73 71 6c 69 74 65 33 53 65 74 53 74 72 69  d sqlite3SetStri
27190 6e 67 28 63 68 61 72 20 2a 2a 2c 20 73 71 6c 69  ng(char **, sqli
271a0 74 65 33 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  te3*, const char
271b0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
271c0 45 72 72 6f 72 4d 73 67 28 50 61 72 73 65 2a 2c  ErrorMsg(Parse*,
271d0 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 2e 2e   const char*, ..
271e0 2e 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  .);.void sqlite3
271f0 44 65 71 75 6f 74 65 28 63 68 61 72 2a 29 3b 0a  Dequote(char*);.
27200 76 6f 69 64 20 73 71 6c 69 74 65 33 54 6f 6b 65  void sqlite3Toke
27210 6e 49 6e 69 74 28 54 6f 6b 65 6e 2a 2c 63 68 61  nInit(Token*,cha
27220 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  r*);.int sqlite3
27230 4b 65 79 77 6f 72 64 43 6f 64 65 28 63 6f 6e 73  KeywordCode(cons
27240 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 2a  t unsigned char*
27250 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69  , int);.int sqli
27260 74 65 33 52 75 6e 50 61 72 73 65 72 28 50 61 72  te3RunParser(Par
27270 73 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  se*, const char*
27280 2c 20 63 68 61 72 20 2a 2a 29 3b 0a 76 6f 69 64  , char **);.void
27290 20 73 71 6c 69 74 65 33 46 69 6e 69 73 68 43 6f   sqlite3FinishCo
272a0 64 69 6e 67 28 50 61 72 73 65 2a 29 3b 0a 69 6e  ding(Parse*);.in
272b0 74 20 73 71 6c 69 74 65 33 47 65 74 54 65 6d 70  t sqlite3GetTemp
272c0 52 65 67 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69  Reg(Parse*);.voi
272d0 64 20 73 71 6c 69 74 65 33 52 65 6c 65 61 73 65  d sqlite3Release
272e0 54 65 6d 70 52 65 67 28 50 61 72 73 65 2a 2c 69  TempReg(Parse*,i
272f0 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  nt);.int sqlite3
27300 47 65 74 54 65 6d 70 52 61 6e 67 65 28 50 61 72  GetTempRange(Par
27310 73 65 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73  se*,int);.void s
27320 71 6c 69 74 65 33 52 65 6c 65 61 73 65 54 65 6d  qlite3ReleaseTem
27330 70 52 61 6e 67 65 28 50 61 72 73 65 2a 2c 69 6e  pRange(Parse*,in
27340 74 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  t,int);.void sql
27350 69 74 65 33 43 6c 65 61 72 54 65 6d 70 52 65 67  ite3ClearTempReg
27360 43 61 63 68 65 28 50 61 72 73 65 2a 29 3b 0a 23  Cache(Parse*);.#
27370 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42  ifdef SQLITE_DEB
27380 55 47 0a 69 6e 74 20 73 71 6c 69 74 65 33 4e 6f  UG.int sqlite3No
27390 54 65 6d 70 73 49 6e 52 61 6e 67 65 28 50 61 72  TempsInRange(Par
273a0 73 65 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a 23 65  se*,int,int);.#e
273b0 6e 64 69 66 0a 45 78 70 72 20 2a 73 71 6c 69 74  ndif.Expr *sqlit
273c0 65 33 45 78 70 72 41 6c 6c 6f 63 28 73 71 6c 69  e3ExprAlloc(sqli
273d0 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 54  te3*,int,const T
273e0 6f 6b 65 6e 2a 2c 69 6e 74 29 3b 0a 45 78 70 72  oken*,int);.Expr
273f0 20 2a 73 71 6c 69 74 65 33 45 78 70 72 28 73 71   *sqlite3Expr(sq
27400 6c 69 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74  lite3*,int,const
27410 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71   char*);.void sq
27420 6c 69 74 65 33 45 78 70 72 41 74 74 61 63 68 53  lite3ExprAttachS
27430 75 62 74 72 65 65 73 28 73 71 6c 69 74 65 33 2a  ubtrees(sqlite3*
27440 2c 45 78 70 72 2a 2c 45 78 70 72 2a 2c 45 78 70  ,Expr*,Expr*,Exp
27450 72 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74  r*);.Expr *sqlit
27460 65 33 50 45 78 70 72 28 50 61 72 73 65 2a 2c 20  e3PExpr(Parse*, 
27470 69 6e 74 2c 20 45 78 70 72 2a 2c 20 45 78 70 72  int, Expr*, Expr
27480 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
27490 50 45 78 70 72 41 64 64 53 65 6c 65 63 74 28 50  PExprAddSelect(P
274a0 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 53 65  arse*, Expr*, Se
274b0 6c 65 63 74 2a 29 3b 0a 45 78 70 72 20 2a 73 71  lect*);.Expr *sq
274c0 6c 69 74 65 33 45 78 70 72 41 6e 64 28 73 71 6c  lite3ExprAnd(sql
274d0 69 74 65 33 2a 2c 45 78 70 72 2a 2c 20 45 78 70  ite3*,Expr*, Exp
274e0 72 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74  r*);.Expr *sqlit
274f0 65 33 45 78 70 72 46 75 6e 63 74 69 6f 6e 28 50  e3ExprFunction(P
27500 61 72 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c  arse*,ExprList*,
27510 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73   Token*);.void s
27520 71 6c 69 74 65 33 45 78 70 72 41 73 73 69 67 6e  qlite3ExprAssign
27530 56 61 72 4e 75 6d 62 65 72 28 50 61 72 73 65 2a  VarNumber(Parse*
27540 2c 20 45 78 70 72 2a 2c 20 75 33 32 29 3b 0a 76  , Expr*, u32);.v
27550 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 44  oid sqlite3ExprD
27560 65 6c 65 74 65 28 73 71 6c 69 74 65 33 2a 2c 20  elete(sqlite3*, 
27570 45 78 70 72 2a 29 3b 0a 45 78 70 72 4c 69 73 74  Expr*);.ExprList
27580 20 2a 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73   *sqlite3ExprLis
27590 74 41 70 70 65 6e 64 28 50 61 72 73 65 2a 2c 45  tAppend(Parse*,E
275a0 78 70 72 4c 69 73 74 2a 2c 45 78 70 72 2a 29 3b  xprList*,Expr*);
275b0 0a 45 78 70 72 4c 69 73 74 20 2a 73 71 6c 69 74  .ExprList *sqlit
275c0 65 33 45 78 70 72 4c 69 73 74 41 70 70 65 6e 64  e3ExprListAppend
275d0 56 65 63 74 6f 72 28 50 61 72 73 65 2a 2c 45 78  Vector(Parse*,Ex
275e0 70 72 4c 69 73 74 2a 2c 49 64 4c 69 73 74 2a 2c  prList*,IdList*,
275f0 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  Expr*);.void sql
27600 69 74 65 33 45 78 70 72 4c 69 73 74 53 65 74 53  ite3ExprListSetS
27610 6f 72 74 4f 72 64 65 72 28 45 78 70 72 4c 69 73  ortOrder(ExprLis
27620 74 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  t*,int);.void sq
27630 6c 69 74 65 33 45 78 70 72 4c 69 73 74 53 65 74  lite3ExprListSet
27640 4e 61 6d 65 28 50 61 72 73 65 2a 2c 45 78 70 72  Name(Parse*,Expr
27650 4c 69 73 74 2a 2c 54 6f 6b 65 6e 2a 2c 69 6e 74  List*,Token*,int
27660 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
27670 78 70 72 4c 69 73 74 53 65 74 53 70 61 6e 28 50  xprListSetSpan(P
27680 61 72 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c  arse*,ExprList*,
27690 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73  const char*,cons
276a0 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73  t char*);.void s
276b0 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74 44 65  qlite3ExprListDe
276c0 6c 65 74 65 28 73 71 6c 69 74 65 33 2a 2c 20 45  lete(sqlite3*, E
276d0 78 70 72 4c 69 73 74 2a 29 3b 0a 75 33 32 20 73  xprList*);.u32 s
276e0 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74 46 6c  qlite3ExprListFl
276f0 61 67 73 28 63 6f 6e 73 74 20 45 78 70 72 4c 69  ags(const ExprLi
27700 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  st*);.int sqlite
27710 33 49 6e 69 74 28 73 71 6c 69 74 65 33 2a 2c 20  3Init(sqlite3*, 
27720 63 68 61 72 2a 2a 29 3b 0a 69 6e 74 20 73 71 6c  char**);.int sql
27730 69 74 65 33 49 6e 69 74 43 61 6c 6c 62 61 63 6b  ite3InitCallback
27740 28 76 6f 69 64 2a 2c 20 69 6e 74 2c 20 63 68 61  (void*, int, cha
27750 72 2a 2a 2c 20 63 68 61 72 2a 2a 29 3b 0a 76 6f  r**, char**);.vo
27760 69 64 20 73 71 6c 69 74 65 33 50 72 61 67 6d 61  id sqlite3Pragma
27770 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54  (Parse*,Token*,T
27780 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 69 6e 74  oken*,Token*,int
27790 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  );.#ifndef SQLIT
277a0 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
277b0 42 4c 45 0a 4d 6f 64 75 6c 65 20 2a 73 71 6c 69  BLE.Module *sqli
277c0 74 65 33 50 72 61 67 6d 61 56 74 61 62 52 65 67  te3PragmaVtabReg
277d0 69 73 74 65 72 28 73 71 6c 69 74 65 33 2a 2c 63  ister(sqlite3*,c
277e0 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4e 61 6d 65  onst char *zName
277f0 29 3b 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73  );.#endif.void s
27800 71 6c 69 74 65 33 52 65 73 65 74 41 6c 6c 53 63  qlite3ResetAllSc
27810 68 65 6d 61 73 4f 66 43 6f 6e 6e 65 63 74 69 6f  hemasOfConnectio
27820 6e 28 73 71 6c 69 74 65 33 2a 29 3b 0a 76 6f 69  n(sqlite3*);.voi
27830 64 20 73 71 6c 69 74 65 33 52 65 73 65 74 4f 6e  d sqlite3ResetOn
27840 65 53 63 68 65 6d 61 28 73 71 6c 69 74 65 33 2a  eSchema(sqlite3*
27850 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ,int);.void sqli
27860 74 65 33 43 6f 6c 6c 61 70 73 65 44 61 74 61 62  te3CollapseDatab
27870 61 73 65 41 72 72 61 79 28 73 71 6c 69 74 65 33  aseArray(sqlite3
27880 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
27890 43 6f 6d 6d 69 74 49 6e 74 65 72 6e 61 6c 43 68  CommitInternalCh
278a0 61 6e 67 65 73 28 73 71 6c 69 74 65 33 2a 29 3b  anges(sqlite3*);
278b0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65 6c  .void sqlite3Del
278c0 65 74 65 43 6f 6c 75 6d 6e 4e 61 6d 65 73 28 73  eteColumnNames(s
278d0 71 6c 69 74 65 33 2a 2c 54 61 62 6c 65 2a 29 3b  qlite3*,Table*);
278e0 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 6f 6c 75  .int sqlite3Colu
278f0 6d 6e 73 46 72 6f 6d 45 78 70 72 4c 69 73 74 28  mnsFromExprList(
27900 50 61 72 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a  Parse*,ExprList*
27910 2c 69 31 36 2a 2c 43 6f 6c 75 6d 6e 2a 2a 29 3b  ,i16*,Column**);
27920 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 65 6c  .void sqlite3Sel
27930 65 63 74 41 64 64 43 6f 6c 75 6d 6e 54 79 70 65  ectAddColumnType
27940 41 6e 64 43 6f 6c 6c 61 74 69 6f 6e 28 50 61 72  AndCollation(Par
27950 73 65 2a 2c 54 61 62 6c 65 2a 2c 53 65 6c 65 63  se*,Table*,Selec
27960 74 2a 29 3b 0a 54 61 62 6c 65 20 2a 73 71 6c 69  t*);.Table *sqli
27970 74 65 33 52 65 73 75 6c 74 53 65 74 4f 66 53 65  te3ResultSetOfSe
27980 6c 65 63 74 28 50 61 72 73 65 2a 2c 53 65 6c 65  lect(Parse*,Sele
27990 63 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  ct*);.void sqlit
279a0 65 33 4f 70 65 6e 4d 61 73 74 65 72 54 61 62 6c  e3OpenMasterTabl
279b0 65 28 50 61 72 73 65 20 2a 2c 20 69 6e 74 29 3b  e(Parse *, int);
279c0 0a 49 6e 64 65 78 20 2a 73 71 6c 69 74 65 33 50  .Index *sqlite3P
279d0 72 69 6d 61 72 79 4b 65 79 49 6e 64 65 78 28 54  rimaryKeyIndex(T
279e0 61 62 6c 65 2a 29 3b 0a 69 31 36 20 73 71 6c 69  able*);.i16 sqli
279f0 74 65 33 43 6f 6c 75 6d 6e 4f 66 49 6e 64 65 78  te3ColumnOfIndex
27a00 28 49 6e 64 65 78 2a 2c 20 69 31 36 29 3b 0a 76  (Index*, i16);.v
27a10 6f 69 64 20 73 71 6c 69 74 65 33 53 74 61 72 74  oid sqlite3Start
27a20 54 61 62 6c 65 28 50 61 72 73 65 2a 2c 54 6f 6b  Table(Parse*,Tok
27a30 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 69 6e 74 2c 69  en*,Token*,int,i
27a40 6e 74 2c 69 6e 74 2c 69 6e 74 29 3b 0a 23 69 66  nt,int,int);.#if
27a50 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 48   SQLITE_ENABLE_H
27a60 49 44 44 45 4e 5f 43 4f 4c 55 4d 4e 53 0a 20 20  IDDEN_COLUMNS.  
27a70 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6c 75  void sqlite3Colu
27a80 6d 6e 50 72 6f 70 65 72 74 69 65 73 46 72 6f 6d  mnPropertiesFrom
27a90 4e 61 6d 65 28 54 61 62 6c 65 2a 2c 20 43 6f 6c  Name(Table*, Col
27aa0 75 6d 6e 2a 29 3b 0a 23 65 6c 73 65 0a 23 20 64  umn*);.#else.# d
27ab0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 43 6f 6c  efine sqlite3Col
27ac0 75 6d 6e 50 72 6f 70 65 72 74 69 65 73 46 72 6f  umnPropertiesFro
27ad0 6d 4e 61 6d 65 28 54 2c 43 29 20 2f 2a 20 6e 6f  mName(T,C) /* no
27ae0 2d 6f 70 20 2a 2f 0a 23 65 6e 64 69 66 0a 76 6f  -op */.#endif.vo
27af0 69 64 20 73 71 6c 69 74 65 33 41 64 64 43 6f 6c  id sqlite3AddCol
27b00 75 6d 6e 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e  umn(Parse*,Token
27b10 2a 2c 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20  *,Token*);.void 
27b20 73 71 6c 69 74 65 33 41 64 64 4e 6f 74 4e 75 6c  sqlite3AddNotNul
27b30 6c 28 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a  l(Parse*, int);.
27b40 76 6f 69 64 20 73 71 6c 69 74 65 33 41 64 64 50  void sqlite3AddP
27b50 72 69 6d 61 72 79 4b 65 79 28 50 61 72 73 65 2a  rimaryKey(Parse*
27b60 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74  , ExprList*, int
27b70 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69  , int, int);.voi
27b80 64 20 73 71 6c 69 74 65 33 41 64 64 43 68 65 63  d sqlite3AddChec
27b90 6b 43 6f 6e 73 74 72 61 69 6e 74 28 50 61 72 73  kConstraint(Pars
27ba0 65 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64  e*, Expr*);.void
27bb0 20 73 71 6c 69 74 65 33 41 64 64 44 65 66 61 75   sqlite3AddDefau
27bc0 6c 74 56 61 6c 75 65 28 50 61 72 73 65 2a 2c 45  ltValue(Parse*,E
27bd0 78 70 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  xpr*,const char*
27be0 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76  ,const char*);.v
27bf0 6f 69 64 20 73 71 6c 69 74 65 33 41 64 64 43 6f  oid sqlite3AddCo
27c00 6c 6c 61 74 65 54 79 70 65 28 50 61 72 73 65 2a  llateType(Parse*
27c10 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20  , Token*);.void 
27c20 73 71 6c 69 74 65 33 45 6e 64 54 61 62 6c 65 28  sqlite3EndTable(
27c30 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f  Parse*,Token*,To
27c40 6b 65 6e 2a 2c 75 38 2c 53 65 6c 65 63 74 2a 29  ken*,u8,Select*)
27c50 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 50 61 72  ;.int sqlite3Par
27c60 73 65 55 72 69 28 63 6f 6e 73 74 20 63 68 61 72  seUri(const char
27c70 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 75 6e  *,const char*,un
27c80 73 69 67 6e 65 64 20 69 6e 74 2a 2c 0a 20 20 20  signed int*,.   
27c90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27ca0 20 73 71 6c 69 74 65 33 5f 76 66 73 2a 2a 2c 63   sqlite3_vfs**,c
27cb0 68 61 72 2a 2a 2c 63 68 61 72 20 2a 2a 29 3b 0a  har**,char **);.
27cc0 42 74 72 65 65 20 2a 73 71 6c 69 74 65 33 44 62  Btree *sqlite3Db
27cd0 4e 61 6d 65 54 6f 42 74 72 65 65 28 73 71 6c 69  NameToBtree(sqli
27ce0 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  te3*,const char*
27cf0 29 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54  );..#ifdef SQLIT
27d00 45 5f 55 4e 54 45 53 54 41 42 4c 45 0a 23 20 64  E_UNTESTABLE.# d
27d10 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46 61 75  efine sqlite3Fau
27d20 6c 74 53 69 6d 28 58 29 20 53 51 4c 49 54 45 5f  ltSim(X) SQLITE_
27d30 4f 4b 0a 23 65 6c 73 65 0a 20 20 69 6e 74 20 73  OK.#else.  int s
27d40 71 6c 69 74 65 33 46 61 75 6c 74 53 69 6d 28 69  qlite3FaultSim(i
27d50 6e 74 29 3b 0a 23 65 6e 64 69 66 0a 0a 42 69 74  nt);.#endif..Bit
27d60 76 65 63 20 2a 73 71 6c 69 74 65 33 42 69 74 76  vec *sqlite3Bitv
27d70 65 63 43 72 65 61 74 65 28 75 33 32 29 3b 0a 69  ecCreate(u32);.i
27d80 6e 74 20 73 71 6c 69 74 65 33 42 69 74 76 65 63  nt sqlite3Bitvec
27d90 54 65 73 74 28 42 69 74 76 65 63 2a 2c 20 75 33  Test(Bitvec*, u3
27da0 32 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 42  2);.int sqlite3B
27db0 69 74 76 65 63 54 65 73 74 4e 6f 74 4e 75 6c 6c  itvecTestNotNull
27dc0 28 42 69 74 76 65 63 2a 2c 20 75 33 32 29 3b 0a  (Bitvec*, u32);.
27dd0 69 6e 74 20 73 71 6c 69 74 65 33 42 69 74 76 65  int sqlite3Bitve
27de0 63 53 65 74 28 42 69 74 76 65 63 2a 2c 20 75 33  cSet(Bitvec*, u3
27df0 32 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  2);.void sqlite3
27e00 42 69 74 76 65 63 43 6c 65 61 72 28 42 69 74 76  BitvecClear(Bitv
27e10 65 63 2a 2c 20 75 33 32 2c 20 76 6f 69 64 2a 29  ec*, u32, void*)
27e20 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42 69  ;.void sqlite3Bi
27e30 74 76 65 63 44 65 73 74 72 6f 79 28 42 69 74 76  tvecDestroy(Bitv
27e40 65 63 2a 29 3b 0a 75 33 32 20 73 71 6c 69 74 65  ec*);.u32 sqlite
27e50 33 42 69 74 76 65 63 53 69 7a 65 28 42 69 74 76  3BitvecSize(Bitv
27e60 65 63 2a 29 3b 0a 23 69 66 6e 64 65 66 20 53 51  ec*);.#ifndef SQ
27e70 4c 49 54 45 5f 55 4e 54 45 53 54 41 42 4c 45 0a  LITE_UNTESTABLE.
27e80 69 6e 74 20 73 71 6c 69 74 65 33 42 69 74 76 65  int sqlite3Bitve
27e90 63 42 75 69 6c 74 69 6e 54 65 73 74 28 69 6e 74  cBuiltinTest(int
27ea0 2c 69 6e 74 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a  ,int*);.#endif..
27eb0 52 6f 77 53 65 74 20 2a 73 71 6c 69 74 65 33 52  RowSet *sqlite3R
27ec0 6f 77 53 65 74 49 6e 69 74 28 73 71 6c 69 74 65  owSetInit(sqlite
27ed0 33 2a 2c 20 76 6f 69 64 2a 2c 20 75 6e 73 69 67  3*, void*, unsig
27ee0 6e 65 64 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  ned int);.void s
27ef0 71 6c 69 74 65 33 52 6f 77 53 65 74 43 6c 65 61  qlite3RowSetClea
27f00 72 28 52 6f 77 53 65 74 2a 29 3b 0a 76 6f 69 64  r(RowSet*);.void
27f10 20 73 71 6c 69 74 65 33 52 6f 77 53 65 74 49 6e   sqlite3RowSetIn
27f20 73 65 72 74 28 52 6f 77 53 65 74 2a 2c 20 69 36  sert(RowSet*, i6
27f30 34 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52  4);.int sqlite3R
27f40 6f 77 53 65 74 54 65 73 74 28 52 6f 77 53 65 74  owSetTest(RowSet
27f50 2a 2c 20 69 6e 74 20 69 42 61 74 63 68 2c 20 69  *, int iBatch, i
27f60 36 34 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  64);.int sqlite3
27f70 52 6f 77 53 65 74 4e 65 78 74 28 52 6f 77 53 65  RowSetNext(RowSe
27f80 74 2a 2c 20 69 36 34 2a 29 3b 0a 0a 76 6f 69 64  t*, i64*);..void
27f90 20 73 71 6c 69 74 65 33 43 72 65 61 74 65 56 69   sqlite3CreateVi
27fa0 65 77 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a  ew(Parse*,Token*
27fb0 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 45  ,Token*,Token*,E
27fc0 78 70 72 4c 69 73 74 2a 2c 53 65 6c 65 63 74 2a  xprList*,Select*
27fd0 2c 69 6e 74 2c 69 6e 74 29 3b 0a 0a 23 69 66 20  ,int,int);..#if 
27fe0 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
27ff0 4f 4d 49 54 5f 56 49 45 57 29 20 7c 7c 20 21 64  OMIT_VIEW) || !d
28000 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d  efined(SQLITE_OM
28010 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 29  IT_VIRTUALTABLE)
28020 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 56 69  .  int sqlite3Vi
28030 65 77 47 65 74 43 6f 6c 75 6d 6e 4e 61 6d 65 73  ewGetColumnNames
28040 28 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a 29 3b  (Parse*,Table*);
28050 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
28060 73 71 6c 69 74 65 33 56 69 65 77 47 65 74 43 6f  sqlite3ViewGetCo
28070 6c 75 6d 6e 4e 61 6d 65 73 28 41 2c 42 29 20 30  lumnNames(A,B) 0
28080 0a 23 65 6e 64 69 66 0a 0a 23 69 66 20 53 51 4c  .#endif..#if SQL
28090 49 54 45 5f 4d 41 58 5f 41 54 54 41 43 48 45 44  ITE_MAX_ATTACHED
280a0 3e 33 30 0a 20 20 69 6e 74 20 73 71 6c 69 74 65  >30.  int sqlite
280b0 33 44 62 4d 61 73 6b 41 6c 6c 5a 65 72 6f 28 79  3DbMaskAllZero(y
280c0 44 62 4d 61 73 6b 29 3b 0a 23 65 6e 64 69 66 0a  DbMask);.#endif.
280d0 76 6f 69 64 20 73 71 6c 69 74 65 33 44 72 6f 70  void sqlite3Drop
280e0 54 61 62 6c 65 28 50 61 72 73 65 2a 2c 20 53 72  Table(Parse*, Sr
280f0 63 4c 69 73 74 2a 2c 20 69 6e 74 2c 20 69 6e 74  cList*, int, int
28100 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43  );.void sqlite3C
28110 6f 64 65 44 72 6f 70 54 61 62 6c 65 28 50 61 72  odeDropTable(Par
28120 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74  se*, Table*, int
28130 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
28140 69 74 65 33 44 65 6c 65 74 65 54 61 62 6c 65 28  ite3DeleteTable(
28150 73 71 6c 69 74 65 33 2a 2c 20 54 61 62 6c 65 2a  sqlite3*, Table*
28160 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  );.#ifndef SQLIT
28170 45 5f 4f 4d 49 54 5f 41 55 54 4f 49 4e 43 52 45  E_OMIT_AUTOINCRE
28180 4d 45 4e 54 0a 20 20 76 6f 69 64 20 73 71 6c 69  MENT.  void sqli
28190 74 65 33 41 75 74 6f 69 6e 63 72 65 6d 65 6e 74  te3Autoincrement
281a0 42 65 67 69 6e 28 50 61 72 73 65 20 2a 70 50 61  Begin(Parse *pPa
281b0 72 73 65 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c  rse);.  void sql
281c0 69 74 65 33 41 75 74 6f 69 6e 63 72 65 6d 65 6e  ite3Autoincremen
281d0 74 45 6e 64 28 50 61 72 73 65 20 2a 70 50 61 72  tEnd(Parse *pPar
281e0 73 65 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66  se);.#else.# def
281f0 69 6e 65 20 73 71 6c 69 74 65 33 41 75 74 6f 69  ine sqlite3Autoi
28200 6e 63 72 65 6d 65 6e 74 42 65 67 69 6e 28 58 29  ncrementBegin(X)
28210 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
28220 33 41 75 74 6f 69 6e 63 72 65 6d 65 6e 74 45 6e  3AutoincrementEn
28230 64 28 58 29 0a 23 65 6e 64 69 66 0a 76 6f 69 64  d(X).#endif.void
28240 20 73 71 6c 69 74 65 33 49 6e 73 65 72 74 28 50   sqlite3Insert(P
28250 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c  arse*, SrcList*,
28260 20 53 65 6c 65 63 74 2a 2c 20 49 64 4c 69 73 74   Select*, IdList
28270 2a 2c 20 69 6e 74 2c 20 55 70 73 65 72 74 2a 29  *, int, Upsert*)
28280 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 41  ;.void *sqlite3A
28290 72 72 61 79 41 6c 6c 6f 63 61 74 65 28 73 71 6c  rrayAllocate(sql
282a0 69 74 65 33 2a 2c 76 6f 69 64 2a 2c 69 6e 74 2c  ite3*,void*,int,
282b0 69 6e 74 2a 2c 69 6e 74 2a 29 3b 0a 49 64 4c 69  int*,int*);.IdLi
282c0 73 74 20 2a 73 71 6c 69 74 65 33 49 64 4c 69 73  st *sqlite3IdLis
282d0 74 41 70 70 65 6e 64 28 73 71 6c 69 74 65 33 2a  tAppend(sqlite3*
282e0 2c 20 49 64 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e  , IdList*, Token
282f0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49  *);.int sqlite3I
28300 64 4c 69 73 74 49 6e 64 65 78 28 49 64 4c 69 73  dListIndex(IdLis
28310 74 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  t*,const char*);
28320 0a 53 72 63 4c 69 73 74 20 2a 73 71 6c 69 74 65  .SrcList *sqlite
28330 33 53 72 63 4c 69 73 74 45 6e 6c 61 72 67 65 28  3SrcListEnlarge(
28340 73 71 6c 69 74 65 33 2a 2c 20 53 72 63 4c 69 73  sqlite3*, SrcLis
28350 74 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 53  t*, int, int);.S
28360 72 63 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 53  rcList *sqlite3S
28370 72 63 4c 69 73 74 41 70 70 65 6e 64 28 73 71 6c  rcListAppend(sql
28380 69 74 65 33 2a 2c 20 53 72 63 4c 69 73 74 2a 2c  ite3*, SrcList*,
28390 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 29   Token*, Token*)
283a0 3b 0a 53 72 63 4c 69 73 74 20 2a 73 71 6c 69 74  ;.SrcList *sqlit
283b0 65 33 53 72 63 4c 69 73 74 41 70 70 65 6e 64 46  e3SrcListAppendF
283c0 72 6f 6d 54 65 72 6d 28 50 61 72 73 65 2a 2c 20  romTerm(Parse*, 
283d0 53 72 63 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a  SrcList*, Token*
283e0 2c 20 54 6f 6b 65 6e 2a 2c 0a 20 20 20 20 20 20  , Token*,.      
283f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28410 54 6f 6b 65 6e 2a 2c 20 53 65 6c 65 63 74 2a 2c  Token*, Select*,
28420 20 45 78 70 72 2a 2c 20 49 64 4c 69 73 74 2a 29   Expr*, IdList*)
28430 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 72  ;.void sqlite3Sr
28440 63 4c 69 73 74 49 6e 64 65 78 65 64 42 79 28 50  cListIndexedBy(P
28450 61 72 73 65 20 2a 2c 20 53 72 63 4c 69 73 74 20  arse *, SrcList 
28460 2a 2c 20 54 6f 6b 65 6e 20 2a 29 3b 0a 76 6f 69  *, Token *);.voi
28470 64 20 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74  d sqlite3SrcList
28480 46 75 6e 63 41 72 67 73 28 50 61 72 73 65 2a 2c  FuncArgs(Parse*,
28490 20 53 72 63 4c 69 73 74 2a 2c 20 45 78 70 72 4c   SrcList*, ExprL
284a0 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ist*);.int sqlit
284b0 65 33 49 6e 64 65 78 65 64 42 79 4c 6f 6f 6b 75  e3IndexedByLooku
284c0 70 28 50 61 72 73 65 20 2a 2c 20 73 74 72 75 63  p(Parse *, struc
284d0 74 20 53 72 63 4c 69 73 74 5f 69 74 65 6d 20 2a  t SrcList_item *
284e0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53  );.void sqlite3S
284f0 72 63 4c 69 73 74 53 68 69 66 74 4a 6f 69 6e 54  rcListShiftJoinT
28500 79 70 65 28 53 72 63 4c 69 73 74 2a 29 3b 0a 76  ype(SrcList*);.v
28510 6f 69 64 20 73 71 6c 69 74 65 33 53 72 63 4c 69  oid sqlite3SrcLi
28520 73 74 41 73 73 69 67 6e 43 75 72 73 6f 72 73 28  stAssignCursors(
28530 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a  Parse*, SrcList*
28540 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 49  );.void sqlite3I
28550 64 4c 69 73 74 44 65 6c 65 74 65 28 73 71 6c 69  dListDelete(sqli
28560 74 65 33 2a 2c 20 49 64 4c 69 73 74 2a 29 3b 0a  te3*, IdList*);.
28570 76 6f 69 64 20 73 71 6c 69 74 65 33 53 72 63 4c  void sqlite3SrcL
28580 69 73 74 44 65 6c 65 74 65 28 73 71 6c 69 74 65  istDelete(sqlite
28590 33 2a 2c 20 53 72 63 4c 69 73 74 2a 29 3b 0a 49  3*, SrcList*);.I
285a0 6e 64 65 78 20 2a 73 71 6c 69 74 65 33 41 6c 6c  ndex *sqlite3All
285b0 6f 63 61 74 65 49 6e 64 65 78 4f 62 6a 65 63 74  ocateIndexObject
285c0 28 73 71 6c 69 74 65 33 2a 2c 69 31 36 2c 69 6e  (sqlite3*,i16,in
285d0 74 2c 63 68 61 72 2a 2a 29 3b 0a 76 6f 69 64 20  t,char**);.void 
285e0 73 71 6c 69 74 65 33 43 72 65 61 74 65 49 6e 64  sqlite3CreateInd
285f0 65 78 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a  ex(Parse*,Token*
28600 2c 54 6f 6b 65 6e 2a 2c 53 72 63 4c 69 73 74 2a  ,Token*,SrcList*
28610 2c 45 78 70 72 4c 69 73 74 2a 2c 69 6e 74 2c 54  ,ExprList*,int,T
28620 6f 6b 65 6e 2a 2c 0a 20 20 20 20 20 20 20 20 20  oken*,.         
28630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28640 20 45 78 70 72 2a 2c 20 69 6e 74 2c 20 69 6e 74   Expr*, int, int
28650 2c 20 75 38 29 3b 0a 76 6f 69 64 20 73 71 6c 69  , u8);.void sqli
28660 74 65 33 44 72 6f 70 49 6e 64 65 78 28 50 61 72  te3DropIndex(Par
28670 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 69  se*, SrcList*, i
28680 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  nt);.int sqlite3
28690 53 65 6c 65 63 74 28 50 61 72 73 65 2a 2c 20 53  Select(Parse*, S
286a0 65 6c 65 63 74 2a 2c 20 53 65 6c 65 63 74 44 65  elect*, SelectDe
286b0 73 74 2a 29 3b 0a 53 65 6c 65 63 74 20 2a 73 71  st*);.Select *sq
286c0 6c 69 74 65 33 53 65 6c 65 63 74 4e 65 77 28 50  lite3SelectNew(P
286d0 61 72 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c  arse*,ExprList*,
286e0 53 72 63 4c 69 73 74 2a 2c 45 78 70 72 2a 2c 45  SrcList*,Expr*,E
286f0 78 70 72 4c 69 73 74 2a 2c 0a 20 20 20 20 20 20  xprList*,.      
28700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28710 20 20 20 45 78 70 72 2a 2c 45 78 70 72 4c 69 73     Expr*,ExprLis
28720 74 2a 2c 75 33 32 2c 45 78 70 72 2a 29 3b 0a 76  t*,u32,Expr*);.v
28730 6f 69 64 20 73 71 6c 69 74 65 33 53 65 6c 65 63  oid sqlite3Selec
28740 74 44 65 6c 65 74 65 28 73 71 6c 69 74 65 33 2a  tDelete(sqlite3*
28750 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 54 61 62 6c  , Select*);.Tabl
28760 65 20 2a 73 71 6c 69 74 65 33 53 72 63 4c 69 73  e *sqlite3SrcLis
28770 74 4c 6f 6f 6b 75 70 28 50 61 72 73 65 2a 2c 20  tLookup(Parse*, 
28780 53 72 63 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73  SrcList*);.int s
28790 71 6c 69 74 65 33 49 73 52 65 61 64 4f 6e 6c 79  qlite3IsReadOnly
287a0 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c  (Parse*, Table*,
287b0 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
287c0 74 65 33 4f 70 65 6e 54 61 62 6c 65 28 50 61 72  te3OpenTable(Par
287d0 73 65 2a 2c 20 69 6e 74 20 69 43 75 72 2c 20 69  se*, int iCur, i
287e0 6e 74 20 69 44 62 2c 20 54 61 62 6c 65 2a 2c 20  nt iDb, Table*, 
287f0 69 6e 74 29 3b 0a 23 69 66 20 64 65 66 69 6e 65  int);.#if define
28800 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  d(SQLITE_ENABLE_
28810 55 50 44 41 54 45 5f 44 45 4c 45 54 45 5f 4c 49  UPDATE_DELETE_LI
28820 4d 49 54 29 20 26 26 20 21 64 65 66 69 6e 65 64  MIT) && !defined
28830 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 55 42  (SQLITE_OMIT_SUB
28840 51 55 45 52 59 29 0a 45 78 70 72 20 2a 73 71 6c  QUERY).Expr *sql
28850 69 74 65 33 4c 69 6d 69 74 57 68 65 72 65 28 50  ite3LimitWhere(P
28860 61 72 73 65 2a 2c 53 72 63 4c 69 73 74 2a 2c 45  arse*,SrcList*,E
28870 78 70 72 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 45  xpr*,ExprList*,E
28880 78 70 72 2a 2c 63 68 61 72 2a 29 3b 0a 23 65 6e  xpr*,char*);.#en
28890 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  dif.void sqlite3
288a0 44 65 6c 65 74 65 46 72 6f 6d 28 50 61 72 73 65  DeleteFrom(Parse
288b0 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 45 78 70  *, SrcList*, Exp
288c0 72 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 45  r*, ExprList*, E
288d0 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  xpr*);.void sqli
288e0 74 65 33 55 70 64 61 74 65 28 50 61 72 73 65 2a  te3Update(Parse*
288f0 2c 20 53 72 63 4c 69 73 74 2a 2c 20 45 78 70 72  , SrcList*, Expr
28900 4c 69 73 74 2a 2c 45 78 70 72 2a 2c 69 6e 74 2c  List*,Expr*,int,
28910 45 78 70 72 4c 69 73 74 2a 2c 45 78 70 72 2a 2c  ExprList*,Expr*,
28920 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
28930 20 20 20 20 55 70 73 65 72 74 2a 29 3b 0a 57 68      Upsert*);.Wh
28940 65 72 65 49 6e 66 6f 20 2a 73 71 6c 69 74 65 33  ereInfo *sqlite3
28950 57 68 65 72 65 42 65 67 69 6e 28 50 61 72 73 65  WhereBegin(Parse
28960 2a 2c 53 72 63 4c 69 73 74 2a 2c 45 78 70 72 2a  *,SrcList*,Expr*
28970 2c 45 78 70 72 4c 69 73 74 2a 2c 45 78 70 72 4c  ,ExprList*,ExprL
28980 69 73 74 2a 2c 75 31 36 2c 69 6e 74 29 3b 0a 76  ist*,u16,int);.v
28990 6f 69 64 20 73 71 6c 69 74 65 33 57 68 65 72 65  oid sqlite3Where
289a0 45 6e 64 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b  End(WhereInfo*);
289b0 0a 4c 6f 67 45 73 74 20 73 71 6c 69 74 65 33 57  .LogEst sqlite3W
289c0 68 65 72 65 4f 75 74 70 75 74 52 6f 77 43 6f 75  hereOutputRowCou
289d0 6e 74 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a  nt(WhereInfo*);.
289e0 69 6e 74 20 73 71 6c 69 74 65 33 57 68 65 72 65  int sqlite3Where
289f0 49 73 44 69 73 74 69 6e 63 74 28 57 68 65 72 65  IsDistinct(Where
28a00 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  Info*);.int sqli
28a10 74 65 33 57 68 65 72 65 49 73 4f 72 64 65 72 65  te3WhereIsOrdere
28a20 64 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69  d(WhereInfo*);.i
28a30 6e 74 20 73 71 6c 69 74 65 33 57 68 65 72 65 4f  nt sqlite3WhereO
28a40 72 64 65 72 65 64 49 6e 6e 65 72 4c 6f 6f 70 28  rderedInnerLoop(
28a50 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74  WhereInfo*);.int
28a60 20 73 71 6c 69 74 65 33 57 68 65 72 65 49 73 53   sqlite3WhereIsS
28a70 6f 72 74 65 64 28 57 68 65 72 65 49 6e 66 6f 2a  orted(WhereInfo*
28a80 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 68  );.int sqlite3Wh
28a90 65 72 65 43 6f 6e 74 69 6e 75 65 4c 61 62 65 6c  ereContinueLabel
28aa0 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e  (WhereInfo*);.in
28ab0 74 20 73 71 6c 69 74 65 33 57 68 65 72 65 42 72  t sqlite3WhereBr
28ac0 65 61 6b 4c 61 62 65 6c 28 57 68 65 72 65 49 6e  eakLabel(WhereIn
28ad0 66 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  fo*);.int sqlite
28ae0 33 57 68 65 72 65 4f 6b 4f 6e 65 50 61 73 73 28  3WhereOkOnePass(
28af0 57 68 65 72 65 49 6e 66 6f 2a 2c 20 69 6e 74 2a  WhereInfo*, int*
28b00 29 3b 0a 23 64 65 66 69 6e 65 20 4f 4e 45 50 41  );.#define ONEPA
28b10 53 53 5f 4f 46 46 20 20 20 20 20 20 30 20 20 20  SS_OFF      0   
28b20 20 20 20 20 20 2f 2a 20 55 73 65 20 6f 66 20 4f       /* Use of O
28b30 4e 45 50 41 53 53 20 6e 6f 74 20 61 6c 6c 6f 77  NEPASS not allow
28b40 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 4e  ed */.#define ON
28b50 45 50 41 53 53 5f 53 49 4e 47 4c 45 20 20 20 31  EPASS_SINGLE   1
28b60 20 20 20 20 20 20 20 20 2f 2a 20 4f 4e 45 50 41          /* ONEPA
28b70 53 53 20 76 61 6c 69 64 20 66 6f 72 20 61 20 73  SS valid for a s
28b80 69 6e 67 6c 65 20 72 6f 77 20 75 70 64 61 74 65  ingle row update
28b90 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 4e 45 50   */.#define ONEP
28ba0 41 53 53 5f 4d 55 4c 54 49 20 20 20 20 32 20 20  ASS_MULTI    2  
28bb0 20 20 20 20 20 20 2f 2a 20 4f 4e 45 50 41 53 53        /* ONEPASS
28bc0 20 69 73 20 76 61 6c 69 64 20 66 6f 72 20 6d 75   is valid for mu
28bd0 6c 74 69 70 6c 65 20 72 6f 77 73 20 2a 2f 0a 76  ltiple rows */.v
28be0 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 43  oid sqlite3ExprC
28bf0 6f 64 65 4c 6f 61 64 49 6e 64 65 78 43 6f 6c 75  odeLoadIndexColu
28c00 6d 6e 28 50 61 72 73 65 2a 2c 20 49 6e 64 65 78  mn(Parse*, Index
28c10 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74  *, int, int, int
28c20 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78  );.int sqlite3Ex
28c30 70 72 43 6f 64 65 47 65 74 43 6f 6c 75 6d 6e 28  prCodeGetColumn(
28c40 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20  Parse*, Table*, 
28c50 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 75  int, int, int, u
28c60 38 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  8);.void sqlite3
28c70 45 78 70 72 43 6f 64 65 47 65 74 43 6f 6c 75 6d  ExprCodeGetColum
28c80 6e 54 6f 52 65 67 28 50 61 72 73 65 2a 2c 20 54  nToReg(Parse*, T
28c90 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c  able*, int, int,
28ca0 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
28cb0 74 65 33 45 78 70 72 43 6f 64 65 47 65 74 43 6f  te3ExprCodeGetCo
28cc0 6c 75 6d 6e 4f 66 54 61 62 6c 65 28 56 64 62 65  lumnOfTable(Vdbe
28cd0 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20  *, Table*, int, 
28ce0 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  int, int);.void 
28cf0 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 4d  sqlite3ExprCodeM
28d00 6f 76 65 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c  ove(Parse*, int,
28d10 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64   int, int);.void
28d20 20 73 71 6c 69 74 65 33 45 78 70 72 43 61 63 68   sqlite3ExprCach
28d30 65 53 74 6f 72 65 28 50 61 72 73 65 2a 2c 20 69  eStore(Parse*, i
28d40 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76  nt, int, int);.v
28d50 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 43  oid sqlite3ExprC
28d60 61 63 68 65 50 75 73 68 28 50 61 72 73 65 2a 29  achePush(Parse*)
28d70 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
28d80 70 72 43 61 63 68 65 50 6f 70 28 50 61 72 73 65  prCachePop(Parse
28d90 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
28da0 45 78 70 72 43 61 63 68 65 52 65 6d 6f 76 65 28  ExprCacheRemove(
28db0 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74  Parse*, int, int
28dc0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
28dd0 78 70 72 43 61 63 68 65 43 6c 65 61 72 28 50 61  xprCacheClear(Pa
28de0 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  rse*);.void sqli
28df0 74 65 33 45 78 70 72 43 61 63 68 65 41 66 66 69  te3ExprCacheAffi
28e00 6e 69 74 79 43 68 61 6e 67 65 28 50 61 72 73 65  nityChange(Parse
28e10 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f  *, int, int);.vo
28e20 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f  id sqlite3ExprCo
28e30 64 65 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a  de(Parse*, Expr*
28e40 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
28e50 69 74 65 33 45 78 70 72 43 6f 64 65 43 6f 70 79  ite3ExprCodeCopy
28e60 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20  (Parse*, Expr*, 
28e70 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
28e80 65 33 45 78 70 72 43 6f 64 65 46 61 63 74 6f 72  e3ExprCodeFactor
28e90 61 62 6c 65 28 50 61 72 73 65 2a 2c 20 45 78 70  able(Parse*, Exp
28ea0 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71  r*, int);.int sq
28eb0 6c 69 74 65 33 45 78 70 72 43 6f 64 65 41 74 49  lite3ExprCodeAtI
28ec0 6e 69 74 28 50 61 72 73 65 2a 2c 20 45 78 70 72  nit(Parse*, Expr
28ed0 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c  *, int);.int sql
28ee0 69 74 65 33 45 78 70 72 43 6f 64 65 54 65 6d 70  ite3ExprCodeTemp
28ef0 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20  (Parse*, Expr*, 
28f00 69 6e 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  int*);.int sqlit
28f10 65 33 45 78 70 72 43 6f 64 65 54 61 72 67 65 74  e3ExprCodeTarget
28f20 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20  (Parse*, Expr*, 
28f30 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
28f40 65 33 45 78 70 72 43 6f 64 65 41 6e 64 43 61 63  e3ExprCodeAndCac
28f50 68 65 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a  he(Parse*, Expr*
28f60 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69  , int);.int sqli
28f70 74 65 33 45 78 70 72 43 6f 64 65 45 78 70 72 4c  te3ExprCodeExprL
28f80 69 73 74 28 50 61 72 73 65 2a 2c 20 45 78 70 72  ist(Parse*, Expr
28f90 4c 69 73 74 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c  List*, int, int,
28fa0 20 75 38 29 3b 0a 23 64 65 66 69 6e 65 20 53 51   u8);.#define SQ
28fb0 4c 49 54 45 5f 45 43 45 4c 5f 44 55 50 20 20 20  LITE_ECEL_DUP   
28fc0 20 20 20 30 78 30 31 20 20 2f 2a 20 44 65 65 70     0x01  /* Deep
28fd0 2c 20 6e 6f 74 20 73 68 61 6c 6c 6f 77 20 63 6f  , not shallow co
28fe0 70 69 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  pies */.#define 
28ff0 53 51 4c 49 54 45 5f 45 43 45 4c 5f 46 41 43 54  SQLITE_ECEL_FACT
29000 4f 52 20 20 20 30 78 30 32 20 20 2f 2a 20 46 61  OR   0x02  /* Fa
29010 63 74 6f 72 20 6f 75 74 20 63 6f 6e 73 74 61 6e  ctor out constan
29020 74 20 74 65 72 6d 73 20 2a 2f 0a 23 64 65 66 69  t terms */.#defi
29030 6e 65 20 53 51 4c 49 54 45 5f 45 43 45 4c 5f 52  ne SQLITE_ECEL_R
29040 45 46 20 20 20 20 20 20 30 78 30 34 20 20 2f 2a  EF      0x04  /*
29050 20 55 73 65 20 45 78 70 72 4c 69 73 74 2e 75 2e   Use ExprList.u.
29060 78 2e 69 4f 72 64 65 72 42 79 43 6f 6c 20 2a 2f  x.iOrderByCol */
29070 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
29080 45 43 45 4c 5f 4f 4d 49 54 52 45 46 20 20 30 78  ECEL_OMITREF  0x
29090 30 38 20 20 2f 2a 20 4f 6d 69 74 20 69 66 20 45  08  /* Omit if E
290a0 78 70 72 4c 69 73 74 2e 75 2e 78 2e 69 4f 72 64  xprList.u.x.iOrd
290b0 65 72 42 79 43 6f 6c 20 2a 2f 0a 76 6f 69 64 20  erByCol */.void 
290c0 73 71 6c 69 74 65 33 45 78 70 72 49 66 54 72 75  sqlite3ExprIfTru
290d0 65 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c  e(Parse*, Expr*,
290e0 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64   int, int);.void
290f0 20 73 71 6c 69 74 65 33 45 78 70 72 49 66 46 61   sqlite3ExprIfFa
29100 6c 73 65 28 50 61 72 73 65 2a 2c 20 45 78 70 72  lse(Parse*, Expr
29110 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f  *, int, int);.vo
29120 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 49 66  id sqlite3ExprIf
29130 46 61 6c 73 65 44 75 70 28 50 61 72 73 65 2a 2c  FalseDup(Parse*,
29140 20 45 78 70 72 2a 2c 20 69 6e 74 2c 20 69 6e 74   Expr*, int, int
29150 29 3b 0a 54 61 62 6c 65 20 2a 73 71 6c 69 74 65  );.Table *sqlite
29160 33 46 69 6e 64 54 61 62 6c 65 28 73 71 6c 69 74  3FindTable(sqlit
29170 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c  e3*,const char*,
29180 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 23   const char*);.#
29190 64 65 66 69 6e 65 20 4c 4f 43 41 54 45 5f 56 49  define LOCATE_VI
291a0 45 57 20 20 20 20 30 78 30 31 0a 23 64 65 66 69  EW    0x01.#defi
291b0 6e 65 20 4c 4f 43 41 54 45 5f 4e 4f 45 52 52 20  ne LOCATE_NOERR 
291c0 20 20 30 78 30 32 0a 54 61 62 6c 65 20 2a 73 71    0x02.Table *sq
291d0 6c 69 74 65 33 4c 6f 63 61 74 65 54 61 62 6c 65  lite3LocateTable
291e0 28 50 61 72 73 65 2a 2c 75 33 32 20 66 6c 61 67  (Parse*,u32 flag
291f0 73 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63  s,const char*, c
29200 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 54 61 62  onst char*);.Tab
29210 6c 65 20 2a 73 71 6c 69 74 65 33 4c 6f 63 61 74  le *sqlite3Locat
29220 65 54 61 62 6c 65 49 74 65 6d 28 50 61 72 73 65  eTableItem(Parse
29230 2a 2c 75 33 32 20 66 6c 61 67 73 2c 73 74 72 75  *,u32 flags,stru
29240 63 74 20 53 72 63 4c 69 73 74 5f 69 74 65 6d 20  ct SrcList_item 
29250 2a 29 3b 0a 49 6e 64 65 78 20 2a 73 71 6c 69 74  *);.Index *sqlit
29260 65 33 46 69 6e 64 49 6e 64 65 78 28 73 71 6c 69  e3FindIndex(sqli
29270 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  te3*,const char*
29280 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  , const char*);.
29290 76 6f 69 64 20 73 71 6c 69 74 65 33 55 6e 6c 69  void sqlite3Unli
292a0 6e 6b 41 6e 64 44 65 6c 65 74 65 54 61 62 6c 65  nkAndDeleteTable
292b0 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 63 6f  (sqlite3*,int,co
292c0 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64  nst char*);.void
292d0 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e   sqlite3UnlinkAn
292e0 64 44 65 6c 65 74 65 49 6e 64 65 78 28 73 71 6c  dDeleteIndex(sql
292f0 69 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20  ite3*,int,const 
29300 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  char*);.void sql
29310 69 74 65 33 56 61 63 75 75 6d 28 50 61 72 73 65  ite3Vacuum(Parse
29320 2a 2c 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73  *,Token*);.int s
29330 71 6c 69 74 65 33 52 75 6e 56 61 63 75 75 6d 28  qlite3RunVacuum(
29340 63 68 61 72 2a 2a 2c 20 73 71 6c 69 74 65 33 2a  char**, sqlite3*
29350 2c 20 69 6e 74 29 3b 0a 63 68 61 72 20 2a 73 71  , int);.char *sq
29360 6c 69 74 65 33 4e 61 6d 65 46 72 6f 6d 54 6f 6b  lite3NameFromTok
29370 65 6e 28 73 71 6c 69 74 65 33 2a 2c 20 54 6f 6b  en(sqlite3*, Tok
29380 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  en*);.int sqlite
29390 33 45 78 70 72 43 6f 6d 70 61 72 65 28 50 61 72  3ExprCompare(Par
293a0 73 65 2a 2c 45 78 70 72 2a 2c 20 45 78 70 72 2a  se*,Expr*, Expr*
293b0 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69  , int);.int sqli
293c0 74 65 33 45 78 70 72 43 6f 6d 70 61 72 65 53 6b  te3ExprCompareSk
293d0 69 70 28 45 78 70 72 2a 2c 20 45 78 70 72 2a 2c  ip(Expr*, Expr*,
293e0 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74   int);.int sqlit
293f0 65 33 45 78 70 72 4c 69 73 74 43 6f 6d 70 61 72  e3ExprListCompar
29400 65 28 45 78 70 72 4c 69 73 74 2a 2c 20 45 78 70  e(ExprList*, Exp
29410 72 4c 69 73 74 2a 2c 20 69 6e 74 29 3b 0a 69 6e  rList*, int);.in
29420 74 20 73 71 6c 69 74 65 33 45 78 70 72 49 6d 70  t sqlite3ExprImp
29430 6c 69 65 73 45 78 70 72 28 50 61 72 73 65 2a 2c  liesExpr(Parse*,
29440 45 78 70 72 2a 2c 20 45 78 70 72 2a 2c 20 69 6e  Expr*, Expr*, in
29450 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45  t);.int sqlite3E
29460 78 70 72 49 6d 70 6c 69 65 73 4e 6f 6e 4e 75 6c  xprImpliesNonNul
29470 6c 52 6f 77 28 45 78 70 72 2a 2c 69 6e 74 29 3b  lRow(Expr*,int);
29480 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
29490 72 41 6e 61 6c 79 7a 65 41 67 67 72 65 67 61 74  rAnalyzeAggregat
294a0 65 73 28 4e 61 6d 65 43 6f 6e 74 65 78 74 2a 2c  es(NameContext*,
294b0 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71   Expr*);.void sq
294c0 6c 69 74 65 33 45 78 70 72 41 6e 61 6c 79 7a 65  lite3ExprAnalyze
294d0 41 67 67 4c 69 73 74 28 4e 61 6d 65 43 6f 6e 74  AggList(NameCont
294e0 65 78 74 2a 2c 45 78 70 72 4c 69 73 74 2a 29 3b  ext*,ExprList*);
294f0 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72  .int sqlite3Expr
29500 43 6f 76 65 72 65 64 42 79 49 6e 64 65 78 28 45  CoveredByIndex(E
29510 78 70 72 2a 2c 20 69 6e 74 20 69 43 75 72 2c 20  xpr*, int iCur, 
29520 49 6e 64 65 78 20 2a 70 49 64 78 29 3b 0a 69 6e  Index *pIdx);.in
29530 74 20 73 71 6c 69 74 65 33 46 75 6e 63 74 69 6f  t sqlite3Functio
29540 6e 55 73 65 73 54 68 69 73 53 72 63 28 45 78 70  nUsesThisSrc(Exp
29550 72 2a 2c 20 53 72 63 4c 69 73 74 2a 29 3b 0a 56  r*, SrcList*);.V
29560 64 62 65 20 2a 73 71 6c 69 74 65 33 47 65 74 56  dbe *sqlite3GetV
29570 64 62 65 28 50 61 72 73 65 2a 29 3b 0a 23 69 66  dbe(Parse*);.#if
29580 6e 64 65 66 20 53 51 4c 49 54 45 5f 55 4e 54 45  ndef SQLITE_UNTE
29590 53 54 41 42 4c 45 0a 76 6f 69 64 20 73 71 6c 69  STABLE.void sqli
295a0 74 65 33 50 72 6e 67 53 61 76 65 53 74 61 74 65  te3PrngSaveState
295b0 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20 73 71 6c  (void);.void sql
295c0 69 74 65 33 50 72 6e 67 52 65 73 74 6f 72 65 53  ite3PrngRestoreS
295d0 74 61 74 65 28 76 6f 69 64 29 3b 0a 23 65 6e 64  tate(void);.#end
295e0 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52  if.void sqlite3R
295f0 6f 6c 6c 62 61 63 6b 41 6c 6c 28 73 71 6c 69 74  ollbackAll(sqlit
29600 65 33 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73  e3*,int);.void s
29610 71 6c 69 74 65 33 43 6f 64 65 56 65 72 69 66 79  qlite3CodeVerify
29620 53 63 68 65 6d 61 28 50 61 72 73 65 2a 2c 20 69  Schema(Parse*, i
29630 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
29640 33 43 6f 64 65 56 65 72 69 66 79 4e 61 6d 65 64  3CodeVerifyNamed
29650 53 63 68 65 6d 61 28 50 61 72 73 65 2a 2c 20 63  Schema(Parse*, c
29660 6f 6e 73 74 20 63 68 61 72 20 2a 7a 44 62 29 3b  onst char *zDb);
29670 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42 65 67  .void sqlite3Beg
29680 69 6e 54 72 61 6e 73 61 63 74 69 6f 6e 28 50 61  inTransaction(Pa
29690 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64  rse*, int);.void
296a0 20 73 71 6c 69 74 65 33 45 6e 64 54 72 61 6e 73   sqlite3EndTrans
296b0 61 63 74 69 6f 6e 28 50 61 72 73 65 2a 2c 69 6e  action(Parse*,in
296c0 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
296d0 53 61 76 65 70 6f 69 6e 74 28 50 61 72 73 65 2a  Savepoint(Parse*
296e0 2c 20 69 6e 74 2c 20 54 6f 6b 65 6e 2a 29 3b 0a  , int, Token*);.
296f0 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6c 6f 73  void sqlite3Clos
29700 65 53 61 76 65 70 6f 69 6e 74 73 28 73 71 6c 69  eSavepoints(sqli
29710 74 65 33 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  te3 *);.void sql
29720 69 74 65 33 4c 65 61 76 65 4d 75 74 65 78 41 6e  ite3LeaveMutexAn
29730 64 43 6c 6f 73 65 5a 6f 6d 62 69 65 28 73 71 6c  dCloseZombie(sql
29740 69 74 65 33 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  ite3*);.int sqli
29750 74 65 33 45 78 70 72 49 64 54 6f 54 72 75 65 46  te3ExprIdToTrueF
29760 61 6c 73 65 28 45 78 70 72 2a 29 3b 0a 69 6e 74  alse(Expr*);.int
29770 20 73 71 6c 69 74 65 33 45 78 70 72 54 72 75 74   sqlite3ExprTrut
29780 68 56 61 6c 75 65 28 63 6f 6e 73 74 20 45 78 70  hValue(const Exp
29790 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  r*);.int sqlite3
297a0 45 78 70 72 49 73 43 6f 6e 73 74 61 6e 74 28 45  ExprIsConstant(E
297b0 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  xpr*);.int sqlit
297c0 65 33 45 78 70 72 49 73 43 6f 6e 73 74 61 6e 74  e3ExprIsConstant
297d0 4e 6f 74 4a 6f 69 6e 28 45 78 70 72 2a 29 3b 0a  NotJoin(Expr*);.
297e0 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 49  int sqlite3ExprI
297f0 73 43 6f 6e 73 74 61 6e 74 4f 72 46 75 6e 63 74  sConstantOrFunct
29800 69 6f 6e 28 45 78 70 72 2a 2c 20 75 38 29 3b 0a  ion(Expr*, u8);.
29810 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 49  int sqlite3ExprI
29820 73 43 6f 6e 73 74 61 6e 74 4f 72 47 72 6f 75 70  sConstantOrGroup
29830 42 79 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a  By(Parse*, Expr*
29840 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a 69 6e  , ExprList*);.in
29850 74 20 73 71 6c 69 74 65 33 45 78 70 72 49 73 54  t sqlite3ExprIsT
29860 61 62 6c 65 43 6f 6e 73 74 61 6e 74 28 45 78 70  ableConstant(Exp
29870 72 2a 2c 69 6e 74 29 3b 0a 23 69 66 64 65 66 20  r*,int);.#ifdef 
29880 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 43 55  SQLITE_ENABLE_CU
29890 52 53 4f 52 5f 48 49 4e 54 53 0a 69 6e 74 20 73  RSOR_HINTS.int s
298a0 71 6c 69 74 65 33 45 78 70 72 43 6f 6e 74 61 69  qlite3ExprContai
298b0 6e 73 53 75 62 71 75 65 72 79 28 45 78 70 72 2a  nsSubquery(Expr*
298c0 29 3b 0a 23 65 6e 64 69 66 0a 69 6e 74 20 73 71  );.#endif.int sq
298d0 6c 69 74 65 33 45 78 70 72 49 73 49 6e 74 65 67  lite3ExprIsInteg
298e0 65 72 28 45 78 70 72 2a 2c 20 69 6e 74 2a 29 3b  er(Expr*, int*);
298f0 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72  .int sqlite3Expr
29900 43 61 6e 42 65 4e 75 6c 6c 28 63 6f 6e 73 74 20  CanBeNull(const 
29910 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  Expr*);.int sqli
29920 74 65 33 45 78 70 72 4e 65 65 64 73 4e 6f 41 66  te3ExprNeedsNoAf
29930 66 69 6e 69 74 79 43 68 61 6e 67 65 28 63 6f 6e  finityChange(con
29940 73 74 20 45 78 70 72 2a 2c 20 63 68 61 72 29 3b  st Expr*, char);
29950 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 73 52 6f  .int sqlite3IsRo
29960 77 69 64 28 63 6f 6e 73 74 20 63 68 61 72 2a 29  wid(const char*)
29970 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 47 65  ;.void sqlite3Ge
29980 6e 65 72 61 74 65 52 6f 77 44 65 6c 65 74 65 28  nerateRowDelete(
29990 0a 20 20 20 20 50 61 72 73 65 2a 2c 54 61 62 6c  .    Parse*,Tabl
299a0 65 2a 2c 54 72 69 67 67 65 72 2a 2c 69 6e 74 2c  e*,Trigger*,int,
299b0 69 6e 74 2c 69 6e 74 2c 69 31 36 2c 75 38 2c 75  int,int,i16,u8,u
299c0 38 2c 75 38 2c 69 6e 74 29 3b 0a 76 6f 69 64 20  8,u8,int);.void 
299d0 73 71 6c 69 74 65 33 47 65 6e 65 72 61 74 65 52  sqlite3GenerateR
299e0 6f 77 49 6e 64 65 78 44 65 6c 65 74 65 28 50 61  owIndexDelete(Pa
299f0 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e  rse*, Table*, in
29a00 74 2c 20 69 6e 74 2c 20 69 6e 74 2a 2c 20 69 6e  t, int, int*, in
29a10 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 47  t);.int sqlite3G
29a20 65 6e 65 72 61 74 65 49 6e 64 65 78 4b 65 79 28  enerateIndexKey(
29a30 50 61 72 73 65 2a 2c 20 49 6e 64 65 78 2a 2c 20  Parse*, Index*, 
29a40 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69  int, int, int, i
29a50 6e 74 2a 2c 49 6e 64 65 78 2a 2c 69 6e 74 29 3b  nt*,Index*,int);
29a60 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 73  .void sqlite3Res
29a70 6f 6c 76 65 50 61 72 74 49 64 78 4c 61 62 65 6c  olvePartIdxLabel
29a80 28 50 61 72 73 65 2a 2c 69 6e 74 29 3b 0a 76 6f  (Parse*,int);.vo
29a90 69 64 20 73 71 6c 69 74 65 33 47 65 6e 65 72 61  id sqlite3Genera
29aa0 74 65 43 6f 6e 73 74 72 61 69 6e 74 43 68 65 63  teConstraintChec
29ab0 6b 73 28 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a  ks(Parse*,Table*
29ac0 2c 69 6e 74 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e  ,int*,int,int,in
29ad0 74 2c 69 6e 74 2c 0a 20 20 20 20 20 20 20 20 20  t,int,.         
29ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29af0 20 20 20 20 20 20 20 20 20 20 20 20 75 38 2c 75              u8,u
29b00 38 2c 69 6e 74 2c 69 6e 74 2a 2c 69 6e 74 2a 2c  8,int,int*,int*,
29b10 55 70 73 65 72 74 2a 29 3b 0a 23 69 66 64 65 66  Upsert*);.#ifdef
29b20 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4e   SQLITE_ENABLE_N
29b30 55 4c 4c 5f 54 52 49 4d 0a 20 20 76 6f 69 64 20  ULL_TRIM.  void 
29b40 73 71 6c 69 74 65 33 53 65 74 4d 61 6b 65 52 65  sqlite3SetMakeRe
29b50 63 6f 72 64 50 35 28 56 64 62 65 2a 2c 54 61 62  cordP5(Vdbe*,Tab
29b60 6c 65 2a 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65  le*);.#else.# de
29b70 66 69 6e 65 20 73 71 6c 69 74 65 33 53 65 74 4d  fine sqlite3SetM
29b80 61 6b 65 52 65 63 6f 72 64 50 35 28 41 2c 42 29  akeRecordP5(A,B)
29b90 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c  .#endif.void sql
29ba0 69 74 65 33 43 6f 6d 70 6c 65 74 65 49 6e 73 65  ite3CompleteInse
29bb0 72 74 69 6f 6e 28 50 61 72 73 65 2a 2c 54 61 62  rtion(Parse*,Tab
29bc0 6c 65 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c  le*,int,int,int,
29bd0 69 6e 74 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74  int*,int,int,int
29be0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4f 70  );.int sqlite3Op
29bf0 65 6e 54 61 62 6c 65 41 6e 64 49 6e 64 69 63 65  enTableAndIndice
29c00 73 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a  s(Parse*, Table*
29c10 2c 20 69 6e 74 2c 20 75 38 2c 20 69 6e 74 2c 20  , int, u8, int, 
29c20 75 38 2a 2c 20 69 6e 74 2a 2c 20 69 6e 74 2a 29  u8*, int*, int*)
29c30 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42 65  ;.void sqlite3Be
29c40 67 69 6e 57 72 69 74 65 4f 70 65 72 61 74 69 6f  ginWriteOperatio
29c50 6e 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69  n(Parse*, int, i
29c60 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
29c70 33 4d 75 6c 74 69 57 72 69 74 65 28 50 61 72 73  3MultiWrite(Pars
29c80 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  e*);.void sqlite
29c90 33 4d 61 79 41 62 6f 72 74 28 50 61 72 73 65 2a  3MayAbort(Parse*
29ca0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 48  );.void sqlite3H
29cb0 61 6c 74 43 6f 6e 73 74 72 61 69 6e 74 28 50 61  altConstraint(Pa
29cc0 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20  rse*, int, int, 
29cd0 63 68 61 72 2a 2c 20 69 38 2c 20 75 38 29 3b 0a  char*, i8, u8);.
29ce0 76 6f 69 64 20 73 71 6c 69 74 65 33 55 6e 69 71  void sqlite3Uniq
29cf0 75 65 43 6f 6e 73 74 72 61 69 6e 74 28 50 61 72  ueConstraint(Par
29d00 73 65 2a 2c 20 69 6e 74 2c 20 49 6e 64 65 78 2a  se*, int, Index*
29d10 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52  );.void sqlite3R
29d20 6f 77 69 64 43 6f 6e 73 74 72 61 69 6e 74 28 50  owidConstraint(P
29d30 61 72 73 65 2a 2c 20 69 6e 74 2c 20 54 61 62 6c  arse*, int, Tabl
29d40 65 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74  e*);.Expr *sqlit
29d50 65 33 45 78 70 72 44 75 70 28 73 71 6c 69 74 65  e3ExprDup(sqlite
29d60 33 2a 2c 45 78 70 72 2a 2c 69 6e 74 29 3b 0a 45  3*,Expr*,int);.E
29d70 78 70 72 4c 69 73 74 20 2a 73 71 6c 69 74 65 33  xprList *sqlite3
29d80 45 78 70 72 4c 69 73 74 44 75 70 28 73 71 6c 69  ExprListDup(sqli
29d90 74 65 33 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 69  te3*,ExprList*,i
29da0 6e 74 29 3b 0a 53 72 63 4c 69 73 74 20 2a 73 71  nt);.SrcList *sq
29db0 6c 69 74 65 33 53 72 63 4c 69 73 74 44 75 70 28  lite3SrcListDup(
29dc0 73 71 6c 69 74 65 33 2a 2c 53 72 63 4c 69 73 74  sqlite3*,SrcList
29dd0 2a 2c 69 6e 74 29 3b 0a 49 64 4c 69 73 74 20 2a  *,int);.IdList *
29de0 73 71 6c 69 74 65 33 49 64 4c 69 73 74 44 75 70  sqlite3IdListDup
29df0 28 73 71 6c 69 74 65 33 2a 2c 49 64 4c 69 73 74  (sqlite3*,IdList
29e00 2a 29 3b 0a 53 65 6c 65 63 74 20 2a 73 71 6c 69  *);.Select *sqli
29e10 74 65 33 53 65 6c 65 63 74 44 75 70 28 73 71 6c  te3SelectDup(sql
29e20 69 74 65 33 2a 2c 53 65 6c 65 63 74 2a 2c 69 6e  ite3*,Select*,in
29e30 74 29 3b 0a 23 69 66 20 53 45 4c 45 43 54 54 52  t);.#if SELECTTR
29e40 41 43 45 5f 45 4e 41 42 4c 45 44 0a 76 6f 69 64  ACE_ENABLED.void
29e50 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74 53 65   sqlite3SelectSe
29e60 74 4e 61 6d 65 28 53 65 6c 65 63 74 2a 2c 63 6f  tName(Select*,co
29e70 6e 73 74 20 63 68 61 72 2a 29 3b 0a 23 65 6c 73  nst char*);.#els
29e80 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  e.# define sqlit
29e90 65 33 53 65 6c 65 63 74 53 65 74 4e 61 6d 65 28  e3SelectSetName(
29ea0 41 2c 42 29 0a 23 65 6e 64 69 66 0a 76 6f 69 64  A,B).#endif.void
29eb0 20 73 71 6c 69 74 65 33 49 6e 73 65 72 74 42 75   sqlite3InsertBu
29ec0 69 6c 74 69 6e 46 75 6e 63 73 28 46 75 6e 63 44  iltinFuncs(FuncD
29ed0 65 66 2a 2c 69 6e 74 29 3b 0a 46 75 6e 63 44 65  ef*,int);.FuncDe
29ee0 66 20 2a 73 71 6c 69 74 65 33 46 69 6e 64 46 75  f *sqlite3FindFu
29ef0 6e 63 74 69 6f 6e 28 73 71 6c 69 74 65 33 2a 2c  nction(sqlite3*,
29f00 63 6f 6e 73 74 20 63 68 61 72 2a 2c 69 6e 74 2c  const char*,int,
29f10 75 38 2c 75 38 29 3b 0a 76 6f 69 64 20 73 71 6c  u8,u8);.void sql
29f20 69 74 65 33 52 65 67 69 73 74 65 72 42 75 69 6c  ite3RegisterBuil
29f30 74 69 6e 46 75 6e 63 74 69 6f 6e 73 28 76 6f 69  tinFunctions(voi
29f40 64 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  d);.void sqlite3
29f50 52 65 67 69 73 74 65 72 44 61 74 65 54 69 6d 65  RegisterDateTime
29f60 46 75 6e 63 74 69 6f 6e 73 28 76 6f 69 64 29 3b  Functions(void);
29f70 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 67  .void sqlite3Reg
29f80 69 73 74 65 72 50 65 72 43 6f 6e 6e 65 63 74 69  isterPerConnecti
29f90 6f 6e 42 75 69 6c 74 69 6e 46 75 6e 63 74 69 6f  onBuiltinFunctio
29fa0 6e 73 28 73 71 6c 69 74 65 33 2a 29 3b 0a 69 6e  ns(sqlite3*);.in
29fb0 74 20 73 71 6c 69 74 65 33 53 61 66 65 74 79 43  t sqlite3SafetyC
29fc0 68 65 63 6b 4f 6b 28 73 71 6c 69 74 65 33 2a 29  heckOk(sqlite3*)
29fd0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 61 66  ;.int sqlite3Saf
29fe0 65 74 79 43 68 65 63 6b 53 69 63 6b 4f 72 4f 6b  etyCheckSickOrOk
29ff0 28 73 71 6c 69 74 65 33 2a 29 3b 0a 76 6f 69 64  (sqlite3*);.void
2a000 20 73 71 6c 69 74 65 33 43 68 61 6e 67 65 43 6f   sqlite3ChangeCo
2a010 6f 6b 69 65 28 50 61 72 73 65 2a 2c 20 69 6e 74  okie(Parse*, int
2a020 29 3b 0a 0a 23 69 66 20 21 64 65 66 69 6e 65 64  );..#if !defined
2a030 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 45  (SQLITE_OMIT_VIE
2a040 57 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 53  W) && !defined(S
2a050 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47  QLITE_OMIT_TRIGG
2a060 45 52 29 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  ER).void sqlite3
2a070 4d 61 74 65 72 69 61 6c 69 7a 65 56 69 65 77 28  MaterializeView(
2a080 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20  Parse*, Table*, 
2a090 45 78 70 72 2a 2c 20 45 78 70 72 4c 69 73 74 2a  Expr*, ExprList*
2a0a0 2c 45 78 70 72 2a 2c 69 6e 74 29 3b 0a 23 65 6e  ,Expr*,int);.#en
2a0b0 64 69 66 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c  dif..#ifndef SQL
2a0c0 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47 45 52  ITE_OMIT_TRIGGER
2a0d0 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 42  .  void sqlite3B
2a0e0 65 67 69 6e 54 72 69 67 67 65 72 28 50 61 72 73  eginTrigger(Pars
2a0f0 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e  e*, Token*,Token
2a100 2a 2c 69 6e 74 2c 69 6e 74 2c 49 64 4c 69 73 74  *,int,int,IdList
2a110 2a 2c 53 72 63 4c 69 73 74 2a 2c 0a 20 20 20 20  *,SrcList*,.    
2a120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a130 20 20 20 20 20 20 20 45 78 70 72 2a 2c 69 6e 74         Expr*,int
2a140 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20 73  , int);.  void s
2a150 71 6c 69 74 65 33 46 69 6e 69 73 68 54 72 69 67  qlite3FinishTrig
2a160 67 65 72 28 50 61 72 73 65 2a 2c 20 54 72 69 67  ger(Parse*, Trig
2a170 67 65 72 53 74 65 70 2a 2c 20 54 6f 6b 65 6e 2a  gerStep*, Token*
2a180 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
2a190 33 44 72 6f 70 54 72 69 67 67 65 72 28 50 61 72  3DropTrigger(Par
2a1a0 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 69  se*, SrcList*, i
2a1b0 6e 74 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69  nt);.  void sqli
2a1c0 74 65 33 44 72 6f 70 54 72 69 67 67 65 72 50 74  te3DropTriggerPt
2a1d0 72 28 50 61 72 73 65 2a 2c 20 54 72 69 67 67 65  r(Parse*, Trigge
2a1e0 72 2a 29 3b 0a 20 20 54 72 69 67 67 65 72 20 2a  r*);.  Trigger *
2a1f0 73 71 6c 69 74 65 33 54 72 69 67 67 65 72 73 45  sqlite3TriggersE
2a200 78 69 73 74 28 50 61 72 73 65 20 2a 2c 20 54 61  xist(Parse *, Ta
2a210 62 6c 65 2a 2c 20 69 6e 74 2c 20 45 78 70 72 4c  ble*, int, ExprL
2a220 69 73 74 2a 2c 20 69 6e 74 20 2a 70 4d 61 73 6b  ist*, int *pMask
2a230 29 3b 0a 20 20 54 72 69 67 67 65 72 20 2a 73 71  );.  Trigger *sq
2a240 6c 69 74 65 33 54 72 69 67 67 65 72 4c 69 73 74  lite3TriggerList
2a250 28 50 61 72 73 65 20 2a 2c 20 54 61 62 6c 65 20  (Parse *, Table 
2a260 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  *);.  void sqlit
2a270 65 33 43 6f 64 65 52 6f 77 54 72 69 67 67 65 72  e3CodeRowTrigger
2a280 28 50 61 72 73 65 2a 2c 20 54 72 69 67 67 65 72  (Parse*, Trigger
2a290 20 2a 2c 20 69 6e 74 2c 20 45 78 70 72 4c 69 73   *, int, ExprLis
2a2a0 74 2a 2c 20 69 6e 74 2c 20 54 61 62 6c 65 20 2a  t*, int, Table *
2a2b0 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
2a2c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e                in
2a2d0 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 20 20  t, int, int);.  
2a2e0 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 64 65  void sqlite3Code
2a2f0 52 6f 77 54 72 69 67 67 65 72 44 69 72 65 63 74  RowTriggerDirect
2a300 28 50 61 72 73 65 20 2a 2c 20 54 72 69 67 67 65  (Parse *, Trigge
2a310 72 20 2a 2c 20 54 61 62 6c 65 20 2a 2c 20 69 6e  r *, Table *, in
2a320 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 20 20  t, int, int);.  
2a330 76 6f 69 64 20 73 71 6c 69 74 65 56 69 65 77 54  void sqliteViewT
2a340 72 69 67 67 65 72 73 28 50 61 72 73 65 2a 2c 20  riggers(Parse*, 
2a350 54 61 62 6c 65 2a 2c 20 45 78 70 72 2a 2c 20 69  Table*, Expr*, i
2a360 6e 74 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a  nt, ExprList*);.
2a370 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65    void sqlite3De
2a380 6c 65 74 65 54 72 69 67 67 65 72 53 74 65 70 28  leteTriggerStep(
2a390 73 71 6c 69 74 65 33 2a 2c 20 54 72 69 67 67 65  sqlite3*, Trigge
2a3a0 72 53 74 65 70 2a 29 3b 0a 20 20 54 72 69 67 67  rStep*);.  Trigg
2a3b0 65 72 53 74 65 70 20 2a 73 71 6c 69 74 65 33 54  erStep *sqlite3T
2a3c0 72 69 67 67 65 72 53 65 6c 65 63 74 53 74 65 70  riggerSelectStep
2a3d0 28 73 71 6c 69 74 65 33 2a 2c 53 65 6c 65 63 74  (sqlite3*,Select
2a3e0 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  *,.             
2a3f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a400 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 73 74             const
2a410 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61   char*,const cha
2a420 72 2a 29 3b 0a 20 20 54 72 69 67 67 65 72 53 74  r*);.  TriggerSt
2a430 65 70 20 2a 73 71 6c 69 74 65 33 54 72 69 67 67  ep *sqlite3Trigg
2a440 65 72 49 6e 73 65 72 74 53 74 65 70 28 73 71 6c  erInsertStep(sql
2a450 69 74 65 33 2a 2c 54 6f 6b 65 6e 2a 2c 20 49 64  ite3*,Token*, Id
2a460 4c 69 73 74 2a 2c 0a 20 20 20 20 20 20 20 20 20  List*,.         
2a470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53                 S
2a490 65 6c 65 63 74 2a 2c 75 38 2c 55 70 73 65 72 74  elect*,u8,Upsert
2a4a0 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  *,.             
2a4b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a4c0 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 73 74             const
2a4d0 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61   char*,const cha
2a4e0 72 2a 29 3b 0a 20 20 54 72 69 67 67 65 72 53 74  r*);.  TriggerSt
2a4f0 65 70 20 2a 73 71 6c 69 74 65 33 54 72 69 67 67  ep *sqlite3Trigg
2a500 65 72 55 70 64 61 74 65 53 74 65 70 28 73 71 6c  erUpdateStep(sql
2a510 69 74 65 33 2a 2c 54 6f 6b 65 6e 2a 2c 45 78 70  ite3*,Token*,Exp
2a520 72 4c 69 73 74 2a 2c 20 45 78 70 72 2a 2c 20 75  rList*, Expr*, u
2a530 38 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  8,.             
2a540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a550 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 73 74             const
2a560 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61   char*,const cha
2a570 72 2a 29 3b 0a 20 20 54 72 69 67 67 65 72 53 74  r*);.  TriggerSt
2a580 65 70 20 2a 73 71 6c 69 74 65 33 54 72 69 67 67  ep *sqlite3Trigg
2a590 65 72 44 65 6c 65 74 65 53 74 65 70 28 73 71 6c  erDeleteStep(sql
2a5a0 69 74 65 33 2a 2c 54 6f 6b 65 6e 2a 2c 20 45 78  ite3*,Token*, Ex
2a5b0 70 72 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20  pr*,.           
2a5c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a5d0 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
2a5e0 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63  st char*,const c
2a5f0 68 61 72 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71  har*);.  void sq
2a600 6c 69 74 65 33 44 65 6c 65 74 65 54 72 69 67 67  lite3DeleteTrigg
2a610 65 72 28 73 71 6c 69 74 65 33 2a 2c 20 54 72 69  er(sqlite3*, Tri
2a620 67 67 65 72 2a 29 3b 0a 20 20 76 6f 69 64 20 73  gger*);.  void s
2a630 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44  qlite3UnlinkAndD
2a640 65 6c 65 74 65 54 72 69 67 67 65 72 28 73 71 6c  eleteTrigger(sql
2a650 69 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20  ite3*,int,const 
2a660 63 68 61 72 2a 29 3b 0a 20 20 75 33 32 20 73 71  char*);.  u32 sq
2a670 6c 69 74 65 33 54 72 69 67 67 65 72 43 6f 6c 6d  lite3TriggerColm
2a680 61 73 6b 28 50 61 72 73 65 2a 2c 54 72 69 67 67  ask(Parse*,Trigg
2a690 65 72 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 69 6e  er*,ExprList*,in
2a6a0 74 2c 69 6e 74 2c 54 61 62 6c 65 2a 2c 69 6e 74  t,int,Table*,int
2a6b0 29 3b 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  );.# define sqli
2a6c0 74 65 33 50 61 72 73 65 54 6f 70 6c 65 76 65 6c  te3ParseToplevel
2a6d0 28 70 29 20 28 28 70 29 2d 3e 70 54 6f 70 6c 65  (p) ((p)->pTople
2a6e0 76 65 6c 20 3f 20 28 70 29 2d 3e 70 54 6f 70 6c  vel ? (p)->pTopl
2a6f0 65 76 65 6c 20 3a 20 28 70 29 29 0a 23 20 64 65  evel : (p)).# de
2a700 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 54 6f  fine sqlite3IsTo
2a710 70 6c 65 76 65 6c 28 70 29 20 28 28 70 29 2d 3e  plevel(p) ((p)->
2a720 70 54 6f 70 6c 65 76 65 6c 3d 3d 30 29 0a 23 65  pToplevel==0).#e
2a730 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  lse.# define sql
2a740 69 74 65 33 54 72 69 67 67 65 72 73 45 78 69 73  ite3TriggersExis
2a750 74 28 42 2c 43 2c 44 2c 45 2c 46 29 20 30 0a 23  t(B,C,D,E,F) 0.#
2a760 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 44   define sqlite3D
2a770 65 6c 65 74 65 54 72 69 67 67 65 72 28 41 2c 42  eleteTrigger(A,B
2a780 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
2a790 65 33 44 72 6f 70 54 72 69 67 67 65 72 50 74 72  e3DropTriggerPtr
2a7a0 28 41 2c 42 29 0a 23 20 64 65 66 69 6e 65 20 73  (A,B).# define s
2a7b0 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44  qlite3UnlinkAndD
2a7c0 65 6c 65 74 65 54 72 69 67 67 65 72 28 41 2c 42  eleteTrigger(A,B
2a7d0 2c 43 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  ,C).# define sql
2a7e0 69 74 65 33 43 6f 64 65 52 6f 77 54 72 69 67 67  ite3CodeRowTrigg
2a7f0 65 72 28 41 2c 42 2c 43 2c 44 2c 45 2c 46 2c 47  er(A,B,C,D,E,F,G
2a800 2c 48 2c 49 29 0a 23 20 64 65 66 69 6e 65 20 73  ,H,I).# define s
2a810 71 6c 69 74 65 33 43 6f 64 65 52 6f 77 54 72 69  qlite3CodeRowTri
2a820 67 67 65 72 44 69 72 65 63 74 28 41 2c 42 2c 43  ggerDirect(A,B,C
2a830 2c 44 2c 45 2c 46 29 0a 23 20 64 65 66 69 6e 65  ,D,E,F).# define
2a840 20 73 71 6c 69 74 65 33 54 72 69 67 67 65 72 4c   sqlite3TriggerL
2a850 69 73 74 28 58 2c 20 59 29 20 30 0a 23 20 64 65  ist(X, Y) 0.# de
2a860 66 69 6e 65 20 73 71 6c 69 74 65 33 50 61 72 73  fine sqlite3Pars
2a870 65 54 6f 70 6c 65 76 65 6c 28 70 29 20 70 0a 23  eToplevel(p) p.#
2a880 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49   define sqlite3I
2a890 73 54 6f 70 6c 65 76 65 6c 28 70 29 20 31 0a 23  sToplevel(p) 1.#
2a8a0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54   define sqlite3T
2a8b0 72 69 67 67 65 72 43 6f 6c 6d 61 73 6b 28 41 2c  riggerColmask(A,
2a8c0 42 2c 43 2c 44 2c 45 2c 46 2c 47 29 20 30 0a 23  B,C,D,E,F,G) 0.#
2a8d0 65 6e 64 69 66 0a 0a 69 6e 74 20 73 71 6c 69 74  endif..int sqlit
2a8e0 65 33 4a 6f 69 6e 54 79 70 65 28 50 61 72 73 65  e3JoinType(Parse
2a8f0 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e  *, Token*, Token
2a900 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64  *, Token*);.void
2a910 20 73 71 6c 69 74 65 33 43 72 65 61 74 65 46 6f   sqlite3CreateFo
2a920 72 65 69 67 6e 4b 65 79 28 50 61 72 73 65 2a 2c  reignKey(Parse*,
2a930 20 45 78 70 72 4c 69 73 74 2a 2c 20 54 6f 6b 65   ExprList*, Toke
2a940 6e 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 69  n*, ExprList*, i
2a950 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
2a960 33 44 65 66 65 72 46 6f 72 65 69 67 6e 4b 65 79  3DeferForeignKey
2a970 28 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 23  (Parse*, int);.#
2a980 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
2a990 49 54 5f 41 55 54 48 4f 52 49 5a 41 54 49 4f 4e  IT_AUTHORIZATION
2a9a0 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 41  .  void sqlite3A
2a9b0 75 74 68 52 65 61 64 28 50 61 72 73 65 2a 2c 45  uthRead(Parse*,E
2a9c0 78 70 72 2a 2c 53 63 68 65 6d 61 2a 2c 53 72 63  xpr*,Schema*,Src
2a9d0 4c 69 73 74 2a 29 3b 0a 20 20 69 6e 74 20 73 71  List*);.  int sq
2a9e0 6c 69 74 65 33 41 75 74 68 43 68 65 63 6b 28 50  lite3AuthCheck(P
2a9f0 61 72 73 65 2a 2c 69 6e 74 2c 20 63 6f 6e 73 74  arse*,int, const
2aa00 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68   char*, const ch
2aa10 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  ar*, const char*
2aa20 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
2aa30 33 41 75 74 68 43 6f 6e 74 65 78 74 50 75 73 68  3AuthContextPush
2aa40 28 50 61 72 73 65 2a 2c 20 41 75 74 68 43 6f 6e  (Parse*, AuthCon
2aa50 74 65 78 74 2a 2c 20 63 6f 6e 73 74 20 63 68 61  text*, const cha
2aa60 72 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69  r*);.  void sqli
2aa70 74 65 33 41 75 74 68 43 6f 6e 74 65 78 74 50 6f  te3AuthContextPo
2aa80 70 28 41 75 74 68 43 6f 6e 74 65 78 74 2a 29 3b  p(AuthContext*);
2aa90 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 41 75  .  int sqlite3Au
2aaa0 74 68 52 65 61 64 43 6f 6c 28 50 61 72 73 65 2a  thReadCol(Parse*
2aab0 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20  , const char *, 
2aac0 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20 69 6e  const char *, in
2aad0 74 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69  t);.#else.# defi
2aae0 6e 65 20 73 71 6c 69 74 65 33 41 75 74 68 52 65  ne sqlite3AuthRe
2aaf0 61 64 28 61 2c 62 2c 63 2c 64 29 0a 23 20 64 65  ad(a,b,c,d).# de
2ab00 66 69 6e 65 20 73 71 6c 69 74 65 33 41 75 74 68  fine sqlite3Auth
2ab10 43 68 65 63 6b 28 61 2c 62 2c 63 2c 64 2c 65 29  Check(a,b,c,d,e)
2ab20 20 20 20 20 53 51 4c 49 54 45 5f 4f 4b 0a 23 20      SQLITE_OK.# 
2ab30 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 41 75  define sqlite3Au
2ab40 74 68 43 6f 6e 74 65 78 74 50 75 73 68 28 61 2c  thContextPush(a,
2ab50 62 2c 63 29 0a 23 20 64 65 66 69 6e 65 20 73 71  b,c).# define sq
2ab60 6c 69 74 65 33 41 75 74 68 43 6f 6e 74 65 78 74  lite3AuthContext
2ab70 50 6f 70 28 61 29 20 20 28 28 76 6f 69 64 29 28  Pop(a)  ((void)(
2ab80 61 29 29 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20  a)).#endif.void 
2ab90 73 71 6c 69 74 65 33 41 74 74 61 63 68 28 50 61  sqlite3Attach(Pa
2aba0 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 45 78 70  rse*, Expr*, Exp
2abb0 72 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64  r*, Expr*);.void
2abc0 20 73 71 6c 69 74 65 33 44 65 74 61 63 68 28 50   sqlite3Detach(P
2abd0 61 72 73 65 2a 2c 20 45 78 70 72 2a 29 3b 0a 76  arse*, Expr*);.v
2abe0 6f 69 64 20 73 71 6c 69 74 65 33 46 69 78 49 6e  oid sqlite3FixIn
2abf0 69 74 28 44 62 46 69 78 65 72 2a 2c 20 50 61 72  it(DbFixer*, Par
2ac00 73 65 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20  se*, int, const 
2ac10 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 54 6f 6b  char*, const Tok
2ac20 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  en*);.int sqlite
2ac30 33 46 69 78 53 72 63 4c 69 73 74 28 44 62 46 69  3FixSrcList(DbFi
2ac40 78 65 72 2a 2c 20 53 72 63 4c 69 73 74 2a 29 3b  xer*, SrcList*);
2ac50 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69 78 53  .int sqlite3FixS
2ac60 65 6c 65 63 74 28 44 62 46 69 78 65 72 2a 2c 20  elect(DbFixer*, 
2ac70 53 65 6c 65 63 74 2a 29 3b 0a 69 6e 74 20 73 71  Select*);.int sq
2ac80 6c 69 74 65 33 46 69 78 45 78 70 72 28 44 62 46  lite3FixExpr(DbF
2ac90 69 78 65 72 2a 2c 20 45 78 70 72 2a 29 3b 0a 69  ixer*, Expr*);.i
2aca0 6e 74 20 73 71 6c 69 74 65 33 46 69 78 45 78 70  nt sqlite3FixExp
2acb0 72 4c 69 73 74 28 44 62 46 69 78 65 72 2a 2c 20  rList(DbFixer*, 
2acc0 45 78 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74 20  ExprList*);.int 
2acd0 73 71 6c 69 74 65 33 46 69 78 54 72 69 67 67 65  sqlite3FixTrigge
2ace0 72 53 74 65 70 28 44 62 46 69 78 65 72 2a 2c 20  rStep(DbFixer*, 
2acf0 54 72 69 67 67 65 72 53 74 65 70 2a 29 3b 0a 69  TriggerStep*);.i
2ad00 6e 74 20 73 71 6c 69 74 65 33 41 74 6f 46 28 63  nt sqlite3AtoF(c
2ad10 6f 6e 73 74 20 63 68 61 72 20 2a 7a 2c 20 64 6f  onst char *z, do
2ad20 75 62 6c 65 2a 2c 20 69 6e 74 2c 20 75 38 29 3b  uble*, int, u8);
2ad30 0a 69 6e 74 20 73 71 6c 69 74 65 33 47 65 74 49  .int sqlite3GetI
2ad40 6e 74 33 32 28 63 6f 6e 73 74 20 63 68 61 72 20  nt32(const char 
2ad50 2a 2c 20 69 6e 74 2a 29 3b 0a 69 6e 74 20 73 71  *, int*);.int sq
2ad60 6c 69 74 65 33 41 74 6f 69 28 63 6f 6e 73 74 20  lite3Atoi(const 
2ad70 63 68 61 72 2a 29 3b 0a 23 69 66 6e 64 65 66 20  char*);.#ifndef 
2ad80 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31  SQLITE_OMIT_UTF1
2ad90 36 0a 69 6e 74 20 73 71 6c 69 74 65 33 55 74 66  6.int sqlite3Utf
2ada0 31 36 42 79 74 65 4c 65 6e 28 63 6f 6e 73 74 20  16ByteLen(const 
2adb0 76 6f 69 64 20 2a 70 44 61 74 61 2c 20 69 6e 74  void *pData, int
2adc0 20 6e 43 68 61 72 29 3b 0a 23 65 6e 64 69 66 0a   nChar);.#endif.
2add0 69 6e 74 20 73 71 6c 69 74 65 33 55 74 66 38 43  int sqlite3Utf8C
2ade0 68 61 72 4c 65 6e 28 63 6f 6e 73 74 20 63 68 61  harLen(const cha
2adf0 72 20 2a 70 44 61 74 61 2c 20 69 6e 74 20 6e 42  r *pData, int nB
2ae00 79 74 65 29 3b 0a 75 33 32 20 73 71 6c 69 74 65  yte);.u32 sqlite
2ae10 33 55 74 66 38 52 65 61 64 28 63 6f 6e 73 74 20  3Utf8Read(const 
2ae20 75 38 2a 2a 29 3b 0a 4c 6f 67 45 73 74 20 73 71  u8**);.LogEst sq
2ae30 6c 69 74 65 33 4c 6f 67 45 73 74 28 75 36 34 29  lite3LogEst(u64)
2ae40 3b 0a 4c 6f 67 45 73 74 20 73 71 6c 69 74 65 33  ;.LogEst sqlite3
2ae50 4c 6f 67 45 73 74 41 64 64 28 4c 6f 67 45 73 74  LogEstAdd(LogEst
2ae60 2c 4c 6f 67 45 73 74 29 3b 0a 23 69 66 6e 64 65  ,LogEst);.#ifnde
2ae70 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  f SQLITE_OMIT_VI
2ae80 52 54 55 41 4c 54 41 42 4c 45 0a 4c 6f 67 45 73  RTUALTABLE.LogEs
2ae90 74 20 73 71 6c 69 74 65 33 4c 6f 67 45 73 74 46  t sqlite3LogEstF
2aea0 72 6f 6d 44 6f 75 62 6c 65 28 64 6f 75 62 6c 65  romDouble(double
2aeb0 29 3b 0a 23 65 6e 64 69 66 0a 23 69 66 20 64 65  );.#endif.#if de
2aec0 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41  fined(SQLITE_ENA
2aed0 42 4c 45 5f 53 54 4d 54 5f 53 43 41 4e 53 54 41  BLE_STMT_SCANSTA
2aee0 54 55 53 29 20 7c 7c 20 5c 0a 20 20 20 20 64 65  TUS) || \.    de
2aef0 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41  fined(SQLITE_ENA
2af00 42 4c 45 5f 53 54 41 54 33 5f 4f 52 5f 53 54 41  BLE_STAT3_OR_STA
2af10 54 34 29 20 7c 7c 20 5c 0a 20 20 20 20 64 65 66  T4) || \.    def
2af20 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 58 50 4c  ined(SQLITE_EXPL
2af30 41 49 4e 5f 45 53 54 49 4d 41 54 45 44 5f 52 4f  AIN_ESTIMATED_RO
2af40 57 53 29 0a 75 36 34 20 73 71 6c 69 74 65 33 4c  WS).u64 sqlite3L
2af50 6f 67 45 73 74 54 6f 49 6e 74 28 4c 6f 67 45 73  ogEstToInt(LogEs
2af60 74 29 3b 0a 23 65 6e 64 69 66 0a 56 4c 69 73 74  t);.#endif.VList
2af70 20 2a 73 71 6c 69 74 65 33 56 4c 69 73 74 41 64   *sqlite3VListAd
2af80 64 28 73 71 6c 69 74 65 33 2a 2c 56 4c 69 73 74  d(sqlite3*,VList
2af90 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 69 6e  *,const char*,in
2afa0 74 2c 69 6e 74 29 3b 0a 63 6f 6e 73 74 20 63 68  t,int);.const ch
2afb0 61 72 20 2a 73 71 6c 69 74 65 33 56 4c 69 73 74  ar *sqlite3VList
2afc0 4e 75 6d 54 6f 4e 61 6d 65 28 56 4c 69 73 74 2a  NumToName(VList*
2afd0 2c 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ,int);.int sqlit
2afe0 65 33 56 4c 69 73 74 4e 61 6d 65 54 6f 4e 75 6d  e3VListNameToNum
2aff0 28 56 4c 69 73 74 2a 2c 63 6f 6e 73 74 20 63 68  (VList*,const ch
2b000 61 72 2a 2c 69 6e 74 29 3b 0a 0a 2f 2a 0a 2a 2a  ar*,int);../*.**
2b010 20 52 6f 75 74 69 6e 65 73 20 74 6f 20 72 65 61   Routines to rea
2b020 64 20 61 6e 64 20 77 72 69 74 65 20 76 61 72 69  d and write vari
2b030 61 62 6c 65 2d 6c 65 6e 67 74 68 20 69 6e 74 65  able-length inte
2b040 67 65 72 73 2e 20 20 54 68 65 73 65 20 75 73 65  gers.  These use
2b050 64 20 74 6f 0a 2a 2a 20 62 65 20 64 65 66 69 6e  d to.** be defin
2b060 65 64 20 6c 6f 63 61 6c 6c 79 2c 20 62 75 74 20  ed locally, but 
2b070 6e 6f 77 20 77 65 20 75 73 65 20 74 68 65 20 76  now we use the v
2b080 61 72 69 6e 74 20 72 6f 75 74 69 6e 65 73 20 69  arint routines i
2b090 6e 20 74 68 65 20 75 74 69 6c 2e 63 0a 2a 2a 20  n the util.c.** 
2b0a0 66 69 6c 65 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c  file..*/.int sql
2b0b0 69 74 65 33 50 75 74 56 61 72 69 6e 74 28 75 6e  ite3PutVarint(un
2b0c0 73 69 67 6e 65 64 20 63 68 61 72 2a 2c 20 75 36  signed char*, u6
2b0d0 34 29 3b 0a 75 38 20 73 71 6c 69 74 65 33 47 65  4);.u8 sqlite3Ge
2b0e0 74 56 61 72 69 6e 74 28 63 6f 6e 73 74 20 75 6e  tVarint(const un
2b0f0 73 69 67 6e 65 64 20 63 68 61 72 20 2a 2c 20 75  signed char *, u
2b100 36 34 20 2a 29 3b 0a 75 38 20 73 71 6c 69 74 65  64 *);.u8 sqlite
2b110 33 47 65 74 56 61 72 69 6e 74 33 32 28 63 6f 6e  3GetVarint32(con
2b120 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72  st unsigned char
2b130 20 2a 2c 20 75 33 32 20 2a 29 3b 0a 69 6e 74 20   *, u32 *);.int 
2b140 73 71 6c 69 74 65 33 56 61 72 69 6e 74 4c 65 6e  sqlite3VarintLen
2b150 28 75 36 34 20 76 29 3b 0a 0a 2f 2a 0a 2a 2a 20  (u64 v);../*.** 
2b160 54 68 65 20 63 6f 6d 6d 6f 6e 20 63 61 73 65 20  The common case 
2b170 69 73 20 66 6f 72 20 61 20 76 61 72 69 6e 74 20  is for a varint 
2b180 74 6f 20 62 65 20 61 20 73 69 6e 67 6c 65 20 62  to be a single b
2b190 79 74 65 2e 20 20 54 68 65 79 20 66 6f 6c 6c 6f  yte.  They follo
2b1a0 77 69 6e 67 0a 2a 2a 20 6d 61 63 72 6f 73 20 68  wing.** macros h
2b1b0 61 6e 64 6c 65 20 74 68 65 20 63 6f 6d 6d 6f 6e  andle the common
2b1c0 20 63 61 73 65 20 77 69 74 68 6f 75 74 20 61 20   case without a 
2b1d0 70 72 6f 63 65 64 75 72 65 20 63 61 6c 6c 2c 20  procedure call, 
2b1e0 62 75 74 20 74 68 65 6e 20 63 61 6c 6c 0a 2a 2a  but then call.**
2b1f0 20 74 68 65 20 70 72 6f 63 65 64 75 72 65 20 66   the procedure f
2b200 6f 72 20 6c 61 72 67 65 72 20 76 61 72 69 6e 74  or larger varint
2b210 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 67 65  s..*/.#define ge
2b220 74 56 61 72 69 6e 74 33 32 28 41 2c 42 29 20 20  tVarint32(A,B)  
2b230 5c 0a 20 20 28 75 38 29 28 28 2a 28 41 29 3c 28  \.  (u8)((*(A)<(
2b240 75 38 29 30 78 38 30 29 3f 28 28 42 29 3d 28 75  u8)0x80)?((B)=(u
2b250 33 32 29 2a 28 41 29 29 2c 31 3a 73 71 6c 69 74  32)*(A)),1:sqlit
2b260 65 33 47 65 74 56 61 72 69 6e 74 33 32 28 28 41  e3GetVarint32((A
2b270 29 2c 28 75 33 32 20 2a 29 26 28 42 29 29 29 0a  ),(u32 *)&(B))).
2b280 23 64 65 66 69 6e 65 20 70 75 74 56 61 72 69 6e  #define putVarin
2b290 74 33 32 28 41 2c 42 29 20 20 5c 0a 20 20 28 75  t32(A,B)  \.  (u
2b2a0 38 29 28 28 28 75 33 32 29 28 42 29 3c 28 75 33  8)(((u32)(B)<(u3
2b2b0 32 29 30 78 38 30 29 3f 28 2a 28 41 29 3d 28 75  2)0x80)?(*(A)=(u
2b2c0 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 42 29  nsigned char)(B)
2b2d0 29 2c 31 3a 5c 0a 20 20 73 71 6c 69 74 65 33 50  ),1:\.  sqlite3P
2b2e0 75 74 56 61 72 69 6e 74 28 28 41 29 2c 28 42 29  utVarint((A),(B)
2b2f0 29 29 0a 23 64 65 66 69 6e 65 20 67 65 74 56 61  )).#define getVa
2b300 72 69 6e 74 20 20 20 20 73 71 6c 69 74 65 33 47  rint    sqlite3G
2b310 65 74 56 61 72 69 6e 74 0a 23 64 65 66 69 6e 65  etVarint.#define
2b320 20 70 75 74 56 61 72 69 6e 74 20 20 20 20 73 71   putVarint    sq
2b330 6c 69 74 65 33 50 75 74 56 61 72 69 6e 74 0a 0a  lite3PutVarint..
2b340 0a 63 6f 6e 73 74 20 63 68 61 72 20 2a 73 71 6c  .const char *sql
2b350 69 74 65 33 49 6e 64 65 78 41 66 66 69 6e 69 74  ite3IndexAffinit
2b360 79 53 74 72 28 73 71 6c 69 74 65 33 2a 2c 20 49  yStr(sqlite3*, I
2b370 6e 64 65 78 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  ndex*);.void sql
2b380 69 74 65 33 54 61 62 6c 65 41 66 66 69 6e 69 74  ite3TableAffinit
2b390 79 28 56 64 62 65 2a 2c 20 54 61 62 6c 65 2a 2c  y(Vdbe*, Table*,
2b3a0 20 69 6e 74 29 3b 0a 63 68 61 72 20 73 71 6c 69   int);.char sqli
2b3b0 74 65 33 43 6f 6d 70 61 72 65 41 66 66 69 6e 69  te3CompareAffini
2b3c0 74 79 28 45 78 70 72 20 2a 70 45 78 70 72 2c 20  ty(Expr *pExpr, 
2b3d0 63 68 61 72 20 61 66 66 32 29 3b 0a 69 6e 74 20  char aff2);.int 
2b3e0 73 71 6c 69 74 65 33 49 6e 64 65 78 41 66 66 69  sqlite3IndexAffi
2b3f0 6e 69 74 79 4f 6b 28 45 78 70 72 20 2a 70 45 78  nityOk(Expr *pEx
2b400 70 72 2c 20 63 68 61 72 20 69 64 78 5f 61 66 66  pr, char idx_aff
2b410 69 6e 69 74 79 29 3b 0a 63 68 61 72 20 73 71 6c  inity);.char sql
2b420 69 74 65 33 54 61 62 6c 65 43 6f 6c 75 6d 6e 41  ite3TableColumnA
2b430 66 66 69 6e 69 74 79 28 54 61 62 6c 65 2a 2c 69  ffinity(Table*,i
2b440 6e 74 29 3b 0a 63 68 61 72 20 73 71 6c 69 74 65  nt);.char sqlite
2b450 33 45 78 70 72 41 66 66 69 6e 69 74 79 28 45 78  3ExprAffinity(Ex
2b460 70 72 20 2a 70 45 78 70 72 29 3b 0a 69 6e 74 20  pr *pExpr);.int 
2b470 73 71 6c 69 74 65 33 41 74 6f 69 36 34 28 63 6f  sqlite3Atoi64(co
2b480 6e 73 74 20 63 68 61 72 2a 2c 20 69 36 34 2a 2c  nst char*, i64*,
2b490 20 69 6e 74 2c 20 75 38 29 3b 0a 69 6e 74 20 73   int, u8);.int s
2b4a0 71 6c 69 74 65 33 44 65 63 4f 72 48 65 78 54 6f  qlite3DecOrHexTo
2b4b0 49 36 34 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c  I64(const char*,
2b4c0 20 69 36 34 2a 29 3b 0a 76 6f 69 64 20 73 71 6c   i64*);.void sql
2b4d0 69 74 65 33 45 72 72 6f 72 57 69 74 68 4d 73 67  ite3ErrorWithMsg
2b4e0 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74 2c 20  (sqlite3*, int, 
2b4f0 63 6f 6e 73 74 20 63 68 61 72 2a 2c 2e 2e 2e 29  const char*,...)
2b500 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 72  ;.void sqlite3Er
2b510 72 6f 72 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74  ror(sqlite3*,int
2b520 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53  );.void sqlite3S
2b530 79 73 74 65 6d 45 72 72 6f 72 28 73 71 6c 69 74  ystemError(sqlit
2b540 65 33 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 2a  e3*,int);.void *
2b550 73 71 6c 69 74 65 33 48 65 78 54 6f 42 6c 6f 62  sqlite3HexToBlob
2b560 28 73 71 6c 69 74 65 33 2a 2c 20 63 6f 6e 73 74  (sqlite3*, const
2b570 20 63 68 61 72 20 2a 7a 2c 20 69 6e 74 20 6e 29   char *z, int n)
2b580 3b 0a 75 38 20 73 71 6c 69 74 65 33 48 65 78 54  ;.u8 sqlite3HexT
2b590 6f 49 6e 74 28 69 6e 74 20 68 29 3b 0a 69 6e 74  oInt(int h);.int
2b5a0 20 73 71 6c 69 74 65 33 54 77 6f 50 61 72 74 4e   sqlite3TwoPartN
2b5b0 61 6d 65 28 50 61 72 73 65 20 2a 2c 20 54 6f 6b  ame(Parse *, Tok
2b5c0 65 6e 20 2a 2c 20 54 6f 6b 65 6e 20 2a 2c 20 54  en *, Token *, T
2b5d0 6f 6b 65 6e 20 2a 2a 29 3b 0a 0a 23 69 66 20 64  oken **);..#if d
2b5e0 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4e 45  efined(SQLITE_NE
2b5f0 45 44 5f 45 52 52 5f 4e 41 4d 45 29 0a 63 6f 6e  ED_ERR_NAME).con
2b600 73 74 20 63 68 61 72 20 2a 73 71 6c 69 74 65 33  st char *sqlite3
2b610 45 72 72 4e 61 6d 65 28 69 6e 74 29 3b 0a 23 65  ErrName(int);.#e
2b620 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c  ndif..#ifdef SQL
2b630 49 54 45 5f 45 4e 41 42 4c 45 5f 44 45 53 45 52  ITE_ENABLE_DESER
2b640 49 41 4c 49 5a 45 0a 69 6e 74 20 73 71 6c 69 74  IALIZE.int sqlit
2b650 65 33 4d 65 6d 64 62 49 6e 69 74 28 76 6f 69 64  e3MemdbInit(void
2b660 29 3b 0a 23 65 6e 64 69 66 0a 0a 63 6f 6e 73 74  );.#endif..const
2b670 20 63 68 61 72 20 2a 73 71 6c 69 74 65 33 45 72   char *sqlite3Er
2b680 72 53 74 72 28 69 6e 74 29 3b 0a 69 6e 74 20 73  rStr(int);.int s
2b690 71 6c 69 74 65 33 52 65 61 64 53 63 68 65 6d 61  qlite3ReadSchema
2b6a0 28 50 61 72 73 65 20 2a 70 50 61 72 73 65 29 3b  (Parse *pParse);
2b6b0 0a 43 6f 6c 6c 53 65 71 20 2a 73 71 6c 69 74 65  .CollSeq *sqlite
2b6c0 33 46 69 6e 64 43 6f 6c 6c 53 65 71 28 73 71 6c  3FindCollSeq(sql
2b6d0 69 74 65 33 2a 2c 75 38 20 65 6e 63 2c 20 63 6f  ite3*,u8 enc, co
2b6e0 6e 73 74 20 63 68 61 72 2a 2c 69 6e 74 29 3b 0a  nst char*,int);.
2b6f0 43 6f 6c 6c 53 65 71 20 2a 73 71 6c 69 74 65 33  CollSeq *sqlite3
2b700 4c 6f 63 61 74 65 43 6f 6c 6c 53 65 71 28 50 61  LocateCollSeq(Pa
2b710 72 73 65 20 2a 70 50 61 72 73 65 2c 20 63 6f 6e  rse *pParse, con
2b720 73 74 20 63 68 61 72 2a 7a 4e 61 6d 65 29 3b 0a  st char*zName);.
2b730 43 6f 6c 6c 53 65 71 20 2a 73 71 6c 69 74 65 33  CollSeq *sqlite3
2b740 45 78 70 72 43 6f 6c 6c 53 65 71 28 50 61 72 73  ExprCollSeq(Pars
2b750 65 20 2a 70 50 61 72 73 65 2c 20 45 78 70 72 20  e *pParse, Expr 
2b760 2a 70 45 78 70 72 29 3b 0a 43 6f 6c 6c 53 65 71  *pExpr);.CollSeq
2b770 20 2a 73 71 6c 69 74 65 33 45 78 70 72 4e 4e 43   *sqlite3ExprNNC
2b780 6f 6c 6c 53 65 71 28 50 61 72 73 65 20 2a 70 50  ollSeq(Parse *pP
2b790 61 72 73 65 2c 20 45 78 70 72 20 2a 70 45 78 70  arse, Expr *pExp
2b7a0 72 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45  r);.int sqlite3E
2b7b0 78 70 72 43 6f 6c 6c 53 65 71 4d 61 74 63 68 28  xprCollSeqMatch(
2b7c0 50 61 72 73 65 2a 2c 45 78 70 72 2a 2c 45 78 70  Parse*,Expr*,Exp
2b7d0 72 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74  r*);.Expr *sqlit
2b7e0 65 33 45 78 70 72 41 64 64 43 6f 6c 6c 61 74 65  e3ExprAddCollate
2b7f0 54 6f 6b 65 6e 28 50 61 72 73 65 20 2a 70 50 61  Token(Parse *pPa
2b800 72 73 65 2c 20 45 78 70 72 2a 2c 20 63 6f 6e 73  rse, Expr*, cons
2b810 74 20 54 6f 6b 65 6e 2a 2c 20 69 6e 74 29 3b 0a  t Token*, int);.
2b820 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70  Expr *sqlite3Exp
2b830 72 41 64 64 43 6f 6c 6c 61 74 65 53 74 72 69 6e  rAddCollateStrin
2b840 67 28 50 61 72 73 65 2a 2c 45 78 70 72 2a 2c 63  g(Parse*,Expr*,c
2b850 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 45 78 70  onst char*);.Exp
2b860 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72 53 6b  r *sqlite3ExprSk
2b870 69 70 43 6f 6c 6c 61 74 65 28 45 78 70 72 2a 29  ipCollate(Expr*)
2b880 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 68 65  ;.int sqlite3Che
2b890 63 6b 43 6f 6c 6c 53 65 71 28 50 61 72 73 65 20  ckCollSeq(Parse 
2b8a0 2a 2c 20 43 6f 6c 6c 53 65 71 20 2a 29 3b 0a 69  *, CollSeq *);.i
2b8b0 6e 74 20 73 71 6c 69 74 65 33 43 68 65 63 6b 4f  nt sqlite3CheckO
2b8c0 62 6a 65 63 74 4e 61 6d 65 28 50 61 72 73 65 20  bjectName(Parse 
2b8d0 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 29  *, const char *)
2b8e0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 64  ;.void sqlite3Vd
2b8f0 62 65 53 65 74 43 68 61 6e 67 65 73 28 73 71 6c  beSetChanges(sql
2b900 69 74 65 33 20 2a 2c 20 69 6e 74 29 3b 0a 69 6e  ite3 *, int);.in
2b910 74 20 73 71 6c 69 74 65 33 41 64 64 49 6e 74 36  t sqlite3AddInt6
2b920 34 28 69 36 34 2a 2c 69 36 34 29 3b 0a 69 6e 74  4(i64*,i64);.int
2b930 20 73 71 6c 69 74 65 33 53 75 62 49 6e 74 36 34   sqlite3SubInt64
2b940 28 69 36 34 2a 2c 69 36 34 29 3b 0a 69 6e 74 20  (i64*,i64);.int 
2b950 73 71 6c 69 74 65 33 4d 75 6c 49 6e 74 36 34 28  sqlite3MulInt64(
2b960 69 36 34 2a 2c 69 36 34 29 3b 0a 69 6e 74 20 73  i64*,i64);.int s
2b970 71 6c 69 74 65 33 41 62 73 49 6e 74 33 32 28 69  qlite3AbsInt32(i
2b980 6e 74 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49  nt);.#ifdef SQLI
2b990 54 45 5f 45 4e 41 42 4c 45 5f 38 5f 33 5f 4e 41  TE_ENABLE_8_3_NA
2b9a0 4d 45 53 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  MES.void sqlite3
2b9b0 46 69 6c 65 53 75 66 66 69 78 33 28 63 6f 6e 73  FileSuffix3(cons
2b9c0 74 20 63 68 61 72 2a 2c 20 63 68 61 72 2a 29 3b  t char*, char*);
2b9d0 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
2b9e0 73 71 6c 69 74 65 33 46 69 6c 65 53 75 66 66 69  sqlite3FileSuffi
2b9f0 78 33 28 58 2c 59 29 0a 23 65 6e 64 69 66 0a 75  x3(X,Y).#endif.u
2ba00 38 20 73 71 6c 69 74 65 33 47 65 74 42 6f 6f 6c  8 sqlite3GetBool
2ba10 65 61 6e 28 63 6f 6e 73 74 20 63 68 61 72 20 2a  ean(const char *
2ba20 7a 2c 75 38 29 3b 0a 0a 63 6f 6e 73 74 20 76 6f  z,u8);..const vo
2ba30 69 64 20 2a 73 71 6c 69 74 65 33 56 61 6c 75 65  id *sqlite3Value
2ba40 54 65 78 74 28 73 71 6c 69 74 65 33 5f 76 61 6c  Text(sqlite3_val
2ba50 75 65 2a 2c 20 75 38 29 3b 0a 69 6e 74 20 73 71  ue*, u8);.int sq
2ba60 6c 69 74 65 33 56 61 6c 75 65 42 79 74 65 73 28  lite3ValueBytes(
2ba70 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2c 20  sqlite3_value*, 
2ba80 75 38 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  u8);.void sqlite
2ba90 33 56 61 6c 75 65 53 65 74 53 74 72 28 73 71 6c  3ValueSetStr(sql
2baa0 69 74 65 33 5f 76 61 6c 75 65 2a 2c 20 69 6e 74  ite3_value*, int
2bab0 2c 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a 2c 75  , const void *,u
2bac0 38 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  8,.             
2bad0 20 20 20 20 20 20 20 20 20 20 20 76 6f 69 64 28             void(
2bae0 2a 29 28 76 6f 69 64 2a 29 29 3b 0a 76 6f 69 64  *)(void*));.void
2baf0 20 73 71 6c 69 74 65 33 56 61 6c 75 65 53 65 74   sqlite3ValueSet
2bb00 4e 75 6c 6c 28 73 71 6c 69 74 65 33 5f 76 61 6c  Null(sqlite3_val
2bb10 75 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  ue*);.void sqlit
2bb20 65 33 56 61 6c 75 65 46 72 65 65 28 73 71 6c 69  e3ValueFree(sqli
2bb30 74 65 33 5f 76 61 6c 75 65 2a 29 3b 0a 73 71 6c  te3_value*);.sql
2bb40 69 74 65 33 5f 76 61 6c 75 65 20 2a 73 71 6c 69  ite3_value *sqli
2bb50 74 65 33 56 61 6c 75 65 4e 65 77 28 73 71 6c 69  te3ValueNew(sqli
2bb60 74 65 33 20 2a 29 3b 0a 23 69 66 6e 64 65 66 20  te3 *);.#ifndef 
2bb70 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31  SQLITE_OMIT_UTF1
2bb80 36 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33 55  6.char *sqlite3U
2bb90 74 66 31 36 74 6f 38 28 73 71 6c 69 74 65 33 20  tf16to8(sqlite3 
2bba0 2a 2c 20 63 6f 6e 73 74 20 76 6f 69 64 2a 2c 20  *, const void*, 
2bbb0 69 6e 74 2c 20 75 38 29 3b 0a 23 65 6e 64 69 66  int, u8);.#endif
2bbc0 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 61 6c 75  .int sqlite3Valu
2bbd0 65 46 72 6f 6d 45 78 70 72 28 73 71 6c 69 74 65  eFromExpr(sqlite
2bbe0 33 20 2a 2c 20 45 78 70 72 20 2a 2c 20 75 38 2c  3 *, Expr *, u8,
2bbf0 20 75 38 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c   u8, sqlite3_val
2bc00 75 65 20 2a 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  ue **);.void sql
2bc10 69 74 65 33 56 61 6c 75 65 41 70 70 6c 79 41 66  ite3ValueApplyAf
2bc20 66 69 6e 69 74 79 28 73 71 6c 69 74 65 33 5f 76  finity(sqlite3_v
2bc30 61 6c 75 65 20 2a 2c 20 75 38 2c 20 75 38 29 3b  alue *, u8, u8);
2bc40 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
2bc50 41 4d 41 4c 47 41 4d 41 54 49 4f 4e 0a 65 78 74  AMALGAMATION.ext
2bc60 65 72 6e 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e  ern const unsign
2bc70 65 64 20 63 68 61 72 20 73 71 6c 69 74 65 33 4f  ed char sqlite3O
2bc80 70 63 6f 64 65 50 72 6f 70 65 72 74 79 5b 5d 3b  pcodeProperty[];
2bc90 0a 65 78 74 65 72 6e 20 63 6f 6e 73 74 20 63 68  .extern const ch
2bca0 61 72 20 73 71 6c 69 74 65 33 53 74 72 42 49 4e  ar sqlite3StrBIN
2bcb0 41 52 59 5b 5d 3b 0a 65 78 74 65 72 6e 20 63 6f  ARY[];.extern co
2bcc0 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61  nst unsigned cha
2bcd0 72 20 73 71 6c 69 74 65 33 55 70 70 65 72 54 6f  r sqlite3UpperTo
2bce0 4c 6f 77 65 72 5b 5d 3b 0a 65 78 74 65 72 6e 20  Lower[];.extern 
2bcf0 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63  const unsigned c
2bd00 68 61 72 20 73 71 6c 69 74 65 33 43 74 79 70 65  har sqlite3Ctype
2bd10 4d 61 70 5b 5d 3b 0a 65 78 74 65 72 6e 20 63 6f  Map[];.extern co
2bd20 6e 73 74 20 54 6f 6b 65 6e 20 73 71 6c 69 74 65  nst Token sqlite
2bd30 33 49 6e 74 54 6f 6b 65 6e 73 5b 5d 3b 0a 65 78  3IntTokens[];.ex
2bd40 74 65 72 6e 20 53 51 4c 49 54 45 5f 57 53 44 20  tern SQLITE_WSD 
2bd50 73 74 72 75 63 74 20 53 71 6c 69 74 65 33 43 6f  struct Sqlite3Co
2bd60 6e 66 69 67 20 73 71 6c 69 74 65 33 43 6f 6e 66  nfig sqlite3Conf
2bd70 69 67 3b 0a 65 78 74 65 72 6e 20 46 75 6e 63 44  ig;.extern FuncD
2bd80 65 66 48 61 73 68 20 73 71 6c 69 74 65 33 42 75  efHash sqlite3Bu
2bd90 69 6c 74 69 6e 46 75 6e 63 74 69 6f 6e 73 3b 0a  iltinFunctions;.
2bda0 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
2bdb0 4d 49 54 5f 57 53 44 0a 65 78 74 65 72 6e 20 69  MIT_WSD.extern i
2bdc0 6e 74 20 73 71 6c 69 74 65 33 50 65 6e 64 69 6e  nt sqlite3Pendin
2bdd0 67 42 79 74 65 3b 0a 23 65 6e 64 69 66 0a 23 65  gByte;.#endif.#e
2bde0 6e 64 69 66 0a 23 69 66 64 65 66 20 56 44 42 45  ndif.#ifdef VDBE
2bdf0 5f 50 52 4f 46 49 4c 45 0a 65 78 74 65 72 6e 20  _PROFILE.extern 
2be00 73 71 6c 69 74 65 33 5f 75 69 6e 74 36 34 20 73  sqlite3_uint64 s
2be10 71 6c 69 74 65 33 4e 50 72 6f 66 69 6c 65 43 6e  qlite3NProfileCn
2be20 74 3b 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73  t;.#endif.void s
2be30 71 6c 69 74 65 33 52 6f 6f 74 50 61 67 65 4d 6f  qlite3RootPageMo
2be40 76 65 64 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e  ved(sqlite3*, in
2be50 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f  t, int, int);.vo
2be60 69 64 20 73 71 6c 69 74 65 33 52 65 69 6e 64 65  id sqlite3Reinde
2be70 78 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a  x(Parse*, Token*
2be80 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20  , Token*);.void 
2be90 73 71 6c 69 74 65 33 41 6c 74 65 72 46 75 6e 63  sqlite3AlterFunc
2bea0 74 69 6f 6e 73 28 76 6f 69 64 29 3b 0a 76 6f 69  tions(void);.voi
2beb0 64 20 73 71 6c 69 74 65 33 41 6c 74 65 72 52 65  d sqlite3AlterRe
2bec0 6e 61 6d 65 54 61 62 6c 65 28 50 61 72 73 65 2a  nameTable(Parse*
2bed0 2c 20 53 72 63 4c 69 73 74 2a 2c 20 54 6f 6b 65  , SrcList*, Toke
2bee0 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  n*);.int sqlite3
2bef0 47 65 74 54 6f 6b 65 6e 28 63 6f 6e 73 74 20 75  GetToken(const u
2bf00 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a 2c 20  nsigned char *, 
2bf10 69 6e 74 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  int *);.void sql
2bf20 69 74 65 33 4e 65 73 74 65 64 50 61 72 73 65 28  ite3NestedParse(
2bf30 50 61 72 73 65 2a 2c 20 63 6f 6e 73 74 20 63 68  Parse*, const ch
2bf40 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 76 6f 69 64 20  ar*, ...);.void 
2bf50 73 71 6c 69 74 65 33 45 78 70 69 72 65 50 72 65  sqlite3ExpirePre
2bf60 70 61 72 65 64 53 74 61 74 65 6d 65 6e 74 73 28  paredStatements(
2bf70 73 71 6c 69 74 65 33 2a 29 3b 0a 69 6e 74 20 73  sqlite3*);.int s
2bf80 71 6c 69 74 65 33 43 6f 64 65 53 75 62 73 65 6c  qlite3CodeSubsel
2bf90 65 63 74 28 50 61 72 73 65 2a 2c 20 45 78 70 72  ect(Parse*, Expr
2bfa0 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76   *, int, int);.v
2bfb0 6f 69 64 20 73 71 6c 69 74 65 33 53 65 6c 65 63  oid sqlite3Selec
2bfc0 74 50 72 65 70 28 50 61 72 73 65 2a 2c 20 53 65  tPrep(Parse*, Se
2bfd0 6c 65 63 74 2a 2c 20 4e 61 6d 65 43 6f 6e 74 65  lect*, NameConte
2bfe0 78 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  xt*);.void sqlit
2bff0 65 33 53 65 6c 65 63 74 57 72 6f 6e 67 4e 75 6d  e3SelectWrongNum
2c000 54 65 72 6d 73 45 72 72 6f 72 28 50 61 72 73 65  TermsError(Parse
2c010 20 2a 70 50 61 72 73 65 2c 20 53 65 6c 65 63 74   *pParse, Select
2c020 20 2a 70 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65   *p);.int sqlite
2c030 33 4d 61 74 63 68 53 70 61 6e 4e 61 6d 65 28 63  3MatchSpanName(c
2c040 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73  onst char*, cons
2c050 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63  t char*, const c
2c060 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  har*, const char
2c070 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52  *);.int sqlite3R
2c080 65 73 6f 6c 76 65 45 78 70 72 4e 61 6d 65 73 28  esolveExprNames(
2c090 4e 61 6d 65 43 6f 6e 74 65 78 74 2a 2c 20 45 78  NameContext*, Ex
2c0a0 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  pr*);.int sqlite
2c0b0 33 52 65 73 6f 6c 76 65 45 78 70 72 4c 69 73 74  3ResolveExprList
2c0c0 4e 61 6d 65 73 28 4e 61 6d 65 43 6f 6e 74 65 78  Names(NameContex
2c0d0 74 2a 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a  t*, ExprList*);.
2c0e0 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 73 6f  void sqlite3Reso
2c0f0 6c 76 65 53 65 6c 65 63 74 4e 61 6d 65 73 28 50  lveSelectNames(P
2c100 61 72 73 65 2a 2c 20 53 65 6c 65 63 74 2a 2c 20  arse*, Select*, 
2c110 4e 61 6d 65 43 6f 6e 74 65 78 74 2a 29 3b 0a 76  NameContext*);.v
2c120 6f 69 64 20 73 71 6c 69 74 65 33 52 65 73 6f 6c  oid sqlite3Resol
2c130 76 65 53 65 6c 66 52 65 66 65 72 65 6e 63 65 28  veSelfReference(
2c140 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a 2c 69 6e  Parse*,Table*,in
2c150 74 2c 45 78 70 72 2a 2c 45 78 70 72 4c 69 73 74  t,Expr*,ExprList
2c160 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52  *);.int sqlite3R
2c170 65 73 6f 6c 76 65 4f 72 64 65 72 47 72 6f 75 70  esolveOrderGroup
2c180 42 79 28 50 61 72 73 65 2a 2c 20 53 65 6c 65 63  By(Parse*, Selec
2c190 74 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 63  t*, ExprList*, c
2c1a0 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69  onst char*);.voi
2c1b0 64 20 73 71 6c 69 74 65 33 43 6f 6c 75 6d 6e 44  d sqlite3ColumnD
2c1c0 65 66 61 75 6c 74 28 56 64 62 65 20 2a 2c 20 54  efault(Vdbe *, T
2c1d0 61 62 6c 65 20 2a 2c 20 69 6e 74 2c 20 69 6e 74  able *, int, int
2c1e0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41  );.void sqlite3A
2c1f0 6c 74 65 72 46 69 6e 69 73 68 41 64 64 43 6f 6c  lterFinishAddCol
2c200 75 6d 6e 28 50 61 72 73 65 20 2a 2c 20 54 6f 6b  umn(Parse *, Tok
2c210 65 6e 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  en *);.void sqli
2c220 74 65 33 41 6c 74 65 72 42 65 67 69 6e 41 64 64  te3AlterBeginAdd
2c230 43 6f 6c 75 6d 6e 28 50 61 72 73 65 20 2a 2c 20  Column(Parse *, 
2c240 53 72 63 4c 69 73 74 20 2a 29 3b 0a 43 6f 6c 6c  SrcList *);.Coll
2c250 53 65 71 20 2a 73 71 6c 69 74 65 33 47 65 74 43  Seq *sqlite3GetC
2c260 6f 6c 6c 53 65 71 28 50 61 72 73 65 2a 2c 20 75  ollSeq(Parse*, u
2c270 38 2c 20 43 6f 6c 6c 53 65 71 20 2a 2c 20 63 6f  8, CollSeq *, co
2c280 6e 73 74 20 63 68 61 72 2a 29 3b 0a 63 68 61 72  nst char*);.char
2c290 20 73 71 6c 69 74 65 33 41 66 66 69 6e 69 74 79   sqlite3Affinity
2c2a0 54 79 70 65 28 63 6f 6e 73 74 20 63 68 61 72 2a  Type(const char*
2c2b0 2c 20 43 6f 6c 75 6d 6e 2a 29 3b 0a 76 6f 69 64  , Column*);.void
2c2c0 20 73 71 6c 69 74 65 33 41 6e 61 6c 79 7a 65 28   sqlite3Analyze(
2c2d0 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 20  Parse*, Token*, 
2c2e0 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c  Token*);.int sql
2c2f0 69 74 65 33 49 6e 76 6f 6b 65 42 75 73 79 48 61  ite3InvokeBusyHa
2c300 6e 64 6c 65 72 28 42 75 73 79 48 61 6e 64 6c 65  ndler(BusyHandle
2c310 72 2a 2c 20 73 71 6c 69 74 65 33 5f 66 69 6c 65  r*, sqlite3_file
2c320 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46  *);.int sqlite3F
2c330 69 6e 64 44 62 28 73 71 6c 69 74 65 33 2a 2c 20  indDb(sqlite3*, 
2c340 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c  Token*);.int sql
2c350 69 74 65 33 46 69 6e 64 44 62 4e 61 6d 65 28 73  ite3FindDbName(s
2c360 71 6c 69 74 65 33 20 2a 2c 20 63 6f 6e 73 74 20  qlite3 *, const 
2c370 63 68 61 72 20 2a 29 3b 0a 69 6e 74 20 73 71 6c  char *);.int sql
2c380 69 74 65 33 41 6e 61 6c 79 73 69 73 4c 6f 61 64  ite3AnalysisLoad
2c390 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 20 69 44  (sqlite3*,int iD
2c3a0 42 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  B);.void sqlite3
2c3b0 44 65 6c 65 74 65 49 6e 64 65 78 53 61 6d 70 6c  DeleteIndexSampl
2c3c0 65 73 28 73 71 6c 69 74 65 33 2a 2c 49 6e 64 65  es(sqlite3*,Inde
2c3d0 78 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  x*);.void sqlite
2c3e0 33 44 65 66 61 75 6c 74 52 6f 77 45 73 74 28 49  3DefaultRowEst(I
2c3f0 6e 64 65 78 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  ndex*);.void sql
2c400 69 74 65 33 52 65 67 69 73 74 65 72 4c 69 6b 65  ite3RegisterLike
2c410 46 75 6e 63 74 69 6f 6e 73 28 73 71 6c 69 74 65  Functions(sqlite
2c420 33 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71  3*, int);.int sq
2c430 6c 69 74 65 33 49 73 4c 69 6b 65 46 75 6e 63 74  lite3IsLikeFunct
2c440 69 6f 6e 28 73 71 6c 69 74 65 33 2a 2c 45 78 70  ion(sqlite3*,Exp
2c450 72 2a 2c 69 6e 74 2a 2c 63 68 61 72 2a 29 3b 0a  r*,int*,char*);.
2c460 76 6f 69 64 20 73 71 6c 69 74 65 33 53 63 68 65  void sqlite3Sche
2c470 6d 61 43 6c 65 61 72 28 76 6f 69 64 20 2a 29 3b  maClear(void *);
2c480 0a 53 63 68 65 6d 61 20 2a 73 71 6c 69 74 65 33  .Schema *sqlite3
2c490 53 63 68 65 6d 61 47 65 74 28 73 71 6c 69 74 65  SchemaGet(sqlite
2c4a0 33 20 2a 2c 20 42 74 72 65 65 20 2a 29 3b 0a 69  3 *, Btree *);.i
2c4b0 6e 74 20 73 71 6c 69 74 65 33 53 63 68 65 6d 61  nt sqlite3Schema
2c4c0 54 6f 49 6e 64 65 78 28 73 71 6c 69 74 65 33 20  ToIndex(sqlite3 
2c4d0 2a 64 62 2c 20 53 63 68 65 6d 61 20 2a 29 3b 0a  *db, Schema *);.
2c4e0 4b 65 79 49 6e 66 6f 20 2a 73 71 6c 69 74 65 33  KeyInfo *sqlite3
2c4f0 4b 65 79 49 6e 66 6f 41 6c 6c 6f 63 28 73 71 6c  KeyInfoAlloc(sql
2c500 69 74 65 33 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a  ite3*,int,int);.
2c510 76 6f 69 64 20 73 71 6c 69 74 65 33 4b 65 79 49  void sqlite3KeyI
2c520 6e 66 6f 55 6e 72 65 66 28 4b 65 79 49 6e 66 6f  nfoUnref(KeyInfo
2c530 2a 29 3b 0a 4b 65 79 49 6e 66 6f 20 2a 73 71 6c  *);.KeyInfo *sql
2c540 69 74 65 33 4b 65 79 49 6e 66 6f 52 65 66 28 4b  ite3KeyInfoRef(K
2c550 65 79 49 6e 66 6f 2a 29 3b 0a 4b 65 79 49 6e 66  eyInfo*);.KeyInf
2c560 6f 20 2a 73 71 6c 69 74 65 33 4b 65 79 49 6e 66  o *sqlite3KeyInf
2c570 6f 4f 66 49 6e 64 65 78 28 50 61 72 73 65 2a 2c  oOfIndex(Parse*,
2c580 20 49 6e 64 65 78 2a 29 3b 0a 23 69 66 64 65 66   Index*);.#ifdef
2c590 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 69 6e   SQLITE_DEBUG.in
2c5a0 74 20 73 71 6c 69 74 65 33 4b 65 79 49 6e 66 6f  t sqlite3KeyInfo
2c5b0 49 73 57 72 69 74 65 61 62 6c 65 28 4b 65 79 49  IsWriteable(KeyI
2c5c0 6e 66 6f 2a 29 3b 0a 23 65 6e 64 69 66 0a 69 6e  nfo*);.#endif.in
2c5d0 74 20 73 71 6c 69 74 65 33 43 72 65 61 74 65 46  t sqlite3CreateF
2c5e0 75 6e 63 28 73 71 6c 69 74 65 33 20 2a 2c 20 63  unc(sqlite3 *, c
2c5f0 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20 69 6e 74  onst char *, int
2c600 2c 20 69 6e 74 2c 20 76 6f 69 64 20 2a 2c 0a 20  , int, void *,. 
2c610 20 76 6f 69 64 20 28 2a 29 28 73 71 6c 69 74 65   void (*)(sqlite
2c620 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73  3_context*,int,s
2c630 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a 29  qlite3_value **)
2c640 2c 0a 20 20 76 6f 69 64 20 28 2a 29 28 73 71 6c  ,.  void (*)(sql
2c650 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e  ite3_context*,in
2c660 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20  t,sqlite3_value 
2c670 2a 2a 29 2c 20 76 6f 69 64 20 28 2a 29 28 73 71  **), void (*)(sq
2c680 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 29 2c  lite3_context*),
2c690 0a 20 20 46 75 6e 63 44 65 73 74 72 75 63 74 6f  .  FuncDestructo
2c6a0 72 20 2a 70 44 65 73 74 72 75 63 74 6f 72 0a 29  r *pDestructor.)
2c6b0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4f 6f  ;.void sqlite3Oo
2c6c0 6d 46 61 75 6c 74 28 73 71 6c 69 74 65 33 2a 29  mFault(sqlite3*)
2c6d0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4f 6f  ;.void sqlite3Oo
2c6e0 6d 43 6c 65 61 72 28 73 71 6c 69 74 65 33 2a 29  mClear(sqlite3*)
2c6f0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 41 70 69  ;.int sqlite3Api
2c700 45 78 69 74 28 73 71 6c 69 74 65 33 20 2a 64 62  Exit(sqlite3 *db
2c710 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69  , int);.int sqli
2c720 74 65 33 4f 70 65 6e 54 65 6d 70 44 61 74 61 62  te3OpenTempDatab
2c730 61 73 65 28 50 61 72 73 65 20 2a 29 3b 0a 0a 76  ase(Parse *);..v
2c740 6f 69 64 20 73 71 6c 69 74 65 33 53 74 72 41 63  oid sqlite3StrAc
2c750 63 75 6d 49 6e 69 74 28 53 74 72 41 63 63 75 6d  cumInit(StrAccum
2c760 2a 2c 20 73 71 6c 69 74 65 33 2a 2c 20 63 68 61  *, sqlite3*, cha
2c770 72 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76  r*, int, int);.v
2c780 6f 69 64 20 73 71 6c 69 74 65 33 53 74 72 41 63  oid sqlite3StrAc
2c790 63 75 6d 41 70 70 65 6e 64 28 53 74 72 41 63 63  cumAppend(StrAcc
2c7a0 75 6d 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c  um*,const char*,
2c7b0 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
2c7c0 65 33 53 74 72 41 63 63 75 6d 41 70 70 65 6e 64  e3StrAccumAppend
2c7d0 41 6c 6c 28 53 74 72 41 63 63 75 6d 2a 2c 63 6f  All(StrAccum*,co
2c7e0 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64  nst char*);.void
2c7f0 20 73 71 6c 69 74 65 33 41 70 70 65 6e 64 43 68   sqlite3AppendCh
2c800 61 72 28 53 74 72 41 63 63 75 6d 2a 2c 69 6e 74  ar(StrAccum*,int
2c810 2c 63 68 61 72 29 3b 0a 63 68 61 72 20 2a 73 71  ,char);.char *sq
2c820 6c 69 74 65 33 53 74 72 41 63 63 75 6d 46 69 6e  lite3StrAccumFin
2c830 69 73 68 28 53 74 72 41 63 63 75 6d 2a 29 3b 0a  ish(StrAccum*);.
2c840 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74 72 41  void sqlite3StrA
2c850 63 63 75 6d 52 65 73 65 74 28 53 74 72 41 63 63  ccumReset(StrAcc
2c860 75 6d 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  um*);.void sqlit
2c870 65 33 53 65 6c 65 63 74 44 65 73 74 49 6e 69 74  e3SelectDestInit
2c880 28 53 65 6c 65 63 74 44 65 73 74 2a 2c 69 6e 74  (SelectDest*,int
2c890 2c 69 6e 74 29 3b 0a 45 78 70 72 20 2a 73 71 6c  ,int);.Expr *sql
2c8a0 69 74 65 33 43 72 65 61 74 65 43 6f 6c 75 6d 6e  ite3CreateColumn
2c8b0 45 78 70 72 28 73 71 6c 69 74 65 33 20 2a 2c 20  Expr(sqlite3 *, 
2c8c0 53 72 63 4c 69 73 74 20 2a 2c 20 69 6e 74 2c 20  SrcList *, int, 
2c8d0 69 6e 74 29 3b 0a 0a 76 6f 69 64 20 73 71 6c 69  int);..void sqli
2c8e0 74 65 33 42 61 63 6b 75 70 52 65 73 74 61 72 74  te3BackupRestart
2c8f0 28 73 71 6c 69 74 65 33 5f 62 61 63 6b 75 70 20  (sqlite3_backup 
2c900 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
2c910 42 61 63 6b 75 70 55 70 64 61 74 65 28 73 71 6c  BackupUpdate(sql
2c920 69 74 65 33 5f 62 61 63 6b 75 70 20 2a 2c 20 50  ite3_backup *, P
2c930 67 6e 6f 2c 20 63 6f 6e 73 74 20 75 38 20 2a 29  gno, const u8 *)
2c940 3b 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  ;..#ifndef SQLIT
2c950 45 5f 4f 4d 49 54 5f 53 55 42 51 55 45 52 59 0a  E_OMIT_SUBQUERY.
2c960 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 43  int sqlite3ExprC
2c970 68 65 63 6b 49 4e 28 50 61 72 73 65 2a 2c 20 45  heckIN(Parse*, E
2c980 78 70 72 2a 29 3b 0a 23 65 6c 73 65 0a 23 20 64  xpr*);.#else.# d
2c990 65 66 69 6e 65 20 73 71 6c 69 74 65 33 45 78 70  efine sqlite3Exp
2c9a0 72 43 68 65 63 6b 49 4e 28 78 2c 79 29 20 53 51  rCheckIN(x,y) SQ
2c9b0 4c 49 54 45 5f 4f 4b 0a 23 65 6e 64 69 66 0a 0a  LITE_OK.#endif..
2c9c0 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e  #ifdef SQLITE_EN
2c9d0 41 42 4c 45 5f 53 54 41 54 33 5f 4f 52 5f 53 54  ABLE_STAT3_OR_ST
2c9e0 41 54 34 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  AT4.void sqlite3
2c9f0 41 6e 61 6c 79 7a 65 46 75 6e 63 74 69 6f 6e 73  AnalyzeFunctions
2ca00 28 76 6f 69 64 29 3b 0a 69 6e 74 20 73 71 6c 69  (void);.int sqli
2ca10 74 65 33 53 74 61 74 34 50 72 6f 62 65 53 65 74  te3Stat4ProbeSet
2ca20 56 61 6c 75 65 28 0a 20 20 20 20 50 61 72 73 65  Value(.    Parse
2ca30 2a 2c 49 6e 64 65 78 2a 2c 55 6e 70 61 63 6b 65  *,Index*,Unpacke
2ca40 64 52 65 63 6f 72 64 2a 2a 2c 45 78 70 72 2a 2c  dRecord**,Expr*,
2ca50 69 6e 74 2c 69 6e 74 2c 69 6e 74 2a 29 3b 0a 69  int,int,int*);.i
2ca60 6e 74 20 73 71 6c 69 74 65 33 53 74 61 74 34 56  nt sqlite3Stat4V
2ca70 61 6c 75 65 46 72 6f 6d 45 78 70 72 28 50 61 72  alueFromExpr(Par
2ca80 73 65 2a 2c 20 45 78 70 72 2a 2c 20 75 38 2c 20  se*, Expr*, u8, 
2ca90 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2a 29  sqlite3_value**)
2caa0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74  ;.void sqlite3St
2cab0 61 74 34 50 72 6f 62 65 46 72 65 65 28 55 6e 70  at4ProbeFree(Unp
2cac0 61 63 6b 65 64 52 65 63 6f 72 64 2a 29 3b 0a 69  ackedRecord*);.i
2cad0 6e 74 20 73 71 6c 69 74 65 33 53 74 61 74 34 43  nt sqlite3Stat4C
2cae0 6f 6c 75 6d 6e 28 73 71 6c 69 74 65 33 2a 2c 20  olumn(sqlite3*, 
2caf0 63 6f 6e 73 74 20 76 6f 69 64 2a 2c 20 69 6e 74  const void*, int
2cb00 2c 20 69 6e 74 2c 20 73 71 6c 69 74 65 33 5f 76  , int, sqlite3_v
2cb10 61 6c 75 65 2a 2a 29 3b 0a 63 68 61 72 20 73 71  alue**);.char sq
2cb20 6c 69 74 65 33 49 6e 64 65 78 43 6f 6c 75 6d 6e  lite3IndexColumn
2cb30 41 66 66 69 6e 69 74 79 28 73 71 6c 69 74 65 33  Affinity(sqlite3
2cb40 2a 2c 20 49 6e 64 65 78 2a 2c 20 69 6e 74 29 3b  *, Index*, int);
2cb50 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54  .#endif../*.** T
2cb60 68 65 20 69 6e 74 65 72 66 61 63 65 20 74 6f 20  he interface to 
2cb70 74 68 65 20 4c 45 4d 4f 4e 2d 67 65 6e 65 72 61  the LEMON-genera
2cb80 74 65 64 20 70 61 72 73 65 72 0a 2a 2f 0a 23 69  ted parser.*/.#i
2cb90 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 41 4d 41  fndef SQLITE_AMA
2cba0 4c 47 41 4d 41 54 49 4f 4e 0a 20 20 76 6f 69 64  LGAMATION.  void
2cbb0 20 2a 73 71 6c 69 74 65 33 50 61 72 73 65 72 41   *sqlite3ParserA
2cbc0 6c 6c 6f 63 28 76 6f 69 64 2a 28 2a 29 28 75 36  lloc(void*(*)(u6
2cbd0 34 29 2c 20 50 61 72 73 65 2a 29 3b 0a 20 20 76  4), Parse*);.  v
2cbe0 6f 69 64 20 73 71 6c 69 74 65 33 50 61 72 73 65  oid sqlite3Parse
2cbf0 72 46 72 65 65 28 76 6f 69 64 2a 2c 20 76 6f 69  rFree(void*, voi
2cc00 64 28 2a 29 28 76 6f 69 64 2a 29 29 3b 0a 23 65  d(*)(void*));.#e
2cc10 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65  ndif.void sqlite
2cc20 33 50 61 72 73 65 72 28 76 6f 69 64 2a 2c 20 69  3Parser(void*, i
2cc30 6e 74 2c 20 54 6f 6b 65 6e 29 3b 0a 23 69 66 64  nt, Token);.#ifd
2cc40 65 66 20 59 59 54 52 41 43 4b 4d 41 58 53 54 41  ef YYTRACKMAXSTA
2cc50 43 4b 44 45 50 54 48 0a 20 20 69 6e 74 20 73 71  CKDEPTH.  int sq
2cc60 6c 69 74 65 33 50 61 72 73 65 72 53 74 61 63 6b  lite3ParserStack
2cc70 50 65 61 6b 28 76 6f 69 64 2a 29 3b 0a 23 65 6e  Peak(void*);.#en
2cc80 64 69 66 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65  dif..void sqlite
2cc90 33 41 75 74 6f 4c 6f 61 64 45 78 74 65 6e 73 69  3AutoLoadExtensi
2cca0 6f 6e 73 28 73 71 6c 69 74 65 33 2a 29 3b 0a 23  ons(sqlite3*);.#
2ccb0 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
2ccc0 49 54 5f 4c 4f 41 44 5f 45 58 54 45 4e 53 49 4f  IT_LOAD_EXTENSIO
2ccd0 4e 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  N.  void sqlite3
2cce0 43 6c 6f 73 65 45 78 74 65 6e 73 69 6f 6e 73 28  CloseExtensions(
2ccf0 73 71 6c 69 74 65 33 2a 29 3b 0a 23 65 6c 73 65  sqlite3*);.#else
2cd00 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
2cd10 33 43 6c 6f 73 65 45 78 74 65 6e 73 69 6f 6e 73  3CloseExtensions
2cd20 28 58 29 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e  (X).#endif..#ifn
2cd30 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
2cd40 53 48 41 52 45 44 5f 43 41 43 48 45 0a 20 20 76  SHARED_CACHE.  v
2cd50 6f 69 64 20 73 71 6c 69 74 65 33 54 61 62 6c 65  oid sqlite3Table
2cd60 4c 6f 63 6b 28 50 61 72 73 65 20 2a 2c 20 69 6e  Lock(Parse *, in
2cd70 74 2c 20 69 6e 74 2c 20 75 38 2c 20 63 6f 6e 73  t, int, u8, cons
2cd80 74 20 63 68 61 72 20 2a 29 3b 0a 23 65 6c 73 65  t char *);.#else
2cd90 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74  .  #define sqlit
2cda0 65 33 54 61 62 6c 65 4c 6f 63 6b 28 76 2c 77 2c  e3TableLock(v,w,
2cdb0 78 2c 79 2c 7a 29 0a 23 65 6e 64 69 66 0a 0a 23  x,y,z).#endif..#
2cdc0 69 66 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53  ifdef SQLITE_TES
2cdd0 54 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 55  T.  int sqlite3U
2cde0 74 66 38 54 6f 38 28 75 6e 73 69 67 6e 65 64 20  tf8To8(unsigned 
2cdf0 63 68 61 72 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a  char*);.#endif..
2ce00 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  #ifdef SQLITE_OM
2ce10 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a  IT_VIRTUALTABLE.
2ce20 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  #  define sqlite
2ce30 33 56 74 61 62 43 6c 65 61 72 28 59 29 0a 23 20  3VtabClear(Y).# 
2ce40 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56   define sqlite3V
2ce50 74 61 62 53 79 6e 63 28 58 2c 59 29 20 53 51 4c  tabSync(X,Y) SQL
2ce60 49 54 45 5f 4f 4b 0a 23 20 20 64 65 66 69 6e 65  ITE_OK.#  define
2ce70 20 73 71 6c 69 74 65 33 56 74 61 62 52 6f 6c 6c   sqlite3VtabRoll
2ce80 62 61 63 6b 28 58 29 0a 23 20 20 64 65 66 69 6e  back(X).#  defin
2ce90 65 20 73 71 6c 69 74 65 33 56 74 61 62 43 6f 6d  e sqlite3VtabCom
2cea0 6d 69 74 28 58 29 0a 23 20 20 64 65 66 69 6e 65  mit(X).#  define
2ceb0 20 73 71 6c 69 74 65 33 56 74 61 62 49 6e 53 79   sqlite3VtabInSy
2cec0 6e 63 28 64 62 29 20 30 0a 23 20 20 64 65 66 69  nc(db) 0.#  defi
2ced0 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62 4c 6f  ne sqlite3VtabLo
2cee0 63 6b 28 58 29 0a 23 20 20 64 65 66 69 6e 65 20  ck(X).#  define 
2cef0 73 71 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f 63  sqlite3VtabUnloc
2cf00 6b 28 58 29 0a 23 20 20 64 65 66 69 6e 65 20 73  k(X).#  define s
2cf10 71 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f 63 6b  qlite3VtabUnlock
2cf20 4c 69 73 74 28 58 29 0a 23 20 20 64 65 66 69 6e  List(X).#  defin
2cf30 65 20 73 71 6c 69 74 65 33 56 74 61 62 53 61 76  e sqlite3VtabSav
2cf40 65 70 6f 69 6e 74 28 58 2c 20 59 2c 20 5a 29 20  epoint(X, Y, Z) 
2cf50 53 51 4c 49 54 45 5f 4f 4b 0a 23 20 20 64 65 66  SQLITE_OK.#  def
2cf60 69 6e 65 20 73 71 6c 69 74 65 33 47 65 74 56 54  ine sqlite3GetVT
2cf70 61 62 6c 65 28 58 2c 59 29 20 20 28 28 56 54 61  able(X,Y)  ((VTa
2cf80 62 6c 65 2a 29 30 29 0a 23 65 6c 73 65 0a 20 20  ble*)0).#else.  
2cf90 20 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61   void sqlite3Vta
2cfa0 62 43 6c 65 61 72 28 73 71 6c 69 74 65 33 20 2a  bClear(sqlite3 *
2cfb0 64 62 2c 20 54 61 62 6c 65 2a 29 3b 0a 20 20 20  db, Table*);.   
2cfc0 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62  void sqlite3Vtab
2cfd0 44 69 73 63 6f 6e 6e 65 63 74 28 73 71 6c 69 74  Disconnect(sqlit
2cfe0 65 33 20 2a 64 62 2c 20 54 61 62 6c 65 20 2a 70  e3 *db, Table *p
2cff0 29 3b 0a 20 20 20 69 6e 74 20 73 71 6c 69 74 65  );.   int sqlite
2d000 33 56 74 61 62 53 79 6e 63 28 73 71 6c 69 74 65  3VtabSync(sqlite
2d010 33 20 2a 64 62 2c 20 56 64 62 65 2a 29 3b 0a 20  3 *db, Vdbe*);. 
2d020 20 20 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61    int sqlite3Vta
2d030 62 52 6f 6c 6c 62 61 63 6b 28 73 71 6c 69 74 65  bRollback(sqlite
2d040 33 20 2a 64 62 29 3b 0a 20 20 20 69 6e 74 20 73  3 *db);.   int s
2d050 71 6c 69 74 65 33 56 74 61 62 43 6f 6d 6d 69 74  qlite3VtabCommit
2d060 28 73 71 6c 69 74 65 33 20 2a 64 62 29 3b 0a 20  (sqlite3 *db);. 
2d070 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74    void sqlite3Vt
2d080 61 62 4c 6f 63 6b 28 56 54 61 62 6c 65 20 2a 29  abLock(VTable *)
2d090 3b 0a 20 20 20 76 6f 69 64 20 73 71 6c 69 74 65  ;.   void sqlite
2d0a0 33 56 74 61 62 55 6e 6c 6f 63 6b 28 56 54 61 62  3VtabUnlock(VTab
2d0b0 6c 65 20 2a 29 3b 0a 20 20 20 76 6f 69 64 20 73  le *);.   void s
2d0c0 71 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f 63 6b  qlite3VtabUnlock
2d0d0 4c 69 73 74 28 73 71 6c 69 74 65 33 2a 29 3b 0a  List(sqlite3*);.
2d0e0 20 20 20 69 6e 74 20 73 71 6c 69 74 65 33 56 74     int sqlite3Vt
2d0f0 61 62 53 61 76 65 70 6f 69 6e 74 28 73 71 6c 69  abSavepoint(sqli
2d100 74 65 33 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 29  te3 *, int, int)
2d110 3b 0a 20 20 20 76 6f 69 64 20 73 71 6c 69 74 65  ;.   void sqlite
2d120 33 56 74 61 62 49 6d 70 6f 72 74 45 72 72 6d 73  3VtabImportErrms
2d130 67 28 56 64 62 65 2a 2c 20 73 71 6c 69 74 65 33  g(Vdbe*, sqlite3
2d140 5f 76 74 61 62 2a 29 3b 0a 20 20 20 56 54 61 62  _vtab*);.   VTab
2d150 6c 65 20 2a 73 71 6c 69 74 65 33 47 65 74 56 54  le *sqlite3GetVT
2d160 61 62 6c 65 28 73 71 6c 69 74 65 33 2a 2c 20 54  able(sqlite3*, T
2d170 61 62 6c 65 2a 29 3b 0a 20 20 20 4d 6f 64 75 6c  able*);.   Modul
2d180 65 20 2a 73 71 6c 69 74 65 33 56 74 61 62 43 72  e *sqlite3VtabCr
2d190 65 61 74 65 4d 6f 64 75 6c 65 28 0a 20 20 20 20  eateModule(.    
2d1a0 20 73 71 6c 69 74 65 33 2a 2c 0a 20 20 20 20 20   sqlite3*,.     
2d1b0 63 6f 6e 73 74 20 63 68 61 72 2a 2c 0a 20 20 20  const char*,.   
2d1c0 20 20 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f    const sqlite3_
2d1d0 6d 6f 64 75 6c 65 2a 2c 0a 20 20 20 20 20 76 6f  module*,.     vo
2d1e0 69 64 2a 2c 0a 20 20 20 20 20 76 6f 69 64 28 2a  id*,.     void(*
2d1f0 29 28 76 6f 69 64 2a 29 0a 20 20 20 29 3b 0a 23  )(void*).   );.#
2d200 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33    define sqlite3
2d210 56 74 61 62 49 6e 53 79 6e 63 28 64 62 29 20 28  VtabInSync(db) (
2d220 28 64 62 29 2d 3e 6e 56 54 72 61 6e 73 3e 30 20  (db)->nVTrans>0 
2d230 26 26 20 28 64 62 29 2d 3e 61 56 54 72 61 6e 73  && (db)->aVTrans
2d240 3d 3d 30 29 0a 23 65 6e 64 69 66 0a 69 6e 74 20  ==0).#endif.int 
2d250 73 71 6c 69 74 65 33 56 74 61 62 45 70 6f 6e 79  sqlite3VtabEpony
2d260 6d 6f 75 73 54 61 62 6c 65 49 6e 69 74 28 50 61  mousTableInit(Pa
2d270 72 73 65 2a 2c 4d 6f 64 75 6c 65 2a 29 3b 0a 76  rse*,Module*);.v
2d280 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62 45  oid sqlite3VtabE
2d290 70 6f 6e 79 6d 6f 75 73 54 61 62 6c 65 43 6c 65  ponymousTableCle
2d2a0 61 72 28 73 71 6c 69 74 65 33 2a 2c 4d 6f 64 75  ar(sqlite3*,Modu
2d2b0 6c 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  le*);.void sqlit
2d2c0 65 33 56 74 61 62 4d 61 6b 65 57 72 69 74 61 62  e3VtabMakeWritab
2d2d0 6c 65 28 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a  le(Parse*,Table*
2d2e0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56  );.void sqlite3V
2d2f0 74 61 62 42 65 67 69 6e 50 61 72 73 65 28 50 61  tabBeginParse(Pa
2d300 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f  rse*, Token*, To
2d310 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 69 6e  ken*, Token*, in
2d320 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
2d330 56 74 61 62 46 69 6e 69 73 68 50 61 72 73 65 28  VtabFinishParse(
2d340 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 29 3b  Parse*, Token*);
2d350 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61  .void sqlite3Vta
2d360 62 41 72 67 49 6e 69 74 28 50 61 72 73 65 2a 29  bArgInit(Parse*)
2d370 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74  ;.void sqlite3Vt
2d380 61 62 41 72 67 45 78 74 65 6e 64 28 50 61 72 73  abArgExtend(Pars
2d390 65 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74  e*, Token*);.int
2d3a0 20 73 71 6c 69 74 65 33 56 74 61 62 43 61 6c 6c   sqlite3VtabCall
2d3b0 43 72 65 61 74 65 28 73 71 6c 69 74 65 33 2a 2c  Create(sqlite3*,
2d3c0 20 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61 72   int, const char
2d3d0 20 2a 2c 20 63 68 61 72 20 2a 2a 29 3b 0a 69 6e   *, char **);.in
2d3e0 74 20 73 71 6c 69 74 65 33 56 74 61 62 43 61 6c  t sqlite3VtabCal
2d3f0 6c 43 6f 6e 6e 65 63 74 28 50 61 72 73 65 2a 2c  lConnect(Parse*,
2d400 20 54 61 62 6c 65 2a 29 3b 0a 69 6e 74 20 73 71   Table*);.int sq
2d410 6c 69 74 65 33 56 74 61 62 43 61 6c 6c 44 65 73  lite3VtabCallDes
2d420 74 72 6f 79 28 73 71 6c 69 74 65 33 2a 2c 20 69  troy(sqlite3*, i
2d430 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  nt, const char *
2d440 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 74  );.int sqlite3Vt
2d450 61 62 42 65 67 69 6e 28 73 71 6c 69 74 65 33 20  abBegin(sqlite3 
2d460 2a 2c 20 56 54 61 62 6c 65 20 2a 29 3b 0a 46 75  *, VTable *);.Fu
2d470 6e 63 44 65 66 20 2a 73 71 6c 69 74 65 33 56 74  ncDef *sqlite3Vt
2d480 61 62 4f 76 65 72 6c 6f 61 64 46 75 6e 63 74 69  abOverloadFuncti
2d490 6f 6e 28 73 71 6c 69 74 65 33 20 2a 2c 46 75 6e  on(sqlite3 *,Fun
2d4a0 63 44 65 66 2a 2c 20 69 6e 74 20 6e 41 72 67 2c  cDef*, int nArg,
2d4b0 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71   Expr*);.void sq
2d4c0 6c 69 74 65 33 49 6e 76 61 6c 69 64 46 75 6e 63  lite3InvalidFunc
2d4d0 74 69 6f 6e 28 73 71 6c 69 74 65 33 5f 63 6f 6e  tion(sqlite3_con
2d4e0 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65  text*,int,sqlite
2d4f0 33 5f 76 61 6c 75 65 2a 2a 29 3b 0a 73 71 6c 69  3_value**);.sqli
2d500 74 65 33 5f 69 6e 74 36 34 20 73 71 6c 69 74 65  te3_int64 sqlite
2d510 33 53 74 6d 74 43 75 72 72 65 6e 74 54 69 6d 65  3StmtCurrentTime
2d520 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74  (sqlite3_context
2d530 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56  *);.int sqlite3V
2d540 64 62 65 50 61 72 61 6d 65 74 65 72 49 6e 64 65  dbeParameterInde
2d550 78 28 56 64 62 65 2a 2c 20 63 6f 6e 73 74 20 63  x(Vdbe*, const c
2d560 68 61 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20  har*, int);.int 
2d570 73 71 6c 69 74 65 33 54 72 61 6e 73 66 65 72 42  sqlite3TransferB
2d580 69 6e 64 69 6e 67 73 28 73 71 6c 69 74 65 33 5f  indings(sqlite3_
2d590 73 74 6d 74 20 2a 2c 20 73 71 6c 69 74 65 33 5f  stmt *, sqlite3_
2d5a0 73 74 6d 74 20 2a 29 3b 0a 76 6f 69 64 20 73 71  stmt *);.void sq
2d5b0 6c 69 74 65 33 50 61 72 73 65 72 52 65 73 65 74  lite3ParserReset
2d5c0 28 50 61 72 73 65 2a 29 3b 0a 69 6e 74 20 73 71  (Parse*);.int sq
2d5d0 6c 69 74 65 33 52 65 70 72 65 70 61 72 65 28 56  lite3Reprepare(V
2d5e0 64 62 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  dbe*);.void sqli
2d5f0 74 65 33 45 78 70 72 4c 69 73 74 43 68 65 63 6b  te3ExprListCheck
2d600 4c 65 6e 67 74 68 28 50 61 72 73 65 2a 2c 20 45  Length(Parse*, E
2d610 78 70 72 4c 69 73 74 2a 2c 20 63 6f 6e 73 74 20  xprList*, const 
2d620 63 68 61 72 2a 29 3b 0a 43 6f 6c 6c 53 65 71 20  char*);.CollSeq 
2d630 2a 73 71 6c 69 74 65 33 42 69 6e 61 72 79 43 6f  *sqlite3BinaryCo
2d640 6d 70 61 72 65 43 6f 6c 6c 53 65 71 28 50 61 72  mpareCollSeq(Par
2d650 73 65 20 2a 2c 20 45 78 70 72 20 2a 2c 20 45 78  se *, Expr *, Ex
2d660 70 72 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  pr *);.int sqlit
2d670 65 33 54 65 6d 70 49 6e 4d 65 6d 6f 72 79 28 63  e3TempInMemory(c
2d680 6f 6e 73 74 20 73 71 6c 69 74 65 33 2a 29 3b 0a  onst sqlite3*);.
2d690 63 6f 6e 73 74 20 63 68 61 72 20 2a 73 71 6c 69  const char *sqli
2d6a0 74 65 33 4a 6f 75 72 6e 61 6c 4d 6f 64 65 6e 61  te3JournalModena
2d6b0 6d 65 28 69 6e 74 29 3b 0a 23 69 66 6e 64 65 66  me(int);.#ifndef
2d6c0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 41 4c   SQLITE_OMIT_WAL
2d6d0 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 43 68  .  int sqlite3Ch
2d6e0 65 63 6b 70 6f 69 6e 74 28 73 71 6c 69 74 65 33  eckpoint(sqlite3
2d6f0 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74  *, int, int, int
2d700 2a 2c 20 69 6e 74 2a 29 3b 0a 20 20 69 6e 74 20  *, int*);.  int 
2d710 73 71 6c 69 74 65 33 57 61 6c 44 65 66 61 75 6c  sqlite3WalDefaul
2d720 74 48 6f 6f 6b 28 76 6f 69 64 2a 2c 73 71 6c 69  tHook(void*,sqli
2d730 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  te3*,const char*
2d740 2c 69 6e 74 29 3b 0a 23 65 6e 64 69 66 0a 23 69  ,int);.#endif.#i
2d750 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
2d760 54 5f 43 54 45 0a 20 20 57 69 74 68 20 2a 73 71  T_CTE.  With *sq
2d770 6c 69 74 65 33 57 69 74 68 41 64 64 28 50 61 72  lite3WithAdd(Par
2d780 73 65 2a 2c 57 69 74 68 2a 2c 54 6f 6b 65 6e 2a  se*,With*,Token*
2d790 2c 45 78 70 72 4c 69 73 74 2a 2c 53 65 6c 65 63  ,ExprList*,Selec
2d7a0 74 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69  t*);.  void sqli
2d7b0 74 65 33 57 69 74 68 44 65 6c 65 74 65 28 73 71  te3WithDelete(sq
2d7c0 6c 69 74 65 33 2a 2c 57 69 74 68 2a 29 3b 0a 20  lite3*,With*);. 
2d7d0 20 76 6f 69 64 20 73 71 6c 69 74 65 33 57 69 74   void sqlite3Wit
2d7e0 68 50 75 73 68 28 50 61 72 73 65 2a 2c 20 57 69  hPush(Parse*, Wi
2d7f0 74 68 2a 2c 20 75 38 29 3b 0a 23 65 6c 73 65 0a  th*, u8);.#else.
2d800 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 57  #define sqlite3W
2d810 69 74 68 50 75 73 68 28 78 2c 79 2c 7a 29 0a 23  ithPush(x,y,z).#
2d820 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 57 69  define sqlite3Wi
2d830 74 68 44 65 6c 65 74 65 28 78 2c 79 29 0a 23 65  thDelete(x,y).#e
2d840 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c  ndif.#ifndef SQL
2d850 49 54 45 5f 4f 4d 49 54 5f 55 50 53 45 52 54 0a  ITE_OMIT_UPSERT.
2d860 20 20 55 70 73 65 72 74 20 2a 73 71 6c 69 74 65    Upsert *sqlite
2d870 33 55 70 73 65 72 74 4e 65 77 28 73 71 6c 69 74  3UpsertNew(sqlit
2d880 65 33 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 45 78  e3*,ExprList*,Ex
2d890 70 72 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 45 78  pr*,ExprList*,Ex
2d8a0 70 72 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c  pr*);.  void sql
2d8b0 69 74 65 33 55 70 73 65 72 74 44 65 6c 65 74 65  ite3UpsertDelete
2d8c0 28 73 71 6c 69 74 65 33 2a 2c 55 70 73 65 72 74  (sqlite3*,Upsert
2d8d0 2a 29 3b 0a 20 20 55 70 73 65 72 74 20 2a 73 71  *);.  Upsert *sq
2d8e0 6c 69 74 65 33 55 70 73 65 72 74 44 75 70 28 73  lite3UpsertDup(s
2d8f0 71 6c 69 74 65 33 2a 2c 55 70 73 65 72 74 2a 29  qlite3*,Upsert*)
2d900 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 55  ;.  int sqlite3U
2d910 70 73 65 72 74 41 6e 61 6c 79 7a 65 54 61 72 67  psertAnalyzeTarg
2d920 65 74 28 50 61 72 73 65 2a 2c 53 72 63 4c 69 73  et(Parse*,SrcLis
2d930 74 2a 2c 55 70 73 65 72 74 2a 29 3b 0a 20 20 76  t*,Upsert*);.  v
2d940 6f 69 64 20 73 71 6c 69 74 65 33 55 70 73 65 72  oid sqlite3Upser
2d950 74 44 6f 55 70 64 61 74 65 28 50 61 72 73 65 2a  tDoUpdate(Parse*
2d960 2c 55 70 73 65 72 74 2a 2c 54 61 62 6c 65 2a 2c  ,Upsert*,Table*,
2d970 49 6e 64 65 78 2a 2c 69 6e 74 29 3b 0a 23 65 6c  Index*,int);.#el
2d980 73 65 0a 23 64 65 66 69 6e 65 20 73 71 6c 69 74  se.#define sqlit
2d990 65 33 55 70 73 65 72 74 4e 65 77 28 76 2c 77 2c  e3UpsertNew(v,w,
2d9a0 78 2c 79 2c 7a 29 20 28 28 55 70 73 65 72 74 2a  x,y,z) ((Upsert*
2d9b0 29 30 29 0a 23 64 65 66 69 6e 65 20 73 71 6c 69  )0).#define sqli
2d9c0 74 65 33 55 70 73 65 72 74 44 65 6c 65 74 65 28  te3UpsertDelete(
2d9d0 78 2c 79 29 0a 23 64 65 66 69 6e 65 20 73 71 6c  x,y).#define sql
2d9e0 69 74 65 33 55 70 73 65 72 74 44 75 70 28 78 2c  ite3UpsertDup(x,
2d9f0 79 29 20 20 20 20 20 20 20 28 28 55 70 73 65 72  y)       ((Upser
2da00 74 2a 29 30 29 0a 23 65 6e 64 69 66 0a 0a 0a 2f  t*)0).#endif.../
2da10 2a 20 44 65 63 6c 61 72 61 74 69 6f 6e 73 20 66  * Declarations f
2da20 6f 72 20 66 75 6e 63 74 69 6f 6e 73 20 69 6e 20  or functions in 
2da30 66 6b 65 79 2e 63 2e 20 41 6c 6c 20 6f 66 20 74  fkey.c. All of t
2da40 68 65 73 65 20 61 72 65 20 72 65 70 6c 61 63 65  hese are replace
2da50 64 20 62 79 0a 2a 2a 20 6e 6f 2d 6f 70 20 6d 61  d by.** no-op ma
2da60 63 72 6f 73 20 69 66 20 4f 4d 49 54 5f 46 4f 52  cros if OMIT_FOR
2da70 45 49 47 4e 5f 4b 45 59 20 69 73 20 64 65 66 69  EIGN_KEY is defi
2da80 6e 65 64 2e 20 49 6e 20 74 68 69 73 20 63 61 73  ned. In this cas
2da90 65 20 6e 6f 20 66 6f 72 65 69 67 6e 0a 2a 2a 20  e no foreign.** 
2daa0 6b 65 79 20 66 75 6e 63 74 69 6f 6e 61 6c 69 74  key functionalit
2dab0 79 20 69 73 20 61 76 61 69 6c 61 62 6c 65 2e 20  y is available. 
2dac0 49 66 20 4f 4d 49 54 5f 54 52 49 47 47 45 52 20  If OMIT_TRIGGER 
2dad0 69 73 20 64 65 66 69 6e 65 64 20 62 75 74 0a 2a  is defined but.*
2dae0 2a 20 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b  * OMIT_FOREIGN_K
2daf0 45 59 20 69 73 20 6e 6f 74 2c 20 6f 6e 6c 79 20  EY is not, only 
2db00 73 6f 6d 65 20 6f 66 20 74 68 65 20 66 75 6e 63  some of the func
2db10 74 69 6f 6e 73 20 61 72 65 20 6e 6f 2d 6f 70 65  tions are no-ope
2db20 64 2e 20 49 6e 0a 2a 2a 20 74 68 69 73 20 63 61  d. In.** this ca
2db30 73 65 20 66 6f 72 65 69 67 6e 20 6b 65 79 73 20  se foreign keys 
2db40 61 72 65 20 70 61 72 73 65 64 2c 20 62 75 74 20  are parsed, but 
2db50 6e 6f 20 6f 74 68 65 72 20 66 75 6e 63 74 69 6f  no other functio
2db60 6e 61 6c 69 74 79 20 69 73 0a 2a 2a 20 70 72 6f  nality is.** pro
2db70 76 69 64 65 64 20 28 65 6e 66 6f 72 63 65 6d 65  vided (enforceme
2db80 6e 74 20 6f 66 20 46 4b 20 63 6f 6e 73 74 72 61  nt of FK constra
2db90 69 6e 74 73 20 72 65 71 75 69 72 65 73 20 74 68  ints requires th
2dba0 65 20 74 72 69 67 67 65 72 73 20 73 75 62 2d 73  e triggers sub-s
2dbb0 79 73 74 65 6d 29 2e 0a 2a 2f 0a 23 69 66 20 21  ystem)..*/.#if !
2dbc0 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
2dbd0 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 29  MIT_FOREIGN_KEY)
2dbe0 20 26 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c   && !defined(SQL
2dbf0 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47 45 52  ITE_OMIT_TRIGGER
2dc00 29 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ).  void sqlite3
2dc10 46 6b 43 68 65 63 6b 28 50 61 72 73 65 2a 2c 20  FkCheck(Parse*, 
2dc20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74  Table*, int, int
2dc30 2c 20 69 6e 74 2a 2c 20 69 6e 74 29 3b 0a 20 20  , int*, int);.  
2dc40 76 6f 69 64 20 73 71 6c 69 74 65 33 46 6b 44 72  void sqlite3FkDr
2dc50 6f 70 54 61 62 6c 65 28 50 61 72 73 65 2a 2c 20  opTable(Parse*, 
2dc60 53 72 63 4c 69 73 74 20 2a 2c 20 54 61 62 6c 65  SrcList *, Table
2dc70 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  *);.  void sqlit
2dc80 65 33 46 6b 41 63 74 69 6f 6e 73 28 50 61 72 73  e3FkActions(Pars
2dc90 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 45 78 70 72  e*, Table*, Expr
2dca0 4c 69 73 74 2a 2c 20 69 6e 74 2c 20 69 6e 74 2a  List*, int, int*
2dcb0 2c 20 69 6e 74 29 3b 0a 20 20 69 6e 74 20 73 71  , int);.  int sq
2dcc0 6c 69 74 65 33 46 6b 52 65 71 75 69 72 65 64 28  lite3FkRequired(
2dcd0 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20  Parse*, Table*, 
2dce0 69 6e 74 2a 2c 20 69 6e 74 29 3b 0a 20 20 75 33  int*, int);.  u3
2dcf0 32 20 73 71 6c 69 74 65 33 46 6b 4f 6c 64 6d 61  2 sqlite3FkOldma
2dd00 73 6b 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65  sk(Parse*, Table
2dd10 2a 29 3b 0a 20 20 46 4b 65 79 20 2a 73 71 6c 69  *);.  FKey *sqli
2dd20 74 65 33 46 6b 52 65 66 65 72 65 6e 63 65 73 28  te3FkReferences(
2dd30 54 61 62 6c 65 20 2a 29 3b 0a 23 65 6c 73 65 0a  Table *);.#else.
2dd40 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65    #define sqlite
2dd50 33 46 6b 41 63 74 69 6f 6e 73 28 61 2c 62 2c 63  3FkActions(a,b,c
2dd60 2c 64 2c 65 2c 66 29 0a 20 20 23 64 65 66 69 6e  ,d,e,f).  #defin
2dd70 65 20 73 71 6c 69 74 65 33 46 6b 43 68 65 63 6b  e sqlite3FkCheck
2dd80 28 61 2c 62 2c 63 2c 64 2c 65 2c 66 29 0a 20 20  (a,b,c,d,e,f).  
2dd90 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46  #define sqlite3F
2dda0 6b 44 72 6f 70 54 61 62 6c 65 28 61 2c 62 2c 63  kDropTable(a,b,c
2ddb0 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69  ).  #define sqli
2ddc0 74 65 33 46 6b 4f 6c 64 6d 61 73 6b 28 61 2c 62  te3FkOldmask(a,b
2ddd0 29 20 20 20 20 20 20 20 20 20 30 0a 20 20 23 64  )         0.  #d
2dde0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 52  efine sqlite3FkR
2ddf0 65 71 75 69 72 65 64 28 61 2c 62 2c 63 2c 64 29  equired(a,b,c,d)
2de00 20 20 20 20 30 0a 20 20 23 64 65 66 69 6e 65 20      0.  #define 
2de10 73 71 6c 69 74 65 33 46 6b 52 65 66 65 72 65 6e  sqlite3FkReferen
2de20 63 65 73 28 61 29 20 20 20 20 20 20 20 20 30 0a  ces(a)        0.
2de30 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53  #endif.#ifndef S
2de40 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49  QLITE_OMIT_FOREI
2de50 47 4e 5f 4b 45 59 0a 20 20 76 6f 69 64 20 73 71  GN_KEY.  void sq
2de60 6c 69 74 65 33 46 6b 44 65 6c 65 74 65 28 73 71  lite3FkDelete(sq
2de70 6c 69 74 65 33 20 2a 2c 20 54 61 62 6c 65 2a 29  lite3 *, Table*)
2de80 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 46  ;.  int sqlite3F
2de90 6b 4c 6f 63 61 74 65 49 6e 64 65 78 28 50 61 72  kLocateIndex(Par
2dea0 73 65 2a 2c 54 61 62 6c 65 2a 2c 46 4b 65 79 2a  se*,Table*,FKey*
2deb0 2c 49 6e 64 65 78 2a 2a 2c 69 6e 74 2a 2a 29 3b  ,Index**,int**);
2dec0 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65  .#else.  #define
2ded0 20 73 71 6c 69 74 65 33 46 6b 44 65 6c 65 74 65   sqlite3FkDelete
2dee0 28 61 2c 62 29 0a 20 20 23 64 65 66 69 6e 65 20  (a,b).  #define 
2def0 73 71 6c 69 74 65 33 46 6b 4c 6f 63 61 74 65 49  sqlite3FkLocateI
2df00 6e 64 65 78 28 61 2c 62 2c 63 2c 64 2c 65 29 0a  ndex(a,b,c,d,e).
2df10 23 65 6e 64 69 66 0a 0a 0a 2f 2a 0a 2a 2a 20 41  #endif.../*.** A
2df20 76 61 69 6c 61 62 6c 65 20 66 61 75 6c 74 20 69  vailable fault i
2df30 6e 6a 65 63 74 6f 72 73 2e 20 20 53 68 6f 75 6c  njectors.  Shoul
2df40 64 20 62 65 20 6e 75 6d 62 65 72 65 64 20 62 65  d be numbered be
2df50 67 69 6e 6e 69 6e 67 20 77 69 74 68 20 30 2e 0a  ginning with 0..
2df60 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
2df70 45 5f 46 41 55 4c 54 49 4e 4a 45 43 54 4f 52 5f  E_FAULTINJECTOR_
2df80 4d 41 4c 4c 4f 43 20 20 20 20 20 30 0a 23 64 65  MALLOC     0.#de
2df90 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 41 55 4c  fine SQLITE_FAUL
2dfa0 54 49 4e 4a 45 43 54 4f 52 5f 43 4f 55 4e 54 20  TINJECTOR_COUNT 
2dfb0 20 20 20 20 20 31 0a 0a 2f 2a 0a 2a 2a 20 54 68       1../*.** Th
2dfc0 65 20 69 6e 74 65 72 66 61 63 65 20 74 6f 20 74  e interface to t
2dfd0 68 65 20 63 6f 64 65 20 69 6e 20 66 61 75 6c 74  he code in fault
2dfe0 2e 63 20 75 73 65 64 20 66 6f 72 20 69 64 65 6e  .c used for iden
2dff0 74 69 66 79 69 6e 67 20 22 62 65 6e 69 67 6e 22  tifying "benign"
2e000 0a 2a 2a 20 6d 61 6c 6c 6f 63 20 66 61 69 6c 75  .** malloc failu
2e010 72 65 73 2e 20 54 68 69 73 20 69 73 20 6f 6e 6c  res. This is onl
2e020 79 20 70 72 65 73 65 6e 74 20 69 66 20 53 51 4c  y present if SQL
2e030 49 54 45 5f 55 4e 54 45 53 54 41 42 4c 45 0a 2a  ITE_UNTESTABLE.*
2e040 2a 20 69 73 20 6e 6f 74 20 64 65 66 69 6e 65 64  * is not defined
2e050 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c  ..*/.#ifndef SQL
2e060 49 54 45 5f 55 4e 54 45 53 54 41 42 4c 45 0a 20  ITE_UNTESTABLE. 
2e070 20 76 6f 69 64 20 73 71 6c 69 74 65 33 42 65 67   void sqlite3Beg
2e080 69 6e 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28 76  inBenignMalloc(v
2e090 6f 69 64 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c  oid);.  void sql
2e0a0 69 74 65 33 45 6e 64 42 65 6e 69 67 6e 4d 61 6c  ite3EndBenignMal
2e0b0 6c 6f 63 28 76 6f 69 64 29 3b 0a 23 65 6c 73 65  loc(void);.#else
2e0c0 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74  .  #define sqlit
2e0d0 65 33 42 65 67 69 6e 42 65 6e 69 67 6e 4d 61 6c  e3BeginBenignMal
2e0e0 6c 6f 63 28 29 0a 20 20 23 64 65 66 69 6e 65 20  loc().  #define 
2e0f0 73 71 6c 69 74 65 33 45 6e 64 42 65 6e 69 67 6e  sqlite3EndBenign
2e100 4d 61 6c 6c 6f 63 28 29 0a 23 65 6e 64 69 66 0a  Malloc().#endif.
2e110 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 72  ./*.** Allowed r
2e120 65 74 75 72 6e 20 76 61 6c 75 65 73 20 66 72 6f  eturn values fro
2e130 6d 20 73 71 6c 69 74 65 33 46 69 6e 64 49 6e 49  m sqlite3FindInI
2e140 6e 64 65 78 28 29 0a 2a 2f 0a 23 64 65 66 69 6e  ndex().*/.#defin
2e150 65 20 49 4e 5f 49 4e 44 45 58 5f 52 4f 57 49 44  e IN_INDEX_ROWID
2e160 20 20 20 20 20 20 20 20 31 20 20 20 2f 2a 20 53          1   /* S
2e170 65 61 72 63 68 20 74 68 65 20 72 6f 77 69 64 20  earch the rowid 
2e180 6f 66 20 74 68 65 20 74 61 62 6c 65 20 2a 2f 0a  of the table */.
2e190 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58  #define IN_INDEX
2e1a0 5f 45 50 48 20 20 20 20 20 20 20 20 20 20 32 20  _EPH          2 
2e1b0 20 20 2f 2a 20 53 65 61 72 63 68 20 61 6e 20 65    /* Search an e
2e1c0 70 68 65 6d 65 72 61 6c 20 62 2d 74 72 65 65 20  phemeral b-tree 
2e1d0 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e  */.#define IN_IN
2e1e0 44 45 58 5f 49 4e 44 45 58 5f 41 53 43 20 20 20  DEX_INDEX_ASC   
2e1f0 20 33 20 20 20 2f 2a 20 45 78 69 73 74 69 6e 67   3   /* Existing
2e200 20 69 6e 64 65 78 20 41 53 43 45 4e 44 49 4e 47   index ASCENDING
2e210 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49   */.#define IN_I
2e220 4e 44 45 58 5f 49 4e 44 45 58 5f 44 45 53 43 20  NDEX_INDEX_DESC 
2e230 20 20 34 20 20 20 2f 2a 20 45 78 69 73 74 69 6e    4   /* Existin
2e240 67 20 69 6e 64 65 78 20 44 45 53 43 45 4e 44 49  g index DESCENDI
2e250 4e 47 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e  NG */.#define IN
2e260 5f 49 4e 44 45 58 5f 4e 4f 4f 50 20 20 20 20 20  _INDEX_NOOP     
2e270 20 20 20 20 35 20 20 20 2f 2a 20 4e 6f 20 74 61      5   /* No ta
2e280 62 6c 65 20 61 76 61 69 6c 61 62 6c 65 2e 20 55  ble available. U
2e290 73 65 20 63 6f 6d 70 61 72 69 73 6f 6e 73 20 2a  se comparisons *
2e2a0 2f 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20  /./*.** Allowed 
2e2b0 66 6c 61 67 73 20 66 6f 72 20 74 68 65 20 33 72  flags for the 3r
2e2c0 64 20 70 61 72 61 6d 65 74 65 72 20 74 6f 20 73  d parameter to s
2e2d0 71 6c 69 74 65 33 46 69 6e 64 49 6e 49 6e 64 65  qlite3FindInInde
2e2e0 78 28 29 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  x()..*/.#define 
2e2f0 49 4e 5f 49 4e 44 45 58 5f 4e 4f 4f 50 5f 4f 4b  IN_INDEX_NOOP_OK
2e300 20 20 20 20 20 30 78 30 30 30 31 20 20 2f 2a 20       0x0001  /* 
2e310 4f 4b 20 74 6f 20 72 65 74 75 72 6e 20 49 4e 5f  OK to return IN_
2e320 49 4e 44 45 58 5f 4e 4f 4f 50 20 2a 2f 0a 23 64  INDEX_NOOP */.#d
2e330 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 4d  efine IN_INDEX_M
2e340 45 4d 42 45 52 53 48 49 50 20 20 30 78 30 30 30  EMBERSHIP  0x000
2e350 32 20 20 2f 2a 20 49 4e 20 6f 70 65 72 61 74 6f  2  /* IN operato
2e360 72 20 75 73 65 64 20 66 6f 72 20 6d 65 6d 62 65  r used for membe
2e370 72 73 68 69 70 20 74 65 73 74 20 2a 2f 0a 23 64  rship test */.#d
2e380 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 4c  efine IN_INDEX_L
2e390 4f 4f 50 20 20 20 20 20 20 20 20 30 78 30 30 30  OOP        0x000
2e3a0 34 20 20 2f 2a 20 49 4e 20 6f 70 65 72 61 74 6f  4  /* IN operato
2e3b0 72 20 75 73 65 64 20 61 73 20 61 20 6c 6f 6f 70  r used as a loop
2e3c0 20 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 46   */.int sqlite3F
2e3d0 69 6e 64 49 6e 49 6e 64 65 78 28 50 61 72 73 65  indInIndex(Parse
2e3e0 20 2a 2c 20 45 78 70 72 20 2a 2c 20 75 33 32 2c   *, Expr *, u32,
2e3f0 20 69 6e 74 2a 2c 20 69 6e 74 2a 29 3b 0a 0a 69   int*, int*);..i
2e400 6e 74 20 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61  nt sqlite3Journa
2e410 6c 4f 70 65 6e 28 73 71 6c 69 74 65 33 5f 76 66  lOpen(sqlite3_vf
2e420 73 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20  s *, const char 
2e430 2a 2c 20 73 71 6c 69 74 65 33 5f 66 69 6c 65 20  *, sqlite3_file 
2e440 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 69 6e  *, int, int);.in
2e450 74 20 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c  t sqlite3Journal
2e460 53 69 7a 65 28 73 71 6c 69 74 65 33 5f 76 66 73  Size(sqlite3_vfs
2e470 20 2a 29 3b 0a 23 69 66 20 64 65 66 69 6e 65 64   *);.#if defined
2e480 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 41  (SQLITE_ENABLE_A
2e490 54 4f 4d 49 43 5f 57 52 49 54 45 29 20 5c 0a 20  TOMIC_WRITE) \. 
2e4a0 7c 7c 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  || defined(SQLIT
2e4b0 45 5f 45 4e 41 42 4c 45 5f 42 41 54 43 48 5f 41  E_ENABLE_BATCH_A
2e4c0 54 4f 4d 49 43 5f 57 52 49 54 45 29 0a 20 20 69  TOMIC_WRITE).  i
2e4d0 6e 74 20 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61  nt sqlite3Journa
2e4e0 6c 43 72 65 61 74 65 28 73 71 6c 69 74 65 33 5f  lCreate(sqlite3_
2e4f0 66 69 6c 65 20 2a 29 3b 0a 23 65 6e 64 69 66 0a  file *);.#endif.
2e500 0a 69 6e 74 20 73 71 6c 69 74 65 33 4a 6f 75 72  .int sqlite3Jour
2e510 6e 61 6c 49 73 49 6e 4d 65 6d 6f 72 79 28 73 71  nalIsInMemory(sq
2e520 6c 69 74 65 33 5f 66 69 6c 65 20 2a 70 29 3b 0a  lite3_file *p);.
2e530 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 65 6d 4a  void sqlite3MemJ
2e540 6f 75 72 6e 61 6c 4f 70 65 6e 28 73 71 6c 69 74  ournalOpen(sqlit
2e550 65 33 5f 66 69 6c 65 20 2a 29 3b 0a 0a 76 6f 69  e3_file *);..voi
2e560 64 20 73 71 6c 69 74 65 33 45 78 70 72 53 65 74  d sqlite3ExprSet
2e570 48 65 69 67 68 74 41 6e 64 46 6c 61 67 73 28 50  HeightAndFlags(P
2e580 61 72 73 65 20 2a 70 50 61 72 73 65 2c 20 45 78  arse *pParse, Ex
2e590 70 72 20 2a 70 29 3b 0a 23 69 66 20 53 51 4c 49  pr *p);.#if SQLI
2e5a0 54 45 5f 4d 41 58 5f 45 58 50 52 5f 44 45 50 54  TE_MAX_EXPR_DEPT
2e5b0 48 3e 30 0a 20 20 69 6e 74 20 73 71 6c 69 74 65  H>0.  int sqlite
2e5c0 33 53 65 6c 65 63 74 45 78 70 72 48 65 69 67 68  3SelectExprHeigh
2e5d0 74 28 53 65 6c 65 63 74 20 2a 29 3b 0a 20 20 69  t(Select *);.  i
2e5e0 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 43 68  nt sqlite3ExprCh
2e5f0 65 63 6b 48 65 69 67 68 74 28 50 61 72 73 65 2a  eckHeight(Parse*
2e600 2c 20 69 6e 74 29 3b 0a 23 65 6c 73 65 0a 20 20  , int);.#else.  
2e610 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53  #define sqlite3S
2e620 65 6c 65 63 74 45 78 70 72 48 65 69 67 68 74 28  electExprHeight(
2e630 78 29 20 30 0a 20 20 23 64 65 66 69 6e 65 20 73  x) 0.  #define s
2e640 71 6c 69 74 65 33 45 78 70 72 43 68 65 63 6b 48  qlite3ExprCheckH
2e650 65 69 67 68 74 28 78 2c 79 29 0a 23 65 6e 64 69  eight(x,y).#endi
2e660 66 0a 0a 75 33 32 20 73 71 6c 69 74 65 33 47 65  f..u32 sqlite3Ge
2e670 74 34 62 79 74 65 28 63 6f 6e 73 74 20 75 38 2a  t4byte(const u8*
2e680 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50  );.void sqlite3P
2e690 75 74 34 62 79 74 65 28 75 38 2a 2c 20 75 33 32  ut4byte(u8*, u32
2e6a0 29 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54  );..#ifdef SQLIT
2e6b0 45 5f 45 4e 41 42 4c 45 5f 55 4e 4c 4f 43 4b 5f  E_ENABLE_UNLOCK_
2e6c0 4e 4f 54 49 46 59 0a 20 20 76 6f 69 64 20 73 71  NOTIFY.  void sq
2e6d0 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 42  lite3ConnectionB
2e6e0 6c 6f 63 6b 65 64 28 73 71 6c 69 74 65 33 20 2a  locked(sqlite3 *
2e6f0 2c 20 73 71 6c 69 74 65 33 20 2a 29 3b 0a 20 20  , sqlite3 *);.  
2e700 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6e 6e  void sqlite3Conn
2e710 65 63 74 69 6f 6e 55 6e 6c 6f 63 6b 65 64 28 73  ectionUnlocked(s
2e720 71 6c 69 74 65 33 20 2a 64 62 29 3b 0a 20 20 76  qlite3 *db);.  v
2e730 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65  oid sqlite3Conne
2e740 63 74 69 6f 6e 43 6c 6f 73 65 64 28 73 71 6c 69  ctionClosed(sqli
2e750 74 65 33 20 2a 64 62 29 3b 0a 23 65 6c 73 65 0a  te3 *db);.#else.
2e760 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65    #define sqlite
2e770 33 43 6f 6e 6e 65 63 74 69 6f 6e 42 6c 6f 63 6b  3ConnectionBlock
2e780 65 64 28 78 2c 79 29 0a 20 20 23 64 65 66 69 6e  ed(x,y).  #defin
2e790 65 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74  e sqlite3Connect
2e7a0 69 6f 6e 55 6e 6c 6f 63 6b 65 64 28 78 29 0a 20  ionUnlocked(x). 
2e7b0 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33   #define sqlite3
2e7c0 43 6f 6e 6e 65 63 74 69 6f 6e 43 6c 6f 73 65 64  ConnectionClosed
2e7d0 28 78 29 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64  (x).#endif..#ifd
2e7e0 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
2e7f0 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 50 61    void sqlite3Pa
2e800 72 73 65 72 54 72 61 63 65 28 46 49 4c 45 2a 2c  rserTrace(FILE*,
2e810 20 63 68 61 72 20 2a 29 3b 0a 23 65 6e 64 69 66   char *);.#endif
2e820 0a 23 69 66 20 64 65 66 69 6e 65 64 28 59 59 43  .#if defined(YYC
2e830 4f 56 45 52 41 47 45 29 0a 20 20 69 6e 74 20 73  OVERAGE).  int s
2e840 71 6c 69 74 65 33 50 61 72 73 65 72 43 6f 76 65  qlite3ParserCove
2e850 72 61 67 65 28 46 49 4c 45 2a 29 3b 0a 23 65 6e  rage(FILE*);.#en
2e860 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 66 20 74 68  dif../*.** If th
2e870 65 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 20  e SQLITE_ENABLE 
2e880 49 4f 54 52 41 43 45 20 65 78 69 73 74 73 20 74  IOTRACE exists t
2e890 68 65 6e 20 74 68 65 20 67 6c 6f 62 61 6c 20 76  hen the global v
2e8a0 61 72 69 61 62 6c 65 0a 2a 2a 20 73 71 6c 69 74  ariable.** sqlit
2e8b0 65 33 49 6f 54 72 61 63 65 20 69 73 20 61 20 70  e3IoTrace is a p
2e8c0 6f 69 6e 74 65 72 20 74 6f 20 61 20 70 72 69 6e  ointer to a prin
2e8d0 74 66 2d 6c 69 6b 65 20 72 6f 75 74 69 6e 65 20  tf-like routine 
2e8e0 75 73 65 64 20 74 6f 0a 2a 2a 20 70 72 69 6e 74  used to.** print
2e8f0 20 49 2f 4f 20 74 72 61 63 69 6e 67 20 6d 65 73   I/O tracing mes
2e900 73 61 67 65 73 2e 0a 2a 2f 0a 23 69 66 64 65 66  sages..*/.#ifdef
2e910 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 49   SQLITE_ENABLE_I
2e920 4f 54 52 41 43 45 0a 23 20 64 65 66 69 6e 65 20  OTRACE.# define 
2e930 49 4f 54 52 41 43 45 28 41 29 20 20 69 66 28 20  IOTRACE(A)  if( 
2e940 73 71 6c 69 74 65 33 49 6f 54 72 61 63 65 20 29  sqlite3IoTrace )
2e950 7b 20 73 71 6c 69 74 65 33 49 6f 54 72 61 63 65  { sqlite3IoTrace
2e960 20 41 3b 20 7d 0a 20 20 76 6f 69 64 20 73 71 6c   A; }.  void sql
2e970 69 74 65 33 56 64 62 65 49 4f 54 72 61 63 65 53  ite3VdbeIOTraceS
2e980 71 6c 28 56 64 62 65 2a 29 3b 0a 53 51 4c 49 54  ql(Vdbe*);.SQLIT
2e990 45 5f 41 50 49 20 53 51 4c 49 54 45 5f 45 58 54  E_API SQLITE_EXT
2e9a0 45 52 4e 20 76 6f 69 64 20 28 53 51 4c 49 54 45  ERN void (SQLITE
2e9b0 5f 43 44 45 43 4c 20 2a 73 71 6c 69 74 65 33 49  _CDECL *sqlite3I
2e9c0 6f 54 72 61 63 65 29 28 63 6f 6e 73 74 20 63 68  oTrace)(const ch
2e9d0 61 72 2a 2c 2e 2e 2e 29 3b 0a 23 65 6c 73 65 0a  ar*,...);.#else.
2e9e0 23 20 64 65 66 69 6e 65 20 49 4f 54 52 41 43 45  # define IOTRACE
2e9f0 28 41 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  (A).# define sql
2ea00 69 74 65 33 56 64 62 65 49 4f 54 72 61 63 65 53  ite3VdbeIOTraceS
2ea10 71 6c 28 58 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a  ql(X).#endif../*
2ea20 0a 2a 2a 20 54 68 65 73 65 20 72 6f 75 74 69 6e  .** These routin
2ea30 65 73 20 61 72 65 20 61 76 61 69 6c 61 62 6c 65  es are available
2ea40 20 66 6f 72 20 74 68 65 20 6d 65 6d 32 2e 63 20   for the mem2.c 
2ea50 64 65 62 75 67 67 69 6e 67 20 6d 65 6d 6f 72 79  debugging memory
2ea60 20 61 6c 6c 6f 63 61 74 6f 72 0a 2a 2a 20 6f 6e   allocator.** on
2ea70 6c 79 2e 20 20 54 68 65 79 20 61 72 65 20 75 73  ly.  They are us
2ea80 65 64 20 74 6f 20 76 65 72 69 66 79 20 74 68 61  ed to verify tha
2ea90 74 20 64 69 66 66 65 72 65 6e 74 20 22 74 79 70  t different "typ
2eaa0 65 73 22 20 6f 66 20 6d 65 6d 6f 72 79 0a 2a 2a  es" of memory.**
2eab0 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 61 72 65   allocations are
2eac0 20 70 72 6f 70 65 72 6c 79 20 74 72 61 63 6b 65   properly tracke
2ead0 64 20 62 79 20 74 68 65 20 73 79 73 74 65 6d 2e  d by the system.
2eae0 0a 2a 2a 0a 2a 2a 20 73 71 6c 69 74 65 33 4d 65  .**.** sqlite3Me
2eaf0 6d 64 65 62 75 67 53 65 74 54 79 70 65 28 29 20  mdebugSetType() 
2eb00 73 65 74 73 20 74 68 65 20 22 74 79 70 65 22 20  sets the "type" 
2eb10 6f 66 20 61 6e 20 61 6c 6c 6f 63 61 74 69 6f 6e  of an allocation
2eb20 20 74 6f 20 6f 6e 65 20 6f 66 0a 2a 2a 20 74 68   to one of.** th
2eb30 65 20 4d 45 4d 54 59 50 45 5f 2a 20 6d 61 63 72  e MEMTYPE_* macr
2eb40 6f 73 20 64 65 66 69 6e 65 64 20 62 65 6c 6f 77  os defined below
2eb50 2e 20 20 54 68 65 20 74 79 70 65 20 6d 75 73 74  .  The type must
2eb60 20 62 65 20 61 20 62 69 74 6d 61 73 6b 20 77 69   be a bitmask wi
2eb70 74 68 0a 2a 2a 20 61 20 73 69 6e 67 6c 65 20 62  th.** a single b
2eb80 69 74 20 73 65 74 2e 0a 2a 2a 0a 2a 2a 20 73 71  it set..**.** sq
2eb90 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 48 61 73  lite3MemdebugHas
2eba0 54 79 70 65 28 29 20 72 65 74 75 72 6e 73 20 74  Type() returns t
2ebb0 72 75 65 20 69 66 20 61 6e 79 20 6f 66 20 74 68  rue if any of th
2ebc0 65 20 62 69 74 73 20 69 6e 20 69 74 73 20 73 65  e bits in its se
2ebd0 63 6f 6e 64 0a 2a 2a 20 61 72 67 75 6d 65 6e 74  cond.** argument
2ebe0 20 6d 61 74 63 68 20 74 68 65 20 74 79 70 65 20   match the type 
2ebf0 73 65 74 20 62 79 20 74 68 65 20 70 72 65 76 69  set by the previ
2ec00 6f 75 73 20 73 71 6c 69 74 65 33 4d 65 6d 64 65  ous sqlite3Memde
2ec10 62 75 67 53 65 74 54 79 70 65 28 29 2e 0a 2a 2a  bugSetType()..**
2ec20 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67   sqlite3Memdebug
2ec30 48 61 73 54 79 70 65 28 29 20 69 73 20 69 6e 74  HasType() is int
2ec40 65 6e 64 65 64 20 66 6f 72 20 75 73 65 20 69 6e  ended for use in
2ec50 73 69 64 65 20 61 73 73 65 72 74 28 29 20 73 74  side assert() st
2ec60 61 74 65 6d 65 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20  atements..**.** 
2ec70 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 4e  sqlite3MemdebugN
2ec80 6f 54 79 70 65 28 29 20 72 65 74 75 72 6e 73 20  oType() returns 
2ec90 74 72 75 65 20 69 66 20 6e 6f 6e 65 20 6f 66 20  true if none of 
2eca0 74 68 65 20 62 69 74 73 20 69 6e 20 69 74 73 20  the bits in its 
2ecb0 73 65 63 6f 6e 64 0a 2a 2a 20 61 72 67 75 6d 65  second.** argume
2ecc0 6e 74 20 6d 61 74 63 68 20 74 68 65 20 74 79 70  nt match the typ
2ecd0 65 20 73 65 74 20 62 79 20 74 68 65 20 70 72 65  e set by the pre
2ece0 76 69 6f 75 73 20 73 71 6c 69 74 65 33 4d 65 6d  vious sqlite3Mem
2ecf0 64 65 62 75 67 53 65 74 54 79 70 65 28 29 2e 0a  debugSetType()..
2ed00 2a 2a 0a 2a 2a 20 50 65 72 68 61 70 73 20 74 68  **.** Perhaps th
2ed10 65 20 6d 6f 73 74 20 69 6d 70 6f 72 74 61 6e 74  e most important
2ed20 20 70 6f 69 6e 74 20 69 73 20 74 68 65 20 64 69   point is the di
2ed30 66 66 65 72 65 6e 63 65 20 62 65 74 77 65 65 6e  fference between
2ed40 20 4d 45 4d 54 59 50 45 5f 48 45 41 50 0a 2a 2a   MEMTYPE_HEAP.**
2ed50 20 61 6e 64 20 4d 45 4d 54 59 50 45 5f 4c 4f 4f   and MEMTYPE_LOO
2ed60 4b 41 53 49 44 45 2e 20 20 49 66 20 61 6e 20 61  KASIDE.  If an a
2ed70 6c 6c 6f 63 61 74 69 6f 6e 20 69 73 20 4d 45 4d  llocation is MEM
2ed80 54 59 50 45 5f 4c 4f 4f 4b 41 53 49 44 45 2c 20  TYPE_LOOKASIDE, 
2ed90 74 68 61 74 20 6d 65 61 6e 73 0a 2a 2a 20 69 74  that means.** it
2eda0 20 6d 69 67 68 74 20 68 61 76 65 20 62 65 65 6e   might have been
2edb0 20 61 6c 6c 6f 63 61 74 65 64 20 62 79 20 6c 6f   allocated by lo
2edc0 6f 6b 61 73 69 64 65 2c 20 65 78 63 65 70 74 20  okaside, except 
2edd0 74 68 65 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 77  the allocation w
2ede0 61 73 0a 2a 2a 20 74 6f 6f 20 6c 61 72 67 65 20  as.** too large 
2edf0 6f 72 20 6c 6f 6f 6b 61 73 69 64 65 20 77 61 73  or lookaside was
2ee00 20 61 6c 72 65 61 64 79 20 66 75 6c 6c 2e 20 20   already full.  
2ee10 49 74 20 69 73 20 69 6d 70 6f 72 74 61 6e 74 20  It is important 
2ee20 74 6f 20 76 65 72 69 66 79 0a 2a 2a 20 74 68 61  to verify.** tha
2ee30 74 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 74 68  t allocations th
2ee40 61 74 20 6d 69 67 68 74 20 68 61 76 65 20 62 65  at might have be
2ee50 65 6e 20 73 61 74 69 73 66 69 65 64 20 62 79 20  en satisfied by 
2ee60 6c 6f 6f 6b 61 73 69 64 65 20 61 72 65 20 6e 6f  lookaside are no
2ee70 74 0a 2a 2a 20 70 61 73 73 65 64 20 62 61 63 6b  t.** passed back
2ee80 20 74 6f 20 6e 6f 6e 2d 6c 6f 6f 6b 61 73 69 64   to non-lookasid
2ee90 65 20 66 72 65 65 28 29 20 72 6f 75 74 69 6e 65  e free() routine
2eea0 73 2e 20 20 41 73 73 65 72 74 73 20 73 75 63 68  s.  Asserts such
2eeb0 20 61 73 20 74 68 65 0a 2a 2a 20 65 78 61 6d 70   as the.** examp
2eec0 6c 65 20 61 62 6f 76 65 20 61 72 65 20 70 6c 61  le above are pla
2eed0 63 65 64 20 6f 6e 20 74 68 65 20 6e 6f 6e 2d 6c  ced on the non-l
2eee0 6f 6f 6b 61 73 69 64 65 20 66 72 65 65 28 29 20  ookaside free() 
2eef0 72 6f 75 74 69 6e 65 73 20 74 6f 20 76 65 72 69  routines to veri
2ef00 66 79 0a 2a 2a 20 74 68 69 73 20 63 6f 6e 73 74  fy.** this const
2ef10 72 61 69 6e 74 2e 0a 2a 2a 0a 2a 2a 20 41 6c 6c  raint..**.** All
2ef20 20 6f 66 20 74 68 69 73 20 69 73 20 6e 6f 2d 6f   of this is no-o
2ef30 70 20 66 6f 72 20 61 20 70 72 6f 64 75 63 74 69  p for a producti
2ef40 6f 6e 20 62 75 69 6c 64 2e 20 20 49 74 20 6f 6e  on build.  It on
2ef50 6c 79 20 63 6f 6d 65 73 20 69 6e 74 6f 0a 2a 2a  ly comes into.**
2ef60 20 70 6c 61 79 20 77 68 65 6e 20 74 68 65 20 53   play when the S
2ef70 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47 20 63  QLITE_MEMDEBUG c
2ef80 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69  ompile-time opti
2ef90 6f 6e 20 69 73 20 75 73 65 64 2e 0a 2a 2f 0a 23  on is used..*/.#
2efa0 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4d 45 4d  ifdef SQLITE_MEM
2efb0 44 45 42 55 47 0a 20 20 76 6f 69 64 20 73 71 6c  DEBUG.  void sql
2efc0 69 74 65 33 4d 65 6d 64 65 62 75 67 53 65 74 54  ite3MemdebugSetT
2efd0 79 70 65 28 76 6f 69 64 2a 2c 75 38 29 3b 0a 20  ype(void*,u8);. 
2efe0 20 69 6e 74 20 73 71 6c 69 74 65 33 4d 65 6d 64   int sqlite3Memd
2eff0 65 62 75 67 48 61 73 54 79 70 65 28 76 6f 69 64  ebugHasType(void
2f000 2a 2c 75 38 29 3b 0a 20 20 69 6e 74 20 73 71 6c  *,u8);.  int sql
2f010 69 74 65 33 4d 65 6d 64 65 62 75 67 4e 6f 54 79  ite3MemdebugNoTy
2f020 70 65 28 76 6f 69 64 2a 2c 75 38 29 3b 0a 23 65  pe(void*,u8);.#e
2f030 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  lse.# define sql
2f040 69 74 65 33 4d 65 6d 64 65 62 75 67 53 65 74 54  ite3MemdebugSetT
2f050 79 70 65 28 58 2c 59 29 20 20 2f 2a 20 6e 6f 2d  ype(X,Y)  /* no-
2f060 6f 70 20 2a 2f 0a 23 20 64 65 66 69 6e 65 20 73  op */.# define 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 58 2c 59 29 20 20 31 0a 23 20  sType(X,Y)  1.# 
2f090 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 4d 65  define sqlite3Me
2f0a0 6d 64 65 62 75 67 4e 6f 54 79 70 65 28 58 2c 59  mdebugNoType(X,Y
2f0b0 29 20 20 20 31 0a 23 65 6e 64 69 66 0a 23 64 65  )   1.#endif.#de
2f0c0 66 69 6e 65 20 4d 45 4d 54 59 50 45 5f 48 45 41  fine MEMTYPE_HEA
2f0d0 50 20 20 20 20 20 20 20 30 78 30 31 20 20 2f 2a  P       0x01  /*
2f0e0 20 47 65 6e 65 72 61 6c 20 68 65 61 70 20 61 6c   General heap al
2f0f0 6c 6f 63 61 74 69 6f 6e 73 20 2a 2f 0a 23 64 65  locations */.#de
2f100 66 69 6e 65 20 4d 45 4d 54 59 50 45 5f 4c 4f 4f  fine MEMTYPE_LOO
2f110 4b 41 53 49 44 45 20 20 30 78 30 32 20 20 2f 2a  KASIDE  0x02  /*
2f120 20 48 65 61 70 20 74 68 61 74 20 6d 69 67 68 74   Heap that might
2f130 20 68 61 76 65 20 62 65 65 6e 20 6c 6f 6f 6b 61   have been looka
2f140 73 69 64 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  side */.#define 
2f150 4d 45 4d 54 59 50 45 5f 50 43 41 43 48 45 20 20  MEMTYPE_PCACHE  
2f160 20 20 20 30 78 30 34 20 20 2f 2a 20 50 61 67 65     0x04  /* Page
2f170 20 63 61 63 68 65 20 61 6c 6c 6f 63 61 74 69 6f   cache allocatio
2f180 6e 73 20 2a 2f 0a 0a 23 69 66 20 28 53 51 4c 49  ns */..#if (SQLI
2f190 54 45 5f 45 4e 41 42 4c 45 5f 41 50 50 4c 45 5f  TE_ENABLE_APPLE_
2f1a0 53 50 49 3e 30 29 20 26 26 20 64 65 66 69 6e 65  SPI>0) && define
2f1b0 64 28 5f 5f 41 50 50 4c 45 5f 5f 29 0a 0a 2f 2a  d(__APPLE__)../*
2f1c0 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20  .** An instance 
2f1d0 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  of the following
2f1e0 20 73 74 72 75 63 74 75 72 65 20 69 73 20 75 73   structure is us
2f1f0 65 64 20 74 6f 20 68 6f 6c 64 20 74 68 65 20 70  ed to hold the p
2f200 72 6f 63 65 73 73 20 49 44 0a 2a 2a 20 61 6e 64  rocess ID.** and
2f210 20 72 65 74 75 72 6e 2d 62 79 2d 72 65 66 65 72   return-by-refer
2f220 65 6e 63 65 20 6c 6f 63 6b 73 74 61 74 65 20 76  ence lockstate v
2f230 61 6c 75 65 2e 20 20 54 68 65 20 53 51 4c 49 54  alue.  The SQLIT
2f240 45 5f 46 43 4e 54 4c 5f 4c 4f 43 4b 53 54 41 54  E_FCNTL_LOCKSTAT
2f250 45 5f 50 49 44 0a 2a 2a 20 72 65 71 75 69 72 65  E_PID.** require
2f260 73 20 74 68 65 20 34 74 68 20 61 72 67 75 6d 65  s the 4th argume
2f270 6e 74 20 74 6f 20 73 71 6c 69 74 65 33 5f 66 69  nt to sqlite3_fi
2f280 6c 65 5f 63 6f 6e 74 72 6f 6c 20 74 6f 20 62 65  le_control to be
2f290 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 6e   a pointer to an
2f2a0 0a 2a 2a 20 69 6e 73 74 61 6e 63 65 20 6f 66 20  .** instance of 
2f2b0 4c 6f 63 6b 73 74 61 74 65 50 49 44 20 69 6e 69  LockstatePID ini
2f2c0 74 69 61 6c 69 7a 65 64 20 77 69 74 68 20 61 20  tialized with a 
2f2d0 4c 6f 63 6b 73 74 61 74 65 50 49 44 2e 70 69 64  LockstatePID.pid
2f2e0 20 76 61 6c 75 65 20 65 71 75 61 6c 0a 2a 2a 20   value equal.** 
2f2f0 74 6f 20 61 20 70 72 6f 63 65 73 73 20 49 44 20  to a process ID 
2f300 74 6f 20 62 65 20 74 65 73 74 65 64 2c 20 6f 72  to be tested, or
2f310 20 74 68 65 20 73 70 65 63 69 61 6c 20 76 61 6c   the special val
2f320 75 65 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 53 54  ue SQLITE_LOCKST
2f330 41 54 45 5f 41 4e 59 50 49 44 0a 2a 2a 20 54 68  ATE_ANYPID.** Th
2f340 65 20 4c 6f 63 6b 73 74 61 74 65 2e 73 74 61 74  e Lockstate.stat
2f350 65 20 76 61 6c 75 65 20 69 73 20 61 6c 77 61 79  e value is alway
2f360 73 20 73 65 74 20 74 6f 20 6f 6e 65 20 6f 66 20  s set to one of 
2f370 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 76 61  the following va
2f380 6c 75 65 73 0a 2a 2a 20 77 68 65 6e 20 73 71 6c  lues.** when sql
2f390 69 74 65 33 5f 66 69 6c 65 5f 63 6f 6e 74 72 6f  ite3_file_contro
2f3a0 6c 20 72 65 74 75 72 6e 73 3a 0a 2a 2a 20 0a 2a  l returns:.** .*
2f3b0 2a 20 20 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 53  *   SQLITE_LOCKS
2f3c0 54 41 54 45 5f 4f 46 46 20 20 20 20 6e 6f 20 61  TATE_OFF    no a
2f3d0 63 74 69 76 65 20 73 71 6c 69 74 65 20 66 69 6c  ctive sqlite fil
2f3e0 65 20 6c 6f 63 6b 73 20 6d 61 74 63 68 20 74 68  e locks match th
2f3f0 65 20 73 70 65 63 69 66 69 65 64 20 70 69 64 0a  e specified pid.
2f400 2a 2a 20 20 20 53 51 4c 49 54 45 5f 4c 4f 43 4b  **   SQLITE_LOCK
2f410 53 54 41 54 45 5f 4f 4e 20 20 20 20 20 61 63 74  STATE_ON     act
2f420 69 76 65 20 73 71 6c 69 74 65 20 66 69 6c 65 20  ive sqlite file 
2f430 6c 6f 63 6b 73 20 6d 61 74 63 68 20 74 68 65 20  locks match the 
2f440 73 70 65 63 69 66 69 65 64 20 70 69 64 0a 2a 2a  specified pid.**
2f450 20 20 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 53 54     SQLITE_LOCKST
2f460 41 54 45 5f 4e 4f 54 41 44 42 20 70 61 74 68 20  ATE_NOTADB path 
2f470 70 6f 69 6e 74 73 20 74 6f 20 61 20 66 69 6c 65  points to a file
2f480 20 74 68 61 74 20 69 73 20 6e 6f 74 20 61 6e 20   that is not an 
2f490 73 71 6c 69 74 65 20 64 62 20 66 69 6c 65 0a 2a  sqlite db file.*
2f4a0 2a 20 20 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 53  *   SQLITE_LOCKS
2f4b0 54 41 54 45 5f 45 52 52 4f 52 20 20 70 61 74 68  TATE_ERROR  path
2f4c0 20 77 61 73 20 6e 6f 74 20 76 61 69 6c 64 20 6f   was not vaild o
2f4d0 72 20 77 61 73 20 75 6e 72 65 61 64 61 62 6c 65  r was unreadable
2f4e0 0a 2a 2f 0a 74 79 70 65 64 65 66 20 73 74 72 75  .*/.typedef stru
2f4f0 63 74 20 4c 6f 63 6b 73 74 61 74 65 50 49 44 20  ct LockstatePID 
2f500 4c 6f 63 6b 73 74 61 74 65 50 49 44 3b 0a 73 74  LockstatePID;.st
2f510 72 75 63 74 20 4c 6f 63 6b 73 74 61 74 65 50 49  ruct LockstatePI
2f520 44 20 7b 0a 20 20 70 69 64 5f 74 20 70 69 64 3b  D {.  pid_t pid;
2f530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f540 20 2f 2a 20 50 72 6f 63 65 73 73 20 49 44 20 74   /* Process ID t
2f550 6f 20 74 65 73 74 20 2a 2f 0a 20 20 69 6e 74 20  o test */.  int 
2f560 73 74 61 74 65 3b 20 20 20 20 20 20 20 20 20 20  state;          
2f570 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 73 74         /* The st
2f580 61 74 65 20 6f 66 20 74 68 65 20 6c 6f 63 6b 20  ate of the lock 
2f590 28 72 65 74 75 72 6e 20 76 61 6c 75 65 29 20 2a  (return value) *
2f5a0 2f 0a 7d 3b 0a 0a 23 65 6e 64 69 66 20 2f 2a 20  /.};..#endif /* 
2f5b0 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 41  (SQLITE_ENABLE_A
2f5c0 50 50 4c 45 5f 53 50 49 3e 30 29 20 26 26 20 64  PPLE_SPI>0) && d
2f5d0 65 66 69 6e 65 64 28 5f 5f 41 50 50 4c 45 5f 5f  efined(__APPLE__
2f5e0 29 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68 72 65  ) */../*.** Thre
2f5f0 61 64 69 6e 67 20 69 6e 74 65 72 66 61 63 65 0a  ading interface.
2f600 2a 2f 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d 41  */.#if SQLITE_MA
2f610 58 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41 44 53  X_WORKER_THREADS
2f620 3e 30 0a 69 6e 74 20 73 71 6c 69 74 65 33 54 68  >0.int sqlite3Th
2f630 72 65 61 64 43 72 65 61 74 65 28 53 51 4c 69 74  readCreate(SQLit
2f640 65 54 68 72 65 61 64 2a 2a 2c 76 6f 69 64 2a 28  eThread**,void*(
2f650 2a 29 28 76 6f 69 64 2a 29 2c 76 6f 69 64 2a 29  *)(void*),void*)
2f660 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 54 68 72  ;.int sqlite3Thr
2f670 65 61 64 4a 6f 69 6e 28 53 51 4c 69 74 65 54 68  eadJoin(SQLiteTh
2f680 72 65 61 64 2a 2c 20 76 6f 69 64 2a 2a 29 3b 0a  read*, void**);.
2f690 23 65 6e 64 69 66 0a 0a 23 69 66 20 64 65 66 69  #endif..#if defi
2f6a0 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c  ned(SQLITE_ENABL
2f6b0 45 5f 44 42 50 41 47 45 5f 56 54 41 42 29 20 7c  E_DBPAGE_VTAB) |
2f6c0 7c 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  | defined(SQLITE
2f6d0 5f 54 45 53 54 29 0a 69 6e 74 20 73 71 6c 69 74  _TEST).int sqlit
2f6e0 65 33 44 62 70 61 67 65 52 65 67 69 73 74 65 72  e3DbpageRegister
2f6f0 28 73 71 6c 69 74 65 33 2a 29 3b 0a 23 65 6e 64  (sqlite3*);.#end
2f700 69 66 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53  if.#if defined(S
2f710 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 44 42 53  QLITE_ENABLE_DBS
2f720 54 41 54 5f 56 54 41 42 29 20 7c 7c 20 64 65 66  TAT_VTAB) || def
2f730 69 6e 65 64 28 53 51 4c 49 54 45 5f 54 45 53 54  ined(SQLITE_TEST
2f740 29 0a 69 6e 74 20 73 71 6c 69 74 65 33 44 62 73  ).int sqlite3Dbs
2f750 74 61 74 52 65 67 69 73 74 65 72 28 73 71 6c 69  tatRegister(sqli
2f760 74 65 33 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 69  te3*);.#endif..i
2f770 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 56 65  nt sqlite3ExprVe
2f780 63 74 6f 72 53 69 7a 65 28 45 78 70 72 20 2a 70  ctorSize(Expr *p
2f790 45 78 70 72 29 3b 0a 69 6e 74 20 73 71 6c 69 74  Expr);.int sqlit
2f7a0 65 33 45 78 70 72 49 73 56 65 63 74 6f 72 28 45  e3ExprIsVector(E
2f7b0 78 70 72 20 2a 70 45 78 70 72 29 3b 0a 45 78 70  xpr *pExpr);.Exp
2f7c0 72 20 2a 73 71 6c 69 74 65 33 56 65 63 74 6f 72  r *sqlite3Vector
2f7d0 46 69 65 6c 64 53 75 62 65 78 70 72 28 45 78 70  FieldSubexpr(Exp
2f7e0 72 2a 2c 20 69 6e 74 29 3b 0a 45 78 70 72 20 2a  r*, int);.Expr *
2f7f0 73 71 6c 69 74 65 33 45 78 70 72 46 6f 72 56 65  sqlite3ExprForVe
2f800 63 74 6f 72 46 69 65 6c 64 28 50 61 72 73 65 2a  ctorField(Parse*
2f810 2c 45 78 70 72 2a 2c 69 6e 74 29 3b 0a 76 6f 69  ,Expr*,int);.voi
2f820 64 20 73 71 6c 69 74 65 33 56 65 63 74 6f 72 45  d sqlite3VectorE
2f830 72 72 6f 72 4d 73 67 28 50 61 72 73 65 2a 2c 20  rrorMsg(Parse*, 
2f840 45 78 70 72 2a 29 3b 0a 0a 23 69 66 6e 64 65 66  Expr*);..#ifndef
2f850 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 4f 4d   SQLITE_OMIT_COM
2f860 50 49 4c 45 4f 50 54 49 4f 4e 5f 44 49 41 47 53  PILEOPTION_DIAGS
2f870 0a 63 6f 6e 73 74 20 63 68 61 72 20 2a 2a 73 71  .const char **sq
2f880 6c 69 74 65 33 43 6f 6d 70 69 6c 65 4f 70 74 69  lite3CompileOpti
2f890 6f 6e 73 28 69 6e 74 20 2a 70 6e 4f 70 74 29 3b  ons(int *pnOpt);
2f8a0 0a 23 65 6e 64 69 66 0a 0a 23 65 6e 64 69 66 20  .#endif..#endif 
2f8b0 2f 2a 20 53 51 4c 49 54 45 49 4e 54 5f 48 20 2a  /* SQLITEINT_H *
2f8c0 2f 0a                                            /.