/ Hex Artifact Content
Login

Artifact 6b99bba999b415775ddecb02298902a766e93e620a72a282d0db67534743478e:


0000: 2f 2a 0a 2a 2a 20 32 30 30 31 20 53 65 70 74 65  /*.** 2001 Septe
0010: 6d 62 65 72 20 31 35 0a 2a 2a 0a 2a 2a 20 54 68  mber 15.**.** Th
0020: 65 20 61 75 74 68 6f 72 20 64 69 73 63 6c 61 69  e author disclai
0030: 6d 73 20 63 6f 70 79 72 69 67 68 74 20 74 6f 20  ms copyright to 
0040: 74 68 69 73 20 73 6f 75 72 63 65 20 63 6f 64 65  this source code
0050: 2e 20 20 49 6e 20 70 6c 61 63 65 20 6f 66 0a 2a  .  In place of.*
0060: 2a 20 61 20 6c 65 67 61 6c 20 6e 6f 74 69 63 65  * a legal notice
0070: 2c 20 68 65 72 65 20 69 73 20 61 20 62 6c 65 73  , here is a bles
0080: 73 69 6e 67 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 4d  sing:.**.**    M
0090: 61 79 20 79 6f 75 20 64 6f 20 67 6f 6f 64 20 61  ay you do good a
00a0: 6e 64 20 6e 6f 74 20 65 76 69 6c 2e 0a 2a 2a 20  nd not evil..** 
00b0: 20 20 20 4d 61 79 20 79 6f 75 20 66 69 6e 64 20     May you find 
00c0: 66 6f 72 67 69 76 65 6e 65 73 73 20 66 6f 72 20  forgiveness for 
00d0: 79 6f 75 72 73 65 6c 66 20 61 6e 64 20 66 6f 72  yourself and for
00e0: 67 69 76 65 20 6f 74 68 65 72 73 2e 0a 2a 2a 20  give others..** 
00f0: 20 20 20 4d 61 79 20 79 6f 75 20 73 68 61 72 65     May you share
0100: 20 66 72 65 65 6c 79 2c 20 6e 65 76 65 72 20 74   freely, never t
0110: 61 6b 69 6e 67 20 6d 6f 72 65 20 74 68 61 6e 20  aking more than 
0120: 79 6f 75 20 67 69 76 65 2e 0a 2a 2a 0a 2a 2a 2a  you give..**.***
0130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0160: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0170: 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 49 6e 74 65 72 6e  ******.** Intern
0180: 61 6c 20 69 6e 74 65 72 66 61 63 65 20 64 65 66  al interface def
0190: 69 6e 69 74 69 6f 6e 73 20 66 6f 72 20 53 51 4c  initions for SQL
01a0: 69 74 65 2e 0a 2a 2a 0a 2a 2f 0a 23 69 66 6e 64  ite..**.*/.#ifnd
01b0: 65 66 20 53 51 4c 49 54 45 49 4e 54 5f 48 0a 23  ef SQLITEINT_H.#
01c0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 49 4e 54  define SQLITEINT
01d0: 5f 48 0a 0a 2f 2a 20 53 70 65 63 69 61 6c 20 43  _H../* Special C
01e0: 6f 6d 6d 65 6e 74 73 3a 0a 2a 2a 0a 2a 2a 20 53  omments:.**.** S
01f0: 6f 6d 65 20 63 6f 6d 6d 65 6e 74 73 20 68 61 76  ome comments hav
0200: 65 20 73 70 65 63 69 61 6c 20 6d 65 61 6e 69 6e  e special meanin
0210: 67 20 74 6f 20 74 68 65 20 74 6f 6f 6c 73 20 74  g to the tools t
0220: 68 61 74 20 6d 65 61 73 75 72 65 20 74 65 73 74  hat measure test
0230: 0a 2a 2a 20 63 6f 76 65 72 61 67 65 3a 0a 2a 2a  .** coverage:.**
0240: 0a 2a 2a 20 20 20 20 4e 4f 5f 54 45 53 54 20 20  .**    NO_TEST  
0250: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0260: 20 20 20 2d 20 54 68 65 20 62 72 61 6e 63 68 65     - The branche
0270: 73 20 6f 6e 20 74 68 69 73 20 6c 69 6e 65 20 61  s on this line a
0280: 72 65 20 6e 6f 74 0a 2a 2a 20 20 20 20 20 20 20  re not.**       
0290: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
02a0: 20 20 20 20 20 20 20 20 20 20 20 6d 65 61 73 75             measu
02b0: 72 65 64 20 62 79 20 62 72 61 6e 63 68 20 63 6f  red by branch co
02c0: 76 65 72 61 67 65 2e 20 20 54 68 69 73 20 69 73  verage.  This is
02d0: 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
02e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
02f0: 20 20 20 20 20 75 73 65 64 20 6f 6e 20 6c 69 6e       used on lin
0300: 65 73 20 6f 66 20 63 6f 64 65 20 74 68 61 74 20  es of code that 
0310: 61 63 74 75 61 6c 6c 79 0a 2a 2a 20 20 20 20 20  actually.**     
0320: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0330: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6d 70               imp
0340: 6c 65 6d 65 6e 74 20 70 61 72 74 73 20 6f 66 20  lement parts of 
0350: 63 6f 76 65 72 61 67 65 20 74 65 73 74 69 6e 67  coverage testing
0360: 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 4f 50 54 49 4d  ..**.**    OPTIM
0370: 49 5a 41 54 49 4f 4e 2d 49 46 2d 54 52 55 45 20  IZATION-IF-TRUE 
0380: 20 20 20 20 20 20 20 2d 20 54 68 69 73 20 62 72         - This br
0390: 61 6e 63 68 20 69 73 20 61 6c 6c 6f 77 65 64 20  anch is allowed 
03a0: 74 6f 20 61 6c 77 61 79 20 62 65 20 66 61 6c 73  to alway be fals
03b0: 65 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  e.**            
03c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
03d0: 20 20 20 20 20 20 61 6e 64 20 74 68 65 20 63 6f        and the co
03e0: 72 72 65 63 74 20 61 6e 73 77 65 72 20 69 73 20  rrect answer is 
03f0: 73 74 69 6c 6c 20 6f 62 74 61 69 6e 65 64 2c 0a  still obtained,.
0400: 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
0410: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0420: 20 20 20 20 74 68 6f 75 67 68 20 70 65 72 68 61      though perha
0430: 70 73 20 6d 6f 72 65 20 73 6c 6f 77 6c 79 2e 0a  ps more slowly..
0440: 2a 2a 0a 2a 2a 20 20 20 20 4f 50 54 49 4d 49 5a  **.**    OPTIMIZ
0450: 41 54 49 4f 4e 2d 49 46 2d 46 41 4c 53 45 20 20  ATION-IF-FALSE  
0460: 20 20 20 20 20 2d 20 54 68 69 73 20 62 72 61 6e       - This bran
0470: 63 68 20 69 73 20 61 6c 6c 6f 77 65 64 20 74 6f  ch is allowed to
0480: 20 61 6c 77 61 79 20 62 65 20 74 72 75 65 0a 2a   alway be true.*
0490: 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
04a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
04b0: 20 20 20 61 6e 64 20 74 68 65 20 63 6f 72 72 65     and the corre
04c0: 63 74 20 61 6e 73 77 65 72 20 69 73 20 73 74 69  ct answer is sti
04d0: 6c 6c 20 6f 62 74 61 69 6e 65 64 2c 0a 2a 2a 20  ll obtained,.** 
04e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
04f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0500: 20 74 68 6f 75 67 68 20 70 65 72 68 61 70 73 20   though perhaps 
0510: 6d 6f 72 65 20 73 6c 6f 77 6c 79 2e 0a 2a 2a 0a  more slowly..**.
0520: 2a 2a 20 20 20 20 50 52 45 56 45 4e 54 53 2d 48  **    PREVENTS-H
0530: 41 52 4d 4c 45 53 53 2d 4f 56 45 52 52 45 41 44  ARMLESS-OVERREAD
0540: 20 20 2d 20 54 68 69 73 20 62 72 61 6e 63 68 20    - This branch 
0550: 70 72 65 76 65 6e 74 73 20 61 20 62 75 66 66 65  prevents a buffe
0560: 72 20 6f 76 65 72 72 65 61 64 0a 2a 2a 20 20 20  r overread.**   
0570: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0580: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
0590: 68 61 74 20 77 6f 75 6c 64 20 62 65 20 68 61 72  hat would be har
05a0: 6d 6c 65 73 73 20 61 6e 64 20 75 6e 64 65 74 65  mless and undete
05b0: 63 74 61 62 6c 65 0a 2a 2a 20 20 20 20 20 20 20  ctable.**       
05c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
05d0: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 69 74             if it
05e0: 20 64 69 64 20 6f 63 63 75 72 2e 20 20 0a 2a 2a   did occur.  .**
05f0: 0a 2a 2a 20 49 6e 20 61 6c 6c 20 63 61 73 65 73  .** In all cases
0600: 2c 20 74 68 65 20 73 70 65 63 69 61 6c 20 63 6f  , the special co
0610: 6d 6d 65 6e 74 20 6d 75 73 74 20 62 65 20 65 6e  mment must be en
0620: 63 6c 6f 73 65 64 20 69 6e 20 74 68 65 20 75 73  closed in the us
0630: 75 61 6c 0a 2a 2a 20 73 6c 61 73 68 2d 61 73 74  ual.** slash-ast
0640: 65 72 69 73 6b 2e 2e 2e 61 73 74 65 72 69 73 6b  erisk...asterisk
0650: 2d 73 6c 61 73 68 20 63 6f 6d 6d 65 6e 74 20 6d  -slash comment m
0660: 61 72 6b 73 2c 20 77 69 74 68 20 6e 6f 20 73 70  arks, with no sp
0670: 61 63 65 73 20 62 65 74 77 65 65 6e 20 74 68 65  aces between the
0680: 20 0a 2a 2a 20 61 73 74 65 72 69 73 6b 73 20 61   .** asterisks a
0690: 6e 64 20 74 68 65 20 63 6f 6d 6d 65 6e 74 20 74  nd the comment t
06a0: 65 78 74 2e 0a 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 4d  ext..*/../*.** M
06b0: 61 6b 65 20 73 75 72 65 20 74 68 65 20 54 63 6c  ake sure the Tcl
06c0: 20 63 61 6c 6c 69 6e 67 20 63 6f 6e 76 65 6e 74   calling convent
06d0: 69 6f 6e 20 6d 61 63 72 6f 20 69 73 20 64 65 66  ion macro is def
06e0: 69 6e 65 64 2e 20 20 54 68 69 73 20 6d 61 63 72  ined.  This macr
06f0: 6f 20 69 73 0a 2a 2a 20 6f 6e 6c 79 20 75 73 65  o is.** only use
0700: 64 20 62 79 20 74 65 73 74 20 63 6f 64 65 20 61  d by test code a
0710: 6e 64 20 54 63 6c 20 69 6e 74 65 67 72 61 74 69  nd Tcl integrati
0720: 6f 6e 20 63 6f 64 65 2e 0a 2a 2f 0a 23 69 66 6e  on code..*/.#ifn
0730: 64 65 66 20 53 51 4c 49 54 45 5f 54 43 4c 41 50  def SQLITE_TCLAP
0740: 49 0a 23 20 20 64 65 66 69 6e 65 20 53 51 4c 49  I.#  define SQLI
0750: 54 45 5f 54 43 4c 41 50 49 0a 23 65 6e 64 69 66  TE_TCLAPI.#endif
0760: 0a 0a 2f 2a 0a 2a 2a 20 49 6e 63 6c 75 64 65 20  ../*.** Include 
0770: 74 68 65 20 68 65 61 64 65 72 20 66 69 6c 65 20  the header file 
0780: 75 73 65 64 20 74 6f 20 63 75 73 74 6f 6d 69 7a  used to customiz
0790: 65 20 74 68 65 20 63 6f 6d 70 69 6c 65 72 20 6f  e the compiler o
07a0: 70 74 69 6f 6e 73 20 66 6f 72 20 4d 53 56 43 2e  ptions for MSVC.
07b0: 0a 2a 2a 20 54 68 69 73 20 73 68 6f 75 6c 64 20  .** This should 
07c0: 62 65 20 64 6f 6e 65 20 66 69 72 73 74 20 73 6f  be done first so
07d0: 20 74 68 61 74 20 69 74 20 63 61 6e 20 73 75 63   that it can suc
07e0: 63 65 73 73 66 75 6c 6c 79 20 70 72 65 76 65 6e  cessfully preven
07f0: 74 20 73 70 75 72 69 6f 75 73 0a 2a 2a 20 63 6f  t spurious.** co
0800: 6d 70 69 6c 65 72 20 77 61 72 6e 69 6e 67 73 20  mpiler warnings 
0810: 64 75 65 20 74 6f 20 73 75 62 73 65 71 75 65 6e  due to subsequen
0820: 74 20 63 6f 6e 74 65 6e 74 20 69 6e 20 74 68 69  t content in thi
0830: 73 20 66 69 6c 65 20 61 6e 64 20 6f 74 68 65 72  s file and other
0840: 20 66 69 6c 65 73 0a 2a 2a 20 74 68 61 74 20 61   files.** that a
0850: 72 65 20 69 6e 63 6c 75 64 65 64 20 62 79 20 74  re included by t
0860: 68 69 73 20 66 69 6c 65 2e 0a 2a 2f 0a 23 69 6e  his file..*/.#in
0870: 63 6c 75 64 65 20 22 6d 73 76 63 2e 68 22 0a 0a  clude "msvc.h"..
0880: 2f 2a 0a 2a 2a 20 53 70 65 63 69 61 6c 20 73 65  /*.** Special se
0890: 74 75 70 20 66 6f 72 20 56 78 57 6f 72 6b 73 0a  tup for VxWorks.
08a0: 2a 2f 0a 23 69 6e 63 6c 75 64 65 20 22 76 78 77  */.#include "vxw
08b0: 6f 72 6b 73 2e 68 22 0a 0a 2f 2a 0a 2a 2a 20 54  orks.h"../*.** T
08c0: 68 65 73 65 20 23 64 65 66 69 6e 65 73 20 73 68  hese #defines sh
08d0: 6f 75 6c 64 20 65 6e 61 62 6c 65 20 3e 32 47 42  ould enable >2GB
08e0: 20 66 69 6c 65 20 73 75 70 70 6f 72 74 20 6f 6e   file support on
08f0: 20 50 4f 53 49 58 20 69 66 20 74 68 65 0a 2a 2a   POSIX if the.**
0900: 20 75 6e 64 65 72 6c 79 69 6e 67 20 6f 70 65 72   underlying oper
0910: 61 74 69 6e 67 20 73 79 73 74 65 6d 20 73 75 70  ating system sup
0920: 70 6f 72 74 73 20 69 74 2e 20 20 49 66 20 74 68  ports it.  If th
0930: 65 20 4f 53 20 6c 61 63 6b 73 0a 2a 2a 20 6c 61  e OS lacks.** la
0940: 72 67 65 20 66 69 6c 65 20 73 75 70 70 6f 72 74  rge file support
0950: 2c 20 6f 72 20 69 66 20 74 68 65 20 4f 53 20 69  , or if the OS i
0960: 73 20 77 69 6e 64 6f 77 73 2c 20 74 68 65 73 65  s windows, these
0970: 20 73 68 6f 75 6c 64 20 62 65 20 6e 6f 2d 6f 70   should be no-op
0980: 73 2e 0a 2a 2a 0a 2a 2a 20 54 69 63 6b 65 74 20  s..**.** Ticket 
0990: 23 32 37 33 39 3a 20 20 54 68 65 20 5f 4c 41 52  #2739:  The _LAR
09a0: 47 45 46 49 4c 45 5f 53 4f 55 52 43 45 20 6d 61  GEFILE_SOURCE ma
09b0: 63 72 6f 20 6d 75 73 74 20 61 70 70 65 61 72 20  cro must appear 
09c0: 62 65 66 6f 72 65 20 61 6e 79 0a 2a 2a 20 73 79  before any.** sy
09d0: 73 74 65 6d 20 23 69 6e 63 6c 75 64 65 73 2e 20  stem #includes. 
09e0: 20 48 65 6e 63 65 2c 20 74 68 69 73 20 62 6c 6f   Hence, this blo
09f0: 63 6b 20 6f 66 20 63 6f 64 65 20 6d 75 73 74 20  ck of code must 
0a00: 62 65 20 74 68 65 20 76 65 72 79 20 66 69 72 73  be the very firs
0a10: 74 0a 2a 2a 20 63 6f 64 65 20 69 6e 20 61 6c 6c  t.** code in all
0a20: 20 73 6f 75 72 63 65 20 66 69 6c 65 73 2e 0a 2a   source files..*
0a30: 2a 0a 2a 2a 20 4c 61 72 67 65 20 66 69 6c 65 20  *.** Large file 
0a40: 73 75 70 70 6f 72 74 20 63 61 6e 20 62 65 20 64  support can be d
0a50: 69 73 61 62 6c 65 64 20 75 73 69 6e 67 20 74 68  isabled using th
0a60: 65 20 2d 44 53 51 4c 49 54 45 5f 44 49 53 41 42  e -DSQLITE_DISAB
0a70: 4c 45 5f 4c 46 53 20 73 77 69 74 63 68 0a 2a 2a  LE_LFS switch.**
0a80: 20 6f 6e 20 74 68 65 20 63 6f 6d 70 69 6c 65 72   on the compiler
0a90: 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 2e 20 20   command line.  
0aa0: 54 68 69 73 20 69 73 20 6e 65 63 65 73 73 61 72  This is necessar
0ab0: 79 20 69 66 20 79 6f 75 20 61 72 65 20 63 6f 6d  y if you are com
0ac0: 70 69 6c 69 6e 67 0a 2a 2a 20 6f 6e 20 61 20 72  piling.** on a r
0ad0: 65 63 65 6e 74 20 6d 61 63 68 69 6e 65 20 28 65  ecent machine (e
0ae0: 78 3a 20 52 65 64 20 48 61 74 20 37 2e 32 29 20  x: Red Hat 7.2) 
0af0: 62 75 74 20 79 6f 75 20 77 61 6e 74 20 79 6f 75  but you want you
0b00: 72 20 63 6f 64 65 20 74 6f 20 77 6f 72 6b 0a 2a  r code to work.*
0b10: 2a 20 6f 6e 20 61 6e 20 6f 6c 64 65 72 20 6d 61  * on an older ma
0b20: 63 68 69 6e 65 20 28 65 78 3a 20 52 65 64 20 48  chine (ex: Red H
0b30: 61 74 20 36 2e 30 29 2e 20 20 49 66 20 79 6f 75  at 6.0).  If you
0b40: 20 63 6f 6d 70 69 6c 65 20 6f 6e 20 52 65 64 20   compile on Red 
0b50: 48 61 74 20 37 2e 32 0a 2a 2a 20 77 69 74 68 6f  Hat 7.2.** witho
0b60: 75 74 20 74 68 69 73 20 6f 70 74 69 6f 6e 2c 20  ut this option, 
0b70: 4c 46 53 20 69 73 20 65 6e 61 62 6c 65 2e 20 20  LFS is enable.  
0b80: 42 75 74 20 4c 46 53 20 64 6f 65 73 20 6e 6f 74  But LFS does not
0b90: 20 65 78 69 73 74 20 69 6e 20 74 68 65 20 6b 65   exist in the ke
0ba0: 72 6e 65 6c 0a 2a 2a 20 69 6e 20 52 65 64 20 48  rnel.** in Red H
0bb0: 61 74 20 36 2e 30 2c 20 73 6f 20 74 68 65 20 63  at 6.0, so the c
0bc0: 6f 64 65 20 77 6f 6e 27 74 20 77 6f 72 6b 2e 20  ode won't work. 
0bd0: 20 48 65 6e 63 65 2c 20 66 6f 72 20 6d 61 78 69   Hence, for maxi
0be0: 6d 75 6d 20 62 69 6e 61 72 79 0a 2a 2a 20 70 6f  mum binary.** po
0bf0: 72 74 61 62 69 6c 69 74 79 20 79 6f 75 20 73 68  rtability you sh
0c00: 6f 75 6c 64 20 6f 6d 69 74 20 4c 46 53 2e 0a 2a  ould omit LFS..*
0c10: 2a 0a 2a 2a 20 54 68 65 20 70 72 65 76 69 6f 75  *.** The previou
0c20: 73 20 70 61 72 61 67 72 61 70 68 20 77 61 73 20  s paragraph was 
0c30: 77 72 69 74 74 65 6e 20 69 6e 20 32 30 30 35 2e  written in 2005.
0c40: 20 20 28 54 68 69 73 20 70 61 72 61 67 72 61 70    (This paragrap
0c50: 68 20 69 73 20 77 72 69 74 74 65 6e 0a 2a 2a 20  h is written.** 
0c60: 6f 6e 20 32 30 30 38 2d 31 31 2d 32 38 2e 29 20  on 2008-11-28.) 
0c70: 54 68 65 73 65 20 64 61 79 73 2c 20 61 6c 6c 20  These days, all 
0c80: 4c 69 6e 75 78 20 6b 65 72 6e 65 6c 73 20 73 75  Linux kernels su
0c90: 70 70 6f 72 74 20 6c 61 72 67 65 20 66 69 6c 65  pport large file
0ca0: 73 2c 20 73 6f 0a 2a 2a 20 79 6f 75 20 73 68 6f  s, so.** you sho
0cb0: 75 6c 64 20 70 72 6f 62 61 62 6c 79 20 6c 65 61  uld probably lea
0cc0: 76 65 20 4c 46 53 20 65 6e 61 62 6c 65 64 2e 20  ve LFS enabled. 
0cd0: 20 42 75 74 20 73 6f 6d 65 20 65 6d 62 65 64 64   But some embedd
0ce0: 65 64 20 70 6c 61 74 66 6f 72 6d 73 20 6d 69 67  ed platforms mig
0cf0: 68 74 0a 2a 2a 20 6c 61 63 6b 20 4c 46 53 20 69  ht.** lack LFS i
0d00: 6e 20 77 68 69 63 68 20 63 61 73 65 20 74 68 65  n which case the
0d10: 20 53 51 4c 49 54 45 5f 44 49 53 41 42 4c 45 5f   SQLITE_DISABLE_
0d20: 4c 46 53 20 6d 61 63 72 6f 20 6d 69 67 68 74 20  LFS macro might 
0d30: 73 74 69 6c 6c 20 62 65 20 75 73 65 66 75 6c 2e  still be useful.
0d40: 0a 2a 2a 0a 2a 2a 20 53 69 6d 69 6c 61 72 20 69  .**.** Similar i
0d50: 73 20 74 72 75 65 20 66 6f 72 20 4d 61 63 20 4f  s true for Mac O
0d60: 53 20 58 2e 20 20 4c 46 53 20 69 73 20 6f 6e 6c  S X.  LFS is onl
0d70: 79 20 73 75 70 70 6f 72 74 65 64 20 6f 6e 20 4d  y supported on M
0d80: 61 63 20 4f 53 20 58 20 39 20 61 6e 64 20 6c 61  ac OS X 9 and la
0d90: 74 65 72 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20  ter..*/.#ifndef 
0da0: 53 51 4c 49 54 45 5f 44 49 53 41 42 4c 45 5f 4c  SQLITE_DISABLE_L
0db0: 46 53 0a 23 20 64 65 66 69 6e 65 20 5f 4c 41 52  FS.# define _LAR
0dc0: 47 45 5f 46 49 4c 45 20 20 20 20 20 20 20 31 0a  GE_FILE       1.
0dd0: 23 20 69 66 6e 64 65 66 20 5f 46 49 4c 45 5f 4f  # ifndef _FILE_O
0de0: 46 46 53 45 54 5f 42 49 54 53 0a 23 20 20 20 64  FFSET_BITS.#   d
0df0: 65 66 69 6e 65 20 5f 46 49 4c 45 5f 4f 46 46 53  efine _FILE_OFFS
0e00: 45 54 5f 42 49 54 53 20 36 34 0a 23 20 65 6e 64  ET_BITS 64.# end
0e10: 69 66 0a 23 20 64 65 66 69 6e 65 20 5f 4c 41 52  if.# define _LAR
0e20: 47 45 46 49 4c 45 5f 53 4f 55 52 43 45 20 31 0a  GEFILE_SOURCE 1.
0e30: 23 65 6e 64 69 66 0a 0a 2f 2a 20 54 68 65 20 47  #endif../* The G
0e40: 43 43 5f 56 45 52 53 49 4f 4e 20 61 6e 64 20 4d  CC_VERSION and M
0e50: 53 56 43 5f 56 45 52 53 49 4f 4e 20 6d 61 63 72  SVC_VERSION macr
0e60: 6f 73 20 61 72 65 20 75 73 65 64 20 74 6f 0a 2a  os are used to.*
0e70: 2a 20 63 6f 6e 64 69 74 69 6f 6e 61 6c 6c 79 20  * conditionally 
0e80: 69 6e 63 6c 75 64 65 20 6f 70 74 69 6d 69 7a 61  include optimiza
0e90: 74 69 6f 6e 73 20 66 6f 72 20 65 61 63 68 20 6f  tions for each o
0ea0: 66 20 74 68 65 73 65 20 63 6f 6d 70 69 6c 65 72  f these compiler
0eb0: 73 2e 20 20 41 0a 2a 2a 20 76 61 6c 75 65 20 6f  s.  A.** value o
0ec0: 66 20 30 20 6d 65 61 6e 73 20 74 68 61 74 20 63  f 0 means that c
0ed0: 6f 6d 70 69 6c 65 72 20 69 73 20 6e 6f 74 20 62  ompiler is not b
0ee0: 65 69 6e 67 20 75 73 65 64 2e 20 20 54 68 65 0a  eing used.  The.
0ef0: 2a 2a 20 53 51 4c 49 54 45 5f 44 49 53 41 42 4c  ** SQLITE_DISABL
0f00: 45 5f 49 4e 54 52 49 4e 53 49 43 20 6d 61 63 72  E_INTRINSIC macr
0f10: 6f 20 6d 65 61 6e 73 20 64 6f 20 6e 6f 74 20 75  o means do not u
0f20: 73 65 20 61 6e 79 20 63 6f 6d 70 69 6c 65 72 2d  se any compiler-
0f30: 73 70 65 63 69 66 69 63 0a 2a 2a 20 6f 70 74 69  specific.** opti
0f40: 6d 69 7a 61 74 69 6f 6e 73 2c 20 61 6e 64 20 68  mizations, and h
0f50: 65 6e 63 65 20 73 65 74 20 61 6c 6c 20 63 6f 6d  ence set all com
0f60: 70 69 6c 65 72 20 6d 61 63 72 6f 73 20 74 6f 20  piler macros to 
0f70: 30 0a 2a 2a 0a 2a 2a 20 54 68 65 72 65 20 77 61  0.**.** There wa
0f80: 73 20 6f 6e 63 65 20 61 6c 73 6f 20 61 20 43 4c  s once also a CL
0f90: 41 4e 47 5f 56 45 52 53 49 4f 4e 20 6d 61 63 72  ANG_VERSION macr
0fa0: 6f 2e 20 20 48 6f 77 65 76 65 72 2c 20 77 65 20  o.  However, we 
0fb0: 6c 65 61 72 6e 20 74 68 61 74 20 74 68 65 0a 2a  learn that the.*
0fc0: 2a 20 76 65 72 73 69 6f 6e 20 6e 75 6d 62 65 72  * version number
0fd0: 73 20 69 6e 20 63 6c 61 6e 67 20 61 72 65 20 66  s in clang are f
0fe0: 6f 72 20 22 6d 61 72 6b 65 74 69 6e 67 22 20 6f  or "marketing" o
0ff0: 6e 6c 79 20 61 6e 64 20 61 72 65 20 69 6e 63 6f  nly and are inco
1000: 6e 73 69 73 74 65 6e 74 0a 2a 2a 20 61 6e 64 20  nsistent.** and 
1010: 75 6e 72 65 6c 69 61 62 6c 65 2e 20 20 46 6f 72  unreliable.  For
1020: 74 75 6e 61 74 65 6c 79 2c 20 61 6c 6c 20 76 65  tunately, all ve
1030: 72 73 69 6f 6e 73 20 6f 66 20 63 6c 61 6e 67 20  rsions of clang 
1040: 61 6c 73 6f 20 72 65 63 6f 67 6e 69 7a 65 20 74  also recognize t
1050: 68 65 0a 2a 2a 20 67 63 63 20 76 65 72 73 69 6f  he.** gcc versio
1060: 6e 20 6e 75 6d 62 65 72 73 20 61 6e 64 20 68 61  n numbers and ha
1070: 76 65 20 72 65 61 73 6f 6e 61 62 6c 65 20 73 65  ve reasonable se
1080: 74 74 69 6e 67 73 20 66 6f 72 20 67 63 63 20 76  ttings for gcc v
1090: 65 72 73 69 6f 6e 20 6e 75 6d 62 65 72 73 2c 0a  ersion numbers,.
10a0: 2a 2a 20 73 6f 20 74 68 65 20 47 43 43 5f 56 45  ** so the GCC_VE
10b0: 52 53 49 4f 4e 20 6d 61 63 72 6f 20 77 69 6c 6c  RSION macro will
10c0: 20 62 65 20 73 65 74 20 74 6f 20 61 20 63 6f 72   be set to a cor
10d0: 72 65 63 74 20 6e 6f 6e 2d 7a 65 72 6f 20 76 61  rect non-zero va
10e0: 6c 75 65 20 65 76 65 6e 0a 2a 2a 20 77 68 65 6e  lue even.** when
10f0: 20 63 6f 6d 70 69 6c 69 6e 67 20 77 69 74 68 20   compiling with 
1100: 63 6c 61 6e 67 2e 0a 2a 2f 0a 23 69 66 20 64 65  clang..*/.#if de
1110: 66 69 6e 65 64 28 5f 5f 47 4e 55 43 5f 5f 29 20  fined(__GNUC__) 
1120: 26 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  && !defined(SQLI
1130: 54 45 5f 44 49 53 41 42 4c 45 5f 49 4e 54 52 49  TE_DISABLE_INTRI
1140: 4e 53 49 43 29 0a 23 20 64 65 66 69 6e 65 20 47  NSIC).# define G
1150: 43 43 5f 56 45 52 53 49 4f 4e 20 28 5f 5f 47 4e  CC_VERSION (__GN
1160: 55 43 5f 5f 2a 31 30 30 30 30 30 30 2b 5f 5f 47  UC__*1000000+__G
1170: 4e 55 43 5f 4d 49 4e 4f 52 5f 5f 2a 31 30 30 30  NUC_MINOR__*1000
1180: 2b 5f 5f 47 4e 55 43 5f 50 41 54 43 48 4c 45 56  +__GNUC_PATCHLEV
1190: 45 4c 5f 5f 29 0a 23 65 6c 73 65 0a 23 20 64 65  EL__).#else.# de
11a0: 66 69 6e 65 20 47 43 43 5f 56 45 52 53 49 4f 4e  fine GCC_VERSION
11b0: 20 30 0a 23 65 6e 64 69 66 0a 23 69 66 20 64 65   0.#endif.#if de
11c0: 66 69 6e 65 64 28 5f 4d 53 43 5f 56 45 52 29 20  fined(_MSC_VER) 
11d0: 26 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  && !defined(SQLI
11e0: 54 45 5f 44 49 53 41 42 4c 45 5f 49 4e 54 52 49  TE_DISABLE_INTRI
11f0: 4e 53 49 43 29 0a 23 20 64 65 66 69 6e 65 20 4d  NSIC).# define M
1200: 53 56 43 5f 56 45 52 53 49 4f 4e 20 5f 4d 53 43  SVC_VERSION _MSC
1210: 5f 56 45 52 0a 23 65 6c 73 65 0a 23 20 64 65 66  _VER.#else.# def
1220: 69 6e 65 20 4d 53 56 43 5f 56 45 52 53 49 4f 4e  ine MSVC_VERSION
1230: 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 4e 65   0.#endif../* Ne
1240: 65 64 65 64 20 66 6f 72 20 76 61 72 69 6f 75 73  eded for various
1250: 20 64 65 66 69 6e 69 74 69 6f 6e 73 2e 2e 2e 20   definitions... 
1260: 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28 5f  */.#if defined(_
1270: 5f 47 4e 55 43 5f 5f 29 20 26 26 20 21 64 65 66  _GNUC__) && !def
1280: 69 6e 65 64 28 5f 47 4e 55 5f 53 4f 55 52 43 45  ined(_GNU_SOURCE
1290: 29 0a 23 20 64 65 66 69 6e 65 20 5f 47 4e 55 5f  ).# define _GNU_
12a0: 53 4f 55 52 43 45 0a 23 65 6e 64 69 66 0a 0a 23  SOURCE.#endif..#
12b0: 69 66 20 64 65 66 69 6e 65 64 28 5f 5f 4f 70 65  if defined(__Ope
12c0: 6e 42 53 44 5f 5f 29 20 26 26 20 21 64 65 66 69  nBSD__) && !defi
12d0: 6e 65 64 28 5f 42 53 44 5f 53 4f 55 52 43 45 29  ned(_BSD_SOURCE)
12e0: 0a 23 20 64 65 66 69 6e 65 20 5f 42 53 44 5f 53  .# define _BSD_S
12f0: 4f 55 52 43 45 0a 23 65 6e 64 69 66 0a 0a 2f 2a  OURCE.#endif../*
1300: 0a 2a 2a 20 46 6f 72 20 4d 69 6e 47 57 2c 20 63  .** For MinGW, c
1310: 68 65 63 6b 20 74 6f 20 73 65 65 20 69 66 20 77  heck to see if w
1320: 65 20 63 61 6e 20 69 6e 63 6c 75 64 65 20 74 68  e can include th
1330: 65 20 68 65 61 64 65 72 20 66 69 6c 65 20 63 6f  e header file co
1340: 6e 74 61 69 6e 69 6e 67 20 69 74 73 0a 2a 2a 20  ntaining its.** 
1350: 76 65 72 73 69 6f 6e 20 69 6e 66 6f 72 6d 61 74  version informat
1360: 69 6f 6e 2c 20 61 6d 6f 6e 67 20 6f 74 68 65 72  ion, among other
1370: 20 74 68 69 6e 67 73 2e 20 20 4e 6f 72 6d 61 6c   things.  Normal
1380: 6c 79 2c 20 74 68 69 73 20 69 6e 74 65 72 6e 61  ly, this interna
1390: 6c 20 4d 69 6e 47 57 0a 2a 2a 20 68 65 61 64 65  l MinGW.** heade
13a0: 72 20 66 69 6c 65 20 77 6f 75 6c 64 20 5b 6f 6e  r file would [on
13b0: 6c 79 5d 20 62 65 20 69 6e 63 6c 75 64 65 64 20  ly] be included 
13c0: 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 62 79  automatically by
13d0: 20 6f 74 68 65 72 20 4d 69 6e 47 57 20 68 65 61   other MinGW hea
13e0: 64 65 72 0a 2a 2a 20 66 69 6c 65 73 3b 20 68 6f  der.** files; ho
13f0: 77 65 76 65 72 2c 20 74 68 65 20 63 6f 6e 74 61  wever, the conta
1400: 69 6e 65 64 20 76 65 72 73 69 6f 6e 20 69 6e 66  ined version inf
1410: 6f 72 6d 61 74 69 6f 6e 20 69 73 20 6e 6f 77 20  ormation is now 
1420: 72 65 71 75 69 72 65 64 20 62 79 20 74 68 69 73  required by this
1430: 0a 2a 2a 20 68 65 61 64 65 72 20 66 69 6c 65 20  .** header file 
1440: 74 6f 20 77 6f 72 6b 20 61 72 6f 75 6e 64 20 62  to work around b
1450: 69 6e 61 72 79 20 63 6f 6d 70 61 74 69 62 69 6c  inary compatibil
1460: 69 74 79 20 69 73 73 75 65 73 20 28 73 65 65 20  ity issues (see 
1470: 62 65 6c 6f 77 29 20 61 6e 64 0a 2a 2a 20 74 68  below) and.** th
1480: 69 73 20 69 73 20 74 68 65 20 6f 6e 6c 79 20 6b  is is the only k
1490: 6e 6f 77 6e 20 77 61 79 20 74 6f 20 72 65 6c 69  nown way to reli
14a0: 61 62 6c 79 20 6f 62 74 61 69 6e 20 69 74 2e 20  ably obtain it. 
14b0: 20 54 68 69 73 20 65 6e 74 69 72 65 20 23 69 66   This entire #if
14c0: 20 62 6c 6f 63 6b 0a 2a 2a 20 77 6f 75 6c 64 20   block.** would 
14d0: 62 65 20 63 6f 6d 70 6c 65 74 65 6c 79 20 75 6e  be completely un
14e0: 6e 65 63 65 73 73 61 72 79 20 69 66 20 74 68 65  necessary if the
14f0: 72 65 20 77 61 73 20 61 6e 79 20 6f 74 68 65 72  re was any other
1500: 20 77 61 79 20 6f 66 20 64 65 74 65 63 74 69 6e   way of detectin
1510: 67 0a 2a 2a 20 4d 69 6e 47 57 20 76 69 61 20 74  g.** MinGW via t
1520: 68 65 69 72 20 70 72 65 70 72 6f 63 65 73 73 6f  heir preprocesso
1530: 72 20 28 65 2e 67 2e 20 69 66 20 74 68 65 79 20  r (e.g. if they 
1540: 63 75 73 74 6f 6d 69 7a 65 64 20 74 68 65 69 72  customized their
1550: 20 47 43 43 20 74 6f 20 64 65 66 69 6e 65 0a 2a   GCC to define.*
1560: 2a 20 73 6f 6d 65 20 4d 69 6e 47 57 2d 73 70 65  * some MinGW-spe
1570: 63 69 66 69 63 20 6d 61 63 72 6f 73 29 2e 20 20  cific macros).  
1580: 57 68 65 6e 20 63 6f 6d 70 69 6c 69 6e 67 20 66  When compiling f
1590: 6f 72 20 4d 69 6e 47 57 2c 20 65 69 74 68 65 72  or MinGW, either
15a0: 20 74 68 65 0a 2a 2a 20 5f 48 41 56 45 5f 4d 49   the.** _HAVE_MI
15b0: 4e 47 57 5f 48 20 6f 72 20 5f 48 41 56 45 5f 5f  NGW_H or _HAVE__
15c0: 4d 49 4e 47 57 5f 48 20 28 6e 6f 74 65 20 74 68  MINGW_H (note th
15d0: 65 20 65 78 74 72 61 20 75 6e 64 65 72 73 63 6f  e extra undersco
15e0: 72 65 29 20 6d 61 63 72 6f 20 6d 75 73 74 20 62  re) macro must b
15f0: 65 0a 2a 2a 20 64 65 66 69 6e 65 64 3b 20 6f 74  e.** defined; ot
1600: 68 65 72 77 69 73 65 2c 20 64 65 74 65 63 74 69  herwise, detecti
1610: 6f 6e 20 6f 66 20 63 6f 6e 64 69 74 69 6f 6e 73  on of conditions
1620: 20 73 70 65 63 69 66 69 63 20 74 6f 20 4d 69 6e   specific to Min
1630: 47 57 20 77 69 6c 6c 20 62 65 0a 2a 2a 20 64 69  GW will be.** di
1640: 73 61 62 6c 65 64 2e 0a 2a 2f 0a 23 69 66 20 64  sabled..*/.#if d
1650: 65 66 69 6e 65 64 28 5f 48 41 56 45 5f 4d 49 4e  efined(_HAVE_MIN
1660: 47 57 5f 48 29 0a 23 20 69 6e 63 6c 75 64 65 20  GW_H).# include 
1670: 22 6d 69 6e 67 77 2e 68 22 0a 23 65 6c 69 66 20  "mingw.h".#elif 
1680: 64 65 66 69 6e 65 64 28 5f 48 41 56 45 5f 5f 4d  defined(_HAVE__M
1690: 49 4e 47 57 5f 48 29 0a 23 20 69 6e 63 6c 75 64  INGW_H).# includ
16a0: 65 20 22 5f 6d 69 6e 67 77 2e 68 22 0a 23 65 6e  e "_mingw.h".#en
16b0: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 46 6f 72 20 4d  dif../*.** For M
16c0: 69 6e 47 57 20 76 65 72 73 69 6f 6e 20 34 2e 78  inGW version 4.x
16d0: 20 28 61 6e 64 20 68 69 67 68 65 72 29 2c 20 63   (and higher), c
16e0: 68 65 63 6b 20 74 6f 20 73 65 65 20 69 66 20 74  heck to see if t
16f0: 68 65 20 5f 55 53 45 5f 33 32 42 49 54 5f 54 49  he _USE_32BIT_TI
1700: 4d 45 5f 54 0a 2a 2a 20 64 65 66 69 6e 65 20 69  ME_T.** define i
1710: 73 20 72 65 71 75 69 72 65 64 20 74 6f 20 6d 61  s required to ma
1720: 69 6e 74 61 69 6e 20 62 69 6e 61 72 79 20 63 6f  intain binary co
1730: 6d 70 61 74 69 62 69 6c 69 74 79 20 77 69 74 68  mpatibility with
1740: 20 74 68 65 20 4d 53 56 43 20 72 75 6e 74 69 6d   the MSVC runtim
1750: 65 0a 2a 2a 20 6c 69 62 72 61 72 79 20 69 6e 20  e.** library in 
1760: 75 73 65 20 28 65 2e 67 2e 20 66 6f 72 20 57 69  use (e.g. for Wi
1770: 6e 64 6f 77 73 20 58 50 29 2e 0a 2a 2f 0a 23 69  ndows XP)..*/.#i
1780: 66 20 21 64 65 66 69 6e 65 64 28 5f 55 53 45 5f  f !defined(_USE_
1790: 33 32 42 49 54 5f 54 49 4d 45 5f 54 29 20 26 26  32BIT_TIME_T) &&
17a0: 20 21 64 65 66 69 6e 65 64 28 5f 55 53 45 5f 36   !defined(_USE_6
17b0: 34 42 49 54 5f 54 49 4d 45 5f 54 29 20 26 26 20  4BIT_TIME_T) && 
17c0: 5c 0a 20 20 20 20 64 65 66 69 6e 65 64 28 5f 57  \.    defined(_W
17d0: 49 4e 33 32 29 20 26 26 20 21 64 65 66 69 6e 65  IN32) && !define
17e0: 64 28 5f 57 49 4e 36 34 29 20 26 26 20 5c 0a 20  d(_WIN64) && \. 
17f0: 20 20 20 64 65 66 69 6e 65 64 28 5f 5f 4d 49 4e     defined(__MIN
1800: 47 57 5f 4d 41 4a 4f 52 5f 56 45 52 53 49 4f 4e  GW_MAJOR_VERSION
1810: 29 20 26 26 20 5f 5f 4d 49 4e 47 57 5f 4d 41 4a  ) && __MINGW_MAJ
1820: 4f 52 5f 56 45 52 53 49 4f 4e 20 3e 3d 20 34 20  OR_VERSION >= 4 
1830: 26 26 20 5c 0a 20 20 20 20 64 65 66 69 6e 65 64  && \.    defined
1840: 28 5f 5f 4d 53 56 43 52 54 5f 5f 29 0a 23 20 64  (__MSVCRT__).# d
1850: 65 66 69 6e 65 20 5f 55 53 45 5f 33 32 42 49 54  efine _USE_32BIT
1860: 5f 54 49 4d 45 5f 54 0a 23 65 6e 64 69 66 0a 0a  _TIME_T.#endif..
1870: 2f 2a 20 54 68 65 20 70 75 62 6c 69 63 20 53 51  /* The public SQ
1880: 4c 69 74 65 20 69 6e 74 65 72 66 61 63 65 2e 20  Lite interface. 
1890: 20 54 68 65 20 5f 46 49 4c 45 5f 4f 46 46 53 45   The _FILE_OFFSE
18a0: 54 5f 42 49 54 53 20 6d 61 63 72 6f 20 6d 75 73  T_BITS macro mus
18b0: 74 20 61 70 70 65 61 72 0a 2a 2a 20 66 69 72 73  t appear.** firs
18c0: 74 20 69 6e 20 51 4e 58 2e 20 20 41 6c 73 6f 2c  t in QNX.  Also,
18d0: 20 74 68 65 20 5f 55 53 45 5f 33 32 42 49 54 5f   the _USE_32BIT_
18e0: 54 49 4d 45 5f 54 20 6d 61 63 72 6f 20 6d 75 73  TIME_T macro mus
18f0: 74 20 61 70 70 65 61 72 20 66 69 72 73 74 20 66  t appear first f
1900: 6f 72 0a 2a 2a 20 4d 69 6e 47 57 2e 0a 2a 2f 0a  or.** MinGW..*/.
1910: 23 69 6e 63 6c 75 64 65 20 22 73 71 6c 69 74 65  #include "sqlite
1920: 33 2e 68 22 0a 0a 2f 2a 0a 2a 2a 20 49 6e 63 6c  3.h"../*.** Incl
1930: 75 64 65 20 74 68 65 20 63 6f 6e 66 69 67 75 72  ude the configur
1940: 61 74 69 6f 6e 20 68 65 61 64 65 72 20 6f 75 74  ation header out
1950: 70 75 74 20 62 79 20 27 63 6f 6e 66 69 67 75 72  put by 'configur
1960: 65 27 20 69 66 20 77 65 27 72 65 20 75 73 69 6e  e' if we're usin
1970: 67 20 74 68 65 0a 2a 2a 20 61 75 74 6f 63 6f 6e  g the.** autocon
1980: 66 2d 62 61 73 65 64 20 62 75 69 6c 64 0a 2a 2f  f-based build.*/
1990: 0a 23 69 66 20 64 65 66 69 6e 65 64 28 5f 48 41  .#if defined(_HA
19a0: 56 45 5f 53 51 4c 49 54 45 5f 43 4f 4e 46 49 47  VE_SQLITE_CONFIG
19b0: 5f 48 29 20 26 26 20 21 64 65 66 69 6e 65 64 28  _H) && !defined(
19c0: 53 51 4c 49 54 45 43 4f 4e 46 49 47 5f 48 29 0a  SQLITECONFIG_H).
19d0: 23 69 6e 63 6c 75 64 65 20 22 63 6f 6e 66 69 67  #include "config
19e0: 2e 68 22 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  .h".#define SQLI
19f0: 54 45 43 4f 4e 46 49 47 5f 48 20 31 0a 23 65 6e  TECONFIG_H 1.#en
1a00: 64 69 66 0a 0a 23 69 6e 63 6c 75 64 65 20 22 73  dif..#include "s
1a10: 71 6c 69 74 65 4c 69 6d 69 74 2e 68 22 0a 0a 2f  qliteLimit.h"../
1a20: 2a 20 44 69 73 61 62 6c 65 20 6e 75 69 73 61 6e  * Disable nuisan
1a30: 63 65 20 77 61 72 6e 69 6e 67 73 20 6f 6e 20 42  ce warnings on B
1a40: 6f 72 6c 61 6e 64 20 63 6f 6d 70 69 6c 65 72 73  orland compilers
1a50: 20 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28   */.#if defined(
1a60: 5f 5f 42 4f 52 4c 41 4e 44 43 5f 5f 29 0a 23 70  __BORLANDC__).#p
1a70: 72 61 67 6d 61 20 77 61 72 6e 20 2d 72 63 68 20  ragma warn -rch 
1a80: 2f 2a 20 75 6e 72 65 61 63 68 61 62 6c 65 20 63  /* unreachable c
1a90: 6f 64 65 20 2a 2f 0a 23 70 72 61 67 6d 61 20 77  ode */.#pragma w
1aa0: 61 72 6e 20 2d 63 63 63 20 2f 2a 20 43 6f 6e 64  arn -ccc /* Cond
1ab0: 69 74 69 6f 6e 20 69 73 20 61 6c 77 61 79 73 20  ition is always 
1ac0: 74 72 75 65 20 6f 72 20 66 61 6c 73 65 20 2a 2f  true or false */
1ad0: 0a 23 70 72 61 67 6d 61 20 77 61 72 6e 20 2d 61  .#pragma warn -a
1ae0: 75 73 20 2f 2a 20 41 73 73 69 67 6e 65 64 20 76  us /* Assigned v
1af0: 61 6c 75 65 20 69 73 20 6e 65 76 65 72 20 75 73  alue is never us
1b00: 65 64 20 2a 2f 0a 23 70 72 61 67 6d 61 20 77 61  ed */.#pragma wa
1b10: 72 6e 20 2d 63 73 75 20 2f 2a 20 43 6f 6d 70 61  rn -csu /* Compa
1b20: 72 69 6e 67 20 73 69 67 6e 65 64 20 61 6e 64 20  ring signed and 
1b30: 75 6e 73 69 67 6e 65 64 20 2a 2f 0a 23 70 72 61  unsigned */.#pra
1b40: 67 6d 61 20 77 61 72 6e 20 2d 73 70 61 20 2f 2a  gma warn -spa /*
1b50: 20 53 75 73 70 69 63 69 6f 75 73 20 70 6f 69 6e   Suspicious poin
1b60: 74 65 72 20 61 72 69 74 68 6d 65 74 69 63 20 2a  ter arithmetic *
1b70: 2f 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  /.#endif../*.** 
1b80: 49 6e 63 6c 75 64 65 20 73 74 61 6e 64 61 72 64  Include standard
1b90: 20 68 65 61 64 65 72 20 66 69 6c 65 73 20 61 73   header files as
1ba0: 20 6e 65 63 65 73 73 61 72 79 0a 2a 2f 0a 23 69   necessary.*/.#i
1bb0: 66 64 65 66 20 48 41 56 45 5f 53 54 44 49 4e 54  fdef HAVE_STDINT
1bc0: 5f 48 0a 23 69 6e 63 6c 75 64 65 20 3c 73 74 64  _H.#include <std
1bd0: 69 6e 74 2e 68 3e 0a 23 65 6e 64 69 66 0a 23 69  int.h>.#endif.#i
1be0: 66 64 65 66 20 48 41 56 45 5f 49 4e 54 54 59 50  fdef HAVE_INTTYP
1bf0: 45 53 5f 48 0a 23 69 6e 63 6c 75 64 65 20 3c 69  ES_H.#include <i
1c00: 6e 74 74 79 70 65 73 2e 68 3e 0a 23 65 6e 64 69  nttypes.h>.#endi
1c10: 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c  f../*.** The fol
1c20: 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 73 20 61 72  lowing macros ar
1c30: 65 20 75 73 65 64 20 74 6f 20 63 61 73 74 20 70  e used to cast p
1c40: 6f 69 6e 74 65 72 73 20 74 6f 20 69 6e 74 65 67  ointers to integ
1c50: 65 72 73 20 61 6e 64 0a 2a 2a 20 69 6e 74 65 67  ers and.** integ
1c60: 65 72 73 20 74 6f 20 70 6f 69 6e 74 65 72 73 2e  ers to pointers.
1c70: 20 20 54 68 65 20 77 61 79 20 79 6f 75 20 64 6f    The way you do
1c80: 20 74 68 69 73 20 76 61 72 69 65 73 20 66 72 6f   this varies fro
1c90: 6d 20 6f 6e 65 20 63 6f 6d 70 69 6c 65 72 0a 2a  m one compiler.*
1ca0: 2a 20 74 6f 20 74 68 65 20 6e 65 78 74 2c 20 73  * to the next, s
1cb0: 6f 20 77 65 20 68 61 76 65 20 64 65 76 65 6c 6f  o we have develo
1cc0: 70 65 64 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e  ped the followin
1cd0: 67 20 73 65 74 20 6f 66 20 23 69 66 20 73 74 61  g set of #if sta
1ce0: 74 65 6d 65 6e 74 73 0a 2a 2a 20 74 6f 20 67 65  tements.** to ge
1cf0: 6e 65 72 61 74 65 20 61 70 70 72 6f 70 72 69 61  nerate appropria
1d00: 74 65 20 6d 61 63 72 6f 73 20 66 6f 72 20 61 20  te macros for a 
1d10: 77 69 64 65 20 72 61 6e 67 65 20 6f 66 20 63 6f  wide range of co
1d20: 6d 70 69 6c 65 72 73 2e 0a 2a 2a 0a 2a 2a 20 54  mpilers..**.** T
1d30: 68 65 20 63 6f 72 72 65 63 74 20 22 41 4e 53 49  he correct "ANSI
1d40: 22 20 77 61 79 20 74 6f 20 64 6f 20 74 68 69 73  " way to do this
1d50: 20 69 73 20 74 6f 20 75 73 65 20 74 68 65 20 69   is to use the i
1d60: 6e 74 70 74 72 5f 74 20 74 79 70 65 2e 0a 2a 2a  ntptr_t type..**
1d70: 20 55 6e 66 6f 72 74 75 6e 61 74 65 6c 79 2c 20   Unfortunately, 
1d80: 74 68 61 74 20 74 79 70 65 64 65 66 20 69 73 20  that typedef is 
1d90: 6e 6f 74 20 61 76 61 69 6c 61 62 6c 65 20 6f 6e  not available on
1da0: 20 61 6c 6c 20 63 6f 6d 70 69 6c 65 72 73 2c 20   all compilers, 
1db0: 6f 72 0a 2a 2a 20 69 66 20 69 74 20 69 73 20 61  or.** if it is a
1dc0: 76 61 69 6c 61 62 6c 65 2c 20 69 74 20 72 65 71  vailable, it req
1dd0: 75 69 72 65 73 20 61 6e 20 23 69 6e 63 6c 75 64  uires an #includ
1de0: 65 20 6f 66 20 73 70 65 63 69 66 69 63 20 68 65  e of specific he
1df0: 61 64 65 72 73 0a 2a 2a 20 74 68 61 74 20 76 61  aders.** that va
1e00: 72 79 20 66 72 6f 6d 20 6f 6e 65 20 6d 61 63 68  ry from one mach
1e10: 69 6e 65 20 74 6f 20 74 68 65 20 6e 65 78 74 2e  ine to the next.
1e20: 0a 2a 2a 0a 2a 2a 20 54 69 63 6b 65 74 20 23 33  .**.** Ticket #3
1e30: 38 36 30 3a 20 20 54 68 65 20 6c 6c 76 6d 2d 67  860:  The llvm-g
1e40: 63 63 2d 34 2e 32 20 63 6f 6d 70 69 6c 65 72 20  cc-4.2 compiler 
1e50: 66 72 6f 6d 20 41 70 70 6c 65 20 63 68 6f 6b 65  from Apple choke
1e60: 73 20 6f 6e 0a 2a 2a 20 74 68 65 20 28 28 76 6f  s on.** the ((vo
1e70: 69 64 2a 29 26 28 28 63 68 61 72 2a 29 30 29 5b  id*)&((char*)0)[
1e80: 58 5d 29 20 63 6f 6e 73 74 72 75 63 74 2e 20 20  X]) construct.  
1e90: 42 75 74 20 4d 53 56 43 20 63 68 6f 6b 65 73 20  But MSVC chokes 
1ea0: 6f 6e 20 28 28 76 6f 69 64 2a 29 28 58 29 29 2e  on ((void*)(X)).
1eb0: 0a 2a 2a 20 53 6f 20 77 65 20 68 61 76 65 20 74  .** So we have t
1ec0: 6f 20 64 65 66 69 6e 65 20 74 68 65 20 6d 61 63  o define the mac
1ed0: 72 6f 73 20 69 6e 20 64 69 66 66 65 72 65 6e 74  ros in different
1ee0: 20 77 61 79 73 20 64 65 70 65 6e 64 69 6e 67 20   ways depending 
1ef0: 6f 6e 20 74 68 65 0a 2a 2a 20 63 6f 6d 70 69 6c  on the.** compil
1f00: 65 72 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e  er..*/.#if defin
1f10: 65 64 28 5f 5f 50 54 52 44 49 46 46 5f 54 59 50  ed(__PTRDIFF_TYP
1f20: 45 5f 5f 29 20 20 2f 2a 20 54 68 69 73 20 63 61  E__)  /* This ca
1f30: 73 65 20 73 68 6f 75 6c 64 20 77 6f 72 6b 20 66  se should work f
1f40: 6f 72 20 47 43 43 20 2a 2f 0a 23 20 64 65 66 69  or GCC */.# defi
1f50: 6e 65 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f  ne SQLITE_INT_TO
1f60: 5f 50 54 52 28 58 29 20 20 28 28 76 6f 69 64 2a  _PTR(X)  ((void*
1f70: 29 28 5f 5f 50 54 52 44 49 46 46 5f 54 59 50 45  )(__PTRDIFF_TYPE
1f80: 5f 5f 29 28 58 29 29 0a 23 20 64 65 66 69 6e 65  __)(X)).# define
1f90: 20 53 51 4c 49 54 45 5f 50 54 52 5f 54 4f 5f 49   SQLITE_PTR_TO_I
1fa0: 4e 54 28 58 29 20 20 28 28 69 6e 74 29 28 5f 5f  NT(X)  ((int)(__
1fb0: 50 54 52 44 49 46 46 5f 54 59 50 45 5f 5f 29 28  PTRDIFF_TYPE__)(
1fc0: 58 29 29 0a 23 65 6c 69 66 20 21 64 65 66 69 6e  X)).#elif !defin
1fd0: 65 64 28 5f 5f 47 4e 55 43 5f 5f 29 20 20 20 20  ed(__GNUC__)    
1fe0: 20 20 20 2f 2a 20 57 6f 72 6b 73 20 66 6f 72 20     /* Works for 
1ff0: 63 6f 6d 70 69 6c 65 72 73 20 6f 74 68 65 72 20  compilers other 
2000: 74 68 61 6e 20 4c 4c 56 4d 20 2a 2f 0a 23 20 64  than LLVM */.# d
2010: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49 4e 54  efine SQLITE_INT
2020: 5f 54 4f 5f 50 54 52 28 58 29 20 20 28 28 76 6f  _TO_PTR(X)  ((vo
2030: 69 64 2a 29 26 28 28 63 68 61 72 2a 29 30 29 5b  id*)&((char*)0)[
2040: 58 5d 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  X]).# define SQL
2050: 49 54 45 5f 50 54 52 5f 54 4f 5f 49 4e 54 28 58  ITE_PTR_TO_INT(X
2060: 29 20 20 28 28 69 6e 74 29 28 28 28 63 68 61 72  )  ((int)(((char
2070: 2a 29 58 29 2d 28 63 68 61 72 2a 29 30 29 29 0a  *)X)-(char*)0)).
2080: 23 65 6c 69 66 20 64 65 66 69 6e 65 64 28 48 41  #elif defined(HA
2090: 56 45 5f 53 54 44 49 4e 54 5f 48 29 20 20 20 2f  VE_STDINT_H)   /
20a0: 2a 20 55 73 65 20 74 68 69 73 20 63 61 73 65 20  * Use this case 
20b0: 69 66 20 77 65 20 68 61 76 65 20 41 4e 53 49 20  if we have ANSI 
20c0: 68 65 61 64 65 72 73 20 2a 2f 0a 23 20 64 65 66  headers */.# def
20d0: 69 6e 65 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54  ine SQLITE_INT_T
20e0: 4f 5f 50 54 52 28 58 29 20 20 28 28 76 6f 69 64  O_PTR(X)  ((void
20f0: 2a 29 28 69 6e 74 70 74 72 5f 74 29 28 58 29 29  *)(intptr_t)(X))
2100: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
2110: 5f 50 54 52 5f 54 4f 5f 49 4e 54 28 58 29 20 20  _PTR_TO_INT(X)  
2120: 28 28 69 6e 74 29 28 69 6e 74 70 74 72 5f 74 29  ((int)(intptr_t)
2130: 28 58 29 29 0a 23 65 6c 73 65 20 20 20 20 20 20  (X)).#else      
2140: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2150: 20 20 20 20 2f 2a 20 47 65 6e 65 72 61 74 65 73      /* Generates
2160: 20 61 20 77 61 72 6e 69 6e 67 20 2d 20 62 75 74   a warning - but
2170: 20 69 74 20 61 6c 77 61 79 73 20 77 6f 72 6b 73   it always works
2180: 20 2a 2f 0a 23 20 64 65 66 69 6e 65 20 53 51 4c   */.# define SQL
2190: 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 58  ITE_INT_TO_PTR(X
21a0: 29 20 20 28 28 76 6f 69 64 2a 29 28 58 29 29 0a  )  ((void*)(X)).
21b0: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
21c0: 50 54 52 5f 54 4f 5f 49 4e 54 28 58 29 20 20 28  PTR_TO_INT(X)  (
21d0: 28 69 6e 74 29 28 58 29 29 0a 23 65 6e 64 69 66  (int)(X)).#endif
21e0: 0a 0a 2f 2a 0a 2a 2a 20 41 20 6d 61 63 72 6f 20  ../*.** A macro 
21f0: 74 6f 20 68 69 6e 74 20 74 6f 20 74 68 65 20 63  to hint to the c
2200: 6f 6d 70 69 6c 65 72 20 74 68 61 74 20 61 20 66  ompiler that a f
2210: 75 6e 63 74 69 6f 6e 20 73 68 6f 75 6c 64 20 6e  unction should n
2220: 6f 74 20 62 65 0a 2a 2a 20 69 6e 6c 69 6e 65 64  ot be.** inlined
2230: 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64  ..*/.#if defined
2240: 28 5f 5f 47 4e 55 43 5f 5f 29 0a 23 20 20 64 65  (__GNUC__).#  de
2250: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e 4f 49 4e  fine SQLITE_NOIN
2260: 4c 49 4e 45 20 20 5f 5f 61 74 74 72 69 62 75 74  LINE  __attribut
2270: 65 5f 5f 28 28 6e 6f 69 6e 6c 69 6e 65 29 29 0a  e__((noinline)).
2280: 23 65 6c 69 66 20 64 65 66 69 6e 65 64 28 5f 4d  #elif defined(_M
2290: 53 43 5f 56 45 52 29 20 26 26 20 5f 4d 53 43 5f  SC_VER) && _MSC_
22a0: 56 45 52 3e 3d 31 33 31 30 0a 23 20 20 64 65 66  VER>=1310.#  def
22b0: 69 6e 65 20 53 51 4c 49 54 45 5f 4e 4f 49 4e 4c  ine SQLITE_NOINL
22c0: 49 4e 45 20 20 5f 5f 64 65 63 6c 73 70 65 63 28  INE  __declspec(
22d0: 6e 6f 69 6e 6c 69 6e 65 29 0a 23 65 6c 73 65 0a  noinline).#else.
22e0: 23 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  #  define SQLITE
22f0: 5f 4e 4f 49 4e 4c 49 4e 45 0a 23 65 6e 64 69 66  _NOINLINE.#endif
2300: 0a 0a 2f 2a 0a 2a 2a 20 4d 61 6b 65 20 73 75 72  ../*.** Make sur
2310: 65 20 74 68 61 74 20 74 68 65 20 63 6f 6d 70 69  e that the compi
2320: 6c 65 72 20 69 6e 74 72 69 6e 73 69 63 73 20 77  ler intrinsics w
2330: 65 20 64 65 73 69 72 65 20 61 72 65 20 65 6e 61  e desire are ena
2340: 62 6c 65 64 20 77 68 65 6e 0a 2a 2a 20 63 6f 6d  bled when.** com
2350: 70 69 6c 69 6e 67 20 77 69 74 68 20 61 6e 20 61  piling with an a
2360: 70 70 72 6f 70 72 69 61 74 65 20 76 65 72 73 69  ppropriate versi
2370: 6f 6e 20 6f 66 20 4d 53 56 43 20 75 6e 6c 65 73  on of MSVC unles
2380: 73 20 70 72 65 76 65 6e 74 65 64 20 62 79 0a 2a  s prevented by.*
2390: 2a 20 74 68 65 20 53 51 4c 49 54 45 5f 44 49 53  * the SQLITE_DIS
23a0: 41 42 4c 45 5f 49 4e 54 52 49 4e 53 49 43 20 64  ABLE_INTRINSIC d
23b0: 65 66 69 6e 65 2e 0a 2a 2f 0a 23 69 66 20 21 64  efine..*/.#if !d
23c0: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 49  efined(SQLITE_DI
23d0: 53 41 42 4c 45 5f 49 4e 54 52 49 4e 53 49 43 29  SABLE_INTRINSIC)
23e0: 0a 23 20 20 69 66 20 64 65 66 69 6e 65 64 28 5f  .#  if defined(_
23f0: 4d 53 43 5f 56 45 52 29 20 26 26 20 5f 4d 53 43  MSC_VER) && _MSC
2400: 5f 56 45 52 3e 3d 31 34 30 30 0a 23 20 20 20 20  _VER>=1400.#    
2410: 69 66 20 21 64 65 66 69 6e 65 64 28 5f 57 49 4e  if !defined(_WIN
2420: 33 32 5f 57 43 45 29 0a 23 20 20 20 20 20 20 69  32_WCE).#      i
2430: 6e 63 6c 75 64 65 20 3c 69 6e 74 72 69 6e 2e 68  nclude <intrin.h
2440: 3e 0a 23 20 20 20 20 20 20 70 72 61 67 6d 61 20  >.#      pragma 
2450: 69 6e 74 72 69 6e 73 69 63 28 5f 62 79 74 65 73  intrinsic(_bytes
2460: 77 61 70 5f 75 73 68 6f 72 74 29 0a 23 20 20 20  wap_ushort).#   
2470: 20 20 20 70 72 61 67 6d 61 20 69 6e 74 72 69 6e     pragma intrin
2480: 73 69 63 28 5f 62 79 74 65 73 77 61 70 5f 75 6c  sic(_byteswap_ul
2490: 6f 6e 67 29 0a 23 20 20 20 20 20 20 70 72 61 67  ong).#      prag
24a0: 6d 61 20 69 6e 74 72 69 6e 73 69 63 28 5f 62 79  ma intrinsic(_by
24b0: 74 65 73 77 61 70 5f 75 69 6e 74 36 34 29 0a 23  teswap_uint64).#
24c0: 20 20 20 20 20 20 70 72 61 67 6d 61 20 69 6e 74        pragma int
24d0: 72 69 6e 73 69 63 28 5f 52 65 61 64 57 72 69 74  rinsic(_ReadWrit
24e0: 65 42 61 72 72 69 65 72 29 0a 23 20 20 20 20 65  eBarrier).#    e
24f0: 6c 73 65 0a 23 20 20 20 20 20 20 69 6e 63 6c 75  lse.#      inclu
2500: 64 65 20 3c 63 6d 6e 69 6e 74 72 69 6e 2e 68 3e  de <cmnintrin.h>
2510: 0a 23 20 20 20 20 65 6e 64 69 66 0a 23 20 20 65  .#    endif.#  e
2520: 6e 64 69 66 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  ndif.#endif../*.
2530: 2a 2a 20 54 68 65 20 53 51 4c 49 54 45 5f 54 48  ** The SQLITE_TH
2540: 52 45 41 44 53 41 46 45 20 6d 61 63 72 6f 20 6d  READSAFE macro m
2550: 75 73 74 20 62 65 20 64 65 66 69 6e 65 64 20 61  ust be defined a
2560: 73 20 30 2c 20 31 2c 20 6f 72 20 32 2e 0a 2a 2a  s 0, 1, or 2..**
2570: 20 30 20 6d 65 61 6e 73 20 6d 75 74 65 78 65 73   0 means mutexes
2580: 20 61 72 65 20 70 65 72 6d 61 6e 65 6e 74 6c 79   are permanently
2590: 20 64 69 73 61 62 6c 65 20 61 6e 64 20 74 68 65   disable and the
25a0: 20 6c 69 62 72 61 72 79 20 69 73 20 6e 65 76 65   library is neve
25b0: 72 0a 2a 2a 20 74 68 72 65 61 64 73 61 66 65 2e  r.** threadsafe.
25c0: 20 20 31 20 6d 65 61 6e 73 20 74 68 65 20 6c 69    1 means the li
25d0: 62 72 61 72 79 20 69 73 20 73 65 72 69 61 6c 69  brary is seriali
25e0: 7a 65 64 20 77 68 69 63 68 20 69 73 20 74 68 65  zed which is the
25f0: 20 68 69 67 68 65 73 74 0a 2a 2a 20 6c 65 76 65   highest.** leve
2600: 6c 20 6f 66 20 74 68 72 65 61 64 73 61 66 65 74  l of threadsafet
2610: 79 2e 20 20 32 20 6d 65 61 6e 73 20 74 68 65 20  y.  2 means the 
2620: 6c 69 62 72 61 72 79 20 69 73 20 6d 75 6c 74 69  library is multi
2630: 74 68 72 65 61 64 65 64 20 2d 20 6d 75 6c 74 69  threaded - multi
2640: 70 6c 65 0a 2a 2a 20 74 68 72 65 61 64 73 20 63  ple.** threads c
2650: 61 6e 20 75 73 65 20 53 51 4c 69 74 65 20 61 73  an use SQLite as
2660: 20 6c 6f 6e 67 20 61 73 20 6e 6f 20 74 77 6f 20   long as no two 
2670: 74 68 72 65 61 64 73 20 74 72 79 20 74 6f 20 75  threads try to u
2680: 73 65 20 74 68 65 20 73 61 6d 65 0a 2a 2a 20 64  se the same.** d
2690: 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
26a0: 6f 6e 20 61 74 20 74 68 65 20 73 61 6d 65 20 74  on at the same t
26b0: 69 6d 65 2e 0a 2a 2a 0a 2a 2a 20 4f 6c 64 65 72  ime..**.** Older
26c0: 20 76 65 72 73 69 6f 6e 73 20 6f 66 20 53 51 4c   versions of SQL
26d0: 69 74 65 20 75 73 65 64 20 61 6e 20 6f 70 74 69  ite used an opti
26e0: 6f 6e 61 6c 20 54 48 52 45 41 44 53 41 46 45 20  onal THREADSAFE 
26f0: 6d 61 63 72 6f 2e 0a 2a 2a 20 57 65 20 73 75 70  macro..** We sup
2700: 70 6f 72 74 20 74 68 61 74 20 66 6f 72 20 6c 65  port that for le
2710: 67 61 63 79 2e 0a 2a 2a 0a 2a 2a 20 54 6f 20 65  gacy..**.** To e
2720: 6e 73 75 72 65 20 74 68 61 74 20 74 68 65 20 63  nsure that the c
2730: 6f 72 72 65 63 74 20 76 61 6c 75 65 20 6f 66 20  orrect value of 
2740: 22 54 48 52 45 41 44 53 41 46 45 22 20 69 73 20  "THREADSAFE" is 
2750: 72 65 70 6f 72 74 65 64 20 77 68 65 6e 20 71 75  reported when qu
2760: 65 72 79 69 6e 67 0a 2a 2a 20 66 6f 72 20 63 6f  erying.** for co
2770: 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f  mpile-time optio
2780: 6e 73 20 61 74 20 72 75 6e 74 69 6d 65 20 28 65  ns at runtime (e
2790: 2e 67 2e 20 22 50 52 41 47 4d 41 20 63 6f 6d 70  .g. "PRAGMA comp
27a0: 69 6c 65 5f 6f 70 74 69 6f 6e 73 22 29 2c 20 74  ile_options"), t
27b0: 68 69 73 0a 2a 2a 20 6c 6f 67 69 63 20 69 73 20  his.** logic is 
27c0: 70 61 72 74 69 61 6c 6c 79 20 72 65 70 6c 69 63  partially replic
27d0: 61 74 65 64 20 69 6e 20 63 74 69 6d 65 2e 63 2e  ated in ctime.c.
27e0: 20 49 66 20 69 74 20 69 73 20 75 70 64 61 74 65   If it is update
27f0: 64 20 68 65 72 65 2c 20 69 74 20 73 68 6f 75 6c  d here, it shoul
2800: 64 0a 2a 2a 20 61 6c 73 6f 20 62 65 20 75 70 64  d.** also be upd
2810: 61 74 65 64 20 74 68 65 72 65 2e 0a 2a 2f 0a 23  ated there..*/.#
2820: 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  if !defined(SQLI
2830: 54 45 5f 54 48 52 45 41 44 53 41 46 45 29 0a 23  TE_THREADSAFE).#
2840: 20 69 66 20 64 65 66 69 6e 65 64 28 54 48 52 45   if defined(THRE
2850: 41 44 53 41 46 45 29 0a 23 20 20 20 64 65 66 69  ADSAFE).#   defi
2860: 6e 65 20 53 51 4c 49 54 45 5f 54 48 52 45 41 44  ne SQLITE_THREAD
2870: 53 41 46 45 20 54 48 52 45 41 44 53 41 46 45 0a  SAFE THREADSAFE.
2880: 23 20 65 6c 73 65 0a 23 20 20 20 64 65 66 69 6e  # else.#   defin
2890: 65 20 53 51 4c 49 54 45 5f 54 48 52 45 41 44 53  e SQLITE_THREADS
28a0: 41 46 45 20 31 20 2f 2a 20 49 4d 50 3a 20 52 2d  AFE 1 /* IMP: R-
28b0: 30 37 32 37 32 2d 32 32 33 30 39 20 2a 2f 0a 23  07272-22309 */.#
28c0: 20 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 0a 2f   endif.#endif../
28d0: 2a 0a 2a 2a 20 50 6f 77 65 72 73 61 66 65 20 6f  *.** Powersafe o
28e0: 76 65 72 77 72 69 74 65 20 69 73 20 6f 6e 20 62  verwrite is on b
28f0: 79 20 64 65 66 61 75 6c 74 2e 20 20 42 75 74 20  y default.  But 
2900: 63 61 6e 20 62 65 20 74 75 72 6e 65 64 20 6f 66  can be turned of
2910: 66 20 75 73 69 6e 67 0a 2a 2a 20 74 68 65 20 2d  f using.** the -
2920: 44 53 51 4c 49 54 45 5f 50 4f 57 45 52 53 41 46  DSQLITE_POWERSAF
2930: 45 5f 4f 56 45 52 57 52 49 54 45 3d 30 20 63 6f  E_OVERWRITE=0 co
2940: 6d 6d 61 6e 64 2d 6c 69 6e 65 20 6f 70 74 69 6f  mmand-line optio
2950: 6e 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51  n..*/.#ifndef SQ
2960: 4c 49 54 45 5f 50 4f 57 45 52 53 41 46 45 5f 4f  LITE_POWERSAFE_O
2970: 56 45 52 57 52 49 54 45 0a 23 20 64 65 66 69 6e  VERWRITE.# defin
2980: 65 20 53 51 4c 49 54 45 5f 50 4f 57 45 52 53 41  e SQLITE_POWERSA
2990: 46 45 5f 4f 56 45 52 57 52 49 54 45 20 31 0a 23  FE_OVERWRITE 1.#
29a0: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 45 56 49  endif../*.** EVI
29b0: 44 45 4e 43 45 2d 4f 46 3a 20 52 2d 32 35 37 31  DENCE-OF: R-2571
29c0: 35 2d 33 37 30 37 32 20 4d 65 6d 6f 72 79 20 61  5-37072 Memory a
29d0: 6c 6c 6f 63 61 74 69 6f 6e 20 73 74 61 74 69 73  llocation statis
29e0: 74 69 63 73 20 61 72 65 20 65 6e 61 62 6c 65 64  tics are enabled
29f0: 20 62 79 0a 2a 2a 20 64 65 66 61 75 6c 74 20 75   by.** default u
2a00: 6e 6c 65 73 73 20 53 51 4c 69 74 65 20 69 73 20  nless SQLite is 
2a10: 63 6f 6d 70 69 6c 65 64 20 77 69 74 68 20 53 51  compiled with SQ
2a20: 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d 45 4d  LITE_DEFAULT_MEM
2a30: 53 54 41 54 55 53 3d 30 20 69 6e 0a 2a 2a 20 77  STATUS=0 in.** w
2a40: 68 69 63 68 20 63 61 73 65 20 6d 65 6d 6f 72 79  hich case memory
2a50: 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 73 74 61 74   allocation stat
2a60: 69 73 74 69 63 73 20 61 72 65 20 64 69 73 61 62  istics are disab
2a70: 6c 65 64 20 62 79 20 64 65 66 61 75 6c 74 2e 0a  led by default..
2a80: 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28  */.#if !defined(
2a90: 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d  SQLITE_DEFAULT_M
2aa0: 45 4d 53 54 41 54 55 53 29 0a 23 20 64 65 66 69  EMSTATUS).# defi
2ab0: 6e 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c  ne SQLITE_DEFAUL
2ac0: 54 5f 4d 45 4d 53 54 41 54 55 53 20 31 0a 23 65  T_MEMSTATUS 1.#e
2ad0: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 45 78 61 63  ndif../*.** Exac
2ae0: 74 6c 79 20 6f 6e 65 20 6f 66 20 74 68 65 20 66  tly one of the f
2af0: 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 73 20  ollowing macros 
2b00: 6d 75 73 74 20 62 65 20 64 65 66 69 6e 65 64 20  must be defined 
2b10: 69 6e 20 6f 72 64 65 72 20 74 6f 0a 2a 2a 20 73  in order to.** s
2b20: 70 65 63 69 66 79 20 77 68 69 63 68 20 6d 65 6d  pecify which mem
2b30: 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 73  ory allocation s
2b40: 75 62 73 79 73 74 65 6d 20 74 6f 20 75 73 65 2e  ubsystem to use.
2b50: 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 51 4c 49 54  .**.**     SQLIT
2b60: 45 5f 53 59 53 54 45 4d 5f 4d 41 4c 4c 4f 43 20  E_SYSTEM_MALLOC 
2b70: 20 20 20 20 20 20 20 20 20 2f 2f 20 55 73 65 20           // Use 
2b80: 6e 6f 72 6d 61 6c 20 73 79 73 74 65 6d 20 6d 61  normal system ma
2b90: 6c 6c 6f 63 28 29 0a 2a 2a 20 20 20 20 20 53 51  lloc().**     SQ
2ba0: 4c 49 54 45 5f 57 49 4e 33 32 5f 4d 41 4c 4c 4f  LITE_WIN32_MALLO
2bb0: 43 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 55  C           // U
2bc0: 73 65 20 57 69 6e 33 32 20 6e 61 74 69 76 65 20  se Win32 native 
2bd0: 68 65 61 70 20 41 50 49 0a 2a 2a 20 20 20 20 20  heap API.**     
2be0: 53 51 4c 49 54 45 5f 5a 45 52 4f 5f 4d 41 4c 4c  SQLITE_ZERO_MALL
2bf0: 4f 43 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  OC            //
2c00: 20 55 73 65 20 61 20 73 74 75 62 20 61 6c 6c 6f   Use a stub allo
2c10: 63 61 74 6f 72 20 74 68 61 74 20 61 6c 77 61 79  cator that alway
2c20: 73 20 66 61 69 6c 73 0a 2a 2a 20 20 20 20 20 53  s fails.**     S
2c30: 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47 20 20  QLITE_MEMDEBUG  
2c40: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
2c50: 44 65 62 75 67 67 69 6e 67 20 76 65 72 73 69 6f  Debugging versio
2c60: 6e 20 6f 66 20 73 79 73 74 65 6d 20 6d 61 6c 6c  n of system mall
2c70: 6f 63 28 29 0a 2a 2a 0a 2a 2a 20 4f 6e 20 57 69  oc().**.** On Wi
2c80: 6e 64 6f 77 73 2c 20 69 66 20 74 68 65 20 53 51  ndows, if the SQ
2c90: 4c 49 54 45 5f 57 49 4e 33 32 5f 4d 41 4c 4c 4f  LITE_WIN32_MALLO
2ca0: 43 5f 56 41 4c 49 44 41 54 45 20 6d 61 63 72 6f  C_VALIDATE macro
2cb0: 20 69 73 20 64 65 66 69 6e 65 64 20 61 6e 64 20   is defined and 
2cc0: 74 68 65 0a 2a 2a 20 61 73 73 65 72 74 28 29 20  the.** assert() 
2cd0: 6d 61 63 72 6f 20 69 73 20 65 6e 61 62 6c 65 64  macro is enabled
2ce0: 2c 20 65 61 63 68 20 63 61 6c 6c 20 69 6e 74 6f  , each call into
2cf0: 20 74 68 65 20 57 69 6e 33 32 20 6e 61 74 69 76   the Win32 nativ
2d00: 65 20 68 65 61 70 20 73 75 62 73 79 73 74 65 6d  e heap subsystem
2d10: 0a 2a 2a 20 77 69 6c 6c 20 63 61 75 73 65 20 48  .** will cause H
2d20: 65 61 70 56 61 6c 69 64 61 74 65 20 74 6f 20 62  eapValidate to b
2d30: 65 20 63 61 6c 6c 65 64 2e 20 20 49 66 20 68 65  e called.  If he
2d40: 61 70 20 76 61 6c 69 64 61 74 69 6f 6e 20 73 68  ap validation sh
2d50: 6f 75 6c 64 20 66 61 69 6c 2c 20 61 6e 0a 2a 2a  ould fail, an.**
2d60: 20 61 73 73 65 72 74 69 6f 6e 20 77 69 6c 6c 20   assertion will 
2d70: 62 65 20 74 72 69 67 67 65 72 65 64 2e 0a 2a 2a  be triggered..**
2d80: 0a 2a 2a 20 49 66 20 6e 6f 6e 65 20 6f 66 20 74  .** If none of t
2d90: 68 65 20 61 62 6f 76 65 20 61 72 65 20 64 65 66  he above are def
2da0: 69 6e 65 64 2c 20 74 68 65 6e 20 73 65 74 20 53  ined, then set S
2db0: 51 4c 49 54 45 5f 53 59 53 54 45 4d 5f 4d 41 4c  QLITE_SYSTEM_MAL
2dc0: 4c 4f 43 20 61 73 0a 2a 2a 20 74 68 65 20 64 65  LOC as.** the de
2dd0: 66 61 75 6c 74 2e 0a 2a 2f 0a 23 69 66 20 64 65  fault..*/.#if de
2de0: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 53 59 53  fined(SQLITE_SYS
2df0: 54 45 4d 5f 4d 41 4c 4c 4f 43 29 20 5c 0a 20 20  TEM_MALLOC) \.  
2e00: 2b 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  + defined(SQLITE
2e10: 5f 57 49 4e 33 32 5f 4d 41 4c 4c 4f 43 29 20 5c  _WIN32_MALLOC) \
2e20: 0a 20 20 2b 20 64 65 66 69 6e 65 64 28 53 51 4c  .  + defined(SQL
2e30: 49 54 45 5f 5a 45 52 4f 5f 4d 41 4c 4c 4f 43 29  ITE_ZERO_MALLOC)
2e40: 20 5c 0a 20 20 2b 20 64 65 66 69 6e 65 64 28 53   \.  + defined(S
2e50: 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47 29 3e  QLITE_MEMDEBUG)>
2e60: 31 0a 23 20 65 72 72 6f 72 20 22 54 77 6f 20 6f  1.# error "Two o
2e70: 72 20 6d 6f 72 65 20 6f 66 20 74 68 65 20 66 6f  r more of the fo
2e80: 6c 6c 6f 77 69 6e 67 20 63 6f 6d 70 69 6c 65 2d  llowing compile-
2e90: 74 69 6d 65 20 63 6f 6e 66 69 67 75 72 61 74 69  time configurati
2ea0: 6f 6e 20 6f 70 74 69 6f 6e 73 5c 0a 20 61 72 65  on options\. are
2eb0: 20 64 65 66 69 6e 65 64 20 62 75 74 20 61 74 20   defined but at 
2ec0: 6d 6f 73 74 20 6f 6e 65 20 69 73 20 61 6c 6c 6f  most one is allo
2ed0: 77 65 64 3a 5c 0a 20 53 51 4c 49 54 45 5f 53 59  wed:\. SQLITE_SY
2ee0: 53 54 45 4d 5f 4d 41 4c 4c 4f 43 2c 20 53 51 4c  STEM_MALLOC, SQL
2ef0: 49 54 45 5f 57 49 4e 33 32 5f 4d 41 4c 4c 4f 43  ITE_WIN32_MALLOC
2f00: 2c 20 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55  , SQLITE_MEMDEBU
2f10: 47 2c 5c 0a 20 53 51 4c 49 54 45 5f 5a 45 52 4f  G,\. SQLITE_ZERO
2f20: 5f 4d 41 4c 4c 4f 43 22 0a 23 65 6e 64 69 66 0a  _MALLOC".#endif.
2f30: 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49  #if defined(SQLI
2f40: 54 45 5f 53 59 53 54 45 4d 5f 4d 41 4c 4c 4f 43  TE_SYSTEM_MALLOC
2f50: 29 20 5c 0a 20 20 2b 20 64 65 66 69 6e 65 64 28  ) \.  + defined(
2f60: 53 51 4c 49 54 45 5f 57 49 4e 33 32 5f 4d 41 4c  SQLITE_WIN32_MAL
2f70: 4c 4f 43 29 20 5c 0a 20 20 2b 20 64 65 66 69 6e  LOC) \.  + defin
2f80: 65 64 28 53 51 4c 49 54 45 5f 5a 45 52 4f 5f 4d  ed(SQLITE_ZERO_M
2f90: 41 4c 4c 4f 43 29 20 5c 0a 20 20 2b 20 64 65 66  ALLOC) \.  + def
2fa0: 69 6e 65 64 28 53 51 4c 49 54 45 5f 4d 45 4d 44  ined(SQLITE_MEMD
2fb0: 45 42 55 47 29 3d 3d 30 0a 23 20 64 65 66 69 6e  EBUG)==0.# defin
2fc0: 65 20 53 51 4c 49 54 45 5f 53 59 53 54 45 4d 5f  e SQLITE_SYSTEM_
2fd0: 4d 41 4c 4c 4f 43 20 31 0a 23 65 6e 64 69 66 0a  MALLOC 1.#endif.
2fe0: 0a 2f 2a 0a 2a 2a 20 49 66 20 53 51 4c 49 54 45  ./*.** If SQLITE
2ff0: 5f 4d 41 4c 4c 4f 43 5f 53 4f 46 54 5f 4c 49 4d  _MALLOC_SOFT_LIM
3000: 49 54 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20  IT is not zero, 
3010: 74 68 65 6e 20 74 72 79 20 74 6f 20 6b 65 65 70  then try to keep
3020: 20 74 68 65 0a 2a 2a 20 73 69 7a 65 73 20 6f 66   the.** sizes of
3030: 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69   memory allocati
3040: 6f 6e 73 20 62 65 6c 6f 77 20 74 68 69 73 20 76  ons below this v
3050: 61 6c 75 65 20 77 68 65 72 65 20 70 6f 73 73 69  alue where possi
3060: 62 6c 65 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66  ble..*/.#if !def
3070: 69 6e 65 64 28 53 51 4c 49 54 45 5f 4d 41 4c 4c  ined(SQLITE_MALL
3080: 4f 43 5f 53 4f 46 54 5f 4c 49 4d 49 54 29 0a 23  OC_SOFT_LIMIT).#
3090: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d   define SQLITE_M
30a0: 41 4c 4c 4f 43 5f 53 4f 46 54 5f 4c 49 4d 49 54  ALLOC_SOFT_LIMIT
30b0: 20 31 30 32 34 0a 23 65 6e 64 69 66 0a 0a 2f 2a   1024.#endif../*
30c0: 0a 2a 2a 20 57 65 20 6e 65 65 64 20 74 6f 20 64  .** We need to d
30d0: 65 66 69 6e 65 20 5f 58 4f 50 45 4e 5f 53 4f 55  efine _XOPEN_SOU
30e0: 52 43 45 20 61 73 20 66 6f 6c 6c 6f 77 73 20 69  RCE as follows i
30f0: 6e 20 6f 72 64 65 72 20 74 6f 20 65 6e 61 62 6c  n order to enabl
3100: 65 0a 2a 2a 20 72 65 63 75 72 73 69 76 65 20 6d  e.** recursive m
3110: 75 74 65 78 65 73 20 6f 6e 20 6d 6f 73 74 20 55  utexes on most U
3120: 6e 69 78 20 73 79 73 74 65 6d 73 20 61 6e 64 20  nix systems and 
3130: 66 63 68 6d 6f 64 28 29 20 6f 6e 20 4f 70 65 6e  fchmod() on Open
3140: 42 53 44 2e 0a 2a 2a 20 42 75 74 20 5f 58 4f 50  BSD..** But _XOP
3150: 45 4e 5f 53 4f 55 52 43 45 20 64 65 66 69 6e 65  EN_SOURCE define
3160: 20 63 61 75 73 65 73 20 70 72 6f 62 6c 65 6d 73   causes problems
3170: 20 66 6f 72 20 4d 61 63 20 4f 53 20 58 2c 20 73   for Mac OS X, s
3180: 6f 20 6f 6d 69 74 0a 2a 2a 20 69 74 2e 0a 2a 2f  o omit.** it..*/
3190: 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 5f 58  .#if !defined(_X
31a0: 4f 50 45 4e 5f 53 4f 55 52 43 45 29 20 26 26 20  OPEN_SOURCE) && 
31b0: 21 64 65 66 69 6e 65 64 28 5f 5f 44 41 52 57 49  !defined(__DARWI
31c0: 4e 5f 5f 29 20 26 26 20 21 64 65 66 69 6e 65 64  N__) && !defined
31d0: 28 5f 5f 41 50 50 4c 45 5f 5f 29 0a 23 20 20 64  (__APPLE__).#  d
31e0: 65 66 69 6e 65 20 5f 58 4f 50 45 4e 5f 53 4f 55  efine _XOPEN_SOU
31f0: 52 43 45 20 36 30 30 0a 23 65 6e 64 69 66 0a 0a  RCE 600.#endif..
3200: 2f 2a 0a 2a 2a 20 4e 44 45 42 55 47 20 61 6e 64  /*.** NDEBUG and
3210: 20 53 51 4c 49 54 45 5f 44 45 42 55 47 20 61 72   SQLITE_DEBUG ar
3220: 65 20 6f 70 70 6f 73 69 74 65 73 2e 20 20 49 74  e opposites.  It
3230: 20 73 68 6f 75 6c 64 20 61 6c 77 61 79 73 20 62   should always b
3240: 65 20 74 72 75 65 20 74 68 61 74 0a 2a 2a 20 64  e true that.** d
3250: 65 66 69 6e 65 64 28 4e 44 45 42 55 47 29 3d 3d  efined(NDEBUG)==
3260: 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
3270: 44 45 42 55 47 29 2e 20 20 49 66 20 74 68 69 73  DEBUG).  If this
3280: 20 69 73 20 6e 6f 74 20 63 75 72 72 65 6e 74 6c   is not currentl
3290: 79 20 74 72 75 65 2c 0a 2a 2a 20 6d 61 6b 65 20  y true,.** make 
32a0: 69 74 20 74 72 75 65 20 62 79 20 64 65 66 69 6e  it true by defin
32b0: 69 6e 67 20 6f 72 20 75 6e 64 65 66 69 6e 69 6e  ing or undefinin
32c0: 67 20 4e 44 45 42 55 47 2e 0a 2a 2a 0a 2a 2a 20  g NDEBUG..**.** 
32d0: 53 65 74 74 69 6e 67 20 4e 44 45 42 55 47 20 6d  Setting NDEBUG m
32e0: 61 6b 65 73 20 74 68 65 20 63 6f 64 65 20 73 6d  akes the code sm
32f0: 61 6c 6c 65 72 20 61 6e 64 20 66 61 73 74 65 72  aller and faster
3300: 20 62 79 20 64 69 73 61 62 6c 69 6e 67 20 74 68   by disabling th
3310: 65 0a 2a 2a 20 61 73 73 65 72 74 28 29 20 73 74  e.** assert() st
3320: 61 74 65 6d 65 6e 74 73 20 69 6e 20 74 68 65 20  atements in the 
3330: 63 6f 64 65 2e 20 20 53 6f 20 77 65 20 77 61 6e  code.  So we wan
3340: 74 20 74 68 65 20 64 65 66 61 75 6c 74 20 61 63  t the default ac
3350: 74 69 6f 6e 0a 2a 2a 20 74 6f 20 62 65 20 66 6f  tion.** to be fo
3360: 72 20 4e 44 45 42 55 47 20 74 6f 20 62 65 20 73  r NDEBUG to be s
3370: 65 74 20 61 6e 64 20 4e 44 45 42 55 47 20 74 6f  et and NDEBUG to
3380: 20 62 65 20 75 6e 64 65 66 69 6e 65 64 20 6f 6e   be undefined on
3390: 6c 79 20 69 66 20 53 51 4c 49 54 45 5f 44 45 42  ly if SQLITE_DEB
33a0: 55 47 0a 2a 2a 20 69 73 20 73 65 74 2e 20 20 54  UG.** is set.  T
33b0: 68 75 73 20 4e 44 45 42 55 47 20 62 65 63 6f 6d  hus NDEBUG becom
33c0: 65 73 20 61 6e 20 6f 70 74 2d 69 6e 20 72 61 74  es an opt-in rat
33d0: 68 65 72 20 74 68 61 6e 20 61 6e 20 6f 70 74 2d  her than an opt-
33e0: 6f 75 74 0a 2a 2a 20 66 65 61 74 75 72 65 2e 0a  out.** feature..
33f0: 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28  */.#if !defined(
3400: 4e 44 45 42 55 47 29 20 26 26 20 21 64 65 66 69  NDEBUG) && !defi
3410: 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47  ned(SQLITE_DEBUG
3420: 29 0a 23 20 64 65 66 69 6e 65 20 4e 44 45 42 55  ).# define NDEBU
3430: 47 20 31 0a 23 65 6e 64 69 66 0a 23 69 66 20 64  G 1.#endif.#if d
3440: 65 66 69 6e 65 64 28 4e 44 45 42 55 47 29 20 26  efined(NDEBUG) &
3450: 26 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  & defined(SQLITE
3460: 5f 44 45 42 55 47 29 0a 23 20 75 6e 64 65 66 20  _DEBUG).# undef 
3470: 4e 44 45 42 55 47 0a 23 65 6e 64 69 66 0a 0a 2f  NDEBUG.#endif../
3480: 2a 0a 2a 2a 20 45 6e 61 62 6c 65 20 53 51 4c 49  *.** Enable SQLI
3490: 54 45 5f 45 4e 41 42 4c 45 5f 45 58 50 4c 41 49  TE_ENABLE_EXPLAI
34a0: 4e 5f 43 4f 4d 4d 45 4e 54 53 20 69 66 20 53 51  N_COMMENTS if SQ
34b0: 4c 49 54 45 5f 44 45 42 55 47 20 69 73 20 74 75  LITE_DEBUG is tu
34c0: 72 6e 65 64 20 6f 6e 2e 0a 2a 2f 0a 23 69 66 20  rned on..*/.#if 
34d0: 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
34e0: 45 4e 41 42 4c 45 5f 45 58 50 4c 41 49 4e 5f 43  ENABLE_EXPLAIN_C
34f0: 4f 4d 4d 45 4e 54 53 29 20 26 26 20 64 65 66 69  OMMENTS) && defi
3500: 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47  ned(SQLITE_DEBUG
3510: 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  ).# define SQLIT
3520: 45 5f 45 4e 41 42 4c 45 5f 45 58 50 4c 41 49 4e  E_ENABLE_EXPLAIN
3530: 5f 43 4f 4d 4d 45 4e 54 53 20 31 0a 23 65 6e 64  _COMMENTS 1.#end
3540: 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 74 65  if../*.** The te
3550: 73 74 63 61 73 65 28 29 20 6d 61 63 72 6f 20 69  stcase() macro i
3560: 73 20 75 73 65 64 20 74 6f 20 61 69 64 20 69 6e  s used to aid in
3570: 20 63 6f 76 65 72 61 67 65 20 74 65 73 74 69 6e   coverage testin
3580: 67 2e 20 20 57 68 65 6e 0a 2a 2a 20 64 6f 69 6e  g.  When.** doin
3590: 67 20 63 6f 76 65 72 61 67 65 20 74 65 73 74 69  g coverage testi
35a0: 6e 67 2c 20 74 68 65 20 63 6f 6e 64 69 74 69 6f  ng, the conditio
35b0: 6e 20 69 6e 73 69 64 65 20 74 68 65 20 61 72 67  n inside the arg
35c0: 75 6d 65 6e 74 20 74 6f 0a 2a 2a 20 74 65 73 74  ument to.** test
35d0: 63 61 73 65 28 29 20 6d 75 73 74 20 62 65 20 65  case() must be e
35e0: 76 61 6c 75 61 74 65 64 20 62 6f 74 68 20 74 72  valuated both tr
35f0: 75 65 20 61 6e 64 20 66 61 6c 73 65 20 69 6e 20  ue and false in 
3600: 6f 72 64 65 72 20 74 6f 0a 2a 2a 20 67 65 74 20  order to.** get 
3610: 66 75 6c 6c 20 62 72 61 6e 63 68 20 63 6f 76 65  full branch cove
3620: 72 61 67 65 2e 20 20 54 68 65 20 74 65 73 74 63  rage.  The testc
3630: 61 73 65 28 29 20 6d 61 63 72 6f 20 69 73 20 69  ase() macro is i
3640: 6e 73 65 72 74 65 64 0a 2a 2a 20 74 6f 20 68 65  nserted.** to he
3650: 6c 70 20 65 6e 73 75 72 65 20 61 64 65 71 75 61  lp ensure adequa
3660: 74 65 20 74 65 73 74 20 63 6f 76 65 72 61 67 65  te test coverage
3670: 20 69 6e 20 70 6c 61 63 65 73 20 77 68 65 72 65   in places where
3680: 20 73 69 6d 70 6c 65 0a 2a 2a 20 63 6f 6e 64 69   simple.** condi
3690: 74 69 6f 6e 2f 64 65 63 69 73 69 6f 6e 20 63 6f  tion/decision co
36a0: 76 65 72 61 67 65 20 69 73 20 69 6e 61 64 65 71  verage is inadeq
36b0: 75 61 74 65 2e 20 20 46 6f 72 20 65 78 61 6d 70  uate.  For examp
36c0: 6c 65 2c 20 74 65 73 74 63 61 73 65 28 29 0a 2a  le, testcase().*
36d0: 2a 20 63 61 6e 20 62 65 20 75 73 65 64 20 74 6f  * can be used to
36e0: 20 6d 61 6b 65 20 73 75 72 65 20 62 6f 75 6e 64   make sure bound
36f0: 61 72 79 20 76 61 6c 75 65 73 20 61 72 65 20 74  ary values are t
3700: 65 73 74 65 64 2e 20 20 46 6f 72 0a 2a 2a 20 62  ested.  For.** b
3710: 69 74 6d 61 73 6b 20 74 65 73 74 73 2c 20 74 65  itmask tests, te
3720: 73 74 63 61 73 65 28 29 20 63 61 6e 20 62 65 20  stcase() can be 
3730: 75 73 65 64 20 74 6f 20 6d 61 6b 65 20 73 75 72  used to make sur
3740: 65 20 65 61 63 68 20 62 69 74 0a 2a 2a 20 69 73  e each bit.** is
3750: 20 73 69 67 6e 69 66 69 63 61 6e 74 20 61 6e 64   significant and
3760: 20 75 73 65 64 20 61 74 20 6c 65 61 73 74 20 6f   used at least o
3770: 6e 63 65 2e 20 20 4f 6e 20 73 77 69 74 63 68 20  nce.  On switch 
3780: 73 74 61 74 65 6d 65 6e 74 73 0a 2a 2a 20 77 68  statements.** wh
3790: 65 72 65 20 6d 75 6c 74 69 70 6c 65 20 63 61 73  ere multiple cas
37a0: 65 73 20 67 6f 20 74 6f 20 74 68 65 20 73 61 6d  es go to the sam
37b0: 65 20 62 6c 6f 63 6b 20 6f 66 20 63 6f 64 65 2c  e block of code,
37c0: 20 74 65 73 74 63 61 73 65 28 29 0a 2a 2a 20 63   testcase().** c
37d0: 61 6e 20 69 6e 73 75 72 65 20 74 68 61 74 20 61  an insure that a
37e0: 6c 6c 20 63 61 73 65 73 20 61 72 65 20 65 76 61  ll cases are eva
37f0: 6c 75 61 74 65 64 2e 0a 2a 2a 0a 2a 2f 0a 23 69  luated..**.*/.#i
3800: 66 64 65 66 20 53 51 4c 49 54 45 5f 43 4f 56 45  fdef SQLITE_COVE
3810: 52 41 47 45 5f 54 45 53 54 0a 20 20 76 6f 69 64  RAGE_TEST.  void
3820: 20 73 71 6c 69 74 65 33 43 6f 76 65 72 61 67 65   sqlite3Coverage
3830: 28 69 6e 74 29 3b 0a 23 20 64 65 66 69 6e 65 20  (int);.# define 
3840: 74 65 73 74 63 61 73 65 28 58 29 20 20 69 66 28  testcase(X)  if(
3850: 20 58 20 29 7b 20 73 71 6c 69 74 65 33 43 6f 76   X ){ sqlite3Cov
3860: 65 72 61 67 65 28 5f 5f 4c 49 4e 45 5f 5f 29 3b  erage(__LINE__);
3870: 20 7d 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e   }.#else.# defin
3880: 65 20 74 65 73 74 63 61 73 65 28 58 29 0a 23 65  e testcase(X).#e
3890: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  ndif../*.** The 
38a0: 54 45 53 54 4f 4e 4c 59 20 6d 61 63 72 6f 20 69  TESTONLY macro i
38b0: 73 20 75 73 65 64 20 74 6f 20 65 6e 63 6c 6f 73  s used to enclos
38c0: 65 20 76 61 72 69 61 62 6c 65 20 64 65 63 6c 61  e variable decla
38d0: 72 61 74 69 6f 6e 73 20 6f 72 0a 2a 2a 20 6f 74  rations or.** ot
38e0: 68 65 72 20 62 69 74 73 20 6f 66 20 63 6f 64 65  her bits of code
38f0: 20 74 68 61 74 20 61 72 65 20 6e 65 65 64 65 64   that are needed
3900: 20 74 6f 20 73 75 70 70 6f 72 74 20 74 68 65 20   to support the 
3910: 61 72 67 75 6d 65 6e 74 73 0a 2a 2a 20 77 69 74  arguments.** wit
3920: 68 69 6e 20 74 65 73 74 63 61 73 65 28 29 20 61  hin testcase() a
3930: 6e 64 20 61 73 73 65 72 74 28 29 20 6d 61 63 72  nd assert() macr
3940: 6f 73 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69  os..*/.#if !defi
3950: 6e 65 64 28 4e 44 45 42 55 47 29 20 7c 7c 20 64  ned(NDEBUG) || d
3960: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 43 4f  efined(SQLITE_CO
3970: 56 45 52 41 47 45 5f 54 45 53 54 29 0a 23 20 64  VERAGE_TEST).# d
3980: 65 66 69 6e 65 20 54 45 53 54 4f 4e 4c 59 28 58  efine TESTONLY(X
3990: 29 20 20 58 0a 23 65 6c 73 65 0a 23 20 64 65 66  )  X.#else.# def
39a0: 69 6e 65 20 54 45 53 54 4f 4e 4c 59 28 58 29 0a  ine TESTONLY(X).
39b0: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 53 6f  #endif../*.** So
39c0: 6d 65 74 69 6d 65 73 20 77 65 20 6e 65 65 64 20  metimes we need 
39d0: 61 20 73 6d 61 6c 6c 20 61 6d 6f 75 6e 74 20 6f  a small amount o
39e0: 66 20 63 6f 64 65 20 73 75 63 68 20 61 73 20 61  f code such as a
39f0: 20 76 61 72 69 61 62 6c 65 20 69 6e 69 74 69 61   variable initia
3a00: 6c 69 7a 61 74 69 6f 6e 0a 2a 2a 20 74 6f 20 73  lization.** to s
3a10: 65 74 75 70 20 66 6f 72 20 61 20 6c 61 74 65 72  etup for a later
3a20: 20 61 73 73 65 72 74 28 29 20 73 74 61 74 65 6d   assert() statem
3a30: 65 6e 74 2e 20 20 57 65 20 64 6f 20 6e 6f 74 20  ent.  We do not 
3a40: 77 61 6e 74 20 74 68 69 73 20 63 6f 64 65 20 74  want this code t
3a50: 6f 0a 2a 2a 20 61 70 70 65 61 72 20 77 68 65 6e  o.** appear when
3a60: 20 61 73 73 65 72 74 28 29 20 69 73 20 64 69 73   assert() is dis
3a70: 61 62 6c 65 64 2e 20 20 54 68 65 20 66 6f 6c 6c  abled.  The foll
3a80: 6f 77 69 6e 67 20 6d 61 63 72 6f 20 69 73 20 74  owing macro is t
3a90: 68 65 72 65 66 6f 72 65 0a 2a 2a 20 75 73 65 64  herefore.** used
3aa0: 20 74 6f 20 63 6f 6e 74 61 69 6e 20 74 68 61 74   to contain that
3ab0: 20 73 65 74 75 70 20 63 6f 64 65 2e 20 20 54 68   setup code.  Th
3ac0: 65 20 22 56 56 41 22 20 61 63 72 6f 6e 79 6d 20  e "VVA" acronym 
3ad0: 73 74 61 6e 64 73 20 66 6f 72 0a 2a 2a 20 22 56  stands for.** "V
3ae0: 65 72 69 66 69 63 61 74 69 6f 6e 2c 20 56 61 6c  erification, Val
3af0: 69 64 61 74 69 6f 6e 2c 20 61 6e 64 20 41 63 63  idation, and Acc
3b00: 72 65 64 69 74 61 74 69 6f 6e 22 2e 20 20 49 6e  reditation".  In
3b10: 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68   other words, th
3b20: 65 0a 2a 2a 20 63 6f 64 65 20 77 69 74 68 69 6e  e.** code within
3b30: 20 56 56 41 5f 4f 4e 4c 59 28 29 20 77 69 6c 6c   VVA_ONLY() will
3b40: 20 6f 6e 6c 79 20 72 75 6e 20 64 75 72 69 6e 67   only run during
3b50: 20 76 65 72 69 66 69 63 61 74 69 6f 6e 20 70 72   verification pr
3b60: 6f 63 65 73 73 65 73 2e 0a 2a 2f 0a 23 69 66 6e  ocesses..*/.#ifn
3b70: 64 65 66 20 4e 44 45 42 55 47 0a 23 20 64 65 66  def NDEBUG.# def
3b80: 69 6e 65 20 56 56 41 5f 4f 4e 4c 59 28 58 29 20  ine VVA_ONLY(X) 
3b90: 20 58 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e   X.#else.# defin
3ba0: 65 20 56 56 41 5f 4f 4e 4c 59 28 58 29 0a 23 65  e VVA_ONLY(X).#e
3bb0: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  ndif../*.** The 
3bc0: 41 4c 57 41 59 53 20 61 6e 64 20 4e 45 56 45 52  ALWAYS and NEVER
3bd0: 20 6d 61 63 72 6f 73 20 73 75 72 72 6f 75 6e 64   macros surround
3be0: 20 62 6f 6f 6c 65 61 6e 20 65 78 70 72 65 73 73   boolean express
3bf0: 69 6f 6e 73 20 77 68 69 63 68 0a 2a 2a 20 61 72  ions which.** ar
3c00: 65 20 69 6e 74 65 6e 64 65 64 20 74 6f 20 61 6c  e intended to al
3c10: 77 61 79 73 20 62 65 20 74 72 75 65 20 6f 72 20  ways be true or 
3c20: 66 61 6c 73 65 2c 20 72 65 73 70 65 63 74 69 76  false, respectiv
3c30: 65 6c 79 2e 20 20 53 75 63 68 0a 2a 2a 20 65 78  ely.  Such.** ex
3c40: 70 72 65 73 73 69 6f 6e 73 20 63 6f 75 6c 64 20  pressions could 
3c50: 62 65 20 6f 6d 69 74 74 65 64 20 66 72 6f 6d 20  be omitted from 
3c60: 74 68 65 20 63 6f 64 65 20 63 6f 6d 70 6c 65 74  the code complet
3c70: 65 6c 79 2e 20 20 42 75 74 20 74 68 65 79 0a 2a  ely.  But they.*
3c80: 2a 20 61 72 65 20 69 6e 63 6c 75 64 65 64 20 69  * are included i
3c90: 6e 20 61 20 66 65 77 20 63 61 73 65 73 20 69 6e  n a few cases in
3ca0: 20 6f 72 64 65 72 20 74 6f 20 65 6e 68 61 6e 63   order to enhanc
3cb0: 65 20 74 68 65 20 72 65 73 69 6c 69 65 6e 63 65  e the resilience
3cc0: 0a 2a 2a 20 6f 66 20 53 51 4c 69 74 65 20 74 6f  .** of SQLite to
3cd0: 20 75 6e 65 78 70 65 63 74 65 64 20 62 65 68 61   unexpected beha
3ce0: 76 69 6f 72 20 2d 20 74 6f 20 6d 61 6b 65 20 74  vior - to make t
3cf0: 68 65 20 63 6f 64 65 20 22 73 65 6c 66 2d 68 65  he code "self-he
3d00: 61 6c 69 6e 67 22 0a 2a 2a 20 6f 72 20 22 64 75  aling".** or "du
3d10: 63 74 69 6c 65 22 20 72 61 74 68 65 72 20 74 68  ctile" rather th
3d20: 61 6e 20 62 65 69 6e 67 20 22 62 72 69 74 74 6c  an being "brittl
3d30: 65 22 20 61 6e 64 20 63 72 61 73 68 69 6e 67 20  e" and crashing 
3d40: 61 74 20 74 68 65 20 66 69 72 73 74 0a 2a 2a 20  at the first.** 
3d50: 68 69 6e 74 20 6f 66 20 75 6e 70 6c 61 6e 6e 65  hint of unplanne
3d60: 64 20 62 65 68 61 76 69 6f 72 2e 0a 2a 2a 0a 2a  d behavior..**.*
3d70: 2a 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73  * In other words
3d80: 2c 20 41 4c 57 41 59 53 20 61 6e 64 20 4e 45 56  , ALWAYS and NEV
3d90: 45 52 20 61 72 65 20 61 64 64 65 64 20 66 6f 72  ER are added for
3da0: 20 64 65 66 65 6e 73 69 76 65 20 63 6f 64 65 2e   defensive code.
3db0: 0a 2a 2a 0a 2a 2a 20 57 68 65 6e 20 64 6f 69 6e  .**.** When doin
3dc0: 67 20 63 6f 76 65 72 61 67 65 20 74 65 73 74 69  g coverage testi
3dd0: 6e 67 20 41 4c 57 41 59 53 20 61 6e 64 20 4e 45  ng ALWAYS and NE
3de0: 56 45 52 20 61 72 65 20 68 61 72 64 2d 63 6f 64  VER are hard-cod
3df0: 65 64 20 74 6f 0a 2a 2a 20 62 65 20 74 72 75 65  ed to.** be true
3e00: 20 61 6e 64 20 66 61 6c 73 65 20 73 6f 20 74 68   and false so th
3e10: 61 74 20 74 68 65 20 75 6e 72 65 61 63 68 61 62  at the unreachab
3e20: 6c 65 20 63 6f 64 65 20 74 68 65 79 20 73 70 65  le code they spe
3e30: 63 69 66 79 20 77 69 6c 6c 0a 2a 2a 20 6e 6f 74  cify will.** not
3e40: 20 62 65 20 63 6f 75 6e 74 65 64 20 61 73 20 75   be counted as u
3e50: 6e 74 65 73 74 65 64 20 63 6f 64 65 2e 0a 2a 2f  ntested code..*/
3e60: 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c  .#if defined(SQL
3e70: 49 54 45 5f 43 4f 56 45 52 41 47 45 5f 54 45 53  ITE_COVERAGE_TES
3e80: 54 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 53 51  T) || defined(SQ
3e90: 4c 49 54 45 5f 4d 55 54 41 54 49 4f 4e 5f 54 45  LITE_MUTATION_TE
3ea0: 53 54 29 0a 23 20 64 65 66 69 6e 65 20 41 4c 57  ST).# define ALW
3eb0: 41 59 53 28 58 29 20 20 20 20 20 20 28 31 29 0a  AYS(X)      (1).
3ec0: 23 20 64 65 66 69 6e 65 20 4e 45 56 45 52 28 58  # define NEVER(X
3ed0: 29 20 20 20 20 20 20 20 28 30 29 0a 23 65 6c 69  )       (0).#eli
3ee0: 66 20 21 64 65 66 69 6e 65 64 28 4e 44 45 42 55  f !defined(NDEBU
3ef0: 47 29 0a 23 20 64 65 66 69 6e 65 20 41 4c 57 41  G).# define ALWA
3f00: 59 53 28 58 29 20 20 20 20 20 20 28 28 58 29 3f  YS(X)      ((X)?
3f10: 31 3a 28 61 73 73 65 72 74 28 30 29 2c 30 29 29  1:(assert(0),0))
3f20: 0a 23 20 64 65 66 69 6e 65 20 4e 45 56 45 52 28  .# define NEVER(
3f30: 58 29 20 20 20 20 20 20 20 28 28 58 29 3f 28 61  X)       ((X)?(a
3f40: 73 73 65 72 74 28 30 29 2c 31 29 3a 30 29 0a 23  ssert(0),1):0).#
3f50: 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 41 4c  else.# define AL
3f60: 57 41 59 53 28 58 29 20 20 20 20 20 20 28 58 29  WAYS(X)      (X)
3f70: 0a 23 20 64 65 66 69 6e 65 20 4e 45 56 45 52 28  .# define NEVER(
3f80: 58 29 20 20 20 20 20 20 20 28 58 29 0a 23 65 6e  X)       (X).#en
3f90: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 53 6f 6d 65 20  dif../*.** Some 
3fa0: 63 6f 6e 64 69 74 69 6f 6e 61 6c 73 20 61 72 65  conditionals are
3fb0: 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73 20 6f   optimizations o
3fc0: 6e 6c 79 2e 20 20 49 6e 20 6f 74 68 65 72 20 77  nly.  In other w
3fd0: 6f 72 64 73 2c 20 69 66 20 74 68 65 0a 2a 2a 20  ords, if the.** 
3fe0: 63 6f 6e 64 69 74 69 6f 6e 61 6c 73 20 61 72 65  conditionals are
3ff0: 20 72 65 70 6c 61 63 65 64 20 77 69 74 68 20 61   replaced with a
4000: 20 63 6f 6e 73 74 61 6e 74 20 31 20 28 74 72 75   constant 1 (tru
4010: 65 29 20 6f 72 20 30 20 28 66 61 6c 73 65 29 20  e) or 0 (false) 
4020: 74 68 65 6e 0a 2a 2a 20 74 68 65 20 63 6f 72 72  then.** the corr
4030: 65 63 74 20 61 6e 73 77 65 72 20 69 73 20 73 74  ect answer is st
4040: 69 6c 6c 20 6f 62 74 61 69 6e 65 64 2c 20 74 68  ill obtained, th
4050: 6f 75 67 68 20 70 65 72 68 61 70 73 20 6e 6f 74  ough perhaps not
4060: 20 61 73 20 71 75 69 63 6b 6c 79 2e 0a 2a 2a 0a   as quickly..**.
4070: 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  ** The following
4080: 20 6d 61 63 72 6f 73 20 6d 61 72 6b 20 74 68 65   macros mark the
4090: 73 65 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73  se optimizations
40a0: 20 63 6f 6e 64 69 74 69 6f 6e 61 6c 73 2e 0a 2a   conditionals..*
40b0: 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51  /.#if defined(SQ
40c0: 4c 49 54 45 5f 4d 55 54 41 54 49 4f 4e 5f 54 45  LITE_MUTATION_TE
40d0: 53 54 29 0a 23 20 64 65 66 69 6e 65 20 4f 4b 5f  ST).# define OK_
40e0: 49 46 5f 41 4c 57 41 59 53 5f 54 52 55 45 28 58  IF_ALWAYS_TRUE(X
40f0: 29 20 20 28 31 29 0a 23 20 64 65 66 69 6e 65 20  )  (1).# define 
4100: 4f 4b 5f 49 46 5f 41 4c 57 41 59 53 5f 46 41 4c  OK_IF_ALWAYS_FAL
4110: 53 45 28 58 29 20 28 30 29 0a 23 65 6c 73 65 0a  SE(X) (0).#else.
4120: 23 20 64 65 66 69 6e 65 20 4f 4b 5f 49 46 5f 41  # define OK_IF_A
4130: 4c 57 41 59 53 5f 54 52 55 45 28 58 29 20 20 28  LWAYS_TRUE(X)  (
4140: 58 29 0a 23 20 64 65 66 69 6e 65 20 4f 4b 5f 49  X).# define OK_I
4150: 46 5f 41 4c 57 41 59 53 5f 46 41 4c 53 45 28 58  F_ALWAYS_FALSE(X
4160: 29 20 28 58 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a  ) (X).#endif../*
4170: 0a 2a 2a 20 53 6f 6d 65 20 6d 61 6c 6c 6f 63 20  .** Some malloc 
4180: 66 61 69 6c 75 72 65 73 20 61 72 65 20 6f 6e 6c  failures are onl
4190: 79 20 70 6f 73 73 69 62 6c 65 20 69 66 20 53 51  y possible if SQ
41a0: 4c 49 54 45 5f 54 45 53 54 5f 52 45 41 4c 4c 4f  LITE_TEST_REALLO
41b0: 43 5f 53 54 52 45 53 53 20 69 73 0a 2a 2a 20 64  C_STRESS is.** d
41c0: 65 66 69 6e 65 64 2e 20 20 57 65 20 6e 65 65 64  efined.  We need
41d0: 20 74 6f 20 64 65 66 65 6e 64 20 61 67 61 69 6e   to defend again
41e0: 73 74 20 74 68 6f 73 65 20 66 61 69 6c 75 72 65  st those failure
41f0: 73 20 77 68 65 6e 20 74 65 73 74 69 6e 67 20 77  s when testing w
4200: 69 74 68 0a 2a 2a 20 53 51 4c 49 54 45 5f 54 45  ith.** SQLITE_TE
4210: 53 54 5f 52 45 41 4c 4c 4f 43 5f 53 54 52 45 53  ST_REALLOC_STRES
4220: 53 2c 20 62 75 74 20 77 65 20 64 6f 6e 27 74 20  S, but we don't 
4230: 77 61 6e 74 20 74 68 65 20 75 6e 72 65 61 63 68  want the unreach
4240: 61 62 6c 65 20 62 72 61 6e 63 68 65 73 0a 2a 2a  able branches.**
4250: 20 64 75 72 69 6e 67 20 61 20 6e 6f 72 6d 61 6c   during a normal
4260: 20 62 75 69 6c 64 2e 20 20 54 68 65 20 66 6f 6c   build.  The fol
4270: 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 20 63 61 6e  lowing macro can
4280: 20 62 65 20 75 73 65 64 20 74 6f 20 64 69 73 61   be used to disa
4290: 62 6c 65 20 74 65 73 74 73 0a 2a 2a 20 74 68 61  ble tests.** tha
42a0: 74 20 61 72 65 20 61 6c 77 61 79 73 20 66 61 6c  t are always fal
42b0: 73 65 20 65 78 63 65 70 74 20 77 68 65 6e 20 53  se except when S
42c0: 51 4c 49 54 45 5f 54 45 53 54 5f 52 45 41 4c 4c  QLITE_TEST_REALL
42d0: 4f 43 5f 53 54 52 45 53 53 20 69 73 20 73 65 74  OC_STRESS is set
42e0: 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64  ..*/.#if defined
42f0: 28 53 51 4c 49 54 45 5f 54 45 53 54 5f 52 45 41  (SQLITE_TEST_REA
4300: 4c 4c 4f 43 5f 53 54 52 45 53 53 29 0a 23 20 64  LLOC_STRESS).# d
4310: 65 66 69 6e 65 20 4f 4e 4c 59 5f 49 46 5f 52 45  efine ONLY_IF_RE
4320: 41 4c 4c 4f 43 5f 53 54 52 45 53 53 28 58 29 20  ALLOC_STRESS(X) 
4330: 20 28 58 29 0a 23 65 6c 69 66 20 21 64 65 66 69   (X).#elif !defi
4340: 6e 65 64 28 4e 44 45 42 55 47 29 0a 23 20 64 65  ned(NDEBUG).# de
4350: 66 69 6e 65 20 4f 4e 4c 59 5f 49 46 5f 52 45 41  fine ONLY_IF_REA
4360: 4c 4c 4f 43 5f 53 54 52 45 53 53 28 58 29 20 20  LLOC_STRESS(X)  
4370: 28 28 58 29 3f 28 61 73 73 65 72 74 28 30 29 2c  ((X)?(assert(0),
4380: 31 29 3a 30 29 0a 23 65 6c 73 65 0a 23 20 64 65  1):0).#else.# de
4390: 66 69 6e 65 20 4f 4e 4c 59 5f 49 46 5f 52 45 41  fine ONLY_IF_REA
43a0: 4c 4c 4f 43 5f 53 54 52 45 53 53 28 58 29 20 20  LLOC_STRESS(X)  
43b0: 28 30 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  (0).#endif../*.*
43c0: 2a 20 44 65 63 6c 61 72 61 74 69 6f 6e 73 20 75  * Declarations u
43d0: 73 65 64 20 66 6f 72 20 74 72 61 63 69 6e 67 20  sed for tracing 
43e0: 74 68 65 20 6f 70 65 72 61 74 69 6e 67 20 73 79  the operating sy
43f0: 73 74 65 6d 20 69 6e 74 65 72 66 61 63 65 73 2e  stem interfaces.
4400: 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28  .*/.#if defined(
4410: 53 51 4c 49 54 45 5f 46 4f 52 43 45 5f 4f 53 5f  SQLITE_FORCE_OS_
4420: 54 52 41 43 45 29 20 7c 7c 20 64 65 66 69 6e 65  TRACE) || define
4430: 64 28 53 51 4c 49 54 45 5f 54 45 53 54 29 20 7c  d(SQLITE_TEST) |
4440: 7c 20 5c 0a 20 20 20 20 28 64 65 66 69 6e 65 64  | \.    (defined
4450: 28 53 51 4c 49 54 45 5f 44 45 42 55 47 29 20 26  (SQLITE_DEBUG) &
4460: 26 20 53 51 4c 49 54 45 5f 4f 53 5f 57 49 4e 29  & SQLITE_OS_WIN)
4470: 0a 20 20 65 78 74 65 72 6e 20 69 6e 74 20 73 71  .  extern int sq
4480: 6c 69 74 65 33 4f 53 54 72 61 63 65 3b 0a 23 20  lite3OSTrace;.# 
4490: 64 65 66 69 6e 65 20 4f 53 54 52 41 43 45 28 58  define OSTRACE(X
44a0: 29 20 20 20 20 20 20 20 20 20 20 69 66 28 20 73  )          if( s
44b0: 71 6c 69 74 65 33 4f 53 54 72 61 63 65 20 29 20  qlite3OSTrace ) 
44c0: 73 71 6c 69 74 65 33 44 65 62 75 67 50 72 69 6e  sqlite3DebugPrin
44d0: 74 66 20 58 0a 23 20 64 65 66 69 6e 65 20 53 51  tf X.# define SQ
44e0: 4c 49 54 45 5f 48 41 56 45 5f 4f 53 5f 54 52 41  LITE_HAVE_OS_TRA
44f0: 43 45 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e  CE.#else.# defin
4500: 65 20 4f 53 54 52 41 43 45 28 58 29 0a 23 20 75  e OSTRACE(X).# u
4510: 6e 64 65 66 20 20 53 51 4c 49 54 45 5f 48 41 56  ndef  SQLITE_HAV
4520: 45 5f 4f 53 5f 54 52 41 43 45 0a 23 65 6e 64 69  E_OS_TRACE.#endi
4530: 66 0a 0a 2f 2a 0a 2a 2a 20 49 73 20 74 68 65 20  f../*.** Is the 
4540: 73 71 6c 69 74 65 33 45 72 72 4e 61 6d 65 28 29  sqlite3ErrName()
4550: 20 66 75 6e 63 74 69 6f 6e 20 6e 65 65 64 65 64   function needed
4560: 20 69 6e 20 74 68 65 20 62 75 69 6c 64 3f 20 20   in the build?  
4570: 43 75 72 72 65 6e 74 6c 79 2c 0a 2a 2a 20 69 74  Currently,.** it
4580: 20 69 73 20 6e 65 65 64 65 64 20 62 79 20 22 6d   is needed by "m
4590: 75 74 65 78 5f 77 33 32 2e 63 22 20 28 77 68 65  utex_w32.c" (whe
45a0: 6e 20 64 65 62 75 67 67 69 6e 67 29 2c 20 22 6f  n debugging), "o
45b0: 73 5f 77 69 6e 2e 63 22 20 28 77 68 65 6e 0a 2a  s_win.c" (when.*
45c0: 2a 20 4f 53 54 52 41 43 45 20 69 73 20 65 6e 61  * OSTRACE is ena
45d0: 62 6c 65 64 29 2c 20 61 6e 64 20 62 79 20 73 65  bled), and by se
45e0: 76 65 72 61 6c 20 22 74 65 73 74 2a 2e 63 22 20  veral "test*.c" 
45f0: 66 69 6c 65 73 20 28 77 68 69 63 68 20 61 72 65  files (which are
4600: 0a 2a 2a 20 63 6f 6d 70 69 6c 65 64 20 75 73 69  .** compiled usi
4610: 6e 67 20 53 51 4c 49 54 45 5f 54 45 53 54 29 2e  ng SQLITE_TEST).
4620: 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28  .*/.#if defined(
4630: 53 51 4c 49 54 45 5f 48 41 56 45 5f 4f 53 5f 54  SQLITE_HAVE_OS_T
4640: 52 41 43 45 29 20 7c 7c 20 64 65 66 69 6e 65 64  RACE) || defined
4650: 28 53 51 4c 49 54 45 5f 54 45 53 54 29 20 7c 7c  (SQLITE_TEST) ||
4660: 20 5c 0a 20 20 20 20 28 64 65 66 69 6e 65 64 28   \.    (defined(
4670: 53 51 4c 49 54 45 5f 44 45 42 55 47 29 20 26 26  SQLITE_DEBUG) &&
4680: 20 53 51 4c 49 54 45 5f 4f 53 5f 57 49 4e 29 0a   SQLITE_OS_WIN).
4690: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
46a0: 4e 45 45 44 5f 45 52 52 5f 4e 41 4d 45 0a 23 65  NEED_ERR_NAME.#e
46b0: 6c 73 65 0a 23 20 75 6e 64 65 66 20 20 53 51 4c  lse.# undef  SQL
46c0: 49 54 45 5f 4e 45 45 44 5f 45 52 52 5f 4e 41 4d  ITE_NEED_ERR_NAM
46d0: 45 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  E.#endif../*.** 
46e0: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 45 58  SQLITE_ENABLE_EX
46f0: 50 4c 41 49 4e 5f 43 4f 4d 4d 45 4e 54 53 20 69  PLAIN_COMMENTS i
4700: 73 20 69 6e 63 6f 6d 70 61 74 69 62 6c 65 20 77  s incompatible w
4710: 69 74 68 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ith SQLITE_OMIT_
4720: 45 58 50 4c 41 49 4e 0a 2a 2f 0a 23 69 66 64 65  EXPLAIN.*/.#ifde
4730: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 45 58  f SQLITE_OMIT_EX
4740: 50 4c 41 49 4e 0a 23 20 75 6e 64 65 66 20 53 51  PLAIN.# undef SQ
4750: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 45 58 50 4c  LITE_ENABLE_EXPL
4760: 41 49 4e 5f 43 4f 4d 4d 45 4e 54 53 0a 23 65 6e  AIN_COMMENTS.#en
4770: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72  dif../*.** Retur
4780: 6e 20 74 72 75 65 20 28 6e 6f 6e 2d 7a 65 72 6f  n true (non-zero
4790: 29 20 69 66 20 74 68 65 20 69 6e 70 75 74 20 69  ) if the input i
47a0: 73 20 61 6e 20 69 6e 74 65 67 65 72 20 74 68 61  s an integer tha
47b0: 74 20 69 73 20 74 6f 6f 20 6c 61 72 67 65 0a 2a  t is too large.*
47c0: 2a 20 74 6f 20 66 69 74 20 69 6e 20 33 32 2d 62  * to fit in 32-b
47d0: 69 74 73 2e 20 20 54 68 69 73 20 6d 61 63 72 6f  its.  This macro
47e0: 20 69 73 20 75 73 65 64 20 69 6e 73 69 64 65 20   is used inside 
47f0: 6f 66 20 76 61 72 69 6f 75 73 20 74 65 73 74 63  of various testc
4800: 61 73 65 28 29 0a 2a 2a 20 6d 61 63 72 6f 73 20  ase().** macros 
4810: 74 6f 20 76 65 72 69 66 79 20 74 68 61 74 20 77  to verify that w
4820: 65 20 68 61 76 65 20 74 65 73 74 65 64 20 53 51  e have tested SQ
4830: 4c 69 74 65 20 66 6f 72 20 6c 61 72 67 65 2d 66  Lite for large-f
4840: 69 6c 65 20 73 75 70 70 6f 72 74 2e 0a 2a 2f 0a  ile support..*/.
4850: 23 64 65 66 69 6e 65 20 49 53 5f 42 49 47 5f 49  #define IS_BIG_I
4860: 4e 54 28 58 29 20 20 28 28 28 58 29 26 7e 28 69  NT(X)  (((X)&~(i
4870: 36 34 29 30 78 66 66 66 66 66 66 66 66 29 21 3d  64)0xffffffff)!=
4880: 30 29 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6d 61  0)../*.** The ma
4890: 63 72 6f 20 75 6e 6c 69 6b 65 6c 79 28 29 20 69  cro unlikely() i
48a0: 73 20 61 20 68 69 6e 74 20 74 68 61 74 20 73 75  s a hint that su
48b0: 72 72 6f 75 6e 64 73 20 61 20 62 6f 6f 6c 65 61  rrounds a boolea
48c0: 6e 0a 2a 2a 20 65 78 70 72 65 73 73 69 6f 6e 20  n.** expression 
48d0: 74 68 61 74 20 69 73 20 75 73 75 61 6c 6c 79 20  that is usually 
48e0: 66 61 6c 73 65 2e 20 20 4d 61 63 72 6f 20 6c 69  false.  Macro li
48f0: 6b 65 6c 79 28 29 20 73 75 72 72 6f 75 6e 64 73  kely() surrounds
4900: 0a 2a 2a 20 61 20 62 6f 6f 6c 65 61 6e 20 65 78  .** a boolean ex
4910: 70 72 65 73 73 69 6f 6e 20 74 68 61 74 20 69 73  pression that is
4920: 20 75 73 75 61 6c 6c 79 20 74 72 75 65 2e 20 20   usually true.  
4930: 54 68 65 73 65 20 68 69 6e 74 73 20 63 6f 75 6c  These hints coul
4940: 64 2c 0a 2a 2a 20 69 6e 20 74 68 65 6f 72 79 2c  d,.** in theory,
4950: 20 62 65 20 75 73 65 64 20 62 79 20 74 68 65 20   be used by the 
4960: 63 6f 6d 70 69 6c 65 72 20 74 6f 20 67 65 6e 65  compiler to gene
4970: 72 61 74 65 20 62 65 74 74 65 72 20 63 6f 64 65  rate better code
4980: 2c 20 62 75 74 0a 2a 2a 20 63 75 72 72 65 6e 74  , but.** current
4990: 6c 79 20 74 68 65 79 20 61 72 65 20 6a 75 73 74  ly they are just
49a0: 20 63 6f 6d 6d 65 6e 74 73 20 66 6f 72 20 68 75   comments for hu
49b0: 6d 61 6e 20 72 65 61 64 65 72 73 2e 0a 2a 2f 0a  man readers..*/.
49c0: 23 64 65 66 69 6e 65 20 6c 69 6b 65 6c 79 28 58  #define likely(X
49d0: 29 20 20 20 20 28 58 29 0a 23 64 65 66 69 6e 65  )    (X).#define
49e0: 20 75 6e 6c 69 6b 65 6c 79 28 58 29 20 20 28 58   unlikely(X)  (X
49f0: 29 0a 0a 23 69 6e 63 6c 75 64 65 20 22 68 61 73  )..#include "has
4a00: 68 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20 22 70  h.h".#include "p
4a10: 61 72 73 65 2e 68 22 0a 23 69 6e 63 6c 75 64 65  arse.h".#include
4a20: 20 3c 73 74 64 69 6f 2e 68 3e 0a 23 69 6e 63 6c   <stdio.h>.#incl
4a30: 75 64 65 20 3c 73 74 64 6c 69 62 2e 68 3e 0a 23  ude <stdlib.h>.#
4a40: 69 6e 63 6c 75 64 65 20 3c 73 74 72 69 6e 67 2e  include <string.
4a50: 68 3e 0a 23 69 6e 63 6c 75 64 65 20 3c 61 73 73  h>.#include <ass
4a60: 65 72 74 2e 68 3e 0a 23 69 6e 63 6c 75 64 65 20  ert.h>.#include 
4a70: 3c 73 74 64 64 65 66 2e 68 3e 0a 0a 2f 2a 0a 2a  <stddef.h>../*.*
4a80: 2a 20 55 73 65 20 61 20 6d 61 63 72 6f 20 74 6f  * Use a macro to
4a90: 20 72 65 70 6c 61 63 65 20 6d 65 6d 63 70 79 28   replace memcpy(
4aa0: 29 20 69 66 20 63 6f 6d 70 69 6c 65 64 20 77 69  ) if compiled wi
4ab0: 74 68 20 53 51 4c 49 54 45 5f 49 4e 4c 49 4e 45  th SQLITE_INLINE
4ac0: 5f 4d 45 4d 43 50 59 2e 0a 2a 2a 20 54 68 69 73  _MEMCPY..** This
4ad0: 20 61 6c 6c 6f 77 73 20 62 65 74 74 65 72 20 6d   allows better m
4ae0: 65 61 73 75 72 65 6d 65 6e 74 73 20 6f 66 20 77  easurements of w
4af0: 68 65 72 65 20 6d 65 6d 63 70 79 28 29 20 69 73  here memcpy() is
4b00: 20 75 73 65 64 20 77 68 65 6e 20 72 75 6e 6e 69   used when runni
4b10: 6e 67 0a 2a 2a 20 63 61 63 68 65 67 72 69 6e 64  ng.** cachegrind
4b20: 2e 20 20 42 75 74 20 74 68 69 73 20 6d 61 63 72  .  But this macr
4b30: 6f 20 76 65 72 73 69 6f 6e 20 6f 66 20 6d 65 6d  o version of mem
4b40: 63 70 79 28 29 20 69 73 20 76 65 72 79 20 73 6c  cpy() is very sl
4b50: 6f 77 20 73 6f 20 69 74 0a 2a 2a 20 73 68 6f 75  ow so it.** shou
4b60: 6c 64 20 6e 6f 74 20 62 65 20 75 73 65 64 20 69  ld not be used i
4b70: 6e 20 70 72 6f 64 75 63 74 69 6f 6e 2e 20 20 54  n production.  T
4b80: 68 69 73 20 69 73 20 61 20 70 65 72 66 6f 72 6d  his is a perform
4b90: 61 6e 63 65 20 6d 65 61 73 75 72 65 6d 65 6e 74  ance measurement
4ba0: 0a 2a 2a 20 68 61 63 6b 20 6f 6e 6c 79 2e 0a 2a  .** hack only..*
4bb0: 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
4bc0: 49 4e 4c 49 4e 45 5f 4d 45 4d 43 50 59 0a 23 20  INLINE_MEMCPY.# 
4bd0: 64 65 66 69 6e 65 20 6d 65 6d 63 70 79 28 44 2c  define memcpy(D,
4be0: 53 2c 4e 29 20 7b 63 68 61 72 2a 78 78 64 3d 28  S,N) {char*xxd=(
4bf0: 63 68 61 72 2a 29 28 44 29 3b 63 6f 6e 73 74 20  char*)(D);const 
4c00: 63 68 61 72 2a 78 78 73 3d 28 63 6f 6e 73 74 20  char*xxs=(const 
4c10: 63 68 61 72 2a 29 28 53 29 3b 5c 0a 20 20 20 20  char*)(S);\.    
4c20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4c30: 20 20 20 20 69 6e 74 20 78 78 6e 3d 28 4e 29 3b      int xxn=(N);
4c40: 77 68 69 6c 65 28 78 78 6e 2d 2d 3e 30 29 2a 28  while(xxn-->0)*(
4c50: 78 78 64 2b 2b 29 3d 2a 28 78 78 73 2b 2b 29 3b  xxd++)=*(xxs++);
4c60: 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  }.#endif../*.** 
4c70: 49 66 20 63 6f 6d 70 69 6c 69 6e 67 20 66 6f 72  If compiling for
4c80: 20 61 20 70 72 6f 63 65 73 73 6f 72 20 74 68 61   a processor tha
4c90: 74 20 6c 61 63 6b 73 20 66 6c 6f 61 74 69 6e 67  t lacks floating
4ca0: 20 70 6f 69 6e 74 20 73 75 70 70 6f 72 74 2c 0a   point support,.
4cb0: 2a 2a 20 73 75 62 73 74 69 74 75 74 65 20 69 6e  ** substitute in
4cc0: 74 65 67 65 72 20 66 6f 72 20 66 6c 6f 61 74 69  teger for floati
4cd0: 6e 67 2d 70 6f 69 6e 74 0a 2a 2f 0a 23 69 66 64  ng-point.*/.#ifd
4ce0: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46  ef SQLITE_OMIT_F
4cf0: 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 0a 23 20  LOATING_POINT.# 
4d00: 64 65 66 69 6e 65 20 64 6f 75 62 6c 65 20 73 71  define double sq
4d10: 6c 69 74 65 5f 69 6e 74 36 34 0a 23 20 64 65 66  lite_int64.# def
4d20: 69 6e 65 20 66 6c 6f 61 74 20 73 71 6c 69 74 65  ine float sqlite
4d30: 5f 69 6e 74 36 34 0a 23 20 64 65 66 69 6e 65 20  _int64.# define 
4d40: 4c 4f 4e 47 44 4f 55 42 4c 45 5f 54 59 50 45 20  LONGDOUBLE_TYPE 
4d50: 73 71 6c 69 74 65 5f 69 6e 74 36 34 0a 23 20 69  sqlite_int64.# i
4d60: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 42 49 47  fndef SQLITE_BIG
4d70: 5f 44 42 4c 0a 23 20 20 20 64 65 66 69 6e 65 20  _DBL.#   define 
4d80: 53 51 4c 49 54 45 5f 42 49 47 5f 44 42 4c 20 28  SQLITE_BIG_DBL (
4d90: 28 28 73 71 6c 69 74 65 33 5f 69 6e 74 36 34 29  ((sqlite3_int64)
4da0: 31 29 3c 3c 35 30 29 0a 23 20 65 6e 64 69 66 0a  1)<<50).# endif.
4db0: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
4dc0: 4f 4d 49 54 5f 44 41 54 45 54 49 4d 45 5f 46 55  OMIT_DATETIME_FU
4dd0: 4e 43 53 20 31 0a 23 20 64 65 66 69 6e 65 20 53  NCS 1.# define S
4de0: 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 41 43 45  QLITE_OMIT_TRACE
4df0: 20 31 0a 23 20 75 6e 64 65 66 20 53 51 4c 49 54   1.# undef SQLIT
4e00: 45 5f 4d 49 58 45 44 5f 45 4e 44 49 41 4e 5f 36  E_MIXED_ENDIAN_6
4e10: 34 42 49 54 5f 46 4c 4f 41 54 0a 23 20 75 6e 64  4BIT_FLOAT.# und
4e20: 65 66 20 53 51 4c 49 54 45 5f 48 41 56 45 5f 49  ef SQLITE_HAVE_I
4e30: 53 4e 41 4e 0a 23 65 6e 64 69 66 0a 23 69 66 6e  SNAN.#endif.#ifn
4e40: 64 65 66 20 53 51 4c 49 54 45 5f 42 49 47 5f 44  def SQLITE_BIG_D
4e50: 42 4c 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  BL.# define SQLI
4e60: 54 45 5f 42 49 47 5f 44 42 4c 20 28 31 65 39 39  TE_BIG_DBL (1e99
4e70: 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  ).#endif../*.** 
4e80: 4f 4d 49 54 5f 54 45 4d 50 44 42 20 69 73 20 73  OMIT_TEMPDB is s
4e90: 65 74 20 74 6f 20 31 20 69 66 20 53 51 4c 49 54  et to 1 if SQLIT
4ea0: 45 5f 4f 4d 49 54 5f 54 45 4d 50 44 42 20 69 73  E_OMIT_TEMPDB is
4eb0: 20 64 65 66 69 6e 65 64 2c 20 6f 72 20 30 0a 2a   defined, or 0.*
4ec0: 2a 20 61 66 74 65 72 77 61 72 64 2e 20 48 61 76  * afterward. Hav
4ed0: 69 6e 67 20 74 68 69 73 20 6d 61 63 72 6f 20 61  ing this macro a
4ee0: 6c 6c 6f 77 73 20 75 73 20 74 6f 20 63 61 75 73  llows us to caus
4ef0: 65 20 74 68 65 20 43 20 63 6f 6d 70 69 6c 65 72  e the C compiler
4f00: 0a 2a 2a 20 74 6f 20 6f 6d 69 74 20 63 6f 64 65  .** to omit code
4f10: 20 75 73 65 64 20 62 79 20 54 45 4d 50 20 74 61   used by TEMP ta
4f20: 62 6c 65 73 20 77 69 74 68 6f 75 74 20 6d 65 73  bles without mes
4f30: 73 79 20 23 69 66 6e 64 65 66 20 73 74 61 74 65  sy #ifndef state
4f40: 6d 65 6e 74 73 2e 0a 2a 2f 0a 23 69 66 64 65 66  ments..*/.#ifdef
4f50: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 45 4d   SQLITE_OMIT_TEM
4f60: 50 44 42 0a 23 64 65 66 69 6e 65 20 4f 4d 49 54  PDB.#define OMIT
4f70: 5f 54 45 4d 50 44 42 20 31 0a 23 65 6c 73 65 0a  _TEMPDB 1.#else.
4f80: 23 64 65 66 69 6e 65 20 4f 4d 49 54 5f 54 45 4d  #define OMIT_TEM
4f90: 50 44 42 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a  PDB 0.#endif../*
4fa0: 0a 2a 2a 20 54 68 65 20 22 66 69 6c 65 20 66 6f  .** The "file fo
4fb0: 72 6d 61 74 22 20 6e 75 6d 62 65 72 20 69 73 20  rmat" number is 
4fc0: 61 6e 20 69 6e 74 65 67 65 72 20 74 68 61 74 20  an integer that 
4fd0: 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 77  is incremented w
4fe0: 68 65 6e 65 76 65 72 0a 2a 2a 20 74 68 65 20 56  henever.** the V
4ff0: 44 42 45 2d 6c 65 76 65 6c 20 66 69 6c 65 20 66  DBE-level file f
5000: 6f 72 6d 61 74 20 63 68 61 6e 67 65 73 2e 20 20  ormat changes.  
5010: 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61  The following ma
5020: 63 72 6f 73 20 64 65 66 69 6e 65 20 74 68 65 0a  cros define the.
5030: 2a 2a 20 74 68 65 20 64 65 66 61 75 6c 74 20 66  ** the default f
5040: 69 6c 65 20 66 6f 72 6d 61 74 20 66 6f 72 20 6e  ile format for n
5050: 65 77 20 64 61 74 61 62 61 73 65 73 20 61 6e 64  ew databases and
5060: 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 66 69 6c   the maximum fil
5070: 65 20 66 6f 72 6d 61 74 0a 2a 2a 20 74 68 61 74  e format.** that
5080: 20 74 68 65 20 6c 69 62 72 61 72 79 20 63 61 6e   the library can
5090: 20 72 65 61 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e   read..*/.#defin
50a0: 65 20 53 51 4c 49 54 45 5f 4d 41 58 5f 46 49 4c  e SQLITE_MAX_FIL
50b0: 45 5f 46 4f 52 4d 41 54 20 34 0a 23 69 66 6e 64  E_FORMAT 4.#ifnd
50c0: 65 66 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c  ef SQLITE_DEFAUL
50d0: 54 5f 46 49 4c 45 5f 46 4f 52 4d 41 54 0a 23 20  T_FILE_FORMAT.# 
50e0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 45  define SQLITE_DE
50f0: 46 41 55 4c 54 5f 46 49 4c 45 5f 46 4f 52 4d 41  FAULT_FILE_FORMA
5100: 54 20 34 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  T 4.#endif../*.*
5110: 2a 20 44 65 74 65 72 6d 69 6e 65 20 77 68 65 74  * Determine whet
5120: 68 65 72 20 74 72 69 67 67 65 72 73 20 61 72 65  her triggers are
5130: 20 72 65 63 75 72 73 69 76 65 20 62 79 20 64 65   recursive by de
5140: 66 61 75 6c 74 2e 20 20 54 68 69 73 20 63 61 6e  fault.  This can
5150: 20 62 65 0a 2a 2a 20 63 68 61 6e 67 65 64 20 61   be.** changed a
5160: 74 20 72 75 6e 2d 74 69 6d 65 20 75 73 69 6e 67  t run-time using
5170: 20 61 20 70 72 61 67 6d 61 2e 0a 2a 2f 0a 23 69   a pragma..*/.#i
5180: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 44 45 46  fndef SQLITE_DEF
5190: 41 55 4c 54 5f 52 45 43 55 52 53 49 56 45 5f 54  AULT_RECURSIVE_T
51a0: 52 49 47 47 45 52 53 0a 23 20 64 65 66 69 6e 65  RIGGERS.# define
51b0: 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f   SQLITE_DEFAULT_
51c0: 52 45 43 55 52 53 49 56 45 5f 54 52 49 47 47 45  RECURSIVE_TRIGGE
51d0: 52 53 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  RS 0.#endif../*.
51e0: 2a 2a 20 50 72 6f 76 69 64 65 20 61 20 64 65 66  ** Provide a def
51f0: 61 75 6c 74 20 76 61 6c 75 65 20 66 6f 72 20 53  ault value for S
5200: 51 4c 49 54 45 5f 54 45 4d 50 5f 53 54 4f 52 45  QLITE_TEMP_STORE
5210: 20 69 6e 20 63 61 73 65 20 69 74 20 69 73 20 6e   in case it is n
5220: 6f 74 20 73 70 65 63 69 66 69 65 64 0a 2a 2a 20  ot specified.** 
5230: 6f 6e 20 74 68 65 20 63 6f 6d 6d 61 6e 64 2d 6c  on the command-l
5240: 69 6e 65 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53  ine.*/.#ifndef S
5250: 51 4c 49 54 45 5f 54 45 4d 50 5f 53 54 4f 52 45  QLITE_TEMP_STORE
5260: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
5270: 5f 54 45 4d 50 5f 53 54 4f 52 45 20 31 0a 23 65  _TEMP_STORE 1.#e
5280: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 66 20 6e  ndif../*.** If n
5290: 6f 20 76 61 6c 75 65 20 68 61 73 20 62 65 65 6e  o value has been
52a0: 20 70 72 6f 76 69 64 65 64 20 66 6f 72 20 53 51   provided for SQ
52b0: 4c 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f  LITE_MAX_WORKER_
52c0: 54 48 52 45 41 44 53 2c 20 6f 72 20 69 66 0a 2a  THREADS, or if.*
52d0: 2a 20 53 51 4c 49 54 45 5f 54 45 4d 50 5f 53 54  * SQLITE_TEMP_ST
52e0: 4f 52 45 20 69 73 20 73 65 74 20 74 6f 20 33 20  ORE is set to 3 
52f0: 28 6e 65 76 65 72 20 75 73 65 20 74 65 6d 70 6f  (never use tempo
5300: 72 61 72 79 20 66 69 6c 65 73 29 2c 20 73 65 74  rary files), set
5310: 20 69 74 0a 2a 2a 20 74 6f 20 7a 65 72 6f 2e 0a   it.** to zero..
5320: 2a 2f 0a 23 69 66 20 53 51 4c 49 54 45 5f 54 45  */.#if SQLITE_TE
5330: 4d 50 5f 53 54 4f 52 45 3d 3d 33 20 7c 7c 20 53  MP_STORE==3 || S
5340: 51 4c 49 54 45 5f 54 48 52 45 41 44 53 41 46 45  QLITE_THREADSAFE
5350: 3d 3d 30 0a 23 20 75 6e 64 65 66 20 53 51 4c 49  ==0.# undef SQLI
5360: 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54 48  TE_MAX_WORKER_TH
5370: 52 45 41 44 53 0a 23 20 64 65 66 69 6e 65 20 53  READS.# define S
5380: 51 4c 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52  QLITE_MAX_WORKER
5390: 5f 54 48 52 45 41 44 53 20 30 0a 23 65 6e 64 69  _THREADS 0.#endi
53a0: 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  f.#ifndef SQLITE
53b0: 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54 48 52 45  _MAX_WORKER_THRE
53c0: 41 44 53 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  ADS.# define SQL
53d0: 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54  ITE_MAX_WORKER_T
53e0: 48 52 45 41 44 53 20 38 0a 23 65 6e 64 69 66 0a  HREADS 8.#endif.
53f0: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 44  #ifndef SQLITE_D
5400: 45 46 41 55 4c 54 5f 57 4f 52 4b 45 52 5f 54 48  EFAULT_WORKER_TH
5410: 52 45 41 44 53 0a 23 20 64 65 66 69 6e 65 20 53  READS.# define S
5420: 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 57 4f  QLITE_DEFAULT_WO
5430: 52 4b 45 52 5f 54 48 52 45 41 44 53 20 30 0a 23  RKER_THREADS 0.#
5440: 65 6e 64 69 66 0a 23 69 66 20 53 51 4c 49 54 45  endif.#if SQLITE
5450: 5f 44 45 46 41 55 4c 54 5f 57 4f 52 4b 45 52 5f  _DEFAULT_WORKER_
5460: 54 48 52 45 41 44 53 3e 53 51 4c 49 54 45 5f 4d  THREADS>SQLITE_M
5470: 41 58 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41 44  AX_WORKER_THREAD
5480: 53 0a 23 20 75 6e 64 65 66 20 53 51 4c 49 54 45  S.# undef SQLITE
5490: 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54 48 52 45  _MAX_WORKER_THRE
54a0: 41 44 53 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  ADS.# define SQL
54b0: 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54  ITE_MAX_WORKER_T
54c0: 48 52 45 41 44 53 20 53 51 4c 49 54 45 5f 44 45  HREADS SQLITE_DE
54d0: 46 41 55 4c 54 5f 57 4f 52 4b 45 52 5f 54 48 52  FAULT_WORKER_THR
54e0: 45 41 44 53 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  EADS.#endif../*.
54f0: 2a 2a 20 54 68 65 20 64 65 66 61 75 6c 74 20 69  ** The default i
5500: 6e 69 74 69 61 6c 20 61 6c 6c 6f 63 61 74 69 6f  nitial allocatio
5510: 6e 20 66 6f 72 20 74 68 65 20 70 61 67 65 63 61  n for the pageca
5520: 63 68 65 20 77 68 65 6e 20 75 73 69 6e 67 20 73  che when using s
5530: 65 70 61 72 61 74 65 0a 2a 2a 20 70 61 67 65 63  eparate.** pagec
5540: 61 63 68 65 73 20 66 6f 72 20 65 61 63 68 20 64  aches for each d
5550: 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
5560: 6f 6e 2e 20 20 41 20 70 6f 73 69 74 69 76 65 20  on.  A positive 
5570: 6e 75 6d 62 65 72 20 69 73 20 74 68 65 0a 2a 2a  number is the.**
5580: 20 6e 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73   number of pages
5590: 2e 20 20 41 20 6e 65 67 61 74 69 76 65 20 6e 75  .  A negative nu
55a0: 6d 62 65 72 20 4e 20 74 72 61 6e 73 6c 61 74 69  mber N translati
55b0: 6f 6e 73 20 6d 65 61 6e 73 20 74 68 61 74 20 61  ons means that a
55c0: 20 62 75 66 66 65 72 0a 2a 2a 20 6f 66 20 2d 31   buffer.** of -1
55d0: 30 32 34 2a 4e 20 62 79 74 65 73 20 69 73 20 61  024*N bytes is a
55e0: 6c 6c 6f 63 61 74 65 64 20 61 6e 64 20 75 73 65  llocated and use
55f0: 64 20 66 6f 72 20 61 73 20 6d 61 6e 79 20 70 61  d for as many pa
5600: 67 65 73 20 61 73 20 69 74 20 77 69 6c 6c 20 68  ges as it will h
5610: 6f 6c 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 64  old..**.** The d
5620: 65 66 61 75 6c 74 20 76 61 6c 75 65 20 6f 66 20  efault value of 
5630: 22 32 30 22 20 77 61 73 20 63 68 6f 6f 73 65 6e  "20" was choosen
5640: 20 74 6f 20 6d 69 6e 69 6d 69 7a 65 20 74 68 65   to minimize the
5650: 20 72 75 6e 2d 74 69 6d 65 20 6f 66 20 74 68 65   run-time of the
5660: 0a 2a 2a 20 73 70 65 65 64 74 65 73 74 31 20 74  .** speedtest1 t
5670: 65 73 74 20 70 72 6f 67 72 61 6d 20 77 69 74 68  est program with
5680: 20 6f 70 74 69 6f 6e 73 3a 20 2d 2d 73 68 72 69   options: --shri
5690: 6e 6b 2d 6d 65 6d 6f 72 79 20 2d 2d 72 65 70 72  nk-memory --repr
56a0: 65 70 61 72 65 0a 2a 2f 0a 23 69 66 6e 64 65 66  epare.*/.#ifndef
56b0: 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f   SQLITE_DEFAULT_
56c0: 50 43 41 43 48 45 5f 49 4e 49 54 53 5a 0a 23 20  PCACHE_INITSZ.# 
56d0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 45  define SQLITE_DE
56e0: 46 41 55 4c 54 5f 50 43 41 43 48 45 5f 49 4e 49  FAULT_PCACHE_INI
56f0: 54 53 5a 20 32 30 0a 23 65 6e 64 69 66 0a 0a 2f  TSZ 20.#endif../
5700: 2a 0a 2a 2a 20 44 65 66 61 75 6c 74 20 76 61 6c  *.** Default val
5710: 75 65 20 66 6f 72 20 74 68 65 20 53 51 4c 49 54  ue for the SQLIT
5720: 45 5f 43 4f 4e 46 49 47 5f 53 4f 52 54 45 52 52  E_CONFIG_SORTERR
5730: 45 46 5f 53 49 5a 45 20 6f 70 74 69 6f 6e 2e 0a  EF_SIZE option..
5740: 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  */.#ifndef SQLIT
5750: 45 5f 44 45 46 41 55 4c 54 5f 53 4f 52 54 45 52  E_DEFAULT_SORTER
5760: 52 45 46 5f 53 49 5a 45 0a 23 20 64 65 66 69 6e  REF_SIZE.# defin
5770: 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54  e SQLITE_DEFAULT
5780: 5f 53 4f 52 54 45 52 52 45 46 5f 53 49 5a 45 20  _SORTERREF_SIZE 
5790: 30 78 37 66 66 66 66 66 66 66 0a 23 65 6e 64 69  0x7fffffff.#endi
57a0: 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 63 6f 6d  f../*.** The com
57b0: 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e  pile-time option
57c0: 73 20 53 51 4c 49 54 45 5f 4d 4d 41 50 5f 52 45  s SQLITE_MMAP_RE
57d0: 41 44 57 52 49 54 45 20 61 6e 64 20 0a 2a 2a 20  ADWRITE and .** 
57e0: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 42 41  SQLITE_ENABLE_BA
57f0: 54 43 48 5f 41 54 4f 4d 49 43 5f 57 52 49 54 45  TCH_ATOMIC_WRITE
5800: 20 61 72 65 20 6e 6f 74 20 63 6f 6d 70 61 74 69   are not compati
5810: 62 6c 65 20 77 69 74 68 20 6f 6e 65 20 61 6e 6f  ble with one ano
5820: 74 68 65 72 2e 0a 2a 2a 20 59 6f 75 20 6d 75 73  ther..** You mus
5830: 74 20 63 68 6f 6f 73 65 20 6f 6e 65 20 6f 72 20  t choose one or 
5840: 74 68 65 20 6f 74 68 65 72 20 28 6f 72 20 6e 65  the other (or ne
5850: 69 74 68 65 72 29 20 62 75 74 20 6e 6f 74 20 62  ither) but not b
5860: 6f 74 68 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69  oth..*/.#if defi
5870: 6e 65 64 28 53 51 4c 49 54 45 5f 4d 4d 41 50 5f  ned(SQLITE_MMAP_
5880: 52 45 41 44 57 52 49 54 45 29 20 26 26 20 64 65  READWRITE) && de
5890: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41  fined(SQLITE_ENA
58a0: 42 4c 45 5f 42 41 54 43 48 5f 41 54 4f 4d 49 43  BLE_BATCH_ATOMIC
58b0: 5f 57 52 49 54 45 29 0a 23 65 72 72 6f 72 20 43  _WRITE).#error C
58c0: 61 6e 6e 6f 74 20 75 73 65 20 62 6f 74 68 20 53  annot use both S
58d0: 51 4c 49 54 45 5f 4d 4d 41 50 5f 52 45 41 44 57  QLITE_MMAP_READW
58e0: 52 49 54 45 20 61 6e 64 20 53 51 4c 49 54 45 5f  RITE and SQLITE_
58f0: 45 4e 41 42 4c 45 5f 42 41 54 43 48 5f 41 54 4f  ENABLE_BATCH_ATO
5900: 4d 49 43 5f 57 52 49 54 45 0a 23 65 6e 64 69 66  MIC_WRITE.#endif
5910: 0a 0a 2f 2a 0a 2a 2a 20 47 43 43 20 64 6f 65 73  ../*.** GCC does
5920: 20 6e 6f 74 20 64 65 66 69 6e 65 20 74 68 65 20   not define the 
5930: 6f 66 66 73 65 74 6f 66 28 29 20 6d 61 63 72 6f  offsetof() macro
5940: 20 73 6f 20 77 65 27 6c 6c 20 68 61 76 65 20 74   so we'll have t
5950: 6f 20 64 6f 20 69 74 0a 2a 2a 20 6f 75 72 73 65  o do it.** ourse
5960: 6c 76 65 73 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66  lves..*/.#ifndef
5970: 20 6f 66 66 73 65 74 6f 66 0a 23 64 65 66 69 6e   offsetof.#defin
5980: 65 20 6f 66 66 73 65 74 6f 66 28 53 54 52 55 43  e offsetof(STRUC
5990: 54 55 52 45 2c 46 49 45 4c 44 29 20 28 28 69 6e  TURE,FIELD) ((in
59a0: 74 29 28 28 63 68 61 72 2a 29 26 28 28 53 54 52  t)((char*)&((STR
59b0: 55 43 54 55 52 45 2a 29 30 29 2d 3e 46 49 45 4c  UCTURE*)0)->FIEL
59c0: 44 29 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  D)).#endif../*.*
59d0: 2a 20 4d 61 63 72 6f 73 20 74 6f 20 63 6f 6d 70  * Macros to comp
59e0: 75 74 65 20 6d 69 6e 69 6d 75 6d 20 61 6e 64 20  ute minimum and 
59f0: 6d 61 78 69 6d 75 6d 20 6f 66 20 74 77 6f 20 6e  maximum of two n
5a00: 75 6d 62 65 72 73 2e 0a 2a 2f 0a 23 69 66 6e 64  umbers..*/.#ifnd
5a10: 65 66 20 4d 49 4e 0a 23 20 64 65 66 69 6e 65 20  ef MIN.# define 
5a20: 4d 49 4e 28 41 2c 42 29 20 28 28 41 29 3c 28 42  MIN(A,B) ((A)<(B
5a30: 29 3f 28 41 29 3a 28 42 29 29 0a 23 65 6e 64 69  )?(A):(B)).#endi
5a40: 66 0a 23 69 66 6e 64 65 66 20 4d 41 58 0a 23 20  f.#ifndef MAX.# 
5a50: 64 65 66 69 6e 65 20 4d 41 58 28 41 2c 42 29 20  define MAX(A,B) 
5a60: 28 28 41 29 3e 28 42 29 3f 28 41 29 3a 28 42 29  ((A)>(B)?(A):(B)
5a70: 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  ).#endif../*.** 
5a80: 53 77 61 70 20 74 77 6f 20 6f 62 6a 65 63 74 73  Swap two objects
5a90: 20 6f 66 20 74 79 70 65 20 54 59 50 45 2e 0a 2a   of type TYPE..*
5aa0: 2f 0a 23 64 65 66 69 6e 65 20 53 57 41 50 28 54  /.#define SWAP(T
5ab0: 59 50 45 2c 41 2c 42 29 20 7b 54 59 50 45 20 74  YPE,A,B) {TYPE t
5ac0: 3d 41 3b 20 41 3d 42 3b 20 42 3d 74 3b 7d 0a 0a  =A; A=B; B=t;}..
5ad0: 2f 2a 0a 2a 2a 20 43 68 65 63 6b 20 74 6f 20 73  /*.** Check to s
5ae0: 65 65 20 69 66 20 74 68 69 73 20 6d 61 63 68 69  ee if this machi
5af0: 6e 65 20 75 73 65 73 20 45 42 43 44 49 43 2e 20  ne uses EBCDIC. 
5b00: 20 28 59 65 73 2c 20 62 65 6c 69 65 76 65 20 69   (Yes, believe i
5b10: 74 20 6f 72 0a 2a 2a 20 6e 6f 74 2c 20 74 68 65  t or.** not, the
5b20: 72 65 20 61 72 65 20 73 74 69 6c 6c 20 6d 61 63  re are still mac
5b30: 68 69 6e 65 73 20 6f 75 74 20 74 68 65 72 65 20  hines out there 
5b40: 74 68 61 74 20 75 73 65 20 45 42 43 44 49 43 2e  that use EBCDIC.
5b50: 29 0a 2a 2f 0a 23 69 66 20 27 41 27 20 3d 3d 20  ).*/.#if 'A' == 
5b60: 27 5c 33 30 31 27 0a 23 20 64 65 66 69 6e 65 20  '\301'.# define 
5b70: 53 51 4c 49 54 45 5f 45 42 43 44 49 43 20 31 0a  SQLITE_EBCDIC 1.
5b80: 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 53  #else.# define S
5b90: 51 4c 49 54 45 5f 41 53 43 49 49 20 31 0a 23 65  QLITE_ASCII 1.#e
5ba0: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 6e 74 65  ndif../*.** Inte
5bb0: 67 65 72 73 20 6f 66 20 6b 6e 6f 77 6e 20 73 69  gers of known si
5bc0: 7a 65 73 2e 20 20 54 68 65 73 65 20 74 79 70 65  zes.  These type
5bd0: 64 65 66 73 20 6d 69 67 68 74 20 63 68 61 6e 67  defs might chang
5be0: 65 20 66 6f 72 20 61 72 63 68 69 74 65 63 74 75  e for architectu
5bf0: 72 65 73 0a 2a 2a 20 77 68 65 72 65 20 74 68 65  res.** where the
5c00: 20 73 69 7a 65 73 20 76 65 72 79 2e 20 20 50 72   sizes very.  Pr
5c10: 65 70 72 6f 63 65 73 73 6f 72 20 6d 61 63 72 6f  eprocessor macro
5c20: 73 20 61 72 65 20 61 76 61 69 6c 61 62 6c 65 20  s are available 
5c30: 73 6f 20 74 68 61 74 20 74 68 65 0a 2a 2a 20 74  so that the.** t
5c40: 79 70 65 73 20 63 61 6e 20 62 65 20 63 6f 6e 76  ypes can be conv
5c50: 65 6e 69 65 6e 74 6c 79 20 72 65 64 65 66 69 6e  eniently redefin
5c60: 65 64 20 61 74 20 63 6f 6d 70 69 6c 65 2d 74 79  ed at compile-ty
5c70: 70 65 2e 20 20 4c 69 6b 65 20 74 68 69 73 3a 0a  pe.  Like this:.
5c80: 2a 2a 0a 2a 2a 20 20 20 20 20 20 20 20 20 63 63  **.**         cc
5c90: 20 27 2d 44 55 49 4e 54 50 54 52 5f 54 59 50 45   '-DUINTPTR_TYPE
5ca0: 3d 6c 6f 6e 67 20 6c 6f 6e 67 20 69 6e 74 27 20  =long long int' 
5cb0: 2e 2e 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 55  ....*/.#ifndef U
5cc0: 49 4e 54 33 32 5f 54 59 50 45 0a 23 20 69 66 64  INT32_TYPE.# ifd
5cd0: 65 66 20 48 41 56 45 5f 55 49 4e 54 33 32 5f 54  ef HAVE_UINT32_T
5ce0: 0a 23 20 20 64 65 66 69 6e 65 20 55 49 4e 54 33  .#  define UINT3
5cf0: 32 5f 54 59 50 45 20 75 69 6e 74 33 32 5f 74 0a  2_TYPE uint32_t.
5d00: 23 20 65 6c 73 65 0a 23 20 20 64 65 66 69 6e 65  # else.#  define
5d10: 20 55 49 4e 54 33 32 5f 54 59 50 45 20 75 6e 73   UINT32_TYPE uns
5d20: 69 67 6e 65 64 20 69 6e 74 0a 23 20 65 6e 64 69  igned int.# endi
5d30: 66 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66  f.#endif.#ifndef
5d40: 20 55 49 4e 54 31 36 5f 54 59 50 45 0a 23 20 69   UINT16_TYPE.# i
5d50: 66 64 65 66 20 48 41 56 45 5f 55 49 4e 54 31 36  fdef HAVE_UINT16
5d60: 5f 54 0a 23 20 20 64 65 66 69 6e 65 20 55 49 4e  _T.#  define UIN
5d70: 54 31 36 5f 54 59 50 45 20 75 69 6e 74 31 36 5f  T16_TYPE uint16_
5d80: 74 0a 23 20 65 6c 73 65 0a 23 20 20 64 65 66 69  t.# else.#  defi
5d90: 6e 65 20 55 49 4e 54 31 36 5f 54 59 50 45 20 75  ne UINT16_TYPE u
5da0: 6e 73 69 67 6e 65 64 20 73 68 6f 72 74 20 69 6e  nsigned short in
5db0: 74 0a 23 20 65 6e 64 69 66 0a 23 65 6e 64 69 66  t.# endif.#endif
5dc0: 0a 23 69 66 6e 64 65 66 20 49 4e 54 31 36 5f 54  .#ifndef INT16_T
5dd0: 59 50 45 0a 23 20 69 66 64 65 66 20 48 41 56 45  YPE.# ifdef HAVE
5de0: 5f 49 4e 54 31 36 5f 54 0a 23 20 20 64 65 66 69  _INT16_T.#  defi
5df0: 6e 65 20 49 4e 54 31 36 5f 54 59 50 45 20 69 6e  ne INT16_TYPE in
5e00: 74 31 36 5f 74 0a 23 20 65 6c 73 65 0a 23 20 20  t16_t.# else.#  
5e10: 64 65 66 69 6e 65 20 49 4e 54 31 36 5f 54 59 50  define INT16_TYP
5e20: 45 20 73 68 6f 72 74 20 69 6e 74 0a 23 20 65 6e  E short int.# en
5e30: 64 69 66 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64  dif.#endif.#ifnd
5e40: 65 66 20 55 49 4e 54 38 5f 54 59 50 45 0a 23 20  ef UINT8_TYPE.# 
5e50: 69 66 64 65 66 20 48 41 56 45 5f 55 49 4e 54 38  ifdef HAVE_UINT8
5e60: 5f 54 0a 23 20 20 64 65 66 69 6e 65 20 55 49 4e  _T.#  define UIN
5e70: 54 38 5f 54 59 50 45 20 75 69 6e 74 38 5f 74 0a  T8_TYPE uint8_t.
5e80: 23 20 65 6c 73 65 0a 23 20 20 64 65 66 69 6e 65  # else.#  define
5e90: 20 55 49 4e 54 38 5f 54 59 50 45 20 75 6e 73 69   UINT8_TYPE unsi
5ea0: 67 6e 65 64 20 63 68 61 72 0a 23 20 65 6e 64 69  gned char.# endi
5eb0: 66 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66  f.#endif.#ifndef
5ec0: 20 49 4e 54 38 5f 54 59 50 45 0a 23 20 69 66 64   INT8_TYPE.# ifd
5ed0: 65 66 20 48 41 56 45 5f 49 4e 54 38 5f 54 0a 23  ef HAVE_INT8_T.#
5ee0: 20 20 64 65 66 69 6e 65 20 49 4e 54 38 5f 54 59    define INT8_TY
5ef0: 50 45 20 69 6e 74 38 5f 74 0a 23 20 65 6c 73 65  PE int8_t.# else
5f00: 0a 23 20 20 64 65 66 69 6e 65 20 49 4e 54 38 5f  .#  define INT8_
5f10: 54 59 50 45 20 73 69 67 6e 65 64 20 63 68 61 72  TYPE signed char
5f20: 0a 23 20 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a  .# endif.#endif.
5f30: 23 69 66 6e 64 65 66 20 4c 4f 4e 47 44 4f 55 42  #ifndef LONGDOUB
5f40: 4c 45 5f 54 59 50 45 0a 23 20 64 65 66 69 6e 65  LE_TYPE.# define
5f50: 20 4c 4f 4e 47 44 4f 55 42 4c 45 5f 54 59 50 45   LONGDOUBLE_TYPE
5f60: 20 6c 6f 6e 67 20 64 6f 75 62 6c 65 0a 23 65 6e   long double.#en
5f70: 64 69 66 0a 74 79 70 65 64 65 66 20 73 71 6c 69  dif.typedef sqli
5f80: 74 65 5f 69 6e 74 36 34 20 69 36 34 3b 20 20 20  te_int64 i64;   
5f90: 20 20 20 20 20 20 20 2f 2a 20 38 2d 62 79 74 65         /* 8-byte
5fa0: 20 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20   signed integer 
5fb0: 2a 2f 0a 74 79 70 65 64 65 66 20 73 71 6c 69 74  */.typedef sqlit
5fc0: 65 5f 75 69 6e 74 36 34 20 75 36 34 3b 20 20 20  e_uint64 u64;   
5fd0: 20 20 20 20 20 20 2f 2a 20 38 2d 62 79 74 65 20        /* 8-byte 
5fe0: 75 6e 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72  unsigned integer
5ff0: 20 2a 2f 0a 74 79 70 65 64 65 66 20 55 49 4e 54   */.typedef UINT
6000: 33 32 5f 54 59 50 45 20 75 33 32 3b 20 20 20 20  32_TYPE u32;    
6010: 20 20 20 20 20 20 20 2f 2a 20 34 2d 62 79 74 65         /* 4-byte
6020: 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 65 67 65   unsigned intege
6030: 72 20 2a 2f 0a 74 79 70 65 64 65 66 20 55 49 4e  r */.typedef UIN
6040: 54 31 36 5f 54 59 50 45 20 75 31 36 3b 20 20 20  T16_TYPE u16;   
6050: 20 20 20 20 20 20 20 20 2f 2a 20 32 2d 62 79 74          /* 2-byt
6060: 65 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 65 67  e unsigned integ
6070: 65 72 20 2a 2f 0a 74 79 70 65 64 65 66 20 49 4e  er */.typedef IN
6080: 54 31 36 5f 54 59 50 45 20 69 31 36 3b 20 20 20  T16_TYPE i16;   
6090: 20 20 20 20 20 20 20 20 20 2f 2a 20 32 2d 62 79           /* 2-by
60a0: 74 65 20 73 69 67 6e 65 64 20 69 6e 74 65 67 65  te signed intege
60b0: 72 20 2a 2f 0a 74 79 70 65 64 65 66 20 55 49 4e  r */.typedef UIN
60c0: 54 38 5f 54 59 50 45 20 75 38 3b 20 20 20 20 20  T8_TYPE u8;     
60d0: 20 20 20 20 20 20 20 20 2f 2a 20 31 2d 62 79 74          /* 1-byt
60e0: 65 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 65 67  e unsigned integ
60f0: 65 72 20 2a 2f 0a 74 79 70 65 64 65 66 20 49 4e  er */.typedef IN
6100: 54 38 5f 54 59 50 45 20 69 38 3b 20 20 20 20 20  T8_TYPE i8;     
6110: 20 20 20 20 20 20 20 20 20 2f 2a 20 31 2d 62 79           /* 1-by
6120: 74 65 20 73 69 67 6e 65 64 20 69 6e 74 65 67 65  te signed intege
6130: 72 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 53 51 4c 49  r */../*.** SQLI
6140: 54 45 5f 4d 41 58 5f 55 33 32 20 69 73 20 61 20  TE_MAX_U32 is a 
6150: 75 36 34 20 63 6f 6e 73 74 61 6e 74 20 74 68 61  u64 constant tha
6160: 74 20 69 73 20 74 68 65 20 6d 61 78 69 6d 75 6d  t is the maximum
6170: 20 75 36 34 20 76 61 6c 75 65 0a 2a 2a 20 74 68   u64 value.** th
6180: 61 74 20 63 61 6e 20 62 65 20 73 74 6f 72 65 64  at can be stored
6190: 20 69 6e 20 61 20 75 33 32 20 77 69 74 68 6f 75   in a u32 withou
61a0: 74 20 6c 6f 73 73 20 6f 66 20 64 61 74 61 2e 20  t loss of data. 
61b0: 20 54 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69 73   The value.** is
61c0: 20 30 78 30 30 30 30 30 30 30 30 66 66 66 66 66   0x00000000fffff
61d0: 66 66 66 2e 20 20 42 75 74 20 62 65 63 61 75 73  fff.  But becaus
61e0: 65 20 6f 66 20 71 75 69 72 6b 73 20 6f 66 20 73  e of quirks of s
61f0: 6f 6d 65 20 63 6f 6d 70 69 6c 65 72 73 2c 20 77  ome compilers, w
6200: 65 0a 2a 2a 20 68 61 76 65 20 74 6f 20 73 70 65  e.** have to spe
6210: 63 69 66 79 20 74 68 65 20 76 61 6c 75 65 20 69  cify the value i
6220: 6e 20 74 68 65 20 6c 65 73 73 20 69 6e 74 75 69  n the less intui
6230: 74 69 76 65 20 6d 61 6e 6e 65 72 20 73 68 6f 77  tive manner show
6240: 6e 3a 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  n:.*/.#define SQ
6250: 4c 49 54 45 5f 4d 41 58 5f 55 33 32 20 20 28 28  LITE_MAX_U32  ((
6260: 28 28 75 36 34 29 31 29 3c 3c 33 32 29 2d 31 29  ((u64)1)<<32)-1)
6270: 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 64 61 74 61  ../*.** The data
6280: 74 79 70 65 20 75 73 65 64 20 74 6f 20 73 74 6f  type used to sto
6290: 72 65 20 65 73 74 69 6d 61 74 65 73 20 6f 66 20  re estimates of 
62a0: 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f  the number of ro
62b0: 77 73 20 69 6e 20 61 0a 2a 2a 20 74 61 62 6c 65  ws in a.** table
62c0: 20 6f 72 20 69 6e 64 65 78 2e 20 20 54 68 69 73   or index.  This
62d0: 20 69 73 20 61 6e 20 75 6e 73 69 67 6e 65 64 20   is an unsigned 
62e0: 69 6e 74 65 67 65 72 20 74 79 70 65 2e 20 20 46  integer type.  F
62f0: 6f 72 20 39 39 2e 39 25 20 6f 66 0a 2a 2a 20 74  or 99.9% of.** t
6300: 68 65 20 77 6f 72 6c 64 2c 20 61 20 33 32 2d 62  he world, a 32-b
6310: 69 74 20 69 6e 74 65 67 65 72 20 69 73 20 73 75  it integer is su
6320: 66 66 69 63 69 65 6e 74 2e 20 20 42 75 74 20 61  fficient.  But a
6330: 20 36 34 2d 62 69 74 20 69 6e 74 65 67 65 72 0a   64-bit integer.
6340: 2a 2a 20 63 61 6e 20 62 65 20 75 73 65 64 20 61  ** can be used a
6350: 74 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 69  t compile-time i
6360: 66 20 64 65 73 69 72 65 64 2e 0a 2a 2f 0a 23 69  f desired..*/.#i
6370: 66 64 65 66 20 53 51 4c 49 54 45 5f 36 34 42 49  fdef SQLITE_64BI
6380: 54 5f 53 54 41 54 53 0a 20 74 79 70 65 64 65 66  T_STATS. typedef
6390: 20 75 36 34 20 74 52 6f 77 63 6e 74 3b 20 20 20   u64 tRowcnt;   
63a0: 20 2f 2a 20 36 34 2d 62 69 74 20 6f 6e 6c 79 20   /* 64-bit only 
63b0: 69 66 20 72 65 71 75 65 73 74 65 64 20 61 74 20  if requested at 
63c0: 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 2a 2f 0a  compile-time */.
63d0: 23 65 6c 73 65 0a 20 74 79 70 65 64 65 66 20 75  #else. typedef u
63e0: 33 32 20 74 52 6f 77 63 6e 74 3b 20 20 20 20 2f  32 tRowcnt;    /
63f0: 2a 20 33 32 2d 62 69 74 20 69 73 20 74 68 65 20  * 32-bit is the 
6400: 64 65 66 61 75 6c 74 20 2a 2f 0a 23 65 6e 64 69  default */.#endi
6410: 66 0a 0a 2f 2a 0a 2a 2a 20 45 73 74 69 6d 61 74  f../*.** Estimat
6420: 65 64 20 71 75 61 6e 74 69 74 69 65 73 20 75 73  ed quantities us
6430: 65 64 20 66 6f 72 20 71 75 65 72 79 20 70 6c 61  ed for query pla
6440: 6e 6e 69 6e 67 20 61 72 65 20 73 74 6f 72 65 64  nning are stored
6450: 20 61 73 20 31 36 2d 62 69 74 0a 2a 2a 20 6c 6f   as 16-bit.** lo
6460: 67 61 72 69 74 68 6d 73 2e 20 20 46 6f 72 20 71  garithms.  For q
6470: 75 61 6e 74 69 74 79 20 58 2c 20 74 68 65 20 76  uantity X, the v
6480: 61 6c 75 65 20 73 74 6f 72 65 64 20 69 73 20 31  alue stored is 1
6490: 30 2a 6c 6f 67 32 28 58 29 2e 20 20 54 68 69 73  0*log2(X).  This
64a0: 0a 2a 2a 20 67 69 76 65 73 20 61 20 70 6f 73 73  .** gives a poss
64b0: 69 62 6c 65 20 72 61 6e 67 65 20 6f 66 20 76 61  ible range of va
64c0: 6c 75 65 73 20 6f 66 20 61 70 70 72 6f 78 69 6d  lues of approxim
64d0: 61 74 65 6c 79 20 31 2e 30 65 39 38 36 20 74 6f  ately 1.0e986 to
64e0: 20 31 65 2d 39 38 36 2e 0a 2a 2a 20 42 75 74 20   1e-986..** But 
64f0: 74 68 65 20 61 6c 6c 6f 77 65 64 20 76 61 6c 75  the allowed valu
6500: 65 73 20 61 72 65 20 22 67 72 61 69 6e 79 22 2e  es are "grainy".
6510: 20 20 4e 6f 74 20 65 76 65 72 79 20 76 61 6c 75    Not every valu
6520: 65 20 69 73 20 72 65 70 72 65 73 65 6e 74 61 62  e is representab
6530: 6c 65 2e 0a 2a 2a 20 46 6f 72 20 65 78 61 6d 70  le..** For examp
6540: 6c 65 2c 20 71 75 61 6e 74 69 74 69 65 73 20 31  le, quantities 1
6550: 36 20 61 6e 64 20 31 37 20 61 72 65 20 62 6f 74  6 and 17 are bot
6560: 68 20 72 65 70 72 65 73 65 6e 74 65 64 20 62 79  h represented by
6570: 20 61 20 4c 6f 67 45 73 74 0a 2a 2a 20 6f 66 20   a LogEst.** of 
6580: 34 30 2e 20 20 48 6f 77 65 76 65 72 2c 20 73 69  40.  However, si
6590: 6e 63 65 20 4c 6f 67 45 73 74 20 71 75 61 6e 74  nce LogEst quant
65a0: 69 74 69 65 73 20 61 72 65 20 73 75 70 70 6f 73  ities are suppos
65b0: 65 20 74 6f 20 62 65 20 65 73 74 69 6d 61 74 65  e to be estimate
65c0: 73 2c 0a 2a 2a 20 6e 6f 74 20 65 78 61 63 74 20  s,.** not exact 
65d0: 76 61 6c 75 65 73 2c 20 74 68 69 73 20 69 6d 70  values, this imp
65e0: 72 65 63 69 73 69 6f 6e 20 69 73 20 6e 6f 74 20  recision is not 
65f0: 61 20 70 72 6f 62 6c 65 6d 2e 0a 2a 2a 0a 2a 2a  a problem..**.**
6600: 20 22 4c 6f 67 45 73 74 22 20 69 73 20 73 68 6f   "LogEst" is sho
6610: 72 74 20 66 6f 72 20 22 4c 6f 67 61 72 69 74 68  rt for "Logarith
6620: 6d 69 63 20 45 73 74 69 6d 61 74 65 22 2e 0a 2a  mic Estimate"..*
6630: 2a 0a 2a 2a 20 45 78 61 6d 70 6c 65 73 3a 0a 2a  *.** Examples:.*
6640: 2a 20 20 20 20 20 20 31 20 2d 3e 20 30 20 20 20  *      1 -> 0   
6650: 20 20 20 20 20 20 20 20 20 20 20 32 30 20 2d 3e             20 ->
6660: 20 34 33 20 20 20 20 20 20 20 20 20 20 31 30 30   43          100
6670: 30 30 20 2d 3e 20 31 33 32 0a 2a 2a 20 20 20 20  00 -> 132.**    
6680: 20 20 32 20 2d 3e 20 31 30 20 20 20 20 20 20 20    2 -> 10       
6690: 20 20 20 20 20 20 32 35 20 2d 3e 20 34 36 20 20        25 -> 46  
66a0: 20 20 20 20 20 20 20 20 32 35 30 30 30 20 2d 3e          25000 ->
66b0: 20 31 34 36 0a 2a 2a 20 20 20 20 20 20 33 20 2d   146.**      3 -
66c0: 3e 20 31 36 20 20 20 20 20 20 20 20 20 20 20 20  > 16            
66d0: 31 30 30 20 2d 3e 20 36 36 20 20 20 20 20 20 20  100 -> 66       
66e0: 20 31 30 30 30 30 30 30 20 2d 3e 20 31 39 39 0a   1000000 -> 199.
66f0: 2a 2a 20 20 20 20 20 20 34 20 2d 3e 20 32 30 20  **      4 -> 20 
6700: 20 20 20 20 20 20 20 20 20 20 31 30 30 30 20 2d            1000 -
6710: 3e 20 39 39 20 20 20 20 20 20 20 20 31 30 34 38  > 99        1048
6720: 35 37 36 20 2d 3e 20 32 30 30 0a 2a 2a 20 20 20  576 -> 200.**   
6730: 20 20 31 30 20 2d 3e 20 33 33 20 20 20 20 20 20    10 -> 33      
6740: 20 20 20 20 20 31 30 32 34 20 2d 3e 20 31 30 30       1024 -> 100
6750: 20 20 20 20 34 32 39 34 39 36 37 32 39 36 20 2d      4294967296 -
6760: 3e 20 33 32 30 0a 2a 2a 0a 2a 2a 20 54 68 65 20  > 320.**.** The 
6770: 4c 6f 67 45 73 74 20 63 61 6e 20 62 65 20 6e 65  LogEst can be ne
6780: 67 61 74 69 76 65 20 74 6f 20 69 6e 64 69 63 61  gative to indica
6790: 74 65 20 66 72 61 63 74 69 6f 6e 61 6c 20 76 61  te fractional va
67a0: 6c 75 65 73 2e 0a 2a 2a 20 45 78 61 6d 70 6c 65  lues..** Example
67b0: 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 30 2e 35 20  s:.**.**    0.5 
67c0: 2d 3e 20 2d 31 30 20 20 20 20 20 20 20 20 20 20  -> -10          
67d0: 20 30 2e 31 20 2d 3e 20 2d 33 33 20 20 20 20 20   0.1 -> -33     
67e0: 20 20 20 30 2e 30 36 32 35 20 2d 3e 20 2d 34 30     0.0625 -> -40
67f0: 0a 2a 2f 0a 74 79 70 65 64 65 66 20 49 4e 54 31  .*/.typedef INT1
6800: 36 5f 54 59 50 45 20 4c 6f 67 45 73 74 3b 0a 0a  6_TYPE LogEst;..
6810: 2f 2a 0a 2a 2a 20 53 65 74 20 74 68 65 20 53 51  /*.** Set the SQ
6820: 4c 49 54 45 5f 50 54 52 53 49 5a 45 20 6d 61 63  LITE_PTRSIZE mac
6830: 72 6f 20 74 6f 20 74 68 65 20 6e 75 6d 62 65 72  ro to the number
6840: 20 6f 66 20 62 79 74 65 73 20 69 6e 20 61 20 70   of bytes in a p
6850: 6f 69 6e 74 65 72 0a 2a 2f 0a 23 69 66 6e 64 65  ointer.*/.#ifnde
6860: 66 20 53 51 4c 49 54 45 5f 50 54 52 53 49 5a 45  f SQLITE_PTRSIZE
6870: 0a 23 20 69 66 20 64 65 66 69 6e 65 64 28 5f 5f  .# if defined(__
6880: 53 49 5a 45 4f 46 5f 50 4f 49 4e 54 45 52 5f 5f  SIZEOF_POINTER__
6890: 29 0a 23 20 20 20 64 65 66 69 6e 65 20 53 51 4c  ).#   define SQL
68a0: 49 54 45 5f 50 54 52 53 49 5a 45 20 5f 5f 53 49  ITE_PTRSIZE __SI
68b0: 5a 45 4f 46 5f 50 4f 49 4e 54 45 52 5f 5f 0a 23  ZEOF_POINTER__.#
68c0: 20 65 6c 69 66 20 64 65 66 69 6e 65 64 28 69 33   elif defined(i3
68d0: 38 36 29 20 20 20 20 20 7c 7c 20 64 65 66 69 6e  86)     || defin
68e0: 65 64 28 5f 5f 69 33 38 36 5f 5f 29 20 20 20 7c  ed(__i386__)   |
68f0: 7c 20 64 65 66 69 6e 65 64 28 5f 4d 5f 49 58 38  | defined(_M_IX8
6900: 36 29 20 7c 7c 20 20 20 20 5c 0a 20 20 20 20 20  6) ||    \.     
6910: 20 20 64 65 66 69 6e 65 64 28 5f 4d 5f 41 52 4d    defined(_M_ARM
6920: 29 20 20 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f  )   || defined(_
6930: 5f 61 72 6d 5f 5f 29 20 20 20 20 7c 7c 20 64 65  _arm__)    || de
6940: 66 69 6e 65 64 28 5f 5f 78 38 36 29 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 7c 7c 20 64  d(i386)     || d
6dd0: 65 66 69 6e 65 64 28 5f 5f 69 33 38 36 5f 5f 29  efined(__i386__)
6de0: 20 20 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 4d     || defined(_M
6df0: 5f 49 58 38 36 29 20 7c 7c 20 20 20 20 5c 0a 20  _IX86) ||    \. 
6e00: 20 20 20 20 64 65 66 69 6e 65 64 28 5f 5f 78 38      defined(__x8
6e10: 36 5f 36 34 29 20 7c 7c 20 64 65 66 69 6e 65 64  6_64) || defined
6e20: 28 5f 5f 78 38 36 5f 36 34 5f 5f 29 20 7c 7c 20  (__x86_64__) || 
6e30: 64 65 66 69 6e 65 64 28 5f 4d 5f 58 36 34 29 20  defined(_M_X64) 
6e40: 20 7c 7c 20 20 20 20 5c 0a 20 20 20 20 20 64 65   ||    \.     de
6e50: 66 69 6e 65 64 28 5f 4d 5f 41 4d 44 36 34 29 20  fined(_M_AMD64) 
6e60: 7c 7c 20 64 65 66 69 6e 65 64 28 5f 4d 5f 41 52  || defined(_M_AR
6e70: 4d 29 20 20 20 20 20 7c 7c 20 64 65 66 69 6e 65  M)     || define
6e80: 64 28 5f 5f 78 38 36 29 20 20 20 7c 7c 20 20 20  d(__x86)   ||   
6e90: 20 5c 0a 20 20 20 20 20 64 65 66 69 6e 65 64 28   \.     defined(
6ea0: 5f 5f 61 72 6d 5f 5f 29 20 20 7c 7c 20 64 65 66  __arm__)  || def
6eb0: 69 6e 65 64 28 5f 4d 5f 41 52 4d 36 34 29 0a 23  ined(_M_ARM64).#
6ec0: 20 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45     define SQLITE
6ed0: 5f 42 59 54 45 4f 52 44 45 52 20 20 20 20 31 32  _BYTEORDER    12
6ee0: 33 34 0a 23 20 65 6c 69 66 20 64 65 66 69 6e 65  34.# elif define
6ef0: 64 28 73 70 61 72 63 29 20 20 20 20 7c 7c 20 64  d(sparc)    || d
6f00: 65 66 69 6e 65 64 28 5f 5f 70 70 63 5f 5f 29 0a  efined(__ppc__).
6f10: 23 20 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54  #   define SQLIT
6f20: 45 5f 42 59 54 45 4f 52 44 45 52 20 20 20 20 34  E_BYTEORDER    4
6f30: 33 32 31 0a 23 20 65 6c 73 65 0a 23 20 20 20 64  321.# else.#   d
6f40: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 42 59 54  efine SQLITE_BYT
6f50: 45 4f 52 44 45 52 20 30 0a 23 20 65 6e 64 69 66  EORDER 0.# endif
6f60: 0a 23 65 6e 64 69 66 0a 23 69 66 20 53 51 4c 49  .#endif.#if SQLI
6f70: 54 45 5f 42 59 54 45 4f 52 44 45 52 3d 3d 34 33  TE_BYTEORDER==43
6f80: 32 31 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  21.# define SQLI
6f90: 54 45 5f 42 49 47 45 4e 44 49 41 4e 20 20 20 20  TE_BIGENDIAN    
6fa0: 31 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  1.# define SQLIT
6fb0: 45 5f 4c 49 54 54 4c 45 45 4e 44 49 41 4e 20 30  E_LITTLEENDIAN 0
6fc0: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
6fd0: 5f 55 54 46 31 36 4e 41 54 49 56 45 20 20 53 51  _UTF16NATIVE  SQ
6fe0: 4c 49 54 45 5f 55 54 46 31 36 42 45 0a 23 65 6c  LITE_UTF16BE.#el
6ff0: 69 66 20 53 51 4c 49 54 45 5f 42 59 54 45 4f 52  if SQLITE_BYTEOR
7000: 44 45 52 3d 3d 31 32 33 34 0a 23 20 64 65 66 69  DER==1234.# defi
7010: 6e 65 20 53 51 4c 49 54 45 5f 42 49 47 45 4e 44  ne SQLITE_BIGEND
7020: 49 41 4e 20 20 20 20 30 0a 23 20 64 65 66 69 6e  IAN    0.# defin
7030: 65 20 53 51 4c 49 54 45 5f 4c 49 54 54 4c 45 45  e SQLITE_LITTLEE
7040: 4e 44 49 41 4e 20 31 0a 23 20 64 65 66 69 6e 65  NDIAN 1.# define
7050: 20 53 51 4c 49 54 45 5f 55 54 46 31 36 4e 41 54   SQLITE_UTF16NAT
7060: 49 56 45 20 20 53 51 4c 49 54 45 5f 55 54 46 31  IVE  SQLITE_UTF1
7070: 36 4c 45 0a 23 65 6c 73 65 0a 23 20 69 66 64 65  6LE.#else.# ifde
7080: 66 20 53 51 4c 49 54 45 5f 41 4d 41 4c 47 41 4d  f SQLITE_AMALGAM
7090: 41 54 49 4f 4e 0a 20 20 63 6f 6e 73 74 20 69 6e  ATION.  const in
70a0: 74 20 73 71 6c 69 74 65 33 6f 6e 65 20 3d 20 31  t sqlite3one = 1
70b0: 3b 0a 23 20 65 6c 73 65 0a 20 20 65 78 74 65 72  ;.# else.  exter
70c0: 6e 20 63 6f 6e 73 74 20 69 6e 74 20 73 71 6c 69  n const int sqli
70d0: 74 65 33 6f 6e 65 3b 0a 23 20 65 6e 64 69 66 0a  te3one;.# endif.
70e0: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
70f0: 42 49 47 45 4e 44 49 41 4e 20 20 20 20 28 2a 28  BIGENDIAN    (*(
7100: 63 68 61 72 20 2a 29 28 26 73 71 6c 69 74 65 33  char *)(&sqlite3
7110: 6f 6e 65 29 3d 3d 30 29 0a 23 20 64 65 66 69 6e  one)==0).# defin
7120: 65 20 53 51 4c 49 54 45 5f 4c 49 54 54 4c 45 45  e SQLITE_LITTLEE
7130: 4e 44 49 41 4e 20 28 2a 28 63 68 61 72 20 2a 29  NDIAN (*(char *)
7140: 28 26 73 71 6c 69 74 65 33 6f 6e 65 29 3d 3d 31  (&sqlite3one)==1
7150: 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  ).# define SQLIT
7160: 45 5f 55 54 46 31 36 4e 41 54 49 56 45 20 20 28  E_UTF16NATIVE  (
7170: 53 51 4c 49 54 45 5f 42 49 47 45 4e 44 49 41 4e  SQLITE_BIGENDIAN
7180: 3f 53 51 4c 49 54 45 5f 55 54 46 31 36 42 45 3a  ?SQLITE_UTF16BE:
7190: 53 51 4c 49 54 45 5f 55 54 46 31 36 4c 45 29 0a  SQLITE_UTF16LE).
71a0: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 43 6f  #endif../*.** Co
71b0: 6e 73 74 61 6e 74 73 20 66 6f 72 20 74 68 65 20  nstants for the 
71c0: 6c 61 72 67 65 73 74 20 61 6e 64 20 73 6d 61 6c  largest and smal
71d0: 6c 65 73 74 20 70 6f 73 73 69 62 6c 65 20 36 34  lest possible 64
71e0: 2d 62 69 74 20 73 69 67 6e 65 64 20 69 6e 74 65  -bit signed inte
71f0: 67 65 72 73 2e 0a 2a 2a 20 54 68 65 73 65 20 6d  gers..** These m
7200: 61 63 72 6f 73 20 61 72 65 20 64 65 73 69 67 6e  acros are design
7210: 65 64 20 74 6f 20 77 6f 72 6b 20 63 6f 72 72 65  ed to work corre
7220: 63 74 6c 79 20 6f 6e 20 62 6f 74 68 20 33 32 2d  ctly on both 32-
7230: 62 69 74 20 61 6e 64 20 36 34 2d 62 69 74 0a 2a  bit and 64-bit.*
7240: 2a 20 63 6f 6d 70 69 6c 65 72 73 2e 0a 2a 2f 0a  * compilers..*/.
7250: 23 64 65 66 69 6e 65 20 4c 41 52 47 45 53 54 5f  #define LARGEST_
7260: 49 4e 54 36 34 20 20 28 30 78 66 66 66 66 66 66  INT64  (0xffffff
7270: 66 66 7c 28 28 28 69 36 34 29 30 78 37 66 66 66  ff|(((i64)0x7fff
7280: 66 66 66 66 29 3c 3c 33 32 29 29 0a 23 64 65 66  ffff)<<32)).#def
7290: 69 6e 65 20 53 4d 41 4c 4c 45 53 54 5f 49 4e 54  ine SMALLEST_INT
72a0: 36 34 20 28 28 28 69 36 34 29 2d 31 29 20 2d 20  64 (((i64)-1) - 
72b0: 4c 41 52 47 45 53 54 5f 49 4e 54 36 34 29 0a 0a  LARGEST_INT64)..
72c0: 2f 2a 0a 2a 2a 20 52 6f 75 6e 64 20 75 70 20 61  /*.** Round up a
72d0: 20 6e 75 6d 62 65 72 20 74 6f 20 74 68 65 20 6e   number to the n
72e0: 65 78 74 20 6c 61 72 67 65 72 20 6d 75 6c 74 69  ext larger multi
72f0: 70 6c 65 20 6f 66 20 38 2e 20 20 54 68 69 73 20  ple of 8.  This 
7300: 69 73 20 75 73 65 64 0a 2a 2a 20 74 6f 20 66 6f  is used.** to fo
7310: 72 63 65 20 38 2d 62 79 74 65 20 61 6c 69 67 6e  rce 8-byte align
7320: 6d 65 6e 74 20 6f 6e 20 36 34 2d 62 69 74 20 61  ment on 64-bit a
7330: 72 63 68 69 74 65 63 74 75 72 65 73 2e 0a 2a 2f  rchitectures..*/
7340: 0a 23 64 65 66 69 6e 65 20 52 4f 55 4e 44 38 28  .#define ROUND8(
7350: 78 29 20 20 20 20 20 28 28 28 78 29 2b 37 29 26  x)     (((x)+7)&
7360: 7e 37 29 0a 0a 2f 2a 0a 2a 2a 20 52 6f 75 6e 64  ~7)../*.** Round
7370: 20 64 6f 77 6e 20 74 6f 20 74 68 65 20 6e 65 61   down to the nea
7380: 72 65 73 74 20 6d 75 6c 74 69 70 6c 65 20 6f 66  rest multiple of
7390: 20 38 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 52 4f   8.*/.#define RO
73a0: 55 4e 44 44 4f 57 4e 38 28 78 29 20 28 28 78 29  UNDDOWN8(x) ((x)
73b0: 26 7e 37 29 0a 0a 2f 2a 0a 2a 2a 20 41 73 73 65  &~7)../*.** Asse
73c0: 72 74 20 74 68 61 74 20 74 68 65 20 70 6f 69 6e  rt that the poin
73d0: 74 65 72 20 58 20 69 73 20 61 6c 69 67 6e 65 64  ter X is aligned
73e0: 20 74 6f 20 61 6e 20 38 2d 62 79 74 65 20 62 6f   to an 8-byte bo
73f0: 75 6e 64 61 72 79 2e 20 20 54 68 69 73 0a 2a 2a  undary.  This.**
7400: 20 6d 61 63 72 6f 20 69 73 20 75 73 65 64 20 6f   macro is used o
7410: 6e 6c 79 20 77 69 74 68 69 6e 20 61 73 73 65 72  nly within asser
7420: 74 28 29 20 74 6f 20 76 65 72 69 66 79 20 74 68  t() to verify th
7430: 61 74 20 74 68 65 20 63 6f 64 65 20 67 65 74 73  at the code gets
7440: 0a 2a 2a 20 61 6c 6c 20 61 6c 69 67 6e 6d 65 6e  .** all alignmen
7450: 74 20 72 65 73 74 72 69 63 74 69 6f 6e 73 20 63  t restrictions c
7460: 6f 72 72 65 63 74 2e 0a 2a 2a 0a 2a 2a 20 45 78  orrect..**.** Ex
7470: 63 65 70 74 2c 20 69 66 20 53 51 4c 49 54 45 5f  cept, if SQLITE_
7480: 34 5f 42 59 54 45 5f 41 4c 49 47 4e 45 44 5f 4d  4_BYTE_ALIGNED_M
7490: 41 4c 4c 4f 43 20 69 73 20 64 65 66 69 6e 65 64  ALLOC is defined
74a0: 2c 20 74 68 65 6e 20 74 68 65 0a 2a 2a 20 75 6e  , then the.** un
74b0: 64 65 72 6c 79 69 6e 67 20 6d 61 6c 6c 6f 63 28  derlying malloc(
74c0: 29 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  ) implementation
74d0: 20 6d 69 67 68 74 20 72 65 74 75 72 6e 20 75 73   might return us
74e0: 20 34 2d 62 79 74 65 20 61 6c 69 67 6e 65 64 0a   4-byte aligned.
74f0: 2a 2a 20 70 6f 69 6e 74 65 72 73 2e 20 20 49 6e  ** pointers.  In
7500: 20 74 68 61 74 20 63 61 73 65 2c 20 6f 6e 6c 79   that case, only
7510: 20 76 65 72 69 66 79 20 34 2d 62 79 74 65 20 61   verify 4-byte a
7520: 6c 69 67 6e 6d 65 6e 74 2e 0a 2a 2f 0a 23 69 66  lignment..*/.#if
7530: 64 65 66 20 53 51 4c 49 54 45 5f 34 5f 42 59 54  def SQLITE_4_BYT
7540: 45 5f 41 4c 49 47 4e 45 44 5f 4d 41 4c 4c 4f 43  E_ALIGNED_MALLOC
7550: 0a 23 20 64 65 66 69 6e 65 20 45 49 47 48 54 5f  .# define EIGHT_
7560: 42 59 54 45 5f 41 4c 49 47 4e 4d 45 4e 54 28 58  BYTE_ALIGNMENT(X
7570: 29 20 20 20 28 28 28 28 63 68 61 72 2a 29 28 58  )   ((((char*)(X
7580: 29 20 2d 20 28 63 68 61 72 2a 29 30 29 26 33 29  ) - (char*)0)&3)
7590: 3d 3d 30 29 0a 23 65 6c 73 65 0a 23 20 64 65 66  ==0).#else.# def
75a0: 69 6e 65 20 45 49 47 48 54 5f 42 59 54 45 5f 41  ine EIGHT_BYTE_A
75b0: 4c 49 47 4e 4d 45 4e 54 28 58 29 20 20 20 28 28  LIGNMENT(X)   ((
75c0: 28 28 63 68 61 72 2a 29 28 58 29 20 2d 20 28 63  ((char*)(X) - (c
75d0: 68 61 72 2a 29 30 29 26 37 29 3d 3d 30 29 0a 23  har*)0)&7)==0).#
75e0: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 44 69 73  endif../*.** Dis
75f0: 61 62 6c 65 20 4d 4d 41 50 20 6f 6e 20 70 6c 61  able MMAP on pla
7600: 74 66 6f 72 6d 73 20 77 68 65 72 65 20 69 74 20  tforms where it 
7610: 69 73 20 6b 6e 6f 77 6e 20 74 6f 20 6e 6f 74 20  is known to not 
7620: 77 6f 72 6b 0a 2a 2f 0a 23 69 66 20 64 65 66 69  work.*/.#if defi
7630: 6e 65 64 28 5f 5f 4f 70 65 6e 42 53 44 5f 5f 29  ned(__OpenBSD__)
7640: 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 51 4e   || defined(__QN
7650: 58 4e 54 4f 5f 5f 29 0a 23 20 75 6e 64 65 66 20  XNTO__).# undef 
7660: 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f  SQLITE_MAX_MMAP_
7670: 53 49 5a 45 0a 23 20 64 65 66 69 6e 65 20 53 51  SIZE.# define SQ
7680: 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49  LITE_MAX_MMAP_SI
7690: 5a 45 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  ZE 0.#endif../*.
76a0: 2a 2a 20 44 65 66 61 75 6c 74 20 6d 61 78 69 6d  ** Default maxim
76b0: 75 6d 20 73 69 7a 65 20 6f 66 20 6d 65 6d 6f 72  um size of memor
76c0: 79 20 75 73 65 64 20 62 79 20 6d 65 6d 6f 72 79  y used by memory
76d0: 2d 6d 61 70 70 65 64 20 49 2f 4f 20 69 6e 20 74  -mapped I/O in t
76e0: 68 65 20 56 46 53 0a 2a 2f 0a 23 69 66 64 65 66  he VFS.*/.#ifdef
76f0: 20 5f 5f 41 50 50 4c 45 5f 5f 0a 23 20 69 6e 63   __APPLE__.# inc
7700: 6c 75 64 65 20 3c 54 61 72 67 65 74 43 6f 6e 64  lude <TargetCond
7710: 69 74 69 6f 6e 61 6c 73 2e 68 3e 0a 23 65 6e 64  itionals.h>.#end
7720: 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  if.#ifndef SQLIT
7730: 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 0a  E_MAX_MMAP_SIZE.
7740: 23 20 69 66 20 64 65 66 69 6e 65 64 28 5f 5f 6c  # if defined(__l
7750: 69 6e 75 78 5f 5f 29 20 5c 0a 20 20 7c 7c 20 64  inux__) \.  || d
7760: 65 66 69 6e 65 64 28 5f 57 49 4e 33 32 29 20 5c  efined(_WIN32) \
7770: 0a 20 20 7c 7c 20 28 64 65 66 69 6e 65 64 28 5f  .  || (defined(_
7780: 5f 41 50 50 4c 45 5f 5f 29 20 26 26 20 64 65 66  _APPLE__) && def
7790: 69 6e 65 64 28 5f 5f 4d 41 43 48 5f 5f 29 29 20  ined(__MACH__)) 
77a0: 5c 0a 20 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f  \.  || defined(_
77b0: 5f 73 75 6e 29 20 5c 0a 20 20 7c 7c 20 64 65 66  _sun) \.  || def
77c0: 69 6e 65 64 28 5f 5f 46 72 65 65 42 53 44 5f 5f  ined(__FreeBSD__
77d0: 29 20 5c 0a 20 20 7c 7c 20 64 65 66 69 6e 65 64  ) \.  || defined
77e0: 28 5f 5f 44 72 61 67 6f 6e 46 6c 79 5f 5f 29 0a  (__DragonFly__).
77f0: 23 20 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54  #   define SQLIT
7800: 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 20  E_MAX_MMAP_SIZE 
7810: 30 78 37 66 66 66 30 30 30 30 20 20 2f 2a 20 32  0x7fff0000  /* 2
7820: 31 34 37 34 31 38 31 31 32 20 2a 2f 0a 23 20 65  147418112 */.# e
7830: 6c 73 65 0a 23 20 20 20 64 65 66 69 6e 65 20 53  lse.#   define S
7840: 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53  QLITE_MAX_MMAP_S
7850: 49 5a 45 20 30 0a 23 20 65 6e 64 69 66 0a 23 65  IZE 0.# endif.#e
7860: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  ndif../*.** The 
7870: 64 65 66 61 75 6c 74 20 4d 4d 41 50 5f 53 49 5a  default MMAP_SIZ
7880: 45 20 69 73 20 7a 65 72 6f 20 6f 6e 20 61 6c 6c  E is zero on all
7890: 20 70 6c 61 74 66 6f 72 6d 73 2e 20 20 4f 72 2c   platforms.  Or,
78a0: 20 65 76 65 6e 20 69 66 20 61 20 6c 61 72 67 65   even if a large
78b0: 72 0a 2a 2a 20 64 65 66 61 75 6c 74 20 4d 4d 41  r.** default MMA
78c0: 50 5f 53 49 5a 45 20 69 73 20 73 70 65 63 69 66  P_SIZE is specif
78d0: 69 65 64 20 61 74 20 63 6f 6d 70 69 6c 65 2d 74  ied at compile-t
78e0: 69 6d 65 2c 20 6d 61 6b 65 20 73 75 72 65 20 74  ime, make sure t
78f0: 68 61 74 20 69 74 20 64 6f 65 73 0a 2a 2a 20 6e  hat it does.** n
7900: 6f 74 20 65 78 63 65 65 64 20 74 68 65 20 6d 61  ot exceed the ma
7910: 78 69 6d 75 6d 20 6d 6d 61 70 20 73 69 7a 65 2e  ximum mmap size.
7920: 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  .*/.#ifndef SQLI
7930: 54 45 5f 44 45 46 41 55 4c 54 5f 4d 4d 41 50 5f  TE_DEFAULT_MMAP_
7940: 53 49 5a 45 0a 23 20 64 65 66 69 6e 65 20 53 51  SIZE.# define SQ
7950: 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d 4d 41  LITE_DEFAULT_MMA
7960: 50 5f 53 49 5a 45 20 30 0a 23 65 6e 64 69 66 0a  P_SIZE 0.#endif.
7970: 23 69 66 20 53 51 4c 49 54 45 5f 44 45 46 41 55  #if SQLITE_DEFAU
7980: 4c 54 5f 4d 4d 41 50 5f 53 49 5a 45 3e 53 51 4c  LT_MMAP_SIZE>SQL
7990: 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a  ITE_MAX_MMAP_SIZ
79a0: 45 0a 23 20 75 6e 64 65 66 20 53 51 4c 49 54 45  E.# undef SQLITE
79b0: 5f 44 45 46 41 55 4c 54 5f 4d 4d 41 50 5f 53 49  _DEFAULT_MMAP_SI
79c0: 5a 45 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  ZE.# define SQLI
79d0: 54 45 5f 44 45 46 41 55 4c 54 5f 4d 4d 41 50 5f  TE_DEFAULT_MMAP_
79e0: 53 49 5a 45 20 53 51 4c 49 54 45 5f 4d 41 58 5f  SIZE SQLITE_MAX_
79f0: 4d 4d 41 50 5f 53 49 5a 45 0a 23 65 6e 64 69 66  MMAP_SIZE.#endif
7a00: 0a 0a 2f 2a 0a 2a 2a 20 4f 6e 6c 79 20 6f 6e 65  ../*.** Only one
7a10: 20 6f 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c   of SQLITE_ENABL
7a20: 45 5f 53 54 41 54 33 20 6f 72 20 53 51 4c 49 54  E_STAT3 or SQLIT
7a30: 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 34 20 63  E_ENABLE_STAT4 c
7a40: 61 6e 20 62 65 20 64 65 66 69 6e 65 64 2e 0a 2a  an be defined..*
7a50: 2a 20 50 72 69 6f 72 69 74 79 20 69 73 20 67 69  * Priority is gi
7a60: 76 65 6e 20 74 6f 20 53 51 4c 49 54 45 5f 45 4e  ven to SQLITE_EN
7a70: 41 42 4c 45 5f 53 54 41 54 34 2e 20 20 49 66 20  ABLE_STAT4.  If 
7a80: 65 69 74 68 65 72 20 61 72 65 20 64 65 66 69 6e  either are defin
7a90: 65 64 2c 20 61 6c 73 6f 0a 2a 2a 20 64 65 66 69  ed, also.** defi
7aa0: 6e 65 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ne SQLITE_ENABLE
7ab0: 5f 53 54 41 54 33 5f 4f 52 5f 53 54 41 54 34 0a  _STAT3_OR_STAT4.
7ac0: 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
7ad0: 5f 45 4e 41 42 4c 45 5f 53 54 41 54 34 0a 23 20  _ENABLE_STAT4.# 
7ae0: 75 6e 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  undef SQLITE_ENA
7af0: 42 4c 45 5f 53 54 41 54 33 0a 23 20 64 65 66 69  BLE_STAT3.# defi
7b00: 6e 65 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ne SQLITE_ENABLE
7b10: 5f 53 54 41 54 33 5f 4f 52 5f 53 54 41 54 34 20  _STAT3_OR_STAT4 
7b20: 31 0a 23 65 6c 69 66 20 53 51 4c 49 54 45 5f 45  1.#elif SQLITE_E
7b30: 4e 41 42 4c 45 5f 53 54 41 54 33 0a 23 20 64 65  NABLE_STAT3.# de
7b40: 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 4e 41 42  fine SQLITE_ENAB
7b50: 4c 45 5f 53 54 41 54 33 5f 4f 52 5f 53 54 41 54  LE_STAT3_OR_STAT
7b60: 34 20 31 0a 23 65 6c 69 66 20 53 51 4c 49 54 45  4 1.#elif SQLITE
7b70: 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 5f 4f 52  _ENABLE_STAT3_OR
7b80: 5f 53 54 41 54 34 0a 23 20 75 6e 64 65 66 20 53  _STAT4.# undef S
7b90: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41  QLITE_ENABLE_STA
7ba0: 54 33 5f 4f 52 5f 53 54 41 54 34 0a 23 65 6e 64  T3_OR_STAT4.#end
7bb0: 69 66 0a 0a 2f 2a 0a 2a 2a 20 53 45 4c 45 43 54  if../*.** SELECT
7bc0: 54 52 41 43 45 5f 45 4e 41 42 4c 45 44 20 77 69  TRACE_ENABLED wi
7bd0: 6c 6c 20 62 65 20 65 69 74 68 65 72 20 31 20 6f  ll be either 1 o
7be0: 72 20 30 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e  r 0 depending on
7bf0: 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 0a   whether or not.
7c00: 2a 2a 20 74 68 65 20 53 65 6c 65 63 74 20 71 75  ** the Select qu
7c10: 65 72 79 20 67 65 6e 65 72 61 74 6f 72 20 74 72  ery generator tr
7c20: 61 63 69 6e 67 20 6c 6f 67 69 63 20 69 73 20 74  acing logic is t
7c30: 75 72 6e 65 64 20 6f 6e 2e 0a 2a 2f 0a 23 69 66  urned on..*/.#if
7c40: 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
7c50: 45 4e 41 42 4c 45 5f 53 45 4c 45 43 54 54 52 41  ENABLE_SELECTTRA
7c60: 43 45 29 0a 23 20 64 65 66 69 6e 65 20 53 45 4c  CE).# define SEL
7c70: 45 43 54 54 52 41 43 45 5f 45 4e 41 42 4c 45 44  ECTTRACE_ENABLED
7c80: 20 31 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e   1.#else.# defin
7c90: 65 20 53 45 4c 45 43 54 54 52 41 43 45 5f 45 4e  e SELECTTRACE_EN
7ca0: 41 42 4c 45 44 20 30 0a 23 65 6e 64 69 66 0a 0a  ABLED 0.#endif..
7cb0: 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63  /*.** An instanc
7cc0: 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69  e of the followi
7cd0: 6e 67 20 73 74 72 75 63 74 75 72 65 20 69 73 20  ng structure is 
7ce0: 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20 74 68  used to store th
7cf0: 65 20 62 75 73 79 2d 68 61 6e 64 6c 65 72 0a 2a  e busy-handler.*
7d00: 2a 20 63 61 6c 6c 62 61 63 6b 20 66 6f 72 20 61  * callback for a
7d10: 20 67 69 76 65 6e 20 73 71 6c 69 74 65 20 68 61   given sqlite ha
7d20: 6e 64 6c 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  ndle..**.** The 
7d30: 73 71 6c 69 74 65 2e 62 75 73 79 48 61 6e 64 6c  sqlite.busyHandl
7d40: 65 72 20 6d 65 6d 62 65 72 20 6f 66 20 74 68 65  er member of the
7d50: 20 73 71 6c 69 74 65 20 73 74 72 75 63 74 20 63   sqlite struct c
7d60: 6f 6e 74 61 69 6e 73 20 74 68 65 20 62 75 73 79  ontains the busy
7d70: 0a 2a 2a 20 63 61 6c 6c 62 61 63 6b 20 66 6f 72  .** callback for
7d80: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 68 61   the database ha
7d90: 6e 64 6c 65 2e 20 45 61 63 68 20 70 61 67 65 72  ndle. Each pager
7da0: 20 6f 70 65 6e 65 64 20 76 69 61 20 74 68 65 20   opened via the 
7db0: 73 71 6c 69 74 65 0a 2a 2a 20 68 61 6e 64 6c 65  sqlite.** handle
7dc0: 20 69 73 20 70 61 73 73 65 64 20 61 20 70 6f 69   is passed a poi
7dd0: 6e 74 65 72 20 74 6f 20 73 71 6c 69 74 65 2e 62  nter to sqlite.b
7de0: 75 73 79 48 61 6e 64 6c 65 72 2e 20 54 68 65 20  usyHandler. The 
7df0: 62 75 73 79 2d 68 61 6e 64 6c 65 72 0a 2a 2a 20  busy-handler.** 
7e00: 63 61 6c 6c 62 61 63 6b 20 69 73 20 63 75 72 72  callback is curr
7e10: 65 6e 74 6c 79 20 69 6e 76 6f 6b 65 64 20 6f 6e  ently invoked on
7e20: 6c 79 20 66 72 6f 6d 20 77 69 74 68 69 6e 20 70  ly from within p
7e30: 61 67 65 72 2e 63 2e 0a 2a 2f 0a 74 79 70 65 64  ager.c..*/.typed
7e40: 65 66 20 73 74 72 75 63 74 20 42 75 73 79 48 61  ef struct BusyHa
7e50: 6e 64 6c 65 72 20 42 75 73 79 48 61 6e 64 6c 65  ndler BusyHandle
7e60: 72 3b 0a 73 74 72 75 63 74 20 42 75 73 79 48 61  r;.struct BusyHa
7e70: 6e 64 6c 65 72 20 7b 0a 20 20 69 6e 74 20 28 2a  ndler {.  int (*
7e80: 78 42 75 73 79 48 61 6e 64 6c 65 72 29 28 76 6f  xBusyHandler)(vo
7e90: 69 64 20 2a 2c 69 6e 74 29 3b 20 20 2f 2a 20 54  id *,int);  /* T
7ea0: 68 65 20 62 75 73 79 20 63 61 6c 6c 62 61 63 6b  he busy callback
7eb0: 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 42 75 73   */.  void *pBus
7ec0: 79 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20  yArg;           
7ed0: 20 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74          /* First
7ee0: 20 61 72 67 20 74 6f 20 62 75 73 79 20 63 61 6c   arg to busy cal
7ef0: 6c 62 61 63 6b 20 2a 2f 0a 20 20 69 6e 74 20 6e  lback */.  int n
7f00: 42 75 73 79 3b 20 20 20 20 20 20 20 20 20 20 20  Busy;           
7f10: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
7f20: 49 6e 63 72 65 6d 65 6e 74 65 64 20 77 69 74 68  Incremented with
7f30: 20 65 61 63 68 20 62 75 73 79 20 63 61 6c 6c 20   each busy call 
7f40: 2a 2f 0a 20 20 75 38 20 62 45 78 74 72 61 46 69  */.  u8 bExtraFi
7f50: 6c 65 41 72 67 3b 20 20 20 20 20 20 20 20 20 20  leArg;          
7f60: 20 20 20 20 20 20 20 2f 2a 20 49 6e 63 6c 75 64         /* Includ
7f70: 65 20 73 71 6c 69 74 65 33 5f 66 69 6c 65 20 61  e sqlite3_file a
7f80: 73 20 63 61 6c 6c 62 61 63 6b 20 61 72 67 20 2a  s callback arg *
7f90: 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 4e 61 6d 65  /.};../*.** Name
7fa0: 20 6f 66 20 74 68 65 20 6d 61 73 74 65 72 20 64   of the master d
7fb0: 61 74 61 62 61 73 65 20 74 61 62 6c 65 2e 20 20  atabase table.  
7fc0: 54 68 65 20 6d 61 73 74 65 72 20 64 61 74 61 62  The master datab
7fd0: 61 73 65 20 74 61 62 6c 65 0a 2a 2a 20 69 73 20  ase table.** is 
7fe0: 61 20 73 70 65 63 69 61 6c 20 74 61 62 6c 65 20  a special table 
7ff0: 74 68 61 74 20 68 6f 6c 64 73 20 74 68 65 20 6e  that holds the n
8000: 61 6d 65 73 20 61 6e 64 20 61 74 74 72 69 62 75  ames and attribu
8010: 74 65 73 20 6f 66 20 61 6c 6c 0a 2a 2a 20 75 73  tes of all.** us
8020: 65 72 20 74 61 62 6c 65 73 20 61 6e 64 20 69 6e  er tables and in
8030: 64 69 63 65 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e  dices..*/.#defin
8040: 65 20 4d 41 53 54 45 52 5f 4e 41 4d 45 20 20 20  e MASTER_NAME   
8050: 20 20 20 20 22 73 71 6c 69 74 65 5f 6d 61 73 74      "sqlite_mast
8060: 65 72 22 0a 23 64 65 66 69 6e 65 20 54 45 4d 50  er".#define TEMP
8070: 5f 4d 41 53 54 45 52 5f 4e 41 4d 45 20 20 22 73  _MASTER_NAME  "s
8080: 71 6c 69 74 65 5f 74 65 6d 70 5f 6d 61 73 74 65  qlite_temp_maste
8090: 72 22 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 72 6f  r"../*.** The ro
80a0: 6f 74 2d 70 61 67 65 20 6f 66 20 74 68 65 20 6d  ot-page of the m
80b0: 61 73 74 65 72 20 64 61 74 61 62 61 73 65 20 74  aster database t
80c0: 61 62 6c 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  able..*/.#define
80d0: 20 4d 41 53 54 45 52 5f 52 4f 4f 54 20 20 20 20   MASTER_ROOT    
80e0: 20 20 20 31 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20     1../*.** The 
80f0: 6e 61 6d 65 20 6f 66 20 74 68 65 20 73 63 68 65  name of the sche
8100: 6d 61 20 74 61 62 6c 65 2e 0a 2a 2f 0a 23 64 65  ma table..*/.#de
8110: 66 69 6e 65 20 53 43 48 45 4d 41 5f 54 41 42 4c  fine SCHEMA_TABL
8120: 45 28 78 29 20 20 28 28 21 4f 4d 49 54 5f 54 45  E(x)  ((!OMIT_TE
8130: 4d 50 44 42 29 26 26 28 78 3d 3d 31 29 3f 54 45  MPDB)&&(x==1)?TE
8140: 4d 50 5f 4d 41 53 54 45 52 5f 4e 41 4d 45 3a 4d  MP_MASTER_NAME:M
8150: 41 53 54 45 52 5f 4e 41 4d 45 29 0a 0a 2f 2a 0a  ASTER_NAME)../*.
8160: 2a 2a 20 41 20 63 6f 6e 76 65 6e 69 65 6e 63 65  ** A convenience
8170: 20 6d 61 63 72 6f 20 74 68 61 74 20 72 65 74 75   macro that retu
8180: 72 6e 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f  rns the number o
8190: 66 20 65 6c 65 6d 65 6e 74 73 20 69 6e 0a 2a 2a  f elements in.**
81a0: 20 61 6e 20 61 72 72 61 79 2e 0a 2a 2f 0a 23 64   an array..*/.#d
81b0: 65 66 69 6e 65 20 41 72 72 61 79 53 69 7a 65 28  efine ArraySize(
81c0: 58 29 20 20 20 20 28 28 69 6e 74 29 28 73 69 7a  X)    ((int)(siz
81d0: 65 6f 66 28 58 29 2f 73 69 7a 65 6f 66 28 58 5b  eof(X)/sizeof(X[
81e0: 30 5d 29 29 29 0a 0a 2f 2a 0a 2a 2a 20 44 65 74  0])))../*.** Det
81f0: 65 72 6d 69 6e 65 20 69 66 20 74 68 65 20 61 72  ermine if the ar
8200: 67 75 6d 65 6e 74 20 69 73 20 61 20 70 6f 77 65  gument is a powe
8210: 72 20 6f 66 20 74 77 6f 0a 2a 2f 0a 23 64 65 66  r of two.*/.#def
8220: 69 6e 65 20 49 73 50 6f 77 65 72 4f 66 54 77 6f  ine IsPowerOfTwo
8230: 28 58 29 20 28 28 28 58 29 26 28 28 58 29 2d 31  (X) (((X)&((X)-1
8240: 29 29 3d 3d 30 29 0a 0a 2f 2a 0a 2a 2a 20 54 68  ))==0)../*.** Th
8250: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 76 61 6c 75  e following valu
8260: 65 20 61 73 20 61 20 64 65 73 74 72 75 63 74 6f  e as a destructo
8270: 72 20 6d 65 61 6e 73 20 74 6f 20 75 73 65 20 73  r means to use s
8280: 71 6c 69 74 65 33 44 62 46 72 65 65 28 29 2e 0a  qlite3DbFree()..
8290: 2a 2a 20 54 68 65 20 73 71 6c 69 74 65 33 44 62  ** The sqlite3Db
82a0: 46 72 65 65 28 29 20 72 6f 75 74 69 6e 65 20 72  Free() routine r
82b0: 65 71 75 69 72 65 73 20 74 77 6f 20 70 61 72 61  equires two para
82c0: 6d 65 74 65 72 73 20 69 6e 73 74 65 61 64 20 6f  meters instead o
82d0: 66 20 74 68 65 0a 2a 2a 20 6f 6e 65 20 70 61 72  f the.** one par
82e0: 61 6d 65 74 65 72 20 74 68 61 74 20 64 65 73 74  ameter that dest
82f0: 72 75 63 74 6f 72 73 20 6e 6f 72 6d 61 6c 6c 79  ructors normally
8300: 20 77 61 6e 74 2e 20 20 53 6f 20 77 65 20 68 61   want.  So we ha
8310: 76 65 20 74 6f 20 69 6e 74 72 6f 64 75 63 65 0a  ve to introduce.
8320: 2a 2a 20 74 68 69 73 20 6d 61 67 69 63 20 76 61  ** this magic va
8330: 6c 75 65 20 74 68 61 74 20 74 68 65 20 63 6f 64  lue that the cod
8340: 65 20 6b 6e 6f 77 73 20 74 6f 20 68 61 6e 64 6c  e knows to handl
8350: 65 20 64 69 66 66 65 72 65 6e 74 6c 79 2e 20 20  e differently.  
8360: 41 6e 79 0a 2a 2a 20 70 6f 69 6e 74 65 72 20 77  Any.** pointer w
8370: 69 6c 6c 20 77 6f 72 6b 20 68 65 72 65 20 61 73  ill work here as
8380: 20 6c 6f 6e 67 20 61 73 20 69 74 20 69 73 20 64   long as it is d
8390: 69 73 74 69 6e 63 74 20 66 72 6f 6d 20 53 51 4c  istinct from SQL
83a0: 49 54 45 5f 53 54 41 54 49 43 0a 2a 2a 20 61 6e  ITE_STATIC.** an
83b0: 64 20 53 51 4c 49 54 45 5f 54 52 41 4e 53 49 45  d SQLITE_TRANSIE
83c0: 4e 54 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53  NT..*/.#define S
83d0: 51 4c 49 54 45 5f 44 59 4e 41 4d 49 43 20 20 20  QLITE_DYNAMIC   
83e0: 28 28 73 71 6c 69 74 65 33 5f 64 65 73 74 72 75  ((sqlite3_destru
83f0: 63 74 6f 72 5f 74 79 70 65 29 73 71 6c 69 74 65  ctor_type)sqlite
8400: 33 4d 61 6c 6c 6f 63 53 69 7a 65 29 0a 0a 2f 2a  3MallocSize)../*
8410: 0a 2a 2a 20 57 68 65 6e 20 53 51 4c 49 54 45 5f  .** When SQLITE_
8420: 4f 4d 49 54 5f 57 53 44 20 69 73 20 64 65 66 69  OMIT_WSD is defi
8430: 6e 65 64 2c 20 69 74 20 6d 65 61 6e 73 20 74 68  ned, it means th
8440: 61 74 20 74 68 65 20 74 61 72 67 65 74 20 70 6c  at the target pl
8450: 61 74 66 6f 72 6d 20 64 6f 65 73 0a 2a 2a 20 6e  atform does.** n
8460: 6f 74 20 73 75 70 70 6f 72 74 20 57 72 69 74 61  ot support Writa
8470: 62 6c 65 20 53 74 61 74 69 63 20 44 61 74 61 20  ble Static Data 
8480: 28 57 53 44 29 20 73 75 63 68 20 61 73 20 67 6c  (WSD) such as gl
8490: 6f 62 61 6c 20 61 6e 64 20 73 74 61 74 69 63 20  obal and static 
84a0: 76 61 72 69 61 62 6c 65 73 2e 0a 2a 2a 20 41 6c  variables..** Al
84b0: 6c 20 76 61 72 69 61 62 6c 65 73 20 6d 75 73 74  l variables must
84c0: 20 65 69 74 68 65 72 20 62 65 20 6f 6e 20 74 68   either be on th
84d0: 65 20 73 74 61 63 6b 20 6f 72 20 64 79 6e 61 6d  e stack or dynam
84e0: 69 63 61 6c 6c 79 20 61 6c 6c 6f 63 61 74 65 64  ically allocated
84f0: 20 66 72 6f 6d 0a 2a 2a 20 74 68 65 20 68 65 61   from.** the hea
8500: 70 2e 20 20 57 68 65 6e 20 57 53 44 20 69 73 20  p.  When WSD is 
8510: 75 6e 73 75 70 70 6f 72 74 65 64 2c 20 74 68 65  unsupported, the
8520: 20 76 61 72 69 61 62 6c 65 20 64 65 63 6c 61 72   variable declar
8530: 61 74 69 6f 6e 73 20 73 63 61 74 74 65 72 65 64  ations scattered
8540: 0a 2a 2a 20 74 68 72 6f 75 67 68 6f 75 74 20 74  .** throughout t
8550: 68 65 20 53 51 4c 69 74 65 20 63 6f 64 65 20 6d  he SQLite code m
8560: 75 73 74 20 62 65 63 6f 6d 65 20 63 6f 6e 73 74  ust become const
8570: 61 6e 74 73 20 69 6e 73 74 65 61 64 2e 20 20 54  ants instead.  T
8580: 68 65 20 53 51 4c 49 54 45 5f 57 53 44 0a 2a 2a  he SQLITE_WSD.**
8590: 20 6d 61 63 72 6f 20 69 73 20 75 73 65 64 20 66   macro is used f
85a0: 6f 72 20 74 68 69 73 20 70 75 72 70 6f 73 65 2e  or this purpose.
85b0: 20 20 41 6e 64 20 69 6e 73 74 65 61 64 20 6f 66    And instead of
85c0: 20 72 65 66 65 72 65 6e 63 69 6e 67 20 74 68 65   referencing the
85d0: 20 76 61 72 69 61 62 6c 65 0a 2a 2a 20 64 69 72   variable.** dir
85e0: 65 63 74 6c 79 2c 20 77 65 20 75 73 65 20 69 74  ectly, we use it
85f0: 73 20 63 6f 6e 73 74 61 6e 74 20 61 73 20 61 20  s constant as a 
8600: 6b 65 79 20 74 6f 20 6c 6f 6f 6b 75 70 20 74 68  key to lookup th
8610: 65 20 72 75 6e 2d 74 69 6d 65 20 61 6c 6c 6f 63  e run-time alloc
8620: 61 74 65 64 0a 2a 2a 20 62 75 66 66 65 72 20 74  ated.** buffer t
8630: 68 61 74 20 68 6f 6c 64 73 20 72 65 61 6c 20 76  hat holds real v
8640: 61 72 69 61 62 6c 65 2e 20 20 54 68 65 20 63 6f  ariable.  The co
8650: 6e 73 74 61 6e 74 20 69 73 20 61 6c 73 6f 20 74  nstant is also t
8660: 68 65 20 69 6e 69 74 69 61 6c 69 7a 65 72 0a 2a  he initializer.*
8670: 2a 20 66 6f 72 20 74 68 65 20 72 75 6e 2d 74 69  * for the run-ti
8680: 6d 65 20 61 6c 6c 6f 63 61 74 65 64 20 62 75 66  me allocated buf
8690: 66 65 72 2e 0a 2a 2a 0a 2a 2a 20 49 6e 20 74 68  fer..**.** In th
86a0: 65 20 75 73 75 61 6c 20 63 61 73 65 20 77 68 65  e usual case whe
86b0: 72 65 20 57 53 44 20 69 73 20 73 75 70 70 6f 72  re WSD is suppor
86c0: 74 65 64 2c 20 74 68 65 20 53 51 4c 49 54 45 5f  ted, the SQLITE_
86d0: 57 53 44 20 61 6e 64 20 47 4c 4f 42 41 4c 0a 2a  WSD and GLOBAL.*
86e0: 2a 20 6d 61 63 72 6f 73 20 62 65 63 6f 6d 65 20  * macros become 
86f0: 6e 6f 2d 6f 70 73 20 61 6e 64 20 68 61 76 65 20  no-ops and have 
8700: 7a 65 72 6f 20 70 65 72 66 6f 72 6d 61 6e 63 65  zero performance
8710: 20 69 6d 70 61 63 74 2e 0a 2a 2f 0a 23 69 66 64   impact..*/.#ifd
8720: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57  ef SQLITE_OMIT_W
8730: 53 44 0a 20 20 23 64 65 66 69 6e 65 20 53 51 4c  SD.  #define SQL
8740: 49 54 45 5f 57 53 44 20 63 6f 6e 73 74 0a 20 20  ITE_WSD const.  
8750: 23 64 65 66 69 6e 65 20 47 4c 4f 42 41 4c 28 74  #define GLOBAL(t
8760: 2c 76 29 20 28 2a 28 74 2a 29 73 71 6c 69 74 65  ,v) (*(t*)sqlite
8770: 33 5f 77 73 64 5f 66 69 6e 64 28 28 76 6f 69 64  3_wsd_find((void
8780: 2a 29 26 28 76 29 2c 20 73 69 7a 65 6f 66 28 76  *)&(v), sizeof(v
8790: 29 29 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71  ))).  #define sq
87a0: 6c 69 74 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69  lite3GlobalConfi
87b0: 67 20 47 4c 4f 42 41 4c 28 73 74 72 75 63 74 20  g GLOBAL(struct 
87c0: 53 71 6c 69 74 65 33 43 6f 6e 66 69 67 2c 20 73  Sqlite3Config, s
87d0: 71 6c 69 74 65 33 43 6f 6e 66 69 67 29 0a 20 20  qlite3Config).  
87e0: 69 6e 74 20 73 71 6c 69 74 65 33 5f 77 73 64 5f  int sqlite3_wsd_
87f0: 69 6e 69 74 28 69 6e 74 20 4e 2c 20 69 6e 74 20  init(int N, int 
8800: 4a 29 3b 0a 20 20 76 6f 69 64 20 2a 73 71 6c 69  J);.  void *sqli
8810: 74 65 33 5f 77 73 64 5f 66 69 6e 64 28 76 6f 69  te3_wsd_find(voi
8820: 64 20 2a 4b 2c 20 69 6e 74 20 4c 29 3b 0a 23 65  d *K, int L);.#e
8830: 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20 53 51  lse.  #define SQ
8840: 4c 49 54 45 5f 57 53 44 0a 20 20 23 64 65 66 69  LITE_WSD.  #defi
8850: 6e 65 20 47 4c 4f 42 41 4c 28 74 2c 76 29 20 76  ne GLOBAL(t,v) v
8860: 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74  .  #define sqlit
8870: 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 20 73  e3GlobalConfig s
8880: 71 6c 69 74 65 33 43 6f 6e 66 69 67 0a 23 65 6e  qlite3Config.#en
8890: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66  dif../*.** The f
88a0: 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 73 20  ollowing macros 
88b0: 61 72 65 20 75 73 65 64 20 74 6f 20 73 75 70 70  are used to supp
88c0: 72 65 73 73 20 63 6f 6d 70 69 6c 65 72 20 77 61  ress compiler wa
88d0: 72 6e 69 6e 67 73 20 61 6e 64 20 74 6f 0a 2a 2a  rnings and to.**
88e0: 20 6d 61 6b 65 20 69 74 20 63 6c 65 61 72 20 74   make it clear t
88f0: 6f 20 68 75 6d 61 6e 20 72 65 61 64 65 72 73 20  o human readers 
8900: 77 68 65 6e 20 61 20 66 75 6e 63 74 69 6f 6e 20  when a function 
8910: 70 61 72 61 6d 65 74 65 72 20 69 73 20 64 65 6c  parameter is del
8920: 69 62 65 72 61 74 65 6c 79 0a 2a 2a 20 6c 65 66  iberately.** lef
8930: 74 20 75 6e 75 73 65 64 20 77 69 74 68 69 6e 20  t unused within 
8940: 74 68 65 20 62 6f 64 79 20 6f 66 20 61 20 66 75  the body of a fu
8950: 6e 63 74 69 6f 6e 2e 20 54 68 69 73 20 75 73 75  nction. This usu
8960: 61 6c 6c 79 20 68 61 70 70 65 6e 73 20 77 68 65  ally happens whe
8970: 6e 0a 2a 2a 20 61 20 66 75 6e 63 74 69 6f 6e 20  n.** a function 
8980: 69 73 20 63 61 6c 6c 65 64 20 76 69 61 20 61 20  is called via a 
8990: 66 75 6e 63 74 69 6f 6e 20 70 6f 69 6e 74 65 72  function pointer
89a0: 2e 20 46 6f 72 20 65 78 61 6d 70 6c 65 20 74 68  . For example th
89b0: 65 0a 2a 2a 20 69 6d 70 6c 65 6d 65 6e 74 61 74  e.** implementat
89c0: 69 6f 6e 20 6f 66 20 61 6e 20 53 51 4c 20 61 67  ion of an SQL ag
89d0: 67 72 65 67 61 74 65 20 73 74 65 70 20 63 61 6c  gregate step cal
89e0: 6c 62 61 63 6b 20 6d 61 79 20 6e 6f 74 20 75 73  lback may not us
89f0: 65 20 74 68 65 0a 2a 2a 20 70 61 72 61 6d 65 74  e the.** paramet
8a00: 65 72 20 69 6e 64 69 63 61 74 69 6e 67 20 74 68  er indicating th
8a10: 65 20 6e 75 6d 62 65 72 20 6f 66 20 61 72 67 75  e number of argu
8a20: 6d 65 6e 74 73 20 70 61 73 73 65 64 20 74 6f 20  ments passed to 
8a30: 74 68 65 20 61 67 67 72 65 67 61 74 65 2c 0a 2a  the aggregate,.*
8a40: 2a 20 69 66 20 69 74 20 6b 6e 6f 77 73 20 74 68  * if it knows th
8a50: 61 74 20 74 68 69 73 20 69 73 20 65 6e 66 6f 72  at this is enfor
8a60: 63 65 64 20 65 6c 73 65 77 68 65 72 65 2e 0a 2a  ced elsewhere..*
8a70: 2a 0a 2a 2a 20 57 68 65 6e 20 61 20 66 75 6e 63  *.** When a func
8a80: 74 69 6f 6e 20 70 61 72 61 6d 65 74 65 72 20 69  tion parameter i
8a90: 73 20 6e 6f 74 20 75 73 65 64 20 61 74 20 61 6c  s not used at al
8aa0: 6c 20 77 69 74 68 69 6e 20 74 68 65 20 62 6f 64  l within the bod
8ab0: 79 20 6f 66 20 61 20 66 75 6e 63 74 69 6f 6e 2c  y of a function,
8ac0: 0a 2a 2a 20 69 74 20 69 73 20 67 65 6e 65 72 61  .** it is genera
8ad0: 6c 6c 79 20 6e 61 6d 65 64 20 22 4e 6f 74 55 73  lly named "NotUs
8ae0: 65 64 22 20 6f 72 20 22 4e 6f 74 55 73 65 64 32  ed" or "NotUsed2
8af0: 22 20 74 6f 20 6d 61 6b 65 20 74 68 69 6e 67 73  " to make things
8b00: 20 65 76 65 6e 20 63 6c 65 61 72 65 72 2e 0a 2a   even clearer..*
8b10: 2a 20 48 6f 77 65 76 65 72 2c 20 74 68 65 73 65  * However, these
8b20: 20 6d 61 63 72 6f 73 20 6d 61 79 20 61 6c 73 6f   macros may also
8b30: 20 62 65 20 75 73 65 64 20 74 6f 20 73 75 70 70   be used to supp
8b40: 72 65 73 73 20 77 61 72 6e 69 6e 67 73 20 72 65  ress warnings re
8b50: 6c 61 74 65 64 20 74 6f 0a 2a 2a 20 70 61 72 61  lated to.** para
8b60: 6d 65 74 65 72 73 20 74 68 61 74 20 6d 61 79 20  meters that may 
8b70: 6f 72 20 6d 61 79 20 6e 6f 74 20 62 65 20 75 73  or may not be us
8b80: 65 64 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20  ed depending on 
8b90: 63 6f 6d 70 69 6c 61 74 69 6f 6e 20 6f 70 74 69  compilation opti
8ba0: 6f 6e 73 2e 0a 2a 2a 20 46 6f 72 20 65 78 61 6d  ons..** For exam
8bb0: 70 6c 65 20 74 68 6f 73 65 20 70 61 72 61 6d 65  ple those parame
8bc0: 74 65 72 73 20 6f 6e 6c 79 20 75 73 65 64 20 69  ters only used i
8bd0: 6e 20 61 73 73 65 72 74 28 29 20 73 74 61 74 65  n assert() state
8be0: 6d 65 6e 74 73 2e 20 49 6e 20 74 68 65 73 65 0a  ments. In these.
8bf0: 2a 2a 20 63 61 73 65 73 20 74 68 65 20 70 61 72  ** cases the par
8c00: 61 6d 65 74 65 72 73 20 61 72 65 20 6e 61 6d 65  ameters are name
8c10: 64 20 61 73 20 70 65 72 20 74 68 65 20 75 73 75  d as per the usu
8c20: 61 6c 20 63 6f 6e 76 65 6e 74 69 6f 6e 73 2e 0a  al conventions..
8c30: 2a 2f 0a 23 64 65 66 69 6e 65 20 55 4e 55 53 45  */.#define UNUSE
8c40: 44 5f 50 41 52 41 4d 45 54 45 52 28 78 29 20 28  D_PARAMETER(x) (
8c50: 76 6f 69 64 29 28 78 29 0a 23 64 65 66 69 6e 65  void)(x).#define
8c60: 20 55 4e 55 53 45 44 5f 50 41 52 41 4d 45 54 45   UNUSED_PARAMETE
8c70: 52 32 28 78 2c 79 29 20 55 4e 55 53 45 44 5f 50  R2(x,y) UNUSED_P
8c80: 41 52 41 4d 45 54 45 52 28 78 29 2c 55 4e 55 53  ARAMETER(x),UNUS
8c90: 45 44 5f 50 41 52 41 4d 45 54 45 52 28 79 29 0a  ED_PARAMETER(y).
8ca0: 0a 2f 2a 0a 2a 2a 20 46 6f 72 77 61 72 64 20 72  ./*.** Forward r
8cb0: 65 66 65 72 65 6e 63 65 73 20 74 6f 20 73 74 72  eferences to str
8cc0: 75 63 74 75 72 65 73 0a 2a 2f 0a 74 79 70 65 64  uctures.*/.typed
8cd0: 65 66 20 73 74 72 75 63 74 20 41 67 67 49 6e 66  ef struct AggInf
8ce0: 6f 20 41 67 67 49 6e 66 6f 3b 0a 74 79 70 65 64  o AggInfo;.typed
8cf0: 65 66 20 73 74 72 75 63 74 20 41 75 74 68 43 6f  ef struct AuthCo
8d00: 6e 74 65 78 74 20 41 75 74 68 43 6f 6e 74 65 78  ntext AuthContex
8d10: 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  t;.typedef struc
8d20: 74 20 41 75 74 6f 69 6e 63 49 6e 66 6f 20 41 75  t AutoincInfo Au
8d30: 74 6f 69 6e 63 49 6e 66 6f 3b 0a 74 79 70 65 64  toincInfo;.typed
8d40: 65 66 20 73 74 72 75 63 74 20 42 69 74 76 65 63  ef struct Bitvec
8d50: 20 42 69 74 76 65 63 3b 0a 74 79 70 65 64 65 66   Bitvec;.typedef
8d60: 20 73 74 72 75 63 74 20 43 6f 6c 6c 53 65 71 20   struct CollSeq 
8d70: 43 6f 6c 6c 53 65 71 3b 0a 74 79 70 65 64 65 66  CollSeq;.typedef
8d80: 20 73 74 72 75 63 74 20 43 6f 6c 75 6d 6e 20 43   struct Column C
8d90: 6f 6c 75 6d 6e 3b 0a 74 79 70 65 64 65 66 20 73  olumn;.typedef s
8da0: 74 72 75 63 74 20 44 62 20 44 62 3b 0a 74 79 70  truct Db Db;.typ
8db0: 65 64 65 66 20 73 74 72 75 63 74 20 53 63 68 65  edef struct Sche
8dc0: 6d 61 20 53 63 68 65 6d 61 3b 0a 74 79 70 65 64  ma Schema;.typed
8dd0: 65 66 20 73 74 72 75 63 74 20 45 78 70 72 20 45  ef struct Expr E
8de0: 78 70 72 3b 0a 74 79 70 65 64 65 66 20 73 74 72  xpr;.typedef str
8df0: 75 63 74 20 45 78 70 72 4c 69 73 74 20 45 78 70  uct ExprList Exp
8e00: 72 4c 69 73 74 3b 0a 74 79 70 65 64 65 66 20 73  rList;.typedef s
8e10: 74 72 75 63 74 20 46 4b 65 79 20 46 4b 65 79 3b  truct FKey FKey;
8e20: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
8e30: 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72 20 46  FuncDestructor F
8e40: 75 6e 63 44 65 73 74 72 75 63 74 6f 72 3b 0a 74  uncDestructor;.t
8e50: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 46 75  ypedef struct Fu
8e60: 6e 63 44 65 66 20 46 75 6e 63 44 65 66 3b 0a 74  ncDef FuncDef;.t
8e70: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 46 75  ypedef struct Fu
8e80: 6e 63 44 65 66 48 61 73 68 20 46 75 6e 63 44 65  ncDefHash FuncDe
8e90: 66 48 61 73 68 3b 0a 74 79 70 65 64 65 66 20 73  fHash;.typedef s
8ea0: 74 72 75 63 74 20 49 64 4c 69 73 74 20 49 64 4c  truct IdList IdL
8eb0: 69 73 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72  ist;.typedef str
8ec0: 75 63 74 20 49 6e 64 65 78 20 49 6e 64 65 78 3b  uct Index Index;
8ed0: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
8ee0: 49 6e 64 65 78 53 61 6d 70 6c 65 20 49 6e 64 65  IndexSample Inde
8ef0: 78 53 61 6d 70 6c 65 3b 0a 74 79 70 65 64 65 66  xSample;.typedef
8f00: 20 73 74 72 75 63 74 20 4b 65 79 43 6c 61 73 73   struct KeyClass
8f10: 20 4b 65 79 43 6c 61 73 73 3b 0a 74 79 70 65 64   KeyClass;.typed
8f20: 65 66 20 73 74 72 75 63 74 20 4b 65 79 49 6e 66  ef struct KeyInf
8f30: 6f 20 4b 65 79 49 6e 66 6f 3b 0a 74 79 70 65 64  o KeyInfo;.typed
8f40: 65 66 20 73 74 72 75 63 74 20 4c 6f 6f 6b 61 73  ef struct Lookas
8f50: 69 64 65 20 4c 6f 6f 6b 61 73 69 64 65 3b 0a 74  ide Lookaside;.t
8f60: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 4c 6f  ypedef struct Lo
8f70: 6f 6b 61 73 69 64 65 53 6c 6f 74 20 4c 6f 6f 6b  okasideSlot Look
8f80: 61 73 69 64 65 53 6c 6f 74 3b 0a 74 79 70 65 64  asideSlot;.typed
8f90: 65 66 20 73 74 72 75 63 74 20 4d 6f 64 75 6c 65  ef struct Module
8fa0: 20 4d 6f 64 75 6c 65 3b 0a 74 79 70 65 64 65 66   Module;.typedef
8fb0: 20 73 74 72 75 63 74 20 4e 61 6d 65 43 6f 6e 74   struct NameCont
8fc0: 65 78 74 20 4e 61 6d 65 43 6f 6e 74 65 78 74 3b  ext NameContext;
8fd0: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
8fe0: 50 61 72 73 65 20 50 61 72 73 65 3b 0a 74 79 70  Parse Parse;.typ
8ff0: 65 64 65 66 20 73 74 72 75 63 74 20 50 72 65 55  edef struct PreU
9000: 70 64 61 74 65 20 50 72 65 55 70 64 61 74 65 3b  pdate PreUpdate;
9010: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
9020: 50 72 69 6e 74 66 41 72 67 75 6d 65 6e 74 73 20  PrintfArguments 
9030: 50 72 69 6e 74 66 41 72 67 75 6d 65 6e 74 73 3b  PrintfArguments;
9040: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
9050: 52 65 6e 61 6d 65 54 6f 6b 65 6e 20 52 65 6e 61  RenameToken Rena
9060: 6d 65 54 6f 6b 65 6e 3b 0a 74 79 70 65 64 65 66  meToken;.typedef
9070: 20 73 74 72 75 63 74 20 52 6f 77 53 65 74 20 52   struct RowSet R
9080: 6f 77 53 65 74 3b 0a 74 79 70 65 64 65 66 20 73  owSet;.typedef s
9090: 74 72 75 63 74 20 53 61 76 65 70 6f 69 6e 74 20  truct Savepoint 
90a0: 53 61 76 65 70 6f 69 6e 74 3b 0a 74 79 70 65 64  Savepoint;.typed
90b0: 65 66 20 73 74 72 75 63 74 20 53 65 6c 65 63 74  ef struct Select
90c0: 20 53 65 6c 65 63 74 3b 0a 74 79 70 65 64 65 66   Select;.typedef
90d0: 20 73 74 72 75 63 74 20 53 51 4c 69 74 65 54 68   struct SQLiteTh
90e0: 72 65 61 64 20 53 51 4c 69 74 65 54 68 72 65 61  read SQLiteThrea
90f0: 64 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  d;.typedef struc
9100: 74 20 53 65 6c 65 63 74 44 65 73 74 20 53 65 6c  t SelectDest Sel
9110: 65 63 74 44 65 73 74 3b 0a 74 79 70 65 64 65 66  ectDest;.typedef
9120: 20 73 74 72 75 63 74 20 53 72 63 4c 69 73 74 20   struct SrcList 
9130: 53 72 63 4c 69 73 74 3b 0a 74 79 70 65 64 65 66  SrcList;.typedef
9140: 20 73 74 72 75 63 74 20 73 71 6c 69 74 65 33 5f   struct sqlite3_
9150: 73 74 72 20 53 74 72 41 63 63 75 6d 3b 20 2f 2a  str StrAccum; /*
9160: 20 49 6e 74 65 72 6e 61 6c 20 61 6c 69 61 73 20   Internal alias 
9170: 66 6f 72 20 73 71 6c 69 74 65 33 5f 73 74 72 20  for sqlite3_str 
9180: 2a 2f 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  */.typedef struc
9190: 74 20 54 61 62 6c 65 20 54 61 62 6c 65 3b 0a 74  t Table Table;.t
91a0: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 54 61  ypedef struct Ta
91b0: 62 6c 65 4c 6f 63 6b 20 54 61 62 6c 65 4c 6f 63  bleLock TableLoc
91c0: 6b 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  k;.typedef struc
91d0: 74 20 54 6f 6b 65 6e 20 54 6f 6b 65 6e 3b 0a 74  t Token Token;.t
91e0: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 54 72  ypedef struct Tr
91f0: 65 65 56 69 65 77 20 54 72 65 65 56 69 65 77 3b  eeView TreeView;
9200: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
9210: 54 72 69 67 67 65 72 20 54 72 69 67 67 65 72 3b  Trigger Trigger;
9220: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
9230: 54 72 69 67 67 65 72 50 72 67 20 54 72 69 67 67  TriggerPrg Trigg
9240: 65 72 50 72 67 3b 0a 74 79 70 65 64 65 66 20 73  erPrg;.typedef s
9250: 74 72 75 63 74 20 54 72 69 67 67 65 72 53 74 65  truct TriggerSte
9260: 70 20 54 72 69 67 67 65 72 53 74 65 70 3b 0a 74  p TriggerStep;.t
9270: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 55 6e  ypedef struct Un
9280: 70 61 63 6b 65 64 52 65 63 6f 72 64 20 55 6e 70  packedRecord Unp
9290: 61 63 6b 65 64 52 65 63 6f 72 64 3b 0a 74 79 70  ackedRecord;.typ
92a0: 65 64 65 66 20 73 74 72 75 63 74 20 55 70 73 65  edef struct Upse
92b0: 72 74 20 55 70 73 65 72 74 3b 0a 74 79 70 65 64  rt Upsert;.typed
92c0: 65 66 20 73 74 72 75 63 74 20 56 54 61 62 6c 65  ef struct VTable
92d0: 20 56 54 61 62 6c 65 3b 0a 74 79 70 65 64 65 66   VTable;.typedef
92e0: 20 73 74 72 75 63 74 20 56 74 61 62 43 74 78 20   struct VtabCtx 
92f0: 56 74 61 62 43 74 78 3b 0a 74 79 70 65 64 65 66  VtabCtx;.typedef
9300: 20 73 74 72 75 63 74 20 57 61 6c 6b 65 72 20 57   struct Walker W
9310: 61 6c 6b 65 72 3b 0a 74 79 70 65 64 65 66 20 73  alker;.typedef s
9320: 74 72 75 63 74 20 57 68 65 72 65 49 6e 66 6f 20  truct WhereInfo 
9330: 57 68 65 72 65 49 6e 66 6f 3b 0a 74 79 70 65 64  WhereInfo;.typed
9340: 65 66 20 73 74 72 75 63 74 20 57 69 6e 64 6f 77  ef struct Window
9350: 20 57 69 6e 64 6f 77 3b 0a 74 79 70 65 64 65 66   Window;.typedef
9360: 20 73 74 72 75 63 74 20 57 69 74 68 20 57 69 74   struct With Wit
9370: 68 3b 0a 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 62  h;.../*.** The b
9380: 69 74 6d 61 73 6b 20 64 61 74 61 74 79 70 65 20  itmask datatype 
9390: 64 65 66 69 6e 65 64 20 62 65 6c 6f 77 20 69 73  defined below is
93a0: 20 75 73 65 64 20 66 6f 72 20 76 61 72 69 6f 75   used for variou
93b0: 73 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73 2e  s optimizations.
93c0: 0a 2a 2a 0a 2a 2a 20 43 68 61 6e 67 69 6e 67 20  .**.** Changing 
93d0: 74 68 69 73 20 66 72 6f 6d 20 61 20 36 34 2d 62  this from a 64-b
93e0: 69 74 20 74 6f 20 61 20 33 32 2d 62 69 74 20 74  it to a 32-bit t
93f0: 79 70 65 20 6c 69 6d 69 74 73 20 74 68 65 20 6e  ype limits the n
9400: 75 6d 62 65 72 20 6f 66 0a 2a 2a 20 74 61 62 6c  umber of.** tabl
9410: 65 73 20 69 6e 20 61 20 6a 6f 69 6e 20 74 6f 20  es in a join to 
9420: 33 32 20 69 6e 73 74 65 61 64 20 6f 66 20 36 34  32 instead of 64
9430: 2e 20 20 42 75 74 20 69 74 20 61 6c 73 6f 20 72  .  But it also r
9440: 65 64 75 63 65 73 20 74 68 65 20 73 69 7a 65 0a  educes the size.
9450: 2a 2a 20 6f 66 20 74 68 65 20 6c 69 62 72 61 72  ** of the librar
9460: 79 20 62 79 20 37 33 38 20 62 79 74 65 73 20 6f  y by 738 bytes o
9470: 6e 20 69 78 38 36 2e 0a 2a 2f 0a 23 69 66 64 65  n ix86..*/.#ifde
9480: 66 20 53 51 4c 49 54 45 5f 42 49 54 4d 41 53 4b  f SQLITE_BITMASK
9490: 5f 54 59 50 45 0a 20 20 74 79 70 65 64 65 66 20  _TYPE.  typedef 
94a0: 53 51 4c 49 54 45 5f 42 49 54 4d 41 53 4b 5f 54  SQLITE_BITMASK_T
94b0: 59 50 45 20 42 69 74 6d 61 73 6b 3b 0a 23 65 6c  YPE Bitmask;.#el
94c0: 73 65 0a 20 20 74 79 70 65 64 65 66 20 75 36 34  se.  typedef u64
94d0: 20 42 69 74 6d 61 73 6b 3b 0a 23 65 6e 64 69 66   Bitmask;.#endif
94e0: 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6e 75 6d 62  ../*.** The numb
94f0: 65 72 20 6f 66 20 62 69 74 73 20 69 6e 20 61 20  er of bits in a 
9500: 42 69 74 6d 61 73 6b 2e 20 20 22 42 4d 53 22 20  Bitmask.  "BMS" 
9510: 6d 65 61 6e 73 20 22 42 69 74 4d 61 73 6b 20 53  means "BitMask S
9520: 69 7a 65 22 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  ize"..*/.#define
9530: 20 42 4d 53 20 20 28 28 69 6e 74 29 28 73 69 7a   BMS  ((int)(siz
9540: 65 6f 66 28 42 69 74 6d 61 73 6b 29 2a 38 29 29  eof(Bitmask)*8))
9550: 0a 0a 2f 2a 0a 2a 2a 20 41 20 62 69 74 20 69 6e  ../*.** A bit in
9560: 20 61 20 42 69 74 6d 61 73 6b 0a 2a 2f 0a 23 64   a Bitmask.*/.#d
9570: 65 66 69 6e 65 20 4d 41 53 4b 42 49 54 28 6e 29  efine MASKBIT(n)
9580: 20 20 20 28 28 28 42 69 74 6d 61 73 6b 29 31 29     (((Bitmask)1)
9590: 3c 3c 28 6e 29 29 0a 23 64 65 66 69 6e 65 20 4d  <<(n)).#define M
95a0: 41 53 4b 42 49 54 33 32 28 6e 29 20 28 28 28 75  ASKBIT32(n) (((u
95b0: 6e 73 69 67 6e 65 64 20 69 6e 74 29 31 29 3c 3c  nsigned int)1)<<
95c0: 28 6e 29 29 0a 23 64 65 66 69 6e 65 20 41 4c 4c  (n)).#define ALL
95d0: 42 49 54 53 20 20 20 20 20 20 28 28 42 69 74 6d  BITS      ((Bitm
95e0: 61 73 6b 29 2d 31 29 0a 0a 2f 2a 20 41 20 56 4c  ask)-1)../* A VL
95f0: 69 73 74 20 6f 62 6a 65 63 74 20 72 65 63 6f 72  ist object recor
9600: 64 73 20 61 20 6d 61 70 70 69 6e 67 20 62 65 74  ds a mapping bet
9610: 77 65 65 6e 20 70 61 72 61 6d 65 74 65 72 73 2f  ween parameters/
9620: 76 61 72 69 61 62 6c 65 73 2f 77 69 6c 64 63 61  variables/wildca
9630: 72 64 73 0a 2a 2a 20 69 6e 20 74 68 65 20 53 51  rds.** in the SQ
9640: 4c 20 73 74 61 74 65 6d 65 6e 74 20 28 73 75 63  L statement (suc
9650: 68 20 61 73 20 24 61 62 63 2c 20 40 70 71 72 2c  h as $abc, @pqr,
9660: 20 6f 72 20 3a 78 79 7a 29 20 61 6e 64 20 74 68   or :xyz) and th
9670: 65 20 69 6e 74 65 67 65 72 0a 2a 2a 20 76 61 72  e integer.** var
9680: 69 61 62 6c 65 20 6e 75 6d 62 65 72 20 61 73 73  iable number ass
9690: 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 68 61  ociated with tha
96a0: 74 20 70 61 72 61 6d 65 74 65 72 2e 20 20 53 65  t parameter.  Se
96b0: 65 20 74 68 65 20 66 6f 72 6d 61 74 20 64 65 73  e the format des
96c0: 63 72 69 70 74 69 6f 6e 0a 2a 2a 20 6f 6e 20 74  cription.** on t
96d0: 68 65 20 73 71 6c 69 74 65 33 56 4c 69 73 74 41  he sqlite3VListA
96e0: 64 64 28 29 20 72 6f 75 74 69 6e 65 20 66 6f 72  dd() routine for
96f0: 20 6d 6f 72 65 20 69 6e 66 6f 72 6d 61 74 69 6f   more informatio
9700: 6e 2e 20 20 41 20 56 4c 69 73 74 20 69 73 20 72  n.  A VList is r
9710: 65 61 6c 6c 79 0a 2a 2a 20 6a 75 73 74 20 61 6e  eally.** just an
9720: 20 61 72 72 61 79 20 6f 66 20 69 6e 74 65 67 65   array of intege
9730: 72 73 2e 0a 2a 2f 0a 74 79 70 65 64 65 66 20 69  rs..*/.typedef i
9740: 6e 74 20 56 4c 69 73 74 3b 0a 0a 2f 2a 0a 2a 2a  nt VList;../*.**
9750: 20 44 65 66 65 72 20 73 6f 75 72 63 69 6e 67 20   Defer sourcing 
9760: 76 64 62 65 2e 68 20 61 6e 64 20 62 74 72 65 65  vdbe.h and btree
9770: 2e 68 20 75 6e 74 69 6c 20 61 66 74 65 72 20 74  .h until after t
9780: 68 65 20 22 75 38 22 20 61 6e 64 0a 2a 2a 20 22  he "u8" and.** "
9790: 42 75 73 79 48 61 6e 64 6c 65 72 22 20 74 79 70  BusyHandler" typ
97a0: 65 64 65 66 73 2e 20 76 64 62 65 2e 68 20 61 6c  edefs. vdbe.h al
97b0: 73 6f 20 72 65 71 75 69 72 65 73 20 61 20 66 65  so requires a fe
97c0: 77 20 6f 66 20 74 68 65 20 6f 70 61 71 75 65 0a  w of the opaque.
97d0: 2a 2a 20 70 6f 69 6e 74 65 72 20 74 79 70 65 73  ** pointer types
97e0: 20 28 69 2e 65 2e 20 46 75 6e 63 44 65 66 29 20   (i.e. FuncDef) 
97f0: 64 65 66 69 6e 65 64 20 61 62 6f 76 65 2e 0a 2a  defined above..*
9800: 2f 0a 23 69 6e 63 6c 75 64 65 20 22 62 74 72 65  /.#include "btre
9810: 65 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20 22 76  e.h".#include "v
9820: 64 62 65 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20  dbe.h".#include 
9830: 22 70 61 67 65 72 2e 68 22 0a 23 69 6e 63 6c 75  "pager.h".#inclu
9840: 64 65 20 22 70 63 61 63 68 65 2e 68 22 0a 23 69  de "pcache.h".#i
9850: 6e 63 6c 75 64 65 20 22 6f 73 2e 68 22 0a 23 69  nclude "os.h".#i
9860: 6e 63 6c 75 64 65 20 22 6d 75 74 65 78 2e 68 22  nclude "mutex.h"
9870: 0a 0a 2f 2a 20 54 68 65 20 53 51 4c 49 54 45 5f  ../* The SQLITE_
9880: 45 58 54 52 41 5f 44 55 52 41 42 4c 45 20 63 6f  EXTRA_DURABLE co
9890: 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f  mpile-time optio
98a0: 6e 20 75 73 65 64 20 74 6f 20 73 65 74 20 74 68  n used to set th
98b0: 65 20 64 65 66 61 75 6c 74 0a 2a 2a 20 73 79 6e  e default.** syn
98c0: 63 68 72 6f 6e 6f 75 73 20 73 65 74 74 69 6e 67  chronous setting
98d0: 20 74 6f 20 45 58 54 52 41 2e 20 20 49 74 20 69   to EXTRA.  It i
98e0: 73 20 6e 6f 20 6c 6f 6e 67 65 72 20 73 75 70 70  s no longer supp
98f0: 6f 72 74 65 64 2e 0a 2a 2f 0a 23 69 66 64 65 66  orted..*/.#ifdef
9900: 20 53 51 4c 49 54 45 5f 45 58 54 52 41 5f 44 55   SQLITE_EXTRA_DU
9910: 52 41 42 4c 45 0a 23 20 77 61 72 6e 69 6e 67 20  RABLE.# warning 
9920: 55 73 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55  Use SQLITE_DEFAU
9930: 4c 54 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 3d 33  LT_SYNCHRONOUS=3
9940: 20 69 6e 73 74 65 61 64 20 6f 66 20 53 51 4c 49   instead of SQLI
9950: 54 45 5f 45 58 54 52 41 5f 44 55 52 41 42 4c 45  TE_EXTRA_DURABLE
9960: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
9970: 5f 44 45 46 41 55 4c 54 5f 53 59 4e 43 48 52 4f  _DEFAULT_SYNCHRO
9980: 4e 4f 55 53 20 33 0a 23 65 6e 64 69 66 0a 0a 2f  NOUS 3.#endif../
9990: 2a 0a 2a 2a 20 44 65 66 61 75 6c 74 20 73 79 6e  *.** Default syn
99a0: 63 68 72 6f 6e 6f 75 73 20 6c 65 76 65 6c 73 2e  chronous levels.
99b0: 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65 20 74 68 61 74  .**.** Note that
99c0: 20 28 66 6f 72 20 68 69 73 74 6f 72 63 61 6c 20   (for historcal 
99d0: 72 65 61 73 6f 6e 73 29 20 74 68 65 20 50 41 47  reasons) the PAG
99e0: 45 52 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 5f 2a  ER_SYNCHRONOUS_*
99f0: 20 6d 61 63 72 6f 73 20 64 69 66 66 65 72 0a 2a   macros differ.*
9a00: 2a 20 66 72 6f 6d 20 74 68 65 20 53 51 4c 49 54  * from the SQLIT
9a10: 45 5f 44 45 46 41 55 4c 54 5f 53 59 4e 43 48 52  E_DEFAULT_SYNCHR
9a20: 4f 4e 4f 55 53 20 76 61 6c 75 65 20 62 79 20 31  ONOUS value by 1
9a30: 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 20 20 20 20  ..**.**         
9a40: 20 20 50 41 47 45 52 5f 53 59 4e 43 48 52 4f 4e    PAGER_SYNCHRON
9a50: 4f 55 53 20 20 20 20 20 20 20 44 45 46 41 55 4c  OUS       DEFAUL
9a60: 54 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 0a 2a 2a  T_SYNCHRONOUS.**
9a70: 20 20 20 4f 46 46 20 20 20 20 20 20 20 20 20 20     OFF          
9a80: 20 31 20 20 20 20 20 20 20 20 20 20 20 20 20 20   1              
9a90: 20 20 20 20 20 20 20 20 20 20 20 30 0a 2a 2a 20             0.** 
9aa0: 20 20 4e 4f 52 4d 41 4c 20 20 20 20 20 20 20 20    NORMAL        
9ab0: 32 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  2               
9ac0: 20 20 20 20 20 20 20 20 20 20 31 0a 2a 2a 20 20            1.**  
9ad0: 20 46 55 4c 4c 20 20 20 20 20 20 20 20 20 20 33   FULL          3
9ae0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9af0: 20 20 20 20 20 20 20 20 20 32 0a 2a 2a 20 20 20           2.**   
9b00: 45 58 54 52 41 20 20 20 20 20 20 20 20 20 34 20  EXTRA         4 
9b10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9b20: 20 20 20 20 20 20 20 20 33 0a 2a 2a 0a 2a 2a 20          3.**.** 
9b30: 54 68 65 20 22 50 52 41 47 4d 41 20 73 79 6e 63  The "PRAGMA sync
9b40: 68 72 6f 6e 6f 75 73 22 20 73 74 61 74 65 6d 65  hronous" stateme
9b50: 6e 74 20 61 6c 73 6f 20 75 73 65 73 20 74 68 65  nt also uses the
9b60: 20 7a 65 72 6f 2d 62 61 73 65 64 20 6e 75 6d 62   zero-based numb
9b70: 65 72 73 2e 0a 2a 2a 20 49 6e 20 6f 74 68 65 72  ers..** In other
9b80: 20 77 6f 72 64 73 2c 20 74 68 65 20 7a 65 72 6f   words, the zero
9b90: 2d 62 61 73 65 64 20 6e 75 6d 62 65 72 73 20 61  -based numbers a
9ba0: 72 65 20 75 73 65 64 20 66 6f 72 20 61 6c 6c 20  re used for all 
9bb0: 65 78 74 65 72 6e 61 6c 20 69 6e 74 65 72 66 61  external interfa
9bc0: 63 65 73 0a 2a 2a 20 61 6e 64 20 74 68 65 20 6f  ces.** and the o
9bd0: 6e 65 2d 62 61 73 65 64 20 76 61 6c 75 65 73 20  ne-based values 
9be0: 61 72 65 20 75 73 65 64 20 69 6e 74 65 72 6e 61  are used interna
9bf0: 6c 6c 79 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20  lly..*/.#ifndef 
9c00: 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 53  SQLITE_DEFAULT_S
9c10: 59 4e 43 48 52 4f 4e 4f 55 53 0a 23 20 64 65 66  YNCHRONOUS.# def
9c20: 69 6e 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55  ine SQLITE_DEFAU
9c30: 4c 54 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 20 32  LT_SYNCHRONOUS 2
9c40: 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20  .#endif.#ifndef 
9c50: 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 57  SQLITE_DEFAULT_W
9c60: 41 4c 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 0a 23  AL_SYNCHRONOUS.#
9c70: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44   define SQLITE_D
9c80: 45 46 41 55 4c 54 5f 57 41 4c 5f 53 59 4e 43 48  EFAULT_WAL_SYNCH
9c90: 52 4f 4e 4f 55 53 20 53 51 4c 49 54 45 5f 44 45  RONOUS SQLITE_DE
9ca0: 46 41 55 4c 54 5f 53 59 4e 43 48 52 4f 4e 4f 55  FAULT_SYNCHRONOU
9cb0: 53 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  S.#endif../*.** 
9cc0: 45 61 63 68 20 64 61 74 61 62 61 73 65 20 66 69  Each database fi
9cd0: 6c 65 20 74 6f 20 62 65 20 61 63 63 65 73 73 65  le to be accesse
9ce0: 64 20 62 79 20 74 68 65 20 73 79 73 74 65 6d 20  d by the system 
9cf0: 69 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 0a 2a  is an instance.*
9d00: 2a 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69  * of the followi
9d10: 6e 67 20 73 74 72 75 63 74 75 72 65 2e 20 20 54  ng structure.  T
9d20: 68 65 72 65 20 61 72 65 20 6e 6f 72 6d 61 6c 6c  here are normall
9d30: 79 20 74 77 6f 20 6f 66 20 74 68 65 73 65 20 73  y two of these s
9d40: 74 72 75 63 74 75 72 65 73 0a 2a 2a 20 69 6e 20  tructures.** in 
9d50: 74 68 65 20 73 71 6c 69 74 65 2e 61 44 62 5b 5d  the sqlite.aDb[]
9d60: 20 61 72 72 61 79 2e 20 20 61 44 62 5b 30 5d 20   array.  aDb[0] 
9d70: 69 73 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61  is the main data
9d80: 62 61 73 65 20 66 69 6c 65 20 61 6e 64 0a 2a 2a  base file and.**
9d90: 20 61 44 62 5b 31 5d 20 69 73 20 74 68 65 20 64   aDb[1] is the d
9da0: 61 74 61 62 61 73 65 20 66 69 6c 65 20 75 73 65  atabase file use
9db0: 64 20 74 6f 20 68 6f 6c 64 20 74 65 6d 70 6f 72  d to hold tempor
9dc0: 61 72 79 20 74 61 62 6c 65 73 2e 20 20 41 64 64  ary tables.  Add
9dd0: 69 74 69 6f 6e 61 6c 0a 2a 2a 20 64 61 74 61 62  itional.** datab
9de0: 61 73 65 73 20 6d 61 79 20 62 65 20 61 74 74 61  ases may be atta
9df0: 63 68 65 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  ched..*/.struct 
9e00: 44 62 20 7b 0a 20 20 63 68 61 72 20 2a 7a 44 62  Db {.  char *zDb
9e10: 53 4e 61 6d 65 3b 20 20 20 20 20 20 2f 2a 20 4e  SName;      /* N
9e20: 61 6d 65 20 6f 66 20 74 68 69 73 20 64 61 74 61  ame of this data
9e30: 62 61 73 65 2e 20 28 73 63 68 65 6d 61 20 6e 61  base. (schema na
9e40: 6d 65 2c 20 6e 6f 74 20 66 69 6c 65 6e 61 6d 65  me, not filename
9e50: 29 20 2a 2f 0a 20 20 42 74 72 65 65 20 2a 70 42  ) */.  Btree *pB
9e60: 74 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54  t;          /* T
9e70: 68 65 20 42 2a 54 72 65 65 20 73 74 72 75 63 74  he B*Tree struct
9e80: 75 72 65 20 66 6f 72 20 74 68 69 73 20 64 61 74  ure for this dat
9e90: 61 62 61 73 65 20 66 69 6c 65 20 2a 2f 0a 20 20  abase file */.  
9ea0: 75 38 20 73 61 66 65 74 79 5f 6c 65 76 65 6c 3b  u8 safety_level;
9eb0: 20 20 20 20 20 2f 2a 20 48 6f 77 20 61 67 67 72       /* How aggr
9ec0: 65 73 73 69 76 65 20 61 74 20 73 79 6e 63 69 6e  essive at syncin
9ed0: 67 20 64 61 74 61 20 74 6f 20 64 69 73 6b 20 2a  g data to disk *
9ee0: 2f 0a 20 20 75 38 20 62 53 79 6e 63 53 65 74 3b  /.  u8 bSyncSet;
9ef0: 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65           /* True
9f00: 20 69 66 20 22 50 52 41 47 4d 41 20 73 79 6e 63   if "PRAGMA sync
9f10: 68 72 6f 6e 6f 75 73 3d 4e 22 20 68 61 73 20 62  hronous=N" has b
9f20: 65 65 6e 20 72 75 6e 20 2a 2f 0a 20 20 53 63 68  een run */.  Sch
9f30: 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20 20 20  ema *pSchema;   
9f40: 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20    /* Pointer to 
9f50: 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 20  database schema 
9f60: 28 70 6f 73 73 69 62 6c 79 20 73 68 61 72 65 64  (possibly shared
9f70: 29 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41  ) */.};../*.** A
9f80: 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  n instance of th
9f90: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75  e following stru
9fa0: 63 74 75 72 65 20 73 74 6f 72 65 73 20 61 20 64  cture stores a d
9fb0: 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 2e 0a  atabase schema..
9fc0: 2a 2a 0a 2a 2a 20 4d 6f 73 74 20 53 63 68 65 6d  **.** Most Schem
9fd0: 61 20 6f 62 6a 65 63 74 73 20 61 72 65 20 61 73  a objects are as
9fe0: 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 61 20  sociated with a 
9ff0: 42 74 72 65 65 2e 20 20 54 68 65 20 65 78 63 65  Btree.  The exce
a000: 70 74 69 6f 6e 20 69 73 0a 2a 2a 20 74 68 65 20  ption is.** the 
a010: 53 63 68 65 6d 61 20 66 6f 72 20 74 68 65 20 54  Schema for the T
a020: 45 4d 50 20 64 61 74 61 62 61 65 73 20 28 73 71  EMP databaes (sq
a030: 6c 69 74 65 33 2e 61 44 62 5b 31 5d 29 20 77 68  lite3.aDb[1]) wh
a040: 69 63 68 20 69 73 20 66 72 65 65 2d 73 74 61 6e  ich is free-stan
a050: 64 69 6e 67 2e 0a 2a 2a 20 49 6e 20 73 68 61 72  ding..** In shar
a060: 65 64 20 63 61 63 68 65 20 6d 6f 64 65 2c 20 61  ed cache mode, a
a070: 20 73 69 6e 67 6c 65 20 53 63 68 65 6d 61 20 6f   single Schema o
a080: 62 6a 65 63 74 20 63 61 6e 20 62 65 20 73 68 61  bject can be sha
a090: 72 65 64 20 62 79 20 6d 75 6c 74 69 70 6c 65 0a  red by multiple.
a0a0: 2a 2a 20 42 74 72 65 65 73 20 74 68 61 74 20 72  ** Btrees that r
a0b0: 65 66 65 72 20 74 6f 20 74 68 65 20 73 61 6d 65  efer to the same
a0c0: 20 75 6e 64 65 72 6c 79 69 6e 67 20 42 74 53 68   underlying BtSh
a0d0: 61 72 65 64 20 6f 62 6a 65 63 74 2e 0a 2a 2a 0a  ared object..**.
a0e0: 2a 2a 20 53 63 68 65 6d 61 20 6f 62 6a 65 63 74  ** Schema object
a0f0: 73 20 61 72 65 20 61 75 74 6f 6d 61 74 69 63 61  s are automatica
a100: 6c 6c 79 20 64 65 61 6c 6c 6f 63 61 74 65 64 20  lly deallocated 
a110: 77 68 65 6e 20 74 68 65 20 6c 61 73 74 20 42 74  when the last Bt
a120: 72 65 65 20 74 68 61 74 0a 2a 2a 20 72 65 66 65  ree that.** refe
a130: 72 65 6e 63 65 73 20 74 68 65 6d 20 69 73 20 64  rences them is d
a140: 65 73 74 72 6f 79 65 64 2e 20 20 20 54 68 65 20  estroyed.   The 
a150: 54 45 4d 50 20 53 63 68 65 6d 61 20 69 73 20 6d  TEMP Schema is m
a160: 61 6e 75 61 6c 6c 79 20 66 72 65 65 64 20 62 79  anually freed by
a170: 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 63 6c 6f 73  .** sqlite3_clos
a180: 65 28 29 2e 0a 2a 0a 2a 2a 20 41 20 74 68 72 65  e()..*.** A thre
a190: 61 64 20 6d 75 73 74 20 62 65 20 68 6f 6c 64 69  ad must be holdi
a1a0: 6e 67 20 61 20 6d 75 74 65 78 20 6f 6e 20 74 68  ng a mutex on th
a1b0: 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20  e corresponding 
a1c0: 42 74 72 65 65 20 69 6e 20 6f 72 64 65 72 0a 2a  Btree in order.*
a1d0: 2a 20 74 6f 20 61 63 63 65 73 73 20 53 63 68 65  * to access Sche
a1e0: 6d 61 20 63 6f 6e 74 65 6e 74 2e 20 20 54 68 69  ma content.  Thi
a1f0: 73 20 69 6d 70 6c 69 65 73 20 74 68 61 74 20 74  s implies that t
a200: 68 65 20 74 68 72 65 61 64 20 6d 75 73 74 20 61  he thread must a
a210: 6c 73 6f 20 62 65 0a 2a 2a 20 68 6f 6c 64 69 6e  lso be.** holdin
a220: 67 20 61 20 6d 75 74 65 78 20 6f 6e 20 74 68 65  g a mutex on the
a230: 20 73 71 6c 69 74 65 33 20 63 6f 6e 6e 65 63 74   sqlite3 connect
a240: 69 6f 6e 20 70 6f 69 6e 74 65 72 20 74 68 61 74  ion pointer that
a250: 20 6f 77 6e 73 20 74 68 65 20 42 74 72 65 65 2e   owns the Btree.
a260: 0a 2a 2a 20 46 6f 72 20 61 20 54 45 4d 50 20 53  .** For a TEMP S
a270: 63 68 65 6d 61 2c 20 6f 6e 6c 79 20 74 68 65 20  chema, only the 
a280: 63 6f 6e 6e 65 63 74 69 6f 6e 20 6d 75 74 65 78  connection mutex
a290: 20 69 73 20 72 65 71 75 69 72 65 64 2e 0a 2a 2f   is required..*/
a2a0: 0a 73 74 72 75 63 74 20 53 63 68 65 6d 61 20 7b  .struct Schema {
a2b0: 0a 20 20 69 6e 74 20 73 63 68 65 6d 61 5f 63 6f  .  int schema_co
a2c0: 6f 6b 69 65 3b 20 20 20 2f 2a 20 44 61 74 61 62  okie;   /* Datab
a2d0: 61 73 65 20 73 63 68 65 6d 61 20 76 65 72 73 69  ase schema versi
a2e0: 6f 6e 20 6e 75 6d 62 65 72 20 66 6f 72 20 74 68  on number for th
a2f0: 69 73 20 66 69 6c 65 20 2a 2f 0a 20 20 69 6e 74  is file */.  int
a300: 20 69 47 65 6e 65 72 61 74 69 6f 6e 3b 20 20 20   iGeneration;   
a310: 20 20 2f 2a 20 47 65 6e 65 72 61 74 69 6f 6e 20    /* Generation 
a320: 63 6f 75 6e 74 65 72 2e 20 20 49 6e 63 72 65 6d  counter.  Increm
a330: 65 6e 74 65 64 20 77 69 74 68 20 65 61 63 68 20  ented with each 
a340: 63 68 61 6e 67 65 20 2a 2f 0a 20 20 48 61 73 68  change */.  Hash
a350: 20 74 62 6c 48 61 73 68 3b 20 20 20 20 20 20 20   tblHash;       
a360: 20 2f 2a 20 41 6c 6c 20 74 61 62 6c 65 73 20 69   /* All tables i
a370: 6e 64 65 78 65 64 20 62 79 20 6e 61 6d 65 20 2a  ndexed by name *
a380: 2f 0a 20 20 48 61 73 68 20 69 64 78 48 61 73 68  /.  Hash idxHash
a390: 3b 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20  ;        /* All 
a3a0: 28 6e 61 6d 65 64 29 20 69 6e 64 69 63 65 73 20  (named) indices 
a3b0: 69 6e 64 65 78 65 64 20 62 79 20 6e 61 6d 65 20  indexed by name 
a3c0: 2a 2f 0a 20 20 48 61 73 68 20 74 72 69 67 48 61  */.  Hash trigHa
a3d0: 73 68 3b 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c  sh;       /* All
a3e0: 20 74 72 69 67 67 65 72 73 20 69 6e 64 65 78 65   triggers indexe
a3f0: 64 20 62 79 20 6e 61 6d 65 20 2a 2f 0a 20 20 48  d by name */.  H
a400: 61 73 68 20 66 6b 65 79 48 61 73 68 3b 20 20 20  ash fkeyHash;   
a410: 20 20 20 20 2f 2a 20 41 6c 6c 20 66 6f 72 65 69      /* All forei
a420: 67 6e 20 6b 65 79 73 20 62 79 20 72 65 66 65 72  gn keys by refer
a430: 65 6e 63 65 64 20 74 61 62 6c 65 20 6e 61 6d 65  enced table name
a440: 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70 53 65   */.  Table *pSe
a450: 71 54 61 62 3b 20 20 20 20 20 20 2f 2a 20 54 68  qTab;      /* Th
a460: 65 20 73 71 6c 69 74 65 5f 73 65 71 75 65 6e 63  e sqlite_sequenc
a470: 65 20 74 61 62 6c 65 20 75 73 65 64 20 62 79 20  e table used by 
a480: 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 2a 2f  AUTOINCREMENT */
a490: 0a 20 20 75 38 20 66 69 6c 65 5f 66 6f 72 6d 61  .  u8 file_forma
a4a0: 74 3b 20 20 20 20 20 20 2f 2a 20 53 63 68 65 6d  t;      /* Schem
a4b0: 61 20 66 6f 72 6d 61 74 20 76 65 72 73 69 6f 6e  a format version
a4c0: 20 66 6f 72 20 74 68 69 73 20 66 69 6c 65 20 2a   for this file *
a4d0: 2f 0a 20 20 75 38 20 65 6e 63 3b 20 20 20 20 20  /.  u8 enc;     
a4e0: 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78 74           /* Text
a4f0: 20 65 6e 63 6f 64 69 6e 67 20 75 73 65 64 20 62   encoding used b
a500: 79 20 74 68 69 73 20 64 61 74 61 62 61 73 65 20  y this database 
a510: 2a 2f 0a 20 20 75 31 36 20 73 63 68 65 6d 61 46  */.  u16 schemaF
a520: 6c 61 67 73 3b 20 20 20 20 20 2f 2a 20 46 6c 61  lags;     /* Fla
a530: 67 73 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  gs associated wi
a540: 74 68 20 74 68 69 73 20 73 63 68 65 6d 61 20 2a  th this schema *
a550: 2f 0a 20 20 69 6e 74 20 63 61 63 68 65 5f 73 69  /.  int cache_si
a560: 7a 65 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62  ze;      /* Numb
a570: 65 72 20 6f 66 20 70 61 67 65 73 20 74 6f 20 75  er of pages to u
a580: 73 65 20 69 6e 20 74 68 65 20 63 61 63 68 65 20  se in the cache 
a590: 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  */.};../*.** The
a5a0: 73 65 20 6d 61 63 72 6f 73 20 63 61 6e 20 62 65  se macros can be
a5b0: 20 75 73 65 64 20 74 6f 20 74 65 73 74 2c 20 73   used to test, s
a5c0: 65 74 2c 20 6f 72 20 63 6c 65 61 72 20 62 69 74  et, or clear bit
a5d0: 73 20 69 6e 20 74 68 65 0a 2a 2a 20 44 62 2e 70  s in the.** Db.p
a5e0: 53 63 68 65 6d 61 2d 3e 66 6c 61 67 73 20 66 69  Schema->flags fi
a5f0: 65 6c 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  eld..*/.#define 
a600: 44 62 48 61 73 50 72 6f 70 65 72 74 79 28 44 2c  DbHasProperty(D,
a610: 49 2c 50 29 20 20 20 20 20 28 28 28 44 29 2d 3e  I,P)     (((D)->
a620: 61 44 62 5b 49 5d 2e 70 53 63 68 65 6d 61 2d 3e  aDb[I].pSchema->
a630: 73 63 68 65 6d 61 46 6c 61 67 73 26 28 50 29 29  schemaFlags&(P))
a640: 3d 3d 28 50 29 29 0a 23 64 65 66 69 6e 65 20 44  ==(P)).#define D
a650: 62 48 61 73 41 6e 79 50 72 6f 70 65 72 74 79 28  bHasAnyProperty(
a660: 44 2c 49 2c 50 29 20 20 28 28 28 44 29 2d 3e 61  D,I,P)  (((D)->a
a670: 44 62 5b 49 5d 2e 70 53 63 68 65 6d 61 2d 3e 73  Db[I].pSchema->s
a680: 63 68 65 6d 61 46 6c 61 67 73 26 28 50 29 29 21  chemaFlags&(P))!
a690: 3d 30 29 0a 23 64 65 66 69 6e 65 20 44 62 53 65  =0).#define DbSe
a6a0: 74 50 72 6f 70 65 72 74 79 28 44 2c 49 2c 50 29  tProperty(D,I,P)
a6b0: 20 20 20 20 20 28 44 29 2d 3e 61 44 62 5b 49 5d       (D)->aDb[I]
a6c0: 2e 70 53 63 68 65 6d 61 2d 3e 73 63 68 65 6d 61  .pSchema->schema
a6d0: 46 6c 61 67 73 7c 3d 28 50 29 0a 23 64 65 66 69  Flags|=(P).#defi
a6e0: 6e 65 20 44 62 43 6c 65 61 72 50 72 6f 70 65 72  ne DbClearProper
a6f0: 74 79 28 44 2c 49 2c 50 29 20 20 20 28 44 29 2d  ty(D,I,P)   (D)-
a700: 3e 61 44 62 5b 49 5d 2e 70 53 63 68 65 6d 61 2d  >aDb[I].pSchema-
a710: 3e 73 63 68 65 6d 61 46 6c 61 67 73 26 3d 7e 28  >schemaFlags&=~(
a720: 50 29 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65  P)../*.** Allowe
a730: 64 20 76 61 6c 75 65 73 20 66 6f 72 20 74 68 65  d values for the
a740: 20 44 42 2e 70 53 63 68 65 6d 61 2d 3e 66 6c 61   DB.pSchema->fla
a750: 67 73 20 66 69 65 6c 64 2e 0a 2a 2a 0a 2a 2a 20  gs field..**.** 
a760: 54 68 65 20 44 42 5f 53 63 68 65 6d 61 4c 6f 61  The DB_SchemaLoa
a770: 64 65 64 20 66 6c 61 67 20 69 73 20 73 65 74 20  ded flag is set 
a780: 61 66 74 65 72 20 74 68 65 20 64 61 74 61 62 61  after the databa
a790: 73 65 20 73 63 68 65 6d 61 20 68 61 73 20 62 65  se schema has be
a7a0: 65 6e 0a 2a 2a 20 72 65 61 64 20 69 6e 74 6f 20  en.** read into 
a7b0: 69 6e 74 65 72 6e 61 6c 20 68 61 73 68 20 74 61  internal hash ta
a7c0: 62 6c 65 73 2e 0a 2a 2a 0a 2a 2a 20 44 42 5f 55  bles..**.** DB_U
a7d0: 6e 72 65 73 65 74 56 69 65 77 73 20 6d 65 61 6e  nresetViews mean
a7e0: 73 20 74 68 61 74 20 6f 6e 65 20 6f 72 20 6d 6f  s that one or mo
a7f0: 72 65 20 76 69 65 77 73 20 68 61 76 65 20 63 6f  re views have co
a800: 6c 75 6d 6e 20 6e 61 6d 65 73 20 74 68 61 74 0a  lumn names that.
a810: 2a 2a 20 68 61 76 65 20 62 65 65 6e 20 66 69 6c  ** have been fil
a820: 6c 65 64 20 6f 75 74 2e 20 20 49 66 20 74 68 65  led out.  If the
a830: 20 73 63 68 65 6d 61 20 63 68 61 6e 67 65 73 2c   schema changes,
a840: 20 74 68 65 73 65 20 63 6f 6c 75 6d 6e 20 6e 61   these column na
a850: 6d 65 73 20 6d 69 67 68 74 0a 2a 2a 20 63 68 61  mes might.** cha
a860: 6e 67 65 73 20 61 6e 64 20 73 6f 20 74 68 65 20  nges and so the 
a870: 76 69 65 77 20 77 69 6c 6c 20 6e 65 65 64 20 74  view will need t
a880: 6f 20 62 65 20 72 65 73 65 74 2e 0a 2a 2f 0a 23  o be reset..*/.#
a890: 64 65 66 69 6e 65 20 44 42 5f 53 63 68 65 6d 61  define DB_Schema
a8a0: 4c 6f 61 64 65 64 20 20 20 20 30 78 30 30 30 31  Loaded    0x0001
a8b0: 20 20 2f 2a 20 54 68 65 20 73 63 68 65 6d 61 20    /* The schema 
a8c0: 68 61 73 20 62 65 65 6e 20 6c 6f 61 64 65 64 20  has been loaded 
a8d0: 2a 2f 0a 23 64 65 66 69 6e 65 20 44 42 5f 55 6e  */.#define DB_Un
a8e0: 72 65 73 65 74 56 69 65 77 73 20 20 20 20 30 78  resetViews    0x
a8f0: 30 30 30 32 20 20 2f 2a 20 53 6f 6d 65 20 76 69  0002  /* Some vi
a900: 65 77 73 20 68 61 76 65 20 64 65 66 69 6e 65 64  ews have defined
a910: 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 2a 2f   column names */
a920: 0a 23 64 65 66 69 6e 65 20 44 42 5f 45 6d 70 74  .#define DB_Empt
a930: 79 20 20 20 20 20 20 20 20 20 20 20 30 78 30 30  y           0x00
a940: 30 34 20 20 2f 2a 20 54 68 65 20 66 69 6c 65 20  04  /* The file 
a950: 69 73 20 65 6d 70 74 79 20 28 6c 65 6e 67 74 68  is empty (length
a960: 20 30 20 62 79 74 65 73 29 20 2a 2f 0a 23 64 65   0 bytes) */.#de
a970: 66 69 6e 65 20 44 42 5f 52 65 73 65 74 57 61 6e  fine DB_ResetWan
a980: 74 65 64 20 20 20 20 20 30 78 30 30 30 38 20 20  ted     0x0008  
a990: 2f 2a 20 52 65 73 65 74 20 74 68 65 20 73 63 68  /* Reset the sch
a9a0: 65 6d 61 20 77 68 65 6e 20 6e 53 63 68 65 6d 61  ema when nSchema
a9b0: 4c 6f 63 6b 3d 3d 30 20 2a 2f 0a 0a 2f 2a 0a 2a  Lock==0 */../*.*
a9c0: 2a 20 54 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  * The number of 
a9d0: 64 69 66 66 65 72 65 6e 74 20 6b 69 6e 64 73 20  different kinds 
a9e0: 6f 66 20 74 68 69 6e 67 73 20 74 68 61 74 20 63  of things that c
a9f0: 61 6e 20 62 65 20 6c 69 6d 69 74 65 64 0a 2a 2a  an be limited.**
aa00: 20 75 73 69 6e 67 20 74 68 65 20 73 71 6c 69 74   using the sqlit
aa10: 65 33 5f 6c 69 6d 69 74 28 29 20 69 6e 74 65 72  e3_limit() inter
aa20: 66 61 63 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  face..*/.#define
aa30: 20 53 51 4c 49 54 45 5f 4e 5f 4c 49 4d 49 54 20   SQLITE_N_LIMIT 
aa40: 28 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 57 4f  (SQLITE_LIMIT_WO
aa50: 52 4b 45 52 5f 54 48 52 45 41 44 53 2b 31 29 0a  RKER_THREADS+1).
aa60: 0a 2f 2a 0a 2a 2a 20 4c 6f 6f 6b 61 73 69 64 65  ./*.** Lookaside
aa70: 20 6d 61 6c 6c 6f 63 20 69 73 20 61 20 73 65 74   malloc is a set
aa80: 20 6f 66 20 66 69 78 65 64 2d 73 69 7a 65 20 62   of fixed-size b
aa90: 75 66 66 65 72 73 20 74 68 61 74 20 63 61 6e 20  uffers that can 
aaa0: 62 65 20 75 73 65 64 0a 2a 2a 20 74 6f 20 73 61  be used.** to sa
aab0: 74 69 73 66 79 20 73 6d 61 6c 6c 20 74 72 61 6e  tisfy small tran
aac0: 73 69 65 6e 74 20 6d 65 6d 6f 72 79 20 61 6c 6c  sient memory all
aad0: 6f 63 61 74 69 6f 6e 20 72 65 71 75 65 73 74 73  ocation requests
aae0: 20 66 6f 72 20 6f 62 6a 65 63 74 73 0a 2a 2a 20   for objects.** 
aaf0: 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20  associated with 
ab00: 61 20 70 61 72 74 69 63 75 6c 61 72 20 64 61 74  a particular dat
ab10: 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  abase connection
ab20: 2e 20 20 54 68 65 20 75 73 65 20 6f 66 0a 2a 2a  .  The use of.**
ab30: 20 6c 6f 6f 6b 61 73 69 64 65 20 6d 61 6c 6c 6f   lookaside mallo
ab40: 63 20 70 72 6f 76 69 64 65 73 20 61 20 73 69 67  c provides a sig
ab50: 6e 69 66 69 63 61 6e 74 20 70 65 72 66 6f 72 6d  nificant perform
ab60: 61 6e 63 65 20 65 6e 68 61 6e 63 65 6d 65 6e 74  ance enhancement
ab70: 0a 2a 2a 20 28 61 70 70 72 6f 78 20 31 30 25 29  .** (approx 10%)
ab80: 20 62 79 20 61 76 6f 69 64 69 6e 67 20 6e 75 6d   by avoiding num
ab90: 65 72 6f 75 73 20 6d 61 6c 6c 6f 63 2f 66 72 65  erous malloc/fre
aba0: 65 20 72 65 71 75 65 73 74 73 20 77 68 69 6c 65  e requests while
abb0: 20 70 61 72 73 69 6e 67 0a 2a 2a 20 53 51 4c 20   parsing.** SQL 
abc0: 73 74 61 74 65 6d 65 6e 74 73 2e 0a 2a 2a 0a 2a  statements..**.*
abd0: 2a 20 54 68 65 20 4c 6f 6f 6b 61 73 69 64 65 20  * The Lookaside 
abe0: 73 74 72 75 63 74 75 72 65 20 68 6f 6c 64 73 20  structure holds 
abf0: 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 69 6e  configuration in
ac00: 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20  formation about 
ac10: 74 68 65 0a 2a 2a 20 6c 6f 6f 6b 61 73 69 64 65  the.** lookaside
ac20: 20 6d 61 6c 6c 6f 63 20 73 75 62 73 79 73 74 65   malloc subsyste
ac30: 6d 2e 20 20 45 61 63 68 20 61 76 61 69 6c 61 62  m.  Each availab
ac40: 6c 65 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61  le memory alloca
ac50: 74 69 6f 6e 20 69 6e 0a 2a 2a 20 74 68 65 20 6c  tion in.** the l
ac60: 6f 6f 6b 61 73 69 64 65 20 73 75 62 73 79 73 74  ookaside subsyst
ac70: 65 6d 20 69 73 20 73 74 6f 72 65 64 20 6f 6e 20  em is stored on 
ac80: 61 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 6f 66  a linked list of
ac90: 20 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74 0a 2a   LookasideSlot.*
aca0: 2a 20 6f 62 6a 65 63 74 73 2e 0a 2a 2a 0a 2a 2a  * objects..**.**
acb0: 20 4c 6f 6f 6b 61 73 69 64 65 20 61 6c 6c 6f 63   Lookaside alloc
acc0: 61 74 69 6f 6e 73 20 61 72 65 20 6f 6e 6c 79 20  ations are only 
acd0: 61 6c 6c 6f 77 65 64 20 66 6f 72 20 6f 62 6a 65  allowed for obje
ace0: 63 74 73 20 74 68 61 74 20 61 72 65 20 61 73 73  cts that are ass
acf0: 6f 63 69 61 74 65 64 0a 2a 2a 20 77 69 74 68 20  ociated.** with 
ad00: 61 20 70 61 72 74 69 63 75 6c 61 72 20 64 61 74  a particular dat
ad10: 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  abase connection
ad20: 2e 20 20 48 65 6e 63 65 2c 20 73 63 68 65 6d 61  .  Hence, schema
ad30: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 63 61 6e   information can
ad40: 6e 6f 74 0a 2a 2a 20 62 65 20 73 74 6f 72 65 64  not.** be stored
ad50: 20 69 6e 20 6c 6f 6f 6b 61 73 69 64 65 20 62 65   in lookaside be
ad60: 63 61 75 73 65 20 69 6e 20 73 68 61 72 65 64 20  cause in shared 
ad70: 63 61 63 68 65 20 6d 6f 64 65 20 74 68 65 20 73  cache mode the s
ad80: 63 68 65 6d 61 20 69 6e 66 6f 72 6d 61 74 69 6f  chema informatio
ad90: 6e 0a 2a 2a 20 69 73 20 73 68 61 72 65 64 20 62  n.** is shared b
ada0: 79 20 6d 75 6c 74 69 70 6c 65 20 64 61 74 61 62  y multiple datab
adb0: 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 73 2e  ase connections.
adc0: 20 20 54 68 65 72 65 66 6f 72 65 2c 20 77 68 69    Therefore, whi
add0: 6c 65 20 70 61 72 73 69 6e 67 0a 2a 2a 20 73 63  le parsing.** sc
ade0: 68 65 6d 61 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  hema information
adf0: 2c 20 74 68 65 20 4c 6f 6f 6b 61 73 69 64 65 2e  , the Lookaside.
ae00: 62 45 6e 61 62 6c 65 64 20 66 6c 61 67 20 69 73  bEnabled flag is
ae10: 20 63 6c 65 61 72 65 64 20 73 6f 20 74 68 61 74   cleared so that
ae20: 0a 2a 2a 20 6c 6f 6f 6b 61 73 69 64 65 20 61 6c  .** lookaside al
ae30: 6c 6f 63 61 74 69 6f 6e 73 20 61 72 65 20 6e 6f  locations are no
ae40: 74 20 75 73 65 64 20 74 6f 20 63 6f 6e 73 74 72  t used to constr
ae50: 75 63 74 20 74 68 65 20 73 63 68 65 6d 61 20 6f  uct the schema o
ae60: 62 6a 65 63 74 73 2e 0a 2a 2f 0a 73 74 72 75 63  bjects..*/.struc
ae70: 74 20 4c 6f 6f 6b 61 73 69 64 65 20 7b 0a 20 20  t Lookaside {.  
ae80: 75 33 32 20 62 44 69 73 61 62 6c 65 3b 20 20 20  u32 bDisable;   
ae90: 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e 6c 79 20          /* Only 
aea0: 6f 70 65 72 61 74 65 20 74 68 65 20 6c 6f 6f 6b  operate the look
aeb0: 61 73 69 64 65 20 77 68 65 6e 20 7a 65 72 6f 20  aside when zero 
aec0: 2a 2f 0a 20 20 75 31 36 20 73 7a 3b 20 20 20 20  */.  u16 sz;    
aed0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
aee0: 53 69 7a 65 20 6f 66 20 65 61 63 68 20 62 75 66  Size of each buf
aef0: 66 65 72 20 69 6e 20 62 79 74 65 73 20 2a 2f 0a  fer in bytes */.
af00: 20 20 75 38 20 62 4d 61 6c 6c 6f 63 65 64 3b 20    u8 bMalloced; 
af10: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75            /* Tru
af20: 65 20 69 66 20 70 53 74 61 72 74 20 6f 62 74 61  e if pStart obta
af30: 69 6e 65 64 20 66 72 6f 6d 20 73 71 6c 69 74 65  ined from sqlite
af40: 33 5f 6d 61 6c 6c 6f 63 28 29 20 2a 2f 0a 20 20  3_malloc() */.  
af50: 75 33 32 20 6e 53 6c 6f 74 3b 20 20 20 20 20 20  u32 nSlot;      
af60: 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
af70: 72 20 6f 66 20 6c 6f 6f 6b 61 73 69 64 65 20 73  r of lookaside s
af80: 6c 6f 74 73 20 61 6c 6c 6f 63 61 74 65 64 20 2a  lots allocated *
af90: 2f 0a 20 20 75 33 32 20 61 6e 53 74 61 74 5b 33  /.  u32 anStat[3
afa0: 5d 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 30  ];          /* 0
afb0: 3a 20 68 69 74 73 2e 20 20 31 3a 20 73 69 7a 65  : hits.  1: size
afc0: 20 6d 69 73 73 65 73 2e 20 20 32 3a 20 66 75 6c   misses.  2: ful
afd0: 6c 20 6d 69 73 73 65 73 20 2a 2f 0a 20 20 4c 6f  l misses */.  Lo
afe0: 6f 6b 61 73 69 64 65 53 6c 6f 74 20 2a 70 49 6e  okasideSlot *pIn
aff0: 69 74 3b 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66  it;   /* List of
b000: 20 62 75 66 66 65 72 73 20 6e 6f 74 20 70 72 65   buffers not pre
b010: 76 69 6f 75 73 6c 79 20 75 73 65 64 20 2a 2f 0a  viously used */.
b020: 20 20 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74 20    LookasideSlot 
b030: 2a 70 46 72 65 65 3b 20 20 20 2f 2a 20 4c 69 73  *pFree;   /* Lis
b040: 74 20 6f 66 20 61 76 61 69 6c 61 62 6c 65 20 62  t of available b
b050: 75 66 66 65 72 73 20 2a 2f 0a 20 20 76 6f 69 64  uffers */.  void
b060: 20 2a 70 53 74 61 72 74 3b 20 20 20 20 20 20 20   *pStart;       
b070: 20 20 20 20 2f 2a 20 46 69 72 73 74 20 62 79 74      /* First byt
b080: 65 20 6f 66 20 61 76 61 69 6c 61 62 6c 65 20 6d  e of available m
b090: 65 6d 6f 72 79 20 73 70 61 63 65 20 2a 2f 0a 20  emory space */. 
b0a0: 20 76 6f 69 64 20 2a 70 45 6e 64 3b 20 20 20 20   void *pEnd;    
b0b0: 20 20 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73           /* Firs
b0c0: 74 20 62 79 74 65 20 70 61 73 74 20 65 6e 64 20  t byte past end 
b0d0: 6f 66 20 61 76 61 69 6c 61 62 6c 65 20 73 70 61  of available spa
b0e0: 63 65 20 2a 2f 0a 7d 3b 0a 73 74 72 75 63 74 20  ce */.};.struct 
b0f0: 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74 20 7b 0a  LookasideSlot {.
b100: 20 20 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74 20    LookasideSlot 
b110: 2a 70 4e 65 78 74 3b 20 20 20 20 2f 2a 20 4e 65  *pNext;    /* Ne
b120: 78 74 20 62 75 66 66 65 72 20 69 6e 20 74 68 65  xt buffer in the
b130: 20 6c 69 73 74 20 6f 66 20 66 72 65 65 20 62 75   list of free bu
b140: 66 66 65 72 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a  ffers */.};../*.
b150: 2a 2a 20 41 20 68 61 73 68 20 74 61 62 6c 65 20  ** A hash table 
b160: 66 6f 72 20 62 75 69 6c 74 2d 69 6e 20 66 75 6e  for built-in fun
b170: 63 74 69 6f 6e 20 64 65 66 69 6e 69 74 69 6f 6e  ction definition
b180: 73 2e 20 20 28 41 70 70 6c 69 63 61 74 69 6f 6e  s.  (Application
b190: 2d 64 65 66 69 6e 65 64 0a 2a 2a 20 66 75 6e 63  -defined.** func
b1a0: 74 69 6f 6e 73 20 75 73 65 20 61 20 72 65 67 75  tions use a regu
b1b0: 6c 61 72 20 74 61 62 6c 65 20 74 61 62 6c 65 20  lar table table 
b1c0: 66 72 6f 6d 20 68 61 73 68 2e 68 2e 29 0a 2a 2a  from hash.h.).**
b1d0: 0a 2a 2a 20 48 61 73 68 20 65 61 63 68 20 46 75  .** Hash each Fu
b1e0: 6e 63 44 65 66 20 73 74 72 75 63 74 75 72 65 20  ncDef structure 
b1f0: 69 6e 74 6f 20 6f 6e 65 20 6f 66 20 74 68 65 20  into one of the 
b200: 46 75 6e 63 44 65 66 48 61 73 68 2e 61 5b 5d 20  FuncDefHash.a[] 
b210: 73 6c 6f 74 73 2e 0a 2a 2a 20 43 6f 6c 6c 69 73  slots..** Collis
b220: 69 6f 6e 73 20 61 72 65 20 6f 6e 20 74 68 65 20  ions are on the 
b230: 46 75 6e 63 44 65 66 2e 75 2e 70 48 61 73 68 20  FuncDef.u.pHash 
b240: 63 68 61 69 6e 2e 20 20 55 73 65 20 74 68 65 20  chain.  Use the 
b250: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 48 41 53 48  SQLITE_FUNC_HASH
b260: 28 29 0a 2a 2a 20 6d 61 63 72 6f 20 74 6f 20 63  ().** macro to c
b270: 6f 6d 70 75 74 65 20 61 20 68 61 73 68 20 6f 6e  ompute a hash on
b280: 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 6e 61   the function na
b290: 6d 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53  me..*/.#define S
b2a0: 51 4c 49 54 45 5f 46 55 4e 43 5f 48 41 53 48 5f  QLITE_FUNC_HASH_
b2b0: 53 5a 20 32 33 0a 73 74 72 75 63 74 20 46 75 6e  SZ 23.struct Fun
b2c0: 63 44 65 66 48 61 73 68 20 7b 0a 20 20 46 75 6e  cDefHash {.  Fun
b2d0: 63 44 65 66 20 2a 61 5b 53 51 4c 49 54 45 5f 46  cDef *a[SQLITE_F
b2e0: 55 4e 43 5f 48 41 53 48 5f 53 5a 5d 3b 20 20 20  UNC_HASH_SZ];   
b2f0: 20 20 20 20 2f 2a 20 48 61 73 68 20 74 61 62 6c      /* Hash tabl
b300: 65 20 66 6f 72 20 66 75 6e 63 74 69 6f 6e 73 20  e for functions 
b310: 2a 2f 0a 7d 3b 0a 23 64 65 66 69 6e 65 20 53 51  */.};.#define SQ
b320: 4c 49 54 45 5f 46 55 4e 43 5f 48 41 53 48 28 43  LITE_FUNC_HASH(C
b330: 2c 4c 29 20 28 28 28 43 29 2b 28 4c 29 29 25 53  ,L) (((C)+(L))%S
b340: 51 4c 49 54 45 5f 46 55 4e 43 5f 48 41 53 48 5f  QLITE_FUNC_HASH_
b350: 53 5a 29 0a 0a 23 69 66 64 65 66 20 53 51 4c 49  SZ)..#ifdef SQLI
b360: 54 45 5f 55 53 45 52 5f 41 55 54 48 45 4e 54 49  TE_USER_AUTHENTI
b370: 43 41 54 49 4f 4e 0a 2f 2a 0a 2a 2a 20 49 6e 66  CATION./*.** Inf
b380: 6f 72 6d 61 74 69 6f 6e 20 68 65 6c 64 20 69 6e  ormation held in
b390: 20 74 68 65 20 22 73 71 6c 69 74 65 33 22 20 64   the "sqlite3" d
b3a0: 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
b3b0: 6f 6e 20 6f 62 6a 65 63 74 20 61 6e 64 20 75 73  on object and us
b3c0: 65 64 0a 2a 2a 20 74 6f 20 6d 61 6e 61 67 65 20  ed.** to manage 
b3d0: 75 73 65 72 20 61 75 74 68 65 6e 74 69 63 61 74  user authenticat
b3e0: 69 6f 6e 2e 0a 2a 2f 0a 74 79 70 65 64 65 66 20  ion..*/.typedef 
b3f0: 73 74 72 75 63 74 20 73 71 6c 69 74 65 33 5f 75  struct sqlite3_u
b400: 73 65 72 61 75 74 68 20 73 71 6c 69 74 65 33 5f  serauth sqlite3_
b410: 75 73 65 72 61 75 74 68 3b 0a 73 74 72 75 63 74  userauth;.struct
b420: 20 73 71 6c 69 74 65 33 5f 75 73 65 72 61 75 74   sqlite3_useraut
b430: 68 20 7b 0a 20 20 75 38 20 61 75 74 68 4c 65 76  h {.  u8 authLev
b440: 65 6c 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  el;             
b450: 20 20 20 20 2f 2a 20 43 75 72 72 65 6e 74 20 61      /* Current a
b460: 75 74 68 65 6e 74 69 63 61 74 69 6f 6e 20 6c 65  uthentication le
b470: 76 65 6c 20 2a 2f 0a 20 20 69 6e 74 20 6e 41 75  vel */.  int nAu
b480: 74 68 50 57 3b 20 20 20 20 20 20 20 20 20 20 20  thPW;           
b490: 20 20 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f         /* Size o
b4a0: 66 20 74 68 65 20 7a 41 75 74 68 50 57 20 69 6e  f the zAuthPW in
b4b0: 20 62 79 74 65 73 20 2a 2f 0a 20 20 63 68 61 72   bytes */.  char
b4c0: 20 2a 7a 41 75 74 68 50 57 3b 20 20 20 20 20 20   *zAuthPW;      
b4d0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50 61 73            /* Pas
b4e0: 73 77 6f 72 64 20 75 73 65 64 20 74 6f 20 61 75  sword used to au
b4f0: 74 68 65 6e 74 69 63 61 74 65 20 2a 2f 0a 20 20  thenticate */.  
b500: 63 68 61 72 20 2a 7a 41 75 74 68 55 73 65 72 3b  char *zAuthUser;
b510: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
b520: 20 55 73 65 72 20 6e 61 6d 65 20 75 73 65 64 20   User name used 
b530: 74 6f 20 61 75 74 68 65 6e 74 69 63 61 74 65 20  to authenticate 
b540: 2a 2f 0a 7d 3b 0a 0a 2f 2a 20 41 6c 6c 6f 77 65  */.};../* Allowe
b550: 64 20 76 61 6c 75 65 73 20 66 6f 72 20 73 71 6c  d values for sql
b560: 69 74 65 33 5f 75 73 65 72 61 75 74 68 2e 61 75  ite3_userauth.au
b570: 74 68 4c 65 76 65 6c 20 2a 2f 0a 23 64 65 66 69  thLevel */.#defi
b580: 6e 65 20 55 41 55 54 48 5f 55 6e 6b 6e 6f 77 6e  ne UAUTH_Unknown
b590: 20 20 20 20 20 30 20 20 20 20 20 2f 2a 20 41 75       0     /* Au
b5a0: 74 68 65 6e 74 69 63 61 74 69 6f 6e 20 6e 6f 74  thentication not
b5b0: 20 79 65 74 20 63 68 65 63 6b 65 64 20 2a 2f 0a   yet checked */.
b5c0: 23 64 65 66 69 6e 65 20 55 41 55 54 48 5f 46 61  #define UAUTH_Fa
b5d0: 69 6c 20 20 20 20 20 20 20 20 31 20 20 20 20 20  il        1     
b5e0: 2f 2a 20 55 73 65 72 20 61 75 74 68 65 6e 74 69  /* User authenti
b5f0: 63 61 74 69 6f 6e 20 66 61 69 6c 65 64 20 2a 2f  cation failed */
b600: 0a 23 64 65 66 69 6e 65 20 55 41 55 54 48 5f 55  .#define UAUTH_U
b610: 73 65 72 20 20 20 20 20 20 20 20 32 20 20 20 20  ser        2    
b620: 20 2f 2a 20 41 75 74 68 65 6e 74 69 63 61 74 65   /* Authenticate
b630: 64 20 61 73 20 61 20 6e 6f 72 6d 61 6c 20 75 73  d as a normal us
b640: 65 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 55 41  er */.#define UA
b650: 55 54 48 5f 41 64 6d 69 6e 20 20 20 20 20 20 20  UTH_Admin       
b660: 33 20 20 20 20 20 2f 2a 20 41 75 74 68 65 6e 74  3     /* Authent
b670: 69 63 61 74 65 64 20 61 73 20 61 6e 20 61 64 6d  icated as an adm
b680: 69 6e 69 73 74 72 61 74 6f 72 20 2a 2f 0a 0a 2f  inistrator */../
b690: 2a 20 46 75 6e 63 74 69 6f 6e 73 20 75 73 65 64  * Functions used
b6a0: 20 6f 6e 6c 79 20 62 79 20 75 73 65 72 20 61 75   only by user au
b6b0: 74 68 6f 72 69 7a 61 74 69 6f 6e 20 6c 6f 67 69  thorization logi
b6c0: 63 20 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33  c */.int sqlite3
b6d0: 55 73 65 72 41 75 74 68 54 61 62 6c 65 28 63 6f  UserAuthTable(co
b6e0: 6e 73 74 20 63 68 61 72 2a 29 3b 0a 69 6e 74 20  nst char*);.int 
b6f0: 73 71 6c 69 74 65 33 55 73 65 72 41 75 74 68 43  sqlite3UserAuthC
b700: 68 65 63 6b 4c 6f 67 69 6e 28 73 71 6c 69 74 65  heckLogin(sqlite
b710: 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 75  3*,const char*,u
b720: 38 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  8*);.void sqlite
b730: 33 55 73 65 72 41 75 74 68 49 6e 69 74 28 73 71  3UserAuthInit(sq
b740: 6c 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20 73 71  lite3*);.void sq
b750: 6c 69 74 65 33 43 72 79 70 74 46 75 6e 63 28 73  lite3CryptFunc(s
b760: 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c  qlite3_context*,
b770: 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75  int,sqlite3_valu
b780: 65 2a 2a 29 3b 0a 0a 23 65 6e 64 69 66 20 2f 2a  e**);..#endif /*
b790: 20 53 51 4c 49 54 45 5f 55 53 45 52 5f 41 55 54   SQLITE_USER_AUT
b7a0: 48 45 4e 54 49 43 41 54 49 4f 4e 20 2a 2f 0a 0a  HENTICATION */..
b7b0: 2f 2a 0a 2a 2a 20 74 79 70 65 64 65 66 20 66 6f  /*.** typedef fo
b7c0: 72 20 74 68 65 20 61 75 74 68 6f 72 69 7a 61 74  r the authorizat
b7d0: 69 6f 6e 20 63 61 6c 6c 62 61 63 6b 20 66 75 6e  ion callback fun
b7e0: 63 74 69 6f 6e 2e 0a 2a 2f 0a 23 69 66 64 65 66  ction..*/.#ifdef
b7f0: 20 53 51 4c 49 54 45 5f 55 53 45 52 5f 41 55 54   SQLITE_USER_AUT
b800: 48 45 4e 54 49 43 41 54 49 4f 4e 0a 20 20 74 79  HENTICATION.  ty
b810: 70 65 64 65 66 20 69 6e 74 20 28 2a 73 71 6c 69  pedef int (*sqli
b820: 74 65 33 5f 78 61 75 74 68 29 28 76 6f 69 64 2a  te3_xauth)(void*
b830: 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a  ,int,const char*
b840: 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e  ,const char*,con
b850: 73 74 20 63 68 61 72 2a 2c 0a 20 20 20 20 20 20  st char*,.      
b860: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b870: 20 20 20 20 20 20 20 20 20 63 6f 6e 73 74 20 63           const c
b880: 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  har*, const char
b890: 2a 29 3b 0a 23 65 6c 73 65 0a 20 20 74 79 70 65  *);.#else.  type
b8a0: 64 65 66 20 69 6e 74 20 28 2a 73 71 6c 69 74 65  def int (*sqlite
b8b0: 33 5f 78 61 75 74 68 29 28 76 6f 69 64 2a 2c 69  3_xauth)(void*,i
b8c0: 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63  nt,const char*,c
b8d0: 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74  onst char*,const
b8e0: 20 63 68 61 72 2a 2c 0a 20 20 20 20 20 20 20 20   char*,.        
b8f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b900: 20 20 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61         const cha
b910: 72 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66  r*);.#endif..#if
b920: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
b930: 5f 44 45 50 52 45 43 41 54 45 44 0a 2f 2a 20 54  _DEPRECATED./* T
b940: 68 69 73 20 69 73 20 61 6e 20 65 78 74 72 61 20  his is an extra 
b950: 53 51 4c 49 54 45 5f 54 52 41 43 45 20 6d 61 63  SQLITE_TRACE mac
b960: 72 6f 20 74 68 61 74 20 69 6e 64 69 63 61 74 65  ro that indicate
b970: 73 20 22 6c 65 67 61 63 79 22 20 74 72 61 63 69  s "legacy" traci
b980: 6e 67 0a 2a 2a 20 69 6e 20 74 68 65 20 73 74 79  ng.** in the sty
b990: 6c 65 20 6f 66 20 73 71 6c 69 74 65 33 5f 74 72  le of sqlite3_tr
b9a0: 61 63 65 28 29 0a 2a 2f 0a 23 64 65 66 69 6e 65  ace().*/.#define
b9b0: 20 53 51 4c 49 54 45 5f 54 52 41 43 45 5f 4c 45   SQLITE_TRACE_LE
b9c0: 47 41 43 59 20 20 20 20 20 20 20 20 20 20 30 78  GACY          0x
b9d0: 34 30 20 20 20 20 20 2f 2a 20 55 73 65 20 74 68  40     /* Use th
b9e0: 65 20 6c 65 67 61 63 79 20 78 54 72 61 63 65 20  e legacy xTrace 
b9f0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
ba00: 45 5f 54 52 41 43 45 5f 58 50 52 4f 46 49 4c 45  E_TRACE_XPROFILE
ba10: 20 20 20 20 20 20 20 20 30 78 38 30 20 20 20 20          0x80    
ba20: 20 2f 2a 20 55 73 65 20 74 68 65 20 6c 65 67 61   /* Use the lega
ba30: 63 79 20 78 50 72 6f 66 69 6c 65 20 2a 2f 0a 23  cy xProfile */.#
ba40: 65 6c 73 65 0a 23 64 65 66 69 6e 65 20 53 51 4c  else.#define SQL
ba50: 49 54 45 5f 54 52 41 43 45 5f 4c 45 47 41 43 59  ITE_TRACE_LEGACY
ba60: 20 20 20 20 20 20 20 20 20 20 30 0a 23 64 65 66            0.#def
ba70: 69 6e 65 20 53 51 4c 49 54 45 5f 54 52 41 43 45  ine SQLITE_TRACE
ba80: 5f 58 50 52 4f 46 49 4c 45 20 20 20 20 20 20 20  _XPROFILE       
ba90: 20 30 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c   0.#endif /* SQL
baa0: 49 54 45 5f 4f 4d 49 54 5f 44 45 50 52 45 43 41  ITE_OMIT_DEPRECA
bab0: 54 45 44 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  TED */.#define S
bac0: 51 4c 49 54 45 5f 54 52 41 43 45 5f 4e 4f 4e 4c  QLITE_TRACE_NONL
bad0: 45 47 41 43 59 5f 4d 41 53 4b 20 20 30 78 30 66  EGACY_MASK  0x0f
bae0: 20 20 20 20 20 2f 2a 20 4e 6f 72 6d 61 6c 20 66       /* Normal f
baf0: 6c 61 67 73 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20  lags */.../*.** 
bb00: 45 61 63 68 20 64 61 74 61 62 61 73 65 20 63 6f  Each database co
bb10: 6e 6e 65 63 74 69 6f 6e 20 69 73 20 61 6e 20 69  nnection is an i
bb20: 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66  nstance of the f
bb30: 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75  ollowing structu
bb40: 72 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 73 71  re..*/.struct sq
bb50: 6c 69 74 65 33 20 7b 0a 20 20 73 71 6c 69 74 65  lite3 {.  sqlite
bb60: 33 5f 76 66 73 20 2a 70 56 66 73 3b 20 20 20 20  3_vfs *pVfs;    
bb70: 20 20 20 20 20 20 20 20 2f 2a 20 4f 53 20 49 6e          /* OS In
bb80: 74 65 72 66 61 63 65 20 2a 2f 0a 20 20 73 74 72  terface */.  str
bb90: 75 63 74 20 56 64 62 65 20 2a 70 56 64 62 65 3b  uct Vdbe *pVdbe;
bba0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 69             /* Li
bbb0: 73 74 20 6f 66 20 61 63 74 69 76 65 20 76 69 72  st of active vir
bbc0: 74 75 61 6c 20 6d 61 63 68 69 6e 65 73 20 2a 2f  tual machines */
bbd0: 0a 20 20 43 6f 6c 6c 53 65 71 20 2a 70 44 66 6c  .  CollSeq *pDfl
bbe0: 74 43 6f 6c 6c 3b 20 20 20 20 20 20 20 20 20 20  tColl;          
bbf0: 20 2f 2a 20 54 68 65 20 64 65 66 61 75 6c 74 20   /* The default 
bc00: 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e  collating sequen
bc10: 63 65 20 28 42 49 4e 41 52 59 29 20 2a 2f 0a 20  ce (BINARY) */. 
bc20: 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 20 2a   sqlite3_mutex *
bc30: 6d 75 74 65 78 3b 20 20 20 20 20 20 20 20 20 2f  mutex;         /
bc40: 2a 20 43 6f 6e 6e 65 63 74 69 6f 6e 20 6d 75 74  * Connection mut
bc50: 65 78 20 2a 2f 0a 20 20 44 62 20 2a 61 44 62 3b  ex */.  Db *aDb;
bc60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bc70: 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20 62 61 63        /* All bac
bc80: 6b 65 6e 64 73 20 2a 2f 0a 20 20 69 6e 74 20 6e  kends */.  int n
bc90: 44 62 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  Db;             
bca0: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
bcb0: 65 72 20 6f 66 20 62 61 63 6b 65 6e 64 73 20 63  er of backends c
bcc0: 75 72 72 65 6e 74 6c 79 20 69 6e 20 75 73 65 20  urrently in use 
bcd0: 2a 2f 0a 20 20 75 33 32 20 6d 44 62 46 6c 61 67  */.  u32 mDbFlag
bce0: 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  s;              
bcf0: 20 20 20 2f 2a 20 66 6c 61 67 73 20 72 65 63 6f     /* flags reco
bd00: 72 64 69 6e 67 20 69 6e 74 65 72 6e 61 6c 20 73  rding internal s
bd10: 74 61 74 65 20 2a 2f 0a 20 20 75 36 34 20 66 6c  tate */.  u64 fl
bd20: 61 67 73 3b 20 20 20 20 20 20 20 20 20 20 20 20  ags;            
bd30: 20 20 20 20 20 20 20 20 2f 2a 20 66 6c 61 67 73          /* flags
bd40: 20 73 65 74 74 61 62 6c 65 20 62 79 20 70 72 61   settable by pra
bd50: 67 6d 61 73 2e 20 53 65 65 20 62 65 6c 6f 77 20  gmas. See below 
bd60: 2a 2f 0a 20 20 69 36 34 20 6c 61 73 74 52 6f 77  */.  i64 lastRow
bd70: 69 64 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  id;             
bd80: 20 20 20 2f 2a 20 52 4f 57 49 44 20 6f 66 20 6d     /* ROWID of m
bd90: 6f 73 74 20 72 65 63 65 6e 74 20 69 6e 73 65 72  ost recent inser
bda0: 74 20 28 73 65 65 20 61 62 6f 76 65 29 20 2a 2f  t (see above) */
bdb0: 0a 20 20 69 36 34 20 73 7a 4d 6d 61 70 3b 20 20  .  i64 szMmap;  
bdc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bdd0: 20 2f 2a 20 44 65 66 61 75 6c 74 20 6d 6d 61 70   /* Default mmap
bde0: 5f 73 69 7a 65 20 73 65 74 74 69 6e 67 20 2a 2f  _size setting */
bdf0: 0a 20 20 75 33 32 20 6e 53 63 68 65 6d 61 4c 6f  .  u32 nSchemaLo
be00: 63 6b 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ck;             
be10: 20 2f 2a 20 44 6f 20 6e 6f 74 20 72 65 73 65 74   /* Do not reset
be20: 20 74 68 65 20 73 63 68 65 6d 61 20 77 68 65 6e   the schema when
be30: 20 6e 6f 6e 2d 7a 65 72 6f 20 2a 2f 0a 20 20 75   non-zero */.  u
be40: 6e 73 69 67 6e 65 64 20 69 6e 74 20 6f 70 65 6e  nsigned int open
be50: 46 6c 61 67 73 3b 20 20 20 20 20 20 20 2f 2a 20  Flags;       /* 
be60: 46 6c 61 67 73 20 70 61 73 73 65 64 20 74 6f 20  Flags passed to 
be70: 73 71 6c 69 74 65 33 5f 76 66 73 2e 78 4f 70 65  sqlite3_vfs.xOpe
be80: 6e 28 29 20 2a 2f 0a 20 20 69 6e 74 20 65 72 72  n() */.  int err
be90: 43 6f 64 65 3b 20 20 20 20 20 20 20 20 20 20 20  Code;           
bea0: 20 20 20 20 20 20 20 2f 2a 20 4d 6f 73 74 20 72         /* Most r
beb0: 65 63 65 6e 74 20 65 72 72 6f 72 20 63 6f 64 65  ecent error code
bec0: 20 28 53 51 4c 49 54 45 5f 2a 29 20 2a 2f 0a 20   (SQLITE_*) */. 
bed0: 20 69 6e 74 20 65 72 72 4d 61 73 6b 3b 20 20 20   int errMask;   
bee0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
bef0: 2a 20 26 20 72 65 73 75 6c 74 20 63 6f 64 65 73  * & result codes
bf00: 20 77 69 74 68 20 74 68 69 73 20 62 65 66 6f 72   with this befor
bf10: 65 20 72 65 74 75 72 6e 69 6e 67 20 2a 2f 0a 20  e returning */. 
bf20: 20 69 6e 74 20 69 53 79 73 45 72 72 6e 6f 3b 20   int iSysErrno; 
bf30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
bf40: 2a 20 45 72 72 6e 6f 20 76 61 6c 75 65 20 66 72  * Errno value fr
bf50: 6f 6d 20 6c 61 73 74 20 73 79 73 74 65 6d 20 65  om last system e
bf60: 72 72 6f 72 20 2a 2f 0a 20 20 75 31 36 20 64 62  rror */.  u16 db
bf70: 4f 70 74 46 6c 61 67 73 3b 20 20 20 20 20 20 20  OptFlags;       
bf80: 20 20 20 20 20 20 20 20 2f 2a 20 46 6c 61 67 73          /* Flags
bf90: 20 74 6f 20 65 6e 61 62 6c 65 2f 64 69 73 61 62   to enable/disab
bfa0: 6c 65 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73  le optimizations
bfb0: 20 2a 2f 0a 20 20 75 38 20 65 6e 63 3b 20 20 20   */.  u8 enc;   
bfc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bfd0: 20 20 20 20 2f 2a 20 54 65 78 74 20 65 6e 63 6f      /* Text enco
bfe0: 64 69 6e 67 20 2a 2f 0a 20 20 75 38 20 61 75 74  ding */.  u8 aut
bff0: 6f 43 6f 6d 6d 69 74 3b 20 20 20 20 20 20 20 20  oCommit;        
c000: 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 61          /* The a
c010: 75 74 6f 2d 63 6f 6d 6d 69 74 20 66 6c 61 67 2e  uto-commit flag.
c020: 20 2a 2f 0a 20 20 75 38 20 62 43 6f 6e 63 75 72   */.  u8 bConcur
c030: 72 65 6e 74 3b 20 20 20 20 20 20 20 20 20 20 20  rent;           
c040: 20 20 20 20 2f 2a 20 43 75 72 72 65 6e 74 20 74      /* Current t
c050: 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 22 43  ransaction is "C
c060: 4f 4e 43 55 52 52 45 4e 54 22 20 2a 2f 0a 20 20  ONCURRENT" */.  
c070: 75 38 20 74 65 6d 70 5f 73 74 6f 72 65 3b 20 20  u8 temp_store;  
c080: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
c090: 20 31 3a 20 66 69 6c 65 20 32 3a 20 6d 65 6d 6f   1: file 2: memo
c0a0: 72 79 20 30 3a 20 64 65 66 61 75 6c 74 20 2a 2f  ry 0: default */
c0b0: 0a 20 20 75 38 20 6d 61 6c 6c 6f 63 46 61 69 6c  .  u8 mallocFail
c0c0: 65 64 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ed;             
c0d0: 20 2f 2a 20 54 72 75 65 20 69 66 20 77 65 20 68   /* True if we h
c0e0: 61 76 65 20 73 65 65 6e 20 61 20 6d 61 6c 6c 6f  ave seen a mallo
c0f0: 63 20 66 61 69 6c 75 72 65 20 2a 2f 0a 20 20 75  c failure */.  u
c100: 38 20 62 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 3b  8 bBenignMalloc;
c110: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
c120: 44 6f 20 6e 6f 74 20 72 65 71 75 69 72 65 20 4f  Do not require O
c130: 4f 4d 73 20 69 66 20 74 72 75 65 20 2a 2f 0a 20  OMs if true */. 
c140: 20 75 38 20 64 66 6c 74 4c 6f 63 6b 4d 6f 64 65   u8 dfltLockMode
c150: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
c160: 2a 20 44 65 66 61 75 6c 74 20 6c 6f 63 6b 69 6e  * Default lockin
c170: 67 2d 6d 6f 64 65 20 66 6f 72 20 61 74 74 61 63  g-mode for attac
c180: 68 65 64 20 64 62 73 20 2a 2f 0a 20 20 73 69 67  hed dbs */.  sig
c190: 6e 65 64 20 63 68 61 72 20 6e 65 78 74 41 75 74  ned char nextAut
c1a0: 6f 76 61 63 3b 20 20 20 20 20 20 2f 2a 20 41 75  ovac;      /* Au
c1b0: 74 6f 76 61 63 20 73 65 74 74 69 6e 67 20 61 66  tovac setting af
c1c0: 74 65 72 20 56 41 43 55 55 4d 20 69 66 20 3e 3d  ter VACUUM if >=
c1d0: 30 20 2a 2f 0a 20 20 75 38 20 73 75 70 70 72 65  0 */.  u8 suppre
c1e0: 73 73 45 72 72 3b 20 20 20 20 20 20 20 20 20 20  ssErr;          
c1f0: 20 20 20 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 69       /* Do not i
c200: 73 73 75 65 20 65 72 72 6f 72 20 6d 65 73 73 61  ssue error messa
c210: 67 65 73 20 69 66 20 74 72 75 65 20 2a 2f 0a 20  ges if true */. 
c220: 20 75 38 20 76 74 61 62 4f 6e 43 6f 6e 66 6c 69   u8 vtabOnConfli
c230: 63 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  ct;            /
c240: 2a 20 56 61 6c 75 65 20 74 6f 20 72 65 74 75 72  * Value to retur
c250: 6e 20 66 6f 72 20 73 33 5f 76 74 61 62 5f 6f 6e  n for s3_vtab_on
c260: 5f 63 6f 6e 66 6c 69 63 74 28 29 20 2a 2f 0a 20  _conflict() */. 
c270: 20 75 38 20 69 73 54 72 61 6e 73 61 63 74 69 6f   u8 isTransactio
c280: 6e 53 61 76 65 70 6f 69 6e 74 3b 20 20 20 20 2f  nSavepoint;    /
c290: 2a 20 54 72 75 65 20 69 66 20 74 68 65 20 6f 75  * True if the ou
c2a0: 74 65 72 6d 6f 73 74 20 73 61 76 65 70 6f 69 6e  termost savepoin
c2b0: 74 20 69 73 20 61 20 54 53 20 2a 2f 0a 20 20 75  t is a TS */.  u
c2c0: 38 20 6d 54 72 61 63 65 3b 20 20 20 20 20 20 20  8 mTrace;       
c2d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
c2e0: 7a 65 72 6f 20 6f 72 20 6d 6f 72 65 20 53 51 4c  zero or more SQL
c2f0: 49 54 45 5f 54 52 41 43 45 20 66 6c 61 67 73 20  ITE_TRACE flags 
c300: 2a 2f 0a 20 20 75 38 20 6e 6f 53 68 61 72 65 64  */.  u8 noShared
c310: 43 61 63 68 65 3b 20 20 20 20 20 20 20 20 20 20  Cache;          
c320: 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 6e 6f     /* True if no
c330: 20 73 68 61 72 65 64 2d 63 61 63 68 65 20 62 61   shared-cache ba
c340: 63 6b 65 6e 64 73 20 2a 2f 0a 20 20 75 38 20 6e  ckends */.  u8 n
c350: 53 71 6c 45 78 65 63 3b 20 20 20 20 20 20 20 20  SqlExec;        
c360: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
c370: 62 65 72 20 6f 66 20 70 65 6e 64 69 6e 67 20 4f  ber of pending O
c380: 50 5f 53 71 6c 45 78 65 63 20 6f 70 63 6f 64 65  P_SqlExec opcode
c390: 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 65 78 74 50  s */.  int nextP
c3a0: 61 67 65 73 69 7a 65 3b 20 20 20 20 20 20 20 20  agesize;        
c3b0: 20 20 20 20 20 2f 2a 20 50 61 67 65 73 69 7a 65       /* Pagesize
c3c0: 20 61 66 74 65 72 20 56 41 43 55 55 4d 20 69 66   after VACUUM if
c3d0: 20 3e 30 20 2a 2f 0a 20 20 75 33 32 20 6d 61 67   >0 */.  u32 mag
c3e0: 69 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ic;             
c3f0: 20 20 20 20 20 20 20 2f 2a 20 4d 61 67 69 63 20         /* Magic 
c400: 6e 75 6d 62 65 72 20 66 6f 72 20 64 65 74 65 63  number for detec
c410: 74 20 6c 69 62 72 61 72 79 20 6d 69 73 75 73 65  t library misuse
c420: 20 2a 2f 0a 20 20 69 6e 74 20 6e 43 68 61 6e 67   */.  int nChang
c430: 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e;              
c440: 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 72 65 74      /* Value ret
c450: 75 72 6e 65 64 20 62 79 20 73 71 6c 69 74 65 33  urned by sqlite3
c460: 5f 63 68 61 6e 67 65 73 28 29 20 2a 2f 0a 20 20  _changes() */.  
c470: 69 6e 74 20 6e 54 6f 74 61 6c 43 68 61 6e 67 65  int nTotalChange
c480: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
c490: 20 56 61 6c 75 65 20 72 65 74 75 72 6e 65 64 20   Value returned 
c4a0: 62 79 20 73 71 6c 69 74 65 33 5f 74 6f 74 61 6c  by sqlite3_total
c4b0: 5f 63 68 61 6e 67 65 73 28 29 20 2a 2f 0a 20 20  _changes() */.  
c4c0: 69 6e 74 20 61 4c 69 6d 69 74 5b 53 51 4c 49 54  int aLimit[SQLIT
c4d0: 45 5f 4e 5f 4c 49 4d 49 54 5d 3b 20 20 20 2f 2a  E_N_LIMIT];   /*
c4e0: 20 4c 69 6d 69 74 73 20 2a 2f 0a 20 20 69 6e 74   Limits */.  int
c4f0: 20 6e 4d 61 78 53 6f 72 74 65 72 4d 6d 61 70 3b   nMaxSorterMmap;
c500: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61             /* Ma
c510: 78 69 6d 75 6d 20 73 69 7a 65 20 6f 66 20 72 65  ximum size of re
c520: 67 69 6f 6e 73 20 6d 61 70 70 65 64 20 62 79 20  gions mapped by 
c530: 73 6f 72 74 65 72 20 2a 2f 0a 20 20 73 74 72 75  sorter */.  stru
c540: 63 74 20 73 71 6c 69 74 65 33 49 6e 69 74 49 6e  ct sqlite3InitIn
c550: 66 6f 20 7b 20 20 20 20 20 20 2f 2a 20 49 6e 66  fo {      /* Inf
c560: 6f 72 6d 61 74 69 6f 6e 20 75 73 65 64 20 64 75  ormation used du
c570: 72 69 6e 67 20 69 6e 69 74 69 61 6c 69 7a 61 74  ring initializat
c580: 69 6f 6e 20 2a 2f 0a 20 20 20 20 69 6e 74 20 6e  ion */.    int n
c590: 65 77 54 6e 75 6d 3b 20 20 20 20 20 20 20 20 20  ewTnum;         
c5a0: 20 20 20 20 20 20 20 2f 2a 20 52 6f 6f 74 70 61         /* Rootpa
c5b0: 67 65 20 6f 66 20 74 61 62 6c 65 20 62 65 69 6e  ge of table bein
c5c0: 67 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f  g initialized */
c5d0: 0a 20 20 20 20 75 38 20 69 44 62 3b 20 20 20 20  .    u8 iDb;    
c5e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c5f0: 20 2f 2a 20 57 68 69 63 68 20 64 62 20 66 69 6c   /* Which db fil
c600: 65 20 69 73 20 62 65 69 6e 67 20 69 6e 69 74 69  e is being initi
c610: 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 20 20 75 38  alized */.    u8
c620: 20 62 75 73 79 3b 20 20 20 20 20 20 20 20 20 20   busy;          
c630: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 52 55            /* TRU
c640: 45 20 69 66 20 63 75 72 72 65 6e 74 6c 79 20 69  E if currently i
c650: 6e 69 74 69 61 6c 69 7a 69 6e 67 20 2a 2f 0a 20  nitializing */. 
c660: 20 20 20 75 6e 73 69 67 6e 65 64 20 6f 72 70 68     unsigned orph
c670: 61 6e 54 72 69 67 67 65 72 20 3a 20 31 3b 20 2f  anTrigger : 1; /
c680: 2a 20 4c 61 73 74 20 73 74 61 74 65 6d 65 6e 74  * Last statement
c690: 20 69 73 20 6f 72 70 68 61 6e 65 64 20 54 45 4d   is orphaned TEM
c6a0: 50 20 74 72 69 67 67 65 72 20 2a 2f 0a 20 20 20  P trigger */.   
c6b0: 20 75 6e 73 69 67 6e 65 64 20 69 6d 70 6f 73 74   unsigned impost
c6c0: 65 72 54 61 62 6c 65 20 3a 20 31 3b 20 2f 2a 20  erTable : 1; /* 
c6d0: 42 75 69 6c 64 69 6e 67 20 61 6e 20 69 6d 70 6f  Building an impo
c6e0: 73 74 65 72 20 74 61 62 6c 65 20 2a 2f 0a 20 20  ster table */.  
c6f0: 20 20 75 6e 73 69 67 6e 65 64 20 72 65 6f 70 65    unsigned reope
c700: 6e 4d 65 6d 64 62 20 3a 20 31 3b 20 20 20 2f 2a  nMemdb : 1;   /*
c710: 20 41 54 54 41 43 48 20 69 73 20 72 65 61 6c 6c   ATTACH is reall
c720: 79 20 61 20 72 65 6f 70 65 6e 20 75 73 69 6e 67  y a reopen using
c730: 20 4d 65 6d 44 42 20 2a 2f 0a 20 20 7d 20 69 6e   MemDB */.  } in
c740: 69 74 3b 0a 20 20 69 6e 74 20 6e 56 64 62 65 41  it;.  int nVdbeA
c750: 63 74 69 76 65 3b 20 20 20 20 20 20 20 20 20 20  ctive;          
c760: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
c770: 20 56 44 42 45 73 20 63 75 72 72 65 6e 74 6c 79   VDBEs currently
c780: 20 72 75 6e 6e 69 6e 67 20 2a 2f 0a 20 20 69 6e   running */.  in
c790: 74 20 6e 56 64 62 65 52 65 61 64 3b 20 20 20 20  t nVdbeRead;    
c7a0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
c7b0: 75 6d 62 65 72 20 6f 66 20 61 63 74 69 76 65 20  umber of active 
c7c0: 56 44 42 45 73 20 74 68 61 74 20 72 65 61 64 20  VDBEs that read 
c7d0: 6f 72 20 77 72 69 74 65 20 2a 2f 0a 20 20 69 6e  or write */.  in
c7e0: 74 20 6e 56 64 62 65 57 72 69 74 65 3b 20 20 20  t nVdbeWrite;   
c7f0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
c800: 75 6d 62 65 72 20 6f 66 20 61 63 74 69 76 65 20  umber of active 
c810: 56 44 42 45 73 20 74 68 61 74 20 72 65 61 64 20  VDBEs that read 
c820: 61 6e 64 20 77 72 69 74 65 20 2a 2f 0a 20 20 69  and write */.  i
c830: 6e 74 20 6e 56 64 62 65 45 78 65 63 3b 20 20 20  nt nVdbeExec;   
c840: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
c850: 4e 75 6d 62 65 72 20 6f 66 20 6e 65 73 74 65 64  Number of nested
c860: 20 63 61 6c 6c 73 20 74 6f 20 56 64 62 65 45 78   calls to VdbeEx
c870: 65 63 28 29 20 2a 2f 0a 20 20 69 6e 74 20 6e 56  ec() */.  int nV
c880: 44 65 73 74 72 6f 79 3b 20 20 20 20 20 20 20 20  Destroy;        
c890: 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
c8a0: 72 20 6f 66 20 61 63 74 69 76 65 20 4f 50 5f 56  r of active OP_V
c8b0: 44 65 73 74 72 6f 79 20 6f 70 65 72 61 74 69 6f  Destroy operatio
c8c0: 6e 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 45 78 74  ns */.  int nExt
c8d0: 65 6e 73 69 6f 6e 3b 20 20 20 20 20 20 20 20 20  ension;         
c8e0: 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
c8f0: 6f 66 20 6c 6f 61 64 65 64 20 65 78 74 65 6e 73  of loaded extens
c900: 69 6f 6e 73 20 2a 2f 0a 20 20 76 6f 69 64 20 2a  ions */.  void *
c910: 2a 61 45 78 74 65 6e 73 69 6f 6e 3b 20 20 20 20  *aExtension;    
c920: 20 20 20 20 20 20 20 20 2f 2a 20 41 72 72 61 79          /* Array
c930: 20 6f 66 20 73 68 61 72 65 64 20 6c 69 62 72 61   of shared libra
c940: 72 79 20 68 61 6e 64 6c 65 73 20 2a 2f 0a 20 20  ry handles */.  
c950: 69 6e 74 20 28 2a 78 54 72 61 63 65 29 28 75 33  int (*xTrace)(u3
c960: 32 2c 76 6f 69 64 2a 2c 76 6f 69 64 2a 2c 76 6f  2,void*,void*,vo
c970: 69 64 2a 29 3b 20 20 20 20 20 2f 2a 20 54 72 61  id*);     /* Tra
c980: 63 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20  ce function */. 
c990: 20 76 6f 69 64 20 2a 70 54 72 61 63 65 41 72 67   void *pTraceArg
c9a0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
c9b0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72             /* Ar
c9c0: 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20 74 72  gument to the tr
c9d0: 61 63 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a  ace function */.
c9e0: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
c9f0: 4d 49 54 5f 44 45 50 52 45 43 41 54 45 44 0a 20  MIT_DEPRECATED. 
ca00: 20 76 6f 69 64 20 28 2a 78 50 72 6f 66 69 6c 65   void (*xProfile
ca10: 29 28 76 6f 69 64 2a 2c 63 6f 6e 73 74 20 63 68  )(void*,const ch
ca20: 61 72 2a 2c 75 36 34 29 3b 20 20 2f 2a 20 50 72  ar*,u64);  /* Pr
ca30: 6f 66 69 6c 69 6e 67 20 66 75 6e 63 74 69 6f 6e  ofiling function
ca40: 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 50 72 6f   */.  void *pPro
ca50: 66 69 6c 65 41 72 67 3b 20 20 20 20 20 20 20 20  fileArg;        
ca60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ca70: 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f 20 70  /* Argument to p
ca80: 72 6f 66 69 6c 65 20 66 75 6e 63 74 69 6f 6e 20  rofile function 
ca90: 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 76 6f 69 64  */.#endif.  void
caa0: 20 2a 70 43 6f 6d 6d 69 74 41 72 67 3b 20 20 20   *pCommitArg;   
cab0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
cac0: 20 41 72 67 75 6d 65 6e 74 20 74 6f 20 78 43 6f   Argument to xCo
cad0: 6d 6d 69 74 43 61 6c 6c 62 61 63 6b 28 29 20 2a  mmitCallback() *
cae0: 2f 0a 20 20 69 6e 74 20 28 2a 78 43 6f 6d 6d 69  /.  int (*xCommi
caf0: 74 43 61 6c 6c 62 61 63 6b 29 28 76 6f 69 64 2a  tCallback)(void*
cb00: 29 3b 20 20 20 20 2f 2a 20 49 6e 76 6f 6b 65 64  );    /* Invoked
cb10: 20 61 74 20 65 76 65 72 79 20 63 6f 6d 6d 69 74   at every commit
cb20: 2e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 52 6f  . */.  void *pRo
cb30: 6c 6c 62 61 63 6b 41 72 67 3b 20 20 20 20 20 20  llbackArg;      
cb40: 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72 67 75           /* Argu
cb50: 6d 65 6e 74 20 74 6f 20 78 52 6f 6c 6c 62 61 63  ment to xRollbac
cb60: 6b 43 61 6c 6c 62 61 63 6b 28 29 20 2a 2f 0a 20  kCallback() */. 
cb70: 20 76 6f 69 64 20 28 2a 78 52 6f 6c 6c 62 61 63   void (*xRollbac
cb80: 6b 43 61 6c 6c 62 61 63 6b 29 28 76 6f 69 64 2a  kCallback)(void*
cb90: 29 3b 20 2f 2a 20 49 6e 76 6f 6b 65 64 20 61 74  ); /* Invoked at
cba0: 20 65 76 65 72 79 20 63 6f 6d 6d 69 74 2e 20 2a   every commit. *
cbb0: 2f 0a 20 20 76 6f 69 64 20 2a 70 55 70 64 61 74  /.  void *pUpdat
cbc0: 65 41 72 67 3b 0a 20 20 76 6f 69 64 20 28 2a 78  eArg;.  void (*x
cbd0: 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 29 28  UpdateCallback)(
cbe0: 76 6f 69 64 2a 2c 69 6e 74 2c 20 63 6f 6e 73 74  void*,int, const
cbf0: 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61   char*,const cha
cc00: 72 2a 2c 73 71 6c 69 74 65 5f 69 6e 74 36 34 29  r*,sqlite_int64)
cc10: 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ;.#ifdef SQLITE_
cc20: 45 4e 41 42 4c 45 5f 50 52 45 55 50 44 41 54 45  ENABLE_PREUPDATE
cc30: 5f 48 4f 4f 4b 0a 20 20 76 6f 69 64 20 2a 70 50  _HOOK.  void *pP
cc40: 72 65 55 70 64 61 74 65 41 72 67 3b 20 20 20 20  reUpdateArg;    
cc50: 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20 61        /* First a
cc60: 72 67 75 6d 65 6e 74 20 74 6f 20 78 50 72 65 55  rgument to xPreU
cc70: 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 20 2a 2f  pdateCallback */
cc80: 0a 20 20 76 6f 69 64 20 28 2a 78 50 72 65 55 70  .  void (*xPreUp
cc90: 64 61 74 65 43 61 6c 6c 62 61 63 6b 29 28 20 20  dateCallback)(  
cca0: 20 2f 2a 20 52 65 67 69 73 74 65 72 65 64 20 75   /* Registered u
ccb0: 73 69 6e 67 20 73 71 6c 69 74 65 33 5f 70 72 65  sing sqlite3_pre
ccc0: 75 70 64 61 74 65 5f 68 6f 6f 6b 28 29 20 2a 2f  update_hook() */
ccd0: 0a 20 20 20 20 76 6f 69 64 2a 2c 73 71 6c 69 74  .    void*,sqlit
cce0: 65 33 2a 2c 69 6e 74 2c 63 68 61 72 20 63 6f 6e  e3*,int,char con
ccf0: 73 74 2a 2c 63 68 61 72 20 63 6f 6e 73 74 2a 2c  st*,char const*,
cd00: 73 71 6c 69 74 65 33 5f 69 6e 74 36 34 2c 73 71  sqlite3_int64,sq
cd10: 6c 69 74 65 33 5f 69 6e 74 36 34 0a 20 20 29 3b  lite3_int64.  );
cd20: 0a 20 20 50 72 65 55 70 64 61 74 65 20 2a 70 50  .  PreUpdate *pP
cd30: 72 65 55 70 64 61 74 65 3b 20 20 20 20 20 20 20  reUpdate;       
cd40: 20 2f 2a 20 43 6f 6e 74 65 78 74 20 66 6f 72 20   /* Context for 
cd50: 61 63 74 69 76 65 20 70 72 65 2d 75 70 64 61 74  active pre-updat
cd60: 65 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 23 65  e callback */.#e
cd70: 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 45  ndif /* SQLITE_E
cd80: 4e 41 42 4c 45 5f 50 52 45 55 50 44 41 54 45 5f  NABLE_PREUPDATE_
cd90: 48 4f 4f 4b 20 2a 2f 0a 23 69 66 6e 64 65 66 20  HOOK */.#ifndef 
cda0: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a  SQLITE_OMIT_WAL.
cdb0: 20 20 69 6e 74 20 28 2a 78 57 61 6c 43 61 6c 6c    int (*xWalCall
cdc0: 62 61 63 6b 29 28 76 6f 69 64 20 2a 2c 20 73 71  back)(void *, sq
cdd0: 6c 69 74 65 33 20 2a 2c 20 63 6f 6e 73 74 20 63  lite3 *, const c
cde0: 68 61 72 20 2a 2c 20 69 6e 74 29 3b 0a 20 20 76  har *, int);.  v
cdf0: 6f 69 64 20 2a 70 57 61 6c 41 72 67 3b 0a 23 65  oid *pWalArg;.#e
ce00: 6e 64 69 66 0a 20 20 76 6f 69 64 28 2a 78 43 6f  ndif.  void(*xCo
ce10: 6c 6c 4e 65 65 64 65 64 29 28 76 6f 69 64 2a 2c  llNeeded)(void*,
ce20: 73 71 6c 69 74 65 33 2a 2c 69 6e 74 20 65 54 65  sqlite3*,int eTe
ce30: 78 74 52 65 70 2c 63 6f 6e 73 74 20 63 68 61 72  xtRep,const char
ce40: 2a 29 3b 0a 20 20 76 6f 69 64 28 2a 78 43 6f 6c  *);.  void(*xCol
ce50: 6c 4e 65 65 64 65 64 31 36 29 28 76 6f 69 64 2a  lNeeded16)(void*
ce60: 2c 73 71 6c 69 74 65 33 2a 2c 69 6e 74 20 65 54  ,sqlite3*,int eT
ce70: 65 78 74 52 65 70 2c 63 6f 6e 73 74 20 76 6f 69  extRep,const voi
ce80: 64 2a 29 3b 0a 20 20 76 6f 69 64 20 2a 70 43 6f  d*);.  void *pCo
ce90: 6c 6c 4e 65 65 64 65 64 41 72 67 3b 0a 20 20 73  llNeededArg;.  s
cea0: 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 70 45  qlite3_value *pE
ceb0: 72 72 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  rr;          /* 
cec0: 4d 6f 73 74 20 72 65 63 65 6e 74 20 65 72 72 6f  Most recent erro
ced0: 72 20 6d 65 73 73 61 67 65 20 2a 2f 0a 20 20 75  r message */.  u
cee0: 6e 69 6f 6e 20 7b 0a 20 20 20 20 76 6f 6c 61 74  nion {.    volat
cef0: 69 6c 65 20 69 6e 74 20 69 73 49 6e 74 65 72 72  ile int isInterr
cf00: 75 70 74 65 64 3b 20 2f 2a 20 54 72 75 65 20 69  upted; /* True i
cf10: 66 20 73 71 6c 69 74 65 33 5f 69 6e 74 65 72 72  f sqlite3_interr
cf20: 75 70 74 20 68 61 73 20 62 65 65 6e 20 63 61 6c  upt has been cal
cf30: 6c 65 64 20 2a 2f 0a 20 20 20 20 64 6f 75 62 6c  led */.    doubl
cf40: 65 20 6e 6f 74 55 73 65 64 31 3b 20 20 20 20 20  e notUsed1;     
cf50: 20 20 20 20 20 20 20 2f 2a 20 53 70 61 63 65 72         /* Spacer
cf60: 20 2a 2f 0a 20 20 7d 20 75 31 3b 0a 20 20 4c 6f   */.  } u1;.  Lo
cf70: 6f 6b 61 73 69 64 65 20 6c 6f 6f 6b 61 73 69 64  okaside lookasid
cf80: 65 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c  e;          /* L
cf90: 6f 6f 6b 61 73 69 64 65 20 6d 61 6c 6c 6f 63 20  ookaside malloc 
cfa0: 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 2a 2f  configuration */
cfb0: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
cfc0: 4f 4d 49 54 5f 41 55 54 48 4f 52 49 5a 41 54 49  OMIT_AUTHORIZATI
cfd0: 4f 4e 0a 20 20 73 71 6c 69 74 65 33 5f 78 61 75  ON.  sqlite3_xau
cfe0: 74 68 20 78 41 75 74 68 3b 20 20 20 20 20 20 20  th xAuth;       
cff0: 20 20 20 2f 2a 20 41 63 63 65 73 73 20 61 75 74     /* Access aut
d000: 68 6f 72 69 7a 61 74 69 6f 6e 20 66 75 6e 63 74  horization funct
d010: 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70  ion */.  void *p
d020: 41 75 74 68 41 72 67 3b 20 20 20 20 20 20 20 20  AuthArg;        
d030: 20 20 20 20 20 20 20 2f 2a 20 31 73 74 20 61 72         /* 1st ar
d040: 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20 61 63  gument to the ac
d050: 63 65 73 73 20 61 75 74 68 20 66 75 6e 63 74 69  cess auth functi
d060: 6f 6e 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66  on */.#endif.#if
d070: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
d080: 5f 50 52 4f 47 52 45 53 53 5f 43 41 4c 4c 42 41  _PROGRESS_CALLBA
d090: 43 4b 0a 20 20 69 6e 74 20 28 2a 78 50 72 6f 67  CK.  int (*xProg
d0a0: 72 65 73 73 29 28 76 6f 69 64 20 2a 29 3b 20 20  ress)(void *);  
d0b0: 20 20 20 2f 2a 20 54 68 65 20 70 72 6f 67 72 65     /* The progre
d0c0: 73 73 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20  ss callback */. 
d0d0: 20 76 6f 69 64 20 2a 70 50 72 6f 67 72 65 73 73   void *pProgress
d0e0: 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 2f  Arg;           /
d0f0: 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f 20 74 68  * Argument to th
d100: 65 20 70 72 6f 67 72 65 73 73 20 63 61 6c 6c 62  e progress callb
d110: 61 63 6b 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65  ack */.  unsigne
d120: 64 20 6e 50 72 6f 67 72 65 73 73 4f 70 73 3b 20  d nProgressOps; 
d130: 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
d140: 20 6f 66 20 6f 70 63 6f 64 65 73 20 66 6f 72 20   of opcodes for 
d150: 70 72 6f 67 72 65 73 73 20 63 61 6c 6c 62 61 63  progress callbac
d160: 6b 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66 6e  k */.#endif.#ifn
d170: 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
d180: 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 20 20 69  VIRTUALTABLE.  i
d190: 6e 74 20 6e 56 54 72 61 6e 73 3b 20 20 20 20 20  nt nVTrans;     
d1a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
d1b0: 41 6c 6c 6f 63 61 74 65 64 20 73 69 7a 65 20 6f  Allocated size o
d1c0: 66 20 61 56 54 72 61 6e 73 20 2a 2f 0a 20 20 48  f aVTrans */.  H
d1d0: 61 73 68 20 61 4d 6f 64 75 6c 65 3b 20 20 20 20  ash aModule;    
d1e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
d1f0: 70 6f 70 75 6c 61 74 65 64 20 62 79 20 73 71 6c  populated by sql
d200: 69 74 65 33 5f 63 72 65 61 74 65 5f 6d 6f 64 75  ite3_create_modu
d210: 6c 65 28 29 20 2a 2f 0a 20 20 56 74 61 62 43 74  le() */.  VtabCt
d220: 78 20 2a 70 56 74 61 62 43 74 78 3b 20 20 20 20  x *pVtabCtx;    
d230: 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6e 74 65          /* Conte
d240: 78 74 20 66 6f 72 20 61 63 74 69 76 65 20 76 74  xt for active vt
d250: 61 62 20 63 6f 6e 6e 65 63 74 2f 63 72 65 61 74  ab connect/creat
d260: 65 20 2a 2f 0a 20 20 56 54 61 62 6c 65 20 2a 2a  e */.  VTable **
d270: 61 56 54 72 61 6e 73 3b 20 20 20 20 20 20 20 20  aVTrans;        
d280: 20 20 20 20 20 2f 2a 20 56 69 72 74 75 61 6c 20       /* Virtual 
d290: 74 61 62 6c 65 73 20 77 69 74 68 20 6f 70 65 6e  tables with open
d2a0: 20 74 72 61 6e 73 61 63 74 69 6f 6e 73 20 2a 2f   transactions */
d2b0: 0a 20 20 56 54 61 62 6c 65 20 2a 70 44 69 73 63  .  VTable *pDisc
d2c0: 6f 6e 6e 65 63 74 3b 20 20 20 20 20 20 20 20 20  onnect;         
d2d0: 20 2f 2a 20 44 69 73 63 6f 6e 6e 65 63 74 20 74   /* Disconnect t
d2e0: 68 65 73 65 20 69 6e 20 6e 65 78 74 20 73 71 6c  hese in next sql
d2f0: 69 74 65 33 5f 70 72 65 70 61 72 65 28 29 20 2a  ite3_prepare() *
d300: 2f 0a 23 65 6e 64 69 66 0a 20 20 48 61 73 68 20  /.#endif.  Hash 
d310: 61 46 75 6e 63 3b 20 20 20 20 20 20 20 20 20 20  aFunc;          
d320: 20 20 20 20 20 20 20 20 20 2f 2a 20 48 61 73 68           /* Hash
d330: 20 74 61 62 6c 65 20 6f 66 20 63 6f 6e 6e 65 63   table of connec
d340: 74 69 6f 6e 20 66 75 6e 63 74 69 6f 6e 73 20 2a  tion functions *
d350: 2f 0a 20 20 48 61 73 68 20 61 43 6f 6c 6c 53 65  /.  Hash aCollSe
d360: 71 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  q;              
d370: 20 20 2f 2a 20 41 6c 6c 20 63 6f 6c 6c 61 74 69    /* All collati
d380: 6e 67 20 73 65 71 75 65 6e 63 65 73 20 2a 2f 0a  ng sequences */.
d390: 20 20 42 75 73 79 48 61 6e 64 6c 65 72 20 62 75    BusyHandler bu
d3a0: 73 79 48 61 6e 64 6c 65 72 3b 20 20 20 20 20 20  syHandler;      
d3b0: 2f 2a 20 42 75 73 79 20 63 61 6c 6c 62 61 63 6b  /* Busy callback
d3c0: 20 2a 2f 0a 20 20 44 62 20 61 44 62 53 74 61 74   */.  Db aDbStat
d3d0: 69 63 5b 32 5d 3b 20 20 20 20 20 20 20 20 20 20  ic[2];          
d3e0: 20 20 20 20 2f 2a 20 53 74 61 74 69 63 20 73 70      /* Static sp
d3f0: 61 63 65 20 66 6f 72 20 74 68 65 20 32 20 64 65  ace for the 2 de
d400: 66 61 75 6c 74 20 62 61 63 6b 65 6e 64 73 20 2a  fault backends *
d410: 2f 0a 20 20 53 61 76 65 70 6f 69 6e 74 20 2a 70  /.  Savepoint *p
d420: 53 61 76 65 70 6f 69 6e 74 3b 20 20 20 20 20 20  Savepoint;      
d430: 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 61 63 74    /* List of act
d440: 69 76 65 20 73 61 76 65 70 6f 69 6e 74 73 20 2a  ive savepoints *
d450: 2f 0a 20 20 69 6e 74 20 62 75 73 79 54 69 6d 65  /.  int busyTime
d460: 6f 75 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  out;            
d470: 20 20 2f 2a 20 42 75 73 79 20 68 61 6e 64 6c 65    /* Busy handle
d480: 72 20 74 69 6d 65 6f 75 74 2c 20 69 6e 20 6d 73  r timeout, in ms
d490: 65 63 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 61 76  ec */.  int nSav
d4a0: 65 70 6f 69 6e 74 3b 20 20 20 20 20 20 20 20 20  epoint;         
d4b0: 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
d4c0: 6f 66 20 6e 6f 6e 2d 74 72 61 6e 73 61 63 74 69  of non-transacti
d4d0: 6f 6e 20 73 61 76 65 70 6f 69 6e 74 73 20 2a 2f  on savepoints */
d4e0: 0a 20 20 69 6e 74 20 6e 53 74 61 74 65 6d 65 6e  .  int nStatemen
d4f0: 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t;              
d500: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6e 65   /* Number of ne
d510: 73 74 65 64 20 73 74 61 74 65 6d 65 6e 74 2d 74  sted statement-t
d520: 72 61 6e 73 61 63 74 69 6f 6e 73 20 20 2a 2f 0a  ransactions  */.
d530: 20 20 69 36 34 20 6e 44 65 66 65 72 72 65 64 43    i64 nDeferredC
d540: 6f 6e 73 3b 20 20 20 20 20 20 20 20 20 20 20 20  ons;            
d550: 2f 2a 20 4e 65 74 20 64 65 66 65 72 72 65 64 20  /* Net deferred 
d560: 63 6f 6e 73 74 72 61 69 6e 74 73 20 74 68 69 73  constraints this
d570: 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 2a 2f   transaction. */
d580: 0a 20 20 69 36 34 20 6e 44 65 66 65 72 72 65 64  .  i64 nDeferred
d590: 49 6d 6d 43 6f 6e 73 3b 20 20 20 20 20 20 20 20  ImmCons;        
d5a0: 20 2f 2a 20 4e 65 74 20 64 65 66 65 72 72 65 64   /* Net deferred
d5b0: 20 69 6d 6d 65 64 69 61 74 65 20 63 6f 6e 73 74   immediate const
d5c0: 72 61 69 6e 74 73 20 2a 2f 0a 20 20 69 6e 74 20  raints */.  int 
d5d0: 2a 70 6e 42 79 74 65 73 46 72 65 65 64 3b 20 20  *pnBytesFreed;  
d5e0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49 66 20            /* If 
d5f0: 6e 6f 74 20 4e 55 4c 4c 2c 20 69 6e 63 72 65 6d  not NULL, increm
d600: 65 6e 74 20 74 68 69 73 20 69 6e 20 44 62 46 72  ent this in DbFr
d610: 65 65 28 29 20 2a 2f 0a 23 69 66 64 65 66 20 53  ee() */.#ifdef S
d620: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 55 4e 4c  QLITE_ENABLE_UNL
d630: 4f 43 4b 5f 4e 4f 54 49 46 59 0a 20 20 2f 2a 20  OCK_NOTIFY.  /* 
d640: 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 76 61  The following va
d650: 72 69 61 62 6c 65 73 20 61 72 65 20 61 6c 6c 20  riables are all 
d660: 70 72 6f 74 65 63 74 65 64 20 62 79 20 74 68 65  protected by the
d670: 20 53 54 41 54 49 43 5f 4d 41 53 54 45 52 0a 20   STATIC_MASTER. 
d680: 20 2a 2a 20 6d 75 74 65 78 2c 20 6e 6f 74 20 62   ** mutex, not b
d690: 79 20 73 71 6c 69 74 65 33 2e 6d 75 74 65 78 2e  y sqlite3.mutex.
d6a0: 20 54 68 65 79 20 61 72 65 20 75 73 65 64 20 62   They are used b
d6b0: 79 20 63 6f 64 65 20 69 6e 20 6e 6f 74 69 66 79  y code in notify
d6c0: 2e 63 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 57 68  .c..  **.  ** Wh
d6d0: 65 6e 20 58 2e 70 55 6e 6c 6f 63 6b 43 6f 6e 6e  en X.pUnlockConn
d6e0: 65 63 74 69 6f 6e 3d 3d 59 2c 20 74 68 61 74 20  ection==Y, that 
d6f0: 6d 65 61 6e 73 20 74 68 61 74 20 58 20 69 73 20  means that X is 
d700: 77 61 69 74 69 6e 67 20 66 6f 72 20 59 20 74 6f  waiting for Y to
d710: 0a 20 20 2a 2a 20 75 6e 6c 6f 63 6b 20 73 6f 20  .  ** unlock so 
d720: 74 68 61 74 20 69 74 20 63 61 6e 20 70 72 6f 63  that it can proc
d730: 65 65 64 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 57  eed..  **.  ** W
d740: 68 65 6e 20 58 2e 70 42 6c 6f 63 6b 69 6e 67 43  hen X.pBlockingC
d750: 6f 6e 6e 65 63 74 69 6f 6e 3d 3d 59 2c 20 74 68  onnection==Y, th
d760: 61 74 20 6d 65 61 6e 73 20 74 68 61 74 20 73 6f  at means that so
d770: 6d 65 74 68 69 6e 67 20 74 68 61 74 20 58 20 74  mething that X t
d780: 72 69 65 64 0a 20 20 2a 2a 20 74 72 69 65 64 20  ried.  ** tried 
d790: 74 6f 20 64 6f 20 72 65 63 65 6e 74 6c 79 20 66  to do recently f
d7a0: 61 69 6c 65 64 20 77 69 74 68 20 61 6e 20 53 51  ailed with an SQ
d7b0: 4c 49 54 45 5f 4c 4f 43 4b 45 44 20 65 72 72 6f  LITE_LOCKED erro
d7c0: 72 20 64 75 65 20 74 6f 20 6c 6f 63 6b 73 0a 20  r due to locks. 
d7d0: 20 2a 2a 20 68 65 6c 64 20 62 79 20 59 2e 0a 20   ** held by Y.. 
d7e0: 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 20 2a 70   */.  sqlite3 *p
d7f0: 42 6c 6f 63 6b 69 6e 67 43 6f 6e 6e 65 63 74 69  BlockingConnecti
d800: 6f 6e 3b 20 2f 2a 20 43 6f 6e 6e 65 63 74 69 6f  on; /* Connectio
d810: 6e 20 74 68 61 74 20 63 61 75 73 65 64 20 53 51  n that caused SQ
d820: 4c 49 54 45 5f 4c 4f 43 4b 45 44 20 2a 2f 0a 20  LITE_LOCKED */. 
d830: 20 73 71 6c 69 74 65 33 20 2a 70 55 6e 6c 6f 63   sqlite3 *pUnloc
d840: 6b 43 6f 6e 6e 65 63 74 69 6f 6e 3b 20 20 20 20  kConnection;    
d850: 20 20 20 20 20 20 20 2f 2a 20 43 6f 6e 6e 65 63         /* Connec
d860: 74 69 6f 6e 20 74 6f 20 77 61 74 63 68 20 66 6f  tion to watch fo
d870: 72 20 75 6e 6c 6f 63 6b 20 2a 2f 0a 20 20 76 6f  r unlock */.  vo
d880: 69 64 20 2a 70 55 6e 6c 6f 63 6b 41 72 67 3b 20  id *pUnlockArg; 
d890: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d8a0: 20 20 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74 20      /* Argument 
d8b0: 74 6f 20 78 55 6e 6c 6f 63 6b 4e 6f 74 69 66 79  to xUnlockNotify
d8c0: 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 55 6e   */.  void (*xUn
d8d0: 6c 6f 63 6b 4e 6f 74 69 66 79 29 28 76 6f 69 64  lockNotify)(void
d8e0: 20 2a 2a 2c 20 69 6e 74 29 3b 20 20 2f 2a 20 55   **, int);  /* U
d8f0: 6e 6c 6f 63 6b 20 6e 6f 74 69 66 79 20 63 61 6c  nlock notify cal
d900: 6c 62 61 63 6b 20 2a 2f 0a 20 20 73 71 6c 69 74  lback */.  sqlit
d910: 65 33 20 2a 70 4e 65 78 74 42 6c 6f 63 6b 65 64  e3 *pNextBlocked
d920: 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 78 74  ;        /* Next
d930: 20 69 6e 20 6c 69 73 74 20 6f 66 20 61 6c 6c 20   in list of all 
d940: 62 6c 6f 63 6b 65 64 20 63 6f 6e 6e 65 63 74 69  blocked connecti
d950: 6f 6e 73 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 69  ons */.#endif.#i
d960: 66 64 65 66 20 53 51 4c 49 54 45 5f 55 53 45 52  fdef SQLITE_USER
d970: 5f 41 55 54 48 45 4e 54 49 43 41 54 49 4f 4e 0a  _AUTHENTICATION.
d980: 20 20 73 71 6c 69 74 65 33 5f 75 73 65 72 61 75    sqlite3_userau
d990: 74 68 20 61 75 74 68 3b 20 20 20 20 20 20 20 20  th auth;        
d9a0: 2f 2a 20 55 73 65 72 20 61 75 74 68 65 6e 74 69  /* User authenti
d9b0: 63 61 74 69 6f 6e 20 69 6e 66 6f 72 6d 61 74 69  cation informati
d9c0: 6f 6e 20 2a 2f 0a 23 65 6e 64 69 66 0a 7d 3b 0a  on */.#endif.};.
d9d0: 0a 2f 2a 0a 2a 2a 20 41 20 6d 61 63 72 6f 20 74  ./*.** A macro t
d9e0: 6f 20 64 69 73 63 6f 76 65 72 20 74 68 65 20 65  o discover the e
d9f0: 6e 63 6f 64 69 6e 67 20 6f 66 20 61 20 64 61 74  ncoding of a dat
da00: 61 62 61 73 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e  abase..*/.#defin
da10: 65 20 53 43 48 45 4d 41 5f 45 4e 43 28 64 62 29  e SCHEMA_ENC(db)
da20: 20 28 28 64 62 29 2d 3e 61 44 62 5b 30 5d 2e 70   ((db)->aDb[0].p
da30: 53 63 68 65 6d 61 2d 3e 65 6e 63 29 0a 23 64 65  Schema->enc).#de
da40: 66 69 6e 65 20 45 4e 43 28 64 62 29 20 20 20 20  fine ENC(db)    
da50: 20 20 20 20 28 28 64 62 29 2d 3e 65 6e 63 29 0a      ((db)->enc).
da60: 0a 2f 2a 0a 2a 2a 20 50 6f 73 73 69 62 6c 65 20  ./*.** Possible 
da70: 76 61 6c 75 65 73 20 66 6f 72 20 74 68 65 20 73  values for the s
da80: 71 6c 69 74 65 33 2e 66 6c 61 67 73 2e 0a 2a 2a  qlite3.flags..**
da90: 0a 2a 2a 20 56 61 6c 75 65 20 63 6f 6e 73 74 72  .** Value constr
daa0: 61 69 6e 74 73 20 28 65 6e 66 6f 72 63 65 64 20  aints (enforced 
dab0: 76 69 61 20 61 73 73 65 72 74 28 29 29 3a 0a 2a  via assert()):.*
dac0: 2a 20 20 20 20 20 20 53 51 4c 49 54 45 5f 46 75  *      SQLITE_Fu
dad0: 6c 6c 46 53 79 6e 63 20 20 20 20 20 3d 3d 20 50  llFSync     == P
dae0: 41 47 45 52 5f 46 55 4c 4c 46 53 59 4e 43 0a 2a  AGER_FULLFSYNC.*
daf0: 2a 20 20 20 20 20 20 53 51 4c 49 54 45 5f 43 6b  *      SQLITE_Ck
db00: 70 74 46 75 6c 6c 46 53 79 6e 63 20 3d 3d 20 50  ptFullFSync == P
db10: 41 47 45 52 5f 43 4b 50 54 5f 46 55 4c 4c 46 53  AGER_CKPT_FULLFS
db20: 59 4e 43 0a 2a 2a 20 20 20 20 20 20 53 51 4c 49  YNC.**      SQLI
db30: 54 45 5f 43 61 63 68 65 53 70 69 6c 6c 20 20 20  TE_CacheSpill   
db40: 20 3d 3d 20 50 41 47 45 52 5f 43 41 43 48 45 5f   == PAGER_CACHE_
db50: 53 50 49 4c 4c 0a 2a 2f 0a 23 64 65 66 69 6e 65  SPILL.*/.#define
db60: 20 53 51 4c 49 54 45 5f 57 72 69 74 65 53 63 68   SQLITE_WriteSch
db70: 65 6d 61 20 20 20 20 30 78 30 30 30 30 30 30 30  ema    0x0000000
db80: 31 20 20 2f 2a 20 4f 4b 20 74 6f 20 75 70 64 61  1  /* OK to upda
db90: 74 65 20 53 51 4c 49 54 45 5f 4d 41 53 54 45 52  te SQLITE_MASTER
dba0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
dbb0: 54 45 5f 4c 65 67 61 63 79 46 69 6c 65 46 6d 74  TE_LegacyFileFmt
dbc0: 20 20 30 78 30 30 30 30 30 30 30 32 20 20 2f 2a    0x00000002  /*
dbd0: 20 43 72 65 61 74 65 20 6e 65 77 20 64 61 74 61   Create new data
dbe0: 62 61 73 65 73 20 69 6e 20 66 6f 72 6d 61 74 20  bases in format 
dbf0: 31 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  1 */.#define SQL
dc00: 49 54 45 5f 46 75 6c 6c 43 6f 6c 4e 61 6d 65 73  ITE_FullColNames
dc10: 20 20 20 30 78 30 30 30 30 30 30 30 34 20 20 2f     0x00000004  /
dc20: 2a 20 53 68 6f 77 20 66 75 6c 6c 20 63 6f 6c 75  * Show full colu
dc30: 6d 6e 20 6e 61 6d 65 73 20 6f 6e 20 53 45 4c 45  mn names on SELE
dc40: 43 54 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  CT */.#define SQ
dc50: 4c 49 54 45 5f 46 75 6c 6c 46 53 79 6e 63 20 20  LITE_FullFSync  
dc60: 20 20 20 20 30 78 30 30 30 30 30 30 30 38 20 20      0x00000008  
dc70: 2f 2a 20 55 73 65 20 66 75 6c 6c 20 66 73 79 6e  /* Use full fsyn
dc80: 63 20 6f 6e 20 74 68 65 20 62 61 63 6b 65 6e 64  c on the backend
dc90: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
dca0: 54 45 5f 43 6b 70 74 46 75 6c 6c 46 53 79 6e 63  TE_CkptFullFSync
dcb0: 20 20 30 78 30 30 30 30 30 30 31 30 20 20 2f 2a    0x00000010  /*
dcc0: 20 55 73 65 20 66 75 6c 6c 20 66 73 79 6e 63 20   Use full fsync 
dcd0: 66 6f 72 20 63 68 65 63 6b 70 6f 69 6e 74 20 2a  for checkpoint *
dce0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
dcf0: 5f 43 61 63 68 65 53 70 69 6c 6c 20 20 20 20 20  _CacheSpill     
dd00: 30 78 30 30 30 30 30 30 32 30 20 20 2f 2a 20 4f  0x00000020  /* O
dd10: 4b 20 74 6f 20 73 70 69 6c 6c 20 70 61 67 65 72  K to spill pager
dd20: 20 63 61 63 68 65 20 2a 2f 0a 23 64 65 66 69 6e   cache */.#defin
dd30: 65 20 53 51 4c 49 54 45 5f 53 68 6f 72 74 43 6f  e SQLITE_ShortCo
dd40: 6c 4e 61 6d 65 73 20 20 30 78 30 30 30 30 30 30  lNames  0x000000
dd50: 34 30 20 20 2f 2a 20 53 68 6f 77 20 73 68 6f 72  40  /* Show shor
dd60: 74 20 63 6f 6c 75 6d 6e 73 20 6e 61 6d 65 73 20  t columns names 
dd70: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
dd80: 45 5f 43 6f 75 6e 74 52 6f 77 73 20 20 20 20 20  E_CountRows     
dd90: 20 30 78 30 30 30 30 30 30 38 30 20 20 2f 2a 20   0x00000080  /* 
dda0: 43 6f 75 6e 74 20 72 6f 77 73 20 63 68 61 6e 67  Count rows chang
ddb0: 65 64 20 62 79 20 49 4e 53 45 52 54 2c 20 2a 2f  ed by INSERT, */
ddc0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
ddd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dde0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 20 20             /*   
ddf0: 44 45 4c 45 54 45 2c 20 6f 72 20 55 50 44 41 54  DELETE, or UPDAT
de00: 45 20 61 6e 64 20 72 65 74 75 72 6e 20 2a 2f 0a  E and return */.
de10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
de20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
de30: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 20 20 74            /*   t
de40: 68 65 20 63 6f 75 6e 74 20 75 73 69 6e 67 20 61  he count using a
de50: 20 63 61 6c 6c 62 61 63 6b 2e 20 2a 2f 0a 23 64   callback. */.#d
de60: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e 75 6c  efine SQLITE_Nul
de70: 6c 43 61 6c 6c 62 61 63 6b 20 20 20 30 78 30 30  lCallback   0x00
de80: 30 30 30 31 30 30 20 20 2f 2a 20 49 6e 76 6f 6b  000100  /* Invok
de90: 65 20 74 68 65 20 63 61 6c 6c 62 61 63 6b 20 6f  e the callback o
dea0: 6e 63 65 20 69 66 20 74 68 65 20 2a 2f 0a 20 20  nce if the */.  
deb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dec0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ded0: 20 20 20 20 20 20 20 20 2f 2a 20 20 20 72 65 73          /*   res
dee0: 75 6c 74 20 73 65 74 20 69 73 20 65 6d 70 74 79  ult set is empty
def0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
df00: 54 45 5f 49 67 6e 6f 72 65 43 68 65 63 6b 73 20  TE_IgnoreChecks 
df10: 20 20 30 78 30 30 30 30 30 32 30 30 20 20 2f 2a    0x00000200  /*
df20: 20 44 6f 20 6e 6f 74 20 65 6e 66 6f 72 63 65 20   Do not enforce 
df30: 63 68 65 63 6b 20 63 6f 6e 73 74 72 61 69 6e 74  check constraint
df40: 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  s */.#define SQL
df50: 49 54 45 5f 52 65 61 64 55 6e 63 6f 6d 6d 69 74  ITE_ReadUncommit
df60: 20 20 20 30 78 30 30 30 30 30 34 30 30 20 20 2f     0x00000400  /
df70: 2a 20 52 45 41 44 20 55 4e 43 4f 4d 4d 49 54 54  * READ UNCOMMITT
df80: 45 44 20 69 6e 20 73 68 61 72 65 64 2d 63 61 63  ED in shared-cac
df90: 68 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  he */.#define SQ
dfa0: 4c 49 54 45 5f 4e 6f 43 6b 70 74 4f 6e 43 6c 6f  LITE_NoCkptOnClo
dfb0: 73 65 20 20 30 78 30 30 30 30 30 38 30 30 20 20  se  0x00000800  
dfc0: 2f 2a 20 4e 6f 20 63 68 65 63 6b 70 6f 69 6e 74  /* No checkpoint
dfd0: 20 6f 6e 20 63 6c 6f 73 65 28 29 2f 44 45 54 41   on close()/DETA
dfe0: 43 48 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  CH */.#define SQ
dff0: 4c 49 54 45 5f 52 65 76 65 72 73 65 4f 72 64 65  LITE_ReverseOrde
e000: 72 20 20 20 30 78 30 30 30 30 31 30 30 30 20 20  r   0x00001000  
e010: 2f 2a 20 52 65 76 65 72 73 65 20 75 6e 6f 72 64  /* Reverse unord
e020: 65 72 65 64 20 53 45 4c 45 43 54 73 20 2a 2f 0a  ered SELECTs */.
e030: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 52  #define SQLITE_R
e040: 65 63 54 72 69 67 67 65 72 73 20 20 20 20 30 78  ecTriggers    0x
e050: 30 30 30 30 32 30 30 30 20 20 2f 2a 20 45 6e 61  00002000  /* Ena
e060: 62 6c 65 20 72 65 63 75 72 73 69 76 65 20 74 72  ble recursive tr
e070: 69 67 67 65 72 73 20 2a 2f 0a 23 64 65 66 69 6e  iggers */.#defin
e080: 65 20 53 51 4c 49 54 45 5f 46 6f 72 65 69 67 6e  e SQLITE_Foreign
e090: 4b 65 79 73 20 20 20 20 30 78 30 30 30 30 34 30  Keys    0x000040
e0a0: 30 30 20 20 2f 2a 20 45 6e 66 6f 72 63 65 20 66  00  /* Enforce f
e0b0: 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74  oreign key const
e0c0: 72 61 69 6e 74 73 20 20 2a 2f 0a 23 64 65 66 69  raints  */.#defi
e0d0: 6e 65 20 53 51 4c 49 54 45 5f 41 75 74 6f 49 6e  ne SQLITE_AutoIn
e0e0: 64 65 78 20 20 20 20 20 20 30 78 30 30 30 30 38  dex      0x00008
e0f0: 30 30 30 20 20 2f 2a 20 45 6e 61 62 6c 65 20 61  000  /* Enable a
e100: 75 74 6f 6d 61 74 69 63 20 69 6e 64 65 78 65 73  utomatic indexes
e110: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
e120: 54 45 5f 4c 6f 61 64 45 78 74 65 6e 73 69 6f 6e  TE_LoadExtension
e130: 20 20 30 78 30 30 30 31 30 30 30 30 20 20 2f 2a    0x00010000  /*
e140: 20 45 6e 61 62 6c 65 20 6c 6f 61 64 5f 65 78 74   Enable load_ext
e150: 65 6e 73 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e  ension */.#defin
e160: 65 20 53 51 4c 49 54 45 5f 4c 6f 61 64 45 78 74  e SQLITE_LoadExt
e170: 46 75 6e 63 20 20 20 20 30 78 30 30 30 32 30 30  Func    0x000200
e180: 30 30 20 20 2f 2a 20 45 6e 61 62 6c 65 20 6c 6f  00  /* Enable lo
e190: 61 64 5f 65 78 74 65 6e 73 69 6f 6e 28 29 20 53  ad_extension() S
e1a0: 51 4c 20 66 75 6e 63 20 2a 2f 0a 23 64 65 66 69  QL func */.#defi
e1b0: 6e 65 20 53 51 4c 49 54 45 5f 45 6e 61 62 6c 65  ne SQLITE_Enable
e1c0: 54 72 69 67 67 65 72 20 20 30 78 30 30 30 34 30  Trigger  0x00040
e1d0: 30 30 30 20 20 2f 2a 20 54 72 75 65 20 74 6f 20  000  /* True to 
e1e0: 65 6e 61 62 6c 65 20 74 72 69 67 67 65 72 73 20  enable triggers 
e1f0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
e200: 45 5f 44 65 66 65 72 46 4b 73 20 20 20 20 20 20  E_DeferFKs      
e210: 20 30 78 30 30 30 38 30 30 30 30 20 20 2f 2a 20   0x00080000  /* 
e220: 44 65 66 65 72 20 61 6c 6c 20 46 4b 20 63 6f 6e  Defer all FK con
e230: 73 74 72 61 69 6e 74 73 20 2a 2f 0a 23 64 65 66  straints */.#def
e240: 69 6e 65 20 53 51 4c 49 54 45 5f 51 75 65 72 79  ine SQLITE_Query
e250: 4f 6e 6c 79 20 20 20 20 20 20 30 78 30 30 31 30  Only      0x0010
e260: 30 30 30 30 20 20 2f 2a 20 44 69 73 61 62 6c 65  0000  /* Disable
e270: 20 64 61 74 61 62 61 73 65 20 63 68 61 6e 67 65   database change
e280: 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  s */.#define SQL
e290: 49 54 45 5f 43 65 6c 6c 53 69 7a 65 43 6b 20 20  ITE_CellSizeCk  
e2a0: 20 20 20 30 78 30 30 32 30 30 30 30 30 20 20 2f     0x00200000  /
e2b0: 2a 20 43 68 65 63 6b 20 62 74 72 65 65 20 63 65  * Check btree ce
e2c0: 6c 6c 20 73 69 7a 65 73 20 6f 6e 20 6c 6f 61 64  ll sizes on load
e2d0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
e2e0: 54 45 5f 46 74 73 33 54 6f 6b 65 6e 69 7a 65 72  TE_Fts3Tokenizer
e2f0: 20 20 30 78 30 30 34 30 30 30 30 30 20 20 2f 2a    0x00400000  /*
e300: 20 45 6e 61 62 6c 65 20 66 74 73 33 5f 74 6f 6b   Enable fts3_tok
e310: 65 6e 69 7a 65 72 28 32 29 20 2a 2f 0a 23 64 65  enizer(2) */.#de
e320: 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 6e 61 62  fine SQLITE_Enab
e330: 6c 65 51 50 53 47 20 20 20 20 20 30 78 30 30 38  leQPSG     0x008
e340: 30 30 30 30 30 20 20 2f 2a 20 51 75 65 72 79 20  00000  /* Query 
e350: 50 6c 61 6e 6e 65 72 20 53 74 61 62 69 6c 69 74  Planner Stabilit
e360: 79 20 47 75 61 72 61 6e 74 65 65 2a 2f 0a 23 64  y Guarantee*/.#d
e370: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 54 72 69  efine SQLITE_Tri
e380: 67 67 65 72 45 51 50 20 20 20 20 20 30 78 30 31  ggerEQP     0x01
e390: 30 30 30 30 30 30 20 20 2f 2a 20 53 68 6f 77 20  000000  /* Show 
e3a0: 74 72 69 67 67 65 72 20 45 58 50 4c 41 49 4e 20  trigger EXPLAIN 
e3b0: 51 55 45 52 59 20 50 4c 41 4e 20 2a 2f 0a 23 64  QUERY PLAN */.#d
e3c0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 52 65 73  efine SQLITE_Res
e3d0: 65 74 44 61 74 61 62 61 73 65 20 20 30 78 30 32  etDatabase  0x02
e3e0: 30 30 30 30 30 30 20 20 2f 2a 20 52 65 73 65 74  000000  /* Reset
e3f0: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 2a 2f   the database */
e400: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
e410: 4c 65 67 61 63 79 41 6c 74 65 72 20 20 20 20 30  LegacyAlter    0
e420: 78 30 34 30 30 30 30 30 30 20 20 2f 2a 20 4c 65  x04000000  /* Le
e430: 67 61 63 79 20 41 4c 54 45 52 20 54 41 42 4c 45  gacy ALTER TABLE
e440: 20 62 65 68 61 76 69 6f 75 72 20 2a 2f 0a 23 64   behaviour */.#d
e450: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e 6f 53  efine SQLITE_NoS
e460: 63 68 65 6d 61 45 72 72 6f 72 20 20 30 78 30 38  chemaError  0x08
e470: 30 30 30 30 30 30 20 20 2f 2a 20 44 6f 20 6e 6f  000000  /* Do no
e480: 74 20 72 65 70 6f 72 74 20 73 63 68 65 6d 61 20  t report schema 
e490: 70 61 72 73 65 20 65 72 72 6f 72 73 2a 2f 0a 23  parse errors*/.#
e4a0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 65  define SQLITE_De
e4b0: 66 65 6e 73 69 76 65 20 20 20 20 20 20 30 78 31  fensive      0x1
e4c0: 30 30 30 30 30 30 30 20 20 2f 2a 20 49 6e 70 75  0000000  /* Inpu
e4d0: 74 20 53 51 4c 20 69 73 20 6c 69 6b 65 6c 79 20  t SQL is likely 
e4e0: 68 6f 73 74 69 6c 65 20 2a 2f 0a 0a 2f 2a 20 46  hostile */../* F
e4f0: 6c 61 67 73 20 75 73 65 64 20 6f 6e 6c 79 20 69  lags used only i
e500: 66 20 64 65 62 75 67 67 69 6e 67 20 2a 2f 0a 23  f debugging */.#
e510: 64 65 66 69 6e 65 20 48 49 28 58 29 20 20 28 28  define HI(X)  ((
e520: 75 36 34 29 28 58 29 3c 3c 33 32 29 0a 23 69 66  u64)(X)<<32).#if
e530: 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47  def SQLITE_DEBUG
e540: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
e550: 53 71 6c 54 72 61 63 65 20 20 20 20 20 20 20 48  SqlTrace       H
e560: 49 28 30 78 30 30 30 31 29 20 20 2f 2a 20 44 65  I(0x0001)  /* De
e570: 62 75 67 20 70 72 69 6e 74 20 53 51 4c 20 61 73  bug print SQL as
e580: 20 69 74 20 65 78 65 63 75 74 65 73 20 2a 2f 0a   it executes */.
e590: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 56  #define SQLITE_V
e5a0: 64 62 65 4c 69 73 74 69 6e 67 20 20 20 20 48 49  dbeListing    HI
e5b0: 28 30 78 30 30 30 32 29 20 20 2f 2a 20 44 65 62  (0x0002)  /* Deb
e5c0: 75 67 20 6c 69 73 74 69 6e 67 73 20 6f 66 20 56  ug listings of V
e5d0: 44 42 45 20 70 72 6f 67 73 20 2a 2f 0a 23 64 65  DBE progs */.#de
e5e0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 56 64 62 65  fine SQLITE_Vdbe
e5f0: 54 72 61 63 65 20 20 20 20 20 20 48 49 28 30 78  Trace      HI(0x
e600: 30 30 30 34 29 20 20 2f 2a 20 54 72 75 65 20 74  0004)  /* True t
e610: 6f 20 74 72 61 63 65 20 56 44 42 45 20 65 78 65  o trace VDBE exe
e620: 63 75 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e  cution */.#defin
e630: 65 20 53 51 4c 49 54 45 5f 56 64 62 65 41 64 64  e SQLITE_VdbeAdd
e640: 6f 70 54 72 61 63 65 20 48 49 28 30 78 30 30 30  opTrace HI(0x000
e650: 38 29 20 20 2f 2a 20 54 72 61 63 65 20 73 71 6c  8)  /* Trace sql
e660: 69 74 65 33 56 64 62 65 41 64 64 4f 70 28 29 20  ite3VdbeAddOp() 
e670: 63 61 6c 6c 73 20 2a 2f 0a 23 64 65 66 69 6e 65  calls */.#define
e680: 20 53 51 4c 49 54 45 5f 56 64 62 65 45 51 50 20   SQLITE_VdbeEQP 
e690: 20 20 20 20 20 20 20 48 49 28 30 78 30 30 31 30         HI(0x0010
e6a0: 29 20 20 2f 2a 20 44 65 62 75 67 20 45 58 50 4c  )  /* Debug EXPL
e6b0: 41 49 4e 20 51 55 45 52 59 20 50 4c 41 4e 20 2a  AIN QUERY PLAN *
e6c0: 2f 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  /.#endif../*.** 
e6d0: 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20 66  Allowed values f
e6e0: 6f 72 20 73 71 6c 69 74 65 33 2e 6d 44 62 46 6c  or sqlite3.mDbFl
e6f0: 61 67 73 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 44  ags.*/.#define D
e700: 42 46 4c 41 47 5f 53 63 68 65 6d 61 43 68 61 6e  BFLAG_SchemaChan
e710: 67 65 20 20 20 30 78 30 30 30 31 20 20 2f 2a 20  ge   0x0001  /* 
e720: 55 6e 63 6f 6d 6d 69 74 74 65 64 20 48 61 73 68  Uncommitted Hash
e730: 20 74 61 62 6c 65 20 63 68 61 6e 67 65 73 20 2a   table changes *
e740: 2f 0a 23 64 65 66 69 6e 65 20 44 42 46 4c 41 47  /.#define DBFLAG
e750: 5f 50 72 65 66 65 72 42 75 69 6c 74 69 6e 20 20  _PreferBuiltin  
e760: 30 78 30 30 30 32 20 20 2f 2a 20 50 72 65 66 65  0x0002  /* Prefe
e770: 72 65 6e 63 65 20 74 6f 20 62 75 69 6c 74 2d 69  rence to built-i
e780: 6e 20 66 75 6e 63 73 20 2a 2f 0a 23 64 65 66 69  n funcs */.#defi
e790: 6e 65 20 44 42 46 4c 41 47 5f 56 61 63 75 75 6d  ne DBFLAG_Vacuum
e7a0: 20 20 20 20 20 20 20 20 20 30 78 30 30 30 34 20           0x0004 
e7b0: 20 2f 2a 20 43 75 72 72 65 6e 74 6c 79 20 69 6e   /* Currently in
e7c0: 20 61 20 56 41 43 55 55 4d 20 2a 2f 0a 23 64 65   a VACUUM */.#de
e7d0: 66 69 6e 65 20 44 42 46 4c 41 47 5f 53 63 68 65  fine DBFLAG_Sche
e7e0: 6d 61 4b 6e 6f 77 6e 4f 6b 20 20 30 78 30 30 30  maKnownOk  0x000
e7f0: 38 20 20 2f 2a 20 53 63 68 65 6d 61 20 69 73 20  8  /* Schema is 
e800: 6b 6e 6f 77 6e 20 74 6f 20 62 65 20 76 61 6c 69  known to be vali
e810: 64 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 42 69 74 73  d */../*.** Bits
e820: 20 6f 66 20 74 68 65 20 73 71 6c 69 74 65 33 2e   of the sqlite3.
e830: 64 62 4f 70 74 46 6c 61 67 73 20 66 69 65 6c 64  dbOptFlags field
e840: 20 74 68 61 74 20 61 72 65 20 75 73 65 64 20 62   that are used b
e850: 79 20 74 68 65 0a 2a 2a 20 73 71 6c 69 74 65 33  y the.** sqlite3
e860: 5f 74 65 73 74 5f 63 6f 6e 74 72 6f 6c 28 53 51  _test_control(SQ
e870: 4c 49 54 45 5f 54 45 53 54 43 54 52 4c 5f 4f 50  LITE_TESTCTRL_OP
e880: 54 49 4d 49 5a 41 54 49 4f 4e 53 2c 2e 2e 2e 29  TIMIZATIONS,...)
e890: 20 69 6e 74 65 72 66 61 63 65 20 74 6f 0a 2a 2a   interface to.**
e8a0: 20 73 65 6c 65 63 74 69 76 65 6c 79 20 64 69 73   selectively dis
e8b0: 61 62 6c 65 20 76 61 72 69 6f 75 73 20 6f 70 74  able various opt
e8c0: 69 6d 69 7a 61 74 69 6f 6e 73 2e 0a 2a 2f 0a 23  imizations..*/.#
e8d0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 51 75  define SQLITE_Qu
e8e0: 65 72 79 46 6c 61 74 74 65 6e 65 72 20 30 78 30  eryFlattener 0x0
e8f0: 30 30 31 20 20 20 2f 2a 20 51 75 65 72 79 20 66  001   /* Query f
e900: 6c 61 74 74 65 6e 69 6e 67 20 2a 2f 0a 20 20 20  lattening */.   
e910: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e920: 20 20 20 20 20 20 20 2f 2a 20 20 30 78 30 30 30         /*  0x000
e930: 32 20 20 20 61 76 61 69 6c 61 62 6c 65 20 66 6f  2   available fo
e940: 72 20 72 65 75 73 65 20 2a 2f 0a 23 64 65 66 69  r reuse */.#defi
e950: 6e 65 20 53 51 4c 49 54 45 5f 47 72 6f 75 70 42  ne SQLITE_GroupB
e960: 79 4f 72 64 65 72 20 20 20 30 78 30 30 30 34 20  yOrder   0x0004 
e970: 20 20 2f 2a 20 47 52 4f 55 50 42 59 20 63 6f 76    /* GROUPBY cov
e980: 65 72 20 6f 66 20 4f 52 44 45 52 42 59 20 2a 2f  er of ORDERBY */
e990: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
e9a0: 46 61 63 74 6f 72 4f 75 74 43 6f 6e 73 74 20 30  FactorOutConst 0
e9b0: 78 30 30 30 38 20 20 20 2f 2a 20 43 6f 6e 73 74  x0008   /* Const
e9c0: 61 6e 74 20 66 61 63 74 6f 72 69 6e 67 20 2a 2f  ant factoring */
e9d0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
e9e0: 44 69 73 74 69 6e 63 74 4f 70 74 20 20 20 20 30  DistinctOpt    0
e9f0: 78 30 30 31 30 20 20 20 2f 2a 20 44 49 53 54 49  x0010   /* DISTI
ea00: 4e 43 54 20 75 73 69 6e 67 20 69 6e 64 65 78 65  NCT using indexe
ea10: 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  s */.#define SQL
ea20: 49 54 45 5f 43 6f 76 65 72 49 64 78 53 63 61 6e  ITE_CoverIdxScan
ea30: 20 20 20 30 78 30 30 32 30 20 20 20 2f 2a 20 43     0x0020   /* C
ea40: 6f 76 65 72 69 6e 67 20 69 6e 64 65 78 20 73 63  overing index sc
ea50: 61 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ans */.#define S
ea60: 51 4c 49 54 45 5f 4f 72 64 65 72 42 79 49 64 78  QLITE_OrderByIdx
ea70: 4a 6f 69 6e 20 30 78 30 30 34 30 20 20 20 2f 2a  Join 0x0040   /*
ea80: 20 4f 52 44 45 52 20 42 59 20 6f 66 20 6a 6f 69   ORDER BY of joi
ea90: 6e 73 20 76 69 61 20 69 6e 64 65 78 20 2a 2f 0a  ns via index */.
eaa0: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 54  #define SQLITE_T
eab0: 72 61 6e 73 69 74 69 76 65 20 20 20 20 20 30 78  ransitive     0x
eac0: 30 30 38 30 20 20 20 2f 2a 20 54 72 61 6e 73 69  0080   /* Transi
ead0: 74 69 76 65 20 63 6f 6e 73 74 72 61 69 6e 74 73  tive constraints
eae0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
eaf0: 54 45 5f 4f 6d 69 74 4e 6f 6f 70 4a 6f 69 6e 20  TE_OmitNoopJoin 
eb00: 20 20 30 78 30 31 30 30 20 20 20 2f 2a 20 4f 6d    0x0100   /* Om
eb10: 69 74 20 75 6e 75 73 65 64 20 74 61 62 6c 65 73  it unused tables
eb20: 20 69 6e 20 6a 6f 69 6e 73 20 2a 2f 0a 23 64 65   in joins */.#de
eb30: 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 6f 75 6e  fine SQLITE_Coun
eb40: 74 4f 66 56 69 65 77 20 20 20 20 30 78 30 32 30  tOfView    0x020
eb50: 30 20 20 20 2f 2a 20 54 68 65 20 63 6f 75 6e 74  0   /* The count
eb60: 2d 6f 66 2d 76 69 65 77 20 6f 70 74 69 6d 69 7a  -of-view optimiz
eb70: 61 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65  ation */.#define
eb80: 20 53 51 4c 49 54 45 5f 43 75 72 73 6f 72 48 69   SQLITE_CursorHi
eb90: 6e 74 73 20 20 20 20 30 78 30 34 30 30 20 20 20  nts    0x0400   
eba0: 2f 2a 20 41 64 64 20 4f 50 5f 43 75 72 73 6f 72  /* Add OP_Cursor
ebb0: 48 69 6e 74 20 6f 70 63 6f 64 65 73 20 2a 2f 0a  Hint opcodes */.
ebc0: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53  #define SQLITE_S
ebd0: 74 61 74 33 34 20 20 20 20 20 20 20 20 20 30 78  tat34         0x
ebe0: 30 38 30 30 20 20 20 2f 2a 20 55 73 65 20 53 54  0800   /* Use ST
ebf0: 41 54 33 20 6f 72 20 53 54 41 54 34 20 64 61 74  AT3 or STAT4 dat
ec00: 61 20 2a 2f 0a 20 20 20 2f 2a 20 54 48 33 20 65  a */.   /* TH3 e
ec10: 78 70 65 63 74 73 20 74 68 65 20 53 74 61 74 33  xpects the Stat3
ec20: 34 20 20 5e 5e 5e 5e 5e 5e 20 76 61 6c 75 65 20  4  ^^^^^^ value 
ec30: 74 6f 20 62 65 20 30 78 30 38 30 30 2e 20 20 44  to be 0x0800.  D
ec40: 6f 6e 27 74 20 63 68 61 6e 67 65 20 69 74 20 2a  on't change it *
ec50: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
ec60: 5f 50 75 73 68 44 6f 77 6e 20 20 20 20 20 20 20  _PushDown       
ec70: 30 78 31 30 30 30 20 20 20 2f 2a 20 54 68 65 20  0x1000   /* The 
ec80: 70 75 73 68 2d 64 6f 77 6e 20 6f 70 74 69 6d 69  push-down optimi
ec90: 7a 61 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e  zation */.#defin
eca0: 65 20 53 51 4c 49 54 45 5f 53 69 6d 70 6c 69 66  e SQLITE_Simplif
ecb0: 79 4a 6f 69 6e 20 20 20 30 78 32 30 30 30 20 20  yJoin   0x2000  
ecc0: 20 2f 2a 20 43 6f 6e 76 65 72 74 20 4c 45 46 54   /* Convert LEFT
ecd0: 20 4a 4f 49 4e 20 74 6f 20 4a 4f 49 4e 20 2a 2f   JOIN to JOIN */
ece0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
ecf0: 53 6b 69 70 53 63 61 6e 20 20 20 20 20 20 20 30  SkipScan       0
ed00: 78 34 30 30 30 20 20 20 2f 2a 20 53 6b 69 70 2d  x4000   /* Skip-
ed10: 73 63 61 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65  scans */.#define
ed20: 20 53 51 4c 49 54 45 5f 50 72 6f 70 61 67 61 74   SQLITE_Propagat
ed30: 65 43 6f 6e 73 74 20 30 78 38 30 30 30 20 20 20  eConst 0x8000   
ed40: 2f 2a 20 54 68 65 20 63 6f 6e 73 74 61 6e 74 20  /* The constant 
ed50: 70 72 6f 70 61 67 61 74 69 6f 6e 20 6f 70 74 20  propagation opt 
ed60: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
ed70: 45 5f 41 6c 6c 4f 70 74 73 20 20 20 20 20 20 20  E_AllOpts       
ed80: 20 30 78 66 66 66 66 20 20 20 2f 2a 20 41 6c 6c   0xffff   /* All
ed90: 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73 20 2a   optimizations *
eda0: 2f 0a 0a 2f 2a 0a 2a 2a 20 4d 61 63 72 6f 73 20  /../*.** Macros 
edb0: 66 6f 72 20 74 65 73 74 69 6e 67 20 77 68 65 74  for testing whet
edc0: 68 65 72 20 6f 72 20 6e 6f 74 20 6f 70 74 69 6d  her or not optim
edd0: 69 7a 61 74 69 6f 6e 73 20 61 72 65 20 65 6e 61  izations are ena
ede0: 62 6c 65 64 20 6f 72 20 64 69 73 61 62 6c 65 64  bled or disabled
edf0: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 70 74  ..*/.#define Opt
ee00: 69 6d 69 7a 61 74 69 6f 6e 44 69 73 61 62 6c 65  imizationDisable
ee10: 64 28 64 62 2c 20 6d 61 73 6b 29 20 20 28 28 28  d(db, mask)  (((
ee20: 64 62 29 2d 3e 64 62 4f 70 74 46 6c 61 67 73 26  db)->dbOptFlags&
ee30: 28 6d 61 73 6b 29 29 21 3d 30 29 0a 23 64 65 66  (mask))!=0).#def
ee40: 69 6e 65 20 4f 70 74 69 6d 69 7a 61 74 69 6f 6e  ine Optimization
ee50: 45 6e 61 62 6c 65 64 28 64 62 2c 20 6d 61 73 6b  Enabled(db, mask
ee60: 29 20 20 20 28 28 28 64 62 29 2d 3e 64 62 4f 70  )   (((db)->dbOp
ee70: 74 46 6c 61 67 73 26 28 6d 61 73 6b 29 29 3d 3d  tFlags&(mask))==
ee80: 30 29 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e  0)../*.** Return
ee90: 20 74 72 75 65 20 69 66 20 69 74 20 4f 4b 20 74   true if it OK t
eea0: 6f 20 66 61 63 74 6f 72 20 63 6f 6e 73 74 61 6e  o factor constan
eeb0: 74 20 65 78 70 72 65 73 73 69 6f 6e 73 20 69 6e  t expressions in
eec0: 74 6f 20 74 68 65 20 69 6e 69 74 69 61 6c 69 7a  to the initializ
eed0: 61 74 69 6f 6e 0a 2a 2a 20 63 6f 64 65 2e 20 54  ation.** code. T
eee0: 68 65 20 61 72 67 75 6d 65 6e 74 20 69 73 20 61  he argument is a
eef0: 20 50 61 72 73 65 20 6f 62 6a 65 63 74 20 66 6f   Parse object fo
ef00: 72 20 74 68 65 20 63 6f 64 65 20 67 65 6e 65 72  r the code gener
ef10: 61 74 6f 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  ator..*/.#define
ef20: 20 43 6f 6e 73 74 46 61 63 74 6f 72 4f 6b 28 50   ConstFactorOk(P
ef30: 29 20 28 28 50 29 2d 3e 6f 6b 43 6f 6e 73 74 46  ) ((P)->okConstF
ef40: 61 63 74 6f 72 29 0a 0a 2f 2a 0a 2a 2a 20 50 6f  actor)../*.** Po
ef50: 73 73 69 62 6c 65 20 76 61 6c 75 65 73 20 66 6f  ssible values fo
ef60: 72 20 74 68 65 20 73 71 6c 69 74 65 2e 6d 61 67  r the sqlite.mag
ef70: 69 63 20 66 69 65 6c 64 2e 0a 2a 2a 20 54 68 65  ic field..** The
ef80: 20 6e 75 6d 62 65 72 73 20 61 72 65 20 6f 62 74   numbers are obt
ef90: 61 69 6e 65 64 20 61 74 20 72 61 6e 64 6f 6d 20  ained at random 
efa0: 61 6e 64 20 68 61 76 65 20 6e 6f 20 73 70 65 63  and have no spec
efb0: 69 61 6c 20 6d 65 61 6e 69 6e 67 2c 20 6f 74 68  ial meaning, oth
efc0: 65 72 0a 2a 2a 20 74 68 61 6e 20 62 65 69 6e 67  er.** than being
efd0: 20 64 69 73 74 69 6e 63 74 20 66 72 6f 6d 20 6f   distinct from o
efe0: 6e 65 20 61 6e 6f 74 68 65 72 2e 0a 2a 2f 0a 23  ne another..*/.#
eff0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41  define SQLITE_MA
f000: 47 49 43 5f 4f 50 45 4e 20 20 20 20 20 30 78 61  GIC_OPEN     0xa
f010: 30 32 39 61 36 39 37 20 20 2f 2a 20 44 61 74 61  029a697  /* Data
f020: 62 61 73 65 20 69 73 20 6f 70 65 6e 20 2a 2f 0a  base is open */.
f030: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d  #define SQLITE_M
f040: 41 47 49 43 5f 43 4c 4f 53 45 44 20 20 20 30 78  AGIC_CLOSED   0x
f050: 39 66 33 63 32 64 33 33 20 20 2f 2a 20 44 61 74  9f3c2d33  /* Dat
f060: 61 62 61 73 65 20 69 73 20 63 6c 6f 73 65 64 20  abase is closed 
f070: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
f080: 45 5f 4d 41 47 49 43 5f 53 49 43 4b 20 20 20 20  E_MAGIC_SICK    
f090: 20 30 78 34 62 37 37 31 32 39 30 20 20 2f 2a 20   0x4b771290  /* 
f0a0: 45 72 72 6f 72 20 61 6e 64 20 61 77 61 69 74 69  Error and awaiti
f0b0: 6e 67 20 63 6c 6f 73 65 20 2a 2f 0a 23 64 65 66  ng close */.#def
f0c0: 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47 49 43  ine SQLITE_MAGIC
f0d0: 5f 42 55 53 59 20 20 20 20 20 30 78 66 30 33 62  _BUSY     0xf03b
f0e0: 37 39 30 36 20 20 2f 2a 20 44 61 74 61 62 61 73  7906  /* Databas
f0f0: 65 20 63 75 72 72 65 6e 74 6c 79 20 69 6e 20 75  e currently in u
f100: 73 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  se */.#define SQ
f110: 4c 49 54 45 5f 4d 41 47 49 43 5f 45 52 52 4f 52  LITE_MAGIC_ERROR
f120: 20 20 20 20 30 78 62 35 33 35 37 39 33 30 20 20      0xb5357930  
f130: 2f 2a 20 41 6e 20 53 51 4c 49 54 45 5f 4d 49 53  /* An SQLITE_MIS
f140: 55 53 45 20 65 72 72 6f 72 20 6f 63 63 75 72 72  USE error occurr
f150: 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  ed */.#define SQ
f160: 4c 49 54 45 5f 4d 41 47 49 43 5f 5a 4f 4d 42 49  LITE_MAGIC_ZOMBI
f170: 45 20 20 20 30 78 36 34 63 66 66 63 37 66 20 20  E   0x64cffc7f  
f180: 2f 2a 20 43 6c 6f 73 65 20 77 69 74 68 20 6c 61  /* Close with la
f190: 73 74 20 73 74 61 74 65 6d 65 6e 74 20 63 6c 6f  st statement clo
f1a0: 73 65 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 45 61 63  se */../*.** Eac
f1b0: 68 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 20 69  h SQL function i
f1c0: 73 20 64 65 66 69 6e 65 64 20 62 79 20 61 6e 20  s defined by an 
f1d0: 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20  instance of the 
f1e0: 66 6f 6c 6c 6f 77 69 6e 67 0a 2a 2a 20 73 74 72  following.** str
f1f0: 75 63 74 75 72 65 2e 20 20 46 6f 72 20 67 6c 6f  ucture.  For glo
f200: 62 61 6c 20 62 75 69 6c 74 2d 69 6e 20 66 75 6e  bal built-in fun
f210: 63 74 69 6f 6e 73 20 28 65 78 3a 20 73 75 62 73  ctions (ex: subs
f220: 74 72 28 29 2c 20 6d 61 78 28 29 2c 20 63 6f 75  tr(), max(), cou
f230: 6e 74 28 29 29 0a 2a 2a 20 61 20 70 6f 69 6e 74  nt()).** a point
f240: 65 72 20 74 6f 20 74 68 69 73 20 73 74 72 75 63  er to this struc
f250: 74 75 72 65 20 69 73 20 68 65 6c 64 20 69 6e 20  ture is held in 
f260: 74 68 65 20 73 71 6c 69 74 65 33 42 75 69 6c 74  the sqlite3Built
f270: 69 6e 46 75 6e 63 74 69 6f 6e 73 20 6f 62 6a 65  inFunctions obje
f280: 63 74 2e 0a 2a 2a 20 46 6f 72 20 70 65 72 2d 63  ct..** For per-c
f290: 6f 6e 6e 65 63 74 69 6f 6e 20 61 70 70 6c 69 63  onnection applic
f2a0: 61 74 69 6f 6e 2d 64 65 66 69 6e 65 64 20 66 75  ation-defined fu
f2b0: 6e 63 74 69 6f 6e 73 2c 20 61 20 70 6f 69 6e 74  nctions, a point
f2c0: 65 72 20 74 6f 20 74 68 69 73 0a 2a 2a 20 73 74  er to this.** st
f2d0: 72 75 63 74 75 72 65 20 69 73 20 68 65 6c 64 20  ructure is held 
f2e0: 69 6e 20 74 68 65 20 64 62 2d 3e 61 48 61 73 68  in the db->aHash
f2f0: 20 68 61 73 68 20 74 61 62 6c 65 2e 0a 2a 2a 0a   hash table..**.
f300: 2a 2a 20 54 68 65 20 75 2e 70 48 61 73 68 20 66  ** The u.pHash f
f310: 69 65 6c 64 20 69 73 20 75 73 65 64 20 62 79 20  ield is used by 
f320: 74 68 65 20 67 6c 6f 62 61 6c 20 62 75 69 6c 74  the global built
f330: 2d 69 6e 73 2e 20 20 54 68 65 20 75 2e 70 44 65  -ins.  The u.pDe
f340: 73 74 72 75 63 74 6f 72 0a 2a 2a 20 66 69 65 6c  structor.** fiel
f350: 64 20 69 73 20 75 73 65 64 20 62 79 20 70 65 72  d is used by per
f360: 2d 63 6f 6e 6e 65 63 74 69 6f 6e 20 61 70 70 2d  -connection app-
f370: 64 65 66 20 66 75 6e 63 74 69 6f 6e 73 2e 0a 2a  def functions..*
f380: 2f 0a 73 74 72 75 63 74 20 46 75 6e 63 44 65 66  /.struct FuncDef
f390: 20 7b 0a 20 20 69 38 20 6e 41 72 67 3b 20 20 20   {.  i8 nArg;   
f3a0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
f3b0: 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73  ber of arguments
f3c0: 2e 20 20 2d 31 20 6d 65 61 6e 73 20 75 6e 6c 69  .  -1 means unli
f3d0: 6d 69 74 65 64 20 2a 2f 0a 20 20 75 33 32 20 66  mited */.  u32 f
f3e0: 75 6e 63 46 6c 61 67 73 3b 20 20 20 20 20 20 20  uncFlags;       
f3f0: 2f 2a 20 53 6f 6d 65 20 63 6f 6d 62 69 6e 61 74  /* Some combinat
f400: 69 6f 6e 20 6f 66 20 53 51 4c 49 54 45 5f 46 55  ion of SQLITE_FU
f410: 4e 43 5f 2a 20 2a 2f 0a 20 20 76 6f 69 64 20 2a  NC_* */.  void *
f420: 70 55 73 65 72 44 61 74 61 3b 20 20 20 20 20 2f  pUserData;     /
f430: 2a 20 55 73 65 72 20 64 61 74 61 20 70 61 72 61  * User data para
f440: 6d 65 74 65 72 20 2a 2f 0a 20 20 46 75 6e 63 44  meter */.  FuncD
f450: 65 66 20 2a 70 4e 65 78 74 3b 20 20 20 20 20 20  ef *pNext;      
f460: 2f 2a 20 4e 65 78 74 20 66 75 6e 63 74 69 6f 6e  /* Next function
f470: 20 77 69 74 68 20 73 61 6d 65 20 6e 61 6d 65 20   with same name 
f480: 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 53 46 75  */.  void (*xSFu
f490: 6e 63 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74  nc)(sqlite3_cont
f4a0: 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33  ext*,int,sqlite3
f4b0: 5f 76 61 6c 75 65 2a 2a 29 3b 20 2f 2a 20 66 75  _value**); /* fu
f4c0: 6e 63 20 6f 72 20 61 67 67 2d 73 74 65 70 20 2a  nc or agg-step *
f4d0: 2f 0a 20 20 76 6f 69 64 20 28 2a 78 46 69 6e 61  /.  void (*xFina
f4e0: 6c 69 7a 65 29 28 73 71 6c 69 74 65 33 5f 63 6f  lize)(sqlite3_co
f4f0: 6e 74 65 78 74 2a 29 3b 20 20 20 20 20 20 20 20  ntext*);        
f500: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 67 67            /* Agg
f510: 20 66 69 6e 61 6c 69 7a 65 72 20 2a 2f 0a 20 20   finalizer */.  
f520: 76 6f 69 64 20 28 2a 78 56 61 6c 75 65 29 28 73  void (*xValue)(s
f530: 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 29  qlite3_context*)
f540: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
f550: 20 20 20 20 20 20 2f 2a 20 43 75 72 72 65 6e 74        /* Current
f560: 20 61 67 67 20 76 61 6c 75 65 20 2a 2f 0a 20 20   agg value */.  
f570: 76 6f 69 64 20 28 2a 78 49 6e 76 65 72 73 65 29  void (*xInverse)
f580: 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74  (sqlite3_context
f590: 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61  *,int,sqlite3_va
f5a0: 6c 75 65 2a 2a 29 3b 20 2f 2a 20 69 6e 76 65 72  lue**); /* inver
f5b0: 73 65 20 61 67 67 2d 73 74 65 70 20 2a 2f 0a 20  se agg-step */. 
f5c0: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4e 61   const char *zNa
f5d0: 6d 65 3b 20 20 20 2f 2a 20 53 51 4c 20 6e 61 6d  me;   /* SQL nam
f5e0: 65 20 6f 66 20 74 68 65 20 66 75 6e 63 74 69 6f  e of the functio
f5f0: 6e 2e 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b 0a  n. */.  union {.
f600: 20 20 20 20 46 75 6e 63 44 65 66 20 2a 70 48 61      FuncDef *pHa
f610: 73 68 3b 20 20 20 20 20 20 2f 2a 20 4e 65 78 74  sh;      /* Next
f620: 20 77 69 74 68 20 61 20 64 69 66 66 65 72 65 6e   with a differen
f630: 74 20 6e 61 6d 65 20 62 75 74 20 74 68 65 20 73  t name but the s
f640: 61 6d 65 20 68 61 73 68 20 2a 2f 0a 20 20 20 20  ame hash */.    
f650: 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72 20 2a  FuncDestructor *
f660: 70 44 65 73 74 72 75 63 74 6f 72 3b 20 20 20 2f  pDestructor;   /
f670: 2a 20 52 65 66 65 72 65 6e 63 65 20 63 6f 75 6e  * Reference coun
f680: 74 65 64 20 64 65 73 74 72 75 63 74 6f 72 20 66  ted destructor f
f690: 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 7d 20 75  unction */.  } u
f6a0: 3b 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73  ;.};../*.** This
f6b0: 20 73 74 72 75 63 74 75 72 65 20 65 6e 63 61 70   structure encap
f6c0: 73 75 6c 61 74 65 73 20 61 20 75 73 65 72 2d 66  sulates a user-f
f6d0: 75 6e 63 74 69 6f 6e 20 64 65 73 74 72 75 63 74  unction destruct
f6e0: 6f 72 20 63 61 6c 6c 62 61 63 6b 20 28 61 73 0a  or callback (as.
f6f0: 2a 2a 20 63 6f 6e 66 69 67 75 72 65 64 20 75 73  ** configured us
f700: 69 6e 67 20 63 72 65 61 74 65 5f 66 75 6e 63 74  ing create_funct
f710: 69 6f 6e 5f 76 32 28 29 29 20 61 6e 64 20 61 20  ion_v2()) and a 
f720: 72 65 66 65 72 65 6e 63 65 20 63 6f 75 6e 74 65  reference counte
f730: 72 2e 20 57 68 65 6e 0a 2a 2a 20 63 72 65 61 74  r. When.** creat
f740: 65 5f 66 75 6e 63 74 69 6f 6e 5f 76 32 28 29 20  e_function_v2() 
f750: 69 73 20 63 61 6c 6c 65 64 20 74 6f 20 63 72 65  is called to cre
f760: 61 74 65 20 61 20 66 75 6e 63 74 69 6f 6e 20 77  ate a function w
f770: 69 74 68 20 61 20 64 65 73 74 72 75 63 74 6f 72  ith a destructor
f780: 2c 0a 2a 2a 20 61 20 73 69 6e 67 6c 65 20 6f 62  ,.** a single ob
f790: 6a 65 63 74 20 6f 66 20 74 68 69 73 20 74 79 70  ject of this typ
f7a0: 65 20 69 73 20 61 6c 6c 6f 63 61 74 65 64 2e 20  e is allocated. 
f7b0: 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72 2e 6e  FuncDestructor.n
f7c0: 52 65 66 20 69 73 20 73 65 74 20 74 6f 0a 2a 2a  Ref is set to.**
f7d0: 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 46   the number of F
f7e0: 75 6e 63 44 65 66 20 6f 62 6a 65 63 74 73 20 63  uncDef objects c
f7f0: 72 65 61 74 65 64 20 28 65 69 74 68 65 72 20 31  reated (either 1
f800: 20 6f 72 20 33 2c 20 64 65 70 65 6e 64 69 6e 67   or 3, depending
f810: 20 6f 6e 20 77 68 65 74 68 65 72 0a 2a 2a 20 6f   on whether.** o
f820: 72 20 6e 6f 74 20 74 68 65 20 73 70 65 63 69 66  r not the specif
f830: 69 65 64 20 65 6e 63 6f 64 69 6e 67 20 69 73 20  ied encoding is 
f840: 53 51 4c 49 54 45 5f 41 4e 59 29 2e 20 54 68 65  SQLITE_ANY). The
f850: 20 46 75 6e 63 44 65 66 2e 70 44 65 73 74 72 75   FuncDef.pDestru
f860: 63 74 6f 72 0a 2a 2a 20 6d 65 6d 62 65 72 20 6f  ctor.** member o
f870: 66 20 65 61 63 68 20 6f 66 20 74 68 65 20 6e 65  f each of the ne
f880: 77 20 46 75 6e 63 44 65 66 20 6f 62 6a 65 63 74  w FuncDef object
f890: 73 20 69 73 20 73 65 74 20 74 6f 20 70 6f 69 6e  s is set to poin
f8a0: 74 20 74 6f 20 74 68 65 20 61 6c 6c 6f 63 61 74  t to the allocat
f8b0: 65 64 0a 2a 2a 20 46 75 6e 63 44 65 73 74 72 75  ed.** FuncDestru
f8c0: 63 74 6f 72 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 72  ctor..**.** Ther
f8d0: 65 61 66 74 65 72 2c 20 77 68 65 6e 20 6f 6e 65  eafter, when one
f8e0: 20 6f 66 20 74 68 65 20 46 75 6e 63 44 65 66 20   of the FuncDef 
f8f0: 6f 62 6a 65 63 74 73 20 69 73 20 64 65 6c 65 74  objects is delet
f900: 65 64 2c 20 74 68 65 20 72 65 66 65 72 65 6e 63  ed, the referenc
f910: 65 0a 2a 2a 20 63 6f 75 6e 74 20 6f 6e 20 74 68  e.** count on th
f920: 69 73 20 6f 62 6a 65 63 74 20 69 73 20 64 65 63  is object is dec
f930: 72 65 6d 65 6e 74 65 64 2e 20 57 68 65 6e 20 69  remented. When i
f940: 74 20 72 65 61 63 68 65 73 20 30 2c 20 74 68 65  t reaches 0, the
f950: 20 64 65 73 74 72 75 63 74 6f 72 0a 2a 2a 20 69   destructor.** i
f960: 73 20 69 6e 76 6f 6b 65 64 20 61 6e 64 20 74 68  s invoked and th
f970: 65 20 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72  e FuncDestructor
f980: 20 73 74 72 75 63 74 75 72 65 20 66 72 65 65 64   structure freed
f990: 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 46 75 6e 63  ..*/.struct Func
f9a0: 44 65 73 74 72 75 63 74 6f 72 20 7b 0a 20 20 69  Destructor {.  i
f9b0: 6e 74 20 6e 52 65 66 3b 0a 20 20 76 6f 69 64 20  nt nRef;.  void 
f9c0: 28 2a 78 44 65 73 74 72 6f 79 29 28 76 6f 69 64  (*xDestroy)(void
f9d0: 20 2a 29 3b 0a 20 20 76 6f 69 64 20 2a 70 55 73   *);.  void *pUs
f9e0: 65 72 44 61 74 61 3b 0a 7d 3b 0a 0a 2f 2a 0a 2a  erData;.};../*.*
f9f0: 2a 20 50 6f 73 73 69 62 6c 65 20 76 61 6c 75 65  * Possible value
fa00: 73 20 66 6f 72 20 46 75 6e 63 44 65 66 2e 66 6c  s for FuncDef.fl
fa10: 61 67 73 2e 20 20 4e 6f 74 65 20 74 68 61 74 20  ags.  Note that 
fa20: 74 68 65 20 5f 4c 45 4e 47 54 48 20 61 6e 64 20  the _LENGTH and 
fa30: 5f 54 59 50 45 4f 46 0a 2a 2a 20 76 61 6c 75 65  _TYPEOF.** value
fa40: 73 20 6d 75 73 74 20 63 6f 72 72 65 73 70 6f 6e  s must correspon
fa50: 64 20 74 6f 20 4f 50 46 4c 41 47 5f 4c 45 4e 47  d to OPFLAG_LENG
fa60: 54 48 41 52 47 20 61 6e 64 20 4f 50 46 4c 41 47  THARG and OPFLAG
fa70: 5f 54 59 50 45 4f 46 41 52 47 2e 20 20 41 6e 64  _TYPEOFARG.  And
fa80: 0a 2a 2a 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f  .** SQLITE_FUNC_
fa90: 43 4f 4e 53 54 41 4e 54 20 6d 75 73 74 20 62 65  CONSTANT must be
faa0: 20 74 68 65 20 73 61 6d 65 20 61 73 20 53 51 4c   the same as SQL
fab0: 49 54 45 5f 44 45 54 45 52 4d 49 4e 49 53 54 49  ITE_DETERMINISTI
fac0: 43 2e 20 20 54 68 65 72 65 0a 2a 2a 20 61 72 65  C.  There.** are
fad0: 20 61 73 73 65 72 74 28 29 20 73 74 61 74 65 6d   assert() statem
fae0: 65 6e 74 73 20 69 6e 20 74 68 65 20 63 6f 64 65  ents in the code
faf0: 20 74 6f 20 76 65 72 69 66 79 20 74 68 69 73 2e   to verify this.
fb00: 0a 2a 2a 0a 2a 2a 20 56 61 6c 75 65 20 63 6f 6e  .**.** Value con
fb10: 73 74 72 61 69 6e 74 73 20 28 65 6e 66 6f 72 63  straints (enforc
fb20: 65 64 20 76 69 61 20 61 73 73 65 72 74 28 29 29  ed via assert())
fb30: 3a 0a 2a 2a 20 20 20 20 20 53 51 4c 49 54 45 5f  :.**     SQLITE_
fb40: 46 55 4e 43 5f 4d 49 4e 4d 41 58 20 20 20 20 3d  FUNC_MINMAX    =
fb50: 3d 20 20 4e 43 5f 4d 69 6e 4d 61 78 41 67 67 20  =  NC_MinMaxAgg 
fb60: 20 20 20 20 20 3d 3d 20 53 46 5f 4d 69 6e 4d 61       == SF_MinMa
fb70: 78 41 67 67 0a 2a 2a 20 20 20 20 20 53 51 4c 49  xAgg.**     SQLI
fb80: 54 45 5f 46 55 4e 43 5f 4c 45 4e 47 54 48 20 20  TE_FUNC_LENGTH  
fb90: 20 20 3d 3d 20 20 4f 50 46 4c 41 47 5f 4c 45 4e    ==  OPFLAG_LEN
fba0: 47 54 48 41 52 47 0a 2a 2a 20 20 20 20 20 53 51  GTHARG.**     SQ
fbb0: 4c 49 54 45 5f 46 55 4e 43 5f 54 59 50 45 4f 46  LITE_FUNC_TYPEOF
fbc0: 20 20 20 20 3d 3d 20 20 4f 50 46 4c 41 47 5f 54      ==  OPFLAG_T
fbd0: 59 50 45 4f 46 41 52 47 0a 2a 2a 20 20 20 20 20  YPEOFARG.**     
fbe0: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53  SQLITE_FUNC_CONS
fbf0: 54 41 4e 54 20 20 3d 3d 20 20 53 51 4c 49 54 45  TANT  ==  SQLITE
fc00: 5f 44 45 54 45 52 4d 49 4e 49 53 54 49 43 20 66  _DETERMINISTIC f
fc10: 72 6f 6d 20 74 68 65 20 41 50 49 0a 2a 2a 20 20  rom the API.**  
fc20: 20 20 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 45     SQLITE_FUNC_E
fc30: 4e 43 4d 41 53 4b 20 20 20 64 65 70 65 6e 64 73  NCMASK   depends
fc40: 20 6f 6e 20 53 51 4c 49 54 45 5f 55 54 46 2a 20   on SQLITE_UTF* 
fc50: 6d 61 63 72 6f 73 20 69 6e 20 74 68 65 20 41 50  macros in the AP
fc60: 49 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  I.*/.#define SQL
fc70: 49 54 45 5f 46 55 4e 43 5f 45 4e 43 4d 41 53 4b  ITE_FUNC_ENCMASK
fc80: 20 20 30 78 30 30 30 33 20 2f 2a 20 53 51 4c 49    0x0003 /* SQLI
fc90: 54 45 5f 55 54 46 38 2c 20 53 51 4c 49 54 45 5f  TE_UTF8, SQLITE_
fca0: 55 54 46 31 36 42 45 20 6f 72 20 55 54 46 31 36  UTF16BE or UTF16
fcb0: 4c 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  LE */.#define SQ
fcc0: 4c 49 54 45 5f 46 55 4e 43 5f 4c 49 4b 45 20 20  LITE_FUNC_LIKE  
fcd0: 20 20 20 30 78 30 30 30 34 20 2f 2a 20 43 61 6e     0x0004 /* Can
fce0: 64 69 64 61 74 65 20 66 6f 72 20 74 68 65 20 4c  didate for the L
fcf0: 49 4b 45 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e  IKE optimization
fd00: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
fd10: 54 45 5f 46 55 4e 43 5f 43 41 53 45 20 20 20 20  TE_FUNC_CASE    
fd20: 20 30 78 30 30 30 38 20 2f 2a 20 43 61 73 65 2d   0x0008 /* Case-
fd30: 73 65 6e 73 69 74 69 76 65 20 4c 49 4b 45 2d 74  sensitive LIKE-t
fd40: 79 70 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a  ype function */.
fd50: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46  #define SQLITE_F
fd60: 55 4e 43 5f 45 50 48 45 4d 20 20 20 20 30 78 30  UNC_EPHEM    0x0
fd70: 30 31 30 20 2f 2a 20 45 70 68 65 6d 65 72 61 6c  010 /* Ephemeral
fd80: 2e 20 20 44 65 6c 65 74 65 20 77 69 74 68 20 56  .  Delete with V
fd90: 44 42 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  DBE */.#define S
fda0: 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43  QLITE_FUNC_NEEDC
fdb0: 4f 4c 4c 20 30 78 30 30 32 30 20 2f 2a 20 73 71  OLL 0x0020 /* sq
fdc0: 6c 69 74 65 33 47 65 74 46 75 6e 63 43 6f 6c 6c  lite3GetFuncColl
fdd0: 53 65 71 28 29 20 6d 69 67 68 74 20 62 65 20 63  Seq() might be c
fde0: 61 6c 6c 65 64 2a 2f 0a 23 64 65 66 69 6e 65 20  alled*/.#define 
fdf0: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4c 45 4e 47  SQLITE_FUNC_LENG
fe00: 54 48 20 20 20 30 78 30 30 34 30 20 2f 2a 20 42  TH   0x0040 /* B
fe10: 75 69 6c 74 2d 69 6e 20 6c 65 6e 67 74 68 28 29  uilt-in length()
fe20: 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65   function */.#de
fe30: 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43  fine SQLITE_FUNC
fe40: 5f 54 59 50 45 4f 46 20 20 20 30 78 30 30 38 30  _TYPEOF   0x0080
fe50: 20 2f 2a 20 42 75 69 6c 74 2d 69 6e 20 74 79 70   /* Built-in typ
fe60: 65 6f 66 28 29 20 66 75 6e 63 74 69 6f 6e 20 2a  eof() function *
fe70: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
fe80: 5f 46 55 4e 43 5f 43 4f 55 4e 54 20 20 20 20 30  _FUNC_COUNT    0
fe90: 78 30 31 30 30 20 2f 2a 20 42 75 69 6c 74 2d 69  x0100 /* Built-i
fea0: 6e 20 63 6f 75 6e 74 28 2a 29 20 61 67 67 72 65  n count(*) aggre
feb0: 67 61 74 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  gate */.#define 
fec0: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 41 4c  SQLITE_FUNC_COAL
fed0: 45 53 43 45 20 30 78 30 32 30 30 20 2f 2a 20 42  ESCE 0x0200 /* B
fee0: 75 69 6c 74 2d 69 6e 20 63 6f 61 6c 65 73 63 65  uilt-in coalesce
fef0: 28 29 20 6f 72 20 69 66 6e 75 6c 6c 28 29 20 2a  () or ifnull() *
ff00: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
ff10: 5f 46 55 4e 43 5f 55 4e 4c 49 4b 45 4c 59 20 30  _FUNC_UNLIKELY 0
ff20: 78 30 34 30 30 20 2f 2a 20 42 75 69 6c 74 2d 69  x0400 /* Built-i
ff30: 6e 20 75 6e 6c 69 6b 65 6c 79 28 29 20 66 75 6e  n unlikely() fun
ff40: 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65  ction */.#define
ff50: 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e   SQLITE_FUNC_CON
ff60: 53 54 41 4e 54 20 30 78 30 38 30 30 20 2f 2a 20  STANT 0x0800 /* 
ff70: 43 6f 6e 73 74 61 6e 74 20 69 6e 70 75 74 73 20  Constant inputs 
ff80: 67 69 76 65 20 61 20 63 6f 6e 73 74 61 6e 74 20  give a constant 
ff90: 6f 75 74 70 75 74 20 2a 2f 0a 23 64 65 66 69 6e  output */.#defin
ffa0: 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4d 49  e SQLITE_FUNC_MI
ffb0: 4e 4d 41 58 20 20 20 30 78 31 30 30 30 20 2f 2a  NMAX   0x1000 /*
ffc0: 20 54 72 75 65 20 66 6f 72 20 6d 69 6e 28 29 20   True for min() 
ffd0: 61 6e 64 20 6d 61 78 28 29 20 61 67 67 72 65 67  and max() aggreg
ffe0: 61 74 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ates */.#define 
fff0: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 53 4c 4f 43  SQLITE_FUNC_SLOC
10000 48 4e 47 20 20 30 78 32 30 30 30 20 2f 2a 20 22  HNG  0x2000 /* "
10010 53 6c 6f 77 20 43 68 61 6e 67 65 22 2e 20 56 61  Slow Change". Va
10020 6c 75 65 20 63 6f 6e 73 74 61 6e 74 20 64 75 72  lue constant dur
10030 69 6e 67 20 61 0a 20 20 20 20 20 20 20 20 20 20  ing a.          
10040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10050 20 20 20 20 20 20 20 20 20 20 2a 2a 20 73 69 6e            ** sin
10060 67 6c 65 20 71 75 65 72 79 20 2d 20 6d 69 67 68  gle query - migh
10070 74 20 63 68 61 6e 67 65 20 6f 76 65 72 20 74 69  t change over ti
10080 6d 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  me */.#define SQ
10090 4c 49 54 45 5f 46 55 4e 43 5f 41 46 46 49 4e 49  LITE_FUNC_AFFINI
100a0 54 59 20 30 78 34 30 30 30 20 2f 2a 20 42 75 69  TY 0x4000 /* Bui
100b0 6c 74 2d 69 6e 20 61 66 66 69 6e 69 74 79 28 29  lt-in affinity()
100c0 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65   function */.#de
100d0 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43  fine SQLITE_FUNC
100e0 5f 4f 46 46 53 45 54 20 20 20 30 78 38 30 30 30  _OFFSET   0x8000
100f0 20 2f 2a 20 42 75 69 6c 74 2d 69 6e 20 73 71 6c   /* Built-in sql
10100 69 74 65 5f 6f 66 66 73 65 74 28 29 20 66 75 6e  ite_offset() fun
10110 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65  ction */.#define
10120 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 57 49 4e   SQLITE_FUNC_WIN
10130 44 4f 57 20 20 20 30 78 30 30 30 31 30 30 30 30  DOW   0x00010000
10140 20 2f 2a 20 42 75 69 6c 74 2d 69 6e 20 77 69 6e   /* Built-in win
10150 64 6f 77 2d 6f 6e 6c 79 20 66 75 6e 63 74 69 6f  dow-only functio
10160 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  n */.#define SQL
10170 49 54 45 5f 46 55 4e 43 5f 57 49 4e 44 4f 57 5f  ITE_FUNC_WINDOW_
10180 53 49 5a 45 20 30 78 32 30 30 30 30 20 2f 2a 20  SIZE 0x20000 /* 
10190 52 65 71 75 69 72 65 73 20 70 61 72 74 69 74 69  Requires partiti
101a0 6f 6e 20 73 69 7a 65 20 61 73 20 61 72 67 2e 20  on size as arg. 
101b0 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
101c0 45 5f 46 55 4e 43 5f 49 4e 54 45 52 4e 41 4c 20  E_FUNC_INTERNAL 
101d0 30 78 30 30 30 34 30 30 30 30 20 2f 2a 20 46 6f  0x00040000 /* Fo
101e0 72 20 75 73 65 20 62 79 20 4e 65 73 74 65 64 50  r use by NestedP
101f0 61 72 73 65 28 29 20 6f 6e 6c 79 20 2a 2f 0a 0a  arse() only */..
10200 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77  /*.** The follow
10210 69 6e 67 20 74 68 72 65 65 20 6d 61 63 72 6f 73  ing three macros
10220 2c 20 46 55 4e 43 54 49 4f 4e 28 29 2c 20 4c 49  , FUNCTION(), LI
10230 4b 45 46 55 4e 43 28 29 20 61 6e 64 20 41 47 47  KEFUNC() and AGG
10240 52 45 47 41 54 45 28 29 20 61 72 65 0a 2a 2a 20  REGATE() are.** 
10250 75 73 65 64 20 74 6f 20 63 72 65 61 74 65 20 74  used to create t
10260 68 65 20 69 6e 69 74 69 61 6c 69 7a 65 72 73 20  he initializers 
10270 66 6f 72 20 74 68 65 20 46 75 6e 63 44 65 66 20  for the FuncDef 
10280 73 74 72 75 63 74 75 72 65 73 2e 0a 2a 2a 0a 2a  structures..**.*
10290 2a 20 20 20 46 55 4e 43 54 49 4f 4e 28 7a 4e 61  *   FUNCTION(zNa
102a0 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c 20  me, nArg, iArg, 
102b0 62 4e 43 2c 20 78 46 75 6e 63 29 0a 2a 2a 20 20  bNC, xFunc).**  
102c0 20 20 20 55 73 65 64 20 74 6f 20 63 72 65 61 74     Used to creat
102d0 65 20 61 20 73 63 61 6c 61 72 20 66 75 6e 63 74  e a scalar funct
102e0 69 6f 6e 20 64 65 66 69 6e 69 74 69 6f 6e 20 6f  ion definition o
102f0 66 20 61 20 66 75 6e 63 74 69 6f 6e 20 7a 4e 61  f a function zNa
10300 6d 65 0a 2a 2a 20 20 20 20 20 69 6d 70 6c 65 6d  me.**     implem
10310 65 6e 74 65 64 20 62 79 20 43 20 66 75 6e 63 74  ented by C funct
10320 69 6f 6e 20 78 46 75 6e 63 20 74 68 61 74 20 61  ion xFunc that a
10330 63 63 65 70 74 73 20 6e 41 72 67 20 61 72 67 75  ccepts nArg argu
10340 6d 65 6e 74 73 2e 20 54 68 65 0a 2a 2a 20 20 20  ments. The.**   
10350 20 20 76 61 6c 75 65 20 70 61 73 73 65 64 20 61    value passed a
10360 73 20 69 41 72 67 20 69 73 20 63 61 73 74 20 74  s iArg is cast t
10370 6f 20 61 20 28 76 6f 69 64 2a 29 20 61 6e 64 20  o a (void*) and 
10380 6d 61 64 65 20 61 76 61 69 6c 61 62 6c 65 0a 2a  made available.*
10390 2a 20 20 20 20 20 61 73 20 74 68 65 20 75 73 65  *     as the use
103a0 72 2d 64 61 74 61 20 28 73 71 6c 69 74 65 33 5f  r-data (sqlite3_
103b0 75 73 65 72 5f 64 61 74 61 28 29 29 20 66 6f 72  user_data()) for
103c0 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 2e 20 49   the function. I
103d0 66 0a 2a 2a 20 20 20 20 20 61 72 67 75 6d 65 6e  f.**     argumen
103e0 74 20 62 4e 43 20 69 73 20 74 72 75 65 2c 20 74  t bNC is true, t
103f0 68 65 6e 20 74 68 65 20 53 51 4c 49 54 45 5f 46  hen the SQLITE_F
10400 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 20 66 6c 61  UNC_NEEDCOLL fla
10410 67 20 69 73 20 73 65 74 2e 0a 2a 2a 0a 2a 2a 20  g is set..**.** 
10420 20 20 56 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d    VFUNCTION(zNam
10430 65 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c 20 62  e, nArg, iArg, b
10440 4e 43 2c 20 78 46 75 6e 63 29 0a 2a 2a 20 20 20  NC, xFunc).**   
10450 20 20 4c 69 6b 65 20 46 55 4e 43 54 49 4f 4e 20    Like FUNCTION 
10460 65 78 63 65 70 74 20 69 74 20 6f 6d 69 74 73 20  except it omits 
10470 74 68 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f  the SQLITE_FUNC_
10480 43 4f 4e 53 54 41 4e 54 20 66 6c 61 67 2e 0a 2a  CONSTANT flag..*
10490 2a 0a 2a 2a 20 20 20 44 46 55 4e 43 54 49 4f 4e  *.**   DFUNCTION
104a0 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41  (zName, nArg, iA
104b0 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29 0a  rg, bNC, xFunc).
104c0 2a 2a 20 20 20 20 20 4c 69 6b 65 20 46 55 4e 43  **     Like FUNC
104d0 54 49 4f 4e 20 65 78 63 65 70 74 20 69 74 20 6f  TION except it o
104e0 6d 69 74 73 20 74 68 65 20 53 51 4c 49 54 45 5f  mits the SQLITE_
104f0 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 20 66 6c  FUNC_CONSTANT fl
10500 61 67 20 61 6e 64 0a 2a 2a 20 20 20 20 20 61 64  ag and.**     ad
10510 64 73 20 74 68 65 20 53 51 4c 49 54 45 5f 46 55  ds the SQLITE_FU
10520 4e 43 5f 53 4c 4f 43 48 4e 47 20 66 6c 61 67 2e  NC_SLOCHNG flag.
10530 20 20 55 73 65 64 20 66 6f 72 20 64 61 74 65 20    Used for date 
10540 26 20 74 69 6d 65 20 66 75 6e 63 74 69 6f 6e 73  & time functions
10550 0a 2a 2a 20 20 20 20 20 61 6e 64 20 66 75 6e 63  .**     and func
10560 74 69 6f 6e 73 20 6c 69 6b 65 20 73 71 6c 69 74  tions like sqlit
10570 65 5f 76 65 72 73 69 6f 6e 28 29 20 74 68 61 74  e_version() that
10580 20 63 61 6e 20 63 68 61 6e 67 65 2c 20 62 75 74   can change, but
10590 20 6e 6f 74 20 64 75 72 69 6e 67 0a 2a 2a 20 20   not during.**  
105a0 20 20 20 61 20 73 69 6e 67 6c 65 20 71 75 65 72     a single quer
105b0 79 2e 20 20 54 68 65 20 69 41 72 67 20 69 73 20  y.  The iArg is 
105c0 69 67 6e 6f 72 65 64 2e 20 20 54 68 65 20 75 73  ignored.  The us
105d0 65 72 2d 64 61 74 61 20 69 73 20 61 6c 77 61 79  er-data is alway
105e0 73 20 73 65 74 0a 2a 2a 20 20 20 20 20 74 6f 20  s set.**     to 
105f0 61 20 4e 55 4c 4c 20 70 6f 69 6e 74 65 72 2e 20  a NULL pointer. 
10600 20 54 68 65 20 62 4e 43 20 70 61 72 61 6d 65 74   The bNC paramet
10610 65 72 20 69 73 20 6e 6f 74 20 75 73 65 64 2e 0a  er is not used..
10620 2a 2a 0a 2a 2a 20 20 20 50 55 52 45 5f 44 41 54  **.**   PURE_DAT
10630 45 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69  E(zName, nArg, i
10640 41 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29  Arg, bNC, xFunc)
10650 0a 2a 2a 20 20 20 20 20 55 73 65 64 20 66 6f 72  .**     Used for
10660 20 22 70 75 72 65 22 20 64 61 74 65 2f 74 69 6d   "pure" date/tim
10670 65 20 66 75 6e 63 74 69 6f 6e 73 2c 20 74 68 69  e functions, thi
10680 73 20 6d 61 63 72 6f 20 69 73 20 6c 69 6b 65 20  s macro is like 
10690 44 46 55 4e 43 54 49 4f 4e 0a 2a 2a 20 20 20 20  DFUNCTION.**    
106a0 20 65 78 63 65 70 74 20 74 68 61 74 20 69 74 20   except that it 
106b0 64 6f 65 73 20 73 65 74 20 74 68 65 20 53 51 4c  does set the SQL
106c0 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e  ITE_FUNC_CONSTAN
106d0 54 20 66 6c 61 67 73 2e 20 20 69 41 72 67 20 69  T flags.  iArg i
106e0 73 0a 2a 2a 20 20 20 20 20 69 67 6e 6f 72 65 64  s.**     ignored
106f0 20 61 6e 64 20 74 68 65 20 75 73 65 72 2d 64 61   and the user-da
10700 74 61 20 66 6f 72 20 74 68 65 73 65 20 66 75 6e  ta for these fun
10710 63 74 69 6f 6e 73 20 69 73 20 73 65 74 20 74 6f  ctions is set to
10720 20 61 6e 20 0a 2a 2a 20 20 20 20 20 61 72 62 69   an .**     arbi
10730 74 72 61 72 79 20 6e 6f 6e 2d 4e 55 4c 4c 20 70  trary non-NULL p
10740 6f 69 6e 74 65 72 2e 20 20 54 68 65 20 62 4e 43  ointer.  The bNC
10750 20 70 61 72 61 6d 65 74 65 72 20 69 73 20 6e 6f   parameter is no
10760 74 20 75 73 65 64 2e 0a 2a 2a 0a 2a 2a 20 20 20  t used..**.**   
10770 41 47 47 52 45 47 41 54 45 28 7a 4e 61 6d 65 2c  AGGREGATE(zName,
10780 20 6e 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43   nArg, iArg, bNC
10790 2c 20 78 53 74 65 70 2c 20 78 46 69 6e 61 6c 29  , xStep, xFinal)
107a0 0a 2a 2a 20 20 20 20 20 55 73 65 64 20 74 6f 20  .**     Used to 
107b0 63 72 65 61 74 65 20 61 6e 20 61 67 67 72 65 67  create an aggreg
107c0 61 74 65 20 66 75 6e 63 74 69 6f 6e 20 64 65 66  ate function def
107d0 69 6e 69 74 69 6f 6e 20 69 6d 70 6c 65 6d 65 6e  inition implemen
107e0 74 65 64 20 62 79 0a 2a 2a 20 20 20 20 20 74 68  ted by.**     th
107f0 65 20 43 20 66 75 6e 63 74 69 6f 6e 73 20 78 53  e C functions xS
10800 74 65 70 20 61 6e 64 20 78 46 69 6e 61 6c 2e 20  tep and xFinal. 
10810 54 68 65 20 66 69 72 73 74 20 66 6f 75 72 20 70  The first four p
10820 61 72 61 6d 65 74 65 72 73 0a 2a 2a 20 20 20 20  arameters.**    
10830 20 61 72 65 20 69 6e 74 65 72 70 72 65 74 65 64   are interpreted
10840 20 69 6e 20 74 68 65 20 73 61 6d 65 20 77 61 79   in the same way
10850 20 61 73 20 74 68 65 20 66 69 72 73 74 20 34 20   as the first 4 
10860 70 61 72 61 6d 65 74 65 72 73 20 74 6f 0a 2a 2a  parameters to.**
10870 20 20 20 20 20 46 55 4e 43 54 49 4f 4e 28 29 2e       FUNCTION().
10880 0a 2a 2a 0a 2a 2a 20 20 20 57 46 55 4e 43 54 49  .**.**   WFUNCTI
10890 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20  ON(zName, nArg, 
108a0 69 41 72 67 2c 20 78 53 74 65 70 2c 20 78 46 69  iArg, xStep, xFi
108b0 6e 61 6c 2c 20 78 56 61 6c 75 65 2c 20 78 49 6e  nal, xValue, xIn
108c0 76 65 72 73 65 29 0a 2a 2a 20 20 20 20 20 55 73  verse).**     Us
108d0 65 64 20 74 6f 20 63 72 65 61 74 65 20 61 6e 20  ed to create an 
108e0 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69  aggregate functi
108f0 6f 6e 20 64 65 66 69 6e 69 74 69 6f 6e 20 69 6d  on definition im
10900 70 6c 65 6d 65 6e 74 65 64 20 62 79 0a 2a 2a 20  plemented by.** 
10910 20 20 20 20 74 68 65 20 43 20 66 75 6e 63 74 69      the C functi
10920 6f 6e 73 20 78 53 74 65 70 20 61 6e 64 20 78 46  ons xStep and xF
10930 69 6e 61 6c 2e 20 54 68 65 20 66 69 72 73 74 20  inal. The first 
10940 66 6f 75 72 20 70 61 72 61 6d 65 74 65 72 73 0a  four parameters.
10950 2a 2a 20 20 20 20 20 61 72 65 20 69 6e 74 65 72  **     are inter
10960 70 72 65 74 65 64 20 69 6e 20 74 68 65 20 73 61  preted in the sa
10970 6d 65 20 77 61 79 20 61 73 20 74 68 65 20 66 69  me way as the fi
10980 72 73 74 20 34 20 70 61 72 61 6d 65 74 65 72 73  rst 4 parameters
10990 20 74 6f 0a 2a 2a 20 20 20 20 20 46 55 4e 43 54   to.**     FUNCT
109a0 49 4f 4e 28 29 2e 0a 2a 2a 0a 2a 2a 20 20 20 4c  ION()..**.**   L
109b0 49 4b 45 46 55 4e 43 28 7a 4e 61 6d 65 2c 20 6e  IKEFUNC(zName, n
109c0 41 72 67 2c 20 70 41 72 67 2c 20 66 6c 61 67 73  Arg, pArg, flags
109d0 29 0a 2a 2a 20 20 20 20 20 55 73 65 64 20 74 6f  ).**     Used to
109e0 20 63 72 65 61 74 65 20 61 20 73 63 61 6c 61 72   create a scalar
109f0 20 66 75 6e 63 74 69 6f 6e 20 64 65 66 69 6e 69   function defini
10a00 74 69 6f 6e 20 6f 66 20 61 20 66 75 6e 63 74 69  tion of a functi
10a10 6f 6e 20 7a 4e 61 6d 65 0a 2a 2a 20 20 20 20 20  on zName.**     
10a20 74 68 61 74 20 61 63 63 65 70 74 73 20 6e 41 72  that accepts nAr
10a30 67 20 61 72 67 75 6d 65 6e 74 73 20 61 6e 64 20  g arguments and 
10a40 69 73 20 69 6d 70 6c 65 6d 65 6e 74 65 64 20 62  is implemented b
10a50 79 20 61 20 63 61 6c 6c 20 74 6f 20 43 0a 2a 2a  y a call to C.**
10a60 20 20 20 20 20 66 75 6e 63 74 69 6f 6e 20 6c 69       function li
10a70 6b 65 46 75 6e 63 2e 20 41 72 67 75 6d 65 6e 74  keFunc. Argument
10a80 20 70 41 72 67 20 69 73 20 63 61 73 74 20 74 6f   pArg is cast to
10a90 20 61 20 28 76 6f 69 64 20 2a 29 20 61 6e 64 20   a (void *) and 
10aa0 6d 61 64 65 0a 2a 2a 20 20 20 20 20 61 76 61 69  made.**     avai
10ab0 6c 61 62 6c 65 20 61 73 20 74 68 65 20 66 75 6e  lable as the fun
10ac0 63 74 69 6f 6e 20 75 73 65 72 2d 64 61 74 61 20  ction user-data 
10ad0 28 73 71 6c 69 74 65 33 5f 75 73 65 72 5f 64 61  (sqlite3_user_da
10ae0 74 61 28 29 29 2e 20 54 68 65 0a 2a 2a 20 20 20  ta()). The.**   
10af0 20 20 46 75 6e 63 44 65 66 2e 66 6c 61 67 73 20    FuncDef.flags 
10b00 76 61 72 69 61 62 6c 65 20 69 73 20 73 65 74 20  variable is set 
10b10 74 6f 20 74 68 65 20 76 61 6c 75 65 20 70 61 73  to the value pas
10b20 73 65 64 20 61 73 20 74 68 65 20 66 6c 61 67 73  sed as the flags
10b30 0a 2a 2a 20 20 20 20 20 70 61 72 61 6d 65 74 65  .**     paramete
10b40 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 46 55  r..*/.#define FU
10b50 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41  NCTION(zName, nA
10b60 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78  rg, iArg, bNC, x
10b70 46 75 6e 63 29 20 5c 0a 20 20 7b 6e 41 72 67 2c  Func) \.  {nArg,
10b80 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e   SQLITE_FUNC_CON
10b90 53 54 41 4e 54 7c 53 51 4c 49 54 45 5f 55 54 46  STANT|SQLITE_UTF
10ba0 38 7c 28 62 4e 43 2a 53 51 4c 49 54 45 5f 46 55  8|(bNC*SQLITE_FU
10bb0 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 2c 20 5c 0a  NC_NEEDCOLL), \.
10bc0 20 20 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f     SQLITE_INT_TO
10bd0 5f 50 54 52 28 69 41 72 67 29 2c 20 30 2c 20 78  _PTR(iArg), 0, x
10be0 46 75 6e 63 2c 20 30 2c 20 30 2c 20 30 2c 20 23  Func, 0, 0, 0, #
10bf0 7a 4e 61 6d 65 2c 20 7b 30 7d 20 7d 0a 23 64 65  zName, {0} }.#de
10c00 66 69 6e 65 20 56 46 55 4e 43 54 49 4f 4e 28 7a  fine VFUNCTION(z
10c10 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72 67  Name, nArg, iArg
10c20 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29 20 5c 0a  , bNC, xFunc) \.
10c30 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f    {nArg, SQLITE_
10c40 55 54 46 38 7c 28 62 4e 43 2a 53 51 4c 49 54 45  UTF8|(bNC*SQLITE
10c50 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 2c  _FUNC_NEEDCOLL),
10c60 20 5c 0a 20 20 20 53 51 4c 49 54 45 5f 49 4e 54   \.   SQLITE_INT
10c70 5f 54 4f 5f 50 54 52 28 69 41 72 67 29 2c 20 30  _TO_PTR(iArg), 0
10c80 2c 20 78 46 75 6e 63 2c 20 30 2c 20 30 2c 20 30  , xFunc, 0, 0, 0
10c90 2c 20 23 7a 4e 61 6d 65 2c 20 7b 30 7d 20 7d 0a  , #zName, {0} }.
10ca0 23 64 65 66 69 6e 65 20 44 46 55 4e 43 54 49 4f  #define DFUNCTIO
10cb0 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69  N(zName, nArg, i
10cc0 41 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29  Arg, bNC, xFunc)
10cd0 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49   \.  {nArg, SQLI
10ce0 54 45 5f 46 55 4e 43 5f 53 4c 4f 43 48 4e 47 7c  TE_FUNC_SLOCHNG|
10cf0 53 51 4c 49 54 45 5f 55 54 46 38 2c 20 5c 0a 20  SQLITE_UTF8, \. 
10d00 20 20 30 2c 20 30 2c 20 78 46 75 6e 63 2c 20 30    0, 0, xFunc, 0
10d10 2c 20 30 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c 20  , 0, 0, #zName, 
10d20 7b 30 7d 20 7d 0a 23 64 65 66 69 6e 65 20 50 55  {0} }.#define PU
10d30 52 45 5f 44 41 54 45 28 7a 4e 61 6d 65 2c 20 6e  RE_DATE(zName, n
10d40 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20  Arg, iArg, bNC, 
10d50 78 46 75 6e 63 29 20 5c 0a 20 20 7b 6e 41 72 67  xFunc) \.  {nArg
10d60 2c 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 53 4c  , SQLITE_FUNC_SL
10d70 4f 43 48 4e 47 7c 53 51 4c 49 54 45 5f 55 54 46  OCHNG|SQLITE_UTF
10d80 38 7c 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f  8|SQLITE_FUNC_CO
10d90 4e 53 54 41 4e 54 2c 20 5c 0a 20 20 20 28 76 6f  NSTANT, \.   (vo
10da0 69 64 2a 29 26 73 71 6c 69 74 65 33 43 6f 6e 66  id*)&sqlite3Conf
10db0 69 67 2c 20 30 2c 20 78 46 75 6e 63 2c 20 30 2c  ig, 0, xFunc, 0,
10dc0 20 30 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c 20 7b   0, 0, #zName, {
10dd0 30 7d 20 7d 0a 23 64 65 66 69 6e 65 20 46 55 4e  0} }.#define FUN
10de0 43 54 49 4f 4e 32 28 7a 4e 61 6d 65 2c 20 6e 41  CTION2(zName, nA
10df0 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78  rg, iArg, bNC, x
10e00 46 75 6e 63 2c 20 65 78 74 72 61 46 6c 61 67 73  Func, extraFlags
10e10 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 53 51 4c 49  ) \.  {nArg,SQLI
10e20 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54  TE_FUNC_CONSTANT
10e30 7c 53 51 4c 49 54 45 5f 55 54 46 38 7c 28 62 4e  |SQLITE_UTF8|(bN
10e40 43 2a 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45  C*SQLITE_FUNC_NE
10e50 45 44 43 4f 4c 4c 29 7c 65 78 74 72 61 46 6c 61  EDCOLL)|extraFla
10e60 67 73 2c 5c 0a 20 20 20 53 51 4c 49 54 45 5f 49  gs,\.   SQLITE_I
10e70 4e 54 5f 54 4f 5f 50 54 52 28 69 41 72 67 29 2c  NT_TO_PTR(iArg),
10e80 20 30 2c 20 78 46 75 6e 63 2c 20 30 2c 20 30 2c   0, xFunc, 0, 0,
10e90 20 30 2c 20 23 7a 4e 61 6d 65 2c 20 7b 30 7d 20   0, #zName, {0} 
10ea0 7d 0a 23 64 65 66 69 6e 65 20 53 54 52 5f 46 55  }.#define STR_FU
10eb0 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41  NCTION(zName, nA
10ec0 72 67 2c 20 70 41 72 67 2c 20 62 4e 43 2c 20 78  rg, pArg, bNC, x
10ed0 46 75 6e 63 29 20 5c 0a 20 20 7b 6e 41 72 67 2c  Func) \.  {nArg,
10ee0 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 53 4c 4f   SQLITE_FUNC_SLO
10ef0 43 48 4e 47 7c 53 51 4c 49 54 45 5f 55 54 46 38  CHNG|SQLITE_UTF8
10f00 7c 28 62 4e 43 2a 53 51 4c 49 54 45 5f 46 55 4e  |(bNC*SQLITE_FUN
10f10 43 5f 4e 45 45 44 43 4f 4c 4c 29 2c 20 5c 0a 20  C_NEEDCOLL), \. 
10f20 20 20 70 41 72 67 2c 20 30 2c 20 78 46 75 6e 63    pArg, 0, xFunc
10f30 2c 20 30 2c 20 30 2c 20 30 2c 20 23 7a 4e 61 6d  , 0, 0, 0, #zNam
10f40 65 2c 20 7d 0a 23 64 65 66 69 6e 65 20 4c 49 4b  e, }.#define LIK
10f50 45 46 55 4e 43 28 7a 4e 61 6d 65 2c 20 6e 41 72  EFUNC(zName, nAr
10f60 67 2c 20 61 72 67 2c 20 66 6c 61 67 73 29 20 5c  g, arg, flags) \
10f70 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45  .  {nArg, SQLITE
10f80 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 7c 53  _FUNC_CONSTANT|S
10f90 51 4c 49 54 45 5f 55 54 46 38 7c 66 6c 61 67 73  QLITE_UTF8|flags
10fa0 2c 20 5c 0a 20 20 20 28 76 6f 69 64 20 2a 29 61  , \.   (void *)a
10fb0 72 67 2c 20 30 2c 20 6c 69 6b 65 46 75 6e 63 2c  rg, 0, likeFunc,
10fc0 20 30 2c 20 30 2c 20 30 2c 20 23 7a 4e 61 6d 65   0, 0, 0, #zName
10fd0 2c 20 7b 30 7d 20 7d 0a 23 64 65 66 69 6e 65 20  , {0} }.#define 
10fe0 41 47 47 52 45 47 41 54 45 28 7a 4e 61 6d 65 2c  AGGREGATE(zName,
10ff0 20 6e 41 72 67 2c 20 61 72 67 2c 20 6e 63 2c 20   nArg, arg, nc, 
11000 78 53 74 65 70 2c 20 78 46 69 6e 61 6c 2c 20 78  xStep, xFinal, x
11010 56 61 6c 75 65 29 20 5c 0a 20 20 7b 6e 41 72 67  Value) \.  {nArg
11020 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 7c 28 6e  , SQLITE_UTF8|(n
11030 63 2a 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45  c*SQLITE_FUNC_NE
11040 45 44 43 4f 4c 4c 29 2c 20 5c 0a 20 20 20 53 51  EDCOLL), \.   SQ
11050 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28  LITE_INT_TO_PTR(
11060 61 72 67 29 2c 20 30 2c 20 78 53 74 65 70 2c 78  arg), 0, xStep,x
11070 46 69 6e 61 6c 2c 78 56 61 6c 75 65 2c 30 2c 23  Final,xValue,0,#
11080 7a 4e 61 6d 65 2c 20 7b 30 7d 7d 0a 23 64 65 66  zName, {0}}.#def
11090 69 6e 65 20 41 47 47 52 45 47 41 54 45 32 28 7a  ine AGGREGATE2(z
110a0 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 61 72 67 2c  Name, nArg, arg,
110b0 20 6e 63 2c 20 78 53 74 65 70 2c 20 78 46 69 6e   nc, xStep, xFin
110c0 61 6c 2c 20 65 78 74 72 61 46 6c 61 67 73 29 20  al, extraFlags) 
110d0 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54  \.  {nArg, SQLIT
110e0 45 5f 55 54 46 38 7c 28 6e 63 2a 53 51 4c 49 54  E_UTF8|(nc*SQLIT
110f0 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29  E_FUNC_NEEDCOLL)
11100 7c 65 78 74 72 61 46 6c 61 67 73 2c 20 5c 0a 20  |extraFlags, \. 
11110 20 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f    SQLITE_INT_TO_
11120 50 54 52 28 61 72 67 29 2c 20 30 2c 20 78 53 74  PTR(arg), 0, xSt
11130 65 70 2c 78 46 69 6e 61 6c 2c 78 46 69 6e 61 6c  ep,xFinal,xFinal
11140 2c 30 2c 23 7a 4e 61 6d 65 2c 20 7b 30 7d 7d 0a  ,0,#zName, {0}}.
11150 23 64 65 66 69 6e 65 20 57 41 47 47 52 45 47 41  #define WAGGREGA
11160 54 45 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20  TE(zName, nArg, 
11170 61 72 67 2c 20 6e 63 2c 20 78 53 74 65 70 2c 20  arg, nc, xStep, 
11180 78 46 69 6e 61 6c 2c 20 78 56 61 6c 75 65 2c 20  xFinal, xValue, 
11190 78 49 6e 76 65 72 73 65 2c 20 66 29 20 5c 0a 20  xInverse, f) \. 
111a0 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f 55   {nArg, SQLITE_U
111b0 54 46 38 7c 28 6e 63 2a 53 51 4c 49 54 45 5f 46  TF8|(nc*SQLITE_F
111c0 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 7c 66 2c  UNC_NEEDCOLL)|f,
111d0 20 5c 0a 20 20 20 53 51 4c 49 54 45 5f 49 4e 54   \.   SQLITE_INT
111e0 5f 54 4f 5f 50 54 52 28 61 72 67 29 2c 20 30 2c  _TO_PTR(arg), 0,
111f0 20 78 53 74 65 70 2c 78 46 69 6e 61 6c 2c 78 56   xStep,xFinal,xV
11200 61 6c 75 65 2c 78 49 6e 76 65 72 73 65 2c 23 7a  alue,xInverse,#z
11210 4e 61 6d 65 2c 20 7b 30 7d 7d 0a 23 64 65 66 69  Name, {0}}.#defi
11220 6e 65 20 49 4e 54 45 52 4e 41 4c 5f 46 55 4e 43  ne INTERNAL_FUNC
11230 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72 67  TION(zName, nArg
11240 2c 20 78 46 75 6e 63 29 20 5c 0a 20 20 7b 6e 41  , xFunc) \.  {nA
11250 72 67 2c 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f  rg, SQLITE_FUNC_
11260 49 4e 54 45 52 4e 41 4c 7c 53 51 4c 49 54 45 5f  INTERNAL|SQLITE_
11270 55 54 46 38 7c 53 51 4c 49 54 45 5f 46 55 4e 43  UTF8|SQLITE_FUNC
11280 5f 43 4f 4e 53 54 41 4e 54 2c 20 5c 0a 20 20 20  _CONSTANT, \.   
11290 30 2c 20 30 2c 20 78 46 75 6e 63 2c 20 30 2c 20  0, 0, xFunc, 0, 
112a0 30 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c 20 7b 30  0, 0, #zName, {0
112b0 7d 20 7d 0a 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 20  } }.../*.** All 
112c0 63 75 72 72 65 6e 74 20 73 61 76 65 70 6f 69 6e  current savepoin
112d0 74 73 20 61 72 65 20 73 74 6f 72 65 64 20 69 6e  ts are stored in
112e0 20 61 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 73   a linked list s
112f0 74 61 72 74 69 6e 67 20 61 74 0a 2a 2a 20 73 71  tarting at.** sq
11300 6c 69 74 65 33 2e 70 53 61 76 65 70 6f 69 6e 74  lite3.pSavepoint
11310 2e 20 54 68 65 20 66 69 72 73 74 20 65 6c 65 6d  . The first elem
11320 65 6e 74 20 69 6e 20 74 68 65 20 6c 69 73 74 20  ent in the list 
11330 69 73 20 74 68 65 20 6d 6f 73 74 20 72 65 63 65  is the most rece
11340 6e 74 6c 79 0a 2a 2a 20 6f 70 65 6e 65 64 20 73  ntly.** opened s
11350 61 76 65 70 6f 69 6e 74 2e 20 53 61 76 65 70 6f  avepoint. Savepo
11360 69 6e 74 73 20 61 72 65 20 61 64 64 65 64 20 74  ints are added t
11370 6f 20 74 68 65 20 6c 69 73 74 20 62 79 20 74 68  o the list by th
11380 65 20 76 64 62 65 0a 2a 2a 20 4f 50 5f 53 61 76  e vdbe.** OP_Sav
11390 65 70 6f 69 6e 74 20 69 6e 73 74 72 75 63 74 69  epoint instructi
113a0 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53 61  on..*/.struct Sa
113b0 76 65 70 6f 69 6e 74 20 7b 0a 20 20 63 68 61 72  vepoint {.  char
113c0 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20   *zName;        
113d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
113e0 2f 2a 20 53 61 76 65 70 6f 69 6e 74 20 6e 61 6d  /* Savepoint nam
113f0 65 20 28 6e 75 6c 2d 74 65 72 6d 69 6e 61 74 65  e (nul-terminate
11400 64 29 20 2a 2f 0a 20 20 69 36 34 20 6e 44 65 66  d) */.  i64 nDef
11410 65 72 72 65 64 43 6f 6e 73 3b 20 20 20 20 20 20  erredCons;      
11420 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
11430 75 6d 62 65 72 20 6f 66 20 64 65 66 65 72 72 65  umber of deferre
11440 64 20 66 6b 20 76 69 6f 6c 61 74 69 6f 6e 73 20  d fk violations 
11450 2a 2f 0a 20 20 69 36 34 20 6e 44 65 66 65 72 72  */.  i64 nDeferr
11460 65 64 49 6d 6d 43 6f 6e 73 3b 20 20 20 20 20 20  edImmCons;      
11470 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
11480 65 72 20 6f 66 20 64 65 66 65 72 72 65 64 20 69  er of deferred i
11490 6d 6d 20 66 6b 2e 20 2a 2f 0a 20 20 53 61 76 65  mm fk. */.  Save
114a0 70 6f 69 6e 74 20 2a 70 4e 65 78 74 3b 20 20 20  point *pNext;   
114b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
114c0 2f 2a 20 50 61 72 65 6e 74 20 73 61 76 65 70 6f  /* Parent savepo
114d0 69 6e 74 20 28 69 66 20 61 6e 79 29 20 2a 2f 0a  int (if any) */.
114e0 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f  };../*.** The fo
114f0 6c 6c 6f 77 69 6e 67 20 61 72 65 20 75 73 65 64  llowing are used
11500 20 61 73 20 74 68 65 20 73 65 63 6f 6e 64 20 70   as the second p
11510 61 72 61 6d 65 74 65 72 20 74 6f 20 73 71 6c 69  arameter to sqli
11520 74 65 33 53 61 76 65 70 6f 69 6e 74 28 29 2c 0a  te3Savepoint(),.
11530 2a 2a 20 61 6e 64 20 61 73 20 74 68 65 20 50 31  ** and as the P1
11540 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65   argument to the
11550 20 4f 50 5f 53 61 76 65 70 6f 69 6e 74 20 69 6e   OP_Savepoint in
11560 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 23 64  struction..*/.#d
11570 65 66 69 6e 65 20 53 41 56 45 50 4f 49 4e 54 5f  efine SAVEPOINT_
11580 42 45 47 49 4e 20 20 20 20 20 20 30 0a 23 64 65  BEGIN      0.#de
11590 66 69 6e 65 20 53 41 56 45 50 4f 49 4e 54 5f 52  fine SAVEPOINT_R
115a0 45 4c 45 41 53 45 20 20 20 20 31 0a 23 64 65 66  ELEASE    1.#def
115b0 69 6e 65 20 53 41 56 45 50 4f 49 4e 54 5f 52 4f  ine SAVEPOINT_RO
115c0 4c 4c 42 41 43 4b 20 20 20 32 0a 0a 0a 2f 2a 0a  LLBACK   2.../*.
115d0 2a 2a 20 45 61 63 68 20 53 51 4c 69 74 65 20 6d  ** Each SQLite m
115e0 6f 64 75 6c 65 20 28 76 69 72 74 75 61 6c 20 74  odule (virtual t
115f0 61 62 6c 65 20 64 65 66 69 6e 69 74 69 6f 6e 29  able definition)
11600 20 69 73 20 64 65 66 69 6e 65 64 20 62 79 20 61   is defined by a
11610 6e 0a 2a 2a 20 69 6e 73 74 61 6e 63 65 20 6f 66  n.** instance of
11620 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   the following s
11630 74 72 75 63 74 75 72 65 2c 20 73 74 6f 72 65 64  tructure, stored
11640 20 69 6e 20 74 68 65 20 73 71 6c 69 74 65 33 2e   in the sqlite3.
11650 61 4d 6f 64 75 6c 65 0a 2a 2a 20 68 61 73 68 20  aModule.** hash 
11660 74 61 62 6c 65 2e 0a 2a 2f 0a 73 74 72 75 63 74  table..*/.struct
11670 20 4d 6f 64 75 6c 65 20 7b 0a 20 20 63 6f 6e 73   Module {.  cons
11680 74 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65  t sqlite3_module
11690 20 2a 70 4d 6f 64 75 6c 65 3b 20 20 20 20 20 20   *pModule;      
116a0 20 2f 2a 20 43 61 6c 6c 62 61 63 6b 20 70 6f 69   /* Callback poi
116b0 6e 74 65 72 73 20 2a 2f 0a 20 20 63 6f 6e 73 74  nters */.  const
116c0 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20   char *zName;   
116d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
116e0 2f 2a 20 4e 61 6d 65 20 70 61 73 73 65 64 20 74  /* Name passed t
116f0 6f 20 63 72 65 61 74 65 5f 6d 6f 64 75 6c 65 28  o create_module(
11700 29 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 41 75  ) */.  void *pAu
11710 78 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  x;              
11720 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 70              /* p
11730 41 75 78 20 70 61 73 73 65 64 20 74 6f 20 63 72  Aux passed to cr
11740 65 61 74 65 5f 6d 6f 64 75 6c 65 28 29 20 2a 2f  eate_module() */
11750 0a 20 20 76 6f 69 64 20 28 2a 78 44 65 73 74 72  .  void (*xDestr
11760 6f 79 29 28 76 6f 69 64 20 2a 29 3b 20 20 20 20  oy)(void *);    
11770 20 20 20 20 20 20 20 20 2f 2a 20 4d 6f 64 75 6c          /* Modul
11780 65 20 64 65 73 74 72 75 63 74 6f 72 20 66 75 6e  e destructor fun
11790 63 74 69 6f 6e 20 2a 2f 0a 20 20 54 61 62 6c 65  ction */.  Table
117a0 20 2a 70 45 70 6f 54 61 62 3b 20 20 20 20 20 20   *pEpoTab;      
117b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
117c0 2f 2a 20 45 70 6f 6e 79 6d 6f 75 73 20 74 61 62  /* Eponymous tab
117d0 6c 65 20 66 6f 72 20 74 68 69 73 20 6d 6f 64 75  le for this modu
117e0 6c 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  le */.};../*.** 
117f0 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75  information abou
11800 74 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 6f 66  t each column of
11810 20 61 6e 20 53 51 4c 20 74 61 62 6c 65 20 69 73   an SQL table is
11820 20 68 65 6c 64 20 69 6e 20 61 6e 20 69 6e 73 74   held in an inst
11830 61 6e 63 65 0a 2a 2a 20 6f 66 20 74 68 69 73 20  ance.** of this 
11840 73 74 72 75 63 74 75 72 65 2e 0a 2a 2f 0a 73 74  structure..*/.st
11850 72 75 63 74 20 43 6f 6c 75 6d 6e 20 7b 0a 20 20  ruct Column {.  
11860 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20  char *zName;    
11870 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 69 73   /* Name of this
11880 20 63 6f 6c 75 6d 6e 2c 20 5c 30 30 30 2c 20 74   column, \000, t
11890 68 65 6e 20 74 68 65 20 74 79 70 65 20 2a 2f 0a  hen the type */.
118a0 20 20 45 78 70 72 20 2a 70 44 66 6c 74 3b 20 20    Expr *pDflt;  
118b0 20 20 20 2f 2a 20 44 65 66 61 75 6c 74 20 76 61     /* Default va
118c0 6c 75 65 20 6f 66 20 74 68 69 73 20 63 6f 6c 75  lue of this colu
118d0 6d 6e 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 43  mn */.  char *zC
118e0 6f 6c 6c 3b 20 20 20 20 20 2f 2a 20 43 6f 6c 6c  oll;     /* Coll
118f0 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 2e 20  ating sequence. 
11900 20 49 66 20 4e 55 4c 4c 2c 20 75 73 65 20 74 68   If NULL, use th
11910 65 20 64 65 66 61 75 6c 74 20 2a 2f 0a 20 20 75  e default */.  u
11920 38 20 6e 6f 74 4e 75 6c 6c 3b 20 20 20 20 20 20  8 notNull;      
11930 2f 2a 20 41 6e 20 4f 45 5f 20 63 6f 64 65 20 66  /* An OE_ code f
11940 6f 72 20 68 61 6e 64 6c 69 6e 67 20 61 20 4e 4f  or handling a NO
11950 54 20 4e 55 4c 4c 20 63 6f 6e 73 74 72 61 69 6e  T NULL constrain
11960 74 20 2a 2f 0a 20 20 63 68 61 72 20 61 66 66 69  t */.  char affi
11970 6e 69 74 79 3b 20 20 20 2f 2a 20 4f 6e 65 20 6f  nity;   /* One o
11980 66 20 74 68 65 20 53 51 4c 49 54 45 5f 41 46 46  f the SQLITE_AFF
11990 5f 2e 2e 2e 20 76 61 6c 75 65 73 20 2a 2f 0a 20  _... values */. 
119a0 20 75 38 20 73 7a 45 73 74 3b 20 20 20 20 20 20   u8 szEst;      
119b0 20 20 2f 2a 20 45 73 74 69 6d 61 74 65 64 20 73    /* Estimated s
119c0 69 7a 65 20 6f 66 20 76 61 6c 75 65 20 69 6e 20  ize of value in 
119d0 74 68 69 73 20 63 6f 6c 75 6d 6e 2e 20 73 69 7a  this column. siz
119e0 65 6f 66 28 49 4e 54 29 3d 3d 31 20 2a 2f 0a 20  eof(INT)==1 */. 
119f0 20 75 38 20 63 6f 6c 46 6c 61 67 73 3b 20 20 20   u8 colFlags;   
11a00 20 20 2f 2a 20 42 6f 6f 6c 65 61 6e 20 70 72 6f    /* Boolean pro
11a10 70 65 72 74 69 65 73 2e 20 20 53 65 65 20 43 4f  perties.  See CO
11a20 4c 46 4c 41 47 5f 20 64 65 66 69 6e 65 73 20 62  LFLAG_ defines b
11a30 65 6c 6f 77 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 20 41  elow */.};../* A
11a40 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20 66 6f  llowed values fo
11a50 72 20 43 6f 6c 75 6d 6e 2e 63 6f 6c 46 6c 61 67  r Column.colFlag
11a60 73 3a 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 43 4f  s:.*/.#define CO
11a70 4c 46 4c 41 47 5f 50 52 49 4d 4b 45 59 20 20 30  LFLAG_PRIMKEY  0
11a80 78 30 30 30 31 20 20 20 20 2f 2a 20 43 6f 6c 75  x0001    /* Colu
11a90 6d 6e 20 69 73 20 70 61 72 74 20 6f 66 20 74 68  mn is part of th
11aa0 65 20 70 72 69 6d 61 72 79 20 6b 65 79 20 2a 2f  e primary key */
11ab0 0a 23 64 65 66 69 6e 65 20 43 4f 4c 46 4c 41 47  .#define COLFLAG
11ac0 5f 48 49 44 44 45 4e 20 20 20 30 78 30 30 30 32  _HIDDEN   0x0002
11ad0 20 20 20 20 2f 2a 20 41 20 68 69 64 64 65 6e 20      /* A hidden 
11ae0 63 6f 6c 75 6d 6e 20 69 6e 20 61 20 76 69 72 74  column in a virt
11af0 75 61 6c 20 74 61 62 6c 65 20 2a 2f 0a 23 64 65  ual table */.#de
11b00 66 69 6e 65 20 43 4f 4c 46 4c 41 47 5f 48 41 53  fine COLFLAG_HAS
11b10 54 59 50 45 20 20 30 78 30 30 30 34 20 20 20 20  TYPE  0x0004    
11b20 2f 2a 20 54 79 70 65 20 6e 61 6d 65 20 66 6f 6c  /* Type name fol
11b30 6c 6f 77 73 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65  lows column name
11b40 20 2a 2f 0a 23 64 65 66 69 6e 65 20 43 4f 4c 46   */.#define COLF
11b50 4c 41 47 5f 55 4e 49 51 55 45 20 20 20 30 78 30  LAG_UNIQUE   0x0
11b60 30 30 38 20 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e  008    /* Column
11b70 20 64 65 66 20 63 6f 6e 74 61 69 6e 73 20 22 55   def contains "U
11b80 4e 49 51 55 45 22 20 6f 72 20 22 50 4b 22 20 2a  NIQUE" or "PK" *
11b90 2f 0a 23 64 65 66 69 6e 65 20 43 4f 4c 46 4c 41  /.#define COLFLA
11ba0 47 5f 53 4f 52 54 45 52 52 45 46 20 30 78 30 30  G_SORTERREF 0x00
11bb0 31 30 20 20 20 2f 2a 20 55 73 65 20 73 6f 72 74  10   /* Use sort
11bc0 65 72 2d 72 65 66 73 20 77 69 74 68 20 74 68 69  er-refs with thi
11bd0 73 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 0a 2f 2a 0a  s column */../*.
11be0 2a 2a 20 41 20 22 43 6f 6c 6c 61 74 69 6e 67 20  ** A "Collating 
11bf0 53 65 71 75 65 6e 63 65 22 20 69 73 20 64 65 66  Sequence" is def
11c00 69 6e 65 64 20 62 79 20 61 6e 20 69 6e 73 74 61  ined by an insta
11c10 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f  nce of the follo
11c20 77 69 6e 67 0a 2a 2a 20 73 74 72 75 63 74 75 72  wing.** structur
11c30 65 2e 20 43 6f 6e 63 65 70 74 75 61 6c 6c 79 2c  e. Conceptually,
11c40 20 61 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71   a collating seq
11c50 75 65 6e 63 65 20 63 6f 6e 73 69 73 74 73 20 6f  uence consists o
11c60 66 20 61 20 6e 61 6d 65 20 61 6e 64 0a 2a 2a 20  f a name and.** 
11c70 61 20 63 6f 6d 70 61 72 69 73 6f 6e 20 72 6f 75  a comparison rou
11c80 74 69 6e 65 20 74 68 61 74 20 64 65 66 69 6e 65  tine that define
11c90 73 20 74 68 65 20 6f 72 64 65 72 20 6f 66 20 74  s the order of t
11ca0 68 61 74 20 73 65 71 75 65 6e 63 65 2e 0a 2a 2a  hat sequence..**
11cb0 0a 2a 2a 20 49 66 20 43 6f 6c 6c 53 65 71 2e 78  .** If CollSeq.x
11cc0 43 6d 70 20 69 73 20 4e 55 4c 4c 2c 20 69 74 20  Cmp is NULL, it 
11cd0 6d 65 61 6e 73 20 74 68 61 74 20 74 68 65 0a 2a  means that the.*
11ce0 2a 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75  * collating sequ
11cf0 65 6e 63 65 20 69 73 20 75 6e 64 65 66 69 6e 65  ence is undefine
11d00 64 2e 20 20 49 6e 64 69 63 65 73 20 62 75 69 6c  d.  Indices buil
11d10 74 20 6f 6e 20 61 6e 20 75 6e 64 65 66 69 6e 65  t on an undefine
11d20 64 0a 2a 2a 20 63 6f 6c 6c 61 74 69 6e 67 20 73  d.** collating s
11d30 65 71 75 65 6e 63 65 20 6d 61 79 20 6e 6f 74 20  equence may not 
11d40 62 65 20 72 65 61 64 20 6f 72 20 77 72 69 74 74  be read or writt
11d50 65 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 43 6f  en..*/.struct Co
11d60 6c 6c 53 65 71 20 7b 0a 20 20 63 68 61 72 20 2a  llSeq {.  char *
11d70 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20  zName;          
11d80 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65 20 63  /* Name of the c
11d90 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63  ollating sequenc
11da0 65 2c 20 55 54 46 2d 38 20 65 6e 63 6f 64 65 64  e, UTF-8 encoded
11db0 20 2a 2f 0a 20 20 75 38 20 65 6e 63 3b 20 20 20   */.  u8 enc;   
11dc0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
11dd0 65 78 74 20 65 6e 63 6f 64 69 6e 67 20 68 61 6e  ext encoding han
11de0 64 6c 65 64 20 62 79 20 78 43 6d 70 28 29 20 2a  dled by xCmp() *
11df0 2f 0a 20 20 76 6f 69 64 20 2a 70 55 73 65 72 3b  /.  void *pUser;
11e00 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 69 72            /* Fir
11e10 73 74 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 78  st argument to x
11e20 43 6d 70 28 29 20 2a 2f 0a 20 20 69 6e 74 20 28  Cmp() */.  int (
11e30 2a 78 43 6d 70 29 28 76 6f 69 64 2a 2c 69 6e 74  *xCmp)(void*,int
11e40 2c 20 63 6f 6e 73 74 20 76 6f 69 64 2a 2c 20 69  , const void*, i
11e50 6e 74 2c 20 63 6f 6e 73 74 20 76 6f 69 64 2a 29  nt, const void*)
11e60 3b 0a 20 20 76 6f 69 64 20 28 2a 78 44 65 6c 29  ;.  void (*xDel)
11e70 28 76 6f 69 64 2a 29 3b 20 20 2f 2a 20 44 65 73  (void*);  /* Des
11e80 74 72 75 63 74 6f 72 20 66 6f 72 20 70 55 73 65  tructor for pUse
11e90 72 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41  r */.};../*.** A
11ea0 20 73 6f 72 74 20 6f 72 64 65 72 20 63 61 6e 20   sort order can 
11eb0 62 65 20 65 69 74 68 65 72 20 41 53 43 20 6f 72  be either ASC or
11ec0 20 44 45 53 43 2e 0a 2a 2f 0a 23 64 65 66 69 6e   DESC..*/.#defin
11ed0 65 20 53 51 4c 49 54 45 5f 53 4f 5f 41 53 43 20  e SQLITE_SO_ASC 
11ee0 20 20 20 20 20 20 30 20 20 2f 2a 20 53 6f 72 74        0  /* Sort
11ef0 20 69 6e 20 61 73 63 65 6e 64 69 6e 67 20 6f 72   in ascending or
11f00 64 65 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  der */.#define S
11f10 51 4c 49 54 45 5f 53 4f 5f 44 45 53 43 20 20 20  QLITE_SO_DESC   
11f20 20 20 20 31 20 20 2f 2a 20 53 6f 72 74 20 69 6e     1  /* Sort in
11f30 20 61 73 63 65 6e 64 69 6e 67 20 6f 72 64 65 72   ascending order
11f40 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
11f50 54 45 5f 53 4f 5f 55 4e 44 45 46 49 4e 45 44 20  TE_SO_UNDEFINED 
11f60 2d 31 20 2f 2a 20 4e 6f 20 73 6f 72 74 20 6f 72  -1 /* No sort or
11f70 64 65 72 20 73 70 65 63 69 66 69 65 64 20 2a 2f  der specified */
11f80 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6c 75 6d 6e 20 61  ../*.** Column a
11f90 66 66 69 6e 69 74 79 20 74 79 70 65 73 2e 0a 2a  ffinity types..*
11fa0 2a 0a 2a 2a 20 54 68 65 73 65 20 75 73 65 64 20  *.** These used 
11fb0 74 6f 20 68 61 76 65 20 6d 6e 65 6d 6f 6e 69 63  to have mnemonic
11fc0 20 6e 61 6d 65 20 6c 69 6b 65 20 27 69 27 20 66   name like 'i' f
11fd0 6f 72 20 53 51 4c 49 54 45 5f 41 46 46 5f 49 4e  or SQLITE_AFF_IN
11fe0 54 45 47 45 52 20 61 6e 64 0a 2a 2a 20 27 74 27  TEGER and.** 't'
11ff0 20 66 6f 72 20 53 51 4c 49 54 45 5f 41 46 46 5f   for SQLITE_AFF_
12000 54 45 58 54 2e 20 20 42 75 74 20 77 65 20 63 61  TEXT.  But we ca
12010 6e 20 73 61 76 65 20 61 20 6c 69 74 74 6c 65 20  n save a little 
12020 73 70 61 63 65 20 61 6e 64 20 69 6d 70 72 6f 76  space and improv
12030 65 0a 2a 2a 20 74 68 65 20 73 70 65 65 64 20 61  e.** the speed a
12040 20 6c 69 74 74 6c 65 20 62 79 20 6e 75 6d 62 65   little by numbe
12050 72 69 6e 67 20 74 68 65 20 76 61 6c 75 65 73 20  ring the values 
12060 63 6f 6e 73 65 63 75 74 69 76 65 6c 79 2e 0a 2a  consecutively..*
12070 2a 0a 2a 2a 20 42 75 74 20 72 61 74 68 65 72 20  *.** But rather 
12080 74 68 61 6e 20 73 74 61 72 74 20 77 69 74 68 20  than start with 
12090 30 20 6f 72 20 31 2c 20 77 65 20 62 65 67 69 6e  0 or 1, we begin
120a0 20 77 69 74 68 20 27 41 27 2e 20 20 54 68 61 74   with 'A'.  That
120b0 20 77 61 79 2c 0a 2a 2a 20 77 68 65 6e 20 6d 75   way,.** when mu
120c0 6c 74 69 70 6c 65 20 61 66 66 69 6e 69 74 79 20  ltiple affinity 
120d0 74 79 70 65 73 20 61 72 65 20 63 6f 6e 63 61 74  types are concat
120e0 65 6e 61 74 65 64 20 69 6e 74 6f 20 61 20 73 74  enated into a st
120f0 72 69 6e 67 20 61 6e 64 0a 2a 2a 20 75 73 65 64  ring and.** used
12100 20 61 73 20 74 68 65 20 50 34 20 6f 70 65 72 61   as the P4 opera
12110 6e 64 2c 20 74 68 65 79 20 77 69 6c 6c 20 62 65  nd, they will be
12120 20 6d 6f 72 65 20 72 65 61 64 61 62 6c 65 2e 0a   more readable..
12130 2a 2a 0a 2a 2a 20 4e 6f 74 65 20 61 6c 73 6f 20  **.** Note also 
12140 74 68 61 74 20 74 68 65 20 6e 75 6d 65 72 69 63  that the numeric
12150 20 74 79 70 65 73 20 61 72 65 20 67 72 6f 75 70   types are group
12160 65 64 20 74 6f 67 65 74 68 65 72 20 73 6f 20 74  ed together so t
12170 68 61 74 20 74 65 73 74 69 6e 67 0a 2a 2a 20 66  hat testing.** f
12180 6f 72 20 61 20 6e 75 6d 65 72 69 63 20 74 79 70  or a numeric typ
12190 65 20 69 73 20 61 20 73 69 6e 67 6c 65 20 63 6f  e is a single co
121a0 6d 70 61 72 69 73 6f 6e 2e 20 20 41 6e 64 20 74  mparison.  And t
121b0 68 65 20 42 4c 4f 42 20 74 79 70 65 20 69 73 20  he BLOB type is 
121c0 66 69 72 73 74 2e 0a 2a 2f 0a 23 64 65 66 69 6e  first..*/.#defin
121d0 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 42 4c 4f  e SQLITE_AFF_BLO
121e0 42 20 20 20 20 20 27 41 27 0a 23 64 65 66 69 6e  B     'A'.#defin
121f0 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 54 45 58  e SQLITE_AFF_TEX
12200 54 20 20 20 20 20 27 42 27 0a 23 64 65 66 69 6e  T     'B'.#defin
12210 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d  e SQLITE_AFF_NUM
12220 45 52 49 43 20 20 27 43 27 0a 23 64 65 66 69 6e  ERIC  'C'.#defin
12230 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 49 4e 54  e SQLITE_AFF_INT
12240 45 47 45 52 20 20 27 44 27 0a 23 64 65 66 69 6e  EGER  'D'.#defin
12250 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 52 45 41  e SQLITE_AFF_REA
12260 4c 20 20 20 20 20 27 45 27 0a 0a 23 64 65 66 69  L     'E'..#defi
12270 6e 65 20 73 71 6c 69 74 65 33 49 73 4e 75 6d 65  ne sqlite3IsNume
12280 72 69 63 41 66 66 69 6e 69 74 79 28 58 29 20 20  ricAffinity(X)  
12290 28 28 58 29 3e 3d 53 51 4c 49 54 45 5f 41 46 46  ((X)>=SQLITE_AFF
122a0 5f 4e 55 4d 45 52 49 43 29 0a 0a 2f 2a 0a 2a 2a  _NUMERIC)../*.**
122b0 20 54 68 65 20 53 51 4c 49 54 45 5f 41 46 46 5f   The SQLITE_AFF_
122c0 4d 41 53 4b 20 76 61 6c 75 65 73 20 6d 61 73 6b  MASK values mask
122d0 73 20 6f 66 66 20 74 68 65 20 73 69 67 6e 69 66  s off the signif
122e0 69 63 61 6e 74 20 62 69 74 73 20 6f 66 20 61 6e  icant bits of an
122f0 0a 2a 2a 20 61 66 66 69 6e 69 74 79 20 76 61 6c  .** affinity val
12300 75 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ue..*/.#define S
12310 51 4c 49 54 45 5f 41 46 46 5f 4d 41 53 4b 20 20  QLITE_AFF_MASK  
12320 20 20 20 30 78 34 37 0a 0a 2f 2a 0a 2a 2a 20 41     0x47../*.** A
12330 64 64 69 74 69 6f 6e 61 6c 20 62 69 74 20 76 61  dditional bit va
12340 6c 75 65 73 20 74 68 61 74 20 63 61 6e 20 62 65  lues that can be
12350 20 4f 52 65 64 20 77 69 74 68 20 61 6e 20 61 66   ORed with an af
12360 66 69 6e 69 74 79 20 77 69 74 68 6f 75 74 0a 2a  finity without.*
12370 2a 20 63 68 61 6e 67 69 6e 67 20 74 68 65 20 61  * changing the a
12380 66 66 69 6e 69 74 79 2e 0a 2a 2a 0a 2a 2a 20 54  ffinity..**.** T
12390 68 65 20 53 51 4c 49 54 45 5f 4e 4f 54 4e 55 4c  he SQLITE_NOTNUL
123a0 4c 20 66 6c 61 67 20 69 73 20 61 20 63 6f 6d 62  L flag is a comb
123b0 69 6e 61 74 69 6f 6e 20 6f 66 20 4e 55 4c 4c 45  ination of NULLE
123c0 51 20 61 6e 64 20 4a 55 4d 50 49 46 4e 55 4c 4c  Q and JUMPIFNULL
123d0 2e 0a 2a 2a 20 49 74 20 63 61 75 73 65 73 20 61  ..** It causes a
123e0 6e 20 61 73 73 65 72 74 28 29 20 74 6f 20 66 69  n assert() to fi
123f0 72 65 20 69 66 20 65 69 74 68 65 72 20 6f 70 65  re if either ope
12400 72 61 6e 64 20 74 6f 20 61 20 63 6f 6d 70 61 72  rand to a compar
12410 69 73 6f 6e 0a 2a 2a 20 6f 70 65 72 61 74 6f 72  ison.** operator
12420 20 69 73 20 4e 55 4c 4c 2e 20 20 49 74 20 69 73   is NULL.  It is
12430 20 61 64 64 65 64 20 74 6f 20 63 65 72 74 61 69   added to certai
12440 6e 20 63 6f 6d 70 61 72 69 73 6f 6e 20 6f 70 65  n comparison ope
12450 72 61 74 6f 72 73 20 74 6f 0a 2a 2a 20 70 72 6f  rators to.** pro
12460 76 65 20 74 68 61 74 20 74 68 65 20 6f 70 65 72  ve that the oper
12470 61 6e 64 73 20 61 72 65 20 61 6c 77 61 79 73 20  ands are always 
12480 4e 4f 54 20 4e 55 4c 4c 2e 0a 2a 2f 0a 23 64 65  NOT NULL..*/.#de
12490 66 69 6e 65 20 53 51 4c 49 54 45 5f 4b 45 45 50  fine SQLITE_KEEP
124a0 4e 55 4c 4c 20 20 20 20 20 30 78 30 38 20 20 2f  NULL     0x08  /
124b0 2a 20 55 73 65 64 20 62 79 20 76 65 63 74 6f 72  * Used by vector
124c0 20 3d 3d 20 6f 72 20 3c 3e 20 2a 2f 0a 23 64 65   == or <> */.#de
124d0 66 69 6e 65 20 53 51 4c 49 54 45 5f 4a 55 4d 50  fine SQLITE_JUMP
124e0 49 46 4e 55 4c 4c 20 20 20 30 78 31 30 20 20 2f  IFNULL   0x10  /
124f0 2a 20 6a 75 6d 70 73 20 69 66 20 65 69 74 68 65  * jumps if eithe
12500 72 20 6f 70 65 72 61 6e 64 20 69 73 20 4e 55 4c  r operand is NUL
12510 4c 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  L */.#define SQL
12520 49 54 45 5f 53 54 4f 52 45 50 32 20 20 20 20 20  ITE_STOREP2     
12530 20 30 78 32 30 20 20 2f 2a 20 53 74 6f 72 65 20   0x20  /* Store 
12540 72 65 73 75 6c 74 20 69 6e 20 72 65 67 5b 50 32  result in reg[P2
12550 5d 20 72 61 74 68 65 72 20 74 68 61 6e 20 6a 75  ] rather than ju
12560 6d 70 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  mp */.#define SQ
12570 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 20 20 20 20  LITE_NULLEQ     
12580 20 20 30 78 38 30 20 20 2f 2a 20 4e 55 4c 4c 3d    0x80  /* NULL=
12590 4e 55 4c 4c 20 2a 2f 0a 23 64 65 66 69 6e 65 20  NULL */.#define 
125a0 53 51 4c 49 54 45 5f 4e 4f 54 4e 55 4c 4c 20 20  SQLITE_NOTNULL  
125b0 20 20 20 20 30 78 39 30 20 20 2f 2a 20 41 73 73      0x90  /* Ass
125c0 65 72 74 20 74 68 61 74 20 6f 70 65 72 61 6e 64  ert that operand
125d0 73 20 61 72 65 20 6e 65 76 65 72 20 4e 55 4c 4c  s are never NULL
125e0 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 6f 62   */../*.** An ob
125f0 6a 65 63 74 20 6f 66 20 74 68 69 73 20 74 79 70  ject of this typ
12600 65 20 69 73 20 63 72 65 61 74 65 64 20 66 6f 72  e is created for
12610 20 65 61 63 68 20 76 69 72 74 75 61 6c 20 74 61   each virtual ta
12620 62 6c 65 20 70 72 65 73 65 6e 74 20 69 6e 0a 2a  ble present in.*
12630 2a 20 74 68 65 20 64 61 74 61 62 61 73 65 20 73  * the database s
12640 63 68 65 6d 61 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  chema..**.** If 
12650 74 68 65 20 64 61 74 61 62 61 73 65 20 73 63 68  the database sch
12660 65 6d 61 20 69 73 20 73 68 61 72 65 64 2c 20 74  ema is shared, t
12670 68 65 6e 20 74 68 65 72 65 20 69 73 20 6f 6e 65  hen there is one
12680 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 69   instance of thi
12690 73 0a 2a 2a 20 73 74 72 75 63 74 75 72 65 20 66  s.** structure f
126a0 6f 72 20 65 61 63 68 20 64 61 74 61 62 61 73 65  or each database
126b0 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 28 73 71 6c   connection (sql
126c0 69 74 65 33 2a 29 20 74 68 61 74 20 75 73 65 73  ite3*) that uses
126d0 20 74 68 65 20 73 68 61 72 65 64 0a 2a 2a 20 73   the shared.** s
126e0 63 68 65 6d 61 2e 20 54 68 69 73 20 69 73 20 62  chema. This is b
126f0 65 63 61 75 73 65 20 65 61 63 68 20 64 61 74 61  ecause each data
12700 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20  base connection 
12710 72 65 71 75 69 72 65 73 20 69 74 73 20 6f 77 6e  requires its own
12720 20 75 6e 69 71 75 65 0a 2a 2a 20 69 6e 73 74 61   unique.** insta
12730 6e 63 65 20 6f 66 20 74 68 65 20 73 71 6c 69 74  nce of the sqlit
12740 65 33 5f 76 74 61 62 2a 20 68 61 6e 64 6c 65 20  e3_vtab* handle 
12750 75 73 65 64 20 74 6f 20 61 63 63 65 73 73 20 74  used to access t
12760 68 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  he virtual table
12770 0a 2a 2a 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  .** implementati
12780 6f 6e 2e 20 73 71 6c 69 74 65 33 5f 76 74 61 62  on. sqlite3_vtab
12790 2a 20 68 61 6e 64 6c 65 73 20 63 61 6e 20 6e 6f  * handles can no
127a0 74 20 62 65 20 73 68 61 72 65 64 20 62 65 74 77  t be shared betw
127b0 65 65 6e 0a 2a 2a 20 64 61 74 61 62 61 73 65 20  een.** database 
127c0 63 6f 6e 6e 65 63 74 69 6f 6e 73 2c 20 65 76 65  connections, eve
127d0 6e 20 77 68 65 6e 20 74 68 65 20 72 65 73 74 20  n when the rest 
127e0 6f 66 20 74 68 65 20 69 6e 2d 6d 65 6d 6f 72 79  of the in-memory
127f0 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 73 63 68   database.** sch
12800 65 6d 61 20 69 73 20 73 68 61 72 65 64 2c 20 61  ema is shared, a
12810 73 20 74 68 65 20 69 6d 70 6c 65 6d 65 6e 74 61  s the implementa
12820 74 69 6f 6e 20 6f 66 74 65 6e 20 73 74 6f 72 65  tion often store
12830 73 20 74 68 65 20 64 61 74 61 62 61 73 65 0a 2a  s the database.*
12840 2a 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e  * connection han
12850 64 6c 65 20 70 61 73 73 65 64 20 74 6f 20 69 74  dle passed to it
12860 20 76 69 61 20 74 68 65 20 78 43 6f 6e 6e 65 63   via the xConnec
12870 74 28 29 20 6f 72 20 78 43 72 65 61 74 65 28 29  t() or xCreate()
12880 20 6d 65 74 68 6f 64 0a 2a 2a 20 64 75 72 69 6e   method.** durin
12890 67 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e  g initialization
128a0 20 69 6e 74 65 72 6e 61 6c 6c 79 2e 20 54 68 69   internally. Thi
128b0 73 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65  s database conne
128c0 63 74 69 6f 6e 20 68 61 6e 64 6c 65 20 6d 61 79  ction handle may
128d0 0a 2a 2a 20 74 68 65 6e 20 62 65 20 75 73 65 64  .** then be used
128e0 20 62 79 20 74 68 65 20 76 69 72 74 75 61 6c 20   by the virtual 
128f0 74 61 62 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 61  table implementa
12900 74 69 6f 6e 20 74 6f 20 61 63 63 65 73 73 20 72  tion to access r
12910 65 61 6c 20 74 61 62 6c 65 73 0a 2a 2a 20 77 69  eal tables.** wi
12920 74 68 69 6e 20 74 68 65 20 64 61 74 61 62 61 73  thin the databas
12930 65 2e 20 53 6f 20 74 68 61 74 20 74 68 65 79 20  e. So that they 
12940 61 70 70 65 61 72 20 61 73 20 70 61 72 74 20 6f  appear as part o
12950 66 20 74 68 65 20 63 61 6c 6c 65 72 73 0a 2a 2a  f the callers.**
12960 20 74 72 61 6e 73 61 63 74 69 6f 6e 2c 20 74 68   transaction, th
12970 65 73 65 20 61 63 63 65 73 73 65 73 20 6e 65 65  ese accesses nee
12980 64 20 74 6f 20 62 65 20 6d 61 64 65 20 76 69 61  d to be made via
12990 20 74 68 65 20 73 61 6d 65 20 64 61 74 61 62 61   the same databa
129a0 73 65 0a 2a 2a 20 63 6f 6e 6e 65 63 74 69 6f 6e  se.** connection
129b0 20 61 73 20 74 68 61 74 20 75 73 65 64 20 74 6f   as that used to
129c0 20 65 78 65 63 75 74 65 20 53 51 4c 20 6f 70 65   execute SQL ope
129d0 72 61 74 69 6f 6e 73 20 6f 6e 20 74 68 65 20 76  rations on the v
129e0 69 72 74 75 61 6c 20 74 61 62 6c 65 2e 0a 2a 2a  irtual table..**
129f0 0a 2a 2a 20 41 6c 6c 20 56 54 61 62 6c 65 20 6f  .** All VTable o
12a00 62 6a 65 63 74 73 20 74 68 61 74 20 63 6f 72 72  bjects that corr
12a10 65 73 70 6f 6e 64 20 74 6f 20 61 20 73 69 6e 67  espond to a sing
12a20 6c 65 20 74 61 62 6c 65 20 69 6e 20 61 20 73 68  le table in a sh
12a30 61 72 65 64 0a 2a 2a 20 64 61 74 61 62 61 73 65  ared.** database
12a40 20 73 63 68 65 6d 61 20 61 72 65 20 69 6e 69 74   schema are init
12a50 69 61 6c 6c 79 20 73 74 6f 72 65 64 20 69 6e 20  ially stored in 
12a60 61 20 6c 69 6e 6b 65 64 2d 6c 69 73 74 20 70 6f  a linked-list po
12a70 69 6e 74 65 64 20 74 6f 20 62 79 0a 2a 2a 20 74  inted to by.** t
12a80 68 65 20 54 61 62 6c 65 2e 70 56 54 61 62 6c 65  he Table.pVTable
12a90 20 6d 65 6d 62 65 72 20 76 61 72 69 61 62 6c 65   member variable
12aa0 20 6f 66 20 74 68 65 20 63 6f 72 72 65 73 70 6f   of the correspo
12ab0 6e 64 69 6e 67 20 54 61 62 6c 65 20 6f 62 6a 65  nding Table obje
12ac0 63 74 2e 0a 2a 2a 20 57 68 65 6e 20 61 6e 20 73  ct..** When an s
12ad0 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 28 29  qlite3_prepare()
12ae0 20 6f 70 65 72 61 74 69 6f 6e 20 69 73 20 72 65   operation is re
12af0 71 75 69 72 65 64 20 74 6f 20 61 63 63 65 73 73  quired to access
12b00 20 74 68 65 20 76 69 72 74 75 61 6c 0a 2a 2a 20   the virtual.** 
12b10 74 61 62 6c 65 2c 20 69 74 20 73 65 61 72 63 68  table, it search
12b20 65 73 20 74 68 65 20 6c 69 73 74 20 66 6f 72 20  es the list for 
12b30 74 68 65 20 56 54 61 62 6c 65 20 74 68 61 74 20  the VTable that 
12b40 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 74  corresponds to t
12b50 68 65 0a 2a 2a 20 64 61 74 61 62 61 73 65 20 63  he.** database c
12b60 6f 6e 6e 65 63 74 69 6f 6e 20 64 6f 69 6e 67 20  onnection doing 
12b70 74 68 65 20 70 72 65 70 61 72 69 6e 67 20 73 6f  the preparing so
12b80 20 61 73 20 74 6f 20 75 73 65 20 74 68 65 20 63   as to use the c
12b90 6f 72 72 65 63 74 0a 2a 2a 20 73 71 6c 69 74 65  orrect.** sqlite
12ba0 33 5f 76 74 61 62 2a 20 68 61 6e 64 6c 65 20 69  3_vtab* handle i
12bb0 6e 20 74 68 65 20 63 6f 6d 70 69 6c 65 64 20 71  n the compiled q
12bc0 75 65 72 79 2e 0a 2a 2a 0a 2a 2a 20 57 68 65 6e  uery..**.** When
12bd0 20 61 6e 20 69 6e 2d 6d 65 6d 6f 72 79 20 54 61   an in-memory Ta
12be0 62 6c 65 20 6f 62 6a 65 63 74 20 69 73 20 64 65  ble object is de
12bf0 6c 65 74 65 64 20 28 66 6f 72 20 65 78 61 6d 70  leted (for examp
12c00 6c 65 20 77 68 65 6e 20 74 68 65 0a 2a 2a 20 73  le when the.** s
12c10 63 68 65 6d 61 20 69 73 20 62 65 69 6e 67 20 72  chema is being r
12c20 65 6c 6f 61 64 65 64 20 66 6f 72 20 73 6f 6d 65  eloaded for some
12c30 20 72 65 61 73 6f 6e 29 2c 20 74 68 65 20 56 54   reason), the VT
12c40 61 62 6c 65 20 6f 62 6a 65 63 74 73 20 61 72 65  able objects are
12c50 20 6e 6f 74 0a 2a 2a 20 64 65 6c 65 74 65 64 20   not.** deleted 
12c60 61 6e 64 20 74 68 65 20 73 71 6c 69 74 65 33 5f  and the sqlite3_
12c70 76 74 61 62 2a 20 68 61 6e 64 6c 65 73 20 61 72  vtab* handles ar
12c80 65 20 6e 6f 74 20 78 44 69 73 63 6f 6e 6e 65 63  e not xDisconnec
12c90 74 28 29 65 64 0a 2a 2a 20 69 6d 6d 65 64 69 61  t()ed.** immedia
12ca0 74 65 6c 79 2e 20 49 6e 73 74 65 61 64 2c 20 74  tely. Instead, t
12cb0 68 65 79 20 61 72 65 20 6d 6f 76 65 64 20 66 72  hey are moved fr
12cc0 6f 6d 20 74 68 65 20 54 61 62 6c 65 2e 70 56 54  om the Table.pVT
12cd0 61 62 6c 65 20 6c 69 73 74 20 74 6f 0a 2a 2a 20  able list to.** 
12ce0 61 6e 6f 74 68 65 72 20 6c 69 6e 6b 65 64 20 6c  another linked l
12cf0 69 73 74 20 68 65 61 64 65 64 20 62 79 20 74 68  ist headed by th
12d00 65 20 73 71 6c 69 74 65 33 2e 70 44 69 73 63 6f  e sqlite3.pDisco
12d10 6e 6e 65 63 74 20 6d 65 6d 62 65 72 20 6f 66 20  nnect member of 
12d20 74 68 65 0a 2a 2a 20 63 6f 72 72 65 73 70 6f 6e  the.** correspon
12d30 64 69 6e 67 20 73 71 6c 69 74 65 33 20 73 74 72  ding sqlite3 str
12d40 75 63 74 75 72 65 2e 20 54 68 65 79 20 61 72 65  ucture. They are
12d50 20 74 68 65 6e 20 64 65 6c 65 74 65 64 2f 78 44   then deleted/xD
12d60 69 73 63 6f 6e 6e 65 63 74 65 64 0a 2a 2a 20 6e  isconnected.** n
12d70 65 78 74 20 74 69 6d 65 20 61 20 73 74 61 74 65  ext time a state
12d80 6d 65 6e 74 20 69 73 20 70 72 65 70 61 72 65 64  ment is prepared
12d90 20 75 73 69 6e 67 20 73 61 69 64 20 73 71 6c 69   using said sqli
12da0 74 65 33 2a 2e 20 54 68 69 73 20 69 73 20 64 6f  te3*. This is do
12db0 6e 65 0a 2a 2a 20 74 6f 20 61 76 6f 69 64 20 64  ne.** to avoid d
12dc0 65 61 64 6c 6f 63 6b 20 69 73 73 75 65 73 20 69  eadlock issues i
12dd0 6e 76 6f 6c 76 69 6e 67 20 6d 75 6c 74 69 70 6c  nvolving multipl
12de0 65 20 73 71 6c 69 74 65 33 2e 6d 75 74 65 78 20  e sqlite3.mutex 
12df0 6d 75 74 65 78 65 73 2e 0a 2a 2a 20 52 65 66 65  mutexes..** Refe
12e00 72 20 74 6f 20 63 6f 6d 6d 65 6e 74 73 20 61 62  r to comments ab
12e10 6f 76 65 20 66 75 6e 63 74 69 6f 6e 20 73 71 6c  ove function sql
12e20 69 74 65 33 56 74 61 62 55 6e 6c 6f 63 6b 4c 69  ite3VtabUnlockLi
12e30 73 74 28 29 20 66 6f 72 20 61 6e 0a 2a 2a 20 65  st() for an.** e
12e40 78 70 6c 61 6e 61 74 69 6f 6e 20 61 73 20 74 6f  xplanation as to
12e50 20 77 68 79 20 69 74 20 69 73 20 73 61 66 65 20   why it is safe 
12e60 74 6f 20 61 64 64 20 61 6e 20 65 6e 74 72 79 20  to add an entry 
12e70 74 6f 20 61 6e 20 73 71 6c 69 74 65 33 2e 70 44  to an sqlite3.pD
12e80 69 73 63 6f 6e 6e 65 63 74 0a 2a 2a 20 6c 69 73  isconnect.** lis
12e90 74 20 77 69 74 68 6f 75 74 20 68 6f 6c 64 69 6e  t without holdin
12ea0 67 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64  g the correspond
12eb0 69 6e 67 20 73 71 6c 69 74 65 33 2e 6d 75 74 65  ing sqlite3.mute
12ec0 78 20 6d 75 74 65 78 2e 0a 2a 2a 0a 2a 2a 20 54  x mutex..**.** T
12ed0 68 65 20 6d 65 6d 6f 72 79 20 66 6f 72 20 6f 62  he memory for ob
12ee0 6a 65 63 74 73 20 6f 66 20 74 68 69 73 20 74 79  jects of this ty
12ef0 70 65 20 69 73 20 61 6c 77 61 79 73 20 61 6c 6c  pe is always all
12f00 6f 63 61 74 65 64 20 62 79 0a 2a 2a 20 73 71 6c  ocated by.** sql
12f10 69 74 65 33 44 62 4d 61 6c 6c 6f 63 28 29 2c 20  ite3DbMalloc(), 
12f20 75 73 69 6e 67 20 74 68 65 20 63 6f 6e 6e 65 63  using the connec
12f30 74 69 6f 6e 20 68 61 6e 64 6c 65 20 73 74 6f 72  tion handle stor
12f40 65 64 20 69 6e 20 56 54 61 62 6c 65 2e 64 62 20  ed in VTable.db 
12f50 61 73 0a 2a 2a 20 74 68 65 20 66 69 72 73 74 20  as.** the first 
12f60 61 72 67 75 6d 65 6e 74 2e 0a 2a 2f 0a 73 74 72  argument..*/.str
12f70 75 63 74 20 56 54 61 62 6c 65 20 7b 0a 20 20 73  uct VTable {.  s
12f80 71 6c 69 74 65 33 20 2a 64 62 3b 20 20 20 20 20  qlite3 *db;     
12f90 20 20 20 20 20 20 20 20 20 2f 2a 20 44 61 74 61           /* Data
12fa0 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20  base connection 
12fb0 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20  associated with 
12fc0 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20  this table */.  
12fd0 4d 6f 64 75 6c 65 20 2a 70 4d 6f 64 3b 20 20 20  Module *pMod;   
12fe0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50 6f 69            /* Poi
12ff0 6e 74 65 72 20 74 6f 20 6d 6f 64 75 6c 65 20 69  nter to module i
13000 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 2a 2f  mplementation */
13010 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20  .  sqlite3_vtab 
13020 2a 70 56 74 61 62 3b 20 20 20 20 20 20 2f 2a 20  *pVtab;      /* 
13030 50 6f 69 6e 74 65 72 20 74 6f 20 76 74 61 62 20  Pointer to vtab 
13040 69 6e 73 74 61 6e 63 65 20 2a 2f 0a 20 20 69 6e  instance */.  in
13050 74 20 6e 52 65 66 3b 20 20 20 20 20 20 20 20 20  t nRef;         
13060 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
13070 72 20 6f 66 20 70 6f 69 6e 74 65 72 73 20 74 6f  r of pointers to
13080 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65 20   this structure 
13090 2a 2f 0a 20 20 75 38 20 62 43 6f 6e 73 74 72 61  */.  u8 bConstra
130a0 69 6e 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f  int;           /
130b0 2a 20 54 72 75 65 20 69 66 20 63 6f 6e 73 74 72  * True if constr
130c0 61 69 6e 74 73 20 61 72 65 20 73 75 70 70 6f 72  aints are suppor
130d0 74 65 64 20 2a 2f 0a 20 20 69 6e 74 20 69 53 61  ted */.  int iSa
130e0 76 65 70 6f 69 6e 74 3b 20 20 20 20 20 20 20 20  vepoint;        
130f0 20 20 20 2f 2a 20 44 65 70 74 68 20 6f 66 20 74     /* Depth of t
13100 68 65 20 53 41 56 45 50 4f 49 4e 54 20 73 74 61  he SAVEPOINT sta
13110 63 6b 20 2a 2f 0a 20 20 56 54 61 62 6c 65 20 2a  ck */.  VTable *
13120 70 4e 65 78 74 3b 20 20 20 20 20 20 20 20 20 20  pNext;          
13130 20 20 2f 2a 20 4e 65 78 74 20 69 6e 20 6c 69 6e    /* Next in lin
13140 6b 65 64 20 6c 69 73 74 20 28 73 65 65 20 61 62  ked list (see ab
13150 6f 76 65 29 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  ove) */.};../*.*
13160 2a 20 54 68 65 20 73 63 68 65 6d 61 20 66 6f 72  * The schema for
13170 20 65 61 63 68 20 53 51 4c 20 74 61 62 6c 65 20   each SQL table 
13180 61 6e 64 20 76 69 65 77 20 69 73 20 72 65 70 72  and view is repr
13190 65 73 65 6e 74 65 64 20 69 6e 20 6d 65 6d 6f 72  esented in memor
131a0 79 0a 2a 2a 20 62 79 20 61 6e 20 69 6e 73 74 61  y.** by an insta
131b0 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f  nce of the follo
131c0 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 2e 0a  wing structure..
131d0 2a 2f 0a 73 74 72 75 63 74 20 54 61 62 6c 65 20  */.struct Table 
131e0 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b  {.  char *zName;
131f0 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65           /* Name
13200 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 6f 72   of the table or
13210 20 76 69 65 77 20 2a 2f 0a 20 20 43 6f 6c 75 6d   view */.  Colum
13220 6e 20 2a 61 43 6f 6c 3b 20 20 20 20 20 20 20 20  n *aCol;        
13230 2f 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 61  /* Information a
13240 62 6f 75 74 20 65 61 63 68 20 63 6f 6c 75 6d 6e  bout each column
13250 20 2a 2f 0a 20 20 49 6e 64 65 78 20 2a 70 49 6e   */.  Index *pIn
13260 64 65 78 3b 20 20 20 20 20 20 20 2f 2a 20 4c 69  dex;       /* Li
13270 73 74 20 6f 66 20 53 51 4c 20 69 6e 64 65 78 65  st of SQL indexe
13280 73 20 6f 6e 20 74 68 69 73 20 74 61 62 6c 65 2e  s on this table.
13290 20 2a 2f 0a 20 20 53 65 6c 65 63 74 20 2a 70 53   */.  Select *pS
132a0 65 6c 65 63 74 3b 20 20 20 20 20 2f 2a 20 4e 55  elect;     /* NU
132b0 4c 4c 20 66 6f 72 20 74 61 62 6c 65 73 2e 20 20  LL for tables.  
132c0 50 6f 69 6e 74 73 20 74 6f 20 64 65 66 69 6e 69  Points to defini
132d0 74 69 6f 6e 20 69 66 20 61 20 76 69 65 77 2e 20  tion if a view. 
132e0 2a 2f 0a 20 20 46 4b 65 79 20 2a 70 46 4b 65 79  */.  FKey *pFKey
132f0 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 69 6e  ;         /* Lin
13300 6b 65 64 20 6c 69 73 74 20 6f 66 20 61 6c 6c 20  ked list of all 
13310 66 6f 72 65 69 67 6e 20 6b 65 79 73 20 69 6e 20  foreign keys in 
13320 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20  this table */.  
13330 63 68 61 72 20 2a 7a 43 6f 6c 41 66 66 3b 20 20  char *zColAff;  
13340 20 20 20 20 20 2f 2a 20 53 74 72 69 6e 67 20 64       /* String d
13350 65 66 69 6e 69 6e 67 20 74 68 65 20 61 66 66 69  efining the affi
13360 6e 69 74 79 20 6f 66 20 65 61 63 68 20 63 6f 6c  nity of each col
13370 75 6d 6e 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73  umn */.  ExprLis
13380 74 20 2a 70 43 68 65 63 6b 3b 20 20 20 20 2f 2a  t *pCheck;    /*
13390 20 41 6c 6c 20 43 48 45 43 4b 20 63 6f 6e 73 74   All CHECK const
133a0 72 61 69 6e 74 73 20 2a 2f 0a 20 20 20 20 20 20  raints */.      
133b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
133c0 20 2f 2a 20 20 20 2e 2e 2e 20 61 6c 73 6f 20 75   /*   ... also u
133d0 73 65 64 20 61 73 20 63 6f 6c 75 6d 6e 20 6e 61  sed as column na
133e0 6d 65 20 6c 69 73 74 20 69 6e 20 61 20 56 49 45  me list in a VIE
133f0 57 20 2a 2f 0a 20 20 69 6e 74 20 74 6e 75 6d 3b  W */.  int tnum;
13400 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52              /* R
13410 6f 6f 74 20 42 54 72 65 65 20 70 61 67 65 20 66  oot BTree page f
13420 6f 72 20 74 68 69 73 20 74 61 62 6c 65 20 2a 2f  or this table */
13430 0a 20 20 75 33 32 20 6e 54 61 62 52 65 66 3b 20  .  u32 nTabRef; 
13440 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
13450 72 20 6f 66 20 70 6f 69 6e 74 65 72 73 20 74 6f  r of pointers to
13460 20 74 68 69 73 20 54 61 62 6c 65 20 2a 2f 0a 20   this Table */. 
13470 20 75 33 32 20 74 61 62 46 6c 61 67 73 3b 20 20   u32 tabFlags;  
13480 20 20 20 20 20 20 2f 2a 20 4d 61 73 6b 20 6f 66        /* Mask of
13490 20 54 46 5f 2a 20 76 61 6c 75 65 73 20 2a 2f 0a   TF_* values */.
134a0 20 20 69 31 36 20 69 50 4b 65 79 3b 20 20 20 20    i16 iPKey;    
134b0 20 20 20 20 20 20 20 2f 2a 20 49 66 20 6e 6f 74         /* If not
134c0 20 6e 65 67 61 74 69 76 65 2c 20 75 73 65 20 61   negative, use a
134d0 43 6f 6c 5b 69 50 4b 65 79 5d 20 61 73 20 74 68  Col[iPKey] as th
134e0 65 20 72 6f 77 69 64 20 2a 2f 0a 20 20 69 31 36  e rowid */.  i16
134f0 20 6e 43 6f 6c 3b 20 20 20 20 20 20 20 20 20 20   nCol;          
13500 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63    /* Number of c
13510 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 69 73 20 74  olumns in this t
13520 61 62 6c 65 20 2a 2f 0a 20 20 4c 6f 67 45 73 74  able */.  LogEst
13530 20 6e 52 6f 77 4c 6f 67 45 73 74 3b 20 20 20 2f   nRowLogEst;   /
13540 2a 20 45 73 74 69 6d 61 74 65 64 20 72 6f 77 73  * Estimated rows
13550 20 69 6e 20 74 61 62 6c 65 20 2d 20 66 72 6f 6d   in table - from
13560 20 73 71 6c 69 74 65 5f 73 74 61 74 31 20 74 61   sqlite_stat1 ta
13570 62 6c 65 20 2a 2f 0a 20 20 4c 6f 67 45 73 74 20  ble */.  LogEst 
13580 73 7a 54 61 62 52 6f 77 3b 20 20 20 20 20 2f 2a  szTabRow;     /*
13590 20 45 73 74 69 6d 61 74 65 64 20 73 69 7a 65 20   Estimated size 
135a0 6f 66 20 65 61 63 68 20 74 61 62 6c 65 20 72 6f  of each table ro
135b0 77 20 69 6e 20 62 79 74 65 73 20 2a 2f 0a 23 69  w in bytes */.#i
135c0 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  fdef SQLITE_ENAB
135d0 4c 45 5f 43 4f 53 54 4d 55 4c 54 0a 20 20 4c 6f  LE_COSTMULT.  Lo
135e0 67 45 73 74 20 63 6f 73 74 4d 75 6c 74 3b 20 20  gEst costMult;  
135f0 20 20 20 2f 2a 20 43 6f 73 74 20 6d 75 6c 74 69     /* Cost multi
13600 70 6c 69 65 72 20 66 6f 72 20 75 73 69 6e 67 20  plier for using 
13610 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 23 65  this table */.#e
13620 6e 64 69 66 0a 20 20 75 38 20 6b 65 79 43 6f 6e  ndif.  u8 keyCon
13630 66 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57  f;          /* W
13640 68 61 74 20 74 6f 20 64 6f 20 69 6e 20 63 61 73  hat to do in cas
13650 65 20 6f 66 20 75 6e 69 71 75 65 6e 65 73 73 20  e of uniqueness 
13660 63 6f 6e 66 6c 69 63 74 20 6f 6e 20 69 50 4b 65  conflict on iPKe
13670 79 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c  y */.#ifndef SQL
13680 49 54 45 5f 4f 4d 49 54 5f 41 4c 54 45 52 54 41  ITE_OMIT_ALTERTA
13690 42 4c 45 0a 20 20 69 6e 74 20 61 64 64 43 6f 6c  BLE.  int addCol
136a0 4f 66 66 73 65 74 3b 20 20 20 20 2f 2a 20 4f 66  Offset;    /* Of
136b0 66 73 65 74 20 69 6e 20 43 52 45 41 54 45 20 54  fset in CREATE T
136c0 41 42 4c 45 20 73 74 6d 74 20 74 6f 20 61 64 64  ABLE stmt to add
136d0 20 61 20 6e 65 77 20 63 6f 6c 75 6d 6e 20 2a 2f   a new column */
136e0 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20  .#endif.#ifndef 
136f0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
13700 55 41 4c 54 41 42 4c 45 0a 20 20 69 6e 74 20 6e  UALTABLE.  int n
13710 4d 6f 64 75 6c 65 41 72 67 3b 20 20 20 20 20 20  ModuleArg;      
13720 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 72 67  /* Number of arg
13730 75 6d 65 6e 74 73 20 74 6f 20 74 68 65 20 6d 6f  uments to the mo
13740 64 75 6c 65 20 2a 2f 0a 20 20 63 68 61 72 20 2a  dule */.  char *
13750 2a 61 7a 4d 6f 64 75 6c 65 41 72 67 3b 20 20 2f  *azModuleArg;  /
13760 2a 20 30 3a 20 6d 6f 64 75 6c 65 20 31 3a 20 73  * 0: module 1: s
13770 63 68 65 6d 61 20 32 3a 20 76 74 61 62 20 6e 61  chema 2: vtab na
13780 6d 65 20 33 2e 2e 2e 3a 20 61 72 67 73 20 2a 2f  me 3...: args */
13790 0a 20 20 56 54 61 62 6c 65 20 2a 70 56 54 61 62  .  VTable *pVTab
137a0 6c 65 3b 20 20 20 20 20 2f 2a 20 4c 69 73 74 20  le;     /* List 
137b0 6f 66 20 56 54 61 62 6c 65 20 6f 62 6a 65 63 74  of VTable object
137c0 73 2e 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 54  s. */.#endif.  T
137d0 72 69 67 67 65 72 20 2a 70 54 72 69 67 67 65 72  rigger *pTrigger
137e0 3b 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 74  ;   /* List of t
137f0 72 69 67 67 65 72 73 20 73 74 6f 72 65 64 20 69  riggers stored i
13800 6e 20 70 53 63 68 65 6d 61 20 2a 2f 0a 20 20 53  n pSchema */.  S
13810 63 68 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20  chema *pSchema; 
13820 20 20 20 20 2f 2a 20 53 63 68 65 6d 61 20 74 68      /* Schema th
13830 61 74 20 63 6f 6e 74 61 69 6e 73 20 74 68 69 73  at contains this
13840 20 74 61 62 6c 65 20 2a 2f 0a 20 20 54 61 62 6c   table */.  Tabl
13850 65 20 2a 70 4e 65 78 74 5a 6f 6d 62 69 65 3b 20  e *pNextZombie; 
13860 20 2f 2a 20 4e 65 78 74 20 6f 6e 20 74 68 65 20   /* Next on the 
13870 50 61 72 73 65 2e 70 5a 6f 6d 62 69 65 54 61 62  Parse.pZombieTab
13880 20 6c 69 73 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a   list */.};../*.
13890 2a 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65  ** Allowed value
138a0 73 20 66 6f 72 20 54 61 62 6c 65 2e 74 61 62 46  s for Table.tabF
138b0 6c 61 67 73 2e 0a 2a 2a 0a 2a 2a 20 54 46 5f 4f  lags..**.** TF_O
138c0 4f 4f 48 69 64 64 65 6e 20 61 70 70 6c 69 65 73  OOHidden applies
138d0 20 74 6f 20 74 61 62 6c 65 73 20 6f 72 20 76 69   to tables or vi
138e0 65 77 20 74 68 61 74 20 68 61 76 65 20 68 69 64  ew that have hid
138f0 64 65 6e 20 63 6f 6c 75 6d 6e 73 20 74 68 61 74  den columns that
13900 20 61 72 65 0a 2a 2a 20 66 6f 6c 6c 6f 77 65 64   are.** followed
13910 20 62 79 20 6e 6f 6e 2d 68 69 64 64 65 6e 20 63   by non-hidden c
13920 6f 6c 75 6d 6e 73 2e 20 20 45 78 61 6d 70 6c 65  olumns.  Example
13930 3a 20 20 22 43 52 45 41 54 45 20 56 49 52 54 55  :  "CREATE VIRTU
13940 41 4c 20 54 41 42 4c 45 20 78 20 55 53 49 4e 47  AL TABLE x USING
13950 0a 2a 2a 20 76 74 61 62 31 28 61 20 48 49 44 44  .** vtab1(a HIDD
13960 45 4e 2c 20 62 29 3b 22 2e 20 20 53 69 6e 63 65  EN, b);".  Since
13970 20 22 62 22 20 69 73 20 61 20 6e 6f 6e 2d 68 69   "b" is a non-hi
13980 64 64 65 6e 20 63 6f 6c 75 6d 6e 20 62 75 74 20  dden column but 
13990 22 61 22 20 69 73 20 68 69 64 64 65 6e 2c 0a 2a  "a" is hidden,.*
139a0 2a 20 74 68 65 20 54 46 5f 4f 4f 4f 48 69 64 64  * the TF_OOOHidd
139b0 65 6e 20 61 74 74 72 69 62 75 74 65 20 77 6f 75  en attribute wou
139c0 6c 64 20 61 70 70 6c 79 20 69 6e 20 74 68 69 73  ld apply in this
139d0 20 63 61 73 65 2e 20 20 53 75 63 68 20 74 61 62   case.  Such tab
139e0 6c 65 73 20 72 65 71 75 69 72 65 0a 2a 2a 20 73  les require.** s
139f0 70 65 63 69 61 6c 20 68 61 6e 64 6c 69 6e 67 20  pecial handling 
13a00 64 75 72 69 6e 67 20 49 4e 53 45 52 54 20 70 72  during INSERT pr
13a10 6f 63 65 73 73 69 6e 67 2e 0a 2a 2f 0a 23 64 65  ocessing..*/.#de
13a20 66 69 6e 65 20 54 46 5f 52 65 61 64 6f 6e 6c 79  fine TF_Readonly
13a30 20 20 20 20 20 20 20 20 30 78 30 30 30 31 20 20          0x0001  
13a40 20 20 2f 2a 20 52 65 61 64 2d 6f 6e 6c 79 20 73    /* Read-only s
13a50 79 73 74 65 6d 20 74 61 62 6c 65 20 2a 2f 0a 23  ystem table */.#
13a60 64 65 66 69 6e 65 20 54 46 5f 45 70 68 65 6d 65  define TF_Epheme
13a70 72 61 6c 20 20 20 20 20 20 20 30 78 30 30 30 32  ral       0x0002
13a80 20 20 20 20 2f 2a 20 41 6e 20 65 70 68 65 6d 65      /* An epheme
13a90 72 61 6c 20 74 61 62 6c 65 20 2a 2f 0a 23 64 65  ral table */.#de
13aa0 66 69 6e 65 20 54 46 5f 48 61 73 50 72 69 6d 61  fine TF_HasPrima
13ab0 72 79 4b 65 79 20 20 20 30 78 30 30 30 34 20 20  ryKey   0x0004  
13ac0 20 20 2f 2a 20 54 61 62 6c 65 20 68 61 73 20 61    /* Table has a
13ad0 20 70 72 69 6d 61 72 79 20 6b 65 79 20 2a 2f 0a   primary key */.
13ae0 23 64 65 66 69 6e 65 20 54 46 5f 41 75 74 6f 69  #define TF_Autoi
13af0 6e 63 72 65 6d 65 6e 74 20 20 20 30 78 30 30 30  ncrement   0x000
13b00 38 20 20 20 20 2f 2a 20 49 6e 74 65 67 65 72 20  8    /* Integer 
13b10 70 72 69 6d 61 72 79 20 6b 65 79 20 69 73 20 61  primary key is a
13b20 75 74 6f 69 6e 63 72 65 6d 65 6e 74 20 2a 2f 0a  utoincrement */.
13b30 23 64 65 66 69 6e 65 20 54 46 5f 48 61 73 53 74  #define TF_HasSt
13b40 61 74 31 20 20 20 20 20 20 20 20 30 78 30 30 31  at1        0x001
13b50 30 20 20 20 20 2f 2a 20 6e 52 6f 77 4c 6f 67 45  0    /* nRowLogE
13b60 73 74 20 73 65 74 20 66 72 6f 6d 20 73 71 6c 69  st set from sqli
13b70 74 65 5f 73 74 61 74 31 20 2a 2f 0a 23 64 65 66  te_stat1 */.#def
13b80 69 6e 65 20 54 46 5f 57 69 74 68 6f 75 74 52 6f  ine TF_WithoutRo
13b90 77 69 64 20 20 20 20 30 78 30 30 32 30 20 20 20  wid    0x0020   
13ba0 20 2f 2a 20 4e 6f 20 72 6f 77 69 64 2e 20 20 50   /* No rowid.  P
13bb0 52 49 4d 41 52 59 20 4b 45 59 20 69 73 20 74 68  RIMARY KEY is th
13bc0 65 20 6b 65 79 20 2a 2f 0a 23 64 65 66 69 6e 65  e key */.#define
13bd0 20 54 46 5f 4e 6f 56 69 73 69 62 6c 65 52 6f 77   TF_NoVisibleRow
13be0 69 64 20 20 30 78 30 30 34 30 20 20 20 20 2f 2a  id  0x0040    /*
13bf0 20 4e 6f 20 75 73 65 72 2d 76 69 73 69 62 6c 65   No user-visible
13c00 20 22 72 6f 77 69 64 22 20 63 6f 6c 75 6d 6e 20   "rowid" column 
13c10 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 4f 4f  */.#define TF_OO
13c20 4f 48 69 64 64 65 6e 20 20 20 20 20 20 20 30 78  OHidden       0x
13c30 30 30 38 30 20 20 20 20 2f 2a 20 4f 75 74 2d 6f  0080    /* Out-o
13c40 66 2d 4f 72 64 65 72 20 68 69 64 64 65 6e 20 63  f-Order hidden c
13c50 6f 6c 75 6d 6e 73 20 2a 2f 0a 23 64 65 66 69 6e  olumns */.#defin
13c60 65 20 54 46 5f 53 74 61 74 73 55 73 65 64 20 20  e TF_StatsUsed  
13c70 20 20 20 20 20 30 78 30 31 30 30 20 20 20 20 2f       0x0100    /
13c80 2a 20 51 75 65 72 79 20 70 6c 61 6e 6e 65 72 20  * Query planner 
13c90 64 65 63 69 73 69 6f 6e 73 20 61 66 66 65 63 74  decisions affect
13ca0 65 64 20 62 79 0a 20 20 20 20 20 20 20 20 20 20  ed by.          
13cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13cc0 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 49 6e             ** In
13cd0 64 65 78 2e 61 69 52 6f 77 4c 6f 67 45 73 74 5b  dex.aiRowLogEst[
13ce0 5d 20 76 61 6c 75 65 73 20 2a 2f 0a 23 64 65 66  ] values */.#def
13cf0 69 6e 65 20 54 46 5f 48 61 73 4e 6f 74 4e 75 6c  ine TF_HasNotNul
13d00 6c 20 20 20 20 20 20 30 78 30 32 30 30 20 20 20  l      0x0200   
13d10 20 2f 2a 20 43 6f 6e 74 61 69 6e 73 20 4e 4f 54   /* Contains NOT
13d20 20 4e 55 4c 4c 20 63 6f 6e 73 74 72 61 69 6e 74   NULL constraint
13d30 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f  s */.#define TF_
13d40 53 68 61 64 6f 77 20 20 20 20 20 20 20 20 20 20  Shadow          
13d50 30 78 30 34 30 30 20 20 20 20 2f 2a 20 54 72 75  0x0400    /* Tru
13d60 65 20 66 6f 72 20 61 20 73 68 61 64 6f 77 20 74  e for a shadow t
13d70 61 62 6c 65 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54  able */../*.** T
13d80 65 73 74 20 74 6f 20 73 65 65 20 77 68 65 74 68  est to see wheth
13d90 65 72 20 6f 72 20 6e 6f 74 20 61 20 74 61 62 6c  er or not a tabl
13da0 65 20 69 73 20 61 20 76 69 72 74 75 61 6c 20 74  e is a virtual t
13db0 61 62 6c 65 2e 20 20 54 68 69 73 20 69 73 0a 2a  able.  This is.*
13dc0 2a 20 64 6f 6e 65 20 61 73 20 61 20 6d 61 63 72  * done as a macr
13dd0 6f 20 73 6f 20 74 68 61 74 20 69 74 20 77 69 6c  o so that it wil
13de0 6c 20 62 65 20 6f 70 74 69 6d 69 7a 65 64 20 6f  l be optimized o
13df0 75 74 20 77 68 65 6e 20 76 69 72 74 75 61 6c 0a  ut when virtual.
13e00 2a 2a 20 74 61 62 6c 65 20 73 75 70 70 6f 72 74  ** table support
13e10 20 69 73 20 6f 6d 69 74 74 65 64 20 66 72 6f 6d   is omitted from
13e20 20 74 68 65 20 62 75 69 6c 64 2e 0a 2a 2f 0a 23   the build..*/.#
13e30 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
13e40 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a  IT_VIRTUALTABLE.
13e50 23 20 20 64 65 66 69 6e 65 20 49 73 56 69 72 74  #  define IsVirt
13e60 75 61 6c 28 58 29 20 20 20 20 20 20 28 28 58 29  ual(X)      ((X)
13e70 2d 3e 6e 4d 6f 64 75 6c 65 41 72 67 29 0a 23 65  ->nModuleArg).#e
13e80 6c 73 65 0a 23 20 20 64 65 66 69 6e 65 20 49 73  lse.#  define Is
13e90 56 69 72 74 75 61 6c 28 58 29 20 20 20 20 20 20  Virtual(X)      
13ea0 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  0.#endif../*.** 
13eb0 4d 61 63 72 6f 73 20 74 6f 20 64 65 74 65 72 6d  Macros to determ
13ec0 69 6e 65 20 69 66 20 61 20 63 6f 6c 75 6d 6e 20  ine if a column 
13ed0 69 73 20 68 69 64 64 65 6e 2e 20 20 49 73 4f 72  is hidden.  IsOr
13ee0 64 69 6e 61 72 79 48 69 64 64 65 6e 43 6f 6c 75  dinaryHiddenColu
13ef0 6d 6e 28 29 0a 2a 2a 20 6f 6e 6c 79 20 77 6f 72  mn().** only wor
13f00 6b 73 20 66 6f 72 20 6e 6f 6e 2d 76 69 72 74 75  ks for non-virtu
13f10 61 6c 20 74 61 62 6c 65 73 20 28 6f 72 64 69 6e  al tables (ordin
13f20 61 72 79 20 74 61 62 6c 65 73 20 61 6e 64 20 76  ary tables and v
13f30 69 65 77 73 29 20 61 6e 64 20 69 73 0a 2a 2a 20  iews) and is.** 
13f40 61 6c 77 61 79 73 20 66 61 6c 73 65 20 75 6e 6c  always false unl
13f50 65 73 73 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  ess SQLITE_ENABL
13f60 45 5f 48 49 44 44 45 4e 5f 43 4f 4c 55 4d 4e 53  E_HIDDEN_COLUMNS
13f70 20 69 73 20 64 65 66 69 6e 65 64 2e 20 20 54 68   is defined.  Th
13f80 65 0a 2a 2a 20 49 73 48 69 64 64 65 6e 43 6f 6c  e.** IsHiddenCol
13f90 75 6d 6e 28 29 20 6d 61 63 72 6f 20 69 73 20 67  umn() macro is g
13fa0 65 6e 65 72 61 6c 20 70 75 72 70 6f 73 65 2e 0a  eneral purpose..
13fb0 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53  */.#if defined(S
13fc0 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 48 49 44  QLITE_ENABLE_HID
13fd0 44 45 4e 5f 43 4f 4c 55 4d 4e 53 29 0a 23 20 20  DEN_COLUMNS).#  
13fe0 64 65 66 69 6e 65 20 49 73 48 69 64 64 65 6e 43  define IsHiddenC
13ff0 6f 6c 75 6d 6e 28 58 29 20 20 20 20 20 20 20 20  olumn(X)        
14000 20 28 28 28 58 29 2d 3e 63 6f 6c 46 6c 61 67 73   (((X)->colFlags
14010 20 26 20 43 4f 4c 46 4c 41 47 5f 48 49 44 44 45   & COLFLAG_HIDDE
14020 4e 29 21 3d 30 29 0a 23 20 20 64 65 66 69 6e 65  N)!=0).#  define
14030 20 49 73 4f 72 64 69 6e 61 72 79 48 69 64 64 65   IsOrdinaryHidde
14040 6e 43 6f 6c 75 6d 6e 28 58 29 20 28 28 28 58 29  nColumn(X) (((X)
14050 2d 3e 63 6f 6c 46 6c 61 67 73 20 26 20 43 4f 4c  ->colFlags & COL
14060 46 4c 41 47 5f 48 49 44 44 45 4e 29 21 3d 30 29  FLAG_HIDDEN)!=0)
14070 0a 23 65 6c 69 66 20 21 64 65 66 69 6e 65 64 28  .#elif !defined(
14080 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
14090 55 41 4c 54 41 42 4c 45 29 0a 23 20 20 64 65 66  UALTABLE).#  def
140a0 69 6e 65 20 49 73 48 69 64 64 65 6e 43 6f 6c 75  ine IsHiddenColu
140b0 6d 6e 28 58 29 20 20 20 20 20 20 20 20 20 28 28  mn(X)         ((
140c0 28 58 29 2d 3e 63 6f 6c 46 6c 61 67 73 20 26 20  (X)->colFlags & 
140d0 43 4f 4c 46 4c 41 47 5f 48 49 44 44 45 4e 29 21  COLFLAG_HIDDEN)!
140e0 3d 30 29 0a 23 20 20 64 65 66 69 6e 65 20 49 73  =0).#  define Is
140f0 4f 72 64 69 6e 61 72 79 48 69 64 64 65 6e 43 6f  OrdinaryHiddenCo
14100 6c 75 6d 6e 28 58 29 20 30 0a 23 65 6c 73 65 0a  lumn(X) 0.#else.
14110 23 20 20 64 65 66 69 6e 65 20 49 73 48 69 64 64  #  define IsHidd
14120 65 6e 43 6f 6c 75 6d 6e 28 58 29 20 20 20 20 20  enColumn(X)     
14130 20 20 20 20 30 0a 23 20 20 64 65 66 69 6e 65 20      0.#  define 
14140 49 73 4f 72 64 69 6e 61 72 79 48 69 64 64 65 6e  IsOrdinaryHidden
14150 43 6f 6c 75 6d 6e 28 58 29 20 30 0a 23 65 6e 64  Column(X) 0.#end
14160 69 66 0a 0a 0a 2f 2a 20 44 6f 65 73 20 74 68 65  if.../* Does the
14170 20 74 61 62 6c 65 20 68 61 76 65 20 61 20 72 6f   table have a ro
14180 77 69 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 48  wid */.#define H
14190 61 73 52 6f 77 69 64 28 58 29 20 20 20 20 20 28  asRowid(X)     (
141a0 28 28 58 29 2d 3e 74 61 62 46 6c 61 67 73 20 26  ((X)->tabFlags &
141b0 20 54 46 5f 57 69 74 68 6f 75 74 52 6f 77 69 64   TF_WithoutRowid
141c0 29 3d 3d 30 29 0a 23 64 65 66 69 6e 65 20 56 69  )==0).#define Vi
141d0 73 69 62 6c 65 52 6f 77 69 64 28 58 29 20 28 28  sibleRowid(X) ((
141e0 28 58 29 2d 3e 74 61 62 46 6c 61 67 73 20 26 20  (X)->tabFlags & 
141f0 54 46 5f 4e 6f 56 69 73 69 62 6c 65 52 6f 77 69  TF_NoVisibleRowi
14200 64 29 3d 3d 30 29 0a 0a 2f 2a 0a 2a 2a 20 45 61  d)==0)../*.** Ea
14210 63 68 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 63  ch foreign key c
14220 6f 6e 73 74 72 61 69 6e 74 20 69 73 20 61 6e 20  onstraint is an 
14230 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20  instance of the 
14240 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74  following struct
14250 75 72 65 2e 0a 2a 2a 0a 2a 2a 20 41 20 66 6f 72  ure..**.** A for
14260 65 69 67 6e 20 6b 65 79 20 69 73 20 61 73 73 6f  eign key is asso
14270 63 69 61 74 65 64 20 77 69 74 68 20 74 77 6f 20  ciated with two 
14280 74 61 62 6c 65 73 2e 20 20 54 68 65 20 22 66 72  tables.  The "fr
14290 6f 6d 22 20 74 61 62 6c 65 20 69 73 0a 2a 2a 20  om" table is.** 
142a0 74 68 65 20 74 61 62 6c 65 20 74 68 61 74 20 63  the table that c
142b0 6f 6e 74 61 69 6e 73 20 74 68 65 20 52 45 46 45  ontains the REFE
142c0 52 45 4e 43 45 53 20 63 6c 61 75 73 65 20 74 68  RENCES clause th
142d0 61 74 20 63 72 65 61 74 65 73 20 74 68 65 20 66  at creates the f
142e0 6f 72 65 69 67 6e 0a 2a 2a 20 6b 65 79 2e 20 20  oreign.** key.  
142f0 54 68 65 20 22 74 6f 22 20 74 61 62 6c 65 20 69  The "to" table i
14300 73 20 74 68 65 20 74 61 62 6c 65 20 74 68 61 74  s the table that
14310 20 69 73 20 6e 61 6d 65 64 20 69 6e 20 74 68 65   is named in the
14320 20 52 45 46 45 52 45 4e 43 45 53 20 63 6c 61 75   REFERENCES clau
14330 73 65 2e 0a 2a 2a 20 43 6f 6e 73 69 64 65 72 20  se..** Consider 
14340 74 68 69 73 20 65 78 61 6d 70 6c 65 3a 0a 2a 2a  this example:.**
14350 0a 2a 2a 20 20 20 20 20 43 52 45 41 54 45 20 54  .**     CREATE T
14360 41 42 4c 45 20 65 78 31 28 0a 2a 2a 20 20 20 20  ABLE ex1(.**    
14370 20 20 20 61 20 49 4e 54 45 47 45 52 20 50 52 49     a INTEGER PRI
14380 4d 41 52 59 20 4b 45 59 2c 0a 2a 2a 20 20 20 20  MARY KEY,.**    
14390 20 20 20 62 20 49 4e 54 45 47 45 52 20 43 4f 4e     b INTEGER CON
143a0 53 54 52 41 49 4e 54 20 66 6b 31 20 52 45 46 45  STRAINT fk1 REFE
143b0 52 45 4e 43 45 53 20 65 78 32 28 78 29 0a 2a 2a  RENCES ex2(x).**
143c0 20 20 20 20 20 29 3b 0a 2a 2a 0a 2a 2a 20 46 6f       );.**.** Fo
143d0 72 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 22 66  r foreign key "f
143e0 6b 31 22 2c 20 74 68 65 20 66 72 6f 6d 2d 74 61  k1", the from-ta
143f0 62 6c 65 20 69 73 20 22 65 78 31 22 20 61 6e 64  ble is "ex1" and
14400 20 74 68 65 20 74 6f 2d 74 61 62 6c 65 20 69 73   the to-table is
14410 20 22 65 78 32 22 2e 0a 2a 2a 20 45 71 75 69 76   "ex2"..** Equiv
14420 61 6c 65 6e 74 20 6e 61 6d 65 73 3a 0a 2a 2a 0a  alent names:.**.
14430 2a 2a 20 20 20 20 20 66 72 6f 6d 2d 74 61 62 6c  **     from-tabl
14440 65 20 3d 3d 20 63 68 69 6c 64 2d 74 61 62 6c 65  e == child-table
14450 0a 2a 2a 20 20 20 20 20 20 20 74 6f 2d 74 61 62  .**       to-tab
14460 6c 65 20 3d 3d 20 70 61 72 65 6e 74 2d 74 61 62  le == parent-tab
14470 6c 65 0a 2a 2a 0a 2a 2a 20 45 61 63 68 20 52 45  le.**.** Each RE
14480 46 45 52 45 4e 43 45 53 20 63 6c 61 75 73 65 20  FERENCES clause 
14490 67 65 6e 65 72 61 74 65 73 20 61 6e 20 69 6e 73  generates an ins
144a0 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c  tance of the fol
144b0 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65  lowing structure
144c0 0a 2a 2a 20 77 68 69 63 68 20 69 73 20 61 74 74  .** which is att
144d0 61 63 68 65 64 20 74 6f 20 74 68 65 20 66 72 6f  ached to the fro
144e0 6d 2d 74 61 62 6c 65 2e 20 20 54 68 65 20 74 6f  m-table.  The to
144f0 2d 74 61 62 6c 65 20 6e 65 65 64 20 6e 6f 74 20  -table need not 
14500 65 78 69 73 74 20 77 68 65 6e 0a 2a 2a 20 74 68  exist when.** th
14510 65 20 66 72 6f 6d 2d 74 61 62 6c 65 20 69 73 20  e from-table is 
14520 63 72 65 61 74 65 64 2e 20 20 54 68 65 20 65 78  created.  The ex
14530 69 73 74 65 6e 63 65 20 6f 66 20 74 68 65 20 74  istence of the t
14540 6f 2d 74 61 62 6c 65 20 69 73 20 6e 6f 74 20 63  o-table is not c
14550 68 65 63 6b 65 64 2e 0a 2a 2a 0a 2a 2a 20 54 68  hecked..**.** Th
14560 65 20 6c 69 73 74 20 6f 66 20 61 6c 6c 20 70 61  e list of all pa
14570 72 65 6e 74 73 20 66 6f 72 20 63 68 69 6c 64 20  rents for child 
14580 54 61 62 6c 65 20 58 20 69 73 20 68 65 6c 64 20  Table X is held 
14590 61 74 20 58 2e 70 46 4b 65 79 2e 0a 2a 2a 0a 2a  at X.pFKey..**.*
145a0 2a 20 41 20 6c 69 73 74 20 6f 66 20 61 6c 6c 20  * A list of all 
145b0 63 68 69 6c 64 72 65 6e 20 66 6f 72 20 61 20 74  children for a t
145c0 61 62 6c 65 20 6e 61 6d 65 64 20 5a 20 28 77 68  able named Z (wh
145d0 69 63 68 20 6d 69 67 68 74 20 6e 6f 74 20 65 76  ich might not ev
145e0 65 6e 20 65 78 69 73 74 29 0a 2a 2a 20 69 73 20  en exist).** is 
145f0 68 65 6c 64 20 69 6e 20 53 63 68 65 6d 61 2e 66  held in Schema.f
14600 6b 65 79 48 61 73 68 20 77 69 74 68 20 61 20 68  keyHash with a h
14610 61 73 68 20 6b 65 79 20 6f 66 20 5a 2e 0a 2a 2f  ash key of Z..*/
14620 0a 73 74 72 75 63 74 20 46 4b 65 79 20 7b 0a 20  .struct FKey {. 
14630 20 54 61 62 6c 65 20 2a 70 46 72 6f 6d 3b 20 20   Table *pFrom;  
14640 20 20 20 2f 2a 20 54 61 62 6c 65 20 63 6f 6e 74     /* Table cont
14650 61 69 6e 69 6e 67 20 74 68 65 20 52 45 46 45 52  aining the REFER
14660 45 4e 43 45 53 20 63 6c 61 75 73 65 20 28 61 6b  ENCES clause (ak
14670 61 3a 20 43 68 69 6c 64 29 20 2a 2f 0a 20 20 46  a: Child) */.  F
14680 4b 65 79 20 2a 70 4e 65 78 74 46 72 6f 6d 3b 20  Key *pNextFrom; 
14690 20 2f 2a 20 4e 65 78 74 20 46 4b 65 79 20 77 69   /* Next FKey wi
146a0 74 68 20 74 68 65 20 73 61 6d 65 20 69 6e 20 70  th the same in p
146b0 46 72 6f 6d 2e 20 4e 65 78 74 20 70 61 72 65 6e  From. Next paren
146c0 74 20 6f 66 20 70 46 72 6f 6d 20 2a 2f 0a 20 20  t of pFrom */.  
146d0 63 68 61 72 20 2a 7a 54 6f 3b 20 20 20 20 20 20  char *zTo;      
146e0 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 61 62    /* Name of tab
146f0 6c 65 20 74 68 61 74 20 74 68 65 20 6b 65 79 20  le that the key 
14700 70 6f 69 6e 74 73 20 74 6f 20 28 61 6b 61 3a 20  points to (aka: 
14710 50 61 72 65 6e 74 29 20 2a 2f 0a 20 20 46 4b 65  Parent) */.  FKe
14720 79 20 2a 70 4e 65 78 74 54 6f 3b 20 20 20 20 2f  y *pNextTo;    /
14730 2a 20 4e 65 78 74 20 77 69 74 68 20 74 68 65 20  * Next with the 
14740 73 61 6d 65 20 7a 54 6f 2e 20 4e 65 78 74 20 63  same zTo. Next c
14750 68 69 6c 64 20 6f 66 20 7a 54 6f 2e 20 2a 2f 0a  hild of zTo. */.
14760 20 20 46 4b 65 79 20 2a 70 50 72 65 76 54 6f 3b    FKey *pPrevTo;
14770 20 20 20 20 2f 2a 20 50 72 65 76 69 6f 75 73 20      /* Previous 
14780 77 69 74 68 20 74 68 65 20 73 61 6d 65 20 7a 54  with the same zT
14790 6f 20 2a 2f 0a 20 20 69 6e 74 20 6e 43 6f 6c 3b  o */.  int nCol;
147a0 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
147b0 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e  er of columns in
147c0 20 74 68 69 73 20 6b 65 79 20 2a 2f 0a 20 20 2f   this key */.  /
147d0 2a 20 45 56 3a 20 52 2d 33 30 33 32 33 2d 32 31  * EV: R-30323-21
147e0 39 31 37 20 2a 2f 0a 20 20 75 38 20 69 73 44 65  917 */.  u8 isDe
147f0 66 65 72 72 65 64 3b 20 20 20 20 20 20 20 2f 2a  ferred;       /*
14800 20 54 72 75 65 20 69 66 20 63 6f 6e 73 74 72 61   True if constra
14810 69 6e 74 20 63 68 65 63 6b 69 6e 67 20 69 73 20  int checking is 
14820 64 65 66 65 72 72 65 64 20 74 69 6c 6c 20 43 4f  deferred till CO
14830 4d 4d 49 54 20 2a 2f 0a 20 20 75 38 20 61 41 63  MMIT */.  u8 aAc
14840 74 69 6f 6e 5b 32 5d 3b 20 20 20 20 20 20 20 20  tion[2];        
14850 2f 2a 20 4f 4e 20 44 45 4c 45 54 45 20 61 6e 64  /* ON DELETE and
14860 20 4f 4e 20 55 50 44 41 54 45 20 61 63 74 69 6f   ON UPDATE actio
14870 6e 73 2c 20 72 65 73 70 65 63 74 69 76 65 6c 79  ns, respectively
14880 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 20 2a 61   */.  Trigger *a
14890 70 54 72 69 67 67 65 72 5b 32 5d 3b 2f 2a 20 54  pTrigger[2];/* T
148a0 72 69 67 67 65 72 73 20 66 6f 72 20 61 41 63 74  riggers for aAct
148b0 69 6f 6e 5b 5d 20 61 63 74 69 6f 6e 73 20 2a 2f  ion[] actions */
148c0 0a 20 20 73 74 72 75 63 74 20 73 43 6f 6c 4d 61  .  struct sColMa
148d0 70 20 7b 20 20 20 20 20 20 2f 2a 20 4d 61 70 70  p {      /* Mapp
148e0 69 6e 67 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69  ing of columns i
148f0 6e 20 70 46 72 6f 6d 20 74 6f 20 63 6f 6c 75 6d  n pFrom to colum
14900 6e 73 20 69 6e 20 7a 54 6f 20 2a 2f 0a 20 20 20  ns in zTo */.   
14910 20 69 6e 74 20 69 46 72 6f 6d 3b 20 20 20 20 20   int iFrom;     
14920 20 20 20 20 20 20 20 2f 2a 20 49 6e 64 65 78 20         /* Index 
14930 6f 66 20 63 6f 6c 75 6d 6e 20 69 6e 20 70 46 72  of column in pFr
14940 6f 6d 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a  om */.    char *
14950 7a 43 6f 6c 3b 20 20 20 20 20 20 20 20 20 20 20  zCol;           
14960 2f 2a 20 4e 61 6d 65 20 6f 66 20 63 6f 6c 75 6d  /* Name of colum
14970 6e 20 69 6e 20 7a 54 6f 2e 20 20 49 66 20 4e 55  n in zTo.  If NU
14980 4c 4c 20 75 73 65 20 50 52 49 4d 41 52 59 20 4b  LL use PRIMARY K
14990 45 59 20 2a 2f 0a 20 20 7d 20 61 43 6f 6c 5b 31  EY */.  } aCol[1
149a0 5d 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ];            /*
149b0 20 4f 6e 65 20 65 6e 74 72 79 20 66 6f 72 20 65   One entry for e
149c0 61 63 68 20 6f 66 20 6e 43 6f 6c 20 63 6f 6c 75  ach of nCol colu
149d0 6d 6e 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  mns */.};../*.**
149e0 20 53 51 4c 69 74 65 20 73 75 70 70 6f 72 74 73   SQLite supports
149f0 20 6d 61 6e 79 20 64 69 66 66 65 72 65 6e 74 20   many different 
14a00 77 61 79 73 20 74 6f 20 72 65 73 6f 6c 76 65 20  ways to resolve 
14a10 61 20 63 6f 6e 73 74 72 61 69 6e 74 0a 2a 2a 20  a constraint.** 
14a20 65 72 72 6f 72 2e 20 20 52 4f 4c 4c 42 41 43 4b  error.  ROLLBACK
14a30 20 70 72 6f 63 65 73 73 69 6e 67 20 6d 65 61 6e   processing mean
14a40 73 20 74 68 61 74 20 61 20 63 6f 6e 73 74 72 61  s that a constra
14a50 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 0a 2a 2a  int violation.**
14a60 20 63 61 75 73 65 73 20 74 68 65 20 6f 70 65 72   causes the oper
14a70 61 74 69 6f 6e 20 69 6e 20 70 72 6f 63 65 73 73  ation in process
14a80 20 74 6f 20 66 61 69 6c 20 61 6e 64 20 66 6f 72   to fail and for
14a90 20 74 68 65 20 63 75 72 72 65 6e 74 20 74 72 61   the current tra
14aa0 6e 73 61 63 74 69 6f 6e 0a 2a 2a 20 74 6f 20 62  nsaction.** to b
14ab0 65 20 72 6f 6c 6c 65 64 20 62 61 63 6b 2e 20 20  e rolled back.  
14ac0 41 42 4f 52 54 20 70 72 6f 63 65 73 73 69 6e 67  ABORT processing
14ad0 20 6d 65 61 6e 73 20 74 68 65 20 6f 70 65 72 61   means the opera
14ae0 74 69 6f 6e 20 69 6e 20 70 72 6f 63 65 73 73 0a  tion in process.
14af0 2a 2a 20 66 61 69 6c 73 20 61 6e 64 20 61 6e 79  ** fails and any
14b00 20 70 72 69 6f 72 20 63 68 61 6e 67 65 73 20 66   prior changes f
14b10 72 6f 6d 20 74 68 61 74 20 6f 6e 65 20 6f 70 65  rom that one ope
14b20 72 61 74 69 6f 6e 20 61 72 65 20 62 61 63 6b 65  ration are backe
14b30 64 20 6f 75 74 2c 0a 2a 2a 20 62 75 74 20 74 68  d out,.** but th
14b40 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73  e transaction is
14b50 20 6e 6f 74 20 72 6f 6c 6c 65 64 20 62 61 63 6b   not rolled back
14b60 2e 20 20 46 41 49 4c 20 70 72 6f 63 65 73 73 69  .  FAIL processi
14b70 6e 67 20 6d 65 61 6e 73 20 74 68 61 74 0a 2a 2a  ng means that.**
14b80 20 74 68 65 20 6f 70 65 72 61 74 69 6f 6e 20 69   the operation i
14b90 6e 20 70 72 6f 67 72 65 73 73 20 73 74 6f 70 73  n progress stops
14ba0 20 61 6e 64 20 72 65 74 75 72 6e 73 20 61 6e 20   and returns an 
14bb0 65 72 72 6f 72 20 63 6f 64 65 2e 20 20 42 75 74  error code.  But
14bc0 20 70 72 69 6f 72 0a 2a 2a 20 63 68 61 6e 67 65   prior.** change
14bd0 73 20 64 75 65 20 74 6f 20 74 68 65 20 73 61 6d  s due to the sam
14be0 65 20 6f 70 65 72 61 74 69 6f 6e 20 61 72 65 20  e operation are 
14bf0 6e 6f 74 20 62 61 63 6b 65 64 20 6f 75 74 20 61  not backed out a
14c00 6e 64 20 6e 6f 20 72 6f 6c 6c 62 61 63 6b 0a 2a  nd no rollback.*
14c10 2a 20 6f 63 63 75 72 73 2e 20 20 49 47 4e 4f 52  * occurs.  IGNOR
14c20 45 20 6d 65 61 6e 73 20 74 68 61 74 20 74 68 65  E means that the
14c30 20 70 61 72 74 69 63 75 6c 61 72 20 72 6f 77 20   particular row 
14c40 74 68 61 74 20 63 61 75 73 65 64 20 74 68 65 20  that caused the 
14c50 63 6f 6e 73 74 72 61 69 6e 74 0a 2a 2a 20 65 72  constraint.** er
14c60 72 6f 72 20 69 73 20 6e 6f 74 20 69 6e 73 65 72  ror is not inser
14c70 74 65 64 20 6f 72 20 75 70 64 61 74 65 64 2e 20  ted or updated. 
14c80 20 50 72 6f 63 65 73 73 69 6e 67 20 63 6f 6e 74   Processing cont
14c90 69 6e 75 65 73 20 61 6e 64 20 6e 6f 20 65 72 72  inues and no err
14ca0 6f 72 0a 2a 2a 20 69 73 20 72 65 74 75 72 6e 65  or.** is returne
14cb0 64 2e 20 20 52 45 50 4c 41 43 45 20 6d 65 61 6e  d.  REPLACE mean
14cc0 73 20 74 68 61 74 20 70 72 65 65 78 69 73 74 69  s that preexisti
14cd0 6e 67 20 64 61 74 61 62 61 73 65 20 72 6f 77 73  ng database rows
14ce0 20 74 68 61 74 20 63 61 75 73 65 64 0a 2a 2a 20   that caused.** 
14cf0 61 20 55 4e 49 51 55 45 20 63 6f 6e 73 74 72 61  a UNIQUE constra
14d00 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 20 61 72  int violation ar
14d10 65 20 72 65 6d 6f 76 65 64 20 73 6f 20 74 68 61  e removed so tha
14d20 74 20 74 68 65 20 6e 65 77 20 69 6e 73 65 72 74  t the new insert
14d30 20 6f 72 0a 2a 2a 20 75 70 64 61 74 65 20 63 61   or.** update ca
14d40 6e 20 70 72 6f 63 65 65 64 2e 20 20 50 72 6f 63  n proceed.  Proc
14d50 65 73 73 69 6e 67 20 63 6f 6e 74 69 6e 75 65 73  essing continues
14d60 20 61 6e 64 20 6e 6f 20 65 72 72 6f 72 20 69 73   and no error is
14d70 20 72 65 70 6f 72 74 65 64 2e 0a 2a 2a 0a 2a 2a   reported..**.**
14d80 20 52 45 53 54 52 49 43 54 2c 20 53 45 54 4e 55   RESTRICT, SETNU
14d90 4c 4c 2c 20 61 6e 64 20 43 41 53 43 41 44 45 20  LL, and CASCADE 
14da0 61 63 74 69 6f 6e 73 20 61 70 70 6c 79 20 6f 6e  actions apply on
14db0 6c 79 20 74 6f 20 66 6f 72 65 69 67 6e 20 6b 65  ly to foreign ke
14dc0 79 73 2e 0a 2a 2a 20 52 45 53 54 52 49 43 54 20  ys..** RESTRICT 
14dd0 69 73 20 74 68 65 20 73 61 6d 65 20 61 73 20 41  is the same as A
14de0 42 4f 52 54 20 66 6f 72 20 49 4d 4d 45 44 49 41  BORT for IMMEDIA
14df0 54 45 20 66 6f 72 65 69 67 6e 20 6b 65 79 73 20  TE foreign keys 
14e00 61 6e 64 20 74 68 65 0a 2a 2a 20 73 61 6d 65 20  and the.** same 
14e10 61 73 20 52 4f 4c 4c 42 41 43 4b 20 66 6f 72 20  as ROLLBACK for 
14e20 44 45 46 45 52 52 45 44 20 6b 65 79 73 2e 20 20  DEFERRED keys.  
14e30 53 45 54 4e 55 4c 4c 20 6d 65 61 6e 73 20 74 68  SETNULL means th
14e40 61 74 20 74 68 65 20 66 6f 72 65 69 67 6e 0a 2a  at the foreign.*
14e50 2a 20 6b 65 79 20 69 73 20 73 65 74 20 74 6f 20  * key is set to 
14e60 4e 55 4c 4c 2e 20 20 43 41 53 43 41 44 45 20 6d  NULL.  CASCADE m
14e70 65 61 6e 73 20 74 68 61 74 20 61 20 44 45 4c 45  eans that a DELE
14e80 54 45 20 6f 72 20 55 50 44 41 54 45 20 6f 66 20  TE or UPDATE of 
14e90 74 68 65 0a 2a 2a 20 72 65 66 65 72 65 6e 63 65  the.** reference
14ea0 64 20 74 61 62 6c 65 20 72 6f 77 20 69 73 20 70  d table row is p
14eb0 72 6f 70 61 67 61 74 65 64 20 69 6e 74 6f 20 74  ropagated into t
14ec0 68 65 20 72 6f 77 20 74 68 61 74 20 68 6f 6c 64  he row that hold
14ed0 73 20 74 68 65 0a 2a 2a 20 66 6f 72 65 69 67 6e  s the.** foreign
14ee0 20 6b 65 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20   key..**.** The 
14ef0 66 6f 6c 6c 6f 77 69 6e 67 20 73 79 6d 62 6f 6c  following symbol
14f00 69 63 20 76 61 6c 75 65 73 20 61 72 65 20 75 73  ic values are us
14f10 65 64 20 74 6f 20 72 65 63 6f 72 64 20 77 68 69  ed to record whi
14f20 63 68 20 74 79 70 65 0a 2a 2a 20 6f 66 20 61 63  ch type.** of ac
14f30 74 69 6f 6e 20 74 6f 20 74 61 6b 65 2e 0a 2a 2f  tion to take..*/
14f40 0a 23 64 65 66 69 6e 65 20 4f 45 5f 4e 6f 6e 65  .#define OE_None
14f50 20 20 20 20 20 30 20 20 20 2f 2a 20 54 68 65 72       0   /* Ther
14f60 65 20 69 73 20 6e 6f 20 63 6f 6e 73 74 72 61 69  e is no constrai
14f70 6e 74 20 74 6f 20 63 68 65 63 6b 20 2a 2f 0a 23  nt to check */.#
14f80 64 65 66 69 6e 65 20 4f 45 5f 52 6f 6c 6c 62 61  define OE_Rollba
14f90 63 6b 20 31 20 20 20 2f 2a 20 46 61 69 6c 20 74  ck 1   /* Fail t
14fa0 68 65 20 6f 70 65 72 61 74 69 6f 6e 20 61 6e 64  he operation and
14fb0 20 72 6f 6c 6c 62 61 63 6b 20 74 68 65 20 74 72   rollback the tr
14fc0 61 6e 73 61 63 74 69 6f 6e 20 2a 2f 0a 23 64 65  ansaction */.#de
14fd0 66 69 6e 65 20 4f 45 5f 41 62 6f 72 74 20 20 20  fine OE_Abort   
14fe0 20 32 20 20 20 2f 2a 20 42 61 63 6b 20 6f 75 74   2   /* Back out
14ff0 20 63 68 61 6e 67 65 73 20 62 75 74 20 64 6f 20   changes but do 
15000 6e 6f 20 72 6f 6c 6c 62 61 63 6b 20 74 72 61 6e  no rollback tran
15010 73 61 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69  saction */.#defi
15020 6e 65 20 4f 45 5f 46 61 69 6c 20 20 20 20 20 33  ne OE_Fail     3
15030 20 20 20 2f 2a 20 53 74 6f 70 20 74 68 65 20 6f     /* Stop the o
15040 70 65 72 61 74 69 6f 6e 20 62 75 74 20 6c 65 61  peration but lea
15050 76 65 20 61 6c 6c 20 70 72 69 6f 72 20 63 68 61  ve all prior cha
15060 6e 67 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  nges */.#define 
15070 4f 45 5f 49 67 6e 6f 72 65 20 20 20 34 20 20 20  OE_Ignore   4   
15080 2f 2a 20 49 67 6e 6f 72 65 20 74 68 65 20 65 72  /* Ignore the er
15090 72 6f 72 2e 20 44 6f 20 6e 6f 74 20 64 6f 20 74  ror. Do not do t
150a0 68 65 20 49 4e 53 45 52 54 20 6f 72 20 55 50 44  he INSERT or UPD
150b0 41 54 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  ATE */.#define O
150c0 45 5f 52 65 70 6c 61 63 65 20 20 35 20 20 20 2f  E_Replace  5   /
150d0 2a 20 44 65 6c 65 74 65 20 65 78 69 73 74 69 6e  * Delete existin
150e0 67 20 72 65 63 6f 72 64 2c 20 74 68 65 6e 20 64  g record, then d
150f0 6f 20 49 4e 53 45 52 54 20 6f 72 20 55 50 44 41  o INSERT or UPDA
15100 54 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45  TE */.#define OE
15110 5f 55 70 64 61 74 65 20 20 20 36 20 20 20 2f 2a  _Update   6   /*
15120 20 50 72 6f 63 65 73 73 20 61 73 20 61 20 44 4f   Process as a DO
15130 20 55 50 44 41 54 45 20 69 6e 20 61 6e 20 75 70   UPDATE in an up
15140 73 65 72 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20  sert */.#define 
15150 4f 45 5f 52 65 73 74 72 69 63 74 20 37 20 20 20  OE_Restrict 7   
15160 2f 2a 20 4f 45 5f 41 62 6f 72 74 20 66 6f 72 20  /* OE_Abort for 
15170 49 4d 4d 45 44 49 41 54 45 2c 20 4f 45 5f 52 6f  IMMEDIATE, OE_Ro
15180 6c 6c 62 61 63 6b 20 66 6f 72 20 44 45 46 45 52  llback for DEFER
15190 52 45 44 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  RED */.#define O
151a0 45 5f 53 65 74 4e 75 6c 6c 20 20 38 20 20 20 2f  E_SetNull  8   /
151b0 2a 20 53 65 74 20 74 68 65 20 66 6f 72 65 69 67  * Set the foreig
151c0 6e 20 6b 65 79 20 76 61 6c 75 65 20 74 6f 20 4e  n key value to N
151d0 55 4c 4c 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  ULL */.#define O
151e0 45 5f 53 65 74 44 66 6c 74 20 20 39 20 20 20 2f  E_SetDflt  9   /
151f0 2a 20 53 65 74 20 74 68 65 20 66 6f 72 65 69 67  * Set the foreig
15200 6e 20 6b 65 79 20 76 61 6c 75 65 20 74 6f 20 69  n key value to i
15210 74 73 20 64 65 66 61 75 6c 74 20 2a 2f 0a 23 64  ts default */.#d
15220 65 66 69 6e 65 20 4f 45 5f 43 61 73 63 61 64 65  efine OE_Cascade
15230 20 20 31 30 20 20 2f 2a 20 43 61 73 63 61 64 65    10  /* Cascade
15240 20 74 68 65 20 63 68 61 6e 67 65 73 20 2a 2f 0a   the changes */.
15250 23 64 65 66 69 6e 65 20 4f 45 5f 44 65 66 61 75  #define OE_Defau
15260 6c 74 20 20 31 31 20 20 2f 2a 20 44 6f 20 77 68  lt  11  /* Do wh
15270 61 74 65 76 65 72 20 74 68 65 20 64 65 66 61 75  atever the defau
15280 6c 74 20 61 63 74 69 6f 6e 20 69 73 20 2a 2f 0a  lt action is */.
15290 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61  ../*.** An insta
152a0 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f  nce of the follo
152b0 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 20 69  wing structure i
152c0 73 20 70 61 73 73 65 64 20 61 73 20 74 68 65 20  s passed as the 
152d0 66 69 72 73 74 0a 2a 2a 20 61 72 67 75 6d 65 6e  first.** argumen
152e0 74 20 74 6f 20 73 71 6c 69 74 65 33 56 64 62 65  t to sqlite3Vdbe
152f0 4b 65 79 43 6f 6d 70 61 72 65 20 61 6e 64 20 69  KeyCompare and i
15300 73 20 75 73 65 64 20 74 6f 20 63 6f 6e 74 72 6f  s used to contro
15310 6c 20 74 68 65 0a 2a 2a 20 63 6f 6d 70 61 72 69  l the.** compari
15320 73 6f 6e 20 6f 66 20 74 68 65 20 74 77 6f 20 69  son of the two i
15330 6e 64 65 78 20 6b 65 79 73 2e 0a 2a 2a 0a 2a 2a  ndex keys..**.**
15340 20 4e 6f 74 65 20 74 68 61 74 20 61 53 6f 72 74   Note that aSort
15350 4f 72 64 65 72 5b 5d 20 61 6e 64 20 61 43 6f 6c  Order[] and aCol
15360 6c 5b 5d 20 68 61 76 65 20 6e 46 69 65 6c 64 2b  l[] have nField+
15370 31 20 73 6c 6f 74 73 2e 20 20 54 68 65 72 65 0a  1 slots.  There.
15380 2a 2a 20 61 72 65 20 6e 46 69 65 6c 64 20 73 6c  ** are nField sl
15390 6f 74 73 20 66 6f 72 20 74 68 65 20 63 6f 6c 75  ots for the colu
153a0 6d 6e 73 20 6f 66 20 61 6e 20 69 6e 64 65 78 20  mns of an index 
153b0 74 68 65 6e 20 6f 6e 65 20 65 78 74 72 61 20 73  then one extra s
153c0 6c 6f 74 0a 2a 2a 20 66 6f 72 20 74 68 65 20 72  lot.** for the r
153d0 6f 77 69 64 20 61 74 20 74 68 65 20 65 6e 64 2e  owid at the end.
153e0 0a 2a 2f 0a 73 74 72 75 63 74 20 4b 65 79 49 6e  .*/.struct KeyIn
153f0 66 6f 20 7b 0a 20 20 75 33 32 20 6e 52 65 66 3b  fo {.  u32 nRef;
15400 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
15410 6d 62 65 72 20 6f 66 20 72 65 66 65 72 65 6e 63  mber of referenc
15420 65 73 20 74 6f 20 74 68 69 73 20 4b 65 79 49 6e  es to this KeyIn
15430 66 6f 20 6f 62 6a 65 63 74 20 2a 2f 0a 20 20 75  fo object */.  u
15440 38 20 65 6e 63 3b 20 20 20 20 20 20 20 20 20 20  8 enc;          
15450 20 20 20 2f 2a 20 54 65 78 74 20 65 6e 63 6f 64     /* Text encod
15460 69 6e 67 20 2d 20 6f 6e 65 20 6f 66 20 74 68 65  ing - one of the
15470 20 53 51 4c 49 54 45 5f 55 54 46 2a 20 76 61 6c   SQLITE_UTF* val
15480 75 65 73 20 2a 2f 0a 20 20 75 31 36 20 6e 4b 65  ues */.  u16 nKe
15490 79 46 69 65 6c 64 3b 20 20 20 20 20 20 2f 2a 20  yField;      /* 
154a0 4e 75 6d 62 65 72 20 6f 66 20 6b 65 79 20 63 6f  Number of key co
154b0 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 69 6e 64  lumns in the ind
154c0 65 78 20 2a 2f 0a 20 20 75 31 36 20 6e 41 6c 6c  ex */.  u16 nAll
154d0 46 69 65 6c 64 3b 20 20 20 20 20 20 2f 2a 20 54  Field;      /* T
154e0 6f 74 61 6c 20 63 6f 6c 75 6d 6e 73 2c 20 69 6e  otal columns, in
154f0 63 6c 75 64 69 6e 67 20 6b 65 79 20 70 6c 75 73  cluding key plus
15500 20 6f 74 68 65 72 73 20 2a 2f 0a 20 20 73 71 6c   others */.  sql
15510 69 74 65 33 20 2a 64 62 3b 20 20 20 20 20 20 20  ite3 *db;       
15520 20 2f 2a 20 54 68 65 20 64 61 74 61 62 61 73 65   /* The database
15530 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 2a 2f 0a 20   connection */. 
15540 20 75 38 20 2a 61 53 6f 72 74 4f 72 64 65 72 3b   u8 *aSortOrder;
15550 20 20 20 20 20 2f 2a 20 53 6f 72 74 20 6f 72 64       /* Sort ord
15560 65 72 20 66 6f 72 20 65 61 63 68 20 63 6f 6c 75  er for each colu
15570 6d 6e 2e 20 2a 2f 0a 20 20 43 6f 6c 6c 53 65 71  mn. */.  CollSeq
15580 20 2a 61 43 6f 6c 6c 5b 31 5d 3b 20 20 2f 2a 20   *aColl[1];  /* 
15590 43 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e  Collating sequen
155a0 63 65 20 66 6f 72 20 65 61 63 68 20 74 65 72 6d  ce for each term
155b0 20 6f 66 20 74 68 65 20 6b 65 79 20 2a 2f 0a 7d   of the key */.}
155c0 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 6f 62  ;../*.** This ob
155d0 6a 65 63 74 20 68 6f 6c 64 73 20 61 20 72 65 63  ject holds a rec
155e0 6f 72 64 20 77 68 69 63 68 20 68 61 73 20 62 65  ord which has be
155f0 65 6e 20 70 61 72 73 65 64 20 6f 75 74 20 69 6e  en parsed out in
15600 74 6f 20 69 6e 64 69 76 69 64 75 61 6c 0a 2a 2a  to individual.**
15610 20 66 69 65 6c 64 73 2c 20 66 6f 72 20 74 68 65   fields, for the
15620 20 70 75 72 70 6f 73 65 73 20 6f 66 20 64 6f 69   purposes of doi
15630 6e 67 20 61 20 63 6f 6d 70 61 72 69 73 6f 6e 2e  ng a comparison.
15640 0a 2a 2a 0a 2a 2a 20 41 20 72 65 63 6f 72 64 20  .**.** A record 
15650 69 73 20 61 6e 20 6f 62 6a 65 63 74 20 74 68 61  is an object tha
15660 74 20 63 6f 6e 74 61 69 6e 73 20 6f 6e 65 20 6f  t contains one o
15670 72 20 6d 6f 72 65 20 66 69 65 6c 64 73 20 6f 66  r more fields of
15680 20 64 61 74 61 2e 0a 2a 2a 20 52 65 63 6f 72 64   data..** Record
15690 73 20 61 72 65 20 75 73 65 64 20 74 6f 20 73 74  s are used to st
156a0 6f 72 65 20 74 68 65 20 63 6f 6e 74 65 6e 74 20  ore the content 
156b0 6f 66 20 61 20 74 61 62 6c 65 20 72 6f 77 20 61  of a table row a
156c0 6e 64 20 74 6f 20 73 74 6f 72 65 0a 2a 2a 20 74  nd to store.** t
156d0 68 65 20 6b 65 79 20 6f 66 20 61 6e 20 69 6e 64  he key of an ind
156e0 65 78 2e 20 20 41 20 62 6c 6f 62 20 65 6e 63 6f  ex.  A blob enco
156f0 64 69 6e 67 20 6f 66 20 61 20 72 65 63 6f 72 64  ding of a record
15700 20 69 73 20 63 72 65 61 74 65 64 20 62 79 0a 2a   is created by.*
15710 2a 20 74 68 65 20 4f 50 5f 4d 61 6b 65 52 65 63  * the OP_MakeRec
15720 6f 72 64 20 6f 70 63 6f 64 65 20 6f 66 20 74 68  ord opcode of th
15730 65 20 56 44 42 45 20 61 6e 64 20 69 73 20 64 69  e VDBE and is di
15740 73 61 73 73 65 6d 62 6c 65 64 20 62 79 20 74 68  sassembled by th
15750 65 0a 2a 2a 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f  e.** OP_Column o
15760 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 41 6e 20  pcode..**.** An 
15770 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73  instance of this
15780 20 6f 62 6a 65 63 74 20 73 65 72 76 65 73 20 61   object serves a
15790 73 20 61 20 22 6b 65 79 22 20 66 6f 72 20 64 6f  s a "key" for do
157a0 69 6e 67 20 61 20 73 65 61 72 63 68 20 6f 6e 0a  ing a search on.
157b0 2a 2a 20 61 6e 20 69 6e 64 65 78 20 62 2b 74 72  ** an index b+tr
157c0 65 65 2e 20 54 68 65 20 67 6f 61 6c 20 6f 66 20  ee. The goal of 
157d0 74 68 65 20 73 65 61 72 63 68 20 69 73 20 74 6f  the search is to
157e0 20 66 69 6e 64 20 74 68 65 20 65 6e 74 72 79 20   find the entry 
157f0 74 68 61 74 0a 2a 2a 20 69 73 20 63 6c 6f 73 65  that.** is close
15800 64 20 74 6f 20 74 68 65 20 6b 65 79 20 64 65 73  d to the key des
15810 63 72 69 62 65 64 20 62 79 20 74 68 69 73 20 6f  cribed by this o
15820 62 6a 65 63 74 2e 20 20 54 68 69 73 20 6f 62 6a  bject.  This obj
15830 65 63 74 20 6d 69 67 68 74 20 68 6f 6c 64 0a 2a  ect might hold.*
15840 2a 20 6a 75 73 74 20 61 20 70 72 65 66 69 78 20  * just a prefix 
15850 6f 66 20 74 68 65 20 6b 65 79 2e 20 20 54 68 65  of the key.  The
15860 20 6e 75 6d 62 65 72 20 6f 66 20 66 69 65 6c 64   number of field
15870 73 20 69 73 20 67 69 76 65 6e 20 62 79 0a 2a 2a  s is given by.**
15880 20 70 4b 65 79 49 6e 66 6f 2d 3e 6e 46 69 65 6c   pKeyInfo->nFiel
15890 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 72 31 20  d..**.** The r1 
158a0 61 6e 64 20 72 32 20 66 69 65 6c 64 73 20 61 72  and r2 fields ar
158b0 65 20 74 68 65 20 76 61 6c 75 65 73 20 74 6f 20  e the values to 
158c0 72 65 74 75 72 6e 20 69 66 20 74 68 69 73 20 6b  return if this k
158d0 65 79 20 69 73 20 6c 65 73 73 20 74 68 61 6e 0a  ey is less than.
158e0 2a 2a 20 6f 72 20 67 72 65 61 74 65 72 20 74 68  ** or greater th
158f0 61 6e 20 61 20 6b 65 79 20 69 6e 20 74 68 65 20  an a key in the 
15900 62 74 72 65 65 2c 20 72 65 73 70 65 63 74 69 76  btree, respectiv
15910 65 6c 79 2e 20 20 54 68 65 73 65 20 61 72 65 20  ely.  These are 
15920 6e 6f 72 6d 61 6c 6c 79 0a 2a 2a 20 2d 31 20 61  normally.** -1 a
15930 6e 64 20 2b 31 20 72 65 73 70 65 63 74 69 76 65  nd +1 respective
15940 6c 79 2c 20 62 75 74 20 6d 69 67 68 74 20 62 65  ly, but might be
15950 20 69 6e 76 65 72 74 65 64 20 74 6f 20 2b 31 20   inverted to +1 
15960 61 6e 64 20 2d 31 20 69 66 20 74 68 65 20 62 2d  and -1 if the b-
15970 74 72 65 65 0a 2a 2a 20 69 73 20 69 6e 20 44 45  tree.** is in DE
15980 53 43 20 6f 72 64 65 72 2e 0a 2a 2a 0a 2a 2a 20  SC order..**.** 
15990 54 68 65 20 6b 65 79 20 63 6f 6d 70 61 72 69 73  The key comparis
159a0 6f 6e 20 66 75 6e 63 74 69 6f 6e 73 20 61 63 74  on functions act
159b0 75 61 6c 6c 79 20 72 65 74 75 72 6e 20 64 65 66  ually return def
159c0 61 75 6c 74 5f 72 63 20 77 68 65 6e 20 74 68 65  ault_rc when the
159d0 79 20 66 69 6e 64 0a 2a 2a 20 61 6e 20 65 71 75  y find.** an equ
159e0 61 6c 73 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20  als comparison. 
159f0 20 64 65 66 61 75 6c 74 5f 72 63 20 63 61 6e 20   default_rc can 
15a00 62 65 20 2d 31 2c 20 30 2c 20 6f 72 20 2b 31 2e  be -1, 0, or +1.
15a10 20 20 49 66 20 74 68 65 72 65 20 61 72 65 0a 2a    If there are.*
15a20 2a 20 6d 75 6c 74 69 70 6c 65 20 65 6e 74 72 69  * multiple entri
15a30 65 73 20 69 6e 20 74 68 65 20 62 2d 74 72 65 65  es in the b-tree
15a40 20 77 69 74 68 20 74 68 65 20 73 61 6d 65 20 6b   with the same k
15a50 65 79 20 28 77 68 65 6e 20 6f 6e 6c 79 20 6c 6f  ey (when only lo
15a60 6f 6b 69 6e 67 0a 2a 2a 20 61 74 20 74 68 65 20  oking.** at the 
15a70 66 69 72 73 74 20 70 4b 65 79 49 6e 66 6f 2d 3e  first pKeyInfo->
15a80 6e 46 69 65 6c 64 73 2c 29 20 74 68 65 6e 20 64  nFields,) then d
15a90 65 66 61 75 6c 74 5f 72 63 20 63 61 6e 20 62 65  efault_rc can be
15aa0 20 73 65 74 20 74 6f 20 2d 31 20 74 6f 0a 2a 2a   set to -1 to.**
15ab0 20 63 61 75 73 65 20 74 68 65 20 73 65 61 72 63   cause the searc
15ac0 68 20 74 6f 20 66 69 6e 64 20 74 68 65 20 6c 61  h to find the la
15ad0 73 74 20 6d 61 74 63 68 2c 20 6f 72 20 2b 31 20  st match, or +1 
15ae0 74 6f 20 63 61 75 73 65 20 74 68 65 20 73 65 61  to cause the sea
15af0 72 63 68 20 74 6f 0a 2a 2a 20 66 69 6e 64 20 74  rch to.** find t
15b00 68 65 20 66 69 72 73 74 20 6d 61 74 63 68 2e 0a  he first match..
15b10 2a 2a 0a 2a 2a 20 54 68 65 20 6b 65 79 20 63 6f  **.** The key co
15b20 6d 70 61 72 69 73 6f 6e 20 66 75 6e 63 74 69 6f  mparison functio
15b30 6e 73 20 77 69 6c 6c 20 73 65 74 20 65 71 53 65  ns will set eqSe
15b40 65 6e 20 74 6f 20 74 72 75 65 20 69 66 20 74 68  en to true if th
15b50 65 79 20 65 76 65 72 0a 2a 2a 20 67 65 74 20 61  ey ever.** get a
15b60 6e 64 20 65 71 75 61 6c 20 72 65 73 75 6c 74 73  nd equal results
15b70 20 77 68 65 6e 20 63 6f 6d 70 61 72 69 6e 67 20   when comparing 
15b80 74 68 69 73 20 73 74 72 75 63 74 75 72 65 20 74  this structure t
15b90 6f 20 61 20 62 2d 74 72 65 65 20 72 65 63 6f 72  o a b-tree recor
15ba0 64 2e 0a 2a 2a 20 57 68 65 6e 20 64 65 66 61 75  d..** When defau
15bb0 6c 74 5f 72 63 21 3d 30 2c 20 74 68 65 20 73 65  lt_rc!=0, the se
15bc0 61 72 63 68 20 6d 69 67 68 74 20 65 6e 64 20 75  arch might end u
15bd0 70 20 6f 6e 20 74 68 65 20 72 65 63 6f 72 64 20  p on the record 
15be0 69 6d 6d 65 64 69 61 74 65 6c 79 0a 2a 2a 20 62  immediately.** b
15bf0 65 66 6f 72 65 20 74 68 65 20 66 69 72 73 74 20  efore the first 
15c00 6d 61 74 63 68 20 6f 72 20 69 6d 6d 65 64 69 61  match or immedia
15c10 74 65 6c 79 20 61 66 74 65 72 20 74 68 65 20 6c  tely after the l
15c20 61 73 74 20 6d 61 74 63 68 2e 20 20 54 68 65 0a  ast match.  The.
15c30 2a 2a 20 65 71 53 65 65 6e 20 66 69 65 6c 64 20  ** eqSeen field 
15c40 77 69 6c 6c 20 69 6e 64 69 63 61 74 65 20 77 68  will indicate wh
15c50 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 61 6e 20  ether or not an 
15c60 65 78 61 63 74 20 6d 61 74 63 68 20 65 78 69 73  exact match exis
15c70 74 73 20 69 6e 20 74 68 65 0a 2a 2a 20 62 2d 74  ts in the.** b-t
15c80 72 65 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 55  ree..*/.struct U
15c90 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 20 7b 0a  npackedRecord {.
15ca0 20 20 4b 65 79 49 6e 66 6f 20 2a 70 4b 65 79 49    KeyInfo *pKeyI
15cb0 6e 66 6f 3b 20 20 2f 2a 20 43 6f 6c 6c 61 74 69  nfo;  /* Collati
15cc0 6f 6e 20 61 6e 64 20 73 6f 72 74 2d 6f 72 64 65  on and sort-orde
15cd0 72 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 2a 2f  r information */
15ce0 0a 20 20 4d 65 6d 20 2a 61 4d 65 6d 3b 20 20 20  .  Mem *aMem;   
15cf0 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 73         /* Values
15d00 20 2a 2f 0a 20 20 75 31 36 20 6e 46 69 65 6c 64   */.  u16 nField
15d10 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d  ;         /* Num
15d20 62 65 72 20 6f 66 20 65 6e 74 72 69 65 73 20 69  ber of entries i
15d30 6e 20 61 70 4d 65 6d 5b 5d 20 2a 2f 0a 20 20 69  n apMem[] */.  i
15d40 38 20 64 65 66 61 75 6c 74 5f 72 63 3b 20 20 20  8 default_rc;   
15d50 20 20 20 2f 2a 20 43 6f 6d 70 61 72 69 73 6f 6e     /* Comparison
15d60 20 72 65 73 75 6c 74 20 69 66 20 6b 65 79 73 20   result if keys 
15d70 61 72 65 20 65 71 75 61 6c 20 2a 2f 0a 20 20 75  are equal */.  u
15d80 38 20 65 72 72 43 6f 64 65 3b 20 20 20 20 20 20  8 errCode;      
15d90 20 20 20 2f 2a 20 45 72 72 6f 72 20 64 65 74 65     /* Error dete
15da0 63 74 65 64 20 62 79 20 78 52 65 63 6f 72 64 43  cted by xRecordC
15db0 6f 6d 70 61 72 65 20 28 43 4f 52 52 55 50 54 20  ompare (CORRUPT 
15dc0 6f 72 20 4e 4f 4d 45 4d 29 20 2a 2f 0a 20 20 69  or NOMEM) */.  i
15dd0 38 20 72 31 3b 20 20 20 20 20 20 20 20 20 20 20  8 r1;           
15de0 20 20 20 2f 2a 20 56 61 6c 75 65 20 74 6f 20 72     /* Value to r
15df0 65 74 75 72 6e 20 69 66 20 28 6c 68 73 20 3c 20  eturn if (lhs < 
15e00 72 68 73 29 20 2a 2f 0a 20 20 69 38 20 72 32 3b  rhs) */.  i8 r2;
15e10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
15e20 20 56 61 6c 75 65 20 74 6f 20 72 65 74 75 72 6e   Value to return
15e30 20 69 66 20 28 6c 68 73 20 3e 20 72 68 73 29 20   if (lhs > rhs) 
15e40 2a 2f 0a 20 20 75 38 20 65 71 53 65 65 6e 3b 20  */.  u8 eqSeen; 
15e50 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65           /* True
15e60 20 69 66 20 61 6e 20 65 71 75 61 6c 69 74 79 20   if an equality 
15e70 63 6f 6d 70 61 72 69 73 6f 6e 20 68 61 73 20 62  comparison has b
15e80 65 65 6e 20 73 65 65 6e 20 2a 2f 0a 7d 3b 0a 0a  een seen */.};..
15e90 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 53 51 4c 20  ./*.** Each SQL 
15ea0 69 6e 64 65 78 20 69 73 20 72 65 70 72 65 73 65  index is represe
15eb0 6e 74 65 64 20 69 6e 20 6d 65 6d 6f 72 79 20 62  nted in memory b
15ec0 79 20 61 6e 0a 2a 2a 20 69 6e 73 74 61 6e 63 65  y an.** instance
15ed0 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   of the followin
15ee0 67 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a 0a  g structure..**.
15ef0 2a 2a 20 54 68 65 20 63 6f 6c 75 6d 6e 73 20 6f  ** The columns o
15f00 66 20 74 68 65 20 74 61 62 6c 65 20 74 68 61 74  f the table that
15f10 20 61 72 65 20 74 6f 20 62 65 20 69 6e 64 65 78   are to be index
15f20 65 64 20 61 72 65 20 64 65 73 63 72 69 62 65 64  ed are described
15f30 0a 2a 2a 20 62 79 20 74 68 65 20 61 69 43 6f 6c  .** by the aiCol
15f40 75 6d 6e 5b 5d 20 66 69 65 6c 64 20 6f 66 20 74  umn[] field of t
15f50 68 69 73 20 73 74 72 75 63 74 75 72 65 2e 20 20  his structure.  
15f60 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20 73 75 70  For example, sup
15f70 70 6f 73 65 0a 2a 2a 20 77 65 20 68 61 76 65 20  pose.** we have 
15f80 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 61  the following ta
15f90 62 6c 65 20 61 6e 64 20 69 6e 64 65 78 3a 0a 2a  ble and index:.*
15fa0 2a 0a 2a 2a 20 20 20 20 20 43 52 45 41 54 45 20  *.**     CREATE 
15fb0 54 41 42 4c 45 20 45 78 31 28 63 31 20 69 6e 74  TABLE Ex1(c1 int
15fc0 2c 20 63 32 20 69 6e 74 2c 20 63 33 20 74 65 78  , c2 int, c3 tex
15fd0 74 29 3b 0a 2a 2a 20 20 20 20 20 43 52 45 41 54  t);.**     CREAT
15fe0 45 20 49 4e 44 45 58 20 45 78 32 20 4f 4e 20 45  E INDEX Ex2 ON E
15ff0 78 31 28 63 33 2c 63 31 29 3b 0a 2a 2a 0a 2a 2a  x1(c3,c1);.**.**
16000 20 49 6e 20 74 68 65 20 54 61 62 6c 65 20 73 74   In the Table st
16010 72 75 63 74 75 72 65 20 64 65 73 63 72 69 62 69  ructure describi
16020 6e 67 20 45 78 31 2c 20 6e 43 6f 6c 3d 3d 33 20  ng Ex1, nCol==3 
16030 62 65 63 61 75 73 65 20 74 68 65 72 65 20 61 72  because there ar
16040 65 0a 2a 2a 20 74 68 72 65 65 20 63 6f 6c 75 6d  e.** three colum
16050 6e 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65 2e  ns in the table.
16060 20 20 49 6e 20 74 68 65 20 49 6e 64 65 78 20 73    In the Index s
16070 74 72 75 63 74 75 72 65 20 64 65 73 63 72 69 62  tructure describ
16080 69 6e 67 0a 2a 2a 20 45 78 32 2c 20 6e 43 6f 6c  ing.** Ex2, nCol
16090 75 6d 6e 3d 3d 32 20 73 69 6e 63 65 20 32 20 6f  umn==2 since 2 o
160a0 66 20 74 68 65 20 33 20 63 6f 6c 75 6d 6e 73 20  f the 3 columns 
160b0 6f 66 20 45 78 31 20 61 72 65 20 69 6e 64 65 78  of Ex1 are index
160c0 65 64 2e 0a 2a 2a 20 54 68 65 20 76 61 6c 75 65  ed..** The value
160d0 20 6f 66 20 61 69 43 6f 6c 75 6d 6e 20 69 73 20   of aiColumn is 
160e0 7b 32 2c 20 30 7d 2e 20 20 61 69 43 6f 6c 75 6d  {2, 0}.  aiColum
160f0 6e 5b 30 5d 3d 3d 32 20 62 65 63 61 75 73 65 20  n[0]==2 because 
16100 74 68 65 0a 2a 2a 20 66 69 72 73 74 20 63 6f 6c  the.** first col
16110 75 6d 6e 20 74 6f 20 62 65 20 69 6e 64 65 78 65  umn to be indexe
16120 64 20 28 63 33 29 20 68 61 73 20 61 6e 20 69 6e  d (c3) has an in
16130 64 65 78 20 6f 66 20 32 20 69 6e 20 45 78 31 2e  dex of 2 in Ex1.
16140 61 43 6f 6c 5b 5d 2e 0a 2a 2a 20 54 68 65 20 73  aCol[]..** The s
16150 65 63 6f 6e 64 20 63 6f 6c 75 6d 6e 20 74 6f 20  econd column to 
16160 62 65 20 69 6e 64 65 78 65 64 20 28 63 31 29 20  be indexed (c1) 
16170 68 61 73 20 61 6e 20 69 6e 64 65 78 20 6f 66 20  has an index of 
16180 30 20 69 6e 0a 2a 2a 20 45 78 31 2e 61 43 6f 6c  0 in.** Ex1.aCol
16190 5b 5d 2c 20 68 65 6e 63 65 20 45 78 32 2e 61 69  [], hence Ex2.ai
161a0 43 6f 6c 75 6d 6e 5b 31 5d 3d 3d 30 2e 0a 2a 2a  Column[1]==0..**
161b0 0a 2a 2a 20 54 68 65 20 49 6e 64 65 78 2e 6f 6e  .** The Index.on
161c0 45 72 72 6f 72 20 66 69 65 6c 64 20 64 65 74 65  Error field dete
161d0 72 6d 69 6e 65 73 20 77 68 65 74 68 65 72 20 6f  rmines whether o
161e0 72 20 6e 6f 74 20 74 68 65 20 69 6e 64 65 78 65  r not the indexe
161f0 64 20 63 6f 6c 75 6d 6e 73 0a 2a 2a 20 6d 75 73  d columns.** mus
16200 74 20 62 65 20 75 6e 69 71 75 65 20 61 6e 64 20  t be unique and 
16210 77 68 61 74 20 74 6f 20 64 6f 20 69 66 20 74 68  what to do if th
16220 65 79 20 61 72 65 20 6e 6f 74 2e 20 20 57 68 65  ey are not.  Whe
16230 6e 20 49 6e 64 65 78 2e 6f 6e 45 72 72 6f 72 3d  n Index.onError=
16240 4f 45 5f 4e 6f 6e 65 2c 0a 2a 2a 20 69 74 20 6d  OE_None,.** it m
16250 65 61 6e 73 20 74 68 69 73 20 69 73 20 6e 6f 74  eans this is not
16260 20 61 20 75 6e 69 71 75 65 20 69 6e 64 65 78 2e   a unique index.
16270 20 20 4f 74 68 65 72 77 69 73 65 20 69 74 20 69    Otherwise it i
16280 73 20 61 20 75 6e 69 71 75 65 20 69 6e 64 65 78  s a unique index
16290 0a 2a 2a 20 61 6e 64 20 74 68 65 20 76 61 6c 75  .** and the valu
162a0 65 20 6f 66 20 49 6e 64 65 78 2e 6f 6e 45 72 72  e of Index.onErr
162b0 6f 72 20 69 6e 64 69 63 61 74 65 20 74 68 65 20  or indicate the 
162c0 77 68 69 63 68 20 63 6f 6e 66 6c 69 63 74 20 72  which conflict r
162d0 65 73 6f 6c 75 74 69 6f 6e 0a 2a 2a 20 61 6c 67  esolution.** alg
162e0 6f 72 69 74 68 6d 20 74 6f 20 65 6d 70 6c 6f 79  orithm to employ
162f0 20 77 68 65 6e 65 76 65 72 20 61 6e 20 61 74 74   whenever an att
16300 65 6d 70 74 20 69 73 20 6d 61 64 65 20 74 6f 20  empt is made to 
16310 69 6e 73 65 72 74 20 61 20 6e 6f 6e 2d 75 6e 69  insert a non-uni
16320 71 75 65 0a 2a 2a 20 65 6c 65 6d 65 6e 74 2e 0a  que.** element..
16330 2a 2a 0a 2a 2a 20 57 68 69 6c 65 20 70 61 72 73  **.** While pars
16340 69 6e 67 20 61 20 43 52 45 41 54 45 20 54 41 42  ing a CREATE TAB
16350 4c 45 20 6f 72 20 43 52 45 41 54 45 20 49 4e 44  LE or CREATE IND
16360 45 58 20 73 74 61 74 65 6d 65 6e 74 20 69 6e 20  EX statement in 
16370 6f 72 64 65 72 20 74 6f 0a 2a 2a 20 67 65 6e 65  order to.** gene
16380 72 61 74 65 20 56 44 42 45 20 63 6f 64 65 20 28  rate VDBE code (
16390 61 73 20 6f 70 70 6f 73 65 64 20 74 6f 20 70 61  as opposed to pa
163a0 72 73 69 6e 67 20 6f 6e 65 20 72 65 61 64 20 66  rsing one read f
163b0 72 6f 6d 20 61 6e 20 73 71 6c 69 74 65 5f 6d 61  rom an sqlite_ma
163c0 73 74 65 72 0a 2a 2a 20 74 61 62 6c 65 20 61 73  ster.** table as
163d0 20 70 61 72 74 20 6f 66 20 70 61 72 73 69 6e 67   part of parsing
163e0 20 61 6e 20 65 78 69 73 74 69 6e 67 20 64 61 74   an existing dat
163f0 61 62 61 73 65 20 73 63 68 65 6d 61 29 2c 20 74  abase schema), t
16400 72 61 6e 73 69 65 6e 74 20 69 6e 73 74 61 6e 63  ransient instanc
16410 65 73 0a 2a 2a 20 6f 66 20 74 68 69 73 20 73 74  es.** of this st
16420 72 75 63 74 75 72 65 20 6d 61 79 20 62 65 20 63  ructure may be c
16430 72 65 61 74 65 64 2e 20 49 6e 20 74 68 69 73 20  reated. In this 
16440 63 61 73 65 20 74 68 65 20 49 6e 64 65 78 2e 74  case the Index.t
16450 6e 75 6d 20 76 61 72 69 61 62 6c 65 20 69 73 0a  num variable is.
16460 2a 2a 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65  ** used to store
16470 20 74 68 65 20 61 64 64 72 65 73 73 20 6f 66 20   the address of 
16480 61 20 56 44 42 45 20 69 6e 73 74 72 75 63 74 69  a VDBE instructi
16490 6f 6e 2c 20 6e 6f 74 20 61 20 64 61 74 61 62 61  on, not a databa
164a0 73 65 20 70 61 67 65 0a 2a 2a 20 6e 75 6d 62 65  se page.** numbe
164b0 72 20 28 69 74 20 63 61 6e 6e 6f 74 20 2d 20 74  r (it cannot - t
164c0 68 65 20 64 61 74 61 62 61 73 65 20 70 61 67 65  he database page
164d0 20 69 73 20 6e 6f 74 20 61 6c 6c 6f 63 61 74 65   is not allocate
164e0 64 20 75 6e 74 69 6c 20 74 68 65 20 56 44 42 45  d until the VDBE
164f0 0a 2a 2a 20 70 72 6f 67 72 61 6d 20 69 73 20 65  .** program is e
16500 78 65 63 75 74 65 64 29 2e 20 53 65 65 20 63 6f  xecuted). See co
16510 6e 76 65 72 74 54 6f 57 69 74 68 6f 75 74 52 6f  nvertToWithoutRo
16520 77 69 64 54 61 62 6c 65 28 29 20 66 6f 72 20 64  widTable() for d
16530 65 74 61 69 6c 73 2e 0a 2a 2f 0a 73 74 72 75 63  etails..*/.struc
16540 74 20 49 6e 64 65 78 20 7b 0a 20 20 63 68 61 72  t Index {.  char
16550 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20   *zName;        
16560 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20       /* Name of 
16570 74 68 69 73 20 69 6e 64 65 78 20 2a 2f 0a 20 20  this index */.  
16580 69 31 36 20 2a 61 69 43 6f 6c 75 6d 6e 3b 20 20  i16 *aiColumn;  
16590 20 20 20 20 20 20 20 20 20 2f 2a 20 57 68 69 63           /* Whic
165a0 68 20 63 6f 6c 75 6d 6e 73 20 61 72 65 20 75 73  h columns are us
165b0 65 64 20 62 79 20 74 68 69 73 20 69 6e 64 65 78  ed by this index
165c0 2e 20 20 31 73 74 20 69 73 20 30 20 2a 2f 0a 20  .  1st is 0 */. 
165d0 20 4c 6f 67 45 73 74 20 2a 61 69 52 6f 77 4c 6f   LogEst *aiRowLo
165e0 67 45 73 74 3b 20 20 20 20 20 2f 2a 20 46 72 6f  gEst;     /* Fro
165f0 6d 20 41 4e 41 4c 59 5a 45 3a 20 45 73 74 2e 20  m ANALYZE: Est. 
16600 72 6f 77 73 20 73 65 6c 65 63 74 65 64 20 62 79  rows selected by
16610 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a   each column */.
16620 20 20 54 61 62 6c 65 20 2a 70 54 61 62 6c 65 3b    Table *pTable;
16630 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68             /* Th
16640 65 20 53 51 4c 20 74 61 62 6c 65 20 62 65 69 6e  e SQL table bein
16650 67 20 69 6e 64 65 78 65 64 20 2a 2f 0a 20 20 63  g indexed */.  c
16660 68 61 72 20 2a 7a 43 6f 6c 41 66 66 3b 20 20 20  har *zColAff;   
16670 20 20 20 20 20 20 20 20 2f 2a 20 53 74 72 69 6e          /* Strin
16680 67 20 64 65 66 69 6e 69 6e 67 20 74 68 65 20 61  g defining the a
16690 66 66 69 6e 69 74 79 20 6f 66 20 65 61 63 68 20  ffinity of each 
166a0 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 49 6e 64 65  column */.  Inde
166b0 78 20 2a 70 4e 65 78 74 3b 20 20 20 20 20 20 20  x *pNext;       
166c0 20 20 20 20 20 2f 2a 20 54 68 65 20 6e 65 78 74       /* The next
166d0 20 69 6e 64 65 78 20 61 73 73 6f 63 69 61 74 65   index associate
166e0 64 20 77 69 74 68 20 74 68 65 20 73 61 6d 65 20  d with the same 
166f0 74 61 62 6c 65 20 2a 2f 0a 20 20 53 63 68 65 6d  table */.  Schem
16700 61 20 2a 70 53 63 68 65 6d 61 3b 20 20 20 20 20  a *pSchema;     
16710 20 20 20 20 2f 2a 20 53 63 68 65 6d 61 20 63 6f      /* Schema co
16720 6e 74 61 69 6e 69 6e 67 20 74 68 69 73 20 69 6e  ntaining this in
16730 64 65 78 20 2a 2f 0a 20 20 75 38 20 2a 61 53 6f  dex */.  u8 *aSo
16740 72 74 4f 72 64 65 72 3b 20 20 20 20 20 20 20 20  rtOrder;        
16750 20 20 2f 2a 20 66 6f 72 20 65 61 63 68 20 63 6f    /* for each co
16760 6c 75 6d 6e 3a 20 54 72 75 65 3d 3d 44 45 53 43  lumn: True==DESC
16770 2c 20 46 61 6c 73 65 3d 3d 41 53 43 20 2a 2f 0a  , False==ASC */.
16780 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 2a 61    const char **a
16790 7a 43 6f 6c 6c 3b 20 20 20 20 20 2f 2a 20 41 72  zColl;     /* Ar
167a0 72 61 79 20 6f 66 20 63 6f 6c 6c 61 74 69 6f 6e  ray of collation
167b0 20 73 65 71 75 65 6e 63 65 20 6e 61 6d 65 73 20   sequence names 
167c0 66 6f 72 20 69 6e 64 65 78 20 2a 2f 0a 20 20 45  for index */.  E
167d0 78 70 72 20 2a 70 50 61 72 74 49 64 78 57 68 65  xpr *pPartIdxWhe
167e0 72 65 3b 20 20 20 20 20 2f 2a 20 57 48 45 52 45  re;     /* WHERE
167f0 20 63 6c 61 75 73 65 20 66 6f 72 20 70 61 72 74   clause for part
16800 69 61 6c 20 69 6e 64 69 63 65 73 20 2a 2f 0a 20  ial indices */. 
16810 20 45 78 70 72 4c 69 73 74 20 2a 61 43 6f 6c 45   ExprList *aColE
16820 78 70 72 3b 20 20 20 20 20 20 2f 2a 20 43 6f 6c  xpr;      /* Col
16830 75 6d 6e 20 65 78 70 72 65 73 73 69 6f 6e 73 20  umn expressions 
16840 2a 2f 0a 20 20 69 6e 74 20 74 6e 75 6d 3b 20 20  */.  int tnum;  
16850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
16860 20 44 42 20 50 61 67 65 20 63 6f 6e 74 61 69 6e   DB Page contain
16870 69 6e 67 20 72 6f 6f 74 20 6f 66 20 74 68 69 73  ing root of this
16880 20 69 6e 64 65 78 20 2a 2f 0a 20 20 4c 6f 67 45   index */.  LogE
16890 73 74 20 73 7a 49 64 78 52 6f 77 3b 20 20 20 20  st szIdxRow;    
168a0 20 20 20 20 20 2f 2a 20 45 73 74 69 6d 61 74 65       /* Estimate
168b0 64 20 61 76 65 72 61 67 65 20 72 6f 77 20 73 69  d average row si
168c0 7a 65 20 69 6e 20 62 79 74 65 73 20 2a 2f 0a 20  ze in bytes */. 
168d0 20 75 31 36 20 6e 4b 65 79 43 6f 6c 3b 20 20 20   u16 nKeyCol;   
168e0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
168f0 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 66  ber of columns f
16900 6f 72 6d 69 6e 67 20 74 68 65 20 6b 65 79 20 2a  orming the key *
16910 2f 0a 20 20 75 31 36 20 6e 43 6f 6c 75 6d 6e 3b  /.  u16 nColumn;
16920 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
16930 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e  Number of column
16940 73 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20  s stored in the 
16950 69 6e 64 65 78 20 2a 2f 0a 20 20 75 38 20 6f 6e  index */.  u8 on
16960 45 72 72 6f 72 3b 20 20 20 20 20 20 20 20 20 20  Error;          
16970 20 20 20 20 2f 2a 20 4f 45 5f 41 62 6f 72 74 2c      /* OE_Abort,
16980 20 4f 45 5f 49 67 6e 6f 72 65 2c 20 4f 45 5f 52   OE_Ignore, OE_R
16990 65 70 6c 61 63 65 2c 20 6f 72 20 4f 45 5f 4e 6f  eplace, or OE_No
169a0 6e 65 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64  ne */.  unsigned
169b0 20 69 64 78 54 79 70 65 3a 32 3b 20 20 20 20 20   idxType:2;     
169c0 20 2f 2a 20 31 3d 3d 55 4e 49 51 55 45 2c 20 32   /* 1==UNIQUE, 2
169d0 3d 3d 50 52 49 4d 41 52 59 20 4b 45 59 2c 20 30  ==PRIMARY KEY, 0
169e0 3d 3d 43 52 45 41 54 45 20 49 4e 44 45 58 20 2a  ==CREATE INDEX *
169f0 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 62 55 6e  /.  unsigned bUn
16a00 6f 72 64 65 72 65 64 3a 31 3b 20 20 20 2f 2a 20  ordered:1;   /* 
16a10 55 73 65 20 74 68 69 73 20 69 6e 64 65 78 20 66  Use this index f
16a20 6f 72 20 3d 3d 20 6f 72 20 49 4e 20 71 75 65 72  or == or IN quer
16a30 69 65 73 20 6f 6e 6c 79 20 2a 2f 0a 20 20 75 6e  ies only */.  un
16a40 73 69 67 6e 65 64 20 75 6e 69 71 4e 6f 74 4e 75  signed uniqNotNu
16a50 6c 6c 3a 31 3b 20 20 2f 2a 20 54 72 75 65 20 69  ll:1;  /* True i
16a60 66 20 55 4e 49 51 55 45 20 61 6e 64 20 4e 4f 54  f UNIQUE and NOT
16a70 20 4e 55 4c 4c 20 66 6f 72 20 61 6c 6c 20 63 6f   NULL for all co
16a80 6c 75 6d 6e 73 20 2a 2f 0a 20 20 75 6e 73 69 67  lumns */.  unsig
16a90 6e 65 64 20 69 73 52 65 73 69 7a 65 64 3a 31 3b  ned isResized:1;
16aa0 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 72      /* True if r
16ab0 65 73 69 7a 65 49 6e 64 65 78 4f 62 6a 65 63 74  esizeIndexObject
16ac0 28 29 20 68 61 73 20 62 65 65 6e 20 63 61 6c 6c  () has been call
16ad0 65 64 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64  ed */.  unsigned
16ae0 20 69 73 43 6f 76 65 72 69 6e 67 3a 31 3b 20 20   isCovering:1;  
16af0 20 2f 2a 20 54 72 75 65 20 69 66 20 74 68 69 73   /* True if this
16b00 20 69 73 20 61 20 63 6f 76 65 72 69 6e 67 20 69   is a covering i
16b10 6e 64 65 78 20 2a 2f 0a 20 20 75 6e 73 69 67 6e  ndex */.  unsign
16b20 65 64 20 6e 6f 53 6b 69 70 53 63 61 6e 3a 31 3b  ed noSkipScan:1;
16b30 20 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 74 72 79     /* Do not try
16b40 20 74 6f 20 75 73 65 20 73 6b 69 70 2d 73 63 61   to use skip-sca
16b50 6e 20 69 66 20 74 72 75 65 20 2a 2f 0a 20 20 75  n if true */.  u
16b60 6e 73 69 67 6e 65 64 20 68 61 73 53 74 61 74 31  nsigned hasStat1
16b70 3a 31 3b 20 20 20 20 20 2f 2a 20 61 69 52 6f 77  :1;     /* aiRow
16b80 4c 6f 67 45 73 74 20 76 61 6c 75 65 73 20 63 6f  LogEst values co
16b90 6d 65 20 66 72 6f 6d 20 73 71 6c 69 74 65 5f 73  me from sqlite_s
16ba0 74 61 74 31 20 2a 2f 0a 20 20 75 6e 73 69 67 6e  tat1 */.  unsign
16bb0 65 64 20 62 4e 6f 51 75 65 72 79 3a 31 3b 20 20  ed bNoQuery:1;  
16bc0 20 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 75 73 65     /* Do not use
16bd0 20 74 68 69 73 20 69 6e 64 65 78 20 74 6f 20 6f   this index to o
16be0 70 74 69 6d 69 7a 65 20 71 75 65 72 69 65 73 20  ptimize queries 
16bf0 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
16c00 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 5f 4f 52  _ENABLE_STAT3_OR
16c10 5f 53 54 41 54 34 0a 20 20 69 6e 74 20 6e 53 61  _STAT4.  int nSa
16c20 6d 70 6c 65 3b 20 20 20 20 20 20 20 20 20 20 20  mple;           
16c30 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65    /* Number of e
16c40 6c 65 6d 65 6e 74 73 20 69 6e 20 61 53 61 6d 70  lements in aSamp
16c50 6c 65 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 6e 53  le[] */.  int nS
16c60 61 6d 70 6c 65 43 6f 6c 3b 20 20 20 20 20 20 20  ampleCol;       
16c70 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20 49 6e     /* Size of In
16c80 64 65 78 53 61 6d 70 6c 65 2e 61 6e 45 71 5b 5d  dexSample.anEq[]
16c90 20 61 6e 64 20 73 6f 20 6f 6e 20 2a 2f 0a 20 20   and so on */.  
16ca0 74 52 6f 77 63 6e 74 20 2a 61 41 76 67 45 71 3b  tRowcnt *aAvgEq;
16cb0 20 20 20 20 20 20 20 20 20 2f 2a 20 41 76 65 72           /* Aver
16cc0 61 67 65 20 6e 45 71 20 76 61 6c 75 65 73 20 66  age nEq values f
16cd0 6f 72 20 6b 65 79 73 20 6e 6f 74 20 69 6e 20 61  or keys not in a
16ce0 53 61 6d 70 6c 65 20 2a 2f 0a 20 20 49 6e 64 65  Sample */.  Inde
16cf0 78 53 61 6d 70 6c 65 20 2a 61 53 61 6d 70 6c 65  xSample *aSample
16d00 3b 20 20 20 20 2f 2a 20 53 61 6d 70 6c 65 73 20  ;    /* Samples 
16d10 6f 66 20 74 68 65 20 6c 65 66 74 2d 6d 6f 73 74  of the left-most
16d20 20 6b 65 79 20 2a 2f 0a 20 20 74 52 6f 77 63 6e   key */.  tRowcn
16d30 74 20 2a 61 69 52 6f 77 45 73 74 3b 20 20 20 20  t *aiRowEst;    
16d40 20 20 20 2f 2a 20 4e 6f 6e 2d 6c 6f 67 61 72 69     /* Non-logari
16d50 74 68 6d 69 63 20 73 74 61 74 31 20 64 61 74 61  thmic stat1 data
16d60 20 66 6f 72 20 74 68 69 73 20 69 6e 64 65 78 20   for this index 
16d70 2a 2f 0a 20 20 74 52 6f 77 63 6e 74 20 6e 52 6f  */.  tRowcnt nRo
16d80 77 45 73 74 30 3b 20 20 20 20 20 20 20 20 2f 2a  wEst0;        /*
16d90 20 4e 6f 6e 2d 6c 6f 67 61 72 69 74 68 6d 69 63   Non-logarithmic
16da0 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20   number of rows 
16db0 69 6e 20 74 68 65 20 69 6e 64 65 78 20 2a 2f 0a  in the index */.
16dc0 23 65 6e 64 69 66 0a 20 20 42 69 74 6d 61 73 6b  #endif.  Bitmask
16dd0 20 63 6f 6c 4e 6f 74 49 64 78 65 64 3b 20 20 20   colNotIdxed;   
16de0 20 20 2f 2a 20 30 20 66 6f 72 20 75 6e 69 6e 64    /* 0 for unind
16df0 65 78 65 64 20 63 6f 6c 75 6d 6e 73 20 69 6e 20  exed columns in 
16e00 70 54 61 62 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  pTab */.};../*.*
16e10 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73  * Allowed values
16e20 20 66 6f 72 20 49 6e 64 65 78 2e 69 64 78 54 79   for Index.idxTy
16e30 70 65 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  pe.*/.#define SQ
16e40 4c 49 54 45 5f 49 44 58 54 59 50 45 5f 41 50 50  LITE_IDXTYPE_APP
16e50 44 45 46 20 20 20 20 20 20 30 20 20 20 2f 2a 20  DEF      0   /* 
16e60 43 72 65 61 74 65 64 20 75 73 69 6e 67 20 43 52  Created using CR
16e70 45 41 54 45 20 49 4e 44 45 58 20 2a 2f 0a 23 64  EATE INDEX */.#d
16e80 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49 44 58  efine SQLITE_IDX
16e90 54 59 50 45 5f 55 4e 49 51 55 45 20 20 20 20 20  TYPE_UNIQUE     
16ea0 20 31 20 20 20 2f 2a 20 49 6d 70 6c 65 6d 65 6e   1   /* Implemen
16eb0 74 73 20 61 20 55 4e 49 51 55 45 20 63 6f 6e 73  ts a UNIQUE cons
16ec0 74 72 61 69 6e 74 20 2a 2f 0a 23 64 65 66 69 6e  traint */.#defin
16ed0 65 20 53 51 4c 49 54 45 5f 49 44 58 54 59 50 45  e SQLITE_IDXTYPE
16ee0 5f 50 52 49 4d 41 52 59 4b 45 59 20 20 32 20 20  _PRIMARYKEY  2  
16ef0 20 2f 2a 20 49 73 20 74 68 65 20 50 52 49 4d 41   /* Is the PRIMA
16f00 52 59 20 4b 45 59 20 66 6f 72 20 74 68 65 20 74  RY KEY for the t
16f10 61 62 6c 65 20 2a 2f 0a 0a 2f 2a 20 52 65 74 75  able */../* Retu
16f20 72 6e 20 74 72 75 65 20 69 66 20 69 6e 64 65 78  rn true if index
16f30 20 58 20 69 73 20 61 20 50 52 49 4d 41 52 59 20   X is a PRIMARY 
16f40 4b 45 59 20 69 6e 64 65 78 20 2a 2f 0a 23 64 65  KEY index */.#de
16f50 66 69 6e 65 20 49 73 50 72 69 6d 61 72 79 4b 65  fine IsPrimaryKe
16f60 79 49 6e 64 65 78 28 58 29 20 20 28 28 58 29 2d  yIndex(X)  ((X)-
16f70 3e 69 64 78 54 79 70 65 3d 3d 53 51 4c 49 54 45  >idxType==SQLITE
16f80 5f 49 44 58 54 59 50 45 5f 50 52 49 4d 41 52 59  _IDXTYPE_PRIMARY
16f90 4b 45 59 29 0a 0a 2f 2a 20 52 65 74 75 72 6e 20  KEY)../* Return 
16fa0 74 72 75 65 20 69 66 20 69 6e 64 65 78 20 58 20  true if index X 
16fb0 69 73 20 61 20 55 4e 49 51 55 45 20 69 6e 64 65  is a UNIQUE inde
16fc0 78 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49 73 55  x */.#define IsU
16fd0 6e 69 71 75 65 49 6e 64 65 78 28 58 29 20 20 20  niqueIndex(X)   
16fe0 20 20 20 28 28 58 29 2d 3e 6f 6e 45 72 72 6f 72     ((X)->onError
16ff0 21 3d 4f 45 5f 4e 6f 6e 65 29 0a 0a 2f 2a 20 54  !=OE_None)../* T
17000 68 65 20 49 6e 64 65 78 2e 61 69 43 6f 6c 75 6d  he Index.aiColum
17010 6e 5b 5d 20 76 61 6c 75 65 73 20 61 72 65 20 6e  n[] values are n
17020 6f 72 6d 61 6c 6c 79 20 70 6f 73 69 74 69 76 65  ormally positive
17030 20 69 6e 74 65 67 65 72 2e 20 20 42 75 74 0a 2a   integer.  But.*
17040 2a 20 74 68 65 72 65 20 61 72 65 20 73 6f 6d 65  * there are some
17050 20 6e 65 67 61 74 69 76 65 20 76 61 6c 75 65 73   negative values
17060 20 74 68 61 74 20 68 61 76 65 20 73 70 65 63 69   that have speci
17070 61 6c 20 6d 65 61 6e 69 6e 67 3a 0a 2a 2f 0a 23  al meaning:.*/.#
17080 64 65 66 69 6e 65 20 58 4e 5f 52 4f 57 49 44 20  define XN_ROWID 
17090 20 20 20 20 28 2d 31 29 20 20 20 20 20 2f 2a 20      (-1)     /* 
170a0 49 6e 64 65 78 65 64 20 63 6f 6c 75 6d 6e 20 69  Indexed column i
170b0 73 20 74 68 65 20 72 6f 77 69 64 20 2a 2f 0a 23  s the rowid */.#
170c0 64 65 66 69 6e 65 20 58 4e 5f 45 58 50 52 20 20  define XN_EXPR  
170d0 20 20 20 20 28 2d 32 29 20 20 20 20 20 2f 2a 20      (-2)     /* 
170e0 49 6e 64 65 78 65 64 20 63 6f 6c 75 6d 6e 20 69  Indexed column i
170f0 73 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 20  s an expression 
17100 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 73  */../*.** Each s
17110 61 6d 70 6c 65 20 73 74 6f 72 65 64 20 69 6e 20  ample stored in 
17120 74 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74 33  the sqlite_stat3
17130 20 74 61 62 6c 65 20 69 73 20 72 65 70 72 65 73   table is repres
17140 65 6e 74 65 64 20 69 6e 20 6d 65 6d 6f 72 79 0a  ented in memory.
17150 2a 2a 20 75 73 69 6e 67 20 61 20 73 74 72 75 63  ** using a struc
17160 74 75 72 65 20 6f 66 20 74 68 69 73 20 74 79 70  ture of this typ
17170 65 2e 20 20 53 65 65 20 64 6f 63 75 6d 65 6e 74  e.  See document
17180 61 74 69 6f 6e 20 61 74 20 74 68 65 20 74 6f 70  ation at the top
17190 20 6f 66 20 74 68 65 0a 2a 2a 20 61 6e 61 6c 79   of the.** analy
171a0 7a 65 2e 63 20 73 6f 75 72 63 65 20 66 69 6c 65  ze.c source file
171b0 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20   for additional 
171c0 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a  information..*/.
171d0 73 74 72 75 63 74 20 49 6e 64 65 78 53 61 6d 70  struct IndexSamp
171e0 6c 65 20 7b 0a 20 20 76 6f 69 64 20 2a 70 3b 20  le {.  void *p; 
171f0 20 20 20 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e           /* Poin
17200 74 65 72 20 74 6f 20 73 61 6d 70 6c 65 64 20 72  ter to sampled r
17210 65 63 6f 72 64 20 2a 2f 0a 20 20 69 6e 74 20 6e  ecord */.  int n
17220 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
17230 53 69 7a 65 20 6f 66 20 72 65 63 6f 72 64 20 69  Size of record i
17240 6e 20 62 79 74 65 73 20 2a 2f 0a 20 20 74 52 6f  n bytes */.  tRo
17250 77 63 6e 74 20 2a 61 6e 45 71 3b 20 20 20 20 2f  wcnt *anEq;    /
17260 2a 20 45 73 74 2e 20 6e 75 6d 62 65 72 20 6f 66  * Est. number of
17270 20 72 6f 77 73 20 77 68 65 72 65 20 74 68 65 20   rows where the 
17280 6b 65 79 20 65 71 75 61 6c 73 20 74 68 69 73 20  key equals this 
17290 73 61 6d 70 6c 65 20 2a 2f 0a 20 20 74 52 6f 77  sample */.  tRow
172a0 63 6e 74 20 2a 61 6e 4c 74 3b 20 20 20 20 2f 2a  cnt *anLt;    /*
172b0 20 45 73 74 2e 20 6e 75 6d 62 65 72 20 6f 66 20   Est. number of 
172c0 72 6f 77 73 20 77 68 65 72 65 20 6b 65 79 20 69  rows where key i
172d0 73 20 6c 65 73 73 20 74 68 61 6e 20 74 68 69 73  s less than this
172e0 20 73 61 6d 70 6c 65 20 2a 2f 0a 20 20 74 52 6f   sample */.  tRo
172f0 77 63 6e 74 20 2a 61 6e 44 4c 74 3b 20 20 20 2f  wcnt *anDLt;   /
17300 2a 20 45 73 74 2e 20 6e 75 6d 62 65 72 20 6f 66  * Est. number of
17310 20 64 69 73 74 69 6e 63 74 20 6b 65 79 73 20 6c   distinct keys l
17320 65 73 73 20 74 68 61 6e 20 74 68 69 73 20 73 61  ess than this sa
17330 6d 70 6c 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  mple */.};../*.*
17340 2a 20 50 6f 73 73 69 62 6c 65 20 76 61 6c 75 65  * Possible value
17350 73 20 74 6f 20 75 73 65 20 77 69 74 68 69 6e 20  s to use within 
17360 74 68 65 20 66 6c 61 67 73 20 61 72 67 75 6d 65  the flags argume
17370 6e 74 20 74 6f 20 73 71 6c 69 74 65 33 47 65 74  nt to sqlite3Get
17380 54 6f 6b 65 6e 28 29 2e 0a 2a 2f 0a 23 64 65 66  Token()..*/.#def
17390 69 6e 65 20 53 51 4c 49 54 45 5f 54 4f 4b 45 4e  ine SQLITE_TOKEN
173a0 5f 51 55 4f 54 45 44 20 20 20 20 30 78 31 20 2f  _QUOTED    0x1 /
173b0 2a 20 54 6f 6b 65 6e 20 69 73 20 61 20 71 75 6f  * Token is a quo
173c0 74 65 64 20 69 64 65 6e 74 69 66 69 65 72 2e 20  ted identifier. 
173d0 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
173e0 45 5f 54 4f 4b 45 4e 5f 4b 45 59 57 4f 52 44 20  E_TOKEN_KEYWORD 
173f0 20 20 30 78 32 20 2f 2a 20 54 6f 6b 65 6e 20 69    0x2 /* Token i
17400 73 20 61 20 6b 65 79 77 6f 72 64 2e 20 2a 2f 0a  s a keyword. */.
17410 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 74 6f 6b 65  ./*.** Each toke
17420 6e 20 63 6f 6d 69 6e 67 20 6f 75 74 20 6f 66 20  n coming out of 
17430 74 68 65 20 6c 65 78 65 72 20 69 73 20 61 6e 20  the lexer is an 
17440 69 6e 73 74 61 6e 63 65 20 6f 66 0a 2a 2a 20 74  instance of.** t
17450 68 69 73 20 73 74 72 75 63 74 75 72 65 2e 20 20  his structure.  
17460 54 6f 6b 65 6e 73 20 61 72 65 20 61 6c 73 6f 20  Tokens are also 
17470 75 73 65 64 20 61 73 20 70 61 72 74 20 6f 66 20  used as part of 
17480 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 2e 0a 2a  an expression..*
17490 2a 0a 2a 2a 20 54 68 65 20 6d 65 6d 6f 72 79 20  *.** The memory 
174a0 74 68 61 74 20 22 7a 22 20 70 6f 69 6e 74 73 20  that "z" points 
174b0 74 6f 20 69 73 20 6f 77 6e 65 64 20 62 79 20 6f  to is owned by o
174c0 74 68 65 72 20 6f 62 6a 65 63 74 73 2e 20 20 54  ther objects.  T
174d0 61 6b 65 20 63 61 72 65 0a 2a 2a 20 74 68 61 74  ake care.** that
174e0 20 74 68 65 20 6f 77 6e 65 72 20 6f 66 20 74 68   the owner of th
174f0 65 20 22 7a 22 20 73 74 72 69 6e 67 20 64 6f 65  e "z" string doe
17500 73 20 6e 6f 74 20 64 65 61 6c 6c 6f 63 61 74 65  s not deallocate
17510 20 74 68 65 20 73 74 72 69 6e 67 20 62 65 66 6f   the string befo
17520 72 65 0a 2a 2a 20 74 68 65 20 54 6f 6b 65 6e 20  re.** the Token 
17530 67 6f 65 73 20 6f 75 74 20 6f 66 20 73 63 6f 70  goes out of scop
17540 65 21 20 20 56 65 72 79 20 6f 66 74 65 6e 2c 20  e!  Very often, 
17550 74 68 65 20 22 7a 22 20 70 6f 69 6e 74 73 20 74  the "z" points t
17560 6f 20 73 6f 6d 65 20 70 6c 61 63 65 0a 2a 2a 20  o some place.** 
17570 69 6e 20 74 68 65 20 6d 69 64 64 6c 65 20 6f 66  in the middle of
17580 20 74 68 65 20 50 61 72 73 65 2e 7a 53 71 6c 20   the Parse.zSql 
17590 74 65 78 74 2e 20 20 42 75 74 20 69 74 20 6d 69  text.  But it mi
175a0 67 68 74 20 61 6c 73 6f 20 70 6f 69 6e 74 20 74  ght also point t
175b0 6f 20 61 0a 2a 2a 20 73 74 61 74 69 63 20 73 74  o a.** static st
175c0 72 69 6e 67 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  ring..*/.struct 
175d0 54 6f 6b 65 6e 20 7b 0a 20 20 63 6f 6e 73 74 20  Token {.  const 
175e0 63 68 61 72 20 2a 7a 3b 20 20 20 20 20 2f 2a 20  char *z;     /* 
175f0 54 65 78 74 20 6f 66 20 74 68 65 20 74 6f 6b 65  Text of the toke
17600 6e 2e 20 20 4e 6f 74 20 4e 55 4c 4c 2d 74 65 72  n.  Not NULL-ter
17610 6d 69 6e 61 74 65 64 21 20 2a 2f 0a 20 20 75 6e  minated! */.  un
17620 73 69 67 6e 65 64 20 69 6e 74 20 6e 3b 20 20 20  signed int n;   
17630 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 68   /* Number of ch
17640 61 72 61 63 74 65 72 73 20 69 6e 20 74 68 69 73  aracters in this
17650 20 74 6f 6b 65 6e 20 2a 2f 0a 7d 3b 0a 0a 2f 2a   token */.};../*
17660 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20  .** An instance 
17670 6f 66 20 74 68 69 73 20 73 74 72 75 63 74 75 72  of this structur
17680 65 20 63 6f 6e 74 61 69 6e 73 20 69 6e 66 6f 72  e contains infor
17690 6d 61 74 69 6f 6e 20 6e 65 65 64 65 64 20 74 6f  mation needed to
176a0 20 67 65 6e 65 72 61 74 65 0a 2a 2a 20 63 6f 64   generate.** cod
176b0 65 20 66 6f 72 20 61 20 53 45 4c 45 43 54 20 74  e for a SELECT t
176c0 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 61 67 67  hat contains agg
176d0 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73  regate functions
176e0 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 45 78 70 72 2e  ..**.** If Expr.
176f0 6f 70 3d 3d 54 4b 5f 41 47 47 5f 43 4f 4c 55 4d  op==TK_AGG_COLUM
17700 4e 20 6f 72 20 54 4b 5f 41 47 47 5f 46 55 4e 43  N or TK_AGG_FUNC
17710 54 49 4f 4e 20 74 68 65 6e 20 45 78 70 72 2e 70  TION then Expr.p
17720 41 67 67 49 6e 66 6f 20 69 73 20 61 0a 2a 2a 20  AggInfo is a.** 
17730 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 69 73 20  pointer to this 
17740 73 74 72 75 63 74 75 72 65 2e 20 20 54 68 65 20  structure.  The 
17750 45 78 70 72 2e 69 43 6f 6c 75 6d 6e 20 66 69 65  Expr.iColumn fie
17760 6c 64 20 69 73 20 74 68 65 20 69 6e 64 65 78 20  ld is the index 
17770 69 6e 0a 2a 2a 20 41 67 67 49 6e 66 6f 2e 61 43  in.** AggInfo.aC
17780 6f 6c 5b 5d 20 6f 72 20 41 67 67 49 6e 66 6f 2e  ol[] or AggInfo.
17790 61 46 75 6e 63 5b 5d 20 6f 66 20 69 6e 66 6f 72  aFunc[] of infor
177a0 6d 61 74 69 6f 6e 20 6e 65 65 64 65 64 20 74 6f  mation needed to
177b0 20 67 65 6e 65 72 61 74 65 0a 2a 2a 20 63 6f 64   generate.** cod
177c0 65 20 66 6f 72 20 74 68 61 74 20 6e 6f 64 65 2e  e for that node.
177d0 0a 2a 2a 0a 2a 2a 20 41 67 67 49 6e 66 6f 2e 70  .**.** AggInfo.p
177e0 47 72 6f 75 70 42 79 20 61 6e 64 20 41 67 67 49  GroupBy and AggI
177f0 6e 66 6f 2e 61 46 75 6e 63 2e 70 45 78 70 72 20  nfo.aFunc.pExpr 
17800 70 6f 69 6e 74 20 74 6f 20 66 69 65 6c 64 73 20  point to fields 
17810 77 69 74 68 69 6e 20 74 68 65 0a 2a 2a 20 6f 72  within the.** or
17820 69 67 69 6e 61 6c 20 53 65 6c 65 63 74 20 73 74  iginal Select st
17830 72 75 63 74 75 72 65 20 74 68 61 74 20 64 65 73  ructure that des
17840 63 72 69 62 65 73 20 74 68 65 20 53 45 4c 45 43  cribes the SELEC
17850 54 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 54 68  T statement.  Th
17860 65 73 65 0a 2a 2a 20 66 69 65 6c 64 73 20 64 6f  ese.** fields do
17870 20 6e 6f 74 20 6e 65 65 64 20 74 6f 20 62 65 20   not need to be 
17880 66 72 65 65 64 20 77 68 65 6e 20 64 65 61 6c 6c  freed when deall
17890 6f 63 61 74 69 6e 67 20 74 68 65 20 41 67 67 49  ocating the AggI
178a0 6e 66 6f 20 73 74 72 75 63 74 75 72 65 2e 0a 2a  nfo structure..*
178b0 2f 0a 73 74 72 75 63 74 20 41 67 67 49 6e 66 6f  /.struct AggInfo
178c0 20 7b 0a 20 20 75 38 20 64 69 72 65 63 74 4d 6f   {.  u8 directMo
178d0 64 65 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  de;          /* 
178e0 44 69 72 65 63 74 20 72 65 6e 64 65 72 69 6e 67  Direct rendering
178f0 20 6d 6f 64 65 20 6d 65 61 6e 73 20 74 61 6b 65   mode means take
17900 20 64 61 74 61 20 64 69 72 65 63 74 6c 79 0a 20   data directly. 
17910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17920 20 20 20 20 20 20 20 20 20 2a 2a 20 66 72 6f 6d           ** from
17930 20 73 6f 75 72 63 65 20 74 61 62 6c 65 73 20 72   source tables r
17940 61 74 68 65 72 20 74 68 61 6e 20 66 72 6f 6d 20  ather than from 
17950 61 63 63 75 6d 75 6c 61 74 6f 72 73 20 2a 2f 0a  accumulators */.
17960 20 20 75 38 20 75 73 65 53 6f 72 74 69 6e 67 49    u8 useSortingI
17970 64 78 3b 20 20 20 20 20 20 20 2f 2a 20 49 6e 20  dx;       /* In 
17980 64 69 72 65 63 74 20 6d 6f 64 65 2c 20 72 65 66  direct mode, ref
17990 65 72 65 6e 63 65 20 74 68 65 20 73 6f 72 74 69  erence the sorti
179a0 6e 67 20 69 6e 64 65 78 20 72 61 74 68 65 72 0a  ng index rather.
179b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
179c0 20 20 20 20 20 20 20 20 20 20 2a 2a 20 74 68 61            ** tha
179d0 6e 20 74 68 65 20 73 6f 75 72 63 65 20 74 61 62  n the source tab
179e0 6c 65 20 2a 2f 0a 20 20 69 6e 74 20 73 6f 72 74  le */.  int sort
179f0 69 6e 67 49 64 78 3b 20 20 20 20 20 20 20 20 20  ingIdx;         
17a00 2f 2a 20 43 75 72 73 6f 72 20 6e 75 6d 62 65 72  /* Cursor number
17a10 20 6f 66 20 74 68 65 20 73 6f 72 74 69 6e 67 20   of the sorting 
17a20 69 6e 64 65 78 20 2a 2f 0a 20 20 69 6e 74 20 73  index */.  int s
17a30 6f 72 74 69 6e 67 49 64 78 50 54 61 62 3b 20 20  ortingIdxPTab;  
17a40 20 20 20 2f 2a 20 43 75 72 73 6f 72 20 6e 75 6d     /* Cursor num
17a50 62 65 72 20 6f 66 20 70 73 65 75 64 6f 2d 74 61  ber of pseudo-ta
17a60 62 6c 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 6f  ble */.  int nSo
17a70 72 74 69 6e 67 43 6f 6c 75 6d 6e 3b 20 20 20 20  rtingColumn;    
17a80 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f   /* Number of co
17a90 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 73 6f 72  lumns in the sor
17aa0 74 69 6e 67 20 69 6e 64 65 78 20 2a 2f 0a 20 20  ting index */.  
17ab0 69 6e 74 20 6d 6e 52 65 67 2c 20 6d 78 52 65 67  int mnReg, mxReg
17ac0 3b 20 20 20 20 20 20 20 2f 2a 20 52 61 6e 67 65  ;       /* Range
17ad0 20 6f 66 20 72 65 67 69 73 74 65 72 73 20 61 6c   of registers al
17ae0 6c 6f 63 61 74 65 64 20 66 6f 72 20 61 43 6f 6c  located for aCol
17af0 20 61 6e 64 20 61 46 75 6e 63 20 2a 2f 0a 20 20   and aFunc */.  
17b00 45 78 70 72 4c 69 73 74 20 2a 70 47 72 6f 75 70  ExprList *pGroup
17b10 42 79 3b 20 20 20 20 20 2f 2a 20 54 68 65 20 67  By;     /* The g
17b20 72 6f 75 70 20 62 79 20 63 6c 61 75 73 65 20 2a  roup by clause *
17b30 2f 0a 20 20 73 74 72 75 63 74 20 41 67 67 49 6e  /.  struct AggIn
17b40 66 6f 5f 63 6f 6c 20 7b 20 20 20 20 2f 2a 20 46  fo_col {    /* F
17b50 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 75  or each column u
17b60 73 65 64 20 69 6e 20 73 6f 75 72 63 65 20 74 61  sed in source ta
17b70 62 6c 65 73 20 2a 2f 0a 20 20 20 20 54 61 62 6c  bles */.    Tabl
17b80 65 20 2a 70 54 61 62 3b 20 20 20 20 20 20 20 20  e *pTab;        
17b90 20 20 20 20 20 2f 2a 20 53 6f 75 72 63 65 20 74       /* Source t
17ba0 61 62 6c 65 20 2a 2f 0a 20 20 20 20 69 6e 74 20  able */.    int 
17bb0 69 54 61 62 6c 65 3b 20 20 20 20 20 20 20 20 20  iTable;         
17bc0 20 20 20 20 20 2f 2a 20 43 75 72 73 6f 72 20 6e       /* Cursor n
17bd0 75 6d 62 65 72 20 6f 66 20 74 68 65 20 73 6f 75  umber of the sou
17be0 72 63 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20  rce table */.   
17bf0 20 69 6e 74 20 69 43 6f 6c 75 6d 6e 3b 20 20 20   int iColumn;   
17c00 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6c            /* Col
17c10 75 6d 6e 20 6e 75 6d 62 65 72 20 77 69 74 68 69  umn number withi
17c20 6e 20 74 68 65 20 73 6f 75 72 63 65 20 74 61 62  n the source tab
17c30 6c 65 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 53  le */.    int iS
17c40 6f 72 74 65 72 43 6f 6c 75 6d 6e 3b 20 20 20 20  orterColumn;    
17c50 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20 6e 75 6d     /* Column num
17c60 62 65 72 20 69 6e 20 74 68 65 20 73 6f 72 74 69  ber in the sorti
17c70 6e 67 20 69 6e 64 65 78 20 2a 2f 0a 20 20 20 20  ng index */.    
17c80 69 6e 74 20 69 4d 65 6d 3b 20 20 20 20 20 20 20  int iMem;       
17c90 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 65 6d 6f           /* Memo
17ca0 72 79 20 6c 6f 63 61 74 69 6f 6e 20 74 68 61 74  ry location that
17cb0 20 61 63 74 73 20 61 73 20 61 63 63 75 6d 75 6c   acts as accumul
17cc0 61 74 6f 72 20 2a 2f 0a 20 20 20 20 45 78 70 72  ator */.    Expr
17cd0 20 2a 70 45 78 70 72 3b 20 20 20 20 20 20 20 20   *pExpr;        
17ce0 20 20 20 20 20 2f 2a 20 54 68 65 20 6f 72 69 67       /* The orig
17cf0 69 6e 61 6c 20 65 78 70 72 65 73 73 69 6f 6e 20  inal expression 
17d00 2a 2f 0a 20 20 7d 20 2a 61 43 6f 6c 3b 0a 20 20  */.  } *aCol;.  
17d10 69 6e 74 20 6e 43 6f 6c 75 6d 6e 3b 20 20 20 20  int nColumn;    
17d20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
17d30 72 20 6f 66 20 75 73 65 64 20 65 6e 74 72 69 65  r of used entrie
17d40 73 20 69 6e 20 61 43 6f 6c 5b 5d 20 2a 2f 0a 20  s in aCol[] */. 
17d50 20 69 6e 74 20 6e 41 63 63 75 6d 75 6c 61 74 6f   int nAccumulato
17d60 72 3b 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62  r;       /* Numb
17d70 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 74 68  er of columns th
17d80 61 74 20 73 68 6f 77 20 74 68 72 6f 75 67 68 20  at show through 
17d90 74 6f 20 74 68 65 20 6f 75 74 70 75 74 2e 0a 20  to the output.. 
17da0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17db0 20 20 20 20 20 20 20 20 20 2a 2a 20 41 64 64 69           ** Addi
17dc0 74 69 6f 6e 61 6c 20 63 6f 6c 75 6d 6e 73 20 61  tional columns a
17dd0 72 65 20 75 73 65 64 20 6f 6e 6c 79 20 61 73 20  re used only as 
17de0 70 61 72 61 6d 65 74 65 72 73 20 74 6f 0a 20 20  parameters to.  
17df0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17e00 20 20 20 20 20 20 20 20 2a 2a 20 61 67 67 72 65          ** aggre
17e10 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 20 2a  gate functions *
17e20 2f 0a 20 20 73 74 72 75 63 74 20 41 67 67 49 6e  /.  struct AggIn
17e30 66 6f 5f 66 75 6e 63 20 7b 20 20 20 2f 2a 20 46  fo_func {   /* F
17e40 6f 72 20 65 61 63 68 20 61 67 67 72 65 67 61 74  or each aggregat
17e50 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20  e function */.  
17e60 20 20 45 78 70 72 20 2a 70 45 78 70 72 3b 20 20    Expr *pExpr;  
17e70 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 45 78             /* Ex
17e80 70 72 65 73 73 69 6f 6e 20 65 6e 63 6f 64 69 6e  pression encodin
17e90 67 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 2a  g the function *
17ea0 2f 0a 20 20 20 20 46 75 6e 63 44 65 66 20 2a 70  /.    FuncDef *p
17eb0 46 75 6e 63 3b 20 20 20 20 20 20 20 20 20 20 2f  Func;          /
17ec0 2a 20 54 68 65 20 61 67 67 72 65 67 61 74 65 20  * The aggregate 
17ed0 66 75 6e 63 74 69 6f 6e 20 69 6d 70 6c 65 6d 65  function impleme
17ee0 6e 74 61 74 69 6f 6e 20 2a 2f 0a 20 20 20 20 69  ntation */.    i
17ef0 6e 74 20 69 4d 65 6d 3b 20 20 20 20 20 20 20 20  nt iMem;        
17f00 20 20 20 20 20 20 20 20 2f 2a 20 4d 65 6d 6f 72          /* Memor
17f10 79 20 6c 6f 63 61 74 69 6f 6e 20 74 68 61 74 20  y location that 
17f20 61 63 74 73 20 61 73 20 61 63 63 75 6d 75 6c 61  acts as accumula
17f30 74 6f 72 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69  tor */.    int i
17f40 44 69 73 74 69 6e 63 74 3b 20 20 20 20 20 20 20  Distinct;       
17f50 20 20 20 20 2f 2a 20 45 70 68 65 6d 65 72 61 6c      /* Ephemeral
17f60 20 74 61 62 6c 65 20 75 73 65 64 20 74 6f 20 65   table used to e
17f70 6e 66 6f 72 63 65 20 44 49 53 54 49 4e 43 54 20  nforce DISTINCT 
17f80 2a 2f 0a 20 20 7d 20 2a 61 46 75 6e 63 3b 0a 20  */.  } *aFunc;. 
17f90 20 69 6e 74 20 6e 46 75 6e 63 3b 20 20 20 20 20   int nFunc;     
17fa0 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
17fb0 65 72 20 6f 66 20 65 6e 74 72 69 65 73 20 69 6e  er of entries in
17fc0 20 61 46 75 6e 63 5b 5d 20 2a 2f 0a 7d 3b 0a 0a   aFunc[] */.};..
17fd0 2f 2a 0a 2a 2a 20 54 68 65 20 64 61 74 61 74 79  /*.** The dataty
17fe0 70 65 20 79 6e 56 61 72 20 69 73 20 61 20 73 69  pe ynVar is a si
17ff0 67 6e 65 64 20 69 6e 74 65 67 65 72 2c 20 65 69  gned integer, ei
18000 74 68 65 72 20 31 36 2d 62 69 74 20 6f 72 20 33  ther 16-bit or 3
18010 32 2d 62 69 74 2e 0a 2a 2a 20 55 73 75 61 6c 6c  2-bit..** Usuall
18020 79 20 69 74 20 69 73 20 31 36 2d 62 69 74 73 2e  y it is 16-bits.
18030 20 20 42 75 74 20 69 66 20 53 51 4c 49 54 45 5f    But if SQLITE_
18040 4d 41 58 5f 56 41 52 49 41 42 4c 45 5f 4e 55 4d  MAX_VARIABLE_NUM
18050 42 45 52 20 69 73 20 67 72 65 61 74 65 72 0a 2a  BER is greater.*
18060 2a 20 74 68 61 6e 20 33 32 37 36 37 20 77 65 20  * than 32767 we 
18070 68 61 76 65 20 74 6f 20 6d 61 6b 65 20 69 74 20  have to make it 
18080 33 32 2d 62 69 74 2e 20 20 31 36 2d 62 69 74 20  32-bit.  16-bit 
18090 69 73 20 70 72 65 66 65 72 72 65 64 20 62 65 63  is preferred bec
180a0 61 75 73 65 0a 2a 2a 20 69 74 20 75 73 65 73 20  ause.** it uses 
180b0 6c 65 73 73 20 6d 65 6d 6f 72 79 20 69 6e 20 74  less memory in t
180c0 68 65 20 45 78 70 72 20 6f 62 6a 65 63 74 2c 20  he Expr object, 
180d0 77 68 69 63 68 20 69 73 20 61 20 62 69 67 20 6d  which is a big m
180e0 65 6d 6f 72 79 20 75 73 65 72 0a 2a 2a 20 69 6e  emory user.** in
180f0 20 73 79 73 74 65 6d 73 20 77 69 74 68 20 6c 6f   systems with lo
18100 74 73 20 6f 66 20 70 72 65 70 61 72 65 64 20 73  ts of prepared s
18110 74 61 74 65 6d 65 6e 74 73 2e 20 20 41 6e 64 20  tatements.  And 
18120 66 65 77 20 61 70 70 6c 69 63 61 74 69 6f 6e 73  few applications
18130 0a 2a 2a 20 6e 65 65 64 20 6d 6f 72 65 20 74 68  .** need more th
18140 61 6e 20 61 62 6f 75 74 20 31 30 20 6f 72 20 32  an about 10 or 2
18150 30 20 76 61 72 69 61 62 6c 65 73 2e 20 20 42 75  0 variables.  Bu
18160 74 20 73 6f 6d 65 20 65 78 74 72 65 6d 65 20 75  t some extreme u
18170 73 65 72 73 20 77 61 6e 74 0a 2a 2a 20 74 6f 20  sers want.** to 
18180 68 61 76 65 20 70 72 65 70 61 72 65 64 20 73 74  have prepared st
18190 61 74 65 6d 65 6e 74 73 20 77 69 74 68 20 6f 76  atements with ov
181a0 65 72 20 33 32 37 36 37 20 76 61 72 69 61 62 6c  er 32767 variabl
181b0 65 73 2c 20 61 6e 64 20 66 6f 72 20 74 68 65 6d  es, and for them
181c0 0a 2a 2a 20 74 68 65 20 6f 70 74 69 6f 6e 20 69  .** the option i
181d0 73 20 61 76 61 69 6c 61 62 6c 65 20 28 61 74 20  s available (at 
181e0 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 29 2e 0a 2a  compile-time)..*
181f0 2f 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d 41 58  /.#if SQLITE_MAX
18200 5f 56 41 52 49 41 42 4c 45 5f 4e 55 4d 42 45 52  _VARIABLE_NUMBER
18210 3c 3d 33 32 37 36 37 0a 74 79 70 65 64 65 66 20  <=32767.typedef 
18220 69 31 36 20 79 6e 56 61 72 3b 0a 23 65 6c 73 65  i16 ynVar;.#else
18230 0a 74 79 70 65 64 65 66 20 69 6e 74 20 79 6e 56  .typedef int ynV
18240 61 72 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  ar;.#endif../*.*
18250 2a 20 45 61 63 68 20 6e 6f 64 65 20 6f 66 20 61  * Each node of a
18260 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 69 6e 20  n expression in 
18270 74 68 65 20 70 61 72 73 65 20 74 72 65 65 20 69  the parse tree i
18280 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 0a 2a 2a  s an instance.**
18290 20 6f 66 20 74 68 69 73 20 73 74 72 75 63 74 75   of this structu
182a0 72 65 2e 0a 2a 2a 0a 2a 2a 20 45 78 70 72 2e 6f  re..**.** Expr.o
182b0 70 20 69 73 20 74 68 65 20 6f 70 63 6f 64 65 2e  p is the opcode.
182c0 20 54 68 65 20 69 6e 74 65 67 65 72 20 70 61 72   The integer par
182d0 73 65 72 20 74 6f 6b 65 6e 20 63 6f 64 65 73 20  ser token codes 
182e0 61 72 65 20 72 65 75 73 65 64 0a 2a 2a 20 61 73  are reused.** as
182f0 20 6f 70 63 6f 64 65 73 20 68 65 72 65 2e 20 46   opcodes here. F
18300 6f 72 20 65 78 61 6d 70 6c 65 2c 20 74 68 65 20  or example, the 
18310 70 61 72 73 65 72 20 64 65 66 69 6e 65 73 20 54  parser defines T
18320 4b 5f 47 45 20 74 6f 20 62 65 20 61 6e 20 69 6e  K_GE to be an in
18330 74 65 67 65 72 0a 2a 2a 20 63 6f 64 65 20 72 65  teger.** code re
18340 70 72 65 73 65 6e 74 69 6e 67 20 74 68 65 20 22  presenting the "
18350 3e 3d 22 20 6f 70 65 72 61 74 6f 72 2e 20 54 68  >=" operator. Th
18360 69 73 20 73 61 6d 65 20 69 6e 74 65 67 65 72 20  is same integer 
18370 63 6f 64 65 20 69 73 20 72 65 75 73 65 64 0a 2a  code is reused.*
18380 2a 20 74 6f 20 72 65 70 72 65 73 65 6e 74 20 74  * to represent t
18390 68 65 20 67 72 65 61 74 65 72 2d 74 68 61 6e 2d  he greater-than-
183a0 6f 72 2d 65 71 75 61 6c 2d 74 6f 20 6f 70 65 72  or-equal-to oper
183b0 61 74 6f 72 20 69 6e 20 74 68 65 20 65 78 70 72  ator in the expr
183c0 65 73 73 69 6f 6e 0a 2a 2a 20 74 72 65 65 2e 0a  ession.** tree..
183d0 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 65 78 70  **.** If the exp
183e0 72 65 73 73 69 6f 6e 20 69 73 20 61 6e 20 53 51  ression is an SQ
183f0 4c 20 6c 69 74 65 72 61 6c 20 28 54 4b 5f 49 4e  L literal (TK_IN
18400 54 45 47 45 52 2c 20 54 4b 5f 46 4c 4f 41 54 2c  TEGER, TK_FLOAT,
18410 20 54 4b 5f 42 4c 4f 42 2c 0a 2a 2a 20 6f 72 20   TK_BLOB,.** or 
18420 54 4b 5f 53 54 52 49 4e 47 29 2c 20 74 68 65 6e  TK_STRING), then
18430 20 45 78 70 72 2e 74 6f 6b 65 6e 20 63 6f 6e 74   Expr.token cont
18440 61 69 6e 73 20 74 68 65 20 74 65 78 74 20 6f 66  ains the text of
18450 20 74 68 65 20 53 51 4c 20 6c 69 74 65 72 61 6c   the SQL literal
18460 2e 20 49 66 0a 2a 2a 20 74 68 65 20 65 78 70 72  . If.** the expr
18470 65 73 73 69 6f 6e 20 69 73 20 61 20 76 61 72 69  ession is a vari
18480 61 62 6c 65 20 28 54 4b 5f 56 41 52 49 41 42 4c  able (TK_VARIABL
18490 45 29 2c 20 74 68 65 6e 20 45 78 70 72 2e 74 6f  E), then Expr.to
184a0 6b 65 6e 20 63 6f 6e 74 61 69 6e 73 20 74 68 65  ken contains the
184b0 0a 2a 2a 20 76 61 72 69 61 62 6c 65 20 6e 61 6d  .** variable nam
184c0 65 2e 20 46 69 6e 61 6c 6c 79 2c 20 69 66 20 74  e. Finally, if t
184d0 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73  he expression is
184e0 20 61 6e 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e   an SQL function
184f0 20 28 54 4b 5f 46 55 4e 43 54 49 4f 4e 29 2c 0a   (TK_FUNCTION),.
18500 2a 2a 20 74 68 65 6e 20 45 78 70 72 2e 74 6f 6b  ** then Expr.tok
18510 65 6e 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20  en contains the 
18520 6e 61 6d 65 20 6f 66 20 74 68 65 20 66 75 6e 63  name of the func
18530 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 45 78 70 72  tion..**.** Expr
18540 2e 70 52 69 67 68 74 20 61 6e 64 20 45 78 70 72  .pRight and Expr
18550 2e 70 4c 65 66 74 20 61 72 65 20 74 68 65 20 6c  .pLeft are the l
18560 65 66 74 20 61 6e 64 20 72 69 67 68 74 20 73 75  eft and right su
18570 62 65 78 70 72 65 73 73 69 6f 6e 73 20 6f 66 20  bexpressions of 
18580 61 0a 2a 2a 20 62 69 6e 61 72 79 20 6f 70 65 72  a.** binary oper
18590 61 74 6f 72 2e 20 45 69 74 68 65 72 20 6f 72 20  ator. Either or 
185a0 62 6f 74 68 20 6d 61 79 20 62 65 20 4e 55 4c 4c  both may be NULL
185b0 2e 0a 2a 2a 0a 2a 2a 20 45 78 70 72 2e 78 2e 70  ..**.** Expr.x.p
185c0 4c 69 73 74 20 69 73 20 61 20 6c 69 73 74 20 6f  List is a list o
185d0 66 20 61 72 67 75 6d 65 6e 74 73 20 69 66 20 74  f arguments if t
185e0 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73  he expression is
185f0 20 61 6e 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e   an SQL function
18600 2c 0a 2a 2a 20 61 20 43 41 53 45 20 65 78 70 72  ,.** a CASE expr
18610 65 73 73 69 6f 6e 20 6f 72 20 61 6e 20 49 4e 20  ession or an IN 
18620 65 78 70 72 65 73 73 69 6f 6e 20 6f 66 20 74 68  expression of th
18630 65 20 66 6f 72 6d 20 22 3c 6c 68 73 3e 20 49 4e  e form "<lhs> IN
18640 20 28 3c 79 3e 2c 20 3c 7a 3e 2e 2e 2e 29 22 2e   (<y>, <z>...)".
18650 0a 2a 2a 20 45 78 70 72 2e 78 2e 70 53 65 6c 65  .** Expr.x.pSele
18660 63 74 20 69 73 20 75 73 65 64 20 69 66 20 74 68  ct is used if th
18670 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20  e expression is 
18680 61 20 73 75 62 2d 73 65 6c 65 63 74 20 6f 72 20  a sub-select or 
18690 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 6f 66  an expression of
186a0 0a 2a 2a 20 74 68 65 20 66 6f 72 6d 20 22 3c 6c  .** the form "<l
186b0 68 73 3e 20 49 4e 20 28 53 45 4c 45 43 54 20 2e  hs> IN (SELECT .
186c0 2e 2e 29 22 2e 20 49 66 20 74 68 65 20 45 50 5f  ..)". If the EP_
186d0 78 49 73 53 65 6c 65 63 74 20 62 69 74 20 69 73  xIsSelect bit is
186e0 20 73 65 74 20 69 6e 20 74 68 65 0a 2a 2a 20 45   set in the.** E
186f0 78 70 72 2e 66 6c 61 67 73 20 6d 61 73 6b 2c 20  xpr.flags mask, 
18700 74 68 65 6e 20 45 78 70 72 2e 78 2e 70 53 65 6c  then Expr.x.pSel
18710 65 63 74 20 69 73 20 76 61 6c 69 64 2e 20 4f 74  ect is valid. Ot
18720 68 65 72 77 69 73 65 2c 20 45 78 70 72 2e 78 2e  herwise, Expr.x.
18730 70 4c 69 73 74 20 69 73 0a 2a 2a 20 76 61 6c 69  pList is.** vali
18740 64 2e 0a 2a 2a 0a 2a 2a 20 41 6e 20 65 78 70 72  d..**.** An expr
18750 65 73 73 69 6f 6e 20 6f 66 20 74 68 65 20 66 6f  ession of the fo
18760 72 6d 20 49 44 20 6f 72 20 49 44 2e 49 44 20 72  rm ID or ID.ID r
18770 65 66 65 72 73 20 74 6f 20 61 20 63 6f 6c 75 6d  efers to a colum
18780 6e 20 69 6e 20 61 20 74 61 62 6c 65 2e 0a 2a 2a  n in a table..**
18790 20 46 6f 72 20 73 75 63 68 20 65 78 70 72 65 73   For such expres
187a0 73 69 6f 6e 73 2c 20 45 78 70 72 2e 6f 70 20 69  sions, Expr.op i
187b0 73 20 73 65 74 20 74 6f 20 54 4b 5f 43 4f 4c 55  s set to TK_COLU
187c0 4d 4e 20 61 6e 64 20 45 78 70 72 2e 69 54 61 62  MN and Expr.iTab
187d0 6c 65 20 69 73 0a 2a 2a 20 74 68 65 20 69 6e 74  le is.** the int
187e0 65 67 65 72 20 63 75 72 73 6f 72 20 6e 75 6d 62  eger cursor numb
187f0 65 72 20 6f 66 20 61 20 56 44 42 45 20 63 75 72  er of a VDBE cur
18800 73 6f 72 20 70 6f 69 6e 74 69 6e 67 20 74 6f 20  sor pointing to 
18810 74 68 61 74 20 74 61 62 6c 65 20 61 6e 64 0a 2a  that table and.*
18820 2a 20 45 78 70 72 2e 69 43 6f 6c 75 6d 6e 20 69  * Expr.iColumn i
18830 73 20 74 68 65 20 63 6f 6c 75 6d 6e 20 6e 75 6d  s the column num
18840 62 65 72 20 66 6f 72 20 74 68 65 20 73 70 65 63  ber for the spec
18850 69 66 69 63 20 63 6f 6c 75 6d 6e 2e 20 20 49 66  ific column.  If
18860 20 74 68 65 0a 2a 2a 20 65 78 70 72 65 73 73 69   the.** expressi
18870 6f 6e 20 69 73 20 75 73 65 64 20 61 73 20 61 20  on is used as a 
18880 72 65 73 75 6c 74 20 69 6e 20 61 6e 20 61 67 67  result in an agg
18890 72 65 67 61 74 65 20 53 45 4c 45 43 54 2c 20 74  regate SELECT, t
188a0 68 65 6e 20 74 68 65 0a 2a 2a 20 76 61 6c 75 65  hen the.** value
188b0 20 69 73 20 61 6c 73 6f 20 73 74 6f 72 65 64 20   is also stored 
188c0 69 6e 20 74 68 65 20 45 78 70 72 2e 69 41 67 67  in the Expr.iAgg
188d0 20 63 6f 6c 75 6d 6e 20 69 6e 20 74 68 65 20 61   column in the a
188e0 67 67 72 65 67 61 74 65 20 73 6f 20 74 68 61 74  ggregate so that
188f0 0a 2a 2a 20 69 74 20 63 61 6e 20 62 65 20 61 63  .** it can be ac
18900 63 65 73 73 65 64 20 61 66 74 65 72 20 61 6c 6c  cessed after all
18910 20 61 67 67 72 65 67 61 74 65 73 20 61 72 65 20   aggregates are 
18920 63 6f 6d 70 75 74 65 64 2e 0a 2a 2a 0a 2a 2a 20  computed..**.** 
18930 49 66 20 74 68 65 20 65 78 70 72 65 73 73 69 6f  If the expressio
18940 6e 20 69 73 20 61 6e 20 75 6e 62 6f 75 6e 64 20  n is an unbound 
18950 76 61 72 69 61 62 6c 65 20 6d 61 72 6b 65 72 20  variable marker 
18960 28 61 20 71 75 65 73 74 69 6f 6e 20 6d 61 72 6b  (a question mark
18970 0a 2a 2a 20 63 68 61 72 61 63 74 65 72 20 27 3f  .** character '?
18980 27 20 69 6e 20 74 68 65 20 6f 72 69 67 69 6e 61  ' in the origina
18990 6c 20 53 51 4c 29 20 74 68 65 6e 20 74 68 65 20  l SQL) then the 
189a0 45 78 70 72 2e 69 54 61 62 6c 65 20 68 6f 6c 64  Expr.iTable hold
189b0 73 20 74 68 65 20 69 6e 64 65 78 0a 2a 2a 20 6e  s the index.** n
189c0 75 6d 62 65 72 20 66 6f 72 20 74 68 61 74 20 76  umber for that v
189d0 61 72 69 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49  ariable..**.** I
189e0 66 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e  f the expression
189f0 20 69 73 20 61 20 73 75 62 71 75 65 72 79 20 74   is a subquery t
18a00 68 65 6e 20 45 78 70 72 2e 69 43 6f 6c 75 6d 6e  hen Expr.iColumn
18a10 20 68 6f 6c 64 73 20 61 6e 20 69 6e 74 65 67 65   holds an intege
18a20 72 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 6e 75  r.** register nu
18a30 6d 62 65 72 20 63 6f 6e 74 61 69 6e 69 6e 67 20  mber containing 
18a40 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20 74 68  the result of th
18a50 65 20 73 75 62 71 75 65 72 79 2e 20 20 49 66 20  e subquery.  If 
18a60 74 68 65 0a 2a 2a 20 73 75 62 71 75 65 72 79 20  the.** subquery 
18a70 67 69 76 65 73 20 61 20 63 6f 6e 73 74 61 6e 74  gives a constant
18a80 20 72 65 73 75 6c 74 2c 20 74 68 65 6e 20 69 54   result, then iT
18a90 61 62 6c 65 20 69 73 20 2d 31 2e 20 20 49 66 20  able is -1.  If 
18aa0 74 68 65 20 73 75 62 71 75 65 72 79 0a 2a 2a 20  the subquery.** 
18ab0 67 69 76 65 73 20 61 20 64 69 66 66 65 72 65 6e  gives a differen
18ac0 74 20 61 6e 73 77 65 72 20 61 74 20 64 69 66 66  t answer at diff
18ad0 65 72 65 6e 74 20 74 69 6d 65 73 20 64 75 72 69  erent times duri
18ae0 6e 67 20 73 74 61 74 65 6d 65 6e 74 20 70 72 6f  ng statement pro
18af0 63 65 73 73 69 6e 67 0a 2a 2a 20 74 68 65 6e 20  cessing.** then 
18b00 69 54 61 62 6c 65 20 69 73 20 74 68 65 20 61 64  iTable is the ad
18b10 64 72 65 73 73 20 6f 66 20 61 20 73 75 62 72 6f  dress of a subro
18b20 75 74 69 6e 65 20 74 68 61 74 20 63 6f 6d 70 75  utine that compu
18b30 74 65 73 20 74 68 65 20 73 75 62 71 75 65 72 79  tes the subquery
18b40 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 45  ..**.** If the E
18b50 78 70 72 20 69 73 20 6f 66 20 74 79 70 65 20 4f  xpr is of type O
18b60 50 5f 43 6f 6c 75 6d 6e 2c 20 61 6e 64 20 74 68  P_Column, and th
18b70 65 20 74 61 62 6c 65 20 69 74 20 69 73 20 73 65  e table it is se
18b80 6c 65 63 74 69 6e 67 20 66 72 6f 6d 0a 2a 2a 20  lecting from.** 
18b90 69 73 20 61 20 64 69 73 6b 20 74 61 62 6c 65 20  is a disk table 
18ba0 6f 72 20 74 68 65 20 22 6f 6c 64 2e 2a 22 20 70  or the "old.*" p
18bb0 73 65 75 64 6f 2d 74 61 62 6c 65 2c 20 74 68 65  seudo-table, the
18bc0 6e 20 70 54 61 62 20 70 6f 69 6e 74 73 20 74 6f  n pTab points to
18bd0 20 74 68 65 0a 2a 2a 20 63 6f 72 72 65 73 70 6f   the.** correspo
18be0 6e 64 69 6e 67 20 74 61 62 6c 65 20 64 65 66 69  nding table defi
18bf0 6e 69 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 41 4c  nition..**.** AL
18c00 4c 4f 43 41 54 49 4f 4e 20 4e 4f 54 45 53 3a 0a  LOCATION NOTES:.
18c10 2a 2a 0a 2a 2a 20 45 78 70 72 20 6f 62 6a 65 63  **.** Expr objec
18c20 74 73 20 63 61 6e 20 75 73 65 20 61 20 6c 6f 74  ts can use a lot
18c30 20 6f 66 20 6d 65 6d 6f 72 79 20 73 70 61 63 65   of memory space
18c40 20 69 6e 20 64 61 74 61 62 61 73 65 20 73 63 68   in database sch
18c50 65 6d 61 2e 20 20 54 6f 0a 2a 2a 20 68 65 6c 70  ema.  To.** help
18c60 20 72 65 64 75 63 65 20 6d 65 6d 6f 72 79 20 72   reduce memory r
18c70 65 71 75 69 72 65 6d 65 6e 74 73 2c 20 73 6f 6d  equirements, som
18c80 65 74 69 6d 65 73 20 61 6e 20 45 78 70 72 20 6f  etimes an Expr o
18c90 62 6a 65 63 74 20 77 69 6c 6c 20 62 65 0a 2a 2a  bject will be.**
18ca0 20 74 72 75 6e 63 61 74 65 64 2e 20 20 41 6e 64   truncated.  And
18cb0 20 74 6f 20 72 65 64 75 63 65 20 74 68 65 20 6e   to reduce the n
18cc0 75 6d 62 65 72 20 6f 66 20 6d 65 6d 6f 72 79 20  umber of memory 
18cd0 61 6c 6c 6f 63 61 74 69 6f 6e 73 2c 20 73 6f 6d  allocations, som
18ce0 65 74 69 6d 65 73 0a 2a 2a 20 74 77 6f 20 6f 72  etimes.** two or
18cf0 20 6d 6f 72 65 20 45 78 70 72 20 6f 62 6a 65 63   more Expr objec
18d00 74 73 20 77 69 6c 6c 20 62 65 20 73 74 6f 72 65  ts will be store
18d10 64 20 69 6e 20 61 20 73 69 6e 67 6c 65 20 6d 65  d in a single me
18d20 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 2c  mory allocation,
18d30 0a 2a 2a 20 74 6f 67 65 74 68 65 72 20 77 69 74  .** together wit
18d40 68 20 45 78 70 72 2e 7a 54 6f 6b 65 6e 20 73 74  h Expr.zToken st
18d50 72 69 6e 67 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  rings..**.** If 
18d60 74 68 65 20 45 50 5f 52 65 64 75 63 65 64 20 61  the EP_Reduced a
18d70 6e 64 20 45 50 5f 54 6f 6b 65 6e 4f 6e 6c 79 20  nd EP_TokenOnly 
18d80 66 6c 61 67 73 20 61 72 65 20 73 65 74 20 77 68  flags are set wh
18d90 65 6e 0a 2a 2a 20 61 6e 20 45 78 70 72 20 6f 62  en.** an Expr ob
18da0 6a 65 63 74 20 69 73 20 74 72 75 6e 63 61 74 65  ject is truncate
18db0 64 2e 20 20 57 68 65 6e 20 45 50 5f 52 65 64 75  d.  When EP_Redu
18dc0 63 65 64 20 69 73 20 73 65 74 2c 20 74 68 65 6e  ced is set, then
18dd0 20 61 6c 6c 0a 2a 2a 20 74 68 65 20 63 68 69 6c   all.** the chil
18de0 64 20 45 78 70 72 20 6f 62 6a 65 63 74 73 20 69  d Expr objects i
18df0 6e 20 74 68 65 20 45 78 70 72 2e 70 4c 65 66 74  n the Expr.pLeft
18e00 20 61 6e 64 20 45 78 70 72 2e 70 52 69 67 68 74   and Expr.pRight
18e10 20 73 75 62 74 72 65 65 73 0a 2a 2a 20 61 72 65   subtrees.** are
18e20 20 63 6f 6e 74 61 69 6e 65 64 20 77 69 74 68 69   contained withi
18e30 6e 20 74 68 65 20 73 61 6d 65 20 6d 65 6d 6f 72  n the same memor
18e40 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 2e 20 20 4e  y allocation.  N
18e50 6f 74 65 2c 20 68 6f 77 65 76 65 72 2c 20 74 68  ote, however, th
18e60 61 74 0a 2a 2a 20 74 68 65 20 73 75 62 74 72 65  at.** the subtre
18e70 65 73 20 69 6e 20 45 78 70 72 2e 78 2e 70 4c 69  es in Expr.x.pLi
18e80 73 74 20 6f 72 20 45 78 70 72 2e 78 2e 70 53 65  st or Expr.x.pSe
18e90 6c 65 63 74 20 61 72 65 20 61 6c 77 61 79 73 20  lect are always 
18ea0 73 65 70 61 72 61 74 65 6c 79 0a 2a 2a 20 61 6c  separately.** al
18eb0 6c 6f 63 61 74 65 64 2c 20 72 65 67 61 72 64 6c  located, regardl
18ec0 65 73 73 20 6f 66 20 77 68 65 74 68 65 72 20 6f  ess of whether o
18ed0 72 20 6e 6f 74 20 45 50 5f 52 65 64 75 63 65 64  r not EP_Reduced
18ee0 20 69 73 20 73 65 74 2e 0a 2a 2f 0a 73 74 72 75   is set..*/.stru
18ef0 63 74 20 45 78 70 72 20 7b 0a 20 20 75 38 20 6f  ct Expr {.  u8 o
18f00 70 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  p;              
18f10 20 20 20 2f 2a 20 4f 70 65 72 61 74 69 6f 6e 20     /* Operation 
18f20 70 65 72 66 6f 72 6d 65 64 20 62 79 20 74 68 69  performed by thi
18f30 73 20 6e 6f 64 65 20 2a 2f 0a 20 20 63 68 61 72  s node */.  char
18f40 20 61 66 66 69 6e 69 74 79 3b 20 20 20 20 20 20   affinity;      
18f50 20 20 20 2f 2a 20 54 68 65 20 61 66 66 69 6e 69     /* The affini
18f60 74 79 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e  ty of the column
18f70 20 6f 72 20 30 20 69 66 20 6e 6f 74 20 61 20 63   or 0 if not a c
18f80 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 75 33 32 20 66  olumn */.  u32 f
18f90 6c 61 67 73 3b 20 20 20 20 20 20 20 20 20 20 20  lags;           
18fa0 20 20 2f 2a 20 56 61 72 69 6f 75 73 20 66 6c 61    /* Various fla
18fb0 67 73 2e 20 20 45 50 5f 2a 20 53 65 65 20 62 65  gs.  EP_* See be
18fc0 6c 6f 77 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b  low */.  union {
18fd0 0a 20 20 20 20 63 68 61 72 20 2a 7a 54 6f 6b 65  .    char *zToke
18fe0 6e 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54  n;          /* T
18ff0 6f 6b 65 6e 20 76 61 6c 75 65 2e 20 5a 65 72 6f  oken value. Zero
19000 20 74 65 72 6d 69 6e 61 74 65 64 20 61 6e 64 20   terminated and 
19010 64 65 71 75 6f 74 65 64 20 2a 2f 0a 20 20 20 20  dequoted */.    
19020 69 6e 74 20 69 56 61 6c 75 65 3b 20 20 20 20 20  int iValue;     
19030 20 20 20 20 20 20 20 2f 2a 20 4e 6f 6e 2d 6e 65         /* Non-ne
19040 67 61 74 69 76 65 20 69 6e 74 65 67 65 72 20 76  gative integer v
19050 61 6c 75 65 20 69 66 20 45 50 5f 49 6e 74 56 61  alue if EP_IntVa
19060 6c 75 65 20 2a 2f 0a 20 20 7d 20 75 3b 0a 0a 20  lue */.  } u;.. 
19070 20 2f 2a 20 49 66 20 74 68 65 20 45 50 5f 54 6f   /* If the EP_To
19080 6b 65 6e 4f 6e 6c 79 20 66 6c 61 67 20 69 73 20  kenOnly flag is 
19090 73 65 74 20 69 6e 20 74 68 65 20 45 78 70 72 2e  set in the Expr.
190a0 66 6c 61 67 73 20 6d 61 73 6b 2c 20 74 68 65 6e  flags mask, then
190b0 20 6e 6f 0a 20 20 2a 2a 20 73 70 61 63 65 20 69   no.  ** space i
190c0 73 20 61 6c 6c 6f 63 61 74 65 64 20 66 6f 72 20  s allocated for 
190d0 74 68 65 20 66 69 65 6c 64 73 20 62 65 6c 6f 77  the fields below
190e0 20 74 68 69 73 20 70 6f 69 6e 74 2e 20 41 6e 20   this point. An 
190f0 61 74 74 65 6d 70 74 20 74 6f 0a 20 20 2a 2a 20  attempt to.  ** 
19100 61 63 63 65 73 73 20 74 68 65 6d 20 77 69 6c 6c  access them will
19110 20 72 65 73 75 6c 74 20 69 6e 20 61 20 73 65 67   result in a seg
19120 66 61 75 6c 74 20 6f 72 20 6d 61 6c 66 75 6e 63  fault or malfunc
19130 74 69 6f 6e 2e 0a 20 20 2a 2a 2a 2a 2a 2a 2a 2a  tion..  ********
19140 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
19150 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
19160 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
19170 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a  *************/..
19180 20 20 45 78 70 72 20 2a 70 4c 65 66 74 3b 20 20    Expr *pLeft;  
19190 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 65 66 74           /* Left
191a0 20 73 75 62 6e 6f 64 65 20 2a 2f 0a 20 20 45 78   subnode */.  Ex
191b0 70 72 20 2a 70 52 69 67 68 74 3b 20 20 20 20 20  pr *pRight;     
191c0 20 20 20 20 20 2f 2a 20 52 69 67 68 74 20 73 75       /* Right su
191d0 62 6e 6f 64 65 20 2a 2f 0a 20 20 75 6e 69 6f 6e  bnode */.  union
191e0 20 7b 0a 20 20 20 20 45 78 70 72 4c 69 73 74 20   {.    ExprList 
191f0 2a 70 4c 69 73 74 3b 20 20 20 20 20 2f 2a 20 6f  *pList;     /* o
19200 70 20 3d 20 49 4e 2c 20 45 58 49 53 54 53 2c 20  p = IN, EXISTS, 
19210 53 45 4c 45 43 54 2c 20 43 41 53 45 2c 20 46 55  SELECT, CASE, FU
19220 4e 43 54 49 4f 4e 2c 20 42 45 54 57 45 45 4e 20  NCTION, BETWEEN 
19230 2a 2f 0a 20 20 20 20 53 65 6c 65 63 74 20 2a 70  */.    Select *p
19240 53 65 6c 65 63 74 3b 20 20 20 20 20 2f 2a 20 45  Select;     /* E
19250 50 5f 78 49 73 53 65 6c 65 63 74 20 61 6e 64 20  P_xIsSelect and 
19260 6f 70 20 3d 20 49 4e 2c 20 45 58 49 53 54 53 2c  op = IN, EXISTS,
19270 20 53 45 4c 45 43 54 20 2a 2f 0a 20 20 7d 20 78   SELECT */.  } x
19280 3b 0a 0a 20 20 2f 2a 20 49 66 20 74 68 65 20 45  ;..  /* If the E
19290 50 5f 52 65 64 75 63 65 64 20 66 6c 61 67 20 69  P_Reduced flag i
192a0 73 20 73 65 74 20 69 6e 20 74 68 65 20 45 78 70  s set in the Exp
192b0 72 2e 66 6c 61 67 73 20 6d 61 73 6b 2c 20 74 68  r.flags mask, th
192c0 65 6e 20 6e 6f 0a 20 20 2a 2a 20 73 70 61 63 65  en no.  ** space
192d0 20 69 73 20 61 6c 6c 6f 63 61 74 65 64 20 66 6f   is allocated fo
192e0 72 20 74 68 65 20 66 69 65 6c 64 73 20 62 65 6c  r the fields bel
192f0 6f 77 20 74 68 69 73 20 70 6f 69 6e 74 2e 20 41  ow this point. A
19300 6e 20 61 74 74 65 6d 70 74 20 74 6f 0a 20 20 2a  n attempt to.  *
19310 2a 20 61 63 63 65 73 73 20 74 68 65 6d 20 77 69  * access them wi
19320 6c 6c 20 72 65 73 75 6c 74 20 69 6e 20 61 20 73  ll result in a s
19330 65 67 66 61 75 6c 74 20 6f 72 20 6d 61 6c 66 75  egfault or malfu
19340 6e 63 74 69 6f 6e 2e 0a 20 20 2a 2a 2a 2a 2a 2a  nction..  ******
19350 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
19360 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
19370 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
19380 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f  ***************/
19390 0a 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d 41 58  ..#if SQLITE_MAX
193a0 5f 45 58 50 52 5f 44 45 50 54 48 3e 30 0a 20 20  _EXPR_DEPTH>0.  
193b0 69 6e 74 20 6e 48 65 69 67 68 74 3b 20 20 20 20  int nHeight;    
193c0 20 20 20 20 20 20 20 2f 2a 20 48 65 69 67 68 74         /* Height
193d0 20 6f 66 20 74 68 65 20 74 72 65 65 20 68 65 61   of the tree hea
193e0 64 65 64 20 62 79 20 74 68 69 73 20 6e 6f 64 65  ded by this node
193f0 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 69 6e 74   */.#endif.  int
19400 20 69 54 61 62 6c 65 3b 20 20 20 20 20 20 20 20   iTable;        
19410 20 20 20 20 2f 2a 20 54 4b 5f 43 4f 4c 55 4d 4e      /* TK_COLUMN
19420 3a 20 63 75 72 73 6f 72 20 6e 75 6d 62 65 72 20  : cursor number 
19430 6f 66 20 74 61 62 6c 65 20 68 6f 6c 64 69 6e 67  of table holding
19440 20 63 6f 6c 75 6d 6e 0a 20 20 20 20 20 20 20 20   column.        
19450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19460 20 2a 2a 20 54 4b 5f 52 45 47 49 53 54 45 52 3a   ** TK_REGISTER:
19470 20 72 65 67 69 73 74 65 72 20 6e 75 6d 62 65 72   register number
19480 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
19490 20 20 20 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f            ** TK_
194a0 54 52 49 47 47 45 52 3a 20 31 20 2d 3e 20 6e 65  TRIGGER: 1 -> ne
194b0 77 2c 20 30 20 2d 3e 20 6f 6c 64 0a 20 20 20 20  w, 0 -> old.    
194c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
194d0 20 20 20 20 20 2a 2a 20 45 50 5f 55 6e 6c 69 6b       ** EP_Unlik
194e0 65 6c 79 3a 20 20 31 33 34 32 31 37 37 32 38 20  ely:  134217728 
194f0 74 69 6d 65 73 20 6c 69 6b 65 6c 69 68 6f 6f 64  times likelihood
19500 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
19510 20 20 20 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f            ** TK_
19520 53 45 4c 45 43 54 3a 20 31 73 74 20 72 65 67 69  SELECT: 1st regi
19530 73 74 65 72 20 6f 66 20 72 65 73 75 6c 74 20 76  ster of result v
19540 65 63 74 6f 72 20 2a 2f 0a 20 20 79 6e 56 61 72  ector */.  ynVar
19550 20 69 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20   iColumn;       
19560 20 20 2f 2a 20 54 4b 5f 43 4f 4c 55 4d 4e 3a 20    /* TK_COLUMN: 
19570 63 6f 6c 75 6d 6e 20 69 6e 64 65 78 2e 20 20 2d  column index.  -
19580 31 20 66 6f 72 20 72 6f 77 69 64 2e 0a 20 20 20  1 for rowid..   
19590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
195a0 20 20 20 20 20 20 2a 2a 20 54 4b 5f 56 41 52 49        ** TK_VARI
195b0 41 42 4c 45 3a 20 76 61 72 69 61 62 6c 65 20 6e  ABLE: variable n
195c0 75 6d 62 65 72 20 28 61 6c 77 61 79 73 20 3e 3d  umber (always >=
195d0 20 31 29 2e 0a 20 20 20 20 20 20 20 20 20 20 20   1)..           
195e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a                **
195f0 20 54 4b 5f 53 45 4c 45 43 54 5f 43 4f 4c 55 4d   TK_SELECT_COLUM
19600 4e 3a 20 63 6f 6c 75 6d 6e 20 6f 66 20 74 68 65  N: column of the
19610 20 72 65 73 75 6c 74 20 76 65 63 74 6f 72 20 2a   result vector *
19620 2f 0a 20 20 69 31 36 20 69 41 67 67 3b 20 20 20  /.  i16 iAgg;   
19630 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57 68             /* Wh
19640 69 63 68 20 65 6e 74 72 79 20 69 6e 20 70 41 67  ich entry in pAg
19650 67 49 6e 66 6f 2d 3e 61 43 6f 6c 5b 5d 20 6f 72  gInfo->aCol[] or
19660 20 2d 3e 61 46 75 6e 63 5b 5d 20 2a 2f 0a 20 20   ->aFunc[] */.  
19670 69 31 36 20 69 52 69 67 68 74 4a 6f 69 6e 54 61  i16 iRightJoinTa
19680 62 6c 65 3b 20 20 20 2f 2a 20 49 66 20 45 50 5f  ble;   /* If EP_
19690 46 72 6f 6d 4a 6f 69 6e 2c 20 74 68 65 20 72 69  FromJoin, the ri
196a0 67 68 74 20 74 61 62 6c 65 20 6f 66 20 74 68 65  ght table of the
196b0 20 6a 6f 69 6e 20 2a 2f 0a 20 20 75 38 20 6f 70   join */.  u8 op
196c0 32 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  2;              
196d0 20 20 2f 2a 20 54 4b 5f 52 45 47 49 53 54 45 52    /* TK_REGISTER
196e0 3a 20 6f 72 69 67 69 6e 61 6c 20 76 61 6c 75 65  : original value
196f0 20 6f 66 20 45 78 70 72 2e 6f 70 0a 20 20 20 20   of Expr.op.    
19700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19710 20 20 20 20 20 2a 2a 20 54 4b 5f 43 4f 4c 55 4d       ** TK_COLUM
19720 4e 3a 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20  N: the value of 
19730 70 35 20 66 6f 72 20 4f 50 5f 43 6f 6c 75 6d 6e  p5 for OP_Column
19740 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
19750 20 20 20 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f            ** TK_
19760 41 47 47 5f 46 55 4e 43 54 49 4f 4e 3a 20 6e 65  AGG_FUNCTION: ne
19770 73 74 69 6e 67 20 64 65 70 74 68 20 2a 2f 0a 20  sting depth */. 
19780 20 41 67 67 49 6e 66 6f 20 2a 70 41 67 67 49 6e   AggInfo *pAggIn
19790 66 6f 3b 20 20 20 20 20 2f 2a 20 55 73 65 64 20  fo;     /* Used 
197a0 62 79 20 54 4b 5f 41 47 47 5f 43 4f 4c 55 4d 4e  by TK_AGG_COLUMN
197b0 20 61 6e 64 20 54 4b 5f 41 47 47 5f 46 55 4e 43   and TK_AGG_FUNC
197c0 54 49 4f 4e 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20  TION */.  union 
197d0 7b 0a 20 20 20 20 54 61 62 6c 65 20 2a 70 54 61  {.    Table *pTa
197e0 62 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  b;           /* 
197f0 54 4b 5f 43 4f 4c 55 4d 4e 3a 20 54 61 62 6c 65  TK_COLUMN: Table
19800 20 63 6f 6e 74 61 69 6e 69 6e 67 20 63 6f 6c 75   containing colu
19810 6d 6e 2e 20 43 61 6e 20 62 65 20 4e 55 4c 4c 0a  mn. Can be NULL.
19820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19830 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 66 6f             ** fo
19840 72 20 61 20 63 6f 6c 75 6d 6e 20 6f 66 20 61 6e  r a column of an
19850 20 69 6e 64 65 78 20 6f 6e 20 61 6e 20 65 78 70   index on an exp
19860 72 65 73 73 69 6f 6e 20 2a 2f 0a 20 20 20 20 57  ression */.    W
19870 69 6e 64 6f 77 20 2a 70 57 69 6e 3b 20 20 20 20  indow *pWin;    
19880 20 20 20 20 20 20 2f 2a 20 54 4b 5f 46 55 4e 43        /* TK_FUNC
19890 54 49 4f 4e 3a 20 57 69 6e 64 6f 77 20 64 65 66  TION: Window def
198a0 69 6e 69 74 69 6f 6e 20 66 6f 72 20 74 68 65 20  inition for the 
198b0 66 75 6e 63 20 2a 2f 0a 20 20 7d 20 79 3b 0a 7d  func */.  } y;.}
198c0 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c  ;../*.** The fol
198d0 6c 6f 77 69 6e 67 20 61 72 65 20 74 68 65 20 6d  lowing are the m
198e0 65 61 6e 69 6e 67 73 20 6f 66 20 62 69 74 73 20  eanings of bits 
198f0 69 6e 20 74 68 65 20 45 78 70 72 2e 66 6c 61 67  in the Expr.flag
19900 73 20 66 69 65 6c 64 2e 0a 2a 2f 0a 23 64 65 66  s field..*/.#def
19910 69 6e 65 20 45 50 5f 46 72 6f 6d 4a 6f 69 6e 20  ine EP_FromJoin 
19920 20 30 78 30 30 30 30 30 31 20 2f 2a 20 4f 72 69   0x000001 /* Ori
19930 67 69 6e 61 74 65 73 20 69 6e 20 4f 4e 2f 55 53  ginates in ON/US
19940 49 4e 47 20 63 6c 61 75 73 65 20 6f 66 20 6f 75  ING clause of ou
19950 74 65 72 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66  ter join */.#def
19960 69 6e 65 20 45 50 5f 41 67 67 20 20 20 20 20 20  ine EP_Agg      
19970 20 30 78 30 30 30 30 30 32 20 2f 2a 20 43 6f 6e   0x000002 /* Con
19980 74 61 69 6e 73 20 6f 6e 65 20 6f 72 20 6d 6f 72  tains one or mor
19990 65 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63  e aggregate func
199a0 74 69 6f 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65  tions */.#define
199b0 20 45 50 5f 48 61 73 46 75 6e 63 20 20 20 30 78   EP_HasFunc   0x
199c0 30 30 30 30 30 34 20 2f 2a 20 43 6f 6e 74 61 69  000004 /* Contai
199d0 6e 73 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 66  ns one or more f
199e0 75 6e 63 74 69 6f 6e 73 20 6f 66 20 61 6e 79 20  unctions of any 
199f0 6b 69 6e 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20  kind */.#define 
19a00 45 50 5f 46 69 78 65 64 43 6f 6c 20 20 30 78 30  EP_FixedCol  0x0
19a10 30 30 30 30 38 20 2f 2a 20 54 4b 5f 43 6f 6c 75  00008 /* TK_Colu
19a20 6d 6e 20 77 69 74 68 20 61 20 6b 6e 6f 77 6e 20  mn with a known 
19a30 66 69 78 65 64 20 76 61 6c 75 65 20 2a 2f 0a 23  fixed value */.#
19a40 64 65 66 69 6e 65 20 45 50 5f 44 69 73 74 69 6e  define EP_Distin
19a50 63 74 20 20 30 78 30 30 30 30 31 30 20 2f 2a 20  ct  0x000010 /* 
19a60 41 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69  Aggregate functi
19a70 6f 6e 20 77 69 74 68 20 44 49 53 54 49 4e 43 54  on with DISTINCT
19a80 20 6b 65 79 77 6f 72 64 20 2a 2f 0a 23 64 65 66   keyword */.#def
19a90 69 6e 65 20 45 50 5f 56 61 72 53 65 6c 65 63 74  ine EP_VarSelect
19aa0 20 30 78 30 30 30 30 32 30 20 2f 2a 20 70 53 65   0x000020 /* pSe
19ab0 6c 65 63 74 20 69 73 20 63 6f 72 72 65 6c 61 74  lect is correlat
19ac0 65 64 2c 20 6e 6f 74 20 63 6f 6e 73 74 61 6e 74  ed, not constant
19ad0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 44   */.#define EP_D
19ae0 62 6c 51 75 6f 74 65 64 20 30 78 30 30 30 30 34  blQuoted 0x00004
19af0 30 20 2f 2a 20 74 6f 6b 65 6e 2e 7a 20 77 61 73  0 /* token.z was
19b00 20 6f 72 69 67 69 6e 61 6c 6c 79 20 69 6e 20 22   originally in "
19b10 2e 2e 2e 22 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ..." */.#define 
19b20 45 50 5f 49 6e 66 69 78 46 75 6e 63 20 30 78 30  EP_InfixFunc 0x0
19b30 30 30 30 38 30 20 2f 2a 20 54 72 75 65 20 66 6f  00080 /* True fo
19b40 72 20 61 6e 20 69 6e 66 69 78 20 66 75 6e 63 74  r an infix funct
19b50 69 6f 6e 3a 20 4c 49 4b 45 2c 20 47 4c 4f 42 2c  ion: LIKE, GLOB,
19b60 20 65 74 63 20 2a 2f 0a 23 64 65 66 69 6e 65 20   etc */.#define 
19b70 45 50 5f 43 6f 6c 6c 61 74 65 20 20 20 30 78 30  EP_Collate   0x0
19b80 30 30 31 30 30 20 2f 2a 20 54 72 65 65 20 63 6f  00100 /* Tree co
19b90 6e 74 61 69 6e 73 20 61 20 54 4b 5f 43 4f 4c 4c  ntains a TK_COLL
19ba0 41 54 45 20 6f 70 65 72 61 74 6f 72 20 2a 2f 0a  ATE operator */.
19bb0 23 64 65 66 69 6e 65 20 45 50 5f 47 65 6e 65 72  #define EP_Gener
19bc0 69 63 20 20 20 30 78 30 30 30 32 30 30 20 2f 2a  ic   0x000200 /*
19bd0 20 49 67 6e 6f 72 65 20 43 4f 4c 4c 41 54 45 20   Ignore COLLATE 
19be0 6f 72 20 61 66 66 69 6e 69 74 79 20 6f 6e 20 74  or affinity on t
19bf0 68 69 73 20 74 72 65 65 20 2a 2f 0a 23 64 65 66  his tree */.#def
19c00 69 6e 65 20 45 50 5f 49 6e 74 56 61 6c 75 65 20  ine EP_IntValue 
19c10 20 30 78 30 30 30 34 30 30 20 2f 2a 20 49 6e 74   0x000400 /* Int
19c20 65 67 65 72 20 76 61 6c 75 65 20 63 6f 6e 74 61  eger value conta
19c30 69 6e 65 64 20 69 6e 20 75 2e 69 56 61 6c 75 65  ined in u.iValue
19c40 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 78   */.#define EP_x
19c50 49 73 53 65 6c 65 63 74 20 30 78 30 30 30 38 30  IsSelect 0x00080
19c60 30 20 2f 2a 20 78 2e 70 53 65 6c 65 63 74 20 69  0 /* x.pSelect i
19c70 73 20 76 61 6c 69 64 20 28 6f 74 68 65 72 77 69  s valid (otherwi
19c80 73 65 20 78 2e 70 4c 69 73 74 20 69 73 29 20 2a  se x.pList is) *
19c90 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 53 6b 69  /.#define EP_Ski
19ca0 70 20 20 20 20 20 20 30 78 30 30 31 30 30 30 20  p      0x001000 
19cb0 2f 2a 20 43 4f 4c 4c 41 54 45 2c 20 41 53 2c 20  /* COLLATE, AS, 
19cc0 6f 72 20 55 4e 4c 49 4b 45 4c 59 20 2a 2f 0a 23  or UNLIKELY */.#
19cd0 64 65 66 69 6e 65 20 45 50 5f 52 65 64 75 63 65  define EP_Reduce
19ce0 64 20 20 20 30 78 30 30 32 30 30 30 20 2f 2a 20  d   0x002000 /* 
19cf0 45 78 70 72 20 73 74 72 75 63 74 20 45 58 50 52  Expr struct EXPR
19d00 5f 52 45 44 55 43 45 44 53 49 5a 45 20 62 79 74  _REDUCEDSIZE byt
19d10 65 73 20 6f 6e 6c 79 20 2a 2f 0a 23 64 65 66 69  es only */.#defi
19d20 6e 65 20 45 50 5f 54 6f 6b 65 6e 4f 6e 6c 79 20  ne EP_TokenOnly 
19d30 30 78 30 30 34 30 30 30 20 2f 2a 20 45 78 70 72  0x004000 /* Expr
19d40 20 73 74 72 75 63 74 20 45 58 50 52 5f 54 4f 4b   struct EXPR_TOK
19d50 45 4e 4f 4e 4c 59 53 49 5a 45 20 62 79 74 65 73  ENONLYSIZE bytes
19d60 20 6f 6e 6c 79 20 2a 2f 0a 23 64 65 66 69 6e 65   only */.#define
19d70 20 45 50 5f 53 74 61 74 69 63 20 20 20 20 30 78   EP_Static    0x
19d80 30 30 38 30 30 30 20 2f 2a 20 48 65 6c 64 20 69  008000 /* Held i
19d90 6e 20 6d 65 6d 6f 72 79 20 6e 6f 74 20 6f 62 74  n memory not obt
19da0 61 69 6e 65 64 20 66 72 6f 6d 20 6d 61 6c 6c 6f  ained from mallo
19db0 63 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45  c() */.#define E
19dc0 50 5f 4d 65 6d 54 6f 6b 65 6e 20 20 30 78 30 31  P_MemToken  0x01
19dd0 30 30 30 30 20 2f 2a 20 4e 65 65 64 20 74 6f 20  0000 /* Need to 
19de0 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 29 20  sqlite3DbFree() 
19df0 45 78 70 72 2e 7a 54 6f 6b 65 6e 20 2a 2f 0a 23  Expr.zToken */.#
19e00 64 65 66 69 6e 65 20 45 50 5f 4e 6f 52 65 64 75  define EP_NoRedu
19e10 63 65 20 20 30 78 30 32 30 30 30 30 20 2f 2a 20  ce  0x020000 /* 
19e20 43 61 6e 6e 6f 74 20 45 58 50 52 44 55 50 5f 52  Cannot EXPRDUP_R
19e30 45 44 55 43 45 20 74 68 69 73 20 45 78 70 72 20  EDUCE this Expr 
19e40 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 55 6e  */.#define EP_Un
19e50 6c 69 6b 65 6c 79 20 20 30 78 30 34 30 30 30 30  likely  0x040000
19e60 20 2f 2a 20 75 6e 6c 69 6b 65 6c 79 28 29 20 6f   /* unlikely() o
19e70 72 20 6c 69 6b 65 6c 69 68 6f 6f 64 28 29 20 66  r likelihood() f
19e80 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69  unction */.#defi
19e90 6e 65 20 45 50 5f 43 6f 6e 73 74 46 75 6e 63 20  ne EP_ConstFunc 
19ea0 30 78 30 38 30 30 30 30 20 2f 2a 20 41 20 53 51  0x080000 /* A SQ
19eb0 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41  LITE_FUNC_CONSTA
19ec0 4e 54 20 6f 72 20 5f 53 4c 4f 43 48 4e 47 20 66  NT or _SLOCHNG f
19ed0 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69  unction */.#defi
19ee0 6e 65 20 45 50 5f 43 61 6e 42 65 4e 75 6c 6c 20  ne EP_CanBeNull 
19ef0 30 78 31 30 30 30 30 30 20 2f 2a 20 43 61 6e 20  0x100000 /* Can 
19f00 62 65 20 6e 75 6c 6c 20 64 65 73 70 69 74 65 20  be null despite 
19f10 4e 4f 54 20 4e 55 4c 4c 20 63 6f 6e 73 74 72 61  NOT NULL constra
19f20 69 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45  int */.#define E
19f30 50 5f 53 75 62 71 75 65 72 79 20 20 30 78 32 30  P_Subquery  0x20
19f40 30 30 30 30 20 2f 2a 20 54 72 65 65 20 63 6f 6e  0000 /* Tree con
19f50 74 61 69 6e 73 20 61 20 54 4b 5f 53 45 4c 45 43  tains a TK_SELEC
19f60 54 20 6f 70 65 72 61 74 6f 72 20 2a 2f 0a 23 64  T operator */.#d
19f70 65 66 69 6e 65 20 45 50 5f 41 6c 69 61 73 20 20  efine EP_Alias  
19f80 20 20 20 30 78 34 30 30 30 30 30 20 2f 2a 20 49     0x400000 /* I
19f90 73 20 61 6e 20 61 6c 69 61 73 20 66 6f 72 20 61  s an alias for a
19fa0 20 72 65 73 75 6c 74 20 73 65 74 20 63 6f 6c 75   result set colu
19fb0 6d 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  mn */.#define EP
19fc0 5f 4c 65 61 66 20 20 20 20 20 20 30 78 38 30 30  _Leaf      0x800
19fd0 30 30 30 20 2f 2a 20 45 78 70 72 2e 70 4c 65 66  000 /* Expr.pLef
19fe0 74 2c 20 2e 70 52 69 67 68 74 2c 20 2e 75 2e 70  t, .pRight, .u.p
19ff0 53 65 6c 65 63 74 20 61 6c 6c 20 4e 55 4c 4c 20  Select all NULL 
1a000 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 57 69  */.#define EP_Wi
1a010 6e 46 75 6e 63 20 20 30 78 31 30 30 30 30 30 30  nFunc  0x1000000
1a020 20 2f 2a 20 54 4b 5f 46 55 4e 43 54 49 4f 4e 20   /* TK_FUNCTION 
1a030 77 69 74 68 20 45 78 70 72 2e 79 2e 70 57 69 6e  with Expr.y.pWin
1a040 20 73 65 74 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54   set */../*.** T
1a050 68 65 20 45 50 5f 50 72 6f 70 61 67 61 74 65 20  he EP_Propagate 
1a060 6d 61 73 6b 20 69 73 20 61 20 73 65 74 20 6f 66  mask is a set of
1a070 20 70 72 6f 70 65 72 74 69 65 73 20 74 68 61 74   properties that
1a080 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 70   automatically p
1a090 72 6f 70 61 67 61 74 65 0a 2a 2a 20 75 70 77 61  ropagate.** upwa
1a0a0 72 64 73 20 69 6e 74 6f 20 70 61 72 65 6e 74 20  rds into parent 
1a0b0 6e 6f 64 65 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e  nodes..*/.#defin
1a0c0 65 20 45 50 5f 50 72 6f 70 61 67 61 74 65 20 28  e EP_Propagate (
1a0d0 45 50 5f 43 6f 6c 6c 61 74 65 7c 45 50 5f 53 75  EP_Collate|EP_Su
1a0e0 62 71 75 65 72 79 7c 45 50 5f 48 61 73 46 75 6e  bquery|EP_HasFun
1a0f0 63 29 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 73 65 20  c)../*.** These 
1a100 6d 61 63 72 6f 73 20 63 61 6e 20 62 65 20 75 73  macros can be us
1a110 65 64 20 74 6f 20 74 65 73 74 2c 20 73 65 74 2c  ed to test, set,
1a120 20 6f 72 20 63 6c 65 61 72 20 62 69 74 73 20 69   or clear bits i
1a130 6e 20 74 68 65 0a 2a 2a 20 45 78 70 72 2e 66 6c  n the.** Expr.fl
1a140 61 67 73 20 66 69 65 6c 64 2e 0a 2a 2f 0a 23 64  ags field..*/.#d
1a150 65 66 69 6e 65 20 45 78 70 72 48 61 73 50 72 6f  efine ExprHasPro
1a160 70 65 72 74 79 28 45 2c 50 29 20 20 20 20 20 28  perty(E,P)     (
1a170 28 28 45 29 2d 3e 66 6c 61 67 73 26 28 50 29 29  ((E)->flags&(P))
1a180 21 3d 30 29 0a 23 64 65 66 69 6e 65 20 45 78 70  !=0).#define Exp
1a190 72 48 61 73 41 6c 6c 50 72 6f 70 65 72 74 79 28  rHasAllProperty(
1a1a0 45 2c 50 29 20 20 28 28 28 45 29 2d 3e 66 6c 61  E,P)  (((E)->fla
1a1b0 67 73 26 28 50 29 29 3d 3d 28 50 29 29 0a 23 64  gs&(P))==(P)).#d
1a1c0 65 66 69 6e 65 20 45 78 70 72 53 65 74 50 72 6f  efine ExprSetPro
1a1d0 70 65 72 74 79 28 45 2c 50 29 20 20 20 20 20 28  perty(E,P)     (
1a1e0 45 29 2d 3e 66 6c 61 67 73 7c 3d 28 50 29 0a 23  E)->flags|=(P).#
1a1f0 64 65 66 69 6e 65 20 45 78 70 72 43 6c 65 61 72  define ExprClear
1a200 50 72 6f 70 65 72 74 79 28 45 2c 50 29 20 20 20  Property(E,P)   
1a210 28 45 29 2d 3e 66 6c 61 67 73 26 3d 7e 28 50 29  (E)->flags&=~(P)
1a220 0a 0a 2f 2a 20 54 68 65 20 45 78 70 72 53 65 74  ../* The ExprSet
1a230 56 56 41 50 72 6f 70 65 72 74 79 28 29 20 6d 61  VVAProperty() ma
1a240 63 72 6f 20 69 73 20 75 73 65 64 20 66 6f 72 20  cro is used for 
1a250 56 65 72 69 66 69 63 61 74 69 6f 6e 2c 20 56 61  Verification, Va
1a260 6c 69 64 61 74 69 6f 6e 2c 0a 2a 2a 20 61 6e 64  lidation,.** and
1a270 20 41 63 63 72 65 64 69 74 61 74 69 6f 6e 20 6f   Accreditation o
1a280 6e 6c 79 2e 20 20 49 74 20 77 6f 72 6b 73 20 6c  nly.  It works l
1a290 69 6b 65 20 45 78 70 72 53 65 74 50 72 6f 70 65  ike ExprSetPrope
1a2a0 72 74 79 28 29 20 64 75 72 69 6e 67 20 56 56 41  rty() during VVA
1a2b0 0a 2a 2a 20 70 72 6f 63 65 73 73 65 73 20 62 75  .** processes bu
1a2c0 74 20 69 73 20 61 20 6e 6f 2d 6f 70 20 66 6f 72  t is a no-op for
1a2d0 20 64 65 6c 69 76 65 72 79 2e 0a 2a 2f 0a 23 69   delivery..*/.#i
1a2e0 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55  fdef SQLITE_DEBU
1a2f0 47 0a 23 20 64 65 66 69 6e 65 20 45 78 70 72 53  G.# define ExprS
1a300 65 74 56 56 41 50 72 6f 70 65 72 74 79 28 45 2c  etVVAProperty(E,
1a310 50 29 20 20 28 45 29 2d 3e 66 6c 61 67 73 7c 3d  P)  (E)->flags|=
1a320 28 50 29 0a 23 65 6c 73 65 0a 23 20 64 65 66 69  (P).#else.# defi
1a330 6e 65 20 45 78 70 72 53 65 74 56 56 41 50 72 6f  ne ExprSetVVAPro
1a340 70 65 72 74 79 28 45 2c 50 29 0a 23 65 6e 64 69  perty(E,P).#endi
1a350 66 0a 0a 2f 2a 0a 2a 2a 20 4d 61 63 72 6f 73 20  f../*.** Macros 
1a360 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 74 68 65  to determine the
1a370 20 6e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73   number of bytes
1a380 20 72 65 71 75 69 72 65 64 20 62 79 20 61 20 6e   required by a n
1a390 6f 72 6d 61 6c 20 45 78 70 72 0a 2a 2a 20 73 74  ormal Expr.** st
1a3a0 72 75 63 74 2c 20 61 6e 20 45 78 70 72 20 73 74  ruct, an Expr st
1a3b0 72 75 63 74 20 77 69 74 68 20 74 68 65 20 45 50  ruct with the EP
1a3c0 5f 52 65 64 75 63 65 64 20 66 6c 61 67 20 73 65  _Reduced flag se
1a3d0 74 20 69 6e 20 45 78 70 72 2e 66 6c 61 67 73 0a  t in Expr.flags.
1a3e0 2a 2a 20 61 6e 64 20 61 6e 20 45 78 70 72 20 73  ** and an Expr s
1a3f0 74 72 75 63 74 20 77 69 74 68 20 74 68 65 20 45  truct with the E
1a400 50 5f 54 6f 6b 65 6e 4f 6e 6c 79 20 66 6c 61 67  P_TokenOnly flag
1a410 20 73 65 74 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65   set..*/.#define
1a420 20 45 58 50 52 5f 46 55 4c 4c 53 49 5a 45 20 20   EXPR_FULLSIZE  
1a430 20 20 20 20 20 20 20 20 20 73 69 7a 65 6f 66 28           sizeof(
1a440 45 78 70 72 29 20 20 20 20 20 20 20 20 20 20 20  Expr)           
1a450 2f 2a 20 46 75 6c 6c 20 73 69 7a 65 20 2a 2f 0a  /* Full size */.
1a460 23 64 65 66 69 6e 65 20 45 58 50 52 5f 52 45 44  #define EXPR_RED
1a470 55 43 45 44 53 49 5a 45 20 20 20 20 20 20 20 20  UCEDSIZE        
1a480 6f 66 66 73 65 74 6f 66 28 45 78 70 72 2c 69 54  offsetof(Expr,iT
1a490 61 62 6c 65 29 20 20 2f 2a 20 43 6f 6d 6d 6f 6e  able)  /* Common
1a4a0 20 66 65 61 74 75 72 65 73 20 2a 2f 0a 23 64 65   features */.#de
1a4b0 66 69 6e 65 20 45 58 50 52 5f 54 4f 4b 45 4e 4f  fine EXPR_TOKENO
1a4c0 4e 4c 59 53 49 5a 45 20 20 20 20 20 20 6f 66 66  NLYSIZE      off
1a4d0 73 65 74 6f 66 28 45 78 70 72 2c 70 4c 65 66 74  setof(Expr,pLeft
1a4e0 29 20 20 20 2f 2a 20 46 65 77 65 72 20 66 65 61  )   /* Fewer fea
1a4f0 74 75 72 65 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20  tures */../*.** 
1a500 46 6c 61 67 73 20 70 61 73 73 65 64 20 74 6f 20  Flags passed to 
1a510 74 68 65 20 73 71 6c 69 74 65 33 45 78 70 72 44  the sqlite3ExprD
1a520 75 70 28 29 20 66 75 6e 63 74 69 6f 6e 2e 20 53  up() function. S
1a530 65 65 20 74 68 65 20 68 65 61 64 65 72 20 63 6f  ee the header co
1a540 6d 6d 65 6e 74 0a 2a 2a 20 61 62 6f 76 65 20 73  mment.** above s
1a550 71 6c 69 74 65 33 45 78 70 72 44 75 70 28 29 20  qlite3ExprDup() 
1a560 66 6f 72 20 64 65 74 61 69 6c 73 2e 0a 2a 2f 0a  for details..*/.
1a570 23 64 65 66 69 6e 65 20 45 58 50 52 44 55 50 5f  #define EXPRDUP_
1a580 52 45 44 55 43 45 20 20 20 20 20 20 20 20 20 30  REDUCE         0
1a590 78 30 30 30 31 20 20 2f 2a 20 55 73 65 64 20 72  x0001  /* Used r
1a5a0 65 64 75 63 65 64 2d 73 69 7a 65 20 45 78 70 72  educed-size Expr
1a5b0 20 6e 6f 64 65 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a   nodes */../*.**
1a5c0 20 41 20 6c 69 73 74 20 6f 66 20 65 78 70 72 65   A list of expre
1a5d0 73 73 69 6f 6e 73 2e 20 20 45 61 63 68 20 65 78  ssions.  Each ex
1a5e0 70 72 65 73 73 69 6f 6e 20 6d 61 79 20 6f 70 74  pression may opt
1a5f0 69 6f 6e 61 6c 6c 79 20 68 61 76 65 20 61 0a 2a  ionally have a.*
1a600 2a 20 6e 61 6d 65 2e 20 20 41 6e 20 65 78 70 72  * name.  An expr
1a610 2f 6e 61 6d 65 20 63 6f 6d 62 69 6e 61 74 69 6f  /name combinatio
1a620 6e 20 63 61 6e 20 62 65 20 75 73 65 64 20 69 6e  n can be used in
1a630 20 73 65 76 65 72 61 6c 20 77 61 79 73 2c 20 73   several ways, s
1a640 75 63 68 0a 2a 2a 20 61 73 20 74 68 65 20 6c 69  uch.** as the li
1a650 73 74 20 6f 66 20 22 65 78 70 72 20 41 53 20 49  st of "expr AS I
1a660 44 22 20 66 69 65 6c 64 73 20 66 6f 6c 6c 6f 77  D" fields follow
1a670 69 6e 67 20 61 20 22 53 45 4c 45 43 54 22 20 6f  ing a "SELECT" o
1a680 72 20 69 6e 20 74 68 65 0a 2a 2a 20 6c 69 73 74  r in the.** list
1a690 20 6f 66 20 22 49 44 20 3d 20 65 78 70 72 22 20   of "ID = expr" 
1a6a0 69 74 65 6d 73 20 69 6e 20 61 6e 20 55 50 44 41  items in an UPDA
1a6b0 54 45 2e 20 20 41 20 6c 69 73 74 20 6f 66 20 65  TE.  A list of e
1a6c0 78 70 72 65 73 73 69 6f 6e 73 20 63 61 6e 0a 2a  xpressions can.*
1a6d0 2a 20 61 6c 73 6f 20 62 65 20 75 73 65 64 20 61  * also be used a
1a6e0 73 20 74 68 65 20 61 72 67 75 6d 65 6e 74 20 74  s the argument t
1a6f0 6f 20 61 20 66 75 6e 63 74 69 6f 6e 2c 20 69 6e  o a function, in
1a700 20 77 68 69 63 68 20 63 61 73 65 20 74 68 65 20   which case the 
1a710 61 2e 7a 4e 61 6d 65 0a 2a 2a 20 66 69 65 6c 64  a.zName.** field
1a720 20 69 73 20 6e 6f 74 20 75 73 65 64 2e 0a 2a 2a   is not used..**
1a730 0a 2a 2a 20 42 79 20 64 65 66 61 75 6c 74 20 74  .** By default t
1a740 68 65 20 45 78 70 72 2e 7a 53 70 61 6e 20 66 69  he Expr.zSpan fi
1a750 65 6c 64 20 68 6f 6c 64 73 20 61 20 68 75 6d 61  eld holds a huma
1a760 6e 2d 72 65 61 64 61 62 6c 65 20 64 65 73 63 72  n-readable descr
1a770 69 70 74 69 6f 6e 20 6f 66 0a 2a 2a 20 74 68 65  iption of.** the
1a780 20 65 78 70 72 65 73 73 69 6f 6e 20 74 68 61 74   expression that
1a790 20 69 73 20 75 73 65 64 20 69 6e 20 74 68 65 20   is used in the 
1a7a0 67 65 6e 65 72 61 74 69 6f 6e 20 6f 66 20 65 72  generation of er
1a7b0 72 6f 72 20 6d 65 73 73 61 67 65 73 20 61 6e 64  ror messages and
1a7c0 0a 2a 2a 20 63 6f 6c 75 6d 6e 20 6c 61 62 65 6c  .** column label
1a7d0 73 2e 20 20 49 6e 20 74 68 69 73 20 63 61 73 65  s.  In this case
1a7e0 2c 20 45 78 70 72 2e 7a 53 70 61 6e 20 69 73 20  , Expr.zSpan is 
1a7f0 74 79 70 69 63 61 6c 6c 79 20 74 68 65 20 74 65  typically the te
1a800 78 74 20 6f 66 20 61 0a 2a 2a 20 63 6f 6c 75 6d  xt of a.** colum
1a810 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 61 73 20  n expression as 
1a820 69 74 20 65 78 69 73 74 73 20 69 6e 20 61 20 53  it exists in a S
1a830 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e  ELECT statement.
1a840 20 20 48 6f 77 65 76 65 72 2c 20 69 66 0a 2a 2a    However, if.**
1a850 20 74 68 65 20 62 53 70 61 6e 49 73 54 61 62 20   the bSpanIsTab 
1a860 66 6c 61 67 20 69 73 20 73 65 74 2c 20 74 68 65  flag is set, the
1a870 6e 20 7a 53 70 61 6e 20 69 73 20 6f 76 65 72 6c  n zSpan is overl
1a880 6f 61 64 65 64 20 74 6f 20 6d 65 61 6e 20 74 68  oaded to mean th
1a890 65 20 6e 61 6d 65 0a 2a 2a 20 6f 66 20 74 68 65  e name.** of the
1a8a0 20 72 65 73 75 6c 74 20 63 6f 6c 75 6d 6e 20 69   result column i
1a8b0 6e 20 74 68 65 20 66 6f 72 6d 3a 20 44 41 54 41  n the form: DATA
1a8c0 42 41 53 45 2e 54 41 42 4c 45 2e 43 4f 4c 55 4d  BASE.TABLE.COLUM
1a8d0 4e 2e 20 20 54 68 69 73 20 6c 61 74 65 72 0a 2a  N.  This later.*
1a8e0 2a 20 66 6f 72 6d 20 69 73 20 75 73 65 64 20 66  * form is used f
1a8f0 6f 72 20 6e 61 6d 65 20 72 65 73 6f 6c 75 74 69  or name resoluti
1a900 6f 6e 20 77 69 74 68 20 6e 65 73 74 65 64 20 46  on with nested F
1a910 52 4f 4d 20 63 6c 61 75 73 65 73 2e 0a 2a 2f 0a  ROM clauses..*/.
1a920 73 74 72 75 63 74 20 45 78 70 72 4c 69 73 74 20  struct ExprList 
1a930 7b 0a 20 20 69 6e 74 20 6e 45 78 70 72 3b 20 20  {.  int nExpr;  
1a940 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
1a950 6d 62 65 72 20 6f 66 20 65 78 70 72 65 73 73 69  mber of expressi
1a960 6f 6e 73 20 6f 6e 20 74 68 65 20 6c 69 73 74 20  ons on the list 
1a970 2a 2f 0a 20 20 73 74 72 75 63 74 20 45 78 70 72  */.  struct Expr
1a980 4c 69 73 74 5f 69 74 65 6d 20 7b 20 2f 2a 20 46  List_item { /* F
1a990 6f 72 20 65 61 63 68 20 65 78 70 72 65 73 73 69  or each expressi
1a9a0 6f 6e 20 69 6e 20 74 68 65 20 6c 69 73 74 20 2a  on in the list *
1a9b0 2f 0a 20 20 20 20 45 78 70 72 20 2a 70 45 78 70  /.    Expr *pExp
1a9c0 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  r;            /*
1a9d0 20 54 68 65 20 70 61 72 73 65 20 74 72 65 65 20   The parse tree 
1a9e0 66 6f 72 20 74 68 69 73 20 65 78 70 72 65 73 73  for this express
1a9f0 69 6f 6e 20 2a 2f 0a 20 20 20 20 63 68 61 72 20  ion */.    char 
1aa00 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20  *zName;         
1aa10 20 20 20 2f 2a 20 54 6f 6b 65 6e 20 61 73 73 6f     /* Token asso
1aa20 63 69 61 74 65 64 20 77 69 74 68 20 74 68 69 73  ciated with this
1aa30 20 65 78 70 72 65 73 73 69 6f 6e 20 2a 2f 0a 20   expression */. 
1aa40 20 20 20 63 68 61 72 20 2a 7a 53 70 61 6e 3b 20     char *zSpan; 
1aa50 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 72             /* Or
1aa60 69 67 69 6e 61 6c 20 74 65 78 74 20 6f 66 20 74  iginal text of t
1aa70 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 2a 2f  he expression */
1aa80 0a 20 20 20 20 75 38 20 73 6f 72 74 4f 72 64 65  .    u8 sortOrde
1aa90 72 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  r;           /* 
1aaa0 31 20 66 6f 72 20 44 45 53 43 20 6f 72 20 30 20  1 for DESC or 0 
1aab0 66 6f 72 20 41 53 43 20 2a 2f 0a 20 20 20 20 75  for ASC */.    u
1aac0 6e 73 69 67 6e 65 64 20 64 6f 6e 65 20 3a 31 3b  nsigned done :1;
1aad0 20 20 20 20 20 20 20 2f 2a 20 41 20 66 6c 61 67         /* A flag
1aae0 20 74 6f 20 69 6e 64 69 63 61 74 65 20 77 68 65   to indicate whe
1aaf0 6e 20 70 72 6f 63 65 73 73 69 6e 67 20 69 73 20  n processing is 
1ab00 66 69 6e 69 73 68 65 64 20 2a 2f 0a 20 20 20 20  finished */.    
1ab10 75 6e 73 69 67 6e 65 64 20 62 53 70 61 6e 49 73  unsigned bSpanIs
1ab20 54 61 62 20 3a 31 3b 20 2f 2a 20 7a 53 70 61 6e  Tab :1; /* zSpan
1ab30 20 68 6f 6c 64 73 20 44 42 2e 54 41 42 4c 45 2e   holds DB.TABLE.
1ab40 43 4f 4c 55 4d 4e 20 2a 2f 0a 20 20 20 20 75 6e  COLUMN */.    un
1ab50 73 69 67 6e 65 64 20 72 65 75 73 61 62 6c 65 20  signed reusable 
1ab60 3a 31 3b 20 20 20 2f 2a 20 43 6f 6e 73 74 61 6e  :1;   /* Constan
1ab70 74 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20  t expression is 
1ab80 72 65 75 73 61 62 6c 65 20 2a 2f 0a 20 20 20 20  reusable */.    
1ab90 75 6e 73 69 67 6e 65 64 20 62 53 6f 72 74 65 72  unsigned bSorter
1aba0 52 65 66 20 3a 31 3b 20 2f 2a 20 44 65 66 65 72  Ref :1; /* Defer
1abb0 20 65 76 61 6c 75 61 74 69 6f 6e 20 75 6e 74 69   evaluation unti
1abc0 6c 20 61 66 74 65 72 20 73 6f 72 74 69 6e 67 20  l after sorting 
1abd0 2a 2f 0a 20 20 20 20 75 6e 69 6f 6e 20 7b 0a 20  */.    union {. 
1abe0 20 20 20 20 20 73 74 72 75 63 74 20 7b 0a 20 20       struct {.  
1abf0 20 20 20 20 20 20 75 31 36 20 69 4f 72 64 65 72        u16 iOrder
1ac00 42 79 43 6f 6c 3b 20 20 20 20 20 20 2f 2a 20 46  ByCol;      /* F
1ac10 6f 72 20 4f 52 44 45 52 20 42 59 2c 20 63 6f 6c  or ORDER BY, col
1ac20 75 6d 6e 20 6e 75 6d 62 65 72 20 69 6e 20 72 65  umn number in re
1ac30 73 75 6c 74 20 73 65 74 20 2a 2f 0a 20 20 20 20  sult set */.    
1ac40 20 20 20 20 75 31 36 20 69 41 6c 69 61 73 3b 20      u16 iAlias; 
1ac50 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 64            /* Ind
1ac60 65 78 20 69 6e 74 6f 20 50 61 72 73 65 2e 61 41  ex into Parse.aA
1ac70 6c 69 61 73 5b 5d 20 66 6f 72 20 7a 4e 61 6d 65  lias[] for zName
1ac80 20 2a 2f 0a 20 20 20 20 20 20 7d 20 78 3b 0a 20   */.      } x;. 
1ac90 20 20 20 20 20 69 6e 74 20 69 43 6f 6e 73 74 45       int iConstE
1aca0 78 70 72 52 65 67 3b 20 20 20 20 20 20 2f 2a 20  xprReg;      /* 
1acb0 52 65 67 69 73 74 65 72 20 69 6e 20 77 68 69 63  Register in whic
1acc0 68 20 45 78 70 72 20 76 61 6c 75 65 20 69 73 20  h Expr value is 
1acd0 63 61 63 68 65 64 20 2a 2f 0a 20 20 20 20 7d 20  cached */.    } 
1ace0 75 3b 0a 20 20 7d 20 61 5b 31 5d 3b 20 20 20 20  u;.  } a[1];    
1acf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1ad00 20 4f 6e 65 20 73 6c 6f 74 20 66 6f 72 20 65 61   One slot for ea
1ad10 63 68 20 65 78 70 72 65 73 73 69 6f 6e 20 69 6e  ch expression in
1ad20 20 74 68 65 20 6c 69 73 74 20 2a 2f 0a 7d 3b 0a   the list */.};.
1ad30 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e  ./*.** An instan
1ad40 63 65 20 6f 66 20 74 68 69 73 20 73 74 72 75 63  ce of this struc
1ad50 74 75 72 65 20 63 61 6e 20 68 6f 6c 64 20 61 20  ture can hold a 
1ad60 73 69 6d 70 6c 65 20 6c 69 73 74 20 6f 66 20 69  simple list of i
1ad70 64 65 6e 74 69 66 69 65 72 73 2c 0a 2a 2a 20 73  dentifiers,.** s
1ad80 75 63 68 20 61 73 20 74 68 65 20 6c 69 73 74 20  uch as the list 
1ad90 22 61 2c 62 2c 63 22 20 69 6e 20 74 68 65 20 66  "a,b,c" in the f
1ada0 6f 6c 6c 6f 77 69 6e 67 20 73 74 61 74 65 6d 65  ollowing stateme
1adb0 6e 74 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 20  nts:.**.**      
1adc0 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 28 61 2c  INSERT INTO t(a,
1add0 62 2c 63 29 20 56 41 4c 55 45 53 20 2e 2e 2e 3b  b,c) VALUES ...;
1ade0 0a 2a 2a 20 20 20 20 20 20 43 52 45 41 54 45 20  .**      CREATE 
1adf0 49 4e 44 45 58 20 69 64 78 20 4f 4e 20 74 28 61  INDEX idx ON t(a
1ae00 2c 62 2c 63 29 3b 0a 2a 2a 20 20 20 20 20 20 43  ,b,c);.**      C
1ae10 52 45 41 54 45 20 54 52 49 47 47 45 52 20 74 72  REATE TRIGGER tr
1ae20 69 67 20 42 45 46 4f 52 45 20 55 50 44 41 54 45  ig BEFORE UPDATE
1ae30 20 4f 4e 20 74 28 61 2c 62 2c 63 29 20 2e 2e 2e   ON t(a,b,c) ...
1ae40 3b 0a 2a 2a 0a 2a 2a 20 54 68 65 20 49 64 4c 69  ;.**.** The IdLi
1ae50 73 74 2e 61 2e 69 64 78 20 66 69 65 6c 64 20 69  st.a.idx field i
1ae60 73 20 75 73 65 64 20 77 68 65 6e 20 74 68 65 20  s used when the 
1ae70 49 64 4c 69 73 74 20 72 65 70 72 65 73 65 6e 74  IdList represent
1ae80 73 20 74 68 65 20 6c 69 73 74 20 6f 66 0a 2a 2a  s the list of.**
1ae90 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 61 66   column names af
1aea0 74 65 72 20 61 20 74 61 62 6c 65 20 6e 61 6d 65  ter a table name
1aeb0 20 69 6e 20 61 6e 20 49 4e 53 45 52 54 20 73 74   in an INSERT st
1aec0 61 74 65 6d 65 6e 74 2e 20 20 49 6e 20 74 68 65  atement.  In the
1aed0 20 73 74 61 74 65 6d 65 6e 74 0a 2a 2a 0a 2a 2a   statement.**.**
1aee0 20 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f       INSERT INTO
1aef0 20 74 28 61 2c 62 2c 63 29 20 2e 2e 2e 0a 2a 2a   t(a,b,c) ....**
1af00 0a 2a 2a 20 49 66 20 22 61 22 20 69 73 20 74 68  .** If "a" is th
1af10 65 20 6b 2d 74 68 20 63 6f 6c 75 6d 6e 20 6f 66  e k-th column of
1af20 20 74 61 62 6c 65 20 22 74 22 2c 20 74 68 65 6e   table "t", then
1af30 20 49 64 4c 69 73 74 2e 61 5b 30 5d 2e 69 64 78   IdList.a[0].idx
1af40 3d 3d 6b 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 49  ==k..*/.struct I
1af50 64 4c 69 73 74 20 7b 0a 20 20 73 74 72 75 63 74  dList {.  struct
1af60 20 49 64 4c 69 73 74 5f 69 74 65 6d 20 7b 0a 20   IdList_item {. 
1af70 20 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20     char *zName; 
1af80 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20       /* Name of 
1af90 74 68 65 20 69 64 65 6e 74 69 66 69 65 72 20 2a  the identifier *
1afa0 2f 0a 20 20 20 20 69 6e 74 20 69 64 78 3b 20 20  /.    int idx;  
1afb0 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 64 65 78          /* Index
1afc0 20 69 6e 20 73 6f 6d 65 20 54 61 62 6c 65 2e 61   in some Table.a
1afd0 43 6f 6c 5b 5d 20 6f 66 20 61 20 63 6f 6c 75 6d  Col[] of a colum
1afe0 6e 20 6e 61 6d 65 64 20 7a 4e 61 6d 65 20 2a 2f  n named zName */
1aff0 0a 20 20 7d 20 2a 61 3b 0a 20 20 69 6e 74 20 6e  .  } *a;.  int n
1b000 49 64 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e  Id;         /* N
1b010 75 6d 62 65 72 20 6f 66 20 69 64 65 6e 74 69 66  umber of identif
1b020 69 65 72 73 20 6f 6e 20 74 68 65 20 6c 69 73 74  iers on the list
1b030 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68   */.};../*.** Th
1b040 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75  e following stru
1b050 63 74 75 72 65 20 64 65 73 63 72 69 62 65 73 20  cture describes 
1b060 74 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 20  the FROM clause 
1b070 6f 66 20 61 20 53 45 4c 45 43 54 20 73 74 61 74  of a SELECT stat
1b080 65 6d 65 6e 74 2e 0a 2a 2a 20 45 61 63 68 20 74  ement..** Each t
1b090 61 62 6c 65 20 6f 72 20 73 75 62 71 75 65 72 79  able or subquery
1b0a0 20 69 6e 20 74 68 65 20 46 52 4f 4d 20 63 6c 61   in the FROM cla
1b0b0 75 73 65 20 69 73 20 61 20 73 65 70 61 72 61 74  use is a separat
1b0c0 65 20 65 6c 65 6d 65 6e 74 20 6f 66 0a 2a 2a 20  e element of.** 
1b0d0 74 68 65 20 53 72 63 4c 69 73 74 2e 61 5b 5d 20  the SrcList.a[] 
1b0e0 61 72 72 61 79 2e 0a 2a 2a 0a 2a 2a 20 57 69 74  array..**.** Wit
1b0f0 68 20 74 68 65 20 61 64 64 69 74 69 6f 6e 20 6f  h the addition o
1b100 66 20 6d 75 6c 74 69 70 6c 65 20 64 61 74 61 62  f multiple datab
1b110 61 73 65 20 73 75 70 70 6f 72 74 2c 20 74 68 65  ase support, the
1b120 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63   following struc
1b130 74 75 72 65 0a 2a 2a 20 63 61 6e 20 61 6c 73 6f  ture.** can also
1b140 20 62 65 20 75 73 65 64 20 74 6f 20 64 65 73 63   be used to desc
1b150 72 69 62 65 20 61 20 70 61 72 74 69 63 75 6c 61  ribe a particula
1b160 72 20 74 61 62 6c 65 20 73 75 63 68 20 61 73 20  r table such as 
1b170 74 68 65 20 74 61 62 6c 65 20 74 68 61 74 0a 2a  the table that.*
1b180 2a 20 69 73 20 6d 6f 64 69 66 69 65 64 20 62 79  * is modified by
1b190 20 61 6e 20 49 4e 53 45 52 54 2c 20 44 45 4c 45   an INSERT, DELE
1b1a0 54 45 2c 20 6f 72 20 55 50 44 41 54 45 20 73 74  TE, or UPDATE st
1b1b0 61 74 65 6d 65 6e 74 2e 20 20 49 6e 20 73 74 61  atement.  In sta
1b1c0 6e 64 61 72 64 20 53 51 4c 2c 0a 2a 2a 20 73 75  ndard SQL,.** su
1b1d0 63 68 20 61 20 74 61 62 6c 65 20 6d 75 73 74 20  ch a table must 
1b1e0 62 65 20 61 20 73 69 6d 70 6c 65 20 6e 61 6d 65  be a simple name
1b1f0 3a 20 49 44 2e 20 20 42 75 74 20 69 6e 20 53 51  : ID.  But in SQ
1b200 4c 69 74 65 2c 20 74 68 65 20 74 61 62 6c 65 20  Lite, the table 
1b210 63 61 6e 0a 2a 2a 20 6e 6f 77 20 62 65 20 69 64  can.** now be id
1b220 65 6e 74 69 66 69 65 64 20 62 79 20 61 20 64 61  entified by a da
1b230 74 61 62 61 73 65 20 6e 61 6d 65 2c 20 61 20 64  tabase name, a d
1b240 6f 74 2c 20 74 68 65 6e 20 74 68 65 20 74 61 62  ot, then the tab
1b250 6c 65 20 6e 61 6d 65 3a 20 49 44 2e 49 44 2e 0a  le name: ID.ID..
1b260 2a 2a 0a 2a 2a 20 54 68 65 20 6a 6f 69 6e 74 79  **.** The jointy
1b270 70 65 20 73 74 61 72 74 73 20 6f 75 74 20 73 68  pe starts out sh
1b280 6f 77 69 6e 67 20 74 68 65 20 6a 6f 69 6e 20 74  owing the join t
1b290 79 70 65 20 62 65 74 77 65 65 6e 20 74 68 65 20  ype between the 
1b2a0 63 75 72 72 65 6e 74 20 74 61 62 6c 65 0a 2a 2a  current table.**
1b2b0 20 61 6e 64 20 74 68 65 20 6e 65 78 74 20 74 61   and the next ta
1b2c0 62 6c 65 20 6f 6e 20 74 68 65 20 6c 69 73 74 2e  ble on the list.
1b2d0 20 20 54 68 65 20 70 61 72 73 65 72 20 62 75 69    The parser bui
1b2e0 6c 64 73 20 74 68 65 20 6c 69 73 74 20 74 68 69  lds the list thi
1b2f0 73 20 77 61 79 2e 0a 2a 2a 20 42 75 74 20 73 71  s way..** But sq
1b300 6c 69 74 65 33 53 72 63 4c 69 73 74 53 68 69 66  lite3SrcListShif
1b310 74 4a 6f 69 6e 54 79 70 65 28 29 20 6c 61 74 65  tJoinType() late
1b320 72 20 73 68 69 66 74 73 20 74 68 65 20 6a 6f 69  r shifts the joi
1b330 6e 74 79 70 65 73 20 73 6f 20 74 68 61 74 20 65  ntypes so that e
1b340 61 63 68 0a 2a 2a 20 6a 6f 69 6e 74 79 70 65 20  ach.** jointype 
1b350 65 78 70 72 65 73 73 65 73 20 74 68 65 20 6a 6f  expresses the jo
1b360 69 6e 20 62 65 74 77 65 65 6e 20 74 68 65 20 74  in between the t
1b370 61 62 6c 65 20 61 6e 64 20 74 68 65 20 70 72 65  able and the pre
1b380 76 69 6f 75 73 20 74 61 62 6c 65 2e 0a 2a 2a 0a  vious table..**.
1b390 2a 2a 20 49 6e 20 74 68 65 20 63 6f 6c 55 73 65  ** In the colUse
1b3a0 64 20 66 69 65 6c 64 2c 20 74 68 65 20 68 69 67  d field, the hig
1b3b0 68 2d 6f 72 64 65 72 20 62 69 74 20 28 62 69 74  h-order bit (bit
1b3c0 20 36 33 29 20 69 73 20 73 65 74 20 69 66 20 74   63) is set if t
1b3d0 68 65 20 74 61 62 6c 65 0a 2a 2a 20 63 6f 6e 74  he table.** cont
1b3e0 61 69 6e 73 20 6d 6f 72 65 20 74 68 61 6e 20 36  ains more than 6
1b3f0 33 20 63 6f 6c 75 6d 6e 73 20 61 6e 64 20 74 68  3 columns and th
1b400 65 20 36 34 2d 74 68 20 6f 72 20 6c 61 74 65 72  e 64-th or later
1b410 20 63 6f 6c 75 6d 6e 20 69 73 20 75 73 65 64 2e   column is used.
1b420 0a 2a 2f 0a 73 74 72 75 63 74 20 53 72 63 4c 69  .*/.struct SrcLi
1b430 73 74 20 7b 0a 20 20 69 6e 74 20 6e 53 72 63 3b  st {.  int nSrc;
1b440 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
1b450 72 20 6f 66 20 74 61 62 6c 65 73 20 6f 72 20 73  r of tables or s
1b460 75 62 71 75 65 72 69 65 73 20 69 6e 20 74 68 65  ubqueries in the
1b470 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 2a 2f 0a   FROM clause */.
1b480 20 20 75 33 32 20 6e 41 6c 6c 6f 63 3b 20 20 20    u32 nAlloc;   
1b490 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
1b4a0 65 6e 74 72 69 65 73 20 61 6c 6c 6f 63 61 74 65  entries allocate
1b4b0 64 20 69 6e 20 61 5b 5d 20 62 65 6c 6f 77 20 2a  d in a[] below *
1b4c0 2f 0a 20 20 73 74 72 75 63 74 20 53 72 63 4c 69  /.  struct SrcLi
1b4d0 73 74 5f 69 74 65 6d 20 7b 0a 20 20 20 20 53 63  st_item {.    Sc
1b4e0 68 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20 20  hema *pSchema;  
1b4f0 2f 2a 20 53 63 68 65 6d 61 20 74 6f 20 77 68 69  /* Schema to whi
1b500 63 68 20 74 68 69 73 20 69 74 65 6d 20 69 73 20  ch this item is 
1b510 66 69 78 65 64 20 2a 2f 0a 20 20 20 20 63 68 61  fixed */.    cha
1b520 72 20 2a 7a 44 61 74 61 62 61 73 65 3b 20 20 2f  r *zDatabase;  /
1b530 2a 20 4e 61 6d 65 20 6f 66 20 64 61 74 61 62 61  * Name of databa
1b540 73 65 20 68 6f 6c 64 69 6e 67 20 74 68 69 73 20  se holding this 
1b550 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20 63 68 61  table */.    cha
1b560 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 2f  r *zName;      /
1b570 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65 20 74 61  * Name of the ta
1b580 62 6c 65 20 2a 2f 0a 20 20 20 20 63 68 61 72 20  ble */.    char 
1b590 2a 7a 41 6c 69 61 73 3b 20 20 20 20 20 2f 2a 20  *zAlias;     /* 
1b5a0 54 68 65 20 22 42 22 20 70 61 72 74 20 6f 66 20  The "B" part of 
1b5b0 61 20 22 41 20 41 53 20 42 22 20 70 68 72 61 73  a "A AS B" phras
1b5c0 65 2e 20 20 7a 4e 61 6d 65 20 69 73 20 74 68 65  e.  zName is the
1b5d0 20 22 41 22 20 2a 2f 0a 20 20 20 20 54 61 62 6c   "A" */.    Tabl
1b5e0 65 20 2a 70 54 61 62 3b 20 20 20 20 20 20 2f 2a  e *pTab;      /*
1b5f0 20 41 6e 20 53 51 4c 20 74 61 62 6c 65 20 63 6f   An SQL table co
1b600 72 72 65 73 70 6f 6e 64 69 6e 67 20 74 6f 20 7a  rresponding to z
1b610 4e 61 6d 65 20 2a 2f 0a 20 20 20 20 53 65 6c 65  Name */.    Sele
1b620 63 74 20 2a 70 53 65 6c 65 63 74 3b 20 20 2f 2a  ct *pSelect;  /*
1b630 20 41 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d   A SELECT statem
1b640 65 6e 74 20 75 73 65 64 20 69 6e 20 70 6c 61 63  ent used in plac
1b650 65 20 6f 66 20 61 20 74 61 62 6c 65 20 6e 61 6d  e of a table nam
1b660 65 20 2a 2f 0a 20 20 20 20 69 6e 74 20 61 64 64  e */.    int add
1b670 72 46 69 6c 6c 53 75 62 3b 20 20 2f 2a 20 41 64  rFillSub;  /* Ad
1b680 64 72 65 73 73 20 6f 66 20 73 75 62 72 6f 75 74  dress of subrout
1b690 69 6e 65 20 74 6f 20 6d 61 6e 69 66 65 73 74 20  ine to manifest 
1b6a0 61 20 73 75 62 71 75 65 72 79 20 2a 2f 0a 20 20  a subquery */.  
1b6b0 20 20 69 6e 74 20 72 65 67 52 65 74 75 72 6e 3b    int regReturn;
1b6c0 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20      /* Register 
1b6d0 68 6f 6c 64 69 6e 67 20 72 65 74 75 72 6e 20 61  holding return a
1b6e0 64 64 72 65 73 73 20 6f 66 20 61 64 64 72 46 69  ddress of addrFi
1b6f0 6c 6c 53 75 62 20 2a 2f 0a 20 20 20 20 69 6e 74  llSub */.    int
1b700 20 72 65 67 52 65 73 75 6c 74 3b 20 20 20 20 2f   regResult;    /
1b710 2a 20 52 65 67 69 73 74 65 72 73 20 68 6f 6c 64  * Registers hold
1b720 69 6e 67 20 72 65 73 75 6c 74 73 20 6f 66 20 61  ing results of a
1b730 20 63 6f 2d 72 6f 75 74 69 6e 65 20 2a 2f 0a 20   co-routine */. 
1b740 20 20 20 73 74 72 75 63 74 20 7b 0a 20 20 20 20     struct {.    
1b750 20 20 75 38 20 6a 6f 69 6e 74 79 70 65 3b 20 20    u8 jointype;  
1b760 20 20 20 20 2f 2a 20 54 79 70 65 20 6f 66 20 6a      /* Type of j
1b770 6f 69 6e 20 62 65 74 77 65 65 6e 20 74 68 69 73  oin between this
1b780 20 74 61 62 6c 65 20 61 6e 64 20 74 68 65 20 70   table and the p
1b790 72 65 76 69 6f 75 73 20 2a 2f 0a 20 20 20 20 20  revious */.     
1b7a0 20 75 6e 73 69 67 6e 65 64 20 6e 6f 74 49 6e 64   unsigned notInd
1b7b0 65 78 65 64 20 3a 31 3b 20 20 20 20 2f 2a 20 54  exed :1;    /* T
1b7c0 72 75 65 20 69 66 20 74 68 65 72 65 20 69 73 20  rue if there is 
1b7d0 61 20 4e 4f 54 20 49 4e 44 45 58 45 44 20 63 6c  a NOT INDEXED cl
1b7e0 61 75 73 65 20 2a 2f 0a 20 20 20 20 20 20 75 6e  ause */.      un
1b7f0 73 69 67 6e 65 64 20 69 73 49 6e 64 65 78 65 64  signed isIndexed
1b800 42 79 20 3a 31 3b 20 20 20 2f 2a 20 54 72 75 65  By :1;   /* True
1b810 20 69 66 20 74 68 65 72 65 20 69 73 20 61 6e 20   if there is an 
1b820 49 4e 44 45 58 45 44 20 42 59 20 63 6c 61 75 73  INDEXED BY claus
1b830 65 20 2a 2f 0a 20 20 20 20 20 20 75 6e 73 69 67  e */.      unsig
1b840 6e 65 64 20 69 73 54 61 62 46 75 6e 63 20 3a 31  ned isTabFunc :1
1b850 3b 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66  ;     /* True if
1b860 20 74 61 62 6c 65 2d 76 61 6c 75 65 64 2d 66 75   table-valued-fu
1b870 6e 63 74 69 6f 6e 20 73 79 6e 74 61 78 20 2a 2f  nction syntax */
1b880 0a 20 20 20 20 20 20 75 6e 73 69 67 6e 65 64 20  .      unsigned 
1b890 69 73 43 6f 72 72 65 6c 61 74 65 64 20 3a 31 3b  isCorrelated :1;
1b8a0 20 20 2f 2a 20 54 72 75 65 20 69 66 20 73 75 62    /* True if sub
1b8b0 2d 71 75 65 72 79 20 69 73 20 63 6f 72 72 65 6c  -query is correl
1b8c0 61 74 65 64 20 2a 2f 0a 20 20 20 20 20 20 75 6e  ated */.      un
1b8d0 73 69 67 6e 65 64 20 76 69 61 43 6f 72 6f 75 74  signed viaCorout
1b8e0 69 6e 65 20 3a 31 3b 20 20 2f 2a 20 49 6d 70 6c  ine :1;  /* Impl
1b8f0 65 6d 65 6e 74 65 64 20 61 73 20 61 20 63 6f 2d  emented as a co-
1b900 72 6f 75 74 69 6e 65 20 2a 2f 0a 20 20 20 20 20  routine */.     
1b910 20 75 6e 73 69 67 6e 65 64 20 69 73 52 65 63 75   unsigned isRecu
1b920 72 73 69 76 65 20 3a 31 3b 20 20 20 2f 2a 20 54  rsive :1;   /* T
1b930 72 75 65 20 66 6f 72 20 72 65 63 75 72 73 69 76  rue for recursiv
1b940 65 20 72 65 66 65 72 65 6e 63 65 20 69 6e 20 57  e reference in W
1b950 49 54 48 20 2a 2f 0a 20 20 20 20 7d 20 66 67 3b  ITH */.    } fg;
1b960 0a 20 20 20 20 69 6e 74 20 69 43 75 72 73 6f 72  .    int iCursor
1b970 3b 20 20 20 20 20 20 2f 2a 20 54 68 65 20 56 44  ;      /* The VD
1b980 42 45 20 63 75 72 73 6f 72 20 6e 75 6d 62 65 72  BE cursor number
1b990 20 75 73 65 64 20 74 6f 20 61 63 63 65 73 73 20   used to access 
1b9a0 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20  this table */.  
1b9b0 20 20 45 78 70 72 20 2a 70 4f 6e 3b 20 20 20 20    Expr *pOn;    
1b9c0 20 20 20 20 2f 2a 20 54 68 65 20 4f 4e 20 63 6c      /* The ON cl
1b9d0 61 75 73 65 20 6f 66 20 61 20 6a 6f 69 6e 20 2a  ause of a join *
1b9e0 2f 0a 20 20 20 20 49 64 4c 69 73 74 20 2a 70 55  /.    IdList *pU
1b9f0 73 69 6e 67 3b 20 20 20 2f 2a 20 54 68 65 20 55  sing;   /* The U
1ba00 53 49 4e 47 20 63 6c 61 75 73 65 20 6f 66 20 61  SING clause of a
1ba10 20 6a 6f 69 6e 20 2a 2f 0a 20 20 20 20 42 69 74   join */.    Bit
1ba20 6d 61 73 6b 20 63 6f 6c 55 73 65 64 3b 20 20 2f  mask colUsed;  /
1ba30 2a 20 42 69 74 20 4e 20 28 31 3c 3c 4e 29 20 73  * Bit N (1<<N) s
1ba40 65 74 20 69 66 20 63 6f 6c 75 6d 6e 20 4e 20 6f  et if column N o
1ba50 66 20 70 54 61 62 20 69 73 20 75 73 65 64 20 2a  f pTab is used *
1ba60 2f 0a 20 20 20 20 75 6e 69 6f 6e 20 7b 0a 20 20  /.    union {.  
1ba70 20 20 20 20 63 68 61 72 20 2a 7a 49 6e 64 65 78      char *zIndex
1ba80 65 64 42 79 3b 20 20 20 20 2f 2a 20 49 64 65 6e  edBy;    /* Iden
1ba90 74 69 66 69 65 72 20 66 72 6f 6d 20 22 49 4e 44  tifier from "IND
1baa0 45 58 45 44 20 42 59 20 3c 7a 49 6e 64 65 78 3e  EXED BY <zIndex>
1bab0 22 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 20 20  " clause */.    
1bac0 20 20 45 78 70 72 4c 69 73 74 20 2a 70 46 75 6e    ExprList *pFun
1bad0 63 41 72 67 3b 20 20 2f 2a 20 41 72 67 75 6d 65  cArg;  /* Argume
1bae0 6e 74 73 20 74 6f 20 74 61 62 6c 65 2d 76 61 6c  nts to table-val
1baf0 75 65 64 2d 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a  ued-function */.
1bb00 20 20 20 20 7d 20 75 31 3b 0a 20 20 20 20 49 6e      } u1;.    In
1bb10 64 65 78 20 2a 70 49 42 49 6e 64 65 78 3b 20 20  dex *pIBIndex;  
1bb20 2f 2a 20 49 6e 64 65 78 20 73 74 72 75 63 74 75  /* Index structu
1bb30 72 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67  re corresponding
1bb40 20 74 6f 20 75 31 2e 7a 49 6e 64 65 78 65 64 42   to u1.zIndexedB
1bb50 79 20 2a 2f 0a 20 20 7d 20 61 5b 31 5d 3b 20 20  y */.  } a[1];  
1bb60 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e             /* On
1bb70 65 20 65 6e 74 72 79 20 66 6f 72 20 65 61 63 68  e entry for each
1bb80 20 69 64 65 6e 74 69 66 69 65 72 20 6f 6e 20 74   identifier on t
1bb90 68 65 20 6c 69 73 74 20 2a 2f 0a 7d 3b 0a 0a 2f  he list */.};../
1bba0 2a 0a 2a 2a 20 50 65 72 6d 69 74 74 65 64 20 76  *.** Permitted v
1bbb0 61 6c 75 65 73 20 6f 66 20 74 68 65 20 53 72 63  alues of the Src
1bbc0 4c 69 73 74 2e 61 2e 6a 6f 69 6e 74 79 70 65 20  List.a.jointype 
1bbd0 66 69 65 6c 64 0a 2a 2f 0a 23 64 65 66 69 6e 65  field.*/.#define
1bbe0 20 4a 54 5f 49 4e 4e 45 52 20 20 20 20 20 30 78   JT_INNER     0x
1bbf0 30 30 30 31 20 20 20 20 2f 2a 20 41 6e 79 20 6b  0001    /* Any k
1bc00 69 6e 64 20 6f 66 20 69 6e 6e 65 72 20 6f 72 20  ind of inner or 
1bc10 63 72 6f 73 73 20 6a 6f 69 6e 20 2a 2f 0a 23 64  cross join */.#d
1bc20 65 66 69 6e 65 20 4a 54 5f 43 52 4f 53 53 20 20  efine JT_CROSS  
1bc30 20 20 20 30 78 30 30 30 32 20 20 20 20 2f 2a 20     0x0002    /* 
1bc40 45 78 70 6c 69 63 69 74 20 75 73 65 20 6f 66 20  Explicit use of 
1bc50 74 68 65 20 43 52 4f 53 53 20 6b 65 79 77 6f 72  the CROSS keywor
1bc60 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f  d */.#define JT_
1bc70 4e 41 54 55 52 41 4c 20 20 20 30 78 30 30 30 34  NATURAL   0x0004
1bc80 20 20 20 20 2f 2a 20 54 72 75 65 20 66 6f 72 20      /* True for 
1bc90 61 20 22 6e 61 74 75 72 61 6c 22 20 6a 6f 69 6e  a "natural" join
1bca0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f 4c   */.#define JT_L
1bcb0 45 46 54 20 20 20 20 20 20 30 78 30 30 30 38 20  EFT      0x0008 
1bcc0 20 20 20 2f 2a 20 4c 65 66 74 20 6f 75 74 65 72     /* Left outer
1bcd0 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66 69 6e 65   join */.#define
1bce0 20 4a 54 5f 52 49 47 48 54 20 20 20 20 20 30 78   JT_RIGHT     0x
1bcf0 30 30 31 30 20 20 20 20 2f 2a 20 52 69 67 68 74  0010    /* Right
1bd00 20 6f 75 74 65 72 20 6a 6f 69 6e 20 2a 2f 0a 23   outer join */.#
1bd10 64 65 66 69 6e 65 20 4a 54 5f 4f 55 54 45 52 20  define JT_OUTER 
1bd20 20 20 20 20 30 78 30 30 32 30 20 20 20 20 2f 2a      0x0020    /*
1bd30 20 54 68 65 20 22 4f 55 54 45 52 22 20 6b 65 79   The "OUTER" key
1bd40 77 6f 72 64 20 69 73 20 70 72 65 73 65 6e 74 20  word is present 
1bd50 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f 45 52  */.#define JT_ER
1bd60 52 4f 52 20 20 20 20 20 30 78 30 30 34 30 20 20  ROR     0x0040  
1bd70 20 20 2f 2a 20 75 6e 6b 6e 6f 77 6e 20 6f 72 20    /* unknown or 
1bd80 75 6e 73 75 70 70 6f 72 74 65 64 20 6a 6f 69 6e  unsupported join
1bd90 20 74 79 70 65 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a   type */.../*.**
1bda0 20 46 6c 61 67 73 20 61 70 70 72 6f 70 72 69 61   Flags appropria
1bdb0 74 65 20 66 6f 72 20 74 68 65 20 77 63 74 72 6c  te for the wctrl
1bdc0 46 6c 61 67 73 20 70 61 72 61 6d 65 74 65 72 20  Flags parameter 
1bdd0 6f 66 20 73 71 6c 69 74 65 33 57 68 65 72 65 42  of sqlite3WhereB
1bde0 65 67 69 6e 28 29 0a 2a 2a 20 61 6e 64 20 74 68  egin().** and th
1bdf0 65 20 57 68 65 72 65 49 6e 66 6f 2e 77 63 74 72  e WhereInfo.wctr
1be00 6c 46 6c 61 67 73 20 6d 65 6d 62 65 72 2e 0a 2a  lFlags member..*
1be10 2a 0a 2a 2a 20 56 61 6c 75 65 20 63 6f 6e 73 74  *.** Value const
1be20 72 61 69 6e 74 73 20 28 65 6e 66 6f 72 63 65 64  raints (enforced
1be30 20 76 69 61 20 61 73 73 65 72 74 28 29 29 3a 0a   via assert()):.
1be40 2a 2a 20 20 20 20 20 57 48 45 52 45 5f 55 53 45  **     WHERE_USE
1be50 5f 4c 49 4d 49 54 20 20 3d 3d 20 53 46 5f 46 69  _LIMIT  == SF_Fi
1be60 78 65 64 4c 69 6d 69 74 0a 2a 2f 0a 23 64 65 66  xedLimit.*/.#def
1be70 69 6e 65 20 57 48 45 52 45 5f 4f 52 44 45 52 42  ine WHERE_ORDERB
1be80 59 5f 4e 4f 52 4d 41 4c 20 20 20 30 78 30 30 30  Y_NORMAL   0x000
1be90 30 20 2f 2a 20 4e 6f 2d 6f 70 20 2a 2f 0a 23 64  0 /* No-op */.#d
1bea0 65 66 69 6e 65 20 57 48 45 52 45 5f 4f 52 44 45  efine WHERE_ORDE
1beb0 52 42 59 5f 4d 49 4e 20 20 20 20 20 20 30 78 30  RBY_MIN      0x0
1bec0 30 30 31 20 2f 2a 20 4f 52 44 45 52 20 42 59 20  001 /* ORDER BY 
1bed0 70 72 6f 63 65 73 73 69 6e 67 20 66 6f 72 20 6d  processing for m
1bee0 69 6e 28 29 20 66 75 6e 63 20 2a 2f 0a 23 64 65  in() func */.#de
1bef0 66 69 6e 65 20 57 48 45 52 45 5f 4f 52 44 45 52  fine WHERE_ORDER
1bf00 42 59 5f 4d 41 58 20 20 20 20 20 20 30 78 30 30  BY_MAX      0x00
1bf10 30 32 20 2f 2a 20 4f 52 44 45 52 20 42 59 20 70  02 /* ORDER BY p
1bf20 72 6f 63 65 73 73 69 6e 67 20 66 6f 72 20 6d 61  rocessing for ma
1bf30 78 28 29 20 66 75 6e 63 20 2a 2f 0a 23 64 65 66  x() func */.#def
1bf40 69 6e 65 20 57 48 45 52 45 5f 4f 4e 45 50 41 53  ine WHERE_ONEPAS
1bf50 53 5f 44 45 53 49 52 45 44 20 20 30 78 30 30 30  S_DESIRED  0x000
1bf60 34 20 2f 2a 20 57 61 6e 74 20 74 6f 20 64 6f 20  4 /* Want to do 
1bf70 6f 6e 65 2d 70 61 73 73 20 55 50 44 41 54 45 2f  one-pass UPDATE/
1bf80 44 45 4c 45 54 45 20 2a 2f 0a 23 64 65 66 69 6e  DELETE */.#defin
1bf90 65 20 57 48 45 52 45 5f 4f 4e 45 50 41 53 53 5f  e WHERE_ONEPASS_
1bfa0 4d 55 4c 54 49 52 4f 57 20 30 78 30 30 30 38 20  MULTIROW 0x0008 
1bfb0 2f 2a 20 4f 4e 45 50 41 53 53 20 69 73 20 6f 6b  /* ONEPASS is ok
1bfc0 20 77 69 74 68 20 6d 75 6c 74 69 70 6c 65 20 72   with multiple r
1bfd0 6f 77 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57  ows */.#define W
1bfe0 48 45 52 45 5f 44 55 50 4c 49 43 41 54 45 53 5f  HERE_DUPLICATES_
1bff0 4f 4b 20 20 20 20 30 78 30 30 31 30 20 2f 2a 20  OK    0x0010 /* 
1c000 4f 6b 20 74 6f 20 72 65 74 75 72 6e 20 61 20 72  Ok to return a r
1c010 6f 77 20 6d 6f 72 65 20 74 68 61 6e 20 6f 6e 63  ow more than onc
1c020 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45  e */.#define WHE
1c030 52 45 5f 4f 52 5f 53 55 42 43 4c 41 55 53 45 20  RE_OR_SUBCLAUSE 
1c040 20 20 20 20 30 78 30 30 32 30 20 2f 2a 20 50 72      0x0020 /* Pr
1c050 6f 63 65 73 73 69 6e 67 20 61 20 73 75 62 2d 57  ocessing a sub-W
1c060 48 45 52 45 20 61 73 20 70 61 72 74 20 6f 66 0a  HERE as part of.
1c070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c090 20 20 20 20 20 20 2a 2a 20 74 68 65 20 4f 52 20        ** the OR 
1c0a0 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 20 20 2a 2f  optimization  */
1c0b0 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 47  .#define WHERE_G
1c0c0 52 4f 55 50 42 59 20 20 20 20 20 20 20 20 20 20  ROUPBY          
1c0d0 30 78 30 30 34 30 20 2f 2a 20 70 4f 72 64 65 72  0x0040 /* pOrder
1c0e0 42 79 20 69 73 20 72 65 61 6c 6c 79 20 61 20 47  By is really a G
1c0f0 52 4f 55 50 20 42 59 20 2a 2f 0a 23 64 65 66 69  ROUP BY */.#defi
1c100 6e 65 20 57 48 45 52 45 5f 44 49 53 54 49 4e 43  ne WHERE_DISTINC
1c110 54 42 59 20 20 20 20 20 20 20 30 78 30 30 38 30  TBY       0x0080
1c120 20 2f 2a 20 70 4f 72 64 65 72 62 79 20 69 73 20   /* pOrderby is 
1c130 72 65 61 6c 6c 79 20 61 20 44 49 53 54 49 4e 43  really a DISTINC
1c140 54 20 63 6c 61 75 73 65 20 2a 2f 0a 23 64 65 66  T clause */.#def
1c150 69 6e 65 20 57 48 45 52 45 5f 57 41 4e 54 5f 44  ine WHERE_WANT_D
1c160 49 53 54 49 4e 43 54 20 20 20 20 30 78 30 31 30  ISTINCT    0x010
1c170 30 20 2f 2a 20 41 6c 6c 20 6f 75 74 70 75 74 20  0 /* All output 
1c180 6e 65 65 64 73 20 74 6f 20 62 65 20 64 69 73 74  needs to be dist
1c190 69 6e 63 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20  inct */.#define 
1c1a0 57 48 45 52 45 5f 53 4f 52 54 42 59 47 52 4f 55  WHERE_SORTBYGROU
1c1b0 50 20 20 20 20 20 20 30 78 30 32 30 30 20 2f 2a  P      0x0200 /*
1c1c0 20 53 75 70 70 6f 72 74 20 73 71 6c 69 74 65 33   Support sqlite3
1c1d0 57 68 65 72 65 49 73 53 6f 72 74 65 64 28 29 20  WhereIsSorted() 
1c1e0 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45  */.#define WHERE
1c1f0 5f 53 45 45 4b 5f 54 41 42 4c 45 20 20 20 20 20  _SEEK_TABLE     
1c200 20 20 30 78 30 34 30 30 20 2f 2a 20 44 6f 20 6e    0x0400 /* Do n
1c210 6f 74 20 64 65 66 65 72 20 73 65 65 6b 73 20 6f  ot defer seeks o
1c220 6e 20 6d 61 69 6e 20 74 61 62 6c 65 20 2a 2f 0a  n main table */.
1c230 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 4f 52  #define WHERE_OR
1c240 44 45 52 42 59 5f 4c 49 4d 49 54 20 20 20 20 30  DERBY_LIMIT    0
1c250 78 30 38 30 30 20 2f 2a 20 4f 52 44 45 52 42 59  x0800 /* ORDERBY
1c260 2b 4c 49 4d 49 54 20 6f 6e 20 74 68 65 20 69 6e  +LIMIT on the in
1c270 6e 65 72 20 6c 6f 6f 70 20 2a 2f 0a 23 64 65 66  ner loop */.#def
1c280 69 6e 65 20 57 48 45 52 45 5f 53 45 45 4b 5f 55  ine WHERE_SEEK_U
1c290 4e 49 51 5f 54 41 42 4c 45 20 20 30 78 31 30 30  NIQ_TABLE  0x100
1c2a0 30 20 2f 2a 20 44 6f 20 6e 6f 74 20 64 65 66 65  0 /* Do not defe
1c2b0 72 20 73 65 65 6b 73 20 69 66 20 75 6e 69 71 75  r seeks if uniqu
1c2c0 65 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20  e */.           
1c2d0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1c2e0 20 20 20 20 30 78 32 30 30 30 20 20 20 20 6e 6f      0x2000    no
1c2f0 74 20 63 75 72 72 65 6e 74 6c 79 20 75 73 65 64  t currently used
1c300 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52   */.#define WHER
1c310 45 5f 55 53 45 5f 4c 49 4d 49 54 20 20 20 20 20  E_USE_LIMIT     
1c320 20 20 20 30 78 34 30 30 30 20 2f 2a 20 55 73 65     0x4000 /* Use
1c330 20 74 68 65 20 4c 49 4d 49 54 20 69 6e 20 63 6f   the LIMIT in co
1c340 73 74 20 65 73 74 69 6d 61 74 65 73 20 2a 2f 0a  st estimates */.
1c350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c360 20 20 20 20 20 20 20 20 2f 2a 20 20 20 20 20 30          /*     0
1c370 78 38 30 30 30 20 20 20 20 6e 6f 74 20 63 75 72  x8000    not cur
1c380 72 65 6e 74 6c 79 20 75 73 65 64 20 2a 2f 0a 0a  rently used */..
1c390 2f 2a 20 41 6c 6c 6f 77 65 64 20 72 65 74 75 72  /* Allowed retur
1c3a0 6e 20 76 61 6c 75 65 73 20 66 72 6f 6d 20 73 71  n values from sq
1c3b0 6c 69 74 65 33 57 68 65 72 65 49 73 44 69 73 74  lite3WhereIsDist
1c3c0 69 6e 63 74 28 29 0a 2a 2f 0a 23 64 65 66 69 6e  inct().*/.#defin
1c3d0 65 20 57 48 45 52 45 5f 44 49 53 54 49 4e 43 54  e WHERE_DISTINCT
1c3e0 5f 4e 4f 4f 50 20 20 20 20 20 20 30 20 20 2f 2a  _NOOP      0  /*
1c3f0 20 44 49 53 54 49 4e 43 54 20 6b 65 79 77 6f 72   DISTINCT keywor
1c400 64 20 6e 6f 74 20 75 73 65 64 20 2a 2f 0a 23 64  d not used */.#d
1c410 65 66 69 6e 65 20 57 48 45 52 45 5f 44 49 53 54  efine WHERE_DIST
1c420 49 4e 43 54 5f 55 4e 49 51 55 45 20 20 20 20 31  INCT_UNIQUE    1
1c430 20 20 2f 2a 20 4e 6f 20 64 75 70 6c 69 63 61 74    /* No duplicat
1c440 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48  es */.#define WH
1c450 45 52 45 5f 44 49 53 54 49 4e 43 54 5f 4f 52 44  ERE_DISTINCT_ORD
1c460 45 52 45 44 20 20 20 32 20 20 2f 2a 20 41 6c 6c  ERED   2  /* All
1c470 20 64 75 70 6c 69 63 61 74 65 73 20 61 72 65 20   duplicates are 
1c480 61 64 6a 61 63 65 6e 74 20 2a 2f 0a 23 64 65 66  adjacent */.#def
1c490 69 6e 65 20 57 48 45 52 45 5f 44 49 53 54 49 4e  ine WHERE_DISTIN
1c4a0 43 54 5f 55 4e 4f 52 44 45 52 45 44 20 33 20 20  CT_UNORDERED 3  
1c4b0 2f 2a 20 44 75 70 6c 69 63 61 74 65 73 20 61 72  /* Duplicates ar
1c4c0 65 20 73 63 61 74 74 65 72 65 64 20 2a 2f 0a 0a  e scattered */..
1c4d0 2f 2a 0a 2a 2a 20 41 20 4e 61 6d 65 43 6f 6e 74  /*.** A NameCont
1c4e0 65 78 74 20 64 65 66 69 6e 65 73 20 61 20 63 6f  ext defines a co
1c4f0 6e 74 65 78 74 20 69 6e 20 77 68 69 63 68 20 74  ntext in which t
1c500 6f 20 72 65 73 6f 6c 76 65 20 74 61 62 6c 65 20  o resolve table 
1c510 61 6e 64 20 63 6f 6c 75 6d 6e 0a 2a 2a 20 6e 61  and column.** na
1c520 6d 65 73 2e 20 20 54 68 65 20 63 6f 6e 74 65 78  mes.  The contex
1c530 74 20 63 6f 6e 73 69 73 74 73 20 6f 66 20 61 20  t consists of a 
1c540 6c 69 73 74 20 6f 66 20 74 61 62 6c 65 73 20 28  list of tables (
1c550 74 68 65 20 70 53 72 63 4c 69 73 74 29 20 66 69  the pSrcList) fi
1c560 65 6c 64 20 61 6e 64 0a 2a 2a 20 61 20 6c 69 73  eld and.** a lis
1c570 74 20 6f 66 20 6e 61 6d 65 64 20 65 78 70 72 65  t of named expre
1c580 73 73 69 6f 6e 20 28 70 45 4c 69 73 74 29 2e 20  ssion (pEList). 
1c590 20 54 68 65 20 6e 61 6d 65 64 20 65 78 70 72 65   The named expre
1c5a0 73 73 69 6f 6e 20 6c 69 73 74 20 6d 61 79 0a 2a  ssion list may.*
1c5b0 2a 20 62 65 20 4e 55 4c 4c 2e 20 20 54 68 65 20  * be NULL.  The 
1c5c0 70 53 72 63 20 63 6f 72 72 65 73 70 6f 6e 64 73  pSrc corresponds
1c5d0 20 74 6f 20 74 68 65 20 46 52 4f 4d 20 63 6c 61   to the FROM cla
1c5e0 75 73 65 20 6f 66 20 61 20 53 45 4c 45 43 54 20  use of a SELECT 
1c5f0 6f 72 0a 2a 2a 20 74 6f 20 74 68 65 20 74 61 62  or.** to the tab
1c600 6c 65 20 62 65 69 6e 67 20 6f 70 65 72 61 74 65  le being operate
1c610 64 20 6f 6e 20 62 79 20 49 4e 53 45 52 54 2c 20  d on by INSERT, 
1c620 55 50 44 41 54 45 2c 20 6f 72 20 44 45 4c 45 54  UPDATE, or DELET
1c630 45 2e 20 20 54 68 65 0a 2a 2a 20 70 45 4c 69 73  E.  The.** pELis
1c640 74 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f  t corresponds to
1c650 20 74 68 65 20 72 65 73 75 6c 74 20 73 65 74 20   the result set 
1c660 6f 66 20 61 20 53 45 4c 45 43 54 20 61 6e 64 20  of a SELECT and 
1c670 69 73 20 4e 55 4c 4c 20 66 6f 72 0a 2a 2a 20 6f  is NULL for.** o
1c680 74 68 65 72 20 73 74 61 74 65 6d 65 6e 74 73 2e  ther statements.
1c690 0a 2a 2a 0a 2a 2a 20 4e 61 6d 65 43 6f 6e 74 65  .**.** NameConte
1c6a0 78 74 73 20 63 61 6e 20 62 65 20 6e 65 73 74 65  xts can be neste
1c6b0 64 2e 20 20 57 68 65 6e 20 72 65 73 6f 6c 76 69  d.  When resolvi
1c6c0 6e 67 20 6e 61 6d 65 73 2c 20 74 68 65 20 69 6e  ng names, the in
1c6d0 6e 65 72 2d 6d 6f 73 74 0a 2a 2a 20 63 6f 6e 74  ner-most.** cont
1c6e0 65 78 74 20 69 73 20 73 65 61 72 63 68 65 64 20  ext is searched 
1c6f0 66 69 72 73 74 2e 20 20 49 66 20 6e 6f 20 6d 61  first.  If no ma
1c700 74 63 68 20 69 73 20 66 6f 75 6e 64 2c 20 74 68  tch is found, th
1c710 65 20 6e 65 78 74 20 6f 75 74 65 72 0a 2a 2a 20  e next outer.** 
1c720 63 6f 6e 74 65 78 74 20 69 73 20 63 68 65 63 6b  context is check
1c730 65 64 2e 20 20 49 66 20 74 68 65 72 65 20 69 73  ed.  If there is
1c740 20 73 74 69 6c 6c 20 6e 6f 20 6d 61 74 63 68 2c   still no match,
1c750 20 74 68 65 20 6e 65 78 74 20 63 6f 6e 74 65 78   the next contex
1c760 74 0a 2a 2a 20 69 73 20 63 68 65 63 6b 65 64 2e  t.** is checked.
1c770 20 20 54 68 69 73 20 70 72 6f 63 65 73 73 20 63    This process c
1c780 6f 6e 74 69 6e 75 65 73 20 75 6e 74 69 6c 20 65  ontinues until e
1c790 69 74 68 65 72 20 61 20 6d 61 74 63 68 20 69 73  ither a match is
1c7a0 20 66 6f 75 6e 64 0a 2a 2a 20 6f 72 20 61 6c 6c   found.** or all
1c7b0 20 63 6f 6e 74 65 78 74 73 20 61 72 65 20 63 68   contexts are ch
1c7c0 65 63 6b 2e 20 20 57 68 65 6e 20 61 20 6d 61 74  eck.  When a mat
1c7d0 63 68 20 69 73 20 66 6f 75 6e 64 2c 20 74 68 65  ch is found, the
1c7e0 20 6e 52 65 66 20 6d 65 6d 62 65 72 20 6f 66 0a   nRef member of.
1c7f0 2a 2a 20 74 68 65 20 63 6f 6e 74 65 78 74 20 63  ** the context c
1c800 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 6d 61  ontaining the ma
1c810 74 63 68 20 69 73 20 69 6e 63 72 65 6d 65 6e 74  tch is increment
1c820 65 64 2e 0a 2a 2a 0a 2a 2a 20 45 61 63 68 20 73  ed..**.** Each s
1c830 75 62 71 75 65 72 79 20 67 65 74 73 20 61 20 6e  ubquery gets a n
1c840 65 77 20 4e 61 6d 65 43 6f 6e 74 65 78 74 2e 20  ew NameContext. 
1c850 20 54 68 65 20 70 4e 65 78 74 20 66 69 65 6c 64   The pNext field
1c860 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 0a 2a   points to the.*
1c870 2a 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20 69 6e  * NameContext in
1c880 20 74 68 65 20 70 61 72 65 6e 74 20 71 75 65 72   the parent quer
1c890 79 2e 20 20 54 68 75 73 20 74 68 65 20 70 72 6f  y.  Thus the pro
1c8a0 63 65 73 73 20 6f 66 20 73 63 61 6e 6e 69 6e 67  cess of scanning
1c8b0 20 74 68 65 0a 2a 2a 20 4e 61 6d 65 43 6f 6e 74   the.** NameCont
1c8c0 65 78 74 20 6c 69 73 74 20 63 6f 72 72 65 73 70  ext list corresp
1c8d0 6f 6e 64 73 20 74 6f 20 73 65 61 72 63 68 69 6e  onds to searchin
1c8e0 67 20 74 68 72 6f 75 67 68 20 73 75 63 63 65 73  g through succes
1c8f0 73 69 76 65 6c 79 20 6f 75 74 65 72 0a 2a 2a 20  sively outer.** 
1c900 73 75 62 71 75 65 72 69 65 73 20 6c 6f 6f 6b 69  subqueries looki
1c910 6e 67 20 66 6f 72 20 61 20 6d 61 74 63 68 2e 0a  ng for a match..
1c920 2a 2f 0a 73 74 72 75 63 74 20 4e 61 6d 65 43 6f  */.struct NameCo
1c930 6e 74 65 78 74 20 7b 0a 20 20 50 61 72 73 65 20  ntext {.  Parse 
1c940 2a 70 50 61 72 73 65 3b 20 20 20 20 20 20 20 2f  *pParse;       /
1c950 2a 20 54 68 65 20 70 61 72 73 65 72 20 2a 2f 0a  * The parser */.
1c960 20 20 53 72 63 4c 69 73 74 20 2a 70 53 72 63 4c    SrcList *pSrcL
1c970 69 73 74 3b 20 20 20 2f 2a 20 4f 6e 65 20 6f 72  ist;   /* One or
1c980 20 6d 6f 72 65 20 74 61 62 6c 65 73 20 75 73 65   more tables use
1c990 64 20 74 6f 20 72 65 73 6f 6c 76 65 20 6e 61 6d  d to resolve nam
1c9a0 65 73 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b 0a  es */.  union {.
1c9b0 20 20 20 20 45 78 70 72 4c 69 73 74 20 2a 70 45      ExprList *pE
1c9c0 4c 69 73 74 3b 20 20 20 20 2f 2a 20 4f 70 74 69  List;    /* Opti
1c9d0 6f 6e 61 6c 20 6c 69 73 74 20 6f 66 20 72 65 73  onal list of res
1c9e0 75 6c 74 2d 73 65 74 20 63 6f 6c 75 6d 6e 73 20  ult-set columns 
1c9f0 2a 2f 0a 20 20 20 20 41 67 67 49 6e 66 6f 20 2a  */.    AggInfo *
1ca00 70 41 67 67 49 6e 66 6f 3b 20 20 20 2f 2a 20 49  pAggInfo;   /* I
1ca10 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74  nformation about
1ca20 20 61 67 67 72 65 67 61 74 65 73 20 61 74 20 74   aggregates at t
1ca30 68 69 73 20 6c 65 76 65 6c 20 2a 2f 0a 20 20 20  his level */.   
1ca40 20 55 70 73 65 72 74 20 2a 70 55 70 73 65 72 74   Upsert *pUpsert
1ca50 3b 20 20 20 20 20 2f 2a 20 4f 4e 20 43 4f 4e 46  ;     /* ON CONF
1ca60 4c 49 43 54 20 63 6c 61 75 73 65 20 69 6e 66 6f  LICT clause info
1ca70 72 6d 61 74 69 6f 6e 20 66 72 6f 6d 20 61 6e 20  rmation from an 
1ca80 75 70 73 65 72 74 20 2a 2f 0a 20 20 7d 20 75 4e  upsert */.  } uN
1ca90 43 3b 0a 20 20 4e 61 6d 65 43 6f 6e 74 65 78 74  C;.  NameContext
1caa0 20 2a 70 4e 65 78 74 3b 20 20 2f 2a 20 4e 65 78   *pNext;  /* Nex
1cab0 74 20 6f 75 74 65 72 20 6e 61 6d 65 20 63 6f 6e  t outer name con
1cac0 74 65 78 74 2e 20 20 4e 55 4c 4c 20 66 6f 72 20  text.  NULL for 
1cad0 6f 75 74 65 72 6d 6f 73 74 20 2a 2f 0a 20 20 69  outermost */.  i
1cae0 6e 74 20 6e 52 65 66 3b 20 20 20 20 20 20 20 20  nt nRef;        
1caf0 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
1cb00 20 6e 61 6d 65 73 20 72 65 73 6f 6c 76 65 64 20   names resolved 
1cb10 62 79 20 74 68 69 73 20 63 6f 6e 74 65 78 74 20  by this context 
1cb20 2a 2f 0a 20 20 69 6e 74 20 6e 45 72 72 3b 20 20  */.  int nErr;  
1cb30 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
1cb40 62 65 72 20 6f 66 20 65 72 72 6f 72 73 20 65 6e  ber of errors en
1cb50 63 6f 75 6e 74 65 72 65 64 20 77 68 69 6c 65 20  countered while 
1cb60 72 65 73 6f 6c 76 69 6e 67 20 6e 61 6d 65 73 20  resolving names 
1cb70 2a 2f 0a 20 20 75 31 36 20 6e 63 46 6c 61 67 73  */.  u16 ncFlags
1cb80 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 5a 65 72  ;         /* Zer
1cb90 6f 20 6f 72 20 6d 6f 72 65 20 4e 43 5f 2a 20 66  o or more NC_* f
1cba0 6c 61 67 73 20 64 65 66 69 6e 65 64 20 62 65 6c  lags defined bel
1cbb0 6f 77 20 2a 2f 0a 20 20 53 65 6c 65 63 74 20 2a  ow */.  Select *
1cbc0 70 57 69 6e 53 65 6c 65 63 74 3b 20 20 2f 2a 20  pWinSelect;  /* 
1cbd0 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74  SELECT statement
1cbe0 20 66 6f 72 20 61 6e 79 20 77 69 6e 64 6f 77 20   for any window 
1cbf0 66 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a 7d 3b 0a  functions */.};.
1cc00 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 76  ./*.** Allowed v
1cc10 61 6c 75 65 73 20 66 6f 72 20 74 68 65 20 4e 61  alues for the Na
1cc20 6d 65 43 6f 6e 74 65 78 74 2c 20 6e 63 46 6c 61  meContext, ncFla
1cc30 67 73 20 66 69 65 6c 64 2e 0a 2a 2a 0a 2a 2a 20  gs field..**.** 
1cc40 56 61 6c 75 65 20 63 6f 6e 73 74 72 61 69 6e 74  Value constraint
1cc50 73 20 28 61 6c 6c 20 63 68 65 63 6b 65 64 20 76  s (all checked v
1cc60 69 61 20 61 73 73 65 72 74 28 29 29 3a 0a 2a 2a  ia assert()):.**
1cc70 20 20 20 20 4e 43 5f 48 61 73 41 67 67 20 20 20      NC_HasAgg   
1cc80 20 3d 3d 20 53 46 5f 48 61 73 41 67 67 0a 2a 2a   == SF_HasAgg.**
1cc90 20 20 20 20 4e 43 5f 4d 69 6e 4d 61 78 41 67 67      NC_MinMaxAgg
1cca0 20 3d 3d 20 53 46 5f 4d 69 6e 4d 61 78 41 67 67   == SF_MinMaxAgg
1ccb0 20 3d 3d 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f   == SQLITE_FUNC_
1ccc0 4d 49 4e 4d 41 58 0a 2a 2a 0a 2a 2f 0a 23 64 65  MINMAX.**.*/.#de
1ccd0 66 69 6e 65 20 4e 43 5f 41 6c 6c 6f 77 41 67 67  fine NC_AllowAgg
1cce0 20 20 30 78 30 30 30 31 20 20 2f 2a 20 41 67 67    0x0001  /* Agg
1ccf0 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73  regate functions
1cd00 20 61 72 65 20 61 6c 6c 6f 77 65 64 20 68 65 72   are allowed her
1cd10 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f  e */.#define NC_
1cd20 50 61 72 74 49 64 78 20 20 20 30 78 30 30 30 32  PartIdx   0x0002
1cd30 20 20 2f 2a 20 54 72 75 65 20 69 66 20 72 65 73    /* True if res
1cd40 6f 6c 76 69 6e 67 20 61 20 70 61 72 74 69 61 6c  olving a partial
1cd50 20 69 6e 64 65 78 20 57 48 45 52 45 20 2a 2f 0a   index WHERE */.
1cd60 23 64 65 66 69 6e 65 20 4e 43 5f 49 73 43 68 65  #define NC_IsChe
1cd70 63 6b 20 20 20 30 78 30 30 30 34 20 20 2f 2a 20  ck   0x0004  /* 
1cd80 54 72 75 65 20 69 66 20 72 65 73 6f 6c 76 69 6e  True if resolvin
1cd90 67 20 6e 61 6d 65 73 20 69 6e 20 61 20 43 48 45  g names in a CHE
1cda0 43 4b 20 63 6f 6e 73 74 72 61 69 6e 74 20 2a 2f  CK constraint */
1cdb0 0a 23 64 65 66 69 6e 65 20 4e 43 5f 49 6e 41 67  .#define NC_InAg
1cdc0 67 46 75 6e 63 20 30 78 30 30 30 38 20 20 2f 2a  gFunc 0x0008  /*
1cdd0 20 54 72 75 65 20 69 66 20 61 6e 61 6c 79 7a 69   True if analyzi
1cde0 6e 67 20 61 72 67 75 6d 65 6e 74 73 20 74 6f 20  ng arguments to 
1cdf0 61 6e 20 61 67 67 20 66 75 6e 63 20 2a 2f 0a 23  an agg func */.#
1ce00 64 65 66 69 6e 65 20 4e 43 5f 48 61 73 41 67 67  define NC_HasAgg
1ce10 20 20 20 20 30 78 30 30 31 30 20 20 2f 2a 20 4f      0x0010  /* O
1ce20 6e 65 20 6f 72 20 6d 6f 72 65 20 61 67 67 72 65  ne or more aggre
1ce30 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 20 73  gate functions s
1ce40 65 65 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e  een */.#define N
1ce50 43 5f 49 64 78 45 78 70 72 20 20 20 30 78 30 30  C_IdxExpr   0x00
1ce60 32 30 20 20 2f 2a 20 54 72 75 65 20 69 66 20 72  20  /* True if r
1ce70 65 73 6f 6c 76 69 6e 67 20 63 6f 6c 75 6d 6e 73  esolving columns
1ce80 20 6f 66 20 43 52 45 41 54 45 20 49 4e 44 45 58   of CREATE INDEX
1ce90 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 56   */.#define NC_V
1cea0 61 72 53 65 6c 65 63 74 20 30 78 30 30 34 30 20  arSelect 0x0040 
1ceb0 20 2f 2a 20 41 20 63 6f 72 72 65 6c 61 74 65 64   /* A correlated
1cec0 20 73 75 62 71 75 65 72 79 20 68 61 73 20 62 65   subquery has be
1ced0 65 6e 20 73 65 65 6e 20 2a 2f 0a 23 64 65 66 69  en seen */.#defi
1cee0 6e 65 20 4e 43 5f 55 45 4c 69 73 74 20 20 20 20  ne NC_UEList    
1cef0 30 78 30 30 38 30 20 20 2f 2a 20 54 72 75 65 20  0x0080  /* True 
1cf00 69 66 20 75 4e 43 2e 70 45 4c 69 73 74 20 69 73  if uNC.pEList is
1cf10 20 75 73 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65   used */.#define
1cf20 20 4e 43 5f 55 41 67 67 49 6e 66 6f 20 20 30 78   NC_UAggInfo  0x
1cf30 30 31 30 30 20 20 2f 2a 20 54 72 75 65 20 69 66  0100  /* True if
1cf40 20 75 4e 43 2e 70 41 67 67 49 6e 66 6f 20 69 73   uNC.pAggInfo is
1cf50 20 75 73 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65   used */.#define
1cf60 20 4e 43 5f 55 55 70 73 65 72 74 20 20 20 30 78   NC_UUpsert   0x
1cf70 30 32 30 30 20 20 2f 2a 20 54 72 75 65 20 69 66  0200  /* True if
1cf80 20 75 4e 43 2e 70 55 70 73 65 72 74 20 69 73 20   uNC.pUpsert is 
1cf90 75 73 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20  used */.#define 
1cfa0 4e 43 5f 4d 69 6e 4d 61 78 41 67 67 20 30 78 31  NC_MinMaxAgg 0x1
1cfb0 30 30 30 20 20 2f 2a 20 6d 69 6e 2f 6d 61 78 20  000  /* min/max 
1cfc0 61 67 67 72 65 67 61 74 65 73 20 73 65 65 6e 2e  aggregates seen.
1cfd0 20 20 53 65 65 20 6e 6f 74 65 20 61 62 6f 76 65    See note above
1cfe0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 43   */.#define NC_C
1cff0 6f 6d 70 6c 65 78 20 20 20 30 78 32 30 30 30 20  omplex   0x2000 
1d000 20 2f 2a 20 54 72 75 65 20 69 66 20 61 20 66 75   /* True if a fu
1d010 6e 63 74 69 6f 6e 20 6f 72 20 73 75 62 71 75 65  nction or subque
1d020 72 79 20 73 65 65 6e 20 2a 2f 0a 23 64 65 66 69  ry seen */.#defi
1d030 6e 65 20 4e 43 5f 41 6c 6c 6f 77 57 69 6e 20 20  ne NC_AllowWin  
1d040 30 78 34 30 30 30 20 20 2f 2a 20 57 69 6e 64 6f  0x4000  /* Windo
1d050 77 20 66 75 6e 63 74 69 6f 6e 73 20 61 72 65 20  w functions are 
1d060 61 6c 6c 6f 77 65 64 20 68 65 72 65 20 2a 2f 0a  allowed here */.
1d070 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e  ./*.** An instan
1d080 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77  ce of the follow
1d090 69 6e 67 20 6f 62 6a 65 63 74 20 64 65 73 63 72  ing object descr
1d0a0 69 62 65 73 20 61 20 73 69 6e 67 6c 65 20 4f 4e  ibes a single ON
1d0b0 20 43 4f 4e 46 4c 49 43 54 0a 2a 2a 20 63 6c 61   CONFLICT.** cla
1d0c0 75 73 65 20 69 6e 20 61 6e 20 75 70 73 65 72 74  use in an upsert
1d0d0 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 70 55 70 73  ..**.** The pUps
1d0e0 65 72 74 54 61 72 67 65 74 20 66 69 65 6c 64 20  ertTarget field 
1d0f0 69 73 20 6f 6e 6c 79 20 73 65 74 20 69 66 20 74  is only set if t
1d100 68 65 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 63  he ON CONFLICT c
1d110 6c 61 75 73 65 20 69 6e 63 6c 75 64 65 73 0a 2a  lause includes.*
1d120 2a 20 63 6f 6e 66 6c 69 63 74 2d 74 61 72 67 65  * conflict-targe
1d130 74 20 63 6c 61 75 73 65 2e 20 20 28 49 6e 20 22  t clause.  (In "
1d140 4f 4e 20 43 4f 4e 46 4c 49 43 54 28 61 2c 62 29  ON CONFLICT(a,b)
1d150 22 20 74 68 65 20 22 28 61 2c 62 29 22 20 69 73  " the "(a,b)" is
1d160 20 74 68 65 0a 2a 2a 20 63 6f 6e 66 6c 69 63 74   the.** conflict
1d170 2d 74 61 72 67 65 74 20 63 6c 61 75 73 65 2e 29  -target clause.)
1d180 20 20 54 68 65 20 70 55 70 73 65 72 74 54 61 72    The pUpsertTar
1d190 67 65 74 57 68 65 72 65 20 69 73 20 74 68 65 20  getWhere is the 
1d1a0 6f 70 74 69 6f 6e 61 6c 0a 2a 2a 20 57 48 45 52  optional.** WHER
1d1b0 45 20 63 6c 61 75 73 65 20 75 73 65 64 20 74 6f  E clause used to
1d1c0 20 69 64 65 6e 74 69 66 79 20 70 61 72 74 69 61   identify partia
1d1d0 6c 20 75 6e 69 71 75 65 20 69 6e 64 65 78 65 73  l unique indexes
1d1e0 2e 0a 2a 2a 0a 2a 2a 20 70 55 70 73 65 72 74 53  ..**.** pUpsertS
1d1f0 65 74 20 69 73 20 74 68 65 20 6c 69 73 74 20 6f  et is the list o
1d200 66 20 63 6f 6c 75 6d 6e 3d 65 78 70 72 20 74 65  f column=expr te
1d210 72 6d 73 20 6f 66 20 74 68 65 20 55 50 44 41 54  rms of the UPDAT
1d220 45 20 73 74 61 74 65 6d 65 6e 74 2e 20 0a 2a 2a  E statement. .**
1d230 20 54 68 65 20 70 55 70 73 65 72 74 53 65 74 20   The pUpsertSet 
1d240 66 69 65 6c 64 20 69 73 20 4e 55 4c 4c 20 66 6f  field is NULL fo
1d250 72 20 61 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20  r a ON CONFLICT 
1d260 44 4f 20 4e 4f 54 48 49 4e 47 2e 20 20 54 68 65  DO NOTHING.  The
1d270 0a 2a 2a 20 70 55 70 73 65 72 74 57 68 65 72 65  .** pUpsertWhere
1d280 20 69 73 20 74 68 65 20 57 48 45 52 45 20 63 6c   is the WHERE cl
1d290 61 75 73 65 20 66 6f 72 20 74 68 65 20 55 50 44  ause for the UPD
1d2a0 41 54 45 20 61 6e 64 20 69 73 20 4e 55 4c 4c 20  ATE and is NULL 
1d2b0 69 66 20 74 68 65 0a 2a 2a 20 57 48 45 52 45 20  if the.** WHERE 
1d2c0 63 6c 61 75 73 65 20 69 73 20 6f 6d 69 74 74 65  clause is omitte
1d2d0 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 55 70 73  d..*/.struct Ups
1d2e0 65 72 74 20 7b 0a 20 20 45 78 70 72 4c 69 73 74  ert {.  ExprList
1d2f0 20 2a 70 55 70 73 65 72 74 54 61 72 67 65 74 3b   *pUpsertTarget;
1d300 20 20 2f 2a 20 4f 70 74 69 6f 6e 61 6c 20 64 65    /* Optional de
1d310 73 63 72 69 70 74 69 6f 6e 20 6f 66 20 63 6f 6e  scription of con
1d320 66 6c 69 63 74 69 6e 67 20 69 6e 64 65 78 20 2a  flicting index *
1d330 2f 0a 20 20 45 78 70 72 20 2a 70 55 70 73 65 72  /.  Expr *pUpser
1d340 74 54 61 72 67 65 74 57 68 65 72 65 3b 20 2f 2a  tTargetWhere; /*
1d350 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 66 6f   WHERE clause fo
1d360 72 20 70 61 72 74 69 61 6c 20 69 6e 64 65 78 20  r partial index 
1d370 74 61 72 67 65 74 73 20 2a 2f 0a 20 20 45 78 70  targets */.  Exp
1d380 72 4c 69 73 74 20 2a 70 55 70 73 65 72 74 53 65  rList *pUpsertSe
1d390 74 3b 20 20 20 20 20 2f 2a 20 54 68 65 20 53 45  t;     /* The SE
1d3a0 54 20 63 6c 61 75 73 65 20 66 72 6f 6d 20 61 6e  T clause from an
1d3b0 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 55 50 44   ON CONFLICT UPD
1d3c0 41 54 45 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70  ATE */.  Expr *p
1d3d0 55 70 73 65 72 74 57 68 65 72 65 3b 20 20 20 20  UpsertWhere;    
1d3e0 20 20 20 2f 2a 20 57 48 45 52 45 20 63 6c 61 75     /* WHERE clau
1d3f0 73 65 20 66 6f 72 20 74 68 65 20 4f 4e 20 43 4f  se for the ON CO
1d400 4e 46 4c 49 43 54 20 55 50 44 41 54 45 20 2a 2f  NFLICT UPDATE */
1d410 0a 20 20 2f 2a 20 54 68 65 20 66 69 65 6c 64 73  .  /* The fields
1d420 20 61 62 6f 76 65 20 63 6f 6d 70 72 69 73 65 20   above comprise 
1d430 74 68 65 20 70 61 72 73 65 20 74 72 65 65 20 66  the parse tree f
1d440 6f 72 20 74 68 65 20 75 70 73 65 72 74 20 63 6c  or the upsert cl
1d450 61 75 73 65 2e 0a 20 20 2a 2a 20 54 68 65 20 66  ause..  ** The f
1d460 69 65 6c 64 73 20 62 65 6c 6f 77 20 61 72 65 20  ields below are 
1d470 75 73 65 64 20 74 6f 20 74 72 61 6e 73 66 65 72  used to transfer
1d480 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 66 72 6f   information fro
1d490 6d 20 74 68 65 20 49 4e 53 45 52 54 0a 20 20 2a  m the INSERT.  *
1d4a0 2a 20 70 72 6f 63 65 73 73 69 6e 67 20 64 6f 77  * processing dow
1d4b0 6e 20 69 6e 74 6f 20 74 68 65 20 55 50 44 41 54  n into the UPDAT
1d4c0 45 20 70 72 6f 63 65 73 73 69 6e 67 20 77 68 69  E processing whi
1d4d0 6c 65 20 67 65 6e 65 72 61 74 69 6e 67 20 63 6f  le generating co
1d4e0 64 65 2e 0a 20 20 2a 2a 20 55 70 73 65 72 74 20  de..  ** Upsert 
1d4f0 6f 77 6e 73 20 74 68 65 20 6d 65 6d 6f 72 79 20  owns the memory 
1d500 61 6c 6c 6f 63 61 74 65 64 20 61 62 6f 76 65 2c  allocated above,
1d510 20 62 75 74 20 6e 6f 74 20 74 68 65 20 6d 65 6d   but not the mem
1d520 6f 72 79 20 62 65 6c 6f 77 2e 20 2a 2f 0a 20 20  ory below. */.  
1d530 49 6e 64 65 78 20 2a 70 55 70 73 65 72 74 49 64  Index *pUpsertId
1d540 78 3b 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6e  x;        /* Con
1d550 73 74 72 61 69 6e 74 20 74 68 61 74 20 70 55 70  straint that pUp
1d560 73 65 72 74 54 61 72 67 65 74 20 69 64 65 6e 74  sertTarget ident
1d570 69 66 69 65 73 20 2a 2f 0a 20 20 53 72 63 4c 69  ifies */.  SrcLi
1d580 73 74 20 2a 70 55 70 73 65 72 74 53 72 63 3b 20  st *pUpsertSrc; 
1d590 20 20 20 20 20 2f 2a 20 54 61 62 6c 65 20 74 6f       /* Table to
1d5a0 20 62 65 20 75 70 64 61 74 65 64 20 2a 2f 0a 20   be updated */. 
1d5b0 20 69 6e 74 20 72 65 67 44 61 74 61 3b 20 20 20   int regData;   
1d5c0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 69             /* Fi
1d5d0 72 73 74 20 72 65 67 69 73 74 65 72 20 68 6f 6c  rst register hol
1d5e0 64 69 6e 67 20 61 72 72 61 79 20 6f 66 20 56 41  ding array of VA
1d5f0 4c 55 45 53 20 2a 2f 0a 20 20 69 6e 74 20 69 44  LUES */.  int iD
1d600 61 74 61 43 75 72 3b 20 20 20 20 20 20 20 20 20  ataCur;         
1d610 20 20 20 20 2f 2a 20 49 6e 64 65 78 20 6f 66 20      /* Index of 
1d620 74 68 65 20 64 61 74 61 20 63 75 72 73 6f 72 20  the data cursor 
1d630 2a 2f 0a 20 20 69 6e 74 20 69 49 64 78 43 75 72  */.  int iIdxCur
1d640 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
1d650 2a 20 49 6e 64 65 78 20 6f 66 20 74 68 65 20 66  * Index of the f
1d660 69 72 73 74 20 69 6e 64 65 78 20 63 75 72 73 6f  irst index curso
1d670 72 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41  r */.};../*.** A
1d680 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  n instance of th
1d690 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75  e following stru
1d6a0 63 74 75 72 65 20 63 6f 6e 74 61 69 6e 73 20 61  cture contains a
1d6b0 6c 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a 2a  ll information.*
1d6c0 2a 20 6e 65 65 64 65 64 20 74 6f 20 67 65 6e 65  * needed to gene
1d6d0 72 61 74 65 20 63 6f 64 65 20 66 6f 72 20 61 20  rate code for a 
1d6e0 73 69 6e 67 6c 65 20 53 45 4c 45 43 54 20 73 74  single SELECT st
1d6f0 61 74 65 6d 65 6e 74 2e 0a 2a 2a 0a 2a 2a 20 53  atement..**.** S
1d700 65 65 20 74 68 65 20 68 65 61 64 65 72 20 63 6f  ee the header co
1d710 6d 6d 65 6e 74 20 6f 6e 20 74 68 65 20 63 6f 6d  mment on the com
1d720 70 75 74 65 4c 69 6d 69 74 52 65 67 69 73 74 65  puteLimitRegiste
1d730 72 73 28 29 20 72 6f 75 74 69 6e 65 20 66 6f 72  rs() routine for
1d740 20 61 0a 2a 2a 20 64 65 74 61 69 6c 65 64 20 64   a.** detailed d
1d750 65 73 63 72 69 70 74 69 6f 6e 20 6f 66 20 74 68  escription of th
1d760 65 20 6d 65 61 6e 69 6e 67 20 6f 66 20 74 68 65  e meaning of the
1d770 20 69 4c 69 6d 69 74 20 61 6e 64 20 69 4f 66 66   iLimit and iOff
1d780 73 65 74 20 66 69 65 6c 64 73 2e 0a 2a 2a 0a 2a  set fields..**.*
1d790 2a 20 61 64 64 72 4f 70 65 6e 45 70 68 6d 5b 5d  * addrOpenEphm[]
1d7a0 20 65 6e 74 72 69 65 73 20 63 6f 6e 74 61 69 6e   entries contain
1d7b0 20 74 68 65 20 61 64 64 72 65 73 73 20 6f 66 20   the address of 
1d7c0 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c  OP_OpenEphemeral
1d7d0 20 6f 70 63 6f 64 65 73 2e 0a 2a 2a 20 54 68 65   opcodes..** The
1d7e0 73 65 20 61 64 64 72 65 73 73 65 73 20 6d 75 73  se addresses mus
1d7f0 74 20 62 65 20 73 74 6f 72 65 64 20 73 6f 20 74  t be stored so t
1d800 68 61 74 20 77 65 20 63 61 6e 20 67 6f 20 62 61  hat we can go ba
1d810 63 6b 20 61 6e 64 20 66 69 6c 6c 20 69 6e 0a 2a  ck and fill in.*
1d820 2a 20 74 68 65 20 50 34 5f 4b 45 59 49 4e 46 4f  * the P4_KEYINFO
1d830 20 61 6e 64 20 50 32 20 70 61 72 61 6d 65 74 65   and P2 paramete
1d840 72 73 20 6c 61 74 65 72 2e 20 20 4e 65 69 74 68  rs later.  Neith
1d850 65 72 20 74 68 65 20 4b 65 79 49 6e 66 6f 20 6e  er the KeyInfo n
1d860 6f 72 0a 2a 2a 20 74 68 65 20 6e 75 6d 62 65 72  or.** the number
1d870 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 50   of columns in P
1d880 32 20 63 61 6e 20 62 65 20 63 6f 6d 70 75 74 65  2 can be compute
1d890 64 20 61 74 20 74 68 65 20 73 61 6d 65 20 74 69  d at the same ti
1d8a0 6d 65 0a 2a 2a 20 61 73 20 74 68 65 20 4f 50 5f  me.** as the OP_
1d8b0 4f 70 65 6e 45 70 68 6d 20 69 6e 73 74 72 75 63  OpenEphm instruc
1d8c0 74 69 6f 6e 20 69 73 20 63 6f 64 65 64 20 62 65  tion is coded be
1d8d0 63 61 75 73 65 20 6e 6f 74 0a 2a 2a 20 65 6e 6f  cause not.** eno
1d8e0 75 67 68 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  ugh information 
1d8f0 61 62 6f 75 74 20 74 68 65 20 63 6f 6d 70 6f 75  about the compou
1d900 6e 64 20 71 75 65 72 79 20 69 73 20 6b 6e 6f 77  nd query is know
1d910 6e 20 61 74 20 74 68 61 74 20 70 6f 69 6e 74 2e  n at that point.
1d920 0a 2a 2a 20 54 68 65 20 4b 65 79 49 6e 66 6f 20  .** The KeyInfo 
1d930 66 6f 72 20 61 64 64 72 4f 70 65 6e 54 72 61 6e  for addrOpenTran
1d940 5b 30 5d 20 61 6e 64 20 5b 31 5d 20 63 6f 6e 74  [0] and [1] cont
1d950 61 69 6e 73 20 63 6f 6c 6c 61 74 69 6e 67 20 73  ains collating s
1d960 65 71 75 65 6e 63 65 73 0a 2a 2a 20 66 6f 72 20  equences.** for 
1d970 74 68 65 20 72 65 73 75 6c 74 20 73 65 74 2e 20  the result set. 
1d980 20 54 68 65 20 4b 65 79 49 6e 66 6f 20 66 6f 72   The KeyInfo for
1d990 20 61 64 64 72 4f 70 65 6e 45 70 68 6d 5b 32 5d   addrOpenEphm[2]
1d9a0 20 63 6f 6e 74 61 69 6e 73 20 63 6f 6c 6c 61 74   contains collat
1d9b0 69 6e 67 0a 2a 2a 20 73 65 71 75 65 6e 63 65 73  ing.** sequences
1d9c0 20 66 6f 72 20 74 68 65 20 4f 52 44 45 52 20 42   for the ORDER B
1d9d0 59 20 63 6c 61 75 73 65 2e 0a 2a 2f 0a 73 74 72  Y clause..*/.str
1d9e0 75 63 74 20 53 65 6c 65 63 74 20 7b 0a 20 20 45  uct Select {.  E
1d9f0 78 70 72 4c 69 73 74 20 2a 70 45 4c 69 73 74 3b  xprList *pEList;
1da00 20 20 20 20 20 20 2f 2a 20 54 68 65 20 66 69 65        /* The fie
1da10 6c 64 73 20 6f 66 20 74 68 65 20 72 65 73 75 6c  lds of the resul
1da20 74 20 2a 2f 0a 20 20 75 38 20 6f 70 3b 20 20 20  t */.  u8 op;   
1da30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1da40 20 4f 6e 65 20 6f 66 3a 20 54 4b 5f 55 4e 49 4f   One of: TK_UNIO
1da50 4e 20 54 4b 5f 41 4c 4c 20 54 4b 5f 49 4e 54 45  N TK_ALL TK_INTE
1da60 52 53 45 43 54 20 54 4b 5f 45 58 43 45 50 54 20  RSECT TK_EXCEPT 
1da70 2a 2f 0a 20 20 4c 6f 67 45 73 74 20 6e 53 65 6c  */.  LogEst nSel
1da80 65 63 74 52 6f 77 3b 20 20 20 20 20 2f 2a 20 45  ectRow;     /* E
1da90 73 74 69 6d 61 74 65 64 20 6e 75 6d 62 65 72 20  stimated number 
1daa0 6f 66 20 72 65 73 75 6c 74 20 72 6f 77 73 20 2a  of result rows *
1dab0 2f 0a 20 20 75 33 32 20 73 65 6c 46 6c 61 67 73  /.  u32 selFlags
1dac0 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61  ;          /* Va
1dad0 72 69 6f 75 73 20 53 46 5f 2a 20 76 61 6c 75 65  rious SF_* value
1dae0 73 20 2a 2f 0a 20 20 69 6e 74 20 69 4c 69 6d 69  s */.  int iLimi
1daf0 74 2c 20 69 4f 66 66 73 65 74 3b 20 20 20 2f 2a  t, iOffset;   /*
1db00 20 4d 65 6d 6f 72 79 20 72 65 67 69 73 74 65 72   Memory register
1db10 73 20 68 6f 6c 64 69 6e 67 20 4c 49 4d 49 54 20  s holding LIMIT 
1db20 26 20 4f 46 46 53 45 54 20 63 6f 75 6e 74 65 72  & OFFSET counter
1db30 73 20 2a 2f 0a 20 20 75 33 32 20 73 65 6c 49 64  s */.  u32 selId
1db40 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
1db50 20 55 6e 69 71 75 65 20 69 64 65 6e 74 69 66 69   Unique identifi
1db60 65 72 20 6e 75 6d 62 65 72 20 66 6f 72 20 74 68  er number for th
1db70 69 73 20 53 45 4c 45 43 54 20 2a 2f 0a 20 20 69  is SELECT */.  i
1db80 6e 74 20 61 64 64 72 4f 70 65 6e 45 70 68 6d 5b  nt addrOpenEphm[
1db90 32 5d 3b 20 20 20 2f 2a 20 4f 50 5f 4f 70 65 6e  2];   /* OP_Open
1dba0 45 70 68 65 6d 20 6f 70 63 6f 64 65 73 20 72 65  Ephem opcodes re
1dbb0 6c 61 74 65 64 20 74 6f 20 74 68 69 73 20 73 65  lated to this se
1dbc0 6c 65 63 74 20 2a 2f 0a 20 20 53 72 63 4c 69 73  lect */.  SrcLis
1dbd0 74 20 2a 70 53 72 63 3b 20 20 20 20 20 20 20 20  t *pSrc;        
1dbe0 20 2f 2a 20 54 68 65 20 46 52 4f 4d 20 63 6c 61   /* The FROM cla
1dbf0 75 73 65 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70  use */.  Expr *p
1dc00 57 68 65 72 65 3b 20 20 20 20 20 20 20 20 20 20  Where;          
1dc10 2f 2a 20 54 68 65 20 57 48 45 52 45 20 63 6c 61  /* The WHERE cla
1dc20 75 73 65 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73  use */.  ExprLis
1dc30 74 20 2a 70 47 72 6f 75 70 42 79 3b 20 20 20 20  t *pGroupBy;    
1dc40 2f 2a 20 54 68 65 20 47 52 4f 55 50 20 42 59 20  /* The GROUP BY 
1dc50 63 6c 61 75 73 65 20 2a 2f 0a 20 20 45 78 70 72  clause */.  Expr
1dc60 20 2a 70 48 61 76 69 6e 67 3b 20 20 20 20 20 20   *pHaving;      
1dc70 20 20 20 2f 2a 20 54 68 65 20 48 41 56 49 4e 47     /* The HAVING
1dc80 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 45 78 70   clause */.  Exp
1dc90 72 4c 69 73 74 20 2a 70 4f 72 64 65 72 42 79 3b  rList *pOrderBy;
1dca0 20 20 20 20 2f 2a 20 54 68 65 20 4f 52 44 45 52      /* The ORDER
1dcb0 20 42 59 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20   BY clause */.  
1dcc0 53 65 6c 65 63 74 20 2a 70 50 72 69 6f 72 3b 20  Select *pPrior; 
1dcd0 20 20 20 20 20 20 20 2f 2a 20 50 72 69 6f 72 20         /* Prior 
1dce0 73 65 6c 65 63 74 20 69 6e 20 61 20 63 6f 6d 70  select in a comp
1dcf0 6f 75 6e 64 20 73 65 6c 65 63 74 20 73 74 61 74  ound select stat
1dd00 65 6d 65 6e 74 20 2a 2f 0a 20 20 53 65 6c 65 63  ement */.  Selec
1dd10 74 20 2a 70 4e 65 78 74 3b 20 20 20 20 20 20 20  t *pNext;       
1dd20 20 20 2f 2a 20 4e 65 78 74 20 73 65 6c 65 63 74    /* Next select
1dd30 20 74 6f 20 74 68 65 20 6c 65 66 74 20 69 6e 20   to the left in 
1dd40 61 20 63 6f 6d 70 6f 75 6e 64 20 2a 2f 0a 20 20  a compound */.  
1dd50 45 78 70 72 20 2a 70 4c 69 6d 69 74 3b 20 20 20  Expr *pLimit;   
1dd60 20 20 20 20 20 20 20 2f 2a 20 4c 49 4d 49 54 20         /* LIMIT 
1dd70 65 78 70 72 65 73 73 69 6f 6e 2e 20 4e 55 4c 4c  expression. NULL
1dd80 20 6d 65 61 6e 73 20 6e 6f 74 20 75 73 65 64 2e   means not used.
1dd90 20 2a 2f 0a 20 20 57 69 74 68 20 2a 70 57 69 74   */.  With *pWit
1dda0 68 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  h;           /* 
1ddb0 57 49 54 48 20 63 6c 61 75 73 65 20 61 74 74 61  WITH clause atta
1ddc0 63 68 65 64 20 74 6f 20 74 68 69 73 20 73 65 6c  ched to this sel
1ddd0 65 63 74 2e 20 4f 72 20 4e 55 4c 4c 2e 20 2a 2f  ect. Or NULL. */
1dde0 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
1ddf0 4f 4d 49 54 5f 57 49 4e 44 4f 57 46 55 4e 43 0a  OMIT_WINDOWFUNC.
1de00 20 20 57 69 6e 64 6f 77 20 2a 70 57 69 6e 3b 20    Window *pWin; 
1de10 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 69 73 74           /* List
1de20 20 6f 66 20 77 69 6e 64 6f 77 20 66 75 6e 63 74   of window funct
1de30 69 6f 6e 73 20 2a 2f 0a 20 20 57 69 6e 64 6f 77  ions */.  Window
1de40 20 2a 70 57 69 6e 44 65 66 6e 3b 20 20 20 20 20   *pWinDefn;     
1de50 20 2f 2a 20 4c 69 73 74 20 6f 66 20 6e 61 6d 65   /* List of name
1de60 64 20 77 69 6e 64 6f 77 20 64 65 66 69 6e 69 74  d window definit
1de70 69 6f 6e 73 20 2a 2f 0a 23 65 6e 64 69 66 0a 7d  ions */.#endif.}
1de80 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64  ;../*.** Allowed
1de90 20 76 61 6c 75 65 73 20 66 6f 72 20 53 65 6c 65   values for Sele
1dea0 63 74 2e 73 65 6c 46 6c 61 67 73 2e 20 20 54 68  ct.selFlags.  Th
1deb0 65 20 22 53 46 22 20 70 72 65 66 69 78 20 73 74  e "SF" prefix st
1dec0 61 6e 64 73 20 66 6f 72 0a 2a 2a 20 22 53 65 6c  ands for.** "Sel
1ded0 65 63 74 20 46 6c 61 67 22 2e 0a 2a 2a 0a 2a 2a  ect Flag"..**.**
1dee0 20 56 61 6c 75 65 20 63 6f 6e 73 74 72 61 69 6e   Value constrain
1def0 74 73 20 28 61 6c 6c 20 63 68 65 63 6b 65 64 20  ts (all checked 
1df00 76 69 61 20 61 73 73 65 72 74 28 29 29 0a 2a 2a  via assert()).**
1df10 20 20 20 20 20 53 46 5f 48 61 73 41 67 67 20 20       SF_HasAgg  
1df20 20 20 20 3d 3d 20 4e 43 5f 48 61 73 41 67 67 0a     == NC_HasAgg.
1df30 2a 2a 20 20 20 20 20 53 46 5f 4d 69 6e 4d 61 78  **     SF_MinMax
1df40 41 67 67 20 20 3d 3d 20 4e 43 5f 4d 69 6e 4d 61  Agg  == NC_MinMa
1df50 78 41 67 67 20 20 20 20 20 3d 3d 20 53 51 4c 49  xAgg     == SQLI
1df60 54 45 5f 46 55 4e 43 5f 4d 49 4e 4d 41 58 0a 2a  TE_FUNC_MINMAX.*
1df70 2a 20 20 20 20 20 53 46 5f 46 69 78 65 64 4c 69  *     SF_FixedLi
1df80 6d 69 74 20 3d 3d 20 57 48 45 52 45 5f 55 53 45  mit == WHERE_USE
1df90 5f 4c 49 4d 49 54 0a 2a 2f 0a 23 64 65 66 69 6e  _LIMIT.*/.#defin
1dfa0 65 20 53 46 5f 44 69 73 74 69 6e 63 74 20 20 20  e SF_Distinct   
1dfb0 20 20 20 20 30 78 30 30 30 30 31 20 20 2f 2a 20      0x00001  /* 
1dfc0 4f 75 74 70 75 74 20 73 68 6f 75 6c 64 20 62 65  Output should be
1dfd0 20 44 49 53 54 49 4e 43 54 20 2a 2f 0a 23 64 65   DISTINCT */.#de
1dfe0 66 69 6e 65 20 53 46 5f 41 6c 6c 20 20 20 20 20  fine SF_All     
1dff0 20 20 20 20 20 20 20 30 78 30 30 30 30 32 20 20         0x00002  
1e000 2f 2a 20 49 6e 63 6c 75 64 65 73 20 74 68 65 20  /* Includes the 
1e010 41 4c 4c 20 6b 65 79 77 6f 72 64 20 2a 2f 0a 23  ALL keyword */.#
1e020 64 65 66 69 6e 65 20 53 46 5f 52 65 73 6f 6c 76  define SF_Resolv
1e030 65 64 20 20 20 20 20 20 20 30 78 30 30 30 30 34  ed       0x00004
1e040 20 20 2f 2a 20 49 64 65 6e 74 69 66 69 65 72 73    /* Identifiers
1e050 20 68 61 76 65 20 62 65 65 6e 20 72 65 73 6f 6c   have been resol
1e060 76 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ved */.#define S
1e070 46 5f 41 67 67 72 65 67 61 74 65 20 20 20 20 20  F_Aggregate     
1e080 20 30 78 30 30 30 30 38 20 20 2f 2a 20 43 6f 6e   0x00008  /* Con
1e090 74 61 69 6e 73 20 61 67 67 20 66 75 6e 63 74 69  tains agg functi
1e0a0 6f 6e 73 20 6f 72 20 61 20 47 52 4f 55 50 20 42  ons or a GROUP B
1e0b0 59 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f  Y */.#define SF_
1e0c0 48 61 73 41 67 67 20 20 20 20 20 20 20 20 20 30  HasAgg         0
1e0d0 78 30 30 30 31 30 20 20 2f 2a 20 43 6f 6e 74 61  x00010  /* Conta
1e0e0 69 6e 73 20 61 67 67 72 65 67 61 74 65 20 66 75  ins aggregate fu
1e0f0 6e 63 74 69 6f 6e 73 20 2a 2f 0a 23 64 65 66 69  nctions */.#defi
1e100 6e 65 20 53 46 5f 55 73 65 73 45 70 68 65 6d 65  ne SF_UsesEpheme
1e110 72 61 6c 20 20 30 78 30 30 30 32 30 20 20 2f 2a  ral  0x00020  /*
1e120 20 55 73 65 73 20 74 68 65 20 4f 70 65 6e 45 70   Uses the OpenEp
1e130 68 65 6d 65 72 61 6c 20 6f 70 63 6f 64 65 20 2a  hemeral opcode *
1e140 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 45 78 70  /.#define SF_Exp
1e150 61 6e 64 65 64 20 20 20 20 20 20 20 30 78 30 30  anded       0x00
1e160 30 34 30 20 20 2f 2a 20 73 71 6c 69 74 65 33 53  040  /* sqlite3S
1e170 65 6c 65 63 74 45 78 70 61 6e 64 28 29 20 63 61  electExpand() ca
1e180 6c 6c 65 64 20 6f 6e 20 74 68 69 73 20 2a 2f 0a  lled on this */.
1e190 23 64 65 66 69 6e 65 20 53 46 5f 48 61 73 54 79  #define SF_HasTy
1e1a0 70 65 49 6e 66 6f 20 20 20 20 30 78 30 30 30 38  peInfo    0x0008
1e1b0 30 20 20 2f 2a 20 46 52 4f 4d 20 73 75 62 71 75  0  /* FROM subqu
1e1c0 65 72 69 65 73 20 68 61 76 65 20 54 61 62 6c 65  eries have Table
1e1d0 20 6d 65 74 61 64 61 74 61 20 2a 2f 0a 23 64 65   metadata */.#de
1e1e0 66 69 6e 65 20 53 46 5f 43 6f 6d 70 6f 75 6e 64  fine SF_Compound
1e1f0 20 20 20 20 20 20 20 30 78 30 30 31 30 30 20 20         0x00100  
1e200 2f 2a 20 50 61 72 74 20 6f 66 20 61 20 63 6f 6d  /* Part of a com
1e210 70 6f 75 6e 64 20 71 75 65 72 79 20 2a 2f 0a 23  pound query */.#
1e220 64 65 66 69 6e 65 20 53 46 5f 56 61 6c 75 65 73  define SF_Values
1e230 20 20 20 20 20 20 20 20 20 30 78 30 30 32 30 30           0x00200
1e240 20 20 2f 2a 20 53 79 6e 74 68 65 73 69 7a 65 64    /* Synthesized
1e250 20 66 72 6f 6d 20 56 41 4c 55 45 53 20 63 6c 61   from VALUES cla
1e260 75 73 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  use */.#define S
1e270 46 5f 4d 75 6c 74 69 56 61 6c 75 65 20 20 20 20  F_MultiValue    
1e280 20 30 78 30 30 34 30 30 20 20 2f 2a 20 53 69 6e   0x00400  /* Sin
1e290 67 6c 65 20 56 41 4c 55 45 53 20 74 65 72 6d 20  gle VALUES term 
1e2a0 77 69 74 68 20 6d 75 6c 74 69 70 6c 65 20 72 6f  with multiple ro
1e2b0 77 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46  ws */.#define SF
1e2c0 5f 4e 65 73 74 65 64 46 72 6f 6d 20 20 20 20 20  _NestedFrom     
1e2d0 30 78 30 30 38 30 30 20 20 2f 2a 20 50 61 72 74  0x00800  /* Part
1e2e0 20 6f 66 20 61 20 70 61 72 65 6e 74 68 65 73 69   of a parenthesi
1e2f0 7a 65 64 20 46 52 4f 4d 20 63 6c 61 75 73 65 20  zed FROM clause 
1e300 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 4d 69  */.#define SF_Mi
1e310 6e 4d 61 78 41 67 67 20 20 20 20 20 20 30 78 30  nMaxAgg      0x0
1e320 31 30 30 30 20 20 2f 2a 20 41 67 67 72 65 67 61  1000  /* Aggrega
1e330 74 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20 6d 69  te containing mi
1e340 6e 28 29 20 6f 72 20 6d 61 78 28 29 20 2a 2f 0a  n() or max() */.
1e350 23 64 65 66 69 6e 65 20 53 46 5f 52 65 63 75 72  #define SF_Recur
1e360 73 69 76 65 20 20 20 20 20 20 30 78 30 32 30 30  sive      0x0200
1e370 30 20 20 2f 2a 20 54 68 65 20 72 65 63 75 72 73  0  /* The recurs
1e380 69 76 65 20 70 61 72 74 20 6f 66 20 61 20 72 65  ive part of a re
1e390 63 75 72 73 69 76 65 20 43 54 45 20 2a 2f 0a 23  cursive CTE */.#
1e3a0 64 65 66 69 6e 65 20 53 46 5f 46 69 78 65 64 4c  define SF_FixedL
1e3b0 69 6d 69 74 20 20 20 20 20 30 78 30 34 30 30 30  imit     0x04000
1e3c0 20 20 2f 2a 20 6e 53 65 6c 65 63 74 52 6f 77 20    /* nSelectRow 
1e3d0 73 65 74 20 62 79 20 61 20 63 6f 6e 73 74 61 6e  set by a constan
1e3e0 74 20 4c 49 4d 49 54 20 2a 2f 0a 23 64 65 66 69  t LIMIT */.#defi
1e3f0 6e 65 20 53 46 5f 4d 61 79 62 65 43 6f 6e 76 65  ne SF_MaybeConve
1e400 72 74 20 20 20 30 78 30 38 30 30 30 20 20 2f 2a  rt   0x08000  /*
1e410 20 4e 65 65 64 20 63 6f 6e 76 65 72 74 43 6f 6d   Need convertCom
1e420 70 6f 75 6e 64 53 65 6c 65 63 74 54 6f 53 75 62  poundSelectToSub
1e430 71 75 65 72 79 28 29 20 2a 2f 0a 23 64 65 66 69  query() */.#defi
1e440 6e 65 20 53 46 5f 43 6f 6e 76 65 72 74 65 64 20  ne SF_Converted 
1e450 20 20 20 20 20 30 78 31 30 30 30 30 20 20 2f 2a       0x10000  /*
1e460 20 42 79 20 63 6f 6e 76 65 72 74 43 6f 6d 70 6f   By convertCompo
1e470 75 6e 64 53 65 6c 65 63 74 54 6f 53 75 62 71 75  undSelectToSubqu
1e480 65 72 79 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65  ery() */.#define
1e490 20 53 46 5f 49 6e 63 6c 75 64 65 48 69 64 64 65   SF_IncludeHidde
1e4a0 6e 20 20 30 78 32 30 30 30 30 20 20 2f 2a 20 49  n  0x20000  /* I
1e4b0 6e 63 6c 75 64 65 20 68 69 64 64 65 6e 20 63 6f  nclude hidden co
1e4c0 6c 75 6d 6e 73 20 69 6e 20 6f 75 74 70 75 74 20  lumns in output 
1e4d0 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 43 6f  */.#define SF_Co
1e4e0 6d 70 6c 65 78 52 65 73 75 6c 74 20 20 30 78 34  mplexResult  0x4
1e4f0 30 30 30 30 20 20 2f 2a 20 52 65 73 75 6c 74 20  0000  /* Result 
1e500 63 6f 6e 74 61 69 6e 73 20 73 75 62 71 75 65 72  contains subquer
1e510 79 20 6f 72 20 66 75 6e 63 74 69 6f 6e 20 2a 2f  y or function */
1e520 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 72 65 73 75  ../*.** The resu
1e530 6c 74 73 20 6f 66 20 61 20 53 45 4c 45 43 54 20  lts of a SELECT 
1e540 63 61 6e 20 62 65 20 64 69 73 74 72 69 62 75 74  can be distribut
1e550 65 64 20 69 6e 20 73 65 76 65 72 61 6c 20 77 61  ed in several wa
1e560 79 73 2c 20 61 73 20 64 65 66 69 6e 65 64 0a 2a  ys, as defined.*
1e570 2a 20 62 79 20 6f 6e 65 20 6f 66 20 74 68 65 20  * by one of the 
1e580 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 73  following macros
1e590 2e 20 20 54 68 65 20 22 53 52 54 22 20 70 72 65  .  The "SRT" pre
1e5a0 66 69 78 20 6d 65 61 6e 73 20 22 53 45 4c 45 43  fix means "SELEC
1e5b0 54 20 52 65 73 75 6c 74 0a 2a 2a 20 54 79 70 65  T Result.** Type
1e5c0 22 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54  "..**.**     SRT
1e5d0 5f 55 6e 69 6f 6e 20 20 20 20 20 20 20 53 74 6f  _Union       Sto
1e5e0 72 65 20 72 65 73 75 6c 74 73 20 61 73 20 61 20  re results as a 
1e5f0 6b 65 79 20 69 6e 20 61 20 74 65 6d 70 6f 72 61  key in a tempora
1e600 72 79 20 69 6e 64 65 78 0a 2a 2a 20 20 20 20 20  ry index.**     
1e610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e620 69 64 65 6e 74 69 66 69 65 64 20 62 79 20 70 44  identified by pD
1e630 65 73 74 2d 3e 69 53 44 50 61 72 6d 2e 0a 2a 2a  est->iSDParm..**
1e640 0a 2a 2a 20 20 20 20 20 53 52 54 5f 45 78 63 65  .**     SRT_Exce
1e650 70 74 20 20 20 20 20 20 52 65 6d 6f 76 65 20 72  pt      Remove r
1e660 65 73 75 6c 74 73 20 66 72 6f 6d 20 74 68 65 20  esults from the 
1e670 74 65 6d 70 6f 72 61 72 79 20 69 6e 64 65 78 20  temporary index 
1e680 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 2e 0a  pDest->iSDParm..
1e690 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 45 78  **.**     SRT_Ex
1e6a0 69 73 74 73 20 20 20 20 20 20 53 74 6f 72 65 20  ists      Store 
1e6b0 61 20 31 20 69 6e 20 6d 65 6d 6f 72 79 20 63 65  a 1 in memory ce
1e6c0 6c 6c 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72  ll pDest->iSDPar
1e6d0 6d 20 69 66 20 74 68 65 20 72 65 73 75 6c 74 0a  m if the result.
1e6e0 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
1e6f0 20 20 20 20 20 20 20 73 65 74 20 69 73 20 6e 6f         set is no
1e700 74 20 65 6d 70 74 79 2e 0a 2a 2a 0a 2a 2a 20 20  t empty..**.**  
1e710 20 20 20 53 52 54 5f 44 69 73 63 61 72 64 20 20     SRT_Discard  
1e720 20 20 20 54 68 72 6f 77 20 74 68 65 20 72 65 73     Throw the res
1e730 75 6c 74 73 20 61 77 61 79 2e 20 20 54 68 69 73  ults away.  This
1e740 20 69 73 20 75 73 65 64 20 62 79 20 53 45 4c 45   is used by SELE
1e750 43 54 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  CT.**           
1e760 20 20 20 20 20 20 20 20 20 20 73 74 61 74 65 6d            statem
1e770 65 6e 74 73 20 77 69 74 68 69 6e 20 74 72 69 67  ents within trig
1e780 67 65 72 73 20 77 68 6f 73 65 20 6f 6e 6c 79 20  gers whose only 
1e790 70 75 72 70 6f 73 65 20 69 73 0a 2a 2a 20 20 20  purpose is.**   
1e7a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e7b0 20 20 74 68 65 20 73 69 64 65 2d 65 66 66 65 63    the side-effec
1e7c0 74 73 20 6f 66 20 66 75 6e 63 74 69 6f 6e 73 2e  ts of functions.
1e7d0 0a 2a 2a 0a 2a 2a 20 41 6c 6c 20 6f 66 20 74 68  .**.** All of th
1e7e0 65 20 61 62 6f 76 65 20 61 72 65 20 66 72 65 65  e above are free
1e7f0 20 74 6f 20 69 67 6e 6f 72 65 20 74 68 65 69 72   to ignore their
1e800 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73 65   ORDER BY clause
1e810 2e 20 54 68 6f 73 65 20 74 68 61 74 0a 2a 2a 20  . Those that.** 
1e820 66 6f 6c 6c 6f 77 20 6d 75 73 74 20 68 6f 6e 6f  follow must hono
1e830 72 20 74 68 65 20 4f 52 44 45 52 20 42 59 20 63  r the ORDER BY c
1e840 6c 61 75 73 65 2e 0a 2a 2a 0a 2a 2a 20 20 20 20  lause..**.**    
1e850 20 53 52 54 5f 4f 75 74 70 75 74 20 20 20 20 20   SRT_Output     
1e860 20 47 65 6e 65 72 61 74 65 20 61 20 72 6f 77 20   Generate a row 
1e870 6f 66 20 6f 75 74 70 75 74 20 28 75 73 69 6e 67  of output (using
1e880 20 74 68 65 20 4f 50 5f 52 65 73 75 6c 74 52 6f   the OP_ResultRo
1e890 77 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  w.**            
1e8a0 20 20 20 20 20 20 20 20 20 6f 70 63 6f 64 65 29           opcode)
1e8b0 20 66 6f 72 20 65 61 63 68 20 72 6f 77 20 69 6e   for each row in
1e8c0 20 74 68 65 20 72 65 73 75 6c 74 20 73 65 74 2e   the result set.
1e8d0 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 4d  .**.**     SRT_M
1e8e0 65 6d 20 20 20 20 20 20 20 20 20 4f 6e 6c 79 20  em         Only 
1e8f0 76 61 6c 69 64 20 69 66 20 74 68 65 20 72 65 73  valid if the res
1e900 75 6c 74 20 69 73 20 61 20 73 69 6e 67 6c 65 20  ult is a single 
1e910 63 6f 6c 75 6d 6e 2e 0a 2a 2a 20 20 20 20 20 20  column..**      
1e920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53                 S
1e930 74 6f 72 65 20 74 68 65 20 66 69 72 73 74 20 63  tore the first c
1e940 6f 6c 75 6d 6e 20 6f 66 20 74 68 65 20 66 69 72  olumn of the fir
1e950 73 74 20 72 65 73 75 6c 74 20 72 6f 77 0a 2a 2a  st result row.**
1e960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e970 20 20 20 20 20 69 6e 20 72 65 67 69 73 74 65 72       in register
1e980 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 20   pDest->iSDParm 
1e990 74 68 65 6e 20 61 62 61 6e 64 6f 6e 20 74 68 65  then abandon the
1e9a0 20 72 65 73 74 0a 2a 2a 20 20 20 20 20 20 20 20   rest.**        
1e9b0 20 20 20 20 20 20 20 20 20 20 20 20 20 6f 66 20               of 
1e9c0 74 68 65 20 71 75 65 72 79 2e 20 20 54 68 69 73  the query.  This
1e9d0 20 64 65 73 74 69 6e 61 74 69 6f 6e 20 69 6d 70   destination imp
1e9e0 6c 69 65 73 20 22 4c 49 4d 49 54 20 31 22 2e 0a  lies "LIMIT 1"..
1e9f0 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 53 65  **.**     SRT_Se
1ea00 74 20 20 20 20 20 20 20 20 20 54 68 65 20 72 65  t         The re
1ea10 73 75 6c 74 20 6d 75 73 74 20 62 65 20 61 20 73  sult must be a s
1ea20 69 6e 67 6c 65 20 63 6f 6c 75 6d 6e 2e 20 20 53  ingle column.  S
1ea30 74 6f 72 65 20 65 61 63 68 0a 2a 2a 20 20 20 20  tore each.**    
1ea40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ea50 20 72 6f 77 20 6f 66 20 72 65 73 75 6c 74 20 61   row of result a
1ea60 73 20 74 68 65 20 6b 65 79 20 69 6e 20 74 61 62  s the key in tab
1ea70 6c 65 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72  le pDest->iSDPar
1ea80 6d 2e 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  m..**           
1ea90 20 20 20 20 20 20 20 20 20 20 41 70 70 6c 79 20            Apply 
1eaa0 74 68 65 20 61 66 66 69 6e 69 74 79 20 70 44 65  the affinity pDe
1eab0 73 74 2d 3e 61 66 66 53 64 73 74 20 62 65 66 6f  st->affSdst befo
1eac0 72 65 20 73 74 6f 72 69 6e 67 0a 2a 2a 20 20 20  re storing.**   
1ead0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1eae0 20 20 72 65 73 75 6c 74 73 2e 20 20 55 73 65 64    results.  Used
1eaf0 20 74 6f 20 69 6d 70 6c 65 6d 65 6e 74 20 22 49   to implement "I
1eb00 4e 20 28 53 45 4c 45 43 54 20 2e 2e 2e 29 22 2e  N (SELECT ...)".
1eb10 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 45  .**.**     SRT_E
1eb20 70 68 65 6d 54 61 62 20 20 20 20 43 72 65 61 74  phemTab    Creat
1eb30 65 20 61 6e 20 74 65 6d 70 6f 72 61 72 79 20 74  e an temporary t
1eb40 61 62 6c 65 20 70 44 65 73 74 2d 3e 69 53 44 50  able pDest->iSDP
1eb50 61 72 6d 20 61 6e 64 20 73 74 6f 72 65 0a 2a 2a  arm and store.**
1eb60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1eb70 20 20 20 20 20 74 68 65 20 72 65 73 75 6c 74 20       the result 
1eb80 74 68 65 72 65 2e 20 54 68 65 20 63 75 72 73 6f  there. The curso
1eb90 72 20 69 73 20 6c 65 66 74 20 6f 70 65 6e 20 61  r is left open a
1eba0 66 74 65 72 0a 2a 2a 20 20 20 20 20 20 20 20 20  fter.**         
1ebb0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
1ebc0 72 6e 69 6e 67 2e 20 20 54 68 69 73 20 69 73 20  rning.  This is 
1ebd0 6c 69 6b 65 20 53 52 54 5f 54 61 62 6c 65 20 65  like SRT_Table e
1ebe0 78 63 65 70 74 20 74 68 61 74 0a 2a 2a 20 20 20  xcept that.**   
1ebf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ec00 20 20 74 68 69 73 20 64 65 73 74 69 6e 61 74 69    this destinati
1ec10 6f 6e 20 75 73 65 73 20 4f 50 5f 4f 70 65 6e 45  on uses OP_OpenE
1ec20 70 68 65 6d 65 72 61 6c 20 74 6f 20 63 72 65 61  phemeral to crea
1ec30 74 65 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  te.**           
1ec40 20 20 20 20 20 20 20 20 20 20 74 68 65 20 74 61            the ta
1ec50 62 6c 65 20 66 69 72 73 74 2e 0a 2a 2a 0a 2a 2a  ble first..**.**
1ec60 20 20 20 20 20 53 52 54 5f 43 6f 72 6f 75 74 69       SRT_Corouti
1ec70 6e 65 20 20 20 47 65 6e 65 72 61 74 65 20 61 20  ne   Generate a 
1ec80 63 6f 2d 72 6f 75 74 69 6e 65 20 74 68 61 74 20  co-routine that 
1ec90 72 65 74 75 72 6e 73 20 61 20 6e 65 77 20 72 6f  returns a new ro
1eca0 77 20 6f 66 0a 2a 2a 20 20 20 20 20 20 20 20 20  w of.**         
1ecb0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 73 75              resu
1ecc0 6c 74 73 20 65 61 63 68 20 74 69 6d 65 20 69 74  lts each time it
1ecd0 20 69 73 20 69 6e 76 6f 6b 65 64 2e 20 20 54 68   is invoked.  Th
1ece0 65 20 65 6e 74 72 79 20 70 6f 69 6e 74 0a 2a 2a  e entry point.**
1ecf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ed00 20 20 20 20 20 6f 66 20 74 68 65 20 63 6f 2d 72       of the co-r
1ed10 6f 75 74 69 6e 65 20 69 73 20 73 74 6f 72 65 64  outine is stored
1ed20 20 69 6e 20 72 65 67 69 73 74 65 72 20 70 44 65   in register pDe
1ed30 73 74 2d 3e 69 53 44 50 61 72 6d 0a 2a 2a 20 20  st->iSDParm.**  
1ed40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ed50 20 20 20 61 6e 64 20 74 68 65 20 72 65 73 75 6c     and the resul
1ed60 74 20 72 6f 77 20 69 73 20 73 74 6f 72 65 64 20  t row is stored 
1ed70 69 6e 20 70 44 65 73 74 2d 3e 6e 44 65 73 74 20  in pDest->nDest 
1ed80 72 65 67 69 73 74 65 72 73 0a 2a 2a 20 20 20 20  registers.**    
1ed90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1eda0 20 73 74 61 72 74 69 6e 67 20 77 69 74 68 20 70   starting with p
1edb0 44 65 73 74 2d 3e 69 53 64 73 74 2e 0a 2a 2a 0a  Dest->iSdst..**.
1edc0 2a 2a 20 20 20 20 20 53 52 54 5f 54 61 62 6c 65  **     SRT_Table
1edd0 20 20 20 20 20 20 20 53 74 6f 72 65 20 72 65 73         Store res
1ede0 75 6c 74 73 20 69 6e 20 74 65 6d 70 6f 72 61 72  ults in temporar
1edf0 79 20 74 61 62 6c 65 20 70 44 65 73 74 2d 3e 69  y table pDest->i
1ee00 53 44 50 61 72 6d 2e 0a 2a 2a 20 20 20 20 20 53  SDParm..**     S
1ee10 52 54 5f 46 69 66 6f 20 20 20 20 20 20 20 20 54  RT_Fifo        T
1ee20 68 69 73 20 69 73 20 6c 69 6b 65 20 53 52 54 5f  his is like SRT_
1ee30 45 70 68 65 6d 54 61 62 20 65 78 63 65 70 74 20  EphemTab except 
1ee40 74 68 61 74 20 74 68 65 20 74 61 62 6c 65 0a 2a  that the table.*
1ee50 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
1ee60 20 20 20 20 20 20 69 73 20 61 73 73 75 6d 65 64        is assumed
1ee70 20 74 6f 20 61 6c 72 65 61 64 79 20 62 65 20 6f   to already be o
1ee80 70 65 6e 2e 20 20 53 52 54 5f 46 69 66 6f 20 68  pen.  SRT_Fifo h
1ee90 61 73 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  as.**           
1eea0 20 20 20 20 20 20 20 20 20 20 74 68 65 20 61 64            the ad
1eeb0 64 69 74 69 6f 6e 61 6c 20 70 72 6f 70 65 72 74  ditional propert
1eec0 79 20 6f 66 20 62 65 69 6e 67 20 61 62 6c 65 20  y of being able 
1eed0 74 6f 20 69 67 6e 6f 72 65 0a 2a 2a 20 20 20 20  to ignore.**    
1eee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1eef0 20 74 68 65 20 4f 52 44 45 52 20 42 59 20 63 6c   the ORDER BY cl
1ef00 61 75 73 65 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20  ause..**.**     
1ef10 53 52 54 5f 44 69 73 74 46 69 66 6f 20 20 20 20  SRT_DistFifo    
1ef20 53 74 6f 72 65 20 72 65 73 75 6c 74 73 20 69 6e  Store results in
1ef30 20 61 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62   a temporary tab
1ef40 6c 65 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72  le pDest->iSDPar
1ef50 6d 2e 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  m..**           
1ef60 20 20 20 20 20 20 20 20 20 20 42 75 74 20 61 6c            But al
1ef70 73 6f 20 75 73 65 20 74 65 6d 70 6f 72 61 72 79  so use temporary
1ef80 20 74 61 62 6c 65 20 70 44 65 73 74 2d 3e 69 53   table pDest->iS
1ef90 44 50 61 72 6d 2b 31 20 61 73 0a 2a 2a 20 20 20  DParm+1 as.**   
1efa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1efb0 20 20 61 20 72 65 63 6f 72 64 20 6f 66 20 61 6c    a record of al
1efc0 6c 20 70 72 69 6f 72 20 72 65 73 75 6c 74 73 20  l prior results 
1efd0 61 6e 64 20 69 67 6e 6f 72 65 20 61 6e 79 20 64  and ignore any d
1efe0 75 70 6c 69 63 61 74 65 0a 2a 2a 20 20 20 20 20  uplicate.**     
1eff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f000 72 6f 77 73 2e 20 20 4e 61 6d 65 20 6d 65 61 6e  rows.  Name mean
1f010 73 3a 20 20 22 44 69 73 74 69 6e 63 74 20 46 69  s:  "Distinct Fi
1f020 66 6f 22 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53  fo"..**.**     S
1f030 52 54 5f 51 75 65 75 65 20 20 20 20 20 20 20 53  RT_Queue       S
1f040 74 6f 72 65 20 72 65 73 75 6c 74 73 20 69 6e 20  tore results in 
1f050 70 72 69 6f 72 69 74 79 20 71 75 65 75 65 20 70  priority queue p
1f060 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 20 28 72  Dest->iSDParm (r
1f070 65 61 6c 6c 79 0a 2a 2a 20 20 20 20 20 20 20 20  eally.**        
1f080 20 20 20 20 20 20 20 20 20 20 20 20 20 61 6e 20               an 
1f090 69 6e 64 65 78 29 2e 20 20 41 70 70 65 6e 64 20  index).  Append 
1f0a0 61 20 73 65 71 75 65 6e 63 65 20 6e 75 6d 62 65  a sequence numbe
1f0b0 72 20 73 6f 20 74 68 61 74 20 61 6c 6c 20 65 6e  r so that all en
1f0c0 74 72 69 65 73 0a 2a 2a 20 20 20 20 20 20 20 20  tries.**        
1f0d0 20 20 20 20 20 20 20 20 20 20 20 20 20 61 72 65               are
1f0e0 20 64 69 73 74 69 6e 63 74 2e 0a 2a 2a 0a 2a 2a   distinct..**.**
1f0f0 20 20 20 20 20 53 52 54 5f 44 69 73 74 51 75 65       SRT_DistQue
1f100 75 65 20 20 20 53 74 6f 72 65 20 72 65 73 75 6c  ue   Store resul
1f110 74 73 20 69 6e 20 70 72 69 6f 72 69 74 79 20 71  ts in priority q
1f120 75 65 75 65 20 70 44 65 73 74 2d 3e 69 53 44 50  ueue pDest->iSDP
1f130 61 72 6d 20 6f 6e 6c 79 20 69 66 0a 2a 2a 20 20  arm only if.**  
1f140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f150 20 20 20 74 68 65 20 73 61 6d 65 20 72 65 63 6f     the same reco
1f160 72 64 20 68 61 73 20 6e 65 76 65 72 20 62 65 65  rd has never bee
1f170 6e 20 73 74 6f 72 65 64 20 62 65 66 6f 72 65 2e  n stored before.
1f180 20 20 54 68 65 0a 2a 2a 20 20 20 20 20 20 20 20    The.**        
1f190 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 64               ind
1f1a0 65 78 20 61 74 20 70 44 65 73 74 2d 3e 69 53 44  ex at pDest->iSD
1f1b0 50 61 72 6d 2b 31 20 68 6f 6c 64 20 61 6c 6c 20  Parm+1 hold all 
1f1c0 70 72 69 6f 72 20 73 74 6f 72 65 73 2e 0a 2a 2f  prior stores..*/
1f1d0 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 55 6e 69  .#define SRT_Uni
1f1e0 6f 6e 20 20 20 20 20 20 20 20 31 20 20 2f 2a 20  on        1  /* 
1f1f0 53 74 6f 72 65 20 72 65 73 75 6c 74 20 61 73 20  Store result as 
1f200 6b 65 79 73 20 69 6e 20 61 6e 20 69 6e 64 65 78  keys in an index
1f210 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f   */.#define SRT_
1f220 45 78 63 65 70 74 20 20 20 20 20 20 20 32 20 20  Except       2  
1f230 2f 2a 20 52 65 6d 6f 76 65 20 72 65 73 75 6c 74  /* Remove result
1f240 20 66 72 6f 6d 20 61 20 55 4e 49 4f 4e 20 69 6e   from a UNION in
1f250 64 65 78 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  dex */.#define S
1f260 52 54 5f 45 78 69 73 74 73 20 20 20 20 20 20 20  RT_Exists       
1f270 33 20 20 2f 2a 20 53 74 6f 72 65 20 31 20 69 66  3  /* Store 1 if
1f280 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 6e   the result is n
1f290 6f 74 20 65 6d 70 74 79 20 2a 2f 0a 23 64 65 66  ot empty */.#def
1f2a0 69 6e 65 20 53 52 54 5f 44 69 73 63 61 72 64 20  ine SRT_Discard 
1f2b0 20 20 20 20 20 34 20 20 2f 2a 20 44 6f 20 6e 6f       4  /* Do no
1f2c0 74 20 73 61 76 65 20 74 68 65 20 72 65 73 75 6c  t save the resul
1f2d0 74 73 20 61 6e 79 77 68 65 72 65 20 2a 2f 0a 23  ts anywhere */.#
1f2e0 64 65 66 69 6e 65 20 53 52 54 5f 46 69 66 6f 20  define SRT_Fifo 
1f2f0 20 20 20 20 20 20 20 20 35 20 20 2f 2a 20 53 74          5  /* St
1f300 6f 72 65 20 72 65 73 75 6c 74 20 61 73 20 64 61  ore result as da
1f310 74 61 20 77 69 74 68 20 61 6e 20 61 75 74 6f 6d  ta with an autom
1f320 61 74 69 63 20 72 6f 77 69 64 20 2a 2f 0a 23 64  atic rowid */.#d
1f330 65 66 69 6e 65 20 53 52 54 5f 44 69 73 74 46 69  efine SRT_DistFi
1f340 66 6f 20 20 20 20 20 36 20 20 2f 2a 20 4c 69 6b  fo     6  /* Lik
1f350 65 20 53 52 54 5f 46 69 66 6f 2c 20 62 75 74 20  e SRT_Fifo, but 
1f360 75 6e 69 71 75 65 20 72 65 73 75 6c 74 73 20 6f  unique results o
1f370 6e 6c 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  nly */.#define S
1f380 52 54 5f 51 75 65 75 65 20 20 20 20 20 20 20 20  RT_Queue        
1f390 37 20 20 2f 2a 20 53 74 6f 72 65 20 72 65 73 75  7  /* Store resu
1f3a0 6c 74 20 69 6e 20 61 6e 20 71 75 65 75 65 20 2a  lt in an queue *
1f3b0 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 44 69  /.#define SRT_Di
1f3c0 73 74 51 75 65 75 65 20 20 20 20 38 20 20 2f 2a  stQueue    8  /*
1f3d0 20 4c 69 6b 65 20 53 52 54 5f 51 75 65 75 65 2c   Like SRT_Queue,
1f3e0 20 62 75 74 20 75 6e 69 71 75 65 20 72 65 73 75   but unique resu
1f3f0 6c 74 73 20 6f 6e 6c 79 20 2a 2f 0a 0a 2f 2a 20  lts only */../* 
1f400 54 68 65 20 4f 52 44 45 52 20 42 59 20 63 6c 61  The ORDER BY cla
1f410 75 73 65 20 69 73 20 69 67 6e 6f 72 65 64 20 66  use is ignored f
1f420 6f 72 20 61 6c 6c 20 6f 66 20 74 68 65 20 61 62  or all of the ab
1f430 6f 76 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49  ove */.#define I
1f440 67 6e 6f 72 61 62 6c 65 4f 72 64 65 72 62 79 28  gnorableOrderby(
1f450 58 29 20 28 28 58 2d 3e 65 44 65 73 74 29 3c 3d  X) ((X->eDest)<=
1f460 53 52 54 5f 44 69 73 74 51 75 65 75 65 29 0a 0a  SRT_DistQueue)..
1f470 23 64 65 66 69 6e 65 20 53 52 54 5f 4f 75 74 70  #define SRT_Outp
1f480 75 74 20 20 20 20 20 20 20 39 20 20 2f 2a 20 4f  ut       9  /* O
1f490 75 74 70 75 74 20 65 61 63 68 20 72 6f 77 20 6f  utput each row o
1f4a0 66 20 72 65 73 75 6c 74 20 2a 2f 0a 23 64 65 66  f result */.#def
1f4b0 69 6e 65 20 53 52 54 5f 4d 65 6d 20 20 20 20 20  ine SRT_Mem     
1f4c0 20 20 20 20 31 30 20 20 2f 2a 20 53 74 6f 72 65      10  /* Store
1f4d0 20 72 65 73 75 6c 74 20 69 6e 20 61 20 6d 65 6d   result in a mem
1f4e0 6f 72 79 20 63 65 6c 6c 20 2a 2f 0a 23 64 65 66  ory cell */.#def
1f4f0 69 6e 65 20 53 52 54 5f 53 65 74 20 20 20 20 20  ine SRT_Set     
1f500 20 20 20 20 31 31 20 20 2f 2a 20 53 74 6f 72 65      11  /* Store
1f510 20 72 65 73 75 6c 74 73 20 61 73 20 6b 65 79 73   results as keys
1f520 20 69 6e 20 61 6e 20 69 6e 64 65 78 20 2a 2f 0a   in an index */.
1f530 23 64 65 66 69 6e 65 20 53 52 54 5f 45 70 68 65  #define SRT_Ephe
1f540 6d 54 61 62 20 20 20 20 31 32 20 20 2f 2a 20 43  mTab    12  /* C
1f550 72 65 61 74 65 20 74 72 61 6e 73 69 65 6e 74 20  reate transient 
1f560 74 61 62 20 61 6e 64 20 73 74 6f 72 65 20 6c 69  tab and store li
1f570 6b 65 20 53 52 54 5f 54 61 62 6c 65 20 2a 2f 0a  ke SRT_Table */.
1f580 23 64 65 66 69 6e 65 20 53 52 54 5f 43 6f 72 6f  #define SRT_Coro
1f590 75 74 69 6e 65 20 20 20 31 33 20 20 2f 2a 20 47  utine   13  /* G
1f5a0 65 6e 65 72 61 74 65 20 61 20 73 69 6e 67 6c 65  enerate a single
1f5b0 20 72 6f 77 20 6f 66 20 72 65 73 75 6c 74 20 2a   row of result *
1f5c0 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 54 61  /.#define SRT_Ta
1f5d0 62 6c 65 20 20 20 20 20 20 20 31 34 20 20 2f 2a  ble       14  /*
1f5e0 20 53 74 6f 72 65 20 72 65 73 75 6c 74 20 61 73   Store result as
1f5f0 20 64 61 74 61 20 77 69 74 68 20 61 6e 20 61 75   data with an au
1f600 74 6f 6d 61 74 69 63 20 72 6f 77 69 64 20 2a 2f  tomatic rowid */
1f610 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61  ../*.** An insta
1f620 6e 63 65 20 6f 66 20 74 68 69 73 20 6f 62 6a 65  nce of this obje
1f630 63 74 20 64 65 73 63 72 69 62 65 73 20 77 68 65  ct describes whe
1f640 72 65 20 74 6f 20 70 75 74 20 6f 66 20 74 68 65  re to put of the
1f650 20 72 65 73 75 6c 74 73 20 6f 66 0a 2a 2a 20 61   results of.** a
1f660 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e   SELECT statemen
1f670 74 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53 65 6c  t..*/.struct Sel
1f680 65 63 74 44 65 73 74 20 7b 0a 20 20 75 38 20 65  ectDest {.  u8 e
1f690 44 65 73 74 3b 20 20 20 20 20 20 20 20 20 20 20  Dest;           
1f6a0 20 2f 2a 20 48 6f 77 20 74 6f 20 64 69 73 70 6f   /* How to dispo
1f6b0 73 65 20 6f 66 20 74 68 65 20 72 65 73 75 6c 74  se of the result
1f6c0 73 2e 20 20 4f 6e 20 6f 66 20 53 52 54 5f 2a 20  s.  On of SRT_* 
1f6d0 61 62 6f 76 65 2e 20 2a 2f 0a 20 20 69 6e 74 20  above. */.  int 
1f6e0 69 53 44 50 61 72 6d 3b 20 20 20 20 20 20 20 20  iSDParm;        
1f6f0 20 2f 2a 20 41 20 70 61 72 61 6d 65 74 65 72 20   /* A parameter 
1f700 75 73 65 64 20 62 79 20 74 68 65 20 65 44 65 73  used by the eDes
1f710 74 20 64 69 73 70 6f 73 61 6c 20 6d 65 74 68 6f  t disposal metho
1f720 64 20 2a 2f 0a 20 20 69 6e 74 20 69 53 64 73 74  d */.  int iSdst
1f730 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 42  ;           /* B
1f740 61 73 65 20 72 65 67 69 73 74 65 72 20 77 68 65  ase register whe
1f750 72 65 20 72 65 73 75 6c 74 73 20 61 72 65 20 77  re results are w
1f760 72 69 74 74 65 6e 20 2a 2f 0a 20 20 69 6e 74 20  ritten */.  int 
1f770 6e 53 64 73 74 3b 20 20 20 20 20 20 20 20 20 20  nSdst;          
1f780 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 72 65   /* Number of re
1f790 67 69 73 74 65 72 73 20 61 6c 6c 6f 63 61 74 65  gisters allocate
1f7a0 64 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 41 66  d */.  char *zAf
1f7b0 66 53 64 73 74 3b 20 20 20 20 20 20 2f 2a 20 41  fSdst;      /* A
1f7c0 66 66 69 6e 69 74 79 20 75 73 65 64 20 77 68 65  ffinity used whe
1f7d0 6e 20 65 44 65 73 74 3d 3d 53 52 54 5f 53 65 74  n eDest==SRT_Set
1f7e0 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20 2a   */.  ExprList *
1f7f0 70 4f 72 64 65 72 42 79 3b 20 20 2f 2a 20 4b 65  pOrderBy;  /* Ke
1f800 79 20 63 6f 6c 75 6d 6e 73 20 66 6f 72 20 53 52  y columns for SR
1f810 54 5f 51 75 65 75 65 20 61 6e 64 20 53 52 54 5f  T_Queue and SRT_
1f820 44 69 73 74 51 75 65 75 65 20 2a 2f 0a 7d 3b 0a  DistQueue */.};.
1f830 0a 2f 2a 0a 2a 2a 20 44 75 72 69 6e 67 20 63 6f  ./*.** During co
1f840 64 65 20 67 65 6e 65 72 61 74 69 6f 6e 20 6f 66  de generation of
1f850 20 73 74 61 74 65 6d 65 6e 74 73 20 74 68 61 74   statements that
1f860 20 64 6f 20 69 6e 73 65 72 74 73 20 69 6e 74 6f   do inserts into
1f870 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 0a 2a   AUTOINCREMENT.*
1f880 2a 20 74 61 62 6c 65 73 2c 20 74 68 65 20 66 6f  * tables, the fo
1f890 6c 6c 6f 77 69 6e 67 20 69 6e 66 6f 72 6d 61 74  llowing informat
1f8a0 69 6f 6e 20 69 73 20 61 74 74 61 63 68 65 64 20  ion is attached 
1f8b0 74 6f 20 74 68 65 20 54 61 62 6c 65 2e 75 2e 61  to the Table.u.a
1f8c0 75 74 6f 49 6e 63 2e 70 0a 2a 2a 20 70 6f 69 6e  utoInc.p.** poin
1f8d0 74 65 72 20 6f 66 20 65 61 63 68 20 61 75 74 6f  ter of each auto
1f8e0 69 6e 63 72 65 6d 65 6e 74 20 74 61 62 6c 65 20  increment table 
1f8f0 74 6f 20 72 65 63 6f 72 64 20 73 6f 6d 65 20 73  to record some s
1f900 69 64 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  ide information 
1f910 74 68 61 74 0a 2a 2a 20 74 68 65 20 63 6f 64 65  that.** the code
1f920 20 67 65 6e 65 72 61 74 6f 72 20 6e 65 65 64 73   generator needs
1f930 2e 20 20 57 65 20 68 61 76 65 20 74 6f 20 6b 65  .  We have to ke
1f940 65 70 20 70 65 72 2d 74 61 62 6c 65 20 61 75 74  ep per-table aut
1f950 6f 69 6e 63 72 65 6d 65 6e 74 0a 2a 2a 20 69 6e  oincrement.** in
1f960 66 6f 72 6d 61 74 69 6f 6e 20 69 6e 20 63 61 73  formation in cas
1f970 65 20 69 6e 73 65 72 74 73 20 61 72 65 20 64 6f  e inserts are do
1f980 6e 65 20 77 69 74 68 69 6e 20 74 72 69 67 67 65  ne within trigge
1f990 72 73 2e 20 20 54 72 69 67 67 65 72 73 20 64 6f  rs.  Triggers do
1f9a0 20 6e 6f 74 0a 2a 2a 20 6e 6f 72 6d 61 6c 6c 79   not.** normally
1f9b0 20 63 6f 6f 72 64 69 6e 61 74 65 20 74 68 65 69   coordinate thei
1f9c0 72 20 61 63 74 69 76 69 74 69 65 73 2c 20 62 75  r activities, bu
1f9d0 74 20 77 65 20 64 6f 20 6e 65 65 64 20 74 6f 20  t we do need to 
1f9e0 63 6f 6f 72 64 69 6e 61 74 65 20 74 68 65 0a 2a  coordinate the.*
1f9f0 2a 20 6c 6f 61 64 69 6e 67 20 61 6e 64 20 73 61  * loading and sa
1fa00 76 69 6e 67 20 6f 66 20 61 75 74 6f 69 6e 63 72  ving of autoincr
1fa10 65 6d 65 6e 74 20 69 6e 66 6f 72 6d 61 74 69 6f  ement informatio
1fa20 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 41 75 74  n..*/.struct Aut
1fa30 6f 69 6e 63 49 6e 66 6f 20 7b 0a 20 20 41 75 74  oincInfo {.  Aut
1fa40 6f 69 6e 63 49 6e 66 6f 20 2a 70 4e 65 78 74 3b  oincInfo *pNext;
1fa50 20 20 20 2f 2a 20 4e 65 78 74 20 69 6e 66 6f 20     /* Next info 
1fa60 62 6c 6f 63 6b 20 69 6e 20 61 20 6c 69 73 74 20  block in a list 
1fa70 6f 66 20 74 68 65 6d 20 61 6c 6c 20 2a 2f 0a 20  of them all */. 
1fa80 20 54 61 62 6c 65 20 2a 70 54 61 62 3b 20 20 20   Table *pTab;   
1fa90 20 20 20 20 20 20 20 2f 2a 20 54 61 62 6c 65 20         /* Table 
1faa0 74 68 69 73 20 69 6e 66 6f 20 62 6c 6f 63 6b 20  this info block 
1fab0 72 65 66 65 72 73 20 74 6f 20 2a 2f 0a 20 20 69  refers to */.  i
1fac0 6e 74 20 69 44 62 3b 20 20 20 20 20 20 20 20 20  nt iDb;         
1fad0 20 20 20 20 20 2f 2a 20 49 6e 64 65 78 20 69 6e       /* Index in
1fae0 20 73 71 6c 69 74 65 33 2e 61 44 62 5b 5d 20 6f   sqlite3.aDb[] o
1faf0 66 20 64 61 74 61 62 61 73 65 20 68 6f 6c 64 69  f database holdi
1fb00 6e 67 20 70 54 61 62 20 2a 2f 0a 20 20 69 6e 74  ng pTab */.  int
1fb10 20 72 65 67 43 74 72 3b 20 20 20 20 20 20 20 20   regCtr;        
1fb20 20 20 20 2f 2a 20 4d 65 6d 6f 72 79 20 72 65 67     /* Memory reg
1fb30 69 73 74 65 72 20 68 6f 6c 64 69 6e 67 20 74 68  ister holding th
1fb40 65 20 72 6f 77 69 64 20 63 6f 75 6e 74 65 72 20  e rowid counter 
1fb50 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 74 20  */.};../*.** At 
1fb60 6c 65 61 73 74 20 6f 6e 65 20 69 6e 73 74 61 6e  least one instan
1fb70 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77  ce of the follow
1fb80 69 6e 67 20 73 74 72 75 63 74 75 72 65 20 69 73  ing structure is
1fb90 20 63 72 65 61 74 65 64 20 66 6f 72 20 65 61 63   created for eac
1fba0 68 0a 2a 2a 20 74 72 69 67 67 65 72 20 74 68 61  h.** trigger tha
1fbb0 74 20 6d 61 79 20 62 65 20 66 69 72 65 64 20 77  t may be fired w
1fbc0 68 69 6c 65 20 70 61 72 73 69 6e 67 20 61 6e 20  hile parsing an 
1fbd0 49 4e 53 45 52 54 2c 20 55 50 44 41 54 45 20 6f  INSERT, UPDATE o
1fbe0 72 20 44 45 4c 45 54 45 0a 2a 2a 20 73 74 61 74  r DELETE.** stat
1fbf0 65 6d 65 6e 74 2e 20 41 6c 6c 20 73 75 63 68 20  ement. All such 
1fc00 6f 62 6a 65 63 74 73 20 61 72 65 20 73 74 6f 72  objects are stor
1fc10 65 64 20 69 6e 20 74 68 65 20 6c 69 6e 6b 65 64  ed in the linked
1fc20 20 6c 69 73 74 20 68 65 61 64 65 64 20 61 74 0a   list headed at.
1fc30 2a 2a 20 50 61 72 73 65 2e 70 54 72 69 67 67 65  ** Parse.pTrigge
1fc40 72 50 72 67 20 61 6e 64 20 64 65 6c 65 74 65 64  rPrg and deleted
1fc50 20 6f 6e 63 65 20 73 74 61 74 65 6d 65 6e 74 20   once statement 
1fc60 63 6f 6d 70 69 6c 61 74 69 6f 6e 20 68 61 73 20  compilation has 
1fc70 62 65 65 6e 0a 2a 2a 20 63 6f 6d 70 6c 65 74 65  been.** complete
1fc80 64 2e 0a 2a 2a 0a 2a 2a 20 41 20 56 64 62 65 20  d..**.** A Vdbe 
1fc90 73 75 62 2d 70 72 6f 67 72 61 6d 20 74 68 61 74  sub-program that
1fca0 20 69 6d 70 6c 65 6d 65 6e 74 73 20 74 68 65 20   implements the 
1fcb0 62 6f 64 79 20 61 6e 64 20 57 48 45 4e 20 63 6c  body and WHEN cl
1fcc0 61 75 73 65 20 6f 66 20 74 72 69 67 67 65 72 0a  ause of trigger.
1fcd0 2a 2a 20 54 72 69 67 67 65 72 50 72 67 2e 70 54  ** TriggerPrg.pT
1fce0 72 69 67 67 65 72 2c 20 61 73 73 75 6d 69 6e 67  rigger, assuming
1fcf0 20 61 20 64 65 66 61 75 6c 74 20 4f 4e 20 43 4f   a default ON CO
1fd00 4e 46 4c 49 43 54 20 63 6c 61 75 73 65 20 6f 66  NFLICT clause of
1fd10 0a 2a 2a 20 54 72 69 67 67 65 72 50 72 67 2e 6f  .** TriggerPrg.o
1fd20 72 63 6f 6e 66 2c 20 69 73 20 73 74 6f 72 65 64  rconf, is stored
1fd30 20 69 6e 20 74 68 65 20 54 72 69 67 67 65 72 50   in the TriggerP
1fd40 72 67 2e 70 50 72 6f 67 72 61 6d 20 76 61 72 69  rg.pProgram vari
1fd50 61 62 6c 65 2e 0a 2a 2a 20 54 68 65 20 50 61 72  able..** The Par
1fd60 73 65 2e 70 54 72 69 67 67 65 72 50 72 67 20 6c  se.pTriggerPrg l
1fd70 69 73 74 20 6e 65 76 65 72 20 63 6f 6e 74 61 69  ist never contai
1fd80 6e 73 20 74 77 6f 20 65 6e 74 72 69 65 73 20 77  ns two entries w
1fd90 69 74 68 20 74 68 65 20 73 61 6d 65 0a 2a 2a 20  ith the same.** 
1fda0 76 61 6c 75 65 73 20 66 6f 72 20 62 6f 74 68 20  values for both 
1fdb0 70 54 72 69 67 67 65 72 20 61 6e 64 20 6f 72 63  pTrigger and orc
1fdc0 6f 6e 66 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 54  onf..**.** The T
1fdd0 72 69 67 67 65 72 50 72 67 2e 61 43 6f 6c 6d 61  riggerPrg.aColma
1fde0 73 6b 5b 30 5d 20 76 61 72 69 61 62 6c 65 20 69  sk[0] variable i
1fdf0 73 20 73 65 74 20 74 6f 20 61 20 6d 61 73 6b 20  s set to a mask 
1fe00 6f 66 20 6f 6c 64 2e 2a 20 63 6f 6c 75 6d 6e 73  of old.* columns
1fe10 0a 2a 2a 20 61 63 63 65 73 73 65 64 20 28 6f 72  .** accessed (or
1fe20 20 73 65 74 20 74 6f 20 30 20 66 6f 72 20 74 72   set to 0 for tr
1fe30 69 67 67 65 72 73 20 66 69 72 65 64 20 61 73 20  iggers fired as 
1fe40 61 20 72 65 73 75 6c 74 20 6f 66 20 49 4e 53 45  a result of INSE
1fe50 52 54 0a 2a 2a 20 73 74 61 74 65 6d 65 6e 74 73  RT.** statements
1fe60 29 2e 20 53 69 6d 69 6c 61 72 6c 79 2c 20 74 68  ). Similarly, th
1fe70 65 20 54 72 69 67 67 65 72 50 72 67 2e 61 43 6f  e TriggerPrg.aCo
1fe80 6c 6d 61 73 6b 5b 31 5d 20 76 61 72 69 61 62 6c  lmask[1] variabl
1fe90 65 20 69 73 20 73 65 74 20 74 6f 0a 2a 2a 20 61  e is set to.** a
1fea0 20 6d 61 73 6b 20 6f 66 20 6e 65 77 2e 2a 20 63   mask of new.* c
1feb0 6f 6c 75 6d 6e 73 20 75 73 65 64 20 62 79 20 74  olumns used by t
1fec0 68 65 20 70 72 6f 67 72 61 6d 2e 0a 2a 2f 0a 73  he program..*/.s
1fed0 74 72 75 63 74 20 54 72 69 67 67 65 72 50 72 67  truct TriggerPrg
1fee0 20 7b 0a 20 20 54 72 69 67 67 65 72 20 2a 70 54   {.  Trigger *pT
1fef0 72 69 67 67 65 72 3b 20 20 20 20 20 20 2f 2a 20  rigger;      /* 
1ff00 54 72 69 67 67 65 72 20 74 68 69 73 20 70 72 6f  Trigger this pro
1ff10 67 72 61 6d 20 77 61 73 20 63 6f 64 65 64 20 66  gram was coded f
1ff20 72 6f 6d 20 2a 2f 0a 20 20 54 72 69 67 67 65 72  rom */.  Trigger
1ff30 50 72 67 20 2a 70 4e 65 78 74 3b 20 20 20 20 20  Prg *pNext;     
1ff40 20 2f 2a 20 4e 65 78 74 20 65 6e 74 72 79 20 69   /* Next entry i
1ff50 6e 20 50 61 72 73 65 2e 70 54 72 69 67 67 65 72  n Parse.pTrigger
1ff60 50 72 67 20 6c 69 73 74 20 2a 2f 0a 20 20 53 75  Prg list */.  Su
1ff70 62 50 72 6f 67 72 61 6d 20 2a 70 50 72 6f 67 72  bProgram *pProgr
1ff80 61 6d 3b 20 20 20 2f 2a 20 50 72 6f 67 72 61 6d  am;   /* Program
1ff90 20 69 6d 70 6c 65 6d 65 6e 74 69 6e 67 20 70 54   implementing pT
1ffa0 72 69 67 67 65 72 2f 6f 72 63 6f 6e 66 20 2a 2f  rigger/orconf */
1ffb0 0a 20 20 69 6e 74 20 6f 72 63 6f 6e 66 3b 20 20  .  int orconf;  
1ffc0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 65             /* De
1ffd0 66 61 75 6c 74 20 4f 4e 20 43 4f 4e 46 4c 49 43  fault ON CONFLIC
1ffe0 54 20 70 6f 6c 69 63 79 20 2a 2f 0a 20 20 75 33  T policy */.  u3
1fff0 32 20 61 43 6f 6c 6d 61 73 6b 5b 32 5d 3b 20 20  2 aColmask[2];  
20000 20 20 20 20 20 20 2f 2a 20 4d 61 73 6b 73 20 6f        /* Masks o
20010 66 20 6f 6c 64 2e 2a 2c 20 6e 65 77 2e 2a 20 63  f old.*, new.* c
20020 6f 6c 75 6d 6e 73 20 61 63 63 65 73 73 65 64 20  olumns accessed 
20030 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  */.};../*.** The
20040 20 79 44 62 4d 61 73 6b 20 64 61 74 61 74 79 70   yDbMask datatyp
20050 65 20 66 6f 72 20 74 68 65 20 62 69 74 6d 61 73  e for the bitmas
20060 6b 20 6f 66 20 61 6c 6c 20 61 74 74 61 63 68 65  k of all attache
20070 64 20 64 61 74 61 62 61 73 65 73 2e 0a 2a 2f 0a  d databases..*/.
20080 23 69 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 41  #if SQLITE_MAX_A
20090 54 54 41 43 48 45 44 3e 33 30 0a 20 20 74 79 70  TTACHED>30.  typ
200a0 65 64 65 66 20 75 6e 73 69 67 6e 65 64 20 63 68  edef unsigned ch
200b0 61 72 20 79 44 62 4d 61 73 6b 5b 28 53 51 4c 49  ar yDbMask[(SQLI
200c0 54 45 5f 4d 41 58 5f 41 54 54 41 43 48 45 44 2b  TE_MAX_ATTACHED+
200d0 39 29 2f 38 5d 3b 0a 23 20 64 65 66 69 6e 65 20  9)/8];.# define 
200e0 44 62 4d 61 73 6b 54 65 73 74 28 4d 2c 49 29 20  DbMaskTest(M,I) 
200f0 20 20 20 28 28 28 4d 29 5b 28 49 29 2f 38 5d 26     (((M)[(I)/8]&
20100 28 31 3c 3c 28 28 49 29 26 37 29 29 29 21 3d 30  (1<<((I)&7)))!=0
20110 29 0a 23 20 64 65 66 69 6e 65 20 44 62 4d 61 73  ).# define DbMas
20120 6b 5a 65 72 6f 28 4d 29 20 20 20 20 20 20 6d 65  kZero(M)      me
20130 6d 73 65 74 28 28 4d 29 2c 30 2c 73 69 7a 65 6f  mset((M),0,sizeo
20140 66 28 4d 29 29 0a 23 20 64 65 66 69 6e 65 20 44  f(M)).# define D
20150 62 4d 61 73 6b 53 65 74 28 4d 2c 49 29 20 20 20  bMaskSet(M,I)   
20160 20 20 28 4d 29 5b 28 49 29 2f 38 5d 7c 3d 28 31    (M)[(I)/8]|=(1
20170 3c 3c 28 28 49 29 26 37 29 29 0a 23 20 64 65 66  <<((I)&7)).# def
20180 69 6e 65 20 44 62 4d 61 73 6b 41 6c 6c 5a 65 72  ine DbMaskAllZer
20190 6f 28 4d 29 20 20 20 73 71 6c 69 74 65 33 44 62  o(M)   sqlite3Db
201a0 4d 61 73 6b 41 6c 6c 5a 65 72 6f 28 4d 29 0a 23  MaskAllZero(M).#
201b0 20 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 4e 6f   define DbMaskNo
201c0 6e 5a 65 72 6f 28 4d 29 20 20 20 28 73 71 6c 69  nZero(M)   (sqli
201d0 74 65 33 44 62 4d 61 73 6b 41 6c 6c 5a 65 72 6f  te3DbMaskAllZero
201e0 28 4d 29 3d 3d 30 29 0a 23 65 6c 73 65 0a 20 20  (M)==0).#else.  
201f0 74 79 70 65 64 65 66 20 75 6e 73 69 67 6e 65 64  typedef unsigned
20200 20 69 6e 74 20 79 44 62 4d 61 73 6b 3b 0a 23 20   int yDbMask;.# 
20210 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 54 65 73  define DbMaskTes
20220 74 28 4d 2c 49 29 20 20 20 20 28 28 28 4d 29 26  t(M,I)    (((M)&
20230 28 28 28 79 44 62 4d 61 73 6b 29 31 29 3c 3c 28  (((yDbMask)1)<<(
20240 49 29 29 29 21 3d 30 29 0a 23 20 64 65 66 69 6e  I)))!=0).# defin
20250 65 20 44 62 4d 61 73 6b 5a 65 72 6f 28 4d 29 20  e DbMaskZero(M) 
20260 20 20 20 20 20 28 4d 29 3d 30 0a 23 20 64 65 66       (M)=0.# def
20270 69 6e 65 20 44 62 4d 61 73 6b 53 65 74 28 4d 2c  ine DbMaskSet(M,
20280 49 29 20 20 20 20 20 28 4d 29 7c 3d 28 28 28 79  I)     (M)|=(((y
20290 44 62 4d 61 73 6b 29 31 29 3c 3c 28 49 29 29 0a  DbMask)1)<<(I)).
202a0 23 20 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 41  # define DbMaskA
202b0 6c 6c 5a 65 72 6f 28 4d 29 20 20 20 28 4d 29 3d  llZero(M)   (M)=
202c0 3d 30 0a 23 20 64 65 66 69 6e 65 20 44 62 4d 61  =0.# define DbMa
202d0 73 6b 4e 6f 6e 5a 65 72 6f 28 4d 29 20 20 20 28  skNonZero(M)   (
202e0 4d 29 21 3d 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a  M)!=0.#endif../*
202f0 0a 2a 2a 20 41 6e 20 53 51 4c 20 70 61 72 73 65  .** An SQL parse
20300 72 20 63 6f 6e 74 65 78 74 2e 20 20 41 20 63 6f  r context.  A co
20310 70 79 20 6f 66 20 74 68 69 73 20 73 74 72 75 63  py of this struc
20320 74 75 72 65 20 69 73 20 70 61 73 73 65 64 20 74  ture is passed t
20330 68 72 6f 75 67 68 0a 2a 2a 20 74 68 65 20 70 61  hrough.** the pa
20340 72 73 65 72 20 61 6e 64 20 64 6f 77 6e 20 69 6e  rser and down in
20350 74 6f 20 61 6c 6c 20 74 68 65 20 70 61 72 73 65  to all the parse
20360 72 20 61 63 74 69 6f 6e 20 72 6f 75 74 69 6e 65  r action routine
20370 20 69 6e 20 6f 72 64 65 72 20 74 6f 0a 2a 2a 20   in order to.** 
20380 63 61 72 72 79 20 61 72 6f 75 6e 64 20 69 6e 66  carry around inf
20390 6f 72 6d 61 74 69 6f 6e 20 74 68 61 74 20 69 73  ormation that is
203a0 20 67 6c 6f 62 61 6c 20 74 6f 20 74 68 65 20 65   global to the e
203b0 6e 74 69 72 65 20 70 61 72 73 65 2e 0a 2a 2a 0a  ntire parse..**.
203c0 2a 2a 20 54 68 65 20 73 74 72 75 63 74 75 72 65  ** The structure
203d0 20 69 73 20 64 69 76 69 64 65 64 20 69 6e 74 6f   is divided into
203e0 20 74 77 6f 20 70 61 72 74 73 2e 20 20 57 68 65   two parts.  Whe
203f0 6e 20 74 68 65 20 70 61 72 73 65 72 20 61 6e 64  n the parser and
20400 20 63 6f 64 65 0a 2a 2a 20 67 65 6e 65 72 61 74   code.** generat
20410 65 20 63 61 6c 6c 20 74 68 65 6d 73 65 6c 76 65  e call themselve
20420 73 20 72 65 63 75 72 73 69 76 65 6c 79 2c 20 74  s recursively, t
20430 68 65 20 66 69 72 73 74 20 70 61 72 74 20 6f 66  he first part of
20440 20 74 68 65 20 73 74 72 75 63 74 75 72 65 0a 2a   the structure.*
20450 2a 20 69 73 20 63 6f 6e 73 74 61 6e 74 20 62 75  * is constant bu
20460 74 20 74 68 65 20 73 65 63 6f 6e 64 20 70 61 72  t the second par
20470 74 20 69 73 20 72 65 73 65 74 20 61 74 20 74 68  t is reset at th
20480 65 20 62 65 67 69 6e 6e 69 6e 67 20 61 6e 64 20  e beginning and 
20490 65 6e 64 20 6f 66 0a 2a 2a 20 65 61 63 68 20 72  end of.** each r
204a0 65 63 75 72 73 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20  ecursion..**.** 
204b0 54 68 65 20 6e 54 61 62 6c 65 4c 6f 63 6b 20 61  The nTableLock a
204c0 6e 64 20 61 54 61 62 6c 65 4c 6f 63 6b 20 76 61  nd aTableLock va
204d0 72 69 61 62 6c 65 73 20 61 72 65 20 6f 6e 6c 79  riables are only
204e0 20 75 73 65 64 20 69 66 20 74 68 65 20 73 68 61   used if the sha
204f0 72 65 64 2d 63 61 63 68 65 0a 2a 2a 20 66 65 61  red-cache.** fea
20500 74 75 72 65 20 69 73 20 65 6e 61 62 6c 65 64 20  ture is enabled 
20510 28 69 66 20 73 71 6c 69 74 65 33 54 73 64 28 29  (if sqlite3Tsd()
20520 2d 3e 75 73 65 53 68 61 72 65 64 44 61 74 61 20  ->useSharedData 
20530 69 73 20 74 72 75 65 29 2e 20 54 68 65 79 20 61  is true). They a
20540 72 65 0a 2a 2a 20 75 73 65 64 20 74 6f 20 73 74  re.** used to st
20550 6f 72 65 20 74 68 65 20 73 65 74 20 6f 66 20 74  ore the set of t
20560 61 62 6c 65 2d 6c 6f 63 6b 73 20 72 65 71 75 69  able-locks requi
20570 72 65 64 20 62 79 20 74 68 65 20 73 74 61 74 65  red by the state
20580 6d 65 6e 74 20 62 65 69 6e 67 0a 2a 2a 20 63 6f  ment being.** co
20590 6d 70 69 6c 65 64 2e 20 46 75 6e 63 74 69 6f 6e  mpiled. Function
205a0 20 73 71 6c 69 74 65 33 54 61 62 6c 65 4c 6f 63   sqlite3TableLoc
205b0 6b 28 29 20 69 73 20 75 73 65 64 20 74 6f 20 61  k() is used to a
205c0 64 64 20 65 6e 74 72 69 65 73 20 74 6f 20 74 68  dd entries to th
205d0 65 0a 2a 2a 20 6c 69 73 74 2e 0a 2a 2f 0a 73 74  e.** list..*/.st
205e0 72 75 63 74 20 50 61 72 73 65 20 7b 0a 20 20 73  ruct Parse {.  s
205f0 71 6c 69 74 65 33 20 2a 64 62 3b 20 20 20 20 20  qlite3 *db;     
20600 20 20 20 20 2f 2a 20 54 68 65 20 6d 61 69 6e 20      /* The main 
20610 64 61 74 61 62 61 73 65 20 73 74 72 75 63 74 75  database structu
20620 72 65 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 45  re */.  char *zE
20630 72 72 4d 73 67 3b 20 20 20 20 20 20 20 2f 2a 20  rrMsg;       /* 
20640 41 6e 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65  An error message
20650 20 2a 2f 0a 20 20 56 64 62 65 20 2a 70 56 64 62   */.  Vdbe *pVdb
20660 65 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 41 6e  e;         /* An
20670 20 65 6e 67 69 6e 65 20 66 6f 72 20 65 78 65 63   engine for exec
20680 75 74 69 6e 67 20 64 61 74 61 62 61 73 65 20 62  uting database b
20690 79 74 65 63 6f 64 65 20 2a 2f 0a 20 20 69 6e 74  ytecode */.  int
206a0 20 72 63 3b 20 20 20 20 20 20 20 20 20 20 20 20   rc;            
206b0 20 20 2f 2a 20 52 65 74 75 72 6e 20 63 6f 64 65    /* Return code
206c0 20 66 72 6f 6d 20 65 78 65 63 75 74 69 6f 6e 20   from execution 
206d0 2a 2f 0a 20 20 75 38 20 63 6f 6c 4e 61 6d 65 73  */.  u8 colNames
206e0 53 65 74 3b 20 20 20 20 20 20 2f 2a 20 54 52 55  Set;      /* TRU
206f0 45 20 61 66 74 65 72 20 4f 50 5f 43 6f 6c 75 6d  E after OP_Colum
20700 6e 4e 61 6d 65 20 68 61 73 20 62 65 65 6e 20 69  nName has been i
20710 73 73 75 65 64 20 74 6f 20 70 56 64 62 65 20 2a  ssued to pVdbe *
20720 2f 0a 20 20 75 38 20 63 68 65 63 6b 53 63 68 65  /.  u8 checkSche
20730 6d 61 3b 20 20 20 20 20 20 2f 2a 20 43 61 75 73  ma;      /* Caus
20740 65 73 20 73 63 68 65 6d 61 20 63 6f 6f 6b 69 65  es schema cookie
20750 20 63 68 65 63 6b 20 61 66 74 65 72 20 61 6e 20   check after an 
20760 65 72 72 6f 72 20 2a 2f 0a 20 20 75 38 20 6e 65  error */.  u8 ne
20770 73 74 65 64 3b 20 20 20 20 20 20 20 20 20 20 20  sted;           
20780 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6e 65 73  /* Number of nes
20790 74 65 64 20 63 61 6c 6c 73 20 74 6f 20 74 68 65  ted calls to the
207a0 20 70 61 72 73 65 72 2f 63 6f 64 65 20 67 65 6e   parser/code gen
207b0 65 72 61 74 6f 72 20 2a 2f 0a 20 20 75 38 20 6e  erator */.  u8 n
207c0 54 65 6d 70 52 65 67 3b 20 20 20 20 20 20 20 20  TempReg;        
207d0 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 74 65   /* Number of te
207e0 6d 70 6f 72 61 72 79 20 72 65 67 69 73 74 65 72  mporary register
207f0 73 20 69 6e 20 61 54 65 6d 70 52 65 67 5b 5d 20  s in aTempReg[] 
20800 2a 2f 0a 20 20 75 38 20 69 73 4d 75 6c 74 69 57  */.  u8 isMultiW
20810 72 69 74 65 3b 20 20 20 20 20 2f 2a 20 54 72 75  rite;     /* Tru
20820 65 20 69 66 20 73 74 61 74 65 6d 65 6e 74 20 6d  e if statement m
20830 61 79 20 6d 6f 64 69 66 79 2f 69 6e 73 65 72 74  ay modify/insert
20840 20 6d 75 6c 74 69 70 6c 65 20 72 6f 77 73 20 2a   multiple rows *
20850 2f 0a 20 20 75 38 20 6d 61 79 41 62 6f 72 74 3b  /.  u8 mayAbort;
20860 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65           /* True
20870 20 69 66 20 73 74 61 74 65 6d 65 6e 74 20 6d 61   if statement ma
20880 79 20 74 68 72 6f 77 20 61 6e 20 41 42 4f 52 54  y throw an ABORT
20890 20 65 78 63 65 70 74 69 6f 6e 20 2a 2f 0a 20 20   exception */.  
208a0 75 38 20 68 61 73 43 6f 6d 70 6f 75 6e 64 3b 20  u8 hasCompound; 
208b0 20 20 20 20 20 2f 2a 20 4e 65 65 64 20 74 6f 20       /* Need to 
208c0 69 6e 76 6f 6b 65 20 63 6f 6e 76 65 72 74 43 6f  invoke convertCo
208d0 6d 70 6f 75 6e 64 53 65 6c 65 63 74 54 6f 53 75  mpoundSelectToSu
208e0 62 71 75 65 72 79 28 29 20 2a 2f 0a 20 20 75 38  bquery() */.  u8
208f0 20 6f 6b 43 6f 6e 73 74 46 61 63 74 6f 72 3b 20   okConstFactor; 
20900 20 20 20 2f 2a 20 4f 4b 20 74 6f 20 66 61 63 74     /* OK to fact
20910 6f 72 20 6f 75 74 20 63 6f 6e 73 74 61 6e 74 73  or out constants
20920 20 2a 2f 0a 20 20 75 38 20 64 69 73 61 62 6c 65   */.  u8 disable
20930 4c 6f 6f 6b 61 73 69 64 65 3b 20 2f 2a 20 4e 75  Lookaside; /* Nu
20940 6d 62 65 72 20 6f 66 20 74 69 6d 65 73 20 6c 6f  mber of times lo
20950 6f 6b 61 73 69 64 65 20 68 61 73 20 62 65 65 6e  okaside has been
20960 20 64 69 73 61 62 6c 65 64 20 2a 2f 0a 20 20 69   disabled */.  i
20970 6e 74 20 6e 52 61 6e 67 65 52 65 67 3b 20 20 20  nt nRangeReg;   
20980 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20 74      /* Size of t
20990 68 65 20 74 65 6d 70 6f 72 61 72 79 20 72 65 67  he temporary reg
209a0 69 73 74 65 72 20 62 6c 6f 63 6b 20 2a 2f 0a 20  ister block */. 
209b0 20 69 6e 74 20 69 52 61 6e 67 65 52 65 67 3b 20   int iRangeReg; 
209c0 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20 72        /* First r
209d0 65 67 69 73 74 65 72 20 69 6e 20 74 65 6d 70 6f  egister in tempo
209e0 72 61 72 79 20 72 65 67 69 73 74 65 72 20 62 6c  rary register bl
209f0 6f 63 6b 20 2a 2f 0a 20 20 69 6e 74 20 6e 45 72  ock */.  int nEr
20a00 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  r;            /*
20a10 20 4e 75 6d 62 65 72 20 6f 66 20 65 72 72 6f 72   Number of error
20a20 73 20 73 65 65 6e 20 2a 2f 0a 20 20 69 6e 74 20  s seen */.  int 
20a30 6e 54 61 62 3b 20 20 20 20 20 20 20 20 20 20 20  nTab;           
20a40 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 70 72   /* Number of pr
20a50 65 76 69 6f 75 73 6c 79 20 61 6c 6c 6f 63 61 74  eviously allocat
20a60 65 64 20 56 44 42 45 20 63 75 72 73 6f 72 73 20  ed VDBE cursors 
20a70 2a 2f 0a 20 20 69 6e 74 20 6e 4d 65 6d 3b 20 20  */.  int nMem;  
20a80 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
20a90 62 65 72 20 6f 66 20 6d 65 6d 6f 72 79 20 63 65  ber of memory ce
20aa0 6c 6c 73 20 75 73 65 64 20 73 6f 20 66 61 72 20  lls used so far 
20ab0 2a 2f 0a 20 20 69 6e 74 20 6e 4f 70 41 6c 6c 6f  */.  int nOpAllo
20ac0 63 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d  c;        /* Num
20ad0 62 65 72 20 6f 66 20 73 6c 6f 74 73 20 61 6c 6c  ber of slots all
20ae0 6f 63 61 74 65 64 20 66 6f 72 20 56 64 62 65 2e  ocated for Vdbe.
20af0 61 4f 70 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 73  aOp[] */.  int s
20b00 7a 4f 70 41 6c 6c 6f 63 3b 20 20 20 20 20 20 20  zOpAlloc;       
20b10 2f 2a 20 42 79 74 65 73 20 6f 66 20 6d 65 6d 6f  /* Bytes of memo
20b20 72 79 20 73 70 61 63 65 20 61 6c 6c 6f 63 61 74  ry space allocat
20b30 65 64 20 66 6f 72 20 56 64 62 65 2e 61 4f 70 5b  ed for Vdbe.aOp[
20b40 5d 20 2a 2f 0a 20 20 69 6e 74 20 69 53 65 6c 66  ] */.  int iSelf
20b50 54 61 62 3b 20 20 20 20 20 20 20 20 2f 2a 20 54  Tab;        /* T
20b60 61 62 6c 65 20 61 73 73 6f 63 69 61 74 65 64 20  able associated 
20b70 77 69 74 68 20 61 6e 20 69 6e 64 65 78 20 6f 6e  with an index on
20b80 20 65 78 70 72 2c 20 6f 72 20 6e 65 67 61 74 69   expr, or negati
20b90 76 65 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ve.             
20ba0 20 20 20 20 20 20 20 20 20 20 2a 2a 20 6f 66 20            ** of 
20bb0 74 68 65 20 62 61 73 65 20 72 65 67 69 73 74 65  the base registe
20bc0 72 20 64 75 72 69 6e 67 20 63 68 65 63 6b 2d 63  r during check-c
20bd0 6f 6e 73 74 72 61 69 6e 74 20 65 76 61 6c 20 2a  onstraint eval *
20be0 2f 0a 20 20 69 6e 74 20 6e 4c 61 62 65 6c 3b 20  /.  int nLabel; 
20bf0 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
20c00 65 72 20 6f 66 20 6c 61 62 65 6c 73 20 75 73 65  er of labels use
20c10 64 20 2a 2f 0a 20 20 69 6e 74 20 2a 61 4c 61 62  d */.  int *aLab
20c20 65 6c 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 53  el;         /* S
20c30 70 61 63 65 20 74 6f 20 68 6f 6c 64 20 74 68 65  pace to hold the
20c40 20 6c 61 62 65 6c 73 20 2a 2f 0a 20 20 45 78 70   labels */.  Exp
20c50 72 4c 69 73 74 20 2a 70 43 6f 6e 73 74 45 78 70  rList *pConstExp
20c60 72 3b 2f 2a 20 43 6f 6e 73 74 61 6e 74 20 65 78  r;/* Constant ex
20c70 70 72 65 73 73 69 6f 6e 73 20 2a 2f 0a 20 20 54  pressions */.  T
20c80 6f 6b 65 6e 20 63 6f 6e 73 74 72 61 69 6e 74 4e  oken constraintN
20c90 61 6d 65 3b 2f 2a 20 4e 61 6d 65 20 6f 66 20 74  ame;/* Name of t
20ca0 68 65 20 63 6f 6e 73 74 72 61 69 6e 74 20 63 75  he constraint cu
20cb0 72 72 65 6e 74 6c 79 20 62 65 69 6e 67 20 70 61  rrently being pa
20cc0 72 73 65 64 20 2a 2f 0a 20 20 79 44 62 4d 61 73  rsed */.  yDbMas
20cd0 6b 20 77 72 69 74 65 4d 61 73 6b 3b 20 20 20 2f  k writeMask;   /
20ce0 2a 20 53 74 61 72 74 20 61 20 77 72 69 74 65 20  * Start a write 
20cf0 74 72 61 6e 73 61 63 74 69 6f 6e 20 6f 6e 20 74  transaction on t
20d00 68 65 73 65 20 64 61 74 61 62 61 73 65 73 20 2a  hese databases *
20d10 2f 0a 20 20 79 44 62 4d 61 73 6b 20 63 6f 6f 6b  /.  yDbMask cook
20d20 69 65 4d 61 73 6b 3b 20 20 2f 2a 20 42 69 74 6d  ieMask;  /* Bitm
20d30 61 73 6b 20 6f 66 20 73 63 68 65 6d 61 20 76 65  ask of schema ve
20d40 72 69 66 69 65 64 20 64 61 74 61 62 61 73 65 73  rified databases
20d50 20 2a 2f 0a 20 20 69 6e 74 20 72 65 67 52 6f 77   */.  int regRow
20d60 69 64 3b 20 20 20 20 20 20 20 20 2f 2a 20 52 65  id;        /* Re
20d70 67 69 73 74 65 72 20 68 6f 6c 64 69 6e 67 20 72  gister holding r
20d80 6f 77 69 64 20 6f 66 20 43 52 45 41 54 45 20 54  owid of CREATE T
20d90 41 42 4c 45 20 65 6e 74 72 79 20 2a 2f 0a 20 20  ABLE entry */.  
20da0 69 6e 74 20 72 65 67 52 6f 6f 74 3b 20 20 20 20  int regRoot;    
20db0 20 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72       /* Register
20dc0 20 68 6f 6c 64 69 6e 67 20 72 6f 6f 74 20 70 61   holding root pa
20dd0 67 65 20 6e 75 6d 62 65 72 20 66 6f 72 20 6e 65  ge number for ne
20de0 77 20 6f 62 6a 65 63 74 73 20 2a 2f 0a 20 20 69  w objects */.  i
20df0 6e 74 20 6e 4d 61 78 41 72 67 3b 20 20 20 20 20  nt nMaxArg;     
20e00 20 20 20 20 2f 2a 20 4d 61 78 20 61 72 67 73 20      /* Max args 
20e10 70 61 73 73 65 64 20 74 6f 20 75 73 65 72 20 66  passed to user f
20e20 75 6e 63 74 69 6f 6e 20 62 79 20 73 75 62 2d 70  unction by sub-p
20e30 72 6f 67 72 61 6d 20 2a 2f 0a 20 20 69 6e 74 20  rogram */.  int 
20e40 6e 53 65 6c 65 63 74 3b 20 20 20 20 20 20 20 20  nSelect;        
20e50 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 53 45   /* Number of SE
20e60 4c 45 43 54 20 73 74 6d 74 73 2e 20 43 6f 75 6e  LECT stmts. Coun
20e70 74 65 72 20 66 6f 72 20 53 65 6c 65 63 74 2e 73  ter for Select.s
20e80 65 6c 49 64 20 2a 2f 0a 23 69 66 6e 64 65 66 20  elId */.#ifndef 
20e90 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 48 41 52  SQLITE_OMIT_SHAR
20ea0 45 44 5f 43 41 43 48 45 0a 20 20 69 6e 74 20 6e  ED_CACHE.  int n
20eb0 54 61 62 6c 65 4c 6f 63 6b 3b 20 20 20 20 20 20  TableLock;      
20ec0 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6c    /* Number of l
20ed0 6f 63 6b 73 20 69 6e 20 61 54 61 62 6c 65 4c 6f  ocks in aTableLo
20ee0 63 6b 20 2a 2f 0a 20 20 54 61 62 6c 65 4c 6f 63  ck */.  TableLoc
20ef0 6b 20 2a 61 54 61 62 6c 65 4c 6f 63 6b 3b 20 2f  k *aTableLock; /
20f00 2a 20 52 65 71 75 69 72 65 64 20 74 61 62 6c 65  * Required table
20f10 20 6c 6f 63 6b 73 20 66 6f 72 20 73 68 61 72 65   locks for share
20f20 64 2d 63 61 63 68 65 20 6d 6f 64 65 20 2a 2f 0a  d-cache mode */.
20f30 23 65 6e 64 69 66 0a 20 20 41 75 74 6f 69 6e 63  #endif.  Autoinc
20f40 49 6e 66 6f 20 2a 70 41 69 6e 63 3b 20 20 2f 2a  Info *pAinc;  /*
20f50 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f   Information abo
20f60 75 74 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54  ut AUTOINCREMENT
20f70 20 63 6f 75 6e 74 65 72 73 20 2a 2f 0a 20 20 50   counters */.  P
20f80 61 72 73 65 20 2a 70 54 6f 70 6c 65 76 65 6c 3b  arse *pToplevel;
20f90 20 20 20 20 2f 2a 20 50 61 72 73 65 20 73 74 72      /* Parse str
20fa0 75 63 74 75 72 65 20 66 6f 72 20 6d 61 69 6e 20  ucture for main 
20fb0 70 72 6f 67 72 61 6d 20 28 6f 72 20 4e 55 4c 4c  program (or NULL
20fc0 29 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70 54  ) */.  Table *pT
20fd0 72 69 67 67 65 72 54 61 62 3b 20 20 2f 2a 20 54  riggerTab;  /* T
20fe0 61 62 6c 65 20 74 72 69 67 67 65 72 73 20 61 72  able triggers ar
20ff0 65 20 62 65 69 6e 67 20 63 6f 64 65 64 20 66 6f  e being coded fo
21000 72 20 2a 2f 0a 20 20 69 6e 74 20 61 64 64 72 43  r */.  int addrC
21010 72 54 61 62 3b 20 20 20 20 20 20 20 2f 2a 20 41  rTab;       /* A
21020 64 64 72 65 73 73 20 6f 66 20 4f 50 5f 43 72 65  ddress of OP_Cre
21030 61 74 65 42 74 72 65 65 20 6f 70 63 6f 64 65 20  ateBtree opcode 
21040 6f 6e 20 43 52 45 41 54 45 20 54 41 42 4c 45 20  on CREATE TABLE 
21050 2a 2f 0a 20 20 75 33 32 20 6e 51 75 65 72 79 4c  */.  u32 nQueryL
21060 6f 6f 70 3b 20 20 20 20 20 20 2f 2a 20 45 73 74  oop;      /* Est
21070 20 6e 75 6d 62 65 72 20 6f 66 20 69 74 65 72 61   number of itera
21080 74 69 6f 6e 73 20 6f 66 20 61 20 71 75 65 72 79  tions of a query
21090 20 28 31 30 2a 6c 6f 67 32 28 4e 29 29 20 2a 2f   (10*log2(N)) */
210a0 0a 20 20 75 33 32 20 6f 6c 64 6d 61 73 6b 3b 20  .  u32 oldmask; 
210b0 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 73 6b 20          /* Mask 
210c0 6f 66 20 6f 6c 64 2e 2a 20 63 6f 6c 75 6d 6e 73  of old.* columns
210d0 20 72 65 66 65 72 65 6e 63 65 64 20 2a 2f 0a 20   referenced */. 
210e0 20 75 33 32 20 6e 65 77 6d 61 73 6b 3b 20 20 20   u32 newmask;   
210f0 20 20 20 20 20 20 2f 2a 20 4d 61 73 6b 20 6f 66        /* Mask of
21100 20 6e 65 77 2e 2a 20 63 6f 6c 75 6d 6e 73 20 72   new.* columns r
21110 65 66 65 72 65 6e 63 65 64 20 2a 2f 0a 20 20 75  eferenced */.  u
21120 38 20 65 54 72 69 67 67 65 72 4f 70 3b 20 20 20  8 eTriggerOp;   
21130 20 20 20 20 2f 2a 20 54 4b 5f 55 50 44 41 54 45      /* TK_UPDATE
21140 2c 20 54 4b 5f 49 4e 53 45 52 54 20 6f 72 20 54  , TK_INSERT or T
21150 4b 5f 44 45 4c 45 54 45 20 2a 2f 0a 20 20 75 38  K_DELETE */.  u8
21160 20 65 4f 72 63 6f 6e 66 3b 20 20 20 20 20 20 20   eOrconf;       
21170 20 20 20 2f 2a 20 44 65 66 61 75 6c 74 20 4f 4e     /* Default ON
21180 20 43 4f 4e 46 4c 49 43 54 20 70 6f 6c 69 63 79   CONFLICT policy
21190 20 66 6f 72 20 74 72 69 67 67 65 72 20 73 74 65   for trigger ste
211a0 70 73 20 2a 2f 0a 20 20 75 38 20 64 69 73 61 62  ps */.  u8 disab
211b0 6c 65 54 72 69 67 67 65 72 73 3b 20 20 2f 2a 20  leTriggers;  /* 
211c0 54 72 75 65 20 74 6f 20 64 69 73 61 62 6c 65 20  True to disable 
211d0 74 72 69 67 67 65 72 73 20 2a 2f 0a 0a 20 20 2f  triggers */..  /
211e0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
211f0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21200 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21210 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21220 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 20 20 2a 2a 20  **********.  ** 
21230 46 69 65 6c 64 73 20 61 62 6f 76 65 20 6d 75 73  Fields above mus
21240 74 20 62 65 20 69 6e 69 74 69 61 6c 69 7a 65 64  t be initialized
21250 20 74 6f 20 7a 65 72 6f 2e 20 20 54 68 65 20 66   to zero.  The f
21260 69 65 6c 64 73 20 74 68 61 74 20 66 6f 6c 6c 6f  ields that follo
21270 77 2c 0a 20 20 2a 2a 20 64 6f 77 6e 20 74 6f 20  w,.  ** down to 
21280 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 20 6f 66  the beginning of
21290 20 74 68 65 20 72 65 63 75 72 73 69 76 65 20 73   the recursive s
212a0 65 63 74 69 6f 6e 2c 20 64 6f 20 6e 6f 74 20 6e  ection, do not n
212b0 65 65 64 20 74 6f 20 62 65 0a 20 20 2a 2a 20 69  eed to be.  ** i
212c0 6e 69 74 69 61 6c 69 7a 65 64 20 61 73 20 74 68  nitialized as th
212d0 65 79 20 77 69 6c 6c 20 62 65 20 73 65 74 20 62  ey will be set b
212e0 65 66 6f 72 65 20 62 65 69 6e 67 20 75 73 65 64  efore being used
212f0 2e 20 20 54 68 65 20 62 6f 75 6e 64 61 72 79 20  .  The boundary 
21300 69 73 0a 20 20 2a 2a 20 64 65 74 65 72 6d 69 6e  is.  ** determin
21310 65 64 20 62 79 20 6f 66 66 73 65 74 6f 66 28 50  ed by offsetof(P
21320 61 72 73 65 2c 61 54 65 6d 70 52 65 67 29 2e 0a  arse,aTempReg)..
21330 20 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a    **************
21340 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21350 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21360 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21370 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 20  ************/.. 
21380 20 69 6e 74 20 61 54 65 6d 70 52 65 67 5b 38 5d   int aTempReg[8]
21390 3b 20 20 20 20 20 20 20 20 2f 2a 20 48 6f 6c 64  ;        /* Hold
213a0 69 6e 67 20 61 72 65 61 20 66 6f 72 20 74 65 6d  ing area for tem
213b0 70 6f 72 61 72 79 20 72 65 67 69 73 74 65 72 73  porary registers
213c0 20 2a 2f 0a 20 20 54 6f 6b 65 6e 20 73 4e 61 6d   */.  Token sNam
213d0 65 54 6f 6b 65 6e 3b 20 20 20 20 20 20 20 2f 2a  eToken;       /*
213e0 20 54 6f 6b 65 6e 20 77 69 74 68 20 75 6e 71 75   Token with unqu
213f0 61 6c 69 66 69 65 64 20 73 63 68 65 6d 61 20 6f  alified schema o
21400 62 6a 65 63 74 20 6e 61 6d 65 20 2a 2f 0a 0a 20  bject name */.. 
21410 20 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a   /**************
21420 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21430 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21440 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21450 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 20 20 2a 2a 20  **********.  ** 
21460 41 62 6f 76 65 20 69 73 20 63 6f 6e 73 74 61 6e  Above is constan
21470 74 20 62 65 74 77 65 65 6e 20 72 65 63 75 72 73  t between recurs
21480 69 6f 6e 73 2e 20 20 42 65 6c 6f 77 20 69 73 20  ions.  Below is 
21490 72 65 73 65 74 20 62 65 66 6f 72 65 20 61 6e 64  reset before and
214a0 20 61 66 74 65 72 0a 20 20 2a 2a 20 65 61 63 68   after.  ** each
214b0 20 72 65 63 75 72 73 69 6f 6e 2e 20 20 54 68 65   recursion.  The
214c0 20 62 6f 75 6e 64 61 72 79 20 62 65 74 77 65 65   boundary betwee
214d0 6e 20 74 68 65 73 65 20 74 77 6f 20 72 65 67 69  n these two regi
214e0 6f 6e 73 20 69 73 20 64 65 74 65 72 6d 69 6e 65  ons is determine
214f0 64 0a 20 20 2a 2a 20 75 73 69 6e 67 20 6f 66 66  d.  ** using off
21500 73 65 74 6f 66 28 50 61 72 73 65 2c 73 4c 61 73  setof(Parse,sLas
21510 74 54 6f 6b 65 6e 29 20 73 6f 20 74 68 65 20 73  tToken) so the s
21520 4c 61 73 74 54 6f 6b 65 6e 20 66 69 65 6c 64 20  LastToken field 
21530 6d 75 73 74 20 62 65 20 74 68 65 0a 20 20 2a 2a  must be the.  **
21540 20 66 69 72 73 74 20 66 69 65 6c 64 20 69 6e 20   first field in 
21550 74 68 65 20 72 65 63 75 72 73 69 76 65 20 72 65  the recursive re
21560 67 69 6f 6e 2e 0a 20 20 2a 2a 2a 2a 2a 2a 2a 2a  gion..  ********
21570 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21580 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21590 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
215a0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
215b0 2f 0a 0a 20 20 54 6f 6b 65 6e 20 73 4c 61 73 74  /..  Token sLast
215c0 54 6f 6b 65 6e 3b 20 20 20 20 20 20 20 2f 2a 20  Token;       /* 
215d0 54 68 65 20 6c 61 73 74 20 74 6f 6b 65 6e 20 70  The last token p
215e0 61 72 73 65 64 20 2a 2f 0a 20 20 79 6e 56 61 72  arsed */.  ynVar
215f0 20 6e 56 61 72 3b 20 20 20 20 20 20 20 20 20 20   nVar;          
21600 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
21610 66 20 27 3f 27 20 76 61 72 69 61 62 6c 65 73 20  f '?' variables 
21620 73 65 65 6e 20 69 6e 20 74 68 65 20 53 51 4c 20  seen in the SQL 
21630 73 6f 20 66 61 72 20 2a 2f 0a 20 20 75 38 20 69  so far */.  u8 i
21640 50 6b 53 6f 72 74 4f 72 64 65 72 3b 20 20 20 20  PkSortOrder;    
21650 20 20 20 20 20 20 2f 2a 20 41 53 43 20 6f 72 20        /* ASC or 
21660 44 45 53 43 20 66 6f 72 20 49 4e 54 45 47 45 52  DESC for INTEGER
21670 20 50 52 49 4d 41 52 59 20 4b 45 59 20 2a 2f 0a   PRIMARY KEY */.
21680 20 20 75 38 20 65 78 70 6c 61 69 6e 3b 20 20 20    u8 explain;   
21690 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
216a0 72 75 65 20 69 66 20 74 68 65 20 45 58 50 4c 41  rue if the EXPLA
216b0 49 4e 20 66 6c 61 67 20 69 73 20 66 6f 75 6e 64  IN flag is found
216c0 20 6f 6e 20 74 68 65 20 71 75 65 72 79 20 2a 2f   on the query */
216d0 0a 23 69 66 20 21 28 64 65 66 69 6e 65 64 28 53  .#if !(defined(S
216e0 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
216f0 41 4c 54 41 42 4c 45 29 20 26 26 20 64 65 66 69  ALTABLE) && defi
21700 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ned(SQLITE_OMIT_
21710 41 4c 54 45 52 54 41 42 4c 45 29 29 0a 20 20 75  ALTERTABLE)).  u
21720 38 20 65 50 61 72 73 65 4d 6f 64 65 3b 20 20 20  8 eParseMode;   
21730 20 20 20 20 20 20 20 20 20 2f 2a 20 50 41 52 53           /* PARS
21740 45 5f 4d 4f 44 45 5f 58 58 58 20 63 6f 6e 73 74  E_MODE_XXX const
21750 61 6e 74 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 69  ant */.#endif.#i
21760 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
21770 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 20  T_VIRTUALTABLE. 
21780 20 69 6e 74 20 6e 56 74 61 62 4c 6f 63 6b 3b 20   int nVtabLock; 
21790 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
217a0 6d 62 65 72 20 6f 66 20 76 69 72 74 75 61 6c 20  mber of virtual 
217b0 74 61 62 6c 65 73 20 74 6f 20 6c 6f 63 6b 20 2a  tables to lock *
217c0 2f 0a 23 65 6e 64 69 66 0a 20 20 69 6e 74 20 6e  /.#endif.  int n
217d0 48 65 69 67 68 74 3b 20 20 20 20 20 20 20 20 20  Height;         
217e0 20 20 20 20 20 2f 2a 20 45 78 70 72 65 73 73 69       /* Expressi
217f0 6f 6e 20 74 72 65 65 20 68 65 69 67 68 74 20 6f  on tree height o
21800 66 20 63 75 72 72 65 6e 74 20 73 75 62 2d 73 65  f current sub-se
21810 6c 65 63 74 20 2a 2f 0a 23 69 66 6e 64 65 66 20  lect */.#ifndef 
21820 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 45 58 50 4c  SQLITE_OMIT_EXPL
21830 41 49 4e 0a 20 20 69 6e 74 20 61 64 64 72 45 78  AIN.  int addrEx
21840 70 6c 61 69 6e 3b 20 20 20 20 20 20 20 20 20 20  plain;          
21850 2f 2a 20 41 64 64 72 65 73 73 20 6f 66 20 63 75  /* Address of cu
21860 72 72 65 6e 74 20 4f 50 5f 45 78 70 6c 61 69 6e  rrent OP_Explain
21870 20 6f 70 63 6f 64 65 20 2a 2f 0a 23 65 6e 64 69   opcode */.#endi
21880 66 0a 20 20 56 4c 69 73 74 20 2a 70 56 4c 69 73  f.  VList *pVLis
21890 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  t;            /*
218a0 20 4d 61 70 70 69 6e 67 20 62 65 74 77 65 65 6e   Mapping between
218b0 20 76 61 72 69 61 62 6c 65 20 6e 61 6d 65 73 20   variable names 
218c0 61 6e 64 20 6e 75 6d 62 65 72 73 20 2a 2f 0a 20  and numbers */. 
218d0 20 56 64 62 65 20 2a 70 52 65 70 72 65 70 61 72   Vdbe *pReprepar
218e0 65 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 56 4d  e;         /* VM
218f0 20 62 65 69 6e 67 20 72 65 70 72 65 70 61 72 65   being reprepare
21900 64 20 28 73 71 6c 69 74 65 33 52 65 70 72 65 70  d (sqlite3Reprep
21910 61 72 65 28 29 29 20 2a 2f 0a 20 20 63 6f 6e 73  are()) */.  cons
21920 74 20 63 68 61 72 20 2a 7a 54 61 69 6c 3b 20 20  t char *zTail;  
21930 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20 53 51 4c        /* All SQL
21940 20 74 65 78 74 20 70 61 73 74 20 74 68 65 20 6c   text past the l
21950 61 73 74 20 73 65 6d 69 63 6f 6c 6f 6e 20 70 61  ast semicolon pa
21960 72 73 65 64 20 2a 2f 0a 20 20 54 61 62 6c 65 20  rsed */.  Table 
21970 2a 70 4e 65 77 54 61 62 6c 65 3b 20 20 20 20 20  *pNewTable;     
21980 20 20 20 20 2f 2a 20 41 20 74 61 62 6c 65 20 62      /* A table b
21990 65 69 6e 67 20 63 6f 6e 73 74 72 75 63 74 65 64  eing constructed
219a0 20 62 79 20 43 52 45 41 54 45 20 54 41 42 4c 45   by CREATE TABLE
219b0 20 2a 2f 0a 20 20 49 6e 64 65 78 20 2a 70 4e 65   */.  Index *pNe
219c0 77 49 6e 64 65 78 3b 20 20 20 20 20 20 20 20 20  wIndex;         
219d0 2f 2a 20 41 6e 20 69 6e 64 65 78 20 62 65 69 6e  /* An index bein
219e0 67 20 63 6f 6e 73 74 72 75 63 74 65 64 20 62 79  g constructed by
219f0 20 43 52 45 41 54 45 20 49 4e 44 45 58 20 2a 2f   CREATE INDEX */
21a00 0a 20 20 54 72 69 67 67 65 72 20 2a 70 4e 65 77  .  Trigger *pNew
21a10 54 72 69 67 67 65 72 3b 20 20 20 20 20 2f 2a 20  Trigger;     /* 
21a20 54 72 69 67 67 65 72 20 75 6e 64 65 72 20 63 6f  Trigger under co
21a30 6e 73 74 72 75 63 74 20 62 79 20 61 20 43 52 45  nstruct by a CRE
21a40 41 54 45 20 54 52 49 47 47 45 52 20 2a 2f 0a 20  ATE TRIGGER */. 
21a50 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 41 75   const char *zAu
21a60 74 68 43 6f 6e 74 65 78 74 3b 20 2f 2a 20 54 68  thContext; /* Th
21a70 65 20 36 74 68 20 70 61 72 61 6d 65 74 65 72 20  e 6th parameter 
21a80 74 6f 20 64 62 2d 3e 78 41 75 74 68 20 63 61 6c  to db->xAuth cal
21a90 6c 62 61 63 6b 73 20 2a 2f 0a 23 69 66 6e 64 65  lbacks */.#ifnde
21aa0 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  f SQLITE_OMIT_VI
21ab0 52 54 55 41 4c 54 41 42 4c 45 0a 20 20 54 6f 6b  RTUALTABLE.  Tok
21ac0 65 6e 20 73 41 72 67 3b 20 20 20 20 20 20 20 20  en sArg;        
21ad0 20 20 20 20 20 20 20 2f 2a 20 43 6f 6d 70 6c 65         /* Comple
21ae0 74 65 20 74 65 78 74 20 6f 66 20 61 20 6d 6f 64  te text of a mod
21af0 75 6c 65 20 61 72 67 75 6d 65 6e 74 20 2a 2f 0a  ule argument */.
21b00 20 20 54 61 62 6c 65 20 2a 2a 61 70 56 74 61 62    Table **apVtab
21b10 4c 6f 63 6b 3b 20 20 20 20 20 20 20 2f 2a 20 50  Lock;       /* P
21b20 6f 69 6e 74 65 72 20 74 6f 20 76 69 72 74 75 61  ointer to virtua
21b30 6c 20 74 61 62 6c 65 73 20 6e 65 65 64 69 6e 67  l tables needing
21b40 20 6c 6f 63 6b 69 6e 67 20 2a 2f 0a 23 65 6e 64   locking */.#end
21b50 69 66 0a 20 20 54 61 62 6c 65 20 2a 70 5a 6f 6d  if.  Table *pZom
21b60 62 69 65 54 61 62 3b 20 20 20 20 20 20 20 20 2f  bieTab;        /
21b70 2a 20 4c 69 73 74 20 6f 66 20 54 61 62 6c 65 20  * List of Table 
21b80 6f 62 6a 65 63 74 73 20 74 6f 20 64 65 6c 65 74  objects to delet
21b90 65 20 61 66 74 65 72 20 63 6f 64 65 20 67 65 6e  e after code gen
21ba0 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 50 72 67   */.  TriggerPrg
21bb0 20 2a 70 54 72 69 67 67 65 72 50 72 67 3b 20 20   *pTriggerPrg;  
21bc0 2f 2a 20 4c 69 6e 6b 65 64 20 6c 69 73 74 20 6f  /* Linked list o
21bd0 66 20 63 6f 64 65 64 20 74 72 69 67 67 65 72 73  f coded triggers
21be0 20 2a 2f 0a 20 20 57 69 74 68 20 2a 70 57 69 74   */.  With *pWit
21bf0 68 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  h;              
21c00 2f 2a 20 43 75 72 72 65 6e 74 20 57 49 54 48 20  /* Current WITH 
21c10 63 6c 61 75 73 65 2c 20 6f 72 20 4e 55 4c 4c 20  clause, or NULL 
21c20 2a 2f 0a 20 20 57 69 74 68 20 2a 70 57 69 74 68  */.  With *pWith
21c30 54 6f 46 72 65 65 3b 20 20 20 20 20 20 20 20 2f  ToFree;        /
21c40 2a 20 46 72 65 65 20 74 68 69 73 20 57 49 54 48  * Free this WITH
21c50 20 6f 62 6a 65 63 74 20 61 74 20 74 68 65 20 65   object at the e
21c60 6e 64 20 6f 66 20 74 68 65 20 70 61 72 73 65 20  nd of the parse 
21c70 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  */.#ifndef SQLIT
21c80 45 5f 4f 4d 49 54 5f 41 4c 54 45 52 54 41 42 4c  E_OMIT_ALTERTABL
21c90 45 0a 20 20 52 65 6e 61 6d 65 54 6f 6b 65 6e 20  E.  RenameToken 
21ca0 2a 70 52 65 6e 61 6d 65 3b 20 20 20 20 20 2f 2a  *pRename;     /*
21cb0 20 54 6f 6b 65 6e 73 20 73 75 62 6a 65 63 74 20   Tokens subject 
21cc0 74 6f 20 72 65 6e 61 6d 69 6e 67 20 62 79 20 41  to renaming by A
21cd0 4c 54 45 52 20 54 41 42 4c 45 20 2a 2f 0a 23 65  LTER TABLE */.#e
21ce0 6e 64 69 66 0a 7d 3b 0a 0a 23 64 65 66 69 6e 65  ndif.};..#define
21cf0 20 50 41 52 53 45 5f 4d 4f 44 45 5f 4e 4f 52 4d   PARSE_MODE_NORM
21d00 41 4c 20 20 20 20 20 20 20 20 30 0a 23 64 65 66  AL        0.#def
21d10 69 6e 65 20 50 41 52 53 45 5f 4d 4f 44 45 5f 44  ine PARSE_MODE_D
21d20 45 43 4c 41 52 45 5f 56 54 41 42 20 20 31 0a 23  ECLARE_VTAB  1.#
21d30 64 65 66 69 6e 65 20 50 41 52 53 45 5f 4d 4f 44  define PARSE_MOD
21d40 45 5f 52 45 4e 41 4d 45 5f 43 4f 4c 55 4d 4e 20  E_RENAME_COLUMN 
21d50 32 0a 23 64 65 66 69 6e 65 20 50 41 52 53 45 5f  2.#define PARSE_
21d60 4d 4f 44 45 5f 52 45 4e 41 4d 45 5f 54 41 42 4c  MODE_RENAME_TABL
21d70 45 20 20 33 0a 0a 2f 2a 0a 2a 2a 20 53 69 7a 65  E  3../*.** Size
21d80 73 20 61 6e 64 20 70 6f 69 6e 74 65 72 73 20 6f  s and pointers o
21d90 66 20 76 61 72 69 6f 75 73 20 70 61 72 74 73 20  f various parts 
21da0 6f 66 20 74 68 65 20 50 61 72 73 65 20 6f 62 6a  of the Parse obj
21db0 65 63 74 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ect..*/.#define 
21dc0 50 41 52 53 45 5f 48 44 52 5f 53 5a 20 6f 66 66  PARSE_HDR_SZ off
21dd0 73 65 74 6f 66 28 50 61 72 73 65 2c 61 54 65 6d  setof(Parse,aTem
21de0 70 52 65 67 29 20 2f 2a 20 52 65 63 75 72 73 69  pReg) /* Recursi
21df0 76 65 20 70 61 72 74 20 77 2f 6f 20 61 43 6f 6c  ve part w/o aCol
21e00 43 61 63 68 65 2a 2f 0a 23 64 65 66 69 6e 65 20  Cache*/.#define 
21e10 50 41 52 53 45 5f 52 45 43 55 52 53 45 5f 53 5a  PARSE_RECURSE_SZ
21e20 20 6f 66 66 73 65 74 6f 66 28 50 61 72 73 65 2c   offsetof(Parse,
21e30 73 4c 61 73 74 54 6f 6b 65 6e 29 20 20 20 20 2f  sLastToken)    /
21e40 2a 20 52 65 63 75 72 73 69 76 65 20 70 61 72 74  * Recursive part
21e50 20 2a 2f 0a 23 64 65 66 69 6e 65 20 50 41 52 53   */.#define PARS
21e60 45 5f 54 41 49 4c 5f 53 5a 20 28 73 69 7a 65 6f  E_TAIL_SZ (sizeo
21e70 66 28 50 61 72 73 65 29 2d 50 41 52 53 45 5f 52  f(Parse)-PARSE_R
21e80 45 43 55 52 53 45 5f 53 5a 29 20 2f 2a 20 4e 6f  ECURSE_SZ) /* No
21e90 6e 2d 72 65 63 75 72 73 69 76 65 20 70 61 72 74  n-recursive part
21ea0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 50 41 52 53   */.#define PARS
21eb0 45 5f 54 41 49 4c 28 58 29 20 28 28 28 63 68 61  E_TAIL(X) (((cha
21ec0 72 2a 29 28 58 29 29 2b 50 41 52 53 45 5f 52 45  r*)(X))+PARSE_RE
21ed0 43 55 52 53 45 5f 53 5a 29 20 20 2f 2a 20 50 6f  CURSE_SZ)  /* Po
21ee0 69 6e 74 65 72 20 74 6f 20 74 61 69 6c 20 2a 2f  inter to tail */
21ef0 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74  ../*.** Return t
21f00 72 75 65 20 69 66 20 63 75 72 72 65 6e 74 6c 79  rue if currently
21f10 20 69 6e 73 69 64 65 20 61 6e 20 73 71 6c 69 74   inside an sqlit
21f20 65 33 5f 64 65 63 6c 61 72 65 5f 76 74 61 62 28  e3_declare_vtab(
21f30 29 20 63 61 6c 6c 2e 0a 2a 2f 0a 23 69 66 64 65  ) call..*/.#ifde
21f40 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  f SQLITE_OMIT_VI
21f50 52 54 55 41 4c 54 41 42 4c 45 0a 20 20 23 64 65  RTUALTABLE.  #de
21f60 66 69 6e 65 20 49 4e 5f 44 45 43 4c 41 52 45 5f  fine IN_DECLARE_
21f70 56 54 41 42 20 30 0a 23 65 6c 73 65 0a 20 20 23  VTAB 0.#else.  #
21f80 64 65 66 69 6e 65 20 49 4e 5f 44 45 43 4c 41 52  define IN_DECLAR
21f90 45 5f 56 54 41 42 20 28 70 50 61 72 73 65 2d 3e  E_VTAB (pParse->
21fa0 65 50 61 72 73 65 4d 6f 64 65 3d 3d 50 41 52 53  eParseMode==PARS
21fb0 45 5f 4d 4f 44 45 5f 44 45 43 4c 41 52 45 5f 56  E_MODE_DECLARE_V
21fc0 54 41 42 29 0a 23 65 6e 64 69 66 0a 0a 23 69 66  TAB).#endif..#if
21fd0 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
21fe0 4f 4d 49 54 5f 41 4c 54 45 52 54 41 42 4c 45 29  OMIT_ALTERTABLE)
21ff0 0a 20 20 23 64 65 66 69 6e 65 20 49 4e 5f 52 45  .  #define IN_RE
22000 4e 41 4d 45 5f 4f 42 4a 45 43 54 20 30 0a 23 65  NAME_OBJECT 0.#e
22010 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20 49 4e  lse.  #define IN
22020 5f 52 45 4e 41 4d 45 5f 4f 42 4a 45 43 54 20 28  _RENAME_OBJECT (
22030 70 50 61 72 73 65 2d 3e 65 50 61 72 73 65 4d 6f  pParse->eParseMo
22040 64 65 3e 3d 50 41 52 53 45 5f 4d 4f 44 45 5f 52  de>=PARSE_MODE_R
22050 45 4e 41 4d 45 5f 43 4f 4c 55 4d 4e 29 0a 23 65  ENAME_COLUMN).#e
22060 6e 64 69 66 0a 0a 23 69 66 20 64 65 66 69 6e 65  ndif..#if define
22070 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  d(SQLITE_OMIT_VI
22080 52 54 55 41 4c 54 41 42 4c 45 29 20 26 26 20 64  RTUALTABLE) && d
22090 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d  efined(SQLITE_OM
220a0 49 54 5f 41 4c 54 45 52 54 41 42 4c 45 29 0a 20  IT_ALTERTABLE). 
220b0 20 23 64 65 66 69 6e 65 20 49 4e 5f 53 50 45 43   #define IN_SPEC
220c0 49 41 4c 5f 50 41 52 53 45 20 30 0a 23 65 6c 73  IAL_PARSE 0.#els
220d0 65 0a 20 20 23 64 65 66 69 6e 65 20 49 4e 5f 53  e.  #define IN_S
220e0 50 45 43 49 41 4c 5f 50 41 52 53 45 20 28 70 50  PECIAL_PARSE (pP
220f0 61 72 73 65 2d 3e 65 50 61 72 73 65 4d 6f 64 65  arse->eParseMode
22100 21 3d 50 41 52 53 45 5f 4d 4f 44 45 5f 4e 4f 52  !=PARSE_MODE_NOR
22110 4d 41 4c 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  MAL).#endif../*.
22120 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f  ** An instance o
22130 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  f the following 
22140 73 74 72 75 63 74 75 72 65 20 63 61 6e 20 62 65  structure can be
22150 20 64 65 63 6c 61 72 65 64 20 6f 6e 20 61 20 73   declared on a s
22160 74 61 63 6b 20 61 6e 64 20 75 73 65 64 0a 2a 2a  tack and used.**
22170 20 74 6f 20 73 61 76 65 20 74 68 65 20 50 61 72   to save the Par
22180 73 65 2e 7a 41 75 74 68 43 6f 6e 74 65 78 74 20  se.zAuthContext 
22190 76 61 6c 75 65 20 73 6f 20 74 68 61 74 20 69 74  value so that it
221a0 20 63 61 6e 20 62 65 20 72 65 73 74 6f 72 65 64   can be restored
221b0 20 6c 61 74 65 72 2e 0a 2a 2f 0a 73 74 72 75 63   later..*/.struc
221c0 74 20 41 75 74 68 43 6f 6e 74 65 78 74 20 7b 0a  t AuthContext {.
221d0 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 41    const char *zA
221e0 75 74 68 43 6f 6e 74 65 78 74 3b 20 20 20 2f 2a  uthContext;   /*
221f0 20 50 75 74 20 73 61 76 65 64 20 50 61 72 73 65   Put saved Parse
22200 2e 7a 41 75 74 68 43 6f 6e 74 65 78 74 20 68 65  .zAuthContext he
22210 72 65 20 2a 2f 0a 20 20 50 61 72 73 65 20 2a 70  re */.  Parse *p
22220 50 61 72 73 65 3b 20 20 20 20 20 20 20 20 20 20  Parse;          
22230 20 20 20 20 2f 2a 20 54 68 65 20 50 61 72 73 65      /* The Parse
22240 20 73 74 72 75 63 74 75 72 65 20 2a 2f 0a 7d 3b   structure */.};
22250 0a 0a 2f 2a 0a 2a 2a 20 42 69 74 66 69 65 6c 64  ../*.** Bitfield
22260 20 66 6c 61 67 73 20 66 6f 72 20 50 35 20 76 61   flags for P5 va
22270 6c 75 65 20 69 6e 20 76 61 72 69 6f 75 73 20 6f  lue in various o
22280 70 63 6f 64 65 73 2e 0a 2a 2a 0a 2a 2a 20 56 61  pcodes..**.** Va
22290 6c 75 65 20 63 6f 6e 73 74 72 61 69 6e 74 73 20  lue constraints 
222a0 28 65 6e 66 6f 72 63 65 64 20 76 69 61 20 61 73  (enforced via as
222b0 73 65 72 74 28 29 29 3a 0a 2a 2a 20 20 20 20 4f  sert()):.**    O
222c0 50 46 4c 41 47 5f 4c 45 4e 47 54 48 41 52 47 20  PFLAG_LENGTHARG 
222d0 20 20 20 3d 3d 20 53 51 4c 49 54 45 5f 46 55 4e     == SQLITE_FUN
222e0 43 5f 4c 45 4e 47 54 48 0a 2a 2a 20 20 20 20 4f  C_LENGTH.**    O
222f0 50 46 4c 41 47 5f 54 59 50 45 4f 46 41 52 47 20  PFLAG_TYPEOFARG 
22300 20 20 20 3d 3d 20 53 51 4c 49 54 45 5f 46 55 4e     == SQLITE_FUN
22310 43 5f 54 59 50 45 4f 46 0a 2a 2a 20 20 20 20 4f  C_TYPEOF.**    O
22320 50 46 4c 41 47 5f 42 55 4c 4b 43 53 52 20 20 20  PFLAG_BULKCSR   
22330 20 20 20 3d 3d 20 42 54 52 45 45 5f 42 55 4c 4b     == BTREE_BULK
22340 4c 4f 41 44 0a 2a 2a 20 20 20 20 4f 50 46 4c 41  LOAD.**    OPFLA
22350 47 5f 53 45 45 4b 45 51 20 20 20 20 20 20 20 3d  G_SEEKEQ       =
22360 3d 20 42 54 52 45 45 5f 53 45 45 4b 5f 45 51 0a  = BTREE_SEEK_EQ.
22370 2a 2a 20 20 20 20 4f 50 46 4c 41 47 5f 46 4f 52  **    OPFLAG_FOR
22380 44 45 4c 45 54 45 20 20 20 20 3d 3d 20 42 54 52  DELETE    == BTR
22390 45 45 5f 46 4f 52 44 45 4c 45 54 45 0a 2a 2a 20  EE_FORDELETE.** 
223a0 20 20 20 4f 50 46 4c 41 47 5f 53 41 56 45 50 4f     OPFLAG_SAVEPO
223b0 53 49 54 49 4f 4e 20 3d 3d 20 42 54 52 45 45 5f  SITION == BTREE_
223c0 53 41 56 45 50 4f 53 49 54 49 4f 4e 0a 2a 2a 20  SAVEPOSITION.** 
223d0 20 20 20 4f 50 46 4c 41 47 5f 41 55 58 44 45 4c     OPFLAG_AUXDEL
223e0 45 54 45 20 20 20 20 3d 3d 20 42 54 52 45 45 5f  ETE    == BTREE_
223f0 41 55 58 44 45 4c 45 54 45 0a 2a 2f 0a 23 64 65  AUXDELETE.*/.#de
22400 66 69 6e 65 20 4f 50 46 4c 41 47 5f 4e 43 48 41  fine OPFLAG_NCHA
22410 4e 47 45 20 20 20 20 20 20 20 30 78 30 31 20 20  NGE       0x01  
22420 20 20 2f 2a 20 4f 50 5f 49 6e 73 65 72 74 3a 20    /* OP_Insert: 
22430 53 65 74 20 74 6f 20 75 70 64 61 74 65 20 64 62  Set to update db
22440 2d 3e 6e 43 68 61 6e 67 65 20 2a 2f 0a 20 20 20  ->nChange */.   
22450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22470 20 20 2f 2a 20 41 6c 73 6f 20 75 73 65 64 20 69    /* Also used i
22480 6e 20 50 32 20 28 6e 6f 74 20 50 35 29 20 6f 66  n P2 (not P5) of
22490 20 4f 50 5f 44 65 6c 65 74 65 20 2a 2f 0a 23 64   OP_Delete */.#d
224a0 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 4e 4f 43  efine OPFLAG_NOC
224b0 48 4e 47 20 20 20 20 20 20 20 20 30 78 30 31 20  HNG        0x01 
224c0 20 20 20 2f 2a 20 4f 50 5f 56 43 6f 6c 75 6d 6e     /* OP_VColumn
224d0 20 6e 6f 63 68 61 6e 67 65 20 66 6f 72 20 55 50   nochange for UP
224e0 44 41 54 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20  DATE */.#define 
224f0 4f 50 46 4c 41 47 5f 45 50 48 45 4d 20 20 20 20  OPFLAG_EPHEM    
22500 20 20 20 20 20 30 78 30 31 20 20 20 20 2f 2a 20       0x01    /* 
22510 4f 50 5f 43 6f 6c 75 6d 6e 3a 20 45 70 68 65 6d  OP_Column: Ephem
22520 65 72 61 6c 20 6f 75 74 70 75 74 20 69 73 20 6f  eral output is o
22530 6b 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46  k */.#define OPF
22540 4c 41 47 5f 4c 41 53 54 52 4f 57 49 44 20 20 20  LAG_LASTROWID   
22550 20 20 30 78 32 30 20 20 20 20 2f 2a 20 53 65 74    0x20    /* Set
22560 20 74 6f 20 75 70 64 61 74 65 20 64 62 2d 3e 6c   to update db->l
22570 61 73 74 52 6f 77 69 64 20 2a 2f 0a 23 64 65 66  astRowid */.#def
22580 69 6e 65 20 4f 50 46 4c 41 47 5f 49 53 55 50 44  ine OPFLAG_ISUPD
22590 41 54 45 20 20 20 20 20 20 30 78 30 34 20 20 20  ATE      0x04   
225a0 20 2f 2a 20 54 68 69 73 20 4f 50 5f 49 6e 73 65   /* This OP_Inse
225b0 72 74 20 69 73 20 61 6e 20 73 71 6c 20 55 50 44  rt is an sql UPD
225c0 41 54 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  ATE */.#define O
225d0 50 46 4c 41 47 5f 41 50 50 45 4e 44 20 20 20 20  PFLAG_APPEND    
225e0 20 20 20 20 30 78 30 38 20 20 20 20 2f 2a 20 54      0x08    /* T
225f0 68 69 73 20 69 73 20 6c 69 6b 65 6c 79 20 74 6f  his is likely to
22600 20 62 65 20 61 6e 20 61 70 70 65 6e 64 20 2a 2f   be an append */
22610 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f  .#define OPFLAG_
22620 55 53 45 53 45 45 4b 52 45 53 55 4c 54 20 30 78  USESEEKRESULT 0x
22630 31 30 20 20 20 20 2f 2a 20 54 72 79 20 74 6f 20  10    /* Try to 
22640 61 76 6f 69 64 20 61 20 73 65 65 6b 20 69 6e 20  avoid a seek in 
22650 42 74 72 65 65 49 6e 73 65 72 74 28 29 20 2a 2f  BtreeInsert() */
22660 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f  .#define OPFLAG_
22670 49 53 4e 4f 4f 50 20 20 20 20 20 20 20 20 30 78  ISNOOP        0x
22680 34 30 20 20 20 20 2f 2a 20 4f 50 5f 44 65 6c 65  40    /* OP_Dele
22690 74 65 20 64 6f 65 73 20 70 72 65 2d 75 70 64 61  te does pre-upda
226a0 74 65 2d 68 6f 6f 6b 20 6f 6e 6c 79 20 2a 2f 0a  te-hook only */.
226b0 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 4c  #define OPFLAG_L
226c0 45 4e 47 54 48 41 52 47 20 20 20 20 20 30 78 34  ENGTHARG     0x4
226d0 30 20 20 20 20 2f 2a 20 4f 50 5f 43 6f 6c 75 6d  0    /* OP_Colum
226e0 6e 20 6f 6e 6c 79 20 75 73 65 64 20 66 6f 72 20  n only used for 
226f0 6c 65 6e 67 74 68 28 29 20 2a 2f 0a 23 64 65 66  length() */.#def
22700 69 6e 65 20 4f 50 46 4c 41 47 5f 54 59 50 45 4f  ine OPFLAG_TYPEO
22710 46 41 52 47 20 20 20 20 20 30 78 38 30 20 20 20  FARG     0x80   
22720 20 2f 2a 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 6e   /* OP_Column on
22730 6c 79 20 75 73 65 64 20 66 6f 72 20 74 79 70 65  ly used for type
22740 6f 66 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20  of() */.#define 
22750 4f 50 46 4c 41 47 5f 42 55 4c 4b 43 53 52 20 20  OPFLAG_BULKCSR  
22760 20 20 20 20 20 30 78 30 31 20 20 20 20 2f 2a 20       0x01    /* 
22770 4f 50 5f 4f 70 65 6e 2a 2a 20 75 73 65 64 20 74  OP_Open** used t
22780 6f 20 6f 70 65 6e 20 62 75 6c 6b 20 63 75 72 73  o open bulk curs
22790 6f 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50  or */.#define OP
227a0 46 4c 41 47 5f 53 45 45 4b 45 51 20 20 20 20 20  FLAG_SEEKEQ     
227b0 20 20 20 30 78 30 32 20 20 20 20 2f 2a 20 4f 50     0x02    /* OP
227c0 5f 4f 70 65 6e 2a 2a 20 63 75 72 73 6f 72 20 75  _Open** cursor u
227d0 73 65 73 20 45 51 20 73 65 65 6b 20 6f 6e 6c 79  ses EQ seek only
227e0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c   */.#define OPFL
227f0 41 47 5f 46 4f 52 44 45 4c 45 54 45 20 20 20 20  AG_FORDELETE    
22800 20 30 78 30 38 20 20 20 20 2f 2a 20 4f 50 5f 4f   0x08    /* OP_O
22810 70 65 6e 20 73 68 6f 75 6c 64 20 75 73 65 20 42  pen should use B
22820 54 52 45 45 5f 46 4f 52 44 45 4c 45 54 45 20 2a  TREE_FORDELETE *
22830 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47  /.#define OPFLAG
22840 5f 50 32 49 53 52 45 47 20 20 20 20 20 20 20 30  _P2ISREG       0
22850 78 31 30 20 20 20 20 2f 2a 20 50 32 20 74 6f 20  x10    /* P2 to 
22860 4f 50 5f 4f 70 65 6e 2a 2a 20 69 73 20 61 20 72  OP_Open** is a r
22870 65 67 69 73 74 65 72 20 6e 75 6d 62 65 72 20 2a  egister number *
22880 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47  /.#define OPFLAG
22890 5f 50 45 52 4d 55 54 45 20 20 20 20 20 20 20 30  _PERMUTE       0
228a0 78 30 31 20 20 20 20 2f 2a 20 4f 50 5f 43 6f 6d  x01    /* OP_Com
228b0 70 61 72 65 3a 20 75 73 65 20 74 68 65 20 70 65  pare: use the pe
228c0 72 6d 75 74 61 74 69 6f 6e 20 2a 2f 0a 23 64 65  rmutation */.#de
228d0 66 69 6e 65 20 4f 50 46 4c 41 47 5f 53 41 56 45  fine OPFLAG_SAVE
228e0 50 4f 53 49 54 49 4f 4e 20 20 30 78 30 32 20 20  POSITION  0x02  
228f0 20 20 2f 2a 20 4f 50 5f 44 65 6c 65 74 65 2f 49    /* OP_Delete/I
22900 6e 73 65 72 74 3a 20 73 61 76 65 20 63 75 72 73  nsert: save curs
22910 6f 72 20 70 6f 73 20 2a 2f 0a 23 64 65 66 69 6e  or pos */.#defin
22920 65 20 4f 50 46 4c 41 47 5f 41 55 58 44 45 4c 45  e OPFLAG_AUXDELE
22930 54 45 20 20 20 20 20 30 78 30 34 20 20 20 20 2f  TE     0x04    /
22940 2a 20 4f 50 5f 44 65 6c 65 74 65 3a 20 69 6e 64  * OP_Delete: ind
22950 65 78 20 69 6e 20 61 20 44 45 4c 45 54 45 20 6f  ex in a DELETE o
22960 70 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46  p */.#define OPF
22970 4c 41 47 5f 4e 4f 43 48 4e 47 5f 4d 41 47 49 43  LAG_NOCHNG_MAGIC
22980 20 20 30 78 36 64 20 20 20 20 2f 2a 20 4f 50 5f    0x6d    /* OP_
22990 4d 61 6b 65 52 65 63 6f 72 64 3a 20 73 65 72 69  MakeRecord: seri
229a0 61 6c 74 79 70 65 20 31 30 20 69 73 20 6f 6b 20  altype 10 is ok 
229b0 2a 2f 0a 0a 2f 2a 0a 20 2a 20 45 61 63 68 20 74  */../*. * Each t
229c0 72 69 67 67 65 72 20 70 72 65 73 65 6e 74 20 69  rigger present i
229d0 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20 73  n the database s
229e0 63 68 65 6d 61 20 69 73 20 73 74 6f 72 65 64 20  chema is stored 
229f0 61 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f  as an instance o
22a00 66 0a 20 2a 20 73 74 72 75 63 74 20 54 72 69 67  f. * struct Trig
22a10 67 65 72 2e 0a 20 2a 0a 20 2a 20 50 6f 69 6e 74  ger.. *. * Point
22a20 65 72 73 20 74 6f 20 69 6e 73 74 61 6e 63 65 73  ers to instances
22a30 20 6f 66 20 73 74 72 75 63 74 20 54 72 69 67 67   of struct Trigg
22a40 65 72 20 61 72 65 20 73 74 6f 72 65 64 20 69 6e  er are stored in
22a50 20 74 77 6f 20 77 61 79 73 2e 0a 20 2a 20 31 2e   two ways.. * 1.
22a60 20 49 6e 20 74 68 65 20 22 74 72 69 67 48 61 73   In the "trigHas
22a70 68 22 20 68 61 73 68 20 74 61 62 6c 65 20 28 70  h" hash table (p
22a80 61 72 74 20 6f 66 20 74 68 65 20 73 71 6c 69 74  art of the sqlit
22a90 65 33 2a 20 74 68 61 74 20 72 65 70 72 65 73 65  e3* that represe
22aa0 6e 74 73 20 74 68 65 0a 20 2a 20 20 20 20 64 61  nts the. *    da
22ab0 74 61 62 61 73 65 29 2e 20 54 68 69 73 20 61 6c  tabase). This al
22ac0 6c 6f 77 73 20 54 72 69 67 67 65 72 20 73 74 72  lows Trigger str
22ad0 75 63 74 75 72 65 73 20 74 6f 20 62 65 20 72 65  uctures to be re
22ae0 74 72 69 65 76 65 64 20 62 79 20 6e 61 6d 65 2e  trieved by name.
22af0 0a 20 2a 20 32 2e 20 41 6c 6c 20 74 72 69 67 67  . * 2. All trigg
22b00 65 72 73 20 61 73 73 6f 63 69 61 74 65 64 20 77  ers associated w
22b10 69 74 68 20 61 20 73 69 6e 67 6c 65 20 74 61 62  ith a single tab
22b20 6c 65 20 66 6f 72 6d 20 61 20 6c 69 6e 6b 65 64  le form a linked
22b30 20 6c 69 73 74 2c 20 75 73 69 6e 67 20 74 68 65   list, using the
22b40 0a 20 2a 20 20 20 20 70 4e 65 78 74 20 6d 65 6d  . *    pNext mem
22b50 62 65 72 20 6f 66 20 73 74 72 75 63 74 20 54 72  ber of struct Tr
22b60 69 67 67 65 72 2e 20 41 20 70 6f 69 6e 74 65 72  igger. A pointer
22b70 20 74 6f 20 74 68 65 20 66 69 72 73 74 20 65 6c   to the first el
22b80 65 6d 65 6e 74 20 6f 66 20 74 68 65 0a 20 2a 20  ement of the. * 
22b90 20 20 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 69     linked list i
22ba0 73 20 73 74 6f 72 65 64 20 61 73 20 74 68 65 20  s stored as the 
22bb0 22 70 54 72 69 67 67 65 72 22 20 6d 65 6d 62 65  "pTrigger" membe
22bc0 72 20 6f 66 20 74 68 65 20 61 73 73 6f 63 69 61  r of the associa
22bd0 74 65 64 0a 20 2a 20 20 20 20 73 74 72 75 63 74  ted. *    struct
22be0 20 54 61 62 6c 65 2e 0a 20 2a 0a 20 2a 20 54 68   Table.. *. * Th
22bf0 65 20 22 73 74 65 70 5f 6c 69 73 74 22 20 6d 65  e "step_list" me
22c00 6d 62 65 72 20 70 6f 69 6e 74 73 20 74 6f 20 74  mber points to t
22c10 68 65 20 66 69 72 73 74 20 65 6c 65 6d 65 6e 74  he first element
22c20 20 6f 66 20 61 20 6c 69 6e 6b 65 64 20 6c 69 73   of a linked lis
22c30 74 0a 20 2a 20 63 6f 6e 74 61 69 6e 69 6e 67 20  t. * containing 
22c40 74 68 65 20 53 51 4c 20 73 74 61 74 65 6d 65 6e  the SQL statemen
22c50 74 73 20 73 70 65 63 69 66 69 65 64 20 61 73 20  ts specified as 
22c60 74 68 65 20 74 72 69 67 67 65 72 20 70 72 6f 67  the trigger prog
22c70 72 61 6d 2e 0a 20 2a 2f 0a 73 74 72 75 63 74 20  ram.. */.struct 
22c80 54 72 69 67 67 65 72 20 7b 0a 20 20 63 68 61 72  Trigger {.  char
22c90 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20   *zName;        
22ca0 20 20 20 20 2f 2a 20 54 68 65 20 6e 61 6d 65 20      /* The name 
22cb0 6f 66 20 74 68 65 20 74 72 69 67 67 65 72 20 20  of the trigger  
22cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22cd0 20 20 20 20 20 20 2a 2f 0a 20 20 63 68 61 72 20        */.  char 
22ce0 2a 74 61 62 6c 65 3b 20 20 20 20 20 20 20 20 20  *table;         
22cf0 20 20 20 2f 2a 20 54 68 65 20 74 61 62 6c 65 20     /* The table 
22d00 6f 72 20 76 69 65 77 20 74 6f 20 77 68 69 63 68  or view to which
22d10 20 74 68 65 20 74 72 69 67 67 65 72 20 61 70 70   the trigger app
22d20 6c 69 65 73 20 2a 2f 0a 20 20 75 38 20 6f 70 3b  lies */.  u8 op;
22d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22d40 20 20 2f 2a 20 4f 6e 65 20 6f 66 20 54 4b 5f 44    /* One of TK_D
22d50 45 4c 45 54 45 2c 20 54 4b 5f 55 50 44 41 54 45  ELETE, TK_UPDATE
22d60 2c 20 54 4b 5f 49 4e 53 45 52 54 20 20 20 20 20  , TK_INSERT     
22d70 20 20 20 20 2a 2f 0a 20 20 75 38 20 74 72 5f 74      */.  u8 tr_t
22d80 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  m;              
22d90 20 2f 2a 20 4f 6e 65 20 6f 66 20 54 52 49 47 47   /* One of TRIGG
22da0 45 52 5f 42 45 46 4f 52 45 2c 20 54 52 49 47 47  ER_BEFORE, TRIGG
22db0 45 52 5f 41 46 54 45 52 20 2a 2f 0a 20 20 45 78  ER_AFTER */.  Ex
22dc0 70 72 20 2a 70 57 68 65 6e 3b 20 20 20 20 20 20  pr *pWhen;      
22dd0 20 20 20 20 20 20 2f 2a 20 54 68 65 20 57 48 45        /* The WHE
22de0 4e 20 63 6c 61 75 73 65 20 6f 66 20 74 68 65 20  N clause of the 
22df0 65 78 70 72 65 73 73 69 6f 6e 20 28 6d 61 79 20  expression (may 
22e00 62 65 20 4e 55 4c 4c 29 20 2a 2f 0a 20 20 49 64  be NULL) */.  Id
22e10 4c 69 73 74 20 2a 70 43 6f 6c 75 6d 6e 73 3b 20  List *pColumns; 
22e20 20 20 20 20 20 20 2f 2a 20 49 66 20 74 68 69 73        /* If this
22e30 20 69 73 20 61 6e 20 55 50 44 41 54 45 20 4f 46   is an UPDATE OF
22e40 20 3c 63 6f 6c 75 6d 6e 2d 6c 69 73 74 3e 20 74   <column-list> t
22e50 72 69 67 67 65 72 2c 0a 20 20 20 20 20 20 20 20  rigger,.        
22e60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22e70 20 20 20 20 20 74 68 65 20 3c 63 6f 6c 75 6d 6e       the <column
22e80 2d 6c 69 73 74 3e 20 69 73 20 73 74 6f 72 65 64  -list> is stored
22e90 20 68 65 72 65 20 2a 2f 0a 20 20 53 63 68 65 6d   here */.  Schem
22ea0 61 20 2a 70 53 63 68 65 6d 61 3b 20 20 20 20 20  a *pSchema;     
22eb0 20 20 20 2f 2a 20 53 63 68 65 6d 61 20 63 6f 6e     /* Schema con
22ec0 74 61 69 6e 69 6e 67 20 74 68 65 20 74 72 69 67  taining the trig
22ed0 67 65 72 20 2a 2f 0a 20 20 53 63 68 65 6d 61 20  ger */.  Schema 
22ee0 2a 70 54 61 62 53 63 68 65 6d 61 3b 20 20 20 20  *pTabSchema;    
22ef0 20 2f 2a 20 53 63 68 65 6d 61 20 63 6f 6e 74 61   /* Schema conta
22f00 69 6e 69 6e 67 20 74 68 65 20 74 61 62 6c 65 20  ining the table 
22f10 2a 2f 0a 20 20 54 72 69 67 67 65 72 53 74 65 70  */.  TriggerStep
22f20 20 2a 73 74 65 70 5f 6c 69 73 74 3b 20 2f 2a 20   *step_list; /* 
22f30 4c 69 6e 6b 20 6c 69 73 74 20 6f 66 20 74 72 69  Link list of tri
22f40 67 67 65 72 20 70 72 6f 67 72 61 6d 20 73 74 65  gger program ste
22f50 70 73 20 20 20 20 20 20 20 20 20 20 20 20 20 2a  ps             *
22f60 2f 0a 20 20 54 72 69 67 67 65 72 20 2a 70 4e 65  /.  Trigger *pNe
22f70 78 74 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e  xt;         /* N
22f80 65 78 74 20 74 72 69 67 67 65 72 20 61 73 73 6f  ext trigger asso
22f90 63 69 61 74 65 64 20 77 69 74 68 20 74 68 65 20  ciated with the 
22fa0 74 61 62 6c 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a  table */.};../*.
22fb0 2a 2a 20 41 20 74 72 69 67 67 65 72 20 69 73 20  ** A trigger is 
22fc0 65 69 74 68 65 72 20 61 20 42 45 46 4f 52 45 20  either a BEFORE 
22fd0 6f 72 20 61 6e 20 41 46 54 45 52 20 74 72 69 67  or an AFTER trig
22fe0 67 65 72 2e 20 20 54 68 65 20 66 6f 6c 6c 6f 77  ger.  The follow
22ff0 69 6e 67 20 63 6f 6e 73 74 61 6e 74 73 0a 2a 2a  ing constants.**
23000 20 64 65 74 65 72 6d 69 6e 65 20 77 68 69 63 68   determine which
23010 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 72 65  ..**.** If there
23020 20 61 72 65 20 6d 75 6c 74 69 70 6c 65 20 74 72   are multiple tr
23030 69 67 67 65 72 73 2c 20 79 6f 75 20 6d 69 67 68  iggers, you migh
23040 74 20 6f 66 20 73 6f 6d 65 20 42 45 46 4f 52 45  t of some BEFORE
23050 20 61 6e 64 20 73 6f 6d 65 20 41 46 54 45 52 2e   and some AFTER.
23060 0a 2a 2a 20 49 6e 20 74 68 61 74 20 63 61 73 65  .** In that case
23070 73 2c 20 74 68 65 20 63 6f 6e 73 74 61 6e 74 73  s, the constants
23080 20 62 65 6c 6f 77 20 63 61 6e 20 62 65 20 4f 52   below can be OR
23090 65 64 20 74 6f 67 65 74 68 65 72 2e 0a 2a 2f 0a  ed together..*/.
230a0 23 64 65 66 69 6e 65 20 54 52 49 47 47 45 52 5f  #define TRIGGER_
230b0 42 45 46 4f 52 45 20 20 31 0a 23 64 65 66 69 6e  BEFORE  1.#defin
230c0 65 20 54 52 49 47 47 45 52 5f 41 46 54 45 52 20  e TRIGGER_AFTER 
230d0 20 20 32 0a 0a 2f 2a 0a 20 2a 20 41 6e 20 69 6e    2../*. * An in
230e0 73 74 61 6e 63 65 20 6f 66 20 73 74 72 75 63 74  stance of struct
230f0 20 54 72 69 67 67 65 72 53 74 65 70 20 69 73 20   TriggerStep is 
23100 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20 61 20  used to store a 
23110 73 69 6e 67 6c 65 20 53 51 4c 20 73 74 61 74 65  single SQL state
23120 6d 65 6e 74 0a 20 2a 20 74 68 61 74 20 69 73 20  ment. * that is 
23130 61 20 70 61 72 74 20 6f 66 20 61 20 74 72 69 67  a part of a trig
23140 67 65 72 2d 70 72 6f 67 72 61 6d 2e 0a 20 2a 0a  ger-program.. *.
23150 20 2a 20 49 6e 73 74 61 6e 63 65 73 20 6f 66 20   * Instances of 
23160 73 74 72 75 63 74 20 54 72 69 67 67 65 72 53 74  struct TriggerSt
23170 65 70 20 61 72 65 20 73 74 6f 72 65 64 20 69 6e  ep are stored in
23180 20 61 20 73 69 6e 67 6c 79 20 6c 69 6e 6b 65 64   a singly linked
23190 20 6c 69 73 74 20 28 6c 69 6e 6b 65 64 0a 20 2a   list (linked. *
231a0 20 75 73 69 6e 67 20 74 68 65 20 22 70 4e 65 78   using the "pNex
231b0 74 22 20 6d 65 6d 62 65 72 29 20 72 65 66 65 72  t" member) refer
231c0 65 6e 63 65 64 20 62 79 20 74 68 65 20 22 73 74  enced by the "st
231d0 65 70 5f 6c 69 73 74 22 20 6d 65 6d 62 65 72 20  ep_list" member 
231e0 6f 66 20 74 68 65 0a 20 2a 20 61 73 73 6f 63 69  of the. * associ
231f0 61 74 65 64 20 73 74 72 75 63 74 20 54 72 69 67  ated struct Trig
23200 67 65 72 20 69 6e 73 74 61 6e 63 65 2e 20 54 68  ger instance. Th
23210 65 20 66 69 72 73 74 20 65 6c 65 6d 65 6e 74 20  e first element 
23220 6f 66 20 74 68 65 20 6c 69 6e 6b 65 64 20 6c 69  of the linked li
23230 73 74 20 69 73 0a 20 2a 20 74 68 65 20 66 69 72  st is. * the fir
23240 73 74 20 73 74 65 70 20 6f 66 20 74 68 65 20 74  st step of the t
23250 72 69 67 67 65 72 2d 70 72 6f 67 72 61 6d 2e 0a  rigger-program..
23260 20 2a 0a 20 2a 20 54 68 65 20 22 6f 70 22 20 6d   *. * The "op" m
23270 65 6d 62 65 72 20 69 6e 64 69 63 61 74 65 73 20  ember indicates 
23280 77 68 65 74 68 65 72 20 74 68 69 73 20 69 73 20  whether this is 
23290 61 20 22 44 45 4c 45 54 45 22 2c 20 22 49 4e 53  a "DELETE", "INS
232a0 45 52 54 22 2c 20 22 55 50 44 41 54 45 22 20 6f  ERT", "UPDATE" o
232b0 72 0a 20 2a 20 22 53 45 4c 45 43 54 22 20 73 74  r. * "SELECT" st
232c0 61 74 65 6d 65 6e 74 2e 20 54 68 65 20 6d 65 61  atement. The mea
232d0 6e 69 6e 67 73 20 6f 66 20 74 68 65 20 6f 74 68  nings of the oth
232e0 65 72 20 6d 65 6d 62 65 72 73 20 69 73 20 64 65  er members is de
232f0 74 65 72 6d 69 6e 65 64 20 62 79 20 74 68 65 0a  termined by the.
23300 20 2a 20 76 61 6c 75 65 20 6f 66 20 22 6f 70 22   * value of "op"
23310 20 61 73 20 66 6f 6c 6c 6f 77 73 3a 0a 20 2a 0a   as follows:. *.
23320 20 2a 20 28 6f 70 20 3d 3d 20 54 4b 5f 49 4e 53   * (op == TK_INS
23330 45 52 54 29 0a 20 2a 20 6f 72 63 6f 6e 66 20 20  ERT). * orconf  
23340 20 20 2d 3e 20 73 74 6f 72 65 73 20 74 68 65 20    -> stores the 
23350 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 61 6c 67 6f  ON CONFLICT algo
23360 72 69 74 68 6d 0a 20 2a 20 70 53 65 6c 65 63 74  rithm. * pSelect
23370 20 20 20 2d 3e 20 49 66 20 74 68 69 73 20 69 73     -> If this is
23380 20 61 6e 20 49 4e 53 45 52 54 20 49 4e 54 4f 20   an INSERT INTO 
23390 2e 2e 2e 20 53 45 4c 45 43 54 20 2e 2e 2e 20 73  ... SELECT ... s
233a0 74 61 74 65 6d 65 6e 74 2c 20 74 68 65 6e 0a 20  tatement, then. 
233b0 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74  *              t
233c0 68 69 73 20 73 74 6f 72 65 73 20 61 20 70 6f 69  his stores a poi
233d0 6e 74 65 72 20 74 6f 20 74 68 65 20 53 45 4c 45  nter to the SELE
233e0 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 20 4f 74  CT statement. Ot
233f0 68 65 72 77 69 73 65 20 4e 55 4c 4c 2e 0a 20 2a  herwise NULL.. *
23400 20 7a 54 61 72 67 65 74 20 20 20 2d 3e 20 44 65   zTarget   -> De
23410 71 75 6f 74 65 64 20 6e 61 6d 65 20 6f 66 20 74  quoted name of t
23420 68 65 20 74 61 62 6c 65 20 74 6f 20 69 6e 73 65  he table to inse
23430 72 74 20 69 6e 74 6f 2e 0a 20 2a 20 70 45 78 70  rt into.. * pExp
23440 72 4c 69 73 74 20 2d 3e 20 49 66 20 74 68 69 73  rList -> If this
23450 20 69 73 20 61 6e 20 49 4e 53 45 52 54 20 49 4e   is an INSERT IN
23460 54 4f 20 2e 2e 2e 20 56 41 4c 55 45 53 20 2e 2e  TO ... VALUES ..
23470 2e 20 73 74 61 74 65 6d 65 6e 74 2c 20 74 68 65  . statement, the
23480 6e 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20 20  n. *            
23490 20 20 74 68 69 73 20 73 74 6f 72 65 73 20 76 61    this stores va
234a0 6c 75 65 73 20 74 6f 20 62 65 20 69 6e 73 65 72  lues to be inser
234b0 74 65 64 2e 20 4f 74 68 65 72 77 69 73 65 20 4e  ted. Otherwise N
234c0 55 4c 4c 2e 0a 20 2a 20 70 49 64 4c 69 73 74 20  ULL.. * pIdList 
234d0 20 20 2d 3e 20 49 66 20 74 68 69 73 20 69 73 20    -> If this is 
234e0 61 6e 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 2e  an INSERT INTO .
234f0 2e 2e 20 28 3c 63 6f 6c 75 6d 6e 2d 6e 61 6d 65  .. (<column-name
23500 73 3e 29 20 56 41 4c 55 45 53 20 2e 2e 2e 0a 20  s>) VALUES .... 
23510 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73  *              s
23520 74 61 74 65 6d 65 6e 74 2c 20 74 68 65 6e 20 74  tatement, then t
23530 68 69 73 20 73 74 6f 72 65 73 20 74 68 65 20 63  his stores the c
23540 6f 6c 75 6d 6e 2d 6e 61 6d 65 73 20 74 6f 20 62  olumn-names to b
23550 65 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20 20  e. *            
23560 20 20 69 6e 73 65 72 74 65 64 20 69 6e 74 6f 2e    inserted into.
23570 0a 20 2a 0a 20 2a 20 28 6f 70 20 3d 3d 20 54 4b  . *. * (op == TK
23580 5f 44 45 4c 45 54 45 29 0a 20 2a 20 7a 54 61 72  _DELETE). * zTar
23590 67 65 74 20 20 20 2d 3e 20 44 65 71 75 6f 74 65  get   -> Dequote
235a0 64 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 61  d name of the ta
235b0 62 6c 65 20 74 6f 20 64 65 6c 65 74 65 20 66 72  ble to delete fr
235c0 6f 6d 2e 0a 20 2a 20 70 57 68 65 72 65 20 20 20  om.. * pWhere   
235d0 20 2d 3e 20 54 68 65 20 57 48 45 52 45 20 63 6c   -> The WHERE cl
235e0 61 75 73 65 20 6f 66 20 74 68 65 20 44 45 4c 45  ause of the DELE
235f0 54 45 20 73 74 61 74 65 6d 65 6e 74 20 69 66 20  TE statement if 
23600 6f 6e 65 20 69 73 20 73 70 65 63 69 66 69 65 64  one is specified
23610 2e 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20 20  .. *            
23620 20 20 4f 74 68 65 72 77 69 73 65 20 4e 55 4c 4c    Otherwise NULL
23630 2e 0a 20 2a 0a 20 2a 20 28 6f 70 20 3d 3d 20 54  .. *. * (op == T
23640 4b 5f 55 50 44 41 54 45 29 0a 20 2a 20 7a 54 61  K_UPDATE). * zTa
23650 72 67 65 74 20 20 20 2d 3e 20 44 65 71 75 6f 74  rget   -> Dequot
23660 65 64 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74  ed name of the t
23670 61 62 6c 65 20 74 6f 20 75 70 64 61 74 65 2e 0a  able to update..
23680 20 2a 20 70 57 68 65 72 65 20 20 20 20 2d 3e 20   * pWhere    -> 
23690 54 68 65 20 57 48 45 52 45 20 63 6c 61 75 73 65  The WHERE clause
236a0 20 6f 66 20 74 68 65 20 55 50 44 41 54 45 20 73   of the UPDATE s
236b0 74 61 74 65 6d 65 6e 74 20 69 66 20 6f 6e 65 20  tatement if one 
236c0 69 73 20 73 70 65 63 69 66 69 65 64 2e 0a 20 2a  is specified.. *
236d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4f 74                Ot
236e0 68 65 72 77 69 73 65 20 4e 55 4c 4c 2e 0a 20 2a  herwise NULL.. *
236f0 20 70 45 78 70 72 4c 69 73 74 20 2d 3e 20 41 20   pExprList -> A 
23700 6c 69 73 74 20 6f 66 20 74 68 65 20 63 6f 6c 75  list of the colu
23710 6d 6e 73 20 74 6f 20 75 70 64 61 74 65 20 61 6e  mns to update an
23720 64 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e  d the expression
23730 73 20 74 6f 20 75 70 64 61 74 65 0a 20 2a 20 20  s to update. *  
23740 20 20 20 20 20 20 20 20 20 20 20 20 74 68 65 6d              them
23750 20 74 6f 2e 20 53 65 65 20 73 71 6c 69 74 65 33   to. See sqlite3
23760 55 70 64 61 74 65 28 29 20 64 6f 63 75 6d 65 6e  Update() documen
23770 74 61 74 69 6f 6e 20 6f 66 20 22 70 43 68 61 6e  tation of "pChan
23780 67 65 73 22 0a 20 2a 20 20 20 20 20 20 20 20 20  ges". *         
23790 20 20 20 20 20 61 72 67 75 6d 65 6e 74 2e 0a 20       argument.. 
237a0 2a 0a 20 2a 2f 0a 73 74 72 75 63 74 20 54 72 69  *. */.struct Tri
237b0 67 67 65 72 53 74 65 70 20 7b 0a 20 20 75 38 20  ggerStep {.  u8 
237c0 6f 70 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  op;             
237d0 20 20 2f 2a 20 4f 6e 65 20 6f 66 20 54 4b 5f 44    /* One of TK_D
237e0 45 4c 45 54 45 2c 20 54 4b 5f 55 50 44 41 54 45  ELETE, TK_UPDATE
237f0 2c 20 54 4b 5f 49 4e 53 45 52 54 2c 20 54 4b 5f  , TK_INSERT, TK_
23800 53 45 4c 45 43 54 20 2a 2f 0a 20 20 75 38 20 6f  SELECT */.  u8 o
23810 72 63 6f 6e 66 3b 20 20 20 20 20 20 20 20 20 20  rconf;          
23820 20 2f 2a 20 4f 45 5f 52 6f 6c 6c 62 61 63 6b 20   /* OE_Rollback 
23830 65 74 63 2e 20 2a 2f 0a 20 20 54 72 69 67 67 65  etc. */.  Trigge
23840 72 20 2a 70 54 72 69 67 3b 20 20 20 20 20 20 2f  r *pTrig;      /
23850 2a 20 54 68 65 20 74 72 69 67 67 65 72 20 74 68  * The trigger th
23860 61 74 20 74 68 69 73 20 73 74 65 70 20 69 73 20  at this step is 
23870 61 20 70 61 72 74 20 6f 66 20 2a 2f 0a 20 20 53  a part of */.  S
23880 65 6c 65 63 74 20 2a 70 53 65 6c 65 63 74 3b 20  elect *pSelect; 
23890 20 20 20 20 2f 2a 20 53 45 4c 45 43 54 20 73 74      /* SELECT st
238a0 61 74 65 6d 65 6e 74 20 6f 72 20 52 48 53 20 6f  atement or RHS o
238b0 66 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 53 45  f INSERT INTO SE
238c0 4c 45 43 54 20 2e 2e 2e 20 2a 2f 0a 20 20 63 68  LECT ... */.  ch
238d0 61 72 20 2a 7a 54 61 72 67 65 74 3b 20 20 20 20  ar *zTarget;    
238e0 20 20 20 2f 2a 20 54 61 72 67 65 74 20 74 61 62     /* Target tab
238f0 6c 65 20 66 6f 72 20 44 45 4c 45 54 45 2c 20 55  le for DELETE, U
23900 50 44 41 54 45 2c 20 49 4e 53 45 52 54 20 2a 2f  PDATE, INSERT */
23910 0a 20 20 45 78 70 72 20 2a 70 57 68 65 72 65 3b  .  Expr *pWhere;
23920 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 57          /* The W
23930 48 45 52 45 20 63 6c 61 75 73 65 20 66 6f 72 20  HERE clause for 
23940 44 45 4c 45 54 45 20 6f 72 20 55 50 44 41 54 45  DELETE or UPDATE
23950 20 73 74 65 70 73 20 2a 2f 0a 20 20 45 78 70 72   steps */.  Expr
23960 4c 69 73 74 20 2a 70 45 78 70 72 4c 69 73 74 3b  List *pExprList;
23970 20 2f 2a 20 53 45 54 20 63 6c 61 75 73 65 20 66   /* SET clause f
23980 6f 72 20 55 50 44 41 54 45 20 2a 2f 0a 20 20 49  or UPDATE */.  I
23990 64 4c 69 73 74 20 2a 70 49 64 4c 69 73 74 3b 20  dList *pIdList; 
239a0 20 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20 6e 61      /* Column na
239b0 6d 65 73 20 66 6f 72 20 49 4e 53 45 52 54 20 2a  mes for INSERT *
239c0 2f 0a 20 20 55 70 73 65 72 74 20 2a 70 55 70 73  /.  Upsert *pUps
239d0 65 72 74 3b 20 20 20 20 20 2f 2a 20 55 70 73 65  ert;     /* Upse
239e0 72 74 20 63 6c 61 75 73 65 73 20 6f 6e 20 61 6e  rt clauses on an
239f0 20 49 4e 53 45 52 54 20 2a 2f 0a 20 20 63 68 61   INSERT */.  cha
23a00 72 20 2a 7a 53 70 61 6e 3b 20 20 20 20 20 20 20  r *zSpan;       
23a10 20 20 2f 2a 20 4f 72 69 67 69 6e 61 6c 20 53 51    /* Original SQ
23a20 4c 20 74 65 78 74 20 6f 66 20 74 68 69 73 20 63  L text of this c
23a30 6f 6d 6d 61 6e 64 20 2a 2f 0a 20 20 54 72 69 67  ommand */.  Trig
23a40 67 65 72 53 74 65 70 20 2a 70 4e 65 78 74 3b 20  gerStep *pNext; 
23a50 20 2f 2a 20 4e 65 78 74 20 69 6e 20 74 68 65 20   /* Next in the 
23a60 6c 69 6e 6b 2d 6c 69 73 74 20 2a 2f 0a 20 20 54  link-list */.  T
23a70 72 69 67 67 65 72 53 74 65 70 20 2a 70 4c 61 73  riggerStep *pLas
23a80 74 3b 20 20 2f 2a 20 4c 61 73 74 20 65 6c 65 6d  t;  /* Last elem
23a90 65 6e 74 20 69 6e 20 6c 69 6e 6b 2d 6c 69 73 74  ent in link-list
23aa0 2e 20 56 61 6c 69 64 20 66 6f 72 20 31 73 74 20  . Valid for 1st 
23ab0 65 6c 65 6d 20 6f 6e 6c 79 20 2a 2f 0a 7d 3b 0a  elem only */.};.
23ac0 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f  ./*.** The follo
23ad0 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 20 63  wing structure c
23ae0 6f 6e 74 61 69 6e 73 20 69 6e 66 6f 72 6d 61 74  ontains informat
23af0 69 6f 6e 20 75 73 65 64 20 62 79 20 74 68 65 20  ion used by the 
23b00 73 71 6c 69 74 65 46 69 78 2e 2e 2e 0a 2a 2a 20  sqliteFix....** 
23b10 72 6f 75 74 69 6e 65 73 20 61 73 20 74 68 65 79  routines as they
23b20 20 77 61 6c 6b 20 74 68 65 20 70 61 72 73 65 20   walk the parse 
23b30 74 72 65 65 20 74 6f 20 6d 61 6b 65 20 64 61 74  tree to make dat
23b40 61 62 61 73 65 20 72 65 66 65 72 65 6e 63 65 73  abase references
23b50 0a 2a 2a 20 65 78 70 6c 69 63 69 74 2e 0a 2a 2f  .** explicit..*/
23b60 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
23b70 44 62 46 69 78 65 72 20 44 62 46 69 78 65 72 3b  DbFixer DbFixer;
23b80 0a 73 74 72 75 63 74 20 44 62 46 69 78 65 72 20  .struct DbFixer 
23b90 7b 0a 20 20 50 61 72 73 65 20 2a 70 50 61 72 73  {.  Parse *pPars
23ba0 65 3b 20 20 20 20 20 20 2f 2a 20 54 68 65 20 70  e;      /* The p
23bb0 61 72 73 69 6e 67 20 63 6f 6e 74 65 78 74 2e 20  arsing context. 
23bc0 20 45 72 72 6f 72 20 6d 65 73 73 61 67 65 73 20   Error messages 
23bd0 77 72 69 74 74 65 6e 20 68 65 72 65 20 2a 2f 0a  written here */.
23be0 20 20 53 63 68 65 6d 61 20 2a 70 53 63 68 65 6d    Schema *pSchem
23bf0 61 3b 20 20 20 20 2f 2a 20 46 69 78 20 69 74 65  a;    /* Fix ite
23c00 6d 73 20 74 6f 20 74 68 69 73 20 73 63 68 65 6d  ms to this schem
23c10 61 20 2a 2f 0a 20 20 69 6e 74 20 62 56 61 72 4f  a */.  int bVarO
23c20 6e 6c 79 3b 20 20 20 20 20 20 20 2f 2a 20 43 68  nly;       /* Ch
23c30 65 63 6b 20 66 6f 72 20 76 61 72 69 61 62 6c 65  eck for variable
23c40 20 72 65 66 65 72 65 6e 63 65 73 20 6f 6e 6c 79   references only
23c50 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72   */.  const char
23c60 20 2a 7a 44 62 3b 20 20 20 20 2f 2a 20 4d 61 6b   *zDb;    /* Mak
23c70 65 20 73 75 72 65 20 61 6c 6c 20 6f 62 6a 65 63  e sure all objec
23c80 74 73 20 61 72 65 20 63 6f 6e 74 61 69 6e 65 64  ts are contained
23c90 20 69 6e 20 74 68 69 73 20 64 61 74 61 62 61 73   in this databas
23ca0 65 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61  e */.  const cha
23cb0 72 20 2a 7a 54 79 70 65 3b 20 20 2f 2a 20 54 79  r *zType;  /* Ty
23cc0 70 65 20 6f 66 20 74 68 65 20 63 6f 6e 74 61 69  pe of the contai
23cd0 6e 65 72 20 2d 20 75 73 65 64 20 66 6f 72 20 65  ner - used for e
23ce0 72 72 6f 72 20 6d 65 73 73 61 67 65 73 20 2a 2f  rror messages */
23cf0 0a 20 20 63 6f 6e 73 74 20 54 6f 6b 65 6e 20 2a  .  const Token *
23d00 70 4e 61 6d 65 3b 20 2f 2a 20 4e 61 6d 65 20 6f  pName; /* Name o
23d10 66 20 74 68 65 20 63 6f 6e 74 61 69 6e 65 72 20  f the container 
23d20 2d 20 75 73 65 64 20 66 6f 72 20 65 72 72 6f 72  - used for error
23d30 20 6d 65 73 73 61 67 65 73 20 2a 2f 0a 7d 3b 0a   messages */.};.
23d40 0a 2f 2a 0a 2a 2a 20 41 6e 20 6f 62 6a 65 63 74  ./*.** An object
23d50 65 64 20 75 73 65 64 20 74 6f 20 61 63 63 75 6d  ed used to accum
23d60 75 6c 61 74 65 20 74 68 65 20 74 65 78 74 20 6f  ulate the text o
23d70 66 20 61 20 73 74 72 69 6e 67 20 77 68 65 72 65  f a string where
23d80 20 77 65 0a 2a 2a 20 64 6f 20 6e 6f 74 20 6e 65   we.** do not ne
23d90 63 65 73 73 61 72 69 6c 79 20 6b 6e 6f 77 20 68  cessarily know h
23da0 6f 77 20 62 69 67 20 74 68 65 20 73 74 72 69 6e  ow big the strin
23db0 67 20 77 69 6c 6c 20 62 65 20 69 6e 20 74 68 65  g will be in the
23dc0 20 65 6e 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20   end..*/.struct 
23dd0 73 71 6c 69 74 65 33 5f 73 74 72 20 7b 0a 20 20  sqlite3_str {.  
23de0 73 71 6c 69 74 65 33 20 2a 64 62 3b 20 20 20 20  sqlite3 *db;    
23df0 20 20 20 20 20 2f 2a 20 4f 70 74 69 6f 6e 61 6c       /* Optional
23e00 20 64 61 74 61 62 61 73 65 20 66 6f 72 20 6c 6f   database for lo
23e10 6f 6b 61 73 69 64 65 2e 20 20 43 61 6e 20 62 65  okaside.  Can be
23e20 20 4e 55 4c 4c 20 2a 2f 0a 20 20 63 68 61 72 20   NULL */.  char 
23e30 2a 7a 54 65 78 74 3b 20 20 20 20 20 20 20 20 20  *zText;         
23e40 2f 2a 20 54 68 65 20 73 74 72 69 6e 67 20 63 6f  /* The string co
23e50 6c 6c 65 63 74 65 64 20 73 6f 20 66 61 72 20 2a  llected so far *
23e60 2f 0a 20 20 75 33 32 20 20 6e 41 6c 6c 6f 63 3b  /.  u32  nAlloc;
23e70 20 20 20 20 20 20 20 20 20 2f 2a 20 41 6d 6f 75           /* Amou
23e80 6e 74 20 6f 66 20 73 70 61 63 65 20 61 6c 6c 6f  nt of space allo
23e90 63 61 74 65 64 20 69 6e 20 7a 54 65 78 74 20 2a  cated in zText *
23ea0 2f 0a 20 20 75 33 32 20 20 6d 78 41 6c 6c 6f 63  /.  u32  mxAlloc
23eb0 3b 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 78 69  ;        /* Maxi
23ec0 6d 75 6d 20 61 6c 6c 6f 77 65 64 20 61 6c 6c 6f  mum allowed allo
23ed0 63 61 74 69 6f 6e 2e 20 20 30 20 66 6f 72 20 6e  cation.  0 for n
23ee0 6f 20 6d 61 6c 6c 6f 63 20 75 73 61 67 65 20 2a  o malloc usage *
23ef0 2f 0a 20 20 75 33 32 20 20 6e 43 68 61 72 3b 20  /.  u32  nChar; 
23f00 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 65 6e 67           /* Leng
23f10 74 68 20 6f 66 20 74 68 65 20 73 74 72 69 6e 67  th of the string
23f20 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20 75 38 20   so far */.  u8 
23f30 20 20 61 63 63 45 72 72 6f 72 3b 20 20 20 20 20    accError;     
23f40 20 20 2f 2a 20 53 51 4c 49 54 45 5f 4e 4f 4d 45    /* SQLITE_NOME
23f50 4d 20 6f 72 20 53 51 4c 49 54 45 5f 54 4f 4f 42  M or SQLITE_TOOB
23f60 49 47 20 2a 2f 0a 20 20 75 38 20 20 20 70 72 69  IG */.  u8   pri
23f70 6e 74 66 46 6c 61 67 73 3b 20 20 20 20 2f 2a 20  ntfFlags;    /* 
23f80 53 51 4c 49 54 45 5f 50 52 49 4e 54 46 20 66 6c  SQLITE_PRINTF fl
23f90 61 67 73 20 62 65 6c 6f 77 20 2a 2f 0a 7d 3b 0a  ags below */.};.
23fa0 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50  #define SQLITE_P
23fb0 52 49 4e 54 46 5f 49 4e 54 45 52 4e 41 4c 20 30  RINTF_INTERNAL 0
23fc0 78 30 31 20 20 2f 2a 20 49 6e 74 65 72 6e 61 6c  x01  /* Internal
23fd0 2d 75 73 65 2d 6f 6e 6c 79 20 63 6f 6e 76 65 72  -use-only conver
23fe0 74 65 72 73 20 61 6c 6c 6f 77 65 64 20 2a 2f 0a  ters allowed */.
23ff0 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50  #define SQLITE_P
24000 52 49 4e 54 46 5f 53 51 4c 46 55 4e 43 20 20 30  RINTF_SQLFUNC  0
24010 78 30 32 20 20 2f 2a 20 53 51 4c 20 66 75 6e 63  x02  /* SQL func
24020 74 69 6f 6e 20 61 72 67 75 6d 65 6e 74 73 20 74  tion arguments t
24030 6f 20 56 58 50 72 69 6e 74 66 20 2a 2f 0a 23 64  o VXPrintf */.#d
24040 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 52 49  efine SQLITE_PRI
24050 4e 54 46 5f 4d 41 4c 4c 4f 43 45 44 20 30 78 30  NTF_MALLOCED 0x0
24060 34 20 20 2f 2a 20 54 72 75 65 20 69 66 20 78 54  4  /* True if xT
24070 65 78 74 20 69 73 20 61 6c 6c 6f 63 61 74 65 64  ext is allocated
24080 20 73 70 61 63 65 20 2a 2f 0a 0a 23 64 65 66 69   space */..#defi
24090 6e 65 20 69 73 4d 61 6c 6c 6f 63 65 64 28 58 29  ne isMalloced(X)
240a0 20 20 28 28 28 58 29 2d 3e 70 72 69 6e 74 66 46    (((X)->printfF
240b0 6c 61 67 73 20 26 20 53 51 4c 49 54 45 5f 50 52  lags & SQLITE_PR
240c0 49 4e 54 46 5f 4d 41 4c 4c 4f 43 45 44 29 21 3d  INTF_MALLOCED)!=
240d0 30 29 0a 0a 0a 2f 2a 0a 2a 2a 20 41 20 70 6f 69  0).../*.** A poi
240e0 6e 74 65 72 20 74 6f 20 74 68 69 73 20 73 74 72  nter to this str
240f0 75 63 74 75 72 65 20 69 73 20 75 73 65 64 20 74  ucture is used t
24100 6f 20 63 6f 6d 6d 75 6e 69 63 61 74 65 20 69 6e  o communicate in
24110 66 6f 72 6d 61 74 69 6f 6e 0a 2a 2a 20 66 72 6f  formation.** fro
24120 6d 20 73 71 6c 69 74 65 33 49 6e 69 74 20 61 6e  m sqlite3Init an
24130 64 20 4f 50 5f 50 61 72 73 65 53 63 68 65 6d 61  d OP_ParseSchema
24140 20 69 6e 74 6f 20 74 68 65 20 73 71 6c 69 74 65   into the sqlite
24150 33 49 6e 69 74 43 61 6c 6c 62 61 63 6b 2e 0a 2a  3InitCallback..*
24160 2f 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  /.typedef struct
24170 20 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62   {.  sqlite3 *db
24180 3b 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20  ;        /* The 
24190 64 61 74 61 62 61 73 65 20 62 65 69 6e 67 20 69  database being i
241a0 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20  nitialized */.  
241b0 63 68 61 72 20 2a 2a 70 7a 45 72 72 4d 73 67 3b  char **pzErrMsg;
241c0 20 20 20 20 2f 2a 20 45 72 72 6f 72 20 6d 65 73      /* Error mes
241d0 73 61 67 65 20 73 74 6f 72 65 64 20 68 65 72 65  sage stored here
241e0 20 2a 2f 0a 20 20 69 6e 74 20 69 44 62 3b 20 20   */.  int iDb;  
241f0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 30 20 66            /* 0 f
24200 6f 72 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65  or main database
24210 2e 20 20 31 20 66 6f 72 20 54 45 4d 50 2c 20 32  .  1 for TEMP, 2
24220 2e 2e 20 66 6f 72 20 41 54 54 41 43 48 65 64 20  .. for ATTACHed 
24230 2a 2f 0a 20 20 69 6e 74 20 72 63 3b 20 20 20 20  */.  int rc;    
24240 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 73 75           /* Resu
24250 6c 74 20 63 6f 64 65 20 73 74 6f 72 65 64 20 68  lt code stored h
24260 65 72 65 20 2a 2f 0a 20 20 75 33 32 20 6d 49 6e  ere */.  u32 mIn
24270 69 74 46 6c 61 67 73 3b 20 20 20 20 20 2f 2a 20  itFlags;     /* 
24280 46 6c 61 67 73 20 63 6f 6e 74 72 6f 6c 6c 69 6e  Flags controllin
24290 67 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 73  g error messages
242a0 20 2a 2f 0a 7d 20 49 6e 69 74 44 61 74 61 3b 0a   */.} InitData;.
242b0 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 76  ./*.** Allowed v
242c0 61 6c 75 65 73 20 66 6f 72 20 6d 49 6e 69 74 46  alues for mInitF
242d0 6c 61 67 73 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  lags.*/.#define 
242e0 49 4e 49 54 46 4c 41 47 5f 41 6c 74 65 72 54 61  INITFLAG_AlterTa
242f0 62 6c 65 20 20 20 30 78 30 30 30 31 20 20 2f 2a  ble   0x0001  /*
24300 20 54 68 69 73 20 69 73 20 61 20 72 65 70 61 72   This is a repar
24310 73 65 20 61 66 74 65 72 20 41 4c 54 45 52 20 54  se after ALTER T
24320 41 42 4c 45 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 53  ABLE */../*.** S
24330 74 72 75 63 74 75 72 65 20 63 6f 6e 74 61 69 6e  tructure contain
24340 69 6e 67 20 67 6c 6f 62 61 6c 20 63 6f 6e 66 69  ing global confi
24350 67 75 72 61 74 69 6f 6e 20 64 61 74 61 20 66 6f  guration data fo
24360 72 20 74 68 65 20 53 51 4c 69 74 65 20 6c 69 62  r the SQLite lib
24370 72 61 72 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73  rary..**.** This
24380 20 73 74 72 75 63 74 75 72 65 20 61 6c 73 6f 20   structure also 
24390 63 6f 6e 74 61 69 6e 73 20 73 6f 6d 65 20 73 74  contains some st
243a0 61 74 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e  ate information.
243b0 0a 2a 2f 0a 73 74 72 75 63 74 20 53 71 6c 69 74  .*/.struct Sqlit
243c0 65 33 43 6f 6e 66 69 67 20 7b 0a 20 20 69 6e 74  e3Config {.  int
243d0 20 62 4d 65 6d 73 74 61 74 3b 20 20 20 20 20 20   bMemstat;      
243e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
243f0 2a 20 54 72 75 65 20 74 6f 20 65 6e 61 62 6c 65  * True to enable
24400 20 6d 65 6d 6f 72 79 20 73 74 61 74 75 73 20 2a   memory status *
24410 2f 0a 20 20 69 6e 74 20 62 43 6f 72 65 4d 75 74  /.  int bCoreMut
24420 65 78 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ex;             
24430 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 74 6f        /* True to
24440 20 65 6e 61 62 6c 65 20 63 6f 72 65 20 6d 75 74   enable core mut
24450 65 78 69 6e 67 20 2a 2f 0a 20 20 69 6e 74 20 62  exing */.  int b
24460 46 75 6c 6c 4d 75 74 65 78 3b 20 20 20 20 20 20  FullMutex;      
24470 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
24480 54 72 75 65 20 74 6f 20 65 6e 61 62 6c 65 20 66  True to enable f
24490 75 6c 6c 20 6d 75 74 65 78 69 6e 67 20 2a 2f 0a  ull mutexing */.
244a0 20 20 69 6e 74 20 62 4f 70 65 6e 55 72 69 3b 20    int bOpenUri; 
244b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
244c0 20 20 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 69      /* True to i
244d0 6e 74 65 72 70 72 65 74 20 66 69 6c 65 6e 61 6d  nterpret filenam
244e0 65 73 20 61 73 20 55 52 49 73 20 2a 2f 0a 20 20  es as URIs */.  
244f0 69 6e 74 20 62 55 73 65 43 69 73 3b 20 20 20 20  int bUseCis;    
24500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24510 20 20 2f 2a 20 55 73 65 20 63 6f 76 65 72 69 6e    /* Use coverin
24520 67 20 69 6e 64 69 63 65 73 20 66 6f 72 20 66 75  g indices for fu
24530 6c 6c 2d 73 63 61 6e 73 20 2a 2f 0a 20 20 69 6e  ll-scans */.  in
24540 74 20 62 53 6d 61 6c 6c 4d 61 6c 6c 6f 63 3b 20  t bSmallMalloc; 
24550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24560 2f 2a 20 41 76 6f 69 64 20 6c 61 72 67 65 20 6d  /* Avoid large m
24570 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e  emory allocation
24580 73 20 69 66 20 74 72 75 65 20 2a 2f 0a 20 20 69  s if true */.  i
24590 6e 74 20 6d 78 53 74 72 6c 65 6e 3b 20 20 20 20  nt mxStrlen;    
245a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
245b0 20 2f 2a 20 4d 61 78 69 6d 75 6d 20 73 74 72 69   /* Maximum stri
245c0 6e 67 20 6c 65 6e 67 74 68 20 2a 2f 0a 20 20 69  ng length */.  i
245d0 6e 74 20 6e 65 76 65 72 43 6f 72 72 75 70 74 3b  nt neverCorrupt;
245e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
245f0 20 2f 2a 20 44 61 74 61 62 61 73 65 20 69 73 20   /* Database is 
24600 61 6c 77 61 79 73 20 77 65 6c 6c 2d 66 6f 72 6d  always well-form
24610 65 64 20 2a 2f 0a 20 20 69 6e 74 20 73 7a 4c 6f  ed */.  int szLo
24620 6f 6b 61 73 69 64 65 3b 20 20 20 20 20 20 20 20  okaside;        
24630 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 65 66            /* Def
24640 61 75 6c 74 20 6c 6f 6f 6b 61 73 69 64 65 20 62  ault lookaside b
24650 75 66 66 65 72 20 73 69 7a 65 20 2a 2f 0a 20 20  uffer size */.  
24660 69 6e 74 20 6e 4c 6f 6f 6b 61 73 69 64 65 3b 20  int nLookaside; 
24670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24680 20 20 2f 2a 20 44 65 66 61 75 6c 74 20 6c 6f 6f    /* Default loo
24690 6b 61 73 69 64 65 20 62 75 66 66 65 72 20 63 6f  kaside buffer co
246a0 75 6e 74 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 74  unt */.  int nSt
246b0 6d 74 53 70 69 6c 6c 3b 20 20 20 20 20 20 20 20  mtSpill;        
246c0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 74             /* St
246d0 6d 74 2d 6a 6f 75 72 6e 61 6c 20 73 70 69 6c 6c  mt-journal spill
246e0 2d 74 6f 2d 64 69 73 6b 20 74 68 72 65 73 68 6f  -to-disk thresho
246f0 6c 64 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f  ld */.  sqlite3_
24700 6d 65 6d 5f 6d 65 74 68 6f 64 73 20 6d 3b 20 20  mem_methods m;  
24710 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f 77            /* Low
24720 2d 6c 65 76 65 6c 20 6d 65 6d 6f 72 79 20 61 6c  -level memory al
24730 6c 6f 63 61 74 69 6f 6e 20 69 6e 74 65 72 66 61  location interfa
24740 63 65 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f  ce */.  sqlite3_
24750 6d 75 74 65 78 5f 6d 65 74 68 6f 64 73 20 6d 75  mutex_methods mu
24760 74 65 78 3b 20 20 20 20 20 20 2f 2a 20 4c 6f 77  tex;      /* Low
24770 2d 6c 65 76 65 6c 20 6d 75 74 65 78 20 69 6e 74  -level mutex int
24780 65 72 66 61 63 65 20 2a 2f 0a 20 20 73 71 6c 69  erface */.  sqli
24790 74 65 33 5f 70 63 61 63 68 65 5f 6d 65 74 68 6f  te3_pcache_metho
247a0 64 73 32 20 70 63 61 63 68 65 32 3b 20 20 2f 2a  ds2 pcache2;  /*
247b0 20 4c 6f 77 2d 6c 65 76 65 6c 20 70 61 67 65 2d   Low-level page-
247c0 63 61 63 68 65 20 69 6e 74 65 72 66 61 63 65 20  cache interface 
247d0 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 48 65 61 70  */.  void *pHeap
247e0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
247f0 20 20 20 20 20 20 20 2f 2a 20 48 65 61 70 20 73         /* Heap s
24800 74 6f 72 61 67 65 20 73 70 61 63 65 20 2a 2f 0a  torage space */.
24810 20 20 69 6e 74 20 6e 48 65 61 70 3b 20 20 20 20    int nHeap;    
24820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24830 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20 70      /* Size of p
24840 48 65 61 70 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20  Heap[] */.  int 
24850 6d 6e 52 65 71 2c 20 6d 78 52 65 71 3b 20 20 20  mnReq, mxReq;   
24860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
24870 20 4d 69 6e 20 61 6e 64 20 6d 61 78 20 68 65 61   Min and max hea
24880 70 20 72 65 71 75 65 73 74 73 20 73 69 7a 65 73  p requests sizes
24890 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 69 6e   */.  sqlite3_in
248a0 74 36 34 20 73 7a 4d 6d 61 70 3b 20 20 20 20 20  t64 szMmap;     
248b0 20 20 20 20 20 20 20 20 2f 2a 20 6d 6d 61 70 28          /* mmap(
248c0 29 20 73 70 61 63 65 20 70 65 72 20 6f 70 65 6e  ) space per open
248d0 20 66 69 6c 65 20 2a 2f 0a 20 20 73 71 6c 69 74   file */.  sqlit
248e0 65 33 5f 69 6e 74 36 34 20 6d 78 4d 6d 61 70 3b  e3_int64 mxMmap;
248f0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
24900 4d 61 78 69 6d 75 6d 20 76 61 6c 75 65 20 66 6f  Maximum value fo
24910 72 20 73 7a 4d 6d 61 70 20 2a 2f 0a 20 20 76 6f  r szMmap */.  vo
24920 69 64 20 2a 70 50 61 67 65 3b 20 20 20 20 20 20  id *pPage;      
24930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24940 2f 2a 20 50 61 67 65 20 63 61 63 68 65 20 6d 65  /* Page cache me
24950 6d 6f 72 79 20 2a 2f 0a 20 20 69 6e 74 20 73 7a  mory */.  int sz
24960 50 61 67 65 3b 20 20 20 20 20 20 20 20 20 20 20  Page;           
24970 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53              /* S
24980 69 7a 65 20 6f 66 20 65 61 63 68 20 70 61 67 65  ize of each page
24990 20 69 6e 20 70 50 61 67 65 5b 5d 20 2a 2f 0a 20   in pPage[] */. 
249a0 20 69 6e 74 20 6e 50 61 67 65 3b 20 20 20 20 20   int nPage;     
249b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
249c0 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
249d0 70 61 67 65 73 20 69 6e 20 70 50 61 67 65 5b 5d  pages in pPage[]
249e0 20 2a 2f 0a 20 20 69 6e 74 20 6d 78 50 61 72 73   */.  int mxPars
249f0 65 72 53 74 61 63 6b 3b 20 20 20 20 20 20 20 20  erStack;        
24a00 20 20 20 20 20 20 20 20 2f 2a 20 6d 61 78 69 6d          /* maxim
24a10 75 6d 20 64 65 70 74 68 20 6f 66 20 74 68 65 20  um depth of the 
24a20 70 61 72 73 65 72 20 73 74 61 63 6b 20 2a 2f 0a  parser stack */.
24a30 20 20 69 6e 74 20 73 68 61 72 65 64 43 61 63 68    int sharedCach
24a40 65 45 6e 61 62 6c 65 64 3b 20 20 20 20 20 20 20  eEnabled;       
24a50 20 20 20 20 2f 2a 20 74 72 75 65 20 69 66 20 73      /* true if s
24a60 68 61 72 65 64 2d 63 61 63 68 65 20 6d 6f 64 65  hared-cache mode
24a70 20 65 6e 61 62 6c 65 64 20 2a 2f 0a 20 20 75 33   enabled */.  u3
24a80 32 20 73 7a 50 6d 61 3b 20 20 20 20 20 20 20 20  2 szPma;        
24a90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24aa0 2f 2a 20 4d 61 78 69 6d 75 6d 20 53 6f 72 74 65  /* Maximum Sorte
24ab0 72 20 50 4d 41 20 73 69 7a 65 20 2a 2f 0a 20 20  r PMA size */.  
24ac0 2f 2a 20 54 68 65 20 61 62 6f 76 65 20 6d 69 67  /* The above mig
24ad0 68 74 20 62 65 20 69 6e 69 74 69 61 6c 69 7a 65  ht be initialize
24ae0 64 20 74 6f 20 6e 6f 6e 2d 7a 65 72 6f 2e 20 20  d to non-zero.  
24af0 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6e 65  The following ne
24b00 65 64 20 74 6f 20 61 6c 77 61 79 73 0a 20 20 2a  ed to always.  *
24b10 2a 20 69 6e 69 74 69 61 6c 6c 79 20 62 65 20 7a  * initially be z
24b20 65 72 6f 2c 20 68 6f 77 65 76 65 72 2e 20 2a 2f  ero, however. */
24b30 0a 20 20 69 6e 74 20 69 73 49 6e 69 74 3b 20 20  .  int isInit;  
24b40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24b50 20 20 20 20 20 2f 2a 20 54 72 75 65 20 61 66 74       /* True aft
24b60 65 72 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f  er initializatio
24b70 6e 20 68 61 73 20 66 69 6e 69 73 68 65 64 20 2a  n has finished *
24b80 2f 0a 20 20 69 6e 74 20 69 6e 50 72 6f 67 72 65  /.  int inProgre
24b90 73 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ss;             
24ba0 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 77 68        /* True wh
24bb0 69 6c 65 20 69 6e 69 74 69 61 6c 69 7a 61 74 69  ile initializati
24bc0 6f 6e 20 69 6e 20 70 72 6f 67 72 65 73 73 20 2a  on in progress *
24bd0 2f 0a 20 20 69 6e 74 20 69 73 4d 75 74 65 78 49  /.  int isMutexI
24be0 6e 69 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  nit;            
24bf0 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 61 66        /* True af
24c00 74 65 72 20 6d 75 74 65 78 65 73 20 61 72 65 20  ter mutexes are 
24c10 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20  initialized */. 
24c20 20 69 6e 74 20 69 73 4d 61 6c 6c 6f 63 49 6e 69   int isMallocIni
24c30 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t;              
24c40 20 20 20 2f 2a 20 54 72 75 65 20 61 66 74 65 72     /* True after
24c50 20 6d 61 6c 6c 6f 63 20 69 73 20 69 6e 69 74 69   malloc is initi
24c60 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 69 6e 74 20  alized */.  int 
24c70 69 73 50 43 61 63 68 65 49 6e 69 74 3b 20 20 20  isPCacheInit;   
24c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
24c90 20 54 72 75 65 20 61 66 74 65 72 20 6d 61 6c 6c   True after mall
24ca0 6f 63 20 69 73 20 69 6e 69 74 69 61 6c 69 7a 65  oc is initialize
24cb0 64 20 2a 2f 0a 20 20 69 6e 74 20 6e 52 65 66 49  d */.  int nRefI
24cc0 6e 69 74 4d 75 74 65 78 3b 20 20 20 20 20 20 20  nitMutex;       
24cd0 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
24ce0 65 72 20 6f 66 20 75 73 65 72 73 20 6f 66 20 70  er of users of p
24cf0 49 6e 69 74 4d 75 74 65 78 20 2a 2f 0a 20 20 73  InitMutex */.  s
24d00 71 6c 69 74 65 33 5f 6d 75 74 65 78 20 2a 70 49  qlite3_mutex *pI
24d10 6e 69 74 4d 75 74 65 78 3b 20 20 20 20 20 20 20  nitMutex;       
24d20 20 2f 2a 20 4d 75 74 65 78 20 75 73 65 64 20 62   /* Mutex used b
24d30 79 20 73 71 6c 69 74 65 33 5f 69 6e 69 74 69 61  y sqlite3_initia
24d40 6c 69 7a 65 28 29 20 2a 2f 0a 20 20 76 6f 69 64  lize() */.  void
24d50 20 28 2a 78 4c 6f 67 29 28 76 6f 69 64 2a 2c 69   (*xLog)(void*,i
24d60 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  nt,const char*);
24d70 20 2f 2a 20 46 75 6e 63 74 69 6f 6e 20 66 6f 72   /* Function for
24d80 20 6c 6f 67 67 69 6e 67 20 2a 2f 0a 20 20 76 6f   logging */.  vo
24d90 69 64 20 2a 70 4c 6f 67 41 72 67 3b 20 20 20 20  id *pLogArg;    
24da0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24db0 20 20 20 2f 2a 20 46 69 72 73 74 20 61 72 67 75     /* First argu
24dc0 6d 65 6e 74 20 74 6f 20 78 4c 6f 67 28 29 20 2a  ment to xLog() *
24dd0 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
24de0 45 4e 41 42 4c 45 5f 53 51 4c 4c 4f 47 0a 20 20  ENABLE_SQLLOG.  
24df0 76 6f 69 64 28 2a 78 53 71 6c 6c 6f 67 29 28 76  void(*xSqllog)(v
24e00 6f 69 64 2a 2c 73 71 6c 69 74 65 33 2a 2c 63 6f  oid*,sqlite3*,co
24e10 6e 73 74 20 63 68 61 72 2a 2c 20 69 6e 74 29 3b  nst char*, int);
24e20 0a 20 20 76 6f 69 64 20 2a 70 53 71 6c 6c 6f 67  .  void *pSqllog
24e30 41 72 67 3b 0a 23 65 6e 64 69 66 0a 23 69 66 64  Arg;.#endif.#ifd
24e40 65 66 20 53 51 4c 49 54 45 5f 56 44 42 45 5f 43  ef SQLITE_VDBE_C
24e50 4f 56 45 52 41 47 45 0a 20 20 2f 2a 20 54 68 65  OVERAGE.  /* The
24e60 20 66 6f 6c 6c 6f 77 69 6e 67 20 63 61 6c 6c 62   following callb
24e70 61 63 6b 20 28 69 66 20 6e 6f 74 20 4e 55 4c 4c  ack (if not NULL
24e80 29 20 69 73 20 69 6e 76 6f 6b 65 64 20 6f 6e 20  ) is invoked on 
24e90 65 76 65 72 79 20 56 44 42 45 20 62 72 61 6e 63  every VDBE branc
24ea0 68 0a 20 20 2a 2a 20 6f 70 65 72 61 74 69 6f 6e  h.  ** operation
24eb0 2e 20 20 53 65 74 20 74 68 65 20 63 61 6c 6c 62  .  Set the callb
24ec0 61 63 6b 20 75 73 69 6e 67 20 53 51 4c 49 54 45  ack using SQLITE
24ed0 5f 54 45 53 54 43 54 52 4c 5f 56 44 42 45 5f 43  _TESTCTRL_VDBE_C
24ee0 4f 56 45 52 41 47 45 2e 0a 20 20 2a 2f 0a 20 20  OVERAGE..  */.  
24ef0 76 6f 69 64 20 28 2a 78 56 64 62 65 42 72 61 6e  void (*xVdbeBran
24f00 63 68 29 28 76 6f 69 64 2a 2c 75 6e 73 69 67 6e  ch)(void*,unsign
24f10 65 64 20 69 53 72 63 4c 69 6e 65 2c 75 38 20 65  ed iSrcLine,u8 e
24f20 54 68 69 73 2c 75 38 20 65 4d 78 29 3b 20 20 2f  This,u8 eMx);  /
24f30 2a 20 43 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20  * Callback */.  
24f40 76 6f 69 64 20 2a 70 56 64 62 65 42 72 61 6e 63  void *pVdbeBranc
24f50 68 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20  hArg;           
24f60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24f70 20 20 20 20 20 20 20 20 20 20 2f 2a 20 31 73 74            /* 1st
24f80 20 61 72 67 75 6d 65 6e 74 20 2a 2f 0a 23 65 6e   argument */.#en
24f90 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  dif.#ifndef SQLI
24fa0 54 45 5f 55 4e 54 45 53 54 41 42 4c 45 0a 20 20  TE_UNTESTABLE.  
24fb0 69 6e 74 20 28 2a 78 54 65 73 74 43 61 6c 6c 62  int (*xTestCallb
24fc0 61 63 6b 29 28 69 6e 74 29 3b 20 20 20 20 20 20  ack)(int);      
24fd0 20 20 2f 2a 20 49 6e 76 6f 6b 65 64 20 62 79 20    /* Invoked by 
24fe0 73 71 6c 69 74 65 33 46 61 75 6c 74 53 69 6d 28  sqlite3FaultSim(
24ff0 29 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 69 6e  ) */.#endif.  in
25000 74 20 62 4c 6f 63 61 6c 74 69 6d 65 46 61 75 6c  t bLocaltimeFaul
25010 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t;              
25020 2f 2a 20 54 72 75 65 20 74 6f 20 66 61 69 6c 20  /* True to fail 
25030 6c 6f 63 61 6c 74 69 6d 65 28 29 20 63 61 6c 6c  localtime() call
25040 73 20 2a 2f 0a 20 20 69 6e 74 20 62 49 6e 74 65  s */.  int bInte
25050 72 6e 61 6c 46 75 6e 63 74 69 6f 6e 73 3b 20 20  rnalFunctions;  
25060 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 74 65           /* Inte
25070 72 6e 61 6c 20 53 51 4c 20 66 75 6e 63 74 69 6f  rnal SQL functio
25080 6e 73 20 61 72 65 20 76 69 73 69 62 6c 65 20 2a  ns are visible *
25090 2f 0a 20 20 69 6e 74 20 69 4f 6e 63 65 52 65 73  /.  int iOnceRes
250a0 65 74 54 68 72 65 73 68 6f 6c 64 3b 20 20 20 20  etThreshold;    
250b0 20 20 20 20 20 20 2f 2a 20 57 68 65 6e 20 74 6f        /* When to
250c0 20 72 65 73 65 74 20 4f 50 5f 4f 6e 63 65 20 63   reset OP_Once c
250d0 6f 75 6e 74 65 72 73 20 2a 2f 0a 20 20 75 33 32  ounters */.  u32
250e0 20 73 7a 53 6f 72 74 65 72 52 65 66 3b 20 20 20   szSorterRef;   
250f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
25100 2a 20 4d 69 6e 20 73 69 7a 65 20 69 6e 20 62 79  * Min size in by
25110 74 65 73 20 74 6f 20 75 73 65 20 73 6f 72 74 65  tes to use sorte
25120 72 2d 72 65 66 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  r-refs */.};../*
25130 0a 2a 2a 20 54 68 69 73 20 6d 61 63 72 6f 20 69  .** This macro i
25140 73 20 75 73 65 64 20 69 6e 73 69 64 65 20 6f 66  s used inside of
25150 20 61 73 73 65 72 74 28 29 20 73 74 61 74 65 6d   assert() statem
25160 65 6e 74 73 20 74 6f 20 69 6e 64 69 63 61 74 65  ents to indicate
25170 20 74 68 61 74 0a 2a 2a 20 74 68 65 20 61 73 73   that.** the ass
25180 65 72 74 20 69 73 20 6f 6e 6c 79 20 76 61 6c 69  ert is only vali
25190 64 20 6f 6e 20 61 20 77 65 6c 6c 2d 66 6f 72 6d  d on a well-form
251a0 65 64 20 64 61 74 61 62 61 73 65 2e 20 20 49 6e  ed database.  In
251b0 73 74 65 61 64 20 6f 66 3a 0a 2a 2a 0a 2a 2a 20  stead of:.**.** 
251c0 20 20 20 20 61 73 73 65 72 74 28 20 58 20 29 3b      assert( X );
251d0 0a 2a 2a 0a 2a 2a 20 4f 6e 65 20 77 72 69 74 65  .**.** One write
251e0 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 61 73 73  s:.**.**     ass
251f0 65 72 74 28 20 58 20 7c 7c 20 43 4f 52 52 55 50  ert( X || CORRUP
25200 54 5f 44 42 20 29 3b 0a 2a 2a 0a 2a 2a 20 43 4f  T_DB );.**.** CO
25210 52 52 55 50 54 5f 44 42 20 69 73 20 74 72 75 65  RRUPT_DB is true
25220 20 64 75 72 69 6e 67 20 6e 6f 72 6d 61 6c 20 6f   during normal o
25230 70 65 72 61 74 69 6f 6e 2e 20 20 43 4f 52 52 55  peration.  CORRU
25240 50 54 5f 44 42 20 64 6f 65 73 20 6e 6f 74 20 69  PT_DB does not i
25250 6e 64 69 63 61 74 65 0a 2a 2a 20 74 68 61 74 20  ndicate.** that 
25260 74 68 65 20 64 61 74 61 62 61 73 65 20 69 73 20  the database is 
25270 64 65 66 69 6e 69 74 65 6c 79 20 63 6f 72 72 75  definitely corru
25280 70 74 2c 20 6f 6e 6c 79 20 74 68 61 74 20 69 74  pt, only that it
25290 20 6d 69 67 68 74 20 62 65 20 63 6f 72 72 75 70   might be corrup
252a0 74 2e 0a 2a 2a 20 46 6f 72 20 6d 6f 73 74 20 74  t..** For most t
252b0 65 73 74 20 63 61 73 65 73 2c 20 43 4f 52 52 55  est cases, CORRU
252c0 50 54 5f 44 42 20 69 73 20 73 65 74 20 74 6f 20  PT_DB is set to 
252d0 66 61 6c 73 65 20 75 73 69 6e 67 20 61 20 73 70  false using a sp
252e0 65 63 69 61 6c 0a 2a 2a 20 73 71 6c 69 74 65 33  ecial.** sqlite3
252f0 5f 74 65 73 74 5f 63 6f 6e 74 72 6f 6c 28 29 2e  _test_control().
25300 20 20 54 68 69 73 20 65 6e 61 62 6c 65 73 20 61    This enables a
25310 73 73 65 72 74 28 29 20 73 74 61 74 65 6d 65 6e  ssert() statemen
25320 74 73 20 74 6f 20 70 72 6f 76 65 0a 2a 2a 20 74  ts to prove.** t
25330 68 69 6e 67 73 20 74 68 61 74 20 61 72 65 20 61  hings that are a
25340 6c 77 61 79 73 20 74 72 75 65 20 66 6f 72 20 77  lways true for w
25350 65 6c 6c 2d 66 6f 72 6d 65 64 20 64 61 74 61 62  ell-formed datab
25360 61 73 65 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  ases..*/.#define
25370 20 43 4f 52 52 55 50 54 5f 44 42 20 20 28 73 71   CORRUPT_DB  (sq
25380 6c 69 74 65 33 43 6f 6e 66 69 67 2e 6e 65 76 65  lite3Config.neve
25390 72 43 6f 72 72 75 70 74 3d 3d 30 29 0a 0a 2f 2a  rCorrupt==0)../*
253a0 0a 2a 2a 20 43 6f 6e 74 65 78 74 20 70 6f 69 6e  .** Context poin
253b0 74 65 72 20 70 61 73 73 65 64 20 64 6f 77 6e 20  ter passed down 
253c0 74 68 72 6f 75 67 68 20 74 68 65 20 74 72 65 65  through the tree
253d0 2d 77 61 6c 6b 2e 0a 2a 2f 0a 73 74 72 75 63 74  -walk..*/.struct
253e0 20 57 61 6c 6b 65 72 20 7b 0a 20 20 50 61 72 73   Walker {.  Pars
253f0 65 20 2a 70 50 61 72 73 65 3b 20 20 20 20 20 20  e *pParse;      
25400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25410 20 20 20 20 20 20 2f 2a 20 50 61 72 73 65 72 20        /* Parser 
25420 63 6f 6e 74 65 78 74 2e 20 20 2a 2f 0a 20 20 69  context.  */.  i
25430 6e 74 20 28 2a 78 45 78 70 72 43 61 6c 6c 62 61  nt (*xExprCallba
25440 63 6b 29 28 57 61 6c 6b 65 72 2a 2c 20 45 78 70  ck)(Walker*, Exp
25450 72 2a 29 3b 20 20 20 20 20 2f 2a 20 43 61 6c 6c  r*);     /* Call
25460 62 61 63 6b 20 66 6f 72 20 65 78 70 72 65 73 73  back for express
25470 69 6f 6e 73 20 2a 2f 0a 20 20 69 6e 74 20 28 2a  ions */.  int (*
25480 78 53 65 6c 65 63 74 43 61 6c 6c 62 61 63 6b 29  xSelectCallback)
25490 28 57 61 6c 6b 65 72 2a 2c 53 65 6c 65 63 74 2a  (Walker*,Select*
254a0 29 3b 20 20 2f 2a 20 43 61 6c 6c 62 61 63 6b 20  );  /* Callback 
254b0 66 6f 72 20 53 45 4c 45 43 54 73 20 2a 2f 0a 20  for SELECTs */. 
254c0 20 76 6f 69 64 20 28 2a 78 53 65 6c 65 63 74 43   void (*xSelectC
254d0 61 6c 6c 62 61 63 6b 32 29 28 57 61 6c 6b 65 72  allback2)(Walker
254e0 2a 2c 53 65 6c 65 63 74 2a 29 3b 2f 2a 20 53 65  *,Select*);/* Se
254f0 63 6f 6e 64 20 63 61 6c 6c 62 61 63 6b 20 66 6f  cond callback fo
25500 72 20 53 45 4c 45 43 54 73 20 2a 2f 0a 20 20 69  r SELECTs */.  i
25510 6e 74 20 77 61 6c 6b 65 72 44 65 70 74 68 3b 20  nt walkerDepth; 
25520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25530 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
25540 65 72 20 6f 66 20 73 75 62 71 75 65 72 69 65 73  er of subqueries
25550 20 2a 2f 0a 20 20 75 38 20 65 43 6f 64 65 3b 20   */.  u8 eCode; 
25560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25580 2f 2a 20 41 20 73 6d 61 6c 6c 20 70 72 6f 63 65  /* A small proce
25590 73 73 69 6e 67 20 63 6f 64 65 20 2a 2f 0a 20 20  ssing code */.  
255a0 75 6e 69 6f 6e 20 7b 20 20 20 20 20 20 20 20 20  union {         
255b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
255c0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 45 78 74            /* Ext
255d0 72 61 20 64 61 74 61 20 66 6f 72 20 63 61 6c 6c  ra data for call
255e0 62 61 63 6b 20 2a 2f 0a 20 20 20 20 4e 61 6d 65  back */.    Name
255f0 43 6f 6e 74 65 78 74 20 2a 70 4e 43 3b 20 20 20  Context *pNC;   
25600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25610 20 20 20 20 20 20 2f 2a 20 4e 61 6d 69 6e 67 20        /* Naming 
25620 63 6f 6e 74 65 78 74 20 2a 2f 0a 20 20 20 20 69  context */.    i
25630 6e 74 20 6e 3b 20 20 20 20 20 20 20 20 20 20 20  nt n;           
25640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25650 20 20 20 20 20 20 20 20 20 2f 2a 20 41 20 63 6f           /* A co
25660 75 6e 74 65 72 20 2a 2f 0a 20 20 20 20 69 6e 74  unter */.    int
25670 20 69 43 75 72 3b 20 20 20 20 20 20 20 20 20 20   iCur;          
25680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25690 20 20 20 20 20 20 20 2f 2a 20 41 20 63 75 72 73         /* A curs
256a0 6f 72 20 6e 75 6d 62 65 72 20 2a 2f 0a 20 20 20  or number */.   
256b0 20 53 72 63 4c 69 73 74 20 2a 70 53 72 63 4c 69   SrcList *pSrcLi
256c0 73 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  st;             
256d0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 52             /* FR
256e0 4f 4d 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 20  OM clause */.   
256f0 20 73 74 72 75 63 74 20 53 72 63 43 6f 75 6e 74   struct SrcCount
25700 20 2a 70 53 72 63 43 6f 75 6e 74 3b 20 20 20 20   *pSrcCount;    
25710 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f             /* Co
25720 75 6e 74 69 6e 67 20 63 6f 6c 75 6d 6e 20 72 65  unting column re
25730 66 65 72 65 6e 63 65 73 20 2a 2f 0a 20 20 20 20  ferences */.    
25740 73 74 72 75 63 74 20 43 43 75 72 48 69 6e 74 20  struct CCurHint 
25750 2a 70 43 43 75 72 48 69 6e 74 3b 20 20 20 20 20  *pCCurHint;     
25760 20 20 20 20 20 20 20 20 20 20 2f 2a 20 55 73 65            /* Use
25770 64 20 62 79 20 63 6f 64 65 43 75 72 73 6f 72 48  d by codeCursorH
25780 69 6e 74 28 29 20 2a 2f 0a 20 20 20 20 69 6e 74  int() */.    int
25790 20 2a 61 69 43 6f 6c 3b 20 20 20 20 20 20 20 20   *aiCol;        
257a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
257b0 20 20 20 20 20 20 20 2f 2a 20 61 72 72 61 79 20         /* array 
257c0 6f 66 20 63 6f 6c 75 6d 6e 20 69 6e 64 65 78 65  of column indexe
257d0 73 20 2a 2f 0a 20 20 20 20 73 74 72 75 63 74 20  s */.    struct 
257e0 49 64 78 43 6f 76 65 72 20 2a 70 49 64 78 43 6f  IdxCover *pIdxCo
257f0 76 65 72 3b 20 20 20 20 20 20 20 20 20 20 20 20  ver;            
25800 20 20 20 2f 2a 20 43 68 65 63 6b 20 66 6f 72 20     /* Check for 
25810 69 6e 64 65 78 20 63 6f 76 65 72 61 67 65 20 2a  index coverage *
25820 2f 0a 20 20 20 20 73 74 72 75 63 74 20 49 64 78  /.    struct Idx
25830 45 78 70 72 54 72 61 6e 73 20 2a 70 49 64 78 54  ExprTrans *pIdxT
25840 72 61 6e 73 3b 20 20 20 20 20 20 20 20 20 20 20  rans;           
25850 2f 2a 20 43 6f 6e 76 65 72 74 20 69 64 78 65 64  /* Convert idxed
25860 20 65 78 70 72 20 74 6f 20 63 6f 6c 75 6d 6e 20   expr to column 
25870 2a 2f 0a 20 20 20 20 45 78 70 72 4c 69 73 74 20  */.    ExprList 
25880 2a 70 47 72 6f 75 70 42 79 3b 20 20 20 20 20 20  *pGroupBy;      
25890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
258a0 20 2f 2a 20 47 52 4f 55 50 20 42 59 20 63 6c 61   /* GROUP BY cla
258b0 75 73 65 20 2a 2f 0a 20 20 20 20 53 65 6c 65 63  use */.    Selec
258c0 74 20 2a 70 53 65 6c 65 63 74 3b 20 20 20 20 20  t *pSelect;     
258d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
258e0 20 20 20 20 20 2f 2a 20 48 41 56 49 4e 47 20 74       /* HAVING t
258f0 6f 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 63  o WHERE clause c
25900 74 78 20 2a 2f 0a 20 20 20 20 73 74 72 75 63 74  tx */.    struct
25910 20 57 69 6e 64 6f 77 52 65 77 72 69 74 65 20 2a   WindowRewrite *
25920 70 52 65 77 72 69 74 65 3b 20 20 20 20 20 20 20  pRewrite;       
25930 20 20 20 20 2f 2a 20 57 69 6e 64 6f 77 20 72 65      /* Window re
25940 77 72 69 74 65 20 63 6f 6e 74 65 78 74 20 2a 2f  write context */
25950 0a 20 20 20 20 73 74 72 75 63 74 20 57 68 65 72  .    struct Wher
25960 65 43 6f 6e 73 74 20 2a 70 43 6f 6e 73 74 3b 20  eConst *pConst; 
25970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
25980 2a 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 63  * WHERE clause c
25990 6f 6e 73 74 61 6e 74 73 20 2a 2f 0a 20 20 20 20  onstants */.    
259a0 73 74 72 75 63 74 20 52 65 6e 61 6d 65 43 74 78  struct RenameCtx
259b0 20 2a 70 52 65 6e 61 6d 65 3b 20 20 20 20 20 20   *pRename;      
259c0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 45 4e            /* REN
259d0 41 4d 45 20 43 4f 4c 55 4d 4e 20 63 6f 6e 74 65  AME COLUMN conte
259e0 78 74 20 2a 2f 0a 20 20 7d 20 75 3b 0a 7d 3b 0a  xt */.  } u;.};.
259f0 0a 2f 2a 20 46 6f 72 77 61 72 64 20 64 65 63 6c  ./* Forward decl
25a00 61 72 61 74 69 6f 6e 73 20 2a 2f 0a 69 6e 74 20  arations */.int 
25a10 73 71 6c 69 74 65 33 57 61 6c 6b 45 78 70 72 28  sqlite3WalkExpr(
25a20 57 61 6c 6b 65 72 2a 2c 20 45 78 70 72 2a 29 3b  Walker*, Expr*);
25a30 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 61 6c 6b  .int sqlite3Walk
25a40 45 78 70 72 4c 69 73 74 28 57 61 6c 6b 65 72 2a  ExprList(Walker*
25a50 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a 69 6e  , ExprList*);.in
25a60 74 20 73 71 6c 69 74 65 33 57 61 6c 6b 53 65 6c  t sqlite3WalkSel
25a70 65 63 74 28 57 61 6c 6b 65 72 2a 2c 20 53 65 6c  ect(Walker*, Sel
25a80 65 63 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ect*);.int sqlit
25a90 65 33 57 61 6c 6b 53 65 6c 65 63 74 45 78 70 72  e3WalkSelectExpr
25aa0 28 57 61 6c 6b 65 72 2a 2c 20 53 65 6c 65 63 74  (Walker*, Select
25ab0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57  *);.int sqlite3W
25ac0 61 6c 6b 53 65 6c 65 63 74 46 72 6f 6d 28 57 61  alkSelectFrom(Wa
25ad0 6c 6b 65 72 2a 2c 20 53 65 6c 65 63 74 2a 29 3b  lker*, Select*);
25ae0 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72  .int sqlite3Expr
25af0 57 61 6c 6b 4e 6f 6f 70 28 57 61 6c 6b 65 72 2a  WalkNoop(Walker*
25b00 2c 20 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71  , Expr*);.int sq
25b10 6c 69 74 65 33 53 65 6c 65 63 74 57 61 6c 6b 4e  lite3SelectWalkN
25b20 6f 6f 70 28 57 61 6c 6b 65 72 2a 2c 20 53 65 6c  oop(Walker*, Sel
25b30 65 63 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ect*);.int sqlit
25b40 65 33 53 65 6c 65 63 74 57 61 6c 6b 46 61 69 6c  e3SelectWalkFail
25b50 28 57 61 6c 6b 65 72 2a 2c 20 53 65 6c 65 63 74  (Walker*, Select
25b60 2a 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54  *);.#ifdef SQLIT
25b70 45 5f 44 45 42 55 47 0a 76 6f 69 64 20 73 71 6c  E_DEBUG.void sql
25b80 69 74 65 33 53 65 6c 65 63 74 57 61 6c 6b 41 73  ite3SelectWalkAs
25b90 73 65 72 74 32 28 57 61 6c 6b 65 72 2a 2c 20 53  sert2(Walker*, S
25ba0 65 6c 65 63 74 2a 29 3b 0a 23 65 6e 64 69 66 0a  elect*);.#endif.
25bb0 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 63 6f  ./*.** Return co
25bc0 64 65 20 66 72 6f 6d 20 74 68 65 20 70 61 72 73  de from the pars
25bd0 65 2d 74 72 65 65 20 77 61 6c 6b 69 6e 67 20 70  e-tree walking p
25be0 72 69 6d 69 74 69 76 65 73 20 61 6e 64 20 74 68  rimitives and th
25bf0 65 69 72 0a 2a 2a 20 63 61 6c 6c 62 61 63 6b 73  eir.** callbacks
25c00 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 57 52 43  ..*/.#define WRC
25c10 5f 43 6f 6e 74 69 6e 75 65 20 20 20 20 30 20 20  _Continue    0  
25c20 20 2f 2a 20 43 6f 6e 74 69 6e 75 65 20 64 6f 77   /* Continue dow
25c30 6e 20 69 6e 74 6f 20 63 68 69 6c 64 72 65 6e 20  n into children 
25c40 2a 2f 0a 23 64 65 66 69 6e 65 20 57 52 43 5f 50  */.#define WRC_P
25c50 72 75 6e 65 20 20 20 20 20 20 20 31 20 20 20 2f  rune       1   /
25c60 2a 20 4f 6d 69 74 20 63 68 69 6c 64 72 65 6e 20  * Omit children 
25c70 62 75 74 20 63 6f 6e 74 69 6e 75 65 20 77 61 6c  but continue wal
25c80 6b 69 6e 67 20 73 69 62 6c 69 6e 67 73 20 2a 2f  king siblings */
25c90 0a 23 64 65 66 69 6e 65 20 57 52 43 5f 41 62 6f  .#define WRC_Abo
25ca0 72 74 20 20 20 20 20 20 20 32 20 20 20 2f 2a 20  rt       2   /* 
25cb0 41 62 61 6e 64 6f 6e 20 74 68 65 20 74 72 65 65  Abandon the tree
25cc0 20 77 61 6c 6b 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20   walk */../*.** 
25cd0 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  An instance of t
25ce0 68 69 73 20 73 74 72 75 63 74 75 72 65 20 72 65  his structure re
25cf0 70 72 65 73 65 6e 74 73 20 61 20 73 65 74 20 6f  presents a set o
25d00 66 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 43 54  f one or more CT
25d10 45 73 0a 2a 2a 20 28 63 6f 6d 6d 6f 6e 20 74 61  Es.** (common ta
25d20 62 6c 65 20 65 78 70 72 65 73 73 69 6f 6e 73 29  ble expressions)
25d30 20 63 72 65 61 74 65 64 20 62 79 20 61 20 73 69   created by a si
25d40 6e 67 6c 65 20 57 49 54 48 20 63 6c 61 75 73 65  ngle WITH clause
25d50 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 57 69 74 68  ..*/.struct With
25d60 20 7b 0a 20 20 69 6e 74 20 6e 43 74 65 3b 20 20   {.  int nCte;  
25d70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25d80 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
25d90 66 20 43 54 45 73 20 69 6e 20 74 68 65 20 57 49  f CTEs in the WI
25da0 54 48 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 57  TH clause */.  W
25db0 69 74 68 20 2a 70 4f 75 74 65 72 3b 20 20 20 20  ith *pOuter;    
25dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
25dd0 2a 20 43 6f 6e 74 61 69 6e 69 6e 67 20 57 49 54  * Containing WIT
25de0 48 20 63 6c 61 75 73 65 2c 20 6f 72 20 4e 55 4c  H clause, or NUL
25df0 4c 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 43 74  L */.  struct Ct
25e00 65 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20  e {             
25e10 20 20 20 20 20 20 20 2f 2a 20 46 6f 72 20 65 61         /* For ea
25e20 63 68 20 43 54 45 20 69 6e 20 74 68 65 20 57 49  ch CTE in the WI
25e30 54 48 20 63 6c 61 75 73 65 2e 2e 2e 2e 20 2a 2f  TH clause.... */
25e40 0a 20 20 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65  .    char *zName
25e50 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
25e60 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20       /* Name of 
25e70 74 68 69 73 20 43 54 45 20 2a 2f 0a 20 20 20 20  this CTE */.    
25e80 45 78 70 72 4c 69 73 74 20 2a 70 43 6f 6c 73 3b  ExprList *pCols;
25e90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25ea0 2f 2a 20 4c 69 73 74 20 6f 66 20 65 78 70 6c 69  /* List of expli
25eb0 63 69 74 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73  cit column names
25ec0 2c 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 20 20 20  , or NULL */.   
25ed0 20 53 65 6c 65 63 74 20 2a 70 53 65 6c 65 63 74   Select *pSelect
25ee0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
25ef0 20 2f 2a 20 54 68 65 20 64 65 66 69 6e 69 74 69   /* The definiti
25f00 6f 6e 20 6f 66 20 74 68 69 73 20 43 54 45 20 2a  on of this CTE *
25f10 2f 0a 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72  /.    const char
25f20 20 2a 7a 43 74 65 45 72 72 3b 20 20 20 20 20 20   *zCteErr;      
25f30 20 20 20 20 20 20 2f 2a 20 45 72 72 6f 72 20 6d        /* Error m
25f40 65 73 73 61 67 65 20 66 6f 72 20 63 69 72 63 75  essage for circu
25f50 6c 61 72 20 72 65 66 65 72 65 6e 63 65 73 20 2a  lar references *
25f60 2f 0a 20 20 7d 20 61 5b 31 5d 3b 0a 7d 3b 0a 0a  /.  } a[1];.};..
25f70 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45  #ifdef SQLITE_DE
25f80 42 55 47 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73  BUG./*.** An ins
25f90 74 61 6e 63 65 20 6f 66 20 74 68 65 20 54 72 65  tance of the Tre
25fa0 65 56 69 65 77 20 6f 62 6a 65 63 74 20 69 73 20  eView object is 
25fb0 75 73 65 64 20 66 6f 72 20 70 72 69 6e 74 69 6e  used for printin
25fc0 67 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66  g the content of
25fd0 0a 2a 2a 20 64 61 74 61 20 73 74 72 75 63 74 75  .** data structu
25fe0 72 65 73 20 6f 6e 20 73 71 6c 69 74 65 33 44 65  res on sqlite3De
25ff0 62 75 67 50 72 69 6e 74 66 28 29 20 75 73 69 6e  bugPrintf() usin
26000 67 20 61 20 74 72 65 65 2d 6c 69 6b 65 20 76 69  g a tree-like vi
26010 65 77 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 54 72  ew..*/.struct Tr
26020 65 65 56 69 65 77 20 7b 0a 20 20 69 6e 74 20 69  eeView {.  int i
26030 4c 65 76 65 6c 3b 20 20 20 20 20 20 20 20 20 20  Level;          
26040 20 20 20 2f 2a 20 57 68 69 63 68 20 6c 65 76 65     /* Which leve
26050 6c 20 6f 66 20 74 68 65 20 74 72 65 65 20 77 65  l of the tree we
26060 20 61 72 65 20 6f 6e 20 2a 2f 0a 20 20 75 38 20   are on */.  u8 
26070 20 62 4c 69 6e 65 5b 31 30 30 5d 3b 20 20 20 20   bLine[100];    
26080 20 20 20 20 20 2f 2a 20 44 72 61 77 20 76 65 72       /* Draw ver
26090 74 69 63 61 6c 20 69 6e 20 63 6f 6c 75 6d 6e 20  tical in column 
260a0 69 20 69 66 20 62 4c 69 6e 65 5b 69 5d 20 69 73  i if bLine[i] is
260b0 20 74 72 75 65 20 2a 2f 0a 7d 3b 0a 23 65 6e 64   true */.};.#end
260c0 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 44 45 42  if /* SQLITE_DEB
260d0 55 47 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68 69  UG */../*.** Thi
260e0 73 20 6f 62 6a 65 63 74 20 69 73 20 75 73 65 64  s object is used
260f0 20 69 6e 20 76 61 72 69 6f 69 75 73 20 77 61 79   in varioius way
26100 73 2c 20 61 6c 6c 20 72 65 6c 61 74 65 64 20 74  s, all related t
26110 6f 20 77 69 6e 64 6f 77 20 66 75 6e 63 74 69 6f  o window functio
26120 6e 73 0a 2a 2a 0a 2a 2a 20 20 20 28 31 29 20 41  ns.**.**   (1) A
26130 20 73 69 6e 67 6c 65 20 69 6e 73 74 61 6e 63 65   single instance
26140 20 6f 66 20 74 68 69 73 20 73 74 72 75 63 74 75   of this structu
26150 72 65 20 69 73 20 61 74 74 61 63 68 65 64 20 74  re is attached t
26160 6f 20 74 68 65 0a 2a 2a 20 20 20 20 20 20 20 74  o the.**       t
26170 68 65 20 45 78 70 72 2e 70 57 69 6e 20 66 69 65  he Expr.pWin fie
26180 6c 64 20 66 6f 72 20 65 61 63 68 20 77 69 6e 64  ld for each wind
26190 6f 77 20 66 75 6e 63 74 69 6f 6e 20 69 6e 20 61  ow function in a
261a0 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 74 72 65  n expression tre
261b0 65 2e 0a 2a 2a 20 20 20 20 20 20 20 54 68 69 73  e..**       This
261c0 20 6f 62 6a 65 63 74 20 68 6f 6c 64 73 20 74 68   object holds th
261d0 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 63 6f  e information co
261e0 6e 74 61 69 6e 65 64 20 69 6e 20 74 68 65 20 4f  ntained in the O
261f0 56 45 52 20 63 6c 61 75 73 65 2c 0a 2a 2a 20 20  VER clause,.**  
26200 20 20 20 20 20 70 6c 75 73 20 61 64 64 69 74 69       plus additi
26210 6f 6e 61 6c 20 66 69 65 6c 64 73 20 75 73 65 64  onal fields used
26220 20 64 75 72 69 6e 67 20 63 6f 64 65 20 67 65 6e   during code gen
26230 65 72 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 20  eration..**.**  
26240 20 28 32 29 20 41 6c 6c 20 77 69 6e 64 6f 77 20   (2) All window 
26250 66 75 6e 63 74 69 6f 6e 73 20 69 6e 20 61 20 73  functions in a s
26260 69 6e 67 6c 65 20 53 45 4c 45 43 54 20 66 6f 72  ingle SELECT for
26270 6d 20 61 20 6c 69 6e 6b 65 64 2d 6c 69 73 74 0a  m a linked-list.
26280 2a 2a 20 20 20 20 20 20 20 61 74 74 61 63 68 65  **       attache
26290 64 20 74 6f 20 53 65 6c 65 63 74 2e 70 57 69 6e  d to Select.pWin
262a0 2e 20 20 54 68 65 20 57 69 6e 64 6f 77 2e 70 46  .  The Window.pF
262b0 75 6e 63 20 61 6e 64 20 57 69 6e 64 6f 77 2e 70  unc and Window.p
262c0 45 78 70 72 0a 2a 2a 20 20 20 20 20 20 20 66 69  Expr.**       fi
262d0 65 6c 64 73 20 70 6f 69 6e 74 20 62 61 63 6b 20  elds point back 
262e0 74 6f 20 74 68 65 20 65 78 70 72 65 73 73 69 6f  to the expressio
262f0 6e 20 74 68 61 74 20 69 73 20 74 68 65 20 77 69  n that is the wi
26300 6e 64 6f 77 20 66 75 6e 63 74 69 6f 6e 2e 0a 2a  ndow function..*
26310 2a 0a 2a 2a 20 20 20 28 33 29 20 54 68 65 20 74  *.**   (3) The t
26320 65 72 6d 73 20 6f 66 20 74 68 65 20 57 49 4e 44  erms of the WIND
26330 4f 57 20 63 6c 61 75 73 65 20 6f 66 20 61 20 53  OW clause of a S
26340 45 4c 45 43 54 20 61 72 65 20 69 6e 73 74 61 6e  ELECT are instan
26350 63 65 73 20 6f 66 20 74 68 69 73 0a 2a 2a 20 20  ces of this.**  
26360 20 20 20 20 20 6f 62 6a 65 63 74 20 6f 6e 20 61       object on a
26370 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 61 74 74   linked list att
26380 61 63 68 65 64 20 74 6f 20 53 65 6c 65 63 74 2e  ached to Select.
26390 70 57 69 6e 44 65 66 6e 2e 0a 2a 2a 0a 2a 2a 20  pWinDefn..**.** 
263a0 54 68 65 20 75 73 65 73 20 28 31 29 20 61 6e 64  The uses (1) and
263b0 20 28 32 29 20 61 72 65 20 72 65 61 6c 6c 79 20   (2) are really 
263c0 74 68 65 20 73 61 6d 65 20 57 69 6e 64 6f 77 20  the same Window 
263d0 6f 62 6a 65 63 74 20 74 68 61 74 20 6a 75 73 74  object that just
263e0 20 68 61 70 70 65 6e 73 0a 2a 2a 20 74 6f 20 62   happens.** to b
263f0 65 20 61 63 63 65 73 73 69 62 6c 65 20 69 6e 20  e accessible in 
26400 74 77 6f 20 64 69 66 66 65 72 65 6e 74 20 77 61  two different wa
26410 79 73 2e 20 20 55 73 65 20 28 33 29 20 69 73 20  ys.  Use (3) is 
26420 61 72 65 20 73 65 70 61 72 61 74 65 20 6f 62 6a  are separate obj
26430 65 63 74 73 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  ects..*/.struct 
26440 57 69 6e 64 6f 77 20 7b 0a 20 20 63 68 61 72 20  Window {.  char 
26450 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20  *zName;         
26460 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 77 69     /* Name of wi
26470 6e 64 6f 77 20 28 6d 61 79 20 62 65 20 4e 55 4c  ndow (may be NUL
26480 4c 29 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74  L) */.  ExprList
26490 20 2a 70 50 61 72 74 69 74 69 6f 6e 3b 20 20 20   *pPartition;   
264a0 2f 2a 20 50 41 52 54 49 54 49 4f 4e 20 42 59 20  /* PARTITION BY 
264b0 63 6c 61 75 73 65 20 2a 2f 0a 20 20 45 78 70 72  clause */.  Expr
264c0 4c 69 73 74 20 2a 70 4f 72 64 65 72 42 79 3b 20  List *pOrderBy; 
264d0 20 20 20 20 2f 2a 20 4f 52 44 45 52 20 42 59 20      /* ORDER BY 
264e0 63 6c 61 75 73 65 20 2a 2f 0a 20 20 75 38 20 65  clause */.  u8 e
264f0 54 79 70 65 3b 20 20 20 20 20 20 20 20 20 20 20  Type;           
26500 20 20 20 20 2f 2a 20 54 4b 5f 52 41 4e 47 45 20      /* TK_RANGE 
26510 6f 72 20 54 4b 5f 52 4f 57 53 20 2a 2f 0a 20 20  or TK_ROWS */.  
26520 75 38 20 65 53 74 61 72 74 3b 20 20 20 20 20 20  u8 eStart;      
26530 20 20 20 20 20 20 20 20 2f 2a 20 55 4e 42 4f 55          /* UNBOU
26540 4e 44 45 44 2c 20 43 55 52 52 45 4e 54 2c 20 50  NDED, CURRENT, P
26550 52 45 43 45 44 49 4e 47 20 6f 72 20 46 4f 4c 4c  RECEDING or FOLL
26560 4f 57 49 4e 47 20 2a 2f 0a 20 20 75 38 20 65 45  OWING */.  u8 eE
26570 6e 64 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  nd;             
26580 20 20 20 2f 2a 20 55 4e 42 4f 55 4e 44 45 44 2c     /* UNBOUNDED,
26590 20 43 55 52 52 45 4e 54 2c 20 50 52 45 43 45 44   CURRENT, PRECED
265a0 49 4e 47 20 6f 72 20 46 4f 4c 4c 4f 57 49 4e 47  ING or FOLLOWING
265b0 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 53 74 61   */.  Expr *pSta
265c0 72 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  rt;           /*
265d0 20 45 78 70 72 65 73 73 69 6f 6e 20 66 6f 72 20   Expression for 
265e0 22 3c 65 78 70 72 3e 20 50 52 45 43 45 44 49 4e  "<expr> PRECEDIN
265f0 47 22 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 45  G" */.  Expr *pE
26600 6e 64 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  nd;             
26610 2f 2a 20 45 78 70 72 65 73 73 69 6f 6e 20 66 6f  /* Expression fo
26620 72 20 22 3c 65 78 70 72 3e 20 46 4f 4c 4c 4f 57  r "<expr> FOLLOW
26630 49 4e 47 22 20 2a 2f 0a 20 20 57 69 6e 64 6f 77  ING" */.  Window
26640 20 2a 70 4e 65 78 74 57 69 6e 3b 20 20 20 20 20   *pNextWin;     
26650 20 20 2f 2a 20 4e 65 78 74 20 77 69 6e 64 6f 77    /* Next window
26660 20 66 75 6e 63 74 69 6f 6e 20 62 65 6c 6f 6e 67   function belong
26670 69 6e 67 20 74 6f 20 74 68 69 73 20 53 45 4c 45  ing to this SELE
26680 43 54 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 46  CT */.  Expr *pF
26690 69 6c 74 65 72 3b 20 20 20 20 20 20 20 20 20 20  ilter;          
266a0 2f 2a 20 54 68 65 20 46 49 4c 54 45 52 20 65 78  /* The FILTER ex
266b0 70 72 65 73 73 69 6f 6e 20 2a 2f 0a 20 20 46 75  pression */.  Fu
266c0 6e 63 44 65 66 20 2a 70 46 75 6e 63 3b 20 20 20  ncDef *pFunc;   
266d0 20 20 20 20 20 20 2f 2a 20 54 68 65 20 66 75 6e        /* The fun
266e0 63 74 69 6f 6e 20 2a 2f 0a 20 20 69 6e 74 20 69  ction */.  int i
266f0 45 70 68 43 73 72 3b 20 20 20 20 20 20 20 20 20  EphCsr;         
26700 20 20 20 2f 2a 20 50 61 72 74 69 74 69 6f 6e 20     /* Partition 
26710 62 75 66 66 65 72 20 6f 72 20 50 65 65 72 20 62  buffer or Peer b
26720 75 66 66 65 72 20 2a 2f 0a 20 20 69 6e 74 20 72  uffer */.  int r
26730 65 67 41 63 63 75 6d 3b 0a 20 20 69 6e 74 20 72  egAccum;.  int r
26740 65 67 52 65 73 75 6c 74 3b 0a 20 20 69 6e 74 20  egResult;.  int 
26750 63 73 72 41 70 70 3b 20 20 20 20 20 20 20 20 20  csrApp;         
26760 20 20 20 20 2f 2a 20 46 75 6e 63 74 69 6f 6e 20      /* Function 
26770 63 75 72 73 6f 72 20 28 75 73 65 64 20 62 79 20  cursor (used by 
26780 6d 69 6e 2f 6d 61 78 29 20 2a 2f 0a 20 20 69 6e  min/max) */.  in
26790 74 20 72 65 67 41 70 70 3b 20 20 20 20 20 20 20  t regApp;       
267a0 20 20 20 20 20 20 2f 2a 20 46 75 6e 63 74 69 6f        /* Functio
267b0 6e 20 72 65 67 69 73 74 65 72 20 28 61 6c 73 6f  n register (also
267c0 20 75 73 65 64 20 62 79 20 6d 69 6e 2f 6d 61 78   used by min/max
267d0 29 20 2a 2f 0a 20 20 69 6e 74 20 72 65 67 50 61  ) */.  int regPa
267e0 72 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  rt;            /
267f0 2a 20 46 69 72 73 74 20 69 6e 20 61 20 73 65 74  * First in a set
26800 20 6f 66 20 72 65 67 69 73 74 65 72 73 20 68 6f   of registers ho
26810 6c 64 69 6e 67 20 50 41 52 54 49 54 49 4f 4e 20  lding PARTITION 
26820 42 59 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  BY.             
26830 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20               ** 
26840 61 6e 64 20 4f 52 44 45 52 20 42 59 20 76 61 6c  and ORDER BY val
26850 75 65 73 20 66 6f 72 20 74 68 65 20 77 69 6e 64  ues for the wind
26860 6f 77 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 4f  ow */.  Expr *pO
26870 77 6e 65 72 3b 20 20 20 20 20 20 20 20 20 20 20  wner;           
26880 2f 2a 20 45 78 70 72 65 73 73 69 6f 6e 20 6f 62  /* Expression ob
26890 6a 65 63 74 20 74 68 69 73 20 77 69 6e 64 6f 77  ject this window
268a0 20 69 73 20 61 74 74 61 63 68 65 64 20 74 6f 20   is attached to 
268b0 2a 2f 0a 20 20 69 6e 74 20 6e 42 75 66 66 65 72  */.  int nBuffer
268c0 43 6f 6c 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  Col;         /* 
268d0 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e  Number of column
268e0 73 20 69 6e 20 62 75 66 66 65 72 20 74 61 62 6c  s in buffer tabl
268f0 65 20 2a 2f 0a 20 20 69 6e 74 20 69 41 72 67 43  e */.  int iArgC
26900 6f 6c 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  ol;            /
26910 2a 20 4f 66 66 73 65 74 20 6f 66 20 66 69 72 73  * Offset of firs
26920 74 20 61 72 67 75 6d 65 6e 74 20 66 6f 72 20 74  t argument for t
26930 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a  his function */.
26940 7d 3b 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  };..#ifndef SQLI
26950 54 45 5f 4f 4d 49 54 5f 57 49 4e 44 4f 57 46 55  TE_OMIT_WINDOWFU
26960 4e 43 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 57  NC.void sqlite3W
26970 69 6e 64 6f 77 44 65 6c 65 74 65 28 73 71 6c 69  indowDelete(sqli
26980 74 65 33 2a 2c 20 57 69 6e 64 6f 77 2a 29 3b 0a  te3*, Window*);.
26990 76 6f 69 64 20 73 71 6c 69 74 65 33 57 69 6e 64  void sqlite3Wind
269a0 6f 77 4c 69 73 74 44 65 6c 65 74 65 28 73 71 6c  owListDelete(sql
269b0 69 74 65 33 20 2a 64 62 2c 20 57 69 6e 64 6f 77  ite3 *db, Window
269c0 20 2a 70 29 3b 0a 57 69 6e 64 6f 77 20 2a 73 71   *p);.Window *sq
269d0 6c 69 74 65 33 57 69 6e 64 6f 77 41 6c 6c 6f 63  lite3WindowAlloc
269e0 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e  (Parse*, int, in
269f0 74 2c 20 45 78 70 72 2a 2c 20 69 6e 74 20 2c 20  t, Expr*, int , 
26a00 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  Expr*);.void sql
26a10 69 74 65 33 57 69 6e 64 6f 77 41 74 74 61 63 68  ite3WindowAttach
26a20 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20  (Parse*, Expr*, 
26a30 57 69 6e 64 6f 77 2a 29 3b 0a 69 6e 74 20 73 71  Window*);.int sq
26a40 6c 69 74 65 33 57 69 6e 64 6f 77 43 6f 6d 70 61  lite3WindowCompa
26a50 72 65 28 50 61 72 73 65 2a 2c 20 57 69 6e 64 6f  re(Parse*, Windo
26a60 77 2a 2c 20 57 69 6e 64 6f 77 2a 29 3b 0a 76 6f  w*, Window*);.vo
26a70 69 64 20 73 71 6c 69 74 65 33 57 69 6e 64 6f 77  id sqlite3Window
26a80 43 6f 64 65 49 6e 69 74 28 50 61 72 73 65 2a 2c  CodeInit(Parse*,
26a90 20 57 69 6e 64 6f 77 2a 29 3b 0a 76 6f 69 64 20   Window*);.void 
26aa0 73 71 6c 69 74 65 33 57 69 6e 64 6f 77 43 6f 64  sqlite3WindowCod
26ab0 65 53 74 65 70 28 50 61 72 73 65 2a 2c 20 53 65  eStep(Parse*, Se
26ac0 6c 65 63 74 2a 2c 20 57 68 65 72 65 49 6e 66 6f  lect*, WhereInfo
26ad0 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 69 6e  *, int, int);.in
26ae0 74 20 73 71 6c 69 74 65 33 57 69 6e 64 6f 77 52  t sqlite3WindowR
26af0 65 77 72 69 74 65 28 50 61 72 73 65 2a 2c 20 53  ewrite(Parse*, S
26b00 65 6c 65 63 74 2a 29 3b 0a 69 6e 74 20 73 71 6c  elect*);.int sql
26b10 69 74 65 33 45 78 70 61 6e 64 53 75 62 71 75 65  ite3ExpandSubque
26b20 72 79 28 50 61 72 73 65 2a 2c 20 73 74 72 75 63  ry(Parse*, struc
26b30 74 20 53 72 63 4c 69 73 74 5f 69 74 65 6d 2a 29  t SrcList_item*)
26b40 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 57 69  ;.void sqlite3Wi
26b50 6e 64 6f 77 55 70 64 61 74 65 28 50 61 72 73 65  ndowUpdate(Parse
26b60 2a 2c 20 57 69 6e 64 6f 77 2a 2c 20 57 69 6e 64  *, Window*, Wind
26b70 6f 77 2a 2c 20 46 75 6e 63 44 65 66 2a 29 3b 0a  ow*, FuncDef*);.
26b80 57 69 6e 64 6f 77 20 2a 73 71 6c 69 74 65 33 57  Window *sqlite3W
26b90 69 6e 64 6f 77 44 75 70 28 73 71 6c 69 74 65 33  indowDup(sqlite3
26ba0 20 2a 64 62 2c 20 45 78 70 72 20 2a 70 4f 77 6e   *db, Expr *pOwn
26bb0 65 72 2c 20 57 69 6e 64 6f 77 20 2a 70 29 3b 0a  er, Window *p);.
26bc0 57 69 6e 64 6f 77 20 2a 73 71 6c 69 74 65 33 57  Window *sqlite3W
26bd0 69 6e 64 6f 77 4c 69 73 74 44 75 70 28 73 71 6c  indowListDup(sql
26be0 69 74 65 33 20 2a 64 62 2c 20 57 69 6e 64 6f 77  ite3 *db, Window
26bf0 20 2a 70 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74   *p);.void sqlit
26c00 65 33 57 69 6e 64 6f 77 46 75 6e 63 74 69 6f 6e  e3WindowFunction
26c10 73 28 76 6f 69 64 29 3b 0a 23 65 6c 73 65 0a 23  s(void);.#else.#
26c20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 57   define sqlite3W
26c30 69 6e 64 6f 77 44 65 6c 65 74 65 28 61 2c 62 29  indowDelete(a,b)
26c40 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
26c50 33 57 69 6e 64 6f 77 46 75 6e 63 74 69 6f 6e 73  3WindowFunctions
26c60 28 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  ().# define sqli
26c70 74 65 33 57 69 6e 64 6f 77 41 74 74 61 63 68 28  te3WindowAttach(
26c80 61 2c 62 2c 63 29 0a 23 65 6e 64 69 66 0a 0a 2f  a,b,c).#endif../
26c90 2a 0a 2a 2a 20 41 73 73 75 6d 69 6e 67 20 7a 49  *.** Assuming zI
26ca0 6e 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20  n points to the 
26cb0 66 69 72 73 74 20 62 79 74 65 20 6f 66 20 61 20  first byte of a 
26cc0 55 54 46 2d 38 20 63 68 61 72 61 63 74 65 72 2c  UTF-8 character,
26cd0 0a 2a 2a 20 61 64 76 61 6e 63 65 20 7a 49 6e 20  .** advance zIn 
26ce0 74 6f 20 70 6f 69 6e 74 20 74 6f 20 74 68 65 20  to point to the 
26cf0 66 69 72 73 74 20 62 79 74 65 20 6f 66 20 74 68  first byte of th
26d00 65 20 6e 65 78 74 20 55 54 46 2d 38 20 63 68 61  e next UTF-8 cha
26d10 72 61 63 74 65 72 2e 0a 2a 2f 0a 23 64 65 66 69  racter..*/.#defi
26d20 6e 65 20 53 51 4c 49 54 45 5f 53 4b 49 50 5f 55  ne SQLITE_SKIP_U
26d30 54 46 38 28 7a 49 6e 29 20 7b 20 20 20 20 20 20  TF8(zIn) {      
26d40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26d50 20 20 5c 0a 20 20 69 66 28 20 28 2a 28 7a 49 6e    \.  if( (*(zIn
26d60 2b 2b 29 29 3e 3d 30 78 63 30 20 29 7b 20 20 20  ++))>=0xc0 ){   
26d70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26d80 20 20 20 20 20 20 20 20 20 20 20 5c 0a 20 20 20             \.   
26d90 20 77 68 69 6c 65 28 20 28 2a 7a 49 6e 20 26 20   while( (*zIn & 
26da0 30 78 63 30 29 3d 3d 30 78 38 30 20 29 7b 20 7a  0xc0)==0x80 ){ z
26db0 49 6e 2b 2b 3b 20 7d 20 20 20 20 20 20 20 20 20  In++; }         
26dc0 20 20 20 20 5c 0a 20 20 7d 20 20 20 20 20 20 20      \.  }       
26dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26de0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26df0 20 20 20 20 20 20 20 20 20 20 20 20 20 5c 0a 7d               \.}
26e00 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 53 51 4c 49  ../*.** The SQLI
26e10 54 45 5f 2a 5f 42 4b 50 54 20 6d 61 63 72 6f 73  TE_*_BKPT macros
26e20 20 61 72 65 20 73 75 62 73 74 69 74 75 74 65 73   are substitutes
26e30 20 66 6f 72 20 74 68 65 20 65 72 72 6f 72 20 63   for the error c
26e40 6f 64 65 73 20 77 69 74 68 0a 2a 2a 20 74 68 65  odes with.** the
26e50 20 73 61 6d 65 20 6e 61 6d 65 20 62 75 74 20 77   same name but w
26e60 69 74 68 6f 75 74 20 74 68 65 20 5f 42 4b 50 54  ithout the _BKPT
26e70 20 73 75 66 66 69 78 2e 20 20 54 68 65 73 65 20   suffix.  These 
26e80 6d 61 63 72 6f 73 20 69 6e 76 6f 6b 65 0a 2a 2a  macros invoke.**
26e90 20 72 6f 75 74 69 6e 65 73 20 74 68 61 74 20 72   routines that r
26ea0 65 70 6f 72 74 20 74 68 65 20 6c 69 6e 65 2d 6e  eport the line-n
26eb0 75 6d 62 65 72 20 6f 6e 20 77 68 69 63 68 20 74  umber on which t
26ec0 68 65 20 65 72 72 6f 72 20 6f 72 69 67 69 6e 61  he error origina
26ed0 74 65 64 0a 2a 2a 20 75 73 69 6e 67 20 73 71 6c  ted.** using sql
26ee0 69 74 65 33 5f 6c 6f 67 28 29 2e 20 20 54 68 65  ite3_log().  The
26ef0 20 72 6f 75 74 69 6e 65 73 20 61 6c 73 6f 20 70   routines also p
26f00 72 6f 76 69 64 65 20 61 20 63 6f 6e 76 65 6e 69  rovide a conveni
26f10 65 6e 74 20 70 6c 61 63 65 0a 2a 2a 20 74 6f 20  ent place.** to 
26f20 73 65 74 20 61 20 64 65 62 75 67 67 65 72 20 62  set a debugger b
26f30 72 65 61 6b 70 6f 69 6e 74 2e 0a 2a 2f 0a 69 6e  reakpoint..*/.in
26f40 74 20 73 71 6c 69 74 65 33 52 65 70 6f 72 74 45  t sqlite3ReportE
26f50 72 72 6f 72 28 69 6e 74 20 69 45 72 72 2c 20 69  rror(int iErr, i
26f60 6e 74 20 6c 69 6e 65 6e 6f 2c 20 63 6f 6e 73 74  nt lineno, const
26f70 20 63 68 61 72 20 2a 7a 54 79 70 65 29 3b 0a 69   char *zType);.i
26f80 6e 74 20 73 71 6c 69 74 65 33 43 6f 72 72 75 70  nt sqlite3Corrup
26f90 74 45 72 72 6f 72 28 69 6e 74 29 3b 0a 69 6e 74  tError(int);.int
26fa0 20 73 71 6c 69 74 65 33 4d 69 73 75 73 65 45 72   sqlite3MisuseEr
26fb0 72 6f 72 28 69 6e 74 29 3b 0a 69 6e 74 20 73 71  ror(int);.int sq
26fc0 6c 69 74 65 33 43 61 6e 74 6f 70 65 6e 45 72 72  lite3CantopenErr
26fd0 6f 72 28 69 6e 74 29 3b 0a 23 64 65 66 69 6e 65  or(int);.#define
26fe0 20 53 51 4c 49 54 45 5f 43 4f 52 52 55 50 54 5f   SQLITE_CORRUPT_
26ff0 42 4b 50 54 20 73 71 6c 69 74 65 33 43 6f 72 72  BKPT sqlite3Corr
27000 75 70 74 45 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f  uptError(__LINE_
27010 5f 29 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  _).#define SQLIT
27020 45 5f 4d 49 53 55 53 45 5f 42 4b 50 54 20 73 71  E_MISUSE_BKPT sq
27030 6c 69 74 65 33 4d 69 73 75 73 65 45 72 72 6f 72  lite3MisuseError
27040 28 5f 5f 4c 49 4e 45 5f 5f 29 0a 23 64 65 66 69  (__LINE__).#defi
27050 6e 65 20 53 51 4c 49 54 45 5f 43 41 4e 54 4f 50  ne SQLITE_CANTOP
27060 45 4e 5f 42 4b 50 54 20 73 71 6c 69 74 65 33 43  EN_BKPT sqlite3C
27070 61 6e 74 6f 70 65 6e 45 72 72 6f 72 28 5f 5f 4c  antopenError(__L
27080 49 4e 45 5f 5f 29 0a 23 69 66 64 65 66 20 53 51  INE__).#ifdef SQ
27090 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 69 6e 74  LITE_DEBUG.  int
270a0 20 73 71 6c 69 74 65 33 4e 6f 6d 65 6d 45 72 72   sqlite3NomemErr
270b0 6f 72 28 69 6e 74 29 3b 0a 20 20 69 6e 74 20 73  or(int);.  int s
270c0 71 6c 69 74 65 33 49 6f 65 72 72 6e 6f 6d 65 6d  qlite3Ioerrnomem
270d0 45 72 72 6f 72 28 69 6e 74 29 3b 0a 20 20 69 6e  Error(int);.  in
270e0 74 20 73 71 6c 69 74 65 33 43 6f 72 72 75 70 74  t sqlite3Corrupt
270f0 50 67 6e 6f 45 72 72 6f 72 28 69 6e 74 2c 50 67  PgnoError(int,Pg
27100 6e 6f 29 3b 0a 23 20 64 65 66 69 6e 65 20 53 51  no);.# define SQ
27110 4c 49 54 45 5f 4e 4f 4d 45 4d 5f 42 4b 50 54 20  LITE_NOMEM_BKPT 
27120 73 71 6c 69 74 65 33 4e 6f 6d 65 6d 45 72 72 6f  sqlite3NomemErro
27130 72 28 5f 5f 4c 49 4e 45 5f 5f 29 0a 23 20 64 65  r(__LINE__).# de
27140 66 69 6e 65 20 53 51 4c 49 54 45 5f 49 4f 45 52  fine SQLITE_IOER
27150 52 5f 4e 4f 4d 45 4d 5f 42 4b 50 54 20 73 71 6c  R_NOMEM_BKPT sql
27160 69 74 65 33 49 6f 65 72 72 6e 6f 6d 65 6d 45 72  ite3IoerrnomemEr
27170 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 29 0a 23 20  ror(__LINE__).# 
27180 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 4f  define SQLITE_CO
27190 52 52 55 50 54 5f 50 47 4e 4f 28 50 29 20 73 71  RRUPT_PGNO(P) sq
271a0 6c 69 74 65 33 43 6f 72 72 75 70 74 50 67 6e 6f  lite3CorruptPgno
271b0 45 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 2c 28  Error(__LINE__,(
271c0 50 29 29 0a 23 65 6c 73 65 0a 23 20 64 65 66 69  P)).#else.# defi
271d0 6e 65 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 5f  ne SQLITE_NOMEM_
271e0 42 4b 50 54 20 53 51 4c 49 54 45 5f 4e 4f 4d 45  BKPT SQLITE_NOME
271f0 4d 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  M.# define SQLIT
27200 45 5f 49 4f 45 52 52 5f 4e 4f 4d 45 4d 5f 42 4b  E_IOERR_NOMEM_BK
27210 50 54 20 53 51 4c 49 54 45 5f 49 4f 45 52 52 5f  PT SQLITE_IOERR_
27220 4e 4f 4d 45 4d 0a 23 20 64 65 66 69 6e 65 20 53  NOMEM.# define S
27230 51 4c 49 54 45 5f 43 4f 52 52 55 50 54 5f 50 47  QLITE_CORRUPT_PG
27240 4e 4f 28 50 29 20 73 71 6c 69 74 65 33 43 6f 72  NO(P) sqlite3Cor
27250 72 75 70 74 45 72 72 6f 72 28 5f 5f 4c 49 4e 45  ruptError(__LINE
27260 5f 5f 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  __).#endif../*.*
27270 2a 20 46 54 53 33 20 61 6e 64 20 46 54 53 34 20  * FTS3 and FTS4 
27280 62 6f 74 68 20 72 65 71 75 69 72 65 20 76 69 72  both require vir
27290 74 75 61 6c 20 74 61 62 6c 65 20 73 75 70 70 6f  tual table suppo
272a0 72 74 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65  rt.*/.#if define
272b0 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  d(SQLITE_OMIT_VI
272c0 52 54 55 41 4c 54 41 42 4c 45 29 0a 23 20 75 6e  RTUALTABLE).# un
272d0 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  def SQLITE_ENABL
272e0 45 5f 46 54 53 33 0a 23 20 75 6e 64 65 66 20 53  E_FTS3.# undef S
272f0 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53  QLITE_ENABLE_FTS
27300 34 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  4.#endif../*.** 
27310 46 54 53 34 20 69 73 20 72 65 61 6c 6c 79 20 61  FTS4 is really a
27320 6e 20 65 78 74 65 6e 73 69 6f 6e 20 66 6f 72 20  n extension for 
27330 46 54 53 33 2e 20 20 49 74 20 69 73 20 65 6e 61  FTS3.  It is ena
27340 62 6c 65 64 20 75 73 69 6e 67 20 74 68 65 0a 2a  bled using the.*
27350 2a 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  * SQLITE_ENABLE_
27360 46 54 53 33 20 6d 61 63 72 6f 2e 20 20 42 75 74  FTS3 macro.  But
27370 20 74 6f 20 61 76 6f 69 64 20 63 6f 6e 66 75 73   to avoid confus
27380 69 6f 6e 20 77 65 20 61 6c 73 6f 20 63 61 6c 6c  ion we also call
27390 0a 2a 2a 20 74 68 65 20 53 51 4c 49 54 45 5f 45  .** the SQLITE_E
273a0 4e 41 42 4c 45 5f 46 54 53 34 20 6d 61 63 72 6f  NABLE_FTS4 macro
273b0 20 74 6f 20 73 65 72 76 65 20 61 73 20 61 6e 20   to serve as an 
273c0 61 6c 69 61 73 20 66 6f 72 20 53 51 4c 49 54 45  alias for SQLITE
273d0 5f 45 4e 41 42 4c 45 5f 46 54 53 33 2e 0a 2a 2f  _ENABLE_FTS3..*/
273e0 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c  .#if defined(SQL
273f0 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 34 29  ITE_ENABLE_FTS4)
27400 20 26 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c   && !defined(SQL
27410 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33 29  ITE_ENABLE_FTS3)
27420 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
27430 5f 45 4e 41 42 4c 45 5f 46 54 53 33 20 31 0a 23  _ENABLE_FTS3 1.#
27440 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  endif../*.** The
27450 20 63 74 79 70 65 2e 68 20 68 65 61 64 65 72 20   ctype.h header 
27460 69 73 20 6e 65 65 64 65 64 20 66 6f 72 20 6e 6f  is needed for no
27470 6e 2d 41 53 43 49 49 20 73 79 73 74 65 6d 73 2e  n-ASCII systems.
27480 20 20 49 74 20 69 73 20 61 6c 73 6f 0a 2a 2a 20    It is also.** 
27490 6e 65 65 64 65 64 20 62 79 20 46 54 53 33 20 77  needed by FTS3 w
274a0 68 65 6e 20 46 54 53 33 20 69 73 20 69 6e 63 6c  hen FTS3 is incl
274b0 75 64 65 64 20 69 6e 20 74 68 65 20 61 6d 61 6c  uded in the amal
274c0 67 61 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 23 69 66  gamation..*/.#if
274d0 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
274e0 5f 41 53 43 49 49 29 20 7c 7c 20 5c 0a 20 20 20  _ASCII) || \.   
274f0 20 28 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   (defined(SQLITE
27500 5f 45 4e 41 42 4c 45 5f 46 54 53 33 29 20 26 26  _ENABLE_FTS3) &&
27510 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
27520 41 4d 41 4c 47 41 4d 41 54 49 4f 4e 29 29 0a 23  AMALGAMATION)).#
27530 20 69 6e 63 6c 75 64 65 20 3c 63 74 79 70 65 2e   include <ctype.
27540 68 3e 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  h>.#endif../*.**
27550 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d   The following m
27560 61 63 72 6f 73 20 6d 69 6d 69 63 20 74 68 65 20  acros mimic the 
27570 73 74 61 6e 64 61 72 64 20 6c 69 62 72 61 72 79  standard library
27580 20 66 75 6e 63 74 69 6f 6e 73 20 74 6f 75 70 70   functions toupp
27590 65 72 28 29 2c 0a 2a 2a 20 69 73 73 70 61 63 65  er(),.** isspace
275a0 28 29 2c 20 69 73 61 6c 6e 75 6d 28 29 2c 20 69  (), isalnum(), i
275b0 73 64 69 67 69 74 28 29 20 61 6e 64 20 69 73 78  sdigit() and isx
275c0 64 69 67 69 74 28 29 2c 20 72 65 73 70 65 63 74  digit(), respect
275d0 69 76 65 6c 79 2e 20 54 68 65 0a 2a 2a 20 73 71  ively. The.** sq
275e0 6c 69 74 65 20 76 65 72 73 69 6f 6e 73 20 6f 6e  lite versions on
275f0 6c 79 20 77 6f 72 6b 20 66 6f 72 20 41 53 43 49  ly work for ASCI
27600 49 20 63 68 61 72 61 63 74 65 72 73 2c 20 72 65  I characters, re
27610 67 61 72 64 6c 65 73 73 20 6f 66 20 6c 6f 63 61  gardless of loca
27620 6c 65 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51  le..*/.#ifdef SQ
27630 4c 49 54 45 5f 41 53 43 49 49 0a 23 20 64 65 66  LITE_ASCII.# def
27640 69 6e 65 20 73 71 6c 69 74 65 33 54 6f 75 70 70  ine sqlite3Toupp
27650 65 72 28 78 29 20 20 28 28 78 29 26 7e 28 73 71  er(x)  ((x)&~(sq
27660 6c 69 74 65 33 43 74 79 70 65 4d 61 70 5b 28 75  lite3CtypeMap[(u
27670 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29  nsigned char)(x)
27680 5d 26 30 78 32 30 29 29 0a 23 20 64 65 66 69 6e  ]&0x20)).# defin
27690 65 20 73 71 6c 69 74 65 33 49 73 73 70 61 63 65  e sqlite3Isspace
276a0 28 78 29 20 20 20 28 73 71 6c 69 74 65 33 43 74  (x)   (sqlite3Ct
276b0 79 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64  ypeMap[(unsigned
276c0 20 63 68 61 72 29 28 78 29 5d 26 30 78 30 31 29   char)(x)]&0x01)
276d0 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
276e0 33 49 73 61 6c 6e 75 6d 28 78 29 20 20 20 28 73  3Isalnum(x)   (s
276f0 71 6c 69 74 65 33 43 74 79 70 65 4d 61 70 5b 28  qlite3CtypeMap[(
27700 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78  unsigned char)(x
27710 29 5d 26 30 78 30 36 29 0a 23 20 64 65 66 69 6e  )]&0x06).# defin
27720 65 20 73 71 6c 69 74 65 33 49 73 61 6c 70 68 61  e sqlite3Isalpha
27730 28 78 29 20 20 20 28 73 71 6c 69 74 65 33 43 74  (x)   (sqlite3Ct
27740 79 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64  ypeMap[(unsigned
27750 20 63 68 61 72 29 28 78 29 5d 26 30 78 30 32 29   char)(x)]&0x02)
27760 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
27770 33 49 73 64 69 67 69 74 28 78 29 20 20 20 28 73  3Isdigit(x)   (s
27780 71 6c 69 74 65 33 43 74 79 70 65 4d 61 70 5b 28  qlite3CtypeMap[(
27790 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78  unsigned char)(x
277a0 29 5d 26 30 78 30 34 29 0a 23 20 64 65 66 69 6e  )]&0x04).# defin
277b0 65 20 73 71 6c 69 74 65 33 49 73 78 64 69 67 69  e sqlite3Isxdigi
277c0 74 28 78 29 20 20 28 73 71 6c 69 74 65 33 43 74  t(x)  (sqlite3Ct
277d0 79 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64  ypeMap[(unsigned
277e0 20 63 68 61 72 29 28 78 29 5d 26 30 78 30 38 29   char)(x)]&0x08)
277f0 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
27800 33 54 6f 6c 6f 77 65 72 28 78 29 20 20 20 28 73  3Tolower(x)   (s
27810 71 6c 69 74 65 33 55 70 70 65 72 54 6f 4c 6f 77  qlite3UpperToLow
27820 65 72 5b 28 75 6e 73 69 67 6e 65 64 20 63 68 61  er[(unsigned cha
27830 72 29 28 78 29 5d 29 0a 23 20 64 65 66 69 6e 65  r)(x)]).# define
27840 20 73 71 6c 69 74 65 33 49 73 71 75 6f 74 65 28   sqlite3Isquote(
27850 78 29 20 20 20 28 73 71 6c 69 74 65 33 43 74 79  x)   (sqlite3Cty
27860 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64 20  peMap[(unsigned 
27870 63 68 61 72 29 28 78 29 5d 26 30 78 38 30 29 0a  char)(x)]&0x80).
27880 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73  #else.# define s
27890 71 6c 69 74 65 33 54 6f 75 70 70 65 72 28 78 29  qlite3Toupper(x)
278a0 20 20 20 74 6f 75 70 70 65 72 28 28 75 6e 73 69     toupper((unsi
278b0 67 6e 65 64 20 63 68 61 72 29 28 78 29 29 0a 23  gned char)(x)).#
278c0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49   define sqlite3I
278d0 73 73 70 61 63 65 28 78 29 20 20 20 69 73 73 70  sspace(x)   issp
278e0 61 63 65 28 28 75 6e 73 69 67 6e 65 64 20 63 68  ace((unsigned ch
278f0 61 72 29 28 78 29 29 0a 23 20 64 65 66 69 6e 65  ar)(x)).# define
27900 20 73 71 6c 69 74 65 33 49 73 61 6c 6e 75 6d 28   sqlite3Isalnum(
27910 78 29 20 20 20 69 73 61 6c 6e 75 6d 28 28 75 6e  x)   isalnum((un
27920 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 29  signed char)(x))
27930 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
27940 33 49 73 61 6c 70 68 61 28 78 29 20 20 20 69 73  3Isalpha(x)   is
27950 61 6c 70 68 61 28 28 75 6e 73 69 67 6e 65 64 20  alpha((unsigned 
27960 63 68 61 72 29 28 78 29 29 0a 23 20 64 65 66 69  char)(x)).# defi
27970 6e 65 20 73 71 6c 69 74 65 33 49 73 64 69 67 69  ne sqlite3Isdigi
27980 74 28 78 29 20 20 20 69 73 64 69 67 69 74 28 28  t(x)   isdigit((
27990 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78  unsigned char)(x
279a0 29 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  )).# define sqli
279b0 74 65 33 49 73 78 64 69 67 69 74 28 78 29 20 20  te3Isxdigit(x)  
279c0 69 73 78 64 69 67 69 74 28 28 75 6e 73 69 67 6e  isxdigit((unsign
279d0 65 64 20 63 68 61 72 29 28 78 29 29 0a 23 20 64  ed char)(x)).# d
279e0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54 6f 6c  efine sqlite3Tol
279f0 6f 77 65 72 28 78 29 20 20 20 74 6f 6c 6f 77 65  ower(x)   tolowe
27a00 72 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72  r((unsigned char
27a10 29 28 78 29 29 0a 23 20 64 65 66 69 6e 65 20 73  )(x)).# define s
27a20 71 6c 69 74 65 33 49 73 71 75 6f 74 65 28 78 29  qlite3Isquote(x)
27a30 20 20 20 28 28 78 29 3d 3d 27 22 27 7c 7c 28 78     ((x)=='"'||(x
27a40 29 3d 3d 27 5c 27 27 7c 7c 28 78 29 3d 3d 27 5b  )=='\''||(x)=='[
27a50 27 7c 7c 28 78 29 3d 3d 27 60 27 29 0a 23 65 6e  '||(x)=='`').#en
27a60 64 69 66 0a 69 6e 74 20 73 71 6c 69 74 65 33 49  dif.int sqlite3I
27a70 73 49 64 43 68 61 72 28 75 38 29 3b 0a 0a 2f 2a  sIdChar(u8);../*
27a80 0a 2a 2a 20 49 6e 74 65 72 6e 61 6c 20 66 75 6e  .** Internal fun
27a90 63 74 69 6f 6e 20 70 72 6f 74 6f 74 79 70 65 73  ction prototypes
27aa0 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 53  .*/.int sqlite3S
27ab0 74 72 49 43 6d 70 28 63 6f 6e 73 74 20 63 68 61  trICmp(const cha
27ac0 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  r*,const char*);
27ad0 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 74 72 6c  .int sqlite3Strl
27ae0 65 6e 33 30 28 63 6f 6e 73 74 20 63 68 61 72 2a  en30(const char*
27af0 29 3b 0a 23 64 65 66 69 6e 65 20 73 71 6c 69 74  );.#define sqlit
27b00 65 33 53 74 72 6c 65 6e 33 30 4e 4e 28 43 29 20  e3Strlen30NN(C) 
27b10 28 73 74 72 6c 65 6e 28 43 29 26 30 78 33 66 66  (strlen(C)&0x3ff
27b20 66 66 66 66 66 29 0a 63 68 61 72 20 2a 73 71 6c  fffff).char *sql
27b30 69 74 65 33 43 6f 6c 75 6d 6e 54 79 70 65 28 43  ite3ColumnType(C
27b40 6f 6c 75 6d 6e 2a 2c 63 68 61 72 2a 29 3b 0a 23  olumn*,char*);.#
27b50 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74  define sqlite3St
27b60 72 4e 49 43 6d 70 20 73 71 6c 69 74 65 33 5f 73  rNICmp sqlite3_s
27b70 74 72 6e 69 63 6d 70 0a 0a 69 6e 74 20 73 71 6c  trnicmp..int sql
27b80 69 74 65 33 4d 61 6c 6c 6f 63 49 6e 69 74 28 76  ite3MallocInit(v
27b90 6f 69 64 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  oid);.void sqlit
27ba0 65 33 4d 61 6c 6c 6f 63 45 6e 64 28 76 6f 69 64  e3MallocEnd(void
27bb0 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33  );.void *sqlite3
27bc0 4d 61 6c 6c 6f 63 28 75 36 34 29 3b 0a 76 6f 69  Malloc(u64);.voi
27bd0 64 20 2a 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63  d *sqlite3Malloc
27be0 5a 65 72 6f 28 75 36 34 29 3b 0a 76 6f 69 64 20  Zero(u64);.void 
27bf0 2a 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63  *sqlite3DbMalloc
27c00 5a 65 72 6f 28 73 71 6c 69 74 65 33 2a 2c 20 75  Zero(sqlite3*, u
27c10 36 34 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74  64);.void *sqlit
27c20 65 33 44 62 4d 61 6c 6c 6f 63 52 61 77 28 73 71  e3DbMallocRaw(sq
27c30 6c 69 74 65 33 2a 2c 20 75 36 34 29 3b 0a 76 6f  lite3*, u64);.vo
27c40 69 64 20 2a 73 71 6c 69 74 65 33 44 62 4d 61 6c  id *sqlite3DbMal
27c50 6c 6f 63 52 61 77 4e 4e 28 73 71 6c 69 74 65 33  locRawNN(sqlite3
27c60 2a 2c 20 75 36 34 29 3b 0a 63 68 61 72 20 2a 73  *, u64);.char *s
27c70 71 6c 69 74 65 33 44 62 53 74 72 44 75 70 28 73  qlite3DbStrDup(s
27c80 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68  qlite3*,const ch
27c90 61 72 2a 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69  ar*);.char *sqli
27ca0 74 65 33 44 62 53 74 72 4e 44 75 70 28 73 71 6c  te3DbStrNDup(sql
27cb0 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72  ite3*,const char
27cc0 2a 2c 20 75 36 34 29 3b 0a 63 68 61 72 20 2a 73  *, u64);.char *s
27cd0 71 6c 69 74 65 33 44 62 53 70 61 6e 44 75 70 28  qlite3DbSpanDup(
27ce0 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63  sqlite3*,const c
27cf0 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  har*,const char*
27d00 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33  );.void *sqlite3
27d10 52 65 61 6c 6c 6f 63 28 76 6f 69 64 2a 2c 20 75  Realloc(void*, u
27d20 36 34 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74  64);.void *sqlit
27d30 65 33 44 62 52 65 61 6c 6c 6f 63 4f 72 46 72 65  e3DbReallocOrFre
27d40 65 28 73 71 6c 69 74 65 33 20 2a 2c 20 76 6f 69  e(sqlite3 *, voi
27d50 64 20 2a 2c 20 75 36 34 29 3b 0a 76 6f 69 64 20  d *, u64);.void 
27d60 2a 73 71 6c 69 74 65 33 44 62 52 65 61 6c 6c 6f  *sqlite3DbReallo
27d70 63 28 73 71 6c 69 74 65 33 20 2a 2c 20 76 6f 69  c(sqlite3 *, voi
27d80 64 20 2a 2c 20 75 36 34 29 3b 0a 76 6f 69 64 20  d *, u64);.void 
27d90 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 73 71  sqlite3DbFree(sq
27da0 6c 69 74 65 33 2a 2c 20 76 6f 69 64 2a 29 3b 0a  lite3*, void*);.
27db0 76 6f 69 64 20 73 71 6c 69 74 65 33 44 62 46 72  void sqlite3DbFr
27dc0 65 65 4e 4e 28 73 71 6c 69 74 65 33 2a 2c 20 76  eeNN(sqlite3*, v
27dd0 6f 69 64 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  oid*);.int sqlit
27de0 65 33 4d 61 6c 6c 6f 63 53 69 7a 65 28 76 6f 69  e3MallocSize(voi
27df0 64 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  d*);.int sqlite3
27e00 44 62 4d 61 6c 6c 6f 63 53 69 7a 65 28 73 71 6c  DbMallocSize(sql
27e10 69 74 65 33 2a 2c 20 76 6f 69 64 2a 29 3b 0a 76  ite3*, void*);.v
27e20 6f 69 64 20 2a 73 71 6c 69 74 65 33 50 61 67 65  oid *sqlite3Page
27e30 4d 61 6c 6c 6f 63 28 69 6e 74 29 3b 0a 76 6f 69  Malloc(int);.voi
27e40 64 20 73 71 6c 69 74 65 33 50 61 67 65 46 72 65  d sqlite3PageFre
27e50 65 28 76 6f 69 64 2a 29 3b 0a 76 6f 69 64 20 73  e(void*);.void s
27e60 71 6c 69 74 65 33 4d 65 6d 53 65 74 44 65 66 61  qlite3MemSetDefa
27e70 75 6c 74 28 76 6f 69 64 29 3b 0a 23 69 66 6e 64  ult(void);.#ifnd
27e80 65 66 20 53 51 4c 49 54 45 5f 55 4e 54 45 53 54  ef SQLITE_UNTEST
27e90 41 42 4c 45 0a 76 6f 69 64 20 73 71 6c 69 74 65  ABLE.void sqlite
27ea0 33 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 48 6f 6f  3BenignMallocHoo
27eb0 6b 73 28 76 6f 69 64 20 28 2a 29 28 76 6f 69 64  ks(void (*)(void
27ec0 29 2c 20 76 6f 69 64 20 28 2a 29 28 76 6f 69 64  ), void (*)(void
27ed0 29 29 3b 0a 23 65 6e 64 69 66 0a 69 6e 74 20 73  ));.#endif.int s
27ee0 71 6c 69 74 65 33 48 65 61 70 4e 65 61 72 6c 79  qlite3HeapNearly
27ef0 46 75 6c 6c 28 76 6f 69 64 29 3b 0a 0a 2f 2a 0a  Full(void);../*.
27f00 2a 2a 20 4f 6e 20 73 79 73 74 65 6d 73 20 77 69  ** On systems wi
27f10 74 68 20 61 6d 70 6c 65 20 73 74 61 63 6b 20 73  th ample stack s
27f20 70 61 63 65 20 61 6e 64 20 74 68 61 74 20 73 75  pace and that su
27f30 70 70 6f 72 74 20 61 6c 6c 6f 63 61 28 29 2c 20  pport alloca(), 
27f40 6d 61 6b 65 0a 2a 2a 20 75 73 65 20 6f 66 20 61  make.** use of a
27f50 6c 6c 6f 63 61 28 29 20 74 6f 20 6f 62 74 61 69  lloca() to obtai
27f60 6e 20 73 70 61 63 65 20 66 6f 72 20 6c 61 72 67  n space for larg
27f70 65 20 61 75 74 6f 6d 61 74 69 63 20 6f 62 6a 65  e automatic obje
27f80 63 74 73 2e 20 20 42 79 20 64 65 66 61 75 6c 74  cts.  By default
27f90 2c 0a 2a 2a 20 6f 62 74 61 69 6e 20 73 70 61 63  ,.** obtain spac
27fa0 65 20 66 72 6f 6d 20 6d 61 6c 6c 6f 63 28 29 2e  e from malloc().
27fb0 0a 2a 2a 0a 2a 2a 20 54 68 65 20 61 6c 6c 6f 63  .**.** The alloc
27fc0 61 28 29 20 72 6f 75 74 69 6e 65 20 6e 65 76 65  a() routine neve
27fd0 72 20 72 65 74 75 72 6e 73 20 4e 55 4c 4c 2e 20  r returns NULL. 
27fe0 20 54 68 69 73 20 77 69 6c 6c 20 63 61 75 73 65   This will cause
27ff0 20 63 6f 64 65 20 70 61 74 68 73 0a 2a 2a 20 74   code paths.** t
28000 68 61 74 20 64 65 61 6c 20 77 69 74 68 20 73 71  hat deal with sq
28010 6c 69 74 65 33 53 74 61 63 6b 41 6c 6c 6f 63 28  lite3StackAlloc(
28020 29 20 66 61 69 6c 75 72 65 73 20 74 6f 20 62 65  ) failures to be
28030 20 75 6e 72 65 61 63 68 61 62 6c 65 2e 0a 2a 2f   unreachable..*/
28040 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 55  .#ifdef SQLITE_U
28050 53 45 5f 41 4c 4c 4f 43 41 0a 23 20 64 65 66 69  SE_ALLOCA.# defi
28060 6e 65 20 73 71 6c 69 74 65 33 53 74 61 63 6b 41  ne sqlite3StackA
28070 6c 6c 6f 63 52 61 77 28 44 2c 4e 29 20 20 20 61  llocRaw(D,N)   a
28080 6c 6c 6f 63 61 28 4e 29 0a 23 20 64 65 66 69 6e  lloca(N).# defin
28090 65 20 73 71 6c 69 74 65 33 53 74 61 63 6b 41 6c  e sqlite3StackAl
280a0 6c 6f 63 5a 65 72 6f 28 44 2c 4e 29 20 20 6d 65  locZero(D,N)  me
280b0 6d 73 65 74 28 61 6c 6c 6f 63 61 28 4e 29 2c 20  mset(alloca(N), 
280c0 30 2c 20 4e 29 0a 23 20 64 65 66 69 6e 65 20 73  0, N).# define s
280d0 71 6c 69 74 65 33 53 74 61 63 6b 46 72 65 65 28  qlite3StackFree(
280e0 44 2c 50 29 0a 23 65 6c 73 65 0a 23 20 64 65 66  D,P).#else.# def
280f0 69 6e 65 20 73 71 6c 69 74 65 33 53 74 61 63 6b  ine sqlite3Stack
28100 41 6c 6c 6f 63 52 61 77 28 44 2c 4e 29 20 20 20  AllocRaw(D,N)   
28110 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 52  sqlite3DbMallocR
28120 61 77 28 44 2c 4e 29 0a 23 20 64 65 66 69 6e 65  aw(D,N).# define
28130 20 73 71 6c 69 74 65 33 53 74 61 63 6b 41 6c 6c   sqlite3StackAll
28140 6f 63 5a 65 72 6f 28 44 2c 4e 29 20 20 73 71 6c  ocZero(D,N)  sql
28150 69 74 65 33 44 62 4d 61 6c 6c 6f 63 5a 65 72 6f  ite3DbMallocZero
28160 28 44 2c 4e 29 0a 23 20 64 65 66 69 6e 65 20 73  (D,N).# define s
28170 71 6c 69 74 65 33 53 74 61 63 6b 46 72 65 65 28  qlite3StackFree(
28180 44 2c 50 29 20 20 20 20 20 20 20 73 71 6c 69 74  D,P)       sqlit
28190 65 33 44 62 46 72 65 65 28 44 2c 50 29 0a 23 65  e3DbFree(D,P).#e
281a0 6e 64 69 66 0a 0a 2f 2a 20 44 6f 20 6e 6f 74 20  ndif../* Do not 
281b0 61 6c 6c 6f 77 20 62 6f 74 68 20 4d 45 4d 53 59  allow both MEMSY
281c0 53 35 20 61 6e 64 20 4d 45 4d 53 59 53 33 20 74  S5 and MEMSYS3 t
281d0 6f 20 62 65 20 64 65 66 69 6e 65 64 20 74 6f 67  o be defined tog
281e0 65 74 68 65 72 2e 20 20 49 66 20 74 68 65 79 0a  ether.  If they.
281f0 2a 2a 20 61 72 65 2c 20 64 69 73 61 62 6c 65 20  ** are, disable 
28200 4d 45 4d 53 59 53 33 0a 2a 2f 0a 23 69 66 64 65  MEMSYS3.*/.#ifde
28210 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
28220 4d 45 4d 53 59 53 35 0a 63 6f 6e 73 74 20 73 71  MEMSYS5.const sq
28230 6c 69 74 65 33 5f 6d 65 6d 5f 6d 65 74 68 6f 64  lite3_mem_method
28240 73 20 2a 73 71 6c 69 74 65 33 4d 65 6d 47 65 74  s *sqlite3MemGet
28250 4d 65 6d 73 79 73 35 28 76 6f 69 64 29 3b 0a 23  Memsys5(void);.#
28260 75 6e 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  undef SQLITE_ENA
28270 42 4c 45 5f 4d 45 4d 53 59 53 33 0a 23 65 6e 64  BLE_MEMSYS3.#end
28280 69 66 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  if.#ifdef SQLITE
28290 5f 45 4e 41 42 4c 45 5f 4d 45 4d 53 59 53 33 0a  _ENABLE_MEMSYS3.
282a0 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d 65  const sqlite3_me
282b0 6d 5f 6d 65 74 68 6f 64 73 20 2a 73 71 6c 69 74  m_methods *sqlit
282c0 65 33 4d 65 6d 47 65 74 4d 65 6d 73 79 73 33 28  e3MemGetMemsys3(
282d0 76 6f 69 64 29 3b 0a 23 65 6e 64 69 66 0a 0a 0a  void);.#endif...
282e0 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4d  #ifndef SQLITE_M
282f0 55 54 45 58 5f 4f 4d 49 54 0a 20 20 73 71 6c 69  UTEX_OMIT.  sqli
28300 74 65 33 5f 6d 75 74 65 78 5f 6d 65 74 68 6f 64  te3_mutex_method
28310 73 20 63 6f 6e 73 74 20 2a 73 71 6c 69 74 65 33  s const *sqlite3
28320 44 65 66 61 75 6c 74 4d 75 74 65 78 28 76 6f 69  DefaultMutex(voi
28330 64 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75  d);.  sqlite3_mu
28340 74 65 78 5f 6d 65 74 68 6f 64 73 20 63 6f 6e 73  tex_methods cons
28350 74 20 2a 73 71 6c 69 74 65 33 4e 6f 6f 70 4d 75  t *sqlite3NoopMu
28360 74 65 78 28 76 6f 69 64 29 3b 0a 20 20 73 71 6c  tex(void);.  sql
28370 69 74 65 33 5f 6d 75 74 65 78 20 2a 73 71 6c 69  ite3_mutex *sqli
28380 74 65 33 4d 75 74 65 78 41 6c 6c 6f 63 28 69 6e  te3MutexAlloc(in
28390 74 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65  t);.  int sqlite
283a0 33 4d 75 74 65 78 49 6e 69 74 28 76 6f 69 64 29  3MutexInit(void)
283b0 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 4d  ;.  int sqlite3M
283c0 75 74 65 78 45 6e 64 28 76 6f 69 64 29 3b 0a 23  utexEnd(void);.#
283d0 65 6e 64 69 66 0a 23 69 66 20 21 64 65 66 69 6e  endif.#if !defin
283e0 65 64 28 53 51 4c 49 54 45 5f 4d 55 54 45 58 5f  ed(SQLITE_MUTEX_
283f0 4f 4d 49 54 29 20 26 26 20 21 64 65 66 69 6e 65  OMIT) && !define
28400 64 28 53 51 4c 49 54 45 5f 4d 55 54 45 58 5f 4e  d(SQLITE_MUTEX_N
28410 4f 4f 50 29 0a 20 20 76 6f 69 64 20 73 71 6c 69  OOP).  void sqli
28420 74 65 33 4d 65 6d 6f 72 79 42 61 72 72 69 65 72  te3MemoryBarrier
28430 28 76 6f 69 64 29 3b 0a 23 65 6c 73 65 0a 23 20  (void);.#else.# 
28440 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 4d 65  define sqlite3Me
28450 6d 6f 72 79 42 61 72 72 69 65 72 28 29 0a 23 65  moryBarrier().#e
28460 6e 64 69 66 0a 0a 73 71 6c 69 74 65 33 5f 69 6e  ndif..sqlite3_in
28470 74 36 34 20 73 71 6c 69 74 65 33 53 74 61 74 75  t64 sqlite3Statu
28480 73 56 61 6c 75 65 28 69 6e 74 29 3b 0a 76 6f 69  sValue(int);.voi
28490 64 20 73 71 6c 69 74 65 33 53 74 61 74 75 73 55  d sqlite3StatusU
284a0 70 28 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69  p(int, int);.voi
284b0 64 20 73 71 6c 69 74 65 33 53 74 61 74 75 73 44  d sqlite3StatusD
284c0 6f 77 6e 28 69 6e 74 2c 20 69 6e 74 29 3b 0a 76  own(int, int);.v
284d0 6f 69 64 20 73 71 6c 69 74 65 33 53 74 61 74 75  oid sqlite3Statu
284e0 73 48 69 67 68 77 61 74 65 72 28 69 6e 74 2c 20  sHighwater(int, 
284f0 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  int);.int sqlite
28500 33 4c 6f 6f 6b 61 73 69 64 65 55 73 65 64 28 73  3LookasideUsed(s
28510 71 6c 69 74 65 33 2a 2c 69 6e 74 2a 29 3b 0a 0a  qlite3*,int*);..
28520 2f 2a 20 41 63 63 65 73 73 20 74 6f 20 6d 75 74  /* Access to mut
28530 65 78 65 73 20 75 73 65 64 20 62 79 20 73 71 6c  exes used by sql
28540 69 74 65 33 5f 73 74 61 74 75 73 28 29 20 2a 2f  ite3_status() */
28550 0a 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 20 2a  .sqlite3_mutex *
28560 73 71 6c 69 74 65 33 50 63 61 63 68 65 31 4d 75  sqlite3Pcache1Mu
28570 74 65 78 28 76 6f 69 64 29 3b 0a 73 71 6c 69 74  tex(void);.sqlit
28580 65 33 5f 6d 75 74 65 78 20 2a 73 71 6c 69 74 65  e3_mutex *sqlite
28590 33 4d 61 6c 6c 6f 63 4d 75 74 65 78 28 76 6f 69  3MallocMutex(voi
285a0 64 29 3b 0a 0a 23 69 66 20 64 65 66 69 6e 65 64  d);..#if defined
285b0 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4d  (SQLITE_ENABLE_M
285c0 55 4c 54 49 54 48 52 45 41 44 45 44 5f 43 48 45  ULTITHREADED_CHE
285d0 43 4b 53 29 20 26 26 20 21 64 65 66 69 6e 65 64  CKS) && !defined
285e0 28 53 51 4c 49 54 45 5f 4d 55 54 45 58 5f 4f 4d  (SQLITE_MUTEX_OM
285f0 49 54 29 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  IT).void sqlite3
28600 4d 75 74 65 78 57 61 72 6e 4f 6e 43 6f 6e 74 65  MutexWarnOnConte
28610 6e 74 69 6f 6e 28 73 71 6c 69 74 65 33 5f 6d 75  ntion(sqlite3_mu
28620 74 65 78 2a 29 3b 0a 23 65 6c 73 65 0a 23 20 64  tex*);.#else.# d
28630 65 66 69 6e 65 20 73 71 6c 69 74 65 33 4d 75 74  efine sqlite3Mut
28640 65 78 57 61 72 6e 4f 6e 43 6f 6e 74 65 6e 74 69  exWarnOnContenti
28650 6f 6e 28 78 29 0a 23 65 6e 64 69 66 0a 0a 23 69  on(x).#endif..#i
28660 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
28670 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54  T_FLOATING_POINT
28680 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 49 73  .  int sqlite3Is
28690 4e 61 4e 28 64 6f 75 62 6c 65 29 3b 0a 23 65 6c  NaN(double);.#el
286a0 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  se.# define sqli
286b0 74 65 33 49 73 4e 61 4e 28 58 29 20 20 30 0a 23  te3IsNaN(X)  0.#
286c0 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20  endif../*.** An 
286d0 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20  instance of the 
286e0 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74  following struct
286f0 75 72 65 20 68 6f 6c 64 73 20 69 6e 66 6f 72 6d  ure holds inform
28700 61 74 69 6f 6e 20 61 62 6f 75 74 20 53 51 4c 0a  ation about SQL.
28710 2a 2a 20 66 75 6e 63 74 69 6f 6e 73 20 61 72 67  ** functions arg
28720 75 6d 65 6e 74 73 20 74 68 61 74 20 61 72 65 20  uments that are 
28730 74 68 65 20 70 61 72 61 6d 65 74 65 72 73 20 74  the parameters t
28740 6f 20 74 68 65 20 70 72 69 6e 74 66 28 29 20 66  o the printf() f
28750 75 6e 63 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75  unction..*/.stru
28760 63 74 20 50 72 69 6e 74 66 41 72 67 75 6d 65 6e  ct PrintfArgumen
28770 74 73 20 7b 0a 20 20 69 6e 74 20 6e 41 72 67 3b  ts {.  int nArg;
28780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28790 2f 2a 20 54 6f 74 61 6c 20 6e 75 6d 62 65 72 20  /* Total number 
287a0 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f 0a  of arguments */.
287b0 20 20 69 6e 74 20 6e 55 73 65 64 3b 20 20 20 20    int nUsed;    
287c0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
287d0 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74  mber of argument
287e0 73 20 75 73 65 64 20 73 6f 20 66 61 72 20 2a 2f  s used so far */
287f0 0a 20 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  .  sqlite3_value
28800 20 2a 2a 61 70 41 72 67 3b 20 20 20 2f 2a 20 54   **apArg;   /* T
28810 68 65 20 61 72 67 75 6d 65 6e 74 20 76 61 6c 75  he argument valu
28820 65 73 20 2a 2f 0a 7d 3b 0a 0a 63 68 61 72 20 2a  es */.};..char *
28830 73 71 6c 69 74 65 33 4d 50 72 69 6e 74 66 28 73  sqlite3MPrintf(s
28840 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68  qlite3*,const ch
28850 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 63 68 61 72 20  ar*, ...);.char 
28860 2a 73 71 6c 69 74 65 33 56 4d 50 72 69 6e 74 66  *sqlite3VMPrintf
28870 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20  (sqlite3*,const 
28880 63 68 61 72 2a 2c 20 76 61 5f 6c 69 73 74 29 3b  char*, va_list);
28890 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c  .#if defined(SQL
288a0 49 54 45 5f 44 45 42 55 47 29 20 7c 7c 20 64 65  ITE_DEBUG) || de
288b0 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 48 41 56  fined(SQLITE_HAV
288c0 45 5f 4f 53 5f 54 52 41 43 45 29 0a 20 20 76 6f  E_OS_TRACE).  vo
288d0 69 64 20 73 71 6c 69 74 65 33 44 65 62 75 67 50  id sqlite3DebugP
288e0 72 69 6e 74 66 28 63 6f 6e 73 74 20 63 68 61 72  rintf(const char
288f0 2a 2c 20 2e 2e 2e 29 3b 0a 23 65 6e 64 69 66 0a  *, ...);.#endif.
28900 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49  #if defined(SQLI
28910 54 45 5f 54 45 53 54 29 0a 20 20 76 6f 69 64 20  TE_TEST).  void 
28920 2a 73 71 6c 69 74 65 33 54 65 73 74 54 65 78 74  *sqlite3TestText
28930 54 6f 50 74 72 28 63 6f 6e 73 74 20 63 68 61 72  ToPtr(const char
28940 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 20  *);.#endif..#if 
28950 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44  defined(SQLITE_D
28960 45 42 55 47 29 0a 20 20 76 6f 69 64 20 73 71 6c  EBUG).  void sql
28970 69 74 65 33 54 72 65 65 56 69 65 77 45 78 70 72  ite3TreeViewExpr
28980 28 54 72 65 65 56 69 65 77 2a 2c 20 63 6f 6e 73  (TreeView*, cons
28990 74 20 45 78 70 72 2a 2c 20 75 38 29 3b 0a 20 20  t Expr*, u8);.  
289a0 76 6f 69 64 20 73 71 6c 69 74 65 33 54 72 65 65  void sqlite3Tree
289b0 56 69 65 77 42 61 72 65 45 78 70 72 4c 69 73 74  ViewBareExprList
289c0 28 54 72 65 65 56 69 65 77 2a 2c 20 63 6f 6e 73  (TreeView*, cons
289d0 74 20 45 78 70 72 4c 69 73 74 2a 2c 20 63 6f 6e  t ExprList*, con
289e0 73 74 20 63 68 61 72 2a 29 3b 0a 20 20 76 6f 69  st char*);.  voi
289f0 64 20 73 71 6c 69 74 65 33 54 72 65 65 56 69 65  d sqlite3TreeVie
28a00 77 45 78 70 72 4c 69 73 74 28 54 72 65 65 56 69  wExprList(TreeVi
28a10 65 77 2a 2c 20 63 6f 6e 73 74 20 45 78 70 72 4c  ew*, const ExprL
28a20 69 73 74 2a 2c 20 75 38 2c 20 63 6f 6e 73 74 20  ist*, u8, const 
28a30 63 68 61 72 2a 29 3b 0a 20 20 76 6f 69 64 20 73  char*);.  void s
28a40 71 6c 69 74 65 33 54 72 65 65 56 69 65 77 53 72  qlite3TreeViewSr
28a50 63 4c 69 73 74 28 54 72 65 65 56 69 65 77 2a 2c  cList(TreeView*,
28a60 20 63 6f 6e 73 74 20 53 72 63 4c 69 73 74 2a 29   const SrcList*)
28a70 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
28a80 54 72 65 65 56 69 65 77 53 65 6c 65 63 74 28 54  TreeViewSelect(T
28a90 72 65 65 56 69 65 77 2a 2c 20 63 6f 6e 73 74 20  reeView*, const 
28aa0 53 65 6c 65 63 74 2a 2c 20 75 38 29 3b 0a 20 20  Select*, u8);.  
28ab0 76 6f 69 64 20 73 71 6c 69 74 65 33 54 72 65 65  void sqlite3Tree
28ac0 56 69 65 77 57 69 74 68 28 54 72 65 65 56 69 65  ViewWith(TreeVie
28ad0 77 2a 2c 20 63 6f 6e 73 74 20 57 69 74 68 2a 2c  w*, const With*,
28ae0 20 75 38 29 3b 0a 23 69 66 6e 64 65 66 20 53 51   u8);.#ifndef SQ
28af0 4c 49 54 45 5f 4f 4d 49 54 5f 57 49 4e 44 4f 57  LITE_OMIT_WINDOW
28b00 46 55 4e 43 0a 20 20 76 6f 69 64 20 73 71 6c 69  FUNC.  void sqli
28b10 74 65 33 54 72 65 65 56 69 65 77 57 69 6e 64 6f  te3TreeViewWindo
28b20 77 28 54 72 65 65 56 69 65 77 2a 2c 20 63 6f 6e  w(TreeView*, con
28b30 73 74 20 57 69 6e 64 6f 77 2a 2c 20 75 38 29 3b  st Window*, u8);
28b40 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 54  .  void sqlite3T
28b50 72 65 65 56 69 65 77 57 69 6e 46 75 6e 63 28 54  reeViewWinFunc(T
28b60 72 65 65 56 69 65 77 2a 2c 20 63 6f 6e 73 74 20  reeView*, const 
28b70 57 69 6e 64 6f 77 2a 2c 20 75 38 29 3b 0a 23 65  Window*, u8);.#e
28b80 6e 64 69 66 0a 23 65 6e 64 69 66 0a 0a 0a 76 6f  ndif.#endif...vo
28b90 69 64 20 73 71 6c 69 74 65 33 53 65 74 53 74 72  id sqlite3SetStr
28ba0 69 6e 67 28 63 68 61 72 20 2a 2a 2c 20 73 71 6c  ing(char **, sql
28bb0 69 74 65 33 2a 2c 20 63 6f 6e 73 74 20 63 68 61  ite3*, const cha
28bc0 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  r*);.void sqlite
28bd0 33 45 72 72 6f 72 4d 73 67 28 50 61 72 73 65 2a  3ErrorMsg(Parse*
28be0 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 2e  , const char*, .
28bf0 2e 2e 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  ..);.void sqlite
28c00 33 44 65 71 75 6f 74 65 28 63 68 61 72 2a 29 3b  3Dequote(char*);
28c10 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 54 6f 6b  .void sqlite3Tok
28c20 65 6e 49 6e 69 74 28 54 6f 6b 65 6e 2a 2c 63 68  enInit(Token*,ch
28c30 61 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  ar*);.int sqlite
28c40 33 4b 65 79 77 6f 72 64 43 6f 64 65 28 63 6f 6e  3KeywordCode(con
28c50 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72  st unsigned char
28c60 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c  *, int);.int sql
28c70 69 74 65 33 52 75 6e 50 61 72 73 65 72 28 50 61  ite3RunParser(Pa
28c80 72 73 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  rse*, const char
28c90 2a 2c 20 63 68 61 72 20 2a 2a 29 3b 0a 76 6f 69  *, char **);.voi
28ca0 64 20 73 71 6c 69 74 65 33 46 69 6e 69 73 68 43  d sqlite3FinishC
28cb0 6f 64 69 6e 67 28 50 61 72 73 65 2a 29 3b 0a 69  oding(Parse*);.i
28cc0 6e 74 20 73 71 6c 69 74 65 33 47 65 74 54 65 6d  nt sqlite3GetTem
28cd0 70 52 65 67 28 50 61 72 73 65 2a 29 3b 0a 76 6f  pReg(Parse*);.vo
28ce0 69 64 20 73 71 6c 69 74 65 33 52 65 6c 65 61 73  id sqlite3Releas
28cf0 65 54 65 6d 70 52 65 67 28 50 61 72 73 65 2a 2c  eTempReg(Parse*,
28d00 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  int);.int sqlite
28d10 33 47 65 74 54 65 6d 70 52 61 6e 67 65 28 50 61  3GetTempRange(Pa
28d20 72 73 65 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20  rse*,int);.void 
28d30 73 71 6c 69 74 65 33 52 65 6c 65 61 73 65 54 65  sqlite3ReleaseTe
28d40 6d 70 52 61 6e 67 65 28 50 61 72 73 65 2a 2c 69  mpRange(Parse*,i
28d50 6e 74 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  nt,int);.void sq
28d60 6c 69 74 65 33 43 6c 65 61 72 54 65 6d 70 52 65  lite3ClearTempRe
28d70 67 43 61 63 68 65 28 50 61 72 73 65 2a 29 3b 0a  gCache(Parse*);.
28d80 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45  #ifdef SQLITE_DE
28d90 42 55 47 0a 69 6e 74 20 73 71 6c 69 74 65 33 4e  BUG.int sqlite3N
28da0 6f 54 65 6d 70 73 49 6e 52 61 6e 67 65 28 50 61  oTempsInRange(Pa
28db0 72 73 65 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a 23  rse*,int,int);.#
28dc0 65 6e 64 69 66 0a 45 78 70 72 20 2a 73 71 6c 69  endif.Expr *sqli
28dd0 74 65 33 45 78 70 72 41 6c 6c 6f 63 28 73 71 6c  te3ExprAlloc(sql
28de0 69 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20  ite3*,int,const 
28df0 54 6f 6b 65 6e 2a 2c 69 6e 74 29 3b 0a 45 78 70  Token*,int);.Exp
28e00 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72 28 73  r *sqlite3Expr(s
28e10 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73  qlite3*,int,cons
28e20 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73  t char*);.void s
28e30 71 6c 69 74 65 33 45 78 70 72 41 74 74 61 63 68  qlite3ExprAttach
28e40 53 75 62 74 72 65 65 73 28 73 71 6c 69 74 65 33  Subtrees(sqlite3
28e50 2a 2c 45 78 70 72 2a 2c 45 78 70 72 2a 2c 45 78  *,Expr*,Expr*,Ex
28e60 70 72 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69  pr*);.Expr *sqli
28e70 74 65 33 50 45 78 70 72 28 50 61 72 73 65 2a 2c  te3PExpr(Parse*,
28e80 20 69 6e 74 2c 20 45 78 70 72 2a 2c 20 45 78 70   int, Expr*, Exp
28e90 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  r*);.void sqlite
28ea0 33 50 45 78 70 72 41 64 64 53 65 6c 65 63 74 28  3PExprAddSelect(
28eb0 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 53  Parse*, Expr*, S
28ec0 65 6c 65 63 74 2a 29 3b 0a 45 78 70 72 20 2a 73  elect*);.Expr *s
28ed0 71 6c 69 74 65 33 45 78 70 72 41 6e 64 28 73 71  qlite3ExprAnd(sq
28ee0 6c 69 74 65 33 2a 2c 45 78 70 72 2a 2c 20 45 78  lite3*,Expr*, Ex
28ef0 70 72 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69  pr*);.Expr *sqli
28f00 74 65 33 45 78 70 72 46 75 6e 63 74 69 6f 6e 28  te3ExprFunction(
28f10 50 61 72 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a  Parse*,ExprList*
28f20 2c 20 54 6f 6b 65 6e 2a 2c 20 69 6e 74 29 3b 0a  , Token*, int);.
28f30 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
28f40 41 73 73 69 67 6e 56 61 72 4e 75 6d 62 65 72 28  AssignVarNumber(
28f50 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 75  Parse*, Expr*, u
28f60 33 32 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  32);.void sqlite
28f70 33 45 78 70 72 44 65 6c 65 74 65 28 73 71 6c 69  3ExprDelete(sqli
28f80 74 65 33 2a 2c 20 45 78 70 72 2a 29 3b 0a 45 78  te3*, Expr*);.Ex
28f90 70 72 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 45  prList *sqlite3E
28fa0 78 70 72 4c 69 73 74 41 70 70 65 6e 64 28 50 61  xprListAppend(Pa
28fb0 72 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 45  rse*,ExprList*,E
28fc0 78 70 72 2a 29 3b 0a 45 78 70 72 4c 69 73 74 20  xpr*);.ExprList 
28fd0 2a 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74  *sqlite3ExprList
28fe0 41 70 70 65 6e 64 56 65 63 74 6f 72 28 50 61 72  AppendVector(Par
28ff0 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 49 64  se*,ExprList*,Id
29000 4c 69 73 74 2a 2c 45 78 70 72 2a 29 3b 0a 76 6f  List*,Expr*);.vo
29010 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 4c 69  id sqlite3ExprLi
29020 73 74 53 65 74 53 6f 72 74 4f 72 64 65 72 28 45  stSetSortOrder(E
29030 78 70 72 4c 69 73 74 2a 2c 69 6e 74 29 3b 0a 76  xprList*,int);.v
29040 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 4c  oid sqlite3ExprL
29050 69 73 74 53 65 74 4e 61 6d 65 28 50 61 72 73 65  istSetName(Parse
29060 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 54 6f 6b 65  *,ExprList*,Toke
29070 6e 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  n*,int);.void sq
29080 6c 69 74 65 33 45 78 70 72 4c 69 73 74 53 65 74  lite3ExprListSet
29090 53 70 61 6e 28 50 61 72 73 65 2a 2c 45 78 70 72  Span(Parse*,Expr
290a0 4c 69 73 74 2a 2c 63 6f 6e 73 74 20 63 68 61 72  List*,const char
290b0 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  *,const char*);.
290c0 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
290d0 4c 69 73 74 44 65 6c 65 74 65 28 73 71 6c 69 74  ListDelete(sqlit
290e0 65 33 2a 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b  e3*, ExprList*);
290f0 0a 75 33 32 20 73 71 6c 69 74 65 33 45 78 70 72  .u32 sqlite3Expr
29100 4c 69 73 74 46 6c 61 67 73 28 63 6f 6e 73 74 20  ListFlags(const 
29110 45 78 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74 20  ExprList*);.int 
29120 73 71 6c 69 74 65 33 49 6e 69 74 28 73 71 6c 69  sqlite3Init(sqli
29130 74 65 33 2a 2c 20 63 68 61 72 2a 2a 29 3b 0a 69  te3*, char**);.i
29140 6e 74 20 73 71 6c 69 74 65 33 49 6e 69 74 43 61  nt sqlite3InitCa
29150 6c 6c 62 61 63 6b 28 76 6f 69 64 2a 2c 20 69 6e  llback(void*, in
29160 74 2c 20 63 68 61 72 2a 2a 2c 20 63 68 61 72 2a  t, char**, char*
29170 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49  *);.int sqlite3I
29180 6e 69 74 4f 6e 65 28 73 71 6c 69 74 65 33 2a 2c  nitOne(sqlite3*,
29190 20 69 6e 74 2c 20 63 68 61 72 2a 2a 2c 20 75 33   int, char**, u3
291a0 32 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  2);.void sqlite3
291b0 50 72 61 67 6d 61 28 50 61 72 73 65 2a 2c 54 6f  Pragma(Parse*,To
291c0 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65  ken*,Token*,Toke
291d0 6e 2a 2c 69 6e 74 29 3b 0a 23 69 66 6e 64 65 66  n*,int);.#ifndef
291e0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
291f0 54 55 41 4c 54 41 42 4c 45 0a 4d 6f 64 75 6c 65  TUALTABLE.Module
29200 20 2a 73 71 6c 69 74 65 33 50 72 61 67 6d 61 56   *sqlite3PragmaV
29210 74 61 62 52 65 67 69 73 74 65 72 28 73 71 6c 69  tabRegister(sqli
29220 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 20  te3*,const char 
29230 2a 7a 4e 61 6d 65 29 3b 0a 23 65 6e 64 69 66 0a  *zName);.#endif.
29240 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 73 65  void sqlite3Rese
29250 74 41 6c 6c 53 63 68 65 6d 61 73 4f 66 43 6f 6e  tAllSchemasOfCon
29260 6e 65 63 74 69 6f 6e 28 73 71 6c 69 74 65 33 2a  nection(sqlite3*
29270 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52  );.void sqlite3R
29280 65 73 65 74 4f 6e 65 53 63 68 65 6d 61 28 73 71  esetOneSchema(sq
29290 6c 69 74 65 33 2a 2c 69 6e 74 29 3b 0a 76 6f 69  lite3*,int);.voi
292a0 64 20 73 71 6c 69 74 65 33 43 6f 6c 6c 61 70 73  d sqlite3Collaps
292b0 65 44 61 74 61 62 61 73 65 41 72 72 61 79 28 73  eDatabaseArray(s
292c0 71 6c 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20 73  qlite3*);.void s
292d0 71 6c 69 74 65 33 43 6f 6d 6d 69 74 49 6e 74 65  qlite3CommitInte
292e0 72 6e 61 6c 43 68 61 6e 67 65 73 28 73 71 6c 69  rnalChanges(sqli
292f0 74 65 33 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  te3*);.void sqli
29300 74 65 33 44 65 6c 65 74 65 43 6f 6c 75 6d 6e 4e  te3DeleteColumnN
29310 61 6d 65 73 28 73 71 6c 69 74 65 33 2a 2c 54 61  ames(sqlite3*,Ta
29320 62 6c 65 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ble*);.int sqlit
29330 65 33 43 6f 6c 75 6d 6e 73 46 72 6f 6d 45 78 70  e3ColumnsFromExp
29340 72 4c 69 73 74 28 50 61 72 73 65 2a 2c 45 78 70  rList(Parse*,Exp
29350 72 4c 69 73 74 2a 2c 69 31 36 2a 2c 43 6f 6c 75  rList*,i16*,Colu
29360 6d 6e 2a 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  mn**);.void sqli
29370 74 65 33 53 65 6c 65 63 74 41 64 64 43 6f 6c 75  te3SelectAddColu
29380 6d 6e 54 79 70 65 41 6e 64 43 6f 6c 6c 61 74 69  mnTypeAndCollati
29390 6f 6e 28 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a  on(Parse*,Table*
293a0 2c 53 65 6c 65 63 74 2a 29 3b 0a 54 61 62 6c 65  ,Select*);.Table
293b0 20 2a 73 71 6c 69 74 65 33 52 65 73 75 6c 74 53   *sqlite3ResultS
293c0 65 74 4f 66 53 65 6c 65 63 74 28 50 61 72 73 65  etOfSelect(Parse
293d0 2a 2c 53 65 6c 65 63 74 2a 29 3b 0a 76 6f 69 64  *,Select*);.void
293e0 20 73 71 6c 69 74 65 33 4f 70 65 6e 4d 61 73 74   sqlite3OpenMast
293f0 65 72 54 61 62 6c 65 28 50 61 72 73 65 20 2a 2c  erTable(Parse *,
29400 20 69 6e 74 29 3b 0a 49 6e 64 65 78 20 2a 73 71   int);.Index *sq
29410 6c 69 74 65 33 50 72 69 6d 61 72 79 4b 65 79 49  lite3PrimaryKeyI
29420 6e 64 65 78 28 54 61 62 6c 65 2a 29 3b 0a 69 31  ndex(Table*);.i1
29430 36 20 73 71 6c 69 74 65 33 43 6f 6c 75 6d 6e 4f  6 sqlite3ColumnO
29440 66 49 6e 64 65 78 28 49 6e 64 65 78 2a 2c 20 69  fIndex(Index*, i
29450 31 36 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  16);.void sqlite
29460 33 53 74 61 72 74 54 61 62 6c 65 28 50 61 72 73  3StartTable(Pars
29470 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a  e*,Token*,Token*
29480 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74  ,int,int,int,int
29490 29 3b 0a 23 69 66 20 53 51 4c 49 54 45 5f 45 4e  );.#if SQLITE_EN
294a0 41 42 4c 45 5f 48 49 44 44 45 4e 5f 43 4f 4c 55  ABLE_HIDDEN_COLU
294b0 4d 4e 53 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  MNS.  void sqlit
294c0 65 33 43 6f 6c 75 6d 6e 50 72 6f 70 65 72 74 69  e3ColumnProperti
294d0 65 73 46 72 6f 6d 4e 61 6d 65 28 54 61 62 6c 65  esFromName(Table
294e0 2a 2c 20 43 6f 6c 75 6d 6e 2a 29 3b 0a 23 65 6c  *, Column*);.#el
294f0 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  se.# define sqli
29500 74 65 33 43 6f 6c 75 6d 6e 50 72 6f 70 65 72 74  te3ColumnPropert
29510 69 65 73 46 72 6f 6d 4e 61 6d 65 28 54 2c 43 29  iesFromName(T,C)
29520 20 2f 2a 20 6e 6f 2d 6f 70 20 2a 2f 0a 23 65 6e   /* no-op */.#en
29530 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  dif.void sqlite3
29540 41 64 64 43 6f 6c 75 6d 6e 28 50 61 72 73 65 2a  AddColumn(Parse*
29550 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 29 3b  ,Token*,Token*);
29560 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 64 64  .void sqlite3Add
29570 4e 6f 74 4e 75 6c 6c 28 50 61 72 73 65 2a 2c 20  NotNull(Parse*, 
29580 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
29590 65 33 41 64 64 50 72 69 6d 61 72 79 4b 65 79 28  e3AddPrimaryKey(
295a0 50 61 72 73 65 2a 2c 20 45 78 70 72 4c 69 73 74  Parse*, ExprList
295b0 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74  *, int, int, int
295c0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41  );.void sqlite3A
295d0 64 64 43 68 65 63 6b 43 6f 6e 73 74 72 61 69 6e  ddCheckConstrain
295e0 74 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 29  t(Parse*, Expr*)
295f0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 64  ;.void sqlite3Ad
29600 64 44 65 66 61 75 6c 74 56 61 6c 75 65 28 50 61  dDefaultValue(Pa
29610 72 73 65 2a 2c 45 78 70 72 2a 2c 63 6f 6e 73 74  rse*,Expr*,const
29620 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61   char*,const cha
29630 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  r*);.void sqlite
29640 33 41 64 64 43 6f 6c 6c 61 74 65 54 79 70 65 28  3AddCollateType(
29650 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 29 3b  Parse*, Token*);
29660 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 6e 64  .void sqlite3End
29670 54 61 62 6c 65 28 50 61 72 73 65 2a 2c 54 6f 6b  Table(Parse*,Tok
29680 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 75 38 2c 53 65  en*,Token*,u8,Se
29690 6c 65 63 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  lect*);.int sqli
296a0 74 65 33 50 61 72 73 65 55 72 69 28 63 6f 6e 73  te3ParseUri(cons
296b0 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68  t char*,const ch
296c0 61 72 2a 2c 75 6e 73 69 67 6e 65 64 20 69 6e 74  ar*,unsigned int
296d0 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  *,.             
296e0 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 76         sqlite3_v
296f0 66 73 2a 2a 2c 63 68 61 72 2a 2a 2c 63 68 61 72  fs**,char**,char
29700 20 2a 2a 29 3b 0a 42 74 72 65 65 20 2a 73 71 6c   **);.Btree *sql
29710 69 74 65 33 44 62 4e 61 6d 65 54 6f 42 74 72 65  ite3DbNameToBtre
29720 65 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74  e(sqlite3*,const
29730 20 63 68 61 72 2a 29 3b 0a 0a 23 69 66 64 65 66   char*);..#ifdef
29740 20 53 51 4c 49 54 45 5f 55 4e 54 45 53 54 41 42   SQLITE_UNTESTAB
29750 4c 45 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  LE.# define sqli
29760 74 65 33 46 61 75 6c 74 53 69 6d 28 58 29 20 53  te3FaultSim(X) S
29770 51 4c 49 54 45 5f 4f 4b 0a 23 65 6c 73 65 0a 20  QLITE_OK.#else. 
29780 20 69 6e 74 20 73 71 6c 69 74 65 33 46 61 75 6c   int sqlite3Faul
29790 74 53 69 6d 28 69 6e 74 29 3b 0a 23 65 6e 64 69  tSim(int);.#endi
297a0 66 0a 0a 42 69 74 76 65 63 20 2a 73 71 6c 69 74  f..Bitvec *sqlit
297b0 65 33 42 69 74 76 65 63 43 72 65 61 74 65 28 75  e3BitvecCreate(u
297c0 33 32 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  32);.int sqlite3
297d0 42 69 74 76 65 63 54 65 73 74 28 42 69 74 76 65  BitvecTest(Bitve
297e0 63 2a 2c 20 75 33 32 29 3b 0a 69 6e 74 20 73 71  c*, u32);.int sq
297f0 6c 69 74 65 33 42 69 74 76 65 63 54 65 73 74 4e  lite3BitvecTestN
29800 6f 74 4e 75 6c 6c 28 42 69 74 76 65 63 2a 2c 20  otNull(Bitvec*, 
29810 75 33 32 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  u32);.int sqlite
29820 33 42 69 74 76 65 63 53 65 74 28 42 69 74 76 65  3BitvecSet(Bitve
29830 63 2a 2c 20 75 33 32 29 3b 0a 76 6f 69 64 20 73  c*, u32);.void s
29840 71 6c 69 74 65 33 42 69 74 76 65 63 43 6c 65 61  qlite3BitvecClea
29850 72 28 42 69 74 76 65 63 2a 2c 20 75 33 32 2c 20  r(Bitvec*, u32, 
29860 76 6f 69 64 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  void*);.void sql
29870 69 74 65 33 42 69 74 76 65 63 44 65 73 74 72 6f  ite3BitvecDestro
29880 79 28 42 69 74 76 65 63 2a 29 3b 0a 75 33 32 20  y(Bitvec*);.u32 
29890 73 71 6c 69 74 65 33 42 69 74 76 65 63 53 69 7a  sqlite3BitvecSiz
298a0 65 28 42 69 74 76 65 63 2a 29 3b 0a 23 69 66 6e  e(Bitvec*);.#ifn
298b0 64 65 66 20 53 51 4c 49 54 45 5f 55 4e 54 45 53  def SQLITE_UNTES
298c0 54 41 42 4c 45 0a 69 6e 74 20 73 71 6c 69 74 65  TABLE.int sqlite
298d0 33 42 69 74 76 65 63 42 75 69 6c 74 69 6e 54 65  3BitvecBuiltinTe
298e0 73 74 28 69 6e 74 2c 69 6e 74 2a 29 3b 0a 23 65  st(int,int*);.#e
298f0 6e 64 69 66 0a 0a 52 6f 77 53 65 74 20 2a 73 71  ndif..RowSet *sq
29900 6c 69 74 65 33 52 6f 77 53 65 74 49 6e 69 74 28  lite3RowSetInit(
29910 73 71 6c 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20  sqlite3*);.void 
29920 73 71 6c 69 74 65 33 52 6f 77 53 65 74 44 65 6c  sqlite3RowSetDel
29930 65 74 65 28 76 6f 69 64 2a 29 3b 0a 76 6f 69 64  ete(void*);.void
29940 20 73 71 6c 69 74 65 33 52 6f 77 53 65 74 43 6c   sqlite3RowSetCl
29950 65 61 72 28 76 6f 69 64 2a 29 3b 0a 76 6f 69 64  ear(void*);.void
29960 20 73 71 6c 69 74 65 33 52 6f 77 53 65 74 49 6e   sqlite3RowSetIn
29970 73 65 72 74 28 52 6f 77 53 65 74 2a 2c 20 69 36  sert(RowSet*, i6
29980 34 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52  4);.int sqlite3R
29990 6f 77 53 65 74 54 65 73 74 28 52 6f 77 53 65 74  owSetTest(RowSet
299a0 2a 2c 20 69 6e 74 20 69 42 61 74 63 68 2c 20 69  *, int iBatch, i
299b0 36 34 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  64);.int sqlite3
299c0 52 6f 77 53 65 74 4e 65 78 74 28 52 6f 77 53 65  RowSetNext(RowSe
299d0 74 2a 2c 20 69 36 34 2a 29 3b 0a 0a 76 6f 69 64  t*, i64*);..void
299e0 20 73 71 6c 69 74 65 33 43 72 65 61 74 65 56 69   sqlite3CreateVi
299f0 65 77 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a  ew(Parse*,Token*
29a00 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 45  ,Token*,Token*,E
29a10 78 70 72 4c 69 73 74 2a 2c 53 65 6c 65 63 74 2a  xprList*,Select*
29a20 2c 69 6e 74 2c 69 6e 74 29 3b 0a 0a 23 69 66 20  ,int,int);..#if 
29a30 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
29a40 4f 4d 49 54 5f 56 49 45 57 29 20 7c 7c 20 21 64  OMIT_VIEW) || !d
29a50 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d  efined(SQLITE_OM
29a60 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 29  IT_VIRTUALTABLE)
29a70 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 56 69  .  int sqlite3Vi
29a80 65 77 47 65 74 43 6f 6c 75 6d 6e 4e 61 6d 65 73  ewGetColumnNames
29a90 28 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a 29 3b  (Parse*,Table*);
29aa0 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
29ab0 73 71 6c 69 74 65 33 56 69 65 77 47 65 74 43 6f  sqlite3ViewGetCo
29ac0 6c 75 6d 6e 4e 61 6d 65 73 28 41 2c 42 29 20 30  lumnNames(A,B) 0
29ad0 0a 23 65 6e 64 69 66 0a 0a 23 69 66 20 53 51 4c  .#endif..#if SQL
29ae0 49 54 45 5f 4d 41 58 5f 41 54 54 41 43 48 45 44  ITE_MAX_ATTACHED
29af0 3e 33 30 0a 20 20 69 6e 74 20 73 71 6c 69 74 65  >30.  int sqlite
29b00 33 44 62 4d 61 73 6b 41 6c 6c 5a 65 72 6f 28 79  3DbMaskAllZero(y
29b10 44 62 4d 61 73 6b 29 3b 0a 23 65 6e 64 69 66 0a  DbMask);.#endif.
29b20 76 6f 69 64 20 73 71 6c 69 74 65 33 44 72 6f 70  void sqlite3Drop
29b30 54 61 62 6c 65 28 50 61 72 73 65 2a 2c 20 53 72  Table(Parse*, Sr
29b40 63 4c 69 73 74 2a 2c 20 69 6e 74 2c 20 69 6e 74  cList*, int, int
29b50 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43  );.void sqlite3C
29b60 6f 64 65 44 72 6f 70 54 61 62 6c 65 28 50 61 72  odeDropTable(Par
29b70 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74  se*, Table*, int
29b80 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
29b90 69 74 65 33 44 65 6c 65 74 65 54 61 62 6c 65 28  ite3DeleteTable(
29ba0 73 71 6c 69 74 65 33 2a 2c 20 54 61 62 6c 65 2a  sqlite3*, Table*
29bb0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 46  );.void sqlite3F
29bc0 72 65 65 49 6e 64 65 78 28 73 71 6c 69 74 65 33  reeIndex(sqlite3
29bd0 2a 2c 20 49 6e 64 65 78 2a 29 3b 0a 23 69 66 6e  *, Index*);.#ifn
29be0 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
29bf0 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 0a 20 20  AUTOINCREMENT.  
29c00 76 6f 69 64 20 73 71 6c 69 74 65 33 41 75 74 6f  void sqlite3Auto
29c10 69 6e 63 72 65 6d 65 6e 74 42 65 67 69 6e 28 50  incrementBegin(P
29c20 61 72 73 65 20 2a 70 50 61 72 73 65 29 3b 0a 20  arse *pParse);. 
29c30 20 76 6f 69 64 20 73 71 6c 69 74 65 33 41 75 74   void sqlite3Aut
29c40 6f 69 6e 63 72 65 6d 65 6e 74 45 6e 64 28 50 61  oincrementEnd(Pa
29c50 72 73 65 20 2a 70 50 61 72 73 65 29 3b 0a 23 65  rse *pParse);.#e
29c60 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  lse.# define sql
29c70 69 74 65 33 41 75 74 6f 69 6e 63 72 65 6d 65 6e  ite3Autoincremen
29c80 74 42 65 67 69 6e 28 58 29 0a 23 20 64 65 66 69  tBegin(X).# defi
29c90 6e 65 20 73 71 6c 69 74 65 33 41 75 74 6f 69 6e  ne sqlite3Autoin
29ca0 63 72 65 6d 65 6e 74 45 6e 64 28 58 29 0a 23 65  crementEnd(X).#e
29cb0 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65  ndif.void sqlite
29cc0 33 49 6e 73 65 72 74 28 50 61 72 73 65 2a 2c 20  3Insert(Parse*, 
29cd0 53 72 63 4c 69 73 74 2a 2c 20 53 65 6c 65 63 74  SrcList*, Select
29ce0 2a 2c 20 49 64 4c 69 73 74 2a 2c 20 69 6e 74 2c  *, IdList*, int,
29cf0 20 55 70 73 65 72 74 2a 29 3b 0a 76 6f 69 64 20   Upsert*);.void 
29d00 2a 73 71 6c 69 74 65 33 41 72 72 61 79 41 6c 6c  *sqlite3ArrayAll
29d10 6f 63 61 74 65 28 73 71 6c 69 74 65 33 2a 2c 76  ocate(sqlite3*,v
29d20 6f 69 64 2a 2c 69 6e 74 2c 69 6e 74 2a 2c 69 6e  oid*,int,int*,in
29d30 74 2a 29 3b 0a 49 64 4c 69 73 74 20 2a 73 71 6c  t*);.IdList *sql
29d40 69 74 65 33 49 64 4c 69 73 74 41 70 70 65 6e 64  ite3IdListAppend
29d50 28 50 61 72 73 65 2a 2c 20 49 64 4c 69 73 74 2a  (Parse*, IdList*
29d60 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73  , Token*);.int s
29d70 71 6c 69 74 65 33 49 64 4c 69 73 74 49 6e 64 65  qlite3IdListInde
29d80 78 28 49 64 4c 69 73 74 2a 2c 63 6f 6e 73 74 20  x(IdList*,const 
29d90 63 68 61 72 2a 29 3b 0a 53 72 63 4c 69 73 74 20  char*);.SrcList 
29da0 2a 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74 45  *sqlite3SrcListE
29db0 6e 6c 61 72 67 65 28 73 71 6c 69 74 65 33 2a 2c  nlarge(sqlite3*,
29dc0 20 53 72 63 4c 69 73 74 2a 2c 20 69 6e 74 2c 20   SrcList*, int, 
29dd0 69 6e 74 29 3b 0a 53 72 63 4c 69 73 74 20 2a 73  int);.SrcList *s
29de0 71 6c 69 74 65 33 53 72 63 4c 69 73 74 41 70 70  qlite3SrcListApp
29df0 65 6e 64 28 73 71 6c 69 74 65 33 2a 2c 20 53 72  end(sqlite3*, Sr
29e00 63 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 2c 20  cList*, Token*, 
29e10 54 6f 6b 65 6e 2a 29 3b 0a 53 72 63 4c 69 73 74  Token*);.SrcList
29e20 20 2a 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74   *sqlite3SrcList
29e30 41 70 70 65 6e 64 46 72 6f 6d 54 65 72 6d 28 50  AppendFromTerm(P
29e40 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c  arse*, SrcList*,
29e50 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c   Token*, Token*,
29e60 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
29e70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29e80 20 20 20 20 20 20 20 54 6f 6b 65 6e 2a 2c 20 53         Token*, S
29e90 65 6c 65 63 74 2a 2c 20 45 78 70 72 2a 2c 20 49  elect*, Expr*, I
29ea0 64 4c 69 73 74 2a 29 3b 0a 76 6f 69 64 20 73 71  dList*);.void sq
29eb0 6c 69 74 65 33 53 72 63 4c 69 73 74 49 6e 64 65  lite3SrcListInde
29ec0 78 65 64 42 79 28 50 61 72 73 65 20 2a 2c 20 53  xedBy(Parse *, S
29ed0 72 63 4c 69 73 74 20 2a 2c 20 54 6f 6b 65 6e 20  rcList *, Token 
29ee0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
29ef0 53 72 63 4c 69 73 74 46 75 6e 63 41 72 67 73 28  SrcListFuncArgs(
29f00 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a  Parse*, SrcList*
29f10 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a 69 6e  , ExprList*);.in
29f20 74 20 73 71 6c 69 74 65 33 49 6e 64 65 78 65 64  t sqlite3Indexed
29f30 42 79 4c 6f 6f 6b 75 70 28 50 61 72 73 65 20 2a  ByLookup(Parse *
29f40 2c 20 73 74 72 75 63 74 20 53 72 63 4c 69 73 74  , struct SrcList
29f50 5f 69 74 65 6d 20 2a 29 3b 0a 76 6f 69 64 20 73  _item *);.void s
29f60 71 6c 69 74 65 33 53 72 63 4c 69 73 74 53 68 69  qlite3SrcListShi
29f70 66 74 4a 6f 69 6e 54 79 70 65 28 53 72 63 4c 69  ftJoinType(SrcLi
29f80 73 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  st*);.void sqlit
29f90 65 33 53 72 63 4c 69 73 74 41 73 73 69 67 6e 43  e3SrcListAssignC
29fa0 75 72 73 6f 72 73 28 50 61 72 73 65 2a 2c 20 53  ursors(Parse*, S
29fb0 72 63 4c 69 73 74 2a 29 3b 0a 76 6f 69 64 20 73  rcList*);.void s
29fc0 71 6c 69 74 65 33 49 64 4c 69 73 74 44 65 6c 65  qlite3IdListDele
29fd0 74 65 28 73 71 6c 69 74 65 33 2a 2c 20 49 64 4c  te(sqlite3*, IdL
29fe0 69 73 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ist*);.void sqli
29ff0 74 65 33 53 72 63 4c 69 73 74 44 65 6c 65 74 65  te3SrcListDelete
2a000 28 73 71 6c 69 74 65 33 2a 2c 20 53 72 63 4c 69  (sqlite3*, SrcLi
2a010 73 74 2a 29 3b 0a 49 6e 64 65 78 20 2a 73 71 6c  st*);.Index *sql
2a020 69 74 65 33 41 6c 6c 6f 63 61 74 65 49 6e 64 65  ite3AllocateInde
2a030 78 4f 62 6a 65 63 74 28 73 71 6c 69 74 65 33 2a  xObject(sqlite3*
2a040 2c 69 31 36 2c 69 6e 74 2c 63 68 61 72 2a 2a 29  ,i16,int,char**)
2a050 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 72  ;.void sqlite3Cr
2a060 65 61 74 65 49 6e 64 65 78 28 50 61 72 73 65 2a  eateIndex(Parse*
2a070 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 53  ,Token*,Token*,S
2a080 72 63 4c 69 73 74 2a 2c 45 78 70 72 4c 69 73 74  rcList*,ExprList
2a090 2a 2c 69 6e 74 2c 54 6f 6b 65 6e 2a 2c 0a 20 20  *,int,Token*,.  
2a0a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a0b0 20 20 20 20 20 20 20 20 45 78 70 72 2a 2c 20 69          Expr*, i
2a0c0 6e 74 2c 20 69 6e 74 2c 20 75 38 29 3b 0a 76 6f  nt, int, u8);.vo
2a0d0 69 64 20 73 71 6c 69 74 65 33 44 72 6f 70 49 6e  id sqlite3DropIn
2a0e0 64 65 78 28 50 61 72 73 65 2a 2c 20 53 72 63 4c  dex(Parse*, SrcL
2a0f0 69 73 74 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20  ist*, int);.int 
2a100 73 71 6c 69 74 65 33 53 65 6c 65 63 74 28 50 61  sqlite3Select(Pa
2a110 72 73 65 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 53  rse*, Select*, S
2a120 65 6c 65 63 74 44 65 73 74 2a 29 3b 0a 53 65 6c  electDest*);.Sel
2a130 65 63 74 20 2a 73 71 6c 69 74 65 33 53 65 6c 65  ect *sqlite3Sele
2a140 63 74 4e 65 77 28 50 61 72 73 65 2a 2c 45 78 70  ctNew(Parse*,Exp
2a150 72 4c 69 73 74 2a 2c 53 72 63 4c 69 73 74 2a 2c  rList*,SrcList*,
2a160 45 78 70 72 2a 2c 45 78 70 72 4c 69 73 74 2a 2c  Expr*,ExprList*,
2a170 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2a180 20 20 20 20 20 20 20 20 20 20 45 78 70 72 2a 2c            Expr*,
2a190 45 78 70 72 4c 69 73 74 2a 2c 75 33 32 2c 45 78  ExprList*,u32,Ex
2a1a0 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  pr*);.void sqlit
2a1b0 65 33 53 65 6c 65 63 74 44 65 6c 65 74 65 28 73  e3SelectDelete(s
2a1c0 71 6c 69 74 65 33 2a 2c 20 53 65 6c 65 63 74 2a  qlite3*, Select*
2a1d0 29 3b 0a 54 61 62 6c 65 20 2a 73 71 6c 69 74 65  );.Table *sqlite
2a1e0 33 53 72 63 4c 69 73 74 4c 6f 6f 6b 75 70 28 50  3SrcListLookup(P
2a1f0 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 29  arse*, SrcList*)
2a200 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 73 52  ;.int sqlite3IsR
2a210 65 61 64 4f 6e 6c 79 28 50 61 72 73 65 2a 2c 20  eadOnly(Parse*, 
2a220 54 61 62 6c 65 2a 2c 20 69 6e 74 29 3b 0a 76 6f  Table*, int);.vo
2a230 69 64 20 73 71 6c 69 74 65 33 4f 70 65 6e 54 61  id sqlite3OpenTa
2a240 62 6c 65 28 50 61 72 73 65 2a 2c 20 69 6e 74 20  ble(Parse*, int 
2a250 69 43 75 72 2c 20 69 6e 74 20 69 44 62 2c 20 54  iCur, int iDb, T
2a260 61 62 6c 65 2a 2c 20 69 6e 74 29 3b 0a 23 69 66  able*, int);.#if
2a270 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
2a280 45 4e 41 42 4c 45 5f 55 50 44 41 54 45 5f 44 45  ENABLE_UPDATE_DE
2a290 4c 45 54 45 5f 4c 49 4d 49 54 29 20 26 26 20 21  LETE_LIMIT) && !
2a2a0 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
2a2b0 4d 49 54 5f 53 55 42 51 55 45 52 59 29 0a 45 78  MIT_SUBQUERY).Ex
2a2c0 70 72 20 2a 73 71 6c 69 74 65 33 4c 69 6d 69 74  pr *sqlite3Limit
2a2d0 57 68 65 72 65 28 50 61 72 73 65 2a 2c 53 72 63  Where(Parse*,Src
2a2e0 4c 69 73 74 2a 2c 45 78 70 72 2a 2c 45 78 70 72  List*,Expr*,Expr
2a2f0 4c 69 73 74 2a 2c 45 78 70 72 2a 2c 63 68 61 72  List*,Expr*,char
2a300 2a 29 3b 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20  *);.#endif.void 
2a310 73 71 6c 69 74 65 33 44 65 6c 65 74 65 46 72 6f  sqlite3DeleteFro
2a320 6d 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73  m(Parse*, SrcLis
2a330 74 2a 2c 20 45 78 70 72 2a 2c 20 45 78 70 72 4c  t*, Expr*, ExprL
2a340 69 73 74 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f  ist*, Expr*);.vo
2a350 69 64 20 73 71 6c 69 74 65 33 55 70 64 61 74 65  id sqlite3Update
2a360 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74  (Parse*, SrcList
2a370 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 45 78 70  *, ExprList*,Exp
2a380 72 2a 2c 69 6e 74 2c 45 78 70 72 4c 69 73 74 2a  r*,int,ExprList*
2a390 2c 45 78 70 72 2a 2c 0a 20 20 20 20 20 20 20 20  ,Expr*,.        
2a3a0 20 20 20 20 20 20 20 20 20 20 20 55 70 73 65 72             Upser
2a3b0 74 2a 29 3b 0a 57 68 65 72 65 49 6e 66 6f 20 2a  t*);.WhereInfo *
2a3c0 73 71 6c 69 74 65 33 57 68 65 72 65 42 65 67 69  sqlite3WhereBegi
2a3d0 6e 28 50 61 72 73 65 2a 2c 53 72 63 4c 69 73 74  n(Parse*,SrcList
2a3e0 2a 2c 45 78 70 72 2a 2c 45 78 70 72 4c 69 73 74  *,Expr*,ExprList
2a3f0 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 75 31 36 2c  *,ExprList*,u16,
2a400 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
2a410 65 33 57 68 65 72 65 45 6e 64 28 57 68 65 72 65  e3WhereEnd(Where
2a420 49 6e 66 6f 2a 29 3b 0a 4c 6f 67 45 73 74 20 73  Info*);.LogEst s
2a430 71 6c 69 74 65 33 57 68 65 72 65 4f 75 74 70 75  qlite3WhereOutpu
2a440 74 52 6f 77 43 6f 75 6e 74 28 57 68 65 72 65 49  tRowCount(WhereI
2a450 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  nfo*);.int sqlit
2a460 65 33 57 68 65 72 65 49 73 44 69 73 74 69 6e 63  e3WhereIsDistinc
2a470 74 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69  t(WhereInfo*);.i
2a480 6e 74 20 73 71 6c 69 74 65 33 57 68 65 72 65 49  nt sqlite3WhereI
2a490 73 4f 72 64 65 72 65 64 28 57 68 65 72 65 49 6e  sOrdered(WhereIn
2a4a0 66 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  fo*);.int sqlite
2a4b0 33 57 68 65 72 65 4f 72 64 65 72 42 79 4c 69 6d  3WhereOrderByLim
2a4c0 69 74 4f 70 74 4c 61 62 65 6c 28 57 68 65 72 65  itOptLabel(Where
2a4d0 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  Info*);.int sqli
2a4e0 74 65 33 57 68 65 72 65 49 73 53 6f 72 74 65 64  te3WhereIsSorted
2a4f0 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e  (WhereInfo*);.in
2a500 74 20 73 71 6c 69 74 65 33 57 68 65 72 65 43 6f  t sqlite3WhereCo
2a510 6e 74 69 6e 75 65 4c 61 62 65 6c 28 57 68 65 72  ntinueLabel(Wher
2a520 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c  eInfo*);.int sql
2a530 69 74 65 33 57 68 65 72 65 42 72 65 61 6b 4c 61  ite3WhereBreakLa
2a540 62 65 6c 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b  bel(WhereInfo*);
2a550 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 68 65 72  .int sqlite3Wher
2a560 65 4f 6b 4f 6e 65 50 61 73 73 28 57 68 65 72 65  eOkOnePass(Where
2a570 49 6e 66 6f 2a 2c 20 69 6e 74 2a 29 3b 0a 23 64  Info*, int*);.#d
2a580 65 66 69 6e 65 20 4f 4e 45 50 41 53 53 5f 4f 46  efine ONEPASS_OF
2a590 46 20 20 20 20 20 20 30 20 20 20 20 20 20 20 20  F      0        
2a5a0 2f 2a 20 55 73 65 20 6f 66 20 4f 4e 45 50 41 53  /* Use of ONEPAS
2a5b0 53 20 6e 6f 74 20 61 6c 6c 6f 77 65 64 20 2a 2f  S not allowed */
2a5c0 0a 23 64 65 66 69 6e 65 20 4f 4e 45 50 41 53 53  .#define ONEPASS
2a5d0 5f 53 49 4e 47 4c 45 20 20 20 31 20 20 20 20 20  _SINGLE   1     
2a5e0 20 20 20 2f 2a 20 4f 4e 45 50 41 53 53 20 76 61     /* ONEPASS va
2a5f0 6c 69 64 20 66 6f 72 20 61 20 73 69 6e 67 6c 65  lid for a single
2a600 20 72 6f 77 20 75 70 64 61 74 65 20 2a 2f 0a 23   row update */.#
2a610 64 65 66 69 6e 65 20 4f 4e 45 50 41 53 53 5f 4d  define ONEPASS_M
2a620 55 4c 54 49 20 20 20 20 32 20 20 20 20 20 20 20  ULTI    2       
2a630 20 2f 2a 20 4f 4e 45 50 41 53 53 20 69 73 20 76   /* ONEPASS is v
2a640 61 6c 69 64 20 66 6f 72 20 6d 75 6c 74 69 70 6c  alid for multipl
2a650 65 20 72 6f 77 73 20 2a 2f 0a 76 6f 69 64 20 73  e rows */.void s
2a660 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 4c 6f  qlite3ExprCodeLo
2a670 61 64 49 6e 64 65 78 43 6f 6c 75 6d 6e 28 50 61  adIndexColumn(Pa
2a680 72 73 65 2a 2c 20 49 6e 64 65 78 2a 2c 20 69 6e  rse*, Index*, in
2a690 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 69 6e  t, int, int);.in
2a6a0 74 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64  t sqlite3ExprCod
2a6b0 65 47 65 74 43 6f 6c 75 6d 6e 28 50 61 72 73 65  eGetColumn(Parse
2a6c0 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20  *, Table*, int, 
2a6d0 69 6e 74 2c 20 69 6e 74 2c 20 75 38 29 3b 0a 76  int, int, u8);.v
2a6e0 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 43  oid sqlite3ExprC
2a6f0 6f 64 65 47 65 74 43 6f 6c 75 6d 6e 4f 66 54 61  odeGetColumnOfTa
2a700 62 6c 65 28 56 64 62 65 2a 2c 20 54 61 62 6c 65  ble(Vdbe*, Table
2a710 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74  *, int, int, int
2a720 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
2a730 78 70 72 43 6f 64 65 4d 6f 76 65 28 50 61 72 73  xprCodeMove(Pars
2a740 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e  e*, int, int, in
2a750 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
2a760 45 78 70 72 43 6f 64 65 28 50 61 72 73 65 2a 2c  ExprCode(Parse*,
2a770 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 76 6f   Expr*, int);.vo
2a780 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f  id sqlite3ExprCo
2a790 64 65 43 6f 70 79 28 50 61 72 73 65 2a 2c 20 45  deCopy(Parse*, E
2a7a0 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64  xpr*, int);.void
2a7b0 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65   sqlite3ExprCode
2a7c0 46 61 63 74 6f 72 61 62 6c 65 28 50 61 72 73 65  Factorable(Parse
2a7d0 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a  *, Expr*, int);.
2a7e0 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 43  int sqlite3ExprC
2a7f0 6f 64 65 41 74 49 6e 69 74 28 50 61 72 73 65 2a  odeAtInit(Parse*
2a800 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 69  , Expr*, int);.i
2a810 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f  nt sqlite3ExprCo
2a820 64 65 54 65 6d 70 28 50 61 72 73 65 2a 2c 20 45  deTemp(Parse*, E
2a830 78 70 72 2a 2c 20 69 6e 74 2a 29 3b 0a 69 6e 74  xpr*, int*);.int
2a840 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65   sqlite3ExprCode
2a850 54 61 72 67 65 74 28 50 61 72 73 65 2a 2c 20 45  Target(Parse*, E
2a860 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64  xpr*, int);.void
2a870 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65   sqlite3ExprCode
2a880 41 6e 64 43 61 63 68 65 28 50 61 72 73 65 2a 2c  AndCache(Parse*,
2a890 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e   Expr*, int);.in
2a8a0 74 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64  t sqlite3ExprCod
2a8b0 65 45 78 70 72 4c 69 73 74 28 50 61 72 73 65 2a  eExprList(Parse*
2a8c0 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74  , ExprList*, int
2a8d0 2c 20 69 6e 74 2c 20 75 38 29 3b 0a 23 64 65 66  , int, u8);.#def
2a8e0 69 6e 65 20 53 51 4c 49 54 45 5f 45 43 45 4c 5f  ine SQLITE_ECEL_
2a8f0 44 55 50 20 20 20 20 20 20 30 78 30 31 20 20 2f  DUP      0x01  /
2a900 2a 20 44 65 65 70 2c 20 6e 6f 74 20 73 68 61 6c  * Deep, not shal
2a910 6c 6f 77 20 63 6f 70 69 65 73 20 2a 2f 0a 23 64  low copies */.#d
2a920 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 43 45  efine SQLITE_ECE
2a930 4c 5f 46 41 43 54 4f 52 20 20 20 30 78 30 32 20  L_FACTOR   0x02 
2a940 20 2f 2a 20 46 61 63 74 6f 72 20 6f 75 74 20 63   /* Factor out c
2a950 6f 6e 73 74 61 6e 74 20 74 65 72 6d 73 20 2a 2f  onstant terms */
2a960 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
2a970 45 43 45 4c 5f 52 45 46 20 20 20 20 20 20 30 78  ECEL_REF      0x
2a980 30 34 20 20 2f 2a 20 55 73 65 20 45 78 70 72 4c  04  /* Use ExprL
2a990 69 73 74 2e 75 2e 78 2e 69 4f 72 64 65 72 42 79  ist.u.x.iOrderBy
2a9a0 43 6f 6c 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  Col */.#define S
2a9b0 51 4c 49 54 45 5f 45 43 45 4c 5f 4f 4d 49 54 52  QLITE_ECEL_OMITR
2a9c0 45 46 20 20 30 78 30 38 20 20 2f 2a 20 4f 6d 69  EF  0x08  /* Omi
2a9d0 74 20 69 66 20 45 78 70 72 4c 69 73 74 2e 75 2e  t if ExprList.u.
2a9e0 78 2e 69 4f 72 64 65 72 42 79 43 6f 6c 20 2a 2f  x.iOrderByCol */
2a9f0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
2aa00 72 49 66 54 72 75 65 28 50 61 72 73 65 2a 2c 20  rIfTrue(Parse*, 
2aa10 45 78 70 72 2a 2c 20 69 6e 74 2c 20 69 6e 74 29  Expr*, int, int)
2aa20 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
2aa30 70 72 49 66 46 61 6c 73 65 28 50 61 72 73 65 2a  prIfFalse(Parse*
2aa40 2c 20 45 78 70 72 2a 2c 20 69 6e 74 2c 20 69 6e  , Expr*, int, in
2aa50 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
2aa60 45 78 70 72 49 66 46 61 6c 73 65 44 75 70 28 50  ExprIfFalseDup(P
2aa70 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e  arse*, Expr*, in
2aa80 74 2c 20 69 6e 74 29 3b 0a 54 61 62 6c 65 20 2a  t, int);.Table *
2aa90 73 71 6c 69 74 65 33 46 69 6e 64 54 61 62 6c 65  sqlite3FindTable
2aaa0 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20  (sqlite3*,const 
2aab0 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61  char*, const cha
2aac0 72 2a 29 3b 0a 23 64 65 66 69 6e 65 20 4c 4f 43  r*);.#define LOC
2aad0 41 54 45 5f 56 49 45 57 20 20 20 20 30 78 30 31  ATE_VIEW    0x01
2aae0 0a 23 64 65 66 69 6e 65 20 4c 4f 43 41 54 45 5f  .#define LOCATE_
2aaf0 4e 4f 45 52 52 20 20 20 30 78 30 32 0a 54 61 62  NOERR   0x02.Tab
2ab00 6c 65 20 2a 73 71 6c 69 74 65 33 4c 6f 63 61 74  le *sqlite3Locat
2ab10 65 54 61 62 6c 65 28 50 61 72 73 65 2a 2c 75 33  eTable(Parse*,u3
2ab20 32 20 66 6c 61 67 73 2c 63 6f 6e 73 74 20 63 68  2 flags,const ch
2ab30 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  ar*, const char*
2ab40 29 3b 0a 54 61 62 6c 65 20 2a 73 71 6c 69 74 65  );.Table *sqlite
2ab50 33 4c 6f 63 61 74 65 54 61 62 6c 65 49 74 65 6d  3LocateTableItem
2ab60 28 50 61 72 73 65 2a 2c 75 33 32 20 66 6c 61 67  (Parse*,u32 flag
2ab70 73 2c 73 74 72 75 63 74 20 53 72 63 4c 69 73 74  s,struct SrcList
2ab80 5f 69 74 65 6d 20 2a 29 3b 0a 49 6e 64 65 78 20  _item *);.Index 
2ab90 2a 73 71 6c 69 74 65 33 46 69 6e 64 49 6e 64 65  *sqlite3FindInde
2aba0 78 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74  x(sqlite3*,const
2abb0 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68   char*, const ch
2abc0 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  ar*);.void sqlit
2abd0 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74  e3UnlinkAndDelet
2abe0 65 54 61 62 6c 65 28 73 71 6c 69 74 65 33 2a 2c  eTable(sqlite3*,
2abf0 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29  int,const char*)
2ac00 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 55 6e  ;.void sqlite3Un
2ac10 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65 49 6e 64  linkAndDeleteInd
2ac20 65 78 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c  ex(sqlite3*,int,
2ac30 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f  const char*);.vo
2ac40 69 64 20 73 71 6c 69 74 65 33 56 61 63 75 75 6d  id sqlite3Vacuum
2ac50 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 45  (Parse*,Token*,E
2ac60 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  xpr*);.int sqlit
2ac70 65 33 52 75 6e 56 61 63 75 75 6d 28 63 68 61 72  e3RunVacuum(char
2ac80 2a 2a 2c 20 73 71 6c 69 74 65 33 2a 2c 20 69 6e  **, sqlite3*, in
2ac90 74 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  t, sqlite3_value
2aca0 2a 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74 65  *);.char *sqlite
2acb0 33 4e 61 6d 65 46 72 6f 6d 54 6f 6b 65 6e 28 73  3NameFromToken(s
2acc0 71 6c 69 74 65 33 2a 2c 20 54 6f 6b 65 6e 2a 29  qlite3*, Token*)
2acd0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70  ;.int sqlite3Exp
2ace0 72 43 6f 6d 70 61 72 65 28 50 61 72 73 65 2a 2c  rCompare(Parse*,
2acf0 45 78 70 72 2a 2c 20 45 78 70 72 2a 2c 20 69 6e  Expr*, Expr*, in
2ad00 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45  t);.int sqlite3E
2ad10 78 70 72 43 6f 6d 70 61 72 65 53 6b 69 70 28 45  xprCompareSkip(E
2ad20 78 70 72 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74  xpr*, Expr*, int
2ad30 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78  );.int sqlite3Ex
2ad40 70 72 4c 69 73 74 43 6f 6d 70 61 72 65 28 45 78  prListCompare(Ex
2ad50 70 72 4c 69 73 74 2a 2c 20 45 78 70 72 4c 69 73  prList*, ExprLis
2ad60 74 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71  t*, int);.int sq
2ad70 6c 69 74 65 33 45 78 70 72 49 6d 70 6c 69 65 73  lite3ExprImplies
2ad80 45 78 70 72 28 50 61 72 73 65 2a 2c 45 78 70 72  Expr(Parse*,Expr
2ad90 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a  *, Expr*, int);.
2ada0 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 49  int sqlite3ExprI
2adb0 6d 70 6c 69 65 73 4e 6f 6e 4e 75 6c 6c 52 6f 77  mpliesNonNullRow
2adc0 28 45 78 70 72 2a 2c 69 6e 74 29 3b 0a 76 6f 69  (Expr*,int);.voi
2add0 64 20 73 71 6c 69 74 65 33 45 78 70 72 41 6e 61  d sqlite3ExprAna
2ade0 6c 79 7a 65 41 67 67 72 65 67 61 74 65 73 28 4e  lyzeAggregates(N
2adf0 61 6d 65 43 6f 6e 74 65 78 74 2a 2c 20 45 78 70  ameContext*, Exp
2ae00 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  r*);.void sqlite
2ae10 33 45 78 70 72 41 6e 61 6c 79 7a 65 41 67 67 4c  3ExprAnalyzeAggL
2ae20 69 73 74 28 4e 61 6d 65 43 6f 6e 74 65 78 74 2a  ist(NameContext*
2ae30 2c 45 78 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74  ,ExprList*);.int
2ae40 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 76 65   sqlite3ExprCove
2ae50 72 65 64 42 79 49 6e 64 65 78 28 45 78 70 72 2a  redByIndex(Expr*
2ae60 2c 20 69 6e 74 20 69 43 75 72 2c 20 49 6e 64 65  , int iCur, Inde
2ae70 78 20 2a 70 49 64 78 29 3b 0a 69 6e 74 20 73 71  x *pIdx);.int sq
2ae80 6c 69 74 65 33 46 75 6e 63 74 69 6f 6e 55 73 65  lite3FunctionUse
2ae90 73 54 68 69 73 53 72 63 28 45 78 70 72 2a 2c 20  sThisSrc(Expr*, 
2aea0 53 72 63 4c 69 73 74 2a 29 3b 0a 56 64 62 65 20  SrcList*);.Vdbe 
2aeb0 2a 73 71 6c 69 74 65 33 47 65 74 56 64 62 65 28  *sqlite3GetVdbe(
2aec0 50 61 72 73 65 2a 29 3b 0a 23 69 66 6e 64 65 66  Parse*);.#ifndef
2aed0 20 53 51 4c 49 54 45 5f 55 4e 54 45 53 54 41 42   SQLITE_UNTESTAB
2aee0 4c 45 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50  LE.void sqlite3P
2aef0 72 6e 67 53 61 76 65 53 74 61 74 65 28 76 6f 69  rngSaveState(voi
2af00 64 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  d);.void sqlite3
2af10 50 72 6e 67 52 65 73 74 6f 72 65 53 74 61 74 65  PrngRestoreState
2af20 28 76 6f 69 64 29 3b 0a 23 65 6e 64 69 66 0a 76  (void);.#endif.v
2af30 6f 69 64 20 73 71 6c 69 74 65 33 52 6f 6c 6c 62  oid sqlite3Rollb
2af40 61 63 6b 41 6c 6c 28 73 71 6c 69 74 65 33 2a 2c  ackAll(sqlite3*,
2af50 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
2af60 65 33 43 6f 64 65 56 65 72 69 66 79 53 63 68 65  e3CodeVerifySche
2af70 6d 61 28 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b  ma(Parse*, int);
2af80 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 64  .void sqlite3Cod
2af90 65 56 65 72 69 66 79 4e 61 6d 65 64 53 63 68 65  eVerifyNamedSche
2afa0 6d 61 28 50 61 72 73 65 2a 2c 20 63 6f 6e 73 74  ma(Parse*, const
2afb0 20 63 68 61 72 20 2a 7a 44 62 29 3b 0a 76 6f 69   char *zDb);.voi
2afc0 64 20 73 71 6c 69 74 65 33 42 65 67 69 6e 54 72  d sqlite3BeginTr
2afd0 61 6e 73 61 63 74 69 6f 6e 28 50 61 72 73 65 2a  ansaction(Parse*
2afe0 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
2aff0 69 74 65 33 45 6e 64 54 72 61 6e 73 61 63 74 69  ite3EndTransacti
2b000 6f 6e 28 50 61 72 73 65 2a 2c 69 6e 74 29 3b 0a  on(Parse*,int);.
2b010 76 6f 69 64 20 73 71 6c 69 74 65 33 53 61 76 65  void sqlite3Save
2b020 70 6f 69 6e 74 28 50 61 72 73 65 2a 2c 20 69 6e  point(Parse*, in
2b030 74 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64  t, Token*);.void
2b040 20 73 71 6c 69 74 65 33 43 6c 6f 73 65 53 61 76   sqlite3CloseSav
2b050 65 70 6f 69 6e 74 73 28 73 71 6c 69 74 65 33 20  epoints(sqlite3 
2b060 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
2b070 4c 65 61 76 65 4d 75 74 65 78 41 6e 64 43 6c 6f  LeaveMutexAndClo
2b080 73 65 5a 6f 6d 62 69 65 28 73 71 6c 69 74 65 33  seZombie(sqlite3
2b090 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45  *);.int sqlite3E
2b0a0 78 70 72 49 64 54 6f 54 72 75 65 46 61 6c 73 65  xprIdToTrueFalse
2b0b0 28 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c  (Expr*);.int sql
2b0c0 69 74 65 33 45 78 70 72 54 72 75 74 68 56 61 6c  ite3ExprTruthVal
2b0d0 75 65 28 63 6f 6e 73 74 20 45 78 70 72 2a 29 3b  ue(const Expr*);
2b0e0 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72  .int sqlite3Expr
2b0f0 49 73 43 6f 6e 73 74 61 6e 74 28 45 78 70 72 2a  IsConstant(Expr*
2b100 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78  );.int sqlite3Ex
2b110 70 72 49 73 43 6f 6e 73 74 61 6e 74 4e 6f 74 4a  prIsConstantNotJ
2b120 6f 69 6e 28 45 78 70 72 2a 29 3b 0a 69 6e 74 20  oin(Expr*);.int 
2b130 73 71 6c 69 74 65 33 45 78 70 72 49 73 43 6f 6e  sqlite3ExprIsCon
2b140 73 74 61 6e 74 4f 72 46 75 6e 63 74 69 6f 6e 28  stantOrFunction(
2b150 45 78 70 72 2a 2c 20 75 38 29 3b 0a 69 6e 74 20  Expr*, u8);.int 
2b160 73 71 6c 69 74 65 33 45 78 70 72 49 73 43 6f 6e  sqlite3ExprIsCon
2b170 73 74 61 6e 74 4f 72 47 72 6f 75 70 42 79 28 50  stantOrGroupBy(P
2b180 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 45 78  arse*, Expr*, Ex
2b190 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71  prList*);.int sq
2b1a0 6c 69 74 65 33 45 78 70 72 49 73 54 61 62 6c 65  lite3ExprIsTable
2b1b0 43 6f 6e 73 74 61 6e 74 28 45 78 70 72 2a 2c 69  Constant(Expr*,i
2b1c0 6e 74 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49  nt);.#ifdef SQLI
2b1d0 54 45 5f 45 4e 41 42 4c 45 5f 43 55 52 53 4f 52  TE_ENABLE_CURSOR
2b1e0 5f 48 49 4e 54 53 0a 69 6e 74 20 73 71 6c 69 74  _HINTS.int sqlit
2b1f0 65 33 45 78 70 72 43 6f 6e 74 61 69 6e 73 53 75  e3ExprContainsSu
2b200 62 71 75 65 72 79 28 45 78 70 72 2a 29 3b 0a 23  bquery(Expr*);.#
2b210 65 6e 64 69 66 0a 69 6e 74 20 73 71 6c 69 74 65  endif.int sqlite
2b220 33 45 78 70 72 49 73 49 6e 74 65 67 65 72 28 45  3ExprIsInteger(E
2b230 78 70 72 2a 2c 20 69 6e 74 2a 29 3b 0a 69 6e 74  xpr*, int*);.int
2b240 20 73 71 6c 69 74 65 33 45 78 70 72 43 61 6e 42   sqlite3ExprCanB
2b250 65 4e 75 6c 6c 28 63 6f 6e 73 74 20 45 78 70 72  eNull(const Expr
2b260 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45  *);.int sqlite3E
2b270 78 70 72 4e 65 65 64 73 4e 6f 41 66 66 69 6e 69  xprNeedsNoAffini
2b280 74 79 43 68 61 6e 67 65 28 63 6f 6e 73 74 20 45  tyChange(const E
2b290 78 70 72 2a 2c 20 63 68 61 72 29 3b 0a 69 6e 74  xpr*, char);.int
2b2a0 20 73 71 6c 69 74 65 33 49 73 52 6f 77 69 64 28   sqlite3IsRowid(
2b2b0 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f  const char*);.vo
2b2c0 69 64 20 73 71 6c 69 74 65 33 47 65 6e 65 72 61  id sqlite3Genera
2b2d0 74 65 52 6f 77 44 65 6c 65 74 65 28 0a 20 20 20  teRowDelete(.   
2b2e0 20 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a 2c 54   Parse*,Table*,T
2b2f0 72 69 67 67 65 72 2a 2c 69 6e 74 2c 69 6e 74 2c  rigger*,int,int,
2b300 69 6e 74 2c 69 31 36 2c 75 38 2c 75 38 2c 75 38  int,i16,u8,u8,u8
2b310 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ,int);.void sqli
2b320 74 65 33 47 65 6e 65 72 61 74 65 52 6f 77 49 6e  te3GenerateRowIn
2b330 64 65 78 44 65 6c 65 74 65 28 50 61 72 73 65 2a  dexDelete(Parse*
2b340 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69  , Table*, int, i
2b350 6e 74 2c 20 69 6e 74 2a 2c 20 69 6e 74 29 3b 0a  nt, int*, int);.
2b360 69 6e 74 20 73 71 6c 69 74 65 33 47 65 6e 65 72  int sqlite3Gener
2b370 61 74 65 49 6e 64 65 78 4b 65 79 28 50 61 72 73  ateIndexKey(Pars
2b380 65 2a 2c 20 49 6e 64 65 78 2a 2c 20 69 6e 74 2c  e*, Index*, int,
2b390 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 2a 2c   int, int, int*,
2b3a0 49 6e 64 65 78 2a 2c 69 6e 74 29 3b 0a 76 6f 69  Index*,int);.voi
2b3b0 64 20 73 71 6c 69 74 65 33 52 65 73 6f 6c 76 65  d sqlite3Resolve
2b3c0 50 61 72 74 49 64 78 4c 61 62 65 6c 28 50 61 72  PartIdxLabel(Par
2b3d0 73 65 2a 2c 69 6e 74 29 3b 0a 69 6e 74 20 73 71  se*,int);.int sq
2b3e0 6c 69 74 65 33 45 78 70 72 52 65 66 65 72 65 6e  lite3ExprReferen
2b3f0 63 65 73 55 70 64 61 74 65 64 43 6f 6c 75 6d 6e  cesUpdatedColumn
2b400 28 45 78 70 72 2a 2c 69 6e 74 2a 2c 69 6e 74 29  (Expr*,int*,int)
2b410 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 47 65  ;.void sqlite3Ge
2b420 6e 65 72 61 74 65 43 6f 6e 73 74 72 61 69 6e 74  nerateConstraint
2b430 43 68 65 63 6b 73 28 50 61 72 73 65 2a 2c 54 61  Checks(Parse*,Ta
2b440 62 6c 65 2a 2c 69 6e 74 2a 2c 69 6e 74 2c 69 6e  ble*,int*,int,in
2b450 74 2c 69 6e 74 2c 69 6e 74 2c 0a 20 20 20 20 20  t,int,int,.     
2b460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b480 75 38 2c 75 38 2c 69 6e 74 2c 69 6e 74 2a 2c 69  u8,u8,int,int*,i
2b490 6e 74 2a 2c 55 70 73 65 72 74 2a 29 3b 0a 23 69  nt*,Upsert*);.#i
2b4a0 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  fdef SQLITE_ENAB
2b4b0 4c 45 5f 4e 55 4c 4c 5f 54 52 49 4d 0a 20 20 76  LE_NULL_TRIM.  v
2b4c0 6f 69 64 20 73 71 6c 69 74 65 33 53 65 74 4d 61  oid sqlite3SetMa
2b4d0 6b 65 52 65 63 6f 72 64 50 35 28 56 64 62 65 2a  keRecordP5(Vdbe*
2b4e0 2c 54 61 62 6c 65 2a 29 3b 0a 23 65 6c 73 65 0a  ,Table*);.#else.
2b4f0 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
2b500 53 65 74 4d 61 6b 65 52 65 63 6f 72 64 50 35 28  SetMakeRecordP5(
2b510 41 2c 42 29 0a 23 65 6e 64 69 66 0a 76 6f 69 64  A,B).#endif.void
2b520 20 73 71 6c 69 74 65 33 43 6f 6d 70 6c 65 74 65   sqlite3Complete
2b530 49 6e 73 65 72 74 69 6f 6e 28 50 61 72 73 65 2a  Insertion(Parse*
2b540 2c 54 61 62 6c 65 2a 2c 69 6e 74 2c 69 6e 74 2c  ,Table*,int,int,
2b550 69 6e 74 2c 69 6e 74 2a 2c 69 6e 74 2c 69 6e 74  int,int*,int,int
2b560 2c 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ,int);.int sqlit
2b570 65 33 4f 70 65 6e 54 61 62 6c 65 41 6e 64 49 6e  e3OpenTableAndIn
2b580 64 69 63 65 73 28 50 61 72 73 65 2a 2c 20 54 61  dices(Parse*, Ta
2b590 62 6c 65 2a 2c 20 69 6e 74 2c 20 75 38 2c 20 69  ble*, int, u8, i
2b5a0 6e 74 2c 20 75 38 2a 2c 20 69 6e 74 2a 2c 20 69  nt, u8*, int*, i
2b5b0 6e 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  nt*);.void sqlit
2b5c0 65 33 42 65 67 69 6e 57 72 69 74 65 4f 70 65 72  e3BeginWriteOper
2b5d0 61 74 69 6f 6e 28 50 61 72 73 65 2a 2c 20 69 6e  ation(Parse*, in
2b5e0 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  t, int);.void sq
2b5f0 6c 69 74 65 33 4d 75 6c 74 69 57 72 69 74 65 28  lite3MultiWrite(
2b600 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71  Parse*);.void sq
2b610 6c 69 74 65 33 4d 61 79 41 62 6f 72 74 28 50 61  lite3MayAbort(Pa
2b620 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  rse*);.void sqli
2b630 74 65 33 48 61 6c 74 43 6f 6e 73 74 72 61 69 6e  te3HaltConstrain
2b640 74 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69  t(Parse*, int, i
2b650 6e 74 2c 20 63 68 61 72 2a 2c 20 69 38 2c 20 75  nt, char*, i8, u
2b660 38 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  8);.void sqlite3
2b670 55 6e 69 71 75 65 43 6f 6e 73 74 72 61 69 6e 74  UniqueConstraint
2b680 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 49 6e  (Parse*, int, In
2b690 64 65 78 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  dex*);.void sqli
2b6a0 74 65 33 52 6f 77 69 64 43 6f 6e 73 74 72 61 69  te3RowidConstrai
2b6b0 6e 74 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20  nt(Parse*, int, 
2b6c0 54 61 62 6c 65 2a 29 3b 0a 45 78 70 72 20 2a 73  Table*);.Expr *s
2b6d0 71 6c 69 74 65 33 45 78 70 72 44 75 70 28 73 71  qlite3ExprDup(sq
2b6e0 6c 69 74 65 33 2a 2c 45 78 70 72 2a 2c 69 6e 74  lite3*,Expr*,int
2b6f0 29 3b 0a 45 78 70 72 4c 69 73 74 20 2a 73 71 6c  );.ExprList *sql
2b700 69 74 65 33 45 78 70 72 4c 69 73 74 44 75 70 28  ite3ExprListDup(
2b710 73 71 6c 69 74 65 33 2a 2c 45 78 70 72 4c 69 73  sqlite3*,ExprLis
2b720 74 2a 2c 69 6e 74 29 3b 0a 53 72 63 4c 69 73 74  t*,int);.SrcList
2b730 20 2a 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74   *sqlite3SrcList
2b740 44 75 70 28 73 71 6c 69 74 65 33 2a 2c 53 72 63  Dup(sqlite3*,Src
2b750 4c 69 73 74 2a 2c 69 6e 74 29 3b 0a 49 64 4c 69  List*,int);.IdLi
2b760 73 74 20 2a 73 71 6c 69 74 65 33 49 64 4c 69 73  st *sqlite3IdLis
2b770 74 44 75 70 28 73 71 6c 69 74 65 33 2a 2c 49 64  tDup(sqlite3*,Id
2b780 4c 69 73 74 2a 29 3b 0a 53 65 6c 65 63 74 20 2a  List*);.Select *
2b790 73 71 6c 69 74 65 33 53 65 6c 65 63 74 44 75 70  sqlite3SelectDup
2b7a0 28 73 71 6c 69 74 65 33 2a 2c 53 65 6c 65 63 74  (sqlite3*,Select
2b7b0 2a 2c 69 6e 74 29 3b 0a 46 75 6e 63 44 65 66 20  *,int);.FuncDef 
2b7c0 2a 73 71 6c 69 74 65 33 46 75 6e 63 74 69 6f 6e  *sqlite3Function
2b7d0 53 65 61 72 63 68 28 69 6e 74 2c 63 6f 6e 73 74  Search(int,const
2b7e0 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71   char*);.void sq
2b7f0 6c 69 74 65 33 49 6e 73 65 72 74 42 75 69 6c 74  lite3InsertBuilt
2b800 69 6e 46 75 6e 63 73 28 46 75 6e 63 44 65 66 2a  inFuncs(FuncDef*
2b810 2c 69 6e 74 29 3b 0a 46 75 6e 63 44 65 66 20 2a  ,int);.FuncDef *
2b820 73 71 6c 69 74 65 33 46 69 6e 64 46 75 6e 63 74  sqlite3FindFunct
2b830 69 6f 6e 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e  ion(sqlite3*,con
2b840 73 74 20 63 68 61 72 2a 2c 69 6e 74 2c 75 38 2c  st char*,int,u8,
2b850 75 38 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  u8);.void sqlite
2b860 33 52 65 67 69 73 74 65 72 42 75 69 6c 74 69 6e  3RegisterBuiltin
2b870 46 75 6e 63 74 69 6f 6e 73 28 76 6f 69 64 29 3b  Functions(void);
2b880 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 67  .void sqlite3Reg
2b890 69 73 74 65 72 44 61 74 65 54 69 6d 65 46 75 6e  isterDateTimeFun
2b8a0 63 74 69 6f 6e 73 28 76 6f 69 64 29 3b 0a 76 6f  ctions(void);.vo
2b8b0 69 64 20 73 71 6c 69 74 65 33 52 65 67 69 73 74  id sqlite3Regist
2b8c0 65 72 50 65 72 43 6f 6e 6e 65 63 74 69 6f 6e 42  erPerConnectionB
2b8d0 75 69 6c 74 69 6e 46 75 6e 63 74 69 6f 6e 73 28  uiltinFunctions(
2b8e0 73 71 6c 69 74 65 33 2a 29 3b 0a 69 6e 74 20 73  sqlite3*);.int s
2b8f0 71 6c 69 74 65 33 53 61 66 65 74 79 43 68 65 63  qlite3SafetyChec
2b900 6b 4f 6b 28 73 71 6c 69 74 65 33 2a 29 3b 0a 69  kOk(sqlite3*);.i
2b910 6e 74 20 73 71 6c 69 74 65 33 53 61 66 65 74 79  nt sqlite3Safety
2b920 43 68 65 63 6b 53 69 63 6b 4f 72 4f 6b 28 73 71  CheckSickOrOk(sq
2b930 6c 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20 73 71  lite3*);.void sq
2b940 6c 69 74 65 33 43 68 61 6e 67 65 43 6f 6f 6b 69  lite3ChangeCooki
2b950 65 28 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a  e(Parse*, int);.
2b960 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51  .#if !defined(SQ
2b970 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 45 57 29 20  LITE_OMIT_VIEW) 
2b980 26 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  && !defined(SQLI
2b990 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47 45 52 29  TE_OMIT_TRIGGER)
2b9a0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 61 74  .void sqlite3Mat
2b9b0 65 72 69 61 6c 69 7a 65 56 69 65 77 28 50 61 72  erializeView(Par
2b9c0 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 45 78 70  se*, Table*, Exp
2b9d0 72 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 45 78  r*, ExprList*,Ex
2b9e0 70 72 2a 2c 69 6e 74 29 3b 0a 23 65 6e 64 69 66  pr*,int);.#endif
2b9f0 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
2ba00 5f 4f 4d 49 54 5f 54 52 49 47 47 45 52 0a 20 20  _OMIT_TRIGGER.  
2ba10 76 6f 69 64 20 73 71 6c 69 74 65 33 42 65 67 69  void sqlite3Begi
2ba20 6e 54 72 69 67 67 65 72 28 50 61 72 73 65 2a 2c  nTrigger(Parse*,
2ba30 20 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 69   Token*,Token*,i
2ba40 6e 74 2c 69 6e 74 2c 49 64 4c 69 73 74 2a 2c 53  nt,int,IdList*,S
2ba50 72 63 4c 69 73 74 2a 2c 0a 20 20 20 20 20 20 20  rcList*,.       
2ba60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ba70 20 20 20 20 45 78 70 72 2a 2c 69 6e 74 2c 20 69      Expr*,int, i
2ba80 6e 74 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69  nt);.  void sqli
2ba90 74 65 33 46 69 6e 69 73 68 54 72 69 67 67 65 72  te3FinishTrigger
2baa0 28 50 61 72 73 65 2a 2c 20 54 72 69 67 67 65 72  (Parse*, Trigger
2bab0 53 74 65 70 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a  Step*, Token*);.
2bac0 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 44 72    void sqlite3Dr
2bad0 6f 70 54 72 69 67 67 65 72 28 50 61 72 73 65 2a  opTrigger(Parse*
2bae0 2c 20 53 72 63 4c 69 73 74 2a 2c 20 69 6e 74 29  , SrcList*, int)
2baf0 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
2bb00 44 72 6f 70 54 72 69 67 67 65 72 50 74 72 28 50  DropTriggerPtr(P
2bb10 61 72 73 65 2a 2c 20 54 72 69 67 67 65 72 2a 29  arse*, Trigger*)
2bb20 3b 0a 20 20 54 72 69 67 67 65 72 20 2a 73 71 6c  ;.  Trigger *sql
2bb30 69 74 65 33 54 72 69 67 67 65 72 73 45 78 69 73  ite3TriggersExis
2bb40 74 28 50 61 72 73 65 20 2a 2c 20 54 61 62 6c 65  t(Parse *, Table
2bb50 2a 2c 20 69 6e 74 2c 20 45 78 70 72 4c 69 73 74  *, int, ExprList
2bb60 2a 2c 20 69 6e 74 20 2a 70 4d 61 73 6b 29 3b 0a  *, int *pMask);.
2bb70 20 20 54 72 69 67 67 65 72 20 2a 73 71 6c 69 74    Trigger *sqlit
2bb80 65 33 54 72 69 67 67 65 72 4c 69 73 74 28 50 61  e3TriggerList(Pa
2bb90 72 73 65 20 2a 2c 20 54 61 62 6c 65 20 2a 29 3b  rse *, Table *);
2bba0 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 43  .  void sqlite3C
2bbb0 6f 64 65 52 6f 77 54 72 69 67 67 65 72 28 50 61  odeRowTrigger(Pa
2bbc0 72 73 65 2a 2c 20 54 72 69 67 67 65 72 20 2a 2c  rse*, Trigger *,
2bbd0 20 69 6e 74 2c 20 45 78 70 72 4c 69 73 74 2a 2c   int, ExprList*,
2bbe0 20 69 6e 74 2c 20 54 61 62 6c 65 20 2a 2c 0a 20   int, Table *,. 
2bbf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bc00 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 2c 20             int, 
2bc10 69 6e 74 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69  int, int);.  voi
2bc20 64 20 73 71 6c 69 74 65 33 43 6f 64 65 52 6f 77  d sqlite3CodeRow
2bc30 54 72 69 67 67 65 72 44 69 72 65 63 74 28 50 61  TriggerDirect(Pa
2bc40 72 73 65 20 2a 2c 20 54 72 69 67 67 65 72 20 2a  rse *, Trigger *
2bc50 2c 20 54 61 62 6c 65 20 2a 2c 20 69 6e 74 2c 20  , Table *, int, 
2bc60 69 6e 74 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69  int, int);.  voi
2bc70 64 20 73 71 6c 69 74 65 56 69 65 77 54 72 69 67  d sqliteViewTrig
2bc80 67 65 72 73 28 50 61 72 73 65 2a 2c 20 54 61 62  gers(Parse*, Tab
2bc90 6c 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 2c  le*, Expr*, int,
2bca0 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a 20 20 76   ExprList*);.  v
2bcb0 6f 69 64 20 73 71 6c 69 74 65 33 44 65 6c 65 74  oid sqlite3Delet
2bcc0 65 54 72 69 67 67 65 72 53 74 65 70 28 73 71 6c  eTriggerStep(sql
2bcd0 69 74 65 33 2a 2c 20 54 72 69 67 67 65 72 53 74  ite3*, TriggerSt
2bce0 65 70 2a 29 3b 0a 20 20 54 72 69 67 67 65 72 53  ep*);.  TriggerS
2bcf0 74 65 70 20 2a 73 71 6c 69 74 65 33 54 72 69 67  tep *sqlite3Trig
2bd00 67 65 72 53 65 6c 65 63 74 53 74 65 70 28 73 71  gerSelectStep(sq
2bd10 6c 69 74 65 33 2a 2c 53 65 6c 65 63 74 2a 2c 0a  lite3*,Select*,.
2bd20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bd30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bd40 20 20 20 20 20 20 20 20 63 6f 6e 73 74 20 63 68          const ch
2bd50 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29  ar*,const char*)
2bd60 3b 0a 20 20 54 72 69 67 67 65 72 53 74 65 70 20  ;.  TriggerStep 
2bd70 2a 73 71 6c 69 74 65 33 54 72 69 67 67 65 72 49  *sqlite3TriggerI
2bd80 6e 73 65 72 74 53 74 65 70 28 50 61 72 73 65 2a  nsertStep(Parse*
2bd90 2c 54 6f 6b 65 6e 2a 2c 20 49 64 4c 69 73 74 2a  ,Token*, IdList*
2bda0 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
2bdb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bdc0 20 20 20 20 20 20 20 20 20 20 53 65 6c 65 63 74            Select
2bdd0 2a 2c 75 38 2c 55 70 73 65 72 74 2a 2c 0a 20 20  *,u8,Upsert*,.  
2bde0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bdf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2be00 20 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72        const char
2be10 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  *,const char*);.
2be20 20 20 54 72 69 67 67 65 72 53 74 65 70 20 2a 73    TriggerStep *s
2be30 71 6c 69 74 65 33 54 72 69 67 67 65 72 55 70 64  qlite3TriggerUpd
2be40 61 74 65 53 74 65 70 28 50 61 72 73 65 2a 2c 54  ateStep(Parse*,T
2be50 6f 6b 65 6e 2a 2c 45 78 70 72 4c 69 73 74 2a 2c  oken*,ExprList*,
2be60 20 45 78 70 72 2a 2c 20 75 38 2c 0a 20 20 20 20   Expr*, u8,.    
2be70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2be80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2be90 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c      const char*,
2bea0 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20 20  const char*);.  
2beb0 54 72 69 67 67 65 72 53 74 65 70 20 2a 73 71 6c  TriggerStep *sql
2bec0 69 74 65 33 54 72 69 67 67 65 72 44 65 6c 65 74  ite3TriggerDelet
2bed0 65 53 74 65 70 28 50 61 72 73 65 2a 2c 54 6f 6b  eStep(Parse*,Tok
2bee0 65 6e 2a 2c 20 45 78 70 72 2a 2c 0a 20 20 20 20  en*, Expr*,.    
2bef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bf00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bf10 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c      const char*,
2bf20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20 20  const char*);.  
2bf30 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65 6c 65  void sqlite3Dele
2bf40 74 65 54 72 69 67 67 65 72 28 73 71 6c 69 74 65  teTrigger(sqlite
2bf50 33 2a 2c 20 54 72 69 67 67 65 72 2a 29 3b 0a 20  3*, Trigger*);. 
2bf60 20 76 6f 69 64 20 73 71 6c 69 74 65 33 55 6e 6c   void sqlite3Unl
2bf70 69 6e 6b 41 6e 64 44 65 6c 65 74 65 54 72 69 67  inkAndDeleteTrig
2bf80 67 65 72 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74  ger(sqlite3*,int
2bf90 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20  ,const char*);. 
2bfa0 20 75 33 32 20 73 71 6c 69 74 65 33 54 72 69 67   u32 sqlite3Trig
2bfb0 67 65 72 43 6f 6c 6d 61 73 6b 28 50 61 72 73 65  gerColmask(Parse
2bfc0 2a 2c 54 72 69 67 67 65 72 2a 2c 45 78 70 72 4c  *,Trigger*,ExprL
2bfd0 69 73 74 2a 2c 69 6e 74 2c 69 6e 74 2c 54 61 62  ist*,int,int,Tab
2bfe0 6c 65 2a 2c 69 6e 74 29 3b 0a 23 20 64 65 66 69  le*,int);.# defi
2bff0 6e 65 20 73 71 6c 69 74 65 33 50 61 72 73 65 54  ne sqlite3ParseT
2c000 6f 70 6c 65 76 65 6c 28 70 29 20 28 28 70 29 2d  oplevel(p) ((p)-
2c010 3e 70 54 6f 70 6c 65 76 65 6c 20 3f 20 28 70 29  >pToplevel ? (p)
2c020 2d 3e 70 54 6f 70 6c 65 76 65 6c 20 3a 20 28 70  ->pToplevel : (p
2c030 29 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  )).# define sqli
2c040 74 65 33 49 73 54 6f 70 6c 65 76 65 6c 28 70 29  te3IsToplevel(p)
2c050 20 28 28 70 29 2d 3e 70 54 6f 70 6c 65 76 65 6c   ((p)->pToplevel
2c060 3d 3d 30 29 0a 23 65 6c 73 65 0a 23 20 64 65 66  ==0).#else.# def
2c070 69 6e 65 20 73 71 6c 69 74 65 33 54 72 69 67 67  ine sqlite3Trigg
2c080 65 72 73 45 78 69 73 74 28 42 2c 43 2c 44 2c 45  ersExist(B,C,D,E
2c090 2c 46 29 20 30 0a 23 20 64 65 66 69 6e 65 20 73  ,F) 0.# define s
2c0a0 71 6c 69 74 65 33 44 65 6c 65 74 65 54 72 69 67  qlite3DeleteTrig
2c0b0 67 65 72 28 41 2c 42 29 0a 23 20 64 65 66 69 6e  ger(A,B).# defin
2c0c0 65 20 73 71 6c 69 74 65 33 44 72 6f 70 54 72 69  e sqlite3DropTri
2c0d0 67 67 65 72 50 74 72 28 41 2c 42 29 0a 23 20 64  ggerPtr(A,B).# d
2c0e0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 55 6e 6c  efine sqlite3Unl
2c0f0 69 6e 6b 41 6e 64 44 65 6c 65 74 65 54 72 69 67  inkAndDeleteTrig
2c100 67 65 72 28 41 2c 42 2c 43 29 0a 23 20 64 65 66  ger(A,B,C).# def
2c110 69 6e 65 20 73 71 6c 69 74 65 33 43 6f 64 65 52  ine sqlite3CodeR
2c120 6f 77 54 72 69 67 67 65 72 28 41 2c 42 2c 43 2c  owTrigger(A,B,C,
2c130 44 2c 45 2c 46 2c 47 2c 48 2c 49 29 0a 23 20 64  D,E,F,G,H,I).# d
2c140 65 66 69 6e 65 20 73 71 6c 69 74 65 33 43 6f 64  efine sqlite3Cod
2c150 65 52 6f 77 54 72 69 67 67 65 72 44 69 72 65 63  eRowTriggerDirec
2c160 74 28 41 2c 42 2c 43 2c 44 2c 45 2c 46 29 0a 23  t(A,B,C,D,E,F).#
2c170 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54   define sqlite3T
2c180 72 69 67 67 65 72 4c 69 73 74 28 58 2c 20 59 29  riggerList(X, Y)
2c190 20 30 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69   0.# define sqli
2c1a0 74 65 33 50 61 72 73 65 54 6f 70 6c 65 76 65 6c  te3ParseToplevel
2c1b0 28 70 29 20 70 0a 23 20 64 65 66 69 6e 65 20 73  (p) p.# define s
2c1c0 71 6c 69 74 65 33 49 73 54 6f 70 6c 65 76 65 6c  qlite3IsToplevel
2c1d0 28 70 29 20 31 0a 23 20 64 65 66 69 6e 65 20 73  (p) 1.# define s
2c1e0 71 6c 69 74 65 33 54 72 69 67 67 65 72 43 6f 6c  qlite3TriggerCol
2c1f0 6d 61 73 6b 28 41 2c 42 2c 43 2c 44 2c 45 2c 46  mask(A,B,C,D,E,F
2c200 2c 47 29 20 30 0a 23 65 6e 64 69 66 0a 0a 69 6e  ,G) 0.#endif..in
2c210 74 20 73 71 6c 69 74 65 33 4a 6f 69 6e 54 79 70  t sqlite3JoinTyp
2c220 65 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a  e(Parse*, Token*
2c230 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a  , Token*, Token*
2c240 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43  );.void sqlite3C
2c250 72 65 61 74 65 46 6f 72 65 69 67 6e 4b 65 79 28  reateForeignKey(
2c260 50 61 72 73 65 2a 2c 20 45 78 70 72 4c 69 73 74  Parse*, ExprList
2c270 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 45 78 70 72 4c  *, Token*, ExprL
2c280 69 73 74 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64  ist*, int);.void
2c290 20 73 71 6c 69 74 65 33 44 65 66 65 72 46 6f 72   sqlite3DeferFor
2c2a0 65 69 67 6e 4b 65 79 28 50 61 72 73 65 2a 2c 20  eignKey(Parse*, 
2c2b0 69 6e 74 29 3b 0a 23 69 66 6e 64 65 66 20 53 51  int);.#ifndef SQ
2c2c0 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 48 4f 52  LITE_OMIT_AUTHOR
2c2d0 49 5a 41 54 49 4f 4e 0a 20 20 76 6f 69 64 20 73  IZATION.  void s
2c2e0 71 6c 69 74 65 33 41 75 74 68 52 65 61 64 28 50  qlite3AuthRead(P
2c2f0 61 72 73 65 2a 2c 45 78 70 72 2a 2c 53 63 68 65  arse*,Expr*,Sche
2c300 6d 61 2a 2c 53 72 63 4c 69 73 74 2a 29 3b 0a 20  ma*,SrcList*);. 
2c310 20 69 6e 74 20 73 71 6c 69 74 65 33 41 75 74 68   int sqlite3Auth
2c320 43 68 65 63 6b 28 50 61 72 73 65 2a 2c 69 6e 74  Check(Parse*,int
2c330 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63  , const char*, c
2c340 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73  onst char*, cons
2c350 74 20 63 68 61 72 2a 29 3b 0a 20 20 76 6f 69 64  t char*);.  void
2c360 20 73 71 6c 69 74 65 33 41 75 74 68 43 6f 6e 74   sqlite3AuthCont
2c370 65 78 74 50 75 73 68 28 50 61 72 73 65 2a 2c 20  extPush(Parse*, 
2c380 41 75 74 68 43 6f 6e 74 65 78 74 2a 2c 20 63 6f  AuthContext*, co
2c390 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20 20 76 6f  nst char*);.  vo
2c3a0 69 64 20 73 71 6c 69 74 65 33 41 75 74 68 43 6f  id sqlite3AuthCo
2c3b0 6e 74 65 78 74 50 6f 70 28 41 75 74 68 43 6f 6e  ntextPop(AuthCon
2c3c0 74 65 78 74 2a 29 3b 0a 20 20 69 6e 74 20 73 71  text*);.  int sq
2c3d0 6c 69 74 65 33 41 75 74 68 52 65 61 64 43 6f 6c  lite3AuthReadCol
2c3e0 28 50 61 72 73 65 2a 2c 20 63 6f 6e 73 74 20 63  (Parse*, const c
2c3f0 68 61 72 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61  har *, const cha
2c400 72 20 2a 2c 20 69 6e 74 29 3b 0a 23 65 6c 73 65  r *, int);.#else
2c410 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
2c420 33 41 75 74 68 52 65 61 64 28 61 2c 62 2c 63 2c  3AuthRead(a,b,c,
2c430 64 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  d).# define sqli
2c440 74 65 33 41 75 74 68 43 68 65 63 6b 28 61 2c 62  te3AuthCheck(a,b
2c450 2c 63 2c 64 2c 65 29 20 20 20 20 53 51 4c 49 54  ,c,d,e)    SQLIT
2c460 45 5f 4f 4b 0a 23 20 64 65 66 69 6e 65 20 73 71  E_OK.# define sq
2c470 6c 69 74 65 33 41 75 74 68 43 6f 6e 74 65 78 74  lite3AuthContext
2c480 50 75 73 68 28 61 2c 62 2c 63 29 0a 23 20 64 65  Push(a,b,c).# de
2c490 66 69 6e 65 20 73 71 6c 69 74 65 33 41 75 74 68  fine sqlite3Auth
2c4a0 43 6f 6e 74 65 78 74 50 6f 70 28 61 29 20 20 28  ContextPop(a)  (
2c4b0 28 76 6f 69 64 29 28 61 29 29 0a 23 65 6e 64 69  (void)(a)).#endi
2c4c0 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 74  f.void sqlite3At
2c4d0 74 61 63 68 28 50 61 72 73 65 2a 2c 20 45 78 70  tach(Parse*, Exp
2c4e0 72 2a 2c 20 45 78 70 72 2a 2c 20 45 78 70 72 2a  r*, Expr*, Expr*
2c4f0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44  );.void sqlite3D
2c500 65 74 61 63 68 28 50 61 72 73 65 2a 2c 20 45 78  etach(Parse*, Ex
2c510 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  pr*);.void sqlit
2c520 65 33 46 69 78 49 6e 69 74 28 44 62 46 69 78 65  e3FixInit(DbFixe
2c530 72 2a 2c 20 50 61 72 73 65 2a 2c 20 69 6e 74 2c  r*, Parse*, int,
2c540 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f   const char*, co
2c550 6e 73 74 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74  nst Token*);.int
2c560 20 73 71 6c 69 74 65 33 46 69 78 53 72 63 4c 69   sqlite3FixSrcLi
2c570 73 74 28 44 62 46 69 78 65 72 2a 2c 20 53 72 63  st(DbFixer*, Src
2c580 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  List*);.int sqli
2c590 74 65 33 46 69 78 53 65 6c 65 63 74 28 44 62 46  te3FixSelect(DbF
2c5a0 69 78 65 72 2a 2c 20 53 65 6c 65 63 74 2a 29 3b  ixer*, Select*);
2c5b0 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69 78 45  .int sqlite3FixE
2c5c0 78 70 72 28 44 62 46 69 78 65 72 2a 2c 20 45 78  xpr(DbFixer*, Ex
2c5d0 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  pr*);.int sqlite
2c5e0 33 46 69 78 45 78 70 72 4c 69 73 74 28 44 62 46  3FixExprList(DbF
2c5f0 69 78 65 72 2a 2c 20 45 78 70 72 4c 69 73 74 2a  ixer*, ExprList*
2c600 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69  );.int sqlite3Fi
2c610 78 54 72 69 67 67 65 72 53 74 65 70 28 44 62 46  xTriggerStep(DbF
2c620 69 78 65 72 2a 2c 20 54 72 69 67 67 65 72 53 74  ixer*, TriggerSt
2c630 65 70 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  ep*);.int sqlite
2c640 33 41 74 6f 46 28 63 6f 6e 73 74 20 63 68 61 72  3AtoF(const char
2c650 20 2a 7a 2c 20 64 6f 75 62 6c 65 2a 2c 20 69 6e   *z, double*, in
2c660 74 2c 20 75 38 29 3b 0a 69 6e 74 20 73 71 6c 69  t, u8);.int sqli
2c670 74 65 33 47 65 74 49 6e 74 33 32 28 63 6f 6e 73  te3GetInt32(cons
2c680 74 20 63 68 61 72 20 2a 2c 20 69 6e 74 2a 29 3b  t char *, int*);
2c690 0a 69 6e 74 20 73 71 6c 69 74 65 33 41 74 6f 69  .int sqlite3Atoi
2c6a0 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 23  (const char*);.#
2c6b0 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
2c6c0 49 54 5f 55 54 46 31 36 0a 69 6e 74 20 73 71 6c  IT_UTF16.int sql
2c6d0 69 74 65 33 55 74 66 31 36 42 79 74 65 4c 65 6e  ite3Utf16ByteLen
2c6e0 28 63 6f 6e 73 74 20 76 6f 69 64 20 2a 70 44 61  (const void *pDa
2c6f0 74 61 2c 20 69 6e 74 20 6e 43 68 61 72 29 3b 0a  ta, int nChar);.
2c700 23 65 6e 64 69 66 0a 69 6e 74 20 73 71 6c 69 74  #endif.int sqlit
2c710 65 33 55 74 66 38 43 68 61 72 4c 65 6e 28 63 6f  e3Utf8CharLen(co
2c720 6e 73 74 20 63 68 61 72 20 2a 70 44 61 74 61 2c  nst char *pData,
2c730 20 69 6e 74 20 6e 42 79 74 65 29 3b 0a 75 33 32   int nByte);.u32
2c740 20 73 71 6c 69 74 65 33 55 74 66 38 52 65 61 64   sqlite3Utf8Read
2c750 28 63 6f 6e 73 74 20 75 38 2a 2a 29 3b 0a 4c 6f  (const u8**);.Lo
2c760 67 45 73 74 20 73 71 6c 69 74 65 33 4c 6f 67 45  gEst sqlite3LogE
2c770 73 74 28 75 36 34 29 3b 0a 4c 6f 67 45 73 74 20  st(u64);.LogEst 
2c780 73 71 6c 69 74 65 33 4c 6f 67 45 73 74 41 64 64  sqlite3LogEstAdd
2c790 28 4c 6f 67 45 73 74 2c 4c 6f 67 45 73 74 29 3b  (LogEst,LogEst);
2c7a0 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
2c7b0 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
2c7c0 45 0a 4c 6f 67 45 73 74 20 73 71 6c 69 74 65 33  E.LogEst sqlite3
2c7d0 4c 6f 67 45 73 74 46 72 6f 6d 44 6f 75 62 6c 65  LogEstFromDouble
2c7e0 28 64 6f 75 62 6c 65 29 3b 0a 23 65 6e 64 69 66  (double);.#endif
2c7f0 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c  .#if defined(SQL
2c800 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 4d 54 5f  ITE_ENABLE_STMT_
2c810 53 43 41 4e 53 54 41 54 55 53 29 20 7c 7c 20 5c  SCANSTATUS) || \
2c820 0a 20 20 20 20 64 65 66 69 6e 65 64 28 53 51 4c  .    defined(SQL
2c830 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33  ITE_ENABLE_STAT3
2c840 5f 4f 52 5f 53 54 41 54 34 29 20 7c 7c 20 5c 0a  _OR_STAT4) || \.
2c850 20 20 20 20 64 65 66 69 6e 65 64 28 53 51 4c 49      defined(SQLI
2c860 54 45 5f 45 58 50 4c 41 49 4e 5f 45 53 54 49 4d  TE_EXPLAIN_ESTIM
2c870 41 54 45 44 5f 52 4f 57 53 29 0a 75 36 34 20 73  ATED_ROWS).u64 s
2c880 71 6c 69 74 65 33 4c 6f 67 45 73 74 54 6f 49 6e  qlite3LogEstToIn
2c890 74 28 4c 6f 67 45 73 74 29 3b 0a 23 65 6e 64 69  t(LogEst);.#endi
2c8a0 66 0a 56 4c 69 73 74 20 2a 73 71 6c 69 74 65 33  f.VList *sqlite3
2c8b0 56 4c 69 73 74 41 64 64 28 73 71 6c 69 74 65 33  VListAdd(sqlite3
2c8c0 2a 2c 56 4c 69 73 74 2a 2c 63 6f 6e 73 74 20 63  *,VList*,const c
2c8d0 68 61 72 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a 63  har*,int,int);.c
2c8e0 6f 6e 73 74 20 63 68 61 72 20 2a 73 71 6c 69 74  onst char *sqlit
2c8f0 65 33 56 4c 69 73 74 4e 75 6d 54 6f 4e 61 6d 65  e3VListNumToName
2c900 28 56 4c 69 73 74 2a 2c 69 6e 74 29 3b 0a 69 6e  (VList*,int);.in
2c910 74 20 73 71 6c 69 74 65 33 56 4c 69 73 74 4e 61  t sqlite3VListNa
2c920 6d 65 54 6f 4e 75 6d 28 56 4c 69 73 74 2a 2c 63  meToNum(VList*,c
2c930 6f 6e 73 74 20 63 68 61 72 2a 2c 69 6e 74 29 3b  onst char*,int);
2c940 0a 0a 2f 2a 0a 2a 2a 20 52 6f 75 74 69 6e 65 73  ../*.** Routines
2c950 20 74 6f 20 72 65 61 64 20 61 6e 64 20 77 72 69   to read and wri
2c960 74 65 20 76 61 72 69 61 62 6c 65 2d 6c 65 6e 67  te variable-leng
2c970 74 68 20 69 6e 74 65 67 65 72 73 2e 20 20 54 68  th integers.  Th
2c980 65 73 65 20 75 73 65 64 20 74 6f 0a 2a 2a 20 62  ese used to.** b
2c990 65 20 64 65 66 69 6e 65 64 20 6c 6f 63 61 6c 6c  e defined locall
2c9a0 79 2c 20 62 75 74 20 6e 6f 77 20 77 65 20 75 73  y, but now we us
2c9b0 65 20 74 68 65 20 76 61 72 69 6e 74 20 72 6f 75  e the varint rou
2c9c0 74 69 6e 65 73 20 69 6e 20 74 68 65 20 75 74 69  tines in the uti
2c9d0 6c 2e 63 0a 2a 2a 20 66 69 6c 65 2e 0a 2a 2f 0a  l.c.** file..*/.
2c9e0 69 6e 74 20 73 71 6c 69 74 65 33 50 75 74 56 61  int sqlite3PutVa
2c9f0 72 69 6e 74 28 75 6e 73 69 67 6e 65 64 20 63 68  rint(unsigned ch
2ca00 61 72 2a 2c 20 75 36 34 29 3b 0a 75 38 20 73 71  ar*, u64);.u8 sq
2ca10 6c 69 74 65 33 47 65 74 56 61 72 69 6e 74 28 63  lite3GetVarint(c
2ca20 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68  onst unsigned ch
2ca30 61 72 20 2a 2c 20 75 36 34 20 2a 29 3b 0a 75 38  ar *, u64 *);.u8
2ca40 20 73 71 6c 69 74 65 33 47 65 74 56 61 72 69 6e   sqlite3GetVarin
2ca50 74 33 32 28 63 6f 6e 73 74 20 75 6e 73 69 67 6e  t32(const unsign
2ca60 65 64 20 63 68 61 72 20 2a 2c 20 75 33 32 20 2a  ed char *, u32 *
2ca70 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 61  );.int sqlite3Va
2ca80 72 69 6e 74 4c 65 6e 28 75 36 34 20 76 29 3b 0a  rintLen(u64 v);.
2ca90 0a 2f 2a 0a 2a 2a 20 54 68 65 20 63 6f 6d 6d 6f  ./*.** The commo
2caa0 6e 20 63 61 73 65 20 69 73 20 66 6f 72 20 61 20  n case is for a 
2cab0 76 61 72 69 6e 74 20 74 6f 20 62 65 20 61 20 73  varint to be a s
2cac0 69 6e 67 6c 65 20 62 79 74 65 2e 20 20 54 68 65  ingle byte.  The
2cad0 79 20 66 6f 6c 6c 6f 77 69 6e 67 0a 2a 2a 20 6d  y following.** m
2cae0 61 63 72 6f 73 20 68 61 6e 64 6c 65 20 74 68 65  acros handle the
2caf0 20 63 6f 6d 6d 6f 6e 20 63 61 73 65 20 77 69 74   common case wit
2cb00 68 6f 75 74 20 61 20 70 72 6f 63 65 64 75 72 65  hout a procedure
2cb10 20 63 61 6c 6c 2c 20 62 75 74 20 74 68 65 6e 20   call, but then 
2cb20 63 61 6c 6c 0a 2a 2a 20 74 68 65 20 70 72 6f 63  call.** the proc
2cb30 65 64 75 72 65 20 66 6f 72 20 6c 61 72 67 65 72  edure for larger
2cb40 20 76 61 72 69 6e 74 73 2e 0a 2a 2f 0a 23 64 65   varints..*/.#de
2cb50 66 69 6e 65 20 67 65 74 56 61 72 69 6e 74 33 32  fine getVarint32
2cb60 28 41 2c 42 29 20 20 5c 0a 20 20 28 75 38 29 28  (A,B)  \.  (u8)(
2cb70 28 2a 28 41 29 3c 28 75 38 29 30 78 38 30 29 3f  (*(A)<(u8)0x80)?
2cb80 28 28 42 29 3d 28 75 33 32 29 2a 28 41 29 29 2c  ((B)=(u32)*(A)),
2cb90 31 3a 73 71 6c 69 74 65 33 47 65 74 56 61 72 69  1:sqlite3GetVari
2cba0 6e 74 33 32 28 28 41 29 2c 28 75 33 32 20 2a 29  nt32((A),(u32 *)
2cbb0 26 28 42 29 29 29 0a 23 64 65 66 69 6e 65 20 70  &(B))).#define p
2cbc0 75 74 56 61 72 69 6e 74 33 32 28 41 2c 42 29 20  utVarint32(A,B) 
2cbd0 20 5c 0a 20 20 28 75 38 29 28 28 28 75 33 32 29   \.  (u8)(((u32)
2cbe0 28 42 29 3c 28 75 33 32 29 30 78 38 30 29 3f 28  (B)<(u32)0x80)?(
2cbf0 2a 28 41 29 3d 28 75 6e 73 69 67 6e 65 64 20 63  *(A)=(unsigned c
2cc00 68 61 72 29 28 42 29 29 2c 31 3a 5c 0a 20 20 73  har)(B)),1:\.  s
2cc10 71 6c 69 74 65 33 50 75 74 56 61 72 69 6e 74 28  qlite3PutVarint(
2cc20 28 41 29 2c 28 42 29 29 29 0a 23 64 65 66 69 6e  (A),(B))).#defin
2cc30 65 20 67 65 74 56 61 72 69 6e 74 20 20 20 20 73  e getVarint    s
2cc40 71 6c 69 74 65 33 47 65 74 56 61 72 69 6e 74 0a  qlite3GetVarint.
2cc50 23 64 65 66 69 6e 65 20 70 75 74 56 61 72 69 6e  #define putVarin
2cc60 74 20 20 20 20 73 71 6c 69 74 65 33 50 75 74 56  t    sqlite3PutV
2cc70 61 72 69 6e 74 0a 0a 0a 63 6f 6e 73 74 20 63 68  arint...const ch
2cc80 61 72 20 2a 73 71 6c 69 74 65 33 49 6e 64 65 78  ar *sqlite3Index
2cc90 41 66 66 69 6e 69 74 79 53 74 72 28 73 71 6c 69  AffinityStr(sqli
2cca0 74 65 33 2a 2c 20 49 6e 64 65 78 2a 29 3b 0a 76  te3*, Index*);.v
2ccb0 6f 69 64 20 73 71 6c 69 74 65 33 54 61 62 6c 65  oid sqlite3Table
2ccc0 41 66 66 69 6e 69 74 79 28 56 64 62 65 2a 2c 20  Affinity(Vdbe*, 
2ccd0 54 61 62 6c 65 2a 2c 20 69 6e 74 29 3b 0a 63 68  Table*, int);.ch
2cce0 61 72 20 73 71 6c 69 74 65 33 43 6f 6d 70 61 72  ar sqlite3Compar
2ccf0 65 41 66 66 69 6e 69 74 79 28 45 78 70 72 20 2a  eAffinity(Expr *
2cd00 70 45 78 70 72 2c 20 63 68 61 72 20 61 66 66 32  pExpr, char aff2
2cd10 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 6e  );.int sqlite3In
2cd20 64 65 78 41 66 66 69 6e 69 74 79 4f 6b 28 45 78  dexAffinityOk(Ex
2cd30 70 72 20 2a 70 45 78 70 72 2c 20 63 68 61 72 20  pr *pExpr, char 
2cd40 69 64 78 5f 61 66 66 69 6e 69 74 79 29 3b 0a 63  idx_affinity);.c
2cd50 68 61 72 20 73 71 6c 69 74 65 33 54 61 62 6c 65  har sqlite3Table
2cd60 43 6f 6c 75 6d 6e 41 66 66 69 6e 69 74 79 28 54  ColumnAffinity(T
2cd70 61 62 6c 65 2a 2c 69 6e 74 29 3b 0a 63 68 61 72  able*,int);.char
2cd80 20 73 71 6c 69 74 65 33 45 78 70 72 41 66 66 69   sqlite3ExprAffi
2cd90 6e 69 74 79 28 45 78 70 72 20 2a 70 45 78 70 72  nity(Expr *pExpr
2cda0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 41 74  );.int sqlite3At
2cdb0 6f 69 36 34 28 63 6f 6e 73 74 20 63 68 61 72 2a  oi64(const char*
2cdc0 2c 20 69 36 34 2a 2c 20 69 6e 74 2c 20 75 38 29  , i64*, int, u8)
2cdd0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 44 65 63  ;.int sqlite3Dec
2cde0 4f 72 48 65 78 54 6f 49 36 34 28 63 6f 6e 73 74  OrHexToI64(const
2cdf0 20 63 68 61 72 2a 2c 20 69 36 34 2a 29 3b 0a 76   char*, i64*);.v
2ce00 6f 69 64 20 73 71 6c 69 74 65 33 45 72 72 6f 72  oid sqlite3Error
2ce10 57 69 74 68 4d 73 67 28 73 71 6c 69 74 65 33 2a  WithMsg(sqlite3*
2ce20 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61  , int, const cha
2ce30 72 2a 2c 2e 2e 2e 29 3b 0a 76 6f 69 64 20 73 71  r*,...);.void sq
2ce40 6c 69 74 65 33 45 72 72 6f 72 28 73 71 6c 69 74  lite3Error(sqlit
2ce50 65 33 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73  e3*,int);.void s
2ce60 71 6c 69 74 65 33 53 79 73 74 65 6d 45 72 72 6f  qlite3SystemErro
2ce70 72 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 29 3b  r(sqlite3*,int);
2ce80 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 48 65  .void *sqlite3He
2ce90 78 54 6f 42 6c 6f 62 28 73 71 6c 69 74 65 33 2a  xToBlob(sqlite3*
2cea0 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 2c  , const char *z,
2ceb0 20 69 6e 74 20 6e 29 3b 0a 75 38 20 73 71 6c 69   int n);.u8 sqli
2cec0 74 65 33 48 65 78 54 6f 49 6e 74 28 69 6e 74 20  te3HexToInt(int 
2ced0 68 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 54  h);.int sqlite3T
2cee0 77 6f 50 61 72 74 4e 61 6d 65 28 50 61 72 73 65  woPartName(Parse
2cef0 20 2a 2c 20 54 6f 6b 65 6e 20 2a 2c 20 54 6f 6b   *, Token *, Tok
2cf00 65 6e 20 2a 2c 20 54 6f 6b 65 6e 20 2a 2a 29 3b  en *, Token **);
2cf10 0a 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51  ..#if defined(SQ
2cf20 4c 49 54 45 5f 4e 45 45 44 5f 45 52 52 5f 4e 41  LITE_NEED_ERR_NA
2cf30 4d 45 29 0a 63 6f 6e 73 74 20 63 68 61 72 20 2a  ME).const char *
2cf40 73 71 6c 69 74 65 33 45 72 72 4e 61 6d 65 28 69  sqlite3ErrName(i
2cf50 6e 74 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66  nt);.#endif..#if
2cf60 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  def SQLITE_ENABL
2cf70 45 5f 44 45 53 45 52 49 41 4c 49 5a 45 0a 69 6e  E_DESERIALIZE.in
2cf80 74 20 73 71 6c 69 74 65 33 4d 65 6d 64 62 49 6e  t sqlite3MemdbIn
2cf90 69 74 28 76 6f 69 64 29 3b 0a 23 65 6e 64 69 66  it(void);.#endif
2cfa0 0a 0a 63 6f 6e 73 74 20 63 68 61 72 20 2a 73 71  ..const char *sq
2cfb0 6c 69 74 65 33 45 72 72 53 74 72 28 69 6e 74 29  lite3ErrStr(int)
2cfc0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 65 61  ;.int sqlite3Rea
2cfd0 64 53 63 68 65 6d 61 28 50 61 72 73 65 20 2a 70  dSchema(Parse *p
2cfe0 50 61 72 73 65 29 3b 0a 43 6f 6c 6c 53 65 71 20  Parse);.CollSeq 
2cff0 2a 73 71 6c 69 74 65 33 46 69 6e 64 43 6f 6c 6c  *sqlite3FindColl
2d000 53 65 71 28 73 71 6c 69 74 65 33 2a 2c 75 38 20  Seq(sqlite3*,u8 
2d010 65 6e 63 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  enc, const char*
2d020 2c 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ,int);.int sqlit
2d030 65 33 49 73 42 69 6e 61 72 79 28 63 6f 6e 73 74  e3IsBinary(const
2d040 20 43 6f 6c 6c 53 65 71 2a 29 3b 0a 43 6f 6c 6c   CollSeq*);.Coll
2d050 53 65 71 20 2a 73 71 6c 69 74 65 33 4c 6f 63 61  Seq *sqlite3Loca
2d060 74 65 43 6f 6c 6c 53 65 71 28 50 61 72 73 65 20  teCollSeq(Parse 
2d070 2a 70 50 61 72 73 65 2c 20 63 6f 6e 73 74 20 63  *pParse, const c
2d080 68 61 72 2a 7a 4e 61 6d 65 29 3b 0a 43 6f 6c 6c  har*zName);.Coll
2d090 53 65 71 20 2a 73 71 6c 69 74 65 33 45 78 70 72  Seq *sqlite3Expr
2d0a0 43 6f 6c 6c 53 65 71 28 50 61 72 73 65 20 2a 70  CollSeq(Parse *p
2d0b0 50 61 72 73 65 2c 20 45 78 70 72 20 2a 70 45 78  Parse, Expr *pEx
2d0c0 70 72 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73 71  pr);.CollSeq *sq
2d0d0 6c 69 74 65 33 45 78 70 72 4e 4e 43 6f 6c 6c 53  lite3ExprNNCollS
2d0e0 65 71 28 50 61 72 73 65 20 2a 70 50 61 72 73 65  eq(Parse *pParse
2d0f0 2c 20 45 78 70 72 20 2a 70 45 78 70 72 29 3b 0a  , Expr *pExpr);.
2d100 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 43  int sqlite3ExprC
2d110 6f 6c 6c 53 65 71 4d 61 74 63 68 28 50 61 72 73  ollSeqMatch(Pars
2d120 65 2a 2c 45 78 70 72 2a 2c 45 78 70 72 2a 29 3b  e*,Expr*,Expr*);
2d130 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78  .Expr *sqlite3Ex
2d140 70 72 41 64 64 43 6f 6c 6c 61 74 65 54 6f 6b 65  prAddCollateToke
2d150 6e 28 50 61 72 73 65 20 2a 70 50 61 72 73 65 2c  n(Parse *pParse,
2d160 20 45 78 70 72 2a 2c 20 63 6f 6e 73 74 20 54 6f   Expr*, const To
2d170 6b 65 6e 2a 2c 20 69 6e 74 29 3b 0a 45 78 70 72  ken*, int);.Expr
2d180 20 2a 73 71 6c 69 74 65 33 45 78 70 72 41 64 64   *sqlite3ExprAdd
2d190 43 6f 6c 6c 61 74 65 53 74 72 69 6e 67 28 50 61  CollateString(Pa
2d1a0 72 73 65 2a 2c 45 78 70 72 2a 2c 63 6f 6e 73 74  rse*,Expr*,const
2d1b0 20 63 68 61 72 2a 29 3b 0a 45 78 70 72 20 2a 73   char*);.Expr *s
2d1c0 71 6c 69 74 65 33 45 78 70 72 53 6b 69 70 43 6f  qlite3ExprSkipCo
2d1d0 6c 6c 61 74 65 28 45 78 70 72 2a 29 3b 0a 69 6e  llate(Expr*);.in
2d1e0 74 20 73 71 6c 69 74 65 33 43 68 65 63 6b 43 6f  t sqlite3CheckCo
2d1f0 6c 6c 53 65 71 28 50 61 72 73 65 20 2a 2c 20 43  llSeq(Parse *, C
2d200 6f 6c 6c 53 65 71 20 2a 29 3b 0a 69 6e 74 20 73  ollSeq *);.int s
2d210 71 6c 69 74 65 33 57 72 69 74 61 62 6c 65 53 63  qlite3WritableSc
2d220 68 65 6d 61 28 73 71 6c 69 74 65 33 2a 29 3b 0a  hema(sqlite3*);.
2d230 69 6e 74 20 73 71 6c 69 74 65 33 43 68 65 63 6b  int sqlite3Check
2d240 4f 62 6a 65 63 74 4e 61 6d 65 28 50 61 72 73 65  ObjectName(Parse
2d250 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a   *, const char *
2d260 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56  );.void sqlite3V
2d270 64 62 65 53 65 74 43 68 61 6e 67 65 73 28 73 71  dbeSetChanges(sq
2d280 6c 69 74 65 33 20 2a 2c 20 69 6e 74 29 3b 0a 69  lite3 *, int);.i
2d290 6e 74 20 73 71 6c 69 74 65 33 41 64 64 49 6e 74  nt sqlite3AddInt
2d2a0 36 34 28 69 36 34 2a 2c 69 36 34 29 3b 0a 69 6e  64(i64*,i64);.in
2d2b0 74 20 73 71 6c 69 74 65 33 53 75 62 49 6e 74 36  t sqlite3SubInt6
2d2c0 34 28 69 36 34 2a 2c 69 36 34 29 3b 0a 69 6e 74  4(i64*,i64);.int
2d2d0 20 73 71 6c 69 74 65 33 4d 75 6c 49 6e 74 36 34   sqlite3MulInt64
2d2e0 28 69 36 34 2a 2c 69 36 34 29 3b 0a 69 6e 74 20  (i64*,i64);.int 
2d2f0 73 71 6c 69 74 65 33 41 62 73 49 6e 74 33 32 28  sqlite3AbsInt32(
2d300 69 6e 74 29 3b 0a 23 69 66 64 65 66 20 53 51 4c  int);.#ifdef SQL
2d310 49 54 45 5f 45 4e 41 42 4c 45 5f 38 5f 33 5f 4e  ITE_ENABLE_8_3_N
2d320 41 4d 45 53 0a 76 6f 69 64 20 73 71 6c 69 74 65  AMES.void sqlite
2d330 33 46 69 6c 65 53 75 66 66 69 78 33 28 63 6f 6e  3FileSuffix3(con
2d340 73 74 20 63 68 61 72 2a 2c 20 63 68 61 72 2a 29  st char*, char*)
2d350 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65  ;.#else.# define
2d360 20 73 71 6c 69 74 65 33 46 69 6c 65 53 75 66 66   sqlite3FileSuff
2d370 69 78 33 28 58 2c 59 29 0a 23 65 6e 64 69 66 0a  ix3(X,Y).#endif.
2d380 75 38 20 73 71 6c 69 74 65 33 47 65 74 42 6f 6f  u8 sqlite3GetBoo
2d390 6c 65 61 6e 28 63 6f 6e 73 74 20 63 68 61 72 20  lean(const char 
2d3a0 2a 7a 2c 75 38 29 3b 0a 0a 63 6f 6e 73 74 20 76  *z,u8);..const v
2d3b0 6f 69 64 20 2a 73 71 6c 69 74 65 33 56 61 6c 75  oid *sqlite3Valu
2d3c0 65 54 65 78 74 28 73 71 6c 69 74 65 33 5f 76 61  eText(sqlite3_va
2d3d0 6c 75 65 2a 2c 20 75 38 29 3b 0a 69 6e 74 20 73  lue*, u8);.int s
2d3e0 71 6c 69 74 65 33 56 61 6c 75 65 42 79 74 65 73  qlite3ValueBytes
2d3f0 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2c  (sqlite3_value*,
2d400 20 75 38 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74   u8);.void sqlit
2d410 65 33 56 61 6c 75 65 53 65 74 53 74 72 28 73 71  e3ValueSetStr(sq
2d420 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2c 20 69 6e  lite3_value*, in
2d430 74 2c 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a 2c  t, const void *,
2d440 75 38 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  u8,.            
2d450 20 20 20 20 20 20 20 20 20 20 20 20 76 6f 69 64              void
2d460 28 2a 29 28 76 6f 69 64 2a 29 29 3b 0a 76 6f 69  (*)(void*));.voi
2d470 64 20 73 71 6c 69 74 65 33 56 61 6c 75 65 53 65  d sqlite3ValueSe
2d480 74 4e 75 6c 6c 28 73 71 6c 69 74 65 33 5f 76 61  tNull(sqlite3_va
2d490 6c 75 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  lue*);.void sqli
2d4a0 74 65 33 56 61 6c 75 65 46 72 65 65 28 73 71 6c  te3ValueFree(sql
2d4b0 69 74 65 33 5f 76 61 6c 75 65 2a 29 3b 0a 73 71  ite3_value*);.sq
2d4c0 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 73 71 6c  lite3_value *sql
2d4d0 69 74 65 33 56 61 6c 75 65 4e 65 77 28 73 71 6c  ite3ValueNew(sql
2d4e0 69 74 65 33 20 2a 29 3b 0a 23 69 66 6e 64 65 66  ite3 *);.#ifndef
2d4f0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46   SQLITE_OMIT_UTF
2d500 31 36 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33  16.char *sqlite3
2d510 55 74 66 31 36 74 6f 38 28 73 71 6c 69 74 65 33  Utf16to8(sqlite3
2d520 20 2a 2c 20 63 6f 6e 73 74 20 76 6f 69 64 2a 2c   *, const void*,
2d530 20 69 6e 74 2c 20 75 38 29 3b 0a 23 65 6e 64 69   int, u8);.#endi
2d540 66 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 61 6c  f.int sqlite3Val
2d550 75 65 46 72 6f 6d 45 78 70 72 28 73 71 6c 69 74  ueFromExpr(sqlit
2d560 65 33 20 2a 2c 20 45 78 70 72 20 2a 2c 20 75 38  e3 *, Expr *, u8
2d570 2c 20 75 38 2c 20 73 71 6c 69 74 65 33 5f 76 61  , u8, sqlite3_va
2d580 6c 75 65 20 2a 2a 29 3b 0a 76 6f 69 64 20 73 71  lue **);.void sq
2d590 6c 69 74 65 33 56 61 6c 75 65 41 70 70 6c 79 41  lite3ValueApplyA
2d5a0 66 66 69 6e 69 74 79 28 73 71 6c 69 74 65 33 5f  ffinity(sqlite3_
2d5b0 76 61 6c 75 65 20 2a 2c 20 75 38 2c 20 75 38 29  value *, u8, u8)
2d5c0 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ;.#ifndef SQLITE
2d5d0 5f 41 4d 41 4c 47 41 4d 41 54 49 4f 4e 0a 65 78  _AMALGAMATION.ex
2d5e0 74 65 72 6e 20 63 6f 6e 73 74 20 75 6e 73 69 67  tern const unsig
2d5f0 6e 65 64 20 63 68 61 72 20 73 71 6c 69 74 65 33  ned char sqlite3
2d600 4f 70 63 6f 64 65 50 72 6f 70 65 72 74 79 5b 5d  OpcodeProperty[]
2d610 3b 0a 65 78 74 65 72 6e 20 63 6f 6e 73 74 20 63  ;.extern const c
2d620 68 61 72 20 73 71 6c 69 74 65 33 53 74 72 42 49  har sqlite3StrBI
2d630 4e 41 52 59 5b 5d 3b 0a 65 78 74 65 72 6e 20 63  NARY[];.extern c
2d640 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68  onst unsigned ch
2d650 61 72 20 73 71 6c 69 74 65 33 55 70 70 65 72 54  ar sqlite3UpperT
2d660 6f 4c 6f 77 65 72 5b 5d 3b 0a 65 78 74 65 72 6e  oLower[];.extern
2d670 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20   const unsigned 
2d680 63 68 61 72 20 73 71 6c 69 74 65 33 43 74 79 70  char sqlite3Ctyp
2d690 65 4d 61 70 5b 5d 3b 0a 65 78 74 65 72 6e 20 63  eMap[];.extern c
2d6a0 6f 6e 73 74 20 54 6f 6b 65 6e 20 73 71 6c 69 74  onst Token sqlit
2d6b0 65 33 49 6e 74 54 6f 6b 65 6e 73 5b 5d 3b 0a 65  e3IntTokens[];.e
2d6c0 78 74 65 72 6e 20 53 51 4c 49 54 45 5f 57 53 44  xtern SQLITE_WSD
2d6d0 20 73 74 72 75 63 74 20 53 71 6c 69 74 65 33 43   struct Sqlite3C
2d6e0 6f 6e 66 69 67 20 73 71 6c 69 74 65 33 43 6f 6e  onfig sqlite3Con
2d6f0 66 69 67 3b 0a 65 78 74 65 72 6e 20 46 75 6e 63  fig;.extern Func
2d700 44 65 66 48 61 73 68 20 73 71 6c 69 74 65 33 42  DefHash sqlite3B
2d710 75 69 6c 74 69 6e 46 75 6e 63 74 69 6f 6e 73 3b  uiltinFunctions;
2d720 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
2d730 4f 4d 49 54 5f 57 53 44 0a 65 78 74 65 72 6e 20  OMIT_WSD.extern 
2d740 69 6e 74 20 73 71 6c 69 74 65 33 50 65 6e 64 69  int sqlite3Pendi
2d750 6e 67 42 79 74 65 3b 0a 23 65 6e 64 69 66 0a 23  ngByte;.#endif.#
2d760 65 6e 64 69 66 0a 23 69 66 64 65 66 20 56 44 42  endif.#ifdef VDB
2d770 45 5f 50 52 4f 46 49 4c 45 0a 65 78 74 65 72 6e  E_PROFILE.extern
2d780 20 73 71 6c 69 74 65 33 5f 75 69 6e 74 36 34 20   sqlite3_uint64 
2d790 73 71 6c 69 74 65 33 4e 50 72 6f 66 69 6c 65 43  sqlite3NProfileC
2d7a0 6e 74 3b 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20  nt;.#endif.void 
2d7b0 73 71 6c 69 74 65 33 52 6f 6f 74 50 61 67 65 4d  sqlite3RootPageM
2d7c0 6f 76 65 64 28 73 71 6c 69 74 65 33 2a 2c 20 69  oved(sqlite3*, i
2d7d0 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76  nt, int, int);.v
2d7e0 6f 69 64 20 73 71 6c 69 74 65 33 52 65 69 6e 64  oid sqlite3Reind
2d7f0 65 78 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e  ex(Parse*, Token
2d800 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64  *, Token*);.void
2d810 20 73 71 6c 69 74 65 33 41 6c 74 65 72 46 75 6e   sqlite3AlterFun
2d820 63 74 69 6f 6e 73 28 76 6f 69 64 29 3b 0a 76 6f  ctions(void);.vo
2d830 69 64 20 73 71 6c 69 74 65 33 41 6c 74 65 72 52  id sqlite3AlterR
2d840 65 6e 61 6d 65 54 61 62 6c 65 28 50 61 72 73 65  enameTable(Parse
2d850 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 54 6f 6b  *, SrcList*, Tok
2d860 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  en*);.void sqlit
2d870 65 33 41 6c 74 65 72 52 65 6e 61 6d 65 43 6f 6c  e3AlterRenameCol
2d880 75 6d 6e 28 50 61 72 73 65 2a 2c 20 53 72 63 4c  umn(Parse*, SrcL
2d890 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f  ist*, Token*, To
2d8a0 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ken*);.int sqlit
2d8b0 65 33 47 65 74 54 6f 6b 65 6e 28 63 6f 6e 73 74  e3GetToken(const
2d8c0 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a   unsigned char *
2d8d0 2c 20 69 6e 74 20 2a 29 3b 0a 76 6f 69 64 20 73  , int *);.void s
2d8e0 71 6c 69 74 65 33 4e 65 73 74 65 64 50 61 72 73  qlite3NestedPars
2d8f0 65 28 50 61 72 73 65 2a 2c 20 63 6f 6e 73 74 20  e(Parse*, const 
2d900 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 76 6f 69  char*, ...);.voi
2d910 64 20 73 71 6c 69 74 65 33 45 78 70 69 72 65 50  d sqlite3ExpireP
2d920 72 65 70 61 72 65 64 53 74 61 74 65 6d 65 6e 74  reparedStatement
2d930 73 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74 29  s(sqlite3*, int)
2d940 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 6f 64  ;.int sqlite3Cod
2d950 65 53 75 62 73 65 6c 65 63 74 28 50 61 72 73 65  eSubselect(Parse
2d960 2a 2c 20 45 78 70 72 20 2a 2c 20 69 6e 74 2c 20  *, Expr *, int, 
2d970 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
2d980 65 33 53 65 6c 65 63 74 50 72 65 70 28 50 61 72  e3SelectPrep(Par
2d990 73 65 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 4e 61  se*, Select*, Na
2d9a0 6d 65 43 6f 6e 74 65 78 74 2a 29 3b 0a 76 6f 69  meContext*);.voi
2d9b0 64 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74 57  d sqlite3SelectW
2d9c0 72 6f 6e 67 4e 75 6d 54 65 72 6d 73 45 72 72 6f  rongNumTermsErro
2d9d0 72 28 50 61 72 73 65 20 2a 70 50 61 72 73 65 2c  r(Parse *pParse,
2d9e0 20 53 65 6c 65 63 74 20 2a 70 29 3b 0a 69 6e 74   Select *p);.int
2d9f0 20 73 71 6c 69 74 65 33 4d 61 74 63 68 53 70 61   sqlite3MatchSpa
2da00 6e 4e 61 6d 65 28 63 6f 6e 73 74 20 63 68 61 72  nName(const char
2da10 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  *, const char*, 
2da20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e  const char*, con
2da30 73 74 20 63 68 61 72 2a 29 3b 0a 69 6e 74 20 73  st char*);.int s
2da40 71 6c 69 74 65 33 52 65 73 6f 6c 76 65 45 78 70  qlite3ResolveExp
2da50 72 4e 61 6d 65 73 28 4e 61 6d 65 43 6f 6e 74 65  rNames(NameConte
2da60 78 74 2a 2c 20 45 78 70 72 2a 29 3b 0a 69 6e 74  xt*, Expr*);.int
2da70 20 73 71 6c 69 74 65 33 52 65 73 6f 6c 76 65 45   sqlite3ResolveE
2da80 78 70 72 4c 69 73 74 4e 61 6d 65 73 28 4e 61 6d  xprListNames(Nam
2da90 65 43 6f 6e 74 65 78 74 2a 2c 20 45 78 70 72 4c  eContext*, ExprL
2daa0 69 73 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ist*);.void sqli
2dab0 74 65 33 52 65 73 6f 6c 76 65 53 65 6c 65 63 74  te3ResolveSelect
2dac0 4e 61 6d 65 73 28 50 61 72 73 65 2a 2c 20 53 65  Names(Parse*, Se
2dad0 6c 65 63 74 2a 2c 20 4e 61 6d 65 43 6f 6e 74 65  lect*, NameConte
2dae0 78 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  xt*);.void sqlit
2daf0 65 33 52 65 73 6f 6c 76 65 53 65 6c 66 52 65 66  e3ResolveSelfRef
2db00 65 72 65 6e 63 65 28 50 61 72 73 65 2a 2c 54 61  erence(Parse*,Ta
2db10 62 6c 65 2a 2c 69 6e 74 2c 45 78 70 72 2a 2c 45  ble*,int,Expr*,E
2db20 78 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73  xprList*);.int s
2db30 71 6c 69 74 65 33 52 65 73 6f 6c 76 65 4f 72 64  qlite3ResolveOrd
2db40 65 72 47 72 6f 75 70 42 79 28 50 61 72 73 65 2a  erGroupBy(Parse*
2db50 2c 20 53 65 6c 65 63 74 2a 2c 20 45 78 70 72 4c  , Select*, ExprL
2db60 69 73 74 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  ist*, const char
2db70 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
2db80 43 6f 6c 75 6d 6e 44 65 66 61 75 6c 74 28 56 64  ColumnDefault(Vd
2db90 62 65 20 2a 2c 20 54 61 62 6c 65 20 2a 2c 20 69  be *, Table *, i
2dba0 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  nt, int);.void s
2dbb0 71 6c 69 74 65 33 41 6c 74 65 72 46 69 6e 69 73  qlite3AlterFinis
2dbc0 68 41 64 64 43 6f 6c 75 6d 6e 28 50 61 72 73 65  hAddColumn(Parse
2dbd0 20 2a 2c 20 54 6f 6b 65 6e 20 2a 29 3b 0a 76 6f   *, Token *);.vo
2dbe0 69 64 20 73 71 6c 69 74 65 33 41 6c 74 65 72 42  id sqlite3AlterB
2dbf0 65 67 69 6e 41 64 64 43 6f 6c 75 6d 6e 28 50 61  eginAddColumn(Pa
2dc00 72 73 65 20 2a 2c 20 53 72 63 4c 69 73 74 20 2a  rse *, SrcList *
2dc10 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33  );.void *sqlite3
2dc20 52 65 6e 61 6d 65 54 6f 6b 65 6e 4d 61 70 28 50  RenameTokenMap(P
2dc30 61 72 73 65 2a 2c 20 76 6f 69 64 2a 2c 20 54 6f  arse*, void*, To
2dc40 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ken*);.void sqli
2dc50 74 65 33 52 65 6e 61 6d 65 54 6f 6b 65 6e 52 65  te3RenameTokenRe
2dc60 6d 61 70 28 50 61 72 73 65 2a 2c 20 76 6f 69 64  map(Parse*, void
2dc70 20 2a 70 54 6f 2c 20 76 6f 69 64 20 2a 70 46 72   *pTo, void *pFr
2dc80 6f 6d 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  om);.void sqlite
2dc90 33 52 65 6e 61 6d 65 45 78 70 72 55 6e 6d 61 70  3RenameExprUnmap
2dca0 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 29 3b  (Parse*, Expr*);
2dcb0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 6e  .void sqlite3Ren
2dcc0 61 6d 65 45 78 70 72 6c 69 73 74 55 6e 6d 61 70  ameExprlistUnmap
2dcd0 28 50 61 72 73 65 2a 2c 20 45 78 70 72 4c 69 73  (Parse*, ExprLis
2dce0 74 2a 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73 71  t*);.CollSeq *sq
2dcf0 6c 69 74 65 33 47 65 74 43 6f 6c 6c 53 65 71 28  lite3GetCollSeq(
2dd00 50 61 72 73 65 2a 2c 20 75 38 2c 20 43 6f 6c 6c  Parse*, u8, Coll
2dd10 53 65 71 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61  Seq *, const cha
2dd20 72 2a 29 3b 0a 63 68 61 72 20 73 71 6c 69 74 65  r*);.char sqlite
2dd30 33 41 66 66 69 6e 69 74 79 54 79 70 65 28 63 6f  3AffinityType(co
2dd40 6e 73 74 20 63 68 61 72 2a 2c 20 43 6f 6c 75 6d  nst char*, Colum
2dd50 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  n*);.void sqlite
2dd60 33 41 6e 61 6c 79 7a 65 28 50 61 72 73 65 2a 2c  3Analyze(Parse*,
2dd70 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 29   Token*, Token*)
2dd80 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 6e 76  ;.int sqlite3Inv
2dd90 6f 6b 65 42 75 73 79 48 61 6e 64 6c 65 72 28 42  okeBusyHandler(B
2dda0 75 73 79 48 61 6e 64 6c 65 72 2a 2c 20 73 71 6c  usyHandler*, sql
2ddb0 69 74 65 33 5f 66 69 6c 65 2a 29 3b 0a 69 6e 74  ite3_file*);.int
2ddc0 20 73 71 6c 69 74 65 33 46 69 6e 64 44 62 28 73   sqlite3FindDb(s
2ddd0 71 6c 69 74 65 33 2a 2c 20 54 6f 6b 65 6e 2a 29  qlite3*, Token*)
2dde0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69 6e  ;.int sqlite3Fin
2ddf0 64 44 62 4e 61 6d 65 28 73 71 6c 69 74 65 33 20  dDbName(sqlite3 
2de00 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 29  *, const char *)
2de10 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 41 6e 61  ;.int sqlite3Ana
2de20 6c 79 73 69 73 4c 6f 61 64 28 73 71 6c 69 74 65  lysisLoad(sqlite
2de30 33 2a 2c 69 6e 74 20 69 44 42 29 3b 0a 76 6f 69  3*,int iDB);.voi
2de40 64 20 73 71 6c 69 74 65 33 44 65 6c 65 74 65 49  d sqlite3DeleteI
2de50 6e 64 65 78 53 61 6d 70 6c 65 73 28 73 71 6c 69  ndexSamples(sqli
2de60 74 65 33 2a 2c 49 6e 64 65 78 2a 29 3b 0a 76 6f  te3*,Index*);.vo
2de70 69 64 20 73 71 6c 69 74 65 33 44 65 66 61 75 6c  id sqlite3Defaul
2de80 74 52 6f 77 45 73 74 28 49 6e 64 65 78 2a 29 3b  tRowEst(Index*);
2de90 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 67  .void sqlite3Reg
2dea0 69 73 74 65 72 4c 69 6b 65 46 75 6e 63 74 69 6f  isterLikeFunctio
2deb0 6e 73 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74  ns(sqlite3*, int
2dec0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 73  );.int sqlite3Is
2ded0 4c 69 6b 65 46 75 6e 63 74 69 6f 6e 28 73 71 6c  LikeFunction(sql
2dee0 69 74 65 33 2a 2c 45 78 70 72 2a 2c 69 6e 74 2a  ite3*,Expr*,int*
2def0 2c 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71  ,char*);.void sq
2df00 6c 69 74 65 33 53 63 68 65 6d 61 43 6c 65 61 72  lite3SchemaClear
2df10 28 76 6f 69 64 20 2a 29 3b 0a 53 63 68 65 6d 61  (void *);.Schema
2df20 20 2a 73 71 6c 69 74 65 33 53 63 68 65 6d 61 47   *sqlite3SchemaG
2df30 65 74 28 73 71 6c 69 74 65 33 20 2a 2c 20 42 74  et(sqlite3 *, Bt
2df40 72 65 65 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  ree *);.int sqli
2df50 74 65 33 53 63 68 65 6d 61 54 6f 49 6e 64 65 78  te3SchemaToIndex
2df60 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 53 63  (sqlite3 *db, Sc
2df70 68 65 6d 61 20 2a 29 3b 0a 4b 65 79 49 6e 66 6f  hema *);.KeyInfo
2df80 20 2a 73 71 6c 69 74 65 33 4b 65 79 49 6e 66 6f   *sqlite3KeyInfo
2df90 41 6c 6c 6f 63 28 73 71 6c 69 74 65 33 2a 2c 69  Alloc(sqlite3*,i
2dfa0 6e 74 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  nt,int);.void sq
2dfb0 6c 69 74 65 33 4b 65 79 49 6e 66 6f 55 6e 72 65  lite3KeyInfoUnre
2dfc0 66 28 4b 65 79 49 6e 66 6f 2a 29 3b 0a 4b 65 79  f(KeyInfo*);.Key
2dfd0 49 6e 66 6f 20 2a 73 71 6c 69 74 65 33 4b 65 79  Info *sqlite3Key
2dfe0 49 6e 66 6f 52 65 66 28 4b 65 79 49 6e 66 6f 2a  InfoRef(KeyInfo*
2dff0 29 3b 0a 4b 65 79 49 6e 66 6f 20 2a 73 71 6c 69  );.KeyInfo *sqli
2e000 74 65 33 4b 65 79 49 6e 66 6f 4f 66 49 6e 64 65  te3KeyInfoOfInde
2e010 78 28 50 61 72 73 65 2a 2c 20 49 6e 64 65 78 2a  x(Parse*, Index*
2e020 29 3b 0a 4b 65 79 49 6e 66 6f 20 2a 73 71 6c 69  );.KeyInfo *sqli
2e030 74 65 33 4b 65 79 49 6e 66 6f 46 72 6f 6d 45 78  te3KeyInfoFromEx
2e040 70 72 4c 69 73 74 28 50 61 72 73 65 2a 2c 20 45  prList(Parse*, E
2e050 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74 2c 20 69  xprList*, int, i
2e060 6e 74 29 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c  nt);..#ifdef SQL
2e070 49 54 45 5f 44 45 42 55 47 0a 69 6e 74 20 73 71  ITE_DEBUG.int sq
2e080 6c 69 74 65 33 4b 65 79 49 6e 66 6f 49 73 57 72  lite3KeyInfoIsWr
2e090 69 74 65 61 62 6c 65 28 4b 65 79 49 6e 66 6f 2a  iteable(KeyInfo*
2e0a0 29 3b 0a 23 65 6e 64 69 66 0a 69 6e 74 20 73 71  );.#endif.int sq
2e0b0 6c 69 74 65 33 43 72 65 61 74 65 46 75 6e 63 28  lite3CreateFunc(
2e0c0 73 71 6c 69 74 65 33 20 2a 2c 20 63 6f 6e 73 74  sqlite3 *, const
2e0d0 20 63 68 61 72 20 2a 2c 20 69 6e 74 2c 20 69 6e   char *, int, in
2e0e0 74 2c 20 76 6f 69 64 20 2a 2c 0a 20 20 76 6f 69  t, void *,.  voi
2e0f0 64 20 28 2a 29 28 73 71 6c 69 74 65 33 5f 63 6f  d (*)(sqlite3_co
2e100 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74  ntext*,int,sqlit
2e110 65 33 5f 76 61 6c 75 65 20 2a 2a 29 2c 0a 20 20  e3_value **),.  
2e120 76 6f 69 64 20 28 2a 29 28 73 71 6c 69 74 65 33  void (*)(sqlite3
2e130 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71  _context*,int,sq
2e140 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a 29 2c  lite3_value **),
2e150 20 0a 20 20 76 6f 69 64 20 28 2a 29 28 73 71 6c   .  void (*)(sql
2e160 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 29 2c 0a  ite3_context*),.
2e170 20 20 76 6f 69 64 20 28 2a 29 28 73 71 6c 69 74    void (*)(sqlit
2e180 65 33 5f 63 6f 6e 74 65 78 74 2a 29 2c 0a 20 20  e3_context*),.  
2e190 76 6f 69 64 20 28 2a 29 28 73 71 6c 69 74 65 33  void (*)(sqlite3
2e1a0 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71  _context*,int,sq
2e1b0 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a 29 2c  lite3_value **),
2e1c0 20 0a 20 20 46 75 6e 63 44 65 73 74 72 75 63 74   .  FuncDestruct
2e1d0 6f 72 20 2a 70 44 65 73 74 72 75 63 74 6f 72 0a  or *pDestructor.
2e1e0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4e  );.void sqlite3N
2e1f0 6f 6f 70 44 65 73 74 72 75 63 74 6f 72 28 76 6f  oopDestructor(vo
2e200 69 64 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  id*);.void sqlit
2e210 65 33 4f 6f 6d 46 61 75 6c 74 28 73 71 6c 69 74  e3OomFault(sqlit
2e220 65 33 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  e3*);.void sqlit
2e230 65 33 4f 6f 6d 43 6c 65 61 72 28 73 71 6c 69 74  e3OomClear(sqlit
2e240 65 33 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  e3*);.int sqlite
2e250 33 41 70 69 45 78 69 74 28 73 71 6c 69 74 65 33  3ApiExit(sqlite3
2e260 20 2a 64 62 2c 20 69 6e 74 29 3b 0a 69 6e 74 20   *db, int);.int 
2e270 73 71 6c 69 74 65 33 4f 70 65 6e 54 65 6d 70 44  sqlite3OpenTempD
2e280 61 74 61 62 61 73 65 28 50 61 72 73 65 20 2a 29  atabase(Parse *)
2e290 3b 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53  ;..void sqlite3S
2e2a0 74 72 41 63 63 75 6d 49 6e 69 74 28 53 74 72 41  trAccumInit(StrA
2e2b0 63 63 75 6d 2a 2c 20 73 71 6c 69 74 65 33 2a 2c  ccum*, sqlite3*,
2e2c0 20 63 68 61 72 2a 2c 20 69 6e 74 2c 20 69 6e 74   char*, int, int
2e2d0 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33  );.char *sqlite3
2e2e0 53 74 72 41 63 63 75 6d 46 69 6e 69 73 68 28 53  StrAccumFinish(S
2e2f0 74 72 41 63 63 75 6d 2a 29 3b 0a 76 6f 69 64 20  trAccum*);.void 
2e300 73 71 6c 69 74 65 33 53 65 6c 65 63 74 44 65 73  sqlite3SelectDes
2e310 74 49 6e 69 74 28 53 65 6c 65 63 74 44 65 73 74  tInit(SelectDest
2e320 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a 45 78 70 72  *,int,int);.Expr
2e330 20 2a 73 71 6c 69 74 65 33 43 72 65 61 74 65 43   *sqlite3CreateC
2e340 6f 6c 75 6d 6e 45 78 70 72 28 73 71 6c 69 74 65  olumnExpr(sqlite
2e350 33 20 2a 2c 20 53 72 63 4c 69 73 74 20 2a 2c 20  3 *, SrcList *, 
2e360 69 6e 74 2c 20 69 6e 74 29 3b 0a 0a 76 6f 69 64  int, int);..void
2e370 20 73 71 6c 69 74 65 33 42 61 63 6b 75 70 52 65   sqlite3BackupRe
2e380 73 74 61 72 74 28 73 71 6c 69 74 65 33 5f 62 61  start(sqlite3_ba
2e390 63 6b 75 70 20 2a 29 3b 0a 76 6f 69 64 20 73 71  ckup *);.void sq
2e3a0 6c 69 74 65 33 42 61 63 6b 75 70 55 70 64 61 74  lite3BackupUpdat
2e3b0 65 28 73 71 6c 69 74 65 33 5f 62 61 63 6b 75 70  e(sqlite3_backup
2e3c0 20 2a 2c 20 50 67 6e 6f 2c 20 63 6f 6e 73 74 20   *, Pgno, const 
2e3d0 75 38 20 2a 29 3b 0a 0a 23 69 66 6e 64 65 66 20  u8 *);..#ifndef 
2e3e0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 55 42 51  SQLITE_OMIT_SUBQ
2e3f0 55 45 52 59 0a 69 6e 74 20 73 71 6c 69 74 65 33  UERY.int sqlite3
2e400 45 78 70 72 43 68 65 63 6b 49 4e 28 50 61 72 73  ExprCheckIN(Pars
2e410 65 2a 2c 20 45 78 70 72 2a 29 3b 0a 23 65 6c 73  e*, Expr*);.#els
2e420 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  e.# define sqlit
2e430 65 33 45 78 70 72 43 68 65 63 6b 49 4e 28 78 2c  e3ExprCheckIN(x,
2e440 79 29 20 53 51 4c 49 54 45 5f 4f 4b 0a 23 65 6e  y) SQLITE_OK.#en
2e450 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49  dif..#ifdef SQLI
2e460 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 5f  TE_ENABLE_STAT3_
2e470 4f 52 5f 53 54 41 54 34 0a 76 6f 69 64 20 73 71  OR_STAT4.void sq
2e480 6c 69 74 65 33 41 6e 61 6c 79 7a 65 46 75 6e 63  lite3AnalyzeFunc
2e490 74 69 6f 6e 73 28 76 6f 69 64 29 3b 0a 69 6e 74  tions(void);.int
2e4a0 20 73 71 6c 69 74 65 33 53 74 61 74 34 50 72 6f   sqlite3Stat4Pro
2e4b0 62 65 53 65 74 56 61 6c 75 65 28 0a 20 20 20 20  beSetValue(.    
2e4c0 50 61 72 73 65 2a 2c 49 6e 64 65 78 2a 2c 55 6e  Parse*,Index*,Un
2e4d0 70 61 63 6b 65 64 52 65 63 6f 72 64 2a 2a 2c 45  packedRecord**,E
2e4e0 78 70 72 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74  xpr*,int,int,int
2e4f0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53  *);.int sqlite3S
2e500 74 61 74 34 56 61 6c 75 65 46 72 6f 6d 45 78 70  tat4ValueFromExp
2e510 72 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c  r(Parse*, Expr*,
2e520 20 75 38 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c   u8, sqlite3_val
2e530 75 65 2a 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ue**);.void sqli
2e540 74 65 33 53 74 61 74 34 50 72 6f 62 65 46 72 65  te3Stat4ProbeFre
2e550 65 28 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64  e(UnpackedRecord
2e560 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53  *);.int sqlite3S
2e570 74 61 74 34 43 6f 6c 75 6d 6e 28 73 71 6c 69 74  tat4Column(sqlit
2e580 65 33 2a 2c 20 63 6f 6e 73 74 20 76 6f 69 64 2a  e3*, const void*
2e590 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 73 71 6c 69  , int, int, sqli
2e5a0 74 65 33 5f 76 61 6c 75 65 2a 2a 29 3b 0a 63 68  te3_value**);.ch
2e5b0 61 72 20 73 71 6c 69 74 65 33 49 6e 64 65 78 43  ar sqlite3IndexC
2e5c0 6f 6c 75 6d 6e 41 66 66 69 6e 69 74 79 28 73 71  olumnAffinity(sq
2e5d0 6c 69 74 65 33 2a 2c 20 49 6e 64 65 78 2a 2c 20  lite3*, Index*, 
2e5e0 69 6e 74 29 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a  int);.#endif../*
2e5f0 0a 2a 2a 20 54 68 65 20 69 6e 74 65 72 66 61 63  .** The interfac
2e600 65 20 74 6f 20 74 68 65 20 4c 45 4d 4f 4e 2d 67  e to the LEMON-g
2e610 65 6e 65 72 61 74 65 64 20 70 61 72 73 65 72 0a  enerated parser.
2e620 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  */.#ifndef SQLIT
2e630 45 5f 41 4d 41 4c 47 41 4d 41 54 49 4f 4e 0a 20  E_AMALGAMATION. 
2e640 20 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 50 61   void *sqlite3Pa
2e650 72 73 65 72 41 6c 6c 6f 63 28 76 6f 69 64 2a 28  rserAlloc(void*(
2e660 2a 29 28 75 36 34 29 2c 20 50 61 72 73 65 2a 29  *)(u64), Parse*)
2e670 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
2e680 50 61 72 73 65 72 46 72 65 65 28 76 6f 69 64 2a  ParserFree(void*
2e690 2c 20 76 6f 69 64 28 2a 29 28 76 6f 69 64 2a 29  , void(*)(void*)
2e6a0 29 3b 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73  );.#endif.void s
2e6b0 71 6c 69 74 65 33 50 61 72 73 65 72 28 76 6f 69  qlite3Parser(voi
2e6c0 64 2a 2c 20 69 6e 74 2c 20 54 6f 6b 65 6e 29 3b  d*, int, Token);
2e6d0 0a 69 6e 74 20 73 71 6c 69 74 65 33 50 61 72 73  .int sqlite3Pars
2e6e0 65 72 46 61 6c 6c 62 61 63 6b 28 69 6e 74 29 3b  erFallback(int);
2e6f0 0a 23 69 66 64 65 66 20 59 59 54 52 41 43 4b 4d  .#ifdef YYTRACKM
2e700 41 58 53 54 41 43 4b 44 45 50 54 48 0a 20 20 69  AXSTACKDEPTH.  i
2e710 6e 74 20 73 71 6c 69 74 65 33 50 61 72 73 65 72  nt sqlite3Parser
2e720 53 74 61 63 6b 50 65 61 6b 28 76 6f 69 64 2a 29  StackPeak(void*)
2e730 3b 0a 23 65 6e 64 69 66 0a 0a 76 6f 69 64 20 73  ;.#endif..void s
2e740 71 6c 69 74 65 33 41 75 74 6f 4c 6f 61 64 45 78  qlite3AutoLoadEx
2e750 74 65 6e 73 69 6f 6e 73 28 73 71 6c 69 74 65 33  tensions(sqlite3
2e760 2a 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  *);.#ifndef SQLI
2e770 54 45 5f 4f 4d 49 54 5f 4c 4f 41 44 5f 45 58 54  TE_OMIT_LOAD_EXT
2e780 45 4e 53 49 4f 4e 0a 20 20 76 6f 69 64 20 73 71  ENSION.  void sq
2e790 6c 69 74 65 33 43 6c 6f 73 65 45 78 74 65 6e 73  lite3CloseExtens
2e7a0 69 6f 6e 73 28 73 71 6c 69 74 65 33 2a 29 3b 0a  ions(sqlite3*);.
2e7b0 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73  #else.# define s
2e7c0 71 6c 69 74 65 33 43 6c 6f 73 65 45 78 74 65 6e  qlite3CloseExten
2e7d0 73 69 6f 6e 73 28 58 29 0a 23 65 6e 64 69 66 0a  sions(X).#endif.
2e7e0 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
2e7f0 4f 4d 49 54 5f 53 48 41 52 45 44 5f 43 41 43 48  OMIT_SHARED_CACH
2e800 45 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  E.  void sqlite3
2e810 54 61 62 6c 65 4c 6f 63 6b 28 50 61 72 73 65 20  TableLock(Parse 
2e820 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 75 38 2c  *, int, int, u8,
2e830 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 29 3b 0a   const char *);.
2e840 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20  #else.  #define 
2e850 73 71 6c 69 74 65 33 54 61 62 6c 65 4c 6f 63 6b  sqlite3TableLock
2e860 28 76 2c 77 2c 78 2c 79 2c 7a 29 0a 23 65 6e 64  (v,w,x,y,z).#end
2e870 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54  if..#ifdef SQLIT
2e880 45 5f 54 45 53 54 0a 20 20 69 6e 74 20 73 71 6c  E_TEST.  int sql
2e890 69 74 65 33 55 74 66 38 54 6f 38 28 75 6e 73 69  ite3Utf8To8(unsi
2e8a0 67 6e 65 64 20 63 68 61 72 2a 29 3b 0a 23 65 6e  gned char*);.#en
2e8b0 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49  dif..#ifdef SQLI
2e8c0 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
2e8d0 41 42 4c 45 0a 23 20 20 64 65 66 69 6e 65 20 73  ABLE.#  define s
2e8e0 71 6c 69 74 65 33 56 74 61 62 43 6c 65 61 72 28  qlite3VtabClear(
2e8f0 59 29 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c  Y).#  define sql
2e900 69 74 65 33 56 74 61 62 53 79 6e 63 28 58 2c 59  ite3VtabSync(X,Y
2e910 29 20 53 51 4c 49 54 45 5f 4f 4b 0a 23 20 20 64  ) SQLITE_OK.#  d
2e920 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61  efine sqlite3Vta
2e930 62 52 6f 6c 6c 62 61 63 6b 28 58 29 0a 23 20 20  bRollback(X).#  
2e940 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74  define sqlite3Vt
2e950 61 62 43 6f 6d 6d 69 74 28 58 29 0a 23 20 20 64  abCommit(X).#  d
2e960 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61  efine sqlite3Vta
2e970 62 49 6e 53 79 6e 63 28 64 62 29 20 30 0a 23 20  bInSync(db) 0.# 
2e980 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56   define sqlite3V
2e990 74 61 62 4c 6f 63 6b 28 58 29 0a 23 20 20 64 65  tabLock(X).#  de
2e9a0 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62  fine sqlite3Vtab
2e9b0 55 6e 6c 6f 63 6b 28 58 29 0a 23 20 20 64 65 66  Unlock(X).#  def
2e9c0 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62 55  ine sqlite3VtabU
2e9d0 6e 6c 6f 63 6b 4c 69 73 74 28 58 29 0a 23 20 20  nlockList(X).#  
2e9e0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74  define sqlite3Vt
2e9f0 61 62 53 61 76 65 70 6f 69 6e 74 28 58 2c 20 59  abSavepoint(X, Y
2ea00 2c 20 5a 29 20 53 51 4c 49 54 45 5f 4f 4b 0a 23  , Z) SQLITE_OK.#
2ea10 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33    define sqlite3
2ea20 47 65 74 56 54 61 62 6c 65 28 58 2c 59 29 20 20  GetVTable(X,Y)  
2ea30 28 28 56 54 61 62 6c 65 2a 29 30 29 0a 23 65 6c  ((VTable*)0).#el
2ea40 73 65 0a 20 20 20 76 6f 69 64 20 73 71 6c 69 74  se.   void sqlit
2ea50 65 33 56 74 61 62 43 6c 65 61 72 28 73 71 6c 69  e3VtabClear(sqli
2ea60 74 65 33 20 2a 64 62 2c 20 54 61 62 6c 65 2a 29  te3 *db, Table*)
2ea70 3b 0a 20 20 20 76 6f 69 64 20 73 71 6c 69 74 65  ;.   void sqlite
2ea80 33 56 74 61 62 44 69 73 63 6f 6e 6e 65 63 74 28  3VtabDisconnect(
2ea90 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 54 61 62  sqlite3 *db, Tab
2eaa0 6c 65 20 2a 70 29 3b 0a 20 20 20 69 6e 74 20 73  le *p);.   int s
2eab0 71 6c 69 74 65 33 56 74 61 62 53 79 6e 63 28 73  qlite3VtabSync(s
2eac0 71 6c 69 74 65 33 20 2a 64 62 2c 20 56 64 62 65  qlite3 *db, Vdbe
2ead0 2a 29 3b 0a 20 20 20 69 6e 74 20 73 71 6c 69 74  *);.   int sqlit
2eae0 65 33 56 74 61 62 52 6f 6c 6c 62 61 63 6b 28 73  e3VtabRollback(s
2eaf0 71 6c 69 74 65 33 20 2a 64 62 29 3b 0a 20 20 20  qlite3 *db);.   
2eb00 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62 43  int sqlite3VtabC
2eb10 6f 6d 6d 69 74 28 73 71 6c 69 74 65 33 20 2a 64  ommit(sqlite3 *d
2eb20 62 29 3b 0a 20 20 20 76 6f 69 64 20 73 71 6c 69  b);.   void sqli
2eb30 74 65 33 56 74 61 62 4c 6f 63 6b 28 56 54 61 62  te3VtabLock(VTab
2eb40 6c 65 20 2a 29 3b 0a 20 20 20 76 6f 69 64 20 73  le *);.   void s
2eb50 71 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f 63 6b  qlite3VtabUnlock
2eb60 28 56 54 61 62 6c 65 20 2a 29 3b 0a 20 20 20 76  (VTable *);.   v
2eb70 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62 55  oid sqlite3VtabU
2eb80 6e 6c 6f 63 6b 4c 69 73 74 28 73 71 6c 69 74 65  nlockList(sqlite
2eb90 33 2a 29 3b 0a 20 20 20 69 6e 74 20 73 71 6c 69  3*);.   int sqli
2eba0 74 65 33 56 74 61 62 53 61 76 65 70 6f 69 6e 74  te3VtabSavepoint
2ebb0 28 73 71 6c 69 74 65 33 20 2a 2c 20 69 6e 74 2c  (sqlite3 *, int,
2ebc0 20 69 6e 74 29 3b 0a 20 20 20 76 6f 69 64 20 73   int);.   void s
2ebd0 71 6c 69 74 65 33 56 74 61 62 49 6d 70 6f 72 74  qlite3VtabImport
2ebe0 45 72 72 6d 73 67 28 56 64 62 65 2a 2c 20 73 71  Errmsg(Vdbe*, sq
2ebf0 6c 69 74 65 33 5f 76 74 61 62 2a 29 3b 0a 20 20  lite3_vtab*);.  
2ec00 20 56 54 61 62 6c 65 20 2a 73 71 6c 69 74 65 33   VTable *sqlite3
2ec10 47 65 74 56 54 61 62 6c 65 28 73 71 6c 69 74 65  GetVTable(sqlite
2ec20 33 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a 20 20 20  3*, Table*);.   
2ec30 4d 6f 64 75 6c 65 20 2a 73 71 6c 69 74 65 33 56  Module *sqlite3V
2ec40 74 61 62 43 72 65 61 74 65 4d 6f 64 75 6c 65 28  tabCreateModule(
2ec50 0a 20 20 20 20 20 73 71 6c 69 74 65 33 2a 2c 0a  .     sqlite3*,.
2ec60 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 2a       const char*
2ec70 2c 0a 20 20 20 20 20 63 6f 6e 73 74 20 73 71 6c  ,.     const sql
2ec80 69 74 65 33 5f 6d 6f 64 75 6c 65 2a 2c 0a 20 20  ite3_module*,.  
2ec90 20 20 20 76 6f 69 64 2a 2c 0a 20 20 20 20 20 76     void*,.     v
2eca0 6f 69 64 28 2a 29 28 76 6f 69 64 2a 29 0a 20 20  oid(*)(void*).  
2ecb0 20 29 3b 0a 23 20 20 64 65 66 69 6e 65 20 73 71   );.#  define sq
2ecc0 6c 69 74 65 33 56 74 61 62 49 6e 53 79 6e 63 28  lite3VtabInSync(
2ecd0 64 62 29 20 28 28 64 62 29 2d 3e 6e 56 54 72 61  db) ((db)->nVTra
2ece0 6e 73 3e 30 20 26 26 20 28 64 62 29 2d 3e 61 56  ns>0 && (db)->aV
2ecf0 54 72 61 6e 73 3d 3d 30 29 0a 23 65 6e 64 69 66  Trans==0).#endif
2ed00 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62  .int sqlite3Vtab
2ed10 45 70 6f 6e 79 6d 6f 75 73 54 61 62 6c 65 49 6e  EponymousTableIn
2ed20 69 74 28 50 61 72 73 65 2a 2c 4d 6f 64 75 6c 65  it(Parse*,Module
2ed30 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
2ed40 56 74 61 62 45 70 6f 6e 79 6d 6f 75 73 54 61 62  VtabEponymousTab
2ed50 6c 65 43 6c 65 61 72 28 73 71 6c 69 74 65 33 2a  leClear(sqlite3*
2ed60 2c 4d 6f 64 75 6c 65 2a 29 3b 0a 76 6f 69 64 20  ,Module*);.void 
2ed70 73 71 6c 69 74 65 33 56 74 61 62 4d 61 6b 65 57  sqlite3VtabMakeW
2ed80 72 69 74 61 62 6c 65 28 50 61 72 73 65 2a 2c 54  ritable(Parse*,T
2ed90 61 62 6c 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  able*);.void sql
2eda0 69 74 65 33 56 74 61 62 42 65 67 69 6e 50 61 72  ite3VtabBeginPar
2edb0 73 65 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e  se(Parse*, Token
2edc0 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e  *, Token*, Token
2edd0 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  *, int);.void sq
2ede0 6c 69 74 65 33 56 74 61 62 46 69 6e 69 73 68 50  lite3VtabFinishP
2edf0 61 72 73 65 28 50 61 72 73 65 2a 2c 20 54 6f 6b  arse(Parse*, Tok
2ee00 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  en*);.void sqlit
2ee10 65 33 56 74 61 62 41 72 67 49 6e 69 74 28 50 61  e3VtabArgInit(Pa
2ee20 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  rse*);.void sqli
2ee30 74 65 33 56 74 61 62 41 72 67 45 78 74 65 6e 64  te3VtabArgExtend
2ee40 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 29  (Parse*, Token*)
2ee50 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61  ;.int sqlite3Vta
2ee60 62 43 61 6c 6c 43 72 65 61 74 65 28 73 71 6c 69  bCallCreate(sqli
2ee70 74 65 33 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74  te3*, int, const
2ee80 20 63 68 61 72 20 2a 2c 20 63 68 61 72 20 2a 2a   char *, char **
2ee90 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 74  );.int sqlite3Vt
2eea0 61 62 43 61 6c 6c 43 6f 6e 6e 65 63 74 28 50 61  abCallConnect(Pa
2eeb0 72 73 65 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a 69  rse*, Table*);.i
2eec0 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62 43 61  nt sqlite3VtabCa
2eed0 6c 6c 44 65 73 74 72 6f 79 28 73 71 6c 69 74 65  llDestroy(sqlite
2eee0 33 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20 63  3*, int, const c
2eef0 68 61 72 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  har *);.int sqli
2ef00 74 65 33 56 74 61 62 42 65 67 69 6e 28 73 71 6c  te3VtabBegin(sql
2ef10 69 74 65 33 20 2a 2c 20 56 54 61 62 6c 65 20 2a  ite3 *, VTable *
2ef20 29 3b 0a 46 75 6e 63 44 65 66 20 2a 73 71 6c 69  );.FuncDef *sqli
2ef30 74 65 33 56 74 61 62 4f 76 65 72 6c 6f 61 64 46  te3VtabOverloadF
2ef40 75 6e 63 74 69 6f 6e 28 73 71 6c 69 74 65 33 20  unction(sqlite3 
2ef50 2a 2c 46 75 6e 63 44 65 66 2a 2c 20 69 6e 74 20  *,FuncDef*, int 
2ef60 6e 41 72 67 2c 20 45 78 70 72 2a 29 3b 0a 73 71  nArg, Expr*);.sq
2ef70 6c 69 74 65 33 5f 69 6e 74 36 34 20 73 71 6c 69  lite3_int64 sqli
2ef80 74 65 33 53 74 6d 74 43 75 72 72 65 6e 74 54 69  te3StmtCurrentTi
2ef90 6d 65 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65  me(sqlite3_conte
2efa0 78 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  xt*);.int sqlite
2efb0 33 56 64 62 65 50 61 72 61 6d 65 74 65 72 49 6e  3VdbeParameterIn
2efc0 64 65 78 28 56 64 62 65 2a 2c 20 63 6f 6e 73 74  dex(Vdbe*, const
2efd0 20 63 68 61 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e   char*, int);.in
2efe0 74 20 73 71 6c 69 74 65 33 54 72 61 6e 73 66 65  t sqlite3Transfe
2eff0 72 42 69 6e 64 69 6e 67 73 28 73 71 6c 69 74 65  rBindings(sqlite
2f000 33 5f 73 74 6d 74 20 2a 2c 20 73 71 6c 69 74 65  3_stmt *, sqlite
2f010 33 5f 73 74 6d 74 20 2a 29 3b 0a 76 6f 69 64 20  3_stmt *);.void 
2f020 73 71 6c 69 74 65 33 50 61 72 73 65 72 52 65 73  sqlite3ParserRes
2f030 65 74 28 50 61 72 73 65 2a 29 3b 0a 23 69 66 64  et(Parse*);.#ifd
2f040 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ef SQLITE_ENABLE
2f050 5f 4e 4f 52 4d 41 4c 49 5a 45 0a 63 68 61 72 20  _NORMALIZE.char 
2f060 2a 73 71 6c 69 74 65 33 4e 6f 72 6d 61 6c 69 7a  *sqlite3Normaliz
2f070 65 28 56 64 62 65 2a 2c 20 63 6f 6e 73 74 20 63  e(Vdbe*, const c
2f080 68 61 72 2a 29 3b 0a 23 65 6e 64 69 66 0a 69 6e  har*);.#endif.in
2f090 74 20 73 71 6c 69 74 65 33 52 65 70 72 65 70 61  t sqlite3Reprepa
2f0a0 72 65 28 56 64 62 65 2a 29 3b 0a 76 6f 69 64 20  re(Vdbe*);.void 
2f0b0 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74 43  sqlite3ExprListC
2f0c0 68 65 63 6b 4c 65 6e 67 74 68 28 50 61 72 73 65  heckLength(Parse
2f0d0 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 63 6f  *, ExprList*, co
2f0e0 6e 73 74 20 63 68 61 72 2a 29 3b 0a 43 6f 6c 6c  nst char*);.Coll
2f0f0 53 65 71 20 2a 73 71 6c 69 74 65 33 42 69 6e 61  Seq *sqlite3Bina
2f100 72 79 43 6f 6d 70 61 72 65 43 6f 6c 6c 53 65 71  ryCompareCollSeq
2f110 28 50 61 72 73 65 20 2a 2c 20 45 78 70 72 20 2a  (Parse *, Expr *
2f120 2c 20 45 78 70 72 20 2a 29 3b 0a 69 6e 74 20 73  , Expr *);.int s
2f130 71 6c 69 74 65 33 54 65 6d 70 49 6e 4d 65 6d 6f  qlite3TempInMemo
2f140 72 79 28 63 6f 6e 73 74 20 73 71 6c 69 74 65 33  ry(const sqlite3
2f150 2a 29 3b 0a 63 6f 6e 73 74 20 63 68 61 72 20 2a  *);.const char *
2f160 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 4d 6f  sqlite3JournalMo
2f170 64 65 6e 61 6d 65 28 69 6e 74 29 3b 0a 23 69 66  dename(int);.#if
2f180 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
2f190 5f 57 41 4c 0a 20 20 69 6e 74 20 73 71 6c 69 74  _WAL.  int sqlit
2f1a0 65 33 43 68 65 63 6b 70 6f 69 6e 74 28 73 71 6c  e3Checkpoint(sql
2f1b0 69 74 65 33 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c  ite3*, int, int,
2f1c0 20 69 6e 74 2a 2c 20 69 6e 74 2a 29 3b 0a 20 20   int*, int*);.  
2f1d0 69 6e 74 20 73 71 6c 69 74 65 33 57 61 6c 44 65  int sqlite3WalDe
2f1e0 66 61 75 6c 74 48 6f 6f 6b 28 76 6f 69 64 2a 2c  faultHook(void*,
2f1f0 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63  sqlite3*,const c
2f200 68 61 72 2a 2c 69 6e 74 29 3b 0a 23 65 6e 64 69  har*,int);.#endi
2f210 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  f.#ifndef SQLITE
2f220 5f 4f 4d 49 54 5f 43 54 45 0a 20 20 57 69 74 68  _OMIT_CTE.  With
2f230 20 2a 73 71 6c 69 74 65 33 57 69 74 68 41 64 64   *sqlite3WithAdd
2f240 28 50 61 72 73 65 2a 2c 57 69 74 68 2a 2c 54 6f  (Parse*,With*,To
2f250 6b 65 6e 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 53  ken*,ExprList*,S
2f260 65 6c 65 63 74 2a 29 3b 0a 20 20 76 6f 69 64 20  elect*);.  void 
2f270 73 71 6c 69 74 65 33 57 69 74 68 44 65 6c 65 74  sqlite3WithDelet
2f280 65 28 73 71 6c 69 74 65 33 2a 2c 57 69 74 68 2a  e(sqlite3*,With*
2f290 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
2f2a0 33 57 69 74 68 50 75 73 68 28 50 61 72 73 65 2a  3WithPush(Parse*
2f2b0 2c 20 57 69 74 68 2a 2c 20 75 38 29 3b 0a 23 65  , With*, u8);.#e
2f2c0 6c 73 65 0a 23 64 65 66 69 6e 65 20 73 71 6c 69  lse.#define sqli
2f2d0 74 65 33 57 69 74 68 50 75 73 68 28 78 2c 79 2c  te3WithPush(x,y,
2f2e0 7a 29 0a 23 64 65 66 69 6e 65 20 73 71 6c 69 74  z).#define sqlit
2f2f0 65 33 57 69 74 68 44 65 6c 65 74 65 28 78 2c 79  e3WithDelete(x,y
2f300 29 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66  ).#endif.#ifndef
2f310 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 50 53   SQLITE_OMIT_UPS
2f320 45 52 54 0a 20 20 55 70 73 65 72 74 20 2a 73 71  ERT.  Upsert *sq
2f330 6c 69 74 65 33 55 70 73 65 72 74 4e 65 77 28 73  lite3UpsertNew(s
2f340 71 6c 69 74 65 33 2a 2c 45 78 70 72 4c 69 73 74  qlite3*,ExprList
2f350 2a 2c 45 78 70 72 2a 2c 45 78 70 72 4c 69 73 74  *,Expr*,ExprList
2f360 2a 2c 45 78 70 72 2a 29 3b 0a 20 20 76 6f 69 64  *,Expr*);.  void
2f370 20 73 71 6c 69 74 65 33 55 70 73 65 72 74 44 65   sqlite3UpsertDe
2f380 6c 65 74 65 28 73 71 6c 69 74 65 33 2a 2c 55 70  lete(sqlite3*,Up
2f390 73 65 72 74 2a 29 3b 0a 20 20 55 70 73 65 72 74  sert*);.  Upsert
2f3a0 20 2a 73 71 6c 69 74 65 33 55 70 73 65 72 74 44   *sqlite3UpsertD
2f3b0 75 70 28 73 71 6c 69 74 65 33 2a 2c 55 70 73 65  up(sqlite3*,Upse
2f3c0 72 74 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69  rt*);.  int sqli
2f3d0 74 65 33 55 70 73 65 72 74 41 6e 61 6c 79 7a 65  te3UpsertAnalyze
2f3e0 54 61 72 67 65 74 28 50 61 72 73 65 2a 2c 53 72  Target(Parse*,Sr
2f3f0 63 4c 69 73 74 2a 2c 55 70 73 65 72 74 2a 29 3b  cList*,Upsert*);
2f400 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 55  .  void sqlite3U
2f410 70 73 65 72 74 44 6f 55 70 64 61 74 65 28 50 61  psertDoUpdate(Pa
2f420 72 73 65 2a 2c 55 70 73 65 72 74 2a 2c 54 61 62  rse*,Upsert*,Tab
2f430 6c 65 2a 2c 49 6e 64 65 78 2a 2c 69 6e 74 29 3b  le*,Index*,int);
2f440 0a 23 65 6c 73 65 0a 23 64 65 66 69 6e 65 20 73  .#else.#define s
2f450 71 6c 69 74 65 33 55 70 73 65 72 74 4e 65 77 28  qlite3UpsertNew(
2f460 76 2c 77 2c 78 2c 79 2c 7a 29 20 28 28 55 70 73  v,w,x,y,z) ((Ups
2f470 65 72 74 2a 29 30 29 0a 23 64 65 66 69 6e 65 20  ert*)0).#define 
2f480 73 71 6c 69 74 65 33 55 70 73 65 72 74 44 65 6c  sqlite3UpsertDel
2f490 65 74 65 28 78 2c 79 29 0a 23 64 65 66 69 6e 65  ete(x,y).#define
2f4a0 20 73 71 6c 69 74 65 33 55 70 73 65 72 74 44 75   sqlite3UpsertDu
2f4b0 70 28 78 2c 79 29 20 20 20 20 20 20 20 28 28 55  p(x,y)       ((U
2f4c0 70 73 65 72 74 2a 29 30 29 0a 23 65 6e 64 69 66  psert*)0).#endif
2f4d0 0a 0a 0a 2f 2a 20 44 65 63 6c 61 72 61 74 69 6f  .../* Declaratio
2f4e0 6e 73 20 66 6f 72 20 66 75 6e 63 74 69 6f 6e 73  ns for functions
2f4f0 20 69 6e 20 66 6b 65 79 2e 63 2e 20 41 6c 6c 20   in fkey.c. All 
2f500 6f 66 20 74 68 65 73 65 20 61 72 65 20 72 65 70  of these are rep
2f510 6c 61 63 65 64 20 62 79 0a 2a 2a 20 6e 6f 2d 6f  laced by.** no-o
2f520 70 20 6d 61 63 72 6f 73 20 69 66 20 4f 4d 49 54  p macros if OMIT
2f530 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 20 69 73 20  _FOREIGN_KEY is 
2f540 64 65 66 69 6e 65 64 2e 20 49 6e 20 74 68 69 73  defined. In this
2f550 20 63 61 73 65 20 6e 6f 20 66 6f 72 65 69 67 6e   case no foreign
2f560 0a 2a 2a 20 6b 65 79 20 66 75 6e 63 74 69 6f 6e  .** key function
2f570 61 6c 69 74 79 20 69 73 20 61 76 61 69 6c 61 62  ality is availab
2f580 6c 65 2e 20 49 66 20 4f 4d 49 54 5f 54 52 49 47  le. If OMIT_TRIG
2f590 47 45 52 20 69 73 20 64 65 66 69 6e 65 64 20 62  GER is defined b
2f5a0 75 74 0a 2a 2a 20 4f 4d 49 54 5f 46 4f 52 45 49  ut.** OMIT_FOREI
2f5b0 47 4e 5f 4b 45 59 20 69 73 20 6e 6f 74 2c 20 6f  GN_KEY is not, o
2f5c0 6e 6c 79 20 73 6f 6d 65 20 6f 66 20 74 68 65 20  nly some of the 
2f5d0 66 75 6e 63 74 69 6f 6e 73 20 61 72 65 20 6e 6f  functions are no
2f5e0 2d 6f 70 65 64 2e 20 49 6e 0a 2a 2a 20 74 68 69  -oped. In.** thi
2f5f0 73 20 63 61 73 65 20 66 6f 72 65 69 67 6e 20 6b  s case foreign k
2f600 65 79 73 20 61 72 65 20 70 61 72 73 65 64 2c 20  eys are parsed, 
2f610 62 75 74 20 6e 6f 20 6f 74 68 65 72 20 66 75 6e  but no other fun
2f620 63 74 69 6f 6e 61 6c 69 74 79 20 69 73 0a 2a 2a  ctionality is.**
2f630 20 70 72 6f 76 69 64 65 64 20 28 65 6e 66 6f 72   provided (enfor
2f640 63 65 6d 65 6e 74 20 6f 66 20 46 4b 20 63 6f 6e  cement of FK con
2f650 73 74 72 61 69 6e 74 73 20 72 65 71 75 69 72 65  straints require
2f660 73 20 74 68 65 20 74 72 69 67 67 65 72 73 20 73  s the triggers s
2f670 75 62 2d 73 79 73 74 65 6d 29 2e 0a 2a 2f 0a 23  ub-system)..*/.#
2f680 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  if !defined(SQLI
2f690 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f  TE_OMIT_FOREIGN_
2f6a0 4b 45 59 29 20 26 26 20 21 64 65 66 69 6e 65 64  KEY) && !defined
2f6b0 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49  (SQLITE_OMIT_TRI
2f6c0 47 47 45 52 29 0a 20 20 76 6f 69 64 20 73 71 6c  GGER).  void sql
2f6d0 69 74 65 33 46 6b 43 68 65 63 6b 28 50 61 72 73  ite3FkCheck(Pars
2f6e0 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c  e*, Table*, int,
2f6f0 20 69 6e 74 2c 20 69 6e 74 2a 2c 20 69 6e 74 29   int, int*, int)
2f700 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
2f710 46 6b 44 72 6f 70 54 61 62 6c 65 28 50 61 72 73  FkDropTable(Pars
2f720 65 2a 2c 20 53 72 63 4c 69 73 74 20 2a 2c 20 54  e*, SrcList *, T
2f730 61 62 6c 65 2a 29 3b 0a 20 20 76 6f 69 64 20 73  able*);.  void s
2f740 71 6c 69 74 65 33 46 6b 41 63 74 69 6f 6e 73 28  qlite3FkActions(
2f750 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20  Parse*, Table*, 
2f760 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74 2c 20  ExprList*, int, 
2f770 69 6e 74 2a 2c 20 69 6e 74 29 3b 0a 20 20 69 6e  int*, int);.  in
2f780 74 20 73 71 6c 69 74 65 33 46 6b 52 65 71 75 69  t sqlite3FkRequi
2f790 72 65 64 28 50 61 72 73 65 2a 2c 20 54 61 62 6c  red(Parse*, Tabl
2f7a0 65 2a 2c 20 69 6e 74 2a 2c 20 69 6e 74 29 3b 0a  e*, int*, int);.
2f7b0 20 20 75 33 32 20 73 71 6c 69 74 65 33 46 6b 4f    u32 sqlite3FkO
2f7c0 6c 64 6d 61 73 6b 28 50 61 72 73 65 2a 2c 20 54  ldmask(Parse*, T
2f7d0 61 62 6c 65 2a 29 3b 0a 20 20 46 4b 65 79 20 2a  able*);.  FKey *
2f7e0 73 71 6c 69 74 65 33 46 6b 52 65 66 65 72 65 6e  sqlite3FkReferen
2f7f0 63 65 73 28 54 61 62 6c 65 20 2a 29 3b 0a 23 65  ces(Table *);.#e
2f800 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20 73 71  lse.  #define sq
2f810 6c 69 74 65 33 46 6b 41 63 74 69 6f 6e 73 28 61  lite3FkActions(a
2f820 2c 62 2c 63 2c 64 2c 65 2c 66 29 0a 20 20 23 64  ,b,c,d,e,f).  #d
2f830 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 43  efine sqlite3FkC
2f840 68 65 63 6b 28 61 2c 62 2c 63 2c 64 2c 65 2c 66  heck(a,b,c,d,e,f
2f850 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69  ).  #define sqli
2f860 74 65 33 46 6b 44 72 6f 70 54 61 62 6c 65 28 61  te3FkDropTable(a
2f870 2c 62 2c 63 29 0a 20 20 23 64 65 66 69 6e 65 20  ,b,c).  #define 
2f880 73 71 6c 69 74 65 33 46 6b 4f 6c 64 6d 61 73 6b  sqlite3FkOldmask
2f890 28 61 2c 62 29 20 20 20 20 20 20 20 20 20 30 0a  (a,b)         0.
2f8a0 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65    #define sqlite
2f8b0 33 46 6b 52 65 71 75 69 72 65 64 28 61 2c 62 2c  3FkRequired(a,b,
2f8c0 63 2c 64 29 20 20 20 20 30 0a 20 20 23 64 65 66  c,d)    0.  #def
2f8d0 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 52 65 66  ine sqlite3FkRef
2f8e0 65 72 65 6e 63 65 73 28 61 29 20 20 20 20 20 20  erences(a)      
2f8f0 20 20 30 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64    0.#endif.#ifnd
2f900 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46  ef SQLITE_OMIT_F
2f910 4f 52 45 49 47 4e 5f 4b 45 59 0a 20 20 76 6f 69  OREIGN_KEY.  voi
2f920 64 20 73 71 6c 69 74 65 33 46 6b 44 65 6c 65 74  d sqlite3FkDelet
2f930 65 28 73 71 6c 69 74 65 33 20 2a 2c 20 54 61 62  e(sqlite3 *, Tab
2f940 6c 65 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69  le*);.  int sqli
2f950 74 65 33 46 6b 4c 6f 63 61 74 65 49 6e 64 65 78  te3FkLocateIndex
2f960 28 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a 2c 46  (Parse*,Table*,F
2f970 4b 65 79 2a 2c 49 6e 64 65 78 2a 2a 2c 69 6e 74  Key*,Index**,int
2f980 2a 2a 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65  **);.#else.  #de
2f990 66 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 44 65  fine sqlite3FkDe
2f9a0 6c 65 74 65 28 61 2c 62 29 0a 20 20 23 64 65 66  lete(a,b).  #def
2f9b0 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 4c 6f 63  ine sqlite3FkLoc
2f9c0 61 74 65 49 6e 64 65 78 28 61 2c 62 2c 63 2c 64  ateIndex(a,b,c,d
2f9d0 2c 65 29 0a 23 65 6e 64 69 66 0a 0a 0a 2f 2a 0a  ,e).#endif.../*.
2f9e0 2a 2a 20 41 76 61 69 6c 61 62 6c 65 20 66 61 75  ** Available fau
2f9f0 6c 74 20 69 6e 6a 65 63 74 6f 72 73 2e 20 20 53  lt injectors.  S
2fa00 68 6f 75 6c 64 20 62 65 20 6e 75 6d 62 65 72 65  hould be numbere
2fa10 64 20 62 65 67 69 6e 6e 69 6e 67 20 77 69 74 68  d beginning with
2fa20 20 30 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53   0..*/.#define S
2fa30 51 4c 49 54 45 5f 46 41 55 4c 54 49 4e 4a 45 43  QLITE_FAULTINJEC
2fa40 54 4f 52 5f 4d 41 4c 4c 4f 43 20 20 20 20 20 30  TOR_MALLOC     0
2fa50 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
2fa60 46 41 55 4c 54 49 4e 4a 45 43 54 4f 52 5f 43 4f  FAULTINJECTOR_CO
2fa70 55 4e 54 20 20 20 20 20 20 31 0a 0a 2f 2a 0a 2a  UNT      1../*.*
2fa80 2a 20 54 68 65 20 69 6e 74 65 72 66 61 63 65 20  * The interface 
2fa90 74 6f 20 74 68 65 20 63 6f 64 65 20 69 6e 20 66  to the code in f
2faa0 61 75 6c 74 2e 63 20 75 73 65 64 20 66 6f 72 20  ault.c used for 
2fab0 69 64 65 6e 74 69 66 79 69 6e 67 20 22 62 65 6e  identifying "ben
2fac0 69 67 6e 22 0a 2a 2a 20 6d 61 6c 6c 6f 63 20 66  ign".** malloc f
2fad0 61 69 6c 75 72 65 73 2e 20 54 68 69 73 20 69 73  ailures. This is
2fae0 20 6f 6e 6c 79 20 70 72 65 73 65 6e 74 20 69 66   only present if
2faf0 20 53 51 4c 49 54 45 5f 55 4e 54 45 53 54 41 42   SQLITE_UNTESTAB
2fb00 4c 45 0a 2a 2a 20 69 73 20 6e 6f 74 20 64 65 66  LE.** is not def
2fb10 69 6e 65 64 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66  ined..*/.#ifndef
2fb20 20 53 51 4c 49 54 45 5f 55 4e 54 45 53 54 41 42   SQLITE_UNTESTAB
2fb30 4c 45 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  LE.  void sqlite
2fb40 33 42 65 67 69 6e 42 65 6e 69 67 6e 4d 61 6c 6c  3BeginBenignMall
2fb50 6f 63 28 76 6f 69 64 29 3b 0a 20 20 76 6f 69 64  oc(void);.  void
2fb60 20 73 71 6c 69 74 65 33 45 6e 64 42 65 6e 69 67   sqlite3EndBenig
2fb70 6e 4d 61 6c 6c 6f 63 28 76 6f 69 64 29 3b 0a 23  nMalloc(void);.#
2fb80 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20 73  else.  #define s
2fb90 71 6c 69 74 65 33 42 65 67 69 6e 42 65 6e 69 67  qlite3BeginBenig
2fba0 6e 4d 61 6c 6c 6f 63 28 29 0a 20 20 23 64 65 66  nMalloc().  #def
2fbb0 69 6e 65 20 73 71 6c 69 74 65 33 45 6e 64 42 65  ine sqlite3EndBe
2fbc0 6e 69 67 6e 4d 61 6c 6c 6f 63 28 29 0a 23 65 6e  nignMalloc().#en
2fbd0 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77  dif../*.** Allow
2fbe0 65 64 20 72 65 74 75 72 6e 20 76 61 6c 75 65 73  ed return values
2fbf0 20 66 72 6f 6d 20 73 71 6c 69 74 65 33 46 69 6e   from sqlite3Fin
2fc00 64 49 6e 49 6e 64 65 78 28 29 0a 2a 2f 0a 23 64  dInIndex().*/.#d
2fc10 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 52  efine IN_INDEX_R
2fc20 4f 57 49 44 20 20 20 20 20 20 20 20 31 20 20 20  OWID        1   
2fc30 2f 2a 20 53 65 61 72 63 68 20 74 68 65 20 72 6f  /* Search the ro
2fc40 77 69 64 20 6f 66 20 74 68 65 20 74 61 62 6c 65  wid of the table
2fc50 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49   */.#define IN_I
2fc60 4e 44 45 58 5f 45 50 48 20 20 20 20 20 20 20 20  NDEX_EPH        
2fc70 20 20 32 20 20 20 2f 2a 20 53 65 61 72 63 68 20    2   /* Search 
2fc80 61 6e 20 65 70 68 65 6d 65 72 61 6c 20 62 2d 74  an ephemeral b-t
2fc90 72 65 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49  ree */.#define I
2fca0 4e 5f 49 4e 44 45 58 5f 49 4e 44 45 58 5f 41 53  N_INDEX_INDEX_AS
2fcb0 43 20 20 20 20 33 20 20 20 2f 2a 20 45 78 69 73  C    3   /* Exis
2fcc0 74 69 6e 67 20 69 6e 64 65 78 20 41 53 43 45 4e  ting index ASCEN
2fcd0 44 49 4e 47 20 2a 2f 0a 23 64 65 66 69 6e 65 20  DING */.#define 
2fce0 49 4e 5f 49 4e 44 45 58 5f 49 4e 44 45 58 5f 44  IN_INDEX_INDEX_D
2fcf0 45 53 43 20 20 20 34 20 20 20 2f 2a 20 45 78 69  ESC   4   /* Exi
2fd00 73 74 69 6e 67 20 69 6e 64 65 78 20 44 45 53 43  sting index DESC
2fd10 45 4e 44 49 4e 47 20 2a 2f 0a 23 64 65 66 69 6e  ENDING */.#defin
2fd20 65 20 49 4e 5f 49 4e 44 45 58 5f 4e 4f 4f 50 20  e IN_INDEX_NOOP 
2fd30 20 20 20 20 20 20 20 20 35 20 20 20 2f 2a 20 4e          5   /* N
2fd40 6f 20 74 61 62 6c 65 20 61 76 61 69 6c 61 62 6c  o table availabl
2fd50 65 2e 20 55 73 65 20 63 6f 6d 70 61 72 69 73 6f  e. Use compariso
2fd60 6e 73 20 2a 2f 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f  ns */./*.** Allo
2fd70 77 65 64 20 66 6c 61 67 73 20 66 6f 72 20 74 68  wed flags for th
2fd80 65 20 33 72 64 20 70 61 72 61 6d 65 74 65 72 20  e 3rd parameter 
2fd90 74 6f 20 73 71 6c 69 74 65 33 46 69 6e 64 49 6e  to sqlite3FindIn
2fda0 49 6e 64 65 78 28 29 2e 0a 2a 2f 0a 23 64 65 66  Index()..*/.#def
2fdb0 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 4e 4f 4f  ine IN_INDEX_NOO
2fdc0 50 5f 4f 4b 20 20 20 20 20 30 78 30 30 30 31 20  P_OK     0x0001 
2fdd0 20 2f 2a 20 4f 4b 20 74 6f 20 72 65 74 75 72 6e   /* OK to return
2fde0 20 49 4e 5f 49 4e 44 45 58 5f 4e 4f 4f 50 20 2a   IN_INDEX_NOOP *
2fdf0 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44  /.#define IN_IND
2fe00 45 58 5f 4d 45 4d 42 45 52 53 48 49 50 20 20 30  EX_MEMBERSHIP  0
2fe10 78 30 30 30 32 20 20 2f 2a 20 49 4e 20 6f 70 65  x0002  /* IN ope
2fe20 72 61 74 6f 72 20 75 73 65 64 20 66 6f 72 20 6d  rator used for m
2fe30 65 6d 62 65 72 73 68 69 70 20 74 65 73 74 20 2a  embership test *
2fe40 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44  /.#define IN_IND
2fe50 45 58 5f 4c 4f 4f 50 20 20 20 20 20 20 20 20 30  EX_LOOP        0
2fe60 78 30 30 30 34 20 20 2f 2a 20 49 4e 20 6f 70 65  x0004  /* IN ope
2fe70 72 61 74 6f 72 20 75 73 65 64 20 61 73 20 61 20  rator used as a 
2fe80 6c 6f 6f 70 20 2a 2f 0a 69 6e 74 20 73 71 6c 69  loop */.int sqli
2fe90 74 65 33 46 69 6e 64 49 6e 49 6e 64 65 78 28 50  te3FindInIndex(P
2fea0 61 72 73 65 20 2a 2c 20 45 78 70 72 20 2a 2c 20  arse *, Expr *, 
2feb0 75 33 32 2c 20 69 6e 74 2a 2c 20 69 6e 74 2a 29  u32, int*, int*)
2fec0 3b 0a 0a 69 6e 74 20 73 71 6c 69 74 65 33 4a 6f  ;..int sqlite3Jo
2fed0 75 72 6e 61 6c 4f 70 65 6e 28 73 71 6c 69 74 65  urnalOpen(sqlite
2fee0 33 5f 76 66 73 20 2a 2c 20 63 6f 6e 73 74 20 63  3_vfs *, const c
2fef0 68 61 72 20 2a 2c 20 73 71 6c 69 74 65 33 5f 66  har *, sqlite3_f
2ff00 69 6c 65 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 29  ile *, int, int)
2ff10 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4a 6f 75  ;.int sqlite3Jou
2ff20 72 6e 61 6c 53 69 7a 65 28 73 71 6c 69 74 65 33  rnalSize(sqlite3
2ff30 5f 76 66 73 20 2a 29 3b 0a 23 69 66 20 64 65 66  _vfs *);.#if def
2ff40 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42  ined(SQLITE_ENAB
2ff50 4c 45 5f 41 54 4f 4d 49 43 5f 57 52 49 54 45 29  LE_ATOMIC_WRITE)
2ff60 20 5c 0a 20 7c 7c 20 64 65 66 69 6e 65 64 28 53   \. || defined(S
2ff70 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 42 41 54  QLITE_ENABLE_BAT
2ff80 43 48 5f 41 54 4f 4d 49 43 5f 57 52 49 54 45 29  CH_ATOMIC_WRITE)
2ff90 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 4a 6f  .  int sqlite3Jo
2ffa0 75 72 6e 61 6c 43 72 65 61 74 65 28 73 71 6c 69  urnalCreate(sqli
2ffb0 74 65 33 5f 66 69 6c 65 20 2a 29 3b 0a 23 65 6e  te3_file *);.#en
2ffc0 64 69 66 0a 0a 69 6e 74 20 73 71 6c 69 74 65 33  dif..int sqlite3
2ffd0 4a 6f 75 72 6e 61 6c 49 73 49 6e 4d 65 6d 6f 72  JournalIsInMemor
2ffe0 79 28 73 71 6c 69 74 65 33 5f 66 69 6c 65 20 2a  y(sqlite3_file *
2fff0 70 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  p);.void sqlite3
30000 4d 65 6d 4a 6f 75 72 6e 61 6c 4f 70 65 6e 28 73  MemJournalOpen(s
30010 71 6c 69 74 65 33 5f 66 69 6c 65 20 2a 29 3b 0a  qlite3_file *);.
30020 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
30030 72 53 65 74 48 65 69 67 68 74 41 6e 64 46 6c 61  rSetHeightAndFla
30040 67 73 28 50 61 72 73 65 20 2a 70 50 61 72 73 65  gs(Parse *pParse
30050 2c 20 45 78 70 72 20 2a 70 29 3b 0a 23 69 66 20  , Expr *p);.#if 
30060 53 51 4c 49 54 45 5f 4d 41 58 5f 45 58 50 52 5f  SQLITE_MAX_EXPR_
30070 44 45 50 54 48 3e 30 0a 20 20 69 6e 74 20 73 71  DEPTH>0.  int sq
30080 6c 69 74 65 33 53 65 6c 65 63 74 45 78 70 72 48  lite3SelectExprH
30090 65 69 67 68 74 28 53 65 6c 65 63 74 20 2a 29 3b  eight(Select *);
300a0 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 45 78  .  int sqlite3Ex
300b0 70 72 43 68 65 63 6b 48 65 69 67 68 74 28 50 61  prCheckHeight(Pa
300c0 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 23 65 6c 73  rse*, int);.#els
300d0 65 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69  e.  #define sqli
300e0 74 65 33 53 65 6c 65 63 74 45 78 70 72 48 65 69  te3SelectExprHei
300f0 67 68 74 28 78 29 20 30 0a 20 20 23 64 65 66 69  ght(x) 0.  #defi
30100 6e 65 20 73 71 6c 69 74 65 33 45 78 70 72 43 68  ne sqlite3ExprCh
30110 65 63 6b 48 65 69 67 68 74 28 78 2c 79 29 0a 23  eckHeight(x,y).#
30120 65 6e 64 69 66 0a 0a 75 33 32 20 73 71 6c 69 74  endif..u32 sqlit
30130 65 33 47 65 74 34 62 79 74 65 28 63 6f 6e 73 74  e3Get4byte(const
30140 20 75 38 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69   u8*);.void sqli
30150 74 65 33 50 75 74 34 62 79 74 65 28 75 38 2a 2c  te3Put4byte(u8*,
30160 20 75 33 32 29 3b 0a 0a 23 69 66 64 65 66 20 53   u32);..#ifdef S
30170 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 55 4e 4c  QLITE_ENABLE_UNL
30180 4f 43 4b 5f 4e 4f 54 49 46 59 0a 20 20 76 6f 69  OCK_NOTIFY.  voi
30190 64 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74  d sqlite3Connect
301a0 69 6f 6e 42 6c 6f 63 6b 65 64 28 73 71 6c 69 74  ionBlocked(sqlit
301b0 65 33 20 2a 2c 20 73 71 6c 69 74 65 33 20 2a 29  e3 *, sqlite3 *)
301c0 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
301d0 43 6f 6e 6e 65 63 74 69 6f 6e 55 6e 6c 6f 63 6b  ConnectionUnlock
301e0 65 64 28 73 71 6c 69 74 65 33 20 2a 64 62 29 3b  ed(sqlite3 *db);
301f0 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 43  .  void sqlite3C
30200 6f 6e 6e 65 63 74 69 6f 6e 43 6c 6f 73 65 64 28  onnectionClosed(
30210 73 71 6c 69 74 65 33 20 2a 64 62 29 3b 0a 23 65  sqlite3 *db);.#e
30220 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20 73 71  lse.  #define sq
30230 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 42  lite3ConnectionB
30240 6c 6f 63 6b 65 64 28 78 2c 79 29 0a 20 20 23 64  locked(x,y).  #d
30250 65 66 69 6e 65 20 73 71 6c 69 74 65 33 43 6f 6e  efine sqlite3Con
30260 6e 65 63 74 69 6f 6e 55 6e 6c 6f 63 6b 65 64 28  nectionUnlocked(
30270 78 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c  x).  #define sql
30280 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 43 6c  ite3ConnectionCl
30290 6f 73 65 64 28 78 29 0a 23 65 6e 64 69 66 0a 0a  osed(x).#endif..
302a0 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45  #ifdef SQLITE_DE
302b0 42 55 47 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  BUG.  void sqlit
302c0 65 33 50 61 72 73 65 72 54 72 61 63 65 28 46 49  e3ParserTrace(FI
302d0 4c 45 2a 2c 20 63 68 61 72 20 2a 29 3b 0a 23 65  LE*, char *);.#e
302e0 6e 64 69 66 0a 23 69 66 20 64 65 66 69 6e 65 64  ndif.#if defined
302f0 28 59 59 43 4f 56 45 52 41 47 45 29 0a 20 20 69  (YYCOVERAGE).  i
30300 6e 74 20 73 71 6c 69 74 65 33 50 61 72 73 65 72  nt sqlite3Parser
30310 43 6f 76 65 72 61 67 65 28 46 49 4c 45 2a 29 3b  Coverage(FILE*);
30320 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49  .#endif../*.** I
30330 66 20 74 68 65 20 53 51 4c 49 54 45 5f 45 4e 41  f the SQLITE_ENA
30340 42 4c 45 20 49 4f 54 52 41 43 45 20 65 78 69 73  BLE IOTRACE exis
30350 74 73 20 74 68 65 6e 20 74 68 65 20 67 6c 6f 62  ts then the glob
30360 61 6c 20 76 61 72 69 61 62 6c 65 0a 2a 2a 20 73  al variable.** s
30370 71 6c 69 74 65 33 49 6f 54 72 61 63 65 20 69 73  qlite3IoTrace is
30380 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20   a pointer to a 
30390 70 72 69 6e 74 66 2d 6c 69 6b 65 20 72 6f 75 74  printf-like rout
303a0 69 6e 65 20 75 73 65 64 20 74 6f 0a 2a 2a 20 70  ine used to.** p
303b0 72 69 6e 74 20 49 2f 4f 20 74 72 61 63 69 6e 67  rint I/O tracing
303c0 20 6d 65 73 73 61 67 65 73 2e 0a 2a 2f 0a 23 69   messages..*/.#i
303d0 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  fdef SQLITE_ENAB
303e0 4c 45 5f 49 4f 54 52 41 43 45 0a 23 20 64 65 66  LE_IOTRACE.# def
303f0 69 6e 65 20 49 4f 54 52 41 43 45 28 41 29 20 20  ine IOTRACE(A)  
30400 69 66 28 20 73 71 6c 69 74 65 33 49 6f 54 72 61  if( sqlite3IoTra
30410 63 65 20 29 7b 20 73 71 6c 69 74 65 33 49 6f 54  ce ){ sqlite3IoT
30420 72 61 63 65 20 41 3b 20 7d 0a 20 20 76 6f 69 64  race A; }.  void
30430 20 73 71 6c 69 74 65 33 56 64 62 65 49 4f 54 72   sqlite3VdbeIOTr
30440 61 63 65 53 71 6c 28 56 64 62 65 2a 29 3b 0a 53  aceSql(Vdbe*);.S
30450 51 4c 49 54 45 5f 41 50 49 20 53 51 4c 49 54 45  QLITE_API SQLITE
30460 5f 45 58 54 45 52 4e 20 76 6f 69 64 20 28 53 51  _EXTERN void (SQ
30470 4c 49 54 45 5f 43 44 45 43 4c 20 2a 73 71 6c 69  LITE_CDECL *sqli
30480 74 65 33 49 6f 54 72 61 63 65 29 28 63 6f 6e 73  te3IoTrace)(cons
30490 74 20 63 68 61 72 2a 2c 2e 2e 2e 29 3b 0a 23 65  t char*,...);.#e
304a0 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 49 4f 54  lse.# define IOT
304b0 52 41 43 45 28 41 29 0a 23 20 64 65 66 69 6e 65  RACE(A).# define
304c0 20 73 71 6c 69 74 65 33 56 64 62 65 49 4f 54 72   sqlite3VdbeIOTr
304d0 61 63 65 53 71 6c 28 58 29 0a 23 65 6e 64 69 66  aceSql(X).#endif
304e0 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 73 65 20 72 6f  ../*.** These ro
304f0 75 74 69 6e 65 73 20 61 72 65 20 61 76 61 69 6c  utines are avail
30500 61 62 6c 65 20 66 6f 72 20 74 68 65 20 6d 65 6d  able for the mem
30510 32 2e 63 20 64 65 62 75 67 67 69 6e 67 20 6d 65  2.c debugging me
30520 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 6f 72 0a 2a  mory allocator.*
30530 2a 20 6f 6e 6c 79 2e 20 20 54 68 65 79 20 61 72  * only.  They ar
30540 65 20 75 73 65 64 20 74 6f 20 76 65 72 69 66 79  e used to verify
30550 20 74 68 61 74 20 64 69 66 66 65 72 65 6e 74 20   that different 
30560 22 74 79 70 65 73 22 20 6f 66 20 6d 65 6d 6f 72  "types" of memor
30570 79 0a 2a 2a 20 61 6c 6c 6f 63 61 74 69 6f 6e 73  y.** allocations
30580 20 61 72 65 20 70 72 6f 70 65 72 6c 79 20 74 72   are properly tr
30590 61 63 6b 65 64 20 62 79 20 74 68 65 20 73 79 73  acked by the sys
305a0 74 65 6d 2e 0a 2a 2a 0a 2a 2a 20 73 71 6c 69 74  tem..**.** sqlit
305b0 65 33 4d 65 6d 64 65 62 75 67 53 65 74 54 79 70  e3MemdebugSetTyp
305c0 65 28 29 20 73 65 74 73 20 74 68 65 20 22 74 79  e() sets the "ty
305d0 70 65 22 20 6f 66 20 61 6e 20 61 6c 6c 6f 63 61  pe" of an alloca
305e0 74 69 6f 6e 20 74 6f 20 6f 6e 65 20 6f 66 0a 2a  tion to one of.*
305f0 2a 20 74 68 65 20 4d 45 4d 54 59 50 45 5f 2a 20  * the MEMTYPE_* 
30600 6d 61 63 72 6f 73 20 64 65 66 69 6e 65 64 20 62  macros defined b
30610 65 6c 6f 77 2e 20 20 54 68 65 20 74 79 70 65 20  elow.  The type 
30620 6d 75 73 74 20 62 65 20 61 20 62 69 74 6d 61 73  must be a bitmas
30630 6b 20 77 69 74 68 0a 2a 2a 20 61 20 73 69 6e 67  k with.** a sing
30640 6c 65 20 62 69 74 20 73 65 74 2e 0a 2a 2a 0a 2a  le bit set..**.*
30650 2a 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75  * sqlite3Memdebu
30660 67 48 61 73 54 79 70 65 28 29 20 72 65 74 75 72  gHasType() retur
30670 6e 73 20 74 72 75 65 20 69 66 20 61 6e 79 20 6f  ns true if any o
30680 66 20 74 68 65 20 62 69 74 73 20 69 6e 20 69 74  f the bits in it
30690 73 20 73 65 63 6f 6e 64 0a 2a 2a 20 61 72 67 75  s second.** argu
306a0 6d 65 6e 74 20 6d 61 74 63 68 20 74 68 65 20 74  ment match the t
306b0 79 70 65 20 73 65 74 20 62 79 20 74 68 65 20 70  ype set by the p
306c0 72 65 76 69 6f 75 73 20 73 71 6c 69 74 65 33 4d  revious sqlite3M
306d0 65 6d 64 65 62 75 67 53 65 74 54 79 70 65 28 29  emdebugSetType()
306e0 2e 0a 2a 2a 20 73 71 6c 69 74 65 33 4d 65 6d 64  ..** sqlite3Memd
306f0 65 62 75 67 48 61 73 54 79 70 65 28 29 20 69 73  ebugHasType() is
30700 20 69 6e 74 65 6e 64 65 64 20 66 6f 72 20 75 73   intended for us
30710 65 20 69 6e 73 69 64 65 20 61 73 73 65 72 74 28  e inside assert(
30720 29 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a 2a 2a  ) statements..**
30730 0a 2a 2a 20 73 71 6c 69 74 65 33 4d 65 6d 64 65  .** sqlite3Memde
30740 62 75 67 4e 6f 54 79 70 65 28 29 20 72 65 74 75  bugNoType() retu
30750 72 6e 73 20 74 72 75 65 20 69 66 20 6e 6f 6e 65  rns true if none
30760 20 6f 66 20 74 68 65 20 62 69 74 73 20 69 6e 20   of the bits in 
30770 69 74 73 20 73 65 63 6f 6e 64 0a 2a 2a 20 61 72  its second.** ar
30780 67 75 6d 65 6e 74 20 6d 61 74 63 68 20 74 68 65  gument match the
30790 20 74 79 70 65 20 73 65 74 20 62 79 20 74 68 65   type set by the
307a0 20 70 72 65 76 69 6f 75 73 20 73 71 6c 69 74 65   previous sqlite
307b0 33 4d 65 6d 64 65 62 75 67 53 65 74 54 79 70 65  3MemdebugSetType
307c0 28 29 2e 0a 2a 2a 0a 2a 2a 20 50 65 72 68 61 70  ()..**.** Perhap
307d0 73 20 74 68 65 20 6d 6f 73 74 20 69 6d 70 6f 72  s the most impor
307e0 74 61 6e 74 20 70 6f 69 6e 74 20 69 73 20 74 68  tant point is th
307f0 65 20 64 69 66 66 65 72 65 6e 63 65 20 62 65 74  e difference bet
30800 77 65 65 6e 20 4d 45 4d 54 59 50 45 5f 48 45 41  ween MEMTYPE_HEA
30810 50 0a 2a 2a 20 61 6e 64 20 4d 45 4d 54 59 50 45  P.** and MEMTYPE
30820 5f 4c 4f 4f 4b 41 53 49 44 45 2e 20 20 49 66 20  _LOOKASIDE.  If 
30830 61 6e 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 69 73  an allocation is
30840 20 4d 45 4d 54 59 50 45 5f 4c 4f 4f 4b 41 53 49   MEMTYPE_LOOKASI
30850 44 45 2c 20 74 68 61 74 20 6d 65 61 6e 73 0a 2a  DE, that means.*
30860 2a 20 69 74 20 6d 69 67 68 74 20 68 61 76 65 20  * it might have 
30870 62 65 65 6e 20 61 6c 6c 6f 63 61 74 65 64 20 62  been allocated b
30880 79 20 6c 6f 6f 6b 61 73 69 64 65 2c 20 65 78 63  y lookaside, exc
30890 65 70 74 20 74 68 65 20 61 6c 6c 6f 63 61 74 69  ept the allocati
308a0 6f 6e 20 77 61 73 0a 2a 2a 20 74 6f 6f 20 6c 61  on was.** too la
308b0 72 67 65 20 6f 72 20 6c 6f 6f 6b 61 73 69 64 65  rge or lookaside
308c0 20 77 61 73 20 61 6c 72 65 61 64 79 20 66 75 6c   was already ful
308d0 6c 2e 20 20 49 74 20 69 73 20 69 6d 70 6f 72 74  l.  It is import
308e0 61 6e 74 20 74 6f 20 76 65 72 69 66 79 0a 2a 2a  ant to verify.**
308f0 20 74 68 61 74 20 61 6c 6c 6f 63 61 74 69 6f 6e   that allocation
30900 73 20 74 68 61 74 20 6d 69 67 68 74 20 68 61 76  s that might hav
30910 65 20 62 65 65 6e 20 73 61 74 69 73 66 69 65 64  e been satisfied
30920 20 62 79 20 6c 6f 6f 6b 61 73 69 64 65 20 61 72   by lookaside ar
30930 65 20 6e 6f 74 0a 2a 2a 20 70 61 73 73 65 64 20  e not.** passed 
30940 62 61 63 6b 20 74 6f 20 6e 6f 6e 2d 6c 6f 6f 6b  back to non-look
30950 61 73 69 64 65 20 66 72 65 65 28 29 20 72 6f 75  aside free() rou
30960 74 69 6e 65 73 2e 20 20 41 73 73 65 72 74 73 20  tines.  Asserts 
30970 73 75 63 68 20 61 73 20 74 68 65 0a 2a 2a 20 65  such as the.** e
30980 78 61 6d 70 6c 65 20 61 62 6f 76 65 20 61 72 65  xample above are
30990 20 70 6c 61 63 65 64 20 6f 6e 20 74 68 65 20 6e   placed on the n
309a0 6f 6e 2d 6c 6f 6f 6b 61 73 69 64 65 20 66 72 65  on-lookaside fre
309b0 65 28 29 20 72 6f 75 74 69 6e 65 73 20 74 6f 20  e() routines to 
309c0 76 65 72 69 66 79 0a 2a 2a 20 74 68 69 73 20 63  verify.** this c
309d0 6f 6e 73 74 72 61 69 6e 74 2e 0a 2a 2a 0a 2a 2a  onstraint..**.**
309e0 20 41 6c 6c 20 6f 66 20 74 68 69 73 20 69 73 20   All of this is 
309f0 6e 6f 2d 6f 70 20 66 6f 72 20 61 20 70 72 6f 64  no-op for a prod
30a00 75 63 74 69 6f 6e 20 62 75 69 6c 64 2e 20 20 49  uction build.  I
30a10 74 20 6f 6e 6c 79 20 63 6f 6d 65 73 20 69 6e 74  t only comes int
30a20 6f 0a 2a 2a 20 70 6c 61 79 20 77 68 65 6e 20 74  o.** play when t
30a30 68 65 20 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42  he SQLITE_MEMDEB
30a40 55 47 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20  UG compile-time 
30a50 6f 70 74 69 6f 6e 20 69 73 20 75 73 65 64 2e 0a  option is used..
30a60 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
30a70 5f 4d 45 4d 44 45 42 55 47 0a 20 20 76 6f 69 64  _MEMDEBUG.  void
30a80 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67   sqlite3Memdebug
30a90 53 65 74 54 79 70 65 28 76 6f 69 64 2a 2c 75 38  SetType(void*,u8
30aa0 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33  );.  int sqlite3
30ab0 4d 65 6d 64 65 62 75 67 48 61 73 54 79 70 65 28  MemdebugHasType(
30ac0 76 6f 69 64 2a 2c 75 38 29 3b 0a 20 20 69 6e 74  void*,u8);.  int
30ad0 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67   sqlite3Memdebug
30ae0 4e 6f 54 79 70 65 28 76 6f 69 64 2a 2c 75 38 29  NoType(void*,u8)
30af0 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65  ;.#else.# define
30b00 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67   sqlite3Memdebug
30b10 53 65 74 54 79 70 65 28 58 2c 59 29 20 20 2f 2a  SetType(X,Y)  /*
30b20 20 6e 6f 2d 6f 70 20 2a 2f 0a 23 20 64 65 66 69   no-op */.# defi
30b30 6e 65 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62  ne sqlite3Memdeb
30b40 75 67 48 61 73 54 79 70 65 28 58 2c 59 29 20 20  ugHasType(X,Y)  
30b50 31 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  1.# define sqlit
30b60 65 33 4d 65 6d 64 65 62 75 67 4e 6f 54 79 70 65  e3MemdebugNoType
30b70 28 58 2c 59 29 20 20 20 31 0a 23 65 6e 64 69 66  (X,Y)   1.#endif
30b80 0a 23 64 65 66 69 6e 65 20 4d 45 4d 54 59 50 45  .#define MEMTYPE
30b90 5f 48 45 41 50 20 20 20 20 20 20 20 30 78 30 31  _HEAP       0x01
30ba0 20 20 2f 2a 20 47 65 6e 65 72 61 6c 20 68 65 61    /* General hea
30bb0 70 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 2a 2f  p allocations */
30bc0 0a 23 64 65 66 69 6e 65 20 4d 45 4d 54 59 50 45  .#define MEMTYPE
30bd0 5f 4c 4f 4f 4b 41 53 49 44 45 20 20 30 78 30 32  _LOOKASIDE  0x02
30be0 20 20 2f 2a 20 48 65 61 70 20 74 68 61 74 20 6d    /* Heap that m
30bf0 69 67 68 74 20 68 61 76 65 20 62 65 65 6e 20 6c  ight have been l
30c00 6f 6f 6b 61 73 69 64 65 20 2a 2f 0a 23 64 65 66  ookaside */.#def
30c10 69 6e 65 20 4d 45 4d 54 59 50 45 5f 50 43 41 43  ine MEMTYPE_PCAC
30c20 48 45 20 20 20 20 20 30 78 30 34 20 20 2f 2a 20  HE     0x04  /* 
30c30 50 61 67 65 20 63 61 63 68 65 20 61 6c 6c 6f 63  Page cache alloc
30c40 61 74 69 6f 6e 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a  ations */../*.**
30c50 20 54 68 72 65 61 64 69 6e 67 20 69 6e 74 65 72   Threading inter
30c60 66 61 63 65 0a 2a 2f 0a 23 69 66 20 53 51 4c 49  face.*/.#if SQLI
30c70 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54 48  TE_MAX_WORKER_TH
30c80 52 45 41 44 53 3e 30 0a 69 6e 74 20 73 71 6c 69  READS>0.int sqli
30c90 74 65 33 54 68 72 65 61 64 43 72 65 61 74 65 28  te3ThreadCreate(
30ca0 53 51 4c 69 74 65 54 68 72 65 61 64 2a 2a 2c 76  SQLiteThread**,v
30cb0 6f 69 64 2a 28 2a 29 28 76 6f 69 64 2a 29 2c 76  oid*(*)(void*),v
30cc0 6f 69 64 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  oid*);.int sqlit
30cd0 65 33 54 68 72 65 61 64 4a 6f 69 6e 28 53 51 4c  e3ThreadJoin(SQL
30ce0 69 74 65 54 68 72 65 61 64 2a 2c 20 76 6f 69 64  iteThread*, void
30cf0 2a 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66  **);.#endif..#if
30d00 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
30d10 45 4e 41 42 4c 45 5f 44 42 50 41 47 45 5f 56 54  ENABLE_DBPAGE_VT
30d20 41 42 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 53  AB) || defined(S
30d30 51 4c 49 54 45 5f 54 45 53 54 29 0a 69 6e 74 20  QLITE_TEST).int 
30d40 73 71 6c 69 74 65 33 44 62 70 61 67 65 52 65 67  sqlite3DbpageReg
30d50 69 73 74 65 72 28 73 71 6c 69 74 65 33 2a 29 3b  ister(sqlite3*);
30d60 0a 23 65 6e 64 69 66 0a 23 69 66 20 64 65 66 69  .#endif.#if defi
30d70 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c  ned(SQLITE_ENABL
30d80 45 5f 44 42 53 54 41 54 5f 56 54 41 42 29 20 7c  E_DBSTAT_VTAB) |
30d90 7c 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  | defined(SQLITE
30da0 5f 54 45 53 54 29 0a 69 6e 74 20 73 71 6c 69 74  _TEST).int sqlit
30db0 65 33 44 62 73 74 61 74 52 65 67 69 73 74 65 72  e3DbstatRegister
30dc0 28 73 71 6c 69 74 65 33 2a 29 3b 0a 23 65 6e 64  (sqlite3*);.#end
30dd0 69 66 0a 0a 69 6e 74 20 73 71 6c 69 74 65 33 45  if..int sqlite3E
30de0 78 70 72 56 65 63 74 6f 72 53 69 7a 65 28 45 78  xprVectorSize(Ex
30df0 70 72 20 2a 70 45 78 70 72 29 3b 0a 69 6e 74 20  pr *pExpr);.int 
30e00 73 71 6c 69 74 65 33 45 78 70 72 49 73 56 65 63  sqlite3ExprIsVec
30e10 74 6f 72 28 45 78 70 72 20 2a 70 45 78 70 72 29  tor(Expr *pExpr)
30e20 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33 56  ;.Expr *sqlite3V
30e30 65 63 74 6f 72 46 69 65 6c 64 53 75 62 65 78 70  ectorFieldSubexp
30e40 72 28 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 45  r(Expr*, int);.E
30e50 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72  xpr *sqlite3Expr
30e60 46 6f 72 56 65 63 74 6f 72 46 69 65 6c 64 28 50  ForVectorField(P
30e70 61 72 73 65 2a 2c 45 78 70 72 2a 2c 69 6e 74 29  arse*,Expr*,int)
30e80 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 65  ;.void sqlite3Ve
30e90 63 74 6f 72 45 72 72 6f 72 4d 73 67 28 50 61 72  ctorErrorMsg(Par
30ea0 73 65 2a 2c 20 45 78 70 72 2a 29 3b 0a 0a 23 69  se*, Expr*);..#i
30eb0 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
30ec0 54 5f 43 4f 4d 50 49 4c 45 4f 50 54 49 4f 4e 5f  T_COMPILEOPTION_
30ed0 44 49 41 47 53 0a 63 6f 6e 73 74 20 63 68 61 72  DIAGS.const char
30ee0 20 2a 2a 73 71 6c 69 74 65 33 43 6f 6d 70 69 6c   **sqlite3Compil
30ef0 65 4f 70 74 69 6f 6e 73 28 69 6e 74 20 2a 70 6e  eOptions(int *pn
30f00 4f 70 74 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 65  Opt);.#endif..#e
30f10 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 49 4e  ndif /* SQLITEIN
30f20 54 5f 48 20 2a 2f 0a                             T_H */.