/ Hex Artifact Content
Login

Artifact 9286c237c240e578eac0dac23d7a4cd030c8eb5ecb6d549ae211b288382c22fd:


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 48 41 56 45 5f 53 54 44 49 4e 54 5f 48  ed(HAVE_STDINT_H
1f20: 29 20 20 20 2f 2a 20 55 73 65 20 74 68 69 73 20  )   /* Use this 
1f30: 63 61 73 65 20 69 66 20 77 65 20 68 61 76 65 20  case if we have 
1f40: 41 4e 53 49 20 68 65 61 64 65 72 73 20 2a 2f 0a  ANSI headers */.
1f50: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
1f60: 49 4e 54 5f 54 4f 5f 50 54 52 28 58 29 20 20 28  INT_TO_PTR(X)  (
1f70: 28 76 6f 69 64 2a 29 28 69 6e 74 70 74 72 5f 74  (void*)(intptr_t
1f80: 29 28 58 29 29 0a 23 20 64 65 66 69 6e 65 20 53  )(X)).# define S
1f90: 51 4c 49 54 45 5f 50 54 52 5f 54 4f 5f 49 4e 54  QLITE_PTR_TO_INT
1fa0: 28 58 29 20 20 28 28 69 6e 74 29 28 69 6e 74 70  (X)  ((int)(intp
1fb0: 74 72 5f 74 29 28 58 29 29 0a 23 65 6c 69 66 20  tr_t)(X)).#elif 
1fc0: 64 65 66 69 6e 65 64 28 5f 5f 50 54 52 44 49 46  defined(__PTRDIF
1fd0: 46 5f 54 59 50 45 5f 5f 29 20 20 2f 2a 20 54 68  F_TYPE__)  /* Th
1fe0: 69 73 20 63 61 73 65 20 73 68 6f 75 6c 64 20 77  is case should w
1ff0: 6f 72 6b 20 66 6f 72 20 47 43 43 20 2a 2f 0a 23  ork for GCC */.#
2000: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49   define SQLITE_I
2010: 4e 54 5f 54 4f 5f 50 54 52 28 58 29 20 20 28 28  NT_TO_PTR(X)  ((
2020: 76 6f 69 64 2a 29 28 5f 5f 50 54 52 44 49 46 46  void*)(__PTRDIFF
2030: 5f 54 59 50 45 5f 5f 29 28 58 29 29 0a 23 20 64  _TYPE__)(X)).# d
2040: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 54 52  efine SQLITE_PTR
2050: 5f 54 4f 5f 49 4e 54 28 58 29 20 20 28 28 69 6e  _TO_INT(X)  ((in
2060: 74 29 28 5f 5f 50 54 52 44 49 46 46 5f 54 59 50  t)(__PTRDIFF_TYP
2070: 45 5f 5f 29 28 58 29 29 0a 23 65 6c 69 66 20 21  E__)(X)).#elif !
2080: 64 65 66 69 6e 65 64 28 5f 5f 47 4e 55 43 5f 5f  defined(__GNUC__
2090: 29 20 20 20 20 20 20 20 2f 2a 20 57 6f 72 6b 73  )       /* Works
20a0: 20 66 6f 72 20 63 6f 6d 70 69 6c 65 72 73 20 6f   for compilers o
20b0: 74 68 65 72 20 74 68 61 6e 20 4c 4c 56 4d 20 2a  ther than LLVM *
20c0: 2f 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  /.# define SQLIT
20d0: 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 58 29 20  E_INT_TO_PTR(X) 
20e0: 20 28 28 76 6f 69 64 2a 29 26 28 28 63 68 61 72   ((void*)&((char
20f0: 2a 29 30 29 5b 58 5d 29 0a 23 20 64 65 66 69 6e  *)0)[X]).# defin
2100: 65 20 53 51 4c 49 54 45 5f 50 54 52 5f 54 4f 5f  e SQLITE_PTR_TO_
2110: 49 4e 54 28 58 29 20 20 28 28 69 6e 74 29 28 28  INT(X)  ((int)((
2120: 28 63 68 61 72 2a 29 58 29 2d 28 63 68 61 72 2a  (char*)X)-(char*
2130: 29 30 29 29 0a 23 65 6c 73 65 20 20 20 20 20 20  )0)).#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 20 20 20 7c  fined(__x86)   |
6950: 7c 20 20 20 20 5c 0a 20 20 20 20 20 20 28 64 65  |    \.      (de
6960: 66 69 6e 65 64 28 5f 5f 54 4f 53 5f 41 49 58 5f  fined(__TOS_AIX_
6970: 5f 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 5f  _) && !defined(_
6980: 5f 36 34 42 49 54 5f 5f 29 29 0a 23 20 20 20 64  _64BIT__)).#   d
6990: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 54 52  efine SQLITE_PTR
69a0: 53 49 5a 45 20 34 0a 23 20 65 6c 73 65 0a 23 20  SIZE 4.# else.# 
69b0: 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f    define SQLITE_
69c0: 50 54 52 53 49 5a 45 20 38 0a 23 20 65 6e 64 69  PTRSIZE 8.# endi
69d0: 66 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 54 68 65  f.#endif../* The
69e0: 20 75 70 74 72 20 74 79 70 65 20 69 73 20 61 6e   uptr type is an
69f0: 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 65 67 65   unsigned intege
6a00: 72 20 6c 61 72 67 65 20 65 6e 6f 75 67 68 20 74  r large enough t
6a10: 6f 20 68 6f 6c 64 20 61 20 70 6f 69 6e 74 65 72  o hold a pointer
6a20: 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28  .*/.#if defined(
6a30: 48 41 56 45 5f 53 54 44 49 4e 54 5f 48 29 0a 20  HAVE_STDINT_H). 
6a40: 20 74 79 70 65 64 65 66 20 75 69 6e 74 70 74 72   typedef uintptr
6a50: 5f 74 20 75 70 74 72 3b 0a 23 65 6c 69 66 20 53  _t uptr;.#elif S
6a60: 51 4c 49 54 45 5f 50 54 52 53 49 5a 45 3d 3d 34  QLITE_PTRSIZE==4
6a70: 0a 20 20 74 79 70 65 64 65 66 20 75 33 32 20 75  .  typedef u32 u
6a80: 70 74 72 3b 0a 23 65 6c 73 65 0a 20 20 74 79 70  ptr;.#else.  typ
6a90: 65 64 65 66 20 75 36 34 20 75 70 74 72 3b 0a 23  edef u64 uptr;.#
6aa0: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  endif../*.** The
6ab0: 20 53 51 4c 49 54 45 5f 57 49 54 48 49 4e 28 50   SQLITE_WITHIN(P
6ac0: 2c 53 2c 45 29 20 6d 61 63 72 6f 20 63 68 65 63  ,S,E) macro chec
6ad0: 6b 73 20 74 6f 20 73 65 65 20 69 66 20 70 6f 69  ks to see if poi
6ae0: 6e 74 65 72 20 50 20 70 6f 69 6e 74 73 20 74 6f  nter P points to
6af0: 0a 2a 2a 20 73 6f 6d 65 74 68 69 6e 67 20 62 65  .** something be
6b00: 74 77 65 65 6e 20 53 20 28 69 6e 63 6c 75 73 69  tween S (inclusi
6b10: 76 65 29 20 61 6e 64 20 45 20 28 65 78 63 6c 75  ve) and E (exclu
6b20: 73 69 76 65 29 2e 0a 2a 2a 0a 2a 2a 20 49 6e 20  sive)..**.** In 
6b30: 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 53 20 69  other words, S i
6b40: 73 20 61 20 62 75 66 66 65 72 20 61 6e 64 20 45  s a buffer and E
6b50: 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f   is a pointer to
6b60: 20 74 68 65 20 66 69 72 73 74 20 62 79 74 65 20   the first byte 
6b70: 61 66 74 65 72 0a 2a 2a 20 74 68 65 20 65 6e 64  after.** the end
6b80: 20 6f 66 20 62 75 66 66 65 72 20 53 2e 20 20 54   of buffer S.  T
6b90: 68 69 73 20 6d 61 63 72 6f 20 72 65 74 75 72 6e  his macro return
6ba0: 73 20 74 72 75 65 20 69 66 20 50 20 70 6f 69 6e  s true if P poin
6bb0: 74 73 20 74 6f 20 73 6f 6d 65 74 68 69 6e 67 0a  ts to something.
6bc0: 2a 2a 20 63 6f 6e 74 61 69 6e 65 64 20 77 69 74  ** contained wit
6bd0: 68 69 6e 20 74 68 65 20 62 75 66 66 65 72 20 53  hin the buffer S
6be0: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  ..*/.#define SQL
6bf0: 49 54 45 5f 57 49 54 48 49 4e 28 50 2c 53 2c 45  ITE_WITHIN(P,S,E
6c00: 29 20 28 28 28 75 70 74 72 29 28 50 29 3e 3d 28  ) (((uptr)(P)>=(
6c10: 75 70 74 72 29 28 53 29 29 26 26 28 28 75 70 74  uptr)(S))&&((upt
6c20: 72 29 28 50 29 3c 28 75 70 74 72 29 28 45 29 29  r)(P)<(uptr)(E))
6c30: 29 0a 0a 0a 2f 2a 0a 2a 2a 20 4d 61 63 72 6f 73  ).../*.** Macros
6c40: 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 77 68   to determine wh
6c50: 65 74 68 65 72 20 74 68 65 20 6d 61 63 68 69 6e  ether the machin
6c60: 65 20 69 73 20 62 69 67 20 6f 72 20 6c 69 74 74  e is big or litt
6c70: 6c 65 20 65 6e 64 69 61 6e 2c 0a 2a 2a 20 61 6e  le endian,.** an
6c80: 64 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74  d whether or not
6c90: 20 74 68 61 74 20 64 65 74 65 72 6d 69 6e 61 74   that determinat
6ca0: 69 6f 6e 20 69 73 20 72 75 6e 2d 74 69 6d 65 20  ion is run-time 
6cb0: 6f 72 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 2e  or compile-time.
6cc0: 0a 2a 2a 0a 2a 2a 20 46 6f 72 20 62 65 73 74 20  .**.** For best 
6cd0: 70 65 72 66 6f 72 6d 61 6e 63 65 2c 20 61 6e 20  performance, an 
6ce0: 61 74 74 65 6d 70 74 20 69 73 20 6d 61 64 65 20  attempt is made 
6cf0: 74 6f 20 67 75 65 73 73 20 61 74 20 74 68 65 20  to guess at the 
6d00: 62 79 74 65 2d 6f 72 64 65 72 0a 2a 2a 20 75 73  byte-order.** us
6d10: 69 6e 67 20 43 2d 70 72 65 70 72 6f 63 65 73 73  ing C-preprocess
6d20: 6f 72 20 6d 61 63 72 6f 73 2e 20 20 49 66 20 74  or macros.  If t
6d30: 68 61 74 20 69 73 20 75 6e 73 75 63 63 65 73 73  hat is unsuccess
6d40: 66 75 6c 2c 20 6f 72 20 69 66 0a 2a 2a 20 2d 44  ful, or if.** -D
6d50: 53 51 4c 49 54 45 5f 42 59 54 45 4f 52 44 45 52  SQLITE_BYTEORDER
6d60: 3d 30 20 69 73 20 73 65 74 2c 20 74 68 65 6e 20  =0 is set, then 
6d70: 62 79 74 65 2d 6f 72 64 65 72 20 69 73 20 64 65  byte-order is de
6d80: 74 65 72 6d 69 6e 65 64 0a 2a 2a 20 61 74 20 72  termined.** at r
6d90: 75 6e 2d 74 69 6d 65 2e 0a 2a 2f 0a 23 69 66 6e  un-time..*/.#ifn
6da0: 64 65 66 20 53 51 4c 49 54 45 5f 42 59 54 45 4f  def SQLITE_BYTEO
6db0: 52 44 45 52 0a 23 20 69 66 20 64 65 66 69 6e 65  RDER.# if define
6dc0: 64 28 69 33 38 36 29 20 20 20 20 20 20 7c 7c 20  d(i386)      || 
6dd0: 64 65 66 69 6e 65 64 28 5f 5f 69 33 38 36 5f 5f  defined(__i386__
6de0: 29 20 20 20 20 20 20 7c 7c 20 64 65 66 69 6e 65  )      || define
6df0: 64 28 5f 4d 5f 49 58 38 36 29 20 7c 7c 20 20 20  d(_M_IX86) ||   
6e00: 20 5c 0a 20 20 20 20 20 64 65 66 69 6e 65 64 28   \.     defined(
6e10: 5f 5f 78 38 36 5f 36 34 29 20 20 7c 7c 20 64 65  __x86_64)  || de
6e20: 66 69 6e 65 64 28 5f 5f 78 38 36 5f 36 34 5f 5f  fined(__x86_64__
6e30: 29 20 20 20 20 7c 7c 20 64 65 66 69 6e 65 64 28  )    || defined(
6e40: 5f 4d 5f 58 36 34 29 20 20 7c 7c 20 20 20 20 5c  _M_X64)  ||    \
6e50: 0a 20 20 20 20 20 64 65 66 69 6e 65 64 28 5f 4d  .     defined(_M
6e60: 5f 41 4d 44 36 34 29 20 20 7c 7c 20 64 65 66 69  _AMD64)  || defi
6e70: 6e 65 64 28 5f 4d 5f 41 52 4d 29 20 20 20 20 20  ned(_M_ARM)     
6e80: 20 20 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f     || defined(__
6e90: 78 38 36 29 20 20 20 7c 7c 20 20 20 20 5c 0a 20  x86)   ||    \. 
6ea0: 20 20 20 20 64 65 66 69 6e 65 64 28 5f 5f 41 52      defined(__AR
6eb0: 4d 45 4c 5f 5f 29 20 7c 7c 20 64 65 66 69 6e 65  MEL__) || define
6ec0: 64 28 5f 5f 41 41 52 43 48 36 34 45 4c 5f 5f 29  d(__AARCH64EL__)
6ed0: 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 4d 5f 41   || defined(_M_A
6ee0: 52 4d 36 34 29 0a 23 20 20 20 64 65 66 69 6e 65  RM64).#   define
6ef0: 20 53 51 4c 49 54 45 5f 42 59 54 45 4f 52 44 45   SQLITE_BYTEORDE
6f00: 52 20 20 20 20 31 32 33 34 0a 23 20 65 6c 69 66  R    1234.# elif
6f10: 20 64 65 66 69 6e 65 64 28 73 70 61 72 63 29 20   defined(sparc) 
6f20: 20 20 20 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f      || defined(_
6f30: 5f 70 70 63 5f 5f 29 20 7c 7c 20 5c 0a 20 20 20  _ppc__) || \.   
6f40: 20 20 20 20 64 65 66 69 6e 65 64 28 5f 5f 41 52      defined(__AR
6f50: 4d 45 42 5f 5f 29 20 7c 7c 20 64 65 66 69 6e 65  MEB__) || define
6f60: 64 28 5f 5f 41 41 52 43 48 36 34 45 42 5f 5f 29  d(__AARCH64EB__)
6f70: 0a 23 20 20 20 64 65 66 69 6e 65 20 53 51 4c 49  .#   define SQLI
6f80: 54 45 5f 42 59 54 45 4f 52 44 45 52 20 20 20 20  TE_BYTEORDER    
6f90: 34 33 32 31 0a 23 20 65 6c 73 65 0a 23 20 20 20  4321.# else.#   
6fa0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 42 59  define SQLITE_BY
6fb0: 54 45 4f 52 44 45 52 20 30 0a 23 20 65 6e 64 69  TEORDER 0.# endi
6fc0: 66 0a 23 65 6e 64 69 66 0a 23 69 66 20 53 51 4c  f.#endif.#if SQL
6fd0: 49 54 45 5f 42 59 54 45 4f 52 44 45 52 3d 3d 34  ITE_BYTEORDER==4
6fe0: 33 32 31 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  321.# define SQL
6ff0: 49 54 45 5f 42 49 47 45 4e 44 49 41 4e 20 20 20  ITE_BIGENDIAN   
7000: 20 31 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49   1.# define SQLI
7010: 54 45 5f 4c 49 54 54 4c 45 45 4e 44 49 41 4e 20  TE_LITTLEENDIAN 
7020: 30 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  0.# define SQLIT
7030: 45 5f 55 54 46 31 36 4e 41 54 49 56 45 20 20 53  E_UTF16NATIVE  S
7040: 51 4c 49 54 45 5f 55 54 46 31 36 42 45 0a 23 65  QLITE_UTF16BE.#e
7050: 6c 69 66 20 53 51 4c 49 54 45 5f 42 59 54 45 4f  lif SQLITE_BYTEO
7060: 52 44 45 52 3d 3d 31 32 33 34 0a 23 20 64 65 66  RDER==1234.# def
7070: 69 6e 65 20 53 51 4c 49 54 45 5f 42 49 47 45 4e  ine SQLITE_BIGEN
7080: 44 49 41 4e 20 20 20 20 30 0a 23 20 64 65 66 69  DIAN    0.# defi
7090: 6e 65 20 53 51 4c 49 54 45 5f 4c 49 54 54 4c 45  ne SQLITE_LITTLE
70a0: 45 4e 44 49 41 4e 20 31 0a 23 20 64 65 66 69 6e  ENDIAN 1.# defin
70b0: 65 20 53 51 4c 49 54 45 5f 55 54 46 31 36 4e 41  e SQLITE_UTF16NA
70c0: 54 49 56 45 20 20 53 51 4c 49 54 45 5f 55 54 46  TIVE  SQLITE_UTF
70d0: 31 36 4c 45 0a 23 65 6c 73 65 0a 23 20 69 66 64  16LE.#else.# ifd
70e0: 65 66 20 53 51 4c 49 54 45 5f 41 4d 41 4c 47 41  ef SQLITE_AMALGA
70f0: 4d 41 54 49 4f 4e 0a 20 20 63 6f 6e 73 74 20 69  MATION.  const i
7100: 6e 74 20 73 71 6c 69 74 65 33 6f 6e 65 20 3d 20  nt sqlite3one = 
7110: 31 3b 0a 23 20 65 6c 73 65 0a 20 20 65 78 74 65  1;.# else.  exte
7120: 72 6e 20 63 6f 6e 73 74 20 69 6e 74 20 73 71 6c  rn const int sql
7130: 69 74 65 33 6f 6e 65 3b 0a 23 20 65 6e 64 69 66  ite3one;.# endif
7140: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
7150: 5f 42 49 47 45 4e 44 49 41 4e 20 20 20 20 28 2a  _BIGENDIAN    (*
7160: 28 63 68 61 72 20 2a 29 28 26 73 71 6c 69 74 65  (char *)(&sqlite
7170: 33 6f 6e 65 29 3d 3d 30 29 0a 23 20 64 65 66 69  3one)==0).# defi
7180: 6e 65 20 53 51 4c 49 54 45 5f 4c 49 54 54 4c 45  ne SQLITE_LITTLE
7190: 45 4e 44 49 41 4e 20 28 2a 28 63 68 61 72 20 2a  ENDIAN (*(char *
71a0: 29 28 26 73 71 6c 69 74 65 33 6f 6e 65 29 3d 3d  )(&sqlite3one)==
71b0: 31 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  1).# define SQLI
71c0: 54 45 5f 55 54 46 31 36 4e 41 54 49 56 45 20 20  TE_UTF16NATIVE  
71d0: 28 53 51 4c 49 54 45 5f 42 49 47 45 4e 44 49 41  (SQLITE_BIGENDIA
71e0: 4e 3f 53 51 4c 49 54 45 5f 55 54 46 31 36 42 45  N?SQLITE_UTF16BE
71f0: 3a 53 51 4c 49 54 45 5f 55 54 46 31 36 4c 45 29  :SQLITE_UTF16LE)
7200: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 43  .#endif../*.** C
7210: 6f 6e 73 74 61 6e 74 73 20 66 6f 72 20 74 68 65  onstants for the
7220: 20 6c 61 72 67 65 73 74 20 61 6e 64 20 73 6d 61   largest and sma
7230: 6c 6c 65 73 74 20 70 6f 73 73 69 62 6c 65 20 36  llest possible 6
7240: 34 2d 62 69 74 20 73 69 67 6e 65 64 20 69 6e 74  4-bit signed int
7250: 65 67 65 72 73 2e 0a 2a 2a 20 54 68 65 73 65 20  egers..** These 
7260: 6d 61 63 72 6f 73 20 61 72 65 20 64 65 73 69 67  macros are desig
7270: 6e 65 64 20 74 6f 20 77 6f 72 6b 20 63 6f 72 72  ned to work corr
7280: 65 63 74 6c 79 20 6f 6e 20 62 6f 74 68 20 33 32  ectly on both 32
7290: 2d 62 69 74 20 61 6e 64 20 36 34 2d 62 69 74 0a  -bit and 64-bit.
72a0: 2a 2a 20 63 6f 6d 70 69 6c 65 72 73 2e 0a 2a 2f  ** compilers..*/
72b0: 0a 23 64 65 66 69 6e 65 20 4c 41 52 47 45 53 54  .#define LARGEST
72c0: 5f 49 4e 54 36 34 20 20 28 30 78 66 66 66 66 66  _INT64  (0xfffff
72d0: 66 66 66 7c 28 28 28 69 36 34 29 30 78 37 66 66  fff|(((i64)0x7ff
72e0: 66 66 66 66 66 29 3c 3c 33 32 29 29 0a 23 64 65  fffff)<<32)).#de
72f0: 66 69 6e 65 20 53 4d 41 4c 4c 45 53 54 5f 49 4e  fine SMALLEST_IN
7300: 54 36 34 20 28 28 28 69 36 34 29 2d 31 29 20 2d  T64 (((i64)-1) -
7310: 20 4c 41 52 47 45 53 54 5f 49 4e 54 36 34 29 0a   LARGEST_INT64).
7320: 0a 2f 2a 0a 2a 2a 20 52 6f 75 6e 64 20 75 70 20  ./*.** Round up 
7330: 61 20 6e 75 6d 62 65 72 20 74 6f 20 74 68 65 20  a number to the 
7340: 6e 65 78 74 20 6c 61 72 67 65 72 20 6d 75 6c 74  next larger mult
7350: 69 70 6c 65 20 6f 66 20 38 2e 20 20 54 68 69 73  iple of 8.  This
7360: 20 69 73 20 75 73 65 64 0a 2a 2a 20 74 6f 20 66   is used.** to f
7370: 6f 72 63 65 20 38 2d 62 79 74 65 20 61 6c 69 67  orce 8-byte alig
7380: 6e 6d 65 6e 74 20 6f 6e 20 36 34 2d 62 69 74 20  nment on 64-bit 
7390: 61 72 63 68 69 74 65 63 74 75 72 65 73 2e 0a 2a  architectures..*
73a0: 2f 0a 23 64 65 66 69 6e 65 20 52 4f 55 4e 44 38  /.#define ROUND8
73b0: 28 78 29 20 20 20 20 20 28 28 28 78 29 2b 37 29  (x)     (((x)+7)
73c0: 26 7e 37 29 0a 0a 2f 2a 0a 2a 2a 20 52 6f 75 6e  &~7)../*.** Roun
73d0: 64 20 64 6f 77 6e 20 74 6f 20 74 68 65 20 6e 65  d down to the ne
73e0: 61 72 65 73 74 20 6d 75 6c 74 69 70 6c 65 20 6f  arest multiple o
73f0: 66 20 38 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 52  f 8.*/.#define R
7400: 4f 55 4e 44 44 4f 57 4e 38 28 78 29 20 28 28 78  OUNDDOWN8(x) ((x
7410: 29 26 7e 37 29 0a 0a 2f 2a 0a 2a 2a 20 41 73 73  )&~7)../*.** Ass
7420: 65 72 74 20 74 68 61 74 20 74 68 65 20 70 6f 69  ert that the poi
7430: 6e 74 65 72 20 58 20 69 73 20 61 6c 69 67 6e 65  nter X is aligne
7440: 64 20 74 6f 20 61 6e 20 38 2d 62 79 74 65 20 62  d to an 8-byte b
7450: 6f 75 6e 64 61 72 79 2e 20 20 54 68 69 73 0a 2a  oundary.  This.*
7460: 2a 20 6d 61 63 72 6f 20 69 73 20 75 73 65 64 20  * macro is used 
7470: 6f 6e 6c 79 20 77 69 74 68 69 6e 20 61 73 73 65  only within asse
7480: 72 74 28 29 20 74 6f 20 76 65 72 69 66 79 20 74  rt() to verify t
7490: 68 61 74 20 74 68 65 20 63 6f 64 65 20 67 65 74  hat the code get
74a0: 73 0a 2a 2a 20 61 6c 6c 20 61 6c 69 67 6e 6d 65  s.** all alignme
74b0: 6e 74 20 72 65 73 74 72 69 63 74 69 6f 6e 73 20  nt restrictions 
74c0: 63 6f 72 72 65 63 74 2e 0a 2a 2a 0a 2a 2a 20 45  correct..**.** E
74d0: 78 63 65 70 74 2c 20 69 66 20 53 51 4c 49 54 45  xcept, if SQLITE
74e0: 5f 34 5f 42 59 54 45 5f 41 4c 49 47 4e 45 44 5f  _4_BYTE_ALIGNED_
74f0: 4d 41 4c 4c 4f 43 20 69 73 20 64 65 66 69 6e 65  MALLOC is define
7500: 64 2c 20 74 68 65 6e 20 74 68 65 0a 2a 2a 20 75  d, then the.** u
7510: 6e 64 65 72 6c 79 69 6e 67 20 6d 61 6c 6c 6f 63  nderlying malloc
7520: 28 29 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  () implementatio
7530: 6e 20 6d 69 67 68 74 20 72 65 74 75 72 6e 20 75  n might return u
7540: 73 20 34 2d 62 79 74 65 20 61 6c 69 67 6e 65 64  s 4-byte aligned
7550: 0a 2a 2a 20 70 6f 69 6e 74 65 72 73 2e 20 20 49  .** pointers.  I
7560: 6e 20 74 68 61 74 20 63 61 73 65 2c 20 6f 6e 6c  n that case, onl
7570: 79 20 76 65 72 69 66 79 20 34 2d 62 79 74 65 20  y verify 4-byte 
7580: 61 6c 69 67 6e 6d 65 6e 74 2e 0a 2a 2f 0a 23 69  alignment..*/.#i
7590: 66 64 65 66 20 53 51 4c 49 54 45 5f 34 5f 42 59  fdef SQLITE_4_BY
75a0: 54 45 5f 41 4c 49 47 4e 45 44 5f 4d 41 4c 4c 4f  TE_ALIGNED_MALLO
75b0: 43 0a 23 20 64 65 66 69 6e 65 20 45 49 47 48 54  C.# define EIGHT
75c0: 5f 42 59 54 45 5f 41 4c 49 47 4e 4d 45 4e 54 28  _BYTE_ALIGNMENT(
75d0: 58 29 20 20 20 28 28 28 28 63 68 61 72 2a 29 28  X)   ((((char*)(
75e0: 58 29 20 2d 20 28 63 68 61 72 2a 29 30 29 26 33  X) - (char*)0)&3
75f0: 29 3d 3d 30 29 0a 23 65 6c 73 65 0a 23 20 64 65  )==0).#else.# de
7600: 66 69 6e 65 20 45 49 47 48 54 5f 42 59 54 45 5f  fine EIGHT_BYTE_
7610: 41 4c 49 47 4e 4d 45 4e 54 28 58 29 20 20 20 28  ALIGNMENT(X)   (
7620: 28 28 28 63 68 61 72 2a 29 28 58 29 20 2d 20 28  (((char*)(X) - (
7630: 63 68 61 72 2a 29 30 29 26 37 29 3d 3d 30 29 0a  char*)0)&7)==0).
7640: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 44 69  #endif../*.** Di
7650: 73 61 62 6c 65 20 4d 4d 41 50 20 6f 6e 20 70 6c  sable MMAP on pl
7660: 61 74 66 6f 72 6d 73 20 77 68 65 72 65 20 69 74  atforms where it
7670: 20 69 73 20 6b 6e 6f 77 6e 20 74 6f 20 6e 6f 74   is known to not
7680: 20 77 6f 72 6b 0a 2a 2f 0a 23 69 66 20 64 65 66   work.*/.#if def
7690: 69 6e 65 64 28 5f 5f 4f 70 65 6e 42 53 44 5f 5f  ined(__OpenBSD__
76a0: 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 51  ) || defined(__Q
76b0: 4e 58 4e 54 4f 5f 5f 29 0a 23 20 75 6e 64 65 66  NXNTO__).# undef
76c0: 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50   SQLITE_MAX_MMAP
76d0: 5f 53 49 5a 45 0a 23 20 64 65 66 69 6e 65 20 53  _SIZE.# define S
76e0: 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53  QLITE_MAX_MMAP_S
76f0: 49 5a 45 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a  IZE 0.#endif../*
7700: 0a 2a 2a 20 44 65 66 61 75 6c 74 20 6d 61 78 69  .** Default maxi
7710: 6d 75 6d 20 73 69 7a 65 20 6f 66 20 6d 65 6d 6f  mum size of memo
7720: 72 79 20 75 73 65 64 20 62 79 20 6d 65 6d 6f 72  ry used by memor
7730: 79 2d 6d 61 70 70 65 64 20 49 2f 4f 20 69 6e 20  y-mapped I/O in 
7740: 74 68 65 20 56 46 53 0a 2a 2f 0a 23 69 66 64 65  the VFS.*/.#ifde
7750: 66 20 5f 5f 41 50 50 4c 45 5f 5f 0a 23 20 69 6e  f __APPLE__.# in
7760: 63 6c 75 64 65 20 3c 54 61 72 67 65 74 43 6f 6e  clude <TargetCon
7770: 64 69 74 69 6f 6e 61 6c 73 2e 68 3e 0a 23 65 6e  ditionals.h>.#en
7780: 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  dif.#ifndef SQLI
7790: 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45  TE_MAX_MMAP_SIZE
77a0: 0a 23 20 69 66 20 64 65 66 69 6e 65 64 28 5f 5f  .# if defined(__
77b0: 6c 69 6e 75 78 5f 5f 29 20 5c 0a 20 20 7c 7c 20  linux__) \.  || 
77c0: 64 65 66 69 6e 65 64 28 5f 57 49 4e 33 32 29 20  defined(_WIN32) 
77d0: 5c 0a 20 20 7c 7c 20 28 64 65 66 69 6e 65 64 28  \.  || (defined(
77e0: 5f 5f 41 50 50 4c 45 5f 5f 29 20 26 26 20 64 65  __APPLE__) && de
77f0: 66 69 6e 65 64 28 5f 5f 4d 41 43 48 5f 5f 29 29  fined(__MACH__))
7800: 20 5c 0a 20 20 7c 7c 20 64 65 66 69 6e 65 64 28   \.  || defined(
7810: 5f 5f 73 75 6e 29 20 5c 0a 20 20 7c 7c 20 64 65  __sun) \.  || de
7820: 66 69 6e 65 64 28 5f 5f 46 72 65 65 42 53 44 5f  fined(__FreeBSD_
7830: 5f 29 20 5c 0a 20 20 7c 7c 20 64 65 66 69 6e 65  _) \.  || define
7840: 64 28 5f 5f 44 72 61 67 6f 6e 46 6c 79 5f 5f 29  d(__DragonFly__)
7850: 0a 23 20 20 20 64 65 66 69 6e 65 20 53 51 4c 49  .#   define SQLI
7860: 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45  TE_MAX_MMAP_SIZE
7870: 20 30 78 37 66 66 66 30 30 30 30 20 20 2f 2a 20   0x7fff0000  /* 
7880: 32 31 34 37 34 31 38 31 31 32 20 2a 2f 0a 23 20  2147418112 */.# 
7890: 65 6c 73 65 0a 23 20 20 20 64 65 66 69 6e 65 20  else.#   define 
78a0: 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f  SQLITE_MAX_MMAP_
78b0: 53 49 5a 45 20 30 0a 23 20 65 6e 64 69 66 0a 23  SIZE 0.# endif.#
78c0: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  endif../*.** The
78d0: 20 64 65 66 61 75 6c 74 20 4d 4d 41 50 5f 53 49   default MMAP_SI
78e0: 5a 45 20 69 73 20 7a 65 72 6f 20 6f 6e 20 61 6c  ZE is zero on al
78f0: 6c 20 70 6c 61 74 66 6f 72 6d 73 2e 20 20 4f 72  l platforms.  Or
7900: 2c 20 65 76 65 6e 20 69 66 20 61 20 6c 61 72 67  , even if a larg
7910: 65 72 0a 2a 2a 20 64 65 66 61 75 6c 74 20 4d 4d  er.** default MM
7920: 41 50 5f 53 49 5a 45 20 69 73 20 73 70 65 63 69  AP_SIZE is speci
7930: 66 69 65 64 20 61 74 20 63 6f 6d 70 69 6c 65 2d  fied at compile-
7940: 74 69 6d 65 2c 20 6d 61 6b 65 20 73 75 72 65 20  time, make sure 
7950: 74 68 61 74 20 69 74 20 64 6f 65 73 0a 2a 2a 20  that it does.** 
7960: 6e 6f 74 20 65 78 63 65 65 64 20 74 68 65 20 6d  not exceed the m
7970: 61 78 69 6d 75 6d 20 6d 6d 61 70 20 73 69 7a 65  aximum mmap size
7980: 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c  ..*/.#ifndef SQL
7990: 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d 4d 41 50  ITE_DEFAULT_MMAP
79a0: 5f 53 49 5a 45 0a 23 20 64 65 66 69 6e 65 20 53  _SIZE.# define S
79b0: 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d 4d  QLITE_DEFAULT_MM
79c0: 41 50 5f 53 49 5a 45 20 30 0a 23 65 6e 64 69 66  AP_SIZE 0.#endif
79d0: 0a 23 69 66 20 53 51 4c 49 54 45 5f 44 45 46 41  .#if SQLITE_DEFA
79e0: 55 4c 54 5f 4d 4d 41 50 5f 53 49 5a 45 3e 53 51  ULT_MMAP_SIZE>SQ
79f0: 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49  LITE_MAX_MMAP_SI
7a00: 5a 45 0a 23 20 75 6e 64 65 66 20 53 51 4c 49 54  ZE.# undef SQLIT
7a10: 45 5f 44 45 46 41 55 4c 54 5f 4d 4d 41 50 5f 53  E_DEFAULT_MMAP_S
7a20: 49 5a 45 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  IZE.# define SQL
7a30: 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d 4d 41 50  ITE_DEFAULT_MMAP
7a40: 5f 53 49 5a 45 20 53 51 4c 49 54 45 5f 4d 41 58  _SIZE SQLITE_MAX
7a50: 5f 4d 4d 41 50 5f 53 49 5a 45 0a 23 65 6e 64 69  _MMAP_SIZE.#endi
7a60: 66 0a 0a 2f 2a 0a 2a 2a 20 53 45 4c 45 43 54 54  f../*.** SELECTT
7a70: 52 41 43 45 5f 45 4e 41 42 4c 45 44 20 77 69 6c  RACE_ENABLED wil
7a80: 6c 20 62 65 20 65 69 74 68 65 72 20 31 20 6f 72  l be either 1 or
7a90: 20 30 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20   0 depending on 
7aa0: 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 0a 2a  whether or not.*
7ab0: 2a 20 74 68 65 20 53 65 6c 65 63 74 20 71 75 65  * the Select que
7ac0: 72 79 20 67 65 6e 65 72 61 74 6f 72 20 74 72 61  ry generator tra
7ad0: 63 69 6e 67 20 6c 6f 67 69 63 20 69 73 20 74 75  cing logic is tu
7ae0: 72 6e 65 64 20 6f 6e 2e 0a 2a 2f 0a 23 69 66 20  rned on..*/.#if 
7af0: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45  defined(SQLITE_E
7b00: 4e 41 42 4c 45 5f 53 45 4c 45 43 54 54 52 41 43  NABLE_SELECTTRAC
7b10: 45 29 0a 23 20 64 65 66 69 6e 65 20 53 45 4c 45  E).# define SELE
7b20: 43 54 54 52 41 43 45 5f 45 4e 41 42 4c 45 44 20  CTTRACE_ENABLED 
7b30: 31 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65  1.#else.# define
7b40: 20 53 45 4c 45 43 54 54 52 41 43 45 5f 45 4e 41   SELECTTRACE_ENA
7b50: 42 4c 45 44 20 30 0a 23 65 6e 64 69 66 0a 0a 2f  BLED 0.#endif../
7b60: 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65  *.** An instance
7b70: 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   of the followin
7b80: 67 20 73 74 72 75 63 74 75 72 65 20 69 73 20 75  g structure is u
7b90: 73 65 64 20 74 6f 20 73 74 6f 72 65 20 74 68 65  sed to store the
7ba0: 20 62 75 73 79 2d 68 61 6e 64 6c 65 72 0a 2a 2a   busy-handler.**
7bb0: 20 63 61 6c 6c 62 61 63 6b 20 66 6f 72 20 61 20   callback for a 
7bc0: 67 69 76 65 6e 20 73 71 6c 69 74 65 20 68 61 6e  given sqlite han
7bd0: 64 6c 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 73  dle..**.** The s
7be0: 71 6c 69 74 65 2e 62 75 73 79 48 61 6e 64 6c 65  qlite.busyHandle
7bf0: 72 20 6d 65 6d 62 65 72 20 6f 66 20 74 68 65 20  r member of the 
7c00: 73 71 6c 69 74 65 20 73 74 72 75 63 74 20 63 6f  sqlite struct co
7c10: 6e 74 61 69 6e 73 20 74 68 65 20 62 75 73 79 0a  ntains the busy.
7c20: 2a 2a 20 63 61 6c 6c 62 61 63 6b 20 66 6f 72 20  ** callback for 
7c30: 74 68 65 20 64 61 74 61 62 61 73 65 20 68 61 6e  the database han
7c40: 64 6c 65 2e 20 45 61 63 68 20 70 61 67 65 72 20  dle. Each pager 
7c50: 6f 70 65 6e 65 64 20 76 69 61 20 74 68 65 20 73  opened via the s
7c60: 71 6c 69 74 65 0a 2a 2a 20 68 61 6e 64 6c 65 20  qlite.** handle 
7c70: 69 73 20 70 61 73 73 65 64 20 61 20 70 6f 69 6e  is passed a poin
7c80: 74 65 72 20 74 6f 20 73 71 6c 69 74 65 2e 62 75  ter to sqlite.bu
7c90: 73 79 48 61 6e 64 6c 65 72 2e 20 54 68 65 20 62  syHandler. The b
7ca0: 75 73 79 2d 68 61 6e 64 6c 65 72 0a 2a 2a 20 63  usy-handler.** c
7cb0: 61 6c 6c 62 61 63 6b 20 69 73 20 63 75 72 72 65  allback is curre
7cc0: 6e 74 6c 79 20 69 6e 76 6f 6b 65 64 20 6f 6e 6c  ntly invoked onl
7cd0: 79 20 66 72 6f 6d 20 77 69 74 68 69 6e 20 70 61  y from within pa
7ce0: 67 65 72 2e 63 2e 0a 2a 2f 0a 74 79 70 65 64 65  ger.c..*/.typede
7cf0: 66 20 73 74 72 75 63 74 20 42 75 73 79 48 61 6e  f struct BusyHan
7d00: 64 6c 65 72 20 42 75 73 79 48 61 6e 64 6c 65 72  dler BusyHandler
7d10: 3b 0a 73 74 72 75 63 74 20 42 75 73 79 48 61 6e  ;.struct BusyHan
7d20: 64 6c 65 72 20 7b 0a 20 20 69 6e 74 20 28 2a 78  dler {.  int (*x
7d30: 42 75 73 79 48 61 6e 64 6c 65 72 29 28 76 6f 69  BusyHandler)(voi
7d40: 64 20 2a 2c 69 6e 74 29 3b 20 20 2f 2a 20 54 68  d *,int);  /* Th
7d50: 65 20 62 75 73 79 20 63 61 6c 6c 62 61 63 6b 20  e busy callback 
7d60: 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 42 75 73 79  */.  void *pBusy
7d70: 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20  Arg;            
7d80: 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20         /* First 
7d90: 61 72 67 20 74 6f 20 62 75 73 79 20 63 61 6c 6c  arg to busy call
7da0: 62 61 63 6b 20 2a 2f 0a 20 20 69 6e 74 20 6e 42  back */.  int nB
7db0: 75 73 79 3b 20 20 20 20 20 20 20 20 20 20 20 20  usy;            
7dc0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49              /* I
7dd0: 6e 63 72 65 6d 65 6e 74 65 64 20 77 69 74 68 20  ncremented with 
7de0: 65 61 63 68 20 62 75 73 79 20 63 61 6c 6c 20 2a  each busy call *
7df0: 2f 0a 20 20 75 38 20 62 45 78 74 72 61 46 69 6c  /.  u8 bExtraFil
7e00: 65 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20  eArg;           
7e10: 20 20 20 20 20 20 2f 2a 20 49 6e 63 6c 75 64 65        /* Include
7e20: 20 73 71 6c 69 74 65 33 5f 66 69 6c 65 20 61 73   sqlite3_file as
7e30: 20 63 61 6c 6c 62 61 63 6b 20 61 72 67 20 2a 2f   callback arg */
7e40: 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 4e 61 6d 65 20  .};../*.** Name 
7e50: 6f 66 20 74 68 65 20 6d 61 73 74 65 72 20 64 61  of the master da
7e60: 74 61 62 61 73 65 20 74 61 62 6c 65 2e 20 20 54  tabase table.  T
7e70: 68 65 20 6d 61 73 74 65 72 20 64 61 74 61 62 61  he master databa
7e80: 73 65 20 74 61 62 6c 65 0a 2a 2a 20 69 73 20 61  se table.** is a
7e90: 20 73 70 65 63 69 61 6c 20 74 61 62 6c 65 20 74   special table t
7ea0: 68 61 74 20 68 6f 6c 64 73 20 74 68 65 20 6e 61  hat holds the na
7eb0: 6d 65 73 20 61 6e 64 20 61 74 74 72 69 62 75 74  mes and attribut
7ec0: 65 73 20 6f 66 20 61 6c 6c 0a 2a 2a 20 75 73 65  es of all.** use
7ed0: 72 20 74 61 62 6c 65 73 20 61 6e 64 20 69 6e 64  r tables and ind
7ee0: 69 63 65 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  ices..*/.#define
7ef0: 20 4d 41 53 54 45 52 5f 4e 41 4d 45 20 20 20 20   MASTER_NAME    
7f00: 20 20 20 22 73 71 6c 69 74 65 5f 6d 61 73 74 65     "sqlite_maste
7f10: 72 22 0a 23 64 65 66 69 6e 65 20 54 45 4d 50 5f  r".#define TEMP_
7f20: 4d 41 53 54 45 52 5f 4e 41 4d 45 20 20 22 73 71  MASTER_NAME  "sq
7f30: 6c 69 74 65 5f 74 65 6d 70 5f 6d 61 73 74 65 72  lite_temp_master
7f40: 22 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 72 6f 6f  "../*.** The roo
7f50: 74 2d 70 61 67 65 20 6f 66 20 74 68 65 20 6d 61  t-page of the ma
7f60: 73 74 65 72 20 64 61 74 61 62 61 73 65 20 74 61  ster database ta
7f70: 62 6c 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ble..*/.#define 
7f80: 4d 41 53 54 45 52 5f 52 4f 4f 54 20 20 20 20 20  MASTER_ROOT     
7f90: 20 20 31 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6e    1../*.** The n
7fa0: 61 6d 65 20 6f 66 20 74 68 65 20 73 63 68 65 6d  ame of the schem
7fb0: 61 20 74 61 62 6c 65 2e 0a 2a 2f 0a 23 64 65 66  a table..*/.#def
7fc0: 69 6e 65 20 53 43 48 45 4d 41 5f 54 41 42 4c 45  ine SCHEMA_TABLE
7fd0: 28 78 29 20 20 28 28 21 4f 4d 49 54 5f 54 45 4d  (x)  ((!OMIT_TEM
7fe0: 50 44 42 29 26 26 28 78 3d 3d 31 29 3f 54 45 4d  PDB)&&(x==1)?TEM
7ff0: 50 5f 4d 41 53 54 45 52 5f 4e 41 4d 45 3a 4d 41  P_MASTER_NAME:MA
8000: 53 54 45 52 5f 4e 41 4d 45 29 0a 0a 2f 2a 0a 2a  STER_NAME)../*.*
8010: 2a 20 41 20 63 6f 6e 76 65 6e 69 65 6e 63 65 20  * A convenience 
8020: 6d 61 63 72 6f 20 74 68 61 74 20 72 65 74 75 72  macro that retur
8030: 6e 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  ns the number of
8040: 20 65 6c 65 6d 65 6e 74 73 20 69 6e 0a 2a 2a 20   elements in.** 
8050: 61 6e 20 61 72 72 61 79 2e 0a 2a 2f 0a 23 64 65  an array..*/.#de
8060: 66 69 6e 65 20 41 72 72 61 79 53 69 7a 65 28 58  fine ArraySize(X
8070: 29 20 20 20 20 28 28 69 6e 74 29 28 73 69 7a 65  )    ((int)(size
8080: 6f 66 28 58 29 2f 73 69 7a 65 6f 66 28 58 5b 30  of(X)/sizeof(X[0
8090: 5d 29 29 29 0a 0a 2f 2a 0a 2a 2a 20 44 65 74 65  ])))../*.** Dete
80a0: 72 6d 69 6e 65 20 69 66 20 74 68 65 20 61 72 67  rmine if the arg
80b0: 75 6d 65 6e 74 20 69 73 20 61 20 70 6f 77 65 72  ument is a power
80c0: 20 6f 66 20 74 77 6f 0a 2a 2f 0a 23 64 65 66 69   of two.*/.#defi
80d0: 6e 65 20 49 73 50 6f 77 65 72 4f 66 54 77 6f 28  ne IsPowerOfTwo(
80e0: 58 29 20 28 28 28 58 29 26 28 28 58 29 2d 31 29  X) (((X)&((X)-1)
80f0: 29 3d 3d 30 29 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  )==0)../*.** The
8100: 20 66 6f 6c 6c 6f 77 69 6e 67 20 76 61 6c 75 65   following value
8110: 20 61 73 20 61 20 64 65 73 74 72 75 63 74 6f 72   as a destructor
8120: 20 6d 65 61 6e 73 20 74 6f 20 75 73 65 20 73 71   means to use sq
8130: 6c 69 74 65 33 44 62 46 72 65 65 28 29 2e 0a 2a  lite3DbFree()..*
8140: 2a 20 54 68 65 20 73 71 6c 69 74 65 33 44 62 46  * The sqlite3DbF
8150: 72 65 65 28 29 20 72 6f 75 74 69 6e 65 20 72 65  ree() routine re
8160: 71 75 69 72 65 73 20 74 77 6f 20 70 61 72 61 6d  quires two param
8170: 65 74 65 72 73 20 69 6e 73 74 65 61 64 20 6f 66  eters instead of
8180: 20 74 68 65 0a 2a 2a 20 6f 6e 65 20 70 61 72 61   the.** one para
8190: 6d 65 74 65 72 20 74 68 61 74 20 64 65 73 74 72  meter that destr
81a0: 75 63 74 6f 72 73 20 6e 6f 72 6d 61 6c 6c 79 20  uctors normally 
81b0: 77 61 6e 74 2e 20 20 53 6f 20 77 65 20 68 61 76  want.  So we hav
81c0: 65 20 74 6f 20 69 6e 74 72 6f 64 75 63 65 0a 2a  e to introduce.*
81d0: 2a 20 74 68 69 73 20 6d 61 67 69 63 20 76 61 6c  * this magic val
81e0: 75 65 20 74 68 61 74 20 74 68 65 20 63 6f 64 65  ue that the code
81f0: 20 6b 6e 6f 77 73 20 74 6f 20 68 61 6e 64 6c 65   knows to handle
8200: 20 64 69 66 66 65 72 65 6e 74 6c 79 2e 20 20 41   differently.  A
8210: 6e 79 0a 2a 2a 20 70 6f 69 6e 74 65 72 20 77 69  ny.** pointer wi
8220: 6c 6c 20 77 6f 72 6b 20 68 65 72 65 20 61 73 20  ll work here as 
8230: 6c 6f 6e 67 20 61 73 20 69 74 20 69 73 20 64 69  long as it is di
8240: 73 74 69 6e 63 74 20 66 72 6f 6d 20 53 51 4c 49  stinct from SQLI
8250: 54 45 5f 53 54 41 54 49 43 0a 2a 2a 20 61 6e 64  TE_STATIC.** and
8260: 20 53 51 4c 49 54 45 5f 54 52 41 4e 53 49 45 4e   SQLITE_TRANSIEN
8270: 54 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  T..*/.#define SQ
8280: 4c 49 54 45 5f 44 59 4e 41 4d 49 43 20 20 20 28  LITE_DYNAMIC   (
8290: 28 73 71 6c 69 74 65 33 5f 64 65 73 74 72 75 63  (sqlite3_destruc
82a0: 74 6f 72 5f 74 79 70 65 29 73 71 6c 69 74 65 33  tor_type)sqlite3
82b0: 4d 61 6c 6c 6f 63 53 69 7a 65 29 0a 0a 2f 2a 0a  MallocSize)../*.
82c0: 2a 2a 20 57 68 65 6e 20 53 51 4c 49 54 45 5f 4f  ** When SQLITE_O
82d0: 4d 49 54 5f 57 53 44 20 69 73 20 64 65 66 69 6e  MIT_WSD is defin
82e0: 65 64 2c 20 69 74 20 6d 65 61 6e 73 20 74 68 61  ed, it means tha
82f0: 74 20 74 68 65 20 74 61 72 67 65 74 20 70 6c 61  t the target pla
8300: 74 66 6f 72 6d 20 64 6f 65 73 0a 2a 2a 20 6e 6f  tform does.** no
8310: 74 20 73 75 70 70 6f 72 74 20 57 72 69 74 61 62  t support Writab
8320: 6c 65 20 53 74 61 74 69 63 20 44 61 74 61 20 28  le Static Data (
8330: 57 53 44 29 20 73 75 63 68 20 61 73 20 67 6c 6f  WSD) such as glo
8340: 62 61 6c 20 61 6e 64 20 73 74 61 74 69 63 20 76  bal and static v
8350: 61 72 69 61 62 6c 65 73 2e 0a 2a 2a 20 41 6c 6c  ariables..** All
8360: 20 76 61 72 69 61 62 6c 65 73 20 6d 75 73 74 20   variables must 
8370: 65 69 74 68 65 72 20 62 65 20 6f 6e 20 74 68 65  either be on the
8380: 20 73 74 61 63 6b 20 6f 72 20 64 79 6e 61 6d 69   stack or dynami
8390: 63 61 6c 6c 79 20 61 6c 6c 6f 63 61 74 65 64 20  cally allocated 
83a0: 66 72 6f 6d 0a 2a 2a 20 74 68 65 20 68 65 61 70  from.** the heap
83b0: 2e 20 20 57 68 65 6e 20 57 53 44 20 69 73 20 75  .  When WSD is u
83c0: 6e 73 75 70 70 6f 72 74 65 64 2c 20 74 68 65 20  nsupported, the 
83d0: 76 61 72 69 61 62 6c 65 20 64 65 63 6c 61 72 61  variable declara
83e0: 74 69 6f 6e 73 20 73 63 61 74 74 65 72 65 64 0a  tions scattered.
83f0: 2a 2a 20 74 68 72 6f 75 67 68 6f 75 74 20 74 68  ** throughout th
8400: 65 20 53 51 4c 69 74 65 20 63 6f 64 65 20 6d 75  e SQLite code mu
8410: 73 74 20 62 65 63 6f 6d 65 20 63 6f 6e 73 74 61  st become consta
8420: 6e 74 73 20 69 6e 73 74 65 61 64 2e 20 20 54 68  nts instead.  Th
8430: 65 20 53 51 4c 49 54 45 5f 57 53 44 0a 2a 2a 20  e SQLITE_WSD.** 
8440: 6d 61 63 72 6f 20 69 73 20 75 73 65 64 20 66 6f  macro is used fo
8450: 72 20 74 68 69 73 20 70 75 72 70 6f 73 65 2e 20  r this purpose. 
8460: 20 41 6e 64 20 69 6e 73 74 65 61 64 20 6f 66 20   And instead of 
8470: 72 65 66 65 72 65 6e 63 69 6e 67 20 74 68 65 20  referencing the 
8480: 76 61 72 69 61 62 6c 65 0a 2a 2a 20 64 69 72 65  variable.** dire
8490: 63 74 6c 79 2c 20 77 65 20 75 73 65 20 69 74 73  ctly, we use its
84a0: 20 63 6f 6e 73 74 61 6e 74 20 61 73 20 61 20 6b   constant as a k
84b0: 65 79 20 74 6f 20 6c 6f 6f 6b 75 70 20 74 68 65  ey to lookup the
84c0: 20 72 75 6e 2d 74 69 6d 65 20 61 6c 6c 6f 63 61   run-time alloca
84d0: 74 65 64 0a 2a 2a 20 62 75 66 66 65 72 20 74 68  ted.** buffer th
84e0: 61 74 20 68 6f 6c 64 73 20 72 65 61 6c 20 76 61  at holds real va
84f0: 72 69 61 62 6c 65 2e 20 20 54 68 65 20 63 6f 6e  riable.  The con
8500: 73 74 61 6e 74 20 69 73 20 61 6c 73 6f 20 74 68  stant is also th
8510: 65 20 69 6e 69 74 69 61 6c 69 7a 65 72 0a 2a 2a  e initializer.**
8520: 20 66 6f 72 20 74 68 65 20 72 75 6e 2d 74 69 6d   for the run-tim
8530: 65 20 61 6c 6c 6f 63 61 74 65 64 20 62 75 66 66  e allocated buff
8540: 65 72 2e 0a 2a 2a 0a 2a 2a 20 49 6e 20 74 68 65  er..**.** In the
8550: 20 75 73 75 61 6c 20 63 61 73 65 20 77 68 65 72   usual case wher
8560: 65 20 57 53 44 20 69 73 20 73 75 70 70 6f 72 74  e WSD is support
8570: 65 64 2c 20 74 68 65 20 53 51 4c 49 54 45 5f 57  ed, the SQLITE_W
8580: 53 44 20 61 6e 64 20 47 4c 4f 42 41 4c 0a 2a 2a  SD and GLOBAL.**
8590: 20 6d 61 63 72 6f 73 20 62 65 63 6f 6d 65 20 6e   macros become n
85a0: 6f 2d 6f 70 73 20 61 6e 64 20 68 61 76 65 20 7a  o-ops and have z
85b0: 65 72 6f 20 70 65 72 66 6f 72 6d 61 6e 63 65 20  ero performance 
85c0: 69 6d 70 61 63 74 2e 0a 2a 2f 0a 23 69 66 64 65  impact..*/.#ifde
85d0: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 53  f SQLITE_OMIT_WS
85e0: 44 0a 20 20 23 64 65 66 69 6e 65 20 53 51 4c 49  D.  #define SQLI
85f0: 54 45 5f 57 53 44 20 63 6f 6e 73 74 0a 20 20 23  TE_WSD const.  #
8600: 64 65 66 69 6e 65 20 47 4c 4f 42 41 4c 28 74 2c  define GLOBAL(t,
8610: 76 29 20 28 2a 28 74 2a 29 73 71 6c 69 74 65 33  v) (*(t*)sqlite3
8620: 5f 77 73 64 5f 66 69 6e 64 28 28 76 6f 69 64 2a  _wsd_find((void*
8630: 29 26 28 76 29 2c 20 73 69 7a 65 6f 66 28 76 29  )&(v), sizeof(v)
8640: 29 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c  )).  #define sql
8650: 69 74 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67  ite3GlobalConfig
8660: 20 47 4c 4f 42 41 4c 28 73 74 72 75 63 74 20 53   GLOBAL(struct S
8670: 71 6c 69 74 65 33 43 6f 6e 66 69 67 2c 20 73 71  qlite3Config, sq
8680: 6c 69 74 65 33 43 6f 6e 66 69 67 29 0a 20 20 69  lite3Config).  i
8690: 6e 74 20 73 71 6c 69 74 65 33 5f 77 73 64 5f 69  nt sqlite3_wsd_i
86a0: 6e 69 74 28 69 6e 74 20 4e 2c 20 69 6e 74 20 4a  nit(int N, int J
86b0: 29 3b 0a 20 20 76 6f 69 64 20 2a 73 71 6c 69 74  );.  void *sqlit
86c0: 65 33 5f 77 73 64 5f 66 69 6e 64 28 76 6f 69 64  e3_wsd_find(void
86d0: 20 2a 4b 2c 20 69 6e 74 20 4c 29 3b 0a 23 65 6c   *K, int L);.#el
86e0: 73 65 0a 20 20 23 64 65 66 69 6e 65 20 53 51 4c  se.  #define SQL
86f0: 49 54 45 5f 57 53 44 0a 20 20 23 64 65 66 69 6e  ITE_WSD.  #defin
8700: 65 20 47 4c 4f 42 41 4c 28 74 2c 76 29 20 76 0a  e GLOBAL(t,v) v.
8710: 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65    #define sqlite
8720: 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 20 73 71  3GlobalConfig sq
8730: 6c 69 74 65 33 43 6f 6e 66 69 67 0a 23 65 6e 64  lite3Config.#end
8740: 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f  if../*.** The fo
8750: 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 73 20 61  llowing macros a
8760: 72 65 20 75 73 65 64 20 74 6f 20 73 75 70 70 72  re used to suppr
8770: 65 73 73 20 63 6f 6d 70 69 6c 65 72 20 77 61 72  ess compiler war
8780: 6e 69 6e 67 73 20 61 6e 64 20 74 6f 0a 2a 2a 20  nings and to.** 
8790: 6d 61 6b 65 20 69 74 20 63 6c 65 61 72 20 74 6f  make it clear to
87a0: 20 68 75 6d 61 6e 20 72 65 61 64 65 72 73 20 77   human readers w
87b0: 68 65 6e 20 61 20 66 75 6e 63 74 69 6f 6e 20 70  hen a function p
87c0: 61 72 61 6d 65 74 65 72 20 69 73 20 64 65 6c 69  arameter is deli
87d0: 62 65 72 61 74 65 6c 79 0a 2a 2a 20 6c 65 66 74  berately.** left
87e0: 20 75 6e 75 73 65 64 20 77 69 74 68 69 6e 20 74   unused within t
87f0: 68 65 20 62 6f 64 79 20 6f 66 20 61 20 66 75 6e  he body of a fun
8800: 63 74 69 6f 6e 2e 20 54 68 69 73 20 75 73 75 61  ction. This usua
8810: 6c 6c 79 20 68 61 70 70 65 6e 73 20 77 68 65 6e  lly happens when
8820: 0a 2a 2a 20 61 20 66 75 6e 63 74 69 6f 6e 20 69  .** a function i
8830: 73 20 63 61 6c 6c 65 64 20 76 69 61 20 61 20 66  s called via a f
8840: 75 6e 63 74 69 6f 6e 20 70 6f 69 6e 74 65 72 2e  unction pointer.
8850: 20 46 6f 72 20 65 78 61 6d 70 6c 65 20 74 68 65   For example the
8860: 0a 2a 2a 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  .** implementati
8870: 6f 6e 20 6f 66 20 61 6e 20 53 51 4c 20 61 67 67  on of an SQL agg
8880: 72 65 67 61 74 65 20 73 74 65 70 20 63 61 6c 6c  regate step call
8890: 62 61 63 6b 20 6d 61 79 20 6e 6f 74 20 75 73 65  back may not use
88a0: 20 74 68 65 0a 2a 2a 20 70 61 72 61 6d 65 74 65   the.** paramete
88b0: 72 20 69 6e 64 69 63 61 74 69 6e 67 20 74 68 65  r indicating the
88c0: 20 6e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d   number of argum
88d0: 65 6e 74 73 20 70 61 73 73 65 64 20 74 6f 20 74  ents passed to t
88e0: 68 65 20 61 67 67 72 65 67 61 74 65 2c 0a 2a 2a  he aggregate,.**
88f0: 20 69 66 20 69 74 20 6b 6e 6f 77 73 20 74 68 61   if it knows tha
8900: 74 20 74 68 69 73 20 69 73 20 65 6e 66 6f 72 63  t this is enforc
8910: 65 64 20 65 6c 73 65 77 68 65 72 65 2e 0a 2a 2a  ed elsewhere..**
8920: 0a 2a 2a 20 57 68 65 6e 20 61 20 66 75 6e 63 74  .** When a funct
8930: 69 6f 6e 20 70 61 72 61 6d 65 74 65 72 20 69 73  ion parameter is
8940: 20 6e 6f 74 20 75 73 65 64 20 61 74 20 61 6c 6c   not used at all
8950: 20 77 69 74 68 69 6e 20 74 68 65 20 62 6f 64 79   within the body
8960: 20 6f 66 20 61 20 66 75 6e 63 74 69 6f 6e 2c 0a   of a function,.
8970: 2a 2a 20 69 74 20 69 73 20 67 65 6e 65 72 61 6c  ** it is general
8980: 6c 79 20 6e 61 6d 65 64 20 22 4e 6f 74 55 73 65  ly named "NotUse
8990: 64 22 20 6f 72 20 22 4e 6f 74 55 73 65 64 32 22  d" or "NotUsed2"
89a0: 20 74 6f 20 6d 61 6b 65 20 74 68 69 6e 67 73 20   to make things 
89b0: 65 76 65 6e 20 63 6c 65 61 72 65 72 2e 0a 2a 2a  even clearer..**
89c0: 20 48 6f 77 65 76 65 72 2c 20 74 68 65 73 65 20   However, these 
89d0: 6d 61 63 72 6f 73 20 6d 61 79 20 61 6c 73 6f 20  macros may also 
89e0: 62 65 20 75 73 65 64 20 74 6f 20 73 75 70 70 72  be used to suppr
89f0: 65 73 73 20 77 61 72 6e 69 6e 67 73 20 72 65 6c  ess warnings rel
8a00: 61 74 65 64 20 74 6f 0a 2a 2a 20 70 61 72 61 6d  ated to.** param
8a10: 65 74 65 72 73 20 74 68 61 74 20 6d 61 79 20 6f  eters that may o
8a20: 72 20 6d 61 79 20 6e 6f 74 20 62 65 20 75 73 65  r may not be use
8a30: 64 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20 63  d depending on c
8a40: 6f 6d 70 69 6c 61 74 69 6f 6e 20 6f 70 74 69 6f  ompilation optio
8a50: 6e 73 2e 0a 2a 2a 20 46 6f 72 20 65 78 61 6d 70  ns..** For examp
8a60: 6c 65 20 74 68 6f 73 65 20 70 61 72 61 6d 65 74  le those paramet
8a70: 65 72 73 20 6f 6e 6c 79 20 75 73 65 64 20 69 6e  ers only used in
8a80: 20 61 73 73 65 72 74 28 29 20 73 74 61 74 65 6d   assert() statem
8a90: 65 6e 74 73 2e 20 49 6e 20 74 68 65 73 65 0a 2a  ents. In these.*
8aa0: 2a 20 63 61 73 65 73 20 74 68 65 20 70 61 72 61  * cases the para
8ab0: 6d 65 74 65 72 73 20 61 72 65 20 6e 61 6d 65 64  meters are named
8ac0: 20 61 73 20 70 65 72 20 74 68 65 20 75 73 75 61   as per the usua
8ad0: 6c 20 63 6f 6e 76 65 6e 74 69 6f 6e 73 2e 0a 2a  l conventions..*
8ae0: 2f 0a 23 64 65 66 69 6e 65 20 55 4e 55 53 45 44  /.#define UNUSED
8af0: 5f 50 41 52 41 4d 45 54 45 52 28 78 29 20 28 76  _PARAMETER(x) (v
8b00: 6f 69 64 29 28 78 29 0a 23 64 65 66 69 6e 65 20  oid)(x).#define 
8b10: 55 4e 55 53 45 44 5f 50 41 52 41 4d 45 54 45 52  UNUSED_PARAMETER
8b20: 32 28 78 2c 79 29 20 55 4e 55 53 45 44 5f 50 41  2(x,y) UNUSED_PA
8b30: 52 41 4d 45 54 45 52 28 78 29 2c 55 4e 55 53 45  RAMETER(x),UNUSE
8b40: 44 5f 50 41 52 41 4d 45 54 45 52 28 79 29 0a 0a  D_PARAMETER(y)..
8b50: 2f 2a 0a 2a 2a 20 46 6f 72 77 61 72 64 20 72 65  /*.** Forward re
8b60: 66 65 72 65 6e 63 65 73 20 74 6f 20 73 74 72 75  ferences to stru
8b70: 63 74 75 72 65 73 0a 2a 2f 0a 74 79 70 65 64 65  ctures.*/.typede
8b80: 66 20 73 74 72 75 63 74 20 41 67 67 49 6e 66 6f  f struct AggInfo
8b90: 20 41 67 67 49 6e 66 6f 3b 0a 74 79 70 65 64 65   AggInfo;.typede
8ba0: 66 20 73 74 72 75 63 74 20 41 75 74 68 43 6f 6e  f struct AuthCon
8bb0: 74 65 78 74 20 41 75 74 68 43 6f 6e 74 65 78 74  text AuthContext
8bc0: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
8bd0: 20 41 75 74 6f 69 6e 63 49 6e 66 6f 20 41 75 74   AutoincInfo Aut
8be0: 6f 69 6e 63 49 6e 66 6f 3b 0a 74 79 70 65 64 65  oincInfo;.typede
8bf0: 66 20 73 74 72 75 63 74 20 42 69 74 76 65 63 20  f struct Bitvec 
8c00: 42 69 74 76 65 63 3b 0a 74 79 70 65 64 65 66 20  Bitvec;.typedef 
8c10: 73 74 72 75 63 74 20 43 6f 6c 6c 53 65 71 20 43  struct CollSeq C
8c20: 6f 6c 6c 53 65 71 3b 0a 74 79 70 65 64 65 66 20  ollSeq;.typedef 
8c30: 73 74 72 75 63 74 20 43 6f 6c 75 6d 6e 20 43 6f  struct Column Co
8c40: 6c 75 6d 6e 3b 0a 74 79 70 65 64 65 66 20 73 74  lumn;.typedef st
8c50: 72 75 63 74 20 44 62 20 44 62 3b 0a 74 79 70 65  ruct Db Db;.type
8c60: 64 65 66 20 73 74 72 75 63 74 20 53 63 68 65 6d  def struct Schem
8c70: 61 20 53 63 68 65 6d 61 3b 0a 74 79 70 65 64 65  a Schema;.typede
8c80: 66 20 73 74 72 75 63 74 20 45 78 70 72 20 45 78  f struct Expr Ex
8c90: 70 72 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  pr;.typedef stru
8ca0: 63 74 20 45 78 70 72 4c 69 73 74 20 45 78 70 72  ct ExprList Expr
8cb0: 4c 69 73 74 3b 0a 74 79 70 65 64 65 66 20 73 74  List;.typedef st
8cc0: 72 75 63 74 20 46 4b 65 79 20 46 4b 65 79 3b 0a  ruct FKey FKey;.
8cd0: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 46  typedef struct F
8ce0: 75 6e 63 44 65 73 74 72 75 63 74 6f 72 20 46 75  uncDestructor Fu
8cf0: 6e 63 44 65 73 74 72 75 63 74 6f 72 3b 0a 74 79  ncDestructor;.ty
8d00: 70 65 64 65 66 20 73 74 72 75 63 74 20 46 75 6e  pedef struct Fun
8d10: 63 44 65 66 20 46 75 6e 63 44 65 66 3b 0a 74 79  cDef FuncDef;.ty
8d20: 70 65 64 65 66 20 73 74 72 75 63 74 20 46 75 6e  pedef struct Fun
8d30: 63 44 65 66 48 61 73 68 20 46 75 6e 63 44 65 66  cDefHash FuncDef
8d40: 48 61 73 68 3b 0a 74 79 70 65 64 65 66 20 73 74  Hash;.typedef st
8d50: 72 75 63 74 20 49 64 4c 69 73 74 20 49 64 4c 69  ruct IdList IdLi
8d60: 73 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  st;.typedef stru
8d70: 63 74 20 49 6e 64 65 78 20 49 6e 64 65 78 3b 0a  ct Index Index;.
8d80: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 49  typedef struct I
8d90: 6e 64 65 78 53 61 6d 70 6c 65 20 49 6e 64 65 78  ndexSample Index
8da0: 53 61 6d 70 6c 65 3b 0a 74 79 70 65 64 65 66 20  Sample;.typedef 
8db0: 73 74 72 75 63 74 20 4b 65 79 43 6c 61 73 73 20  struct KeyClass 
8dc0: 4b 65 79 43 6c 61 73 73 3b 0a 74 79 70 65 64 65  KeyClass;.typede
8dd0: 66 20 73 74 72 75 63 74 20 4b 65 79 49 6e 66 6f  f struct KeyInfo
8de0: 20 4b 65 79 49 6e 66 6f 3b 0a 74 79 70 65 64 65   KeyInfo;.typede
8df0: 66 20 73 74 72 75 63 74 20 4c 6f 6f 6b 61 73 69  f struct Lookasi
8e00: 64 65 20 4c 6f 6f 6b 61 73 69 64 65 3b 0a 74 79  de Lookaside;.ty
8e10: 70 65 64 65 66 20 73 74 72 75 63 74 20 4c 6f 6f  pedef struct Loo
8e20: 6b 61 73 69 64 65 53 6c 6f 74 20 4c 6f 6f 6b 61  kasideSlot Looka
8e30: 73 69 64 65 53 6c 6f 74 3b 0a 74 79 70 65 64 65  sideSlot;.typede
8e40: 66 20 73 74 72 75 63 74 20 4d 6f 64 75 6c 65 20  f struct Module 
8e50: 4d 6f 64 75 6c 65 3b 0a 74 79 70 65 64 65 66 20  Module;.typedef 
8e60: 73 74 72 75 63 74 20 4e 61 6d 65 43 6f 6e 74 65  struct NameConte
8e70: 78 74 20 4e 61 6d 65 43 6f 6e 74 65 78 74 3b 0a  xt NameContext;.
8e80: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 50  typedef struct P
8e90: 61 72 73 65 20 50 61 72 73 65 3b 0a 74 79 70 65  arse Parse;.type
8ea0: 64 65 66 20 73 74 72 75 63 74 20 50 72 65 55 70  def struct PreUp
8eb0: 64 61 74 65 20 50 72 65 55 70 64 61 74 65 3b 0a  date PreUpdate;.
8ec0: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 50  typedef struct P
8ed0: 72 69 6e 74 66 41 72 67 75 6d 65 6e 74 73 20 50  rintfArguments P
8ee0: 72 69 6e 74 66 41 72 67 75 6d 65 6e 74 73 3b 0a  rintfArguments;.
8ef0: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 52  typedef struct R
8f00: 65 6e 61 6d 65 54 6f 6b 65 6e 20 52 65 6e 61 6d  enameToken Renam
8f10: 65 54 6f 6b 65 6e 3b 0a 74 79 70 65 64 65 66 20  eToken;.typedef 
8f20: 73 74 72 75 63 74 20 52 6f 77 53 65 74 20 52 6f  struct RowSet Ro
8f30: 77 53 65 74 3b 0a 74 79 70 65 64 65 66 20 73 74  wSet;.typedef st
8f40: 72 75 63 74 20 53 61 76 65 70 6f 69 6e 74 20 53  ruct Savepoint S
8f50: 61 76 65 70 6f 69 6e 74 3b 0a 74 79 70 65 64 65  avepoint;.typede
8f60: 66 20 73 74 72 75 63 74 20 53 65 6c 65 63 74 20  f struct Select 
8f70: 53 65 6c 65 63 74 3b 0a 74 79 70 65 64 65 66 20  Select;.typedef 
8f80: 73 74 72 75 63 74 20 53 51 4c 69 74 65 54 68 72  struct SQLiteThr
8f90: 65 61 64 20 53 51 4c 69 74 65 54 68 72 65 61 64  ead SQLiteThread
8fa0: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
8fb0: 20 53 65 6c 65 63 74 44 65 73 74 20 53 65 6c 65   SelectDest Sele
8fc0: 63 74 44 65 73 74 3b 0a 74 79 70 65 64 65 66 20  ctDest;.typedef 
8fd0: 73 74 72 75 63 74 20 53 72 63 4c 69 73 74 20 53  struct SrcList S
8fe0: 72 63 4c 69 73 74 3b 0a 74 79 70 65 64 65 66 20  rcList;.typedef 
8ff0: 73 74 72 75 63 74 20 73 71 6c 69 74 65 33 5f 73  struct sqlite3_s
9000: 74 72 20 53 74 72 41 63 63 75 6d 3b 20 2f 2a 20  tr StrAccum; /* 
9010: 49 6e 74 65 72 6e 61 6c 20 61 6c 69 61 73 20 66  Internal alias f
9020: 6f 72 20 73 71 6c 69 74 65 33 5f 73 74 72 20 2a  or sqlite3_str *
9030: 2f 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  /.typedef struct
9040: 20 54 61 62 6c 65 20 54 61 62 6c 65 3b 0a 74 79   Table Table;.ty
9050: 70 65 64 65 66 20 73 74 72 75 63 74 20 54 61 62  pedef struct Tab
9060: 6c 65 4c 6f 63 6b 20 54 61 62 6c 65 4c 6f 63 6b  leLock TableLock
9070: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
9080: 20 54 6f 6b 65 6e 20 54 6f 6b 65 6e 3b 0a 74 79   Token Token;.ty
9090: 70 65 64 65 66 20 73 74 72 75 63 74 20 54 72 65  pedef struct Tre
90a0: 65 56 69 65 77 20 54 72 65 65 56 69 65 77 3b 0a  eView TreeView;.
90b0: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 54  typedef struct T
90c0: 72 69 67 67 65 72 20 54 72 69 67 67 65 72 3b 0a  rigger Trigger;.
90d0: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 54  typedef struct T
90e0: 72 69 67 67 65 72 50 72 67 20 54 72 69 67 67 65  riggerPrg Trigge
90f0: 72 50 72 67 3b 0a 74 79 70 65 64 65 66 20 73 74  rPrg;.typedef st
9100: 72 75 63 74 20 54 72 69 67 67 65 72 53 74 65 70  ruct TriggerStep
9110: 20 54 72 69 67 67 65 72 53 74 65 70 3b 0a 74 79   TriggerStep;.ty
9120: 70 65 64 65 66 20 73 74 72 75 63 74 20 55 6e 70  pedef struct Unp
9130: 61 63 6b 65 64 52 65 63 6f 72 64 20 55 6e 70 61  ackedRecord Unpa
9140: 63 6b 65 64 52 65 63 6f 72 64 3b 0a 74 79 70 65  ckedRecord;.type
9150: 64 65 66 20 73 74 72 75 63 74 20 55 70 73 65 72  def struct Upser
9160: 74 20 55 70 73 65 72 74 3b 0a 74 79 70 65 64 65  t Upsert;.typede
9170: 66 20 73 74 72 75 63 74 20 56 54 61 62 6c 65 20  f struct VTable 
9180: 56 54 61 62 6c 65 3b 0a 74 79 70 65 64 65 66 20  VTable;.typedef 
9190: 73 74 72 75 63 74 20 56 74 61 62 43 74 78 20 56  struct VtabCtx V
91a0: 74 61 62 43 74 78 3b 0a 74 79 70 65 64 65 66 20  tabCtx;.typedef 
91b0: 73 74 72 75 63 74 20 57 61 6c 6b 65 72 20 57 61  struct Walker Wa
91c0: 6c 6b 65 72 3b 0a 74 79 70 65 64 65 66 20 73 74  lker;.typedef st
91d0: 72 75 63 74 20 57 68 65 72 65 49 6e 66 6f 20 57  ruct WhereInfo W
91e0: 68 65 72 65 49 6e 66 6f 3b 0a 74 79 70 65 64 65  hereInfo;.typede
91f0: 66 20 73 74 72 75 63 74 20 57 69 6e 64 6f 77 20  f struct Window 
9200: 57 69 6e 64 6f 77 3b 0a 74 79 70 65 64 65 66 20  Window;.typedef 
9210: 73 74 72 75 63 74 20 57 69 74 68 20 57 69 74 68  struct With With
9220: 3b 0a 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 62 69  ;.../*.** The bi
9230: 74 6d 61 73 6b 20 64 61 74 61 74 79 70 65 20 64  tmask datatype d
9240: 65 66 69 6e 65 64 20 62 65 6c 6f 77 20 69 73 20  efined below is 
9250: 75 73 65 64 20 66 6f 72 20 76 61 72 69 6f 75 73  used for various
9260: 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73 2e 0a   optimizations..
9270: 2a 2a 0a 2a 2a 20 43 68 61 6e 67 69 6e 67 20 74  **.** Changing t
9280: 68 69 73 20 66 72 6f 6d 20 61 20 36 34 2d 62 69  his from a 64-bi
9290: 74 20 74 6f 20 61 20 33 32 2d 62 69 74 20 74 79  t to a 32-bit ty
92a0: 70 65 20 6c 69 6d 69 74 73 20 74 68 65 20 6e 75  pe limits the nu
92b0: 6d 62 65 72 20 6f 66 0a 2a 2a 20 74 61 62 6c 65  mber of.** table
92c0: 73 20 69 6e 20 61 20 6a 6f 69 6e 20 74 6f 20 33  s in a join to 3
92d0: 32 20 69 6e 73 74 65 61 64 20 6f 66 20 36 34 2e  2 instead of 64.
92e0: 20 20 42 75 74 20 69 74 20 61 6c 73 6f 20 72 65    But it also re
92f0: 64 75 63 65 73 20 74 68 65 20 73 69 7a 65 0a 2a  duces the size.*
9300: 2a 20 6f 66 20 74 68 65 20 6c 69 62 72 61 72 79  * of the library
9310: 20 62 79 20 37 33 38 20 62 79 74 65 73 20 6f 6e   by 738 bytes on
9320: 20 69 78 38 36 2e 0a 2a 2f 0a 23 69 66 64 65 66   ix86..*/.#ifdef
9330: 20 53 51 4c 49 54 45 5f 42 49 54 4d 41 53 4b 5f   SQLITE_BITMASK_
9340: 54 59 50 45 0a 20 20 74 79 70 65 64 65 66 20 53  TYPE.  typedef S
9350: 51 4c 49 54 45 5f 42 49 54 4d 41 53 4b 5f 54 59  QLITE_BITMASK_TY
9360: 50 45 20 42 69 74 6d 61 73 6b 3b 0a 23 65 6c 73  PE Bitmask;.#els
9370: 65 0a 20 20 74 79 70 65 64 65 66 20 75 36 34 20  e.  typedef u64 
9380: 42 69 74 6d 61 73 6b 3b 0a 23 65 6e 64 69 66 0a  Bitmask;.#endif.
9390: 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6e 75 6d 62 65  ./*.** The numbe
93a0: 72 20 6f 66 20 62 69 74 73 20 69 6e 20 61 20 42  r of bits in a B
93b0: 69 74 6d 61 73 6b 2e 20 20 22 42 4d 53 22 20 6d  itmask.  "BMS" m
93c0: 65 61 6e 73 20 22 42 69 74 4d 61 73 6b 20 53 69  eans "BitMask Si
93d0: 7a 65 22 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ze"..*/.#define 
93e0: 42 4d 53 20 20 28 28 69 6e 74 29 28 73 69 7a 65  BMS  ((int)(size
93f0: 6f 66 28 42 69 74 6d 61 73 6b 29 2a 38 29 29 0a  of(Bitmask)*8)).
9400: 0a 2f 2a 0a 2a 2a 20 41 20 62 69 74 20 69 6e 20  ./*.** A bit in 
9410: 61 20 42 69 74 6d 61 73 6b 0a 2a 2f 0a 23 64 65  a Bitmask.*/.#de
9420: 66 69 6e 65 20 4d 41 53 4b 42 49 54 28 6e 29 20  fine MASKBIT(n) 
9430: 20 20 28 28 28 42 69 74 6d 61 73 6b 29 31 29 3c    (((Bitmask)1)<
9440: 3c 28 6e 29 29 0a 23 64 65 66 69 6e 65 20 4d 41  <(n)).#define MA
9450: 53 4b 42 49 54 33 32 28 6e 29 20 28 28 28 75 6e  SKBIT32(n) (((un
9460: 73 69 67 6e 65 64 20 69 6e 74 29 31 29 3c 3c 28  signed int)1)<<(
9470: 6e 29 29 0a 23 64 65 66 69 6e 65 20 41 4c 4c 42  n)).#define ALLB
9480: 49 54 53 20 20 20 20 20 20 28 28 42 69 74 6d 61  ITS      ((Bitma
9490: 73 6b 29 2d 31 29 0a 0a 2f 2a 20 41 20 56 4c 69  sk)-1)../* A VLi
94a0: 73 74 20 6f 62 6a 65 63 74 20 72 65 63 6f 72 64  st object record
94b0: 73 20 61 20 6d 61 70 70 69 6e 67 20 62 65 74 77  s a mapping betw
94c0: 65 65 6e 20 70 61 72 61 6d 65 74 65 72 73 2f 76  een parameters/v
94d0: 61 72 69 61 62 6c 65 73 2f 77 69 6c 64 63 61 72  ariables/wildcar
94e0: 64 73 0a 2a 2a 20 69 6e 20 74 68 65 20 53 51 4c  ds.** in the SQL
94f0: 20 73 74 61 74 65 6d 65 6e 74 20 28 73 75 63 68   statement (such
9500: 20 61 73 20 24 61 62 63 2c 20 40 70 71 72 2c 20   as $abc, @pqr, 
9510: 6f 72 20 3a 78 79 7a 29 20 61 6e 64 20 74 68 65  or :xyz) and the
9520: 20 69 6e 74 65 67 65 72 0a 2a 2a 20 76 61 72 69   integer.** vari
9530: 61 62 6c 65 20 6e 75 6d 62 65 72 20 61 73 73 6f  able number asso
9540: 63 69 61 74 65 64 20 77 69 74 68 20 74 68 61 74  ciated with that
9550: 20 70 61 72 61 6d 65 74 65 72 2e 20 20 53 65 65   parameter.  See
9560: 20 74 68 65 20 66 6f 72 6d 61 74 20 64 65 73 63   the format desc
9570: 72 69 70 74 69 6f 6e 0a 2a 2a 20 6f 6e 20 74 68  ription.** on th
9580: 65 20 73 71 6c 69 74 65 33 56 4c 69 73 74 41 64  e sqlite3VListAd
9590: 64 28 29 20 72 6f 75 74 69 6e 65 20 66 6f 72 20  d() routine for 
95a0: 6d 6f 72 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  more information
95b0: 2e 20 20 41 20 56 4c 69 73 74 20 69 73 20 72 65  .  A VList is re
95c0: 61 6c 6c 79 0a 2a 2a 20 6a 75 73 74 20 61 6e 20  ally.** just an 
95d0: 61 72 72 61 79 20 6f 66 20 69 6e 74 65 67 65 72  array of integer
95e0: 73 2e 0a 2a 2f 0a 74 79 70 65 64 65 66 20 69 6e  s..*/.typedef in
95f0: 74 20 56 4c 69 73 74 3b 0a 0a 2f 2a 0a 2a 2a 20  t VList;../*.** 
9600: 44 65 66 65 72 20 73 6f 75 72 63 69 6e 67 20 76  Defer sourcing v
9610: 64 62 65 2e 68 20 61 6e 64 20 62 74 72 65 65 2e  dbe.h and btree.
9620: 68 20 75 6e 74 69 6c 20 61 66 74 65 72 20 74 68  h until after th
9630: 65 20 22 75 38 22 20 61 6e 64 0a 2a 2a 20 22 42  e "u8" and.** "B
9640: 75 73 79 48 61 6e 64 6c 65 72 22 20 74 79 70 65  usyHandler" type
9650: 64 65 66 73 2e 20 76 64 62 65 2e 68 20 61 6c 73  defs. vdbe.h als
9660: 6f 20 72 65 71 75 69 72 65 73 20 61 20 66 65 77  o requires a few
9670: 20 6f 66 20 74 68 65 20 6f 70 61 71 75 65 0a 2a   of the opaque.*
9680: 2a 20 70 6f 69 6e 74 65 72 20 74 79 70 65 73 20  * pointer types 
9690: 28 69 2e 65 2e 20 46 75 6e 63 44 65 66 29 20 64  (i.e. FuncDef) d
96a0: 65 66 69 6e 65 64 20 61 62 6f 76 65 2e 0a 2a 2f  efined above..*/
96b0: 0a 23 69 6e 63 6c 75 64 65 20 22 62 74 72 65 65  .#include "btree
96c0: 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20 22 76 64  .h".#include "vd
96d0: 62 65 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20 22  be.h".#include "
96e0: 70 61 67 65 72 2e 68 22 0a 23 69 6e 63 6c 75 64  pager.h".#includ
96f0: 65 20 22 70 63 61 63 68 65 2e 68 22 0a 23 69 6e  e "pcache.h".#in
9700: 63 6c 75 64 65 20 22 6f 73 2e 68 22 0a 23 69 6e  clude "os.h".#in
9710: 63 6c 75 64 65 20 22 6d 75 74 65 78 2e 68 22 0a  clude "mutex.h".
9720: 0a 2f 2a 20 54 68 65 20 53 51 4c 49 54 45 5f 45  ./* The SQLITE_E
9730: 58 54 52 41 5f 44 55 52 41 42 4c 45 20 63 6f 6d  XTRA_DURABLE com
9740: 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e  pile-time option
9750: 20 75 73 65 64 20 74 6f 20 73 65 74 20 74 68 65   used to set the
9760: 20 64 65 66 61 75 6c 74 0a 2a 2a 20 73 79 6e 63   default.** sync
9770: 68 72 6f 6e 6f 75 73 20 73 65 74 74 69 6e 67 20  hronous setting 
9780: 74 6f 20 45 58 54 52 41 2e 20 20 49 74 20 69 73  to EXTRA.  It is
9790: 20 6e 6f 20 6c 6f 6e 67 65 72 20 73 75 70 70 6f   no longer suppo
97a0: 72 74 65 64 2e 0a 2a 2f 0a 23 69 66 64 65 66 20  rted..*/.#ifdef 
97b0: 53 51 4c 49 54 45 5f 45 58 54 52 41 5f 44 55 52  SQLITE_EXTRA_DUR
97c0: 41 42 4c 45 0a 23 20 77 61 72 6e 69 6e 67 20 55  ABLE.# warning U
97d0: 73 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c  se SQLITE_DEFAUL
97e0: 54 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 3d 33 20  T_SYNCHRONOUS=3 
97f0: 69 6e 73 74 65 61 64 20 6f 66 20 53 51 4c 49 54  instead of SQLIT
9800: 45 5f 45 58 54 52 41 5f 44 55 52 41 42 4c 45 0a  E_EXTRA_DURABLE.
9810: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
9820: 44 45 46 41 55 4c 54 5f 53 59 4e 43 48 52 4f 4e  DEFAULT_SYNCHRON
9830: 4f 55 53 20 33 0a 23 65 6e 64 69 66 0a 0a 2f 2a  OUS 3.#endif../*
9840: 0a 2a 2a 20 44 65 66 61 75 6c 74 20 73 79 6e 63  .** Default sync
9850: 68 72 6f 6e 6f 75 73 20 6c 65 76 65 6c 73 2e 0a  hronous levels..
9860: 2a 2a 0a 2a 2a 20 4e 6f 74 65 20 74 68 61 74 20  **.** Note that 
9870: 28 66 6f 72 20 68 69 73 74 6f 72 63 61 6c 20 72  (for historcal r
9880: 65 61 73 6f 6e 73 29 20 74 68 65 20 50 41 47 45  easons) the PAGE
9890: 52 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 5f 2a 20  R_SYNCHRONOUS_* 
98a0: 6d 61 63 72 6f 73 20 64 69 66 66 65 72 0a 2a 2a  macros differ.**
98b0: 20 66 72 6f 6d 20 74 68 65 20 53 51 4c 49 54 45   from the SQLITE
98c0: 5f 44 45 46 41 55 4c 54 5f 53 59 4e 43 48 52 4f  _DEFAULT_SYNCHRO
98d0: 4e 4f 55 53 20 76 61 6c 75 65 20 62 79 20 31 2e  NOUS value by 1.
98e0: 0a 2a 2a 0a 2a 2a 20 20 20 20 20 20 20 20 20 20  .**.**          
98f0: 20 50 41 47 45 52 5f 53 59 4e 43 48 52 4f 4e 4f   PAGER_SYNCHRONO
9900: 55 53 20 20 20 20 20 20 20 44 45 46 41 55 4c 54  US       DEFAULT
9910: 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 0a 2a 2a 20  _SYNCHRONOUS.** 
9920: 20 20 4f 46 46 20 20 20 20 20 20 20 20 20 20 20    OFF           
9930: 31 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  1               
9940: 20 20 20 20 20 20 20 20 20 20 30 0a 2a 2a 20 20            0.**  
9950: 20 4e 4f 52 4d 41 4c 20 20 20 20 20 20 20 20 32   NORMAL        2
9960: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9970: 20 20 20 20 20 20 20 20 20 31 0a 2a 2a 20 20 20           1.**   
9980: 46 55 4c 4c 20 20 20 20 20 20 20 20 20 20 33 20  FULL          3 
9990: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
99a0: 20 20 20 20 20 20 20 20 32 0a 2a 2a 20 20 20 45          2.**   E
99b0: 58 54 52 41 20 20 20 20 20 20 20 20 20 34 20 20  XTRA         4  
99c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
99d0: 20 20 20 20 20 20 20 33 0a 2a 2a 0a 2a 2a 20 54         3.**.** T
99e0: 68 65 20 22 50 52 41 47 4d 41 20 73 79 6e 63 68  he "PRAGMA synch
99f0: 72 6f 6e 6f 75 73 22 20 73 74 61 74 65 6d 65 6e  ronous" statemen
9a00: 74 20 61 6c 73 6f 20 75 73 65 73 20 74 68 65 20  t also uses the 
9a10: 7a 65 72 6f 2d 62 61 73 65 64 20 6e 75 6d 62 65  zero-based numbe
9a20: 72 73 2e 0a 2a 2a 20 49 6e 20 6f 74 68 65 72 20  rs..** In other 
9a30: 77 6f 72 64 73 2c 20 74 68 65 20 7a 65 72 6f 2d  words, the zero-
9a40: 62 61 73 65 64 20 6e 75 6d 62 65 72 73 20 61 72  based numbers ar
9a50: 65 20 75 73 65 64 20 66 6f 72 20 61 6c 6c 20 65  e used for all e
9a60: 78 74 65 72 6e 61 6c 20 69 6e 74 65 72 66 61 63  xternal interfac
9a70: 65 73 0a 2a 2a 20 61 6e 64 20 74 68 65 20 6f 6e  es.** and the on
9a80: 65 2d 62 61 73 65 64 20 76 61 6c 75 65 73 20 61  e-based values a
9a90: 72 65 20 75 73 65 64 20 69 6e 74 65 72 6e 61 6c  re used internal
9aa0: 6c 79 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53  ly..*/.#ifndef S
9ab0: 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 53 59  QLITE_DEFAULT_SY
9ac0: 4e 43 48 52 4f 4e 4f 55 53 0a 23 20 64 65 66 69  NCHRONOUS.# defi
9ad0: 6e 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c  ne SQLITE_DEFAUL
9ae0: 54 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 20 32 0a  T_SYNCHRONOUS 2.
9af0: 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53  #endif.#ifndef S
9b00: 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 57 41  QLITE_DEFAULT_WA
9b10: 4c 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 0a 23 20  L_SYNCHRONOUS.# 
9b20: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 45  define SQLITE_DE
9b30: 46 41 55 4c 54 5f 57 41 4c 5f 53 59 4e 43 48 52  FAULT_WAL_SYNCHR
9b40: 4f 4e 4f 55 53 20 53 51 4c 49 54 45 5f 44 45 46  ONOUS SQLITE_DEF
9b50: 41 55 4c 54 5f 53 59 4e 43 48 52 4f 4e 4f 55 53  AULT_SYNCHRONOUS
9b60: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 45  .#endif../*.** E
9b70: 61 63 68 20 64 61 74 61 62 61 73 65 20 66 69 6c  ach database fil
9b80: 65 20 74 6f 20 62 65 20 61 63 63 65 73 73 65 64  e to be accessed
9b90: 20 62 79 20 74 68 65 20 73 79 73 74 65 6d 20 69   by the system i
9ba0: 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 0a 2a 2a  s an instance.**
9bb0: 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   of the followin
9bc0: 67 20 73 74 72 75 63 74 75 72 65 2e 20 20 54 68  g structure.  Th
9bd0: 65 72 65 20 61 72 65 20 6e 6f 72 6d 61 6c 6c 79  ere are normally
9be0: 20 74 77 6f 20 6f 66 20 74 68 65 73 65 20 73 74   two of these st
9bf0: 72 75 63 74 75 72 65 73 0a 2a 2a 20 69 6e 20 74  ructures.** in t
9c00: 68 65 20 73 71 6c 69 74 65 2e 61 44 62 5b 5d 20  he sqlite.aDb[] 
9c10: 61 72 72 61 79 2e 20 20 61 44 62 5b 30 5d 20 69  array.  aDb[0] i
9c20: 73 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62  s the main datab
9c30: 61 73 65 20 66 69 6c 65 20 61 6e 64 0a 2a 2a 20  ase file and.** 
9c40: 61 44 62 5b 31 5d 20 69 73 20 74 68 65 20 64 61  aDb[1] is the da
9c50: 74 61 62 61 73 65 20 66 69 6c 65 20 75 73 65 64  tabase file used
9c60: 20 74 6f 20 68 6f 6c 64 20 74 65 6d 70 6f 72 61   to hold tempora
9c70: 72 79 20 74 61 62 6c 65 73 2e 20 20 41 64 64 69  ry tables.  Addi
9c80: 74 69 6f 6e 61 6c 0a 2a 2a 20 64 61 74 61 62 61  tional.** databa
9c90: 73 65 73 20 6d 61 79 20 62 65 20 61 74 74 61 63  ses may be attac
9ca0: 68 65 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 44  hed..*/.struct D
9cb0: 62 20 7b 0a 20 20 63 68 61 72 20 2a 7a 44 62 53  b {.  char *zDbS
9cc0: 4e 61 6d 65 3b 20 20 20 20 20 20 2f 2a 20 4e 61  Name;      /* Na
9cd0: 6d 65 20 6f 66 20 74 68 69 73 20 64 61 74 61 62  me of this datab
9ce0: 61 73 65 2e 20 28 73 63 68 65 6d 61 20 6e 61 6d  ase. (schema nam
9cf0: 65 2c 20 6e 6f 74 20 66 69 6c 65 6e 61 6d 65 29  e, not filename)
9d00: 20 2a 2f 0a 20 20 42 74 72 65 65 20 2a 70 42 74   */.  Btree *pBt
9d10: 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68  ;          /* Th
9d20: 65 20 42 2a 54 72 65 65 20 73 74 72 75 63 74 75  e B*Tree structu
9d30: 72 65 20 66 6f 72 20 74 68 69 73 20 64 61 74 61  re for this data
9d40: 62 61 73 65 20 66 69 6c 65 20 2a 2f 0a 20 20 75  base file */.  u
9d50: 38 20 73 61 66 65 74 79 5f 6c 65 76 65 6c 3b 20  8 safety_level; 
9d60: 20 20 20 20 2f 2a 20 48 6f 77 20 61 67 67 72 65      /* How aggre
9d70: 73 73 69 76 65 20 61 74 20 73 79 6e 63 69 6e 67  ssive at syncing
9d80: 20 64 61 74 61 20 74 6f 20 64 69 73 6b 20 2a 2f   data to disk */
9d90: 0a 20 20 75 38 20 62 53 79 6e 63 53 65 74 3b 20  .  u8 bSyncSet; 
9da0: 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20          /* True 
9db0: 69 66 20 22 50 52 41 47 4d 41 20 73 79 6e 63 68  if "PRAGMA synch
9dc0: 72 6f 6e 6f 75 73 3d 4e 22 20 68 61 73 20 62 65  ronous=N" has be
9dd0: 65 6e 20 72 75 6e 20 2a 2f 0a 20 20 53 63 68 65  en run */.  Sche
9de0: 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20 20 20 20  ma *pSchema;    
9df0: 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 64   /* Pointer to d
9e00: 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 20 28  atabase schema (
9e10: 70 6f 73 73 69 62 6c 79 20 73 68 61 72 65 64 29  possibly shared)
9e20: 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e   */.};../*.** An
9e30: 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65   instance of the
9e40: 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63   following struc
9e50: 74 75 72 65 20 73 74 6f 72 65 73 20 61 20 64 61  ture stores a da
9e60: 74 61 62 61 73 65 20 73 63 68 65 6d 61 2e 0a 2a  tabase schema..*
9e70: 2a 0a 2a 2a 20 4d 6f 73 74 20 53 63 68 65 6d 61  *.** Most Schema
9e80: 20 6f 62 6a 65 63 74 73 20 61 72 65 20 61 73 73   objects are ass
9e90: 6f 63 69 61 74 65 64 20 77 69 74 68 20 61 20 42  ociated with a B
9ea0: 74 72 65 65 2e 20 20 54 68 65 20 65 78 63 65 70  tree.  The excep
9eb0: 74 69 6f 6e 20 69 73 0a 2a 2a 20 74 68 65 20 53  tion is.** the S
9ec0: 63 68 65 6d 61 20 66 6f 72 20 74 68 65 20 54 45  chema for the TE
9ed0: 4d 50 20 64 61 74 61 62 61 65 73 20 28 73 71 6c  MP databaes (sql
9ee0: 69 74 65 33 2e 61 44 62 5b 31 5d 29 20 77 68 69  ite3.aDb[1]) whi
9ef0: 63 68 20 69 73 20 66 72 65 65 2d 73 74 61 6e 64  ch is free-stand
9f00: 69 6e 67 2e 0a 2a 2a 20 49 6e 20 73 68 61 72 65  ing..** In share
9f10: 64 20 63 61 63 68 65 20 6d 6f 64 65 2c 20 61 20  d cache mode, a 
9f20: 73 69 6e 67 6c 65 20 53 63 68 65 6d 61 20 6f 62  single Schema ob
9f30: 6a 65 63 74 20 63 61 6e 20 62 65 20 73 68 61 72  ject can be shar
9f40: 65 64 20 62 79 20 6d 75 6c 74 69 70 6c 65 0a 2a  ed by multiple.*
9f50: 2a 20 42 74 72 65 65 73 20 74 68 61 74 20 72 65  * Btrees that re
9f60: 66 65 72 20 74 6f 20 74 68 65 20 73 61 6d 65 20  fer to the same 
9f70: 75 6e 64 65 72 6c 79 69 6e 67 20 42 74 53 68 61  underlying BtSha
9f80: 72 65 64 20 6f 62 6a 65 63 74 2e 0a 2a 2a 0a 2a  red object..**.*
9f90: 2a 20 53 63 68 65 6d 61 20 6f 62 6a 65 63 74 73  * Schema objects
9fa0: 20 61 72 65 20 61 75 74 6f 6d 61 74 69 63 61 6c   are automatical
9fb0: 6c 79 20 64 65 61 6c 6c 6f 63 61 74 65 64 20 77  ly deallocated w
9fc0: 68 65 6e 20 74 68 65 20 6c 61 73 74 20 42 74 72  hen the last Btr
9fd0: 65 65 20 74 68 61 74 0a 2a 2a 20 72 65 66 65 72  ee that.** refer
9fe0: 65 6e 63 65 73 20 74 68 65 6d 20 69 73 20 64 65  ences them is de
9ff0: 73 74 72 6f 79 65 64 2e 20 20 20 54 68 65 20 54  stroyed.   The T
a000: 45 4d 50 20 53 63 68 65 6d 61 20 69 73 20 6d 61  EMP Schema is ma
a010: 6e 75 61 6c 6c 79 20 66 72 65 65 64 20 62 79 0a  nually freed by.
a020: 2a 2a 20 73 71 6c 69 74 65 33 5f 63 6c 6f 73 65  ** sqlite3_close
a030: 28 29 2e 0a 2a 0a 2a 2a 20 41 20 74 68 72 65 61  ()..*.** A threa
a040: 64 20 6d 75 73 74 20 62 65 20 68 6f 6c 64 69 6e  d must be holdin
a050: 67 20 61 20 6d 75 74 65 78 20 6f 6e 20 74 68 65  g a mutex on the
a060: 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 42   corresponding B
a070: 74 72 65 65 20 69 6e 20 6f 72 64 65 72 0a 2a 2a  tree in order.**
a080: 20 74 6f 20 61 63 63 65 73 73 20 53 63 68 65 6d   to access Schem
a090: 61 20 63 6f 6e 74 65 6e 74 2e 20 20 54 68 69 73  a content.  This
a0a0: 20 69 6d 70 6c 69 65 73 20 74 68 61 74 20 74 68   implies that th
a0b0: 65 20 74 68 72 65 61 64 20 6d 75 73 74 20 61 6c  e thread must al
a0c0: 73 6f 20 62 65 0a 2a 2a 20 68 6f 6c 64 69 6e 67  so be.** holding
a0d0: 20 61 20 6d 75 74 65 78 20 6f 6e 20 74 68 65 20   a mutex on the 
a0e0: 73 71 6c 69 74 65 33 20 63 6f 6e 6e 65 63 74 69  sqlite3 connecti
a0f0: 6f 6e 20 70 6f 69 6e 74 65 72 20 74 68 61 74 20  on pointer that 
a100: 6f 77 6e 73 20 74 68 65 20 42 74 72 65 65 2e 0a  owns the Btree..
a110: 2a 2a 20 46 6f 72 20 61 20 54 45 4d 50 20 53 63  ** For a TEMP Sc
a120: 68 65 6d 61 2c 20 6f 6e 6c 79 20 74 68 65 20 63  hema, only the c
a130: 6f 6e 6e 65 63 74 69 6f 6e 20 6d 75 74 65 78 20  onnection mutex 
a140: 69 73 20 72 65 71 75 69 72 65 64 2e 0a 2a 2f 0a  is required..*/.
a150: 73 74 72 75 63 74 20 53 63 68 65 6d 61 20 7b 0a  struct Schema {.
a160: 20 20 69 6e 74 20 73 63 68 65 6d 61 5f 63 6f 6f    int schema_coo
a170: 6b 69 65 3b 20 20 20 2f 2a 20 44 61 74 61 62 61  kie;   /* Databa
a180: 73 65 20 73 63 68 65 6d 61 20 76 65 72 73 69 6f  se schema versio
a190: 6e 20 6e 75 6d 62 65 72 20 66 6f 72 20 74 68 69  n number for thi
a1a0: 73 20 66 69 6c 65 20 2a 2f 0a 20 20 69 6e 74 20  s file */.  int 
a1b0: 69 47 65 6e 65 72 61 74 69 6f 6e 3b 20 20 20 20  iGeneration;    
a1c0: 20 2f 2a 20 47 65 6e 65 72 61 74 69 6f 6e 20 63   /* Generation c
a1d0: 6f 75 6e 74 65 72 2e 20 20 49 6e 63 72 65 6d 65  ounter.  Increme
a1e0: 6e 74 65 64 20 77 69 74 68 20 65 61 63 68 20 63  nted with each c
a1f0: 68 61 6e 67 65 20 2a 2f 0a 20 20 48 61 73 68 20  hange */.  Hash 
a200: 74 62 6c 48 61 73 68 3b 20 20 20 20 20 20 20 20  tblHash;        
a210: 2f 2a 20 41 6c 6c 20 74 61 62 6c 65 73 20 69 6e  /* All tables in
a220: 64 65 78 65 64 20 62 79 20 6e 61 6d 65 20 2a 2f  dexed by name */
a230: 0a 20 20 48 61 73 68 20 69 64 78 48 61 73 68 3b  .  Hash idxHash;
a240: 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20 28          /* All (
a250: 6e 61 6d 65 64 29 20 69 6e 64 69 63 65 73 20 69  named) indices i
a260: 6e 64 65 78 65 64 20 62 79 20 6e 61 6d 65 20 2a  ndexed by name *
a270: 2f 0a 20 20 48 61 73 68 20 74 72 69 67 48 61 73  /.  Hash trigHas
a280: 68 3b 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20  h;       /* All 
a290: 74 72 69 67 67 65 72 73 20 69 6e 64 65 78 65 64  triggers indexed
a2a0: 20 62 79 20 6e 61 6d 65 20 2a 2f 0a 20 20 48 61   by name */.  Ha
a2b0: 73 68 20 66 6b 65 79 48 61 73 68 3b 20 20 20 20  sh fkeyHash;    
a2c0: 20 20 20 2f 2a 20 41 6c 6c 20 66 6f 72 65 69 67     /* All foreig
a2d0: 6e 20 6b 65 79 73 20 62 79 20 72 65 66 65 72 65  n keys by refere
a2e0: 6e 63 65 64 20 74 61 62 6c 65 20 6e 61 6d 65 20  nced table name 
a2f0: 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70 53 65 71  */.  Table *pSeq
a300: 54 61 62 3b 20 20 20 20 20 20 2f 2a 20 54 68 65  Tab;      /* The
a310: 20 73 71 6c 69 74 65 5f 73 65 71 75 65 6e 63 65   sqlite_sequence
a320: 20 74 61 62 6c 65 20 75 73 65 64 20 62 79 20 41   table used by A
a330: 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 2a 2f 0a  UTOINCREMENT */.
a340: 20 20 75 38 20 66 69 6c 65 5f 66 6f 72 6d 61 74    u8 file_format
a350: 3b 20 20 20 20 20 20 2f 2a 20 53 63 68 65 6d 61  ;      /* Schema
a360: 20 66 6f 72 6d 61 74 20 76 65 72 73 69 6f 6e 20   format version 
a370: 66 6f 72 20 74 68 69 73 20 66 69 6c 65 20 2a 2f  for this file */
a380: 0a 20 20 75 38 20 65 6e 63 3b 20 20 20 20 20 20  .  u8 enc;      
a390: 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78 74 20          /* Text 
a3a0: 65 6e 63 6f 64 69 6e 67 20 75 73 65 64 20 62 79  encoding used by
a3b0: 20 74 68 69 73 20 64 61 74 61 62 61 73 65 20 2a   this database *
a3c0: 2f 0a 20 20 75 31 36 20 73 63 68 65 6d 61 46 6c  /.  u16 schemaFl
a3d0: 61 67 73 3b 20 20 20 20 20 2f 2a 20 46 6c 61 67  ags;     /* Flag
a3e0: 73 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  s associated wit
a3f0: 68 20 74 68 69 73 20 73 63 68 65 6d 61 20 2a 2f  h this schema */
a400: 0a 20 20 69 6e 74 20 63 61 63 68 65 5f 73 69 7a  .  int cache_siz
a410: 65 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65  e;      /* Numbe
a420: 72 20 6f 66 20 70 61 67 65 73 20 74 6f 20 75 73  r of pages to us
a430: 65 20 69 6e 20 74 68 65 20 63 61 63 68 65 20 2a  e in the cache *
a440: 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 73  /.};../*.** Thes
a450: 65 20 6d 61 63 72 6f 73 20 63 61 6e 20 62 65 20  e macros can be 
a460: 75 73 65 64 20 74 6f 20 74 65 73 74 2c 20 73 65  used to test, se
a470: 74 2c 20 6f 72 20 63 6c 65 61 72 20 62 69 74 73  t, or clear bits
a480: 20 69 6e 20 74 68 65 0a 2a 2a 20 44 62 2e 70 53   in the.** Db.pS
a490: 63 68 65 6d 61 2d 3e 66 6c 61 67 73 20 66 69 65  chema->flags fie
a4a0: 6c 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 44  ld..*/.#define D
a4b0: 62 48 61 73 50 72 6f 70 65 72 74 79 28 44 2c 49  bHasProperty(D,I
a4c0: 2c 50 29 20 20 20 20 20 28 28 28 44 29 2d 3e 61  ,P)     (((D)->a
a4d0: 44 62 5b 49 5d 2e 70 53 63 68 65 6d 61 2d 3e 73  Db[I].pSchema->s
a4e0: 63 68 65 6d 61 46 6c 61 67 73 26 28 50 29 29 3d  chemaFlags&(P))=
a4f0: 3d 28 50 29 29 0a 23 64 65 66 69 6e 65 20 44 62  =(P)).#define Db
a500: 48 61 73 41 6e 79 50 72 6f 70 65 72 74 79 28 44  HasAnyProperty(D
a510: 2c 49 2c 50 29 20 20 28 28 28 44 29 2d 3e 61 44  ,I,P)  (((D)->aD
a520: 62 5b 49 5d 2e 70 53 63 68 65 6d 61 2d 3e 73 63  b[I].pSchema->sc
a530: 68 65 6d 61 46 6c 61 67 73 26 28 50 29 29 21 3d  hemaFlags&(P))!=
a540: 30 29 0a 23 64 65 66 69 6e 65 20 44 62 53 65 74  0).#define DbSet
a550: 50 72 6f 70 65 72 74 79 28 44 2c 49 2c 50 29 20  Property(D,I,P) 
a560: 20 20 20 20 28 44 29 2d 3e 61 44 62 5b 49 5d 2e      (D)->aDb[I].
a570: 70 53 63 68 65 6d 61 2d 3e 73 63 68 65 6d 61 46  pSchema->schemaF
a580: 6c 61 67 73 7c 3d 28 50 29 0a 23 64 65 66 69 6e  lags|=(P).#defin
a590: 65 20 44 62 43 6c 65 61 72 50 72 6f 70 65 72 74  e DbClearPropert
a5a0: 79 28 44 2c 49 2c 50 29 20 20 20 28 44 29 2d 3e  y(D,I,P)   (D)->
a5b0: 61 44 62 5b 49 5d 2e 70 53 63 68 65 6d 61 2d 3e  aDb[I].pSchema->
a5c0: 73 63 68 65 6d 61 46 6c 61 67 73 26 3d 7e 28 50  schemaFlags&=~(P
a5d0: 29 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64  )../*.** Allowed
a5e0: 20 76 61 6c 75 65 73 20 66 6f 72 20 74 68 65 20   values for the 
a5f0: 44 42 2e 70 53 63 68 65 6d 61 2d 3e 66 6c 61 67  DB.pSchema->flag
a600: 73 20 66 69 65 6c 64 2e 0a 2a 2a 0a 2a 2a 20 54  s field..**.** T
a610: 68 65 20 44 42 5f 53 63 68 65 6d 61 4c 6f 61 64  he DB_SchemaLoad
a620: 65 64 20 66 6c 61 67 20 69 73 20 73 65 74 20 61  ed flag is set a
a630: 66 74 65 72 20 74 68 65 20 64 61 74 61 62 61 73  fter the databas
a640: 65 20 73 63 68 65 6d 61 20 68 61 73 20 62 65 65  e schema has bee
a650: 6e 0a 2a 2a 20 72 65 61 64 20 69 6e 74 6f 20 69  n.** read into i
a660: 6e 74 65 72 6e 61 6c 20 68 61 73 68 20 74 61 62  nternal hash tab
a670: 6c 65 73 2e 0a 2a 2a 0a 2a 2a 20 44 42 5f 55 6e  les..**.** DB_Un
a680: 72 65 73 65 74 56 69 65 77 73 20 6d 65 61 6e 73  resetViews means
a690: 20 74 68 61 74 20 6f 6e 65 20 6f 72 20 6d 6f 72   that one or mor
a6a0: 65 20 76 69 65 77 73 20 68 61 76 65 20 63 6f 6c  e views have col
a6b0: 75 6d 6e 20 6e 61 6d 65 73 20 74 68 61 74 0a 2a  umn names that.*
a6c0: 2a 20 68 61 76 65 20 62 65 65 6e 20 66 69 6c 6c  * have been fill
a6d0: 65 64 20 6f 75 74 2e 20 20 49 66 20 74 68 65 20  ed out.  If the 
a6e0: 73 63 68 65 6d 61 20 63 68 61 6e 67 65 73 2c 20  schema changes, 
a6f0: 74 68 65 73 65 20 63 6f 6c 75 6d 6e 20 6e 61 6d  these column nam
a700: 65 73 20 6d 69 67 68 74 0a 2a 2a 20 63 68 61 6e  es might.** chan
a710: 67 65 73 20 61 6e 64 20 73 6f 20 74 68 65 20 76  ges and so the v
a720: 69 65 77 20 77 69 6c 6c 20 6e 65 65 64 20 74 6f  iew will need to
a730: 20 62 65 20 72 65 73 65 74 2e 0a 2a 2f 0a 23 64   be reset..*/.#d
a740: 65 66 69 6e 65 20 44 42 5f 53 63 68 65 6d 61 4c  efine DB_SchemaL
a750: 6f 61 64 65 64 20 20 20 20 30 78 30 30 30 31 20  oaded    0x0001 
a760: 20 2f 2a 20 54 68 65 20 73 63 68 65 6d 61 20 68   /* The schema h
a770: 61 73 20 62 65 65 6e 20 6c 6f 61 64 65 64 20 2a  as been loaded *
a780: 2f 0a 23 64 65 66 69 6e 65 20 44 42 5f 55 6e 72  /.#define DB_Unr
a790: 65 73 65 74 56 69 65 77 73 20 20 20 20 30 78 30  esetViews    0x0
a7a0: 30 30 32 20 20 2f 2a 20 53 6f 6d 65 20 76 69 65  002  /* Some vie
a7b0: 77 73 20 68 61 76 65 20 64 65 66 69 6e 65 64 20  ws have defined 
a7c0: 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 2a 2f 0a  column names */.
a7d0: 23 64 65 66 69 6e 65 20 44 42 5f 45 6d 70 74 79  #define DB_Empty
a7e0: 20 20 20 20 20 20 20 20 20 20 20 30 78 30 30 30             0x000
a7f0: 34 20 20 2f 2a 20 54 68 65 20 66 69 6c 65 20 69  4  /* The file i
a800: 73 20 65 6d 70 74 79 20 28 6c 65 6e 67 74 68 20  s empty (length 
a810: 30 20 62 79 74 65 73 29 20 2a 2f 0a 23 64 65 66  0 bytes) */.#def
a820: 69 6e 65 20 44 42 5f 52 65 73 65 74 57 61 6e 74  ine DB_ResetWant
a830: 65 64 20 20 20 20 20 30 78 30 30 30 38 20 20 2f  ed     0x0008  /
a840: 2a 20 52 65 73 65 74 20 74 68 65 20 73 63 68 65  * Reset the sche
a850: 6d 61 20 77 68 65 6e 20 6e 53 63 68 65 6d 61 4c  ma when nSchemaL
a860: 6f 63 6b 3d 3d 30 20 2a 2f 0a 0a 2f 2a 0a 2a 2a  ock==0 */../*.**
a870: 20 54 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 64   The number of d
a880: 69 66 66 65 72 65 6e 74 20 6b 69 6e 64 73 20 6f  ifferent kinds o
a890: 66 20 74 68 69 6e 67 73 20 74 68 61 74 20 63 61  f things that ca
a8a0: 6e 20 62 65 20 6c 69 6d 69 74 65 64 0a 2a 2a 20  n be limited.** 
a8b0: 75 73 69 6e 67 20 74 68 65 20 73 71 6c 69 74 65  using the sqlite
a8c0: 33 5f 6c 69 6d 69 74 28 29 20 69 6e 74 65 72 66  3_limit() interf
a8d0: 61 63 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ace..*/.#define 
a8e0: 53 51 4c 49 54 45 5f 4e 5f 4c 49 4d 49 54 20 28  SQLITE_N_LIMIT (
a8f0: 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 57 4f 52  SQLITE_LIMIT_WOR
a900: 4b 45 52 5f 54 48 52 45 41 44 53 2b 31 29 0a 0a  KER_THREADS+1)..
a910: 2f 2a 0a 2a 2a 20 4c 6f 6f 6b 61 73 69 64 65 20  /*.** Lookaside 
a920: 6d 61 6c 6c 6f 63 20 69 73 20 61 20 73 65 74 20  malloc is a set 
a930: 6f 66 20 66 69 78 65 64 2d 73 69 7a 65 20 62 75  of fixed-size bu
a940: 66 66 65 72 73 20 74 68 61 74 20 63 61 6e 20 62  ffers that can b
a950: 65 20 75 73 65 64 0a 2a 2a 20 74 6f 20 73 61 74  e used.** to sat
a960: 69 73 66 79 20 73 6d 61 6c 6c 20 74 72 61 6e 73  isfy small trans
a970: 69 65 6e 74 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f  ient memory allo
a980: 63 61 74 69 6f 6e 20 72 65 71 75 65 73 74 73 20  cation requests 
a990: 66 6f 72 20 6f 62 6a 65 63 74 73 0a 2a 2a 20 61  for objects.** a
a9a0: 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 61  ssociated with a
a9b0: 20 70 61 72 74 69 63 75 6c 61 72 20 64 61 74 61   particular data
a9c0: 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e  base connection.
a9d0: 20 20 54 68 65 20 75 73 65 20 6f 66 0a 2a 2a 20    The use of.** 
a9e0: 6c 6f 6f 6b 61 73 69 64 65 20 6d 61 6c 6c 6f 63  lookaside malloc
a9f0: 20 70 72 6f 76 69 64 65 73 20 61 20 73 69 67 6e   provides a sign
aa00: 69 66 69 63 61 6e 74 20 70 65 72 66 6f 72 6d 61  ificant performa
aa10: 6e 63 65 20 65 6e 68 61 6e 63 65 6d 65 6e 74 0a  nce enhancement.
aa20: 2a 2a 20 28 61 70 70 72 6f 78 20 31 30 25 29 20  ** (approx 10%) 
aa30: 62 79 20 61 76 6f 69 64 69 6e 67 20 6e 75 6d 65  by avoiding nume
aa40: 72 6f 75 73 20 6d 61 6c 6c 6f 63 2f 66 72 65 65  rous malloc/free
aa50: 20 72 65 71 75 65 73 74 73 20 77 68 69 6c 65 20   requests while 
aa60: 70 61 72 73 69 6e 67 0a 2a 2a 20 53 51 4c 20 73  parsing.** SQL s
aa70: 74 61 74 65 6d 65 6e 74 73 2e 0a 2a 2a 0a 2a 2a  tatements..**.**
aa80: 20 54 68 65 20 4c 6f 6f 6b 61 73 69 64 65 20 73   The Lookaside s
aa90: 74 72 75 63 74 75 72 65 20 68 6f 6c 64 73 20 63  tructure holds c
aaa0: 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 69 6e 66  onfiguration inf
aab0: 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 74  ormation about t
aac0: 68 65 0a 2a 2a 20 6c 6f 6f 6b 61 73 69 64 65 20  he.** lookaside 
aad0: 6d 61 6c 6c 6f 63 20 73 75 62 73 79 73 74 65 6d  malloc subsystem
aae0: 2e 20 20 45 61 63 68 20 61 76 61 69 6c 61 62 6c  .  Each availabl
aaf0: 65 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74  e memory allocat
ab00: 69 6f 6e 20 69 6e 0a 2a 2a 20 74 68 65 20 6c 6f  ion in.** the lo
ab10: 6f 6b 61 73 69 64 65 20 73 75 62 73 79 73 74 65  okaside subsyste
ab20: 6d 20 69 73 20 73 74 6f 72 65 64 20 6f 6e 20 61  m is stored on a
ab30: 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 6f 66 20   linked list of 
ab40: 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74 0a 2a 2a  LookasideSlot.**
ab50: 20 6f 62 6a 65 63 74 73 2e 0a 2a 2a 0a 2a 2a 20   objects..**.** 
ab60: 4c 6f 6f 6b 61 73 69 64 65 20 61 6c 6c 6f 63 61  Lookaside alloca
ab70: 74 69 6f 6e 73 20 61 72 65 20 6f 6e 6c 79 20 61  tions are only a
ab80: 6c 6c 6f 77 65 64 20 66 6f 72 20 6f 62 6a 65 63  llowed for objec
ab90: 74 73 20 74 68 61 74 20 61 72 65 20 61 73 73 6f  ts that are asso
aba0: 63 69 61 74 65 64 0a 2a 2a 20 77 69 74 68 20 61  ciated.** with a
abb0: 20 70 61 72 74 69 63 75 6c 61 72 20 64 61 74 61   particular data
abc0: 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e  base connection.
abd0: 20 20 48 65 6e 63 65 2c 20 73 63 68 65 6d 61 20    Hence, schema 
abe0: 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 63 61 6e 6e  information cann
abf0: 6f 74 0a 2a 2a 20 62 65 20 73 74 6f 72 65 64 20  ot.** be stored 
ac00: 69 6e 20 6c 6f 6f 6b 61 73 69 64 65 20 62 65 63  in lookaside bec
ac10: 61 75 73 65 20 69 6e 20 73 68 61 72 65 64 20 63  ause in shared c
ac20: 61 63 68 65 20 6d 6f 64 65 20 74 68 65 20 73 63  ache mode the sc
ac30: 68 65 6d 61 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  hema information
ac40: 0a 2a 2a 20 69 73 20 73 68 61 72 65 64 20 62 79  .** is shared by
ac50: 20 6d 75 6c 74 69 70 6c 65 20 64 61 74 61 62 61   multiple databa
ac60: 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 73 2e 20  se connections. 
ac70: 20 54 68 65 72 65 66 6f 72 65 2c 20 77 68 69 6c   Therefore, whil
ac80: 65 20 70 61 72 73 69 6e 67 0a 2a 2a 20 73 63 68  e parsing.** sch
ac90: 65 6d 61 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2c  ema information,
aca0: 20 74 68 65 20 4c 6f 6f 6b 61 73 69 64 65 2e 62   the Lookaside.b
acb0: 45 6e 61 62 6c 65 64 20 66 6c 61 67 20 69 73 20  Enabled flag is 
acc0: 63 6c 65 61 72 65 64 20 73 6f 20 74 68 61 74 0a  cleared so that.
acd0: 2a 2a 20 6c 6f 6f 6b 61 73 69 64 65 20 61 6c 6c  ** lookaside all
ace0: 6f 63 61 74 69 6f 6e 73 20 61 72 65 20 6e 6f 74  ocations are not
acf0: 20 75 73 65 64 20 74 6f 20 63 6f 6e 73 74 72 75   used to constru
ad00: 63 74 20 74 68 65 20 73 63 68 65 6d 61 20 6f 62  ct the schema ob
ad10: 6a 65 63 74 73 2e 0a 2a 2f 0a 73 74 72 75 63 74  jects..*/.struct
ad20: 20 4c 6f 6f 6b 61 73 69 64 65 20 7b 0a 20 20 75   Lookaside {.  u
ad30: 33 32 20 62 44 69 73 61 62 6c 65 3b 20 20 20 20  32 bDisable;    
ad40: 20 20 20 20 20 20 20 2f 2a 20 4f 6e 6c 79 20 6f         /* Only o
ad50: 70 65 72 61 74 65 20 74 68 65 20 6c 6f 6f 6b 61  perate the looka
ad60: 73 69 64 65 20 77 68 65 6e 20 7a 65 72 6f 20 2a  side when zero *
ad70: 2f 0a 20 20 75 31 36 20 73 7a 3b 20 20 20 20 20  /.  u16 sz;     
ad80: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53              /* S
ad90: 69 7a 65 20 6f 66 20 65 61 63 68 20 62 75 66 66  ize of each buff
ada0: 65 72 20 69 6e 20 62 79 74 65 73 20 2a 2f 0a 20  er in bytes */. 
adb0: 20 75 38 20 62 4d 61 6c 6c 6f 63 65 64 3b 20 20   u8 bMalloced;  
adc0: 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65           /* True
add0: 20 69 66 20 70 53 74 61 72 74 20 6f 62 74 61 69   if pStart obtai
ade0: 6e 65 64 20 66 72 6f 6d 20 73 71 6c 69 74 65 33  ned from sqlite3
adf0: 5f 6d 61 6c 6c 6f 63 28 29 20 2a 2f 0a 20 20 75  _malloc() */.  u
ae00: 33 32 20 6e 53 6c 6f 74 3b 20 20 20 20 20 20 20  32 nSlot;       
ae10: 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
ae20: 20 6f 66 20 6c 6f 6f 6b 61 73 69 64 65 20 73 6c   of lookaside sl
ae30: 6f 74 73 20 61 6c 6c 6f 63 61 74 65 64 20 2a 2f  ots allocated */
ae40: 0a 20 20 75 33 32 20 61 6e 53 74 61 74 5b 33 5d  .  u32 anStat[3]
ae50: 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 30 3a  ;          /* 0:
ae60: 20 68 69 74 73 2e 20 20 31 3a 20 73 69 7a 65 20   hits.  1: size 
ae70: 6d 69 73 73 65 73 2e 20 20 32 3a 20 66 75 6c 6c  misses.  2: full
ae80: 20 6d 69 73 73 65 73 20 2a 2f 0a 20 20 4c 6f 6f   misses */.  Loo
ae90: 6b 61 73 69 64 65 53 6c 6f 74 20 2a 70 49 6e 69  kasideSlot *pIni
aea0: 74 3b 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20  t;   /* List of 
aeb0: 62 75 66 66 65 72 73 20 6e 6f 74 20 70 72 65 76  buffers not prev
aec0: 69 6f 75 73 6c 79 20 75 73 65 64 20 2a 2f 0a 20  iously used */. 
aed0: 20 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74 20 2a   LookasideSlot *
aee0: 70 46 72 65 65 3b 20 20 20 2f 2a 20 4c 69 73 74  pFree;   /* List
aef0: 20 6f 66 20 61 76 61 69 6c 61 62 6c 65 20 62 75   of available bu
af00: 66 66 65 72 73 20 2a 2f 0a 20 20 76 6f 69 64 20  ffers */.  void 
af10: 2a 70 53 74 61 72 74 3b 20 20 20 20 20 20 20 20  *pStart;        
af20: 20 20 20 2f 2a 20 46 69 72 73 74 20 62 79 74 65     /* First byte
af30: 20 6f 66 20 61 76 61 69 6c 61 62 6c 65 20 6d 65   of available me
af40: 6d 6f 72 79 20 73 70 61 63 65 20 2a 2f 0a 20 20  mory space */.  
af50: 76 6f 69 64 20 2a 70 45 6e 64 3b 20 20 20 20 20  void *pEnd;     
af60: 20 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74          /* First
af70: 20 62 79 74 65 20 70 61 73 74 20 65 6e 64 20 6f   byte past end o
af80: 66 20 61 76 61 69 6c 61 62 6c 65 20 73 70 61 63  f available spac
af90: 65 20 2a 2f 0a 7d 3b 0a 73 74 72 75 63 74 20 4c  e */.};.struct L
afa0: 6f 6f 6b 61 73 69 64 65 53 6c 6f 74 20 7b 0a 20  ookasideSlot {. 
afb0: 20 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74 20 2a   LookasideSlot *
afc0: 70 4e 65 78 74 3b 20 20 20 20 2f 2a 20 4e 65 78  pNext;    /* Nex
afd0: 74 20 62 75 66 66 65 72 20 69 6e 20 74 68 65 20  t buffer in the 
afe0: 6c 69 73 74 20 6f 66 20 66 72 65 65 20 62 75 66  list of free buf
aff0: 66 65 72 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  fers */.};../*.*
b000: 2a 20 41 20 68 61 73 68 20 74 61 62 6c 65 20 66  * A hash table f
b010: 6f 72 20 62 75 69 6c 74 2d 69 6e 20 66 75 6e 63  or built-in func
b020: 74 69 6f 6e 20 64 65 66 69 6e 69 74 69 6f 6e 73  tion definitions
b030: 2e 20 20 28 41 70 70 6c 69 63 61 74 69 6f 6e 2d  .  (Application-
b040: 64 65 66 69 6e 65 64 0a 2a 2a 20 66 75 6e 63 74  defined.** funct
b050: 69 6f 6e 73 20 75 73 65 20 61 20 72 65 67 75 6c  ions use a regul
b060: 61 72 20 74 61 62 6c 65 20 74 61 62 6c 65 20 66  ar table table f
b070: 72 6f 6d 20 68 61 73 68 2e 68 2e 29 0a 2a 2a 0a  rom hash.h.).**.
b080: 2a 2a 20 48 61 73 68 20 65 61 63 68 20 46 75 6e  ** Hash each Fun
b090: 63 44 65 66 20 73 74 72 75 63 74 75 72 65 20 69  cDef structure i
b0a0: 6e 74 6f 20 6f 6e 65 20 6f 66 20 74 68 65 20 46  nto one of the F
b0b0: 75 6e 63 44 65 66 48 61 73 68 2e 61 5b 5d 20 73  uncDefHash.a[] s
b0c0: 6c 6f 74 73 2e 0a 2a 2a 20 43 6f 6c 6c 69 73 69  lots..** Collisi
b0d0: 6f 6e 73 20 61 72 65 20 6f 6e 20 74 68 65 20 46  ons are on the F
b0e0: 75 6e 63 44 65 66 2e 75 2e 70 48 61 73 68 20 63  uncDef.u.pHash c
b0f0: 68 61 69 6e 2e 20 20 55 73 65 20 74 68 65 20 53  hain.  Use the S
b100: 51 4c 49 54 45 5f 46 55 4e 43 5f 48 41 53 48 28  QLITE_FUNC_HASH(
b110: 29 0a 2a 2a 20 6d 61 63 72 6f 20 74 6f 20 63 6f  ).** macro to co
b120: 6d 70 75 74 65 20 61 20 68 61 73 68 20 6f 6e 20  mpute a hash on 
b130: 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 6e 61 6d  the function nam
b140: 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  e..*/.#define SQ
b150: 4c 49 54 45 5f 46 55 4e 43 5f 48 41 53 48 5f 53  LITE_FUNC_HASH_S
b160: 5a 20 32 33 0a 73 74 72 75 63 74 20 46 75 6e 63  Z 23.struct Func
b170: 44 65 66 48 61 73 68 20 7b 0a 20 20 46 75 6e 63  DefHash {.  Func
b180: 44 65 66 20 2a 61 5b 53 51 4c 49 54 45 5f 46 55  Def *a[SQLITE_FU
b190: 4e 43 5f 48 41 53 48 5f 53 5a 5d 3b 20 20 20 20  NC_HASH_SZ];    
b1a0: 20 20 20 2f 2a 20 48 61 73 68 20 74 61 62 6c 65     /* Hash table
b1b0: 20 66 6f 72 20 66 75 6e 63 74 69 6f 6e 73 20 2a   for functions *
b1c0: 2f 0a 7d 3b 0a 23 64 65 66 69 6e 65 20 53 51 4c  /.};.#define SQL
b1d0: 49 54 45 5f 46 55 4e 43 5f 48 41 53 48 28 43 2c  ITE_FUNC_HASH(C,
b1e0: 4c 29 20 28 28 28 43 29 2b 28 4c 29 29 25 53 51  L) (((C)+(L))%SQ
b1f0: 4c 49 54 45 5f 46 55 4e 43 5f 48 41 53 48 5f 53  LITE_FUNC_HASH_S
b200: 5a 29 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54  Z)..#ifdef SQLIT
b210: 45 5f 55 53 45 52 5f 41 55 54 48 45 4e 54 49 43  E_USER_AUTHENTIC
b220: 41 54 49 4f 4e 0a 2f 2a 0a 2a 2a 20 49 6e 66 6f  ATION./*.** Info
b230: 72 6d 61 74 69 6f 6e 20 68 65 6c 64 20 69 6e 20  rmation held in 
b240: 74 68 65 20 22 73 71 6c 69 74 65 33 22 20 64 61  the "sqlite3" da
b250: 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f  tabase connectio
b260: 6e 20 6f 62 6a 65 63 74 20 61 6e 64 20 75 73 65  n object and use
b270: 64 0a 2a 2a 20 74 6f 20 6d 61 6e 61 67 65 20 75  d.** to manage u
b280: 73 65 72 20 61 75 74 68 65 6e 74 69 63 61 74 69  ser authenticati
b290: 6f 6e 2e 0a 2a 2f 0a 74 79 70 65 64 65 66 20 73  on..*/.typedef s
b2a0: 74 72 75 63 74 20 73 71 6c 69 74 65 33 5f 75 73  truct sqlite3_us
b2b0: 65 72 61 75 74 68 20 73 71 6c 69 74 65 33 5f 75  erauth sqlite3_u
b2c0: 73 65 72 61 75 74 68 3b 0a 73 74 72 75 63 74 20  serauth;.struct 
b2d0: 73 71 6c 69 74 65 33 5f 75 73 65 72 61 75 74 68  sqlite3_userauth
b2e0: 20 7b 0a 20 20 75 38 20 61 75 74 68 4c 65 76 65   {.  u8 authLeve
b2f0: 6c 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  l;              
b300: 20 20 20 2f 2a 20 43 75 72 72 65 6e 74 20 61 75     /* Current au
b310: 74 68 65 6e 74 69 63 61 74 69 6f 6e 20 6c 65 76  thentication lev
b320: 65 6c 20 2a 2f 0a 20 20 69 6e 74 20 6e 41 75 74  el */.  int nAut
b330: 68 50 57 3b 20 20 20 20 20 20 20 20 20 20 20 20  hPW;            
b340: 20 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66        /* Size of
b350: 20 74 68 65 20 7a 41 75 74 68 50 57 20 69 6e 20   the zAuthPW in 
b360: 62 79 74 65 73 20 2a 2f 0a 20 20 63 68 61 72 20  bytes */.  char 
b370: 2a 7a 41 75 74 68 50 57 3b 20 20 20 20 20 20 20  *zAuthPW;       
b380: 20 20 20 20 20 20 20 20 20 2f 2a 20 50 61 73 73           /* Pass
b390: 77 6f 72 64 20 75 73 65 64 20 74 6f 20 61 75 74  word used to aut
b3a0: 68 65 6e 74 69 63 61 74 65 20 2a 2f 0a 20 20 63  henticate */.  c
b3b0: 68 61 72 20 2a 7a 41 75 74 68 55 73 65 72 3b 20  har *zAuthUser; 
b3c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
b3d0: 55 73 65 72 20 6e 61 6d 65 20 75 73 65 64 20 74  User name used t
b3e0: 6f 20 61 75 74 68 65 6e 74 69 63 61 74 65 20 2a  o authenticate *
b3f0: 2f 0a 7d 3b 0a 0a 2f 2a 20 41 6c 6c 6f 77 65 64  /.};../* Allowed
b400: 20 76 61 6c 75 65 73 20 66 6f 72 20 73 71 6c 69   values for sqli
b410: 74 65 33 5f 75 73 65 72 61 75 74 68 2e 61 75 74  te3_userauth.aut
b420: 68 4c 65 76 65 6c 20 2a 2f 0a 23 64 65 66 69 6e  hLevel */.#defin
b430: 65 20 55 41 55 54 48 5f 55 6e 6b 6e 6f 77 6e 20  e UAUTH_Unknown 
b440: 20 20 20 20 30 20 20 20 20 20 2f 2a 20 41 75 74      0     /* Aut
b450: 68 65 6e 74 69 63 61 74 69 6f 6e 20 6e 6f 74 20  hentication not 
b460: 79 65 74 20 63 68 65 63 6b 65 64 20 2a 2f 0a 23  yet checked */.#
b470: 64 65 66 69 6e 65 20 55 41 55 54 48 5f 46 61 69  define UAUTH_Fai
b480: 6c 20 20 20 20 20 20 20 20 31 20 20 20 20 20 2f  l        1     /
b490: 2a 20 55 73 65 72 20 61 75 74 68 65 6e 74 69 63  * User authentic
b4a0: 61 74 69 6f 6e 20 66 61 69 6c 65 64 20 2a 2f 0a  ation failed */.
b4b0: 23 64 65 66 69 6e 65 20 55 41 55 54 48 5f 55 73  #define UAUTH_Us
b4c0: 65 72 20 20 20 20 20 20 20 20 32 20 20 20 20 20  er        2     
b4d0: 2f 2a 20 41 75 74 68 65 6e 74 69 63 61 74 65 64  /* Authenticated
b4e0: 20 61 73 20 61 20 6e 6f 72 6d 61 6c 20 75 73 65   as a normal use
b4f0: 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 55 41 55  r */.#define UAU
b500: 54 48 5f 41 64 6d 69 6e 20 20 20 20 20 20 20 33  TH_Admin       3
b510: 20 20 20 20 20 2f 2a 20 41 75 74 68 65 6e 74 69       /* Authenti
b520: 63 61 74 65 64 20 61 73 20 61 6e 20 61 64 6d 69  cated as an admi
b530: 6e 69 73 74 72 61 74 6f 72 20 2a 2f 0a 0a 2f 2a  nistrator */../*
b540: 20 46 75 6e 63 74 69 6f 6e 73 20 75 73 65 64 20   Functions used 
b550: 6f 6e 6c 79 20 62 79 20 75 73 65 72 20 61 75 74  only by user aut
b560: 68 6f 72 69 7a 61 74 69 6f 6e 20 6c 6f 67 69 63  horization logic
b570: 20 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 55   */.int sqlite3U
b580: 73 65 72 41 75 74 68 54 61 62 6c 65 28 63 6f 6e  serAuthTable(con
b590: 73 74 20 63 68 61 72 2a 29 3b 0a 69 6e 74 20 73  st char*);.int s
b5a0: 71 6c 69 74 65 33 55 73 65 72 41 75 74 68 43 68  qlite3UserAuthCh
b5b0: 65 63 6b 4c 6f 67 69 6e 28 73 71 6c 69 74 65 33  eckLogin(sqlite3
b5c0: 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 75 38  *,const char*,u8
b5d0: 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
b5e0: 55 73 65 72 41 75 74 68 49 6e 69 74 28 73 71 6c  UserAuthInit(sql
b5f0: 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  ite3*);.void sql
b600: 69 74 65 33 43 72 79 70 74 46 75 6e 63 28 73 71  ite3CryptFunc(sq
b610: 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69  lite3_context*,i
b620: 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  nt,sqlite3_value
b630: 2a 2a 29 3b 0a 0a 23 65 6e 64 69 66 20 2f 2a 20  **);..#endif /* 
b640: 53 51 4c 49 54 45 5f 55 53 45 52 5f 41 55 54 48  SQLITE_USER_AUTH
b650: 45 4e 54 49 43 41 54 49 4f 4e 20 2a 2f 0a 0a 2f  ENTICATION */../
b660: 2a 0a 2a 2a 20 74 79 70 65 64 65 66 20 66 6f 72  *.** typedef for
b670: 20 74 68 65 20 61 75 74 68 6f 72 69 7a 61 74 69   the authorizati
b680: 6f 6e 20 63 61 6c 6c 62 61 63 6b 20 66 75 6e 63  on callback func
b690: 74 69 6f 6e 2e 0a 2a 2f 0a 23 69 66 64 65 66 20  tion..*/.#ifdef 
b6a0: 53 51 4c 49 54 45 5f 55 53 45 52 5f 41 55 54 48  SQLITE_USER_AUTH
b6b0: 45 4e 54 49 43 41 54 49 4f 4e 0a 20 20 74 79 70  ENTICATION.  typ
b6c0: 65 64 65 66 20 69 6e 74 20 28 2a 73 71 6c 69 74  edef int (*sqlit
b6d0: 65 33 5f 78 61 75 74 68 29 28 76 6f 69 64 2a 2c  e3_xauth)(void*,
b6e0: 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c  int,const char*,
b6f0: 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73  const char*,cons
b700: 74 20 63 68 61 72 2a 2c 0a 20 20 20 20 20 20 20  t char*,.       
b710: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b720: 20 20 20 20 20 20 20 20 63 6f 6e 73 74 20 63 68          const ch
b730: 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  ar*, const char*
b740: 29 3b 0a 23 65 6c 73 65 0a 20 20 74 79 70 65 64  );.#else.  typed
b750: 65 66 20 69 6e 74 20 28 2a 73 71 6c 69 74 65 33  ef int (*sqlite3
b760: 5f 78 61 75 74 68 29 28 76 6f 69 64 2a 2c 69 6e  _xauth)(void*,in
b770: 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f  t,const char*,co
b780: 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20  nst char*,const 
b790: 63 68 61 72 2a 2c 0a 20 20 20 20 20 20 20 20 20  char*,.         
b7a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b7b0: 20 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72        const char
b7c0: 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e  *);.#endif..#ifn
b7d0: 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
b7e0: 44 45 50 52 45 43 41 54 45 44 0a 2f 2a 20 54 68  DEPRECATED./* Th
b7f0: 69 73 20 69 73 20 61 6e 20 65 78 74 72 61 20 53  is is an extra S
b800: 51 4c 49 54 45 5f 54 52 41 43 45 20 6d 61 63 72  QLITE_TRACE macr
b810: 6f 20 74 68 61 74 20 69 6e 64 69 63 61 74 65 73  o that indicates
b820: 20 22 6c 65 67 61 63 79 22 20 74 72 61 63 69 6e   "legacy" tracin
b830: 67 0a 2a 2a 20 69 6e 20 74 68 65 20 73 74 79 6c  g.** in the styl
b840: 65 20 6f 66 20 73 71 6c 69 74 65 33 5f 74 72 61  e of sqlite3_tra
b850: 63 65 28 29 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ce().*/.#define 
b860: 53 51 4c 49 54 45 5f 54 52 41 43 45 5f 4c 45 47  SQLITE_TRACE_LEG
b870: 41 43 59 20 20 20 20 20 20 20 20 20 20 30 78 34  ACY          0x4
b880: 30 20 20 20 20 20 2f 2a 20 55 73 65 20 74 68 65  0     /* Use the
b890: 20 6c 65 67 61 63 79 20 78 54 72 61 63 65 20 2a   legacy xTrace *
b8a0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
b8b0: 5f 54 52 41 43 45 5f 58 50 52 4f 46 49 4c 45 20  _TRACE_XPROFILE 
b8c0: 20 20 20 20 20 20 20 30 78 38 30 20 20 20 20 20         0x80     
b8d0: 2f 2a 20 55 73 65 20 74 68 65 20 6c 65 67 61 63  /* Use the legac
b8e0: 79 20 78 50 72 6f 66 69 6c 65 20 2a 2f 0a 23 65  y xProfile */.#e
b8f0: 6c 73 65 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  lse.#define SQLI
b900: 54 45 5f 54 52 41 43 45 5f 4c 45 47 41 43 59 20  TE_TRACE_LEGACY 
b910: 20 20 20 20 20 20 20 20 20 30 0a 23 64 65 66 69           0.#defi
b920: 6e 65 20 53 51 4c 49 54 45 5f 54 52 41 43 45 5f  ne SQLITE_TRACE_
b930: 58 50 52 4f 46 49 4c 45 20 20 20 20 20 20 20 20  XPROFILE        
b940: 30 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  0.#endif /* SQLI
b950: 54 45 5f 4f 4d 49 54 5f 44 45 50 52 45 43 41 54  TE_OMIT_DEPRECAT
b960: 45 44 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  ED */.#define SQ
b970: 4c 49 54 45 5f 54 52 41 43 45 5f 4e 4f 4e 4c 45  LITE_TRACE_NONLE
b980: 47 41 43 59 5f 4d 41 53 4b 20 20 30 78 30 66 20  GACY_MASK  0x0f 
b990: 20 20 20 20 2f 2a 20 4e 6f 72 6d 61 6c 20 66 6c      /* Normal fl
b9a0: 61 67 73 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 45  ags */.../*.** E
b9b0: 61 63 68 20 64 61 74 61 62 61 73 65 20 63 6f 6e  ach database con
b9c0: 6e 65 63 74 69 6f 6e 20 69 73 20 61 6e 20 69 6e  nection is an in
b9d0: 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f  stance of the fo
b9e0: 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72  llowing structur
b9f0: 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 73 71 6c  e..*/.struct sql
ba00: 69 74 65 33 20 7b 0a 20 20 73 71 6c 69 74 65 33  ite3 {.  sqlite3
ba10: 5f 76 66 73 20 2a 70 56 66 73 3b 20 20 20 20 20  _vfs *pVfs;     
ba20: 20 20 20 20 20 20 20 2f 2a 20 4f 53 20 49 6e 74         /* OS Int
ba30: 65 72 66 61 63 65 20 2a 2f 0a 20 20 73 74 72 75  erface */.  stru
ba40: 63 74 20 56 64 62 65 20 2a 70 56 64 62 65 3b 20  ct Vdbe *pVdbe; 
ba50: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 69 73            /* Lis
ba60: 74 20 6f 66 20 61 63 74 69 76 65 20 76 69 72 74  t of active virt
ba70: 75 61 6c 20 6d 61 63 68 69 6e 65 73 20 2a 2f 0a  ual machines */.
ba80: 20 20 43 6f 6c 6c 53 65 71 20 2a 70 44 66 6c 74    CollSeq *pDflt
ba90: 43 6f 6c 6c 3b 20 20 20 20 20 20 20 20 20 20 20  Coll;           
baa0: 2f 2a 20 54 68 65 20 64 65 66 61 75 6c 74 20 63  /* The default c
bab0: 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63  ollating sequenc
bac0: 65 20 28 42 49 4e 41 52 59 29 20 2a 2f 0a 20 20  e (BINARY) */.  
bad0: 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 20 2a 6d  sqlite3_mutex *m
bae0: 75 74 65 78 3b 20 20 20 20 20 20 20 20 20 2f 2a  utex;         /*
baf0: 20 43 6f 6e 6e 65 63 74 69 6f 6e 20 6d 75 74 65   Connection mute
bb00: 78 20 2a 2f 0a 20 20 44 62 20 2a 61 44 62 3b 20  x */.  Db *aDb; 
bb10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bb20: 20 20 20 20 20 2f 2a 20 41 6c 6c 20 62 61 63 6b       /* All back
bb30: 65 6e 64 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 44  ends */.  int nD
bb40: 62 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  b;              
bb50: 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
bb60: 72 20 6f 66 20 62 61 63 6b 65 6e 64 73 20 63 75  r of backends cu
bb70: 72 72 65 6e 74 6c 79 20 69 6e 20 75 73 65 20 2a  rrently in use *
bb80: 2f 0a 20 20 75 33 32 20 6d 44 62 46 6c 61 67 73  /.  u32 mDbFlags
bb90: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
bba0: 20 20 2f 2a 20 66 6c 61 67 73 20 72 65 63 6f 72    /* flags recor
bbb0: 64 69 6e 67 20 69 6e 74 65 72 6e 61 6c 20 73 74  ding internal st
bbc0: 61 74 65 20 2a 2f 0a 20 20 75 36 34 20 66 6c 61  ate */.  u64 fla
bbd0: 67 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  gs;             
bbe0: 20 20 20 20 20 20 20 2f 2a 20 66 6c 61 67 73 20         /* flags 
bbf0: 73 65 74 74 61 62 6c 65 20 62 79 20 70 72 61 67  settable by prag
bc00: 6d 61 73 2e 20 53 65 65 20 62 65 6c 6f 77 20 2a  mas. See below *
bc10: 2f 0a 20 20 69 36 34 20 6c 61 73 74 52 6f 77 69  /.  i64 lastRowi
bc20: 64 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  d;              
bc30: 20 20 2f 2a 20 52 4f 57 49 44 20 6f 66 20 6d 6f    /* ROWID of mo
bc40: 73 74 20 72 65 63 65 6e 74 20 69 6e 73 65 72 74  st recent insert
bc50: 20 28 73 65 65 20 61 62 6f 76 65 29 20 2a 2f 0a   (see above) */.
bc60: 20 20 69 36 34 20 73 7a 4d 6d 61 70 3b 20 20 20    i64 szMmap;   
bc70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bc80: 2f 2a 20 44 65 66 61 75 6c 74 20 6d 6d 61 70 5f  /* Default mmap_
bc90: 73 69 7a 65 20 73 65 74 74 69 6e 67 20 2a 2f 0a  size setting */.
bca0: 20 20 75 33 32 20 6e 53 63 68 65 6d 61 4c 6f 63    u32 nSchemaLoc
bcb0: 6b 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  k;              
bcc0: 2f 2a 20 44 6f 20 6e 6f 74 20 72 65 73 65 74 20  /* Do not reset 
bcd0: 74 68 65 20 73 63 68 65 6d 61 20 77 68 65 6e 20  the schema when 
bce0: 6e 6f 6e 2d 7a 65 72 6f 20 2a 2f 0a 20 20 75 6e  non-zero */.  un
bcf0: 73 69 67 6e 65 64 20 69 6e 74 20 6f 70 65 6e 46  signed int openF
bd00: 6c 61 67 73 3b 20 20 20 20 20 20 20 2f 2a 20 46  lags;       /* F
bd10: 6c 61 67 73 20 70 61 73 73 65 64 20 74 6f 20 73  lags passed to s
bd20: 71 6c 69 74 65 33 5f 76 66 73 2e 78 4f 70 65 6e  qlite3_vfs.xOpen
bd30: 28 29 20 2a 2f 0a 20 20 69 6e 74 20 65 72 72 43  () */.  int errC
bd40: 6f 64 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ode;            
bd50: 20 20 20 20 20 20 2f 2a 20 4d 6f 73 74 20 72 65        /* Most re
bd60: 63 65 6e 74 20 65 72 72 6f 72 20 63 6f 64 65 20  cent error code 
bd70: 28 53 51 4c 49 54 45 5f 2a 29 20 2a 2f 0a 20 20  (SQLITE_*) */.  
bd80: 69 6e 74 20 65 72 72 4d 61 73 6b 3b 20 20 20 20  int errMask;    
bd90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
bda0: 20 26 20 72 65 73 75 6c 74 20 63 6f 64 65 73 20   & result codes 
bdb0: 77 69 74 68 20 74 68 69 73 20 62 65 66 6f 72 65  with this before
bdc0: 20 72 65 74 75 72 6e 69 6e 67 20 2a 2f 0a 20 20   returning */.  
bdd0: 69 6e 74 20 69 53 79 73 45 72 72 6e 6f 3b 20 20  int iSysErrno;  
bde0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
bdf0: 20 45 72 72 6e 6f 20 76 61 6c 75 65 20 66 72 6f   Errno value fro
be00: 6d 20 6c 61 73 74 20 73 79 73 74 65 6d 20 65 72  m last system er
be10: 72 6f 72 20 2a 2f 0a 20 20 75 31 36 20 64 62 4f  ror */.  u16 dbO
be20: 70 74 46 6c 61 67 73 3b 20 20 20 20 20 20 20 20  ptFlags;        
be30: 20 20 20 20 20 20 20 2f 2a 20 46 6c 61 67 73 20         /* Flags 
be40: 74 6f 20 65 6e 61 62 6c 65 2f 64 69 73 61 62 6c  to enable/disabl
be50: 65 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73 20  e optimizations 
be60: 2a 2f 0a 20 20 75 38 20 65 6e 63 3b 20 20 20 20  */.  u8 enc;    
be70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
be80: 20 20 20 2f 2a 20 54 65 78 74 20 65 6e 63 6f 64     /* Text encod
be90: 69 6e 67 20 2a 2f 0a 20 20 75 38 20 61 75 74 6f  ing */.  u8 auto
bea0: 43 6f 6d 6d 69 74 3b 20 20 20 20 20 20 20 20 20  Commit;         
beb0: 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 61 75         /* The au
bec0: 74 6f 2d 63 6f 6d 6d 69 74 20 66 6c 61 67 2e 20  to-commit flag. 
bed0: 2a 2f 0a 20 20 75 38 20 74 65 6d 70 5f 73 74 6f  */.  u8 temp_sto
bee0: 72 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  re;             
bef0: 20 20 20 2f 2a 20 31 3a 20 66 69 6c 65 20 32 3a     /* 1: file 2:
bf00: 20 6d 65 6d 6f 72 79 20 30 3a 20 64 65 66 61 75   memory 0: defau
bf10: 6c 74 20 2a 2f 0a 20 20 75 38 20 6d 61 6c 6c 6f  lt */.  u8 mallo
bf20: 63 46 61 69 6c 65 64 3b 20 20 20 20 20 20 20 20  cFailed;        
bf30: 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66        /* True if
bf40: 20 77 65 20 68 61 76 65 20 73 65 65 6e 20 61 20   we have seen a 
bf50: 6d 61 6c 6c 6f 63 20 66 61 69 6c 75 72 65 20 2a  malloc failure *
bf60: 2f 0a 20 20 75 38 20 62 42 65 6e 69 67 6e 4d 61  /.  u8 bBenignMa
bf70: 6c 6c 6f 63 3b 20 20 20 20 20 20 20 20 20 20 20  lloc;           
bf80: 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 72 65 71 75    /* Do not requ
bf90: 69 72 65 20 4f 4f 4d 73 20 69 66 20 74 72 75 65  ire OOMs if true
bfa0: 20 2a 2f 0a 20 20 75 38 20 64 66 6c 74 4c 6f 63   */.  u8 dfltLoc
bfb0: 6b 4d 6f 64 65 3b 20 20 20 20 20 20 20 20 20 20  kMode;          
bfc0: 20 20 20 20 2f 2a 20 44 65 66 61 75 6c 74 20 6c      /* Default l
bfd0: 6f 63 6b 69 6e 67 2d 6d 6f 64 65 20 66 6f 72 20  ocking-mode for 
bfe0: 61 74 74 61 63 68 65 64 20 64 62 73 20 2a 2f 0a  attached dbs */.
bff0: 20 20 73 69 67 6e 65 64 20 63 68 61 72 20 6e 65    signed char ne
c000: 78 74 41 75 74 6f 76 61 63 3b 20 20 20 20 20 20  xtAutovac;      
c010: 2f 2a 20 41 75 74 6f 76 61 63 20 73 65 74 74 69  /* Autovac setti
c020: 6e 67 20 61 66 74 65 72 20 56 41 43 55 55 4d 20  ng after VACUUM 
c030: 69 66 20 3e 3d 30 20 2a 2f 0a 20 20 75 38 20 73  if >=0 */.  u8 s
c040: 75 70 70 72 65 73 73 45 72 72 3b 20 20 20 20 20  uppressErr;     
c050: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 6f 20            /* Do 
c060: 6e 6f 74 20 69 73 73 75 65 20 65 72 72 6f 72 20  not issue error 
c070: 6d 65 73 73 61 67 65 73 20 69 66 20 74 72 75 65  messages if true
c080: 20 2a 2f 0a 20 20 75 38 20 76 74 61 62 4f 6e 43   */.  u8 vtabOnC
c090: 6f 6e 66 6c 69 63 74 3b 20 20 20 20 20 20 20 20  onflict;        
c0a0: 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 74 6f 20      /* Value to 
c0b0: 72 65 74 75 72 6e 20 66 6f 72 20 73 33 5f 76 74  return for s3_vt
c0c0: 61 62 5f 6f 6e 5f 63 6f 6e 66 6c 69 63 74 28 29  ab_on_conflict()
c0d0: 20 2a 2f 0a 20 20 75 38 20 69 73 54 72 61 6e 73   */.  u8 isTrans
c0e0: 61 63 74 69 6f 6e 53 61 76 65 70 6f 69 6e 74 3b  actionSavepoint;
c0f0: 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 74      /* True if t
c100: 68 65 20 6f 75 74 65 72 6d 6f 73 74 20 73 61 76  he outermost sav
c110: 65 70 6f 69 6e 74 20 69 73 20 61 20 54 53 20 2a  epoint is a TS *
c120: 2f 0a 20 20 75 38 20 6d 54 72 61 63 65 3b 20 20  /.  u8 mTrace;  
c130: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c140: 20 20 2f 2a 20 7a 65 72 6f 20 6f 72 20 6d 6f 72    /* zero or mor
c150: 65 20 53 51 4c 49 54 45 5f 54 52 41 43 45 20 66  e SQLITE_TRACE f
c160: 6c 61 67 73 20 2a 2f 0a 20 20 75 38 20 6e 6f 53  lags */.  u8 noS
c170: 68 61 72 65 64 43 61 63 68 65 3b 20 20 20 20 20  haredCache;     
c180: 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20          /* True 
c190: 69 66 20 6e 6f 20 73 68 61 72 65 64 2d 63 61 63  if no shared-cac
c1a0: 68 65 20 62 61 63 6b 65 6e 64 73 20 2a 2f 0a 20  he backends */. 
c1b0: 20 75 38 20 6e 53 71 6c 45 78 65 63 3b 20 20 20   u8 nSqlExec;   
c1c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
c1d0: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 70 65 6e 64  * Number of pend
c1e0: 69 6e 67 20 4f 50 5f 53 71 6c 45 78 65 63 20 6f  ing OP_SqlExec o
c1f0: 70 63 6f 64 65 73 20 2a 2f 0a 20 20 69 6e 74 20  pcodes */.  int 
c200: 6e 65 78 74 50 61 67 65 73 69 7a 65 3b 20 20 20  nextPagesize;   
c210: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50 61 67            /* Pag
c220: 65 73 69 7a 65 20 61 66 74 65 72 20 56 41 43 55  esize after VACU
c230: 55 4d 20 69 66 20 3e 30 20 2a 2f 0a 20 20 75 33  UM if >0 */.  u3
c240: 32 20 6d 61 67 69 63 3b 20 20 20 20 20 20 20 20  2 magic;        
c250: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d              /* M
c260: 61 67 69 63 20 6e 75 6d 62 65 72 20 66 6f 72 20  agic number for 
c270: 64 65 74 65 63 74 20 6c 69 62 72 61 72 79 20 6d  detect library m
c280: 69 73 75 73 65 20 2a 2f 0a 20 20 69 6e 74 20 6e  isuse */.  int n
c290: 43 68 61 6e 67 65 3b 20 20 20 20 20 20 20 20 20  Change;         
c2a0: 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75           /* Valu
c2b0: 65 20 72 65 74 75 72 6e 65 64 20 62 79 20 73 71  e returned by sq
c2c0: 6c 69 74 65 33 5f 63 68 61 6e 67 65 73 28 29 20  lite3_changes() 
c2d0: 2a 2f 0a 20 20 69 6e 74 20 6e 54 6f 74 61 6c 43  */.  int nTotalC
c2e0: 68 61 6e 67 65 3b 20 20 20 20 20 20 20 20 20 20  hange;          
c2f0: 20 20 20 2f 2a 20 56 61 6c 75 65 20 72 65 74 75     /* Value retu
c300: 72 6e 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f  rned by sqlite3_
c310: 74 6f 74 61 6c 5f 63 68 61 6e 67 65 73 28 29 20  total_changes() 
c320: 2a 2f 0a 20 20 69 6e 74 20 61 4c 69 6d 69 74 5b  */.  int aLimit[
c330: 53 51 4c 49 54 45 5f 4e 5f 4c 49 4d 49 54 5d 3b  SQLITE_N_LIMIT];
c340: 20 20 20 2f 2a 20 4c 69 6d 69 74 73 20 2a 2f 0a     /* Limits */.
c350: 20 20 69 6e 74 20 6e 4d 61 78 53 6f 72 74 65 72    int nMaxSorter
c360: 4d 6d 61 70 3b 20 20 20 20 20 20 20 20 20 20 20  Mmap;           
c370: 2f 2a 20 4d 61 78 69 6d 75 6d 20 73 69 7a 65 20  /* Maximum size 
c380: 6f 66 20 72 65 67 69 6f 6e 73 20 6d 61 70 70 65  of regions mappe
c390: 64 20 62 79 20 73 6f 72 74 65 72 20 2a 2f 0a 20  d by sorter */. 
c3a0: 20 73 74 72 75 63 74 20 73 71 6c 69 74 65 33 49   struct sqlite3I
c3b0: 6e 69 74 49 6e 66 6f 20 7b 20 20 20 20 20 20 2f  nitInfo {      /
c3c0: 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 75 73  * Information us
c3d0: 65 64 20 64 75 72 69 6e 67 20 69 6e 69 74 69 61  ed during initia
c3e0: 6c 69 7a 61 74 69 6f 6e 20 2a 2f 0a 20 20 20 20  lization */.    
c3f0: 69 6e 74 20 6e 65 77 54 6e 75 6d 3b 20 20 20 20  int newTnum;    
c400: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52              /* R
c410: 6f 6f 74 70 61 67 65 20 6f 66 20 74 61 62 6c 65  ootpage of table
c420: 20 62 65 69 6e 67 20 69 6e 69 74 69 61 6c 69 7a   being initializ
c430: 65 64 20 2a 2f 0a 20 20 20 20 75 38 20 69 44 62  ed */.    u8 iDb
c440: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
c450: 20 20 20 20 20 20 2f 2a 20 57 68 69 63 68 20 64        /* Which d
c460: 62 20 66 69 6c 65 20 69 73 20 62 65 69 6e 67 20  b file is being 
c470: 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20  initialized */. 
c480: 20 20 20 75 38 20 62 75 73 79 3b 20 20 20 20 20     u8 busy;     
c490: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
c4a0: 2a 20 54 52 55 45 20 69 66 20 63 75 72 72 65 6e  * TRUE if curren
c4b0: 74 6c 79 20 69 6e 69 74 69 61 6c 69 7a 69 6e 67  tly initializing
c4c0: 20 2a 2f 0a 20 20 20 20 75 6e 73 69 67 6e 65 64   */.    unsigned
c4d0: 20 6f 72 70 68 61 6e 54 72 69 67 67 65 72 20 3a   orphanTrigger :
c4e0: 20 31 3b 20 2f 2a 20 4c 61 73 74 20 73 74 61 74   1; /* Last stat
c4f0: 65 6d 65 6e 74 20 69 73 20 6f 72 70 68 61 6e 65  ement is orphane
c500: 64 20 54 45 4d 50 20 74 72 69 67 67 65 72 20 2a  d TEMP trigger *
c510: 2f 0a 20 20 20 20 75 6e 73 69 67 6e 65 64 20 69  /.    unsigned i
c520: 6d 70 6f 73 74 65 72 54 61 62 6c 65 20 3a 20 31  mposterTable : 1
c530: 3b 20 2f 2a 20 42 75 69 6c 64 69 6e 67 20 61 6e  ; /* Building an
c540: 20 69 6d 70 6f 73 74 65 72 20 74 61 62 6c 65 20   imposter table 
c550: 2a 2f 0a 20 20 20 20 75 6e 73 69 67 6e 65 64 20  */.    unsigned 
c560: 72 65 6f 70 65 6e 4d 65 6d 64 62 20 3a 20 31 3b  reopenMemdb : 1;
c570: 20 20 20 2f 2a 20 41 54 54 41 43 48 20 69 73 20     /* ATTACH is 
c580: 72 65 61 6c 6c 79 20 61 20 72 65 6f 70 65 6e 20  really a reopen 
c590: 75 73 69 6e 67 20 4d 65 6d 44 42 20 2a 2f 0a 20  using MemDB */. 
c5a0: 20 7d 20 69 6e 69 74 3b 0a 20 20 69 6e 74 20 6e   } init;.  int n
c5b0: 56 64 62 65 41 63 74 69 76 65 3b 20 20 20 20 20  VdbeActive;     
c5c0: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
c5d0: 65 72 20 6f 66 20 56 44 42 45 73 20 63 75 72 72  er of VDBEs curr
c5e0: 65 6e 74 6c 79 20 72 75 6e 6e 69 6e 67 20 2a 2f  ently running */
c5f0: 0a 20 20 69 6e 74 20 6e 56 64 62 65 52 65 61 64  .  int nVdbeRead
c600: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
c610: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 63   /* Number of ac
c620: 74 69 76 65 20 56 44 42 45 73 20 74 68 61 74 20  tive VDBEs that 
c630: 72 65 61 64 20 6f 72 20 77 72 69 74 65 20 2a 2f  read or write */
c640: 0a 20 20 69 6e 74 20 6e 56 64 62 65 57 72 69 74  .  int nVdbeWrit
c650: 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e;              
c660: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 63   /* Number of ac
c670: 74 69 76 65 20 56 44 42 45 73 20 74 68 61 74 20  tive VDBEs that 
c680: 72 65 61 64 20 61 6e 64 20 77 72 69 74 65 20 2a  read and write *
c690: 2f 0a 20 20 69 6e 74 20 6e 56 64 62 65 45 78 65  /.  int nVdbeExe
c6a0: 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  c;              
c6b0: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6e    /* Number of n
c6c0: 65 73 74 65 64 20 63 61 6c 6c 73 20 74 6f 20 56  ested calls to V
c6d0: 64 62 65 45 78 65 63 28 29 20 2a 2f 0a 20 20 69  dbeExec() */.  i
c6e0: 6e 74 20 6e 56 44 65 73 74 72 6f 79 3b 20 20 20  nt nVDestroy;   
c6f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
c700: 4e 75 6d 62 65 72 20 6f 66 20 61 63 74 69 76 65  Number of active
c710: 20 4f 50 5f 56 44 65 73 74 72 6f 79 20 6f 70 65   OP_VDestroy ope
c720: 72 61 74 69 6f 6e 73 20 2a 2f 0a 20 20 69 6e 74  rations */.  int
c730: 20 6e 45 78 74 65 6e 73 69 6f 6e 3b 20 20 20 20   nExtension;    
c740: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
c750: 6d 62 65 72 20 6f 66 20 6c 6f 61 64 65 64 20 65  mber of loaded e
c760: 78 74 65 6e 73 69 6f 6e 73 20 2a 2f 0a 20 20 76  xtensions */.  v
c770: 6f 69 64 20 2a 2a 61 45 78 74 65 6e 73 69 6f 6e  oid **aExtension
c780: 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
c790: 41 72 72 61 79 20 6f 66 20 73 68 61 72 65 64 20  Array of shared 
c7a0: 6c 69 62 72 61 72 79 20 68 61 6e 64 6c 65 73 20  library handles 
c7b0: 2a 2f 0a 20 20 69 6e 74 20 28 2a 78 54 72 61 63  */.  int (*xTrac
c7c0: 65 29 28 75 33 32 2c 76 6f 69 64 2a 2c 76 6f 69  e)(u32,void*,voi
c7d0: 64 2a 2c 76 6f 69 64 2a 29 3b 20 20 20 20 20 2f  d*,void*);     /
c7e0: 2a 20 54 72 61 63 65 20 66 75 6e 63 74 69 6f 6e  * Trace function
c7f0: 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 54 72 61   */.  void *pTra
c800: 63 65 41 72 67 3b 20 20 20 20 20 20 20 20 20 20  ceArg;          
c810: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c820: 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f 20 74  /* Argument to t
c830: 68 65 20 74 72 61 63 65 20 66 75 6e 63 74 69 6f  he trace functio
c840: 6e 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c  n */.#ifndef SQL
c850: 49 54 45 5f 4f 4d 49 54 5f 44 45 50 52 45 43 41  ITE_OMIT_DEPRECA
c860: 54 45 44 0a 20 20 76 6f 69 64 20 28 2a 78 50 72  TED.  void (*xPr
c870: 6f 66 69 6c 65 29 28 76 6f 69 64 2a 2c 63 6f 6e  ofile)(void*,con
c880: 73 74 20 63 68 61 72 2a 2c 75 36 34 29 3b 20 20  st char*,u64);  
c890: 2f 2a 20 50 72 6f 66 69 6c 69 6e 67 20 66 75 6e  /* Profiling fun
c8a0: 63 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64 20  ction */.  void 
c8b0: 2a 70 50 72 6f 66 69 6c 65 41 72 67 3b 20 20 20  *pProfileArg;   
c8c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c8d0: 20 20 20 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74       /* Argument
c8e0: 20 74 6f 20 70 72 6f 66 69 6c 65 20 66 75 6e 63   to profile func
c8f0: 74 69 6f 6e 20 2a 2f 0a 23 65 6e 64 69 66 0a 20  tion */.#endif. 
c900: 20 76 6f 69 64 20 2a 70 43 6f 6d 6d 69 74 41 72   void *pCommitAr
c910: 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  g;              
c920: 20 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74     /* Argument t
c930: 6f 20 78 43 6f 6d 6d 69 74 43 61 6c 6c 62 61 63  o xCommitCallbac
c940: 6b 28 29 20 2a 2f 0a 20 20 69 6e 74 20 28 2a 78  k() */.  int (*x
c950: 43 6f 6d 6d 69 74 43 61 6c 6c 62 61 63 6b 29 28  CommitCallback)(
c960: 76 6f 69 64 2a 29 3b 20 20 20 20 2f 2a 20 49 6e  void*);    /* In
c970: 76 6f 6b 65 64 20 61 74 20 65 76 65 72 79 20 63  voked at every c
c980: 6f 6d 6d 69 74 2e 20 2a 2f 0a 20 20 76 6f 69 64  ommit. */.  void
c990: 20 2a 70 52 6f 6c 6c 62 61 63 6b 41 72 67 3b 20   *pRollbackArg; 
c9a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
c9b0: 20 41 72 67 75 6d 65 6e 74 20 74 6f 20 78 52 6f   Argument to xRo
c9c0: 6c 6c 62 61 63 6b 43 61 6c 6c 62 61 63 6b 28 29  llbackCallback()
c9d0: 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 52 6f   */.  void (*xRo
c9e0: 6c 6c 62 61 63 6b 43 61 6c 6c 62 61 63 6b 29 28  llbackCallback)(
c9f0: 76 6f 69 64 2a 29 3b 20 2f 2a 20 49 6e 76 6f 6b  void*); /* Invok
ca00: 65 64 20 61 74 20 65 76 65 72 79 20 63 6f 6d 6d  ed at every comm
ca10: 69 74 2e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70  it. */.  void *p
ca20: 55 70 64 61 74 65 41 72 67 3b 0a 20 20 76 6f 69  UpdateArg;.  voi
ca30: 64 20 28 2a 78 55 70 64 61 74 65 43 61 6c 6c 62  d (*xUpdateCallb
ca40: 61 63 6b 29 28 76 6f 69 64 2a 2c 69 6e 74 2c 20  ack)(void*,int, 
ca50: 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73  const char*,cons
ca60: 74 20 63 68 61 72 2a 2c 73 71 6c 69 74 65 5f 69  t char*,sqlite_i
ca70: 6e 74 36 34 29 3b 0a 20 20 50 61 72 73 65 20 2a  nt64);.  Parse *
ca80: 70 50 61 72 73 65 3b 20 20 20 20 20 20 20 20 20  pParse;         
ca90: 20 20 20 20 20 20 20 2f 2a 20 43 75 72 72 65 6e         /* Curren
caa0: 74 20 70 61 72 73 65 20 2a 2f 0a 23 69 66 64 65  t parse */.#ifde
cab0: 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
cac0: 50 52 45 55 50 44 41 54 45 5f 48 4f 4f 4b 0a 20  PREUPDATE_HOOK. 
cad0: 20 76 6f 69 64 20 2a 70 50 72 65 55 70 64 61 74   void *pPreUpdat
cae0: 65 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 2f  eArg;          /
caf0: 2a 20 46 69 72 73 74 20 61 72 67 75 6d 65 6e 74  * First argument
cb00: 20 74 6f 20 78 50 72 65 55 70 64 61 74 65 43 61   to xPreUpdateCa
cb10: 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 76 6f 69 64  llback */.  void
cb20: 20 28 2a 78 50 72 65 55 70 64 61 74 65 43 61 6c   (*xPreUpdateCal
cb30: 6c 62 61 63 6b 29 28 20 20 20 2f 2a 20 52 65 67  lback)(   /* Reg
cb40: 69 73 74 65 72 65 64 20 75 73 69 6e 67 20 73 71  istered using sq
cb50: 6c 69 74 65 33 5f 70 72 65 75 70 64 61 74 65 5f  lite3_preupdate_
cb60: 68 6f 6f 6b 28 29 20 2a 2f 0a 20 20 20 20 76 6f  hook() */.    vo
cb70: 69 64 2a 2c 73 71 6c 69 74 65 33 2a 2c 69 6e 74  id*,sqlite3*,int
cb80: 2c 63 68 61 72 20 63 6f 6e 73 74 2a 2c 63 68 61  ,char const*,cha
cb90: 72 20 63 6f 6e 73 74 2a 2c 73 71 6c 69 74 65 33  r const*,sqlite3
cba0: 5f 69 6e 74 36 34 2c 73 71 6c 69 74 65 33 5f 69  _int64,sqlite3_i
cbb0: 6e 74 36 34 0a 20 20 29 3b 0a 20 20 50 72 65 55  nt64.  );.  PreU
cbc0: 70 64 61 74 65 20 2a 70 50 72 65 55 70 64 61 74  pdate *pPreUpdat
cbd0: 65 3b 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6e  e;        /* Con
cbe0: 74 65 78 74 20 66 6f 72 20 61 63 74 69 76 65 20  text for active 
cbf0: 70 72 65 2d 75 70 64 61 74 65 20 63 61 6c 6c 62  pre-update callb
cc00: 61 63 6b 20 2a 2f 0a 23 65 6e 64 69 66 20 2f 2a  ack */.#endif /*
cc10: 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 50   SQLITE_ENABLE_P
cc20: 52 45 55 50 44 41 54 45 5f 48 4f 4f 4b 20 2a 2f  REUPDATE_HOOK */
cc30: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
cc40: 4f 4d 49 54 5f 57 41 4c 0a 20 20 69 6e 74 20 28  OMIT_WAL.  int (
cc50: 2a 78 57 61 6c 43 61 6c 6c 62 61 63 6b 29 28 76  *xWalCallback)(v
cc60: 6f 69 64 20 2a 2c 20 73 71 6c 69 74 65 33 20 2a  oid *, sqlite3 *
cc70: 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20  , const char *, 
cc80: 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20 2a 70 57  int);.  void *pW
cc90: 61 6c 41 72 67 3b 0a 23 65 6e 64 69 66 0a 20 20  alArg;.#endif.  
cca0: 76 6f 69 64 28 2a 78 43 6f 6c 6c 4e 65 65 64 65  void(*xCollNeede
ccb0: 64 29 28 76 6f 69 64 2a 2c 73 71 6c 69 74 65 33  d)(void*,sqlite3
ccc0: 2a 2c 69 6e 74 20 65 54 65 78 74 52 65 70 2c 63  *,int eTextRep,c
ccd0: 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20 20 76  onst char*);.  v
cce0: 6f 69 64 28 2a 78 43 6f 6c 6c 4e 65 65 64 65 64  oid(*xCollNeeded
ccf0: 31 36 29 28 76 6f 69 64 2a 2c 73 71 6c 69 74 65  16)(void*,sqlite
cd00: 33 2a 2c 69 6e 74 20 65 54 65 78 74 52 65 70 2c  3*,int eTextRep,
cd10: 63 6f 6e 73 74 20 76 6f 69 64 2a 29 3b 0a 20 20  const void*);.  
cd20: 76 6f 69 64 20 2a 70 43 6f 6c 6c 4e 65 65 64 65  void *pCollNeede
cd30: 64 41 72 67 3b 0a 20 20 73 71 6c 69 74 65 33 5f  dArg;.  sqlite3_
cd40: 76 61 6c 75 65 20 2a 70 45 72 72 3b 20 20 20 20  value *pErr;    
cd50: 20 20 20 20 20 20 2f 2a 20 4d 6f 73 74 20 72 65        /* Most re
cd60: 63 65 6e 74 20 65 72 72 6f 72 20 6d 65 73 73 61  cent error messa
cd70: 67 65 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b 0a  ge */.  union {.
cd80: 20 20 20 20 76 6f 6c 61 74 69 6c 65 20 69 6e 74      volatile int
cd90: 20 69 73 49 6e 74 65 72 72 75 70 74 65 64 3b 20   isInterrupted; 
cda0: 2f 2a 20 54 72 75 65 20 69 66 20 73 71 6c 69 74  /* True if sqlit
cdb0: 65 33 5f 69 6e 74 65 72 72 75 70 74 20 68 61 73  e3_interrupt has
cdc0: 20 62 65 65 6e 20 63 61 6c 6c 65 64 20 2a 2f 0a   been called */.
cdd0: 20 20 20 20 64 6f 75 62 6c 65 20 6e 6f 74 55 73      double notUs
cde0: 65 64 31 3b 20 20 20 20 20 20 20 20 20 20 20 20  ed1;            
cdf0: 2f 2a 20 53 70 61 63 65 72 20 2a 2f 0a 20 20 7d  /* Spacer */.  }
ce00: 20 75 31 3b 0a 20 20 4c 6f 6f 6b 61 73 69 64 65   u1;.  Lookaside
ce10: 20 6c 6f 6f 6b 61 73 69 64 65 3b 20 20 20 20 20   lookaside;     
ce20: 20 20 20 20 20 2f 2a 20 4c 6f 6f 6b 61 73 69 64       /* Lookasid
ce30: 65 20 6d 61 6c 6c 6f 63 20 63 6f 6e 66 69 67 75  e malloc configu
ce40: 72 61 74 69 6f 6e 20 2a 2f 0a 23 69 66 6e 64 65  ration */.#ifnde
ce50: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55  f SQLITE_OMIT_AU
ce60: 54 48 4f 52 49 5a 41 54 49 4f 4e 0a 20 20 73 71  THORIZATION.  sq
ce70: 6c 69 74 65 33 5f 78 61 75 74 68 20 78 41 75 74  lite3_xauth xAut
ce80: 68 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41  h;          /* A
ce90: 63 63 65 73 73 20 61 75 74 68 6f 72 69 7a 61 74  ccess authorizat
cea0: 69 6f 6e 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a  ion function */.
ceb0: 20 20 76 6f 69 64 20 2a 70 41 75 74 68 41 72 67    void *pAuthArg
cec0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
ced0: 2f 2a 20 31 73 74 20 61 72 67 75 6d 65 6e 74 20  /* 1st argument 
cee0: 74 6f 20 74 68 65 20 61 63 63 65 73 73 20 61 75  to the access au
cef0: 74 68 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23  th function */.#
cf00: 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51  endif.#ifndef SQ
cf10: 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 4f 47 52 45  LITE_OMIT_PROGRE
cf20: 53 53 5f 43 41 4c 4c 42 41 43 4b 0a 20 20 69 6e  SS_CALLBACK.  in
cf30: 74 20 28 2a 78 50 72 6f 67 72 65 73 73 29 28 76  t (*xProgress)(v
cf40: 6f 69 64 20 2a 29 3b 20 20 20 20 20 2f 2a 20 54  oid *);     /* T
cf50: 68 65 20 70 72 6f 67 72 65 73 73 20 63 61 6c 6c  he progress call
cf60: 62 61 63 6b 20 2a 2f 0a 20 20 76 6f 69 64 20 2a  back */.  void *
cf70: 70 50 72 6f 67 72 65 73 73 41 72 67 3b 20 20 20  pProgressArg;   
cf80: 20 20 20 20 20 20 20 20 2f 2a 20 41 72 67 75 6d          /* Argum
cf90: 65 6e 74 20 74 6f 20 74 68 65 20 70 72 6f 67 72  ent to the progr
cfa0: 65 73 73 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a  ess callback */.
cfb0: 20 20 75 6e 73 69 67 6e 65 64 20 6e 50 72 6f 67    unsigned nProg
cfc0: 72 65 73 73 4f 70 73 3b 20 20 20 20 20 20 20 20  ressOps;        
cfd0: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6f 70 63  /* Number of opc
cfe0: 6f 64 65 73 20 66 6f 72 20 70 72 6f 67 72 65 73  odes for progres
cff0: 73 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 23 65  s callback */.#e
d000: 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c  ndif.#ifndef SQL
d010: 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
d020: 54 41 42 4c 45 0a 20 20 69 6e 74 20 6e 56 54 72  TABLE.  int nVTr
d030: 61 6e 73 3b 20 20 20 20 20 20 20 20 20 20 20 20  ans;            
d040: 20 20 20 20 20 20 2f 2a 20 41 6c 6c 6f 63 61 74        /* Allocat
d050: 65 64 20 73 69 7a 65 20 6f 66 20 61 56 54 72 61  ed size of aVTra
d060: 6e 73 20 2a 2f 0a 20 20 48 61 73 68 20 61 4d 6f  ns */.  Hash aMo
d070: 64 75 6c 65 3b 20 20 20 20 20 20 20 20 20 20 20  dule;           
d080: 20 20 20 20 20 20 2f 2a 20 70 6f 70 75 6c 61 74        /* populat
d090: 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f 63 72  ed by sqlite3_cr
d0a0: 65 61 74 65 5f 6d 6f 64 75 6c 65 28 29 20 2a 2f  eate_module() */
d0b0: 0a 20 20 56 74 61 62 43 74 78 20 2a 70 56 74 61  .  VtabCtx *pVta
d0c0: 62 43 74 78 3b 20 20 20 20 20 20 20 20 20 20 20  bCtx;           
d0d0: 20 2f 2a 20 43 6f 6e 74 65 78 74 20 66 6f 72 20   /* Context for 
d0e0: 61 63 74 69 76 65 20 76 74 61 62 20 63 6f 6e 6e  active vtab conn
d0f0: 65 63 74 2f 63 72 65 61 74 65 20 2a 2f 0a 20 20  ect/create */.  
d100: 56 54 61 62 6c 65 20 2a 2a 61 56 54 72 61 6e 73  VTable **aVTrans
d110: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
d120: 20 56 69 72 74 75 61 6c 20 74 61 62 6c 65 73 20   Virtual tables 
d130: 77 69 74 68 20 6f 70 65 6e 20 74 72 61 6e 73 61  with open transa
d140: 63 74 69 6f 6e 73 20 2a 2f 0a 20 20 56 54 61 62  ctions */.  VTab
d150: 6c 65 20 2a 70 44 69 73 63 6f 6e 6e 65 63 74 3b  le *pDisconnect;
d160: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 69 73            /* Dis
d170: 63 6f 6e 6e 65 63 74 20 74 68 65 73 65 20 69 6e  connect these in
d180: 20 6e 65 78 74 20 73 71 6c 69 74 65 33 5f 70 72   next sqlite3_pr
d190: 65 70 61 72 65 28 29 20 2a 2f 0a 23 65 6e 64 69  epare() */.#endi
d1a0: 66 0a 20 20 48 61 73 68 20 61 46 75 6e 63 3b 20  f.  Hash aFunc; 
d1b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d1c0: 20 20 2f 2a 20 48 61 73 68 20 74 61 62 6c 65 20    /* Hash table 
d1d0: 6f 66 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 66 75  of connection fu
d1e0: 6e 63 74 69 6f 6e 73 20 2a 2f 0a 20 20 48 61 73  nctions */.  Has
d1f0: 68 20 61 43 6f 6c 6c 53 65 71 3b 20 20 20 20 20  h aCollSeq;     
d200: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 6c             /* Al
d210: 6c 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75  l collating sequ
d220: 65 6e 63 65 73 20 2a 2f 0a 20 20 42 75 73 79 48  ences */.  BusyH
d230: 61 6e 64 6c 65 72 20 62 75 73 79 48 61 6e 64 6c  andler busyHandl
d240: 65 72 3b 20 20 20 20 20 20 2f 2a 20 42 75 73 79  er;      /* Busy
d250: 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 44   callback */.  D
d260: 62 20 61 44 62 53 74 61 74 69 63 5b 32 5d 3b 20  b aDbStatic[2]; 
d270: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
d280: 53 74 61 74 69 63 20 73 70 61 63 65 20 66 6f 72  Static space for
d290: 20 74 68 65 20 32 20 64 65 66 61 75 6c 74 20 62   the 2 default b
d2a0: 61 63 6b 65 6e 64 73 20 2a 2f 0a 20 20 53 61 76  ackends */.  Sav
d2b0: 65 70 6f 69 6e 74 20 2a 70 53 61 76 65 70 6f 69  epoint *pSavepoi
d2c0: 6e 74 3b 20 20 20 20 20 20 20 20 2f 2a 20 4c 69  nt;        /* Li
d2d0: 73 74 20 6f 66 20 61 63 74 69 76 65 20 73 61 76  st of active sav
d2e0: 65 70 6f 69 6e 74 73 20 2a 2f 0a 20 20 69 6e 74  epoints */.  int
d2f0: 20 62 75 73 79 54 69 6d 65 6f 75 74 3b 20 20 20   busyTimeout;   
d300: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 42 75             /* Bu
d310: 73 79 20 68 61 6e 64 6c 65 72 20 74 69 6d 65 6f  sy handler timeo
d320: 75 74 2c 20 69 6e 20 6d 73 65 63 20 2a 2f 0a 20  ut, in msec */. 
d330: 20 69 6e 74 20 6e 53 61 76 65 70 6f 69 6e 74 3b   int nSavepoint;
d340: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
d350: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6e 6f 6e 2d  * Number of non-
d360: 74 72 61 6e 73 61 63 74 69 6f 6e 20 73 61 76 65  transaction save
d370: 70 6f 69 6e 74 73 20 2a 2f 0a 20 20 69 6e 74 20  points */.  int 
d380: 6e 53 74 61 74 65 6d 65 6e 74 3b 20 20 20 20 20  nStatement;     
d390: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
d3a0: 62 65 72 20 6f 66 20 6e 65 73 74 65 64 20 73 74  ber of nested st
d3b0: 61 74 65 6d 65 6e 74 2d 74 72 61 6e 73 61 63 74  atement-transact
d3c0: 69 6f 6e 73 20 20 2a 2f 0a 20 20 69 36 34 20 6e  ions  */.  i64 n
d3d0: 44 65 66 65 72 72 65 64 43 6f 6e 73 3b 20 20 20  DeferredCons;   
d3e0: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 74 20           /* Net 
d3f0: 64 65 66 65 72 72 65 64 20 63 6f 6e 73 74 72 61  deferred constra
d400: 69 6e 74 73 20 74 68 69 73 20 74 72 61 6e 73 61  ints this transa
d410: 63 74 69 6f 6e 2e 20 2a 2f 0a 20 20 69 36 34 20  ction. */.  i64 
d420: 6e 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73  nDeferredImmCons
d430: 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 74  ;         /* Net
d440: 20 64 65 66 65 72 72 65 64 20 69 6d 6d 65 64 69   deferred immedi
d450: 61 74 65 20 63 6f 6e 73 74 72 61 69 6e 74 73 20  ate constraints 
d460: 2a 2f 0a 20 20 69 6e 74 20 2a 70 6e 42 79 74 65  */.  int *pnByte
d470: 73 46 72 65 65 64 3b 20 20 20 20 20 20 20 20 20  sFreed;         
d480: 20 20 20 2f 2a 20 49 66 20 6e 6f 74 20 4e 55 4c     /* If not NUL
d490: 4c 2c 20 69 6e 63 72 65 6d 65 6e 74 20 74 68 69  L, increment thi
d4a0: 73 20 69 6e 20 44 62 46 72 65 65 28 29 20 2a 2f  s in DbFree() */
d4b0: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45  .#ifdef SQLITE_E
d4c0: 4e 41 42 4c 45 5f 55 4e 4c 4f 43 4b 5f 4e 4f 54  NABLE_UNLOCK_NOT
d4d0: 49 46 59 0a 20 20 2f 2a 20 54 68 65 20 66 6f 6c  IFY.  /* The fol
d4e0: 6c 6f 77 69 6e 67 20 76 61 72 69 61 62 6c 65 73  lowing variables
d4f0: 20 61 72 65 20 61 6c 6c 20 70 72 6f 74 65 63 74   are all protect
d500: 65 64 20 62 79 20 74 68 65 20 53 54 41 54 49 43  ed by the STATIC
d510: 5f 4d 41 53 54 45 52 0a 20 20 2a 2a 20 6d 75 74  _MASTER.  ** mut
d520: 65 78 2c 20 6e 6f 74 20 62 79 20 73 71 6c 69 74  ex, not by sqlit
d530: 65 33 2e 6d 75 74 65 78 2e 20 54 68 65 79 20 61  e3.mutex. They a
d540: 72 65 20 75 73 65 64 20 62 79 20 63 6f 64 65 20  re used by code 
d550: 69 6e 20 6e 6f 74 69 66 79 2e 63 2e 0a 20 20 2a  in notify.c..  *
d560: 2a 0a 20 20 2a 2a 20 57 68 65 6e 20 58 2e 70 55  *.  ** When X.pU
d570: 6e 6c 6f 63 6b 43 6f 6e 6e 65 63 74 69 6f 6e 3d  nlockConnection=
d580: 3d 59 2c 20 74 68 61 74 20 6d 65 61 6e 73 20 74  =Y, that means t
d590: 68 61 74 20 58 20 69 73 20 77 61 69 74 69 6e 67  hat X is waiting
d5a0: 20 66 6f 72 20 59 20 74 6f 0a 20 20 2a 2a 20 75   for Y to.  ** u
d5b0: 6e 6c 6f 63 6b 20 73 6f 20 74 68 61 74 20 69 74  nlock so that it
d5c0: 20 63 61 6e 20 70 72 6f 63 65 65 64 2e 0a 20 20   can proceed..  
d5d0: 2a 2a 0a 20 20 2a 2a 20 57 68 65 6e 20 58 2e 70  **.  ** When X.p
d5e0: 42 6c 6f 63 6b 69 6e 67 43 6f 6e 6e 65 63 74 69  BlockingConnecti
d5f0: 6f 6e 3d 3d 59 2c 20 74 68 61 74 20 6d 65 61 6e  on==Y, that mean
d600: 73 20 74 68 61 74 20 73 6f 6d 65 74 68 69 6e 67  s that something
d610: 20 74 68 61 74 20 58 20 74 72 69 65 64 0a 20 20   that X tried.  
d620: 2a 2a 20 74 72 69 65 64 20 74 6f 20 64 6f 20 72  ** tried to do r
d630: 65 63 65 6e 74 6c 79 20 66 61 69 6c 65 64 20 77  ecently failed w
d640: 69 74 68 20 61 6e 20 53 51 4c 49 54 45 5f 4c 4f  ith an SQLITE_LO
d650: 43 4b 45 44 20 65 72 72 6f 72 20 64 75 65 20 74  CKED error due t
d660: 6f 20 6c 6f 63 6b 73 0a 20 20 2a 2a 20 68 65 6c  o locks.  ** hel
d670: 64 20 62 79 20 59 2e 0a 20 20 2a 2f 0a 20 20 73  d by Y..  */.  s
d680: 71 6c 69 74 65 33 20 2a 70 42 6c 6f 63 6b 69 6e  qlite3 *pBlockin
d690: 67 43 6f 6e 6e 65 63 74 69 6f 6e 3b 20 2f 2a 20  gConnection; /* 
d6a0: 43 6f 6e 6e 65 63 74 69 6f 6e 20 74 68 61 74 20  Connection that 
d6b0: 63 61 75 73 65 64 20 53 51 4c 49 54 45 5f 4c 4f  caused SQLITE_LO
d6c0: 43 4b 45 44 20 2a 2f 0a 20 20 73 71 6c 69 74 65  CKED */.  sqlite
d6d0: 33 20 2a 70 55 6e 6c 6f 63 6b 43 6f 6e 6e 65 63  3 *pUnlockConnec
d6e0: 74 69 6f 6e 3b 20 20 20 20 20 20 20 20 20 20 20  tion;           
d6f0: 2f 2a 20 43 6f 6e 6e 65 63 74 69 6f 6e 20 74 6f  /* Connection to
d700: 20 77 61 74 63 68 20 66 6f 72 20 75 6e 6c 6f 63   watch for unloc
d710: 6b 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 55 6e  k */.  void *pUn
d720: 6c 6f 63 6b 41 72 67 3b 20 20 20 20 20 20 20 20  lockArg;        
d730: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
d740: 41 72 67 75 6d 65 6e 74 20 74 6f 20 78 55 6e 6c  Argument to xUnl
d750: 6f 63 6b 4e 6f 74 69 66 79 20 2a 2f 0a 20 20 76  ockNotify */.  v
d760: 6f 69 64 20 28 2a 78 55 6e 6c 6f 63 6b 4e 6f 74  oid (*xUnlockNot
d770: 69 66 79 29 28 76 6f 69 64 20 2a 2a 2c 20 69 6e  ify)(void **, in
d780: 74 29 3b 20 20 2f 2a 20 55 6e 6c 6f 63 6b 20 6e  t);  /* Unlock n
d790: 6f 74 69 66 79 20 63 61 6c 6c 62 61 63 6b 20 2a  otify callback *
d7a0: 2f 0a 20 20 73 71 6c 69 74 65 33 20 2a 70 4e 65  /.  sqlite3 *pNe
d7b0: 78 74 42 6c 6f 63 6b 65 64 3b 20 20 20 20 20 20  xtBlocked;      
d7c0: 20 20 2f 2a 20 4e 65 78 74 20 69 6e 20 6c 69 73    /* Next in lis
d7d0: 74 20 6f 66 20 61 6c 6c 20 62 6c 6f 63 6b 65 64  t of all blocked
d7e0: 20 63 6f 6e 6e 65 63 74 69 6f 6e 73 20 2a 2f 0a   connections */.
d7f0: 23 65 6e 64 69 66 0a 23 69 66 64 65 66 20 53 51  #endif.#ifdef SQ
d800: 4c 49 54 45 5f 55 53 45 52 5f 41 55 54 48 45 4e  LITE_USER_AUTHEN
d810: 54 49 43 41 54 49 4f 4e 0a 20 20 73 71 6c 69 74  TICATION.  sqlit
d820: 65 33 5f 75 73 65 72 61 75 74 68 20 61 75 74 68  e3_userauth auth
d830: 3b 20 20 20 20 20 20 20 20 2f 2a 20 55 73 65 72  ;        /* User
d840: 20 61 75 74 68 65 6e 74 69 63 61 74 69 6f 6e 20   authentication 
d850: 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 2a 2f 0a 23  information */.#
d860: 65 6e 64 69 66 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  endif.};../*.** 
d870: 41 20 6d 61 63 72 6f 20 74 6f 20 64 69 73 63 6f  A macro to disco
d880: 76 65 72 20 74 68 65 20 65 6e 63 6f 64 69 6e 67  ver the encoding
d890: 20 6f 66 20 61 20 64 61 74 61 62 61 73 65 2e 0a   of a database..
d8a0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 43 48 45 4d  */.#define SCHEM
d8b0: 41 5f 45 4e 43 28 64 62 29 20 28 28 64 62 29 2d  A_ENC(db) ((db)-
d8c0: 3e 61 44 62 5b 30 5d 2e 70 53 63 68 65 6d 61 2d  >aDb[0].pSchema-
d8d0: 3e 65 6e 63 29 0a 23 64 65 66 69 6e 65 20 45 4e  >enc).#define EN
d8e0: 43 28 64 62 29 20 20 20 20 20 20 20 20 28 28 64  C(db)        ((d
d8f0: 62 29 2d 3e 65 6e 63 29 0a 0a 2f 2a 0a 2a 2a 20  b)->enc)../*.** 
d900: 50 6f 73 73 69 62 6c 65 20 76 61 6c 75 65 73 20  Possible values 
d910: 66 6f 72 20 74 68 65 20 73 71 6c 69 74 65 33 2e  for the sqlite3.
d920: 66 6c 61 67 73 2e 0a 2a 2a 0a 2a 2a 20 56 61 6c  flags..**.** Val
d930: 75 65 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 28  ue constraints (
d940: 65 6e 66 6f 72 63 65 64 20 76 69 61 20 61 73 73  enforced via ass
d950: 65 72 74 28 29 29 3a 0a 2a 2a 20 20 20 20 20 20  ert()):.**      
d960: 53 51 4c 49 54 45 5f 46 75 6c 6c 46 53 79 6e 63  SQLITE_FullFSync
d970: 20 20 20 20 20 3d 3d 20 50 41 47 45 52 5f 46 55       == PAGER_FU
d980: 4c 4c 46 53 59 4e 43 0a 2a 2a 20 20 20 20 20 20  LLFSYNC.**      
d990: 53 51 4c 49 54 45 5f 43 6b 70 74 46 75 6c 6c 46  SQLITE_CkptFullF
d9a0: 53 79 6e 63 20 3d 3d 20 50 41 47 45 52 5f 43 4b  Sync == PAGER_CK
d9b0: 50 54 5f 46 55 4c 4c 46 53 59 4e 43 0a 2a 2a 20  PT_FULLFSYNC.** 
d9c0: 20 20 20 20 20 53 51 4c 49 54 45 5f 43 61 63 68       SQLITE_Cach
d9d0: 65 53 70 69 6c 6c 20 20 20 20 3d 3d 20 50 41 47  eSpill    == PAG
d9e0: 45 52 5f 43 41 43 48 45 5f 53 50 49 4c 4c 0a 2a  ER_CACHE_SPILL.*
d9f0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
da00: 5f 57 72 69 74 65 53 63 68 65 6d 61 20 20 20 20  _WriteSchema    
da10: 30 78 30 30 30 30 30 30 30 31 20 20 2f 2a 20 4f  0x00000001  /* O
da20: 4b 20 74 6f 20 75 70 64 61 74 65 20 53 51 4c 49  K to update SQLI
da30: 54 45 5f 4d 41 53 54 45 52 20 2a 2f 0a 23 64 65  TE_MASTER */.#de
da40: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4c 65 67 61  fine SQLITE_Lega
da50: 63 79 46 69 6c 65 46 6d 74 20 20 30 78 30 30 30  cyFileFmt  0x000
da60: 30 30 30 30 32 20 20 2f 2a 20 43 72 65 61 74 65  00002  /* Create
da70: 20 6e 65 77 20 64 61 74 61 62 61 73 65 73 20 69   new databases i
da80: 6e 20 66 6f 72 6d 61 74 20 31 20 2a 2f 0a 23 64  n format 1 */.#d
da90: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 75 6c  efine SQLITE_Ful
daa0: 6c 43 6f 6c 4e 61 6d 65 73 20 20 20 30 78 30 30  lColNames   0x00
dab0: 30 30 30 30 30 34 20 20 2f 2a 20 53 68 6f 77 20  000004  /* Show 
dac0: 66 75 6c 6c 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65  full column name
dad0: 73 20 6f 6e 20 53 45 4c 45 43 54 20 2a 2f 0a 23  s on SELECT */.#
dae0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 75  define SQLITE_Fu
daf0: 6c 6c 46 53 79 6e 63 20 20 20 20 20 20 30 78 30  llFSync      0x0
db00: 30 30 30 30 30 30 38 20 20 2f 2a 20 55 73 65 20  0000008  /* Use 
db10: 66 75 6c 6c 20 66 73 79 6e 63 20 6f 6e 20 74 68  full fsync on th
db20: 65 20 62 61 63 6b 65 6e 64 20 2a 2f 0a 23 64 65  e backend */.#de
db30: 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 6b 70 74  fine SQLITE_Ckpt
db40: 46 75 6c 6c 46 53 79 6e 63 20 20 30 78 30 30 30  FullFSync  0x000
db50: 30 30 30 31 30 20 20 2f 2a 20 55 73 65 20 66 75  00010  /* Use fu
db60: 6c 6c 20 66 73 79 6e 63 20 66 6f 72 20 63 68 65  ll fsync for che
db70: 63 6b 70 6f 69 6e 74 20 2a 2f 0a 23 64 65 66 69  ckpoint */.#defi
db80: 6e 65 20 53 51 4c 49 54 45 5f 43 61 63 68 65 53  ne SQLITE_CacheS
db90: 70 69 6c 6c 20 20 20 20 20 30 78 30 30 30 30 30  pill     0x00000
dba0: 30 32 30 20 20 2f 2a 20 4f 4b 20 74 6f 20 73 70  020  /* OK to sp
dbb0: 69 6c 6c 20 70 61 67 65 72 20 63 61 63 68 65 20  ill pager cache 
dbc0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
dbd0: 45 5f 53 68 6f 72 74 43 6f 6c 4e 61 6d 65 73 20  E_ShortColNames 
dbe0: 20 30 78 30 30 30 30 30 30 34 30 20 20 2f 2a 20   0x00000040  /* 
dbf0: 53 68 6f 77 20 73 68 6f 72 74 20 63 6f 6c 75 6d  Show short colum
dc00: 6e 73 20 6e 61 6d 65 73 20 2a 2f 0a 23 64 65 66  ns names */.#def
dc10: 69 6e 65 20 53 51 4c 49 54 45 5f 43 6f 75 6e 74  ine SQLITE_Count
dc20: 52 6f 77 73 20 20 20 20 20 20 30 78 30 30 30 30  Rows      0x0000
dc30: 30 30 38 30 20 20 2f 2a 20 43 6f 75 6e 74 20 72  0080  /* Count r
dc40: 6f 77 73 20 63 68 61 6e 67 65 64 20 62 79 20 49  ows changed by I
dc50: 4e 53 45 52 54 2c 20 2a 2f 0a 20 20 20 20 20 20  NSERT, */.      
dc60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dc70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dc80: 20 20 20 20 2f 2a 20 20 20 44 45 4c 45 54 45 2c      /*   DELETE,
dc90: 20 6f 72 20 55 50 44 41 54 45 20 61 6e 64 20 72   or UPDATE and r
dca0: 65 74 75 72 6e 20 2a 2f 0a 20 20 20 20 20 20 20  eturn */.       
dcb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dcc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dcd0: 20 20 20 2f 2a 20 20 20 74 68 65 20 63 6f 75 6e     /*   the coun
dce0: 74 20 75 73 69 6e 67 20 61 20 63 61 6c 6c 62 61  t using a callba
dcf0: 63 6b 2e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ck. */.#define S
dd00: 51 4c 49 54 45 5f 4e 75 6c 6c 43 61 6c 6c 62 61  QLITE_NullCallba
dd10: 63 6b 20 20 20 30 78 30 30 30 30 30 31 30 30 20  ck   0x00000100 
dd20: 20 2f 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20 63   /* Invoke the c
dd30: 61 6c 6c 62 61 63 6b 20 6f 6e 63 65 20 69 66 20  allback once if 
dd40: 74 68 65 20 2a 2f 0a 20 20 20 20 20 20 20 20 20  the */.         
dd50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dd60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dd70: 20 2f 2a 20 20 20 72 65 73 75 6c 74 20 73 65 74   /*   result set
dd80: 20 69 73 20 65 6d 70 74 79 20 2a 2f 0a 23 64 65   is empty */.#de
dd90: 66 69 6e 65 20 53 51 4c 49 54 45 5f 49 67 6e 6f  fine SQLITE_Igno
dda0: 72 65 43 68 65 63 6b 73 20 20 20 30 78 30 30 30  reChecks   0x000
ddb0: 30 30 32 30 30 20 20 2f 2a 20 44 6f 20 6e 6f 74  00200  /* Do not
ddc0: 20 65 6e 66 6f 72 63 65 20 63 68 65 63 6b 20 63   enforce check c
ddd0: 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f 0a 23 64  onstraints */.#d
dde0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 52 65 61  efine SQLITE_Rea
ddf0: 64 55 6e 63 6f 6d 6d 69 74 20 20 20 30 78 30 30  dUncommit   0x00
de00: 30 30 30 34 30 30 20 20 2f 2a 20 52 45 41 44 20  000400  /* READ 
de10: 55 4e 43 4f 4d 4d 49 54 54 45 44 20 69 6e 20 73  UNCOMMITTED in s
de20: 68 61 72 65 64 2d 63 61 63 68 65 20 2a 2f 0a 23  hared-cache */.#
de30: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e 6f  define SQLITE_No
de40: 43 6b 70 74 4f 6e 43 6c 6f 73 65 20 20 30 78 30  CkptOnClose  0x0
de50: 30 30 30 30 38 30 30 20 20 2f 2a 20 4e 6f 20 63  0000800  /* No c
de60: 68 65 63 6b 70 6f 69 6e 74 20 6f 6e 20 63 6c 6f  heckpoint on clo
de70: 73 65 28 29 2f 44 45 54 41 43 48 20 2a 2f 0a 23  se()/DETACH */.#
de80: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 52 65  define SQLITE_Re
de90: 76 65 72 73 65 4f 72 64 65 72 20 20 20 30 78 30  verseOrder   0x0
dea0: 30 30 30 31 30 30 30 20 20 2f 2a 20 52 65 76 65  0001000  /* Reve
deb0: 72 73 65 20 75 6e 6f 72 64 65 72 65 64 20 53 45  rse unordered SE
dec0: 4c 45 43 54 73 20 2a 2f 0a 23 64 65 66 69 6e 65  LECTs */.#define
ded0: 20 53 51 4c 49 54 45 5f 52 65 63 54 72 69 67 67   SQLITE_RecTrigg
dee0: 65 72 73 20 20 20 20 30 78 30 30 30 30 32 30 30  ers    0x0000200
def0: 30 20 20 2f 2a 20 45 6e 61 62 6c 65 20 72 65 63  0  /* Enable rec
df00: 75 72 73 69 76 65 20 74 72 69 67 67 65 72 73 20  ursive triggers 
df10: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
df20: 45 5f 46 6f 72 65 69 67 6e 4b 65 79 73 20 20 20  E_ForeignKeys   
df30: 20 30 78 30 30 30 30 34 30 30 30 20 20 2f 2a 20   0x00004000  /* 
df40: 45 6e 66 6f 72 63 65 20 66 6f 72 65 69 67 6e 20  Enforce foreign 
df50: 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 73 20  key constraints 
df60: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
df70: 54 45 5f 41 75 74 6f 49 6e 64 65 78 20 20 20 20  TE_AutoIndex    
df80: 20 20 30 78 30 30 30 30 38 30 30 30 20 20 2f 2a    0x00008000  /*
df90: 20 45 6e 61 62 6c 65 20 61 75 74 6f 6d 61 74 69   Enable automati
dfa0: 63 20 69 6e 64 65 78 65 73 20 2a 2f 0a 23 64 65  c indexes */.#de
dfb0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4c 6f 61 64  fine SQLITE_Load
dfc0: 45 78 74 65 6e 73 69 6f 6e 20 20 30 78 30 30 30  Extension  0x000
dfd0: 31 30 30 30 30 20 20 2f 2a 20 45 6e 61 62 6c 65  10000  /* Enable
dfe0: 20 6c 6f 61 64 5f 65 78 74 65 6e 73 69 6f 6e 20   load_extension 
dff0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
e000: 45 5f 4c 6f 61 64 45 78 74 46 75 6e 63 20 20 20  E_LoadExtFunc   
e010: 20 30 78 30 30 30 32 30 30 30 30 20 20 2f 2a 20   0x00020000  /* 
e020: 45 6e 61 62 6c 65 20 6c 6f 61 64 5f 65 78 74 65  Enable load_exte
e030: 6e 73 69 6f 6e 28 29 20 53 51 4c 20 66 75 6e 63  nsion() SQL func
e040: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
e050: 54 45 5f 45 6e 61 62 6c 65 54 72 69 67 67 65 72  TE_EnableTrigger
e060: 20 20 30 78 30 30 30 34 30 30 30 30 20 20 2f 2a    0x00040000  /*
e070: 20 54 72 75 65 20 74 6f 20 65 6e 61 62 6c 65 20   True to enable 
e080: 74 72 69 67 67 65 72 73 20 2a 2f 0a 23 64 65 66  triggers */.#def
e090: 69 6e 65 20 53 51 4c 49 54 45 5f 44 65 66 65 72  ine SQLITE_Defer
e0a0: 46 4b 73 20 20 20 20 20 20 20 30 78 30 30 30 38  FKs       0x0008
e0b0: 30 30 30 30 20 20 2f 2a 20 44 65 66 65 72 20 61  0000  /* Defer a
e0c0: 6c 6c 20 46 4b 20 63 6f 6e 73 74 72 61 69 6e 74  ll FK constraint
e0d0: 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  s */.#define SQL
e0e0: 49 54 45 5f 51 75 65 72 79 4f 6e 6c 79 20 20 20  ITE_QueryOnly   
e0f0: 20 20 20 30 78 30 30 31 30 30 30 30 30 20 20 2f     0x00100000  /
e100: 2a 20 44 69 73 61 62 6c 65 20 64 61 74 61 62 61  * Disable databa
e110: 73 65 20 63 68 61 6e 67 65 73 20 2a 2f 0a 23 64  se changes */.#d
e120: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 65 6c  efine SQLITE_Cel
e130: 6c 53 69 7a 65 43 6b 20 20 20 20 20 30 78 30 30  lSizeCk     0x00
e140: 32 30 30 30 30 30 20 20 2f 2a 20 43 68 65 63 6b  200000  /* Check
e150: 20 62 74 72 65 65 20 63 65 6c 6c 20 73 69 7a 65   btree cell size
e160: 73 20 6f 6e 20 6c 6f 61 64 20 2a 2f 0a 23 64 65  s on load */.#de
e170: 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 74 73 33  fine SQLITE_Fts3
e180: 54 6f 6b 65 6e 69 7a 65 72 20 20 30 78 30 30 34  Tokenizer  0x004
e190: 30 30 30 30 30 20 20 2f 2a 20 45 6e 61 62 6c 65  00000  /* Enable
e1a0: 20 66 74 73 33 5f 74 6f 6b 65 6e 69 7a 65 72 28   fts3_tokenizer(
e1b0: 32 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  2) */.#define SQ
e1c0: 4c 49 54 45 5f 45 6e 61 62 6c 65 51 50 53 47 20  LITE_EnableQPSG 
e1d0: 20 20 20 20 30 78 30 30 38 30 30 30 30 30 20 20      0x00800000  
e1e0: 2f 2a 20 51 75 65 72 79 20 50 6c 61 6e 6e 65 72  /* Query Planner
e1f0: 20 53 74 61 62 69 6c 69 74 79 20 47 75 61 72 61   Stability Guara
e200: 6e 74 65 65 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ntee*/.#define S
e210: 51 4c 49 54 45 5f 54 72 69 67 67 65 72 45 51 50  QLITE_TriggerEQP
e220: 20 20 20 20 20 30 78 30 31 30 30 30 30 30 30 20       0x01000000 
e230: 20 2f 2a 20 53 68 6f 77 20 74 72 69 67 67 65 72   /* Show trigger
e240: 20 45 58 50 4c 41 49 4e 20 51 55 45 52 59 20 50   EXPLAIN QUERY P
e250: 4c 41 4e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  LAN */.#define S
e260: 51 4c 49 54 45 5f 52 65 73 65 74 44 61 74 61 62  QLITE_ResetDatab
e270: 61 73 65 20 20 30 78 30 32 30 30 30 30 30 30 20  ase  0x02000000 
e280: 20 2f 2a 20 52 65 73 65 74 20 74 68 65 20 64 61   /* Reset the da
e290: 74 61 62 61 73 65 20 2a 2f 0a 23 64 65 66 69 6e  tabase */.#defin
e2a0: 65 20 53 51 4c 49 54 45 5f 4c 65 67 61 63 79 41  e SQLITE_LegacyA
e2b0: 6c 74 65 72 20 20 20 20 30 78 30 34 30 30 30 30  lter    0x040000
e2c0: 30 30 20 20 2f 2a 20 4c 65 67 61 63 79 20 41 4c  00  /* Legacy AL
e2d0: 54 45 52 20 54 41 42 4c 45 20 62 65 68 61 76 69  TER TABLE behavi
e2e0: 6f 75 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  our */.#define S
e2f0: 51 4c 49 54 45 5f 4e 6f 53 63 68 65 6d 61 45 72  QLITE_NoSchemaEr
e300: 72 6f 72 20 20 30 78 30 38 30 30 30 30 30 30 20  ror  0x08000000 
e310: 20 2f 2a 20 44 6f 20 6e 6f 74 20 72 65 70 6f 72   /* Do not repor
e320: 74 20 73 63 68 65 6d 61 20 70 61 72 73 65 20 65  t schema parse e
e330: 72 72 6f 72 73 2a 2f 0a 23 64 65 66 69 6e 65 20  rrors*/.#define 
e340: 53 51 4c 49 54 45 5f 44 65 66 65 6e 73 69 76 65  SQLITE_Defensive
e350: 20 20 20 20 20 20 30 78 31 30 30 30 30 30 30 30        0x10000000
e360: 20 20 2f 2a 20 49 6e 70 75 74 20 53 51 4c 20 69    /* Input SQL i
e370: 73 20 6c 69 6b 65 6c 79 20 68 6f 73 74 69 6c 65  s likely hostile
e380: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
e390: 54 45 5f 44 71 73 44 44 4c 20 20 20 20 20 20 20  TE_DqsDDL       
e3a0: 20 20 30 78 32 30 30 30 30 30 30 30 20 20 2f 2a    0x20000000  /*
e3b0: 20 64 62 6c 2d 71 75 6f 74 65 64 20 73 74 72 69   dbl-quoted stri
e3c0: 6e 67 73 20 61 6c 6c 6f 77 65 64 20 69 6e 20 44  ngs allowed in D
e3d0: 44 4c 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  DL*/.#define SQL
e3e0: 49 54 45 5f 44 71 73 44 4d 4c 20 20 20 20 20 20  ITE_DqsDML      
e3f0: 20 20 20 30 78 34 30 30 30 30 30 30 30 20 20 2f     0x40000000  /
e400: 2a 20 64 62 6c 2d 71 75 6f 74 65 64 20 73 74 72  * dbl-quoted str
e410: 69 6e 67 73 20 61 6c 6c 6f 77 65 64 20 69 6e 20  ings allowed in 
e420: 44 4d 4c 2a 2f 0a 0a 2f 2a 20 46 6c 61 67 73 20  DML*/../* Flags 
e430: 75 73 65 64 20 6f 6e 6c 79 20 69 66 20 64 65 62  used only if deb
e440: 75 67 67 69 6e 67 20 2a 2f 0a 23 64 65 66 69 6e  ugging */.#defin
e450: 65 20 48 49 28 58 29 20 20 28 28 75 36 34 29 28  e HI(X)  ((u64)(
e460: 58 29 3c 3c 33 32 29 0a 23 69 66 64 65 66 20 53  X)<<32).#ifdef S
e470: 51 4c 49 54 45 5f 44 45 42 55 47 0a 23 64 65 66  QLITE_DEBUG.#def
e480: 69 6e 65 20 53 51 4c 49 54 45 5f 53 71 6c 54 72  ine SQLITE_SqlTr
e490: 61 63 65 20 20 20 20 20 20 20 48 49 28 30 78 30  ace       HI(0x0
e4a0: 30 30 31 29 20 20 2f 2a 20 44 65 62 75 67 20 70  001)  /* Debug p
e4b0: 72 69 6e 74 20 53 51 4c 20 61 73 20 69 74 20 65  rint SQL as it e
e4c0: 78 65 63 75 74 65 73 20 2a 2f 0a 23 64 65 66 69  xecutes */.#defi
e4d0: 6e 65 20 53 51 4c 49 54 45 5f 56 64 62 65 4c 69  ne SQLITE_VdbeLi
e4e0: 73 74 69 6e 67 20 20 20 20 48 49 28 30 78 30 30  sting    HI(0x00
e4f0: 30 32 29 20 20 2f 2a 20 44 65 62 75 67 20 6c 69  02)  /* Debug li
e500: 73 74 69 6e 67 73 20 6f 66 20 56 44 42 45 20 70  stings of VDBE p
e510: 72 6f 67 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  rogs */.#define 
e520: 53 51 4c 49 54 45 5f 56 64 62 65 54 72 61 63 65  SQLITE_VdbeTrace
e530: 20 20 20 20 20 20 48 49 28 30 78 30 30 30 34 29        HI(0x0004)
e540: 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 74 72 61    /* True to tra
e550: 63 65 20 56 44 42 45 20 65 78 65 63 75 74 69 6f  ce VDBE executio
e560: 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  n */.#define SQL
e570: 49 54 45 5f 56 64 62 65 41 64 64 6f 70 54 72 61  ITE_VdbeAddopTra
e580: 63 65 20 48 49 28 30 78 30 30 30 38 29 20 20 2f  ce HI(0x0008)  /
e590: 2a 20 54 72 61 63 65 20 73 71 6c 69 74 65 33 56  * Trace sqlite3V
e5a0: 64 62 65 41 64 64 4f 70 28 29 20 63 61 6c 6c 73  dbeAddOp() calls
e5b0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
e5c0: 54 45 5f 56 64 62 65 45 51 50 20 20 20 20 20 20  TE_VdbeEQP      
e5d0: 20 20 48 49 28 30 78 30 30 31 30 29 20 20 2f 2a    HI(0x0010)  /*
e5e0: 20 44 65 62 75 67 20 45 58 50 4c 41 49 4e 20 51   Debug EXPLAIN Q
e5f0: 55 45 52 59 20 50 4c 41 4e 20 2a 2f 0a 23 64 65  UERY PLAN */.#de
e600: 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 61 72 73  fine SQLITE_Pars
e610: 65 72 54 72 61 63 65 20 20 20 20 48 49 28 30 78  erTrace    HI(0x
e620: 30 30 32 30 29 20 20 2f 2a 20 50 52 41 47 4d 41  0020)  /* PRAGMA
e630: 20 70 61 72 73 65 72 5f 74 72 61 63 65 3d 4f 4e   parser_trace=ON
e640: 20 2a 2f 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a   */.#endif../*.*
e650: 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73  * Allowed values
e660: 20 66 6f 72 20 73 71 6c 69 74 65 33 2e 6d 44 62   for sqlite3.mDb
e670: 46 6c 61 67 73 0a 2a 2f 0a 23 64 65 66 69 6e 65  Flags.*/.#define
e680: 20 44 42 46 4c 41 47 5f 53 63 68 65 6d 61 43 68   DBFLAG_SchemaCh
e690: 61 6e 67 65 20 20 20 30 78 30 30 30 31 20 20 2f  ange   0x0001  /
e6a0: 2a 20 55 6e 63 6f 6d 6d 69 74 74 65 64 20 48 61  * Uncommitted Ha
e6b0: 73 68 20 74 61 62 6c 65 20 63 68 61 6e 67 65 73  sh table changes
e6c0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 44 42 46 4c   */.#define DBFL
e6d0: 41 47 5f 50 72 65 66 65 72 42 75 69 6c 74 69 6e  AG_PreferBuiltin
e6e0: 20 20 30 78 30 30 30 32 20 20 2f 2a 20 50 72 65    0x0002  /* Pre
e6f0: 66 65 72 65 6e 63 65 20 74 6f 20 62 75 69 6c 74  ference to built
e700: 2d 69 6e 20 66 75 6e 63 73 20 2a 2f 0a 23 64 65  -in funcs */.#de
e710: 66 69 6e 65 20 44 42 46 4c 41 47 5f 56 61 63 75  fine DBFLAG_Vacu
e720: 75 6d 20 20 20 20 20 20 20 20 20 30 78 30 30 30  um         0x000
e730: 34 20 20 2f 2a 20 43 75 72 72 65 6e 74 6c 79 20  4  /* Currently 
e740: 69 6e 20 61 20 56 41 43 55 55 4d 20 2a 2f 0a 23  in a VACUUM */.#
e750: 64 65 66 69 6e 65 20 44 42 46 4c 41 47 5f 56 61  define DBFLAG_Va
e760: 63 75 75 6d 49 6e 74 6f 20 20 20 20 20 30 78 30  cuumInto     0x0
e770: 30 30 38 20 20 2f 2a 20 43 75 72 72 65 6e 74 6c  008  /* Currentl
e780: 79 20 72 75 6e 6e 69 6e 67 20 56 41 43 55 55 4d  y running VACUUM
e790: 20 49 4e 54 4f 20 2a 2f 0a 23 64 65 66 69 6e 65   INTO */.#define
e7a0: 20 44 42 46 4c 41 47 5f 53 63 68 65 6d 61 4b 6e   DBFLAG_SchemaKn
e7b0: 6f 77 6e 4f 6b 20 20 30 78 30 30 31 30 20 20 2f  ownOk  0x0010  /
e7c0: 2a 20 53 63 68 65 6d 61 20 69 73 20 6b 6e 6f 77  * Schema is know
e7d0: 6e 20 74 6f 20 62 65 20 76 61 6c 69 64 20 2a 2f  n to be valid */
e7e0: 0a 0a 2f 2a 0a 2a 2a 20 42 69 74 73 20 6f 66 20  ../*.** Bits of 
e7f0: 74 68 65 20 73 71 6c 69 74 65 33 2e 64 62 4f 70  the sqlite3.dbOp
e800: 74 46 6c 61 67 73 20 66 69 65 6c 64 20 74 68 61  tFlags field tha
e810: 74 20 61 72 65 20 75 73 65 64 20 62 79 20 74 68  t are used by th
e820: 65 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 74 65 73  e.** sqlite3_tes
e830: 74 5f 63 6f 6e 74 72 6f 6c 28 53 51 4c 49 54 45  t_control(SQLITE
e840: 5f 54 45 53 54 43 54 52 4c 5f 4f 50 54 49 4d 49  _TESTCTRL_OPTIMI
e850: 5a 41 54 49 4f 4e 53 2c 2e 2e 2e 29 20 69 6e 74  ZATIONS,...) int
e860: 65 72 66 61 63 65 20 74 6f 0a 2a 2a 20 73 65 6c  erface to.** sel
e870: 65 63 74 69 76 65 6c 79 20 64 69 73 61 62 6c 65  ectively disable
e880: 20 76 61 72 69 6f 75 73 20 6f 70 74 69 6d 69 7a   various optimiz
e890: 61 74 69 6f 6e 73 2e 0a 2a 2f 0a 23 64 65 66 69  ations..*/.#defi
e8a0: 6e 65 20 53 51 4c 49 54 45 5f 51 75 65 72 79 46  ne SQLITE_QueryF
e8b0: 6c 61 74 74 65 6e 65 72 20 30 78 30 30 30 31 20  lattener 0x0001 
e8c0: 20 20 2f 2a 20 51 75 65 72 79 20 66 6c 61 74 74    /* Query flatt
e8d0: 65 6e 69 6e 67 20 2a 2f 0a 23 64 65 66 69 6e 65  ening */.#define
e8e0: 20 53 51 4c 49 54 45 5f 57 69 6e 64 6f 77 46 75   SQLITE_WindowFu
e8f0: 6e 63 20 20 20 20 20 30 78 30 30 30 32 20 20 20  nc     0x0002   
e900: 2f 2a 20 55 73 65 20 78 49 6e 76 65 72 73 65 20  /* Use xInverse 
e910: 66 6f 72 20 77 69 6e 64 6f 77 20 66 75 6e 63 74  for window funct
e920: 69 6f 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ions */.#define 
e930: 53 51 4c 49 54 45 5f 47 72 6f 75 70 42 79 4f 72  SQLITE_GroupByOr
e940: 64 65 72 20 20 20 30 78 30 30 30 34 20 20 20 2f  der   0x0004   /
e950: 2a 20 47 52 4f 55 50 42 59 20 63 6f 76 65 72 20  * GROUPBY cover 
e960: 6f 66 20 4f 52 44 45 52 42 59 20 2a 2f 0a 23 64  of ORDERBY */.#d
e970: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 61 63  efine SQLITE_Fac
e980: 74 6f 72 4f 75 74 43 6f 6e 73 74 20 30 78 30 30  torOutConst 0x00
e990: 30 38 20 20 20 2f 2a 20 43 6f 6e 73 74 61 6e 74  08   /* Constant
e9a0: 20 66 61 63 74 6f 72 69 6e 67 20 2a 2f 0a 23 64   factoring */.#d
e9b0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 69 73  efine SQLITE_Dis
e9c0: 74 69 6e 63 74 4f 70 74 20 20 20 20 30 78 30 30  tinctOpt    0x00
e9d0: 31 30 20 20 20 2f 2a 20 44 49 53 54 49 4e 43 54  10   /* DISTINCT
e9e0: 20 75 73 69 6e 67 20 69 6e 64 65 78 65 73 20 2a   using indexes *
e9f0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
ea00: 5f 43 6f 76 65 72 49 64 78 53 63 61 6e 20 20 20  _CoverIdxScan   
ea10: 30 78 30 30 32 30 20 20 20 2f 2a 20 43 6f 76 65  0x0020   /* Cove
ea20: 72 69 6e 67 20 69 6e 64 65 78 20 73 63 61 6e 73  ring index scans
ea30: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
ea40: 54 45 5f 4f 72 64 65 72 42 79 49 64 78 4a 6f 69  TE_OrderByIdxJoi
ea50: 6e 20 30 78 30 30 34 30 20 20 20 2f 2a 20 4f 52  n 0x0040   /* OR
ea60: 44 45 52 20 42 59 20 6f 66 20 6a 6f 69 6e 73 20  DER BY of joins 
ea70: 76 69 61 20 69 6e 64 65 78 20 2a 2f 0a 23 64 65  via index */.#de
ea80: 66 69 6e 65 20 53 51 4c 49 54 45 5f 54 72 61 6e  fine SQLITE_Tran
ea90: 73 69 74 69 76 65 20 20 20 20 20 30 78 30 30 38  sitive     0x008
eaa0: 30 20 20 20 2f 2a 20 54 72 61 6e 73 69 74 69 76  0   /* Transitiv
eab0: 65 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f  e constraints */
eac0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
ead0: 4f 6d 69 74 4e 6f 6f 70 4a 6f 69 6e 20 20 20 30  OmitNoopJoin   0
eae0: 78 30 31 30 30 20 20 20 2f 2a 20 4f 6d 69 74 20  x0100   /* Omit 
eaf0: 75 6e 75 73 65 64 20 74 61 62 6c 65 73 20 69 6e  unused tables in
eb00: 20 6a 6f 69 6e 73 20 2a 2f 0a 23 64 65 66 69 6e   joins */.#defin
eb10: 65 20 53 51 4c 49 54 45 5f 43 6f 75 6e 74 4f 66  e SQLITE_CountOf
eb20: 56 69 65 77 20 20 20 20 30 78 30 32 30 30 20 20  View    0x0200  
eb30: 20 2f 2a 20 54 68 65 20 63 6f 75 6e 74 2d 6f 66   /* The count-of
eb40: 2d 76 69 65 77 20 6f 70 74 69 6d 69 7a 61 74 69  -view optimizati
eb50: 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  on */.#define SQ
eb60: 4c 49 54 45 5f 43 75 72 73 6f 72 48 69 6e 74 73  LITE_CursorHints
eb70: 20 20 20 20 30 78 30 34 30 30 20 20 20 2f 2a 20      0x0400   /* 
eb80: 41 64 64 20 4f 50 5f 43 75 72 73 6f 72 48 69 6e  Add OP_CursorHin
eb90: 74 20 6f 70 63 6f 64 65 73 20 2a 2f 0a 23 64 65  t opcodes */.#de
eba0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 74 61 74  fine SQLITE_Stat
ebb0: 34 20 20 20 20 20 20 20 20 20 20 30 78 30 38 30  4          0x080
ebc0: 30 20 20 20 2f 2a 20 55 73 65 20 53 54 41 54 34  0   /* Use STAT4
ebd0: 20 64 61 74 61 20 2a 2f 0a 20 20 20 2f 2a 20 54   data */.   /* T
ebe0: 48 33 20 65 78 70 65 63 74 73 20 74 68 65 20 53  H3 expects the S
ebf0: 74 61 74 34 20 20 20 5e 5e 5e 5e 5e 5e 20 76 61  tat4   ^^^^^^ va
ec00: 6c 75 65 20 74 6f 20 62 65 20 30 78 30 38 30 30  lue to be 0x0800
ec10: 2e 20 20 44 6f 6e 27 74 20 63 68 61 6e 67 65 20  .  Don't change 
ec20: 69 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  it */.#define SQ
ec30: 4c 49 54 45 5f 50 75 73 68 44 6f 77 6e 20 20 20  LITE_PushDown   
ec40: 20 20 20 20 30 78 31 30 30 30 20 20 20 2f 2a 20      0x1000   /* 
ec50: 54 68 65 20 70 75 73 68 2d 64 6f 77 6e 20 6f 70  The push-down op
ec60: 74 69 6d 69 7a 61 74 69 6f 6e 20 2a 2f 0a 23 64  timization */.#d
ec70: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 69 6d  efine SQLITE_Sim
ec80: 70 6c 69 66 79 4a 6f 69 6e 20 20 20 30 78 32 30  plifyJoin   0x20
ec90: 30 30 20 20 20 2f 2a 20 43 6f 6e 76 65 72 74 20  00   /* Convert 
eca0: 4c 45 46 54 20 4a 4f 49 4e 20 74 6f 20 4a 4f 49  LEFT JOIN to JOI
ecb0: 4e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  N */.#define SQL
ecc0: 49 54 45 5f 53 6b 69 70 53 63 61 6e 20 20 20 20  ITE_SkipScan    
ecd0: 20 20 20 30 78 34 30 30 30 20 20 20 2f 2a 20 53     0x4000   /* S
ece0: 6b 69 70 2d 73 63 61 6e 73 20 2a 2f 0a 23 64 65  kip-scans */.#de
ecf0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 72 6f 70  fine SQLITE_Prop
ed00: 61 67 61 74 65 43 6f 6e 73 74 20 30 78 38 30 30  agateConst 0x800
ed10: 30 20 20 20 2f 2a 20 54 68 65 20 63 6f 6e 73 74  0   /* The const
ed20: 61 6e 74 20 70 72 6f 70 61 67 61 74 69 6f 6e 20  ant propagation 
ed30: 6f 70 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  opt */.#define S
ed40: 51 4c 49 54 45 5f 41 6c 6c 4f 70 74 73 20 20 20  QLITE_AllOpts   
ed50: 20 20 20 20 20 30 78 66 66 66 66 20 20 20 2f 2a       0xffff   /*
ed60: 20 41 6c 6c 20 6f 70 74 69 6d 69 7a 61 74 69 6f   All optimizatio
ed70: 6e 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 4d 61 63  ns */../*.** Mac
ed80: 72 6f 73 20 66 6f 72 20 74 65 73 74 69 6e 67 20  ros for testing 
ed90: 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 6f  whether or not o
eda0: 70 74 69 6d 69 7a 61 74 69 6f 6e 73 20 61 72 65  ptimizations are
edb0: 20 65 6e 61 62 6c 65 64 20 6f 72 20 64 69 73 61   enabled or disa
edc0: 62 6c 65 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  bled..*/.#define
edd0: 20 4f 70 74 69 6d 69 7a 61 74 69 6f 6e 44 69 73   OptimizationDis
ede0: 61 62 6c 65 64 28 64 62 2c 20 6d 61 73 6b 29 20  abled(db, mask) 
edf0: 20 28 28 28 64 62 29 2d 3e 64 62 4f 70 74 46 6c   (((db)->dbOptFl
ee00: 61 67 73 26 28 6d 61 73 6b 29 29 21 3d 30 29 0a  ags&(mask))!=0).
ee10: 23 64 65 66 69 6e 65 20 4f 70 74 69 6d 69 7a 61  #define Optimiza
ee20: 74 69 6f 6e 45 6e 61 62 6c 65 64 28 64 62 2c 20  tionEnabled(db, 
ee30: 6d 61 73 6b 29 20 20 20 28 28 28 64 62 29 2d 3e  mask)   (((db)->
ee40: 64 62 4f 70 74 46 6c 61 67 73 26 28 6d 61 73 6b  dbOptFlags&(mask
ee50: 29 29 3d 3d 30 29 0a 0a 2f 2a 0a 2a 2a 20 52 65  ))==0)../*.** Re
ee60: 74 75 72 6e 20 74 72 75 65 20 69 66 20 69 74 20  turn true if it 
ee70: 4f 4b 20 74 6f 20 66 61 63 74 6f 72 20 63 6f 6e  OK to factor con
ee80: 73 74 61 6e 74 20 65 78 70 72 65 73 73 69 6f 6e  stant expression
ee90: 73 20 69 6e 74 6f 20 74 68 65 20 69 6e 69 74 69  s into the initi
eea0: 61 6c 69 7a 61 74 69 6f 6e 0a 2a 2a 20 63 6f 64  alization.** cod
eeb0: 65 2e 20 54 68 65 20 61 72 67 75 6d 65 6e 74 20  e. The argument 
eec0: 69 73 20 61 20 50 61 72 73 65 20 6f 62 6a 65 63  is a Parse objec
eed0: 74 20 66 6f 72 20 74 68 65 20 63 6f 64 65 20 67  t for the code g
eee0: 65 6e 65 72 61 74 6f 72 2e 0a 2a 2f 0a 23 64 65  enerator..*/.#de
eef0: 66 69 6e 65 20 43 6f 6e 73 74 46 61 63 74 6f 72  fine ConstFactor
ef00: 4f 6b 28 50 29 20 28 28 50 29 2d 3e 6f 6b 43 6f  Ok(P) ((P)->okCo
ef10: 6e 73 74 46 61 63 74 6f 72 29 0a 0a 2f 2a 0a 2a  nstFactor)../*.*
ef20: 2a 20 50 6f 73 73 69 62 6c 65 20 76 61 6c 75 65  * Possible value
ef30: 73 20 66 6f 72 20 74 68 65 20 73 71 6c 69 74 65  s for the sqlite
ef40: 2e 6d 61 67 69 63 20 66 69 65 6c 64 2e 0a 2a 2a  .magic field..**
ef50: 20 54 68 65 20 6e 75 6d 62 65 72 73 20 61 72 65   The numbers are
ef60: 20 6f 62 74 61 69 6e 65 64 20 61 74 20 72 61 6e   obtained at ran
ef70: 64 6f 6d 20 61 6e 64 20 68 61 76 65 20 6e 6f 20  dom and have no 
ef80: 73 70 65 63 69 61 6c 20 6d 65 61 6e 69 6e 67 2c  special meaning,
ef90: 20 6f 74 68 65 72 0a 2a 2a 20 74 68 61 6e 20 62   other.** than b
efa0: 65 69 6e 67 20 64 69 73 74 69 6e 63 74 20 66 72  eing distinct fr
efb0: 6f 6d 20 6f 6e 65 20 61 6e 6f 74 68 65 72 2e 0a  om one another..
efc0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
efd0: 45 5f 4d 41 47 49 43 5f 4f 50 45 4e 20 20 20 20  E_MAGIC_OPEN    
efe0: 20 30 78 61 30 32 39 61 36 39 37 20 20 2f 2a 20   0xa029a697  /* 
eff0: 44 61 74 61 62 61 73 65 20 69 73 20 6f 70 65 6e  Database is open
f000: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
f010: 54 45 5f 4d 41 47 49 43 5f 43 4c 4f 53 45 44 20  TE_MAGIC_CLOSED 
f020: 20 20 30 78 39 66 33 63 32 64 33 33 20 20 2f 2a    0x9f3c2d33  /*
f030: 20 44 61 74 61 62 61 73 65 20 69 73 20 63 6c 6f   Database is clo
f040: 73 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  sed */.#define S
f050: 51 4c 49 54 45 5f 4d 41 47 49 43 5f 53 49 43 4b  QLITE_MAGIC_SICK
f060: 20 20 20 20 20 30 78 34 62 37 37 31 32 39 30 20       0x4b771290 
f070: 20 2f 2a 20 45 72 72 6f 72 20 61 6e 64 20 61 77   /* Error and aw
f080: 61 69 74 69 6e 67 20 63 6c 6f 73 65 20 2a 2f 0a  aiting close */.
f090: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d  #define SQLITE_M
f0a0: 41 47 49 43 5f 42 55 53 59 20 20 20 20 20 30 78  AGIC_BUSY     0x
f0b0: 66 30 33 62 37 39 30 36 20 20 2f 2a 20 44 61 74  f03b7906  /* Dat
f0c0: 61 62 61 73 65 20 63 75 72 72 65 6e 74 6c 79 20  abase currently 
f0d0: 69 6e 20 75 73 65 20 2a 2f 0a 23 64 65 66 69 6e  in use */.#defin
f0e0: 65 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 45  e SQLITE_MAGIC_E
f0f0: 52 52 4f 52 20 20 20 20 30 78 62 35 33 35 37 39  RROR    0xb53579
f100: 33 30 20 20 2f 2a 20 41 6e 20 53 51 4c 49 54 45  30  /* An SQLITE
f110: 5f 4d 49 53 55 53 45 20 65 72 72 6f 72 20 6f 63  _MISUSE error oc
f120: 63 75 72 72 65 64 20 2a 2f 0a 23 64 65 66 69 6e  curred */.#defin
f130: 65 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 5a  e SQLITE_MAGIC_Z
f140: 4f 4d 42 49 45 20 20 20 30 78 36 34 63 66 66 63  OMBIE   0x64cffc
f150: 37 66 20 20 2f 2a 20 43 6c 6f 73 65 20 77 69 74  7f  /* Close wit
f160: 68 20 6c 61 73 74 20 73 74 61 74 65 6d 65 6e 74  h last statement
f170: 20 63 6c 6f 73 65 20 2a 2f 0a 0a 2f 2a 0a 2a 2a   close */../*.**
f180: 20 45 61 63 68 20 53 51 4c 20 66 75 6e 63 74 69   Each SQL functi
f190: 6f 6e 20 69 73 20 64 65 66 69 6e 65 64 20 62 79  on is defined by
f1a0: 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20   an instance of 
f1b0: 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 0a 2a 2a  the following.**
f1c0: 20 73 74 72 75 63 74 75 72 65 2e 20 20 46 6f 72   structure.  For
f1d0: 20 67 6c 6f 62 61 6c 20 62 75 69 6c 74 2d 69 6e   global built-in
f1e0: 20 66 75 6e 63 74 69 6f 6e 73 20 28 65 78 3a 20   functions (ex: 
f1f0: 73 75 62 73 74 72 28 29 2c 20 6d 61 78 28 29 2c  substr(), max(),
f200: 20 63 6f 75 6e 74 28 29 29 0a 2a 2a 20 61 20 70   count()).** a p
f210: 6f 69 6e 74 65 72 20 74 6f 20 74 68 69 73 20 73  ointer to this s
f220: 74 72 75 63 74 75 72 65 20 69 73 20 68 65 6c 64  tructure is held
f230: 20 69 6e 20 74 68 65 20 73 71 6c 69 74 65 33 42   in the sqlite3B
f240: 75 69 6c 74 69 6e 46 75 6e 63 74 69 6f 6e 73 20  uiltinFunctions 
f250: 6f 62 6a 65 63 74 2e 0a 2a 2a 20 46 6f 72 20 70  object..** For p
f260: 65 72 2d 63 6f 6e 6e 65 63 74 69 6f 6e 20 61 70  er-connection ap
f270: 70 6c 69 63 61 74 69 6f 6e 2d 64 65 66 69 6e 65  plication-define
f280: 64 20 66 75 6e 63 74 69 6f 6e 73 2c 20 61 20 70  d functions, a p
f290: 6f 69 6e 74 65 72 20 74 6f 20 74 68 69 73 0a 2a  ointer to this.*
f2a0: 2a 20 73 74 72 75 63 74 75 72 65 20 69 73 20 68  * structure is h
f2b0: 65 6c 64 20 69 6e 20 74 68 65 20 64 62 2d 3e 61  eld in the db->a
f2c0: 48 61 73 68 20 68 61 73 68 20 74 61 62 6c 65 2e  Hash hash table.
f2d0: 0a 2a 2a 0a 2a 2a 20 54 68 65 20 75 2e 70 48 61  .**.** The u.pHa
f2e0: 73 68 20 66 69 65 6c 64 20 69 73 20 75 73 65 64  sh field is used
f2f0: 20 62 79 20 74 68 65 20 67 6c 6f 62 61 6c 20 62   by the global b
f300: 75 69 6c 74 2d 69 6e 73 2e 20 20 54 68 65 20 75  uilt-ins.  The u
f310: 2e 70 44 65 73 74 72 75 63 74 6f 72 0a 2a 2a 20  .pDestructor.** 
f320: 66 69 65 6c 64 20 69 73 20 75 73 65 64 20 62 79  field is used by
f330: 20 70 65 72 2d 63 6f 6e 6e 65 63 74 69 6f 6e 20   per-connection 
f340: 61 70 70 2d 64 65 66 20 66 75 6e 63 74 69 6f 6e  app-def function
f350: 73 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 46 75 6e  s..*/.struct Fun
f360: 63 44 65 66 20 7b 0a 20 20 69 38 20 6e 41 72 67  cDef {.  i8 nArg
f370: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
f380: 20 4e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d   Number of argum
f390: 65 6e 74 73 2e 20 20 2d 31 20 6d 65 61 6e 73 20  ents.  -1 means 
f3a0: 75 6e 6c 69 6d 69 74 65 64 20 2a 2f 0a 20 20 75  unlimited */.  u
f3b0: 33 32 20 66 75 6e 63 46 6c 61 67 73 3b 20 20 20  32 funcFlags;   
f3c0: 20 20 20 20 2f 2a 20 53 6f 6d 65 20 63 6f 6d 62      /* Some comb
f3d0: 69 6e 61 74 69 6f 6e 20 6f 66 20 53 51 4c 49 54  ination of SQLIT
f3e0: 45 5f 46 55 4e 43 5f 2a 20 2a 2f 0a 20 20 76 6f  E_FUNC_* */.  vo
f3f0: 69 64 20 2a 70 55 73 65 72 44 61 74 61 3b 20 20  id *pUserData;  
f400: 20 20 20 2f 2a 20 55 73 65 72 20 64 61 74 61 20     /* User data 
f410: 70 61 72 61 6d 65 74 65 72 20 2a 2f 0a 20 20 46  parameter */.  F
f420: 75 6e 63 44 65 66 20 2a 70 4e 65 78 74 3b 20 20  uncDef *pNext;  
f430: 20 20 20 20 2f 2a 20 4e 65 78 74 20 66 75 6e 63      /* Next func
f440: 74 69 6f 6e 20 77 69 74 68 20 73 61 6d 65 20 6e  tion with same n
f450: 61 6d 65 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a  ame */.  void (*
f460: 78 53 46 75 6e 63 29 28 73 71 6c 69 74 65 33 5f  xSFunc)(sqlite3_
f470: 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c  context*,int,sql
f480: 69 74 65 33 5f 76 61 6c 75 65 2a 2a 29 3b 20 2f  ite3_value**); /
f490: 2a 20 66 75 6e 63 20 6f 72 20 61 67 67 2d 73 74  * func or agg-st
f4a0: 65 70 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78  ep */.  void (*x
f4b0: 46 69 6e 61 6c 69 7a 65 29 28 73 71 6c 69 74 65  Finalize)(sqlite
f4c0: 33 5f 63 6f 6e 74 65 78 74 2a 29 3b 20 20 20 20  3_context*);    
f4d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
f4e0: 20 41 67 67 20 66 69 6e 61 6c 69 7a 65 72 20 2a   Agg finalizer *
f4f0: 2f 0a 20 20 76 6f 69 64 20 28 2a 78 56 61 6c 75  /.  void (*xValu
f500: 65 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65  e)(sqlite3_conte
f510: 78 74 2a 29 3b 20 20 20 20 20 20 20 20 20 20 20  xt*);           
f520: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 75 72            /* Cur
f530: 72 65 6e 74 20 61 67 67 20 76 61 6c 75 65 20 2a  rent agg value *
f540: 2f 0a 20 20 76 6f 69 64 20 28 2a 78 49 6e 76 65  /.  void (*xInve
f550: 72 73 65 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e  rse)(sqlite3_con
f560: 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65  text*,int,sqlite
f570: 33 5f 76 61 6c 75 65 2a 2a 29 3b 20 2f 2a 20 69  3_value**); /* i
f580: 6e 76 65 72 73 65 20 61 67 67 2d 73 74 65 70 20  nverse agg-step 
f590: 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20  */.  const char 
f5a0: 2a 7a 4e 61 6d 65 3b 20 20 20 2f 2a 20 53 51 4c  *zName;   /* SQL
f5b0: 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 66 75 6e   name of the fun
f5c0: 63 74 69 6f 6e 2e 20 2a 2f 0a 20 20 75 6e 69 6f  ction. */.  unio
f5d0: 6e 20 7b 0a 20 20 20 20 46 75 6e 63 44 65 66 20  n {.    FuncDef 
f5e0: 2a 70 48 61 73 68 3b 20 20 20 20 20 20 2f 2a 20  *pHash;      /* 
f5f0: 4e 65 78 74 20 77 69 74 68 20 61 20 64 69 66 66  Next with a diff
f600: 65 72 65 6e 74 20 6e 61 6d 65 20 62 75 74 20 74  erent name but t
f610: 68 65 20 73 61 6d 65 20 68 61 73 68 20 2a 2f 0a  he same hash */.
f620: 20 20 20 20 46 75 6e 63 44 65 73 74 72 75 63 74      FuncDestruct
f630: 6f 72 20 2a 70 44 65 73 74 72 75 63 74 6f 72 3b  or *pDestructor;
f640: 20 20 20 2f 2a 20 52 65 66 65 72 65 6e 63 65 20     /* Reference 
f650: 63 6f 75 6e 74 65 64 20 64 65 73 74 72 75 63 74  counted destruct
f660: 6f 72 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20  or function */. 
f670: 20 7d 20 75 3b 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20   } u;.};../*.** 
f680: 54 68 69 73 20 73 74 72 75 63 74 75 72 65 20 65  This structure e
f690: 6e 63 61 70 73 75 6c 61 74 65 73 20 61 20 75 73  ncapsulates a us
f6a0: 65 72 2d 66 75 6e 63 74 69 6f 6e 20 64 65 73 74  er-function dest
f6b0: 72 75 63 74 6f 72 20 63 61 6c 6c 62 61 63 6b 20  ructor callback 
f6c0: 28 61 73 0a 2a 2a 20 63 6f 6e 66 69 67 75 72 65  (as.** configure
f6d0: 64 20 75 73 69 6e 67 20 63 72 65 61 74 65 5f 66  d using create_f
f6e0: 75 6e 63 74 69 6f 6e 5f 76 32 28 29 29 20 61 6e  unction_v2()) an
f6f0: 64 20 61 20 72 65 66 65 72 65 6e 63 65 20 63 6f  d a reference co
f700: 75 6e 74 65 72 2e 20 57 68 65 6e 0a 2a 2a 20 63  unter. When.** c
f710: 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 5f 76  reate_function_v
f720: 32 28 29 20 69 73 20 63 61 6c 6c 65 64 20 74 6f  2() is called to
f730: 20 63 72 65 61 74 65 20 61 20 66 75 6e 63 74 69   create a functi
f740: 6f 6e 20 77 69 74 68 20 61 20 64 65 73 74 72 75  on with a destru
f750: 63 74 6f 72 2c 0a 2a 2a 20 61 20 73 69 6e 67 6c  ctor,.** a singl
f760: 65 20 6f 62 6a 65 63 74 20 6f 66 20 74 68 69 73  e object of this
f770: 20 74 79 70 65 20 69 73 20 61 6c 6c 6f 63 61 74   type is allocat
f780: 65 64 2e 20 46 75 6e 63 44 65 73 74 72 75 63 74  ed. FuncDestruct
f790: 6f 72 2e 6e 52 65 66 20 69 73 20 73 65 74 20 74  or.nRef is set t
f7a0: 6f 0a 2a 2a 20 74 68 65 20 6e 75 6d 62 65 72 20  o.** the number 
f7b0: 6f 66 20 46 75 6e 63 44 65 66 20 6f 62 6a 65 63  of FuncDef objec
f7c0: 74 73 20 63 72 65 61 74 65 64 20 28 65 69 74 68  ts created (eith
f7d0: 65 72 20 31 20 6f 72 20 33 2c 20 64 65 70 65 6e  er 1 or 3, depen
f7e0: 64 69 6e 67 20 6f 6e 20 77 68 65 74 68 65 72 0a  ding on whether.
f7f0: 2a 2a 20 6f 72 20 6e 6f 74 20 74 68 65 20 73 70  ** or not the sp
f800: 65 63 69 66 69 65 64 20 65 6e 63 6f 64 69 6e 67  ecified encoding
f810: 20 69 73 20 53 51 4c 49 54 45 5f 41 4e 59 29 2e   is SQLITE_ANY).
f820: 20 54 68 65 20 46 75 6e 63 44 65 66 2e 70 44 65   The FuncDef.pDe
f830: 73 74 72 75 63 74 6f 72 0a 2a 2a 20 6d 65 6d 62  structor.** memb
f840: 65 72 20 6f 66 20 65 61 63 68 20 6f 66 20 74 68  er of each of th
f850: 65 20 6e 65 77 20 46 75 6e 63 44 65 66 20 6f 62  e new FuncDef ob
f860: 6a 65 63 74 73 20 69 73 20 73 65 74 20 74 6f 20  jects is set to 
f870: 70 6f 69 6e 74 20 74 6f 20 74 68 65 20 61 6c 6c  point to the all
f880: 6f 63 61 74 65 64 0a 2a 2a 20 46 75 6e 63 44 65  ocated.** FuncDe
f890: 73 74 72 75 63 74 6f 72 2e 0a 2a 2a 0a 2a 2a 20  structor..**.** 
f8a0: 54 68 65 72 65 61 66 74 65 72 2c 20 77 68 65 6e  Thereafter, when
f8b0: 20 6f 6e 65 20 6f 66 20 74 68 65 20 46 75 6e 63   one of the Func
f8c0: 44 65 66 20 6f 62 6a 65 63 74 73 20 69 73 20 64  Def objects is d
f8d0: 65 6c 65 74 65 64 2c 20 74 68 65 20 72 65 66 65  eleted, the refe
f8e0: 72 65 6e 63 65 0a 2a 2a 20 63 6f 75 6e 74 20 6f  rence.** count o
f8f0: 6e 20 74 68 69 73 20 6f 62 6a 65 63 74 20 69 73  n this object is
f900: 20 64 65 63 72 65 6d 65 6e 74 65 64 2e 20 57 68   decremented. Wh
f910: 65 6e 20 69 74 20 72 65 61 63 68 65 73 20 30 2c  en it reaches 0,
f920: 20 74 68 65 20 64 65 73 74 72 75 63 74 6f 72 0a   the destructor.
f930: 2a 2a 20 69 73 20 69 6e 76 6f 6b 65 64 20 61 6e  ** is invoked an
f940: 64 20 74 68 65 20 46 75 6e 63 44 65 73 74 72 75  d the FuncDestru
f950: 63 74 6f 72 20 73 74 72 75 63 74 75 72 65 20 66  ctor structure f
f960: 72 65 65 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  reed..*/.struct 
f970: 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72 20 7b  FuncDestructor {
f980: 0a 20 20 69 6e 74 20 6e 52 65 66 3b 0a 20 20 76  .  int nRef;.  v
f990: 6f 69 64 20 28 2a 78 44 65 73 74 72 6f 79 29 28  oid (*xDestroy)(
f9a0: 76 6f 69 64 20 2a 29 3b 0a 20 20 76 6f 69 64 20  void *);.  void 
f9b0: 2a 70 55 73 65 72 44 61 74 61 3b 0a 7d 3b 0a 0a  *pUserData;.};..
f9c0: 2f 2a 0a 2a 2a 20 50 6f 73 73 69 62 6c 65 20 76  /*.** Possible v
f9d0: 61 6c 75 65 73 20 66 6f 72 20 46 75 6e 63 44 65  alues for FuncDe
f9e0: 66 2e 66 6c 61 67 73 2e 20 20 4e 6f 74 65 20 74  f.flags.  Note t
f9f0: 68 61 74 20 74 68 65 20 5f 4c 45 4e 47 54 48 20  hat the _LENGTH 
fa00: 61 6e 64 20 5f 54 59 50 45 4f 46 0a 2a 2a 20 76  and _TYPEOF.** v
fa10: 61 6c 75 65 73 20 6d 75 73 74 20 63 6f 72 72 65  alues must corre
fa20: 73 70 6f 6e 64 20 74 6f 20 4f 50 46 4c 41 47 5f  spond to OPFLAG_
fa30: 4c 45 4e 47 54 48 41 52 47 20 61 6e 64 20 4f 50  LENGTHARG and OP
fa40: 46 4c 41 47 5f 54 59 50 45 4f 46 41 52 47 2e 20  FLAG_TYPEOFARG. 
fa50: 20 41 6e 64 0a 2a 2a 20 53 51 4c 49 54 45 5f 46   And.** SQLITE_F
fa60: 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 20 6d 75 73  UNC_CONSTANT mus
fa70: 74 20 62 65 20 74 68 65 20 73 61 6d 65 20 61 73  t be the same as
fa80: 20 53 51 4c 49 54 45 5f 44 45 54 45 52 4d 49 4e   SQLITE_DETERMIN
fa90: 49 53 54 49 43 2e 20 20 54 68 65 72 65 0a 2a 2a  ISTIC.  There.**
faa0: 20 61 72 65 20 61 73 73 65 72 74 28 29 20 73 74   are assert() st
fab0: 61 74 65 6d 65 6e 74 73 20 69 6e 20 74 68 65 20  atements in the 
fac0: 63 6f 64 65 20 74 6f 20 76 65 72 69 66 79 20 74  code to verify t
fad0: 68 69 73 2e 0a 2a 2a 0a 2a 2a 20 56 61 6c 75 65  his..**.** Value
fae0: 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 28 65 6e   constraints (en
faf0: 66 6f 72 63 65 64 20 76 69 61 20 61 73 73 65 72  forced via asser
fb00: 74 28 29 29 3a 0a 2a 2a 20 20 20 20 20 53 51 4c  t()):.**     SQL
fb10: 49 54 45 5f 46 55 4e 43 5f 4d 49 4e 4d 41 58 20  ITE_FUNC_MINMAX 
fb20: 20 20 20 3d 3d 20 20 4e 43 5f 4d 69 6e 4d 61 78     ==  NC_MinMax
fb30: 41 67 67 20 20 20 20 20 20 3d 3d 20 53 46 5f 4d  Agg      == SF_M
fb40: 69 6e 4d 61 78 41 67 67 0a 2a 2a 20 20 20 20 20  inMaxAgg.**     
fb50: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4c 45 4e 47  SQLITE_FUNC_LENG
fb60: 54 48 20 20 20 20 3d 3d 20 20 4f 50 46 4c 41 47  TH    ==  OPFLAG
fb70: 5f 4c 45 4e 47 54 48 41 52 47 0a 2a 2a 20 20 20  _LENGTHARG.**   
fb80: 20 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 54 59    SQLITE_FUNC_TY
fb90: 50 45 4f 46 20 20 20 20 3d 3d 20 20 4f 50 46 4c  PEOF    ==  OPFL
fba0: 41 47 5f 54 59 50 45 4f 46 41 52 47 0a 2a 2a 20  AG_TYPEOFARG.** 
fbb0: 20 20 20 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f      SQLITE_FUNC_
fbc0: 43 4f 4e 53 54 41 4e 54 20 20 3d 3d 20 20 53 51  CONSTANT  ==  SQ
fbd0: 4c 49 54 45 5f 44 45 54 45 52 4d 49 4e 49 53 54  LITE_DETERMINIST
fbe0: 49 43 20 66 72 6f 6d 20 74 68 65 20 41 50 49 0a  IC from the API.
fbf0: 2a 2a 20 20 20 20 20 53 51 4c 49 54 45 5f 46 55  **     SQLITE_FU
fc00: 4e 43 5f 45 4e 43 4d 41 53 4b 20 20 20 64 65 70  NC_ENCMASK   dep
fc10: 65 6e 64 73 20 6f 6e 20 53 51 4c 49 54 45 5f 55  ends on SQLITE_U
fc20: 54 46 2a 20 6d 61 63 72 6f 73 20 69 6e 20 74 68  TF* macros in th
fc30: 65 20 41 50 49 0a 2a 2f 0a 23 64 65 66 69 6e 65  e API.*/.#define
fc40: 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 45 4e 43   SQLITE_FUNC_ENC
fc50: 4d 41 53 4b 20 20 30 78 30 30 30 33 20 2f 2a 20  MASK  0x0003 /* 
fc60: 53 51 4c 49 54 45 5f 55 54 46 38 2c 20 53 51 4c  SQLITE_UTF8, SQL
fc70: 49 54 45 5f 55 54 46 31 36 42 45 20 6f 72 20 55  ITE_UTF16BE or U
fc80: 54 46 31 36 4c 45 20 2a 2f 0a 23 64 65 66 69 6e  TF16LE */.#defin
fc90: 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4c 49  e SQLITE_FUNC_LI
fca0: 4b 45 20 20 20 20 20 30 78 30 30 30 34 20 2f 2a  KE     0x0004 /*
fcb0: 20 43 61 6e 64 69 64 61 74 65 20 66 6f 72 20 74   Candidate for t
fcc0: 68 65 20 4c 49 4b 45 20 6f 70 74 69 6d 69 7a 61  he LIKE optimiza
fcd0: 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  tion */.#define 
fce0: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 41 53 45  SQLITE_FUNC_CASE
fcf0: 20 20 20 20 20 30 78 30 30 30 38 20 2f 2a 20 43       0x0008 /* C
fd00: 61 73 65 2d 73 65 6e 73 69 74 69 76 65 20 4c 49  ase-sensitive LI
fd10: 4b 45 2d 74 79 70 65 20 66 75 6e 63 74 69 6f 6e  KE-type function
fd20: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
fd30: 54 45 5f 46 55 4e 43 5f 45 50 48 45 4d 20 20 20  TE_FUNC_EPHEM   
fd40: 20 30 78 30 30 31 30 20 2f 2a 20 45 70 68 65 6d   0x0010 /* Ephem
fd50: 65 72 61 6c 2e 20 20 44 65 6c 65 74 65 20 77 69  eral.  Delete wi
fd60: 74 68 20 56 44 42 45 20 2a 2f 0a 23 64 65 66 69  th VDBE */.#defi
fd70: 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e  ne SQLITE_FUNC_N
fd80: 45 45 44 43 4f 4c 4c 20 30 78 30 30 32 30 20 2f  EEDCOLL 0x0020 /
fd90: 2a 20 73 71 6c 69 74 65 33 47 65 74 46 75 6e 63  * sqlite3GetFunc
fda0: 43 6f 6c 6c 53 65 71 28 29 20 6d 69 67 68 74 20  CollSeq() might 
fdb0: 62 65 20 63 61 6c 6c 65 64 2a 2f 0a 23 64 65 66  be called*/.#def
fdc0: 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f  ine SQLITE_FUNC_
fdd0: 4c 45 4e 47 54 48 20 20 20 30 78 30 30 34 30 20  LENGTH   0x0040 
fde0: 2f 2a 20 42 75 69 6c 74 2d 69 6e 20 6c 65 6e 67  /* Built-in leng
fdf0: 74 68 28 29 20 66 75 6e 63 74 69 6f 6e 20 2a 2f  th() function */
fe00: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
fe10: 46 55 4e 43 5f 54 59 50 45 4f 46 20 20 20 30 78  FUNC_TYPEOF   0x
fe20: 30 30 38 30 20 2f 2a 20 42 75 69 6c 74 2d 69 6e  0080 /* Built-in
fe30: 20 74 79 70 65 6f 66 28 29 20 66 75 6e 63 74 69   typeof() functi
fe40: 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  on */.#define SQ
fe50: 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 55 4e 54 20  LITE_FUNC_COUNT 
fe60: 20 20 20 30 78 30 31 30 30 20 2f 2a 20 42 75 69     0x0100 /* Bui
fe70: 6c 74 2d 69 6e 20 63 6f 75 6e 74 28 2a 29 20 61  lt-in count(*) a
fe80: 67 67 72 65 67 61 74 65 20 2a 2f 0a 23 64 65 66  ggregate */.#def
fe90: 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f  ine SQLITE_FUNC_
fea0: 43 4f 41 4c 45 53 43 45 20 30 78 30 32 30 30 20  COALESCE 0x0200 
feb0: 2f 2a 20 42 75 69 6c 74 2d 69 6e 20 63 6f 61 6c  /* Built-in coal
fec0: 65 73 63 65 28 29 20 6f 72 20 69 66 6e 75 6c 6c  esce() or ifnull
fed0: 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  () */.#define SQ
fee0: 4c 49 54 45 5f 46 55 4e 43 5f 55 4e 4c 49 4b 45  LITE_FUNC_UNLIKE
fef0: 4c 59 20 30 78 30 34 30 30 20 2f 2a 20 42 75 69  LY 0x0400 /* Bui
ff00: 6c 74 2d 69 6e 20 75 6e 6c 69 6b 65 6c 79 28 29  lt-in unlikely()
ff10: 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65   function */.#de
ff20: 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43  fine SQLITE_FUNC
ff30: 5f 43 4f 4e 53 54 41 4e 54 20 30 78 30 38 30 30  _CONSTANT 0x0800
ff40: 20 2f 2a 20 43 6f 6e 73 74 61 6e 74 20 69 6e 70   /* Constant inp
ff50: 75 74 73 20 67 69 76 65 20 61 20 63 6f 6e 73 74  uts give a const
ff60: 61 6e 74 20 6f 75 74 70 75 74 20 2a 2f 0a 23 64  ant output */.#d
ff70: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e  efine SQLITE_FUN
ff80: 43 5f 4d 49 4e 4d 41 58 20 20 20 30 78 31 30 30  C_MINMAX   0x100
ff90: 30 20 2f 2a 20 54 72 75 65 20 66 6f 72 20 6d 69  0 /* True for mi
ffa0: 6e 28 29 20 61 6e 64 20 6d 61 78 28 29 20 61 67  n() and max() ag
ffb0: 67 72 65 67 61 74 65 73 20 2a 2f 0a 23 64 65 66  gregates */.#def
ffc0: 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f  ine SQLITE_FUNC_
ffd0: 53 4c 4f 43 48 4e 47 20 20 30 78 32 30 30 30 20  SLOCHNG  0x2000 
ffe0: 2f 2a 20 22 53 6c 6f 77 20 43 68 61 6e 67 65 22  /* "Slow Change"
fff0: 2e 20 56 61 6c 75 65 20 63 6f 6e 73 74 61 6e 74  . Value constant
10000 20 64 75 72 69 6e 67 20 61 0a 20 20 20 20 20 20   during a.      
10010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a                **
10030 20 73 69 6e 67 6c 65 20 71 75 65 72 79 20 2d 20   single query - 
10040 6d 69 67 68 74 20 63 68 61 6e 67 65 20 6f 76 65  might change ove
10050 72 20 74 69 6d 65 20 2a 2f 0a 23 64 65 66 69 6e  r time */.#defin
10060 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 41 46  e SQLITE_FUNC_AF
10070 46 49 4e 49 54 59 20 30 78 34 30 30 30 20 2f 2a  FINITY 0x4000 /*
10080 20 42 75 69 6c 74 2d 69 6e 20 61 66 66 69 6e 69   Built-in affini
10090 74 79 28 29 20 66 75 6e 63 74 69 6f 6e 20 2a 2f  ty() function */
100a0 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
100b0 46 55 4e 43 5f 4f 46 46 53 45 54 20 20 20 30 78  FUNC_OFFSET   0x
100c0 38 30 30 30 20 2f 2a 20 42 75 69 6c 74 2d 69 6e  8000 /* Built-in
100d0 20 73 71 6c 69 74 65 5f 6f 66 66 73 65 74 28 29   sqlite_offset()
100e0 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65   function */.#de
100f0 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43  fine SQLITE_FUNC
10100 5f 57 49 4e 44 4f 57 20 20 20 30 78 30 30 30 31  _WINDOW   0x0001
10110 30 30 30 30 20 2f 2a 20 42 75 69 6c 74 2d 69 6e  0000 /* Built-in
10120 20 77 69 6e 64 6f 77 2d 6f 6e 6c 79 20 66 75 6e   window-only fun
10130 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65  ction */.#define
10140 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 49 4e 54   SQLITE_FUNC_INT
10150 45 52 4e 41 4c 20 30 78 30 30 30 34 30 30 30 30  ERNAL 0x00040000
10160 20 2f 2a 20 46 6f 72 20 75 73 65 20 62 79 20 4e   /* For use by N
10170 65 73 74 65 64 50 61 72 73 65 28 29 20 6f 6e 6c  estedParse() onl
10180 79 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  y */../*.** The 
10190 66 6f 6c 6c 6f 77 69 6e 67 20 74 68 72 65 65 20  following three 
101a0 6d 61 63 72 6f 73 2c 20 46 55 4e 43 54 49 4f 4e  macros, FUNCTION
101b0 28 29 2c 20 4c 49 4b 45 46 55 4e 43 28 29 20 61  (), LIKEFUNC() a
101c0 6e 64 20 41 47 47 52 45 47 41 54 45 28 29 20 61  nd AGGREGATE() a
101d0 72 65 0a 2a 2a 20 75 73 65 64 20 74 6f 20 63 72  re.** used to cr
101e0 65 61 74 65 20 74 68 65 20 69 6e 69 74 69 61 6c  eate the initial
101f0 69 7a 65 72 73 20 66 6f 72 20 74 68 65 20 46 75  izers for the Fu
10200 6e 63 44 65 66 20 73 74 72 75 63 74 75 72 65 73  ncDef structures
10210 2e 0a 2a 2a 0a 2a 2a 20 20 20 46 55 4e 43 54 49  ..**.**   FUNCTI
10220 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20  ON(zName, nArg, 
10230 69 41 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63  iArg, bNC, xFunc
10240 29 0a 2a 2a 20 20 20 20 20 55 73 65 64 20 74 6f  ).**     Used to
10250 20 63 72 65 61 74 65 20 61 20 73 63 61 6c 61 72   create a scalar
10260 20 66 75 6e 63 74 69 6f 6e 20 64 65 66 69 6e 69   function defini
10270 74 69 6f 6e 20 6f 66 20 61 20 66 75 6e 63 74 69  tion of a functi
10280 6f 6e 20 7a 4e 61 6d 65 0a 2a 2a 20 20 20 20 20  on zName.**     
10290 69 6d 70 6c 65 6d 65 6e 74 65 64 20 62 79 20 43  implemented by C
102a0 20 66 75 6e 63 74 69 6f 6e 20 78 46 75 6e 63 20   function xFunc 
102b0 74 68 61 74 20 61 63 63 65 70 74 73 20 6e 41 72  that accepts nAr
102c0 67 20 61 72 67 75 6d 65 6e 74 73 2e 20 54 68 65  g arguments. The
102d0 0a 2a 2a 20 20 20 20 20 76 61 6c 75 65 20 70 61  .**     value pa
102e0 73 73 65 64 20 61 73 20 69 41 72 67 20 69 73 20  ssed as iArg is 
102f0 63 61 73 74 20 74 6f 20 61 20 28 76 6f 69 64 2a  cast to a (void*
10300 29 20 61 6e 64 20 6d 61 64 65 20 61 76 61 69 6c  ) and made avail
10310 61 62 6c 65 0a 2a 2a 20 20 20 20 20 61 73 20 74  able.**     as t
10320 68 65 20 75 73 65 72 2d 64 61 74 61 20 28 73 71  he user-data (sq
10330 6c 69 74 65 33 5f 75 73 65 72 5f 64 61 74 61 28  lite3_user_data(
10340 29 29 20 66 6f 72 20 74 68 65 20 66 75 6e 63 74  )) for the funct
10350 69 6f 6e 2e 20 49 66 0a 2a 2a 20 20 20 20 20 61  ion. If.**     a
10360 72 67 75 6d 65 6e 74 20 62 4e 43 20 69 73 20 74  rgument bNC is t
10370 72 75 65 2c 20 74 68 65 6e 20 74 68 65 20 53 51  rue, then the SQ
10380 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f  LITE_FUNC_NEEDCO
10390 4c 4c 20 66 6c 61 67 20 69 73 20 73 65 74 2e 0a  LL flag is set..
103a0 2a 2a 0a 2a 2a 20 20 20 56 46 55 4e 43 54 49 4f  **.**   VFUNCTIO
103b0 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69  N(zName, nArg, i
103c0 41 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29  Arg, bNC, xFunc)
103d0 0a 2a 2a 20 20 20 20 20 4c 69 6b 65 20 46 55 4e  .**     Like FUN
103e0 43 54 49 4f 4e 20 65 78 63 65 70 74 20 69 74 20  CTION except it 
103f0 6f 6d 69 74 73 20 74 68 65 20 53 51 4c 49 54 45  omits the SQLITE
10400 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 20 66  _FUNC_CONSTANT f
10410 6c 61 67 2e 0a 2a 2a 0a 2a 2a 20 20 20 44 46 55  lag..**.**   DFU
10420 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41  NCTION(zName, nA
10430 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78  rg, iArg, bNC, x
10440 46 75 6e 63 29 0a 2a 2a 20 20 20 20 20 4c 69 6b  Func).**     Lik
10450 65 20 46 55 4e 43 54 49 4f 4e 20 65 78 63 65 70  e FUNCTION excep
10460 74 20 69 74 20 6f 6d 69 74 73 20 74 68 65 20 53  t it omits the S
10470 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54  QLITE_FUNC_CONST
10480 41 4e 54 20 66 6c 61 67 20 61 6e 64 0a 2a 2a 20  ANT flag and.** 
10490 20 20 20 20 61 64 64 73 20 74 68 65 20 53 51 4c      adds the SQL
104a0 49 54 45 5f 46 55 4e 43 5f 53 4c 4f 43 48 4e 47  ITE_FUNC_SLOCHNG
104b0 20 66 6c 61 67 2e 20 20 55 73 65 64 20 66 6f 72   flag.  Used for
104c0 20 64 61 74 65 20 26 20 74 69 6d 65 20 66 75 6e   date & time fun
104d0 63 74 69 6f 6e 73 0a 2a 2a 20 20 20 20 20 61 6e  ctions.**     an
104e0 64 20 66 75 6e 63 74 69 6f 6e 73 20 6c 69 6b 65  d functions like
104f0 20 73 71 6c 69 74 65 5f 76 65 72 73 69 6f 6e 28   sqlite_version(
10500 29 20 74 68 61 74 20 63 61 6e 20 63 68 61 6e 67  ) that can chang
10510 65 2c 20 62 75 74 20 6e 6f 74 20 64 75 72 69 6e  e, but not durin
10520 67 0a 2a 2a 20 20 20 20 20 61 20 73 69 6e 67 6c  g.**     a singl
10530 65 20 71 75 65 72 79 2e 20 20 54 68 65 20 69 41  e query.  The iA
10540 72 67 20 69 73 20 69 67 6e 6f 72 65 64 2e 20 20  rg is ignored.  
10550 54 68 65 20 75 73 65 72 2d 64 61 74 61 20 69 73  The user-data is
10560 20 61 6c 77 61 79 73 20 73 65 74 0a 2a 2a 20 20   always set.**  
10570 20 20 20 74 6f 20 61 20 4e 55 4c 4c 20 70 6f 69     to a NULL poi
10580 6e 74 65 72 2e 20 20 54 68 65 20 62 4e 43 20 70  nter.  The bNC p
10590 61 72 61 6d 65 74 65 72 20 69 73 20 6e 6f 74 20  arameter is not 
105a0 75 73 65 64 2e 0a 2a 2a 0a 2a 2a 20 20 20 50 55  used..**.**   PU
105b0 52 45 5f 44 41 54 45 28 7a 4e 61 6d 65 2c 20 6e  RE_DATE(zName, n
105c0 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20  Arg, iArg, bNC, 
105d0 78 46 75 6e 63 29 0a 2a 2a 20 20 20 20 20 55 73  xFunc).**     Us
105e0 65 64 20 66 6f 72 20 22 70 75 72 65 22 20 64 61  ed for "pure" da
105f0 74 65 2f 74 69 6d 65 20 66 75 6e 63 74 69 6f 6e  te/time function
10600 73 2c 20 74 68 69 73 20 6d 61 63 72 6f 20 69 73  s, this macro is
10610 20 6c 69 6b 65 20 44 46 55 4e 43 54 49 4f 4e 0a   like DFUNCTION.
10620 2a 2a 20 20 20 20 20 65 78 63 65 70 74 20 74 68  **     except th
10630 61 74 20 69 74 20 64 6f 65 73 20 73 65 74 20 74  at it does set t
10640 68 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43  he SQLITE_FUNC_C
10650 4f 4e 53 54 41 4e 54 20 66 6c 61 67 73 2e 20 20  ONSTANT flags.  
10660 69 41 72 67 20 69 73 0a 2a 2a 20 20 20 20 20 69  iArg is.**     i
10670 67 6e 6f 72 65 64 20 61 6e 64 20 74 68 65 20 75  gnored and the u
10680 73 65 72 2d 64 61 74 61 20 66 6f 72 20 74 68 65  ser-data for the
10690 73 65 20 66 75 6e 63 74 69 6f 6e 73 20 69 73 20  se functions is 
106a0 73 65 74 20 74 6f 20 61 6e 20 0a 2a 2a 20 20 20  set to an .**   
106b0 20 20 61 72 62 69 74 72 61 72 79 20 6e 6f 6e 2d    arbitrary non-
106c0 4e 55 4c 4c 20 70 6f 69 6e 74 65 72 2e 20 20 54  NULL pointer.  T
106d0 68 65 20 62 4e 43 20 70 61 72 61 6d 65 74 65 72  he bNC parameter
106e0 20 69 73 20 6e 6f 74 20 75 73 65 64 2e 0a 2a 2a   is not used..**
106f0 0a 2a 2a 20 20 20 41 47 47 52 45 47 41 54 45 28  .**   AGGREGATE(
10700 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72  zName, nArg, iAr
10710 67 2c 20 62 4e 43 2c 20 78 53 74 65 70 2c 20 78  g, bNC, xStep, x
10720 46 69 6e 61 6c 29 0a 2a 2a 20 20 20 20 20 55 73  Final).**     Us
10730 65 64 20 74 6f 20 63 72 65 61 74 65 20 61 6e 20  ed to create an 
10740 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69  aggregate functi
10750 6f 6e 20 64 65 66 69 6e 69 74 69 6f 6e 20 69 6d  on definition im
10760 70 6c 65 6d 65 6e 74 65 64 20 62 79 0a 2a 2a 20  plemented by.** 
10770 20 20 20 20 74 68 65 20 43 20 66 75 6e 63 74 69      the C functi
10780 6f 6e 73 20 78 53 74 65 70 20 61 6e 64 20 78 46  ons xStep and xF
10790 69 6e 61 6c 2e 20 54 68 65 20 66 69 72 73 74 20  inal. The first 
107a0 66 6f 75 72 20 70 61 72 61 6d 65 74 65 72 73 0a  four parameters.
107b0 2a 2a 20 20 20 20 20 61 72 65 20 69 6e 74 65 72  **     are inter
107c0 70 72 65 74 65 64 20 69 6e 20 74 68 65 20 73 61  preted in the sa
107d0 6d 65 20 77 61 79 20 61 73 20 74 68 65 20 66 69  me way as the fi
107e0 72 73 74 20 34 20 70 61 72 61 6d 65 74 65 72 73  rst 4 parameters
107f0 20 74 6f 0a 2a 2a 20 20 20 20 20 46 55 4e 43 54   to.**     FUNCT
10800 49 4f 4e 28 29 2e 0a 2a 2a 0a 2a 2a 20 20 20 57  ION()..**.**   W
10810 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20  FUNCTION(zName, 
10820 6e 41 72 67 2c 20 69 41 72 67 2c 20 78 53 74 65  nArg, iArg, xSte
10830 70 2c 20 78 46 69 6e 61 6c 2c 20 78 56 61 6c 75  p, xFinal, xValu
10840 65 2c 20 78 49 6e 76 65 72 73 65 29 0a 2a 2a 20  e, xInverse).** 
10850 20 20 20 20 55 73 65 64 20 74 6f 20 63 72 65 61      Used to crea
10860 74 65 20 61 6e 20 61 67 67 72 65 67 61 74 65 20  te an aggregate 
10870 66 75 6e 63 74 69 6f 6e 20 64 65 66 69 6e 69 74  function definit
10880 69 6f 6e 20 69 6d 70 6c 65 6d 65 6e 74 65 64 20  ion implemented 
10890 62 79 0a 2a 2a 20 20 20 20 20 74 68 65 20 43 20  by.**     the C 
108a0 66 75 6e 63 74 69 6f 6e 73 20 78 53 74 65 70 20  functions xStep 
108b0 61 6e 64 20 78 46 69 6e 61 6c 2e 20 54 68 65 20  and xFinal. The 
108c0 66 69 72 73 74 20 66 6f 75 72 20 70 61 72 61 6d  first four param
108d0 65 74 65 72 73 0a 2a 2a 20 20 20 20 20 61 72 65  eters.**     are
108e0 20 69 6e 74 65 72 70 72 65 74 65 64 20 69 6e 20   interpreted in 
108f0 74 68 65 20 73 61 6d 65 20 77 61 79 20 61 73 20  the same way as 
10900 74 68 65 20 66 69 72 73 74 20 34 20 70 61 72 61  the first 4 para
10910 6d 65 74 65 72 73 20 74 6f 0a 2a 2a 20 20 20 20  meters to.**    
10920 20 46 55 4e 43 54 49 4f 4e 28 29 2e 0a 2a 2a 0a   FUNCTION()..**.
10930 2a 2a 20 20 20 4c 49 4b 45 46 55 4e 43 28 7a 4e  **   LIKEFUNC(zN
10940 61 6d 65 2c 20 6e 41 72 67 2c 20 70 41 72 67 2c  ame, nArg, pArg,
10950 20 66 6c 61 67 73 29 0a 2a 2a 20 20 20 20 20 55   flags).**     U
10960 73 65 64 20 74 6f 20 63 72 65 61 74 65 20 61 20  sed to create a 
10970 73 63 61 6c 61 72 20 66 75 6e 63 74 69 6f 6e 20  scalar function 
10980 64 65 66 69 6e 69 74 69 6f 6e 20 6f 66 20 61 20  definition of a 
10990 66 75 6e 63 74 69 6f 6e 20 7a 4e 61 6d 65 0a 2a  function zName.*
109a0 2a 20 20 20 20 20 74 68 61 74 20 61 63 63 65 70  *     that accep
109b0 74 73 20 6e 41 72 67 20 61 72 67 75 6d 65 6e 74  ts nArg argument
109c0 73 20 61 6e 64 20 69 73 20 69 6d 70 6c 65 6d 65  s and is impleme
109d0 6e 74 65 64 20 62 79 20 61 20 63 61 6c 6c 20 74  nted by a call t
109e0 6f 20 43 0a 2a 2a 20 20 20 20 20 66 75 6e 63 74  o C.**     funct
109f0 69 6f 6e 20 6c 69 6b 65 46 75 6e 63 2e 20 41 72  ion likeFunc. Ar
10a00 67 75 6d 65 6e 74 20 70 41 72 67 20 69 73 20 63  gument pArg is c
10a10 61 73 74 20 74 6f 20 61 20 28 76 6f 69 64 20 2a  ast to a (void *
10a20 29 20 61 6e 64 20 6d 61 64 65 0a 2a 2a 20 20 20  ) and made.**   
10a30 20 20 61 76 61 69 6c 61 62 6c 65 20 61 73 20 74    available as t
10a40 68 65 20 66 75 6e 63 74 69 6f 6e 20 75 73 65 72  he function user
10a50 2d 64 61 74 61 20 28 73 71 6c 69 74 65 33 5f 75  -data (sqlite3_u
10a60 73 65 72 5f 64 61 74 61 28 29 29 2e 20 54 68 65  ser_data()). The
10a70 0a 2a 2a 20 20 20 20 20 46 75 6e 63 44 65 66 2e  .**     FuncDef.
10a80 66 6c 61 67 73 20 76 61 72 69 61 62 6c 65 20 69  flags variable i
10a90 73 20 73 65 74 20 74 6f 20 74 68 65 20 76 61 6c  s set to the val
10aa0 75 65 20 70 61 73 73 65 64 20 61 73 20 74 68 65  ue passed as the
10ab0 20 66 6c 61 67 73 0a 2a 2a 20 20 20 20 20 70 61   flags.**     pa
10ac0 72 61 6d 65 74 65 72 2e 0a 2a 2f 0a 23 64 65 66  rameter..*/.#def
10ad0 69 6e 65 20 46 55 4e 43 54 49 4f 4e 28 7a 4e 61  ine FUNCTION(zNa
10ae0 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c 20  me, nArg, iArg, 
10af0 62 4e 43 2c 20 78 46 75 6e 63 29 20 5c 0a 20 20  bNC, xFunc) \.  
10b00 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f 46 55  {nArg, SQLITE_FU
10b10 4e 43 5f 43 4f 4e 53 54 41 4e 54 7c 53 51 4c 49  NC_CONSTANT|SQLI
10b20 54 45 5f 55 54 46 38 7c 28 62 4e 43 2a 53 51 4c  TE_UTF8|(bNC*SQL
10b30 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c  ITE_FUNC_NEEDCOL
10b40 4c 29 2c 20 5c 0a 20 20 20 53 51 4c 49 54 45 5f  L), \.   SQLITE_
10b50 49 4e 54 5f 54 4f 5f 50 54 52 28 69 41 72 67 29  INT_TO_PTR(iArg)
10b60 2c 20 30 2c 20 78 46 75 6e 63 2c 20 30 2c 20 30  , 0, xFunc, 0, 0
10b70 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c 20 7b 30 7d  , 0, #zName, {0}
10b80 20 7d 0a 23 64 65 66 69 6e 65 20 56 46 55 4e 43   }.#define VFUNC
10b90 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72 67  TION(zName, nArg
10ba0 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78 46 75  , iArg, bNC, xFu
10bb0 6e 63 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53  nc) \.  {nArg, S
10bc0 51 4c 49 54 45 5f 55 54 46 38 7c 28 62 4e 43 2a  QLITE_UTF8|(bNC*
10bd0 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44  SQLITE_FUNC_NEED
10be0 43 4f 4c 4c 29 2c 20 5c 0a 20 20 20 53 51 4c 49  COLL), \.   SQLI
10bf0 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 69 41  TE_INT_TO_PTR(iA
10c00 72 67 29 2c 20 30 2c 20 78 46 75 6e 63 2c 20 30  rg), 0, xFunc, 0
10c10 2c 20 30 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c 20  , 0, 0, #zName, 
10c20 7b 30 7d 20 7d 0a 23 64 65 66 69 6e 65 20 44 46  {0} }.#define DF
10c30 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e  UNCTION(zName, n
10c40 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20  Arg, iArg, bNC, 
10c50 78 46 75 6e 63 29 20 5c 0a 20 20 7b 6e 41 72 67  xFunc) \.  {nArg
10c60 2c 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 53 4c  , SQLITE_FUNC_SL
10c70 4f 43 48 4e 47 7c 53 51 4c 49 54 45 5f 55 54 46  OCHNG|SQLITE_UTF
10c80 38 2c 20 5c 0a 20 20 20 30 2c 20 30 2c 20 78 46  8, \.   0, 0, xF
10c90 75 6e 63 2c 20 30 2c 20 30 2c 20 30 2c 20 23 7a  unc, 0, 0, 0, #z
10ca0 4e 61 6d 65 2c 20 7b 30 7d 20 7d 0a 23 64 65 66  Name, {0} }.#def
10cb0 69 6e 65 20 50 55 52 45 5f 44 41 54 45 28 7a 4e  ine PURE_DATE(zN
10cc0 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c  ame, nArg, iArg,
10cd0 20 62 4e 43 2c 20 78 46 75 6e 63 29 20 5c 0a 20   bNC, xFunc) \. 
10ce0 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f 46   {nArg, SQLITE_F
10cf0 55 4e 43 5f 53 4c 4f 43 48 4e 47 7c 53 51 4c 49  UNC_SLOCHNG|SQLI
10d00 54 45 5f 55 54 46 38 7c 53 51 4c 49 54 45 5f 46  TE_UTF8|SQLITE_F
10d10 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 2c 20 5c 0a  UNC_CONSTANT, \.
10d20 20 20 20 28 76 6f 69 64 2a 29 26 73 71 6c 69 74     (void*)&sqlit
10d30 65 33 43 6f 6e 66 69 67 2c 20 30 2c 20 78 46 75  e3Config, 0, xFu
10d40 6e 63 2c 20 30 2c 20 30 2c 20 30 2c 20 23 7a 4e  nc, 0, 0, 0, #zN
10d50 61 6d 65 2c 20 7b 30 7d 20 7d 0a 23 64 65 66 69  ame, {0} }.#defi
10d60 6e 65 20 46 55 4e 43 54 49 4f 4e 32 28 7a 4e 61  ne FUNCTION2(zNa
10d70 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c 20  me, nArg, iArg, 
10d80 62 4e 43 2c 20 78 46 75 6e 63 2c 20 65 78 74 72  bNC, xFunc, extr
10d90 61 46 6c 61 67 73 29 20 5c 0a 20 20 7b 6e 41 72  aFlags) \.  {nAr
10da0 67 2c 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f  g,SQLITE_FUNC_CO
10db0 4e 53 54 41 4e 54 7c 53 51 4c 49 54 45 5f 55 54  NSTANT|SQLITE_UT
10dc0 46 38 7c 28 62 4e 43 2a 53 51 4c 49 54 45 5f 46  F8|(bNC*SQLITE_F
10dd0 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 7c 65 78  UNC_NEEDCOLL)|ex
10de0 74 72 61 46 6c 61 67 73 2c 5c 0a 20 20 20 53 51  traFlags,\.   SQ
10df0 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28  LITE_INT_TO_PTR(
10e00 69 41 72 67 29 2c 20 30 2c 20 78 46 75 6e 63 2c  iArg), 0, xFunc,
10e10 20 30 2c 20 30 2c 20 30 2c 20 23 7a 4e 61 6d 65   0, 0, 0, #zName
10e20 2c 20 7b 30 7d 20 7d 0a 23 64 65 66 69 6e 65 20  , {0} }.#define 
10e30 53 54 52 5f 46 55 4e 43 54 49 4f 4e 28 7a 4e 61  STR_FUNCTION(zNa
10e40 6d 65 2c 20 6e 41 72 67 2c 20 70 41 72 67 2c 20  me, nArg, pArg, 
10e50 62 4e 43 2c 20 78 46 75 6e 63 29 20 5c 0a 20 20  bNC, xFunc) \.  
10e60 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f 46 55  {nArg, SQLITE_FU
10e70 4e 43 5f 53 4c 4f 43 48 4e 47 7c 53 51 4c 49 54  NC_SLOCHNG|SQLIT
10e80 45 5f 55 54 46 38 7c 28 62 4e 43 2a 53 51 4c 49  E_UTF8|(bNC*SQLI
10e90 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c  TE_FUNC_NEEDCOLL
10ea0 29 2c 20 5c 0a 20 20 20 70 41 72 67 2c 20 30 2c  ), \.   pArg, 0,
10eb0 20 78 46 75 6e 63 2c 20 30 2c 20 30 2c 20 30 2c   xFunc, 0, 0, 0,
10ec0 20 23 7a 4e 61 6d 65 2c 20 7d 0a 23 64 65 66 69   #zName, }.#defi
10ed0 6e 65 20 4c 49 4b 45 46 55 4e 43 28 7a 4e 61 6d  ne LIKEFUNC(zNam
10ee0 65 2c 20 6e 41 72 67 2c 20 61 72 67 2c 20 66 6c  e, nArg, arg, fl
10ef0 61 67 73 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20  ags) \.  {nArg, 
10f00 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53  SQLITE_FUNC_CONS
10f10 54 41 4e 54 7c 53 51 4c 49 54 45 5f 55 54 46 38  TANT|SQLITE_UTF8
10f20 7c 66 6c 61 67 73 2c 20 5c 0a 20 20 20 28 76 6f  |flags, \.   (vo
10f30 69 64 20 2a 29 61 72 67 2c 20 30 2c 20 6c 69 6b  id *)arg, 0, lik
10f40 65 46 75 6e 63 2c 20 30 2c 20 30 2c 20 30 2c 20  eFunc, 0, 0, 0, 
10f50 23 7a 4e 61 6d 65 2c 20 7b 30 7d 20 7d 0a 23 64  #zName, {0} }.#d
10f60 65 66 69 6e 65 20 41 47 47 52 45 47 41 54 45 28  efine AGGREGATE(
10f70 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 61 72 67  zName, nArg, arg
10f80 2c 20 6e 63 2c 20 78 53 74 65 70 2c 20 78 46 69  , nc, xStep, xFi
10f90 6e 61 6c 2c 20 78 56 61 6c 75 65 29 20 5c 0a 20  nal, xValue) \. 
10fa0 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f 55   {nArg, SQLITE_U
10fb0 54 46 38 7c 28 6e 63 2a 53 51 4c 49 54 45 5f 46  TF8|(nc*SQLITE_F
10fc0 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 2c 20 5c  UNC_NEEDCOLL), \
10fd0 0a 20 20 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54  .   SQLITE_INT_T
10fe0 4f 5f 50 54 52 28 61 72 67 29 2c 20 30 2c 20 78  O_PTR(arg), 0, x
10ff0 53 74 65 70 2c 78 46 69 6e 61 6c 2c 78 56 61 6c  Step,xFinal,xVal
11000 75 65 2c 30 2c 23 7a 4e 61 6d 65 2c 20 7b 30 7d  ue,0,#zName, {0}
11010 7d 0a 23 64 65 66 69 6e 65 20 41 47 47 52 45 47  }.#define AGGREG
11020 41 54 45 32 28 7a 4e 61 6d 65 2c 20 6e 41 72 67  ATE2(zName, nArg
11030 2c 20 61 72 67 2c 20 6e 63 2c 20 78 53 74 65 70  , arg, nc, xStep
11040 2c 20 78 46 69 6e 61 6c 2c 20 65 78 74 72 61 46  , xFinal, extraF
11050 6c 61 67 73 29 20 5c 0a 20 20 7b 6e 41 72 67 2c  lags) \.  {nArg,
11060 20 53 51 4c 49 54 45 5f 55 54 46 38 7c 28 6e 63   SQLITE_UTF8|(nc
11070 2a 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45  *SQLITE_FUNC_NEE
11080 44 43 4f 4c 4c 29 7c 65 78 74 72 61 46 6c 61 67  DCOLL)|extraFlag
11090 73 2c 20 5c 0a 20 20 20 53 51 4c 49 54 45 5f 49  s, \.   SQLITE_I
110a0 4e 54 5f 54 4f 5f 50 54 52 28 61 72 67 29 2c 20  NT_TO_PTR(arg), 
110b0 30 2c 20 78 53 74 65 70 2c 78 46 69 6e 61 6c 2c  0, xStep,xFinal,
110c0 78 46 69 6e 61 6c 2c 30 2c 23 7a 4e 61 6d 65 2c  xFinal,0,#zName,
110d0 20 7b 30 7d 7d 0a 23 64 65 66 69 6e 65 20 57 41   {0}}.#define WA
110e0 47 47 52 45 47 41 54 45 28 7a 4e 61 6d 65 2c 20  GGREGATE(zName, 
110f0 6e 41 72 67 2c 20 61 72 67 2c 20 6e 63 2c 20 78  nArg, arg, nc, x
11100 53 74 65 70 2c 20 78 46 69 6e 61 6c 2c 20 78 56  Step, xFinal, xV
11110 61 6c 75 65 2c 20 78 49 6e 76 65 72 73 65 2c 20  alue, xInverse, 
11120 66 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51  f) \.  {nArg, SQ
11130 4c 49 54 45 5f 55 54 46 38 7c 28 6e 63 2a 53 51  LITE_UTF8|(nc*SQ
11140 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f  LITE_FUNC_NEEDCO
11150 4c 4c 29 7c 66 2c 20 5c 0a 20 20 20 53 51 4c 49  LL)|f, \.   SQLI
11160 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 61 72  TE_INT_TO_PTR(ar
11170 67 29 2c 20 30 2c 20 78 53 74 65 70 2c 78 46 69  g), 0, xStep,xFi
11180 6e 61 6c 2c 78 56 61 6c 75 65 2c 78 49 6e 76 65  nal,xValue,xInve
11190 72 73 65 2c 23 7a 4e 61 6d 65 2c 20 7b 30 7d 7d  rse,#zName, {0}}
111a0 0a 23 64 65 66 69 6e 65 20 49 4e 54 45 52 4e 41  .#define INTERNA
111b0 4c 5f 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65  L_FUNCTION(zName
111c0 2c 20 6e 41 72 67 2c 20 78 46 75 6e 63 29 20 5c  , nArg, xFunc) \
111d0 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45  .  {nArg, SQLITE
111e0 5f 46 55 4e 43 5f 49 4e 54 45 52 4e 41 4c 7c 53  _FUNC_INTERNAL|S
111f0 51 4c 49 54 45 5f 55 54 46 38 7c 53 51 4c 49 54  QLITE_UTF8|SQLIT
11200 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 2c  E_FUNC_CONSTANT,
11210 20 5c 0a 20 20 20 30 2c 20 30 2c 20 78 46 75 6e   \.   0, 0, xFun
11220 63 2c 20 30 2c 20 30 2c 20 30 2c 20 23 7a 4e 61  c, 0, 0, 0, #zNa
11230 6d 65 2c 20 7b 30 7d 20 7d 0a 0a 0a 2f 2a 0a 2a  me, {0} }.../*.*
11240 2a 20 41 6c 6c 20 63 75 72 72 65 6e 74 20 73 61  * All current sa
11250 76 65 70 6f 69 6e 74 73 20 61 72 65 20 73 74 6f  vepoints are sto
11260 72 65 64 20 69 6e 20 61 20 6c 69 6e 6b 65 64 20  red in a linked 
11270 6c 69 73 74 20 73 74 61 72 74 69 6e 67 20 61 74  list starting at
11280 0a 2a 2a 20 73 71 6c 69 74 65 33 2e 70 53 61 76  .** sqlite3.pSav
11290 65 70 6f 69 6e 74 2e 20 54 68 65 20 66 69 72 73  epoint. The firs
112a0 74 20 65 6c 65 6d 65 6e 74 20 69 6e 20 74 68 65  t element in the
112b0 20 6c 69 73 74 20 69 73 20 74 68 65 20 6d 6f 73   list is the mos
112c0 74 20 72 65 63 65 6e 74 6c 79 0a 2a 2a 20 6f 70  t recently.** op
112d0 65 6e 65 64 20 73 61 76 65 70 6f 69 6e 74 2e 20  ened savepoint. 
112e0 53 61 76 65 70 6f 69 6e 74 73 20 61 72 65 20 61  Savepoints are a
112f0 64 64 65 64 20 74 6f 20 74 68 65 20 6c 69 73 74  dded to the list
11300 20 62 79 20 74 68 65 20 76 64 62 65 0a 2a 2a 20   by the vdbe.** 
11310 4f 50 5f 53 61 76 65 70 6f 69 6e 74 20 69 6e 73  OP_Savepoint ins
11320 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72  truction..*/.str
11330 75 63 74 20 53 61 76 65 70 6f 69 6e 74 20 7b 0a  uct Savepoint {.
11340 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20    char *zName;  
11350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11360 20 20 20 20 20 20 2f 2a 20 53 61 76 65 70 6f 69        /* Savepoi
11370 6e 74 20 6e 61 6d 65 20 28 6e 75 6c 2d 74 65 72  nt name (nul-ter
11380 6d 69 6e 61 74 65 64 29 20 2a 2f 0a 20 20 69 36  minated) */.  i6
11390 34 20 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 3b  4 nDeferredCons;
113a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
113b0 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 64    /* Number of d
113c0 65 66 65 72 72 65 64 20 66 6b 20 76 69 6f 6c 61  eferred fk viola
113d0 74 69 6f 6e 73 20 2a 2f 0a 20 20 69 36 34 20 6e  tions */.  i64 n
113e0 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3b  DeferredImmCons;
113f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
11400 2a 20 4e 75 6d 62 65 72 20 6f 66 20 64 65 66 65  * Number of defe
11410 72 72 65 64 20 69 6d 6d 20 66 6b 2e 20 2a 2f 0a  rred imm fk. */.
11420 20 20 53 61 76 65 70 6f 69 6e 74 20 2a 70 4e 65    Savepoint *pNe
11430 78 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  xt;             
11440 20 20 20 20 20 20 2f 2a 20 50 61 72 65 6e 74 20        /* Parent 
11450 73 61 76 65 70 6f 69 6e 74 20 28 69 66 20 61 6e  savepoint (if an
11460 79 29 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  y) */.};../*.** 
11470 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 72  The following ar
11480 65 20 75 73 65 64 20 61 73 20 74 68 65 20 73 65  e used as the se
11490 63 6f 6e 64 20 70 61 72 61 6d 65 74 65 72 20 74  cond parameter t
114a0 6f 20 73 71 6c 69 74 65 33 53 61 76 65 70 6f 69  o sqlite3Savepoi
114b0 6e 74 28 29 2c 0a 2a 2a 20 61 6e 64 20 61 73 20  nt(),.** and as 
114c0 74 68 65 20 50 31 20 61 72 67 75 6d 65 6e 74 20  the P1 argument 
114d0 74 6f 20 74 68 65 20 4f 50 5f 53 61 76 65 70 6f  to the OP_Savepo
114e0 69 6e 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e  int instruction.
114f0 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 41 56 45  .*/.#define SAVE
11500 50 4f 49 4e 54 5f 42 45 47 49 4e 20 20 20 20 20  POINT_BEGIN     
11510 20 30 0a 23 64 65 66 69 6e 65 20 53 41 56 45 50   0.#define SAVEP
11520 4f 49 4e 54 5f 52 45 4c 45 41 53 45 20 20 20 20  OINT_RELEASE    
11530 31 0a 23 64 65 66 69 6e 65 20 53 41 56 45 50 4f  1.#define SAVEPO
11540 49 4e 54 5f 52 4f 4c 4c 42 41 43 4b 20 20 20 32  INT_ROLLBACK   2
11550 0a 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 53 51  .../*.** Each SQ
11560 4c 69 74 65 20 6d 6f 64 75 6c 65 20 28 76 69 72  Lite module (vir
11570 74 75 61 6c 20 74 61 62 6c 65 20 64 65 66 69 6e  tual table defin
11580 69 74 69 6f 6e 29 20 69 73 20 64 65 66 69 6e 65  ition) is define
11590 64 20 62 79 20 61 6e 0a 2a 2a 20 69 6e 73 74 61  d by an.** insta
115a0 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f  nce of the follo
115b0 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 2c 20  wing structure, 
115c0 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20 73 71  stored in the sq
115d0 6c 69 74 65 33 2e 61 4d 6f 64 75 6c 65 0a 2a 2a  lite3.aModule.**
115e0 20 68 61 73 68 20 74 61 62 6c 65 2e 0a 2a 2f 0a   hash table..*/.
115f0 73 74 72 75 63 74 20 4d 6f 64 75 6c 65 20 7b 0a  struct Module {.
11600 20 20 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f    const sqlite3_
11610 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b  module *pModule;
11620 20 20 20 20 20 20 20 2f 2a 20 43 61 6c 6c 62 61         /* Callba
11630 63 6b 20 70 6f 69 6e 74 65 72 73 20 2a 2f 0a 20  ck pointers */. 
11640 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4e 61   const char *zNa
11650 6d 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  me;             
11660 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 70 61        /* Name pa
11670 73 73 65 64 20 74 6f 20 63 72 65 61 74 65 5f 6d  ssed to create_m
11680 6f 64 75 6c 65 28 29 20 2a 2f 0a 20 20 76 6f 69  odule() */.  voi
11690 64 20 2a 70 41 75 78 3b 20 20 20 20 20 20 20 20  d *pAux;        
116a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
116b0 20 20 2f 2a 20 70 41 75 78 20 70 61 73 73 65 64    /* pAux passed
116c0 20 74 6f 20 63 72 65 61 74 65 5f 6d 6f 64 75 6c   to create_modul
116d0 65 28 29 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a  e() */.  void (*
116e0 78 44 65 73 74 72 6f 79 29 28 76 6f 69 64 20 2a  xDestroy)(void *
116f0 29 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  );            /*
11700 20 4d 6f 64 75 6c 65 20 64 65 73 74 72 75 63 74   Module destruct
11710 6f 72 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20  or function */. 
11720 20 54 61 62 6c 65 20 2a 70 45 70 6f 54 61 62 3b   Table *pEpoTab;
11730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11740 20 20 20 20 20 20 2f 2a 20 45 70 6f 6e 79 6d 6f        /* Eponymo
11750 75 73 20 74 61 62 6c 65 20 66 6f 72 20 74 68 69  us table for thi
11760 73 20 6d 6f 64 75 6c 65 20 2a 2f 0a 7d 3b 0a 0a  s module */.};..
11770 2f 2a 0a 2a 2a 20 69 6e 66 6f 72 6d 61 74 69 6f  /*.** informatio
11780 6e 20 61 62 6f 75 74 20 65 61 63 68 20 63 6f 6c  n about each col
11790 75 6d 6e 20 6f 66 20 61 6e 20 53 51 4c 20 74 61  umn of an SQL ta
117a0 62 6c 65 20 69 73 20 68 65 6c 64 20 69 6e 20 61  ble is held in a
117b0 6e 20 69 6e 73 74 61 6e 63 65 0a 2a 2a 20 6f 66  n instance.** of
117c0 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65 2e   this structure.
117d0 0a 2a 2f 0a 73 74 72 75 63 74 20 43 6f 6c 75 6d  .*/.struct Colum
117e0 6e 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d  n {.  char *zNam
117f0 65 3b 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f  e;     /* Name o
11800 66 20 74 68 69 73 20 63 6f 6c 75 6d 6e 2c 20 5c  f this column, \
11810 30 30 30 2c 20 74 68 65 6e 20 74 68 65 20 74 79  000, then the ty
11820 70 65 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 44  pe */.  Expr *pD
11830 66 6c 74 3b 20 20 20 20 20 2f 2a 20 44 65 66 61  flt;     /* Defa
11840 75 6c 74 20 76 61 6c 75 65 20 6f 66 20 74 68 69  ult value of thi
11850 73 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 63 68  s column */.  ch
11860 61 72 20 2a 7a 43 6f 6c 6c 3b 20 20 20 20 20 2f  ar *zColl;     /
11870 2a 20 43 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75  * Collating sequ
11880 65 6e 63 65 2e 20 20 49 66 20 4e 55 4c 4c 2c 20  ence.  If NULL, 
11890 75 73 65 20 74 68 65 20 64 65 66 61 75 6c 74 20  use the default 
118a0 2a 2f 0a 20 20 75 38 20 6e 6f 74 4e 75 6c 6c 3b  */.  u8 notNull;
118b0 20 20 20 20 20 20 2f 2a 20 41 6e 20 4f 45 5f 20        /* An OE_ 
118c0 63 6f 64 65 20 66 6f 72 20 68 61 6e 64 6c 69 6e  code for handlin
118d0 67 20 61 20 4e 4f 54 20 4e 55 4c 4c 20 63 6f 6e  g a NOT NULL con
118e0 73 74 72 61 69 6e 74 20 2a 2f 0a 20 20 63 68 61  straint */.  cha
118f0 72 20 61 66 66 69 6e 69 74 79 3b 20 20 20 2f 2a  r affinity;   /*
11900 20 4f 6e 65 20 6f 66 20 74 68 65 20 53 51 4c 49   One of the SQLI
11910 54 45 5f 41 46 46 5f 2e 2e 2e 20 76 61 6c 75 65  TE_AFF_... value
11920 73 20 2a 2f 0a 20 20 75 38 20 73 7a 45 73 74 3b  s */.  u8 szEst;
11930 20 20 20 20 20 20 20 20 2f 2a 20 45 73 74 69 6d          /* Estim
11940 61 74 65 64 20 73 69 7a 65 20 6f 66 20 76 61 6c  ated size of val
11950 75 65 20 69 6e 20 74 68 69 73 20 63 6f 6c 75 6d  ue in this colum
11960 6e 2e 20 73 69 7a 65 6f 66 28 49 4e 54 29 3d 3d  n. sizeof(INT)==
11970 31 20 2a 2f 0a 20 20 75 38 20 63 6f 6c 46 6c 61  1 */.  u8 colFla
11980 67 73 3b 20 20 20 20 20 2f 2a 20 42 6f 6f 6c 65  gs;     /* Boole
11990 61 6e 20 70 72 6f 70 65 72 74 69 65 73 2e 20 20  an properties.  
119a0 53 65 65 20 43 4f 4c 46 4c 41 47 5f 20 64 65 66  See COLFLAG_ def
119b0 69 6e 65 73 20 62 65 6c 6f 77 20 2a 2f 0a 7d 3b  ines below */.};
119c0 0a 0a 2f 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c  ../* Allowed val
119d0 75 65 73 20 66 6f 72 20 43 6f 6c 75 6d 6e 2e 63  ues for Column.c
119e0 6f 6c 46 6c 61 67 73 3a 0a 2a 2f 0a 23 64 65 66  olFlags:.*/.#def
119f0 69 6e 65 20 43 4f 4c 46 4c 41 47 5f 50 52 49 4d  ine COLFLAG_PRIM
11a00 4b 45 59 20 20 30 78 30 30 30 31 20 20 20 20 2f  KEY  0x0001    /
11a10 2a 20 43 6f 6c 75 6d 6e 20 69 73 20 70 61 72 74  * Column is part
11a20 20 6f 66 20 74 68 65 20 70 72 69 6d 61 72 79 20   of the primary 
11a30 6b 65 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 43  key */.#define C
11a40 4f 4c 46 4c 41 47 5f 48 49 44 44 45 4e 20 20 20  OLFLAG_HIDDEN   
11a50 30 78 30 30 30 32 20 20 20 20 2f 2a 20 41 20 68  0x0002    /* A h
11a60 69 64 64 65 6e 20 63 6f 6c 75 6d 6e 20 69 6e 20  idden column in 
11a70 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20  a virtual table 
11a80 2a 2f 0a 23 64 65 66 69 6e 65 20 43 4f 4c 46 4c  */.#define COLFL
11a90 41 47 5f 48 41 53 54 59 50 45 20 20 30 78 30 30  AG_HASTYPE  0x00
11aa0 30 34 20 20 20 20 2f 2a 20 54 79 70 65 20 6e 61  04    /* Type na
11ab0 6d 65 20 66 6f 6c 6c 6f 77 73 20 63 6f 6c 75 6d  me follows colum
11ac0 6e 20 6e 61 6d 65 20 2a 2f 0a 23 64 65 66 69 6e  n name */.#defin
11ad0 65 20 43 4f 4c 46 4c 41 47 5f 55 4e 49 51 55 45  e COLFLAG_UNIQUE
11ae0 20 20 20 30 78 30 30 30 38 20 20 20 20 2f 2a 20     0x0008    /* 
11af0 43 6f 6c 75 6d 6e 20 64 65 66 20 63 6f 6e 74 61  Column def conta
11b00 69 6e 73 20 22 55 4e 49 51 55 45 22 20 6f 72 20  ins "UNIQUE" or 
11b10 22 50 4b 22 20 2a 2f 0a 23 64 65 66 69 6e 65 20  "PK" */.#define 
11b20 43 4f 4c 46 4c 41 47 5f 53 4f 52 54 45 52 52 45  COLFLAG_SORTERRE
11b30 46 20 30 78 30 30 31 30 20 20 20 2f 2a 20 55 73  F 0x0010   /* Us
11b40 65 20 73 6f 72 74 65 72 2d 72 65 66 73 20 77 69  e sorter-refs wi
11b50 74 68 20 74 68 69 73 20 63 6f 6c 75 6d 6e 20 2a  th this column *
11b60 2f 0a 0a 2f 2a 0a 2a 2a 20 41 20 22 43 6f 6c 6c  /../*.** A "Coll
11b70 61 74 69 6e 67 20 53 65 71 75 65 6e 63 65 22 20  ating Sequence" 
11b80 69 73 20 64 65 66 69 6e 65 64 20 62 79 20 61 6e  is defined by an
11b90 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65   instance of the
11ba0 20 66 6f 6c 6c 6f 77 69 6e 67 0a 2a 2a 20 73 74   following.** st
11bb0 72 75 63 74 75 72 65 2e 20 43 6f 6e 63 65 70 74  ructure. Concept
11bc0 75 61 6c 6c 79 2c 20 61 20 63 6f 6c 6c 61 74 69  ually, a collati
11bd0 6e 67 20 73 65 71 75 65 6e 63 65 20 63 6f 6e 73  ng sequence cons
11be0 69 73 74 73 20 6f 66 20 61 20 6e 61 6d 65 20 61  ists of a name a
11bf0 6e 64 0a 2a 2a 20 61 20 63 6f 6d 70 61 72 69 73  nd.** a comparis
11c00 6f 6e 20 72 6f 75 74 69 6e 65 20 74 68 61 74 20  on routine that 
11c10 64 65 66 69 6e 65 73 20 74 68 65 20 6f 72 64 65  defines the orde
11c20 72 20 6f 66 20 74 68 61 74 20 73 65 71 75 65 6e  r of that sequen
11c30 63 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 43 6f 6c  ce..**.** If Col
11c40 6c 53 65 71 2e 78 43 6d 70 20 69 73 20 4e 55 4c  lSeq.xCmp is NUL
11c50 4c 2c 20 69 74 20 6d 65 61 6e 73 20 74 68 61 74  L, it means that
11c60 20 74 68 65 0a 2a 2a 20 63 6f 6c 6c 61 74 69 6e   the.** collatin
11c70 67 20 73 65 71 75 65 6e 63 65 20 69 73 20 75 6e  g sequence is un
11c80 64 65 66 69 6e 65 64 2e 20 20 49 6e 64 69 63 65  defined.  Indice
11c90 73 20 62 75 69 6c 74 20 6f 6e 20 61 6e 20 75 6e  s built on an un
11ca0 64 65 66 69 6e 65 64 0a 2a 2a 20 63 6f 6c 6c 61  defined.** colla
11cb0 74 69 6e 67 20 73 65 71 75 65 6e 63 65 20 6d 61  ting sequence ma
11cc0 79 20 6e 6f 74 20 62 65 20 72 65 61 64 20 6f 72  y not be read or
11cd0 20 77 72 69 74 74 65 6e 2e 0a 2a 2f 0a 73 74 72   written..*/.str
11ce0 75 63 74 20 43 6f 6c 6c 53 65 71 20 7b 0a 20 20  uct CollSeq {.  
11cf0 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20  char *zName;    
11d00 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66        /* Name of
11d10 20 74 68 65 20 63 6f 6c 6c 61 74 69 6e 67 20 73   the collating s
11d20 65 71 75 65 6e 63 65 2c 20 55 54 46 2d 38 20 65  equence, UTF-8 e
11d30 6e 63 6f 64 65 64 20 2a 2f 0a 20 20 75 38 20 65  ncoded */.  u8 e
11d40 6e 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  nc;             
11d50 20 20 2f 2a 20 54 65 78 74 20 65 6e 63 6f 64 69    /* Text encodi
11d60 6e 67 20 68 61 6e 64 6c 65 64 20 62 79 20 78 43  ng handled by xC
11d70 6d 70 28 29 20 2a 2f 0a 20 20 76 6f 69 64 20 2a  mp() */.  void *
11d80 70 55 73 65 72 3b 20 20 20 20 20 20 20 20 20 20  pUser;          
11d90 2f 2a 20 46 69 72 73 74 20 61 72 67 75 6d 65 6e  /* First argumen
11da0 74 20 74 6f 20 78 43 6d 70 28 29 20 2a 2f 0a 20  t to xCmp() */. 
11db0 20 69 6e 74 20 28 2a 78 43 6d 70 29 28 76 6f 69   int (*xCmp)(voi
11dc0 64 2a 2c 69 6e 74 2c 20 63 6f 6e 73 74 20 76 6f  d*,int, const vo
11dd0 69 64 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20  id*, int, const 
11de0 76 6f 69 64 2a 29 3b 0a 20 20 76 6f 69 64 20 28  void*);.  void (
11df0 2a 78 44 65 6c 29 28 76 6f 69 64 2a 29 3b 20 20  *xDel)(void*);  
11e00 2f 2a 20 44 65 73 74 72 75 63 74 6f 72 20 66 6f  /* Destructor fo
11e10 72 20 70 55 73 65 72 20 2a 2f 0a 7d 3b 0a 0a 2f  r pUser */.};../
11e20 2a 0a 2a 2a 20 41 20 73 6f 72 74 20 6f 72 64 65  *.** A sort orde
11e30 72 20 63 61 6e 20 62 65 20 65 69 74 68 65 72 20  r can be either 
11e40 41 53 43 20 6f 72 20 44 45 53 43 2e 0a 2a 2f 0a  ASC or DESC..*/.
11e50 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53  #define SQLITE_S
11e60 4f 5f 41 53 43 20 20 20 20 20 20 20 30 20 20 2f  O_ASC       0  /
11e70 2a 20 53 6f 72 74 20 69 6e 20 61 73 63 65 6e 64  * Sort in ascend
11e80 69 6e 67 20 6f 72 64 65 72 20 2a 2f 0a 23 64 65  ing order */.#de
11e90 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 4f 5f 44  fine SQLITE_SO_D
11ea0 45 53 43 20 20 20 20 20 20 31 20 20 2f 2a 20 53  ESC      1  /* S
11eb0 6f 72 74 20 69 6e 20 61 73 63 65 6e 64 69 6e 67  ort in ascending
11ec0 20 6f 72 64 65 72 20 2a 2f 0a 23 64 65 66 69 6e   order */.#defin
11ed0 65 20 53 51 4c 49 54 45 5f 53 4f 5f 55 4e 44 45  e SQLITE_SO_UNDE
11ee0 46 49 4e 45 44 20 2d 31 20 2f 2a 20 4e 6f 20 73  FINED -1 /* No s
11ef0 6f 72 74 20 6f 72 64 65 72 20 73 70 65 63 69 66  ort order specif
11f00 69 65 64 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 43 6f  ied */../*.** Co
11f10 6c 75 6d 6e 20 61 66 66 69 6e 69 74 79 20 74 79  lumn affinity ty
11f20 70 65 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 73 65  pes..**.** These
11f30 20 75 73 65 64 20 74 6f 20 68 61 76 65 20 6d 6e   used to have mn
11f40 65 6d 6f 6e 69 63 20 6e 61 6d 65 20 6c 69 6b 65  emonic name like
11f50 20 27 69 27 20 66 6f 72 20 53 51 4c 49 54 45 5f   'i' for SQLITE_
11f60 41 46 46 5f 49 4e 54 45 47 45 52 20 61 6e 64 0a  AFF_INTEGER and.
11f70 2a 2a 20 27 74 27 20 66 6f 72 20 53 51 4c 49 54  ** 't' for SQLIT
11f80 45 5f 41 46 46 5f 54 45 58 54 2e 20 20 42 75 74  E_AFF_TEXT.  But
11f90 20 77 65 20 63 61 6e 20 73 61 76 65 20 61 20 6c   we can save a l
11fa0 69 74 74 6c 65 20 73 70 61 63 65 20 61 6e 64 20  ittle space and 
11fb0 69 6d 70 72 6f 76 65 0a 2a 2a 20 74 68 65 20 73  improve.** the s
11fc0 70 65 65 64 20 61 20 6c 69 74 74 6c 65 20 62 79  peed a little by
11fd0 20 6e 75 6d 62 65 72 69 6e 67 20 74 68 65 20 76   numbering the v
11fe0 61 6c 75 65 73 20 63 6f 6e 73 65 63 75 74 69 76  alues consecutiv
11ff0 65 6c 79 2e 0a 2a 2a 0a 2a 2a 20 42 75 74 20 72  ely..**.** But r
12000 61 74 68 65 72 20 74 68 61 6e 20 73 74 61 72 74  ather than start
12010 20 77 69 74 68 20 30 20 6f 72 20 31 2c 20 77 65   with 0 or 1, we
12020 20 62 65 67 69 6e 20 77 69 74 68 20 27 41 27 2e   begin with 'A'.
12030 20 20 54 68 61 74 20 77 61 79 2c 0a 2a 2a 20 77    That way,.** w
12040 68 65 6e 20 6d 75 6c 74 69 70 6c 65 20 61 66 66  hen multiple aff
12050 69 6e 69 74 79 20 74 79 70 65 73 20 61 72 65 20  inity types are 
12060 63 6f 6e 63 61 74 65 6e 61 74 65 64 20 69 6e 74  concatenated int
12070 6f 20 61 20 73 74 72 69 6e 67 20 61 6e 64 0a 2a  o a string and.*
12080 2a 20 75 73 65 64 20 61 73 20 74 68 65 20 50 34  * used as the P4
12090 20 6f 70 65 72 61 6e 64 2c 20 74 68 65 79 20 77   operand, they w
120a0 69 6c 6c 20 62 65 20 6d 6f 72 65 20 72 65 61 64  ill be more read
120b0 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65  able..**.** Note
120c0 20 61 6c 73 6f 20 74 68 61 74 20 74 68 65 20 6e   also that the n
120d0 75 6d 65 72 69 63 20 74 79 70 65 73 20 61 72 65  umeric types are
120e0 20 67 72 6f 75 70 65 64 20 74 6f 67 65 74 68 65   grouped togethe
120f0 72 20 73 6f 20 74 68 61 74 20 74 65 73 74 69 6e  r so that testin
12100 67 0a 2a 2a 20 66 6f 72 20 61 20 6e 75 6d 65 72  g.** for a numer
12110 69 63 20 74 79 70 65 20 69 73 20 61 20 73 69 6e  ic type is a sin
12120 67 6c 65 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20  gle comparison. 
12130 20 41 6e 64 20 74 68 65 20 42 4c 4f 42 20 74 79   And the BLOB ty
12140 70 65 20 69 73 20 66 69 72 73 74 2e 0a 2a 2f 0a  pe is first..*/.
12150 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41  #define SQLITE_A
12160 46 46 5f 4e 4f 4e 45 20 20 20 20 20 30 78 34 30  FF_NONE     0x40
12170 20 20 2f 2a 20 27 40 27 20 2a 2f 0a 23 64 65 66    /* '@' */.#def
12180 69 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 42  ine SQLITE_AFF_B
12190 4c 4f 42 20 20 20 20 20 30 78 34 31 20 20 2f 2a  LOB     0x41  /*
121a0 20 27 41 27 20 2a 2f 0a 23 64 65 66 69 6e 65 20   'A' */.#define 
121b0 53 51 4c 49 54 45 5f 41 46 46 5f 54 45 58 54 20  SQLITE_AFF_TEXT 
121c0 20 20 20 20 30 78 34 32 20 20 2f 2a 20 27 42 27      0x42  /* 'B'
121d0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
121e0 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49 43 20 20  TE_AFF_NUMERIC  
121f0 30 78 34 33 20 20 2f 2a 20 27 43 27 20 2a 2f 0a  0x43  /* 'C' */.
12200 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41  #define SQLITE_A
12210 46 46 5f 49 4e 54 45 47 45 52 20 20 30 78 34 34  FF_INTEGER  0x44
12220 20 20 2f 2a 20 27 44 27 20 2a 2f 0a 23 64 65 66    /* 'D' */.#def
12230 69 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 52  ine SQLITE_AFF_R
12240 45 41 4c 20 20 20 20 20 30 78 34 35 20 20 2f 2a  EAL     0x45  /*
12250 20 27 45 27 20 2a 2f 0a 0a 23 64 65 66 69 6e 65   'E' */..#define
12260 20 73 71 6c 69 74 65 33 49 73 4e 75 6d 65 72 69   sqlite3IsNumeri
12270 63 41 66 66 69 6e 69 74 79 28 58 29 20 20 28 28  cAffinity(X)  ((
12280 58 29 3e 3d 53 51 4c 49 54 45 5f 41 46 46 5f 4e  X)>=SQLITE_AFF_N
12290 55 4d 45 52 49 43 29 0a 0a 2f 2a 0a 2a 2a 20 54  UMERIC)../*.** T
122a0 68 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 4d 41  he SQLITE_AFF_MA
122b0 53 4b 20 76 61 6c 75 65 73 20 6d 61 73 6b 73 20  SK values masks 
122c0 6f 66 66 20 74 68 65 20 73 69 67 6e 69 66 69 63  off the signific
122d0 61 6e 74 20 62 69 74 73 20 6f 66 20 61 6e 0a 2a  ant bits of an.*
122e0 2a 20 61 66 66 69 6e 69 74 79 20 76 61 6c 75 65  * affinity value
122f0 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  ..*/.#define SQL
12300 49 54 45 5f 41 46 46 5f 4d 41 53 4b 20 20 20 20  ITE_AFF_MASK    
12310 20 30 78 34 37 0a 0a 2f 2a 0a 2a 2a 20 41 64 64   0x47../*.** Add
12320 69 74 69 6f 6e 61 6c 20 62 69 74 20 76 61 6c 75  itional bit valu
12330 65 73 20 74 68 61 74 20 63 61 6e 20 62 65 20 4f  es that can be O
12340 52 65 64 20 77 69 74 68 20 61 6e 20 61 66 66 69  Red with an affi
12350 6e 69 74 79 20 77 69 74 68 6f 75 74 0a 2a 2a 20  nity without.** 
12360 63 68 61 6e 67 69 6e 67 20 74 68 65 20 61 66 66  changing the aff
12370 69 6e 69 74 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  inity..**.** The
12380 20 53 51 4c 49 54 45 5f 4e 4f 54 4e 55 4c 4c 20   SQLITE_NOTNULL 
12390 66 6c 61 67 20 69 73 20 61 20 63 6f 6d 62 69 6e  flag is a combin
123a0 61 74 69 6f 6e 20 6f 66 20 4e 55 4c 4c 45 51 20  ation of NULLEQ 
123b0 61 6e 64 20 4a 55 4d 50 49 46 4e 55 4c 4c 2e 0a  and JUMPIFNULL..
123c0 2a 2a 20 49 74 20 63 61 75 73 65 73 20 61 6e 20  ** It causes an 
123d0 61 73 73 65 72 74 28 29 20 74 6f 20 66 69 72 65  assert() to fire
123e0 20 69 66 20 65 69 74 68 65 72 20 6f 70 65 72 61   if either opera
123f0 6e 64 20 74 6f 20 61 20 63 6f 6d 70 61 72 69 73  nd to a comparis
12400 6f 6e 0a 2a 2a 20 6f 70 65 72 61 74 6f 72 20 69  on.** operator i
12410 73 20 4e 55 4c 4c 2e 20 20 49 74 20 69 73 20 61  s NULL.  It is a
12420 64 64 65 64 20 74 6f 20 63 65 72 74 61 69 6e 20  dded to certain 
12430 63 6f 6d 70 61 72 69 73 6f 6e 20 6f 70 65 72 61  comparison opera
12440 74 6f 72 73 20 74 6f 0a 2a 2a 20 70 72 6f 76 65  tors to.** prove
12450 20 74 68 61 74 20 74 68 65 20 6f 70 65 72 61 6e   that the operan
12460 64 73 20 61 72 65 20 61 6c 77 61 79 73 20 4e 4f  ds are always NO
12470 54 20 4e 55 4c 4c 2e 0a 2a 2f 0a 23 64 65 66 69  T NULL..*/.#defi
12480 6e 65 20 53 51 4c 49 54 45 5f 4b 45 45 50 4e 55  ne SQLITE_KEEPNU
12490 4c 4c 20 20 20 20 20 30 78 30 38 20 20 2f 2a 20  LL     0x08  /* 
124a0 55 73 65 64 20 62 79 20 76 65 63 74 6f 72 20 3d  Used by vector =
124b0 3d 20 6f 72 20 3c 3e 20 2a 2f 0a 23 64 65 66 69  = or <> */.#defi
124c0 6e 65 20 53 51 4c 49 54 45 5f 4a 55 4d 50 49 46  ne SQLITE_JUMPIF
124d0 4e 55 4c 4c 20 20 20 30 78 31 30 20 20 2f 2a 20  NULL   0x10  /* 
124e0 6a 75 6d 70 73 20 69 66 20 65 69 74 68 65 72 20  jumps if either 
124f0 6f 70 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c 20  operand is NULL 
12500 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
12510 45 5f 53 54 4f 52 45 50 32 20 20 20 20 20 20 30  E_STOREP2      0
12520 78 32 30 20 20 2f 2a 20 53 74 6f 72 65 20 72 65  x20  /* Store re
12530 73 75 6c 74 20 69 6e 20 72 65 67 5b 50 32 5d 20  sult in reg[P2] 
12540 72 61 74 68 65 72 20 74 68 61 6e 20 6a 75 6d 70  rather than jump
12550 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
12560 54 45 5f 4e 55 4c 4c 45 51 20 20 20 20 20 20 20  TE_NULLEQ       
12570 30 78 38 30 20 20 2f 2a 20 4e 55 4c 4c 3d 4e 55  0x80  /* NULL=NU
12580 4c 4c 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  LL */.#define SQ
12590 4c 49 54 45 5f 4e 4f 54 4e 55 4c 4c 20 20 20 20  LITE_NOTNULL    
125a0 20 20 30 78 39 30 20 20 2f 2a 20 41 73 73 65 72    0x90  /* Asser
125b0 74 20 74 68 61 74 20 6f 70 65 72 61 6e 64 73 20  t that operands 
125c0 61 72 65 20 6e 65 76 65 72 20 4e 55 4c 4c 20 2a  are never NULL *
125d0 2f 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 6f 62 6a 65  /../*.** An obje
125e0 63 74 20 6f 66 20 74 68 69 73 20 74 79 70 65 20  ct of this type 
125f0 69 73 20 63 72 65 61 74 65 64 20 66 6f 72 20 65  is created for e
12600 61 63 68 20 76 69 72 74 75 61 6c 20 74 61 62 6c  ach virtual tabl
12610 65 20 70 72 65 73 65 6e 74 20 69 6e 0a 2a 2a 20  e present in.** 
12620 74 68 65 20 64 61 74 61 62 61 73 65 20 73 63 68  the database sch
12630 65 6d 61 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68  ema..**.** If th
12640 65 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d  e database schem
12650 61 20 69 73 20 73 68 61 72 65 64 2c 20 74 68 65  a is shared, the
12660 6e 20 74 68 65 72 65 20 69 73 20 6f 6e 65 20 69  n there is one i
12670 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73 0a  nstance of this.
12680 2a 2a 20 73 74 72 75 63 74 75 72 65 20 66 6f 72  ** structure for
12690 20 65 61 63 68 20 64 61 74 61 62 61 73 65 20 63   each database c
126a0 6f 6e 6e 65 63 74 69 6f 6e 20 28 73 71 6c 69 74  onnection (sqlit
126b0 65 33 2a 29 20 74 68 61 74 20 75 73 65 73 20 74  e3*) that uses t
126c0 68 65 20 73 68 61 72 65 64 0a 2a 2a 20 73 63 68  he shared.** sch
126d0 65 6d 61 2e 20 54 68 69 73 20 69 73 20 62 65 63  ema. This is bec
126e0 61 75 73 65 20 65 61 63 68 20 64 61 74 61 62 61  ause each databa
126f0 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 72 65  se connection re
12700 71 75 69 72 65 73 20 69 74 73 20 6f 77 6e 20 75  quires its own u
12710 6e 69 71 75 65 0a 2a 2a 20 69 6e 73 74 61 6e 63  nique.** instanc
12720 65 20 6f 66 20 74 68 65 20 73 71 6c 69 74 65 33  e of the sqlite3
12730 5f 76 74 61 62 2a 20 68 61 6e 64 6c 65 20 75 73  _vtab* handle us
12740 65 64 20 74 6f 20 61 63 63 65 73 73 20 74 68 65  ed to access the
12750 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 0a 2a   virtual table.*
12760 2a 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  * implementation
12770 2e 20 73 71 6c 69 74 65 33 5f 76 74 61 62 2a 20  . sqlite3_vtab* 
12780 68 61 6e 64 6c 65 73 20 63 61 6e 20 6e 6f 74 20  handles can not 
12790 62 65 20 73 68 61 72 65 64 20 62 65 74 77 65 65  be shared betwee
127a0 6e 0a 2a 2a 20 64 61 74 61 62 61 73 65 20 63 6f  n.** database co
127b0 6e 6e 65 63 74 69 6f 6e 73 2c 20 65 76 65 6e 20  nnections, even 
127c0 77 68 65 6e 20 74 68 65 20 72 65 73 74 20 6f 66  when the rest of
127d0 20 74 68 65 20 69 6e 2d 6d 65 6d 6f 72 79 20 64   the in-memory d
127e0 61 74 61 62 61 73 65 0a 2a 2a 20 73 63 68 65 6d  atabase.** schem
127f0 61 20 69 73 20 73 68 61 72 65 64 2c 20 61 73 20  a is shared, as 
12800 74 68 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  the implementati
12810 6f 6e 20 6f 66 74 65 6e 20 73 74 6f 72 65 73 20  on often stores 
12820 74 68 65 20 64 61 74 61 62 61 73 65 0a 2a 2a 20  the database.** 
12830 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c  connection handl
12840 65 20 70 61 73 73 65 64 20 74 6f 20 69 74 20 76  e passed to it v
12850 69 61 20 74 68 65 20 78 43 6f 6e 6e 65 63 74 28  ia the xConnect(
12860 29 20 6f 72 20 78 43 72 65 61 74 65 28 29 20 6d  ) or xCreate() m
12870 65 74 68 6f 64 0a 2a 2a 20 64 75 72 69 6e 67 20  ethod.** during 
12880 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e 20 69  initialization i
12890 6e 74 65 72 6e 61 6c 6c 79 2e 20 54 68 69 73 20  nternally. This 
128a0 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74  database connect
128b0 69 6f 6e 20 68 61 6e 64 6c 65 20 6d 61 79 0a 2a  ion handle may.*
128c0 2a 20 74 68 65 6e 20 62 65 20 75 73 65 64 20 62  * then be used b
128d0 79 20 74 68 65 20 76 69 72 74 75 61 6c 20 74 61  y the virtual ta
128e0 62 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  ble implementati
128f0 6f 6e 20 74 6f 20 61 63 63 65 73 73 20 72 65 61  on to access rea
12900 6c 20 74 61 62 6c 65 73 0a 2a 2a 20 77 69 74 68  l tables.** with
12910 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 2e  in the database.
12920 20 53 6f 20 74 68 61 74 20 74 68 65 79 20 61 70   So that they ap
12930 70 65 61 72 20 61 73 20 70 61 72 74 20 6f 66 20  pear as part of 
12940 74 68 65 20 63 61 6c 6c 65 72 73 0a 2a 2a 20 74  the callers.** t
12950 72 61 6e 73 61 63 74 69 6f 6e 2c 20 74 68 65 73  ransaction, thes
12960 65 20 61 63 63 65 73 73 65 73 20 6e 65 65 64 20  e accesses need 
12970 74 6f 20 62 65 20 6d 61 64 65 20 76 69 61 20 74  to be made via t
12980 68 65 20 73 61 6d 65 20 64 61 74 61 62 61 73 65  he same database
12990 0a 2a 2a 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 61  .** connection a
129a0 73 20 74 68 61 74 20 75 73 65 64 20 74 6f 20 65  s that used to e
129b0 78 65 63 75 74 65 20 53 51 4c 20 6f 70 65 72 61  xecute SQL opera
129c0 74 69 6f 6e 73 20 6f 6e 20 74 68 65 20 76 69 72  tions on the vir
129d0 74 75 61 6c 20 74 61 62 6c 65 2e 0a 2a 2a 0a 2a  tual table..**.*
129e0 2a 20 41 6c 6c 20 56 54 61 62 6c 65 20 6f 62 6a  * All VTable obj
129f0 65 63 74 73 20 74 68 61 74 20 63 6f 72 72 65 73  ects that corres
12a00 70 6f 6e 64 20 74 6f 20 61 20 73 69 6e 67 6c 65  pond to a single
12a10 20 74 61 62 6c 65 20 69 6e 20 61 20 73 68 61 72   table in a shar
12a20 65 64 0a 2a 2a 20 64 61 74 61 62 61 73 65 20 73  ed.** database s
12a30 63 68 65 6d 61 20 61 72 65 20 69 6e 69 74 69 61  chema are initia
12a40 6c 6c 79 20 73 74 6f 72 65 64 20 69 6e 20 61 20  lly stored in a 
12a50 6c 69 6e 6b 65 64 2d 6c 69 73 74 20 70 6f 69 6e  linked-list poin
12a60 74 65 64 20 74 6f 20 62 79 0a 2a 2a 20 74 68 65  ted to by.** the
12a70 20 54 61 62 6c 65 2e 70 56 54 61 62 6c 65 20 6d   Table.pVTable m
12a80 65 6d 62 65 72 20 76 61 72 69 61 62 6c 65 20 6f  ember variable o
12a90 66 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64  f the correspond
12aa0 69 6e 67 20 54 61 62 6c 65 20 6f 62 6a 65 63 74  ing Table object
12ab0 2e 0a 2a 2a 20 57 68 65 6e 20 61 6e 20 73 71 6c  ..** When an sql
12ac0 69 74 65 33 5f 70 72 65 70 61 72 65 28 29 20 6f  ite3_prepare() o
12ad0 70 65 72 61 74 69 6f 6e 20 69 73 20 72 65 71 75  peration is requ
12ae0 69 72 65 64 20 74 6f 20 61 63 63 65 73 73 20 74  ired to access t
12af0 68 65 20 76 69 72 74 75 61 6c 0a 2a 2a 20 74 61  he virtual.** ta
12b00 62 6c 65 2c 20 69 74 20 73 65 61 72 63 68 65 73  ble, it searches
12b10 20 74 68 65 20 6c 69 73 74 20 66 6f 72 20 74 68   the list for th
12b20 65 20 56 54 61 62 6c 65 20 74 68 61 74 20 63 6f  e VTable that co
12b30 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 74 68 65  rresponds to the
12b40 0a 2a 2a 20 64 61 74 61 62 61 73 65 20 63 6f 6e  .** database con
12b50 6e 65 63 74 69 6f 6e 20 64 6f 69 6e 67 20 74 68  nection doing th
12b60 65 20 70 72 65 70 61 72 69 6e 67 20 73 6f 20 61  e preparing so a
12b70 73 20 74 6f 20 75 73 65 20 74 68 65 20 63 6f 72  s to use the cor
12b80 72 65 63 74 0a 2a 2a 20 73 71 6c 69 74 65 33 5f  rect.** sqlite3_
12b90 76 74 61 62 2a 20 68 61 6e 64 6c 65 20 69 6e 20  vtab* handle in 
12ba0 74 68 65 20 63 6f 6d 70 69 6c 65 64 20 71 75 65  the compiled que
12bb0 72 79 2e 0a 2a 2a 0a 2a 2a 20 57 68 65 6e 20 61  ry..**.** When a
12bc0 6e 20 69 6e 2d 6d 65 6d 6f 72 79 20 54 61 62 6c  n in-memory Tabl
12bd0 65 20 6f 62 6a 65 63 74 20 69 73 20 64 65 6c 65  e object is dele
12be0 74 65 64 20 28 66 6f 72 20 65 78 61 6d 70 6c 65  ted (for example
12bf0 20 77 68 65 6e 20 74 68 65 0a 2a 2a 20 73 63 68   when the.** sch
12c00 65 6d 61 20 69 73 20 62 65 69 6e 67 20 72 65 6c  ema is being rel
12c10 6f 61 64 65 64 20 66 6f 72 20 73 6f 6d 65 20 72  oaded for some r
12c20 65 61 73 6f 6e 29 2c 20 74 68 65 20 56 54 61 62  eason), the VTab
12c30 6c 65 20 6f 62 6a 65 63 74 73 20 61 72 65 20 6e  le objects are n
12c40 6f 74 0a 2a 2a 20 64 65 6c 65 74 65 64 20 61 6e  ot.** deleted an
12c50 64 20 74 68 65 20 73 71 6c 69 74 65 33 5f 76 74  d the sqlite3_vt
12c60 61 62 2a 20 68 61 6e 64 6c 65 73 20 61 72 65 20  ab* handles are 
12c70 6e 6f 74 20 78 44 69 73 63 6f 6e 6e 65 63 74 28  not xDisconnect(
12c80 29 65 64 0a 2a 2a 20 69 6d 6d 65 64 69 61 74 65  )ed.** immediate
12c90 6c 79 2e 20 49 6e 73 74 65 61 64 2c 20 74 68 65  ly. Instead, the
12ca0 79 20 61 72 65 20 6d 6f 76 65 64 20 66 72 6f 6d  y are moved from
12cb0 20 74 68 65 20 54 61 62 6c 65 2e 70 56 54 61 62   the Table.pVTab
12cc0 6c 65 20 6c 69 73 74 20 74 6f 0a 2a 2a 20 61 6e  le list to.** an
12cd0 6f 74 68 65 72 20 6c 69 6e 6b 65 64 20 6c 69 73  other linked lis
12ce0 74 20 68 65 61 64 65 64 20 62 79 20 74 68 65 20  t headed by the 
12cf0 73 71 6c 69 74 65 33 2e 70 44 69 73 63 6f 6e 6e  sqlite3.pDisconn
12d00 65 63 74 20 6d 65 6d 62 65 72 20 6f 66 20 74 68  ect member of th
12d10 65 0a 2a 2a 20 63 6f 72 72 65 73 70 6f 6e 64 69  e.** correspondi
12d20 6e 67 20 73 71 6c 69 74 65 33 20 73 74 72 75 63  ng sqlite3 struc
12d30 74 75 72 65 2e 20 54 68 65 79 20 61 72 65 20 74  ture. They are t
12d40 68 65 6e 20 64 65 6c 65 74 65 64 2f 78 44 69 73  hen deleted/xDis
12d50 63 6f 6e 6e 65 63 74 65 64 0a 2a 2a 20 6e 65 78  connected.** nex
12d60 74 20 74 69 6d 65 20 61 20 73 74 61 74 65 6d 65  t time a stateme
12d70 6e 74 20 69 73 20 70 72 65 70 61 72 65 64 20 75  nt is prepared u
12d80 73 69 6e 67 20 73 61 69 64 20 73 71 6c 69 74 65  sing said sqlite
12d90 33 2a 2e 20 54 68 69 73 20 69 73 20 64 6f 6e 65  3*. This is done
12da0 0a 2a 2a 20 74 6f 20 61 76 6f 69 64 20 64 65 61  .** to avoid dea
12db0 64 6c 6f 63 6b 20 69 73 73 75 65 73 20 69 6e 76  dlock issues inv
12dc0 6f 6c 76 69 6e 67 20 6d 75 6c 74 69 70 6c 65 20  olving multiple 
12dd0 73 71 6c 69 74 65 33 2e 6d 75 74 65 78 20 6d 75  sqlite3.mutex mu
12de0 74 65 78 65 73 2e 0a 2a 2a 20 52 65 66 65 72 20  texes..** Refer 
12df0 74 6f 20 63 6f 6d 6d 65 6e 74 73 20 61 62 6f 76  to comments abov
12e00 65 20 66 75 6e 63 74 69 6f 6e 20 73 71 6c 69 74  e function sqlit
12e10 65 33 56 74 61 62 55 6e 6c 6f 63 6b 4c 69 73 74  e3VtabUnlockList
12e20 28 29 20 66 6f 72 20 61 6e 0a 2a 2a 20 65 78 70  () for an.** exp
12e30 6c 61 6e 61 74 69 6f 6e 20 61 73 20 74 6f 20 77  lanation as to w
12e40 68 79 20 69 74 20 69 73 20 73 61 66 65 20 74 6f  hy it is safe to
12e50 20 61 64 64 20 61 6e 20 65 6e 74 72 79 20 74 6f   add an entry to
12e60 20 61 6e 20 73 71 6c 69 74 65 33 2e 70 44 69 73   an sqlite3.pDis
12e70 63 6f 6e 6e 65 63 74 0a 2a 2a 20 6c 69 73 74 20  connect.** list 
12e80 77 69 74 68 6f 75 74 20 68 6f 6c 64 69 6e 67 20  without holding 
12e90 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e  the correspondin
12ea0 67 20 73 71 6c 69 74 65 33 2e 6d 75 74 65 78 20  g sqlite3.mutex 
12eb0 6d 75 74 65 78 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  mutex..**.** The
12ec0 20 6d 65 6d 6f 72 79 20 66 6f 72 20 6f 62 6a 65   memory for obje
12ed0 63 74 73 20 6f 66 20 74 68 69 73 20 74 79 70 65  cts of this type
12ee0 20 69 73 20 61 6c 77 61 79 73 20 61 6c 6c 6f 63   is always alloc
12ef0 61 74 65 64 20 62 79 0a 2a 2a 20 73 71 6c 69 74  ated by.** sqlit
12f00 65 33 44 62 4d 61 6c 6c 6f 63 28 29 2c 20 75 73  e3DbMalloc(), us
12f10 69 6e 67 20 74 68 65 20 63 6f 6e 6e 65 63 74 69  ing the connecti
12f20 6f 6e 20 68 61 6e 64 6c 65 20 73 74 6f 72 65 64  on handle stored
12f30 20 69 6e 20 56 54 61 62 6c 65 2e 64 62 20 61 73   in VTable.db as
12f40 0a 2a 2a 20 74 68 65 20 66 69 72 73 74 20 61 72  .** the first ar
12f50 67 75 6d 65 6e 74 2e 0a 2a 2f 0a 73 74 72 75 63  gument..*/.struc
12f60 74 20 56 54 61 62 6c 65 20 7b 0a 20 20 73 71 6c  t VTable {.  sql
12f70 69 74 65 33 20 2a 64 62 3b 20 20 20 20 20 20 20  ite3 *db;       
12f80 20 20 20 20 20 20 20 2f 2a 20 44 61 74 61 62 61         /* Databa
12f90 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 61 73  se connection as
12fa0 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 68  sociated with th
12fb0 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20 4d 6f  is table */.  Mo
12fc0 64 75 6c 65 20 2a 70 4d 6f 64 3b 20 20 20 20 20  dule *pMod;     
12fd0 20 20 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74          /* Point
12fe0 65 72 20 74 6f 20 6d 6f 64 75 6c 65 20 69 6d 70  er to module imp
12ff0 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 2a 2f 0a 20  lementation */. 
13000 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 2a 70   sqlite3_vtab *p
13010 56 74 61 62 3b 20 20 20 20 20 20 2f 2a 20 50 6f  Vtab;      /* Po
13020 69 6e 74 65 72 20 74 6f 20 76 74 61 62 20 69 6e  inter to vtab in
13030 73 74 61 6e 63 65 20 2a 2f 0a 20 20 69 6e 74 20  stance */.  int 
13040 6e 52 65 66 3b 20 20 20 20 20 20 20 20 20 20 20  nRef;           
13050 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
13060 6f 66 20 70 6f 69 6e 74 65 72 73 20 74 6f 20 74  of pointers to t
13070 68 69 73 20 73 74 72 75 63 74 75 72 65 20 2a 2f  his structure */
13080 0a 20 20 75 38 20 62 43 6f 6e 73 74 72 61 69 6e  .  u8 bConstrain
13090 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  t;           /* 
130a0 54 72 75 65 20 69 66 20 63 6f 6e 73 74 72 61 69  True if constrai
130b0 6e 74 73 20 61 72 65 20 73 75 70 70 6f 72 74 65  nts are supporte
130c0 64 20 2a 2f 0a 20 20 69 6e 74 20 69 53 61 76 65  d */.  int iSave
130d0 70 6f 69 6e 74 3b 20 20 20 20 20 20 20 20 20 20  point;          
130e0 20 2f 2a 20 44 65 70 74 68 20 6f 66 20 74 68 65   /* Depth of the
130f0 20 53 41 56 45 50 4f 49 4e 54 20 73 74 61 63 6b   SAVEPOINT stack
13100 20 2a 2f 0a 20 20 56 54 61 62 6c 65 20 2a 70 4e   */.  VTable *pN
13110 65 78 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  ext;            
13120 2f 2a 20 4e 65 78 74 20 69 6e 20 6c 69 6e 6b 65  /* Next in linke
13130 64 20 6c 69 73 74 20 28 73 65 65 20 61 62 6f 76  d list (see abov
13140 65 29 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  e) */.};../*.** 
13150 54 68 65 20 73 63 68 65 6d 61 20 66 6f 72 20 65  The schema for e
13160 61 63 68 20 53 51 4c 20 74 61 62 6c 65 20 61 6e  ach SQL table an
13170 64 20 76 69 65 77 20 69 73 20 72 65 70 72 65 73  d view is repres
13180 65 6e 74 65 64 20 69 6e 20 6d 65 6d 6f 72 79 0a  ented in memory.
13190 2a 2a 20 62 79 20 61 6e 20 69 6e 73 74 61 6e 63  ** by an instanc
131a0 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69  e of the followi
131b0 6e 67 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2f  ng structure..*/
131c0 0a 73 74 72 75 63 74 20 54 61 62 6c 65 20 7b 0a  .struct Table {.
131d0 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20    char *zName;  
131e0 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f         /* Name o
131f0 66 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20 76  f the table or v
13200 69 65 77 20 2a 2f 0a 20 20 43 6f 6c 75 6d 6e 20  iew */.  Column 
13210 2a 61 43 6f 6c 3b 20 20 20 20 20 20 20 20 2f 2a  *aCol;        /*
13220 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f   Information abo
13230 75 74 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 2a  ut each column *
13240 2f 0a 20 20 49 6e 64 65 78 20 2a 70 49 6e 64 65  /.  Index *pInde
13250 78 3b 20 20 20 20 20 20 20 2f 2a 20 4c 69 73 74  x;       /* List
13260 20 6f 66 20 53 51 4c 20 69 6e 64 65 78 65 73 20   of SQL indexes 
13270 6f 6e 20 74 68 69 73 20 74 61 62 6c 65 2e 20 2a  on this table. *
13280 2f 0a 20 20 53 65 6c 65 63 74 20 2a 70 53 65 6c  /.  Select *pSel
13290 65 63 74 3b 20 20 20 20 20 2f 2a 20 4e 55 4c 4c  ect;     /* NULL
132a0 20 66 6f 72 20 74 61 62 6c 65 73 2e 20 20 50 6f   for tables.  Po
132b0 69 6e 74 73 20 74 6f 20 64 65 66 69 6e 69 74 69  ints to definiti
132c0 6f 6e 20 69 66 20 61 20 76 69 65 77 2e 20 2a 2f  on if a view. */
132d0 0a 20 20 46 4b 65 79 20 2a 70 46 4b 65 79 3b 20  .  FKey *pFKey; 
132e0 20 20 20 20 20 20 20 20 2f 2a 20 4c 69 6e 6b 65          /* Linke
132f0 64 20 6c 69 73 74 20 6f 66 20 61 6c 6c 20 66 6f  d list of all fo
13300 72 65 69 67 6e 20 6b 65 79 73 20 69 6e 20 74 68  reign keys in th
13310 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20 63 68  is table */.  ch
13320 61 72 20 2a 7a 43 6f 6c 41 66 66 3b 20 20 20 20  ar *zColAff;    
13330 20 20 20 2f 2a 20 53 74 72 69 6e 67 20 64 65 66     /* String def
13340 69 6e 69 6e 67 20 74 68 65 20 61 66 66 69 6e 69  ining the affini
13350 74 79 20 6f 66 20 65 61 63 68 20 63 6f 6c 75 6d  ty of each colum
13360 6e 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20  n */.  ExprList 
13370 2a 70 43 68 65 63 6b 3b 20 20 20 20 2f 2a 20 41  *pCheck;    /* A
13380 6c 6c 20 43 48 45 43 4b 20 63 6f 6e 73 74 72 61  ll CHECK constra
13390 69 6e 74 73 20 2a 2f 0a 20 20 20 20 20 20 20 20  ints */.        
133a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
133b0 2a 20 20 20 2e 2e 2e 20 61 6c 73 6f 20 75 73 65  *   ... also use
133c0 64 20 61 73 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65  d as column name
133d0 20 6c 69 73 74 20 69 6e 20 61 20 56 49 45 57 20   list in a VIEW 
133e0 2a 2f 0a 20 20 69 6e 74 20 74 6e 75 6d 3b 20 20  */.  int tnum;  
133f0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 6f 6f            /* Roo
13400 74 20 42 54 72 65 65 20 70 61 67 65 20 66 6f 72  t BTree page for
13410 20 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20   this table */. 
13420 20 75 33 32 20 6e 54 61 62 52 65 66 3b 20 20 20   u32 nTabRef;   
13430 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
13440 6f 66 20 70 6f 69 6e 74 65 72 73 20 74 6f 20 74  of pointers to t
13450 68 69 73 20 54 61 62 6c 65 20 2a 2f 0a 20 20 75  his Table */.  u
13460 33 32 20 74 61 62 46 6c 61 67 73 3b 20 20 20 20  32 tabFlags;    
13470 20 20 20 20 2f 2a 20 4d 61 73 6b 20 6f 66 20 54      /* Mask of T
13480 46 5f 2a 20 76 61 6c 75 65 73 20 2a 2f 0a 20 20  F_* values */.  
13490 69 31 36 20 69 50 4b 65 79 3b 20 20 20 20 20 20  i16 iPKey;      
134a0 20 20 20 20 20 2f 2a 20 49 66 20 6e 6f 74 20 6e       /* If not n
134b0 65 67 61 74 69 76 65 2c 20 75 73 65 20 61 43 6f  egative, use aCo
134c0 6c 5b 69 50 4b 65 79 5d 20 61 73 20 74 68 65 20  l[iPKey] as the 
134d0 72 6f 77 69 64 20 2a 2f 0a 20 20 69 31 36 20 6e  rowid */.  i16 n
134e0 43 6f 6c 3b 20 20 20 20 20 20 20 20 20 20 20 20  Col;            
134f0 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c  /* Number of col
13500 75 6d 6e 73 20 69 6e 20 74 68 69 73 20 74 61 62  umns in this tab
13510 6c 65 20 2a 2f 0a 20 20 4c 6f 67 45 73 74 20 6e  le */.  LogEst n
13520 52 6f 77 4c 6f 67 45 73 74 3b 20 20 20 2f 2a 20  RowLogEst;   /* 
13530 45 73 74 69 6d 61 74 65 64 20 72 6f 77 73 20 69  Estimated rows i
13540 6e 20 74 61 62 6c 65 20 2d 20 66 72 6f 6d 20 73  n table - from s
13550 71 6c 69 74 65 5f 73 74 61 74 31 20 74 61 62 6c  qlite_stat1 tabl
13560 65 20 2a 2f 0a 20 20 4c 6f 67 45 73 74 20 73 7a  e */.  LogEst sz
13570 54 61 62 52 6f 77 3b 20 20 20 20 20 2f 2a 20 45  TabRow;     /* E
13580 73 74 69 6d 61 74 65 64 20 73 69 7a 65 20 6f 66  stimated size of
13590 20 65 61 63 68 20 74 61 62 6c 65 20 72 6f 77 20   each table row 
135a0 69 6e 20 62 79 74 65 73 20 2a 2f 0a 23 69 66 64  in bytes */.#ifd
135b0 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ef SQLITE_ENABLE
135c0 5f 43 4f 53 54 4d 55 4c 54 0a 20 20 4c 6f 67 45  _COSTMULT.  LogE
135d0 73 74 20 63 6f 73 74 4d 75 6c 74 3b 20 20 20 20  st costMult;    
135e0 20 2f 2a 20 43 6f 73 74 20 6d 75 6c 74 69 70 6c   /* Cost multipl
135f0 69 65 72 20 66 6f 72 20 75 73 69 6e 67 20 74 68  ier for using th
13600 69 73 20 74 61 62 6c 65 20 2a 2f 0a 23 65 6e 64  is table */.#end
13610 69 66 0a 20 20 75 38 20 6b 65 79 43 6f 6e 66 3b  if.  u8 keyConf;
13620 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57 68 61            /* Wha
13630 74 20 74 6f 20 64 6f 20 69 6e 20 63 61 73 65 20  t to do in case 
13640 6f 66 20 75 6e 69 71 75 65 6e 65 73 73 20 63 6f  of uniqueness co
13650 6e 66 6c 69 63 74 20 6f 6e 20 69 50 4b 65 79 20  nflict on iPKey 
13660 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  */.#ifndef SQLIT
13670 45 5f 4f 4d 49 54 5f 41 4c 54 45 52 54 41 42 4c  E_OMIT_ALTERTABL
13680 45 0a 20 20 69 6e 74 20 61 64 64 43 6f 6c 4f 66  E.  int addColOf
13690 66 73 65 74 3b 20 20 20 20 2f 2a 20 4f 66 66 73  fset;    /* Offs
136a0 65 74 20 69 6e 20 43 52 45 41 54 45 20 54 41 42  et in CREATE TAB
136b0 4c 45 20 73 74 6d 74 20 74 6f 20 61 64 64 20 61  LE stmt to add a
136c0 20 6e 65 77 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 23   new column */.#
136d0 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51  endif.#ifndef SQ
136e0 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
136f0 4c 54 41 42 4c 45 0a 20 20 69 6e 74 20 6e 4d 6f  LTABLE.  int nMo
13700 64 75 6c 65 41 72 67 3b 20 20 20 20 20 20 2f 2a  duleArg;      /*
13710 20 4e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d   Number of argum
13720 65 6e 74 73 20 74 6f 20 74 68 65 20 6d 6f 64 75  ents to the modu
13730 6c 65 20 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 61  le */.  char **a
13740 7a 4d 6f 64 75 6c 65 41 72 67 3b 20 20 2f 2a 20  zModuleArg;  /* 
13750 30 3a 20 6d 6f 64 75 6c 65 20 31 3a 20 73 63 68  0: module 1: sch
13760 65 6d 61 20 32 3a 20 76 74 61 62 20 6e 61 6d 65  ema 2: vtab name
13770 20 33 2e 2e 2e 3a 20 61 72 67 73 20 2a 2f 0a 20   3...: args */. 
13780 20 56 54 61 62 6c 65 20 2a 70 56 54 61 62 6c 65   VTable *pVTable
13790 3b 20 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66  ;     /* List of
137a0 20 56 54 61 62 6c 65 20 6f 62 6a 65 63 74 73 2e   VTable objects.
137b0 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 54 72 69   */.#endif.  Tri
137c0 67 67 65 72 20 2a 70 54 72 69 67 67 65 72 3b 20  gger *pTrigger; 
137d0 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 74 72 69    /* List of tri
137e0 67 67 65 72 73 20 73 74 6f 72 65 64 20 69 6e 20  ggers stored in 
137f0 70 53 63 68 65 6d 61 20 2a 2f 0a 20 20 53 63 68  pSchema */.  Sch
13800 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20 20 20  ema *pSchema;   
13810 20 20 2f 2a 20 53 63 68 65 6d 61 20 74 68 61 74    /* Schema that
13820 20 63 6f 6e 74 61 69 6e 73 20 74 68 69 73 20 74   contains this t
13830 61 62 6c 65 20 2a 2f 0a 20 20 54 61 62 6c 65 20  able */.  Table 
13840 2a 70 4e 65 78 74 5a 6f 6d 62 69 65 3b 20 20 2f  *pNextZombie;  /
13850 2a 20 4e 65 78 74 20 6f 6e 20 74 68 65 20 50 61  * Next on the Pa
13860 72 73 65 2e 70 5a 6f 6d 62 69 65 54 61 62 20 6c  rse.pZombieTab l
13870 69 73 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  ist */.};../*.**
13880 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20   Allowed values 
13890 66 6f 72 20 54 61 62 6c 65 2e 74 61 62 46 6c 61  for Table.tabFla
138a0 67 73 2e 0a 2a 2a 0a 2a 2a 20 54 46 5f 4f 4f 4f  gs..**.** TF_OOO
138b0 48 69 64 64 65 6e 20 61 70 70 6c 69 65 73 20 74  Hidden applies t
138c0 6f 20 74 61 62 6c 65 73 20 6f 72 20 76 69 65 77  o tables or view
138d0 20 74 68 61 74 20 68 61 76 65 20 68 69 64 64 65   that have hidde
138e0 6e 20 63 6f 6c 75 6d 6e 73 20 74 68 61 74 20 61  n columns that a
138f0 72 65 0a 2a 2a 20 66 6f 6c 6c 6f 77 65 64 20 62  re.** followed b
13900 79 20 6e 6f 6e 2d 68 69 64 64 65 6e 20 63 6f 6c  y non-hidden col
13910 75 6d 6e 73 2e 20 20 45 78 61 6d 70 6c 65 3a 20  umns.  Example: 
13920 20 22 43 52 45 41 54 45 20 56 49 52 54 55 41 4c   "CREATE VIRTUAL
13930 20 54 41 42 4c 45 20 78 20 55 53 49 4e 47 0a 2a   TABLE x USING.*
13940 2a 20 76 74 61 62 31 28 61 20 48 49 44 44 45 4e  * vtab1(a HIDDEN
13950 2c 20 62 29 3b 22 2e 20 20 53 69 6e 63 65 20 22  , b);".  Since "
13960 62 22 20 69 73 20 61 20 6e 6f 6e 2d 68 69 64 64  b" is a non-hidd
13970 65 6e 20 63 6f 6c 75 6d 6e 20 62 75 74 20 22 61  en column but "a
13980 22 20 69 73 20 68 69 64 64 65 6e 2c 0a 2a 2a 20  " is hidden,.** 
13990 74 68 65 20 54 46 5f 4f 4f 4f 48 69 64 64 65 6e  the TF_OOOHidden
139a0 20 61 74 74 72 69 62 75 74 65 20 77 6f 75 6c 64   attribute would
139b0 20 61 70 70 6c 79 20 69 6e 20 74 68 69 73 20 63   apply in this c
139c0 61 73 65 2e 20 20 53 75 63 68 20 74 61 62 6c 65  ase.  Such table
139d0 73 20 72 65 71 75 69 72 65 0a 2a 2a 20 73 70 65  s require.** spe
139e0 63 69 61 6c 20 68 61 6e 64 6c 69 6e 67 20 64 75  cial handling du
139f0 72 69 6e 67 20 49 4e 53 45 52 54 20 70 72 6f 63  ring INSERT proc
13a00 65 73 73 69 6e 67 2e 0a 2a 2f 0a 23 64 65 66 69  essing..*/.#defi
13a10 6e 65 20 54 46 5f 52 65 61 64 6f 6e 6c 79 20 20  ne TF_Readonly  
13a20 20 20 20 20 20 20 30 78 30 30 30 31 20 20 20 20        0x0001    
13a30 2f 2a 20 52 65 61 64 2d 6f 6e 6c 79 20 73 79 73  /* Read-only sys
13a40 74 65 6d 20 74 61 62 6c 65 20 2a 2f 0a 23 64 65  tem table */.#de
13a50 66 69 6e 65 20 54 46 5f 45 70 68 65 6d 65 72 61  fine TF_Ephemera
13a60 6c 20 20 20 20 20 20 20 30 78 30 30 30 32 20 20  l       0x0002  
13a70 20 20 2f 2a 20 41 6e 20 65 70 68 65 6d 65 72 61    /* An ephemera
13a80 6c 20 74 61 62 6c 65 20 2a 2f 0a 23 64 65 66 69  l table */.#defi
13a90 6e 65 20 54 46 5f 48 61 73 50 72 69 6d 61 72 79  ne TF_HasPrimary
13aa0 4b 65 79 20 20 20 30 78 30 30 30 34 20 20 20 20  Key   0x0004    
13ab0 2f 2a 20 54 61 62 6c 65 20 68 61 73 20 61 20 70  /* Table has a p
13ac0 72 69 6d 61 72 79 20 6b 65 79 20 2a 2f 0a 23 64  rimary key */.#d
13ad0 65 66 69 6e 65 20 54 46 5f 41 75 74 6f 69 6e 63  efine TF_Autoinc
13ae0 72 65 6d 65 6e 74 20 20 20 30 78 30 30 30 38 20  rement   0x0008 
13af0 20 20 20 2f 2a 20 49 6e 74 65 67 65 72 20 70 72     /* Integer pr
13b00 69 6d 61 72 79 20 6b 65 79 20 69 73 20 61 75 74  imary key is aut
13b10 6f 69 6e 63 72 65 6d 65 6e 74 20 2a 2f 0a 23 64  oincrement */.#d
13b20 65 66 69 6e 65 20 54 46 5f 48 61 73 53 74 61 74  efine TF_HasStat
13b30 31 20 20 20 20 20 20 20 20 30 78 30 30 31 30 20  1        0x0010 
13b40 20 20 20 2f 2a 20 6e 52 6f 77 4c 6f 67 45 73 74     /* nRowLogEst
13b50 20 73 65 74 20 66 72 6f 6d 20 73 71 6c 69 74 65   set from sqlite
13b60 5f 73 74 61 74 31 20 2a 2f 0a 23 64 65 66 69 6e  _stat1 */.#defin
13b70 65 20 54 46 5f 57 69 74 68 6f 75 74 52 6f 77 69  e TF_WithoutRowi
13b80 64 20 20 20 20 30 78 30 30 32 30 20 20 20 20 2f  d    0x0020    /
13b90 2a 20 4e 6f 20 72 6f 77 69 64 2e 20 20 50 52 49  * No rowid.  PRI
13ba0 4d 41 52 59 20 4b 45 59 20 69 73 20 74 68 65 20  MARY KEY is the 
13bb0 6b 65 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54  key */.#define T
13bc0 46 5f 4e 6f 56 69 73 69 62 6c 65 52 6f 77 69 64  F_NoVisibleRowid
13bd0 20 20 30 78 30 30 34 30 20 20 20 20 2f 2a 20 4e    0x0040    /* N
13be0 6f 20 75 73 65 72 2d 76 69 73 69 62 6c 65 20 22  o user-visible "
13bf0 72 6f 77 69 64 22 20 63 6f 6c 75 6d 6e 20 2a 2f  rowid" column */
13c00 0a 23 64 65 66 69 6e 65 20 54 46 5f 4f 4f 4f 48  .#define TF_OOOH
13c10 69 64 64 65 6e 20 20 20 20 20 20 20 30 78 30 30  idden       0x00
13c20 38 30 20 20 20 20 2f 2a 20 4f 75 74 2d 6f 66 2d  80    /* Out-of-
13c30 4f 72 64 65 72 20 68 69 64 64 65 6e 20 63 6f 6c  Order hidden col
13c40 75 6d 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  umns */.#define 
13c50 54 46 5f 53 74 61 74 73 55 73 65 64 20 20 20 20  TF_StatsUsed    
13c60 20 20 20 30 78 30 31 30 30 20 20 20 20 2f 2a 20     0x0100    /* 
13c70 51 75 65 72 79 20 70 6c 61 6e 6e 65 72 20 64 65  Query planner de
13c80 63 69 73 69 6f 6e 73 20 61 66 66 65 63 74 65 64  cisions affected
13c90 20 62 79 0a 20 20 20 20 20 20 20 20 20 20 20 20   by.            
13ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13cb0 20 20 20 20 20 20 20 20 20 2a 2a 20 49 6e 64 65           ** Inde
13cc0 78 2e 61 69 52 6f 77 4c 6f 67 45 73 74 5b 5d 20  x.aiRowLogEst[] 
13cd0 76 61 6c 75 65 73 20 2a 2f 0a 23 64 65 66 69 6e  values */.#defin
13ce0 65 20 54 46 5f 48 61 73 4e 6f 74 4e 75 6c 6c 20  e TF_HasNotNull 
13cf0 20 20 20 20 20 30 78 30 32 30 30 20 20 20 20 2f       0x0200    /
13d00 2a 20 43 6f 6e 74 61 69 6e 73 20 4e 4f 54 20 4e  * Contains NOT N
13d10 55 4c 4c 20 63 6f 6e 73 74 72 61 69 6e 74 73 20  ULL constraints 
13d20 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 53 68  */.#define TF_Sh
13d30 61 64 6f 77 20 20 20 20 20 20 20 20 20 20 30 78  adow          0x
13d40 30 34 30 30 20 20 20 20 2f 2a 20 54 72 75 65 20  0400    /* True 
13d50 66 6f 72 20 61 20 73 68 61 64 6f 77 20 74 61 62  for a shadow tab
13d60 6c 65 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 65 73  le */../*.** Tes
13d70 74 20 74 6f 20 73 65 65 20 77 68 65 74 68 65 72  t to see whether
13d80 20 6f 72 20 6e 6f 74 20 61 20 74 61 62 6c 65 20   or not a table 
13d90 69 73 20 61 20 76 69 72 74 75 61 6c 20 74 61 62  is a virtual tab
13da0 6c 65 2e 20 20 54 68 69 73 20 69 73 0a 2a 2a 20  le.  This is.** 
13db0 64 6f 6e 65 20 61 73 20 61 20 6d 61 63 72 6f 20  done as a macro 
13dc0 73 6f 20 74 68 61 74 20 69 74 20 77 69 6c 6c 20  so that it will 
13dd0 62 65 20 6f 70 74 69 6d 69 7a 65 64 20 6f 75 74  be optimized out
13de0 20 77 68 65 6e 20 76 69 72 74 75 61 6c 0a 2a 2a   when virtual.**
13df0 20 74 61 62 6c 65 20 73 75 70 70 6f 72 74 20 69   table support i
13e00 73 20 6f 6d 69 74 74 65 64 20 66 72 6f 6d 20 74  s omitted from t
13e10 68 65 20 62 75 69 6c 64 2e 0a 2a 2f 0a 23 69 66  he build..*/.#if
13e20 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
13e30 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 23 20  _VIRTUALTABLE.# 
13e40 20 64 65 66 69 6e 65 20 49 73 56 69 72 74 75 61   define IsVirtua
13e50 6c 28 58 29 20 20 20 20 20 20 28 28 58 29 2d 3e  l(X)      ((X)->
13e60 6e 4d 6f 64 75 6c 65 41 72 67 29 0a 23 65 6c 73  nModuleArg).#els
13e70 65 0a 23 20 20 64 65 66 69 6e 65 20 49 73 56 69  e.#  define IsVi
13e80 72 74 75 61 6c 28 58 29 20 20 20 20 20 20 30 0a  rtual(X)      0.
13e90 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 4d 61  #endif../*.** Ma
13ea0 63 72 6f 73 20 74 6f 20 64 65 74 65 72 6d 69 6e  cros to determin
13eb0 65 20 69 66 20 61 20 63 6f 6c 75 6d 6e 20 69 73  e if a column is
13ec0 20 68 69 64 64 65 6e 2e 20 20 49 73 4f 72 64 69   hidden.  IsOrdi
13ed0 6e 61 72 79 48 69 64 64 65 6e 43 6f 6c 75 6d 6e  naryHiddenColumn
13ee0 28 29 0a 2a 2a 20 6f 6e 6c 79 20 77 6f 72 6b 73  ().** only works
13ef0 20 66 6f 72 20 6e 6f 6e 2d 76 69 72 74 75 61 6c   for non-virtual
13f00 20 74 61 62 6c 65 73 20 28 6f 72 64 69 6e 61 72   tables (ordinar
13f10 79 20 74 61 62 6c 65 73 20 61 6e 64 20 76 69 65  y tables and vie
13f20 77 73 29 20 61 6e 64 20 69 73 0a 2a 2a 20 61 6c  ws) and is.** al
13f30 77 61 79 73 20 66 61 6c 73 65 20 75 6e 6c 65 73  ways false unles
13f40 73 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  s SQLITE_ENABLE_
13f50 48 49 44 44 45 4e 5f 43 4f 4c 55 4d 4e 53 20 69  HIDDEN_COLUMNS i
13f60 73 20 64 65 66 69 6e 65 64 2e 20 20 54 68 65 0a  s defined.  The.
13f70 2a 2a 20 49 73 48 69 64 64 65 6e 43 6f 6c 75 6d  ** IsHiddenColum
13f80 6e 28 29 20 6d 61 63 72 6f 20 69 73 20 67 65 6e  n() macro is gen
13f90 65 72 61 6c 20 70 75 72 70 6f 73 65 2e 0a 2a 2f  eral purpose..*/
13fa0 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c  .#if defined(SQL
13fb0 49 54 45 5f 45 4e 41 42 4c 45 5f 48 49 44 44 45  ITE_ENABLE_HIDDE
13fc0 4e 5f 43 4f 4c 55 4d 4e 53 29 0a 23 20 20 64 65  N_COLUMNS).#  de
13fd0 66 69 6e 65 20 49 73 48 69 64 64 65 6e 43 6f 6c  fine IsHiddenCol
13fe0 75 6d 6e 28 58 29 20 20 20 20 20 20 20 20 20 28  umn(X)         (
13ff0 28 28 58 29 2d 3e 63 6f 6c 46 6c 61 67 73 20 26  ((X)->colFlags &
14000 20 43 4f 4c 46 4c 41 47 5f 48 49 44 44 45 4e 29   COLFLAG_HIDDEN)
14010 21 3d 30 29 0a 23 20 20 64 65 66 69 6e 65 20 49  !=0).#  define I
14020 73 4f 72 64 69 6e 61 72 79 48 69 64 64 65 6e 43  sOrdinaryHiddenC
14030 6f 6c 75 6d 6e 28 58 29 20 28 28 28 58 29 2d 3e  olumn(X) (((X)->
14040 63 6f 6c 46 6c 61 67 73 20 26 20 43 4f 4c 46 4c  colFlags & COLFL
14050 41 47 5f 48 49 44 44 45 4e 29 21 3d 30 29 0a 23  AG_HIDDEN)!=0).#
14060 65 6c 69 66 20 21 64 65 66 69 6e 65 64 28 53 51  elif !defined(SQ
14070 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
14080 4c 54 41 42 4c 45 29 0a 23 20 20 64 65 66 69 6e  LTABLE).#  defin
14090 65 20 49 73 48 69 64 64 65 6e 43 6f 6c 75 6d 6e  e IsHiddenColumn
140a0 28 58 29 20 20 20 20 20 20 20 20 20 28 28 28 58  (X)         (((X
140b0 29 2d 3e 63 6f 6c 46 6c 61 67 73 20 26 20 43 4f  )->colFlags & CO
140c0 4c 46 4c 41 47 5f 48 49 44 44 45 4e 29 21 3d 30  LFLAG_HIDDEN)!=0
140d0 29 0a 23 20 20 64 65 66 69 6e 65 20 49 73 4f 72  ).#  define IsOr
140e0 64 69 6e 61 72 79 48 69 64 64 65 6e 43 6f 6c 75  dinaryHiddenColu
140f0 6d 6e 28 58 29 20 30 0a 23 65 6c 73 65 0a 23 20  mn(X) 0.#else.# 
14100 20 64 65 66 69 6e 65 20 49 73 48 69 64 64 65 6e   define IsHidden
14110 43 6f 6c 75 6d 6e 28 58 29 20 20 20 20 20 20 20  Column(X)       
14120 20 20 30 0a 23 20 20 64 65 66 69 6e 65 20 49 73    0.#  define Is
14130 4f 72 64 69 6e 61 72 79 48 69 64 64 65 6e 43 6f  OrdinaryHiddenCo
14140 6c 75 6d 6e 28 58 29 20 30 0a 23 65 6e 64 69 66  lumn(X) 0.#endif
14150 0a 0a 0a 2f 2a 20 44 6f 65 73 20 74 68 65 20 74  .../* Does the t
14160 61 62 6c 65 20 68 61 76 65 20 61 20 72 6f 77 69  able have a rowi
14170 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 48 61 73  d */.#define Has
14180 52 6f 77 69 64 28 58 29 20 20 20 20 20 28 28 28  Rowid(X)     (((
14190 58 29 2d 3e 74 61 62 46 6c 61 67 73 20 26 20 54  X)->tabFlags & T
141a0 46 5f 57 69 74 68 6f 75 74 52 6f 77 69 64 29 3d  F_WithoutRowid)=
141b0 3d 30 29 0a 23 64 65 66 69 6e 65 20 56 69 73 69  =0).#define Visi
141c0 62 6c 65 52 6f 77 69 64 28 58 29 20 28 28 28 58  bleRowid(X) (((X
141d0 29 2d 3e 74 61 62 46 6c 61 67 73 20 26 20 54 46  )->tabFlags & TF
141e0 5f 4e 6f 56 69 73 69 62 6c 65 52 6f 77 69 64 29  _NoVisibleRowid)
141f0 3d 3d 30 29 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68  ==0)../*.** Each
14200 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e   foreign key con
14210 73 74 72 61 69 6e 74 20 69 73 20 61 6e 20 69 6e  straint is an in
14220 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f  stance of the fo
14230 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72  llowing structur
14240 65 2e 0a 2a 2a 0a 2a 2a 20 41 20 66 6f 72 65 69  e..**.** A forei
14250 67 6e 20 6b 65 79 20 69 73 20 61 73 73 6f 63 69  gn key is associ
14260 61 74 65 64 20 77 69 74 68 20 74 77 6f 20 74 61  ated with two ta
14270 62 6c 65 73 2e 20 20 54 68 65 20 22 66 72 6f 6d  bles.  The "from
14280 22 20 74 61 62 6c 65 20 69 73 0a 2a 2a 20 74 68  " table is.** th
14290 65 20 74 61 62 6c 65 20 74 68 61 74 20 63 6f 6e  e table that con
142a0 74 61 69 6e 73 20 74 68 65 20 52 45 46 45 52 45  tains the REFERE
142b0 4e 43 45 53 20 63 6c 61 75 73 65 20 74 68 61 74  NCES clause that
142c0 20 63 72 65 61 74 65 73 20 74 68 65 20 66 6f 72   creates the for
142d0 65 69 67 6e 0a 2a 2a 20 6b 65 79 2e 20 20 54 68  eign.** key.  Th
142e0 65 20 22 74 6f 22 20 74 61 62 6c 65 20 69 73 20  e "to" table is 
142f0 74 68 65 20 74 61 62 6c 65 20 74 68 61 74 20 69  the table that i
14300 73 20 6e 61 6d 65 64 20 69 6e 20 74 68 65 20 52  s named in the R
14310 45 46 45 52 45 4e 43 45 53 20 63 6c 61 75 73 65  EFERENCES clause
14320 2e 0a 2a 2a 20 43 6f 6e 73 69 64 65 72 20 74 68  ..** Consider th
14330 69 73 20 65 78 61 6d 70 6c 65 3a 0a 2a 2a 0a 2a  is example:.**.*
14340 2a 20 20 20 20 20 43 52 45 41 54 45 20 54 41 42  *     CREATE TAB
14350 4c 45 20 65 78 31 28 0a 2a 2a 20 20 20 20 20 20  LE ex1(.**      
14360 20 61 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41   a INTEGER PRIMA
14370 52 59 20 4b 45 59 2c 0a 2a 2a 20 20 20 20 20 20  RY KEY,.**      
14380 20 62 20 49 4e 54 45 47 45 52 20 43 4f 4e 53 54   b INTEGER CONST
14390 52 41 49 4e 54 20 66 6b 31 20 52 45 46 45 52 45  RAINT fk1 REFERE
143a0 4e 43 45 53 20 65 78 32 28 78 29 0a 2a 2a 20 20  NCES ex2(x).**  
143b0 20 20 20 29 3b 0a 2a 2a 0a 2a 2a 20 46 6f 72 20     );.**.** For 
143c0 66 6f 72 65 69 67 6e 20 6b 65 79 20 22 66 6b 31  foreign key "fk1
143d0 22 2c 20 74 68 65 20 66 72 6f 6d 2d 74 61 62 6c  ", the from-tabl
143e0 65 20 69 73 20 22 65 78 31 22 20 61 6e 64 20 74  e is "ex1" and t
143f0 68 65 20 74 6f 2d 74 61 62 6c 65 20 69 73 20 22  he to-table is "
14400 65 78 32 22 2e 0a 2a 2a 20 45 71 75 69 76 61 6c  ex2"..** Equival
14410 65 6e 74 20 6e 61 6d 65 73 3a 0a 2a 2a 0a 2a 2a  ent names:.**.**
14420 20 20 20 20 20 66 72 6f 6d 2d 74 61 62 6c 65 20       from-table 
14430 3d 3d 20 63 68 69 6c 64 2d 74 61 62 6c 65 0a 2a  == child-table.*
14440 2a 20 20 20 20 20 20 20 74 6f 2d 74 61 62 6c 65  *       to-table
14450 20 3d 3d 20 70 61 72 65 6e 74 2d 74 61 62 6c 65   == parent-table
14460 0a 2a 2a 0a 2a 2a 20 45 61 63 68 20 52 45 46 45  .**.** Each REFE
14470 52 45 4e 43 45 53 20 63 6c 61 75 73 65 20 67 65  RENCES clause ge
14480 6e 65 72 61 74 65 73 20 61 6e 20 69 6e 73 74 61  nerates an insta
14490 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f  nce of the follo
144a0 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 0a 2a  wing structure.*
144b0 2a 20 77 68 69 63 68 20 69 73 20 61 74 74 61 63  * which is attac
144c0 68 65 64 20 74 6f 20 74 68 65 20 66 72 6f 6d 2d  hed to the from-
144d0 74 61 62 6c 65 2e 20 20 54 68 65 20 74 6f 2d 74  table.  The to-t
144e0 61 62 6c 65 20 6e 65 65 64 20 6e 6f 74 20 65 78  able need not ex
144f0 69 73 74 20 77 68 65 6e 0a 2a 2a 20 74 68 65 20  ist when.** the 
14500 66 72 6f 6d 2d 74 61 62 6c 65 20 69 73 20 63 72  from-table is cr
14510 65 61 74 65 64 2e 20 20 54 68 65 20 65 78 69 73  eated.  The exis
14520 74 65 6e 63 65 20 6f 66 20 74 68 65 20 74 6f 2d  tence of the to-
14530 74 61 62 6c 65 20 69 73 20 6e 6f 74 20 63 68 65  table is not che
14540 63 6b 65 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  cked..**.** The 
14550 6c 69 73 74 20 6f 66 20 61 6c 6c 20 70 61 72 65  list of all pare
14560 6e 74 73 20 66 6f 72 20 63 68 69 6c 64 20 54 61  nts for child Ta
14570 62 6c 65 20 58 20 69 73 20 68 65 6c 64 20 61 74  ble X is held at
14580 20 58 2e 70 46 4b 65 79 2e 0a 2a 2a 0a 2a 2a 20   X.pFKey..**.** 
14590 41 20 6c 69 73 74 20 6f 66 20 61 6c 6c 20 63 68  A list of all ch
145a0 69 6c 64 72 65 6e 20 66 6f 72 20 61 20 74 61 62  ildren for a tab
145b0 6c 65 20 6e 61 6d 65 64 20 5a 20 28 77 68 69 63  le named Z (whic
145c0 68 20 6d 69 67 68 74 20 6e 6f 74 20 65 76 65 6e  h might not even
145d0 20 65 78 69 73 74 29 0a 2a 2a 20 69 73 20 68 65   exist).** is he
145e0 6c 64 20 69 6e 20 53 63 68 65 6d 61 2e 66 6b 65  ld in Schema.fke
145f0 79 48 61 73 68 20 77 69 74 68 20 61 20 68 61 73  yHash with a has
14600 68 20 6b 65 79 20 6f 66 20 5a 2e 0a 2a 2f 0a 73  h key of Z..*/.s
14610 74 72 75 63 74 20 46 4b 65 79 20 7b 0a 20 20 54  truct FKey {.  T
14620 61 62 6c 65 20 2a 70 46 72 6f 6d 3b 20 20 20 20  able *pFrom;    
14630 20 2f 2a 20 54 61 62 6c 65 20 63 6f 6e 74 61 69   /* Table contai
14640 6e 69 6e 67 20 74 68 65 20 52 45 46 45 52 45 4e  ning the REFEREN
14650 43 45 53 20 63 6c 61 75 73 65 20 28 61 6b 61 3a  CES clause (aka:
14660 20 43 68 69 6c 64 29 20 2a 2f 0a 20 20 46 4b 65   Child) */.  FKe
14670 79 20 2a 70 4e 65 78 74 46 72 6f 6d 3b 20 20 2f  y *pNextFrom;  /
14680 2a 20 4e 65 78 74 20 46 4b 65 79 20 77 69 74 68  * Next FKey with
14690 20 74 68 65 20 73 61 6d 65 20 69 6e 20 70 46 72   the same in pFr
146a0 6f 6d 2e 20 4e 65 78 74 20 70 61 72 65 6e 74 20  om. Next parent 
146b0 6f 66 20 70 46 72 6f 6d 20 2a 2f 0a 20 20 63 68  of pFrom */.  ch
146c0 61 72 20 2a 7a 54 6f 3b 20 20 20 20 20 20 20 20  ar *zTo;        
146d0 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 61 62 6c 65  /* Name of table
146e0 20 74 68 61 74 20 74 68 65 20 6b 65 79 20 70 6f   that the key po
146f0 69 6e 74 73 20 74 6f 20 28 61 6b 61 3a 20 50 61  ints to (aka: Pa
14700 72 65 6e 74 29 20 2a 2f 0a 20 20 46 4b 65 79 20  rent) */.  FKey 
14710 2a 70 4e 65 78 74 54 6f 3b 20 20 20 20 2f 2a 20  *pNextTo;    /* 
14720 4e 65 78 74 20 77 69 74 68 20 74 68 65 20 73 61  Next with the sa
14730 6d 65 20 7a 54 6f 2e 20 4e 65 78 74 20 63 68 69  me zTo. Next chi
14740 6c 64 20 6f 66 20 7a 54 6f 2e 20 2a 2f 0a 20 20  ld of zTo. */.  
14750 46 4b 65 79 20 2a 70 50 72 65 76 54 6f 3b 20 20  FKey *pPrevTo;  
14760 20 20 2f 2a 20 50 72 65 76 69 6f 75 73 20 77 69    /* Previous wi
14770 74 68 20 74 68 65 20 73 61 6d 65 20 7a 54 6f 20  th the same zTo 
14780 2a 2f 0a 20 20 69 6e 74 20 6e 43 6f 6c 3b 20 20  */.  int nCol;  
14790 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
147a0 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74   of columns in t
147b0 68 69 73 20 6b 65 79 20 2a 2f 0a 20 20 2f 2a 20  his key */.  /* 
147c0 45 56 3a 20 52 2d 33 30 33 32 33 2d 32 31 39 31  EV: R-30323-2191
147d0 37 20 2a 2f 0a 20 20 75 38 20 69 73 44 65 66 65  7 */.  u8 isDefe
147e0 72 72 65 64 3b 20 20 20 20 20 20 20 2f 2a 20 54  rred;       /* T
147f0 72 75 65 20 69 66 20 63 6f 6e 73 74 72 61 69 6e  rue if constrain
14800 74 20 63 68 65 63 6b 69 6e 67 20 69 73 20 64 65  t checking is de
14810 66 65 72 72 65 64 20 74 69 6c 6c 20 43 4f 4d 4d  ferred till COMM
14820 49 54 20 2a 2f 0a 20 20 75 38 20 61 41 63 74 69  IT */.  u8 aActi
14830 6f 6e 5b 32 5d 3b 20 20 20 20 20 20 20 20 2f 2a  on[2];        /*
14840 20 4f 4e 20 44 45 4c 45 54 45 20 61 6e 64 20 4f   ON DELETE and O
14850 4e 20 55 50 44 41 54 45 20 61 63 74 69 6f 6e 73  N UPDATE actions
14860 2c 20 72 65 73 70 65 63 74 69 76 65 6c 79 20 2a  , respectively *
14870 2f 0a 20 20 54 72 69 67 67 65 72 20 2a 61 70 54  /.  Trigger *apT
14880 72 69 67 67 65 72 5b 32 5d 3b 2f 2a 20 54 72 69  rigger[2];/* Tri
14890 67 67 65 72 73 20 66 6f 72 20 61 41 63 74 69 6f  ggers for aActio
148a0 6e 5b 5d 20 61 63 74 69 6f 6e 73 20 2a 2f 0a 20  n[] actions */. 
148b0 20 73 74 72 75 63 74 20 73 43 6f 6c 4d 61 70 20   struct sColMap 
148c0 7b 20 20 20 20 20 20 2f 2a 20 4d 61 70 70 69 6e  {      /* Mappin
148d0 67 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20  g of columns in 
148e0 70 46 72 6f 6d 20 74 6f 20 63 6f 6c 75 6d 6e 73  pFrom to columns
148f0 20 69 6e 20 7a 54 6f 20 2a 2f 0a 20 20 20 20 69   in zTo */.    i
14900 6e 74 20 69 46 72 6f 6d 3b 20 20 20 20 20 20 20  nt iFrom;       
14910 20 20 20 20 20 2f 2a 20 49 6e 64 65 78 20 6f 66       /* Index of
14920 20 63 6f 6c 75 6d 6e 20 69 6e 20 70 46 72 6f 6d   column in pFrom
14930 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a 43   */.    char *zC
14940 6f 6c 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ol;           /*
14950 20 4e 61 6d 65 20 6f 66 20 63 6f 6c 75 6d 6e 20   Name of column 
14960 69 6e 20 7a 54 6f 2e 20 20 49 66 20 4e 55 4c 4c  in zTo.  If NULL
14970 20 75 73 65 20 50 52 49 4d 41 52 59 20 4b 45 59   use PRIMARY KEY
14980 20 2a 2f 0a 20 20 7d 20 61 43 6f 6c 5b 31 5d 3b   */.  } aCol[1];
14990 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f              /* O
149a0 6e 65 20 65 6e 74 72 79 20 66 6f 72 20 65 61 63  ne entry for eac
149b0 68 20 6f 66 20 6e 43 6f 6c 20 63 6f 6c 75 6d 6e  h of nCol column
149c0 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 53  s */.};../*.** S
149d0 51 4c 69 74 65 20 73 75 70 70 6f 72 74 73 20 6d  QLite supports m
149e0 61 6e 79 20 64 69 66 66 65 72 65 6e 74 20 77 61  any different wa
149f0 79 73 20 74 6f 20 72 65 73 6f 6c 76 65 20 61 20  ys to resolve a 
14a00 63 6f 6e 73 74 72 61 69 6e 74 0a 2a 2a 20 65 72  constraint.** er
14a10 72 6f 72 2e 20 20 52 4f 4c 4c 42 41 43 4b 20 70  ror.  ROLLBACK p
14a20 72 6f 63 65 73 73 69 6e 67 20 6d 65 61 6e 73 20  rocessing means 
14a30 74 68 61 74 20 61 20 63 6f 6e 73 74 72 61 69 6e  that a constrain
14a40 74 20 76 69 6f 6c 61 74 69 6f 6e 0a 2a 2a 20 63  t violation.** c
14a50 61 75 73 65 73 20 74 68 65 20 6f 70 65 72 61 74  auses the operat
14a60 69 6f 6e 20 69 6e 20 70 72 6f 63 65 73 73 20 74  ion in process t
14a70 6f 20 66 61 69 6c 20 61 6e 64 20 66 6f 72 20 74  o fail and for t
14a80 68 65 20 63 75 72 72 65 6e 74 20 74 72 61 6e 73  he current trans
14a90 61 63 74 69 6f 6e 0a 2a 2a 20 74 6f 20 62 65 20  action.** to be 
14aa0 72 6f 6c 6c 65 64 20 62 61 63 6b 2e 20 20 41 42  rolled back.  AB
14ab0 4f 52 54 20 70 72 6f 63 65 73 73 69 6e 67 20 6d  ORT processing m
14ac0 65 61 6e 73 20 74 68 65 20 6f 70 65 72 61 74 69  eans the operati
14ad0 6f 6e 20 69 6e 20 70 72 6f 63 65 73 73 0a 2a 2a  on in process.**
14ae0 20 66 61 69 6c 73 20 61 6e 64 20 61 6e 79 20 70   fails and any p
14af0 72 69 6f 72 20 63 68 61 6e 67 65 73 20 66 72 6f  rior changes fro
14b00 6d 20 74 68 61 74 20 6f 6e 65 20 6f 70 65 72 61  m that one opera
14b10 74 69 6f 6e 20 61 72 65 20 62 61 63 6b 65 64 20  tion are backed 
14b20 6f 75 74 2c 0a 2a 2a 20 62 75 74 20 74 68 65 20  out,.** but the 
14b30 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 6e  transaction is n
14b40 6f 74 20 72 6f 6c 6c 65 64 20 62 61 63 6b 2e 20  ot rolled back. 
14b50 20 46 41 49 4c 20 70 72 6f 63 65 73 73 69 6e 67   FAIL processing
14b60 20 6d 65 61 6e 73 20 74 68 61 74 0a 2a 2a 20 74   means that.** t
14b70 68 65 20 6f 70 65 72 61 74 69 6f 6e 20 69 6e 20  he operation in 
14b80 70 72 6f 67 72 65 73 73 20 73 74 6f 70 73 20 61  progress stops a
14b90 6e 64 20 72 65 74 75 72 6e 73 20 61 6e 20 65 72  nd returns an er
14ba0 72 6f 72 20 63 6f 64 65 2e 20 20 42 75 74 20 70  ror code.  But p
14bb0 72 69 6f 72 0a 2a 2a 20 63 68 61 6e 67 65 73 20  rior.** changes 
14bc0 64 75 65 20 74 6f 20 74 68 65 20 73 61 6d 65 20  due to the same 
14bd0 6f 70 65 72 61 74 69 6f 6e 20 61 72 65 20 6e 6f  operation are no
14be0 74 20 62 61 63 6b 65 64 20 6f 75 74 20 61 6e 64  t backed out and
14bf0 20 6e 6f 20 72 6f 6c 6c 62 61 63 6b 0a 2a 2a 20   no rollback.** 
14c00 6f 63 63 75 72 73 2e 20 20 49 47 4e 4f 52 45 20  occurs.  IGNORE 
14c10 6d 65 61 6e 73 20 74 68 61 74 20 74 68 65 20 70  means that the p
14c20 61 72 74 69 63 75 6c 61 72 20 72 6f 77 20 74 68  articular row th
14c30 61 74 20 63 61 75 73 65 64 20 74 68 65 20 63 6f  at caused the co
14c40 6e 73 74 72 61 69 6e 74 0a 2a 2a 20 65 72 72 6f  nstraint.** erro
14c50 72 20 69 73 20 6e 6f 74 20 69 6e 73 65 72 74 65  r is not inserte
14c60 64 20 6f 72 20 75 70 64 61 74 65 64 2e 20 20 50  d or updated.  P
14c70 72 6f 63 65 73 73 69 6e 67 20 63 6f 6e 74 69 6e  rocessing contin
14c80 75 65 73 20 61 6e 64 20 6e 6f 20 65 72 72 6f 72  ues and no error
14c90 0a 2a 2a 20 69 73 20 72 65 74 75 72 6e 65 64 2e  .** is returned.
14ca0 20 20 52 45 50 4c 41 43 45 20 6d 65 61 6e 73 20    REPLACE means 
14cb0 74 68 61 74 20 70 72 65 65 78 69 73 74 69 6e 67  that preexisting
14cc0 20 64 61 74 61 62 61 73 65 20 72 6f 77 73 20 74   database rows t
14cd0 68 61 74 20 63 61 75 73 65 64 0a 2a 2a 20 61 20  hat caused.** a 
14ce0 55 4e 49 51 55 45 20 63 6f 6e 73 74 72 61 69 6e  UNIQUE constrain
14cf0 74 20 76 69 6f 6c 61 74 69 6f 6e 20 61 72 65 20  t violation are 
14d00 72 65 6d 6f 76 65 64 20 73 6f 20 74 68 61 74 20  removed so that 
14d10 74 68 65 20 6e 65 77 20 69 6e 73 65 72 74 20 6f  the new insert o
14d20 72 0a 2a 2a 20 75 70 64 61 74 65 20 63 61 6e 20  r.** update can 
14d30 70 72 6f 63 65 65 64 2e 20 20 50 72 6f 63 65 73  proceed.  Proces
14d40 73 69 6e 67 20 63 6f 6e 74 69 6e 75 65 73 20 61  sing continues a
14d50 6e 64 20 6e 6f 20 65 72 72 6f 72 20 69 73 20 72  nd no error is r
14d60 65 70 6f 72 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 52  eported..**.** R
14d70 45 53 54 52 49 43 54 2c 20 53 45 54 4e 55 4c 4c  ESTRICT, SETNULL
14d80 2c 20 61 6e 64 20 43 41 53 43 41 44 45 20 61 63  , and CASCADE ac
14d90 74 69 6f 6e 73 20 61 70 70 6c 79 20 6f 6e 6c 79  tions apply only
14da0 20 74 6f 20 66 6f 72 65 69 67 6e 20 6b 65 79 73   to foreign keys
14db0 2e 0a 2a 2a 20 52 45 53 54 52 49 43 54 20 69 73  ..** RESTRICT is
14dc0 20 74 68 65 20 73 61 6d 65 20 61 73 20 41 42 4f   the same as ABO
14dd0 52 54 20 66 6f 72 20 49 4d 4d 45 44 49 41 54 45  RT for IMMEDIATE
14de0 20 66 6f 72 65 69 67 6e 20 6b 65 79 73 20 61 6e   foreign keys an
14df0 64 20 74 68 65 0a 2a 2a 20 73 61 6d 65 20 61 73  d the.** same as
14e00 20 52 4f 4c 4c 42 41 43 4b 20 66 6f 72 20 44 45   ROLLBACK for DE
14e10 46 45 52 52 45 44 20 6b 65 79 73 2e 20 20 53 45  FERRED keys.  SE
14e20 54 4e 55 4c 4c 20 6d 65 61 6e 73 20 74 68 61 74  TNULL means that
14e30 20 74 68 65 20 66 6f 72 65 69 67 6e 0a 2a 2a 20   the foreign.** 
14e40 6b 65 79 20 69 73 20 73 65 74 20 74 6f 20 4e 55  key is set to NU
14e50 4c 4c 2e 20 20 43 41 53 43 41 44 45 20 6d 65 61  LL.  CASCADE mea
14e60 6e 73 20 74 68 61 74 20 61 20 44 45 4c 45 54 45  ns that a DELETE
14e70 20 6f 72 20 55 50 44 41 54 45 20 6f 66 20 74 68   or UPDATE of th
14e80 65 0a 2a 2a 20 72 65 66 65 72 65 6e 63 65 64 20  e.** referenced 
14e90 74 61 62 6c 65 20 72 6f 77 20 69 73 20 70 72 6f  table row is pro
14ea0 70 61 67 61 74 65 64 20 69 6e 74 6f 20 74 68 65  pagated into the
14eb0 20 72 6f 77 20 74 68 61 74 20 68 6f 6c 64 73 20   row that holds 
14ec0 74 68 65 0a 2a 2a 20 66 6f 72 65 69 67 6e 20 6b  the.** foreign k
14ed0 65 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 66 6f  ey..**.** The fo
14ee0 6c 6c 6f 77 69 6e 67 20 73 79 6d 62 6f 6c 69 63  llowing symbolic
14ef0 20 76 61 6c 75 65 73 20 61 72 65 20 75 73 65 64   values are used
14f00 20 74 6f 20 72 65 63 6f 72 64 20 77 68 69 63 68   to record which
14f10 20 74 79 70 65 0a 2a 2a 20 6f 66 20 61 63 74 69   type.** of acti
14f20 6f 6e 20 74 6f 20 74 61 6b 65 2e 0a 2a 2f 0a 23  on to take..*/.#
14f30 64 65 66 69 6e 65 20 4f 45 5f 4e 6f 6e 65 20 20  define OE_None  
14f40 20 20 20 30 20 20 20 2f 2a 20 54 68 65 72 65 20     0   /* There 
14f50 69 73 20 6e 6f 20 63 6f 6e 73 74 72 61 69 6e 74  is no constraint
14f60 20 74 6f 20 63 68 65 63 6b 20 2a 2f 0a 23 64 65   to check */.#de
14f70 66 69 6e 65 20 4f 45 5f 52 6f 6c 6c 62 61 63 6b  fine OE_Rollback
14f80 20 31 20 20 20 2f 2a 20 46 61 69 6c 20 74 68 65   1   /* Fail the
14f90 20 6f 70 65 72 61 74 69 6f 6e 20 61 6e 64 20 72   operation and r
14fa0 6f 6c 6c 62 61 63 6b 20 74 68 65 20 74 72 61 6e  ollback the tran
14fb0 73 61 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69  saction */.#defi
14fc0 6e 65 20 4f 45 5f 41 62 6f 72 74 20 20 20 20 32  ne OE_Abort    2
14fd0 20 20 20 2f 2a 20 42 61 63 6b 20 6f 75 74 20 63     /* Back out c
14fe0 68 61 6e 67 65 73 20 62 75 74 20 64 6f 20 6e 6f  hanges but do no
14ff0 20 72 6f 6c 6c 62 61 63 6b 20 74 72 61 6e 73 61   rollback transa
15000 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65  ction */.#define
15010 20 4f 45 5f 46 61 69 6c 20 20 20 20 20 33 20 20   OE_Fail     3  
15020 20 2f 2a 20 53 74 6f 70 20 74 68 65 20 6f 70 65   /* Stop the ope
15030 72 61 74 69 6f 6e 20 62 75 74 20 6c 65 61 76 65  ration but leave
15040 20 61 6c 6c 20 70 72 69 6f 72 20 63 68 61 6e 67   all prior chang
15050 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45  es */.#define OE
15060 5f 49 67 6e 6f 72 65 20 20 20 34 20 20 20 2f 2a  _Ignore   4   /*
15070 20 49 67 6e 6f 72 65 20 74 68 65 20 65 72 72 6f   Ignore the erro
15080 72 2e 20 44 6f 20 6e 6f 74 20 64 6f 20 74 68 65  r. Do not do the
15090 20 49 4e 53 45 52 54 20 6f 72 20 55 50 44 41 54   INSERT or UPDAT
150a0 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f  E */.#define OE_
150b0 52 65 70 6c 61 63 65 20 20 35 20 20 20 2f 2a 20  Replace  5   /* 
150c0 44 65 6c 65 74 65 20 65 78 69 73 74 69 6e 67 20  Delete existing 
150d0 72 65 63 6f 72 64 2c 20 74 68 65 6e 20 64 6f 20  record, then do 
150e0 49 4e 53 45 52 54 20 6f 72 20 55 50 44 41 54 45  INSERT or UPDATE
150f0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 55   */.#define OE_U
15100 70 64 61 74 65 20 20 20 36 20 20 20 2f 2a 20 50  pdate   6   /* P
15110 72 6f 63 65 73 73 20 61 73 20 61 20 44 4f 20 55  rocess as a DO U
15120 50 44 41 54 45 20 69 6e 20 61 6e 20 75 70 73 65  PDATE in an upse
15130 72 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45  rt */.#define OE
15140 5f 52 65 73 74 72 69 63 74 20 37 20 20 20 2f 2a  _Restrict 7   /*
15150 20 4f 45 5f 41 62 6f 72 74 20 66 6f 72 20 49 4d   OE_Abort for IM
15160 4d 45 44 49 41 54 45 2c 20 4f 45 5f 52 6f 6c 6c  MEDIATE, OE_Roll
15170 62 61 63 6b 20 66 6f 72 20 44 45 46 45 52 52 45  back for DEFERRE
15180 44 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f  D */.#define OE_
15190 53 65 74 4e 75 6c 6c 20 20 38 20 20 20 2f 2a 20  SetNull  8   /* 
151a0 53 65 74 20 74 68 65 20 66 6f 72 65 69 67 6e 20  Set the foreign 
151b0 6b 65 79 20 76 61 6c 75 65 20 74 6f 20 4e 55 4c  key value to NUL
151c0 4c 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f  L */.#define OE_
151d0 53 65 74 44 66 6c 74 20 20 39 20 20 20 2f 2a 20  SetDflt  9   /* 
151e0 53 65 74 20 74 68 65 20 66 6f 72 65 69 67 6e 20  Set the foreign 
151f0 6b 65 79 20 76 61 6c 75 65 20 74 6f 20 69 74 73  key value to its
15200 20 64 65 66 61 75 6c 74 20 2a 2f 0a 23 64 65 66   default */.#def
15210 69 6e 65 20 4f 45 5f 43 61 73 63 61 64 65 20 20  ine OE_Cascade  
15220 31 30 20 20 2f 2a 20 43 61 73 63 61 64 65 20 74  10  /* Cascade t
15230 68 65 20 63 68 61 6e 67 65 73 20 2a 2f 0a 23 64  he changes */.#d
15240 65 66 69 6e 65 20 4f 45 5f 44 65 66 61 75 6c 74  efine OE_Default
15250 20 20 31 31 20 20 2f 2a 20 44 6f 20 77 68 61 74    11  /* Do what
15260 65 76 65 72 20 74 68 65 20 64 65 66 61 75 6c 74  ever the default
15270 20 61 63 74 69 6f 6e 20 69 73 20 2a 2f 0a 0a 0a   action is */...
15280 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63  /*.** An instanc
15290 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69  e of the followi
152a0 6e 67 20 73 74 72 75 63 74 75 72 65 20 69 73 20  ng structure is 
152b0 70 61 73 73 65 64 20 61 73 20 74 68 65 20 66 69  passed as the fi
152c0 72 73 74 0a 2a 2a 20 61 72 67 75 6d 65 6e 74 20  rst.** argument 
152d0 74 6f 20 73 71 6c 69 74 65 33 56 64 62 65 4b 65  to sqlite3VdbeKe
152e0 79 43 6f 6d 70 61 72 65 20 61 6e 64 20 69 73 20  yCompare and is 
152f0 75 73 65 64 20 74 6f 20 63 6f 6e 74 72 6f 6c 20  used to control 
15300 74 68 65 0a 2a 2a 20 63 6f 6d 70 61 72 69 73 6f  the.** compariso
15310 6e 20 6f 66 20 74 68 65 20 74 77 6f 20 69 6e 64  n of the two ind
15320 65 78 20 6b 65 79 73 2e 0a 2a 2a 0a 2a 2a 20 4e  ex keys..**.** N
15330 6f 74 65 20 74 68 61 74 20 61 53 6f 72 74 4f 72  ote that aSortOr
15340 64 65 72 5b 5d 20 61 6e 64 20 61 43 6f 6c 6c 5b  der[] and aColl[
15350 5d 20 68 61 76 65 20 6e 46 69 65 6c 64 2b 31 20  ] have nField+1 
15360 73 6c 6f 74 73 2e 20 20 54 68 65 72 65 0a 2a 2a  slots.  There.**
15370 20 61 72 65 20 6e 46 69 65 6c 64 20 73 6c 6f 74   are nField slot
15380 73 20 66 6f 72 20 74 68 65 20 63 6f 6c 75 6d 6e  s for the column
15390 73 20 6f 66 20 61 6e 20 69 6e 64 65 78 20 74 68  s of an index th
153a0 65 6e 20 6f 6e 65 20 65 78 74 72 61 20 73 6c 6f  en one extra slo
153b0 74 0a 2a 2a 20 66 6f 72 20 74 68 65 20 72 6f 77  t.** for the row
153c0 69 64 20 61 74 20 74 68 65 20 65 6e 64 2e 0a 2a  id at the end..*
153d0 2f 0a 73 74 72 75 63 74 20 4b 65 79 49 6e 66 6f  /.struct KeyInfo
153e0 20 7b 0a 20 20 75 33 32 20 6e 52 65 66 3b 20 20   {.  u32 nRef;  
153f0 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
15400 65 72 20 6f 66 20 72 65 66 65 72 65 6e 63 65 73  er of references
15410 20 74 6f 20 74 68 69 73 20 4b 65 79 49 6e 66 6f   to this KeyInfo
15420 20 6f 62 6a 65 63 74 20 2a 2f 0a 20 20 75 38 20   object */.  u8 
15430 65 6e 63 3b 20 20 20 20 20 20 20 20 20 20 20 20  enc;            
15440 20 2f 2a 20 54 65 78 74 20 65 6e 63 6f 64 69 6e   /* Text encodin
15450 67 20 2d 20 6f 6e 65 20 6f 66 20 74 68 65 20 53  g - one of the S
15460 51 4c 49 54 45 5f 55 54 46 2a 20 76 61 6c 75 65  QLITE_UTF* value
15470 73 20 2a 2f 0a 20 20 75 31 36 20 6e 4b 65 79 46  s */.  u16 nKeyF
15480 69 65 6c 64 3b 20 20 20 20 20 20 2f 2a 20 4e 75  ield;      /* Nu
15490 6d 62 65 72 20 6f 66 20 6b 65 79 20 63 6f 6c 75  mber of key colu
154a0 6d 6e 73 20 69 6e 20 74 68 65 20 69 6e 64 65 78  mns in the index
154b0 20 2a 2f 0a 20 20 75 31 36 20 6e 41 6c 6c 46 69   */.  u16 nAllFi
154c0 65 6c 64 3b 20 20 20 20 20 20 2f 2a 20 54 6f 74  eld;      /* Tot
154d0 61 6c 20 63 6f 6c 75 6d 6e 73 2c 20 69 6e 63 6c  al columns, incl
154e0 75 64 69 6e 67 20 6b 65 79 20 70 6c 75 73 20 6f  uding key plus o
154f0 74 68 65 72 73 20 2a 2f 0a 20 20 73 71 6c 69 74  thers */.  sqlit
15500 65 33 20 2a 64 62 3b 20 20 20 20 20 20 20 20 2f  e3 *db;        /
15510 2a 20 54 68 65 20 64 61 74 61 62 61 73 65 20 63  * The database c
15520 6f 6e 6e 65 63 74 69 6f 6e 20 2a 2f 0a 20 20 75  onnection */.  u
15530 38 20 2a 61 53 6f 72 74 4f 72 64 65 72 3b 20 20  8 *aSortOrder;  
15540 20 20 20 2f 2a 20 53 6f 72 74 20 6f 72 64 65 72     /* Sort order
15550 20 66 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e   for each column
15560 2e 20 2a 2f 0a 20 20 43 6f 6c 6c 53 65 71 20 2a  . */.  CollSeq *
15570 61 43 6f 6c 6c 5b 31 5d 3b 20 20 2f 2a 20 43 6f  aColl[1];  /* Co
15580 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65  llating sequence
15590 20 66 6f 72 20 65 61 63 68 20 74 65 72 6d 20 6f   for each term o
155a0 66 20 74 68 65 20 6b 65 79 20 2a 2f 0a 7d 3b 0a  f the key */.};.
155b0 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 6f 62 6a 65  ./*.** This obje
155c0 63 74 20 68 6f 6c 64 73 20 61 20 72 65 63 6f 72  ct holds a recor
155d0 64 20 77 68 69 63 68 20 68 61 73 20 62 65 65 6e  d which has been
155e0 20 70 61 72 73 65 64 20 6f 75 74 20 69 6e 74 6f   parsed out into
155f0 20 69 6e 64 69 76 69 64 75 61 6c 0a 2a 2a 20 66   individual.** f
15600 69 65 6c 64 73 2c 20 66 6f 72 20 74 68 65 20 70  ields, for the p
15610 75 72 70 6f 73 65 73 20 6f 66 20 64 6f 69 6e 67  urposes of doing
15620 20 61 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 0a 2a   a comparison..*
15630 2a 0a 2a 2a 20 41 20 72 65 63 6f 72 64 20 69 73  *.** A record is
15640 20 61 6e 20 6f 62 6a 65 63 74 20 74 68 61 74 20   an object that 
15650 63 6f 6e 74 61 69 6e 73 20 6f 6e 65 20 6f 72 20  contains one or 
15660 6d 6f 72 65 20 66 69 65 6c 64 73 20 6f 66 20 64  more fields of d
15670 61 74 61 2e 0a 2a 2a 20 52 65 63 6f 72 64 73 20  ata..** Records 
15680 61 72 65 20 75 73 65 64 20 74 6f 20 73 74 6f 72  are used to stor
15690 65 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66  e the content of
156a0 20 61 20 74 61 62 6c 65 20 72 6f 77 20 61 6e 64   a table row and
156b0 20 74 6f 20 73 74 6f 72 65 0a 2a 2a 20 74 68 65   to store.** the
156c0 20 6b 65 79 20 6f 66 20 61 6e 20 69 6e 64 65 78   key of an index
156d0 2e 20 20 41 20 62 6c 6f 62 20 65 6e 63 6f 64 69  .  A blob encodi
156e0 6e 67 20 6f 66 20 61 20 72 65 63 6f 72 64 20 69  ng of a record i
156f0 73 20 63 72 65 61 74 65 64 20 62 79 0a 2a 2a 20  s created by.** 
15700 74 68 65 20 4f 50 5f 4d 61 6b 65 52 65 63 6f 72  the OP_MakeRecor
15710 64 20 6f 70 63 6f 64 65 20 6f 66 20 74 68 65 20  d opcode of the 
15720 56 44 42 45 20 61 6e 64 20 69 73 20 64 69 73 61  VDBE and is disa
15730 73 73 65 6d 62 6c 65 64 20 62 79 20 74 68 65 0a  ssembled by the.
15740 2a 2a 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 70 63  ** OP_Column opc
15750 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 41 6e 20 69 6e  ode..**.** An in
15760 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73 20 6f  stance of this o
15770 62 6a 65 63 74 20 73 65 72 76 65 73 20 61 73 20  bject serves as 
15780 61 20 22 6b 65 79 22 20 66 6f 72 20 64 6f 69 6e  a "key" for doin
15790 67 20 61 20 73 65 61 72 63 68 20 6f 6e 0a 2a 2a  g a search on.**
157a0 20 61 6e 20 69 6e 64 65 78 20 62 2b 74 72 65 65   an index b+tree
157b0 2e 20 54 68 65 20 67 6f 61 6c 20 6f 66 20 74 68  . The goal of th
157c0 65 20 73 65 61 72 63 68 20 69 73 20 74 6f 20 66  e search is to f
157d0 69 6e 64 20 74 68 65 20 65 6e 74 72 79 20 74 68  ind the entry th
157e0 61 74 0a 2a 2a 20 69 73 20 63 6c 6f 73 65 64 20  at.** is closed 
157f0 74 6f 20 74 68 65 20 6b 65 79 20 64 65 73 63 72  to the key descr
15800 69 62 65 64 20 62 79 20 74 68 69 73 20 6f 62 6a  ibed by this obj
15810 65 63 74 2e 20 20 54 68 69 73 20 6f 62 6a 65 63  ect.  This objec
15820 74 20 6d 69 67 68 74 20 68 6f 6c 64 0a 2a 2a 20  t might hold.** 
15830 6a 75 73 74 20 61 20 70 72 65 66 69 78 20 6f 66  just a prefix of
15840 20 74 68 65 20 6b 65 79 2e 20 20 54 68 65 20 6e   the key.  The n
15850 75 6d 62 65 72 20 6f 66 20 66 69 65 6c 64 73 20  umber of fields 
15860 69 73 20 67 69 76 65 6e 20 62 79 0a 2a 2a 20 70  is given by.** p
15870 4b 65 79 49 6e 66 6f 2d 3e 6e 46 69 65 6c 64 2e  KeyInfo->nField.
15880 0a 2a 2a 0a 2a 2a 20 54 68 65 20 72 31 20 61 6e  .**.** The r1 an
15890 64 20 72 32 20 66 69 65 6c 64 73 20 61 72 65 20  d r2 fields are 
158a0 74 68 65 20 76 61 6c 75 65 73 20 74 6f 20 72 65  the values to re
158b0 74 75 72 6e 20 69 66 20 74 68 69 73 20 6b 65 79  turn if this key
158c0 20 69 73 20 6c 65 73 73 20 74 68 61 6e 0a 2a 2a   is less than.**
158d0 20 6f 72 20 67 72 65 61 74 65 72 20 74 68 61 6e   or greater than
158e0 20 61 20 6b 65 79 20 69 6e 20 74 68 65 20 62 74   a key in the bt
158f0 72 65 65 2c 20 72 65 73 70 65 63 74 69 76 65 6c  ree, respectivel
15900 79 2e 20 20 54 68 65 73 65 20 61 72 65 20 6e 6f  y.  These are no
15910 72 6d 61 6c 6c 79 0a 2a 2a 20 2d 31 20 61 6e 64  rmally.** -1 and
15920 20 2b 31 20 72 65 73 70 65 63 74 69 76 65 6c 79   +1 respectively
15930 2c 20 62 75 74 20 6d 69 67 68 74 20 62 65 20 69  , but might be i
15940 6e 76 65 72 74 65 64 20 74 6f 20 2b 31 20 61 6e  nverted to +1 an
15950 64 20 2d 31 20 69 66 20 74 68 65 20 62 2d 74 72  d -1 if the b-tr
15960 65 65 0a 2a 2a 20 69 73 20 69 6e 20 44 45 53 43  ee.** is in DESC
15970 20 6f 72 64 65 72 2e 0a 2a 2a 0a 2a 2a 20 54 68   order..**.** Th
15980 65 20 6b 65 79 20 63 6f 6d 70 61 72 69 73 6f 6e  e key comparison
15990 20 66 75 6e 63 74 69 6f 6e 73 20 61 63 74 75 61   functions actua
159a0 6c 6c 79 20 72 65 74 75 72 6e 20 64 65 66 61 75  lly return defau
159b0 6c 74 5f 72 63 20 77 68 65 6e 20 74 68 65 79 20  lt_rc when they 
159c0 66 69 6e 64 0a 2a 2a 20 61 6e 20 65 71 75 61 6c  find.** an equal
159d0 73 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 20 64  s comparison.  d
159e0 65 66 61 75 6c 74 5f 72 63 20 63 61 6e 20 62 65  efault_rc can be
159f0 20 2d 31 2c 20 30 2c 20 6f 72 20 2b 31 2e 20 20   -1, 0, or +1.  
15a00 49 66 20 74 68 65 72 65 20 61 72 65 0a 2a 2a 20  If there are.** 
15a10 6d 75 6c 74 69 70 6c 65 20 65 6e 74 72 69 65 73  multiple entries
15a20 20 69 6e 20 74 68 65 20 62 2d 74 72 65 65 20 77   in the b-tree w
15a30 69 74 68 20 74 68 65 20 73 61 6d 65 20 6b 65 79  ith the same key
15a40 20 28 77 68 65 6e 20 6f 6e 6c 79 20 6c 6f 6f 6b   (when only look
15a50 69 6e 67 0a 2a 2a 20 61 74 20 74 68 65 20 66 69  ing.** at the fi
15a60 72 73 74 20 70 4b 65 79 49 6e 66 6f 2d 3e 6e 46  rst pKeyInfo->nF
15a70 69 65 6c 64 73 2c 29 20 74 68 65 6e 20 64 65 66  ields,) then def
15a80 61 75 6c 74 5f 72 63 20 63 61 6e 20 62 65 20 73  ault_rc can be s
15a90 65 74 20 74 6f 20 2d 31 20 74 6f 0a 2a 2a 20 63  et to -1 to.** c
15aa0 61 75 73 65 20 74 68 65 20 73 65 61 72 63 68 20  ause the search 
15ab0 74 6f 20 66 69 6e 64 20 74 68 65 20 6c 61 73 74  to find the last
15ac0 20 6d 61 74 63 68 2c 20 6f 72 20 2b 31 20 74 6f   match, or +1 to
15ad0 20 63 61 75 73 65 20 74 68 65 20 73 65 61 72 63   cause the searc
15ae0 68 20 74 6f 0a 2a 2a 20 66 69 6e 64 20 74 68 65  h to.** find the
15af0 20 66 69 72 73 74 20 6d 61 74 63 68 2e 0a 2a 2a   first match..**
15b00 0a 2a 2a 20 54 68 65 20 6b 65 79 20 63 6f 6d 70  .** The key comp
15b10 61 72 69 73 6f 6e 20 66 75 6e 63 74 69 6f 6e 73  arison functions
15b20 20 77 69 6c 6c 20 73 65 74 20 65 71 53 65 65 6e   will set eqSeen
15b30 20 74 6f 20 74 72 75 65 20 69 66 20 74 68 65 79   to true if they
15b40 20 65 76 65 72 0a 2a 2a 20 67 65 74 20 61 6e 64   ever.** get and
15b50 20 65 71 75 61 6c 20 72 65 73 75 6c 74 73 20 77   equal results w
15b60 68 65 6e 20 63 6f 6d 70 61 72 69 6e 67 20 74 68  hen comparing th
15b70 69 73 20 73 74 72 75 63 74 75 72 65 20 74 6f 20  is structure to 
15b80 61 20 62 2d 74 72 65 65 20 72 65 63 6f 72 64 2e  a b-tree record.
15b90 0a 2a 2a 20 57 68 65 6e 20 64 65 66 61 75 6c 74  .** When default
15ba0 5f 72 63 21 3d 30 2c 20 74 68 65 20 73 65 61 72  _rc!=0, the sear
15bb0 63 68 20 6d 69 67 68 74 20 65 6e 64 20 75 70 20  ch might end up 
15bc0 6f 6e 20 74 68 65 20 72 65 63 6f 72 64 20 69 6d  on the record im
15bd0 6d 65 64 69 61 74 65 6c 79 0a 2a 2a 20 62 65 66  mediately.** bef
15be0 6f 72 65 20 74 68 65 20 66 69 72 73 74 20 6d 61  ore the first ma
15bf0 74 63 68 20 6f 72 20 69 6d 6d 65 64 69 61 74 65  tch or immediate
15c00 6c 79 20 61 66 74 65 72 20 74 68 65 20 6c 61 73  ly after the las
15c10 74 20 6d 61 74 63 68 2e 20 20 54 68 65 0a 2a 2a  t match.  The.**
15c20 20 65 71 53 65 65 6e 20 66 69 65 6c 64 20 77 69   eqSeen field wi
15c30 6c 6c 20 69 6e 64 69 63 61 74 65 20 77 68 65 74  ll indicate whet
15c40 68 65 72 20 6f 72 20 6e 6f 74 20 61 6e 20 65 78  her or not an ex
15c50 61 63 74 20 6d 61 74 63 68 20 65 78 69 73 74 73  act match exists
15c60 20 69 6e 20 74 68 65 0a 2a 2a 20 62 2d 74 72 65   in the.** b-tre
15c70 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 55 6e 70  e..*/.struct Unp
15c80 61 63 6b 65 64 52 65 63 6f 72 64 20 7b 0a 20 20  ackedRecord {.  
15c90 4b 65 79 49 6e 66 6f 20 2a 70 4b 65 79 49 6e 66  KeyInfo *pKeyInf
15ca0 6f 3b 20 20 2f 2a 20 43 6f 6c 6c 61 74 69 6f 6e  o;  /* Collation
15cb0 20 61 6e 64 20 73 6f 72 74 2d 6f 72 64 65 72 20   and sort-order 
15cc0 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 2a 2f 0a 20  information */. 
15cd0 20 4d 65 6d 20 2a 61 4d 65 6d 3b 20 20 20 20 20   Mem *aMem;     
15ce0 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 73 20 2a       /* Values *
15cf0 2f 0a 20 20 75 31 36 20 6e 46 69 65 6c 64 3b 20  /.  u16 nField; 
15d00 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
15d10 72 20 6f 66 20 65 6e 74 72 69 65 73 20 69 6e 20  r of entries in 
15d20 61 70 4d 65 6d 5b 5d 20 2a 2f 0a 20 20 69 38 20  apMem[] */.  i8 
15d30 64 65 66 61 75 6c 74 5f 72 63 3b 20 20 20 20 20  default_rc;     
15d40 20 2f 2a 20 43 6f 6d 70 61 72 69 73 6f 6e 20 72   /* Comparison r
15d50 65 73 75 6c 74 20 69 66 20 6b 65 79 73 20 61 72  esult if keys ar
15d60 65 20 65 71 75 61 6c 20 2a 2f 0a 20 20 75 38 20  e equal */.  u8 
15d70 65 72 72 43 6f 64 65 3b 20 20 20 20 20 20 20 20  errCode;        
15d80 20 2f 2a 20 45 72 72 6f 72 20 64 65 74 65 63 74   /* Error detect
15d90 65 64 20 62 79 20 78 52 65 63 6f 72 64 43 6f 6d  ed by xRecordCom
15da0 70 61 72 65 20 28 43 4f 52 52 55 50 54 20 6f 72  pare (CORRUPT or
15db0 20 4e 4f 4d 45 4d 29 20 2a 2f 0a 20 20 69 38 20   NOMEM) */.  i8 
15dc0 72 31 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  r1;             
15dd0 20 2f 2a 20 56 61 6c 75 65 20 74 6f 20 72 65 74   /* Value to ret
15de0 75 72 6e 20 69 66 20 28 6c 68 73 20 3c 20 72 68  urn if (lhs < rh
15df0 73 29 20 2a 2f 0a 20 20 69 38 20 72 32 3b 20 20  s) */.  i8 r2;  
15e00 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56              /* V
15e10 61 6c 75 65 20 74 6f 20 72 65 74 75 72 6e 20 69  alue to return i
15e20 66 20 28 6c 68 73 20 3e 20 72 68 73 29 20 2a 2f  f (lhs > rhs) */
15e30 0a 20 20 75 38 20 65 71 53 65 65 6e 3b 20 20 20  .  u8 eqSeen;   
15e40 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69         /* True i
15e50 66 20 61 6e 20 65 71 75 61 6c 69 74 79 20 63 6f  f an equality co
15e60 6d 70 61 72 69 73 6f 6e 20 68 61 73 20 62 65 65  mparison has bee
15e70 6e 20 73 65 65 6e 20 2a 2f 0a 7d 3b 0a 0a 0a 2f  n seen */.};.../
15e80 2a 0a 2a 2a 20 45 61 63 68 20 53 51 4c 20 69 6e  *.** Each SQL in
15e90 64 65 78 20 69 73 20 72 65 70 72 65 73 65 6e 74  dex is represent
15ea0 65 64 20 69 6e 20 6d 65 6d 6f 72 79 20 62 79 20  ed in memory by 
15eb0 61 6e 0a 2a 2a 20 69 6e 73 74 61 6e 63 65 20 6f  an.** instance o
15ec0 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  f the following 
15ed0 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a 0a 2a 2a  structure..**.**
15ee0 20 54 68 65 20 63 6f 6c 75 6d 6e 73 20 6f 66 20   The columns of 
15ef0 74 68 65 20 74 61 62 6c 65 20 74 68 61 74 20 61  the table that a
15f00 72 65 20 74 6f 20 62 65 20 69 6e 64 65 78 65 64  re to be indexed
15f10 20 61 72 65 20 64 65 73 63 72 69 62 65 64 0a 2a   are described.*
15f20 2a 20 62 79 20 74 68 65 20 61 69 43 6f 6c 75 6d  * by the aiColum
15f30 6e 5b 5d 20 66 69 65 6c 64 20 6f 66 20 74 68 69  n[] field of thi
15f40 73 20 73 74 72 75 63 74 75 72 65 2e 20 20 46 6f  s structure.  Fo
15f50 72 20 65 78 61 6d 70 6c 65 2c 20 73 75 70 70 6f  r example, suppo
15f60 73 65 0a 2a 2a 20 77 65 20 68 61 76 65 20 74 68  se.** we have th
15f70 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 61 62 6c  e following tabl
15f80 65 20 61 6e 64 20 69 6e 64 65 78 3a 0a 2a 2a 0a  e and index:.**.
15f90 2a 2a 20 20 20 20 20 43 52 45 41 54 45 20 54 41  **     CREATE TA
15fa0 42 4c 45 20 45 78 31 28 63 31 20 69 6e 74 2c 20  BLE Ex1(c1 int, 
15fb0 63 32 20 69 6e 74 2c 20 63 33 20 74 65 78 74 29  c2 int, c3 text)
15fc0 3b 0a 2a 2a 20 20 20 20 20 43 52 45 41 54 45 20  ;.**     CREATE 
15fd0 49 4e 44 45 58 20 45 78 32 20 4f 4e 20 45 78 31  INDEX Ex2 ON Ex1
15fe0 28 63 33 2c 63 31 29 3b 0a 2a 2a 0a 2a 2a 20 49  (c3,c1);.**.** I
15ff0 6e 20 74 68 65 20 54 61 62 6c 65 20 73 74 72 75  n the Table stru
16000 63 74 75 72 65 20 64 65 73 63 72 69 62 69 6e 67  cture describing
16010 20 45 78 31 2c 20 6e 43 6f 6c 3d 3d 33 20 62 65   Ex1, nCol==3 be
16020 63 61 75 73 65 20 74 68 65 72 65 20 61 72 65 0a  cause there are.
16030 2a 2a 20 74 68 72 65 65 20 63 6f 6c 75 6d 6e 73  ** three columns
16040 20 69 6e 20 74 68 65 20 74 61 62 6c 65 2e 20 20   in the table.  
16050 49 6e 20 74 68 65 20 49 6e 64 65 78 20 73 74 72  In the Index str
16060 75 63 74 75 72 65 20 64 65 73 63 72 69 62 69 6e  ucture describin
16070 67 0a 2a 2a 20 45 78 32 2c 20 6e 43 6f 6c 75 6d  g.** Ex2, nColum
16080 6e 3d 3d 32 20 73 69 6e 63 65 20 32 20 6f 66 20  n==2 since 2 of 
16090 74 68 65 20 33 20 63 6f 6c 75 6d 6e 73 20 6f 66  the 3 columns of
160a0 20 45 78 31 20 61 72 65 20 69 6e 64 65 78 65 64   Ex1 are indexed
160b0 2e 0a 2a 2a 20 54 68 65 20 76 61 6c 75 65 20 6f  ..** The value o
160c0 66 20 61 69 43 6f 6c 75 6d 6e 20 69 73 20 7b 32  f aiColumn is {2
160d0 2c 20 30 7d 2e 20 20 61 69 43 6f 6c 75 6d 6e 5b  , 0}.  aiColumn[
160e0 30 5d 3d 3d 32 20 62 65 63 61 75 73 65 20 74 68  0]==2 because th
160f0 65 0a 2a 2a 20 66 69 72 73 74 20 63 6f 6c 75 6d  e.** first colum
16100 6e 20 74 6f 20 62 65 20 69 6e 64 65 78 65 64 20  n to be indexed 
16110 28 63 33 29 20 68 61 73 20 61 6e 20 69 6e 64 65  (c3) has an inde
16120 78 20 6f 66 20 32 20 69 6e 20 45 78 31 2e 61 43  x of 2 in Ex1.aC
16130 6f 6c 5b 5d 2e 0a 2a 2a 20 54 68 65 20 73 65 63  ol[]..** The sec
16140 6f 6e 64 20 63 6f 6c 75 6d 6e 20 74 6f 20 62 65  ond column to be
16150 20 69 6e 64 65 78 65 64 20 28 63 31 29 20 68 61   indexed (c1) ha
16160 73 20 61 6e 20 69 6e 64 65 78 20 6f 66 20 30 20  s an index of 0 
16170 69 6e 0a 2a 2a 20 45 78 31 2e 61 43 6f 6c 5b 5d  in.** Ex1.aCol[]
16180 2c 20 68 65 6e 63 65 20 45 78 32 2e 61 69 43 6f  , hence Ex2.aiCo
16190 6c 75 6d 6e 5b 31 5d 3d 3d 30 2e 0a 2a 2a 0a 2a  lumn[1]==0..**.*
161a0 2a 20 54 68 65 20 49 6e 64 65 78 2e 6f 6e 45 72  * The Index.onEr
161b0 72 6f 72 20 66 69 65 6c 64 20 64 65 74 65 72 6d  ror field determ
161c0 69 6e 65 73 20 77 68 65 74 68 65 72 20 6f 72 20  ines whether or 
161d0 6e 6f 74 20 74 68 65 20 69 6e 64 65 78 65 64 20  not the indexed 
161e0 63 6f 6c 75 6d 6e 73 0a 2a 2a 20 6d 75 73 74 20  columns.** must 
161f0 62 65 20 75 6e 69 71 75 65 20 61 6e 64 20 77 68  be unique and wh
16200 61 74 20 74 6f 20 64 6f 20 69 66 20 74 68 65 79  at to do if they
16210 20 61 72 65 20 6e 6f 74 2e 20 20 57 68 65 6e 20   are not.  When 
16220 49 6e 64 65 78 2e 6f 6e 45 72 72 6f 72 3d 4f 45  Index.onError=OE
16230 5f 4e 6f 6e 65 2c 0a 2a 2a 20 69 74 20 6d 65 61  _None,.** it mea
16240 6e 73 20 74 68 69 73 20 69 73 20 6e 6f 74 20 61  ns this is not a
16250 20 75 6e 69 71 75 65 20 69 6e 64 65 78 2e 20 20   unique index.  
16260 4f 74 68 65 72 77 69 73 65 20 69 74 20 69 73 20  Otherwise it is 
16270 61 20 75 6e 69 71 75 65 20 69 6e 64 65 78 0a 2a  a unique index.*
16280 2a 20 61 6e 64 20 74 68 65 20 76 61 6c 75 65 20  * and the value 
16290 6f 66 20 49 6e 64 65 78 2e 6f 6e 45 72 72 6f 72  of Index.onError
162a0 20 69 6e 64 69 63 61 74 65 20 74 68 65 20 77 68   indicate the wh
162b0 69 63 68 20 63 6f 6e 66 6c 69 63 74 20 72 65 73  ich conflict res
162c0 6f 6c 75 74 69 6f 6e 0a 2a 2a 20 61 6c 67 6f 72  olution.** algor
162d0 69 74 68 6d 20 74 6f 20 65 6d 70 6c 6f 79 20 77  ithm to employ w
162e0 68 65 6e 65 76 65 72 20 61 6e 20 61 74 74 65 6d  henever an attem
162f0 70 74 20 69 73 20 6d 61 64 65 20 74 6f 20 69 6e  pt is made to in
16300 73 65 72 74 20 61 20 6e 6f 6e 2d 75 6e 69 71 75  sert a non-uniqu
16310 65 0a 2a 2a 20 65 6c 65 6d 65 6e 74 2e 0a 2a 2a  e.** element..**
16320 0a 2a 2a 20 57 68 69 6c 65 20 70 61 72 73 69 6e  .** While parsin
16330 67 20 61 20 43 52 45 41 54 45 20 54 41 42 4c 45  g a CREATE TABLE
16340 20 6f 72 20 43 52 45 41 54 45 20 49 4e 44 45 58   or CREATE INDEX
16350 20 73 74 61 74 65 6d 65 6e 74 20 69 6e 20 6f 72   statement in or
16360 64 65 72 20 74 6f 0a 2a 2a 20 67 65 6e 65 72 61  der to.** genera
16370 74 65 20 56 44 42 45 20 63 6f 64 65 20 28 61 73  te VDBE code (as
16380 20 6f 70 70 6f 73 65 64 20 74 6f 20 70 61 72 73   opposed to pars
16390 69 6e 67 20 6f 6e 65 20 72 65 61 64 20 66 72 6f  ing one read fro
163a0 6d 20 61 6e 20 73 71 6c 69 74 65 5f 6d 61 73 74  m an sqlite_mast
163b0 65 72 0a 2a 2a 20 74 61 62 6c 65 20 61 73 20 70  er.** table as p
163c0 61 72 74 20 6f 66 20 70 61 72 73 69 6e 67 20 61  art of parsing a
163d0 6e 20 65 78 69 73 74 69 6e 67 20 64 61 74 61 62  n existing datab
163e0 61 73 65 20 73 63 68 65 6d 61 29 2c 20 74 72 61  ase schema), tra
163f0 6e 73 69 65 6e 74 20 69 6e 73 74 61 6e 63 65 73  nsient instances
16400 0a 2a 2a 20 6f 66 20 74 68 69 73 20 73 74 72 75  .** of this stru
16410 63 74 75 72 65 20 6d 61 79 20 62 65 20 63 72 65  cture may be cre
16420 61 74 65 64 2e 20 49 6e 20 74 68 69 73 20 63 61  ated. In this ca
16430 73 65 20 74 68 65 20 49 6e 64 65 78 2e 74 6e 75  se the Index.tnu
16440 6d 20 76 61 72 69 61 62 6c 65 20 69 73 0a 2a 2a  m variable is.**
16450 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20 74   used to store t
16460 68 65 20 61 64 64 72 65 73 73 20 6f 66 20 61 20  he address of a 
16470 56 44 42 45 20 69 6e 73 74 72 75 63 74 69 6f 6e  VDBE instruction
16480 2c 20 6e 6f 74 20 61 20 64 61 74 61 62 61 73 65  , not a database
16490 20 70 61 67 65 0a 2a 2a 20 6e 75 6d 62 65 72 20   page.** number 
164a0 28 69 74 20 63 61 6e 6e 6f 74 20 2d 20 74 68 65  (it cannot - the
164b0 20 64 61 74 61 62 61 73 65 20 70 61 67 65 20 69   database page i
164c0 73 20 6e 6f 74 20 61 6c 6c 6f 63 61 74 65 64 20  s not allocated 
164d0 75 6e 74 69 6c 20 74 68 65 20 56 44 42 45 0a 2a  until the VDBE.*
164e0 2a 20 70 72 6f 67 72 61 6d 20 69 73 20 65 78 65  * program is exe
164f0 63 75 74 65 64 29 2e 20 53 65 65 20 63 6f 6e 76  cuted). See conv
16500 65 72 74 54 6f 57 69 74 68 6f 75 74 52 6f 77 69  ertToWithoutRowi
16510 64 54 61 62 6c 65 28 29 20 66 6f 72 20 64 65 74  dTable() for det
16520 61 69 6c 73 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  ails..*/.struct 
16530 49 6e 64 65 78 20 7b 0a 20 20 63 68 61 72 20 2a  Index {.  char *
16540 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20  zName;          
16550 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68     /* Name of th
16560 69 73 20 69 6e 64 65 78 20 2a 2f 0a 20 20 69 31  is index */.  i1
16570 36 20 2a 61 69 43 6f 6c 75 6d 6e 3b 20 20 20 20  6 *aiColumn;    
16580 20 20 20 20 20 20 20 2f 2a 20 57 68 69 63 68 20         /* Which 
16590 63 6f 6c 75 6d 6e 73 20 61 72 65 20 75 73 65 64  columns are used
165a0 20 62 79 20 74 68 69 73 20 69 6e 64 65 78 2e 20   by this index. 
165b0 20 31 73 74 20 69 73 20 30 20 2a 2f 0a 20 20 4c   1st is 0 */.  L
165c0 6f 67 45 73 74 20 2a 61 69 52 6f 77 4c 6f 67 45  ogEst *aiRowLogE
165d0 73 74 3b 20 20 20 20 20 2f 2a 20 46 72 6f 6d 20  st;     /* From 
165e0 41 4e 41 4c 59 5a 45 3a 20 45 73 74 2e 20 72 6f  ANALYZE: Est. ro
165f0 77 73 20 73 65 6c 65 63 74 65 64 20 62 79 20 65  ws selected by e
16600 61 63 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20  ach column */.  
16610 54 61 62 6c 65 20 2a 70 54 61 62 6c 65 3b 20 20  Table *pTable;  
16620 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
16630 53 51 4c 20 74 61 62 6c 65 20 62 65 69 6e 67 20  SQL table being 
16640 69 6e 64 65 78 65 64 20 2a 2f 0a 20 20 63 68 61  indexed */.  cha
16650 72 20 2a 7a 43 6f 6c 41 66 66 3b 20 20 20 20 20  r *zColAff;     
16660 20 20 20 20 20 20 2f 2a 20 53 74 72 69 6e 67 20        /* String 
16670 64 65 66 69 6e 69 6e 67 20 74 68 65 20 61 66 66  defining the aff
16680 69 6e 69 74 79 20 6f 66 20 65 61 63 68 20 63 6f  inity of each co
16690 6c 75 6d 6e 20 2a 2f 0a 20 20 49 6e 64 65 78 20  lumn */.  Index 
166a0 2a 70 4e 65 78 74 3b 20 20 20 20 20 20 20 20 20  *pNext;         
166b0 20 20 20 2f 2a 20 54 68 65 20 6e 65 78 74 20 69     /* The next i
166c0 6e 64 65 78 20 61 73 73 6f 63 69 61 74 65 64 20  ndex associated 
166d0 77 69 74 68 20 74 68 65 20 73 61 6d 65 20 74 61  with the same ta
166e0 62 6c 65 20 2a 2f 0a 20 20 53 63 68 65 6d 61 20  ble */.  Schema 
166f0 2a 70 53 63 68 65 6d 61 3b 20 20 20 20 20 20 20  *pSchema;       
16700 20 20 2f 2a 20 53 63 68 65 6d 61 20 63 6f 6e 74    /* Schema cont
16710 61 69 6e 69 6e 67 20 74 68 69 73 20 69 6e 64 65  aining this inde
16720 78 20 2a 2f 0a 20 20 75 38 20 2a 61 53 6f 72 74  x */.  u8 *aSort
16730 4f 72 64 65 72 3b 20 20 20 20 20 20 20 20 20 20  Order;          
16740 2f 2a 20 66 6f 72 20 65 61 63 68 20 63 6f 6c 75  /* for each colu
16750 6d 6e 3a 20 54 72 75 65 3d 3d 44 45 53 43 2c 20  mn: True==DESC, 
16760 46 61 6c 73 65 3d 3d 41 53 43 20 2a 2f 0a 20 20  False==ASC */.  
16770 63 6f 6e 73 74 20 63 68 61 72 20 2a 2a 61 7a 43  const char **azC
16780 6f 6c 6c 3b 20 20 20 20 20 2f 2a 20 41 72 72 61  oll;     /* Arra
16790 79 20 6f 66 20 63 6f 6c 6c 61 74 69 6f 6e 20 73  y of collation s
167a0 65 71 75 65 6e 63 65 20 6e 61 6d 65 73 20 66 6f  equence names fo
167b0 72 20 69 6e 64 65 78 20 2a 2f 0a 20 20 45 78 70  r index */.  Exp
167c0 72 20 2a 70 50 61 72 74 49 64 78 57 68 65 72 65  r *pPartIdxWhere
167d0 3b 20 20 20 20 20 2f 2a 20 57 48 45 52 45 20 63  ;     /* WHERE c
167e0 6c 61 75 73 65 20 66 6f 72 20 70 61 72 74 69 61  lause for partia
167f0 6c 20 69 6e 64 69 63 65 73 20 2a 2f 0a 20 20 45  l indices */.  E
16800 78 70 72 4c 69 73 74 20 2a 61 43 6f 6c 45 78 70  xprList *aColExp
16810 72 3b 20 20 20 20 20 20 2f 2a 20 43 6f 6c 75 6d  r;      /* Colum
16820 6e 20 65 78 70 72 65 73 73 69 6f 6e 73 20 2a 2f  n expressions */
16830 0a 20 20 69 6e 74 20 74 6e 75 6d 3b 20 20 20 20  .  int tnum;    
16840 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44              /* D
16850 42 20 50 61 67 65 20 63 6f 6e 74 61 69 6e 69 6e  B Page containin
16860 67 20 72 6f 6f 74 20 6f 66 20 74 68 69 73 20 69  g root of this i
16870 6e 64 65 78 20 2a 2f 0a 20 20 4c 6f 67 45 73 74  ndex */.  LogEst
16880 20 73 7a 49 64 78 52 6f 77 3b 20 20 20 20 20 20   szIdxRow;      
16890 20 20 20 2f 2a 20 45 73 74 69 6d 61 74 65 64 20     /* Estimated 
168a0 61 76 65 72 61 67 65 20 72 6f 77 20 73 69 7a 65  average row size
168b0 20 69 6e 20 62 79 74 65 73 20 2a 2f 0a 20 20 75   in bytes */.  u
168c0 31 36 20 6e 4b 65 79 43 6f 6c 3b 20 20 20 20 20  16 nKeyCol;     
168d0 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
168e0 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 66 6f 72  r of columns for
168f0 6d 69 6e 67 20 74 68 65 20 6b 65 79 20 2a 2f 0a  ming the key */.
16900 20 20 75 31 36 20 6e 43 6f 6c 75 6d 6e 3b 20 20    u16 nColumn;  
16910 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
16920 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20  mber of columns 
16930 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20 69 6e  stored in the in
16940 64 65 78 20 2a 2f 0a 20 20 75 38 20 6f 6e 45 72  dex */.  u8 onEr
16950 72 6f 72 3b 20 20 20 20 20 20 20 20 20 20 20 20  ror;            
16960 20 20 2f 2a 20 4f 45 5f 41 62 6f 72 74 2c 20 4f    /* OE_Abort, O
16970 45 5f 49 67 6e 6f 72 65 2c 20 4f 45 5f 52 65 70  E_Ignore, OE_Rep
16980 6c 61 63 65 2c 20 6f 72 20 4f 45 5f 4e 6f 6e 65  lace, or OE_None
16990 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 69   */.  unsigned i
169a0 64 78 54 79 70 65 3a 32 3b 20 20 20 20 20 20 2f  dxType:2;      /
169b0 2a 20 30 3a 4e 6f 72 6d 61 6c 20 31 3a 55 4e 49  * 0:Normal 1:UNI
169c0 51 55 45 2c 20 32 3a 50 52 49 4d 41 52 59 20 4b  QUE, 2:PRIMARY K
169d0 45 59 2c 20 33 3a 49 50 4b 20 2a 2f 0a 20 20 75  EY, 3:IPK */.  u
169e0 6e 73 69 67 6e 65 64 20 62 55 6e 6f 72 64 65 72  nsigned bUnorder
169f0 65 64 3a 31 3b 20 20 20 2f 2a 20 55 73 65 20 74  ed:1;   /* Use t
16a00 68 69 73 20 69 6e 64 65 78 20 66 6f 72 20 3d 3d  his index for ==
16a10 20 6f 72 20 49 4e 20 71 75 65 72 69 65 73 20 6f   or IN queries o
16a20 6e 6c 79 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65  nly */.  unsigne
16a30 64 20 75 6e 69 71 4e 6f 74 4e 75 6c 6c 3a 31 3b  d uniqNotNull:1;
16a40 20 20 2f 2a 20 54 72 75 65 20 69 66 20 55 4e 49    /* True if UNI
16a50 51 55 45 20 61 6e 64 20 4e 4f 54 20 4e 55 4c 4c  QUE and NOT NULL
16a60 20 66 6f 72 20 61 6c 6c 20 63 6f 6c 75 6d 6e 73   for all columns
16a70 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 69   */.  unsigned i
16a80 73 52 65 73 69 7a 65 64 3a 31 3b 20 20 20 20 2f  sResized:1;    /
16a90 2a 20 54 72 75 65 20 69 66 20 72 65 73 69 7a 65  * True if resize
16aa0 49 6e 64 65 78 4f 62 6a 65 63 74 28 29 20 68 61  IndexObject() ha
16ab0 73 20 62 65 65 6e 20 63 61 6c 6c 65 64 20 2a 2f  s been called */
16ac0 0a 20 20 75 6e 73 69 67 6e 65 64 20 69 73 43 6f  .  unsigned isCo
16ad0 76 65 72 69 6e 67 3a 31 3b 20 20 20 2f 2a 20 54  vering:1;   /* T
16ae0 72 75 65 20 69 66 20 74 68 69 73 20 69 73 20 61  rue if this is a
16af0 20 63 6f 76 65 72 69 6e 67 20 69 6e 64 65 78 20   covering index 
16b00 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 6e 6f  */.  unsigned no
16b10 53 6b 69 70 53 63 61 6e 3a 31 3b 20 20 20 2f 2a  SkipScan:1;   /*
16b20 20 44 6f 20 6e 6f 74 20 74 72 79 20 74 6f 20 75   Do not try to u
16b30 73 65 20 73 6b 69 70 2d 73 63 61 6e 20 69 66 20  se skip-scan if 
16b40 74 72 75 65 20 2a 2f 0a 20 20 75 6e 73 69 67 6e  true */.  unsign
16b50 65 64 20 68 61 73 53 74 61 74 31 3a 31 3b 20 20  ed hasStat1:1;  
16b60 20 20 20 2f 2a 20 61 69 52 6f 77 4c 6f 67 45 73     /* aiRowLogEs
16b70 74 20 76 61 6c 75 65 73 20 63 6f 6d 65 20 66 72  t values come fr
16b80 6f 6d 20 73 71 6c 69 74 65 5f 73 74 61 74 31 20  om sqlite_stat1 
16b90 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 62 4e  */.  unsigned bN
16ba0 6f 51 75 65 72 79 3a 31 3b 20 20 20 20 20 2f 2a  oQuery:1;     /*
16bb0 20 44 6f 20 6e 6f 74 20 75 73 65 20 74 68 69 73   Do not use this
16bc0 20 69 6e 64 65 78 20 74 6f 20 6f 70 74 69 6d 69   index to optimi
16bd0 7a 65 20 71 75 65 72 69 65 73 20 2a 2f 0a 20 20  ze queries */.  
16be0 75 6e 73 69 67 6e 65 64 20 62 41 73 63 4b 65 79  unsigned bAscKey
16bf0 42 75 67 3a 31 3b 20 20 20 2f 2a 20 54 72 75 65  Bug:1;   /* True
16c00 20 69 66 20 74 68 65 20 62 62 61 37 62 36 39 66   if the bba7b69f
16c10 39 38 34 39 62 35 62 66 20 62 75 67 20 61 70 70  9849b5bf bug app
16c20 6c 69 65 73 20 2a 2f 0a 23 69 66 64 65 66 20 53  lies */.#ifdef S
16c30 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41  QLITE_ENABLE_STA
16c40 54 34 0a 20 20 69 6e 74 20 6e 53 61 6d 70 6c 65  T4.  int nSample
16c50 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
16c60 20 4e 75 6d 62 65 72 20 6f 66 20 65 6c 65 6d 65   Number of eleme
16c70 6e 74 73 20 69 6e 20 61 53 61 6d 70 6c 65 5b 5d  nts in aSample[]
16c80 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 61 6d 70 6c   */.  int nSampl
16c90 65 43 6f 6c 3b 20 20 20 20 20 20 20 20 20 20 2f  eCol;          /
16ca0 2a 20 53 69 7a 65 20 6f 66 20 49 6e 64 65 78 53  * Size of IndexS
16cb0 61 6d 70 6c 65 2e 61 6e 45 71 5b 5d 20 61 6e 64  ample.anEq[] and
16cc0 20 73 6f 20 6f 6e 20 2a 2f 0a 20 20 74 52 6f 77   so on */.  tRow
16cd0 63 6e 74 20 2a 61 41 76 67 45 71 3b 20 20 20 20  cnt *aAvgEq;    
16ce0 20 20 20 20 20 2f 2a 20 41 76 65 72 61 67 65 20       /* Average 
16cf0 6e 45 71 20 76 61 6c 75 65 73 20 66 6f 72 20 6b  nEq values for k
16d00 65 79 73 20 6e 6f 74 20 69 6e 20 61 53 61 6d 70  eys not in aSamp
16d10 6c 65 20 2a 2f 0a 20 20 49 6e 64 65 78 53 61 6d  le */.  IndexSam
16d20 70 6c 65 20 2a 61 53 61 6d 70 6c 65 3b 20 20 20  ple *aSample;   
16d30 20 2f 2a 20 53 61 6d 70 6c 65 73 20 6f 66 20 74   /* Samples of t
16d40 68 65 20 6c 65 66 74 2d 6d 6f 73 74 20 6b 65 79  he left-most key
16d50 20 2a 2f 0a 20 20 74 52 6f 77 63 6e 74 20 2a 61   */.  tRowcnt *a
16d60 69 52 6f 77 45 73 74 3b 20 20 20 20 20 20 20 2f  iRowEst;       /
16d70 2a 20 4e 6f 6e 2d 6c 6f 67 61 72 69 74 68 6d 69  * Non-logarithmi
16d80 63 20 73 74 61 74 31 20 64 61 74 61 20 66 6f 72  c stat1 data for
16d90 20 74 68 69 73 20 69 6e 64 65 78 20 2a 2f 0a 20   this index */. 
16da0 20 74 52 6f 77 63 6e 74 20 6e 52 6f 77 45 73 74   tRowcnt nRowEst
16db0 30 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 6f 6e  0;        /* Non
16dc0 2d 6c 6f 67 61 72 69 74 68 6d 69 63 20 6e 75 6d  -logarithmic num
16dd0 62 65 72 20 6f 66 20 72 6f 77 73 20 69 6e 20 74  ber of rows in t
16de0 68 65 20 69 6e 64 65 78 20 2a 2f 0a 23 65 6e 64  he index */.#end
16df0 69 66 0a 20 20 42 69 74 6d 61 73 6b 20 63 6f 6c  if.  Bitmask col
16e00 4e 6f 74 49 64 78 65 64 3b 20 20 20 20 20 2f 2a  NotIdxed;     /*
16e10 20 30 20 66 6f 72 20 75 6e 69 6e 64 65 78 65 64   0 for unindexed
16e20 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 70 54 61 62   columns in pTab
16e30 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c   */.};../*.** Al
16e40 6c 6f 77 65 64 20 76 61 6c 75 65 73 20 66 6f 72  lowed values for
16e50 20 49 6e 64 65 78 2e 69 64 78 54 79 70 65 0a 2a   Index.idxType.*
16e60 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
16e70 5f 49 44 58 54 59 50 45 5f 41 50 50 44 45 46 20  _IDXTYPE_APPDEF 
16e80 20 20 20 20 20 30 20 20 20 2f 2a 20 43 72 65 61       0   /* Crea
16e90 74 65 64 20 75 73 69 6e 67 20 43 52 45 41 54 45  ted using CREATE
16ea0 20 49 4e 44 45 58 20 2a 2f 0a 23 64 65 66 69 6e   INDEX */.#defin
16eb0 65 20 53 51 4c 49 54 45 5f 49 44 58 54 59 50 45  e SQLITE_IDXTYPE
16ec0 5f 55 4e 49 51 55 45 20 20 20 20 20 20 31 20 20  _UNIQUE      1  
16ed0 20 2f 2a 20 49 6d 70 6c 65 6d 65 6e 74 73 20 61   /* Implements a
16ee0 20 55 4e 49 51 55 45 20 63 6f 6e 73 74 72 61 69   UNIQUE constrai
16ef0 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  nt */.#define SQ
16f00 4c 49 54 45 5f 49 44 58 54 59 50 45 5f 50 52 49  LITE_IDXTYPE_PRI
16f10 4d 41 52 59 4b 45 59 20 20 32 20 20 20 2f 2a 20  MARYKEY  2   /* 
16f20 49 73 20 74 68 65 20 50 52 49 4d 41 52 59 20 4b  Is the PRIMARY K
16f30 45 59 20 66 6f 72 20 74 68 65 20 74 61 62 6c 65  EY for the table
16f40 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
16f50 54 45 5f 49 44 58 54 59 50 45 5f 49 50 4b 20 20  TE_IDXTYPE_IPK  
16f60 20 20 20 20 20 20 20 33 20 20 20 2f 2a 20 49 4e         3   /* IN
16f70 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45  TEGER PRIMARY KE
16f80 59 20 69 6e 64 65 78 20 2a 2f 0a 0a 2f 2a 20 52  Y index */../* R
16f90 65 74 75 72 6e 20 74 72 75 65 20 69 66 20 69 6e  eturn true if in
16fa0 64 65 78 20 58 20 69 73 20 61 20 50 52 49 4d 41  dex X is a PRIMA
16fb0 52 59 20 4b 45 59 20 69 6e 64 65 78 20 2a 2f 0a  RY KEY index */.
16fc0 23 64 65 66 69 6e 65 20 49 73 50 72 69 6d 61 72  #define IsPrimar
16fd0 79 4b 65 79 49 6e 64 65 78 28 58 29 20 20 28 28  yKeyIndex(X)  ((
16fe0 58 29 2d 3e 69 64 78 54 79 70 65 3d 3d 53 51 4c  X)->idxType==SQL
16ff0 49 54 45 5f 49 44 58 54 59 50 45 5f 50 52 49 4d  ITE_IDXTYPE_PRIM
17000 41 52 59 4b 45 59 29 0a 0a 2f 2a 20 52 65 74 75  ARYKEY)../* Retu
17010 72 6e 20 74 72 75 65 20 69 66 20 69 6e 64 65 78  rn true if index
17020 20 58 20 69 73 20 61 20 55 4e 49 51 55 45 20 69   X is a UNIQUE i
17030 6e 64 65 78 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ndex */.#define 
17040 49 73 55 6e 69 71 75 65 49 6e 64 65 78 28 58 29  IsUniqueIndex(X)
17050 20 20 20 20 20 20 28 28 58 29 2d 3e 6f 6e 45 72        ((X)->onEr
17060 72 6f 72 21 3d 4f 45 5f 4e 6f 6e 65 29 0a 0a 2f  ror!=OE_None)../
17070 2a 20 54 68 65 20 49 6e 64 65 78 2e 61 69 43 6f  * The Index.aiCo
17080 6c 75 6d 6e 5b 5d 20 76 61 6c 75 65 73 20 61 72  lumn[] values ar
17090 65 20 6e 6f 72 6d 61 6c 6c 79 20 70 6f 73 69 74  e normally posit
170a0 69 76 65 20 69 6e 74 65 67 65 72 2e 20 20 42 75  ive integer.  Bu
170b0 74 0a 2a 2a 20 74 68 65 72 65 20 61 72 65 20 73  t.** there are s
170c0 6f 6d 65 20 6e 65 67 61 74 69 76 65 20 76 61 6c  ome negative val
170d0 75 65 73 20 74 68 61 74 20 68 61 76 65 20 73 70  ues that have sp
170e0 65 63 69 61 6c 20 6d 65 61 6e 69 6e 67 3a 0a 2a  ecial meaning:.*
170f0 2f 0a 23 64 65 66 69 6e 65 20 58 4e 5f 52 4f 57  /.#define XN_ROW
17100 49 44 20 20 20 20 20 28 2d 31 29 20 20 20 20 20  ID     (-1)     
17110 2f 2a 20 49 6e 64 65 78 65 64 20 63 6f 6c 75 6d  /* Indexed colum
17120 6e 20 69 73 20 74 68 65 20 72 6f 77 69 64 20 2a  n is the rowid *
17130 2f 0a 23 64 65 66 69 6e 65 20 58 4e 5f 45 58 50  /.#define XN_EXP
17140 52 20 20 20 20 20 20 28 2d 32 29 20 20 20 20 20  R      (-2)     
17150 2f 2a 20 49 6e 64 65 78 65 64 20 63 6f 6c 75 6d  /* Indexed colum
17160 6e 20 69 73 20 61 6e 20 65 78 70 72 65 73 73 69  n is an expressi
17170 6f 6e 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 45 61 63  on */../*.** Eac
17180 68 20 73 61 6d 70 6c 65 20 73 74 6f 72 65 64 20  h sample stored 
17190 69 6e 20 74 68 65 20 73 71 6c 69 74 65 5f 73 74  in the sqlite_st
171a0 61 74 34 20 74 61 62 6c 65 20 69 73 20 72 65 70  at4 table is rep
171b0 72 65 73 65 6e 74 65 64 20 69 6e 20 6d 65 6d 6f  resented in memo
171c0 72 79 0a 2a 2a 20 75 73 69 6e 67 20 61 20 73 74  ry.** using a st
171d0 72 75 63 74 75 72 65 20 6f 66 20 74 68 69 73 20  ructure of this 
171e0 74 79 70 65 2e 20 20 53 65 65 20 64 6f 63 75 6d  type.  See docum
171f0 65 6e 74 61 74 69 6f 6e 20 61 74 20 74 68 65 20  entation at the 
17200 74 6f 70 20 6f 66 20 74 68 65 0a 2a 2a 20 61 6e  top of the.** an
17210 61 6c 79 7a 65 2e 63 20 73 6f 75 72 63 65 20 66  alyze.c source f
17220 69 6c 65 20 66 6f 72 20 61 64 64 69 74 69 6f 6e  ile for addition
17230 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a  al information..
17240 2a 2f 0a 73 74 72 75 63 74 20 49 6e 64 65 78 53  */.struct IndexS
17250 61 6d 70 6c 65 20 7b 0a 20 20 76 6f 69 64 20 2a  ample {.  void *
17260 70 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50  p;          /* P
17270 6f 69 6e 74 65 72 20 74 6f 20 73 61 6d 70 6c 65  ointer to sample
17280 64 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 6e  d record */.  in
17290 74 20 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20  t n;            
172a0 2f 2a 20 53 69 7a 65 20 6f 66 20 72 65 63 6f 72  /* Size of recor
172b0 64 20 69 6e 20 62 79 74 65 73 20 2a 2f 0a 20 20  d in bytes */.  
172c0 74 52 6f 77 63 6e 74 20 2a 61 6e 45 71 3b 20 20  tRowcnt *anEq;  
172d0 20 20 2f 2a 20 45 73 74 2e 20 6e 75 6d 62 65 72    /* Est. number
172e0 20 6f 66 20 72 6f 77 73 20 77 68 65 72 65 20 74   of rows where t
172f0 68 65 20 6b 65 79 20 65 71 75 61 6c 73 20 74 68  he key equals th
17300 69 73 20 73 61 6d 70 6c 65 20 2a 2f 0a 20 20 74  is sample */.  t
17310 52 6f 77 63 6e 74 20 2a 61 6e 4c 74 3b 20 20 20  Rowcnt *anLt;   
17320 20 2f 2a 20 45 73 74 2e 20 6e 75 6d 62 65 72 20   /* Est. number 
17330 6f 66 20 72 6f 77 73 20 77 68 65 72 65 20 6b 65  of rows where ke
17340 79 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20 74  y is less than t
17350 68 69 73 20 73 61 6d 70 6c 65 20 2a 2f 0a 20 20  his sample */.  
17360 74 52 6f 77 63 6e 74 20 2a 61 6e 44 4c 74 3b 20  tRowcnt *anDLt; 
17370 20 20 2f 2a 20 45 73 74 2e 20 6e 75 6d 62 65 72    /* Est. number
17380 20 6f 66 20 64 69 73 74 69 6e 63 74 20 6b 65 79   of distinct key
17390 73 20 6c 65 73 73 20 74 68 61 6e 20 74 68 69 73  s less than this
173a0 20 73 61 6d 70 6c 65 20 2a 2f 0a 7d 3b 0a 0a 2f   sample */.};../
173b0 2a 0a 2a 2a 20 50 6f 73 73 69 62 6c 65 20 76 61  *.** Possible va
173c0 6c 75 65 73 20 74 6f 20 75 73 65 20 77 69 74 68  lues to use with
173d0 69 6e 20 74 68 65 20 66 6c 61 67 73 20 61 72 67  in the flags arg
173e0 75 6d 65 6e 74 20 74 6f 20 73 71 6c 69 74 65 33  ument to sqlite3
173f0 47 65 74 54 6f 6b 65 6e 28 29 2e 0a 2a 2f 0a 23  GetToken()..*/.#
17400 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 54 4f  define SQLITE_TO
17410 4b 45 4e 5f 51 55 4f 54 45 44 20 20 20 20 30 78  KEN_QUOTED    0x
17420 31 20 2f 2a 20 54 6f 6b 65 6e 20 69 73 20 61 20  1 /* Token is a 
17430 71 75 6f 74 65 64 20 69 64 65 6e 74 69 66 69 65  quoted identifie
17440 72 2e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  r. */.#define SQ
17450 4c 49 54 45 5f 54 4f 4b 45 4e 5f 4b 45 59 57 4f  LITE_TOKEN_KEYWO
17460 52 44 20 20 20 30 78 32 20 2f 2a 20 54 6f 6b 65  RD   0x2 /* Toke
17470 6e 20 69 73 20 61 20 6b 65 79 77 6f 72 64 2e 20  n is a keyword. 
17480 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 74  */../*.** Each t
17490 6f 6b 65 6e 20 63 6f 6d 69 6e 67 20 6f 75 74 20  oken coming out 
174a0 6f 66 20 74 68 65 20 6c 65 78 65 72 20 69 73 20  of the lexer is 
174b0 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 0a 2a  an instance of.*
174c0 2a 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65  * this structure
174d0 2e 20 20 54 6f 6b 65 6e 73 20 61 72 65 20 61 6c  .  Tokens are al
174e0 73 6f 20 75 73 65 64 20 61 73 20 70 61 72 74 20  so used as part 
174f0 6f 66 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e  of an expression
17500 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6d 65 6d 6f  ..**.** The memo
17510 72 79 20 74 68 61 74 20 22 7a 22 20 70 6f 69 6e  ry that "z" poin
17520 74 73 20 74 6f 20 69 73 20 6f 77 6e 65 64 20 62  ts to is owned b
17530 79 20 6f 74 68 65 72 20 6f 62 6a 65 63 74 73 2e  y other objects.
17540 20 20 54 61 6b 65 20 63 61 72 65 0a 2a 2a 20 74    Take care.** t
17550 68 61 74 20 74 68 65 20 6f 77 6e 65 72 20 6f 66  hat the owner of
17560 20 74 68 65 20 22 7a 22 20 73 74 72 69 6e 67 20   the "z" string 
17570 64 6f 65 73 20 6e 6f 74 20 64 65 61 6c 6c 6f 63  does not dealloc
17580 61 74 65 20 74 68 65 20 73 74 72 69 6e 67 20 62  ate the string b
17590 65 66 6f 72 65 0a 2a 2a 20 74 68 65 20 54 6f 6b  efore.** the Tok
175a0 65 6e 20 67 6f 65 73 20 6f 75 74 20 6f 66 20 73  en goes out of s
175b0 63 6f 70 65 21 20 20 56 65 72 79 20 6f 66 74 65  cope!  Very ofte
175c0 6e 2c 20 74 68 65 20 22 7a 22 20 70 6f 69 6e 74  n, the "z" point
175d0 73 20 74 6f 20 73 6f 6d 65 20 70 6c 61 63 65 0a  s to some place.
175e0 2a 2a 20 69 6e 20 74 68 65 20 6d 69 64 64 6c 65  ** in the middle
175f0 20 6f 66 20 74 68 65 20 50 61 72 73 65 2e 7a 53   of the Parse.zS
17600 71 6c 20 74 65 78 74 2e 20 20 42 75 74 20 69 74  ql text.  But it
17610 20 6d 69 67 68 74 20 61 6c 73 6f 20 70 6f 69 6e   might also poin
17620 74 20 74 6f 20 61 0a 2a 2a 20 73 74 61 74 69 63  t to a.** static
17630 20 73 74 72 69 6e 67 2e 0a 2a 2f 0a 73 74 72 75   string..*/.stru
17640 63 74 20 54 6f 6b 65 6e 20 7b 0a 20 20 63 6f 6e  ct Token {.  con
17650 73 74 20 63 68 61 72 20 2a 7a 3b 20 20 20 20 20  st char *z;     
17660 2f 2a 20 54 65 78 74 20 6f 66 20 74 68 65 20 74  /* Text of the t
17670 6f 6b 65 6e 2e 20 20 4e 6f 74 20 4e 55 4c 4c 2d  oken.  Not NULL-
17680 74 65 72 6d 69 6e 61 74 65 64 21 20 2a 2f 0a 20  terminated! */. 
17690 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 20 6e 3b   unsigned int n;
176a0 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
176b0 20 63 68 61 72 61 63 74 65 72 73 20 69 6e 20 74   characters in t
176c0 68 69 73 20 74 6f 6b 65 6e 20 2a 2f 0a 7d 3b 0a  his token */.};.
176d0 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e  ./*.** An instan
176e0 63 65 20 6f 66 20 74 68 69 73 20 73 74 72 75 63  ce of this struc
176f0 74 75 72 65 20 63 6f 6e 74 61 69 6e 73 20 69 6e  ture contains in
17700 66 6f 72 6d 61 74 69 6f 6e 20 6e 65 65 64 65 64  formation needed
17710 20 74 6f 20 67 65 6e 65 72 61 74 65 0a 2a 2a 20   to generate.** 
17720 63 6f 64 65 20 66 6f 72 20 61 20 53 45 4c 45 43  code for a SELEC
17730 54 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20  T that contains 
17740 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69  aggregate functi
17750 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 45 78  ons..**.** If Ex
17760 70 72 2e 6f 70 3d 3d 54 4b 5f 41 47 47 5f 43 4f  pr.op==TK_AGG_CO
17770 4c 55 4d 4e 20 6f 72 20 54 4b 5f 41 47 47 5f 46  LUMN or TK_AGG_F
17780 55 4e 43 54 49 4f 4e 20 74 68 65 6e 20 45 78 70  UNCTION then Exp
17790 72 2e 70 41 67 67 49 6e 66 6f 20 69 73 20 61 0a  r.pAggInfo is a.
177a0 2a 2a 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68  ** pointer to th
177b0 69 73 20 73 74 72 75 63 74 75 72 65 2e 20 20 54  is structure.  T
177c0 68 65 20 45 78 70 72 2e 69 43 6f 6c 75 6d 6e 20  he Expr.iColumn 
177d0 66 69 65 6c 64 20 69 73 20 74 68 65 20 69 6e 64  field is the ind
177e0 65 78 20 69 6e 0a 2a 2a 20 41 67 67 49 6e 66 6f  ex in.** AggInfo
177f0 2e 61 43 6f 6c 5b 5d 20 6f 72 20 41 67 67 49 6e  .aCol[] or AggIn
17800 66 6f 2e 61 46 75 6e 63 5b 5d 20 6f 66 20 69 6e  fo.aFunc[] of in
17810 66 6f 72 6d 61 74 69 6f 6e 20 6e 65 65 64 65 64  formation needed
17820 20 74 6f 20 67 65 6e 65 72 61 74 65 0a 2a 2a 20   to generate.** 
17830 63 6f 64 65 20 66 6f 72 20 74 68 61 74 20 6e 6f  code for that no
17840 64 65 2e 0a 2a 2a 0a 2a 2a 20 41 67 67 49 6e 66  de..**.** AggInf
17850 6f 2e 70 47 72 6f 75 70 42 79 20 61 6e 64 20 41  o.pGroupBy and A
17860 67 67 49 6e 66 6f 2e 61 46 75 6e 63 2e 70 45 78  ggInfo.aFunc.pEx
17870 70 72 20 70 6f 69 6e 74 20 74 6f 20 66 69 65 6c  pr point to fiel
17880 64 73 20 77 69 74 68 69 6e 20 74 68 65 0a 2a 2a  ds within the.**
17890 20 6f 72 69 67 69 6e 61 6c 20 53 65 6c 65 63 74   original Select
178a0 20 73 74 72 75 63 74 75 72 65 20 74 68 61 74 20   structure that 
178b0 64 65 73 63 72 69 62 65 73 20 74 68 65 20 53 45  describes the SE
178c0 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 20  LECT statement. 
178d0 20 54 68 65 73 65 0a 2a 2a 20 66 69 65 6c 64 73   These.** fields
178e0 20 64 6f 20 6e 6f 74 20 6e 65 65 64 20 74 6f 20   do not need to 
178f0 62 65 20 66 72 65 65 64 20 77 68 65 6e 20 64 65  be freed when de
17900 61 6c 6c 6f 63 61 74 69 6e 67 20 74 68 65 20 41  allocating the A
17910 67 67 49 6e 66 6f 20 73 74 72 75 63 74 75 72 65  ggInfo structure
17920 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 41 67 67 49  ..*/.struct AggI
17930 6e 66 6f 20 7b 0a 20 20 75 38 20 64 69 72 65 63  nfo {.  u8 direc
17940 74 4d 6f 64 65 3b 20 20 20 20 20 20 20 20 20 20  tMode;          
17950 2f 2a 20 44 69 72 65 63 74 20 72 65 6e 64 65 72  /* Direct render
17960 69 6e 67 20 6d 6f 64 65 20 6d 65 61 6e 73 20 74  ing mode means t
17970 61 6b 65 20 64 61 74 61 20 64 69 72 65 63 74 6c  ake data directl
17980 79 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  y.              
17990 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 66              ** f
179a0 72 6f 6d 20 73 6f 75 72 63 65 20 74 61 62 6c 65  rom source table
179b0 73 20 72 61 74 68 65 72 20 74 68 61 6e 20 66 72  s rather than fr
179c0 6f 6d 20 61 63 63 75 6d 75 6c 61 74 6f 72 73 20  om accumulators 
179d0 2a 2f 0a 20 20 75 38 20 75 73 65 53 6f 72 74 69  */.  u8 useSorti
179e0 6e 67 49 64 78 3b 20 20 20 20 20 20 20 2f 2a 20  ngIdx;       /* 
179f0 49 6e 20 64 69 72 65 63 74 20 6d 6f 64 65 2c 20  In direct mode, 
17a00 72 65 66 65 72 65 6e 63 65 20 74 68 65 20 73 6f  reference the so
17a10 72 74 69 6e 67 20 69 6e 64 65 78 20 72 61 74 68  rting index rath
17a20 65 72 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  er.             
17a30 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20               ** 
17a40 74 68 61 6e 20 74 68 65 20 73 6f 75 72 63 65 20  than the source 
17a50 74 61 62 6c 65 20 2a 2f 0a 20 20 69 6e 74 20 73  table */.  int s
17a60 6f 72 74 69 6e 67 49 64 78 3b 20 20 20 20 20 20  ortingIdx;      
17a70 20 20 20 2f 2a 20 43 75 72 73 6f 72 20 6e 75 6d     /* Cursor num
17a80 62 65 72 20 6f 66 20 74 68 65 20 73 6f 72 74 69  ber of the sorti
17a90 6e 67 20 69 6e 64 65 78 20 2a 2f 0a 20 20 69 6e  ng index */.  in
17aa0 74 20 73 6f 72 74 69 6e 67 49 64 78 50 54 61 62  t sortingIdxPTab
17ab0 3b 20 20 20 20 20 2f 2a 20 43 75 72 73 6f 72 20  ;     /* Cursor 
17ac0 6e 75 6d 62 65 72 20 6f 66 20 70 73 65 75 64 6f  number of pseudo
17ad0 2d 74 61 62 6c 65 20 2a 2f 0a 20 20 69 6e 74 20  -table */.  int 
17ae0 6e 53 6f 72 74 69 6e 67 43 6f 6c 75 6d 6e 3b 20  nSortingColumn; 
17af0 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
17b00 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20   columns in the 
17b10 73 6f 72 74 69 6e 67 20 69 6e 64 65 78 20 2a 2f  sorting index */
17b20 0a 20 20 69 6e 74 20 6d 6e 52 65 67 2c 20 6d 78  .  int mnReg, mx
17b30 52 65 67 3b 20 20 20 20 20 20 20 2f 2a 20 52 61  Reg;       /* Ra
17b40 6e 67 65 20 6f 66 20 72 65 67 69 73 74 65 72 73  nge of registers
17b50 20 61 6c 6c 6f 63 61 74 65 64 20 66 6f 72 20 61   allocated for a
17b60 43 6f 6c 20 61 6e 64 20 61 46 75 6e 63 20 2a 2f  Col and aFunc */
17b70 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70 47 72  .  ExprList *pGr
17b80 6f 75 70 42 79 3b 20 20 20 20 20 2f 2a 20 54 68  oupBy;     /* Th
17b90 65 20 67 72 6f 75 70 20 62 79 20 63 6c 61 75 73  e group by claus
17ba0 65 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 41 67  e */.  struct Ag
17bb0 67 49 6e 66 6f 5f 63 6f 6c 20 7b 20 20 20 20 2f  gInfo_col {    /
17bc0 2a 20 46 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d  * For each colum
17bd0 6e 20 75 73 65 64 20 69 6e 20 73 6f 75 72 63 65  n used in source
17be0 20 74 61 62 6c 65 73 20 2a 2f 0a 20 20 20 20 54   tables */.    T
17bf0 61 62 6c 65 20 2a 70 54 61 62 3b 20 20 20 20 20  able *pTab;     
17c00 20 20 20 20 20 20 20 20 2f 2a 20 53 6f 75 72 63          /* Sourc
17c10 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20 69  e table */.    i
17c20 6e 74 20 69 54 61 62 6c 65 3b 20 20 20 20 20 20  nt iTable;      
17c30 20 20 20 20 20 20 20 20 2f 2a 20 43 75 72 73 6f          /* Curso
17c40 72 20 6e 75 6d 62 65 72 20 6f 66 20 74 68 65 20  r number of the 
17c50 73 6f 75 72 63 65 20 74 61 62 6c 65 20 2a 2f 0a  source table */.
17c60 20 20 20 20 69 6e 74 20 69 43 6f 6c 75 6d 6e 3b      int iColumn;
17c70 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
17c80 43 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 77 69  Column number wi
17c90 74 68 69 6e 20 74 68 65 20 73 6f 75 72 63 65 20  thin the source 
17ca0 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20 69 6e 74  table */.    int
17cb0 20 69 53 6f 72 74 65 72 43 6f 6c 75 6d 6e 3b 20   iSorterColumn; 
17cc0 20 20 20 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20        /* Column 
17cd0 6e 75 6d 62 65 72 20 69 6e 20 74 68 65 20 73 6f  number in the so
17ce0 72 74 69 6e 67 20 69 6e 64 65 78 20 2a 2f 0a 20  rting index */. 
17cf0 20 20 20 69 6e 74 20 69 4d 65 6d 3b 20 20 20 20     int iMem;    
17d00 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d              /* M
17d10 65 6d 6f 72 79 20 6c 6f 63 61 74 69 6f 6e 20 74  emory location t
17d20 68 61 74 20 61 63 74 73 20 61 73 20 61 63 63 75  hat acts as accu
17d30 6d 75 6c 61 74 6f 72 20 2a 2f 0a 20 20 20 20 45  mulator */.    E
17d40 78 70 72 20 2a 70 45 78 70 72 3b 20 20 20 20 20  xpr *pExpr;     
17d50 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6f          /* The o
17d60 72 69 67 69 6e 61 6c 20 65 78 70 72 65 73 73 69  riginal expressi
17d70 6f 6e 20 2a 2f 0a 20 20 7d 20 2a 61 43 6f 6c 3b  on */.  } *aCol;
17d80 0a 20 20 69 6e 74 20 6e 43 6f 6c 75 6d 6e 3b 20  .  int nColumn; 
17d90 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
17da0 6d 62 65 72 20 6f 66 20 75 73 65 64 20 65 6e 74  mber of used ent
17db0 72 69 65 73 20 69 6e 20 61 43 6f 6c 5b 5d 20 2a  ries in aCol[] *
17dc0 2f 0a 20 20 69 6e 74 20 6e 41 63 63 75 6d 75 6c  /.  int nAccumul
17dd0 61 74 6f 72 3b 20 20 20 20 20 20 20 2f 2a 20 4e  ator;       /* N
17de0 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73  umber of columns
17df0 20 74 68 61 74 20 73 68 6f 77 20 74 68 72 6f 75   that show throu
17e00 67 68 20 74 6f 20 74 68 65 20 6f 75 74 70 75 74  gh to the output
17e10 2e 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
17e20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 41              ** A
17e30 64 64 69 74 69 6f 6e 61 6c 20 63 6f 6c 75 6d 6e  dditional column
17e40 73 20 61 72 65 20 75 73 65 64 20 6f 6e 6c 79 20  s are used only 
17e50 61 73 20 70 61 72 61 6d 65 74 65 72 73 20 74 6f  as parameters to
17e60 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
17e70 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 61 67             ** ag
17e80 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e  gregate function
17e90 73 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 41 67  s */.  struct Ag
17ea0 67 49 6e 66 6f 5f 66 75 6e 63 20 7b 20 20 20 2f  gInfo_func {   /
17eb0 2a 20 46 6f 72 20 65 61 63 68 20 61 67 67 72 65  * For each aggre
17ec0 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f  gate function */
17ed0 0a 20 20 20 20 45 78 70 72 20 2a 70 45 78 70 72  .    Expr *pExpr
17ee0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
17ef0 20 45 78 70 72 65 73 73 69 6f 6e 20 65 6e 63 6f   Expression enco
17f00 64 69 6e 67 20 74 68 65 20 66 75 6e 63 74 69 6f  ding the functio
17f10 6e 20 2a 2f 0a 20 20 20 20 46 75 6e 63 44 65 66  n */.    FuncDef
17f20 20 2a 70 46 75 6e 63 3b 20 20 20 20 20 20 20 20   *pFunc;        
17f30 20 20 2f 2a 20 54 68 65 20 61 67 67 72 65 67 61    /* The aggrega
17f40 74 65 20 66 75 6e 63 74 69 6f 6e 20 69 6d 70 6c  te function impl
17f50 65 6d 65 6e 74 61 74 69 6f 6e 20 2a 2f 0a 20 20  ementation */.  
17f60 20 20 69 6e 74 20 69 4d 65 6d 3b 20 20 20 20 20    int iMem;     
17f70 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 65             /* Me
17f80 6d 6f 72 79 20 6c 6f 63 61 74 69 6f 6e 20 74 68  mory location th
17f90 61 74 20 61 63 74 73 20 61 73 20 61 63 63 75 6d  at acts as accum
17fa0 75 6c 61 74 6f 72 20 2a 2f 0a 20 20 20 20 69 6e  ulator */.    in
17fb0 74 20 69 44 69 73 74 69 6e 63 74 3b 20 20 20 20  t iDistinct;    
17fc0 20 20 20 20 20 20 20 2f 2a 20 45 70 68 65 6d 65         /* Epheme
17fd0 72 61 6c 20 74 61 62 6c 65 20 75 73 65 64 20 74  ral table used t
17fe0 6f 20 65 6e 66 6f 72 63 65 20 44 49 53 54 49 4e  o enforce DISTIN
17ff0 43 54 20 2a 2f 0a 20 20 7d 20 2a 61 46 75 6e 63  CT */.  } *aFunc
18000 3b 0a 20 20 69 6e 74 20 6e 46 75 6e 63 3b 20 20  ;.  int nFunc;  
18010 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
18020 75 6d 62 65 72 20 6f 66 20 65 6e 74 72 69 65 73  umber of entries
18030 20 69 6e 20 61 46 75 6e 63 5b 5d 20 2a 2f 0a 7d   in aFunc[] */.}
18040 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 64 61 74  ;../*.** The dat
18050 61 74 79 70 65 20 79 6e 56 61 72 20 69 73 20 61  atype ynVar is a
18060 20 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 2c   signed integer,
18070 20 65 69 74 68 65 72 20 31 36 2d 62 69 74 20 6f   either 16-bit o
18080 72 20 33 32 2d 62 69 74 2e 0a 2a 2a 20 55 73 75  r 32-bit..** Usu
18090 61 6c 6c 79 20 69 74 20 69 73 20 31 36 2d 62 69  ally it is 16-bi
180a0 74 73 2e 20 20 42 75 74 20 69 66 20 53 51 4c 49  ts.  But if SQLI
180b0 54 45 5f 4d 41 58 5f 56 41 52 49 41 42 4c 45 5f  TE_MAX_VARIABLE_
180c0 4e 55 4d 42 45 52 20 69 73 20 67 72 65 61 74 65  NUMBER is greate
180d0 72 0a 2a 2a 20 74 68 61 6e 20 33 32 37 36 37 20  r.** than 32767 
180e0 77 65 20 68 61 76 65 20 74 6f 20 6d 61 6b 65 20  we have to make 
180f0 69 74 20 33 32 2d 62 69 74 2e 20 20 31 36 2d 62  it 32-bit.  16-b
18100 69 74 20 69 73 20 70 72 65 66 65 72 72 65 64 20  it is preferred 
18110 62 65 63 61 75 73 65 0a 2a 2a 20 69 74 20 75 73  because.** it us
18120 65 73 20 6c 65 73 73 20 6d 65 6d 6f 72 79 20 69  es less memory i
18130 6e 20 74 68 65 20 45 78 70 72 20 6f 62 6a 65 63  n the Expr objec
18140 74 2c 20 77 68 69 63 68 20 69 73 20 61 20 62 69  t, which is a bi
18150 67 20 6d 65 6d 6f 72 79 20 75 73 65 72 0a 2a 2a  g memory user.**
18160 20 69 6e 20 73 79 73 74 65 6d 73 20 77 69 74 68   in systems with
18170 20 6c 6f 74 73 20 6f 66 20 70 72 65 70 61 72 65   lots of prepare
18180 64 20 73 74 61 74 65 6d 65 6e 74 73 2e 20 20 41  d statements.  A
18190 6e 64 20 66 65 77 20 61 70 70 6c 69 63 61 74 69  nd few applicati
181a0 6f 6e 73 0a 2a 2a 20 6e 65 65 64 20 6d 6f 72 65  ons.** need more
181b0 20 74 68 61 6e 20 61 62 6f 75 74 20 31 30 20 6f   than about 10 o
181c0 72 20 32 30 20 76 61 72 69 61 62 6c 65 73 2e 20  r 20 variables. 
181d0 20 42 75 74 20 73 6f 6d 65 20 65 78 74 72 65 6d   But some extrem
181e0 65 20 75 73 65 72 73 20 77 61 6e 74 0a 2a 2a 20  e users want.** 
181f0 74 6f 20 68 61 76 65 20 70 72 65 70 61 72 65 64  to have prepared
18200 20 73 74 61 74 65 6d 65 6e 74 73 20 77 69 74 68   statements with
18210 20 6f 76 65 72 20 33 32 37 36 37 20 76 61 72 69   over 32767 vari
18220 61 62 6c 65 73 2c 20 61 6e 64 20 66 6f 72 20 74  ables, and for t
18230 68 65 6d 0a 2a 2a 20 74 68 65 20 6f 70 74 69 6f  hem.** the optio
18240 6e 20 69 73 20 61 76 61 69 6c 61 62 6c 65 20 28  n is available (
18250 61 74 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 29  at compile-time)
18260 2e 0a 2a 2f 0a 23 69 66 20 53 51 4c 49 54 45 5f  ..*/.#if SQLITE_
18270 4d 41 58 5f 56 41 52 49 41 42 4c 45 5f 4e 55 4d  MAX_VARIABLE_NUM
18280 42 45 52 3c 3d 33 32 37 36 37 0a 74 79 70 65 64  BER<=32767.typed
18290 65 66 20 69 31 36 20 79 6e 56 61 72 3b 0a 23 65  ef i16 ynVar;.#e
182a0 6c 73 65 0a 74 79 70 65 64 65 66 20 69 6e 74 20  lse.typedef int 
182b0 79 6e 56 61 72 3b 0a 23 65 6e 64 69 66 0a 0a 2f  ynVar;.#endif../
182c0 2a 0a 2a 2a 20 45 61 63 68 20 6e 6f 64 65 20 6f  *.** Each node o
182d0 66 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 20  f an expression 
182e0 69 6e 20 74 68 65 20 70 61 72 73 65 20 74 72 65  in the parse tre
182f0 65 20 69 73 20 61 6e 20 69 6e 73 74 61 6e 63 65  e is an instance
18300 0a 2a 2a 20 6f 66 20 74 68 69 73 20 73 74 72 75  .** of this stru
18310 63 74 75 72 65 2e 0a 2a 2a 0a 2a 2a 20 45 78 70  cture..**.** Exp
18320 72 2e 6f 70 20 69 73 20 74 68 65 20 6f 70 63 6f  r.op is the opco
18330 64 65 2e 20 54 68 65 20 69 6e 74 65 67 65 72 20  de. The integer 
18340 70 61 72 73 65 72 20 74 6f 6b 65 6e 20 63 6f 64  parser token cod
18350 65 73 20 61 72 65 20 72 65 75 73 65 64 0a 2a 2a  es are reused.**
18360 20 61 73 20 6f 70 63 6f 64 65 73 20 68 65 72 65   as opcodes here
18370 2e 20 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20 74  . For example, t
18380 68 65 20 70 61 72 73 65 72 20 64 65 66 69 6e 65  he parser define
18390 73 20 54 4b 5f 47 45 20 74 6f 20 62 65 20 61 6e  s TK_GE to be an
183a0 20 69 6e 74 65 67 65 72 0a 2a 2a 20 63 6f 64 65   integer.** code
183b0 20 72 65 70 72 65 73 65 6e 74 69 6e 67 20 74 68   representing th
183c0 65 20 22 3e 3d 22 20 6f 70 65 72 61 74 6f 72 2e  e ">=" operator.
183d0 20 54 68 69 73 20 73 61 6d 65 20 69 6e 74 65 67   This same integ
183e0 65 72 20 63 6f 64 65 20 69 73 20 72 65 75 73 65  er code is reuse
183f0 64 0a 2a 2a 20 74 6f 20 72 65 70 72 65 73 65 6e  d.** to represen
18400 74 20 74 68 65 20 67 72 65 61 74 65 72 2d 74 68  t the greater-th
18410 61 6e 2d 6f 72 2d 65 71 75 61 6c 2d 74 6f 20 6f  an-or-equal-to o
18420 70 65 72 61 74 6f 72 20 69 6e 20 74 68 65 20 65  perator in the e
18430 78 70 72 65 73 73 69 6f 6e 0a 2a 2a 20 74 72 65  xpression.** tre
18440 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  e..**.** If the 
18450 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61 6e  expression is an
18460 20 53 51 4c 20 6c 69 74 65 72 61 6c 20 28 54 4b   SQL literal (TK
18470 5f 49 4e 54 45 47 45 52 2c 20 54 4b 5f 46 4c 4f  _INTEGER, TK_FLO
18480 41 54 2c 20 54 4b 5f 42 4c 4f 42 2c 0a 2a 2a 20  AT, TK_BLOB,.** 
18490 6f 72 20 54 4b 5f 53 54 52 49 4e 47 29 2c 20 74  or TK_STRING), t
184a0 68 65 6e 20 45 78 70 72 2e 74 6f 6b 65 6e 20 63  hen Expr.token c
184b0 6f 6e 74 61 69 6e 73 20 74 68 65 20 74 65 78 74  ontains the text
184c0 20 6f 66 20 74 68 65 20 53 51 4c 20 6c 69 74 65   of the SQL lite
184d0 72 61 6c 2e 20 49 66 0a 2a 2a 20 74 68 65 20 65  ral. If.** the e
184e0 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61 20 76  xpression is a v
184f0 61 72 69 61 62 6c 65 20 28 54 4b 5f 56 41 52 49  ariable (TK_VARI
18500 41 42 4c 45 29 2c 20 74 68 65 6e 20 45 78 70 72  ABLE), then Expr
18510 2e 74 6f 6b 65 6e 20 63 6f 6e 74 61 69 6e 73 20  .token contains 
18520 74 68 65 0a 2a 2a 20 76 61 72 69 61 62 6c 65 20  the.** variable 
18530 6e 61 6d 65 2e 20 46 69 6e 61 6c 6c 79 2c 20 69  name. Finally, i
18540 66 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e  f the expression
18550 20 69 73 20 61 6e 20 53 51 4c 20 66 75 6e 63 74   is an SQL funct
18560 69 6f 6e 20 28 54 4b 5f 46 55 4e 43 54 49 4f 4e  ion (TK_FUNCTION
18570 29 2c 0a 2a 2a 20 74 68 65 6e 20 45 78 70 72 2e  ),.** then Expr.
18580 74 6f 6b 65 6e 20 63 6f 6e 74 61 69 6e 73 20 74  token contains t
18590 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 66  he name of the f
185a0 75 6e 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 45  unction..**.** E
185b0 78 70 72 2e 70 52 69 67 68 74 20 61 6e 64 20 45  xpr.pRight and E
185c0 78 70 72 2e 70 4c 65 66 74 20 61 72 65 20 74 68  xpr.pLeft are th
185d0 65 20 6c 65 66 74 20 61 6e 64 20 72 69 67 68 74  e left and right
185e0 20 73 75 62 65 78 70 72 65 73 73 69 6f 6e 73 20   subexpressions 
185f0 6f 66 20 61 0a 2a 2a 20 62 69 6e 61 72 79 20 6f  of a.** binary o
18600 70 65 72 61 74 6f 72 2e 20 45 69 74 68 65 72 20  perator. Either 
18610 6f 72 20 62 6f 74 68 20 6d 61 79 20 62 65 20 4e  or both may be N
18620 55 4c 4c 2e 0a 2a 2a 0a 2a 2a 20 45 78 70 72 2e  ULL..**.** Expr.
18630 78 2e 70 4c 69 73 74 20 69 73 20 61 20 6c 69 73  x.pList is a lis
18640 74 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 69  t of arguments i
18650 66 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e  f the expression
18660 20 69 73 20 61 6e 20 53 51 4c 20 66 75 6e 63 74   is an SQL funct
18670 69 6f 6e 2c 0a 2a 2a 20 61 20 43 41 53 45 20 65  ion,.** a CASE e
18680 78 70 72 65 73 73 69 6f 6e 20 6f 72 20 61 6e 20  xpression or an 
18690 49 4e 20 65 78 70 72 65 73 73 69 6f 6e 20 6f 66  IN expression of
186a0 20 74 68 65 20 66 6f 72 6d 20 22 3c 6c 68 73 3e   the form "<lhs>
186b0 20 49 4e 20 28 3c 79 3e 2c 20 3c 7a 3e 2e 2e 2e   IN (<y>, <z>...
186c0 29 22 2e 0a 2a 2a 20 45 78 70 72 2e 78 2e 70 53  )"..** Expr.x.pS
186d0 65 6c 65 63 74 20 69 73 20 75 73 65 64 20 69 66  elect is used if
186e0 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20   the expression 
186f0 69 73 20 61 20 73 75 62 2d 73 65 6c 65 63 74 20  is a sub-select 
18700 6f 72 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e  or an expression
18710 20 6f 66 0a 2a 2a 20 74 68 65 20 66 6f 72 6d 20   of.** the form 
18720 22 3c 6c 68 73 3e 20 49 4e 20 28 53 45 4c 45 43  "<lhs> IN (SELEC
18730 54 20 2e 2e 2e 29 22 2e 20 49 66 20 74 68 65 20  T ...)". If the 
18740 45 50 5f 78 49 73 53 65 6c 65 63 74 20 62 69 74  EP_xIsSelect bit
18750 20 69 73 20 73 65 74 20 69 6e 20 74 68 65 0a 2a   is set in the.*
18760 2a 20 45 78 70 72 2e 66 6c 61 67 73 20 6d 61 73  * Expr.flags mas
18770 6b 2c 20 74 68 65 6e 20 45 78 70 72 2e 78 2e 70  k, then Expr.x.p
18780 53 65 6c 65 63 74 20 69 73 20 76 61 6c 69 64 2e  Select is valid.
18790 20 4f 74 68 65 72 77 69 73 65 2c 20 45 78 70 72   Otherwise, Expr
187a0 2e 78 2e 70 4c 69 73 74 20 69 73 0a 2a 2a 20 76  .x.pList is.** v
187b0 61 6c 69 64 2e 0a 2a 2a 0a 2a 2a 20 41 6e 20 65  alid..**.** An e
187c0 78 70 72 65 73 73 69 6f 6e 20 6f 66 20 74 68 65  xpression of the
187d0 20 66 6f 72 6d 20 49 44 20 6f 72 20 49 44 2e 49   form ID or ID.I
187e0 44 20 72 65 66 65 72 73 20 74 6f 20 61 20 63 6f  D refers to a co
187f0 6c 75 6d 6e 20 69 6e 20 61 20 74 61 62 6c 65 2e  lumn in a table.
18800 0a 2a 2a 20 46 6f 72 20 73 75 63 68 20 65 78 70  .** For such exp
18810 72 65 73 73 69 6f 6e 73 2c 20 45 78 70 72 2e 6f  ressions, Expr.o
18820 70 20 69 73 20 73 65 74 20 74 6f 20 54 4b 5f 43  p is set to TK_C
18830 4f 4c 55 4d 4e 20 61 6e 64 20 45 78 70 72 2e 69  OLUMN and Expr.i
18840 54 61 62 6c 65 20 69 73 0a 2a 2a 20 74 68 65 20  Table is.** the 
18850 69 6e 74 65 67 65 72 20 63 75 72 73 6f 72 20 6e  integer cursor n
18860 75 6d 62 65 72 20 6f 66 20 61 20 56 44 42 45 20  umber of a VDBE 
18870 63 75 72 73 6f 72 20 70 6f 69 6e 74 69 6e 67 20  cursor pointing 
18880 74 6f 20 74 68 61 74 20 74 61 62 6c 65 20 61 6e  to that table an
18890 64 0a 2a 2a 20 45 78 70 72 2e 69 43 6f 6c 75 6d  d.** Expr.iColum
188a0 6e 20 69 73 20 74 68 65 20 63 6f 6c 75 6d 6e 20  n is the column 
188b0 6e 75 6d 62 65 72 20 66 6f 72 20 74 68 65 20 73  number for the s
188c0 70 65 63 69 66 69 63 20 63 6f 6c 75 6d 6e 2e 20  pecific column. 
188d0 20 49 66 20 74 68 65 0a 2a 2a 20 65 78 70 72 65   If the.** expre
188e0 73 73 69 6f 6e 20 69 73 20 75 73 65 64 20 61 73  ssion is used as
188f0 20 61 20 72 65 73 75 6c 74 20 69 6e 20 61 6e 20   a result in an 
18900 61 67 67 72 65 67 61 74 65 20 53 45 4c 45 43 54  aggregate SELECT
18910 2c 20 74 68 65 6e 20 74 68 65 0a 2a 2a 20 76 61  , then the.** va
18920 6c 75 65 20 69 73 20 61 6c 73 6f 20 73 74 6f 72  lue is also stor
18930 65 64 20 69 6e 20 74 68 65 20 45 78 70 72 2e 69  ed in the Expr.i
18940 41 67 67 20 63 6f 6c 75 6d 6e 20 69 6e 20 74 68  Agg column in th
18950 65 20 61 67 67 72 65 67 61 74 65 20 73 6f 20 74  e aggregate so t
18960 68 61 74 0a 2a 2a 20 69 74 20 63 61 6e 20 62 65  hat.** it can be
18970 20 61 63 63 65 73 73 65 64 20 61 66 74 65 72 20   accessed after 
18980 61 6c 6c 20 61 67 67 72 65 67 61 74 65 73 20 61  all aggregates a
18990 72 65 20 63 6f 6d 70 75 74 65 64 2e 0a 2a 2a 0a  re computed..**.
189a0 2a 2a 20 49 66 20 74 68 65 20 65 78 70 72 65 73  ** If the expres
189b0 73 69 6f 6e 20 69 73 20 61 6e 20 75 6e 62 6f 75  sion is an unbou
189c0 6e 64 20 76 61 72 69 61 62 6c 65 20 6d 61 72 6b  nd variable mark
189d0 65 72 20 28 61 20 71 75 65 73 74 69 6f 6e 20 6d  er (a question m
189e0 61 72 6b 0a 2a 2a 20 63 68 61 72 61 63 74 65 72  ark.** character
189f0 20 27 3f 27 20 69 6e 20 74 68 65 20 6f 72 69 67   '?' in the orig
18a00 69 6e 61 6c 20 53 51 4c 29 20 74 68 65 6e 20 74  inal SQL) then t
18a10 68 65 20 45 78 70 72 2e 69 54 61 62 6c 65 20 68  he Expr.iTable h
18a20 6f 6c 64 73 20 74 68 65 20 69 6e 64 65 78 0a 2a  olds the index.*
18a30 2a 20 6e 75 6d 62 65 72 20 66 6f 72 20 74 68 61  * number for tha
18a40 74 20 76 61 72 69 61 62 6c 65 2e 0a 2a 2a 0a 2a  t variable..**.*
18a50 2a 20 49 66 20 74 68 65 20 65 78 70 72 65 73 73  * If the express
18a60 69 6f 6e 20 69 73 20 61 20 73 75 62 71 75 65 72  ion is a subquer
18a70 79 20 74 68 65 6e 20 45 78 70 72 2e 69 43 6f 6c  y then Expr.iCol
18a80 75 6d 6e 20 68 6f 6c 64 73 20 61 6e 20 69 6e 74  umn holds an int
18a90 65 67 65 72 0a 2a 2a 20 72 65 67 69 73 74 65 72  eger.** register
18aa0 20 6e 75 6d 62 65 72 20 63 6f 6e 74 61 69 6e 69   number containi
18ab0 6e 67 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66  ng the result of
18ac0 20 74 68 65 20 73 75 62 71 75 65 72 79 2e 20 20   the subquery.  
18ad0 49 66 20 74 68 65 0a 2a 2a 20 73 75 62 71 75 65  If the.** subque
18ae0 72 79 20 67 69 76 65 73 20 61 20 63 6f 6e 73 74  ry gives a const
18af0 61 6e 74 20 72 65 73 75 6c 74 2c 20 74 68 65 6e  ant result, then
18b00 20 69 54 61 62 6c 65 20 69 73 20 2d 31 2e 20 20   iTable is -1.  
18b10 49 66 20 74 68 65 20 73 75 62 71 75 65 72 79 0a  If the subquery.
18b20 2a 2a 20 67 69 76 65 73 20 61 20 64 69 66 66 65  ** gives a diffe
18b30 72 65 6e 74 20 61 6e 73 77 65 72 20 61 74 20 64  rent answer at d
18b40 69 66 66 65 72 65 6e 74 20 74 69 6d 65 73 20 64  ifferent times d
18b50 75 72 69 6e 67 20 73 74 61 74 65 6d 65 6e 74 20  uring statement 
18b60 70 72 6f 63 65 73 73 69 6e 67 0a 2a 2a 20 74 68  processing.** th
18b70 65 6e 20 69 54 61 62 6c 65 20 69 73 20 74 68 65  en iTable is the
18b80 20 61 64 64 72 65 73 73 20 6f 66 20 61 20 73 75   address of a su
18b90 62 72 6f 75 74 69 6e 65 20 74 68 61 74 20 63 6f  broutine that co
18ba0 6d 70 75 74 65 73 20 74 68 65 20 73 75 62 71 75  mputes the subqu
18bb0 65 72 79 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68  ery..**.** If th
18bc0 65 20 45 78 70 72 20 69 73 20 6f 66 20 74 79 70  e Expr is of typ
18bd0 65 20 4f 50 5f 43 6f 6c 75 6d 6e 2c 20 61 6e 64  e OP_Column, and
18be0 20 74 68 65 20 74 61 62 6c 65 20 69 74 20 69 73   the table it is
18bf0 20 73 65 6c 65 63 74 69 6e 67 20 66 72 6f 6d 0a   selecting from.
18c00 2a 2a 20 69 73 20 61 20 64 69 73 6b 20 74 61 62  ** is a disk tab
18c10 6c 65 20 6f 72 20 74 68 65 20 22 6f 6c 64 2e 2a  le or the "old.*
18c20 22 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 2c 20  " pseudo-table, 
18c30 74 68 65 6e 20 70 54 61 62 20 70 6f 69 6e 74 73  then pTab points
18c40 20 74 6f 20 74 68 65 0a 2a 2a 20 63 6f 72 72 65   to the.** corre
18c50 73 70 6f 6e 64 69 6e 67 20 74 61 62 6c 65 20 64  sponding table d
18c60 65 66 69 6e 69 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a  efinition..**.**
18c70 20 41 4c 4c 4f 43 41 54 49 4f 4e 20 4e 4f 54 45   ALLOCATION NOTE
18c80 53 3a 0a 2a 2a 0a 2a 2a 20 45 78 70 72 20 6f 62  S:.**.** Expr ob
18c90 6a 65 63 74 73 20 63 61 6e 20 75 73 65 20 61 20  jects can use a 
18ca0 6c 6f 74 20 6f 66 20 6d 65 6d 6f 72 79 20 73 70  lot of memory sp
18cb0 61 63 65 20 69 6e 20 64 61 74 61 62 61 73 65 20  ace in database 
18cc0 73 63 68 65 6d 61 2e 20 20 54 6f 0a 2a 2a 20 68  schema.  To.** h
18cd0 65 6c 70 20 72 65 64 75 63 65 20 6d 65 6d 6f 72  elp reduce memor
18ce0 79 20 72 65 71 75 69 72 65 6d 65 6e 74 73 2c 20  y requirements, 
18cf0 73 6f 6d 65 74 69 6d 65 73 20 61 6e 20 45 78 70  sometimes an Exp
18d00 72 20 6f 62 6a 65 63 74 20 77 69 6c 6c 20 62 65  r object will be
18d10 0a 2a 2a 20 74 72 75 6e 63 61 74 65 64 2e 20 20  .** truncated.  
18d20 41 6e 64 20 74 6f 20 72 65 64 75 63 65 20 74 68  And to reduce th
18d30 65 20 6e 75 6d 62 65 72 20 6f 66 20 6d 65 6d 6f  e number of memo
18d40 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 2c 20  ry allocations, 
18d50 73 6f 6d 65 74 69 6d 65 73 0a 2a 2a 20 74 77 6f  sometimes.** two
18d60 20 6f 72 20 6d 6f 72 65 20 45 78 70 72 20 6f 62   or more Expr ob
18d70 6a 65 63 74 73 20 77 69 6c 6c 20 62 65 20 73 74  jects will be st
18d80 6f 72 65 64 20 69 6e 20 61 20 73 69 6e 67 6c 65  ored in a single
18d90 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69   memory allocati
18da0 6f 6e 2c 0a 2a 2a 20 74 6f 67 65 74 68 65 72 20  on,.** together 
18db0 77 69 74 68 20 45 78 70 72 2e 7a 54 6f 6b 65 6e  with Expr.zToken
18dc0 20 73 74 72 69 6e 67 73 2e 0a 2a 2a 0a 2a 2a 20   strings..**.** 
18dd0 49 66 20 74 68 65 20 45 50 5f 52 65 64 75 63 65  If the EP_Reduce
18de0 64 20 61 6e 64 20 45 50 5f 54 6f 6b 65 6e 4f 6e  d and EP_TokenOn
18df0 6c 79 20 66 6c 61 67 73 20 61 72 65 20 73 65 74  ly flags are set
18e00 20 77 68 65 6e 0a 2a 2a 20 61 6e 20 45 78 70 72   when.** an Expr
18e10 20 6f 62 6a 65 63 74 20 69 73 20 74 72 75 6e 63   object is trunc
18e20 61 74 65 64 2e 20 20 57 68 65 6e 20 45 50 5f 52  ated.  When EP_R
18e30 65 64 75 63 65 64 20 69 73 20 73 65 74 2c 20 74  educed is set, t
18e40 68 65 6e 20 61 6c 6c 0a 2a 2a 20 74 68 65 20 63  hen all.** the c
18e50 68 69 6c 64 20 45 78 70 72 20 6f 62 6a 65 63 74  hild Expr object
18e60 73 20 69 6e 20 74 68 65 20 45 78 70 72 2e 70 4c  s in the Expr.pL
18e70 65 66 74 20 61 6e 64 20 45 78 70 72 2e 70 52 69  eft and Expr.pRi
18e80 67 68 74 20 73 75 62 74 72 65 65 73 0a 2a 2a 20  ght subtrees.** 
18e90 61 72 65 20 63 6f 6e 74 61 69 6e 65 64 20 77 69  are contained wi
18ea0 74 68 69 6e 20 74 68 65 20 73 61 6d 65 20 6d 65  thin the same me
18eb0 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 2e  mory allocation.
18ec0 20 20 4e 6f 74 65 2c 20 68 6f 77 65 76 65 72 2c    Note, however,
18ed0 20 74 68 61 74 0a 2a 2a 20 74 68 65 20 73 75 62   that.** the sub
18ee0 74 72 65 65 73 20 69 6e 20 45 78 70 72 2e 78 2e  trees in Expr.x.
18ef0 70 4c 69 73 74 20 6f 72 20 45 78 70 72 2e 78 2e  pList or Expr.x.
18f00 70 53 65 6c 65 63 74 20 61 72 65 20 61 6c 77 61  pSelect are alwa
18f10 79 73 20 73 65 70 61 72 61 74 65 6c 79 0a 2a 2a  ys separately.**
18f20 20 61 6c 6c 6f 63 61 74 65 64 2c 20 72 65 67 61   allocated, rega
18f30 72 64 6c 65 73 73 20 6f 66 20 77 68 65 74 68 65  rdless of whethe
18f40 72 20 6f 72 20 6e 6f 74 20 45 50 5f 52 65 64 75  r or not EP_Redu
18f50 63 65 64 20 69 73 20 73 65 74 2e 0a 2a 2f 0a 73  ced is set..*/.s
18f60 74 72 75 63 74 20 45 78 70 72 20 7b 0a 20 20 75  truct Expr {.  u
18f70 38 20 6f 70 3b 20 20 20 20 20 20 20 20 20 20 20  8 op;           
18f80 20 20 20 20 20 20 2f 2a 20 4f 70 65 72 61 74 69        /* Operati
18f90 6f 6e 20 70 65 72 66 6f 72 6d 65 64 20 62 79 20  on performed by 
18fa0 74 68 69 73 20 6e 6f 64 65 20 2a 2f 0a 20 20 63  this node */.  c
18fb0 68 61 72 20 61 66 66 45 78 70 72 3b 20 20 20 20  har affExpr;    
18fc0 20 20 20 20 20 20 2f 2a 20 61 66 66 69 6e 69 74        /* affinit
18fd0 79 2c 20 6f 72 20 52 41 49 53 45 20 74 79 70 65  y, or RAISE type
18fe0 20 2a 2f 0a 20 20 75 33 32 20 66 6c 61 67 73 3b   */.  u32 flags;
18ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
19000 56 61 72 69 6f 75 73 20 66 6c 61 67 73 2e 20 20  Various flags.  
19010 45 50 5f 2a 20 53 65 65 20 62 65 6c 6f 77 20 2a  EP_* See below *
19020 2f 0a 20 20 75 6e 69 6f 6e 20 7b 0a 20 20 20 20  /.  union {.    
19030 63 68 61 72 20 2a 7a 54 6f 6b 65 6e 3b 20 20 20  char *zToken;   
19040 20 20 20 20 20 20 20 2f 2a 20 54 6f 6b 65 6e 20         /* Token 
19050 76 61 6c 75 65 2e 20 5a 65 72 6f 20 74 65 72 6d  value. Zero term
19060 69 6e 61 74 65 64 20 61 6e 64 20 64 65 71 75 6f  inated and dequo
19070 74 65 64 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69  ted */.    int i
19080 56 61 6c 75 65 3b 20 20 20 20 20 20 20 20 20 20  Value;          
19090 20 20 2f 2a 20 4e 6f 6e 2d 6e 65 67 61 74 69 76    /* Non-negativ
190a0 65 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20  e integer value 
190b0 69 66 20 45 50 5f 49 6e 74 56 61 6c 75 65 20 2a  if EP_IntValue *
190c0 2f 0a 20 20 7d 20 75 3b 0a 0a 20 20 2f 2a 20 49  /.  } u;..  /* I
190d0 66 20 74 68 65 20 45 50 5f 54 6f 6b 65 6e 4f 6e  f the EP_TokenOn
190e0 6c 79 20 66 6c 61 67 20 69 73 20 73 65 74 20 69  ly flag is set i
190f0 6e 20 74 68 65 20 45 78 70 72 2e 66 6c 61 67 73  n the Expr.flags
19100 20 6d 61 73 6b 2c 20 74 68 65 6e 20 6e 6f 0a 20   mask, then no. 
19110 20 2a 2a 20 73 70 61 63 65 20 69 73 20 61 6c 6c   ** space is all
19120 6f 63 61 74 65 64 20 66 6f 72 20 74 68 65 20 66  ocated for the f
19130 69 65 6c 64 73 20 62 65 6c 6f 77 20 74 68 69 73  ields below this
19140 20 70 6f 69 6e 74 2e 20 41 6e 20 61 74 74 65 6d   point. An attem
19150 70 74 20 74 6f 0a 20 20 2a 2a 20 61 63 63 65 73  pt to.  ** acces
19160 73 20 74 68 65 6d 20 77 69 6c 6c 20 72 65 73 75  s them will resu
19170 6c 74 20 69 6e 20 61 20 73 65 67 66 61 75 6c 74  lt in a segfault
19180 20 6f 72 20 6d 61 6c 66 75 6e 63 74 69 6f 6e 2e   or malfunction.
19190 0a 20 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  .  *************
191a0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
191b0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
191c0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
191d0 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 20 20 45 78 70  ********/..  Exp
191e0 72 20 2a 70 4c 65 66 74 3b 20 20 20 20 20 20 20  r *pLeft;       
191f0 20 20 20 20 2f 2a 20 4c 65 66 74 20 73 75 62 6e      /* Left subn
19200 6f 64 65 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70  ode */.  Expr *p
19210 52 69 67 68 74 3b 20 20 20 20 20 20 20 20 20 20  Right;          
19220 2f 2a 20 52 69 67 68 74 20 73 75 62 6e 6f 64 65  /* Right subnode
19230 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b 0a 20 20   */.  union {.  
19240 20 20 45 78 70 72 4c 69 73 74 20 2a 70 4c 69 73    ExprList *pLis
19250 74 3b 20 20 20 20 20 2f 2a 20 6f 70 20 3d 20 49  t;     /* op = I
19260 4e 2c 20 45 58 49 53 54 53 2c 20 53 45 4c 45 43  N, EXISTS, SELEC
19270 54 2c 20 43 41 53 45 2c 20 46 55 4e 43 54 49 4f  T, CASE, FUNCTIO
19280 4e 2c 20 42 45 54 57 45 45 4e 20 2a 2f 0a 20 20  N, BETWEEN */.  
19290 20 20 53 65 6c 65 63 74 20 2a 70 53 65 6c 65 63    Select *pSelec
192a0 74 3b 20 20 20 20 20 2f 2a 20 45 50 5f 78 49 73  t;     /* EP_xIs
192b0 53 65 6c 65 63 74 20 61 6e 64 20 6f 70 20 3d 20  Select and op = 
192c0 49 4e 2c 20 45 58 49 53 54 53 2c 20 53 45 4c 45  IN, EXISTS, SELE
192d0 43 54 20 2a 2f 0a 20 20 7d 20 78 3b 0a 0a 20 20  CT */.  } x;..  
192e0 2f 2a 20 49 66 20 74 68 65 20 45 50 5f 52 65 64  /* If the EP_Red
192f0 75 63 65 64 20 66 6c 61 67 20 69 73 20 73 65 74  uced flag is set
19300 20 69 6e 20 74 68 65 20 45 78 70 72 2e 66 6c 61   in the Expr.fla
19310 67 73 20 6d 61 73 6b 2c 20 74 68 65 6e 20 6e 6f  gs mask, then no
19320 0a 20 20 2a 2a 20 73 70 61 63 65 20 69 73 20 61  .  ** space is a
19330 6c 6c 6f 63 61 74 65 64 20 66 6f 72 20 74 68 65  llocated for the
19340 20 66 69 65 6c 64 73 20 62 65 6c 6f 77 20 74 68   fields below th
19350 69 73 20 70 6f 69 6e 74 2e 20 41 6e 20 61 74 74  is point. An att
19360 65 6d 70 74 20 74 6f 0a 20 20 2a 2a 20 61 63 63  empt to.  ** acc
19370 65 73 73 20 74 68 65 6d 20 77 69 6c 6c 20 72 65  ess them will re
19380 73 75 6c 74 20 69 6e 20 61 20 73 65 67 66 61 75  sult in a segfau
19390 6c 74 20 6f 72 20 6d 61 6c 66 75 6e 63 74 69 6f  lt or malfunctio
193a0 6e 2e 0a 20 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  n..  ***********
193b0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
193c0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
193d0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
193e0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 23 69 66  **********/..#if
193f0 20 53 51 4c 49 54 45 5f 4d 41 58 5f 45 58 50 52   SQLITE_MAX_EXPR
19400 5f 44 45 50 54 48 3e 30 0a 20 20 69 6e 74 20 6e  _DEPTH>0.  int n
19410 48 65 69 67 68 74 3b 20 20 20 20 20 20 20 20 20  Height;         
19420 20 20 2f 2a 20 48 65 69 67 68 74 20 6f 66 20 74    /* Height of t
19430 68 65 20 74 72 65 65 20 68 65 61 64 65 64 20 62  he tree headed b
19440 79 20 74 68 69 73 20 6e 6f 64 65 20 2a 2f 0a 23  y this node */.#
19450 65 6e 64 69 66 0a 20 20 69 6e 74 20 69 54 61 62  endif.  int iTab
19460 6c 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  le;            /
19470 2a 20 54 4b 5f 43 4f 4c 55 4d 4e 3a 20 63 75 72  * TK_COLUMN: cur
19480 73 6f 72 20 6e 75 6d 62 65 72 20 6f 66 20 74 61  sor number of ta
19490 62 6c 65 20 68 6f 6c 64 69 6e 67 20 63 6f 6c 75  ble holding colu
194a0 6d 6e 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  mn.             
194b0 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 54              ** T
194c0 4b 5f 52 45 47 49 53 54 45 52 3a 20 72 65 67 69  K_REGISTER: regi
194d0 73 74 65 72 20 6e 75 6d 62 65 72 0a 20 20 20 20  ster number.    
194e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
194f0 20 20 20 20 20 2a 2a 20 54 4b 5f 54 52 49 47 47       ** TK_TRIGG
19500 45 52 3a 20 31 20 2d 3e 20 6e 65 77 2c 20 30 20  ER: 1 -> new, 0 
19510 2d 3e 20 6f 6c 64 0a 20 20 20 20 20 20 20 20 20  -> old.         
19520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19530 2a 2a 20 45 50 5f 55 6e 6c 69 6b 65 6c 79 3a 20  ** EP_Unlikely: 
19540 20 31 33 34 32 31 37 37 32 38 20 74 69 6d 65 73   134217728 times
19550 20 6c 69 6b 65 6c 69 68 6f 6f 64 0a 20 20 20 20   likelihood.    
19560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19570 20 20 20 20 20 2a 2a 20 54 4b 5f 53 45 4c 45 43       ** TK_SELEC
19580 54 3a 20 31 73 74 20 72 65 67 69 73 74 65 72 20  T: 1st register 
19590 6f 66 20 72 65 73 75 6c 74 20 76 65 63 74 6f 72  of result vector
195a0 20 2a 2f 0a 20 20 79 6e 56 61 72 20 69 43 6f 6c   */.  ynVar iCol
195b0 75 6d 6e 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  umn;         /* 
195c0 54 4b 5f 43 4f 4c 55 4d 4e 3a 20 63 6f 6c 75 6d  TK_COLUMN: colum
195d0 6e 20 69 6e 64 65 78 2e 20 20 2d 31 20 66 6f 72  n index.  -1 for
195e0 20 72 6f 77 69 64 2e 0a 20 20 20 20 20 20 20 20   rowid..        
195f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19600 20 2a 2a 20 54 4b 5f 56 41 52 49 41 42 4c 45 3a   ** TK_VARIABLE:
19610 20 76 61 72 69 61 62 6c 65 20 6e 75 6d 62 65 72   variable number
19620 20 28 61 6c 77 61 79 73 20 3e 3d 20 31 29 2e 0a   (always >= 1)..
19630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19640 20 20 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f 53           ** TK_S
19650 45 4c 45 43 54 5f 43 4f 4c 55 4d 4e 3a 20 63 6f  ELECT_COLUMN: co
19660 6c 75 6d 6e 20 6f 66 20 74 68 65 20 72 65 73 75  lumn of the resu
19670 6c 74 20 76 65 63 74 6f 72 20 2a 2f 0a 20 20 69  lt vector */.  i
19680 31 36 20 69 41 67 67 3b 20 20 20 20 20 20 20 20  16 iAgg;        
19690 20 20 20 20 20 20 2f 2a 20 57 68 69 63 68 20 65        /* Which e
196a0 6e 74 72 79 20 69 6e 20 70 41 67 67 49 6e 66 6f  ntry in pAggInfo
196b0 2d 3e 61 43 6f 6c 5b 5d 20 6f 72 20 2d 3e 61 46  ->aCol[] or ->aF
196c0 75 6e 63 5b 5d 20 2a 2f 0a 20 20 69 31 36 20 69  unc[] */.  i16 i
196d0 52 69 67 68 74 4a 6f 69 6e 54 61 62 6c 65 3b 20  RightJoinTable; 
196e0 20 20 2f 2a 20 49 66 20 45 50 5f 46 72 6f 6d 4a    /* If EP_FromJ
196f0 6f 69 6e 2c 20 74 68 65 20 72 69 67 68 74 20 74  oin, the right t
19700 61 62 6c 65 20 6f 66 20 74 68 65 20 6a 6f 69 6e  able of the join
19710 20 2a 2f 0a 20 20 75 38 20 6f 70 32 3b 20 20 20   */.  u8 op2;   
19720 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
19730 54 4b 5f 52 45 47 49 53 54 45 52 2f 54 4b 5f 54  TK_REGISTER/TK_T
19740 52 55 54 48 3a 20 6f 72 69 67 69 6e 61 6c 20 76  RUTH: original v
19750 61 6c 75 65 20 6f 66 20 45 78 70 72 2e 6f 70 0a  alue of Expr.op.
19760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19770 20 20 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f 43           ** TK_C
19780 4f 4c 55 4d 4e 3a 20 74 68 65 20 76 61 6c 75 65  OLUMN: the value
19790 20 6f 66 20 70 35 20 66 6f 72 20 4f 50 5f 43 6f   of p5 for OP_Co
197a0 6c 75 6d 6e 0a 20 20 20 20 20 20 20 20 20 20 20  lumn.           
197b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a                **
197c0 20 54 4b 5f 41 47 47 5f 46 55 4e 43 54 49 4f 4e   TK_AGG_FUNCTION
197d0 3a 20 6e 65 73 74 69 6e 67 20 64 65 70 74 68 20  : nesting depth 
197e0 2a 2f 0a 20 20 41 67 67 49 6e 66 6f 20 2a 70 41  */.  AggInfo *pA
197f0 67 67 49 6e 66 6f 3b 20 20 20 20 20 2f 2a 20 55  ggInfo;     /* U
19800 73 65 64 20 62 79 20 54 4b 5f 41 47 47 5f 43 4f  sed by TK_AGG_CO
19810 4c 55 4d 4e 20 61 6e 64 20 54 4b 5f 41 47 47 5f  LUMN and TK_AGG_
19820 46 55 4e 43 54 49 4f 4e 20 2a 2f 0a 20 20 75 6e  FUNCTION */.  un
19830 69 6f 6e 20 7b 0a 20 20 20 20 54 61 62 6c 65 20  ion {.    Table 
19840 2a 70 54 61 62 3b 20 20 20 20 20 20 20 20 20 20  *pTab;          
19850 20 2f 2a 20 54 4b 5f 43 4f 4c 55 4d 4e 3a 20 54   /* TK_COLUMN: T
19860 61 62 6c 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20  able containing 
19870 63 6f 6c 75 6d 6e 2e 20 43 61 6e 20 62 65 20 4e  column. Can be N
19880 55 4c 4c 0a 20 20 20 20 20 20 20 20 20 20 20 20  ULL.            
19890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a                 *
198a0 2a 20 66 6f 72 20 61 20 63 6f 6c 75 6d 6e 20 6f  * for a column o
198b0 66 20 61 6e 20 69 6e 64 65 78 20 6f 6e 20 61 6e  f an index on an
198c0 20 65 78 70 72 65 73 73 69 6f 6e 20 2a 2f 0a 20   expression */. 
198d0 20 20 20 57 69 6e 64 6f 77 20 2a 70 57 69 6e 3b     Window *pWin;
198e0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 45 50 5f            /* EP_
198f0 57 69 6e 46 75 6e 63 3a 20 57 69 6e 64 6f 77 2f  WinFunc: Window/
19900 46 69 6c 74 65 72 20 64 65 66 6e 20 66 6f 72 20  Filter defn for 
19910 61 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20  a function */.  
19920 20 20 73 74 72 75 63 74 20 7b 20 20 20 20 20 20    struct {      
19930 20 20 20 20 20 20 20 20 20 2f 2a 20 54 4b 5f 49           /* TK_I
19940 4e 2c 20 54 4b 5f 53 45 4c 45 43 54 2c 20 61 6e  N, TK_SELECT, an
19950 64 20 54 4b 5f 45 58 49 53 54 53 20 2a 2f 0a 20  d TK_EXISTS */. 
19960 20 20 20 20 20 69 6e 74 20 69 41 64 64 72 3b 20       int iAddr; 
19970 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53              /* S
19980 75 62 72 6f 75 74 69 6e 65 20 65 6e 74 72 79 20  ubroutine entry 
19990 61 64 64 72 65 73 73 20 2a 2f 0a 20 20 20 20 20  address */.     
199a0 20 69 6e 74 20 72 65 67 52 65 74 75 72 6e 3b 20   int regReturn; 
199b0 20 20 20 20 20 20 20 20 2f 2a 20 52 65 67 69 73          /* Regis
199c0 74 65 72 20 75 73 65 64 20 74 6f 20 68 6f 6c 64  ter used to hold
199d0 20 72 65 74 75 72 6e 20 61 64 64 72 65 73 73 20   return address 
199e0 2a 2f 0a 20 20 20 20 7d 20 73 75 62 3b 0a 20 20  */.    } sub;.  
199f0 7d 20 79 3b 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54  } y;.};../*.** T
19a00 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 72 65  he following are
19a10 20 74 68 65 20 6d 65 61 6e 69 6e 67 73 20 6f 66   the meanings of
19a20 20 62 69 74 73 20 69 6e 20 74 68 65 20 45 78 70   bits in the Exp
19a30 72 2e 66 6c 61 67 73 20 66 69 65 6c 64 2e 0a 2a  r.flags field..*
19a40 2a 20 56 61 6c 75 65 20 72 65 73 74 72 69 63 74  * Value restrict
19a50 69 6f 6e 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20  ions:.**.**     
19a60 20 20 20 20 20 45 50 5f 41 67 67 20 3d 3d 20 4e       EP_Agg == N
19a70 43 5f 48 61 73 41 67 67 20 3d 3d 20 53 46 5f 48  C_HasAgg == SF_H
19a80 61 73 41 67 67 0a 2a 2a 20 20 20 20 20 20 20 20  asAgg.**        
19a90 20 20 45 50 5f 57 69 6e 20 3d 3d 20 4e 43 5f 48    EP_Win == NC_H
19aa0 61 73 57 69 6e 0a 2a 2f 0a 23 64 65 66 69 6e 65  asWin.*/.#define
19ab0 20 45 50 5f 46 72 6f 6d 4a 6f 69 6e 20 20 30 78   EP_FromJoin  0x
19ac0 30 30 30 30 30 31 20 2f 2a 20 4f 72 69 67 69 6e  000001 /* Origin
19ad0 61 74 65 73 20 69 6e 20 4f 4e 2f 55 53 49 4e 47  ates in ON/USING
19ae0 20 63 6c 61 75 73 65 20 6f 66 20 6f 75 74 65 72   clause of outer
19af0 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66 69 6e 65   join */.#define
19b00 20 45 50 5f 44 69 73 74 69 6e 63 74 20 20 30 78   EP_Distinct  0x
19b10 30 30 30 30 30 32 20 2f 2a 20 41 67 67 72 65 67  000002 /* Aggreg
19b20 61 74 65 20 66 75 6e 63 74 69 6f 6e 20 77 69 74  ate function wit
19b30 68 20 44 49 53 54 49 4e 43 54 20 6b 65 79 77 6f  h DISTINCT keywo
19b40 72 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  rd */.#define EP
19b50 5f 48 61 73 46 75 6e 63 20 20 20 30 78 30 30 30  _HasFunc   0x000
19b60 30 30 34 20 2f 2a 20 43 6f 6e 74 61 69 6e 73 20  004 /* Contains 
19b70 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 66 75 6e 63  one or more func
19b80 74 69 6f 6e 73 20 6f 66 20 61 6e 79 20 6b 69 6e  tions of any kin
19b90 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  d */.#define EP_
19ba0 46 69 78 65 64 43 6f 6c 20 20 30 78 30 30 30 30  FixedCol  0x0000
19bb0 30 38 20 2f 2a 20 54 4b 5f 43 6f 6c 75 6d 6e 20  08 /* TK_Column 
19bc0 77 69 74 68 20 61 20 6b 6e 6f 77 6e 20 66 69 78  with a known fix
19bd0 65 64 20 76 61 6c 75 65 20 2a 2f 0a 23 64 65 66  ed value */.#def
19be0 69 6e 65 20 45 50 5f 41 67 67 20 20 20 20 20 20  ine EP_Agg      
19bf0 20 30 78 30 30 30 30 31 30 20 2f 2a 20 43 6f 6e   0x000010 /* Con
19c00 74 61 69 6e 73 20 6f 6e 65 20 6f 72 20 6d 6f 72  tains one or mor
19c10 65 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63  e aggregate func
19c20 74 69 6f 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65  tions */.#define
19c30 20 45 50 5f 56 61 72 53 65 6c 65 63 74 20 30 78   EP_VarSelect 0x
19c40 30 30 30 30 32 30 20 2f 2a 20 70 53 65 6c 65 63  000020 /* pSelec
19c50 74 20 69 73 20 63 6f 72 72 65 6c 61 74 65 64 2c  t is correlated,
19c60 20 6e 6f 74 20 63 6f 6e 73 74 61 6e 74 20 2a 2f   not constant */
19c70 0a 23 64 65 66 69 6e 65 20 45 50 5f 44 62 6c 51  .#define EP_DblQ
19c80 75 6f 74 65 64 20 30 78 30 30 30 30 34 30 20 2f  uoted 0x000040 /
19c90 2a 20 74 6f 6b 65 6e 2e 7a 20 77 61 73 20 6f 72  * token.z was or
19ca0 69 67 69 6e 61 6c 6c 79 20 69 6e 20 22 2e 2e 2e  iginally in "...
19cb0 22 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  " */.#define EP_
19cc0 49 6e 66 69 78 46 75 6e 63 20 30 78 30 30 30 30  InfixFunc 0x0000
19cd0 38 30 20 2f 2a 20 54 72 75 65 20 66 6f 72 20 61  80 /* True for a
19ce0 6e 20 69 6e 66 69 78 20 66 75 6e 63 74 69 6f 6e  n infix function
19cf0 3a 20 4c 49 4b 45 2c 20 47 4c 4f 42 2c 20 65 74  : LIKE, GLOB, et
19d00 63 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  c */.#define EP_
19d10 43 6f 6c 6c 61 74 65 20 20 20 30 78 30 30 30 31  Collate   0x0001
19d20 30 30 20 2f 2a 20 54 72 65 65 20 63 6f 6e 74 61  00 /* Tree conta
19d30 69 6e 73 20 61 20 54 4b 5f 43 4f 4c 4c 41 54 45  ins a TK_COLLATE
19d40 20 6f 70 65 72 61 74 6f 72 20 2a 2f 0a 23 64 65   operator */.#de
19d50 66 69 6e 65 20 45 50 5f 47 65 6e 65 72 69 63 20  fine EP_Generic 
19d60 20 20 30 78 30 30 30 32 30 30 20 2f 2a 20 49 67    0x000200 /* Ig
19d70 6e 6f 72 65 20 43 4f 4c 4c 41 54 45 20 6f 72 20  nore COLLATE or 
19d80 61 66 66 69 6e 69 74 79 20 6f 6e 20 74 68 69 73  affinity on this
19d90 20 74 72 65 65 20 2a 2f 0a 23 64 65 66 69 6e 65   tree */.#define
19da0 20 45 50 5f 49 6e 74 56 61 6c 75 65 20 20 30 78   EP_IntValue  0x
19db0 30 30 30 34 30 30 20 2f 2a 20 49 6e 74 65 67 65  000400 /* Intege
19dc0 72 20 76 61 6c 75 65 20 63 6f 6e 74 61 69 6e 65  r value containe
19dd0 64 20 69 6e 20 75 2e 69 56 61 6c 75 65 20 2a 2f  d in u.iValue */
19de0 0a 23 64 65 66 69 6e 65 20 45 50 5f 78 49 73 53  .#define EP_xIsS
19df0 65 6c 65 63 74 20 30 78 30 30 30 38 30 30 20 2f  elect 0x000800 /
19e00 2a 20 78 2e 70 53 65 6c 65 63 74 20 69 73 20 76  * x.pSelect is v
19e10 61 6c 69 64 20 28 6f 74 68 65 72 77 69 73 65 20  alid (otherwise 
19e20 78 2e 70 4c 69 73 74 20 69 73 29 20 2a 2f 0a 23  x.pList is) */.#
19e30 64 65 66 69 6e 65 20 45 50 5f 53 6b 69 70 20 20  define EP_Skip  
19e40 20 20 20 20 30 78 30 30 31 30 30 30 20 2f 2a 20      0x001000 /* 
19e50 4f 70 65 72 61 74 6f 72 20 64 6f 65 73 20 6e 6f  Operator does no
19e60 74 20 63 6f 6e 74 72 69 62 75 74 65 20 74 6f 20  t contribute to 
19e70 61 66 66 69 6e 69 74 79 20 2a 2f 0a 23 64 65 66  affinity */.#def
19e80 69 6e 65 20 45 50 5f 52 65 64 75 63 65 64 20 20  ine EP_Reduced  
19e90 20 30 78 30 30 32 30 30 30 20 2f 2a 20 45 78 70   0x002000 /* Exp
19ea0 72 20 73 74 72 75 63 74 20 45 58 50 52 5f 52 45  r struct EXPR_RE
19eb0 44 55 43 45 44 53 49 5a 45 20 62 79 74 65 73 20  DUCEDSIZE bytes 
19ec0 6f 6e 6c 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20  only */.#define 
19ed0 45 50 5f 54 6f 6b 65 6e 4f 6e 6c 79 20 30 78 30  EP_TokenOnly 0x0
19ee0 30 34 30 30 30 20 2f 2a 20 45 78 70 72 20 73 74  04000 /* Expr st
19ef0 72 75 63 74 20 45 58 50 52 5f 54 4f 4b 45 4e 4f  ruct EXPR_TOKENO
19f00 4e 4c 59 53 49 5a 45 20 62 79 74 65 73 20 6f 6e  NLYSIZE bytes on
19f10 6c 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  ly */.#define EP
19f20 5f 57 69 6e 20 20 20 20 20 20 20 30 78 30 30 38  _Win       0x008
19f30 30 30 30 20 2f 2a 20 43 6f 6e 74 61 69 6e 73 20  000 /* Contains 
19f40 77 69 6e 64 6f 77 20 66 75 6e 63 74 69 6f 6e 73  window functions
19f50 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 4d   */.#define EP_M
19f60 65 6d 54 6f 6b 65 6e 20 20 30 78 30 31 30 30 30  emToken  0x01000
19f70 30 20 2f 2a 20 4e 65 65 64 20 74 6f 20 73 71 6c  0 /* Need to sql
19f80 69 74 65 33 44 62 46 72 65 65 28 29 20 45 78 70  ite3DbFree() Exp
19f90 72 2e 7a 54 6f 6b 65 6e 20 2a 2f 0a 23 64 65 66  r.zToken */.#def
19fa0 69 6e 65 20 45 50 5f 4e 6f 52 65 64 75 63 65 20  ine EP_NoReduce 
19fb0 20 30 78 30 32 30 30 30 30 20 2f 2a 20 43 61 6e   0x020000 /* Can
19fc0 6e 6f 74 20 45 58 50 52 44 55 50 5f 52 45 44 55  not EXPRDUP_REDU
19fd0 43 45 20 74 68 69 73 20 45 78 70 72 20 2a 2f 0a  CE this Expr */.
19fe0 23 64 65 66 69 6e 65 20 45 50 5f 55 6e 6c 69 6b  #define EP_Unlik
19ff0 65 6c 79 20 20 30 78 30 34 30 30 30 30 20 2f 2a  ely  0x040000 /*
1a000 20 75 6e 6c 69 6b 65 6c 79 28 29 20 6f 72 20 6c   unlikely() or l
1a010 69 6b 65 6c 69 68 6f 6f 64 28 29 20 66 75 6e 63  ikelihood() func
1a020 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  tion */.#define 
1a030 45 50 5f 43 6f 6e 73 74 46 75 6e 63 20 30 78 30  EP_ConstFunc 0x0
1a040 38 30 30 30 30 20 2f 2a 20 41 20 53 51 4c 49 54  80000 /* A SQLIT
1a050 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 20  E_FUNC_CONSTANT 
1a060 6f 72 20 5f 53 4c 4f 43 48 4e 47 20 66 75 6e 63  or _SLOCHNG func
1a070 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  tion */.#define 
1a080 45 50 5f 43 61 6e 42 65 4e 75 6c 6c 20 30 78 31  EP_CanBeNull 0x1
1a090 30 30 30 30 30 20 2f 2a 20 43 61 6e 20 62 65 20  00000 /* Can be 
1a0a0 6e 75 6c 6c 20 64 65 73 70 69 74 65 20 4e 4f 54  null despite NOT
1a0b0 20 4e 55 4c 4c 20 63 6f 6e 73 74 72 61 69 6e 74   NULL constraint
1a0c0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 53   */.#define EP_S
1a0d0 75 62 71 75 65 72 79 20 20 30 78 32 30 30 30 30  ubquery  0x20000
1a0e0 30 20 2f 2a 20 54 72 65 65 20 63 6f 6e 74 61 69  0 /* Tree contai
1a0f0 6e 73 20 61 20 54 4b 5f 53 45 4c 45 43 54 20 6f  ns a TK_SELECT o
1a100 70 65 72 61 74 6f 72 20 2a 2f 0a 23 64 65 66 69  perator */.#defi
1a110 6e 65 20 45 50 5f 41 6c 69 61 73 20 20 20 20 20  ne EP_Alias     
1a120 30 78 34 30 30 30 30 30 20 2f 2a 20 49 73 20 61  0x400000 /* Is a
1a130 6e 20 61 6c 69 61 73 20 66 6f 72 20 61 20 72 65  n alias for a re
1a140 73 75 6c 74 20 73 65 74 20 63 6f 6c 75 6d 6e 20  sult set column 
1a150 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 4c 65  */.#define EP_Le
1a160 61 66 20 20 20 20 20 20 30 78 38 30 30 30 30 30  af      0x800000
1a170 20 2f 2a 20 45 78 70 72 2e 70 4c 65 66 74 2c 20   /* Expr.pLeft, 
1a180 2e 70 52 69 67 68 74 2c 20 2e 75 2e 70 53 65 6c  .pRight, .u.pSel
1a190 65 63 74 20 61 6c 6c 20 4e 55 4c 4c 20 2a 2f 0a  ect all NULL */.
1a1a0 23 64 65 66 69 6e 65 20 45 50 5f 57 69 6e 46 75  #define EP_WinFu
1a1b0 6e 63 20 20 30 78 31 30 30 30 30 30 30 20 2f 2a  nc  0x1000000 /*
1a1c0 20 54 4b 5f 46 55 4e 43 54 49 4f 4e 20 77 69 74   TK_FUNCTION wit
1a1d0 68 20 45 78 70 72 2e 79 2e 70 57 69 6e 20 73 65  h Expr.y.pWin se
1a1e0 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  t */.#define EP_
1a1f0 53 75 62 72 74 6e 20 20 20 30 78 32 30 30 30 30  Subrtn   0x20000
1a200 30 30 20 2f 2a 20 55 73 65 73 20 45 78 70 72 2e  00 /* Uses Expr.
1a210 79 2e 73 75 62 2e 20 54 4b 5f 49 4e 2c 20 5f 53  y.sub. TK_IN, _S
1a220 45 4c 45 43 54 2c 20 6f 72 20 5f 45 58 49 53 54  ELECT, or _EXIST
1a230 53 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  S */.#define EP_
1a240 51 75 6f 74 65 64 20 20 20 30 78 34 30 30 30 30  Quoted   0x40000
1a250 30 30 20 2f 2a 20 54 4b 5f 49 44 20 77 61 73 20  00 /* TK_ID was 
1a260 6f 72 69 67 69 6e 61 6c 6c 79 20 71 75 6f 74 65  originally quote
1a270 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  d */.#define EP_
1a280 53 74 61 74 69 63 20 20 20 30 78 38 30 30 30 30  Static   0x80000
1a290 30 30 20 2f 2a 20 48 65 6c 64 20 69 6e 20 6d 65  00 /* Held in me
1a2a0 6d 6f 72 79 20 6e 6f 74 20 6f 62 74 61 69 6e 65  mory not obtaine
1a2b0 64 20 66 72 6f 6d 20 6d 61 6c 6c 6f 63 28 29 20  d from malloc() 
1a2c0 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 49 73  */.#define EP_Is
1a2d0 54 72 75 65 20 20 30 78 31 30 30 30 30 30 30 30  True  0x10000000
1a2e0 20 2f 2a 20 41 6c 77 61 79 73 20 68 61 73 20 62   /* Always has b
1a2f0 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 20 6f 66 20  oolean value of 
1a300 54 52 55 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20  TRUE */.#define 
1a310 45 50 5f 49 73 46 61 6c 73 65 20 30 78 32 30 30  EP_IsFalse 0x200
1a320 30 30 30 30 30 20 2f 2a 20 41 6c 77 61 79 73 20  00000 /* Always 
1a330 68 61 73 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75  has boolean valu
1a340 65 20 6f 66 20 46 41 4c 53 45 20 2a 2f 0a 0a 2f  e of FALSE */../
1a350 2a 0a 2a 2a 20 54 68 65 20 45 50 5f 50 72 6f 70  *.** The EP_Prop
1a360 61 67 61 74 65 20 6d 61 73 6b 20 69 73 20 61 20  agate mask is a 
1a370 73 65 74 20 6f 66 20 70 72 6f 70 65 72 74 69 65  set of propertie
1a380 73 20 74 68 61 74 20 61 75 74 6f 6d 61 74 69 63  s that automatic
1a390 61 6c 6c 79 20 70 72 6f 70 61 67 61 74 65 0a 2a  ally propagate.*
1a3a0 2a 20 75 70 77 61 72 64 73 20 69 6e 74 6f 20 70  * upwards into p
1a3b0 61 72 65 6e 74 20 6e 6f 64 65 73 2e 0a 2a 2f 0a  arent nodes..*/.
1a3c0 23 64 65 66 69 6e 65 20 45 50 5f 50 72 6f 70 61  #define EP_Propa
1a3d0 67 61 74 65 20 28 45 50 5f 43 6f 6c 6c 61 74 65  gate (EP_Collate
1a3e0 7c 45 50 5f 53 75 62 71 75 65 72 79 7c 45 50 5f  |EP_Subquery|EP_
1a3f0 48 61 73 46 75 6e 63 29 0a 0a 2f 2a 0a 2a 2a 20  HasFunc)../*.** 
1a400 54 68 65 73 65 20 6d 61 63 72 6f 73 20 63 61 6e  These macros can
1a410 20 62 65 20 75 73 65 64 20 74 6f 20 74 65 73 74   be used to test
1a420 2c 20 73 65 74 2c 20 6f 72 20 63 6c 65 61 72 20  , set, or clear 
1a430 62 69 74 73 20 69 6e 20 74 68 65 0a 2a 2a 20 45  bits in the.** E
1a440 78 70 72 2e 66 6c 61 67 73 20 66 69 65 6c 64 2e  xpr.flags field.
1a450 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 45 78 70 72  .*/.#define Expr
1a460 48 61 73 50 72 6f 70 65 72 74 79 28 45 2c 50 29  HasProperty(E,P)
1a470 20 20 20 20 20 28 28 28 45 29 2d 3e 66 6c 61 67       (((E)->flag
1a480 73 26 28 50 29 29 21 3d 30 29 0a 23 64 65 66 69  s&(P))!=0).#defi
1a490 6e 65 20 45 78 70 72 48 61 73 41 6c 6c 50 72 6f  ne ExprHasAllPro
1a4a0 70 65 72 74 79 28 45 2c 50 29 20 20 28 28 28 45  perty(E,P)  (((E
1a4b0 29 2d 3e 66 6c 61 67 73 26 28 50 29 29 3d 3d 28  )->flags&(P))==(
1a4c0 50 29 29 0a 23 64 65 66 69 6e 65 20 45 78 70 72  P)).#define Expr
1a4d0 53 65 74 50 72 6f 70 65 72 74 79 28 45 2c 50 29  SetProperty(E,P)
1a4e0 20 20 20 20 20 28 45 29 2d 3e 66 6c 61 67 73 7c       (E)->flags|
1a4f0 3d 28 50 29 0a 23 64 65 66 69 6e 65 20 45 78 70  =(P).#define Exp
1a500 72 43 6c 65 61 72 50 72 6f 70 65 72 74 79 28 45  rClearProperty(E
1a510 2c 50 29 20 20 20 28 45 29 2d 3e 66 6c 61 67 73  ,P)   (E)->flags
1a520 26 3d 7e 28 50 29 0a 23 64 65 66 69 6e 65 20 45  &=~(P).#define E
1a530 78 70 72 41 6c 77 61 79 73 54 72 75 65 28 45 29  xprAlwaysTrue(E)
1a540 20 20 20 28 28 28 45 29 2d 3e 66 6c 61 67 73 26     (((E)->flags&
1a550 28 45 50 5f 46 72 6f 6d 4a 6f 69 6e 7c 45 50 5f  (EP_FromJoin|EP_
1a560 49 73 54 72 75 65 29 29 3d 3d 45 50 5f 49 73 54  IsTrue))==EP_IsT
1a570 72 75 65 29 0a 23 64 65 66 69 6e 65 20 45 78 70  rue).#define Exp
1a580 72 41 6c 77 61 79 73 46 61 6c 73 65 28 45 29 20  rAlwaysFalse(E) 
1a590 20 28 28 28 45 29 2d 3e 66 6c 61 67 73 26 28 45   (((E)->flags&(E
1a5a0 50 5f 46 72 6f 6d 4a 6f 69 6e 7c 45 50 5f 49 73  P_FromJoin|EP_Is
1a5b0 46 61 6c 73 65 29 29 3d 3d 45 50 5f 49 73 46 61  False))==EP_IsFa
1a5c0 6c 73 65 29 0a 0a 2f 2a 20 54 68 65 20 45 78 70  lse)../* The Exp
1a5d0 72 53 65 74 56 56 41 50 72 6f 70 65 72 74 79 28  rSetVVAProperty(
1a5e0 29 20 6d 61 63 72 6f 20 69 73 20 75 73 65 64 20  ) macro is used 
1a5f0 66 6f 72 20 56 65 72 69 66 69 63 61 74 69 6f 6e  for Verification
1a600 2c 20 56 61 6c 69 64 61 74 69 6f 6e 2c 0a 2a 2a  , Validation,.**
1a610 20 61 6e 64 20 41 63 63 72 65 64 69 74 61 74 69   and Accreditati
1a620 6f 6e 20 6f 6e 6c 79 2e 20 20 49 74 20 77 6f 72  on only.  It wor
1a630 6b 73 20 6c 69 6b 65 20 45 78 70 72 53 65 74 50  ks like ExprSetP
1a640 72 6f 70 65 72 74 79 28 29 20 64 75 72 69 6e 67  roperty() during
1a650 20 56 56 41 0a 2a 2a 20 70 72 6f 63 65 73 73 65   VVA.** processe
1a660 73 20 62 75 74 20 69 73 20 61 20 6e 6f 2d 6f 70  s but is a no-op
1a670 20 66 6f 72 20 64 65 6c 69 76 65 72 79 2e 0a 2a   for delivery..*
1a680 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
1a690 44 45 42 55 47 0a 23 20 64 65 66 69 6e 65 20 45  DEBUG.# define E
1a6a0 78 70 72 53 65 74 56 56 41 50 72 6f 70 65 72 74  xprSetVVAPropert
1a6b0 79 28 45 2c 50 29 20 20 28 45 29 2d 3e 66 6c 61  y(E,P)  (E)->fla
1a6c0 67 73 7c 3d 28 50 29 0a 23 65 6c 73 65 0a 23 20  gs|=(P).#else.# 
1a6d0 64 65 66 69 6e 65 20 45 78 70 72 53 65 74 56 56  define ExprSetVV
1a6e0 41 50 72 6f 70 65 72 74 79 28 45 2c 50 29 0a 23  AProperty(E,P).#
1a6f0 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 4d 61 63  endif../*.** Mac
1a700 72 6f 73 20 74 6f 20 64 65 74 65 72 6d 69 6e 65  ros to determine
1a710 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 62   the number of b
1a720 79 74 65 73 20 72 65 71 75 69 72 65 64 20 62 79  ytes required by
1a730 20 61 20 6e 6f 72 6d 61 6c 20 45 78 70 72 0a 2a   a normal Expr.*
1a740 2a 20 73 74 72 75 63 74 2c 20 61 6e 20 45 78 70  * struct, an Exp
1a750 72 20 73 74 72 75 63 74 20 77 69 74 68 20 74 68  r struct with th
1a760 65 20 45 50 5f 52 65 64 75 63 65 64 20 66 6c 61  e EP_Reduced fla
1a770 67 20 73 65 74 20 69 6e 20 45 78 70 72 2e 66 6c  g set in Expr.fl
1a780 61 67 73 0a 2a 2a 20 61 6e 64 20 61 6e 20 45 78  ags.** and an Ex
1a790 70 72 20 73 74 72 75 63 74 20 77 69 74 68 20 74  pr struct with t
1a7a0 68 65 20 45 50 5f 54 6f 6b 65 6e 4f 6e 6c 79 20  he EP_TokenOnly 
1a7b0 66 6c 61 67 20 73 65 74 2e 0a 2a 2f 0a 23 64 65  flag set..*/.#de
1a7c0 66 69 6e 65 20 45 58 50 52 5f 46 55 4c 4c 53 49  fine EXPR_FULLSI
1a7d0 5a 45 20 20 20 20 20 20 20 20 20 20 20 73 69 7a  ZE           siz
1a7e0 65 6f 66 28 45 78 70 72 29 20 20 20 20 20 20 20  eof(Expr)       
1a7f0 20 20 20 20 2f 2a 20 46 75 6c 6c 20 73 69 7a 65      /* Full size
1a800 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 58 50 52   */.#define EXPR
1a810 5f 52 45 44 55 43 45 44 53 49 5a 45 20 20 20 20  _REDUCEDSIZE    
1a820 20 20 20 20 6f 66 66 73 65 74 6f 66 28 45 78 70      offsetof(Exp
1a830 72 2c 69 54 61 62 6c 65 29 20 20 2f 2a 20 43 6f  r,iTable)  /* Co
1a840 6d 6d 6f 6e 20 66 65 61 74 75 72 65 73 20 2a 2f  mmon features */
1a850 0a 23 64 65 66 69 6e 65 20 45 58 50 52 5f 54 4f  .#define EXPR_TO
1a860 4b 45 4e 4f 4e 4c 59 53 49 5a 45 20 20 20 20 20  KENONLYSIZE     
1a870 20 6f 66 66 73 65 74 6f 66 28 45 78 70 72 2c 70   offsetof(Expr,p
1a880 4c 65 66 74 29 20 20 20 2f 2a 20 46 65 77 65 72  Left)   /* Fewer
1a890 20 66 65 61 74 75 72 65 73 20 2a 2f 0a 0a 2f 2a   features */../*
1a8a0 0a 2a 2a 20 46 6c 61 67 73 20 70 61 73 73 65 64  .** Flags passed
1a8b0 20 74 6f 20 74 68 65 20 73 71 6c 69 74 65 33 45   to the sqlite3E
1a8c0 78 70 72 44 75 70 28 29 20 66 75 6e 63 74 69 6f  xprDup() functio
1a8d0 6e 2e 20 53 65 65 20 74 68 65 20 68 65 61 64 65  n. See the heade
1a8e0 72 20 63 6f 6d 6d 65 6e 74 0a 2a 2a 20 61 62 6f  r comment.** abo
1a8f0 76 65 20 73 71 6c 69 74 65 33 45 78 70 72 44 75  ve sqlite3ExprDu
1a900 70 28 29 20 66 6f 72 20 64 65 74 61 69 6c 73 2e  p() for details.
1a910 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 45 58 50 52  .*/.#define EXPR
1a920 44 55 50 5f 52 45 44 55 43 45 20 20 20 20 20 20  DUP_REDUCE      
1a930 20 20 20 30 78 30 30 30 31 20 20 2f 2a 20 55 73     0x0001  /* Us
1a940 65 64 20 72 65 64 75 63 65 64 2d 73 69 7a 65 20  ed reduced-size 
1a950 45 78 70 72 20 6e 6f 64 65 73 20 2a 2f 0a 0a 2f  Expr nodes */../
1a960 2a 0a 2a 2a 20 54 72 75 65 20 69 66 20 74 68 65  *.** True if the
1a970 20 65 78 70 72 65 73 73 69 6f 6e 20 70 61 73 73   expression pass
1a980 65 64 20 61 73 20 61 6e 20 61 72 67 75 6d 65 6e  ed as an argumen
1a990 74 20 77 61 73 20 61 20 66 75 6e 63 74 69 6f 6e  t was a function
1a9a0 20 77 69 74 68 0a 2a 2a 20 61 6e 20 4f 56 45 52   with.** an OVER
1a9b0 28 29 20 63 6c 61 75 73 65 20 28 61 20 77 69 6e  () clause (a win
1a9c0 64 6f 77 20 66 75 6e 63 74 69 6f 6e 29 2e 0a 2a  dow function)..*
1a9d0 2f 0a 23 64 65 66 69 6e 65 20 49 73 57 69 6e 64  /.#define IsWind
1a9e0 6f 77 46 75 6e 63 28 70 29 20 28 20 5c 0a 20 20  owFunc(p) ( \.  
1a9f0 20 20 45 78 70 72 48 61 73 50 72 6f 70 65 72 74    ExprHasPropert
1aa00 79 28 28 70 29 2c 20 45 50 5f 57 69 6e 46 75 6e  y((p), EP_WinFun
1aa10 63 29 20 26 26 20 70 2d 3e 79 2e 70 57 69 6e 2d  c) && p->y.pWin-
1aa20 3e 65 46 72 6d 54 79 70 65 21 3d 54 4b 5f 46 49  >eFrmType!=TK_FI
1aa30 4c 54 45 52 20 5c 0a 29 0a 0a 2f 2a 0a 2a 2a 20  LTER \.)../*.** 
1aa40 41 20 6c 69 73 74 20 6f 66 20 65 78 70 72 65 73  A list of expres
1aa50 73 69 6f 6e 73 2e 20 20 45 61 63 68 20 65 78 70  sions.  Each exp
1aa60 72 65 73 73 69 6f 6e 20 6d 61 79 20 6f 70 74 69  ression may opti
1aa70 6f 6e 61 6c 6c 79 20 68 61 76 65 20 61 0a 2a 2a  onally have a.**
1aa80 20 6e 61 6d 65 2e 20 20 41 6e 20 65 78 70 72 2f   name.  An expr/
1aa90 6e 61 6d 65 20 63 6f 6d 62 69 6e 61 74 69 6f 6e  name combination
1aaa0 20 63 61 6e 20 62 65 20 75 73 65 64 20 69 6e 20   can be used in 
1aab0 73 65 76 65 72 61 6c 20 77 61 79 73 2c 20 73 75  several ways, su
1aac0 63 68 0a 2a 2a 20 61 73 20 74 68 65 20 6c 69 73  ch.** as the lis
1aad0 74 20 6f 66 20 22 65 78 70 72 20 41 53 20 49 44  t of "expr AS ID
1aae0 22 20 66 69 65 6c 64 73 20 66 6f 6c 6c 6f 77 69  " fields followi
1aaf0 6e 67 20 61 20 22 53 45 4c 45 43 54 22 20 6f 72  ng a "SELECT" or
1ab00 20 69 6e 20 74 68 65 0a 2a 2a 20 6c 69 73 74 20   in the.** list 
1ab10 6f 66 20 22 49 44 20 3d 20 65 78 70 72 22 20 69  of "ID = expr" i
1ab20 74 65 6d 73 20 69 6e 20 61 6e 20 55 50 44 41 54  tems in an UPDAT
1ab30 45 2e 20 20 41 20 6c 69 73 74 20 6f 66 20 65 78  E.  A list of ex
1ab40 70 72 65 73 73 69 6f 6e 73 20 63 61 6e 0a 2a 2a  pressions can.**
1ab50 20 61 6c 73 6f 20 62 65 20 75 73 65 64 20 61 73   also be used as
1ab60 20 74 68 65 20 61 72 67 75 6d 65 6e 74 20 74 6f   the argument to
1ab70 20 61 20 66 75 6e 63 74 69 6f 6e 2c 20 69 6e 20   a function, in 
1ab80 77 68 69 63 68 20 63 61 73 65 20 74 68 65 20 61  which case the a
1ab90 2e 7a 4e 61 6d 65 0a 2a 2a 20 66 69 65 6c 64 20  .zName.** field 
1aba0 69 73 20 6e 6f 74 20 75 73 65 64 2e 0a 2a 2a 0a  is not used..**.
1abb0 2a 2a 20 42 79 20 64 65 66 61 75 6c 74 20 74 68  ** By default th
1abc0 65 20 45 78 70 72 2e 7a 53 70 61 6e 20 66 69 65  e Expr.zSpan fie
1abd0 6c 64 20 68 6f 6c 64 73 20 61 20 68 75 6d 61 6e  ld holds a human
1abe0 2d 72 65 61 64 61 62 6c 65 20 64 65 73 63 72 69  -readable descri
1abf0 70 74 69 6f 6e 20 6f 66 0a 2a 2a 20 74 68 65 20  ption of.** the 
1ac00 65 78 70 72 65 73 73 69 6f 6e 20 74 68 61 74 20  expression that 
1ac10 69 73 20 75 73 65 64 20 69 6e 20 74 68 65 20 67  is used in the g
1ac20 65 6e 65 72 61 74 69 6f 6e 20 6f 66 20 65 72 72  eneration of err
1ac30 6f 72 20 6d 65 73 73 61 67 65 73 20 61 6e 64 0a  or messages and.
1ac40 2a 2a 20 63 6f 6c 75 6d 6e 20 6c 61 62 65 6c 73  ** column labels
1ac50 2e 20 20 49 6e 20 74 68 69 73 20 63 61 73 65 2c  .  In this case,
1ac60 20 45 78 70 72 2e 7a 53 70 61 6e 20 69 73 20 74   Expr.zSpan is t
1ac70 79 70 69 63 61 6c 6c 79 20 74 68 65 20 74 65 78  ypically the tex
1ac80 74 20 6f 66 20 61 0a 2a 2a 20 63 6f 6c 75 6d 6e  t of a.** column
1ac90 20 65 78 70 72 65 73 73 69 6f 6e 20 61 73 20 69   expression as i
1aca0 74 20 65 78 69 73 74 73 20 69 6e 20 61 20 53 45  t exists in a SE
1acb0 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 20  LECT statement. 
1acc0 20 48 6f 77 65 76 65 72 2c 20 69 66 0a 2a 2a 20   However, if.** 
1acd0 74 68 65 20 62 53 70 61 6e 49 73 54 61 62 20 66  the bSpanIsTab f
1ace0 6c 61 67 20 69 73 20 73 65 74 2c 20 74 68 65 6e  lag is set, then
1acf0 20 7a 53 70 61 6e 20 69 73 20 6f 76 65 72 6c 6f   zSpan is overlo
1ad00 61 64 65 64 20 74 6f 20 6d 65 61 6e 20 74 68 65  aded to mean the
1ad10 20 6e 61 6d 65 0a 2a 2a 20 6f 66 20 74 68 65 20   name.** of the 
1ad20 72 65 73 75 6c 74 20 63 6f 6c 75 6d 6e 20 69 6e  result column in
1ad30 20 74 68 65 20 66 6f 72 6d 3a 20 44 41 54 41 42   the form: DATAB
1ad40 41 53 45 2e 54 41 42 4c 45 2e 43 4f 4c 55 4d 4e  ASE.TABLE.COLUMN
1ad50 2e 20 20 54 68 69 73 20 6c 61 74 65 72 0a 2a 2a  .  This later.**
1ad60 20 66 6f 72 6d 20 69 73 20 75 73 65 64 20 66 6f   form is used fo
1ad70 72 20 6e 61 6d 65 20 72 65 73 6f 6c 75 74 69 6f  r name resolutio
1ad80 6e 20 77 69 74 68 20 6e 65 73 74 65 64 20 46 52  n with nested FR
1ad90 4f 4d 20 63 6c 61 75 73 65 73 2e 0a 2a 2f 0a 73  OM clauses..*/.s
1ada0 74 72 75 63 74 20 45 78 70 72 4c 69 73 74 20 7b  truct ExprList {
1adb0 0a 20 20 69 6e 74 20 6e 45 78 70 72 3b 20 20 20  .  int nExpr;   
1adc0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
1add0 62 65 72 20 6f 66 20 65 78 70 72 65 73 73 69 6f  ber of expressio
1ade0 6e 73 20 6f 6e 20 74 68 65 20 6c 69 73 74 20 2a  ns on the list *
1adf0 2f 0a 20 20 73 74 72 75 63 74 20 45 78 70 72 4c  /.  struct ExprL
1ae00 69 73 74 5f 69 74 65 6d 20 7b 20 2f 2a 20 46 6f  ist_item { /* Fo
1ae10 72 20 65 61 63 68 20 65 78 70 72 65 73 73 69 6f  r each expressio
1ae20 6e 20 69 6e 20 74 68 65 20 6c 69 73 74 20 2a 2f  n in the list */
1ae30 0a 20 20 20 20 45 78 70 72 20 2a 70 45 78 70 72  .    Expr *pExpr
1ae40 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
1ae50 54 68 65 20 70 61 72 73 65 20 74 72 65 65 20 66  The parse tree f
1ae60 6f 72 20 74 68 69 73 20 65 78 70 72 65 73 73 69  or this expressi
1ae70 6f 6e 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a  on */.    char *
1ae80 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20  zName;          
1ae90 20 20 2f 2a 20 54 6f 6b 65 6e 20 61 73 73 6f 63    /* Token assoc
1aea0 69 61 74 65 64 20 77 69 74 68 20 74 68 69 73 20  iated with this 
1aeb0 65 78 70 72 65 73 73 69 6f 6e 20 2a 2f 0a 20 20  expression */.  
1aec0 20 20 63 68 61 72 20 2a 7a 53 70 61 6e 3b 20 20    char *zSpan;  
1aed0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 72 69            /* Ori
1aee0 67 69 6e 61 6c 20 74 65 78 74 20 6f 66 20 74 68  ginal text of th
1aef0 65 20 65 78 70 72 65 73 73 69 6f 6e 20 2a 2f 0a  e expression */.
1af00 20 20 20 20 75 38 20 73 6f 72 74 4f 72 64 65 72      u8 sortOrder
1af10 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 31  ;           /* 1
1af20 20 66 6f 72 20 44 45 53 43 20 6f 72 20 30 20 66   for DESC or 0 f
1af30 6f 72 20 41 53 43 20 2a 2f 0a 20 20 20 20 75 6e  or ASC */.    un
1af40 73 69 67 6e 65 64 20 64 6f 6e 65 20 3a 31 3b 20  signed done :1; 
1af50 20 20 20 20 20 20 2f 2a 20 41 20 66 6c 61 67 20        /* A flag 
1af60 74 6f 20 69 6e 64 69 63 61 74 65 20 77 68 65 6e  to indicate when
1af70 20 70 72 6f 63 65 73 73 69 6e 67 20 69 73 20 66   processing is f
1af80 69 6e 69 73 68 65 64 20 2a 2f 0a 20 20 20 20 75  inished */.    u
1af90 6e 73 69 67 6e 65 64 20 62 53 70 61 6e 49 73 54  nsigned bSpanIsT
1afa0 61 62 20 3a 31 3b 20 2f 2a 20 7a 53 70 61 6e 20  ab :1; /* zSpan 
1afb0 68 6f 6c 64 73 20 44 42 2e 54 41 42 4c 45 2e 43  holds DB.TABLE.C
1afc0 4f 4c 55 4d 4e 20 2a 2f 0a 20 20 20 20 75 6e 73  OLUMN */.    uns
1afd0 69 67 6e 65 64 20 72 65 75 73 61 62 6c 65 20 3a  igned reusable :
1afe0 31 3b 20 20 20 2f 2a 20 43 6f 6e 73 74 61 6e 74  1;   /* Constant
1aff0 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 72   expression is r
1b000 65 75 73 61 62 6c 65 20 2a 2f 0a 20 20 20 20 75  eusable */.    u
1b010 6e 73 69 67 6e 65 64 20 62 53 6f 72 74 65 72 52  nsigned bSorterR
1b020 65 66 20 3a 31 3b 20 2f 2a 20 44 65 66 65 72 20  ef :1; /* Defer 
1b030 65 76 61 6c 75 61 74 69 6f 6e 20 75 6e 74 69 6c  evaluation until
1b040 20 61 66 74 65 72 20 73 6f 72 74 69 6e 67 20 2a   after sorting *
1b050 2f 0a 20 20 20 20 75 6e 69 6f 6e 20 7b 0a 20 20  /.    union {.  
1b060 20 20 20 20 73 74 72 75 63 74 20 7b 0a 20 20 20      struct {.   
1b070 20 20 20 20 20 75 31 36 20 69 4f 72 64 65 72 42       u16 iOrderB
1b080 79 43 6f 6c 3b 20 20 20 20 20 20 2f 2a 20 46 6f  yCol;      /* Fo
1b090 72 20 4f 52 44 45 52 20 42 59 2c 20 63 6f 6c 75  r ORDER BY, colu
1b0a0 6d 6e 20 6e 75 6d 62 65 72 20 69 6e 20 72 65 73  mn number in res
1b0b0 75 6c 74 20 73 65 74 20 2a 2f 0a 20 20 20 20 20  ult set */.     
1b0c0 20 20 20 75 31 36 20 69 41 6c 69 61 73 3b 20 20     u16 iAlias;  
1b0d0 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 64 65           /* Inde
1b0e0 78 20 69 6e 74 6f 20 50 61 72 73 65 2e 61 41 6c  x into Parse.aAl
1b0f0 69 61 73 5b 5d 20 66 6f 72 20 7a 4e 61 6d 65 20  ias[] for zName 
1b100 2a 2f 0a 20 20 20 20 20 20 7d 20 78 3b 0a 20 20  */.      } x;.  
1b110 20 20 20 20 69 6e 74 20 69 43 6f 6e 73 74 45 78      int iConstEx
1b120 70 72 52 65 67 3b 20 20 20 20 20 20 2f 2a 20 52  prReg;      /* R
1b130 65 67 69 73 74 65 72 20 69 6e 20 77 68 69 63 68  egister in which
1b140 20 45 78 70 72 20 76 61 6c 75 65 20 69 73 20 63   Expr value is c
1b150 61 63 68 65 64 20 2a 2f 0a 20 20 20 20 7d 20 75  ached */.    } u
1b160 3b 0a 20 20 7d 20 61 5b 31 5d 3b 20 20 20 20 20  ;.  } a[1];     
1b170 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1b180 4f 6e 65 20 73 6c 6f 74 20 66 6f 72 20 65 61 63  One slot for eac
1b190 68 20 65 78 70 72 65 73 73 69 6f 6e 20 69 6e 20  h expression in 
1b1a0 74 68 65 20 6c 69 73 74 20 2a 2f 0a 7d 3b 0a 0a  the list */.};..
1b1b0 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63  /*.** An instanc
1b1c0 65 20 6f 66 20 74 68 69 73 20 73 74 72 75 63 74  e of this struct
1b1d0 75 72 65 20 63 61 6e 20 68 6f 6c 64 20 61 20 73  ure can hold a s
1b1e0 69 6d 70 6c 65 20 6c 69 73 74 20 6f 66 20 69 64  imple list of id
1b1f0 65 6e 74 69 66 69 65 72 73 2c 0a 2a 2a 20 73 75  entifiers,.** su
1b200 63 68 20 61 73 20 74 68 65 20 6c 69 73 74 20 22  ch as the list "
1b210 61 2c 62 2c 63 22 20 69 6e 20 74 68 65 20 66 6f  a,b,c" in the fo
1b220 6c 6c 6f 77 69 6e 67 20 73 74 61 74 65 6d 65 6e  llowing statemen
1b230 74 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 20 49  ts:.**.**      I
1b240 4e 53 45 52 54 20 49 4e 54 4f 20 74 28 61 2c 62  NSERT INTO t(a,b
1b250 2c 63 29 20 56 41 4c 55 45 53 20 2e 2e 2e 3b 0a  ,c) VALUES ...;.
1b260 2a 2a 20 20 20 20 20 20 43 52 45 41 54 45 20 49  **      CREATE I
1b270 4e 44 45 58 20 69 64 78 20 4f 4e 20 74 28 61 2c  NDEX idx ON t(a,
1b280 62 2c 63 29 3b 0a 2a 2a 20 20 20 20 20 20 43 52  b,c);.**      CR
1b290 45 41 54 45 20 54 52 49 47 47 45 52 20 74 72 69  EATE TRIGGER tri
1b2a0 67 20 42 45 46 4f 52 45 20 55 50 44 41 54 45 20  g BEFORE UPDATE 
1b2b0 4f 4e 20 74 28 61 2c 62 2c 63 29 20 2e 2e 2e 3b  ON t(a,b,c) ...;
1b2c0 0a 2a 2a 0a 2a 2a 20 54 68 65 20 49 64 4c 69 73  .**.** The IdLis
1b2d0 74 2e 61 2e 69 64 78 20 66 69 65 6c 64 20 69 73  t.a.idx field is
1b2e0 20 75 73 65 64 20 77 68 65 6e 20 74 68 65 20 49   used when the I
1b2f0 64 4c 69 73 74 20 72 65 70 72 65 73 65 6e 74 73  dList represents
1b300 20 74 68 65 20 6c 69 73 74 20 6f 66 0a 2a 2a 20   the list of.** 
1b310 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 61 66 74  column names aft
1b320 65 72 20 61 20 74 61 62 6c 65 20 6e 61 6d 65 20  er a table name 
1b330 69 6e 20 61 6e 20 49 4e 53 45 52 54 20 73 74 61  in an INSERT sta
1b340 74 65 6d 65 6e 74 2e 20 20 49 6e 20 74 68 65 20  tement.  In the 
1b350 73 74 61 74 65 6d 65 6e 74 0a 2a 2a 0a 2a 2a 20  statement.**.** 
1b360 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20      INSERT INTO 
1b370 74 28 61 2c 62 2c 63 29 20 2e 2e 2e 0a 2a 2a 0a  t(a,b,c) ....**.
1b380 2a 2a 20 49 66 20 22 61 22 20 69 73 20 74 68 65  ** If "a" is the
1b390 20 6b 2d 74 68 20 63 6f 6c 75 6d 6e 20 6f 66 20   k-th column of 
1b3a0 74 61 62 6c 65 20 22 74 22 2c 20 74 68 65 6e 20  table "t", then 
1b3b0 49 64 4c 69 73 74 2e 61 5b 30 5d 2e 69 64 78 3d  IdList.a[0].idx=
1b3c0 3d 6b 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 49 64  =k..*/.struct Id
1b3d0 4c 69 73 74 20 7b 0a 20 20 73 74 72 75 63 74 20  List {.  struct 
1b3e0 49 64 4c 69 73 74 5f 69 74 65 6d 20 7b 0a 20 20  IdList_item {.  
1b3f0 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20    char *zName;  
1b400 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74      /* Name of t
1b410 68 65 20 69 64 65 6e 74 69 66 69 65 72 20 2a 2f  he identifier */
1b420 0a 20 20 20 20 69 6e 74 20 69 64 78 3b 20 20 20  .    int idx;   
1b430 20 20 20 20 20 20 20 2f 2a 20 49 6e 64 65 78 20         /* Index 
1b440 69 6e 20 73 6f 6d 65 20 54 61 62 6c 65 2e 61 43  in some Table.aC
1b450 6f 6c 5b 5d 20 6f 66 20 61 20 63 6f 6c 75 6d 6e  ol[] of a column
1b460 20 6e 61 6d 65 64 20 7a 4e 61 6d 65 20 2a 2f 0a   named zName */.
1b470 20 20 7d 20 2a 61 3b 0a 20 20 69 6e 74 20 6e 49    } *a;.  int nI
1b480 64 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75  d;         /* Nu
1b490 6d 62 65 72 20 6f 66 20 69 64 65 6e 74 69 66 69  mber of identifi
1b4a0 65 72 73 20 6f 6e 20 74 68 65 20 6c 69 73 74 20  ers on the list 
1b4b0 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  */.};../*.** The
1b4c0 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63   following struc
1b4d0 74 75 72 65 20 64 65 73 63 72 69 62 65 73 20 74  ture describes t
1b4e0 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 6f  he FROM clause o
1b4f0 66 20 61 20 53 45 4c 45 43 54 20 73 74 61 74 65  f a SELECT state
1b500 6d 65 6e 74 2e 0a 2a 2a 20 45 61 63 68 20 74 61  ment..** Each ta
1b510 62 6c 65 20 6f 72 20 73 75 62 71 75 65 72 79 20  ble or subquery 
1b520 69 6e 20 74 68 65 20 46 52 4f 4d 20 63 6c 61 75  in the FROM clau
1b530 73 65 20 69 73 20 61 20 73 65 70 61 72 61 74 65  se is a separate
1b540 20 65 6c 65 6d 65 6e 74 20 6f 66 0a 2a 2a 20 74   element of.** t
1b550 68 65 20 53 72 63 4c 69 73 74 2e 61 5b 5d 20 61  he SrcList.a[] a
1b560 72 72 61 79 2e 0a 2a 2a 0a 2a 2a 20 57 69 74 68  rray..**.** With
1b570 20 74 68 65 20 61 64 64 69 74 69 6f 6e 20 6f 66   the addition of
1b580 20 6d 75 6c 74 69 70 6c 65 20 64 61 74 61 62 61   multiple databa
1b590 73 65 20 73 75 70 70 6f 72 74 2c 20 74 68 65 20  se support, the 
1b5a0 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74  following struct
1b5b0 75 72 65 0a 2a 2a 20 63 61 6e 20 61 6c 73 6f 20  ure.** can also 
1b5c0 62 65 20 75 73 65 64 20 74 6f 20 64 65 73 63 72  be used to descr
1b5d0 69 62 65 20 61 20 70 61 72 74 69 63 75 6c 61 72  ibe a particular
1b5e0 20 74 61 62 6c 65 20 73 75 63 68 20 61 73 20 74   table such as t
1b5f0 68 65 20 74 61 62 6c 65 20 74 68 61 74 0a 2a 2a  he table that.**
1b600 20 69 73 20 6d 6f 64 69 66 69 65 64 20 62 79 20   is modified by 
1b610 61 6e 20 49 4e 53 45 52 54 2c 20 44 45 4c 45 54  an INSERT, DELET
1b620 45 2c 20 6f 72 20 55 50 44 41 54 45 20 73 74 61  E, or UPDATE sta
1b630 74 65 6d 65 6e 74 2e 20 20 49 6e 20 73 74 61 6e  tement.  In stan
1b640 64 61 72 64 20 53 51 4c 2c 0a 2a 2a 20 73 75 63  dard SQL,.** suc
1b650 68 20 61 20 74 61 62 6c 65 20 6d 75 73 74 20 62  h a table must b
1b660 65 20 61 20 73 69 6d 70 6c 65 20 6e 61 6d 65 3a  e a simple name:
1b670 20 49 44 2e 20 20 42 75 74 20 69 6e 20 53 51 4c   ID.  But in SQL
1b680 69 74 65 2c 20 74 68 65 20 74 61 62 6c 65 20 63  ite, the table c
1b690 61 6e 0a 2a 2a 20 6e 6f 77 20 62 65 20 69 64 65  an.** now be ide
1b6a0 6e 74 69 66 69 65 64 20 62 79 20 61 20 64 61 74  ntified by a dat
1b6b0 61 62 61 73 65 20 6e 61 6d 65 2c 20 61 20 64 6f  abase name, a do
1b6c0 74 2c 20 74 68 65 6e 20 74 68 65 20 74 61 62 6c  t, then the tabl
1b6d0 65 20 6e 61 6d 65 3a 20 49 44 2e 49 44 2e 0a 2a  e name: ID.ID..*
1b6e0 2a 0a 2a 2a 20 54 68 65 20 6a 6f 69 6e 74 79 70  *.** The jointyp
1b6f0 65 20 73 74 61 72 74 73 20 6f 75 74 20 73 68 6f  e starts out sho
1b700 77 69 6e 67 20 74 68 65 20 6a 6f 69 6e 20 74 79  wing the join ty
1b710 70 65 20 62 65 74 77 65 65 6e 20 74 68 65 20 63  pe between the c
1b720 75 72 72 65 6e 74 20 74 61 62 6c 65 0a 2a 2a 20  urrent table.** 
1b730 61 6e 64 20 74 68 65 20 6e 65 78 74 20 74 61 62  and the next tab
1b740 6c 65 20 6f 6e 20 74 68 65 20 6c 69 73 74 2e 20  le on the list. 
1b750 20 54 68 65 20 70 61 72 73 65 72 20 62 75 69 6c   The parser buil
1b760 64 73 20 74 68 65 20 6c 69 73 74 20 74 68 69 73  ds the list this
1b770 20 77 61 79 2e 0a 2a 2a 20 42 75 74 20 73 71 6c   way..** But sql
1b780 69 74 65 33 53 72 63 4c 69 73 74 53 68 69 66 74  ite3SrcListShift
1b790 4a 6f 69 6e 54 79 70 65 28 29 20 6c 61 74 65 72  JoinType() later
1b7a0 20 73 68 69 66 74 73 20 74 68 65 20 6a 6f 69 6e   shifts the join
1b7b0 74 79 70 65 73 20 73 6f 20 74 68 61 74 20 65 61  types so that ea
1b7c0 63 68 0a 2a 2a 20 6a 6f 69 6e 74 79 70 65 20 65  ch.** jointype e
1b7d0 78 70 72 65 73 73 65 73 20 74 68 65 20 6a 6f 69  xpresses the joi
1b7e0 6e 20 62 65 74 77 65 65 6e 20 74 68 65 20 74 61  n between the ta
1b7f0 62 6c 65 20 61 6e 64 20 74 68 65 20 70 72 65 76  ble and the prev
1b800 69 6f 75 73 20 74 61 62 6c 65 2e 0a 2a 2a 0a 2a  ious table..**.*
1b810 2a 20 49 6e 20 74 68 65 20 63 6f 6c 55 73 65 64  * In the colUsed
1b820 20 66 69 65 6c 64 2c 20 74 68 65 20 68 69 67 68   field, the high
1b830 2d 6f 72 64 65 72 20 62 69 74 20 28 62 69 74 20  -order bit (bit 
1b840 36 33 29 20 69 73 20 73 65 74 20 69 66 20 74 68  63) is set if th
1b850 65 20 74 61 62 6c 65 0a 2a 2a 20 63 6f 6e 74 61  e table.** conta
1b860 69 6e 73 20 6d 6f 72 65 20 74 68 61 6e 20 36 33  ins more than 63
1b870 20 63 6f 6c 75 6d 6e 73 20 61 6e 64 20 74 68 65   columns and the
1b880 20 36 34 2d 74 68 20 6f 72 20 6c 61 74 65 72 20   64-th or later 
1b890 63 6f 6c 75 6d 6e 20 69 73 20 75 73 65 64 2e 0a  column is used..
1b8a0 2a 2f 0a 73 74 72 75 63 74 20 53 72 63 4c 69 73  */.struct SrcLis
1b8b0 74 20 7b 0a 20 20 69 6e 74 20 6e 53 72 63 3b 20  t {.  int nSrc; 
1b8c0 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
1b8d0 20 6f 66 20 74 61 62 6c 65 73 20 6f 72 20 73 75   of tables or su
1b8e0 62 71 75 65 72 69 65 73 20 69 6e 20 74 68 65 20  bqueries in the 
1b8f0 46 52 4f 4d 20 63 6c 61 75 73 65 20 2a 2f 0a 20  FROM clause */. 
1b900 20 75 33 32 20 6e 41 6c 6c 6f 63 3b 20 20 20 20   u32 nAlloc;    
1b910 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65    /* Number of e
1b920 6e 74 72 69 65 73 20 61 6c 6c 6f 63 61 74 65 64  ntries allocated
1b930 20 69 6e 20 61 5b 5d 20 62 65 6c 6f 77 20 2a 2f   in a[] below */
1b940 0a 20 20 73 74 72 75 63 74 20 53 72 63 4c 69 73  .  struct SrcLis
1b950 74 5f 69 74 65 6d 20 7b 0a 20 20 20 20 53 63 68  t_item {.    Sch
1b960 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20 20 2f  ema *pSchema;  /
1b970 2a 20 53 63 68 65 6d 61 20 74 6f 20 77 68 69 63  * Schema to whic
1b980 68 20 74 68 69 73 20 69 74 65 6d 20 69 73 20 66  h this item is f
1b990 69 78 65 64 20 2a 2f 0a 20 20 20 20 63 68 61 72  ixed */.    char
1b9a0 20 2a 7a 44 61 74 61 62 61 73 65 3b 20 20 2f 2a   *zDatabase;  /*
1b9b0 20 4e 61 6d 65 20 6f 66 20 64 61 74 61 62 61 73   Name of databas
1b9c0 65 20 68 6f 6c 64 69 6e 67 20 74 68 69 73 20 74  e holding this t
1b9d0 61 62 6c 65 20 2a 2f 0a 20 20 20 20 63 68 61 72  able */.    char
1b9e0 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 2f 2a   *zName;      /*
1b9f0 20 4e 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62   Name of the tab
1ba00 6c 65 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a  le */.    char *
1ba10 7a 41 6c 69 61 73 3b 20 20 20 20 20 2f 2a 20 54  zAlias;     /* T
1ba20 68 65 20 22 42 22 20 70 61 72 74 20 6f 66 20 61  he "B" part of a
1ba30 20 22 41 20 41 53 20 42 22 20 70 68 72 61 73 65   "A AS B" phrase
1ba40 2e 20 20 7a 4e 61 6d 65 20 69 73 20 74 68 65 20  .  zName is the 
1ba50 22 41 22 20 2a 2f 0a 20 20 20 20 54 61 62 6c 65  "A" */.    Table
1ba60 20 2a 70 54 61 62 3b 20 20 20 20 20 20 2f 2a 20   *pTab;      /* 
1ba70 41 6e 20 53 51 4c 20 74 61 62 6c 65 20 63 6f 72  An SQL table cor
1ba80 72 65 73 70 6f 6e 64 69 6e 67 20 74 6f 20 7a 4e  responding to zN
1ba90 61 6d 65 20 2a 2f 0a 20 20 20 20 53 65 6c 65 63  ame */.    Selec
1baa0 74 20 2a 70 53 65 6c 65 63 74 3b 20 20 2f 2a 20  t *pSelect;  /* 
1bab0 41 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  A SELECT stateme
1bac0 6e 74 20 75 73 65 64 20 69 6e 20 70 6c 61 63 65  nt used in place
1bad0 20 6f 66 20 61 20 74 61 62 6c 65 20 6e 61 6d 65   of a table name
1bae0 20 2a 2f 0a 20 20 20 20 69 6e 74 20 61 64 64 72   */.    int addr
1baf0 46 69 6c 6c 53 75 62 3b 20 20 2f 2a 20 41 64 64  FillSub;  /* Add
1bb00 72 65 73 73 20 6f 66 20 73 75 62 72 6f 75 74 69  ress of subrouti
1bb10 6e 65 20 74 6f 20 6d 61 6e 69 66 65 73 74 20 61  ne to manifest a
1bb20 20 73 75 62 71 75 65 72 79 20 2a 2f 0a 20 20 20   subquery */.   
1bb30 20 69 6e 74 20 72 65 67 52 65 74 75 72 6e 3b 20   int regReturn; 
1bb40 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20 68     /* Register h
1bb50 6f 6c 64 69 6e 67 20 72 65 74 75 72 6e 20 61 64  olding return ad
1bb60 64 72 65 73 73 20 6f 66 20 61 64 64 72 46 69 6c  dress of addrFil
1bb70 6c 53 75 62 20 2a 2f 0a 20 20 20 20 69 6e 74 20  lSub */.    int 
1bb80 72 65 67 52 65 73 75 6c 74 3b 20 20 20 20 2f 2a  regResult;    /*
1bb90 20 52 65 67 69 73 74 65 72 73 20 68 6f 6c 64 69   Registers holdi
1bba0 6e 67 20 72 65 73 75 6c 74 73 20 6f 66 20 61 20  ng results of a 
1bbb0 63 6f 2d 72 6f 75 74 69 6e 65 20 2a 2f 0a 20 20  co-routine */.  
1bbc0 20 20 73 74 72 75 63 74 20 7b 0a 20 20 20 20 20    struct {.     
1bbd0 20 75 38 20 6a 6f 69 6e 74 79 70 65 3b 20 20 20   u8 jointype;   
1bbe0 20 20 20 2f 2a 20 54 79 70 65 20 6f 66 20 6a 6f     /* Type of jo
1bbf0 69 6e 20 62 65 74 77 65 65 6e 20 74 68 69 73 20  in between this 
1bc00 74 61 62 6c 65 20 61 6e 64 20 74 68 65 20 70 72  table and the pr
1bc10 65 76 69 6f 75 73 20 2a 2f 0a 20 20 20 20 20 20  evious */.      
1bc20 75 6e 73 69 67 6e 65 64 20 6e 6f 74 49 6e 64 65  unsigned notInde
1bc30 78 65 64 20 3a 31 3b 20 20 20 20 2f 2a 20 54 72  xed :1;    /* Tr
1bc40 75 65 20 69 66 20 74 68 65 72 65 20 69 73 20 61  ue if there is a
1bc50 20 4e 4f 54 20 49 4e 44 45 58 45 44 20 63 6c 61   NOT INDEXED cla
1bc60 75 73 65 20 2a 2f 0a 20 20 20 20 20 20 75 6e 73  use */.      uns
1bc70 69 67 6e 65 64 20 69 73 49 6e 64 65 78 65 64 42  igned isIndexedB
1bc80 79 20 3a 31 3b 20 20 20 2f 2a 20 54 72 75 65 20  y :1;   /* True 
1bc90 69 66 20 74 68 65 72 65 20 69 73 20 61 6e 20 49  if there is an I
1bca0 4e 44 45 58 45 44 20 42 59 20 63 6c 61 75 73 65  NDEXED BY clause
1bcb0 20 2a 2f 0a 20 20 20 20 20 20 75 6e 73 69 67 6e   */.      unsign
1bcc0 65 64 20 69 73 54 61 62 46 75 6e 63 20 3a 31 3b  ed isTabFunc :1;
1bcd0 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20       /* True if 
1bce0 74 61 62 6c 65 2d 76 61 6c 75 65 64 2d 66 75 6e  table-valued-fun
1bcf0 63 74 69 6f 6e 20 73 79 6e 74 61 78 20 2a 2f 0a  ction syntax */.
1bd00 20 20 20 20 20 20 75 6e 73 69 67 6e 65 64 20 69        unsigned i
1bd10 73 43 6f 72 72 65 6c 61 74 65 64 20 3a 31 3b 20  sCorrelated :1; 
1bd20 20 2f 2a 20 54 72 75 65 20 69 66 20 73 75 62 2d   /* True if sub-
1bd30 71 75 65 72 79 20 69 73 20 63 6f 72 72 65 6c 61  query is correla
1bd40 74 65 64 20 2a 2f 0a 20 20 20 20 20 20 75 6e 73  ted */.      uns
1bd50 69 67 6e 65 64 20 76 69 61 43 6f 72 6f 75 74 69  igned viaCorouti
1bd60 6e 65 20 3a 31 3b 20 20 2f 2a 20 49 6d 70 6c 65  ne :1;  /* Imple
1bd70 6d 65 6e 74 65 64 20 61 73 20 61 20 63 6f 2d 72  mented as a co-r
1bd80 6f 75 74 69 6e 65 20 2a 2f 0a 20 20 20 20 20 20  outine */.      
1bd90 75 6e 73 69 67 6e 65 64 20 69 73 52 65 63 75 72  unsigned isRecur
1bda0 73 69 76 65 20 3a 31 3b 20 20 20 2f 2a 20 54 72  sive :1;   /* Tr
1bdb0 75 65 20 66 6f 72 20 72 65 63 75 72 73 69 76 65  ue for recursive
1bdc0 20 72 65 66 65 72 65 6e 63 65 20 69 6e 20 57 49   reference in WI
1bdd0 54 48 20 2a 2f 0a 20 20 20 20 7d 20 66 67 3b 0a  TH */.    } fg;.
1bde0 20 20 20 20 69 6e 74 20 69 43 75 72 73 6f 72 3b      int iCursor;
1bdf0 20 20 20 20 20 20 2f 2a 20 54 68 65 20 56 44 42        /* The VDB
1be00 45 20 63 75 72 73 6f 72 20 6e 75 6d 62 65 72 20  E cursor number 
1be10 75 73 65 64 20 74 6f 20 61 63 63 65 73 73 20 74  used to access t
1be20 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20  his table */.   
1be30 20 45 78 70 72 20 2a 70 4f 6e 3b 20 20 20 20 20   Expr *pOn;     
1be40 20 20 20 2f 2a 20 54 68 65 20 4f 4e 20 63 6c 61     /* The ON cla
1be50 75 73 65 20 6f 66 20 61 20 6a 6f 69 6e 20 2a 2f  use of a join */
1be60 0a 20 20 20 20 49 64 4c 69 73 74 20 2a 70 55 73  .    IdList *pUs
1be70 69 6e 67 3b 20 20 20 2f 2a 20 54 68 65 20 55 53  ing;   /* The US
1be80 49 4e 47 20 63 6c 61 75 73 65 20 6f 66 20 61 20  ING clause of a 
1be90 6a 6f 69 6e 20 2a 2f 0a 20 20 20 20 42 69 74 6d  join */.    Bitm
1bea0 61 73 6b 20 63 6f 6c 55 73 65 64 3b 20 20 2f 2a  ask colUsed;  /*
1beb0 20 42 69 74 20 4e 20 28 31 3c 3c 4e 29 20 73 65   Bit N (1<<N) se
1bec0 74 20 69 66 20 63 6f 6c 75 6d 6e 20 4e 20 6f 66  t if column N of
1bed0 20 70 54 61 62 20 69 73 20 75 73 65 64 20 2a 2f   pTab is used */
1bee0 0a 20 20 20 20 75 6e 69 6f 6e 20 7b 0a 20 20 20  .    union {.   
1bef0 20 20 20 63 68 61 72 20 2a 7a 49 6e 64 65 78 65     char *zIndexe
1bf00 64 42 79 3b 20 20 20 20 2f 2a 20 49 64 65 6e 74  dBy;    /* Ident
1bf10 69 66 69 65 72 20 66 72 6f 6d 20 22 49 4e 44 45  ifier from "INDE
1bf20 58 45 44 20 42 59 20 3c 7a 49 6e 64 65 78 3e 22  XED BY <zIndex>"
1bf30 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 20 20 20   clause */.     
1bf40 20 45 78 70 72 4c 69 73 74 20 2a 70 46 75 6e 63   ExprList *pFunc
1bf50 41 72 67 3b 20 20 2f 2a 20 41 72 67 75 6d 65 6e  Arg;  /* Argumen
1bf60 74 73 20 74 6f 20 74 61 62 6c 65 2d 76 61 6c 75  ts to table-valu
1bf70 65 64 2d 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20  ed-function */. 
1bf80 20 20 20 7d 20 75 31 3b 0a 20 20 20 20 49 6e 64     } u1;.    Ind
1bf90 65 78 20 2a 70 49 42 49 6e 64 65 78 3b 20 20 2f  ex *pIBIndex;  /
1bfa0 2a 20 49 6e 64 65 78 20 73 74 72 75 63 74 75 72  * Index structur
1bfb0 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20  e corresponding 
1bfc0 74 6f 20 75 31 2e 7a 49 6e 64 65 78 65 64 42 79  to u1.zIndexedBy
1bfd0 20 2a 2f 0a 20 20 7d 20 61 5b 31 5d 3b 20 20 20   */.  } a[1];   
1bfe0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65            /* One
1bff0 20 65 6e 74 72 79 20 66 6f 72 20 65 61 63 68 20   entry for each 
1c000 69 64 65 6e 74 69 66 69 65 72 20 6f 6e 20 74 68  identifier on th
1c010 65 20 6c 69 73 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  e list */.};../*
1c020 0a 2a 2a 20 50 65 72 6d 69 74 74 65 64 20 76 61  .** Permitted va
1c030 6c 75 65 73 20 6f 66 20 74 68 65 20 53 72 63 4c  lues of the SrcL
1c040 69 73 74 2e 61 2e 6a 6f 69 6e 74 79 70 65 20 66  ist.a.jointype f
1c050 69 65 6c 64 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ield.*/.#define 
1c060 4a 54 5f 49 4e 4e 45 52 20 20 20 20 20 30 78 30  JT_INNER     0x0
1c070 30 30 31 20 20 20 20 2f 2a 20 41 6e 79 20 6b 69  001    /* Any ki
1c080 6e 64 20 6f 66 20 69 6e 6e 65 72 20 6f 72 20 63  nd of inner or c
1c090 72 6f 73 73 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65  ross join */.#de
1c0a0 66 69 6e 65 20 4a 54 5f 43 52 4f 53 53 20 20 20  fine JT_CROSS   
1c0b0 20 20 30 78 30 30 30 32 20 20 20 20 2f 2a 20 45    0x0002    /* E
1c0c0 78 70 6c 69 63 69 74 20 75 73 65 20 6f 66 20 74  xplicit use of t
1c0d0 68 65 20 43 52 4f 53 53 20 6b 65 79 77 6f 72 64  he CROSS keyword
1c0e0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f 4e   */.#define JT_N
1c0f0 41 54 55 52 41 4c 20 20 20 30 78 30 30 30 34 20  ATURAL   0x0004 
1c100 20 20 20 2f 2a 20 54 72 75 65 20 66 6f 72 20 61     /* True for a
1c110 20 22 6e 61 74 75 72 61 6c 22 20 6a 6f 69 6e 20   "natural" join 
1c120 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f 4c 45  */.#define JT_LE
1c130 46 54 20 20 20 20 20 20 30 78 30 30 30 38 20 20  FT      0x0008  
1c140 20 20 2f 2a 20 4c 65 66 74 20 6f 75 74 65 72 20    /* Left outer 
1c150 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  join */.#define 
1c160 4a 54 5f 52 49 47 48 54 20 20 20 20 20 30 78 30  JT_RIGHT     0x0
1c170 30 31 30 20 20 20 20 2f 2a 20 52 69 67 68 74 20  010    /* Right 
1c180 6f 75 74 65 72 20 6a 6f 69 6e 20 2a 2f 0a 23 64  outer join */.#d
1c190 65 66 69 6e 65 20 4a 54 5f 4f 55 54 45 52 20 20  efine JT_OUTER  
1c1a0 20 20 20 30 78 30 30 32 30 20 20 20 20 2f 2a 20     0x0020    /* 
1c1b0 54 68 65 20 22 4f 55 54 45 52 22 20 6b 65 79 77  The "OUTER" keyw
1c1c0 6f 72 64 20 69 73 20 70 72 65 73 65 6e 74 20 2a  ord is present *
1c1d0 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f 45 52 52  /.#define JT_ERR
1c1e0 4f 52 20 20 20 20 20 30 78 30 30 34 30 20 20 20  OR     0x0040   
1c1f0 20 2f 2a 20 75 6e 6b 6e 6f 77 6e 20 6f 72 20 75   /* unknown or u
1c200 6e 73 75 70 70 6f 72 74 65 64 20 6a 6f 69 6e 20  nsupported join 
1c210 74 79 70 65 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20  type */.../*.** 
1c220 46 6c 61 67 73 20 61 70 70 72 6f 70 72 69 61 74  Flags appropriat
1c230 65 20 66 6f 72 20 74 68 65 20 77 63 74 72 6c 46  e for the wctrlF
1c240 6c 61 67 73 20 70 61 72 61 6d 65 74 65 72 20 6f  lags parameter o
1c250 66 20 73 71 6c 69 74 65 33 57 68 65 72 65 42 65  f sqlite3WhereBe
1c260 67 69 6e 28 29 0a 2a 2a 20 61 6e 64 20 74 68 65  gin().** and the
1c270 20 57 68 65 72 65 49 6e 66 6f 2e 77 63 74 72 6c   WhereInfo.wctrl
1c280 46 6c 61 67 73 20 6d 65 6d 62 65 72 2e 0a 2a 2a  Flags member..**
1c290 0a 2a 2a 20 56 61 6c 75 65 20 63 6f 6e 73 74 72  .** Value constr
1c2a0 61 69 6e 74 73 20 28 65 6e 66 6f 72 63 65 64 20  aints (enforced 
1c2b0 76 69 61 20 61 73 73 65 72 74 28 29 29 3a 0a 2a  via assert()):.*
1c2c0 2a 20 20 20 20 20 57 48 45 52 45 5f 55 53 45 5f  *     WHERE_USE_
1c2d0 4c 49 4d 49 54 20 20 3d 3d 20 53 46 5f 46 69 78  LIMIT  == SF_Fix
1c2e0 65 64 4c 69 6d 69 74 0a 2a 2f 0a 23 64 65 66 69  edLimit.*/.#defi
1c2f0 6e 65 20 57 48 45 52 45 5f 4f 52 44 45 52 42 59  ne WHERE_ORDERBY
1c300 5f 4e 4f 52 4d 41 4c 20 20 20 30 78 30 30 30 30  _NORMAL   0x0000
1c310 20 2f 2a 20 4e 6f 2d 6f 70 20 2a 2f 0a 23 64 65   /* No-op */.#de
1c320 66 69 6e 65 20 57 48 45 52 45 5f 4f 52 44 45 52  fine WHERE_ORDER
1c330 42 59 5f 4d 49 4e 20 20 20 20 20 20 30 78 30 30  BY_MIN      0x00
1c340 30 31 20 2f 2a 20 4f 52 44 45 52 20 42 59 20 70  01 /* ORDER BY p
1c350 72 6f 63 65 73 73 69 6e 67 20 66 6f 72 20 6d 69  rocessing for mi
1c360 6e 28 29 20 66 75 6e 63 20 2a 2f 0a 23 64 65 66  n() func */.#def
1c370 69 6e 65 20 57 48 45 52 45 5f 4f 52 44 45 52 42  ine WHERE_ORDERB
1c380 59 5f 4d 41 58 20 20 20 20 20 20 30 78 30 30 30  Y_MAX      0x000
1c390 32 20 2f 2a 20 4f 52 44 45 52 20 42 59 20 70 72  2 /* ORDER BY pr
1c3a0 6f 63 65 73 73 69 6e 67 20 66 6f 72 20 6d 61 78  ocessing for max
1c3b0 28 29 20 66 75 6e 63 20 2a 2f 0a 23 64 65 66 69  () func */.#defi
1c3c0 6e 65 20 57 48 45 52 45 5f 4f 4e 45 50 41 53 53  ne WHERE_ONEPASS
1c3d0 5f 44 45 53 49 52 45 44 20 20 30 78 30 30 30 34  _DESIRED  0x0004
1c3e0 20 2f 2a 20 57 61 6e 74 20 74 6f 20 64 6f 20 6f   /* Want to do o
1c3f0 6e 65 2d 70 61 73 73 20 55 50 44 41 54 45 2f 44  ne-pass UPDATE/D
1c400 45 4c 45 54 45 20 2a 2f 0a 23 64 65 66 69 6e 65  ELETE */.#define
1c410 20 57 48 45 52 45 5f 4f 4e 45 50 41 53 53 5f 4d   WHERE_ONEPASS_M
1c420 55 4c 54 49 52 4f 57 20 30 78 30 30 30 38 20 2f  ULTIROW 0x0008 /
1c430 2a 20 4f 4e 45 50 41 53 53 20 69 73 20 6f 6b 20  * ONEPASS is ok 
1c440 77 69 74 68 20 6d 75 6c 74 69 70 6c 65 20 72 6f  with multiple ro
1c450 77 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48  ws */.#define WH
1c460 45 52 45 5f 44 55 50 4c 49 43 41 54 45 53 5f 4f  ERE_DUPLICATES_O
1c470 4b 20 20 20 20 30 78 30 30 31 30 20 2f 2a 20 4f  K    0x0010 /* O
1c480 6b 20 74 6f 20 72 65 74 75 72 6e 20 61 20 72 6f  k to return a ro
1c490 77 20 6d 6f 72 65 20 74 68 61 6e 20 6f 6e 63 65  w more than once
1c4a0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52   */.#define WHER
1c4b0 45 5f 4f 52 5f 53 55 42 43 4c 41 55 53 45 20 20  E_OR_SUBCLAUSE  
1c4c0 20 20 20 30 78 30 30 32 30 20 2f 2a 20 50 72 6f     0x0020 /* Pro
1c4d0 63 65 73 73 69 6e 67 20 61 20 73 75 62 2d 57 48  cessing a sub-WH
1c4e0 45 52 45 20 61 73 20 70 61 72 74 20 6f 66 0a 20  ERE as part of. 
1c4f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c510 20 20 20 20 20 2a 2a 20 74 68 65 20 4f 52 20 6f       ** the OR o
1c520 70 74 69 6d 69 7a 61 74 69 6f 6e 20 20 2a 2f 0a  ptimization  */.
1c530 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 47 52  #define WHERE_GR
1c540 4f 55 50 42 59 20 20 20 20 20 20 20 20 20 20 30  OUPBY          0
1c550 78 30 30 34 30 20 2f 2a 20 70 4f 72 64 65 72 42  x0040 /* pOrderB
1c560 79 20 69 73 20 72 65 61 6c 6c 79 20 61 20 47 52  y is really a GR
1c570 4f 55 50 20 42 59 20 2a 2f 0a 23 64 65 66 69 6e  OUP BY */.#defin
1c580 65 20 57 48 45 52 45 5f 44 49 53 54 49 4e 43 54  e WHERE_DISTINCT
1c590 42 59 20 20 20 20 20 20 20 30 78 30 30 38 30 20  BY       0x0080 
1c5a0 2f 2a 20 70 4f 72 64 65 72 62 79 20 69 73 20 72  /* pOrderby is r
1c5b0 65 61 6c 6c 79 20 61 20 44 49 53 54 49 4e 43 54  eally a DISTINCT
1c5c0 20 63 6c 61 75 73 65 20 2a 2f 0a 23 64 65 66 69   clause */.#defi
1c5d0 6e 65 20 57 48 45 52 45 5f 57 41 4e 54 5f 44 49  ne WHERE_WANT_DI
1c5e0 53 54 49 4e 43 54 20 20 20 20 30 78 30 31 30 30  STINCT    0x0100
1c5f0 20 2f 2a 20 41 6c 6c 20 6f 75 74 70 75 74 20 6e   /* All output n
1c600 65 65 64 73 20 74 6f 20 62 65 20 64 69 73 74 69  eeds to be disti
1c610 6e 63 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57  nct */.#define W
1c620 48 45 52 45 5f 53 4f 52 54 42 59 47 52 4f 55 50  HERE_SORTBYGROUP
1c630 20 20 20 20 20 20 30 78 30 32 30 30 20 2f 2a 20        0x0200 /* 
1c640 53 75 70 70 6f 72 74 20 73 71 6c 69 74 65 33 57  Support sqlite3W
1c650 68 65 72 65 49 73 53 6f 72 74 65 64 28 29 20 2a  hereIsSorted() *
1c660 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f  /.#define WHERE_
1c670 53 45 45 4b 5f 54 41 42 4c 45 20 20 20 20 20 20  SEEK_TABLE      
1c680 20 30 78 30 34 30 30 20 2f 2a 20 44 6f 20 6e 6f   0x0400 /* Do no
1c690 74 20 64 65 66 65 72 20 73 65 65 6b 73 20 6f 6e  t defer seeks on
1c6a0 20 6d 61 69 6e 20 74 61 62 6c 65 20 2a 2f 0a 23   main table */.#
1c6b0 64 65 66 69 6e 65 20 57 48 45 52 45 5f 4f 52 44  define WHERE_ORD
1c6c0 45 52 42 59 5f 4c 49 4d 49 54 20 20 20 20 30 78  ERBY_LIMIT    0x
1c6d0 30 38 30 30 20 2f 2a 20 4f 52 44 45 52 42 59 2b  0800 /* ORDERBY+
1c6e0 4c 49 4d 49 54 20 6f 6e 20 74 68 65 20 69 6e 6e  LIMIT on the inn
1c6f0 65 72 20 6c 6f 6f 70 20 2a 2f 0a 23 64 65 66 69  er loop */.#defi
1c700 6e 65 20 57 48 45 52 45 5f 53 45 45 4b 5f 55 4e  ne WHERE_SEEK_UN
1c710 49 51 5f 54 41 42 4c 45 20 20 30 78 31 30 30 30  IQ_TABLE  0x1000
1c720 20 2f 2a 20 44 6f 20 6e 6f 74 20 64 65 66 65 72   /* Do not defer
1c730 20 73 65 65 6b 73 20 69 66 20 75 6e 69 71 75 65   seeks if unique
1c740 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20   */.            
1c750 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 20              /*  
1c760 20 20 20 30 78 32 30 30 30 20 20 20 20 6e 6f 74     0x2000    not
1c770 20 63 75 72 72 65 6e 74 6c 79 20 75 73 65 64 20   currently used 
1c780 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45  */.#define WHERE
1c790 5f 55 53 45 5f 4c 49 4d 49 54 20 20 20 20 20 20  _USE_LIMIT      
1c7a0 20 20 30 78 34 30 30 30 20 2f 2a 20 55 73 65 20    0x4000 /* Use 
1c7b0 74 68 65 20 4c 49 4d 49 54 20 69 6e 20 63 6f 73  the LIMIT in cos
1c7c0 74 20 65 73 74 69 6d 61 74 65 73 20 2a 2f 0a 20  t estimates */. 
1c7d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c7e0 20 20 20 20 20 20 20 2f 2a 20 20 20 20 20 30 78         /*     0x
1c7f0 38 30 30 30 20 20 20 20 6e 6f 74 20 63 75 72 72  8000    not curr
1c800 65 6e 74 6c 79 20 75 73 65 64 20 2a 2f 0a 0a 2f  ently used */../
1c810 2a 20 41 6c 6c 6f 77 65 64 20 72 65 74 75 72 6e  * Allowed return
1c820 20 76 61 6c 75 65 73 20 66 72 6f 6d 20 73 71 6c   values from sql
1c830 69 74 65 33 57 68 65 72 65 49 73 44 69 73 74 69  ite3WhereIsDisti
1c840 6e 63 74 28 29 0a 2a 2f 0a 23 64 65 66 69 6e 65  nct().*/.#define
1c850 20 57 48 45 52 45 5f 44 49 53 54 49 4e 43 54 5f   WHERE_DISTINCT_
1c860 4e 4f 4f 50 20 20 20 20 20 20 30 20 20 2f 2a 20  NOOP      0  /* 
1c870 44 49 53 54 49 4e 43 54 20 6b 65 79 77 6f 72 64  DISTINCT keyword
1c880 20 6e 6f 74 20 75 73 65 64 20 2a 2f 0a 23 64 65   not used */.#de
1c890 66 69 6e 65 20 57 48 45 52 45 5f 44 49 53 54 49  fine WHERE_DISTI
1c8a0 4e 43 54 5f 55 4e 49 51 55 45 20 20 20 20 31 20  NCT_UNIQUE    1 
1c8b0 20 2f 2a 20 4e 6f 20 64 75 70 6c 69 63 61 74 65   /* No duplicate
1c8c0 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45  s */.#define WHE
1c8d0 52 45 5f 44 49 53 54 49 4e 43 54 5f 4f 52 44 45  RE_DISTINCT_ORDE
1c8e0 52 45 44 20 20 20 32 20 20 2f 2a 20 41 6c 6c 20  RED   2  /* All 
1c8f0 64 75 70 6c 69 63 61 74 65 73 20 61 72 65 20 61  duplicates are a
1c900 64 6a 61 63 65 6e 74 20 2a 2f 0a 23 64 65 66 69  djacent */.#defi
1c910 6e 65 20 57 48 45 52 45 5f 44 49 53 54 49 4e 43  ne WHERE_DISTINC
1c920 54 5f 55 4e 4f 52 44 45 52 45 44 20 33 20 20 2f  T_UNORDERED 3  /
1c930 2a 20 44 75 70 6c 69 63 61 74 65 73 20 61 72 65  * Duplicates are
1c940 20 73 63 61 74 74 65 72 65 64 20 2a 2f 0a 0a 2f   scattered */../
1c950 2a 0a 2a 2a 20 41 20 4e 61 6d 65 43 6f 6e 74 65  *.** A NameConte
1c960 78 74 20 64 65 66 69 6e 65 73 20 61 20 63 6f 6e  xt defines a con
1c970 74 65 78 74 20 69 6e 20 77 68 69 63 68 20 74 6f  text in which to
1c980 20 72 65 73 6f 6c 76 65 20 74 61 62 6c 65 20 61   resolve table a
1c990 6e 64 20 63 6f 6c 75 6d 6e 0a 2a 2a 20 6e 61 6d  nd column.** nam
1c9a0 65 73 2e 20 20 54 68 65 20 63 6f 6e 74 65 78 74  es.  The context
1c9b0 20 63 6f 6e 73 69 73 74 73 20 6f 66 20 61 20 6c   consists of a l
1c9c0 69 73 74 20 6f 66 20 74 61 62 6c 65 73 20 28 74  ist of tables (t
1c9d0 68 65 20 70 53 72 63 4c 69 73 74 29 20 66 69 65  he pSrcList) fie
1c9e0 6c 64 20 61 6e 64 0a 2a 2a 20 61 20 6c 69 73 74  ld and.** a list
1c9f0 20 6f 66 20 6e 61 6d 65 64 20 65 78 70 72 65 73   of named expres
1ca00 73 69 6f 6e 20 28 70 45 4c 69 73 74 29 2e 20 20  sion (pEList).  
1ca10 54 68 65 20 6e 61 6d 65 64 20 65 78 70 72 65 73  The named expres
1ca20 73 69 6f 6e 20 6c 69 73 74 20 6d 61 79 0a 2a 2a  sion list may.**
1ca30 20 62 65 20 4e 55 4c 4c 2e 20 20 54 68 65 20 70   be NULL.  The p
1ca40 53 72 63 20 63 6f 72 72 65 73 70 6f 6e 64 73 20  Src corresponds 
1ca50 74 6f 20 74 68 65 20 46 52 4f 4d 20 63 6c 61 75  to the FROM clau
1ca60 73 65 20 6f 66 20 61 20 53 45 4c 45 43 54 20 6f  se of a SELECT o
1ca70 72 0a 2a 2a 20 74 6f 20 74 68 65 20 74 61 62 6c  r.** to the tabl
1ca80 65 20 62 65 69 6e 67 20 6f 70 65 72 61 74 65 64  e being operated
1ca90 20 6f 6e 20 62 79 20 49 4e 53 45 52 54 2c 20 55   on by INSERT, U
1caa0 50 44 41 54 45 2c 20 6f 72 20 44 45 4c 45 54 45  PDATE, or DELETE
1cab0 2e 20 20 54 68 65 0a 2a 2a 20 70 45 4c 69 73 74  .  The.** pEList
1cac0 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20   corresponds to 
1cad0 74 68 65 20 72 65 73 75 6c 74 20 73 65 74 20 6f  the result set o
1cae0 66 20 61 20 53 45 4c 45 43 54 20 61 6e 64 20 69  f a SELECT and i
1caf0 73 20 4e 55 4c 4c 20 66 6f 72 0a 2a 2a 20 6f 74  s NULL for.** ot
1cb00 68 65 72 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a  her statements..
1cb10 2a 2a 0a 2a 2a 20 4e 61 6d 65 43 6f 6e 74 65 78  **.** NameContex
1cb20 74 73 20 63 61 6e 20 62 65 20 6e 65 73 74 65 64  ts can be nested
1cb30 2e 20 20 57 68 65 6e 20 72 65 73 6f 6c 76 69 6e  .  When resolvin
1cb40 67 20 6e 61 6d 65 73 2c 20 74 68 65 20 69 6e 6e  g names, the inn
1cb50 65 72 2d 6d 6f 73 74 0a 2a 2a 20 63 6f 6e 74 65  er-most.** conte
1cb60 78 74 20 69 73 20 73 65 61 72 63 68 65 64 20 66  xt is searched f
1cb70 69 72 73 74 2e 20 20 49 66 20 6e 6f 20 6d 61 74  irst.  If no mat
1cb80 63 68 20 69 73 20 66 6f 75 6e 64 2c 20 74 68 65  ch is found, the
1cb90 20 6e 65 78 74 20 6f 75 74 65 72 0a 2a 2a 20 63   next outer.** c
1cba0 6f 6e 74 65 78 74 20 69 73 20 63 68 65 63 6b 65  ontext is checke
1cbb0 64 2e 20 20 49 66 20 74 68 65 72 65 20 69 73 20  d.  If there is 
1cbc0 73 74 69 6c 6c 20 6e 6f 20 6d 61 74 63 68 2c 20  still no match, 
1cbd0 74 68 65 20 6e 65 78 74 20 63 6f 6e 74 65 78 74  the next context
1cbe0 0a 2a 2a 20 69 73 20 63 68 65 63 6b 65 64 2e 20  .** is checked. 
1cbf0 20 54 68 69 73 20 70 72 6f 63 65 73 73 20 63 6f   This process co
1cc00 6e 74 69 6e 75 65 73 20 75 6e 74 69 6c 20 65 69  ntinues until ei
1cc10 74 68 65 72 20 61 20 6d 61 74 63 68 20 69 73 20  ther a match is 
1cc20 66 6f 75 6e 64 0a 2a 2a 20 6f 72 20 61 6c 6c 20  found.** or all 
1cc30 63 6f 6e 74 65 78 74 73 20 61 72 65 20 63 68 65  contexts are che
1cc40 63 6b 2e 20 20 57 68 65 6e 20 61 20 6d 61 74 63  ck.  When a matc
1cc50 68 20 69 73 20 66 6f 75 6e 64 2c 20 74 68 65 20  h is found, the 
1cc60 6e 52 65 66 20 6d 65 6d 62 65 72 20 6f 66 0a 2a  nRef member of.*
1cc70 2a 20 74 68 65 20 63 6f 6e 74 65 78 74 20 63 6f  * the context co
1cc80 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 6d 61 74  ntaining the mat
1cc90 63 68 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65  ch is incremente
1cca0 64 2e 0a 2a 2a 0a 2a 2a 20 45 61 63 68 20 73 75  d..**.** Each su
1ccb0 62 71 75 65 72 79 20 67 65 74 73 20 61 20 6e 65  bquery gets a ne
1ccc0 77 20 4e 61 6d 65 43 6f 6e 74 65 78 74 2e 20 20  w NameContext.  
1ccd0 54 68 65 20 70 4e 65 78 74 20 66 69 65 6c 64 20  The pNext field 
1cce0 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 0a 2a 2a  points to the.**
1ccf0 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20 69 6e 20   NameContext in 
1cd00 74 68 65 20 70 61 72 65 6e 74 20 71 75 65 72 79  the parent query
1cd10 2e 20 20 54 68 75 73 20 74 68 65 20 70 72 6f 63  .  Thus the proc
1cd20 65 73 73 20 6f 66 20 73 63 61 6e 6e 69 6e 67 20  ess of scanning 
1cd30 74 68 65 0a 2a 2a 20 4e 61 6d 65 43 6f 6e 74 65  the.** NameConte
1cd40 78 74 20 6c 69 73 74 20 63 6f 72 72 65 73 70 6f  xt list correspo
1cd50 6e 64 73 20 74 6f 20 73 65 61 72 63 68 69 6e 67  nds to searching
1cd60 20 74 68 72 6f 75 67 68 20 73 75 63 63 65 73 73   through success
1cd70 69 76 65 6c 79 20 6f 75 74 65 72 0a 2a 2a 20 73  ively outer.** s
1cd80 75 62 71 75 65 72 69 65 73 20 6c 6f 6f 6b 69 6e  ubqueries lookin
1cd90 67 20 66 6f 72 20 61 20 6d 61 74 63 68 2e 0a 2a  g for a match..*
1cda0 2f 0a 73 74 72 75 63 74 20 4e 61 6d 65 43 6f 6e  /.struct NameCon
1cdb0 74 65 78 74 20 7b 0a 20 20 50 61 72 73 65 20 2a  text {.  Parse *
1cdc0 70 50 61 72 73 65 3b 20 20 20 20 20 20 20 2f 2a  pParse;       /*
1cdd0 20 54 68 65 20 70 61 72 73 65 72 20 2a 2f 0a 20   The parser */. 
1cde0 20 53 72 63 4c 69 73 74 20 2a 70 53 72 63 4c 69   SrcList *pSrcLi
1cdf0 73 74 3b 20 20 20 2f 2a 20 4f 6e 65 20 6f 72 20  st;   /* One or 
1ce00 6d 6f 72 65 20 74 61 62 6c 65 73 20 75 73 65 64  more tables used
1ce10 20 74 6f 20 72 65 73 6f 6c 76 65 20 6e 61 6d 65   to resolve name
1ce20 73 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b 0a 20  s */.  union {. 
1ce30 20 20 20 45 78 70 72 4c 69 73 74 20 2a 70 45 4c     ExprList *pEL
1ce40 69 73 74 3b 20 20 20 20 2f 2a 20 4f 70 74 69 6f  ist;    /* Optio
1ce50 6e 61 6c 20 6c 69 73 74 20 6f 66 20 72 65 73 75  nal list of resu
1ce60 6c 74 2d 73 65 74 20 63 6f 6c 75 6d 6e 73 20 2a  lt-set columns *
1ce70 2f 0a 20 20 20 20 41 67 67 49 6e 66 6f 20 2a 70  /.    AggInfo *p
1ce80 41 67 67 49 6e 66 6f 3b 20 20 20 2f 2a 20 49 6e  AggInfo;   /* In
1ce90 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20  formation about 
1cea0 61 67 67 72 65 67 61 74 65 73 20 61 74 20 74 68  aggregates at th
1ceb0 69 73 20 6c 65 76 65 6c 20 2a 2f 0a 20 20 20 20  is level */.    
1cec0 55 70 73 65 72 74 20 2a 70 55 70 73 65 72 74 3b  Upsert *pUpsert;
1ced0 20 20 20 20 20 2f 2a 20 4f 4e 20 43 4f 4e 46 4c       /* ON CONFL
1cee0 49 43 54 20 63 6c 61 75 73 65 20 69 6e 66 6f 72  ICT clause infor
1cef0 6d 61 74 69 6f 6e 20 66 72 6f 6d 20 61 6e 20 75  mation from an u
1cf00 70 73 65 72 74 20 2a 2f 0a 20 20 7d 20 75 4e 43  psert */.  } uNC
1cf10 3b 0a 20 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20  ;.  NameContext 
1cf20 2a 70 4e 65 78 74 3b 20 20 2f 2a 20 4e 65 78 74  *pNext;  /* Next
1cf30 20 6f 75 74 65 72 20 6e 61 6d 65 20 63 6f 6e 74   outer name cont
1cf40 65 78 74 2e 20 20 4e 55 4c 4c 20 66 6f 72 20 6f  ext.  NULL for o
1cf50 75 74 65 72 6d 6f 73 74 20 2a 2f 0a 20 20 69 6e  utermost */.  in
1cf60 74 20 6e 52 65 66 3b 20 20 20 20 20 20 20 20 20  t nRef;         
1cf70 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
1cf80 6e 61 6d 65 73 20 72 65 73 6f 6c 76 65 64 20 62  names resolved b
1cf90 79 20 74 68 69 73 20 63 6f 6e 74 65 78 74 20 2a  y this context *
1cfa0 2f 0a 20 20 69 6e 74 20 6e 45 72 72 3b 20 20 20  /.  int nErr;   
1cfb0 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
1cfc0 65 72 20 6f 66 20 65 72 72 6f 72 73 20 65 6e 63  er of errors enc
1cfd0 6f 75 6e 74 65 72 65 64 20 77 68 69 6c 65 20 72  ountered while r
1cfe0 65 73 6f 6c 76 69 6e 67 20 6e 61 6d 65 73 20 2a  esolving names *
1cff0 2f 0a 20 20 69 6e 74 20 6e 63 46 6c 61 67 73 3b  /.  int ncFlags;
1d000 20 20 20 20 20 20 20 20 20 2f 2a 20 5a 65 72 6f           /* Zero
1d010 20 6f 72 20 6d 6f 72 65 20 4e 43 5f 2a 20 66 6c   or more NC_* fl
1d020 61 67 73 20 64 65 66 69 6e 65 64 20 62 65 6c 6f  ags defined belo
1d030 77 20 2a 2f 0a 20 20 53 65 6c 65 63 74 20 2a 70  w */.  Select *p
1d040 57 69 6e 53 65 6c 65 63 74 3b 20 20 2f 2a 20 53  WinSelect;  /* S
1d050 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 20  ELECT statement 
1d060 66 6f 72 20 61 6e 79 20 77 69 6e 64 6f 77 20 66  for any window f
1d070 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a 7d 3b 0a 0a  unctions */.};..
1d080 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 76 61  /*.** Allowed va
1d090 6c 75 65 73 20 66 6f 72 20 74 68 65 20 4e 61 6d  lues for the Nam
1d0a0 65 43 6f 6e 74 65 78 74 2c 20 6e 63 46 6c 61 67  eContext, ncFlag
1d0b0 73 20 66 69 65 6c 64 2e 0a 2a 2a 0a 2a 2a 20 56  s field..**.** V
1d0c0 61 6c 75 65 20 63 6f 6e 73 74 72 61 69 6e 74 73  alue constraints
1d0d0 20 28 61 6c 6c 20 63 68 65 63 6b 65 64 20 76 69   (all checked vi
1d0e0 61 20 61 73 73 65 72 74 28 29 29 3a 0a 2a 2a 20  a assert()):.** 
1d0f0 20 20 20 4e 43 5f 48 61 73 41 67 67 20 20 20 20     NC_HasAgg    
1d100 3d 3d 20 53 46 5f 48 61 73 41 67 67 20 20 20 20  == SF_HasAgg    
1d110 3d 3d 20 45 50 5f 41 67 67 0a 2a 2a 20 20 20 20  == EP_Agg.**    
1d120 4e 43 5f 4d 69 6e 4d 61 78 41 67 67 20 3d 3d 20  NC_MinMaxAgg == 
1d130 53 46 5f 4d 69 6e 4d 61 78 41 67 67 20 3d 3d 20  SF_MinMaxAgg == 
1d140 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4d 49 4e 4d  SQLITE_FUNC_MINM
1d150 41 58 0a 2a 2a 20 20 20 20 4e 43 5f 48 61 73 57  AX.**    NC_HasW
1d160 69 6e 20 20 20 20 3d 3d 20 45 50 5f 57 69 6e 0a  in    == EP_Win.
1d170 2a 2a 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43  **.*/.#define NC
1d180 5f 41 6c 6c 6f 77 41 67 67 20 20 30 78 30 30 30  _AllowAgg  0x000
1d190 31 20 20 2f 2a 20 41 67 67 72 65 67 61 74 65 20  1  /* Aggregate 
1d1a0 66 75 6e 63 74 69 6f 6e 73 20 61 72 65 20 61 6c  functions are al
1d1b0 6c 6f 77 65 64 20 68 65 72 65 20 2a 2f 0a 23 64  lowed here */.#d
1d1c0 65 66 69 6e 65 20 4e 43 5f 50 61 72 74 49 64 78  efine NC_PartIdx
1d1d0 20 20 20 30 78 30 30 30 32 20 20 2f 2a 20 54 72     0x0002  /* Tr
1d1e0 75 65 20 69 66 20 72 65 73 6f 6c 76 69 6e 67 20  ue if resolving 
1d1f0 61 20 70 61 72 74 69 61 6c 20 69 6e 64 65 78 20  a partial index 
1d200 57 48 45 52 45 20 2a 2f 0a 23 64 65 66 69 6e 65  WHERE */.#define
1d210 20 4e 43 5f 49 73 43 68 65 63 6b 20 20 20 30 78   NC_IsCheck   0x
1d220 30 30 30 34 20 20 2f 2a 20 54 72 75 65 20 69 66  0004  /* True if
1d230 20 72 65 73 6f 6c 76 69 6e 67 20 6e 61 6d 65 73   resolving names
1d240 20 69 6e 20 61 20 43 48 45 43 4b 20 63 6f 6e 73   in a CHECK cons
1d250 74 72 61 69 6e 74 20 2a 2f 0a 23 64 65 66 69 6e  traint */.#defin
1d260 65 20 4e 43 5f 49 6e 41 67 67 46 75 6e 63 20 30  e NC_InAggFunc 0
1d270 78 30 30 30 38 20 20 2f 2a 20 54 72 75 65 20 69  x0008  /* True i
1d280 66 20 61 6e 61 6c 79 7a 69 6e 67 20 61 72 67 75  f analyzing argu
1d290 6d 65 6e 74 73 20 74 6f 20 61 6e 20 61 67 67 20  ments to an agg 
1d2a0 66 75 6e 63 20 2a 2f 0a 23 64 65 66 69 6e 65 20  func */.#define 
1d2b0 4e 43 5f 48 61 73 41 67 67 20 20 20 20 30 78 30  NC_HasAgg    0x0
1d2c0 30 31 30 20 20 2f 2a 20 4f 6e 65 20 6f 72 20 6d  010  /* One or m
1d2d0 6f 72 65 20 61 67 67 72 65 67 61 74 65 20 66 75  ore aggregate fu
1d2e0 6e 63 74 69 6f 6e 73 20 73 65 65 6e 20 2a 2f 0a  nctions seen */.
1d2f0 23 64 65 66 69 6e 65 20 4e 43 5f 49 64 78 45 78  #define NC_IdxEx
1d300 70 72 20 20 20 30 78 30 30 32 30 20 20 2f 2a 20  pr   0x0020  /* 
1d310 54 72 75 65 20 69 66 20 72 65 73 6f 6c 76 69 6e  True if resolvin
1d320 67 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 43 52 45  g columns of CRE
1d330 41 54 45 20 49 4e 44 45 58 20 2a 2f 0a 23 64 65  ATE INDEX */.#de
1d340 66 69 6e 65 20 4e 43 5f 56 61 72 53 65 6c 65 63  fine NC_VarSelec
1d350 74 20 30 78 30 30 34 30 20 20 2f 2a 20 41 20 63  t 0x0040  /* A c
1d360 6f 72 72 65 6c 61 74 65 64 20 73 75 62 71 75 65  orrelated subque
1d370 72 79 20 68 61 73 20 62 65 65 6e 20 73 65 65 6e  ry has been seen
1d380 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 55   */.#define NC_U
1d390 45 4c 69 73 74 20 20 20 20 30 78 30 30 38 30 20  EList    0x0080 
1d3a0 20 2f 2a 20 54 72 75 65 20 69 66 20 75 4e 43 2e   /* True if uNC.
1d3b0 70 45 4c 69 73 74 20 69 73 20 75 73 65 64 20 2a  pEList is used *
1d3c0 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 55 41 67  /.#define NC_UAg
1d3d0 67 49 6e 66 6f 20 20 30 78 30 31 30 30 20 20 2f  gInfo  0x0100  /
1d3e0 2a 20 54 72 75 65 20 69 66 20 75 4e 43 2e 70 41  * True if uNC.pA
1d3f0 67 67 49 6e 66 6f 20 69 73 20 75 73 65 64 20 2a  ggInfo is used *
1d400 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 55 55 70  /.#define NC_UUp
1d410 73 65 72 74 20 20 20 30 78 30 32 30 30 20 20 2f  sert   0x0200  /
1d420 2a 20 54 72 75 65 20 69 66 20 75 4e 43 2e 70 55  * True if uNC.pU
1d430 70 73 65 72 74 20 69 73 20 75 73 65 64 20 2a 2f  psert is used */
1d440 0a 23 64 65 66 69 6e 65 20 4e 43 5f 4d 69 6e 4d  .#define NC_MinM
1d450 61 78 41 67 67 20 30 78 31 30 30 30 20 20 2f 2a  axAgg 0x1000  /*
1d460 20 6d 69 6e 2f 6d 61 78 20 61 67 67 72 65 67 61   min/max aggrega
1d470 74 65 73 20 73 65 65 6e 2e 20 20 53 65 65 20 6e  tes seen.  See n
1d480 6f 74 65 20 61 62 6f 76 65 20 2a 2f 0a 23 64 65  ote above */.#de
1d490 66 69 6e 65 20 4e 43 5f 43 6f 6d 70 6c 65 78 20  fine NC_Complex 
1d4a0 20 20 30 78 32 30 30 30 20 20 2f 2a 20 54 72 75    0x2000  /* Tru
1d4b0 65 20 69 66 20 61 20 66 75 6e 63 74 69 6f 6e 20  e if a function 
1d4c0 6f 72 20 73 75 62 71 75 65 72 79 20 73 65 65 6e  or subquery seen
1d4d0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 41   */.#define NC_A
1d4e0 6c 6c 6f 77 57 69 6e 20 20 30 78 34 30 30 30 20  llowWin  0x4000 
1d4f0 20 2f 2a 20 57 69 6e 64 6f 77 20 66 75 6e 63 74   /* Window funct
1d500 69 6f 6e 73 20 61 72 65 20 61 6c 6c 6f 77 65 64  ions are allowed
1d510 20 68 65 72 65 20 2a 2f 0a 23 64 65 66 69 6e 65   here */.#define
1d520 20 4e 43 5f 48 61 73 57 69 6e 20 20 20 20 30 78   NC_HasWin    0x
1d530 38 30 30 30 20 20 2f 2a 20 4f 6e 65 20 6f 72 20  8000  /* One or 
1d540 6d 6f 72 65 20 77 69 6e 64 6f 77 20 66 75 6e 63  more window func
1d550 74 69 6f 6e 73 20 73 65 65 6e 20 2a 2f 0a 23 64  tions seen */.#d
1d560 65 66 69 6e 65 20 4e 43 5f 49 73 44 44 4c 20 20  efine NC_IsDDL  
1d570 20 20 30 78 31 30 30 30 30 20 20 2f 2a 20 52 65    0x10000  /* Re
1d580 73 6f 6c 76 69 6e 67 20 6e 61 6d 65 73 20 69 6e  solving names in
1d590 20 61 20 43 52 45 41 54 45 20 73 74 61 74 65 6d   a CREATE statem
1d5a0 65 6e 74 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 6e  ent */../*.** An
1d5b0 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65   instance of the
1d5c0 20 66 6f 6c 6c 6f 77 69 6e 67 20 6f 62 6a 65 63   following objec
1d5d0 74 20 64 65 73 63 72 69 62 65 73 20 61 20 73 69  t describes a si
1d5e0 6e 67 6c 65 20 4f 4e 20 43 4f 4e 46 4c 49 43 54  ngle ON CONFLICT
1d5f0 0a 2a 2a 20 63 6c 61 75 73 65 20 69 6e 20 61 6e  .** clause in an
1d600 20 75 70 73 65 72 74 2e 0a 2a 2a 0a 2a 2a 20 54   upsert..**.** T
1d610 68 65 20 70 55 70 73 65 72 74 54 61 72 67 65 74  he pUpsertTarget
1d620 20 66 69 65 6c 64 20 69 73 20 6f 6e 6c 79 20 73   field is only s
1d630 65 74 20 69 66 20 74 68 65 20 4f 4e 20 43 4f 4e  et if the ON CON
1d640 46 4c 49 43 54 20 63 6c 61 75 73 65 20 69 6e 63  FLICT clause inc
1d650 6c 75 64 65 73 0a 2a 2a 20 63 6f 6e 66 6c 69 63  ludes.** conflic
1d660 74 2d 74 61 72 67 65 74 20 63 6c 61 75 73 65 2e  t-target clause.
1d670 20 20 28 49 6e 20 22 4f 4e 20 43 4f 4e 46 4c 49    (In "ON CONFLI
1d680 43 54 28 61 2c 62 29 22 20 74 68 65 20 22 28 61  CT(a,b)" the "(a
1d690 2c 62 29 22 20 69 73 20 74 68 65 0a 2a 2a 20 63  ,b)" is the.** c
1d6a0 6f 6e 66 6c 69 63 74 2d 74 61 72 67 65 74 20 63  onflict-target c
1d6b0 6c 61 75 73 65 2e 29 20 20 54 68 65 20 70 55 70  lause.)  The pUp
1d6c0 73 65 72 74 54 61 72 67 65 74 57 68 65 72 65 20  sertTargetWhere 
1d6d0 69 73 20 74 68 65 20 6f 70 74 69 6f 6e 61 6c 0a  is the optional.
1d6e0 2a 2a 20 57 48 45 52 45 20 63 6c 61 75 73 65 20  ** WHERE clause 
1d6f0 75 73 65 64 20 74 6f 20 69 64 65 6e 74 69 66 79  used to identify
1d700 20 70 61 72 74 69 61 6c 20 75 6e 69 71 75 65 20   partial unique 
1d710 69 6e 64 65 78 65 73 2e 0a 2a 2a 0a 2a 2a 20 70  indexes..**.** p
1d720 55 70 73 65 72 74 53 65 74 20 69 73 20 74 68 65  UpsertSet is the
1d730 20 6c 69 73 74 20 6f 66 20 63 6f 6c 75 6d 6e 3d   list of column=
1d740 65 78 70 72 20 74 65 72 6d 73 20 6f 66 20 74 68  expr terms of th
1d750 65 20 55 50 44 41 54 45 20 73 74 61 74 65 6d 65  e UPDATE stateme
1d760 6e 74 2e 20 0a 2a 2a 20 54 68 65 20 70 55 70 73  nt. .** The pUps
1d770 65 72 74 53 65 74 20 66 69 65 6c 64 20 69 73 20  ertSet field is 
1d780 4e 55 4c 4c 20 66 6f 72 20 61 20 4f 4e 20 43 4f  NULL for a ON CO
1d790 4e 46 4c 49 43 54 20 44 4f 20 4e 4f 54 48 49 4e  NFLICT DO NOTHIN
1d7a0 47 2e 20 20 54 68 65 0a 2a 2a 20 70 55 70 73 65  G.  The.** pUpse
1d7b0 72 74 57 68 65 72 65 20 69 73 20 74 68 65 20 57  rtWhere is the W
1d7c0 48 45 52 45 20 63 6c 61 75 73 65 20 66 6f 72 20  HERE clause for 
1d7d0 74 68 65 20 55 50 44 41 54 45 20 61 6e 64 20 69  the UPDATE and i
1d7e0 73 20 4e 55 4c 4c 20 69 66 20 74 68 65 0a 2a 2a  s NULL if the.**
1d7f0 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 69 73   WHERE clause is
1d800 20 6f 6d 69 74 74 65 64 2e 0a 2a 2f 0a 73 74 72   omitted..*/.str
1d810 75 63 74 20 55 70 73 65 72 74 20 7b 0a 20 20 45  uct Upsert {.  E
1d820 78 70 72 4c 69 73 74 20 2a 70 55 70 73 65 72 74  xprList *pUpsert
1d830 54 61 72 67 65 74 3b 20 20 2f 2a 20 4f 70 74 69  Target;  /* Opti
1d840 6f 6e 61 6c 20 64 65 73 63 72 69 70 74 69 6f 6e  onal description
1d850 20 6f 66 20 63 6f 6e 66 6c 69 63 74 69 6e 67 20   of conflicting 
1d860 69 6e 64 65 78 20 2a 2f 0a 20 20 45 78 70 72 20  index */.  Expr 
1d870 2a 70 55 70 73 65 72 74 54 61 72 67 65 74 57 68  *pUpsertTargetWh
1d880 65 72 65 3b 20 2f 2a 20 57 48 45 52 45 20 63 6c  ere; /* WHERE cl
1d890 61 75 73 65 20 66 6f 72 20 70 61 72 74 69 61 6c  ause for partial
1d8a0 20 69 6e 64 65 78 20 74 61 72 67 65 74 73 20 2a   index targets *
1d8b0 2f 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70 55  /.  ExprList *pU
1d8c0 70 73 65 72 74 53 65 74 3b 20 20 20 20 20 2f 2a  psertSet;     /*
1d8d0 20 54 68 65 20 53 45 54 20 63 6c 61 75 73 65 20   The SET clause 
1d8e0 66 72 6f 6d 20 61 6e 20 4f 4e 20 43 4f 4e 46 4c  from an ON CONFL
1d8f0 49 43 54 20 55 50 44 41 54 45 20 2a 2f 0a 20 20  ICT UPDATE */.  
1d900 45 78 70 72 20 2a 70 55 70 73 65 72 74 57 68 65  Expr *pUpsertWhe
1d910 72 65 3b 20 20 20 20 20 20 20 2f 2a 20 57 48 45  re;       /* WHE
1d920 52 45 20 63 6c 61 75 73 65 20 66 6f 72 20 74 68  RE clause for th
1d930 65 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 55 50  e ON CONFLICT UP
1d940 44 41 54 45 20 2a 2f 0a 20 20 2f 2a 20 54 68 65  DATE */.  /* The
1d950 20 66 69 65 6c 64 73 20 61 62 6f 76 65 20 63 6f   fields above co
1d960 6d 70 72 69 73 65 20 74 68 65 20 70 61 72 73 65  mprise the parse
1d970 20 74 72 65 65 20 66 6f 72 20 74 68 65 20 75 70   tree for the up
1d980 73 65 72 74 20 63 6c 61 75 73 65 2e 0a 20 20 2a  sert clause..  *
1d990 2a 20 54 68 65 20 66 69 65 6c 64 73 20 62 65 6c  * The fields bel
1d9a0 6f 77 20 61 72 65 20 75 73 65 64 20 74 6f 20 74  ow are used to t
1d9b0 72 61 6e 73 66 65 72 20 69 6e 66 6f 72 6d 61 74  ransfer informat
1d9c0 69 6f 6e 20 66 72 6f 6d 20 74 68 65 20 49 4e 53  ion from the INS
1d9d0 45 52 54 0a 20 20 2a 2a 20 70 72 6f 63 65 73 73  ERT.  ** process
1d9e0 69 6e 67 20 64 6f 77 6e 20 69 6e 74 6f 20 74 68  ing down into th
1d9f0 65 20 55 50 44 41 54 45 20 70 72 6f 63 65 73 73  e UPDATE process
1da00 69 6e 67 20 77 68 69 6c 65 20 67 65 6e 65 72 61  ing while genera
1da10 74 69 6e 67 20 63 6f 64 65 2e 0a 20 20 2a 2a 20  ting code..  ** 
1da20 55 70 73 65 72 74 20 6f 77 6e 73 20 74 68 65 20  Upsert owns the 
1da30 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 65 64  memory allocated
1da40 20 61 62 6f 76 65 2c 20 62 75 74 20 6e 6f 74 20   above, but not 
1da50 74 68 65 20 6d 65 6d 6f 72 79 20 62 65 6c 6f 77  the memory below
1da60 2e 20 2a 2f 0a 20 20 49 6e 64 65 78 20 2a 70 55  . */.  Index *pU
1da70 70 73 65 72 74 49 64 78 3b 20 20 20 20 20 20 20  psertIdx;       
1da80 20 2f 2a 20 43 6f 6e 73 74 72 61 69 6e 74 20 74   /* Constraint t
1da90 68 61 74 20 70 55 70 73 65 72 74 54 61 72 67 65  hat pUpsertTarge
1daa0 74 20 69 64 65 6e 74 69 66 69 65 73 20 2a 2f 0a  t identifies */.
1dab0 20 20 53 72 63 4c 69 73 74 20 2a 70 55 70 73 65    SrcList *pUpse
1dac0 72 74 53 72 63 3b 20 20 20 20 20 20 2f 2a 20 54  rtSrc;      /* T
1dad0 61 62 6c 65 20 74 6f 20 62 65 20 75 70 64 61 74  able to be updat
1dae0 65 64 20 2a 2f 0a 20 20 69 6e 74 20 72 65 67 44  ed */.  int regD
1daf0 61 74 61 3b 20 20 20 20 20 20 20 20 20 20 20 20  ata;            
1db00 20 20 2f 2a 20 46 69 72 73 74 20 72 65 67 69 73    /* First regis
1db10 74 65 72 20 68 6f 6c 64 69 6e 67 20 61 72 72 61  ter holding arra
1db20 79 20 6f 66 20 56 41 4c 55 45 53 20 2a 2f 0a 20  y of VALUES */. 
1db30 20 69 6e 74 20 69 44 61 74 61 43 75 72 3b 20 20   int iDataCur;  
1db40 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e             /* In
1db50 64 65 78 20 6f 66 20 74 68 65 20 64 61 74 61 20  dex of the data 
1db60 63 75 72 73 6f 72 20 2a 2f 0a 20 20 69 6e 74 20  cursor */.  int 
1db70 69 49 64 78 43 75 72 3b 20 20 20 20 20 20 20 20  iIdxCur;        
1db80 20 20 20 20 20 20 2f 2a 20 49 6e 64 65 78 20 6f        /* Index o
1db90 66 20 74 68 65 20 66 69 72 73 74 20 69 6e 64 65  f the first inde
1dba0 78 20 63 75 72 73 6f 72 20 2a 2f 0a 7d 3b 0a 0a  x cursor */.};..
1dbb0 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63  /*.** An instanc
1dbc0 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69  e of the followi
1dbd0 6e 67 20 73 74 72 75 63 74 75 72 65 20 63 6f 6e  ng structure con
1dbe0 74 61 69 6e 73 20 61 6c 6c 20 69 6e 66 6f 72 6d  tains all inform
1dbf0 61 74 69 6f 6e 0a 2a 2a 20 6e 65 65 64 65 64 20  ation.** needed 
1dc00 74 6f 20 67 65 6e 65 72 61 74 65 20 63 6f 64 65  to generate code
1dc10 20 66 6f 72 20 61 20 73 69 6e 67 6c 65 20 53 45   for a single SE
1dc20 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 0a  LECT statement..
1dc30 2a 2a 0a 2a 2a 20 53 65 65 20 74 68 65 20 68 65  **.** See the he
1dc40 61 64 65 72 20 63 6f 6d 6d 65 6e 74 20 6f 6e 20  ader comment on 
1dc50 74 68 65 20 63 6f 6d 70 75 74 65 4c 69 6d 69 74  the computeLimit
1dc60 52 65 67 69 73 74 65 72 73 28 29 20 72 6f 75 74  Registers() rout
1dc70 69 6e 65 20 66 6f 72 20 61 0a 2a 2a 20 64 65 74  ine for a.** det
1dc80 61 69 6c 65 64 20 64 65 73 63 72 69 70 74 69 6f  ailed descriptio
1dc90 6e 20 6f 66 20 74 68 65 20 6d 65 61 6e 69 6e 67  n of the meaning
1dca0 20 6f 66 20 74 68 65 20 69 4c 69 6d 69 74 20 61   of the iLimit a
1dcb0 6e 64 20 69 4f 66 66 73 65 74 20 66 69 65 6c 64  nd iOffset field
1dcc0 73 2e 0a 2a 2a 0a 2a 2a 20 61 64 64 72 4f 70 65  s..**.** addrOpe
1dcd0 6e 45 70 68 6d 5b 5d 20 65 6e 74 72 69 65 73 20  nEphm[] entries 
1dce0 63 6f 6e 74 61 69 6e 20 74 68 65 20 61 64 64 72  contain the addr
1dcf0 65 73 73 20 6f 66 20 4f 50 5f 4f 70 65 6e 45 70  ess of OP_OpenEp
1dd00 68 65 6d 65 72 61 6c 20 6f 70 63 6f 64 65 73 2e  hemeral opcodes.
1dd10 0a 2a 2a 20 54 68 65 73 65 20 61 64 64 72 65 73  .** These addres
1dd20 73 65 73 20 6d 75 73 74 20 62 65 20 73 74 6f 72  ses must be stor
1dd30 65 64 20 73 6f 20 74 68 61 74 20 77 65 20 63 61  ed so that we ca
1dd40 6e 20 67 6f 20 62 61 63 6b 20 61 6e 64 20 66 69  n go back and fi
1dd50 6c 6c 20 69 6e 0a 2a 2a 20 74 68 65 20 50 34 5f  ll in.** the P4_
1dd60 4b 45 59 49 4e 46 4f 20 61 6e 64 20 50 32 20 70  KEYINFO and P2 p
1dd70 61 72 61 6d 65 74 65 72 73 20 6c 61 74 65 72 2e  arameters later.
1dd80 20 20 4e 65 69 74 68 65 72 20 74 68 65 20 4b 65    Neither the Ke
1dd90 79 49 6e 66 6f 20 6e 6f 72 0a 2a 2a 20 74 68 65  yInfo nor.** the
1dda0 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d   number of colum
1ddb0 6e 73 20 69 6e 20 50 32 20 63 61 6e 20 62 65 20  ns in P2 can be 
1ddc0 63 6f 6d 70 75 74 65 64 20 61 74 20 74 68 65 20  computed at the 
1ddd0 73 61 6d 65 20 74 69 6d 65 0a 2a 2a 20 61 73 20  same time.** as 
1dde0 74 68 65 20 4f 50 5f 4f 70 65 6e 45 70 68 6d 20  the OP_OpenEphm 
1ddf0 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 73 20 63  instruction is c
1de00 6f 64 65 64 20 62 65 63 61 75 73 65 20 6e 6f 74  oded because not
1de10 0a 2a 2a 20 65 6e 6f 75 67 68 20 69 6e 66 6f 72  .** enough infor
1de20 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 74 68 65  mation about the
1de30 20 63 6f 6d 70 6f 75 6e 64 20 71 75 65 72 79 20   compound query 
1de40 69 73 20 6b 6e 6f 77 6e 20 61 74 20 74 68 61 74  is known at that
1de50 20 70 6f 69 6e 74 2e 0a 2a 2a 20 54 68 65 20 4b   point..** The K
1de60 65 79 49 6e 66 6f 20 66 6f 72 20 61 64 64 72 4f  eyInfo for addrO
1de70 70 65 6e 54 72 61 6e 5b 30 5d 20 61 6e 64 20 5b  penTran[0] and [
1de80 31 5d 20 63 6f 6e 74 61 69 6e 73 20 63 6f 6c 6c  1] contains coll
1de90 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 73 0a  ating sequences.
1dea0 2a 2a 20 66 6f 72 20 74 68 65 20 72 65 73 75 6c  ** for the resul
1deb0 74 20 73 65 74 2e 20 20 54 68 65 20 4b 65 79 49  t set.  The KeyI
1dec0 6e 66 6f 20 66 6f 72 20 61 64 64 72 4f 70 65 6e  nfo for addrOpen
1ded0 45 70 68 6d 5b 32 5d 20 63 6f 6e 74 61 69 6e 73  Ephm[2] contains
1dee0 20 63 6f 6c 6c 61 74 69 6e 67 0a 2a 2a 20 73 65   collating.** se
1def0 71 75 65 6e 63 65 73 20 66 6f 72 20 74 68 65 20  quences for the 
1df00 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73 65 2e  ORDER BY clause.
1df10 0a 2a 2f 0a 73 74 72 75 63 74 20 53 65 6c 65 63  .*/.struct Selec
1df20 74 20 7b 0a 20 20 45 78 70 72 4c 69 73 74 20 2a  t {.  ExprList *
1df30 70 45 4c 69 73 74 3b 20 20 20 20 20 20 2f 2a 20  pEList;      /* 
1df40 54 68 65 20 66 69 65 6c 64 73 20 6f 66 20 74 68  The fields of th
1df50 65 20 72 65 73 75 6c 74 20 2a 2f 0a 20 20 75 38  e result */.  u8
1df60 20 6f 70 3b 20 20 20 20 20 20 20 20 20 20 20 20   op;            
1df70 20 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 3a 20       /* One of: 
1df80 54 4b 5f 55 4e 49 4f 4e 20 54 4b 5f 41 4c 4c 20  TK_UNION TK_ALL 
1df90 54 4b 5f 49 4e 54 45 52 53 45 43 54 20 54 4b 5f  TK_INTERSECT TK_
1dfa0 45 58 43 45 50 54 20 2a 2f 0a 20 20 4c 6f 67 45  EXCEPT */.  LogE
1dfb0 73 74 20 6e 53 65 6c 65 63 74 52 6f 77 3b 20 20  st nSelectRow;  
1dfc0 20 20 20 2f 2a 20 45 73 74 69 6d 61 74 65 64 20     /* Estimated 
1dfd0 6e 75 6d 62 65 72 20 6f 66 20 72 65 73 75 6c 74  number of result
1dfe0 20 72 6f 77 73 20 2a 2f 0a 20 20 75 33 32 20 73   rows */.  u32 s
1dff0 65 6c 46 6c 61 67 73 3b 20 20 20 20 20 20 20 20  elFlags;        
1e000 20 20 2f 2a 20 56 61 72 69 6f 75 73 20 53 46 5f    /* Various SF_
1e010 2a 20 76 61 6c 75 65 73 20 2a 2f 0a 20 20 69 6e  * values */.  in
1e020 74 20 69 4c 69 6d 69 74 2c 20 69 4f 66 66 73 65  t iLimit, iOffse
1e030 74 3b 20 20 20 2f 2a 20 4d 65 6d 6f 72 79 20 72  t;   /* Memory r
1e040 65 67 69 73 74 65 72 73 20 68 6f 6c 64 69 6e 67  egisters holding
1e050 20 4c 49 4d 49 54 20 26 20 4f 46 46 53 45 54 20   LIMIT & OFFSET 
1e060 63 6f 75 6e 74 65 72 73 20 2a 2f 0a 20 20 75 33  counters */.  u3
1e070 32 20 73 65 6c 49 64 3b 20 20 20 20 20 20 20 20  2 selId;        
1e080 20 20 20 20 20 2f 2a 20 55 6e 69 71 75 65 20 69       /* Unique i
1e090 64 65 6e 74 69 66 69 65 72 20 6e 75 6d 62 65 72  dentifier number
1e0a0 20 66 6f 72 20 74 68 69 73 20 53 45 4c 45 43 54   for this SELECT
1e0b0 20 2a 2f 0a 20 20 69 6e 74 20 61 64 64 72 4f 70   */.  int addrOp
1e0c0 65 6e 45 70 68 6d 5b 32 5d 3b 20 20 20 2f 2a 20  enEphm[2];   /* 
1e0d0 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 20 6f 70 63  OP_OpenEphem opc
1e0e0 6f 64 65 73 20 72 65 6c 61 74 65 64 20 74 6f 20  odes related to 
1e0f0 74 68 69 73 20 73 65 6c 65 63 74 20 2a 2f 0a 20  this select */. 
1e100 20 53 72 63 4c 69 73 74 20 2a 70 53 72 63 3b 20   SrcList *pSrc; 
1e110 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 46          /* The F
1e120 52 4f 4d 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20  ROM clause */.  
1e130 45 78 70 72 20 2a 70 57 68 65 72 65 3b 20 20 20  Expr *pWhere;   
1e140 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 57 48         /* The WH
1e150 45 52 45 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20  ERE clause */.  
1e160 45 78 70 72 4c 69 73 74 20 2a 70 47 72 6f 75 70  ExprList *pGroup
1e170 42 79 3b 20 20 20 20 2f 2a 20 54 68 65 20 47 52  By;    /* The GR
1e180 4f 55 50 20 42 59 20 63 6c 61 75 73 65 20 2a 2f  OUP BY clause */
1e190 0a 20 20 45 78 70 72 20 2a 70 48 61 76 69 6e 67  .  Expr *pHaving
1e1a0 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65  ;         /* The
1e1b0 20 48 41 56 49 4e 47 20 63 6c 61 75 73 65 20 2a   HAVING clause *
1e1c0 2f 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70 4f  /.  ExprList *pO
1e1d0 72 64 65 72 42 79 3b 20 20 20 20 2f 2a 20 54 68  rderBy;    /* Th
1e1e0 65 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73  e ORDER BY claus
1e1f0 65 20 2a 2f 0a 20 20 53 65 6c 65 63 74 20 2a 70  e */.  Select *p
1e200 50 72 69 6f 72 3b 20 20 20 20 20 20 20 20 2f 2a  Prior;        /*
1e210 20 50 72 69 6f 72 20 73 65 6c 65 63 74 20 69 6e   Prior select in
1e220 20 61 20 63 6f 6d 70 6f 75 6e 64 20 73 65 6c 65   a compound sele
1e230 63 74 20 73 74 61 74 65 6d 65 6e 74 20 2a 2f 0a  ct statement */.
1e240 20 20 53 65 6c 65 63 74 20 2a 70 4e 65 78 74 3b    Select *pNext;
1e250 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 78 74           /* Next
1e260 20 73 65 6c 65 63 74 20 74 6f 20 74 68 65 20 6c   select to the l
1e270 65 66 74 20 69 6e 20 61 20 63 6f 6d 70 6f 75 6e  eft in a compoun
1e280 64 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 4c 69  d */.  Expr *pLi
1e290 6d 69 74 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  mit;          /*
1e2a0 20 4c 49 4d 49 54 20 65 78 70 72 65 73 73 69 6f   LIMIT expressio
1e2b0 6e 2e 20 4e 55 4c 4c 20 6d 65 61 6e 73 20 6e 6f  n. NULL means no
1e2c0 74 20 75 73 65 64 2e 20 2a 2f 0a 20 20 57 69 74  t used. */.  Wit
1e2d0 68 20 2a 70 57 69 74 68 3b 20 20 20 20 20 20 20  h *pWith;       
1e2e0 20 20 20 20 2f 2a 20 57 49 54 48 20 63 6c 61 75      /* WITH clau
1e2f0 73 65 20 61 74 74 61 63 68 65 64 20 74 6f 20 74  se attached to t
1e300 68 69 73 20 73 65 6c 65 63 74 2e 20 4f 72 20 4e  his select. Or N
1e310 55 4c 4c 2e 20 2a 2f 0a 23 69 66 6e 64 65 66 20  ULL. */.#ifndef 
1e320 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 49 4e 44  SQLITE_OMIT_WIND
1e330 4f 57 46 55 4e 43 0a 20 20 57 69 6e 64 6f 77 20  OWFUNC.  Window 
1e340 2a 70 57 69 6e 3b 20 20 20 20 20 20 20 20 20 20  *pWin;          
1e350 2f 2a 20 4c 69 73 74 20 6f 66 20 77 69 6e 64 6f  /* List of windo
1e360 77 20 66 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a 20  w functions */. 
1e370 20 57 69 6e 64 6f 77 20 2a 70 57 69 6e 44 65 66   Window *pWinDef
1e380 6e 3b 20 20 20 20 20 20 2f 2a 20 4c 69 73 74 20  n;      /* List 
1e390 6f 66 20 6e 61 6d 65 64 20 77 69 6e 64 6f 77 20  of named window 
1e3a0 64 65 66 69 6e 69 74 69 6f 6e 73 20 2a 2f 0a 23  definitions */.#
1e3b0 65 6e 64 69 66 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  endif.};../*.** 
1e3c0 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20 66  Allowed values f
1e3d0 6f 72 20 53 65 6c 65 63 74 2e 73 65 6c 46 6c 61  or Select.selFla
1e3e0 67 73 2e 20 20 54 68 65 20 22 53 46 22 20 70 72  gs.  The "SF" pr
1e3f0 65 66 69 78 20 73 74 61 6e 64 73 20 66 6f 72 0a  efix stands for.
1e400 2a 2a 20 22 53 65 6c 65 63 74 20 46 6c 61 67 22  ** "Select Flag"
1e410 2e 0a 2a 2a 0a 2a 2a 20 56 61 6c 75 65 20 63 6f  ..**.** Value co
1e420 6e 73 74 72 61 69 6e 74 73 20 28 61 6c 6c 20 63  nstraints (all c
1e430 68 65 63 6b 65 64 20 76 69 61 20 61 73 73 65 72  hecked via asser
1e440 74 28 29 29 0a 2a 2a 20 20 20 20 20 53 46 5f 48  t()).**     SF_H
1e450 61 73 41 67 67 20 20 20 20 20 3d 3d 20 4e 43 5f  asAgg     == NC_
1e460 48 61 73 41 67 67 0a 2a 2a 20 20 20 20 20 53 46  HasAgg.**     SF
1e470 5f 4d 69 6e 4d 61 78 41 67 67 20 20 3d 3d 20 4e  _MinMaxAgg  == N
1e480 43 5f 4d 69 6e 4d 61 78 41 67 67 20 20 20 20 20  C_MinMaxAgg     
1e490 3d 3d 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4d  == SQLITE_FUNC_M
1e4a0 49 4e 4d 41 58 0a 2a 2a 20 20 20 20 20 53 46 5f  INMAX.**     SF_
1e4b0 46 69 78 65 64 4c 69 6d 69 74 20 3d 3d 20 57 48  FixedLimit == WH
1e4c0 45 52 45 5f 55 53 45 5f 4c 49 4d 49 54 0a 2a 2f  ERE_USE_LIMIT.*/
1e4d0 0a 23 64 65 66 69 6e 65 20 53 46 5f 44 69 73 74  .#define SF_Dist
1e4e0 69 6e 63 74 20 20 20 20 20 20 20 30 78 30 30 30  inct       0x000
1e4f0 30 31 20 20 2f 2a 20 4f 75 74 70 75 74 20 73 68  01  /* Output sh
1e500 6f 75 6c 64 20 62 65 20 44 49 53 54 49 4e 43 54  ould be DISTINCT
1e510 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 41   */.#define SF_A
1e520 6c 6c 20 20 20 20 20 20 20 20 20 20 20 20 30 78  ll            0x
1e530 30 30 30 30 32 20 20 2f 2a 20 49 6e 63 6c 75 64  00002  /* Includ
1e540 65 73 20 74 68 65 20 41 4c 4c 20 6b 65 79 77 6f  es the ALL keywo
1e550 72 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46  rd */.#define SF
1e560 5f 52 65 73 6f 6c 76 65 64 20 20 20 20 20 20 20  _Resolved       
1e570 30 78 30 30 30 30 34 20 20 2f 2a 20 49 64 65 6e  0x00004  /* Iden
1e580 74 69 66 69 65 72 73 20 68 61 76 65 20 62 65 65  tifiers have bee
1e590 6e 20 72 65 73 6f 6c 76 65 64 20 2a 2f 0a 23 64  n resolved */.#d
1e5a0 65 66 69 6e 65 20 53 46 5f 41 67 67 72 65 67 61  efine SF_Aggrega
1e5b0 74 65 20 20 20 20 20 20 30 78 30 30 30 30 38 20  te      0x00008 
1e5c0 20 2f 2a 20 43 6f 6e 74 61 69 6e 73 20 61 67 67   /* Contains agg
1e5d0 20 66 75 6e 63 74 69 6f 6e 73 20 6f 72 20 61 20   functions or a 
1e5e0 47 52 4f 55 50 20 42 59 20 2a 2f 0a 23 64 65 66  GROUP BY */.#def
1e5f0 69 6e 65 20 53 46 5f 48 61 73 41 67 67 20 20 20  ine SF_HasAgg   
1e600 20 20 20 20 20 20 30 78 30 30 30 31 30 20 20 2f        0x00010  /
1e610 2a 20 43 6f 6e 74 61 69 6e 73 20 61 67 67 72 65  * Contains aggre
1e620 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 20 2a  gate functions *
1e630 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 55 73 65  /.#define SF_Use
1e640 73 45 70 68 65 6d 65 72 61 6c 20 20 30 78 30 30  sEphemeral  0x00
1e650 30 32 30 20 20 2f 2a 20 55 73 65 73 20 74 68 65  020  /* Uses the
1e660 20 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c 20 6f   OpenEphemeral o
1e670 70 63 6f 64 65 20 2a 2f 0a 23 64 65 66 69 6e 65  pcode */.#define
1e680 20 53 46 5f 45 78 70 61 6e 64 65 64 20 20 20 20   SF_Expanded    
1e690 20 20 20 30 78 30 30 30 34 30 20 20 2f 2a 20 73     0x00040  /* s
1e6a0 71 6c 69 74 65 33 53 65 6c 65 63 74 45 78 70 61  qlite3SelectExpa
1e6b0 6e 64 28 29 20 63 61 6c 6c 65 64 20 6f 6e 20 74  nd() called on t
1e6c0 68 69 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  his */.#define S
1e6d0 46 5f 48 61 73 54 79 70 65 49 6e 66 6f 20 20 20  F_HasTypeInfo   
1e6e0 20 30 78 30 30 30 38 30 20 20 2f 2a 20 46 52 4f   0x00080  /* FRO
1e6f0 4d 20 73 75 62 71 75 65 72 69 65 73 20 68 61 76  M subqueries hav
1e700 65 20 54 61 62 6c 65 20 6d 65 74 61 64 61 74 61  e Table metadata
1e710 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 43   */.#define SF_C
1e720 6f 6d 70 6f 75 6e 64 20 20 20 20 20 20 20 30 78  ompound       0x
1e730 30 30 31 30 30 20 20 2f 2a 20 50 61 72 74 20 6f  00100  /* Part o
1e740 66 20 61 20 63 6f 6d 70 6f 75 6e 64 20 71 75 65  f a compound que
1e750 72 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46  ry */.#define SF
1e760 5f 56 61 6c 75 65 73 20 20 20 20 20 20 20 20 20  _Values         
1e770 30 78 30 30 32 30 30 20 20 2f 2a 20 53 79 6e 74  0x00200  /* Synt
1e780 68 65 73 69 7a 65 64 20 66 72 6f 6d 20 56 41 4c  hesized from VAL
1e790 55 45 53 20 63 6c 61 75 73 65 20 2a 2f 0a 23 64  UES clause */.#d
1e7a0 65 66 69 6e 65 20 53 46 5f 4d 75 6c 74 69 56 61  efine SF_MultiVa
1e7b0 6c 75 65 20 20 20 20 20 30 78 30 30 34 30 30 20  lue     0x00400 
1e7c0 20 2f 2a 20 53 69 6e 67 6c 65 20 56 41 4c 55 45   /* Single VALUE
1e7d0 53 20 74 65 72 6d 20 77 69 74 68 20 6d 75 6c 74  S term with mult
1e7e0 69 70 6c 65 20 72 6f 77 73 20 2a 2f 0a 23 64 65  iple rows */.#de
1e7f0 66 69 6e 65 20 53 46 5f 4e 65 73 74 65 64 46 72  fine SF_NestedFr
1e800 6f 6d 20 20 20 20 20 30 78 30 30 38 30 30 20 20  om     0x00800  
1e810 2f 2a 20 50 61 72 74 20 6f 66 20 61 20 70 61 72  /* Part of a par
1e820 65 6e 74 68 65 73 69 7a 65 64 20 46 52 4f 4d 20  enthesized FROM 
1e830 63 6c 61 75 73 65 20 2a 2f 0a 23 64 65 66 69 6e  clause */.#defin
1e840 65 20 53 46 5f 4d 69 6e 4d 61 78 41 67 67 20 20  e SF_MinMaxAgg  
1e850 20 20 20 20 30 78 30 31 30 30 30 20 20 2f 2a 20      0x01000  /* 
1e860 41 67 67 72 65 67 61 74 65 20 63 6f 6e 74 61 69  Aggregate contai
1e870 6e 69 6e 67 20 6d 69 6e 28 29 20 6f 72 20 6d 61  ning min() or ma
1e880 78 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  x() */.#define S
1e890 46 5f 52 65 63 75 72 73 69 76 65 20 20 20 20 20  F_Recursive     
1e8a0 20 30 78 30 32 30 30 30 20 20 2f 2a 20 54 68 65   0x02000  /* The
1e8b0 20 72 65 63 75 72 73 69 76 65 20 70 61 72 74 20   recursive part 
1e8c0 6f 66 20 61 20 72 65 63 75 72 73 69 76 65 20 43  of a recursive C
1e8d0 54 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46  TE */.#define SF
1e8e0 5f 46 69 78 65 64 4c 69 6d 69 74 20 20 20 20 20  _FixedLimit     
1e8f0 30 78 30 34 30 30 30 20 20 2f 2a 20 6e 53 65 6c  0x04000  /* nSel
1e900 65 63 74 52 6f 77 20 73 65 74 20 62 79 20 61 20  ectRow set by a 
1e910 63 6f 6e 73 74 61 6e 74 20 4c 49 4d 49 54 20 2a  constant LIMIT *
1e920 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 4d 61 79  /.#define SF_May
1e930 62 65 43 6f 6e 76 65 72 74 20 20 20 30 78 30 38  beConvert   0x08
1e940 30 30 30 20 20 2f 2a 20 4e 65 65 64 20 63 6f 6e  000  /* Need con
1e950 76 65 72 74 43 6f 6d 70 6f 75 6e 64 53 65 6c 65  vertCompoundSele
1e960 63 74 54 6f 53 75 62 71 75 65 72 79 28 29 20 2a  ctToSubquery() *
1e970 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 43 6f 6e  /.#define SF_Con
1e980 76 65 72 74 65 64 20 20 20 20 20 20 30 78 31 30  verted      0x10
1e990 30 30 30 20 20 2f 2a 20 42 79 20 63 6f 6e 76 65  000  /* By conve
1e9a0 72 74 43 6f 6d 70 6f 75 6e 64 53 65 6c 65 63 74  rtCompoundSelect
1e9b0 54 6f 53 75 62 71 75 65 72 79 28 29 20 2a 2f 0a  ToSubquery() */.
1e9c0 23 64 65 66 69 6e 65 20 53 46 5f 49 6e 63 6c 75  #define SF_Inclu
1e9d0 64 65 48 69 64 64 65 6e 20 20 30 78 32 30 30 30  deHidden  0x2000
1e9e0 30 20 20 2f 2a 20 49 6e 63 6c 75 64 65 20 68 69  0  /* Include hi
1e9f0 64 64 65 6e 20 63 6f 6c 75 6d 6e 73 20 69 6e 20  dden columns in 
1ea00 6f 75 74 70 75 74 20 2a 2f 0a 23 64 65 66 69 6e  output */.#defin
1ea10 65 20 53 46 5f 43 6f 6d 70 6c 65 78 52 65 73 75  e SF_ComplexResu
1ea20 6c 74 20 20 30 78 34 30 30 30 30 20 20 2f 2a 20  lt  0x40000  /* 
1ea30 52 65 73 75 6c 74 20 63 6f 6e 74 61 69 6e 73 20  Result contains 
1ea40 73 75 62 71 75 65 72 79 20 6f 72 20 66 75 6e 63  subquery or func
1ea50 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  tion */.#define 
1ea60 53 46 5f 57 68 65 72 65 42 65 67 69 6e 20 20 20  SF_WhereBegin   
1ea70 20 20 30 78 38 30 30 30 30 20 20 2f 2a 20 52 65    0x80000  /* Re
1ea80 61 6c 6c 79 20 61 20 57 68 65 72 65 42 65 67 69  ally a WhereBegi
1ea90 6e 28 29 20 63 61 6c 6c 2e 20 20 44 65 62 75 67  n() call.  Debug
1eaa0 20 4f 6e 6c 79 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20   Only */../*.** 
1eab0 54 68 65 20 72 65 73 75 6c 74 73 20 6f 66 20 61  The results of a
1eac0 20 53 45 4c 45 43 54 20 63 61 6e 20 62 65 20 64   SELECT can be d
1ead0 69 73 74 72 69 62 75 74 65 64 20 69 6e 20 73 65  istributed in se
1eae0 76 65 72 61 6c 20 77 61 79 73 2c 20 61 73 20 64  veral ways, as d
1eaf0 65 66 69 6e 65 64 0a 2a 2a 20 62 79 20 6f 6e 65  efined.** by one
1eb00 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   of the followin
1eb10 67 20 6d 61 63 72 6f 73 2e 20 20 54 68 65 20 22  g macros.  The "
1eb20 53 52 54 22 20 70 72 65 66 69 78 20 6d 65 61 6e  SRT" prefix mean
1eb30 73 20 22 53 45 4c 45 43 54 20 52 65 73 75 6c 74  s "SELECT Result
1eb40 0a 2a 2a 20 54 79 70 65 22 2e 0a 2a 2a 0a 2a 2a  .** Type"..**.**
1eb50 20 20 20 20 20 53 52 54 5f 55 6e 69 6f 6e 20 20       SRT_Union  
1eb60 20 20 20 20 20 53 74 6f 72 65 20 72 65 73 75 6c       Store resul
1eb70 74 73 20 61 73 20 61 20 6b 65 79 20 69 6e 20 61  ts as a key in a
1eb80 20 74 65 6d 70 6f 72 61 72 79 20 69 6e 64 65 78   temporary index
1eb90 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
1eba0 20 20 20 20 20 20 20 20 69 64 65 6e 74 69 66 69          identifi
1ebb0 65 64 20 62 79 20 70 44 65 73 74 2d 3e 69 53 44  ed by pDest->iSD
1ebc0 50 61 72 6d 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20  Parm..**.**     
1ebd0 53 52 54 5f 45 78 63 65 70 74 20 20 20 20 20 20  SRT_Except      
1ebe0 52 65 6d 6f 76 65 20 72 65 73 75 6c 74 73 20 66  Remove results f
1ebf0 72 6f 6d 20 74 68 65 20 74 65 6d 70 6f 72 61 72  rom the temporar
1ec00 79 20 69 6e 64 65 78 20 70 44 65 73 74 2d 3e 69  y index pDest->i
1ec10 53 44 50 61 72 6d 2e 0a 2a 2a 0a 2a 2a 20 20 20  SDParm..**.**   
1ec20 20 20 53 52 54 5f 45 78 69 73 74 73 20 20 20 20    SRT_Exists    
1ec30 20 20 53 74 6f 72 65 20 61 20 31 20 69 6e 20 6d    Store a 1 in m
1ec40 65 6d 6f 72 79 20 63 65 6c 6c 20 70 44 65 73 74  emory cell pDest
1ec50 2d 3e 69 53 44 50 61 72 6d 20 69 66 20 74 68 65  ->iSDParm if the
1ec60 20 72 65 73 75 6c 74 0a 2a 2a 20 20 20 20 20 20   result.**      
1ec70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
1ec80 65 74 20 69 73 20 6e 6f 74 20 65 6d 70 74 79 2e  et is not empty.
1ec90 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 44  .**.**     SRT_D
1eca0 69 73 63 61 72 64 20 20 20 20 20 54 68 72 6f 77  iscard     Throw
1ecb0 20 74 68 65 20 72 65 73 75 6c 74 73 20 61 77 61   the results awa
1ecc0 79 2e 20 20 54 68 69 73 20 69 73 20 75 73 65 64  y.  This is used
1ecd0 20 62 79 20 53 45 4c 45 43 54 0a 2a 2a 20 20 20   by SELECT.**   
1ece0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ecf0 20 20 73 74 61 74 65 6d 65 6e 74 73 20 77 69 74    statements wit
1ed00 68 69 6e 20 74 72 69 67 67 65 72 73 20 77 68 6f  hin triggers who
1ed10 73 65 20 6f 6e 6c 79 20 70 75 72 70 6f 73 65 20  se only purpose 
1ed20 69 73 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  is.**           
1ed30 20 20 20 20 20 20 20 20 20 20 74 68 65 20 73 69            the si
1ed40 64 65 2d 65 66 66 65 63 74 73 20 6f 66 20 66 75  de-effects of fu
1ed50 6e 63 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 41  nctions..**.** A
1ed60 6c 6c 20 6f 66 20 74 68 65 20 61 62 6f 76 65 20  ll of the above 
1ed70 61 72 65 20 66 72 65 65 20 74 6f 20 69 67 6e 6f  are free to igno
1ed80 72 65 20 74 68 65 69 72 20 4f 52 44 45 52 20 42  re their ORDER B
1ed90 59 20 63 6c 61 75 73 65 2e 20 54 68 6f 73 65 20  Y clause. Those 
1eda0 74 68 61 74 0a 2a 2a 20 66 6f 6c 6c 6f 77 20 6d  that.** follow m
1edb0 75 73 74 20 68 6f 6e 6f 72 20 74 68 65 20 4f 52  ust honor the OR
1edc0 44 45 52 20 42 59 20 63 6c 61 75 73 65 2e 0a 2a  DER BY clause..*
1edd0 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 4f 75 74  *.**     SRT_Out
1ede0 70 75 74 20 20 20 20 20 20 47 65 6e 65 72 61 74  put      Generat
1edf0 65 20 61 20 72 6f 77 20 6f 66 20 6f 75 74 70 75  e a row of outpu
1ee00 74 20 28 75 73 69 6e 67 20 74 68 65 20 4f 50 5f  t (using the OP_
1ee10 52 65 73 75 6c 74 52 6f 77 0a 2a 2a 20 20 20 20  ResultRow.**    
1ee20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ee30 20 6f 70 63 6f 64 65 29 20 66 6f 72 20 65 61 63   opcode) for eac
1ee40 68 20 72 6f 77 20 69 6e 20 74 68 65 20 72 65 73  h row in the res
1ee50 75 6c 74 20 73 65 74 2e 0a 2a 2a 0a 2a 2a 20 20  ult set..**.**  
1ee60 20 20 20 53 52 54 5f 4d 65 6d 20 20 20 20 20 20     SRT_Mem      
1ee70 20 20 20 4f 6e 6c 79 20 76 61 6c 69 64 20 69 66     Only valid if
1ee80 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 61   the result is a
1ee90 20 73 69 6e 67 6c 65 20 63 6f 6c 75 6d 6e 2e 0a   single column..
1eea0 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
1eeb0 20 20 20 20 20 20 20 53 74 6f 72 65 20 74 68 65         Store the
1eec0 20 66 69 72 73 74 20 63 6f 6c 75 6d 6e 20 6f 66   first column of
1eed0 20 74 68 65 20 66 69 72 73 74 20 72 65 73 75 6c   the first resul
1eee0 74 20 72 6f 77 0a 2a 2a 20 20 20 20 20 20 20 20  t row.**        
1eef0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 20               in 
1ef00 72 65 67 69 73 74 65 72 20 70 44 65 73 74 2d 3e  register pDest->
1ef10 69 53 44 50 61 72 6d 20 74 68 65 6e 20 61 62 61  iSDParm then aba
1ef20 6e 64 6f 6e 20 74 68 65 20 72 65 73 74 0a 2a 2a  ndon the rest.**
1ef30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ef40 20 20 20 20 20 6f 66 20 74 68 65 20 71 75 65 72       of the quer
1ef50 79 2e 20 20 54 68 69 73 20 64 65 73 74 69 6e 61  y.  This destina
1ef60 74 69 6f 6e 20 69 6d 70 6c 69 65 73 20 22 4c 49  tion implies "LI
1ef70 4d 49 54 20 31 22 2e 0a 2a 2a 0a 2a 2a 20 20 20  MIT 1"..**.**   
1ef80 20 20 53 52 54 5f 53 65 74 20 20 20 20 20 20 20    SRT_Set       
1ef90 20 20 54 68 65 20 72 65 73 75 6c 74 20 6d 75 73    The result mus
1efa0 74 20 62 65 20 61 20 73 69 6e 67 6c 65 20 63 6f  t be a single co
1efb0 6c 75 6d 6e 2e 20 20 53 74 6f 72 65 20 65 61 63  lumn.  Store eac
1efc0 68 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  h.**            
1efd0 20 20 20 20 20 20 20 20 20 72 6f 77 20 6f 66 20           row of 
1efe0 72 65 73 75 6c 74 20 61 73 20 74 68 65 20 6b 65  result as the ke
1eff0 79 20 69 6e 20 74 61 62 6c 65 20 70 44 65 73 74  y in table pDest
1f000 2d 3e 69 53 44 50 61 72 6d 2e 0a 2a 2a 20 20 20  ->iSDParm..**   
1f010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f020 20 20 41 70 70 6c 79 20 74 68 65 20 61 66 66 69    Apply the affi
1f030 6e 69 74 79 20 70 44 65 73 74 2d 3e 61 66 66 53  nity pDest->affS
1f040 64 73 74 20 62 65 66 6f 72 65 20 73 74 6f 72 69  dst before stori
1f050 6e 67 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  ng.**           
1f060 20 20 20 20 20 20 20 20 20 20 72 65 73 75 6c 74            result
1f070 73 2e 20 20 55 73 65 64 20 74 6f 20 69 6d 70 6c  s.  Used to impl
1f080 65 6d 65 6e 74 20 22 49 4e 20 28 53 45 4c 45 43  ement "IN (SELEC
1f090 54 20 2e 2e 2e 29 22 2e 0a 2a 2a 0a 2a 2a 20 20  T ...)"..**.**  
1f0a0 20 20 20 53 52 54 5f 45 70 68 65 6d 54 61 62 20     SRT_EphemTab 
1f0b0 20 20 20 43 72 65 61 74 65 20 61 6e 20 74 65 6d     Create an tem
1f0c0 70 6f 72 61 72 79 20 74 61 62 6c 65 20 70 44 65  porary table pDe
1f0d0 73 74 2d 3e 69 53 44 50 61 72 6d 20 61 6e 64 20  st->iSDParm and 
1f0e0 73 74 6f 72 65 0a 2a 2a 20 20 20 20 20 20 20 20  store.**        
1f0f0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 65               the
1f100 20 72 65 73 75 6c 74 20 74 68 65 72 65 2e 20 54   result there. T
1f110 68 65 20 63 75 72 73 6f 72 20 69 73 20 6c 65 66  he cursor is lef
1f120 74 20 6f 70 65 6e 20 61 66 74 65 72 0a 2a 2a 20  t open after.** 
1f130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f140 20 20 20 20 72 65 74 75 72 6e 69 6e 67 2e 20 20      returning.  
1f150 54 68 69 73 20 69 73 20 6c 69 6b 65 20 53 52 54  This is like SRT
1f160 5f 54 61 62 6c 65 20 65 78 63 65 70 74 20 74 68  _Table except th
1f170 61 74 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  at.**           
1f180 20 20 20 20 20 20 20 20 20 20 74 68 69 73 20 64            this d
1f190 65 73 74 69 6e 61 74 69 6f 6e 20 75 73 65 73 20  estination uses 
1f1a0 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c  OP_OpenEphemeral
1f1b0 20 74 6f 20 63 72 65 61 74 65 0a 2a 2a 20 20 20   to create.**   
1f1c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f1d0 20 20 74 68 65 20 74 61 62 6c 65 20 66 69 72 73    the table firs
1f1e0 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54  t..**.**     SRT
1f1f0 5f 43 6f 72 6f 75 74 69 6e 65 20 20 20 47 65 6e  _Coroutine   Gen
1f200 65 72 61 74 65 20 61 20 63 6f 2d 72 6f 75 74 69  erate a co-routi
1f210 6e 65 20 74 68 61 74 20 72 65 74 75 72 6e 73 20  ne that returns 
1f220 61 20 6e 65 77 20 72 6f 77 20 6f 66 0a 2a 2a 20  a new row of.** 
1f230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f240 20 20 20 20 72 65 73 75 6c 74 73 20 65 61 63 68      results each
1f250 20 74 69 6d 65 20 69 74 20 69 73 20 69 6e 76 6f   time it is invo
1f260 6b 65 64 2e 20 20 54 68 65 20 65 6e 74 72 79 20  ked.  The entry 
1f270 70 6f 69 6e 74 0a 2a 2a 20 20 20 20 20 20 20 20  point.**        
1f280 20 20 20 20 20 20 20 20 20 20 20 20 20 6f 66 20               of 
1f290 74 68 65 20 63 6f 2d 72 6f 75 74 69 6e 65 20 69  the co-routine i
1f2a0 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69  s stored in regi
1f2b0 73 74 65 72 20 70 44 65 73 74 2d 3e 69 53 44 50  ster pDest->iSDP
1f2c0 61 72 6d 0a 2a 2a 20 20 20 20 20 20 20 20 20 20  arm.**          
1f2d0 20 20 20 20 20 20 20 20 20 20 20 61 6e 64 20 74             and t
1f2e0 68 65 20 72 65 73 75 6c 74 20 72 6f 77 20 69 73  he result row is
1f2f0 20 73 74 6f 72 65 64 20 69 6e 20 70 44 65 73 74   stored in pDest
1f300 2d 3e 6e 44 65 73 74 20 72 65 67 69 73 74 65 72  ->nDest register
1f310 73 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  s.**            
1f320 20 20 20 20 20 20 20 20 20 73 74 61 72 74 69 6e           startin
1f330 67 20 77 69 74 68 20 70 44 65 73 74 2d 3e 69 53  g with pDest->iS
1f340 64 73 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53  dst..**.**     S
1f350 52 54 5f 54 61 62 6c 65 20 20 20 20 20 20 20 53  RT_Table       S
1f360 74 6f 72 65 20 72 65 73 75 6c 74 73 20 69 6e 20  tore results in 
1f370 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 20  temporary table 
1f380 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 2e 0a  pDest->iSDParm..
1f390 2a 2a 20 20 20 20 20 53 52 54 5f 46 69 66 6f 20  **     SRT_Fifo 
1f3a0 20 20 20 20 20 20 20 54 68 69 73 20 69 73 20 6c         This is l
1f3b0 69 6b 65 20 53 52 54 5f 45 70 68 65 6d 54 61 62  ike SRT_EphemTab
1f3c0 20 65 78 63 65 70 74 20 74 68 61 74 20 74 68 65   except that the
1f3d0 20 74 61 62 6c 65 0a 2a 2a 20 20 20 20 20 20 20   table.**       
1f3e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 73                is
1f3f0 20 61 73 73 75 6d 65 64 20 74 6f 20 61 6c 72 65   assumed to alre
1f400 61 64 79 20 62 65 20 6f 70 65 6e 2e 20 20 53 52  ady be open.  SR
1f410 54 5f 46 69 66 6f 20 68 61 73 0a 2a 2a 20 20 20  T_Fifo has.**   
1f420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f430 20 20 74 68 65 20 61 64 64 69 74 69 6f 6e 61 6c    the additional
1f440 20 70 72 6f 70 65 72 74 79 20 6f 66 20 62 65 69   property of bei
1f450 6e 67 20 61 62 6c 65 20 74 6f 20 69 67 6e 6f 72  ng able to ignor
1f460 65 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  e.**            
1f470 20 20 20 20 20 20 20 20 20 74 68 65 20 4f 52 44           the ORD
1f480 45 52 20 42 59 20 63 6c 61 75 73 65 2e 0a 2a 2a  ER BY clause..**
1f490 0a 2a 2a 20 20 20 20 20 53 52 54 5f 44 69 73 74  .**     SRT_Dist
1f4a0 46 69 66 6f 20 20 20 20 53 74 6f 72 65 20 72 65  Fifo    Store re
1f4b0 73 75 6c 74 73 20 69 6e 20 61 20 74 65 6d 70 6f  sults in a tempo
1f4c0 72 61 72 79 20 74 61 62 6c 65 20 70 44 65 73 74  rary table pDest
1f4d0 2d 3e 69 53 44 50 61 72 6d 2e 0a 2a 2a 20 20 20  ->iSDParm..**   
1f4e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f4f0 20 20 42 75 74 20 61 6c 73 6f 20 75 73 65 20 74    But also use t
1f500 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 20 70  emporary table p
1f510 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 2b 31 20  Dest->iSDParm+1 
1f520 61 73 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  as.**           
1f530 20 20 20 20 20 20 20 20 20 20 61 20 72 65 63 6f            a reco
1f540 72 64 20 6f 66 20 61 6c 6c 20 70 72 69 6f 72 20  rd of all prior 
1f550 72 65 73 75 6c 74 73 20 61 6e 64 20 69 67 6e 6f  results and igno
1f560 72 65 20 61 6e 79 20 64 75 70 6c 69 63 61 74 65  re any duplicate
1f570 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
1f580 20 20 20 20 20 20 20 20 72 6f 77 73 2e 20 20 4e          rows.  N
1f590 61 6d 65 20 6d 65 61 6e 73 3a 20 20 22 44 69 73  ame means:  "Dis
1f5a0 74 69 6e 63 74 20 46 69 66 6f 22 2e 0a 2a 2a 0a  tinct Fifo"..**.
1f5b0 2a 2a 20 20 20 20 20 53 52 54 5f 51 75 65 75 65  **     SRT_Queue
1f5c0 20 20 20 20 20 20 20 53 74 6f 72 65 20 72 65 73         Store res
1f5d0 75 6c 74 73 20 69 6e 20 70 72 69 6f 72 69 74 79  ults in priority
1f5e0 20 71 75 65 75 65 20 70 44 65 73 74 2d 3e 69 53   queue pDest->iS
1f5f0 44 50 61 72 6d 20 28 72 65 61 6c 6c 79 0a 2a 2a  DParm (really.**
1f600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f610 20 20 20 20 20 61 6e 20 69 6e 64 65 78 29 2e 20       an index). 
1f620 20 41 70 70 65 6e 64 20 61 20 73 65 71 75 65 6e   Append a sequen
1f630 63 65 20 6e 75 6d 62 65 72 20 73 6f 20 74 68 61  ce number so tha
1f640 74 20 61 6c 6c 20 65 6e 74 72 69 65 73 0a 2a 2a  t all entries.**
1f650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f660 20 20 20 20 20 61 72 65 20 64 69 73 74 69 6e 63       are distinc
1f670 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54  t..**.**     SRT
1f680 5f 44 69 73 74 51 75 65 75 65 20 20 20 53 74 6f  _DistQueue   Sto
1f690 72 65 20 72 65 73 75 6c 74 73 20 69 6e 20 70 72  re results in pr
1f6a0 69 6f 72 69 74 79 20 71 75 65 75 65 20 70 44 65  iority queue pDe
1f6b0 73 74 2d 3e 69 53 44 50 61 72 6d 20 6f 6e 6c 79  st->iSDParm only
1f6c0 20 69 66 0a 2a 2a 20 20 20 20 20 20 20 20 20 20   if.**          
1f6d0 20 20 20 20 20 20 20 20 20 20 20 74 68 65 20 73             the s
1f6e0 61 6d 65 20 72 65 63 6f 72 64 20 68 61 73 20 6e  ame record has n
1f6f0 65 76 65 72 20 62 65 65 6e 20 73 74 6f 72 65 64  ever been stored
1f700 20 62 65 66 6f 72 65 2e 20 20 54 68 65 0a 2a 2a   before.  The.**
1f710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f720 20 20 20 20 20 69 6e 64 65 78 20 61 74 20 70 44       index at pD
1f730 65 73 74 2d 3e 69 53 44 50 61 72 6d 2b 31 20 68  est->iSDParm+1 h
1f740 6f 6c 64 20 61 6c 6c 20 70 72 69 6f 72 20 73 74  old all prior st
1f750 6f 72 65 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  ores..*/.#define
1f760 20 53 52 54 5f 55 6e 69 6f 6e 20 20 20 20 20 20   SRT_Union      
1f770 20 20 31 20 20 2f 2a 20 53 74 6f 72 65 20 72 65    1  /* Store re
1f780 73 75 6c 74 20 61 73 20 6b 65 79 73 20 69 6e 20  sult as keys in 
1f790 61 6e 20 69 6e 64 65 78 20 2a 2f 0a 23 64 65 66  an index */.#def
1f7a0 69 6e 65 20 53 52 54 5f 45 78 63 65 70 74 20 20  ine SRT_Except  
1f7b0 20 20 20 20 20 32 20 20 2f 2a 20 52 65 6d 6f 76       2  /* Remov
1f7c0 65 20 72 65 73 75 6c 74 20 66 72 6f 6d 20 61 20  e result from a 
1f7d0 55 4e 49 4f 4e 20 69 6e 64 65 78 20 2a 2f 0a 23  UNION index */.#
1f7e0 64 65 66 69 6e 65 20 53 52 54 5f 45 78 69 73 74  define SRT_Exist
1f7f0 73 20 20 20 20 20 20 20 33 20 20 2f 2a 20 53 74  s       3  /* St
1f800 6f 72 65 20 31 20 69 66 20 74 68 65 20 72 65 73  ore 1 if the res
1f810 75 6c 74 20 69 73 20 6e 6f 74 20 65 6d 70 74 79  ult is not empty
1f820 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f   */.#define SRT_
1f830 44 69 73 63 61 72 64 20 20 20 20 20 20 34 20 20  Discard      4  
1f840 2f 2a 20 44 6f 20 6e 6f 74 20 73 61 76 65 20 74  /* Do not save t
1f850 68 65 20 72 65 73 75 6c 74 73 20 61 6e 79 77 68  he results anywh
1f860 65 72 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ere */.#define S
1f870 52 54 5f 46 69 66 6f 20 20 20 20 20 20 20 20 20  RT_Fifo         
1f880 35 20 20 2f 2a 20 53 74 6f 72 65 20 72 65 73 75  5  /* Store resu
1f890 6c 74 20 61 73 20 64 61 74 61 20 77 69 74 68 20  lt as data with 
1f8a0 61 6e 20 61 75 74 6f 6d 61 74 69 63 20 72 6f 77  an automatic row
1f8b0 69 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52  id */.#define SR
1f8c0 54 5f 44 69 73 74 46 69 66 6f 20 20 20 20 20 36  T_DistFifo     6
1f8d0 20 20 2f 2a 20 4c 69 6b 65 20 53 52 54 5f 46 69    /* Like SRT_Fi
1f8e0 66 6f 2c 20 62 75 74 20 75 6e 69 71 75 65 20 72  fo, but unique r
1f8f0 65 73 75 6c 74 73 20 6f 6e 6c 79 20 2a 2f 0a 23  esults only */.#
1f900 64 65 66 69 6e 65 20 53 52 54 5f 51 75 65 75 65  define SRT_Queue
1f910 20 20 20 20 20 20 20 20 37 20 20 2f 2a 20 53 74          7  /* St
1f920 6f 72 65 20 72 65 73 75 6c 74 20 69 6e 20 61 6e  ore result in an
1f930 20 71 75 65 75 65 20 2a 2f 0a 23 64 65 66 69 6e   queue */.#defin
1f940 65 20 53 52 54 5f 44 69 73 74 51 75 65 75 65 20  e SRT_DistQueue 
1f950 20 20 20 38 20 20 2f 2a 20 4c 69 6b 65 20 53 52     8  /* Like SR
1f960 54 5f 51 75 65 75 65 2c 20 62 75 74 20 75 6e 69  T_Queue, but uni
1f970 71 75 65 20 72 65 73 75 6c 74 73 20 6f 6e 6c 79  que results only
1f980 20 2a 2f 0a 0a 2f 2a 20 54 68 65 20 4f 52 44 45   */../* The ORDE
1f990 52 20 42 59 20 63 6c 61 75 73 65 20 69 73 20 69  R BY clause is i
1f9a0 67 6e 6f 72 65 64 20 66 6f 72 20 61 6c 6c 20 6f  gnored for all o
1f9b0 66 20 74 68 65 20 61 62 6f 76 65 20 2a 2f 0a 23  f the above */.#
1f9c0 64 65 66 69 6e 65 20 49 67 6e 6f 72 61 62 6c 65  define Ignorable
1f9d0 4f 72 64 65 72 62 79 28 58 29 20 28 28 58 2d 3e  Orderby(X) ((X->
1f9e0 65 44 65 73 74 29 3c 3d 53 52 54 5f 44 69 73 74  eDest)<=SRT_Dist
1f9f0 51 75 65 75 65 29 0a 0a 23 64 65 66 69 6e 65 20  Queue)..#define 
1fa00 53 52 54 5f 4f 75 74 70 75 74 20 20 20 20 20 20  SRT_Output      
1fa10 20 39 20 20 2f 2a 20 4f 75 74 70 75 74 20 65 61   9  /* Output ea
1fa20 63 68 20 72 6f 77 20 6f 66 20 72 65 73 75 6c 74  ch row of result
1fa30 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f   */.#define SRT_
1fa40 4d 65 6d 20 20 20 20 20 20 20 20 20 31 30 20 20  Mem         10  
1fa50 2f 2a 20 53 74 6f 72 65 20 72 65 73 75 6c 74 20  /* Store result 
1fa60 69 6e 20 61 20 6d 65 6d 6f 72 79 20 63 65 6c 6c  in a memory cell
1fa70 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f   */.#define SRT_
1fa80 53 65 74 20 20 20 20 20 20 20 20 20 31 31 20 20  Set         11  
1fa90 2f 2a 20 53 74 6f 72 65 20 72 65 73 75 6c 74 73  /* Store results
1faa0 20 61 73 20 6b 65 79 73 20 69 6e 20 61 6e 20 69   as keys in an i
1fab0 6e 64 65 78 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ndex */.#define 
1fac0 53 52 54 5f 45 70 68 65 6d 54 61 62 20 20 20 20  SRT_EphemTab    
1fad0 31 32 20 20 2f 2a 20 43 72 65 61 74 65 20 74 72  12  /* Create tr
1fae0 61 6e 73 69 65 6e 74 20 74 61 62 20 61 6e 64 20  ansient tab and 
1faf0 73 74 6f 72 65 20 6c 69 6b 65 20 53 52 54 5f 54  store like SRT_T
1fb00 61 62 6c 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  able */.#define 
1fb10 53 52 54 5f 43 6f 72 6f 75 74 69 6e 65 20 20 20  SRT_Coroutine   
1fb20 31 33 20 20 2f 2a 20 47 65 6e 65 72 61 74 65 20  13  /* Generate 
1fb30 61 20 73 69 6e 67 6c 65 20 72 6f 77 20 6f 66 20  a single row of 
1fb40 72 65 73 75 6c 74 20 2a 2f 0a 23 64 65 66 69 6e  result */.#defin
1fb50 65 20 53 52 54 5f 54 61 62 6c 65 20 20 20 20 20  e SRT_Table     
1fb60 20 20 31 34 20 20 2f 2a 20 53 74 6f 72 65 20 72    14  /* Store r
1fb70 65 73 75 6c 74 20 61 73 20 64 61 74 61 20 77 69  esult as data wi
1fb80 74 68 20 61 6e 20 61 75 74 6f 6d 61 74 69 63 20  th an automatic 
1fb90 72 6f 77 69 64 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20  rowid */../*.** 
1fba0 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  An instance of t
1fbb0 68 69 73 20 6f 62 6a 65 63 74 20 64 65 73 63 72  his object descr
1fbc0 69 62 65 73 20 77 68 65 72 65 20 74 6f 20 70 75  ibes where to pu
1fbd0 74 20 6f 66 20 74 68 65 20 72 65 73 75 6c 74 73  t of the results
1fbe0 20 6f 66 0a 2a 2a 20 61 20 53 45 4c 45 43 54 20   of.** a SELECT 
1fbf0 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2f 0a 73 74  statement..*/.st
1fc00 72 75 63 74 20 53 65 6c 65 63 74 44 65 73 74 20  ruct SelectDest 
1fc10 7b 0a 20 20 75 38 20 65 44 65 73 74 3b 20 20 20  {.  u8 eDest;   
1fc20 20 20 20 20 20 20 20 20 20 2f 2a 20 48 6f 77 20           /* How 
1fc30 74 6f 20 64 69 73 70 6f 73 65 20 6f 66 20 74 68  to dispose of th
1fc40 65 20 72 65 73 75 6c 74 73 2e 20 20 4f 6e 20 6f  e results.  On o
1fc50 66 20 53 52 54 5f 2a 20 61 62 6f 76 65 2e 20 2a  f SRT_* above. *
1fc60 2f 0a 20 20 69 6e 74 20 69 53 44 50 61 72 6d 3b  /.  int iSDParm;
1fc70 20 20 20 20 20 20 20 20 20 2f 2a 20 41 20 70 61           /* A pa
1fc80 72 61 6d 65 74 65 72 20 75 73 65 64 20 62 79 20  rameter used by 
1fc90 74 68 65 20 65 44 65 73 74 20 64 69 73 70 6f 73  the eDest dispos
1fca0 61 6c 20 6d 65 74 68 6f 64 20 2a 2f 0a 20 20 69  al method */.  i
1fcb0 6e 74 20 69 53 64 73 74 3b 20 20 20 20 20 20 20  nt iSdst;       
1fcc0 20 20 20 20 2f 2a 20 42 61 73 65 20 72 65 67 69      /* Base regi
1fcd0 73 74 65 72 20 77 68 65 72 65 20 72 65 73 75 6c  ster where resul
1fce0 74 73 20 61 72 65 20 77 72 69 74 74 65 6e 20 2a  ts are written *
1fcf0 2f 0a 20 20 69 6e 74 20 6e 53 64 73 74 3b 20 20  /.  int nSdst;  
1fd00 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
1fd10 65 72 20 6f 66 20 72 65 67 69 73 74 65 72 73 20  er of registers 
1fd20 61 6c 6c 6f 63 61 74 65 64 20 2a 2f 0a 20 20 63  allocated */.  c
1fd30 68 61 72 20 2a 7a 41 66 66 53 64 73 74 3b 20 20  har *zAffSdst;  
1fd40 20 20 20 20 2f 2a 20 41 66 66 69 6e 69 74 79 20      /* Affinity 
1fd50 75 73 65 64 20 77 68 65 6e 20 65 44 65 73 74 3d  used when eDest=
1fd60 3d 53 52 54 5f 53 65 74 20 2a 2f 0a 20 20 45 78  =SRT_Set */.  Ex
1fd70 70 72 4c 69 73 74 20 2a 70 4f 72 64 65 72 42 79  prList *pOrderBy
1fd80 3b 20 20 2f 2a 20 4b 65 79 20 63 6f 6c 75 6d 6e  ;  /* Key column
1fd90 73 20 66 6f 72 20 53 52 54 5f 51 75 65 75 65 20  s for SRT_Queue 
1fda0 61 6e 64 20 53 52 54 5f 44 69 73 74 51 75 65 75  and SRT_DistQueu
1fdb0 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 44  e */.};../*.** D
1fdc0 75 72 69 6e 67 20 63 6f 64 65 20 67 65 6e 65 72  uring code gener
1fdd0 61 74 69 6f 6e 20 6f 66 20 73 74 61 74 65 6d 65  ation of stateme
1fde0 6e 74 73 20 74 68 61 74 20 64 6f 20 69 6e 73 65  nts that do inse
1fdf0 72 74 73 20 69 6e 74 6f 20 41 55 54 4f 49 4e 43  rts into AUTOINC
1fe00 52 45 4d 45 4e 54 0a 2a 2a 20 74 61 62 6c 65 73  REMENT.** tables
1fe10 2c 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  , the following 
1fe20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 69 73 20 61  information is a
1fe30 74 74 61 63 68 65 64 20 74 6f 20 74 68 65 20 54  ttached to the T
1fe40 61 62 6c 65 2e 75 2e 61 75 74 6f 49 6e 63 2e 70  able.u.autoInc.p
1fe50 0a 2a 2a 20 70 6f 69 6e 74 65 72 20 6f 66 20 65  .** pointer of e
1fe60 61 63 68 20 61 75 74 6f 69 6e 63 72 65 6d 65 6e  ach autoincremen
1fe70 74 20 74 61 62 6c 65 20 74 6f 20 72 65 63 6f 72  t table to recor
1fe80 64 20 73 6f 6d 65 20 73 69 64 65 20 69 6e 66 6f  d some side info
1fe90 72 6d 61 74 69 6f 6e 20 74 68 61 74 0a 2a 2a 20  rmation that.** 
1fea0 74 68 65 20 63 6f 64 65 20 67 65 6e 65 72 61 74  the code generat
1feb0 6f 72 20 6e 65 65 64 73 2e 20 20 57 65 20 68 61  or needs.  We ha
1fec0 76 65 20 74 6f 20 6b 65 65 70 20 70 65 72 2d 74  ve to keep per-t
1fed0 61 62 6c 65 20 61 75 74 6f 69 6e 63 72 65 6d 65  able autoincreme
1fee0 6e 74 0a 2a 2a 20 69 6e 66 6f 72 6d 61 74 69 6f  nt.** informatio
1fef0 6e 20 69 6e 20 63 61 73 65 20 69 6e 73 65 72 74  n in case insert
1ff00 73 20 61 72 65 20 64 6f 6e 65 20 77 69 74 68 69  s are done withi
1ff10 6e 20 74 72 69 67 67 65 72 73 2e 20 20 54 72 69  n triggers.  Tri
1ff20 67 67 65 72 73 20 64 6f 20 6e 6f 74 0a 2a 2a 20  ggers do not.** 
1ff30 6e 6f 72 6d 61 6c 6c 79 20 63 6f 6f 72 64 69 6e  normally coordin
1ff40 61 74 65 20 74 68 65 69 72 20 61 63 74 69 76 69  ate their activi
1ff50 74 69 65 73 2c 20 62 75 74 20 77 65 20 64 6f 20  ties, but we do 
1ff60 6e 65 65 64 20 74 6f 20 63 6f 6f 72 64 69 6e 61  need to coordina
1ff70 74 65 20 74 68 65 0a 2a 2a 20 6c 6f 61 64 69 6e  te the.** loadin
1ff80 67 20 61 6e 64 20 73 61 76 69 6e 67 20 6f 66 20  g and saving of 
1ff90 61 75 74 6f 69 6e 63 72 65 6d 65 6e 74 20 69 6e  autoincrement in
1ffa0 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 73 74  formation..*/.st
1ffb0 72 75 63 74 20 41 75 74 6f 69 6e 63 49 6e 66 6f  ruct AutoincInfo
1ffc0 20 7b 0a 20 20 41 75 74 6f 69 6e 63 49 6e 66 6f   {.  AutoincInfo
1ffd0 20 2a 70 4e 65 78 74 3b 20 20 20 2f 2a 20 4e 65   *pNext;   /* Ne
1ffe0 78 74 20 69 6e 66 6f 20 62 6c 6f 63 6b 20 69 6e  xt info block in
1fff0 20 61 20 6c 69 73 74 20 6f 66 20 74 68 65 6d 20   a list of them 
20000 61 6c 6c 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a  all */.  Table *
20010 70 54 61 62 3b 20 20 20 20 20 20 20 20 20 20 2f  pTab;          /
20020 2a 20 54 61 62 6c 65 20 74 68 69 73 20 69 6e 66  * Table this inf
20030 6f 20 62 6c 6f 63 6b 20 72 65 66 65 72 73 20 74  o block refers t
20040 6f 20 2a 2f 0a 20 20 69 6e 74 20 69 44 62 3b 20  o */.  int iDb; 
20050 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
20060 49 6e 64 65 78 20 69 6e 20 73 71 6c 69 74 65 33  Index in sqlite3
20070 2e 61 44 62 5b 5d 20 6f 66 20 64 61 74 61 62 61  .aDb[] of databa
20080 73 65 20 68 6f 6c 64 69 6e 67 20 70 54 61 62 20  se holding pTab 
20090 2a 2f 0a 20 20 69 6e 74 20 72 65 67 43 74 72 3b  */.  int regCtr;
200a0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 65             /* Me
200b0 6d 6f 72 79 20 72 65 67 69 73 74 65 72 20 68 6f  mory register ho
200c0 6c 64 69 6e 67 20 74 68 65 20 72 6f 77 69 64 20  lding the rowid 
200d0 63 6f 75 6e 74 65 72 20 2a 2f 0a 7d 3b 0a 0a 2f  counter */.};../
200e0 2a 0a 2a 2a 20 41 74 20 6c 65 61 73 74 20 6f 6e  *.** At least on
200f0 65 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  e instance of th
20100 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75  e following stru
20110 63 74 75 72 65 20 69 73 20 63 72 65 61 74 65 64  cture is created
20120 20 66 6f 72 20 65 61 63 68 0a 2a 2a 20 74 72 69   for each.** tri
20130 67 67 65 72 20 74 68 61 74 20 6d 61 79 20 62 65  gger that may be
20140 20 66 69 72 65 64 20 77 68 69 6c 65 20 70 61 72   fired while par
20150 73 69 6e 67 20 61 6e 20 49 4e 53 45 52 54 2c 20  sing an INSERT, 
20160 55 50 44 41 54 45 20 6f 72 20 44 45 4c 45 54 45  UPDATE or DELETE
20170 0a 2a 2a 20 73 74 61 74 65 6d 65 6e 74 2e 20 41  .** statement. A
20180 6c 6c 20 73 75 63 68 20 6f 62 6a 65 63 74 73 20  ll such objects 
20190 61 72 65 20 73 74 6f 72 65 64 20 69 6e 20 74 68  are stored in th
201a0 65 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 68 65  e linked list he
201b0 61 64 65 64 20 61 74 0a 2a 2a 20 50 61 72 73 65  aded at.** Parse
201c0 2e 70 54 72 69 67 67 65 72 50 72 67 20 61 6e 64  .pTriggerPrg and
201d0 20 64 65 6c 65 74 65 64 20 6f 6e 63 65 20 73 74   deleted once st
201e0 61 74 65 6d 65 6e 74 20 63 6f 6d 70 69 6c 61 74  atement compilat
201f0 69 6f 6e 20 68 61 73 20 62 65 65 6e 0a 2a 2a 20  ion has been.** 
20200 63 6f 6d 70 6c 65 74 65 64 2e 0a 2a 2a 0a 2a 2a  completed..**.**
20210 20 41 20 56 64 62 65 20 73 75 62 2d 70 72 6f 67   A Vdbe sub-prog
20220 72 61 6d 20 74 68 61 74 20 69 6d 70 6c 65 6d 65  ram that impleme
20230 6e 74 73 20 74 68 65 20 62 6f 64 79 20 61 6e 64  nts the body and
20240 20 57 48 45 4e 20 63 6c 61 75 73 65 20 6f 66 20   WHEN clause of 
20250 74 72 69 67 67 65 72 0a 2a 2a 20 54 72 69 67 67  trigger.** Trigg
20260 65 72 50 72 67 2e 70 54 72 69 67 67 65 72 2c 20  erPrg.pTrigger, 
20270 61 73 73 75 6d 69 6e 67 20 61 20 64 65 66 61 75  assuming a defau
20280 6c 74 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 63  lt ON CONFLICT c
20290 6c 61 75 73 65 20 6f 66 0a 2a 2a 20 54 72 69 67  lause of.** Trig
202a0 67 65 72 50 72 67 2e 6f 72 63 6f 6e 66 2c 20 69  gerPrg.orconf, i
202b0 73 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20  s stored in the 
202c0 54 72 69 67 67 65 72 50 72 67 2e 70 50 72 6f 67  TriggerPrg.pProg
202d0 72 61 6d 20 76 61 72 69 61 62 6c 65 2e 0a 2a 2a  ram variable..**
202e0 20 54 68 65 20 50 61 72 73 65 2e 70 54 72 69 67   The Parse.pTrig
202f0 67 65 72 50 72 67 20 6c 69 73 74 20 6e 65 76 65  gerPrg list neve
20300 72 20 63 6f 6e 74 61 69 6e 73 20 74 77 6f 20 65  r contains two e
20310 6e 74 72 69 65 73 20 77 69 74 68 20 74 68 65 20  ntries with the 
20320 73 61 6d 65 0a 2a 2a 20 76 61 6c 75 65 73 20 66  same.** values f
20330 6f 72 20 62 6f 74 68 20 70 54 72 69 67 67 65 72  or both pTrigger
20340 20 61 6e 64 20 6f 72 63 6f 6e 66 2e 0a 2a 2a 0a   and orconf..**.
20350 2a 2a 20 54 68 65 20 54 72 69 67 67 65 72 50 72  ** The TriggerPr
20360 67 2e 61 43 6f 6c 6d 61 73 6b 5b 30 5d 20 76 61  g.aColmask[0] va
20370 72 69 61 62 6c 65 20 69 73 20 73 65 74 20 74 6f  riable is set to
20380 20 61 20 6d 61 73 6b 20 6f 66 20 6f 6c 64 2e 2a   a mask of old.*
20390 20 63 6f 6c 75 6d 6e 73 0a 2a 2a 20 61 63 63 65   columns.** acce
203a0 73 73 65 64 20 28 6f 72 20 73 65 74 20 74 6f 20  ssed (or set to 
203b0 30 20 66 6f 72 20 74 72 69 67 67 65 72 73 20 66  0 for triggers f
203c0 69 72 65 64 20 61 73 20 61 20 72 65 73 75 6c 74  ired as a result
203d0 20 6f 66 20 49 4e 53 45 52 54 0a 2a 2a 20 73 74   of INSERT.** st
203e0 61 74 65 6d 65 6e 74 73 29 2e 20 53 69 6d 69 6c  atements). Simil
203f0 61 72 6c 79 2c 20 74 68 65 20 54 72 69 67 67 65  arly, the Trigge
20400 72 50 72 67 2e 61 43 6f 6c 6d 61 73 6b 5b 31 5d  rPrg.aColmask[1]
20410 20 76 61 72 69 61 62 6c 65 20 69 73 20 73 65 74   variable is set
20420 20 74 6f 0a 2a 2a 20 61 20 6d 61 73 6b 20 6f 66   to.** a mask of
20430 20 6e 65 77 2e 2a 20 63 6f 6c 75 6d 6e 73 20 75   new.* columns u
20440 73 65 64 20 62 79 20 74 68 65 20 70 72 6f 67 72  sed by the progr
20450 61 6d 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 54 72  am..*/.struct Tr
20460 69 67 67 65 72 50 72 67 20 7b 0a 20 20 54 72 69  iggerPrg {.  Tri
20470 67 67 65 72 20 2a 70 54 72 69 67 67 65 72 3b 20  gger *pTrigger; 
20480 20 20 20 20 20 2f 2a 20 54 72 69 67 67 65 72 20       /* Trigger 
20490 74 68 69 73 20 70 72 6f 67 72 61 6d 20 77 61 73  this program was
204a0 20 63 6f 64 65 64 20 66 72 6f 6d 20 2a 2f 0a 20   coded from */. 
204b0 20 54 72 69 67 67 65 72 50 72 67 20 2a 70 4e 65   TriggerPrg *pNe
204c0 78 74 3b 20 20 20 20 20 20 2f 2a 20 4e 65 78 74  xt;      /* Next
204d0 20 65 6e 74 72 79 20 69 6e 20 50 61 72 73 65 2e   entry in Parse.
204e0 70 54 72 69 67 67 65 72 50 72 67 20 6c 69 73 74  pTriggerPrg list
204f0 20 2a 2f 0a 20 20 53 75 62 50 72 6f 67 72 61 6d   */.  SubProgram
20500 20 2a 70 50 72 6f 67 72 61 6d 3b 20 20 20 2f 2a   *pProgram;   /*
20510 20 50 72 6f 67 72 61 6d 20 69 6d 70 6c 65 6d 65   Program impleme
20520 6e 74 69 6e 67 20 70 54 72 69 67 67 65 72 2f 6f  nting pTrigger/o
20530 72 63 6f 6e 66 20 2a 2f 0a 20 20 69 6e 74 20 6f  rconf */.  int o
20540 72 63 6f 6e 66 3b 20 20 20 20 20 20 20 20 20 20  rconf;          
20550 20 20 20 2f 2a 20 44 65 66 61 75 6c 74 20 4f 4e     /* Default ON
20560 20 43 4f 4e 46 4c 49 43 54 20 70 6f 6c 69 63 79   CONFLICT policy
20570 20 2a 2f 0a 20 20 75 33 32 20 61 43 6f 6c 6d 61   */.  u32 aColma
20580 73 6b 5b 32 5d 3b 20 20 20 20 20 20 20 20 2f 2a  sk[2];        /*
20590 20 4d 61 73 6b 73 20 6f 66 20 6f 6c 64 2e 2a 2c   Masks of old.*,
205a0 20 6e 65 77 2e 2a 20 63 6f 6c 75 6d 6e 73 20 61   new.* columns a
205b0 63 63 65 73 73 65 64 20 2a 2f 0a 7d 3b 0a 0a 2f  ccessed */.};../
205c0 2a 0a 2a 2a 20 54 68 65 20 79 44 62 4d 61 73 6b  *.** The yDbMask
205d0 20 64 61 74 61 74 79 70 65 20 66 6f 72 20 74 68   datatype for th
205e0 65 20 62 69 74 6d 61 73 6b 20 6f 66 20 61 6c 6c  e bitmask of all
205f0 20 61 74 74 61 63 68 65 64 20 64 61 74 61 62 61   attached databa
20600 73 65 73 2e 0a 2a 2f 0a 23 69 66 20 53 51 4c 49  ses..*/.#if SQLI
20610 54 45 5f 4d 41 58 5f 41 54 54 41 43 48 45 44 3e  TE_MAX_ATTACHED>
20620 33 30 0a 20 20 74 79 70 65 64 65 66 20 75 6e 73  30.  typedef uns
20630 69 67 6e 65 64 20 63 68 61 72 20 79 44 62 4d 61  igned char yDbMa
20640 73 6b 5b 28 53 51 4c 49 54 45 5f 4d 41 58 5f 41  sk[(SQLITE_MAX_A
20650 54 54 41 43 48 45 44 2b 39 29 2f 38 5d 3b 0a 23  TTACHED+9)/8];.#
20660 20 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 54 65   define DbMaskTe
20670 73 74 28 4d 2c 49 29 20 20 20 20 28 28 28 4d 29  st(M,I)    (((M)
20680 5b 28 49 29 2f 38 5d 26 28 31 3c 3c 28 28 49 29  [(I)/8]&(1<<((I)
20690 26 37 29 29 29 21 3d 30 29 0a 23 20 64 65 66 69  &7)))!=0).# defi
206a0 6e 65 20 44 62 4d 61 73 6b 5a 65 72 6f 28 4d 29  ne DbMaskZero(M)
206b0 20 20 20 20 20 20 6d 65 6d 73 65 74 28 28 4d 29        memset((M)
206c0 2c 30 2c 73 69 7a 65 6f 66 28 4d 29 29 0a 23 20  ,0,sizeof(M)).# 
206d0 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 53 65 74  define DbMaskSet
206e0 28 4d 2c 49 29 20 20 20 20 20 28 4d 29 5b 28 49  (M,I)     (M)[(I
206f0 29 2f 38 5d 7c 3d 28 31 3c 3c 28 28 49 29 26 37  )/8]|=(1<<((I)&7
20700 29 29 0a 23 20 64 65 66 69 6e 65 20 44 62 4d 61  )).# define DbMa
20710 73 6b 41 6c 6c 5a 65 72 6f 28 4d 29 20 20 20 73  skAllZero(M)   s
20720 71 6c 69 74 65 33 44 62 4d 61 73 6b 41 6c 6c 5a  qlite3DbMaskAllZ
20730 65 72 6f 28 4d 29 0a 23 20 64 65 66 69 6e 65 20  ero(M).# define 
20740 44 62 4d 61 73 6b 4e 6f 6e 5a 65 72 6f 28 4d 29  DbMaskNonZero(M)
20750 20 20 20 28 73 71 6c 69 74 65 33 44 62 4d 61 73     (sqlite3DbMas
20760 6b 41 6c 6c 5a 65 72 6f 28 4d 29 3d 3d 30 29 0a  kAllZero(M)==0).
20770 23 65 6c 73 65 0a 20 20 74 79 70 65 64 65 66 20  #else.  typedef 
20780 75 6e 73 69 67 6e 65 64 20 69 6e 74 20 79 44 62  unsigned int yDb
20790 4d 61 73 6b 3b 0a 23 20 64 65 66 69 6e 65 20 44  Mask;.# define D
207a0 62 4d 61 73 6b 54 65 73 74 28 4d 2c 49 29 20 20  bMaskTest(M,I)  
207b0 20 20 28 28 28 4d 29 26 28 28 28 79 44 62 4d 61    (((M)&(((yDbMa
207c0 73 6b 29 31 29 3c 3c 28 49 29 29 29 21 3d 30 29  sk)1)<<(I)))!=0)
207d0 0a 23 20 64 65 66 69 6e 65 20 44 62 4d 61 73 6b  .# define DbMask
207e0 5a 65 72 6f 28 4d 29 20 20 20 20 20 20 28 4d 29  Zero(M)      (M)
207f0 3d 30 0a 23 20 64 65 66 69 6e 65 20 44 62 4d 61  =0.# define DbMa
20800 73 6b 53 65 74 28 4d 2c 49 29 20 20 20 20 20 28  skSet(M,I)     (
20810 4d 29 7c 3d 28 28 28 79 44 62 4d 61 73 6b 29 31  M)|=(((yDbMask)1
20820 29 3c 3c 28 49 29 29 0a 23 20 64 65 66 69 6e 65  )<<(I)).# define
20830 20 44 62 4d 61 73 6b 41 6c 6c 5a 65 72 6f 28 4d   DbMaskAllZero(M
20840 29 20 20 20 28 4d 29 3d 3d 30 0a 23 20 64 65 66  )   (M)==0.# def
20850 69 6e 65 20 44 62 4d 61 73 6b 4e 6f 6e 5a 65 72  ine DbMaskNonZer
20860 6f 28 4d 29 20 20 20 28 4d 29 21 3d 30 0a 23 65  o(M)   (M)!=0.#e
20870 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 53  ndif../*.** An S
20880 51 4c 20 70 61 72 73 65 72 20 63 6f 6e 74 65 78  QL parser contex
20890 74 2e 20 20 41 20 63 6f 70 79 20 6f 66 20 74 68  t.  A copy of th
208a0 69 73 20 73 74 72 75 63 74 75 72 65 20 69 73 20  is structure is 
208b0 70 61 73 73 65 64 20 74 68 72 6f 75 67 68 0a 2a  passed through.*
208c0 2a 20 74 68 65 20 70 61 72 73 65 72 20 61 6e 64  * the parser and
208d0 20 64 6f 77 6e 20 69 6e 74 6f 20 61 6c 6c 20 74   down into all t
208e0 68 65 20 70 61 72 73 65 72 20 61 63 74 69 6f 6e  he parser action
208f0 20 72 6f 75 74 69 6e 65 20 69 6e 20 6f 72 64 65   routine in orde
20900 72 20 74 6f 0a 2a 2a 20 63 61 72 72 79 20 61 72  r to.** carry ar
20910 6f 75 6e 64 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  ound information
20920 20 74 68 61 74 20 69 73 20 67 6c 6f 62 61 6c 20   that is global 
20930 74 6f 20 74 68 65 20 65 6e 74 69 72 65 20 70 61  to the entire pa
20940 72 73 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 73  rse..**.** The s
20950 74 72 75 63 74 75 72 65 20 69 73 20 64 69 76 69  tructure is divi
20960 64 65 64 20 69 6e 74 6f 20 74 77 6f 20 70 61 72  ded into two par
20970 74 73 2e 20 20 57 68 65 6e 20 74 68 65 20 70 61  ts.  When the pa
20980 72 73 65 72 20 61 6e 64 20 63 6f 64 65 0a 2a 2a  rser and code.**
20990 20 67 65 6e 65 72 61 74 65 20 63 61 6c 6c 20 74   generate call t
209a0 68 65 6d 73 65 6c 76 65 73 20 72 65 63 75 72 73  hemselves recurs
209b0 69 76 65 6c 79 2c 20 74 68 65 20 66 69 72 73 74  ively, the first
209c0 20 70 61 72 74 20 6f 66 20 74 68 65 20 73 74 72   part of the str
209d0 75 63 74 75 72 65 0a 2a 2a 20 69 73 20 63 6f 6e  ucture.** is con
209e0 73 74 61 6e 74 20 62 75 74 20 74 68 65 20 73 65  stant but the se
209f0 63 6f 6e 64 20 70 61 72 74 20 69 73 20 72 65 73  cond part is res
20a00 65 74 20 61 74 20 74 68 65 20 62 65 67 69 6e 6e  et at the beginn
20a10 69 6e 67 20 61 6e 64 20 65 6e 64 20 6f 66 0a 2a  ing and end of.*
20a20 2a 20 65 61 63 68 20 72 65 63 75 72 73 69 6f 6e  * each recursion
20a30 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6e 54 61 62  ..**.** The nTab
20a40 6c 65 4c 6f 63 6b 20 61 6e 64 20 61 54 61 62 6c  leLock and aTabl
20a50 65 4c 6f 63 6b 20 76 61 72 69 61 62 6c 65 73 20  eLock variables 
20a60 61 72 65 20 6f 6e 6c 79 20 75 73 65 64 20 69 66  are only used if
20a70 20 74 68 65 20 73 68 61 72 65 64 2d 63 61 63 68   the shared-cach
20a80 65 0a 2a 2a 20 66 65 61 74 75 72 65 20 69 73 20  e.** feature is 
20a90 65 6e 61 62 6c 65 64 20 28 69 66 20 73 71 6c 69  enabled (if sqli
20aa0 74 65 33 54 73 64 28 29 2d 3e 75 73 65 53 68 61  te3Tsd()->useSha
20ab0 72 65 64 44 61 74 61 20 69 73 20 74 72 75 65 29  redData is true)
20ac0 2e 20 54 68 65 79 20 61 72 65 0a 2a 2a 20 75 73  . They are.** us
20ad0 65 64 20 74 6f 20 73 74 6f 72 65 20 74 68 65 20  ed to store the 
20ae0 73 65 74 20 6f 66 20 74 61 62 6c 65 2d 6c 6f 63  set of table-loc
20af0 6b 73 20 72 65 71 75 69 72 65 64 20 62 79 20 74  ks required by t
20b00 68 65 20 73 74 61 74 65 6d 65 6e 74 20 62 65 69  he statement bei
20b10 6e 67 0a 2a 2a 20 63 6f 6d 70 69 6c 65 64 2e 20  ng.** compiled. 
20b20 46 75 6e 63 74 69 6f 6e 20 73 71 6c 69 74 65 33  Function sqlite3
20b30 54 61 62 6c 65 4c 6f 63 6b 28 29 20 69 73 20 75  TableLock() is u
20b40 73 65 64 20 74 6f 20 61 64 64 20 65 6e 74 72 69  sed to add entri
20b50 65 73 20 74 6f 20 74 68 65 0a 2a 2a 20 6c 69 73  es to the.** lis
20b60 74 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 50 61 72  t..*/.struct Par
20b70 73 65 20 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a  se {.  sqlite3 *
20b80 64 62 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54  db;         /* T
20b90 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65  he main database
20ba0 20 73 74 72 75 63 74 75 72 65 20 2a 2f 0a 20 20   structure */.  
20bb0 63 68 61 72 20 2a 7a 45 72 72 4d 73 67 3b 20 20  char *zErrMsg;  
20bc0 20 20 20 20 20 2f 2a 20 41 6e 20 65 72 72 6f 72       /* An error
20bd0 20 6d 65 73 73 61 67 65 20 2a 2f 0a 20 20 56 64   message */.  Vd
20be0 62 65 20 2a 70 56 64 62 65 3b 20 20 20 20 20 20  be *pVdbe;      
20bf0 20 20 20 2f 2a 20 41 6e 20 65 6e 67 69 6e 65 20     /* An engine 
20c00 66 6f 72 20 65 78 65 63 75 74 69 6e 67 20 64 61  for executing da
20c10 74 61 62 61 73 65 20 62 79 74 65 63 6f 64 65 20  tabase bytecode 
20c20 2a 2f 0a 20 20 69 6e 74 20 72 63 3b 20 20 20 20  */.  int rc;    
20c30 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 74            /* Ret
20c40 75 72 6e 20 63 6f 64 65 20 66 72 6f 6d 20 65 78  urn code from ex
20c50 65 63 75 74 69 6f 6e 20 2a 2f 0a 20 20 75 38 20  ecution */.  u8 
20c60 63 6f 6c 4e 61 6d 65 73 53 65 74 3b 20 20 20 20  colNamesSet;    
20c70 20 20 2f 2a 20 54 52 55 45 20 61 66 74 65 72 20    /* TRUE after 
20c80 4f 50 5f 43 6f 6c 75 6d 6e 4e 61 6d 65 20 68 61  OP_ColumnName ha
20c90 73 20 62 65 65 6e 20 69 73 73 75 65 64 20 74 6f  s been issued to
20ca0 20 70 56 64 62 65 20 2a 2f 0a 20 20 75 38 20 63   pVdbe */.  u8 c
20cb0 68 65 63 6b 53 63 68 65 6d 61 3b 20 20 20 20 20  heckSchema;     
20cc0 20 2f 2a 20 43 61 75 73 65 73 20 73 63 68 65 6d   /* Causes schem
20cd0 61 20 63 6f 6f 6b 69 65 20 63 68 65 63 6b 20 61  a cookie check a
20ce0 66 74 65 72 20 61 6e 20 65 72 72 6f 72 20 2a 2f  fter an error */
20cf0 0a 20 20 75 38 20 6e 65 73 74 65 64 3b 20 20 20  .  u8 nested;   
20d00 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
20d10 72 20 6f 66 20 6e 65 73 74 65 64 20 63 61 6c 6c  r of nested call
20d20 73 20 74 6f 20 74 68 65 20 70 61 72 73 65 72 2f  s to the parser/
20d30 63 6f 64 65 20 67 65 6e 65 72 61 74 6f 72 20 2a  code generator *
20d40 2f 0a 20 20 75 38 20 6e 54 65 6d 70 52 65 67 3b  /.  u8 nTempReg;
20d50 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
20d60 65 72 20 6f 66 20 74 65 6d 70 6f 72 61 72 79 20  er of temporary 
20d70 72 65 67 69 73 74 65 72 73 20 69 6e 20 61 54 65  registers in aTe
20d80 6d 70 52 65 67 5b 5d 20 2a 2f 0a 20 20 75 38 20  mpReg[] */.  u8 
20d90 69 73 4d 75 6c 74 69 57 72 69 74 65 3b 20 20 20  isMultiWrite;   
20da0 20 20 2f 2a 20 54 72 75 65 20 69 66 20 73 74 61    /* True if sta
20db0 74 65 6d 65 6e 74 20 6d 61 79 20 6d 6f 64 69 66  tement may modif
20dc0 79 2f 69 6e 73 65 72 74 20 6d 75 6c 74 69 70 6c  y/insert multipl
20dd0 65 20 72 6f 77 73 20 2a 2f 0a 20 20 75 38 20 6d  e rows */.  u8 m
20de0 61 79 41 62 6f 72 74 3b 20 20 20 20 20 20 20 20  ayAbort;        
20df0 20 2f 2a 20 54 72 75 65 20 69 66 20 73 74 61 74   /* True if stat
20e00 65 6d 65 6e 74 20 6d 61 79 20 74 68 72 6f 77 20  ement may throw 
20e10 61 6e 20 41 42 4f 52 54 20 65 78 63 65 70 74 69  an ABORT excepti
20e20 6f 6e 20 2a 2f 0a 20 20 75 38 20 68 61 73 43 6f  on */.  u8 hasCo
20e30 6d 70 6f 75 6e 64 3b 20 20 20 20 20 20 2f 2a 20  mpound;      /* 
20e40 4e 65 65 64 20 74 6f 20 69 6e 76 6f 6b 65 20 63  Need to invoke c
20e50 6f 6e 76 65 72 74 43 6f 6d 70 6f 75 6e 64 53 65  onvertCompoundSe
20e60 6c 65 63 74 54 6f 53 75 62 71 75 65 72 79 28 29  lectToSubquery()
20e70 20 2a 2f 0a 20 20 75 38 20 6f 6b 43 6f 6e 73 74   */.  u8 okConst
20e80 46 61 63 74 6f 72 3b 20 20 20 20 2f 2a 20 4f 4b  Factor;    /* OK
20e90 20 74 6f 20 66 61 63 74 6f 72 20 6f 75 74 20 63   to factor out c
20ea0 6f 6e 73 74 61 6e 74 73 20 2a 2f 0a 20 20 75 38  onstants */.  u8
20eb0 20 64 69 73 61 62 6c 65 4c 6f 6f 6b 61 73 69 64   disableLookasid
20ec0 65 3b 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20  e; /* Number of 
20ed0 74 69 6d 65 73 20 6c 6f 6f 6b 61 73 69 64 65 20  times lookaside 
20ee0 68 61 73 20 62 65 65 6e 20 64 69 73 61 62 6c 65  has been disable
20ef0 64 20 2a 2f 0a 20 20 75 38 20 64 69 73 61 62 6c  d */.  u8 disabl
20f00 65 56 74 61 62 3b 20 20 20 20 20 20 2f 2a 20 44  eVtab;      /* D
20f10 69 73 61 62 6c 65 20 61 6c 6c 20 76 69 72 74 75  isable all virtu
20f20 61 6c 20 74 61 62 6c 65 73 20 66 6f 72 20 74 68  al tables for th
20f30 69 73 20 70 61 72 73 65 20 2a 2f 0a 20 20 69 6e  is parse */.  in
20f40 74 20 6e 52 61 6e 67 65 52 65 67 3b 20 20 20 20  t nRangeReg;    
20f50 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20 74 68     /* Size of th
20f60 65 20 74 65 6d 70 6f 72 61 72 79 20 72 65 67 69  e temporary regi
20f70 73 74 65 72 20 62 6c 6f 63 6b 20 2a 2f 0a 20 20  ster block */.  
20f80 69 6e 74 20 69 52 61 6e 67 65 52 65 67 3b 20 20  int iRangeReg;  
20f90 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20 72 65       /* First re
20fa0 67 69 73 74 65 72 20 69 6e 20 74 65 6d 70 6f 72  gister in tempor
20fb0 61 72 79 20 72 65 67 69 73 74 65 72 20 62 6c 6f  ary register blo
20fc0 63 6b 20 2a 2f 0a 20 20 69 6e 74 20 6e 45 72 72  ck */.  int nErr
20fd0 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
20fe0 4e 75 6d 62 65 72 20 6f 66 20 65 72 72 6f 72 73  Number of errors
20ff0 20 73 65 65 6e 20 2a 2f 0a 20 20 69 6e 74 20 6e   seen */.  int n
21000 54 61 62 3b 20 20 20 20 20 20 20 20 20 20 20 20  Tab;            
21010 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 70 72 65  /* Number of pre
21020 76 69 6f 75 73 6c 79 20 61 6c 6c 6f 63 61 74 65  viously allocate
21030 64 20 56 44 42 45 20 63 75 72 73 6f 72 73 20 2a  d VDBE cursors *
21040 2f 0a 20 20 69 6e 74 20 6e 4d 65 6d 3b 20 20 20  /.  int nMem;   
21050 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
21060 65 72 20 6f 66 20 6d 65 6d 6f 72 79 20 63 65 6c  er of memory cel
21070 6c 73 20 75 73 65 64 20 73 6f 20 66 61 72 20 2a  ls used so far *
21080 2f 0a 20 20 69 6e 74 20 73 7a 4f 70 41 6c 6c 6f  /.  int szOpAllo
21090 63 3b 20 20 20 20 20 20 20 2f 2a 20 42 79 74 65  c;       /* Byte
210a0 73 20 6f 66 20 6d 65 6d 6f 72 79 20 73 70 61 63  s of memory spac
210b0 65 20 61 6c 6c 6f 63 61 74 65 64 20 66 6f 72 20  e allocated for 
210c0 56 64 62 65 2e 61 4f 70 5b 5d 20 2a 2f 0a 20 20  Vdbe.aOp[] */.  
210d0 69 6e 74 20 69 53 65 6c 66 54 61 62 3b 20 20 20  int iSelfTab;   
210e0 20 20 20 20 20 2f 2a 20 54 61 62 6c 65 20 61 73       /* Table as
210f0 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 61 6e  sociated with an
21100 20 69 6e 64 65 78 20 6f 6e 20 65 78 70 72 2c 20   index on expr, 
21110 6f 72 20 6e 65 67 61 74 69 76 65 0a 20 20 20 20  or negative.    
21120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21130 20 20 20 2a 2a 20 6f 66 20 74 68 65 20 62 61 73     ** of the bas
21140 65 20 72 65 67 69 73 74 65 72 20 64 75 72 69 6e  e register durin
21150 67 20 63 68 65 63 6b 2d 63 6f 6e 73 74 72 61 69  g check-constrai
21160 6e 74 20 65 76 61 6c 20 2a 2f 0a 20 20 69 6e 74  nt eval */.  int
21170 20 6e 4c 61 62 65 6c 3b 20 20 20 20 20 20 20 20   nLabel;        
21180 20 20 2f 2a 20 54 68 65 20 2a 6e 65 67 61 74 69    /* The *negati
21190 76 65 2a 20 6f 66 20 74 68 65 20 6e 75 6d 62 65  ve* of the numbe
211a0 72 20 6f 66 20 6c 61 62 65 6c 73 20 75 73 65 64  r of labels used
211b0 20 2a 2f 0a 20 20 69 6e 74 20 6e 4c 61 62 65 6c   */.  int nLabel
211c0 41 6c 6c 6f 63 3b 20 20 20 20 20 2f 2a 20 4e 75  Alloc;     /* Nu
211d0 6d 62 65 72 20 6f 66 20 73 6c 6f 74 73 20 69 6e  mber of slots in
211e0 20 61 4c 61 62 65 6c 20 2a 2f 0a 20 20 69 6e 74   aLabel */.  int
211f0 20 2a 61 4c 61 62 65 6c 3b 20 20 20 20 20 20 20   *aLabel;       
21200 20 20 2f 2a 20 53 70 61 63 65 20 74 6f 20 68 6f    /* Space to ho
21210 6c 64 20 74 68 65 20 6c 61 62 65 6c 73 20 2a 2f  ld the labels */
21220 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70 43 6f  .  ExprList *pCo
21230 6e 73 74 45 78 70 72 3b 2f 2a 20 43 6f 6e 73 74  nstExpr;/* Const
21240 61 6e 74 20 65 78 70 72 65 73 73 69 6f 6e 73 20  ant expressions 
21250 2a 2f 0a 20 20 54 6f 6b 65 6e 20 63 6f 6e 73 74  */.  Token const
21260 72 61 69 6e 74 4e 61 6d 65 3b 2f 2a 20 4e 61 6d  raintName;/* Nam
21270 65 20 6f 66 20 74 68 65 20 63 6f 6e 73 74 72 61  e of the constra
21280 69 6e 74 20 63 75 72 72 65 6e 74 6c 79 20 62 65  int currently be
21290 69 6e 67 20 70 61 72 73 65 64 20 2a 2f 0a 20 20  ing parsed */.  
212a0 79 44 62 4d 61 73 6b 20 77 72 69 74 65 4d 61 73  yDbMask writeMas
212b0 6b 3b 20 20 20 2f 2a 20 53 74 61 72 74 20 61 20  k;   /* Start a 
212c0 77 72 69 74 65 20 74 72 61 6e 73 61 63 74 69 6f  write transactio
212d0 6e 20 6f 6e 20 74 68 65 73 65 20 64 61 74 61 62  n on these datab
212e0 61 73 65 73 20 2a 2f 0a 20 20 79 44 62 4d 61 73  ases */.  yDbMas
212f0 6b 20 63 6f 6f 6b 69 65 4d 61 73 6b 3b 20 20 2f  k cookieMask;  /
21300 2a 20 42 69 74 6d 61 73 6b 20 6f 66 20 73 63 68  * Bitmask of sch
21310 65 6d 61 20 76 65 72 69 66 69 65 64 20 64 61 74  ema verified dat
21320 61 62 61 73 65 73 20 2a 2f 0a 20 20 69 6e 74 20  abases */.  int 
21330 72 65 67 52 6f 77 69 64 3b 20 20 20 20 20 20 20  regRowid;       
21340 20 2f 2a 20 52 65 67 69 73 74 65 72 20 68 6f 6c   /* Register hol
21350 64 69 6e 67 20 72 6f 77 69 64 20 6f 66 20 43 52  ding rowid of CR
21360 45 41 54 45 20 54 41 42 4c 45 20 65 6e 74 72 79  EATE TABLE entry
21370 20 2a 2f 0a 20 20 69 6e 74 20 72 65 67 52 6f 6f   */.  int regRoo
21380 74 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65  t;         /* Re
21390 67 69 73 74 65 72 20 68 6f 6c 64 69 6e 67 20 72  gister holding r
213a0 6f 6f 74 20 70 61 67 65 20 6e 75 6d 62 65 72 20  oot page number 
213b0 66 6f 72 20 6e 65 77 20 6f 62 6a 65 63 74 73 20  for new objects 
213c0 2a 2f 0a 20 20 69 6e 74 20 6e 4d 61 78 41 72 67  */.  int nMaxArg
213d0 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 78  ;         /* Max
213e0 20 61 72 67 73 20 70 61 73 73 65 64 20 74 6f 20   args passed to 
213f0 75 73 65 72 20 66 75 6e 63 74 69 6f 6e 20 62 79  user function by
21400 20 73 75 62 2d 70 72 6f 67 72 61 6d 20 2a 2f 0a   sub-program */.
21410 20 20 69 6e 74 20 6e 53 65 6c 65 63 74 3b 20 20    int nSelect;  
21420 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
21430 20 6f 66 20 53 45 4c 45 43 54 20 73 74 6d 74 73   of SELECT stmts
21440 2e 20 43 6f 75 6e 74 65 72 20 66 6f 72 20 53 65  . Counter for Se
21450 6c 65 63 74 2e 73 65 6c 49 64 20 2a 2f 0a 23 69  lect.selId */.#i
21460 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
21470 54 5f 53 48 41 52 45 44 5f 43 41 43 48 45 0a 20  T_SHARED_CACHE. 
21480 20 69 6e 74 20 6e 54 61 62 6c 65 4c 6f 63 6b 3b   int nTableLock;
21490 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
214a0 72 20 6f 66 20 6c 6f 63 6b 73 20 69 6e 20 61 54  r of locks in aT
214b0 61 62 6c 65 4c 6f 63 6b 20 2a 2f 0a 20 20 54 61  ableLock */.  Ta
214c0 62 6c 65 4c 6f 63 6b 20 2a 61 54 61 62 6c 65 4c  bleLock *aTableL
214d0 6f 63 6b 3b 20 2f 2a 20 52 65 71 75 69 72 65 64  ock; /* Required
214e0 20 74 61 62 6c 65 20 6c 6f 63 6b 73 20 66 6f 72   table locks for
214f0 20 73 68 61 72 65 64 2d 63 61 63 68 65 20 6d 6f   shared-cache mo
21500 64 65 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 41  de */.#endif.  A
21510 75 74 6f 69 6e 63 49 6e 66 6f 20 2a 70 41 69 6e  utoincInfo *pAin
21520 63 3b 20 20 2f 2a 20 49 6e 66 6f 72 6d 61 74 69  c;  /* Informati
21530 6f 6e 20 61 62 6f 75 74 20 41 55 54 4f 49 4e 43  on about AUTOINC
21540 52 45 4d 45 4e 54 20 63 6f 75 6e 74 65 72 73 20  REMENT counters 
21550 2a 2f 0a 20 20 50 61 72 73 65 20 2a 70 54 6f 70  */.  Parse *pTop
21560 6c 65 76 65 6c 3b 20 20 20 20 2f 2a 20 50 61 72  level;    /* Par
21570 73 65 20 73 74 72 75 63 74 75 72 65 20 66 6f 72  se structure for
21580 20 6d 61 69 6e 20 70 72 6f 67 72 61 6d 20 28 6f   main program (o
21590 72 20 4e 55 4c 4c 29 20 2a 2f 0a 20 20 54 61 62  r NULL) */.  Tab
215a0 6c 65 20 2a 70 54 72 69 67 67 65 72 54 61 62 3b  le *pTriggerTab;
215b0 20 20 2f 2a 20 54 61 62 6c 65 20 74 72 69 67 67    /* Table trigg
215c0 65 72 73 20 61 72 65 20 62 65 69 6e 67 20 63 6f  ers are being co
215d0 64 65 64 20 66 6f 72 20 2a 2f 0a 20 20 50 61 72  ded for */.  Par
215e0 73 65 20 2a 70 50 61 72 65 6e 74 50 61 72 73 65  se *pParentParse
215f0 3b 20 2f 2a 20 50 61 72 65 6e 74 20 70 61 72 73  ; /* Parent pars
21600 65 72 20 69 66 20 74 68 69 73 20 70 61 72 73 65  er if this parse
21610 72 20 69 73 20 6e 65 73 74 65 64 20 2a 2f 0a 20  r is nested */. 
21620 20 69 6e 74 20 61 64 64 72 43 72 54 61 62 3b 20   int addrCrTab; 
21630 20 20 20 20 20 20 2f 2a 20 41 64 64 72 65 73 73        /* Address
21640 20 6f 66 20 4f 50 5f 43 72 65 61 74 65 42 74 72   of OP_CreateBtr
21650 65 65 20 6f 70 63 6f 64 65 20 6f 6e 20 43 52 45  ee opcode on CRE
21660 41 54 45 20 54 41 42 4c 45 20 2a 2f 0a 20 20 75  ATE TABLE */.  u
21670 33 32 20 6e 51 75 65 72 79 4c 6f 6f 70 3b 20 20  32 nQueryLoop;  
21680 20 20 20 20 2f 2a 20 45 73 74 20 6e 75 6d 62 65      /* Est numbe
21690 72 20 6f 66 20 69 74 65 72 61 74 69 6f 6e 73 20  r of iterations 
216a0 6f 66 20 61 20 71 75 65 72 79 20 28 31 30 2a 6c  of a query (10*l
216b0 6f 67 32 28 4e 29 29 20 2a 2f 0a 20 20 75 33 32  og2(N)) */.  u32
216c0 20 6f 6c 64 6d 61 73 6b 3b 20 20 20 20 20 20 20   oldmask;       
216d0 20 20 2f 2a 20 4d 61 73 6b 20 6f 66 20 6f 6c 64    /* Mask of old
216e0 2e 2a 20 63 6f 6c 75 6d 6e 73 20 72 65 66 65 72  .* columns refer
216f0 65 6e 63 65 64 20 2a 2f 0a 20 20 75 33 32 20 6e  enced */.  u32 n
21700 65 77 6d 61 73 6b 3b 20 20 20 20 20 20 20 20 20  ewmask;         
21710 2f 2a 20 4d 61 73 6b 20 6f 66 20 6e 65 77 2e 2a  /* Mask of new.*
21720 20 63 6f 6c 75 6d 6e 73 20 72 65 66 65 72 65 6e   columns referen
21730 63 65 64 20 2a 2f 0a 20 20 75 38 20 65 54 72 69  ced */.  u8 eTri
21740 67 67 65 72 4f 70 3b 20 20 20 20 20 20 20 2f 2a  ggerOp;       /*
21750 20 54 4b 5f 55 50 44 41 54 45 2c 20 54 4b 5f 49   TK_UPDATE, TK_I
21760 4e 53 45 52 54 20 6f 72 20 54 4b 5f 44 45 4c 45  NSERT or TK_DELE
21770 54 45 20 2a 2f 0a 20 20 75 38 20 65 4f 72 63 6f  TE */.  u8 eOrco
21780 6e 66 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  nf;          /* 
21790 44 65 66 61 75 6c 74 20 4f 4e 20 43 4f 4e 46 4c  Default ON CONFL
217a0 49 43 54 20 70 6f 6c 69 63 79 20 66 6f 72 20 74  ICT policy for t
217b0 72 69 67 67 65 72 20 73 74 65 70 73 20 2a 2f 0a  rigger steps */.
217c0 20 20 75 38 20 64 69 73 61 62 6c 65 54 72 69 67    u8 disableTrig
217d0 67 65 72 73 3b 20 20 2f 2a 20 54 72 75 65 20 74  gers;  /* True t
217e0 6f 20 64 69 73 61 62 6c 65 20 74 72 69 67 67 65  o disable trigge
217f0 72 73 20 2a 2f 0a 0a 20 20 2f 2a 2a 2a 2a 2a 2a  rs */..  /******
21800 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21810 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21820 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21830 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21840 2a 2a 2a 2a 0a 20 20 2a 2a 20 46 69 65 6c 64 73  ****.  ** Fields
21850 20 61 62 6f 76 65 20 6d 75 73 74 20 62 65 20 69   above must be i
21860 6e 69 74 69 61 6c 69 7a 65 64 20 74 6f 20 7a 65  nitialized to ze
21870 72 6f 2e 20 20 54 68 65 20 66 69 65 6c 64 73 20  ro.  The fields 
21880 74 68 61 74 20 66 6f 6c 6c 6f 77 2c 0a 20 20 2a  that follow,.  *
21890 2a 20 64 6f 77 6e 20 74 6f 20 74 68 65 20 62 65  * down to the be
218a0 67 69 6e 6e 69 6e 67 20 6f 66 20 74 68 65 20 72  ginning of the r
218b0 65 63 75 72 73 69 76 65 20 73 65 63 74 69 6f 6e  ecursive section
218c0 2c 20 64 6f 20 6e 6f 74 20 6e 65 65 64 20 74 6f  , do not need to
218d0 20 62 65 0a 20 20 2a 2a 20 69 6e 69 74 69 61 6c   be.  ** initial
218e0 69 7a 65 64 20 61 73 20 74 68 65 79 20 77 69 6c  ized as they wil
218f0 6c 20 62 65 20 73 65 74 20 62 65 66 6f 72 65 20  l be set before 
21900 62 65 69 6e 67 20 75 73 65 64 2e 20 20 54 68 65  being used.  The
21910 20 62 6f 75 6e 64 61 72 79 20 69 73 0a 20 20 2a   boundary is.  *
21920 2a 20 64 65 74 65 72 6d 69 6e 65 64 20 62 79 20  * determined by 
21930 6f 66 66 73 65 74 6f 66 28 50 61 72 73 65 2c 61  offsetof(Parse,a
21940 54 65 6d 70 52 65 67 29 2e 0a 20 20 2a 2a 2a 2a  TempReg)..  ****
21950 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21960 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21970 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21980 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21990 2a 2a 2a 2a 2a 2a 2f 0a 0a 20 20 69 6e 74 20 61  ******/..  int a
219a0 54 65 6d 70 52 65 67 5b 38 5d 3b 20 20 20 20 20  TempReg[8];     
219b0 20 20 20 2f 2a 20 48 6f 6c 64 69 6e 67 20 61 72     /* Holding ar
219c0 65 61 20 66 6f 72 20 74 65 6d 70 6f 72 61 72 79  ea for temporary
219d0 20 72 65 67 69 73 74 65 72 73 20 2a 2f 0a 20 20   registers */.  
219e0 54 6f 6b 65 6e 20 73 4e 61 6d 65 54 6f 6b 65 6e  Token sNameToken
219f0 3b 20 20 20 20 20 20 20 2f 2a 20 54 6f 6b 65 6e  ;       /* Token
21a00 20 77 69 74 68 20 75 6e 71 75 61 6c 69 66 69 65   with unqualifie
21a10 64 20 73 63 68 65 6d 61 20 6f 62 6a 65 63 74 20  d schema object 
21a20 6e 61 6d 65 20 2a 2f 0a 0a 20 20 2f 2a 2a 2a 2a  name */..  /****
21a30 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21a40 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21a50 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21a60 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21a70 2a 2a 2a 2a 0a 20 20 2a 2a 20 41 62 6f 76 65 20  ****.  ** Above 
21a80 69 73 20 63 6f 6e 73 74 61 6e 74 20 62 65 74 77  is constant betw
21a90 65 65 6e 20 72 65 63 75 72 73 69 6f 6e 73 2e 20  een recursions. 
21aa0 20 42 65 6c 6f 77 20 69 73 20 72 65 73 65 74 20   Below is reset 
21ab0 62 65 66 6f 72 65 20 61 6e 64 20 61 66 74 65 72  before and after
21ac0 0a 20 20 2a 2a 20 65 61 63 68 20 72 65 63 75 72  .  ** each recur
21ad0 73 69 6f 6e 2e 20 20 54 68 65 20 62 6f 75 6e 64  sion.  The bound
21ae0 61 72 79 20 62 65 74 77 65 65 6e 20 74 68 65 73  ary between thes
21af0 65 20 74 77 6f 20 72 65 67 69 6f 6e 73 20 69 73  e two regions is
21b00 20 64 65 74 65 72 6d 69 6e 65 64 0a 20 20 2a 2a   determined.  **
21b10 20 75 73 69 6e 67 20 6f 66 66 73 65 74 6f 66 28   using offsetof(
21b20 50 61 72 73 65 2c 73 4c 61 73 74 54 6f 6b 65 6e  Parse,sLastToken
21b30 29 20 73 6f 20 74 68 65 20 73 4c 61 73 74 54 6f  ) so the sLastTo
21b40 6b 65 6e 20 66 69 65 6c 64 20 6d 75 73 74 20 62  ken field must b
21b50 65 20 74 68 65 0a 20 20 2a 2a 20 66 69 72 73 74  e the.  ** first
21b60 20 66 69 65 6c 64 20 69 6e 20 74 68 65 20 72 65   field in the re
21b70 63 75 72 73 69 76 65 20 72 65 67 69 6f 6e 2e 0a  cursive region..
21b80 20 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a    **************
21b90 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21ba0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21bb0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21bc0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 20 20 54  **********/..  T
21bd0 6f 6b 65 6e 20 73 4c 61 73 74 54 6f 6b 65 6e 3b  oken sLastToken;
21be0 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6c 61         /* The la
21bf0 73 74 20 74 6f 6b 65 6e 20 70 61 72 73 65 64 20  st token parsed 
21c00 2a 2f 0a 20 20 79 6e 56 61 72 20 6e 56 61 72 3b  */.  ynVar nVar;
21c10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
21c20 2a 20 4e 75 6d 62 65 72 20 6f 66 20 27 3f 27 20  * Number of '?' 
21c30 76 61 72 69 61 62 6c 65 73 20 73 65 65 6e 20 69  variables seen i
21c40 6e 20 74 68 65 20 53 51 4c 20 73 6f 20 66 61 72  n the SQL so far
21c50 20 2a 2f 0a 20 20 75 38 20 69 50 6b 53 6f 72 74   */.  u8 iPkSort
21c60 4f 72 64 65 72 3b 20 20 20 20 20 20 20 20 20 20  Order;          
21c70 2f 2a 20 41 53 43 20 6f 72 20 44 45 53 43 20 66  /* ASC or DESC f
21c80 6f 72 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41  or INTEGER PRIMA
21c90 52 59 20 4b 45 59 20 2a 2f 0a 20 20 75 38 20 65  RY KEY */.  u8 e
21ca0 78 70 6c 61 69 6e 3b 20 20 20 20 20 20 20 20 20  xplain;         
21cb0 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66        /* True if
21cc0 20 74 68 65 20 45 58 50 4c 41 49 4e 20 66 6c 61   the EXPLAIN fla
21cd0 67 20 69 73 20 66 6f 75 6e 64 20 6f 6e 20 74 68  g is found on th
21ce0 65 20 71 75 65 72 79 20 2a 2f 0a 23 69 66 20 21  e query */.#if !
21cf0 28 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  (defined(SQLITE_
21d00 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
21d10 45 29 20 26 26 20 64 65 66 69 6e 65 64 28 53 51  E) && defined(SQ
21d20 4c 49 54 45 5f 4f 4d 49 54 5f 41 4c 54 45 52 54  LITE_OMIT_ALTERT
21d30 41 42 4c 45 29 29 0a 20 20 75 38 20 65 50 61 72  ABLE)).  u8 ePar
21d40 73 65 4d 6f 64 65 3b 20 20 20 20 20 20 20 20 20  seMode;         
21d50 20 20 20 2f 2a 20 50 41 52 53 45 5f 4d 4f 44 45     /* PARSE_MODE
21d60 5f 58 58 58 20 63 6f 6e 73 74 61 6e 74 20 2a 2f  _XXX constant */
21d70 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20  .#endif.#ifndef 
21d80 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
21d90 55 41 4c 54 41 42 4c 45 0a 20 20 69 6e 74 20 6e  UALTABLE.  int n
21da0 56 74 61 62 4c 6f 63 6b 3b 20 20 20 20 20 20 20  VtabLock;       
21db0 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
21dc0 66 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 73  f virtual tables
21dd0 20 74 6f 20 6c 6f 63 6b 20 2a 2f 0a 23 65 6e 64   to lock */.#end
21de0 69 66 0a 20 20 69 6e 74 20 6e 48 65 69 67 68 74  if.  int nHeight
21df0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
21e00 2a 20 45 78 70 72 65 73 73 69 6f 6e 20 74 72 65  * Expression tre
21e10 65 20 68 65 69 67 68 74 20 6f 66 20 63 75 72 72  e height of curr
21e20 65 6e 74 20 73 75 62 2d 73 65 6c 65 63 74 20 2a  ent sub-select *
21e30 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  /.#ifndef SQLITE
21e40 5f 4f 4d 49 54 5f 45 58 50 4c 41 49 4e 0a 20 20  _OMIT_EXPLAIN.  
21e50 69 6e 74 20 61 64 64 72 45 78 70 6c 61 69 6e 3b  int addrExplain;
21e60 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 64 64            /* Add
21e70 72 65 73 73 20 6f 66 20 63 75 72 72 65 6e 74 20  ress of current 
21e80 4f 50 5f 45 78 70 6c 61 69 6e 20 6f 70 63 6f 64  OP_Explain opcod
21e90 65 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 56 4c  e */.#endif.  VL
21ea0 69 73 74 20 2a 70 56 4c 69 73 74 3b 20 20 20 20  ist *pVList;    
21eb0 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 70 70 69          /* Mappi
21ec0 6e 67 20 62 65 74 77 65 65 6e 20 76 61 72 69 61  ng between varia
21ed0 62 6c 65 20 6e 61 6d 65 73 20 61 6e 64 20 6e 75  ble names and nu
21ee0 6d 62 65 72 73 20 2a 2f 0a 20 20 56 64 62 65 20  mbers */.  Vdbe 
21ef0 2a 70 52 65 70 72 65 70 61 72 65 3b 20 20 20 20  *pReprepare;    
21f00 20 20 20 20 20 2f 2a 20 56 4d 20 62 65 69 6e 67       /* VM being
21f10 20 72 65 70 72 65 70 61 72 65 64 20 28 73 71 6c   reprepared (sql
21f20 69 74 65 33 52 65 70 72 65 70 61 72 65 28 29 29  ite3Reprepare())
21f30 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72   */.  const char
21f40 20 2a 7a 54 61 69 6c 3b 20 20 20 20 20 20 20 20   *zTail;        
21f50 2f 2a 20 41 6c 6c 20 53 51 4c 20 74 65 78 74 20  /* All SQL text 
21f60 70 61 73 74 20 74 68 65 20 6c 61 73 74 20 73 65  past the last se
21f70 6d 69 63 6f 6c 6f 6e 20 70 61 72 73 65 64 20 2a  micolon parsed *
21f80 2f 0a 20 20 54 61 62 6c 65 20 2a 70 4e 65 77 54  /.  Table *pNewT
21f90 61 62 6c 65 3b 20 20 20 20 20 20 20 20 20 2f 2a  able;         /*
21fa0 20 41 20 74 61 62 6c 65 20 62 65 69 6e 67 20 63   A table being c
21fb0 6f 6e 73 74 72 75 63 74 65 64 20 62 79 20 43 52  onstructed by CR
21fc0 45 41 54 45 20 54 41 42 4c 45 20 2a 2f 0a 20 20  EATE TABLE */.  
21fd0 49 6e 64 65 78 20 2a 70 4e 65 77 49 6e 64 65 78  Index *pNewIndex
21fe0 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 41 6e 20  ;         /* An 
21ff0 69 6e 64 65 78 20 62 65 69 6e 67 20 63 6f 6e 73  index being cons
22000 74 72 75 63 74 65 64 20 62 79 20 43 52 45 41 54  tructed by CREAT
22010 45 20 49 4e 44 45 58 2e 0a 20 20 20 20 20 20 20  E INDEX..       
22020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22030 20 20 20 20 20 2a 2a 20 41 6c 73 6f 20 75 73 65       ** Also use
22040 64 20 74 6f 20 68 6f 6c 64 20 72 65 64 75 6e 64  d to hold redund
22050 61 6e 74 20 55 4e 49 51 55 45 20 63 6f 6e 73 74  ant UNIQUE const
22060 72 61 69 6e 74 73 0a 20 20 20 20 20 20 20 20 20  raints.         
22070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22080 20 20 20 2a 2a 20 64 75 72 69 6e 67 20 61 20 52     ** during a R
22090 45 4e 41 4d 45 20 43 4f 4c 55 4d 4e 20 2a 2f 0a  ENAME COLUMN */.
220a0 20 20 54 72 69 67 67 65 72 20 2a 70 4e 65 77 54    Trigger *pNewT
220b0 72 69 67 67 65 72 3b 20 20 20 20 20 2f 2a 20 54  rigger;     /* T
220c0 72 69 67 67 65 72 20 75 6e 64 65 72 20 63 6f 6e  rigger under con
220d0 73 74 72 75 63 74 20 62 79 20 61 20 43 52 45 41  struct by a CREA
220e0 54 45 20 54 52 49 47 47 45 52 20 2a 2f 0a 20 20  TE TRIGGER */.  
220f0 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 41 75 74  const char *zAut
22100 68 43 6f 6e 74 65 78 74 3b 20 2f 2a 20 54 68 65  hContext; /* The
22110 20 36 74 68 20 70 61 72 61 6d 65 74 65 72 20 74   6th parameter t
22120 6f 20 64 62 2d 3e 78 41 75 74 68 20 63 61 6c 6c  o db->xAuth call
22130 62 61 63 6b 73 20 2a 2f 0a 23 69 66 6e 64 65 66  backs */.#ifndef
22140 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
22150 54 55 41 4c 54 41 42 4c 45 0a 20 20 54 6f 6b 65  TUALTABLE.  Toke
22160 6e 20 73 41 72 67 3b 20 20 20 20 20 20 20 20 20  n sArg;         
22170 20 20 20 20 20 20 2f 2a 20 43 6f 6d 70 6c 65 74        /* Complet
22180 65 20 74 65 78 74 20 6f 66 20 61 20 6d 6f 64 75  e text of a modu
22190 6c 65 20 61 72 67 75 6d 65 6e 74 20 2a 2f 0a 20  le argument */. 
221a0 20 54 61 62 6c 65 20 2a 2a 61 70 56 74 61 62 4c   Table **apVtabL
221b0 6f 63 6b 3b 20 20 20 20 20 20 20 2f 2a 20 50 6f  ock;       /* Po
221c0 69 6e 74 65 72 20 74 6f 20 76 69 72 74 75 61 6c  inter to virtual
221d0 20 74 61 62 6c 65 73 20 6e 65 65 64 69 6e 67 20   tables needing 
221e0 6c 6f 63 6b 69 6e 67 20 2a 2f 0a 23 65 6e 64 69  locking */.#endi
221f0 66 0a 20 20 54 61 62 6c 65 20 2a 70 5a 6f 6d 62  f.  Table *pZomb
22200 69 65 54 61 62 3b 20 20 20 20 20 20 20 20 2f 2a  ieTab;        /*
22210 20 4c 69 73 74 20 6f 66 20 54 61 62 6c 65 20 6f   List of Table o
22220 62 6a 65 63 74 73 20 74 6f 20 64 65 6c 65 74 65  bjects to delete
22230 20 61 66 74 65 72 20 63 6f 64 65 20 67 65 6e 20   after code gen 
22240 2a 2f 0a 20 20 54 72 69 67 67 65 72 50 72 67 20  */.  TriggerPrg 
22250 2a 70 54 72 69 67 67 65 72 50 72 67 3b 20 20 2f  *pTriggerPrg;  /
22260 2a 20 4c 69 6e 6b 65 64 20 6c 69 73 74 20 6f 66  * Linked list of
22270 20 63 6f 64 65 64 20 74 72 69 67 67 65 72 73 20   coded triggers 
22280 2a 2f 0a 20 20 57 69 74 68 20 2a 70 57 69 74 68  */.  With *pWith
22290 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
222a0 2a 20 43 75 72 72 65 6e 74 20 57 49 54 48 20 63  * Current WITH c
222b0 6c 61 75 73 65 2c 20 6f 72 20 4e 55 4c 4c 20 2a  lause, or NULL *
222c0 2f 0a 20 20 57 69 74 68 20 2a 70 57 69 74 68 54  /.  With *pWithT
222d0 6f 46 72 65 65 3b 20 20 20 20 20 20 20 20 2f 2a  oFree;        /*
222e0 20 46 72 65 65 20 74 68 69 73 20 57 49 54 48 20   Free this WITH 
222f0 6f 62 6a 65 63 74 20 61 74 20 74 68 65 20 65 6e  object at the en
22300 64 20 6f 66 20 74 68 65 20 70 61 72 73 65 20 2a  d of the parse *
22310 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  /.#ifndef SQLITE
22320 5f 4f 4d 49 54 5f 41 4c 54 45 52 54 41 42 4c 45  _OMIT_ALTERTABLE
22330 0a 20 20 52 65 6e 61 6d 65 54 6f 6b 65 6e 20 2a  .  RenameToken *
22340 70 52 65 6e 61 6d 65 3b 20 20 20 20 20 2f 2a 20  pRename;     /* 
22350 54 6f 6b 65 6e 73 20 73 75 62 6a 65 63 74 20 74  Tokens subject t
22360 6f 20 72 65 6e 61 6d 69 6e 67 20 62 79 20 41 4c  o renaming by AL
22370 54 45 52 20 54 41 42 4c 45 20 2a 2f 0a 23 65 6e  TER TABLE */.#en
22380 64 69 66 0a 7d 3b 0a 0a 23 64 65 66 69 6e 65 20  dif.};..#define 
22390 50 41 52 53 45 5f 4d 4f 44 45 5f 4e 4f 52 4d 41  PARSE_MODE_NORMA
223a0 4c 20 20 20 20 20 20 20 20 30 0a 23 64 65 66 69  L        0.#defi
223b0 6e 65 20 50 41 52 53 45 5f 4d 4f 44 45 5f 44 45  ne PARSE_MODE_DE
223c0 43 4c 41 52 45 5f 56 54 41 42 20 20 31 0a 23 64  CLARE_VTAB  1.#d
223d0 65 66 69 6e 65 20 50 41 52 53 45 5f 4d 4f 44 45  efine PARSE_MODE
223e0 5f 52 45 4e 41 4d 45 5f 43 4f 4c 55 4d 4e 20 32  _RENAME_COLUMN 2
223f0 0a 23 64 65 66 69 6e 65 20 50 41 52 53 45 5f 4d  .#define PARSE_M
22400 4f 44 45 5f 52 45 4e 41 4d 45 5f 54 41 42 4c 45  ODE_RENAME_TABLE
22410 20 20 33 0a 0a 2f 2a 0a 2a 2a 20 53 69 7a 65 73    3../*.** Sizes
22420 20 61 6e 64 20 70 6f 69 6e 74 65 72 73 20 6f 66   and pointers of
22430 20 76 61 72 69 6f 75 73 20 70 61 72 74 73 20 6f   various parts o
22440 66 20 74 68 65 20 50 61 72 73 65 20 6f 62 6a 65  f the Parse obje
22450 63 74 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 50  ct..*/.#define P
22460 41 52 53 45 5f 48 44 52 5f 53 5a 20 6f 66 66 73  ARSE_HDR_SZ offs
22470 65 74 6f 66 28 50 61 72 73 65 2c 61 54 65 6d 70  etof(Parse,aTemp
22480 52 65 67 29 20 2f 2a 20 52 65 63 75 72 73 69 76  Reg) /* Recursiv
22490 65 20 70 61 72 74 20 77 2f 6f 20 61 43 6f 6c 43  e part w/o aColC
224a0 61 63 68 65 2a 2f 0a 23 64 65 66 69 6e 65 20 50  ache*/.#define P
224b0 41 52 53 45 5f 52 45 43 55 52 53 45 5f 53 5a 20  ARSE_RECURSE_SZ 
224c0 6f 66 66 73 65 74 6f 66 28 50 61 72 73 65 2c 73  offsetof(Parse,s
224d0 4c 61 73 74 54 6f 6b 65 6e 29 20 20 20 20 2f 2a  LastToken)    /*
224e0 20 52 65 63 75 72 73 69 76 65 20 70 61 72 74 20   Recursive part 
224f0 2a 2f 0a 23 64 65 66 69 6e 65 20 50 41 52 53 45  */.#define PARSE
22500 5f 54 41 49 4c 5f 53 5a 20 28 73 69 7a 65 6f 66  _TAIL_SZ (sizeof
22510 28 50 61 72 73 65 29 2d 50 41 52 53 45 5f 52 45  (Parse)-PARSE_RE
22520 43 55 52 53 45 5f 53 5a 29 20 2f 2a 20 4e 6f 6e  CURSE_SZ) /* Non
22530 2d 72 65 63 75 72 73 69 76 65 20 70 61 72 74 20  -recursive part 
22540 2a 2f 0a 23 64 65 66 69 6e 65 20 50 41 52 53 45  */.#define PARSE
22550 5f 54 41 49 4c 28 58 29 20 28 28 28 63 68 61 72  _TAIL(X) (((char
22560 2a 29 28 58 29 29 2b 50 41 52 53 45 5f 52 45 43  *)(X))+PARSE_REC
22570 55 52 53 45 5f 53 5a 29 20 20 2f 2a 20 50 6f 69  URSE_SZ)  /* Poi
22580 6e 74 65 72 20 74 6f 20 74 61 69 6c 20 2a 2f 0a  nter to tail */.
22590 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74 72  ./*.** Return tr
225a0 75 65 20 69 66 20 63 75 72 72 65 6e 74 6c 79 20  ue if currently 
225b0 69 6e 73 69 64 65 20 61 6e 20 73 71 6c 69 74 65  inside an sqlite
225c0 33 5f 64 65 63 6c 61 72 65 5f 76 74 61 62 28 29  3_declare_vtab()
225d0 20 63 61 6c 6c 2e 0a 2a 2f 0a 23 69 66 64 65 66   call..*/.#ifdef
225e0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
225f0 54 55 41 4c 54 41 42 4c 45 0a 20 20 23 64 65 66  TUALTABLE.  #def
22600 69 6e 65 20 49 4e 5f 44 45 43 4c 41 52 45 5f 56  ine IN_DECLARE_V
22610 54 41 42 20 30 0a 23 65 6c 73 65 0a 20 20 23 64  TAB 0.#else.  #d
22620 65 66 69 6e 65 20 49 4e 5f 44 45 43 4c 41 52 45  efine IN_DECLARE
22630 5f 56 54 41 42 20 28 70 50 61 72 73 65 2d 3e 65  _VTAB (pParse->e
22640 50 61 72 73 65 4d 6f 64 65 3d 3d 50 41 52 53 45  ParseMode==PARSE
22650 5f 4d 4f 44 45 5f 44 45 43 4c 41 52 45 5f 56 54  _MODE_DECLARE_VT
22660 41 42 29 0a 23 65 6e 64 69 66 0a 0a 23 69 66 20  AB).#endif..#if 
22670 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
22680 4d 49 54 5f 41 4c 54 45 52 54 41 42 4c 45 29 0a  MIT_ALTERTABLE).
22690 20 20 23 64 65 66 69 6e 65 20 49 4e 5f 52 45 4e    #define IN_REN
226a0 41 4d 45 5f 4f 42 4a 45 43 54 20 30 0a 23 65 6c  AME_OBJECT 0.#el
226b0 73 65 0a 20 20 23 64 65 66 69 6e 65 20 49 4e 5f  se.  #define IN_
226c0 52 45 4e 41 4d 45 5f 4f 42 4a 45 43 54 20 28 70  RENAME_OBJECT (p
226d0 50 61 72 73 65 2d 3e 65 50 61 72 73 65 4d 6f 64  Parse->eParseMod
226e0 65 3e 3d 50 41 52 53 45 5f 4d 4f 44 45 5f 52 45  e>=PARSE_MODE_RE
226f0 4e 41 4d 45 5f 43 4f 4c 55 4d 4e 29 0a 23 65 6e  NAME_COLUMN).#en
22700 64 69 66 0a 0a 23 69 66 20 64 65 66 69 6e 65 64  dif..#if defined
22710 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52  (SQLITE_OMIT_VIR
22720 54 55 41 4c 54 41 42 4c 45 29 20 26 26 20 64 65  TUALTABLE) && de
22730 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49  fined(SQLITE_OMI
22740 54 5f 41 4c 54 45 52 54 41 42 4c 45 29 0a 20 20  T_ALTERTABLE).  
22750 23 64 65 66 69 6e 65 20 49 4e 5f 53 50 45 43 49  #define IN_SPECI
22760 41 4c 5f 50 41 52 53 45 20 30 0a 23 65 6c 73 65  AL_PARSE 0.#else
22770 0a 20 20 23 64 65 66 69 6e 65 20 49 4e 5f 53 50  .  #define IN_SP
22780 45 43 49 41 4c 5f 50 41 52 53 45 20 28 70 50 61  ECIAL_PARSE (pPa
22790 72 73 65 2d 3e 65 50 61 72 73 65 4d 6f 64 65 21  rse->eParseMode!
227a0 3d 50 41 52 53 45 5f 4d 4f 44 45 5f 4e 4f 52 4d  =PARSE_MODE_NORM
227b0 41 4c 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  AL).#endif../*.*
227c0 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  * An instance of
227d0 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   the following s
227e0 74 72 75 63 74 75 72 65 20 63 61 6e 20 62 65 20  tructure can be 
227f0 64 65 63 6c 61 72 65 64 20 6f 6e 20 61 20 73 74  declared on a st
22800 61 63 6b 20 61 6e 64 20 75 73 65 64 0a 2a 2a 20  ack and used.** 
22810 74 6f 20 73 61 76 65 20 74 68 65 20 50 61 72 73  to save the Pars
22820 65 2e 7a 41 75 74 68 43 6f 6e 74 65 78 74 20 76  e.zAuthContext v
22830 61 6c 75 65 20 73 6f 20 74 68 61 74 20 69 74 20  alue so that it 
22840 63 61 6e 20 62 65 20 72 65 73 74 6f 72 65 64 20  can be restored 
22850 6c 61 74 65 72 2e 0a 2a 2f 0a 73 74 72 75 63 74  later..*/.struct
22860 20 41 75 74 68 43 6f 6e 74 65 78 74 20 7b 0a 20   AuthContext {. 
22870 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 41 75   const char *zAu
22880 74 68 43 6f 6e 74 65 78 74 3b 20 20 20 2f 2a 20  thContext;   /* 
22890 50 75 74 20 73 61 76 65 64 20 50 61 72 73 65 2e  Put saved Parse.
228a0 7a 41 75 74 68 43 6f 6e 74 65 78 74 20 68 65 72  zAuthContext her
228b0 65 20 2a 2f 0a 20 20 50 61 72 73 65 20 2a 70 50  e */.  Parse *pP
228c0 61 72 73 65 3b 20 20 20 20 20 20 20 20 20 20 20  arse;           
228d0 20 20 20 2f 2a 20 54 68 65 20 50 61 72 73 65 20     /* The Parse 
228e0 73 74 72 75 63 74 75 72 65 20 2a 2f 0a 7d 3b 0a  structure */.};.
228f0 0a 2f 2a 0a 2a 2a 20 42 69 74 66 69 65 6c 64 20  ./*.** Bitfield 
22900 66 6c 61 67 73 20 66 6f 72 20 50 35 20 76 61 6c  flags for P5 val
22910 75 65 20 69 6e 20 76 61 72 69 6f 75 73 20 6f 70  ue in various op
22920 63 6f 64 65 73 2e 0a 2a 2a 0a 2a 2a 20 56 61 6c  codes..**.** Val
22930 75 65 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 28  ue constraints (
22940 65 6e 66 6f 72 63 65 64 20 76 69 61 20 61 73 73  enforced via ass
22950 65 72 74 28 29 29 3a 0a 2a 2a 20 20 20 20 4f 50  ert()):.**    OP
22960 46 4c 41 47 5f 4c 45 4e 47 54 48 41 52 47 20 20  FLAG_LENGTHARG  
22970 20 20 3d 3d 20 53 51 4c 49 54 45 5f 46 55 4e 43    == SQLITE_FUNC
22980 5f 4c 45 4e 47 54 48 0a 2a 2a 20 20 20 20 4f 50  _LENGTH.**    OP
22990 46 4c 41 47 5f 54 59 50 45 4f 46 41 52 47 20 20  FLAG_TYPEOFARG  
229a0 20 20 3d 3d 20 53 51 4c 49 54 45 5f 46 55 4e 43    == SQLITE_FUNC
229b0 5f 54 59 50 45 4f 46 0a 2a 2a 20 20 20 20 4f 50  _TYPEOF.**    OP
229c0 46 4c 41 47 5f 42 55 4c 4b 43 53 52 20 20 20 20  FLAG_BULKCSR    
229d0 20 20 3d 3d 20 42 54 52 45 45 5f 42 55 4c 4b 4c    == BTREE_BULKL
229e0 4f 41 44 0a 2a 2a 20 20 20 20 4f 50 46 4c 41 47  OAD.**    OPFLAG
229f0 5f 53 45 45 4b 45 51 20 20 20 20 20 20 20 3d 3d  _SEEKEQ       ==
22a00 20 42 54 52 45 45 5f 53 45 45 4b 5f 45 51 0a 2a   BTREE_SEEK_EQ.*
22a10 2a 20 20 20 20 4f 50 46 4c 41 47 5f 46 4f 52 44  *    OPFLAG_FORD
22a20 45 4c 45 54 45 20 20 20 20 3d 3d 20 42 54 52 45  ELETE    == BTRE
22a30 45 5f 46 4f 52 44 45 4c 45 54 45 0a 2a 2a 20 20  E_FORDELETE.**  
22a40 20 20 4f 50 46 4c 41 47 5f 53 41 56 45 50 4f 53    OPFLAG_SAVEPOS
22a50 49 54 49 4f 4e 20 3d 3d 20 42 54 52 45 45 5f 53  ITION == BTREE_S
22a60 41 56 45 50 4f 53 49 54 49 4f 4e 0a 2a 2a 20 20  AVEPOSITION.**  
22a70 20 20 4f 50 46 4c 41 47 5f 41 55 58 44 45 4c 45    OPFLAG_AUXDELE
22a80 54 45 20 20 20 20 3d 3d 20 42 54 52 45 45 5f 41  TE    == BTREE_A
22a90 55 58 44 45 4c 45 54 45 0a 2a 2f 0a 23 64 65 66  UXDELETE.*/.#def
22aa0 69 6e 65 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e  ine OPFLAG_NCHAN
22ab0 47 45 20 20 20 20 20 20 20 30 78 30 31 20 20 20  GE       0x01   
22ac0 20 2f 2a 20 4f 50 5f 49 6e 73 65 72 74 3a 20 53   /* OP_Insert: S
22ad0 65 74 20 74 6f 20 75 70 64 61 74 65 20 64 62 2d  et to update db-
22ae0 3e 6e 43 68 61 6e 67 65 20 2a 2f 0a 20 20 20 20  >nChange */.    
22af0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22b00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22b10 20 2f 2a 20 41 6c 73 6f 20 75 73 65 64 20 69 6e   /* Also used in
22b20 20 50 32 20 28 6e 6f 74 20 50 35 29 20 6f 66 20   P2 (not P5) of 
22b30 4f 50 5f 44 65 6c 65 74 65 20 2a 2f 0a 23 64 65  OP_Delete */.#de
22b40 66 69 6e 65 20 4f 50 46 4c 41 47 5f 4e 4f 43 48  fine OPFLAG_NOCH
22b50 4e 47 20 20 20 20 20 20 20 20 30 78 30 31 20 20  NG        0x01  
22b60 20 20 2f 2a 20 4f 50 5f 56 43 6f 6c 75 6d 6e 20    /* OP_VColumn 
22b70 6e 6f 63 68 61 6e 67 65 20 66 6f 72 20 55 50 44  nochange for UPD
22b80 41 54 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  ATE */.#define O
22b90 50 46 4c 41 47 5f 45 50 48 45 4d 20 20 20 20 20  PFLAG_EPHEM     
22ba0 20 20 20 20 30 78 30 31 20 20 20 20 2f 2a 20 4f      0x01    /* O
22bb0 50 5f 43 6f 6c 75 6d 6e 3a 20 45 70 68 65 6d 65  P_Column: Epheme
22bc0 72 61 6c 20 6f 75 74 70 75 74 20 69 73 20 6f 6b  ral output is ok
22bd0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c   */.#define OPFL
22be0 41 47 5f 4c 41 53 54 52 4f 57 49 44 20 20 20 20  AG_LASTROWID    
22bf0 20 30 78 32 30 20 20 20 20 2f 2a 20 53 65 74 20   0x20    /* Set 
22c00 74 6f 20 75 70 64 61 74 65 20 64 62 2d 3e 6c 61  to update db->la
22c10 73 74 52 6f 77 69 64 20 2a 2f 0a 23 64 65 66 69  stRowid */.#defi
22c20 6e 65 20 4f 50 46 4c 41 47 5f 49 53 55 50 44 41  ne OPFLAG_ISUPDA
22c30 54 45 20 20 20 20 20 20 30 78 30 34 20 20 20 20  TE      0x04    
22c40 2f 2a 20 54 68 69 73 20 4f 50 5f 49 6e 73 65 72  /* This OP_Inser
22c50 74 20 69 73 20 61 6e 20 73 71 6c 20 55 50 44 41  t is an sql UPDA
22c60 54 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50  TE */.#define OP
22c70 46 4c 41 47 5f 41 50 50 45 4e 44 20 20 20 20 20  FLAG_APPEND     
22c80 20 20 20 30 78 30 38 20 20 20 20 2f 2a 20 54 68     0x08    /* Th
22c90 69 73 20 69 73 20 6c 69 6b 65 6c 79 20 74 6f 20  is is likely to 
22ca0 62 65 20 61 6e 20 61 70 70 65 6e 64 20 2a 2f 0a  be an append */.
22cb0 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 55  #define OPFLAG_U
22cc0 53 45 53 45 45 4b 52 45 53 55 4c 54 20 30 78 31  SESEEKRESULT 0x1
22cd0 30 20 20 20 20 2f 2a 20 54 72 79 20 74 6f 20 61  0    /* Try to a
22ce0 76 6f 69 64 20 61 20 73 65 65 6b 20 69 6e 20 42  void a seek in B
22cf0 74 72 65 65 49 6e 73 65 72 74 28 29 20 2a 2f 0a  treeInsert() */.
22d00 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 49  #define OPFLAG_I
22d10 53 4e 4f 4f 50 20 20 20 20 20 20 20 20 30 78 34  SNOOP        0x4
22d20 30 20 20 20 20 2f 2a 20 4f 50 5f 44 65 6c 65 74  0    /* OP_Delet
22d30 65 20 64 6f 65 73 20 70 72 65 2d 75 70 64 61 74  e does pre-updat
22d40 65 2d 68 6f 6f 6b 20 6f 6e 6c 79 20 2a 2f 0a 23  e-hook only */.#
22d50 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 4c 45  define OPFLAG_LE
22d60 4e 47 54 48 41 52 47 20 20 20 20 20 30 78 34 30  NGTHARG     0x40
22d70 20 20 20 20 2f 2a 20 4f 50 5f 43 6f 6c 75 6d 6e      /* OP_Column
22d80 20 6f 6e 6c 79 20 75 73 65 64 20 66 6f 72 20 6c   only used for l
22d90 65 6e 67 74 68 28 29 20 2a 2f 0a 23 64 65 66 69  ength() */.#defi
22da0 6e 65 20 4f 50 46 4c 41 47 5f 54 59 50 45 4f 46  ne OPFLAG_TYPEOF
22db0 41 52 47 20 20 20 20 20 30 78 38 30 20 20 20 20  ARG     0x80    
22dc0 2f 2a 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 6e 6c  /* OP_Column onl
22dd0 79 20 75 73 65 64 20 66 6f 72 20 74 79 70 65 6f  y used for typeo
22de0 66 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  f() */.#define O
22df0 50 46 4c 41 47 5f 42 55 4c 4b 43 53 52 20 20 20  PFLAG_BULKCSR   
22e00 20 20 20 20 30 78 30 31 20 20 20 20 2f 2a 20 4f      0x01    /* O
22e10 50 5f 4f 70 65 6e 2a 2a 20 75 73 65 64 20 74 6f  P_Open** used to
22e20 20 6f 70 65 6e 20 62 75 6c 6b 20 63 75 72 73 6f   open bulk curso
22e30 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46  r */.#define OPF
22e40 4c 41 47 5f 53 45 45 4b 45 51 20 20 20 20 20 20  LAG_SEEKEQ      
22e50 20 20 30 78 30 32 20 20 20 20 2f 2a 20 4f 50 5f    0x02    /* OP_
22e60 4f 70 65 6e 2a 2a 20 63 75 72 73 6f 72 20 75 73  Open** cursor us
22e70 65 73 20 45 51 20 73 65 65 6b 20 6f 6e 6c 79 20  es EQ seek only 
22e80 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41  */.#define OPFLA
22e90 47 5f 46 4f 52 44 45 4c 45 54 45 20 20 20 20 20  G_FORDELETE     
22ea0 30 78 30 38 20 20 20 20 2f 2a 20 4f 50 5f 4f 70  0x08    /* OP_Op
22eb0 65 6e 20 73 68 6f 75 6c 64 20 75 73 65 20 42 54  en should use BT
22ec0 52 45 45 5f 46 4f 52 44 45 4c 45 54 45 20 2a 2f  REE_FORDELETE */
22ed0 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f  .#define OPFLAG_
22ee0 50 32 49 53 52 45 47 20 20 20 20 20 20 20 30 78  P2ISREG       0x
22ef0 31 30 20 20 20 20 2f 2a 20 50 32 20 74 6f 20 4f  10    /* P2 to O
22f00 50 5f 4f 70 65 6e 2a 2a 20 69 73 20 61 20 72 65  P_Open** is a re
22f10 67 69 73 74 65 72 20 6e 75 6d 62 65 72 20 2a 2f  gister number */
22f20 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f  .#define OPFLAG_
22f30 50 45 52 4d 55 54 45 20 20 20 20 20 20 20 30 78  PERMUTE       0x
22f40 30 31 20 20 20 20 2f 2a 20 4f 50 5f 43 6f 6d 70  01    /* OP_Comp
22f50 61 72 65 3a 20 75 73 65 20 74 68 65 20 70 65 72  are: use the per
22f60 6d 75 74 61 74 69 6f 6e 20 2a 2f 0a 23 64 65 66  mutation */.#def
22f70 69 6e 65 20 4f 50 46 4c 41 47 5f 53 41 56 45 50  ine OPFLAG_SAVEP
22f80 4f 53 49 54 49 4f 4e 20 20 30 78 30 32 20 20 20  OSITION  0x02   
22f90 20 2f 2a 20 4f 50 5f 44 65 6c 65 74 65 2f 49 6e   /* OP_Delete/In
22fa0 73 65 72 74 3a 20 73 61 76 65 20 63 75 72 73 6f  sert: save curso
22fb0 72 20 70 6f 73 20 2a 2f 0a 23 64 65 66 69 6e 65  r pos */.#define
22fc0 20 4f 50 46 4c 41 47 5f 41 55 58 44 45 4c 45 54   OPFLAG_AUXDELET
22fd0 45 20 20 20 20 20 30 78 30 34 20 20 20 20 2f 2a  E     0x04    /*
22fe0 20 4f 50 5f 44 65 6c 65 74 65 3a 20 69 6e 64 65   OP_Delete: inde
22ff0 78 20 69 6e 20 61 20 44 45 4c 45 54 45 20 6f 70  x in a DELETE op
23000 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c   */.#define OPFL
23010 41 47 5f 4e 4f 43 48 4e 47 5f 4d 41 47 49 43 20  AG_NOCHNG_MAGIC 
23020 20 30 78 36 64 20 20 20 20 2f 2a 20 4f 50 5f 4d   0x6d    /* OP_M
23030 61 6b 65 52 65 63 6f 72 64 3a 20 73 65 72 69 61  akeRecord: seria
23040 6c 74 79 70 65 20 31 30 20 69 73 20 6f 6b 20 2a  ltype 10 is ok *
23050 2f 0a 0a 2f 2a 0a 20 2a 20 45 61 63 68 20 74 72  /../*. * Each tr
23060 69 67 67 65 72 20 70 72 65 73 65 6e 74 20 69 6e  igger present in
23070 20 74 68 65 20 64 61 74 61 62 61 73 65 20 73 63   the database sc
23080 68 65 6d 61 20 69 73 20 73 74 6f 72 65 64 20 61  hema is stored a
23090 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  s an instance of
230a0 0a 20 2a 20 73 74 72 75 63 74 20 54 72 69 67 67  . * struct Trigg
230b0 65 72 2e 0a 20 2a 0a 20 2a 20 50 6f 69 6e 74 65  er.. *. * Pointe
230c0 72 73 20 74 6f 20 69 6e 73 74 61 6e 63 65 73 20  rs to instances 
230d0 6f 66 20 73 74 72 75 63 74 20 54 72 69 67 67 65  of struct Trigge
230e0 72 20 61 72 65 20 73 74 6f 72 65 64 20 69 6e 20  r are stored in 
230f0 74 77 6f 20 77 61 79 73 2e 0a 20 2a 20 31 2e 20  two ways.. * 1. 
23100 49 6e 20 74 68 65 20 22 74 72 69 67 48 61 73 68  In the "trigHash
23110 22 20 68 61 73 68 20 74 61 62 6c 65 20 28 70 61  " hash table (pa
23120 72 74 20 6f 66 20 74 68 65 20 73 71 6c 69 74 65  rt of the sqlite
23130 33 2a 20 74 68 61 74 20 72 65 70 72 65 73 65 6e  3* that represen
23140 74 73 20 74 68 65 0a 20 2a 20 20 20 20 64 61 74  ts the. *    dat
23150 61 62 61 73 65 29 2e 20 54 68 69 73 20 61 6c 6c  abase). This all
23160 6f 77 73 20 54 72 69 67 67 65 72 20 73 74 72 75  ows Trigger stru
23170 63 74 75 72 65 73 20 74 6f 20 62 65 20 72 65 74  ctures to be ret
23180 72 69 65 76 65 64 20 62 79 20 6e 61 6d 65 2e 0a  rieved by name..
23190 20 2a 20 32 2e 20 41 6c 6c 20 74 72 69 67 67 65   * 2. All trigge
231a0 72 73 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  rs associated wi
231b0 74 68 20 61 20 73 69 6e 67 6c 65 20 74 61 62 6c  th a single tabl
231c0 65 20 66 6f 72 6d 20 61 20 6c 69 6e 6b 65 64 20  e form a linked 
231d0 6c 69 73 74 2c 20 75 73 69 6e 67 20 74 68 65 0a  list, using the.
231e0 20 2a 20 20 20 20 70 4e 65 78 74 20 6d 65 6d 62   *    pNext memb
231f0 65 72 20 6f 66 20 73 74 72 75 63 74 20 54 72 69  er of struct Tri
23200 67 67 65 72 2e 20 41 20 70 6f 69 6e 74 65 72 20  gger. A pointer 
23210 74 6f 20 74 68 65 20 66 69 72 73 74 20 65 6c 65  to the first ele
23220 6d 65 6e 74 20 6f 66 20 74 68 65 0a 20 2a 20 20  ment of the. *  
23230 20 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 69 73    linked list is
23240 20 73 74 6f 72 65 64 20 61 73 20 74 68 65 20 22   stored as the "
23250 70 54 72 69 67 67 65 72 22 20 6d 65 6d 62 65 72  pTrigger" member
23260 20 6f 66 20 74 68 65 20 61 73 73 6f 63 69 61 74   of the associat
23270 65 64 0a 20 2a 20 20 20 20 73 74 72 75 63 74 20  ed. *    struct 
23280 54 61 62 6c 65 2e 0a 20 2a 0a 20 2a 20 54 68 65  Table.. *. * The
23290 20 22 73 74 65 70 5f 6c 69 73 74 22 20 6d 65 6d   "step_list" mem
232a0 62 65 72 20 70 6f 69 6e 74 73 20 74 6f 20 74 68  ber points to th
232b0 65 20 66 69 72 73 74 20 65 6c 65 6d 65 6e 74 20  e first element 
232c0 6f 66 20 61 20 6c 69 6e 6b 65 64 20 6c 69 73 74  of a linked list
232d0 0a 20 2a 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74  . * containing t
232e0 68 65 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74  he SQL statement
232f0 73 20 73 70 65 63 69 66 69 65 64 20 61 73 20 74  s specified as t
23300 68 65 20 74 72 69 67 67 65 72 20 70 72 6f 67 72  he trigger progr
23310 61 6d 2e 0a 20 2a 2f 0a 73 74 72 75 63 74 20 54  am.. */.struct T
23320 72 69 67 67 65 72 20 7b 0a 20 20 63 68 61 72 20  rigger {.  char 
23330 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20  *zName;         
23340 20 20 20 2f 2a 20 54 68 65 20 6e 61 6d 65 20 6f     /* The name o
23350 66 20 74 68 65 20 74 72 69 67 67 65 72 20 20 20  f the trigger   
23360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23370 20 20 20 20 20 2a 2f 0a 20 20 63 68 61 72 20 2a       */.  char *
23380 74 61 62 6c 65 3b 20 20 20 20 20 20 20 20 20 20  table;          
23390 20 20 2f 2a 20 54 68 65 20 74 61 62 6c 65 20 6f    /* The table o
233a0 72 20 76 69 65 77 20 74 6f 20 77 68 69 63 68 20  r view to which 
233b0 74 68 65 20 74 72 69 67 67 65 72 20 61 70 70 6c  the trigger appl
233c0 69 65 73 20 2a 2f 0a 20 20 75 38 20 6f 70 3b 20  ies */.  u8 op; 
233d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
233e0 20 2f 2a 20 4f 6e 65 20 6f 66 20 54 4b 5f 44 45   /* One of TK_DE
233f0 4c 45 54 45 2c 20 54 4b 5f 55 50 44 41 54 45 2c  LETE, TK_UPDATE,
23400 20 54 4b 5f 49 4e 53 45 52 54 20 20 20 20 20 20   TK_INSERT      
23410 20 20 20 2a 2f 0a 20 20 75 38 20 74 72 5f 74 6d     */.  u8 tr_tm
23420 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
23430 2f 2a 20 4f 6e 65 20 6f 66 20 54 52 49 47 47 45  /* One of TRIGGE
23440 52 5f 42 45 46 4f 52 45 2c 20 54 52 49 47 47 45  R_BEFORE, TRIGGE
23450 52 5f 41 46 54 45 52 20 2a 2f 0a 20 20 45 78 70  R_AFTER */.  Exp
23460 72 20 2a 70 57 68 65 6e 3b 20 20 20 20 20 20 20  r *pWhen;       
23470 20 20 20 20 20 2f 2a 20 54 68 65 20 57 48 45 4e       /* The WHEN
23480 20 63 6c 61 75 73 65 20 6f 66 20 74 68 65 20 65   clause of the e
23490 78 70 72 65 73 73 69 6f 6e 20 28 6d 61 79 20 62  xpression (may b
234a0 65 20 4e 55 4c 4c 29 20 2a 2f 0a 20 20 49 64 4c  e NULL) */.  IdL
234b0 69 73 74 20 2a 70 43 6f 6c 75 6d 6e 73 3b 20 20  ist *pColumns;  
234c0 20 20 20 20 20 2f 2a 20 49 66 20 74 68 69 73 20       /* If this 
234d0 69 73 20 61 6e 20 55 50 44 41 54 45 20 4f 46 20  is an UPDATE OF 
234e0 3c 63 6f 6c 75 6d 6e 2d 6c 69 73 74 3e 20 74 72  <column-list> tr
234f0 69 67 67 65 72 2c 0a 20 20 20 20 20 20 20 20 20  igger,.         
23500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23510 20 20 20 20 74 68 65 20 3c 63 6f 6c 75 6d 6e 2d      the <column-
23520 6c 69 73 74 3e 20 69 73 20 73 74 6f 72 65 64 20  list> is stored 
23530 68 65 72 65 20 2a 2f 0a 20 20 53 63 68 65 6d 61  here */.  Schema
23540 20 2a 70 53 63 68 65 6d 61 3b 20 20 20 20 20 20   *pSchema;      
23550 20 20 2f 2a 20 53 63 68 65 6d 61 20 63 6f 6e 74    /* Schema cont
23560 61 69 6e 69 6e 67 20 74 68 65 20 74 72 69 67 67  aining the trigg
23570 65 72 20 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a  er */.  Schema *
23580 70 54 61 62 53 63 68 65 6d 61 3b 20 20 20 20 20  pTabSchema;     
23590 2f 2a 20 53 63 68 65 6d 61 20 63 6f 6e 74 61 69  /* Schema contai
235a0 6e 69 6e 67 20 74 68 65 20 74 61 62 6c 65 20 2a  ning the table *
235b0 2f 0a 20 20 54 72 69 67 67 65 72 53 74 65 70 20  /.  TriggerStep 
235c0 2a 73 74 65 70 5f 6c 69 73 74 3b 20 2f 2a 20 4c  *step_list; /* L
235d0 69 6e 6b 20 6c 69 73 74 20 6f 66 20 74 72 69 67  ink list of trig
235e0 67 65 72 20 70 72 6f 67 72 61 6d 20 73 74 65 70  ger program step
235f0 73 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2f  s             */
23600 0a 20 20 54 72 69 67 67 65 72 20 2a 70 4e 65 78  .  Trigger *pNex
23610 74 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 65  t;         /* Ne
23620 78 74 20 74 72 69 67 67 65 72 20 61 73 73 6f 63  xt trigger assoc
23630 69 61 74 65 64 20 77 69 74 68 20 74 68 65 20 74  iated with the t
23640 61 62 6c 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  able */.};../*.*
23650 2a 20 41 20 74 72 69 67 67 65 72 20 69 73 20 65  * A trigger is e
23660 69 74 68 65 72 20 61 20 42 45 46 4f 52 45 20 6f  ither a BEFORE o
23670 72 20 61 6e 20 41 46 54 45 52 20 74 72 69 67 67  r an AFTER trigg
23680 65 72 2e 20 20 54 68 65 20 66 6f 6c 6c 6f 77 69  er.  The followi
23690 6e 67 20 63 6f 6e 73 74 61 6e 74 73 0a 2a 2a 20  ng constants.** 
236a0 64 65 74 65 72 6d 69 6e 65 20 77 68 69 63 68 2e  determine which.
236b0 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 72 65 20  .**.** If there 
236c0 61 72 65 20 6d 75 6c 74 69 70 6c 65 20 74 72 69  are multiple tri
236d0 67 67 65 72 73 2c 20 79 6f 75 20 6d 69 67 68 74  ggers, you might
236e0 20 6f 66 20 73 6f 6d 65 20 42 45 46 4f 52 45 20   of some BEFORE 
236f0 61 6e 64 20 73 6f 6d 65 20 41 46 54 45 52 2e 0a  and some AFTER..
23700 2a 2a 20 49 6e 20 74 68 61 74 20 63 61 73 65 73  ** In that cases
23710 2c 20 74 68 65 20 63 6f 6e 73 74 61 6e 74 73 20  , the constants 
23720 62 65 6c 6f 77 20 63 61 6e 20 62 65 20 4f 52 65  below can be ORe
23730 64 20 74 6f 67 65 74 68 65 72 2e 0a 2a 2f 0a 23  d together..*/.#
23740 64 65 66 69 6e 65 20 54 52 49 47 47 45 52 5f 42  define TRIGGER_B
23750 45 46 4f 52 45 20 20 31 0a 23 64 65 66 69 6e 65  EFORE  1.#define
23760 20 54 52 49 47 47 45 52 5f 41 46 54 45 52 20 20   TRIGGER_AFTER  
23770 20 32 0a 0a 2f 2a 0a 20 2a 20 41 6e 20 69 6e 73   2../*. * An ins
23780 74 61 6e 63 65 20 6f 66 20 73 74 72 75 63 74 20  tance of struct 
23790 54 72 69 67 67 65 72 53 74 65 70 20 69 73 20 75  TriggerStep is u
237a0 73 65 64 20 74 6f 20 73 74 6f 72 65 20 61 20 73  sed to store a s
237b0 69 6e 67 6c 65 20 53 51 4c 20 73 74 61 74 65 6d  ingle SQL statem
237c0 65 6e 74 0a 20 2a 20 74 68 61 74 20 69 73 20 61  ent. * that is a
237d0 20 70 61 72 74 20 6f 66 20 61 20 74 72 69 67 67   part of a trigg
237e0 65 72 2d 70 72 6f 67 72 61 6d 2e 0a 20 2a 0a 20  er-program.. *. 
237f0 2a 20 49 6e 73 74 61 6e 63 65 73 20 6f 66 20 73  * Instances of s
23800 74 72 75 63 74 20 54 72 69 67 67 65 72 53 74 65  truct TriggerSte
23810 70 20 61 72 65 20 73 74 6f 72 65 64 20 69 6e 20  p are stored in 
23820 61 20 73 69 6e 67 6c 79 20 6c 69 6e 6b 65 64 20  a singly linked 
23830 6c 69 73 74 20 28 6c 69 6e 6b 65 64 0a 20 2a 20  list (linked. * 
23840 75 73 69 6e 67 20 74 68 65 20 22 70 4e 65 78 74  using the "pNext
23850 22 20 6d 65 6d 62 65 72 29 20 72 65 66 65 72 65  " member) refere
23860 6e 63 65 64 20 62 79 20 74 68 65 20 22 73 74 65  nced by the "ste
23870 70 5f 6c 69 73 74 22 20 6d 65 6d 62 65 72 20 6f  p_list" member o
23880 66 20 74 68 65 0a 20 2a 20 61 73 73 6f 63 69 61  f the. * associa
23890 74 65 64 20 73 74 72 75 63 74 20 54 72 69 67 67  ted struct Trigg
238a0 65 72 20 69 6e 73 74 61 6e 63 65 2e 20 54 68 65  er instance. The
238b0 20 66 69 72 73 74 20 65 6c 65 6d 65 6e 74 20 6f   first element o
238c0 66 20 74 68 65 20 6c 69 6e 6b 65 64 20 6c 69 73  f the linked lis
238d0 74 20 69 73 0a 20 2a 20 74 68 65 20 66 69 72 73  t is. * the firs
238e0 74 20 73 74 65 70 20 6f 66 20 74 68 65 20 74 72  t step of the tr
238f0 69 67 67 65 72 2d 70 72 6f 67 72 61 6d 2e 0a 20  igger-program.. 
23900 2a 0a 20 2a 20 54 68 65 20 22 6f 70 22 20 6d 65  *. * The "op" me
23910 6d 62 65 72 20 69 6e 64 69 63 61 74 65 73 20 77  mber indicates w
23920 68 65 74 68 65 72 20 74 68 69 73 20 69 73 20 61  hether this is a
23930 20 22 44 45 4c 45 54 45 22 2c 20 22 49 4e 53 45   "DELETE", "INSE
23940 52 54 22 2c 20 22 55 50 44 41 54 45 22 20 6f 72  RT", "UPDATE" or
23950 0a 20 2a 20 22 53 45 4c 45 43 54 22 20 73 74 61  . * "SELECT" sta
23960 74 65 6d 65 6e 74 2e 20 54 68 65 20 6d 65 61 6e  tement. The mean
23970 69 6e 67 73 20 6f 66 20 74 68 65 20 6f 74 68 65  ings of the othe
23980 72 20 6d 65 6d 62 65 72 73 20 69 73 20 64 65 74  r members is det
23990 65 72 6d 69 6e 65 64 20 62 79 20 74 68 65 0a 20  ermined by the. 
239a0 2a 20 76 61 6c 75 65 20 6f 66 20 22 6f 70 22 20  * value of "op" 
239b0 61 73 20 66 6f 6c 6c 6f 77 73 3a 0a 20 2a 0a 20  as follows:. *. 
239c0 2a 20 28 6f 70 20 3d 3d 20 54 4b 5f 49 4e 53 45  * (op == TK_INSE
239d0 52 54 29 0a 20 2a 20 6f 72 63 6f 6e 66 20 20 20  RT). * orconf   
239e0 20 2d 3e 20 73 74 6f 72 65 73 20 74 68 65 20 4f   -> stores the O
239f0 4e 20 43 4f 4e 46 4c 49 43 54 20 61 6c 67 6f 72  N CONFLICT algor
23a00 69 74 68 6d 0a 20 2a 20 70 53 65 6c 65 63 74 20  ithm. * pSelect 
23a10 20 20 2d 3e 20 49 66 20 74 68 69 73 20 69 73 20    -> If this is 
23a20 61 6e 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 2e  an INSERT INTO .
23a30 2e 2e 20 53 45 4c 45 43 54 20 2e 2e 2e 20 73 74  .. SELECT ... st
23a40 61 74 65 6d 65 6e 74 2c 20 74 68 65 6e 0a 20 2a  atement, then. *
23a50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
23a60 69 73 20 73 74 6f 72 65 73 20 61 20 70 6f 69 6e  is stores a poin
23a70 74 65 72 20 74 6f 20 74 68 65 20 53 45 4c 45 43  ter to the SELEC
23a80 54 20 73 74 61 74 65 6d 65 6e 74 2e 20 4f 74 68  T statement. Oth
23a90 65 72 77 69 73 65 20 4e 55 4c 4c 2e 0a 20 2a 20  erwise NULL.. * 
23aa0 7a 54 61 72 67 65 74 20 20 20 2d 3e 20 44 65 71  zTarget   -> Deq
23ab0 75 6f 74 65 64 20 6e 61 6d 65 20 6f 66 20 74 68  uoted name of th
23ac0 65 20 74 61 62 6c 65 20 74 6f 20 69 6e 73 65 72  e table to inser
23ad0 74 20 69 6e 74 6f 2e 0a 20 2a 20 70 45 78 70 72  t into.. * pExpr
23ae0 4c 69 73 74 20 2d 3e 20 49 66 20 74 68 69 73 20  List -> If this 
23af0 69 73 20 61 6e 20 49 4e 53 45 52 54 20 49 4e 54  is an INSERT INT
23b00 4f 20 2e 2e 2e 20 56 41 4c 55 45 53 20 2e 2e 2e  O ... VALUES ...
23b10 20 73 74 61 74 65 6d 65 6e 74 2c 20 74 68 65 6e   statement, then
23b20 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  . *             
23b30 20 74 68 69 73 20 73 74 6f 72 65 73 20 76 61 6c   this stores val
23b40 75 65 73 20 74 6f 20 62 65 20 69 6e 73 65 72 74  ues to be insert
23b50 65 64 2e 20 4f 74 68 65 72 77 69 73 65 20 4e 55  ed. Otherwise NU
23b60 4c 4c 2e 0a 20 2a 20 70 49 64 4c 69 73 74 20 20  LL.. * pIdList  
23b70 20 2d 3e 20 49 66 20 74 68 69 73 20 69 73 20 61   -> If this is a
23b80 6e 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 2e 2e  n INSERT INTO ..
23b90 2e 20 28 3c 63 6f 6c 75 6d 6e 2d 6e 61 6d 65 73  . (<column-names
23ba0 3e 29 20 56 41 4c 55 45 53 20 2e 2e 2e 0a 20 2a  >) VALUES .... *
23bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
23bc0 61 74 65 6d 65 6e 74 2c 20 74 68 65 6e 20 74 68  atement, then th
23bd0 69 73 20 73 74 6f 72 65 73 20 74 68 65 20 63 6f  is stores the co
23be0 6c 75 6d 6e 2d 6e 61 6d 65 73 20 74 6f 20 62 65  lumn-names to be
23bf0 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  . *             
23c00 20 69 6e 73 65 72 74 65 64 20 69 6e 74 6f 2e 0a   inserted into..
23c10 20 2a 0a 20 2a 20 28 6f 70 20 3d 3d 20 54 4b 5f   *. * (op == TK_
23c20 44 45 4c 45 54 45 29 0a 20 2a 20 7a 54 61 72 67  DELETE). * zTarg
23c30 65 74 20 20 20 2d 3e 20 44 65 71 75 6f 74 65 64  et   -> Dequoted
23c40 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62   name of the tab
23c50 6c 65 20 74 6f 20 64 65 6c 65 74 65 20 66 72 6f  le to delete fro
23c60 6d 2e 0a 20 2a 20 70 57 68 65 72 65 20 20 20 20  m.. * pWhere    
23c70 2d 3e 20 54 68 65 20 57 48 45 52 45 20 63 6c 61  -> The WHERE cla
23c80 75 73 65 20 6f 66 20 74 68 65 20 44 45 4c 45 54  use of the DELET
23c90 45 20 73 74 61 74 65 6d 65 6e 74 20 69 66 20 6f  E statement if o
23ca0 6e 65 20 69 73 20 73 70 65 63 69 66 69 65 64 2e  ne is specified.
23cb0 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  . *             
23cc0 20 4f 74 68 65 72 77 69 73 65 20 4e 55 4c 4c 2e   Otherwise NULL.
23cd0 0a 20 2a 0a 20 2a 20 28 6f 70 20 3d 3d 20 54 4b  . *. * (op == TK
23ce0 5f 55 50 44 41 54 45 29 0a 20 2a 20 7a 54 61 72  _UPDATE). * zTar
23cf0 67 65 74 20 20 20 2d 3e 20 44 65 71 75 6f 74 65  get   -> Dequote
23d00 64 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 61  d name of the ta
23d10 62 6c 65 20 74 6f 20 75 70 64 61 74 65 2e 0a 20  ble to update.. 
23d20 2a 20 70 57 68 65 72 65 20 20 20 20 2d 3e 20 54  * pWhere    -> T
23d30 68 65 20 57 48 45 52 45 20 63 6c 61 75 73 65 20  he WHERE clause 
23d40 6f 66 20 74 68 65 20 55 50 44 41 54 45 20 73 74  of the UPDATE st
23d50 61 74 65 6d 65 6e 74 20 69 66 20 6f 6e 65 20 69  atement if one i
23d60 73 20 73 70 65 63 69 66 69 65 64 2e 0a 20 2a 20  s specified.. * 
23d70 20 20 20 20 20 20 20 20 20 20 20 20 20 4f 74 68               Oth
23d80 65 72 77 69 73 65 20 4e 55 4c 4c 2e 0a 20 2a 20  erwise NULL.. * 
23d90 70 45 78 70 72 4c 69 73 74 20 2d 3e 20 41 20 6c  pExprList -> A l
23da0 69 73 74 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d  ist of the colum
23db0 6e 73 20 74 6f 20 75 70 64 61 74 65 20 61 6e 64  ns to update and
23dc0 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 73   the expressions
23dd0 20 74 6f 20 75 70 64 61 74 65 0a 20 2a 20 20 20   to update. *   
23de0 20 20 20 20 20 20 20 20 20 20 20 74 68 65 6d 20             them 
23df0 74 6f 2e 20 53 65 65 20 73 71 6c 69 74 65 33 55  to. See sqlite3U
23e00 70 64 61 74 65 28 29 20 64 6f 63 75 6d 65 6e 74  pdate() document
23e10 61 74 69 6f 6e 20 6f 66 20 22 70 43 68 61 6e 67  ation of "pChang
23e20 65 73 22 0a 20 2a 20 20 20 20 20 20 20 20 20 20  es". *          
23e30 20 20 20 20 61 72 67 75 6d 65 6e 74 2e 0a 20 2a      argument.. *
23e40 0a 20 2a 2f 0a 73 74 72 75 63 74 20 54 72 69 67  . */.struct Trig
23e50 67 65 72 53 74 65 70 20 7b 0a 20 20 75 38 20 6f  gerStep {.  u8 o
23e60 70 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  p;              
23e70 20 2f 2a 20 4f 6e 65 20 6f 66 20 54 4b 5f 44 45   /* One of TK_DE
23e80 4c 45 54 45 2c 20 54 4b 5f 55 50 44 41 54 45 2c  LETE, TK_UPDATE,
23e90 20 54 4b 5f 49 4e 53 45 52 54 2c 20 54 4b 5f 53   TK_INSERT, TK_S
23ea0 45 4c 45 43 54 20 2a 2f 0a 20 20 75 38 20 6f 72  ELECT */.  u8 or
23eb0 63 6f 6e 66 3b 20 20 20 20 20 20 20 20 20 20 20  conf;           
23ec0 2f 2a 20 4f 45 5f 52 6f 6c 6c 62 61 63 6b 20 65  /* OE_Rollback e
23ed0 74 63 2e 20 2a 2f 0a 20 20 54 72 69 67 67 65 72  tc. */.  Trigger
23ee0 20 2a 70 54 72 69 67 3b 20 20 20 20 20 20 2f 2a   *pTrig;      /*
23ef0 20 54 68 65 20 74 72 69 67 67 65 72 20 74 68 61   The trigger tha
23f00 74 20 74 68 69 73 20 73 74 65 70 20 69 73 20 61  t this step is a
23f10 20 70 61 72 74 20 6f 66 20 2a 2f 0a 20 20 53 65   part of */.  Se
23f20 6c 65 63 74 20 2a 70 53 65 6c 65 63 74 3b 20 20  lect *pSelect;  
23f30 20 20 20 2f 2a 20 53 45 4c 45 43 54 20 73 74 61     /* SELECT sta
23f40 74 65 6d 65 6e 74 20 6f 72 20 52 48 53 20 6f 66  tement or RHS of
23f50 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 53 45 4c   INSERT INTO SEL
23f60 45 43 54 20 2e 2e 2e 20 2a 2f 0a 20 20 63 68 61  ECT ... */.  cha
23f70 72 20 2a 7a 54 61 72 67 65 74 3b 20 20 20 20 20  r *zTarget;     
23f80 20 20 2f 2a 20 54 61 72 67 65 74 20 74 61 62 6c    /* Target tabl
23f90 65 20 66 6f 72 20 44 45 4c 45 54 45 2c 20 55 50  e for DELETE, UP
23fa0 44 41 54 45 2c 20 49 4e 53 45 52 54 20 2a 2f 0a  DATE, INSERT */.
23fb0 20 20 45 78 70 72 20 2a 70 57 68 65 72 65 3b 20    Expr *pWhere; 
23fc0 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 57 48         /* The WH
23fd0 45 52 45 20 63 6c 61 75 73 65 20 66 6f 72 20 44  ERE clause for D
23fe0 45 4c 45 54 45 20 6f 72 20 55 50 44 41 54 45 20  ELETE or UPDATE 
23ff0 73 74 65 70 73 20 2a 2f 0a 20 20 45 78 70 72 4c  steps */.  ExprL
24000 69 73 74 20 2a 70 45 78 70 72 4c 69 73 74 3b 20  ist *pExprList; 
24010 2f 2a 20 53 45 54 20 63 6c 61 75 73 65 20 66 6f  /* SET clause fo
24020 72 20 55 50 44 41 54 45 20 2a 2f 0a 20 20 49 64  r UPDATE */.  Id
24030 4c 69 73 74 20 2a 70 49 64 4c 69 73 74 3b 20 20  List *pIdList;  
24040 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20 6e 61 6d     /* Column nam
24050 65 73 20 66 6f 72 20 49 4e 53 45 52 54 20 2a 2f  es for INSERT */
24060 0a 20 20 55 70 73 65 72 74 20 2a 70 55 70 73 65  .  Upsert *pUpse
24070 72 74 3b 20 20 20 20 20 2f 2a 20 55 70 73 65 72  rt;     /* Upser
24080 74 20 63 6c 61 75 73 65 73 20 6f 6e 20 61 6e 20  t clauses on an 
24090 49 4e 53 45 52 54 20 2a 2f 0a 20 20 63 68 61 72  INSERT */.  char
240a0 20 2a 7a 53 70 61 6e 3b 20 20 20 20 20 20 20 20   *zSpan;        
240b0 20 2f 2a 20 4f 72 69 67 69 6e 61 6c 20 53 51 4c   /* Original SQL
240c0 20 74 65 78 74 20 6f 66 20 74 68 69 73 20 63 6f   text of this co
240d0 6d 6d 61 6e 64 20 2a 2f 0a 20 20 54 72 69 67 67  mmand */.  Trigg
240e0 65 72 53 74 65 70 20 2a 70 4e 65 78 74 3b 20 20  erStep *pNext;  
240f0 2f 2a 20 4e 65 78 74 20 69 6e 20 74 68 65 20 6c  /* Next in the l
24100 69 6e 6b 2d 6c 69 73 74 20 2a 2f 0a 20 20 54 72  ink-list */.  Tr
24110 69 67 67 65 72 53 74 65 70 20 2a 70 4c 61 73 74  iggerStep *pLast
24120 3b 20 20 2f 2a 20 4c 61 73 74 20 65 6c 65 6d 65  ;  /* Last eleme
24130 6e 74 20 69 6e 20 6c 69 6e 6b 2d 6c 69 73 74 2e  nt in link-list.
24140 20 56 61 6c 69 64 20 66 6f 72 20 31 73 74 20 65   Valid for 1st e
24150 6c 65 6d 20 6f 6e 6c 79 20 2a 2f 0a 7d 3b 0a 0a  lem only */.};..
24160 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77  /*.** The follow
24170 69 6e 67 20 73 74 72 75 63 74 75 72 65 20 63 6f  ing structure co
24180 6e 74 61 69 6e 73 20 69 6e 66 6f 72 6d 61 74 69  ntains informati
24190 6f 6e 20 75 73 65 64 20 62 79 20 74 68 65 20 73  on used by the s
241a0 71 6c 69 74 65 46 69 78 2e 2e 2e 0a 2a 2a 20 72  qliteFix....** r
241b0 6f 75 74 69 6e 65 73 20 61 73 20 74 68 65 79 20  outines as they 
241c0 77 61 6c 6b 20 74 68 65 20 70 61 72 73 65 20 74  walk the parse t
241d0 72 65 65 20 74 6f 20 6d 61 6b 65 20 64 61 74 61  ree to make data
241e0 62 61 73 65 20 72 65 66 65 72 65 6e 63 65 73 0a  base references.
241f0 2a 2a 20 65 78 70 6c 69 63 69 74 2e 0a 2a 2f 0a  ** explicit..*/.
24200 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 44  typedef struct D
24210 62 46 69 78 65 72 20 44 62 46 69 78 65 72 3b 0a  bFixer DbFixer;.
24220 73 74 72 75 63 74 20 44 62 46 69 78 65 72 20 7b  struct DbFixer {
24230 0a 20 20 50 61 72 73 65 20 2a 70 50 61 72 73 65  .  Parse *pParse
24240 3b 20 20 20 20 20 20 2f 2a 20 54 68 65 20 70 61  ;      /* The pa
24250 72 73 69 6e 67 20 63 6f 6e 74 65 78 74 2e 20 20  rsing context.  
24260 45 72 72 6f 72 20 6d 65 73 73 61 67 65 73 20 77  Error messages w
24270 72 69 74 74 65 6e 20 68 65 72 65 20 2a 2f 0a 20  ritten here */. 
24280 20 53 63 68 65 6d 61 20 2a 70 53 63 68 65 6d 61   Schema *pSchema
24290 3b 20 20 20 20 2f 2a 20 46 69 78 20 69 74 65 6d  ;    /* Fix item
242a0 73 20 74 6f 20 74 68 69 73 20 73 63 68 65 6d 61  s to this schema
242b0 20 2a 2f 0a 20 20 69 6e 74 20 62 56 61 72 4f 6e   */.  int bVarOn
242c0 6c 79 3b 20 20 20 20 20 20 20 2f 2a 20 43 68 65  ly;       /* Che
242d0 63 6b 20 66 6f 72 20 76 61 72 69 61 62 6c 65 20  ck for variable 
242e0 72 65 66 65 72 65 6e 63 65 73 20 6f 6e 6c 79 20  references only 
242f0 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20  */.  const char 
24300 2a 7a 44 62 3b 20 20 20 20 2f 2a 20 4d 61 6b 65  *zDb;    /* Make
24310 20 73 75 72 65 20 61 6c 6c 20 6f 62 6a 65 63 74   sure all object
24320 73 20 61 72 65 20 63 6f 6e 74 61 69 6e 65 64 20  s are contained 
24330 69 6e 20 74 68 69 73 20 64 61 74 61 62 61 73 65  in this database
24340 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72   */.  const char
24350 20 2a 7a 54 79 70 65 3b 20 20 2f 2a 20 54 79 70   *zType;  /* Typ
24360 65 20 6f 66 20 74 68 65 20 63 6f 6e 74 61 69 6e  e of the contain
24370 65 72 20 2d 20 75 73 65 64 20 66 6f 72 20 65 72  er - used for er
24380 72 6f 72 20 6d 65 73 73 61 67 65 73 20 2a 2f 0a  ror messages */.
24390 20 20 63 6f 6e 73 74 20 54 6f 6b 65 6e 20 2a 70    const Token *p
243a0 4e 61 6d 65 3b 20 2f 2a 20 4e 61 6d 65 20 6f 66  Name; /* Name of
243b0 20 74 68 65 20 63 6f 6e 74 61 69 6e 65 72 20 2d   the container -
243c0 20 75 73 65 64 20 66 6f 72 20 65 72 72 6f 72 20   used for error 
243d0 6d 65 73 73 61 67 65 73 20 2a 2f 0a 7d 3b 0a 0a  messages */.};..
243e0 2f 2a 0a 2a 2a 20 41 6e 20 6f 62 6a 65 63 74 65  /*.** An objecte
243f0 64 20 75 73 65 64 20 74 6f 20 61 63 63 75 6d 75  d used to accumu
24400 6c 61 74 65 20 74 68 65 20 74 65 78 74 20 6f 66  late the text of
24410 20 61 20 73 74 72 69 6e 67 20 77 68 65 72 65 20   a string where 
24420 77 65 0a 2a 2a 20 64 6f 20 6e 6f 74 20 6e 65 63  we.** do not nec
24430 65 73 73 61 72 69 6c 79 20 6b 6e 6f 77 20 68 6f  essarily know ho
24440 77 20 62 69 67 20 74 68 65 20 73 74 72 69 6e 67  w big the string
24450 20 77 69 6c 6c 20 62 65 20 69 6e 20 74 68 65 20   will be in the 
24460 65 6e 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 73  end..*/.struct s
24470 71 6c 69 74 65 33 5f 73 74 72 20 7b 0a 20 20 73  qlite3_str {.  s
24480 71 6c 69 74 65 33 20 2a 64 62 3b 20 20 20 20 20  qlite3 *db;     
24490 20 20 20 20 2f 2a 20 4f 70 74 69 6f 6e 61 6c 20      /* Optional 
244a0 64 61 74 61 62 61 73 65 20 66 6f 72 20 6c 6f 6f  database for loo
244b0 6b 61 73 69 64 65 2e 20 20 43 61 6e 20 62 65 20  kaside.  Can be 
244c0 4e 55 4c 4c 20 2a 2f 0a 20 20 63 68 61 72 20 2a  NULL */.  char *
244d0 7a 54 65 78 74 3b 20 20 20 20 20 20 20 20 20 2f  zText;         /
244e0 2a 20 54 68 65 20 73 74 72 69 6e 67 20 63 6f 6c  * The string col
244f0 6c 65 63 74 65 64 20 73 6f 20 66 61 72 20 2a 2f  lected so far */
24500 0a 20 20 75 33 32 20 20 6e 41 6c 6c 6f 63 3b 20  .  u32  nAlloc; 
24510 20 20 20 20 20 20 20 20 2f 2a 20 41 6d 6f 75 6e          /* Amoun
24520 74 20 6f 66 20 73 70 61 63 65 20 61 6c 6c 6f 63  t of space alloc
24530 61 74 65 64 20 69 6e 20 7a 54 65 78 74 20 2a 2f  ated in zText */
24540 0a 20 20 75 33 32 20 20 6d 78 41 6c 6c 6f 63 3b  .  u32  mxAlloc;
24550 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 78 69 6d          /* Maxim
24560 75 6d 20 61 6c 6c 6f 77 65 64 20 61 6c 6c 6f 63  um allowed alloc
24570 61 74 69 6f 6e 2e 20 20 30 20 66 6f 72 20 6e 6f  ation.  0 for no
24580 20 6d 61 6c 6c 6f 63 20 75 73 61 67 65 20 2a 2f   malloc usage */
24590 0a 20 20 75 33 32 20 20 6e 43 68 61 72 3b 20 20  .  u32  nChar;  
245a0 20 20 20 20 20 20 20 20 2f 2a 20 4c 65 6e 67 74          /* Lengt
245b0 68 20 6f 66 20 74 68 65 20 73 74 72 69 6e 67 20  h of the string 
245c0 73 6f 20 66 61 72 20 2a 2f 0a 20 20 75 38 20 20  so far */.  u8  
245d0 20 61 63 63 45 72 72 6f 72 3b 20 20 20 20 20 20   accError;      
245e0 20 2f 2a 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d   /* SQLITE_NOMEM
245f0 20 6f 72 20 53 51 4c 49 54 45 5f 54 4f 4f 42 49   or SQLITE_TOOBI
24600 47 20 2a 2f 0a 20 20 75 38 20 20 20 70 72 69 6e  G */.  u8   prin
24610 74 66 46 6c 61 67 73 3b 20 20 20 20 2f 2a 20 53  tfFlags;    /* S
24620 51 4c 49 54 45 5f 50 52 49 4e 54 46 20 66 6c 61  QLITE_PRINTF fla
24630 67 73 20 62 65 6c 6f 77 20 2a 2f 0a 7d 3b 0a 23  gs below */.};.#
24640 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 52  define SQLITE_PR
24650 49 4e 54 46 5f 49 4e 54 45 52 4e 41 4c 20 30 78  INTF_INTERNAL 0x
24660 30 31 20 20 2f 2a 20 49 6e 74 65 72 6e 61 6c 2d  01  /* Internal-
24670 75 73 65 2d 6f 6e 6c 79 20 63 6f 6e 76 65 72 74  use-only convert
24680 65 72 73 20 61 6c 6c 6f 77 65 64 20 2a 2f 0a 23  ers allowed */.#
24690 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 52  define SQLITE_PR
246a0 49 4e 54 46 5f 53 51 4c 46 55 4e 43 20 20 30 78  INTF_SQLFUNC  0x
246b0 30 32 20 20 2f 2a 20 53 51 4c 20 66 75 6e 63 74  02  /* SQL funct
246c0 69 6f 6e 20 61 72 67 75 6d 65 6e 74 73 20 74 6f  ion arguments to
246d0 20 56 58 50 72 69 6e 74 66 20 2a 2f 0a 23 64 65   VXPrintf */.#de
246e0 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 52 49 4e  fine SQLITE_PRIN
246f0 54 46 5f 4d 41 4c 4c 4f 43 45 44 20 30 78 30 34  TF_MALLOCED 0x04
24700 20 20 2f 2a 20 54 72 75 65 20 69 66 20 78 54 65    /* True if xTe
24710 78 74 20 69 73 20 61 6c 6c 6f 63 61 74 65 64 20  xt is allocated 
24720 73 70 61 63 65 20 2a 2f 0a 0a 23 64 65 66 69 6e  space */..#defin
24730 65 20 69 73 4d 61 6c 6c 6f 63 65 64 28 58 29 20  e isMalloced(X) 
24740 20 28 28 28 58 29 2d 3e 70 72 69 6e 74 66 46 6c   (((X)->printfFl
24750 61 67 73 20 26 20 53 51 4c 49 54 45 5f 50 52 49  ags & SQLITE_PRI
24760 4e 54 46 5f 4d 41 4c 4c 4f 43 45 44 29 21 3d 30  NTF_MALLOCED)!=0
24770 29 0a 0a 0a 2f 2a 0a 2a 2a 20 41 20 70 6f 69 6e  ).../*.** A poin
24780 74 65 72 20 74 6f 20 74 68 69 73 20 73 74 72 75  ter to this stru
24790 63 74 75 72 65 20 69 73 20 75 73 65 64 20 74 6f  cture is used to
247a0 20 63 6f 6d 6d 75 6e 69 63 61 74 65 20 69 6e 66   communicate inf
247b0 6f 72 6d 61 74 69 6f 6e 0a 2a 2a 20 66 72 6f 6d  ormation.** from
247c0 20 73 71 6c 69 74 65 33 49 6e 69 74 20 61 6e 64   sqlite3Init and
247d0 20 4f 50 5f 50 61 72 73 65 53 63 68 65 6d 61 20   OP_ParseSchema 
247e0 69 6e 74 6f 20 74 68 65 20 73 71 6c 69 74 65 33  into the sqlite3
247f0 49 6e 69 74 43 61 6c 6c 62 61 63 6b 2e 0a 2a 2f  InitCallback..*/
24800 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
24810 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b  {.  sqlite3 *db;
24820 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 64          /* The d
24830 61 74 61 62 61 73 65 20 62 65 69 6e 67 20 69 6e  atabase being in
24840 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 63  itialized */.  c
24850 68 61 72 20 2a 2a 70 7a 45 72 72 4d 73 67 3b 20  har **pzErrMsg; 
24860 20 20 20 2f 2a 20 45 72 72 6f 72 20 6d 65 73 73     /* Error mess
24870 61 67 65 20 73 74 6f 72 65 64 20 68 65 72 65 20  age stored here 
24880 2a 2f 0a 20 20 69 6e 74 20 69 44 62 3b 20 20 20  */.  int iDb;   
24890 20 20 20 20 20 20 20 20 20 2f 2a 20 30 20 66 6f           /* 0 fo
248a0 72 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 2e  r main database.
248b0 20 20 31 20 66 6f 72 20 54 45 4d 50 2c 20 32 2e    1 for TEMP, 2.
248c0 2e 20 66 6f 72 20 41 54 54 41 43 48 65 64 20 2a  . for ATTACHed *
248d0 2f 0a 20 20 69 6e 74 20 72 63 3b 20 20 20 20 20  /.  int rc;     
248e0 20 20 20 20 20 20 20 20 2f 2a 20 52 65 73 75 6c          /* Resul
248f0 74 20 63 6f 64 65 20 73 74 6f 72 65 64 20 68 65  t code stored he
24900 72 65 20 2a 2f 0a 20 20 75 33 32 20 6d 49 6e 69  re */.  u32 mIni
24910 74 46 6c 61 67 73 3b 20 20 20 20 20 2f 2a 20 46  tFlags;     /* F
24920 6c 61 67 73 20 63 6f 6e 74 72 6f 6c 6c 69 6e 67  lags controlling
24930 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 73 20   error messages 
24940 2a 2f 0a 20 20 75 33 32 20 6e 49 6e 69 74 52 6f  */.  u32 nInitRo
24950 77 3b 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62  w;       /* Numb
24960 65 72 20 6f 66 20 72 6f 77 73 20 70 72 6f 63 65  er of rows proce
24970 73 73 65 64 20 2a 2f 0a 7d 20 49 6e 69 74 44 61  ssed */.} InitDa
24980 74 61 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77  ta;../*.** Allow
24990 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20 6d 49  ed values for mI
249a0 6e 69 74 46 6c 61 67 73 0a 2a 2f 0a 23 64 65 66  nitFlags.*/.#def
249b0 69 6e 65 20 49 4e 49 54 46 4c 41 47 5f 41 6c 74  ine INITFLAG_Alt
249c0 65 72 54 61 62 6c 65 20 20 20 30 78 30 30 30 31  erTable   0x0001
249d0 20 20 2f 2a 20 54 68 69 73 20 69 73 20 61 20 72    /* This is a r
249e0 65 70 61 72 73 65 20 61 66 74 65 72 20 41 4c 54  eparse after ALT
249f0 45 52 20 54 41 42 4c 45 20 2a 2f 0a 0a 2f 2a 0a  ER TABLE */../*.
24a00 2a 2a 20 53 74 72 75 63 74 75 72 65 20 63 6f 6e  ** Structure con
24a10 74 61 69 6e 69 6e 67 20 67 6c 6f 62 61 6c 20 63  taining global c
24a20 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 64 61 74  onfiguration dat
24a30 61 20 66 6f 72 20 74 68 65 20 53 51 4c 69 74 65  a for the SQLite
24a40 20 6c 69 62 72 61 72 79 2e 0a 2a 2a 0a 2a 2a 20   library..**.** 
24a50 54 68 69 73 20 73 74 72 75 63 74 75 72 65 20 61  This structure a
24a60 6c 73 6f 20 63 6f 6e 74 61 69 6e 73 20 73 6f 6d  lso contains som
24a70 65 20 73 74 61 74 65 20 69 6e 66 6f 72 6d 61 74  e state informat
24a80 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53  ion..*/.struct S
24a90 71 6c 69 74 65 33 43 6f 6e 66 69 67 20 7b 0a 20  qlite3Config {. 
24aa0 20 69 6e 74 20 62 4d 65 6d 73 74 61 74 3b 20 20   int bMemstat;  
24ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24ac0 20 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 65 6e     /* True to en
24ad0 61 62 6c 65 20 6d 65 6d 6f 72 79 20 73 74 61 74  able memory stat
24ae0 75 73 20 2a 2f 0a 20 20 69 6e 74 20 62 43 6f 72  us */.  int bCor
24af0 65 4d 75 74 65 78 3b 20 20 20 20 20 20 20 20 20  eMutex;         
24b00 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75            /* Tru
24b10 65 20 74 6f 20 65 6e 61 62 6c 65 20 63 6f 72 65  e to enable core
24b20 20 6d 75 74 65 78 69 6e 67 20 2a 2f 0a 20 20 69   mutexing */.  i
24b30 6e 74 20 62 46 75 6c 6c 4d 75 74 65 78 3b 20 20  nt bFullMutex;  
24b40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24b50 20 2f 2a 20 54 72 75 65 20 74 6f 20 65 6e 61 62   /* True to enab
24b60 6c 65 20 66 75 6c 6c 20 6d 75 74 65 78 69 6e 67  le full mutexing
24b70 20 2a 2f 0a 20 20 69 6e 74 20 62 4f 70 65 6e 55   */.  int bOpenU
24b80 72 69 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ri;             
24b90 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20          /* True 
24ba0 74 6f 20 69 6e 74 65 72 70 72 65 74 20 66 69 6c  to interpret fil
24bb0 65 6e 61 6d 65 73 20 61 73 20 55 52 49 73 20 2a  enames as URIs *
24bc0 2f 0a 20 20 69 6e 74 20 62 55 73 65 43 69 73 3b  /.  int bUseCis;
24bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24be0 20 20 20 20 20 20 2f 2a 20 55 73 65 20 63 6f 76        /* Use cov
24bf0 65 72 69 6e 67 20 69 6e 64 69 63 65 73 20 66 6f  ering indices fo
24c00 72 20 66 75 6c 6c 2d 73 63 61 6e 73 20 2a 2f 0a  r full-scans */.
24c10 20 20 69 6e 74 20 62 53 6d 61 6c 6c 4d 61 6c 6c    int bSmallMall
24c20 6f 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  oc;             
24c30 20 20 20 20 2f 2a 20 41 76 6f 69 64 20 6c 61 72      /* Avoid lar
24c40 67 65 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61  ge memory alloca
24c50 74 69 6f 6e 73 20 69 66 20 74 72 75 65 20 2a 2f  tions if true */
24c60 0a 20 20 69 6e 74 20 6d 78 53 74 72 6c 65 6e 3b  .  int mxStrlen;
24c70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24c80 20 20 20 20 20 2f 2a 20 4d 61 78 69 6d 75 6d 20       /* Maximum 
24c90 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 2a 2f  string length */
24ca0 0a 20 20 69 6e 74 20 6e 65 76 65 72 43 6f 72 72  .  int neverCorr
24cb0 75 70 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  upt;            
24cc0 20 20 20 20 20 2f 2a 20 44 61 74 61 62 61 73 65       /* Database
24cd0 20 69 73 20 61 6c 77 61 79 73 20 77 65 6c 6c 2d   is always well-
24ce0 66 6f 72 6d 65 64 20 2a 2f 0a 20 20 69 6e 74 20  formed */.  int 
24cf0 73 7a 4c 6f 6f 6b 61 73 69 64 65 3b 20 20 20 20  szLookaside;    
24d00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
24d10 20 44 65 66 61 75 6c 74 20 6c 6f 6f 6b 61 73 69   Default lookasi
24d20 64 65 20 62 75 66 66 65 72 20 73 69 7a 65 20 2a  de buffer size *
24d30 2f 0a 20 20 69 6e 74 20 6e 4c 6f 6f 6b 61 73 69  /.  int nLookasi
24d40 64 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  de;             
24d50 20 20 20 20 20 20 2f 2a 20 44 65 66 61 75 6c 74        /* Default
24d60 20 6c 6f 6f 6b 61 73 69 64 65 20 62 75 66 66 65   lookaside buffe
24d70 72 20 63 6f 75 6e 74 20 2a 2f 0a 20 20 69 6e 74  r count */.  int
24d80 20 6e 53 74 6d 74 53 70 69 6c 6c 3b 20 20 20 20   nStmtSpill;    
24d90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
24da0 2a 20 53 74 6d 74 2d 6a 6f 75 72 6e 61 6c 20 73  * Stmt-journal s
24db0 70 69 6c 6c 2d 74 6f 2d 64 69 73 6b 20 74 68 72  pill-to-disk thr
24dc0 65 73 68 6f 6c 64 20 2a 2f 0a 20 20 73 71 6c 69  eshold */.  sqli
24dd0 74 65 33 5f 6d 65 6d 5f 6d 65 74 68 6f 64 73 20  te3_mem_methods 
24de0 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  m;            /*
24df0 20 4c 6f 77 2d 6c 65 76 65 6c 20 6d 65 6d 6f 72   Low-level memor
24e00 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 69 6e 74  y allocation int
24e10 65 72 66 61 63 65 20 2a 2f 0a 20 20 73 71 6c 69  erface */.  sqli
24e20 74 65 33 5f 6d 75 74 65 78 5f 6d 65 74 68 6f 64  te3_mutex_method
24e30 73 20 6d 75 74 65 78 3b 20 20 20 20 20 20 2f 2a  s mutex;      /*
24e40 20 4c 6f 77 2d 6c 65 76 65 6c 20 6d 75 74 65 78   Low-level mutex
24e50 20 69 6e 74 65 72 66 61 63 65 20 2a 2f 0a 20 20   interface */.  
24e60 73 71 6c 69 74 65 33 5f 70 63 61 63 68 65 5f 6d  sqlite3_pcache_m
24e70 65 74 68 6f 64 73 32 20 70 63 61 63 68 65 32 3b  ethods2 pcache2;
24e80 20 20 2f 2a 20 4c 6f 77 2d 6c 65 76 65 6c 20 70    /* Low-level p
24e90 61 67 65 2d 63 61 63 68 65 20 69 6e 74 65 72 66  age-cache interf
24ea0 61 63 65 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70  ace */.  void *p
24eb0 48 65 61 70 3b 20 20 20 20 20 20 20 20 20 20 20  Heap;           
24ec0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 48 65             /* He
24ed0 61 70 20 73 74 6f 72 61 67 65 20 73 70 61 63 65  ap storage space
24ee0 20 2a 2f 0a 20 20 69 6e 74 20 6e 48 65 61 70 3b   */.  int nHeap;
24ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24f00 20 20 20 20 20 20 20 20 2f 2a 20 53 69 7a 65 20          /* Size 
24f10 6f 66 20 70 48 65 61 70 5b 5d 20 2a 2f 0a 20 20  of pHeap[] */.  
24f20 69 6e 74 20 6d 6e 52 65 71 2c 20 6d 78 52 65 71  int mnReq, mxReq
24f30 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
24f40 20 20 2f 2a 20 4d 69 6e 20 61 6e 64 20 6d 61 78    /* Min and max
24f50 20 68 65 61 70 20 72 65 71 75 65 73 74 73 20 73   heap requests s
24f60 69 7a 65 73 20 2a 2f 0a 20 20 73 71 6c 69 74 65  izes */.  sqlite
24f70 33 5f 69 6e 74 36 34 20 73 7a 4d 6d 61 70 3b 20  3_int64 szMmap; 
24f80 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6d              /* m
24f90 6d 61 70 28 29 20 73 70 61 63 65 20 70 65 72 20  map() space per 
24fa0 6f 70 65 6e 20 66 69 6c 65 20 2a 2f 0a 20 20 73  open file */.  s
24fb0 71 6c 69 74 65 33 5f 69 6e 74 36 34 20 6d 78 4d  qlite3_int64 mxM
24fc0 6d 61 70 3b 20 20 20 20 20 20 20 20 20 20 20 20  map;            
24fd0 20 2f 2a 20 4d 61 78 69 6d 75 6d 20 76 61 6c 75   /* Maximum valu
24fe0 65 20 66 6f 72 20 73 7a 4d 6d 61 70 20 2a 2f 0a  e for szMmap */.
24ff0 20 20 76 6f 69 64 20 2a 70 50 61 67 65 3b 20 20    void *pPage;  
25000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25010 20 20 20 20 2f 2a 20 50 61 67 65 20 63 61 63 68      /* Page cach
25020 65 20 6d 65 6d 6f 72 79 20 2a 2f 0a 20 20 69 6e  e memory */.  in
25030 74 20 73 7a 50 61 67 65 3b 20 20 20 20 20 20 20  t szPage;       
25040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25050 2f 2a 20 53 69 7a 65 20 6f 66 20 65 61 63 68 20  /* Size of each 
25060 70 61 67 65 20 69 6e 20 70 50 61 67 65 5b 5d 20  page in pPage[] 
25070 2a 2f 0a 20 20 69 6e 74 20 6e 50 61 67 65 3b 20  */.  int nPage; 
25080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25090 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
250a0 20 6f 66 20 70 61 67 65 73 20 69 6e 20 70 50 61   of pages in pPa
250b0 67 65 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 6d 78  ge[] */.  int mx
250c0 50 61 72 73 65 72 53 74 61 63 6b 3b 20 20 20 20  ParserStack;    
250d0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6d              /* m
250e0 61 78 69 6d 75 6d 20 64 65 70 74 68 20 6f 66 20  aximum depth of 
250f0 74 68 65 20 70 61 72 73 65 72 20 73 74 61 63 6b  the parser stack
25100 20 2a 2f 0a 20 20 69 6e 74 20 73 68 61 72 65 64   */.  int shared
25110 43 61 63 68 65 45 6e 61 62 6c 65 64 3b 20 20 20  CacheEnabled;   
25120 20 20 20 20 20 20 20 20 2f 2a 20 74 72 75 65 20          /* true 
25130 69 66 20 73 68 61 72 65 64 2d 63 61 63 68 65 20  if shared-cache 
25140 6d 6f 64 65 20 65 6e 61 62 6c 65 64 20 2a 2f 0a  mode enabled */.
25150 20 20 75 33 32 20 73 7a 50 6d 61 3b 20 20 20 20    u32 szPma;    
25160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25170 20 20 20 20 2f 2a 20 4d 61 78 69 6d 75 6d 20 53      /* Maximum S
25180 6f 72 74 65 72 20 50 4d 41 20 73 69 7a 65 20 2a  orter PMA size *
25190 2f 0a 20 20 2f 2a 20 54 68 65 20 61 62 6f 76 65  /.  /* The above
251a0 20 6d 69 67 68 74 20 62 65 20 69 6e 69 74 69 61   might be initia
251b0 6c 69 7a 65 64 20 74 6f 20 6e 6f 6e 2d 7a 65 72  lized to non-zer
251c0 6f 2e 20 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e  o.  The followin
251d0 67 20 6e 65 65 64 20 74 6f 20 61 6c 77 61 79 73  g need to always
251e0 0a 20 20 2a 2a 20 69 6e 69 74 69 61 6c 6c 79 20  .  ** initially 
251f0 62 65 20 7a 65 72 6f 2c 20 68 6f 77 65 76 65 72  be zero, however
25200 2e 20 2a 2f 0a 20 20 69 6e 74 20 69 73 49 6e 69  . */.  int isIni
25210 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t;              
25220 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65           /* True
25230 20 61 66 74 65 72 20 69 6e 69 74 69 61 6c 69 7a   after initializ
25240 61 74 69 6f 6e 20 68 61 73 20 66 69 6e 69 73 68  ation has finish
25250 65 64 20 2a 2f 0a 20 20 69 6e 74 20 69 6e 50 72  ed */.  int inPr
25260 6f 67 72 65 73 73 3b 20 20 20 20 20 20 20 20 20  ogress;         
25270 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75            /* Tru
25280 65 20 77 68 69 6c 65 20 69 6e 69 74 69 61 6c 69  e while initiali
25290 7a 61 74 69 6f 6e 20 69 6e 20 70 72 6f 67 72 65  zation in progre
252a0 73 73 20 2a 2f 0a 20 20 69 6e 74 20 69 73 4d 75  ss */.  int isMu
252b0 74 65 78 49 6e 69 74 3b 20 20 20 20 20 20 20 20  texInit;        
252c0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75            /* Tru
252d0 65 20 61 66 74 65 72 20 6d 75 74 65 78 65 73 20  e after mutexes 
252e0 61 72 65 20 69 6e 69 74 69 61 6c 69 7a 65 64 20  are initialized 
252f0 2a 2f 0a 20 20 69 6e 74 20 69 73 4d 61 6c 6c 6f  */.  int isMallo
25300 63 49 6e 69 74 3b 20 20 20 20 20 20 20 20 20 20  cInit;          
25310 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 61         /* True a
25320 66 74 65 72 20 6d 61 6c 6c 6f 63 20 69 73 20 69  fter malloc is i
25330 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20  nitialized */.  
25340 69 6e 74 20 69 73 50 43 61 63 68 65 49 6e 69 74  int isPCacheInit
25350 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
25360 20 20 2f 2a 20 54 72 75 65 20 61 66 74 65 72 20    /* True after 
25370 6d 61 6c 6c 6f 63 20 69 73 20 69 6e 69 74 69 61  malloc is initia
25380 6c 69 7a 65 64 20 2a 2f 0a 20 20 69 6e 74 20 6e  lized */.  int n
25390 52 65 66 49 6e 69 74 4d 75 74 65 78 3b 20 20 20  RefInitMutex;   
253a0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
253b0 4e 75 6d 62 65 72 20 6f 66 20 75 73 65 72 73 20  Number of users 
253c0 6f 66 20 70 49 6e 69 74 4d 75 74 65 78 20 2a 2f  of pInitMutex */
253d0 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78  .  sqlite3_mutex
253e0 20 2a 70 49 6e 69 74 4d 75 74 65 78 3b 20 20 20   *pInitMutex;   
253f0 20 20 20 20 20 2f 2a 20 4d 75 74 65 78 20 75 73       /* Mutex us
25400 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f 69 6e  ed by sqlite3_in
25410 69 74 69 61 6c 69 7a 65 28 29 20 2a 2f 0a 20 20  itialize() */.  
25420 76 6f 69 64 20 28 2a 78 4c 6f 67 29 28 76 6f 69  void (*xLog)(voi
25430 64 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61  d*,int,const cha
25440 72 2a 29 3b 20 2f 2a 20 46 75 6e 63 74 69 6f 6e  r*); /* Function
25450 20 66 6f 72 20 6c 6f 67 67 69 6e 67 20 2a 2f 0a   for logging */.
25460 20 20 76 6f 69 64 20 2a 70 4c 6f 67 41 72 67 3b    void *pLogArg;
25470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25480 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20         /* First 
25490 61 72 67 75 6d 65 6e 74 20 74 6f 20 78 4c 6f 67  argument to xLog
254a0 28 29 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c  () */.#ifdef SQL
254b0 49 54 45 5f 45 4e 41 42 4c 45 5f 53 51 4c 4c 4f  ITE_ENABLE_SQLLO
254c0 47 0a 20 20 76 6f 69 64 28 2a 78 53 71 6c 6c 6f  G.  void(*xSqllo
254d0 67 29 28 76 6f 69 64 2a 2c 73 71 6c 69 74 65 33  g)(void*,sqlite3
254e0 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 69  *,const char*, i
254f0 6e 74 29 3b 0a 20 20 76 6f 69 64 20 2a 70 53 71  nt);.  void *pSq
25500 6c 6c 6f 67 41 72 67 3b 0a 23 65 6e 64 69 66 0a  llogArg;.#endif.
25510 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 56 44  #ifdef SQLITE_VD
25520 42 45 5f 43 4f 56 45 52 41 47 45 0a 20 20 2f 2a  BE_COVERAGE.  /*
25530 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 63   The following c
25540 61 6c 6c 62 61 63 6b 20 28 69 66 20 6e 6f 74 20  allback (if not 
25550 4e 55 4c 4c 29 20 69 73 20 69 6e 76 6f 6b 65 64  NULL) is invoked
25560 20 6f 6e 20 65 76 65 72 79 20 56 44 42 45 20 62   on every VDBE b
25570 72 61 6e 63 68 0a 20 20 2a 2a 20 6f 70 65 72 61  ranch.  ** opera
25580 74 69 6f 6e 2e 20 20 53 65 74 20 74 68 65 20 63  tion.  Set the c
25590 61 6c 6c 62 61 63 6b 20 75 73 69 6e 67 20 53 51  allback using SQ
255a0 4c 49 54 45 5f 54 45 53 54 43 54 52 4c 5f 56 44  LITE_TESTCTRL_VD
255b0 42 45 5f 43 4f 56 45 52 41 47 45 2e 0a 20 20 2a  BE_COVERAGE..  *
255c0 2f 0a 20 20 76 6f 69 64 20 28 2a 78 56 64 62 65  /.  void (*xVdbe
255d0 42 72 61 6e 63 68 29 28 76 6f 69 64 2a 2c 75 6e  Branch)(void*,un
255e0 73 69 67 6e 65 64 20 69 53 72 63 4c 69 6e 65 2c  signed iSrcLine,
255f0 75 38 20 65 54 68 69 73 2c 75 38 20 65 4d 78 29  u8 eThis,u8 eMx)
25600 3b 20 20 2f 2a 20 43 61 6c 6c 62 61 63 6b 20 2a  ;  /* Callback *
25610 2f 0a 20 20 76 6f 69 64 20 2a 70 56 64 62 65 42  /.  void *pVdbeB
25620 72 61 6e 63 68 41 72 67 3b 20 20 20 20 20 20 20  ranchArg;       
25630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
25650 20 31 73 74 20 61 72 67 75 6d 65 6e 74 20 2a 2f   1st argument */
25660 0a 23 65 6e 64 69 66 0a 23 69 66 64 65 66 20 53  .#endif.#ifdef S
25670 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 44 45 53  QLITE_ENABLE_DES
25680 45 52 49 41 4c 49 5a 45 0a 20 20 73 71 6c 69 74  ERIALIZE.  sqlit
25690 65 33 5f 69 6e 74 36 34 20 6d 78 4d 65 6d 64 62  e3_int64 mxMemdb
256a0 53 69 7a 65 3b 20 20 20 20 20 20 20 20 2f 2a 20  Size;        /* 
256b0 44 65 66 61 75 6c 74 20 6d 61 78 20 6d 65 6d 64  Default max memd
256c0 62 20 73 69 7a 65 20 2a 2f 0a 23 65 6e 64 69 66  b size */.#endif
256d0 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
256e0 55 4e 54 45 53 54 41 42 4c 45 0a 20 20 69 6e 74  UNTESTABLE.  int
256f0 20 28 2a 78 54 65 73 74 43 61 6c 6c 62 61 63 6b   (*xTestCallback
25700 29 28 69 6e 74 29 3b 20 20 20 20 20 20 20 20 2f  )(int);        /
25710 2a 20 49 6e 76 6f 6b 65 64 20 62 79 20 73 71 6c  * Invoked by sql
25720 69 74 65 33 46 61 75 6c 74 53 69 6d 28 29 20 2a  ite3FaultSim() *
25730 2f 0a 23 65 6e 64 69 66 0a 20 20 69 6e 74 20 62  /.#endif.  int b
25740 4c 6f 63 61 6c 74 69 6d 65 46 61 75 6c 74 3b 20  LocaltimeFault; 
25750 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
25760 54 72 75 65 20 74 6f 20 66 61 69 6c 20 6c 6f 63  True to fail loc
25770 61 6c 74 69 6d 65 28 29 20 63 61 6c 6c 73 20 2a  altime() calls *
25780 2f 0a 20 20 69 6e 74 20 62 49 6e 74 65 72 6e 61  /.  int bInterna
25790 6c 46 75 6e 63 74 69 6f 6e 73 3b 20 20 20 20 20  lFunctions;     
257a0 20 20 20 20 20 20 2f 2a 20 49 6e 74 65 72 6e 61        /* Interna
257b0 6c 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 73 20  l SQL functions 
257c0 61 72 65 20 76 69 73 69 62 6c 65 20 2a 2f 0a 20  are visible */. 
257d0 20 69 6e 74 20 69 4f 6e 63 65 52 65 73 65 74 54   int iOnceResetT
257e0 68 72 65 73 68 6f 6c 64 3b 20 20 20 20 20 20 20  hreshold;       
257f0 20 20 20 2f 2a 20 57 68 65 6e 20 74 6f 20 72 65     /* When to re
25800 73 65 74 20 4f 50 5f 4f 6e 63 65 20 63 6f 75 6e  set OP_Once coun
25810 74 65 72 73 20 2a 2f 0a 20 20 75 33 32 20 73 7a  ters */.  u32 sz
25820 53 6f 72 74 65 72 52 65 66 3b 20 20 20 20 20 20  SorterRef;      
25830 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d              /* M
25840 69 6e 20 73 69 7a 65 20 69 6e 20 62 79 74 65 73  in size in bytes
25850 20 74 6f 20 75 73 65 20 73 6f 72 74 65 72 2d 72   to use sorter-r
25860 65 66 73 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65  efs */.  unsigne
25870 64 20 69 6e 74 20 69 50 72 6e 67 53 65 65 64 3b  d int iPrngSeed;
25880 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 6c             /* Al
25890 74 65 72 6e 61 74 69 76 65 20 66 69 78 65 64 20  ternative fixed 
258a0 73 65 65 64 20 66 6f 72 20 74 68 65 20 50 52 4e  seed for the PRN
258b0 47 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54  G */.};../*.** T
258c0 68 69 73 20 6d 61 63 72 6f 20 69 73 20 75 73 65  his macro is use
258d0 64 20 69 6e 73 69 64 65 20 6f 66 20 61 73 73 65  d inside of asse
258e0 72 74 28 29 20 73 74 61 74 65 6d 65 6e 74 73 20  rt() statements 
258f0 74 6f 20 69 6e 64 69 63 61 74 65 20 74 68 61 74  to indicate that
25900 0a 2a 2a 20 74 68 65 20 61 73 73 65 72 74 20 69  .** the assert i
25910 73 20 6f 6e 6c 79 20 76 61 6c 69 64 20 6f 6e 20  s only valid on 
25920 61 20 77 65 6c 6c 2d 66 6f 72 6d 65 64 20 64 61  a well-formed da
25930 74 61 62 61 73 65 2e 20 20 49 6e 73 74 65 61 64  tabase.  Instead
25940 20 6f 66 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 61   of:.**.**     a
25950 73 73 65 72 74 28 20 58 20 29 3b 0a 2a 2a 0a 2a  ssert( X );.**.*
25960 2a 20 4f 6e 65 20 77 72 69 74 65 73 3a 0a 2a 2a  * One writes:.**
25970 0a 2a 2a 20 20 20 20 20 61 73 73 65 72 74 28 20  .**     assert( 
25980 58 20 7c 7c 20 43 4f 52 52 55 50 54 5f 44 42 20  X || CORRUPT_DB 
25990 29 3b 0a 2a 2a 0a 2a 2a 20 43 4f 52 52 55 50 54  );.**.** CORRUPT
259a0 5f 44 42 20 69 73 20 74 72 75 65 20 64 75 72 69  _DB is true duri
259b0 6e 67 20 6e 6f 72 6d 61 6c 20 6f 70 65 72 61 74  ng normal operat
259c0 69 6f 6e 2e 20 20 43 4f 52 52 55 50 54 5f 44 42  ion.  CORRUPT_DB
259d0 20 64 6f 65 73 20 6e 6f 74 20 69 6e 64 69 63 61   does not indica
259e0 74 65 0a 2a 2a 20 74 68 61 74 20 74 68 65 20 64  te.** that the d
259f0 61 74 61 62 61 73 65 20 69 73 20 64 65 66 69 6e  atabase is defin
25a00 69 74 65 6c 79 20 63 6f 72 72 75 70 74 2c 20 6f  itely corrupt, o
25a10 6e 6c 79 20 74 68 61 74 20 69 74 20 6d 69 67 68  nly that it migh
25a20 74 20 62 65 20 63 6f 72 72 75 70 74 2e 0a 2a 2a  t be corrupt..**
25a30 20 46 6f 72 20 6d 6f 73 74 20 74 65 73 74 20 63   For most test c
25a40 61 73 65 73 2c 20 43 4f 52 52 55 50 54 5f 44 42  ases, CORRUPT_DB
25a50 20 69 73 20 73 65 74 20 74 6f 20 66 61 6c 73 65   is set to false
25a60 20 75 73 69 6e 67 20 61 20 73 70 65 63 69 61 6c   using a special
25a70 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 74 65 73 74  .** sqlite3_test
25a80 5f 63 6f 6e 74 72 6f 6c 28 29 2e 20 20 54 68 69  _control().  Thi
25a90 73 20 65 6e 61 62 6c 65 73 20 61 73 73 65 72 74  s enables assert
25aa0 28 29 20 73 74 61 74 65 6d 65 6e 74 73 20 74 6f  () statements to
25ab0 20 70 72 6f 76 65 0a 2a 2a 20 74 68 69 6e 67 73   prove.** things
25ac0 20 74 68 61 74 20 61 72 65 20 61 6c 77 61 79 73   that are always
25ad0 20 74 72 75 65 20 66 6f 72 20 77 65 6c 6c 2d 66   true for well-f
25ae0 6f 72 6d 65 64 20 64 61 74 61 62 61 73 65 73 2e  ormed databases.
25af0 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 43 4f 52 52  .*/.#define CORR
25b00 55 50 54 5f 44 42 20 20 28 73 71 6c 69 74 65 33  UPT_DB  (sqlite3
25b10 43 6f 6e 66 69 67 2e 6e 65 76 65 72 43 6f 72 72  Config.neverCorr
25b20 75 70 74 3d 3d 30 29 0a 0a 2f 2a 0a 2a 2a 20 43  upt==0)../*.** C
25b30 6f 6e 74 65 78 74 20 70 6f 69 6e 74 65 72 20 70  ontext pointer p
25b40 61 73 73 65 64 20 64 6f 77 6e 20 74 68 72 6f 75  assed down throu
25b50 67 68 20 74 68 65 20 74 72 65 65 2d 77 61 6c 6b  gh the tree-walk
25b60 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 57 61 6c 6b  ..*/.struct Walk
25b70 65 72 20 7b 0a 20 20 50 61 72 73 65 20 2a 70 50  er {.  Parse *pP
25b80 61 72 73 65 3b 20 20 20 20 20 20 20 20 20 20 20  arse;           
25b90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25ba0 20 2f 2a 20 50 61 72 73 65 72 20 63 6f 6e 74 65   /* Parser conte
25bb0 78 74 2e 20 20 2a 2f 0a 20 20 69 6e 74 20 28 2a  xt.  */.  int (*
25bc0 78 45 78 70 72 43 61 6c 6c 62 61 63 6b 29 28 57  xExprCallback)(W
25bd0 61 6c 6b 65 72 2a 2c 20 45 78 70 72 2a 29 3b 20  alker*, Expr*); 
25be0 20 20 20 20 2f 2a 20 43 61 6c 6c 62 61 63 6b 20      /* Callback 
25bf0 66 6f 72 20 65 78 70 72 65 73 73 69 6f 6e 73 20  for expressions 
25c00 2a 2f 0a 20 20 69 6e 74 20 28 2a 78 53 65 6c 65  */.  int (*xSele
25c10 63 74 43 61 6c 6c 62 61 63 6b 29 28 57 61 6c 6b  ctCallback)(Walk
25c20 65 72 2a 2c 53 65 6c 65 63 74 2a 29 3b 20 20 2f  er*,Select*);  /
25c30 2a 20 43 61 6c 6c 62 61 63 6b 20 66 6f 72 20 53  * Callback for S
25c40 45 4c 45 43 54 73 20 2a 2f 0a 20 20 76 6f 69 64  ELECTs */.  void
25c50 20 28 2a 78 53 65 6c 65 63 74 43 61 6c 6c 62 61   (*xSelectCallba
25c60 63 6b 32 29 28 57 61 6c 6b 65 72 2a 2c 53 65 6c  ck2)(Walker*,Sel
25c70 65 63 74 2a 29 3b 2f 2a 20 53 65 63 6f 6e 64 20  ect*);/* Second 
25c80 63 61 6c 6c 62 61 63 6b 20 66 6f 72 20 53 45 4c  callback for SEL
25c90 45 43 54 73 20 2a 2f 0a 20 20 69 6e 74 20 77 61  ECTs */.  int wa
25ca0 6c 6b 65 72 44 65 70 74 68 3b 20 20 20 20 20 20  lkerDepth;      
25cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25cc0 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
25cd0 20 73 75 62 71 75 65 72 69 65 73 20 2a 2f 0a 20   subqueries */. 
25ce0 20 75 38 20 65 43 6f 64 65 3b 20 20 20 20 20 20   u8 eCode;      
25cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25d00 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 20             /* A 
25d10 73 6d 61 6c 6c 20 70 72 6f 63 65 73 73 69 6e 67  small processing
25d20 20 63 6f 64 65 20 2a 2f 0a 20 20 75 6e 69 6f 6e   code */.  union
25d30 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20   {              
25d40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25d50 20 20 20 20 20 2f 2a 20 45 78 74 72 61 20 64 61       /* Extra da
25d60 74 61 20 66 6f 72 20 63 61 6c 6c 62 61 63 6b 20  ta for callback 
25d70 2a 2f 0a 20 20 20 20 4e 61 6d 65 43 6f 6e 74 65  */.    NameConte
25d80 78 74 20 2a 70 4e 43 3b 20 20 20 20 20 20 20 20  xt *pNC;        
25d90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25da0 20 2f 2a 20 4e 61 6d 69 6e 67 20 63 6f 6e 74 65   /* Naming conte
25db0 78 74 20 2a 2f 0a 20 20 20 20 69 6e 74 20 6e 3b  xt */.    int n;
25dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25de0 20 20 20 20 2f 2a 20 41 20 63 6f 75 6e 74 65 72      /* A counter
25df0 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 43 75 72   */.    int iCur
25e00 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
25e10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25e20 20 20 2f 2a 20 41 20 63 75 72 73 6f 72 20 6e 75    /* A cursor nu
25e30 6d 62 65 72 20 2a 2f 0a 20 20 20 20 53 72 63 4c  mber */.    SrcL
25e40 69 73 74 20 2a 70 53 72 63 4c 69 73 74 3b 20 20  ist *pSrcList;  
25e50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25e60 20 20 20 20 20 20 2f 2a 20 46 52 4f 4d 20 63 6c        /* FROM cl
25e70 61 75 73 65 20 2a 2f 0a 20 20 20 20 73 74 72 75  ause */.    stru
25e80 63 74 20 53 72 63 43 6f 75 6e 74 20 2a 70 53 72  ct SrcCount *pSr
25e90 63 43 6f 75 6e 74 3b 20 20 20 20 20 20 20 20 20  cCount;         
25ea0 20 20 20 20 20 20 2f 2a 20 43 6f 75 6e 74 69 6e        /* Countin
25eb0 67 20 63 6f 6c 75 6d 6e 20 72 65 66 65 72 65 6e  g column referen
25ec0 63 65 73 20 2a 2f 0a 20 20 20 20 73 74 72 75 63  ces */.    struc
25ed0 74 20 43 43 75 72 48 69 6e 74 20 2a 70 43 43 75  t CCurHint *pCCu
25ee0 72 48 69 6e 74 3b 20 20 20 20 20 20 20 20 20 20  rHint;          
25ef0 20 20 20 20 20 2f 2a 20 55 73 65 64 20 62 79 20       /* Used by 
25f00 63 6f 64 65 43 75 72 73 6f 72 48 69 6e 74 28 29  codeCursorHint()
25f10 20 2a 2f 0a 20 20 20 20 69 6e 74 20 2a 61 69 43   */.    int *aiC
25f20 6f 6c 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ol;             
25f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25f40 20 20 2f 2a 20 61 72 72 61 79 20 6f 66 20 63 6f    /* array of co
25f50 6c 75 6d 6e 20 69 6e 64 65 78 65 73 20 2a 2f 0a  lumn indexes */.
25f60 20 20 20 20 73 74 72 75 63 74 20 49 64 78 43 6f      struct IdxCo
25f70 76 65 72 20 2a 70 49 64 78 43 6f 76 65 72 3b 20  ver *pIdxCover; 
25f80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
25f90 20 43 68 65 63 6b 20 66 6f 72 20 69 6e 64 65 78   Check for index
25fa0 20 63 6f 76 65 72 61 67 65 20 2a 2f 0a 20 20 20   coverage */.   
25fb0 20 73 74 72 75 63 74 20 49 64 78 45 78 70 72 54   struct IdxExprT
25fc0 72 61 6e 73 20 2a 70 49 64 78 54 72 61 6e 73 3b  rans *pIdxTrans;
25fd0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f             /* Co
25fe0 6e 76 65 72 74 20 69 64 78 65 64 20 65 78 70 72  nvert idxed expr
25ff0 20 74 6f 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20   to column */.  
26000 20 20 45 78 70 72 4c 69 73 74 20 2a 70 47 72 6f    ExprList *pGro
26010 75 70 42 79 3b 20 20 20 20 20 20 20 20 20 20 20  upBy;           
26020 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 47              /* G
26030 52 4f 55 50 20 42 59 20 63 6c 61 75 73 65 20 2a  ROUP BY clause *
26040 2f 0a 20 20 20 20 53 65 6c 65 63 74 20 2a 70 53  /.    Select *pS
26050 65 6c 65 63 74 3b 20 20 20 20 20 20 20 20 20 20  elect;          
26060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26070 2f 2a 20 48 41 56 49 4e 47 20 74 6f 20 57 48 45  /* HAVING to WHE
26080 52 45 20 63 6c 61 75 73 65 20 63 74 78 20 2a 2f  RE clause ctx */
26090 0a 20 20 20 20 73 74 72 75 63 74 20 57 69 6e 64  .    struct Wind
260a0 6f 77 52 65 77 72 69 74 65 20 2a 70 52 65 77 72  owRewrite *pRewr
260b0 69 74 65 3b 20 20 20 20 20 20 20 20 20 20 20 2f  ite;           /
260c0 2a 20 57 69 6e 64 6f 77 20 72 65 77 72 69 74 65  * Window rewrite
260d0 20 63 6f 6e 74 65 78 74 20 2a 2f 0a 20 20 20 20   context */.    
260e0 73 74 72 75 63 74 20 57 68 65 72 65 43 6f 6e 73  struct WhereCons
260f0 74 20 2a 70 43 6f 6e 73 74 3b 20 20 20 20 20 20  t *pConst;      
26100 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57 48 45            /* WHE
26110 52 45 20 63 6c 61 75 73 65 20 63 6f 6e 73 74 61  RE clause consta
26120 6e 74 73 20 2a 2f 0a 20 20 20 20 73 74 72 75 63  nts */.    struc
26130 74 20 52 65 6e 61 6d 65 43 74 78 20 2a 70 52 65  t RenameCtx *pRe
26140 6e 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20 20  name;           
26150 20 20 20 20 20 2f 2a 20 52 45 4e 41 4d 45 20 43       /* RENAME C
26160 4f 4c 55 4d 4e 20 63 6f 6e 74 65 78 74 20 2a 2f  OLUMN context */
26170 0a 20 20 7d 20 75 3b 0a 7d 3b 0a 0a 2f 2a 20 46  .  } u;.};../* F
26180 6f 72 77 61 72 64 20 64 65 63 6c 61 72 61 74 69  orward declarati
26190 6f 6e 73 20 2a 2f 0a 69 6e 74 20 73 71 6c 69 74  ons */.int sqlit
261a0 65 33 57 61 6c 6b 45 78 70 72 28 57 61 6c 6b 65  e3WalkExpr(Walke
261b0 72 2a 2c 20 45 78 70 72 2a 29 3b 0a 69 6e 74 20  r*, Expr*);.int 
261c0 73 71 6c 69 74 65 33 57 61 6c 6b 45 78 70 72 4c  sqlite3WalkExprL
261d0 69 73 74 28 57 61 6c 6b 65 72 2a 2c 20 45 78 70  ist(Walker*, Exp
261e0 72 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c  rList*);.int sql
261f0 69 74 65 33 57 61 6c 6b 53 65 6c 65 63 74 28 57  ite3WalkSelect(W
26200 61 6c 6b 65 72 2a 2c 20 53 65 6c 65 63 74 2a 29  alker*, Select*)
26210 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 61 6c  ;.int sqlite3Wal
26220 6b 53 65 6c 65 63 74 45 78 70 72 28 57 61 6c 6b  kSelectExpr(Walk
26230 65 72 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 69  er*, Select*);.i
26240 6e 74 20 73 71 6c 69 74 65 33 57 61 6c 6b 53 65  nt sqlite3WalkSe
26250 6c 65 63 74 46 72 6f 6d 28 57 61 6c 6b 65 72 2a  lectFrom(Walker*
26260 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 69 6e 74 20  , Select*);.int 
26270 73 71 6c 69 74 65 33 45 78 70 72 57 61 6c 6b 4e  sqlite3ExprWalkN
26280 6f 6f 70 28 57 61 6c 6b 65 72 2a 2c 20 45 78 70  oop(Walker*, Exp
26290 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  r*);.int sqlite3
262a0 53 65 6c 65 63 74 57 61 6c 6b 4e 6f 6f 70 28 57  SelectWalkNoop(W
262b0 61 6c 6b 65 72 2a 2c 20 53 65 6c 65 63 74 2a 29  alker*, Select*)
262c0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 65 6c  ;.int sqlite3Sel
262d0 65 63 74 57 61 6c 6b 46 61 69 6c 28 57 61 6c 6b  ectWalkFail(Walk
262e0 65 72 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 23  er*, Select*);.#
262f0 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42  ifdef SQLITE_DEB
26300 55 47 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53  UG.void sqlite3S
26310 65 6c 65 63 74 57 61 6c 6b 41 73 73 65 72 74 32  electWalkAssert2
26320 28 57 61 6c 6b 65 72 2a 2c 20 53 65 6c 65 63 74  (Walker*, Select
26330 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  *);.#endif../*.*
26340 2a 20 52 65 74 75 72 6e 20 63 6f 64 65 20 66 72  * Return code fr
26350 6f 6d 20 74 68 65 20 70 61 72 73 65 2d 74 72 65  om the parse-tre
26360 65 20 77 61 6c 6b 69 6e 67 20 70 72 69 6d 69 74  e walking primit
26370 69 76 65 73 20 61 6e 64 20 74 68 65 69 72 0a 2a  ives and their.*
26380 2a 20 63 61 6c 6c 62 61 63 6b 73 2e 0a 2a 2f 0a  * callbacks..*/.
26390 23 64 65 66 69 6e 65 20 57 52 43 5f 43 6f 6e 74  #define WRC_Cont
263a0 69 6e 75 65 20 20 20 20 30 20 20 20 2f 2a 20 43  inue    0   /* C
263b0 6f 6e 74 69 6e 75 65 20 64 6f 77 6e 20 69 6e 74  ontinue down int
263c0 6f 20 63 68 69 6c 64 72 65 6e 20 2a 2f 0a 23 64  o children */.#d
263d0 65 66 69 6e 65 20 57 52 43 5f 50 72 75 6e 65 20  efine WRC_Prune 
263e0 20 20 20 20 20 20 31 20 20 20 2f 2a 20 4f 6d 69        1   /* Omi
263f0 74 20 63 68 69 6c 64 72 65 6e 20 62 75 74 20 63  t children but c
26400 6f 6e 74 69 6e 75 65 20 77 61 6c 6b 69 6e 67 20  ontinue walking 
26410 73 69 62 6c 69 6e 67 73 20 2a 2f 0a 23 64 65 66  siblings */.#def
26420 69 6e 65 20 57 52 43 5f 41 62 6f 72 74 20 20 20  ine WRC_Abort   
26430 20 20 20 20 32 20 20 20 2f 2a 20 41 62 61 6e 64      2   /* Aband
26440 6f 6e 20 74 68 65 20 74 72 65 65 20 77 61 6c 6b  on the tree walk
26450 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e   */../*.** An in
26460 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73 20 73  stance of this s
26470 74 72 75 63 74 75 72 65 20 72 65 70 72 65 73 65  tructure represe
26480 6e 74 73 20 61 20 73 65 74 20 6f 66 20 6f 6e 65  nts a set of one
26490 20 6f 72 20 6d 6f 72 65 20 43 54 45 73 0a 2a 2a   or more CTEs.**
264a0 20 28 63 6f 6d 6d 6f 6e 20 74 61 62 6c 65 20 65   (common table e
264b0 78 70 72 65 73 73 69 6f 6e 73 29 20 63 72 65 61  xpressions) crea
264c0 74 65 64 20 62 79 20 61 20 73 69 6e 67 6c 65 20  ted by a single 
264d0 57 49 54 48 20 63 6c 61 75 73 65 2e 0a 2a 2f 0a  WITH clause..*/.
264e0 73 74 72 75 63 74 20 57 69 74 68 20 7b 0a 20 20  struct With {.  
264f0 69 6e 74 20 6e 43 74 65 3b 20 20 20 20 20 20 20  int nCte;       
26500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26510 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 43 54 45  /* Number of CTE
26520 73 20 69 6e 20 74 68 65 20 57 49 54 48 20 63 6c  s in the WITH cl
26530 61 75 73 65 20 2a 2f 0a 20 20 57 69 74 68 20 2a  ause */.  With *
26540 70 4f 75 74 65 72 3b 20 20 20 20 20 20 20 20 20  pOuter;         
26550 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6e            /* Con
26560 74 61 69 6e 69 6e 67 20 57 49 54 48 20 63 6c 61  taining WITH cla
26570 75 73 65 2c 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a  use, or NULL */.
26580 20 20 73 74 72 75 63 74 20 43 74 65 20 7b 20 20    struct Cte {  
26590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
265a0 20 20 2f 2a 20 46 6f 72 20 65 61 63 68 20 43 54    /* For each CT
265b0 45 20 69 6e 20 74 68 65 20 57 49 54 48 20 63 6c  E in the WITH cl
265c0 61 75 73 65 2e 2e 2e 2e 20 2a 2f 0a 20 20 20 20  ause.... */.    
265d0 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20  char *zName;    
265e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
265f0 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 69 73 20  /* Name of this 
26600 43 54 45 20 2a 2f 0a 20 20 20 20 45 78 70 72 4c  CTE */.    ExprL
26610 69 73 74 20 2a 70 43 6f 6c 73 3b 20 20 20 20 20  ist *pCols;     
26620 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 69             /* Li
26630 73 74 20 6f 66 20 65 78 70 6c 69 63 69 74 20 63  st of explicit c
26640 6f 6c 75 6d 6e 20 6e 61 6d 65 73 2c 20 6f 72 20  olumn names, or 
26650 4e 55 4c 4c 20 2a 2f 0a 20 20 20 20 53 65 6c 65  NULL */.    Sele
26660 63 74 20 2a 70 53 65 6c 65 63 74 3b 20 20 20 20  ct *pSelect;    
26670 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
26680 68 65 20 64 65 66 69 6e 69 74 69 6f 6e 20 6f 66  he definition of
26690 20 74 68 69 73 20 43 54 45 20 2a 2f 0a 20 20 20   this CTE */.   
266a0 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 43 74   const char *zCt
266b0 65 45 72 72 3b 20 20 20 20 20 20 20 20 20 20 20  eErr;           
266c0 20 2f 2a 20 45 72 72 6f 72 20 6d 65 73 73 61 67   /* Error messag
266d0 65 20 66 6f 72 20 63 69 72 63 75 6c 61 72 20 72  e for circular r
266e0 65 66 65 72 65 6e 63 65 73 20 2a 2f 0a 20 20 7d  eferences */.  }
266f0 20 61 5b 31 5d 3b 0a 7d 3b 0a 0a 23 69 66 64 65   a[1];.};..#ifde
26700 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 2f  f SQLITE_DEBUG./
26710 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65  *.** An instance
26720 20 6f 66 20 74 68 65 20 54 72 65 65 56 69 65 77   of the TreeView
26730 20 6f 62 6a 65 63 74 20 69 73 20 75 73 65 64 20   object is used 
26740 66 6f 72 20 70 72 69 6e 74 69 6e 67 20 74 68 65  for printing the
26750 20 63 6f 6e 74 65 6e 74 20 6f 66 0a 2a 2a 20 64   content of.** d
26760 61 74 61 20 73 74 72 75 63 74 75 72 65 73 20 6f  ata structures o
26770 6e 20 73 71 6c 69 74 65 33 44 65 62 75 67 50 72  n sqlite3DebugPr
26780 69 6e 74 66 28 29 20 75 73 69 6e 67 20 61 20 74  intf() using a t
26790 72 65 65 2d 6c 69 6b 65 20 76 69 65 77 2e 0a 2a  ree-like view..*
267a0 2f 0a 73 74 72 75 63 74 20 54 72 65 65 56 69 65  /.struct TreeVie
267b0 77 20 7b 0a 20 20 69 6e 74 20 69 4c 65 76 65 6c  w {.  int iLevel
267c0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
267d0 20 57 68 69 63 68 20 6c 65 76 65 6c 20 6f 66 20   Which level of 
267e0 74 68 65 20 74 72 65 65 20 77 65 20 61 72 65 20  the tree we are 
267f0 6f 6e 20 2a 2f 0a 20 20 75 38 20 20 62 4c 69 6e  on */.  u8  bLin
26800 65 5b 31 30 30 5d 3b 20 20 20 20 20 20 20 20 20  e[100];         
26810 2f 2a 20 44 72 61 77 20 76 65 72 74 69 63 61 6c  /* Draw vertical
26820 20 69 6e 20 63 6f 6c 75 6d 6e 20 69 20 69 66 20   in column i if 
26830 62 4c 69 6e 65 5b 69 5d 20 69 73 20 74 72 75 65  bLine[i] is true
26840 20 2a 2f 0a 7d 3b 0a 23 65 6e 64 69 66 20 2f 2a   */.};.#endif /*
26850 20 53 51 4c 49 54 45 5f 44 45 42 55 47 20 2a 2f   SQLITE_DEBUG */
26860 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 6f 62 6a  ../*.** This obj
26870 65 63 74 20 69 73 20 75 73 65 64 20 69 6e 20 76  ect is used in v
26880 61 72 69 6f 75 73 20 77 61 79 73 2c 20 6d 6f 73  arious ways, mos
26890 74 20 28 62 75 74 20 6e 6f 74 20 61 6c 6c 29 20  t (but not all) 
268a0 72 65 6c 61 74 65 64 20 74 6f 20 77 69 6e 64 6f  related to windo
268b0 77 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 73 2e 0a  w.** functions..
268c0 2a 2a 0a 2a 2a 20 20 20 28 31 29 20 41 20 73 69  **.**   (1) A si
268d0 6e 67 6c 65 20 69 6e 73 74 61 6e 63 65 20 6f 66  ngle instance of
268e0 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65 20   this structure 
268f0 69 73 20 61 74 74 61 63 68 65 64 20 74 6f 20 74  is attached to t
26900 68 65 0a 2a 2a 20 20 20 20 20 20 20 74 68 65 20  he.**       the 
26910 45 78 70 72 2e 79 2e 70 57 69 6e 20 66 69 65 6c  Expr.y.pWin fiel
26920 64 20 66 6f 72 20 65 61 63 68 20 77 69 6e 64 6f  d for each windo
26930 77 20 66 75 6e 63 74 69 6f 6e 20 69 6e 20 61 6e  w function in an
26940 20 65 78 70 72 65 73 73 69 6f 6e 20 74 72 65 65   expression tree
26950 2e 0a 2a 2a 20 20 20 20 20 20 20 54 68 69 73 20  ..**       This 
26960 6f 62 6a 65 63 74 20 68 6f 6c 64 73 20 74 68 65  object holds the
26970 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 63 6f 6e   information con
26980 74 61 69 6e 65 64 20 69 6e 20 74 68 65 20 4f 56  tained in the OV
26990 45 52 20 63 6c 61 75 73 65 2c 0a 2a 2a 20 20 20  ER clause,.**   
269a0 20 20 20 20 70 6c 75 73 20 61 64 64 69 74 69 6f      plus additio
269b0 6e 61 6c 20 66 69 65 6c 64 73 20 75 73 65 64 20  nal fields used 
269c0 64 75 72 69 6e 67 20 63 6f 64 65 20 67 65 6e 65  during code gene
269d0 72 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 20 20  ration..**.**   
269e0 28 32 29 20 41 6c 6c 20 77 69 6e 64 6f 77 20 66  (2) All window f
269f0 75 6e 63 74 69 6f 6e 73 20 69 6e 20 61 20 73 69  unctions in a si
26a00 6e 67 6c 65 20 53 45 4c 45 43 54 20 66 6f 72 6d  ngle SELECT form
26a10 20 61 20 6c 69 6e 6b 65 64 2d 6c 69 73 74 0a 2a   a linked-list.*
26a20 2a 20 20 20 20 20 20 20 61 74 74 61 63 68 65 64  *       attached
26a30 20 74 6f 20 53 65 6c 65 63 74 2e 70 57 69 6e 2e   to Select.pWin.
26a40 20 20 54 68 65 20 57 69 6e 64 6f 77 2e 70 46 75    The Window.pFu
26a50 6e 63 20 61 6e 64 20 57 69 6e 64 6f 77 2e 70 45  nc and Window.pE
26a60 78 70 72 0a 2a 2a 20 20 20 20 20 20 20 66 69 65  xpr.**       fie
26a70 6c 64 73 20 70 6f 69 6e 74 20 62 61 63 6b 20 74  lds point back t
26a80 6f 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e  o the expression
26a90 20 74 68 61 74 20 69 73 20 74 68 65 20 77 69 6e   that is the win
26aa0 64 6f 77 20 66 75 6e 63 74 69 6f 6e 2e 0a 2a 2a  dow function..**
26ab0 0a 2a 2a 20 20 20 28 33 29 20 54 68 65 20 74 65  .**   (3) The te
26ac0 72 6d 73 20 6f 66 20 74 68 65 20 57 49 4e 44 4f  rms of the WINDO
26ad0 57 20 63 6c 61 75 73 65 20 6f 66 20 61 20 53 45  W clause of a SE
26ae0 4c 45 43 54 20 61 72 65 20 69 6e 73 74 61 6e 63  LECT are instanc
26af0 65 73 20 6f 66 20 74 68 69 73 0a 2a 2a 20 20 20  es of this.**   
26b00 20 20 20 20 6f 62 6a 65 63 74 20 6f 6e 20 61 20      object on a 
26b10 6c 69 6e 6b 65 64 20 6c 69 73 74 20 61 74 74 61  linked list atta
26b20 63 68 65 64 20 74 6f 20 53 65 6c 65 63 74 2e 70  ched to Select.p
26b30 57 69 6e 44 65 66 6e 2e 0a 2a 2a 0a 2a 2a 20 20  WinDefn..**.**  
26b40 20 28 34 29 20 46 6f 72 20 61 6e 20 61 67 67 72   (4) For an aggr
26b50 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 20 77  egate function w
26b60 69 74 68 20 61 20 46 49 4c 54 45 52 20 63 6c 61  ith a FILTER cla
26b70 75 73 65 2c 20 61 6e 20 69 6e 73 74 61 6e 63 65  use, an instance
26b80 0a 2a 2a 20 20 20 20 20 20 20 6f 66 20 74 68 69  .**       of thi
26b90 73 20 6f 62 6a 65 63 74 20 69 73 20 73 74 6f 72  s object is stor
26ba0 65 64 20 69 6e 20 45 78 70 72 2e 79 2e 70 57 69  ed in Expr.y.pWi
26bb0 6e 20 77 69 74 68 20 65 46 72 6d 54 79 70 65 20  n with eFrmType 
26bc0 73 65 74 20 74 6f 0a 2a 2a 20 20 20 20 20 20 20  set to.**       
26bd0 54 4b 5f 46 49 4c 54 45 52 2e 20 49 6e 20 74 68  TK_FILTER. In th
26be0 69 73 20 63 61 73 65 20 74 68 65 20 6f 6e 6c 79  is case the only
26bf0 20 66 69 65 6c 64 20 75 73 65 64 20 69 73 20 57   field used is W
26c00 69 6e 64 6f 77 2e 70 46 69 6c 74 65 72 2e 0a 2a  indow.pFilter..*
26c10 2a 0a 2a 2a 20 54 68 65 20 75 73 65 73 20 28 31  *.** The uses (1
26c20 29 20 61 6e 64 20 28 32 29 20 61 72 65 20 72 65  ) and (2) are re
26c30 61 6c 6c 79 20 74 68 65 20 73 61 6d 65 20 57 69  ally the same Wi
26c40 6e 64 6f 77 20 6f 62 6a 65 63 74 20 74 68 61 74  ndow object that
26c50 20 6a 75 73 74 20 68 61 70 70 65 6e 73 0a 2a 2a   just happens.**
26c60 20 74 6f 20 62 65 20 61 63 63 65 73 73 69 62 6c   to be accessibl
26c70 65 20 69 6e 20 74 77 6f 20 64 69 66 66 65 72 65  e in two differe
26c80 6e 74 20 77 61 79 73 2e 20 20 55 73 65 20 63 61  nt ways.  Use ca
26c90 73 65 20 28 33 29 20 61 72 65 20 73 65 70 61 72  se (3) are separ
26ca0 61 74 65 20 6f 62 6a 65 63 74 73 2e 0a 2a 2f 0a  ate objects..*/.
26cb0 73 74 72 75 63 74 20 57 69 6e 64 6f 77 20 7b 0a  struct Window {.
26cc0 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20    char *zName;  
26cd0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d            /* Nam
26ce0 65 20 6f 66 20 77 69 6e 64 6f 77 20 28 6d 61 79  e of window (may
26cf0 20 62 65 20 4e 55 4c 4c 29 20 2a 2f 0a 20 20 63   be NULL) */.  c
26d00 68 61 72 20 2a 7a 42 61 73 65 3b 20 20 20 20 20  har *zBase;     
26d10 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f         /* Name o
26d20 66 20 62 61 73 65 20 77 69 6e 64 6f 77 20 66 6f  f base window fo
26d30 72 20 63 68 61 69 6e 69 6e 67 20 28 6d 61 79 20  r chaining (may 
26d40 62 65 20 4e 55 4c 4c 29 20 2a 2f 0a 20 20 45 78  be NULL) */.  Ex
26d50 70 72 4c 69 73 74 20 2a 70 50 61 72 74 69 74 69  prList *pPartiti
26d60 6f 6e 3b 20 20 20 2f 2a 20 50 41 52 54 49 54 49  on;   /* PARTITI
26d70 4f 4e 20 42 59 20 63 6c 61 75 73 65 20 2a 2f 0a  ON BY clause */.
26d80 20 20 45 78 70 72 4c 69 73 74 20 2a 70 4f 72 64    ExprList *pOrd
26d90 65 72 42 79 3b 20 20 20 20 20 2f 2a 20 4f 52 44  erBy;     /* ORD
26da0 45 52 20 42 59 20 63 6c 61 75 73 65 20 2a 2f 0a  ER BY clause */.
26db0 20 20 75 38 20 65 46 72 6d 54 79 70 65 3b 20 20    u8 eFrmType;  
26dc0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 4b 5f            /* TK_
26dd0 52 41 4e 47 45 2c 20 54 4b 5f 47 52 4f 55 50 53  RANGE, TK_GROUPS
26de0 2c 20 54 4b 5f 52 4f 57 53 2c 20 6f 72 20 30 20  , TK_ROWS, or 0 
26df0 2a 2f 0a 20 20 75 38 20 65 53 74 61 72 74 3b 20  */.  u8 eStart; 
26e00 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
26e10 55 4e 42 4f 55 4e 44 45 44 2c 20 43 55 52 52 45  UNBOUNDED, CURRE
26e20 4e 54 2c 20 50 52 45 43 45 44 49 4e 47 20 6f 72  NT, PRECEDING or
26e30 20 46 4f 4c 4c 4f 57 49 4e 47 20 2a 2f 0a 20 20   FOLLOWING */.  
26e40 75 38 20 65 45 6e 64 3b 20 20 20 20 20 20 20 20  u8 eEnd;        
26e50 20 20 20 20 20 20 20 20 2f 2a 20 55 4e 42 4f 55          /* UNBOU
26e60 4e 44 45 44 2c 20 43 55 52 52 45 4e 54 2c 20 50  NDED, CURRENT, P
26e70 52 45 43 45 44 49 4e 47 20 6f 72 20 46 4f 4c 4c  RECEDING or FOLL
26e80 4f 57 49 4e 47 20 2a 2f 0a 20 20 75 38 20 62 49  OWING */.  u8 bI
26e90 6d 70 6c 69 63 69 74 46 72 61 6d 65 3b 20 20 20  mplicitFrame;   
26ea0 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 66 72     /* True if fr
26eb0 61 6d 65 20 77 61 73 20 69 6d 70 6c 69 63 69 74  ame was implicit
26ec0 6c 79 20 73 70 65 63 69 66 69 65 64 20 2a 2f 0a  ly specified */.
26ed0 20 20 75 38 20 65 45 78 63 6c 75 64 65 3b 20 20    u8 eExclude;  
26ee0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 4b 5f            /* TK_
26ef0 4e 4f 2c 20 54 4b 5f 43 55 52 52 45 4e 54 2c 20  NO, TK_CURRENT, 
26f00 54 4b 5f 54 49 45 53 2c 20 54 4b 5f 47 52 4f 55  TK_TIES, TK_GROU
26f10 50 2c 20 6f 72 20 30 20 2a 2f 0a 20 20 45 78 70  P, or 0 */.  Exp
26f20 72 20 2a 70 53 74 61 72 74 3b 20 20 20 20 20 20  r *pStart;      
26f30 20 20 20 20 20 2f 2a 20 45 78 70 72 65 73 73 69       /* Expressi
26f40 6f 6e 20 66 6f 72 20 22 3c 65 78 70 72 3e 20 50  on for "<expr> P
26f50 52 45 43 45 44 49 4e 47 22 20 2a 2f 0a 20 20 45  RECEDING" */.  E
26f60 78 70 72 20 2a 70 45 6e 64 3b 20 20 20 20 20 20  xpr *pEnd;      
26f70 20 20 20 20 20 20 20 2f 2a 20 45 78 70 72 65 73         /* Expres
26f80 73 69 6f 6e 20 66 6f 72 20 22 3c 65 78 70 72 3e  sion for "<expr>
26f90 20 46 4f 4c 4c 4f 57 49 4e 47 22 20 2a 2f 0a 20   FOLLOWING" */. 
26fa0 20 57 69 6e 64 6f 77 20 2a 2a 70 70 54 68 69 73   Window **ppThis
26fb0 3b 20 20 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e  ;        /* Poin
26fc0 74 65 72 20 74 6f 20 74 68 69 73 20 6f 62 6a 65  ter to this obje
26fd0 63 74 20 69 6e 20 53 65 6c 65 63 74 2e 70 57 69  ct in Select.pWi
26fe0 6e 20 6c 69 73 74 20 2a 2f 0a 20 20 57 69 6e 64  n list */.  Wind
26ff0 6f 77 20 2a 70 4e 65 78 74 57 69 6e 3b 20 20 20  ow *pNextWin;   
27000 20 20 20 20 2f 2a 20 4e 65 78 74 20 77 69 6e 64      /* Next wind
27010 6f 77 20 66 75 6e 63 74 69 6f 6e 20 62 65 6c 6f  ow function belo
27020 6e 67 69 6e 67 20 74 6f 20 74 68 69 73 20 53 45  nging to this SE
27030 4c 45 43 54 20 2a 2f 0a 20 20 45 78 70 72 20 2a  LECT */.  Expr *
27040 70 46 69 6c 74 65 72 3b 20 20 20 20 20 20 20 20  pFilter;        
27050 20 20 2f 2a 20 54 68 65 20 46 49 4c 54 45 52 20    /* The FILTER 
27060 65 78 70 72 65 73 73 69 6f 6e 20 2a 2f 0a 20 20  expression */.  
27070 46 75 6e 63 44 65 66 20 2a 70 46 75 6e 63 3b 20  FuncDef *pFunc; 
27080 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 66          /* The f
27090 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 69 6e 74  unction */.  int
270a0 20 69 45 70 68 43 73 72 3b 20 20 20 20 20 20 20   iEphCsr;       
270b0 20 20 20 20 20 2f 2a 20 50 61 72 74 69 74 69 6f       /* Partitio
270c0 6e 20 62 75 66 66 65 72 20 6f 72 20 50 65 65 72  n buffer or Peer
270d0 20 62 75 66 66 65 72 20 2a 2f 0a 20 20 69 6e 74   buffer */.  int
270e0 20 72 65 67 41 63 63 75 6d 3b 0a 20 20 69 6e 74   regAccum;.  int
270f0 20 72 65 67 52 65 73 75 6c 74 3b 0a 20 20 69 6e   regResult;.  in
27100 74 20 63 73 72 41 70 70 3b 20 20 20 20 20 20 20  t csrApp;       
27110 20 20 20 20 20 20 2f 2a 20 46 75 6e 63 74 69 6f        /* Functio
27120 6e 20 63 75 72 73 6f 72 20 28 75 73 65 64 20 62  n cursor (used b
27130 79 20 6d 69 6e 2f 6d 61 78 29 20 2a 2f 0a 20 20  y min/max) */.  
27140 69 6e 74 20 72 65 67 41 70 70 3b 20 20 20 20 20  int regApp;     
27150 20 20 20 20 20 20 20 20 2f 2a 20 46 75 6e 63 74          /* Funct
27160 69 6f 6e 20 72 65 67 69 73 74 65 72 20 28 61 6c  ion register (al
27170 73 6f 20 75 73 65 64 20 62 79 20 6d 69 6e 2f 6d  so used by min/m
27180 61 78 29 20 2a 2f 0a 20 20 69 6e 74 20 72 65 67  ax) */.  int reg
27190 50 61 72 74 3b 20 20 20 20 20 20 20 20 20 20 20  Part;           
271a0 20 2f 2a 20 41 72 72 61 79 20 6f 66 20 72 65 67   /* Array of reg
271b0 69 73 74 65 72 73 20 66 6f 72 20 50 41 52 54 49  isters for PARTI
271c0 54 49 4f 4e 20 42 59 20 76 61 6c 75 65 73 20 2a  TION BY values *
271d0 2f 0a 20 20 45 78 70 72 20 2a 70 4f 77 6e 65 72  /.  Expr *pOwner
271e0 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 45  ;           /* E
271f0 78 70 72 65 73 73 69 6f 6e 20 6f 62 6a 65 63 74  xpression object
27200 20 74 68 69 73 20 77 69 6e 64 6f 77 20 69 73 20   this window is 
27210 61 74 74 61 63 68 65 64 20 74 6f 20 2a 2f 0a 20  attached to */. 
27220 20 69 6e 74 20 6e 42 75 66 66 65 72 43 6f 6c 3b   int nBufferCol;
27230 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
27240 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e  er of columns in
27250 20 62 75 66 66 65 72 20 74 61 62 6c 65 20 2a 2f   buffer table */
27260 0a 20 20 69 6e 74 20 69 41 72 67 43 6f 6c 3b 20  .  int iArgCol; 
27270 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 66             /* Of
27280 66 73 65 74 20 6f 66 20 66 69 72 73 74 20 61 72  fset of first ar
27290 67 75 6d 65 6e 74 20 66 6f 72 20 74 68 69 73 20  gument for this 
272a0 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 69 6e  function */.  in
272b0 74 20 72 65 67 4f 6e 65 3b 20 20 20 20 20 20 20  t regOne;       
272c0 20 20 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65        /* Registe
272d0 72 20 63 6f 6e 74 61 69 6e 69 6e 67 20 63 6f 6e  r containing con
272e0 73 74 61 6e 74 20 76 61 6c 75 65 20 31 20 2a 2f  stant value 1 */
272f0 0a 20 20 69 6e 74 20 72 65 67 53 74 61 72 74 52  .  int regStartR
27300 6f 77 69 64 3b 0a 20 20 69 6e 74 20 72 65 67 45  owid;.  int regE
27310 6e 64 52 6f 77 69 64 3b 0a 7d 3b 0a 0a 23 69 66  ndRowid;.};..#if
27320 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
27330 5f 57 49 4e 44 4f 57 46 55 4e 43 0a 76 6f 69 64  _WINDOWFUNC.void
27340 20 73 71 6c 69 74 65 33 57 69 6e 64 6f 77 44 65   sqlite3WindowDe
27350 6c 65 74 65 28 73 71 6c 69 74 65 33 2a 2c 20 57  lete(sqlite3*, W
27360 69 6e 64 6f 77 2a 29 3b 0a 76 6f 69 64 20 73 71  indow*);.void sq
27370 6c 69 74 65 33 57 69 6e 64 6f 77 55 6e 6c 69 6e  lite3WindowUnlin
27380 6b 46 72 6f 6d 53 65 6c 65 63 74 28 57 69 6e 64  kFromSelect(Wind
27390 6f 77 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  ow*);.void sqlit
273a0 65 33 57 69 6e 64 6f 77 4c 69 73 74 44 65 6c 65  e3WindowListDele
273b0 74 65 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20  te(sqlite3 *db, 
273c0 57 69 6e 64 6f 77 20 2a 70 29 3b 0a 57 69 6e 64  Window *p);.Wind
273d0 6f 77 20 2a 73 71 6c 69 74 65 33 57 69 6e 64 6f  ow *sqlite3Windo
273e0 77 41 6c 6c 6f 63 28 50 61 72 73 65 2a 2c 20 69  wAlloc(Parse*, i
273f0 6e 74 2c 20 69 6e 74 2c 20 45 78 70 72 2a 2c 20  nt, int, Expr*, 
27400 69 6e 74 20 2c 20 45 78 70 72 2a 2c 20 75 38 29  int , Expr*, u8)
27410 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 57 69  ;.void sqlite3Wi
27420 6e 64 6f 77 41 74 74 61 63 68 28 50 61 72 73 65  ndowAttach(Parse
27430 2a 2c 20 45 78 70 72 2a 2c 20 57 69 6e 64 6f 77  *, Expr*, Window
27440 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57  *);.int sqlite3W
27450 69 6e 64 6f 77 43 6f 6d 70 61 72 65 28 50 61 72  indowCompare(Par
27460 73 65 2a 2c 20 57 69 6e 64 6f 77 2a 2c 20 57 69  se*, Window*, Wi
27470 6e 64 6f 77 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69  ndow*, int);.voi
27480 64 20 73 71 6c 69 74 65 33 57 69 6e 64 6f 77 43  d sqlite3WindowC
27490 6f 64 65 49 6e 69 74 28 50 61 72 73 65 2a 2c 20  odeInit(Parse*, 
274a0 57 69 6e 64 6f 77 2a 29 3b 0a 76 6f 69 64 20 73  Window*);.void s
274b0 71 6c 69 74 65 33 57 69 6e 64 6f 77 43 6f 64 65  qlite3WindowCode
274c0 53 74 65 70 28 50 61 72 73 65 2a 2c 20 53 65 6c  Step(Parse*, Sel
274d0 65 63 74 2a 2c 20 57 68 65 72 65 49 6e 66 6f 2a  ect*, WhereInfo*
274e0 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 69 6e 74  , int, int);.int
274f0 20 73 71 6c 69 74 65 33 57 69 6e 64 6f 77 52 65   sqlite3WindowRe
27500 77 72 69 74 65 28 50 61 72 73 65 2a 2c 20 53 65  write(Parse*, Se
27510 6c 65 63 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  lect*);.int sqli
27520 74 65 33 45 78 70 61 6e 64 53 75 62 71 75 65 72  te3ExpandSubquer
27530 79 28 50 61 72 73 65 2a 2c 20 73 74 72 75 63 74  y(Parse*, struct
27540 20 53 72 63 4c 69 73 74 5f 69 74 65 6d 2a 29 3b   SrcList_item*);
27550 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 57 69 6e  .void sqlite3Win
27560 64 6f 77 55 70 64 61 74 65 28 50 61 72 73 65 2a  dowUpdate(Parse*
27570 2c 20 57 69 6e 64 6f 77 2a 2c 20 57 69 6e 64 6f  , Window*, Windo
27580 77 2a 2c 20 46 75 6e 63 44 65 66 2a 29 3b 0a 57  w*, FuncDef*);.W
27590 69 6e 64 6f 77 20 2a 73 71 6c 69 74 65 33 57 69  indow *sqlite3Wi
275a0 6e 64 6f 77 44 75 70 28 73 71 6c 69 74 65 33 20  ndowDup(sqlite3 
275b0 2a 64 62 2c 20 45 78 70 72 20 2a 70 4f 77 6e 65  *db, Expr *pOwne
275c0 72 2c 20 57 69 6e 64 6f 77 20 2a 70 29 3b 0a 57  r, Window *p);.W
275d0 69 6e 64 6f 77 20 2a 73 71 6c 69 74 65 33 57 69  indow *sqlite3Wi
275e0 6e 64 6f 77 4c 69 73 74 44 75 70 28 73 71 6c 69  ndowListDup(sqli
275f0 74 65 33 20 2a 64 62 2c 20 57 69 6e 64 6f 77 20  te3 *db, Window 
27600 2a 70 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  *p);.void sqlite
27610 33 57 69 6e 64 6f 77 46 75 6e 63 74 69 6f 6e 73  3WindowFunctions
27620 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20 73 71 6c  (void);.void sql
27630 69 74 65 33 57 69 6e 64 6f 77 43 68 61 69 6e 28  ite3WindowChain(
27640 50 61 72 73 65 2a 2c 20 57 69 6e 64 6f 77 2a 2c  Parse*, Window*,
27650 20 57 69 6e 64 6f 77 2a 29 3b 0a 57 69 6e 64 6f   Window*);.Windo
27660 77 20 2a 73 71 6c 69 74 65 33 57 69 6e 64 6f 77  w *sqlite3Window
27670 41 73 73 65 6d 62 6c 65 28 50 61 72 73 65 2a 2c  Assemble(Parse*,
27680 20 57 69 6e 64 6f 77 2a 2c 20 45 78 70 72 4c 69   Window*, ExprLi
27690 73 74 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20  st*, ExprList*, 
276a0 54 6f 6b 65 6e 2a 29 3b 0a 23 65 6c 73 65 0a 23  Token*);.#else.#
276b0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 57   define sqlite3W
276c0 69 6e 64 6f 77 44 65 6c 65 74 65 28 61 2c 62 29  indowDelete(a,b)
276d0 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
276e0 33 57 69 6e 64 6f 77 46 75 6e 63 74 69 6f 6e 73  3WindowFunctions
276f0 28 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  ().# define sqli
27700 74 65 33 57 69 6e 64 6f 77 41 74 74 61 63 68 28  te3WindowAttach(
27710 61 2c 62 2c 63 29 0a 23 65 6e 64 69 66 0a 0a 2f  a,b,c).#endif../
27720 2a 0a 2a 2a 20 41 73 73 75 6d 69 6e 67 20 7a 49  *.** Assuming zI
27730 6e 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20  n points to the 
27740 66 69 72 73 74 20 62 79 74 65 20 6f 66 20 61 20  first byte of a 
27750 55 54 46 2d 38 20 63 68 61 72 61 63 74 65 72 2c  UTF-8 character,
27760 0a 2a 2a 20 61 64 76 61 6e 63 65 20 7a 49 6e 20  .** advance zIn 
27770 74 6f 20 70 6f 69 6e 74 20 74 6f 20 74 68 65 20  to point to the 
27780 66 69 72 73 74 20 62 79 74 65 20 6f 66 20 74 68  first byte of th
27790 65 20 6e 65 78 74 20 55 54 46 2d 38 20 63 68 61  e next UTF-8 cha
277a0 72 61 63 74 65 72 2e 0a 2a 2f 0a 23 64 65 66 69  racter..*/.#defi
277b0 6e 65 20 53 51 4c 49 54 45 5f 53 4b 49 50 5f 55  ne SQLITE_SKIP_U
277c0 54 46 38 28 7a 49 6e 29 20 7b 20 20 20 20 20 20  TF8(zIn) {      
277d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
277e0 20 20 5c 0a 20 20 69 66 28 20 28 2a 28 7a 49 6e    \.  if( (*(zIn
277f0 2b 2b 29 29 3e 3d 30 78 63 30 20 29 7b 20 20 20  ++))>=0xc0 ){   
27800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27810 20 20 20 20 20 20 20 20 20 20 20 5c 0a 20 20 20             \.   
27820 20 77 68 69 6c 65 28 20 28 2a 7a 49 6e 20 26 20   while( (*zIn & 
27830 30 78 63 30 29 3d 3d 30 78 38 30 20 29 7b 20 7a  0xc0)==0x80 ){ z
27840 49 6e 2b 2b 3b 20 7d 20 20 20 20 20 20 20 20 20  In++; }         
27850 20 20 20 20 5c 0a 20 20 7d 20 20 20 20 20 20 20      \.  }       
27860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27880 20 20 20 20 20 20 20 20 20 20 20 20 20 5c 0a 7d               \.}
27890 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 53 51 4c 49  ../*.** The SQLI
278a0 54 45 5f 2a 5f 42 4b 50 54 20 6d 61 63 72 6f 73  TE_*_BKPT macros
278b0 20 61 72 65 20 73 75 62 73 74 69 74 75 74 65 73   are substitutes
278c0 20 66 6f 72 20 74 68 65 20 65 72 72 6f 72 20 63   for the error c
278d0 6f 64 65 73 20 77 69 74 68 0a 2a 2a 20 74 68 65  odes with.** the
278e0 20 73 61 6d 65 20 6e 61 6d 65 20 62 75 74 20 77   same name but w
278f0 69 74 68 6f 75 74 20 74 68 65 20 5f 42 4b 50 54  ithout the _BKPT
27900 20 73 75 66 66 69 78 2e 20 20 54 68 65 73 65 20   suffix.  These 
27910 6d 61 63 72 6f 73 20 69 6e 76 6f 6b 65 0a 2a 2a  macros invoke.**
27920 20 72 6f 75 74 69 6e 65 73 20 74 68 61 74 20 72   routines that r
27930 65 70 6f 72 74 20 74 68 65 20 6c 69 6e 65 2d 6e  eport the line-n
27940 75 6d 62 65 72 20 6f 6e 20 77 68 69 63 68 20 74  umber on which t
27950 68 65 20 65 72 72 6f 72 20 6f 72 69 67 69 6e 61  he error origina
27960 74 65 64 0a 2a 2a 20 75 73 69 6e 67 20 73 71 6c  ted.** using sql
27970 69 74 65 33 5f 6c 6f 67 28 29 2e 20 20 54 68 65  ite3_log().  The
27980 20 72 6f 75 74 69 6e 65 73 20 61 6c 73 6f 20 70   routines also p
27990 72 6f 76 69 64 65 20 61 20 63 6f 6e 76 65 6e 69  rovide a conveni
279a0 65 6e 74 20 70 6c 61 63 65 0a 2a 2a 20 74 6f 20  ent place.** to 
279b0 73 65 74 20 61 20 64 65 62 75 67 67 65 72 20 62  set a debugger b
279c0 72 65 61 6b 70 6f 69 6e 74 2e 0a 2a 2f 0a 69 6e  reakpoint..*/.in
279d0 74 20 73 71 6c 69 74 65 33 52 65 70 6f 72 74 45  t sqlite3ReportE
279e0 72 72 6f 72 28 69 6e 74 20 69 45 72 72 2c 20 69  rror(int iErr, i
279f0 6e 74 20 6c 69 6e 65 6e 6f 2c 20 63 6f 6e 73 74  nt lineno, const
27a00 20 63 68 61 72 20 2a 7a 54 79 70 65 29 3b 0a 69   char *zType);.i
27a10 6e 74 20 73 71 6c 69 74 65 33 43 6f 72 72 75 70  nt sqlite3Corrup
27a20 74 45 72 72 6f 72 28 69 6e 74 29 3b 0a 69 6e 74  tError(int);.int
27a30 20 73 71 6c 69 74 65 33 4d 69 73 75 73 65 45 72   sqlite3MisuseEr
27a40 72 6f 72 28 69 6e 74 29 3b 0a 69 6e 74 20 73 71  ror(int);.int sq
27a50 6c 69 74 65 33 43 61 6e 74 6f 70 65 6e 45 72 72  lite3CantopenErr
27a60 6f 72 28 69 6e 74 29 3b 0a 23 64 65 66 69 6e 65  or(int);.#define
27a70 20 53 51 4c 49 54 45 5f 43 4f 52 52 55 50 54 5f   SQLITE_CORRUPT_
27a80 42 4b 50 54 20 73 71 6c 69 74 65 33 43 6f 72 72  BKPT sqlite3Corr
27a90 75 70 74 45 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f  uptError(__LINE_
27aa0 5f 29 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  _).#define SQLIT
27ab0 45 5f 4d 49 53 55 53 45 5f 42 4b 50 54 20 73 71  E_MISUSE_BKPT sq
27ac0 6c 69 74 65 33 4d 69 73 75 73 65 45 72 72 6f 72  lite3MisuseError
27ad0 28 5f 5f 4c 49 4e 45 5f 5f 29 0a 23 64 65 66 69  (__LINE__).#defi
27ae0 6e 65 20 53 51 4c 49 54 45 5f 43 41 4e 54 4f 50  ne SQLITE_CANTOP
27af0 45 4e 5f 42 4b 50 54 20 73 71 6c 69 74 65 33 43  EN_BKPT sqlite3C
27b00 61 6e 74 6f 70 65 6e 45 72 72 6f 72 28 5f 5f 4c  antopenError(__L
27b10 49 4e 45 5f 5f 29 0a 23 69 66 64 65 66 20 53 51  INE__).#ifdef SQ
27b20 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 69 6e 74  LITE_DEBUG.  int
27b30 20 73 71 6c 69 74 65 33 4e 6f 6d 65 6d 45 72 72   sqlite3NomemErr
27b40 6f 72 28 69 6e 74 29 3b 0a 20 20 69 6e 74 20 73  or(int);.  int s
27b50 71 6c 69 74 65 33 49 6f 65 72 72 6e 6f 6d 65 6d  qlite3Ioerrnomem
27b60 45 72 72 6f 72 28 69 6e 74 29 3b 0a 20 20 69 6e  Error(int);.  in
27b70 74 20 73 71 6c 69 74 65 33 43 6f 72 72 75 70 74  t sqlite3Corrupt
27b80 50 67 6e 6f 45 72 72 6f 72 28 69 6e 74 2c 50 67  PgnoError(int,Pg
27b90 6e 6f 29 3b 0a 23 20 64 65 66 69 6e 65 20 53 51  no);.# define SQ
27ba0 4c 49 54 45 5f 4e 4f 4d 45 4d 5f 42 4b 50 54 20  LITE_NOMEM_BKPT 
27bb0 73 71 6c 69 74 65 33 4e 6f 6d 65 6d 45 72 72 6f  sqlite3NomemErro
27bc0 72 28 5f 5f 4c 49 4e 45 5f 5f 29 0a 23 20 64 65  r(__LINE__).# de
27bd0 66 69 6e 65 20 53 51 4c 49 54 45 5f 49 4f 45 52  fine SQLITE_IOER
27be0 52 5f 4e 4f 4d 45 4d 5f 42 4b 50 54 20 73 71 6c  R_NOMEM_BKPT sql
27bf0 69 74 65 33 49 6f 65 72 72 6e 6f 6d 65 6d 45 72  ite3IoerrnomemEr
27c00 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 29 0a 23 20  ror(__LINE__).# 
27c10 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 4f  define SQLITE_CO
27c20 52 52 55 50 54 5f 50 47 4e 4f 28 50 29 20 73 71  RRUPT_PGNO(P) sq
27c30 6c 69 74 65 33 43 6f 72 72 75 70 74 50 67 6e 6f  lite3CorruptPgno
27c40 45 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 2c 28  Error(__LINE__,(
27c50 50 29 29 0a 23 65 6c 73 65 0a 23 20 64 65 66 69  P)).#else.# defi
27c60 6e 65 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 5f  ne SQLITE_NOMEM_
27c70 42 4b 50 54 20 53 51 4c 49 54 45 5f 4e 4f 4d 45  BKPT SQLITE_NOME
27c80 4d 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  M.# define SQLIT
27c90 45 5f 49 4f 45 52 52 5f 4e 4f 4d 45 4d 5f 42 4b  E_IOERR_NOMEM_BK
27ca0 50 54 20 53 51 4c 49 54 45 5f 49 4f 45 52 52 5f  PT SQLITE_IOERR_
27cb0 4e 4f 4d 45 4d 0a 23 20 64 65 66 69 6e 65 20 53  NOMEM.# define S
27cc0 51 4c 49 54 45 5f 43 4f 52 52 55 50 54 5f 50 47  QLITE_CORRUPT_PG
27cd0 4e 4f 28 50 29 20 73 71 6c 69 74 65 33 43 6f 72  NO(P) sqlite3Cor
27ce0 72 75 70 74 45 72 72 6f 72 28 5f 5f 4c 49 4e 45  ruptError(__LINE
27cf0 5f 5f 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  __).#endif../*.*
27d00 2a 20 46 54 53 33 20 61 6e 64 20 46 54 53 34 20  * FTS3 and FTS4 
27d10 62 6f 74 68 20 72 65 71 75 69 72 65 20 76 69 72  both require vir
27d20 74 75 61 6c 20 74 61 62 6c 65 20 73 75 70 70 6f  tual table suppo
27d30 72 74 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65  rt.*/.#if define
27d40 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  d(SQLITE_OMIT_VI
27d50 52 54 55 41 4c 54 41 42 4c 45 29 0a 23 20 75 6e  RTUALTABLE).# un
27d60 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  def SQLITE_ENABL
27d70 45 5f 46 54 53 33 0a 23 20 75 6e 64 65 66 20 53  E_FTS3.# undef S
27d80 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53  QLITE_ENABLE_FTS
27d90 34 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  4.#endif../*.** 
27da0 46 54 53 34 20 69 73 20 72 65 61 6c 6c 79 20 61  FTS4 is really a
27db0 6e 20 65 78 74 65 6e 73 69 6f 6e 20 66 6f 72 20  n extension for 
27dc0 46 54 53 33 2e 20 20 49 74 20 69 73 20 65 6e 61  FTS3.  It is ena
27dd0 62 6c 65 64 20 75 73 69 6e 67 20 74 68 65 0a 2a  bled using the.*
27de0 2a 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  * SQLITE_ENABLE_
27df0 46 54 53 33 20 6d 61 63 72 6f 2e 20 20 42 75 74  FTS3 macro.  But
27e00 20 74 6f 20 61 76 6f 69 64 20 63 6f 6e 66 75 73   to avoid confus
27e10 69 6f 6e 20 77 65 20 61 6c 73 6f 20 63 61 6c 6c  ion we also call
27e20 0a 2a 2a 20 74 68 65 20 53 51 4c 49 54 45 5f 45  .** the SQLITE_E
27e30 4e 41 42 4c 45 5f 46 54 53 34 20 6d 61 63 72 6f  NABLE_FTS4 macro
27e40 20 74 6f 20 73 65 72 76 65 20 61 73 20 61 6e 20   to serve as an 
27e50 61 6c 69 61 73 20 66 6f 72 20 53 51 4c 49 54 45  alias for SQLITE
27e60 5f 45 4e 41 42 4c 45 5f 46 54 53 33 2e 0a 2a 2f  _ENABLE_FTS3..*/
27e70 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c  .#if defined(SQL
27e80 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 34 29  ITE_ENABLE_FTS4)
27e90 20 26 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c   && !defined(SQL
27ea0 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33 29  ITE_ENABLE_FTS3)
27eb0 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
27ec0 5f 45 4e 41 42 4c 45 5f 46 54 53 33 20 31 0a 23  _ENABLE_FTS3 1.#
27ed0 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  endif../*.** The
27ee0 20 63 74 79 70 65 2e 68 20 68 65 61 64 65 72 20   ctype.h header 
27ef0 69 73 20 6e 65 65 64 65 64 20 66 6f 72 20 6e 6f  is needed for no
27f00 6e 2d 41 53 43 49 49 20 73 79 73 74 65 6d 73 2e  n-ASCII systems.
27f10 20 20 49 74 20 69 73 20 61 6c 73 6f 0a 2a 2a 20    It is also.** 
27f20 6e 65 65 64 65 64 20 62 79 20 46 54 53 33 20 77  needed by FTS3 w
27f30 68 65 6e 20 46 54 53 33 20 69 73 20 69 6e 63 6c  hen FTS3 is incl
27f40 75 64 65 64 20 69 6e 20 74 68 65 20 61 6d 61 6c  uded in the amal
27f50 67 61 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 23 69 66  gamation..*/.#if
27f60 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
27f70 5f 41 53 43 49 49 29 20 7c 7c 20 5c 0a 20 20 20  _ASCII) || \.   
27f80 20 28 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   (defined(SQLITE
27f90 5f 45 4e 41 42 4c 45 5f 46 54 53 33 29 20 26 26  _ENABLE_FTS3) &&
27fa0 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
27fb0 41 4d 41 4c 47 41 4d 41 54 49 4f 4e 29 29 0a 23  AMALGAMATION)).#
27fc0 20 69 6e 63 6c 75 64 65 20 3c 63 74 79 70 65 2e   include <ctype.
27fd0 68 3e 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  h>.#endif../*.**
27fe0 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d   The following m
27ff0 61 63 72 6f 73 20 6d 69 6d 69 63 20 74 68 65 20  acros mimic the 
28000 73 74 61 6e 64 61 72 64 20 6c 69 62 72 61 72 79  standard library
28010 20 66 75 6e 63 74 69 6f 6e 73 20 74 6f 75 70 70   functions toupp
28020 65 72 28 29 2c 0a 2a 2a 20 69 73 73 70 61 63 65  er(),.** isspace
28030 28 29 2c 20 69 73 61 6c 6e 75 6d 28 29 2c 20 69  (), isalnum(), i
28040 73 64 69 67 69 74 28 29 20 61 6e 64 20 69 73 78  sdigit() and isx
28050 64 69 67 69 74 28 29 2c 20 72 65 73 70 65 63 74  digit(), respect
28060 69 76 65 6c 79 2e 20 54 68 65 0a 2a 2a 20 73 71  ively. The.** sq
28070 6c 69 74 65 20 76 65 72 73 69 6f 6e 73 20 6f 6e  lite versions on
28080 6c 79 20 77 6f 72 6b 20 66 6f 72 20 41 53 43 49  ly work for ASCI
28090 49 20 63 68 61 72 61 63 74 65 72 73 2c 20 72 65  I characters, re
280a0 67 61 72 64 6c 65 73 73 20 6f 66 20 6c 6f 63 61  gardless of loca
280b0 6c 65 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51  le..*/.#ifdef SQ
280c0 4c 49 54 45 5f 41 53 43 49 49 0a 23 20 64 65 66  LITE_ASCII.# def
280d0 69 6e 65 20 73 71 6c 69 74 65 33 54 6f 75 70 70  ine sqlite3Toupp
280e0 65 72 28 78 29 20 20 28 28 78 29 26 7e 28 73 71  er(x)  ((x)&~(sq
280f0 6c 69 74 65 33 43 74 79 70 65 4d 61 70 5b 28 75  lite3CtypeMap[(u
28100 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29  nsigned char)(x)
28110 5d 26 30 78 32 30 29 29 0a 23 20 64 65 66 69 6e  ]&0x20)).# defin
28120 65 20 73 71 6c 69 74 65 33 49 73 73 70 61 63 65  e sqlite3Isspace
28130 28 78 29 20 20 20 28 73 71 6c 69 74 65 33 43 74  (x)   (sqlite3Ct
28140 79 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64  ypeMap[(unsigned
28150 20 63 68 61 72 29 28 78 29 5d 26 30 78 30 31 29   char)(x)]&0x01)
28160 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
28170 33 49 73 61 6c 6e 75 6d 28 78 29 20 20 20 28 73  3Isalnum(x)   (s
28180 71 6c 69 74 65 33 43 74 79 70 65 4d 61 70 5b 28  qlite3CtypeMap[(
28190 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78  unsigned char)(x
281a0 29 5d 26 30 78 30 36 29 0a 23 20 64 65 66 69 6e  )]&0x06).# defin
281b0 65 20 73 71 6c 69 74 65 33 49 73 61 6c 70 68 61  e sqlite3Isalpha
281c0 28 78 29 20 20 20 28 73 71 6c 69 74 65 33 43 74  (x)   (sqlite3Ct
281d0 79 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64  ypeMap[(unsigned
281e0 20 63 68 61 72 29 28 78 29 5d 26 30 78 30 32 29   char)(x)]&0x02)
281f0 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
28200 33 49 73 64 69 67 69 74 28 78 29 20 20 20 28 73  3Isdigit(x)   (s
28210 71 6c 69 74 65 33 43 74 79 70 65 4d 61 70 5b 28  qlite3CtypeMap[(
28220 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78  unsigned char)(x
28230 29 5d 26 30 78 30 34 29 0a 23 20 64 65 66 69 6e  )]&0x04).# defin
28240 65 20 73 71 6c 69 74 65 33 49 73 78 64 69 67 69  e sqlite3Isxdigi
28250 74 28 78 29 20 20 28 73 71 6c 69 74 65 33 43 74  t(x)  (sqlite3Ct
28260 79 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64  ypeMap[(unsigned
28270 20 63 68 61 72 29 28 78 29 5d 26 30 78 30 38 29   char)(x)]&0x08)
28280 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
28290 33 54 6f 6c 6f 77 65 72 28 78 29 20 20 20 28 73  3Tolower(x)   (s
282a0 71 6c 69 74 65 33 55 70 70 65 72 54 6f 4c 6f 77  qlite3UpperToLow
282b0 65 72 5b 28 75 6e 73 69 67 6e 65 64 20 63 68 61  er[(unsigned cha
282c0 72 29 28 78 29 5d 29 0a 23 20 64 65 66 69 6e 65  r)(x)]).# define
282d0 20 73 71 6c 69 74 65 33 49 73 71 75 6f 74 65 28   sqlite3Isquote(
282e0 78 29 20 20 20 28 73 71 6c 69 74 65 33 43 74 79  x)   (sqlite3Cty
282f0 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64 20  peMap[(unsigned 
28300 63 68 61 72 29 28 78 29 5d 26 30 78 38 30 29 0a  char)(x)]&0x80).
28310 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73  #else.# define s
28320 71 6c 69 74 65 33 54 6f 75 70 70 65 72 28 78 29  qlite3Toupper(x)
28330 20 20 20 74 6f 75 70 70 65 72 28 28 75 6e 73 69     toupper((unsi
28340 67 6e 65 64 20 63 68 61 72 29 28 78 29 29 0a 23  gned char)(x)).#
28350 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49   define sqlite3I
28360 73 73 70 61 63 65 28 78 29 20 20 20 69 73 73 70  sspace(x)   issp
28370 61 63 65 28 28 75 6e 73 69 67 6e 65 64 20 63 68  ace((unsigned ch
28380 61 72 29 28 78 29 29 0a 23 20 64 65 66 69 6e 65  ar)(x)).# define
28390 20 73 71 6c 69 74 65 33 49 73 61 6c 6e 75 6d 28   sqlite3Isalnum(
283a0 78 29 20 20 20 69 73 61 6c 6e 75 6d 28 28 75 6e  x)   isalnum((un
283b0 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 29  signed char)(x))
283c0 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
283d0 33 49 73 61 6c 70 68 61 28 78 29 20 20 20 69 73  3Isalpha(x)   is
283e0 61 6c 70 68 61 28 28 75 6e 73 69 67 6e 65 64 20  alpha((unsigned 
283f0 63 68 61 72 29 28 78 29 29 0a 23 20 64 65 66 69  char)(x)).# defi
28400 6e 65 20 73 71 6c 69 74 65 33 49 73 64 69 67 69  ne sqlite3Isdigi
28410 74 28 78 29 20 20 20 69 73 64 69 67 69 74 28 28  t(x)   isdigit((
28420 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78  unsigned char)(x
28430 29 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  )).# define sqli
28440 74 65 33 49 73 78 64 69 67 69 74 28 78 29 20 20  te3Isxdigit(x)  
28450 69 73 78 64 69 67 69 74 28 28 75 6e 73 69 67 6e  isxdigit((unsign
28460 65 64 20 63 68 61 72 29 28 78 29 29 0a 23 20 64  ed char)(x)).# d
28470 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54 6f 6c  efine sqlite3Tol
28480 6f 77 65 72 28 78 29 20 20 20 74 6f 6c 6f 77 65  ower(x)   tolowe
28490 72 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72  r((unsigned char
284a0 29 28 78 29 29 0a 23 20 64 65 66 69 6e 65 20 73  )(x)).# define s
284b0 71 6c 69 74 65 33 49 73 71 75 6f 74 65 28 78 29  qlite3Isquote(x)
284c0 20 20 20 28 28 78 29 3d 3d 27 22 27 7c 7c 28 78     ((x)=='"'||(x
284d0 29 3d 3d 27 5c 27 27 7c 7c 28 78 29 3d 3d 27 5b  )=='\''||(x)=='[
284e0 27 7c 7c 28 78 29 3d 3d 27 60 27 29 0a 23 65 6e  '||(x)=='`').#en
284f0 64 69 66 0a 69 6e 74 20 73 71 6c 69 74 65 33 49  dif.int sqlite3I
28500 73 49 64 43 68 61 72 28 75 38 29 3b 0a 0a 2f 2a  sIdChar(u8);../*
28510 0a 2a 2a 20 49 6e 74 65 72 6e 61 6c 20 66 75 6e  .** Internal fun
28520 63 74 69 6f 6e 20 70 72 6f 74 6f 74 79 70 65 73  ction prototypes
28530 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 53  .*/.int sqlite3S
28540 74 72 49 43 6d 70 28 63 6f 6e 73 74 20 63 68 61  trICmp(const cha
28550 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  r*,const char*);
28560 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 74 72 6c  .int sqlite3Strl
28570 65 6e 33 30 28 63 6f 6e 73 74 20 63 68 61 72 2a  en30(const char*
28580 29 3b 0a 23 64 65 66 69 6e 65 20 73 71 6c 69 74  );.#define sqlit
28590 65 33 53 74 72 6c 65 6e 33 30 4e 4e 28 43 29 20  e3Strlen30NN(C) 
285a0 28 73 74 72 6c 65 6e 28 43 29 26 30 78 33 66 66  (strlen(C)&0x3ff
285b0 66 66 66 66 66 29 0a 63 68 61 72 20 2a 73 71 6c  fffff).char *sql
285c0 69 74 65 33 43 6f 6c 75 6d 6e 54 79 70 65 28 43  ite3ColumnType(C
285d0 6f 6c 75 6d 6e 2a 2c 63 68 61 72 2a 29 3b 0a 23  olumn*,char*);.#
285e0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74  define sqlite3St
285f0 72 4e 49 43 6d 70 20 73 71 6c 69 74 65 33 5f 73  rNICmp sqlite3_s
28600 74 72 6e 69 63 6d 70 0a 0a 69 6e 74 20 73 71 6c  trnicmp..int sql
28610 69 74 65 33 4d 61 6c 6c 6f 63 49 6e 69 74 28 76  ite3MallocInit(v
28620 6f 69 64 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  oid);.void sqlit
28630 65 33 4d 61 6c 6c 6f 63 45 6e 64 28 76 6f 69 64  e3MallocEnd(void
28640 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33  );.void *sqlite3
28650 4d 61 6c 6c 6f 63 28 75 36 34 29 3b 0a 76 6f 69  Malloc(u64);.voi
28660 64 20 2a 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63  d *sqlite3Malloc
28670 5a 65 72 6f 28 75 36 34 29 3b 0a 76 6f 69 64 20  Zero(u64);.void 
28680 2a 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63  *sqlite3DbMalloc
28690 5a 65 72 6f 28 73 71 6c 69 74 65 33 2a 2c 20 75  Zero(sqlite3*, u
286a0 36 34 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74  64);.void *sqlit
286b0 65 33 44 62 4d 61 6c 6c 6f 63 52 61 77 28 73 71  e3DbMallocRaw(sq
286c0 6c 69 74 65 33 2a 2c 20 75 36 34 29 3b 0a 76 6f  lite3*, u64);.vo
286d0 69 64 20 2a 73 71 6c 69 74 65 33 44 62 4d 61 6c  id *sqlite3DbMal
286e0 6c 6f 63 52 61 77 4e 4e 28 73 71 6c 69 74 65 33  locRawNN(sqlite3
286f0 2a 2c 20 75 36 34 29 3b 0a 63 68 61 72 20 2a 73  *, u64);.char *s
28700 71 6c 69 74 65 33 44 62 53 74 72 44 75 70 28 73  qlite3DbStrDup(s
28710 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68  qlite3*,const ch
28720 61 72 2a 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69  ar*);.char *sqli
28730 74 65 33 44 62 53 74 72 4e 44 75 70 28 73 71 6c  te3DbStrNDup(sql
28740 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72  ite3*,const char
28750 2a 2c 20 75 36 34 29 3b 0a 63 68 61 72 20 2a 73  *, u64);.char *s
28760 71 6c 69 74 65 33 44 62 53 70 61 6e 44 75 70 28  qlite3DbSpanDup(
28770 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63  sqlite3*,const c
28780 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  har*,const char*
28790 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33  );.void *sqlite3
287a0 52 65 61 6c 6c 6f 63 28 76 6f 69 64 2a 2c 20 75  Realloc(void*, u
287b0 36 34 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74  64);.void *sqlit
287c0 65 33 44 62 52 65 61 6c 6c 6f 63 4f 72 46 72 65  e3DbReallocOrFre
287d0 65 28 73 71 6c 69 74 65 33 20 2a 2c 20 76 6f 69  e(sqlite3 *, voi
287e0 64 20 2a 2c 20 75 36 34 29 3b 0a 76 6f 69 64 20  d *, u64);.void 
287f0 2a 73 71 6c 69 74 65 33 44 62 52 65 61 6c 6c 6f  *sqlite3DbReallo
28800 63 28 73 71 6c 69 74 65 33 20 2a 2c 20 76 6f 69  c(sqlite3 *, voi
28810 64 20 2a 2c 20 75 36 34 29 3b 0a 76 6f 69 64 20  d *, u64);.void 
28820 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 73 71  sqlite3DbFree(sq
28830 6c 69 74 65 33 2a 2c 20 76 6f 69 64 2a 29 3b 0a  lite3*, void*);.
28840 76 6f 69 64 20 73 71 6c 69 74 65 33 44 62 46 72  void sqlite3DbFr
28850 65 65 4e 4e 28 73 71 6c 69 74 65 33 2a 2c 20 76  eeNN(sqlite3*, v
28860 6f 69 64 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  oid*);.int sqlit
28870 65 33 4d 61 6c 6c 6f 63 53 69 7a 65 28 76 6f 69  e3MallocSize(voi
28880 64 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  d*);.int sqlite3
28890 44 62 4d 61 6c 6c 6f 63 53 69 7a 65 28 73 71 6c  DbMallocSize(sql
288a0 69 74 65 33 2a 2c 20 76 6f 69 64 2a 29 3b 0a 76  ite3*, void*);.v
288b0 6f 69 64 20 2a 73 71 6c 69 74 65 33 50 61 67 65  oid *sqlite3Page
288c0 4d 61 6c 6c 6f 63 28 69 6e 74 29 3b 0a 76 6f 69  Malloc(int);.voi
288d0 64 20 73 71 6c 69 74 65 33 50 61 67 65 46 72 65  d sqlite3PageFre
288e0 65 28 76 6f 69 64 2a 29 3b 0a 76 6f 69 64 20 73  e(void*);.void s
288f0 71 6c 69 74 65 33 4d 65 6d 53 65 74 44 65 66 61  qlite3MemSetDefa
28900 75 6c 74 28 76 6f 69 64 29 3b 0a 23 69 66 6e 64  ult(void);.#ifnd
28910 65 66 20 53 51 4c 49 54 45 5f 55 4e 54 45 53 54  ef SQLITE_UNTEST
28920 41 42 4c 45 0a 76 6f 69 64 20 73 71 6c 69 74 65  ABLE.void sqlite
28930 33 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 48 6f 6f  3BenignMallocHoo
28940 6b 73 28 76 6f 69 64 20 28 2a 29 28 76 6f 69 64  ks(void (*)(void
28950 29 2c 20 76 6f 69 64 20 28 2a 29 28 76 6f 69 64  ), void (*)(void
28960 29 29 3b 0a 23 65 6e 64 69 66 0a 69 6e 74 20 73  ));.#endif.int s
28970 71 6c 69 74 65 33 48 65 61 70 4e 65 61 72 6c 79  qlite3HeapNearly
28980 46 75 6c 6c 28 76 6f 69 64 29 3b 0a 0a 2f 2a 0a  Full(void);../*.
28990 2a 2a 20 4f 6e 20 73 79 73 74 65 6d 73 20 77 69  ** On systems wi
289a0 74 68 20 61 6d 70 6c 65 20 73 74 61 63 6b 20 73  th ample stack s
289b0 70 61 63 65 20 61 6e 64 20 74 68 61 74 20 73 75  pace and that su
289c0 70 70 6f 72 74 20 61 6c 6c 6f 63 61 28 29 2c 20  pport alloca(), 
289d0 6d 61 6b 65 0a 2a 2a 20 75 73 65 20 6f 66 20 61  make.** use of a
289e0 6c 6c 6f 63 61 28 29 20 74 6f 20 6f 62 74 61 69  lloca() to obtai
289f0 6e 20 73 70 61 63 65 20 66 6f 72 20 6c 61 72 67  n space for larg
28a00 65 20 61 75 74 6f 6d 61 74 69 63 20 6f 62 6a 65  e automatic obje
28a10 63 74 73 2e 20 20 42 79 20 64 65 66 61 75 6c 74  cts.  By default
28a20 2c 0a 2a 2a 20 6f 62 74 61 69 6e 20 73 70 61 63  ,.** obtain spac
28a30 65 20 66 72 6f 6d 20 6d 61 6c 6c 6f 63 28 29 2e  e from malloc().
28a40 0a 2a 2a 0a 2a 2a 20 54 68 65 20 61 6c 6c 6f 63  .**.** The alloc
28a50 61 28 29 20 72 6f 75 74 69 6e 65 20 6e 65 76 65  a() routine neve
28a60 72 20 72 65 74 75 72 6e 73 20 4e 55 4c 4c 2e 20  r returns NULL. 
28a70 20 54 68 69 73 20 77 69 6c 6c 20 63 61 75 73 65   This will cause
28a80 20 63 6f 64 65 20 70 61 74 68 73 0a 2a 2a 20 74   code paths.** t
28a90 68 61 74 20 64 65 61 6c 20 77 69 74 68 20 73 71  hat deal with sq
28aa0 6c 69 74 65 33 53 74 61 63 6b 41 6c 6c 6f 63 28  lite3StackAlloc(
28ab0 29 20 66 61 69 6c 75 72 65 73 20 74 6f 20 62 65  ) failures to be
28ac0 20 75 6e 72 65 61 63 68 61 62 6c 65 2e 0a 2a 2f   unreachable..*/
28ad0 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 55  .#ifdef SQLITE_U
28ae0 53 45 5f 41 4c 4c 4f 43 41 0a 23 20 64 65 66 69  SE_ALLOCA.# defi
28af0 6e 65 20 73 71 6c 69 74 65 33 53 74 61 63 6b 41  ne sqlite3StackA
28b00 6c 6c 6f 63 52 61 77 28 44 2c 4e 29 20 20 20 61  llocRaw(D,N)   a
28b10 6c 6c 6f 63 61 28 4e 29 0a 23 20 64 65 66 69 6e  lloca(N).# defin
28b20 65 20 73 71 6c 69 74 65 33 53 74 61 63 6b 41 6c  e sqlite3StackAl
28b30 6c 6f 63 5a 65 72 6f 28 44 2c 4e 29 20 20 6d 65  locZero(D,N)  me
28b40 6d 73 65 74 28 61 6c 6c 6f 63 61 28 4e 29 2c 20  mset(alloca(N), 
28b50 30 2c 20 4e 29 0a 23 20 64 65 66 69 6e 65 20 73  0, N).# define s
28b60 71 6c 69 74 65 33 53 74 61 63 6b 46 72 65 65 28  qlite3StackFree(
28b70 44 2c 50 29 0a 23 65 6c 73 65 0a 23 20 64 65 66  D,P).#else.# def
28b80 69 6e 65 20 73 71 6c 69 74 65 33 53 74 61 63 6b  ine sqlite3Stack
28b90 41 6c 6c 6f 63 52 61 77 28 44 2c 4e 29 20 20 20  AllocRaw(D,N)   
28ba0 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 52  sqlite3DbMallocR
28bb0 61 77 28 44 2c 4e 29 0a 23 20 64 65 66 69 6e 65  aw(D,N).# define
28bc0 20 73 71 6c 69 74 65 33 53 74 61 63 6b 41 6c 6c   sqlite3StackAll
28bd0 6f 63 5a 65 72 6f 28 44 2c 4e 29 20 20 73 71 6c  ocZero(D,N)  sql
28be0 69 74 65 33 44 62 4d 61 6c 6c 6f 63 5a 65 72 6f  ite3DbMallocZero
28bf0 28 44 2c 4e 29 0a 23 20 64 65 66 69 6e 65 20 73  (D,N).# define s
28c00 71 6c 69 74 65 33 53 74 61 63 6b 46 72 65 65 28  qlite3StackFree(
28c10 44 2c 50 29 20 20 20 20 20 20 20 73 71 6c 69 74  D,P)       sqlit
28c20 65 33 44 62 46 72 65 65 28 44 2c 50 29 0a 23 65  e3DbFree(D,P).#e
28c30 6e 64 69 66 0a 0a 2f 2a 20 44 6f 20 6e 6f 74 20  ndif../* Do not 
28c40 61 6c 6c 6f 77 20 62 6f 74 68 20 4d 45 4d 53 59  allow both MEMSY
28c50 53 35 20 61 6e 64 20 4d 45 4d 53 59 53 33 20 74  S5 and MEMSYS3 t
28c60 6f 20 62 65 20 64 65 66 69 6e 65 64 20 74 6f 67  o be defined tog
28c70 65 74 68 65 72 2e 20 20 49 66 20 74 68 65 79 0a  ether.  If they.
28c80 2a 2a 20 61 72 65 2c 20 64 69 73 61 62 6c 65 20  ** are, disable 
28c90 4d 45 4d 53 59 53 33 0a 2a 2f 0a 23 69 66 64 65  MEMSYS3.*/.#ifde
28ca0 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
28cb0 4d 45 4d 53 59 53 35 0a 63 6f 6e 73 74 20 73 71  MEMSYS5.const sq
28cc0 6c 69 74 65 33 5f 6d 65 6d 5f 6d 65 74 68 6f 64  lite3_mem_method
28cd0 73 20 2a 73 71 6c 69 74 65 33 4d 65 6d 47 65 74  s *sqlite3MemGet
28ce0 4d 65 6d 73 79 73 35 28 76 6f 69 64 29 3b 0a 23  Memsys5(void);.#
28cf0 75 6e 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  undef SQLITE_ENA
28d00 42 4c 45 5f 4d 45 4d 53 59 53 33 0a 23 65 6e 64  BLE_MEMSYS3.#end
28d10 69 66 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  if.#ifdef SQLITE
28d20 5f 45 4e 41 42 4c 45 5f 4d 45 4d 53 59 53 33 0a  _ENABLE_MEMSYS3.
28d30 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d 65  const sqlite3_me
28d40 6d 5f 6d 65 74 68 6f 64 73 20 2a 73 71 6c 69 74  m_methods *sqlit
28d50 65 33 4d 65 6d 47 65 74 4d 65 6d 73 79 73 33 28  e3MemGetMemsys3(
28d60 76 6f 69 64 29 3b 0a 23 65 6e 64 69 66 0a 0a 0a  void);.#endif...
28d70 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4d  #ifndef SQLITE_M
28d80 55 54 45 58 5f 4f 4d 49 54 0a 20 20 73 71 6c 69  UTEX_OMIT.  sqli
28d90 74 65 33 5f 6d 75 74 65 78 5f 6d 65 74 68 6f 64  te3_mutex_method
28da0 73 20 63 6f 6e 73 74 20 2a 73 71 6c 69 74 65 33  s const *sqlite3
28db0 44 65 66 61 75 6c 74 4d 75 74 65 78 28 76 6f 69  DefaultMutex(voi
28dc0 64 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75  d);.  sqlite3_mu
28dd0 74 65 78 5f 6d 65 74 68 6f 64 73 20 63 6f 6e 73  tex_methods cons
28de0 74 20 2a 73 71 6c 69 74 65 33 4e 6f 6f 70 4d 75  t *sqlite3NoopMu
28df0 74 65 78 28 76 6f 69 64 29 3b 0a 20 20 73 71 6c  tex(void);.  sql
28e00 69 74 65 33 5f 6d 75 74 65 78 20 2a 73 71 6c 69  ite3_mutex *sqli
28e10 74 65 33 4d 75 74 65 78 41 6c 6c 6f 63 28 69 6e  te3MutexAlloc(in
28e20 74 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65  t);.  int sqlite
28e30 33 4d 75 74 65 78 49 6e 69 74 28 76 6f 69 64 29  3MutexInit(void)
28e40 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 4d  ;.  int sqlite3M
28e50 75 74 65 78 45 6e 64 28 76 6f 69 64 29 3b 0a 23  utexEnd(void);.#
28e60 65 6e 64 69 66 0a 23 69 66 20 21 64 65 66 69 6e  endif.#if !defin
28e70 65 64 28 53 51 4c 49 54 45 5f 4d 55 54 45 58 5f  ed(SQLITE_MUTEX_
28e80 4f 4d 49 54 29 20 26 26 20 21 64 65 66 69 6e 65  OMIT) && !define
28e90 64 28 53 51 4c 49 54 45 5f 4d 55 54 45 58 5f 4e  d(SQLITE_MUTEX_N
28ea0 4f 4f 50 29 0a 20 20 76 6f 69 64 20 73 71 6c 69  OOP).  void sqli
28eb0 74 65 33 4d 65 6d 6f 72 79 42 61 72 72 69 65 72  te3MemoryBarrier
28ec0 28 76 6f 69 64 29 3b 0a 23 65 6c 73 65 0a 23 20  (void);.#else.# 
28ed0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 4d 65  define sqlite3Me
28ee0 6d 6f 72 79 42 61 72 72 69 65 72 28 29 0a 23 65  moryBarrier().#e
28ef0 6e 64 69 66 0a 0a 73 71 6c 69 74 65 33 5f 69 6e  ndif..sqlite3_in
28f00 74 36 34 20 73 71 6c 69 74 65 33 53 74 61 74 75  t64 sqlite3Statu
28f10 73 56 61 6c 75 65 28 69 6e 74 29 3b 0a 76 6f 69  sValue(int);.voi
28f20 64 20 73 71 6c 69 74 65 33 53 74 61 74 75 73 55  d sqlite3StatusU
28f30 70 28 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69  p(int, int);.voi
28f40 64 20 73 71 6c 69 74 65 33 53 74 61 74 75 73 44  d sqlite3StatusD
28f50 6f 77 6e 28 69 6e 74 2c 20 69 6e 74 29 3b 0a 76  own(int, int);.v
28f60 6f 69 64 20 73 71 6c 69 74 65 33 53 74 61 74 75  oid sqlite3Statu
28f70 73 48 69 67 68 77 61 74 65 72 28 69 6e 74 2c 20  sHighwater(int, 
28f80 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  int);.int sqlite
28f90 33 4c 6f 6f 6b 61 73 69 64 65 55 73 65 64 28 73  3LookasideUsed(s
28fa0 71 6c 69 74 65 33 2a 2c 69 6e 74 2a 29 3b 0a 0a  qlite3*,int*);..
28fb0 2f 2a 20 41 63 63 65 73 73 20 74 6f 20 6d 75 74  /* Access to mut
28fc0 65 78 65 73 20 75 73 65 64 20 62 79 20 73 71 6c  exes used by sql
28fd0 69 74 65 33 5f 73 74 61 74 75 73 28 29 20 2a 2f  ite3_status() */
28fe0 0a 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 20 2a  .sqlite3_mutex *
28ff0 73 71 6c 69 74 65 33 50 63 61 63 68 65 31 4d 75  sqlite3Pcache1Mu
29000 74 65 78 28 76 6f 69 64 29 3b 0a 73 71 6c 69 74  tex(void);.sqlit
29010 65 33 5f 6d 75 74 65 78 20 2a 73 71 6c 69 74 65  e3_mutex *sqlite
29020 33 4d 61 6c 6c 6f 63 4d 75 74 65 78 28 76 6f 69  3MallocMutex(voi
29030 64 29 3b 0a 0a 23 69 66 20 64 65 66 69 6e 65 64  d);..#if defined
29040 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4d  (SQLITE_ENABLE_M
29050 55 4c 54 49 54 48 52 45 41 44 45 44 5f 43 48 45  ULTITHREADED_CHE
29060 43 4b 53 29 20 26 26 20 21 64 65 66 69 6e 65 64  CKS) && !defined
29070 28 53 51 4c 49 54 45 5f 4d 55 54 45 58 5f 4f 4d  (SQLITE_MUTEX_OM
29080 49 54 29 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  IT).void sqlite3
29090 4d 75 74 65 78 57 61 72 6e 4f 6e 43 6f 6e 74 65  MutexWarnOnConte
290a0 6e 74 69 6f 6e 28 73 71 6c 69 74 65 33 5f 6d 75  ntion(sqlite3_mu
290b0 74 65 78 2a 29 3b 0a 23 65 6c 73 65 0a 23 20 64  tex*);.#else.# d
290c0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 4d 75 74  efine sqlite3Mut
290d0 65 78 57 61 72 6e 4f 6e 43 6f 6e 74 65 6e 74 69  exWarnOnContenti
290e0 6f 6e 28 78 29 0a 23 65 6e 64 69 66 0a 0a 23 69  on(x).#endif..#i
290f0 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
29100 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54  T_FLOATING_POINT
29110 0a 23 20 64 65 66 69 6e 65 20 45 58 50 37 35 34  .# define EXP754
29120 20 28 28 28 75 36 34 29 30 78 37 66 66 29 3c 3c   (((u64)0x7ff)<<
29130 35 32 29 0a 23 20 64 65 66 69 6e 65 20 4d 41 4e  52).# define MAN
29140 37 35 34 20 28 28 28 28 75 36 34 29 31 29 3c 3c  754 ((((u64)1)<<
29150 35 32 29 2d 31 29 0a 23 20 64 65 66 69 6e 65 20  52)-1).# define 
29160 49 73 4e 61 4e 28 58 29 20 28 28 28 58 29 26 45  IsNaN(X) (((X)&E
29170 58 50 37 35 34 29 3d 3d 45 58 50 37 35 34 20 26  XP754)==EXP754 &
29180 26 20 28 28 58 29 26 4d 41 4e 37 35 34 29 21 3d  & ((X)&MAN754)!=
29190 30 29 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33  0).  int sqlite3
291a0 49 73 4e 61 4e 28 64 6f 75 62 6c 65 29 3b 0a 23  IsNaN(double);.#
291b0 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 49 73  else.# define Is
291c0 4e 61 4e 28 58 29 20 20 20 20 20 20 20 20 20 30  NaN(X)         0
291d0 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
291e0 33 49 73 4e 61 4e 28 58 29 20 20 30 0a 23 65 6e  3IsNaN(X)  0.#en
291f0 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e  dif../*.** An in
29200 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f  stance of the fo
29210 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72  llowing structur
29220 65 20 68 6f 6c 64 73 20 69 6e 66 6f 72 6d 61 74  e holds informat
29230 69 6f 6e 20 61 62 6f 75 74 20 53 51 4c 0a 2a 2a  ion about SQL.**
29240 20 66 75 6e 63 74 69 6f 6e 73 20 61 72 67 75 6d   functions argum
29250 65 6e 74 73 20 74 68 61 74 20 61 72 65 20 74 68  ents that are th
29260 65 20 70 61 72 61 6d 65 74 65 72 73 20 74 6f 20  e parameters to 
29270 74 68 65 20 70 72 69 6e 74 66 28 29 20 66 75 6e  the printf() fun
29280 63 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74  ction..*/.struct
29290 20 50 72 69 6e 74 66 41 72 67 75 6d 65 6e 74 73   PrintfArguments
292a0 20 7b 0a 20 20 69 6e 74 20 6e 41 72 67 3b 20 20   {.  int nArg;  
292b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
292c0 20 54 6f 74 61 6c 20 6e 75 6d 62 65 72 20 6f 66   Total number of
292d0 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f 0a 20 20   arguments */.  
292e0 69 6e 74 20 6e 55 73 65 64 3b 20 20 20 20 20 20  int nUsed;      
292f0 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
29300 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20  er of arguments 
29310 75 73 65 64 20 73 6f 20 66 61 72 20 2a 2f 0a 20  used so far */. 
29320 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a   sqlite3_value *
29330 2a 61 70 41 72 67 3b 20 20 20 2f 2a 20 54 68 65  *apArg;   /* The
29340 20 61 72 67 75 6d 65 6e 74 20 76 61 6c 75 65 73   argument values
29350 20 2a 2f 0a 7d 3b 0a 0a 63 68 61 72 20 2a 73 71   */.};..char *sq
29360 6c 69 74 65 33 4d 50 72 69 6e 74 66 28 73 71 6c  lite3MPrintf(sql
29370 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72  ite3*,const char
29380 2a 2c 20 2e 2e 2e 29 3b 0a 63 68 61 72 20 2a 73  *, ...);.char *s
29390 71 6c 69 74 65 33 56 4d 50 72 69 6e 74 66 28 73  qlite3VMPrintf(s
293a0 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68  qlite3*,const ch
293b0 61 72 2a 2c 20 76 61 5f 6c 69 73 74 29 3b 0a 23  ar*, va_list);.#
293c0 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  if defined(SQLIT
293d0 45 5f 44 45 42 55 47 29 20 7c 7c 20 64 65 66 69  E_DEBUG) || defi
293e0 6e 65 64 28 53 51 4c 49 54 45 5f 48 41 56 45 5f  ned(SQLITE_HAVE_
293f0 4f 53 5f 54 52 41 43 45 29 0a 20 20 76 6f 69 64  OS_TRACE).  void
29400 20 73 71 6c 69 74 65 33 44 65 62 75 67 50 72 69   sqlite3DebugPri
29410 6e 74 66 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c  ntf(const char*,
29420 20 2e 2e 2e 29 3b 0a 23 65 6e 64 69 66 0a 23 69   ...);.#endif.#i
29430 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  f defined(SQLITE
29440 5f 54 45 53 54 29 0a 20 20 76 6f 69 64 20 2a 73  _TEST).  void *s
29450 71 6c 69 74 65 33 54 65 73 74 54 65 78 74 54 6f  qlite3TestTextTo
29460 50 74 72 28 63 6f 6e 73 74 20 63 68 61 72 2a 29  Ptr(const char*)
29470 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 20 64 65  ;.#endif..#if de
29480 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42  fined(SQLITE_DEB
29490 55 47 29 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  UG).  void sqlit
294a0 65 33 54 72 65 65 56 69 65 77 45 78 70 72 28 54  e3TreeViewExpr(T
294b0 72 65 65 56 69 65 77 2a 2c 20 63 6f 6e 73 74 20  reeView*, const 
294c0 45 78 70 72 2a 2c 20 75 38 29 3b 0a 20 20 76 6f  Expr*, u8);.  vo
294d0 69 64 20 73 71 6c 69 74 65 33 54 72 65 65 56 69  id sqlite3TreeVi
294e0 65 77 42 61 72 65 45 78 70 72 4c 69 73 74 28 54  ewBareExprList(T
294f0 72 65 65 56 69 65 77 2a 2c 20 63 6f 6e 73 74 20  reeView*, const 
29500 45 78 70 72 4c 69 73 74 2a 2c 20 63 6f 6e 73 74  ExprList*, const
29510 20 63 68 61 72 2a 29 3b 0a 20 20 76 6f 69 64 20   char*);.  void 
29520 73 71 6c 69 74 65 33 54 72 65 65 56 69 65 77 45  sqlite3TreeViewE
29530 78 70 72 4c 69 73 74 28 54 72 65 65 56 69 65 77  xprList(TreeView
29540 2a 2c 20 63 6f 6e 73 74 20 45 78 70 72 4c 69 73  *, const ExprLis
29550 74 2a 2c 20 75 38 2c 20 63 6f 6e 73 74 20 63 68  t*, u8, const ch
29560 61 72 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c  ar*);.  void sql
29570 69 74 65 33 54 72 65 65 56 69 65 77 53 72 63 4c  ite3TreeViewSrcL
29580 69 73 74 28 54 72 65 65 56 69 65 77 2a 2c 20 63  ist(TreeView*, c
29590 6f 6e 73 74 20 53 72 63 4c 69 73 74 2a 29 3b 0a  onst SrcList*);.
295a0 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 54 72    void sqlite3Tr
295b0 65 65 56 69 65 77 53 65 6c 65 63 74 28 54 72 65  eeViewSelect(Tre
295c0 65 56 69 65 77 2a 2c 20 63 6f 6e 73 74 20 53 65  eView*, const Se
295d0 6c 65 63 74 2a 2c 20 75 38 29 3b 0a 20 20 76 6f  lect*, u8);.  vo
295e0 69 64 20 73 71 6c 69 74 65 33 54 72 65 65 56 69  id sqlite3TreeVi
295f0 65 77 57 69 74 68 28 54 72 65 65 56 69 65 77 2a  ewWith(TreeView*
29600 2c 20 63 6f 6e 73 74 20 57 69 74 68 2a 2c 20 75  , const With*, u
29610 38 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  8);.#ifndef SQLI
29620 54 45 5f 4f 4d 49 54 5f 57 49 4e 44 4f 57 46 55  TE_OMIT_WINDOWFU
29630 4e 43 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  NC.  void sqlite
29640 33 54 72 65 65 56 69 65 77 57 69 6e 64 6f 77 28  3TreeViewWindow(
29650 54 72 65 65 56 69 65 77 2a 2c 20 63 6f 6e 73 74  TreeView*, const
29660 20 57 69 6e 64 6f 77 2a 2c 20 75 38 29 3b 0a 20   Window*, u8);. 
29670 20 76 6f 69 64 20 73 71 6c 69 74 65 33 54 72 65   void sqlite3Tre
29680 65 56 69 65 77 57 69 6e 46 75 6e 63 28 54 72 65  eViewWinFunc(Tre
29690 65 56 69 65 77 2a 2c 20 63 6f 6e 73 74 20 57 69  eView*, const Wi
296a0 6e 64 6f 77 2a 2c 20 75 38 29 3b 0a 23 65 6e 64  ndow*, u8);.#end
296b0 69 66 0a 23 65 6e 64 69 66 0a 0a 0a 76 6f 69 64  if.#endif...void
296c0 20 73 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e   sqlite3SetStrin
296d0 67 28 63 68 61 72 20 2a 2a 2c 20 73 71 6c 69 74  g(char **, sqlit
296e0 65 33 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  e3*, const char*
296f0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
29700 72 72 6f 72 4d 73 67 28 50 61 72 73 65 2a 2c 20  rrorMsg(Parse*, 
29710 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 2e 2e 2e  const char*, ...
29720 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 72  );.int sqlite3Er
29730 72 6f 72 54 6f 50 61 72 73 65 72 28 73 71 6c 69  rorToParser(sqli
29740 74 65 33 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20  te3*,int);.void 
29750 73 71 6c 69 74 65 33 44 65 71 75 6f 74 65 28 63  sqlite3Dequote(c
29760 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  har*);.void sqli
29770 74 65 33 44 65 71 75 6f 74 65 45 78 70 72 28 45  te3DequoteExpr(E
29780 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  xpr*);.void sqli
29790 74 65 33 54 6f 6b 65 6e 49 6e 69 74 28 54 6f 6b  te3TokenInit(Tok
297a0 65 6e 2a 2c 63 68 61 72 2a 29 3b 0a 69 6e 74 20  en*,char*);.int 
297b0 73 71 6c 69 74 65 33 4b 65 79 77 6f 72 64 43 6f  sqlite3KeywordCo
297c0 64 65 28 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65  de(const unsigne
297d0 64 20 63 68 61 72 2a 2c 20 69 6e 74 29 3b 0a 69  d char*, int);.i
297e0 6e 74 20 73 71 6c 69 74 65 33 52 75 6e 50 61 72  nt sqlite3RunPar
297f0 73 65 72 28 50 61 72 73 65 2a 2c 20 63 6f 6e 73  ser(Parse*, cons
29800 74 20 63 68 61 72 2a 2c 20 63 68 61 72 20 2a 2a  t char*, char **
29810 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 46  );.void sqlite3F
29820 69 6e 69 73 68 43 6f 64 69 6e 67 28 50 61 72 73  inishCoding(Pars
29830 65 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  e*);.int sqlite3
29840 47 65 74 54 65 6d 70 52 65 67 28 50 61 72 73 65  GetTempReg(Parse
29850 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
29860 52 65 6c 65 61 73 65 54 65 6d 70 52 65 67 28 50  ReleaseTempReg(P
29870 61 72 73 65 2a 2c 69 6e 74 29 3b 0a 69 6e 74 20  arse*,int);.int 
29880 73 71 6c 69 74 65 33 47 65 74 54 65 6d 70 52 61  sqlite3GetTempRa
29890 6e 67 65 28 50 61 72 73 65 2a 2c 69 6e 74 29 3b  nge(Parse*,int);
298a0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 6c  .void sqlite3Rel
298b0 65 61 73 65 54 65 6d 70 52 61 6e 67 65 28 50 61  easeTempRange(Pa
298c0 72 73 65 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a 76  rse*,int,int);.v
298d0 6f 69 64 20 73 71 6c 69 74 65 33 43 6c 65 61 72  oid sqlite3Clear
298e0 54 65 6d 70 52 65 67 43 61 63 68 65 28 50 61 72  TempRegCache(Par
298f0 73 65 2a 29 3b 0a 23 69 66 64 65 66 20 53 51 4c  se*);.#ifdef SQL
29900 49 54 45 5f 44 45 42 55 47 0a 69 6e 74 20 73 71  ITE_DEBUG.int sq
29910 6c 69 74 65 33 4e 6f 54 65 6d 70 73 49 6e 52 61  lite3NoTempsInRa
29920 6e 67 65 28 50 61 72 73 65 2a 2c 69 6e 74 2c 69  nge(Parse*,int,i
29930 6e 74 29 3b 0a 23 65 6e 64 69 66 0a 45 78 70 72  nt);.#endif.Expr
29940 20 2a 73 71 6c 69 74 65 33 45 78 70 72 41 6c 6c   *sqlite3ExprAll
29950 6f 63 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c  oc(sqlite3*,int,
29960 63 6f 6e 73 74 20 54 6f 6b 65 6e 2a 2c 69 6e 74  const Token*,int
29970 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33  );.Expr *sqlite3
29980 45 78 70 72 28 73 71 6c 69 74 65 33 2a 2c 69 6e  Expr(sqlite3*,in
29990 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  t,const char*);.
299a0 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
299b0 41 74 74 61 63 68 53 75 62 74 72 65 65 73 28 73  AttachSubtrees(s
299c0 71 6c 69 74 65 33 2a 2c 45 78 70 72 2a 2c 45 78  qlite3*,Expr*,Ex
299d0 70 72 2a 2c 45 78 70 72 2a 29 3b 0a 45 78 70 72  pr*,Expr*);.Expr
299e0 20 2a 73 71 6c 69 74 65 33 50 45 78 70 72 28 50   *sqlite3PExpr(P
299f0 61 72 73 65 2a 2c 20 69 6e 74 2c 20 45 78 70 72  arse*, int, Expr
29a00 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20  *, Expr*);.void 
29a10 73 71 6c 69 74 65 33 50 45 78 70 72 41 64 64 53  sqlite3PExprAddS
29a20 65 6c 65 63 74 28 50 61 72 73 65 2a 2c 20 45 78  elect(Parse*, Ex
29a30 70 72 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 45  pr*, Select*);.E
29a40 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72  xpr *sqlite3Expr
29a50 41 6e 64 28 50 61 72 73 65 2a 2c 45 78 70 72 2a  And(Parse*,Expr*
29a60 2c 20 45 78 70 72 2a 29 3b 0a 45 78 70 72 20 2a  , Expr*);.Expr *
29a70 73 71 6c 69 74 65 33 45 78 70 72 53 69 6d 70 6c  sqlite3ExprSimpl
29a80 69 66 69 65 64 41 6e 64 4f 72 28 45 78 70 72 2a  ifiedAndOr(Expr*
29a90 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33  );.Expr *sqlite3
29aa0 45 78 70 72 46 75 6e 63 74 69 6f 6e 28 50 61 72  ExprFunction(Par
29ab0 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 20 54  se*,ExprList*, T
29ac0 6f 6b 65 6e 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69  oken*, int);.voi
29ad0 64 20 73 71 6c 69 74 65 33 45 78 70 72 41 73 73  d sqlite3ExprAss
29ae0 69 67 6e 56 61 72 4e 75 6d 62 65 72 28 50 61 72  ignVarNumber(Par
29af0 73 65 2a 2c 20 45 78 70 72 2a 2c 20 75 33 32 29  se*, Expr*, u32)
29b00 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
29b10 70 72 44 65 6c 65 74 65 28 73 71 6c 69 74 65 33  prDelete(sqlite3
29b20 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20  *, Expr*);.void 
29b30 73 71 6c 69 74 65 33 45 78 70 72 55 6e 6d 61 70  sqlite3ExprUnmap
29b40 41 6e 64 44 65 6c 65 74 65 28 50 61 72 73 65 2a  AndDelete(Parse*
29b50 2c 20 45 78 70 72 2a 29 3b 0a 45 78 70 72 4c 69  , Expr*);.ExprLi
29b60 73 74 20 2a 73 71 6c 69 74 65 33 45 78 70 72 4c  st *sqlite3ExprL
29b70 69 73 74 41 70 70 65 6e 64 28 50 61 72 73 65 2a  istAppend(Parse*
29b80 2c 45 78 70 72 4c 69 73 74 2a 2c 45 78 70 72 2a  ,ExprList*,Expr*
29b90 29 3b 0a 45 78 70 72 4c 69 73 74 20 2a 73 71 6c  );.ExprList *sql
29ba0 69 74 65 33 45 78 70 72 4c 69 73 74 41 70 70 65  ite3ExprListAppe
29bb0 6e 64 56 65 63 74 6f 72 28 50 61 72 73 65 2a 2c  ndVector(Parse*,
29bc0 45 78 70 72 4c 69 73 74 2a 2c 49 64 4c 69 73 74  ExprList*,IdList
29bd0 2a 2c 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73  *,Expr*);.void s
29be0 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74 53 65  qlite3ExprListSe
29bf0 74 53 6f 72 74 4f 72 64 65 72 28 45 78 70 72 4c  tSortOrder(ExprL
29c00 69 73 74 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20  ist*,int);.void 
29c10 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74 53  sqlite3ExprListS
29c20 65 74 4e 61 6d 65 28 50 61 72 73 65 2a 2c 45 78  etName(Parse*,Ex
29c30 70 72 4c 69 73 74 2a 2c 54 6f 6b 65 6e 2a 2c 69  prList*,Token*,i
29c40 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
29c50 33 45 78 70 72 4c 69 73 74 53 65 74 53 70 61 6e  3ExprListSetSpan
29c60 28 50 61 72 73 65 2a 2c 45 78 70 72 4c 69 73 74  (Parse*,ExprList
29c70 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f  *,const char*,co
29c80 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64  nst char*);.void
29c90 20 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74   sqlite3ExprList
29ca0 44 65 6c 65 74 65 28 73 71 6c 69 74 65 33 2a 2c  Delete(sqlite3*,
29cb0 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a 75 33 32   ExprList*);.u32
29cc0 20 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74   sqlite3ExprList
29cd0 46 6c 61 67 73 28 63 6f 6e 73 74 20 45 78 70 72  Flags(const Expr
29ce0 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  List*);.int sqli
29cf0 74 65 33 49 6e 64 65 78 48 61 73 44 75 70 6c 69  te3IndexHasDupli
29d00 63 61 74 65 52 6f 6f 74 50 61 67 65 28 49 6e 64  cateRootPage(Ind
29d10 65 78 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  ex*);.int sqlite
29d20 33 49 6e 69 74 28 73 71 6c 69 74 65 33 2a 2c 20  3Init(sqlite3*, 
29d30 63 68 61 72 2a 2a 29 3b 0a 69 6e 74 20 73 71 6c  char**);.int sql
29d40 69 74 65 33 49 6e 69 74 43 61 6c 6c 62 61 63 6b  ite3InitCallback
29d50 28 76 6f 69 64 2a 2c 20 69 6e 74 2c 20 63 68 61  (void*, int, cha
29d60 72 2a 2a 2c 20 63 68 61 72 2a 2a 29 3b 0a 69 6e  r**, char**);.in
29d70 74 20 73 71 6c 69 74 65 33 49 6e 69 74 4f 6e 65  t sqlite3InitOne
29d80 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74 2c 20  (sqlite3*, int, 
29d90 63 68 61 72 2a 2a 2c 20 75 33 32 29 3b 0a 76 6f  char**, u32);.vo
29da0 69 64 20 73 71 6c 69 74 65 33 50 72 61 67 6d 61  id sqlite3Pragma
29db0 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54  (Parse*,Token*,T
29dc0 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 69 6e 74  oken*,Token*,int
29dd0 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  );.#ifndef SQLIT
29de0 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
29df0 42 4c 45 0a 4d 6f 64 75 6c 65 20 2a 73 71 6c 69  BLE.Module *sqli
29e00 74 65 33 50 72 61 67 6d 61 56 74 61 62 52 65 67  te3PragmaVtabReg
29e10 69 73 74 65 72 28 73 71 6c 69 74 65 33 2a 2c 63  ister(sqlite3*,c
29e20 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4e 61 6d 65  onst char *zName
29e30 29 3b 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73  );.#endif.void s
29e40 71 6c 69 74 65 33 52 65 73 65 74 41 6c 6c 53 63  qlite3ResetAllSc
29e50 68 65 6d 61 73 4f 66 43 6f 6e 6e 65 63 74 69 6f  hemasOfConnectio
29e60 6e 28 73 71 6c 69 74 65 33 2a 29 3b 0a 76 6f 69  n(sqlite3*);.voi
29e70 64 20 73 71 6c 69 74 65 33 52 65 73 65 74 4f 6e  d sqlite3ResetOn
29e80 65 53 63 68 65 6d 61 28 73 71 6c 69 74 65 33 2a  eSchema(sqlite3*
29e90 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ,int);.void sqli
29ea0 74 65 33 43 6f 6c 6c 61 70 73 65 44 61 74 61 62  te3CollapseDatab
29eb0 61 73 65 41 72 72 61 79 28 73 71 6c 69 74 65 33  aseArray(sqlite3
29ec0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
29ed0 43 6f 6d 6d 69 74 49 6e 74 65 72 6e 61 6c 43 68  CommitInternalCh
29ee0 61 6e 67 65 73 28 73 71 6c 69 74 65 33 2a 29 3b  anges(sqlite3*);
29ef0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65 6c  .void sqlite3Del
29f00 65 74 65 43 6f 6c 75 6d 6e 4e 61 6d 65 73 28 73  eteColumnNames(s
29f10 71 6c 69 74 65 33 2a 2c 54 61 62 6c 65 2a 29 3b  qlite3*,Table*);
29f20 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 6f 6c 75  .int sqlite3Colu
29f30 6d 6e 73 46 72 6f 6d 45 78 70 72 4c 69 73 74 28  mnsFromExprList(
29f40 50 61 72 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a  Parse*,ExprList*
29f50 2c 69 31 36 2a 2c 43 6f 6c 75 6d 6e 2a 2a 29 3b  ,i16*,Column**);
29f60 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 65 6c  .void sqlite3Sel
29f70 65 63 74 41 64 64 43 6f 6c 75 6d 6e 54 79 70 65  ectAddColumnType
29f80 41 6e 64 43 6f 6c 6c 61 74 69 6f 6e 28 50 61 72  AndCollation(Par
29f90 73 65 2a 2c 54 61 62 6c 65 2a 2c 53 65 6c 65 63  se*,Table*,Selec
29fa0 74 2a 2c 63 68 61 72 29 3b 0a 54 61 62 6c 65 20  t*,char);.Table 
29fb0 2a 73 71 6c 69 74 65 33 52 65 73 75 6c 74 53 65  *sqlite3ResultSe
29fc0 74 4f 66 53 65 6c 65 63 74 28 50 61 72 73 65 2a  tOfSelect(Parse*
29fd0 2c 53 65 6c 65 63 74 2a 2c 63 68 61 72 29 3b 0a  ,Select*,char);.
29fe0 76 6f 69 64 20 73 71 6c 69 74 65 33 4f 70 65 6e  void sqlite3Open
29ff0 4d 61 73 74 65 72 54 61 62 6c 65 28 50 61 72 73  MasterTable(Pars
2a000 65 20 2a 2c 20 69 6e 74 29 3b 0a 49 6e 64 65 78  e *, int);.Index
2a010 20 2a 73 71 6c 69 74 65 33 50 72 69 6d 61 72 79   *sqlite3Primary
2a020 4b 65 79 49 6e 64 65 78 28 54 61 62 6c 65 2a 29  KeyIndex(Table*)
2a030 3b 0a 69 31 36 20 73 71 6c 69 74 65 33 43 6f 6c  ;.i16 sqlite3Col
2a040 75 6d 6e 4f 66 49 6e 64 65 78 28 49 6e 64 65 78  umnOfIndex(Index
2a050 2a 2c 20 69 31 36 29 3b 0a 76 6f 69 64 20 73 71  *, i16);.void sq
2a060 6c 69 74 65 33 53 74 61 72 74 54 61 62 6c 65 28  lite3StartTable(
2a070 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f  Parse*,Token*,To
2a080 6b 65 6e 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74  ken*,int,int,int
2a090 2c 69 6e 74 29 3b 0a 23 69 66 20 53 51 4c 49 54  ,int);.#if SQLIT
2a0a0 45 5f 45 4e 41 42 4c 45 5f 48 49 44 44 45 4e 5f  E_ENABLE_HIDDEN_
2a0b0 43 4f 4c 55 4d 4e 53 0a 20 20 76 6f 69 64 20 73  COLUMNS.  void s
2a0c0 71 6c 69 74 65 33 43 6f 6c 75 6d 6e 50 72 6f 70  qlite3ColumnProp
2a0d0 65 72 74 69 65 73 46 72 6f 6d 4e 61 6d 65 28 54  ertiesFromName(T
2a0e0 61 62 6c 65 2a 2c 20 43 6f 6c 75 6d 6e 2a 29 3b  able*, Column*);
2a0f0 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
2a100 73 71 6c 69 74 65 33 43 6f 6c 75 6d 6e 50 72 6f  sqlite3ColumnPro
2a110 70 65 72 74 69 65 73 46 72 6f 6d 4e 61 6d 65 28  pertiesFromName(
2a120 54 2c 43 29 20 2f 2a 20 6e 6f 2d 6f 70 20 2a 2f  T,C) /* no-op */
2a130 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c  .#endif.void sql
2a140 69 74 65 33 41 64 64 43 6f 6c 75 6d 6e 28 50 61  ite3AddColumn(Pa
2a150 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65  rse*,Token*,Toke
2a160 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  n*);.void sqlite
2a170 33 41 64 64 4e 6f 74 4e 75 6c 6c 28 50 61 72 73  3AddNotNull(Pars
2a180 65 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  e*, int);.void s
2a190 71 6c 69 74 65 33 41 64 64 50 72 69 6d 61 72 79  qlite3AddPrimary
2a1a0 4b 65 79 28 50 61 72 73 65 2a 2c 20 45 78 70 72  Key(Parse*, Expr
2a1b0 4c 69 73 74 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c  List*, int, int,
2a1c0 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
2a1d0 74 65 33 41 64 64 43 68 65 63 6b 43 6f 6e 73 74  te3AddCheckConst
2a1e0 72 61 69 6e 74 28 50 61 72 73 65 2a 2c 20 45 78  raint(Parse*, Ex
2a1f0 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  pr*);.void sqlit
2a200 65 33 41 64 64 44 65 66 61 75 6c 74 56 61 6c 75  e3AddDefaultValu
2a210 65 28 50 61 72 73 65 2a 2c 45 78 70 72 2a 2c 63  e(Parse*,Expr*,c
2a220 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74  onst char*,const
2a230 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71   char*);.void sq
2a240 6c 69 74 65 33 41 64 64 43 6f 6c 6c 61 74 65 54  lite3AddCollateT
2a250 79 70 65 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65  ype(Parse*, Toke
2a260 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  n*);.void sqlite
2a270 33 45 6e 64 54 61 62 6c 65 28 50 61 72 73 65 2a  3EndTable(Parse*
2a280 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 75  ,Token*,Token*,u
2a290 38 2c 53 65 6c 65 63 74 2a 29 3b 0a 69 6e 74 20  8,Select*);.int 
2a2a0 73 71 6c 69 74 65 33 50 61 72 73 65 55 72 69 28  sqlite3ParseUri(
2a2b0 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73  const char*,cons
2a2c0 74 20 63 68 61 72 2a 2c 75 6e 73 69 67 6e 65 64  t char*,unsigned
2a2d0 20 69 6e 74 2a 2c 0a 20 20 20 20 20 20 20 20 20   int*,.         
2a2e0 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74             sqlit
2a2f0 65 33 5f 76 66 73 2a 2a 2c 63 68 61 72 2a 2a 2c  e3_vfs**,char**,
2a300 63 68 61 72 20 2a 2a 29 3b 0a 23 69 66 64 65 66  char **);.#ifdef
2a310 20 53 51 4c 49 54 45 5f 48 41 53 5f 43 4f 44 45   SQLITE_HAS_CODE
2a320 43 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 43  C.  int sqlite3C
2a330 6f 64 65 63 51 75 65 72 79 50 61 72 61 6d 65 74  odecQueryParamet
2a340 65 72 73 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e  ers(sqlite3*,con
2a350 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63  st char*,const c
2a360 68 61 72 2a 29 3b 0a 23 65 6c 73 65 0a 23 20 64  har*);.#else.# d
2a370 65 66 69 6e 65 20 73 71 6c 69 74 65 33 43 6f 64  efine sqlite3Cod
2a380 65 63 51 75 65 72 79 50 61 72 61 6d 65 74 65 72  ecQueryParameter
2a390 73 28 41 2c 42 2c 43 29 20 30 0a 23 65 6e 64 69  s(A,B,C) 0.#endi
2a3a0 66 0a 42 74 72 65 65 20 2a 73 71 6c 69 74 65 33  f.Btree *sqlite3
2a3b0 44 62 4e 61 6d 65 54 6f 42 74 72 65 65 28 73 71  DbNameToBtree(sq
2a3c0 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61  lite3*,const cha
2a3d0 72 2a 29 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c  r*);..#ifdef SQL
2a3e0 49 54 45 5f 55 4e 54 45 53 54 41 42 4c 45 0a 23  ITE_UNTESTABLE.#
2a3f0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46   define sqlite3F
2a400 61 75 6c 74 53 69 6d 28 58 29 20 53 51 4c 49 54  aultSim(X) SQLIT
2a410 45 5f 4f 4b 0a 23 65 6c 73 65 0a 20 20 69 6e 74  E_OK.#else.  int
2a420 20 73 71 6c 69 74 65 33 46 61 75 6c 74 53 69 6d   sqlite3FaultSim
2a430 28 69 6e 74 29 3b 0a 23 65 6e 64 69 66 0a 0a 42  (int);.#endif..B
2a440 69 74 76 65 63 20 2a 73 71 6c 69 74 65 33 42 69  itvec *sqlite3Bi
2a450 74 76 65 63 43 72 65 61 74 65 28 75 33 32 29 3b  tvecCreate(u32);
2a460 0a 69 6e 74 20 73 71 6c 69 74 65 33 42 69 74 76  .int sqlite3Bitv
2a470 65 63 54 65 73 74 28 42 69 74 76 65 63 2a 2c 20  ecTest(Bitvec*, 
2a480 75 33 32 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  u32);.int sqlite
2a490 33 42 69 74 76 65 63 54 65 73 74 4e 6f 74 4e 75  3BitvecTestNotNu
2a4a0 6c 6c 28 42 69 74 76 65 63 2a 2c 20 75 33 32 29  ll(Bitvec*, u32)
2a4b0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 42 69 74  ;.int sqlite3Bit
2a4c0 76 65 63 53 65 74 28 42 69 74 76 65 63 2a 2c 20  vecSet(Bitvec*, 
2a4d0 75 33 32 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  u32);.void sqlit
2a4e0 65 33 42 69 74 76 65 63 43 6c 65 61 72 28 42 69  e3BitvecClear(Bi
2a4f0 74 76 65 63 2a 2c 20 75 33 32 2c 20 76 6f 69 64  tvec*, u32, void
2a500 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
2a510 42 69 74 76 65 63 44 65 73 74 72 6f 79 28 42 69  BitvecDestroy(Bi
2a520 74 76 65 63 2a 29 3b 0a 75 33 32 20 73 71 6c 69  tvec*);.u32 sqli
2a530 74 65 33 42 69 74 76 65 63 53 69 7a 65 28 42 69  te3BitvecSize(Bi
2a540 74 76 65 63 2a 29 3b 0a 23 69 66 6e 64 65 66 20  tvec*);.#ifndef 
2a550 53 51 4c 49 54 45 5f 55 4e 54 45 53 54 41 42 4c  SQLITE_UNTESTABL
2a560 45 0a 69 6e 74 20 73 71 6c 69 74 65 33 42 69 74  E.int sqlite3Bit
2a570 76 65 63 42 75 69 6c 74 69 6e 54 65 73 74 28 69  vecBuiltinTest(i
2a580 6e 74 2c 69 6e 74 2a 29 3b 0a 23 65 6e 64 69 66  nt,int*);.#endif
2a590 0a 0a 52 6f 77 53 65 74 20 2a 73 71 6c 69 74 65  ..RowSet *sqlite
2a5a0 33 52 6f 77 53 65 74 49 6e 69 74 28 73 71 6c 69  3RowSetInit(sqli
2a5b0 74 65 33 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  te3*);.void sqli
2a5c0 74 65 33 52 6f 77 53 65 74 44 65 6c 65 74 65 28  te3RowSetDelete(
2a5d0 76 6f 69 64 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  void*);.void sql
2a5e0 69 74 65 33 52 6f 77 53 65 74 43 6c 65 61 72 28  ite3RowSetClear(
2a5f0 76 6f 69 64 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  void*);.void sql
2a600 69 74 65 33 52 6f 77 53 65 74 49 6e 73 65 72 74  ite3RowSetInsert
2a610 28 52 6f 77 53 65 74 2a 2c 20 69 36 34 29 3b 0a  (RowSet*, i64);.
2a620 69 6e 74 20 73 71 6c 69 74 65 33 52 6f 77 53 65  int sqlite3RowSe
2a630 74 54 65 73 74 28 52 6f 77 53 65 74 2a 2c 20 69  tTest(RowSet*, i
2a640 6e 74 20 69 42 61 74 63 68 2c 20 69 36 34 29 3b  nt iBatch, i64);
2a650 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 6f 77 53  .int sqlite3RowS
2a660 65 74 4e 65 78 74 28 52 6f 77 53 65 74 2a 2c 20  etNext(RowSet*, 
2a670 69 36 34 2a 29 3b 0a 0a 76 6f 69 64 20 73 71 6c  i64*);..void sql
2a680 69 74 65 33 43 72 65 61 74 65 56 69 65 77 28 50  ite3CreateView(P
2a690 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b  arse*,Token*,Tok
2a6a0 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 45 78 70 72 4c  en*,Token*,ExprL
2a6b0 69 73 74 2a 2c 53 65 6c 65 63 74 2a 2c 69 6e 74  ist*,Select*,int
2a6c0 2c 69 6e 74 29 3b 0a 0a 23 69 66 20 21 64 65 66  ,int);..#if !def
2a6d0 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54  ined(SQLITE_OMIT
2a6e0 5f 56 49 45 57 29 20 7c 7c 20 21 64 65 66 69 6e  _VIEW) || !defin
2a6f0 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  ed(SQLITE_OMIT_V
2a700 49 52 54 55 41 4c 54 41 42 4c 45 29 0a 20 20 69  IRTUALTABLE).  i
2a710 6e 74 20 73 71 6c 69 74 65 33 56 69 65 77 47 65  nt sqlite3ViewGe
2a720 74 43 6f 6c 75 6d 6e 4e 61 6d 65 73 28 50 61 72  tColumnNames(Par
2a730 73 65 2a 2c 54 61 62 6c 65 2a 29 3b 0a 23 65 6c  se*,Table*);.#el
2a740 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  se.# define sqli
2a750 74 65 33 56 69 65 77 47 65 74 43 6f 6c 75 6d 6e  te3ViewGetColumn
2a760 4e 61 6d 65 73 28 41 2c 42 29 20 30 0a 23 65 6e  Names(A,B) 0.#en
2a770 64 69 66 0a 0a 23 69 66 20 53 51 4c 49 54 45 5f  dif..#if SQLITE_
2a780 4d 41 58 5f 41 54 54 41 43 48 45 44 3e 33 30 0a  MAX_ATTACHED>30.
2a790 20 20 69 6e 74 20 73 71 6c 69 74 65 33 44 62 4d    int sqlite3DbM
2a7a0 61 73 6b 41 6c 6c 5a 65 72 6f 28 79 44 62 4d 61  askAllZero(yDbMa
2a7b0 73 6b 29 3b 0a 23 65 6e 64 69 66 0a 76 6f 69 64  sk);.#endif.void
2a7c0 20 73 71 6c 69 74 65 33 44 72 6f 70 54 61 62 6c   sqlite3DropTabl
2a7d0 65 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73  e(Parse*, SrcLis
2a7e0 74 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76  t*, int, int);.v
2a7f0 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 64 65 44  oid sqlite3CodeD
2a800 72 6f 70 54 61 62 6c 65 28 50 61 72 73 65 2a 2c  ropTable(Parse*,
2a810 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e   Table*, int, in
2a820 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
2a830 44 65 6c 65 74 65 54 61 62 6c 65 28 73 71 6c 69  DeleteTable(sqli
2a840 74 65 33 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a 76  te3*, Table*);.v
2a850 6f 69 64 20 73 71 6c 69 74 65 33 46 72 65 65 49  oid sqlite3FreeI
2a860 6e 64 65 78 28 73 71 6c 69 74 65 33 2a 2c 20 49  ndex(sqlite3*, I
2a870 6e 64 65 78 2a 29 3b 0a 23 69 66 6e 64 65 66 20  ndex*);.#ifndef 
2a880 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f  SQLITE_OMIT_AUTO
2a890 49 4e 43 52 45 4d 45 4e 54 0a 20 20 76 6f 69 64  INCREMENT.  void
2a8a0 20 73 71 6c 69 74 65 33 41 75 74 6f 69 6e 63 72   sqlite3Autoincr
2a8b0 65 6d 65 6e 74 42 65 67 69 6e 28 50 61 72 73 65  ementBegin(Parse
2a8c0 20 2a 70 50 61 72 73 65 29 3b 0a 20 20 76 6f 69   *pParse);.  voi
2a8d0 64 20 73 71 6c 69 74 65 33 41 75 74 6f 69 6e 63  d sqlite3Autoinc
2a8e0 72 65 6d 65 6e 74 45 6e 64 28 50 61 72 73 65 20  rementEnd(Parse 
2a8f0 2a 70 50 61 72 73 65 29 3b 0a 23 65 6c 73 65 0a  *pParse);.#else.
2a900 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
2a910 41 75 74 6f 69 6e 63 72 65 6d 65 6e 74 42 65 67  AutoincrementBeg
2a920 69 6e 28 58 29 0a 23 20 64 65 66 69 6e 65 20 73  in(X).# define s
2a930 71 6c 69 74 65 33 41 75 74 6f 69 6e 63 72 65 6d  qlite3Autoincrem
2a940 65 6e 74 45 6e 64 28 58 29 0a 23 65 6e 64 69 66  entEnd(X).#endif
2a950 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 49 6e 73  .void sqlite3Ins
2a960 65 72 74 28 50 61 72 73 65 2a 2c 20 53 72 63 4c  ert(Parse*, SrcL
2a970 69 73 74 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 49  ist*, Select*, I
2a980 64 4c 69 73 74 2a 2c 20 69 6e 74 2c 20 55 70 73  dList*, int, Ups
2a990 65 72 74 2a 29 3b 0a 76 6f 69 64 20 2a 73 71 6c  ert*);.void *sql
2a9a0 69 74 65 33 41 72 72 61 79 41 6c 6c 6f 63 61 74  ite3ArrayAllocat
2a9b0 65 28 73 71 6c 69 74 65 33 2a 2c 76 6f 69 64 2a  e(sqlite3*,void*
2a9c0 2c 69 6e 74 2c 69 6e 74 2a 2c 69 6e 74 2a 29 3b  ,int,int*,int*);
2a9d0 0a 49 64 4c 69 73 74 20 2a 73 71 6c 69 74 65 33  .IdList *sqlite3
2a9e0 49 64 4c 69 73 74 41 70 70 65 6e 64 28 50 61 72  IdListAppend(Par
2a9f0 73 65 2a 2c 20 49 64 4c 69 73 74 2a 2c 20 54 6f  se*, IdList*, To
2aa00 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ken*);.int sqlit
2aa10 65 33 49 64 4c 69 73 74 49 6e 64 65 78 28 49 64  e3IdListIndex(Id
2aa20 4c 69 73 74 2a 2c 63 6f 6e 73 74 20 63 68 61 72  List*,const char
2aa30 2a 29 3b 0a 53 72 63 4c 69 73 74 20 2a 73 71 6c  *);.SrcList *sql
2aa40 69 74 65 33 53 72 63 4c 69 73 74 45 6e 6c 61 72  ite3SrcListEnlar
2aa50 67 65 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69  ge(Parse*, SrcLi
2aa60 73 74 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  st*, int, int);.
2aa70 53 72 63 4c 69 73 74 20 2a 73 71 6c 69 74 65 33  SrcList *sqlite3
2aa80 53 72 63 4c 69 73 74 41 70 70 65 6e 64 28 50 61  SrcListAppend(Pa
2aa90 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20  rse*, SrcList*, 
2aaa0 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 29 3b  Token*, Token*);
2aab0 0a 53 72 63 4c 69 73 74 20 2a 73 71 6c 69 74 65  .SrcList *sqlite
2aac0 33 53 72 63 4c 69 73 74 41 70 70 65 6e 64 46 72  3SrcListAppendFr
2aad0 6f 6d 54 65 72 6d 28 50 61 72 73 65 2a 2c 20 53  omTerm(Parse*, S
2aae0 72 63 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 2c  rcList*, Token*,
2aaf0 20 54 6f 6b 65 6e 2a 2c 0a 20 20 20 20 20 20 20   Token*,.       
2ab00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ab10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
2ab20 6f 6b 65 6e 2a 2c 20 53 65 6c 65 63 74 2a 2c 20  oken*, Select*, 
2ab30 45 78 70 72 2a 2c 20 49 64 4c 69 73 74 2a 29 3b  Expr*, IdList*);
2ab40 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 72 63  .void sqlite3Src
2ab50 4c 69 73 74 49 6e 64 65 78 65 64 42 79 28 50 61  ListIndexedBy(Pa
2ab60 72 73 65 20 2a 2c 20 53 72 63 4c 69 73 74 20 2a  rse *, SrcList *
2ab70 2c 20 54 6f 6b 65 6e 20 2a 29 3b 0a 76 6f 69 64  , Token *);.void
2ab80 20 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74 46   sqlite3SrcListF
2ab90 75 6e 63 41 72 67 73 28 50 61 72 73 65 2a 2c 20  uncArgs(Parse*, 
2aba0 53 72 63 4c 69 73 74 2a 2c 20 45 78 70 72 4c 69  SrcList*, ExprLi
2abb0 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  st*);.int sqlite
2abc0 33 49 6e 64 65 78 65 64 42 79 4c 6f 6f 6b 75 70  3IndexedByLookup
2abd0 28 50 61 72 73 65 20 2a 2c 20 73 74 72 75 63 74  (Parse *, struct
2abe0 20 53 72 63 4c 69 73 74 5f 69 74 65 6d 20 2a 29   SrcList_item *)
2abf0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 72  ;.void sqlite3Sr
2ac00 63 4c 69 73 74 53 68 69 66 74 4a 6f 69 6e 54 79  cListShiftJoinTy
2ac10 70 65 28 53 72 63 4c 69 73 74 2a 29 3b 0a 76 6f  pe(SrcList*);.vo
2ac20 69 64 20 73 71 6c 69 74 65 33 53 72 63 4c 69 73  id sqlite3SrcLis
2ac30 74 41 73 73 69 67 6e 43 75 72 73 6f 72 73 28 50  tAssignCursors(P
2ac40 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 29  arse*, SrcList*)
2ac50 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 49 64  ;.void sqlite3Id
2ac60 4c 69 73 74 44 65 6c 65 74 65 28 73 71 6c 69 74  ListDelete(sqlit
2ac70 65 33 2a 2c 20 49 64 4c 69 73 74 2a 29 3b 0a 76  e3*, IdList*);.v
2ac80 6f 69 64 20 73 71 6c 69 74 65 33 53 72 63 4c 69  oid sqlite3SrcLi
2ac90 73 74 44 65 6c 65 74 65 28 73 71 6c 69 74 65 33  stDelete(sqlite3
2aca0 2a 2c 20 53 72 63 4c 69 73 74 2a 29 3b 0a 49 6e  *, SrcList*);.In
2acb0 64 65 78 20 2a 73 71 6c 69 74 65 33 41 6c 6c 6f  dex *sqlite3Allo
2acc0 63 61 74 65 49 6e 64 65 78 4f 62 6a 65 63 74 28  cateIndexObject(
2acd0 73 71 6c 69 74 65 33 2a 2c 69 31 36 2c 69 6e 74  sqlite3*,i16,int
2ace0 2c 63 68 61 72 2a 2a 29 3b 0a 76 6f 69 64 20 73  ,char**);.void s
2acf0 71 6c 69 74 65 33 43 72 65 61 74 65 49 6e 64 65  qlite3CreateInde
2ad00 78 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c  x(Parse*,Token*,
2ad10 54 6f 6b 65 6e 2a 2c 53 72 63 4c 69 73 74 2a 2c  Token*,SrcList*,
2ad20 45 78 70 72 4c 69 73 74 2a 2c 69 6e 74 2c 54 6f  ExprList*,int,To
2ad30 6b 65 6e 2a 2c 0a 20 20 20 20 20 20 20 20 20 20  ken*,.          
2ad40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ad50 45 78 70 72 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c  Expr*, int, int,
2ad60 20 75 38 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74   u8);.void sqlit
2ad70 65 33 44 72 6f 70 49 6e 64 65 78 28 50 61 72 73  e3DropIndex(Pars
2ad80 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 69 6e  e*, SrcList*, in
2ad90 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53  t);.int sqlite3S
2ada0 65 6c 65 63 74 28 50 61 72 73 65 2a 2c 20 53 65  elect(Parse*, Se
2adb0 6c 65 63 74 2a 2c 20 53 65 6c 65 63 74 44 65 73  lect*, SelectDes
2adc0 74 2a 29 3b 0a 53 65 6c 65 63 74 20 2a 73 71 6c  t*);.Select *sql
2add0 69 74 65 33 53 65 6c 65 63 74 4e 65 77 28 50 61  ite3SelectNew(Pa
2ade0 72 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 53  rse*,ExprList*,S
2adf0 72 63 4c 69 73 74 2a 2c 45 78 70 72 2a 2c 45 78  rcList*,Expr*,Ex
2ae00 70 72 4c 69 73 74 2a 2c 0a 20 20 20 20 20 20 20  prList*,.       
2ae10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ae20 20 20 45 78 70 72 2a 2c 45 78 70 72 4c 69 73 74    Expr*,ExprList
2ae30 2a 2c 75 33 32 2c 45 78 70 72 2a 29 3b 0a 76 6f  *,u32,Expr*);.vo
2ae40 69 64 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74  id sqlite3Select
2ae50 44 65 6c 65 74 65 28 73 71 6c 69 74 65 33 2a 2c  Delete(sqlite3*,
2ae60 20 53 65 6c 65 63 74 2a 29 3b 0a 54 61 62 6c 65   Select*);.Table
2ae70 20 2a 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74   *sqlite3SrcList
2ae80 4c 6f 6f 6b 75 70 28 50 61 72 73 65 2a 2c 20 53  Lookup(Parse*, S
2ae90 72 63 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71  rcList*);.int sq
2aea0 6c 69 74 65 33 49 73 52 65 61 64 4f 6e 6c 79 28  lite3IsReadOnly(
2aeb0 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20  Parse*, Table*, 
2aec0 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
2aed0 65 33 4f 70 65 6e 54 61 62 6c 65 28 50 61 72 73  e3OpenTable(Pars
2aee0 65 2a 2c 20 69 6e 74 20 69 43 75 72 2c 20 69 6e  e*, int iCur, in
2aef0 74 20 69 44 62 2c 20 54 61 62 6c 65 2a 2c 20 69  t iDb, Table*, i
2af00 6e 74 29 3b 0a 23 69 66 20 64 65 66 69 6e 65 64  nt);.#if defined
2af10 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 55  (SQLITE_ENABLE_U
2af20 50 44 41 54 45 5f 44 45 4c 45 54 45 5f 4c 49 4d  PDATE_DELETE_LIM
2af30 49 54 29 20 26 26 20 21 64 65 66 69 6e 65 64 28  IT) && !defined(
2af40 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 55 42 51  SQLITE_OMIT_SUBQ
2af50 55 45 52 59 29 0a 45 78 70 72 20 2a 73 71 6c 69  UERY).Expr *sqli
2af60 74 65 33 4c 69 6d 69 74 57 68 65 72 65 28 50 61  te3LimitWhere(Pa
2af70 72 73 65 2a 2c 53 72 63 4c 69 73 74 2a 2c 45 78  rse*,SrcList*,Ex
2af80 70 72 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 45 78  pr*,ExprList*,Ex
2af90 70 72 2a 2c 63 68 61 72 2a 29 3b 0a 23 65 6e 64  pr*,char*);.#end
2afa0 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44  if.void sqlite3D
2afb0 65 6c 65 74 65 46 72 6f 6d 28 50 61 72 73 65 2a  eleteFrom(Parse*
2afc0 2c 20 53 72 63 4c 69 73 74 2a 2c 20 45 78 70 72  , SrcList*, Expr
2afd0 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 45 78  *, ExprList*, Ex
2afe0 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  pr*);.void sqlit
2aff0 65 33 55 70 64 61 74 65 28 50 61 72 73 65 2a 2c  e3Update(Parse*,
2b000 20 53 72 63 4c 69 73 74 2a 2c 20 45 78 70 72 4c   SrcList*, ExprL
2b010 69 73 74 2a 2c 45 78 70 72 2a 2c 69 6e 74 2c 45  ist*,Expr*,int,E
2b020 78 70 72 4c 69 73 74 2a 2c 45 78 70 72 2a 2c 0a  xprList*,Expr*,.
2b030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b040 20 20 20 55 70 73 65 72 74 2a 29 3b 0a 57 68 65     Upsert*);.Whe
2b050 72 65 49 6e 66 6f 20 2a 73 71 6c 69 74 65 33 57  reInfo *sqlite3W
2b060 68 65 72 65 42 65 67 69 6e 28 50 61 72 73 65 2a  hereBegin(Parse*
2b070 2c 53 72 63 4c 69 73 74 2a 2c 45 78 70 72 2a 2c  ,SrcList*,Expr*,
2b080 45 78 70 72 4c 69 73 74 2a 2c 45 78 70 72 4c 69  ExprList*,ExprLi
2b090 73 74 2a 2c 75 31 36 2c 69 6e 74 29 3b 0a 76 6f  st*,u16,int);.vo
2b0a0 69 64 20 73 71 6c 69 74 65 33 57 68 65 72 65 45  id sqlite3WhereE
2b0b0 6e 64 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a  nd(WhereInfo*);.
2b0c0 4c 6f 67 45 73 74 20 73 71 6c 69 74 65 33 57 68  LogEst sqlite3Wh
2b0d0 65 72 65 4f 75 74 70 75 74 52 6f 77 43 6f 75 6e  ereOutputRowCoun
2b0e0 74 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69  t(WhereInfo*);.i
2b0f0 6e 74 20 73 71 6c 69 74 65 33 57 68 65 72 65 49  nt sqlite3WhereI
2b100 73 44 69 73 74 69 6e 63 74 28 57 68 65 72 65 49  sDistinct(WhereI
2b110 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  nfo*);.int sqlit
2b120 65 33 57 68 65 72 65 49 73 4f 72 64 65 72 65 64  e3WhereIsOrdered
2b130 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e  (WhereInfo*);.in
2b140 74 20 73 71 6c 69 74 65 33 57 68 65 72 65 4f 72  t sqlite3WhereOr
2b150 64 65 72 42 79 4c 69 6d 69 74 4f 70 74 4c 61 62  derByLimitOptLab
2b160 65 6c 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a  el(WhereInfo*);.
2b170 69 6e 74 20 73 71 6c 69 74 65 33 57 68 65 72 65  int sqlite3Where
2b180 49 73 53 6f 72 74 65 64 28 57 68 65 72 65 49 6e  IsSorted(WhereIn
2b190 66 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  fo*);.int sqlite
2b1a0 33 57 68 65 72 65 43 6f 6e 74 69 6e 75 65 4c 61  3WhereContinueLa
2b1b0 62 65 6c 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b  bel(WhereInfo*);
2b1c0 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 68 65 72  .int sqlite3Wher
2b1d0 65 42 72 65 61 6b 4c 61 62 65 6c 28 57 68 65 72  eBreakLabel(Wher
2b1e0 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c  eInfo*);.int sql
2b1f0 69 74 65 33 57 68 65 72 65 4f 6b 4f 6e 65 50 61  ite3WhereOkOnePa
2b200 73 73 28 57 68 65 72 65 49 6e 66 6f 2a 2c 20 69  ss(WhereInfo*, i
2b210 6e 74 2a 29 3b 0a 23 64 65 66 69 6e 65 20 4f 4e  nt*);.#define ON
2b220 45 50 41 53 53 5f 4f 46 46 20 20 20 20 20 20 30  EPASS_OFF      0
2b230 20 20 20 20 20 20 20 20 2f 2a 20 55 73 65 20 6f          /* Use o
2b240 66 20 4f 4e 45 50 41 53 53 20 6e 6f 74 20 61 6c  f ONEPASS not al
2b250 6c 6f 77 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65  lowed */.#define
2b260 20 4f 4e 45 50 41 53 53 5f 53 49 4e 47 4c 45 20   ONEPASS_SINGLE 
2b270 20 20 31 20 20 20 20 20 20 20 20 2f 2a 20 4f 4e    1        /* ON
2b280 45 50 41 53 53 20 76 61 6c 69 64 20 66 6f 72 20  EPASS valid for 
2b290 61 20 73 69 6e 67 6c 65 20 72 6f 77 20 75 70 64  a single row upd
2b2a0 61 74 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  ate */.#define O
2b2b0 4e 45 50 41 53 53 5f 4d 55 4c 54 49 20 20 20 20  NEPASS_MULTI    
2b2c0 32 20 20 20 20 20 20 20 20 2f 2a 20 4f 4e 45 50  2        /* ONEP
2b2d0 41 53 53 20 69 73 20 76 61 6c 69 64 20 66 6f 72  ASS is valid for
2b2e0 20 6d 75 6c 74 69 70 6c 65 20 72 6f 77 73 20 2a   multiple rows *
2b2f0 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  /.void sqlite3Ex
2b300 70 72 43 6f 64 65 4c 6f 61 64 49 6e 64 65 78 43  prCodeLoadIndexC
2b310 6f 6c 75 6d 6e 28 50 61 72 73 65 2a 2c 20 49 6e  olumn(Parse*, In
2b320 64 65 78 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20  dex*, int, int, 
2b330 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  int);.int sqlite
2b340 33 45 78 70 72 43 6f 64 65 47 65 74 43 6f 6c 75  3ExprCodeGetColu
2b350 6d 6e 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65  mn(Parse*, Table
2b360 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74  *, int, int, int
2b370 2c 20 75 38 29 3b 0a 76 6f 69 64 20 73 71 6c 69  , u8);.void sqli
2b380 74 65 33 45 78 70 72 43 6f 64 65 47 65 74 43 6f  te3ExprCodeGetCo
2b390 6c 75 6d 6e 4f 66 54 61 62 6c 65 28 56 64 62 65  lumnOfTable(Vdbe
2b3a0 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20  *, Table*, int, 
2b3b0 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  int, int);.void 
2b3c0 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 4d  sqlite3ExprCodeM
2b3d0 6f 76 65 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c  ove(Parse*, int,
2b3e0 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64   int, int);.void
2b3f0 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65   sqlite3ExprCode
2b400 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20  (Parse*, Expr*, 
2b410 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
2b420 65 33 45 78 70 72 43 6f 64 65 43 6f 70 79 28 50  e3ExprCodeCopy(P
2b430 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e  arse*, Expr*, in
2b440 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
2b450 45 78 70 72 43 6f 64 65 46 61 63 74 6f 72 61 62  ExprCodeFactorab
2b460 6c 65 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a  le(Parse*, Expr*
2b470 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69  , int);.int sqli
2b480 74 65 33 45 78 70 72 43 6f 64 65 41 74 49 6e 69  te3ExprCodeAtIni
2b490 74 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c  t(Parse*, Expr*,
2b4a0 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74   int);.int sqlit
2b4b0 65 33 45 78 70 72 43 6f 64 65 54 65 6d 70 28 50  e3ExprCodeTemp(P
2b4c0 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e  arse*, Expr*, in
2b4d0 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  t*);.int sqlite3
2b4e0 45 78 70 72 43 6f 64 65 54 61 72 67 65 74 28 50  ExprCodeTarget(P
2b4f0 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e  arse*, Expr*, in
2b500 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
2b510 45 78 70 72 43 6f 64 65 41 6e 64 43 61 63 68 65  ExprCodeAndCache
2b520 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20  (Parse*, Expr*, 
2b530 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  int);.int sqlite
2b540 33 45 78 70 72 43 6f 64 65 45 78 70 72 4c 69 73  3ExprCodeExprLis
2b550 74 28 50 61 72 73 65 2a 2c 20 45 78 70 72 4c 69  t(Parse*, ExprLi
2b560 73 74 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 75  st*, int, int, u
2b570 38 29 3b 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  8);.#define SQLI
2b580 54 45 5f 45 43 45 4c 5f 44 55 50 20 20 20 20 20  TE_ECEL_DUP     
2b590 20 30 78 30 31 20 20 2f 2a 20 44 65 65 70 2c 20   0x01  /* Deep, 
2b5a0 6e 6f 74 20 73 68 61 6c 6c 6f 77 20 63 6f 70 69  not shallow copi
2b5b0 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  es */.#define SQ
2b5c0 4c 49 54 45 5f 45 43 45 4c 5f 46 41 43 54 4f 52  LITE_ECEL_FACTOR
2b5d0 20 20 20 30 78 30 32 20 20 2f 2a 20 46 61 63 74     0x02  /* Fact
2b5e0 6f 72 20 6f 75 74 20 63 6f 6e 73 74 61 6e 74 20  or out constant 
2b5f0 74 65 72 6d 73 20 2a 2f 0a 23 64 65 66 69 6e 65  terms */.#define
2b600 20 53 51 4c 49 54 45 5f 45 43 45 4c 5f 52 45 46   SQLITE_ECEL_REF
2b610 20 20 20 20 20 20 30 78 30 34 20 20 2f 2a 20 55        0x04  /* U
2b620 73 65 20 45 78 70 72 4c 69 73 74 2e 75 2e 78 2e  se ExprList.u.x.
2b630 69 4f 72 64 65 72 42 79 43 6f 6c 20 2a 2f 0a 23  iOrderByCol */.#
2b640 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 43  define SQLITE_EC
2b650 45 4c 5f 4f 4d 49 54 52 45 46 20 20 30 78 30 38  EL_OMITREF  0x08
2b660 20 20 2f 2a 20 4f 6d 69 74 20 69 66 20 45 78 70    /* Omit if Exp
2b670 72 4c 69 73 74 2e 75 2e 78 2e 69 4f 72 64 65 72  rList.u.x.iOrder
2b680 42 79 43 6f 6c 20 2a 2f 0a 76 6f 69 64 20 73 71  ByCol */.void sq
2b690 6c 69 74 65 33 45 78 70 72 49 66 54 72 75 65 28  lite3ExprIfTrue(
2b6a0 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69  Parse*, Expr*, i
2b6b0 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  nt, int);.void s
2b6c0 71 6c 69 74 65 33 45 78 70 72 49 66 46 61 6c 73  qlite3ExprIfFals
2b6d0 65 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c  e(Parse*, Expr*,
2b6e0 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64   int, int);.void
2b6f0 20 73 71 6c 69 74 65 33 45 78 70 72 49 66 46 61   sqlite3ExprIfFa
2b700 6c 73 65 44 75 70 28 50 61 72 73 65 2a 2c 20 45  lseDup(Parse*, E
2b710 78 70 72 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b  xpr*, int, int);
2b720 0a 54 61 62 6c 65 20 2a 73 71 6c 69 74 65 33 46  .Table *sqlite3F
2b730 69 6e 64 54 61 62 6c 65 28 73 71 6c 69 74 65 33  indTable(sqlite3
2b740 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63  *,const char*, c
2b750 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 23 64 65  onst char*);.#de
2b760 66 69 6e 65 20 4c 4f 43 41 54 45 5f 56 49 45 57  fine LOCATE_VIEW
2b770 20 20 20 20 30 78 30 31 0a 23 64 65 66 69 6e 65      0x01.#define
2b780 20 4c 4f 43 41 54 45 5f 4e 4f 45 52 52 20 20 20   LOCATE_NOERR   
2b790 30 78 30 32 0a 54 61 62 6c 65 20 2a 73 71 6c 69  0x02.Table *sqli
2b7a0 74 65 33 4c 6f 63 61 74 65 54 61 62 6c 65 28 50  te3LocateTable(P
2b7b0 61 72 73 65 2a 2c 75 33 32 20 66 6c 61 67 73 2c  arse*,u32 flags,
2b7c0 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e  const char*, con
2b7d0 73 74 20 63 68 61 72 2a 29 3b 0a 54 61 62 6c 65  st char*);.Table
2b7e0 20 2a 73 71 6c 69 74 65 33 4c 6f 63 61 74 65 54   *sqlite3LocateT
2b7f0 61 62 6c 65 49 74 65 6d 28 50 61 72 73 65 2a 2c  ableItem(Parse*,
2b800 75 33 32 20 66 6c 61 67 73 2c 73 74 72 75 63 74  u32 flags,struct
2b810 20 53 72 63 4c 69 73 74 5f 69 74 65 6d 20 2a 29   SrcList_item *)
2b820 3b 0a 49 6e 64 65 78 20 2a 73 71 6c 69 74 65 33  ;.Index *sqlite3
2b830 46 69 6e 64 49 6e 64 65 78 28 73 71 6c 69 74 65  FindIndex(sqlite
2b840 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  3*,const char*, 
2b850 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f  const char*);.vo
2b860 69 64 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b  id sqlite3Unlink
2b870 41 6e 64 44 65 6c 65 74 65 54 61 62 6c 65 28 73  AndDeleteTable(s
2b880 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73  qlite3*,int,cons
2b890 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73  t char*);.void s
2b8a0 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44  qlite3UnlinkAndD
2b8b0 65 6c 65 74 65 49 6e 64 65 78 28 73 71 6c 69 74  eleteIndex(sqlit
2b8c0 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68  e3*,int,const ch
2b8d0 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  ar*);.void sqlit
2b8e0 65 33 56 61 63 75 75 6d 28 50 61 72 73 65 2a 2c  e3Vacuum(Parse*,
2b8f0 54 6f 6b 65 6e 2a 2c 45 78 70 72 2a 29 3b 0a 69  Token*,Expr*);.i
2b900 6e 74 20 73 71 6c 69 74 65 33 52 75 6e 56 61 63  nt sqlite3RunVac
2b910 75 75 6d 28 63 68 61 72 2a 2a 2c 20 73 71 6c 69  uum(char**, sqli
2b920 74 65 33 2a 2c 20 69 6e 74 2c 20 73 71 6c 69 74  te3*, int, sqlit
2b930 65 33 5f 76 61 6c 75 65 2a 29 3b 0a 63 68 61 72  e3_value*);.char
2b940 20 2a 73 71 6c 69 74 65 33 4e 61 6d 65 46 72 6f   *sqlite3NameFro
2b950 6d 54 6f 6b 65 6e 28 73 71 6c 69 74 65 33 2a 2c  mToken(sqlite3*,
2b960 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71   Token*);.int sq
2b970 6c 69 74 65 33 45 78 70 72 43 6f 6d 70 61 72 65  lite3ExprCompare
2b980 28 50 61 72 73 65 2a 2c 45 78 70 72 2a 2c 20 45  (Parse*,Expr*, E
2b990 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20  xpr*, int);.int 
2b9a0 73 71 6c 69 74 65 33 45 78 70 72 43 6f 6d 70 61  sqlite3ExprCompa
2b9b0 72 65 53 6b 69 70 28 45 78 70 72 2a 2c 20 45 78  reSkip(Expr*, Ex
2b9c0 70 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73  pr*, int);.int s
2b9d0 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74 43 6f  qlite3ExprListCo
2b9e0 6d 70 61 72 65 28 45 78 70 72 4c 69 73 74 2a 2c  mpare(ExprList*,
2b9f0 20 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74 29   ExprList*, int)
2ba00 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70  ;.int sqlite3Exp
2ba10 72 49 6d 70 6c 69 65 73 45 78 70 72 28 50 61 72  rImpliesExpr(Par
2ba20 73 65 2a 2c 45 78 70 72 2a 2c 20 45 78 70 72 2a  se*,Expr*, Expr*
2ba30 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69  , int);.int sqli
2ba40 74 65 33 45 78 70 72 49 6d 70 6c 69 65 73 4e 6f  te3ExprImpliesNo
2ba50 6e 4e 75 6c 6c 52 6f 77 28 45 78 70 72 2a 2c 69  nNullRow(Expr*,i
2ba60 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
2ba70 33 45 78 70 72 41 6e 61 6c 79 7a 65 41 67 67 72  3ExprAnalyzeAggr
2ba80 65 67 61 74 65 73 28 4e 61 6d 65 43 6f 6e 74 65  egates(NameConte
2ba90 78 74 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69  xt*, Expr*);.voi
2baa0 64 20 73 71 6c 69 74 65 33 45 78 70 72 41 6e 61  d sqlite3ExprAna
2bab0 6c 79 7a 65 41 67 67 4c 69 73 74 28 4e 61 6d 65  lyzeAggList(Name
2bac0 43 6f 6e 74 65 78 74 2a 2c 45 78 70 72 4c 69 73  Context*,ExprLis
2bad0 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  t*);.int sqlite3
2bae0 45 78 70 72 43 6f 76 65 72 65 64 42 79 49 6e 64  ExprCoveredByInd
2baf0 65 78 28 45 78 70 72 2a 2c 20 69 6e 74 20 69 43  ex(Expr*, int iC
2bb00 75 72 2c 20 49 6e 64 65 78 20 2a 70 49 64 78 29  ur, Index *pIdx)
2bb10 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 75 6e  ;.int sqlite3Fun
2bb20 63 74 69 6f 6e 55 73 65 73 54 68 69 73 53 72 63  ctionUsesThisSrc
2bb30 28 45 78 70 72 2a 2c 20 53 72 63 4c 69 73 74 2a  (Expr*, SrcList*
2bb40 29 3b 0a 56 64 62 65 20 2a 73 71 6c 69 74 65 33  );.Vdbe *sqlite3
2bb50 47 65 74 56 64 62 65 28 50 61 72 73 65 2a 29 3b  GetVdbe(Parse*);
2bb60 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
2bb70 55 4e 54 45 53 54 41 42 4c 45 0a 76 6f 69 64 20  UNTESTABLE.void 
2bb80 73 71 6c 69 74 65 33 50 72 6e 67 53 61 76 65 53  sqlite3PrngSaveS
2bb90 74 61 74 65 28 76 6f 69 64 29 3b 0a 76 6f 69 64  tate(void);.void
2bba0 20 73 71 6c 69 74 65 33 50 72 6e 67 52 65 73 74   sqlite3PrngRest
2bbb0 6f 72 65 53 74 61 74 65 28 76 6f 69 64 29 3b 0a  oreState(void);.
2bbc0 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c 69  #endif.void sqli
2bbd0 74 65 33 52 6f 6c 6c 62 61 63 6b 41 6c 6c 28 73  te3RollbackAll(s
2bbe0 71 6c 69 74 65 33 2a 2c 69 6e 74 29 3b 0a 76 6f  qlite3*,int);.vo
2bbf0 69 64 20 73 71 6c 69 74 65 33 43 6f 64 65 56 65  id sqlite3CodeVe
2bc00 72 69 66 79 53 63 68 65 6d 61 28 50 61 72 73 65  rifySchema(Parse
2bc10 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  *, int);.void sq
2bc20 6c 69 74 65 33 43 6f 64 65 56 65 72 69 66 79 4e  lite3CodeVerifyN
2bc30 61 6d 65 64 53 63 68 65 6d 61 28 50 61 72 73 65  amedSchema(Parse
2bc40 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  *, const char *z
2bc50 44 62 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  Db);.void sqlite
2bc60 33 42 65 67 69 6e 54 72 61 6e 73 61 63 74 69 6f  3BeginTransactio
2bc70 6e 28 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a  n(Parse*, int);.
2bc80 76 6f 69 64 20 73 71 6c 69 74 65 33 45 6e 64 54  void sqlite3EndT
2bc90 72 61 6e 73 61 63 74 69 6f 6e 28 50 61 72 73 65  ransaction(Parse
2bca0 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  *,int);.void sql
2bcb0 69 74 65 33 53 61 76 65 70 6f 69 6e 74 28 50 61  ite3Savepoint(Pa
2bcc0 72 73 65 2a 2c 20 69 6e 74 2c 20 54 6f 6b 65 6e  rse*, int, Token
2bcd0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
2bce0 43 6c 6f 73 65 53 61 76 65 70 6f 69 6e 74 73 28  CloseSavepoints(
2bcf0 73 71 6c 69 74 65 33 20 2a 29 3b 0a 76 6f 69 64  sqlite3 *);.void
2bd00 20 73 71 6c 69 74 65 33 4c 65 61 76 65 4d 75 74   sqlite3LeaveMut
2bd10 65 78 41 6e 64 43 6c 6f 73 65 5a 6f 6d 62 69 65  exAndCloseZombie
2bd20 28 73 71 6c 69 74 65 33 2a 29 3b 0a 69 6e 74 20  (sqlite3*);.int 
2bd30 73 71 6c 69 74 65 33 45 78 70 72 49 64 54 6f 54  sqlite3ExprIdToT
2bd40 72 75 65 46 61 6c 73 65 28 45 78 70 72 2a 29 3b  rueFalse(Expr*);
2bd50 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72  .int sqlite3Expr
2bd60 54 72 75 74 68 56 61 6c 75 65 28 63 6f 6e 73 74  TruthValue(const
2bd70 20 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c   Expr*);.int sql
2bd80 69 74 65 33 45 78 70 72 49 73 43 6f 6e 73 74 61  ite3ExprIsConsta
2bd90 6e 74 28 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73  nt(Expr*);.int s
2bda0 71 6c 69 74 65 33 45 78 70 72 49 73 43 6f 6e 73  qlite3ExprIsCons
2bdb0 74 61 6e 74 4e 6f 74 4a 6f 69 6e 28 45 78 70 72  tantNotJoin(Expr
2bdc0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45  *);.int sqlite3E
2bdd0 78 70 72 49 73 43 6f 6e 73 74 61 6e 74 4f 72 46  xprIsConstantOrF
2bde0 75 6e 63 74 69 6f 6e 28 45 78 70 72 2a 2c 20 75  unction(Expr*, u
2bdf0 38 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45  8);.int sqlite3E
2be00 78 70 72 49 73 43 6f 6e 73 74 61 6e 74 4f 72 47  xprIsConstantOrG
2be10 72 6f 75 70 42 79 28 50 61 72 73 65 2a 2c 20 45  roupBy(Parse*, E
2be20 78 70 72 2a 2c 20 45 78 70 72 4c 69 73 74 2a 29  xpr*, ExprList*)
2be30 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70  ;.int sqlite3Exp
2be40 72 49 73 54 61 62 6c 65 43 6f 6e 73 74 61 6e 74  rIsTableConstant
2be50 28 45 78 70 72 2a 2c 69 6e 74 29 3b 0a 23 69 66  (Expr*,int);.#if
2be60 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  def SQLITE_ENABL
2be70 45 5f 43 55 52 53 4f 52 5f 48 49 4e 54 53 0a 69  E_CURSOR_HINTS.i
2be80 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f  nt sqlite3ExprCo
2be90 6e 74 61 69 6e 73 53 75 62 71 75 65 72 79 28 45  ntainsSubquery(E
2bea0 78 70 72 2a 29 3b 0a 23 65 6e 64 69 66 0a 69 6e  xpr*);.#endif.in
2beb0 74 20 73 71 6c 69 74 65 33 45 78 70 72 49 73 49  t sqlite3ExprIsI
2bec0 6e 74 65 67 65 72 28 45 78 70 72 2a 2c 20 69 6e  nteger(Expr*, in
2bed0 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  t*);.int sqlite3
2bee0 45 78 70 72 43 61 6e 42 65 4e 75 6c 6c 28 63 6f  ExprCanBeNull(co
2bef0 6e 73 74 20 45 78 70 72 2a 29 3b 0a 69 6e 74 20  nst Expr*);.int 
2bf00 73 71 6c 69 74 65 33 45 78 70 72 4e 65 65 64 73  sqlite3ExprNeeds
2bf10 4e 6f 41 66 66 69 6e 69 74 79 43 68 61 6e 67 65  NoAffinityChange
2bf20 28 63 6f 6e 73 74 20 45 78 70 72 2a 2c 20 63 68  (const Expr*, ch
2bf30 61 72 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  ar);.int sqlite3
2bf40 49 73 52 6f 77 69 64 28 63 6f 6e 73 74 20 63 68  IsRowid(const ch
2bf50 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  ar*);.void sqlit
2bf60 65 33 47 65 6e 65 72 61 74 65 52 6f 77 44 65 6c  e3GenerateRowDel
2bf70 65 74 65 28 0a 20 20 20 20 50 61 72 73 65 2a 2c  ete(.    Parse*,
2bf80 54 61 62 6c 65 2a 2c 54 72 69 67 67 65 72 2a 2c  Table*,Trigger*,
2bf90 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c 69 31 36 2c  int,int,int,i16,
2bfa0 75 38 2c 75 38 2c 75 38 2c 69 6e 74 29 3b 0a 76  u8,u8,u8,int);.v
2bfb0 6f 69 64 20 73 71 6c 69 74 65 33 47 65 6e 65 72  oid sqlite3Gener
2bfc0 61 74 65 52 6f 77 49 6e 64 65 78 44 65 6c 65 74  ateRowIndexDelet
2bfd0 65 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a  e(Parse*, Table*
2bfe0 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 2a  , int, int, int*
2bff0 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69  , int);.int sqli
2c000 74 65 33 47 65 6e 65 72 61 74 65 49 6e 64 65 78  te3GenerateIndex
2c010 4b 65 79 28 50 61 72 73 65 2a 2c 20 49 6e 64 65  Key(Parse*, Inde
2c020 78 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e  x*, int, int, in
2c030 74 2c 20 69 6e 74 2a 2c 49 6e 64 65 78 2a 2c 69  t, int*,Index*,i
2c040 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
2c050 33 52 65 73 6f 6c 76 65 50 61 72 74 49 64 78 4c  3ResolvePartIdxL
2c060 61 62 65 6c 28 50 61 72 73 65 2a 2c 69 6e 74 29  abel(Parse*,int)
2c070 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70  ;.int sqlite3Exp
2c080 72 52 65 66 65 72 65 6e 63 65 73 55 70 64 61 74  rReferencesUpdat
2c090 65 64 43 6f 6c 75 6d 6e 28 45 78 70 72 2a 2c 69  edColumn(Expr*,i
2c0a0 6e 74 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73  nt*,int);.void s
2c0b0 71 6c 69 74 65 33 47 65 6e 65 72 61 74 65 43 6f  qlite3GenerateCo
2c0c0 6e 73 74 72 61 69 6e 74 43 68 65 63 6b 73 28 50  nstraintChecks(P
2c0d0 61 72 73 65 2a 2c 54 61 62 6c 65 2a 2c 69 6e 74  arse*,Table*,int
2c0e0 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c 69 6e  *,int,int,int,in
2c0f0 74 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  t,.             
2c100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c110 20 20 20 20 20 20 20 20 75 38 2c 75 38 2c 69 6e          u8,u8,in
2c120 74 2c 69 6e 74 2a 2c 69 6e 74 2a 2c 55 70 73 65  t,int*,int*,Upse
2c130 72 74 2a 29 3b 0a 23 69 66 64 65 66 20 53 51 4c  rt*);.#ifdef SQL
2c140 49 54 45 5f 45 4e 41 42 4c 45 5f 4e 55 4c 4c 5f  ITE_ENABLE_NULL_
2c150 54 52 49 4d 0a 20 20 76 6f 69 64 20 73 71 6c 69  TRIM.  void sqli
2c160 74 65 33 53 65 74 4d 61 6b 65 52 65 63 6f 72 64  te3SetMakeRecord
2c170 50 35 28 56 64 62 65 2a 2c 54 61 62 6c 65 2a 29  P5(Vdbe*,Table*)
2c180 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65  ;.#else.# define
2c190 20 73 71 6c 69 74 65 33 53 65 74 4d 61 6b 65 52   sqlite3SetMakeR
2c1a0 65 63 6f 72 64 50 35 28 41 2c 42 29 0a 23 65 6e  ecordP5(A,B).#en
2c1b0 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  dif.void sqlite3
2c1c0 43 6f 6d 70 6c 65 74 65 49 6e 73 65 72 74 69 6f  CompleteInsertio
2c1d0 6e 28 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a 2c  n(Parse*,Table*,
2c1e0 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 2a  int,int,int,int*
2c1f0 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 29 3b 0a 69  ,int,int,int);.i
2c200 6e 74 20 73 71 6c 69 74 65 33 4f 70 65 6e 54 61  nt sqlite3OpenTa
2c210 62 6c 65 41 6e 64 49 6e 64 69 63 65 73 28 50 61  bleAndIndices(Pa
2c220 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e  rse*, Table*, in
2c230 74 2c 20 75 38 2c 20 69 6e 74 2c 20 75 38 2a 2c  t, u8, int, u8*,
2c240 20 69 6e 74 2a 2c 20 69 6e 74 2a 29 3b 0a 76 6f   int*, int*);.vo
2c250 69 64 20 73 71 6c 69 74 65 33 42 65 67 69 6e 57  id sqlite3BeginW
2c260 72 69 74 65 4f 70 65 72 61 74 69 6f 6e 28 50 61  riteOperation(Pa
2c270 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b  rse*, int, int);
2c280 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 75 6c  .void sqlite3Mul
2c290 74 69 57 72 69 74 65 28 50 61 72 73 65 2a 29 3b  tiWrite(Parse*);
2c2a0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 61 79  .void sqlite3May
2c2b0 41 62 6f 72 74 28 50 61 72 73 65 2a 29 3b 0a 76  Abort(Parse*);.v
2c2c0 6f 69 64 20 73 71 6c 69 74 65 33 48 61 6c 74 43  oid sqlite3HaltC
2c2d0 6f 6e 73 74 72 61 69 6e 74 28 50 61 72 73 65 2a  onstraint(Parse*
2c2e0 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 63 68 61 72  , int, int, char
2c2f0 2a 2c 20 69 38 2c 20 75 38 29 3b 0a 76 6f 69 64  *, i8, u8);.void
2c300 20 73 71 6c 69 74 65 33 55 6e 69 71 75 65 43 6f   sqlite3UniqueCo
2c310 6e 73 74 72 61 69 6e 74 28 50 61 72 73 65 2a 2c  nstraint(Parse*,
2c320 20 69 6e 74 2c 20 49 6e 64 65 78 2a 29 3b 0a 76   int, Index*);.v
2c330 6f 69 64 20 73 71 6c 69 74 65 33 52 6f 77 69 64  oid sqlite3Rowid
2c340 43 6f 6e 73 74 72 61 69 6e 74 28 50 61 72 73 65  Constraint(Parse
2c350 2a 2c 20 69 6e 74 2c 20 54 61 62 6c 65 2a 29 3b  *, int, Table*);
2c360 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78  .Expr *sqlite3Ex
2c370 70 72 44 75 70 28 73 71 6c 69 74 65 33 2a 2c 45  prDup(sqlite3*,E
2c380 78 70 72 2a 2c 69 6e 74 29 3b 0a 45 78 70 72 4c  xpr*,int);.ExprL
2c390 69 73 74 20 2a 73 71 6c 69 74 65 33 45 78 70 72  ist *sqlite3Expr
2c3a0 4c 69 73 74 44 75 70 28 73 71 6c 69 74 65 33 2a  ListDup(sqlite3*
2c3b0 2c 45 78 70 72 4c 69 73 74 2a 2c 69 6e 74 29 3b  ,ExprList*,int);
2c3c0 0a 53 72 63 4c 69 73 74 20 2a 73 71 6c 69 74 65  .SrcList *sqlite
2c3d0 33 53 72 63 4c 69 73 74 44 75 70 28 73 71 6c 69  3SrcListDup(sqli
2c3e0 74 65 33 2a 2c 53 72 63 4c 69 73 74 2a 2c 69 6e  te3*,SrcList*,in
2c3f0 74 29 3b 0a 49 64 4c 69 73 74 20 2a 73 71 6c 69  t);.IdList *sqli
2c400 74 65 33 49 64 4c 69 73 74 44 75 70 28 73 71 6c  te3IdListDup(sql
2c410 69 74 65 33 2a 2c 49 64 4c 69 73 74 2a 29 3b 0a  ite3*,IdList*);.
2c420 53 65 6c 65 63 74 20 2a 73 71 6c 69 74 65 33 53  Select *sqlite3S
2c430 65 6c 65 63 74 44 75 70 28 73 71 6c 69 74 65 33  electDup(sqlite3
2c440 2a 2c 53 65 6c 65 63 74 2a 2c 69 6e 74 29 3b 0a  *,Select*,int);.
2c450 46 75 6e 63 44 65 66 20 2a 73 71 6c 69 74 65 33  FuncDef *sqlite3
2c460 46 75 6e 63 74 69 6f 6e 53 65 61 72 63 68 28 69  FunctionSearch(i
2c470 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  nt,const char*);
2c480 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 49 6e 73  .void sqlite3Ins
2c490 65 72 74 42 75 69 6c 74 69 6e 46 75 6e 63 73 28  ertBuiltinFuncs(
2c4a0 46 75 6e 63 44 65 66 2a 2c 69 6e 74 29 3b 0a 46  FuncDef*,int);.F
2c4b0 75 6e 63 44 65 66 20 2a 73 71 6c 69 74 65 33 46  uncDef *sqlite3F
2c4c0 69 6e 64 46 75 6e 63 74 69 6f 6e 28 73 71 6c 69  indFunction(sqli
2c4d0 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  te3*,const char*
2c4e0 2c 69 6e 74 2c 75 38 2c 75 38 29 3b 0a 76 6f 69  ,int,u8,u8);.voi
2c4f0 64 20 73 71 6c 69 74 65 33 52 65 67 69 73 74 65  d sqlite3Registe
2c500 72 42 75 69 6c 74 69 6e 46 75 6e 63 74 69 6f 6e  rBuiltinFunction
2c510 73 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20 73 71  s(void);.void sq
2c520 6c 69 74 65 33 52 65 67 69 73 74 65 72 44 61 74  lite3RegisterDat
2c530 65 54 69 6d 65 46 75 6e 63 74 69 6f 6e 73 28 76  eTimeFunctions(v
2c540 6f 69 64 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  oid);.void sqlit
2c550 65 33 52 65 67 69 73 74 65 72 50 65 72 43 6f 6e  e3RegisterPerCon
2c560 6e 65 63 74 69 6f 6e 42 75 69 6c 74 69 6e 46 75  nectionBuiltinFu
2c570 6e 63 74 69 6f 6e 73 28 73 71 6c 69 74 65 33 2a  nctions(sqlite3*
2c580 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 61  );.int sqlite3Sa
2c590 66 65 74 79 43 68 65 63 6b 4f 6b 28 73 71 6c 69  fetyCheckOk(sqli
2c5a0 74 65 33 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  te3*);.int sqlit
2c5b0 65 33 53 61 66 65 74 79 43 68 65 63 6b 53 69 63  e3SafetyCheckSic
2c5c0 6b 4f 72 4f 6b 28 73 71 6c 69 74 65 33 2a 29 3b  kOrOk(sqlite3*);
2c5d0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 68 61  .void sqlite3Cha
2c5e0 6e 67 65 43 6f 6f 6b 69 65 28 50 61 72 73 65 2a  ngeCookie(Parse*
2c5f0 2c 20 69 6e 74 29 3b 0a 0a 23 69 66 20 21 64 65  , int);..#if !de
2c600 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49  fined(SQLITE_OMI
2c610 54 5f 56 49 45 57 29 20 26 26 20 21 64 65 66 69  T_VIEW) && !defi
2c620 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ned(SQLITE_OMIT_
2c630 54 52 49 47 47 45 52 29 0a 76 6f 69 64 20 73 71  TRIGGER).void sq
2c640 6c 69 74 65 33 4d 61 74 65 72 69 61 6c 69 7a 65  lite3Materialize
2c650 56 69 65 77 28 50 61 72 73 65 2a 2c 20 54 61 62  View(Parse*, Tab
2c660 6c 65 2a 2c 20 45 78 70 72 2a 2c 20 45 78 70 72  le*, Expr*, Expr
2c670 4c 69 73 74 2a 2c 45 78 70 72 2a 2c 69 6e 74 29  List*,Expr*,int)
2c680 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65  ;.#endif..#ifnde
2c690 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52  f SQLITE_OMIT_TR
2c6a0 49 47 47 45 52 0a 20 20 76 6f 69 64 20 73 71 6c  IGGER.  void sql
2c6b0 69 74 65 33 42 65 67 69 6e 54 72 69 67 67 65 72  ite3BeginTrigger
2c6c0 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c  (Parse*, Token*,
2c6d0 54 6f 6b 65 6e 2a 2c 69 6e 74 2c 69 6e 74 2c 49  Token*,int,int,I
2c6e0 64 4c 69 73 74 2a 2c 53 72 63 4c 69 73 74 2a 2c  dList*,SrcList*,
2c6f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2c700 20 20 20 20 20 20 20 20 20 20 20 20 45 78 70 72              Expr
2c710 2a 2c 69 6e 74 2c 20 69 6e 74 29 3b 0a 20 20 76  *,int, int);.  v
2c720 6f 69 64 20 73 71 6c 69 74 65 33 46 69 6e 69 73  oid sqlite3Finis
2c730 68 54 72 69 67 67 65 72 28 50 61 72 73 65 2a 2c  hTrigger(Parse*,
2c740 20 54 72 69 67 67 65 72 53 74 65 70 2a 2c 20 54   TriggerStep*, T
2c750 6f 6b 65 6e 2a 29 3b 0a 20 20 76 6f 69 64 20 73  oken*);.  void s
2c760 71 6c 69 74 65 33 44 72 6f 70 54 72 69 67 67 65  qlite3DropTrigge
2c770 72 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73  r(Parse*, SrcLis
2c780 74 2a 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64  t*, int);.  void
2c790 20 73 71 6c 69 74 65 33 44 72 6f 70 54 72 69 67   sqlite3DropTrig
2c7a0 67 65 72 50 74 72 28 50 61 72 73 65 2a 2c 20 54  gerPtr(Parse*, T
2c7b0 72 69 67 67 65 72 2a 29 3b 0a 20 20 54 72 69 67  rigger*);.  Trig
2c7c0 67 65 72 20 2a 73 71 6c 69 74 65 33 54 72 69 67  ger *sqlite3Trig
2c7d0 67 65 72 73 45 78 69 73 74 28 50 61 72 73 65 20  gersExist(Parse 
2c7e0 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20  *, Table*, int, 
2c7f0 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74 20 2a  ExprList*, int *
2c800 70 4d 61 73 6b 29 3b 0a 20 20 54 72 69 67 67 65  pMask);.  Trigge
2c810 72 20 2a 73 71 6c 69 74 65 33 54 72 69 67 67 65  r *sqlite3Trigge
2c820 72 4c 69 73 74 28 50 61 72 73 65 20 2a 2c 20 54  rList(Parse *, T
2c830 61 62 6c 65 20 2a 29 3b 0a 20 20 76 6f 69 64 20  able *);.  void 
2c840 73 71 6c 69 74 65 33 43 6f 64 65 52 6f 77 54 72  sqlite3CodeRowTr
2c850 69 67 67 65 72 28 50 61 72 73 65 2a 2c 20 54 72  igger(Parse*, Tr
2c860 69 67 67 65 72 20 2a 2c 20 69 6e 74 2c 20 45 78  igger *, int, Ex
2c870 70 72 4c 69 73 74 2a 2c 20 69 6e 74 2c 20 54 61  prList*, int, Ta
2c880 62 6c 65 20 2a 2c 0a 20 20 20 20 20 20 20 20 20  ble *,.         
2c890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c8a0 20 20 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74     int, int, int
2c8b0 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
2c8c0 33 43 6f 64 65 52 6f 77 54 72 69 67 67 65 72 44  3CodeRowTriggerD
2c8d0 69 72 65 63 74 28 50 61 72 73 65 20 2a 2c 20 54  irect(Parse *, T
2c8e0 72 69 67 67 65 72 20 2a 2c 20 54 61 62 6c 65 20  rigger *, Table 
2c8f0 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74  *, int, int, int
2c900 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
2c910 56 69 65 77 54 72 69 67 67 65 72 73 28 50 61 72  ViewTriggers(Par
2c920 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 45 78 70  se*, Table*, Exp
2c930 72 2a 2c 20 69 6e 74 2c 20 45 78 70 72 4c 69 73  r*, int, ExprLis
2c940 74 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69  t*);.  void sqli
2c950 74 65 33 44 65 6c 65 74 65 54 72 69 67 67 65 72  te3DeleteTrigger
2c960 53 74 65 70 28 73 71 6c 69 74 65 33 2a 2c 20 54  Step(sqlite3*, T
2c970 72 69 67 67 65 72 53 74 65 70 2a 29 3b 0a 20 20  riggerStep*);.  
2c980 54 72 69 67 67 65 72 53 74 65 70 20 2a 73 71 6c  TriggerStep *sql
2c990 69 74 65 33 54 72 69 67 67 65 72 53 65 6c 65 63  ite3TriggerSelec
2c9a0 74 53 74 65 70 28 73 71 6c 69 74 65 33 2a 2c 53  tStep(sqlite3*,S
2c9b0 65 6c 65 63 74 2a 2c 0a 20 20 20 20 20 20 20 20  elect*,.        
2c9c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c9d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c9e0 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73  const char*,cons
2c9f0 74 20 63 68 61 72 2a 29 3b 0a 20 20 54 72 69 67  t char*);.  Trig
2ca00 67 65 72 53 74 65 70 20 2a 73 71 6c 69 74 65 33  gerStep *sqlite3
2ca10 54 72 69 67 67 65 72 49 6e 73 65 72 74 53 74 65  TriggerInsertSte
2ca20 70 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c  p(Parse*,Token*,
2ca30 20 49 64 4c 69 73 74 2a 2c 0a 20 20 20 20 20 20   IdList*,.      
2ca40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ca50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ca60 20 20 53 65 6c 65 63 74 2a 2c 75 38 2c 55 70 73    Select*,u8,Ups
2ca70 65 72 74 2a 2c 0a 20 20 20 20 20 20 20 20 20 20  ert*,.          
2ca80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ca90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
2caa0 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20  nst char*,const 
2cab0 63 68 61 72 2a 29 3b 0a 20 20 54 72 69 67 67 65  char*);.  Trigge
2cac0 72 53 74 65 70 20 2a 73 71 6c 69 74 65 33 54 72  rStep *sqlite3Tr
2cad0 69 67 67 65 72 55 70 64 61 74 65 53 74 65 70 28  iggerUpdateStep(
2cae0 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 45 78  Parse*,Token*,Ex
2caf0 70 72 4c 69 73 74 2a 2c 20 45 78 70 72 2a 2c 20  prList*, Expr*, 
2cb00 75 38 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  u8,.            
2cb10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cb20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 73              cons
2cb30 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68  t char*,const ch
2cb40 61 72 2a 29 3b 0a 20 20 54 72 69 67 67 65 72 53  ar*);.  TriggerS
2cb50 74 65 70 20 2a 73 71 6c 69 74 65 33 54 72 69 67  tep *sqlite3Trig
2cb60 67 65 72 44 65 6c 65 74 65 53 74 65 70 28 50 61  gerDeleteStep(Pa
2cb70 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 20 45 78 70  rse*,Token*, Exp
2cb80 72 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  r*,.            
2cb90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cba0 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 73              cons
2cbb0 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68  t char*,const ch
2cbc0 61 72 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c  ar*);.  void sql
2cbd0 69 74 65 33 44 65 6c 65 74 65 54 72 69 67 67 65  ite3DeleteTrigge
2cbe0 72 28 73 71 6c 69 74 65 33 2a 2c 20 54 72 69 67  r(sqlite3*, Trig
2cbf0 67 65 72 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71  ger*);.  void sq
2cc00 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65  lite3UnlinkAndDe
2cc10 6c 65 74 65 54 72 69 67 67 65 72 28 73 71 6c 69  leteTrigger(sqli
2cc20 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63  te3*,int,const c
2cc30 68 61 72 2a 29 3b 0a 20 20 75 33 32 20 73 71 6c  har*);.  u32 sql
2cc40 69 74 65 33 54 72 69 67 67 65 72 43 6f 6c 6d 61  ite3TriggerColma
2cc50 73 6b 28 50 61 72 73 65 2a 2c 54 72 69 67 67 65  sk(Parse*,Trigge
2cc60 72 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 69 6e 74  r*,ExprList*,int
2cc70 2c 69 6e 74 2c 54 61 62 6c 65 2a 2c 69 6e 74 29  ,int,Table*,int)
2cc80 3b 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ;.# define sqlit
2cc90 65 33 50 61 72 73 65 54 6f 70 6c 65 76 65 6c 28  e3ParseToplevel(
2cca0 70 29 20 28 28 70 29 2d 3e 70 54 6f 70 6c 65 76  p) ((p)->pToplev
2ccb0 65 6c 20 3f 20 28 70 29 2d 3e 70 54 6f 70 6c 65  el ? (p)->pTople
2ccc0 76 65 6c 20 3a 20 28 70 29 29 0a 23 20 64 65 66  vel : (p)).# def
2ccd0 69 6e 65 20 73 71 6c 69 74 65 33 49 73 54 6f 70  ine sqlite3IsTop
2cce0 6c 65 76 65 6c 28 70 29 20 28 28 70 29 2d 3e 70  level(p) ((p)->p
2ccf0 54 6f 70 6c 65 76 65 6c 3d 3d 30 29 0a 23 65 6c  Toplevel==0).#el
2cd00 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  se.# define sqli
2cd10 74 65 33 54 72 69 67 67 65 72 73 45 78 69 73 74  te3TriggersExist
2cd20 28 42 2c 43 2c 44 2c 45 2c 46 29 20 30 0a 23 20  (B,C,D,E,F) 0.# 
2cd30 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 44 65  define sqlite3De
2cd40 6c 65 74 65 54 72 69 67 67 65 72 28 41 2c 42 29  leteTrigger(A,B)
2cd50 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
2cd60 33 44 72 6f 70 54 72 69 67 67 65 72 50 74 72 28  3DropTriggerPtr(
2cd70 41 2c 42 29 0a 23 20 64 65 66 69 6e 65 20 73 71  A,B).# define sq
2cd80 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65  lite3UnlinkAndDe
2cd90 6c 65 74 65 54 72 69 67 67 65 72 28 41 2c 42 2c  leteTrigger(A,B,
2cda0 43 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  C).# define sqli
2cdb0 74 65 33 43 6f 64 65 52 6f 77 54 72 69 67 67 65  te3CodeRowTrigge
2cdc0 72 28 41 2c 42 2c 43 2c 44 2c 45 2c 46 2c 47 2c  r(A,B,C,D,E,F,G,
2cdd0 48 2c 49 29 0a 23 20 64 65 66 69 6e 65 20 73 71  H,I).# define sq
2cde0 6c 69 74 65 33 43 6f 64 65 52 6f 77 54 72 69 67  lite3CodeRowTrig
2cdf0 67 65 72 44 69 72 65 63 74 28 41 2c 42 2c 43 2c  gerDirect(A,B,C,
2ce00 44 2c 45 2c 46 29 0a 23 20 64 65 66 69 6e 65 20  D,E,F).# define 
2ce10 73 71 6c 69 74 65 33 54 72 69 67 67 65 72 4c 69  sqlite3TriggerLi
2ce20 73 74 28 58 2c 20 59 29 20 30 0a 23 20 64 65 66  st(X, Y) 0.# def
2ce30 69 6e 65 20 73 71 6c 69 74 65 33 50 61 72 73 65  ine sqlite3Parse
2ce40 54 6f 70 6c 65 76 65 6c 28 70 29 20 70 0a 23 20  Toplevel(p) p.# 
2ce50 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73  define sqlite3Is
2ce60 54 6f 70 6c 65 76 65 6c 28 70 29 20 31 0a 23 20  Toplevel(p) 1.# 
2ce70 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54 72  define sqlite3Tr
2ce80 69 67 67 65 72 43 6f 6c 6d 61 73 6b 28 41 2c 42  iggerColmask(A,B
2ce90 2c 43 2c 44 2c 45 2c 46 2c 47 29 20 30 0a 23 65  ,C,D,E,F,G) 0.#e
2cea0 6e 64 69 66 0a 0a 69 6e 74 20 73 71 6c 69 74 65  ndif..int sqlite
2ceb0 33 4a 6f 69 6e 54 79 70 65 28 50 61 72 73 65 2a  3JoinType(Parse*
2cec0 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a  , Token*, Token*
2ced0 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20  , Token*);.void 
2cee0 73 71 6c 69 74 65 33 43 72 65 61 74 65 46 6f 72  sqlite3CreateFor
2cef0 65 69 67 6e 4b 65 79 28 50 61 72 73 65 2a 2c 20  eignKey(Parse*, 
2cf00 45 78 70 72 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e  ExprList*, Token
2cf10 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e  *, ExprList*, in
2cf20 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
2cf30 44 65 66 65 72 46 6f 72 65 69 67 6e 4b 65 79 28  DeferForeignKey(
2cf40 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 23 69  Parse*, int);.#i
2cf50 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
2cf60 54 5f 41 55 54 48 4f 52 49 5a 41 54 49 4f 4e 0a  T_AUTHORIZATION.
2cf70 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 41 75    void sqlite3Au
2cf80 74 68 52 65 61 64 28 50 61 72 73 65 2a 2c 45 78  thRead(Parse*,Ex
2cf90 70 72 2a 2c 53 63 68 65 6d 61 2a 2c 53 72 63 4c  pr*,Schema*,SrcL
2cfa0 69 73 74 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c  ist*);.  int sql
2cfb0 69 74 65 33 41 75 74 68 43 68 65 63 6b 28 50 61  ite3AuthCheck(Pa
2cfc0 72 73 65 2a 2c 69 6e 74 2c 20 63 6f 6e 73 74 20  rse*,int, const 
2cfd0 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61  char*, const cha
2cfe0 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29  r*, const char*)
2cff0 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
2d000 41 75 74 68 43 6f 6e 74 65 78 74 50 75 73 68 28  AuthContextPush(
2d010 50 61 72 73 65 2a 2c 20 41 75 74 68 43 6f 6e 74  Parse*, AuthCont
2d020 65 78 74 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  ext*, const char
2d030 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  *);.  void sqlit
2d040 65 33 41 75 74 68 43 6f 6e 74 65 78 74 50 6f 70  e3AuthContextPop
2d050 28 41 75 74 68 43 6f 6e 74 65 78 74 2a 29 3b 0a  (AuthContext*);.
2d060 20 20 69 6e 74 20 73 71 6c 69 74 65 33 41 75 74    int sqlite3Aut
2d070 68 52 65 61 64 43 6f 6c 28 50 61 72 73 65 2a 2c  hReadCol(Parse*,
2d080 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20 63   const char *, c
2d090 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20 69 6e 74  onst char *, int
2d0a0 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e  );.#else.# defin
2d0b0 65 20 73 71 6c 69 74 65 33 41 75 74 68 52 65 61  e sqlite3AuthRea
2d0c0 64 28 61 2c 62 2c 63 2c 64 29 0a 23 20 64 65 66  d(a,b,c,d).# def
2d0d0 69 6e 65 20 73 71 6c 69 74 65 33 41 75 74 68 43  ine sqlite3AuthC
2d0e0 68 65 63 6b 28 61 2c 62 2c 63 2c 64 2c 65 29 20  heck(a,b,c,d,e) 
2d0f0 20 20 20 53 51 4c 49 54 45 5f 4f 4b 0a 23 20 64     SQLITE_OK.# d
2d100 65 66 69 6e 65 20 73 71 6c 69 74 65 33 41 75 74  efine sqlite3Aut
2d110 68 43 6f 6e 74 65 78 74 50 75 73 68 28 61 2c 62  hContextPush(a,b
2d120 2c 63 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  ,c).# define sql
2d130 69 74 65 33 41 75 74 68 43 6f 6e 74 65 78 74 50  ite3AuthContextP
2d140 6f 70 28 61 29 20 20 28 28 76 6f 69 64 29 28 61  op(a)  ((void)(a
2d150 29 29 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73  )).#endif.void s
2d160 71 6c 69 74 65 33 41 74 74 61 63 68 28 50 61 72  qlite3Attach(Par
2d170 73 65 2a 2c 20 45 78 70 72 2a 2c 20 45 78 70 72  se*, Expr*, Expr
2d180 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20  *, Expr*);.void 
2d190 73 71 6c 69 74 65 33 44 65 74 61 63 68 28 50 61  sqlite3Detach(Pa
2d1a0 72 73 65 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f  rse*, Expr*);.vo
2d1b0 69 64 20 73 71 6c 69 74 65 33 46 69 78 49 6e 69  id sqlite3FixIni
2d1c0 74 28 44 62 46 69 78 65 72 2a 2c 20 50 61 72 73  t(DbFixer*, Pars
2d1d0 65 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20 63  e*, int, const c
2d1e0 68 61 72 2a 2c 20 63 6f 6e 73 74 20 54 6f 6b 65  har*, const Toke
2d1f0 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  n*);.int sqlite3
2d200 46 69 78 53 72 63 4c 69 73 74 28 44 62 46 69 78  FixSrcList(DbFix
2d210 65 72 2a 2c 20 53 72 63 4c 69 73 74 2a 29 3b 0a  er*, SrcList*);.
2d220 69 6e 74 20 73 71 6c 69 74 65 33 46 69 78 53 65  int sqlite3FixSe
2d230 6c 65 63 74 28 44 62 46 69 78 65 72 2a 2c 20 53  lect(DbFixer*, S
2d240 65 6c 65 63 74 2a 29 3b 0a 69 6e 74 20 73 71 6c  elect*);.int sql
2d250 69 74 65 33 46 69 78 45 78 70 72 28 44 62 46 69  ite3FixExpr(DbFi
2d260 78 65 72 2a 2c 20 45 78 70 72 2a 29 3b 0a 69 6e  xer*, Expr*);.in
2d270 74 20 73 71 6c 69 74 65 33 46 69 78 45 78 70 72  t sqlite3FixExpr
2d280 4c 69 73 74 28 44 62 46 69 78 65 72 2a 2c 20 45  List(DbFixer*, E
2d290 78 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73  xprList*);.int s
2d2a0 71 6c 69 74 65 33 46 69 78 54 72 69 67 67 65 72  qlite3FixTrigger
2d2b0 53 74 65 70 28 44 62 46 69 78 65 72 2a 2c 20 54  Step(DbFixer*, T
2d2c0 72 69 67 67 65 72 53 74 65 70 2a 29 3b 0a 69 6e  riggerStep*);.in
2d2d0 74 20 73 71 6c 69 74 65 33 52 65 61 6c 53 61 6d  t sqlite3RealSam
2d2e0 65 41 73 49 6e 74 28 64 6f 75 62 6c 65 2c 73 71  eAsInt(double,sq
2d2f0 6c 69 74 65 33 5f 69 6e 74 36 34 29 3b 0a 69 6e  lite3_int64);.in
2d300 74 20 73 71 6c 69 74 65 33 41 74 6f 46 28 63 6f  t sqlite3AtoF(co
2d310 6e 73 74 20 63 68 61 72 20 2a 7a 2c 20 64 6f 75  nst char *z, dou
2d320 62 6c 65 2a 2c 20 69 6e 74 2c 20 75 38 29 3b 0a  ble*, int, u8);.
2d330 69 6e 74 20 73 71 6c 69 74 65 33 47 65 74 49 6e  int sqlite3GetIn
2d340 74 33 32 28 63 6f 6e 73 74 20 63 68 61 72 20 2a  t32(const char *
2d350 2c 20 69 6e 74 2a 29 3b 0a 69 6e 74 20 73 71 6c  , int*);.int sql
2d360 69 74 65 33 41 74 6f 69 28 63 6f 6e 73 74 20 63  ite3Atoi(const c
2d370 68 61 72 2a 29 3b 0a 23 69 66 6e 64 65 66 20 53  har*);.#ifndef S
2d380 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36  QLITE_OMIT_UTF16
2d390 0a 69 6e 74 20 73 71 6c 69 74 65 33 55 74 66 31  .int sqlite3Utf1
2d3a0 36 42 79 74 65 4c 65 6e 28 63 6f 6e 73 74 20 76  6ByteLen(const v
2d3b0 6f 69 64 20 2a 70 44 61 74 61 2c 20 69 6e 74 20  oid *pData, int 
2d3c0 6e 43 68 61 72 29 3b 0a 23 65 6e 64 69 66 0a 69  nChar);.#endif.i
2d3d0 6e 74 20 73 71 6c 69 74 65 33 55 74 66 38 43 68  nt sqlite3Utf8Ch
2d3e0 61 72 4c 65 6e 28 63 6f 6e 73 74 20 63 68 61 72  arLen(const char
2d3f0 20 2a 70 44 61 74 61 2c 20 69 6e 74 20 6e 42 79   *pData, int nBy
2d400 74 65 29 3b 0a 75 33 32 20 73 71 6c 69 74 65 33  te);.u32 sqlite3
2d410 55 74 66 38 52 65 61 64 28 63 6f 6e 73 74 20 75  Utf8Read(const u
2d420 38 2a 2a 29 3b 0a 4c 6f 67 45 73 74 20 73 71 6c  8**);.LogEst sql
2d430 69 74 65 33 4c 6f 67 45 73 74 28 75 36 34 29 3b  ite3LogEst(u64);
2d440 0a 4c 6f 67 45 73 74 20 73 71 6c 69 74 65 33 4c  .LogEst sqlite3L
2d450 6f 67 45 73 74 41 64 64 28 4c 6f 67 45 73 74 2c  ogEstAdd(LogEst,
2d460 4c 6f 67 45 73 74 29 3b 0a 23 69 66 6e 64 65 66  LogEst);.#ifndef
2d470 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
2d480 54 55 41 4c 54 41 42 4c 45 0a 4c 6f 67 45 73 74  TUALTABLE.LogEst
2d490 20 73 71 6c 69 74 65 33 4c 6f 67 45 73 74 46 72   sqlite3LogEstFr
2d4a0 6f 6d 44 6f 75 62 6c 65 28 64 6f 75 62 6c 65 29  omDouble(double)
2d4b0 3b 0a 23 65 6e 64 69 66 0a 23 69 66 20 64 65 66  ;.#endif.#if def
2d4c0 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42  ined(SQLITE_ENAB
2d4d0 4c 45 5f 53 54 4d 54 5f 53 43 41 4e 53 54 41 54  LE_STMT_SCANSTAT
2d4e0 55 53 29 20 7c 7c 20 5c 0a 20 20 20 20 64 65 66  US) || \.    def
2d4f0 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42  ined(SQLITE_ENAB
2d500 4c 45 5f 53 54 41 54 34 29 20 7c 7c 20 5c 0a 20  LE_STAT4) || \. 
2d510 20 20 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54     defined(SQLIT
2d520 45 5f 45 58 50 4c 41 49 4e 5f 45 53 54 49 4d 41  E_EXPLAIN_ESTIMA
2d530 54 45 44 5f 52 4f 57 53 29 0a 75 36 34 20 73 71  TED_ROWS).u64 sq
2d540 6c 69 74 65 33 4c 6f 67 45 73 74 54 6f 49 6e 74  lite3LogEstToInt
2d550 28 4c 6f 67 45 73 74 29 3b 0a 23 65 6e 64 69 66  (LogEst);.#endif
2d560 0a 56 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 56  .VList *sqlite3V
2d570 4c 69 73 74 41 64 64 28 73 71 6c 69 74 65 33 2a  ListAdd(sqlite3*
2d580 2c 56 4c 69 73 74 2a 2c 63 6f 6e 73 74 20 63 68  ,VList*,const ch
2d590 61 72 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a 63 6f  ar*,int,int);.co
2d5a0 6e 73 74 20 63 68 61 72 20 2a 73 71 6c 69 74 65  nst char *sqlite
2d5b0 33 56 4c 69 73 74 4e 75 6d 54 6f 4e 61 6d 65 28  3VListNumToName(
2d5c0 56 4c 69 73 74 2a 2c 69 6e 74 29 3b 0a 69 6e 74  VList*,int);.int
2d5d0 20 73 71 6c 69 74 65 33 56 4c 69 73 74 4e 61 6d   sqlite3VListNam
2d5e0 65 54 6f 4e 75 6d 28 56 4c 69 73 74 2a 2c 63 6f  eToNum(VList*,co
2d5f0 6e 73 74 20 63 68 61 72 2a 2c 69 6e 74 29 3b 0a  nst char*,int);.
2d600 0a 2f 2a 0a 2a 2a 20 52 6f 75 74 69 6e 65 73 20  ./*.** Routines 
2d610 74 6f 20 72 65 61 64 20 61 6e 64 20 77 72 69 74  to read and writ
2d620 65 20 76 61 72 69 61 62 6c 65 2d 6c 65 6e 67 74  e variable-lengt
2d630 68 20 69 6e 74 65 67 65 72 73 2e 20 20 54 68 65  h integers.  The
2d640 73 65 20 75 73 65 64 20 74 6f 0a 2a 2a 20 62 65  se used to.** be
2d650 20 64 65 66 69 6e 65 64 20 6c 6f 63 61 6c 6c 79   defined locally
2d660 2c 20 62 75 74 20 6e 6f 77 20 77 65 20 75 73 65  , but now we use
2d670 20 74 68 65 20 76 61 72 69 6e 74 20 72 6f 75 74   the varint rout
2d680 69 6e 65 73 20 69 6e 20 74 68 65 20 75 74 69 6c  ines in the util
2d690 2e 63 0a 2a 2a 20 66 69 6c 65 2e 0a 2a 2f 0a 69  .c.** file..*/.i
2d6a0 6e 74 20 73 71 6c 69 74 65 33 50 75 74 56 61 72  nt sqlite3PutVar
2d6b0 69 6e 74 28 75 6e 73 69 67 6e 65 64 20 63 68 61  int(unsigned cha
2d6c0 72 2a 2c 20 75 36 34 29 3b 0a 75 38 20 73 71 6c  r*, u64);.u8 sql
2d6d0 69 74 65 33 47 65 74 56 61 72 69 6e 74 28 63 6f  ite3GetVarint(co
2d6e0 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61  nst unsigned cha
2d6f0 72 20 2a 2c 20 75 36 34 20 2a 29 3b 0a 75 38 20  r *, u64 *);.u8 
2d700 73 71 6c 69 74 65 33 47 65 74 56 61 72 69 6e 74  sqlite3GetVarint
2d710 33 32 28 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65  32(const unsigne
2d720 64 20 63 68 61 72 20 2a 2c 20 75 33 32 20 2a 29  d char *, u32 *)
2d730 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 61 72  ;.int sqlite3Var
2d740 69 6e 74 4c 65 6e 28 75 36 34 20 76 29 3b 0a 0a  intLen(u64 v);..
2d750 2f 2a 0a 2a 2a 20 54 68 65 20 63 6f 6d 6d 6f 6e  /*.** The common
2d760 20 63 61 73 65 20 69 73 20 66 6f 72 20 61 20 76   case is for a v
2d770 61 72 69 6e 74 20 74 6f 20 62 65 20 61 20 73 69  arint to be a si
2d780 6e 67 6c 65 20 62 79 74 65 2e 20 20 54 68 65 79  ngle byte.  They
2d790 20 66 6f 6c 6c 6f 77 69 6e 67 0a 2a 2a 20 6d 61   following.** ma
2d7a0 63 72 6f 73 20 68 61 6e 64 6c 65 20 74 68 65 20  cros handle the 
2d7b0 63 6f 6d 6d 6f 6e 20 63 61 73 65 20 77 69 74 68  common case with
2d7c0 6f 75 74 20 61 20 70 72 6f 63 65 64 75 72 65 20  out a procedure 
2d7d0 63 61 6c 6c 2c 20 62 75 74 20 74 68 65 6e 20 63  call, but then c
2d7e0 61 6c 6c 0a 2a 2a 20 74 68 65 20 70 72 6f 63 65  all.** the proce
2d7f0 64 75 72 65 20 66 6f 72 20 6c 61 72 67 65 72 20  dure for larger 
2d800 76 61 72 69 6e 74 73 2e 0a 2a 2f 0a 23 64 65 66  varints..*/.#def
2d810 69 6e 65 20 67 65 74 56 61 72 69 6e 74 33 32 28  ine getVarint32(
2d820 41 2c 42 29 20 20 5c 0a 20 20 28 75 38 29 28 28  A,B)  \.  (u8)((
2d830 2a 28 41 29 3c 28 75 38 29 30 78 38 30 29 3f 28  *(A)<(u8)0x80)?(
2d840 28 42 29 3d 28 75 33 32 29 2a 28 41 29 29 2c 31  (B)=(u32)*(A)),1
2d850 3a 73 71 6c 69 74 65 33 47 65 74 56 61 72 69 6e  :sqlite3GetVarin
2d860 74 33 32 28 28 41 29 2c 28 75 33 32 20 2a 29 26  t32((A),(u32 *)&
2d870 28 42 29 29 29 0a 23 64 65 66 69 6e 65 20 70 75  (B))).#define pu
2d880 74 56 61 72 69 6e 74 33 32 28 41 2c 42 29 20 20  tVarint32(A,B)  
2d890 5c 0a 20 20 28 75 38 29 28 28 28 75 33 32 29 28  \.  (u8)(((u32)(
2d8a0 42 29 3c 28 75 33 32 29 30 78 38 30 29 3f 28 2a  B)<(u32)0x80)?(*
2d8b0 28 41 29 3d 28 75 6e 73 69 67 6e 65 64 20 63 68  (A)=(unsigned ch
2d8c0 61 72 29 28 42 29 29 2c 31 3a 5c 0a 20 20 73 71  ar)(B)),1:\.  sq
2d8d0 6c 69 74 65 33 50 75 74 56 61 72 69 6e 74 28 28  lite3PutVarint((
2d8e0 41 29 2c 28 42 29 29 29 0a 23 64 65 66 69 6e 65  A),(B))).#define
2d8f0 20 67 65 74 56 61 72 69 6e 74 20 20 20 20 73 71   getVarint    sq
2d900 6c 69 74 65 33 47 65 74 56 61 72 69 6e 74 0a 23  lite3GetVarint.#
2d910 64 65 66 69 6e 65 20 70 75 74 56 61 72 69 6e 74  define putVarint
2d920 20 20 20 20 73 71 6c 69 74 65 33 50 75 74 56 61      sqlite3PutVa
2d930 72 69 6e 74 0a 0a 0a 63 6f 6e 73 74 20 63 68 61  rint...const cha
2d940 72 20 2a 73 71 6c 69 74 65 33 49 6e 64 65 78 41  r *sqlite3IndexA
2d950 66 66 69 6e 69 74 79 53 74 72 28 73 71 6c 69 74  ffinityStr(sqlit
2d960 65 33 2a 2c 20 49 6e 64 65 78 2a 29 3b 0a 76 6f  e3*, Index*);.vo
2d970 69 64 20 73 71 6c 69 74 65 33 54 61 62 6c 65 41  id sqlite3TableA
2d980 66 66 69 6e 69 74 79 28 56 64 62 65 2a 2c 20 54  ffinity(Vdbe*, T
2d990 61 62 6c 65 2a 2c 20 69 6e 74 29 3b 0a 63 68 61  able*, int);.cha
2d9a0 72 20 73 71 6c 69 74 65 33 43 6f 6d 70 61 72 65  r sqlite3Compare
2d9b0 41 66 66 69 6e 69 74 79 28 45 78 70 72 20 2a 70  Affinity(Expr *p
2d9c0 45 78 70 72 2c 20 63 68 61 72 20 61 66 66 32 29  Expr, char aff2)
2d9d0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 6e 64  ;.int sqlite3Ind
2d9e0 65 78 41 66 66 69 6e 69 74 79 4f 6b 28 45 78 70  exAffinityOk(Exp
2d9f0 72 20 2a 70 45 78 70 72 2c 20 63 68 61 72 20 69  r *pExpr, char i
2da00 64 78 5f 61 66 66 69 6e 69 74 79 29 3b 0a 63 68  dx_affinity);.ch
2da10 61 72 20 73 71 6c 69 74 65 33 54 61 62 6c 65 43  ar sqlite3TableC
2da20 6f 6c 75 6d 6e 41 66 66 69 6e 69 74 79 28 54 61  olumnAffinity(Ta
2da30 62 6c 65 2a 2c 69 6e 74 29 3b 0a 63 68 61 72 20  ble*,int);.char 
2da40 73 71 6c 69 74 65 33 45 78 70 72 41 66 66 69 6e  sqlite3ExprAffin
2da50 69 74 79 28 45 78 70 72 20 2a 70 45 78 70 72 29  ity(Expr *pExpr)
2da60 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 41 74 6f  ;.int sqlite3Ato
2da70 69 36 34 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c  i64(const char*,
2da80 20 69 36 34 2a 2c 20 69 6e 74 2c 20 75 38 29 3b   i64*, int, u8);
2da90 0a 69 6e 74 20 73 71 6c 69 74 65 33 44 65 63 4f  .int sqlite3DecO
2daa0 72 48 65 78 54 6f 49 36 34 28 63 6f 6e 73 74 20  rHexToI64(const 
2dab0 63 68 61 72 2a 2c 20 69 36 34 2a 29 3b 0a 76 6f  char*, i64*);.vo
2dac0 69 64 20 73 71 6c 69 74 65 33 45 72 72 6f 72 57  id sqlite3ErrorW
2dad0 69 74 68 4d 73 67 28 73 71 6c 69 74 65 33 2a 2c  ithMsg(sqlite3*,
2dae0 20 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61 72   int, const char
2daf0 2a 2c 2e 2e 2e 29 3b 0a 76 6f 69 64 20 73 71 6c  *,...);.void sql
2db00 69 74 65 33 45 72 72 6f 72 28 73 71 6c 69 74 65  ite3Error(sqlite
2db10 33 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  3*,int);.void sq
2db20 6c 69 74 65 33 53 79 73 74 65 6d 45 72 72 6f 72  lite3SystemError
2db30 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 29 3b 0a  (sqlite3*,int);.
2db40 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 48 65 78  void *sqlite3Hex
2db50 54 6f 42 6c 6f 62 28 73 71 6c 69 74 65 33 2a 2c  ToBlob(sqlite3*,
2db60 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 2c 20   const char *z, 
2db70 69 6e 74 20 6e 29 3b 0a 75 38 20 73 71 6c 69 74  int n);.u8 sqlit
2db80 65 33 48 65 78 54 6f 49 6e 74 28 69 6e 74 20 68  e3HexToInt(int h
2db90 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 54 77  );.int sqlite3Tw
2dba0 6f 50 61 72 74 4e 61 6d 65 28 50 61 72 73 65 20  oPartName(Parse 
2dbb0 2a 2c 20 54 6f 6b 65 6e 20 2a 2c 20 54 6f 6b 65  *, Token *, Toke
2dbc0 6e 20 2a 2c 20 54 6f 6b 65 6e 20 2a 2a 29 3b 0a  n *, Token **);.
2dbd0 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c  .#if defined(SQL
2dbe0 49 54 45 5f 4e 45 45 44 5f 45 52 52 5f 4e 41 4d  ITE_NEED_ERR_NAM
2dbf0 45 29 0a 63 6f 6e 73 74 20 63 68 61 72 20 2a 73  E).const char *s
2dc00 71 6c 69 74 65 33 45 72 72 4e 61 6d 65 28 69 6e  qlite3ErrName(in
2dc10 74 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64  t);.#endif..#ifd
2dc20 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ef SQLITE_ENABLE
2dc30 5f 44 45 53 45 52 49 41 4c 49 5a 45 0a 69 6e 74  _DESERIALIZE.int
2dc40 20 73 71 6c 69 74 65 33 4d 65 6d 64 62 49 6e 69   sqlite3MemdbIni
2dc50 74 28 76 6f 69 64 29 3b 0a 23 65 6e 64 69 66 0a  t(void);.#endif.
2dc60 0a 63 6f 6e 73 74 20 63 68 61 72 20 2a 73 71 6c  .const char *sql
2dc70 69 74 65 33 45 72 72 53 74 72 28 69 6e 74 29 3b  ite3ErrStr(int);
2dc80 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 65 61 64  .int sqlite3Read
2dc90 53 63 68 65 6d 61 28 50 61 72 73 65 20 2a 70 50  Schema(Parse *pP
2dca0 61 72 73 65 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a  arse);.CollSeq *
2dcb0 73 71 6c 69 74 65 33 46 69 6e 64 43 6f 6c 6c 53  sqlite3FindCollS
2dcc0 65 71 28 73 71 6c 69 74 65 33 2a 2c 75 38 20 65  eq(sqlite3*,u8 e
2dcd0 6e 63 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c  nc, const char*,
2dce0 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  int);.int sqlite
2dcf0 33 49 73 42 69 6e 61 72 79 28 63 6f 6e 73 74 20  3IsBinary(const 
2dd00 43 6f 6c 6c 53 65 71 2a 29 3b 0a 43 6f 6c 6c 53  CollSeq*);.CollS
2dd10 65 71 20 2a 73 71 6c 69 74 65 33 4c 6f 63 61 74  eq *sqlite3Locat
2dd20 65 43 6f 6c 6c 53 65 71 28 50 61 72 73 65 20 2a  eCollSeq(Parse *
2dd30 70 50 61 72 73 65 2c 20 63 6f 6e 73 74 20 63 68  pParse, const ch
2dd40 61 72 2a 7a 4e 61 6d 65 29 3b 0a 43 6f 6c 6c 53  ar*zName);.CollS
2dd50 65 71 20 2a 73 71 6c 69 74 65 33 45 78 70 72 43  eq *sqlite3ExprC
2dd60 6f 6c 6c 53 65 71 28 50 61 72 73 65 20 2a 70 50  ollSeq(Parse *pP
2dd70 61 72 73 65 2c 20 45 78 70 72 20 2a 70 45 78 70  arse, Expr *pExp
2dd80 72 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73 71 6c  r);.CollSeq *sql
2dd90 69 74 65 33 45 78 70 72 4e 4e 43 6f 6c 6c 53 65  ite3ExprNNCollSe
2dda0 71 28 50 61 72 73 65 20 2a 70 50 61 72 73 65 2c  q(Parse *pParse,
2ddb0 20 45 78 70 72 20 2a 70 45 78 70 72 29 3b 0a 69   Expr *pExpr);.i
2ddc0 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f  nt sqlite3ExprCo
2ddd0 6c 6c 53 65 71 4d 61 74 63 68 28 50 61 72 73 65  llSeqMatch(Parse
2dde0 2a 2c 45 78 70 72 2a 2c 45 78 70 72 2a 29 3b 0a  *,Expr*,Expr*);.
2ddf0 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70  Expr *sqlite3Exp
2de00 72 41 64 64 43 6f 6c 6c 61 74 65 54 6f 6b 65 6e  rAddCollateToken
2de10 28 50 61 72 73 65 20 2a 70 50 61 72 73 65 2c 20  (Parse *pParse, 
2de20 45 78 70 72 2a 2c 20 63 6f 6e 73 74 20 54 6f 6b  Expr*, const Tok
2de30 65 6e 2a 2c 20 69 6e 74 29 3b 0a 45 78 70 72 20  en*, int);.Expr 
2de40 2a 73 71 6c 69 74 65 33 45 78 70 72 41 64 64 43  *sqlite3ExprAddC
2de50 6f 6c 6c 61 74 65 53 74 72 69 6e 67 28 50 61 72  ollateString(Par
2de60 73 65 2a 2c 45 78 70 72 2a 2c 63 6f 6e 73 74 20  se*,Expr*,const 
2de70 63 68 61 72 2a 29 3b 0a 45 78 70 72 20 2a 73 71  char*);.Expr *sq
2de80 6c 69 74 65 33 45 78 70 72 53 6b 69 70 43 6f 6c  lite3ExprSkipCol
2de90 6c 61 74 65 28 45 78 70 72 2a 29 3b 0a 69 6e 74  late(Expr*);.int
2dea0 20 73 71 6c 69 74 65 33 43 68 65 63 6b 43 6f 6c   sqlite3CheckCol
2deb0 6c 53 65 71 28 50 61 72 73 65 20 2a 2c 20 43 6f  lSeq(Parse *, Co
2dec0 6c 6c 53 65 71 20 2a 29 3b 0a 69 6e 74 20 73 71  llSeq *);.int sq
2ded0 6c 69 74 65 33 57 72 69 74 61 62 6c 65 53 63 68  lite3WritableSch
2dee0 65 6d 61 28 73 71 6c 69 74 65 33 2a 29 3b 0a 69  ema(sqlite3*);.i
2def0 6e 74 20 73 71 6c 69 74 65 33 43 68 65 63 6b 4f  nt sqlite3CheckO
2df00 62 6a 65 63 74 4e 61 6d 65 28 50 61 72 73 65 20  bjectName(Parse 
2df10 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 29  *, const char *)
2df20 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 64  ;.void sqlite3Vd
2df30 62 65 53 65 74 43 68 61 6e 67 65 73 28 73 71 6c  beSetChanges(sql
2df40 69 74 65 33 20 2a 2c 20 69 6e 74 29 3b 0a 69 6e  ite3 *, int);.in
2df50 74 20 73 71 6c 69 74 65 33 41 64 64 49 6e 74 36  t sqlite3AddInt6
2df60 34 28 69 36 34 2a 2c 69 36 34 29 3b 0a 69 6e 74  4(i64*,i64);.int
2df70 20 73 71 6c 69 74 65 33 53 75 62 49 6e 74 36 34   sqlite3SubInt64
2df80 28 69 36 34 2a 2c 69 36 34 29 3b 0a 69 6e 74 20  (i64*,i64);.int 
2df90 73 71 6c 69 74 65 33 4d 75 6c 49 6e 74 36 34 28  sqlite3MulInt64(
2dfa0 69 36 34 2a 2c 69 36 34 29 3b 0a 69 6e 74 20 73  i64*,i64);.int s
2dfb0 71 6c 69 74 65 33 41 62 73 49 6e 74 33 32 28 69  qlite3AbsInt32(i
2dfc0 6e 74 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49  nt);.#ifdef SQLI
2dfd0 54 45 5f 45 4e 41 42 4c 45 5f 38 5f 33 5f 4e 41  TE_ENABLE_8_3_NA
2dfe0 4d 45 53 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  MES.void sqlite3
2dff0 46 69 6c 65 53 75 66 66 69 78 33 28 63 6f 6e 73  FileSuffix3(cons
2e000 74 20 63 68 61 72 2a 2c 20 63 68 61 72 2a 29 3b  t char*, char*);
2e010 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
2e020 73 71 6c 69 74 65 33 46 69 6c 65 53 75 66 66 69  sqlite3FileSuffi
2e030 78 33 28 58 2c 59 29 0a 23 65 6e 64 69 66 0a 75  x3(X,Y).#endif.u
2e040 38 20 73 71 6c 69 74 65 33 47 65 74 42 6f 6f 6c  8 sqlite3GetBool
2e050 65 61 6e 28 63 6f 6e 73 74 20 63 68 61 72 20 2a  ean(const char *
2e060 7a 2c 75 38 29 3b 0a 0a 63 6f 6e 73 74 20 76 6f  z,u8);..const vo
2e070 69 64 20 2a 73 71 6c 69 74 65 33 56 61 6c 75 65  id *sqlite3Value
2e080 54 65 78 74 28 73 71 6c 69 74 65 33 5f 76 61 6c  Text(sqlite3_val
2e090 75 65 2a 2c 20 75 38 29 3b 0a 69 6e 74 20 73 71  ue*, u8);.int sq
2e0a0 6c 69 74 65 33 56 61 6c 75 65 42 79 74 65 73 28  lite3ValueBytes(
2e0b0 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2c 20  sqlite3_value*, 
2e0c0 75 38 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  u8);.void sqlite
2e0d0 33 56 61 6c 75 65 53 65 74 53 74 72 28 73 71 6c  3ValueSetStr(sql
2e0e0 69 74 65 33 5f 76 61 6c 75 65 2a 2c 20 69 6e 74  ite3_value*, int
2e0f0 2c 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a 2c 75  , const void *,u
2e100 38 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  8,.             
2e110 20 20 20 20 20 20 20 20 20 20 20 76 6f 69 64 28             void(
2e120 2a 29 28 76 6f 69 64 2a 29 29 3b 0a 76 6f 69 64  *)(void*));.void
2e130 20 73 71 6c 69 74 65 33 56 61 6c 75 65 53 65 74   sqlite3ValueSet
2e140 4e 75 6c 6c 28 73 71 6c 69 74 65 33 5f 76 61 6c  Null(sqlite3_val
2e150 75 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  ue*);.void sqlit
2e160 65 33 56 61 6c 75 65 46 72 65 65 28 73 71 6c 69  e3ValueFree(sqli
2e170 74 65 33 5f 76 61 6c 75 65 2a 29 3b 0a 23 69 66  te3_value*);.#if
2e180 6e 64 65 66 20 53 51 4c 49 54 45 5f 55 4e 54 45  ndef SQLITE_UNTE
2e190 53 54 41 42 4c 45 0a 76 6f 69 64 20 73 71 6c 69  STABLE.void sqli
2e1a0 74 65 33 52 65 73 75 6c 74 49 6e 74 52 65 61 6c  te3ResultIntReal
2e1b0 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74  (sqlite3_context
2e1c0 2a 29 3b 0a 23 65 6e 64 69 66 0a 73 71 6c 69 74  *);.#endif.sqlit
2e1d0 65 33 5f 76 61 6c 75 65 20 2a 73 71 6c 69 74 65  e3_value *sqlite
2e1e0 33 56 61 6c 75 65 4e 65 77 28 73 71 6c 69 74 65  3ValueNew(sqlite
2e1f0 33 20 2a 29 3b 0a 23 69 66 6e 64 65 66 20 53 51  3 *);.#ifndef SQ
2e200 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36 0a  LITE_OMIT_UTF16.
2e210 63 68 61 72 20 2a 73 71 6c 69 74 65 33 55 74 66  char *sqlite3Utf
2e220 31 36 74 6f 38 28 73 71 6c 69 74 65 33 20 2a 2c  16to8(sqlite3 *,
2e230 20 63 6f 6e 73 74 20 76 6f 69 64 2a 2c 20 69 6e   const void*, in
2e240 74 2c 20 75 38 29 3b 0a 23 65 6e 64 69 66 0a 69  t, u8);.#endif.i
2e250 6e 74 20 73 71 6c 69 74 65 33 56 61 6c 75 65 46  nt sqlite3ValueF
2e260 72 6f 6d 45 78 70 72 28 73 71 6c 69 74 65 33 20  romExpr(sqlite3 
2e270 2a 2c 20 45 78 70 72 20 2a 2c 20 75 38 2c 20 75  *, Expr *, u8, u
2e280 38 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  8, sqlite3_value
2e290 20 2a 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74   **);.void sqlit
2e2a0 65 33 56 61 6c 75 65 41 70 70 6c 79 41 66 66 69  e3ValueApplyAffi
2e2b0 6e 69 74 79 28 73 71 6c 69 74 65 33 5f 76 61 6c  nity(sqlite3_val
2e2c0 75 65 20 2a 2c 20 75 38 2c 20 75 38 29 3b 0a 23  ue *, u8, u8);.#
2e2d0 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 41 4d  ifndef SQLITE_AM
2e2e0 41 4c 47 41 4d 41 54 49 4f 4e 0a 65 78 74 65 72  ALGAMATION.exter
2e2f0 6e 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64  n const unsigned
2e300 20 63 68 61 72 20 73 71 6c 69 74 65 33 4f 70 63   char sqlite3Opc
2e310 6f 64 65 50 72 6f 70 65 72 74 79 5b 5d 3b 0a 65  odeProperty[];.e
2e320 78 74 65 72 6e 20 63 6f 6e 73 74 20 63 68 61 72  xtern const char
2e330 20 73 71 6c 69 74 65 33 53 74 72 42 49 4e 41 52   sqlite3StrBINAR
2e340 59 5b 5d 3b 0a 65 78 74 65 72 6e 20 63 6f 6e 73  Y[];.extern cons
2e350 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20  t unsigned char 
2e360 73 71 6c 69 74 65 33 55 70 70 65 72 54 6f 4c 6f  sqlite3UpperToLo
2e370 77 65 72 5b 5d 3b 0a 65 78 74 65 72 6e 20 63 6f  wer[];.extern co
2e380 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61  nst unsigned cha
2e390 72 20 73 71 6c 69 74 65 33 43 74 79 70 65 4d 61  r sqlite3CtypeMa
2e3a0 70 5b 5d 3b 0a 65 78 74 65 72 6e 20 63 6f 6e 73  p[];.extern cons
2e3b0 74 20 54 6f 6b 65 6e 20 73 71 6c 69 74 65 33 49  t Token sqlite3I
2e3c0 6e 74 54 6f 6b 65 6e 73 5b 5d 3b 0a 65 78 74 65  ntTokens[];.exte
2e3d0 72 6e 20 53 51 4c 49 54 45 5f 57 53 44 20 73 74  rn SQLITE_WSD st
2e3e0 72 75 63 74 20 53 71 6c 69 74 65 33 43 6f 6e 66  ruct Sqlite3Conf
2e3f0 69 67 20 73 71 6c 69 74 65 33 43 6f 6e 66 69 67  ig sqlite3Config
2e400 3b 0a 65 78 74 65 72 6e 20 46 75 6e 63 44 65 66  ;.extern FuncDef
2e410 48 61 73 68 20 73 71 6c 69 74 65 33 42 75 69 6c  Hash sqlite3Buil
2e420 74 69 6e 46 75 6e 63 74 69 6f 6e 73 3b 0a 23 69  tinFunctions;.#i
2e430 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
2e440 54 5f 57 53 44 0a 65 78 74 65 72 6e 20 69 6e 74  T_WSD.extern int
2e450 20 73 71 6c 69 74 65 33 50 65 6e 64 69 6e 67 42   sqlite3PendingB
2e460 79 74 65 3b 0a 23 65 6e 64 69 66 0a 23 65 6e 64  yte;.#endif.#end
2e470 69 66 0a 23 69 66 64 65 66 20 56 44 42 45 5f 50  if.#ifdef VDBE_P
2e480 52 4f 46 49 4c 45 0a 65 78 74 65 72 6e 20 73 71  ROFILE.extern sq
2e490 6c 69 74 65 33 5f 75 69 6e 74 36 34 20 73 71 6c  lite3_uint64 sql
2e4a0 69 74 65 33 4e 50 72 6f 66 69 6c 65 43 6e 74 3b  ite3NProfileCnt;
2e4b0 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c  .#endif.void sql
2e4c0 69 74 65 33 52 6f 6f 74 50 61 67 65 4d 6f 76 65  ite3RootPageMove
2e4d0 64 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74 2c  d(sqlite3*, int,
2e4e0 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64   int, int);.void
2e4f0 20 73 71 6c 69 74 65 33 52 65 69 6e 64 65 78 28   sqlite3Reindex(
2e500 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 20  Parse*, Token*, 
2e510 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71  Token*);.void sq
2e520 6c 69 74 65 33 41 6c 74 65 72 46 75 6e 63 74 69  lite3AlterFuncti
2e530 6f 6e 73 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20  ons(void);.void 
2e540 73 71 6c 69 74 65 33 41 6c 74 65 72 52 65 6e 61  sqlite3AlterRena
2e550 6d 65 54 61 62 6c 65 28 50 61 72 73 65 2a 2c 20  meTable(Parse*, 
2e560 53 72 63 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a  SrcList*, Token*
2e570 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41  );.void sqlite3A
2e580 6c 74 65 72 52 65 6e 61 6d 65 43 6f 6c 75 6d 6e  lterRenameColumn
2e590 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74  (Parse*, SrcList
2e5a0 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e  *, Token*, Token
2e5b0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 47  *);.int sqlite3G
2e5c0 65 74 54 6f 6b 65 6e 28 63 6f 6e 73 74 20 75 6e  etToken(const un
2e5d0 73 69 67 6e 65 64 20 63 68 61 72 20 2a 2c 20 69  signed char *, i
2e5e0 6e 74 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  nt *);.void sqli
2e5f0 74 65 33 4e 65 73 74 65 64 50 61 72 73 65 28 50  te3NestedParse(P
2e600 61 72 73 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61  arse*, const cha
2e610 72 2a 2c 20 2e 2e 2e 29 3b 0a 76 6f 69 64 20 73  r*, ...);.void s
2e620 71 6c 69 74 65 33 45 78 70 69 72 65 50 72 65 70  qlite3ExpirePrep
2e630 61 72 65 64 53 74 61 74 65 6d 65 6e 74 73 28 73  aredStatements(s
2e640 71 6c 69 74 65 33 2a 2c 20 69 6e 74 29 3b 0a 76  qlite3*, int);.v
2e650 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 64 65 52  oid sqlite3CodeR
2e660 68 73 4f 66 49 4e 28 50 61 72 73 65 2a 2c 20 45  hsOfIN(Parse*, E
2e670 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20  xpr*, int);.int 
2e680 73 71 6c 69 74 65 33 43 6f 64 65 53 75 62 73 65  sqlite3CodeSubse
2e690 6c 65 63 74 28 50 61 72 73 65 2a 2c 20 45 78 70  lect(Parse*, Exp
2e6a0 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  r*);.void sqlite
2e6b0 33 53 65 6c 65 63 74 50 72 65 70 28 50 61 72 73  3SelectPrep(Pars
2e6c0 65 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 4e 61 6d  e*, Select*, Nam
2e6d0 65 43 6f 6e 74 65 78 74 2a 29 3b 0a 76 6f 69 64  eContext*);.void
2e6e0 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74 57 72   sqlite3SelectWr
2e6f0 6f 6e 67 4e 75 6d 54 65 72 6d 73 45 72 72 6f 72  ongNumTermsError
2e700 28 50 61 72 73 65 20 2a 70 50 61 72 73 65 2c 20  (Parse *pParse, 
2e710 53 65 6c 65 63 74 20 2a 70 29 3b 0a 69 6e 74 20  Select *p);.int 
2e720 73 71 6c 69 74 65 33 4d 61 74 63 68 53 70 61 6e  sqlite3MatchSpan
2e730 4e 61 6d 65 28 63 6f 6e 73 74 20 63 68 61 72 2a  Name(const char*
2e740 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63  , const char*, c
2e750 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73  onst char*, cons
2e760 74 20 63 68 61 72 2a 29 3b 0a 69 6e 74 20 73 71  t char*);.int sq
2e770 6c 69 74 65 33 52 65 73 6f 6c 76 65 45 78 70 72  lite3ResolveExpr
2e780 4e 61 6d 65 73 28 4e 61 6d 65 43 6f 6e 74 65 78  Names(NameContex
2e790 74 2a 2c 20 45 78 70 72 2a 29 3b 0a 69 6e 74 20  t*, Expr*);.int 
2e7a0 73 71 6c 69 74 65 33 52 65 73 6f 6c 76 65 45 78  sqlite3ResolveEx
2e7b0 70 72 4c 69 73 74 4e 61 6d 65 73 28 4e 61 6d 65  prListNames(Name
2e7c0 43 6f 6e 74 65 78 74 2a 2c 20 45 78 70 72 4c 69  Context*, ExprLi
2e7d0 73 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  st*);.void sqlit
2e7e0 65 33 52 65 73 6f 6c 76 65 53 65 6c 65 63 74 4e  e3ResolveSelectN
2e7f0 61 6d 65 73 28 50 61 72 73 65 2a 2c 20 53 65 6c  ames(Parse*, Sel
2e800 65 63 74 2a 2c 20 4e 61 6d 65 43 6f 6e 74 65 78  ect*, NameContex
2e810 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  t*);.int sqlite3
2e820 52 65 73 6f 6c 76 65 53 65 6c 66 52 65 66 65 72  ResolveSelfRefer
2e830 65 6e 63 65 28 50 61 72 73 65 2a 2c 54 61 62 6c  ence(Parse*,Tabl
2e840 65 2a 2c 69 6e 74 2c 45 78 70 72 2a 2c 45 78 70  e*,int,Expr*,Exp
2e850 72 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c  rList*);.int sql
2e860 69 74 65 33 52 65 73 6f 6c 76 65 4f 72 64 65 72  ite3ResolveOrder
2e870 47 72 6f 75 70 42 79 28 50 61 72 73 65 2a 2c 20  GroupBy(Parse*, 
2e880 53 65 6c 65 63 74 2a 2c 20 45 78 70 72 4c 69 73  Select*, ExprLis
2e890 74 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29  t*, const char*)
2e8a0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f  ;.void sqlite3Co
2e8b0 6c 75 6d 6e 44 65 66 61 75 6c 74 28 56 64 62 65  lumnDefault(Vdbe
2e8c0 20 2a 2c 20 54 61 62 6c 65 20 2a 2c 20 69 6e 74   *, Table *, int
2e8d0 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
2e8e0 69 74 65 33 41 6c 74 65 72 46 69 6e 69 73 68 41  ite3AlterFinishA
2e8f0 64 64 43 6f 6c 75 6d 6e 28 50 61 72 73 65 20 2a  ddColumn(Parse *
2e900 2c 20 54 6f 6b 65 6e 20 2a 29 3b 0a 76 6f 69 64  , Token *);.void
2e910 20 73 71 6c 69 74 65 33 41 6c 74 65 72 42 65 67   sqlite3AlterBeg
2e920 69 6e 41 64 64 43 6f 6c 75 6d 6e 28 50 61 72 73  inAddColumn(Pars
2e930 65 20 2a 2c 20 53 72 63 4c 69 73 74 20 2a 29 3b  e *, SrcList *);
2e940 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 52 65  .void *sqlite3Re
2e950 6e 61 6d 65 54 6f 6b 65 6e 4d 61 70 28 50 61 72  nameTokenMap(Par
2e960 73 65 2a 2c 20 76 6f 69 64 2a 2c 20 54 6f 6b 65  se*, void*, Toke
2e970 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  n*);.void sqlite
2e980 33 52 65 6e 61 6d 65 54 6f 6b 65 6e 52 65 6d 61  3RenameTokenRema
2e990 70 28 50 61 72 73 65 2a 2c 20 76 6f 69 64 20 2a  p(Parse*, void *
2e9a0 70 54 6f 2c 20 76 6f 69 64 20 2a 70 46 72 6f 6d  pTo, void *pFrom
2e9b0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52  );.void sqlite3R
2e9c0 65 6e 61 6d 65 45 78 70 72 55 6e 6d 61 70 28 50  enameExprUnmap(P
2e9d0 61 72 73 65 2a 2c 20 45 78 70 72 2a 29 3b 0a 76  arse*, Expr*);.v
2e9e0 6f 69 64 20 73 71 6c 69 74 65 33 52 65 6e 61 6d  oid sqlite3Renam
2e9f0 65 45 78 70 72 6c 69 73 74 55 6e 6d 61 70 28 50  eExprlistUnmap(P
2ea00 61 72 73 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a  arse*, ExprList*
2ea10 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73 71 6c 69  );.CollSeq *sqli
2ea20 74 65 33 47 65 74 43 6f 6c 6c 53 65 71 28 50 61  te3GetCollSeq(Pa
2ea30 72 73 65 2a 2c 20 75 38 2c 20 43 6f 6c 6c 53 65  rse*, u8, CollSe
2ea40 71 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  q *, const char*
2ea50 29 3b 0a 63 68 61 72 20 73 71 6c 69 74 65 33 41  );.char sqlite3A
2ea60 66 66 69 6e 69 74 79 54 79 70 65 28 63 6f 6e 73  ffinityType(cons
2ea70 74 20 63 68 61 72 2a 2c 20 43 6f 6c 75 6d 6e 2a  t char*, Column*
2ea80 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41  );.void sqlite3A
2ea90 6e 61 6c 79 7a 65 28 50 61 72 73 65 2a 2c 20 54  nalyze(Parse*, T
2eaa0 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a  oken*, Token*);.
2eab0 69 6e 74 20 73 71 6c 69 74 65 33 49 6e 76 6f 6b  int sqlite3Invok
2eac0 65 42 75 73 79 48 61 6e 64 6c 65 72 28 42 75 73  eBusyHandler(Bus
2ead0 79 48 61 6e 64 6c 65 72 2a 2c 20 73 71 6c 69 74  yHandler*, sqlit
2eae0 65 33 5f 66 69 6c 65 2a 29 3b 0a 69 6e 74 20 73  e3_file*);.int s
2eaf0 71 6c 69 74 65 33 46 69 6e 64 44 62 28 73 71 6c  qlite3FindDb(sql
2eb00 69 74 65 33 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a  ite3*, Token*);.
2eb10 69 6e 74 20 73 71 6c 69 74 65 33 46 69 6e 64 44  int sqlite3FindD
2eb20 62 4e 61 6d 65 28 73 71 6c 69 74 65 33 20 2a 2c  bName(sqlite3 *,
2eb30 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 29 3b 0a   const char *);.
2eb40 69 6e 74 20 73 71 6c 69 74 65 33 41 6e 61 6c 79  int sqlite3Analy
2eb50 73 69 73 4c 6f 61 64 28 73 71 6c 69 74 65 33 2a  sisLoad(sqlite3*
2eb60 2c 69 6e 74 20 69 44 42 29 3b 0a 76 6f 69 64 20  ,int iDB);.void 
2eb70 73 71 6c 69 74 65 33 44 65 6c 65 74 65 49 6e 64  sqlite3DeleteInd
2eb80 65 78 53 61 6d 70 6c 65 73 28 73 71 6c 69 74 65  exSamples(sqlite
2eb90 33 2a 2c 49 6e 64 65 78 2a 29 3b 0a 76 6f 69 64  3*,Index*);.void
2eba0 20 73 71 6c 69 74 65 33 44 65 66 61 75 6c 74 52   sqlite3DefaultR
2ebb0 6f 77 45 73 74 28 49 6e 64 65 78 2a 29 3b 0a 76  owEst(Index*);.v
2ebc0 6f 69 64 20 73 71 6c 69 74 65 33 52 65 67 69 73  oid sqlite3Regis
2ebd0 74 65 72 4c 69 6b 65 46 75 6e 63 74 69 6f 6e 73  terLikeFunctions
2ebe0 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74 29 3b  (sqlite3*, int);
2ebf0 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 73 4c 69  .int sqlite3IsLi
2ec00 6b 65 46 75 6e 63 74 69 6f 6e 28 73 71 6c 69 74  keFunction(sqlit
2ec10 65 33 2a 2c 45 78 70 72 2a 2c 69 6e 74 2a 2c 63  e3*,Expr*,int*,c
2ec20 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  har*);.void sqli
2ec30 74 65 33 53 63 68 65 6d 61 43 6c 65 61 72 28 76  te3SchemaClear(v
2ec40 6f 69 64 20 2a 29 3b 0a 53 63 68 65 6d 61 20 2a  oid *);.Schema *
2ec50 73 71 6c 69 74 65 33 53 63 68 65 6d 61 47 65 74  sqlite3SchemaGet
2ec60 28 73 71 6c 69 74 65 33 20 2a 2c 20 42 74 72 65  (sqlite3 *, Btre
2ec70 65 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  e *);.int sqlite
2ec80 33 53 63 68 65 6d 61 54 6f 49 6e 64 65 78 28 73  3SchemaToIndex(s
2ec90 71 6c 69 74 65 33 20 2a 64 62 2c 20 53 63 68 65  qlite3 *db, Sche
2eca0 6d 61 20 2a 29 3b 0a 4b 65 79 49 6e 66 6f 20 2a  ma *);.KeyInfo *
2ecb0 73 71 6c 69 74 65 33 4b 65 79 49 6e 66 6f 41 6c  sqlite3KeyInfoAl
2ecc0 6c 6f 63 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74  loc(sqlite3*,int
2ecd0 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ,int);.void sqli
2ece0 74 65 33 4b 65 79 49 6e 66 6f 55 6e 72 65 66 28  te3KeyInfoUnref(
2ecf0 4b 65 79 49 6e 66 6f 2a 29 3b 0a 4b 65 79 49 6e  KeyInfo*);.KeyIn
2ed00 66 6f 20 2a 73 71 6c 69 74 65 33 4b 65 79 49 6e  fo *sqlite3KeyIn
2ed10 66 6f 52 65 66 28 4b 65 79 49 6e 66 6f 2a 29 3b  foRef(KeyInfo*);
2ed20 0a 4b 65 79 49 6e 66 6f 20 2a 73 71 6c 69 74 65  .KeyInfo *sqlite
2ed30 33 4b 65 79 49 6e 66 6f 4f 66 49 6e 64 65 78 28  3KeyInfoOfIndex(
2ed40 50 61 72 73 65 2a 2c 20 49 6e 64 65 78 2a 29 3b  Parse*, Index*);
2ed50 0a 4b 65 79 49 6e 66 6f 20 2a 73 71 6c 69 74 65  .KeyInfo *sqlite
2ed60 33 4b 65 79 49 6e 66 6f 46 72 6f 6d 45 78 70 72  3KeyInfoFromExpr
2ed70 4c 69 73 74 28 50 61 72 73 65 2a 2c 20 45 78 70  List(Parse*, Exp
2ed80 72 4c 69 73 74 2a 2c 20 69 6e 74 2c 20 69 6e 74  rList*, int, int
2ed90 29 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54  );..#ifdef SQLIT
2eda0 45 5f 44 45 42 55 47 0a 69 6e 74 20 73 71 6c 69  E_DEBUG.int sqli
2edb0 74 65 33 4b 65 79 49 6e 66 6f 49 73 57 72 69 74  te3KeyInfoIsWrit
2edc0 65 61 62 6c 65 28 4b 65 79 49 6e 66 6f 2a 29 3b  eable(KeyInfo*);
2edd0 0a 23 65 6e 64 69 66 0a 69 6e 74 20 73 71 6c 69  .#endif.int sqli
2ede0 74 65 33 43 72 65 61 74 65 46 75 6e 63 28 73 71  te3CreateFunc(sq
2edf0 6c 69 74 65 33 20 2a 2c 20 63 6f 6e 73 74 20 63  lite3 *, const c
2ee00 68 61 72 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c  har *, int, int,
2ee10 20 76 6f 69 64 20 2a 2c 0a 20 20 76 6f 69 64 20   void *,.  void 
2ee20 28 2a 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74  (*)(sqlite3_cont
2ee30 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33  ext*,int,sqlite3
2ee40 5f 76 61 6c 75 65 20 2a 2a 29 2c 0a 20 20 76 6f  _value **),.  vo
2ee50 69 64 20 28 2a 29 28 73 71 6c 69 74 65 33 5f 63  id (*)(sqlite3_c
2ee60 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69  ontext*,int,sqli
2ee70 74 65 33 5f 76 61 6c 75 65 20 2a 2a 29 2c 20 0a  te3_value **), .
2ee80 20 20 76 6f 69 64 20 28 2a 29 28 73 71 6c 69 74    void (*)(sqlit
2ee90 65 33 5f 63 6f 6e 74 65 78 74 2a 29 2c 0a 20 20  e3_context*),.  
2eea0 76 6f 69 64 20 28 2a 29 28 73 71 6c 69 74 65 33  void (*)(sqlite3
2eeb0 5f 63 6f 6e 74 65 78 74 2a 29 2c 0a 20 20 76 6f  _context*),.  vo
2eec0 69 64 20 28 2a 29 28 73 71 6c 69 74 65 33 5f 63  id (*)(sqlite3_c
2eed0 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69  ontext*,int,sqli
2eee0 74 65 33 5f 76 61 6c 75 65 20 2a 2a 29 2c 20 0a  te3_value **), .
2eef0 20 20 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72    FuncDestructor
2ef00 20 2a 70 44 65 73 74 72 75 63 74 6f 72 0a 29 3b   *pDestructor.);
2ef10 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4e 6f 6f  .void sqlite3Noo
2ef20 70 44 65 73 74 72 75 63 74 6f 72 28 76 6f 69 64  pDestructor(void
2ef30 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
2ef40 4f 6f 6d 46 61 75 6c 74 28 73 71 6c 69 74 65 33  OomFault(sqlite3
2ef50 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
2ef60 4f 6f 6d 43 6c 65 61 72 28 73 71 6c 69 74 65 33  OomClear(sqlite3
2ef70 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 41  *);.int sqlite3A
2ef80 70 69 45 78 69 74 28 73 71 6c 69 74 65 33 20 2a  piExit(sqlite3 *
2ef90 64 62 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71  db, int);.int sq
2efa0 6c 69 74 65 33 4f 70 65 6e 54 65 6d 70 44 61 74  lite3OpenTempDat
2efb0 61 62 61 73 65 28 50 61 72 73 65 20 2a 29 3b 0a  abase(Parse *);.
2efc0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74 72  .void sqlite3Str
2efd0 41 63 63 75 6d 49 6e 69 74 28 53 74 72 41 63 63  AccumInit(StrAcc
2efe0 75 6d 2a 2c 20 73 71 6c 69 74 65 33 2a 2c 20 63  um*, sqlite3*, c
2eff0 68 61 72 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b  har*, int, int);
2f000 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33 53 74  .char *sqlite3St
2f010 72 41 63 63 75 6d 46 69 6e 69 73 68 28 53 74 72  rAccumFinish(Str
2f020 41 63 63 75 6d 2a 29 3b 0a 76 6f 69 64 20 73 71  Accum*);.void sq
2f030 6c 69 74 65 33 53 65 6c 65 63 74 44 65 73 74 49  lite3SelectDestI
2f040 6e 69 74 28 53 65 6c 65 63 74 44 65 73 74 2a 2c  nit(SelectDest*,
2f050 69 6e 74 2c 69 6e 74 29 3b 0a 45 78 70 72 20 2a  int,int);.Expr *
2f060 73 71 6c 69 74 65 33 43 72 65 61 74 65 43 6f 6c  sqlite3CreateCol
2f070 75 6d 6e 45 78 70 72 28 73 71 6c 69 74 65 33 20  umnExpr(sqlite3 
2f080 2a 2c 20 53 72 63 4c 69 73 74 20 2a 2c 20 69 6e  *, SrcList *, in
2f090 74 2c 20 69 6e 74 29 3b 0a 0a 76 6f 69 64 20 73  t, int);..void s
2f0a0 71 6c 69 74 65 33 42 61 63 6b 75 70 52 65 73 74  qlite3BackupRest
2f0b0 61 72 74 28 73 71 6c 69 74 65 33 5f 62 61 63 6b  art(sqlite3_back
2f0c0 75 70 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  up *);.void sqli
2f0d0 74 65 33 42 61 63 6b 75 70 55 70 64 61 74 65 28  te3BackupUpdate(
2f0e0 73 71 6c 69 74 65 33 5f 62 61 63 6b 75 70 20 2a  sqlite3_backup *
2f0f0 2c 20 50 67 6e 6f 2c 20 63 6f 6e 73 74 20 75 38  , Pgno, const u8
2f100 20 2a 29 3b 0a 0a 23 69 66 6e 64 65 66 20 53 51   *);..#ifndef SQ
2f110 4c 49 54 45 5f 4f 4d 49 54 5f 53 55 42 51 55 45  LITE_OMIT_SUBQUE
2f120 52 59 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78  RY.int sqlite3Ex
2f130 70 72 43 68 65 63 6b 49 4e 28 50 61 72 73 65 2a  prCheckIN(Parse*
2f140 2c 20 45 78 70 72 2a 29 3b 0a 23 65 6c 73 65 0a  , Expr*);.#else.
2f150 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
2f160 45 78 70 72 43 68 65 63 6b 49 4e 28 78 2c 79 29  ExprCheckIN(x,y)
2f170 20 53 51 4c 49 54 45 5f 4f 4b 0a 23 65 6e 64 69   SQLITE_OK.#endi
2f180 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  f..#ifdef SQLITE
2f190 5f 45 4e 41 42 4c 45 5f 53 54 41 54 34 0a 69 6e  _ENABLE_STAT4.in
2f1a0 74 20 73 71 6c 69 74 65 33 53 74 61 74 34 50 72  t sqlite3Stat4Pr
2f1b0 6f 62 65 53 65 74 56 61 6c 75 65 28 0a 20 20 20  obeSetValue(.   
2f1c0 20 50 61 72 73 65 2a 2c 49 6e 64 65 78 2a 2c 55   Parse*,Index*,U
2f1d0 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 2a 2a 2c  npackedRecord**,
2f1e0 45 78 70 72 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e  Expr*,int,int,in
2f1f0 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  t*);.int sqlite3
2f200 53 74 61 74 34 56 61 6c 75 65 46 72 6f 6d 45 78  Stat4ValueFromEx
2f210 70 72 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a  pr(Parse*, Expr*
2f220 2c 20 75 38 2c 20 73 71 6c 69 74 65 33 5f 76 61  , u8, sqlite3_va
2f230 6c 75 65 2a 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  lue**);.void sql
2f240 69 74 65 33 53 74 61 74 34 50 72 6f 62 65 46 72  ite3Stat4ProbeFr
2f250 65 65 28 55 6e 70 61 63 6b 65 64 52 65 63 6f 72  ee(UnpackedRecor
2f260 64 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  d*);.int sqlite3
2f270 53 74 61 74 34 43 6f 6c 75 6d 6e 28 73 71 6c 69  Stat4Column(sqli
2f280 74 65 33 2a 2c 20 63 6f 6e 73 74 20 76 6f 69 64  te3*, const void
2f290 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 73 71 6c  *, int, int, sql
2f2a0 69 74 65 33 5f 76 61 6c 75 65 2a 2a 29 3b 0a 63  ite3_value**);.c
2f2b0 68 61 72 20 73 71 6c 69 74 65 33 49 6e 64 65 78  har sqlite3Index
2f2c0 43 6f 6c 75 6d 6e 41 66 66 69 6e 69 74 79 28 73  ColumnAffinity(s
2f2d0 71 6c 69 74 65 33 2a 2c 20 49 6e 64 65 78 2a 2c  qlite3*, Index*,
2f2e0 20 69 6e 74 29 3b 0a 23 65 6e 64 69 66 0a 0a 2f   int);.#endif../
2f2f0 2a 0a 2a 2a 20 54 68 65 20 69 6e 74 65 72 66 61  *.** The interfa
2f300 63 65 20 74 6f 20 74 68 65 20 4c 45 4d 4f 4e 2d  ce to the LEMON-
2f310 67 65 6e 65 72 61 74 65 64 20 70 61 72 73 65 72  generated parser
2f320 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  .*/.#ifndef SQLI
2f330 54 45 5f 41 4d 41 4c 47 41 4d 41 54 49 4f 4e 0a  TE_AMALGAMATION.
2f340 20 20 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 50    void *sqlite3P
2f350 61 72 73 65 72 41 6c 6c 6f 63 28 76 6f 69 64 2a  arserAlloc(void*
2f360 28 2a 29 28 75 36 34 29 2c 20 50 61 72 73 65 2a  (*)(u64), Parse*
2f370 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
2f380 33 50 61 72 73 65 72 46 72 65 65 28 76 6f 69 64  3ParserFree(void
2f390 2a 2c 20 76 6f 69 64 28 2a 29 28 76 6f 69 64 2a  *, void(*)(void*
2f3a0 29 29 3b 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20  ));.#endif.void 
2f3b0 73 71 6c 69 74 65 33 50 61 72 73 65 72 28 76 6f  sqlite3Parser(vo
2f3c0 69 64 2a 2c 20 69 6e 74 2c 20 54 6f 6b 65 6e 29  id*, int, Token)
2f3d0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 50 61 72  ;.int sqlite3Par
2f3e0 73 65 72 46 61 6c 6c 62 61 63 6b 28 69 6e 74 29  serFallback(int)
2f3f0 3b 0a 23 69 66 64 65 66 20 59 59 54 52 41 43 4b  ;.#ifdef YYTRACK
2f400 4d 41 58 53 54 41 43 4b 44 45 50 54 48 0a 20 20  MAXSTACKDEPTH.  
2f410 69 6e 74 20 73 71 6c 69 74 65 33 50 61 72 73 65  int sqlite3Parse
2f420 72 53 74 61 63 6b 50 65 61 6b 28 76 6f 69 64 2a  rStackPeak(void*
2f430 29 3b 0a 23 65 6e 64 69 66 0a 0a 76 6f 69 64 20  );.#endif..void 
2f440 73 71 6c 69 74 65 33 41 75 74 6f 4c 6f 61 64 45  sqlite3AutoLoadE
2f450 78 74 65 6e 73 69 6f 6e 73 28 73 71 6c 69 74 65  xtensions(sqlite
2f460 33 2a 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c  3*);.#ifndef SQL
2f470 49 54 45 5f 4f 4d 49 54 5f 4c 4f 41 44 5f 45 58  ITE_OMIT_LOAD_EX
2f480 54 45 4e 53 49 4f 4e 0a 20 20 76 6f 69 64 20 73  TENSION.  void s
2f490 71 6c 69 74 65 33 43 6c 6f 73 65 45 78 74 65 6e  qlite3CloseExten
2f4a0 73 69 6f 6e 73 28 73 71 6c 69 74 65 33 2a 29 3b  sions(sqlite3*);
2f4b0 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
2f4c0 73 71 6c 69 74 65 33 43 6c 6f 73 65 45 78 74 65  sqlite3CloseExte
2f4d0 6e 73 69 6f 6e 73 28 58 29 0a 23 65 6e 64 69 66  nsions(X).#endif
2f4e0 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
2f4f0 5f 4f 4d 49 54 5f 53 48 41 52 45 44 5f 43 41 43  _OMIT_SHARED_CAC
2f500 48 45 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  HE.  void sqlite
2f510 33 54 61 62 6c 65 4c 6f 63 6b 28 50 61 72 73 65  3TableLock(Parse
2f520 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 75 38   *, int, int, u8
2f530 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 29 3b  , const char *);
2f540 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65  .#else.  #define
2f550 20 73 71 6c 69 74 65 33 54 61 62 6c 65 4c 6f 63   sqlite3TableLoc
2f560 6b 28 76 2c 77 2c 78 2c 79 2c 7a 29 0a 23 65 6e  k(v,w,x,y,z).#en
2f570 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49  dif..#ifdef SQLI
2f580 54 45 5f 54 45 53 54 0a 20 20 69 6e 74 20 73 71  TE_TEST.  int sq
2f590 6c 69 74 65 33 55 74 66 38 54 6f 38 28 75 6e 73  lite3Utf8To8(uns
2f5a0 69 67 6e 65 64 20 63 68 61 72 2a 29 3b 0a 23 65  igned char*);.#e
2f5b0 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c  ndif..#ifdef SQL
2f5c0 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
2f5d0 54 41 42 4c 45 0a 23 20 20 64 65 66 69 6e 65 20  TABLE.#  define 
2f5e0 73 71 6c 69 74 65 33 56 74 61 62 43 6c 65 61 72  sqlite3VtabClear
2f5f0 28 59 29 0a 23 20 20 64 65 66 69 6e 65 20 73 71  (Y).#  define sq
2f600 6c 69 74 65 33 56 74 61 62 53 79 6e 63 28 58 2c  lite3VtabSync(X,
2f610 59 29 20 53 51 4c 49 54 45 5f 4f 4b 0a 23 20 20  Y) SQLITE_OK.#  
2f620 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74  define sqlite3Vt
2f630 61 62 52 6f 6c 6c 62 61 63 6b 28 58 29 0a 23 20  abRollback(X).# 
2f640 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56   define sqlite3V
2f650 74 61 62 43 6f 6d 6d 69 74 28 58 29 0a 23 20 20  tabCommit(X).#  
2f660 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74  define sqlite3Vt
2f670 61 62 49 6e 53 79 6e 63 28 64 62 29 20 30 0a 23  abInSync(db) 0.#
2f680 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33    define sqlite3
2f690 56 74 61 62 4c 6f 63 6b 28 58 29 0a 23 20 20 64  VtabLock(X).#  d
2f6a0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61  efine sqlite3Vta
2f6b0 62 55 6e 6c 6f 63 6b 28 58 29 0a 23 20 20 64 65  bUnlock(X).#  de
2f6c0 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62  fine sqlite3Vtab
2f6d0 55 6e 6c 6f 63 6b 4c 69 73 74 28 58 29 0a 23 20  UnlockList(X).# 
2f6e0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56   define sqlite3V
2f6f0 74 61 62 53 61 76 65 70 6f 69 6e 74 28 58 2c 20  tabSavepoint(X, 
2f700 59 2c 20 5a 29 20 53 51 4c 49 54 45 5f 4f 4b 0a  Y, Z) SQLITE_OK.
2f710 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  #  define sqlite
2f720 33 47 65 74 56 54 61 62 6c 65 28 58 2c 59 29 20  3GetVTable(X,Y) 
2f730 20 28 28 56 54 61 62 6c 65 2a 29 30 29 0a 23 65   ((VTable*)0).#e
2f740 6c 73 65 0a 20 20 20 76 6f 69 64 20 73 71 6c 69  lse.   void sqli
2f750 74 65 33 56 74 61 62 43 6c 65 61 72 28 73 71 6c  te3VtabClear(sql
2f760 69 74 65 33 20 2a 64 62 2c 20 54 61 62 6c 65 2a  ite3 *db, Table*
2f770 29 3b 0a 20 20 20 76 6f 69 64 20 73 71 6c 69 74  );.   void sqlit
2f780 65 33 56 74 61 62 44 69 73 63 6f 6e 6e 65 63 74  e3VtabDisconnect
2f790 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 54 61  (sqlite3 *db, Ta
2f7a0 62 6c 65 20 2a 70 29 3b 0a 20 20 20 69 6e 74 20  ble *p);.   int 
2f7b0 73 71 6c 69 74 65 33 56 74 61 62 53 79 6e 63 28  sqlite3VtabSync(
2f7c0 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 56 64 62  sqlite3 *db, Vdb
2f7d0 65 2a 29 3b 0a 20 20 20 69 6e 74 20 73 71 6c 69  e*);.   int sqli
2f7e0 74 65 33 56 74 61 62 52 6f 6c 6c 62 61 63 6b 28  te3VtabRollback(
2f7f0 73 71 6c 69 74 65 33 20 2a 64 62 29 3b 0a 20 20  sqlite3 *db);.  
2f800 20 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62   int sqlite3Vtab
2f810 43 6f 6d 6d 69 74 28 73 71 6c 69 74 65 33 20 2a  Commit(sqlite3 *
2f820 64 62 29 3b 0a 20 20 20 76 6f 69 64 20 73 71 6c  db);.   void sql
2f830 69 74 65 33 56 74 61 62 4c 6f 63 6b 28 56 54 61  ite3VtabLock(VTa
2f840 62 6c 65 20 2a 29 3b 0a 20 20 20 76 6f 69 64 20  ble *);.   void 
2f850 73 71 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f 63  sqlite3VtabUnloc
2f860 6b 28 56 54 61 62 6c 65 20 2a 29 3b 0a 20 20 20  k(VTable *);.   
2f870 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62  void sqlite3Vtab
2f880 55 6e 6c 6f 63 6b 4c 69 73 74 28 73 71 6c 69 74  UnlockList(sqlit
2f890 65 33 2a 29 3b 0a 20 20 20 69 6e 74 20 73 71 6c  e3*);.   int sql
2f8a0 69 74 65 33 56 74 61 62 53 61 76 65 70 6f 69 6e  ite3VtabSavepoin
2f8b0 74 28 73 71 6c 69 74 65 33 20 2a 2c 20 69 6e 74  t(sqlite3 *, int
2f8c0 2c 20 69 6e 74 29 3b 0a 20 20 20 76 6f 69 64 20  , int);.   void 
2f8d0 73 71 6c 69 74 65 33 56 74 61 62 49 6d 70 6f 72  sqlite3VtabImpor
2f8e0 74 45 72 72 6d 73 67 28 56 64 62 65 2a 2c 20 73  tErrmsg(Vdbe*, s
2f8f0 71 6c 69 74 65 33 5f 76 74 61 62 2a 29 3b 0a 20  qlite3_vtab*);. 
2f900 20 20 56 54 61 62 6c 65 20 2a 73 71 6c 69 74 65    VTable *sqlite
2f910 33 47 65 74 56 54 61 62 6c 65 28 73 71 6c 69 74  3GetVTable(sqlit
2f920 65 33 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a 20 20  e3*, Table*);.  
2f930 20 4d 6f 64 75 6c 65 20 2a 73 71 6c 69 74 65 33   Module *sqlite3
2f940 56 74 61 62 43 72 65 61 74 65 4d 6f 64 75 6c 65  VtabCreateModule
2f950 28 0a 20 20 20 20 20 73 71 6c 69 74 65 33 2a 2c  (.     sqlite3*,
2f960 0a 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72  .     const char
2f970 2a 2c 0a 20 20 20 20 20 63 6f 6e 73 74 20 73 71  *,.     const sq
2f980 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 2a 2c 0a 20  lite3_module*,. 
2f990 20 20 20 20 76 6f 69 64 2a 2c 0a 20 20 20 20 20      void*,.     
2f9a0 76 6f 69 64 28 2a 29 28 76 6f 69 64 2a 29 0a 20  void(*)(void*). 
2f9b0 20 20 29 3b 0a 23 20 20 64 65 66 69 6e 65 20 73    );.#  define s
2f9c0 71 6c 69 74 65 33 56 74 61 62 49 6e 53 79 6e 63  qlite3VtabInSync
2f9d0 28 64 62 29 20 28 28 64 62 29 2d 3e 6e 56 54 72  (db) ((db)->nVTr
2f9e0 61 6e 73 3e 30 20 26 26 20 28 64 62 29 2d 3e 61  ans>0 && (db)->a
2f9f0 56 54 72 61 6e 73 3d 3d 30 29 0a 23 65 6e 64 69  VTrans==0).#endi
2fa00 66 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61  f.int sqlite3Vta
2fa10 62 45 70 6f 6e 79 6d 6f 75 73 54 61 62 6c 65 49  bEponymousTableI
2fa20 6e 69 74 28 50 61 72 73 65 2a 2c 4d 6f 64 75 6c  nit(Parse*,Modul
2fa30 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  e*);.void sqlite
2fa40 33 56 74 61 62 45 70 6f 6e 79 6d 6f 75 73 54 61  3VtabEponymousTa
2fa50 62 6c 65 43 6c 65 61 72 28 73 71 6c 69 74 65 33  bleClear(sqlite3
2fa60 2a 2c 4d 6f 64 75 6c 65 2a 29 3b 0a 76 6f 69 64  *,Module*);.void
2fa70 20 73 71 6c 69 74 65 33 56 74 61 62 4d 61 6b 65   sqlite3VtabMake
2fa80 57 72 69 74 61 62 6c 65 28 50 61 72 73 65 2a 2c  Writable(Parse*,
2fa90 54 61 62 6c 65 2a 29 3b 0a 76 6f 69 64 20 73 71  Table*);.void sq
2faa0 6c 69 74 65 33 56 74 61 62 42 65 67 69 6e 50 61  lite3VtabBeginPa
2fab0 72 73 65 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65  rse(Parse*, Toke
2fac0 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65  n*, Token*, Toke
2fad0 6e 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  n*, int);.void s
2fae0 71 6c 69 74 65 33 56 74 61 62 46 69 6e 69 73 68  qlite3VtabFinish
2faf0 50 61 72 73 65 28 50 61 72 73 65 2a 2c 20 54 6f  Parse(Parse*, To
2fb00 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ken*);.void sqli
2fb10 74 65 33 56 74 61 62 41 72 67 49 6e 69 74 28 50  te3VtabArgInit(P
2fb20 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  arse*);.void sql
2fb30 69 74 65 33 56 74 61 62 41 72 67 45 78 74 65 6e  ite3VtabArgExten
2fb40 64 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a  d(Parse*, Token*
2fb50 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 74  );.int sqlite3Vt
2fb60 61 62 43 61 6c 6c 43 72 65 61 74 65 28 73 71 6c  abCallCreate(sql
2fb70 69 74 65 33 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73  ite3*, int, cons
2fb80 74 20 63 68 61 72 20 2a 2c 20 63 68 61 72 20 2a  t char *, char *
2fb90 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56  *);.int sqlite3V
2fba0 74 61 62 43 61 6c 6c 43 6f 6e 6e 65 63 74 28 50  tabCallConnect(P
2fbb0 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a  arse*, Table*);.
2fbc0 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62 43  int sqlite3VtabC
2fbd0 61 6c 6c 44 65 73 74 72 6f 79 28 73 71 6c 69 74  allDestroy(sqlit
2fbe0 65 33 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20  e3*, int, const 
2fbf0 63 68 61 72 20 2a 29 3b 0a 69 6e 74 20 73 71 6c  char *);.int sql
2fc00 69 74 65 33 56 74 61 62 42 65 67 69 6e 28 73 71  ite3VtabBegin(sq
2fc10 6c 69 74 65 33 20 2a 2c 20 56 54 61 62 6c 65 20  lite3 *, VTable 
2fc20 2a 29 3b 0a 46 75 6e 63 44 65 66 20 2a 73 71 6c  *);.FuncDef *sql
2fc30 69 74 65 33 56 74 61 62 4f 76 65 72 6c 6f 61 64  ite3VtabOverload
2fc40 46 75 6e 63 74 69 6f 6e 28 73 71 6c 69 74 65 33  Function(sqlite3
2fc50 20 2a 2c 46 75 6e 63 44 65 66 2a 2c 20 69 6e 74   *,FuncDef*, int
2fc60 20 6e 41 72 67 2c 20 45 78 70 72 2a 29 3b 0a 73   nArg, Expr*);.s
2fc70 71 6c 69 74 65 33 5f 69 6e 74 36 34 20 73 71 6c  qlite3_int64 sql
2fc80 69 74 65 33 53 74 6d 74 43 75 72 72 65 6e 74 54  ite3StmtCurrentT
2fc90 69 6d 65 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74  ime(sqlite3_cont
2fca0 65 78 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ext*);.int sqlit
2fcb0 65 33 56 64 62 65 50 61 72 61 6d 65 74 65 72 49  e3VdbeParameterI
2fcc0 6e 64 65 78 28 56 64 62 65 2a 2c 20 63 6f 6e 73  ndex(Vdbe*, cons
2fcd0 74 20 63 68 61 72 2a 2c 20 69 6e 74 29 3b 0a 69  t char*, int);.i
2fce0 6e 74 20 73 71 6c 69 74 65 33 54 72 61 6e 73 66  nt sqlite3Transf
2fcf0 65 72 42 69 6e 64 69 6e 67 73 28 73 71 6c 69 74  erBindings(sqlit
2fd00 65 33 5f 73 74 6d 74 20 2a 2c 20 73 71 6c 69 74  e3_stmt *, sqlit
2fd10 65 33 5f 73 74 6d 74 20 2a 29 3b 0a 76 6f 69 64  e3_stmt *);.void
2fd20 20 73 71 6c 69 74 65 33 50 61 72 73 65 72 52 65   sqlite3ParserRe
2fd30 73 65 74 28 50 61 72 73 65 2a 29 3b 0a 23 69 66  set(Parse*);.#if
2fd40 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  def SQLITE_ENABL
2fd50 45 5f 4e 4f 52 4d 41 4c 49 5a 45 0a 63 68 61 72  E_NORMALIZE.char
2fd60 20 2a 73 71 6c 69 74 65 33 4e 6f 72 6d 61 6c 69   *sqlite3Normali
2fd70 7a 65 28 56 64 62 65 2a 2c 20 63 6f 6e 73 74 20  ze(Vdbe*, const 
2fd80 63 68 61 72 2a 29 3b 0a 23 65 6e 64 69 66 0a 69  char*);.#endif.i
2fd90 6e 74 20 73 71 6c 69 74 65 33 52 65 70 72 65 70  nt sqlite3Reprep
2fda0 61 72 65 28 56 64 62 65 2a 29 3b 0a 76 6f 69 64  are(Vdbe*);.void
2fdb0 20 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74   sqlite3ExprList
2fdc0 43 68 65 63 6b 4c 65 6e 67 74 68 28 50 61 72 73  CheckLength(Pars
2fdd0 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 63  e*, ExprList*, c
2fde0 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 43 6f 6c  onst char*);.Col
2fdf0 6c 53 65 71 20 2a 73 71 6c 69 74 65 33 42 69 6e  lSeq *sqlite3Bin
2fe00 61 72 79 43 6f 6d 70 61 72 65 43 6f 6c 6c 53 65  aryCompareCollSe
2fe10 71 28 50 61 72 73 65 20 2a 2c 20 45 78 70 72 20  q(Parse *, Expr 
2fe20 2a 2c 20 45 78 70 72 20 2a 29 3b 0a 69 6e 74 20  *, Expr *);.int 
2fe30 73 71 6c 69 74 65 33 54 65 6d 70 49 6e 4d 65 6d  sqlite3TempInMem
2fe40 6f 72 79 28 63 6f 6e 73 74 20 73 71 6c 69 74 65  ory(const sqlite
2fe50 33 2a 29 3b 0a 63 6f 6e 73 74 20 63 68 61 72 20  3*);.const char 
2fe60 2a 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 4d  *sqlite3JournalM
2fe70 6f 64 65 6e 61 6d 65 28 69 6e 74 29 3b 0a 23 69  odename(int);.#i
2fe80 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
2fe90 54 5f 57 41 4c 0a 20 20 69 6e 74 20 73 71 6c 69  T_WAL.  int sqli
2fea0 74 65 33 43 68 65 63 6b 70 6f 69 6e 74 28 73 71  te3Checkpoint(sq
2feb0 6c 69 74 65 33 2a 2c 20 69 6e 74 2c 20 69 6e 74  lite3*, int, int
2fec0 2c 20 69 6e 74 2a 2c 20 69 6e 74 2a 29 3b 0a 20  , int*, int*);. 
2fed0 20 69 6e 74 20 73 71 6c 69 74 65 33 57 61 6c 44   int sqlite3WalD
2fee0 65 66 61 75 6c 74 48 6f 6f 6b 28 76 6f 69 64 2a  efaultHook(void*
2fef0 2c 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20  ,sqlite3*,const 
2ff00 63 68 61 72 2a 2c 69 6e 74 29 3b 0a 23 65 6e 64  char*,int);.#end
2ff10 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  if.#ifndef SQLIT
2ff20 45 5f 4f 4d 49 54 5f 43 54 45 0a 20 20 57 69 74  E_OMIT_CTE.  Wit
2ff30 68 20 2a 73 71 6c 69 74 65 33 57 69 74 68 41 64  h *sqlite3WithAd
2ff40 64 28 50 61 72 73 65 2a 2c 57 69 74 68 2a 2c 54  d(Parse*,With*,T
2ff50 6f 6b 65 6e 2a 2c 45 78 70 72 4c 69 73 74 2a 2c  oken*,ExprList*,
2ff60 53 65 6c 65 63 74 2a 29 3b 0a 20 20 76 6f 69 64  Select*);.  void
2ff70 20 73 71 6c 69 74 65 33 57 69 74 68 44 65 6c 65   sqlite3WithDele
2ff80 74 65 28 73 71 6c 69 74 65 33 2a 2c 57 69 74 68  te(sqlite3*,With
2ff90 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  *);.  void sqlit
2ffa0 65 33 57 69 74 68 50 75 73 68 28 50 61 72 73 65  e3WithPush(Parse
2ffb0 2a 2c 20 57 69 74 68 2a 2c 20 75 38 29 3b 0a 23  *, With*, u8);.#
2ffc0 65 6c 73 65 0a 23 64 65 66 69 6e 65 20 73 71 6c  else.#define sql
2ffd0 69 74 65 33 57 69 74 68 50 75 73 68 28 78 2c 79  ite3WithPush(x,y
2ffe0 2c 7a 29 0a 23 64 65 66 69 6e 65 20 73 71 6c 69  ,z).#define sqli
2fff0 74 65 33 57 69 74 68 44 65 6c 65 74 65 28 78 2c  te3WithDelete(x,
30000 79 29 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65  y).#endif.#ifnde
30010 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 50  f SQLITE_OMIT_UP
30020 53 45 52 54 0a 20 20 55 70 73 65 72 74 20 2a 73  SERT.  Upsert *s
30030 71 6c 69 74 65 33 55 70 73 65 72 74 4e 65 77 28  qlite3UpsertNew(
30040 73 71 6c 69 74 65 33 2a 2c 45 78 70 72 4c 69 73  sqlite3*,ExprLis
30050 74 2a 2c 45 78 70 72 2a 2c 45 78 70 72 4c 69 73  t*,Expr*,ExprLis
30060 74 2a 2c 45 78 70 72 2a 29 3b 0a 20 20 76 6f 69  t*,Expr*);.  voi
30070 64 20 73 71 6c 69 74 65 33 55 70 73 65 72 74 44  d sqlite3UpsertD
30080 65 6c 65 74 65 28 73 71 6c 69 74 65 33 2a 2c 55  elete(sqlite3*,U
30090 70 73 65 72 74 2a 29 3b 0a 20 20 55 70 73 65 72  psert*);.  Upser
300a0 74 20 2a 73 71 6c 69 74 65 33 55 70 73 65 72 74  t *sqlite3Upsert
300b0 44 75 70 28 73 71 6c 69 74 65 33 2a 2c 55 70 73  Dup(sqlite3*,Ups
300c0 65 72 74 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c  ert*);.  int sql
300d0 69 74 65 33 55 70 73 65 72 74 41 6e 61 6c 79 7a  ite3UpsertAnalyz
300e0 65 54 61 72 67 65 74 28 50 61 72 73 65 2a 2c 53  eTarget(Parse*,S
300f0 72 63 4c 69 73 74 2a 2c 55 70 73 65 72 74 2a 29  rcList*,Upsert*)
30100 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
30110 55 70 73 65 72 74 44 6f 55 70 64 61 74 65 28 50  UpsertDoUpdate(P
30120 61 72 73 65 2a 2c 55 70 73 65 72 74 2a 2c 54 61  arse*,Upsert*,Ta
30130 62 6c 65 2a 2c 49 6e 64 65 78 2a 2c 69 6e 74 29  ble*,Index*,int)
30140 3b 0a 23 65 6c 73 65 0a 23 64 65 66 69 6e 65 20  ;.#else.#define 
30150 73 71 6c 69 74 65 33 55 70 73 65 72 74 4e 65 77  sqlite3UpsertNew
30160 28 76 2c 77 2c 78 2c 79 2c 7a 29 20 28 28 55 70  (v,w,x,y,z) ((Up
30170 73 65 72 74 2a 29 30 29 0a 23 64 65 66 69 6e 65  sert*)0).#define
30180 20 73 71 6c 69 74 65 33 55 70 73 65 72 74 44 65   sqlite3UpsertDe
30190 6c 65 74 65 28 78 2c 79 29 0a 23 64 65 66 69 6e  lete(x,y).#defin
301a0 65 20 73 71 6c 69 74 65 33 55 70 73 65 72 74 44  e sqlite3UpsertD
301b0 75 70 28 78 2c 79 29 20 20 20 20 20 20 20 28 28  up(x,y)       ((
301c0 55 70 73 65 72 74 2a 29 30 29 0a 23 65 6e 64 69  Upsert*)0).#endi
301d0 66 0a 0a 0a 2f 2a 20 44 65 63 6c 61 72 61 74 69  f.../* Declarati
301e0 6f 6e 73 20 66 6f 72 20 66 75 6e 63 74 69 6f 6e  ons for function
301f0 73 20 69 6e 20 66 6b 65 79 2e 63 2e 20 41 6c 6c  s in fkey.c. All
30200 20 6f 66 20 74 68 65 73 65 20 61 72 65 20 72 65   of these are re
30210 70 6c 61 63 65 64 20 62 79 0a 2a 2a 20 6e 6f 2d  placed by.** no-
30220 6f 70 20 6d 61 63 72 6f 73 20 69 66 20 4f 4d 49  op macros if OMI
30230 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 20 69 73  T_FOREIGN_KEY is
30240 20 64 65 66 69 6e 65 64 2e 20 49 6e 20 74 68 69   defined. In thi
30250 73 20 63 61 73 65 20 6e 6f 20 66 6f 72 65 69 67  s case no foreig
30260 6e 0a 2a 2a 20 6b 65 79 20 66 75 6e 63 74 69 6f  n.** key functio
30270 6e 61 6c 69 74 79 20 69 73 20 61 76 61 69 6c 61  nality is availa
30280 62 6c 65 2e 20 49 66 20 4f 4d 49 54 5f 54 52 49  ble. If OMIT_TRI
30290 47 47 45 52 20 69 73 20 64 65 66 69 6e 65 64 20  GGER is defined 
302a0 62 75 74 0a 2a 2a 20 4f 4d 49 54 5f 46 4f 52 45  but.** OMIT_FORE
302b0 49 47 4e 5f 4b 45 59 20 69 73 20 6e 6f 74 2c 20  IGN_KEY is not, 
302c0 6f 6e 6c 79 20 73 6f 6d 65 20 6f 66 20 74 68 65  only some of the
302d0 20 66 75 6e 63 74 69 6f 6e 73 20 61 72 65 20 6e   functions are n
302e0 6f 2d 6f 70 65 64 2e 20 49 6e 0a 2a 2a 20 74 68  o-oped. In.** th
302f0 69 73 20 63 61 73 65 20 66 6f 72 65 69 67 6e 20  is case foreign 
30300 6b 65 79 73 20 61 72 65 20 70 61 72 73 65 64 2c  keys are parsed,
30310 20 62 75 74 20 6e 6f 20 6f 74 68 65 72 20 66 75   but no other fu
30320 6e 63 74 69 6f 6e 61 6c 69 74 79 20 69 73 0a 2a  nctionality is.*
30330 2a 20 70 72 6f 76 69 64 65 64 20 28 65 6e 66 6f  * provided (enfo
30340 72 63 65 6d 65 6e 74 20 6f 66 20 46 4b 20 63 6f  rcement of FK co
30350 6e 73 74 72 61 69 6e 74 73 20 72 65 71 75 69 72  nstraints requir
30360 65 73 20 74 68 65 20 74 72 69 67 67 65 72 73 20  es the triggers 
30370 73 75 62 2d 73 79 73 74 65 6d 29 2e 0a 2a 2f 0a  sub-system)..*/.
30380 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c  #if !defined(SQL
30390 49 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49 47 4e  ITE_OMIT_FOREIGN
303a0 5f 4b 45 59 29 20 26 26 20 21 64 65 66 69 6e 65  _KEY) && !define
303b0 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52  d(SQLITE_OMIT_TR
303c0 49 47 47 45 52 29 0a 20 20 76 6f 69 64 20 73 71  IGGER).  void sq
303d0 6c 69 74 65 33 46 6b 43 68 65 63 6b 28 50 61 72  lite3FkCheck(Par
303e0 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74  se*, Table*, int
303f0 2c 20 69 6e 74 2c 20 69 6e 74 2a 2c 20 69 6e 74  , int, int*, int
30400 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
30410 33 46 6b 44 72 6f 70 54 61 62 6c 65 28 50 61 72  3FkDropTable(Par
30420 73 65 2a 2c 20 53 72 63 4c 69 73 74 20 2a 2c 20  se*, SrcList *, 
30430 54 61 62 6c 65 2a 29 3b 0a 20 20 76 6f 69 64 20  Table*);.  void 
30440 73 71 6c 69 74 65 33 46 6b 41 63 74 69 6f 6e 73  sqlite3FkActions
30450 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c  (Parse*, Table*,
30460 20 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74 2c   ExprList*, int,
30470 20 69 6e 74 2a 2c 20 69 6e 74 29 3b 0a 20 20 69   int*, int);.  i
30480 6e 74 20 73 71 6c 69 74 65 33 46 6b 52 65 71 75  nt sqlite3FkRequ
30490 69 72 65 64 28 50 61 72 73 65 2a 2c 20 54 61 62  ired(Parse*, Tab
304a0 6c 65 2a 2c 20 69 6e 74 2a 2c 20 69 6e 74 29 3b  le*, int*, int);
304b0 0a 20 20 75 33 32 20 73 71 6c 69 74 65 33 46 6b  .  u32 sqlite3Fk
304c0 4f 6c 64 6d 61 73 6b 28 50 61 72 73 65 2a 2c 20  Oldmask(Parse*, 
304d0 54 61 62 6c 65 2a 29 3b 0a 20 20 46 4b 65 79 20  Table*);.  FKey 
304e0 2a 73 71 6c 69 74 65 33 46 6b 52 65 66 65 72 65  *sqlite3FkRefere
304f0 6e 63 65 73 28 54 61 62 6c 65 20 2a 29 3b 0a 23  nces(Table *);.#
30500 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20 73  else.  #define s
30510 71 6c 69 74 65 33 46 6b 41 63 74 69 6f 6e 73 28  qlite3FkActions(
30520 61 2c 62 2c 63 2c 64 2c 65 2c 66 29 0a 20 20 23  a,b,c,d,e,f).  #
30530 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46 6b  define sqlite3Fk
30540 43 68 65 63 6b 28 61 2c 62 2c 63 2c 64 2c 65 2c  Check(a,b,c,d,e,
30550 66 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c  f).  #define sql
30560 69 74 65 33 46 6b 44 72 6f 70 54 61 62 6c 65 28  ite3FkDropTable(
30570 61 2c 62 2c 63 29 0a 20 20 23 64 65 66 69 6e 65  a,b,c).  #define
30580 20 73 71 6c 69 74 65 33 46 6b 4f 6c 64 6d 61 73   sqlite3FkOldmas
30590 6b 28 61 2c 62 29 20 20 20 20 20 20 20 20 20 30  k(a,b)         0
305a0 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74  .  #define sqlit
305b0 65 33 46 6b 52 65 71 75 69 72 65 64 28 61 2c 62  e3FkRequired(a,b
305c0 2c 63 2c 64 29 20 20 20 20 30 0a 20 20 23 64 65  ,c,d)    0.  #de
305d0 66 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 52 65  fine sqlite3FkRe
305e0 66 65 72 65 6e 63 65 73 28 61 29 20 20 20 20 20  ferences(a)     
305f0 20 20 20 30 0a 23 65 6e 64 69 66 0a 23 69 66 6e     0.#endif.#ifn
30600 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
30610 46 4f 52 45 49 47 4e 5f 4b 45 59 0a 20 20 76 6f  FOREIGN_KEY.  vo
30620 69 64 20 73 71 6c 69 74 65 33 46 6b 44 65 6c 65  id sqlite3FkDele
30630 74 65 28 73 71 6c 69 74 65 33 20 2a 2c 20 54 61  te(sqlite3 *, Ta
30640 62 6c 65 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c  ble*);.  int sql
30650 69 74 65 33 46 6b 4c 6f 63 61 74 65 49 6e 64 65  ite3FkLocateInde
30660 78 28 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a 2c  x(Parse*,Table*,
30670 46 4b 65 79 2a 2c 49 6e 64 65 78 2a 2a 2c 69 6e  FKey*,Index**,in
30680 74 2a 2a 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64  t**);.#else.  #d
30690 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 44  efine sqlite3FkD
306a0 65 6c 65 74 65 28 61 2c 62 29 0a 20 20 23 64 65  elete(a,b).  #de
306b0 66 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 4c 6f  fine sqlite3FkLo
306c0 63 61 74 65 49 6e 64 65 78 28 61 2c 62 2c 63 2c  cateIndex(a,b,c,
306d0 64 2c 65 29 0a 23 65 6e 64 69 66 0a 0a 0a 2f 2a  d,e).#endif.../*
306e0 0a 2a 2a 20 41 76 61 69 6c 61 62 6c 65 20 66 61  .** Available fa
306f0 75 6c 74 20 69 6e 6a 65 63 74 6f 72 73 2e 20 20  ult injectors.  
30700 53 68 6f 75 6c 64 20 62 65 20 6e 75 6d 62 65 72  Should be number
30710 65 64 20 62 65 67 69 6e 6e 69 6e 67 20 77 69 74  ed beginning wit
30720 68 20 30 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  h 0..*/.#define 
30730 53 51 4c 49 54 45 5f 46 41 55 4c 54 49 4e 4a 45  SQLITE_FAULTINJE
30740 43 54 4f 52 5f 4d 41 4c 4c 4f 43 20 20 20 20 20  CTOR_MALLOC     
30750 30 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  0.#define SQLITE
30760 5f 46 41 55 4c 54 49 4e 4a 45 43 54 4f 52 5f 43  _FAULTINJECTOR_C
30770 4f 55 4e 54 20 20 20 20 20 20 31 0a 0a 2f 2a 0a  OUNT      1../*.
30780 2a 2a 20 54 68 65 20 69 6e 74 65 72 66 61 63 65  ** The interface
30790 20 74 6f 20 74 68 65 20 63 6f 64 65 20 69 6e 20   to the code in 
307a0 66 61 75 6c 74 2e 63 20 75 73 65 64 20 66 6f 72  fault.c used for
307b0 20 69 64 65 6e 74 69 66 79 69 6e 67 20 22 62 65   identifying "be
307c0 6e 69 67 6e 22 0a 2a 2a 20 6d 61 6c 6c 6f 63 20  nign".** malloc 
307d0 66 61 69 6c 75 72 65 73 2e 20 54 68 69 73 20 69  failures. This i
307e0 73 20 6f 6e 6c 79 20 70 72 65 73 65 6e 74 20 69  s only present i
307f0 66 20 53 51 4c 49 54 45 5f 55 4e 54 45 53 54 41  f SQLITE_UNTESTA
30800 42 4c 45 0a 2a 2a 20 69 73 20 6e 6f 74 20 64 65  BLE.** is not de
30810 66 69 6e 65 64 2e 0a 2a 2f 0a 23 69 66 6e 64 65  fined..*/.#ifnde
30820 66 20 53 51 4c 49 54 45 5f 55 4e 54 45 53 54 41  f SQLITE_UNTESTA
30830 42 4c 45 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  BLE.  void sqlit
30840 65 33 42 65 67 69 6e 42 65 6e 69 67 6e 4d 61 6c  e3BeginBenignMal
30850 6c 6f 63 28 76 6f 69 64 29 3b 0a 20 20 76 6f 69  loc(void);.  voi
30860 64 20 73 71 6c 69 74 65 33 45 6e 64 42 65 6e 69  d sqlite3EndBeni
30870 67 6e 4d 61 6c 6c 6f 63 28 76 6f 69 64 29 3b 0a  gnMalloc(void);.
30880 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20  #else.  #define 
30890 73 71 6c 69 74 65 33 42 65 67 69 6e 42 65 6e 69  sqlite3BeginBeni
308a0 67 6e 4d 61 6c 6c 6f 63 28 29 0a 20 20 23 64 65  gnMalloc().  #de
308b0 66 69 6e 65 20 73 71 6c 69 74 65 33 45 6e 64 42  fine sqlite3EndB
308c0 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28 29 0a 23 65  enignMalloc().#e
308d0 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f  ndif../*.** Allo
308e0 77 65 64 20 72 65 74 75 72 6e 20 76 61 6c 75 65  wed return value
308f0 73 20 66 72 6f 6d 20 73 71 6c 69 74 65 33 46 69  s from sqlite3Fi
30900 6e 64 49 6e 49 6e 64 65 78 28 29 0a 2a 2f 0a 23  ndInIndex().*/.#
30910 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f  define IN_INDEX_
30920 52 4f 57 49 44 20 20 20 20 20 20 20 20 31 20 20  ROWID        1  
30930 20 2f 2a 20 53 65 61 72 63 68 20 74 68 65 20 72   /* Search the r
30940 6f 77 69 64 20 6f 66 20 74 68 65 20 74 61 62 6c  owid of the tabl
30950 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f  e */.#define IN_
30960 49 4e 44 45 58 5f 45 50 48 20 20 20 20 20 20 20  INDEX_EPH       
30970 20 20 20 32 20 20 20 2f 2a 20 53 65 61 72 63 68     2   /* Search
30980 20 61 6e 20 65 70 68 65 6d 65 72 61 6c 20 62 2d   an ephemeral b-
30990 74 72 65 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  tree */.#define 
309a0 49 4e 5f 49 4e 44 45 58 5f 49 4e 44 45 58 5f 41  IN_INDEX_INDEX_A
309b0 53 43 20 20 20 20 33 20 20 20 2f 2a 20 45 78 69  SC    3   /* Exi
309c0 73 74 69 6e 67 20 69 6e 64 65 78 20 41 53 43 45  sting index ASCE
309d0 4e 44 49 4e 47 20 2a 2f 0a 23 64 65 66 69 6e 65  NDING */.#define
309e0 20 49 4e 5f 49 4e 44 45 58 5f 49 4e 44 45 58 5f   IN_INDEX_INDEX_
309f0 44 45 53 43 20 20 20 34 20 20 20 2f 2a 20 45 78  DESC   4   /* Ex
30a00 69 73 74 69 6e 67 20 69 6e 64 65 78 20 44 45 53  isting index DES
30a10 43 45 4e 44 49 4e 47 20 2a 2f 0a 23 64 65 66 69  CENDING */.#defi
30a20 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 4e 4f 4f 50  ne IN_INDEX_NOOP
30a30 20 20 20 20 20 20 20 20 20 35 20 20 20 2f 2a 20           5   /* 
30a40 4e 6f 20 74 61 62 6c 65 20 61 76 61 69 6c 61 62  No table availab
30a50 6c 65 2e 20 55 73 65 20 63 6f 6d 70 61 72 69 73  le. Use comparis
30a60 6f 6e 73 20 2a 2f 0a 2f 2a 0a 2a 2a 20 41 6c 6c  ons */./*.** All
30a70 6f 77 65 64 20 66 6c 61 67 73 20 66 6f 72 20 74  owed flags for t
30a80 68 65 20 33 72 64 20 70 61 72 61 6d 65 74 65 72  he 3rd parameter
30a90 20 74 6f 20 73 71 6c 69 74 65 33 46 69 6e 64 49   to sqlite3FindI
30aa0 6e 49 6e 64 65 78 28 29 2e 0a 2a 2f 0a 23 64 65  nIndex()..*/.#de
30ab0 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 4e 4f  fine IN_INDEX_NO
30ac0 4f 50 5f 4f 4b 20 20 20 20 20 30 78 30 30 30 31  OP_OK     0x0001
30ad0 20 20 2f 2a 20 4f 4b 20 74 6f 20 72 65 74 75 72    /* OK to retur
30ae0 6e 20 49 4e 5f 49 4e 44 45 58 5f 4e 4f 4f 50 20  n IN_INDEX_NOOP 
30af0 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e  */.#define IN_IN
30b00 44 45 58 5f 4d 45 4d 42 45 52 53 48 49 50 20 20  DEX_MEMBERSHIP  
30b10 30 78 30 30 30 32 20 20 2f 2a 20 49 4e 20 6f 70  0x0002  /* IN op
30b20 65 72 61 74 6f 72 20 75 73 65 64 20 66 6f 72 20  erator used for 
30b30 6d 65 6d 62 65 72 73 68 69 70 20 74 65 73 74 20  membership test 
30b40 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e  */.#define IN_IN
30b50 44 45 58 5f 4c 4f 4f 50 20 20 20 20 20 20 20 20  DEX_LOOP        
30b60 30 78 30 30 30 34 20 20 2f 2a 20 49 4e 20 6f 70  0x0004  /* IN op
30b70 65 72 61 74 6f 72 20 75 73 65 64 20 61 73 20 61  erator used as a
30b80 20 6c 6f 6f 70 20 2a 2f 0a 69 6e 74 20 73 71 6c   loop */.int sql
30b90 69 74 65 33 46 69 6e 64 49 6e 49 6e 64 65 78 28  ite3FindInIndex(
30ba0 50 61 72 73 65 20 2a 2c 20 45 78 70 72 20 2a 2c  Parse *, Expr *,
30bb0 20 75 33 32 2c 20 69 6e 74 2a 2c 20 69 6e 74 2a   u32, int*, int*
30bc0 2c 20 69 6e 74 2a 29 3b 0a 0a 69 6e 74 20 73 71  , int*);..int sq
30bd0 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 4f 70 65 6e  lite3JournalOpen
30be0 28 73 71 6c 69 74 65 33 5f 76 66 73 20 2a 2c 20  (sqlite3_vfs *, 
30bf0 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20 73 71  const char *, sq
30c00 6c 69 74 65 33 5f 66 69 6c 65 20 2a 2c 20 69 6e  lite3_file *, in
30c10 74 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c  t, int);.int sql
30c20 69 74 65 33 4a 6f 75 72 6e 61 6c 53 69 7a 65 28  ite3JournalSize(
30c30 73 71 6c 69 74 65 33 5f 76 66 73 20 2a 29 3b 0a  sqlite3_vfs *);.
30c40 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49  #if defined(SQLI
30c50 54 45 5f 45 4e 41 42 4c 45 5f 41 54 4f 4d 49 43  TE_ENABLE_ATOMIC
30c60 5f 57 52 49 54 45 29 20 5c 0a 20 7c 7c 20 64 65  _WRITE) \. || de
30c70 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41  fined(SQLITE_ENA
30c80 42 4c 45 5f 42 41 54 43 48 5f 41 54 4f 4d 49 43  BLE_BATCH_ATOMIC
30c90 5f 57 52 49 54 45 29 0a 20 20 69 6e 74 20 73 71  _WRITE).  int sq
30ca0 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 43 72 65 61  lite3JournalCrea
30cb0 74 65 28 73 71 6c 69 74 65 33 5f 66 69 6c 65 20  te(sqlite3_file 
30cc0 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 69 6e 74 20  *);.#endif..int 
30cd0 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 49 73  sqlite3JournalIs
30ce0 49 6e 4d 65 6d 6f 72 79 28 73 71 6c 69 74 65 33  InMemory(sqlite3
30cf0 5f 66 69 6c 65 20 2a 70 29 3b 0a 76 6f 69 64 20  _file *p);.void 
30d00 73 71 6c 69 74 65 33 4d 65 6d 4a 6f 75 72 6e 61  sqlite3MemJourna
30d10 6c 4f 70 65 6e 28 73 71 6c 69 74 65 33 5f 66 69  lOpen(sqlite3_fi
30d20 6c 65 20 2a 29 3b 0a 0a 76 6f 69 64 20 73 71 6c  le *);..void sql
30d30 69 74 65 33 45 78 70 72 53 65 74 48 65 69 67 68  ite3ExprSetHeigh
30d40 74 41 6e 64 46 6c 61 67 73 28 50 61 72 73 65 20  tAndFlags(Parse 
30d50 2a 70 50 61 72 73 65 2c 20 45 78 70 72 20 2a 70  *pParse, Expr *p
30d60 29 3b 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d 41  );.#if SQLITE_MA
30d70 58 5f 45 58 50 52 5f 44 45 50 54 48 3e 30 0a 20  X_EXPR_DEPTH>0. 
30d80 20 69 6e 74 20 73 71 6c 69 74 65 33 53 65 6c 65   int sqlite3Sele
30d90 63 74 45 78 70 72 48 65 69 67 68 74 28 53 65 6c  ctExprHeight(Sel
30da0 65 63 74 20 2a 29 3b 0a 20 20 69 6e 74 20 73 71  ect *);.  int sq
30db0 6c 69 74 65 33 45 78 70 72 43 68 65 63 6b 48 65  lite3ExprCheckHe
30dc0 69 67 68 74 28 50 61 72 73 65 2a 2c 20 69 6e 74  ight(Parse*, int
30dd0 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69  );.#else.  #defi
30de0 6e 65 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74  ne sqlite3Select
30df0 45 78 70 72 48 65 69 67 68 74 28 78 29 20 30 0a  ExprHeight(x) 0.
30e00 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65    #define sqlite
30e10 33 45 78 70 72 43 68 65 63 6b 48 65 69 67 68 74  3ExprCheckHeight
30e20 28 78 2c 79 29 0a 23 65 6e 64 69 66 0a 0a 75 33  (x,y).#endif..u3
30e30 32 20 73 71 6c 69 74 65 33 47 65 74 34 62 79 74  2 sqlite3Get4byt
30e40 65 28 63 6f 6e 73 74 20 75 38 2a 29 3b 0a 76 6f  e(const u8*);.vo
30e50 69 64 20 73 71 6c 69 74 65 33 50 75 74 34 62 79  id sqlite3Put4by
30e60 74 65 28 75 38 2a 2c 20 75 33 32 29 3b 0a 0a 23  te(u8*, u32);..#
30e70 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  ifdef SQLITE_ENA
30e80 42 4c 45 5f 55 4e 4c 4f 43 4b 5f 4e 4f 54 49 46  BLE_UNLOCK_NOTIF
30e90 59 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  Y.  void sqlite3
30ea0 43 6f 6e 6e 65 63 74 69 6f 6e 42 6c 6f 63 6b 65  ConnectionBlocke
30eb0 64 28 73 71 6c 69 74 65 33 20 2a 2c 20 73 71 6c  d(sqlite3 *, sql
30ec0 69 74 65 33 20 2a 29 3b 0a 20 20 76 6f 69 64 20  ite3 *);.  void 
30ed0 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f  sqlite3Connectio
30ee0 6e 55 6e 6c 6f 63 6b 65 64 28 73 71 6c 69 74 65  nUnlocked(sqlite
30ef0 33 20 2a 64 62 29 3b 0a 20 20 76 6f 69 64 20 73  3 *db);.  void s
30f00 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e  qlite3Connection
30f10 43 6c 6f 73 65 64 28 73 71 6c 69 74 65 33 20 2a  Closed(sqlite3 *
30f20 64 62 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65  db);.#else.  #de
30f30 66 69 6e 65 20 73 71 6c 69 74 65 33 43 6f 6e 6e  fine sqlite3Conn
30f40 65 63 74 69 6f 6e 42 6c 6f 63 6b 65 64 28 78 2c  ectionBlocked(x,
30f50 79 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c  y).  #define sql
30f60 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 55 6e  ite3ConnectionUn
30f70 6c 6f 63 6b 65 64 28 78 29 0a 20 20 23 64 65 66  locked(x).  #def
30f80 69 6e 65 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65  ine sqlite3Conne
30f90 63 74 69 6f 6e 43 6c 6f 73 65 64 28 78 29 0a 23  ctionClosed(x).#
30fa0 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51  endif..#ifdef SQ
30fb0 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 76 6f 69  LITE_DEBUG.  voi
30fc0 64 20 73 71 6c 69 74 65 33 50 61 72 73 65 72 54  d sqlite3ParserT
30fd0 72 61 63 65 28 46 49 4c 45 2a 2c 20 63 68 61 72  race(FILE*, char
30fe0 20 2a 29 3b 0a 23 65 6e 64 69 66 0a 23 69 66 20   *);.#endif.#if 
30ff0 64 65 66 69 6e 65 64 28 59 59 43 4f 56 45 52 41  defined(YYCOVERA
31000 47 45 29 0a 20 20 69 6e 74 20 73 71 6c 69 74 65  GE).  int sqlite
31010 33 50 61 72 73 65 72 43 6f 76 65 72 61 67 65 28  3ParserCoverage(
31020 46 49 4c 45 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a  FILE*);.#endif..
31030 2f 2a 0a 2a 2a 20 49 66 20 74 68 65 20 53 51 4c  /*.** If the SQL
31040 49 54 45 5f 45 4e 41 42 4c 45 20 49 4f 54 52 41  ITE_ENABLE IOTRA
31050 43 45 20 65 78 69 73 74 73 20 74 68 65 6e 20 74  CE exists then t
31060 68 65 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62  he global variab
31070 6c 65 0a 2a 2a 20 73 71 6c 69 74 65 33 49 6f 54  le.** sqlite3IoT
31080 72 61 63 65 20 69 73 20 61 20 70 6f 69 6e 74 65  race is a pointe
31090 72 20 74 6f 20 61 20 70 72 69 6e 74 66 2d 6c 69  r to a printf-li
310a0 6b 65 20 72 6f 75 74 69 6e 65 20 75 73 65 64 20  ke routine used 
310b0 74 6f 0a 2a 2a 20 70 72 69 6e 74 20 49 2f 4f 20  to.** print I/O 
310c0 74 72 61 63 69 6e 67 20 6d 65 73 73 61 67 65 73  tracing messages
310d0 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49  ..*/.#ifdef SQLI
310e0 54 45 5f 45 4e 41 42 4c 45 5f 49 4f 54 52 41 43  TE_ENABLE_IOTRAC
310f0 45 0a 23 20 64 65 66 69 6e 65 20 49 4f 54 52 41  E.# define IOTRA
31100 43 45 28 41 29 20 20 69 66 28 20 73 71 6c 69 74  CE(A)  if( sqlit
31110 65 33 49 6f 54 72 61 63 65 20 29 7b 20 73 71 6c  e3IoTrace ){ sql
31120 69 74 65 33 49 6f 54 72 61 63 65 20 41 3b 20 7d  ite3IoTrace A; }
31130 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 56  .  void sqlite3V
31140 64 62 65 49 4f 54 72 61 63 65 53 71 6c 28 56 64  dbeIOTraceSql(Vd
31150 62 65 2a 29 3b 0a 53 51 4c 49 54 45 5f 41 50 49  be*);.SQLITE_API
31160 20 53 51 4c 49 54 45 5f 45 58 54 45 52 4e 20 76   SQLITE_EXTERN v
31170 6f 69 64 20 28 53 51 4c 49 54 45 5f 43 44 45 43  oid (SQLITE_CDEC
31180 4c 20 2a 73 71 6c 69 74 65 33 49 6f 54 72 61 63  L *sqlite3IoTrac
31190 65 29 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 2e  e)(const char*,.
311a0 2e 2e 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66  ..);.#else.# def
311b0 69 6e 65 20 49 4f 54 52 41 43 45 28 41 29 0a 23  ine IOTRACE(A).#
311c0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56   define sqlite3V
311d0 64 62 65 49 4f 54 72 61 63 65 53 71 6c 28 58 29  dbeIOTraceSql(X)
311e0 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54  .#endif../*.** T
311f0 68 65 73 65 20 72 6f 75 74 69 6e 65 73 20 61 72  hese routines ar
31200 65 20 61 76 61 69 6c 61 62 6c 65 20 66 6f 72 20  e available for 
31210 74 68 65 20 6d 65 6d 32 2e 63 20 64 65 62 75 67  the mem2.c debug
31220 67 69 6e 67 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f  ging memory allo
31230 63 61 74 6f 72 0a 2a 2a 20 6f 6e 6c 79 2e 20 20  cator.** only.  
31240 54 68 65 79 20 61 72 65 20 75 73 65 64 20 74 6f  They are used to
31250 20 76 65 72 69 66 79 20 74 68 61 74 20 64 69 66   verify that dif
31260 66 65 72 65 6e 74 20 22 74 79 70 65 73 22 20 6f  ferent "types" o
31270 66 20 6d 65 6d 6f 72 79 0a 2a 2a 20 61 6c 6c 6f  f memory.** allo
31280 63 61 74 69 6f 6e 73 20 61 72 65 20 70 72 6f 70  cations are prop
31290 65 72 6c 79 20 74 72 61 63 6b 65 64 20 62 79 20  erly tracked by 
312a0 74 68 65 20 73 79 73 74 65 6d 2e 0a 2a 2a 0a 2a  the system..**.*
312b0 2a 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75  * sqlite3Memdebu
312c0 67 53 65 74 54 79 70 65 28 29 20 73 65 74 73 20  gSetType() sets 
312d0 74 68 65 20 22 74 79 70 65 22 20 6f 66 20 61 6e  the "type" of an
312e0 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 74 6f 20 6f   allocation to o
312f0 6e 65 20 6f 66 0a 2a 2a 20 74 68 65 20 4d 45 4d  ne of.** the MEM
31300 54 59 50 45 5f 2a 20 6d 61 63 72 6f 73 20 64 65  TYPE_* macros de
31310 66 69 6e 65 64 20 62 65 6c 6f 77 2e 20 20 54 68  fined below.  Th
31320 65 20 74 79 70 65 20 6d 75 73 74 20 62 65 20 61  e type must be a
31330 20 62 69 74 6d 61 73 6b 20 77 69 74 68 0a 2a 2a   bitmask with.**
31340 20 61 20 73 69 6e 67 6c 65 20 62 69 74 20 73 65   a single bit se
31350 74 2e 0a 2a 2a 0a 2a 2a 20 73 71 6c 69 74 65 33  t..**.** sqlite3
31360 4d 65 6d 64 65 62 75 67 48 61 73 54 79 70 65 28  MemdebugHasType(
31370 29 20 72 65 74 75 72 6e 73 20 74 72 75 65 20 69  ) returns true i
31380 66 20 61 6e 79 20 6f 66 20 74 68 65 20 62 69 74  f any of the bit
31390 73 20 69 6e 20 69 74 73 20 73 65 63 6f 6e 64 0a  s in its second.
313a0 2a 2a 20 61 72 67 75 6d 65 6e 74 20 6d 61 74 63  ** argument matc
313b0 68 20 74 68 65 20 74 79 70 65 20 73 65 74 20 62  h the type set b
313c0 79 20 74 68 65 20 70 72 65 76 69 6f 75 73 20 73  y the previous s
313d0 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 53 65  qlite3MemdebugSe
313e0 74 54 79 70 65 28 29 2e 0a 2a 2a 20 73 71 6c 69  tType()..** sqli
313f0 74 65 33 4d 65 6d 64 65 62 75 67 48 61 73 54 79  te3MemdebugHasTy
31400 70 65 28 29 20 69 73 20 69 6e 74 65 6e 64 65 64  pe() is intended
31410 20 66 6f 72 20 75 73 65 20 69 6e 73 69 64 65 20   for use inside 
31420 61 73 73 65 72 74 28 29 20 73 74 61 74 65 6d 65  assert() stateme
31430 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20 73 71 6c 69 74  nts..**.** sqlit
31440 65 33 4d 65 6d 64 65 62 75 67 4e 6f 54 79 70 65  e3MemdebugNoType
31450 28 29 20 72 65 74 75 72 6e 73 20 74 72 75 65 20  () returns true 
31460 69 66 20 6e 6f 6e 65 20 6f 66 20 74 68 65 20 62  if none of the b
31470 69 74 73 20 69 6e 20 69 74 73 20 73 65 63 6f 6e  its in its secon
31480 64 0a 2a 2a 20 61 72 67 75 6d 65 6e 74 20 6d 61  d.** argument ma
31490 74 63 68 20 74 68 65 20 74 79 70 65 20 73 65 74  tch the type set
314a0 20 62 79 20 74 68 65 20 70 72 65 76 69 6f 75 73   by the previous
314b0 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67   sqlite3Memdebug
314c0 53 65 74 54 79 70 65 28 29 2e 0a 2a 2a 0a 2a 2a  SetType()..**.**
314d0 20 50 65 72 68 61 70 73 20 74 68 65 20 6d 6f 73   Perhaps the mos
314e0 74 20 69 6d 70 6f 72 74 61 6e 74 20 70 6f 69 6e  t important poin
314f0 74 20 69 73 20 74 68 65 20 64 69 66 66 65 72 65  t is the differe
31500 6e 63 65 20 62 65 74 77 65 65 6e 20 4d 45 4d 54  nce between MEMT
31510 59 50 45 5f 48 45 41 50 0a 2a 2a 20 61 6e 64 20  YPE_HEAP.** and 
31520 4d 45 4d 54 59 50 45 5f 4c 4f 4f 4b 41 53 49 44  MEMTYPE_LOOKASID
31530 45 2e 20 20 49 66 20 61 6e 20 61 6c 6c 6f 63 61  E.  If an alloca
31540 74 69 6f 6e 20 69 73 20 4d 45 4d 54 59 50 45 5f  tion is MEMTYPE_
31550 4c 4f 4f 4b 41 53 49 44 45 2c 20 74 68 61 74 20  LOOKASIDE, that 
31560 6d 65 61 6e 73 0a 2a 2a 20 69 74 20 6d 69 67 68  means.** it migh
31570 74 20 68 61 76 65 20 62 65 65 6e 20 61 6c 6c 6f  t have been allo
31580 63 61 74 65 64 20 62 79 20 6c 6f 6f 6b 61 73 69  cated by lookasi
31590 64 65 2c 20 65 78 63 65 70 74 20 74 68 65 20 61  de, except the a
315a0 6c 6c 6f 63 61 74 69 6f 6e 20 77 61 73 0a 2a 2a  llocation was.**
315b0 20 74 6f 6f 20 6c 61 72 67 65 20 6f 72 20 6c 6f   too large or lo
315c0 6f 6b 61 73 69 64 65 20 77 61 73 20 61 6c 72 65  okaside was alre
315d0 61 64 79 20 66 75 6c 6c 2e 20 20 49 74 20 69 73  ady full.  It is
315e0 20 69 6d 70 6f 72 74 61 6e 74 20 74 6f 20 76 65   important to ve
315f0 72 69 66 79 0a 2a 2a 20 74 68 61 74 20 61 6c 6c  rify.** that all
31600 6f 63 61 74 69 6f 6e 73 20 74 68 61 74 20 6d 69  ocations that mi
31610 67 68 74 20 68 61 76 65 20 62 65 65 6e 20 73 61  ght have been sa
31620 74 69 73 66 69 65 64 20 62 79 20 6c 6f 6f 6b 61  tisfied by looka
31630 73 69 64 65 20 61 72 65 20 6e 6f 74 0a 2a 2a 20  side are not.** 
31640 70 61 73 73 65 64 20 62 61 63 6b 20 74 6f 20 6e  passed back to n
31650 6f 6e 2d 6c 6f 6f 6b 61 73 69 64 65 20 66 72 65  on-lookaside fre
31660 65 28 29 20 72 6f 75 74 69 6e 65 73 2e 20 20 41  e() routines.  A
31670 73 73 65 72 74 73 20 73 75 63 68 20 61 73 20 74  sserts such as t
31680 68 65 0a 2a 2a 20 65 78 61 6d 70 6c 65 20 61 62  he.** example ab
31690 6f 76 65 20 61 72 65 20 70 6c 61 63 65 64 20 6f  ove are placed o
316a0 6e 20 74 68 65 20 6e 6f 6e 2d 6c 6f 6f 6b 61 73  n the non-lookas
316b0 69 64 65 20 66 72 65 65 28 29 20 72 6f 75 74 69  ide free() routi
316c0 6e 65 73 20 74 6f 20 76 65 72 69 66 79 0a 2a 2a  nes to verify.**
316d0 20 74 68 69 73 20 63 6f 6e 73 74 72 61 69 6e 74   this constraint
316e0 2e 0a 2a 2a 0a 2a 2a 20 41 6c 6c 20 6f 66 20 74  ..**.** All of t
316f0 68 69 73 20 69 73 20 6e 6f 2d 6f 70 20 66 6f 72  his is no-op for
31700 20 61 20 70 72 6f 64 75 63 74 69 6f 6e 20 62 75   a production bu
31710 69 6c 64 2e 20 20 49 74 20 6f 6e 6c 79 20 63 6f  ild.  It only co
31720 6d 65 73 20 69 6e 74 6f 0a 2a 2a 20 70 6c 61 79  mes into.** play
31730 20 77 68 65 6e 20 74 68 65 20 53 51 4c 49 54 45   when the SQLITE
31740 5f 4d 45 4d 44 45 42 55 47 20 63 6f 6d 70 69 6c  _MEMDEBUG compil
31750 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 20 69 73  e-time option is
31760 20 75 73 65 64 2e 0a 2a 2f 0a 23 69 66 64 65 66   used..*/.#ifdef
31770 20 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47   SQLITE_MEMDEBUG
31780 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 4d  .  void sqlite3M
31790 65 6d 64 65 62 75 67 53 65 74 54 79 70 65 28 76  emdebugSetType(v
317a0 6f 69 64 2a 2c 75 38 29 3b 0a 20 20 69 6e 74 20  oid*,u8);.  int 
317b0 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 48  sqlite3MemdebugH
317c0 61 73 54 79 70 65 28 76 6f 69 64 2a 2c 75 38 29  asType(void*,u8)
317d0 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 4d  ;.  int sqlite3M
317e0 65 6d 64 65 62 75 67 4e 6f 54 79 70 65 28 76 6f  emdebugNoType(vo
317f0 69 64 2a 2c 75 38 29 3b 0a 23 65 6c 73 65 0a 23  id*,u8);.#else.#
31800 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 4d   define sqlite3M
31810 65 6d 64 65 62 75 67 53 65 74 54 79 70 65 28 58  emdebugSetType(X
31820 2c 59 29 20 20 2f 2a 20 6e 6f 2d 6f 70 20 2a 2f  ,Y)  /* no-op */
31830 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
31840 33 4d 65 6d 64 65 62 75 67 48 61 73 54 79 70 65  3MemdebugHasType
31850 28 58 2c 59 29 20 20 31 0a 23 20 64 65 66 69 6e  (X,Y)  1.# defin
31860 65 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75  e sqlite3Memdebu
31870 67 4e 6f 54 79 70 65 28 58 2c 59 29 20 20 20 31  gNoType(X,Y)   1
31880 0a 23 65 6e 64 69 66 0a 23 64 65 66 69 6e 65 20  .#endif.#define 
31890 4d 45 4d 54 59 50 45 5f 48 45 41 50 20 20 20 20  MEMTYPE_HEAP    
318a0 20 20 20 30 78 30 31 20 20 2f 2a 20 47 65 6e 65     0x01  /* Gene
318b0 72 61 6c 20 68 65 61 70 20 61 6c 6c 6f 63 61 74  ral heap allocat
318c0 69 6f 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ions */.#define 
318d0 4d 45 4d 54 59 50 45 5f 4c 4f 4f 4b 41 53 49 44  MEMTYPE_LOOKASID
318e0 45 20 20 30 78 30 32 20 20 2f 2a 20 48 65 61 70  E  0x02  /* Heap
318f0 20 74 68 61 74 20 6d 69 67 68 74 20 68 61 76 65   that might have
31900 20 62 65 65 6e 20 6c 6f 6f 6b 61 73 69 64 65 20   been lookaside 
31910 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 45 4d 54 59  */.#define MEMTY
31920 50 45 5f 50 43 41 43 48 45 20 20 20 20 20 30 78  PE_PCACHE     0x
31930 30 34 20 20 2f 2a 20 50 61 67 65 20 63 61 63 68  04  /* Page cach
31940 65 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 2a 2f  e allocations */
31950 0a 0a 2f 2a 0a 2a 2a 20 54 68 72 65 61 64 69 6e  ../*.** Threadin
31960 67 20 69 6e 74 65 72 66 61 63 65 0a 2a 2f 0a 23  g interface.*/.#
31970 69 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 57 4f  if SQLITE_MAX_WO
31980 52 4b 45 52 5f 54 48 52 45 41 44 53 3e 30 0a 69  RKER_THREADS>0.i
31990 6e 74 20 73 71 6c 69 74 65 33 54 68 72 65 61 64  nt sqlite3Thread
319a0 43 72 65 61 74 65 28 53 51 4c 69 74 65 54 68 72  Create(SQLiteThr
319b0 65 61 64 2a 2a 2c 76 6f 69 64 2a 28 2a 29 28 76  ead**,void*(*)(v
319c0 6f 69 64 2a 29 2c 76 6f 69 64 2a 29 3b 0a 69 6e  oid*),void*);.in
319d0 74 20 73 71 6c 69 74 65 33 54 68 72 65 61 64 4a  t sqlite3ThreadJ
319e0 6f 69 6e 28 53 51 4c 69 74 65 54 68 72 65 61 64  oin(SQLiteThread
319f0 2a 2c 20 76 6f 69 64 2a 2a 29 3b 0a 23 65 6e 64  *, void**);.#end
31a00 69 66 0a 0a 23 69 66 20 64 65 66 69 6e 65 64 28  if..#if defined(
31a10 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 44 42  SQLITE_ENABLE_DB
31a20 50 41 47 45 5f 56 54 41 42 29 20 7c 7c 20 64 65  PAGE_VTAB) || de
31a30 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 54 45 53  fined(SQLITE_TES
31a40 54 29 0a 69 6e 74 20 73 71 6c 69 74 65 33 44 62  T).int sqlite3Db
31a50 70 61 67 65 52 65 67 69 73 74 65 72 28 73 71 6c  pageRegister(sql
31a60 69 74 65 33 2a 29 3b 0a 23 65 6e 64 69 66 0a 23  ite3*);.#endif.#
31a70 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  if defined(SQLIT
31a80 45 5f 45 4e 41 42 4c 45 5f 44 42 53 54 41 54 5f  E_ENABLE_DBSTAT_
31a90 56 54 41 42 29 20 7c 7c 20 64 65 66 69 6e 65 64  VTAB) || defined
31aa0 28 53 51 4c 49 54 45 5f 54 45 53 54 29 0a 69 6e  (SQLITE_TEST).in
31ab0 74 20 73 71 6c 69 74 65 33 44 62 73 74 61 74 52  t sqlite3DbstatR
31ac0 65 67 69 73 74 65 72 28 73 71 6c 69 74 65 33 2a  egister(sqlite3*
31ad0 29 3b 0a 23 65 6e 64 69 66 0a 0a 69 6e 74 20 73  );.#endif..int s
31ae0 71 6c 69 74 65 33 45 78 70 72 56 65 63 74 6f 72  qlite3ExprVector
31af0 53 69 7a 65 28 45 78 70 72 20 2a 70 45 78 70 72  Size(Expr *pExpr
31b00 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78  );.int sqlite3Ex
31b10 70 72 49 73 56 65 63 74 6f 72 28 45 78 70 72 20  prIsVector(Expr 
31b20 2a 70 45 78 70 72 29 3b 0a 45 78 70 72 20 2a 73  *pExpr);.Expr *s
31b30 71 6c 69 74 65 33 56 65 63 74 6f 72 46 69 65 6c  qlite3VectorFiel
31b40 64 53 75 62 65 78 70 72 28 45 78 70 72 2a 2c 20  dSubexpr(Expr*, 
31b50 69 6e 74 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69  int);.Expr *sqli
31b60 74 65 33 45 78 70 72 46 6f 72 56 65 63 74 6f 72  te3ExprForVector
31b70 46 69 65 6c 64 28 50 61 72 73 65 2a 2c 45 78 70  Field(Parse*,Exp
31b80 72 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  r*,int);.void sq
31b90 6c 69 74 65 33 56 65 63 74 6f 72 45 72 72 6f 72  lite3VectorError
31ba0 4d 73 67 28 50 61 72 73 65 2a 2c 20 45 78 70 72  Msg(Parse*, Expr
31bb0 2a 29 3b 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c  *);..#ifndef SQL
31bc0 49 54 45 5f 4f 4d 49 54 5f 43 4f 4d 50 49 4c 45  ITE_OMIT_COMPILE
31bd0 4f 50 54 49 4f 4e 5f 44 49 41 47 53 0a 63 6f 6e  OPTION_DIAGS.con
31be0 73 74 20 63 68 61 72 20 2a 2a 73 71 6c 69 74 65  st char **sqlite
31bf0 33 43 6f 6d 70 69 6c 65 4f 70 74 69 6f 6e 73 28  3CompileOptions(
31c00 69 6e 74 20 2a 70 6e 4f 70 74 29 3b 0a 23 65 6e  int *pnOpt);.#en
31c10 64 69 66 0a 0a 23 65 6e 64 69 66 20 2f 2a 20 53  dif..#endif /* S
31c20 51 4c 49 54 45 49 4e 54 5f 48 20 2a 2f 0a        QLITEINT_H */.