/ Hex Artifact Content
Login

Artifact f44de7fea38d4fd03ee8db7f851f2727b701d4ec3fc21a8335e8d3888dda7176:


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 74 65 6d 70 5f 73 74   */.  u8 temp_st
c030: 6f 72 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ore;            
c040: 20 20 20 20 2f 2a 20 31 3a 20 66 69 6c 65 20 32      /* 1: file 2
c050: 3a 20 6d 65 6d 6f 72 79 20 30 3a 20 64 65 66 61  : memory 0: defa
c060: 75 6c 74 20 2a 2f 0a 20 20 75 38 20 6d 61 6c 6c  ult */.  u8 mall
c070: 6f 63 46 61 69 6c 65 64 3b 20 20 20 20 20 20 20  ocFailed;       
c080: 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69         /* True i
c090: 66 20 77 65 20 68 61 76 65 20 73 65 65 6e 20 61  f we have seen a
c0a0: 20 6d 61 6c 6c 6f 63 20 66 61 69 6c 75 72 65 20   malloc failure 
c0b0: 2a 2f 0a 20 20 75 38 20 62 42 65 6e 69 67 6e 4d  */.  u8 bBenignM
c0c0: 61 6c 6c 6f 63 3b 20 20 20 20 20 20 20 20 20 20  alloc;          
c0d0: 20 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 72 65 71     /* Do not req
c0e0: 75 69 72 65 20 4f 4f 4d 73 20 69 66 20 74 72 75  uire OOMs if tru
c0f0: 65 20 2a 2f 0a 20 20 75 38 20 64 66 6c 74 4c 6f  e */.  u8 dfltLo
c100: 63 6b 4d 6f 64 65 3b 20 20 20 20 20 20 20 20 20  ckMode;         
c110: 20 20 20 20 20 2f 2a 20 44 65 66 61 75 6c 74 20       /* Default 
c120: 6c 6f 63 6b 69 6e 67 2d 6d 6f 64 65 20 66 6f 72  locking-mode for
c130: 20 61 74 74 61 63 68 65 64 20 64 62 73 20 2a 2f   attached dbs */
c140: 0a 20 20 73 69 67 6e 65 64 20 63 68 61 72 20 6e  .  signed char n
c150: 65 78 74 41 75 74 6f 76 61 63 3b 20 20 20 20 20  extAutovac;     
c160: 20 2f 2a 20 41 75 74 6f 76 61 63 20 73 65 74 74   /* Autovac sett
c170: 69 6e 67 20 61 66 74 65 72 20 56 41 43 55 55 4d  ing after VACUUM
c180: 20 69 66 20 3e 3d 30 20 2a 2f 0a 20 20 75 38 20   if >=0 */.  u8 
c190: 73 75 70 70 72 65 73 73 45 72 72 3b 20 20 20 20  suppressErr;    
c1a0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 6f             /* Do
c1b0: 20 6e 6f 74 20 69 73 73 75 65 20 65 72 72 6f 72   not issue error
c1c0: 20 6d 65 73 73 61 67 65 73 20 69 66 20 74 72 75   messages if tru
c1d0: 65 20 2a 2f 0a 20 20 75 38 20 76 74 61 62 4f 6e  e */.  u8 vtabOn
c1e0: 43 6f 6e 66 6c 69 63 74 3b 20 20 20 20 20 20 20  Conflict;       
c1f0: 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 74 6f       /* Value to
c200: 20 72 65 74 75 72 6e 20 66 6f 72 20 73 33 5f 76   return for s3_v
c210: 74 61 62 5f 6f 6e 5f 63 6f 6e 66 6c 69 63 74 28  tab_on_conflict(
c220: 29 20 2a 2f 0a 20 20 75 38 20 69 73 54 72 61 6e  ) */.  u8 isTran
c230: 73 61 63 74 69 6f 6e 53 61 76 65 70 6f 69 6e 74  sactionSavepoint
c240: 3b 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20  ;    /* True if 
c250: 74 68 65 20 6f 75 74 65 72 6d 6f 73 74 20 73 61  the outermost sa
c260: 76 65 70 6f 69 6e 74 20 69 73 20 61 20 54 53 20  vepoint is a TS 
c270: 2a 2f 0a 20 20 75 38 20 6d 54 72 61 63 65 3b 20  */.  u8 mTrace; 
c280: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c290: 20 20 20 2f 2a 20 7a 65 72 6f 20 6f 72 20 6d 6f     /* zero or mo
c2a0: 72 65 20 53 51 4c 49 54 45 5f 54 52 41 43 45 20  re SQLITE_TRACE 
c2b0: 66 6c 61 67 73 20 2a 2f 0a 20 20 75 38 20 6e 6f  flags */.  u8 no
c2c0: 53 68 61 72 65 64 43 61 63 68 65 3b 20 20 20 20  SharedCache;    
c2d0: 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65           /* True
c2e0: 20 69 66 20 6e 6f 20 73 68 61 72 65 64 2d 63 61   if no shared-ca
c2f0: 63 68 65 20 62 61 63 6b 65 6e 64 73 20 2a 2f 0a  che backends */.
c300: 20 20 75 38 20 6e 53 71 6c 45 78 65 63 3b 20 20    u8 nSqlExec;  
c310: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c320: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 70 65 6e  /* Number of pen
c330: 64 69 6e 67 20 4f 50 5f 53 71 6c 45 78 65 63 20  ding OP_SqlExec 
c340: 6f 70 63 6f 64 65 73 20 2a 2f 0a 20 20 69 6e 74  opcodes */.  int
c350: 20 6e 65 78 74 50 61 67 65 73 69 7a 65 3b 20 20   nextPagesize;  
c360: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50 61             /* Pa
c370: 67 65 73 69 7a 65 20 61 66 74 65 72 20 56 41 43  gesize after VAC
c380: 55 55 4d 20 69 66 20 3e 30 20 2a 2f 0a 20 20 75  UUM if >0 */.  u
c390: 33 32 20 6d 61 67 69 63 3b 20 20 20 20 20 20 20  32 magic;       
c3a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
c3b0: 4d 61 67 69 63 20 6e 75 6d 62 65 72 20 66 6f 72  Magic number for
c3c0: 20 64 65 74 65 63 74 20 6c 69 62 72 61 72 79 20   detect library 
c3d0: 6d 69 73 75 73 65 20 2a 2f 0a 20 20 69 6e 74 20  misuse */.  int 
c3e0: 6e 43 68 61 6e 67 65 3b 20 20 20 20 20 20 20 20  nChange;        
c3f0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c            /* Val
c400: 75 65 20 72 65 74 75 72 6e 65 64 20 62 79 20 73  ue returned by s
c410: 71 6c 69 74 65 33 5f 63 68 61 6e 67 65 73 28 29  qlite3_changes()
c420: 20 2a 2f 0a 20 20 69 6e 74 20 6e 54 6f 74 61 6c   */.  int nTotal
c430: 43 68 61 6e 67 65 3b 20 20 20 20 20 20 20 20 20  Change;         
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 74 6f 74 61 6c 5f 63 68 61 6e 67 65 73 28 29  _total_changes()
c470: 20 2a 2f 0a 20 20 69 6e 74 20 61 4c 69 6d 69 74   */.  int aLimit
c480: 5b 53 51 4c 49 54 45 5f 4e 5f 4c 49 4d 49 54 5d  [SQLITE_N_LIMIT]
c490: 3b 20 20 20 2f 2a 20 4c 69 6d 69 74 73 20 2a 2f  ;   /* Limits */
c4a0: 0a 20 20 69 6e 74 20 6e 4d 61 78 53 6f 72 74 65  .  int nMaxSorte
c4b0: 72 4d 6d 61 70 3b 20 20 20 20 20 20 20 20 20 20  rMmap;          
c4c0: 20 2f 2a 20 4d 61 78 69 6d 75 6d 20 73 69 7a 65   /* Maximum size
c4d0: 20 6f 66 20 72 65 67 69 6f 6e 73 20 6d 61 70 70   of regions mapp
c4e0: 65 64 20 62 79 20 73 6f 72 74 65 72 20 2a 2f 0a  ed by sorter */.
c4f0: 20 20 73 74 72 75 63 74 20 73 71 6c 69 74 65 33    struct sqlite3
c500: 49 6e 69 74 49 6e 66 6f 20 7b 20 20 20 20 20 20  InitInfo {      
c510: 2f 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 75  /* Information u
c520: 73 65 64 20 64 75 72 69 6e 67 20 69 6e 69 74 69  sed during initi
c530: 61 6c 69 7a 61 74 69 6f 6e 20 2a 2f 0a 20 20 20  alization */.   
c540: 20 69 6e 74 20 6e 65 77 54 6e 75 6d 3b 20 20 20   int newTnum;   
c550: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
c560: 52 6f 6f 74 70 61 67 65 20 6f 66 20 74 61 62 6c  Rootpage of tabl
c570: 65 20 62 65 69 6e 67 20 69 6e 69 74 69 61 6c 69  e being initiali
c580: 7a 65 64 20 2a 2f 0a 20 20 20 20 75 38 20 69 44  zed */.    u8 iD
c590: 62 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  b;              
c5a0: 20 20 20 20 20 20 20 2f 2a 20 57 68 69 63 68 20         /* Which 
c5b0: 64 62 20 66 69 6c 65 20 69 73 20 62 65 69 6e 67  db file is being
c5c0: 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a   initialized */.
c5d0: 20 20 20 20 75 38 20 62 75 73 79 3b 20 20 20 20      u8 busy;    
c5e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c5f0: 2f 2a 20 54 52 55 45 20 69 66 20 63 75 72 72 65  /* TRUE if curre
c600: 6e 74 6c 79 20 69 6e 69 74 69 61 6c 69 7a 69 6e  ntly initializin
c610: 67 20 2a 2f 0a 20 20 20 20 75 6e 73 69 67 6e 65  g */.    unsigne
c620: 64 20 6f 72 70 68 61 6e 54 72 69 67 67 65 72 20  d orphanTrigger 
c630: 3a 20 31 3b 20 2f 2a 20 4c 61 73 74 20 73 74 61  : 1; /* Last sta
c640: 74 65 6d 65 6e 74 20 69 73 20 6f 72 70 68 61 6e  tement is orphan
c650: 65 64 20 54 45 4d 50 20 74 72 69 67 67 65 72 20  ed TEMP trigger 
c660: 2a 2f 0a 20 20 20 20 75 6e 73 69 67 6e 65 64 20  */.    unsigned 
c670: 69 6d 70 6f 73 74 65 72 54 61 62 6c 65 20 3a 20  imposterTable : 
c680: 31 3b 20 2f 2a 20 42 75 69 6c 64 69 6e 67 20 61  1; /* Building a
c690: 6e 20 69 6d 70 6f 73 74 65 72 20 74 61 62 6c 65  n imposter table
c6a0: 20 2a 2f 0a 20 20 20 20 75 6e 73 69 67 6e 65 64   */.    unsigned
c6b0: 20 72 65 6f 70 65 6e 4d 65 6d 64 62 20 3a 20 31   reopenMemdb : 1
c6c0: 3b 20 20 20 2f 2a 20 41 54 54 41 43 48 20 69 73  ;   /* ATTACH is
c6d0: 20 72 65 61 6c 6c 79 20 61 20 72 65 6f 70 65 6e   really a reopen
c6e0: 20 75 73 69 6e 67 20 4d 65 6d 44 42 20 2a 2f 0a   using MemDB */.
c6f0: 20 20 7d 20 69 6e 69 74 3b 0a 20 20 69 6e 74 20    } init;.  int 
c700: 6e 56 64 62 65 41 63 74 69 76 65 3b 20 20 20 20  nVdbeActive;    
c710: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
c720: 62 65 72 20 6f 66 20 56 44 42 45 73 20 63 75 72  ber of VDBEs cur
c730: 72 65 6e 74 6c 79 20 72 75 6e 6e 69 6e 67 20 2a  rently running *
c740: 2f 0a 20 20 69 6e 74 20 6e 56 64 62 65 52 65 61  /.  int nVdbeRea
c750: 64 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  d;              
c760: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61    /* Number of a
c770: 63 74 69 76 65 20 56 44 42 45 73 20 74 68 61 74  ctive VDBEs that
c780: 20 72 65 61 64 20 6f 72 20 77 72 69 74 65 20 2a   read or write *
c790: 2f 0a 20 20 69 6e 74 20 6e 56 64 62 65 57 72 69  /.  int nVdbeWri
c7a0: 74 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  te;             
c7b0: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61    /* Number of a
c7c0: 63 74 69 76 65 20 56 44 42 45 73 20 74 68 61 74  ctive VDBEs that
c7d0: 20 72 65 61 64 20 61 6e 64 20 77 72 69 74 65 20   read and write 
c7e0: 2a 2f 0a 20 20 69 6e 74 20 6e 56 64 62 65 45 78  */.  int nVdbeEx
c7f0: 65 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ec;             
c800: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
c810: 6e 65 73 74 65 64 20 63 61 6c 6c 73 20 74 6f 20  nested calls to 
c820: 56 64 62 65 45 78 65 63 28 29 20 2a 2f 0a 20 20  VdbeExec() */.  
c830: 69 6e 74 20 6e 56 44 65 73 74 72 6f 79 3b 20 20  int nVDestroy;  
c840: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
c850: 20 4e 75 6d 62 65 72 20 6f 66 20 61 63 74 69 76   Number of activ
c860: 65 20 4f 50 5f 56 44 65 73 74 72 6f 79 20 6f 70  e OP_VDestroy op
c870: 65 72 61 74 69 6f 6e 73 20 2a 2f 0a 20 20 69 6e  erations */.  in
c880: 74 20 6e 45 78 74 65 6e 73 69 6f 6e 3b 20 20 20  t nExtension;   
c890: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
c8a0: 75 6d 62 65 72 20 6f 66 20 6c 6f 61 64 65 64 20  umber of loaded 
c8b0: 65 78 74 65 6e 73 69 6f 6e 73 20 2a 2f 0a 20 20  extensions */.  
c8c0: 76 6f 69 64 20 2a 2a 61 45 78 74 65 6e 73 69 6f  void **aExtensio
c8d0: 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  n;            /*
c8e0: 20 41 72 72 61 79 20 6f 66 20 73 68 61 72 65 64   Array of shared
c8f0: 20 6c 69 62 72 61 72 79 20 68 61 6e 64 6c 65 73   library handles
c900: 20 2a 2f 0a 20 20 69 6e 74 20 28 2a 78 54 72 61   */.  int (*xTra
c910: 63 65 29 28 75 33 32 2c 76 6f 69 64 2a 2c 76 6f  ce)(u32,void*,vo
c920: 69 64 2a 2c 76 6f 69 64 2a 29 3b 20 20 20 20 20  id*,void*);     
c930: 2f 2a 20 54 72 61 63 65 20 66 75 6e 63 74 69 6f  /* Trace functio
c940: 6e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 54 72  n */.  void *pTr
c950: 61 63 65 41 72 67 3b 20 20 20 20 20 20 20 20 20  aceArg;         
c960: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c970: 20 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f 20   /* Argument to 
c980: 74 68 65 20 74 72 61 63 65 20 66 75 6e 63 74 69  the trace functi
c990: 6f 6e 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51  on */.#ifndef SQ
c9a0: 4c 49 54 45 5f 4f 4d 49 54 5f 44 45 50 52 45 43  LITE_OMIT_DEPREC
c9b0: 41 54 45 44 0a 20 20 76 6f 69 64 20 28 2a 78 50  ATED.  void (*xP
c9c0: 72 6f 66 69 6c 65 29 28 76 6f 69 64 2a 2c 63 6f  rofile)(void*,co
c9d0: 6e 73 74 20 63 68 61 72 2a 2c 75 36 34 29 3b 20  nst char*,u64); 
c9e0: 20 2f 2a 20 50 72 6f 66 69 6c 69 6e 67 20 66 75   /* Profiling fu
c9f0: 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64  nction */.  void
ca00: 20 2a 70 50 72 6f 66 69 6c 65 41 72 67 3b 20 20   *pProfileArg;  
ca10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ca20: 20 20 20 20 20 20 2f 2a 20 41 72 67 75 6d 65 6e        /* Argumen
ca30: 74 20 74 6f 20 70 72 6f 66 69 6c 65 20 66 75 6e  t to profile fun
ca40: 63 74 69 6f 6e 20 2a 2f 0a 23 65 6e 64 69 66 0a  ction */.#endif.
ca50: 20 20 76 6f 69 64 20 2a 70 43 6f 6d 6d 69 74 41    void *pCommitA
ca60: 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  rg;             
ca70: 20 20 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74 20      /* Argument 
ca80: 74 6f 20 78 43 6f 6d 6d 69 74 43 61 6c 6c 62 61  to xCommitCallba
ca90: 63 6b 28 29 20 2a 2f 0a 20 20 69 6e 74 20 28 2a  ck() */.  int (*
caa0: 78 43 6f 6d 6d 69 74 43 61 6c 6c 62 61 63 6b 29  xCommitCallback)
cab0: 28 76 6f 69 64 2a 29 3b 20 20 20 20 2f 2a 20 49  (void*);    /* I
cac0: 6e 76 6f 6b 65 64 20 61 74 20 65 76 65 72 79 20  nvoked at every 
cad0: 63 6f 6d 6d 69 74 2e 20 2a 2f 0a 20 20 76 6f 69  commit. */.  voi
cae0: 64 20 2a 70 52 6f 6c 6c 62 61 63 6b 41 72 67 3b  d *pRollbackArg;
caf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
cb00: 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f 20 78 52  * Argument to xR
cb10: 6f 6c 6c 62 61 63 6b 43 61 6c 6c 62 61 63 6b 28  ollbackCallback(
cb20: 29 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 52  ) */.  void (*xR
cb30: 6f 6c 6c 62 61 63 6b 43 61 6c 6c 62 61 63 6b 29  ollbackCallback)
cb40: 28 76 6f 69 64 2a 29 3b 20 2f 2a 20 49 6e 76 6f  (void*); /* Invo
cb50: 6b 65 64 20 61 74 20 65 76 65 72 79 20 63 6f 6d  ked at every com
cb60: 6d 69 74 2e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a  mit. */.  void *
cb70: 70 55 70 64 61 74 65 41 72 67 3b 0a 20 20 76 6f  pUpdateArg;.  vo
cb80: 69 64 20 28 2a 78 55 70 64 61 74 65 43 61 6c 6c  id (*xUpdateCall
cb90: 62 61 63 6b 29 28 76 6f 69 64 2a 2c 69 6e 74 2c  back)(void*,int,
cba0: 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e   const char*,con
cbb0: 73 74 20 63 68 61 72 2a 2c 73 71 6c 69 74 65 5f  st char*,sqlite_
cbc0: 69 6e 74 36 34 29 3b 0a 20 20 50 61 72 73 65 20  int64);.  Parse 
cbd0: 2a 70 50 61 72 73 65 3b 20 20 20 20 20 20 20 20  *pParse;        
cbe0: 20 20 20 20 20 20 20 20 2f 2a 20 43 75 72 72 65          /* Curre
cbf0: 6e 74 20 70 61 72 73 65 20 2a 2f 0a 23 69 66 64  nt parse */.#ifd
cc00: 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ef SQLITE_ENABLE
cc10: 5f 50 52 45 55 50 44 41 54 45 5f 48 4f 4f 4b 0a  _PREUPDATE_HOOK.
cc20: 20 20 76 6f 69 64 20 2a 70 50 72 65 55 70 64 61    void *pPreUpda
cc30: 74 65 41 72 67 3b 20 20 20 20 20 20 20 20 20 20  teArg;          
cc40: 2f 2a 20 46 69 72 73 74 20 61 72 67 75 6d 65 6e  /* First argumen
cc50: 74 20 74 6f 20 78 50 72 65 55 70 64 61 74 65 43  t to xPreUpdateC
cc60: 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 76 6f 69  allback */.  voi
cc70: 64 20 28 2a 78 50 72 65 55 70 64 61 74 65 43 61  d (*xPreUpdateCa
cc80: 6c 6c 62 61 63 6b 29 28 20 20 20 2f 2a 20 52 65  llback)(   /* Re
cc90: 67 69 73 74 65 72 65 64 20 75 73 69 6e 67 20 73  gistered using s
cca0: 71 6c 69 74 65 33 5f 70 72 65 75 70 64 61 74 65  qlite3_preupdate
ccb0: 5f 68 6f 6f 6b 28 29 20 2a 2f 0a 20 20 20 20 76  _hook() */.    v
ccc0: 6f 69 64 2a 2c 73 71 6c 69 74 65 33 2a 2c 69 6e  oid*,sqlite3*,in
ccd0: 74 2c 63 68 61 72 20 63 6f 6e 73 74 2a 2c 63 68  t,char const*,ch
cce0: 61 72 20 63 6f 6e 73 74 2a 2c 73 71 6c 69 74 65  ar const*,sqlite
ccf0: 33 5f 69 6e 74 36 34 2c 73 71 6c 69 74 65 33 5f  3_int64,sqlite3_
cd00: 69 6e 74 36 34 0a 20 20 29 3b 0a 20 20 50 72 65  int64.  );.  Pre
cd10: 55 70 64 61 74 65 20 2a 70 50 72 65 55 70 64 61  Update *pPreUpda
cd20: 74 65 3b 20 20 20 20 20 20 20 20 2f 2a 20 43 6f  te;        /* Co
cd30: 6e 74 65 78 74 20 66 6f 72 20 61 63 74 69 76 65  ntext for active
cd40: 20 70 72 65 2d 75 70 64 61 74 65 20 63 61 6c 6c   pre-update call
cd50: 62 61 63 6b 20 2a 2f 0a 23 65 6e 64 69 66 20 2f  back */.#endif /
cd60: 2a 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  * SQLITE_ENABLE_
cd70: 50 52 45 55 50 44 41 54 45 5f 48 4f 4f 4b 20 2a  PREUPDATE_HOOK *
cd80: 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  /.#ifndef SQLITE
cd90: 5f 4f 4d 49 54 5f 57 41 4c 0a 20 20 69 6e 74 20  _OMIT_WAL.  int 
cda0: 28 2a 78 57 61 6c 43 61 6c 6c 62 61 63 6b 29 28  (*xWalCallback)(
cdb0: 76 6f 69 64 20 2a 2c 20 73 71 6c 69 74 65 33 20  void *, sqlite3 
cdc0: 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c  *, const char *,
cdd0: 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20 2a 70   int);.  void *p
cde0: 57 61 6c 41 72 67 3b 0a 23 65 6e 64 69 66 0a 20  WalArg;.#endif. 
cdf0: 20 76 6f 69 64 28 2a 78 43 6f 6c 6c 4e 65 65 64   void(*xCollNeed
ce00: 65 64 29 28 76 6f 69 64 2a 2c 73 71 6c 69 74 65  ed)(void*,sqlite
ce10: 33 2a 2c 69 6e 74 20 65 54 65 78 74 52 65 70 2c  3*,int eTextRep,
ce20: 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20 20  const char*);.  
ce30: 76 6f 69 64 28 2a 78 43 6f 6c 6c 4e 65 65 64 65  void(*xCollNeede
ce40: 64 31 36 29 28 76 6f 69 64 2a 2c 73 71 6c 69 74  d16)(void*,sqlit
ce50: 65 33 2a 2c 69 6e 74 20 65 54 65 78 74 52 65 70  e3*,int eTextRep
ce60: 2c 63 6f 6e 73 74 20 76 6f 69 64 2a 29 3b 0a 20  ,const void*);. 
ce70: 20 76 6f 69 64 20 2a 70 43 6f 6c 6c 4e 65 65 64   void *pCollNeed
ce80: 65 64 41 72 67 3b 0a 20 20 73 71 6c 69 74 65 33  edArg;.  sqlite3
ce90: 5f 76 61 6c 75 65 20 2a 70 45 72 72 3b 20 20 20  _value *pErr;   
cea0: 20 20 20 20 20 20 20 2f 2a 20 4d 6f 73 74 20 72         /* Most r
ceb0: 65 63 65 6e 74 20 65 72 72 6f 72 20 6d 65 73 73  ecent error mess
cec0: 61 67 65 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b  age */.  union {
ced0: 0a 20 20 20 20 76 6f 6c 61 74 69 6c 65 20 69 6e  .    volatile in
cee0: 74 20 69 73 49 6e 74 65 72 72 75 70 74 65 64 3b  t isInterrupted;
cef0: 20 2f 2a 20 54 72 75 65 20 69 66 20 73 71 6c 69   /* True if sqli
cf00: 74 65 33 5f 69 6e 74 65 72 72 75 70 74 20 68 61  te3_interrupt ha
cf10: 73 20 62 65 65 6e 20 63 61 6c 6c 65 64 20 2a 2f  s been called */
cf20: 0a 20 20 20 20 64 6f 75 62 6c 65 20 6e 6f 74 55  .    double notU
cf30: 73 65 64 31 3b 20 20 20 20 20 20 20 20 20 20 20  sed1;           
cf40: 20 2f 2a 20 53 70 61 63 65 72 20 2a 2f 0a 20 20   /* Spacer */.  
cf50: 7d 20 75 31 3b 0a 20 20 4c 6f 6f 6b 61 73 69 64  } u1;.  Lookasid
cf60: 65 20 6c 6f 6f 6b 61 73 69 64 65 3b 20 20 20 20  e lookaside;    
cf70: 20 20 20 20 20 20 2f 2a 20 4c 6f 6f 6b 61 73 69        /* Lookasi
cf80: 64 65 20 6d 61 6c 6c 6f 63 20 63 6f 6e 66 69 67  de malloc config
cf90: 75 72 61 74 69 6f 6e 20 2a 2f 0a 23 69 66 6e 64  uration */.#ifnd
cfa0: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41  ef SQLITE_OMIT_A
cfb0: 55 54 48 4f 52 49 5a 41 54 49 4f 4e 0a 20 20 73  UTHORIZATION.  s
cfc0: 71 6c 69 74 65 33 5f 78 61 75 74 68 20 78 41 75  qlite3_xauth xAu
cfd0: 74 68 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  th;          /* 
cfe0: 41 63 63 65 73 73 20 61 75 74 68 6f 72 69 7a 61  Access authoriza
cff0: 74 69 6f 6e 20 66 75 6e 63 74 69 6f 6e 20 2a 2f  tion function */
d000: 0a 20 20 76 6f 69 64 20 2a 70 41 75 74 68 41 72  .  void *pAuthAr
d010: 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  g;              
d020: 20 2f 2a 20 31 73 74 20 61 72 67 75 6d 65 6e 74   /* 1st argument
d030: 20 74 6f 20 74 68 65 20 61 63 63 65 73 73 20 61   to the access a
d040: 75 74 68 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a  uth function */.
d050: 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53  #endif.#ifndef S
d060: 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 4f 47 52  QLITE_OMIT_PROGR
d070: 45 53 53 5f 43 41 4c 4c 42 41 43 4b 0a 20 20 69  ESS_CALLBACK.  i
d080: 6e 74 20 28 2a 78 50 72 6f 67 72 65 73 73 29 28  nt (*xProgress)(
d090: 76 6f 69 64 20 2a 29 3b 20 20 20 20 20 2f 2a 20  void *);     /* 
d0a0: 54 68 65 20 70 72 6f 67 72 65 73 73 20 63 61 6c  The progress cal
d0b0: 6c 62 61 63 6b 20 2a 2f 0a 20 20 76 6f 69 64 20  lback */.  void 
d0c0: 2a 70 50 72 6f 67 72 65 73 73 41 72 67 3b 20 20  *pProgressArg;  
d0d0: 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72 67 75           /* Argu
d0e0: 6d 65 6e 74 20 74 6f 20 74 68 65 20 70 72 6f 67  ment to the prog
d0f0: 72 65 73 73 20 63 61 6c 6c 62 61 63 6b 20 2a 2f  ress callback */
d100: 0a 20 20 75 6e 73 69 67 6e 65 64 20 6e 50 72 6f  .  unsigned nPro
d110: 67 72 65 73 73 4f 70 73 3b 20 20 20 20 20 20 20  gressOps;       
d120: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6f 70   /* Number of op
d130: 63 6f 64 65 73 20 66 6f 72 20 70 72 6f 67 72 65  codes for progre
d140: 73 73 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 23  ss callback */.#
d150: 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51  endif.#ifndef SQ
d160: 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
d170: 4c 54 41 42 4c 45 0a 20 20 69 6e 74 20 6e 56 54  LTABLE.  int nVT
d180: 72 61 6e 73 3b 20 20 20 20 20 20 20 20 20 20 20  rans;           
d190: 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 6f 63 61         /* Alloca
d1a0: 74 65 64 20 73 69 7a 65 20 6f 66 20 61 56 54 72  ted size of aVTr
d1b0: 61 6e 73 20 2a 2f 0a 20 20 48 61 73 68 20 61 4d  ans */.  Hash aM
d1c0: 6f 64 75 6c 65 3b 20 20 20 20 20 20 20 20 20 20  odule;          
d1d0: 20 20 20 20 20 20 20 2f 2a 20 70 6f 70 75 6c 61         /* popula
d1e0: 74 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f 63  ted by sqlite3_c
d1f0: 72 65 61 74 65 5f 6d 6f 64 75 6c 65 28 29 20 2a  reate_module() *
d200: 2f 0a 20 20 56 74 61 62 43 74 78 20 2a 70 56 74  /.  VtabCtx *pVt
d210: 61 62 43 74 78 3b 20 20 20 20 20 20 20 20 20 20  abCtx;          
d220: 20 20 2f 2a 20 43 6f 6e 74 65 78 74 20 66 6f 72    /* Context for
d230: 20 61 63 74 69 76 65 20 76 74 61 62 20 63 6f 6e   active vtab con
d240: 6e 65 63 74 2f 63 72 65 61 74 65 20 2a 2f 0a 20  nect/create */. 
d250: 20 56 54 61 62 6c 65 20 2a 2a 61 56 54 72 61 6e   VTable **aVTran
d260: 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  s;             /
d270: 2a 20 56 69 72 74 75 61 6c 20 74 61 62 6c 65 73  * Virtual tables
d280: 20 77 69 74 68 20 6f 70 65 6e 20 74 72 61 6e 73   with open trans
d290: 61 63 74 69 6f 6e 73 20 2a 2f 0a 20 20 56 54 61  actions */.  VTa
d2a0: 62 6c 65 20 2a 70 44 69 73 63 6f 6e 6e 65 63 74  ble *pDisconnect
d2b0: 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 69  ;          /* Di
d2c0: 73 63 6f 6e 6e 65 63 74 20 74 68 65 73 65 20 69  sconnect these i
d2d0: 6e 20 6e 65 78 74 20 73 71 6c 69 74 65 33 5f 70  n next sqlite3_p
d2e0: 72 65 70 61 72 65 28 29 20 2a 2f 0a 23 65 6e 64  repare() */.#end
d2f0: 69 66 0a 20 20 48 61 73 68 20 61 46 75 6e 63 3b  if.  Hash aFunc;
d300: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d310: 20 20 20 2f 2a 20 48 61 73 68 20 74 61 62 6c 65     /* Hash table
d320: 20 6f 66 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 66   of connection f
d330: 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a 20 20 48 61  unctions */.  Ha
d340: 73 68 20 61 43 6f 6c 6c 53 65 71 3b 20 20 20 20  sh aCollSeq;    
d350: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41              /* A
d360: 6c 6c 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71  ll collating seq
d370: 75 65 6e 63 65 73 20 2a 2f 0a 20 20 42 75 73 79  uences */.  Busy
d380: 48 61 6e 64 6c 65 72 20 62 75 73 79 48 61 6e 64  Handler busyHand
d390: 6c 65 72 3b 20 20 20 20 20 20 2f 2a 20 42 75 73  ler;      /* Bus
d3a0: 79 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20  y callback */.  
d3b0: 44 62 20 61 44 62 53 74 61 74 69 63 5b 32 5d 3b  Db aDbStatic[2];
d3c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
d3d0: 20 53 74 61 74 69 63 20 73 70 61 63 65 20 66 6f   Static space fo
d3e0: 72 20 74 68 65 20 32 20 64 65 66 61 75 6c 74 20  r the 2 default 
d3f0: 62 61 63 6b 65 6e 64 73 20 2a 2f 0a 20 20 53 61  backends */.  Sa
d400: 76 65 70 6f 69 6e 74 20 2a 70 53 61 76 65 70 6f  vepoint *pSavepo
d410: 69 6e 74 3b 20 20 20 20 20 20 20 20 2f 2a 20 4c  int;        /* L
d420: 69 73 74 20 6f 66 20 61 63 74 69 76 65 20 73 61  ist of active sa
d430: 76 65 70 6f 69 6e 74 73 20 2a 2f 0a 20 20 69 6e  vepoints */.  in
d440: 74 20 62 75 73 79 54 69 6d 65 6f 75 74 3b 20 20  t busyTimeout;  
d450: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 42              /* B
d460: 75 73 79 20 68 61 6e 64 6c 65 72 20 74 69 6d 65  usy handler time
d470: 6f 75 74 2c 20 69 6e 20 6d 73 65 63 20 2a 2f 0a  out, in msec */.
d480: 20 20 69 6e 74 20 6e 53 61 76 65 70 6f 69 6e 74    int nSavepoint
d490: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
d4a0: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6e 6f 6e  /* Number of non
d4b0: 2d 74 72 61 6e 73 61 63 74 69 6f 6e 20 73 61 76  -transaction sav
d4c0: 65 70 6f 69 6e 74 73 20 2a 2f 0a 20 20 69 6e 74  epoints */.  int
d4d0: 20 6e 53 74 61 74 65 6d 65 6e 74 3b 20 20 20 20   nStatement;    
d4e0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
d4f0: 6d 62 65 72 20 6f 66 20 6e 65 73 74 65 64 20 73  mber of nested s
d500: 74 61 74 65 6d 65 6e 74 2d 74 72 61 6e 73 61 63  tatement-transac
d510: 74 69 6f 6e 73 20 20 2a 2f 0a 20 20 69 36 34 20  tions  */.  i64 
d520: 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 3b 20 20  nDeferredCons;  
d530: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 74            /* Net
d540: 20 64 65 66 65 72 72 65 64 20 63 6f 6e 73 74 72   deferred constr
d550: 61 69 6e 74 73 20 74 68 69 73 20 74 72 61 6e 73  aints this trans
d560: 61 63 74 69 6f 6e 2e 20 2a 2f 0a 20 20 69 36 34  action. */.  i64
d570: 20 6e 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e   nDeferredImmCon
d580: 73 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 65  s;         /* Ne
d590: 74 20 64 65 66 65 72 72 65 64 20 69 6d 6d 65 64  t deferred immed
d5a0: 69 61 74 65 20 63 6f 6e 73 74 72 61 69 6e 74 73  iate constraints
d5b0: 20 2a 2f 0a 20 20 69 6e 74 20 2a 70 6e 42 79 74   */.  int *pnByt
d5c0: 65 73 46 72 65 65 64 3b 20 20 20 20 20 20 20 20  esFreed;        
d5d0: 20 20 20 20 2f 2a 20 49 66 20 6e 6f 74 20 4e 55      /* If not NU
d5e0: 4c 4c 2c 20 69 6e 63 72 65 6d 65 6e 74 20 74 68  LL, increment th
d5f0: 69 73 20 69 6e 20 44 62 46 72 65 65 28 29 20 2a  is in DbFree() *
d600: 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
d610: 45 4e 41 42 4c 45 5f 55 4e 4c 4f 43 4b 5f 4e 4f  ENABLE_UNLOCK_NO
d620: 54 49 46 59 0a 20 20 2f 2a 20 54 68 65 20 66 6f  TIFY.  /* The fo
d630: 6c 6c 6f 77 69 6e 67 20 76 61 72 69 61 62 6c 65  llowing variable
d640: 73 20 61 72 65 20 61 6c 6c 20 70 72 6f 74 65 63  s are all protec
d650: 74 65 64 20 62 79 20 74 68 65 20 53 54 41 54 49  ted by the STATI
d660: 43 5f 4d 41 53 54 45 52 0a 20 20 2a 2a 20 6d 75  C_MASTER.  ** mu
d670: 74 65 78 2c 20 6e 6f 74 20 62 79 20 73 71 6c 69  tex, not by sqli
d680: 74 65 33 2e 6d 75 74 65 78 2e 20 54 68 65 79 20  te3.mutex. They 
d690: 61 72 65 20 75 73 65 64 20 62 79 20 63 6f 64 65  are used by code
d6a0: 20 69 6e 20 6e 6f 74 69 66 79 2e 63 2e 0a 20 20   in notify.c..  
d6b0: 2a 2a 0a 20 20 2a 2a 20 57 68 65 6e 20 58 2e 70  **.  ** When X.p
d6c0: 55 6e 6c 6f 63 6b 43 6f 6e 6e 65 63 74 69 6f 6e  UnlockConnection
d6d0: 3d 3d 59 2c 20 74 68 61 74 20 6d 65 61 6e 73 20  ==Y, that means 
d6e0: 74 68 61 74 20 58 20 69 73 20 77 61 69 74 69 6e  that X is waitin
d6f0: 67 20 66 6f 72 20 59 20 74 6f 0a 20 20 2a 2a 20  g for Y to.  ** 
d700: 75 6e 6c 6f 63 6b 20 73 6f 20 74 68 61 74 20 69  unlock so that i
d710: 74 20 63 61 6e 20 70 72 6f 63 65 65 64 2e 0a 20  t can proceed.. 
d720: 20 2a 2a 0a 20 20 2a 2a 20 57 68 65 6e 20 58 2e   **.  ** When X.
d730: 70 42 6c 6f 63 6b 69 6e 67 43 6f 6e 6e 65 63 74  pBlockingConnect
d740: 69 6f 6e 3d 3d 59 2c 20 74 68 61 74 20 6d 65 61  ion==Y, that mea
d750: 6e 73 20 74 68 61 74 20 73 6f 6d 65 74 68 69 6e  ns that somethin
d760: 67 20 74 68 61 74 20 58 20 74 72 69 65 64 0a 20  g that X tried. 
d770: 20 2a 2a 20 74 72 69 65 64 20 74 6f 20 64 6f 20   ** tried to do 
d780: 72 65 63 65 6e 74 6c 79 20 66 61 69 6c 65 64 20  recently failed 
d790: 77 69 74 68 20 61 6e 20 53 51 4c 49 54 45 5f 4c  with an SQLITE_L
d7a0: 4f 43 4b 45 44 20 65 72 72 6f 72 20 64 75 65 20  OCKED error due 
d7b0: 74 6f 20 6c 6f 63 6b 73 0a 20 20 2a 2a 20 68 65  to locks.  ** he
d7c0: 6c 64 20 62 79 20 59 2e 0a 20 20 2a 2f 0a 20 20  ld by Y..  */.  
d7d0: 73 71 6c 69 74 65 33 20 2a 70 42 6c 6f 63 6b 69  sqlite3 *pBlocki
d7e0: 6e 67 43 6f 6e 6e 65 63 74 69 6f 6e 3b 20 2f 2a  ngConnection; /*
d7f0: 20 43 6f 6e 6e 65 63 74 69 6f 6e 20 74 68 61 74   Connection that
d800: 20 63 61 75 73 65 64 20 53 51 4c 49 54 45 5f 4c   caused SQLITE_L
d810: 4f 43 4b 45 44 20 2a 2f 0a 20 20 73 71 6c 69 74  OCKED */.  sqlit
d820: 65 33 20 2a 70 55 6e 6c 6f 63 6b 43 6f 6e 6e 65  e3 *pUnlockConne
d830: 63 74 69 6f 6e 3b 20 20 20 20 20 20 20 20 20 20  ction;          
d840: 20 2f 2a 20 43 6f 6e 6e 65 63 74 69 6f 6e 20 74   /* Connection t
d850: 6f 20 77 61 74 63 68 20 66 6f 72 20 75 6e 6c 6f  o watch for unlo
d860: 63 6b 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 55  ck */.  void *pU
d870: 6e 6c 6f 63 6b 41 72 67 3b 20 20 20 20 20 20 20  nlockArg;       
d880: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
d890: 20 41 72 67 75 6d 65 6e 74 20 74 6f 20 78 55 6e   Argument to xUn
d8a0: 6c 6f 63 6b 4e 6f 74 69 66 79 20 2a 2f 0a 20 20  lockNotify */.  
d8b0: 76 6f 69 64 20 28 2a 78 55 6e 6c 6f 63 6b 4e 6f  void (*xUnlockNo
d8c0: 74 69 66 79 29 28 76 6f 69 64 20 2a 2a 2c 20 69  tify)(void **, i
d8d0: 6e 74 29 3b 20 20 2f 2a 20 55 6e 6c 6f 63 6b 20  nt);  /* Unlock 
d8e0: 6e 6f 74 69 66 79 20 63 61 6c 6c 62 61 63 6b 20  notify callback 
d8f0: 2a 2f 0a 20 20 73 71 6c 69 74 65 33 20 2a 70 4e  */.  sqlite3 *pN
d900: 65 78 74 42 6c 6f 63 6b 65 64 3b 20 20 20 20 20  extBlocked;     
d910: 20 20 20 2f 2a 20 4e 65 78 74 20 69 6e 20 6c 69     /* Next in li
d920: 73 74 20 6f 66 20 61 6c 6c 20 62 6c 6f 63 6b 65  st of all blocke
d930: 64 20 63 6f 6e 6e 65 63 74 69 6f 6e 73 20 2a 2f  d connections */
d940: 0a 23 65 6e 64 69 66 0a 23 69 66 64 65 66 20 53  .#endif.#ifdef S
d950: 51 4c 49 54 45 5f 55 53 45 52 5f 41 55 54 48 45  QLITE_USER_AUTHE
d960: 4e 54 49 43 41 54 49 4f 4e 0a 20 20 73 71 6c 69  NTICATION.  sqli
d970: 74 65 33 5f 75 73 65 72 61 75 74 68 20 61 75 74  te3_userauth aut
d980: 68 3b 20 20 20 20 20 20 20 20 2f 2a 20 55 73 65  h;        /* Use
d990: 72 20 61 75 74 68 65 6e 74 69 63 61 74 69 6f 6e  r authentication
d9a0: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 2a 2f 0a   information */.
d9b0: 23 65 6e 64 69 66 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  #endif.};../*.**
d9c0: 20 41 20 6d 61 63 72 6f 20 74 6f 20 64 69 73 63   A macro to disc
d9d0: 6f 76 65 72 20 74 68 65 20 65 6e 63 6f 64 69 6e  over the encodin
d9e0: 67 20 6f 66 20 61 20 64 61 74 61 62 61 73 65 2e  g of a database.
d9f0: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 43 48 45  .*/.#define SCHE
da00: 4d 41 5f 45 4e 43 28 64 62 29 20 28 28 64 62 29  MA_ENC(db) ((db)
da10: 2d 3e 61 44 62 5b 30 5d 2e 70 53 63 68 65 6d 61  ->aDb[0].pSchema
da20: 2d 3e 65 6e 63 29 0a 23 64 65 66 69 6e 65 20 45  ->enc).#define E
da30: 4e 43 28 64 62 29 20 20 20 20 20 20 20 20 28 28  NC(db)        ((
da40: 64 62 29 2d 3e 65 6e 63 29 0a 0a 2f 2a 0a 2a 2a  db)->enc)../*.**
da50: 20 50 6f 73 73 69 62 6c 65 20 76 61 6c 75 65 73   Possible values
da60: 20 66 6f 72 20 74 68 65 20 73 71 6c 69 74 65 33   for the sqlite3
da70: 2e 66 6c 61 67 73 2e 0a 2a 2a 0a 2a 2a 20 56 61  .flags..**.** Va
da80: 6c 75 65 20 63 6f 6e 73 74 72 61 69 6e 74 73 20  lue constraints 
da90: 28 65 6e 66 6f 72 63 65 64 20 76 69 61 20 61 73  (enforced via as
daa0: 73 65 72 74 28 29 29 3a 0a 2a 2a 20 20 20 20 20  sert()):.**     
dab0: 20 53 51 4c 49 54 45 5f 46 75 6c 6c 46 53 79 6e   SQLITE_FullFSyn
dac0: 63 20 20 20 20 20 3d 3d 20 50 41 47 45 52 5f 46  c     == PAGER_F
dad0: 55 4c 4c 46 53 59 4e 43 0a 2a 2a 20 20 20 20 20  ULLFSYNC.**     
dae0: 20 53 51 4c 49 54 45 5f 43 6b 70 74 46 75 6c 6c   SQLITE_CkptFull
daf0: 46 53 79 6e 63 20 3d 3d 20 50 41 47 45 52 5f 43  FSync == PAGER_C
db00: 4b 50 54 5f 46 55 4c 4c 46 53 59 4e 43 0a 2a 2a  KPT_FULLFSYNC.**
db10: 20 20 20 20 20 20 53 51 4c 49 54 45 5f 43 61 63        SQLITE_Cac
db20: 68 65 53 70 69 6c 6c 20 20 20 20 3d 3d 20 50 41  heSpill    == PA
db30: 47 45 52 5f 43 41 43 48 45 5f 53 50 49 4c 4c 0a  GER_CACHE_SPILL.
db40: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
db50: 45 5f 57 72 69 74 65 53 63 68 65 6d 61 20 20 20  E_WriteSchema   
db60: 20 30 78 30 30 30 30 30 30 30 31 20 20 2f 2a 20   0x00000001  /* 
db70: 4f 4b 20 74 6f 20 75 70 64 61 74 65 20 53 51 4c  OK to update SQL
db80: 49 54 45 5f 4d 41 53 54 45 52 20 2a 2f 0a 23 64  ITE_MASTER */.#d
db90: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4c 65 67  efine SQLITE_Leg
dba0: 61 63 79 46 69 6c 65 46 6d 74 20 20 30 78 30 30  acyFileFmt  0x00
dbb0: 30 30 30 30 30 32 20 20 2f 2a 20 43 72 65 61 74  000002  /* Creat
dbc0: 65 20 6e 65 77 20 64 61 74 61 62 61 73 65 73 20  e new databases 
dbd0: 69 6e 20 66 6f 72 6d 61 74 20 31 20 2a 2f 0a 23  in format 1 */.#
dbe0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 75  define SQLITE_Fu
dbf0: 6c 6c 43 6f 6c 4e 61 6d 65 73 20 20 20 30 78 30  llColNames   0x0
dc00: 30 30 30 30 30 30 34 20 20 2f 2a 20 53 68 6f 77  0000004  /* Show
dc10: 20 66 75 6c 6c 20 63 6f 6c 75 6d 6e 20 6e 61 6d   full column nam
dc20: 65 73 20 6f 6e 20 53 45 4c 45 43 54 20 2a 2f 0a  es on SELECT */.
dc30: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46  #define SQLITE_F
dc40: 75 6c 6c 46 53 79 6e 63 20 20 20 20 20 20 30 78  ullFSync      0x
dc50: 30 30 30 30 30 30 30 38 20 20 2f 2a 20 55 73 65  00000008  /* Use
dc60: 20 66 75 6c 6c 20 66 73 79 6e 63 20 6f 6e 20 74   full fsync on t
dc70: 68 65 20 62 61 63 6b 65 6e 64 20 2a 2f 0a 23 64  he backend */.#d
dc80: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 6b 70  efine SQLITE_Ckp
dc90: 74 46 75 6c 6c 46 53 79 6e 63 20 20 30 78 30 30  tFullFSync  0x00
dca0: 30 30 30 30 31 30 20 20 2f 2a 20 55 73 65 20 66  000010  /* Use f
dcb0: 75 6c 6c 20 66 73 79 6e 63 20 66 6f 72 20 63 68  ull fsync for ch
dcc0: 65 63 6b 70 6f 69 6e 74 20 2a 2f 0a 23 64 65 66  eckpoint */.#def
dcd0: 69 6e 65 20 53 51 4c 49 54 45 5f 43 61 63 68 65  ine SQLITE_Cache
dce0: 53 70 69 6c 6c 20 20 20 20 20 30 78 30 30 30 30  Spill     0x0000
dcf0: 30 30 32 30 20 20 2f 2a 20 4f 4b 20 74 6f 20 73  0020  /* OK to s
dd00: 70 69 6c 6c 20 70 61 67 65 72 20 63 61 63 68 65  pill pager cache
dd10: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
dd20: 54 45 5f 53 68 6f 72 74 43 6f 6c 4e 61 6d 65 73  TE_ShortColNames
dd30: 20 20 30 78 30 30 30 30 30 30 34 30 20 20 2f 2a    0x00000040  /*
dd40: 20 53 68 6f 77 20 73 68 6f 72 74 20 63 6f 6c 75   Show short colu
dd50: 6d 6e 73 20 6e 61 6d 65 73 20 2a 2f 0a 23 64 65  mns names */.#de
dd60: 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 6f 75 6e  fine SQLITE_Coun
dd70: 74 52 6f 77 73 20 20 20 20 20 20 30 78 30 30 30  tRows      0x000
dd80: 30 30 30 38 30 20 20 2f 2a 20 43 6f 75 6e 74 20  00080  /* Count 
dd90: 72 6f 77 73 20 63 68 61 6e 67 65 64 20 62 79 20  rows changed by 
dda0: 49 4e 53 45 52 54 2c 20 2a 2f 0a 20 20 20 20 20  INSERT, */.     
ddb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ddc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ddd0: 20 20 20 20 20 2f 2a 20 20 20 44 45 4c 45 54 45       /*   DELETE
dde0: 2c 20 6f 72 20 55 50 44 41 54 45 20 61 6e 64 20  , or UPDATE and 
ddf0: 72 65 74 75 72 6e 20 2a 2f 0a 20 20 20 20 20 20  return */.      
de00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
de10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
de20: 20 20 20 20 2f 2a 20 20 20 74 68 65 20 63 6f 75      /*   the cou
de30: 6e 74 20 75 73 69 6e 67 20 61 20 63 61 6c 6c 62  nt using a callb
de40: 61 63 6b 2e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ack. */.#define 
de50: 53 51 4c 49 54 45 5f 4e 75 6c 6c 43 61 6c 6c 62  SQLITE_NullCallb
de60: 61 63 6b 20 20 20 30 78 30 30 30 30 30 31 30 30  ack   0x00000100
de70: 20 20 2f 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20    /* Invoke the 
de80: 63 61 6c 6c 62 61 63 6b 20 6f 6e 63 65 20 69 66  callback once if
de90: 20 74 68 65 20 2a 2f 0a 20 20 20 20 20 20 20 20   the */.        
dea0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
deb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dec0: 20 20 2f 2a 20 20 20 72 65 73 75 6c 74 20 73 65    /*   result se
ded0: 74 20 69 73 20 65 6d 70 74 79 20 2a 2f 0a 23 64  t is empty */.#d
dee0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49 67 6e  efine SQLITE_Ign
def0: 6f 72 65 43 68 65 63 6b 73 20 20 20 30 78 30 30  oreChecks   0x00
df00: 30 30 30 32 30 30 20 20 2f 2a 20 44 6f 20 6e 6f  000200  /* Do no
df10: 74 20 65 6e 66 6f 72 63 65 20 63 68 65 63 6b 20  t enforce check 
df20: 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f 0a 23  constraints */.#
df30: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 52 65  define SQLITE_Re
df40: 61 64 55 6e 63 6f 6d 6d 69 74 20 20 20 30 78 30  adUncommit   0x0
df50: 30 30 30 30 34 30 30 20 20 2f 2a 20 52 45 41 44  0000400  /* READ
df60: 20 55 4e 43 4f 4d 4d 49 54 54 45 44 20 69 6e 20   UNCOMMITTED in 
df70: 73 68 61 72 65 64 2d 63 61 63 68 65 20 2a 2f 0a  shared-cache */.
df80: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e  #define SQLITE_N
df90: 6f 43 6b 70 74 4f 6e 43 6c 6f 73 65 20 20 30 78  oCkptOnClose  0x
dfa0: 30 30 30 30 30 38 30 30 20 20 2f 2a 20 4e 6f 20  00000800  /* No 
dfb0: 63 68 65 63 6b 70 6f 69 6e 74 20 6f 6e 20 63 6c  checkpoint on cl
dfc0: 6f 73 65 28 29 2f 44 45 54 41 43 48 20 2a 2f 0a  ose()/DETACH */.
dfd0: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 52  #define SQLITE_R
dfe0: 65 76 65 72 73 65 4f 72 64 65 72 20 20 20 30 78  everseOrder   0x
dff0: 30 30 30 30 31 30 30 30 20 20 2f 2a 20 52 65 76  00001000  /* Rev
e000: 65 72 73 65 20 75 6e 6f 72 64 65 72 65 64 20 53  erse unordered S
e010: 45 4c 45 43 54 73 20 2a 2f 0a 23 64 65 66 69 6e  ELECTs */.#defin
e020: 65 20 53 51 4c 49 54 45 5f 52 65 63 54 72 69 67  e SQLITE_RecTrig
e030: 67 65 72 73 20 20 20 20 30 78 30 30 30 30 32 30  gers    0x000020
e040: 30 30 20 20 2f 2a 20 45 6e 61 62 6c 65 20 72 65  00  /* Enable re
e050: 63 75 72 73 69 76 65 20 74 72 69 67 67 65 72 73  cursive triggers
e060: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
e070: 54 45 5f 46 6f 72 65 69 67 6e 4b 65 79 73 20 20  TE_ForeignKeys  
e080: 20 20 30 78 30 30 30 30 34 30 30 30 20 20 2f 2a    0x00004000  /*
e090: 20 45 6e 66 6f 72 63 65 20 66 6f 72 65 69 67 6e   Enforce foreign
e0a0: 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 73   key constraints
e0b0: 20 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c    */.#define SQL
e0c0: 49 54 45 5f 41 75 74 6f 49 6e 64 65 78 20 20 20  ITE_AutoIndex   
e0d0: 20 20 20 30 78 30 30 30 30 38 30 30 30 20 20 2f     0x00008000  /
e0e0: 2a 20 45 6e 61 62 6c 65 20 61 75 74 6f 6d 61 74  * Enable automat
e0f0: 69 63 20 69 6e 64 65 78 65 73 20 2a 2f 0a 23 64  ic indexes */.#d
e100: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4c 6f 61  efine SQLITE_Loa
e110: 64 45 78 74 65 6e 73 69 6f 6e 20 20 30 78 30 30  dExtension  0x00
e120: 30 31 30 30 30 30 20 20 2f 2a 20 45 6e 61 62 6c  010000  /* Enabl
e130: 65 20 6c 6f 61 64 5f 65 78 74 65 6e 73 69 6f 6e  e load_extension
e140: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
e150: 54 45 5f 4c 6f 61 64 45 78 74 46 75 6e 63 20 20  TE_LoadExtFunc  
e160: 20 20 30 78 30 30 30 32 30 30 30 30 20 20 2f 2a    0x00020000  /*
e170: 20 45 6e 61 62 6c 65 20 6c 6f 61 64 5f 65 78 74   Enable load_ext
e180: 65 6e 73 69 6f 6e 28 29 20 53 51 4c 20 66 75 6e  ension() SQL fun
e190: 63 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  c */.#define SQL
e1a0: 49 54 45 5f 45 6e 61 62 6c 65 54 72 69 67 67 65  ITE_EnableTrigge
e1b0: 72 20 20 30 78 30 30 30 34 30 30 30 30 20 20 2f  r  0x00040000  /
e1c0: 2a 20 54 72 75 65 20 74 6f 20 65 6e 61 62 6c 65  * True to enable
e1d0: 20 74 72 69 67 67 65 72 73 20 2a 2f 0a 23 64 65   triggers */.#de
e1e0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 65 66 65  fine SQLITE_Defe
e1f0: 72 46 4b 73 20 20 20 20 20 20 20 30 78 30 30 30  rFKs       0x000
e200: 38 30 30 30 30 20 20 2f 2a 20 44 65 66 65 72 20  80000  /* Defer 
e210: 61 6c 6c 20 46 4b 20 63 6f 6e 73 74 72 61 69 6e  all FK constrain
e220: 74 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  ts */.#define SQ
e230: 4c 49 54 45 5f 51 75 65 72 79 4f 6e 6c 79 20 20  LITE_QueryOnly  
e240: 20 20 20 20 30 78 30 30 31 30 30 30 30 30 20 20      0x00100000  
e250: 2f 2a 20 44 69 73 61 62 6c 65 20 64 61 74 61 62  /* Disable datab
e260: 61 73 65 20 63 68 61 6e 67 65 73 20 2a 2f 0a 23  ase changes */.#
e270: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 65  define SQLITE_Ce
e280: 6c 6c 53 69 7a 65 43 6b 20 20 20 20 20 30 78 30  llSizeCk     0x0
e290: 30 32 30 30 30 30 30 20 20 2f 2a 20 43 68 65 63  0200000  /* Chec
e2a0: 6b 20 62 74 72 65 65 20 63 65 6c 6c 20 73 69 7a  k btree cell siz
e2b0: 65 73 20 6f 6e 20 6c 6f 61 64 20 2a 2f 0a 23 64  es on load */.#d
e2c0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 74 73  efine SQLITE_Fts
e2d0: 33 54 6f 6b 65 6e 69 7a 65 72 20 20 30 78 30 30  3Tokenizer  0x00
e2e0: 34 30 30 30 30 30 20 20 2f 2a 20 45 6e 61 62 6c  400000  /* Enabl
e2f0: 65 20 66 74 73 33 5f 74 6f 6b 65 6e 69 7a 65 72  e fts3_tokenizer
e300: 28 32 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  (2) */.#define S
e310: 51 4c 49 54 45 5f 45 6e 61 62 6c 65 51 50 53 47  QLITE_EnableQPSG
e320: 20 20 20 20 20 30 78 30 30 38 30 30 30 30 30 20       0x00800000 
e330: 20 2f 2a 20 51 75 65 72 79 20 50 6c 61 6e 6e 65   /* Query Planne
e340: 72 20 53 74 61 62 69 6c 69 74 79 20 47 75 61 72  r Stability Guar
e350: 61 6e 74 65 65 2a 2f 0a 23 64 65 66 69 6e 65 20  antee*/.#define 
e360: 53 51 4c 49 54 45 5f 54 72 69 67 67 65 72 45 51  SQLITE_TriggerEQ
e370: 50 20 20 20 20 20 30 78 30 31 30 30 30 30 30 30  P     0x01000000
e380: 20 20 2f 2a 20 53 68 6f 77 20 74 72 69 67 67 65    /* Show trigge
e390: 72 20 45 58 50 4c 41 49 4e 20 51 55 45 52 59 20  r EXPLAIN QUERY 
e3a0: 50 4c 41 4e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  PLAN */.#define 
e3b0: 53 51 4c 49 54 45 5f 52 65 73 65 74 44 61 74 61  SQLITE_ResetData
e3c0: 62 61 73 65 20 20 30 78 30 32 30 30 30 30 30 30  base  0x02000000
e3d0: 20 20 2f 2a 20 52 65 73 65 74 20 74 68 65 20 64    /* Reset the d
e3e0: 61 74 61 62 61 73 65 20 2a 2f 0a 23 64 65 66 69  atabase */.#defi
e3f0: 6e 65 20 53 51 4c 49 54 45 5f 4c 65 67 61 63 79  ne SQLITE_Legacy
e400: 41 6c 74 65 72 20 20 20 20 30 78 30 34 30 30 30  Alter    0x04000
e410: 30 30 30 20 20 2f 2a 20 4c 65 67 61 63 79 20 41  000  /* Legacy A
e420: 4c 54 45 52 20 54 41 42 4c 45 20 62 65 68 61 76  LTER TABLE behav
e430: 69 6f 75 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20  iour */.#define 
e440: 53 51 4c 49 54 45 5f 4e 6f 53 63 68 65 6d 61 45  SQLITE_NoSchemaE
e450: 72 72 6f 72 20 20 30 78 30 38 30 30 30 30 30 30  rror  0x08000000
e460: 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 72 65 70 6f    /* Do not repo
e470: 72 74 20 73 63 68 65 6d 61 20 70 61 72 73 65 20  rt schema parse 
e480: 65 72 72 6f 72 73 2a 2f 0a 23 64 65 66 69 6e 65  errors*/.#define
e490: 20 53 51 4c 49 54 45 5f 44 65 66 65 6e 73 69 76   SQLITE_Defensiv
e4a0: 65 20 20 20 20 20 20 30 78 31 30 30 30 30 30 30  e      0x1000000
e4b0: 30 20 20 2f 2a 20 49 6e 70 75 74 20 53 51 4c 20  0  /* Input SQL 
e4c0: 69 73 20 6c 69 6b 65 6c 79 20 68 6f 73 74 69 6c  is likely hostil
e4d0: 65 20 2a 2f 0a 0a 2f 2a 20 46 6c 61 67 73 20 75  e */../* Flags u
e4e0: 73 65 64 20 6f 6e 6c 79 20 69 66 20 64 65 62 75  sed only if debu
e4f0: 67 67 69 6e 67 20 2a 2f 0a 23 64 65 66 69 6e 65  gging */.#define
e500: 20 48 49 28 58 29 20 20 28 28 75 36 34 29 28 58   HI(X)  ((u64)(X
e510: 29 3c 3c 33 32 29 0a 23 69 66 64 65 66 20 53 51  )<<32).#ifdef SQ
e520: 4c 49 54 45 5f 44 45 42 55 47 0a 23 64 65 66 69  LITE_DEBUG.#defi
e530: 6e 65 20 53 51 4c 49 54 45 5f 53 71 6c 54 72 61  ne SQLITE_SqlTra
e540: 63 65 20 20 20 20 20 20 20 48 49 28 30 78 30 30  ce       HI(0x00
e550: 30 31 29 20 20 2f 2a 20 44 65 62 75 67 20 70 72  01)  /* Debug pr
e560: 69 6e 74 20 53 51 4c 20 61 73 20 69 74 20 65 78  int SQL as it ex
e570: 65 63 75 74 65 73 20 2a 2f 0a 23 64 65 66 69 6e  ecutes */.#defin
e580: 65 20 53 51 4c 49 54 45 5f 56 64 62 65 4c 69 73  e SQLITE_VdbeLis
e590: 74 69 6e 67 20 20 20 20 48 49 28 30 78 30 30 30  ting    HI(0x000
e5a0: 32 29 20 20 2f 2a 20 44 65 62 75 67 20 6c 69 73  2)  /* Debug lis
e5b0: 74 69 6e 67 73 20 6f 66 20 56 44 42 45 20 70 72  tings of VDBE pr
e5c0: 6f 67 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ogs */.#define S
e5d0: 51 4c 49 54 45 5f 56 64 62 65 54 72 61 63 65 20  QLITE_VdbeTrace 
e5e0: 20 20 20 20 20 48 49 28 30 78 30 30 30 34 29 20       HI(0x0004) 
e5f0: 20 2f 2a 20 54 72 75 65 20 74 6f 20 74 72 61 63   /* True to trac
e600: 65 20 56 44 42 45 20 65 78 65 63 75 74 69 6f 6e  e VDBE execution
e610: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
e620: 54 45 5f 56 64 62 65 41 64 64 6f 70 54 72 61 63  TE_VdbeAddopTrac
e630: 65 20 48 49 28 30 78 30 30 30 38 29 20 20 2f 2a  e HI(0x0008)  /*
e640: 20 54 72 61 63 65 20 73 71 6c 69 74 65 33 56 64   Trace sqlite3Vd
e650: 62 65 41 64 64 4f 70 28 29 20 63 61 6c 6c 73 20  beAddOp() calls 
e660: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
e670: 45 5f 56 64 62 65 45 51 50 20 20 20 20 20 20 20  E_VdbeEQP       
e680: 20 48 49 28 30 78 30 30 31 30 29 20 20 2f 2a 20   HI(0x0010)  /* 
e690: 44 65 62 75 67 20 45 58 50 4c 41 49 4e 20 51 55  Debug EXPLAIN QU
e6a0: 45 52 59 20 50 4c 41 4e 20 2a 2f 0a 23 64 65 66  ERY PLAN */.#def
e6b0: 69 6e 65 20 53 51 4c 49 54 45 5f 50 61 72 73 65  ine SQLITE_Parse
e6c0: 72 54 72 61 63 65 20 20 20 20 48 49 28 30 78 30  rTrace    HI(0x0
e6d0: 30 32 30 29 20 20 2f 2a 20 50 52 41 47 4d 41 20  020)  /* PRAGMA 
e6e0: 70 61 72 73 65 72 5f 74 72 61 63 65 3d 4f 4e 20  parser_trace=ON 
e6f0: 2a 2f 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  */.#endif../*.**
e700: 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20   Allowed values 
e710: 66 6f 72 20 73 71 6c 69 74 65 33 2e 6d 44 62 46  for sqlite3.mDbF
e720: 6c 61 67 73 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  lags.*/.#define 
e730: 44 42 46 4c 41 47 5f 53 63 68 65 6d 61 43 68 61  DBFLAG_SchemaCha
e740: 6e 67 65 20 20 20 30 78 30 30 30 31 20 20 2f 2a  nge   0x0001  /*
e750: 20 55 6e 63 6f 6d 6d 69 74 74 65 64 20 48 61 73   Uncommitted Has
e760: 68 20 74 61 62 6c 65 20 63 68 61 6e 67 65 73 20  h table changes 
e770: 2a 2f 0a 23 64 65 66 69 6e 65 20 44 42 46 4c 41  */.#define DBFLA
e780: 47 5f 50 72 65 66 65 72 42 75 69 6c 74 69 6e 20  G_PreferBuiltin 
e790: 20 30 78 30 30 30 32 20 20 2f 2a 20 50 72 65 66   0x0002  /* Pref
e7a0: 65 72 65 6e 63 65 20 74 6f 20 62 75 69 6c 74 2d  erence to built-
e7b0: 69 6e 20 66 75 6e 63 73 20 2a 2f 0a 23 64 65 66  in funcs */.#def
e7c0: 69 6e 65 20 44 42 46 4c 41 47 5f 56 61 63 75 75  ine DBFLAG_Vacuu
e7d0: 6d 20 20 20 20 20 20 20 20 20 30 78 30 30 30 34  m         0x0004
e7e0: 20 20 2f 2a 20 43 75 72 72 65 6e 74 6c 79 20 69    /* Currently i
e7f0: 6e 20 61 20 56 41 43 55 55 4d 20 2a 2f 0a 23 64  n a VACUUM */.#d
e800: 65 66 69 6e 65 20 44 42 46 4c 41 47 5f 53 63 68  efine DBFLAG_Sch
e810: 65 6d 61 4b 6e 6f 77 6e 4f 6b 20 20 30 78 30 30  emaKnownOk  0x00
e820: 30 38 20 20 2f 2a 20 53 63 68 65 6d 61 20 69 73  08  /* Schema is
e830: 20 6b 6e 6f 77 6e 20 74 6f 20 62 65 20 76 61 6c   known to be val
e840: 69 64 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 42 69 74  id */../*.** Bit
e850: 73 20 6f 66 20 74 68 65 20 73 71 6c 69 74 65 33  s of the sqlite3
e860: 2e 64 62 4f 70 74 46 6c 61 67 73 20 66 69 65 6c  .dbOptFlags fiel
e870: 64 20 74 68 61 74 20 61 72 65 20 75 73 65 64 20  d that are used 
e880: 62 79 20 74 68 65 0a 2a 2a 20 73 71 6c 69 74 65  by the.** sqlite
e890: 33 5f 74 65 73 74 5f 63 6f 6e 74 72 6f 6c 28 53  3_test_control(S
e8a0: 51 4c 49 54 45 5f 54 45 53 54 43 54 52 4c 5f 4f  QLITE_TESTCTRL_O
e8b0: 50 54 49 4d 49 5a 41 54 49 4f 4e 53 2c 2e 2e 2e  PTIMIZATIONS,...
e8c0: 29 20 69 6e 74 65 72 66 61 63 65 20 74 6f 0a 2a  ) interface to.*
e8d0: 2a 20 73 65 6c 65 63 74 69 76 65 6c 79 20 64 69  * selectively di
e8e0: 73 61 62 6c 65 20 76 61 72 69 6f 75 73 20 6f 70  sable various op
e8f0: 74 69 6d 69 7a 61 74 69 6f 6e 73 2e 0a 2a 2f 0a  timizations..*/.
e900: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 51  #define SQLITE_Q
e910: 75 65 72 79 46 6c 61 74 74 65 6e 65 72 20 30 78  ueryFlattener 0x
e920: 30 30 30 31 20 20 20 2f 2a 20 51 75 65 72 79 20  0001   /* Query 
e930: 66 6c 61 74 74 65 6e 69 6e 67 20 2a 2f 0a 20 20  flattening */.  
e940: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e950: 20 20 20 20 20 20 20 20 2f 2a 20 20 30 78 30 30          /*  0x00
e960: 30 32 20 20 20 61 76 61 69 6c 61 62 6c 65 20 66  02   available f
e970: 6f 72 20 72 65 75 73 65 20 2a 2f 0a 23 64 65 66  or reuse */.#def
e980: 69 6e 65 20 53 51 4c 49 54 45 5f 47 72 6f 75 70  ine SQLITE_Group
e990: 42 79 4f 72 64 65 72 20 20 20 30 78 30 30 30 34  ByOrder   0x0004
e9a0: 20 20 20 2f 2a 20 47 52 4f 55 50 42 59 20 63 6f     /* GROUPBY co
e9b0: 76 65 72 20 6f 66 20 4f 52 44 45 52 42 59 20 2a  ver of ORDERBY *
e9c0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
e9d0: 5f 46 61 63 74 6f 72 4f 75 74 43 6f 6e 73 74 20  _FactorOutConst 
e9e0: 30 78 30 30 30 38 20 20 20 2f 2a 20 43 6f 6e 73  0x0008   /* Cons
e9f0: 74 61 6e 74 20 66 61 63 74 6f 72 69 6e 67 20 2a  tant factoring *
ea00: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
ea10: 5f 44 69 73 74 69 6e 63 74 4f 70 74 20 20 20 20  _DistinctOpt    
ea20: 30 78 30 30 31 30 20 20 20 2f 2a 20 44 49 53 54  0x0010   /* DIST
ea30: 49 4e 43 54 20 75 73 69 6e 67 20 69 6e 64 65 78  INCT using index
ea40: 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  es */.#define SQ
ea50: 4c 49 54 45 5f 43 6f 76 65 72 49 64 78 53 63 61  LITE_CoverIdxSca
ea60: 6e 20 20 20 30 78 30 30 32 30 20 20 20 2f 2a 20  n   0x0020   /* 
ea70: 43 6f 76 65 72 69 6e 67 20 69 6e 64 65 78 20 73  Covering index s
ea80: 63 61 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  cans */.#define 
ea90: 53 51 4c 49 54 45 5f 4f 72 64 65 72 42 79 49 64  SQLITE_OrderById
eaa0: 78 4a 6f 69 6e 20 30 78 30 30 34 30 20 20 20 2f  xJoin 0x0040   /
eab0: 2a 20 4f 52 44 45 52 20 42 59 20 6f 66 20 6a 6f  * ORDER BY of jo
eac0: 69 6e 73 20 76 69 61 20 69 6e 64 65 78 20 2a 2f  ins via index */
ead0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
eae0: 54 72 61 6e 73 69 74 69 76 65 20 20 20 20 20 30  Transitive     0
eaf0: 78 30 30 38 30 20 20 20 2f 2a 20 54 72 61 6e 73  x0080   /* Trans
eb00: 69 74 69 76 65 20 63 6f 6e 73 74 72 61 69 6e 74  itive constraint
eb10: 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  s */.#define SQL
eb20: 49 54 45 5f 4f 6d 69 74 4e 6f 6f 70 4a 6f 69 6e  ITE_OmitNoopJoin
eb30: 20 20 20 30 78 30 31 30 30 20 20 20 2f 2a 20 4f     0x0100   /* O
eb40: 6d 69 74 20 75 6e 75 73 65 64 20 74 61 62 6c 65  mit unused table
eb50: 73 20 69 6e 20 6a 6f 69 6e 73 20 2a 2f 0a 23 64  s in joins */.#d
eb60: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 6f 75  efine SQLITE_Cou
eb70: 6e 74 4f 66 56 69 65 77 20 20 20 20 30 78 30 32  ntOfView    0x02
eb80: 30 30 20 20 20 2f 2a 20 54 68 65 20 63 6f 75 6e  00   /* The coun
eb90: 74 2d 6f 66 2d 76 69 65 77 20 6f 70 74 69 6d 69  t-of-view optimi
eba0: 7a 61 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e  zation */.#defin
ebb0: 65 20 53 51 4c 49 54 45 5f 43 75 72 73 6f 72 48  e SQLITE_CursorH
ebc0: 69 6e 74 73 20 20 20 20 30 78 30 34 30 30 20 20  ints    0x0400  
ebd0: 20 2f 2a 20 41 64 64 20 4f 50 5f 43 75 72 73 6f   /* Add OP_Curso
ebe0: 72 48 69 6e 74 20 6f 70 63 6f 64 65 73 20 2a 2f  rHint opcodes */
ebf0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
ec00: 53 74 61 74 33 34 20 20 20 20 20 20 20 20 20 30  Stat34         0
ec10: 78 30 38 30 30 20 20 20 2f 2a 20 55 73 65 20 53  x0800   /* Use S
ec20: 54 41 54 33 20 6f 72 20 53 54 41 54 34 20 64 61  TAT3 or STAT4 da
ec30: 74 61 20 2a 2f 0a 20 20 20 2f 2a 20 54 48 33 20  ta */.   /* TH3 
ec40: 65 78 70 65 63 74 73 20 74 68 65 20 53 74 61 74  expects the Stat
ec50: 33 34 20 20 5e 5e 5e 5e 5e 5e 20 76 61 6c 75 65  34  ^^^^^^ value
ec60: 20 74 6f 20 62 65 20 30 78 30 38 30 30 2e 20 20   to be 0x0800.  
ec70: 44 6f 6e 27 74 20 63 68 61 6e 67 65 20 69 74 20  Don't change it 
ec80: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
ec90: 45 5f 50 75 73 68 44 6f 77 6e 20 20 20 20 20 20  E_PushDown      
eca0: 20 30 78 31 30 30 30 20 20 20 2f 2a 20 54 68 65   0x1000   /* The
ecb0: 20 70 75 73 68 2d 64 6f 77 6e 20 6f 70 74 69 6d   push-down optim
ecc0: 69 7a 61 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69  ization */.#defi
ecd0: 6e 65 20 53 51 4c 49 54 45 5f 53 69 6d 70 6c 69  ne SQLITE_Simpli
ece0: 66 79 4a 6f 69 6e 20 20 20 30 78 32 30 30 30 20  fyJoin   0x2000 
ecf0: 20 20 2f 2a 20 43 6f 6e 76 65 72 74 20 4c 45 46    /* Convert LEF
ed00: 54 20 4a 4f 49 4e 20 74 6f 20 4a 4f 49 4e 20 2a  T JOIN to JOIN *
ed10: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
ed20: 5f 53 6b 69 70 53 63 61 6e 20 20 20 20 20 20 20  _SkipScan       
ed30: 30 78 34 30 30 30 20 20 20 2f 2a 20 53 6b 69 70  0x4000   /* Skip
ed40: 2d 73 63 61 6e 73 20 2a 2f 0a 23 64 65 66 69 6e  -scans */.#defin
ed50: 65 20 53 51 4c 49 54 45 5f 50 72 6f 70 61 67 61  e SQLITE_Propaga
ed60: 74 65 43 6f 6e 73 74 20 30 78 38 30 30 30 20 20  teConst 0x8000  
ed70: 20 2f 2a 20 54 68 65 20 63 6f 6e 73 74 61 6e 74   /* The constant
ed80: 20 70 72 6f 70 61 67 61 74 69 6f 6e 20 6f 70 74   propagation opt
ed90: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
eda0: 54 45 5f 41 6c 6c 4f 70 74 73 20 20 20 20 20 20  TE_AllOpts      
edb0: 20 20 30 78 66 66 66 66 20 20 20 2f 2a 20 41 6c    0xffff   /* Al
edc0: 6c 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73 20  l optimizations 
edd0: 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 4d 61 63 72 6f 73  */../*.** Macros
ede0: 20 66 6f 72 20 74 65 73 74 69 6e 67 20 77 68 65   for testing whe
edf0: 74 68 65 72 20 6f 72 20 6e 6f 74 20 6f 70 74 69  ther or not opti
ee00: 6d 69 7a 61 74 69 6f 6e 73 20 61 72 65 20 65 6e  mizations are en
ee10: 61 62 6c 65 64 20 6f 72 20 64 69 73 61 62 6c 65  abled or disable
ee20: 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 70  d..*/.#define Op
ee30: 74 69 6d 69 7a 61 74 69 6f 6e 44 69 73 61 62 6c  timizationDisabl
ee40: 65 64 28 64 62 2c 20 6d 61 73 6b 29 20 20 28 28  ed(db, mask)  ((
ee50: 28 64 62 29 2d 3e 64 62 4f 70 74 46 6c 61 67 73  (db)->dbOptFlags
ee60: 26 28 6d 61 73 6b 29 29 21 3d 30 29 0a 23 64 65  &(mask))!=0).#de
ee70: 66 69 6e 65 20 4f 70 74 69 6d 69 7a 61 74 69 6f  fine Optimizatio
ee80: 6e 45 6e 61 62 6c 65 64 28 64 62 2c 20 6d 61 73  nEnabled(db, mas
ee90: 6b 29 20 20 20 28 28 28 64 62 29 2d 3e 64 62 4f  k)   (((db)->dbO
eea0: 70 74 46 6c 61 67 73 26 28 6d 61 73 6b 29 29 3d  ptFlags&(mask))=
eeb0: 3d 30 29 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72  =0)../*.** Retur
eec0: 6e 20 74 72 75 65 20 69 66 20 69 74 20 4f 4b 20  n true if it OK 
eed0: 74 6f 20 66 61 63 74 6f 72 20 63 6f 6e 73 74 61  to factor consta
eee0: 6e 74 20 65 78 70 72 65 73 73 69 6f 6e 73 20 69  nt expressions i
eef0: 6e 74 6f 20 74 68 65 20 69 6e 69 74 69 61 6c 69  nto the initiali
ef00: 7a 61 74 69 6f 6e 0a 2a 2a 20 63 6f 64 65 2e 20  zation.** code. 
ef10: 54 68 65 20 61 72 67 75 6d 65 6e 74 20 69 73 20  The argument is 
ef20: 61 20 50 61 72 73 65 20 6f 62 6a 65 63 74 20 66  a Parse object f
ef30: 6f 72 20 74 68 65 20 63 6f 64 65 20 67 65 6e 65  or the code gene
ef40: 72 61 74 6f 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e  rator..*/.#defin
ef50: 65 20 43 6f 6e 73 74 46 61 63 74 6f 72 4f 6b 28  e ConstFactorOk(
ef60: 50 29 20 28 28 50 29 2d 3e 6f 6b 43 6f 6e 73 74  P) ((P)->okConst
ef70: 46 61 63 74 6f 72 29 0a 0a 2f 2a 0a 2a 2a 20 50  Factor)../*.** P
ef80: 6f 73 73 69 62 6c 65 20 76 61 6c 75 65 73 20 66  ossible values f
ef90: 6f 72 20 74 68 65 20 73 71 6c 69 74 65 2e 6d 61  or the sqlite.ma
efa0: 67 69 63 20 66 69 65 6c 64 2e 0a 2a 2a 20 54 68  gic field..** Th
efb0: 65 20 6e 75 6d 62 65 72 73 20 61 72 65 20 6f 62  e numbers are ob
efc0: 74 61 69 6e 65 64 20 61 74 20 72 61 6e 64 6f 6d  tained at random
efd0: 20 61 6e 64 20 68 61 76 65 20 6e 6f 20 73 70 65   and have no spe
efe0: 63 69 61 6c 20 6d 65 61 6e 69 6e 67 2c 20 6f 74  cial meaning, ot
eff0: 68 65 72 0a 2a 2a 20 74 68 61 6e 20 62 65 69 6e  her.** than bein
f000: 67 20 64 69 73 74 69 6e 63 74 20 66 72 6f 6d 20  g distinct from 
f010: 6f 6e 65 20 61 6e 6f 74 68 65 72 2e 0a 2a 2f 0a  one another..*/.
f020: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d  #define SQLITE_M
f030: 41 47 49 43 5f 4f 50 45 4e 20 20 20 20 20 30 78  AGIC_OPEN     0x
f040: 61 30 32 39 61 36 39 37 20 20 2f 2a 20 44 61 74  a029a697  /* Dat
f050: 61 62 61 73 65 20 69 73 20 6f 70 65 6e 20 2a 2f  abase is open */
f060: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
f070: 4d 41 47 49 43 5f 43 4c 4f 53 45 44 20 20 20 30  MAGIC_CLOSED   0
f080: 78 39 66 33 63 32 64 33 33 20 20 2f 2a 20 44 61  x9f3c2d33  /* Da
f090: 74 61 62 61 73 65 20 69 73 20 63 6c 6f 73 65 64  tabase is closed
f0a0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
f0b0: 54 45 5f 4d 41 47 49 43 5f 53 49 43 4b 20 20 20  TE_MAGIC_SICK   
f0c0: 20 20 30 78 34 62 37 37 31 32 39 30 20 20 2f 2a    0x4b771290  /*
f0d0: 20 45 72 72 6f 72 20 61 6e 64 20 61 77 61 69 74   Error and await
f0e0: 69 6e 67 20 63 6c 6f 73 65 20 2a 2f 0a 23 64 65  ing close */.#de
f0f0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47 49  fine SQLITE_MAGI
f100: 43 5f 42 55 53 59 20 20 20 20 20 30 78 66 30 33  C_BUSY     0xf03
f110: 62 37 39 30 36 20 20 2f 2a 20 44 61 74 61 62 61  b7906  /* Databa
f120: 73 65 20 63 75 72 72 65 6e 74 6c 79 20 69 6e 20  se currently in 
f130: 75 73 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  use */.#define S
f140: 51 4c 49 54 45 5f 4d 41 47 49 43 5f 45 52 52 4f  QLITE_MAGIC_ERRO
f150: 52 20 20 20 20 30 78 62 35 33 35 37 39 33 30 20  R    0xb5357930 
f160: 20 2f 2a 20 41 6e 20 53 51 4c 49 54 45 5f 4d 49   /* An SQLITE_MI
f170: 53 55 53 45 20 65 72 72 6f 72 20 6f 63 63 75 72  SUSE error occur
f180: 72 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  red */.#define S
f190: 51 4c 49 54 45 5f 4d 41 47 49 43 5f 5a 4f 4d 42  QLITE_MAGIC_ZOMB
f1a0: 49 45 20 20 20 30 78 36 34 63 66 66 63 37 66 20  IE   0x64cffc7f 
f1b0: 20 2f 2a 20 43 6c 6f 73 65 20 77 69 74 68 20 6c   /* Close with l
f1c0: 61 73 74 20 73 74 61 74 65 6d 65 6e 74 20 63 6c  ast statement cl
f1d0: 6f 73 65 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 45 61  ose */../*.** Ea
f1e0: 63 68 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 20  ch SQL function 
f1f0: 69 73 20 64 65 66 69 6e 65 64 20 62 79 20 61 6e  is defined by an
f200: 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65   instance of the
f210: 20 66 6f 6c 6c 6f 77 69 6e 67 0a 2a 2a 20 73 74   following.** st
f220: 72 75 63 74 75 72 65 2e 20 20 46 6f 72 20 67 6c  ructure.  For gl
f230: 6f 62 61 6c 20 62 75 69 6c 74 2d 69 6e 20 66 75  obal built-in fu
f240: 6e 63 74 69 6f 6e 73 20 28 65 78 3a 20 73 75 62  nctions (ex: sub
f250: 73 74 72 28 29 2c 20 6d 61 78 28 29 2c 20 63 6f  str(), max(), co
f260: 75 6e 74 28 29 29 0a 2a 2a 20 61 20 70 6f 69 6e  unt()).** a poin
f270: 74 65 72 20 74 6f 20 74 68 69 73 20 73 74 72 75  ter to this stru
f280: 63 74 75 72 65 20 69 73 20 68 65 6c 64 20 69 6e  cture is held in
f290: 20 74 68 65 20 73 71 6c 69 74 65 33 42 75 69 6c   the sqlite3Buil
f2a0: 74 69 6e 46 75 6e 63 74 69 6f 6e 73 20 6f 62 6a  tinFunctions obj
f2b0: 65 63 74 2e 0a 2a 2a 20 46 6f 72 20 70 65 72 2d  ect..** For per-
f2c0: 63 6f 6e 6e 65 63 74 69 6f 6e 20 61 70 70 6c 69  connection appli
f2d0: 63 61 74 69 6f 6e 2d 64 65 66 69 6e 65 64 20 66  cation-defined f
f2e0: 75 6e 63 74 69 6f 6e 73 2c 20 61 20 70 6f 69 6e  unctions, a poin
f2f0: 74 65 72 20 74 6f 20 74 68 69 73 0a 2a 2a 20 73  ter to this.** s
f300: 74 72 75 63 74 75 72 65 20 69 73 20 68 65 6c 64  tructure is held
f310: 20 69 6e 20 74 68 65 20 64 62 2d 3e 61 48 61 73   in the db->aHas
f320: 68 20 68 61 73 68 20 74 61 62 6c 65 2e 0a 2a 2a  h hash table..**
f330: 0a 2a 2a 20 54 68 65 20 75 2e 70 48 61 73 68 20  .** The u.pHash 
f340: 66 69 65 6c 64 20 69 73 20 75 73 65 64 20 62 79  field is used by
f350: 20 74 68 65 20 67 6c 6f 62 61 6c 20 62 75 69 6c   the global buil
f360: 74 2d 69 6e 73 2e 20 20 54 68 65 20 75 2e 70 44  t-ins.  The u.pD
f370: 65 73 74 72 75 63 74 6f 72 0a 2a 2a 20 66 69 65  estructor.** fie
f380: 6c 64 20 69 73 20 75 73 65 64 20 62 79 20 70 65  ld is used by pe
f390: 72 2d 63 6f 6e 6e 65 63 74 69 6f 6e 20 61 70 70  r-connection app
f3a0: 2d 64 65 66 20 66 75 6e 63 74 69 6f 6e 73 2e 0a  -def functions..
f3b0: 2a 2f 0a 73 74 72 75 63 74 20 46 75 6e 63 44 65  */.struct FuncDe
f3c0: 66 20 7b 0a 20 20 69 38 20 6e 41 72 67 3b 20 20  f {.  i8 nArg;  
f3d0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
f3e0: 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74  mber of argument
f3f0: 73 2e 20 20 2d 31 20 6d 65 61 6e 73 20 75 6e 6c  s.  -1 means unl
f400: 69 6d 69 74 65 64 20 2a 2f 0a 20 20 75 33 32 20  imited */.  u32 
f410: 66 75 6e 63 46 6c 61 67 73 3b 20 20 20 20 20 20  funcFlags;      
f420: 20 2f 2a 20 53 6f 6d 65 20 63 6f 6d 62 69 6e 61   /* Some combina
f430: 74 69 6f 6e 20 6f 66 20 53 51 4c 49 54 45 5f 46  tion of SQLITE_F
f440: 55 4e 43 5f 2a 20 2a 2f 0a 20 20 76 6f 69 64 20  UNC_* */.  void 
f450: 2a 70 55 73 65 72 44 61 74 61 3b 20 20 20 20 20  *pUserData;     
f460: 2f 2a 20 55 73 65 72 20 64 61 74 61 20 70 61 72  /* User data par
f470: 61 6d 65 74 65 72 20 2a 2f 0a 20 20 46 75 6e 63  ameter */.  Func
f480: 44 65 66 20 2a 70 4e 65 78 74 3b 20 20 20 20 20  Def *pNext;     
f490: 20 2f 2a 20 4e 65 78 74 20 66 75 6e 63 74 69 6f   /* Next functio
f4a0: 6e 20 77 69 74 68 20 73 61 6d 65 20 6e 61 6d 65  n with same name
f4b0: 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 53 46   */.  void (*xSF
f4c0: 75 6e 63 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e  unc)(sqlite3_con
f4d0: 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65  text*,int,sqlite
f4e0: 33 5f 76 61 6c 75 65 2a 2a 29 3b 20 2f 2a 20 66  3_value**); /* f
f4f0: 75 6e 63 20 6f 72 20 61 67 67 2d 73 74 65 70 20  unc or agg-step 
f500: 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 46 69 6e  */.  void (*xFin
f510: 61 6c 69 7a 65 29 28 73 71 6c 69 74 65 33 5f 63  alize)(sqlite3_c
f520: 6f 6e 74 65 78 74 2a 29 3b 20 20 20 20 20 20 20  ontext*);       
f530: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 67             /* Ag
f540: 67 20 66 69 6e 61 6c 69 7a 65 72 20 2a 2f 0a 20  g finalizer */. 
f550: 20 76 6f 69 64 20 28 2a 78 56 61 6c 75 65 29 28   void (*xValue)(
f560: 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a  sqlite3_context*
f570: 29 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  );              
f580: 20 20 20 20 20 20 20 2f 2a 20 43 75 72 72 65 6e         /* Curren
f590: 74 20 61 67 67 20 76 61 6c 75 65 20 2a 2f 0a 20  t agg value */. 
f5a0: 20 76 6f 69 64 20 28 2a 78 49 6e 76 65 72 73 65   void (*xInverse
f5b0: 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78  )(sqlite3_contex
f5c0: 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76  t*,int,sqlite3_v
f5d0: 61 6c 75 65 2a 2a 29 3b 20 2f 2a 20 69 6e 76 65  alue**); /* inve
f5e0: 72 73 65 20 61 67 67 2d 73 74 65 70 20 2a 2f 0a  rse agg-step */.
f5f0: 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4e    const char *zN
f600: 61 6d 65 3b 20 20 20 2f 2a 20 53 51 4c 20 6e 61  ame;   /* SQL na
f610: 6d 65 20 6f 66 20 74 68 65 20 66 75 6e 63 74 69  me of the functi
f620: 6f 6e 2e 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b  on. */.  union {
f630: 0a 20 20 20 20 46 75 6e 63 44 65 66 20 2a 70 48  .    FuncDef *pH
f640: 61 73 68 3b 20 20 20 20 20 20 2f 2a 20 4e 65 78  ash;      /* Nex
f650: 74 20 77 69 74 68 20 61 20 64 69 66 66 65 72 65  t with a differe
f660: 6e 74 20 6e 61 6d 65 20 62 75 74 20 74 68 65 20  nt name but the 
f670: 73 61 6d 65 20 68 61 73 68 20 2a 2f 0a 20 20 20  same hash */.   
f680: 20 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72 20   FuncDestructor 
f690: 2a 70 44 65 73 74 72 75 63 74 6f 72 3b 20 20 20  *pDestructor;   
f6a0: 2f 2a 20 52 65 66 65 72 65 6e 63 65 20 63 6f 75  /* Reference cou
f6b0: 6e 74 65 64 20 64 65 73 74 72 75 63 74 6f 72 20  nted destructor 
f6c0: 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 7d 20  function */.  } 
f6d0: 75 3b 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 69  u;.};../*.** Thi
f6e0: 73 20 73 74 72 75 63 74 75 72 65 20 65 6e 63 61  s structure enca
f6f0: 70 73 75 6c 61 74 65 73 20 61 20 75 73 65 72 2d  psulates a user-
f700: 66 75 6e 63 74 69 6f 6e 20 64 65 73 74 72 75 63  function destruc
f710: 74 6f 72 20 63 61 6c 6c 62 61 63 6b 20 28 61 73  tor callback (as
f720: 0a 2a 2a 20 63 6f 6e 66 69 67 75 72 65 64 20 75  .** configured u
f730: 73 69 6e 67 20 63 72 65 61 74 65 5f 66 75 6e 63  sing create_func
f740: 74 69 6f 6e 5f 76 32 28 29 29 20 61 6e 64 20 61  tion_v2()) and a
f750: 20 72 65 66 65 72 65 6e 63 65 20 63 6f 75 6e 74   reference count
f760: 65 72 2e 20 57 68 65 6e 0a 2a 2a 20 63 72 65 61  er. When.** crea
f770: 74 65 5f 66 75 6e 63 74 69 6f 6e 5f 76 32 28 29  te_function_v2()
f780: 20 69 73 20 63 61 6c 6c 65 64 20 74 6f 20 63 72   is called to cr
f790: 65 61 74 65 20 61 20 66 75 6e 63 74 69 6f 6e 20  eate a function 
f7a0: 77 69 74 68 20 61 20 64 65 73 74 72 75 63 74 6f  with a destructo
f7b0: 72 2c 0a 2a 2a 20 61 20 73 69 6e 67 6c 65 20 6f  r,.** a single o
f7c0: 62 6a 65 63 74 20 6f 66 20 74 68 69 73 20 74 79  bject of this ty
f7d0: 70 65 20 69 73 20 61 6c 6c 6f 63 61 74 65 64 2e  pe is allocated.
f7e0: 20 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72 2e   FuncDestructor.
f7f0: 6e 52 65 66 20 69 73 20 73 65 74 20 74 6f 0a 2a  nRef is set to.*
f800: 2a 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  * the number of 
f810: 46 75 6e 63 44 65 66 20 6f 62 6a 65 63 74 73 20  FuncDef objects 
f820: 63 72 65 61 74 65 64 20 28 65 69 74 68 65 72 20  created (either 
f830: 31 20 6f 72 20 33 2c 20 64 65 70 65 6e 64 69 6e  1 or 3, dependin
f840: 67 20 6f 6e 20 77 68 65 74 68 65 72 0a 2a 2a 20  g on whether.** 
f850: 6f 72 20 6e 6f 74 20 74 68 65 20 73 70 65 63 69  or not the speci
f860: 66 69 65 64 20 65 6e 63 6f 64 69 6e 67 20 69 73  fied encoding is
f870: 20 53 51 4c 49 54 45 5f 41 4e 59 29 2e 20 54 68   SQLITE_ANY). Th
f880: 65 20 46 75 6e 63 44 65 66 2e 70 44 65 73 74 72  e FuncDef.pDestr
f890: 75 63 74 6f 72 0a 2a 2a 20 6d 65 6d 62 65 72 20  uctor.** member 
f8a0: 6f 66 20 65 61 63 68 20 6f 66 20 74 68 65 20 6e  of each of the n
f8b0: 65 77 20 46 75 6e 63 44 65 66 20 6f 62 6a 65 63  ew FuncDef objec
f8c0: 74 73 20 69 73 20 73 65 74 20 74 6f 20 70 6f 69  ts is set to poi
f8d0: 6e 74 20 74 6f 20 74 68 65 20 61 6c 6c 6f 63 61  nt to the alloca
f8e0: 74 65 64 0a 2a 2a 20 46 75 6e 63 44 65 73 74 72  ted.** FuncDestr
f8f0: 75 63 74 6f 72 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  uctor..**.** The
f900: 72 65 61 66 74 65 72 2c 20 77 68 65 6e 20 6f 6e  reafter, when on
f910: 65 20 6f 66 20 74 68 65 20 46 75 6e 63 44 65 66  e of the FuncDef
f920: 20 6f 62 6a 65 63 74 73 20 69 73 20 64 65 6c 65   objects is dele
f930: 74 65 64 2c 20 74 68 65 20 72 65 66 65 72 65 6e  ted, the referen
f940: 63 65 0a 2a 2a 20 63 6f 75 6e 74 20 6f 6e 20 74  ce.** count on t
f950: 68 69 73 20 6f 62 6a 65 63 74 20 69 73 20 64 65  his object is de
f960: 63 72 65 6d 65 6e 74 65 64 2e 20 57 68 65 6e 20  cremented. When 
f970: 69 74 20 72 65 61 63 68 65 73 20 30 2c 20 74 68  it reaches 0, th
f980: 65 20 64 65 73 74 72 75 63 74 6f 72 0a 2a 2a 20  e destructor.** 
f990: 69 73 20 69 6e 76 6f 6b 65 64 20 61 6e 64 20 74  is invoked and t
f9a0: 68 65 20 46 75 6e 63 44 65 73 74 72 75 63 74 6f  he FuncDestructo
f9b0: 72 20 73 74 72 75 63 74 75 72 65 20 66 72 65 65  r structure free
f9c0: 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 46 75 6e  d..*/.struct Fun
f9d0: 63 44 65 73 74 72 75 63 74 6f 72 20 7b 0a 20 20  cDestructor {.  
f9e0: 69 6e 74 20 6e 52 65 66 3b 0a 20 20 76 6f 69 64  int nRef;.  void
f9f0: 20 28 2a 78 44 65 73 74 72 6f 79 29 28 76 6f 69   (*xDestroy)(voi
fa00: 64 20 2a 29 3b 0a 20 20 76 6f 69 64 20 2a 70 55  d *);.  void *pU
fa10: 73 65 72 44 61 74 61 3b 0a 7d 3b 0a 0a 2f 2a 0a  serData;.};../*.
fa20: 2a 2a 20 50 6f 73 73 69 62 6c 65 20 76 61 6c 75  ** Possible valu
fa30: 65 73 20 66 6f 72 20 46 75 6e 63 44 65 66 2e 66  es for FuncDef.f
fa40: 6c 61 67 73 2e 20 20 4e 6f 74 65 20 74 68 61 74  lags.  Note that
fa50: 20 74 68 65 20 5f 4c 45 4e 47 54 48 20 61 6e 64   the _LENGTH and
fa60: 20 5f 54 59 50 45 4f 46 0a 2a 2a 20 76 61 6c 75   _TYPEOF.** valu
fa70: 65 73 20 6d 75 73 74 20 63 6f 72 72 65 73 70 6f  es must correspo
fa80: 6e 64 20 74 6f 20 4f 50 46 4c 41 47 5f 4c 45 4e  nd to OPFLAG_LEN
fa90: 47 54 48 41 52 47 20 61 6e 64 20 4f 50 46 4c 41  GTHARG and OPFLA
faa0: 47 5f 54 59 50 45 4f 46 41 52 47 2e 20 20 41 6e  G_TYPEOFARG.  An
fab0: 64 0a 2a 2a 20 53 51 4c 49 54 45 5f 46 55 4e 43  d.** SQLITE_FUNC
fac0: 5f 43 4f 4e 53 54 41 4e 54 20 6d 75 73 74 20 62  _CONSTANT must b
fad0: 65 20 74 68 65 20 73 61 6d 65 20 61 73 20 53 51  e the same as SQ
fae0: 4c 49 54 45 5f 44 45 54 45 52 4d 49 4e 49 53 54  LITE_DETERMINIST
faf0: 49 43 2e 20 20 54 68 65 72 65 0a 2a 2a 20 61 72  IC.  There.** ar
fb00: 65 20 61 73 73 65 72 74 28 29 20 73 74 61 74 65  e assert() state
fb10: 6d 65 6e 74 73 20 69 6e 20 74 68 65 20 63 6f 64  ments in the cod
fb20: 65 20 74 6f 20 76 65 72 69 66 79 20 74 68 69 73  e to verify this
fb30: 2e 0a 2a 2a 0a 2a 2a 20 56 61 6c 75 65 20 63 6f  ..**.** Value co
fb40: 6e 73 74 72 61 69 6e 74 73 20 28 65 6e 66 6f 72  nstraints (enfor
fb50: 63 65 64 20 76 69 61 20 61 73 73 65 72 74 28 29  ced via assert()
fb60: 29 3a 0a 2a 2a 20 20 20 20 20 53 51 4c 49 54 45  ):.**     SQLITE
fb70: 5f 46 55 4e 43 5f 4d 49 4e 4d 41 58 20 20 20 20  _FUNC_MINMAX    
fb80: 3d 3d 20 20 4e 43 5f 4d 69 6e 4d 61 78 41 67 67  ==  NC_MinMaxAgg
fb90: 20 20 20 20 20 20 3d 3d 20 53 46 5f 4d 69 6e 4d        == SF_MinM
fba0: 61 78 41 67 67 0a 2a 2a 20 20 20 20 20 53 51 4c  axAgg.**     SQL
fbb0: 49 54 45 5f 46 55 4e 43 5f 4c 45 4e 47 54 48 20  ITE_FUNC_LENGTH 
fbc0: 20 20 20 3d 3d 20 20 4f 50 46 4c 41 47 5f 4c 45     ==  OPFLAG_LE
fbd0: 4e 47 54 48 41 52 47 0a 2a 2a 20 20 20 20 20 53  NGTHARG.**     S
fbe0: 51 4c 49 54 45 5f 46 55 4e 43 5f 54 59 50 45 4f  QLITE_FUNC_TYPEO
fbf0: 46 20 20 20 20 3d 3d 20 20 4f 50 46 4c 41 47 5f  F    ==  OPFLAG_
fc00: 54 59 50 45 4f 46 41 52 47 0a 2a 2a 20 20 20 20  TYPEOFARG.**    
fc10: 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e   SQLITE_FUNC_CON
fc20: 53 54 41 4e 54 20 20 3d 3d 20 20 53 51 4c 49 54  STANT  ==  SQLIT
fc30: 45 5f 44 45 54 45 52 4d 49 4e 49 53 54 49 43 20  E_DETERMINISTIC 
fc40: 66 72 6f 6d 20 74 68 65 20 41 50 49 0a 2a 2a 20  from the API.** 
fc50: 20 20 20 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f      SQLITE_FUNC_
fc60: 45 4e 43 4d 41 53 4b 20 20 20 64 65 70 65 6e 64  ENCMASK   depend
fc70: 73 20 6f 6e 20 53 51 4c 49 54 45 5f 55 54 46 2a  s on SQLITE_UTF*
fc80: 20 6d 61 63 72 6f 73 20 69 6e 20 74 68 65 20 41   macros in the A
fc90: 50 49 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  PI.*/.#define SQ
fca0: 4c 49 54 45 5f 46 55 4e 43 5f 45 4e 43 4d 41 53  LITE_FUNC_ENCMAS
fcb0: 4b 20 20 30 78 30 30 30 33 20 2f 2a 20 53 51 4c  K  0x0003 /* SQL
fcc0: 49 54 45 5f 55 54 46 38 2c 20 53 51 4c 49 54 45  ITE_UTF8, SQLITE
fcd0: 5f 55 54 46 31 36 42 45 20 6f 72 20 55 54 46 31  _UTF16BE or UTF1
fce0: 36 4c 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  6LE */.#define S
fcf0: 51 4c 49 54 45 5f 46 55 4e 43 5f 4c 49 4b 45 20  QLITE_FUNC_LIKE 
fd00: 20 20 20 20 30 78 30 30 30 34 20 2f 2a 20 43 61      0x0004 /* Ca
fd10: 6e 64 69 64 61 74 65 20 66 6f 72 20 74 68 65 20  ndidate for the 
fd20: 4c 49 4b 45 20 6f 70 74 69 6d 69 7a 61 74 69 6f  LIKE optimizatio
fd30: 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  n */.#define SQL
fd40: 49 54 45 5f 46 55 4e 43 5f 43 41 53 45 20 20 20  ITE_FUNC_CASE   
fd50: 20 20 30 78 30 30 30 38 20 2f 2a 20 43 61 73 65    0x0008 /* Case
fd60: 2d 73 65 6e 73 69 74 69 76 65 20 4c 49 4b 45 2d  -sensitive LIKE-
fd70: 74 79 70 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f  type function */
fd80: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
fd90: 46 55 4e 43 5f 45 50 48 45 4d 20 20 20 20 30 78  FUNC_EPHEM    0x
fda0: 30 30 31 30 20 2f 2a 20 45 70 68 65 6d 65 72 61  0010 /* Ephemera
fdb0: 6c 2e 20 20 44 65 6c 65 74 65 20 77 69 74 68 20  l.  Delete with 
fdc0: 56 44 42 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20  VDBE */.#define 
fdd0: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44  SQLITE_FUNC_NEED
fde0: 43 4f 4c 4c 20 30 78 30 30 32 30 20 2f 2a 20 73  COLL 0x0020 /* s
fdf0: 71 6c 69 74 65 33 47 65 74 46 75 6e 63 43 6f 6c  qlite3GetFuncCol
fe00: 6c 53 65 71 28 29 20 6d 69 67 68 74 20 62 65 20  lSeq() might be 
fe10: 63 61 6c 6c 65 64 2a 2f 0a 23 64 65 66 69 6e 65  called*/.#define
fe20: 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4c 45 4e   SQLITE_FUNC_LEN
fe30: 47 54 48 20 20 20 30 78 30 30 34 30 20 2f 2a 20  GTH   0x0040 /* 
fe40: 42 75 69 6c 74 2d 69 6e 20 6c 65 6e 67 74 68 28  Built-in length(
fe50: 29 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64  ) function */.#d
fe60: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e  efine SQLITE_FUN
fe70: 43 5f 54 59 50 45 4f 46 20 20 20 30 78 30 30 38  C_TYPEOF   0x008
fe80: 30 20 2f 2a 20 42 75 69 6c 74 2d 69 6e 20 74 79  0 /* Built-in ty
fe90: 70 65 6f 66 28 29 20 66 75 6e 63 74 69 6f 6e 20  peof() function 
fea0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
feb0: 45 5f 46 55 4e 43 5f 43 4f 55 4e 54 20 20 20 20  E_FUNC_COUNT    
fec0: 30 78 30 31 30 30 20 2f 2a 20 42 75 69 6c 74 2d  0x0100 /* Built-
fed0: 69 6e 20 63 6f 75 6e 74 28 2a 29 20 61 67 67 72  in count(*) aggr
fee0: 65 67 61 74 65 20 2a 2f 0a 23 64 65 66 69 6e 65  egate */.#define
fef0: 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 41   SQLITE_FUNC_COA
ff00: 4c 45 53 43 45 20 30 78 30 32 30 30 20 2f 2a 20  LESCE 0x0200 /* 
ff10: 42 75 69 6c 74 2d 69 6e 20 63 6f 61 6c 65 73 63  Built-in coalesc
ff20: 65 28 29 20 6f 72 20 69 66 6e 75 6c 6c 28 29 20  e() or ifnull() 
ff30: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
ff40: 45 5f 46 55 4e 43 5f 55 4e 4c 49 4b 45 4c 59 20  E_FUNC_UNLIKELY 
ff50: 30 78 30 34 30 30 20 2f 2a 20 42 75 69 6c 74 2d  0x0400 /* Built-
ff60: 69 6e 20 75 6e 6c 69 6b 65 6c 79 28 29 20 66 75  in unlikely() fu
ff70: 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e  nction */.#defin
ff80: 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f  e SQLITE_FUNC_CO
ff90: 4e 53 54 41 4e 54 20 30 78 30 38 30 30 20 2f 2a  NSTANT 0x0800 /*
ffa0: 20 43 6f 6e 73 74 61 6e 74 20 69 6e 70 75 74 73   Constant inputs
ffb0: 20 67 69 76 65 20 61 20 63 6f 6e 73 74 61 6e 74   give a constant
ffc0: 20 6f 75 74 70 75 74 20 2a 2f 0a 23 64 65 66 69   output */.#defi
ffd0: 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4d  ne SQLITE_FUNC_M
ffe0: 49 4e 4d 41 58 20 20 20 30 78 31 30 30 30 20 2f  INMAX   0x1000 /
fff0: 2a 20 54 72 75 65 20 66 6f 72 20 6d 69 6e 28 29  * True for min()
10000 20 61 6e 64 20 6d 61 78 28 29 20 61 67 67 72 65   and max() aggre
10010 67 61 74 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65  gates */.#define
10020 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 53 4c 4f   SQLITE_FUNC_SLO
10030 43 48 4e 47 20 20 30 78 32 30 30 30 20 2f 2a 20  CHNG  0x2000 /* 
10040 22 53 6c 6f 77 20 43 68 61 6e 67 65 22 2e 20 56  "Slow Change". V
10050 61 6c 75 65 20 63 6f 6e 73 74 61 6e 74 20 64 75  alue constant du
10060 72 69 6e 67 20 61 0a 20 20 20 20 20 20 20 20 20  ring a.         
10070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10080 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 73 69             ** si
10090 6e 67 6c 65 20 71 75 65 72 79 20 2d 20 6d 69 67  ngle query - mig
100a0 68 74 20 63 68 61 6e 67 65 20 6f 76 65 72 20 74  ht change over t
100b0 69 6d 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ime */.#define S
100c0 51 4c 49 54 45 5f 46 55 4e 43 5f 41 46 46 49 4e  QLITE_FUNC_AFFIN
100d0 49 54 59 20 30 78 34 30 30 30 20 2f 2a 20 42 75  ITY 0x4000 /* Bu
100e0 69 6c 74 2d 69 6e 20 61 66 66 69 6e 69 74 79 28  ilt-in affinity(
100f0 29 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64  ) function */.#d
10100 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e  efine SQLITE_FUN
10110 43 5f 4f 46 46 53 45 54 20 20 20 30 78 38 30 30  C_OFFSET   0x800
10120 30 20 2f 2a 20 42 75 69 6c 74 2d 69 6e 20 73 71  0 /* Built-in sq
10130 6c 69 74 65 5f 6f 66 66 73 65 74 28 29 20 66 75  lite_offset() fu
10140 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e  nction */.#defin
10150 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 57 49  e SQLITE_FUNC_WI
10160 4e 44 4f 57 20 20 20 30 78 30 30 30 31 30 30 30  NDOW   0x0001000
10170 30 20 2f 2a 20 42 75 69 6c 74 2d 69 6e 20 77 69  0 /* Built-in wi
10180 6e 64 6f 77 2d 6f 6e 6c 79 20 66 75 6e 63 74 69  ndow-only functi
10190 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  on */.#define SQ
101a0 4c 49 54 45 5f 46 55 4e 43 5f 57 49 4e 44 4f 57  LITE_FUNC_WINDOW
101b0 5f 53 49 5a 45 20 30 78 32 30 30 30 30 20 2f 2a  _SIZE 0x20000 /*
101c0 20 52 65 71 75 69 72 65 73 20 70 61 72 74 69 74   Requires partit
101d0 69 6f 6e 20 73 69 7a 65 20 61 73 20 61 72 67 2e  ion size as arg.
101e0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
101f0 54 45 5f 46 55 4e 43 5f 49 4e 54 45 52 4e 41 4c  TE_FUNC_INTERNAL
10200 20 30 78 30 30 30 34 30 30 30 30 20 2f 2a 20 46   0x00040000 /* F
10210 6f 72 20 75 73 65 20 62 79 20 4e 65 73 74 65 64  or use by Nested
10220 50 61 72 73 65 28 29 20 6f 6e 6c 79 20 2a 2f 0a  Parse() only */.
10230 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f  ./*.** The follo
10240 77 69 6e 67 20 74 68 72 65 65 20 6d 61 63 72 6f  wing three macro
10250 73 2c 20 46 55 4e 43 54 49 4f 4e 28 29 2c 20 4c  s, FUNCTION(), L
10260 49 4b 45 46 55 4e 43 28 29 20 61 6e 64 20 41 47  IKEFUNC() and AG
10270 47 52 45 47 41 54 45 28 29 20 61 72 65 0a 2a 2a  GREGATE() are.**
10280 20 75 73 65 64 20 74 6f 20 63 72 65 61 74 65 20   used to create 
10290 74 68 65 20 69 6e 69 74 69 61 6c 69 7a 65 72 73  the initializers
102a0 20 66 6f 72 20 74 68 65 20 46 75 6e 63 44 65 66   for the FuncDef
102b0 20 73 74 72 75 63 74 75 72 65 73 2e 0a 2a 2a 0a   structures..**.
102c0 2a 2a 20 20 20 46 55 4e 43 54 49 4f 4e 28 7a 4e  **   FUNCTION(zN
102d0 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c  ame, nArg, iArg,
102e0 20 62 4e 43 2c 20 78 46 75 6e 63 29 0a 2a 2a 20   bNC, xFunc).** 
102f0 20 20 20 20 55 73 65 64 20 74 6f 20 63 72 65 61      Used to crea
10300 74 65 20 61 20 73 63 61 6c 61 72 20 66 75 6e 63  te a scalar func
10310 74 69 6f 6e 20 64 65 66 69 6e 69 74 69 6f 6e 20  tion definition 
10320 6f 66 20 61 20 66 75 6e 63 74 69 6f 6e 20 7a 4e  of a function zN
10330 61 6d 65 0a 2a 2a 20 20 20 20 20 69 6d 70 6c 65  ame.**     imple
10340 6d 65 6e 74 65 64 20 62 79 20 43 20 66 75 6e 63  mented by C func
10350 74 69 6f 6e 20 78 46 75 6e 63 20 74 68 61 74 20  tion xFunc that 
10360 61 63 63 65 70 74 73 20 6e 41 72 67 20 61 72 67  accepts nArg arg
10370 75 6d 65 6e 74 73 2e 20 54 68 65 0a 2a 2a 20 20  uments. The.**  
10380 20 20 20 76 61 6c 75 65 20 70 61 73 73 65 64 20     value passed 
10390 61 73 20 69 41 72 67 20 69 73 20 63 61 73 74 20  as iArg is cast 
103a0 74 6f 20 61 20 28 76 6f 69 64 2a 29 20 61 6e 64  to a (void*) and
103b0 20 6d 61 64 65 20 61 76 61 69 6c 61 62 6c 65 0a   made available.
103c0 2a 2a 20 20 20 20 20 61 73 20 74 68 65 20 75 73  **     as the us
103d0 65 72 2d 64 61 74 61 20 28 73 71 6c 69 74 65 33  er-data (sqlite3
103e0 5f 75 73 65 72 5f 64 61 74 61 28 29 29 20 66 6f  _user_data()) fo
103f0 72 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 2e 20  r the function. 
10400 49 66 0a 2a 2a 20 20 20 20 20 61 72 67 75 6d 65  If.**     argume
10410 6e 74 20 62 4e 43 20 69 73 20 74 72 75 65 2c 20  nt bNC is true, 
10420 74 68 65 6e 20 74 68 65 20 53 51 4c 49 54 45 5f  then the SQLITE_
10430 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 20 66 6c  FUNC_NEEDCOLL fl
10440 61 67 20 69 73 20 73 65 74 2e 0a 2a 2a 0a 2a 2a  ag is set..**.**
10450 20 20 20 56 46 55 4e 43 54 49 4f 4e 28 7a 4e 61     VFUNCTION(zNa
10460 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c 20  me, nArg, iArg, 
10470 62 4e 43 2c 20 78 46 75 6e 63 29 0a 2a 2a 20 20  bNC, xFunc).**  
10480 20 20 20 4c 69 6b 65 20 46 55 4e 43 54 49 4f 4e     Like FUNCTION
10490 20 65 78 63 65 70 74 20 69 74 20 6f 6d 69 74 73   except it omits
104a0 20 74 68 65 20 53 51 4c 49 54 45 5f 46 55 4e 43   the SQLITE_FUNC
104b0 5f 43 4f 4e 53 54 41 4e 54 20 66 6c 61 67 2e 0a  _CONSTANT flag..
104c0 2a 2a 0a 2a 2a 20 20 20 44 46 55 4e 43 54 49 4f  **.**   DFUNCTIO
104d0 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69  N(zName, nArg, i
104e0 41 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29  Arg, bNC, xFunc)
104f0 0a 2a 2a 20 20 20 20 20 4c 69 6b 65 20 46 55 4e  .**     Like FUN
10500 43 54 49 4f 4e 20 65 78 63 65 70 74 20 69 74 20  CTION except it 
10510 6f 6d 69 74 73 20 74 68 65 20 53 51 4c 49 54 45  omits the SQLITE
10520 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 20 66  _FUNC_CONSTANT f
10530 6c 61 67 20 61 6e 64 0a 2a 2a 20 20 20 20 20 61  lag and.**     a
10540 64 64 73 20 74 68 65 20 53 51 4c 49 54 45 5f 46  dds the SQLITE_F
10550 55 4e 43 5f 53 4c 4f 43 48 4e 47 20 66 6c 61 67  UNC_SLOCHNG flag
10560 2e 20 20 55 73 65 64 20 66 6f 72 20 64 61 74 65  .  Used for date
10570 20 26 20 74 69 6d 65 20 66 75 6e 63 74 69 6f 6e   & time function
10580 73 0a 2a 2a 20 20 20 20 20 61 6e 64 20 66 75 6e  s.**     and fun
10590 63 74 69 6f 6e 73 20 6c 69 6b 65 20 73 71 6c 69  ctions like sqli
105a0 74 65 5f 76 65 72 73 69 6f 6e 28 29 20 74 68 61  te_version() tha
105b0 74 20 63 61 6e 20 63 68 61 6e 67 65 2c 20 62 75  t can change, bu
105c0 74 20 6e 6f 74 20 64 75 72 69 6e 67 0a 2a 2a 20  t not during.** 
105d0 20 20 20 20 61 20 73 69 6e 67 6c 65 20 71 75 65      a single que
105e0 72 79 2e 20 20 54 68 65 20 69 41 72 67 20 69 73  ry.  The iArg is
105f0 20 69 67 6e 6f 72 65 64 2e 20 20 54 68 65 20 75   ignored.  The u
10600 73 65 72 2d 64 61 74 61 20 69 73 20 61 6c 77 61  ser-data is alwa
10610 79 73 20 73 65 74 0a 2a 2a 20 20 20 20 20 74 6f  ys set.**     to
10620 20 61 20 4e 55 4c 4c 20 70 6f 69 6e 74 65 72 2e   a NULL pointer.
10630 20 20 54 68 65 20 62 4e 43 20 70 61 72 61 6d 65    The bNC parame
10640 74 65 72 20 69 73 20 6e 6f 74 20 75 73 65 64 2e  ter is not used.
10650 0a 2a 2a 0a 2a 2a 20 20 20 50 55 52 45 5f 44 41  .**.**   PURE_DA
10660 54 45 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20  TE(zName, nArg, 
10670 69 41 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63  iArg, bNC, xFunc
10680 29 0a 2a 2a 20 20 20 20 20 55 73 65 64 20 66 6f  ).**     Used fo
10690 72 20 22 70 75 72 65 22 20 64 61 74 65 2f 74 69  r "pure" date/ti
106a0 6d 65 20 66 75 6e 63 74 69 6f 6e 73 2c 20 74 68  me functions, th
106b0 69 73 20 6d 61 63 72 6f 20 69 73 20 6c 69 6b 65  is macro is like
106c0 20 44 46 55 4e 43 54 49 4f 4e 0a 2a 2a 20 20 20   DFUNCTION.**   
106d0 20 20 65 78 63 65 70 74 20 74 68 61 74 20 69 74    except that it
106e0 20 64 6f 65 73 20 73 65 74 20 74 68 65 20 53 51   does set the SQ
106f0 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41  LITE_FUNC_CONSTA
10700 4e 54 20 66 6c 61 67 73 2e 20 20 69 41 72 67 20  NT flags.  iArg 
10710 69 73 0a 2a 2a 20 20 20 20 20 69 67 6e 6f 72 65  is.**     ignore
10720 64 20 61 6e 64 20 74 68 65 20 75 73 65 72 2d 64  d and the user-d
10730 61 74 61 20 66 6f 72 20 74 68 65 73 65 20 66 75  ata for these fu
10740 6e 63 74 69 6f 6e 73 20 69 73 20 73 65 74 20 74  nctions is set t
10750 6f 20 61 6e 20 0a 2a 2a 20 20 20 20 20 61 72 62  o an .**     arb
10760 69 74 72 61 72 79 20 6e 6f 6e 2d 4e 55 4c 4c 20  itrary non-NULL 
10770 70 6f 69 6e 74 65 72 2e 20 20 54 68 65 20 62 4e  pointer.  The bN
10780 43 20 70 61 72 61 6d 65 74 65 72 20 69 73 20 6e  C parameter is n
10790 6f 74 20 75 73 65 64 2e 0a 2a 2a 0a 2a 2a 20 20  ot used..**.**  
107a0 20 41 47 47 52 45 47 41 54 45 28 7a 4e 61 6d 65   AGGREGATE(zName
107b0 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c 20 62 4e  , nArg, iArg, bN
107c0 43 2c 20 78 53 74 65 70 2c 20 78 46 69 6e 61 6c  C, xStep, xFinal
107d0 29 0a 2a 2a 20 20 20 20 20 55 73 65 64 20 74 6f  ).**     Used to
107e0 20 63 72 65 61 74 65 20 61 6e 20 61 67 67 72 65   create an aggre
107f0 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 20 64 65  gate function de
10800 66 69 6e 69 74 69 6f 6e 20 69 6d 70 6c 65 6d 65  finition impleme
10810 6e 74 65 64 20 62 79 0a 2a 2a 20 20 20 20 20 74  nted by.**     t
10820 68 65 20 43 20 66 75 6e 63 74 69 6f 6e 73 20 78  he C functions x
10830 53 74 65 70 20 61 6e 64 20 78 46 69 6e 61 6c 2e  Step and xFinal.
10840 20 54 68 65 20 66 69 72 73 74 20 66 6f 75 72 20   The first four 
10850 70 61 72 61 6d 65 74 65 72 73 0a 2a 2a 20 20 20  parameters.**   
10860 20 20 61 72 65 20 69 6e 74 65 72 70 72 65 74 65    are interprete
10870 64 20 69 6e 20 74 68 65 20 73 61 6d 65 20 77 61  d in the same wa
10880 79 20 61 73 20 74 68 65 20 66 69 72 73 74 20 34  y as the first 4
10890 20 70 61 72 61 6d 65 74 65 72 73 20 74 6f 0a 2a   parameters to.*
108a0 2a 20 20 20 20 20 46 55 4e 43 54 49 4f 4e 28 29  *     FUNCTION()
108b0 2e 0a 2a 2a 0a 2a 2a 20 20 20 57 46 55 4e 43 54  ..**.**   WFUNCT
108c0 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c  ION(zName, nArg,
108d0 20 69 41 72 67 2c 20 78 53 74 65 70 2c 20 78 46   iArg, xStep, xF
108e0 69 6e 61 6c 2c 20 78 56 61 6c 75 65 2c 20 78 49  inal, xValue, xI
108f0 6e 76 65 72 73 65 29 0a 2a 2a 20 20 20 20 20 55  nverse).**     U
10900 73 65 64 20 74 6f 20 63 72 65 61 74 65 20 61 6e  sed to create an
10910 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74   aggregate funct
10920 69 6f 6e 20 64 65 66 69 6e 69 74 69 6f 6e 20 69  ion definition i
10930 6d 70 6c 65 6d 65 6e 74 65 64 20 62 79 0a 2a 2a  mplemented by.**
10940 20 20 20 20 20 74 68 65 20 43 20 66 75 6e 63 74       the C funct
10950 69 6f 6e 73 20 78 53 74 65 70 20 61 6e 64 20 78  ions xStep and x
10960 46 69 6e 61 6c 2e 20 54 68 65 20 66 69 72 73 74  Final. The first
10970 20 66 6f 75 72 20 70 61 72 61 6d 65 74 65 72 73   four parameters
10980 0a 2a 2a 20 20 20 20 20 61 72 65 20 69 6e 74 65  .**     are inte
10990 72 70 72 65 74 65 64 20 69 6e 20 74 68 65 20 73  rpreted in the s
109a0 61 6d 65 20 77 61 79 20 61 73 20 74 68 65 20 66  ame way as the f
109b0 69 72 73 74 20 34 20 70 61 72 61 6d 65 74 65 72  irst 4 parameter
109c0 73 20 74 6f 0a 2a 2a 20 20 20 20 20 46 55 4e 43  s to.**     FUNC
109d0 54 49 4f 4e 28 29 2e 0a 2a 2a 0a 2a 2a 20 20 20  TION()..**.**   
109e0 4c 49 4b 45 46 55 4e 43 28 7a 4e 61 6d 65 2c 20  LIKEFUNC(zName, 
109f0 6e 41 72 67 2c 20 70 41 72 67 2c 20 66 6c 61 67  nArg, pArg, flag
10a00 73 29 0a 2a 2a 20 20 20 20 20 55 73 65 64 20 74  s).**     Used t
10a10 6f 20 63 72 65 61 74 65 20 61 20 73 63 61 6c 61  o create a scala
10a20 72 20 66 75 6e 63 74 69 6f 6e 20 64 65 66 69 6e  r function defin
10a30 69 74 69 6f 6e 20 6f 66 20 61 20 66 75 6e 63 74  ition of a funct
10a40 69 6f 6e 20 7a 4e 61 6d 65 0a 2a 2a 20 20 20 20  ion zName.**    
10a50 20 74 68 61 74 20 61 63 63 65 70 74 73 20 6e 41   that accepts nA
10a60 72 67 20 61 72 67 75 6d 65 6e 74 73 20 61 6e 64  rg arguments and
10a70 20 69 73 20 69 6d 70 6c 65 6d 65 6e 74 65 64 20   is implemented 
10a80 62 79 20 61 20 63 61 6c 6c 20 74 6f 20 43 0a 2a  by a call to C.*
10a90 2a 20 20 20 20 20 66 75 6e 63 74 69 6f 6e 20 6c  *     function l
10aa0 69 6b 65 46 75 6e 63 2e 20 41 72 67 75 6d 65 6e  ikeFunc. Argumen
10ab0 74 20 70 41 72 67 20 69 73 20 63 61 73 74 20 74  t pArg is cast t
10ac0 6f 20 61 20 28 76 6f 69 64 20 2a 29 20 61 6e 64  o a (void *) and
10ad0 20 6d 61 64 65 0a 2a 2a 20 20 20 20 20 61 76 61   made.**     ava
10ae0 69 6c 61 62 6c 65 20 61 73 20 74 68 65 20 66 75  ilable as the fu
10af0 6e 63 74 69 6f 6e 20 75 73 65 72 2d 64 61 74 61  nction user-data
10b00 20 28 73 71 6c 69 74 65 33 5f 75 73 65 72 5f 64   (sqlite3_user_d
10b10 61 74 61 28 29 29 2e 20 54 68 65 0a 2a 2a 20 20  ata()). The.**  
10b20 20 20 20 46 75 6e 63 44 65 66 2e 66 6c 61 67 73     FuncDef.flags
10b30 20 76 61 72 69 61 62 6c 65 20 69 73 20 73 65 74   variable is set
10b40 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20 70 61   to the value pa
10b50 73 73 65 64 20 61 73 20 74 68 65 20 66 6c 61 67  ssed as the flag
10b60 73 0a 2a 2a 20 20 20 20 20 70 61 72 61 6d 65 74  s.**     paramet
10b70 65 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 46  er..*/.#define F
10b80 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e  UNCTION(zName, n
10b90 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20  Arg, iArg, bNC, 
10ba0 78 46 75 6e 63 29 20 5c 0a 20 20 7b 6e 41 72 67  xFunc) \.  {nArg
10bb0 2c 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f  , SQLITE_FUNC_CO
10bc0 4e 53 54 41 4e 54 7c 53 51 4c 49 54 45 5f 55 54  NSTANT|SQLITE_UT
10bd0 46 38 7c 28 62 4e 43 2a 53 51 4c 49 54 45 5f 46  F8|(bNC*SQLITE_F
10be0 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 2c 20 5c  UNC_NEEDCOLL), \
10bf0 0a 20 20 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54  .   SQLITE_INT_T
10c00 4f 5f 50 54 52 28 69 41 72 67 29 2c 20 30 2c 20  O_PTR(iArg), 0, 
10c10 78 46 75 6e 63 2c 20 30 2c 20 30 2c 20 30 2c 20  xFunc, 0, 0, 0, 
10c20 23 7a 4e 61 6d 65 2c 20 7b 30 7d 20 7d 0a 23 64  #zName, {0} }.#d
10c30 65 66 69 6e 65 20 56 46 55 4e 43 54 49 4f 4e 28  efine VFUNCTION(
10c40 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72  zName, nArg, iAr
10c50 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29 20 5c  g, bNC, xFunc) \
10c60 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45  .  {nArg, SQLITE
10c70 5f 55 54 46 38 7c 28 62 4e 43 2a 53 51 4c 49 54  _UTF8|(bNC*SQLIT
10c80 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29  E_FUNC_NEEDCOLL)
10c90 2c 20 5c 0a 20 20 20 53 51 4c 49 54 45 5f 49 4e  , \.   SQLITE_IN
10ca0 54 5f 54 4f 5f 50 54 52 28 69 41 72 67 29 2c 20  T_TO_PTR(iArg), 
10cb0 30 2c 20 78 46 75 6e 63 2c 20 30 2c 20 30 2c 20  0, xFunc, 0, 0, 
10cc0 30 2c 20 23 7a 4e 61 6d 65 2c 20 7b 30 7d 20 7d  0, #zName, {0} }
10cd0 0a 23 64 65 66 69 6e 65 20 44 46 55 4e 43 54 49  .#define DFUNCTI
10ce0 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20  ON(zName, nArg, 
10cf0 69 41 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63  iArg, bNC, xFunc
10d00 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c  ) \.  {nArg, SQL
10d10 49 54 45 5f 46 55 4e 43 5f 53 4c 4f 43 48 4e 47  ITE_FUNC_SLOCHNG
10d20 7c 53 51 4c 49 54 45 5f 55 54 46 38 2c 20 5c 0a  |SQLITE_UTF8, \.
10d30 20 20 20 30 2c 20 30 2c 20 78 46 75 6e 63 2c 20     0, 0, xFunc, 
10d40 30 2c 20 30 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c  0, 0, 0, #zName,
10d50 20 7b 30 7d 20 7d 0a 23 64 65 66 69 6e 65 20 50   {0} }.#define P
10d60 55 52 45 5f 44 41 54 45 28 7a 4e 61 6d 65 2c 20  URE_DATE(zName, 
10d70 6e 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c  nArg, iArg, bNC,
10d80 20 78 46 75 6e 63 29 20 5c 0a 20 20 7b 6e 41 72   xFunc) \.  {nAr
10d90 67 2c 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 53  g, SQLITE_FUNC_S
10da0 4c 4f 43 48 4e 47 7c 53 51 4c 49 54 45 5f 55 54  LOCHNG|SQLITE_UT
10db0 46 38 7c 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43  F8|SQLITE_FUNC_C
10dc0 4f 4e 53 54 41 4e 54 2c 20 5c 0a 20 20 20 28 76  ONSTANT, \.   (v
10dd0 6f 69 64 2a 29 26 73 71 6c 69 74 65 33 43 6f 6e  oid*)&sqlite3Con
10de0 66 69 67 2c 20 30 2c 20 78 46 75 6e 63 2c 20 30  fig, 0, xFunc, 0
10df0 2c 20 30 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c 20  , 0, 0, #zName, 
10e00 7b 30 7d 20 7d 0a 23 64 65 66 69 6e 65 20 46 55  {0} }.#define FU
10e10 4e 43 54 49 4f 4e 32 28 7a 4e 61 6d 65 2c 20 6e  NCTION2(zName, n
10e20 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20  Arg, iArg, bNC, 
10e30 78 46 75 6e 63 2c 20 65 78 74 72 61 46 6c 61 67  xFunc, extraFlag
10e40 73 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 53 51 4c  s) \.  {nArg,SQL
10e50 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e  ITE_FUNC_CONSTAN
10e60 54 7c 53 51 4c 49 54 45 5f 55 54 46 38 7c 28 62  T|SQLITE_UTF8|(b
10e70 4e 43 2a 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e  NC*SQLITE_FUNC_N
10e80 45 45 44 43 4f 4c 4c 29 7c 65 78 74 72 61 46 6c  EEDCOLL)|extraFl
10e90 61 67 73 2c 5c 0a 20 20 20 53 51 4c 49 54 45 5f  ags,\.   SQLITE_
10ea0 49 4e 54 5f 54 4f 5f 50 54 52 28 69 41 72 67 29  INT_TO_PTR(iArg)
10eb0 2c 20 30 2c 20 78 46 75 6e 63 2c 20 30 2c 20 30  , 0, xFunc, 0, 0
10ec0 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c 20 7b 30 7d  , 0, #zName, {0}
10ed0 20 7d 0a 23 64 65 66 69 6e 65 20 53 54 52 5f 46   }.#define STR_F
10ee0 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e  UNCTION(zName, n
10ef0 41 72 67 2c 20 70 41 72 67 2c 20 62 4e 43 2c 20  Arg, pArg, bNC, 
10f00 78 46 75 6e 63 29 20 5c 0a 20 20 7b 6e 41 72 67  xFunc) \.  {nArg
10f10 2c 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 53 4c  , SQLITE_FUNC_SL
10f20 4f 43 48 4e 47 7c 53 51 4c 49 54 45 5f 55 54 46  OCHNG|SQLITE_UTF
10f30 38 7c 28 62 4e 43 2a 53 51 4c 49 54 45 5f 46 55  8|(bNC*SQLITE_FU
10f40 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 2c 20 5c 0a  NC_NEEDCOLL), \.
10f50 20 20 20 70 41 72 67 2c 20 30 2c 20 78 46 75 6e     pArg, 0, xFun
10f60 63 2c 20 30 2c 20 30 2c 20 30 2c 20 23 7a 4e 61  c, 0, 0, 0, #zNa
10f70 6d 65 2c 20 7d 0a 23 64 65 66 69 6e 65 20 4c 49  me, }.#define LI
10f80 4b 45 46 55 4e 43 28 7a 4e 61 6d 65 2c 20 6e 41  KEFUNC(zName, nA
10f90 72 67 2c 20 61 72 67 2c 20 66 6c 61 67 73 29 20  rg, arg, flags) 
10fa0 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54  \.  {nArg, SQLIT
10fb0 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 7c  E_FUNC_CONSTANT|
10fc0 53 51 4c 49 54 45 5f 55 54 46 38 7c 66 6c 61 67  SQLITE_UTF8|flag
10fd0 73 2c 20 5c 0a 20 20 20 28 76 6f 69 64 20 2a 29  s, \.   (void *)
10fe0 61 72 67 2c 20 30 2c 20 6c 69 6b 65 46 75 6e 63  arg, 0, likeFunc
10ff0 2c 20 30 2c 20 30 2c 20 30 2c 20 23 7a 4e 61 6d  , 0, 0, 0, #zNam
11000 65 2c 20 7b 30 7d 20 7d 0a 23 64 65 66 69 6e 65  e, {0} }.#define
11010 20 41 47 47 52 45 47 41 54 45 28 7a 4e 61 6d 65   AGGREGATE(zName
11020 2c 20 6e 41 72 67 2c 20 61 72 67 2c 20 6e 63 2c  , nArg, arg, nc,
11030 20 78 53 74 65 70 2c 20 78 46 69 6e 61 6c 2c 20   xStep, xFinal, 
11040 78 56 61 6c 75 65 29 20 5c 0a 20 20 7b 6e 41 72  xValue) \.  {nAr
11050 67 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 7c 28  g, SQLITE_UTF8|(
11060 6e 63 2a 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e  nc*SQLITE_FUNC_N
11070 45 45 44 43 4f 4c 4c 29 2c 20 5c 0a 20 20 20 53  EEDCOLL), \.   S
11080 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52  QLITE_INT_TO_PTR
11090 28 61 72 67 29 2c 20 30 2c 20 78 53 74 65 70 2c  (arg), 0, xStep,
110a0 78 46 69 6e 61 6c 2c 78 56 61 6c 75 65 2c 30 2c  xFinal,xValue,0,
110b0 23 7a 4e 61 6d 65 2c 20 7b 30 7d 7d 0a 23 64 65  #zName, {0}}.#de
110c0 66 69 6e 65 20 41 47 47 52 45 47 41 54 45 32 28  fine AGGREGATE2(
110d0 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 61 72 67  zName, nArg, arg
110e0 2c 20 6e 63 2c 20 78 53 74 65 70 2c 20 78 46 69  , nc, xStep, xFi
110f0 6e 61 6c 2c 20 65 78 74 72 61 46 6c 61 67 73 29  nal, extraFlags)
11100 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49   \.  {nArg, SQLI
11110 54 45 5f 55 54 46 38 7c 28 6e 63 2a 53 51 4c 49  TE_UTF8|(nc*SQLI
11120 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c  TE_FUNC_NEEDCOLL
11130 29 7c 65 78 74 72 61 46 6c 61 67 73 2c 20 5c 0a  )|extraFlags, \.
11140 20 20 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f     SQLITE_INT_TO
11150 5f 50 54 52 28 61 72 67 29 2c 20 30 2c 20 78 53  _PTR(arg), 0, xS
11160 74 65 70 2c 78 46 69 6e 61 6c 2c 78 46 69 6e 61  tep,xFinal,xFina
11170 6c 2c 30 2c 23 7a 4e 61 6d 65 2c 20 7b 30 7d 7d  l,0,#zName, {0}}
11180 0a 23 64 65 66 69 6e 65 20 57 41 47 47 52 45 47  .#define WAGGREG
11190 41 54 45 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c  ATE(zName, nArg,
111a0 20 61 72 67 2c 20 6e 63 2c 20 78 53 74 65 70 2c   arg, nc, xStep,
111b0 20 78 46 69 6e 61 6c 2c 20 78 56 61 6c 75 65 2c   xFinal, xValue,
111c0 20 78 49 6e 76 65 72 73 65 2c 20 66 29 20 5c 0a   xInverse, f) \.
111d0 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f    {nArg, SQLITE_
111e0 55 54 46 38 7c 28 6e 63 2a 53 51 4c 49 54 45 5f  UTF8|(nc*SQLITE_
111f0 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 7c 66  FUNC_NEEDCOLL)|f
11200 2c 20 5c 0a 20 20 20 53 51 4c 49 54 45 5f 49 4e  , \.   SQLITE_IN
11210 54 5f 54 4f 5f 50 54 52 28 61 72 67 29 2c 20 30  T_TO_PTR(arg), 0
11220 2c 20 78 53 74 65 70 2c 78 46 69 6e 61 6c 2c 78  , xStep,xFinal,x
11230 56 61 6c 75 65 2c 78 49 6e 76 65 72 73 65 2c 23  Value,xInverse,#
11240 7a 4e 61 6d 65 2c 20 7b 30 7d 7d 0a 23 64 65 66  zName, {0}}.#def
11250 69 6e 65 20 49 4e 54 45 52 4e 41 4c 5f 46 55 4e  ine INTERNAL_FUN
11260 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72  CTION(zName, nAr
11270 67 2c 20 78 46 75 6e 63 29 20 5c 0a 20 20 7b 6e  g, xFunc) \.  {n
11280 41 72 67 2c 20 53 51 4c 49 54 45 5f 46 55 4e 43  Arg, SQLITE_FUNC
11290 5f 49 4e 54 45 52 4e 41 4c 7c 53 51 4c 49 54 45  _INTERNAL|SQLITE
112a0 5f 55 54 46 38 7c 53 51 4c 49 54 45 5f 46 55 4e  _UTF8|SQLITE_FUN
112b0 43 5f 43 4f 4e 53 54 41 4e 54 2c 20 5c 0a 20 20  C_CONSTANT, \.  
112c0 20 30 2c 20 30 2c 20 78 46 75 6e 63 2c 20 30 2c   0, 0, xFunc, 0,
112d0 20 30 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c 20 7b   0, 0, #zName, {
112e0 30 7d 20 7d 0a 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c  0} }.../*.** All
112f0 20 63 75 72 72 65 6e 74 20 73 61 76 65 70 6f 69   current savepoi
11300 6e 74 73 20 61 72 65 20 73 74 6f 72 65 64 20 69  nts are stored i
11310 6e 20 61 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20  n a linked list 
11320 73 74 61 72 74 69 6e 67 20 61 74 0a 2a 2a 20 73  starting at.** s
11330 71 6c 69 74 65 33 2e 70 53 61 76 65 70 6f 69 6e  qlite3.pSavepoin
11340 74 2e 20 54 68 65 20 66 69 72 73 74 20 65 6c 65  t. The first ele
11350 6d 65 6e 74 20 69 6e 20 74 68 65 20 6c 69 73 74  ment in the list
11360 20 69 73 20 74 68 65 20 6d 6f 73 74 20 72 65 63   is the most rec
11370 65 6e 74 6c 79 0a 2a 2a 20 6f 70 65 6e 65 64 20  ently.** opened 
11380 73 61 76 65 70 6f 69 6e 74 2e 20 53 61 76 65 70  savepoint. Savep
11390 6f 69 6e 74 73 20 61 72 65 20 61 64 64 65 64 20  oints are added 
113a0 74 6f 20 74 68 65 20 6c 69 73 74 20 62 79 20 74  to the list by t
113b0 68 65 20 76 64 62 65 0a 2a 2a 20 4f 50 5f 53 61  he vdbe.** OP_Sa
113c0 76 65 70 6f 69 6e 74 20 69 6e 73 74 72 75 63 74  vepoint instruct
113d0 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53  ion..*/.struct S
113e0 61 76 65 70 6f 69 6e 74 20 7b 0a 20 20 63 68 61  avepoint {.  cha
113f0 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20  r *zName;       
11400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11410 20 2f 2a 20 53 61 76 65 70 6f 69 6e 74 20 6e 61   /* Savepoint na
11420 6d 65 20 28 6e 75 6c 2d 74 65 72 6d 69 6e 61 74  me (nul-terminat
11430 65 64 29 20 2a 2f 0a 20 20 69 36 34 20 6e 44 65  ed) */.  i64 nDe
11440 66 65 72 72 65 64 43 6f 6e 73 3b 20 20 20 20 20  ferredCons;     
11450 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
11460 4e 75 6d 62 65 72 20 6f 66 20 64 65 66 65 72 72  Number of deferr
11470 65 64 20 66 6b 20 76 69 6f 6c 61 74 69 6f 6e 73  ed fk violations
11480 20 2a 2f 0a 20 20 69 36 34 20 6e 44 65 66 65 72   */.  i64 nDefer
11490 72 65 64 49 6d 6d 43 6f 6e 73 3b 20 20 20 20 20  redImmCons;     
114a0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
114b0 62 65 72 20 6f 66 20 64 65 66 65 72 72 65 64 20  ber of deferred 
114c0 69 6d 6d 20 66 6b 2e 20 2a 2f 0a 20 20 53 61 76  imm fk. */.  Sav
114d0 65 70 6f 69 6e 74 20 2a 70 4e 65 78 74 3b 20 20  epoint *pNext;  
114e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
114f0 20 2f 2a 20 50 61 72 65 6e 74 20 73 61 76 65 70   /* Parent savep
11500 6f 69 6e 74 20 28 69 66 20 61 6e 79 29 20 2a 2f  oint (if any) */
11510 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66  .};../*.** The f
11520 6f 6c 6c 6f 77 69 6e 67 20 61 72 65 20 75 73 65  ollowing are use
11530 64 20 61 73 20 74 68 65 20 73 65 63 6f 6e 64 20  d as the second 
11540 70 61 72 61 6d 65 74 65 72 20 74 6f 20 73 71 6c  parameter to sql
11550 69 74 65 33 53 61 76 65 70 6f 69 6e 74 28 29 2c  ite3Savepoint(),
11560 0a 2a 2a 20 61 6e 64 20 61 73 20 74 68 65 20 50  .** and as the P
11570 31 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 74 68  1 argument to th
11580 65 20 4f 50 5f 53 61 76 65 70 6f 69 6e 74 20 69  e OP_Savepoint i
11590 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 23  nstruction..*/.#
115a0 64 65 66 69 6e 65 20 53 41 56 45 50 4f 49 4e 54  define SAVEPOINT
115b0 5f 42 45 47 49 4e 20 20 20 20 20 20 30 0a 23 64  _BEGIN      0.#d
115c0 65 66 69 6e 65 20 53 41 56 45 50 4f 49 4e 54 5f  efine SAVEPOINT_
115d0 52 45 4c 45 41 53 45 20 20 20 20 31 0a 23 64 65  RELEASE    1.#de
115e0 66 69 6e 65 20 53 41 56 45 50 4f 49 4e 54 5f 52  fine SAVEPOINT_R
115f0 4f 4c 4c 42 41 43 4b 20 20 20 32 0a 0a 0a 2f 2a  OLLBACK   2.../*
11600 0a 2a 2a 20 45 61 63 68 20 53 51 4c 69 74 65 20  .** Each SQLite 
11610 6d 6f 64 75 6c 65 20 28 76 69 72 74 75 61 6c 20  module (virtual 
11620 74 61 62 6c 65 20 64 65 66 69 6e 69 74 69 6f 6e  table definition
11630 29 20 69 73 20 64 65 66 69 6e 65 64 20 62 79 20  ) is defined by 
11640 61 6e 0a 2a 2a 20 69 6e 73 74 61 6e 63 65 20 6f  an.** instance o
11650 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  f the following 
11660 73 74 72 75 63 74 75 72 65 2c 20 73 74 6f 72 65  structure, store
11670 64 20 69 6e 20 74 68 65 20 73 71 6c 69 74 65 33  d in the sqlite3
11680 2e 61 4d 6f 64 75 6c 65 0a 2a 2a 20 68 61 73 68  .aModule.** hash
11690 20 74 61 62 6c 65 2e 0a 2a 2f 0a 73 74 72 75 63   table..*/.struc
116a0 74 20 4d 6f 64 75 6c 65 20 7b 0a 20 20 63 6f 6e  t Module {.  con
116b0 73 74 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c  st sqlite3_modul
116c0 65 20 2a 70 4d 6f 64 75 6c 65 3b 20 20 20 20 20  e *pModule;     
116d0 20 20 2f 2a 20 43 61 6c 6c 62 61 63 6b 20 70 6f    /* Callback po
116e0 69 6e 74 65 72 73 20 2a 2f 0a 20 20 63 6f 6e 73  inters */.  cons
116f0 74 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20  t char *zName;  
11700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11710 20 2f 2a 20 4e 61 6d 65 20 70 61 73 73 65 64 20   /* Name passed 
11720 74 6f 20 63 72 65 61 74 65 5f 6d 6f 64 75 6c 65  to create_module
11730 28 29 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 41  () */.  void *pA
11740 75 78 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ux;             
11750 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
11760 70 41 75 78 20 70 61 73 73 65 64 20 74 6f 20 63  pAux passed to c
11770 72 65 61 74 65 5f 6d 6f 64 75 6c 65 28 29 20 2a  reate_module() *
11780 2f 0a 20 20 76 6f 69 64 20 28 2a 78 44 65 73 74  /.  void (*xDest
11790 72 6f 79 29 28 76 6f 69 64 20 2a 29 3b 20 20 20  roy)(void *);   
117a0 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 6f 64 75           /* Modu
117b0 6c 65 20 64 65 73 74 72 75 63 74 6f 72 20 66 75  le destructor fu
117c0 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 54 61 62 6c  nction */.  Tabl
117d0 65 20 2a 70 45 70 6f 54 61 62 3b 20 20 20 20 20  e *pEpoTab;     
117e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
117f0 20 2f 2a 20 45 70 6f 6e 79 6d 6f 75 73 20 74 61   /* Eponymous ta
11800 62 6c 65 20 66 6f 72 20 74 68 69 73 20 6d 6f 64  ble for this mod
11810 75 6c 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  ule */.};../*.**
11820 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f   information abo
11830 75 74 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 6f  ut each column o
11840 66 20 61 6e 20 53 51 4c 20 74 61 62 6c 65 20 69  f an SQL table i
11850 73 20 68 65 6c 64 20 69 6e 20 61 6e 20 69 6e 73  s held in an ins
11860 74 61 6e 63 65 0a 2a 2a 20 6f 66 20 74 68 69 73  tance.** of this
11870 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2f 0a 73   structure..*/.s
11880 74 72 75 63 74 20 43 6f 6c 75 6d 6e 20 7b 0a 20  truct Column {. 
11890 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20   char *zName;   
118a0 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 69    /* Name of thi
118b0 73 20 63 6f 6c 75 6d 6e 2c 20 5c 30 30 30 2c 20  s column, \000, 
118c0 74 68 65 6e 20 74 68 65 20 74 79 70 65 20 2a 2f  then the type */
118d0 0a 20 20 45 78 70 72 20 2a 70 44 66 6c 74 3b 20  .  Expr *pDflt; 
118e0 20 20 20 20 2f 2a 20 44 65 66 61 75 6c 74 20 76      /* Default v
118f0 61 6c 75 65 20 6f 66 20 74 68 69 73 20 63 6f 6c  alue of this col
11900 75 6d 6e 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a  umn */.  char *z
11910 43 6f 6c 6c 3b 20 20 20 20 20 2f 2a 20 43 6f 6c  Coll;     /* Col
11920 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 2e  lating sequence.
11930 20 20 49 66 20 4e 55 4c 4c 2c 20 75 73 65 20 74    If NULL, use t
11940 68 65 20 64 65 66 61 75 6c 74 20 2a 2f 0a 20 20  he default */.  
11950 75 38 20 6e 6f 74 4e 75 6c 6c 3b 20 20 20 20 20  u8 notNull;     
11960 20 2f 2a 20 41 6e 20 4f 45 5f 20 63 6f 64 65 20   /* An OE_ code 
11970 66 6f 72 20 68 61 6e 64 6c 69 6e 67 20 61 20 4e  for handling a N
11980 4f 54 20 4e 55 4c 4c 20 63 6f 6e 73 74 72 61 69  OT NULL constrai
11990 6e 74 20 2a 2f 0a 20 20 63 68 61 72 20 61 66 66  nt */.  char aff
119a0 69 6e 69 74 79 3b 20 20 20 2f 2a 20 4f 6e 65 20  inity;   /* One 
119b0 6f 66 20 74 68 65 20 53 51 4c 49 54 45 5f 41 46  of the SQLITE_AF
119c0 46 5f 2e 2e 2e 20 76 61 6c 75 65 73 20 2a 2f 0a  F_... values */.
119d0 20 20 75 38 20 73 7a 45 73 74 3b 20 20 20 20 20    u8 szEst;     
119e0 20 20 20 2f 2a 20 45 73 74 69 6d 61 74 65 64 20     /* Estimated 
119f0 73 69 7a 65 20 6f 66 20 76 61 6c 75 65 20 69 6e  size of value in
11a00 20 74 68 69 73 20 63 6f 6c 75 6d 6e 2e 20 73 69   this column. si
11a10 7a 65 6f 66 28 49 4e 54 29 3d 3d 31 20 2a 2f 0a  zeof(INT)==1 */.
11a20 20 20 75 38 20 63 6f 6c 46 6c 61 67 73 3b 20 20    u8 colFlags;  
11a30 20 20 20 2f 2a 20 42 6f 6f 6c 65 61 6e 20 70 72     /* Boolean pr
11a40 6f 70 65 72 74 69 65 73 2e 20 20 53 65 65 20 43  operties.  See C
11a50 4f 4c 46 4c 41 47 5f 20 64 65 66 69 6e 65 73 20  OLFLAG_ defines 
11a60 62 65 6c 6f 77 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 20  below */.};../* 
11a70 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20 66  Allowed values f
11a80 6f 72 20 43 6f 6c 75 6d 6e 2e 63 6f 6c 46 6c 61  or Column.colFla
11a90 67 73 3a 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 43  gs:.*/.#define C
11aa0 4f 4c 46 4c 41 47 5f 50 52 49 4d 4b 45 59 20 20  OLFLAG_PRIMKEY  
11ab0 30 78 30 30 30 31 20 20 20 20 2f 2a 20 43 6f 6c  0x0001    /* Col
11ac0 75 6d 6e 20 69 73 20 70 61 72 74 20 6f 66 20 74  umn is part of t
11ad0 68 65 20 70 72 69 6d 61 72 79 20 6b 65 79 20 2a  he primary key *
11ae0 2f 0a 23 64 65 66 69 6e 65 20 43 4f 4c 46 4c 41  /.#define COLFLA
11af0 47 5f 48 49 44 44 45 4e 20 20 20 30 78 30 30 30  G_HIDDEN   0x000
11b00 32 20 20 20 20 2f 2a 20 41 20 68 69 64 64 65 6e  2    /* A hidden
11b10 20 63 6f 6c 75 6d 6e 20 69 6e 20 61 20 76 69 72   column in a vir
11b20 74 75 61 6c 20 74 61 62 6c 65 20 2a 2f 0a 23 64  tual table */.#d
11b30 65 66 69 6e 65 20 43 4f 4c 46 4c 41 47 5f 48 41  efine COLFLAG_HA
11b40 53 54 59 50 45 20 20 30 78 30 30 30 34 20 20 20  STYPE  0x0004   
11b50 20 2f 2a 20 54 79 70 65 20 6e 61 6d 65 20 66 6f   /* Type name fo
11b60 6c 6c 6f 77 73 20 63 6f 6c 75 6d 6e 20 6e 61 6d  llows column nam
11b70 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 43 4f 4c  e */.#define COL
11b80 46 4c 41 47 5f 55 4e 49 51 55 45 20 20 20 30 78  FLAG_UNIQUE   0x
11b90 30 30 30 38 20 20 20 20 2f 2a 20 43 6f 6c 75 6d  0008    /* Colum
11ba0 6e 20 64 65 66 20 63 6f 6e 74 61 69 6e 73 20 22  n def contains "
11bb0 55 4e 49 51 55 45 22 20 6f 72 20 22 50 4b 22 20  UNIQUE" or "PK" 
11bc0 2a 2f 0a 23 64 65 66 69 6e 65 20 43 4f 4c 46 4c  */.#define COLFL
11bd0 41 47 5f 53 4f 52 54 45 52 52 45 46 20 30 78 30  AG_SORTERREF 0x0
11be0 30 31 30 20 20 20 2f 2a 20 55 73 65 20 73 6f 72  010   /* Use sor
11bf0 74 65 72 2d 72 65 66 73 20 77 69 74 68 20 74 68  ter-refs with th
11c00 69 73 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 0a 2f 2a  is column */../*
11c10 0a 2a 2a 20 41 20 22 43 6f 6c 6c 61 74 69 6e 67  .** A "Collating
11c20 20 53 65 71 75 65 6e 63 65 22 20 69 73 20 64 65   Sequence" is de
11c30 66 69 6e 65 64 20 62 79 20 61 6e 20 69 6e 73 74  fined by an inst
11c40 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c  ance of the foll
11c50 6f 77 69 6e 67 0a 2a 2a 20 73 74 72 75 63 74 75  owing.** structu
11c60 72 65 2e 20 43 6f 6e 63 65 70 74 75 61 6c 6c 79  re. Conceptually
11c70 2c 20 61 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65  , a collating se
11c80 71 75 65 6e 63 65 20 63 6f 6e 73 69 73 74 73 20  quence consists 
11c90 6f 66 20 61 20 6e 61 6d 65 20 61 6e 64 0a 2a 2a  of a name and.**
11ca0 20 61 20 63 6f 6d 70 61 72 69 73 6f 6e 20 72 6f   a comparison ro
11cb0 75 74 69 6e 65 20 74 68 61 74 20 64 65 66 69 6e  utine that defin
11cc0 65 73 20 74 68 65 20 6f 72 64 65 72 20 6f 66 20  es the order of 
11cd0 74 68 61 74 20 73 65 71 75 65 6e 63 65 2e 0a 2a  that sequence..*
11ce0 2a 0a 2a 2a 20 49 66 20 43 6f 6c 6c 53 65 71 2e  *.** If CollSeq.
11cf0 78 43 6d 70 20 69 73 20 4e 55 4c 4c 2c 20 69 74  xCmp is NULL, it
11d00 20 6d 65 61 6e 73 20 74 68 61 74 20 74 68 65 0a   means that the.
11d10 2a 2a 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71  ** collating seq
11d20 75 65 6e 63 65 20 69 73 20 75 6e 64 65 66 69 6e  uence is undefin
11d30 65 64 2e 20 20 49 6e 64 69 63 65 73 20 62 75 69  ed.  Indices bui
11d40 6c 74 20 6f 6e 20 61 6e 20 75 6e 64 65 66 69 6e  lt on an undefin
11d50 65 64 0a 2a 2a 20 63 6f 6c 6c 61 74 69 6e 67 20  ed.** collating 
11d60 73 65 71 75 65 6e 63 65 20 6d 61 79 20 6e 6f 74  sequence may not
11d70 20 62 65 20 72 65 61 64 20 6f 72 20 77 72 69 74   be read or writ
11d80 74 65 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 43  ten..*/.struct C
11d90 6f 6c 6c 53 65 71 20 7b 0a 20 20 63 68 61 72 20  ollSeq {.  char 
11da0 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20  *zName;         
11db0 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65 20   /* Name of the 
11dc0 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e  collating sequen
11dd0 63 65 2c 20 55 54 46 2d 38 20 65 6e 63 6f 64 65  ce, UTF-8 encode
11de0 64 20 2a 2f 0a 20 20 75 38 20 65 6e 63 3b 20 20  d */.  u8 enc;  
11df0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
11e00 54 65 78 74 20 65 6e 63 6f 64 69 6e 67 20 68 61  Text encoding ha
11e10 6e 64 6c 65 64 20 62 79 20 78 43 6d 70 28 29 20  ndled by xCmp() 
11e20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 55 73 65 72  */.  void *pUser
11e30 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 69  ;          /* Fi
11e40 72 73 74 20 61 72 67 75 6d 65 6e 74 20 74 6f 20  rst argument to 
11e50 78 43 6d 70 28 29 20 2a 2f 0a 20 20 69 6e 74 20  xCmp() */.  int 
11e60 28 2a 78 43 6d 70 29 28 76 6f 69 64 2a 2c 69 6e  (*xCmp)(void*,in
11e70 74 2c 20 63 6f 6e 73 74 20 76 6f 69 64 2a 2c 20  t, const void*, 
11e80 69 6e 74 2c 20 63 6f 6e 73 74 20 76 6f 69 64 2a  int, const void*
11e90 29 3b 0a 20 20 76 6f 69 64 20 28 2a 78 44 65 6c  );.  void (*xDel
11ea0 29 28 76 6f 69 64 2a 29 3b 20 20 2f 2a 20 44 65  )(void*);  /* De
11eb0 73 74 72 75 63 74 6f 72 20 66 6f 72 20 70 55 73  structor for pUs
11ec0 65 72 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  er */.};../*.** 
11ed0 41 20 73 6f 72 74 20 6f 72 64 65 72 20 63 61 6e  A sort order can
11ee0 20 62 65 20 65 69 74 68 65 72 20 41 53 43 20 6f   be either ASC o
11ef0 72 20 44 45 53 43 2e 0a 2a 2f 0a 23 64 65 66 69  r DESC..*/.#defi
11f00 6e 65 20 53 51 4c 49 54 45 5f 53 4f 5f 41 53 43  ne SQLITE_SO_ASC
11f10 20 20 20 20 20 20 20 30 20 20 2f 2a 20 53 6f 72         0  /* Sor
11f20 74 20 69 6e 20 61 73 63 65 6e 64 69 6e 67 20 6f  t in ascending o
11f30 72 64 65 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20  rder */.#define 
11f40 53 51 4c 49 54 45 5f 53 4f 5f 44 45 53 43 20 20  SQLITE_SO_DESC  
11f50 20 20 20 20 31 20 20 2f 2a 20 53 6f 72 74 20 69      1  /* Sort i
11f60 6e 20 61 73 63 65 6e 64 69 6e 67 20 6f 72 64 65  n ascending orde
11f70 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  r */.#define SQL
11f80 49 54 45 5f 53 4f 5f 55 4e 44 45 46 49 4e 45 44  ITE_SO_UNDEFINED
11f90 20 2d 31 20 2f 2a 20 4e 6f 20 73 6f 72 74 20 6f   -1 /* No sort o
11fa0 72 64 65 72 20 73 70 65 63 69 66 69 65 64 20 2a  rder specified *
11fb0 2f 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6c 75 6d 6e 20  /../*.** Column 
11fc0 61 66 66 69 6e 69 74 79 20 74 79 70 65 73 2e 0a  affinity types..
11fd0 2a 2a 0a 2a 2a 20 54 68 65 73 65 20 75 73 65 64  **.** These used
11fe0 20 74 6f 20 68 61 76 65 20 6d 6e 65 6d 6f 6e 69   to have mnemoni
11ff0 63 20 6e 61 6d 65 20 6c 69 6b 65 20 27 69 27 20  c name like 'i' 
12000 66 6f 72 20 53 51 4c 49 54 45 5f 41 46 46 5f 49  for SQLITE_AFF_I
12010 4e 54 45 47 45 52 20 61 6e 64 0a 2a 2a 20 27 74  NTEGER and.** 't
12020 27 20 66 6f 72 20 53 51 4c 49 54 45 5f 41 46 46  ' for SQLITE_AFF
12030 5f 54 45 58 54 2e 20 20 42 75 74 20 77 65 20 63  _TEXT.  But we c
12040 61 6e 20 73 61 76 65 20 61 20 6c 69 74 74 6c 65  an save a little
12050 20 73 70 61 63 65 20 61 6e 64 20 69 6d 70 72 6f   space and impro
12060 76 65 0a 2a 2a 20 74 68 65 20 73 70 65 65 64 20  ve.** the speed 
12070 61 20 6c 69 74 74 6c 65 20 62 79 20 6e 75 6d 62  a little by numb
12080 65 72 69 6e 67 20 74 68 65 20 76 61 6c 75 65 73  ering the values
12090 20 63 6f 6e 73 65 63 75 74 69 76 65 6c 79 2e 0a   consecutively..
120a0 2a 2a 0a 2a 2a 20 42 75 74 20 72 61 74 68 65 72  **.** But rather
120b0 20 74 68 61 6e 20 73 74 61 72 74 20 77 69 74 68   than start with
120c0 20 30 20 6f 72 20 31 2c 20 77 65 20 62 65 67 69   0 or 1, we begi
120d0 6e 20 77 69 74 68 20 27 41 27 2e 20 20 54 68 61  n with 'A'.  Tha
120e0 74 20 77 61 79 2c 0a 2a 2a 20 77 68 65 6e 20 6d  t way,.** when m
120f0 75 6c 74 69 70 6c 65 20 61 66 66 69 6e 69 74 79  ultiple affinity
12100 20 74 79 70 65 73 20 61 72 65 20 63 6f 6e 63 61   types are conca
12110 74 65 6e 61 74 65 64 20 69 6e 74 6f 20 61 20 73  tenated into a s
12120 74 72 69 6e 67 20 61 6e 64 0a 2a 2a 20 75 73 65  tring and.** use
12130 64 20 61 73 20 74 68 65 20 50 34 20 6f 70 65 72  d as the P4 oper
12140 61 6e 64 2c 20 74 68 65 79 20 77 69 6c 6c 20 62  and, they will b
12150 65 20 6d 6f 72 65 20 72 65 61 64 61 62 6c 65 2e  e more readable.
12160 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65 20 61 6c 73 6f  .**.** Note also
12170 20 74 68 61 74 20 74 68 65 20 6e 75 6d 65 72 69   that the numeri
12180 63 20 74 79 70 65 73 20 61 72 65 20 67 72 6f 75  c types are grou
12190 70 65 64 20 74 6f 67 65 74 68 65 72 20 73 6f 20  ped together so 
121a0 74 68 61 74 20 74 65 73 74 69 6e 67 0a 2a 2a 20  that testing.** 
121b0 66 6f 72 20 61 20 6e 75 6d 65 72 69 63 20 74 79  for a numeric ty
121c0 70 65 20 69 73 20 61 20 73 69 6e 67 6c 65 20 63  pe is a single c
121d0 6f 6d 70 61 72 69 73 6f 6e 2e 20 20 41 6e 64 20  omparison.  And 
121e0 74 68 65 20 42 4c 4f 42 20 74 79 70 65 20 69 73  the BLOB type is
121f0 20 66 69 72 73 74 2e 0a 2a 2f 0a 23 64 65 66 69   first..*/.#defi
12200 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 42 4c  ne SQLITE_AFF_BL
12210 4f 42 20 20 20 20 20 27 41 27 0a 23 64 65 66 69  OB     'A'.#defi
12220 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 54 45  ne SQLITE_AFF_TE
12230 58 54 20 20 20 20 20 27 42 27 0a 23 64 65 66 69  XT     'B'.#defi
12240 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 4e 55  ne SQLITE_AFF_NU
12250 4d 45 52 49 43 20 20 27 43 27 0a 23 64 65 66 69  MERIC  'C'.#defi
12260 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 49 4e  ne SQLITE_AFF_IN
12270 54 45 47 45 52 20 20 27 44 27 0a 23 64 65 66 69  TEGER  'D'.#defi
12280 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 52 45  ne SQLITE_AFF_RE
12290 41 4c 20 20 20 20 20 27 45 27 0a 0a 23 64 65 66  AL     'E'..#def
122a0 69 6e 65 20 73 71 6c 69 74 65 33 49 73 4e 75 6d  ine sqlite3IsNum
122b0 65 72 69 63 41 66 66 69 6e 69 74 79 28 58 29 20  ericAffinity(X) 
122c0 20 28 28 58 29 3e 3d 53 51 4c 49 54 45 5f 41 46   ((X)>=SQLITE_AF
122d0 46 5f 4e 55 4d 45 52 49 43 29 0a 0a 2f 2a 0a 2a  F_NUMERIC)../*.*
122e0 2a 20 54 68 65 20 53 51 4c 49 54 45 5f 41 46 46  * The SQLITE_AFF
122f0 5f 4d 41 53 4b 20 76 61 6c 75 65 73 20 6d 61 73  _MASK values mas
12300 6b 73 20 6f 66 66 20 74 68 65 20 73 69 67 6e 69  ks off the signi
12310 66 69 63 61 6e 74 20 62 69 74 73 20 6f 66 20 61  ficant bits of a
12320 6e 0a 2a 2a 20 61 66 66 69 6e 69 74 79 20 76 61  n.** affinity va
12330 6c 75 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  lue..*/.#define 
12340 53 51 4c 49 54 45 5f 41 46 46 5f 4d 41 53 4b 20  SQLITE_AFF_MASK 
12350 20 20 20 20 30 78 34 37 0a 0a 2f 2a 0a 2a 2a 20      0x47../*.** 
12360 41 64 64 69 74 69 6f 6e 61 6c 20 62 69 74 20 76  Additional bit v
12370 61 6c 75 65 73 20 74 68 61 74 20 63 61 6e 20 62  alues that can b
12380 65 20 4f 52 65 64 20 77 69 74 68 20 61 6e 20 61  e ORed with an a
12390 66 66 69 6e 69 74 79 20 77 69 74 68 6f 75 74 0a  ffinity without.
123a0 2a 2a 20 63 68 61 6e 67 69 6e 67 20 74 68 65 20  ** changing the 
123b0 61 66 66 69 6e 69 74 79 2e 0a 2a 2a 0a 2a 2a 20  affinity..**.** 
123c0 54 68 65 20 53 51 4c 49 54 45 5f 4e 4f 54 4e 55  The SQLITE_NOTNU
123d0 4c 4c 20 66 6c 61 67 20 69 73 20 61 20 63 6f 6d  LL flag is a com
123e0 62 69 6e 61 74 69 6f 6e 20 6f 66 20 4e 55 4c 4c  bination of NULL
123f0 45 51 20 61 6e 64 20 4a 55 4d 50 49 46 4e 55 4c  EQ and JUMPIFNUL
12400 4c 2e 0a 2a 2a 20 49 74 20 63 61 75 73 65 73 20  L..** It causes 
12410 61 6e 20 61 73 73 65 72 74 28 29 20 74 6f 20 66  an assert() to f
12420 69 72 65 20 69 66 20 65 69 74 68 65 72 20 6f 70  ire if either op
12430 65 72 61 6e 64 20 74 6f 20 61 20 63 6f 6d 70 61  erand to a compa
12440 72 69 73 6f 6e 0a 2a 2a 20 6f 70 65 72 61 74 6f  rison.** operato
12450 72 20 69 73 20 4e 55 4c 4c 2e 20 20 49 74 20 69  r is NULL.  It i
12460 73 20 61 64 64 65 64 20 74 6f 20 63 65 72 74 61  s added to certa
12470 69 6e 20 63 6f 6d 70 61 72 69 73 6f 6e 20 6f 70  in comparison op
12480 65 72 61 74 6f 72 73 20 74 6f 0a 2a 2a 20 70 72  erators to.** pr
12490 6f 76 65 20 74 68 61 74 20 74 68 65 20 6f 70 65  ove that the ope
124a0 72 61 6e 64 73 20 61 72 65 20 61 6c 77 61 79 73  rands are always
124b0 20 4e 4f 54 20 4e 55 4c 4c 2e 0a 2a 2f 0a 23 64   NOT NULL..*/.#d
124c0 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4b 45 45  efine SQLITE_KEE
124d0 50 4e 55 4c 4c 20 20 20 20 20 30 78 30 38 20 20  PNULL     0x08  
124e0 2f 2a 20 55 73 65 64 20 62 79 20 76 65 63 74 6f  /* Used by vecto
124f0 72 20 3d 3d 20 6f 72 20 3c 3e 20 2a 2f 0a 23 64  r == or <> */.#d
12500 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4a 55 4d  efine SQLITE_JUM
12510 50 49 46 4e 55 4c 4c 20 20 20 30 78 31 30 20 20  PIFNULL   0x10  
12520 2f 2a 20 6a 75 6d 70 73 20 69 66 20 65 69 74 68  /* jumps if eith
12530 65 72 20 6f 70 65 72 61 6e 64 20 69 73 20 4e 55  er operand is NU
12540 4c 4c 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  LL */.#define SQ
12550 4c 49 54 45 5f 53 54 4f 52 45 50 32 20 20 20 20  LITE_STOREP2    
12560 20 20 30 78 32 30 20 20 2f 2a 20 53 74 6f 72 65    0x20  /* Store
12570 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67 5b 50   result in reg[P
12580 32 5d 20 72 61 74 68 65 72 20 74 68 61 6e 20 6a  2] rather than j
12590 75 6d 70 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ump */.#define S
125a0 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 20 20 20  QLITE_NULLEQ    
125b0 20 20 20 30 78 38 30 20 20 2f 2a 20 4e 55 4c 4c     0x80  /* NULL
125c0 3d 4e 55 4c 4c 20 2a 2f 0a 23 64 65 66 69 6e 65  =NULL */.#define
125d0 20 53 51 4c 49 54 45 5f 4e 4f 54 4e 55 4c 4c 20   SQLITE_NOTNULL 
125e0 20 20 20 20 20 30 78 39 30 20 20 2f 2a 20 41 73       0x90  /* As
125f0 73 65 72 74 20 74 68 61 74 20 6f 70 65 72 61 6e  sert that operan
12600 64 73 20 61 72 65 20 6e 65 76 65 72 20 4e 55 4c  ds are never NUL
12610 4c 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 6f  L */../*.** An o
12620 62 6a 65 63 74 20 6f 66 20 74 68 69 73 20 74 79  bject of this ty
12630 70 65 20 69 73 20 63 72 65 61 74 65 64 20 66 6f  pe is created fo
12640 72 20 65 61 63 68 20 76 69 72 74 75 61 6c 20 74  r each virtual t
12650 61 62 6c 65 20 70 72 65 73 65 6e 74 20 69 6e 0a  able present in.
12660 2a 2a 20 74 68 65 20 64 61 74 61 62 61 73 65 20  ** the database 
12670 73 63 68 65 6d 61 2e 0a 2a 2a 0a 2a 2a 20 49 66  schema..**.** If
12680 20 74 68 65 20 64 61 74 61 62 61 73 65 20 73 63   the database sc
12690 68 65 6d 61 20 69 73 20 73 68 61 72 65 64 2c 20  hema is shared, 
126a0 74 68 65 6e 20 74 68 65 72 65 20 69 73 20 6f 6e  then there is on
126b0 65 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  e instance of th
126c0 69 73 0a 2a 2a 20 73 74 72 75 63 74 75 72 65 20  is.** structure 
126d0 66 6f 72 20 65 61 63 68 20 64 61 74 61 62 61 73  for each databas
126e0 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 28 73 71  e connection (sq
126f0 6c 69 74 65 33 2a 29 20 74 68 61 74 20 75 73 65  lite3*) that use
12700 73 20 74 68 65 20 73 68 61 72 65 64 0a 2a 2a 20  s the shared.** 
12710 73 63 68 65 6d 61 2e 20 54 68 69 73 20 69 73 20  schema. This is 
12720 62 65 63 61 75 73 65 20 65 61 63 68 20 64 61 74  because each dat
12730 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  abase connection
12740 20 72 65 71 75 69 72 65 73 20 69 74 73 20 6f 77   requires its ow
12750 6e 20 75 6e 69 71 75 65 0a 2a 2a 20 69 6e 73 74  n unique.** inst
12760 61 6e 63 65 20 6f 66 20 74 68 65 20 73 71 6c 69  ance of the sqli
12770 74 65 33 5f 76 74 61 62 2a 20 68 61 6e 64 6c 65  te3_vtab* handle
12780 20 75 73 65 64 20 74 6f 20 61 63 63 65 73 73 20   used to access 
12790 74 68 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c  the virtual tabl
127a0 65 0a 2a 2a 20 69 6d 70 6c 65 6d 65 6e 74 61 74  e.** implementat
127b0 69 6f 6e 2e 20 73 71 6c 69 74 65 33 5f 76 74 61  ion. sqlite3_vta
127c0 62 2a 20 68 61 6e 64 6c 65 73 20 63 61 6e 20 6e  b* handles can n
127d0 6f 74 20 62 65 20 73 68 61 72 65 64 20 62 65 74  ot be shared bet
127e0 77 65 65 6e 0a 2a 2a 20 64 61 74 61 62 61 73 65  ween.** database
127f0 20 63 6f 6e 6e 65 63 74 69 6f 6e 73 2c 20 65 76   connections, ev
12800 65 6e 20 77 68 65 6e 20 74 68 65 20 72 65 73 74  en when the rest
12810 20 6f 66 20 74 68 65 20 69 6e 2d 6d 65 6d 6f 72   of the in-memor
12820 79 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 73 63  y database.** sc
12830 68 65 6d 61 20 69 73 20 73 68 61 72 65 64 2c 20  hema is shared, 
12840 61 73 20 74 68 65 20 69 6d 70 6c 65 6d 65 6e 74  as the implement
12850 61 74 69 6f 6e 20 6f 66 74 65 6e 20 73 74 6f 72  ation often stor
12860 65 73 20 74 68 65 20 64 61 74 61 62 61 73 65 0a  es the database.
12870 2a 2a 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61  ** connection ha
12880 6e 64 6c 65 20 70 61 73 73 65 64 20 74 6f 20 69  ndle passed to i
12890 74 20 76 69 61 20 74 68 65 20 78 43 6f 6e 6e 65  t via the xConne
128a0 63 74 28 29 20 6f 72 20 78 43 72 65 61 74 65 28  ct() or xCreate(
128b0 29 20 6d 65 74 68 6f 64 0a 2a 2a 20 64 75 72 69  ) method.** duri
128c0 6e 67 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f  ng initializatio
128d0 6e 20 69 6e 74 65 72 6e 61 6c 6c 79 2e 20 54 68  n internally. Th
128e0 69 73 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e  is database conn
128f0 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65 20 6d 61  ection handle ma
12900 79 0a 2a 2a 20 74 68 65 6e 20 62 65 20 75 73 65  y.** then be use
12910 64 20 62 79 20 74 68 65 20 76 69 72 74 75 61 6c  d by the virtual
12920 20 74 61 62 6c 65 20 69 6d 70 6c 65 6d 65 6e 74   table implement
12930 61 74 69 6f 6e 20 74 6f 20 61 63 63 65 73 73 20  ation to access 
12940 72 65 61 6c 20 74 61 62 6c 65 73 0a 2a 2a 20 77  real tables.** w
12950 69 74 68 69 6e 20 74 68 65 20 64 61 74 61 62 61  ithin the databa
12960 73 65 2e 20 53 6f 20 74 68 61 74 20 74 68 65 79  se. So that they
12970 20 61 70 70 65 61 72 20 61 73 20 70 61 72 74 20   appear as part 
12980 6f 66 20 74 68 65 20 63 61 6c 6c 65 72 73 0a 2a  of the callers.*
12990 2a 20 74 72 61 6e 73 61 63 74 69 6f 6e 2c 20 74  * transaction, t
129a0 68 65 73 65 20 61 63 63 65 73 73 65 73 20 6e 65  hese accesses ne
129b0 65 64 20 74 6f 20 62 65 20 6d 61 64 65 20 76 69  ed to be made vi
129c0 61 20 74 68 65 20 73 61 6d 65 20 64 61 74 61 62  a the same datab
129d0 61 73 65 0a 2a 2a 20 63 6f 6e 6e 65 63 74 69 6f  ase.** connectio
129e0 6e 20 61 73 20 74 68 61 74 20 75 73 65 64 20 74  n as that used t
129f0 6f 20 65 78 65 63 75 74 65 20 53 51 4c 20 6f 70  o execute SQL op
12a00 65 72 61 74 69 6f 6e 73 20 6f 6e 20 74 68 65 20  erations on the 
12a10 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2e 0a 2a  virtual table..*
12a20 2a 0a 2a 2a 20 41 6c 6c 20 56 54 61 62 6c 65 20  *.** All VTable 
12a30 6f 62 6a 65 63 74 73 20 74 68 61 74 20 63 6f 72  objects that cor
12a40 72 65 73 70 6f 6e 64 20 74 6f 20 61 20 73 69 6e  respond to a sin
12a50 67 6c 65 20 74 61 62 6c 65 20 69 6e 20 61 20 73  gle table in a s
12a60 68 61 72 65 64 0a 2a 2a 20 64 61 74 61 62 61 73  hared.** databas
12a70 65 20 73 63 68 65 6d 61 20 61 72 65 20 69 6e 69  e schema are ini
12a80 74 69 61 6c 6c 79 20 73 74 6f 72 65 64 20 69 6e  tially stored in
12a90 20 61 20 6c 69 6e 6b 65 64 2d 6c 69 73 74 20 70   a linked-list p
12aa0 6f 69 6e 74 65 64 20 74 6f 20 62 79 0a 2a 2a 20  ointed to by.** 
12ab0 74 68 65 20 54 61 62 6c 65 2e 70 56 54 61 62 6c  the Table.pVTabl
12ac0 65 20 6d 65 6d 62 65 72 20 76 61 72 69 61 62 6c  e member variabl
12ad0 65 20 6f 66 20 74 68 65 20 63 6f 72 72 65 73 70  e of the corresp
12ae0 6f 6e 64 69 6e 67 20 54 61 62 6c 65 20 6f 62 6a  onding Table obj
12af0 65 63 74 2e 0a 2a 2a 20 57 68 65 6e 20 61 6e 20  ect..** When an 
12b00 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 28  sqlite3_prepare(
12b10 29 20 6f 70 65 72 61 74 69 6f 6e 20 69 73 20 72  ) operation is r
12b20 65 71 75 69 72 65 64 20 74 6f 20 61 63 63 65 73  equired to acces
12b30 73 20 74 68 65 20 76 69 72 74 75 61 6c 0a 2a 2a  s the virtual.**
12b40 20 74 61 62 6c 65 2c 20 69 74 20 73 65 61 72 63   table, it searc
12b50 68 65 73 20 74 68 65 20 6c 69 73 74 20 66 6f 72  hes the list for
12b60 20 74 68 65 20 56 54 61 62 6c 65 20 74 68 61 74   the VTable that
12b70 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20   corresponds to 
12b80 74 68 65 0a 2a 2a 20 64 61 74 61 62 61 73 65 20  the.** database 
12b90 63 6f 6e 6e 65 63 74 69 6f 6e 20 64 6f 69 6e 67  connection doing
12ba0 20 74 68 65 20 70 72 65 70 61 72 69 6e 67 20 73   the preparing s
12bb0 6f 20 61 73 20 74 6f 20 75 73 65 20 74 68 65 20  o as to use the 
12bc0 63 6f 72 72 65 63 74 0a 2a 2a 20 73 71 6c 69 74  correct.** sqlit
12bd0 65 33 5f 76 74 61 62 2a 20 68 61 6e 64 6c 65 20  e3_vtab* handle 
12be0 69 6e 20 74 68 65 20 63 6f 6d 70 69 6c 65 64 20  in the compiled 
12bf0 71 75 65 72 79 2e 0a 2a 2a 0a 2a 2a 20 57 68 65  query..**.** Whe
12c00 6e 20 61 6e 20 69 6e 2d 6d 65 6d 6f 72 79 20 54  n an in-memory T
12c10 61 62 6c 65 20 6f 62 6a 65 63 74 20 69 73 20 64  able object is d
12c20 65 6c 65 74 65 64 20 28 66 6f 72 20 65 78 61 6d  eleted (for exam
12c30 70 6c 65 20 77 68 65 6e 20 74 68 65 0a 2a 2a 20  ple when the.** 
12c40 73 63 68 65 6d 61 20 69 73 20 62 65 69 6e 67 20  schema is being 
12c50 72 65 6c 6f 61 64 65 64 20 66 6f 72 20 73 6f 6d  reloaded for som
12c60 65 20 72 65 61 73 6f 6e 29 2c 20 74 68 65 20 56  e reason), the V
12c70 54 61 62 6c 65 20 6f 62 6a 65 63 74 73 20 61 72  Table objects ar
12c80 65 20 6e 6f 74 0a 2a 2a 20 64 65 6c 65 74 65 64  e not.** deleted
12c90 20 61 6e 64 20 74 68 65 20 73 71 6c 69 74 65 33   and the sqlite3
12ca0 5f 76 74 61 62 2a 20 68 61 6e 64 6c 65 73 20 61  _vtab* handles a
12cb0 72 65 20 6e 6f 74 20 78 44 69 73 63 6f 6e 6e 65  re not xDisconne
12cc0 63 74 28 29 65 64 0a 2a 2a 20 69 6d 6d 65 64 69  ct()ed.** immedi
12cd0 61 74 65 6c 79 2e 20 49 6e 73 74 65 61 64 2c 20  ately. Instead, 
12ce0 74 68 65 79 20 61 72 65 20 6d 6f 76 65 64 20 66  they are moved f
12cf0 72 6f 6d 20 74 68 65 20 54 61 62 6c 65 2e 70 56  rom the Table.pV
12d00 54 61 62 6c 65 20 6c 69 73 74 20 74 6f 0a 2a 2a  Table list to.**
12d10 20 61 6e 6f 74 68 65 72 20 6c 69 6e 6b 65 64 20   another linked 
12d20 6c 69 73 74 20 68 65 61 64 65 64 20 62 79 20 74  list headed by t
12d30 68 65 20 73 71 6c 69 74 65 33 2e 70 44 69 73 63  he sqlite3.pDisc
12d40 6f 6e 6e 65 63 74 20 6d 65 6d 62 65 72 20 6f 66  onnect member of
12d50 20 74 68 65 0a 2a 2a 20 63 6f 72 72 65 73 70 6f   the.** correspo
12d60 6e 64 69 6e 67 20 73 71 6c 69 74 65 33 20 73 74  nding sqlite3 st
12d70 72 75 63 74 75 72 65 2e 20 54 68 65 79 20 61 72  ructure. They ar
12d80 65 20 74 68 65 6e 20 64 65 6c 65 74 65 64 2f 78  e then deleted/x
12d90 44 69 73 63 6f 6e 6e 65 63 74 65 64 0a 2a 2a 20  Disconnected.** 
12da0 6e 65 78 74 20 74 69 6d 65 20 61 20 73 74 61 74  next time a stat
12db0 65 6d 65 6e 74 20 69 73 20 70 72 65 70 61 72 65  ement is prepare
12dc0 64 20 75 73 69 6e 67 20 73 61 69 64 20 73 71 6c  d using said sql
12dd0 69 74 65 33 2a 2e 20 54 68 69 73 20 69 73 20 64  ite3*. This is d
12de0 6f 6e 65 0a 2a 2a 20 74 6f 20 61 76 6f 69 64 20  one.** to avoid 
12df0 64 65 61 64 6c 6f 63 6b 20 69 73 73 75 65 73 20  deadlock issues 
12e00 69 6e 76 6f 6c 76 69 6e 67 20 6d 75 6c 74 69 70  involving multip
12e10 6c 65 20 73 71 6c 69 74 65 33 2e 6d 75 74 65 78  le sqlite3.mutex
12e20 20 6d 75 74 65 78 65 73 2e 0a 2a 2a 20 52 65 66   mutexes..** Ref
12e30 65 72 20 74 6f 20 63 6f 6d 6d 65 6e 74 73 20 61  er to comments a
12e40 62 6f 76 65 20 66 75 6e 63 74 69 6f 6e 20 73 71  bove function sq
12e50 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f 63 6b 4c  lite3VtabUnlockL
12e60 69 73 74 28 29 20 66 6f 72 20 61 6e 0a 2a 2a 20  ist() for an.** 
12e70 65 78 70 6c 61 6e 61 74 69 6f 6e 20 61 73 20 74  explanation as t
12e80 6f 20 77 68 79 20 69 74 20 69 73 20 73 61 66 65  o why it is safe
12e90 20 74 6f 20 61 64 64 20 61 6e 20 65 6e 74 72 79   to add an entry
12ea0 20 74 6f 20 61 6e 20 73 71 6c 69 74 65 33 2e 70   to an sqlite3.p
12eb0 44 69 73 63 6f 6e 6e 65 63 74 0a 2a 2a 20 6c 69  Disconnect.** li
12ec0 73 74 20 77 69 74 68 6f 75 74 20 68 6f 6c 64 69  st without holdi
12ed0 6e 67 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e  ng the correspon
12ee0 64 69 6e 67 20 73 71 6c 69 74 65 33 2e 6d 75 74  ding sqlite3.mut
12ef0 65 78 20 6d 75 74 65 78 2e 0a 2a 2a 0a 2a 2a 20  ex mutex..**.** 
12f00 54 68 65 20 6d 65 6d 6f 72 79 20 66 6f 72 20 6f  The memory for o
12f10 62 6a 65 63 74 73 20 6f 66 20 74 68 69 73 20 74  bjects of this t
12f20 79 70 65 20 69 73 20 61 6c 77 61 79 73 20 61 6c  ype is always al
12f30 6c 6f 63 61 74 65 64 20 62 79 0a 2a 2a 20 73 71  located by.** sq
12f40 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 28 29 2c  lite3DbMalloc(),
12f50 20 75 73 69 6e 67 20 74 68 65 20 63 6f 6e 6e 65   using the conne
12f60 63 74 69 6f 6e 20 68 61 6e 64 6c 65 20 73 74 6f  ction handle sto
12f70 72 65 64 20 69 6e 20 56 54 61 62 6c 65 2e 64 62  red in VTable.db
12f80 20 61 73 0a 2a 2a 20 74 68 65 20 66 69 72 73 74   as.** the first
12f90 20 61 72 67 75 6d 65 6e 74 2e 0a 2a 2f 0a 73 74   argument..*/.st
12fa0 72 75 63 74 20 56 54 61 62 6c 65 20 7b 0a 20 20  ruct VTable {.  
12fb0 73 71 6c 69 74 65 33 20 2a 64 62 3b 20 20 20 20  sqlite3 *db;    
12fc0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 61 74            /* Dat
12fd0 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  abase connection
12fe0 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68   associated with
12ff0 20 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20   this table */. 
13000 20 4d 6f 64 75 6c 65 20 2a 70 4d 6f 64 3b 20 20   Module *pMod;  
13010 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50 6f             /* Po
13020 69 6e 74 65 72 20 74 6f 20 6d 6f 64 75 6c 65 20  inter to module 
13030 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 2a  implementation *
13040 2f 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61 62  /.  sqlite3_vtab
13050 20 2a 70 56 74 61 62 3b 20 20 20 20 20 20 2f 2a   *pVtab;      /*
13060 20 50 6f 69 6e 74 65 72 20 74 6f 20 76 74 61 62   Pointer to vtab
13070 20 69 6e 73 74 61 6e 63 65 20 2a 2f 0a 20 20 69   instance */.  i
13080 6e 74 20 6e 52 65 66 3b 20 20 20 20 20 20 20 20  nt nRef;        
13090 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
130a0 65 72 20 6f 66 20 70 6f 69 6e 74 65 72 73 20 74  er of pointers t
130b0 6f 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65  o this structure
130c0 20 2a 2f 0a 20 20 75 38 20 62 43 6f 6e 73 74 72   */.  u8 bConstr
130d0 61 69 6e 74 3b 20 20 20 20 20 20 20 20 20 20 20  aint;           
130e0 2f 2a 20 54 72 75 65 20 69 66 20 63 6f 6e 73 74  /* True if const
130f0 72 61 69 6e 74 73 20 61 72 65 20 73 75 70 70 6f  raints are suppo
13100 72 74 65 64 20 2a 2f 0a 20 20 69 6e 74 20 69 53  rted */.  int iS
13110 61 76 65 70 6f 69 6e 74 3b 20 20 20 20 20 20 20  avepoint;       
13120 20 20 20 20 2f 2a 20 44 65 70 74 68 20 6f 66 20      /* Depth of 
13130 74 68 65 20 53 41 56 45 50 4f 49 4e 54 20 73 74  the SAVEPOINT st
13140 61 63 6b 20 2a 2f 0a 20 20 56 54 61 62 6c 65 20  ack */.  VTable 
13150 2a 70 4e 65 78 74 3b 20 20 20 20 20 20 20 20 20  *pNext;         
13160 20 20 20 2f 2a 20 4e 65 78 74 20 69 6e 20 6c 69     /* Next in li
13170 6e 6b 65 64 20 6c 69 73 74 20 28 73 65 65 20 61  nked list (see a
13180 62 6f 76 65 29 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a  bove) */.};../*.
13190 2a 2a 20 54 68 65 20 73 63 68 65 6d 61 20 66 6f  ** The schema fo
131a0 72 20 65 61 63 68 20 53 51 4c 20 74 61 62 6c 65  r each SQL table
131b0 20 61 6e 64 20 76 69 65 77 20 69 73 20 72 65 70   and view is rep
131c0 72 65 73 65 6e 74 65 64 20 69 6e 20 6d 65 6d 6f  resented in memo
131d0 72 79 0a 2a 2a 20 62 79 20 61 6e 20 69 6e 73 74  ry.** by an inst
131e0 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c  ance of the foll
131f0 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 2e  owing structure.
13200 0a 2a 2f 0a 73 74 72 75 63 74 20 54 61 62 6c 65  .*/.struct Table
13210 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65   {.  char *zName
13220 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d  ;         /* Nam
13230 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 6f  e of the table o
13240 72 20 76 69 65 77 20 2a 2f 0a 20 20 43 6f 6c 75  r view */.  Colu
13250 6d 6e 20 2a 61 43 6f 6c 3b 20 20 20 20 20 20 20  mn *aCol;       
13260 20 2f 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20   /* Information 
13270 61 62 6f 75 74 20 65 61 63 68 20 63 6f 6c 75 6d  about each colum
13280 6e 20 2a 2f 0a 20 20 49 6e 64 65 78 20 2a 70 49  n */.  Index *pI
13290 6e 64 65 78 3b 20 20 20 20 20 20 20 2f 2a 20 4c  ndex;       /* L
132a0 69 73 74 20 6f 66 20 53 51 4c 20 69 6e 64 65 78  ist of SQL index
132b0 65 73 20 6f 6e 20 74 68 69 73 20 74 61 62 6c 65  es on this table
132c0 2e 20 2a 2f 0a 20 20 53 65 6c 65 63 74 20 2a 70  . */.  Select *p
132d0 53 65 6c 65 63 74 3b 20 20 20 20 20 2f 2a 20 4e  Select;     /* N
132e0 55 4c 4c 20 66 6f 72 20 74 61 62 6c 65 73 2e 20  ULL for tables. 
132f0 20 50 6f 69 6e 74 73 20 74 6f 20 64 65 66 69 6e   Points to defin
13300 69 74 69 6f 6e 20 69 66 20 61 20 76 69 65 77 2e  ition if a view.
13310 20 2a 2f 0a 20 20 46 4b 65 79 20 2a 70 46 4b 65   */.  FKey *pFKe
13320 79 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 69  y;         /* Li
13330 6e 6b 65 64 20 6c 69 73 74 20 6f 66 20 61 6c 6c  nked list of all
13340 20 66 6f 72 65 69 67 6e 20 6b 65 79 73 20 69 6e   foreign keys in
13350 20 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20   this table */. 
13360 20 63 68 61 72 20 2a 7a 43 6f 6c 41 66 66 3b 20   char *zColAff; 
13370 20 20 20 20 20 20 2f 2a 20 53 74 72 69 6e 67 20        /* String 
13380 64 65 66 69 6e 69 6e 67 20 74 68 65 20 61 66 66  defining the aff
13390 69 6e 69 74 79 20 6f 66 20 65 61 63 68 20 63 6f  inity of each co
133a0 6c 75 6d 6e 20 2a 2f 0a 20 20 45 78 70 72 4c 69  lumn */.  ExprLi
133b0 73 74 20 2a 70 43 68 65 63 6b 3b 20 20 20 20 2f  st *pCheck;    /
133c0 2a 20 41 6c 6c 20 43 48 45 43 4b 20 63 6f 6e 73  * All CHECK cons
133d0 74 72 61 69 6e 74 73 20 2a 2f 0a 20 20 20 20 20  traints */.     
133e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
133f0 20 20 2f 2a 20 20 20 2e 2e 2e 20 61 6c 73 6f 20    /*   ... also 
13400 75 73 65 64 20 61 73 20 63 6f 6c 75 6d 6e 20 6e  used as column n
13410 61 6d 65 20 6c 69 73 74 20 69 6e 20 61 20 56 49  ame list in a VI
13420 45 57 20 2a 2f 0a 20 20 69 6e 74 20 74 6e 75 6d  EW */.  int tnum
13430 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
13440 52 6f 6f 74 20 42 54 72 65 65 20 70 61 67 65 20  Root BTree page 
13450 66 6f 72 20 74 68 69 73 20 74 61 62 6c 65 20 2a  for this table *
13460 2f 0a 20 20 75 33 32 20 6e 54 61 62 52 65 66 3b  /.  u32 nTabRef;
13470 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
13480 65 72 20 6f 66 20 70 6f 69 6e 74 65 72 73 20 74  er of pointers t
13490 6f 20 74 68 69 73 20 54 61 62 6c 65 20 2a 2f 0a  o this Table */.
134a0 20 20 75 33 32 20 74 61 62 46 6c 61 67 73 3b 20    u32 tabFlags; 
134b0 20 20 20 20 20 20 20 2f 2a 20 4d 61 73 6b 20 6f         /* Mask o
134c0 66 20 54 46 5f 2a 20 76 61 6c 75 65 73 20 2a 2f  f TF_* values */
134d0 0a 20 20 69 31 36 20 69 50 4b 65 79 3b 20 20 20  .  i16 iPKey;   
134e0 20 20 20 20 20 20 20 20 2f 2a 20 49 66 20 6e 6f          /* If no
134f0 74 20 6e 65 67 61 74 69 76 65 2c 20 75 73 65 20  t negative, use 
13500 61 43 6f 6c 5b 69 50 4b 65 79 5d 20 61 73 20 74  aCol[iPKey] as t
13510 68 65 20 72 6f 77 69 64 20 2a 2f 0a 20 20 69 31  he rowid */.  i1
13520 36 20 6e 43 6f 6c 3b 20 20 20 20 20 20 20 20 20  6 nCol;         
13530 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
13540 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 69 73 20  columns in this 
13550 74 61 62 6c 65 20 2a 2f 0a 20 20 4c 6f 67 45 73  table */.  LogEs
13560 74 20 6e 52 6f 77 4c 6f 67 45 73 74 3b 20 20 20  t nRowLogEst;   
13570 2f 2a 20 45 73 74 69 6d 61 74 65 64 20 72 6f 77  /* Estimated row
13580 73 20 69 6e 20 74 61 62 6c 65 20 2d 20 66 72 6f  s in table - fro
13590 6d 20 73 71 6c 69 74 65 5f 73 74 61 74 31 20 74  m sqlite_stat1 t
135a0 61 62 6c 65 20 2a 2f 0a 20 20 4c 6f 67 45 73 74  able */.  LogEst
135b0 20 73 7a 54 61 62 52 6f 77 3b 20 20 20 20 20 2f   szTabRow;     /
135c0 2a 20 45 73 74 69 6d 61 74 65 64 20 73 69 7a 65  * Estimated size
135d0 20 6f 66 20 65 61 63 68 20 74 61 62 6c 65 20 72   of each table r
135e0 6f 77 20 69 6e 20 62 79 74 65 73 20 2a 2f 0a 23  ow in bytes */.#
135f0 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  ifdef SQLITE_ENA
13600 42 4c 45 5f 43 4f 53 54 4d 55 4c 54 0a 20 20 4c  BLE_COSTMULT.  L
13610 6f 67 45 73 74 20 63 6f 73 74 4d 75 6c 74 3b 20  ogEst costMult; 
13620 20 20 20 20 2f 2a 20 43 6f 73 74 20 6d 75 6c 74      /* Cost mult
13630 69 70 6c 69 65 72 20 66 6f 72 20 75 73 69 6e 67  iplier for using
13640 20 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 23   this table */.#
13650 65 6e 64 69 66 0a 20 20 75 38 20 6b 65 79 43 6f  endif.  u8 keyCo
13660 6e 66 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  nf;          /* 
13670 57 68 61 74 20 74 6f 20 64 6f 20 69 6e 20 63 61  What to do in ca
13680 73 65 20 6f 66 20 75 6e 69 71 75 65 6e 65 73 73  se of uniqueness
13690 20 63 6f 6e 66 6c 69 63 74 20 6f 6e 20 69 50 4b   conflict on iPK
136a0 65 79 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51  ey */.#ifndef SQ
136b0 4c 49 54 45 5f 4f 4d 49 54 5f 41 4c 54 45 52 54  LITE_OMIT_ALTERT
136c0 41 42 4c 45 0a 20 20 69 6e 74 20 61 64 64 43 6f  ABLE.  int addCo
136d0 6c 4f 66 66 73 65 74 3b 20 20 20 20 2f 2a 20 4f  lOffset;    /* O
136e0 66 66 73 65 74 20 69 6e 20 43 52 45 41 54 45 20  ffset in CREATE 
136f0 54 41 42 4c 45 20 73 74 6d 74 20 74 6f 20 61 64  TABLE stmt to ad
13700 64 20 61 20 6e 65 77 20 63 6f 6c 75 6d 6e 20 2a  d a new column *
13710 2f 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66  /.#endif.#ifndef
13720 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
13730 54 55 41 4c 54 41 42 4c 45 0a 20 20 69 6e 74 20  TUALTABLE.  int 
13740 6e 4d 6f 64 75 6c 65 41 72 67 3b 20 20 20 20 20  nModuleArg;     
13750 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 72   /* Number of ar
13760 67 75 6d 65 6e 74 73 20 74 6f 20 74 68 65 20 6d  guments to the m
13770 6f 64 75 6c 65 20 2a 2f 0a 20 20 63 68 61 72 20  odule */.  char 
13780 2a 2a 61 7a 4d 6f 64 75 6c 65 41 72 67 3b 20 20  **azModuleArg;  
13790 2f 2a 20 30 3a 20 6d 6f 64 75 6c 65 20 31 3a 20  /* 0: module 1: 
137a0 73 63 68 65 6d 61 20 32 3a 20 76 74 61 62 20 6e  schema 2: vtab n
137b0 61 6d 65 20 33 2e 2e 2e 3a 20 61 72 67 73 20 2a  ame 3...: args *
137c0 2f 0a 20 20 56 54 61 62 6c 65 20 2a 70 56 54 61  /.  VTable *pVTa
137d0 62 6c 65 3b 20 20 20 20 20 2f 2a 20 4c 69 73 74  ble;     /* List
137e0 20 6f 66 20 56 54 61 62 6c 65 20 6f 62 6a 65 63   of VTable objec
137f0 74 73 2e 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20  ts. */.#endif.  
13800 54 72 69 67 67 65 72 20 2a 70 54 72 69 67 67 65  Trigger *pTrigge
13810 72 3b 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20  r;   /* List of 
13820 74 72 69 67 67 65 72 73 20 73 74 6f 72 65 64 20  triggers stored 
13830 69 6e 20 70 53 63 68 65 6d 61 20 2a 2f 0a 20 20  in pSchema */.  
13840 53 63 68 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b  Schema *pSchema;
13850 20 20 20 20 20 2f 2a 20 53 63 68 65 6d 61 20 74       /* Schema t
13860 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 74 68 69  hat contains thi
13870 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20 54 61 62  s table */.  Tab
13880 6c 65 20 2a 70 4e 65 78 74 5a 6f 6d 62 69 65 3b  le *pNextZombie;
13890 20 20 2f 2a 20 4e 65 78 74 20 6f 6e 20 74 68 65    /* Next on the
138a0 20 50 61 72 73 65 2e 70 5a 6f 6d 62 69 65 54 61   Parse.pZombieTa
138b0 62 20 6c 69 73 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  b list */.};../*
138c0 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75  .** Allowed valu
138d0 65 73 20 66 6f 72 20 54 61 62 6c 65 2e 74 61 62  es for Table.tab
138e0 46 6c 61 67 73 2e 0a 2a 2a 0a 2a 2a 20 54 46 5f  Flags..**.** TF_
138f0 4f 4f 4f 48 69 64 64 65 6e 20 61 70 70 6c 69 65  OOOHidden applie
13900 73 20 74 6f 20 74 61 62 6c 65 73 20 6f 72 20 76  s to tables or v
13910 69 65 77 20 74 68 61 74 20 68 61 76 65 20 68 69  iew that have hi
13920 64 64 65 6e 20 63 6f 6c 75 6d 6e 73 20 74 68 61  dden columns tha
13930 74 20 61 72 65 0a 2a 2a 20 66 6f 6c 6c 6f 77 65  t are.** followe
13940 64 20 62 79 20 6e 6f 6e 2d 68 69 64 64 65 6e 20  d by non-hidden 
13950 63 6f 6c 75 6d 6e 73 2e 20 20 45 78 61 6d 70 6c  columns.  Exampl
13960 65 3a 20 20 22 43 52 45 41 54 45 20 56 49 52 54  e:  "CREATE VIRT
13970 55 41 4c 20 54 41 42 4c 45 20 78 20 55 53 49 4e  UAL TABLE x USIN
13980 47 0a 2a 2a 20 76 74 61 62 31 28 61 20 48 49 44  G.** vtab1(a HID
13990 44 45 4e 2c 20 62 29 3b 22 2e 20 20 53 69 6e 63  DEN, b);".  Sinc
139a0 65 20 22 62 22 20 69 73 20 61 20 6e 6f 6e 2d 68  e "b" is a non-h
139b0 69 64 64 65 6e 20 63 6f 6c 75 6d 6e 20 62 75 74  idden column but
139c0 20 22 61 22 20 69 73 20 68 69 64 64 65 6e 2c 0a   "a" is hidden,.
139d0 2a 2a 20 74 68 65 20 54 46 5f 4f 4f 4f 48 69 64  ** the TF_OOOHid
139e0 64 65 6e 20 61 74 74 72 69 62 75 74 65 20 77 6f  den attribute wo
139f0 75 6c 64 20 61 70 70 6c 79 20 69 6e 20 74 68 69  uld apply in thi
13a00 73 20 63 61 73 65 2e 20 20 53 75 63 68 20 74 61  s case.  Such ta
13a10 62 6c 65 73 20 72 65 71 75 69 72 65 0a 2a 2a 20  bles require.** 
13a20 73 70 65 63 69 61 6c 20 68 61 6e 64 6c 69 6e 67  special handling
13a30 20 64 75 72 69 6e 67 20 49 4e 53 45 52 54 20 70   during INSERT p
13a40 72 6f 63 65 73 73 69 6e 67 2e 0a 2a 2f 0a 23 64  rocessing..*/.#d
13a50 65 66 69 6e 65 20 54 46 5f 52 65 61 64 6f 6e 6c  efine TF_Readonl
13a60 79 20 20 20 20 20 20 20 20 30 78 30 30 30 31 20  y        0x0001 
13a70 20 20 20 2f 2a 20 52 65 61 64 2d 6f 6e 6c 79 20     /* Read-only 
13a80 73 79 73 74 65 6d 20 74 61 62 6c 65 20 2a 2f 0a  system table */.
13a90 23 64 65 66 69 6e 65 20 54 46 5f 45 70 68 65 6d  #define TF_Ephem
13aa0 65 72 61 6c 20 20 20 20 20 20 20 30 78 30 30 30  eral       0x000
13ab0 32 20 20 20 20 2f 2a 20 41 6e 20 65 70 68 65 6d  2    /* An ephem
13ac0 65 72 61 6c 20 74 61 62 6c 65 20 2a 2f 0a 23 64  eral table */.#d
13ad0 65 66 69 6e 65 20 54 46 5f 48 61 73 50 72 69 6d  efine TF_HasPrim
13ae0 61 72 79 4b 65 79 20 20 20 30 78 30 30 30 34 20  aryKey   0x0004 
13af0 20 20 20 2f 2a 20 54 61 62 6c 65 20 68 61 73 20     /* Table has 
13b00 61 20 70 72 69 6d 61 72 79 20 6b 65 79 20 2a 2f  a primary key */
13b10 0a 23 64 65 66 69 6e 65 20 54 46 5f 41 75 74 6f  .#define TF_Auto
13b20 69 6e 63 72 65 6d 65 6e 74 20 20 20 30 78 30 30  increment   0x00
13b30 30 38 20 20 20 20 2f 2a 20 49 6e 74 65 67 65 72  08    /* Integer
13b40 20 70 72 69 6d 61 72 79 20 6b 65 79 20 69 73 20   primary key is 
13b50 61 75 74 6f 69 6e 63 72 65 6d 65 6e 74 20 2a 2f  autoincrement */
13b60 0a 23 64 65 66 69 6e 65 20 54 46 5f 48 61 73 53  .#define TF_HasS
13b70 74 61 74 31 20 20 20 20 20 20 20 20 30 78 30 30  tat1        0x00
13b80 31 30 20 20 20 20 2f 2a 20 6e 52 6f 77 4c 6f 67  10    /* nRowLog
13b90 45 73 74 20 73 65 74 20 66 72 6f 6d 20 73 71 6c  Est set from sql
13ba0 69 74 65 5f 73 74 61 74 31 20 2a 2f 0a 23 64 65  ite_stat1 */.#de
13bb0 66 69 6e 65 20 54 46 5f 57 69 74 68 6f 75 74 52  fine TF_WithoutR
13bc0 6f 77 69 64 20 20 20 20 30 78 30 30 32 30 20 20  owid    0x0020  
13bd0 20 20 2f 2a 20 4e 6f 20 72 6f 77 69 64 2e 20 20    /* No rowid.  
13be0 50 52 49 4d 41 52 59 20 4b 45 59 20 69 73 20 74  PRIMARY KEY is t
13bf0 68 65 20 6b 65 79 20 2a 2f 0a 23 64 65 66 69 6e  he key */.#defin
13c00 65 20 54 46 5f 4e 6f 56 69 73 69 62 6c 65 52 6f  e TF_NoVisibleRo
13c10 77 69 64 20 20 30 78 30 30 34 30 20 20 20 20 2f  wid  0x0040    /
13c20 2a 20 4e 6f 20 75 73 65 72 2d 76 69 73 69 62 6c  * No user-visibl
13c30 65 20 22 72 6f 77 69 64 22 20 63 6f 6c 75 6d 6e  e "rowid" column
13c40 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 4f   */.#define TF_O
13c50 4f 4f 48 69 64 64 65 6e 20 20 20 20 20 20 20 30  OOHidden       0
13c60 78 30 30 38 30 20 20 20 20 2f 2a 20 4f 75 74 2d  x0080    /* Out-
13c70 6f 66 2d 4f 72 64 65 72 20 68 69 64 64 65 6e 20  of-Order hidden 
13c80 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 23 64 65 66 69  columns */.#defi
13c90 6e 65 20 54 46 5f 53 74 61 74 73 55 73 65 64 20  ne TF_StatsUsed 
13ca0 20 20 20 20 20 20 30 78 30 31 30 30 20 20 20 20        0x0100    
13cb0 2f 2a 20 51 75 65 72 79 20 70 6c 61 6e 6e 65 72  /* Query planner
13cc0 20 64 65 63 69 73 69 6f 6e 73 20 61 66 66 65 63   decisions affec
13cd0 74 65 64 20 62 79 0a 20 20 20 20 20 20 20 20 20  ted by.         
13ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13cf0 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 49              ** I
13d00 6e 64 65 78 2e 61 69 52 6f 77 4c 6f 67 45 73 74  ndex.aiRowLogEst
13d10 5b 5d 20 76 61 6c 75 65 73 20 2a 2f 0a 23 64 65  [] values */.#de
13d20 66 69 6e 65 20 54 46 5f 48 61 73 4e 6f 74 4e 75  fine TF_HasNotNu
13d30 6c 6c 20 20 20 20 20 20 30 78 30 32 30 30 20 20  ll      0x0200  
13d40 20 20 2f 2a 20 43 6f 6e 74 61 69 6e 73 20 4e 4f    /* Contains NO
13d50 54 20 4e 55 4c 4c 20 63 6f 6e 73 74 72 61 69 6e  T NULL constrain
13d60 74 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46  ts */.#define TF
13d70 5f 53 68 61 64 6f 77 20 20 20 20 20 20 20 20 20  _Shadow         
13d80 20 30 78 30 34 30 30 20 20 20 20 2f 2a 20 54 72   0x0400    /* Tr
13d90 75 65 20 66 6f 72 20 61 20 73 68 61 64 6f 77 20  ue for a shadow 
13da0 74 61 62 6c 65 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20  table */../*.** 
13db0 54 65 73 74 20 74 6f 20 73 65 65 20 77 68 65 74  Test to see whet
13dc0 68 65 72 20 6f 72 20 6e 6f 74 20 61 20 74 61 62  her or not a tab
13dd0 6c 65 20 69 73 20 61 20 76 69 72 74 75 61 6c 20  le is a virtual 
13de0 74 61 62 6c 65 2e 20 20 54 68 69 73 20 69 73 0a  table.  This is.
13df0 2a 2a 20 64 6f 6e 65 20 61 73 20 61 20 6d 61 63  ** done as a mac
13e00 72 6f 20 73 6f 20 74 68 61 74 20 69 74 20 77 69  ro so that it wi
13e10 6c 6c 20 62 65 20 6f 70 74 69 6d 69 7a 65 64 20  ll be optimized 
13e20 6f 75 74 20 77 68 65 6e 20 76 69 72 74 75 61 6c  out when virtual
13e30 0a 2a 2a 20 74 61 62 6c 65 20 73 75 70 70 6f 72  .** table suppor
13e40 74 20 69 73 20 6f 6d 69 74 74 65 64 20 66 72 6f  t is omitted fro
13e50 6d 20 74 68 65 20 62 75 69 6c 64 2e 0a 2a 2f 0a  m the build..*/.
13e60 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
13e70 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
13e80 0a 23 20 20 64 65 66 69 6e 65 20 49 73 56 69 72  .#  define IsVir
13e90 74 75 61 6c 28 58 29 20 20 20 20 20 20 28 28 58  tual(X)      ((X
13ea0 29 2d 3e 6e 4d 6f 64 75 6c 65 41 72 67 29 0a 23  )->nModuleArg).#
13eb0 65 6c 73 65 0a 23 20 20 64 65 66 69 6e 65 20 49  else.#  define I
13ec0 73 56 69 72 74 75 61 6c 28 58 29 20 20 20 20 20  sVirtual(X)     
13ed0 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a   0.#endif../*.**
13ee0 20 4d 61 63 72 6f 73 20 74 6f 20 64 65 74 65 72   Macros to deter
13ef0 6d 69 6e 65 20 69 66 20 61 20 63 6f 6c 75 6d 6e  mine if a column
13f00 20 69 73 20 68 69 64 64 65 6e 2e 20 20 49 73 4f   is hidden.  IsO
13f10 72 64 69 6e 61 72 79 48 69 64 64 65 6e 43 6f 6c  rdinaryHiddenCol
13f20 75 6d 6e 28 29 0a 2a 2a 20 6f 6e 6c 79 20 77 6f  umn().** only wo
13f30 72 6b 73 20 66 6f 72 20 6e 6f 6e 2d 76 69 72 74  rks for non-virt
13f40 75 61 6c 20 74 61 62 6c 65 73 20 28 6f 72 64 69  ual tables (ordi
13f50 6e 61 72 79 20 74 61 62 6c 65 73 20 61 6e 64 20  nary tables and 
13f60 76 69 65 77 73 29 20 61 6e 64 20 69 73 0a 2a 2a  views) and is.**
13f70 20 61 6c 77 61 79 73 20 66 61 6c 73 65 20 75 6e   always false un
13f80 6c 65 73 73 20 53 51 4c 49 54 45 5f 45 4e 41 42  less SQLITE_ENAB
13f90 4c 45 5f 48 49 44 44 45 4e 5f 43 4f 4c 55 4d 4e  LE_HIDDEN_COLUMN
13fa0 53 20 69 73 20 64 65 66 69 6e 65 64 2e 20 20 54  S is defined.  T
13fb0 68 65 0a 2a 2a 20 49 73 48 69 64 64 65 6e 43 6f  he.** IsHiddenCo
13fc0 6c 75 6d 6e 28 29 20 6d 61 63 72 6f 20 69 73 20  lumn() macro is 
13fd0 67 65 6e 65 72 61 6c 20 70 75 72 70 6f 73 65 2e  general purpose.
13fe0 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28  .*/.#if defined(
13ff0 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 48 49  SQLITE_ENABLE_HI
14000 44 44 45 4e 5f 43 4f 4c 55 4d 4e 53 29 0a 23 20  DDEN_COLUMNS).# 
14010 20 64 65 66 69 6e 65 20 49 73 48 69 64 64 65 6e   define IsHidden
14020 43 6f 6c 75 6d 6e 28 58 29 20 20 20 20 20 20 20  Column(X)       
14030 20 20 28 28 28 58 29 2d 3e 63 6f 6c 46 6c 61 67    (((X)->colFlag
14040 73 20 26 20 43 4f 4c 46 4c 41 47 5f 48 49 44 44  s & COLFLAG_HIDD
14050 45 4e 29 21 3d 30 29 0a 23 20 20 64 65 66 69 6e  EN)!=0).#  defin
14060 65 20 49 73 4f 72 64 69 6e 61 72 79 48 69 64 64  e IsOrdinaryHidd
14070 65 6e 43 6f 6c 75 6d 6e 28 58 29 20 28 28 28 58  enColumn(X) (((X
14080 29 2d 3e 63 6f 6c 46 6c 61 67 73 20 26 20 43 4f  )->colFlags & CO
14090 4c 46 4c 41 47 5f 48 49 44 44 45 4e 29 21 3d 30  LFLAG_HIDDEN)!=0
140a0 29 0a 23 65 6c 69 66 20 21 64 65 66 69 6e 65 64  ).#elif !defined
140b0 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52  (SQLITE_OMIT_VIR
140c0 54 55 41 4c 54 41 42 4c 45 29 0a 23 20 20 64 65  TUALTABLE).#  de
140d0 66 69 6e 65 20 49 73 48 69 64 64 65 6e 43 6f 6c  fine IsHiddenCol
140e0 75 6d 6e 28 58 29 20 20 20 20 20 20 20 20 20 28  umn(X)         (
140f0 28 28 58 29 2d 3e 63 6f 6c 46 6c 61 67 73 20 26  ((X)->colFlags &
14100 20 43 4f 4c 46 4c 41 47 5f 48 49 44 44 45 4e 29   COLFLAG_HIDDEN)
14110 21 3d 30 29 0a 23 20 20 64 65 66 69 6e 65 20 49  !=0).#  define I
14120 73 4f 72 64 69 6e 61 72 79 48 69 64 64 65 6e 43  sOrdinaryHiddenC
14130 6f 6c 75 6d 6e 28 58 29 20 30 0a 23 65 6c 73 65  olumn(X) 0.#else
14140 0a 23 20 20 64 65 66 69 6e 65 20 49 73 48 69 64  .#  define IsHid
14150 64 65 6e 43 6f 6c 75 6d 6e 28 58 29 20 20 20 20  denColumn(X)    
14160 20 20 20 20 20 30 0a 23 20 20 64 65 66 69 6e 65       0.#  define
14170 20 49 73 4f 72 64 69 6e 61 72 79 48 69 64 64 65   IsOrdinaryHidde
14180 6e 43 6f 6c 75 6d 6e 28 58 29 20 30 0a 23 65 6e  nColumn(X) 0.#en
14190 64 69 66 0a 0a 0a 2f 2a 20 44 6f 65 73 20 74 68  dif.../* Does th
141a0 65 20 74 61 62 6c 65 20 68 61 76 65 20 61 20 72  e table have a r
141b0 6f 77 69 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20  owid */.#define 
141c0 48 61 73 52 6f 77 69 64 28 58 29 20 20 20 20 20  HasRowid(X)     
141d0 28 28 28 58 29 2d 3e 74 61 62 46 6c 61 67 73 20  (((X)->tabFlags 
141e0 26 20 54 46 5f 57 69 74 68 6f 75 74 52 6f 77 69  & TF_WithoutRowi
141f0 64 29 3d 3d 30 29 0a 23 64 65 66 69 6e 65 20 56  d)==0).#define V
14200 69 73 69 62 6c 65 52 6f 77 69 64 28 58 29 20 28  isibleRowid(X) (
14210 28 28 58 29 2d 3e 74 61 62 46 6c 61 67 73 20 26  ((X)->tabFlags &
14220 20 54 46 5f 4e 6f 56 69 73 69 62 6c 65 52 6f 77   TF_NoVisibleRow
14230 69 64 29 3d 3d 30 29 0a 0a 2f 2a 0a 2a 2a 20 45  id)==0)../*.** E
14240 61 63 68 20 66 6f 72 65 69 67 6e 20 6b 65 79 20  ach foreign key 
14250 63 6f 6e 73 74 72 61 69 6e 74 20 69 73 20 61 6e  constraint is an
14260 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65   instance of the
14270 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63   following struc
14280 74 75 72 65 2e 0a 2a 2a 0a 2a 2a 20 41 20 66 6f  ture..**.** A fo
14290 72 65 69 67 6e 20 6b 65 79 20 69 73 20 61 73 73  reign key is ass
142a0 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 77 6f  ociated with two
142b0 20 74 61 62 6c 65 73 2e 20 20 54 68 65 20 22 66   tables.  The "f
142c0 72 6f 6d 22 20 74 61 62 6c 65 20 69 73 0a 2a 2a  rom" table is.**
142d0 20 74 68 65 20 74 61 62 6c 65 20 74 68 61 74 20   the table that 
142e0 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 52 45 46  contains the REF
142f0 45 52 45 4e 43 45 53 20 63 6c 61 75 73 65 20 74  ERENCES clause t
14300 68 61 74 20 63 72 65 61 74 65 73 20 74 68 65 20  hat creates the 
14310 66 6f 72 65 69 67 6e 0a 2a 2a 20 6b 65 79 2e 20  foreign.** key. 
14320 20 54 68 65 20 22 74 6f 22 20 74 61 62 6c 65 20   The "to" table 
14330 69 73 20 74 68 65 20 74 61 62 6c 65 20 74 68 61  is the table tha
14340 74 20 69 73 20 6e 61 6d 65 64 20 69 6e 20 74 68  t is named in th
14350 65 20 52 45 46 45 52 45 4e 43 45 53 20 63 6c 61  e REFERENCES cla
14360 75 73 65 2e 0a 2a 2a 20 43 6f 6e 73 69 64 65 72  use..** Consider
14370 20 74 68 69 73 20 65 78 61 6d 70 6c 65 3a 0a 2a   this example:.*
14380 2a 0a 2a 2a 20 20 20 20 20 43 52 45 41 54 45 20  *.**     CREATE 
14390 54 41 42 4c 45 20 65 78 31 28 0a 2a 2a 20 20 20  TABLE ex1(.**   
143a0 20 20 20 20 61 20 49 4e 54 45 47 45 52 20 50 52      a INTEGER PR
143b0 49 4d 41 52 59 20 4b 45 59 2c 0a 2a 2a 20 20 20  IMARY KEY,.**   
143c0 20 20 20 20 62 20 49 4e 54 45 47 45 52 20 43 4f      b INTEGER CO
143d0 4e 53 54 52 41 49 4e 54 20 66 6b 31 20 52 45 46  NSTRAINT fk1 REF
143e0 45 52 45 4e 43 45 53 20 65 78 32 28 78 29 0a 2a  ERENCES ex2(x).*
143f0 2a 20 20 20 20 20 29 3b 0a 2a 2a 0a 2a 2a 20 46  *     );.**.** F
14400 6f 72 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 22  or foreign key "
14410 66 6b 31 22 2c 20 74 68 65 20 66 72 6f 6d 2d 74  fk1", the from-t
14420 61 62 6c 65 20 69 73 20 22 65 78 31 22 20 61 6e  able is "ex1" an
14430 64 20 74 68 65 20 74 6f 2d 74 61 62 6c 65 20 69  d the to-table i
14440 73 20 22 65 78 32 22 2e 0a 2a 2a 20 45 71 75 69  s "ex2"..** Equi
14450 76 61 6c 65 6e 74 20 6e 61 6d 65 73 3a 0a 2a 2a  valent names:.**
14460 0a 2a 2a 20 20 20 20 20 66 72 6f 6d 2d 74 61 62  .**     from-tab
14470 6c 65 20 3d 3d 20 63 68 69 6c 64 2d 74 61 62 6c  le == child-tabl
14480 65 0a 2a 2a 20 20 20 20 20 20 20 74 6f 2d 74 61  e.**       to-ta
14490 62 6c 65 20 3d 3d 20 70 61 72 65 6e 74 2d 74 61  ble == parent-ta
144a0 62 6c 65 0a 2a 2a 0a 2a 2a 20 45 61 63 68 20 52  ble.**.** Each R
144b0 45 46 45 52 45 4e 43 45 53 20 63 6c 61 75 73 65  EFERENCES clause
144c0 20 67 65 6e 65 72 61 74 65 73 20 61 6e 20 69 6e   generates an in
144d0 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f  stance of the fo
144e0 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72  llowing structur
144f0 65 0a 2a 2a 20 77 68 69 63 68 20 69 73 20 61 74  e.** which is at
14500 74 61 63 68 65 64 20 74 6f 20 74 68 65 20 66 72  tached to the fr
14510 6f 6d 2d 74 61 62 6c 65 2e 20 20 54 68 65 20 74  om-table.  The t
14520 6f 2d 74 61 62 6c 65 20 6e 65 65 64 20 6e 6f 74  o-table need not
14530 20 65 78 69 73 74 20 77 68 65 6e 0a 2a 2a 20 74   exist when.** t
14540 68 65 20 66 72 6f 6d 2d 74 61 62 6c 65 20 69 73  he from-table is
14550 20 63 72 65 61 74 65 64 2e 20 20 54 68 65 20 65   created.  The e
14560 78 69 73 74 65 6e 63 65 20 6f 66 20 74 68 65 20  xistence of the 
14570 74 6f 2d 74 61 62 6c 65 20 69 73 20 6e 6f 74 20  to-table is not 
14580 63 68 65 63 6b 65 64 2e 0a 2a 2a 0a 2a 2a 20 54  checked..**.** T
14590 68 65 20 6c 69 73 74 20 6f 66 20 61 6c 6c 20 70  he list of all p
145a0 61 72 65 6e 74 73 20 66 6f 72 20 63 68 69 6c 64  arents for child
145b0 20 54 61 62 6c 65 20 58 20 69 73 20 68 65 6c 64   Table X is held
145c0 20 61 74 20 58 2e 70 46 4b 65 79 2e 0a 2a 2a 0a   at X.pFKey..**.
145d0 2a 2a 20 41 20 6c 69 73 74 20 6f 66 20 61 6c 6c  ** A list of all
145e0 20 63 68 69 6c 64 72 65 6e 20 66 6f 72 20 61 20   children for a 
145f0 74 61 62 6c 65 20 6e 61 6d 65 64 20 5a 20 28 77  table named Z (w
14600 68 69 63 68 20 6d 69 67 68 74 20 6e 6f 74 20 65  hich might not e
14610 76 65 6e 20 65 78 69 73 74 29 0a 2a 2a 20 69 73  ven exist).** is
14620 20 68 65 6c 64 20 69 6e 20 53 63 68 65 6d 61 2e   held in Schema.
14630 66 6b 65 79 48 61 73 68 20 77 69 74 68 20 61 20  fkeyHash with a 
14640 68 61 73 68 20 6b 65 79 20 6f 66 20 5a 2e 0a 2a  hash key of Z..*
14650 2f 0a 73 74 72 75 63 74 20 46 4b 65 79 20 7b 0a  /.struct FKey {.
14660 20 20 54 61 62 6c 65 20 2a 70 46 72 6f 6d 3b 20    Table *pFrom; 
14670 20 20 20 20 2f 2a 20 54 61 62 6c 65 20 63 6f 6e      /* Table con
14680 74 61 69 6e 69 6e 67 20 74 68 65 20 52 45 46 45  taining the REFE
14690 52 45 4e 43 45 53 20 63 6c 61 75 73 65 20 28 61  RENCES clause (a
146a0 6b 61 3a 20 43 68 69 6c 64 29 20 2a 2f 0a 20 20  ka: Child) */.  
146b0 46 4b 65 79 20 2a 70 4e 65 78 74 46 72 6f 6d 3b  FKey *pNextFrom;
146c0 20 20 2f 2a 20 4e 65 78 74 20 46 4b 65 79 20 77    /* Next FKey w
146d0 69 74 68 20 74 68 65 20 73 61 6d 65 20 69 6e 20  ith the same in 
146e0 70 46 72 6f 6d 2e 20 4e 65 78 74 20 70 61 72 65  pFrom. Next pare
146f0 6e 74 20 6f 66 20 70 46 72 6f 6d 20 2a 2f 0a 20  nt of pFrom */. 
14700 20 63 68 61 72 20 2a 7a 54 6f 3b 20 20 20 20 20   char *zTo;     
14710 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 61     /* Name of ta
14720 62 6c 65 20 74 68 61 74 20 74 68 65 20 6b 65 79  ble that the key
14730 20 70 6f 69 6e 74 73 20 74 6f 20 28 61 6b 61 3a   points to (aka:
14740 20 50 61 72 65 6e 74 29 20 2a 2f 0a 20 20 46 4b   Parent) */.  FK
14750 65 79 20 2a 70 4e 65 78 74 54 6f 3b 20 20 20 20  ey *pNextTo;    
14760 2f 2a 20 4e 65 78 74 20 77 69 74 68 20 74 68 65  /* Next with the
14770 20 73 61 6d 65 20 7a 54 6f 2e 20 4e 65 78 74 20   same zTo. Next 
14780 63 68 69 6c 64 20 6f 66 20 7a 54 6f 2e 20 2a 2f  child of zTo. */
14790 0a 20 20 46 4b 65 79 20 2a 70 50 72 65 76 54 6f  .  FKey *pPrevTo
147a0 3b 20 20 20 20 2f 2a 20 50 72 65 76 69 6f 75 73  ;    /* Previous
147b0 20 77 69 74 68 20 74 68 65 20 73 61 6d 65 20 7a   with the same z
147c0 54 6f 20 2a 2f 0a 20 20 69 6e 74 20 6e 43 6f 6c  To */.  int nCol
147d0 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d  ;         /* Num
147e0 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69  ber of columns i
147f0 6e 20 74 68 69 73 20 6b 65 79 20 2a 2f 0a 20 20  n this key */.  
14800 2f 2a 20 45 56 3a 20 52 2d 33 30 33 32 33 2d 32  /* EV: R-30323-2
14810 31 39 31 37 20 2a 2f 0a 20 20 75 38 20 69 73 44  1917 */.  u8 isD
14820 65 66 65 72 72 65 64 3b 20 20 20 20 20 20 20 2f  eferred;       /
14830 2a 20 54 72 75 65 20 69 66 20 63 6f 6e 73 74 72  * True if constr
14840 61 69 6e 74 20 63 68 65 63 6b 69 6e 67 20 69 73  aint checking is
14850 20 64 65 66 65 72 72 65 64 20 74 69 6c 6c 20 43   deferred till C
14860 4f 4d 4d 49 54 20 2a 2f 0a 20 20 75 38 20 61 41  OMMIT */.  u8 aA
14870 63 74 69 6f 6e 5b 32 5d 3b 20 20 20 20 20 20 20  ction[2];       
14880 20 2f 2a 20 4f 4e 20 44 45 4c 45 54 45 20 61 6e   /* ON DELETE an
14890 64 20 4f 4e 20 55 50 44 41 54 45 20 61 63 74 69  d ON UPDATE acti
148a0 6f 6e 73 2c 20 72 65 73 70 65 63 74 69 76 65 6c  ons, respectivel
148b0 79 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 20 2a  y */.  Trigger *
148c0 61 70 54 72 69 67 67 65 72 5b 32 5d 3b 2f 2a 20  apTrigger[2];/* 
148d0 54 72 69 67 67 65 72 73 20 66 6f 72 20 61 41 63  Triggers for aAc
148e0 74 69 6f 6e 5b 5d 20 61 63 74 69 6f 6e 73 20 2a  tion[] actions *
148f0 2f 0a 20 20 73 74 72 75 63 74 20 73 43 6f 6c 4d  /.  struct sColM
14900 61 70 20 7b 20 20 20 20 20 20 2f 2a 20 4d 61 70  ap {      /* Map
14910 70 69 6e 67 20 6f 66 20 63 6f 6c 75 6d 6e 73 20  ping of columns 
14920 69 6e 20 70 46 72 6f 6d 20 74 6f 20 63 6f 6c 75  in pFrom to colu
14930 6d 6e 73 20 69 6e 20 7a 54 6f 20 2a 2f 0a 20 20  mns in zTo */.  
14940 20 20 69 6e 74 20 69 46 72 6f 6d 3b 20 20 20 20    int iFrom;    
14950 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 64 65 78          /* Index
14960 20 6f 66 20 63 6f 6c 75 6d 6e 20 69 6e 20 70 46   of column in pF
14970 72 6f 6d 20 2a 2f 0a 20 20 20 20 63 68 61 72 20  rom */.    char 
14980 2a 7a 43 6f 6c 3b 20 20 20 20 20 20 20 20 20 20  *zCol;          
14990 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 63 6f 6c 75   /* Name of colu
149a0 6d 6e 20 69 6e 20 7a 54 6f 2e 20 20 49 66 20 4e  mn in zTo.  If N
149b0 55 4c 4c 20 75 73 65 20 50 52 49 4d 41 52 59 20  ULL use PRIMARY 
149c0 4b 45 59 20 2a 2f 0a 20 20 7d 20 61 43 6f 6c 5b  KEY */.  } aCol[
149d0 31 5d 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  1];            /
149e0 2a 20 4f 6e 65 20 65 6e 74 72 79 20 66 6f 72 20  * One entry for 
149f0 65 61 63 68 20 6f 66 20 6e 43 6f 6c 20 63 6f 6c  each of nCol col
14a00 75 6d 6e 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  umns */.};../*.*
14a10 2a 20 53 51 4c 69 74 65 20 73 75 70 70 6f 72 74  * SQLite support
14a20 73 20 6d 61 6e 79 20 64 69 66 66 65 72 65 6e 74  s many different
14a30 20 77 61 79 73 20 74 6f 20 72 65 73 6f 6c 76 65   ways to resolve
14a40 20 61 20 63 6f 6e 73 74 72 61 69 6e 74 0a 2a 2a   a constraint.**
14a50 20 65 72 72 6f 72 2e 20 20 52 4f 4c 4c 42 41 43   error.  ROLLBAC
14a60 4b 20 70 72 6f 63 65 73 73 69 6e 67 20 6d 65 61  K processing mea
14a70 6e 73 20 74 68 61 74 20 61 20 63 6f 6e 73 74 72  ns that a constr
14a80 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 0a 2a  aint violation.*
14a90 2a 20 63 61 75 73 65 73 20 74 68 65 20 6f 70 65  * causes the ope
14aa0 72 61 74 69 6f 6e 20 69 6e 20 70 72 6f 63 65 73  ration in proces
14ab0 73 20 74 6f 20 66 61 69 6c 20 61 6e 64 20 66 6f  s to fail and fo
14ac0 72 20 74 68 65 20 63 75 72 72 65 6e 74 20 74 72  r the current tr
14ad0 61 6e 73 61 63 74 69 6f 6e 0a 2a 2a 20 74 6f 20  ansaction.** to 
14ae0 62 65 20 72 6f 6c 6c 65 64 20 62 61 63 6b 2e 20  be rolled back. 
14af0 20 41 42 4f 52 54 20 70 72 6f 63 65 73 73 69 6e   ABORT processin
14b00 67 20 6d 65 61 6e 73 20 74 68 65 20 6f 70 65 72  g means the oper
14b10 61 74 69 6f 6e 20 69 6e 20 70 72 6f 63 65 73 73  ation in process
14b20 0a 2a 2a 20 66 61 69 6c 73 20 61 6e 64 20 61 6e  .** fails and an
14b30 79 20 70 72 69 6f 72 20 63 68 61 6e 67 65 73 20  y prior changes 
14b40 66 72 6f 6d 20 74 68 61 74 20 6f 6e 65 20 6f 70  from that one op
14b50 65 72 61 74 69 6f 6e 20 61 72 65 20 62 61 63 6b  eration are back
14b60 65 64 20 6f 75 74 2c 0a 2a 2a 20 62 75 74 20 74  ed out,.** but t
14b70 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69  he transaction i
14b80 73 20 6e 6f 74 20 72 6f 6c 6c 65 64 20 62 61 63  s not rolled bac
14b90 6b 2e 20 20 46 41 49 4c 20 70 72 6f 63 65 73 73  k.  FAIL process
14ba0 69 6e 67 20 6d 65 61 6e 73 20 74 68 61 74 0a 2a  ing means that.*
14bb0 2a 20 74 68 65 20 6f 70 65 72 61 74 69 6f 6e 20  * the operation 
14bc0 69 6e 20 70 72 6f 67 72 65 73 73 20 73 74 6f 70  in progress stop
14bd0 73 20 61 6e 64 20 72 65 74 75 72 6e 73 20 61 6e  s and returns an
14be0 20 65 72 72 6f 72 20 63 6f 64 65 2e 20 20 42 75   error code.  Bu
14bf0 74 20 70 72 69 6f 72 0a 2a 2a 20 63 68 61 6e 67  t prior.** chang
14c00 65 73 20 64 75 65 20 74 6f 20 74 68 65 20 73 61  es due to the sa
14c10 6d 65 20 6f 70 65 72 61 74 69 6f 6e 20 61 72 65  me operation are
14c20 20 6e 6f 74 20 62 61 63 6b 65 64 20 6f 75 74 20   not backed out 
14c30 61 6e 64 20 6e 6f 20 72 6f 6c 6c 62 61 63 6b 0a  and no rollback.
14c40 2a 2a 20 6f 63 63 75 72 73 2e 20 20 49 47 4e 4f  ** occurs.  IGNO
14c50 52 45 20 6d 65 61 6e 73 20 74 68 61 74 20 74 68  RE means that th
14c60 65 20 70 61 72 74 69 63 75 6c 61 72 20 72 6f 77  e particular row
14c70 20 74 68 61 74 20 63 61 75 73 65 64 20 74 68 65   that caused the
14c80 20 63 6f 6e 73 74 72 61 69 6e 74 0a 2a 2a 20 65   constraint.** e
14c90 72 72 6f 72 20 69 73 20 6e 6f 74 20 69 6e 73 65  rror is not inse
14ca0 72 74 65 64 20 6f 72 20 75 70 64 61 74 65 64 2e  rted or updated.
14cb0 20 20 50 72 6f 63 65 73 73 69 6e 67 20 63 6f 6e    Processing con
14cc0 74 69 6e 75 65 73 20 61 6e 64 20 6e 6f 20 65 72  tinues and no er
14cd0 72 6f 72 0a 2a 2a 20 69 73 20 72 65 74 75 72 6e  ror.** is return
14ce0 65 64 2e 20 20 52 45 50 4c 41 43 45 20 6d 65 61  ed.  REPLACE mea
14cf0 6e 73 20 74 68 61 74 20 70 72 65 65 78 69 73 74  ns that preexist
14d00 69 6e 67 20 64 61 74 61 62 61 73 65 20 72 6f 77  ing database row
14d10 73 20 74 68 61 74 20 63 61 75 73 65 64 0a 2a 2a  s that caused.**
14d20 20 61 20 55 4e 49 51 55 45 20 63 6f 6e 73 74 72   a UNIQUE constr
14d30 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 20 61  aint violation a
14d40 72 65 20 72 65 6d 6f 76 65 64 20 73 6f 20 74 68  re removed so th
14d50 61 74 20 74 68 65 20 6e 65 77 20 69 6e 73 65 72  at the new inser
14d60 74 20 6f 72 0a 2a 2a 20 75 70 64 61 74 65 20 63  t or.** update c
14d70 61 6e 20 70 72 6f 63 65 65 64 2e 20 20 50 72 6f  an proceed.  Pro
14d80 63 65 73 73 69 6e 67 20 63 6f 6e 74 69 6e 75 65  cessing continue
14d90 73 20 61 6e 64 20 6e 6f 20 65 72 72 6f 72 20 69  s and no error i
14da0 73 20 72 65 70 6f 72 74 65 64 2e 0a 2a 2a 0a 2a  s reported..**.*
14db0 2a 20 52 45 53 54 52 49 43 54 2c 20 53 45 54 4e  * RESTRICT, SETN
14dc0 55 4c 4c 2c 20 61 6e 64 20 43 41 53 43 41 44 45  ULL, and CASCADE
14dd0 20 61 63 74 69 6f 6e 73 20 61 70 70 6c 79 20 6f   actions apply o
14de0 6e 6c 79 20 74 6f 20 66 6f 72 65 69 67 6e 20 6b  nly to foreign k
14df0 65 79 73 2e 0a 2a 2a 20 52 45 53 54 52 49 43 54  eys..** RESTRICT
14e00 20 69 73 20 74 68 65 20 73 61 6d 65 20 61 73 20   is the same as 
14e10 41 42 4f 52 54 20 66 6f 72 20 49 4d 4d 45 44 49  ABORT for IMMEDI
14e20 41 54 45 20 66 6f 72 65 69 67 6e 20 6b 65 79 73  ATE foreign keys
14e30 20 61 6e 64 20 74 68 65 0a 2a 2a 20 73 61 6d 65   and the.** same
14e40 20 61 73 20 52 4f 4c 4c 42 41 43 4b 20 66 6f 72   as ROLLBACK for
14e50 20 44 45 46 45 52 52 45 44 20 6b 65 79 73 2e 20   DEFERRED keys. 
14e60 20 53 45 54 4e 55 4c 4c 20 6d 65 61 6e 73 20 74   SETNULL means t
14e70 68 61 74 20 74 68 65 20 66 6f 72 65 69 67 6e 0a  hat the foreign.
14e80 2a 2a 20 6b 65 79 20 69 73 20 73 65 74 20 74 6f  ** key is set to
14e90 20 4e 55 4c 4c 2e 20 20 43 41 53 43 41 44 45 20   NULL.  CASCADE 
14ea0 6d 65 61 6e 73 20 74 68 61 74 20 61 20 44 45 4c  means that a DEL
14eb0 45 54 45 20 6f 72 20 55 50 44 41 54 45 20 6f 66  ETE or UPDATE of
14ec0 20 74 68 65 0a 2a 2a 20 72 65 66 65 72 65 6e 63   the.** referenc
14ed0 65 64 20 74 61 62 6c 65 20 72 6f 77 20 69 73 20  ed table row is 
14ee0 70 72 6f 70 61 67 61 74 65 64 20 69 6e 74 6f 20  propagated into 
14ef0 74 68 65 20 72 6f 77 20 74 68 61 74 20 68 6f 6c  the row that hol
14f00 64 73 20 74 68 65 0a 2a 2a 20 66 6f 72 65 69 67  ds the.** foreig
14f10 6e 20 6b 65 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  n key..**.** The
14f20 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 79 6d 62 6f   following symbo
14f30 6c 69 63 20 76 61 6c 75 65 73 20 61 72 65 20 75  lic values are u
14f40 73 65 64 20 74 6f 20 72 65 63 6f 72 64 20 77 68  sed to record wh
14f50 69 63 68 20 74 79 70 65 0a 2a 2a 20 6f 66 20 61  ich type.** of a
14f60 63 74 69 6f 6e 20 74 6f 20 74 61 6b 65 2e 0a 2a  ction to take..*
14f70 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 4e 6f 6e  /.#define OE_Non
14f80 65 20 20 20 20 20 30 20 20 20 2f 2a 20 54 68 65  e     0   /* The
14f90 72 65 20 69 73 20 6e 6f 20 63 6f 6e 73 74 72 61  re is no constra
14fa0 69 6e 74 20 74 6f 20 63 68 65 63 6b 20 2a 2f 0a  int to check */.
14fb0 23 64 65 66 69 6e 65 20 4f 45 5f 52 6f 6c 6c 62  #define OE_Rollb
14fc0 61 63 6b 20 31 20 20 20 2f 2a 20 46 61 69 6c 20  ack 1   /* Fail 
14fd0 74 68 65 20 6f 70 65 72 61 74 69 6f 6e 20 61 6e  the operation an
14fe0 64 20 72 6f 6c 6c 62 61 63 6b 20 74 68 65 20 74  d rollback the t
14ff0 72 61 6e 73 61 63 74 69 6f 6e 20 2a 2f 0a 23 64  ransaction */.#d
15000 65 66 69 6e 65 20 4f 45 5f 41 62 6f 72 74 20 20  efine OE_Abort  
15010 20 20 32 20 20 20 2f 2a 20 42 61 63 6b 20 6f 75    2   /* Back ou
15020 74 20 63 68 61 6e 67 65 73 20 62 75 74 20 64 6f  t changes but do
15030 20 6e 6f 20 72 6f 6c 6c 62 61 63 6b 20 74 72 61   no rollback tra
15040 6e 73 61 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66  nsaction */.#def
15050 69 6e 65 20 4f 45 5f 46 61 69 6c 20 20 20 20 20  ine OE_Fail     
15060 33 20 20 20 2f 2a 20 53 74 6f 70 20 74 68 65 20  3   /* Stop the 
15070 6f 70 65 72 61 74 69 6f 6e 20 62 75 74 20 6c 65  operation but le
15080 61 76 65 20 61 6c 6c 20 70 72 69 6f 72 20 63 68  ave all prior ch
15090 61 6e 67 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65  anges */.#define
150a0 20 4f 45 5f 49 67 6e 6f 72 65 20 20 20 34 20 20   OE_Ignore   4  
150b0 20 2f 2a 20 49 67 6e 6f 72 65 20 74 68 65 20 65   /* Ignore the e
150c0 72 72 6f 72 2e 20 44 6f 20 6e 6f 74 20 64 6f 20  rror. Do not do 
150d0 74 68 65 20 49 4e 53 45 52 54 20 6f 72 20 55 50  the INSERT or UP
150e0 44 41 54 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20  DATE */.#define 
150f0 4f 45 5f 52 65 70 6c 61 63 65 20 20 35 20 20 20  OE_Replace  5   
15100 2f 2a 20 44 65 6c 65 74 65 20 65 78 69 73 74 69  /* Delete existi
15110 6e 67 20 72 65 63 6f 72 64 2c 20 74 68 65 6e 20  ng record, then 
15120 64 6f 20 49 4e 53 45 52 54 20 6f 72 20 55 50 44  do INSERT or UPD
15130 41 54 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  ATE */.#define O
15140 45 5f 55 70 64 61 74 65 20 20 20 36 20 20 20 2f  E_Update   6   /
15150 2a 20 50 72 6f 63 65 73 73 20 61 73 20 61 20 44  * Process as a D
15160 4f 20 55 50 44 41 54 45 20 69 6e 20 61 6e 20 75  O UPDATE in an u
15170 70 73 65 72 74 20 2a 2f 0a 23 64 65 66 69 6e 65  psert */.#define
15180 20 4f 45 5f 52 65 73 74 72 69 63 74 20 37 20 20   OE_Restrict 7  
15190 20 2f 2a 20 4f 45 5f 41 62 6f 72 74 20 66 6f 72   /* OE_Abort for
151a0 20 49 4d 4d 45 44 49 41 54 45 2c 20 4f 45 5f 52   IMMEDIATE, OE_R
151b0 6f 6c 6c 62 61 63 6b 20 66 6f 72 20 44 45 46 45  ollback for DEFE
151c0 52 52 45 44 20 2a 2f 0a 23 64 65 66 69 6e 65 20  RRED */.#define 
151d0 4f 45 5f 53 65 74 4e 75 6c 6c 20 20 38 20 20 20  OE_SetNull  8   
151e0 2f 2a 20 53 65 74 20 74 68 65 20 66 6f 72 65 69  /* Set the forei
151f0 67 6e 20 6b 65 79 20 76 61 6c 75 65 20 74 6f 20  gn key value to 
15200 4e 55 4c 4c 20 2a 2f 0a 23 64 65 66 69 6e 65 20  NULL */.#define 
15210 4f 45 5f 53 65 74 44 66 6c 74 20 20 39 20 20 20  OE_SetDflt  9   
15220 2f 2a 20 53 65 74 20 74 68 65 20 66 6f 72 65 69  /* Set the forei
15230 67 6e 20 6b 65 79 20 76 61 6c 75 65 20 74 6f 20  gn key value to 
15240 69 74 73 20 64 65 66 61 75 6c 74 20 2a 2f 0a 23  its default */.#
15250 64 65 66 69 6e 65 20 4f 45 5f 43 61 73 63 61 64  define OE_Cascad
15260 65 20 20 31 30 20 20 2f 2a 20 43 61 73 63 61 64  e  10  /* Cascad
15270 65 20 74 68 65 20 63 68 61 6e 67 65 73 20 2a 2f  e the changes */
15280 0a 23 64 65 66 69 6e 65 20 4f 45 5f 44 65 66 61  .#define OE_Defa
15290 75 6c 74 20 20 31 31 20 20 2f 2a 20 44 6f 20 77  ult  11  /* Do w
152a0 68 61 74 65 76 65 72 20 74 68 65 20 64 65 66 61  hatever the defa
152b0 75 6c 74 20 61 63 74 69 6f 6e 20 69 73 20 2a 2f  ult action is */
152c0 0a 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74  .../*.** An inst
152d0 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c  ance of the foll
152e0 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 20  owing structure 
152f0 69 73 20 70 61 73 73 65 64 20 61 73 20 74 68 65  is passed as the
15300 20 66 69 72 73 74 0a 2a 2a 20 61 72 67 75 6d 65   first.** argume
15310 6e 74 20 74 6f 20 73 71 6c 69 74 65 33 56 64 62  nt to sqlite3Vdb
15320 65 4b 65 79 43 6f 6d 70 61 72 65 20 61 6e 64 20  eKeyCompare and 
15330 69 73 20 75 73 65 64 20 74 6f 20 63 6f 6e 74 72  is used to contr
15340 6f 6c 20 74 68 65 0a 2a 2a 20 63 6f 6d 70 61 72  ol the.** compar
15350 69 73 6f 6e 20 6f 66 20 74 68 65 20 74 77 6f 20  ison of the two 
15360 69 6e 64 65 78 20 6b 65 79 73 2e 0a 2a 2a 0a 2a  index keys..**.*
15370 2a 20 4e 6f 74 65 20 74 68 61 74 20 61 53 6f 72  * Note that aSor
15380 74 4f 72 64 65 72 5b 5d 20 61 6e 64 20 61 43 6f  tOrder[] and aCo
15390 6c 6c 5b 5d 20 68 61 76 65 20 6e 46 69 65 6c 64  ll[] have nField
153a0 2b 31 20 73 6c 6f 74 73 2e 20 20 54 68 65 72 65  +1 slots.  There
153b0 0a 2a 2a 20 61 72 65 20 6e 46 69 65 6c 64 20 73  .** are nField s
153c0 6c 6f 74 73 20 66 6f 72 20 74 68 65 20 63 6f 6c  lots for the col
153d0 75 6d 6e 73 20 6f 66 20 61 6e 20 69 6e 64 65 78  umns of an index
153e0 20 74 68 65 6e 20 6f 6e 65 20 65 78 74 72 61 20   then one extra 
153f0 73 6c 6f 74 0a 2a 2a 20 66 6f 72 20 74 68 65 20  slot.** for the 
15400 72 6f 77 69 64 20 61 74 20 74 68 65 20 65 6e 64  rowid at the end
15410 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 4b 65 79 49  ..*/.struct KeyI
15420 6e 66 6f 20 7b 0a 20 20 75 33 32 20 6e 52 65 66  nfo {.  u32 nRef
15430 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e  ;           /* N
15440 75 6d 62 65 72 20 6f 66 20 72 65 66 65 72 65 6e  umber of referen
15450 63 65 73 20 74 6f 20 74 68 69 73 20 4b 65 79 49  ces to this KeyI
15460 6e 66 6f 20 6f 62 6a 65 63 74 20 2a 2f 0a 20 20  nfo object */.  
15470 75 38 20 65 6e 63 3b 20 20 20 20 20 20 20 20 20  u8 enc;         
15480 20 20 20 20 2f 2a 20 54 65 78 74 20 65 6e 63 6f      /* Text enco
15490 64 69 6e 67 20 2d 20 6f 6e 65 20 6f 66 20 74 68  ding - one of th
154a0 65 20 53 51 4c 49 54 45 5f 55 54 46 2a 20 76 61  e SQLITE_UTF* va
154b0 6c 75 65 73 20 2a 2f 0a 20 20 75 31 36 20 6e 4b  lues */.  u16 nK
154c0 65 79 46 69 65 6c 64 3b 20 20 20 20 20 20 2f 2a  eyField;      /*
154d0 20 4e 75 6d 62 65 72 20 6f 66 20 6b 65 79 20 63   Number of key c
154e0 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 69 6e  olumns in the in
154f0 64 65 78 20 2a 2f 0a 20 20 75 31 36 20 6e 41 6c  dex */.  u16 nAl
15500 6c 46 69 65 6c 64 3b 20 20 20 20 20 20 2f 2a 20  lField;      /* 
15510 54 6f 74 61 6c 20 63 6f 6c 75 6d 6e 73 2c 20 69  Total columns, i
15520 6e 63 6c 75 64 69 6e 67 20 6b 65 79 20 70 6c 75  ncluding key plu
15530 73 20 6f 74 68 65 72 73 20 2a 2f 0a 20 20 73 71  s others */.  sq
15540 6c 69 74 65 33 20 2a 64 62 3b 20 20 20 20 20 20  lite3 *db;      
15550 20 20 2f 2a 20 54 68 65 20 64 61 74 61 62 61 73    /* The databas
15560 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 2a 2f 0a  e connection */.
15570 20 20 75 38 20 2a 61 53 6f 72 74 4f 72 64 65 72    u8 *aSortOrder
15580 3b 20 20 20 20 20 2f 2a 20 53 6f 72 74 20 6f 72  ;     /* Sort or
15590 64 65 72 20 66 6f 72 20 65 61 63 68 20 63 6f 6c  der for each col
155a0 75 6d 6e 2e 20 2a 2f 0a 20 20 43 6f 6c 6c 53 65  umn. */.  CollSe
155b0 71 20 2a 61 43 6f 6c 6c 5b 31 5d 3b 20 20 2f 2a  q *aColl[1];  /*
155c0 20 43 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65   Collating seque
155d0 6e 63 65 20 66 6f 72 20 65 61 63 68 20 74 65 72  nce for each ter
155e0 6d 20 6f 66 20 74 68 65 20 6b 65 79 20 2a 2f 0a  m of the key */.
155f0 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 6f  };../*.** This o
15600 62 6a 65 63 74 20 68 6f 6c 64 73 20 61 20 72 65  bject holds a re
15610 63 6f 72 64 20 77 68 69 63 68 20 68 61 73 20 62  cord which has b
15620 65 65 6e 20 70 61 72 73 65 64 20 6f 75 74 20 69  een parsed out i
15630 6e 74 6f 20 69 6e 64 69 76 69 64 75 61 6c 0a 2a  nto individual.*
15640 2a 20 66 69 65 6c 64 73 2c 20 66 6f 72 20 74 68  * fields, for th
15650 65 20 70 75 72 70 6f 73 65 73 20 6f 66 20 64 6f  e purposes of do
15660 69 6e 67 20 61 20 63 6f 6d 70 61 72 69 73 6f 6e  ing a comparison
15670 2e 0a 2a 2a 0a 2a 2a 20 41 20 72 65 63 6f 72 64  ..**.** A record
15680 20 69 73 20 61 6e 20 6f 62 6a 65 63 74 20 74 68   is an object th
15690 61 74 20 63 6f 6e 74 61 69 6e 73 20 6f 6e 65 20  at contains one 
156a0 6f 72 20 6d 6f 72 65 20 66 69 65 6c 64 73 20 6f  or more fields o
156b0 66 20 64 61 74 61 2e 0a 2a 2a 20 52 65 63 6f 72  f data..** Recor
156c0 64 73 20 61 72 65 20 75 73 65 64 20 74 6f 20 73  ds are used to s
156d0 74 6f 72 65 20 74 68 65 20 63 6f 6e 74 65 6e 74  tore the content
156e0 20 6f 66 20 61 20 74 61 62 6c 65 20 72 6f 77 20   of a table row 
156f0 61 6e 64 20 74 6f 20 73 74 6f 72 65 0a 2a 2a 20  and to store.** 
15700 74 68 65 20 6b 65 79 20 6f 66 20 61 6e 20 69 6e  the key of an in
15710 64 65 78 2e 20 20 41 20 62 6c 6f 62 20 65 6e 63  dex.  A blob enc
15720 6f 64 69 6e 67 20 6f 66 20 61 20 72 65 63 6f 72  oding of a recor
15730 64 20 69 73 20 63 72 65 61 74 65 64 20 62 79 0a  d is created by.
15740 2a 2a 20 74 68 65 20 4f 50 5f 4d 61 6b 65 52 65  ** the OP_MakeRe
15750 63 6f 72 64 20 6f 70 63 6f 64 65 20 6f 66 20 74  cord opcode of t
15760 68 65 20 56 44 42 45 20 61 6e 64 20 69 73 20 64  he VDBE and is d
15770 69 73 61 73 73 65 6d 62 6c 65 64 20 62 79 20 74  isassembled by t
15780 68 65 0a 2a 2a 20 4f 50 5f 43 6f 6c 75 6d 6e 20  he.** OP_Column 
15790 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 41 6e  opcode..**.** An
157a0 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 69   instance of thi
157b0 73 20 6f 62 6a 65 63 74 20 73 65 72 76 65 73 20  s object serves 
157c0 61 73 20 61 20 22 6b 65 79 22 20 66 6f 72 20 64  as a "key" for d
157d0 6f 69 6e 67 20 61 20 73 65 61 72 63 68 20 6f 6e  oing a search on
157e0 0a 2a 2a 20 61 6e 20 69 6e 64 65 78 20 62 2b 74  .** an index b+t
157f0 72 65 65 2e 20 54 68 65 20 67 6f 61 6c 20 6f 66  ree. The goal of
15800 20 74 68 65 20 73 65 61 72 63 68 20 69 73 20 74   the search is t
15810 6f 20 66 69 6e 64 20 74 68 65 20 65 6e 74 72 79  o find the entry
15820 20 74 68 61 74 0a 2a 2a 20 69 73 20 63 6c 6f 73   that.** is clos
15830 65 64 20 74 6f 20 74 68 65 20 6b 65 79 20 64 65  ed to the key de
15840 73 63 72 69 62 65 64 20 62 79 20 74 68 69 73 20  scribed by this 
15850 6f 62 6a 65 63 74 2e 20 20 54 68 69 73 20 6f 62  object.  This ob
15860 6a 65 63 74 20 6d 69 67 68 74 20 68 6f 6c 64 0a  ject might hold.
15870 2a 2a 20 6a 75 73 74 20 61 20 70 72 65 66 69 78  ** just a prefix
15880 20 6f 66 20 74 68 65 20 6b 65 79 2e 20 20 54 68   of the key.  Th
15890 65 20 6e 75 6d 62 65 72 20 6f 66 20 66 69 65 6c  e number of fiel
158a0 64 73 20 69 73 20 67 69 76 65 6e 20 62 79 0a 2a  ds is given by.*
158b0 2a 20 70 4b 65 79 49 6e 66 6f 2d 3e 6e 46 69 65  * pKeyInfo->nFie
158c0 6c 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 72 31  ld..**.** The r1
158d0 20 61 6e 64 20 72 32 20 66 69 65 6c 64 73 20 61   and r2 fields a
158e0 72 65 20 74 68 65 20 76 61 6c 75 65 73 20 74 6f  re the values to
158f0 20 72 65 74 75 72 6e 20 69 66 20 74 68 69 73 20   return if this 
15900 6b 65 79 20 69 73 20 6c 65 73 73 20 74 68 61 6e  key is less than
15910 0a 2a 2a 20 6f 72 20 67 72 65 61 74 65 72 20 74  .** or greater t
15920 68 61 6e 20 61 20 6b 65 79 20 69 6e 20 74 68 65  han a key in the
15930 20 62 74 72 65 65 2c 20 72 65 73 70 65 63 74 69   btree, respecti
15940 76 65 6c 79 2e 20 20 54 68 65 73 65 20 61 72 65  vely.  These are
15950 20 6e 6f 72 6d 61 6c 6c 79 0a 2a 2a 20 2d 31 20   normally.** -1 
15960 61 6e 64 20 2b 31 20 72 65 73 70 65 63 74 69 76  and +1 respectiv
15970 65 6c 79 2c 20 62 75 74 20 6d 69 67 68 74 20 62  ely, but might b
15980 65 20 69 6e 76 65 72 74 65 64 20 74 6f 20 2b 31  e inverted to +1
15990 20 61 6e 64 20 2d 31 20 69 66 20 74 68 65 20 62   and -1 if the b
159a0 2d 74 72 65 65 0a 2a 2a 20 69 73 20 69 6e 20 44  -tree.** is in D
159b0 45 53 43 20 6f 72 64 65 72 2e 0a 2a 2a 0a 2a 2a  ESC order..**.**
159c0 20 54 68 65 20 6b 65 79 20 63 6f 6d 70 61 72 69   The key compari
159d0 73 6f 6e 20 66 75 6e 63 74 69 6f 6e 73 20 61 63  son functions ac
159e0 74 75 61 6c 6c 79 20 72 65 74 75 72 6e 20 64 65  tually return de
159f0 66 61 75 6c 74 5f 72 63 20 77 68 65 6e 20 74 68  fault_rc when th
15a00 65 79 20 66 69 6e 64 0a 2a 2a 20 61 6e 20 65 71  ey find.** an eq
15a10 75 61 6c 73 20 63 6f 6d 70 61 72 69 73 6f 6e 2e  uals comparison.
15a20 20 20 64 65 66 61 75 6c 74 5f 72 63 20 63 61 6e    default_rc can
15a30 20 62 65 20 2d 31 2c 20 30 2c 20 6f 72 20 2b 31   be -1, 0, or +1
15a40 2e 20 20 49 66 20 74 68 65 72 65 20 61 72 65 0a  .  If there are.
15a50 2a 2a 20 6d 75 6c 74 69 70 6c 65 20 65 6e 74 72  ** multiple entr
15a60 69 65 73 20 69 6e 20 74 68 65 20 62 2d 74 72 65  ies in the b-tre
15a70 65 20 77 69 74 68 20 74 68 65 20 73 61 6d 65 20  e with the same 
15a80 6b 65 79 20 28 77 68 65 6e 20 6f 6e 6c 79 20 6c  key (when only l
15a90 6f 6f 6b 69 6e 67 0a 2a 2a 20 61 74 20 74 68 65  ooking.** at the
15aa0 20 66 69 72 73 74 20 70 4b 65 79 49 6e 66 6f 2d   first pKeyInfo-
15ab0 3e 6e 46 69 65 6c 64 73 2c 29 20 74 68 65 6e 20  >nFields,) then 
15ac0 64 65 66 61 75 6c 74 5f 72 63 20 63 61 6e 20 62  default_rc can b
15ad0 65 20 73 65 74 20 74 6f 20 2d 31 20 74 6f 0a 2a  e set to -1 to.*
15ae0 2a 20 63 61 75 73 65 20 74 68 65 20 73 65 61 72  * cause the sear
15af0 63 68 20 74 6f 20 66 69 6e 64 20 74 68 65 20 6c  ch to find the l
15b00 61 73 74 20 6d 61 74 63 68 2c 20 6f 72 20 2b 31  ast match, or +1
15b10 20 74 6f 20 63 61 75 73 65 20 74 68 65 20 73 65   to cause the se
15b20 61 72 63 68 20 74 6f 0a 2a 2a 20 66 69 6e 64 20  arch to.** find 
15b30 74 68 65 20 66 69 72 73 74 20 6d 61 74 63 68 2e  the first match.
15b40 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6b 65 79 20 63  .**.** The key c
15b50 6f 6d 70 61 72 69 73 6f 6e 20 66 75 6e 63 74 69  omparison functi
15b60 6f 6e 73 20 77 69 6c 6c 20 73 65 74 20 65 71 53  ons will set eqS
15b70 65 65 6e 20 74 6f 20 74 72 75 65 20 69 66 20 74  een to true if t
15b80 68 65 79 20 65 76 65 72 0a 2a 2a 20 67 65 74 20  hey ever.** get 
15b90 61 6e 64 20 65 71 75 61 6c 20 72 65 73 75 6c 74  and equal result
15ba0 73 20 77 68 65 6e 20 63 6f 6d 70 61 72 69 6e 67  s when comparing
15bb0 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65 20   this structure 
15bc0 74 6f 20 61 20 62 2d 74 72 65 65 20 72 65 63 6f  to a b-tree reco
15bd0 72 64 2e 0a 2a 2a 20 57 68 65 6e 20 64 65 66 61  rd..** When defa
15be0 75 6c 74 5f 72 63 21 3d 30 2c 20 74 68 65 20 73  ult_rc!=0, the s
15bf0 65 61 72 63 68 20 6d 69 67 68 74 20 65 6e 64 20  earch might end 
15c00 75 70 20 6f 6e 20 74 68 65 20 72 65 63 6f 72 64  up on the record
15c10 20 69 6d 6d 65 64 69 61 74 65 6c 79 0a 2a 2a 20   immediately.** 
15c20 62 65 66 6f 72 65 20 74 68 65 20 66 69 72 73 74  before the first
15c30 20 6d 61 74 63 68 20 6f 72 20 69 6d 6d 65 64 69   match or immedi
15c40 61 74 65 6c 79 20 61 66 74 65 72 20 74 68 65 20  ately after the 
15c50 6c 61 73 74 20 6d 61 74 63 68 2e 20 20 54 68 65  last match.  The
15c60 0a 2a 2a 20 65 71 53 65 65 6e 20 66 69 65 6c 64  .** eqSeen field
15c70 20 77 69 6c 6c 20 69 6e 64 69 63 61 74 65 20 77   will indicate w
15c80 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 61 6e  hether or not an
15c90 20 65 78 61 63 74 20 6d 61 74 63 68 20 65 78 69   exact match exi
15ca0 73 74 73 20 69 6e 20 74 68 65 0a 2a 2a 20 62 2d  sts in the.** b-
15cb0 74 72 65 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  tree..*/.struct 
15cc0 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 20 7b  UnpackedRecord {
15cd0 0a 20 20 4b 65 79 49 6e 66 6f 20 2a 70 4b 65 79  .  KeyInfo *pKey
15ce0 49 6e 66 6f 3b 20 20 2f 2a 20 43 6f 6c 6c 61 74  Info;  /* Collat
15cf0 69 6f 6e 20 61 6e 64 20 73 6f 72 74 2d 6f 72 64  ion and sort-ord
15d00 65 72 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 2a  er information *
15d10 2f 0a 20 20 4d 65 6d 20 2a 61 4d 65 6d 3b 20 20  /.  Mem *aMem;  
15d20 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65          /* Value
15d30 73 20 2a 2f 0a 20 20 75 31 36 20 6e 46 69 65 6c  s */.  u16 nFiel
15d40 64 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75  d;         /* Nu
15d50 6d 62 65 72 20 6f 66 20 65 6e 74 72 69 65 73 20  mber of entries 
15d60 69 6e 20 61 70 4d 65 6d 5b 5d 20 2a 2f 0a 20 20  in apMem[] */.  
15d70 69 38 20 64 65 66 61 75 6c 74 5f 72 63 3b 20 20  i8 default_rc;  
15d80 20 20 20 20 2f 2a 20 43 6f 6d 70 61 72 69 73 6f      /* Compariso
15d90 6e 20 72 65 73 75 6c 74 20 69 66 20 6b 65 79 73  n result if keys
15da0 20 61 72 65 20 65 71 75 61 6c 20 2a 2f 0a 20 20   are equal */.  
15db0 75 38 20 65 72 72 43 6f 64 65 3b 20 20 20 20 20  u8 errCode;     
15dc0 20 20 20 20 2f 2a 20 45 72 72 6f 72 20 64 65 74      /* Error det
15dd0 65 63 74 65 64 20 62 79 20 78 52 65 63 6f 72 64  ected by xRecord
15de0 43 6f 6d 70 61 72 65 20 28 43 4f 52 52 55 50 54  Compare (CORRUPT
15df0 20 6f 72 20 4e 4f 4d 45 4d 29 20 2a 2f 0a 20 20   or NOMEM) */.  
15e00 69 38 20 72 31 3b 20 20 20 20 20 20 20 20 20 20  i8 r1;          
15e10 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 74 6f 20      /* Value to 
15e20 72 65 74 75 72 6e 20 69 66 20 28 6c 68 73 20 3c  return if (lhs <
15e30 20 72 68 73 29 20 2a 2f 0a 20 20 69 38 20 72 32   rhs) */.  i8 r2
15e40 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
15e50 2a 20 56 61 6c 75 65 20 74 6f 20 72 65 74 75 72  * Value to retur
15e60 6e 20 69 66 20 28 6c 68 73 20 3e 20 72 68 73 29  n if (lhs > rhs)
15e70 20 2a 2f 0a 20 20 75 38 20 65 71 53 65 65 6e 3b   */.  u8 eqSeen;
15e80 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75            /* Tru
15e90 65 20 69 66 20 61 6e 20 65 71 75 61 6c 69 74 79  e if an equality
15ea0 20 63 6f 6d 70 61 72 69 73 6f 6e 20 68 61 73 20   comparison has 
15eb0 62 65 65 6e 20 73 65 65 6e 20 2a 2f 0a 7d 3b 0a  been seen */.};.
15ec0 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 53 51 4c  ../*.** Each SQL
15ed0 20 69 6e 64 65 78 20 69 73 20 72 65 70 72 65 73   index is repres
15ee0 65 6e 74 65 64 20 69 6e 20 6d 65 6d 6f 72 79 20  ented in memory 
15ef0 62 79 20 61 6e 0a 2a 2a 20 69 6e 73 74 61 6e 63  by an.** instanc
15f00 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69  e of the followi
15f10 6e 67 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a  ng structure..**
15f20 0a 2a 2a 20 54 68 65 20 63 6f 6c 75 6d 6e 73 20  .** The columns 
15f30 6f 66 20 74 68 65 20 74 61 62 6c 65 20 74 68 61  of the table tha
15f40 74 20 61 72 65 20 74 6f 20 62 65 20 69 6e 64 65  t are to be inde
15f50 78 65 64 20 61 72 65 20 64 65 73 63 72 69 62 65  xed are describe
15f60 64 0a 2a 2a 20 62 79 20 74 68 65 20 61 69 43 6f  d.** by the aiCo
15f70 6c 75 6d 6e 5b 5d 20 66 69 65 6c 64 20 6f 66 20  lumn[] field of 
15f80 74 68 69 73 20 73 74 72 75 63 74 75 72 65 2e 20  this structure. 
15f90 20 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20 73 75   For example, su
15fa0 70 70 6f 73 65 0a 2a 2a 20 77 65 20 68 61 76 65  ppose.** we have
15fb0 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 74   the following t
15fc0 61 62 6c 65 20 61 6e 64 20 69 6e 64 65 78 3a 0a  able and index:.
15fd0 2a 2a 0a 2a 2a 20 20 20 20 20 43 52 45 41 54 45  **.**     CREATE
15fe0 20 54 41 42 4c 45 20 45 78 31 28 63 31 20 69 6e   TABLE Ex1(c1 in
15ff0 74 2c 20 63 32 20 69 6e 74 2c 20 63 33 20 74 65  t, c2 int, c3 te
16000 78 74 29 3b 0a 2a 2a 20 20 20 20 20 43 52 45 41  xt);.**     CREA
16010 54 45 20 49 4e 44 45 58 20 45 78 32 20 4f 4e 20  TE INDEX Ex2 ON 
16020 45 78 31 28 63 33 2c 63 31 29 3b 0a 2a 2a 0a 2a  Ex1(c3,c1);.**.*
16030 2a 20 49 6e 20 74 68 65 20 54 61 62 6c 65 20 73  * In the Table s
16040 74 72 75 63 74 75 72 65 20 64 65 73 63 72 69 62  tructure describ
16050 69 6e 67 20 45 78 31 2c 20 6e 43 6f 6c 3d 3d 33  ing Ex1, nCol==3
16060 20 62 65 63 61 75 73 65 20 74 68 65 72 65 20 61   because there a
16070 72 65 0a 2a 2a 20 74 68 72 65 65 20 63 6f 6c 75  re.** three colu
16080 6d 6e 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65  mns in the table
16090 2e 20 20 49 6e 20 74 68 65 20 49 6e 64 65 78 20  .  In the Index 
160a0 73 74 72 75 63 74 75 72 65 20 64 65 73 63 72 69  structure descri
160b0 62 69 6e 67 0a 2a 2a 20 45 78 32 2c 20 6e 43 6f  bing.** Ex2, nCo
160c0 6c 75 6d 6e 3d 3d 32 20 73 69 6e 63 65 20 32 20  lumn==2 since 2 
160d0 6f 66 20 74 68 65 20 33 20 63 6f 6c 75 6d 6e 73  of the 3 columns
160e0 20 6f 66 20 45 78 31 20 61 72 65 20 69 6e 64 65   of Ex1 are inde
160f0 78 65 64 2e 0a 2a 2a 20 54 68 65 20 76 61 6c 75  xed..** The valu
16100 65 20 6f 66 20 61 69 43 6f 6c 75 6d 6e 20 69 73  e of aiColumn is
16110 20 7b 32 2c 20 30 7d 2e 20 20 61 69 43 6f 6c 75   {2, 0}.  aiColu
16120 6d 6e 5b 30 5d 3d 3d 32 20 62 65 63 61 75 73 65  mn[0]==2 because
16130 20 74 68 65 0a 2a 2a 20 66 69 72 73 74 20 63 6f   the.** first co
16140 6c 75 6d 6e 20 74 6f 20 62 65 20 69 6e 64 65 78  lumn to be index
16150 65 64 20 28 63 33 29 20 68 61 73 20 61 6e 20 69  ed (c3) has an i
16160 6e 64 65 78 20 6f 66 20 32 20 69 6e 20 45 78 31  ndex of 2 in Ex1
16170 2e 61 43 6f 6c 5b 5d 2e 0a 2a 2a 20 54 68 65 20  .aCol[]..** The 
16180 73 65 63 6f 6e 64 20 63 6f 6c 75 6d 6e 20 74 6f  second column to
16190 20 62 65 20 69 6e 64 65 78 65 64 20 28 63 31 29   be indexed (c1)
161a0 20 68 61 73 20 61 6e 20 69 6e 64 65 78 20 6f 66   has an index of
161b0 20 30 20 69 6e 0a 2a 2a 20 45 78 31 2e 61 43 6f   0 in.** Ex1.aCo
161c0 6c 5b 5d 2c 20 68 65 6e 63 65 20 45 78 32 2e 61  l[], hence Ex2.a
161d0 69 43 6f 6c 75 6d 6e 5b 31 5d 3d 3d 30 2e 0a 2a  iColumn[1]==0..*
161e0 2a 0a 2a 2a 20 54 68 65 20 49 6e 64 65 78 2e 6f  *.** The Index.o
161f0 6e 45 72 72 6f 72 20 66 69 65 6c 64 20 64 65 74  nError field det
16200 65 72 6d 69 6e 65 73 20 77 68 65 74 68 65 72 20  ermines whether 
16210 6f 72 20 6e 6f 74 20 74 68 65 20 69 6e 64 65 78  or not the index
16220 65 64 20 63 6f 6c 75 6d 6e 73 0a 2a 2a 20 6d 75  ed columns.** mu
16230 73 74 20 62 65 20 75 6e 69 71 75 65 20 61 6e 64  st be unique and
16240 20 77 68 61 74 20 74 6f 20 64 6f 20 69 66 20 74   what to do if t
16250 68 65 79 20 61 72 65 20 6e 6f 74 2e 20 20 57 68  hey are not.  Wh
16260 65 6e 20 49 6e 64 65 78 2e 6f 6e 45 72 72 6f 72  en Index.onError
16270 3d 4f 45 5f 4e 6f 6e 65 2c 0a 2a 2a 20 69 74 20  =OE_None,.** it 
16280 6d 65 61 6e 73 20 74 68 69 73 20 69 73 20 6e 6f  means this is no
16290 74 20 61 20 75 6e 69 71 75 65 20 69 6e 64 65 78  t a unique index
162a0 2e 20 20 4f 74 68 65 72 77 69 73 65 20 69 74 20  .  Otherwise it 
162b0 69 73 20 61 20 75 6e 69 71 75 65 20 69 6e 64 65  is a unique inde
162c0 78 0a 2a 2a 20 61 6e 64 20 74 68 65 20 76 61 6c  x.** and the val
162d0 75 65 20 6f 66 20 49 6e 64 65 78 2e 6f 6e 45 72  ue of Index.onEr
162e0 72 6f 72 20 69 6e 64 69 63 61 74 65 20 74 68 65  ror indicate the
162f0 20 77 68 69 63 68 20 63 6f 6e 66 6c 69 63 74 20   which conflict 
16300 72 65 73 6f 6c 75 74 69 6f 6e 0a 2a 2a 20 61 6c  resolution.** al
16310 67 6f 72 69 74 68 6d 20 74 6f 20 65 6d 70 6c 6f  gorithm to emplo
16320 79 20 77 68 65 6e 65 76 65 72 20 61 6e 20 61 74  y whenever an at
16330 74 65 6d 70 74 20 69 73 20 6d 61 64 65 20 74 6f  tempt is made to
16340 20 69 6e 73 65 72 74 20 61 20 6e 6f 6e 2d 75 6e   insert a non-un
16350 69 71 75 65 0a 2a 2a 20 65 6c 65 6d 65 6e 74 2e  ique.** element.
16360 0a 2a 2a 0a 2a 2a 20 57 68 69 6c 65 20 70 61 72  .**.** While par
16370 73 69 6e 67 20 61 20 43 52 45 41 54 45 20 54 41  sing a CREATE TA
16380 42 4c 45 20 6f 72 20 43 52 45 41 54 45 20 49 4e  BLE or CREATE IN
16390 44 45 58 20 73 74 61 74 65 6d 65 6e 74 20 69 6e  DEX statement in
163a0 20 6f 72 64 65 72 20 74 6f 0a 2a 2a 20 67 65 6e   order to.** gen
163b0 65 72 61 74 65 20 56 44 42 45 20 63 6f 64 65 20  erate VDBE code 
163c0 28 61 73 20 6f 70 70 6f 73 65 64 20 74 6f 20 70  (as opposed to p
163d0 61 72 73 69 6e 67 20 6f 6e 65 20 72 65 61 64 20  arsing one read 
163e0 66 72 6f 6d 20 61 6e 20 73 71 6c 69 74 65 5f 6d  from an sqlite_m
163f0 61 73 74 65 72 0a 2a 2a 20 74 61 62 6c 65 20 61  aster.** table a
16400 73 20 70 61 72 74 20 6f 66 20 70 61 72 73 69 6e  s part of parsin
16410 67 20 61 6e 20 65 78 69 73 74 69 6e 67 20 64 61  g an existing da
16420 74 61 62 61 73 65 20 73 63 68 65 6d 61 29 2c 20  tabase schema), 
16430 74 72 61 6e 73 69 65 6e 74 20 69 6e 73 74 61 6e  transient instan
16440 63 65 73 0a 2a 2a 20 6f 66 20 74 68 69 73 20 73  ces.** of this s
16450 74 72 75 63 74 75 72 65 20 6d 61 79 20 62 65 20  tructure may be 
16460 63 72 65 61 74 65 64 2e 20 49 6e 20 74 68 69 73  created. In this
16470 20 63 61 73 65 20 74 68 65 20 49 6e 64 65 78 2e   case the Index.
16480 74 6e 75 6d 20 76 61 72 69 61 62 6c 65 20 69 73  tnum variable is
16490 0a 2a 2a 20 75 73 65 64 20 74 6f 20 73 74 6f 72  .** used to stor
164a0 65 20 74 68 65 20 61 64 64 72 65 73 73 20 6f 66  e the address of
164b0 20 61 20 56 44 42 45 20 69 6e 73 74 72 75 63 74   a VDBE instruct
164c0 69 6f 6e 2c 20 6e 6f 74 20 61 20 64 61 74 61 62  ion, not a datab
164d0 61 73 65 20 70 61 67 65 0a 2a 2a 20 6e 75 6d 62  ase page.** numb
164e0 65 72 20 28 69 74 20 63 61 6e 6e 6f 74 20 2d 20  er (it cannot - 
164f0 74 68 65 20 64 61 74 61 62 61 73 65 20 70 61 67  the database pag
16500 65 20 69 73 20 6e 6f 74 20 61 6c 6c 6f 63 61 74  e is not allocat
16510 65 64 20 75 6e 74 69 6c 20 74 68 65 20 56 44 42  ed until the VDB
16520 45 0a 2a 2a 20 70 72 6f 67 72 61 6d 20 69 73 20  E.** program is 
16530 65 78 65 63 75 74 65 64 29 2e 20 53 65 65 20 63  executed). See c
16540 6f 6e 76 65 72 74 54 6f 57 69 74 68 6f 75 74 52  onvertToWithoutR
16550 6f 77 69 64 54 61 62 6c 65 28 29 20 66 6f 72 20  owidTable() for 
16560 64 65 74 61 69 6c 73 2e 0a 2a 2f 0a 73 74 72 75  details..*/.stru
16570 63 74 20 49 6e 64 65 78 20 7b 0a 20 20 63 68 61  ct Index {.  cha
16580 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20  r *zName;       
16590 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66        /* Name of
165a0 20 74 68 69 73 20 69 6e 64 65 78 20 2a 2f 0a 20   this index */. 
165b0 20 69 31 36 20 2a 61 69 43 6f 6c 75 6d 6e 3b 20   i16 *aiColumn; 
165c0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57 68 69            /* Whi
165d0 63 68 20 63 6f 6c 75 6d 6e 73 20 61 72 65 20 75  ch columns are u
165e0 73 65 64 20 62 79 20 74 68 69 73 20 69 6e 64 65  sed by this inde
165f0 78 2e 20 20 31 73 74 20 69 73 20 30 20 2a 2f 0a  x.  1st is 0 */.
16600 20 20 4c 6f 67 45 73 74 20 2a 61 69 52 6f 77 4c    LogEst *aiRowL
16610 6f 67 45 73 74 3b 20 20 20 20 20 2f 2a 20 46 72  ogEst;     /* Fr
16620 6f 6d 20 41 4e 41 4c 59 5a 45 3a 20 45 73 74 2e  om ANALYZE: Est.
16630 20 72 6f 77 73 20 73 65 6c 65 63 74 65 64 20 62   rows selected b
16640 79 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 2a 2f  y each column */
16650 0a 20 20 54 61 62 6c 65 20 2a 70 54 61 62 6c 65  .  Table *pTable
16660 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54  ;           /* T
16670 68 65 20 53 51 4c 20 74 61 62 6c 65 20 62 65 69  he SQL table bei
16680 6e 67 20 69 6e 64 65 78 65 64 20 2a 2f 0a 20 20  ng indexed */.  
16690 63 68 61 72 20 2a 7a 43 6f 6c 41 66 66 3b 20 20  char *zColAff;  
166a0 20 20 20 20 20 20 20 20 20 2f 2a 20 53 74 72 69           /* Stri
166b0 6e 67 20 64 65 66 69 6e 69 6e 67 20 74 68 65 20  ng defining the 
166c0 61 66 66 69 6e 69 74 79 20 6f 66 20 65 61 63 68  affinity of each
166d0 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 49 6e 64   column */.  Ind
166e0 65 78 20 2a 70 4e 65 78 74 3b 20 20 20 20 20 20  ex *pNext;      
166f0 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6e 65 78        /* The nex
16700 74 20 69 6e 64 65 78 20 61 73 73 6f 63 69 61 74  t index associat
16710 65 64 20 77 69 74 68 20 74 68 65 20 73 61 6d 65  ed with the same
16720 20 74 61 62 6c 65 20 2a 2f 0a 20 20 53 63 68 65   table */.  Sche
16730 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20 20 20 20  ma *pSchema;    
16740 20 20 20 20 20 2f 2a 20 53 63 68 65 6d 61 20 63       /* Schema c
16750 6f 6e 74 61 69 6e 69 6e 67 20 74 68 69 73 20 69  ontaining this i
16760 6e 64 65 78 20 2a 2f 0a 20 20 75 38 20 2a 61 53  ndex */.  u8 *aS
16770 6f 72 74 4f 72 64 65 72 3b 20 20 20 20 20 20 20  ortOrder;       
16780 20 20 20 2f 2a 20 66 6f 72 20 65 61 63 68 20 63     /* for each c
16790 6f 6c 75 6d 6e 3a 20 54 72 75 65 3d 3d 44 45 53  olumn: True==DES
167a0 43 2c 20 46 61 6c 73 65 3d 3d 41 53 43 20 2a 2f  C, False==ASC */
167b0 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 2a  .  const char **
167c0 61 7a 43 6f 6c 6c 3b 20 20 20 20 20 2f 2a 20 41  azColl;     /* A
167d0 72 72 61 79 20 6f 66 20 63 6f 6c 6c 61 74 69 6f  rray of collatio
167e0 6e 20 73 65 71 75 65 6e 63 65 20 6e 61 6d 65 73  n sequence names
167f0 20 66 6f 72 20 69 6e 64 65 78 20 2a 2f 0a 20 20   for index */.  
16800 45 78 70 72 20 2a 70 50 61 72 74 49 64 78 57 68  Expr *pPartIdxWh
16810 65 72 65 3b 20 20 20 20 20 2f 2a 20 57 48 45 52  ere;     /* WHER
16820 45 20 63 6c 61 75 73 65 20 66 6f 72 20 70 61 72  E clause for par
16830 74 69 61 6c 20 69 6e 64 69 63 65 73 20 2a 2f 0a  tial indices */.
16840 20 20 45 78 70 72 4c 69 73 74 20 2a 61 43 6f 6c    ExprList *aCol
16850 45 78 70 72 3b 20 20 20 20 20 20 2f 2a 20 43 6f  Expr;      /* Co
16860 6c 75 6d 6e 20 65 78 70 72 65 73 73 69 6f 6e 73  lumn expressions
16870 20 2a 2f 0a 20 20 69 6e 74 20 74 6e 75 6d 3b 20   */.  int tnum; 
16880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
16890 2a 20 44 42 20 50 61 67 65 20 63 6f 6e 74 61 69  * DB Page contai
168a0 6e 69 6e 67 20 72 6f 6f 74 20 6f 66 20 74 68 69  ning root of thi
168b0 73 20 69 6e 64 65 78 20 2a 2f 0a 20 20 4c 6f 67  s index */.  Log
168c0 45 73 74 20 73 7a 49 64 78 52 6f 77 3b 20 20 20  Est szIdxRow;   
168d0 20 20 20 20 20 20 2f 2a 20 45 73 74 69 6d 61 74        /* Estimat
168e0 65 64 20 61 76 65 72 61 67 65 20 72 6f 77 20 73  ed average row s
168f0 69 7a 65 20 69 6e 20 62 79 74 65 73 20 2a 2f 0a  ize in bytes */.
16900 20 20 75 31 36 20 6e 4b 65 79 43 6f 6c 3b 20 20    u16 nKeyCol;  
16910 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
16920 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20  mber of columns 
16930 66 6f 72 6d 69 6e 67 20 74 68 65 20 6b 65 79 20  forming the key 
16940 2a 2f 0a 20 20 75 31 36 20 6e 43 6f 6c 75 6d 6e  */.  u16 nColumn
16950 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
16960 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d   Number of colum
16970 6e 73 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65  ns stored in the
16980 20 69 6e 64 65 78 20 2a 2f 0a 20 20 75 38 20 6f   index */.  u8 o
16990 6e 45 72 72 6f 72 3b 20 20 20 20 20 20 20 20 20  nError;         
169a0 20 20 20 20 20 2f 2a 20 4f 45 5f 41 62 6f 72 74       /* OE_Abort
169b0 2c 20 4f 45 5f 49 67 6e 6f 72 65 2c 20 4f 45 5f  , OE_Ignore, OE_
169c0 52 65 70 6c 61 63 65 2c 20 6f 72 20 4f 45 5f 4e  Replace, or OE_N
169d0 6f 6e 65 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65  one */.  unsigne
169e0 64 20 69 64 78 54 79 70 65 3a 32 3b 20 20 20 20  d idxType:2;    
169f0 20 20 2f 2a 20 30 3a 4e 6f 72 6d 61 6c 20 31 3a    /* 0:Normal 1:
16a00 55 4e 49 51 55 45 2c 20 32 3a 50 52 49 4d 41 52  UNIQUE, 2:PRIMAR
16a10 59 20 4b 45 59 2c 20 33 3a 49 50 4b 20 2a 2f 0a  Y KEY, 3:IPK */.
16a20 20 20 75 6e 73 69 67 6e 65 64 20 62 55 6e 6f 72    unsigned bUnor
16a30 64 65 72 65 64 3a 31 3b 20 20 20 2f 2a 20 55 73  dered:1;   /* Us
16a40 65 20 74 68 69 73 20 69 6e 64 65 78 20 66 6f 72  e this index for
16a50 20 3d 3d 20 6f 72 20 49 4e 20 71 75 65 72 69 65   == or IN querie
16a60 73 20 6f 6e 6c 79 20 2a 2f 0a 20 20 75 6e 73 69  s only */.  unsi
16a70 67 6e 65 64 20 75 6e 69 71 4e 6f 74 4e 75 6c 6c  gned uniqNotNull
16a80 3a 31 3b 20 20 2f 2a 20 54 72 75 65 20 69 66 20  :1;  /* True if 
16a90 55 4e 49 51 55 45 20 61 6e 64 20 4e 4f 54 20 4e  UNIQUE and NOT N
16aa0 55 4c 4c 20 66 6f 72 20 61 6c 6c 20 63 6f 6c 75  ULL for all colu
16ab0 6d 6e 73 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65  mns */.  unsigne
16ac0 64 20 69 73 52 65 73 69 7a 65 64 3a 31 3b 20 20  d isResized:1;  
16ad0 20 20 2f 2a 20 54 72 75 65 20 69 66 20 72 65 73    /* True if res
16ae0 69 7a 65 49 6e 64 65 78 4f 62 6a 65 63 74 28 29  izeIndexObject()
16af0 20 68 61 73 20 62 65 65 6e 20 63 61 6c 6c 65 64   has been called
16b00 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 69   */.  unsigned i
16b10 73 43 6f 76 65 72 69 6e 67 3a 31 3b 20 20 20 2f  sCovering:1;   /
16b20 2a 20 54 72 75 65 20 69 66 20 74 68 69 73 20 69  * True if this i
16b30 73 20 61 20 63 6f 76 65 72 69 6e 67 20 69 6e 64  s a covering ind
16b40 65 78 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64  ex */.  unsigned
16b50 20 6e 6f 53 6b 69 70 53 63 61 6e 3a 31 3b 20 20   noSkipScan:1;  
16b60 20 2f 2a 20 44 6f 20 6e 6f 74 20 74 72 79 20 74   /* Do not try t
16b70 6f 20 75 73 65 20 73 6b 69 70 2d 73 63 61 6e 20  o use skip-scan 
16b80 69 66 20 74 72 75 65 20 2a 2f 0a 20 20 75 6e 73  if true */.  uns
16b90 69 67 6e 65 64 20 68 61 73 53 74 61 74 31 3a 31  igned hasStat1:1
16ba0 3b 20 20 20 20 20 2f 2a 20 61 69 52 6f 77 4c 6f  ;     /* aiRowLo
16bb0 67 45 73 74 20 76 61 6c 75 65 73 20 63 6f 6d 65  gEst values come
16bc0 20 66 72 6f 6d 20 73 71 6c 69 74 65 5f 73 74 61   from sqlite_sta
16bd0 74 31 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64  t1 */.  unsigned
16be0 20 62 4e 6f 51 75 65 72 79 3a 31 3b 20 20 20 20   bNoQuery:1;    
16bf0 20 2f 2a 20 44 6f 20 6e 6f 74 20 75 73 65 20 74   /* Do not use t
16c00 68 69 73 20 69 6e 64 65 78 20 74 6f 20 6f 70 74  his index to opt
16c10 69 6d 69 7a 65 20 71 75 65 72 69 65 73 20 2a 2f  imize queries */
16c20 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45  .#ifdef SQLITE_E
16c30 4e 41 42 4c 45 5f 53 54 41 54 33 5f 4f 52 5f 53  NABLE_STAT3_OR_S
16c40 54 41 54 34 0a 20 20 69 6e 74 20 6e 53 61 6d 70  TAT4.  int nSamp
16c50 6c 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  le;             
16c60 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 6c 65  /* Number of ele
16c70 6d 65 6e 74 73 20 69 6e 20 61 53 61 6d 70 6c 65  ments in aSample
16c80 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 61 6d  [] */.  int nSam
16c90 70 6c 65 43 6f 6c 3b 20 20 20 20 20 20 20 20 20  pleCol;         
16ca0 20 2f 2a 20 53 69 7a 65 20 6f 66 20 49 6e 64 65   /* Size of Inde
16cb0 78 53 61 6d 70 6c 65 2e 61 6e 45 71 5b 5d 20 61  xSample.anEq[] a
16cc0 6e 64 20 73 6f 20 6f 6e 20 2a 2f 0a 20 20 74 52  nd so on */.  tR
16cd0 6f 77 63 6e 74 20 2a 61 41 76 67 45 71 3b 20 20  owcnt *aAvgEq;  
16ce0 20 20 20 20 20 20 20 2f 2a 20 41 76 65 72 61 67         /* Averag
16cf0 65 20 6e 45 71 20 76 61 6c 75 65 73 20 66 6f 72  e nEq values for
16d00 20 6b 65 79 73 20 6e 6f 74 20 69 6e 20 61 53 61   keys not in aSa
16d10 6d 70 6c 65 20 2a 2f 0a 20 20 49 6e 64 65 78 53  mple */.  IndexS
16d20 61 6d 70 6c 65 20 2a 61 53 61 6d 70 6c 65 3b 20  ample *aSample; 
16d30 20 20 20 2f 2a 20 53 61 6d 70 6c 65 73 20 6f 66     /* Samples of
16d40 20 74 68 65 20 6c 65 66 74 2d 6d 6f 73 74 20 6b   the left-most k
16d50 65 79 20 2a 2f 0a 20 20 74 52 6f 77 63 6e 74 20  ey */.  tRowcnt 
16d60 2a 61 69 52 6f 77 45 73 74 3b 20 20 20 20 20 20  *aiRowEst;      
16d70 20 2f 2a 20 4e 6f 6e 2d 6c 6f 67 61 72 69 74 68   /* Non-logarith
16d80 6d 69 63 20 73 74 61 74 31 20 64 61 74 61 20 66  mic stat1 data f
16d90 6f 72 20 74 68 69 73 20 69 6e 64 65 78 20 2a 2f  or this index */
16da0 0a 20 20 74 52 6f 77 63 6e 74 20 6e 52 6f 77 45  .  tRowcnt nRowE
16db0 73 74 30 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e  st0;        /* N
16dc0 6f 6e 2d 6c 6f 67 61 72 69 74 68 6d 69 63 20 6e  on-logarithmic n
16dd0 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 69 6e  umber of rows in
16de0 20 74 68 65 20 69 6e 64 65 78 20 2a 2f 0a 23 65   the index */.#e
16df0 6e 64 69 66 0a 20 20 42 69 74 6d 61 73 6b 20 63  ndif.  Bitmask c
16e00 6f 6c 4e 6f 74 49 64 78 65 64 3b 20 20 20 20 20  olNotIdxed;     
16e10 2f 2a 20 30 20 66 6f 72 20 75 6e 69 6e 64 65 78  /* 0 for unindex
16e20 65 64 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 70 54  ed columns in pT
16e30 61 62 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  ab */.};../*.** 
16e40 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20 66  Allowed values f
16e50 6f 72 20 49 6e 64 65 78 2e 69 64 78 54 79 70 65  or Index.idxType
16e60 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  .*/.#define SQLI
16e70 54 45 5f 49 44 58 54 59 50 45 5f 41 50 50 44 45  TE_IDXTYPE_APPDE
16e80 46 20 20 20 20 20 20 30 20 20 20 2f 2a 20 43 72  F      0   /* Cr
16e90 65 61 74 65 64 20 75 73 69 6e 67 20 43 52 45 41  eated using CREA
16ea0 54 45 20 49 4e 44 45 58 20 2a 2f 0a 23 64 65 66  TE INDEX */.#def
16eb0 69 6e 65 20 53 51 4c 49 54 45 5f 49 44 58 54 59  ine SQLITE_IDXTY
16ec0 50 45 5f 55 4e 49 51 55 45 20 20 20 20 20 20 31  PE_UNIQUE      1
16ed0 20 20 20 2f 2a 20 49 6d 70 6c 65 6d 65 6e 74 73     /* Implements
16ee0 20 61 20 55 4e 49 51 55 45 20 63 6f 6e 73 74 72   a UNIQUE constr
16ef0 61 69 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20  aint */.#define 
16f00 53 51 4c 49 54 45 5f 49 44 58 54 59 50 45 5f 50  SQLITE_IDXTYPE_P
16f10 52 49 4d 41 52 59 4b 45 59 20 20 32 20 20 20 2f  RIMARYKEY  2   /
16f20 2a 20 49 73 20 74 68 65 20 50 52 49 4d 41 52 59  * Is the PRIMARY
16f30 20 4b 45 59 20 66 6f 72 20 74 68 65 20 74 61 62   KEY for the tab
16f40 6c 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  le */.#define SQ
16f50 4c 49 54 45 5f 49 44 58 54 59 50 45 5f 49 50 4b  LITE_IDXTYPE_IPK
16f60 20 20 20 20 20 20 20 20 20 33 20 20 20 2f 2a 20           3   /* 
16f70 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20  INTEGER PRIMARY 
16f80 4b 45 59 20 69 6e 64 65 78 20 2a 2f 0a 0a 2f 2a  KEY index */../*
16f90 20 52 65 74 75 72 6e 20 74 72 75 65 20 69 66 20   Return true if 
16fa0 69 6e 64 65 78 20 58 20 69 73 20 61 20 50 52 49  index X is a PRI
16fb0 4d 41 52 59 20 4b 45 59 20 69 6e 64 65 78 20 2a  MARY KEY index *
16fc0 2f 0a 23 64 65 66 69 6e 65 20 49 73 50 72 69 6d  /.#define IsPrim
16fd0 61 72 79 4b 65 79 49 6e 64 65 78 28 58 29 20 20  aryKeyIndex(X)  
16fe0 28 28 58 29 2d 3e 69 64 78 54 79 70 65 3d 3d 53  ((X)->idxType==S
16ff0 51 4c 49 54 45 5f 49 44 58 54 59 50 45 5f 50 52  QLITE_IDXTYPE_PR
17000 49 4d 41 52 59 4b 45 59 29 0a 0a 2f 2a 20 52 65  IMARYKEY)../* Re
17010 74 75 72 6e 20 74 72 75 65 20 69 66 20 69 6e 64  turn true if ind
17020 65 78 20 58 20 69 73 20 61 20 55 4e 49 51 55 45  ex X is a UNIQUE
17030 20 69 6e 64 65 78 20 2a 2f 0a 23 64 65 66 69 6e   index */.#defin
17040 65 20 49 73 55 6e 69 71 75 65 49 6e 64 65 78 28  e IsUniqueIndex(
17050 58 29 20 20 20 20 20 20 28 28 58 29 2d 3e 6f 6e  X)      ((X)->on
17060 45 72 72 6f 72 21 3d 4f 45 5f 4e 6f 6e 65 29 0a  Error!=OE_None).
17070 0a 2f 2a 20 54 68 65 20 49 6e 64 65 78 2e 61 69  ./* The Index.ai
17080 43 6f 6c 75 6d 6e 5b 5d 20 76 61 6c 75 65 73 20  Column[] values 
17090 61 72 65 20 6e 6f 72 6d 61 6c 6c 79 20 70 6f 73  are normally pos
170a0 69 74 69 76 65 20 69 6e 74 65 67 65 72 2e 20 20  itive integer.  
170b0 42 75 74 0a 2a 2a 20 74 68 65 72 65 20 61 72 65  But.** there are
170c0 20 73 6f 6d 65 20 6e 65 67 61 74 69 76 65 20 76   some negative v
170d0 61 6c 75 65 73 20 74 68 61 74 20 68 61 76 65 20  alues that have 
170e0 73 70 65 63 69 61 6c 20 6d 65 61 6e 69 6e 67 3a  special meaning:
170f0 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 58 4e 5f 52  .*/.#define XN_R
17100 4f 57 49 44 20 20 20 20 20 28 2d 31 29 20 20 20  OWID     (-1)   
17110 20 20 2f 2a 20 49 6e 64 65 78 65 64 20 63 6f 6c    /* Indexed col
17120 75 6d 6e 20 69 73 20 74 68 65 20 72 6f 77 69 64  umn is the rowid
17130 20 2a 2f 0a 23 64 65 66 69 6e 65 20 58 4e 5f 45   */.#define XN_E
17140 58 50 52 20 20 20 20 20 20 28 2d 32 29 20 20 20  XPR      (-2)   
17150 20 20 2f 2a 20 49 6e 64 65 78 65 64 20 63 6f 6c    /* Indexed col
17160 75 6d 6e 20 69 73 20 61 6e 20 65 78 70 72 65 73  umn is an expres
17170 73 69 6f 6e 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 45  sion */../*.** E
17180 61 63 68 20 73 61 6d 70 6c 65 20 73 74 6f 72 65  ach sample store
17190 64 20 69 6e 20 74 68 65 20 73 71 6c 69 74 65 5f  d in the sqlite_
171a0 73 74 61 74 33 20 74 61 62 6c 65 20 69 73 20 72  stat3 table is r
171b0 65 70 72 65 73 65 6e 74 65 64 20 69 6e 20 6d 65  epresented in me
171c0 6d 6f 72 79 0a 2a 2a 20 75 73 69 6e 67 20 61 20  mory.** using a 
171d0 73 74 72 75 63 74 75 72 65 20 6f 66 20 74 68 69  structure of thi
171e0 73 20 74 79 70 65 2e 20 20 53 65 65 20 64 6f 63  s type.  See doc
171f0 75 6d 65 6e 74 61 74 69 6f 6e 20 61 74 20 74 68  umentation at th
17200 65 20 74 6f 70 20 6f 66 20 74 68 65 0a 2a 2a 20  e top of the.** 
17210 61 6e 61 6c 79 7a 65 2e 63 20 73 6f 75 72 63 65  analyze.c source
17220 20 66 69 6c 65 20 66 6f 72 20 61 64 64 69 74 69   file for additi
17230 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  onal information
17240 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 49 6e 64 65  ..*/.struct Inde
17250 78 53 61 6d 70 6c 65 20 7b 0a 20 20 76 6f 69 64  xSample {.  void
17260 20 2a 70 3b 20 20 20 20 20 20 20 20 20 20 2f 2a   *p;          /*
17270 20 50 6f 69 6e 74 65 72 20 74 6f 20 73 61 6d 70   Pointer to samp
17280 6c 65 64 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20  led record */.  
17290 69 6e 74 20 6e 3b 20 20 20 20 20 20 20 20 20 20  int n;          
172a0 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20 72 65 63    /* Size of rec
172b0 6f 72 64 20 69 6e 20 62 79 74 65 73 20 2a 2f 0a  ord in bytes */.
172c0 20 20 74 52 6f 77 63 6e 74 20 2a 61 6e 45 71 3b    tRowcnt *anEq;
172d0 20 20 20 20 2f 2a 20 45 73 74 2e 20 6e 75 6d 62      /* Est. numb
172e0 65 72 20 6f 66 20 72 6f 77 73 20 77 68 65 72 65  er of rows where
172f0 20 74 68 65 20 6b 65 79 20 65 71 75 61 6c 73 20   the key equals 
17300 74 68 69 73 20 73 61 6d 70 6c 65 20 2a 2f 0a 20  this sample */. 
17310 20 74 52 6f 77 63 6e 74 20 2a 61 6e 4c 74 3b 20   tRowcnt *anLt; 
17320 20 20 20 2f 2a 20 45 73 74 2e 20 6e 75 6d 62 65     /* Est. numbe
17330 72 20 6f 66 20 72 6f 77 73 20 77 68 65 72 65 20  r of rows where 
17340 6b 65 79 20 69 73 20 6c 65 73 73 20 74 68 61 6e  key is less than
17350 20 74 68 69 73 20 73 61 6d 70 6c 65 20 2a 2f 0a   this sample */.
17360 20 20 74 52 6f 77 63 6e 74 20 2a 61 6e 44 4c 74    tRowcnt *anDLt
17370 3b 20 20 20 2f 2a 20 45 73 74 2e 20 6e 75 6d 62  ;   /* Est. numb
17380 65 72 20 6f 66 20 64 69 73 74 69 6e 63 74 20 6b  er of distinct k
17390 65 79 73 20 6c 65 73 73 20 74 68 61 6e 20 74 68  eys less than th
173a0 69 73 20 73 61 6d 70 6c 65 20 2a 2f 0a 7d 3b 0a  is sample */.};.
173b0 0a 2f 2a 0a 2a 2a 20 50 6f 73 73 69 62 6c 65 20  ./*.** Possible 
173c0 76 61 6c 75 65 73 20 74 6f 20 75 73 65 20 77 69  values to use wi
173d0 74 68 69 6e 20 74 68 65 20 66 6c 61 67 73 20 61  thin the flags a
173e0 72 67 75 6d 65 6e 74 20 74 6f 20 73 71 6c 69 74  rgument to sqlit
173f0 65 33 47 65 74 54 6f 6b 65 6e 28 29 2e 0a 2a 2f  e3GetToken()..*/
17400 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
17410 54 4f 4b 45 4e 5f 51 55 4f 54 45 44 20 20 20 20  TOKEN_QUOTED    
17420 30 78 31 20 2f 2a 20 54 6f 6b 65 6e 20 69 73 20  0x1 /* Token is 
17430 61 20 71 75 6f 74 65 64 20 69 64 65 6e 74 69 66  a quoted identif
17440 69 65 72 2e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ier. */.#define 
17450 53 51 4c 49 54 45 5f 54 4f 4b 45 4e 5f 4b 45 59  SQLITE_TOKEN_KEY
17460 57 4f 52 44 20 20 20 30 78 32 20 2f 2a 20 54 6f  WORD   0x2 /* To
17470 6b 65 6e 20 69 73 20 61 20 6b 65 79 77 6f 72 64  ken is a keyword
17480 2e 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68  . */../*.** Each
17490 20 74 6f 6b 65 6e 20 63 6f 6d 69 6e 67 20 6f 75   token coming ou
174a0 74 20 6f 66 20 74 68 65 20 6c 65 78 65 72 20 69  t of the lexer i
174b0 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  s an instance of
174c0 0a 2a 2a 20 74 68 69 73 20 73 74 72 75 63 74 75  .** this structu
174d0 72 65 2e 20 20 54 6f 6b 65 6e 73 20 61 72 65 20  re.  Tokens are 
174e0 61 6c 73 6f 20 75 73 65 64 20 61 73 20 70 61 72  also used as par
174f0 74 20 6f 66 20 61 6e 20 65 78 70 72 65 73 73 69  t of an expressi
17500 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6d 65  on..**.** The me
17510 6d 6f 72 79 20 74 68 61 74 20 22 7a 22 20 70 6f  mory that "z" po
17520 69 6e 74 73 20 74 6f 20 69 73 20 6f 77 6e 65 64  ints to is owned
17530 20 62 79 20 6f 74 68 65 72 20 6f 62 6a 65 63 74   by other object
17540 73 2e 20 20 54 61 6b 65 20 63 61 72 65 0a 2a 2a  s.  Take care.**
17550 20 74 68 61 74 20 74 68 65 20 6f 77 6e 65 72 20   that the owner 
17560 6f 66 20 74 68 65 20 22 7a 22 20 73 74 72 69 6e  of the "z" strin
17570 67 20 64 6f 65 73 20 6e 6f 74 20 64 65 61 6c 6c  g does not deall
17580 6f 63 61 74 65 20 74 68 65 20 73 74 72 69 6e 67  ocate the string
17590 20 62 65 66 6f 72 65 0a 2a 2a 20 74 68 65 20 54   before.** the T
175a0 6f 6b 65 6e 20 67 6f 65 73 20 6f 75 74 20 6f 66  oken goes out of
175b0 20 73 63 6f 70 65 21 20 20 56 65 72 79 20 6f 66   scope!  Very of
175c0 74 65 6e 2c 20 74 68 65 20 22 7a 22 20 70 6f 69  ten, the "z" poi
175d0 6e 74 73 20 74 6f 20 73 6f 6d 65 20 70 6c 61 63  nts to some plac
175e0 65 0a 2a 2a 20 69 6e 20 74 68 65 20 6d 69 64 64  e.** in the midd
175f0 6c 65 20 6f 66 20 74 68 65 20 50 61 72 73 65 2e  le of the Parse.
17600 7a 53 71 6c 20 74 65 78 74 2e 20 20 42 75 74 20  zSql text.  But 
17610 69 74 20 6d 69 67 68 74 20 61 6c 73 6f 20 70 6f  it might also po
17620 69 6e 74 20 74 6f 20 61 0a 2a 2a 20 73 74 61 74  int to a.** stat
17630 69 63 20 73 74 72 69 6e 67 2e 0a 2a 2f 0a 73 74  ic string..*/.st
17640 72 75 63 74 20 54 6f 6b 65 6e 20 7b 0a 20 20 63  ruct Token {.  c
17650 6f 6e 73 74 20 63 68 61 72 20 2a 7a 3b 20 20 20  onst char *z;   
17660 20 20 2f 2a 20 54 65 78 74 20 6f 66 20 74 68 65    /* Text of the
17670 20 74 6f 6b 65 6e 2e 20 20 4e 6f 74 20 4e 55 4c   token.  Not NUL
17680 4c 2d 74 65 72 6d 69 6e 61 74 65 64 21 20 2a 2f  L-terminated! */
17690 0a 20 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 20  .  unsigned int 
176a0 6e 3b 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20  n;    /* Number 
176b0 6f 66 20 63 68 61 72 61 63 74 65 72 73 20 69 6e  of characters in
176c0 20 74 68 69 73 20 74 6f 6b 65 6e 20 2a 2f 0a 7d   this token */.}
176d0 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74  ;../*.** An inst
176e0 61 6e 63 65 20 6f 66 20 74 68 69 73 20 73 74 72  ance of this str
176f0 75 63 74 75 72 65 20 63 6f 6e 74 61 69 6e 73 20  ucture contains 
17700 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 6e 65 65 64  information need
17710 65 64 20 74 6f 20 67 65 6e 65 72 61 74 65 0a 2a  ed to generate.*
17720 2a 20 63 6f 64 65 20 66 6f 72 20 61 20 53 45 4c  * code for a SEL
17730 45 43 54 20 74 68 61 74 20 63 6f 6e 74 61 69 6e  ECT that contain
17740 73 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63  s aggregate func
17750 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  tions..**.** If 
17760 45 78 70 72 2e 6f 70 3d 3d 54 4b 5f 41 47 47 5f  Expr.op==TK_AGG_
17770 43 4f 4c 55 4d 4e 20 6f 72 20 54 4b 5f 41 47 47  COLUMN or TK_AGG
17780 5f 46 55 4e 43 54 49 4f 4e 20 74 68 65 6e 20 45  _FUNCTION then E
17790 78 70 72 2e 70 41 67 67 49 6e 66 6f 20 69 73 20  xpr.pAggInfo is 
177a0 61 0a 2a 2a 20 70 6f 69 6e 74 65 72 20 74 6f 20  a.** pointer to 
177b0 74 68 69 73 20 73 74 72 75 63 74 75 72 65 2e 20  this structure. 
177c0 20 54 68 65 20 45 78 70 72 2e 69 43 6f 6c 75 6d   The Expr.iColum
177d0 6e 20 66 69 65 6c 64 20 69 73 20 74 68 65 20 69  n field is the i
177e0 6e 64 65 78 20 69 6e 0a 2a 2a 20 41 67 67 49 6e  ndex in.** AggIn
177f0 66 6f 2e 61 43 6f 6c 5b 5d 20 6f 72 20 41 67 67  fo.aCol[] or Agg
17800 49 6e 66 6f 2e 61 46 75 6e 63 5b 5d 20 6f 66 20  Info.aFunc[] of 
17810 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 6e 65 65 64  information need
17820 65 64 20 74 6f 20 67 65 6e 65 72 61 74 65 0a 2a  ed to generate.*
17830 2a 20 63 6f 64 65 20 66 6f 72 20 74 68 61 74 20  * code for that 
17840 6e 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 41 67 67 49  node..**.** AggI
17850 6e 66 6f 2e 70 47 72 6f 75 70 42 79 20 61 6e 64  nfo.pGroupBy and
17860 20 41 67 67 49 6e 66 6f 2e 61 46 75 6e 63 2e 70   AggInfo.aFunc.p
17870 45 78 70 72 20 70 6f 69 6e 74 20 74 6f 20 66 69  Expr point to fi
17880 65 6c 64 73 20 77 69 74 68 69 6e 20 74 68 65 0a  elds within the.
17890 2a 2a 20 6f 72 69 67 69 6e 61 6c 20 53 65 6c 65  ** original Sele
178a0 63 74 20 73 74 72 75 63 74 75 72 65 20 74 68 61  ct structure tha
178b0 74 20 64 65 73 63 72 69 62 65 73 20 74 68 65 20  t describes the 
178c0 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74  SELECT statement
178d0 2e 20 20 54 68 65 73 65 0a 2a 2a 20 66 69 65 6c  .  These.** fiel
178e0 64 73 20 64 6f 20 6e 6f 74 20 6e 65 65 64 20 74  ds do not need t
178f0 6f 20 62 65 20 66 72 65 65 64 20 77 68 65 6e 20  o be freed when 
17900 64 65 61 6c 6c 6f 63 61 74 69 6e 67 20 74 68 65  deallocating the
17910 20 41 67 67 49 6e 66 6f 20 73 74 72 75 63 74 75   AggInfo structu
17920 72 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 41 67  re..*/.struct Ag
17930 67 49 6e 66 6f 20 7b 0a 20 20 75 38 20 64 69 72  gInfo {.  u8 dir
17940 65 63 74 4d 6f 64 65 3b 20 20 20 20 20 20 20 20  ectMode;        
17950 20 20 2f 2a 20 44 69 72 65 63 74 20 72 65 6e 64    /* Direct rend
17960 65 72 69 6e 67 20 6d 6f 64 65 20 6d 65 61 6e 73  ering mode means
17970 20 74 61 6b 65 20 64 61 74 61 20 64 69 72 65 63   take data direc
17980 74 6c 79 0a 20 20 20 20 20 20 20 20 20 20 20 20  tly.            
17990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a                **
179a0 20 66 72 6f 6d 20 73 6f 75 72 63 65 20 74 61 62   from source tab
179b0 6c 65 73 20 72 61 74 68 65 72 20 74 68 61 6e 20  les rather than 
179c0 66 72 6f 6d 20 61 63 63 75 6d 75 6c 61 74 6f 72  from accumulator
179d0 73 20 2a 2f 0a 20 20 75 38 20 75 73 65 53 6f 72  s */.  u8 useSor
179e0 74 69 6e 67 49 64 78 3b 20 20 20 20 20 20 20 2f  tingIdx;       /
179f0 2a 20 49 6e 20 64 69 72 65 63 74 20 6d 6f 64 65  * In direct mode
17a00 2c 20 72 65 66 65 72 65 6e 63 65 20 74 68 65 20  , reference the 
17a10 73 6f 72 74 69 6e 67 20 69 6e 64 65 78 20 72 61  sorting index ra
17a20 74 68 65 72 0a 20 20 20 20 20 20 20 20 20 20 20  ther.           
17a30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a                 *
17a40 2a 20 74 68 61 6e 20 74 68 65 20 73 6f 75 72 63  * than the sourc
17a50 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20 69 6e 74  e table */.  int
17a60 20 73 6f 72 74 69 6e 67 49 64 78 3b 20 20 20 20   sortingIdx;    
17a70 20 20 20 20 20 2f 2a 20 43 75 72 73 6f 72 20 6e       /* Cursor n
17a80 75 6d 62 65 72 20 6f 66 20 74 68 65 20 73 6f 72  umber of the sor
17a90 74 69 6e 67 20 69 6e 64 65 78 20 2a 2f 0a 20 20  ting index */.  
17aa0 69 6e 74 20 73 6f 72 74 69 6e 67 49 64 78 50 54  int sortingIdxPT
17ab0 61 62 3b 20 20 20 20 20 2f 2a 20 43 75 72 73 6f  ab;     /* Curso
17ac0 72 20 6e 75 6d 62 65 72 20 6f 66 20 70 73 65 75  r number of pseu
17ad0 64 6f 2d 74 61 62 6c 65 20 2a 2f 0a 20 20 69 6e  do-table */.  in
17ae0 74 20 6e 53 6f 72 74 69 6e 67 43 6f 6c 75 6d 6e  t nSortingColumn
17af0 3b 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20  ;     /* Number 
17b00 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68  of columns in th
17b10 65 20 73 6f 72 74 69 6e 67 20 69 6e 64 65 78 20  e sorting index 
17b20 2a 2f 0a 20 20 69 6e 74 20 6d 6e 52 65 67 2c 20  */.  int mnReg, 
17b30 6d 78 52 65 67 3b 20 20 20 20 20 20 20 2f 2a 20  mxReg;       /* 
17b40 52 61 6e 67 65 20 6f 66 20 72 65 67 69 73 74 65  Range of registe
17b50 72 73 20 61 6c 6c 6f 63 61 74 65 64 20 66 6f 72  rs allocated for
17b60 20 61 43 6f 6c 20 61 6e 64 20 61 46 75 6e 63 20   aCol and aFunc 
17b70 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70  */.  ExprList *p
17b80 47 72 6f 75 70 42 79 3b 20 20 20 20 20 2f 2a 20  GroupBy;     /* 
17b90 54 68 65 20 67 72 6f 75 70 20 62 79 20 63 6c 61  The group by cla
17ba0 75 73 65 20 2a 2f 0a 20 20 73 74 72 75 63 74 20  use */.  struct 
17bb0 41 67 67 49 6e 66 6f 5f 63 6f 6c 20 7b 20 20 20  AggInfo_col {   
17bc0 20 2f 2a 20 46 6f 72 20 65 61 63 68 20 63 6f 6c   /* For each col
17bd0 75 6d 6e 20 75 73 65 64 20 69 6e 20 73 6f 75 72  umn used in sour
17be0 63 65 20 74 61 62 6c 65 73 20 2a 2f 0a 20 20 20  ce tables */.   
17bf0 20 54 61 62 6c 65 20 2a 70 54 61 62 3b 20 20 20   Table *pTab;   
17c00 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 6f 75            /* Sou
17c10 72 63 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20  rce table */.   
17c20 20 69 6e 74 20 69 54 61 62 6c 65 3b 20 20 20 20   int iTable;    
17c30 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 75 72            /* Cur
17c40 73 6f 72 20 6e 75 6d 62 65 72 20 6f 66 20 74 68  sor number of th
17c50 65 20 73 6f 75 72 63 65 20 74 61 62 6c 65 20 2a  e source table *
17c60 2f 0a 20 20 20 20 69 6e 74 20 69 43 6f 6c 75 6d  /.    int iColum
17c70 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  n;             /
17c80 2a 20 43 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20  * Column number 
17c90 77 69 74 68 69 6e 20 74 68 65 20 73 6f 75 72 63  within the sourc
17ca0 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20 69  e table */.    i
17cb0 6e 74 20 69 53 6f 72 74 65 72 43 6f 6c 75 6d 6e  nt iSorterColumn
17cc0 3b 20 20 20 20 20 20 20 2f 2a 20 43 6f 6c 75 6d  ;       /* Colum
17cd0 6e 20 6e 75 6d 62 65 72 20 69 6e 20 74 68 65 20  n number in the 
17ce0 73 6f 72 74 69 6e 67 20 69 6e 64 65 78 20 2a 2f  sorting index */
17cf0 0a 20 20 20 20 69 6e 74 20 69 4d 65 6d 3b 20 20  .    int iMem;  
17d00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
17d10 20 4d 65 6d 6f 72 79 20 6c 6f 63 61 74 69 6f 6e   Memory location
17d20 20 74 68 61 74 20 61 63 74 73 20 61 73 20 61 63   that acts as ac
17d30 63 75 6d 75 6c 61 74 6f 72 20 2a 2f 0a 20 20 20  cumulator */.   
17d40 20 45 78 70 72 20 2a 70 45 78 70 72 3b 20 20 20   Expr *pExpr;   
17d50 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
17d60 20 6f 72 69 67 69 6e 61 6c 20 65 78 70 72 65 73   original expres
17d70 73 69 6f 6e 20 2a 2f 0a 20 20 7d 20 2a 61 43 6f  sion */.  } *aCo
17d80 6c 3b 0a 20 20 69 6e 74 20 6e 43 6f 6c 75 6d 6e  l;.  int nColumn
17d90 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
17da0 4e 75 6d 62 65 72 20 6f 66 20 75 73 65 64 20 65  Number of used e
17db0 6e 74 72 69 65 73 20 69 6e 20 61 43 6f 6c 5b 5d  ntries in aCol[]
17dc0 20 2a 2f 0a 20 20 69 6e 74 20 6e 41 63 63 75 6d   */.  int nAccum
17dd0 75 6c 61 74 6f 72 3b 20 20 20 20 20 20 20 2f 2a  ulator;       /*
17de0 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d   Number of colum
17df0 6e 73 20 74 68 61 74 20 73 68 6f 77 20 74 68 72  ns that show thr
17e00 6f 75 67 68 20 74 6f 20 74 68 65 20 6f 75 74 70  ough to the outp
17e10 75 74 2e 0a 20 20 20 20 20 20 20 20 20 20 20 20  ut..            
17e20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a                **
17e30 20 41 64 64 69 74 69 6f 6e 61 6c 20 63 6f 6c 75   Additional colu
17e40 6d 6e 73 20 61 72 65 20 75 73 65 64 20 6f 6e 6c  mns are used onl
17e50 79 20 61 73 20 70 61 72 61 6d 65 74 65 72 73 20  y as parameters 
17e60 74 6f 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  to.             
17e70 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20               ** 
17e80 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69  aggregate functi
17e90 6f 6e 73 20 2a 2f 0a 20 20 73 74 72 75 63 74 20  ons */.  struct 
17ea0 41 67 67 49 6e 66 6f 5f 66 75 6e 63 20 7b 20 20  AggInfo_func {  
17eb0 20 2f 2a 20 46 6f 72 20 65 61 63 68 20 61 67 67   /* For each agg
17ec0 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 20  regate function 
17ed0 2a 2f 0a 20 20 20 20 45 78 70 72 20 2a 70 45 78  */.    Expr *pEx
17ee0 70 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  pr;             
17ef0 2f 2a 20 45 78 70 72 65 73 73 69 6f 6e 20 65 6e  /* Expression en
17f00 63 6f 64 69 6e 67 20 74 68 65 20 66 75 6e 63 74  coding the funct
17f10 69 6f 6e 20 2a 2f 0a 20 20 20 20 46 75 6e 63 44  ion */.    FuncD
17f20 65 66 20 2a 70 46 75 6e 63 3b 20 20 20 20 20 20  ef *pFunc;      
17f30 20 20 20 20 2f 2a 20 54 68 65 20 61 67 67 72 65      /* The aggre
17f40 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 20 69 6d  gate function im
17f50 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 2a 2f 0a  plementation */.
17f60 20 20 20 20 69 6e 74 20 69 4d 65 6d 3b 20 20 20      int iMem;   
17f70 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
17f80 4d 65 6d 6f 72 79 20 6c 6f 63 61 74 69 6f 6e 20  Memory location 
17f90 74 68 61 74 20 61 63 74 73 20 61 73 20 61 63 63  that acts as acc
17fa0 75 6d 75 6c 61 74 6f 72 20 2a 2f 0a 20 20 20 20  umulator */.    
17fb0 69 6e 74 20 69 44 69 73 74 69 6e 63 74 3b 20 20  int iDistinct;  
17fc0 20 20 20 20 20 20 20 20 20 2f 2a 20 45 70 68 65           /* Ephe
17fd0 6d 65 72 61 6c 20 74 61 62 6c 65 20 75 73 65 64  meral table used
17fe0 20 74 6f 20 65 6e 66 6f 72 63 65 20 44 49 53 54   to enforce DIST
17ff0 49 4e 43 54 20 2a 2f 0a 20 20 7d 20 2a 61 46 75  INCT */.  } *aFu
18000 6e 63 3b 0a 20 20 69 6e 74 20 6e 46 75 6e 63 3b  nc;.  int nFunc;
18010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
18020 20 4e 75 6d 62 65 72 20 6f 66 20 65 6e 74 72 69   Number of entri
18030 65 73 20 69 6e 20 61 46 75 6e 63 5b 5d 20 2a 2f  es in aFunc[] */
18040 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 64  .};../*.** The d
18050 61 74 61 74 79 70 65 20 79 6e 56 61 72 20 69 73  atatype ynVar is
18060 20 61 20 73 69 67 6e 65 64 20 69 6e 74 65 67 65   a signed intege
18070 72 2c 20 65 69 74 68 65 72 20 31 36 2d 62 69 74  r, either 16-bit
18080 20 6f 72 20 33 32 2d 62 69 74 2e 0a 2a 2a 20 55   or 32-bit..** U
18090 73 75 61 6c 6c 79 20 69 74 20 69 73 20 31 36 2d  sually it is 16-
180a0 62 69 74 73 2e 20 20 42 75 74 20 69 66 20 53 51  bits.  But if SQ
180b0 4c 49 54 45 5f 4d 41 58 5f 56 41 52 49 41 42 4c  LITE_MAX_VARIABL
180c0 45 5f 4e 55 4d 42 45 52 20 69 73 20 67 72 65 61  E_NUMBER is grea
180d0 74 65 72 0a 2a 2a 20 74 68 61 6e 20 33 32 37 36  ter.** than 3276
180e0 37 20 77 65 20 68 61 76 65 20 74 6f 20 6d 61 6b  7 we have to mak
180f0 65 20 69 74 20 33 32 2d 62 69 74 2e 20 20 31 36  e it 32-bit.  16
18100 2d 62 69 74 20 69 73 20 70 72 65 66 65 72 72 65  -bit is preferre
18110 64 20 62 65 63 61 75 73 65 0a 2a 2a 20 69 74 20  d because.** it 
18120 75 73 65 73 20 6c 65 73 73 20 6d 65 6d 6f 72 79  uses less memory
18130 20 69 6e 20 74 68 65 20 45 78 70 72 20 6f 62 6a   in the Expr obj
18140 65 63 74 2c 20 77 68 69 63 68 20 69 73 20 61 20  ect, which is a 
18150 62 69 67 20 6d 65 6d 6f 72 79 20 75 73 65 72 0a  big memory user.
18160 2a 2a 20 69 6e 20 73 79 73 74 65 6d 73 20 77 69  ** in systems wi
18170 74 68 20 6c 6f 74 73 20 6f 66 20 70 72 65 70 61  th lots of prepa
18180 72 65 64 20 73 74 61 74 65 6d 65 6e 74 73 2e 20  red statements. 
18190 20 41 6e 64 20 66 65 77 20 61 70 70 6c 69 63 61   And few applica
181a0 74 69 6f 6e 73 0a 2a 2a 20 6e 65 65 64 20 6d 6f  tions.** need mo
181b0 72 65 20 74 68 61 6e 20 61 62 6f 75 74 20 31 30  re than about 10
181c0 20 6f 72 20 32 30 20 76 61 72 69 61 62 6c 65 73   or 20 variables
181d0 2e 20 20 42 75 74 20 73 6f 6d 65 20 65 78 74 72  .  But some extr
181e0 65 6d 65 20 75 73 65 72 73 20 77 61 6e 74 0a 2a  eme users want.*
181f0 2a 20 74 6f 20 68 61 76 65 20 70 72 65 70 61 72  * to have prepar
18200 65 64 20 73 74 61 74 65 6d 65 6e 74 73 20 77 69  ed statements wi
18210 74 68 20 6f 76 65 72 20 33 32 37 36 37 20 76 61  th over 32767 va
18220 72 69 61 62 6c 65 73 2c 20 61 6e 64 20 66 6f 72  riables, and for
18230 20 74 68 65 6d 0a 2a 2a 20 74 68 65 20 6f 70 74   them.** the opt
18240 69 6f 6e 20 69 73 20 61 76 61 69 6c 61 62 6c 65  ion is available
18250 20 28 61 74 20 63 6f 6d 70 69 6c 65 2d 74 69 6d   (at compile-tim
18260 65 29 2e 0a 2a 2f 0a 23 69 66 20 53 51 4c 49 54  e)..*/.#if SQLIT
18270 45 5f 4d 41 58 5f 56 41 52 49 41 42 4c 45 5f 4e  E_MAX_VARIABLE_N
18280 55 4d 42 45 52 3c 3d 33 32 37 36 37 0a 74 79 70  UMBER<=32767.typ
18290 65 64 65 66 20 69 31 36 20 79 6e 56 61 72 3b 0a  edef i16 ynVar;.
182a0 23 65 6c 73 65 0a 74 79 70 65 64 65 66 20 69 6e  #else.typedef in
182b0 74 20 79 6e 56 61 72 3b 0a 23 65 6e 64 69 66 0a  t ynVar;.#endif.
182c0 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 6e 6f 64 65  ./*.** Each node
182d0 20 6f 66 20 61 6e 20 65 78 70 72 65 73 73 69 6f   of an expressio
182e0 6e 20 69 6e 20 74 68 65 20 70 61 72 73 65 20 74  n in the parse t
182f0 72 65 65 20 69 73 20 61 6e 20 69 6e 73 74 61 6e  ree is an instan
18300 63 65 0a 2a 2a 20 6f 66 20 74 68 69 73 20 73 74  ce.** of this st
18310 72 75 63 74 75 72 65 2e 0a 2a 2a 0a 2a 2a 20 45  ructure..**.** E
18320 78 70 72 2e 6f 70 20 69 73 20 74 68 65 20 6f 70  xpr.op is the op
18330 63 6f 64 65 2e 20 54 68 65 20 69 6e 74 65 67 65  code. The intege
18340 72 20 70 61 72 73 65 72 20 74 6f 6b 65 6e 20 63  r parser token c
18350 6f 64 65 73 20 61 72 65 20 72 65 75 73 65 64 0a  odes are reused.
18360 2a 2a 20 61 73 20 6f 70 63 6f 64 65 73 20 68 65  ** as opcodes he
18370 72 65 2e 20 46 6f 72 20 65 78 61 6d 70 6c 65 2c  re. For example,
18380 20 74 68 65 20 70 61 72 73 65 72 20 64 65 66 69   the parser defi
18390 6e 65 73 20 54 4b 5f 47 45 20 74 6f 20 62 65 20  nes TK_GE to be 
183a0 61 6e 20 69 6e 74 65 67 65 72 0a 2a 2a 20 63 6f  an integer.** co
183b0 64 65 20 72 65 70 72 65 73 65 6e 74 69 6e 67 20  de representing 
183c0 74 68 65 20 22 3e 3d 22 20 6f 70 65 72 61 74 6f  the ">=" operato
183d0 72 2e 20 54 68 69 73 20 73 61 6d 65 20 69 6e 74  r. This same int
183e0 65 67 65 72 20 63 6f 64 65 20 69 73 20 72 65 75  eger code is reu
183f0 73 65 64 0a 2a 2a 20 74 6f 20 72 65 70 72 65 73  sed.** to repres
18400 65 6e 74 20 74 68 65 20 67 72 65 61 74 65 72 2d  ent the greater-
18410 74 68 61 6e 2d 6f 72 2d 65 71 75 61 6c 2d 74 6f  than-or-equal-to
18420 20 6f 70 65 72 61 74 6f 72 20 69 6e 20 74 68 65   operator in the
18430 20 65 78 70 72 65 73 73 69 6f 6e 0a 2a 2a 20 74   expression.** t
18440 72 65 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68  ree..**.** If th
18450 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20  e expression is 
18460 61 6e 20 53 51 4c 20 6c 69 74 65 72 61 6c 20 28  an SQL literal (
18470 54 4b 5f 49 4e 54 45 47 45 52 2c 20 54 4b 5f 46  TK_INTEGER, TK_F
18480 4c 4f 41 54 2c 20 54 4b 5f 42 4c 4f 42 2c 0a 2a  LOAT, TK_BLOB,.*
18490 2a 20 6f 72 20 54 4b 5f 53 54 52 49 4e 47 29 2c  * or TK_STRING),
184a0 20 74 68 65 6e 20 45 78 70 72 2e 74 6f 6b 65 6e   then Expr.token
184b0 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 74 65   contains the te
184c0 78 74 20 6f 66 20 74 68 65 20 53 51 4c 20 6c 69  xt of the SQL li
184d0 74 65 72 61 6c 2e 20 49 66 0a 2a 2a 20 74 68 65  teral. If.** the
184e0 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61   expression is a
184f0 20 76 61 72 69 61 62 6c 65 20 28 54 4b 5f 56 41   variable (TK_VA
18500 52 49 41 42 4c 45 29 2c 20 74 68 65 6e 20 45 78  RIABLE), then Ex
18510 70 72 2e 74 6f 6b 65 6e 20 63 6f 6e 74 61 69 6e  pr.token contain
18520 73 20 74 68 65 0a 2a 2a 20 76 61 72 69 61 62 6c  s the.** variabl
18530 65 20 6e 61 6d 65 2e 20 46 69 6e 61 6c 6c 79 2c  e name. Finally,
18540 20 69 66 20 74 68 65 20 65 78 70 72 65 73 73 69   if the expressi
18550 6f 6e 20 69 73 20 61 6e 20 53 51 4c 20 66 75 6e  on is an SQL fun
18560 63 74 69 6f 6e 20 28 54 4b 5f 46 55 4e 43 54 49  ction (TK_FUNCTI
18570 4f 4e 29 2c 0a 2a 2a 20 74 68 65 6e 20 45 78 70  ON),.** then Exp
18580 72 2e 74 6f 6b 65 6e 20 63 6f 6e 74 61 69 6e 73  r.token contains
18590 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65   the name of the
185a0 20 66 75 6e 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a   function..**.**
185b0 20 45 78 70 72 2e 70 52 69 67 68 74 20 61 6e 64   Expr.pRight and
185c0 20 45 78 70 72 2e 70 4c 65 66 74 20 61 72 65 20   Expr.pLeft are 
185d0 74 68 65 20 6c 65 66 74 20 61 6e 64 20 72 69 67  the left and rig
185e0 68 74 20 73 75 62 65 78 70 72 65 73 73 69 6f 6e  ht subexpression
185f0 73 20 6f 66 20 61 0a 2a 2a 20 62 69 6e 61 72 79  s of a.** binary
18600 20 6f 70 65 72 61 74 6f 72 2e 20 45 69 74 68 65   operator. Eithe
18610 72 20 6f 72 20 62 6f 74 68 20 6d 61 79 20 62 65  r or both may be
18620 20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a 2a 20 45 78 70   NULL..**.** Exp
18630 72 2e 78 2e 70 4c 69 73 74 20 69 73 20 61 20 6c  r.x.pList is a l
18640 69 73 74 20 6f 66 20 61 72 67 75 6d 65 6e 74 73  ist of arguments
18650 20 69 66 20 74 68 65 20 65 78 70 72 65 73 73 69   if the expressi
18660 6f 6e 20 69 73 20 61 6e 20 53 51 4c 20 66 75 6e  on is an SQL fun
18670 63 74 69 6f 6e 2c 0a 2a 2a 20 61 20 43 41 53 45  ction,.** a CASE
18680 20 65 78 70 72 65 73 73 69 6f 6e 20 6f 72 20 61   expression or a
18690 6e 20 49 4e 20 65 78 70 72 65 73 73 69 6f 6e 20  n IN expression 
186a0 6f 66 20 74 68 65 20 66 6f 72 6d 20 22 3c 6c 68  of the form "<lh
186b0 73 3e 20 49 4e 20 28 3c 79 3e 2c 20 3c 7a 3e 2e  s> IN (<y>, <z>.
186c0 2e 2e 29 22 2e 0a 2a 2a 20 45 78 70 72 2e 78 2e  ..)"..** Expr.x.
186d0 70 53 65 6c 65 63 74 20 69 73 20 75 73 65 64 20  pSelect is used 
186e0 69 66 20 74 68 65 20 65 78 70 72 65 73 73 69 6f  if the expressio
186f0 6e 20 69 73 20 61 20 73 75 62 2d 73 65 6c 65 63  n is a sub-selec
18700 74 20 6f 72 20 61 6e 20 65 78 70 72 65 73 73 69  t or an expressi
18710 6f 6e 20 6f 66 0a 2a 2a 20 74 68 65 20 66 6f 72  on of.** the for
18720 6d 20 22 3c 6c 68 73 3e 20 49 4e 20 28 53 45 4c  m "<lhs> IN (SEL
18730 45 43 54 20 2e 2e 2e 29 22 2e 20 49 66 20 74 68  ECT ...)". If th
18740 65 20 45 50 5f 78 49 73 53 65 6c 65 63 74 20 62  e EP_xIsSelect b
18750 69 74 20 69 73 20 73 65 74 20 69 6e 20 74 68 65  it is set in the
18760 0a 2a 2a 20 45 78 70 72 2e 66 6c 61 67 73 20 6d  .** Expr.flags m
18770 61 73 6b 2c 20 74 68 65 6e 20 45 78 70 72 2e 78  ask, then Expr.x
18780 2e 70 53 65 6c 65 63 74 20 69 73 20 76 61 6c 69  .pSelect is vali
18790 64 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 45 78  d. Otherwise, Ex
187a0 70 72 2e 78 2e 70 4c 69 73 74 20 69 73 0a 2a 2a  pr.x.pList is.**
187b0 20 76 61 6c 69 64 2e 0a 2a 2a 0a 2a 2a 20 41 6e   valid..**.** An
187c0 20 65 78 70 72 65 73 73 69 6f 6e 20 6f 66 20 74   expression of t
187d0 68 65 20 66 6f 72 6d 20 49 44 20 6f 72 20 49 44  he form ID or ID
187e0 2e 49 44 20 72 65 66 65 72 73 20 74 6f 20 61 20  .ID refers to a 
187f0 63 6f 6c 75 6d 6e 20 69 6e 20 61 20 74 61 62 6c  column in a tabl
18800 65 2e 0a 2a 2a 20 46 6f 72 20 73 75 63 68 20 65  e..** For such e
18810 78 70 72 65 73 73 69 6f 6e 73 2c 20 45 78 70 72  xpressions, Expr
18820 2e 6f 70 20 69 73 20 73 65 74 20 74 6f 20 54 4b  .op is set to TK
18830 5f 43 4f 4c 55 4d 4e 20 61 6e 64 20 45 78 70 72  _COLUMN and Expr
18840 2e 69 54 61 62 6c 65 20 69 73 0a 2a 2a 20 74 68  .iTable is.** th
18850 65 20 69 6e 74 65 67 65 72 20 63 75 72 73 6f 72  e integer cursor
18860 20 6e 75 6d 62 65 72 20 6f 66 20 61 20 56 44 42   number of a VDB
18870 45 20 63 75 72 73 6f 72 20 70 6f 69 6e 74 69 6e  E cursor pointin
18880 67 20 74 6f 20 74 68 61 74 20 74 61 62 6c 65 20  g to that table 
18890 61 6e 64 0a 2a 2a 20 45 78 70 72 2e 69 43 6f 6c  and.** Expr.iCol
188a0 75 6d 6e 20 69 73 20 74 68 65 20 63 6f 6c 75 6d  umn is the colum
188b0 6e 20 6e 75 6d 62 65 72 20 66 6f 72 20 74 68 65  n number for the
188c0 20 73 70 65 63 69 66 69 63 20 63 6f 6c 75 6d 6e   specific column
188d0 2e 20 20 49 66 20 74 68 65 0a 2a 2a 20 65 78 70  .  If the.** exp
188e0 72 65 73 73 69 6f 6e 20 69 73 20 75 73 65 64 20  ression is used 
188f0 61 73 20 61 20 72 65 73 75 6c 74 20 69 6e 20 61  as a result in a
18900 6e 20 61 67 67 72 65 67 61 74 65 20 53 45 4c 45  n aggregate SELE
18910 43 54 2c 20 74 68 65 6e 20 74 68 65 0a 2a 2a 20  CT, then the.** 
18920 76 61 6c 75 65 20 69 73 20 61 6c 73 6f 20 73 74  value is also st
18930 6f 72 65 64 20 69 6e 20 74 68 65 20 45 78 70 72  ored in the Expr
18940 2e 69 41 67 67 20 63 6f 6c 75 6d 6e 20 69 6e 20  .iAgg column in 
18950 74 68 65 20 61 67 67 72 65 67 61 74 65 20 73 6f  the aggregate so
18960 20 74 68 61 74 0a 2a 2a 20 69 74 20 63 61 6e 20   that.** it can 
18970 62 65 20 61 63 63 65 73 73 65 64 20 61 66 74 65  be accessed afte
18980 72 20 61 6c 6c 20 61 67 67 72 65 67 61 74 65 73  r all aggregates
18990 20 61 72 65 20 63 6f 6d 70 75 74 65 64 2e 0a 2a   are computed..*
189a0 2a 0a 2a 2a 20 49 66 20 74 68 65 20 65 78 70 72  *.** If the expr
189b0 65 73 73 69 6f 6e 20 69 73 20 61 6e 20 75 6e 62  ession is an unb
189c0 6f 75 6e 64 20 76 61 72 69 61 62 6c 65 20 6d 61  ound variable ma
189d0 72 6b 65 72 20 28 61 20 71 75 65 73 74 69 6f 6e  rker (a question
189e0 20 6d 61 72 6b 0a 2a 2a 20 63 68 61 72 61 63 74   mark.** charact
189f0 65 72 20 27 3f 27 20 69 6e 20 74 68 65 20 6f 72  er '?' in the or
18a00 69 67 69 6e 61 6c 20 53 51 4c 29 20 74 68 65 6e  iginal SQL) then
18a10 20 74 68 65 20 45 78 70 72 2e 69 54 61 62 6c 65   the Expr.iTable
18a20 20 68 6f 6c 64 73 20 74 68 65 20 69 6e 64 65 78   holds the index
18a30 0a 2a 2a 20 6e 75 6d 62 65 72 20 66 6f 72 20 74  .** number for t
18a40 68 61 74 20 76 61 72 69 61 62 6c 65 2e 0a 2a 2a  hat variable..**
18a50 0a 2a 2a 20 49 66 20 74 68 65 20 65 78 70 72 65  .** If the expre
18a60 73 73 69 6f 6e 20 69 73 20 61 20 73 75 62 71 75  ssion is a subqu
18a70 65 72 79 20 74 68 65 6e 20 45 78 70 72 2e 69 43  ery then Expr.iC
18a80 6f 6c 75 6d 6e 20 68 6f 6c 64 73 20 61 6e 20 69  olumn holds an i
18a90 6e 74 65 67 65 72 0a 2a 2a 20 72 65 67 69 73 74  nteger.** regist
18aa0 65 72 20 6e 75 6d 62 65 72 20 63 6f 6e 74 61 69  er number contai
18ab0 6e 69 6e 67 20 74 68 65 20 72 65 73 75 6c 74 20  ning the result 
18ac0 6f 66 20 74 68 65 20 73 75 62 71 75 65 72 79 2e  of the subquery.
18ad0 20 20 49 66 20 74 68 65 0a 2a 2a 20 73 75 62 71    If the.** subq
18ae0 75 65 72 79 20 67 69 76 65 73 20 61 20 63 6f 6e  uery gives a con
18af0 73 74 61 6e 74 20 72 65 73 75 6c 74 2c 20 74 68  stant result, th
18b00 65 6e 20 69 54 61 62 6c 65 20 69 73 20 2d 31 2e  en iTable is -1.
18b10 20 20 49 66 20 74 68 65 20 73 75 62 71 75 65 72    If the subquer
18b20 79 0a 2a 2a 20 67 69 76 65 73 20 61 20 64 69 66  y.** gives a dif
18b30 66 65 72 65 6e 74 20 61 6e 73 77 65 72 20 61 74  ferent answer at
18b40 20 64 69 66 66 65 72 65 6e 74 20 74 69 6d 65 73   different times
18b50 20 64 75 72 69 6e 67 20 73 74 61 74 65 6d 65 6e   during statemen
18b60 74 20 70 72 6f 63 65 73 73 69 6e 67 0a 2a 2a 20  t processing.** 
18b70 74 68 65 6e 20 69 54 61 62 6c 65 20 69 73 20 74  then iTable is t
18b80 68 65 20 61 64 64 72 65 73 73 20 6f 66 20 61 20  he address of a 
18b90 73 75 62 72 6f 75 74 69 6e 65 20 74 68 61 74 20  subroutine that 
18ba0 63 6f 6d 70 75 74 65 73 20 74 68 65 20 73 75 62  computes the sub
18bb0 71 75 65 72 79 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  query..**.** If 
18bc0 74 68 65 20 45 78 70 72 20 69 73 20 6f 66 20 74  the Expr is of t
18bd0 79 70 65 20 4f 50 5f 43 6f 6c 75 6d 6e 2c 20 61  ype OP_Column, a
18be0 6e 64 20 74 68 65 20 74 61 62 6c 65 20 69 74 20  nd the table it 
18bf0 69 73 20 73 65 6c 65 63 74 69 6e 67 20 66 72 6f  is selecting fro
18c00 6d 0a 2a 2a 20 69 73 20 61 20 64 69 73 6b 20 74  m.** is a disk t
18c10 61 62 6c 65 20 6f 72 20 74 68 65 20 22 6f 6c 64  able or the "old
18c20 2e 2a 22 20 70 73 65 75 64 6f 2d 74 61 62 6c 65  .*" pseudo-table
18c30 2c 20 74 68 65 6e 20 70 54 61 62 20 70 6f 69 6e  , then pTab poin
18c40 74 73 20 74 6f 20 74 68 65 0a 2a 2a 20 63 6f 72  ts to the.** cor
18c50 72 65 73 70 6f 6e 64 69 6e 67 20 74 61 62 6c 65  responding table
18c60 20 64 65 66 69 6e 69 74 69 6f 6e 2e 0a 2a 2a 0a   definition..**.
18c70 2a 2a 20 41 4c 4c 4f 43 41 54 49 4f 4e 20 4e 4f  ** ALLOCATION NO
18c80 54 45 53 3a 0a 2a 2a 0a 2a 2a 20 45 78 70 72 20  TES:.**.** Expr 
18c90 6f 62 6a 65 63 74 73 20 63 61 6e 20 75 73 65 20  objects can use 
18ca0 61 20 6c 6f 74 20 6f 66 20 6d 65 6d 6f 72 79 20  a lot of memory 
18cb0 73 70 61 63 65 20 69 6e 20 64 61 74 61 62 61 73  space in databas
18cc0 65 20 73 63 68 65 6d 61 2e 20 20 54 6f 0a 2a 2a  e schema.  To.**
18cd0 20 68 65 6c 70 20 72 65 64 75 63 65 20 6d 65 6d   help reduce mem
18ce0 6f 72 79 20 72 65 71 75 69 72 65 6d 65 6e 74 73  ory requirements
18cf0 2c 20 73 6f 6d 65 74 69 6d 65 73 20 61 6e 20 45  , sometimes an E
18d00 78 70 72 20 6f 62 6a 65 63 74 20 77 69 6c 6c 20  xpr object will 
18d10 62 65 0a 2a 2a 20 74 72 75 6e 63 61 74 65 64 2e  be.** truncated.
18d20 20 20 41 6e 64 20 74 6f 20 72 65 64 75 63 65 20    And to reduce 
18d30 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 6d 65  the number of me
18d40 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 73  mory allocations
18d50 2c 20 73 6f 6d 65 74 69 6d 65 73 0a 2a 2a 20 74  , sometimes.** t
18d60 77 6f 20 6f 72 20 6d 6f 72 65 20 45 78 70 72 20  wo or more Expr 
18d70 6f 62 6a 65 63 74 73 20 77 69 6c 6c 20 62 65 20  objects will be 
18d80 73 74 6f 72 65 64 20 69 6e 20 61 20 73 69 6e 67  stored in a sing
18d90 6c 65 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61  le memory alloca
18da0 74 69 6f 6e 2c 0a 2a 2a 20 74 6f 67 65 74 68 65  tion,.** togethe
18db0 72 20 77 69 74 68 20 45 78 70 72 2e 7a 54 6f 6b  r with Expr.zTok
18dc0 65 6e 20 73 74 72 69 6e 67 73 2e 0a 2a 2a 0a 2a  en strings..**.*
18dd0 2a 20 49 66 20 74 68 65 20 45 50 5f 52 65 64 75  * If the EP_Redu
18de0 63 65 64 20 61 6e 64 20 45 50 5f 54 6f 6b 65 6e  ced and EP_Token
18df0 4f 6e 6c 79 20 66 6c 61 67 73 20 61 72 65 20 73  Only flags are s
18e00 65 74 20 77 68 65 6e 0a 2a 2a 20 61 6e 20 45 78  et when.** an Ex
18e10 70 72 20 6f 62 6a 65 63 74 20 69 73 20 74 72 75  pr object is tru
18e20 6e 63 61 74 65 64 2e 20 20 57 68 65 6e 20 45 50  ncated.  When EP
18e30 5f 52 65 64 75 63 65 64 20 69 73 20 73 65 74 2c  _Reduced is set,
18e40 20 74 68 65 6e 20 61 6c 6c 0a 2a 2a 20 74 68 65   then all.** the
18e50 20 63 68 69 6c 64 20 45 78 70 72 20 6f 62 6a 65   child Expr obje
18e60 63 74 73 20 69 6e 20 74 68 65 20 45 78 70 72 2e  cts in the Expr.
18e70 70 4c 65 66 74 20 61 6e 64 20 45 78 70 72 2e 70  pLeft and Expr.p
18e80 52 69 67 68 74 20 73 75 62 74 72 65 65 73 0a 2a  Right subtrees.*
18e90 2a 20 61 72 65 20 63 6f 6e 74 61 69 6e 65 64 20  * are contained 
18ea0 77 69 74 68 69 6e 20 74 68 65 20 73 61 6d 65 20  within the same 
18eb0 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f  memory allocatio
18ec0 6e 2e 20 20 4e 6f 74 65 2c 20 68 6f 77 65 76 65  n.  Note, howeve
18ed0 72 2c 20 74 68 61 74 0a 2a 2a 20 74 68 65 20 73  r, that.** the s
18ee0 75 62 74 72 65 65 73 20 69 6e 20 45 78 70 72 2e  ubtrees in Expr.
18ef0 78 2e 70 4c 69 73 74 20 6f 72 20 45 78 70 72 2e  x.pList or Expr.
18f00 78 2e 70 53 65 6c 65 63 74 20 61 72 65 20 61 6c  x.pSelect are al
18f10 77 61 79 73 20 73 65 70 61 72 61 74 65 6c 79 0a  ways separately.
18f20 2a 2a 20 61 6c 6c 6f 63 61 74 65 64 2c 20 72 65  ** allocated, re
18f30 67 61 72 64 6c 65 73 73 20 6f 66 20 77 68 65 74  gardless of whet
18f40 68 65 72 20 6f 72 20 6e 6f 74 20 45 50 5f 52 65  her or not EP_Re
18f50 64 75 63 65 64 20 69 73 20 73 65 74 2e 0a 2a 2f  duced is set..*/
18f60 0a 73 74 72 75 63 74 20 45 78 70 72 20 7b 0a 20  .struct Expr {. 
18f70 20 75 38 20 6f 70 3b 20 20 20 20 20 20 20 20 20   u8 op;         
18f80 20 20 20 20 20 20 20 20 2f 2a 20 4f 70 65 72 61          /* Opera
18f90 74 69 6f 6e 20 70 65 72 66 6f 72 6d 65 64 20 62  tion performed b
18fa0 79 20 74 68 69 73 20 6e 6f 64 65 20 2a 2f 0a 20  y this node */. 
18fb0 20 63 68 61 72 20 61 66 66 69 6e 69 74 79 3b 20   char affinity; 
18fc0 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 61          /* The a
18fd0 66 66 69 6e 69 74 79 20 6f 66 20 74 68 65 20 63  ffinity of the c
18fe0 6f 6c 75 6d 6e 20 6f 72 20 30 20 69 66 20 6e 6f  olumn or 0 if no
18ff0 74 20 61 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20  t a column */.  
19000 75 33 32 20 66 6c 61 67 73 3b 20 20 20 20 20 20  u32 flags;      
19010 20 20 20 20 20 20 20 2f 2a 20 56 61 72 69 6f 75         /* Variou
19020 73 20 66 6c 61 67 73 2e 20 20 45 50 5f 2a 20 53  s flags.  EP_* S
19030 65 65 20 62 65 6c 6f 77 20 2a 2f 0a 20 20 75 6e  ee below */.  un
19040 69 6f 6e 20 7b 0a 20 20 20 20 63 68 61 72 20 2a  ion {.    char *
19050 7a 54 6f 6b 65 6e 3b 20 20 20 20 20 20 20 20 20  zToken;         
19060 20 2f 2a 20 54 6f 6b 65 6e 20 76 61 6c 75 65 2e   /* Token value.
19070 20 5a 65 72 6f 20 74 65 72 6d 69 6e 61 74 65 64   Zero terminated
19080 20 61 6e 64 20 64 65 71 75 6f 74 65 64 20 2a 2f   and dequoted */
19090 0a 20 20 20 20 69 6e 74 20 69 56 61 6c 75 65 3b  .    int iValue;
190a0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
190b0 6f 6e 2d 6e 65 67 61 74 69 76 65 20 69 6e 74 65  on-negative inte
190c0 67 65 72 20 76 61 6c 75 65 20 69 66 20 45 50 5f  ger value if EP_
190d0 49 6e 74 56 61 6c 75 65 20 2a 2f 0a 20 20 7d 20  IntValue */.  } 
190e0 75 3b 0a 0a 20 20 2f 2a 20 49 66 20 74 68 65 20  u;..  /* If the 
190f0 45 50 5f 54 6f 6b 65 6e 4f 6e 6c 79 20 66 6c 61  EP_TokenOnly fla
19100 67 20 69 73 20 73 65 74 20 69 6e 20 74 68 65 20  g is set in the 
19110 45 78 70 72 2e 66 6c 61 67 73 20 6d 61 73 6b 2c  Expr.flags mask,
19120 20 74 68 65 6e 20 6e 6f 0a 20 20 2a 2a 20 73 70   then no.  ** sp
19130 61 63 65 20 69 73 20 61 6c 6c 6f 63 61 74 65 64  ace is allocated
19140 20 66 6f 72 20 74 68 65 20 66 69 65 6c 64 73 20   for the fields 
19150 62 65 6c 6f 77 20 74 68 69 73 20 70 6f 69 6e 74  below this point
19160 2e 20 41 6e 20 61 74 74 65 6d 70 74 20 74 6f 0a  . An attempt to.
19170 20 20 2a 2a 20 61 63 63 65 73 73 20 74 68 65 6d    ** access them
19180 20 77 69 6c 6c 20 72 65 73 75 6c 74 20 69 6e 20   will result in 
19190 61 20 73 65 67 66 61 75 6c 74 20 6f 72 20 6d 61  a segfault or ma
191a0 6c 66 75 6e 63 74 69 6f 6e 2e 0a 20 20 2a 2a 2a  lfunction..  ***
191b0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
191c0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
191d0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
191e0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
191f0 2a 2a 2f 0a 0a 20 20 45 78 70 72 20 2a 70 4c 65  **/..  Expr *pLe
19200 66 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ft;           /*
19210 20 4c 65 66 74 20 73 75 62 6e 6f 64 65 20 2a 2f   Left subnode */
19220 0a 20 20 45 78 70 72 20 2a 70 52 69 67 68 74 3b  .  Expr *pRight;
19230 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 69 67            /* Rig
19240 68 74 20 73 75 62 6e 6f 64 65 20 2a 2f 0a 20 20  ht subnode */.  
19250 75 6e 69 6f 6e 20 7b 0a 20 20 20 20 45 78 70 72  union {.    Expr
19260 4c 69 73 74 20 2a 70 4c 69 73 74 3b 20 20 20 20  List *pList;    
19270 20 2f 2a 20 6f 70 20 3d 20 49 4e 2c 20 45 58 49   /* op = IN, EXI
19280 53 54 53 2c 20 53 45 4c 45 43 54 2c 20 43 41 53  STS, SELECT, CAS
19290 45 2c 20 46 55 4e 43 54 49 4f 4e 2c 20 42 45 54  E, FUNCTION, BET
192a0 57 45 45 4e 20 2a 2f 0a 20 20 20 20 53 65 6c 65  WEEN */.    Sele
192b0 63 74 20 2a 70 53 65 6c 65 63 74 3b 20 20 20 20  ct *pSelect;    
192c0 20 2f 2a 20 45 50 5f 78 49 73 53 65 6c 65 63 74   /* EP_xIsSelect
192d0 20 61 6e 64 20 6f 70 20 3d 20 49 4e 2c 20 45 58   and op = IN, EX
192e0 49 53 54 53 2c 20 53 45 4c 45 43 54 20 2a 2f 0a  ISTS, SELECT */.
192f0 20 20 7d 20 78 3b 0a 0a 20 20 2f 2a 20 49 66 20    } x;..  /* If 
19300 74 68 65 20 45 50 5f 52 65 64 75 63 65 64 20 66  the EP_Reduced f
19310 6c 61 67 20 69 73 20 73 65 74 20 69 6e 20 74 68  lag is set in th
19320 65 20 45 78 70 72 2e 66 6c 61 67 73 20 6d 61 73  e Expr.flags mas
19330 6b 2c 20 74 68 65 6e 20 6e 6f 0a 20 20 2a 2a 20  k, then no.  ** 
19340 73 70 61 63 65 20 69 73 20 61 6c 6c 6f 63 61 74  space is allocat
19350 65 64 20 66 6f 72 20 74 68 65 20 66 69 65 6c 64  ed for the field
19360 73 20 62 65 6c 6f 77 20 74 68 69 73 20 70 6f 69  s below this poi
19370 6e 74 2e 20 41 6e 20 61 74 74 65 6d 70 74 20 74  nt. An attempt t
19380 6f 0a 20 20 2a 2a 20 61 63 63 65 73 73 20 74 68  o.  ** access th
19390 65 6d 20 77 69 6c 6c 20 72 65 73 75 6c 74 20 69  em will result i
193a0 6e 20 61 20 73 65 67 66 61 75 6c 74 20 6f 72 20  n a segfault or 
193b0 6d 61 6c 66 75 6e 63 74 69 6f 6e 2e 0a 20 20 2a  malfunction..  *
193c0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
193d0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
193e0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
193f0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
19400 2a 2a 2a 2a 2f 0a 0a 23 69 66 20 53 51 4c 49 54  ****/..#if SQLIT
19410 45 5f 4d 41 58 5f 45 58 50 52 5f 44 45 50 54 48  E_MAX_EXPR_DEPTH
19420 3e 30 0a 20 20 69 6e 74 20 6e 48 65 69 67 68 74  >0.  int nHeight
19430 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 48  ;           /* H
19440 65 69 67 68 74 20 6f 66 20 74 68 65 20 74 72 65  eight of the tre
19450 65 20 68 65 61 64 65 64 20 62 79 20 74 68 69 73  e headed by this
19460 20 6e 6f 64 65 20 2a 2f 0a 23 65 6e 64 69 66 0a   node */.#endif.
19470 20 20 69 6e 74 20 69 54 61 62 6c 65 3b 20 20 20    int iTable;   
19480 20 20 20 20 20 20 20 20 20 2f 2a 20 54 4b 5f 43           /* TK_C
19490 4f 4c 55 4d 4e 3a 20 63 75 72 73 6f 72 20 6e 75  OLUMN: cursor nu
194a0 6d 62 65 72 20 6f 66 20 74 61 62 6c 65 20 68 6f  mber of table ho
194b0 6c 64 69 6e 67 20 63 6f 6c 75 6d 6e 0a 20 20 20  lding column.   
194c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
194d0 20 20 20 20 20 20 2a 2a 20 54 4b 5f 52 45 47 49        ** TK_REGI
194e0 53 54 45 52 3a 20 72 65 67 69 73 74 65 72 20 6e  STER: register n
194f0 75 6d 62 65 72 0a 20 20 20 20 20 20 20 20 20 20  umber.          
19500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a                 *
19510 2a 20 54 4b 5f 54 52 49 47 47 45 52 3a 20 31 20  * TK_TRIGGER: 1 
19520 2d 3e 20 6e 65 77 2c 20 30 20 2d 3e 20 6f 6c 64  -> new, 0 -> old
19530 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
19540 20 20 20 20 20 20 20 20 20 20 2a 2a 20 45 50 5f            ** EP_
19550 55 6e 6c 69 6b 65 6c 79 3a 20 20 31 33 34 32 31  Unlikely:  13421
19560 37 37 32 38 20 74 69 6d 65 73 20 6c 69 6b 65 6c  7728 times likel
19570 69 68 6f 6f 64 0a 20 20 20 20 20 20 20 20 20 20  ihood.          
19580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a                 *
19590 2a 20 54 4b 5f 53 45 4c 45 43 54 3a 20 31 73 74  * TK_SELECT: 1st
195a0 20 72 65 67 69 73 74 65 72 20 6f 66 20 72 65 73   register of res
195b0 75 6c 74 20 76 65 63 74 6f 72 20 2a 2f 0a 20 20  ult vector */.  
195c0 79 6e 56 61 72 20 69 43 6f 6c 75 6d 6e 3b 20 20  ynVar iColumn;  
195d0 20 20 20 20 20 20 20 2f 2a 20 54 4b 5f 43 4f 4c         /* TK_COL
195e0 55 4d 4e 3a 20 63 6f 6c 75 6d 6e 20 69 6e 64 65  UMN: column inde
195f0 78 2e 20 20 2d 31 20 66 6f 72 20 72 6f 77 69 64  x.  -1 for rowid
19600 2e 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
19610 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 54 4b             ** TK
19620 5f 56 41 52 49 41 42 4c 45 3a 20 76 61 72 69 61  _VARIABLE: varia
19630 62 6c 65 20 6e 75 6d 62 65 72 20 28 61 6c 77 61  ble number (alwa
19640 79 73 20 3e 3d 20 31 29 2e 0a 20 20 20 20 20 20  ys >= 1)..      
19650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19660 20 20 20 2a 2a 20 54 4b 5f 53 45 4c 45 43 54 5f     ** TK_SELECT_
19670 43 4f 4c 55 4d 4e 3a 20 63 6f 6c 75 6d 6e 20 6f  COLUMN: column o
19680 66 20 74 68 65 20 72 65 73 75 6c 74 20 76 65 63  f the result vec
19690 74 6f 72 20 2a 2f 0a 20 20 69 31 36 20 69 41 67  tor */.  i16 iAg
196a0 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  g;              
196b0 2f 2a 20 57 68 69 63 68 20 65 6e 74 72 79 20 69  /* Which entry i
196c0 6e 20 70 41 67 67 49 6e 66 6f 2d 3e 61 43 6f 6c  n pAggInfo->aCol
196d0 5b 5d 20 6f 72 20 2d 3e 61 46 75 6e 63 5b 5d 20  [] or ->aFunc[] 
196e0 2a 2f 0a 20 20 69 31 36 20 69 52 69 67 68 74 4a  */.  i16 iRightJ
196f0 6f 69 6e 54 61 62 6c 65 3b 20 20 20 2f 2a 20 49  oinTable;   /* I
19700 66 20 45 50 5f 46 72 6f 6d 4a 6f 69 6e 2c 20 74  f EP_FromJoin, t
19710 68 65 20 72 69 67 68 74 20 74 61 62 6c 65 20 6f  he right table o
19720 66 20 74 68 65 20 6a 6f 69 6e 20 2a 2f 0a 20 20  f the join */.  
19730 75 38 20 6f 70 32 3b 20 20 20 20 20 20 20 20 20  u8 op2;         
19740 20 20 20 20 20 20 20 2f 2a 20 54 4b 5f 52 45 47         /* TK_REG
19750 49 53 54 45 52 3a 20 6f 72 69 67 69 6e 61 6c 20  ISTER: original 
19760 76 61 6c 75 65 20 6f 66 20 45 78 70 72 2e 6f 70  value of Expr.op
19770 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
19780 20 20 20 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f            ** TK_
19790 43 4f 4c 55 4d 4e 3a 20 74 68 65 20 76 61 6c 75  COLUMN: the valu
197a0 65 20 6f 66 20 70 35 20 66 6f 72 20 4f 50 5f 43  e of p5 for OP_C
197b0 6f 6c 75 6d 6e 0a 20 20 20 20 20 20 20 20 20 20  olumn.          
197c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a                 *
197d0 2a 20 54 4b 5f 41 47 47 5f 46 55 4e 43 54 49 4f  * TK_AGG_FUNCTIO
197e0 4e 3a 20 6e 65 73 74 69 6e 67 20 64 65 70 74 68  N: nesting depth
197f0 20 2a 2f 0a 20 20 41 67 67 49 6e 66 6f 20 2a 70   */.  AggInfo *p
19800 41 67 67 49 6e 66 6f 3b 20 20 20 20 20 2f 2a 20  AggInfo;     /* 
19810 55 73 65 64 20 62 79 20 54 4b 5f 41 47 47 5f 43  Used by TK_AGG_C
19820 4f 4c 55 4d 4e 20 61 6e 64 20 54 4b 5f 41 47 47  OLUMN and TK_AGG
19830 5f 46 55 4e 43 54 49 4f 4e 20 2a 2f 0a 20 20 75  _FUNCTION */.  u
19840 6e 69 6f 6e 20 7b 0a 20 20 20 20 54 61 62 6c 65  nion {.    Table
19850 20 2a 70 54 61 62 3b 20 20 20 20 20 20 20 20 20   *pTab;         
19860 20 20 2f 2a 20 54 4b 5f 43 4f 4c 55 4d 4e 3a 20    /* TK_COLUMN: 
19870 54 61 62 6c 65 20 63 6f 6e 74 61 69 6e 69 6e 67  Table containing
19880 20 63 6f 6c 75 6d 6e 2e 20 43 61 6e 20 62 65 20   column. Can be 
19890 4e 55 4c 4c 0a 20 20 20 20 20 20 20 20 20 20 20  NULL.           
198a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
198b0 2a 2a 20 66 6f 72 20 61 20 63 6f 6c 75 6d 6e 20  ** for a column 
198c0 6f 66 20 61 6e 20 69 6e 64 65 78 20 6f 6e 20 61  of an index on a
198d0 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 2a 2f 0a  n expression */.
198e0 20 20 20 20 57 69 6e 64 6f 77 20 2a 70 57 69 6e      Window *pWin
198f0 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 4b  ;          /* TK
19900 5f 46 55 4e 43 54 49 4f 4e 3a 20 57 69 6e 64 6f  _FUNCTION: Windo
19910 77 20 64 65 66 69 6e 69 74 69 6f 6e 20 66 6f 72  w definition for
19920 20 74 68 65 20 66 75 6e 63 20 2a 2f 0a 20 20 20   the func */.   
19930 20 73 74 72 75 63 74 20 7b 20 20 20 20 20 20 20   struct {       
19940 20 20 20 20 20 20 20 20 2f 2a 20 54 4b 5f 49 4e          /* TK_IN
19950 2c 20 54 4b 5f 53 45 4c 45 43 54 2c 20 61 6e 64  , TK_SELECT, and
19960 20 54 4b 5f 45 58 49 53 54 53 20 2a 2f 0a 20 20   TK_EXISTS */.  
19970 20 20 20 20 69 6e 74 20 69 41 64 64 72 3b 20 20      int iAddr;  
19980 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 75             /* Su
19990 62 72 6f 75 74 69 6e 65 20 65 6e 74 72 79 20 61  broutine entry a
199a0 64 64 72 65 73 73 20 2a 2f 0a 20 20 20 20 20 20  ddress */.      
199b0 69 6e 74 20 72 65 67 52 65 74 75 72 6e 3b 20 20  int regReturn;  
199c0 20 20 20 20 20 20 20 2f 2a 20 52 65 67 69 73 74         /* Regist
199d0 65 72 20 75 73 65 64 20 74 6f 20 68 6f 6c 64 20  er used to hold 
199e0 72 65 74 75 72 6e 20 61 64 64 72 65 73 73 20 2a  return address *
199f0 2f 0a 20 20 20 20 7d 20 73 75 62 3b 0a 20 20 7d  /.    } sub;.  }
19a00 20 79 3b 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68   y;.};../*.** Th
19a10 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 72 65 20  e following are 
19a20 74 68 65 20 6d 65 61 6e 69 6e 67 73 20 6f 66 20  the meanings of 
19a30 62 69 74 73 20 69 6e 20 74 68 65 20 45 78 70 72  bits in the Expr
19a40 2e 66 6c 61 67 73 20 66 69 65 6c 64 2e 0a 2a 2f  .flags field..*/
19a50 0a 23 64 65 66 69 6e 65 20 45 50 5f 46 72 6f 6d  .#define EP_From
19a60 4a 6f 69 6e 20 20 30 78 30 30 30 30 30 31 20 2f  Join  0x000001 /
19a70 2a 20 4f 72 69 67 69 6e 61 74 65 73 20 69 6e 20  * Originates in 
19a80 4f 4e 2f 55 53 49 4e 47 20 63 6c 61 75 73 65 20  ON/USING clause 
19a90 6f 66 20 6f 75 74 65 72 20 6a 6f 69 6e 20 2a 2f  of outer join */
19aa0 0a 23 64 65 66 69 6e 65 20 45 50 5f 41 67 67 20  .#define EP_Agg 
19ab0 20 20 20 20 20 20 30 78 30 30 30 30 30 32 20 2f        0x000002 /
19ac0 2a 20 43 6f 6e 74 61 69 6e 73 20 6f 6e 65 20 6f  * Contains one o
19ad0 72 20 6d 6f 72 65 20 61 67 67 72 65 67 61 74 65  r more aggregate
19ae0 20 66 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a 23 64   functions */.#d
19af0 65 66 69 6e 65 20 45 50 5f 48 61 73 46 75 6e 63  efine EP_HasFunc
19b00 20 20 20 30 78 30 30 30 30 30 34 20 2f 2a 20 43     0x000004 /* C
19b10 6f 6e 74 61 69 6e 73 20 6f 6e 65 20 6f 72 20 6d  ontains one or m
19b20 6f 72 65 20 66 75 6e 63 74 69 6f 6e 73 20 6f 66  ore functions of
19b30 20 61 6e 79 20 6b 69 6e 64 20 2a 2f 0a 23 64 65   any kind */.#de
19b40 66 69 6e 65 20 45 50 5f 46 69 78 65 64 43 6f 6c  fine EP_FixedCol
19b50 20 20 30 78 30 30 30 30 30 38 20 2f 2a 20 54 4b    0x000008 /* TK
19b60 5f 43 6f 6c 75 6d 6e 20 77 69 74 68 20 61 20 6b  _Column with a k
19b70 6e 6f 77 6e 20 66 69 78 65 64 20 76 61 6c 75 65  nown fixed value
19b80 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 44   */.#define EP_D
19b90 69 73 74 69 6e 63 74 20 20 30 78 30 30 30 30 31  istinct  0x00001
19ba0 30 20 2f 2a 20 41 67 67 72 65 67 61 74 65 20 66  0 /* Aggregate f
19bb0 75 6e 63 74 69 6f 6e 20 77 69 74 68 20 44 49 53  unction with DIS
19bc0 54 49 4e 43 54 20 6b 65 79 77 6f 72 64 20 2a 2f  TINCT keyword */
19bd0 0a 23 64 65 66 69 6e 65 20 45 50 5f 56 61 72 53  .#define EP_VarS
19be0 65 6c 65 63 74 20 30 78 30 30 30 30 32 30 20 2f  elect 0x000020 /
19bf0 2a 20 70 53 65 6c 65 63 74 20 69 73 20 63 6f 72  * pSelect is cor
19c00 72 65 6c 61 74 65 64 2c 20 6e 6f 74 20 63 6f 6e  related, not con
19c10 73 74 61 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65  stant */.#define
19c20 20 45 50 5f 44 62 6c 51 75 6f 74 65 64 20 30 78   EP_DblQuoted 0x
19c30 30 30 30 30 34 30 20 2f 2a 20 74 6f 6b 65 6e 2e  000040 /* token.
19c40 7a 20 77 61 73 20 6f 72 69 67 69 6e 61 6c 6c 79  z was originally
19c50 20 69 6e 20 22 2e 2e 2e 22 20 2a 2f 0a 23 64 65   in "..." */.#de
19c60 66 69 6e 65 20 45 50 5f 49 6e 66 69 78 46 75 6e  fine EP_InfixFun
19c70 63 20 30 78 30 30 30 30 38 30 20 2f 2a 20 54 72  c 0x000080 /* Tr
19c80 75 65 20 66 6f 72 20 61 6e 20 69 6e 66 69 78 20  ue for an infix 
19c90 66 75 6e 63 74 69 6f 6e 3a 20 4c 49 4b 45 2c 20  function: LIKE, 
19ca0 47 4c 4f 42 2c 20 65 74 63 20 2a 2f 0a 23 64 65  GLOB, etc */.#de
19cb0 66 69 6e 65 20 45 50 5f 43 6f 6c 6c 61 74 65 20  fine EP_Collate 
19cc0 20 20 30 78 30 30 30 31 30 30 20 2f 2a 20 54 72    0x000100 /* Tr
19cd0 65 65 20 63 6f 6e 74 61 69 6e 73 20 61 20 54 4b  ee contains a TK
19ce0 5f 43 4f 4c 4c 41 54 45 20 6f 70 65 72 61 74 6f  _COLLATE operato
19cf0 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  r */.#define EP_
19d00 47 65 6e 65 72 69 63 20 20 20 30 78 30 30 30 32  Generic   0x0002
19d10 30 30 20 2f 2a 20 49 67 6e 6f 72 65 20 43 4f 4c  00 /* Ignore COL
19d20 4c 41 54 45 20 6f 72 20 61 66 66 69 6e 69 74 79  LATE or affinity
19d30 20 6f 6e 20 74 68 69 73 20 74 72 65 65 20 2a 2f   on this tree */
19d40 0a 23 64 65 66 69 6e 65 20 45 50 5f 49 6e 74 56  .#define EP_IntV
19d50 61 6c 75 65 20 20 30 78 30 30 30 34 30 30 20 2f  alue  0x000400 /
19d60 2a 20 49 6e 74 65 67 65 72 20 76 61 6c 75 65 20  * Integer value 
19d70 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20 75 2e 69  contained in u.i
19d80 56 61 6c 75 65 20 2a 2f 0a 23 64 65 66 69 6e 65  Value */.#define
19d90 20 45 50 5f 78 49 73 53 65 6c 65 63 74 20 30 78   EP_xIsSelect 0x
19da0 30 30 30 38 30 30 20 2f 2a 20 78 2e 70 53 65 6c  000800 /* x.pSel
19db0 65 63 74 20 69 73 20 76 61 6c 69 64 20 28 6f 74  ect is valid (ot
19dc0 68 65 72 77 69 73 65 20 78 2e 70 4c 69 73 74 20  herwise x.pList 
19dd0 69 73 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45  is) */.#define E
19de0 50 5f 53 6b 69 70 20 20 20 20 20 20 30 78 30 30  P_Skip      0x00
19df0 31 30 30 30 20 2f 2a 20 43 4f 4c 4c 41 54 45 2c  1000 /* COLLATE,
19e00 20 41 53 2c 20 6f 72 20 55 4e 4c 49 4b 45 4c 59   AS, or UNLIKELY
19e10 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 52   */.#define EP_R
19e20 65 64 75 63 65 64 20 20 20 30 78 30 30 32 30 30  educed   0x00200
19e30 30 20 2f 2a 20 45 78 70 72 20 73 74 72 75 63 74  0 /* Expr struct
19e40 20 45 58 50 52 5f 52 45 44 55 43 45 44 53 49 5a   EXPR_REDUCEDSIZ
19e50 45 20 62 79 74 65 73 20 6f 6e 6c 79 20 2a 2f 0a  E bytes only */.
19e60 23 64 65 66 69 6e 65 20 45 50 5f 54 6f 6b 65 6e  #define EP_Token
19e70 4f 6e 6c 79 20 30 78 30 30 34 30 30 30 20 2f 2a  Only 0x004000 /*
19e80 20 45 78 70 72 20 73 74 72 75 63 74 20 45 58 50   Expr struct EXP
19e90 52 5f 54 4f 4b 45 4e 4f 4e 4c 59 53 49 5a 45 20  R_TOKENONLYSIZE 
19ea0 62 79 74 65 73 20 6f 6e 6c 79 20 2a 2f 0a 23 64  bytes only */.#d
19eb0 65 66 69 6e 65 20 45 50 5f 53 74 61 74 69 63 20  efine EP_Static 
19ec0 20 20 20 30 78 30 30 38 30 30 30 20 2f 2a 20 48     0x008000 /* H
19ed0 65 6c 64 20 69 6e 20 6d 65 6d 6f 72 79 20 6e 6f  eld in memory no
19ee0 74 20 6f 62 74 61 69 6e 65 64 20 66 72 6f 6d 20  t obtained from 
19ef0 6d 61 6c 6c 6f 63 28 29 20 2a 2f 0a 23 64 65 66  malloc() */.#def
19f00 69 6e 65 20 45 50 5f 4d 65 6d 54 6f 6b 65 6e 20  ine EP_MemToken 
19f10 20 30 78 30 31 30 30 30 30 20 2f 2a 20 4e 65 65   0x010000 /* Nee
19f20 64 20 74 6f 20 73 71 6c 69 74 65 33 44 62 46 72  d to sqlite3DbFr
19f30 65 65 28 29 20 45 78 70 72 2e 7a 54 6f 6b 65 6e  ee() Expr.zToken
19f40 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 4e   */.#define EP_N
19f50 6f 52 65 64 75 63 65 20 20 30 78 30 32 30 30 30  oReduce  0x02000
19f60 30 20 2f 2a 20 43 61 6e 6e 6f 74 20 45 58 50 52  0 /* Cannot EXPR
19f70 44 55 50 5f 52 45 44 55 43 45 20 74 68 69 73 20  DUP_REDUCE this 
19f80 45 78 70 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20  Expr */.#define 
19f90 45 50 5f 55 6e 6c 69 6b 65 6c 79 20 20 30 78 30  EP_Unlikely  0x0
19fa0 34 30 30 30 30 20 2f 2a 20 75 6e 6c 69 6b 65 6c  40000 /* unlikel
19fb0 79 28 29 20 6f 72 20 6c 69 6b 65 6c 69 68 6f 6f  y() or likelihoo
19fc0 64 28 29 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a  d() function */.
19fd0 23 64 65 66 69 6e 65 20 45 50 5f 43 6f 6e 73 74  #define EP_Const
19fe0 46 75 6e 63 20 30 78 30 38 30 30 30 30 20 2f 2a  Func 0x080000 /*
19ff0 20 41 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43   A SQLITE_FUNC_C
1a000 4f 4e 53 54 41 4e 54 20 6f 72 20 5f 53 4c 4f 43  ONSTANT or _SLOC
1a010 48 4e 47 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a  HNG function */.
1a020 23 64 65 66 69 6e 65 20 45 50 5f 43 61 6e 42 65  #define EP_CanBe
1a030 4e 75 6c 6c 20 30 78 31 30 30 30 30 30 20 2f 2a  Null 0x100000 /*
1a040 20 43 61 6e 20 62 65 20 6e 75 6c 6c 20 64 65 73   Can be null des
1a050 70 69 74 65 20 4e 4f 54 20 4e 55 4c 4c 20 63 6f  pite NOT NULL co
1a060 6e 73 74 72 61 69 6e 74 20 2a 2f 0a 23 64 65 66  nstraint */.#def
1a070 69 6e 65 20 45 50 5f 53 75 62 71 75 65 72 79 20  ine EP_Subquery 
1a080 20 30 78 32 30 30 30 30 30 20 2f 2a 20 54 72 65   0x200000 /* Tre
1a090 65 20 63 6f 6e 74 61 69 6e 73 20 61 20 54 4b 5f  e contains a TK_
1a0a0 53 45 4c 45 43 54 20 6f 70 65 72 61 74 6f 72 20  SELECT operator 
1a0b0 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 41 6c  */.#define EP_Al
1a0c0 69 61 73 20 20 20 20 20 30 78 34 30 30 30 30 30  ias     0x400000
1a0d0 20 2f 2a 20 49 73 20 61 6e 20 61 6c 69 61 73 20   /* Is an alias 
1a0e0 66 6f 72 20 61 20 72 65 73 75 6c 74 20 73 65 74  for a result set
1a0f0 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 23 64 65 66 69   column */.#defi
1a100 6e 65 20 45 50 5f 4c 65 61 66 20 20 20 20 20 20  ne EP_Leaf      
1a110 30 78 38 30 30 30 30 30 20 2f 2a 20 45 78 70 72  0x800000 /* Expr
1a120 2e 70 4c 65 66 74 2c 20 2e 70 52 69 67 68 74 2c  .pLeft, .pRight,
1a130 20 2e 75 2e 70 53 65 6c 65 63 74 20 61 6c 6c 20   .u.pSelect all 
1a140 4e 55 4c 4c 20 2a 2f 0a 23 64 65 66 69 6e 65 20  NULL */.#define 
1a150 45 50 5f 57 69 6e 46 75 6e 63 20 20 30 78 31 30  EP_WinFunc  0x10
1a160 30 30 30 30 30 20 2f 2a 20 54 4b 5f 46 55 4e 43  00000 /* TK_FUNC
1a170 54 49 4f 4e 20 77 69 74 68 20 45 78 70 72 2e 79  TION with Expr.y
1a180 2e 70 57 69 6e 20 73 65 74 20 2a 2f 0a 23 64 65  .pWin set */.#de
1a190 66 69 6e 65 20 45 50 5f 53 75 62 72 74 6e 20 20  fine EP_Subrtn  
1a1a0 20 30 78 32 30 30 30 30 30 30 20 2f 2a 20 55 73   0x2000000 /* Us
1a1b0 65 73 20 45 78 70 72 2e 79 2e 73 75 62 2e 20 54  es Expr.y.sub. T
1a1c0 4b 5f 49 4e 2c 20 5f 53 45 4c 45 43 54 2c 20 6f  K_IN, _SELECT, o
1a1d0 72 20 5f 45 58 49 53 54 53 20 2a 2f 0a 23 64 65  r _EXISTS */.#de
1a1e0 66 69 6e 65 20 45 50 5f 51 75 6f 74 65 64 20 20  fine EP_Quoted  
1a1f0 20 30 78 34 30 30 30 30 30 30 20 2f 2a 20 54 4b   0x4000000 /* TK
1a200 5f 49 44 20 77 61 73 20 6f 72 69 67 69 6e 61 6c  _ID was original
1a210 6c 79 20 71 75 6f 74 65 64 20 2a 2f 0a 0a 2f 2a  ly quoted */../*
1a220 0a 2a 2a 20 54 68 65 20 45 50 5f 50 72 6f 70 61  .** The EP_Propa
1a230 67 61 74 65 20 6d 61 73 6b 20 69 73 20 61 20 73  gate mask is a s
1a240 65 74 20 6f 66 20 70 72 6f 70 65 72 74 69 65 73  et of properties
1a250 20 74 68 61 74 20 61 75 74 6f 6d 61 74 69 63 61   that automatica
1a260 6c 6c 79 20 70 72 6f 70 61 67 61 74 65 0a 2a 2a  lly propagate.**
1a270 20 75 70 77 61 72 64 73 20 69 6e 74 6f 20 70 61   upwards into pa
1a280 72 65 6e 74 20 6e 6f 64 65 73 2e 0a 2a 2f 0a 23  rent nodes..*/.#
1a290 64 65 66 69 6e 65 20 45 50 5f 50 72 6f 70 61 67  define EP_Propag
1a2a0 61 74 65 20 28 45 50 5f 43 6f 6c 6c 61 74 65 7c  ate (EP_Collate|
1a2b0 45 50 5f 53 75 62 71 75 65 72 79 7c 45 50 5f 48  EP_Subquery|EP_H
1a2c0 61 73 46 75 6e 63 29 0a 0a 2f 2a 0a 2a 2a 20 54  asFunc)../*.** T
1a2d0 68 65 73 65 20 6d 61 63 72 6f 73 20 63 61 6e 20  hese macros can 
1a2e0 62 65 20 75 73 65 64 20 74 6f 20 74 65 73 74 2c  be used to test,
1a2f0 20 73 65 74 2c 20 6f 72 20 63 6c 65 61 72 20 62   set, or clear b
1a300 69 74 73 20 69 6e 20 74 68 65 0a 2a 2a 20 45 78  its in the.** Ex
1a310 70 72 2e 66 6c 61 67 73 20 66 69 65 6c 64 2e 0a  pr.flags field..
1a320 2a 2f 0a 23 64 65 66 69 6e 65 20 45 78 70 72 48  */.#define ExprH
1a330 61 73 50 72 6f 70 65 72 74 79 28 45 2c 50 29 20  asProperty(E,P) 
1a340 20 20 20 20 28 28 28 45 29 2d 3e 66 6c 61 67 73      (((E)->flags
1a350 26 28 50 29 29 21 3d 30 29 0a 23 64 65 66 69 6e  &(P))!=0).#defin
1a360 65 20 45 78 70 72 48 61 73 41 6c 6c 50 72 6f 70  e ExprHasAllProp
1a370 65 72 74 79 28 45 2c 50 29 20 20 28 28 28 45 29  erty(E,P)  (((E)
1a380 2d 3e 66 6c 61 67 73 26 28 50 29 29 3d 3d 28 50  ->flags&(P))==(P
1a390 29 29 0a 23 64 65 66 69 6e 65 20 45 78 70 72 53  )).#define ExprS
1a3a0 65 74 50 72 6f 70 65 72 74 79 28 45 2c 50 29 20  etProperty(E,P) 
1a3b0 20 20 20 20 28 45 29 2d 3e 66 6c 61 67 73 7c 3d      (E)->flags|=
1a3c0 28 50 29 0a 23 64 65 66 69 6e 65 20 45 78 70 72  (P).#define Expr
1a3d0 43 6c 65 61 72 50 72 6f 70 65 72 74 79 28 45 2c  ClearProperty(E,
1a3e0 50 29 20 20 20 28 45 29 2d 3e 66 6c 61 67 73 26  P)   (E)->flags&
1a3f0 3d 7e 28 50 29 0a 0a 2f 2a 20 54 68 65 20 45 78  =~(P)../* The Ex
1a400 70 72 53 65 74 56 56 41 50 72 6f 70 65 72 74 79  prSetVVAProperty
1a410 28 29 20 6d 61 63 72 6f 20 69 73 20 75 73 65 64  () macro is used
1a420 20 66 6f 72 20 56 65 72 69 66 69 63 61 74 69 6f   for Verificatio
1a430 6e 2c 20 56 61 6c 69 64 61 74 69 6f 6e 2c 0a 2a  n, Validation,.*
1a440 2a 20 61 6e 64 20 41 63 63 72 65 64 69 74 61 74  * and Accreditat
1a450 69 6f 6e 20 6f 6e 6c 79 2e 20 20 49 74 20 77 6f  ion only.  It wo
1a460 72 6b 73 20 6c 69 6b 65 20 45 78 70 72 53 65 74  rks like ExprSet
1a470 50 72 6f 70 65 72 74 79 28 29 20 64 75 72 69 6e  Property() durin
1a480 67 20 56 56 41 0a 2a 2a 20 70 72 6f 63 65 73 73  g VVA.** process
1a490 65 73 20 62 75 74 20 69 73 20 61 20 6e 6f 2d 6f  es but is a no-o
1a4a0 70 20 66 6f 72 20 64 65 6c 69 76 65 72 79 2e 0a  p for delivery..
1a4b0 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
1a4c0 5f 44 45 42 55 47 0a 23 20 64 65 66 69 6e 65 20  _DEBUG.# define 
1a4d0 45 78 70 72 53 65 74 56 56 41 50 72 6f 70 65 72  ExprSetVVAProper
1a4e0 74 79 28 45 2c 50 29 20 20 28 45 29 2d 3e 66 6c  ty(E,P)  (E)->fl
1a4f0 61 67 73 7c 3d 28 50 29 0a 23 65 6c 73 65 0a 23  ags|=(P).#else.#
1a500 20 64 65 66 69 6e 65 20 45 78 70 72 53 65 74 56   define ExprSetV
1a510 56 41 50 72 6f 70 65 72 74 79 28 45 2c 50 29 0a  VAProperty(E,P).
1a520 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 4d 61  #endif../*.** Ma
1a530 63 72 6f 73 20 74 6f 20 64 65 74 65 72 6d 69 6e  cros to determin
1a540 65 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  e the number of 
1a550 62 79 74 65 73 20 72 65 71 75 69 72 65 64 20 62  bytes required b
1a560 79 20 61 20 6e 6f 72 6d 61 6c 20 45 78 70 72 0a  y a normal Expr.
1a570 2a 2a 20 73 74 72 75 63 74 2c 20 61 6e 20 45 78  ** struct, an Ex
1a580 70 72 20 73 74 72 75 63 74 20 77 69 74 68 20 74  pr struct with t
1a590 68 65 20 45 50 5f 52 65 64 75 63 65 64 20 66 6c  he EP_Reduced fl
1a5a0 61 67 20 73 65 74 20 69 6e 20 45 78 70 72 2e 66  ag set in Expr.f
1a5b0 6c 61 67 73 0a 2a 2a 20 61 6e 64 20 61 6e 20 45  lags.** and an E
1a5c0 78 70 72 20 73 74 72 75 63 74 20 77 69 74 68 20  xpr struct with 
1a5d0 74 68 65 20 45 50 5f 54 6f 6b 65 6e 4f 6e 6c 79  the EP_TokenOnly
1a5e0 20 66 6c 61 67 20 73 65 74 2e 0a 2a 2f 0a 23 64   flag set..*/.#d
1a5f0 65 66 69 6e 65 20 45 58 50 52 5f 46 55 4c 4c 53  efine EXPR_FULLS
1a600 49 5a 45 20 20 20 20 20 20 20 20 20 20 20 73 69  IZE           si
1a610 7a 65 6f 66 28 45 78 70 72 29 20 20 20 20 20 20  zeof(Expr)      
1a620 20 20 20 20 20 2f 2a 20 46 75 6c 6c 20 73 69 7a       /* Full siz
1a630 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 58 50  e */.#define EXP
1a640 52 5f 52 45 44 55 43 45 44 53 49 5a 45 20 20 20  R_REDUCEDSIZE   
1a650 20 20 20 20 20 6f 66 66 73 65 74 6f 66 28 45 78       offsetof(Ex
1a660 70 72 2c 69 54 61 62 6c 65 29 20 20 2f 2a 20 43  pr,iTable)  /* C
1a670 6f 6d 6d 6f 6e 20 66 65 61 74 75 72 65 73 20 2a  ommon features *
1a680 2f 0a 23 64 65 66 69 6e 65 20 45 58 50 52 5f 54  /.#define EXPR_T
1a690 4f 4b 45 4e 4f 4e 4c 59 53 49 5a 45 20 20 20 20  OKENONLYSIZE    
1a6a0 20 20 6f 66 66 73 65 74 6f 66 28 45 78 70 72 2c    offsetof(Expr,
1a6b0 70 4c 65 66 74 29 20 20 20 2f 2a 20 46 65 77 65  pLeft)   /* Fewe
1a6c0 72 20 66 65 61 74 75 72 65 73 20 2a 2f 0a 0a 2f  r features */../
1a6d0 2a 0a 2a 2a 20 46 6c 61 67 73 20 70 61 73 73 65  *.** Flags passe
1a6e0 64 20 74 6f 20 74 68 65 20 73 71 6c 69 74 65 33  d to the sqlite3
1a6f0 45 78 70 72 44 75 70 28 29 20 66 75 6e 63 74 69  ExprDup() functi
1a700 6f 6e 2e 20 53 65 65 20 74 68 65 20 68 65 61 64  on. See the head
1a710 65 72 20 63 6f 6d 6d 65 6e 74 0a 2a 2a 20 61 62  er comment.** ab
1a720 6f 76 65 20 73 71 6c 69 74 65 33 45 78 70 72 44  ove sqlite3ExprD
1a730 75 70 28 29 20 66 6f 72 20 64 65 74 61 69 6c 73  up() for details
1a740 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 45 58 50  ..*/.#define EXP
1a750 52 44 55 50 5f 52 45 44 55 43 45 20 20 20 20 20  RDUP_REDUCE     
1a760 20 20 20 20 30 78 30 30 30 31 20 20 2f 2a 20 55      0x0001  /* U
1a770 73 65 64 20 72 65 64 75 63 65 64 2d 73 69 7a 65  sed reduced-size
1a780 20 45 78 70 72 20 6e 6f 64 65 73 20 2a 2f 0a 0a   Expr nodes */..
1a790 2f 2a 0a 2a 2a 20 41 20 6c 69 73 74 20 6f 66 20  /*.** A list of 
1a7a0 65 78 70 72 65 73 73 69 6f 6e 73 2e 20 20 45 61  expressions.  Ea
1a7b0 63 68 20 65 78 70 72 65 73 73 69 6f 6e 20 6d 61  ch expression ma
1a7c0 79 20 6f 70 74 69 6f 6e 61 6c 6c 79 20 68 61 76  y optionally hav
1a7d0 65 20 61 0a 2a 2a 20 6e 61 6d 65 2e 20 20 41 6e  e a.** name.  An
1a7e0 20 65 78 70 72 2f 6e 61 6d 65 20 63 6f 6d 62 69   expr/name combi
1a7f0 6e 61 74 69 6f 6e 20 63 61 6e 20 62 65 20 75 73  nation can be us
1a800 65 64 20 69 6e 20 73 65 76 65 72 61 6c 20 77 61  ed in several wa
1a810 79 73 2c 20 73 75 63 68 0a 2a 2a 20 61 73 20 74  ys, such.** as t
1a820 68 65 20 6c 69 73 74 20 6f 66 20 22 65 78 70 72  he list of "expr
1a830 20 41 53 20 49 44 22 20 66 69 65 6c 64 73 20 66   AS ID" fields f
1a840 6f 6c 6c 6f 77 69 6e 67 20 61 20 22 53 45 4c 45  ollowing a "SELE
1a850 43 54 22 20 6f 72 20 69 6e 20 74 68 65 0a 2a 2a  CT" or in the.**
1a860 20 6c 69 73 74 20 6f 66 20 22 49 44 20 3d 20 65   list of "ID = e
1a870 78 70 72 22 20 69 74 65 6d 73 20 69 6e 20 61 6e  xpr" items in an
1a880 20 55 50 44 41 54 45 2e 20 20 41 20 6c 69 73 74   UPDATE.  A list
1a890 20 6f 66 20 65 78 70 72 65 73 73 69 6f 6e 73 20   of expressions 
1a8a0 63 61 6e 0a 2a 2a 20 61 6c 73 6f 20 62 65 20 75  can.** also be u
1a8b0 73 65 64 20 61 73 20 74 68 65 20 61 72 67 75 6d  sed as the argum
1a8c0 65 6e 74 20 74 6f 20 61 20 66 75 6e 63 74 69 6f  ent to a functio
1a8d0 6e 2c 20 69 6e 20 77 68 69 63 68 20 63 61 73 65  n, in which case
1a8e0 20 74 68 65 20 61 2e 7a 4e 61 6d 65 0a 2a 2a 20   the a.zName.** 
1a8f0 66 69 65 6c 64 20 69 73 20 6e 6f 74 20 75 73 65  field is not use
1a900 64 2e 0a 2a 2a 0a 2a 2a 20 42 79 20 64 65 66 61  d..**.** By defa
1a910 75 6c 74 20 74 68 65 20 45 78 70 72 2e 7a 53 70  ult the Expr.zSp
1a920 61 6e 20 66 69 65 6c 64 20 68 6f 6c 64 73 20 61  an field holds a
1a930 20 68 75 6d 61 6e 2d 72 65 61 64 61 62 6c 65 20   human-readable 
1a940 64 65 73 63 72 69 70 74 69 6f 6e 20 6f 66 0a 2a  description of.*
1a950 2a 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e  * the expression
1a960 20 74 68 61 74 20 69 73 20 75 73 65 64 20 69 6e   that is used in
1a970 20 74 68 65 20 67 65 6e 65 72 61 74 69 6f 6e 20   the generation 
1a980 6f 66 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65  of error message
1a990 73 20 61 6e 64 0a 2a 2a 20 63 6f 6c 75 6d 6e 20  s and.** column 
1a9a0 6c 61 62 65 6c 73 2e 20 20 49 6e 20 74 68 69 73  labels.  In this
1a9b0 20 63 61 73 65 2c 20 45 78 70 72 2e 7a 53 70 61   case, Expr.zSpa
1a9c0 6e 20 69 73 20 74 79 70 69 63 61 6c 6c 79 20 74  n is typically t
1a9d0 68 65 20 74 65 78 74 20 6f 66 20 61 0a 2a 2a 20  he text of a.** 
1a9e0 63 6f 6c 75 6d 6e 20 65 78 70 72 65 73 73 69 6f  column expressio
1a9f0 6e 20 61 73 20 69 74 20 65 78 69 73 74 73 20 69  n as it exists i
1aa00 6e 20 61 20 53 45 4c 45 43 54 20 73 74 61 74 65  n a SELECT state
1aa10 6d 65 6e 74 2e 20 20 48 6f 77 65 76 65 72 2c 20  ment.  However, 
1aa20 69 66 0a 2a 2a 20 74 68 65 20 62 53 70 61 6e 49  if.** the bSpanI
1aa30 73 54 61 62 20 66 6c 61 67 20 69 73 20 73 65 74  sTab flag is set
1aa40 2c 20 74 68 65 6e 20 7a 53 70 61 6e 20 69 73 20  , then zSpan is 
1aa50 6f 76 65 72 6c 6f 61 64 65 64 20 74 6f 20 6d 65  overloaded to me
1aa60 61 6e 20 74 68 65 20 6e 61 6d 65 0a 2a 2a 20 6f  an the name.** o
1aa70 66 20 74 68 65 20 72 65 73 75 6c 74 20 63 6f 6c  f the result col
1aa80 75 6d 6e 20 69 6e 20 74 68 65 20 66 6f 72 6d 3a  umn in the form:
1aa90 20 44 41 54 41 42 41 53 45 2e 54 41 42 4c 45 2e   DATABASE.TABLE.
1aaa0 43 4f 4c 55 4d 4e 2e 20 20 54 68 69 73 20 6c 61  COLUMN.  This la
1aab0 74 65 72 0a 2a 2a 20 66 6f 72 6d 20 69 73 20 75  ter.** form is u
1aac0 73 65 64 20 66 6f 72 20 6e 61 6d 65 20 72 65 73  sed for name res
1aad0 6f 6c 75 74 69 6f 6e 20 77 69 74 68 20 6e 65 73  olution with nes
1aae0 74 65 64 20 46 52 4f 4d 20 63 6c 61 75 73 65 73  ted FROM clauses
1aaf0 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 45 78 70 72  ..*/.struct Expr
1ab00 4c 69 73 74 20 7b 0a 20 20 69 6e 74 20 6e 45 78  List {.  int nEx
1ab10 70 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  pr;             
1ab20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 78 70  /* Number of exp
1ab30 72 65 73 73 69 6f 6e 73 20 6f 6e 20 74 68 65 20  ressions on the 
1ab40 6c 69 73 74 20 2a 2f 0a 20 20 73 74 72 75 63 74  list */.  struct
1ab50 20 45 78 70 72 4c 69 73 74 5f 69 74 65 6d 20 7b   ExprList_item {
1ab60 20 2f 2a 20 46 6f 72 20 65 61 63 68 20 65 78 70   /* For each exp
1ab70 72 65 73 73 69 6f 6e 20 69 6e 20 74 68 65 20 6c  ression in the l
1ab80 69 73 74 20 2a 2f 0a 20 20 20 20 45 78 70 72 20  ist */.    Expr 
1ab90 2a 70 45 78 70 72 3b 20 20 20 20 20 20 20 20 20  *pExpr;         
1aba0 20 20 20 2f 2a 20 54 68 65 20 70 61 72 73 65 20     /* The parse 
1abb0 74 72 65 65 20 66 6f 72 20 74 68 69 73 20 65 78  tree for this ex
1abc0 70 72 65 73 73 69 6f 6e 20 2a 2f 0a 20 20 20 20  pression */.    
1abd0 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20  char *zName;    
1abe0 20 20 20 20 20 20 20 20 2f 2a 20 54 6f 6b 65 6e          /* Token
1abf0 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68   associated with
1ac00 20 74 68 69 73 20 65 78 70 72 65 73 73 69 6f 6e   this expression
1ac10 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a 53   */.    char *zS
1ac20 70 61 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20  pan;            
1ac30 2f 2a 20 4f 72 69 67 69 6e 61 6c 20 74 65 78 74  /* Original text
1ac40 20 6f 66 20 74 68 65 20 65 78 70 72 65 73 73 69   of the expressi
1ac50 6f 6e 20 2a 2f 0a 20 20 20 20 75 38 20 73 6f 72  on */.    u8 sor
1ac60 74 4f 72 64 65 72 3b 20 20 20 20 20 20 20 20 20  tOrder;         
1ac70 20 20 2f 2a 20 31 20 66 6f 72 20 44 45 53 43 20    /* 1 for DESC 
1ac80 6f 72 20 30 20 66 6f 72 20 41 53 43 20 2a 2f 0a  or 0 for ASC */.
1ac90 20 20 20 20 75 6e 73 69 67 6e 65 64 20 64 6f 6e      unsigned don
1aca0 65 20 3a 31 3b 20 20 20 20 20 20 20 2f 2a 20 41  e :1;       /* A
1acb0 20 66 6c 61 67 20 74 6f 20 69 6e 64 69 63 61 74   flag to indicat
1acc0 65 20 77 68 65 6e 20 70 72 6f 63 65 73 73 69 6e  e when processin
1acd0 67 20 69 73 20 66 69 6e 69 73 68 65 64 20 2a 2f  g is finished */
1ace0 0a 20 20 20 20 75 6e 73 69 67 6e 65 64 20 62 53  .    unsigned bS
1acf0 70 61 6e 49 73 54 61 62 20 3a 31 3b 20 2f 2a 20  panIsTab :1; /* 
1ad00 7a 53 70 61 6e 20 68 6f 6c 64 73 20 44 42 2e 54  zSpan holds DB.T
1ad10 41 42 4c 45 2e 43 4f 4c 55 4d 4e 20 2a 2f 0a 20  ABLE.COLUMN */. 
1ad20 20 20 20 75 6e 73 69 67 6e 65 64 20 72 65 75 73     unsigned reus
1ad30 61 62 6c 65 20 3a 31 3b 20 20 20 2f 2a 20 43 6f  able :1;   /* Co
1ad40 6e 73 74 61 6e 74 20 65 78 70 72 65 73 73 69 6f  nstant expressio
1ad50 6e 20 69 73 20 72 65 75 73 61 62 6c 65 20 2a 2f  n is reusable */
1ad60 0a 20 20 20 20 75 6e 73 69 67 6e 65 64 20 62 53  .    unsigned bS
1ad70 6f 72 74 65 72 52 65 66 20 3a 31 3b 20 2f 2a 20  orterRef :1; /* 
1ad80 44 65 66 65 72 20 65 76 61 6c 75 61 74 69 6f 6e  Defer evaluation
1ad90 20 75 6e 74 69 6c 20 61 66 74 65 72 20 73 6f 72   until after sor
1ada0 74 69 6e 67 20 2a 2f 0a 20 20 20 20 75 6e 69 6f  ting */.    unio
1adb0 6e 20 7b 0a 20 20 20 20 20 20 73 74 72 75 63 74  n {.      struct
1adc0 20 7b 0a 20 20 20 20 20 20 20 20 75 31 36 20 69   {.        u16 i
1add0 4f 72 64 65 72 42 79 43 6f 6c 3b 20 20 20 20 20  OrderByCol;     
1ade0 20 2f 2a 20 46 6f 72 20 4f 52 44 45 52 20 42 59   /* For ORDER BY
1adf0 2c 20 63 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20  , column number 
1ae00 69 6e 20 72 65 73 75 6c 74 20 73 65 74 20 2a 2f  in result set */
1ae10 0a 20 20 20 20 20 20 20 20 75 31 36 20 69 41 6c  .        u16 iAl
1ae20 69 61 73 3b 20 20 20 20 20 20 20 20 20 20 20 2f  ias;           /
1ae30 2a 20 49 6e 64 65 78 20 69 6e 74 6f 20 50 61 72  * Index into Par
1ae40 73 65 2e 61 41 6c 69 61 73 5b 5d 20 66 6f 72 20  se.aAlias[] for 
1ae50 7a 4e 61 6d 65 20 2a 2f 0a 20 20 20 20 20 20 7d  zName */.      }
1ae60 20 78 3b 0a 20 20 20 20 20 20 69 6e 74 20 69 43   x;.      int iC
1ae70 6f 6e 73 74 45 78 70 72 52 65 67 3b 20 20 20 20  onstExprReg;    
1ae80 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20 69 6e    /* Register in
1ae90 20 77 68 69 63 68 20 45 78 70 72 20 76 61 6c 75   which Expr valu
1aea0 65 20 69 73 20 63 61 63 68 65 64 20 2a 2f 0a 20  e is cached */. 
1aeb0 20 20 20 7d 20 75 3b 0a 20 20 7d 20 61 5b 31 5d     } u;.  } a[1]
1aec0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1aed0 20 20 20 2f 2a 20 4f 6e 65 20 73 6c 6f 74 20 66     /* One slot f
1aee0 6f 72 20 65 61 63 68 20 65 78 70 72 65 73 73 69  or each expressi
1aef0 6f 6e 20 69 6e 20 74 68 65 20 6c 69 73 74 20 2a  on in the list *
1af00 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69  /.};../*.** An i
1af10 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73 20  nstance of this 
1af20 73 74 72 75 63 74 75 72 65 20 63 61 6e 20 68 6f  structure can ho
1af30 6c 64 20 61 20 73 69 6d 70 6c 65 20 6c 69 73 74  ld a simple list
1af40 20 6f 66 20 69 64 65 6e 74 69 66 69 65 72 73 2c   of identifiers,
1af50 0a 2a 2a 20 73 75 63 68 20 61 73 20 74 68 65 20  .** such as the 
1af60 6c 69 73 74 20 22 61 2c 62 2c 63 22 20 69 6e 20  list "a,b,c" in 
1af70 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74  the following st
1af80 61 74 65 6d 65 6e 74 73 3a 0a 2a 2a 0a 2a 2a 20  atements:.**.** 
1af90 20 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f       INSERT INTO
1afa0 20 74 28 61 2c 62 2c 63 29 20 56 41 4c 55 45 53   t(a,b,c) VALUES
1afb0 20 2e 2e 2e 3b 0a 2a 2a 20 20 20 20 20 20 43 52   ...;.**      CR
1afc0 45 41 54 45 20 49 4e 44 45 58 20 69 64 78 20 4f  EATE INDEX idx O
1afd0 4e 20 74 28 61 2c 62 2c 63 29 3b 0a 2a 2a 20 20  N t(a,b,c);.**  
1afe0 20 20 20 20 43 52 45 41 54 45 20 54 52 49 47 47      CREATE TRIGG
1aff0 45 52 20 74 72 69 67 20 42 45 46 4f 52 45 20 55  ER trig BEFORE U
1b000 50 44 41 54 45 20 4f 4e 20 74 28 61 2c 62 2c 63  PDATE ON t(a,b,c
1b010 29 20 2e 2e 2e 3b 0a 2a 2a 0a 2a 2a 20 54 68 65  ) ...;.**.** The
1b020 20 49 64 4c 69 73 74 2e 61 2e 69 64 78 20 66 69   IdList.a.idx fi
1b030 65 6c 64 20 69 73 20 75 73 65 64 20 77 68 65 6e  eld is used when
1b040 20 74 68 65 20 49 64 4c 69 73 74 20 72 65 70 72   the IdList repr
1b050 65 73 65 6e 74 73 20 74 68 65 20 6c 69 73 74 20  esents the list 
1b060 6f 66 0a 2a 2a 20 63 6f 6c 75 6d 6e 20 6e 61 6d  of.** column nam
1b070 65 73 20 61 66 74 65 72 20 61 20 74 61 62 6c 65  es after a table
1b080 20 6e 61 6d 65 20 69 6e 20 61 6e 20 49 4e 53 45   name in an INSE
1b090 52 54 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 49  RT statement.  I
1b0a0 6e 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74 0a  n the statement.
1b0b0 2a 2a 0a 2a 2a 20 20 20 20 20 49 4e 53 45 52 54  **.**     INSERT
1b0c0 20 49 4e 54 4f 20 74 28 61 2c 62 2c 63 29 20 2e   INTO t(a,b,c) .
1b0d0 2e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 22 61 22 20  ...**.** If "a" 
1b0e0 69 73 20 74 68 65 20 6b 2d 74 68 20 63 6f 6c 75  is the k-th colu
1b0f0 6d 6e 20 6f 66 20 74 61 62 6c 65 20 22 74 22 2c  mn of table "t",
1b100 20 74 68 65 6e 20 49 64 4c 69 73 74 2e 61 5b 30   then IdList.a[0
1b110 5d 2e 69 64 78 3d 3d 6b 2e 0a 2a 2f 0a 73 74 72  ].idx==k..*/.str
1b120 75 63 74 20 49 64 4c 69 73 74 20 7b 0a 20 20 73  uct IdList {.  s
1b130 74 72 75 63 74 20 49 64 4c 69 73 74 5f 69 74 65  truct IdList_ite
1b140 6d 20 7b 0a 20 20 20 20 63 68 61 72 20 2a 7a 4e  m {.    char *zN
1b150 61 6d 65 3b 20 20 20 20 20 20 2f 2a 20 4e 61 6d  ame;      /* Nam
1b160 65 20 6f 66 20 74 68 65 20 69 64 65 6e 74 69 66  e of the identif
1b170 69 65 72 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69  ier */.    int i
1b180 64 78 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  dx;          /* 
1b190 49 6e 64 65 78 20 69 6e 20 73 6f 6d 65 20 54 61  Index in some Ta
1b1a0 62 6c 65 2e 61 43 6f 6c 5b 5d 20 6f 66 20 61 20  ble.aCol[] of a 
1b1b0 63 6f 6c 75 6d 6e 20 6e 61 6d 65 64 20 7a 4e 61  column named zNa
1b1c0 6d 65 20 2a 2f 0a 20 20 7d 20 2a 61 3b 0a 20 20  me */.  } *a;.  
1b1d0 69 6e 74 20 6e 49 64 3b 20 20 20 20 20 20 20 20  int nId;        
1b1e0 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 69 64   /* Number of id
1b1f0 65 6e 74 69 66 69 65 72 73 20 6f 6e 20 74 68 65  entifiers on the
1b200 20 6c 69 73 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a   list */.};../*.
1b210 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  ** The following
1b220 20 73 74 72 75 63 74 75 72 65 20 64 65 73 63 72   structure descr
1b230 69 62 65 73 20 74 68 65 20 46 52 4f 4d 20 63 6c  ibes the FROM cl
1b240 61 75 73 65 20 6f 66 20 61 20 53 45 4c 45 43 54  ause of a SELECT
1b250 20 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2a 20 45   statement..** E
1b260 61 63 68 20 74 61 62 6c 65 20 6f 72 20 73 75 62  ach table or sub
1b270 71 75 65 72 79 20 69 6e 20 74 68 65 20 46 52 4f  query in the FRO
1b280 4d 20 63 6c 61 75 73 65 20 69 73 20 61 20 73 65  M clause is a se
1b290 70 61 72 61 74 65 20 65 6c 65 6d 65 6e 74 20 6f  parate element o
1b2a0 66 0a 2a 2a 20 74 68 65 20 53 72 63 4c 69 73 74  f.** the SrcList
1b2b0 2e 61 5b 5d 20 61 72 72 61 79 2e 0a 2a 2a 0a 2a  .a[] array..**.*
1b2c0 2a 20 57 69 74 68 20 74 68 65 20 61 64 64 69 74  * With the addit
1b2d0 69 6f 6e 20 6f 66 20 6d 75 6c 74 69 70 6c 65 20  ion of multiple 
1b2e0 64 61 74 61 62 61 73 65 20 73 75 70 70 6f 72 74  database support
1b2f0 2c 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  , the following 
1b300 73 74 72 75 63 74 75 72 65 0a 2a 2a 20 63 61 6e  structure.** can
1b310 20 61 6c 73 6f 20 62 65 20 75 73 65 64 20 74 6f   also be used to
1b320 20 64 65 73 63 72 69 62 65 20 61 20 70 61 72 74   describe a part
1b330 69 63 75 6c 61 72 20 74 61 62 6c 65 20 73 75 63  icular table suc
1b340 68 20 61 73 20 74 68 65 20 74 61 62 6c 65 20 74  h as the table t
1b350 68 61 74 0a 2a 2a 20 69 73 20 6d 6f 64 69 66 69  hat.** is modifi
1b360 65 64 20 62 79 20 61 6e 20 49 4e 53 45 52 54 2c  ed by an INSERT,
1b370 20 44 45 4c 45 54 45 2c 20 6f 72 20 55 50 44 41   DELETE, or UPDA
1b380 54 45 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 49  TE statement.  I
1b390 6e 20 73 74 61 6e 64 61 72 64 20 53 51 4c 2c 0a  n standard SQL,.
1b3a0 2a 2a 20 73 75 63 68 20 61 20 74 61 62 6c 65 20  ** such a table 
1b3b0 6d 75 73 74 20 62 65 20 61 20 73 69 6d 70 6c 65  must be a simple
1b3c0 20 6e 61 6d 65 3a 20 49 44 2e 20 20 42 75 74 20   name: ID.  But 
1b3d0 69 6e 20 53 51 4c 69 74 65 2c 20 74 68 65 20 74  in SQLite, the t
1b3e0 61 62 6c 65 20 63 61 6e 0a 2a 2a 20 6e 6f 77 20  able can.** now 
1b3f0 62 65 20 69 64 65 6e 74 69 66 69 65 64 20 62 79  be identified by
1b400 20 61 20 64 61 74 61 62 61 73 65 20 6e 61 6d 65   a database name
1b410 2c 20 61 20 64 6f 74 2c 20 74 68 65 6e 20 74 68  , a dot, then th
1b420 65 20 74 61 62 6c 65 20 6e 61 6d 65 3a 20 49 44  e table name: ID
1b430 2e 49 44 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6a  .ID..**.** The j
1b440 6f 69 6e 74 79 70 65 20 73 74 61 72 74 73 20 6f  ointype starts o
1b450 75 74 20 73 68 6f 77 69 6e 67 20 74 68 65 20 6a  ut showing the j
1b460 6f 69 6e 20 74 79 70 65 20 62 65 74 77 65 65 6e  oin type between
1b470 20 74 68 65 20 63 75 72 72 65 6e 74 20 74 61 62   the current tab
1b480 6c 65 0a 2a 2a 20 61 6e 64 20 74 68 65 20 6e 65  le.** and the ne
1b490 78 74 20 74 61 62 6c 65 20 6f 6e 20 74 68 65 20  xt table on the 
1b4a0 6c 69 73 74 2e 20 20 54 68 65 20 70 61 72 73 65  list.  The parse
1b4b0 72 20 62 75 69 6c 64 73 20 74 68 65 20 6c 69 73  r builds the lis
1b4c0 74 20 74 68 69 73 20 77 61 79 2e 0a 2a 2a 20 42  t this way..** B
1b4d0 75 74 20 73 71 6c 69 74 65 33 53 72 63 4c 69 73  ut sqlite3SrcLis
1b4e0 74 53 68 69 66 74 4a 6f 69 6e 54 79 70 65 28 29  tShiftJoinType()
1b4f0 20 6c 61 74 65 72 20 73 68 69 66 74 73 20 74 68   later shifts th
1b500 65 20 6a 6f 69 6e 74 79 70 65 73 20 73 6f 20 74  e jointypes so t
1b510 68 61 74 20 65 61 63 68 0a 2a 2a 20 6a 6f 69 6e  hat each.** join
1b520 74 79 70 65 20 65 78 70 72 65 73 73 65 73 20 74  type expresses t
1b530 68 65 20 6a 6f 69 6e 20 62 65 74 77 65 65 6e 20  he join between 
1b540 74 68 65 20 74 61 62 6c 65 20 61 6e 64 20 74 68  the table and th
1b550 65 20 70 72 65 76 69 6f 75 73 20 74 61 62 6c 65  e previous table
1b560 2e 0a 2a 2a 0a 2a 2a 20 49 6e 20 74 68 65 20 63  ..**.** In the c
1b570 6f 6c 55 73 65 64 20 66 69 65 6c 64 2c 20 74 68  olUsed field, th
1b580 65 20 68 69 67 68 2d 6f 72 64 65 72 20 62 69 74  e high-order bit
1b590 20 28 62 69 74 20 36 33 29 20 69 73 20 73 65 74   (bit 63) is set
1b5a0 20 69 66 20 74 68 65 20 74 61 62 6c 65 0a 2a 2a   if the table.**
1b5b0 20 63 6f 6e 74 61 69 6e 73 20 6d 6f 72 65 20 74   contains more t
1b5c0 68 61 6e 20 36 33 20 63 6f 6c 75 6d 6e 73 20 61  han 63 columns a
1b5d0 6e 64 20 74 68 65 20 36 34 2d 74 68 20 6f 72 20  nd the 64-th or 
1b5e0 6c 61 74 65 72 20 63 6f 6c 75 6d 6e 20 69 73 20  later column is 
1b5f0 75 73 65 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  used..*/.struct 
1b600 53 72 63 4c 69 73 74 20 7b 0a 20 20 69 6e 74 20  SrcList {.  int 
1b610 6e 53 72 63 3b 20 20 20 20 20 20 20 20 2f 2a 20  nSrc;        /* 
1b620 4e 75 6d 62 65 72 20 6f 66 20 74 61 62 6c 65 73  Number of tables
1b630 20 6f 72 20 73 75 62 71 75 65 72 69 65 73 20 69   or subqueries i
1b640 6e 20 74 68 65 20 46 52 4f 4d 20 63 6c 61 75 73  n the FROM claus
1b650 65 20 2a 2f 0a 20 20 75 33 32 20 6e 41 6c 6c 6f  e */.  u32 nAllo
1b660 63 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65  c;      /* Numbe
1b670 72 20 6f 66 20 65 6e 74 72 69 65 73 20 61 6c 6c  r of entries all
1b680 6f 63 61 74 65 64 20 69 6e 20 61 5b 5d 20 62 65  ocated in a[] be
1b690 6c 6f 77 20 2a 2f 0a 20 20 73 74 72 75 63 74 20  low */.  struct 
1b6a0 53 72 63 4c 69 73 74 5f 69 74 65 6d 20 7b 0a 20  SrcList_item {. 
1b6b0 20 20 20 53 63 68 65 6d 61 20 2a 70 53 63 68 65     Schema *pSche
1b6c0 6d 61 3b 20 20 2f 2a 20 53 63 68 65 6d 61 20 74  ma;  /* Schema t
1b6d0 6f 20 77 68 69 63 68 20 74 68 69 73 20 69 74 65  o which this ite
1b6e0 6d 20 69 73 20 66 69 78 65 64 20 2a 2f 0a 20 20  m is fixed */.  
1b6f0 20 20 63 68 61 72 20 2a 7a 44 61 74 61 62 61 73    char *zDatabas
1b700 65 3b 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 64  e;  /* Name of d
1b710 61 74 61 62 61 73 65 20 68 6f 6c 64 69 6e 67 20  atabase holding 
1b720 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20  this table */.  
1b730 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20    char *zName;  
1b740 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74      /* Name of t
1b750 68 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20  he table */.    
1b760 63 68 61 72 20 2a 7a 41 6c 69 61 73 3b 20 20 20  char *zAlias;   
1b770 20 20 2f 2a 20 54 68 65 20 22 42 22 20 70 61 72    /* The "B" par
1b780 74 20 6f 66 20 61 20 22 41 20 41 53 20 42 22 20  t of a "A AS B" 
1b790 70 68 72 61 73 65 2e 20 20 7a 4e 61 6d 65 20 69  phrase.  zName i
1b7a0 73 20 74 68 65 20 22 41 22 20 2a 2f 0a 20 20 20  s the "A" */.   
1b7b0 20 54 61 62 6c 65 20 2a 70 54 61 62 3b 20 20 20   Table *pTab;   
1b7c0 20 20 20 2f 2a 20 41 6e 20 53 51 4c 20 74 61 62     /* An SQL tab
1b7d0 6c 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67  le corresponding
1b7e0 20 74 6f 20 7a 4e 61 6d 65 20 2a 2f 0a 20 20 20   to zName */.   
1b7f0 20 53 65 6c 65 63 74 20 2a 70 53 65 6c 65 63 74   Select *pSelect
1b800 3b 20 20 2f 2a 20 41 20 53 45 4c 45 43 54 20 73  ;  /* A SELECT s
1b810 74 61 74 65 6d 65 6e 74 20 75 73 65 64 20 69 6e  tatement used in
1b820 20 70 6c 61 63 65 20 6f 66 20 61 20 74 61 62 6c   place of a tabl
1b830 65 20 6e 61 6d 65 20 2a 2f 0a 20 20 20 20 69 6e  e name */.    in
1b840 74 20 61 64 64 72 46 69 6c 6c 53 75 62 3b 20 20  t addrFillSub;  
1b850 2f 2a 20 41 64 64 72 65 73 73 20 6f 66 20 73 75  /* Address of su
1b860 62 72 6f 75 74 69 6e 65 20 74 6f 20 6d 61 6e 69  broutine to mani
1b870 66 65 73 74 20 61 20 73 75 62 71 75 65 72 79 20  fest a subquery 
1b880 2a 2f 0a 20 20 20 20 69 6e 74 20 72 65 67 52 65  */.    int regRe
1b890 74 75 72 6e 3b 20 20 20 20 2f 2a 20 52 65 67 69  turn;    /* Regi
1b8a0 73 74 65 72 20 68 6f 6c 64 69 6e 67 20 72 65 74  ster holding ret
1b8b0 75 72 6e 20 61 64 64 72 65 73 73 20 6f 66 20 61  urn address of a
1b8c0 64 64 72 46 69 6c 6c 53 75 62 20 2a 2f 0a 20 20  ddrFillSub */.  
1b8d0 20 20 69 6e 74 20 72 65 67 52 65 73 75 6c 74 3b    int regResult;
1b8e0 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72 73      /* Registers
1b8f0 20 68 6f 6c 64 69 6e 67 20 72 65 73 75 6c 74 73   holding results
1b900 20 6f 66 20 61 20 63 6f 2d 72 6f 75 74 69 6e 65   of a co-routine
1b910 20 2a 2f 0a 20 20 20 20 73 74 72 75 63 74 20 7b   */.    struct {
1b920 0a 20 20 20 20 20 20 75 38 20 6a 6f 69 6e 74 79  .      u8 jointy
1b930 70 65 3b 20 20 20 20 20 20 2f 2a 20 54 79 70 65  pe;      /* Type
1b940 20 6f 66 20 6a 6f 69 6e 20 62 65 74 77 65 65 6e   of join between
1b950 20 74 68 69 73 20 74 61 62 6c 65 20 61 6e 64 20   this table and 
1b960 74 68 65 20 70 72 65 76 69 6f 75 73 20 2a 2f 0a  the previous */.
1b970 20 20 20 20 20 20 75 6e 73 69 67 6e 65 64 20 6e        unsigned n
1b980 6f 74 49 6e 64 65 78 65 64 20 3a 31 3b 20 20 20  otIndexed :1;   
1b990 20 2f 2a 20 54 72 75 65 20 69 66 20 74 68 65 72   /* True if ther
1b9a0 65 20 69 73 20 61 20 4e 4f 54 20 49 4e 44 45 58  e is a NOT INDEX
1b9b0 45 44 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 20  ED clause */.   
1b9c0 20 20 20 75 6e 73 69 67 6e 65 64 20 69 73 49 6e     unsigned isIn
1b9d0 64 65 78 65 64 42 79 20 3a 31 3b 20 20 20 2f 2a  dexedBy :1;   /*
1b9e0 20 54 72 75 65 20 69 66 20 74 68 65 72 65 20 69   True if there i
1b9f0 73 20 61 6e 20 49 4e 44 45 58 45 44 20 42 59 20  s an INDEXED BY 
1ba00 63 6c 61 75 73 65 20 2a 2f 0a 20 20 20 20 20 20  clause */.      
1ba10 75 6e 73 69 67 6e 65 64 20 69 73 54 61 62 46 75  unsigned isTabFu
1ba20 6e 63 20 3a 31 3b 20 20 20 20 20 2f 2a 20 54 72  nc :1;     /* Tr
1ba30 75 65 20 69 66 20 74 61 62 6c 65 2d 76 61 6c 75  ue if table-valu
1ba40 65 64 2d 66 75 6e 63 74 69 6f 6e 20 73 79 6e 74  ed-function synt
1ba50 61 78 20 2a 2f 0a 20 20 20 20 20 20 75 6e 73 69  ax */.      unsi
1ba60 67 6e 65 64 20 69 73 43 6f 72 72 65 6c 61 74 65  gned isCorrelate
1ba70 64 20 3a 31 3b 20 20 2f 2a 20 54 72 75 65 20 69  d :1;  /* True i
1ba80 66 20 73 75 62 2d 71 75 65 72 79 20 69 73 20 63  f sub-query is c
1ba90 6f 72 72 65 6c 61 74 65 64 20 2a 2f 0a 20 20 20  orrelated */.   
1baa0 20 20 20 75 6e 73 69 67 6e 65 64 20 76 69 61 43     unsigned viaC
1bab0 6f 72 6f 75 74 69 6e 65 20 3a 31 3b 20 20 2f 2a  oroutine :1;  /*
1bac0 20 49 6d 70 6c 65 6d 65 6e 74 65 64 20 61 73 20   Implemented as 
1bad0 61 20 63 6f 2d 72 6f 75 74 69 6e 65 20 2a 2f 0a  a co-routine */.
1bae0 20 20 20 20 20 20 75 6e 73 69 67 6e 65 64 20 69        unsigned i
1baf0 73 52 65 63 75 72 73 69 76 65 20 3a 31 3b 20 20  sRecursive :1;  
1bb00 20 2f 2a 20 54 72 75 65 20 66 6f 72 20 72 65 63   /* True for rec
1bb10 75 72 73 69 76 65 20 72 65 66 65 72 65 6e 63 65  ursive reference
1bb20 20 69 6e 20 57 49 54 48 20 2a 2f 0a 20 20 20 20   in WITH */.    
1bb30 7d 20 66 67 3b 0a 20 20 20 20 69 6e 74 20 69 43  } fg;.    int iC
1bb40 75 72 73 6f 72 3b 20 20 20 20 20 20 2f 2a 20 54  ursor;      /* T
1bb50 68 65 20 56 44 42 45 20 63 75 72 73 6f 72 20 6e  he VDBE cursor n
1bb60 75 6d 62 65 72 20 75 73 65 64 20 74 6f 20 61 63  umber used to ac
1bb70 63 65 73 73 20 74 68 69 73 20 74 61 62 6c 65 20  cess this table 
1bb80 2a 2f 0a 20 20 20 20 45 78 70 72 20 2a 70 4f 6e  */.    Expr *pOn
1bb90 3b 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20  ;        /* The 
1bba0 4f 4e 20 63 6c 61 75 73 65 20 6f 66 20 61 20 6a  ON clause of a j
1bbb0 6f 69 6e 20 2a 2f 0a 20 20 20 20 49 64 4c 69 73  oin */.    IdLis
1bbc0 74 20 2a 70 55 73 69 6e 67 3b 20 20 20 2f 2a 20  t *pUsing;   /* 
1bbd0 54 68 65 20 55 53 49 4e 47 20 63 6c 61 75 73 65  The USING clause
1bbe0 20 6f 66 20 61 20 6a 6f 69 6e 20 2a 2f 0a 20 20   of a join */.  
1bbf0 20 20 42 69 74 6d 61 73 6b 20 63 6f 6c 55 73 65    Bitmask colUse
1bc00 64 3b 20 20 2f 2a 20 42 69 74 20 4e 20 28 31 3c  d;  /* Bit N (1<
1bc10 3c 4e 29 20 73 65 74 20 69 66 20 63 6f 6c 75 6d  <N) set if colum
1bc20 6e 20 4e 20 6f 66 20 70 54 61 62 20 69 73 20 75  n N of pTab is u
1bc30 73 65 64 20 2a 2f 0a 20 20 20 20 75 6e 69 6f 6e  sed */.    union
1bc40 20 7b 0a 20 20 20 20 20 20 63 68 61 72 20 2a 7a   {.      char *z
1bc50 49 6e 64 65 78 65 64 42 79 3b 20 20 20 20 2f 2a  IndexedBy;    /*
1bc60 20 49 64 65 6e 74 69 66 69 65 72 20 66 72 6f 6d   Identifier from
1bc70 20 22 49 4e 44 45 58 45 44 20 42 59 20 3c 7a 49   "INDEXED BY <zI
1bc80 6e 64 65 78 3e 22 20 63 6c 61 75 73 65 20 2a 2f  ndex>" clause */
1bc90 0a 20 20 20 20 20 20 45 78 70 72 4c 69 73 74 20  .      ExprList 
1bca0 2a 70 46 75 6e 63 41 72 67 3b 20 20 2f 2a 20 41  *pFuncArg;  /* A
1bcb0 72 67 75 6d 65 6e 74 73 20 74 6f 20 74 61 62 6c  rguments to tabl
1bcc0 65 2d 76 61 6c 75 65 64 2d 66 75 6e 63 74 69 6f  e-valued-functio
1bcd0 6e 20 2a 2f 0a 20 20 20 20 7d 20 75 31 3b 0a 20  n */.    } u1;. 
1bce0 20 20 20 49 6e 64 65 78 20 2a 70 49 42 49 6e 64     Index *pIBInd
1bcf0 65 78 3b 20 20 2f 2a 20 49 6e 64 65 78 20 73 74  ex;  /* Index st
1bd00 72 75 63 74 75 72 65 20 63 6f 72 72 65 73 70 6f  ructure correspo
1bd10 6e 64 69 6e 67 20 74 6f 20 75 31 2e 7a 49 6e 64  nding to u1.zInd
1bd20 65 78 65 64 42 79 20 2a 2f 0a 20 20 7d 20 61 5b  exedBy */.  } a[
1bd30 31 5d 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  1];             
1bd40 2f 2a 20 4f 6e 65 20 65 6e 74 72 79 20 66 6f 72  /* One entry for
1bd50 20 65 61 63 68 20 69 64 65 6e 74 69 66 69 65 72   each identifier
1bd60 20 6f 6e 20 74 68 65 20 6c 69 73 74 20 2a 2f 0a   on the list */.
1bd70 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 50 65 72 6d 69 74  };../*.** Permit
1bd80 74 65 64 20 76 61 6c 75 65 73 20 6f 66 20 74 68  ted values of th
1bd90 65 20 53 72 63 4c 69 73 74 2e 61 2e 6a 6f 69 6e  e SrcList.a.join
1bda0 74 79 70 65 20 66 69 65 6c 64 0a 2a 2f 0a 23 64  type field.*/.#d
1bdb0 65 66 69 6e 65 20 4a 54 5f 49 4e 4e 45 52 20 20  efine JT_INNER  
1bdc0 20 20 20 30 78 30 30 30 31 20 20 20 20 2f 2a 20     0x0001    /* 
1bdd0 41 6e 79 20 6b 69 6e 64 20 6f 66 20 69 6e 6e 65  Any kind of inne
1bde0 72 20 6f 72 20 63 72 6f 73 73 20 6a 6f 69 6e 20  r or cross join 
1bdf0 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f 43 52  */.#define JT_CR
1be00 4f 53 53 20 20 20 20 20 30 78 30 30 30 32 20 20  OSS     0x0002  
1be10 20 20 2f 2a 20 45 78 70 6c 69 63 69 74 20 75 73    /* Explicit us
1be20 65 20 6f 66 20 74 68 65 20 43 52 4f 53 53 20 6b  e of the CROSS k
1be30 65 79 77 6f 72 64 20 2a 2f 0a 23 64 65 66 69 6e  eyword */.#defin
1be40 65 20 4a 54 5f 4e 41 54 55 52 41 4c 20 20 20 30  e JT_NATURAL   0
1be50 78 30 30 30 34 20 20 20 20 2f 2a 20 54 72 75 65  x0004    /* True
1be60 20 66 6f 72 20 61 20 22 6e 61 74 75 72 61 6c 22   for a "natural"
1be70 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66 69 6e 65   join */.#define
1be80 20 4a 54 5f 4c 45 46 54 20 20 20 20 20 20 30 78   JT_LEFT      0x
1be90 30 30 30 38 20 20 20 20 2f 2a 20 4c 65 66 74 20  0008    /* Left 
1bea0 6f 75 74 65 72 20 6a 6f 69 6e 20 2a 2f 0a 23 64  outer join */.#d
1beb0 65 66 69 6e 65 20 4a 54 5f 52 49 47 48 54 20 20  efine JT_RIGHT  
1bec0 20 20 20 30 78 30 30 31 30 20 20 20 20 2f 2a 20     0x0010    /* 
1bed0 52 69 67 68 74 20 6f 75 74 65 72 20 6a 6f 69 6e  Right outer join
1bee0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f 4f   */.#define JT_O
1bef0 55 54 45 52 20 20 20 20 20 30 78 30 30 32 30 20  UTER     0x0020 
1bf00 20 20 20 2f 2a 20 54 68 65 20 22 4f 55 54 45 52     /* The "OUTER
1bf10 22 20 6b 65 79 77 6f 72 64 20 69 73 20 70 72 65  " keyword is pre
1bf20 73 65 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20  sent */.#define 
1bf30 4a 54 5f 45 52 52 4f 52 20 20 20 20 20 30 78 30  JT_ERROR     0x0
1bf40 30 34 30 20 20 20 20 2f 2a 20 75 6e 6b 6e 6f 77  040    /* unknow
1bf50 6e 20 6f 72 20 75 6e 73 75 70 70 6f 72 74 65 64  n or unsupported
1bf60 20 6a 6f 69 6e 20 74 79 70 65 20 2a 2f 0a 0a 0a   join type */...
1bf70 2f 2a 0a 2a 2a 20 46 6c 61 67 73 20 61 70 70 72  /*.** Flags appr
1bf80 6f 70 72 69 61 74 65 20 66 6f 72 20 74 68 65 20  opriate for the 
1bf90 77 63 74 72 6c 46 6c 61 67 73 20 70 61 72 61 6d  wctrlFlags param
1bfa0 65 74 65 72 20 6f 66 20 73 71 6c 69 74 65 33 57  eter of sqlite3W
1bfb0 68 65 72 65 42 65 67 69 6e 28 29 0a 2a 2a 20 61  hereBegin().** a
1bfc0 6e 64 20 74 68 65 20 57 68 65 72 65 49 6e 66 6f  nd the WhereInfo
1bfd0 2e 77 63 74 72 6c 46 6c 61 67 73 20 6d 65 6d 62  .wctrlFlags memb
1bfe0 65 72 2e 0a 2a 2a 0a 2a 2a 20 56 61 6c 75 65 20  er..**.** Value 
1bff0 63 6f 6e 73 74 72 61 69 6e 74 73 20 28 65 6e 66  constraints (enf
1c000 6f 72 63 65 64 20 76 69 61 20 61 73 73 65 72 74  orced via assert
1c010 28 29 29 3a 0a 2a 2a 20 20 20 20 20 57 48 45 52  ()):.**     WHER
1c020 45 5f 55 53 45 5f 4c 49 4d 49 54 20 20 3d 3d 20  E_USE_LIMIT  == 
1c030 53 46 5f 46 69 78 65 64 4c 69 6d 69 74 0a 2a 2f  SF_FixedLimit.*/
1c040 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 4f  .#define WHERE_O
1c050 52 44 45 52 42 59 5f 4e 4f 52 4d 41 4c 20 20 20  RDERBY_NORMAL   
1c060 30 78 30 30 30 30 20 2f 2a 20 4e 6f 2d 6f 70 20  0x0000 /* No-op 
1c070 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45  */.#define WHERE
1c080 5f 4f 52 44 45 52 42 59 5f 4d 49 4e 20 20 20 20  _ORDERBY_MIN    
1c090 20 20 30 78 30 30 30 31 20 2f 2a 20 4f 52 44 45    0x0001 /* ORDE
1c0a0 52 20 42 59 20 70 72 6f 63 65 73 73 69 6e 67 20  R BY processing 
1c0b0 66 6f 72 20 6d 69 6e 28 29 20 66 75 6e 63 20 2a  for min() func *
1c0c0 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f  /.#define WHERE_
1c0d0 4f 52 44 45 52 42 59 5f 4d 41 58 20 20 20 20 20  ORDERBY_MAX     
1c0e0 20 30 78 30 30 30 32 20 2f 2a 20 4f 52 44 45 52   0x0002 /* ORDER
1c0f0 20 42 59 20 70 72 6f 63 65 73 73 69 6e 67 20 66   BY processing f
1c100 6f 72 20 6d 61 78 28 29 20 66 75 6e 63 20 2a 2f  or max() func */
1c110 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 4f  .#define WHERE_O
1c120 4e 45 50 41 53 53 5f 44 45 53 49 52 45 44 20 20  NEPASS_DESIRED  
1c130 30 78 30 30 30 34 20 2f 2a 20 57 61 6e 74 20 74  0x0004 /* Want t
1c140 6f 20 64 6f 20 6f 6e 65 2d 70 61 73 73 20 55 50  o do one-pass UP
1c150 44 41 54 45 2f 44 45 4c 45 54 45 20 2a 2f 0a 23  DATE/DELETE */.#
1c160 64 65 66 69 6e 65 20 57 48 45 52 45 5f 4f 4e 45  define WHERE_ONE
1c170 50 41 53 53 5f 4d 55 4c 54 49 52 4f 57 20 30 78  PASS_MULTIROW 0x
1c180 30 30 30 38 20 2f 2a 20 4f 4e 45 50 41 53 53 20  0008 /* ONEPASS 
1c190 69 73 20 6f 6b 20 77 69 74 68 20 6d 75 6c 74 69  is ok with multi
1c1a0 70 6c 65 20 72 6f 77 73 20 2a 2f 0a 23 64 65 66  ple rows */.#def
1c1b0 69 6e 65 20 57 48 45 52 45 5f 44 55 50 4c 49 43  ine WHERE_DUPLIC
1c1c0 41 54 45 53 5f 4f 4b 20 20 20 20 30 78 30 30 31  ATES_OK    0x001
1c1d0 30 20 2f 2a 20 4f 6b 20 74 6f 20 72 65 74 75 72  0 /* Ok to retur
1c1e0 6e 20 61 20 72 6f 77 20 6d 6f 72 65 20 74 68 61  n a row more tha
1c1f0 6e 20 6f 6e 63 65 20 2a 2f 0a 23 64 65 66 69 6e  n once */.#defin
1c200 65 20 57 48 45 52 45 5f 4f 52 5f 53 55 42 43 4c  e WHERE_OR_SUBCL
1c210 41 55 53 45 20 20 20 20 20 30 78 30 30 32 30 20  AUSE     0x0020 
1c220 2f 2a 20 50 72 6f 63 65 73 73 69 6e 67 20 61 20  /* Processing a 
1c230 73 75 62 2d 57 48 45 52 45 20 61 73 20 70 61 72  sub-WHERE as par
1c240 74 20 6f 66 0a 20 20 20 20 20 20 20 20 20 20 20  t of.           
1c250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c260 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 74 68             ** th
1c270 65 20 4f 52 20 6f 70 74 69 6d 69 7a 61 74 69 6f  e OR optimizatio
1c280 6e 20 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48  n  */.#define WH
1c290 45 52 45 5f 47 52 4f 55 50 42 59 20 20 20 20 20  ERE_GROUPBY     
1c2a0 20 20 20 20 20 30 78 30 30 34 30 20 2f 2a 20 70       0x0040 /* p
1c2b0 4f 72 64 65 72 42 79 20 69 73 20 72 65 61 6c 6c  OrderBy is reall
1c2c0 79 20 61 20 47 52 4f 55 50 20 42 59 20 2a 2f 0a  y a GROUP BY */.
1c2d0 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 44 49  #define WHERE_DI
1c2e0 53 54 49 4e 43 54 42 59 20 20 20 20 20 20 20 30  STINCTBY       0
1c2f0 78 30 30 38 30 20 2f 2a 20 70 4f 72 64 65 72 62  x0080 /* pOrderb
1c300 79 20 69 73 20 72 65 61 6c 6c 79 20 61 20 44 49  y is really a DI
1c310 53 54 49 4e 43 54 20 63 6c 61 75 73 65 20 2a 2f  STINCT clause */
1c320 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 57  .#define WHERE_W
1c330 41 4e 54 5f 44 49 53 54 49 4e 43 54 20 20 20 20  ANT_DISTINCT    
1c340 30 78 30 31 30 30 20 2f 2a 20 41 6c 6c 20 6f 75  0x0100 /* All ou
1c350 74 70 75 74 20 6e 65 65 64 73 20 74 6f 20 62 65  tput needs to be
1c360 20 64 69 73 74 69 6e 63 74 20 2a 2f 0a 23 64 65   distinct */.#de
1c370 66 69 6e 65 20 57 48 45 52 45 5f 53 4f 52 54 42  fine WHERE_SORTB
1c380 59 47 52 4f 55 50 20 20 20 20 20 20 30 78 30 32  YGROUP      0x02
1c390 30 30 20 2f 2a 20 53 75 70 70 6f 72 74 20 73 71  00 /* Support sq
1c3a0 6c 69 74 65 33 57 68 65 72 65 49 73 53 6f 72 74  lite3WhereIsSort
1c3b0 65 64 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ed() */.#define 
1c3c0 57 48 45 52 45 5f 53 45 45 4b 5f 54 41 42 4c 45  WHERE_SEEK_TABLE
1c3d0 20 20 20 20 20 20 20 30 78 30 34 30 30 20 2f 2a         0x0400 /*
1c3e0 20 44 6f 20 6e 6f 74 20 64 65 66 65 72 20 73 65   Do not defer se
1c3f0 65 6b 73 20 6f 6e 20 6d 61 69 6e 20 74 61 62 6c  eks on main tabl
1c400 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45  e */.#define WHE
1c410 52 45 5f 4f 52 44 45 52 42 59 5f 4c 49 4d 49 54  RE_ORDERBY_LIMIT
1c420 20 20 20 20 30 78 30 38 30 30 20 2f 2a 20 4f 52      0x0800 /* OR
1c430 44 45 52 42 59 2b 4c 49 4d 49 54 20 6f 6e 20 74  DERBY+LIMIT on t
1c440 68 65 20 69 6e 6e 65 72 20 6c 6f 6f 70 20 2a 2f  he inner loop */
1c450 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 53  .#define WHERE_S
1c460 45 45 4b 5f 55 4e 49 51 5f 54 41 42 4c 45 20 20  EEK_UNIQ_TABLE  
1c470 30 78 31 30 30 30 20 2f 2a 20 44 6f 20 6e 6f 74  0x1000 /* Do not
1c480 20 64 65 66 65 72 20 73 65 65 6b 73 20 69 66 20   defer seeks if 
1c490 75 6e 69 71 75 65 20 2a 2f 0a 20 20 20 20 20 20  unique */.      
1c4a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c4b0 20 20 2f 2a 20 20 20 20 20 30 78 32 30 30 30 20    /*     0x2000 
1c4c0 20 20 20 6e 6f 74 20 63 75 72 72 65 6e 74 6c 79     not currently
1c4d0 20 75 73 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65   used */.#define
1c4e0 20 57 48 45 52 45 5f 55 53 45 5f 4c 49 4d 49 54   WHERE_USE_LIMIT
1c4f0 20 20 20 20 20 20 20 20 30 78 34 30 30 30 20 2f          0x4000 /
1c500 2a 20 55 73 65 20 74 68 65 20 4c 49 4d 49 54 20  * Use the LIMIT 
1c510 69 6e 20 63 6f 73 74 20 65 73 74 69 6d 61 74 65  in cost estimate
1c520 73 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20  s */.           
1c530 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1c540 20 20 20 20 30 78 38 30 30 30 20 20 20 20 6e 6f      0x8000    no
1c550 74 20 63 75 72 72 65 6e 74 6c 79 20 75 73 65 64  t currently used
1c560 20 2a 2f 0a 0a 2f 2a 20 41 6c 6c 6f 77 65 64 20   */../* Allowed 
1c570 72 65 74 75 72 6e 20 76 61 6c 75 65 73 20 66 72  return values fr
1c580 6f 6d 20 73 71 6c 69 74 65 33 57 68 65 72 65 49  om sqlite3WhereI
1c590 73 44 69 73 74 69 6e 63 74 28 29 0a 2a 2f 0a 23  sDistinct().*/.#
1c5a0 64 65 66 69 6e 65 20 57 48 45 52 45 5f 44 49 53  define WHERE_DIS
1c5b0 54 49 4e 43 54 5f 4e 4f 4f 50 20 20 20 20 20 20  TINCT_NOOP      
1c5c0 30 20 20 2f 2a 20 44 49 53 54 49 4e 43 54 20 6b  0  /* DISTINCT k
1c5d0 65 79 77 6f 72 64 20 6e 6f 74 20 75 73 65 64 20  eyword not used 
1c5e0 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45  */.#define WHERE
1c5f0 5f 44 49 53 54 49 4e 43 54 5f 55 4e 49 51 55 45  _DISTINCT_UNIQUE
1c600 20 20 20 20 31 20 20 2f 2a 20 4e 6f 20 64 75 70      1  /* No dup
1c610 6c 69 63 61 74 65 73 20 2a 2f 0a 23 64 65 66 69  licates */.#defi
1c620 6e 65 20 57 48 45 52 45 5f 44 49 53 54 49 4e 43  ne WHERE_DISTINC
1c630 54 5f 4f 52 44 45 52 45 44 20 20 20 32 20 20 2f  T_ORDERED   2  /
1c640 2a 20 41 6c 6c 20 64 75 70 6c 69 63 61 74 65 73  * All duplicates
1c650 20 61 72 65 20 61 64 6a 61 63 65 6e 74 20 2a 2f   are adjacent */
1c660 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 44  .#define WHERE_D
1c670 49 53 54 49 4e 43 54 5f 55 4e 4f 52 44 45 52 45  ISTINCT_UNORDERE
1c680 44 20 33 20 20 2f 2a 20 44 75 70 6c 69 63 61 74  D 3  /* Duplicat
1c690 65 73 20 61 72 65 20 73 63 61 74 74 65 72 65 64  es are scattered
1c6a0 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 20 4e 61 6d   */../*.** A Nam
1c6b0 65 43 6f 6e 74 65 78 74 20 64 65 66 69 6e 65 73  eContext defines
1c6c0 20 61 20 63 6f 6e 74 65 78 74 20 69 6e 20 77 68   a context in wh
1c6d0 69 63 68 20 74 6f 20 72 65 73 6f 6c 76 65 20 74  ich to resolve t
1c6e0 61 62 6c 65 20 61 6e 64 20 63 6f 6c 75 6d 6e 0a  able and column.
1c6f0 2a 2a 20 6e 61 6d 65 73 2e 20 20 54 68 65 20 63  ** names.  The c
1c700 6f 6e 74 65 78 74 20 63 6f 6e 73 69 73 74 73 20  ontext consists 
1c710 6f 66 20 61 20 6c 69 73 74 20 6f 66 20 74 61 62  of a list of tab
1c720 6c 65 73 20 28 74 68 65 20 70 53 72 63 4c 69 73  les (the pSrcLis
1c730 74 29 20 66 69 65 6c 64 20 61 6e 64 0a 2a 2a 20  t) field and.** 
1c740 61 20 6c 69 73 74 20 6f 66 20 6e 61 6d 65 64 20  a list of named 
1c750 65 78 70 72 65 73 73 69 6f 6e 20 28 70 45 4c 69  expression (pELi
1c760 73 74 29 2e 20 20 54 68 65 20 6e 61 6d 65 64 20  st).  The named 
1c770 65 78 70 72 65 73 73 69 6f 6e 20 6c 69 73 74 20  expression list 
1c780 6d 61 79 0a 2a 2a 20 62 65 20 4e 55 4c 4c 2e 20  may.** be NULL. 
1c790 20 54 68 65 20 70 53 72 63 20 63 6f 72 72 65 73   The pSrc corres
1c7a0 70 6f 6e 64 73 20 74 6f 20 74 68 65 20 46 52 4f  ponds to the FRO
1c7b0 4d 20 63 6c 61 75 73 65 20 6f 66 20 61 20 53 45  M clause of a SE
1c7c0 4c 45 43 54 20 6f 72 0a 2a 2a 20 74 6f 20 74 68  LECT or.** to th
1c7d0 65 20 74 61 62 6c 65 20 62 65 69 6e 67 20 6f 70  e table being op
1c7e0 65 72 61 74 65 64 20 6f 6e 20 62 79 20 49 4e 53  erated on by INS
1c7f0 45 52 54 2c 20 55 50 44 41 54 45 2c 20 6f 72 20  ERT, UPDATE, or 
1c800 44 45 4c 45 54 45 2e 20 20 54 68 65 0a 2a 2a 20  DELETE.  The.** 
1c810 70 45 4c 69 73 74 20 63 6f 72 72 65 73 70 6f 6e  pEList correspon
1c820 64 73 20 74 6f 20 74 68 65 20 72 65 73 75 6c 74  ds to the result
1c830 20 73 65 74 20 6f 66 20 61 20 53 45 4c 45 43 54   set of a SELECT
1c840 20 61 6e 64 20 69 73 20 4e 55 4c 4c 20 66 6f 72   and is NULL for
1c850 0a 2a 2a 20 6f 74 68 65 72 20 73 74 61 74 65 6d  .** other statem
1c860 65 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20 4e 61 6d 65  ents..**.** Name
1c870 43 6f 6e 74 65 78 74 73 20 63 61 6e 20 62 65 20  Contexts can be 
1c880 6e 65 73 74 65 64 2e 20 20 57 68 65 6e 20 72 65  nested.  When re
1c890 73 6f 6c 76 69 6e 67 20 6e 61 6d 65 73 2c 20 74  solving names, t
1c8a0 68 65 20 69 6e 6e 65 72 2d 6d 6f 73 74 0a 2a 2a  he inner-most.**
1c8b0 20 63 6f 6e 74 65 78 74 20 69 73 20 73 65 61 72   context is sear
1c8c0 63 68 65 64 20 66 69 72 73 74 2e 20 20 49 66 20  ched first.  If 
1c8d0 6e 6f 20 6d 61 74 63 68 20 69 73 20 66 6f 75 6e  no match is foun
1c8e0 64 2c 20 74 68 65 20 6e 65 78 74 20 6f 75 74 65  d, the next oute
1c8f0 72 0a 2a 2a 20 63 6f 6e 74 65 78 74 20 69 73 20  r.** context is 
1c900 63 68 65 63 6b 65 64 2e 20 20 49 66 20 74 68 65  checked.  If the
1c910 72 65 20 69 73 20 73 74 69 6c 6c 20 6e 6f 20 6d  re is still no m
1c920 61 74 63 68 2c 20 74 68 65 20 6e 65 78 74 20 63  atch, the next c
1c930 6f 6e 74 65 78 74 0a 2a 2a 20 69 73 20 63 68 65  ontext.** is che
1c940 63 6b 65 64 2e 20 20 54 68 69 73 20 70 72 6f 63  cked.  This proc
1c950 65 73 73 20 63 6f 6e 74 69 6e 75 65 73 20 75 6e  ess continues un
1c960 74 69 6c 20 65 69 74 68 65 72 20 61 20 6d 61 74  til either a mat
1c970 63 68 20 69 73 20 66 6f 75 6e 64 0a 2a 2a 20 6f  ch is found.** o
1c980 72 20 61 6c 6c 20 63 6f 6e 74 65 78 74 73 20 61  r all contexts a
1c990 72 65 20 63 68 65 63 6b 2e 20 20 57 68 65 6e 20  re check.  When 
1c9a0 61 20 6d 61 74 63 68 20 69 73 20 66 6f 75 6e 64  a match is found
1c9b0 2c 20 74 68 65 20 6e 52 65 66 20 6d 65 6d 62 65  , the nRef membe
1c9c0 72 20 6f 66 0a 2a 2a 20 74 68 65 20 63 6f 6e 74  r of.** the cont
1c9d0 65 78 74 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74  ext containing t
1c9e0 68 65 20 6d 61 74 63 68 20 69 73 20 69 6e 63 72  he match is incr
1c9f0 65 6d 65 6e 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 45  emented..**.** E
1ca00 61 63 68 20 73 75 62 71 75 65 72 79 20 67 65 74  ach subquery get
1ca10 73 20 61 20 6e 65 77 20 4e 61 6d 65 43 6f 6e 74  s a new NameCont
1ca20 65 78 74 2e 20 20 54 68 65 20 70 4e 65 78 74 20  ext.  The pNext 
1ca30 66 69 65 6c 64 20 70 6f 69 6e 74 73 20 74 6f 20  field points to 
1ca40 74 68 65 0a 2a 2a 20 4e 61 6d 65 43 6f 6e 74 65  the.** NameConte
1ca50 78 74 20 69 6e 20 74 68 65 20 70 61 72 65 6e 74  xt in the parent
1ca60 20 71 75 65 72 79 2e 20 20 54 68 75 73 20 74 68   query.  Thus th
1ca70 65 20 70 72 6f 63 65 73 73 20 6f 66 20 73 63 61  e process of sca
1ca80 6e 6e 69 6e 67 20 74 68 65 0a 2a 2a 20 4e 61 6d  nning the.** Nam
1ca90 65 43 6f 6e 74 65 78 74 20 6c 69 73 74 20 63 6f  eContext list co
1caa0 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 73 65 61  rresponds to sea
1cab0 72 63 68 69 6e 67 20 74 68 72 6f 75 67 68 20 73  rching through s
1cac0 75 63 63 65 73 73 69 76 65 6c 79 20 6f 75 74 65  uccessively oute
1cad0 72 0a 2a 2a 20 73 75 62 71 75 65 72 69 65 73 20  r.** subqueries 
1cae0 6c 6f 6f 6b 69 6e 67 20 66 6f 72 20 61 20 6d 61  looking for a ma
1caf0 74 63 68 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 4e  tch..*/.struct N
1cb00 61 6d 65 43 6f 6e 74 65 78 74 20 7b 0a 20 20 50  ameContext {.  P
1cb10 61 72 73 65 20 2a 70 50 61 72 73 65 3b 20 20 20  arse *pParse;   
1cb20 20 20 20 20 2f 2a 20 54 68 65 20 70 61 72 73 65      /* The parse
1cb30 72 20 2a 2f 0a 20 20 53 72 63 4c 69 73 74 20 2a  r */.  SrcList *
1cb40 70 53 72 63 4c 69 73 74 3b 20 20 20 2f 2a 20 4f  pSrcList;   /* O
1cb50 6e 65 20 6f 72 20 6d 6f 72 65 20 74 61 62 6c 65  ne or more table
1cb60 73 20 75 73 65 64 20 74 6f 20 72 65 73 6f 6c 76  s used to resolv
1cb70 65 20 6e 61 6d 65 73 20 2a 2f 0a 20 20 75 6e 69  e names */.  uni
1cb80 6f 6e 20 7b 0a 20 20 20 20 45 78 70 72 4c 69 73  on {.    ExprLis
1cb90 74 20 2a 70 45 4c 69 73 74 3b 20 20 20 20 2f 2a  t *pEList;    /*
1cba0 20 4f 70 74 69 6f 6e 61 6c 20 6c 69 73 74 20 6f   Optional list o
1cbb0 66 20 72 65 73 75 6c 74 2d 73 65 74 20 63 6f 6c  f result-set col
1cbc0 75 6d 6e 73 20 2a 2f 0a 20 20 20 20 41 67 67 49  umns */.    AggI
1cbd0 6e 66 6f 20 2a 70 41 67 67 49 6e 66 6f 3b 20 20  nfo *pAggInfo;  
1cbe0 20 2f 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20   /* Information 
1cbf0 61 62 6f 75 74 20 61 67 67 72 65 67 61 74 65 73  about aggregates
1cc00 20 61 74 20 74 68 69 73 20 6c 65 76 65 6c 20 2a   at this level *
1cc10 2f 0a 20 20 20 20 55 70 73 65 72 74 20 2a 70 55  /.    Upsert *pU
1cc20 70 73 65 72 74 3b 20 20 20 20 20 2f 2a 20 4f 4e  psert;     /* ON
1cc30 20 43 4f 4e 46 4c 49 43 54 20 63 6c 61 75 73 65   CONFLICT clause
1cc40 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 66 72 6f   information fro
1cc50 6d 20 61 6e 20 75 70 73 65 72 74 20 2a 2f 0a 20  m an upsert */. 
1cc60 20 7d 20 75 4e 43 3b 0a 20 20 4e 61 6d 65 43 6f   } uNC;.  NameCo
1cc70 6e 74 65 78 74 20 2a 70 4e 65 78 74 3b 20 20 2f  ntext *pNext;  /
1cc80 2a 20 4e 65 78 74 20 6f 75 74 65 72 20 6e 61 6d  * Next outer nam
1cc90 65 20 63 6f 6e 74 65 78 74 2e 20 20 4e 55 4c 4c  e context.  NULL
1cca0 20 66 6f 72 20 6f 75 74 65 72 6d 6f 73 74 20 2a   for outermost *
1ccb0 2f 0a 20 20 69 6e 74 20 6e 52 65 66 3b 20 20 20  /.  int nRef;   
1ccc0 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
1ccd0 65 72 20 6f 66 20 6e 61 6d 65 73 20 72 65 73 6f  er of names reso
1cce0 6c 76 65 64 20 62 79 20 74 68 69 73 20 63 6f 6e  lved by this con
1ccf0 74 65 78 74 20 2a 2f 0a 20 20 69 6e 74 20 6e 45  text */.  int nE
1cd00 72 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  rr;            /
1cd10 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 72 72 6f  * Number of erro
1cd20 72 73 20 65 6e 63 6f 75 6e 74 65 72 65 64 20 77  rs encountered w
1cd30 68 69 6c 65 20 72 65 73 6f 6c 76 69 6e 67 20 6e  hile resolving n
1cd40 61 6d 65 73 20 2a 2f 0a 20 20 75 31 36 20 6e 63  ames */.  u16 nc
1cd50 46 6c 61 67 73 3b 20 20 20 20 20 20 20 20 20 2f  Flags;         /
1cd60 2a 20 5a 65 72 6f 20 6f 72 20 6d 6f 72 65 20 4e  * Zero or more N
1cd70 43 5f 2a 20 66 6c 61 67 73 20 64 65 66 69 6e 65  C_* flags define
1cd80 64 20 62 65 6c 6f 77 20 2a 2f 0a 20 20 53 65 6c  d below */.  Sel
1cd90 65 63 74 20 2a 70 57 69 6e 53 65 6c 65 63 74 3b  ect *pWinSelect;
1cda0 20 20 2f 2a 20 53 45 4c 45 43 54 20 73 74 61 74    /* SELECT stat
1cdb0 65 6d 65 6e 74 20 66 6f 72 20 61 6e 79 20 77 69  ement for any wi
1cdc0 6e 64 6f 77 20 66 75 6e 63 74 69 6f 6e 73 20 2a  ndow functions *
1cdd0 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f  /.};../*.** Allo
1cde0 77 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20 74  wed values for t
1cdf0 68 65 20 4e 61 6d 65 43 6f 6e 74 65 78 74 2c 20  he NameContext, 
1ce00 6e 63 46 6c 61 67 73 20 66 69 65 6c 64 2e 0a 2a  ncFlags field..*
1ce10 2a 0a 2a 2a 20 56 61 6c 75 65 20 63 6f 6e 73 74  *.** Value const
1ce20 72 61 69 6e 74 73 20 28 61 6c 6c 20 63 68 65 63  raints (all chec
1ce30 6b 65 64 20 76 69 61 20 61 73 73 65 72 74 28 29  ked via assert()
1ce40 29 3a 0a 2a 2a 20 20 20 20 4e 43 5f 48 61 73 41  ):.**    NC_HasA
1ce50 67 67 20 20 20 20 3d 3d 20 53 46 5f 48 61 73 41  gg    == SF_HasA
1ce60 67 67 0a 2a 2a 20 20 20 20 4e 43 5f 4d 69 6e 4d  gg.**    NC_MinM
1ce70 61 78 41 67 67 20 3d 3d 20 53 46 5f 4d 69 6e 4d  axAgg == SF_MinM
1ce80 61 78 41 67 67 20 3d 3d 20 53 51 4c 49 54 45 5f  axAgg == SQLITE_
1ce90 46 55 4e 43 5f 4d 49 4e 4d 41 58 0a 2a 2a 0a 2a  FUNC_MINMAX.**.*
1cea0 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 41 6c 6c  /.#define NC_All
1ceb0 6f 77 41 67 67 20 20 30 78 30 30 30 31 20 20 2f  owAgg  0x0001  /
1cec0 2a 20 41 67 67 72 65 67 61 74 65 20 66 75 6e 63  * Aggregate func
1ced0 74 69 6f 6e 73 20 61 72 65 20 61 6c 6c 6f 77 65  tions are allowe
1cee0 64 20 68 65 72 65 20 2a 2f 0a 23 64 65 66 69 6e  d here */.#defin
1cef0 65 20 4e 43 5f 50 61 72 74 49 64 78 20 20 20 30  e NC_PartIdx   0
1cf00 78 30 30 30 32 20 20 2f 2a 20 54 72 75 65 20 69  x0002  /* True i
1cf10 66 20 72 65 73 6f 6c 76 69 6e 67 20 61 20 70 61  f resolving a pa
1cf20 72 74 69 61 6c 20 69 6e 64 65 78 20 57 48 45 52  rtial index WHER
1cf30 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f  E */.#define NC_
1cf40 49 73 43 68 65 63 6b 20 20 20 30 78 30 30 30 34  IsCheck   0x0004
1cf50 20 20 2f 2a 20 54 72 75 65 20 69 66 20 72 65 73    /* True if res
1cf60 6f 6c 76 69 6e 67 20 6e 61 6d 65 73 20 69 6e 20  olving names in 
1cf70 61 20 43 48 45 43 4b 20 63 6f 6e 73 74 72 61 69  a CHECK constrai
1cf80 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43  nt */.#define NC
1cf90 5f 49 6e 41 67 67 46 75 6e 63 20 30 78 30 30 30  _InAggFunc 0x000
1cfa0 38 20 20 2f 2a 20 54 72 75 65 20 69 66 20 61 6e  8  /* True if an
1cfb0 61 6c 79 7a 69 6e 67 20 61 72 67 75 6d 65 6e 74  alyzing argument
1cfc0 73 20 74 6f 20 61 6e 20 61 67 67 20 66 75 6e 63  s to an agg func
1cfd0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 48   */.#define NC_H
1cfe0 61 73 41 67 67 20 20 20 20 30 78 30 30 31 30 20  asAgg    0x0010 
1cff0 20 2f 2a 20 4f 6e 65 20 6f 72 20 6d 6f 72 65 20   /* One or more 
1d000 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69  aggregate functi
1d010 6f 6e 73 20 73 65 65 6e 20 2a 2f 0a 23 64 65 66  ons seen */.#def
1d020 69 6e 65 20 4e 43 5f 49 64 78 45 78 70 72 20 20  ine NC_IdxExpr  
1d030 20 30 78 30 30 32 30 20 20 2f 2a 20 54 72 75 65   0x0020  /* True
1d040 20 69 66 20 72 65 73 6f 6c 76 69 6e 67 20 63 6f   if resolving co
1d050 6c 75 6d 6e 73 20 6f 66 20 43 52 45 41 54 45 20  lumns of CREATE 
1d060 49 4e 44 45 58 20 2a 2f 0a 23 64 65 66 69 6e 65  INDEX */.#define
1d070 20 4e 43 5f 56 61 72 53 65 6c 65 63 74 20 30 78   NC_VarSelect 0x
1d080 30 30 34 30 20 20 2f 2a 20 41 20 63 6f 72 72 65  0040  /* A corre
1d090 6c 61 74 65 64 20 73 75 62 71 75 65 72 79 20 68  lated subquery h
1d0a0 61 73 20 62 65 65 6e 20 73 65 65 6e 20 2a 2f 0a  as been seen */.
1d0b0 23 64 65 66 69 6e 65 20 4e 43 5f 55 45 4c 69 73  #define NC_UELis
1d0c0 74 20 20 20 20 30 78 30 30 38 30 20 20 2f 2a 20  t    0x0080  /* 
1d0d0 54 72 75 65 20 69 66 20 75 4e 43 2e 70 45 4c 69  True if uNC.pELi
1d0e0 73 74 20 69 73 20 75 73 65 64 20 2a 2f 0a 23 64  st is used */.#d
1d0f0 65 66 69 6e 65 20 4e 43 5f 55 41 67 67 49 6e 66  efine NC_UAggInf
1d100 6f 20 20 30 78 30 31 30 30 20 20 2f 2a 20 54 72  o  0x0100  /* Tr
1d110 75 65 20 69 66 20 75 4e 43 2e 70 41 67 67 49 6e  ue if uNC.pAggIn
1d120 66 6f 20 69 73 20 75 73 65 64 20 2a 2f 0a 23 64  fo is used */.#d
1d130 65 66 69 6e 65 20 4e 43 5f 55 55 70 73 65 72 74  efine NC_UUpsert
1d140 20 20 20 30 78 30 32 30 30 20 20 2f 2a 20 54 72     0x0200  /* Tr
1d150 75 65 20 69 66 20 75 4e 43 2e 70 55 70 73 65 72  ue if uNC.pUpser
1d160 74 20 69 73 20 75 73 65 64 20 2a 2f 0a 23 64 65  t is used */.#de
1d170 66 69 6e 65 20 4e 43 5f 4d 69 6e 4d 61 78 41 67  fine NC_MinMaxAg
1d180 67 20 30 78 31 30 30 30 20 20 2f 2a 20 6d 69 6e  g 0x1000  /* min
1d190 2f 6d 61 78 20 61 67 67 72 65 67 61 74 65 73 20  /max aggregates 
1d1a0 73 65 65 6e 2e 20 20 53 65 65 20 6e 6f 74 65 20  seen.  See note 
1d1b0 61 62 6f 76 65 20 2a 2f 0a 23 64 65 66 69 6e 65  above */.#define
1d1c0 20 4e 43 5f 43 6f 6d 70 6c 65 78 20 20 20 30 78   NC_Complex   0x
1d1d0 32 30 30 30 20 20 2f 2a 20 54 72 75 65 20 69 66  2000  /* True if
1d1e0 20 61 20 66 75 6e 63 74 69 6f 6e 20 6f 72 20 73   a function or s
1d1f0 75 62 71 75 65 72 79 20 73 65 65 6e 20 2a 2f 0a  ubquery seen */.
1d200 23 64 65 66 69 6e 65 20 4e 43 5f 41 6c 6c 6f 77  #define NC_Allow
1d210 57 69 6e 20 20 30 78 34 30 30 30 20 20 2f 2a 20  Win  0x4000  /* 
1d220 57 69 6e 64 6f 77 20 66 75 6e 63 74 69 6f 6e 73  Window functions
1d230 20 61 72 65 20 61 6c 6c 6f 77 65 64 20 68 65 72   are allowed her
1d240 65 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69  e */../*.** An i
1d250 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66  nstance of the f
1d260 6f 6c 6c 6f 77 69 6e 67 20 6f 62 6a 65 63 74 20  ollowing object 
1d270 64 65 73 63 72 69 62 65 73 20 61 20 73 69 6e 67  describes a sing
1d280 6c 65 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 0a 2a  le ON CONFLICT.*
1d290 2a 20 63 6c 61 75 73 65 20 69 6e 20 61 6e 20 75  * clause in an u
1d2a0 70 73 65 72 74 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  psert..**.** The
1d2b0 20 70 55 70 73 65 72 74 54 61 72 67 65 74 20 66   pUpsertTarget f
1d2c0 69 65 6c 64 20 69 73 20 6f 6e 6c 79 20 73 65 74  ield is only set
1d2d0 20 69 66 20 74 68 65 20 4f 4e 20 43 4f 4e 46 4c   if the ON CONFL
1d2e0 49 43 54 20 63 6c 61 75 73 65 20 69 6e 63 6c 75  ICT clause inclu
1d2f0 64 65 73 0a 2a 2a 20 63 6f 6e 66 6c 69 63 74 2d  des.** conflict-
1d300 74 61 72 67 65 74 20 63 6c 61 75 73 65 2e 20 20  target clause.  
1d310 28 49 6e 20 22 4f 4e 20 43 4f 4e 46 4c 49 43 54  (In "ON CONFLICT
1d320 28 61 2c 62 29 22 20 74 68 65 20 22 28 61 2c 62  (a,b)" the "(a,b
1d330 29 22 20 69 73 20 74 68 65 0a 2a 2a 20 63 6f 6e  )" is the.** con
1d340 66 6c 69 63 74 2d 74 61 72 67 65 74 20 63 6c 61  flict-target cla
1d350 75 73 65 2e 29 20 20 54 68 65 20 70 55 70 73 65  use.)  The pUpse
1d360 72 74 54 61 72 67 65 74 57 68 65 72 65 20 69 73  rtTargetWhere is
1d370 20 74 68 65 20 6f 70 74 69 6f 6e 61 6c 0a 2a 2a   the optional.**
1d380 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 75 73   WHERE clause us
1d390 65 64 20 74 6f 20 69 64 65 6e 74 69 66 79 20 70  ed to identify p
1d3a0 61 72 74 69 61 6c 20 75 6e 69 71 75 65 20 69 6e  artial unique in
1d3b0 64 65 78 65 73 2e 0a 2a 2a 0a 2a 2a 20 70 55 70  dexes..**.** pUp
1d3c0 73 65 72 74 53 65 74 20 69 73 20 74 68 65 20 6c  sertSet is the l
1d3d0 69 73 74 20 6f 66 20 63 6f 6c 75 6d 6e 3d 65 78  ist of column=ex
1d3e0 70 72 20 74 65 72 6d 73 20 6f 66 20 74 68 65 20  pr terms of the 
1d3f0 55 50 44 41 54 45 20 73 74 61 74 65 6d 65 6e 74  UPDATE statement
1d400 2e 20 0a 2a 2a 20 54 68 65 20 70 55 70 73 65 72  . .** The pUpser
1d410 74 53 65 74 20 66 69 65 6c 64 20 69 73 20 4e 55  tSet field is NU
1d420 4c 4c 20 66 6f 72 20 61 20 4f 4e 20 43 4f 4e 46  LL for a ON CONF
1d430 4c 49 43 54 20 44 4f 20 4e 4f 54 48 49 4e 47 2e  LICT DO NOTHING.
1d440 20 20 54 68 65 0a 2a 2a 20 70 55 70 73 65 72 74    The.** pUpsert
1d450 57 68 65 72 65 20 69 73 20 74 68 65 20 57 48 45  Where is the WHE
1d460 52 45 20 63 6c 61 75 73 65 20 66 6f 72 20 74 68  RE clause for th
1d470 65 20 55 50 44 41 54 45 20 61 6e 64 20 69 73 20  e UPDATE and is 
1d480 4e 55 4c 4c 20 69 66 20 74 68 65 0a 2a 2a 20 57  NULL if the.** W
1d490 48 45 52 45 20 63 6c 61 75 73 65 20 69 73 20 6f  HERE clause is o
1d4a0 6d 69 74 74 65 64 2e 0a 2a 2f 0a 73 74 72 75 63  mitted..*/.struc
1d4b0 74 20 55 70 73 65 72 74 20 7b 0a 20 20 45 78 70  t Upsert {.  Exp
1d4c0 72 4c 69 73 74 20 2a 70 55 70 73 65 72 74 54 61  rList *pUpsertTa
1d4d0 72 67 65 74 3b 20 20 2f 2a 20 4f 70 74 69 6f 6e  rget;  /* Option
1d4e0 61 6c 20 64 65 73 63 72 69 70 74 69 6f 6e 20 6f  al description o
1d4f0 66 20 63 6f 6e 66 6c 69 63 74 69 6e 67 20 69 6e  f conflicting in
1d500 64 65 78 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70  dex */.  Expr *p
1d510 55 70 73 65 72 74 54 61 72 67 65 74 57 68 65 72  UpsertTargetWher
1d520 65 3b 20 2f 2a 20 57 48 45 52 45 20 63 6c 61 75  e; /* WHERE clau
1d530 73 65 20 66 6f 72 20 70 61 72 74 69 61 6c 20 69  se for partial i
1d540 6e 64 65 78 20 74 61 72 67 65 74 73 20 2a 2f 0a  ndex targets */.
1d550 20 20 45 78 70 72 4c 69 73 74 20 2a 70 55 70 73    ExprList *pUps
1d560 65 72 74 53 65 74 3b 20 20 20 20 20 2f 2a 20 54  ertSet;     /* T
1d570 68 65 20 53 45 54 20 63 6c 61 75 73 65 20 66 72  he SET clause fr
1d580 6f 6d 20 61 6e 20 4f 4e 20 43 4f 4e 46 4c 49 43  om an ON CONFLIC
1d590 54 20 55 50 44 41 54 45 20 2a 2f 0a 20 20 45 78  T UPDATE */.  Ex
1d5a0 70 72 20 2a 70 55 70 73 65 72 74 57 68 65 72 65  pr *pUpsertWhere
1d5b0 3b 20 20 20 20 20 20 20 2f 2a 20 57 48 45 52 45  ;       /* WHERE
1d5c0 20 63 6c 61 75 73 65 20 66 6f 72 20 74 68 65 20   clause for the 
1d5d0 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 55 50 44 41  ON CONFLICT UPDA
1d5e0 54 45 20 2a 2f 0a 20 20 2f 2a 20 54 68 65 20 66  TE */.  /* The f
1d5f0 69 65 6c 64 73 20 61 62 6f 76 65 20 63 6f 6d 70  ields above comp
1d600 72 69 73 65 20 74 68 65 20 70 61 72 73 65 20 74  rise the parse t
1d610 72 65 65 20 66 6f 72 20 74 68 65 20 75 70 73 65  ree for the upse
1d620 72 74 20 63 6c 61 75 73 65 2e 0a 20 20 2a 2a 20  rt clause..  ** 
1d630 54 68 65 20 66 69 65 6c 64 73 20 62 65 6c 6f 77  The fields below
1d640 20 61 72 65 20 75 73 65 64 20 74 6f 20 74 72 61   are used to tra
1d650 6e 73 66 65 72 20 69 6e 66 6f 72 6d 61 74 69 6f  nsfer informatio
1d660 6e 20 66 72 6f 6d 20 74 68 65 20 49 4e 53 45 52  n from the INSER
1d670 54 0a 20 20 2a 2a 20 70 72 6f 63 65 73 73 69 6e  T.  ** processin
1d680 67 20 64 6f 77 6e 20 69 6e 74 6f 20 74 68 65 20  g down into the 
1d690 55 50 44 41 54 45 20 70 72 6f 63 65 73 73 69 6e  UPDATE processin
1d6a0 67 20 77 68 69 6c 65 20 67 65 6e 65 72 61 74 69  g while generati
1d6b0 6e 67 20 63 6f 64 65 2e 0a 20 20 2a 2a 20 55 70  ng code..  ** Up
1d6c0 73 65 72 74 20 6f 77 6e 73 20 74 68 65 20 6d 65  sert owns the me
1d6d0 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 65 64 20 61  mory allocated a
1d6e0 62 6f 76 65 2c 20 62 75 74 20 6e 6f 74 20 74 68  bove, but not th
1d6f0 65 20 6d 65 6d 6f 72 79 20 62 65 6c 6f 77 2e 20  e memory below. 
1d700 2a 2f 0a 20 20 49 6e 64 65 78 20 2a 70 55 70 73  */.  Index *pUps
1d710 65 72 74 49 64 78 3b 20 20 20 20 20 20 20 20 2f  ertIdx;        /
1d720 2a 20 43 6f 6e 73 74 72 61 69 6e 74 20 74 68 61  * Constraint tha
1d730 74 20 70 55 70 73 65 72 74 54 61 72 67 65 74 20  t pUpsertTarget 
1d740 69 64 65 6e 74 69 66 69 65 73 20 2a 2f 0a 20 20  identifies */.  
1d750 53 72 63 4c 69 73 74 20 2a 70 55 70 73 65 72 74  SrcList *pUpsert
1d760 53 72 63 3b 20 20 20 20 20 20 2f 2a 20 54 61 62  Src;      /* Tab
1d770 6c 65 20 74 6f 20 62 65 20 75 70 64 61 74 65 64  le to be updated
1d780 20 2a 2f 0a 20 20 69 6e 74 20 72 65 67 44 61 74   */.  int regDat
1d790 61 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  a;              
1d7a0 2f 2a 20 46 69 72 73 74 20 72 65 67 69 73 74 65  /* First registe
1d7b0 72 20 68 6f 6c 64 69 6e 67 20 61 72 72 61 79 20  r holding array 
1d7c0 6f 66 20 56 41 4c 55 45 53 20 2a 2f 0a 20 20 69  of VALUES */.  i
1d7d0 6e 74 20 69 44 61 74 61 43 75 72 3b 20 20 20 20  nt iDataCur;    
1d7e0 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 64 65           /* Inde
1d7f0 78 20 6f 66 20 74 68 65 20 64 61 74 61 20 63 75  x of the data cu
1d800 72 73 6f 72 20 2a 2f 0a 20 20 69 6e 74 20 69 49  rsor */.  int iI
1d810 64 78 43 75 72 3b 20 20 20 20 20 20 20 20 20 20  dxCur;          
1d820 20 20 20 20 2f 2a 20 49 6e 64 65 78 20 6f 66 20      /* Index of 
1d830 74 68 65 20 66 69 72 73 74 20 69 6e 64 65 78 20  the first index 
1d840 63 75 72 73 6f 72 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  cursor */.};../*
1d850 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20  .** An instance 
1d860 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  of the following
1d870 20 73 74 72 75 63 74 75 72 65 20 63 6f 6e 74 61   structure conta
1d880 69 6e 73 20 61 6c 6c 20 69 6e 66 6f 72 6d 61 74  ins all informat
1d890 69 6f 6e 0a 2a 2a 20 6e 65 65 64 65 64 20 74 6f  ion.** needed to
1d8a0 20 67 65 6e 65 72 61 74 65 20 63 6f 64 65 20 66   generate code f
1d8b0 6f 72 20 61 20 73 69 6e 67 6c 65 20 53 45 4c 45  or a single SELE
1d8c0 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2a  CT statement..**
1d8d0 0a 2a 2a 20 53 65 65 20 74 68 65 20 68 65 61 64  .** See the head
1d8e0 65 72 20 63 6f 6d 6d 65 6e 74 20 6f 6e 20 74 68  er comment on th
1d8f0 65 20 63 6f 6d 70 75 74 65 4c 69 6d 69 74 52 65  e computeLimitRe
1d900 67 69 73 74 65 72 73 28 29 20 72 6f 75 74 69 6e  gisters() routin
1d910 65 20 66 6f 72 20 61 0a 2a 2a 20 64 65 74 61 69  e for a.** detai
1d920 6c 65 64 20 64 65 73 63 72 69 70 74 69 6f 6e 20  led description 
1d930 6f 66 20 74 68 65 20 6d 65 61 6e 69 6e 67 20 6f  of the meaning o
1d940 66 20 74 68 65 20 69 4c 69 6d 69 74 20 61 6e 64  f the iLimit and
1d950 20 69 4f 66 66 73 65 74 20 66 69 65 6c 64 73 2e   iOffset fields.
1d960 0a 2a 2a 0a 2a 2a 20 61 64 64 72 4f 70 65 6e 45  .**.** addrOpenE
1d970 70 68 6d 5b 5d 20 65 6e 74 72 69 65 73 20 63 6f  phm[] entries co
1d980 6e 74 61 69 6e 20 74 68 65 20 61 64 64 72 65 73  ntain the addres
1d990 73 20 6f 66 20 4f 50 5f 4f 70 65 6e 45 70 68 65  s of OP_OpenEphe
1d9a0 6d 65 72 61 6c 20 6f 70 63 6f 64 65 73 2e 0a 2a  meral opcodes..*
1d9b0 2a 20 54 68 65 73 65 20 61 64 64 72 65 73 73 65  * These addresse
1d9c0 73 20 6d 75 73 74 20 62 65 20 73 74 6f 72 65 64  s must be stored
1d9d0 20 73 6f 20 74 68 61 74 20 77 65 20 63 61 6e 20   so that we can 
1d9e0 67 6f 20 62 61 63 6b 20 61 6e 64 20 66 69 6c 6c  go back and fill
1d9f0 20 69 6e 0a 2a 2a 20 74 68 65 20 50 34 5f 4b 45   in.** the P4_KE
1da00 59 49 4e 46 4f 20 61 6e 64 20 50 32 20 70 61 72  YINFO and P2 par
1da10 61 6d 65 74 65 72 73 20 6c 61 74 65 72 2e 20 20  ameters later.  
1da20 4e 65 69 74 68 65 72 20 74 68 65 20 4b 65 79 49  Neither the KeyI
1da30 6e 66 6f 20 6e 6f 72 0a 2a 2a 20 74 68 65 20 6e  nfo nor.** the n
1da40 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73  umber of columns
1da50 20 69 6e 20 50 32 20 63 61 6e 20 62 65 20 63 6f   in P2 can be co
1da60 6d 70 75 74 65 64 20 61 74 20 74 68 65 20 73 61  mputed at the sa
1da70 6d 65 20 74 69 6d 65 0a 2a 2a 20 61 73 20 74 68  me time.** as th
1da80 65 20 4f 50 5f 4f 70 65 6e 45 70 68 6d 20 69 6e  e OP_OpenEphm in
1da90 73 74 72 75 63 74 69 6f 6e 20 69 73 20 63 6f 64  struction is cod
1daa0 65 64 20 62 65 63 61 75 73 65 20 6e 6f 74 0a 2a  ed because not.*
1dab0 2a 20 65 6e 6f 75 67 68 20 69 6e 66 6f 72 6d 61  * enough informa
1dac0 74 69 6f 6e 20 61 62 6f 75 74 20 74 68 65 20 63  tion about the c
1dad0 6f 6d 70 6f 75 6e 64 20 71 75 65 72 79 20 69 73  ompound query is
1dae0 20 6b 6e 6f 77 6e 20 61 74 20 74 68 61 74 20 70   known at that p
1daf0 6f 69 6e 74 2e 0a 2a 2a 20 54 68 65 20 4b 65 79  oint..** The Key
1db00 49 6e 66 6f 20 66 6f 72 20 61 64 64 72 4f 70 65  Info for addrOpe
1db10 6e 54 72 61 6e 5b 30 5d 20 61 6e 64 20 5b 31 5d  nTran[0] and [1]
1db20 20 63 6f 6e 74 61 69 6e 73 20 63 6f 6c 6c 61 74   contains collat
1db30 69 6e 67 20 73 65 71 75 65 6e 63 65 73 0a 2a 2a  ing sequences.**
1db40 20 66 6f 72 20 74 68 65 20 72 65 73 75 6c 74 20   for the result 
1db50 73 65 74 2e 20 20 54 68 65 20 4b 65 79 49 6e 66  set.  The KeyInf
1db60 6f 20 66 6f 72 20 61 64 64 72 4f 70 65 6e 45 70  o for addrOpenEp
1db70 68 6d 5b 32 5d 20 63 6f 6e 74 61 69 6e 73 20 63  hm[2] contains c
1db80 6f 6c 6c 61 74 69 6e 67 0a 2a 2a 20 73 65 71 75  ollating.** sequ
1db90 65 6e 63 65 73 20 66 6f 72 20 74 68 65 20 4f 52  ences for the OR
1dba0 44 45 52 20 42 59 20 63 6c 61 75 73 65 2e 0a 2a  DER BY clause..*
1dbb0 2f 0a 73 74 72 75 63 74 20 53 65 6c 65 63 74 20  /.struct Select 
1dbc0 7b 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70 45  {.  ExprList *pE
1dbd0 4c 69 73 74 3b 20 20 20 20 20 20 2f 2a 20 54 68  List;      /* Th
1dbe0 65 20 66 69 65 6c 64 73 20 6f 66 20 74 68 65 20  e fields of the 
1dbf0 72 65 73 75 6c 74 20 2a 2f 0a 20 20 75 38 20 6f  result */.  u8 o
1dc00 70 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  p;              
1dc10 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 3a 20 54 4b     /* One of: TK
1dc20 5f 55 4e 49 4f 4e 20 54 4b 5f 41 4c 4c 20 54 4b  _UNION TK_ALL TK
1dc30 5f 49 4e 54 45 52 53 45 43 54 20 54 4b 5f 45 58  _INTERSECT TK_EX
1dc40 43 45 50 54 20 2a 2f 0a 20 20 4c 6f 67 45 73 74  CEPT */.  LogEst
1dc50 20 6e 53 65 6c 65 63 74 52 6f 77 3b 20 20 20 20   nSelectRow;    
1dc60 20 2f 2a 20 45 73 74 69 6d 61 74 65 64 20 6e 75   /* Estimated nu
1dc70 6d 62 65 72 20 6f 66 20 72 65 73 75 6c 74 20 72  mber of result r
1dc80 6f 77 73 20 2a 2f 0a 20 20 75 33 32 20 73 65 6c  ows */.  u32 sel
1dc90 46 6c 61 67 73 3b 20 20 20 20 20 20 20 20 20 20  Flags;          
1dca0 2f 2a 20 56 61 72 69 6f 75 73 20 53 46 5f 2a 20  /* Various SF_* 
1dcb0 76 61 6c 75 65 73 20 2a 2f 0a 20 20 69 6e 74 20  values */.  int 
1dcc0 69 4c 69 6d 69 74 2c 20 69 4f 66 66 73 65 74 3b  iLimit, iOffset;
1dcd0 20 20 20 2f 2a 20 4d 65 6d 6f 72 79 20 72 65 67     /* Memory reg
1dce0 69 73 74 65 72 73 20 68 6f 6c 64 69 6e 67 20 4c  isters holding L
1dcf0 49 4d 49 54 20 26 20 4f 46 46 53 45 54 20 63 6f  IMIT & OFFSET co
1dd00 75 6e 74 65 72 73 20 2a 2f 0a 20 20 75 33 32 20  unters */.  u32 
1dd10 73 65 6c 49 64 3b 20 20 20 20 20 20 20 20 20 20  selId;          
1dd20 20 20 20 2f 2a 20 55 6e 69 71 75 65 20 69 64 65     /* Unique ide
1dd30 6e 74 69 66 69 65 72 20 6e 75 6d 62 65 72 20 66  ntifier number f
1dd40 6f 72 20 74 68 69 73 20 53 45 4c 45 43 54 20 2a  or this SELECT *
1dd50 2f 0a 20 20 69 6e 74 20 61 64 64 72 4f 70 65 6e  /.  int addrOpen
1dd60 45 70 68 6d 5b 32 5d 3b 20 20 20 2f 2a 20 4f 50  Ephm[2];   /* OP
1dd70 5f 4f 70 65 6e 45 70 68 65 6d 20 6f 70 63 6f 64  _OpenEphem opcod
1dd80 65 73 20 72 65 6c 61 74 65 64 20 74 6f 20 74 68  es related to th
1dd90 69 73 20 73 65 6c 65 63 74 20 2a 2f 0a 20 20 53  is select */.  S
1dda0 72 63 4c 69 73 74 20 2a 70 53 72 63 3b 20 20 20  rcList *pSrc;   
1ddb0 20 20 20 20 20 20 2f 2a 20 54 68 65 20 46 52 4f        /* The FRO
1ddc0 4d 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 45 78  M clause */.  Ex
1ddd0 70 72 20 2a 70 57 68 65 72 65 3b 20 20 20 20 20  pr *pWhere;     
1dde0 20 20 20 20 20 2f 2a 20 54 68 65 20 57 48 45 52       /* The WHER
1ddf0 45 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 45 78  E clause */.  Ex
1de00 70 72 4c 69 73 74 20 2a 70 47 72 6f 75 70 42 79  prList *pGroupBy
1de10 3b 20 20 20 20 2f 2a 20 54 68 65 20 47 52 4f 55  ;    /* The GROU
1de20 50 20 42 59 20 63 6c 61 75 73 65 20 2a 2f 0a 20  P BY clause */. 
1de30 20 45 78 70 72 20 2a 70 48 61 76 69 6e 67 3b 20   Expr *pHaving; 
1de40 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 48          /* The H
1de50 41 56 49 4e 47 20 63 6c 61 75 73 65 20 2a 2f 0a  AVING clause */.
1de60 20 20 45 78 70 72 4c 69 73 74 20 2a 70 4f 72 64    ExprList *pOrd
1de70 65 72 42 79 3b 20 20 20 20 2f 2a 20 54 68 65 20  erBy;    /* The 
1de80 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73 65 20  ORDER BY clause 
1de90 2a 2f 0a 20 20 53 65 6c 65 63 74 20 2a 70 50 72  */.  Select *pPr
1dea0 69 6f 72 3b 20 20 20 20 20 20 20 20 2f 2a 20 50  ior;        /* P
1deb0 72 69 6f 72 20 73 65 6c 65 63 74 20 69 6e 20 61  rior select in a
1dec0 20 63 6f 6d 70 6f 75 6e 64 20 73 65 6c 65 63 74   compound select
1ded0 20 73 74 61 74 65 6d 65 6e 74 20 2a 2f 0a 20 20   statement */.  
1dee0 53 65 6c 65 63 74 20 2a 70 4e 65 78 74 3b 20 20  Select *pNext;  
1def0 20 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 73         /* Next s
1df00 65 6c 65 63 74 20 74 6f 20 74 68 65 20 6c 65 66  elect to the lef
1df10 74 20 69 6e 20 61 20 63 6f 6d 70 6f 75 6e 64 20  t in a compound 
1df20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 4c 69 6d 69  */.  Expr *pLimi
1df30 74 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c  t;          /* L
1df40 49 4d 49 54 20 65 78 70 72 65 73 73 69 6f 6e 2e  IMIT expression.
1df50 20 4e 55 4c 4c 20 6d 65 61 6e 73 20 6e 6f 74 20   NULL means not 
1df60 75 73 65 64 2e 20 2a 2f 0a 20 20 57 69 74 68 20  used. */.  With 
1df70 2a 70 57 69 74 68 3b 20 20 20 20 20 20 20 20 20  *pWith;         
1df80 20 20 2f 2a 20 57 49 54 48 20 63 6c 61 75 73 65    /* WITH clause
1df90 20 61 74 74 61 63 68 65 64 20 74 6f 20 74 68 69   attached to thi
1dfa0 73 20 73 65 6c 65 63 74 2e 20 4f 72 20 4e 55 4c  s select. Or NUL
1dfb0 4c 2e 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51  L. */.#ifndef SQ
1dfc0 4c 49 54 45 5f 4f 4d 49 54 5f 57 49 4e 44 4f 57  LITE_OMIT_WINDOW
1dfd0 46 55 4e 43 0a 20 20 57 69 6e 64 6f 77 20 2a 70  FUNC.  Window *p
1dfe0 57 69 6e 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  Win;          /*
1dff0 20 4c 69 73 74 20 6f 66 20 77 69 6e 64 6f 77 20   List of window 
1e000 66 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a 20 20 57  functions */.  W
1e010 69 6e 64 6f 77 20 2a 70 57 69 6e 44 65 66 6e 3b  indow *pWinDefn;
1e020 20 20 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66        /* List of
1e030 20 6e 61 6d 65 64 20 77 69 6e 64 6f 77 20 64 65   named window de
1e040 66 69 6e 69 74 69 6f 6e 73 20 2a 2f 0a 23 65 6e  finitions */.#en
1e050 64 69 66 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c  dif.};../*.** Al
1e060 6c 6f 77 65 64 20 76 61 6c 75 65 73 20 66 6f 72  lowed values for
1e070 20 53 65 6c 65 63 74 2e 73 65 6c 46 6c 61 67 73   Select.selFlags
1e080 2e 20 20 54 68 65 20 22 53 46 22 20 70 72 65 66  .  The "SF" pref
1e090 69 78 20 73 74 61 6e 64 73 20 66 6f 72 0a 2a 2a  ix stands for.**
1e0a0 20 22 53 65 6c 65 63 74 20 46 6c 61 67 22 2e 0a   "Select Flag"..
1e0b0 2a 2a 0a 2a 2a 20 56 61 6c 75 65 20 63 6f 6e 73  **.** Value cons
1e0c0 74 72 61 69 6e 74 73 20 28 61 6c 6c 20 63 68 65  traints (all che
1e0d0 63 6b 65 64 20 76 69 61 20 61 73 73 65 72 74 28  cked via assert(
1e0e0 29 29 0a 2a 2a 20 20 20 20 20 53 46 5f 48 61 73  )).**     SF_Has
1e0f0 41 67 67 20 20 20 20 20 3d 3d 20 4e 43 5f 48 61  Agg     == NC_Ha
1e100 73 41 67 67 0a 2a 2a 20 20 20 20 20 53 46 5f 4d  sAgg.**     SF_M
1e110 69 6e 4d 61 78 41 67 67 20 20 3d 3d 20 4e 43 5f  inMaxAgg  == NC_
1e120 4d 69 6e 4d 61 78 41 67 67 20 20 20 20 20 3d 3d  MinMaxAgg     ==
1e130 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4d 49 4e   SQLITE_FUNC_MIN
1e140 4d 41 58 0a 2a 2a 20 20 20 20 20 53 46 5f 46 69  MAX.**     SF_Fi
1e150 78 65 64 4c 69 6d 69 74 20 3d 3d 20 57 48 45 52  xedLimit == WHER
1e160 45 5f 55 53 45 5f 4c 49 4d 49 54 0a 2a 2f 0a 23  E_USE_LIMIT.*/.#
1e170 64 65 66 69 6e 65 20 53 46 5f 44 69 73 74 69 6e  define SF_Distin
1e180 63 74 20 20 20 20 20 20 20 30 78 30 30 30 30 31  ct       0x00001
1e190 20 20 2f 2a 20 4f 75 74 70 75 74 20 73 68 6f 75    /* Output shou
1e1a0 6c 64 20 62 65 20 44 49 53 54 49 4e 43 54 20 2a  ld be DISTINCT *
1e1b0 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 41 6c 6c  /.#define SF_All
1e1c0 20 20 20 20 20 20 20 20 20 20 20 20 30 78 30 30              0x00
1e1d0 30 30 32 20 20 2f 2a 20 49 6e 63 6c 75 64 65 73  002  /* Includes
1e1e0 20 74 68 65 20 41 4c 4c 20 6b 65 79 77 6f 72 64   the ALL keyword
1e1f0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 52   */.#define SF_R
1e200 65 73 6f 6c 76 65 64 20 20 20 20 20 20 20 30 78  esolved       0x
1e210 30 30 30 30 34 20 20 2f 2a 20 49 64 65 6e 74 69  00004  /* Identi
1e220 66 69 65 72 73 20 68 61 76 65 20 62 65 65 6e 20  fiers have been 
1e230 72 65 73 6f 6c 76 65 64 20 2a 2f 0a 23 64 65 66  resolved */.#def
1e240 69 6e 65 20 53 46 5f 41 67 67 72 65 67 61 74 65  ine SF_Aggregate
1e250 20 20 20 20 20 20 30 78 30 30 30 30 38 20 20 2f        0x00008  /
1e260 2a 20 43 6f 6e 74 61 69 6e 73 20 61 67 67 20 66  * Contains agg f
1e270 75 6e 63 74 69 6f 6e 73 20 6f 72 20 61 20 47 52  unctions or a GR
1e280 4f 55 50 20 42 59 20 2a 2f 0a 23 64 65 66 69 6e  OUP BY */.#defin
1e290 65 20 53 46 5f 48 61 73 41 67 67 20 20 20 20 20  e SF_HasAgg     
1e2a0 20 20 20 20 30 78 30 30 30 31 30 20 20 2f 2a 20      0x00010  /* 
1e2b0 43 6f 6e 74 61 69 6e 73 20 61 67 67 72 65 67 61  Contains aggrega
1e2c0 74 65 20 66 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a  te functions */.
1e2d0 23 64 65 66 69 6e 65 20 53 46 5f 55 73 65 73 45  #define SF_UsesE
1e2e0 70 68 65 6d 65 72 61 6c 20 20 30 78 30 30 30 32  phemeral  0x0002
1e2f0 30 20 20 2f 2a 20 55 73 65 73 20 74 68 65 20 4f  0  /* Uses the O
1e300 70 65 6e 45 70 68 65 6d 65 72 61 6c 20 6f 70 63  penEphemeral opc
1e310 6f 64 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ode */.#define S
1e320 46 5f 45 78 70 61 6e 64 65 64 20 20 20 20 20 20  F_Expanded      
1e330 20 30 78 30 30 30 34 30 20 20 2f 2a 20 73 71 6c   0x00040  /* sql
1e340 69 74 65 33 53 65 6c 65 63 74 45 78 70 61 6e 64  ite3SelectExpand
1e350 28 29 20 63 61 6c 6c 65 64 20 6f 6e 20 74 68 69  () called on thi
1e360 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f  s */.#define SF_
1e370 48 61 73 54 79 70 65 49 6e 66 6f 20 20 20 20 30  HasTypeInfo    0
1e380 78 30 30 30 38 30 20 20 2f 2a 20 46 52 4f 4d 20  x00080  /* FROM 
1e390 73 75 62 71 75 65 72 69 65 73 20 68 61 76 65 20  subqueries have 
1e3a0 54 61 62 6c 65 20 6d 65 74 61 64 61 74 61 20 2a  Table metadata *
1e3b0 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 43 6f 6d  /.#define SF_Com
1e3c0 70 6f 75 6e 64 20 20 20 20 20 20 20 30 78 30 30  pound       0x00
1e3d0 31 30 30 20 20 2f 2a 20 50 61 72 74 20 6f 66 20  100  /* Part of 
1e3e0 61 20 63 6f 6d 70 6f 75 6e 64 20 71 75 65 72 79  a compound query
1e3f0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 56   */.#define SF_V
1e400 61 6c 75 65 73 20 20 20 20 20 20 20 20 20 30 78  alues         0x
1e410 30 30 32 30 30 20 20 2f 2a 20 53 79 6e 74 68 65  00200  /* Synthe
1e420 73 69 7a 65 64 20 66 72 6f 6d 20 56 41 4c 55 45  sized from VALUE
1e430 53 20 63 6c 61 75 73 65 20 2a 2f 0a 23 64 65 66  S clause */.#def
1e440 69 6e 65 20 53 46 5f 4d 75 6c 74 69 56 61 6c 75  ine SF_MultiValu
1e450 65 20 20 20 20 20 30 78 30 30 34 30 30 20 20 2f  e     0x00400  /
1e460 2a 20 53 69 6e 67 6c 65 20 56 41 4c 55 45 53 20  * Single VALUES 
1e470 74 65 72 6d 20 77 69 74 68 20 6d 75 6c 74 69 70  term with multip
1e480 6c 65 20 72 6f 77 73 20 2a 2f 0a 23 64 65 66 69  le rows */.#defi
1e490 6e 65 20 53 46 5f 4e 65 73 74 65 64 46 72 6f 6d  ne SF_NestedFrom
1e4a0 20 20 20 20 20 30 78 30 30 38 30 30 20 20 2f 2a       0x00800  /*
1e4b0 20 50 61 72 74 20 6f 66 20 61 20 70 61 72 65 6e   Part of a paren
1e4c0 74 68 65 73 69 7a 65 64 20 46 52 4f 4d 20 63 6c  thesized FROM cl
1e4d0 61 75 73 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ause */.#define 
1e4e0 53 46 5f 4d 69 6e 4d 61 78 41 67 67 20 20 20 20  SF_MinMaxAgg    
1e4f0 20 20 30 78 30 31 30 30 30 20 20 2f 2a 20 41 67    0x01000  /* Ag
1e500 67 72 65 67 61 74 65 20 63 6f 6e 74 61 69 6e 69  gregate containi
1e510 6e 67 20 6d 69 6e 28 29 20 6f 72 20 6d 61 78 28  ng min() or max(
1e520 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f  ) */.#define SF_
1e530 52 65 63 75 72 73 69 76 65 20 20 20 20 20 20 30  Recursive      0
1e540 78 30 32 30 30 30 20 20 2f 2a 20 54 68 65 20 72  x02000  /* The r
1e550 65 63 75 72 73 69 76 65 20 70 61 72 74 20 6f 66  ecursive part of
1e560 20 61 20 72 65 63 75 72 73 69 76 65 20 43 54 45   a recursive CTE
1e570 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 46   */.#define SF_F
1e580 69 78 65 64 4c 69 6d 69 74 20 20 20 20 20 30 78  ixedLimit     0x
1e590 30 34 30 30 30 20 20 2f 2a 20 6e 53 65 6c 65 63  04000  /* nSelec
1e5a0 74 52 6f 77 20 73 65 74 20 62 79 20 61 20 63 6f  tRow set by a co
1e5b0 6e 73 74 61 6e 74 20 4c 49 4d 49 54 20 2a 2f 0a  nstant LIMIT */.
1e5c0 23 64 65 66 69 6e 65 20 53 46 5f 4d 61 79 62 65  #define SF_Maybe
1e5d0 43 6f 6e 76 65 72 74 20 20 20 30 78 30 38 30 30  Convert   0x0800
1e5e0 30 20 20 2f 2a 20 4e 65 65 64 20 63 6f 6e 76 65  0  /* Need conve
1e5f0 72 74 43 6f 6d 70 6f 75 6e 64 53 65 6c 65 63 74  rtCompoundSelect
1e600 54 6f 53 75 62 71 75 65 72 79 28 29 20 2a 2f 0a  ToSubquery() */.
1e610 23 64 65 66 69 6e 65 20 53 46 5f 43 6f 6e 76 65  #define SF_Conve
1e620 72 74 65 64 20 20 20 20 20 20 30 78 31 30 30 30  rted      0x1000
1e630 30 20 20 2f 2a 20 42 79 20 63 6f 6e 76 65 72 74  0  /* By convert
1e640 43 6f 6d 70 6f 75 6e 64 53 65 6c 65 63 74 54 6f  CompoundSelectTo
1e650 53 75 62 71 75 65 72 79 28 29 20 2a 2f 0a 23 64  Subquery() */.#d
1e660 65 66 69 6e 65 20 53 46 5f 49 6e 63 6c 75 64 65  efine SF_Include
1e670 48 69 64 64 65 6e 20 20 30 78 32 30 30 30 30 20  Hidden  0x20000 
1e680 20 2f 2a 20 49 6e 63 6c 75 64 65 20 68 69 64 64   /* Include hidd
1e690 65 6e 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 6f 75  en columns in ou
1e6a0 74 70 75 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20  tput */.#define 
1e6b0 53 46 5f 43 6f 6d 70 6c 65 78 52 65 73 75 6c 74  SF_ComplexResult
1e6c0 20 20 30 78 34 30 30 30 30 20 20 2f 2a 20 52 65    0x40000  /* Re
1e6d0 73 75 6c 74 20 63 6f 6e 74 61 69 6e 73 20 73 75  sult contains su
1e6e0 62 71 75 65 72 79 20 6f 72 20 66 75 6e 63 74 69  bquery or functi
1e6f0 6f 6e 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  on */../*.** The
1e700 20 72 65 73 75 6c 74 73 20 6f 66 20 61 20 53 45   results of a SE
1e710 4c 45 43 54 20 63 61 6e 20 62 65 20 64 69 73 74  LECT can be dist
1e720 72 69 62 75 74 65 64 20 69 6e 20 73 65 76 65 72  ributed in sever
1e730 61 6c 20 77 61 79 73 2c 20 61 73 20 64 65 66 69  al ways, as defi
1e740 6e 65 64 0a 2a 2a 20 62 79 20 6f 6e 65 20 6f 66  ned.** by one of
1e750 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d   the following m
1e760 61 63 72 6f 73 2e 20 20 54 68 65 20 22 53 52 54  acros.  The "SRT
1e770 22 20 70 72 65 66 69 78 20 6d 65 61 6e 73 20 22  " prefix means "
1e780 53 45 4c 45 43 54 20 52 65 73 75 6c 74 0a 2a 2a  SELECT Result.**
1e790 20 54 79 70 65 22 2e 0a 2a 2a 0a 2a 2a 20 20 20   Type"..**.**   
1e7a0 20 20 53 52 54 5f 55 6e 69 6f 6e 20 20 20 20 20    SRT_Union     
1e7b0 20 20 53 74 6f 72 65 20 72 65 73 75 6c 74 73 20    Store results 
1e7c0 61 73 20 61 20 6b 65 79 20 69 6e 20 61 20 74 65  as a key in a te
1e7d0 6d 70 6f 72 61 72 79 20 69 6e 64 65 78 0a 2a 2a  mporary index.**
1e7e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e7f0 20 20 20 20 20 69 64 65 6e 74 69 66 69 65 64 20       identified 
1e800 62 79 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72  by pDest->iSDPar
1e810 6d 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54  m..**.**     SRT
1e820 5f 45 78 63 65 70 74 20 20 20 20 20 20 52 65 6d  _Except      Rem
1e830 6f 76 65 20 72 65 73 75 6c 74 73 20 66 72 6f 6d  ove results from
1e840 20 74 68 65 20 74 65 6d 70 6f 72 61 72 79 20 69   the temporary i
1e850 6e 64 65 78 20 70 44 65 73 74 2d 3e 69 53 44 50  ndex pDest->iSDP
1e860 61 72 6d 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53  arm..**.**     S
1e870 52 54 5f 45 78 69 73 74 73 20 20 20 20 20 20 53  RT_Exists      S
1e880 74 6f 72 65 20 61 20 31 20 69 6e 20 6d 65 6d 6f  tore a 1 in memo
1e890 72 79 20 63 65 6c 6c 20 70 44 65 73 74 2d 3e 69  ry cell pDest->i
1e8a0 53 44 50 61 72 6d 20 69 66 20 74 68 65 20 72 65  SDParm if the re
1e8b0 73 75 6c 74 0a 2a 2a 20 20 20 20 20 20 20 20 20  sult.**         
1e8c0 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20              set 
1e8d0 69 73 20 6e 6f 74 20 65 6d 70 74 79 2e 0a 2a 2a  is not empty..**
1e8e0 0a 2a 2a 20 20 20 20 20 53 52 54 5f 44 69 73 63  .**     SRT_Disc
1e8f0 61 72 64 20 20 20 20 20 54 68 72 6f 77 20 74 68  ard     Throw th
1e900 65 20 72 65 73 75 6c 74 73 20 61 77 61 79 2e 20  e results away. 
1e910 20 54 68 69 73 20 69 73 20 75 73 65 64 20 62 79   This is used by
1e920 20 53 45 4c 45 43 54 0a 2a 2a 20 20 20 20 20 20   SELECT.**      
1e930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
1e940 74 61 74 65 6d 65 6e 74 73 20 77 69 74 68 69 6e  tatements within
1e950 20 74 72 69 67 67 65 72 73 20 77 68 6f 73 65 20   triggers whose 
1e960 6f 6e 6c 79 20 70 75 72 70 6f 73 65 20 69 73 0a  only purpose is.
1e970 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
1e980 20 20 20 20 20 20 20 74 68 65 20 73 69 64 65 2d         the side-
1e990 65 66 66 65 63 74 73 20 6f 66 20 66 75 6e 63 74  effects of funct
1e9a0 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 41 6c 6c 20  ions..**.** All 
1e9b0 6f 66 20 74 68 65 20 61 62 6f 76 65 20 61 72 65  of the above are
1e9c0 20 66 72 65 65 20 74 6f 20 69 67 6e 6f 72 65 20   free to ignore 
1e9d0 74 68 65 69 72 20 4f 52 44 45 52 20 42 59 20 63  their ORDER BY c
1e9e0 6c 61 75 73 65 2e 20 54 68 6f 73 65 20 74 68 61  lause. Those tha
1e9f0 74 0a 2a 2a 20 66 6f 6c 6c 6f 77 20 6d 75 73 74  t.** follow must
1ea00 20 68 6f 6e 6f 72 20 74 68 65 20 4f 52 44 45 52   honor the ORDER
1ea10 20 42 59 20 63 6c 61 75 73 65 2e 0a 2a 2a 0a 2a   BY clause..**.*
1ea20 2a 20 20 20 20 20 53 52 54 5f 4f 75 74 70 75 74  *     SRT_Output
1ea30 20 20 20 20 20 20 47 65 6e 65 72 61 74 65 20 61        Generate a
1ea40 20 72 6f 77 20 6f 66 20 6f 75 74 70 75 74 20 28   row of output (
1ea50 75 73 69 6e 67 20 74 68 65 20 4f 50 5f 52 65 73  using the OP_Res
1ea60 75 6c 74 52 6f 77 0a 2a 2a 20 20 20 20 20 20 20  ultRow.**       
1ea70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6f 70                op
1ea80 63 6f 64 65 29 20 66 6f 72 20 65 61 63 68 20 72  code) for each r
1ea90 6f 77 20 69 6e 20 74 68 65 20 72 65 73 75 6c 74  ow in the result
1eaa0 20 73 65 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20   set..**.**     
1eab0 53 52 54 5f 4d 65 6d 20 20 20 20 20 20 20 20 20  SRT_Mem         
1eac0 4f 6e 6c 79 20 76 61 6c 69 64 20 69 66 20 74 68  Only valid if th
1ead0 65 20 72 65 73 75 6c 74 20 69 73 20 61 20 73 69  e result is a si
1eae0 6e 67 6c 65 20 63 6f 6c 75 6d 6e 2e 0a 2a 2a 20  ngle column..** 
1eaf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1eb00 20 20 20 20 53 74 6f 72 65 20 74 68 65 20 66 69      Store the fi
1eb10 72 73 74 20 63 6f 6c 75 6d 6e 20 6f 66 20 74 68  rst column of th
1eb20 65 20 66 69 72 73 74 20 72 65 73 75 6c 74 20 72  e first result r
1eb30 6f 77 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  ow.**           
1eb40 20 20 20 20 20 20 20 20 20 20 69 6e 20 72 65 67            in reg
1eb50 69 73 74 65 72 20 70 44 65 73 74 2d 3e 69 53 44  ister pDest->iSD
1eb60 50 61 72 6d 20 74 68 65 6e 20 61 62 61 6e 64 6f  Parm then abando
1eb70 6e 20 74 68 65 20 72 65 73 74 0a 2a 2a 20 20 20  n the rest.**   
1eb80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1eb90 20 20 6f 66 20 74 68 65 20 71 75 65 72 79 2e 20    of the query. 
1eba0 20 54 68 69 73 20 64 65 73 74 69 6e 61 74 69 6f   This destinatio
1ebb0 6e 20 69 6d 70 6c 69 65 73 20 22 4c 49 4d 49 54  n implies "LIMIT
1ebc0 20 31 22 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53   1"..**.**     S
1ebd0 52 54 5f 53 65 74 20 20 20 20 20 20 20 20 20 54  RT_Set         T
1ebe0 68 65 20 72 65 73 75 6c 74 20 6d 75 73 74 20 62  he result must b
1ebf0 65 20 61 20 73 69 6e 67 6c 65 20 63 6f 6c 75 6d  e a single colum
1ec00 6e 2e 20 20 53 74 6f 72 65 20 65 61 63 68 0a 2a  n.  Store each.*
1ec10 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
1ec20 20 20 20 20 20 20 72 6f 77 20 6f 66 20 72 65 73        row of res
1ec30 75 6c 74 20 61 73 20 74 68 65 20 6b 65 79 20 69  ult as the key i
1ec40 6e 20 74 61 62 6c 65 20 70 44 65 73 74 2d 3e 69  n table pDest->i
1ec50 53 44 50 61 72 6d 2e 0a 2a 2a 20 20 20 20 20 20  SDParm..**      
1ec60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 41                 A
1ec70 70 70 6c 79 20 74 68 65 20 61 66 66 69 6e 69 74  pply the affinit
1ec80 79 20 70 44 65 73 74 2d 3e 61 66 66 53 64 73 74  y pDest->affSdst
1ec90 20 62 65 66 6f 72 65 20 73 74 6f 72 69 6e 67 0a   before storing.
1eca0 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
1ecb0 20 20 20 20 20 20 20 72 65 73 75 6c 74 73 2e 20         results. 
1ecc0 20 55 73 65 64 20 74 6f 20 69 6d 70 6c 65 6d 65   Used to impleme
1ecd0 6e 74 20 22 49 4e 20 28 53 45 4c 45 43 54 20 2e  nt "IN (SELECT .
1ece0 2e 2e 29 22 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20  ..)"..**.**     
1ecf0 53 52 54 5f 45 70 68 65 6d 54 61 62 20 20 20 20  SRT_EphemTab    
1ed00 43 72 65 61 74 65 20 61 6e 20 74 65 6d 70 6f 72  Create an tempor
1ed10 61 72 79 20 74 61 62 6c 65 20 70 44 65 73 74 2d  ary table pDest-
1ed20 3e 69 53 44 50 61 72 6d 20 61 6e 64 20 73 74 6f  >iSDParm and sto
1ed30 72 65 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  re.**           
1ed40 20 20 20 20 20 20 20 20 20 20 74 68 65 20 72 65            the re
1ed50 73 75 6c 74 20 74 68 65 72 65 2e 20 54 68 65 20  sult there. The 
1ed60 63 75 72 73 6f 72 20 69 73 20 6c 65 66 74 20 6f  cursor is left o
1ed70 70 65 6e 20 61 66 74 65 72 0a 2a 2a 20 20 20 20  pen after.**    
1ed80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ed90 20 72 65 74 75 72 6e 69 6e 67 2e 20 20 54 68 69   returning.  Thi
1eda0 73 20 69 73 20 6c 69 6b 65 20 53 52 54 5f 54 61  s is like SRT_Ta
1edb0 62 6c 65 20 65 78 63 65 70 74 20 74 68 61 74 0a  ble except that.
1edc0 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
1edd0 20 20 20 20 20 20 20 74 68 69 73 20 64 65 73 74         this dest
1ede0 69 6e 61 74 69 6f 6e 20 75 73 65 73 20 4f 50 5f  ination uses OP_
1edf0 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c 20 74 6f  OpenEphemeral to
1ee00 20 63 72 65 61 74 65 0a 2a 2a 20 20 20 20 20 20   create.**      
1ee10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
1ee20 68 65 20 74 61 62 6c 65 20 66 69 72 73 74 2e 0a  he table first..
1ee30 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 43 6f  **.**     SRT_Co
1ee40 72 6f 75 74 69 6e 65 20 20 20 47 65 6e 65 72 61  routine   Genera
1ee50 74 65 20 61 20 63 6f 2d 72 6f 75 74 69 6e 65 20  te a co-routine 
1ee60 74 68 61 74 20 72 65 74 75 72 6e 73 20 61 20 6e  that returns a n
1ee70 65 77 20 72 6f 77 20 6f 66 0a 2a 2a 20 20 20 20  ew row of.**    
1ee80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ee90 20 72 65 73 75 6c 74 73 20 65 61 63 68 20 74 69   results each ti
1eea0 6d 65 20 69 74 20 69 73 20 69 6e 76 6f 6b 65 64  me it is invoked
1eeb0 2e 20 20 54 68 65 20 65 6e 74 72 79 20 70 6f 69  .  The entry poi
1eec0 6e 74 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  nt.**           
1eed0 20 20 20 20 20 20 20 20 20 20 6f 66 20 74 68 65            of the
1eee0 20 63 6f 2d 72 6f 75 74 69 6e 65 20 69 73 20 73   co-routine is s
1eef0 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74 65  tored in registe
1ef00 72 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d  r pDest->iSDParm
1ef10 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
1ef20 20 20 20 20 20 20 20 20 61 6e 64 20 74 68 65 20          and the 
1ef30 72 65 73 75 6c 74 20 72 6f 77 20 69 73 20 73 74  result row is st
1ef40 6f 72 65 64 20 69 6e 20 70 44 65 73 74 2d 3e 6e  ored in pDest->n
1ef50 44 65 73 74 20 72 65 67 69 73 74 65 72 73 0a 2a  Dest registers.*
1ef60 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
1ef70 20 20 20 20 20 20 73 74 61 72 74 69 6e 67 20 77        starting w
1ef80 69 74 68 20 70 44 65 73 74 2d 3e 69 53 64 73 74  ith pDest->iSdst
1ef90 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f  ..**.**     SRT_
1efa0 54 61 62 6c 65 20 20 20 20 20 20 20 53 74 6f 72  Table       Stor
1efb0 65 20 72 65 73 75 6c 74 73 20 69 6e 20 74 65 6d  e results in tem
1efc0 70 6f 72 61 72 79 20 74 61 62 6c 65 20 70 44 65  porary table pDe
1efd0 73 74 2d 3e 69 53 44 50 61 72 6d 2e 0a 2a 2a 20  st->iSDParm..** 
1efe0 20 20 20 20 53 52 54 5f 46 69 66 6f 20 20 20 20      SRT_Fifo    
1eff0 20 20 20 20 54 68 69 73 20 69 73 20 6c 69 6b 65      This is like
1f000 20 53 52 54 5f 45 70 68 65 6d 54 61 62 20 65 78   SRT_EphemTab ex
1f010 63 65 70 74 20 74 68 61 74 20 74 68 65 20 74 61  cept that the ta
1f020 62 6c 65 0a 2a 2a 20 20 20 20 20 20 20 20 20 20  ble.**          
1f030 20 20 20 20 20 20 20 20 20 20 20 69 73 20 61 73             is as
1f040 73 75 6d 65 64 20 74 6f 20 61 6c 72 65 61 64 79  sumed to already
1f050 20 62 65 20 6f 70 65 6e 2e 20 20 53 52 54 5f 46   be open.  SRT_F
1f060 69 66 6f 20 68 61 73 0a 2a 2a 20 20 20 20 20 20  ifo has.**      
1f070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
1f080 68 65 20 61 64 64 69 74 69 6f 6e 61 6c 20 70 72  he additional pr
1f090 6f 70 65 72 74 79 20 6f 66 20 62 65 69 6e 67 20  operty of being 
1f0a0 61 62 6c 65 20 74 6f 20 69 67 6e 6f 72 65 0a 2a  able to ignore.*
1f0b0 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
1f0c0 20 20 20 20 20 20 74 68 65 20 4f 52 44 45 52 20        the ORDER 
1f0d0 42 59 20 63 6c 61 75 73 65 2e 0a 2a 2a 0a 2a 2a  BY clause..**.**
1f0e0 20 20 20 20 20 53 52 54 5f 44 69 73 74 46 69 66       SRT_DistFif
1f0f0 6f 20 20 20 20 53 74 6f 72 65 20 72 65 73 75 6c  o    Store resul
1f100 74 73 20 69 6e 20 61 20 74 65 6d 70 6f 72 61 72  ts in a temporar
1f110 79 20 74 61 62 6c 65 20 70 44 65 73 74 2d 3e 69  y table pDest->i
1f120 53 44 50 61 72 6d 2e 0a 2a 2a 20 20 20 20 20 20  SDParm..**      
1f130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 42                 B
1f140 75 74 20 61 6c 73 6f 20 75 73 65 20 74 65 6d 70  ut also use temp
1f150 6f 72 61 72 79 20 74 61 62 6c 65 20 70 44 65 73  orary table pDes
1f160 74 2d 3e 69 53 44 50 61 72 6d 2b 31 20 61 73 0a  t->iSDParm+1 as.
1f170 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
1f180 20 20 20 20 20 20 20 61 20 72 65 63 6f 72 64 20         a record 
1f190 6f 66 20 61 6c 6c 20 70 72 69 6f 72 20 72 65 73  of all prior res
1f1a0 75 6c 74 73 20 61 6e 64 20 69 67 6e 6f 72 65 20  ults and ignore 
1f1b0 61 6e 79 20 64 75 70 6c 69 63 61 74 65 0a 2a 2a  any duplicate.**
1f1c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f1d0 20 20 20 20 20 72 6f 77 73 2e 20 20 4e 61 6d 65       rows.  Name
1f1e0 20 6d 65 61 6e 73 3a 20 20 22 44 69 73 74 69 6e   means:  "Distin
1f1f0 63 74 20 46 69 66 6f 22 2e 0a 2a 2a 0a 2a 2a 20  ct Fifo"..**.** 
1f200 20 20 20 20 53 52 54 5f 51 75 65 75 65 20 20 20      SRT_Queue   
1f210 20 20 20 20 53 74 6f 72 65 20 72 65 73 75 6c 74      Store result
1f220 73 20 69 6e 20 70 72 69 6f 72 69 74 79 20 71 75  s in priority qu
1f230 65 75 65 20 70 44 65 73 74 2d 3e 69 53 44 50 61  eue pDest->iSDPa
1f240 72 6d 20 28 72 65 61 6c 6c 79 0a 2a 2a 20 20 20  rm (really.**   
1f250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f260 20 20 61 6e 20 69 6e 64 65 78 29 2e 20 20 41 70    an index).  Ap
1f270 70 65 6e 64 20 61 20 73 65 71 75 65 6e 63 65 20  pend a sequence 
1f280 6e 75 6d 62 65 72 20 73 6f 20 74 68 61 74 20 61  number so that a
1f290 6c 6c 20 65 6e 74 72 69 65 73 0a 2a 2a 20 20 20  ll entries.**   
1f2a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f2b0 20 20 61 72 65 20 64 69 73 74 69 6e 63 74 2e 0a    are distinct..
1f2c0 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 44 69  **.**     SRT_Di
1f2d0 73 74 51 75 65 75 65 20 20 20 53 74 6f 72 65 20  stQueue   Store 
1f2e0 72 65 73 75 6c 74 73 20 69 6e 20 70 72 69 6f 72  results in prior
1f2f0 69 74 79 20 71 75 65 75 65 20 70 44 65 73 74 2d  ity queue pDest-
1f300 3e 69 53 44 50 61 72 6d 20 6f 6e 6c 79 20 69 66  >iSDParm only if
1f310 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
1f320 20 20 20 20 20 20 20 20 74 68 65 20 73 61 6d 65          the same
1f330 20 72 65 63 6f 72 64 20 68 61 73 20 6e 65 76 65   record has neve
1f340 72 20 62 65 65 6e 20 73 74 6f 72 65 64 20 62 65  r been stored be
1f350 66 6f 72 65 2e 20 20 54 68 65 0a 2a 2a 20 20 20  fore.  The.**   
1f360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f370 20 20 69 6e 64 65 78 20 61 74 20 70 44 65 73 74    index at pDest
1f380 2d 3e 69 53 44 50 61 72 6d 2b 31 20 68 6f 6c 64  ->iSDParm+1 hold
1f390 20 61 6c 6c 20 70 72 69 6f 72 20 73 74 6f 72 65   all prior store
1f3a0 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52  s..*/.#define SR
1f3b0 54 5f 55 6e 69 6f 6e 20 20 20 20 20 20 20 20 31  T_Union        1
1f3c0 20 20 2f 2a 20 53 74 6f 72 65 20 72 65 73 75 6c    /* Store resul
1f3d0 74 20 61 73 20 6b 65 79 73 20 69 6e 20 61 6e 20  t as keys in an 
1f3e0 69 6e 64 65 78 20 2a 2f 0a 23 64 65 66 69 6e 65  index */.#define
1f3f0 20 53 52 54 5f 45 78 63 65 70 74 20 20 20 20 20   SRT_Except     
1f400 20 20 32 20 20 2f 2a 20 52 65 6d 6f 76 65 20 72    2  /* Remove r
1f410 65 73 75 6c 74 20 66 72 6f 6d 20 61 20 55 4e 49  esult from a UNI
1f420 4f 4e 20 69 6e 64 65 78 20 2a 2f 0a 23 64 65 66  ON index */.#def
1f430 69 6e 65 20 53 52 54 5f 45 78 69 73 74 73 20 20  ine SRT_Exists  
1f440 20 20 20 20 20 33 20 20 2f 2a 20 53 74 6f 72 65       3  /* Store
1f450 20 31 20 69 66 20 74 68 65 20 72 65 73 75 6c 74   1 if the result
1f460 20 69 73 20 6e 6f 74 20 65 6d 70 74 79 20 2a 2f   is not empty */
1f470 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 44 69 73  .#define SRT_Dis
1f480 63 61 72 64 20 20 20 20 20 20 34 20 20 2f 2a 20  card      4  /* 
1f490 44 6f 20 6e 6f 74 20 73 61 76 65 20 74 68 65 20  Do not save the 
1f4a0 72 65 73 75 6c 74 73 20 61 6e 79 77 68 65 72 65  results anywhere
1f4b0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f   */.#define SRT_
1f4c0 46 69 66 6f 20 20 20 20 20 20 20 20 20 35 20 20  Fifo         5  
1f4d0 2f 2a 20 53 74 6f 72 65 20 72 65 73 75 6c 74 20  /* Store result 
1f4e0 61 73 20 64 61 74 61 20 77 69 74 68 20 61 6e 20  as data with an 
1f4f0 61 75 74 6f 6d 61 74 69 63 20 72 6f 77 69 64 20  automatic rowid 
1f500 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 44  */.#define SRT_D
1f510 69 73 74 46 69 66 6f 20 20 20 20 20 36 20 20 2f  istFifo     6  /
1f520 2a 20 4c 69 6b 65 20 53 52 54 5f 46 69 66 6f 2c  * Like SRT_Fifo,
1f530 20 62 75 74 20 75 6e 69 71 75 65 20 72 65 73 75   but unique resu
1f540 6c 74 73 20 6f 6e 6c 79 20 2a 2f 0a 23 64 65 66  lts only */.#def
1f550 69 6e 65 20 53 52 54 5f 51 75 65 75 65 20 20 20  ine SRT_Queue   
1f560 20 20 20 20 20 37 20 20 2f 2a 20 53 74 6f 72 65       7  /* Store
1f570 20 72 65 73 75 6c 74 20 69 6e 20 61 6e 20 71 75   result in an qu
1f580 65 75 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  eue */.#define S
1f590 52 54 5f 44 69 73 74 51 75 65 75 65 20 20 20 20  RT_DistQueue    
1f5a0 38 20 20 2f 2a 20 4c 69 6b 65 20 53 52 54 5f 51  8  /* Like SRT_Q
1f5b0 75 65 75 65 2c 20 62 75 74 20 75 6e 69 71 75 65  ueue, but unique
1f5c0 20 72 65 73 75 6c 74 73 20 6f 6e 6c 79 20 2a 2f   results only */
1f5d0 0a 0a 2f 2a 20 54 68 65 20 4f 52 44 45 52 20 42  ../* The ORDER B
1f5e0 59 20 63 6c 61 75 73 65 20 69 73 20 69 67 6e 6f  Y clause is igno
1f5f0 72 65 64 20 66 6f 72 20 61 6c 6c 20 6f 66 20 74  red for all of t
1f600 68 65 20 61 62 6f 76 65 20 2a 2f 0a 23 64 65 66  he above */.#def
1f610 69 6e 65 20 49 67 6e 6f 72 61 62 6c 65 4f 72 64  ine IgnorableOrd
1f620 65 72 62 79 28 58 29 20 28 28 58 2d 3e 65 44 65  erby(X) ((X->eDe
1f630 73 74 29 3c 3d 53 52 54 5f 44 69 73 74 51 75 65  st)<=SRT_DistQue
1f640 75 65 29 0a 0a 23 64 65 66 69 6e 65 20 53 52 54  ue)..#define SRT
1f650 5f 4f 75 74 70 75 74 20 20 20 20 20 20 20 39 20  _Output       9 
1f660 20 2f 2a 20 4f 75 74 70 75 74 20 65 61 63 68 20   /* Output each 
1f670 72 6f 77 20 6f 66 20 72 65 73 75 6c 74 20 2a 2f  row of result */
1f680 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 4d 65 6d  .#define SRT_Mem
1f690 20 20 20 20 20 20 20 20 20 31 30 20 20 2f 2a 20           10  /* 
1f6a0 53 74 6f 72 65 20 72 65 73 75 6c 74 20 69 6e 20  Store result in 
1f6b0 61 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 2a 2f  a memory cell */
1f6c0 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 53 65 74  .#define SRT_Set
1f6d0 20 20 20 20 20 20 20 20 20 31 31 20 20 2f 2a 20           11  /* 
1f6e0 53 74 6f 72 65 20 72 65 73 75 6c 74 73 20 61 73  Store results as
1f6f0 20 6b 65 79 73 20 69 6e 20 61 6e 20 69 6e 64 65   keys in an inde
1f700 78 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54  x */.#define SRT
1f710 5f 45 70 68 65 6d 54 61 62 20 20 20 20 31 32 20  _EphemTab    12 
1f720 20 2f 2a 20 43 72 65 61 74 65 20 74 72 61 6e 73   /* Create trans
1f730 69 65 6e 74 20 74 61 62 20 61 6e 64 20 73 74 6f  ient tab and sto
1f740 72 65 20 6c 69 6b 65 20 53 52 54 5f 54 61 62 6c  re like SRT_Tabl
1f750 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54  e */.#define SRT
1f760 5f 43 6f 72 6f 75 74 69 6e 65 20 20 20 31 33 20  _Coroutine   13 
1f770 20 2f 2a 20 47 65 6e 65 72 61 74 65 20 61 20 73   /* Generate a s
1f780 69 6e 67 6c 65 20 72 6f 77 20 6f 66 20 72 65 73  ingle row of res
1f790 75 6c 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ult */.#define S
1f7a0 52 54 5f 54 61 62 6c 65 20 20 20 20 20 20 20 31  RT_Table       1
1f7b0 34 20 20 2f 2a 20 53 74 6f 72 65 20 72 65 73 75  4  /* Store resu
1f7c0 6c 74 20 61 73 20 64 61 74 61 20 77 69 74 68 20  lt as data with 
1f7d0 61 6e 20 61 75 74 6f 6d 61 74 69 63 20 72 6f 77  an automatic row
1f7e0 69 64 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20  id */../*.** An 
1f7f0 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73  instance of this
1f800 20 6f 62 6a 65 63 74 20 64 65 73 63 72 69 62 65   object describe
1f810 73 20 77 68 65 72 65 20 74 6f 20 70 75 74 20 6f  s where to put o
1f820 66 20 74 68 65 20 72 65 73 75 6c 74 73 20 6f 66  f the results of
1f830 0a 2a 2a 20 61 20 53 45 4c 45 43 54 20 73 74 61  .** a SELECT sta
1f840 74 65 6d 65 6e 74 2e 0a 2a 2f 0a 73 74 72 75 63  tement..*/.struc
1f850 74 20 53 65 6c 65 63 74 44 65 73 74 20 7b 0a 20  t SelectDest {. 
1f860 20 75 38 20 65 44 65 73 74 3b 20 20 20 20 20 20   u8 eDest;      
1f870 20 20 20 20 20 20 2f 2a 20 48 6f 77 20 74 6f 20        /* How to 
1f880 64 69 73 70 6f 73 65 20 6f 66 20 74 68 65 20 72  dispose of the r
1f890 65 73 75 6c 74 73 2e 20 20 4f 6e 20 6f 66 20 53  esults.  On of S
1f8a0 52 54 5f 2a 20 61 62 6f 76 65 2e 20 2a 2f 0a 20  RT_* above. */. 
1f8b0 20 69 6e 74 20 69 53 44 50 61 72 6d 3b 20 20 20   int iSDParm;   
1f8c0 20 20 20 20 20 20 2f 2a 20 41 20 70 61 72 61 6d        /* A param
1f8d0 65 74 65 72 20 75 73 65 64 20 62 79 20 74 68 65  eter used by the
1f8e0 20 65 44 65 73 74 20 64 69 73 70 6f 73 61 6c 20   eDest disposal 
1f8f0 6d 65 74 68 6f 64 20 2a 2f 0a 20 20 69 6e 74 20  method */.  int 
1f900 69 53 64 73 74 3b 20 20 20 20 20 20 20 20 20 20  iSdst;          
1f910 20 2f 2a 20 42 61 73 65 20 72 65 67 69 73 74 65   /* Base registe
1f920 72 20 77 68 65 72 65 20 72 65 73 75 6c 74 73 20  r where results 
1f930 61 72 65 20 77 72 69 74 74 65 6e 20 2a 2f 0a 20  are written */. 
1f940 20 69 6e 74 20 6e 53 64 73 74 3b 20 20 20 20 20   int nSdst;     
1f950 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
1f960 6f 66 20 72 65 67 69 73 74 65 72 73 20 61 6c 6c  of registers all
1f970 6f 63 61 74 65 64 20 2a 2f 0a 20 20 63 68 61 72  ocated */.  char
1f980 20 2a 7a 41 66 66 53 64 73 74 3b 20 20 20 20 20   *zAffSdst;     
1f990 20 2f 2a 20 41 66 66 69 6e 69 74 79 20 75 73 65   /* Affinity use
1f9a0 64 20 77 68 65 6e 20 65 44 65 73 74 3d 3d 53 52  d when eDest==SR
1f9b0 54 5f 53 65 74 20 2a 2f 0a 20 20 45 78 70 72 4c  T_Set */.  ExprL
1f9c0 69 73 74 20 2a 70 4f 72 64 65 72 42 79 3b 20 20  ist *pOrderBy;  
1f9d0 2f 2a 20 4b 65 79 20 63 6f 6c 75 6d 6e 73 20 66  /* Key columns f
1f9e0 6f 72 20 53 52 54 5f 51 75 65 75 65 20 61 6e 64  or SRT_Queue and
1f9f0 20 53 52 54 5f 44 69 73 74 51 75 65 75 65 20 2a   SRT_DistQueue *
1fa00 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 44 75 72 69  /.};../*.** Duri
1fa10 6e 67 20 63 6f 64 65 20 67 65 6e 65 72 61 74 69  ng code generati
1fa20 6f 6e 20 6f 66 20 73 74 61 74 65 6d 65 6e 74 73  on of statements
1fa30 20 74 68 61 74 20 64 6f 20 69 6e 73 65 72 74 73   that do inserts
1fa40 20 69 6e 74 6f 20 41 55 54 4f 49 4e 43 52 45 4d   into AUTOINCREM
1fa50 45 4e 54 0a 2a 2a 20 74 61 62 6c 65 73 2c 20 74  ENT.** tables, t
1fa60 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e 66  he following inf
1fa70 6f 72 6d 61 74 69 6f 6e 20 69 73 20 61 74 74 61  ormation is atta
1fa80 63 68 65 64 20 74 6f 20 74 68 65 20 54 61 62 6c  ched to the Tabl
1fa90 65 2e 75 2e 61 75 74 6f 49 6e 63 2e 70 0a 2a 2a  e.u.autoInc.p.**
1faa0 20 70 6f 69 6e 74 65 72 20 6f 66 20 65 61 63 68   pointer of each
1fab0 20 61 75 74 6f 69 6e 63 72 65 6d 65 6e 74 20 74   autoincrement t
1fac0 61 62 6c 65 20 74 6f 20 72 65 63 6f 72 64 20 73  able to record s
1fad0 6f 6d 65 20 73 69 64 65 20 69 6e 66 6f 72 6d 61  ome side informa
1fae0 74 69 6f 6e 20 74 68 61 74 0a 2a 2a 20 74 68 65  tion that.** the
1faf0 20 63 6f 64 65 20 67 65 6e 65 72 61 74 6f 72 20   code generator 
1fb00 6e 65 65 64 73 2e 20 20 57 65 20 68 61 76 65 20  needs.  We have 
1fb10 74 6f 20 6b 65 65 70 20 70 65 72 2d 74 61 62 6c  to keep per-tabl
1fb20 65 20 61 75 74 6f 69 6e 63 72 65 6d 65 6e 74 0a  e autoincrement.
1fb30 2a 2a 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 69  ** information i
1fb40 6e 20 63 61 73 65 20 69 6e 73 65 72 74 73 20 61  n case inserts a
1fb50 72 65 20 64 6f 6e 65 20 77 69 74 68 69 6e 20 74  re done within t
1fb60 72 69 67 67 65 72 73 2e 20 20 54 72 69 67 67 65  riggers.  Trigge
1fb70 72 73 20 64 6f 20 6e 6f 74 0a 2a 2a 20 6e 6f 72  rs do not.** nor
1fb80 6d 61 6c 6c 79 20 63 6f 6f 72 64 69 6e 61 74 65  mally coordinate
1fb90 20 74 68 65 69 72 20 61 63 74 69 76 69 74 69 65   their activitie
1fba0 73 2c 20 62 75 74 20 77 65 20 64 6f 20 6e 65 65  s, but we do nee
1fbb0 64 20 74 6f 20 63 6f 6f 72 64 69 6e 61 74 65 20  d to coordinate 
1fbc0 74 68 65 0a 2a 2a 20 6c 6f 61 64 69 6e 67 20 61  the.** loading a
1fbd0 6e 64 20 73 61 76 69 6e 67 20 6f 66 20 61 75 74  nd saving of aut
1fbe0 6f 69 6e 63 72 65 6d 65 6e 74 20 69 6e 66 6f 72  oincrement infor
1fbf0 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63  mation..*/.struc
1fc00 74 20 41 75 74 6f 69 6e 63 49 6e 66 6f 20 7b 0a  t AutoincInfo {.
1fc10 20 20 41 75 74 6f 69 6e 63 49 6e 66 6f 20 2a 70    AutoincInfo *p
1fc20 4e 65 78 74 3b 20 20 20 2f 2a 20 4e 65 78 74 20  Next;   /* Next 
1fc30 69 6e 66 6f 20 62 6c 6f 63 6b 20 69 6e 20 61 20  info block in a 
1fc40 6c 69 73 74 20 6f 66 20 74 68 65 6d 20 61 6c 6c  list of them all
1fc50 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70 54 61   */.  Table *pTa
1fc60 62 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54  b;          /* T
1fc70 61 62 6c 65 20 74 68 69 73 20 69 6e 66 6f 20 62  able this info b
1fc80 6c 6f 63 6b 20 72 65 66 65 72 73 20 74 6f 20 2a  lock refers to *
1fc90 2f 0a 20 20 69 6e 74 20 69 44 62 3b 20 20 20 20  /.  int iDb;    
1fca0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 64            /* Ind
1fcb0 65 78 20 69 6e 20 73 71 6c 69 74 65 33 2e 61 44  ex in sqlite3.aD
1fcc0 62 5b 5d 20 6f 66 20 64 61 74 61 62 61 73 65 20  b[] of database 
1fcd0 68 6f 6c 64 69 6e 67 20 70 54 61 62 20 2a 2f 0a  holding pTab */.
1fce0 20 20 69 6e 74 20 72 65 67 43 74 72 3b 20 20 20    int regCtr;   
1fcf0 20 20 20 20 20 20 20 20 2f 2a 20 4d 65 6d 6f 72          /* Memor
1fd00 79 20 72 65 67 69 73 74 65 72 20 68 6f 6c 64 69  y register holdi
1fd10 6e 67 20 74 68 65 20 72 6f 77 69 64 20 63 6f 75  ng the rowid cou
1fd20 6e 74 65 72 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  nter */.};../*.*
1fd30 2a 20 41 74 20 6c 65 61 73 74 20 6f 6e 65 20 69  * At least one i
1fd40 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66  nstance of the f
1fd50 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75  ollowing structu
1fd60 72 65 20 69 73 20 63 72 65 61 74 65 64 20 66 6f  re is created fo
1fd70 72 20 65 61 63 68 0a 2a 2a 20 74 72 69 67 67 65  r each.** trigge
1fd80 72 20 74 68 61 74 20 6d 61 79 20 62 65 20 66 69  r that may be fi
1fd90 72 65 64 20 77 68 69 6c 65 20 70 61 72 73 69 6e  red while parsin
1fda0 67 20 61 6e 20 49 4e 53 45 52 54 2c 20 55 50 44  g an INSERT, UPD
1fdb0 41 54 45 20 6f 72 20 44 45 4c 45 54 45 0a 2a 2a  ATE or DELETE.**
1fdc0 20 73 74 61 74 65 6d 65 6e 74 2e 20 41 6c 6c 20   statement. All 
1fdd0 73 75 63 68 20 6f 62 6a 65 63 74 73 20 61 72 65  such objects are
1fde0 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20 6c   stored in the l
1fdf0 69 6e 6b 65 64 20 6c 69 73 74 20 68 65 61 64 65  inked list heade
1fe00 64 20 61 74 0a 2a 2a 20 50 61 72 73 65 2e 70 54  d at.** Parse.pT
1fe10 72 69 67 67 65 72 50 72 67 20 61 6e 64 20 64 65  riggerPrg and de
1fe20 6c 65 74 65 64 20 6f 6e 63 65 20 73 74 61 74 65  leted once state
1fe30 6d 65 6e 74 20 63 6f 6d 70 69 6c 61 74 69 6f 6e  ment compilation
1fe40 20 68 61 73 20 62 65 65 6e 0a 2a 2a 20 63 6f 6d   has been.** com
1fe50 70 6c 65 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 41 20  pleted..**.** A 
1fe60 56 64 62 65 20 73 75 62 2d 70 72 6f 67 72 61 6d  Vdbe sub-program
1fe70 20 74 68 61 74 20 69 6d 70 6c 65 6d 65 6e 74 73   that implements
1fe80 20 74 68 65 20 62 6f 64 79 20 61 6e 64 20 57 48   the body and WH
1fe90 45 4e 20 63 6c 61 75 73 65 20 6f 66 20 74 72 69  EN clause of tri
1fea0 67 67 65 72 0a 2a 2a 20 54 72 69 67 67 65 72 50  gger.** TriggerP
1feb0 72 67 2e 70 54 72 69 67 67 65 72 2c 20 61 73 73  rg.pTrigger, ass
1fec0 75 6d 69 6e 67 20 61 20 64 65 66 61 75 6c 74 20  uming a default 
1fed0 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 63 6c 61 75  ON CONFLICT clau
1fee0 73 65 20 6f 66 0a 2a 2a 20 54 72 69 67 67 65 72  se of.** Trigger
1fef0 50 72 67 2e 6f 72 63 6f 6e 66 2c 20 69 73 20 73  Prg.orconf, is s
1ff00 74 6f 72 65 64 20 69 6e 20 74 68 65 20 54 72 69  tored in the Tri
1ff10 67 67 65 72 50 72 67 2e 70 50 72 6f 67 72 61 6d  ggerPrg.pProgram
1ff20 20 76 61 72 69 61 62 6c 65 2e 0a 2a 2a 20 54 68   variable..** Th
1ff30 65 20 50 61 72 73 65 2e 70 54 72 69 67 67 65 72  e Parse.pTrigger
1ff40 50 72 67 20 6c 69 73 74 20 6e 65 76 65 72 20 63  Prg list never c
1ff50 6f 6e 74 61 69 6e 73 20 74 77 6f 20 65 6e 74 72  ontains two entr
1ff60 69 65 73 20 77 69 74 68 20 74 68 65 20 73 61 6d  ies with the sam
1ff70 65 0a 2a 2a 20 76 61 6c 75 65 73 20 66 6f 72 20  e.** values for 
1ff80 62 6f 74 68 20 70 54 72 69 67 67 65 72 20 61 6e  both pTrigger an
1ff90 64 20 6f 72 63 6f 6e 66 2e 0a 2a 2a 0a 2a 2a 20  d orconf..**.** 
1ffa0 54 68 65 20 54 72 69 67 67 65 72 50 72 67 2e 61  The TriggerPrg.a
1ffb0 43 6f 6c 6d 61 73 6b 5b 30 5d 20 76 61 72 69 61  Colmask[0] varia
1ffc0 62 6c 65 20 69 73 20 73 65 74 20 74 6f 20 61 20  ble is set to a 
1ffd0 6d 61 73 6b 20 6f 66 20 6f 6c 64 2e 2a 20 63 6f  mask of old.* co
1ffe0 6c 75 6d 6e 73 0a 2a 2a 20 61 63 63 65 73 73 65  lumns.** accesse
1fff0 64 20 28 6f 72 20 73 65 74 20 74 6f 20 30 20 66  d (or set to 0 f
20000 6f 72 20 74 72 69 67 67 65 72 73 20 66 69 72 65  or triggers fire
20010 64 20 61 73 20 61 20 72 65 73 75 6c 74 20 6f 66  d as a result of
20020 20 49 4e 53 45 52 54 0a 2a 2a 20 73 74 61 74 65   INSERT.** state
20030 6d 65 6e 74 73 29 2e 20 53 69 6d 69 6c 61 72 6c  ments). Similarl
20040 79 2c 20 74 68 65 20 54 72 69 67 67 65 72 50 72  y, the TriggerPr
20050 67 2e 61 43 6f 6c 6d 61 73 6b 5b 31 5d 20 76 61  g.aColmask[1] va
20060 72 69 61 62 6c 65 20 69 73 20 73 65 74 20 74 6f  riable is set to
20070 0a 2a 2a 20 61 20 6d 61 73 6b 20 6f 66 20 6e 65  .** a mask of ne
20080 77 2e 2a 20 63 6f 6c 75 6d 6e 73 20 75 73 65 64  w.* columns used
20090 20 62 79 20 74 68 65 20 70 72 6f 67 72 61 6d 2e   by the program.
200a0 0a 2a 2f 0a 73 74 72 75 63 74 20 54 72 69 67 67  .*/.struct Trigg
200b0 65 72 50 72 67 20 7b 0a 20 20 54 72 69 67 67 65  erPrg {.  Trigge
200c0 72 20 2a 70 54 72 69 67 67 65 72 3b 20 20 20 20  r *pTrigger;    
200d0 20 20 2f 2a 20 54 72 69 67 67 65 72 20 74 68 69    /* Trigger thi
200e0 73 20 70 72 6f 67 72 61 6d 20 77 61 73 20 63 6f  s program was co
200f0 64 65 64 20 66 72 6f 6d 20 2a 2f 0a 20 20 54 72  ded from */.  Tr
20100 69 67 67 65 72 50 72 67 20 2a 70 4e 65 78 74 3b  iggerPrg *pNext;
20110 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 65 6e        /* Next en
20120 74 72 79 20 69 6e 20 50 61 72 73 65 2e 70 54 72  try in Parse.pTr
20130 69 67 67 65 72 50 72 67 20 6c 69 73 74 20 2a 2f  iggerPrg list */
20140 0a 20 20 53 75 62 50 72 6f 67 72 61 6d 20 2a 70  .  SubProgram *p
20150 50 72 6f 67 72 61 6d 3b 20 20 20 2f 2a 20 50 72  Program;   /* Pr
20160 6f 67 72 61 6d 20 69 6d 70 6c 65 6d 65 6e 74 69  ogram implementi
20170 6e 67 20 70 54 72 69 67 67 65 72 2f 6f 72 63 6f  ng pTrigger/orco
20180 6e 66 20 2a 2f 0a 20 20 69 6e 74 20 6f 72 63 6f  nf */.  int orco
20190 6e 66 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  nf;             
201a0 2f 2a 20 44 65 66 61 75 6c 74 20 4f 4e 20 43 4f  /* Default ON CO
201b0 4e 46 4c 49 43 54 20 70 6f 6c 69 63 79 20 2a 2f  NFLICT policy */
201c0 0a 20 20 75 33 32 20 61 43 6f 6c 6d 61 73 6b 5b  .  u32 aColmask[
201d0 32 5d 3b 20 20 20 20 20 20 20 20 2f 2a 20 4d 61  2];        /* Ma
201e0 73 6b 73 20 6f 66 20 6f 6c 64 2e 2a 2c 20 6e 65  sks of old.*, ne
201f0 77 2e 2a 20 63 6f 6c 75 6d 6e 73 20 61 63 63 65  w.* columns acce
20200 73 73 65 64 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  ssed */.};../*.*
20210 2a 20 54 68 65 20 79 44 62 4d 61 73 6b 20 64 61  * The yDbMask da
20220 74 61 74 79 70 65 20 66 6f 72 20 74 68 65 20 62  tatype for the b
20230 69 74 6d 61 73 6b 20 6f 66 20 61 6c 6c 20 61 74  itmask of all at
20240 74 61 63 68 65 64 20 64 61 74 61 62 61 73 65 73  tached databases
20250 2e 0a 2a 2f 0a 23 69 66 20 53 51 4c 49 54 45 5f  ..*/.#if SQLITE_
20260 4d 41 58 5f 41 54 54 41 43 48 45 44 3e 33 30 0a  MAX_ATTACHED>30.
20270 20 20 74 79 70 65 64 65 66 20 75 6e 73 69 67 6e    typedef unsign
20280 65 64 20 63 68 61 72 20 79 44 62 4d 61 73 6b 5b  ed char yDbMask[
20290 28 53 51 4c 49 54 45 5f 4d 41 58 5f 41 54 54 41  (SQLITE_MAX_ATTA
202a0 43 48 45 44 2b 39 29 2f 38 5d 3b 0a 23 20 64 65  CHED+9)/8];.# de
202b0 66 69 6e 65 20 44 62 4d 61 73 6b 54 65 73 74 28  fine DbMaskTest(
202c0 4d 2c 49 29 20 20 20 20 28 28 28 4d 29 5b 28 49  M,I)    (((M)[(I
202d0 29 2f 38 5d 26 28 31 3c 3c 28 28 49 29 26 37 29  )/8]&(1<<((I)&7)
202e0 29 29 21 3d 30 29 0a 23 20 64 65 66 69 6e 65 20  ))!=0).# define 
202f0 44 62 4d 61 73 6b 5a 65 72 6f 28 4d 29 20 20 20  DbMaskZero(M)   
20300 20 20 20 6d 65 6d 73 65 74 28 28 4d 29 2c 30 2c     memset((M),0,
20310 73 69 7a 65 6f 66 28 4d 29 29 0a 23 20 64 65 66  sizeof(M)).# def
20320 69 6e 65 20 44 62 4d 61 73 6b 53 65 74 28 4d 2c  ine DbMaskSet(M,
20330 49 29 20 20 20 20 20 28 4d 29 5b 28 49 29 2f 38  I)     (M)[(I)/8
20340 5d 7c 3d 28 31 3c 3c 28 28 49 29 26 37 29 29 0a  ]|=(1<<((I)&7)).
20350 23 20 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 41  # define DbMaskA
20360 6c 6c 5a 65 72 6f 28 4d 29 20 20 20 73 71 6c 69  llZero(M)   sqli
20370 74 65 33 44 62 4d 61 73 6b 41 6c 6c 5a 65 72 6f  te3DbMaskAllZero
20380 28 4d 29 0a 23 20 64 65 66 69 6e 65 20 44 62 4d  (M).# define DbM
20390 61 73 6b 4e 6f 6e 5a 65 72 6f 28 4d 29 20 20 20  askNonZero(M)   
203a0 28 73 71 6c 69 74 65 33 44 62 4d 61 73 6b 41 6c  (sqlite3DbMaskAl
203b0 6c 5a 65 72 6f 28 4d 29 3d 3d 30 29 0a 23 65 6c  lZero(M)==0).#el
203c0 73 65 0a 20 20 74 79 70 65 64 65 66 20 75 6e 73  se.  typedef uns
203d0 69 67 6e 65 64 20 69 6e 74 20 79 44 62 4d 61 73  igned int yDbMas
203e0 6b 3b 0a 23 20 64 65 66 69 6e 65 20 44 62 4d 61  k;.# define DbMa
203f0 73 6b 54 65 73 74 28 4d 2c 49 29 20 20 20 20 28  skTest(M,I)    (
20400 28 28 4d 29 26 28 28 28 79 44 62 4d 61 73 6b 29  ((M)&(((yDbMask)
20410 31 29 3c 3c 28 49 29 29 29 21 3d 30 29 0a 23 20  1)<<(I)))!=0).# 
20420 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 5a 65 72  define DbMaskZer
20430 6f 28 4d 29 20 20 20 20 20 20 28 4d 29 3d 30 0a  o(M)      (M)=0.
20440 23 20 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 53  # define DbMaskS
20450 65 74 28 4d 2c 49 29 20 20 20 20 20 28 4d 29 7c  et(M,I)     (M)|
20460 3d 28 28 28 79 44 62 4d 61 73 6b 29 31 29 3c 3c  =(((yDbMask)1)<<
20470 28 49 29 29 0a 23 20 64 65 66 69 6e 65 20 44 62  (I)).# define Db
20480 4d 61 73 6b 41 6c 6c 5a 65 72 6f 28 4d 29 20 20  MaskAllZero(M)  
20490 20 28 4d 29 3d 3d 30 0a 23 20 64 65 66 69 6e 65   (M)==0.# define
204a0 20 44 62 4d 61 73 6b 4e 6f 6e 5a 65 72 6f 28 4d   DbMaskNonZero(M
204b0 29 20 20 20 28 4d 29 21 3d 30 0a 23 65 6e 64 69  )   (M)!=0.#endi
204c0 66 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 53 51 4c 20  f../*.** An SQL 
204d0 70 61 72 73 65 72 20 63 6f 6e 74 65 78 74 2e 20  parser context. 
204e0 20 41 20 63 6f 70 79 20 6f 66 20 74 68 69 73 20   A copy of this 
204f0 73 74 72 75 63 74 75 72 65 20 69 73 20 70 61 73  structure is pas
20500 73 65 64 20 74 68 72 6f 75 67 68 0a 2a 2a 20 74  sed through.** t
20510 68 65 20 70 61 72 73 65 72 20 61 6e 64 20 64 6f  he parser and do
20520 77 6e 20 69 6e 74 6f 20 61 6c 6c 20 74 68 65 20  wn into all the 
20530 70 61 72 73 65 72 20 61 63 74 69 6f 6e 20 72 6f  parser action ro
20540 75 74 69 6e 65 20 69 6e 20 6f 72 64 65 72 20 74  utine in order t
20550 6f 0a 2a 2a 20 63 61 72 72 79 20 61 72 6f 75 6e  o.** carry aroun
20560 64 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 74 68  d information th
20570 61 74 20 69 73 20 67 6c 6f 62 61 6c 20 74 6f 20  at is global to 
20580 74 68 65 20 65 6e 74 69 72 65 20 70 61 72 73 65  the entire parse
20590 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 73 74 72 75  ..**.** The stru
205a0 63 74 75 72 65 20 69 73 20 64 69 76 69 64 65 64  cture is divided
205b0 20 69 6e 74 6f 20 74 77 6f 20 70 61 72 74 73 2e   into two parts.
205c0 20 20 57 68 65 6e 20 74 68 65 20 70 61 72 73 65    When the parse
205d0 72 20 61 6e 64 20 63 6f 64 65 0a 2a 2a 20 67 65  r and code.** ge
205e0 6e 65 72 61 74 65 20 63 61 6c 6c 20 74 68 65 6d  nerate call them
205f0 73 65 6c 76 65 73 20 72 65 63 75 72 73 69 76 65  selves recursive
20600 6c 79 2c 20 74 68 65 20 66 69 72 73 74 20 70 61  ly, the first pa
20610 72 74 20 6f 66 20 74 68 65 20 73 74 72 75 63 74  rt of the struct
20620 75 72 65 0a 2a 2a 20 69 73 20 63 6f 6e 73 74 61  ure.** is consta
20630 6e 74 20 62 75 74 20 74 68 65 20 73 65 63 6f 6e  nt but the secon
20640 64 20 70 61 72 74 20 69 73 20 72 65 73 65 74 20  d part is reset 
20650 61 74 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67  at the beginning
20660 20 61 6e 64 20 65 6e 64 20 6f 66 0a 2a 2a 20 65   and end of.** e
20670 61 63 68 20 72 65 63 75 72 73 69 6f 6e 2e 0a 2a  ach recursion..*
20680 2a 0a 2a 2a 20 54 68 65 20 6e 54 61 62 6c 65 4c  *.** The nTableL
20690 6f 63 6b 20 61 6e 64 20 61 54 61 62 6c 65 4c 6f  ock and aTableLo
206a0 63 6b 20 76 61 72 69 61 62 6c 65 73 20 61 72 65  ck variables are
206b0 20 6f 6e 6c 79 20 75 73 65 64 20 69 66 20 74 68   only used if th
206c0 65 20 73 68 61 72 65 64 2d 63 61 63 68 65 0a 2a  e shared-cache.*
206d0 2a 20 66 65 61 74 75 72 65 20 69 73 20 65 6e 61  * feature is ena
206e0 62 6c 65 64 20 28 69 66 20 73 71 6c 69 74 65 33  bled (if sqlite3
206f0 54 73 64 28 29 2d 3e 75 73 65 53 68 61 72 65 64  Tsd()->useShared
20700 44 61 74 61 20 69 73 20 74 72 75 65 29 2e 20 54  Data is true). T
20710 68 65 79 20 61 72 65 0a 2a 2a 20 75 73 65 64 20  hey are.** used 
20720 74 6f 20 73 74 6f 72 65 20 74 68 65 20 73 65 74  to store the set
20730 20 6f 66 20 74 61 62 6c 65 2d 6c 6f 63 6b 73 20   of table-locks 
20740 72 65 71 75 69 72 65 64 20 62 79 20 74 68 65 20  required by the 
20750 73 74 61 74 65 6d 65 6e 74 20 62 65 69 6e 67 0a  statement being.
20760 2a 2a 20 63 6f 6d 70 69 6c 65 64 2e 20 46 75 6e  ** compiled. Fun
20770 63 74 69 6f 6e 20 73 71 6c 69 74 65 33 54 61 62  ction sqlite3Tab
20780 6c 65 4c 6f 63 6b 28 29 20 69 73 20 75 73 65 64  leLock() is used
20790 20 74 6f 20 61 64 64 20 65 6e 74 72 69 65 73 20   to add entries 
207a0 74 6f 20 74 68 65 0a 2a 2a 20 6c 69 73 74 2e 0a  to the.** list..
207b0 2a 2f 0a 73 74 72 75 63 74 20 50 61 72 73 65 20  */.struct Parse 
207c0 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b  {.  sqlite3 *db;
207d0 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
207e0 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 73 74  main database st
207f0 72 75 63 74 75 72 65 20 2a 2f 0a 20 20 63 68 61  ructure */.  cha
20800 72 20 2a 7a 45 72 72 4d 73 67 3b 20 20 20 20 20  r *zErrMsg;     
20810 20 20 2f 2a 20 41 6e 20 65 72 72 6f 72 20 6d 65    /* An error me
20820 73 73 61 67 65 20 2a 2f 0a 20 20 56 64 62 65 20  ssage */.  Vdbe 
20830 2a 70 56 64 62 65 3b 20 20 20 20 20 20 20 20 20  *pVdbe;         
20840 2f 2a 20 41 6e 20 65 6e 67 69 6e 65 20 66 6f 72  /* An engine for
20850 20 65 78 65 63 75 74 69 6e 67 20 64 61 74 61 62   executing datab
20860 61 73 65 20 62 79 74 65 63 6f 64 65 20 2a 2f 0a  ase bytecode */.
20870 20 20 69 6e 74 20 72 63 3b 20 20 20 20 20 20 20    int rc;       
20880 20 20 20 20 20 20 20 2f 2a 20 52 65 74 75 72 6e         /* Return
20890 20 63 6f 64 65 20 66 72 6f 6d 20 65 78 65 63 75   code from execu
208a0 74 69 6f 6e 20 2a 2f 0a 20 20 75 38 20 63 6f 6c  tion */.  u8 col
208b0 4e 61 6d 65 73 53 65 74 3b 20 20 20 20 20 20 2f  NamesSet;      /
208c0 2a 20 54 52 55 45 20 61 66 74 65 72 20 4f 50 5f  * TRUE after OP_
208d0 43 6f 6c 75 6d 6e 4e 61 6d 65 20 68 61 73 20 62  ColumnName has b
208e0 65 65 6e 20 69 73 73 75 65 64 20 74 6f 20 70 56  een issued to pV
208f0 64 62 65 20 2a 2f 0a 20 20 75 38 20 63 68 65 63  dbe */.  u8 chec
20900 6b 53 63 68 65 6d 61 3b 20 20 20 20 20 20 2f 2a  kSchema;      /*
20910 20 43 61 75 73 65 73 20 73 63 68 65 6d 61 20 63   Causes schema c
20920 6f 6f 6b 69 65 20 63 68 65 63 6b 20 61 66 74 65  ookie check afte
20930 72 20 61 6e 20 65 72 72 6f 72 20 2a 2f 0a 20 20  r an error */.  
20940 75 38 20 6e 65 73 74 65 64 3b 20 20 20 20 20 20  u8 nested;      
20950 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
20960 66 20 6e 65 73 74 65 64 20 63 61 6c 6c 73 20 74  f nested calls t
20970 6f 20 74 68 65 20 70 61 72 73 65 72 2f 63 6f 64  o the parser/cod
20980 65 20 67 65 6e 65 72 61 74 6f 72 20 2a 2f 0a 20  e generator */. 
20990 20 75 38 20 6e 54 65 6d 70 52 65 67 3b 20 20 20   u8 nTempReg;   
209a0 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
209b0 6f 66 20 74 65 6d 70 6f 72 61 72 79 20 72 65 67  of temporary reg
209c0 69 73 74 65 72 73 20 69 6e 20 61 54 65 6d 70 52  isters in aTempR
209d0 65 67 5b 5d 20 2a 2f 0a 20 20 75 38 20 69 73 4d  eg[] */.  u8 isM
209e0 75 6c 74 69 57 72 69 74 65 3b 20 20 20 20 20 2f  ultiWrite;     /
209f0 2a 20 54 72 75 65 20 69 66 20 73 74 61 74 65 6d  * True if statem
20a00 65 6e 74 20 6d 61 79 20 6d 6f 64 69 66 79 2f 69  ent may modify/i
20a10 6e 73 65 72 74 20 6d 75 6c 74 69 70 6c 65 20 72  nsert multiple r
20a20 6f 77 73 20 2a 2f 0a 20 20 75 38 20 6d 61 79 41  ows */.  u8 mayA
20a30 62 6f 72 74 3b 20 20 20 20 20 20 20 20 20 2f 2a  bort;         /*
20a40 20 54 72 75 65 20 69 66 20 73 74 61 74 65 6d 65   True if stateme
20a50 6e 74 20 6d 61 79 20 74 68 72 6f 77 20 61 6e 20  nt may throw an 
20a60 41 42 4f 52 54 20 65 78 63 65 70 74 69 6f 6e 20  ABORT exception 
20a70 2a 2f 0a 20 20 75 38 20 68 61 73 43 6f 6d 70 6f  */.  u8 hasCompo
20a80 75 6e 64 3b 20 20 20 20 20 20 2f 2a 20 4e 65 65  und;      /* Nee
20a90 64 20 74 6f 20 69 6e 76 6f 6b 65 20 63 6f 6e 76  d to invoke conv
20aa0 65 72 74 43 6f 6d 70 6f 75 6e 64 53 65 6c 65 63  ertCompoundSelec
20ab0 74 54 6f 53 75 62 71 75 65 72 79 28 29 20 2a 2f  tToSubquery() */
20ac0 0a 20 20 75 38 20 6f 6b 43 6f 6e 73 74 46 61 63  .  u8 okConstFac
20ad0 74 6f 72 3b 20 20 20 20 2f 2a 20 4f 4b 20 74 6f  tor;    /* OK to
20ae0 20 66 61 63 74 6f 72 20 6f 75 74 20 63 6f 6e 73   factor out cons
20af0 74 61 6e 74 73 20 2a 2f 0a 20 20 75 38 20 64 69  tants */.  u8 di
20b00 73 61 62 6c 65 4c 6f 6f 6b 61 73 69 64 65 3b 20  sableLookaside; 
20b10 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 74 69 6d  /* Number of tim
20b20 65 73 20 6c 6f 6f 6b 61 73 69 64 65 20 68 61 73  es lookaside has
20b30 20 62 65 65 6e 20 64 69 73 61 62 6c 65 64 20 2a   been disabled *
20b40 2f 0a 20 20 75 38 20 64 69 73 61 62 6c 65 56 74  /.  u8 disableVt
20b50 61 62 3b 20 20 20 20 20 20 2f 2a 20 44 69 73 61  ab;      /* Disa
20b60 62 6c 65 20 61 6c 6c 20 76 69 72 74 75 61 6c 20  ble all virtual 
20b70 74 61 62 6c 65 73 20 66 6f 72 20 74 68 69 73 20  tables for this 
20b80 70 61 72 73 65 20 2a 2f 0a 20 20 69 6e 74 20 6e  parse */.  int n
20b90 52 61 6e 67 65 52 65 67 3b 20 20 20 20 20 20 20  RangeReg;       
20ba0 2f 2a 20 53 69 7a 65 20 6f 66 20 74 68 65 20 74  /* Size of the t
20bb0 65 6d 70 6f 72 61 72 79 20 72 65 67 69 73 74 65  emporary registe
20bc0 72 20 62 6c 6f 63 6b 20 2a 2f 0a 20 20 69 6e 74  r block */.  int
20bd0 20 69 52 61 6e 67 65 52 65 67 3b 20 20 20 20 20   iRangeReg;     
20be0 20 20 2f 2a 20 46 69 72 73 74 20 72 65 67 69 73    /* First regis
20bf0 74 65 72 20 69 6e 20 74 65 6d 70 6f 72 61 72 79  ter in temporary
20c00 20 72 65 67 69 73 74 65 72 20 62 6c 6f 63 6b 20   register block 
20c10 2a 2f 0a 20 20 69 6e 74 20 6e 45 72 72 3b 20 20  */.  int nErr;  
20c20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
20c30 62 65 72 20 6f 66 20 65 72 72 6f 72 73 20 73 65  ber of errors se
20c40 65 6e 20 2a 2f 0a 20 20 69 6e 74 20 6e 54 61 62  en */.  int nTab
20c50 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
20c60 4e 75 6d 62 65 72 20 6f 66 20 70 72 65 76 69 6f  Number of previo
20c70 75 73 6c 79 20 61 6c 6c 6f 63 61 74 65 64 20 56  usly allocated V
20c80 44 42 45 20 63 75 72 73 6f 72 73 20 2a 2f 0a 20  DBE cursors */. 
20c90 20 69 6e 74 20 6e 4d 65 6d 3b 20 20 20 20 20 20   int nMem;      
20ca0 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
20cb0 6f 66 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 73 20  of memory cells 
20cc0 75 73 65 64 20 73 6f 20 66 61 72 20 2a 2f 0a 20  used so far */. 
20cd0 20 69 6e 74 20 73 7a 4f 70 41 6c 6c 6f 63 3b 20   int szOpAlloc; 
20ce0 20 20 20 20 20 20 2f 2a 20 42 79 74 65 73 20 6f        /* Bytes o
20cf0 66 20 6d 65 6d 6f 72 79 20 73 70 61 63 65 20 61  f memory space a
20d00 6c 6c 6f 63 61 74 65 64 20 66 6f 72 20 56 64 62  llocated for Vdb
20d10 65 2e 61 4f 70 5b 5d 20 2a 2f 0a 20 20 69 6e 74  e.aOp[] */.  int
20d20 20 69 53 65 6c 66 54 61 62 3b 20 20 20 20 20 20   iSelfTab;      
20d30 20 20 2f 2a 20 54 61 62 6c 65 20 61 73 73 6f 63    /* Table assoc
20d40 69 61 74 65 64 20 77 69 74 68 20 61 6e 20 69 6e  iated with an in
20d50 64 65 78 20 6f 6e 20 65 78 70 72 2c 20 6f 72 20  dex on expr, or 
20d60 6e 65 67 61 74 69 76 65 0a 20 20 20 20 20 20 20  negative.       
20d70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20d80 2a 2a 20 6f 66 20 74 68 65 20 62 61 73 65 20 72  ** of the base r
20d90 65 67 69 73 74 65 72 20 64 75 72 69 6e 67 20 63  egister during c
20da0 68 65 63 6b 2d 63 6f 6e 73 74 72 61 69 6e 74 20  heck-constraint 
20db0 65 76 61 6c 20 2a 2f 0a 20 20 69 6e 74 20 6e 4c  eval */.  int nL
20dc0 61 62 65 6c 3b 20 20 20 20 20 20 20 20 20 20 2f  abel;          /
20dd0 2a 20 54 68 65 20 2a 6e 65 67 61 74 69 76 65 2a  * The *negative*
20de0 20 6f 66 20 74 68 65 20 6e 75 6d 62 65 72 20 6f   of the number o
20df0 66 20 6c 61 62 65 6c 73 20 75 73 65 64 20 2a 2f  f labels used */
20e00 0a 20 20 69 6e 74 20 6e 4c 61 62 65 6c 41 6c 6c  .  int nLabelAll
20e10 6f 63 3b 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65  oc;     /* Numbe
20e20 72 20 6f 66 20 73 6c 6f 74 73 20 69 6e 20 61 4c  r of slots in aL
20e30 61 62 65 6c 20 2a 2f 0a 20 20 69 6e 74 20 2a 61  abel */.  int *a
20e40 4c 61 62 65 6c 3b 20 20 20 20 20 20 20 20 20 2f  Label;         /
20e50 2a 20 53 70 61 63 65 20 74 6f 20 68 6f 6c 64 20  * Space to hold 
20e60 74 68 65 20 6c 61 62 65 6c 73 20 2a 2f 0a 20 20  the labels */.  
20e70 45 78 70 72 4c 69 73 74 20 2a 70 43 6f 6e 73 74  ExprList *pConst
20e80 45 78 70 72 3b 2f 2a 20 43 6f 6e 73 74 61 6e 74  Expr;/* Constant
20e90 20 65 78 70 72 65 73 73 69 6f 6e 73 20 2a 2f 0a   expressions */.
20ea0 20 20 54 6f 6b 65 6e 20 63 6f 6e 73 74 72 61 69    Token constrai
20eb0 6e 74 4e 61 6d 65 3b 2f 2a 20 4e 61 6d 65 20 6f  ntName;/* Name o
20ec0 66 20 74 68 65 20 63 6f 6e 73 74 72 61 69 6e 74  f the constraint
20ed0 20 63 75 72 72 65 6e 74 6c 79 20 62 65 69 6e 67   currently being
20ee0 20 70 61 72 73 65 64 20 2a 2f 0a 20 20 79 44 62   parsed */.  yDb
20ef0 4d 61 73 6b 20 77 72 69 74 65 4d 61 73 6b 3b 20  Mask writeMask; 
20f00 20 20 2f 2a 20 53 74 61 72 74 20 61 20 77 72 69    /* Start a wri
20f10 74 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6f  te transaction o
20f20 6e 20 74 68 65 73 65 20 64 61 74 61 62 61 73 65  n these database
20f30 73 20 2a 2f 0a 20 20 79 44 62 4d 61 73 6b 20 63  s */.  yDbMask c
20f40 6f 6f 6b 69 65 4d 61 73 6b 3b 20 20 2f 2a 20 42  ookieMask;  /* B
20f50 69 74 6d 61 73 6b 20 6f 66 20 73 63 68 65 6d 61  itmask of schema
20f60 20 76 65 72 69 66 69 65 64 20 64 61 74 61 62 61   verified databa
20f70 73 65 73 20 2a 2f 0a 20 20 69 6e 74 20 72 65 67  ses */.  int reg
20f80 52 6f 77 69 64 3b 20 20 20 20 20 20 20 20 2f 2a  Rowid;        /*
20f90 20 52 65 67 69 73 74 65 72 20 68 6f 6c 64 69 6e   Register holdin
20fa0 67 20 72 6f 77 69 64 20 6f 66 20 43 52 45 41 54  g rowid of CREAT
20fb0 45 20 54 41 42 4c 45 20 65 6e 74 72 79 20 2a 2f  E TABLE entry */
20fc0 0a 20 20 69 6e 74 20 72 65 67 52 6f 6f 74 3b 20  .  int regRoot; 
20fd0 20 20 20 20 20 20 20 20 2f 2a 20 52 65 67 69 73          /* Regis
20fe0 74 65 72 20 68 6f 6c 64 69 6e 67 20 72 6f 6f 74  ter holding root
20ff0 20 70 61 67 65 20 6e 75 6d 62 65 72 20 66 6f 72   page number for
21000 20 6e 65 77 20 6f 62 6a 65 63 74 73 20 2a 2f 0a   new objects */.
21010 20 20 69 6e 74 20 6e 4d 61 78 41 72 67 3b 20 20    int nMaxArg;  
21020 20 20 20 20 20 20 20 2f 2a 20 4d 61 78 20 61 72         /* Max ar
21030 67 73 20 70 61 73 73 65 64 20 74 6f 20 75 73 65  gs passed to use
21040 72 20 66 75 6e 63 74 69 6f 6e 20 62 79 20 73 75  r function by su
21050 62 2d 70 72 6f 67 72 61 6d 20 2a 2f 0a 20 20 69  b-program */.  i
21060 6e 74 20 6e 53 65 6c 65 63 74 3b 20 20 20 20 20  nt nSelect;     
21070 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
21080 20 53 45 4c 45 43 54 20 73 74 6d 74 73 2e 20 43   SELECT stmts. C
21090 6f 75 6e 74 65 72 20 66 6f 72 20 53 65 6c 65 63  ounter for Selec
210a0 74 2e 73 65 6c 49 64 20 2a 2f 0a 23 69 66 6e 64  t.selId */.#ifnd
210b0 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53  ef SQLITE_OMIT_S
210c0 48 41 52 45 44 5f 43 41 43 48 45 0a 20 20 69 6e  HARED_CACHE.  in
210d0 74 20 6e 54 61 62 6c 65 4c 6f 63 6b 3b 20 20 20  t nTableLock;   
210e0 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
210f0 66 20 6c 6f 63 6b 73 20 69 6e 20 61 54 61 62 6c  f locks in aTabl
21100 65 4c 6f 63 6b 20 2a 2f 0a 20 20 54 61 62 6c 65  eLock */.  Table
21110 4c 6f 63 6b 20 2a 61 54 61 62 6c 65 4c 6f 63 6b  Lock *aTableLock
21120 3b 20 2f 2a 20 52 65 71 75 69 72 65 64 20 74 61  ; /* Required ta
21130 62 6c 65 20 6c 6f 63 6b 73 20 66 6f 72 20 73 68  ble locks for sh
21140 61 72 65 64 2d 63 61 63 68 65 20 6d 6f 64 65 20  ared-cache mode 
21150 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 41 75 74 6f  */.#endif.  Auto
21160 69 6e 63 49 6e 66 6f 20 2a 70 41 69 6e 63 3b 20  incInfo *pAinc; 
21170 20 2f 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20   /* Information 
21180 61 62 6f 75 74 20 41 55 54 4f 49 4e 43 52 45 4d  about AUTOINCREM
21190 45 4e 54 20 63 6f 75 6e 74 65 72 73 20 2a 2f 0a  ENT counters */.
211a0 20 20 50 61 72 73 65 20 2a 70 54 6f 70 6c 65 76    Parse *pToplev
211b0 65 6c 3b 20 20 20 20 2f 2a 20 50 61 72 73 65 20  el;    /* Parse 
211c0 73 74 72 75 63 74 75 72 65 20 66 6f 72 20 6d 61  structure for ma
211d0 69 6e 20 70 72 6f 67 72 61 6d 20 28 6f 72 20 4e  in program (or N
211e0 55 4c 4c 29 20 2a 2f 0a 20 20 54 61 62 6c 65 20  ULL) */.  Table 
211f0 2a 70 54 72 69 67 67 65 72 54 61 62 3b 20 20 2f  *pTriggerTab;  /
21200 2a 20 54 61 62 6c 65 20 74 72 69 67 67 65 72 73  * Table triggers
21210 20 61 72 65 20 62 65 69 6e 67 20 63 6f 64 65 64   are being coded
21220 20 66 6f 72 20 2a 2f 0a 20 20 50 61 72 73 65 20   for */.  Parse 
21230 2a 70 50 61 72 65 6e 74 50 61 72 73 65 3b 20 2f  *pParentParse; /
21240 2a 20 50 61 72 65 6e 74 20 70 61 72 73 65 72 20  * Parent parser 
21250 69 66 20 74 68 69 73 20 70 61 72 73 65 72 20 69  if this parser i
21260 73 20 6e 65 73 74 65 64 20 2a 2f 0a 20 20 69 6e  s nested */.  in
21270 74 20 61 64 64 72 43 72 54 61 62 3b 20 20 20 20  t addrCrTab;    
21280 20 20 20 2f 2a 20 41 64 64 72 65 73 73 20 6f 66     /* Address of
21290 20 4f 50 5f 43 72 65 61 74 65 42 74 72 65 65 20   OP_CreateBtree 
212a0 6f 70 63 6f 64 65 20 6f 6e 20 43 52 45 41 54 45  opcode on CREATE
212b0 20 54 41 42 4c 45 20 2a 2f 0a 20 20 75 33 32 20   TABLE */.  u32 
212c0 6e 51 75 65 72 79 4c 6f 6f 70 3b 20 20 20 20 20  nQueryLoop;     
212d0 20 2f 2a 20 45 73 74 20 6e 75 6d 62 65 72 20 6f   /* Est number o
212e0 66 20 69 74 65 72 61 74 69 6f 6e 73 20 6f 66 20  f iterations of 
212f0 61 20 71 75 65 72 79 20 28 31 30 2a 6c 6f 67 32  a query (10*log2
21300 28 4e 29 29 20 2a 2f 0a 20 20 75 33 32 20 6f 6c  (N)) */.  u32 ol
21310 64 6d 61 73 6b 3b 20 20 20 20 20 20 20 20 20 2f  dmask;         /
21320 2a 20 4d 61 73 6b 20 6f 66 20 6f 6c 64 2e 2a 20  * Mask of old.* 
21330 63 6f 6c 75 6d 6e 73 20 72 65 66 65 72 65 6e 63  columns referenc
21340 65 64 20 2a 2f 0a 20 20 75 33 32 20 6e 65 77 6d  ed */.  u32 newm
21350 61 73 6b 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  ask;         /* 
21360 4d 61 73 6b 20 6f 66 20 6e 65 77 2e 2a 20 63 6f  Mask of new.* co
21370 6c 75 6d 6e 73 20 72 65 66 65 72 65 6e 63 65 64  lumns referenced
21380 20 2a 2f 0a 20 20 75 38 20 65 54 72 69 67 67 65   */.  u8 eTrigge
21390 72 4f 70 3b 20 20 20 20 20 20 20 2f 2a 20 54 4b  rOp;       /* TK
213a0 5f 55 50 44 41 54 45 2c 20 54 4b 5f 49 4e 53 45  _UPDATE, TK_INSE
213b0 52 54 20 6f 72 20 54 4b 5f 44 45 4c 45 54 45 20  RT or TK_DELETE 
213c0 2a 2f 0a 20 20 75 38 20 65 4f 72 63 6f 6e 66 3b  */.  u8 eOrconf;
213d0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 65 66            /* Def
213e0 61 75 6c 74 20 4f 4e 20 43 4f 4e 46 4c 49 43 54  ault ON CONFLICT
213f0 20 70 6f 6c 69 63 79 20 66 6f 72 20 74 72 69 67   policy for trig
21400 67 65 72 20 73 74 65 70 73 20 2a 2f 0a 20 20 75  ger steps */.  u
21410 38 20 64 69 73 61 62 6c 65 54 72 69 67 67 65 72  8 disableTrigger
21420 73 3b 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 64  s;  /* True to d
21430 69 73 61 62 6c 65 20 74 72 69 67 67 65 72 73 20  isable triggers 
21440 2a 2f 0a 0a 20 20 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a  */..  /*********
21450 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21460 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21470 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21480 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21490 2a 0a 20 20 2a 2a 20 46 69 65 6c 64 73 20 61 62  *.  ** Fields ab
214a0 6f 76 65 20 6d 75 73 74 20 62 65 20 69 6e 69 74  ove must be init
214b0 69 61 6c 69 7a 65 64 20 74 6f 20 7a 65 72 6f 2e  ialized to zero.
214c0 20 20 54 68 65 20 66 69 65 6c 64 73 20 74 68 61    The fields tha
214d0 74 20 66 6f 6c 6c 6f 77 2c 0a 20 20 2a 2a 20 64  t follow,.  ** d
214e0 6f 77 6e 20 74 6f 20 74 68 65 20 62 65 67 69 6e  own to the begin
214f0 6e 69 6e 67 20 6f 66 20 74 68 65 20 72 65 63 75  ning of the recu
21500 72 73 69 76 65 20 73 65 63 74 69 6f 6e 2c 20 64  rsive section, d
21510 6f 20 6e 6f 74 20 6e 65 65 64 20 74 6f 20 62 65  o not need to be
21520 0a 20 20 2a 2a 20 69 6e 69 74 69 61 6c 69 7a 65  .  ** initialize
21530 64 20 61 73 20 74 68 65 79 20 77 69 6c 6c 20 62  d as they will b
21540 65 20 73 65 74 20 62 65 66 6f 72 65 20 62 65 69  e set before bei
21550 6e 67 20 75 73 65 64 2e 20 20 54 68 65 20 62 6f  ng used.  The bo
21560 75 6e 64 61 72 79 20 69 73 0a 20 20 2a 2a 20 64  undary is.  ** d
21570 65 74 65 72 6d 69 6e 65 64 20 62 79 20 6f 66 66  etermined by off
21580 73 65 74 6f 66 28 50 61 72 73 65 2c 61 54 65 6d  setof(Parse,aTem
21590 70 52 65 67 29 2e 0a 20 20 2a 2a 2a 2a 2a 2a 2a  pReg)..  *******
215a0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
215b0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
215c0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
215d0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
215e0 2a 2a 2a 2f 0a 0a 20 20 69 6e 74 20 61 54 65 6d  ***/..  int aTem
215f0 70 52 65 67 5b 38 5d 3b 20 20 20 20 20 20 20 20  pReg[8];        
21600 2f 2a 20 48 6f 6c 64 69 6e 67 20 61 72 65 61 20  /* Holding area 
21610 66 6f 72 20 74 65 6d 70 6f 72 61 72 79 20 72 65  for temporary re
21620 67 69 73 74 65 72 73 20 2a 2f 0a 20 20 54 6f 6b  gisters */.  Tok
21630 65 6e 20 73 4e 61 6d 65 54 6f 6b 65 6e 3b 20 20  en sNameToken;  
21640 20 20 20 20 20 2f 2a 20 54 6f 6b 65 6e 20 77 69       /* Token wi
21650 74 68 20 75 6e 71 75 61 6c 69 66 69 65 64 20 73  th unqualified s
21660 63 68 65 6d 61 20 6f 62 6a 65 63 74 20 6e 61 6d  chema object nam
21670 65 20 2a 2f 0a 0a 20 20 2f 2a 2a 2a 2a 2a 2a 2a  e */..  /*******
21680 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21690 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
216a0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
216b0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
216c0 2a 0a 20 20 2a 2a 20 41 62 6f 76 65 20 69 73 20  *.  ** Above is 
216d0 63 6f 6e 73 74 61 6e 74 20 62 65 74 77 65 65 6e  constant between
216e0 20 72 65 63 75 72 73 69 6f 6e 73 2e 20 20 42 65   recursions.  Be
216f0 6c 6f 77 20 69 73 20 72 65 73 65 74 20 62 65 66  low is reset bef
21700 6f 72 65 20 61 6e 64 20 61 66 74 65 72 0a 20 20  ore and after.  
21710 2a 2a 20 65 61 63 68 20 72 65 63 75 72 73 69 6f  ** each recursio
21720 6e 2e 20 20 54 68 65 20 62 6f 75 6e 64 61 72 79  n.  The boundary
21730 20 62 65 74 77 65 65 6e 20 74 68 65 73 65 20 74   between these t
21740 77 6f 20 72 65 67 69 6f 6e 73 20 69 73 20 64 65  wo regions is de
21750 74 65 72 6d 69 6e 65 64 0a 20 20 2a 2a 20 75 73  termined.  ** us
21760 69 6e 67 20 6f 66 66 73 65 74 6f 66 28 50 61 72  ing offsetof(Par
21770 73 65 2c 73 4c 61 73 74 54 6f 6b 65 6e 29 20 73  se,sLastToken) s
21780 6f 20 74 68 65 20 73 4c 61 73 74 54 6f 6b 65 6e  o the sLastToken
21790 20 66 69 65 6c 64 20 6d 75 73 74 20 62 65 20 74   field must be t
217a0 68 65 0a 20 20 2a 2a 20 66 69 72 73 74 20 66 69  he.  ** first fi
217b0 65 6c 64 20 69 6e 20 74 68 65 20 72 65 63 75 72  eld in the recur
217c0 73 69 76 65 20 72 65 67 69 6f 6e 2e 0a 20 20 2a  sive region..  *
217d0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
217e0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
217f0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21800 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21810 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 20 20 54 6f 6b 65  *******/..  Toke
21820 6e 20 73 4c 61 73 74 54 6f 6b 65 6e 3b 20 20 20  n sLastToken;   
21830 20 20 20 20 2f 2a 20 54 68 65 20 6c 61 73 74 20      /* The last 
21840 74 6f 6b 65 6e 20 70 61 72 73 65 64 20 2a 2f 0a  token parsed */.
21850 20 20 79 6e 56 61 72 20 6e 56 61 72 3b 20 20 20    ynVar nVar;   
21860 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
21870 75 6d 62 65 72 20 6f 66 20 27 3f 27 20 76 61 72  umber of '?' var
21880 69 61 62 6c 65 73 20 73 65 65 6e 20 69 6e 20 74  iables seen in t
21890 68 65 20 53 51 4c 20 73 6f 20 66 61 72 20 2a 2f  he SQL so far */
218a0 0a 20 20 75 38 20 69 50 6b 53 6f 72 74 4f 72 64  .  u8 iPkSortOrd
218b0 65 72 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  er;          /* 
218c0 41 53 43 20 6f 72 20 44 45 53 43 20 66 6f 72 20  ASC or DESC for 
218d0 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20  INTEGER PRIMARY 
218e0 4b 45 59 20 2a 2f 0a 20 20 75 38 20 65 78 70 6c  KEY */.  u8 expl
218f0 61 69 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20  ain;            
21900 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 74 68     /* True if th
21910 65 20 45 58 50 4c 41 49 4e 20 66 6c 61 67 20 69  e EXPLAIN flag i
21920 73 20 66 6f 75 6e 64 20 6f 6e 20 74 68 65 20 71  s found on the q
21930 75 65 72 79 20 2a 2f 0a 23 69 66 20 21 28 64 65  uery */.#if !(de
21940 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49  fined(SQLITE_OMI
21950 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 29 20  T_VIRTUALTABLE) 
21960 26 26 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  && defined(SQLIT
21970 45 5f 4f 4d 49 54 5f 41 4c 54 45 52 54 41 42 4c  E_OMIT_ALTERTABL
21980 45 29 29 0a 20 20 75 38 20 65 50 61 72 73 65 4d  E)).  u8 eParseM
21990 6f 64 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ode;            
219a0 2f 2a 20 50 41 52 53 45 5f 4d 4f 44 45 5f 58 58  /* PARSE_MODE_XX
219b0 58 20 63 6f 6e 73 74 61 6e 74 20 2a 2f 0a 23 65  X constant */.#e
219c0 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c  ndif.#ifndef SQL
219d0 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
219e0 54 41 42 4c 45 0a 20 20 69 6e 74 20 6e 56 74 61  TABLE.  int nVta
219f0 62 4c 6f 63 6b 3b 20 20 20 20 20 20 20 20 20 20  bLock;          
21a00 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 76    /* Number of v
21a10 69 72 74 75 61 6c 20 74 61 62 6c 65 73 20 74 6f  irtual tables to
21a20 20 6c 6f 63 6b 20 2a 2f 0a 23 65 6e 64 69 66 0a   lock */.#endif.
21a30 20 20 69 6e 74 20 6e 48 65 69 67 68 74 3b 20 20    int nHeight;  
21a40 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 45              /* E
21a50 78 70 72 65 73 73 69 6f 6e 20 74 72 65 65 20 68  xpression tree h
21a60 65 69 67 68 74 20 6f 66 20 63 75 72 72 65 6e 74  eight of current
21a70 20 73 75 62 2d 73 65 6c 65 63 74 20 2a 2f 0a 23   sub-select */.#
21a80 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
21a90 49 54 5f 45 58 50 4c 41 49 4e 0a 20 20 69 6e 74  IT_EXPLAIN.  int
21aa0 20 61 64 64 72 45 78 70 6c 61 69 6e 3b 20 20 20   addrExplain;   
21ab0 20 20 20 20 20 20 20 2f 2a 20 41 64 64 72 65 73         /* Addres
21ac0 73 20 6f 66 20 63 75 72 72 65 6e 74 20 4f 50 5f  s of current OP_
21ad0 45 78 70 6c 61 69 6e 20 6f 70 63 6f 64 65 20 2a  Explain opcode *
21ae0 2f 0a 23 65 6e 64 69 66 0a 20 20 56 4c 69 73 74  /.#endif.  VList
21af0 20 2a 70 56 4c 69 73 74 3b 20 20 20 20 20 20 20   *pVList;       
21b00 20 20 20 20 20 2f 2a 20 4d 61 70 70 69 6e 67 20       /* Mapping 
21b10 62 65 74 77 65 65 6e 20 76 61 72 69 61 62 6c 65  between variable
21b20 20 6e 61 6d 65 73 20 61 6e 64 20 6e 75 6d 62 65   names and numbe
21b30 72 73 20 2a 2f 0a 20 20 56 64 62 65 20 2a 70 52  rs */.  Vdbe *pR
21b40 65 70 72 65 70 61 72 65 3b 20 20 20 20 20 20 20  eprepare;       
21b50 20 20 2f 2a 20 56 4d 20 62 65 69 6e 67 20 72 65    /* VM being re
21b60 70 72 65 70 61 72 65 64 20 28 73 71 6c 69 74 65  prepared (sqlite
21b70 33 52 65 70 72 65 70 61 72 65 28 29 29 20 2a 2f  3Reprepare()) */
21b80 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  .  const char *z
21b90 54 61 69 6c 3b 20 20 20 20 20 20 20 20 2f 2a 20  Tail;        /* 
21ba0 41 6c 6c 20 53 51 4c 20 74 65 78 74 20 70 61 73  All SQL text pas
21bb0 74 20 74 68 65 20 6c 61 73 74 20 73 65 6d 69 63  t the last semic
21bc0 6f 6c 6f 6e 20 70 61 72 73 65 64 20 2a 2f 0a 20  olon parsed */. 
21bd0 20 54 61 62 6c 65 20 2a 70 4e 65 77 54 61 62 6c   Table *pNewTabl
21be0 65 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 41 20  e;         /* A 
21bf0 74 61 62 6c 65 20 62 65 69 6e 67 20 63 6f 6e 73  table being cons
21c00 74 72 75 63 74 65 64 20 62 79 20 43 52 45 41 54  tructed by CREAT
21c10 45 20 54 41 42 4c 45 20 2a 2f 0a 20 20 49 6e 64  E TABLE */.  Ind
21c20 65 78 20 2a 70 4e 65 77 49 6e 64 65 78 3b 20 20  ex *pNewIndex;  
21c30 20 20 20 20 20 20 20 2f 2a 20 41 6e 20 69 6e 64         /* An ind
21c40 65 78 20 62 65 69 6e 67 20 63 6f 6e 73 74 72 75  ex being constru
21c50 63 74 65 64 20 62 79 20 43 52 45 41 54 45 20 49  cted by CREATE I
21c60 4e 44 45 58 2e 0a 20 20 20 20 20 20 20 20 20 20  NDEX..          
21c70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21c80 20 20 2a 2a 20 41 6c 73 6f 20 75 73 65 64 20 74    ** Also used t
21c90 6f 20 68 6f 6c 64 20 72 65 64 75 6e 64 61 6e 74  o hold redundant
21ca0 20 55 4e 49 51 55 45 20 63 6f 6e 73 74 72 61 69   UNIQUE constrai
21cb0 6e 74 73 0a 20 20 20 20 20 20 20 20 20 20 20 20  nts.            
21cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21cd0 2a 2a 20 64 75 72 69 6e 67 20 61 20 52 45 4e 41  ** during a RENA
21ce0 4d 45 20 43 4f 4c 55 4d 4e 20 2a 2f 0a 20 20 54  ME COLUMN */.  T
21cf0 72 69 67 67 65 72 20 2a 70 4e 65 77 54 72 69 67  rigger *pNewTrig
21d00 67 65 72 3b 20 20 20 20 20 2f 2a 20 54 72 69 67  ger;     /* Trig
21d10 67 65 72 20 75 6e 64 65 72 20 63 6f 6e 73 74 72  ger under constr
21d20 75 63 74 20 62 79 20 61 20 43 52 45 41 54 45 20  uct by a CREATE 
21d30 54 52 49 47 47 45 52 20 2a 2f 0a 20 20 63 6f 6e  TRIGGER */.  con
21d40 73 74 20 63 68 61 72 20 2a 7a 41 75 74 68 43 6f  st char *zAuthCo
21d50 6e 74 65 78 74 3b 20 2f 2a 20 54 68 65 20 36 74  ntext; /* The 6t
21d60 68 20 70 61 72 61 6d 65 74 65 72 20 74 6f 20 64  h parameter to d
21d70 62 2d 3e 78 41 75 74 68 20 63 61 6c 6c 62 61 63  b->xAuth callbac
21d80 6b 73 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51  ks */.#ifndef SQ
21d90 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
21da0 4c 54 41 42 4c 45 0a 20 20 54 6f 6b 65 6e 20 73  LTABLE.  Token s
21db0 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20  Arg;            
21dc0 20 20 20 2f 2a 20 43 6f 6d 70 6c 65 74 65 20 74     /* Complete t
21dd0 65 78 74 20 6f 66 20 61 20 6d 6f 64 75 6c 65 20  ext of a module 
21de0 61 72 67 75 6d 65 6e 74 20 2a 2f 0a 20 20 54 61  argument */.  Ta
21df0 62 6c 65 20 2a 2a 61 70 56 74 61 62 4c 6f 63 6b  ble **apVtabLock
21e00 3b 20 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74  ;       /* Point
21e10 65 72 20 74 6f 20 76 69 72 74 75 61 6c 20 74 61  er to virtual ta
21e20 62 6c 65 73 20 6e 65 65 64 69 6e 67 20 6c 6f 63  bles needing loc
21e30 6b 69 6e 67 20 2a 2f 0a 23 65 6e 64 69 66 0a 20  king */.#endif. 
21e40 20 54 61 62 6c 65 20 2a 70 5a 6f 6d 62 69 65 54   Table *pZombieT
21e50 61 62 3b 20 20 20 20 20 20 20 20 2f 2a 20 4c 69  ab;        /* Li
21e60 73 74 20 6f 66 20 54 61 62 6c 65 20 6f 62 6a 65  st of Table obje
21e70 63 74 73 20 74 6f 20 64 65 6c 65 74 65 20 61 66  cts to delete af
21e80 74 65 72 20 63 6f 64 65 20 67 65 6e 20 2a 2f 0a  ter code gen */.
21e90 20 20 54 72 69 67 67 65 72 50 72 67 20 2a 70 54    TriggerPrg *pT
21ea0 72 69 67 67 65 72 50 72 67 3b 20 20 2f 2a 20 4c  riggerPrg;  /* L
21eb0 69 6e 6b 65 64 20 6c 69 73 74 20 6f 66 20 63 6f  inked list of co
21ec0 64 65 64 20 74 72 69 67 67 65 72 73 20 2a 2f 0a  ded triggers */.
21ed0 20 20 57 69 74 68 20 2a 70 57 69 74 68 3b 20 20    With *pWith;  
21ee0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43              /* C
21ef0 75 72 72 65 6e 74 20 57 49 54 48 20 63 6c 61 75  urrent WITH clau
21f00 73 65 2c 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 20  se, or NULL */. 
21f10 20 57 69 74 68 20 2a 70 57 69 74 68 54 6f 46 72   With *pWithToFr
21f20 65 65 3b 20 20 20 20 20 20 20 20 2f 2a 20 46 72  ee;        /* Fr
21f30 65 65 20 74 68 69 73 20 57 49 54 48 20 6f 62 6a  ee this WITH obj
21f40 65 63 74 20 61 74 20 74 68 65 20 65 6e 64 20 6f  ect at the end o
21f50 66 20 74 68 65 20 70 61 72 73 65 20 2a 2f 0a 23  f the parse */.#
21f60 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
21f70 49 54 5f 41 4c 54 45 52 54 41 42 4c 45 0a 20 20  IT_ALTERTABLE.  
21f80 52 65 6e 61 6d 65 54 6f 6b 65 6e 20 2a 70 52 65  RenameToken *pRe
21f90 6e 61 6d 65 3b 20 20 20 20 20 2f 2a 20 54 6f 6b  name;     /* Tok
21fa0 65 6e 73 20 73 75 62 6a 65 63 74 20 74 6f 20 72  ens subject to r
21fb0 65 6e 61 6d 69 6e 67 20 62 79 20 41 4c 54 45 52  enaming by ALTER
21fc0 20 54 41 42 4c 45 20 2a 2f 0a 23 65 6e 64 69 66   TABLE */.#endif
21fd0 0a 7d 3b 0a 0a 23 64 65 66 69 6e 65 20 50 41 52  .};..#define PAR
21fe0 53 45 5f 4d 4f 44 45 5f 4e 4f 52 4d 41 4c 20 20  SE_MODE_NORMAL  
21ff0 20 20 20 20 20 20 30 0a 23 64 65 66 69 6e 65 20        0.#define 
22000 50 41 52 53 45 5f 4d 4f 44 45 5f 44 45 43 4c 41  PARSE_MODE_DECLA
22010 52 45 5f 56 54 41 42 20 20 31 0a 23 64 65 66 69  RE_VTAB  1.#defi
22020 6e 65 20 50 41 52 53 45 5f 4d 4f 44 45 5f 52 45  ne PARSE_MODE_RE
22030 4e 41 4d 45 5f 43 4f 4c 55 4d 4e 20 32 0a 23 64  NAME_COLUMN 2.#d
22040 65 66 69 6e 65 20 50 41 52 53 45 5f 4d 4f 44 45  efine PARSE_MODE
22050 5f 52 45 4e 41 4d 45 5f 54 41 42 4c 45 20 20 33  _RENAME_TABLE  3
22060 0a 0a 2f 2a 0a 2a 2a 20 53 69 7a 65 73 20 61 6e  ../*.** Sizes an
22070 64 20 70 6f 69 6e 74 65 72 73 20 6f 66 20 76 61  d pointers of va
22080 72 69 6f 75 73 20 70 61 72 74 73 20 6f 66 20 74  rious parts of t
22090 68 65 20 50 61 72 73 65 20 6f 62 6a 65 63 74 2e  he Parse object.
220a0 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 50 41 52 53  .*/.#define PARS
220b0 45 5f 48 44 52 5f 53 5a 20 6f 66 66 73 65 74 6f  E_HDR_SZ offseto
220c0 66 28 50 61 72 73 65 2c 61 54 65 6d 70 52 65 67  f(Parse,aTempReg
220d0 29 20 2f 2a 20 52 65 63 75 72 73 69 76 65 20 70  ) /* Recursive p
220e0 61 72 74 20 77 2f 6f 20 61 43 6f 6c 43 61 63 68  art w/o aColCach
220f0 65 2a 2f 0a 23 64 65 66 69 6e 65 20 50 41 52 53  e*/.#define PARS
22100 45 5f 52 45 43 55 52 53 45 5f 53 5a 20 6f 66 66  E_RECURSE_SZ off
22110 73 65 74 6f 66 28 50 61 72 73 65 2c 73 4c 61 73  setof(Parse,sLas
22120 74 54 6f 6b 65 6e 29 20 20 20 20 2f 2a 20 52 65  tToken)    /* Re
22130 63 75 72 73 69 76 65 20 70 61 72 74 20 2a 2f 0a  cursive part */.
22140 23 64 65 66 69 6e 65 20 50 41 52 53 45 5f 54 41  #define PARSE_TA
22150 49 4c 5f 53 5a 20 28 73 69 7a 65 6f 66 28 50 61  IL_SZ (sizeof(Pa
22160 72 73 65 29 2d 50 41 52 53 45 5f 52 45 43 55 52  rse)-PARSE_RECUR
22170 53 45 5f 53 5a 29 20 2f 2a 20 4e 6f 6e 2d 72 65  SE_SZ) /* Non-re
22180 63 75 72 73 69 76 65 20 70 61 72 74 20 2a 2f 0a  cursive part */.
22190 23 64 65 66 69 6e 65 20 50 41 52 53 45 5f 54 41  #define PARSE_TA
221a0 49 4c 28 58 29 20 28 28 28 63 68 61 72 2a 29 28  IL(X) (((char*)(
221b0 58 29 29 2b 50 41 52 53 45 5f 52 45 43 55 52 53  X))+PARSE_RECURS
221c0 45 5f 53 5a 29 20 20 2f 2a 20 50 6f 69 6e 74 65  E_SZ)  /* Pointe
221d0 72 20 74 6f 20 74 61 69 6c 20 2a 2f 0a 0a 2f 2a  r to tail */../*
221e0 0a 2a 2a 20 52 65 74 75 72 6e 20 74 72 75 65 20  .** Return true 
221f0 69 66 20 63 75 72 72 65 6e 74 6c 79 20 69 6e 73  if currently ins
22200 69 64 65 20 61 6e 20 73 71 6c 69 74 65 33 5f 64  ide an sqlite3_d
22210 65 63 6c 61 72 65 5f 76 74 61 62 28 29 20 63 61  eclare_vtab() ca
22220 6c 6c 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51  ll..*/.#ifdef SQ
22230 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
22240 4c 54 41 42 4c 45 0a 20 20 23 64 65 66 69 6e 65  LTABLE.  #define
22250 20 49 4e 5f 44 45 43 4c 41 52 45 5f 56 54 41 42   IN_DECLARE_VTAB
22260 20 30 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69   0.#else.  #defi
22270 6e 65 20 49 4e 5f 44 45 43 4c 41 52 45 5f 56 54  ne IN_DECLARE_VT
22280 41 42 20 28 70 50 61 72 73 65 2d 3e 65 50 61 72  AB (pParse->ePar
22290 73 65 4d 6f 64 65 3d 3d 50 41 52 53 45 5f 4d 4f  seMode==PARSE_MO
222a0 44 45 5f 44 45 43 4c 41 52 45 5f 56 54 41 42 29  DE_DECLARE_VTAB)
222b0 0a 23 65 6e 64 69 66 0a 0a 23 69 66 20 64 65 66  .#endif..#if def
222c0 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54  ined(SQLITE_OMIT
222d0 5f 41 4c 54 45 52 54 41 42 4c 45 29 0a 20 20 23  _ALTERTABLE).  #
222e0 64 65 66 69 6e 65 20 49 4e 5f 52 45 4e 41 4d 45  define IN_RENAME
222f0 5f 4f 42 4a 45 43 54 20 30 0a 23 65 6c 73 65 0a  _OBJECT 0.#else.
22300 20 20 23 64 65 66 69 6e 65 20 49 4e 5f 52 45 4e    #define IN_REN
22310 41 4d 45 5f 4f 42 4a 45 43 54 20 28 70 50 61 72  AME_OBJECT (pPar
22320 73 65 2d 3e 65 50 61 72 73 65 4d 6f 64 65 3e 3d  se->eParseMode>=
22330 50 41 52 53 45 5f 4d 4f 44 45 5f 52 45 4e 41 4d  PARSE_MODE_RENAM
22340 45 5f 43 4f 4c 55 4d 4e 29 0a 23 65 6e 64 69 66  E_COLUMN).#endif
22350 0a 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51  ..#if defined(SQ
22360 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
22370 4c 54 41 42 4c 45 29 20 26 26 20 64 65 66 69 6e  LTABLE) && defin
22380 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41  ed(SQLITE_OMIT_A
22390 4c 54 45 52 54 41 42 4c 45 29 0a 20 20 23 64 65  LTERTABLE).  #de
223a0 66 69 6e 65 20 49 4e 5f 53 50 45 43 49 41 4c 5f  fine IN_SPECIAL_
223b0 50 41 52 53 45 20 30 0a 23 65 6c 73 65 0a 20 20  PARSE 0.#else.  
223c0 23 64 65 66 69 6e 65 20 49 4e 5f 53 50 45 43 49  #define IN_SPECI
223d0 41 4c 5f 50 41 52 53 45 20 28 70 50 61 72 73 65  AL_PARSE (pParse
223e0 2d 3e 65 50 61 72 73 65 4d 6f 64 65 21 3d 50 41  ->eParseMode!=PA
223f0 52 53 45 5f 4d 4f 44 45 5f 4e 4f 52 4d 41 4c 29  RSE_MODE_NORMAL)
22400 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41  .#endif../*.** A
22410 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  n instance of th
22420 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75  e following stru
22430 63 74 75 72 65 20 63 61 6e 20 62 65 20 64 65 63  cture can be dec
22440 6c 61 72 65 64 20 6f 6e 20 61 20 73 74 61 63 6b  lared on a stack
22450 20 61 6e 64 20 75 73 65 64 0a 2a 2a 20 74 6f 20   and used.** to 
22460 73 61 76 65 20 74 68 65 20 50 61 72 73 65 2e 7a  save the Parse.z
22470 41 75 74 68 43 6f 6e 74 65 78 74 20 76 61 6c 75  AuthContext valu
22480 65 20 73 6f 20 74 68 61 74 20 69 74 20 63 61 6e  e so that it can
22490 20 62 65 20 72 65 73 74 6f 72 65 64 20 6c 61 74   be restored lat
224a0 65 72 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 41 75  er..*/.struct Au
224b0 74 68 43 6f 6e 74 65 78 74 20 7b 0a 20 20 63 6f  thContext {.  co
224c0 6e 73 74 20 63 68 61 72 20 2a 7a 41 75 74 68 43  nst char *zAuthC
224d0 6f 6e 74 65 78 74 3b 20 20 20 2f 2a 20 50 75 74  ontext;   /* Put
224e0 20 73 61 76 65 64 20 50 61 72 73 65 2e 7a 41 75   saved Parse.zAu
224f0 74 68 43 6f 6e 74 65 78 74 20 68 65 72 65 20 2a  thContext here *
22500 2f 0a 20 20 50 61 72 73 65 20 2a 70 50 61 72 73  /.  Parse *pPars
22510 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e;              
22520 2f 2a 20 54 68 65 20 50 61 72 73 65 20 73 74 72  /* The Parse str
22530 75 63 74 75 72 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  ucture */.};../*
22540 0a 2a 2a 20 42 69 74 66 69 65 6c 64 20 66 6c 61  .** Bitfield fla
22550 67 73 20 66 6f 72 20 50 35 20 76 61 6c 75 65 20  gs for P5 value 
22560 69 6e 20 76 61 72 69 6f 75 73 20 6f 70 63 6f 64  in various opcod
22570 65 73 2e 0a 2a 2a 0a 2a 2a 20 56 61 6c 75 65 20  es..**.** Value 
22580 63 6f 6e 73 74 72 61 69 6e 74 73 20 28 65 6e 66  constraints (enf
22590 6f 72 63 65 64 20 76 69 61 20 61 73 73 65 72 74  orced via assert
225a0 28 29 29 3a 0a 2a 2a 20 20 20 20 4f 50 46 4c 41  ()):.**    OPFLA
225b0 47 5f 4c 45 4e 47 54 48 41 52 47 20 20 20 20 3d  G_LENGTHARG    =
225c0 3d 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4c 45  = SQLITE_FUNC_LE
225d0 4e 47 54 48 0a 2a 2a 20 20 20 20 4f 50 46 4c 41  NGTH.**    OPFLA
225e0 47 5f 54 59 50 45 4f 46 41 52 47 20 20 20 20 3d  G_TYPEOFARG    =
225f0 3d 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 54 59  = SQLITE_FUNC_TY
22600 50 45 4f 46 0a 2a 2a 20 20 20 20 4f 50 46 4c 41  PEOF.**    OPFLA
22610 47 5f 42 55 4c 4b 43 53 52 20 20 20 20 20 20 3d  G_BULKCSR      =
22620 3d 20 42 54 52 45 45 5f 42 55 4c 4b 4c 4f 41 44  = BTREE_BULKLOAD
22630 0a 2a 2a 20 20 20 20 4f 50 46 4c 41 47 5f 53 45  .**    OPFLAG_SE
22640 45 4b 45 51 20 20 20 20 20 20 20 3d 3d 20 42 54  EKEQ       == BT
22650 52 45 45 5f 53 45 45 4b 5f 45 51 0a 2a 2a 20 20  REE_SEEK_EQ.**  
22660 20 20 4f 50 46 4c 41 47 5f 46 4f 52 44 45 4c 45    OPFLAG_FORDELE
22670 54 45 20 20 20 20 3d 3d 20 42 54 52 45 45 5f 46  TE    == BTREE_F
22680 4f 52 44 45 4c 45 54 45 0a 2a 2a 20 20 20 20 4f  ORDELETE.**    O
22690 50 46 4c 41 47 5f 53 41 56 45 50 4f 53 49 54 49  PFLAG_SAVEPOSITI
226a0 4f 4e 20 3d 3d 20 42 54 52 45 45 5f 53 41 56 45  ON == BTREE_SAVE
226b0 50 4f 53 49 54 49 4f 4e 0a 2a 2a 20 20 20 20 4f  POSITION.**    O
226c0 50 46 4c 41 47 5f 41 55 58 44 45 4c 45 54 45 20  PFLAG_AUXDELETE 
226d0 20 20 20 3d 3d 20 42 54 52 45 45 5f 41 55 58 44     == BTREE_AUXD
226e0 45 4c 45 54 45 0a 2a 2f 0a 23 64 65 66 69 6e 65  ELETE.*/.#define
226f0 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20   OPFLAG_NCHANGE 
22700 20 20 20 20 20 20 30 78 30 31 20 20 20 20 2f 2a        0x01    /*
22710 20 4f 50 5f 49 6e 73 65 72 74 3a 20 53 65 74 20   OP_Insert: Set 
22720 74 6f 20 75 70 64 61 74 65 20 64 62 2d 3e 6e 43  to update db->nC
22730 68 61 6e 67 65 20 2a 2f 0a 20 20 20 20 20 20 20  hange */.       
22740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
22760 20 41 6c 73 6f 20 75 73 65 64 20 69 6e 20 50 32   Also used in P2
22770 20 28 6e 6f 74 20 50 35 29 20 6f 66 20 4f 50 5f   (not P5) of OP_
22780 44 65 6c 65 74 65 20 2a 2f 0a 23 64 65 66 69 6e  Delete */.#defin
22790 65 20 4f 50 46 4c 41 47 5f 4e 4f 43 48 4e 47 20  e OPFLAG_NOCHNG 
227a0 20 20 20 20 20 20 20 30 78 30 31 20 20 20 20 2f         0x01    /
227b0 2a 20 4f 50 5f 56 43 6f 6c 75 6d 6e 20 6e 6f 63  * OP_VColumn noc
227c0 68 61 6e 67 65 20 66 6f 72 20 55 50 44 41 54 45  hange for UPDATE
227d0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c   */.#define OPFL
227e0 41 47 5f 45 50 48 45 4d 20 20 20 20 20 20 20 20  AG_EPHEM        
227f0 20 30 78 30 31 20 20 20 20 2f 2a 20 4f 50 5f 43   0x01    /* OP_C
22800 6f 6c 75 6d 6e 3a 20 45 70 68 65 6d 65 72 61 6c  olumn: Ephemeral
22810 20 6f 75 74 70 75 74 20 69 73 20 6f 6b 20 2a 2f   output is ok */
22820 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f  .#define OPFLAG_
22830 4c 41 53 54 52 4f 57 49 44 20 20 20 20 20 30 78  LASTROWID     0x
22840 32 30 20 20 20 20 2f 2a 20 53 65 74 20 74 6f 20  20    /* Set to 
22850 75 70 64 61 74 65 20 64 62 2d 3e 6c 61 73 74 52  update db->lastR
22860 6f 77 69 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20  owid */.#define 
22870 4f 50 46 4c 41 47 5f 49 53 55 50 44 41 54 45 20  OPFLAG_ISUPDATE 
22880 20 20 20 20 20 30 78 30 34 20 20 20 20 2f 2a 20       0x04    /* 
22890 54 68 69 73 20 4f 50 5f 49 6e 73 65 72 74 20 69  This OP_Insert i
228a0 73 20 61 6e 20 73 71 6c 20 55 50 44 41 54 45 20  s an sql UPDATE 
228b0 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41  */.#define OPFLA
228c0 47 5f 41 50 50 45 4e 44 20 20 20 20 20 20 20 20  G_APPEND        
228d0 30 78 30 38 20 20 20 20 2f 2a 20 54 68 69 73 20  0x08    /* This 
228e0 69 73 20 6c 69 6b 65 6c 79 20 74 6f 20 62 65 20  is likely to be 
228f0 61 6e 20 61 70 70 65 6e 64 20 2a 2f 0a 23 64 65  an append */.#de
22900 66 69 6e 65 20 4f 50 46 4c 41 47 5f 55 53 45 53  fine OPFLAG_USES
22910 45 45 4b 52 45 53 55 4c 54 20 30 78 31 30 20 20  EEKRESULT 0x10  
22920 20 20 2f 2a 20 54 72 79 20 74 6f 20 61 76 6f 69    /* Try to avoi
22930 64 20 61 20 73 65 65 6b 20 69 6e 20 42 74 72 65  d a seek in Btre
22940 65 49 6e 73 65 72 74 28 29 20 2a 2f 0a 23 64 65  eInsert() */.#de
22950 66 69 6e 65 20 4f 50 46 4c 41 47 5f 49 53 4e 4f  fine OPFLAG_ISNO
22960 4f 50 20 20 20 20 20 20 20 20 30 78 34 30 20 20  OP        0x40  
22970 20 20 2f 2a 20 4f 50 5f 44 65 6c 65 74 65 20 64    /* OP_Delete d
22980 6f 65 73 20 70 72 65 2d 75 70 64 61 74 65 2d 68  oes pre-update-h
22990 6f 6f 6b 20 6f 6e 6c 79 20 2a 2f 0a 23 64 65 66  ook only */.#def
229a0 69 6e 65 20 4f 50 46 4c 41 47 5f 4c 45 4e 47 54  ine OPFLAG_LENGT
229b0 48 41 52 47 20 20 20 20 20 30 78 34 30 20 20 20  HARG     0x40   
229c0 20 2f 2a 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 6e   /* OP_Column on
229d0 6c 79 20 75 73 65 64 20 66 6f 72 20 6c 65 6e 67  ly used for leng
229e0 74 68 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20  th() */.#define 
229f0 4f 50 46 4c 41 47 5f 54 59 50 45 4f 46 41 52 47  OPFLAG_TYPEOFARG
22a00 20 20 20 20 20 30 78 38 30 20 20 20 20 2f 2a 20       0x80    /* 
22a10 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 6e 6c 79 20 75  OP_Column only u
22a20 73 65 64 20 66 6f 72 20 74 79 70 65 6f 66 28 29  sed for typeof()
22a30 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c   */.#define OPFL
22a40 41 47 5f 42 55 4c 4b 43 53 52 20 20 20 20 20 20  AG_BULKCSR      
22a50 20 30 78 30 31 20 20 20 20 2f 2a 20 4f 50 5f 4f   0x01    /* OP_O
22a60 70 65 6e 2a 2a 20 75 73 65 64 20 74 6f 20 6f 70  pen** used to op
22a70 65 6e 20 62 75 6c 6b 20 63 75 72 73 6f 72 20 2a  en bulk cursor *
22a80 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47  /.#define OPFLAG
22a90 5f 53 45 45 4b 45 51 20 20 20 20 20 20 20 20 30  _SEEKEQ        0
22aa0 78 30 32 20 20 20 20 2f 2a 20 4f 50 5f 4f 70 65  x02    /* OP_Ope
22ab0 6e 2a 2a 20 63 75 72 73 6f 72 20 75 73 65 73 20  n** cursor uses 
22ac0 45 51 20 73 65 65 6b 20 6f 6e 6c 79 20 2a 2f 0a  EQ seek only */.
22ad0 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 46  #define OPFLAG_F
22ae0 4f 52 44 45 4c 45 54 45 20 20 20 20 20 30 78 30  ORDELETE     0x0
22af0 38 20 20 20 20 2f 2a 20 4f 50 5f 4f 70 65 6e 20  8    /* OP_Open 
22b00 73 68 6f 75 6c 64 20 75 73 65 20 42 54 52 45 45  should use BTREE
22b10 5f 46 4f 52 44 45 4c 45 54 45 20 2a 2f 0a 23 64  _FORDELETE */.#d
22b20 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 50 32 49  efine OPFLAG_P2I
22b30 53 52 45 47 20 20 20 20 20 20 20 30 78 31 30 20  SREG       0x10 
22b40 20 20 20 2f 2a 20 50 32 20 74 6f 20 4f 50 5f 4f     /* P2 to OP_O
22b50 70 65 6e 2a 2a 20 69 73 20 61 20 72 65 67 69 73  pen** is a regis
22b60 74 65 72 20 6e 75 6d 62 65 72 20 2a 2f 0a 23 64  ter number */.#d
22b70 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 50 45 52  efine OPFLAG_PER
22b80 4d 55 54 45 20 20 20 20 20 20 20 30 78 30 31 20  MUTE       0x01 
22b90 20 20 20 2f 2a 20 4f 50 5f 43 6f 6d 70 61 72 65     /* OP_Compare
22ba0 3a 20 75 73 65 20 74 68 65 20 70 65 72 6d 75 74  : use the permut
22bb0 61 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65  ation */.#define
22bc0 20 4f 50 46 4c 41 47 5f 53 41 56 45 50 4f 53 49   OPFLAG_SAVEPOSI
22bd0 54 49 4f 4e 20 20 30 78 30 32 20 20 20 20 2f 2a  TION  0x02    /*
22be0 20 4f 50 5f 44 65 6c 65 74 65 2f 49 6e 73 65 72   OP_Delete/Inser
22bf0 74 3a 20 73 61 76 65 20 63 75 72 73 6f 72 20 70  t: save cursor p
22c00 6f 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50  os */.#define OP
22c10 46 4c 41 47 5f 41 55 58 44 45 4c 45 54 45 20 20  FLAG_AUXDELETE  
22c20 20 20 20 30 78 30 34 20 20 20 20 2f 2a 20 4f 50     0x04    /* OP
22c30 5f 44 65 6c 65 74 65 3a 20 69 6e 64 65 78 20 69  _Delete: index i
22c40 6e 20 61 20 44 45 4c 45 54 45 20 6f 70 20 2a 2f  n a DELETE op */
22c50 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f  .#define OPFLAG_
22c60 4e 4f 43 48 4e 47 5f 4d 41 47 49 43 20 20 30 78  NOCHNG_MAGIC  0x
22c70 36 64 20 20 20 20 2f 2a 20 4f 50 5f 4d 61 6b 65  6d    /* OP_Make
22c80 52 65 63 6f 72 64 3a 20 73 65 72 69 61 6c 74 79  Record: serialty
22c90 70 65 20 31 30 20 69 73 20 6f 6b 20 2a 2f 0a 0a  pe 10 is ok */..
22ca0 2f 2a 0a 20 2a 20 45 61 63 68 20 74 72 69 67 67  /*. * Each trigg
22cb0 65 72 20 70 72 65 73 65 6e 74 20 69 6e 20 74 68  er present in th
22cc0 65 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d  e database schem
22cd0 61 20 69 73 20 73 74 6f 72 65 64 20 61 73 20 61  a is stored as a
22ce0 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 0a 20 2a  n instance of. *
22cf0 20 73 74 72 75 63 74 20 54 72 69 67 67 65 72 2e   struct Trigger.
22d00 0a 20 2a 0a 20 2a 20 50 6f 69 6e 74 65 72 73 20  . *. * Pointers 
22d10 74 6f 20 69 6e 73 74 61 6e 63 65 73 20 6f 66 20  to instances of 
22d20 73 74 72 75 63 74 20 54 72 69 67 67 65 72 20 61  struct Trigger a
22d30 72 65 20 73 74 6f 72 65 64 20 69 6e 20 74 77 6f  re stored in two
22d40 20 77 61 79 73 2e 0a 20 2a 20 31 2e 20 49 6e 20   ways.. * 1. In 
22d50 74 68 65 20 22 74 72 69 67 48 61 73 68 22 20 68  the "trigHash" h
22d60 61 73 68 20 74 61 62 6c 65 20 28 70 61 72 74 20  ash table (part 
22d70 6f 66 20 74 68 65 20 73 71 6c 69 74 65 33 2a 20  of the sqlite3* 
22d80 74 68 61 74 20 72 65 70 72 65 73 65 6e 74 73 20  that represents 
22d90 74 68 65 0a 20 2a 20 20 20 20 64 61 74 61 62 61  the. *    databa
22da0 73 65 29 2e 20 54 68 69 73 20 61 6c 6c 6f 77 73  se). This allows
22db0 20 54 72 69 67 67 65 72 20 73 74 72 75 63 74 75   Trigger structu
22dc0 72 65 73 20 74 6f 20 62 65 20 72 65 74 72 69 65  res to be retrie
22dd0 76 65 64 20 62 79 20 6e 61 6d 65 2e 0a 20 2a 20  ved by name.. * 
22de0 32 2e 20 41 6c 6c 20 74 72 69 67 67 65 72 73 20  2. All triggers 
22df0 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20  associated with 
22e00 61 20 73 69 6e 67 6c 65 20 74 61 62 6c 65 20 66  a single table f
22e10 6f 72 6d 20 61 20 6c 69 6e 6b 65 64 20 6c 69 73  orm a linked lis
22e20 74 2c 20 75 73 69 6e 67 20 74 68 65 0a 20 2a 20  t, using the. * 
22e30 20 20 20 70 4e 65 78 74 20 6d 65 6d 62 65 72 20     pNext member 
22e40 6f 66 20 73 74 72 75 63 74 20 54 72 69 67 67 65  of struct Trigge
22e50 72 2e 20 41 20 70 6f 69 6e 74 65 72 20 74 6f 20  r. A pointer to 
22e60 74 68 65 20 66 69 72 73 74 20 65 6c 65 6d 65 6e  the first elemen
22e70 74 20 6f 66 20 74 68 65 0a 20 2a 20 20 20 20 6c  t of the. *    l
22e80 69 6e 6b 65 64 20 6c 69 73 74 20 69 73 20 73 74  inked list is st
22e90 6f 72 65 64 20 61 73 20 74 68 65 20 22 70 54 72  ored as the "pTr
22ea0 69 67 67 65 72 22 20 6d 65 6d 62 65 72 20 6f 66  igger" member of
22eb0 20 74 68 65 20 61 73 73 6f 63 69 61 74 65 64 0a   the associated.
22ec0 20 2a 20 20 20 20 73 74 72 75 63 74 20 54 61 62   *    struct Tab
22ed0 6c 65 2e 0a 20 2a 0a 20 2a 20 54 68 65 20 22 73  le.. *. * The "s
22ee0 74 65 70 5f 6c 69 73 74 22 20 6d 65 6d 62 65 72  tep_list" member
22ef0 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 66   points to the f
22f00 69 72 73 74 20 65 6c 65 6d 65 6e 74 20 6f 66 20  irst element of 
22f10 61 20 6c 69 6e 6b 65 64 20 6c 69 73 74 0a 20 2a  a linked list. *
22f20 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20   containing the 
22f30 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 73  SQL statements s
22f40 70 65 63 69 66 69 65 64 20 61 73 20 74 68 65 20  pecified as the 
22f50 74 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d 2e  trigger program.
22f60 0a 20 2a 2f 0a 73 74 72 75 63 74 20 54 72 69 67  . */.struct Trig
22f70 67 65 72 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e  ger {.  char *zN
22f80 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ame;            
22f90 2f 2a 20 54 68 65 20 6e 61 6d 65 20 6f 66 20 74  /* The name of t
22fa0 68 65 20 74 72 69 67 67 65 72 20 20 20 20 20 20  he trigger      
22fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22fc0 20 20 2a 2f 0a 20 20 63 68 61 72 20 2a 74 61 62    */.  char *tab
22fd0 6c 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  le;            /
22fe0 2a 20 54 68 65 20 74 61 62 6c 65 20 6f 72 20 76  * The table or v
22ff0 69 65 77 20 74 6f 20 77 68 69 63 68 20 74 68 65  iew to which the
23000 20 74 72 69 67 67 65 72 20 61 70 70 6c 69 65 73   trigger applies
23010 20 2a 2f 0a 20 20 75 38 20 6f 70 3b 20 20 20 20   */.  u8 op;    
23020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
23030 20 4f 6e 65 20 6f 66 20 54 4b 5f 44 45 4c 45 54   One of TK_DELET
23040 45 2c 20 54 4b 5f 55 50 44 41 54 45 2c 20 54 4b  E, TK_UPDATE, TK
23050 5f 49 4e 53 45 52 54 20 20 20 20 20 20 20 20 20  _INSERT         
23060 2a 2f 0a 20 20 75 38 20 74 72 5f 74 6d 3b 20 20  */.  u8 tr_tm;  
23070 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
23080 4f 6e 65 20 6f 66 20 54 52 49 47 47 45 52 5f 42  One of TRIGGER_B
23090 45 46 4f 52 45 2c 20 54 52 49 47 47 45 52 5f 41  EFORE, TRIGGER_A
230a0 46 54 45 52 20 2a 2f 0a 20 20 45 78 70 72 20 2a  FTER */.  Expr *
230b0 70 57 68 65 6e 3b 20 20 20 20 20 20 20 20 20 20  pWhen;          
230c0 20 20 2f 2a 20 54 68 65 20 57 48 45 4e 20 63 6c    /* The WHEN cl
230d0 61 75 73 65 20 6f 66 20 74 68 65 20 65 78 70 72  ause of the expr
230e0 65 73 73 69 6f 6e 20 28 6d 61 79 20 62 65 20 4e  ession (may be N
230f0 55 4c 4c 29 20 2a 2f 0a 20 20 49 64 4c 69 73 74  ULL) */.  IdList
23100 20 2a 70 43 6f 6c 75 6d 6e 73 3b 20 20 20 20 20   *pColumns;     
23110 20 20 2f 2a 20 49 66 20 74 68 69 73 20 69 73 20    /* If this is 
23120 61 6e 20 55 50 44 41 54 45 20 4f 46 20 3c 63 6f  an UPDATE OF <co
23130 6c 75 6d 6e 2d 6c 69 73 74 3e 20 74 72 69 67 67  lumn-list> trigg
23140 65 72 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  er,.            
23150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23160 20 74 68 65 20 3c 63 6f 6c 75 6d 6e 2d 6c 69 73   the <column-lis
23170 74 3e 20 69 73 20 73 74 6f 72 65 64 20 68 65 72  t> is stored her
23180 65 20 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70  e */.  Schema *p
23190 53 63 68 65 6d 61 3b 20 20 20 20 20 20 20 20 2f  Schema;        /
231a0 2a 20 53 63 68 65 6d 61 20 63 6f 6e 74 61 69 6e  * Schema contain
231b0 69 6e 67 20 74 68 65 20 74 72 69 67 67 65 72 20  ing the trigger 
231c0 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70 54 61  */.  Schema *pTa
231d0 62 53 63 68 65 6d 61 3b 20 20 20 20 20 2f 2a 20  bSchema;     /* 
231e0 53 63 68 65 6d 61 20 63 6f 6e 74 61 69 6e 69 6e  Schema containin
231f0 67 20 74 68 65 20 74 61 62 6c 65 20 2a 2f 0a 20  g the table */. 
23200 20 54 72 69 67 67 65 72 53 74 65 70 20 2a 73 74   TriggerStep *st
23210 65 70 5f 6c 69 73 74 3b 20 2f 2a 20 4c 69 6e 6b  ep_list; /* Link
23220 20 6c 69 73 74 20 6f 66 20 74 72 69 67 67 65 72   list of trigger
23230 20 70 72 6f 67 72 61 6d 20 73 74 65 70 73 20 20   program steps  
23240 20 20 20 20 20 20 20 20 20 20 20 2a 2f 0a 20 20             */.  
23250 54 72 69 67 67 65 72 20 2a 70 4e 65 78 74 3b 20  Trigger *pNext; 
23260 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20          /* Next 
23270 74 72 69 67 67 65 72 20 61 73 73 6f 63 69 61 74  trigger associat
23280 65 64 20 77 69 74 68 20 74 68 65 20 74 61 62 6c  ed with the tabl
23290 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41  e */.};../*.** A
232a0 20 74 72 69 67 67 65 72 20 69 73 20 65 69 74 68   trigger is eith
232b0 65 72 20 61 20 42 45 46 4f 52 45 20 6f 72 20 61  er a BEFORE or a
232c0 6e 20 41 46 54 45 52 20 74 72 69 67 67 65 72 2e  n AFTER trigger.
232d0 20 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20    The following 
232e0 63 6f 6e 73 74 61 6e 74 73 0a 2a 2a 20 64 65 74  constants.** det
232f0 65 72 6d 69 6e 65 20 77 68 69 63 68 2e 0a 2a 2a  ermine which..**
23300 0a 2a 2a 20 49 66 20 74 68 65 72 65 20 61 72 65  .** If there are
23310 20 6d 75 6c 74 69 70 6c 65 20 74 72 69 67 67 65   multiple trigge
23320 72 73 2c 20 79 6f 75 20 6d 69 67 68 74 20 6f 66  rs, you might of
23330 20 73 6f 6d 65 20 42 45 46 4f 52 45 20 61 6e 64   some BEFORE and
23340 20 73 6f 6d 65 20 41 46 54 45 52 2e 0a 2a 2a 20   some AFTER..** 
23350 49 6e 20 74 68 61 74 20 63 61 73 65 73 2c 20 74  In that cases, t
23360 68 65 20 63 6f 6e 73 74 61 6e 74 73 20 62 65 6c  he constants bel
23370 6f 77 20 63 61 6e 20 62 65 20 4f 52 65 64 20 74  ow can be ORed t
23380 6f 67 65 74 68 65 72 2e 0a 2a 2f 0a 23 64 65 66  ogether..*/.#def
23390 69 6e 65 20 54 52 49 47 47 45 52 5f 42 45 46 4f  ine TRIGGER_BEFO
233a0 52 45 20 20 31 0a 23 64 65 66 69 6e 65 20 54 52  RE  1.#define TR
233b0 49 47 47 45 52 5f 41 46 54 45 52 20 20 20 32 0a  IGGER_AFTER   2.
233c0 0a 2f 2a 0a 20 2a 20 41 6e 20 69 6e 73 74 61 6e  ./*. * An instan
233d0 63 65 20 6f 66 20 73 74 72 75 63 74 20 54 72 69  ce of struct Tri
233e0 67 67 65 72 53 74 65 70 20 69 73 20 75 73 65 64  ggerStep is used
233f0 20 74 6f 20 73 74 6f 72 65 20 61 20 73 69 6e 67   to store a sing
23400 6c 65 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74  le SQL statement
23410 0a 20 2a 20 74 68 61 74 20 69 73 20 61 20 70 61  . * that is a pa
23420 72 74 20 6f 66 20 61 20 74 72 69 67 67 65 72 2d  rt of a trigger-
23430 70 72 6f 67 72 61 6d 2e 0a 20 2a 0a 20 2a 20 49  program.. *. * I
23440 6e 73 74 61 6e 63 65 73 20 6f 66 20 73 74 72 75  nstances of stru
23450 63 74 20 54 72 69 67 67 65 72 53 74 65 70 20 61  ct TriggerStep a
23460 72 65 20 73 74 6f 72 65 64 20 69 6e 20 61 20 73  re stored in a s
23470 69 6e 67 6c 79 20 6c 69 6e 6b 65 64 20 6c 69 73  ingly linked lis
23480 74 20 28 6c 69 6e 6b 65 64 0a 20 2a 20 75 73 69  t (linked. * usi
23490 6e 67 20 74 68 65 20 22 70 4e 65 78 74 22 20 6d  ng the "pNext" m
234a0 65 6d 62 65 72 29 20 72 65 66 65 72 65 6e 63 65  ember) reference
234b0 64 20 62 79 20 74 68 65 20 22 73 74 65 70 5f 6c  d by the "step_l
234c0 69 73 74 22 20 6d 65 6d 62 65 72 20 6f 66 20 74  ist" member of t
234d0 68 65 0a 20 2a 20 61 73 73 6f 63 69 61 74 65 64  he. * associated
234e0 20 73 74 72 75 63 74 20 54 72 69 67 67 65 72 20   struct Trigger 
234f0 69 6e 73 74 61 6e 63 65 2e 20 54 68 65 20 66 69  instance. The fi
23500 72 73 74 20 65 6c 65 6d 65 6e 74 20 6f 66 20 74  rst element of t
23510 68 65 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 69  he linked list i
23520 73 0a 20 2a 20 74 68 65 20 66 69 72 73 74 20 73  s. * the first s
23530 74 65 70 20 6f 66 20 74 68 65 20 74 72 69 67 67  tep of the trigg
23540 65 72 2d 70 72 6f 67 72 61 6d 2e 0a 20 2a 0a 20  er-program.. *. 
23550 2a 20 54 68 65 20 22 6f 70 22 20 6d 65 6d 62 65  * The "op" membe
23560 72 20 69 6e 64 69 63 61 74 65 73 20 77 68 65 74  r indicates whet
23570 68 65 72 20 74 68 69 73 20 69 73 20 61 20 22 44  her this is a "D
23580 45 4c 45 54 45 22 2c 20 22 49 4e 53 45 52 54 22  ELETE", "INSERT"
23590 2c 20 22 55 50 44 41 54 45 22 20 6f 72 0a 20 2a  , "UPDATE" or. *
235a0 20 22 53 45 4c 45 43 54 22 20 73 74 61 74 65 6d   "SELECT" statem
235b0 65 6e 74 2e 20 54 68 65 20 6d 65 61 6e 69 6e 67  ent. The meaning
235c0 73 20 6f 66 20 74 68 65 20 6f 74 68 65 72 20 6d  s of the other m
235d0 65 6d 62 65 72 73 20 69 73 20 64 65 74 65 72 6d  embers is determ
235e0 69 6e 65 64 20 62 79 20 74 68 65 0a 20 2a 20 76  ined by the. * v
235f0 61 6c 75 65 20 6f 66 20 22 6f 70 22 20 61 73 20  alue of "op" as 
23600 66 6f 6c 6c 6f 77 73 3a 0a 20 2a 0a 20 2a 20 28  follows:. *. * (
23610 6f 70 20 3d 3d 20 54 4b 5f 49 4e 53 45 52 54 29  op == TK_INSERT)
23620 0a 20 2a 20 6f 72 63 6f 6e 66 20 20 20 20 2d 3e  . * orconf    ->
23630 20 73 74 6f 72 65 73 20 74 68 65 20 4f 4e 20 43   stores the ON C
23640 4f 4e 46 4c 49 43 54 20 61 6c 67 6f 72 69 74 68  ONFLICT algorith
23650 6d 0a 20 2a 20 70 53 65 6c 65 63 74 20 20 20 2d  m. * pSelect   -
23660 3e 20 49 66 20 74 68 69 73 20 69 73 20 61 6e 20  > If this is an 
23670 49 4e 53 45 52 54 20 49 4e 54 4f 20 2e 2e 2e 20  INSERT INTO ... 
23680 53 45 4c 45 43 54 20 2e 2e 2e 20 73 74 61 74 65  SELECT ... state
23690 6d 65 6e 74 2c 20 74 68 65 6e 0a 20 2a 20 20 20  ment, then. *   
236a0 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73 20             this 
236b0 73 74 6f 72 65 73 20 61 20 70 6f 69 6e 74 65 72  stores a pointer
236c0 20 74 6f 20 74 68 65 20 53 45 4c 45 43 54 20 73   to the SELECT s
236d0 74 61 74 65 6d 65 6e 74 2e 20 4f 74 68 65 72 77  tatement. Otherw
236e0 69 73 65 20 4e 55 4c 4c 2e 0a 20 2a 20 7a 54 61  ise NULL.. * zTa
236f0 72 67 65 74 20 20 20 2d 3e 20 44 65 71 75 6f 74  rget   -> Dequot
23700 65 64 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74  ed name of the t
23710 61 62 6c 65 20 74 6f 20 69 6e 73 65 72 74 20 69  able to insert i
23720 6e 74 6f 2e 0a 20 2a 20 70 45 78 70 72 4c 69 73  nto.. * pExprLis
23730 74 20 2d 3e 20 49 66 20 74 68 69 73 20 69 73 20  t -> If this is 
23740 61 6e 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 2e  an INSERT INTO .
23750 2e 2e 20 56 41 4c 55 45 53 20 2e 2e 2e 20 73 74  .. VALUES ... st
23760 61 74 65 6d 65 6e 74 2c 20 74 68 65 6e 0a 20 2a  atement, then. *
23770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
23780 69 73 20 73 74 6f 72 65 73 20 76 61 6c 75 65 73  is stores values
23790 20 74 6f 20 62 65 20 69 6e 73 65 72 74 65 64 2e   to be inserted.
237a0 20 4f 74 68 65 72 77 69 73 65 20 4e 55 4c 4c 2e   Otherwise NULL.
237b0 0a 20 2a 20 70 49 64 4c 69 73 74 20 20 20 2d 3e  . * pIdList   ->
237c0 20 49 66 20 74 68 69 73 20 69 73 20 61 6e 20 49   If this is an I
237d0 4e 53 45 52 54 20 49 4e 54 4f 20 2e 2e 2e 20 28  NSERT INTO ... (
237e0 3c 63 6f 6c 75 6d 6e 2d 6e 61 6d 65 73 3e 29 20  <column-names>) 
237f0 56 41 4c 55 45 53 20 2e 2e 2e 0a 20 2a 20 20 20  VALUES .... *   
23800 20 20 20 20 20 20 20 20 20 20 20 73 74 61 74 65             state
23810 6d 65 6e 74 2c 20 74 68 65 6e 20 74 68 69 73 20  ment, then this 
23820 73 74 6f 72 65 73 20 74 68 65 20 63 6f 6c 75 6d  stores the colum
23830 6e 2d 6e 61 6d 65 73 20 74 6f 20 62 65 0a 20 2a  n-names to be. *
23840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e                in
23850 73 65 72 74 65 64 20 69 6e 74 6f 2e 0a 20 2a 0a  serted into.. *.
23860 20 2a 20 28 6f 70 20 3d 3d 20 54 4b 5f 44 45 4c   * (op == TK_DEL
23870 45 54 45 29 0a 20 2a 20 7a 54 61 72 67 65 74 20  ETE). * zTarget 
23880 20 20 2d 3e 20 44 65 71 75 6f 74 65 64 20 6e 61    -> Dequoted na
23890 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20  me of the table 
238a0 74 6f 20 64 65 6c 65 74 65 20 66 72 6f 6d 2e 0a  to delete from..
238b0 20 2a 20 70 57 68 65 72 65 20 20 20 20 2d 3e 20   * pWhere    -> 
238c0 54 68 65 20 57 48 45 52 45 20 63 6c 61 75 73 65  The WHERE clause
238d0 20 6f 66 20 74 68 65 20 44 45 4c 45 54 45 20 73   of the DELETE s
238e0 74 61 74 65 6d 65 6e 74 20 69 66 20 6f 6e 65 20  tatement if one 
238f0 69 73 20 73 70 65 63 69 66 69 65 64 2e 0a 20 2a  is specified.. *
23900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4f 74                Ot
23910 68 65 72 77 69 73 65 20 4e 55 4c 4c 2e 0a 20 2a  herwise NULL.. *
23920 0a 20 2a 20 28 6f 70 20 3d 3d 20 54 4b 5f 55 50  . * (op == TK_UP
23930 44 41 54 45 29 0a 20 2a 20 7a 54 61 72 67 65 74  DATE). * zTarget
23940 20 20 20 2d 3e 20 44 65 71 75 6f 74 65 64 20 6e     -> Dequoted n
23950 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65  ame of the table
23960 20 74 6f 20 75 70 64 61 74 65 2e 0a 20 2a 20 70   to update.. * p
23970 57 68 65 72 65 20 20 20 20 2d 3e 20 54 68 65 20  Where    -> The 
23980 57 48 45 52 45 20 63 6c 61 75 73 65 20 6f 66 20  WHERE clause of 
23990 74 68 65 20 55 50 44 41 54 45 20 73 74 61 74 65  the UPDATE state
239a0 6d 65 6e 74 20 69 66 20 6f 6e 65 20 69 73 20 73  ment if one is s
239b0 70 65 63 69 66 69 65 64 2e 0a 20 2a 20 20 20 20  pecified.. *    
239c0 20 20 20 20 20 20 20 20 20 20 4f 74 68 65 72 77            Otherw
239d0 69 73 65 20 4e 55 4c 4c 2e 0a 20 2a 20 70 45 78  ise NULL.. * pEx
239e0 70 72 4c 69 73 74 20 2d 3e 20 41 20 6c 69 73 74  prList -> A list
239f0 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 73 20   of the columns 
23a00 74 6f 20 75 70 64 61 74 65 20 61 6e 64 20 74 68  to update and th
23a10 65 20 65 78 70 72 65 73 73 69 6f 6e 73 20 74 6f  e expressions to
23a20 20 75 70 64 61 74 65 0a 20 2a 20 20 20 20 20 20   update. *      
23a30 20 20 20 20 20 20 20 20 74 68 65 6d 20 74 6f 2e          them to.
23a40 20 53 65 65 20 73 71 6c 69 74 65 33 55 70 64 61   See sqlite3Upda
23a50 74 65 28 29 20 64 6f 63 75 6d 65 6e 74 61 74 69  te() documentati
23a60 6f 6e 20 6f 66 20 22 70 43 68 61 6e 67 65 73 22  on of "pChanges"
23a70 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  . *             
23a80 20 61 72 67 75 6d 65 6e 74 2e 0a 20 2a 0a 20 2a   argument.. *. *
23a90 2f 0a 73 74 72 75 63 74 20 54 72 69 67 67 65 72  /.struct Trigger
23aa0 53 74 65 70 20 7b 0a 20 20 75 38 20 6f 70 3b 20  Step {.  u8 op; 
23ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
23ac0 20 4f 6e 65 20 6f 66 20 54 4b 5f 44 45 4c 45 54   One of TK_DELET
23ad0 45 2c 20 54 4b 5f 55 50 44 41 54 45 2c 20 54 4b  E, TK_UPDATE, TK
23ae0 5f 49 4e 53 45 52 54 2c 20 54 4b 5f 53 45 4c 45  _INSERT, TK_SELE
23af0 43 54 20 2a 2f 0a 20 20 75 38 20 6f 72 63 6f 6e  CT */.  u8 orcon
23b00 66 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  f;           /* 
23b10 4f 45 5f 52 6f 6c 6c 62 61 63 6b 20 65 74 63 2e  OE_Rollback etc.
23b20 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 20 2a 70   */.  Trigger *p
23b30 54 72 69 67 3b 20 20 20 20 20 20 2f 2a 20 54 68  Trig;      /* Th
23b40 65 20 74 72 69 67 67 65 72 20 74 68 61 74 20 74  e trigger that t
23b50 68 69 73 20 73 74 65 70 20 69 73 20 61 20 70 61  his step is a pa
23b60 72 74 20 6f 66 20 2a 2f 0a 20 20 53 65 6c 65 63  rt of */.  Selec
23b70 74 20 2a 70 53 65 6c 65 63 74 3b 20 20 20 20 20  t *pSelect;     
23b80 2f 2a 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d  /* SELECT statem
23b90 65 6e 74 20 6f 72 20 52 48 53 20 6f 66 20 49 4e  ent or RHS of IN
23ba0 53 45 52 54 20 49 4e 54 4f 20 53 45 4c 45 43 54  SERT INTO SELECT
23bb0 20 2e 2e 2e 20 2a 2f 0a 20 20 63 68 61 72 20 2a   ... */.  char *
23bc0 7a 54 61 72 67 65 74 3b 20 20 20 20 20 20 20 2f  zTarget;       /
23bd0 2a 20 54 61 72 67 65 74 20 74 61 62 6c 65 20 66  * Target table f
23be0 6f 72 20 44 45 4c 45 54 45 2c 20 55 50 44 41 54  or DELETE, UPDAT
23bf0 45 2c 20 49 4e 53 45 52 54 20 2a 2f 0a 20 20 45  E, INSERT */.  E
23c00 78 70 72 20 2a 70 57 68 65 72 65 3b 20 20 20 20  xpr *pWhere;    
23c10 20 20 20 20 2f 2a 20 54 68 65 20 57 48 45 52 45      /* The WHERE
23c20 20 63 6c 61 75 73 65 20 66 6f 72 20 44 45 4c 45   clause for DELE
23c30 54 45 20 6f 72 20 55 50 44 41 54 45 20 73 74 65  TE or UPDATE ste
23c40 70 73 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74  ps */.  ExprList
23c50 20 2a 70 45 78 70 72 4c 69 73 74 3b 20 2f 2a 20   *pExprList; /* 
23c60 53 45 54 20 63 6c 61 75 73 65 20 66 6f 72 20 55  SET clause for U
23c70 50 44 41 54 45 20 2a 2f 0a 20 20 49 64 4c 69 73  PDATE */.  IdLis
23c80 74 20 2a 70 49 64 4c 69 73 74 3b 20 20 20 20 20  t *pIdList;     
23c90 2f 2a 20 43 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20  /* Column names 
23ca0 66 6f 72 20 49 4e 53 45 52 54 20 2a 2f 0a 20 20  for INSERT */.  
23cb0 55 70 73 65 72 74 20 2a 70 55 70 73 65 72 74 3b  Upsert *pUpsert;
23cc0 20 20 20 20 20 2f 2a 20 55 70 73 65 72 74 20 63       /* Upsert c
23cd0 6c 61 75 73 65 73 20 6f 6e 20 61 6e 20 49 4e 53  lauses on an INS
23ce0 45 52 54 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a  ERT */.  char *z
23cf0 53 70 61 6e 3b 20 20 20 20 20 20 20 20 20 2f 2a  Span;         /*
23d00 20 4f 72 69 67 69 6e 61 6c 20 53 51 4c 20 74 65   Original SQL te
23d10 78 74 20 6f 66 20 74 68 69 73 20 63 6f 6d 6d 61  xt of this comma
23d20 6e 64 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 53  nd */.  TriggerS
23d30 74 65 70 20 2a 70 4e 65 78 74 3b 20 20 2f 2a 20  tep *pNext;  /* 
23d40 4e 65 78 74 20 69 6e 20 74 68 65 20 6c 69 6e 6b  Next in the link
23d50 2d 6c 69 73 74 20 2a 2f 0a 20 20 54 72 69 67 67  -list */.  Trigg
23d60 65 72 53 74 65 70 20 2a 70 4c 61 73 74 3b 20 20  erStep *pLast;  
23d70 2f 2a 20 4c 61 73 74 20 65 6c 65 6d 65 6e 74 20  /* Last element 
23d80 69 6e 20 6c 69 6e 6b 2d 6c 69 73 74 2e 20 56 61  in link-list. Va
23d90 6c 69 64 20 66 6f 72 20 31 73 74 20 65 6c 65 6d  lid for 1st elem
23da0 20 6f 6e 6c 79 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a   only */.};../*.
23db0 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  ** The following
23dc0 20 73 74 72 75 63 74 75 72 65 20 63 6f 6e 74 61   structure conta
23dd0 69 6e 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  ins information 
23de0 75 73 65 64 20 62 79 20 74 68 65 20 73 71 6c 69  used by the sqli
23df0 74 65 46 69 78 2e 2e 2e 0a 2a 2a 20 72 6f 75 74  teFix....** rout
23e00 69 6e 65 73 20 61 73 20 74 68 65 79 20 77 61 6c  ines as they wal
23e10 6b 20 74 68 65 20 70 61 72 73 65 20 74 72 65 65  k the parse tree
23e20 20 74 6f 20 6d 61 6b 65 20 64 61 74 61 62 61 73   to make databas
23e30 65 20 72 65 66 65 72 65 6e 63 65 73 0a 2a 2a 20  e references.** 
23e40 65 78 70 6c 69 63 69 74 2e 0a 2a 2f 0a 74 79 70  explicit..*/.typ
23e50 65 64 65 66 20 73 74 72 75 63 74 20 44 62 46 69  edef struct DbFi
23e60 78 65 72 20 44 62 46 69 78 65 72 3b 0a 73 74 72  xer DbFixer;.str
23e70 75 63 74 20 44 62 46 69 78 65 72 20 7b 0a 20 20  uct DbFixer {.  
23e80 50 61 72 73 65 20 2a 70 50 61 72 73 65 3b 20 20  Parse *pParse;  
23e90 20 20 20 20 2f 2a 20 54 68 65 20 70 61 72 73 69      /* The parsi
23ea0 6e 67 20 63 6f 6e 74 65 78 74 2e 20 20 45 72 72  ng context.  Err
23eb0 6f 72 20 6d 65 73 73 61 67 65 73 20 77 72 69 74  or messages writ
23ec0 74 65 6e 20 68 65 72 65 20 2a 2f 0a 20 20 53 63  ten here */.  Sc
23ed0 68 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20 20  hema *pSchema;  
23ee0 20 20 2f 2a 20 46 69 78 20 69 74 65 6d 73 20 74    /* Fix items t
23ef0 6f 20 74 68 69 73 20 73 63 68 65 6d 61 20 2a 2f  o this schema */
23f00 0a 20 20 69 6e 74 20 62 56 61 72 4f 6e 6c 79 3b  .  int bVarOnly;
23f10 20 20 20 20 20 20 20 2f 2a 20 43 68 65 63 6b 20         /* Check 
23f20 66 6f 72 20 76 61 72 69 61 62 6c 65 20 72 65 66  for variable ref
23f30 65 72 65 6e 63 65 73 20 6f 6e 6c 79 20 2a 2f 0a  erences only */.
23f40 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 44    const char *zD
23f50 62 3b 20 20 20 20 2f 2a 20 4d 61 6b 65 20 73 75  b;    /* Make su
23f60 72 65 20 61 6c 6c 20 6f 62 6a 65 63 74 73 20 61  re all objects a
23f70 72 65 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20  re contained in 
23f80 74 68 69 73 20 64 61 74 61 62 61 73 65 20 2a 2f  this database */
23f90 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  .  const char *z
23fa0 54 79 70 65 3b 20 20 2f 2a 20 54 79 70 65 20 6f  Type;  /* Type o
23fb0 66 20 74 68 65 20 63 6f 6e 74 61 69 6e 65 72 20  f the container 
23fc0 2d 20 75 73 65 64 20 66 6f 72 20 65 72 72 6f 72  - used for error
23fd0 20 6d 65 73 73 61 67 65 73 20 2a 2f 0a 20 20 63   messages */.  c
23fe0 6f 6e 73 74 20 54 6f 6b 65 6e 20 2a 70 4e 61 6d  onst Token *pNam
23ff0 65 3b 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68  e; /* Name of th
24000 65 20 63 6f 6e 74 61 69 6e 65 72 20 2d 20 75 73  e container - us
24010 65 64 20 66 6f 72 20 65 72 72 6f 72 20 6d 65 73  ed for error mes
24020 73 61 67 65 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a  sages */.};../*.
24030 2a 2a 20 41 6e 20 6f 62 6a 65 63 74 65 64 20 75  ** An objected u
24040 73 65 64 20 74 6f 20 61 63 63 75 6d 75 6c 61 74  sed to accumulat
24050 65 20 74 68 65 20 74 65 78 74 20 6f 66 20 61 20  e the text of a 
24060 73 74 72 69 6e 67 20 77 68 65 72 65 20 77 65 0a  string where we.
24070 2a 2a 20 64 6f 20 6e 6f 74 20 6e 65 63 65 73 73  ** do not necess
24080 61 72 69 6c 79 20 6b 6e 6f 77 20 68 6f 77 20 62  arily know how b
24090 69 67 20 74 68 65 20 73 74 72 69 6e 67 20 77 69  ig the string wi
240a0 6c 6c 20 62 65 20 69 6e 20 74 68 65 20 65 6e 64  ll be in the end
240b0 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 73 71 6c 69  ..*/.struct sqli
240c0 74 65 33 5f 73 74 72 20 7b 0a 20 20 73 71 6c 69  te3_str {.  sqli
240d0 74 65 33 20 2a 64 62 3b 20 20 20 20 20 20 20 20  te3 *db;        
240e0 20 2f 2a 20 4f 70 74 69 6f 6e 61 6c 20 64 61 74   /* Optional dat
240f0 61 62 61 73 65 20 66 6f 72 20 6c 6f 6f 6b 61 73  abase for lookas
24100 69 64 65 2e 20 20 43 61 6e 20 62 65 20 4e 55 4c  ide.  Can be NUL
24110 4c 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 54 65  L */.  char *zTe
24120 78 74 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54  xt;         /* T
24130 68 65 20 73 74 72 69 6e 67 20 63 6f 6c 6c 65 63  he string collec
24140 74 65 64 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20  ted so far */.  
24150 75 33 32 20 20 6e 41 6c 6c 6f 63 3b 20 20 20 20  u32  nAlloc;    
24160 20 20 20 20 20 2f 2a 20 41 6d 6f 75 6e 74 20 6f       /* Amount o
24170 66 20 73 70 61 63 65 20 61 6c 6c 6f 63 61 74 65  f space allocate
24180 64 20 69 6e 20 7a 54 65 78 74 20 2a 2f 0a 20 20  d in zText */.  
24190 75 33 32 20 20 6d 78 41 6c 6c 6f 63 3b 20 20 20  u32  mxAlloc;   
241a0 20 20 20 20 20 2f 2a 20 4d 61 78 69 6d 75 6d 20       /* Maximum 
241b0 61 6c 6c 6f 77 65 64 20 61 6c 6c 6f 63 61 74 69  allowed allocati
241c0 6f 6e 2e 20 20 30 20 66 6f 72 20 6e 6f 20 6d 61  on.  0 for no ma
241d0 6c 6c 6f 63 20 75 73 61 67 65 20 2a 2f 0a 20 20  lloc usage */.  
241e0 75 33 32 20 20 6e 43 68 61 72 3b 20 20 20 20 20  u32  nChar;     
241f0 20 20 20 20 20 2f 2a 20 4c 65 6e 67 74 68 20 6f       /* Length o
24200 66 20 74 68 65 20 73 74 72 69 6e 67 20 73 6f 20  f the string so 
24210 66 61 72 20 2a 2f 0a 20 20 75 38 20 20 20 61 63  far */.  u8   ac
24220 63 45 72 72 6f 72 3b 20 20 20 20 20 20 20 2f 2a  cError;       /*
24230 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 20 6f 72   SQLITE_NOMEM or
24240 20 53 51 4c 49 54 45 5f 54 4f 4f 42 49 47 20 2a   SQLITE_TOOBIG *
24250 2f 0a 20 20 75 38 20 20 20 70 72 69 6e 74 66 46  /.  u8   printfF
24260 6c 61 67 73 3b 20 20 20 20 2f 2a 20 53 51 4c 49  lags;    /* SQLI
24270 54 45 5f 50 52 49 4e 54 46 20 66 6c 61 67 73 20  TE_PRINTF flags 
24280 62 65 6c 6f 77 20 2a 2f 0a 7d 3b 0a 23 64 65 66  below */.};.#def
24290 69 6e 65 20 53 51 4c 49 54 45 5f 50 52 49 4e 54  ine SQLITE_PRINT
242a0 46 5f 49 4e 54 45 52 4e 41 4c 20 30 78 30 31 20  F_INTERNAL 0x01 
242b0 20 2f 2a 20 49 6e 74 65 72 6e 61 6c 2d 75 73 65   /* Internal-use
242c0 2d 6f 6e 6c 79 20 63 6f 6e 76 65 72 74 65 72 73  -only converters
242d0 20 61 6c 6c 6f 77 65 64 20 2a 2f 0a 23 64 65 66   allowed */.#def
242e0 69 6e 65 20 53 51 4c 49 54 45 5f 50 52 49 4e 54  ine SQLITE_PRINT
242f0 46 5f 53 51 4c 46 55 4e 43 20 20 30 78 30 32 20  F_SQLFUNC  0x02 
24300 20 2f 2a 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e   /* SQL function
24310 20 61 72 67 75 6d 65 6e 74 73 20 74 6f 20 56 58   arguments to VX
24320 50 72 69 6e 74 66 20 2a 2f 0a 23 64 65 66 69 6e  Printf */.#defin
24330 65 20 53 51 4c 49 54 45 5f 50 52 49 4e 54 46 5f  e SQLITE_PRINTF_
24340 4d 41 4c 4c 4f 43 45 44 20 30 78 30 34 20 20 2f  MALLOCED 0x04  /
24350 2a 20 54 72 75 65 20 69 66 20 78 54 65 78 74 20  * True if xText 
24360 69 73 20 61 6c 6c 6f 63 61 74 65 64 20 73 70 61  is allocated spa
24370 63 65 20 2a 2f 0a 0a 23 64 65 66 69 6e 65 20 69  ce */..#define i
24380 73 4d 61 6c 6c 6f 63 65 64 28 58 29 20 20 28 28  sMalloced(X)  ((
24390 28 58 29 2d 3e 70 72 69 6e 74 66 46 6c 61 67 73  (X)->printfFlags
243a0 20 26 20 53 51 4c 49 54 45 5f 50 52 49 4e 54 46   & SQLITE_PRINTF
243b0 5f 4d 41 4c 4c 4f 43 45 44 29 21 3d 30 29 0a 0a  _MALLOCED)!=0)..
243c0 0a 2f 2a 0a 2a 2a 20 41 20 70 6f 69 6e 74 65 72  ./*.** A pointer
243d0 20 74 6f 20 74 68 69 73 20 73 74 72 75 63 74 75   to this structu
243e0 72 65 20 69 73 20 75 73 65 64 20 74 6f 20 63 6f  re is used to co
243f0 6d 6d 75 6e 69 63 61 74 65 20 69 6e 66 6f 72 6d  mmunicate inform
24400 61 74 69 6f 6e 0a 2a 2a 20 66 72 6f 6d 20 73 71  ation.** from sq
24410 6c 69 74 65 33 49 6e 69 74 20 61 6e 64 20 4f 50  lite3Init and OP
24420 5f 50 61 72 73 65 53 63 68 65 6d 61 20 69 6e 74  _ParseSchema int
24430 6f 20 74 68 65 20 73 71 6c 69 74 65 33 49 6e 69  o the sqlite3Ini
24440 74 43 61 6c 6c 62 61 63 6b 2e 0a 2a 2f 0a 74 79  tCallback..*/.ty
24450 70 65 64 65 66 20 73 74 72 75 63 74 20 7b 0a 20  pedef struct {. 
24460 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 20 20 20   sqlite3 *db;   
24470 20 20 20 20 20 2f 2a 20 54 68 65 20 64 61 74 61       /* The data
24480 62 61 73 65 20 62 65 69 6e 67 20 69 6e 69 74 69  base being initi
24490 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 63 68 61 72  alized */.  char
244a0 20 2a 2a 70 7a 45 72 72 4d 73 67 3b 20 20 20 20   **pzErrMsg;    
244b0 2f 2a 20 45 72 72 6f 72 20 6d 65 73 73 61 67 65  /* Error message
244c0 20 73 74 6f 72 65 64 20 68 65 72 65 20 2a 2f 0a   stored here */.
244d0 20 20 69 6e 74 20 69 44 62 3b 20 20 20 20 20 20    int iDb;      
244e0 20 20 20 20 20 20 2f 2a 20 30 20 66 6f 72 20 6d        /* 0 for m
244f0 61 69 6e 20 64 61 74 61 62 61 73 65 2e 20 20 31  ain database.  1
24500 20 66 6f 72 20 54 45 4d 50 2c 20 32 2e 2e 20 66   for TEMP, 2.. f
24510 6f 72 20 41 54 54 41 43 48 65 64 20 2a 2f 0a 20  or ATTACHed */. 
24520 20 69 6e 74 20 72 63 3b 20 20 20 20 20 20 20 20   int rc;        
24530 20 20 20 20 20 2f 2a 20 52 65 73 75 6c 74 20 63       /* Result c
24540 6f 64 65 20 73 74 6f 72 65 64 20 68 65 72 65 20  ode stored here 
24550 2a 2f 0a 20 20 75 33 32 20 6d 49 6e 69 74 46 6c  */.  u32 mInitFl
24560 61 67 73 3b 20 20 20 20 20 2f 2a 20 46 6c 61 67  ags;     /* Flag
24570 73 20 63 6f 6e 74 72 6f 6c 6c 69 6e 67 20 65 72  s controlling er
24580 72 6f 72 20 6d 65 73 73 61 67 65 73 20 2a 2f 0a  ror messages */.
24590 20 20 75 33 32 20 6e 49 6e 69 74 52 6f 77 3b 20    u32 nInitRow; 
245a0 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
245b0 6f 66 20 72 6f 77 73 20 70 72 6f 63 65 73 73 65  of rows processe
245c0 64 20 2a 2f 0a 7d 20 49 6e 69 74 44 61 74 61 3b  d */.} InitData;
245d0 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20  ../*.** Allowed 
245e0 76 61 6c 75 65 73 20 66 6f 72 20 6d 49 6e 69 74  values for mInit
245f0 46 6c 61 67 73 0a 2a 2f 0a 23 64 65 66 69 6e 65  Flags.*/.#define
24600 20 49 4e 49 54 46 4c 41 47 5f 41 6c 74 65 72 54   INITFLAG_AlterT
24610 61 62 6c 65 20 20 20 30 78 30 30 30 31 20 20 2f  able   0x0001  /
24620 2a 20 54 68 69 73 20 69 73 20 61 20 72 65 70 61  * This is a repa
24630 72 73 65 20 61 66 74 65 72 20 41 4c 54 45 52 20  rse after ALTER 
24640 54 41 42 4c 45 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20  TABLE */../*.** 
24650 53 74 72 75 63 74 75 72 65 20 63 6f 6e 74 61 69  Structure contai
24660 6e 69 6e 67 20 67 6c 6f 62 61 6c 20 63 6f 6e 66  ning global conf
24670 69 67 75 72 61 74 69 6f 6e 20 64 61 74 61 20 66  iguration data f
24680 6f 72 20 74 68 65 20 53 51 4c 69 74 65 20 6c 69  or the SQLite li
24690 62 72 61 72 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 69  brary..**.** Thi
246a0 73 20 73 74 72 75 63 74 75 72 65 20 61 6c 73 6f  s structure also
246b0 20 63 6f 6e 74 61 69 6e 73 20 73 6f 6d 65 20 73   contains some s
246c0 74 61 74 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  tate information
246d0 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53 71 6c 69  ..*/.struct Sqli
246e0 74 65 33 43 6f 6e 66 69 67 20 7b 0a 20 20 69 6e  te3Config {.  in
246f0 74 20 62 4d 65 6d 73 74 61 74 3b 20 20 20 20 20  t bMemstat;     
24700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24710 2f 2a 20 54 72 75 65 20 74 6f 20 65 6e 61 62 6c  /* True to enabl
24720 65 20 6d 65 6d 6f 72 79 20 73 74 61 74 75 73 20  e memory status 
24730 2a 2f 0a 20 20 69 6e 74 20 62 43 6f 72 65 4d 75  */.  int bCoreMu
24740 74 65 78 3b 20 20 20 20 20 20 20 20 20 20 20 20  tex;            
24750 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 74         /* True t
24760 6f 20 65 6e 61 62 6c 65 20 63 6f 72 65 20 6d 75  o enable core mu
24770 74 65 78 69 6e 67 20 2a 2f 0a 20 20 69 6e 74 20  texing */.  int 
24780 62 46 75 6c 6c 4d 75 74 65 78 3b 20 20 20 20 20  bFullMutex;     
24790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
247a0 20 54 72 75 65 20 74 6f 20 65 6e 61 62 6c 65 20   True to enable 
247b0 66 75 6c 6c 20 6d 75 74 65 78 69 6e 67 20 2a 2f  full mutexing */
247c0 0a 20 20 69 6e 74 20 62 4f 70 65 6e 55 72 69 3b  .  int bOpenUri;
247d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
247e0 20 20 20 20 20 2f 2a 20 54 72 75 65 20 74 6f 20       /* True to 
247f0 69 6e 74 65 72 70 72 65 74 20 66 69 6c 65 6e 61  interpret filena
24800 6d 65 73 20 61 73 20 55 52 49 73 20 2a 2f 0a 20  mes as URIs */. 
24810 20 69 6e 74 20 62 55 73 65 43 69 73 3b 20 20 20   int bUseCis;   
24820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24830 20 20 20 2f 2a 20 55 73 65 20 63 6f 76 65 72 69     /* Use coveri
24840 6e 67 20 69 6e 64 69 63 65 73 20 66 6f 72 20 66  ng indices for f
24850 75 6c 6c 2d 73 63 61 6e 73 20 2a 2f 0a 20 20 69  ull-scans */.  i
24860 6e 74 20 62 53 6d 61 6c 6c 4d 61 6c 6c 6f 63 3b  nt bSmallMalloc;
24870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24880 20 2f 2a 20 41 76 6f 69 64 20 6c 61 72 67 65 20   /* Avoid large 
24890 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f  memory allocatio
248a0 6e 73 20 69 66 20 74 72 75 65 20 2a 2f 0a 20 20  ns if true */.  
248b0 69 6e 74 20 6d 78 53 74 72 6c 65 6e 3b 20 20 20  int mxStrlen;   
248c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
248d0 20 20 2f 2a 20 4d 61 78 69 6d 75 6d 20 73 74 72    /* Maximum str
248e0 69 6e 67 20 6c 65 6e 67 74 68 20 2a 2f 0a 20 20  ing length */.  
248f0 69 6e 74 20 6e 65 76 65 72 43 6f 72 72 75 70 74  int neverCorrupt
24900 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
24910 20 20 2f 2a 20 44 61 74 61 62 61 73 65 20 69 73    /* Database is
24920 20 61 6c 77 61 79 73 20 77 65 6c 6c 2d 66 6f 72   always well-for
24930 6d 65 64 20 2a 2f 0a 20 20 69 6e 74 20 73 7a 4c  med */.  int szL
24940 6f 6f 6b 61 73 69 64 65 3b 20 20 20 20 20 20 20  ookaside;       
24950 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 65             /* De
24960 66 61 75 6c 74 20 6c 6f 6f 6b 61 73 69 64 65 20  fault lookaside 
24970 62 75 66 66 65 72 20 73 69 7a 65 20 2a 2f 0a 20  buffer size */. 
24980 20 69 6e 74 20 6e 4c 6f 6f 6b 61 73 69 64 65 3b   int nLookaside;
24990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
249a0 20 20 20 2f 2a 20 44 65 66 61 75 6c 74 20 6c 6f     /* Default lo
249b0 6f 6b 61 73 69 64 65 20 62 75 66 66 65 72 20 63  okaside buffer c
249c0 6f 75 6e 74 20 2a 2f 0a 20 20 69 6e 74 20 6e 53  ount */.  int nS
249d0 74 6d 74 53 70 69 6c 6c 3b 20 20 20 20 20 20 20  tmtSpill;       
249e0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53              /* S
249f0 74 6d 74 2d 6a 6f 75 72 6e 61 6c 20 73 70 69 6c  tmt-journal spil
24a00 6c 2d 74 6f 2d 64 69 73 6b 20 74 68 72 65 73 68  l-to-disk thresh
24a10 6f 6c 64 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33  old */.  sqlite3
24a20 5f 6d 65 6d 5f 6d 65 74 68 6f 64 73 20 6d 3b 20  _mem_methods m; 
24a30 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f             /* Lo
24a40 77 2d 6c 65 76 65 6c 20 6d 65 6d 6f 72 79 20 61  w-level memory a
24a50 6c 6c 6f 63 61 74 69 6f 6e 20 69 6e 74 65 72 66  llocation interf
24a60 61 63 65 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33  ace */.  sqlite3
24a70 5f 6d 75 74 65 78 5f 6d 65 74 68 6f 64 73 20 6d  _mutex_methods m
24a80 75 74 65 78 3b 20 20 20 20 20 20 2f 2a 20 4c 6f  utex;      /* Lo
24a90 77 2d 6c 65 76 65 6c 20 6d 75 74 65 78 20 69 6e  w-level mutex in
24aa0 74 65 72 66 61 63 65 20 2a 2f 0a 20 20 73 71 6c  terface */.  sql
24ab0 69 74 65 33 5f 70 63 61 63 68 65 5f 6d 65 74 68  ite3_pcache_meth
24ac0 6f 64 73 32 20 70 63 61 63 68 65 32 3b 20 20 2f  ods2 pcache2;  /
24ad0 2a 20 4c 6f 77 2d 6c 65 76 65 6c 20 70 61 67 65  * Low-level page
24ae0 2d 63 61 63 68 65 20 69 6e 74 65 72 66 61 63 65  -cache interface
24af0 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 48 65 61   */.  void *pHea
24b00 70 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  p;              
24b10 20 20 20 20 20 20 20 20 2f 2a 20 48 65 61 70 20          /* Heap 
24b20 73 74 6f 72 61 67 65 20 73 70 61 63 65 20 2a 2f  storage space */
24b30 0a 20 20 69 6e 74 20 6e 48 65 61 70 3b 20 20 20  .  int nHeap;   
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 53 69 7a 65 20 6f 66 20       /* Size of 
24b60 70 48 65 61 70 5b 5d 20 2a 2f 0a 20 20 69 6e 74  pHeap[] */.  int
24b70 20 6d 6e 52 65 71 2c 20 6d 78 52 65 71 3b 20 20   mnReq, mxReq;  
24b80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
24b90 2a 20 4d 69 6e 20 61 6e 64 20 6d 61 78 20 68 65  * Min and max he
24ba0 61 70 20 72 65 71 75 65 73 74 73 20 73 69 7a 65  ap requests size
24bb0 73 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 69  s */.  sqlite3_i
24bc0 6e 74 36 34 20 73 7a 4d 6d 61 70 3b 20 20 20 20  nt64 szMmap;    
24bd0 20 20 20 20 20 20 20 20 20 2f 2a 20 6d 6d 61 70           /* mmap
24be0 28 29 20 73 70 61 63 65 20 70 65 72 20 6f 70 65  () space per ope
24bf0 6e 20 66 69 6c 65 20 2a 2f 0a 20 20 73 71 6c 69  n file */.  sqli
24c00 74 65 33 5f 69 6e 74 36 34 20 6d 78 4d 6d 61 70  te3_int64 mxMmap
24c10 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
24c20 20 4d 61 78 69 6d 75 6d 20 76 61 6c 75 65 20 66   Maximum value f
24c30 6f 72 20 73 7a 4d 6d 61 70 20 2a 2f 0a 20 20 76  or szMmap */.  v
24c40 6f 69 64 20 2a 70 50 61 67 65 3b 20 20 20 20 20  oid *pPage;     
24c50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24c60 20 2f 2a 20 50 61 67 65 20 63 61 63 68 65 20 6d   /* Page cache m
24c70 65 6d 6f 72 79 20 2a 2f 0a 20 20 69 6e 74 20 73  emory */.  int s
24c80 7a 50 61 67 65 3b 20 20 20 20 20 20 20 20 20 20  zPage;          
24c90 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
24ca0 53 69 7a 65 20 6f 66 20 65 61 63 68 20 70 61 67  Size of each pag
24cb0 65 20 69 6e 20 70 50 61 67 65 5b 5d 20 2a 2f 0a  e in pPage[] */.
24cc0 20 20 69 6e 74 20 6e 50 61 67 65 3b 20 20 20 20    int nPage;    
24cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24ce0 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
24cf0 20 70 61 67 65 73 20 69 6e 20 70 50 61 67 65 5b   pages in pPage[
24d00 5d 20 2a 2f 0a 20 20 69 6e 74 20 6d 78 50 61 72  ] */.  int mxPar
24d10 73 65 72 53 74 61 63 6b 3b 20 20 20 20 20 20 20  serStack;       
24d20 20 20 20 20 20 20 20 20 20 2f 2a 20 6d 61 78 69           /* maxi
24d30 6d 75 6d 20 64 65 70 74 68 20 6f 66 20 74 68 65  mum depth of the
24d40 20 70 61 72 73 65 72 20 73 74 61 63 6b 20 2a 2f   parser stack */
24d50 0a 20 20 69 6e 74 20 73 68 61 72 65 64 43 61 63  .  int sharedCac
24d60 68 65 45 6e 61 62 6c 65 64 3b 20 20 20 20 20 20  heEnabled;      
24d70 20 20 20 20 20 2f 2a 20 74 72 75 65 20 69 66 20       /* true if 
24d80 73 68 61 72 65 64 2d 63 61 63 68 65 20 6d 6f 64  shared-cache mod
24d90 65 20 65 6e 61 62 6c 65 64 20 2a 2f 0a 20 20 75  e enabled */.  u
24da0 33 32 20 73 7a 50 6d 61 3b 20 20 20 20 20 20 20  32 szPma;       
24db0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24dc0 20 2f 2a 20 4d 61 78 69 6d 75 6d 20 53 6f 72 74   /* Maximum Sort
24dd0 65 72 20 50 4d 41 20 73 69 7a 65 20 2a 2f 0a 20  er PMA size */. 
24de0 20 2f 2a 20 54 68 65 20 61 62 6f 76 65 20 6d 69   /* The above mi
24df0 67 68 74 20 62 65 20 69 6e 69 74 69 61 6c 69 7a  ght be initializ
24e00 65 64 20 74 6f 20 6e 6f 6e 2d 7a 65 72 6f 2e 20  ed to non-zero. 
24e10 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6e   The following n
24e20 65 65 64 20 74 6f 20 61 6c 77 61 79 73 0a 20 20  eed to always.  
24e30 2a 2a 20 69 6e 69 74 69 61 6c 6c 79 20 62 65 20  ** initially be 
24e40 7a 65 72 6f 2c 20 68 6f 77 65 76 65 72 2e 20 2a  zero, however. *
24e50 2f 0a 20 20 69 6e 74 20 69 73 49 6e 69 74 3b 20  /.  int isInit; 
24e60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24e70 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 61 66        /* True af
24e80 74 65 72 20 69 6e 69 74 69 61 6c 69 7a 61 74 69  ter initializati
24e90 6f 6e 20 68 61 73 20 66 69 6e 69 73 68 65 64 20  on has finished 
24ea0 2a 2f 0a 20 20 69 6e 74 20 69 6e 50 72 6f 67 72  */.  int inProgr
24eb0 65 73 73 3b 20 20 20 20 20 20 20 20 20 20 20 20  ess;            
24ec0 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 77         /* True w
24ed0 68 69 6c 65 20 69 6e 69 74 69 61 6c 69 7a 61 74  hile initializat
24ee0 69 6f 6e 20 69 6e 20 70 72 6f 67 72 65 73 73 20  ion in progress 
24ef0 2a 2f 0a 20 20 69 6e 74 20 69 73 4d 75 74 65 78  */.  int isMutex
24f00 49 6e 69 74 3b 20 20 20 20 20 20 20 20 20 20 20  Init;           
24f10 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 61         /* True a
24f20 66 74 65 72 20 6d 75 74 65 78 65 73 20 61 72 65  fter mutexes are
24f30 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a   initialized */.
24f40 20 20 69 6e 74 20 69 73 4d 61 6c 6c 6f 63 49 6e    int isMallocIn
24f50 69 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  it;             
24f60 20 20 20 20 2f 2a 20 54 72 75 65 20 61 66 74 65      /* True afte
24f70 72 20 6d 61 6c 6c 6f 63 20 69 73 20 69 6e 69 74  r malloc is init
24f80 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 69 6e 74  ialized */.  int
24f90 20 69 73 50 43 61 63 68 65 49 6e 69 74 3b 20 20   isPCacheInit;  
24fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
24fb0 2a 20 54 72 75 65 20 61 66 74 65 72 20 6d 61 6c  * True after mal
24fc0 6c 6f 63 20 69 73 20 69 6e 69 74 69 61 6c 69 7a  loc is initializ
24fd0 65 64 20 2a 2f 0a 20 20 69 6e 74 20 6e 52 65 66  ed */.  int nRef
24fe0 49 6e 69 74 4d 75 74 65 78 3b 20 20 20 20 20 20  InitMutex;      
24ff0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
25000 62 65 72 20 6f 66 20 75 73 65 72 73 20 6f 66 20  ber of users of 
25010 70 49 6e 69 74 4d 75 74 65 78 20 2a 2f 0a 20 20  pInitMutex */.  
25020 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 20 2a 70  sqlite3_mutex *p
25030 49 6e 69 74 4d 75 74 65 78 3b 20 20 20 20 20 20  InitMutex;      
25040 20 20 2f 2a 20 4d 75 74 65 78 20 75 73 65 64 20    /* Mutex used 
25050 62 79 20 73 71 6c 69 74 65 33 5f 69 6e 69 74 69  by sqlite3_initi
25060 61 6c 69 7a 65 28 29 20 2a 2f 0a 20 20 76 6f 69  alize() */.  voi
25070 64 20 28 2a 78 4c 6f 67 29 28 76 6f 69 64 2a 2c  d (*xLog)(void*,
25080 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29  int,const char*)
25090 3b 20 2f 2a 20 46 75 6e 63 74 69 6f 6e 20 66 6f  ; /* Function fo
250a0 72 20 6c 6f 67 67 69 6e 67 20 2a 2f 0a 20 20 76  r logging */.  v
250b0 6f 69 64 20 2a 70 4c 6f 67 41 72 67 3b 20 20 20  oid *pLogArg;   
250c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
250d0 20 20 20 20 2f 2a 20 46 69 72 73 74 20 61 72 67      /* First arg
250e0 75 6d 65 6e 74 20 74 6f 20 78 4c 6f 67 28 29 20  ument to xLog() 
250f0 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
25100 5f 45 4e 41 42 4c 45 5f 53 51 4c 4c 4f 47 0a 20  _ENABLE_SQLLOG. 
25110 20 76 6f 69 64 28 2a 78 53 71 6c 6c 6f 67 29 28   void(*xSqllog)(
25120 76 6f 69 64 2a 2c 73 71 6c 69 74 65 33 2a 2c 63  void*,sqlite3*,c
25130 6f 6e 73 74 20 63 68 61 72 2a 2c 20 69 6e 74 29  onst char*, int)
25140 3b 0a 20 20 76 6f 69 64 20 2a 70 53 71 6c 6c 6f  ;.  void *pSqllo
25150 67 41 72 67 3b 0a 23 65 6e 64 69 66 0a 23 69 66  gArg;.#endif.#if
25160 64 65 66 20 53 51 4c 49 54 45 5f 56 44 42 45 5f  def SQLITE_VDBE_
25170 43 4f 56 45 52 41 47 45 0a 20 20 2f 2a 20 54 68  COVERAGE.  /* Th
25180 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 63 61 6c 6c  e following call
25190 62 61 63 6b 20 28 69 66 20 6e 6f 74 20 4e 55 4c  back (if not NUL
251a0 4c 29 20 69 73 20 69 6e 76 6f 6b 65 64 20 6f 6e  L) is invoked on
251b0 20 65 76 65 72 79 20 56 44 42 45 20 62 72 61 6e   every VDBE bran
251c0 63 68 0a 20 20 2a 2a 20 6f 70 65 72 61 74 69 6f  ch.  ** operatio
251d0 6e 2e 20 20 53 65 74 20 74 68 65 20 63 61 6c 6c  n.  Set the call
251e0 62 61 63 6b 20 75 73 69 6e 67 20 53 51 4c 49 54  back using SQLIT
251f0 45 5f 54 45 53 54 43 54 52 4c 5f 56 44 42 45 5f  E_TESTCTRL_VDBE_
25200 43 4f 56 45 52 41 47 45 2e 0a 20 20 2a 2f 0a 20  COVERAGE..  */. 
25210 20 76 6f 69 64 20 28 2a 78 56 64 62 65 42 72 61   void (*xVdbeBra
25220 6e 63 68 29 28 76 6f 69 64 2a 2c 75 6e 73 69 67  nch)(void*,unsig
25230 6e 65 64 20 69 53 72 63 4c 69 6e 65 2c 75 38 20  ned iSrcLine,u8 
25240 65 54 68 69 73 2c 75 38 20 65 4d 78 29 3b 20 20  eThis,u8 eMx);  
25250 2f 2a 20 43 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20  /* Callback */. 
25260 20 76 6f 69 64 20 2a 70 56 64 62 65 42 72 61 6e   void *pVdbeBran
25270 63 68 41 72 67 3b 20 20 20 20 20 20 20 20 20 20  chArg;          
25280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25290 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 31 73             /* 1s
252a0 74 20 61 72 67 75 6d 65 6e 74 20 2a 2f 0a 23 65  t argument */.#e
252b0 6e 64 69 66 0a 23 69 66 64 65 66 20 53 51 4c 49  ndif.#ifdef SQLI
252c0 54 45 5f 45 4e 41 42 4c 45 5f 44 45 53 45 52 49  TE_ENABLE_DESERI
252d0 41 4c 49 5a 45 0a 20 20 73 71 6c 69 74 65 33 5f  ALIZE.  sqlite3_
252e0 69 6e 74 36 34 20 6d 78 4d 65 6d 64 62 53 69 7a  int64 mxMemdbSiz
252f0 65 3b 20 20 20 20 20 20 20 20 2f 2a 20 44 65 66  e;        /* Def
25300 61 75 6c 74 20 6d 61 78 20 6d 65 6d 64 62 20 73  ault max memdb s
25310 69 7a 65 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 69  ize */.#endif.#i
25320 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 55 4e 54  fndef SQLITE_UNT
25330 45 53 54 41 42 4c 45 0a 20 20 69 6e 74 20 28 2a  ESTABLE.  int (*
25340 78 54 65 73 74 43 61 6c 6c 62 61 63 6b 29 28 69  xTestCallback)(i
25350 6e 74 29 3b 20 20 20 20 20 20 20 20 2f 2a 20 49  nt);        /* I
25360 6e 76 6f 6b 65 64 20 62 79 20 73 71 6c 69 74 65  nvoked by sqlite
25370 33 46 61 75 6c 74 53 69 6d 28 29 20 2a 2f 0a 23  3FaultSim() */.#
25380 65 6e 64 69 66 0a 20 20 69 6e 74 20 62 4c 6f 63  endif.  int bLoc
25390 61 6c 74 69 6d 65 46 61 75 6c 74 3b 20 20 20 20  altimeFault;    
253a0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75            /* Tru
253b0 65 20 74 6f 20 66 61 69 6c 20 6c 6f 63 61 6c 74  e to fail localt
253c0 69 6d 65 28 29 20 63 61 6c 6c 73 20 2a 2f 0a 20  ime() calls */. 
253d0 20 69 6e 74 20 62 49 6e 74 65 72 6e 61 6c 46 75   int bInternalFu
253e0 6e 63 74 69 6f 6e 73 3b 20 20 20 20 20 20 20 20  nctions;        
253f0 20 20 20 2f 2a 20 49 6e 74 65 72 6e 61 6c 20 53     /* Internal S
25400 51 4c 20 66 75 6e 63 74 69 6f 6e 73 20 61 72 65  QL functions are
25410 20 76 69 73 69 62 6c 65 20 2a 2f 0a 20 20 69 6e   visible */.  in
25420 74 20 69 4f 6e 63 65 52 65 73 65 74 54 68 72 65  t iOnceResetThre
25430 73 68 6f 6c 64 3b 20 20 20 20 20 20 20 20 20 20  shold;          
25440 2f 2a 20 57 68 65 6e 20 74 6f 20 72 65 73 65 74  /* When to reset
25450 20 4f 50 5f 4f 6e 63 65 20 63 6f 75 6e 74 65 72   OP_Once counter
25460 73 20 2a 2f 0a 20 20 75 33 32 20 73 7a 53 6f 72  s */.  u32 szSor
25470 74 65 72 52 65 66 3b 20 20 20 20 20 20 20 20 20  terRef;         
25480 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 69 6e 20           /* Min 
25490 73 69 7a 65 20 69 6e 20 62 79 74 65 73 20 74 6f  size in bytes to
254a0 20 75 73 65 20 73 6f 72 74 65 72 2d 72 65 66 73   use sorter-refs
254b0 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68   */.};../*.** Th
254c0 69 73 20 6d 61 63 72 6f 20 69 73 20 75 73 65 64  is macro is used
254d0 20 69 6e 73 69 64 65 20 6f 66 20 61 73 73 65 72   inside of asser
254e0 74 28 29 20 73 74 61 74 65 6d 65 6e 74 73 20 74  t() statements t
254f0 6f 20 69 6e 64 69 63 61 74 65 20 74 68 61 74 0a  o indicate that.
25500 2a 2a 20 74 68 65 20 61 73 73 65 72 74 20 69 73  ** the assert is
25510 20 6f 6e 6c 79 20 76 61 6c 69 64 20 6f 6e 20 61   only valid on a
25520 20 77 65 6c 6c 2d 66 6f 72 6d 65 64 20 64 61 74   well-formed dat
25530 61 62 61 73 65 2e 20 20 49 6e 73 74 65 61 64 20  abase.  Instead 
25540 6f 66 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 61 73  of:.**.**     as
25550 73 65 72 74 28 20 58 20 29 3b 0a 2a 2a 0a 2a 2a  sert( X );.**.**
25560 20 4f 6e 65 20 77 72 69 74 65 73 3a 0a 2a 2a 0a   One writes:.**.
25570 2a 2a 20 20 20 20 20 61 73 73 65 72 74 28 20 58  **     assert( X
25580 20 7c 7c 20 43 4f 52 52 55 50 54 5f 44 42 20 29   || CORRUPT_DB )
25590 3b 0a 2a 2a 0a 2a 2a 20 43 4f 52 52 55 50 54 5f  ;.**.** CORRUPT_
255a0 44 42 20 69 73 20 74 72 75 65 20 64 75 72 69 6e  DB is true durin
255b0 67 20 6e 6f 72 6d 61 6c 20 6f 70 65 72 61 74 69  g normal operati
255c0 6f 6e 2e 20 20 43 4f 52 52 55 50 54 5f 44 42 20  on.  CORRUPT_DB 
255d0 64 6f 65 73 20 6e 6f 74 20 69 6e 64 69 63 61 74  does not indicat
255e0 65 0a 2a 2a 20 74 68 61 74 20 74 68 65 20 64 61  e.** that the da
255f0 74 61 62 61 73 65 20 69 73 20 64 65 66 69 6e 69  tabase is defini
25600 74 65 6c 79 20 63 6f 72 72 75 70 74 2c 20 6f 6e  tely corrupt, on
25610 6c 79 20 74 68 61 74 20 69 74 20 6d 69 67 68 74  ly that it might
25620 20 62 65 20 63 6f 72 72 75 70 74 2e 0a 2a 2a 20   be corrupt..** 
25630 46 6f 72 20 6d 6f 73 74 20 74 65 73 74 20 63 61  For most test ca
25640 73 65 73 2c 20 43 4f 52 52 55 50 54 5f 44 42 20  ses, CORRUPT_DB 
25650 69 73 20 73 65 74 20 74 6f 20 66 61 6c 73 65 20  is set to false 
25660 75 73 69 6e 67 20 61 20 73 70 65 63 69 61 6c 0a  using a special.
25670 2a 2a 20 73 71 6c 69 74 65 33 5f 74 65 73 74 5f  ** sqlite3_test_
25680 63 6f 6e 74 72 6f 6c 28 29 2e 20 20 54 68 69 73  control().  This
25690 20 65 6e 61 62 6c 65 73 20 61 73 73 65 72 74 28   enables assert(
256a0 29 20 73 74 61 74 65 6d 65 6e 74 73 20 74 6f 20  ) statements to 
256b0 70 72 6f 76 65 0a 2a 2a 20 74 68 69 6e 67 73 20  prove.** things 
256c0 74 68 61 74 20 61 72 65 20 61 6c 77 61 79 73 20  that are always 
256d0 74 72 75 65 20 66 6f 72 20 77 65 6c 6c 2d 66 6f  true for well-fo
256e0 72 6d 65 64 20 64 61 74 61 62 61 73 65 73 2e 0a  rmed databases..
256f0 2a 2f 0a 23 64 65 66 69 6e 65 20 43 4f 52 52 55  */.#define CORRU
25700 50 54 5f 44 42 20 20 28 73 71 6c 69 74 65 33 43  PT_DB  (sqlite3C
25710 6f 6e 66 69 67 2e 6e 65 76 65 72 43 6f 72 72 75  onfig.neverCorru
25720 70 74 3d 3d 30 29 0a 0a 2f 2a 0a 2a 2a 20 43 6f  pt==0)../*.** Co
25730 6e 74 65 78 74 20 70 6f 69 6e 74 65 72 20 70 61  ntext pointer pa
25740 73 73 65 64 20 64 6f 77 6e 20 74 68 72 6f 75 67  ssed down throug
25750 68 20 74 68 65 20 74 72 65 65 2d 77 61 6c 6b 2e  h the tree-walk.
25760 0a 2a 2f 0a 73 74 72 75 63 74 20 57 61 6c 6b 65  .*/.struct Walke
25770 72 20 7b 0a 20 20 50 61 72 73 65 20 2a 70 50 61  r {.  Parse *pPa
25780 72 73 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  rse;            
25790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
257a0 2f 2a 20 50 61 72 73 65 72 20 63 6f 6e 74 65 78  /* Parser contex
257b0 74 2e 20 20 2a 2f 0a 20 20 69 6e 74 20 28 2a 78  t.  */.  int (*x
257c0 45 78 70 72 43 61 6c 6c 62 61 63 6b 29 28 57 61  ExprCallback)(Wa
257d0 6c 6b 65 72 2a 2c 20 45 78 70 72 2a 29 3b 20 20  lker*, Expr*);  
257e0 20 20 20 2f 2a 20 43 61 6c 6c 62 61 63 6b 20 66     /* Callback f
257f0 6f 72 20 65 78 70 72 65 73 73 69 6f 6e 73 20 2a  or expressions *
25800 2f 0a 20 20 69 6e 74 20 28 2a 78 53 65 6c 65 63  /.  int (*xSelec
25810 74 43 61 6c 6c 62 61 63 6b 29 28 57 61 6c 6b 65  tCallback)(Walke
25820 72 2a 2c 53 65 6c 65 63 74 2a 29 3b 20 20 2f 2a  r*,Select*);  /*
25830 20 43 61 6c 6c 62 61 63 6b 20 66 6f 72 20 53 45   Callback for SE
25840 4c 45 43 54 73 20 2a 2f 0a 20 20 76 6f 69 64 20  LECTs */.  void 
25850 28 2a 78 53 65 6c 65 63 74 43 61 6c 6c 62 61 63  (*xSelectCallbac
25860 6b 32 29 28 57 61 6c 6b 65 72 2a 2c 53 65 6c 65  k2)(Walker*,Sele
25870 63 74 2a 29 3b 2f 2a 20 53 65 63 6f 6e 64 20 63  ct*);/* Second c
25880 61 6c 6c 62 61 63 6b 20 66 6f 72 20 53 45 4c 45  allback for SELE
25890 43 54 73 20 2a 2f 0a 20 20 69 6e 74 20 77 61 6c  CTs */.  int wal
258a0 6b 65 72 44 65 70 74 68 3b 20 20 20 20 20 20 20  kerDepth;       
258b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
258c0 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
258d0 73 75 62 71 75 65 72 69 65 73 20 2a 2f 0a 20 20  subqueries */.  
258e0 75 38 20 65 43 6f 64 65 3b 20 20 20 20 20 20 20  u8 eCode;       
258f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25900 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 20 73            /* A s
25910 6d 61 6c 6c 20 70 72 6f 63 65 73 73 69 6e 67 20  mall processing 
25920 63 6f 64 65 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20  code */.  union 
25930 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  {               
25940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25950 20 20 20 20 2f 2a 20 45 78 74 72 61 20 64 61 74      /* Extra dat
25960 61 20 66 6f 72 20 63 61 6c 6c 62 61 63 6b 20 2a  a for callback *
25970 2f 0a 20 20 20 20 4e 61 6d 65 43 6f 6e 74 65 78  /.    NameContex
25980 74 20 2a 70 4e 43 3b 20 20 20 20 20 20 20 20 20  t *pNC;         
25990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
259a0 2f 2a 20 4e 61 6d 69 6e 67 20 63 6f 6e 74 65 78  /* Naming contex
259b0 74 20 2a 2f 0a 20 20 20 20 69 6e 74 20 6e 3b 20  t */.    int n; 
259c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
259d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
259e0 20 20 20 2f 2a 20 41 20 63 6f 75 6e 74 65 72 20     /* A counter 
259f0 2a 2f 0a 20 20 20 20 69 6e 74 20 69 43 75 72 3b  */.    int iCur;
25a00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25a10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25a20 20 2f 2a 20 41 20 63 75 72 73 6f 72 20 6e 75 6d   /* A cursor num
25a30 62 65 72 20 2a 2f 0a 20 20 20 20 53 72 63 4c 69  ber */.    SrcLi
25a40 73 74 20 2a 70 53 72 63 4c 69 73 74 3b 20 20 20  st *pSrcList;   
25a50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25a60 20 20 20 20 20 2f 2a 20 46 52 4f 4d 20 63 6c 61       /* FROM cla
25a70 75 73 65 20 2a 2f 0a 20 20 20 20 73 74 72 75 63  use */.    struc
25a80 74 20 53 72 63 43 6f 75 6e 74 20 2a 70 53 72 63  t SrcCount *pSrc
25a90 43 6f 75 6e 74 3b 20 20 20 20 20 20 20 20 20 20  Count;          
25aa0 20 20 20 20 20 2f 2a 20 43 6f 75 6e 74 69 6e 67       /* Counting
25ab0 20 63 6f 6c 75 6d 6e 20 72 65 66 65 72 65 6e 63   column referenc
25ac0 65 73 20 2a 2f 0a 20 20 20 20 73 74 72 75 63 74  es */.    struct
25ad0 20 43 43 75 72 48 69 6e 74 20 2a 70 43 43 75 72   CCurHint *pCCur
25ae0 48 69 6e 74 3b 20 20 20 20 20 20 20 20 20 20 20  Hint;           
25af0 20 20 20 20 2f 2a 20 55 73 65 64 20 62 79 20 63      /* Used by c
25b00 6f 64 65 43 75 72 73 6f 72 48 69 6e 74 28 29 20  odeCursorHint() 
25b10 2a 2f 0a 20 20 20 20 69 6e 74 20 2a 61 69 43 6f  */.    int *aiCo
25b20 6c 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  l;              
25b30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25b40 20 2f 2a 20 61 72 72 61 79 20 6f 66 20 63 6f 6c   /* array of col
25b50 75 6d 6e 20 69 6e 64 65 78 65 73 20 2a 2f 0a 20  umn indexes */. 
25b60 20 20 20 73 74 72 75 63 74 20 49 64 78 43 6f 76     struct IdxCov
25b70 65 72 20 2a 70 49 64 78 43 6f 76 65 72 3b 20 20  er *pIdxCover;  
25b80 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
25b90 43 68 65 63 6b 20 66 6f 72 20 69 6e 64 65 78 20  Check for index 
25ba0 63 6f 76 65 72 61 67 65 20 2a 2f 0a 20 20 20 20  coverage */.    
25bb0 73 74 72 75 63 74 20 49 64 78 45 78 70 72 54 72  struct IdxExprTr
25bc0 61 6e 73 20 2a 70 49 64 78 54 72 61 6e 73 3b 20  ans *pIdxTrans; 
25bd0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6e            /* Con
25be0 76 65 72 74 20 69 64 78 65 64 20 65 78 70 72 20  vert idxed expr 
25bf0 74 6f 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 20  to column */.   
25c00 20 45 78 70 72 4c 69 73 74 20 2a 70 47 72 6f 75   ExprList *pGrou
25c10 70 42 79 3b 20 20 20 20 20 20 20 20 20 20 20 20  pBy;            
25c20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 47 52             /* GR
25c30 4f 55 50 20 42 59 20 63 6c 61 75 73 65 20 2a 2f  OUP BY clause */
25c40 0a 20 20 20 20 53 65 6c 65 63 74 20 2a 70 53 65  .    Select *pSe
25c50 6c 65 63 74 3b 20 20 20 20 20 20 20 20 20 20 20  lect;           
25c60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
25c70 2a 20 48 41 56 49 4e 47 20 74 6f 20 57 48 45 52  * HAVING to WHER
25c80 45 20 63 6c 61 75 73 65 20 63 74 78 20 2a 2f 0a  E clause ctx */.
25c90 20 20 20 20 73 74 72 75 63 74 20 57 69 6e 64 6f      struct Windo
25ca0 77 52 65 77 72 69 74 65 20 2a 70 52 65 77 72 69  wRewrite *pRewri
25cb0 74 65 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  te;           /*
25cc0 20 57 69 6e 64 6f 77 20 72 65 77 72 69 74 65 20   Window rewrite 
25cd0 63 6f 6e 74 65 78 74 20 2a 2f 0a 20 20 20 20 73  context */.    s
25ce0 74 72 75 63 74 20 57 68 65 72 65 43 6f 6e 73 74  truct WhereConst
25cf0 20 2a 70 43 6f 6e 73 74 3b 20 20 20 20 20 20 20   *pConst;       
25d00 20 20 20 20 20 20 20 20 20 2f 2a 20 57 48 45 52           /* WHER
25d10 45 20 63 6c 61 75 73 65 20 63 6f 6e 73 74 61 6e  E clause constan
25d20 74 73 20 2a 2f 0a 20 20 20 20 73 74 72 75 63 74  ts */.    struct
25d30 20 52 65 6e 61 6d 65 43 74 78 20 2a 70 52 65 6e   RenameCtx *pRen
25d40 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ame;            
25d50 20 20 20 20 2f 2a 20 52 45 4e 41 4d 45 20 43 4f      /* RENAME CO
25d60 4c 55 4d 4e 20 63 6f 6e 74 65 78 74 20 2a 2f 0a  LUMN context */.
25d70 20 20 7d 20 75 3b 0a 7d 3b 0a 0a 2f 2a 20 46 6f    } u;.};../* Fo
25d80 72 77 61 72 64 20 64 65 63 6c 61 72 61 74 69 6f  rward declaratio
25d90 6e 73 20 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65  ns */.int sqlite
25da0 33 57 61 6c 6b 45 78 70 72 28 57 61 6c 6b 65 72  3WalkExpr(Walker
25db0 2a 2c 20 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73  *, Expr*);.int s
25dc0 71 6c 69 74 65 33 57 61 6c 6b 45 78 70 72 4c 69  qlite3WalkExprLi
25dd0 73 74 28 57 61 6c 6b 65 72 2a 2c 20 45 78 70 72  st(Walker*, Expr
25de0 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  List*);.int sqli
25df0 74 65 33 57 61 6c 6b 53 65 6c 65 63 74 28 57 61  te3WalkSelect(Wa
25e00 6c 6b 65 72 2a 2c 20 53 65 6c 65 63 74 2a 29 3b  lker*, Select*);
25e10 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 61 6c 6b  .int sqlite3Walk
25e20 53 65 6c 65 63 74 45 78 70 72 28 57 61 6c 6b 65  SelectExpr(Walke
25e30 72 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 69 6e  r*, Select*);.in
25e40 74 20 73 71 6c 69 74 65 33 57 61 6c 6b 53 65 6c  t sqlite3WalkSel
25e50 65 63 74 46 72 6f 6d 28 57 61 6c 6b 65 72 2a 2c  ectFrom(Walker*,
25e60 20 53 65 6c 65 63 74 2a 29 3b 0a 69 6e 74 20 73   Select*);.int s
25e70 71 6c 69 74 65 33 45 78 70 72 57 61 6c 6b 4e 6f  qlite3ExprWalkNo
25e80 6f 70 28 57 61 6c 6b 65 72 2a 2c 20 45 78 70 72  op(Walker*, Expr
25e90 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53  *);.int sqlite3S
25ea0 65 6c 65 63 74 57 61 6c 6b 4e 6f 6f 70 28 57 61  electWalkNoop(Wa
25eb0 6c 6b 65 72 2a 2c 20 53 65 6c 65 63 74 2a 29 3b  lker*, Select*);
25ec0 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 65 6c 65  .int sqlite3Sele
25ed0 63 74 57 61 6c 6b 46 61 69 6c 28 57 61 6c 6b 65  ctWalkFail(Walke
25ee0 72 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 23 69  r*, Select*);.#i
25ef0 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55  fdef SQLITE_DEBU
25f00 47 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 65  G.void sqlite3Se
25f10 6c 65 63 74 57 61 6c 6b 41 73 73 65 72 74 32 28  lectWalkAssert2(
25f20 57 61 6c 6b 65 72 2a 2c 20 53 65 6c 65 63 74 2a  Walker*, Select*
25f30 29 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  );.#endif../*.**
25f40 20 52 65 74 75 72 6e 20 63 6f 64 65 20 66 72 6f   Return code fro
25f50 6d 20 74 68 65 20 70 61 72 73 65 2d 74 72 65 65  m the parse-tree
25f60 20 77 61 6c 6b 69 6e 67 20 70 72 69 6d 69 74 69   walking primiti
25f70 76 65 73 20 61 6e 64 20 74 68 65 69 72 0a 2a 2a  ves and their.**
25f80 20 63 61 6c 6c 62 61 63 6b 73 2e 0a 2a 2f 0a 23   callbacks..*/.#
25f90 64 65 66 69 6e 65 20 57 52 43 5f 43 6f 6e 74 69  define WRC_Conti
25fa0 6e 75 65 20 20 20 20 30 20 20 20 2f 2a 20 43 6f  nue    0   /* Co
25fb0 6e 74 69 6e 75 65 20 64 6f 77 6e 20 69 6e 74 6f  ntinue down into
25fc0 20 63 68 69 6c 64 72 65 6e 20 2a 2f 0a 23 64 65   children */.#de
25fd0 66 69 6e 65 20 57 52 43 5f 50 72 75 6e 65 20 20  fine WRC_Prune  
25fe0 20 20 20 20 20 31 20 20 20 2f 2a 20 4f 6d 69 74       1   /* Omit
25ff0 20 63 68 69 6c 64 72 65 6e 20 62 75 74 20 63 6f   children but co
26000 6e 74 69 6e 75 65 20 77 61 6c 6b 69 6e 67 20 73  ntinue walking s
26010 69 62 6c 69 6e 67 73 20 2a 2f 0a 23 64 65 66 69  iblings */.#defi
26020 6e 65 20 57 52 43 5f 41 62 6f 72 74 20 20 20 20  ne WRC_Abort    
26030 20 20 20 32 20 20 20 2f 2a 20 41 62 61 6e 64 6f     2   /* Abando
26040 6e 20 74 68 65 20 74 72 65 65 20 77 61 6c 6b 20  n the tree walk 
26050 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73  */../*.** An ins
26060 74 61 6e 63 65 20 6f 66 20 74 68 69 73 20 73 74  tance of this st
26070 72 75 63 74 75 72 65 20 72 65 70 72 65 73 65 6e  ructure represen
26080 74 73 20 61 20 73 65 74 20 6f 66 20 6f 6e 65 20  ts a set of one 
26090 6f 72 20 6d 6f 72 65 20 43 54 45 73 0a 2a 2a 20  or more CTEs.** 
260a0 28 63 6f 6d 6d 6f 6e 20 74 61 62 6c 65 20 65 78  (common table ex
260b0 70 72 65 73 73 69 6f 6e 73 29 20 63 72 65 61 74  pressions) creat
260c0 65 64 20 62 79 20 61 20 73 69 6e 67 6c 65 20 57  ed by a single W
260d0 49 54 48 20 63 6c 61 75 73 65 2e 0a 2a 2f 0a 73  ITH clause..*/.s
260e0 74 72 75 63 74 20 57 69 74 68 20 7b 0a 20 20 69  truct With {.  i
260f0 6e 74 20 6e 43 74 65 3b 20 20 20 20 20 20 20 20  nt nCte;        
26100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
26110 2a 20 4e 75 6d 62 65 72 20 6f 66 20 43 54 45 73  * Number of CTEs
26120 20 69 6e 20 74 68 65 20 57 49 54 48 20 63 6c 61   in the WITH cla
26130 75 73 65 20 2a 2f 0a 20 20 57 69 74 68 20 2a 70  use */.  With *p
26140 4f 75 74 65 72 3b 20 20 20 20 20 20 20 20 20 20  Outer;          
26150 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6e 74           /* Cont
26160 61 69 6e 69 6e 67 20 57 49 54 48 20 63 6c 61 75  aining WITH clau
26170 73 65 2c 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 20  se, or NULL */. 
26180 20 73 74 72 75 63 74 20 43 74 65 20 7b 20 20 20   struct Cte {   
26190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
261a0 20 2f 2a 20 46 6f 72 20 65 61 63 68 20 43 54 45   /* For each CTE
261b0 20 69 6e 20 74 68 65 20 57 49 54 48 20 63 6c 61   in the WITH cla
261c0 75 73 65 2e 2e 2e 2e 20 2a 2f 0a 20 20 20 20 63  use.... */.    c
261d0 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20  har *zName;     
261e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
261f0 2a 20 4e 61 6d 65 20 6f 66 20 74 68 69 73 20 43  * Name of this C
26200 54 45 20 2a 2f 0a 20 20 20 20 45 78 70 72 4c 69  TE */.    ExprLi
26210 73 74 20 2a 70 43 6f 6c 73 3b 20 20 20 20 20 20  st *pCols;      
26220 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 69 73            /* Lis
26230 74 20 6f 66 20 65 78 70 6c 69 63 69 74 20 63 6f  t of explicit co
26240 6c 75 6d 6e 20 6e 61 6d 65 73 2c 20 6f 72 20 4e  lumn names, or N
26250 55 4c 4c 20 2a 2f 0a 20 20 20 20 53 65 6c 65 63  ULL */.    Selec
26260 74 20 2a 70 53 65 6c 65 63 74 3b 20 20 20 20 20  t *pSelect;     
26270 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68             /* Th
26280 65 20 64 65 66 69 6e 69 74 69 6f 6e 20 6f 66 20  e definition of 
26290 74 68 69 73 20 43 54 45 20 2a 2f 0a 20 20 20 20  this CTE */.    
262a0 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 43 74 65  const char *zCte
262b0 45 72 72 3b 20 20 20 20 20 20 20 20 20 20 20 20  Err;            
262c0 2f 2a 20 45 72 72 6f 72 20 6d 65 73 73 61 67 65  /* Error message
262d0 20 66 6f 72 20 63 69 72 63 75 6c 61 72 20 72 65   for circular re
262e0 66 65 72 65 6e 63 65 73 20 2a 2f 0a 20 20 7d 20  ferences */.  } 
262f0 61 5b 31 5d 3b 0a 7d 3b 0a 0a 23 69 66 64 65 66  a[1];.};..#ifdef
26300 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 2f 2a   SQLITE_DEBUG./*
26310 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20  .** An instance 
26320 6f 66 20 74 68 65 20 54 72 65 65 56 69 65 77 20  of the TreeView 
26330 6f 62 6a 65 63 74 20 69 73 20 75 73 65 64 20 66  object is used f
26340 6f 72 20 70 72 69 6e 74 69 6e 67 20 74 68 65 20  or printing the 
26350 63 6f 6e 74 65 6e 74 20 6f 66 0a 2a 2a 20 64 61  content of.** da
26360 74 61 20 73 74 72 75 63 74 75 72 65 73 20 6f 6e  ta structures on
26370 20 73 71 6c 69 74 65 33 44 65 62 75 67 50 72 69   sqlite3DebugPri
26380 6e 74 66 28 29 20 75 73 69 6e 67 20 61 20 74 72  ntf() using a tr
26390 65 65 2d 6c 69 6b 65 20 76 69 65 77 2e 0a 2a 2f  ee-like view..*/
263a0 0a 73 74 72 75 63 74 20 54 72 65 65 56 69 65 77  .struct TreeView
263b0 20 7b 0a 20 20 69 6e 74 20 69 4c 65 76 65 6c 3b   {.  int iLevel;
263c0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
263d0 57 68 69 63 68 20 6c 65 76 65 6c 20 6f 66 20 74  Which level of t
263e0 68 65 20 74 72 65 65 20 77 65 20 61 72 65 20 6f  he tree we are o
263f0 6e 20 2a 2f 0a 20 20 75 38 20 20 62 4c 69 6e 65  n */.  u8  bLine
26400 5b 31 30 30 5d 3b 20 20 20 20 20 20 20 20 20 2f  [100];         /
26410 2a 20 44 72 61 77 20 76 65 72 74 69 63 61 6c 20  * Draw vertical 
26420 69 6e 20 63 6f 6c 75 6d 6e 20 69 20 69 66 20 62  in column i if b
26430 4c 69 6e 65 5b 69 5d 20 69 73 20 74 72 75 65 20  Line[i] is true 
26440 2a 2f 0a 7d 3b 0a 23 65 6e 64 69 66 20 2f 2a 20  */.};.#endif /* 
26450 53 51 4c 49 54 45 5f 44 45 42 55 47 20 2a 2f 0a  SQLITE_DEBUG */.
26460 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 6f 62 6a 65  ./*.** This obje
26470 63 74 20 69 73 20 75 73 65 64 20 69 6e 20 76 61  ct is used in va
26480 72 69 6f 69 75 73 20 77 61 79 73 2c 20 61 6c 6c  rioius ways, all
26490 20 72 65 6c 61 74 65 64 20 74 6f 20 77 69 6e 64   related to wind
264a0 6f 77 20 66 75 6e 63 74 69 6f 6e 73 0a 2a 2a 0a  ow functions.**.
264b0 2a 2a 20 20 20 28 31 29 20 41 20 73 69 6e 67 6c  **   (1) A singl
264c0 65 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  e instance of th
264d0 69 73 20 73 74 72 75 63 74 75 72 65 20 69 73 20  is structure is 
264e0 61 74 74 61 63 68 65 64 20 74 6f 20 74 68 65 0a  attached to the.
264f0 2a 2a 20 20 20 20 20 20 20 74 68 65 20 45 78 70  **       the Exp
26500 72 2e 70 57 69 6e 20 66 69 65 6c 64 20 66 6f 72  r.pWin field for
26510 20 65 61 63 68 20 77 69 6e 64 6f 77 20 66 75 6e   each window fun
26520 63 74 69 6f 6e 20 69 6e 20 61 6e 20 65 78 70 72  ction in an expr
26530 65 73 73 69 6f 6e 20 74 72 65 65 2e 0a 2a 2a 20  ession tree..** 
26540 20 20 20 20 20 20 54 68 69 73 20 6f 62 6a 65 63        This objec
26550 74 20 68 6f 6c 64 73 20 74 68 65 20 69 6e 66 6f  t holds the info
26560 72 6d 61 74 69 6f 6e 20 63 6f 6e 74 61 69 6e 65  rmation containe
26570 64 20 69 6e 20 74 68 65 20 4f 56 45 52 20 63 6c  d in the OVER cl
26580 61 75 73 65 2c 0a 2a 2a 20 20 20 20 20 20 20 70  ause,.**       p
26590 6c 75 73 20 61 64 64 69 74 69 6f 6e 61 6c 20 66  lus additional f
265a0 69 65 6c 64 73 20 75 73 65 64 20 64 75 72 69 6e  ields used durin
265b0 67 20 63 6f 64 65 20 67 65 6e 65 72 61 74 69 6f  g code generatio
265c0 6e 2e 0a 2a 2a 0a 2a 2a 20 20 20 28 32 29 20 41  n..**.**   (2) A
265d0 6c 6c 20 77 69 6e 64 6f 77 20 66 75 6e 63 74 69  ll window functi
265e0 6f 6e 73 20 69 6e 20 61 20 73 69 6e 67 6c 65 20  ons in a single 
265f0 53 45 4c 45 43 54 20 66 6f 72 6d 20 61 20 6c 69  SELECT form a li
26600 6e 6b 65 64 2d 6c 69 73 74 0a 2a 2a 20 20 20 20  nked-list.**    
26610 20 20 20 61 74 74 61 63 68 65 64 20 74 6f 20 53     attached to S
26620 65 6c 65 63 74 2e 70 57 69 6e 2e 20 20 54 68 65  elect.pWin.  The
26630 20 57 69 6e 64 6f 77 2e 70 46 75 6e 63 20 61 6e   Window.pFunc an
26640 64 20 57 69 6e 64 6f 77 2e 70 45 78 70 72 0a 2a  d Window.pExpr.*
26650 2a 20 20 20 20 20 20 20 66 69 65 6c 64 73 20 70  *       fields p
26660 6f 69 6e 74 20 62 61 63 6b 20 74 6f 20 74 68 65  oint back to the
26670 20 65 78 70 72 65 73 73 69 6f 6e 20 74 68 61 74   expression that
26680 20 69 73 20 74 68 65 20 77 69 6e 64 6f 77 20 66   is the window f
26690 75 6e 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 20  unction..**.**  
266a0 20 28 33 29 20 54 68 65 20 74 65 72 6d 73 20 6f   (3) The terms o
266b0 66 20 74 68 65 20 57 49 4e 44 4f 57 20 63 6c 61  f the WINDOW cla
266c0 75 73 65 20 6f 66 20 61 20 53 45 4c 45 43 54 20  use of a SELECT 
266d0 61 72 65 20 69 6e 73 74 61 6e 63 65 73 20 6f 66  are instances of
266e0 20 74 68 69 73 0a 2a 2a 20 20 20 20 20 20 20 6f   this.**       o
266f0 62 6a 65 63 74 20 6f 6e 20 61 20 6c 69 6e 6b 65  bject on a linke
26700 64 20 6c 69 73 74 20 61 74 74 61 63 68 65 64 20  d list attached 
26710 74 6f 20 53 65 6c 65 63 74 2e 70 57 69 6e 44 65  to Select.pWinDe
26720 66 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 75 73  fn..**.** The us
26730 65 73 20 28 31 29 20 61 6e 64 20 28 32 29 20 61  es (1) and (2) a
26740 72 65 20 72 65 61 6c 6c 79 20 74 68 65 20 73 61  re really the sa
26750 6d 65 20 57 69 6e 64 6f 77 20 6f 62 6a 65 63 74  me Window object
26760 20 74 68 61 74 20 6a 75 73 74 20 68 61 70 70 65   that just happe
26770 6e 73 0a 2a 2a 20 74 6f 20 62 65 20 61 63 63 65  ns.** to be acce
26780 73 73 69 62 6c 65 20 69 6e 20 74 77 6f 20 64 69  ssible in two di
26790 66 66 65 72 65 6e 74 20 77 61 79 73 2e 20 20 55  fferent ways.  U
267a0 73 65 20 28 33 29 20 69 73 20 61 72 65 20 73 65  se (3) is are se
267b0 70 61 72 61 74 65 20 6f 62 6a 65 63 74 73 2e 0a  parate objects..
267c0 2a 2f 0a 73 74 72 75 63 74 20 57 69 6e 64 6f 77  */.struct Window
267d0 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65   {.  char *zName
267e0 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
267f0 4e 61 6d 65 20 6f 66 20 77 69 6e 64 6f 77 20 28  Name of window (
26800 6d 61 79 20 62 65 20 4e 55 4c 4c 29 20 2a 2f 0a  may be NULL) */.
26810 20 20 63 68 61 72 20 2a 7a 42 61 73 65 3b 20 20    char *zBase;  
26820 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d            /* Nam
26830 65 20 6f 66 20 62 61 73 65 20 77 69 6e 64 6f 77  e of base window
26840 20 66 6f 72 20 63 68 61 69 6e 69 6e 67 20 28 6d   for chaining (m
26850 61 79 20 62 65 20 4e 55 4c 4c 29 20 2a 2f 0a 20  ay be NULL) */. 
26860 20 45 78 70 72 4c 69 73 74 20 2a 70 50 61 72 74   ExprList *pPart
26870 69 74 69 6f 6e 3b 20 20 20 2f 2a 20 50 41 52 54  ition;   /* PART
26880 49 54 49 4f 4e 20 42 59 20 63 6c 61 75 73 65 20  ITION BY clause 
26890 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70  */.  ExprList *p
268a0 4f 72 64 65 72 42 79 3b 20 20 20 20 20 2f 2a 20  OrderBy;     /* 
268b0 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73 65 20  ORDER BY clause 
268c0 2a 2f 0a 20 20 75 38 20 65 54 79 70 65 3b 20 20  */.  u8 eType;  
268d0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
268e0 54 4b 5f 52 41 4e 47 45 20 6f 72 20 54 4b 5f 52  TK_RANGE or TK_R
268f0 4f 57 53 20 2a 2f 0a 20 20 75 38 20 65 53 74 61  OWS */.  u8 eSta
26900 72 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  rt;             
26910 20 2f 2a 20 55 4e 42 4f 55 4e 44 45 44 2c 20 43   /* UNBOUNDED, C
26920 55 52 52 45 4e 54 2c 20 50 52 45 43 45 44 49 4e  URRENT, PRECEDIN
26930 47 20 6f 72 20 46 4f 4c 4c 4f 57 49 4e 47 20 2a  G or FOLLOWING *
26940 2f 0a 20 20 75 38 20 65 45 6e 64 3b 20 20 20 20  /.  u8 eEnd;    
26950 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 55              /* U
26960 4e 42 4f 55 4e 44 45 44 2c 20 43 55 52 52 45 4e  NBOUNDED, CURREN
26970 54 2c 20 50 52 45 43 45 44 49 4e 47 20 6f 72 20  T, PRECEDING or 
26980 46 4f 4c 4c 4f 57 49 4e 47 20 2a 2f 0a 20 20 75  FOLLOWING */.  u
26990 38 20 62 49 6d 70 6c 69 63 69 74 46 72 61 6d 65  8 bImplicitFrame
269a0 3b 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69  ;      /* True i
269b0 66 20 66 72 61 6d 65 20 77 61 73 20 69 6d 70 6c  f frame was impl
269c0 69 63 69 74 6c 79 20 73 70 65 63 69 66 69 65 64  icitly specified
269d0 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 53 74 61   */.  Expr *pSta
269e0 72 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  rt;           /*
269f0 20 45 78 70 72 65 73 73 69 6f 6e 20 66 6f 72 20   Expression for 
26a00 22 3c 65 78 70 72 3e 20 50 52 45 43 45 44 49 4e  "<expr> PRECEDIN
26a10 47 22 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 45  G" */.  Expr *pE
26a20 6e 64 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  nd;             
26a30 2f 2a 20 45 78 70 72 65 73 73 69 6f 6e 20 66 6f  /* Expression fo
26a40 72 20 22 3c 65 78 70 72 3e 20 46 4f 4c 4c 4f 57  r "<expr> FOLLOW
26a50 49 4e 47 22 20 2a 2f 0a 20 20 57 69 6e 64 6f 77  ING" */.  Window
26a60 20 2a 70 4e 65 78 74 57 69 6e 3b 20 20 20 20 20   *pNextWin;     
26a70 20 20 2f 2a 20 4e 65 78 74 20 77 69 6e 64 6f 77    /* Next window
26a80 20 66 75 6e 63 74 69 6f 6e 20 62 65 6c 6f 6e 67   function belong
26a90 69 6e 67 20 74 6f 20 74 68 69 73 20 53 45 4c 45  ing to this SELE
26aa0 43 54 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 46  CT */.  Expr *pF
26ab0 69 6c 74 65 72 3b 20 20 20 20 20 20 20 20 20 20  ilter;          
26ac0 2f 2a 20 54 68 65 20 46 49 4c 54 45 52 20 65 78  /* The FILTER ex
26ad0 70 72 65 73 73 69 6f 6e 20 2a 2f 0a 20 20 46 75  pression */.  Fu
26ae0 6e 63 44 65 66 20 2a 70 46 75 6e 63 3b 20 20 20  ncDef *pFunc;   
26af0 20 20 20 20 20 20 2f 2a 20 54 68 65 20 66 75 6e        /* The fun
26b00 63 74 69 6f 6e 20 2a 2f 0a 20 20 69 6e 74 20 69  ction */.  int i
26b10 45 70 68 43 73 72 3b 20 20 20 20 20 20 20 20 20  EphCsr;         
26b20 20 20 20 2f 2a 20 50 61 72 74 69 74 69 6f 6e 20     /* Partition 
26b30 62 75 66 66 65 72 20 6f 72 20 50 65 65 72 20 62  buffer or Peer b
26b40 75 66 66 65 72 20 2a 2f 0a 20 20 69 6e 74 20 72  uffer */.  int r
26b50 65 67 41 63 63 75 6d 3b 0a 20 20 69 6e 74 20 72  egAccum;.  int r
26b60 65 67 52 65 73 75 6c 74 3b 0a 20 20 69 6e 74 20  egResult;.  int 
26b70 63 73 72 41 70 70 3b 20 20 20 20 20 20 20 20 20  csrApp;         
26b80 20 20 20 20 2f 2a 20 46 75 6e 63 74 69 6f 6e 20      /* Function 
26b90 63 75 72 73 6f 72 20 28 75 73 65 64 20 62 79 20  cursor (used by 
26ba0 6d 69 6e 2f 6d 61 78 29 20 2a 2f 0a 20 20 69 6e  min/max) */.  in
26bb0 74 20 72 65 67 41 70 70 3b 20 20 20 20 20 20 20  t regApp;       
26bc0 20 20 20 20 20 20 2f 2a 20 46 75 6e 63 74 69 6f        /* Functio
26bd0 6e 20 72 65 67 69 73 74 65 72 20 28 61 6c 73 6f  n register (also
26be0 20 75 73 65 64 20 62 79 20 6d 69 6e 2f 6d 61 78   used by min/max
26bf0 29 20 2a 2f 0a 20 20 69 6e 74 20 72 65 67 50 61  ) */.  int regPa
26c00 72 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  rt;            /
26c10 2a 20 46 69 72 73 74 20 69 6e 20 61 20 73 65 74  * First in a set
26c20 20 6f 66 20 72 65 67 69 73 74 65 72 73 20 68 6f   of registers ho
26c30 6c 64 69 6e 67 20 50 41 52 54 49 54 49 4f 4e 20  lding PARTITION 
26c40 42 59 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  BY.             
26c50 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20               ** 
26c60 61 6e 64 20 4f 52 44 45 52 20 42 59 20 76 61 6c  and ORDER BY val
26c70 75 65 73 20 66 6f 72 20 74 68 65 20 77 69 6e 64  ues for the wind
26c80 6f 77 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 4f  ow */.  Expr *pO
26c90 77 6e 65 72 3b 20 20 20 20 20 20 20 20 20 20 20  wner;           
26ca0 2f 2a 20 45 78 70 72 65 73 73 69 6f 6e 20 6f 62  /* Expression ob
26cb0 6a 65 63 74 20 74 68 69 73 20 77 69 6e 64 6f 77  ject this window
26cc0 20 69 73 20 61 74 74 61 63 68 65 64 20 74 6f 20   is attached to 
26cd0 2a 2f 0a 20 20 69 6e 74 20 6e 42 75 66 66 65 72  */.  int nBuffer
26ce0 43 6f 6c 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  Col;         /* 
26cf0 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e  Number of column
26d00 73 20 69 6e 20 62 75 66 66 65 72 20 74 61 62 6c  s in buffer tabl
26d10 65 20 2a 2f 0a 20 20 69 6e 74 20 69 41 72 67 43  e */.  int iArgC
26d20 6f 6c 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  ol;            /
26d30 2a 20 4f 66 66 73 65 74 20 6f 66 20 66 69 72 73  * Offset of firs
26d40 74 20 61 72 67 75 6d 65 6e 74 20 66 6f 72 20 74  t argument for t
26d50 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a  his function */.
26d60 7d 3b 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  };..#ifndef SQLI
26d70 54 45 5f 4f 4d 49 54 5f 57 49 4e 44 4f 57 46 55  TE_OMIT_WINDOWFU
26d80 4e 43 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 57  NC.void sqlite3W
26d90 69 6e 64 6f 77 44 65 6c 65 74 65 28 73 71 6c 69  indowDelete(sqli
26da0 74 65 33 2a 2c 20 57 69 6e 64 6f 77 2a 29 3b 0a  te3*, Window*);.
26db0 76 6f 69 64 20 73 71 6c 69 74 65 33 57 69 6e 64  void sqlite3Wind
26dc0 6f 77 4c 69 73 74 44 65 6c 65 74 65 28 73 71 6c  owListDelete(sql
26dd0 69 74 65 33 20 2a 64 62 2c 20 57 69 6e 64 6f 77  ite3 *db, Window
26de0 20 2a 70 29 3b 0a 57 69 6e 64 6f 77 20 2a 73 71   *p);.Window *sq
26df0 6c 69 74 65 33 57 69 6e 64 6f 77 41 6c 6c 6f 63  lite3WindowAlloc
26e00 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e  (Parse*, int, in
26e10 74 2c 20 45 78 70 72 2a 2c 20 69 6e 74 20 2c 20  t, Expr*, int , 
26e20 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  Expr*);.void sql
26e30 69 74 65 33 57 69 6e 64 6f 77 41 74 74 61 63 68  ite3WindowAttach
26e40 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20  (Parse*, Expr*, 
26e50 57 69 6e 64 6f 77 2a 29 3b 0a 69 6e 74 20 73 71  Window*);.int sq
26e60 6c 69 74 65 33 57 69 6e 64 6f 77 43 6f 6d 70 61  lite3WindowCompa
26e70 72 65 28 50 61 72 73 65 2a 2c 20 57 69 6e 64 6f  re(Parse*, Windo
26e80 77 2a 2c 20 57 69 6e 64 6f 77 2a 29 3b 0a 76 6f  w*, Window*);.vo
26e90 69 64 20 73 71 6c 69 74 65 33 57 69 6e 64 6f 77  id sqlite3Window
26ea0 43 6f 64 65 49 6e 69 74 28 50 61 72 73 65 2a 2c  CodeInit(Parse*,
26eb0 20 57 69 6e 64 6f 77 2a 29 3b 0a 76 6f 69 64 20   Window*);.void 
26ec0 73 71 6c 69 74 65 33 57 69 6e 64 6f 77 43 6f 64  sqlite3WindowCod
26ed0 65 53 74 65 70 28 50 61 72 73 65 2a 2c 20 53 65  eStep(Parse*, Se
26ee0 6c 65 63 74 2a 2c 20 57 68 65 72 65 49 6e 66 6f  lect*, WhereInfo
26ef0 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 69 6e  *, int, int);.in
26f00 74 20 73 71 6c 69 74 65 33 57 69 6e 64 6f 77 52  t sqlite3WindowR
26f10 65 77 72 69 74 65 28 50 61 72 73 65 2a 2c 20 53  ewrite(Parse*, S
26f20 65 6c 65 63 74 2a 29 3b 0a 69 6e 74 20 73 71 6c  elect*);.int sql
26f30 69 74 65 33 45 78 70 61 6e 64 53 75 62 71 75 65  ite3ExpandSubque
26f40 72 79 28 50 61 72 73 65 2a 2c 20 73 74 72 75 63  ry(Parse*, struc
26f50 74 20 53 72 63 4c 69 73 74 5f 69 74 65 6d 2a 29  t SrcList_item*)
26f60 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 57 69  ;.void sqlite3Wi
26f70 6e 64 6f 77 55 70 64 61 74 65 28 50 61 72 73 65  ndowUpdate(Parse
26f80 2a 2c 20 57 69 6e 64 6f 77 2a 2c 20 57 69 6e 64  *, Window*, Wind
26f90 6f 77 2a 2c 20 46 75 6e 63 44 65 66 2a 29 3b 0a  ow*, FuncDef*);.
26fa0 57 69 6e 64 6f 77 20 2a 73 71 6c 69 74 65 33 57  Window *sqlite3W
26fb0 69 6e 64 6f 77 44 75 70 28 73 71 6c 69 74 65 33  indowDup(sqlite3
26fc0 20 2a 64 62 2c 20 45 78 70 72 20 2a 70 4f 77 6e   *db, Expr *pOwn
26fd0 65 72 2c 20 57 69 6e 64 6f 77 20 2a 70 29 3b 0a  er, Window *p);.
26fe0 57 69 6e 64 6f 77 20 2a 73 71 6c 69 74 65 33 57  Window *sqlite3W
26ff0 69 6e 64 6f 77 4c 69 73 74 44 75 70 28 73 71 6c  indowListDup(sql
27000 69 74 65 33 20 2a 64 62 2c 20 57 69 6e 64 6f 77  ite3 *db, Window
27010 20 2a 70 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74   *p);.void sqlit
27020 65 33 57 69 6e 64 6f 77 46 75 6e 63 74 69 6f 6e  e3WindowFunction
27030 73 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20 73 71  s(void);.void sq
27040 6c 69 74 65 33 57 69 6e 64 6f 77 43 68 61 69 6e  lite3WindowChain
27050 28 50 61 72 73 65 2a 2c 20 57 69 6e 64 6f 77 2a  (Parse*, Window*
27060 2c 20 57 69 6e 64 6f 77 2a 29 3b 0a 57 69 6e 64  , Window*);.Wind
27070 6f 77 20 2a 73 71 6c 69 74 65 33 57 69 6e 64 6f  ow *sqlite3Windo
27080 77 41 73 73 65 6d 62 6c 65 28 50 61 72 73 65 2a  wAssemble(Parse*
27090 2c 20 57 69 6e 64 6f 77 2a 2c 20 45 78 70 72 4c  , Window*, ExprL
270a0 69 73 74 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c  ist*, ExprList*,
270b0 20 54 6f 6b 65 6e 2a 29 3b 0a 23 65 6c 73 65 0a   Token*);.#else.
270c0 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
270d0 57 69 6e 64 6f 77 44 65 6c 65 74 65 28 61 2c 62  WindowDelete(a,b
270e0 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
270f0 65 33 57 69 6e 64 6f 77 46 75 6e 63 74 69 6f 6e  e3WindowFunction
27100 73 28 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  s().# define sql
27110 69 74 65 33 57 69 6e 64 6f 77 41 74 74 61 63 68  ite3WindowAttach
27120 28 61 2c 62 2c 63 29 0a 23 65 6e 64 69 66 0a 0a  (a,b,c).#endif..
27130 2f 2a 0a 2a 2a 20 41 73 73 75 6d 69 6e 67 20 7a  /*.** Assuming z
27140 49 6e 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65  In points to the
27150 20 66 69 72 73 74 20 62 79 74 65 20 6f 66 20 61   first byte of a
27160 20 55 54 46 2d 38 20 63 68 61 72 61 63 74 65 72   UTF-8 character
27170 2c 0a 2a 2a 20 61 64 76 61 6e 63 65 20 7a 49 6e  ,.** advance zIn
27180 20 74 6f 20 70 6f 69 6e 74 20 74 6f 20 74 68 65   to point to the
27190 20 66 69 72 73 74 20 62 79 74 65 20 6f 66 20 74   first byte of t
271a0 68 65 20 6e 65 78 74 20 55 54 46 2d 38 20 63 68  he next UTF-8 ch
271b0 61 72 61 63 74 65 72 2e 0a 2a 2f 0a 23 64 65 66  aracter..*/.#def
271c0 69 6e 65 20 53 51 4c 49 54 45 5f 53 4b 49 50 5f  ine SQLITE_SKIP_
271d0 55 54 46 38 28 7a 49 6e 29 20 7b 20 20 20 20 20  UTF8(zIn) {     
271e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
271f0 20 20 20 5c 0a 20 20 69 66 28 20 28 2a 28 7a 49     \.  if( (*(zI
27200 6e 2b 2b 29 29 3e 3d 30 78 63 30 20 29 7b 20 20  n++))>=0xc0 ){  
27210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27220 20 20 20 20 20 20 20 20 20 20 20 20 5c 0a 20 20              \.  
27230 20 20 77 68 69 6c 65 28 20 28 2a 7a 49 6e 20 26    while( (*zIn &
27240 20 30 78 63 30 29 3d 3d 30 78 38 30 20 29 7b 20   0xc0)==0x80 ){ 
27250 7a 49 6e 2b 2b 3b 20 7d 20 20 20 20 20 20 20 20  zIn++; }        
27260 20 20 20 20 20 5c 0a 20 20 7d 20 20 20 20 20 20       \.  }      
27270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5c 0a                \.
272a0 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 53 51 4c  }../*.** The SQL
272b0 49 54 45 5f 2a 5f 42 4b 50 54 20 6d 61 63 72 6f  ITE_*_BKPT macro
272c0 73 20 61 72 65 20 73 75 62 73 74 69 74 75 74 65  s are substitute
272d0 73 20 66 6f 72 20 74 68 65 20 65 72 72 6f 72 20  s for the error 
272e0 63 6f 64 65 73 20 77 69 74 68 0a 2a 2a 20 74 68  codes with.** th
272f0 65 20 73 61 6d 65 20 6e 61 6d 65 20 62 75 74 20  e same name but 
27300 77 69 74 68 6f 75 74 20 74 68 65 20 5f 42 4b 50  without the _BKP
27310 54 20 73 75 66 66 69 78 2e 20 20 54 68 65 73 65  T suffix.  These
27320 20 6d 61 63 72 6f 73 20 69 6e 76 6f 6b 65 0a 2a   macros invoke.*
27330 2a 20 72 6f 75 74 69 6e 65 73 20 74 68 61 74 20  * routines that 
27340 72 65 70 6f 72 74 20 74 68 65 20 6c 69 6e 65 2d  report the line-
27350 6e 75 6d 62 65 72 20 6f 6e 20 77 68 69 63 68 20  number on which 
27360 74 68 65 20 65 72 72 6f 72 20 6f 72 69 67 69 6e  the error origin
27370 61 74 65 64 0a 2a 2a 20 75 73 69 6e 67 20 73 71  ated.** using sq
27380 6c 69 74 65 33 5f 6c 6f 67 28 29 2e 20 20 54 68  lite3_log().  Th
27390 65 20 72 6f 75 74 69 6e 65 73 20 61 6c 73 6f 20  e routines also 
273a0 70 72 6f 76 69 64 65 20 61 20 63 6f 6e 76 65 6e  provide a conven
273b0 69 65 6e 74 20 70 6c 61 63 65 0a 2a 2a 20 74 6f  ient place.** to
273c0 20 73 65 74 20 61 20 64 65 62 75 67 67 65 72 20   set a debugger 
273d0 62 72 65 61 6b 70 6f 69 6e 74 2e 0a 2a 2f 0a 69  breakpoint..*/.i
273e0 6e 74 20 73 71 6c 69 74 65 33 52 65 70 6f 72 74  nt sqlite3Report
273f0 45 72 72 6f 72 28 69 6e 74 20 69 45 72 72 2c 20  Error(int iErr, 
27400 69 6e 74 20 6c 69 6e 65 6e 6f 2c 20 63 6f 6e 73  int lineno, cons
27410 74 20 63 68 61 72 20 2a 7a 54 79 70 65 29 3b 0a  t char *zType);.
27420 69 6e 74 20 73 71 6c 69 74 65 33 43 6f 72 72 75  int sqlite3Corru
27430 70 74 45 72 72 6f 72 28 69 6e 74 29 3b 0a 69 6e  ptError(int);.in
27440 74 20 73 71 6c 69 74 65 33 4d 69 73 75 73 65 45  t sqlite3MisuseE
27450 72 72 6f 72 28 69 6e 74 29 3b 0a 69 6e 74 20 73  rror(int);.int s
27460 71 6c 69 74 65 33 43 61 6e 74 6f 70 65 6e 45 72  qlite3CantopenEr
27470 72 6f 72 28 69 6e 74 29 3b 0a 23 64 65 66 69 6e  ror(int);.#defin
27480 65 20 53 51 4c 49 54 45 5f 43 4f 52 52 55 50 54  e SQLITE_CORRUPT
27490 5f 42 4b 50 54 20 73 71 6c 69 74 65 33 43 6f 72  _BKPT sqlite3Cor
274a0 72 75 70 74 45 72 72 6f 72 28 5f 5f 4c 49 4e 45  ruptError(__LINE
274b0 5f 5f 29 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  __).#define SQLI
274c0 54 45 5f 4d 49 53 55 53 45 5f 42 4b 50 54 20 73  TE_MISUSE_BKPT s
274d0 71 6c 69 74 65 33 4d 69 73 75 73 65 45 72 72 6f  qlite3MisuseErro
274e0 72 28 5f 5f 4c 49 4e 45 5f 5f 29 0a 23 64 65 66  r(__LINE__).#def
274f0 69 6e 65 20 53 51 4c 49 54 45 5f 43 41 4e 54 4f  ine SQLITE_CANTO
27500 50 45 4e 5f 42 4b 50 54 20 73 71 6c 69 74 65 33  PEN_BKPT sqlite3
27510 43 61 6e 74 6f 70 65 6e 45 72 72 6f 72 28 5f 5f  CantopenError(__
27520 4c 49 4e 45 5f 5f 29 0a 23 69 66 64 65 66 20 53  LINE__).#ifdef S
27530 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 69 6e  QLITE_DEBUG.  in
27540 74 20 73 71 6c 69 74 65 33 4e 6f 6d 65 6d 45 72  t sqlite3NomemEr
27550 72 6f 72 28 69 6e 74 29 3b 0a 20 20 69 6e 74 20  ror(int);.  int 
27560 73 71 6c 69 74 65 33 49 6f 65 72 72 6e 6f 6d 65  sqlite3Ioerrnome
27570 6d 45 72 72 6f 72 28 69 6e 74 29 3b 0a 20 20 69  mError(int);.  i
27580 6e 74 20 73 71 6c 69 74 65 33 43 6f 72 72 75 70  nt sqlite3Corrup
27590 74 50 67 6e 6f 45 72 72 6f 72 28 69 6e 74 2c 50  tPgnoError(int,P
275a0 67 6e 6f 29 3b 0a 23 20 64 65 66 69 6e 65 20 53  gno);.# define S
275b0 51 4c 49 54 45 5f 4e 4f 4d 45 4d 5f 42 4b 50 54  QLITE_NOMEM_BKPT
275c0 20 73 71 6c 69 74 65 33 4e 6f 6d 65 6d 45 72 72   sqlite3NomemErr
275d0 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 29 0a 23 20 64  or(__LINE__).# d
275e0 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49 4f 45  efine SQLITE_IOE
275f0 52 52 5f 4e 4f 4d 45 4d 5f 42 4b 50 54 20 73 71  RR_NOMEM_BKPT sq
27600 6c 69 74 65 33 49 6f 65 72 72 6e 6f 6d 65 6d 45  lite3IoerrnomemE
27610 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 29 0a 23  rror(__LINE__).#
27620 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43   define SQLITE_C
27630 4f 52 52 55 50 54 5f 50 47 4e 4f 28 50 29 20 73  ORRUPT_PGNO(P) s
27640 71 6c 69 74 65 33 43 6f 72 72 75 70 74 50 67 6e  qlite3CorruptPgn
27650 6f 45 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 2c  oError(__LINE__,
27660 28 50 29 29 0a 23 65 6c 73 65 0a 23 20 64 65 66  (P)).#else.# def
27670 69 6e 65 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d  ine SQLITE_NOMEM
27680 5f 42 4b 50 54 20 53 51 4c 49 54 45 5f 4e 4f 4d  _BKPT SQLITE_NOM
27690 45 4d 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  EM.# define SQLI
276a0 54 45 5f 49 4f 45 52 52 5f 4e 4f 4d 45 4d 5f 42  TE_IOERR_NOMEM_B
276b0 4b 50 54 20 53 51 4c 49 54 45 5f 49 4f 45 52 52  KPT SQLITE_IOERR
276c0 5f 4e 4f 4d 45 4d 0a 23 20 64 65 66 69 6e 65 20  _NOMEM.# define 
276d0 53 51 4c 49 54 45 5f 43 4f 52 52 55 50 54 5f 50  SQLITE_CORRUPT_P
276e0 47 4e 4f 28 50 29 20 73 71 6c 69 74 65 33 43 6f  GNO(P) sqlite3Co
276f0 72 72 75 70 74 45 72 72 6f 72 28 5f 5f 4c 49 4e  rruptError(__LIN
27700 45 5f 5f 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  E__).#endif../*.
27710 2a 2a 20 46 54 53 33 20 61 6e 64 20 46 54 53 34  ** FTS3 and FTS4
27720 20 62 6f 74 68 20 72 65 71 75 69 72 65 20 76 69   both require vi
27730 72 74 75 61 6c 20 74 61 62 6c 65 20 73 75 70 70  rtual table supp
27740 6f 72 74 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e  ort.*/.#if defin
27750 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  ed(SQLITE_OMIT_V
27760 49 52 54 55 41 4c 54 41 42 4c 45 29 0a 23 20 75  IRTUALTABLE).# u
27770 6e 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  ndef SQLITE_ENAB
27780 4c 45 5f 46 54 53 33 0a 23 20 75 6e 64 65 66 20  LE_FTS3.# undef 
27790 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54  SQLITE_ENABLE_FT
277a0 53 34 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  S4.#endif../*.**
277b0 20 46 54 53 34 20 69 73 20 72 65 61 6c 6c 79 20   FTS4 is really 
277c0 61 6e 20 65 78 74 65 6e 73 69 6f 6e 20 66 6f 72  an extension for
277d0 20 46 54 53 33 2e 20 20 49 74 20 69 73 20 65 6e   FTS3.  It is en
277e0 61 62 6c 65 64 20 75 73 69 6e 67 20 74 68 65 0a  abled using the.
277f0 2a 2a 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ** SQLITE_ENABLE
27800 5f 46 54 53 33 20 6d 61 63 72 6f 2e 20 20 42 75  _FTS3 macro.  Bu
27810 74 20 74 6f 20 61 76 6f 69 64 20 63 6f 6e 66 75  t to avoid confu
27820 73 69 6f 6e 20 77 65 20 61 6c 73 6f 20 63 61 6c  sion we also cal
27830 6c 0a 2a 2a 20 74 68 65 20 53 51 4c 49 54 45 5f  l.** the SQLITE_
27840 45 4e 41 42 4c 45 5f 46 54 53 34 20 6d 61 63 72  ENABLE_FTS4 macr
27850 6f 20 74 6f 20 73 65 72 76 65 20 61 73 20 61 6e  o to serve as an
27860 20 61 6c 69 61 73 20 66 6f 72 20 53 51 4c 49 54   alias for SQLIT
27870 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33 2e 0a 2a  E_ENABLE_FTS3..*
27880 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51  /.#if defined(SQ
27890 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 34  LITE_ENABLE_FTS4
278a0 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 53 51  ) && !defined(SQ
278b0 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33  LITE_ENABLE_FTS3
278c0 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  ).# define SQLIT
278d0 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33 20 31 0a  E_ENABLE_FTS3 1.
278e0 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68  #endif../*.** Th
278f0 65 20 63 74 79 70 65 2e 68 20 68 65 61 64 65 72  e ctype.h header
27900 20 69 73 20 6e 65 65 64 65 64 20 66 6f 72 20 6e   is needed for n
27910 6f 6e 2d 41 53 43 49 49 20 73 79 73 74 65 6d 73  on-ASCII systems
27920 2e 20 20 49 74 20 69 73 20 61 6c 73 6f 0a 2a 2a  .  It is also.**
27930 20 6e 65 65 64 65 64 20 62 79 20 46 54 53 33 20   needed by FTS3 
27940 77 68 65 6e 20 46 54 53 33 20 69 73 20 69 6e 63  when FTS3 is inc
27950 6c 75 64 65 64 20 69 6e 20 74 68 65 20 61 6d 61  luded in the ama
27960 6c 67 61 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 23 69  lgamation..*/.#i
27970 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  f !defined(SQLIT
27980 45 5f 41 53 43 49 49 29 20 7c 7c 20 5c 0a 20 20  E_ASCII) || \.  
27990 20 20 28 64 65 66 69 6e 65 64 28 53 51 4c 49 54    (defined(SQLIT
279a0 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33 29 20 26  E_ENABLE_FTS3) &
279b0 26 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  & defined(SQLITE
279c0 5f 41 4d 41 4c 47 41 4d 41 54 49 4f 4e 29 29 0a  _AMALGAMATION)).
279d0 23 20 69 6e 63 6c 75 64 65 20 3c 63 74 79 70 65  # include <ctype
279e0 2e 68 3e 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  .h>.#endif../*.*
279f0 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  * The following 
27a00 6d 61 63 72 6f 73 20 6d 69 6d 69 63 20 74 68 65  macros mimic the
27a10 20 73 74 61 6e 64 61 72 64 20 6c 69 62 72 61 72   standard librar
27a20 79 20 66 75 6e 63 74 69 6f 6e 73 20 74 6f 75 70  y functions toup
27a30 70 65 72 28 29 2c 0a 2a 2a 20 69 73 73 70 61 63  per(),.** isspac
27a40 65 28 29 2c 20 69 73 61 6c 6e 75 6d 28 29 2c 20  e(), isalnum(), 
27a50 69 73 64 69 67 69 74 28 29 20 61 6e 64 20 69 73  isdigit() and is
27a60 78 64 69 67 69 74 28 29 2c 20 72 65 73 70 65 63  xdigit(), respec
27a70 74 69 76 65 6c 79 2e 20 54 68 65 0a 2a 2a 20 73  tively. The.** s
27a80 71 6c 69 74 65 20 76 65 72 73 69 6f 6e 73 20 6f  qlite versions o
27a90 6e 6c 79 20 77 6f 72 6b 20 66 6f 72 20 41 53 43  nly work for ASC
27aa0 49 49 20 63 68 61 72 61 63 74 65 72 73 2c 20 72  II characters, r
27ab0 65 67 61 72 64 6c 65 73 73 20 6f 66 20 6c 6f 63  egardless of loc
27ac0 61 6c 65 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53  ale..*/.#ifdef S
27ad0 51 4c 49 54 45 5f 41 53 43 49 49 0a 23 20 64 65  QLITE_ASCII.# de
27ae0 66 69 6e 65 20 73 71 6c 69 74 65 33 54 6f 75 70  fine sqlite3Toup
27af0 70 65 72 28 78 29 20 20 28 28 78 29 26 7e 28 73  per(x)  ((x)&~(s
27b00 71 6c 69 74 65 33 43 74 79 70 65 4d 61 70 5b 28  qlite3CtypeMap[(
27b10 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78  unsigned char)(x
27b20 29 5d 26 30 78 32 30 29 29 0a 23 20 64 65 66 69  )]&0x20)).# defi
27b30 6e 65 20 73 71 6c 69 74 65 33 49 73 73 70 61 63  ne sqlite3Isspac
27b40 65 28 78 29 20 20 20 28 73 71 6c 69 74 65 33 43  e(x)   (sqlite3C
27b50 74 79 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65  typeMap[(unsigne
27b60 64 20 63 68 61 72 29 28 78 29 5d 26 30 78 30 31  d char)(x)]&0x01
27b70 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
27b80 65 33 49 73 61 6c 6e 75 6d 28 78 29 20 20 20 28  e3Isalnum(x)   (
27b90 73 71 6c 69 74 65 33 43 74 79 70 65 4d 61 70 5b  sqlite3CtypeMap[
27ba0 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28  (unsigned char)(
27bb0 78 29 5d 26 30 78 30 36 29 0a 23 20 64 65 66 69  x)]&0x06).# defi
27bc0 6e 65 20 73 71 6c 69 74 65 33 49 73 61 6c 70 68  ne sqlite3Isalph
27bd0 61 28 78 29 20 20 20 28 73 71 6c 69 74 65 33 43  a(x)   (sqlite3C
27be0 74 79 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65  typeMap[(unsigne
27bf0 64 20 63 68 61 72 29 28 78 29 5d 26 30 78 30 32  d char)(x)]&0x02
27c00 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
27c10 65 33 49 73 64 69 67 69 74 28 78 29 20 20 20 28  e3Isdigit(x)   (
27c20 73 71 6c 69 74 65 33 43 74 79 70 65 4d 61 70 5b  sqlite3CtypeMap[
27c30 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28  (unsigned char)(
27c40 78 29 5d 26 30 78 30 34 29 0a 23 20 64 65 66 69  x)]&0x04).# defi
27c50 6e 65 20 73 71 6c 69 74 65 33 49 73 78 64 69 67  ne sqlite3Isxdig
27c60 69 74 28 78 29 20 20 28 73 71 6c 69 74 65 33 43  it(x)  (sqlite3C
27c70 74 79 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65  typeMap[(unsigne
27c80 64 20 63 68 61 72 29 28 78 29 5d 26 30 78 30 38  d char)(x)]&0x08
27c90 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
27ca0 65 33 54 6f 6c 6f 77 65 72 28 78 29 20 20 20 28  e3Tolower(x)   (
27cb0 73 71 6c 69 74 65 33 55 70 70 65 72 54 6f 4c 6f  sqlite3UpperToLo
27cc0 77 65 72 5b 28 75 6e 73 69 67 6e 65 64 20 63 68  wer[(unsigned ch
27cd0 61 72 29 28 78 29 5d 29 0a 23 20 64 65 66 69 6e  ar)(x)]).# defin
27ce0 65 20 73 71 6c 69 74 65 33 49 73 71 75 6f 74 65  e sqlite3Isquote
27cf0 28 78 29 20 20 20 28 73 71 6c 69 74 65 33 43 74  (x)   (sqlite3Ct
27d00 79 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64  ypeMap[(unsigned
27d10 20 63 68 61 72 29 28 78 29 5d 26 30 78 38 30 29   char)(x)]&0x80)
27d20 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
27d30 73 71 6c 69 74 65 33 54 6f 75 70 70 65 72 28 78  sqlite3Toupper(x
27d40 29 20 20 20 74 6f 75 70 70 65 72 28 28 75 6e 73  )   toupper((uns
27d50 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 29 0a  igned char)(x)).
27d60 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
27d70 49 73 73 70 61 63 65 28 78 29 20 20 20 69 73 73  Isspace(x)   iss
27d80 70 61 63 65 28 28 75 6e 73 69 67 6e 65 64 20 63  pace((unsigned c
27d90 68 61 72 29 28 78 29 29 0a 23 20 64 65 66 69 6e  har)(x)).# defin
27da0 65 20 73 71 6c 69 74 65 33 49 73 61 6c 6e 75 6d  e sqlite3Isalnum
27db0 28 78 29 20 20 20 69 73 61 6c 6e 75 6d 28 28 75  (x)   isalnum((u
27dc0 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29  nsigned char)(x)
27dd0 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
27de0 65 33 49 73 61 6c 70 68 61 28 78 29 20 20 20 69  e3Isalpha(x)   i
27df0 73 61 6c 70 68 61 28 28 75 6e 73 69 67 6e 65 64  salpha((unsigned
27e00 20 63 68 61 72 29 28 78 29 29 0a 23 20 64 65 66   char)(x)).# def
27e10 69 6e 65 20 73 71 6c 69 74 65 33 49 73 64 69 67  ine sqlite3Isdig
27e20 69 74 28 78 29 20 20 20 69 73 64 69 67 69 74 28  it(x)   isdigit(
27e30 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28  (unsigned char)(
27e40 78 29 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  x)).# define sql
27e50 69 74 65 33 49 73 78 64 69 67 69 74 28 78 29 20  ite3Isxdigit(x) 
27e60 20 69 73 78 64 69 67 69 74 28 28 75 6e 73 69 67   isxdigit((unsig
27e70 6e 65 64 20 63 68 61 72 29 28 78 29 29 0a 23 20  ned char)(x)).# 
27e80 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54 6f  define sqlite3To
27e90 6c 6f 77 65 72 28 78 29 20 20 20 74 6f 6c 6f 77  lower(x)   tolow
27ea0 65 72 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61  er((unsigned cha
27eb0 72 29 28 78 29 29 0a 23 20 64 65 66 69 6e 65 20  r)(x)).# define 
27ec0 73 71 6c 69 74 65 33 49 73 71 75 6f 74 65 28 78  sqlite3Isquote(x
27ed0 29 20 20 20 28 28 78 29 3d 3d 27 22 27 7c 7c 28  )   ((x)=='"'||(
27ee0 78 29 3d 3d 27 5c 27 27 7c 7c 28 78 29 3d 3d 27  x)=='\''||(x)=='
27ef0 5b 27 7c 7c 28 78 29 3d 3d 27 60 27 29 0a 23 65  ['||(x)=='`').#e
27f00 6e 64 69 66 0a 69 6e 74 20 73 71 6c 69 74 65 33  ndif.int sqlite3
27f10 49 73 49 64 43 68 61 72 28 75 38 29 3b 0a 0a 2f  IsIdChar(u8);../
27f20 2a 0a 2a 2a 20 49 6e 74 65 72 6e 61 6c 20 66 75  *.** Internal fu
27f30 6e 63 74 69 6f 6e 20 70 72 6f 74 6f 74 79 70 65  nction prototype
27f40 73 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33  s.*/.int sqlite3
27f50 53 74 72 49 43 6d 70 28 63 6f 6e 73 74 20 63 68  StrICmp(const ch
27f60 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29  ar*,const char*)
27f70 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 74 72  ;.int sqlite3Str
27f80 6c 65 6e 33 30 28 63 6f 6e 73 74 20 63 68 61 72  len30(const char
27f90 2a 29 3b 0a 23 64 65 66 69 6e 65 20 73 71 6c 69  *);.#define sqli
27fa0 74 65 33 53 74 72 6c 65 6e 33 30 4e 4e 28 43 29  te3Strlen30NN(C)
27fb0 20 28 73 74 72 6c 65 6e 28 43 29 26 30 78 33 66   (strlen(C)&0x3f
27fc0 66 66 66 66 66 66 29 0a 63 68 61 72 20 2a 73 71  ffffff).char *sq
27fd0 6c 69 74 65 33 43 6f 6c 75 6d 6e 54 79 70 65 28  lite3ColumnType(
27fe0 43 6f 6c 75 6d 6e 2a 2c 63 68 61 72 2a 29 3b 0a  Column*,char*);.
27ff0 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53  #define sqlite3S
28000 74 72 4e 49 43 6d 70 20 73 71 6c 69 74 65 33 5f  trNICmp sqlite3_
28010 73 74 72 6e 69 63 6d 70 0a 0a 69 6e 74 20 73 71  strnicmp..int sq
28020 6c 69 74 65 33 4d 61 6c 6c 6f 63 49 6e 69 74 28  lite3MallocInit(
28030 76 6f 69 64 29 3b 0a 76 6f 69 64 20 73 71 6c 69  void);.void sqli
28040 74 65 33 4d 61 6c 6c 6f 63 45 6e 64 28 76 6f 69  te3MallocEnd(voi
28050 64 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65  d);.void *sqlite
28060 33 4d 61 6c 6c 6f 63 28 75 36 34 29 3b 0a 76 6f  3Malloc(u64);.vo
28070 69 64 20 2a 73 71 6c 69 74 65 33 4d 61 6c 6c 6f  id *sqlite3Mallo
28080 63 5a 65 72 6f 28 75 36 34 29 3b 0a 76 6f 69 64  cZero(u64);.void
28090 20 2a 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f   *sqlite3DbMallo
280a0 63 5a 65 72 6f 28 73 71 6c 69 74 65 33 2a 2c 20  cZero(sqlite3*, 
280b0 75 36 34 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69  u64);.void *sqli
280c0 74 65 33 44 62 4d 61 6c 6c 6f 63 52 61 77 28 73  te3DbMallocRaw(s
280d0 71 6c 69 74 65 33 2a 2c 20 75 36 34 29 3b 0a 76  qlite3*, u64);.v
280e0 6f 69 64 20 2a 73 71 6c 69 74 65 33 44 62 4d 61  oid *sqlite3DbMa
280f0 6c 6c 6f 63 52 61 77 4e 4e 28 73 71 6c 69 74 65  llocRawNN(sqlite
28100 33 2a 2c 20 75 36 34 29 3b 0a 63 68 61 72 20 2a  3*, u64);.char *
28110 73 71 6c 69 74 65 33 44 62 53 74 72 44 75 70 28  sqlite3DbStrDup(
28120 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63  sqlite3*,const c
28130 68 61 72 2a 29 3b 0a 63 68 61 72 20 2a 73 71 6c  har*);.char *sql
28140 69 74 65 33 44 62 53 74 72 4e 44 75 70 28 73 71  ite3DbStrNDup(sq
28150 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61  lite3*,const cha
28160 72 2a 2c 20 75 36 34 29 3b 0a 63 68 61 72 20 2a  r*, u64);.char *
28170 73 71 6c 69 74 65 33 44 62 53 70 61 6e 44 75 70  sqlite3DbSpanDup
28180 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20  (sqlite3*,const 
28190 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72  char*,const char
281a0 2a 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65  *);.void *sqlite
281b0 33 52 65 61 6c 6c 6f 63 28 76 6f 69 64 2a 2c 20  3Realloc(void*, 
281c0 75 36 34 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69  u64);.void *sqli
281d0 74 65 33 44 62 52 65 61 6c 6c 6f 63 4f 72 46 72  te3DbReallocOrFr
281e0 65 65 28 73 71 6c 69 74 65 33 20 2a 2c 20 76 6f  ee(sqlite3 *, vo
281f0 69 64 20 2a 2c 20 75 36 34 29 3b 0a 76 6f 69 64  id *, u64);.void
28200 20 2a 73 71 6c 69 74 65 33 44 62 52 65 61 6c 6c   *sqlite3DbReall
28210 6f 63 28 73 71 6c 69 74 65 33 20 2a 2c 20 76 6f  oc(sqlite3 *, vo
28220 69 64 20 2a 2c 20 75 36 34 29 3b 0a 76 6f 69 64  id *, u64);.void
28230 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 73   sqlite3DbFree(s
28240 71 6c 69 74 65 33 2a 2c 20 76 6f 69 64 2a 29 3b  qlite3*, void*);
28250 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44 62 46  .void sqlite3DbF
28260 72 65 65 4e 4e 28 73 71 6c 69 74 65 33 2a 2c 20  reeNN(sqlite3*, 
28270 76 6f 69 64 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  void*);.int sqli
28280 74 65 33 4d 61 6c 6c 6f 63 53 69 7a 65 28 76 6f  te3MallocSize(vo
28290 69 64 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  id*);.int sqlite
282a0 33 44 62 4d 61 6c 6c 6f 63 53 69 7a 65 28 73 71  3DbMallocSize(sq
282b0 6c 69 74 65 33 2a 2c 20 76 6f 69 64 2a 29 3b 0a  lite3*, void*);.
282c0 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 50 61 67  void *sqlite3Pag
282d0 65 4d 61 6c 6c 6f 63 28 69 6e 74 29 3b 0a 76 6f  eMalloc(int);.vo
282e0 69 64 20 73 71 6c 69 74 65 33 50 61 67 65 46 72  id sqlite3PageFr
282f0 65 65 28 76 6f 69 64 2a 29 3b 0a 76 6f 69 64 20  ee(void*);.void 
28300 73 71 6c 69 74 65 33 4d 65 6d 53 65 74 44 65 66  sqlite3MemSetDef
28310 61 75 6c 74 28 76 6f 69 64 29 3b 0a 23 69 66 6e  ault(void);.#ifn
28320 64 65 66 20 53 51 4c 49 54 45 5f 55 4e 54 45 53  def SQLITE_UNTES
28330 54 41 42 4c 45 0a 76 6f 69 64 20 73 71 6c 69 74  TABLE.void sqlit
28340 65 33 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 48 6f  e3BenignMallocHo
28350 6f 6b 73 28 76 6f 69 64 20 28 2a 29 28 76 6f 69  oks(void (*)(voi
28360 64 29 2c 20 76 6f 69 64 20 28 2a 29 28 76 6f 69  d), void (*)(voi
28370 64 29 29 3b 0a 23 65 6e 64 69 66 0a 69 6e 74 20  d));.#endif.int 
28380 73 71 6c 69 74 65 33 48 65 61 70 4e 65 61 72 6c  sqlite3HeapNearl
28390 79 46 75 6c 6c 28 76 6f 69 64 29 3b 0a 0a 2f 2a  yFull(void);../*
283a0 0a 2a 2a 20 4f 6e 20 73 79 73 74 65 6d 73 20 77  .** On systems w
283b0 69 74 68 20 61 6d 70 6c 65 20 73 74 61 63 6b 20  ith ample stack 
283c0 73 70 61 63 65 20 61 6e 64 20 74 68 61 74 20 73  space and that s
283d0 75 70 70 6f 72 74 20 61 6c 6c 6f 63 61 28 29 2c  upport alloca(),
283e0 20 6d 61 6b 65 0a 2a 2a 20 75 73 65 20 6f 66 20   make.** use of 
283f0 61 6c 6c 6f 63 61 28 29 20 74 6f 20 6f 62 74 61  alloca() to obta
28400 69 6e 20 73 70 61 63 65 20 66 6f 72 20 6c 61 72  in space for lar
28410 67 65 20 61 75 74 6f 6d 61 74 69 63 20 6f 62 6a  ge automatic obj
28420 65 63 74 73 2e 20 20 42 79 20 64 65 66 61 75 6c  ects.  By defaul
28430 74 2c 0a 2a 2a 20 6f 62 74 61 69 6e 20 73 70 61  t,.** obtain spa
28440 63 65 20 66 72 6f 6d 20 6d 61 6c 6c 6f 63 28 29  ce from malloc()
28450 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 61 6c 6c 6f  ..**.** The allo
28460 63 61 28 29 20 72 6f 75 74 69 6e 65 20 6e 65 76  ca() routine nev
28470 65 72 20 72 65 74 75 72 6e 73 20 4e 55 4c 4c 2e  er returns NULL.
28480 20 20 54 68 69 73 20 77 69 6c 6c 20 63 61 75 73    This will caus
28490 65 20 63 6f 64 65 20 70 61 74 68 73 0a 2a 2a 20  e code paths.** 
284a0 74 68 61 74 20 64 65 61 6c 20 77 69 74 68 20 73  that deal with s
284b0 71 6c 69 74 65 33 53 74 61 63 6b 41 6c 6c 6f 63  qlite3StackAlloc
284c0 28 29 20 66 61 69 6c 75 72 65 73 20 74 6f 20 62  () failures to b
284d0 65 20 75 6e 72 65 61 63 68 61 62 6c 65 2e 0a 2a  e unreachable..*
284e0 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
284f0 55 53 45 5f 41 4c 4c 4f 43 41 0a 23 20 64 65 66  USE_ALLOCA.# def
28500 69 6e 65 20 73 71 6c 69 74 65 33 53 74 61 63 6b  ine sqlite3Stack
28510 41 6c 6c 6f 63 52 61 77 28 44 2c 4e 29 20 20 20  AllocRaw(D,N)   
28520 61 6c 6c 6f 63 61 28 4e 29 0a 23 20 64 65 66 69  alloca(N).# defi
28530 6e 65 20 73 71 6c 69 74 65 33 53 74 61 63 6b 41  ne sqlite3StackA
28540 6c 6c 6f 63 5a 65 72 6f 28 44 2c 4e 29 20 20 6d  llocZero(D,N)  m
28550 65 6d 73 65 74 28 61 6c 6c 6f 63 61 28 4e 29 2c  emset(alloca(N),
28560 20 30 2c 20 4e 29 0a 23 20 64 65 66 69 6e 65 20   0, N).# define 
28570 73 71 6c 69 74 65 33 53 74 61 63 6b 46 72 65 65  sqlite3StackFree
28580 28 44 2c 50 29 0a 23 65 6c 73 65 0a 23 20 64 65  (D,P).#else.# de
28590 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74 61 63  fine sqlite3Stac
285a0 6b 41 6c 6c 6f 63 52 61 77 28 44 2c 4e 29 20 20  kAllocRaw(D,N)  
285b0 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63   sqlite3DbMalloc
285c0 52 61 77 28 44 2c 4e 29 0a 23 20 64 65 66 69 6e  Raw(D,N).# defin
285d0 65 20 73 71 6c 69 74 65 33 53 74 61 63 6b 41 6c  e sqlite3StackAl
285e0 6c 6f 63 5a 65 72 6f 28 44 2c 4e 29 20 20 73 71  locZero(D,N)  sq
285f0 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 5a 65 72  lite3DbMallocZer
28600 6f 28 44 2c 4e 29 0a 23 20 64 65 66 69 6e 65 20  o(D,N).# define 
28610 73 71 6c 69 74 65 33 53 74 61 63 6b 46 72 65 65  sqlite3StackFree
28620 28 44 2c 50 29 20 20 20 20 20 20 20 73 71 6c 69  (D,P)       sqli
28630 74 65 33 44 62 46 72 65 65 28 44 2c 50 29 0a 23  te3DbFree(D,P).#
28640 65 6e 64 69 66 0a 0a 2f 2a 20 44 6f 20 6e 6f 74  endif../* Do not
28650 20 61 6c 6c 6f 77 20 62 6f 74 68 20 4d 45 4d 53   allow both MEMS
28660 59 53 35 20 61 6e 64 20 4d 45 4d 53 59 53 33 20  YS5 and MEMSYS3 
28670 74 6f 20 62 65 20 64 65 66 69 6e 65 64 20 74 6f  to be defined to
28680 67 65 74 68 65 72 2e 20 20 49 66 20 74 68 65 79  gether.  If they
28690 0a 2a 2a 20 61 72 65 2c 20 64 69 73 61 62 6c 65  .** are, disable
286a0 20 4d 45 4d 53 59 53 33 0a 2a 2f 0a 23 69 66 64   MEMSYS3.*/.#ifd
286b0 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ef SQLITE_ENABLE
286c0 5f 4d 45 4d 53 59 53 35 0a 63 6f 6e 73 74 20 73  _MEMSYS5.const s
286d0 71 6c 69 74 65 33 5f 6d 65 6d 5f 6d 65 74 68 6f  qlite3_mem_metho
286e0 64 73 20 2a 73 71 6c 69 74 65 33 4d 65 6d 47 65  ds *sqlite3MemGe
286f0 74 4d 65 6d 73 79 73 35 28 76 6f 69 64 29 3b 0a  tMemsys5(void);.
28700 23 75 6e 64 65 66 20 53 51 4c 49 54 45 5f 45 4e  #undef SQLITE_EN
28710 41 42 4c 45 5f 4d 45 4d 53 59 53 33 0a 23 65 6e  ABLE_MEMSYS3.#en
28720 64 69 66 0a 23 69 66 64 65 66 20 53 51 4c 49 54  dif.#ifdef SQLIT
28730 45 5f 45 4e 41 42 4c 45 5f 4d 45 4d 53 59 53 33  E_ENABLE_MEMSYS3
28740 0a 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d  .const sqlite3_m
28750 65 6d 5f 6d 65 74 68 6f 64 73 20 2a 73 71 6c 69  em_methods *sqli
28760 74 65 33 4d 65 6d 47 65 74 4d 65 6d 73 79 73 33  te3MemGetMemsys3
28770 28 76 6f 69 64 29 3b 0a 23 65 6e 64 69 66 0a 0a  (void);.#endif..
28780 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
28790 4d 55 54 45 58 5f 4f 4d 49 54 0a 20 20 73 71 6c  MUTEX_OMIT.  sql
287a0 69 74 65 33 5f 6d 75 74 65 78 5f 6d 65 74 68 6f  ite3_mutex_metho
287b0 64 73 20 63 6f 6e 73 74 20 2a 73 71 6c 69 74 65  ds const *sqlite
287c0 33 44 65 66 61 75 6c 74 4d 75 74 65 78 28 76 6f  3DefaultMutex(vo
287d0 69 64 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f 6d  id);.  sqlite3_m
287e0 75 74 65 78 5f 6d 65 74 68 6f 64 73 20 63 6f 6e  utex_methods con
287f0 73 74 20 2a 73 71 6c 69 74 65 33 4e 6f 6f 70 4d  st *sqlite3NoopM
28800 75 74 65 78 28 76 6f 69 64 29 3b 0a 20 20 73 71  utex(void);.  sq
28810 6c 69 74 65 33 5f 6d 75 74 65 78 20 2a 73 71 6c  lite3_mutex *sql
28820 69 74 65 33 4d 75 74 65 78 41 6c 6c 6f 63 28 69  ite3MutexAlloc(i
28830 6e 74 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74  nt);.  int sqlit
28840 65 33 4d 75 74 65 78 49 6e 69 74 28 76 6f 69 64  e3MutexInit(void
28850 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33  );.  int sqlite3
28860 4d 75 74 65 78 45 6e 64 28 76 6f 69 64 29 3b 0a  MutexEnd(void);.
28870 23 65 6e 64 69 66 0a 23 69 66 20 21 64 65 66 69  #endif.#if !defi
28880 6e 65 64 28 53 51 4c 49 54 45 5f 4d 55 54 45 58  ned(SQLITE_MUTEX
28890 5f 4f 4d 49 54 29 20 26 26 20 21 64 65 66 69 6e  _OMIT) && !defin
288a0 65 64 28 53 51 4c 49 54 45 5f 4d 55 54 45 58 5f  ed(SQLITE_MUTEX_
288b0 4e 4f 4f 50 29 0a 20 20 76 6f 69 64 20 73 71 6c  NOOP).  void sql
288c0 69 74 65 33 4d 65 6d 6f 72 79 42 61 72 72 69 65  ite3MemoryBarrie
288d0 72 28 76 6f 69 64 29 3b 0a 23 65 6c 73 65 0a 23  r(void);.#else.#
288e0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 4d   define sqlite3M
288f0 65 6d 6f 72 79 42 61 72 72 69 65 72 28 29 0a 23  emoryBarrier().#
28900 65 6e 64 69 66 0a 0a 73 71 6c 69 74 65 33 5f 69  endif..sqlite3_i
28910 6e 74 36 34 20 73 71 6c 69 74 65 33 53 74 61 74  nt64 sqlite3Stat
28920 75 73 56 61 6c 75 65 28 69 6e 74 29 3b 0a 76 6f  usValue(int);.vo
28930 69 64 20 73 71 6c 69 74 65 33 53 74 61 74 75 73  id sqlite3Status
28940 55 70 28 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f  Up(int, int);.vo
28950 69 64 20 73 71 6c 69 74 65 33 53 74 61 74 75 73  id sqlite3Status
28960 44 6f 77 6e 28 69 6e 74 2c 20 69 6e 74 29 3b 0a  Down(int, int);.
28970 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74 61 74  void sqlite3Stat
28980 75 73 48 69 67 68 77 61 74 65 72 28 69 6e 74 2c  usHighwater(int,
28990 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74   int);.int sqlit
289a0 65 33 4c 6f 6f 6b 61 73 69 64 65 55 73 65 64 28  e3LookasideUsed(
289b0 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2a 29 3b 0a  sqlite3*,int*);.
289c0 0a 2f 2a 20 41 63 63 65 73 73 20 74 6f 20 6d 75  ./* Access to mu
289d0 74 65 78 65 73 20 75 73 65 64 20 62 79 20 73 71  texes used by sq
289e0 6c 69 74 65 33 5f 73 74 61 74 75 73 28 29 20 2a  lite3_status() *
289f0 2f 0a 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 20  /.sqlite3_mutex 
28a00 2a 73 71 6c 69 74 65 33 50 63 61 63 68 65 31 4d  *sqlite3Pcache1M
28a10 75 74 65 78 28 76 6f 69 64 29 3b 0a 73 71 6c 69  utex(void);.sqli
28a20 74 65 33 5f 6d 75 74 65 78 20 2a 73 71 6c 69 74  te3_mutex *sqlit
28a30 65 33 4d 61 6c 6c 6f 63 4d 75 74 65 78 28 76 6f  e3MallocMutex(vo
28a40 69 64 29 3b 0a 0a 23 69 66 20 64 65 66 69 6e 65  id);..#if define
28a50 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  d(SQLITE_ENABLE_
28a60 4d 55 4c 54 49 54 48 52 45 41 44 45 44 5f 43 48  MULTITHREADED_CH
28a70 45 43 4b 53 29 20 26 26 20 21 64 65 66 69 6e 65  ECKS) && !define
28a80 64 28 53 51 4c 49 54 45 5f 4d 55 54 45 58 5f 4f  d(SQLITE_MUTEX_O
28a90 4d 49 54 29 0a 76 6f 69 64 20 73 71 6c 69 74 65  MIT).void sqlite
28aa0 33 4d 75 74 65 78 57 61 72 6e 4f 6e 43 6f 6e 74  3MutexWarnOnCont
28ab0 65 6e 74 69 6f 6e 28 73 71 6c 69 74 65 33 5f 6d  ention(sqlite3_m
28ac0 75 74 65 78 2a 29 3b 0a 23 65 6c 73 65 0a 23 20  utex*);.#else.# 
28ad0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 4d 75  define sqlite3Mu
28ae0 74 65 78 57 61 72 6e 4f 6e 43 6f 6e 74 65 6e 74  texWarnOnContent
28af0 69 6f 6e 28 78 29 0a 23 65 6e 64 69 66 0a 0a 23  ion(x).#endif..#
28b00 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
28b10 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e  IT_FLOATING_POIN
28b20 54 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 49  T.  int sqlite3I
28b30 73 4e 61 4e 28 64 6f 75 62 6c 65 29 3b 0a 23 65  sNaN(double);.#e
28b40 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  lse.# define sql
28b50 69 74 65 33 49 73 4e 61 4e 28 58 29 20 20 30 0a  ite3IsNaN(X)  0.
28b60 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6e  #endif../*.** An
28b70 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65   instance of the
28b80 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63   following struc
28b90 74 75 72 65 20 68 6f 6c 64 73 20 69 6e 66 6f 72  ture holds infor
28ba0 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 53 51 4c  mation about SQL
28bb0 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 73 20 61 72  .** functions ar
28bc0 67 75 6d 65 6e 74 73 20 74 68 61 74 20 61 72 65  guments that are
28bd0 20 74 68 65 20 70 61 72 61 6d 65 74 65 72 73 20   the parameters 
28be0 74 6f 20 74 68 65 20 70 72 69 6e 74 66 28 29 20  to the printf() 
28bf0 66 75 6e 63 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72  function..*/.str
28c00 75 63 74 20 50 72 69 6e 74 66 41 72 67 75 6d 65  uct PrintfArgume
28c10 6e 74 73 20 7b 0a 20 20 69 6e 74 20 6e 41 72 67  nts {.  int nArg
28c20 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
28c30 20 2f 2a 20 54 6f 74 61 6c 20 6e 75 6d 62 65 72   /* Total number
28c40 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f   of arguments */
28c50 0a 20 20 69 6e 74 20 6e 55 73 65 64 3b 20 20 20  .  int nUsed;   
28c60 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
28c70 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e  umber of argumen
28c80 74 73 20 75 73 65 64 20 73 6f 20 66 61 72 20 2a  ts used so far *
28c90 2f 0a 20 20 73 71 6c 69 74 65 33 5f 76 61 6c 75  /.  sqlite3_valu
28ca0 65 20 2a 2a 61 70 41 72 67 3b 20 20 20 2f 2a 20  e **apArg;   /* 
28cb0 54 68 65 20 61 72 67 75 6d 65 6e 74 20 76 61 6c  The argument val
28cc0 75 65 73 20 2a 2f 0a 7d 3b 0a 0a 63 68 61 72 20  ues */.};..char 
28cd0 2a 73 71 6c 69 74 65 33 4d 50 72 69 6e 74 66 28  *sqlite3MPrintf(
28ce0 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63  sqlite3*,const c
28cf0 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 63 68 61 72  har*, ...);.char
28d00 20 2a 73 71 6c 69 74 65 33 56 4d 50 72 69 6e 74   *sqlite3VMPrint
28d10 66 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74  f(sqlite3*,const
28d20 20 63 68 61 72 2a 2c 20 76 61 5f 6c 69 73 74 29   char*, va_list)
28d30 3b 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51  ;.#if defined(SQ
28d40 4c 49 54 45 5f 44 45 42 55 47 29 20 7c 7c 20 64  LITE_DEBUG) || d
28d50 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 48 41  efined(SQLITE_HA
28d60 56 45 5f 4f 53 5f 54 52 41 43 45 29 0a 20 20 76  VE_OS_TRACE).  v
28d70 6f 69 64 20 73 71 6c 69 74 65 33 44 65 62 75 67  oid sqlite3Debug
28d80 50 72 69 6e 74 66 28 63 6f 6e 73 74 20 63 68 61  Printf(const cha
28d90 72 2a 2c 20 2e 2e 2e 29 3b 0a 23 65 6e 64 69 66  r*, ...);.#endif
28da0 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c  .#if defined(SQL
28db0 49 54 45 5f 54 45 53 54 29 0a 20 20 76 6f 69 64  ITE_TEST).  void
28dc0 20 2a 73 71 6c 69 74 65 33 54 65 73 74 54 65 78   *sqlite3TestTex
28dd0 74 54 6f 50 74 72 28 63 6f 6e 73 74 20 63 68 61  tToPtr(const cha
28de0 72 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66  r*);.#endif..#if
28df0 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
28e00 44 45 42 55 47 29 0a 20 20 76 6f 69 64 20 73 71  DEBUG).  void sq
28e10 6c 69 74 65 33 54 72 65 65 56 69 65 77 45 78 70  lite3TreeViewExp
28e20 72 28 54 72 65 65 56 69 65 77 2a 2c 20 63 6f 6e  r(TreeView*, con
28e30 73 74 20 45 78 70 72 2a 2c 20 75 38 29 3b 0a 20  st Expr*, u8);. 
28e40 20 76 6f 69 64 20 73 71 6c 69 74 65 33 54 72 65   void sqlite3Tre
28e50 65 56 69 65 77 42 61 72 65 45 78 70 72 4c 69 73  eViewBareExprLis
28e60 74 28 54 72 65 65 56 69 65 77 2a 2c 20 63 6f 6e  t(TreeView*, con
28e70 73 74 20 45 78 70 72 4c 69 73 74 2a 2c 20 63 6f  st ExprList*, co
28e80 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20 20 76 6f  nst char*);.  vo
28e90 69 64 20 73 71 6c 69 74 65 33 54 72 65 65 56 69  id sqlite3TreeVi
28ea0 65 77 45 78 70 72 4c 69 73 74 28 54 72 65 65 56  ewExprList(TreeV
28eb0 69 65 77 2a 2c 20 63 6f 6e 73 74 20 45 78 70 72  iew*, const Expr
28ec0 4c 69 73 74 2a 2c 20 75 38 2c 20 63 6f 6e 73 74  List*, u8, const
28ed0 20 63 68 61 72 2a 29 3b 0a 20 20 76 6f 69 64 20   char*);.  void 
28ee0 73 71 6c 69 74 65 33 54 72 65 65 56 69 65 77 53  sqlite3TreeViewS
28ef0 72 63 4c 69 73 74 28 54 72 65 65 56 69 65 77 2a  rcList(TreeView*
28f00 2c 20 63 6f 6e 73 74 20 53 72 63 4c 69 73 74 2a  , const SrcList*
28f10 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
28f20 33 54 72 65 65 56 69 65 77 53 65 6c 65 63 74 28  3TreeViewSelect(
28f30 54 72 65 65 56 69 65 77 2a 2c 20 63 6f 6e 73 74  TreeView*, const
28f40 20 53 65 6c 65 63 74 2a 2c 20 75 38 29 3b 0a 20   Select*, u8);. 
28f50 20 76 6f 69 64 20 73 71 6c 69 74 65 33 54 72 65   void sqlite3Tre
28f60 65 56 69 65 77 57 69 74 68 28 54 72 65 65 56 69  eViewWith(TreeVi
28f70 65 77 2a 2c 20 63 6f 6e 73 74 20 57 69 74 68 2a  ew*, const With*
28f80 2c 20 75 38 29 3b 0a 23 69 66 6e 64 65 66 20 53  , u8);.#ifndef S
28f90 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 49 4e 44 4f  QLITE_OMIT_WINDO
28fa0 57 46 55 4e 43 0a 20 20 76 6f 69 64 20 73 71 6c  WFUNC.  void sql
28fb0 69 74 65 33 54 72 65 65 56 69 65 77 57 69 6e 64  ite3TreeViewWind
28fc0 6f 77 28 54 72 65 65 56 69 65 77 2a 2c 20 63 6f  ow(TreeView*, co
28fd0 6e 73 74 20 57 69 6e 64 6f 77 2a 2c 20 75 38 29  nst Window*, u8)
28fe0 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
28ff0 54 72 65 65 56 69 65 77 57 69 6e 46 75 6e 63 28  TreeViewWinFunc(
29000 54 72 65 65 56 69 65 77 2a 2c 20 63 6f 6e 73 74  TreeView*, const
29010 20 57 69 6e 64 6f 77 2a 2c 20 75 38 29 3b 0a 23   Window*, u8);.#
29020 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 0a 0a 76  endif.#endif...v
29030 6f 69 64 20 73 71 6c 69 74 65 33 53 65 74 53 74  oid sqlite3SetSt
29040 72 69 6e 67 28 63 68 61 72 20 2a 2a 2c 20 73 71  ring(char **, sq
29050 6c 69 74 65 33 2a 2c 20 63 6f 6e 73 74 20 63 68  lite3*, const ch
29060 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  ar*);.void sqlit
29070 65 33 45 72 72 6f 72 4d 73 67 28 50 61 72 73 65  e3ErrorMsg(Parse
29080 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  *, const char*, 
29090 2e 2e 2e 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  ...);.void sqlit
290a0 65 33 44 65 71 75 6f 74 65 28 63 68 61 72 2a 29  e3Dequote(char*)
290b0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65  ;.void sqlite3De
290c0 71 75 6f 74 65 45 78 70 72 28 45 78 70 72 2a 29  quoteExpr(Expr*)
290d0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 54 6f  ;.void sqlite3To
290e0 6b 65 6e 49 6e 69 74 28 54 6f 6b 65 6e 2a 2c 63  kenInit(Token*,c
290f0 68 61 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  har*);.int sqlit
29100 65 33 4b 65 79 77 6f 72 64 43 6f 64 65 28 63 6f  e3KeywordCode(co
29110 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61  nst unsigned cha
29120 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71  r*, int);.int sq
29130 6c 69 74 65 33 52 75 6e 50 61 72 73 65 72 28 50  lite3RunParser(P
29140 61 72 73 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61  arse*, const cha
29150 72 2a 2c 20 63 68 61 72 20 2a 2a 29 3b 0a 76 6f  r*, char **);.vo
29160 69 64 20 73 71 6c 69 74 65 33 46 69 6e 69 73 68  id sqlite3Finish
29170 43 6f 64 69 6e 67 28 50 61 72 73 65 2a 29 3b 0a  Coding(Parse*);.
29180 69 6e 74 20 73 71 6c 69 74 65 33 47 65 74 54 65  int sqlite3GetTe
29190 6d 70 52 65 67 28 50 61 72 73 65 2a 29 3b 0a 76  mpReg(Parse*);.v
291a0 6f 69 64 20 73 71 6c 69 74 65 33 52 65 6c 65 61  oid sqlite3Relea
291b0 73 65 54 65 6d 70 52 65 67 28 50 61 72 73 65 2a  seTempReg(Parse*
291c0 2c 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ,int);.int sqlit
291d0 65 33 47 65 74 54 65 6d 70 52 61 6e 67 65 28 50  e3GetTempRange(P
291e0 61 72 73 65 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64  arse*,int);.void
291f0 20 73 71 6c 69 74 65 33 52 65 6c 65 61 73 65 54   sqlite3ReleaseT
29200 65 6d 70 52 61 6e 67 65 28 50 61 72 73 65 2a 2c  empRange(Parse*,
29210 69 6e 74 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73  int,int);.void s
29220 71 6c 69 74 65 33 43 6c 65 61 72 54 65 6d 70 52  qlite3ClearTempR
29230 65 67 43 61 63 68 65 28 50 61 72 73 65 2a 29 3b  egCache(Parse*);
29240 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44  .#ifdef SQLITE_D
29250 45 42 55 47 0a 69 6e 74 20 73 71 6c 69 74 65 33  EBUG.int sqlite3
29260 4e 6f 54 65 6d 70 73 49 6e 52 61 6e 67 65 28 50  NoTempsInRange(P
29270 61 72 73 65 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a  arse*,int,int);.
29280 23 65 6e 64 69 66 0a 45 78 70 72 20 2a 73 71 6c  #endif.Expr *sql
29290 69 74 65 33 45 78 70 72 41 6c 6c 6f 63 28 73 71  ite3ExprAlloc(sq
292a0 6c 69 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74  lite3*,int,const
292b0 20 54 6f 6b 65 6e 2a 2c 69 6e 74 29 3b 0a 45 78   Token*,int);.Ex
292c0 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72 28  pr *sqlite3Expr(
292d0 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e  sqlite3*,int,con
292e0 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20  st char*);.void 
292f0 73 71 6c 69 74 65 33 45 78 70 72 41 74 74 61 63  sqlite3ExprAttac
29300 68 53 75 62 74 72 65 65 73 28 73 71 6c 69 74 65  hSubtrees(sqlite
29310 33 2a 2c 45 78 70 72 2a 2c 45 78 70 72 2a 2c 45  3*,Expr*,Expr*,E
29320 78 70 72 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c  xpr*);.Expr *sql
29330 69 74 65 33 50 45 78 70 72 28 50 61 72 73 65 2a  ite3PExpr(Parse*
29340 2c 20 69 6e 74 2c 20 45 78 70 72 2a 2c 20 45 78  , int, Expr*, Ex
29350 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  pr*);.void sqlit
29360 65 33 50 45 78 70 72 41 64 64 53 65 6c 65 63 74  e3PExprAddSelect
29370 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20  (Parse*, Expr*, 
29380 53 65 6c 65 63 74 2a 29 3b 0a 45 78 70 72 20 2a  Select*);.Expr *
29390 73 71 6c 69 74 65 33 45 78 70 72 41 6e 64 28 73  sqlite3ExprAnd(s
293a0 71 6c 69 74 65 33 2a 2c 45 78 70 72 2a 2c 20 45  qlite3*,Expr*, E
293b0 78 70 72 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c  xpr*);.Expr *sql
293c0 69 74 65 33 45 78 70 72 46 75 6e 63 74 69 6f 6e  ite3ExprFunction
293d0 28 50 61 72 73 65 2a 2c 45 78 70 72 4c 69 73 74  (Parse*,ExprList
293e0 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 69 6e 74 29 3b  *, Token*, int);
293f0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
29400 72 41 73 73 69 67 6e 56 61 72 4e 75 6d 62 65 72  rAssignVarNumber
29410 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20  (Parse*, Expr*, 
29420 75 33 32 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  u32);.void sqlit
29430 65 33 45 78 70 72 44 65 6c 65 74 65 28 73 71 6c  e3ExprDelete(sql
29440 69 74 65 33 2a 2c 20 45 78 70 72 2a 29 3b 0a 45  ite3*, Expr*);.E
29450 78 70 72 4c 69 73 74 20 2a 73 71 6c 69 74 65 33  xprList *sqlite3
29460 45 78 70 72 4c 69 73 74 41 70 70 65 6e 64 28 50  ExprListAppend(P
29470 61 72 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c  arse*,ExprList*,
29480 45 78 70 72 2a 29 3b 0a 45 78 70 72 4c 69 73 74  Expr*);.ExprList
29490 20 2a 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73   *sqlite3ExprLis
294a0 74 41 70 70 65 6e 64 56 65 63 74 6f 72 28 50 61  tAppendVector(Pa
294b0 72 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 49  rse*,ExprList*,I
294c0 64 4c 69 73 74 2a 2c 45 78 70 72 2a 29 3b 0a 76  dList*,Expr*);.v
294d0 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 4c  oid sqlite3ExprL
294e0 69 73 74 53 65 74 53 6f 72 74 4f 72 64 65 72 28  istSetSortOrder(
294f0 45 78 70 72 4c 69 73 74 2a 2c 69 6e 74 29 3b 0a  ExprList*,int);.
29500 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
29510 4c 69 73 74 53 65 74 4e 61 6d 65 28 50 61 72 73  ListSetName(Pars
29520 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 54 6f 6b  e*,ExprList*,Tok
29530 65 6e 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73  en*,int);.void s
29540 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74 53 65  qlite3ExprListSe
29550 74 53 70 61 6e 28 50 61 72 73 65 2a 2c 45 78 70  tSpan(Parse*,Exp
29560 72 4c 69 73 74 2a 2c 63 6f 6e 73 74 20 63 68 61  rList*,const cha
29570 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  r*,const char*);
29580 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
29590 72 4c 69 73 74 44 65 6c 65 74 65 28 73 71 6c 69  rListDelete(sqli
295a0 74 65 33 2a 2c 20 45 78 70 72 4c 69 73 74 2a 29  te3*, ExprList*)
295b0 3b 0a 75 33 32 20 73 71 6c 69 74 65 33 45 78 70  ;.u32 sqlite3Exp
295c0 72 4c 69 73 74 46 6c 61 67 73 28 63 6f 6e 73 74  rListFlags(const
295d0 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74   ExprList*);.int
295e0 20 73 71 6c 69 74 65 33 49 6e 64 65 78 48 61 73   sqlite3IndexHas
295f0 44 75 70 6c 69 63 61 74 65 52 6f 6f 74 50 61 67  DuplicateRootPag
29600 65 28 49 6e 64 65 78 2a 29 3b 0a 69 6e 74 20 73  e(Index*);.int s
29610 71 6c 69 74 65 33 49 6e 69 74 28 73 71 6c 69 74  qlite3Init(sqlit
29620 65 33 2a 2c 20 63 68 61 72 2a 2a 29 3b 0a 69 6e  e3*, char**);.in
29630 74 20 73 71 6c 69 74 65 33 49 6e 69 74 43 61 6c  t sqlite3InitCal
29640 6c 62 61 63 6b 28 76 6f 69 64 2a 2c 20 69 6e 74  lback(void*, int
29650 2c 20 63 68 61 72 2a 2a 2c 20 63 68 61 72 2a 2a  , char**, char**
29660 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 6e  );.int sqlite3In
29670 69 74 4f 6e 65 28 73 71 6c 69 74 65 33 2a 2c 20  itOne(sqlite3*, 
29680 69 6e 74 2c 20 63 68 61 72 2a 2a 2c 20 75 33 32  int, char**, u32
29690 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50  );.void sqlite3P
296a0 72 61 67 6d 61 28 50 61 72 73 65 2a 2c 54 6f 6b  ragma(Parse*,Tok
296b0 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e  en*,Token*,Token
296c0 2a 2c 69 6e 74 29 3b 0a 23 69 66 6e 64 65 66 20  *,int);.#ifndef 
296d0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
296e0 55 41 4c 54 41 42 4c 45 0a 4d 6f 64 75 6c 65 20  UALTABLE.Module 
296f0 2a 73 71 6c 69 74 65 33 50 72 61 67 6d 61 56 74  *sqlite3PragmaVt
29700 61 62 52 65 67 69 73 74 65 72 28 73 71 6c 69 74  abRegister(sqlit
29710 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 20 2a  e3*,const char *
29720 7a 4e 61 6d 65 29 3b 0a 23 65 6e 64 69 66 0a 76  zName);.#endif.v
29730 6f 69 64 20 73 71 6c 69 74 65 33 52 65 73 65 74  oid sqlite3Reset
29740 41 6c 6c 53 63 68 65 6d 61 73 4f 66 43 6f 6e 6e  AllSchemasOfConn
29750 65 63 74 69 6f 6e 28 73 71 6c 69 74 65 33 2a 29  ection(sqlite3*)
29760 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65  ;.void sqlite3Re
29770 73 65 74 4f 6e 65 53 63 68 65 6d 61 28 73 71 6c  setOneSchema(sql
29780 69 74 65 33 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64  ite3*,int);.void
29790 20 73 71 6c 69 74 65 33 43 6f 6c 6c 61 70 73 65   sqlite3Collapse
297a0 44 61 74 61 62 61 73 65 41 72 72 61 79 28 73 71  DatabaseArray(sq
297b0 6c 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20 73 71  lite3*);.void sq
297c0 6c 69 74 65 33 43 6f 6d 6d 69 74 49 6e 74 65 72  lite3CommitInter
297d0 6e 61 6c 43 68 61 6e 67 65 73 28 73 71 6c 69 74  nalChanges(sqlit
297e0 65 33 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  e3*);.void sqlit
297f0 65 33 44 65 6c 65 74 65 43 6f 6c 75 6d 6e 4e 61  e3DeleteColumnNa
29800 6d 65 73 28 73 71 6c 69 74 65 33 2a 2c 54 61 62  mes(sqlite3*,Tab
29810 6c 65 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  le*);.int sqlite
29820 33 43 6f 6c 75 6d 6e 73 46 72 6f 6d 45 78 70 72  3ColumnsFromExpr
29830 4c 69 73 74 28 50 61 72 73 65 2a 2c 45 78 70 72  List(Parse*,Expr
29840 4c 69 73 74 2a 2c 69 31 36 2a 2c 43 6f 6c 75 6d  List*,i16*,Colum
29850 6e 2a 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  n**);.void sqlit
29860 65 33 53 65 6c 65 63 74 41 64 64 43 6f 6c 75 6d  e3SelectAddColum
29870 6e 54 79 70 65 41 6e 64 43 6f 6c 6c 61 74 69 6f  nTypeAndCollatio
29880 6e 28 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a 2c  n(Parse*,Table*,
29890 53 65 6c 65 63 74 2a 29 3b 0a 54 61 62 6c 65 20  Select*);.Table 
298a0 2a 73 71 6c 69 74 65 33 52 65 73 75 6c 74 53 65  *sqlite3ResultSe
298b0 74 4f 66 53 65 6c 65 63 74 28 50 61 72 73 65 2a  tOfSelect(Parse*
298c0 2c 53 65 6c 65 63 74 2a 29 3b 0a 76 6f 69 64 20  ,Select*);.void 
298d0 73 71 6c 69 74 65 33 4f 70 65 6e 4d 61 73 74 65  sqlite3OpenMaste
298e0 72 54 61 62 6c 65 28 50 61 72 73 65 20 2a 2c 20  rTable(Parse *, 
298f0 69 6e 74 29 3b 0a 49 6e 64 65 78 20 2a 73 71 6c  int);.Index *sql
29900 69 74 65 33 50 72 69 6d 61 72 79 4b 65 79 49 6e  ite3PrimaryKeyIn
29910 64 65 78 28 54 61 62 6c 65 2a 29 3b 0a 69 31 36  dex(Table*);.i16
29920 20 73 71 6c 69 74 65 33 43 6f 6c 75 6d 6e 4f 66   sqlite3ColumnOf
29930 49 6e 64 65 78 28 49 6e 64 65 78 2a 2c 20 69 31  Index(Index*, i1
29940 36 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  6);.void sqlite3
29950 53 74 61 72 74 54 61 62 6c 65 28 50 61 72 73 65  StartTable(Parse
29960 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c  *,Token*,Token*,
29970 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 29  int,int,int,int)
29980 3b 0a 23 69 66 20 53 51 4c 49 54 45 5f 45 4e 41  ;.#if SQLITE_ENA
29990 42 4c 45 5f 48 49 44 44 45 4e 5f 43 4f 4c 55 4d  BLE_HIDDEN_COLUM
299a0 4e 53 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  NS.  void sqlite
299b0 33 43 6f 6c 75 6d 6e 50 72 6f 70 65 72 74 69 65  3ColumnPropertie
299c0 73 46 72 6f 6d 4e 61 6d 65 28 54 61 62 6c 65 2a  sFromName(Table*
299d0 2c 20 43 6f 6c 75 6d 6e 2a 29 3b 0a 23 65 6c 73  , Column*);.#els
299e0 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  e.# define sqlit
299f0 65 33 43 6f 6c 75 6d 6e 50 72 6f 70 65 72 74 69  e3ColumnProperti
29a00 65 73 46 72 6f 6d 4e 61 6d 65 28 54 2c 43 29 20  esFromName(T,C) 
29a10 2f 2a 20 6e 6f 2d 6f 70 20 2a 2f 0a 23 65 6e 64  /* no-op */.#end
29a20 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41  if.void sqlite3A
29a30 64 64 43 6f 6c 75 6d 6e 28 50 61 72 73 65 2a 2c  ddColumn(Parse*,
29a40 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 29 3b 0a  Token*,Token*);.
29a50 76 6f 69 64 20 73 71 6c 69 74 65 33 41 64 64 4e  void sqlite3AddN
29a60 6f 74 4e 75 6c 6c 28 50 61 72 73 65 2a 2c 20 69  otNull(Parse*, i
29a70 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
29a80 33 41 64 64 50 72 69 6d 61 72 79 4b 65 79 28 50  3AddPrimaryKey(P
29a90 61 72 73 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a  arse*, ExprList*
29aa0 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29  , int, int, int)
29ab0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 64  ;.void sqlite3Ad
29ac0 64 43 68 65 63 6b 43 6f 6e 73 74 72 61 69 6e 74  dCheckConstraint
29ad0 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 29 3b  (Parse*, Expr*);
29ae0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 64 64  .void sqlite3Add
29af0 44 65 66 61 75 6c 74 56 61 6c 75 65 28 50 61 72  DefaultValue(Par
29b00 73 65 2a 2c 45 78 70 72 2a 2c 63 6f 6e 73 74 20  se*,Expr*,const 
29b10 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72  char*,const char
29b20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
29b30 41 64 64 43 6f 6c 6c 61 74 65 54 79 70 65 28 50  AddCollateType(P
29b40 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a  arse*, Token*);.
29b50 76 6f 69 64 20 73 71 6c 69 74 65 33 45 6e 64 54  void sqlite3EndT
29b60 61 62 6c 65 28 50 61 72 73 65 2a 2c 54 6f 6b 65  able(Parse*,Toke
29b70 6e 2a 2c 54 6f 6b 65 6e 2a 2c 75 38 2c 53 65 6c  n*,Token*,u8,Sel
29b80 65 63 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ect*);.int sqlit
29b90 65 33 50 61 72 73 65 55 72 69 28 63 6f 6e 73 74  e3ParseUri(const
29ba0 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61   char*,const cha
29bb0 72 2a 2c 75 6e 73 69 67 6e 65 64 20 69 6e 74 2a  r*,unsigned int*
29bc0 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
29bd0 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 76 66        sqlite3_vf
29be0 73 2a 2a 2c 63 68 61 72 2a 2a 2c 63 68 61 72 20  s**,char**,char 
29bf0 2a 2a 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49  **);.#ifdef SQLI
29c00 54 45 5f 48 41 53 5f 43 4f 44 45 43 0a 20 20 69  TE_HAS_CODEC.  i
29c10 6e 74 20 73 71 6c 69 74 65 33 43 6f 64 65 63 51  nt sqlite3CodecQ
29c20 75 65 72 79 50 61 72 61 6d 65 74 65 72 73 28 73  ueryParameters(s
29c30 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68  qlite3*,const ch
29c40 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29  ar*,const char*)
29c50 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65  ;.#else.# define
29c60 20 73 71 6c 69 74 65 33 43 6f 64 65 63 51 75 65   sqlite3CodecQue
29c70 72 79 50 61 72 61 6d 65 74 65 72 73 28 41 2c 42  ryParameters(A,B
29c80 2c 43 29 20 30 0a 23 65 6e 64 69 66 0a 42 74 72  ,C) 0.#endif.Btr
29c90 65 65 20 2a 73 71 6c 69 74 65 33 44 62 4e 61 6d  ee *sqlite3DbNam
29ca0 65 54 6f 42 74 72 65 65 28 73 71 6c 69 74 65 33  eToBtree(sqlite3
29cb0 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  *,const char*);.
29cc0 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 55  .#ifdef SQLITE_U
29cd0 4e 54 45 53 54 41 42 4c 45 0a 23 20 64 65 66 69  NTESTABLE.# defi
29ce0 6e 65 20 73 71 6c 69 74 65 33 46 61 75 6c 74 53  ne sqlite3FaultS
29cf0 69 6d 28 58 29 20 53 51 4c 49 54 45 5f 4f 4b 0a  im(X) SQLITE_OK.
29d00 23 65 6c 73 65 0a 20 20 69 6e 74 20 73 71 6c 69  #else.  int sqli
29d10 74 65 33 46 61 75 6c 74 53 69 6d 28 69 6e 74 29  te3FaultSim(int)
29d20 3b 0a 23 65 6e 64 69 66 0a 0a 42 69 74 76 65 63  ;.#endif..Bitvec
29d30 20 2a 73 71 6c 69 74 65 33 42 69 74 76 65 63 43   *sqlite3BitvecC
29d40 72 65 61 74 65 28 75 33 32 29 3b 0a 69 6e 74 20  reate(u32);.int 
29d50 73 71 6c 69 74 65 33 42 69 74 76 65 63 54 65 73  sqlite3BitvecTes
29d60 74 28 42 69 74 76 65 63 2a 2c 20 75 33 32 29 3b  t(Bitvec*, u32);
29d70 0a 69 6e 74 20 73 71 6c 69 74 65 33 42 69 74 76  .int sqlite3Bitv
29d80 65 63 54 65 73 74 4e 6f 74 4e 75 6c 6c 28 42 69  ecTestNotNull(Bi
29d90 74 76 65 63 2a 2c 20 75 33 32 29 3b 0a 69 6e 74  tvec*, u32);.int
29da0 20 73 71 6c 69 74 65 33 42 69 74 76 65 63 53 65   sqlite3BitvecSe
29db0 74 28 42 69 74 76 65 63 2a 2c 20 75 33 32 29 3b  t(Bitvec*, u32);
29dc0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42 69 74  .void sqlite3Bit
29dd0 76 65 63 43 6c 65 61 72 28 42 69 74 76 65 63 2a  vecClear(Bitvec*
29de0 2c 20 75 33 32 2c 20 76 6f 69 64 2a 29 3b 0a 76  , u32, void*);.v
29df0 6f 69 64 20 73 71 6c 69 74 65 33 42 69 74 76 65  oid sqlite3Bitve
29e00 63 44 65 73 74 72 6f 79 28 42 69 74 76 65 63 2a  cDestroy(Bitvec*
29e10 29 3b 0a 75 33 32 20 73 71 6c 69 74 65 33 42 69  );.u32 sqlite3Bi
29e20 74 76 65 63 53 69 7a 65 28 42 69 74 76 65 63 2a  tvecSize(Bitvec*
29e30 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  );.#ifndef SQLIT
29e40 45 5f 55 4e 54 45 53 54 41 42 4c 45 0a 69 6e 74  E_UNTESTABLE.int
29e50 20 73 71 6c 69 74 65 33 42 69 74 76 65 63 42 75   sqlite3BitvecBu
29e60 69 6c 74 69 6e 54 65 73 74 28 69 6e 74 2c 69 6e  iltinTest(int,in
29e70 74 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 52 6f 77  t*);.#endif..Row
29e80 53 65 74 20 2a 73 71 6c 69 74 65 33 52 6f 77 53  Set *sqlite3RowS
29e90 65 74 49 6e 69 74 28 73 71 6c 69 74 65 33 2a 29  etInit(sqlite3*)
29ea0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 6f  ;.void sqlite3Ro
29eb0 77 53 65 74 44 65 6c 65 74 65 28 76 6f 69 64 2a  wSetDelete(void*
29ec0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52  );.void sqlite3R
29ed0 6f 77 53 65 74 43 6c 65 61 72 28 76 6f 69 64 2a  owSetClear(void*
29ee0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52  );.void sqlite3R
29ef0 6f 77 53 65 74 49 6e 73 65 72 74 28 52 6f 77 53  owSetInsert(RowS
29f00 65 74 2a 2c 20 69 36 34 29 3b 0a 69 6e 74 20 73  et*, i64);.int s
29f10 71 6c 69 74 65 33 52 6f 77 53 65 74 54 65 73 74  qlite3RowSetTest
29f20 28 52 6f 77 53 65 74 2a 2c 20 69 6e 74 20 69 42  (RowSet*, int iB
29f30 61 74 63 68 2c 20 69 36 34 29 3b 0a 69 6e 74 20  atch, i64);.int 
29f40 73 71 6c 69 74 65 33 52 6f 77 53 65 74 4e 65 78  sqlite3RowSetNex
29f50 74 28 52 6f 77 53 65 74 2a 2c 20 69 36 34 2a 29  t(RowSet*, i64*)
29f60 3b 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43  ;..void sqlite3C
29f70 72 65 61 74 65 56 69 65 77 28 50 61 72 73 65 2a  reateView(Parse*
29f80 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 54  ,Token*,Token*,T
29f90 6f 6b 65 6e 2a 2c 45 78 70 72 4c 69 73 74 2a 2c  oken*,ExprList*,
29fa0 53 65 6c 65 63 74 2a 2c 69 6e 74 2c 69 6e 74 29  Select*,int,int)
29fb0 3b 0a 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28  ;..#if !defined(
29fc0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 45 57  SQLITE_OMIT_VIEW
29fd0 29 20 7c 7c 20 21 64 65 66 69 6e 65 64 28 53 51  ) || !defined(SQ
29fe0 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
29ff0 4c 54 41 42 4c 45 29 0a 20 20 69 6e 74 20 73 71  LTABLE).  int sq
2a000 6c 69 74 65 33 56 69 65 77 47 65 74 43 6f 6c 75  lite3ViewGetColu
2a010 6d 6e 4e 61 6d 65 73 28 50 61 72 73 65 2a 2c 54  mnNames(Parse*,T
2a020 61 62 6c 65 2a 29 3b 0a 23 65 6c 73 65 0a 23 20  able*);.#else.# 
2a030 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 69  define sqlite3Vi
2a040 65 77 47 65 74 43 6f 6c 75 6d 6e 4e 61 6d 65 73  ewGetColumnNames
2a050 28 41 2c 42 29 20 30 0a 23 65 6e 64 69 66 0a 0a  (A,B) 0.#endif..
2a060 23 69 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 41  #if SQLITE_MAX_A
2a070 54 54 41 43 48 45 44 3e 33 30 0a 20 20 69 6e 74  TTACHED>30.  int
2a080 20 73 71 6c 69 74 65 33 44 62 4d 61 73 6b 41 6c   sqlite3DbMaskAl
2a090 6c 5a 65 72 6f 28 79 44 62 4d 61 73 6b 29 3b 0a  lZero(yDbMask);.
2a0a0 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c 69  #endif.void sqli
2a0b0 74 65 33 44 72 6f 70 54 61 62 6c 65 28 50 61 72  te3DropTable(Par
2a0c0 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 69  se*, SrcList*, i
2a0d0 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  nt, int);.void s
2a0e0 71 6c 69 74 65 33 43 6f 64 65 44 72 6f 70 54 61  qlite3CodeDropTa
2a0f0 62 6c 65 28 50 61 72 73 65 2a 2c 20 54 61 62 6c  ble(Parse*, Tabl
2a100 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76  e*, int, int);.v
2a110 6f 69 64 20 73 71 6c 69 74 65 33 44 65 6c 65 74  oid sqlite3Delet
2a120 65 54 61 62 6c 65 28 73 71 6c 69 74 65 33 2a 2c  eTable(sqlite3*,
2a130 20 54 61 62 6c 65 2a 29 3b 0a 76 6f 69 64 20 73   Table*);.void s
2a140 71 6c 69 74 65 33 46 72 65 65 49 6e 64 65 78 28  qlite3FreeIndex(
2a150 73 71 6c 69 74 65 33 2a 2c 20 49 6e 64 65 78 2a  sqlite3*, Index*
2a160 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  );.#ifndef SQLIT
2a170 45 5f 4f 4d 49 54 5f 41 55 54 4f 49 4e 43 52 45  E_OMIT_AUTOINCRE
2a180 4d 45 4e 54 0a 20 20 76 6f 69 64 20 73 71 6c 69  MENT.  void sqli
2a190 74 65 33 41 75 74 6f 69 6e 63 72 65 6d 65 6e 74  te3Autoincrement
2a1a0 42 65 67 69 6e 28 50 61 72 73 65 20 2a 70 50 61  Begin(Parse *pPa
2a1b0 72 73 65 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c  rse);.  void sql
2a1c0 69 74 65 33 41 75 74 6f 69 6e 63 72 65 6d 65 6e  ite3Autoincremen
2a1d0 74 45 6e 64 28 50 61 72 73 65 20 2a 70 50 61 72  tEnd(Parse *pPar
2a1e0 73 65 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66  se);.#else.# def
2a1f0 69 6e 65 20 73 71 6c 69 74 65 33 41 75 74 6f 69  ine sqlite3Autoi
2a200 6e 63 72 65 6d 65 6e 74 42 65 67 69 6e 28 58 29  ncrementBegin(X)
2a210 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
2a220 33 41 75 74 6f 69 6e 63 72 65 6d 65 6e 74 45 6e  3AutoincrementEn
2a230 64 28 58 29 0a 23 65 6e 64 69 66 0a 76 6f 69 64  d(X).#endif.void
2a240 20 73 71 6c 69 74 65 33 49 6e 73 65 72 74 28 50   sqlite3Insert(P
2a250 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c  arse*, SrcList*,
2a260 20 53 65 6c 65 63 74 2a 2c 20 49 64 4c 69 73 74   Select*, IdList
2a270 2a 2c 20 69 6e 74 2c 20 55 70 73 65 72 74 2a 29  *, int, Upsert*)
2a280 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 41  ;.void *sqlite3A
2a290 72 72 61 79 41 6c 6c 6f 63 61 74 65 28 73 71 6c  rrayAllocate(sql
2a2a0 69 74 65 33 2a 2c 76 6f 69 64 2a 2c 69 6e 74 2c  ite3*,void*,int,
2a2b0 69 6e 74 2a 2c 69 6e 74 2a 29 3b 0a 49 64 4c 69  int*,int*);.IdLi
2a2c0 73 74 20 2a 73 71 6c 69 74 65 33 49 64 4c 69 73  st *sqlite3IdLis
2a2d0 74 41 70 70 65 6e 64 28 50 61 72 73 65 2a 2c 20  tAppend(Parse*, 
2a2e0 49 64 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 29  IdList*, Token*)
2a2f0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 64 4c  ;.int sqlite3IdL
2a300 69 73 74 49 6e 64 65 78 28 49 64 4c 69 73 74 2a  istIndex(IdList*
2a310 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 53  ,const char*);.S
2a320 72 63 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 53  rcList *sqlite3S
2a330 72 63 4c 69 73 74 45 6e 6c 61 72 67 65 28 50 61  rcListEnlarge(Pa
2a340 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20  rse*, SrcList*, 
2a350 69 6e 74 2c 20 69 6e 74 29 3b 0a 53 72 63 4c 69  int, int);.SrcLi
2a360 73 74 20 2a 73 71 6c 69 74 65 33 53 72 63 4c 69  st *sqlite3SrcLi
2a370 73 74 41 70 70 65 6e 64 28 50 61 72 73 65 2a 2c  stAppend(Parse*,
2a380 20 53 72 63 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e   SrcList*, Token
2a390 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 53 72 63 4c  *, Token*);.SrcL
2a3a0 69 73 74 20 2a 73 71 6c 69 74 65 33 53 72 63 4c  ist *sqlite3SrcL
2a3b0 69 73 74 41 70 70 65 6e 64 46 72 6f 6d 54 65 72  istAppendFromTer
2a3c0 6d 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73  m(Parse*, SrcLis
2a3d0 74 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65  t*, Token*, Toke
2a3e0 6e 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  n*,.            
2a3f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a400 20 20 20 20 20 20 20 20 20 20 54 6f 6b 65 6e 2a            Token*
2a410 2c 20 53 65 6c 65 63 74 2a 2c 20 45 78 70 72 2a  , Select*, Expr*
2a420 2c 20 49 64 4c 69 73 74 2a 29 3b 0a 76 6f 69 64  , IdList*);.void
2a430 20 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74 49   sqlite3SrcListI
2a440 6e 64 65 78 65 64 42 79 28 50 61 72 73 65 20 2a  ndexedBy(Parse *
2a450 2c 20 53 72 63 4c 69 73 74 20 2a 2c 20 54 6f 6b  , SrcList *, Tok
2a460 65 6e 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  en *);.void sqli
2a470 74 65 33 53 72 63 4c 69 73 74 46 75 6e 63 41 72  te3SrcListFuncAr
2a480 67 73 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69  gs(Parse*, SrcLi
2a490 73 74 2a 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b  st*, ExprList*);
2a4a0 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 6e 64 65  .int sqlite3Inde
2a4b0 78 65 64 42 79 4c 6f 6f 6b 75 70 28 50 61 72 73  xedByLookup(Pars
2a4c0 65 20 2a 2c 20 73 74 72 75 63 74 20 53 72 63 4c  e *, struct SrcL
2a4d0 69 73 74 5f 69 74 65 6d 20 2a 29 3b 0a 76 6f 69  ist_item *);.voi
2a4e0 64 20 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74  d sqlite3SrcList
2a4f0 53 68 69 66 74 4a 6f 69 6e 54 79 70 65 28 53 72  ShiftJoinType(Sr
2a500 63 4c 69 73 74 2a 29 3b 0a 76 6f 69 64 20 73 71  cList*);.void sq
2a510 6c 69 74 65 33 53 72 63 4c 69 73 74 41 73 73 69  lite3SrcListAssi
2a520 67 6e 43 75 72 73 6f 72 73 28 50 61 72 73 65 2a  gnCursors(Parse*
2a530 2c 20 53 72 63 4c 69 73 74 2a 29 3b 0a 76 6f 69  , SrcList*);.voi
2a540 64 20 73 71 6c 69 74 65 33 49 64 4c 69 73 74 44  d sqlite3IdListD
2a550 65 6c 65 74 65 28 73 71 6c 69 74 65 33 2a 2c 20  elete(sqlite3*, 
2a560 49 64 4c 69 73 74 2a 29 3b 0a 76 6f 69 64 20 73  IdList*);.void s
2a570 71 6c 69 74 65 33 53 72 63 4c 69 73 74 44 65 6c  qlite3SrcListDel
2a580 65 74 65 28 73 71 6c 69 74 65 33 2a 2c 20 53 72  ete(sqlite3*, Sr
2a590 63 4c 69 73 74 2a 29 3b 0a 49 6e 64 65 78 20 2a  cList*);.Index *
2a5a0 73 71 6c 69 74 65 33 41 6c 6c 6f 63 61 74 65 49  sqlite3AllocateI
2a5b0 6e 64 65 78 4f 62 6a 65 63 74 28 73 71 6c 69 74  ndexObject(sqlit
2a5c0 65 33 2a 2c 69 31 36 2c 69 6e 74 2c 63 68 61 72  e3*,i16,int,char
2a5d0 2a 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  **);.void sqlite
2a5e0 33 43 72 65 61 74 65 49 6e 64 65 78 28 50 61 72  3CreateIndex(Par
2a5f0 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e  se*,Token*,Token
2a600 2a 2c 53 72 63 4c 69 73 74 2a 2c 45 78 70 72 4c  *,SrcList*,ExprL
2a610 69 73 74 2a 2c 69 6e 74 2c 54 6f 6b 65 6e 2a 2c  ist*,int,Token*,
2a620 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2a630 20 20 20 20 20 20 20 20 20 20 20 45 78 70 72 2a             Expr*
2a640 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 75 38 29 3b  , int, int, u8);
2a650 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44 72 6f  .void sqlite3Dro
2a660 70 49 6e 64 65 78 28 50 61 72 73 65 2a 2c 20 53  pIndex(Parse*, S
2a670 72 63 4c 69 73 74 2a 2c 20 69 6e 74 29 3b 0a 69  rcList*, int);.i
2a680 6e 74 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74  nt sqlite3Select
2a690 28 50 61 72 73 65 2a 2c 20 53 65 6c 65 63 74 2a  (Parse*, Select*
2a6a0 2c 20 53 65 6c 65 63 74 44 65 73 74 2a 29 3b 0a  , SelectDest*);.
2a6b0 53 65 6c 65 63 74 20 2a 73 71 6c 69 74 65 33 53  Select *sqlite3S
2a6c0 65 6c 65 63 74 4e 65 77 28 50 61 72 73 65 2a 2c  electNew(Parse*,
2a6d0 45 78 70 72 4c 69 73 74 2a 2c 53 72 63 4c 69 73  ExprList*,SrcLis
2a6e0 74 2a 2c 45 78 70 72 2a 2c 45 78 70 72 4c 69 73  t*,Expr*,ExprLis
2a6f0 74 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  t*,.            
2a700 20 20 20 20 20 20 20 20 20 20 20 20 20 45 78 70               Exp
2a710 72 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 75 33 32  r*,ExprList*,u32
2a720 2c 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71  ,Expr*);.void sq
2a730 6c 69 74 65 33 53 65 6c 65 63 74 44 65 6c 65 74  lite3SelectDelet
2a740 65 28 73 71 6c 69 74 65 33 2a 2c 20 53 65 6c 65  e(sqlite3*, Sele
2a750 63 74 2a 29 3b 0a 54 61 62 6c 65 20 2a 73 71 6c  ct*);.Table *sql
2a760 69 74 65 33 53 72 63 4c 69 73 74 4c 6f 6f 6b 75  ite3SrcListLooku
2a770 70 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73  p(Parse*, SrcLis
2a780 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  t*);.int sqlite3
2a790 49 73 52 65 61 64 4f 6e 6c 79 28 50 61 72 73 65  IsReadOnly(Parse
2a7a0 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 29 3b  *, Table*, int);
2a7b0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4f 70 65  .void sqlite3Ope
2a7c0 6e 54 61 62 6c 65 28 50 61 72 73 65 2a 2c 20 69  nTable(Parse*, i
2a7d0 6e 74 20 69 43 75 72 2c 20 69 6e 74 20 69 44 62  nt iCur, int iDb
2a7e0 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 29 3b 0a  , Table*, int);.
2a7f0 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49  #if defined(SQLI
2a800 54 45 5f 45 4e 41 42 4c 45 5f 55 50 44 41 54 45  TE_ENABLE_UPDATE
2a810 5f 44 45 4c 45 54 45 5f 4c 49 4d 49 54 29 20 26  _DELETE_LIMIT) &
2a820 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  & !defined(SQLIT
2a830 45 5f 4f 4d 49 54 5f 53 55 42 51 55 45 52 59 29  E_OMIT_SUBQUERY)
2a840 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33 4c 69  .Expr *sqlite3Li
2a850 6d 69 74 57 68 65 72 65 28 50 61 72 73 65 2a 2c  mitWhere(Parse*,
2a860 53 72 63 4c 69 73 74 2a 2c 45 78 70 72 2a 2c 45  SrcList*,Expr*,E
2a870 78 70 72 4c 69 73 74 2a 2c 45 78 70 72 2a 2c 63  xprList*,Expr*,c
2a880 68 61 72 2a 29 3b 0a 23 65 6e 64 69 66 0a 76 6f  har*);.#endif.vo
2a890 69 64 20 73 71 6c 69 74 65 33 44 65 6c 65 74 65  id sqlite3Delete
2a8a0 46 72 6f 6d 28 50 61 72 73 65 2a 2c 20 53 72 63  From(Parse*, Src
2a8b0 4c 69 73 74 2a 2c 20 45 78 70 72 2a 2c 20 45 78  List*, Expr*, Ex
2a8c0 70 72 4c 69 73 74 2a 2c 20 45 78 70 72 2a 29 3b  prList*, Expr*);
2a8d0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 55 70 64  .void sqlite3Upd
2a8e0 61 74 65 28 50 61 72 73 65 2a 2c 20 53 72 63 4c  ate(Parse*, SrcL
2a8f0 69 73 74 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c  ist*, ExprList*,
2a900 45 78 70 72 2a 2c 69 6e 74 2c 45 78 70 72 4c 69  Expr*,int,ExprLi
2a910 73 74 2a 2c 45 78 70 72 2a 2c 0a 20 20 20 20 20  st*,Expr*,.     
2a920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 55 70                Up
2a930 73 65 72 74 2a 29 3b 0a 57 68 65 72 65 49 6e 66  sert*);.WhereInf
2a940 6f 20 2a 73 71 6c 69 74 65 33 57 68 65 72 65 42  o *sqlite3WhereB
2a950 65 67 69 6e 28 50 61 72 73 65 2a 2c 53 72 63 4c  egin(Parse*,SrcL
2a960 69 73 74 2a 2c 45 78 70 72 2a 2c 45 78 70 72 4c  ist*,Expr*,ExprL
2a970 69 73 74 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 75  ist*,ExprList*,u
2a980 31 36 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  16,int);.void sq
2a990 6c 69 74 65 33 57 68 65 72 65 45 6e 64 28 57 68  lite3WhereEnd(Wh
2a9a0 65 72 65 49 6e 66 6f 2a 29 3b 0a 4c 6f 67 45 73  ereInfo*);.LogEs
2a9b0 74 20 73 71 6c 69 74 65 33 57 68 65 72 65 4f 75  t sqlite3WhereOu
2a9c0 74 70 75 74 52 6f 77 43 6f 75 6e 74 28 57 68 65  tputRowCount(Whe
2a9d0 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73 71  reInfo*);.int sq
2a9e0 6c 69 74 65 33 57 68 65 72 65 49 73 44 69 73 74  lite3WhereIsDist
2a9f0 69 6e 63 74 28 57 68 65 72 65 49 6e 66 6f 2a 29  inct(WhereInfo*)
2aa00 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 68 65  ;.int sqlite3Whe
2aa10 72 65 49 73 4f 72 64 65 72 65 64 28 57 68 65 72  reIsOrdered(Wher
2aa20 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c  eInfo*);.int sql
2aa30 69 74 65 33 57 68 65 72 65 4f 72 64 65 72 42 79  ite3WhereOrderBy
2aa40 4c 69 6d 69 74 4f 70 74 4c 61 62 65 6c 28 57 68  LimitOptLabel(Wh
2aa50 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73  ereInfo*);.int s
2aa60 71 6c 69 74 65 33 57 68 65 72 65 49 73 53 6f 72  qlite3WhereIsSor
2aa70 74 65 64 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b  ted(WhereInfo*);
2aa80 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 68 65 72  .int sqlite3Wher
2aa90 65 43 6f 6e 74 69 6e 75 65 4c 61 62 65 6c 28 57  eContinueLabel(W
2aaa0 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20  hereInfo*);.int 
2aab0 73 71 6c 69 74 65 33 57 68 65 72 65 42 72 65 61  sqlite3WhereBrea
2aac0 6b 4c 61 62 65 6c 28 57 68 65 72 65 49 6e 66 6f  kLabel(WhereInfo
2aad0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57  *);.int sqlite3W
2aae0 68 65 72 65 4f 6b 4f 6e 65 50 61 73 73 28 57 68  hereOkOnePass(Wh
2aaf0 65 72 65 49 6e 66 6f 2a 2c 20 69 6e 74 2a 29 3b  ereInfo*, int*);
2ab00 0a 23 64 65 66 69 6e 65 20 4f 4e 45 50 41 53 53  .#define ONEPASS
2ab10 5f 4f 46 46 20 20 20 20 20 20 30 20 20 20 20 20  _OFF      0     
2ab20 20 20 20 2f 2a 20 55 73 65 20 6f 66 20 4f 4e 45     /* Use of ONE
2ab30 50 41 53 53 20 6e 6f 74 20 61 6c 6c 6f 77 65 64  PASS not allowed
2ab40 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 4e 45 50   */.#define ONEP
2ab50 41 53 53 5f 53 49 4e 47 4c 45 20 20 20 31 20 20  ASS_SINGLE   1  
2ab60 20 20 20 20 20 20 2f 2a 20 4f 4e 45 50 41 53 53        /* ONEPASS
2ab70 20 76 61 6c 69 64 20 66 6f 72 20 61 20 73 69 6e   valid for a sin
2ab80 67 6c 65 20 72 6f 77 20 75 70 64 61 74 65 20 2a  gle row update *
2ab90 2f 0a 23 64 65 66 69 6e 65 20 4f 4e 45 50 41 53  /.#define ONEPAS
2aba0 53 5f 4d 55 4c 54 49 20 20 20 20 32 20 20 20 20  S_MULTI    2    
2abb0 20 20 20 20 2f 2a 20 4f 4e 45 50 41 53 53 20 69      /* ONEPASS i
2abc0 73 20 76 61 6c 69 64 20 66 6f 72 20 6d 75 6c 74  s valid for mult
2abd0 69 70 6c 65 20 72 6f 77 73 20 2a 2f 0a 76 6f 69  iple rows */.voi
2abe0 64 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64  d sqlite3ExprCod
2abf0 65 4c 6f 61 64 49 6e 64 65 78 43 6f 6c 75 6d 6e  eLoadIndexColumn
2ac00 28 50 61 72 73 65 2a 2c 20 49 6e 64 65 78 2a 2c  (Parse*, Index*,
2ac10 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b   int, int, int);
2ac20 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72  .int sqlite3Expr
2ac30 43 6f 64 65 47 65 74 43 6f 6c 75 6d 6e 28 50 61  CodeGetColumn(Pa
2ac40 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e  rse*, Table*, in
2ac50 74 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 75 38 29  t, int, int, u8)
2ac60 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
2ac70 70 72 43 6f 64 65 47 65 74 43 6f 6c 75 6d 6e 4f  prCodeGetColumnO
2ac80 66 54 61 62 6c 65 28 56 64 62 65 2a 2c 20 54 61  fTable(Vdbe*, Ta
2ac90 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20  ble*, int, int, 
2aca0 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
2acb0 65 33 45 78 70 72 43 6f 64 65 4d 6f 76 65 28 50  e3ExprCodeMove(P
2acc0 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c  arse*, int, int,
2acd0 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
2ace0 74 65 33 45 78 70 72 43 6f 64 65 28 50 61 72 73  te3ExprCode(Pars
2acf0 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b  e*, Expr*, int);
2ad00 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
2ad10 72 43 6f 64 65 43 6f 70 79 28 50 61 72 73 65 2a  rCodeCopy(Parse*
2ad20 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 76  , Expr*, int);.v
2ad30 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 43  oid sqlite3ExprC
2ad40 6f 64 65 46 61 63 74 6f 72 61 62 6c 65 28 50 61  odeFactorable(Pa
2ad50 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74  rse*, Expr*, int
2ad60 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78  );.int sqlite3Ex
2ad70 70 72 43 6f 64 65 41 74 49 6e 69 74 28 50 61 72  prCodeAtInit(Par
2ad80 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29  se*, Expr*, int)
2ad90 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70  ;.int sqlite3Exp
2ada0 72 43 6f 64 65 54 65 6d 70 28 50 61 72 73 65 2a  rCodeTemp(Parse*
2adb0 2c 20 45 78 70 72 2a 2c 20 69 6e 74 2a 29 3b 0a  , Expr*, int*);.
2adc0 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 43  int sqlite3ExprC
2add0 6f 64 65 54 61 72 67 65 74 28 50 61 72 73 65 2a  odeTarget(Parse*
2ade0 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 76  , Expr*, int);.v
2adf0 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 43  oid sqlite3ExprC
2ae00 6f 64 65 41 6e 64 43 61 63 68 65 28 50 61 72 73  odeAndCache(Pars
2ae10 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b  e*, Expr*, int);
2ae20 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72  .int sqlite3Expr
2ae30 43 6f 64 65 45 78 70 72 4c 69 73 74 28 50 61 72  CodeExprList(Par
2ae40 73 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20  se*, ExprList*, 
2ae50 69 6e 74 2c 20 69 6e 74 2c 20 75 38 29 3b 0a 23  int, int, u8);.#
2ae60 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 43  define SQLITE_EC
2ae70 45 4c 5f 44 55 50 20 20 20 20 20 20 30 78 30 31  EL_DUP      0x01
2ae80 20 20 2f 2a 20 44 65 65 70 2c 20 6e 6f 74 20 73    /* Deep, not s
2ae90 68 61 6c 6c 6f 77 20 63 6f 70 69 65 73 20 2a 2f  hallow copies */
2aea0 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
2aeb0 45 43 45 4c 5f 46 41 43 54 4f 52 20 20 20 30 78  ECEL_FACTOR   0x
2aec0 30 32 20 20 2f 2a 20 46 61 63 74 6f 72 20 6f 75  02  /* Factor ou
2aed0 74 20 63 6f 6e 73 74 61 6e 74 20 74 65 72 6d 73  t constant terms
2aee0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
2aef0 54 45 5f 45 43 45 4c 5f 52 45 46 20 20 20 20 20  TE_ECEL_REF     
2af00 20 30 78 30 34 20 20 2f 2a 20 55 73 65 20 45 78   0x04  /* Use Ex
2af10 70 72 4c 69 73 74 2e 75 2e 78 2e 69 4f 72 64 65  prList.u.x.iOrde
2af20 72 42 79 43 6f 6c 20 2a 2f 0a 23 64 65 66 69 6e  rByCol */.#defin
2af30 65 20 53 51 4c 49 54 45 5f 45 43 45 4c 5f 4f 4d  e SQLITE_ECEL_OM
2af40 49 54 52 45 46 20 20 30 78 30 38 20 20 2f 2a 20  ITREF  0x08  /* 
2af50 4f 6d 69 74 20 69 66 20 45 78 70 72 4c 69 73 74  Omit if ExprList
2af60 2e 75 2e 78 2e 69 4f 72 64 65 72 42 79 43 6f 6c  .u.x.iOrderByCol
2af70 20 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65 33   */.void sqlite3
2af80 45 78 70 72 49 66 54 72 75 65 28 50 61 72 73 65  ExprIfTrue(Parse
2af90 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 2c 20 69  *, Expr*, int, i
2afa0 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
2afb0 33 45 78 70 72 49 66 46 61 6c 73 65 28 50 61 72  3ExprIfFalse(Par
2afc0 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 2c  se*, Expr*, int,
2afd0 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
2afe0 74 65 33 45 78 70 72 49 66 46 61 6c 73 65 44 75  te3ExprIfFalseDu
2aff0 70 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c  p(Parse*, Expr*,
2b000 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 54 61 62 6c   int, int);.Tabl
2b010 65 20 2a 73 71 6c 69 74 65 33 46 69 6e 64 54 61  e *sqlite3FindTa
2b020 62 6c 65 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e  ble(sqlite3*,con
2b030 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20  st char*, const 
2b040 63 68 61 72 2a 29 3b 0a 23 64 65 66 69 6e 65 20  char*);.#define 
2b050 4c 4f 43 41 54 45 5f 56 49 45 57 20 20 20 20 30  LOCATE_VIEW    0
2b060 78 30 31 0a 23 64 65 66 69 6e 65 20 4c 4f 43 41  x01.#define LOCA
2b070 54 45 5f 4e 4f 45 52 52 20 20 20 30 78 30 32 0a  TE_NOERR   0x02.
2b080 54 61 62 6c 65 20 2a 73 71 6c 69 74 65 33 4c 6f  Table *sqlite3Lo
2b090 63 61 74 65 54 61 62 6c 65 28 50 61 72 73 65 2a  cateTable(Parse*
2b0a0 2c 75 33 32 20 66 6c 61 67 73 2c 63 6f 6e 73 74  ,u32 flags,const
2b0b0 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68   char*, const ch
2b0c0 61 72 2a 29 3b 0a 54 61 62 6c 65 20 2a 73 71 6c  ar*);.Table *sql
2b0d0 69 74 65 33 4c 6f 63 61 74 65 54 61 62 6c 65 49  ite3LocateTableI
2b0e0 74 65 6d 28 50 61 72 73 65 2a 2c 75 33 32 20 66  tem(Parse*,u32 f
2b0f0 6c 61 67 73 2c 73 74 72 75 63 74 20 53 72 63 4c  lags,struct SrcL
2b100 69 73 74 5f 69 74 65 6d 20 2a 29 3b 0a 49 6e 64  ist_item *);.Ind
2b110 65 78 20 2a 73 71 6c 69 74 65 33 46 69 6e 64 49  ex *sqlite3FindI
2b120 6e 64 65 78 28 73 71 6c 69 74 65 33 2a 2c 63 6f  ndex(sqlite3*,co
2b130 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74  nst char*, const
2b140 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71   char*);.void sq
2b150 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65  lite3UnlinkAndDe
2b160 6c 65 74 65 54 61 62 6c 65 28 73 71 6c 69 74 65  leteTable(sqlite
2b170 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61  3*,int,const cha
2b180 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  r*);.void sqlite
2b190 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65  3UnlinkAndDelete
2b1a0 49 6e 64 65 78 28 73 71 6c 69 74 65 33 2a 2c 69  Index(sqlite3*,i
2b1b0 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  nt,const char*);
2b1c0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 61 63  .void sqlite3Vac
2b1d0 75 75 6d 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e  uum(Parse*,Token
2b1e0 2a 2c 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71  *,Expr*);.int sq
2b1f0 6c 69 74 65 33 52 75 6e 56 61 63 75 75 6d 28 63  lite3RunVacuum(c
2b200 68 61 72 2a 2a 2c 20 73 71 6c 69 74 65 33 2a 2c  har**, sqlite3*,
2b210 20 69 6e 74 2c 20 73 71 6c 69 74 65 33 5f 76 61   int, sqlite3_va
2b220 6c 75 65 2a 29 3b 0a 63 68 61 72 20 2a 73 71 6c  lue*);.char *sql
2b230 69 74 65 33 4e 61 6d 65 46 72 6f 6d 54 6f 6b 65  ite3NameFromToke
2b240 6e 28 73 71 6c 69 74 65 33 2a 2c 20 54 6f 6b 65  n(sqlite3*, Toke
2b250 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  n*);.int sqlite3
2b260 45 78 70 72 43 6f 6d 70 61 72 65 28 50 61 72 73  ExprCompare(Pars
2b270 65 2a 2c 45 78 70 72 2a 2c 20 45 78 70 72 2a 2c  e*,Expr*, Expr*,
2b280 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74   int);.int sqlit
2b290 65 33 45 78 70 72 43 6f 6d 70 61 72 65 53 6b 69  e3ExprCompareSki
2b2a0 70 28 45 78 70 72 2a 2c 20 45 78 70 72 2a 2c 20  p(Expr*, Expr*, 
2b2b0 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  int);.int sqlite
2b2c0 33 45 78 70 72 4c 69 73 74 43 6f 6d 70 61 72 65  3ExprListCompare
2b2d0 28 45 78 70 72 4c 69 73 74 2a 2c 20 45 78 70 72  (ExprList*, Expr
2b2e0 4c 69 73 74 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74  List*, int);.int
2b2f0 20 73 71 6c 69 74 65 33 45 78 70 72 49 6d 70 6c   sqlite3ExprImpl
2b300 69 65 73 45 78 70 72 28 50 61 72 73 65 2a 2c 45  iesExpr(Parse*,E
2b310 78 70 72 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74  xpr*, Expr*, int
2b320 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78  );.int sqlite3Ex
2b330 70 72 49 6d 70 6c 69 65 73 4e 6f 6e 4e 75 6c 6c  prImpliesNonNull
2b340 52 6f 77 28 45 78 70 72 2a 2c 69 6e 74 29 3b 0a  Row(Expr*,int);.
2b350 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
2b360 41 6e 61 6c 79 7a 65 41 67 67 72 65 67 61 74 65  AnalyzeAggregate
2b370 73 28 4e 61 6d 65 43 6f 6e 74 65 78 74 2a 2c 20  s(NameContext*, 
2b380 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  Expr*);.void sql
2b390 69 74 65 33 45 78 70 72 41 6e 61 6c 79 7a 65 41  ite3ExprAnalyzeA
2b3a0 67 67 4c 69 73 74 28 4e 61 6d 65 43 6f 6e 74 65  ggList(NameConte
2b3b0 78 74 2a 2c 45 78 70 72 4c 69 73 74 2a 29 3b 0a  xt*,ExprList*);.
2b3c0 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 43  int sqlite3ExprC
2b3d0 6f 76 65 72 65 64 42 79 49 6e 64 65 78 28 45 78  overedByIndex(Ex
2b3e0 70 72 2a 2c 20 69 6e 74 20 69 43 75 72 2c 20 49  pr*, int iCur, I
2b3f0 6e 64 65 78 20 2a 70 49 64 78 29 3b 0a 69 6e 74  ndex *pIdx);.int
2b400 20 73 71 6c 69 74 65 33 46 75 6e 63 74 69 6f 6e   sqlite3Function
2b410 55 73 65 73 54 68 69 73 53 72 63 28 45 78 70 72  UsesThisSrc(Expr
2b420 2a 2c 20 53 72 63 4c 69 73 74 2a 29 3b 0a 56 64  *, SrcList*);.Vd
2b430 62 65 20 2a 73 71 6c 69 74 65 33 47 65 74 56 64  be *sqlite3GetVd
2b440 62 65 28 50 61 72 73 65 2a 29 3b 0a 23 69 66 6e  be(Parse*);.#ifn
2b450 64 65 66 20 53 51 4c 49 54 45 5f 55 4e 54 45 53  def SQLITE_UNTES
2b460 54 41 42 4c 45 0a 76 6f 69 64 20 73 71 6c 69 74  TABLE.void sqlit
2b470 65 33 50 72 6e 67 53 61 76 65 53 74 61 74 65 28  e3PrngSaveState(
2b480 76 6f 69 64 29 3b 0a 76 6f 69 64 20 73 71 6c 69  void);.void sqli
2b490 74 65 33 50 72 6e 67 52 65 73 74 6f 72 65 53 74  te3PrngRestoreSt
2b4a0 61 74 65 28 76 6f 69 64 29 3b 0a 23 65 6e 64 69  ate(void);.#endi
2b4b0 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 6f  f.void sqlite3Ro
2b4c0 6c 6c 62 61 63 6b 41 6c 6c 28 73 71 6c 69 74 65  llbackAll(sqlite
2b4d0 33 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  3*,int);.void sq
2b4e0 6c 69 74 65 33 43 6f 64 65 56 65 72 69 66 79 53  lite3CodeVerifyS
2b4f0 63 68 65 6d 61 28 50 61 72 73 65 2a 2c 20 69 6e  chema(Parse*, in
2b500 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
2b510 43 6f 64 65 56 65 72 69 66 79 4e 61 6d 65 64 53  CodeVerifyNamedS
2b520 63 68 65 6d 61 28 50 61 72 73 65 2a 2c 20 63 6f  chema(Parse*, co
2b530 6e 73 74 20 63 68 61 72 20 2a 7a 44 62 29 3b 0a  nst char *zDb);.
2b540 76 6f 69 64 20 73 71 6c 69 74 65 33 42 65 67 69  void sqlite3Begi
2b550 6e 54 72 61 6e 73 61 63 74 69 6f 6e 28 50 61 72  nTransaction(Par
2b560 73 65 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  se*, int);.void 
2b570 73 71 6c 69 74 65 33 45 6e 64 54 72 61 6e 73 61  sqlite3EndTransa
2b580 63 74 69 6f 6e 28 50 61 72 73 65 2a 2c 69 6e 74  ction(Parse*,int
2b590 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53  );.void sqlite3S
2b5a0 61 76 65 70 6f 69 6e 74 28 50 61 72 73 65 2a 2c  avepoint(Parse*,
2b5b0 20 69 6e 74 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76   int, Token*);.v
2b5c0 6f 69 64 20 73 71 6c 69 74 65 33 43 6c 6f 73 65  oid sqlite3Close
2b5d0 53 61 76 65 70 6f 69 6e 74 73 28 73 71 6c 69 74  Savepoints(sqlit
2b5e0 65 33 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  e3 *);.void sqli
2b5f0 74 65 33 4c 65 61 76 65 4d 75 74 65 78 41 6e 64  te3LeaveMutexAnd
2b600 43 6c 6f 73 65 5a 6f 6d 62 69 65 28 73 71 6c 69  CloseZombie(sqli
2b610 74 65 33 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  te3*);.int sqlit
2b620 65 33 45 78 70 72 49 64 54 6f 54 72 75 65 46 61  e3ExprIdToTrueFa
2b630 6c 73 65 28 45 78 70 72 2a 29 3b 0a 69 6e 74 20  lse(Expr*);.int 
2b640 73 71 6c 69 74 65 33 45 78 70 72 54 72 75 74 68  sqlite3ExprTruth
2b650 56 61 6c 75 65 28 63 6f 6e 73 74 20 45 78 70 72  Value(const Expr
2b660 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45  *);.int sqlite3E
2b670 78 70 72 49 73 43 6f 6e 73 74 61 6e 74 28 45 78  xprIsConstant(Ex
2b680 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  pr*);.int sqlite
2b690 33 45 78 70 72 49 73 43 6f 6e 73 74 61 6e 74 4e  3ExprIsConstantN
2b6a0 6f 74 4a 6f 69 6e 28 45 78 70 72 2a 29 3b 0a 69  otJoin(Expr*);.i
2b6b0 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 49 73  nt sqlite3ExprIs
2b6c0 43 6f 6e 73 74 61 6e 74 4f 72 46 75 6e 63 74 69  ConstantOrFuncti
2b6d0 6f 6e 28 45 78 70 72 2a 2c 20 75 38 29 3b 0a 69  on(Expr*, u8);.i
2b6e0 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 49 73  nt sqlite3ExprIs
2b6f0 43 6f 6e 73 74 61 6e 74 4f 72 47 72 6f 75 70 42  ConstantOrGroupB
2b700 79 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c  y(Parse*, Expr*,
2b710 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74   ExprList*);.int
2b720 20 73 71 6c 69 74 65 33 45 78 70 72 49 73 54 61   sqlite3ExprIsTa
2b730 62 6c 65 43 6f 6e 73 74 61 6e 74 28 45 78 70 72  bleConstant(Expr
2b740 2a 2c 69 6e 74 29 3b 0a 23 69 66 64 65 66 20 53  *,int);.#ifdef S
2b750 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 43 55 52  QLITE_ENABLE_CUR
2b760 53 4f 52 5f 48 49 4e 54 53 0a 69 6e 74 20 73 71  SOR_HINTS.int sq
2b770 6c 69 74 65 33 45 78 70 72 43 6f 6e 74 61 69 6e  lite3ExprContain
2b780 73 53 75 62 71 75 65 72 79 28 45 78 70 72 2a 29  sSubquery(Expr*)
2b790 3b 0a 23 65 6e 64 69 66 0a 69 6e 74 20 73 71 6c  ;.#endif.int sql
2b7a0 69 74 65 33 45 78 70 72 49 73 49 6e 74 65 67 65  ite3ExprIsIntege
2b7b0 72 28 45 78 70 72 2a 2c 20 69 6e 74 2a 29 3b 0a  r(Expr*, int*);.
2b7c0 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 43  int sqlite3ExprC
2b7d0 61 6e 42 65 4e 75 6c 6c 28 63 6f 6e 73 74 20 45  anBeNull(const E
2b7e0 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  xpr*);.int sqlit
2b7f0 65 33 45 78 70 72 4e 65 65 64 73 4e 6f 41 66 66  e3ExprNeedsNoAff
2b800 69 6e 69 74 79 43 68 61 6e 67 65 28 63 6f 6e 73  inityChange(cons
2b810 74 20 45 78 70 72 2a 2c 20 63 68 61 72 29 3b 0a  t Expr*, char);.
2b820 69 6e 74 20 73 71 6c 69 74 65 33 49 73 52 6f 77  int sqlite3IsRow
2b830 69 64 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  id(const char*);
2b840 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 47 65 6e  .void sqlite3Gen
2b850 65 72 61 74 65 52 6f 77 44 65 6c 65 74 65 28 0a  erateRowDelete(.
2b860 20 20 20 20 50 61 72 73 65 2a 2c 54 61 62 6c 65      Parse*,Table
2b870 2a 2c 54 72 69 67 67 65 72 2a 2c 69 6e 74 2c 69  *,Trigger*,int,i
2b880 6e 74 2c 69 6e 74 2c 69 31 36 2c 75 38 2c 75 38  nt,int,i16,u8,u8
2b890 2c 75 38 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73  ,u8,int);.void s
2b8a0 71 6c 69 74 65 33 47 65 6e 65 72 61 74 65 52 6f  qlite3GenerateRo
2b8b0 77 49 6e 64 65 78 44 65 6c 65 74 65 28 50 61 72  wIndexDelete(Par
2b8c0 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74  se*, Table*, int
2b8d0 2c 20 69 6e 74 2c 20 69 6e 74 2a 2c 20 69 6e 74  , int, int*, int
2b8e0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 47 65  );.int sqlite3Ge
2b8f0 6e 65 72 61 74 65 49 6e 64 65 78 4b 65 79 28 50  nerateIndexKey(P
2b900 61 72 73 65 2a 2c 20 49 6e 64 65 78 2a 2c 20 69  arse*, Index*, i
2b910 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e  nt, int, int, in
2b920 74 2a 2c 49 6e 64 65 78 2a 2c 69 6e 74 29 3b 0a  t*,Index*,int);.
2b930 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 73 6f  void sqlite3Reso
2b940 6c 76 65 50 61 72 74 49 64 78 4c 61 62 65 6c 28  lvePartIdxLabel(
2b950 50 61 72 73 65 2a 2c 69 6e 74 29 3b 0a 69 6e 74  Parse*,int);.int
2b960 20 73 71 6c 69 74 65 33 45 78 70 72 52 65 66 65   sqlite3ExprRefe
2b970 72 65 6e 63 65 73 55 70 64 61 74 65 64 43 6f 6c  rencesUpdatedCol
2b980 75 6d 6e 28 45 78 70 72 2a 2c 69 6e 74 2a 2c 69  umn(Expr*,int*,i
2b990 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
2b9a0 33 47 65 6e 65 72 61 74 65 43 6f 6e 73 74 72 61  3GenerateConstra
2b9b0 69 6e 74 43 68 65 63 6b 73 28 50 61 72 73 65 2a  intChecks(Parse*
2b9c0 2c 54 61 62 6c 65 2a 2c 69 6e 74 2a 2c 69 6e 74  ,Table*,int*,int
2b9d0 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c 0a 20 20  ,int,int,int,.  
2b9e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b9f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ba00 20 20 20 75 38 2c 75 38 2c 69 6e 74 2c 69 6e 74     u8,u8,int,int
2ba10 2a 2c 69 6e 74 2a 2c 55 70 73 65 72 74 2a 29 3b  *,int*,Upsert*);
2ba20 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45  .#ifdef SQLITE_E
2ba30 4e 41 42 4c 45 5f 4e 55 4c 4c 5f 54 52 49 4d 0a  NABLE_NULL_TRIM.
2ba40 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 53 65    void sqlite3Se
2ba50 74 4d 61 6b 65 52 65 63 6f 72 64 50 35 28 56 64  tMakeRecordP5(Vd
2ba60 62 65 2a 2c 54 61 62 6c 65 2a 29 3b 0a 23 65 6c  be*,Table*);.#el
2ba70 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  se.# define sqli
2ba80 74 65 33 53 65 74 4d 61 6b 65 52 65 63 6f 72 64  te3SetMakeRecord
2ba90 50 35 28 41 2c 42 29 0a 23 65 6e 64 69 66 0a 76  P5(A,B).#endif.v
2baa0 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6d 70 6c  oid sqlite3Compl
2bab0 65 74 65 49 6e 73 65 72 74 69 6f 6e 28 50 61 72  eteInsertion(Par
2bac0 73 65 2a 2c 54 61 62 6c 65 2a 2c 69 6e 74 2c 69  se*,Table*,int,i
2bad0 6e 74 2c 69 6e 74 2c 69 6e 74 2a 2c 69 6e 74 2c  nt,int,int*,int,
2bae0 69 6e 74 2c 69 6e 74 29 3b 0a 69 6e 74 20 73 71  int,int);.int sq
2baf0 6c 69 74 65 33 4f 70 65 6e 54 61 62 6c 65 41 6e  lite3OpenTableAn
2bb00 64 49 6e 64 69 63 65 73 28 50 61 72 73 65 2a 2c  dIndices(Parse*,
2bb10 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 75 38   Table*, int, u8
2bb20 2c 20 69 6e 74 2c 20 75 38 2a 2c 20 69 6e 74 2a  , int, u8*, int*
2bb30 2c 20 69 6e 74 2a 29 3b 0a 76 6f 69 64 20 73 71  , int*);.void sq
2bb40 6c 69 74 65 33 42 65 67 69 6e 57 72 69 74 65 4f  lite3BeginWriteO
2bb50 70 65 72 61 74 69 6f 6e 28 50 61 72 73 65 2a 2c  peration(Parse*,
2bb60 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64   int, int);.void
2bb70 20 73 71 6c 69 74 65 33 4d 75 6c 74 69 57 72 69   sqlite3MultiWri
2bb80 74 65 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64  te(Parse*);.void
2bb90 20 73 71 6c 69 74 65 33 4d 61 79 41 62 6f 72 74   sqlite3MayAbort
2bba0 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73  (Parse*);.void s
2bbb0 71 6c 69 74 65 33 48 61 6c 74 43 6f 6e 73 74 72  qlite3HaltConstr
2bbc0 61 69 6e 74 28 50 61 72 73 65 2a 2c 20 69 6e 74  aint(Parse*, int
2bbd0 2c 20 69 6e 74 2c 20 63 68 61 72 2a 2c 20 69 38  , int, char*, i8
2bbe0 2c 20 75 38 29 3b 0a 76 6f 69 64 20 73 71 6c 69  , u8);.void sqli
2bbf0 74 65 33 55 6e 69 71 75 65 43 6f 6e 73 74 72 61  te3UniqueConstra
2bc00 69 6e 74 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c  int(Parse*, int,
2bc10 20 49 6e 64 65 78 2a 29 3b 0a 76 6f 69 64 20 73   Index*);.void s
2bc20 71 6c 69 74 65 33 52 6f 77 69 64 43 6f 6e 73 74  qlite3RowidConst
2bc30 72 61 69 6e 74 28 50 61 72 73 65 2a 2c 20 69 6e  raint(Parse*, in
2bc40 74 2c 20 54 61 62 6c 65 2a 29 3b 0a 45 78 70 72  t, Table*);.Expr
2bc50 20 2a 73 71 6c 69 74 65 33 45 78 70 72 44 75 70   *sqlite3ExprDup
2bc60 28 73 71 6c 69 74 65 33 2a 2c 45 78 70 72 2a 2c  (sqlite3*,Expr*,
2bc70 69 6e 74 29 3b 0a 45 78 70 72 4c 69 73 74 20 2a  int);.ExprList *
2bc80 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74 44  sqlite3ExprListD
2bc90 75 70 28 73 71 6c 69 74 65 33 2a 2c 45 78 70 72  up(sqlite3*,Expr
2bca0 4c 69 73 74 2a 2c 69 6e 74 29 3b 0a 53 72 63 4c  List*,int);.SrcL
2bcb0 69 73 74 20 2a 73 71 6c 69 74 65 33 53 72 63 4c  ist *sqlite3SrcL
2bcc0 69 73 74 44 75 70 28 73 71 6c 69 74 65 33 2a 2c  istDup(sqlite3*,
2bcd0 53 72 63 4c 69 73 74 2a 2c 69 6e 74 29 3b 0a 49  SrcList*,int);.I
2bce0 64 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 49 64  dList *sqlite3Id
2bcf0 4c 69 73 74 44 75 70 28 73 71 6c 69 74 65 33 2a  ListDup(sqlite3*
2bd00 2c 49 64 4c 69 73 74 2a 29 3b 0a 53 65 6c 65 63  ,IdList*);.Selec
2bd10 74 20 2a 73 71 6c 69 74 65 33 53 65 6c 65 63 74  t *sqlite3Select
2bd20 44 75 70 28 73 71 6c 69 74 65 33 2a 2c 53 65 6c  Dup(sqlite3*,Sel
2bd30 65 63 74 2a 2c 69 6e 74 29 3b 0a 46 75 6e 63 44  ect*,int);.FuncD
2bd40 65 66 20 2a 73 71 6c 69 74 65 33 46 75 6e 63 74  ef *sqlite3Funct
2bd50 69 6f 6e 53 65 61 72 63 68 28 69 6e 74 2c 63 6f  ionSearch(int,co
2bd60 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64  nst char*);.void
2bd70 20 73 71 6c 69 74 65 33 49 6e 73 65 72 74 42 75   sqlite3InsertBu
2bd80 69 6c 74 69 6e 46 75 6e 63 73 28 46 75 6e 63 44  iltinFuncs(FuncD
2bd90 65 66 2a 2c 69 6e 74 29 3b 0a 46 75 6e 63 44 65  ef*,int);.FuncDe
2bda0 66 20 2a 73 71 6c 69 74 65 33 46 69 6e 64 46 75  f *sqlite3FindFu
2bdb0 6e 63 74 69 6f 6e 28 73 71 6c 69 74 65 33 2a 2c  nction(sqlite3*,
2bdc0 63 6f 6e 73 74 20 63 68 61 72 2a 2c 69 6e 74 2c  const char*,int,
2bdd0 75 38 2c 75 38 29 3b 0a 76 6f 69 64 20 73 71 6c  u8,u8);.void sql
2bde0 69 74 65 33 52 65 67 69 73 74 65 72 42 75 69 6c  ite3RegisterBuil
2bdf0 74 69 6e 46 75 6e 63 74 69 6f 6e 73 28 76 6f 69  tinFunctions(voi
2be00 64 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  d);.void sqlite3
2be10 52 65 67 69 73 74 65 72 44 61 74 65 54 69 6d 65  RegisterDateTime
2be20 46 75 6e 63 74 69 6f 6e 73 28 76 6f 69 64 29 3b  Functions(void);
2be30 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 67  .void sqlite3Reg
2be40 69 73 74 65 72 50 65 72 43 6f 6e 6e 65 63 74 69  isterPerConnecti
2be50 6f 6e 42 75 69 6c 74 69 6e 46 75 6e 63 74 69 6f  onBuiltinFunctio
2be60 6e 73 28 73 71 6c 69 74 65 33 2a 29 3b 0a 69 6e  ns(sqlite3*);.in
2be70 74 20 73 71 6c 69 74 65 33 53 61 66 65 74 79 43  t sqlite3SafetyC
2be80 68 65 63 6b 4f 6b 28 73 71 6c 69 74 65 33 2a 29  heckOk(sqlite3*)
2be90 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 61 66  ;.int sqlite3Saf
2bea0 65 74 79 43 68 65 63 6b 53 69 63 6b 4f 72 4f 6b  etyCheckSickOrOk
2beb0 28 73 71 6c 69 74 65 33 2a 29 3b 0a 76 6f 69 64  (sqlite3*);.void
2bec0 20 73 71 6c 69 74 65 33 43 68 61 6e 67 65 43 6f   sqlite3ChangeCo
2bed0 6f 6b 69 65 28 50 61 72 73 65 2a 2c 20 69 6e 74  okie(Parse*, int
2bee0 29 3b 0a 0a 23 69 66 20 21 64 65 66 69 6e 65 64  );..#if !defined
2bef0 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 45  (SQLITE_OMIT_VIE
2bf00 57 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 53  W) && !defined(S
2bf10 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47  QLITE_OMIT_TRIGG
2bf20 45 52 29 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  ER).void sqlite3
2bf30 4d 61 74 65 72 69 61 6c 69 7a 65 56 69 65 77 28  MaterializeView(
2bf40 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20  Parse*, Table*, 
2bf50 45 78 70 72 2a 2c 20 45 78 70 72 4c 69 73 74 2a  Expr*, ExprList*
2bf60 2c 45 78 70 72 2a 2c 69 6e 74 29 3b 0a 23 65 6e  ,Expr*,int);.#en
2bf70 64 69 66 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c  dif..#ifndef SQL
2bf80 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47 45 52  ITE_OMIT_TRIGGER
2bf90 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 42  .  void sqlite3B
2bfa0 65 67 69 6e 54 72 69 67 67 65 72 28 50 61 72 73  eginTrigger(Pars
2bfb0 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e  e*, Token*,Token
2bfc0 2a 2c 69 6e 74 2c 69 6e 74 2c 49 64 4c 69 73 74  *,int,int,IdList
2bfd0 2a 2c 53 72 63 4c 69 73 74 2a 2c 0a 20 20 20 20  *,SrcList*,.    
2bfe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bff0 20 20 20 20 20 20 20 45 78 70 72 2a 2c 69 6e 74         Expr*,int
2c000 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20 73  , int);.  void s
2c010 71 6c 69 74 65 33 46 69 6e 69 73 68 54 72 69 67  qlite3FinishTrig
2c020 67 65 72 28 50 61 72 73 65 2a 2c 20 54 72 69 67  ger(Parse*, Trig
2c030 67 65 72 53 74 65 70 2a 2c 20 54 6f 6b 65 6e 2a  gerStep*, Token*
2c040 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
2c050 33 44 72 6f 70 54 72 69 67 67 65 72 28 50 61 72  3DropTrigger(Par
2c060 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 69  se*, SrcList*, i
2c070 6e 74 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69  nt);.  void sqli
2c080 74 65 33 44 72 6f 70 54 72 69 67 67 65 72 50 74  te3DropTriggerPt
2c090 72 28 50 61 72 73 65 2a 2c 20 54 72 69 67 67 65  r(Parse*, Trigge
2c0a0 72 2a 29 3b 0a 20 20 54 72 69 67 67 65 72 20 2a  r*);.  Trigger *
2c0b0 73 71 6c 69 74 65 33 54 72 69 67 67 65 72 73 45  sqlite3TriggersE
2c0c0 78 69 73 74 28 50 61 72 73 65 20 2a 2c 20 54 61  xist(Parse *, Ta
2c0d0 62 6c 65 2a 2c 20 69 6e 74 2c 20 45 78 70 72 4c  ble*, int, ExprL
2c0e0 69 73 74 2a 2c 20 69 6e 74 20 2a 70 4d 61 73 6b  ist*, int *pMask
2c0f0 29 3b 0a 20 20 54 72 69 67 67 65 72 20 2a 73 71  );.  Trigger *sq
2c100 6c 69 74 65 33 54 72 69 67 67 65 72 4c 69 73 74  lite3TriggerList
2c110 28 50 61 72 73 65 20 2a 2c 20 54 61 62 6c 65 20  (Parse *, Table 
2c120 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  *);.  void sqlit
2c130 65 33 43 6f 64 65 52 6f 77 54 72 69 67 67 65 72  e3CodeRowTrigger
2c140 28 50 61 72 73 65 2a 2c 20 54 72 69 67 67 65 72  (Parse*, Trigger
2c150 20 2a 2c 20 69 6e 74 2c 20 45 78 70 72 4c 69 73   *, int, ExprLis
2c160 74 2a 2c 20 69 6e 74 2c 20 54 61 62 6c 65 20 2a  t*, int, Table *
2c170 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
2c180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e                in
2c190 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 20 20  t, int, int);.  
2c1a0 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 64 65  void sqlite3Code
2c1b0 52 6f 77 54 72 69 67 67 65 72 44 69 72 65 63 74  RowTriggerDirect
2c1c0 28 50 61 72 73 65 20 2a 2c 20 54 72 69 67 67 65  (Parse *, Trigge
2c1d0 72 20 2a 2c 20 54 61 62 6c 65 20 2a 2c 20 69 6e  r *, Table *, in
2c1e0 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 20 20  t, int, int);.  
2c1f0 76 6f 69 64 20 73 71 6c 69 74 65 56 69 65 77 54  void sqliteViewT
2c200 72 69 67 67 65 72 73 28 50 61 72 73 65 2a 2c 20  riggers(Parse*, 
2c210 54 61 62 6c 65 2a 2c 20 45 78 70 72 2a 2c 20 69  Table*, Expr*, i
2c220 6e 74 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a  nt, ExprList*);.
2c230 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65    void sqlite3De
2c240 6c 65 74 65 54 72 69 67 67 65 72 53 74 65 70 28  leteTriggerStep(
2c250 73 71 6c 69 74 65 33 2a 2c 20 54 72 69 67 67 65  sqlite3*, Trigge
2c260 72 53 74 65 70 2a 29 3b 0a 20 20 54 72 69 67 67  rStep*);.  Trigg
2c270 65 72 53 74 65 70 20 2a 73 71 6c 69 74 65 33 54  erStep *sqlite3T
2c280 72 69 67 67 65 72 53 65 6c 65 63 74 53 74 65 70  riggerSelectStep
2c290 28 73 71 6c 69 74 65 33 2a 2c 53 65 6c 65 63 74  (sqlite3*,Select
2c2a0 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  *,.             
2c2b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c2c0 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 73 74             const
2c2d0 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61   char*,const cha
2c2e0 72 2a 29 3b 0a 20 20 54 72 69 67 67 65 72 53 74  r*);.  TriggerSt
2c2f0 65 70 20 2a 73 71 6c 69 74 65 33 54 72 69 67 67  ep *sqlite3Trigg
2c300 65 72 49 6e 73 65 72 74 53 74 65 70 28 50 61 72  erInsertStep(Par
2c310 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 20 49 64 4c 69  se*,Token*, IdLi
2c320 73 74 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20  st*,.           
2c330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c340 20 20 20 20 20 20 20 20 20 20 20 20 20 53 65 6c               Sel
2c350 65 63 74 2a 2c 75 38 2c 55 70 73 65 72 74 2a 2c  ect*,u8,Upsert*,
2c360 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2c370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c380 20 20 20 20 20 20 20 20 20 63 6f 6e 73 74 20 63           const c
2c390 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  har*,const char*
2c3a0 29 3b 0a 20 20 54 72 69 67 67 65 72 53 74 65 70  );.  TriggerStep
2c3b0 20 2a 73 71 6c 69 74 65 33 54 72 69 67 67 65 72   *sqlite3Trigger
2c3c0 55 70 64 61 74 65 53 74 65 70 28 50 61 72 73 65  UpdateStep(Parse
2c3d0 2a 2c 54 6f 6b 65 6e 2a 2c 45 78 70 72 4c 69 73  *,Token*,ExprLis
2c3e0 74 2a 2c 20 45 78 70 72 2a 2c 20 75 38 2c 0a 20  t*, Expr*, u8,. 
2c3f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c410 20 20 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61         const cha
2c420 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  r*,const char*);
2c430 0a 20 20 54 72 69 67 67 65 72 53 74 65 70 20 2a  .  TriggerStep *
2c440 73 71 6c 69 74 65 33 54 72 69 67 67 65 72 44 65  sqlite3TriggerDe
2c450 6c 65 74 65 53 74 65 70 28 50 61 72 73 65 2a 2c  leteStep(Parse*,
2c460 54 6f 6b 65 6e 2a 2c 20 45 78 70 72 2a 2c 0a 20  Token*, Expr*,. 
2c470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c490 20 20 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61         const cha
2c4a0 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  r*,const char*);
2c4b0 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 44  .  void sqlite3D
2c4c0 65 6c 65 74 65 54 72 69 67 67 65 72 28 73 71 6c  eleteTrigger(sql
2c4d0 69 74 65 33 2a 2c 20 54 72 69 67 67 65 72 2a 29  ite3*, Trigger*)
2c4e0 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
2c4f0 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65 54  UnlinkAndDeleteT
2c500 72 69 67 67 65 72 28 73 71 6c 69 74 65 33 2a 2c  rigger(sqlite3*,
2c510 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29  int,const char*)
2c520 3b 0a 20 20 75 33 32 20 73 71 6c 69 74 65 33 54  ;.  u32 sqlite3T
2c530 72 69 67 67 65 72 43 6f 6c 6d 61 73 6b 28 50 61  riggerColmask(Pa
2c540 72 73 65 2a 2c 54 72 69 67 67 65 72 2a 2c 45 78  rse*,Trigger*,Ex
2c550 70 72 4c 69 73 74 2a 2c 69 6e 74 2c 69 6e 74 2c  prList*,int,int,
2c560 54 61 62 6c 65 2a 2c 69 6e 74 29 3b 0a 23 20 64  Table*,int);.# d
2c570 65 66 69 6e 65 20 73 71 6c 69 74 65 33 50 61 72  efine sqlite3Par
2c580 73 65 54 6f 70 6c 65 76 65 6c 28 70 29 20 28 28  seToplevel(p) ((
2c590 70 29 2d 3e 70 54 6f 70 6c 65 76 65 6c 20 3f 20  p)->pToplevel ? 
2c5a0 28 70 29 2d 3e 70 54 6f 70 6c 65 76 65 6c 20 3a  (p)->pToplevel :
2c5b0 20 28 70 29 29 0a 23 20 64 65 66 69 6e 65 20 73   (p)).# define s
2c5c0 71 6c 69 74 65 33 49 73 54 6f 70 6c 65 76 65 6c  qlite3IsToplevel
2c5d0 28 70 29 20 28 28 70 29 2d 3e 70 54 6f 70 6c 65  (p) ((p)->pTople
2c5e0 76 65 6c 3d 3d 30 29 0a 23 65 6c 73 65 0a 23 20  vel==0).#else.# 
2c5f0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54 72  define sqlite3Tr
2c600 69 67 67 65 72 73 45 78 69 73 74 28 42 2c 43 2c  iggersExist(B,C,
2c610 44 2c 45 2c 46 29 20 30 0a 23 20 64 65 66 69 6e  D,E,F) 0.# defin
2c620 65 20 73 71 6c 69 74 65 33 44 65 6c 65 74 65 54  e sqlite3DeleteT
2c630 72 69 67 67 65 72 28 41 2c 42 29 0a 23 20 64 65  rigger(A,B).# de
2c640 66 69 6e 65 20 73 71 6c 69 74 65 33 44 72 6f 70  fine sqlite3Drop
2c650 54 72 69 67 67 65 72 50 74 72 28 41 2c 42 29 0a  TriggerPtr(A,B).
2c660 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
2c670 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65 54  UnlinkAndDeleteT
2c680 72 69 67 67 65 72 28 41 2c 42 2c 43 29 0a 23 20  rigger(A,B,C).# 
2c690 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 43 6f  define sqlite3Co
2c6a0 64 65 52 6f 77 54 72 69 67 67 65 72 28 41 2c 42  deRowTrigger(A,B
2c6b0 2c 43 2c 44 2c 45 2c 46 2c 47 2c 48 2c 49 29 0a  ,C,D,E,F,G,H,I).
2c6c0 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
2c6d0 43 6f 64 65 52 6f 77 54 72 69 67 67 65 72 44 69  CodeRowTriggerDi
2c6e0 72 65 63 74 28 41 2c 42 2c 43 2c 44 2c 45 2c 46  rect(A,B,C,D,E,F
2c6f0 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
2c700 65 33 54 72 69 67 67 65 72 4c 69 73 74 28 58 2c  e3TriggerList(X,
2c710 20 59 29 20 30 0a 23 20 64 65 66 69 6e 65 20 73   Y) 0.# define s
2c720 71 6c 69 74 65 33 50 61 72 73 65 54 6f 70 6c 65  qlite3ParseTople
2c730 76 65 6c 28 70 29 20 70 0a 23 20 64 65 66 69 6e  vel(p) p.# defin
2c740 65 20 73 71 6c 69 74 65 33 49 73 54 6f 70 6c 65  e sqlite3IsTople
2c750 76 65 6c 28 70 29 20 31 0a 23 20 64 65 66 69 6e  vel(p) 1.# defin
2c760 65 20 73 71 6c 69 74 65 33 54 72 69 67 67 65 72  e sqlite3Trigger
2c770 43 6f 6c 6d 61 73 6b 28 41 2c 42 2c 43 2c 44 2c  Colmask(A,B,C,D,
2c780 45 2c 46 2c 47 29 20 30 0a 23 65 6e 64 69 66 0a  E,F,G) 0.#endif.
2c790 0a 69 6e 74 20 73 71 6c 69 74 65 33 4a 6f 69 6e  .int sqlite3Join
2c7a0 54 79 70 65 28 50 61 72 73 65 2a 2c 20 54 6f 6b  Type(Parse*, Tok
2c7b0 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b  en*, Token*, Tok
2c7c0 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  en*);.void sqlit
2c7d0 65 33 43 72 65 61 74 65 46 6f 72 65 69 67 6e 4b  e3CreateForeignK
2c7e0 65 79 28 50 61 72 73 65 2a 2c 20 45 78 70 72 4c  ey(Parse*, ExprL
2c7f0 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 45 78  ist*, Token*, Ex
2c800 70 72 4c 69 73 74 2a 2c 20 69 6e 74 29 3b 0a 76  prList*, int);.v
2c810 6f 69 64 20 73 71 6c 69 74 65 33 44 65 66 65 72  oid sqlite3Defer
2c820 46 6f 72 65 69 67 6e 4b 65 79 28 50 61 72 73 65  ForeignKey(Parse
2c830 2a 2c 20 69 6e 74 29 3b 0a 23 69 66 6e 64 65 66  *, int);.#ifndef
2c840 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54   SQLITE_OMIT_AUT
2c850 48 4f 52 49 5a 41 54 49 4f 4e 0a 20 20 76 6f 69  HORIZATION.  voi
2c860 64 20 73 71 6c 69 74 65 33 41 75 74 68 52 65 61  d sqlite3AuthRea
2c870 64 28 50 61 72 73 65 2a 2c 45 78 70 72 2a 2c 53  d(Parse*,Expr*,S
2c880 63 68 65 6d 61 2a 2c 53 72 63 4c 69 73 74 2a 29  chema*,SrcList*)
2c890 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 41  ;.  int sqlite3A
2c8a0 75 74 68 43 68 65 63 6b 28 50 61 72 73 65 2a 2c  uthCheck(Parse*,
2c8b0 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  int, const char*
2c8c0 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63  , const char*, c
2c8d0 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20 20 76  onst char*);.  v
2c8e0 6f 69 64 20 73 71 6c 69 74 65 33 41 75 74 68 43  oid sqlite3AuthC
2c8f0 6f 6e 74 65 78 74 50 75 73 68 28 50 61 72 73 65  ontextPush(Parse
2c900 2a 2c 20 41 75 74 68 43 6f 6e 74 65 78 74 2a 2c  *, AuthContext*,
2c910 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20   const char*);. 
2c920 20 76 6f 69 64 20 73 71 6c 69 74 65 33 41 75 74   void sqlite3Aut
2c930 68 43 6f 6e 74 65 78 74 50 6f 70 28 41 75 74 68  hContextPop(Auth
2c940 43 6f 6e 74 65 78 74 2a 29 3b 0a 20 20 69 6e 74  Context*);.  int
2c950 20 73 71 6c 69 74 65 33 41 75 74 68 52 65 61 64   sqlite3AuthRead
2c960 43 6f 6c 28 50 61 72 73 65 2a 2c 20 63 6f 6e 73  Col(Parse*, cons
2c970 74 20 63 68 61 72 20 2a 2c 20 63 6f 6e 73 74 20  t char *, const 
2c980 63 68 61 72 20 2a 2c 20 69 6e 74 29 3b 0a 23 65  char *, int);.#e
2c990 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  lse.# define sql
2c9a0 69 74 65 33 41 75 74 68 52 65 61 64 28 61 2c 62  ite3AuthRead(a,b
2c9b0 2c 63 2c 64 29 0a 23 20 64 65 66 69 6e 65 20 73  ,c,d).# define s
2c9c0 71 6c 69 74 65 33 41 75 74 68 43 68 65 63 6b 28  qlite3AuthCheck(
2c9d0 61 2c 62 2c 63 2c 64 2c 65 29 20 20 20 20 53 51  a,b,c,d,e)    SQ
2c9e0 4c 49 54 45 5f 4f 4b 0a 23 20 64 65 66 69 6e 65  LITE_OK.# define
2c9f0 20 73 71 6c 69 74 65 33 41 75 74 68 43 6f 6e 74   sqlite3AuthCont
2ca00 65 78 74 50 75 73 68 28 61 2c 62 2c 63 29 0a 23  extPush(a,b,c).#
2ca10 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 41   define sqlite3A
2ca20 75 74 68 43 6f 6e 74 65 78 74 50 6f 70 28 61 29  uthContextPop(a)
2ca30 20 20 28 28 76 6f 69 64 29 28 61 29 29 0a 23 65    ((void)(a)).#e
2ca40 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65  ndif.void sqlite
2ca50 33 41 74 74 61 63 68 28 50 61 72 73 65 2a 2c 20  3Attach(Parse*, 
2ca60 45 78 70 72 2a 2c 20 45 78 70 72 2a 2c 20 45 78  Expr*, Expr*, Ex
2ca70 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  pr*);.void sqlit
2ca80 65 33 44 65 74 61 63 68 28 50 61 72 73 65 2a 2c  e3Detach(Parse*,
2ca90 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71   Expr*);.void sq
2caa0 6c 69 74 65 33 46 69 78 49 6e 69 74 28 44 62 46  lite3FixInit(DbF
2cab0 69 78 65 72 2a 2c 20 50 61 72 73 65 2a 2c 20 69  ixer*, Parse*, i
2cac0 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c  nt, const char*,
2cad0 20 63 6f 6e 73 74 20 54 6f 6b 65 6e 2a 29 3b 0a   const Token*);.
2cae0 69 6e 74 20 73 71 6c 69 74 65 33 46 69 78 53 72  int sqlite3FixSr
2caf0 63 4c 69 73 74 28 44 62 46 69 78 65 72 2a 2c 20  cList(DbFixer*, 
2cb00 53 72 63 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73  SrcList*);.int s
2cb10 71 6c 69 74 65 33 46 69 78 53 65 6c 65 63 74 28  qlite3FixSelect(
2cb20 44 62 46 69 78 65 72 2a 2c 20 53 65 6c 65 63 74  DbFixer*, Select
2cb30 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46  *);.int sqlite3F
2cb40 69 78 45 78 70 72 28 44 62 46 69 78 65 72 2a 2c  ixExpr(DbFixer*,
2cb50 20 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c   Expr*);.int sql
2cb60 69 74 65 33 46 69 78 45 78 70 72 4c 69 73 74 28  ite3FixExprList(
2cb70 44 62 46 69 78 65 72 2a 2c 20 45 78 70 72 4c 69  DbFixer*, ExprLi
2cb80 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  st*);.int sqlite
2cb90 33 46 69 78 54 72 69 67 67 65 72 53 74 65 70 28  3FixTriggerStep(
2cba0 44 62 46 69 78 65 72 2a 2c 20 54 72 69 67 67 65  DbFixer*, Trigge
2cbb0 72 53 74 65 70 2a 29 3b 0a 69 6e 74 20 73 71 6c  rStep*);.int sql
2cbc0 69 74 65 33 41 74 6f 46 28 63 6f 6e 73 74 20 63  ite3AtoF(const c
2cbd0 68 61 72 20 2a 7a 2c 20 64 6f 75 62 6c 65 2a 2c  har *z, double*,
2cbe0 20 69 6e 74 2c 20 75 38 29 3b 0a 69 6e 74 20 73   int, u8);.int s
2cbf0 71 6c 69 74 65 33 47 65 74 49 6e 74 33 32 28 63  qlite3GetInt32(c
2cc00 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20 69 6e 74  onst char *, int
2cc10 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 41  *);.int sqlite3A
2cc20 74 6f 69 28 63 6f 6e 73 74 20 63 68 61 72 2a 29  toi(const char*)
2cc30 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ;.#ifndef SQLITE
2cc40 5f 4f 4d 49 54 5f 55 54 46 31 36 0a 69 6e 74 20  _OMIT_UTF16.int 
2cc50 73 71 6c 69 74 65 33 55 74 66 31 36 42 79 74 65  sqlite3Utf16Byte
2cc60 4c 65 6e 28 63 6f 6e 73 74 20 76 6f 69 64 20 2a  Len(const void *
2cc70 70 44 61 74 61 2c 20 69 6e 74 20 6e 43 68 61 72  pData, int nChar
2cc80 29 3b 0a 23 65 6e 64 69 66 0a 69 6e 74 20 73 71  );.#endif.int sq
2cc90 6c 69 74 65 33 55 74 66 38 43 68 61 72 4c 65 6e  lite3Utf8CharLen
2cca0 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 70 44 61  (const char *pDa
2ccb0 74 61 2c 20 69 6e 74 20 6e 42 79 74 65 29 3b 0a  ta, int nByte);.
2ccc0 75 33 32 20 73 71 6c 69 74 65 33 55 74 66 38 52  u32 sqlite3Utf8R
2ccd0 65 61 64 28 63 6f 6e 73 74 20 75 38 2a 2a 29 3b  ead(const u8**);
2cce0 0a 4c 6f 67 45 73 74 20 73 71 6c 69 74 65 33 4c  .LogEst sqlite3L
2ccf0 6f 67 45 73 74 28 75 36 34 29 3b 0a 4c 6f 67 45  ogEst(u64);.LogE
2cd00 73 74 20 73 71 6c 69 74 65 33 4c 6f 67 45 73 74  st sqlite3LogEst
2cd10 41 64 64 28 4c 6f 67 45 73 74 2c 4c 6f 67 45 73  Add(LogEst,LogEs
2cd20 74 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  t);.#ifndef SQLI
2cd30 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
2cd40 41 42 4c 45 0a 4c 6f 67 45 73 74 20 73 71 6c 69  ABLE.LogEst sqli
2cd50 74 65 33 4c 6f 67 45 73 74 46 72 6f 6d 44 6f 75  te3LogEstFromDou
2cd60 62 6c 65 28 64 6f 75 62 6c 65 29 3b 0a 23 65 6e  ble(double);.#en
2cd70 64 69 66 0a 23 69 66 20 64 65 66 69 6e 65 64 28  dif.#if defined(
2cd80 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54  SQLITE_ENABLE_ST
2cd90 4d 54 5f 53 43 41 4e 53 54 41 54 55 53 29 20 7c  MT_SCANSTATUS) |
2cda0 7c 20 5c 0a 20 20 20 20 64 65 66 69 6e 65 64 28  | \.    defined(
2cdb0 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54  SQLITE_ENABLE_ST
2cdc0 41 54 33 5f 4f 52 5f 53 54 41 54 34 29 20 7c 7c  AT3_OR_STAT4) ||
2cdd0 20 5c 0a 20 20 20 20 64 65 66 69 6e 65 64 28 53   \.    defined(S
2cde0 51 4c 49 54 45 5f 45 58 50 4c 41 49 4e 5f 45 53  QLITE_EXPLAIN_ES
2cdf0 54 49 4d 41 54 45 44 5f 52 4f 57 53 29 0a 75 36  TIMATED_ROWS).u6
2ce00 34 20 73 71 6c 69 74 65 33 4c 6f 67 45 73 74 54  4 sqlite3LogEstT
2ce10 6f 49 6e 74 28 4c 6f 67 45 73 74 29 3b 0a 23 65  oInt(LogEst);.#e
2ce20 6e 64 69 66 0a 56 4c 69 73 74 20 2a 73 71 6c 69  ndif.VList *sqli
2ce30 74 65 33 56 4c 69 73 74 41 64 64 28 73 71 6c 69  te3VListAdd(sqli
2ce40 74 65 33 2a 2c 56 4c 69 73 74 2a 2c 63 6f 6e 73  te3*,VList*,cons
2ce50 74 20 63 68 61 72 2a 2c 69 6e 74 2c 69 6e 74 29  t char*,int,int)
2ce60 3b 0a 63 6f 6e 73 74 20 63 68 61 72 20 2a 73 71  ;.const char *sq
2ce70 6c 69 74 65 33 56 4c 69 73 74 4e 75 6d 54 6f 4e  lite3VListNumToN
2ce80 61 6d 65 28 56 4c 69 73 74 2a 2c 69 6e 74 29 3b  ame(VList*,int);
2ce90 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 4c 69 73  .int sqlite3VLis
2cea0 74 4e 61 6d 65 54 6f 4e 75 6d 28 56 4c 69 73 74  tNameToNum(VList
2ceb0 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 69 6e  *,const char*,in
2cec0 74 29 3b 0a 0a 2f 2a 0a 2a 2a 20 52 6f 75 74 69  t);../*.** Routi
2ced0 6e 65 73 20 74 6f 20 72 65 61 64 20 61 6e 64 20  nes to read and 
2cee0 77 72 69 74 65 20 76 61 72 69 61 62 6c 65 2d 6c  write variable-l
2cef0 65 6e 67 74 68 20 69 6e 74 65 67 65 72 73 2e 20  ength integers. 
2cf00 20 54 68 65 73 65 20 75 73 65 64 20 74 6f 0a 2a   These used to.*
2cf10 2a 20 62 65 20 64 65 66 69 6e 65 64 20 6c 6f 63  * be defined loc
2cf20 61 6c 6c 79 2c 20 62 75 74 20 6e 6f 77 20 77 65  ally, but now we
2cf30 20 75 73 65 20 74 68 65 20 76 61 72 69 6e 74 20   use the varint 
2cf40 72 6f 75 74 69 6e 65 73 20 69 6e 20 74 68 65 20  routines in the 
2cf50 75 74 69 6c 2e 63 0a 2a 2a 20 66 69 6c 65 2e 0a  util.c.** file..
2cf60 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 50 75  */.int sqlite3Pu
2cf70 74 56 61 72 69 6e 74 28 75 6e 73 69 67 6e 65 64  tVarint(unsigned
2cf80 20 63 68 61 72 2a 2c 20 75 36 34 29 3b 0a 75 38   char*, u64);.u8
2cf90 20 73 71 6c 69 74 65 33 47 65 74 56 61 72 69 6e   sqlite3GetVarin
2cfa0 74 28 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64  t(const unsigned
2cfb0 20 63 68 61 72 20 2a 2c 20 75 36 34 20 2a 29 3b   char *, u64 *);
2cfc0 0a 75 38 20 73 71 6c 69 74 65 33 47 65 74 56 61  .u8 sqlite3GetVa
2cfd0 72 69 6e 74 33 32 28 63 6f 6e 73 74 20 75 6e 73  rint32(const uns
2cfe0 69 67 6e 65 64 20 63 68 61 72 20 2a 2c 20 75 33  igned char *, u3
2cff0 32 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  2 *);.int sqlite
2d000 33 56 61 72 69 6e 74 4c 65 6e 28 75 36 34 20 76  3VarintLen(u64 v
2d010 29 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 63 6f  );../*.** The co
2d020 6d 6d 6f 6e 20 63 61 73 65 20 69 73 20 66 6f 72  mmon case is for
2d030 20 61 20 76 61 72 69 6e 74 20 74 6f 20 62 65 20   a varint to be 
2d040 61 20 73 69 6e 67 6c 65 20 62 79 74 65 2e 20 20  a single byte.  
2d050 54 68 65 79 20 66 6f 6c 6c 6f 77 69 6e 67 0a 2a  They following.*
2d060 2a 20 6d 61 63 72 6f 73 20 68 61 6e 64 6c 65 20  * macros handle 
2d070 74 68 65 20 63 6f 6d 6d 6f 6e 20 63 61 73 65 20  the common case 
2d080 77 69 74 68 6f 75 74 20 61 20 70 72 6f 63 65 64  without a proced
2d090 75 72 65 20 63 61 6c 6c 2c 20 62 75 74 20 74 68  ure call, but th
2d0a0 65 6e 20 63 61 6c 6c 0a 2a 2a 20 74 68 65 20 70  en call.** the p
2d0b0 72 6f 63 65 64 75 72 65 20 66 6f 72 20 6c 61 72  rocedure for lar
2d0c0 67 65 72 20 76 61 72 69 6e 74 73 2e 0a 2a 2f 0a  ger varints..*/.
2d0d0 23 64 65 66 69 6e 65 20 67 65 74 56 61 72 69 6e  #define getVarin
2d0e0 74 33 32 28 41 2c 42 29 20 20 5c 0a 20 20 28 75  t32(A,B)  \.  (u
2d0f0 38 29 28 28 2a 28 41 29 3c 28 75 38 29 30 78 38  8)((*(A)<(u8)0x8
2d100 30 29 3f 28 28 42 29 3d 28 75 33 32 29 2a 28 41  0)?((B)=(u32)*(A
2d110 29 29 2c 31 3a 73 71 6c 69 74 65 33 47 65 74 56  )),1:sqlite3GetV
2d120 61 72 69 6e 74 33 32 28 28 41 29 2c 28 75 33 32  arint32((A),(u32
2d130 20 2a 29 26 28 42 29 29 29 0a 23 64 65 66 69 6e   *)&(B))).#defin
2d140 65 20 70 75 74 56 61 72 69 6e 74 33 32 28 41 2c  e putVarint32(A,
2d150 42 29 20 20 5c 0a 20 20 28 75 38 29 28 28 28 75  B)  \.  (u8)(((u
2d160 33 32 29 28 42 29 3c 28 75 33 32 29 30 78 38 30  32)(B)<(u32)0x80
2d170 29 3f 28 2a 28 41 29 3d 28 75 6e 73 69 67 6e 65  )?(*(A)=(unsigne
2d180 64 20 63 68 61 72 29 28 42 29 29 2c 31 3a 5c 0a  d char)(B)),1:\.
2d190 20 20 73 71 6c 69 74 65 33 50 75 74 56 61 72 69    sqlite3PutVari
2d1a0 6e 74 28 28 41 29 2c 28 42 29 29 29 0a 23 64 65  nt((A),(B))).#de
2d1b0 66 69 6e 65 20 67 65 74 56 61 72 69 6e 74 20 20  fine getVarint  
2d1c0 20 20 73 71 6c 69 74 65 33 47 65 74 56 61 72 69    sqlite3GetVari
2d1d0 6e 74 0a 23 64 65 66 69 6e 65 20 70 75 74 56 61  nt.#define putVa
2d1e0 72 69 6e 74 20 20 20 20 73 71 6c 69 74 65 33 50  rint    sqlite3P
2d1f0 75 74 56 61 72 69 6e 74 0a 0a 0a 63 6f 6e 73 74  utVarint...const
2d200 20 63 68 61 72 20 2a 73 71 6c 69 74 65 33 49 6e   char *sqlite3In
2d210 64 65 78 41 66 66 69 6e 69 74 79 53 74 72 28 73  dexAffinityStr(s
2d220 71 6c 69 74 65 33 2a 2c 20 49 6e 64 65 78 2a 29  qlite3*, Index*)
2d230 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 54 61  ;.void sqlite3Ta
2d240 62 6c 65 41 66 66 69 6e 69 74 79 28 56 64 62 65  bleAffinity(Vdbe
2d250 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 29 3b  *, Table*, int);
2d260 0a 63 68 61 72 20 73 71 6c 69 74 65 33 43 6f 6d  .char sqlite3Com
2d270 70 61 72 65 41 66 66 69 6e 69 74 79 28 45 78 70  pareAffinity(Exp
2d280 72 20 2a 70 45 78 70 72 2c 20 63 68 61 72 20 61  r *pExpr, char a
2d290 66 66 32 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  ff2);.int sqlite
2d2a0 33 49 6e 64 65 78 41 66 66 69 6e 69 74 79 4f 6b  3IndexAffinityOk
2d2b0 28 45 78 70 72 20 2a 70 45 78 70 72 2c 20 63 68  (Expr *pExpr, ch
2d2c0 61 72 20 69 64 78 5f 61 66 66 69 6e 69 74 79 29  ar idx_affinity)
2d2d0 3b 0a 63 68 61 72 20 73 71 6c 69 74 65 33 54 61  ;.char sqlite3Ta
2d2e0 62 6c 65 43 6f 6c 75 6d 6e 41 66 66 69 6e 69 74  bleColumnAffinit
2d2f0 79 28 54 61 62 6c 65 2a 2c 69 6e 74 29 3b 0a 63  y(Table*,int);.c
2d300 68 61 72 20 73 71 6c 69 74 65 33 45 78 70 72 41  har sqlite3ExprA
2d310 66 66 69 6e 69 74 79 28 45 78 70 72 20 2a 70 45  ffinity(Expr *pE
2d320 78 70 72 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  xpr);.int sqlite
2d330 33 41 74 6f 69 36 34 28 63 6f 6e 73 74 20 63 68  3Atoi64(const ch
2d340 61 72 2a 2c 20 69 36 34 2a 2c 20 69 6e 74 2c 20  ar*, i64*, int, 
2d350 75 38 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  u8);.int sqlite3
2d360 44 65 63 4f 72 48 65 78 54 6f 49 36 34 28 63 6f  DecOrHexToI64(co
2d370 6e 73 74 20 63 68 61 72 2a 2c 20 69 36 34 2a 29  nst char*, i64*)
2d380 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 72  ;.void sqlite3Er
2d390 72 6f 72 57 69 74 68 4d 73 67 28 73 71 6c 69 74  rorWithMsg(sqlit
2d3a0 65 33 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20  e3*, int, const 
2d3b0 63 68 61 72 2a 2c 2e 2e 2e 29 3b 0a 76 6f 69 64  char*,...);.void
2d3c0 20 73 71 6c 69 74 65 33 45 72 72 6f 72 28 73 71   sqlite3Error(sq
2d3d0 6c 69 74 65 33 2a 2c 69 6e 74 29 3b 0a 76 6f 69  lite3*,int);.voi
2d3e0 64 20 73 71 6c 69 74 65 33 53 79 73 74 65 6d 45  d sqlite3SystemE
2d3f0 72 72 6f 72 28 73 71 6c 69 74 65 33 2a 2c 69 6e  rror(sqlite3*,in
2d400 74 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65  t);.void *sqlite
2d410 33 48 65 78 54 6f 42 6c 6f 62 28 73 71 6c 69 74  3HexToBlob(sqlit
2d420 65 33 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20  e3*, const char 
2d430 2a 7a 2c 20 69 6e 74 20 6e 29 3b 0a 75 38 20 73  *z, int n);.u8 s
2d440 71 6c 69 74 65 33 48 65 78 54 6f 49 6e 74 28 69  qlite3HexToInt(i
2d450 6e 74 20 68 29 3b 0a 69 6e 74 20 73 71 6c 69 74  nt h);.int sqlit
2d460 65 33 54 77 6f 50 61 72 74 4e 61 6d 65 28 50 61  e3TwoPartName(Pa
2d470 72 73 65 20 2a 2c 20 54 6f 6b 65 6e 20 2a 2c 20  rse *, Token *, 
2d480 54 6f 6b 65 6e 20 2a 2c 20 54 6f 6b 65 6e 20 2a  Token *, Token *
2d490 2a 29 3b 0a 0a 23 69 66 20 64 65 66 69 6e 65 64  *);..#if defined
2d4a0 28 53 51 4c 49 54 45 5f 4e 45 45 44 5f 45 52 52  (SQLITE_NEED_ERR
2d4b0 5f 4e 41 4d 45 29 0a 63 6f 6e 73 74 20 63 68 61  _NAME).const cha
2d4c0 72 20 2a 73 71 6c 69 74 65 33 45 72 72 4e 61 6d  r *sqlite3ErrNam
2d4d0 65 28 69 6e 74 29 3b 0a 23 65 6e 64 69 66 0a 0a  e(int);.#endif..
2d4e0 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e  #ifdef SQLITE_EN
2d4f0 41 42 4c 45 5f 44 45 53 45 52 49 41 4c 49 5a 45  ABLE_DESERIALIZE
2d500 0a 69 6e 74 20 73 71 6c 69 74 65 33 4d 65 6d 64  .int sqlite3Memd
2d510 62 49 6e 69 74 28 76 6f 69 64 29 3b 0a 23 65 6e  bInit(void);.#en
2d520 64 69 66 0a 0a 63 6f 6e 73 74 20 63 68 61 72 20  dif..const char 
2d530 2a 73 71 6c 69 74 65 33 45 72 72 53 74 72 28 69  *sqlite3ErrStr(i
2d540 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  nt);.int sqlite3
2d550 52 65 61 64 53 63 68 65 6d 61 28 50 61 72 73 65  ReadSchema(Parse
2d560 20 2a 70 50 61 72 73 65 29 3b 0a 43 6f 6c 6c 53   *pParse);.CollS
2d570 65 71 20 2a 73 71 6c 69 74 65 33 46 69 6e 64 43  eq *sqlite3FindC
2d580 6f 6c 6c 53 65 71 28 73 71 6c 69 74 65 33 2a 2c  ollSeq(sqlite3*,
2d590 75 38 20 65 6e 63 2c 20 63 6f 6e 73 74 20 63 68  u8 enc, const ch
2d5a0 61 72 2a 2c 69 6e 74 29 3b 0a 69 6e 74 20 73 71  ar*,int);.int sq
2d5b0 6c 69 74 65 33 49 73 42 69 6e 61 72 79 28 63 6f  lite3IsBinary(co
2d5c0 6e 73 74 20 43 6f 6c 6c 53 65 71 2a 29 3b 0a 43  nst CollSeq*);.C
2d5d0 6f 6c 6c 53 65 71 20 2a 73 71 6c 69 74 65 33 4c  ollSeq *sqlite3L
2d5e0 6f 63 61 74 65 43 6f 6c 6c 53 65 71 28 50 61 72  ocateCollSeq(Par
2d5f0 73 65 20 2a 70 50 61 72 73 65 2c 20 63 6f 6e 73  se *pParse, cons
2d600 74 20 63 68 61 72 2a 7a 4e 61 6d 65 29 3b 0a 43  t char*zName);.C
2d610 6f 6c 6c 53 65 71 20 2a 73 71 6c 69 74 65 33 45  ollSeq *sqlite3E
2d620 78 70 72 43 6f 6c 6c 53 65 71 28 50 61 72 73 65  xprCollSeq(Parse
2d630 20 2a 70 50 61 72 73 65 2c 20 45 78 70 72 20 2a   *pParse, Expr *
2d640 70 45 78 70 72 29 3b 0a 43 6f 6c 6c 53 65 71 20  pExpr);.CollSeq 
2d650 2a 73 71 6c 69 74 65 33 45 78 70 72 4e 4e 43 6f  *sqlite3ExprNNCo
2d660 6c 6c 53 65 71 28 50 61 72 73 65 20 2a 70 50 61  llSeq(Parse *pPa
2d670 72 73 65 2c 20 45 78 70 72 20 2a 70 45 78 70 72  rse, Expr *pExpr
2d680 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78  );.int sqlite3Ex
2d690 70 72 43 6f 6c 6c 53 65 71 4d 61 74 63 68 28 50  prCollSeqMatch(P
2d6a0 61 72 73 65 2a 2c 45 78 70 72 2a 2c 45 78 70 72  arse*,Expr*,Expr
2d6b0 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65  *);.Expr *sqlite
2d6c0 33 45 78 70 72 41 64 64 43 6f 6c 6c 61 74 65 54  3ExprAddCollateT
2d6d0 6f 6b 65 6e 28 50 61 72 73 65 20 2a 70 50 61 72  oken(Parse *pPar
2d6e0 73 65 2c 20 45 78 70 72 2a 2c 20 63 6f 6e 73 74  se, Expr*, const
2d6f0 20 54 6f 6b 65 6e 2a 2c 20 69 6e 74 29 3b 0a 45   Token*, int);.E
2d700 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72  xpr *sqlite3Expr
2d710 41 64 64 43 6f 6c 6c 61 74 65 53 74 72 69 6e 67  AddCollateString
2d720 28 50 61 72 73 65 2a 2c 45 78 70 72 2a 2c 63 6f  (Parse*,Expr*,co
2d730 6e 73 74 20 63 68 61 72 2a 29 3b 0a 45 78 70 72  nst char*);.Expr
2d740 20 2a 73 71 6c 69 74 65 33 45 78 70 72 53 6b 69   *sqlite3ExprSki
2d750 70 43 6f 6c 6c 61 74 65 28 45 78 70 72 2a 29 3b  pCollate(Expr*);
2d760 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 68 65 63  .int sqlite3Chec
2d770 6b 43 6f 6c 6c 53 65 71 28 50 61 72 73 65 20 2a  kCollSeq(Parse *
2d780 2c 20 43 6f 6c 6c 53 65 71 20 2a 29 3b 0a 69 6e  , CollSeq *);.in
2d790 74 20 73 71 6c 69 74 65 33 57 72 69 74 61 62 6c  t sqlite3Writabl
2d7a0 65 53 63 68 65 6d 61 28 73 71 6c 69 74 65 33 2a  eSchema(sqlite3*
2d7b0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 68  );.int sqlite3Ch
2d7c0 65 63 6b 4f 62 6a 65 63 74 4e 61 6d 65 28 50 61  eckObjectName(Pa
2d7d0 72 73 65 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61  rse *, const cha
2d7e0 72 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  r *);.void sqlit
2d7f0 65 33 56 64 62 65 53 65 74 43 68 61 6e 67 65 73  e3VdbeSetChanges
2d800 28 73 71 6c 69 74 65 33 20 2a 2c 20 69 6e 74 29  (sqlite3 *, int)
2d810 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 41 64 64  ;.int sqlite3Add
2d820 49 6e 74 36 34 28 69 36 34 2a 2c 69 36 34 29 3b  Int64(i64*,i64);
2d830 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 75 62 49  .int sqlite3SubI
2d840 6e 74 36 34 28 69 36 34 2a 2c 69 36 34 29 3b 0a  nt64(i64*,i64);.
2d850 69 6e 74 20 73 71 6c 69 74 65 33 4d 75 6c 49 6e  int sqlite3MulIn
2d860 74 36 34 28 69 36 34 2a 2c 69 36 34 29 3b 0a 69  t64(i64*,i64);.i
2d870 6e 74 20 73 71 6c 69 74 65 33 41 62 73 49 6e 74  nt sqlite3AbsInt
2d880 33 32 28 69 6e 74 29 3b 0a 23 69 66 64 65 66 20  32(int);.#ifdef 
2d890 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 38 5f  SQLITE_ENABLE_8_
2d8a0 33 5f 4e 41 4d 45 53 0a 76 6f 69 64 20 73 71 6c  3_NAMES.void sql
2d8b0 69 74 65 33 46 69 6c 65 53 75 66 66 69 78 33 28  ite3FileSuffix3(
2d8c0 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 68 61  const char*, cha
2d8d0 72 2a 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66  r*);.#else.# def
2d8e0 69 6e 65 20 73 71 6c 69 74 65 33 46 69 6c 65 53  ine sqlite3FileS
2d8f0 75 66 66 69 78 33 28 58 2c 59 29 0a 23 65 6e 64  uffix3(X,Y).#end
2d900 69 66 0a 75 38 20 73 71 6c 69 74 65 33 47 65 74  if.u8 sqlite3Get
2d910 42 6f 6f 6c 65 61 6e 28 63 6f 6e 73 74 20 63 68  Boolean(const ch
2d920 61 72 20 2a 7a 2c 75 38 29 3b 0a 0a 63 6f 6e 73  ar *z,u8);..cons
2d930 74 20 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 56  t void *sqlite3V
2d940 61 6c 75 65 54 65 78 74 28 73 71 6c 69 74 65 33  alueText(sqlite3
2d950 5f 76 61 6c 75 65 2a 2c 20 75 38 29 3b 0a 69 6e  _value*, u8);.in
2d960 74 20 73 71 6c 69 74 65 33 56 61 6c 75 65 42 79  t sqlite3ValueBy
2d970 74 65 73 28 73 71 6c 69 74 65 33 5f 76 61 6c 75  tes(sqlite3_valu
2d980 65 2a 2c 20 75 38 29 3b 0a 76 6f 69 64 20 73 71  e*, u8);.void sq
2d990 6c 69 74 65 33 56 61 6c 75 65 53 65 74 53 74 72  lite3ValueSetStr
2d9a0 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2c  (sqlite3_value*,
2d9b0 20 69 6e 74 2c 20 63 6f 6e 73 74 20 76 6f 69 64   int, const void
2d9c0 20 2a 2c 75 38 2c 0a 20 20 20 20 20 20 20 20 20   *,u8,.         
2d9d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 76                 v
2d9e0 6f 69 64 28 2a 29 28 76 6f 69 64 2a 29 29 3b 0a  oid(*)(void*));.
2d9f0 76 6f 69 64 20 73 71 6c 69 74 65 33 56 61 6c 75  void sqlite3Valu
2da00 65 53 65 74 4e 75 6c 6c 28 73 71 6c 69 74 65 33  eSetNull(sqlite3
2da10 5f 76 61 6c 75 65 2a 29 3b 0a 76 6f 69 64 20 73  _value*);.void s
2da20 71 6c 69 74 65 33 56 61 6c 75 65 46 72 65 65 28  qlite3ValueFree(
2da30 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 29 3b  sqlite3_value*);
2da40 0a 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a  .sqlite3_value *
2da50 73 71 6c 69 74 65 33 56 61 6c 75 65 4e 65 77 28  sqlite3ValueNew(
2da60 73 71 6c 69 74 65 33 20 2a 29 3b 0a 23 69 66 6e  sqlite3 *);.#ifn
2da70 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
2da80 55 54 46 31 36 0a 63 68 61 72 20 2a 73 71 6c 69  UTF16.char *sqli
2da90 74 65 33 55 74 66 31 36 74 6f 38 28 73 71 6c 69  te3Utf16to8(sqli
2daa0 74 65 33 20 2a 2c 20 63 6f 6e 73 74 20 76 6f 69  te3 *, const voi
2dab0 64 2a 2c 20 69 6e 74 2c 20 75 38 29 3b 0a 23 65  d*, int, u8);.#e
2dac0 6e 64 69 66 0a 69 6e 74 20 73 71 6c 69 74 65 33  ndif.int sqlite3
2dad0 56 61 6c 75 65 46 72 6f 6d 45 78 70 72 28 73 71  ValueFromExpr(sq
2dae0 6c 69 74 65 33 20 2a 2c 20 45 78 70 72 20 2a 2c  lite3 *, Expr *,
2daf0 20 75 38 2c 20 75 38 2c 20 73 71 6c 69 74 65 33   u8, u8, sqlite3
2db00 5f 76 61 6c 75 65 20 2a 2a 29 3b 0a 76 6f 69 64  _value **);.void
2db10 20 73 71 6c 69 74 65 33 56 61 6c 75 65 41 70 70   sqlite3ValueApp
2db20 6c 79 41 66 66 69 6e 69 74 79 28 73 71 6c 69 74  lyAffinity(sqlit
2db30 65 33 5f 76 61 6c 75 65 20 2a 2c 20 75 38 2c 20  e3_value *, u8, 
2db40 75 38 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c  u8);.#ifndef SQL
2db50 49 54 45 5f 41 4d 41 4c 47 41 4d 41 54 49 4f 4e  ITE_AMALGAMATION
2db60 0a 65 78 74 65 72 6e 20 63 6f 6e 73 74 20 75 6e  .extern const un
2db70 73 69 67 6e 65 64 20 63 68 61 72 20 73 71 6c 69  signed char sqli
2db80 74 65 33 4f 70 63 6f 64 65 50 72 6f 70 65 72 74  te3OpcodePropert
2db90 79 5b 5d 3b 0a 65 78 74 65 72 6e 20 63 6f 6e 73  y[];.extern cons
2dba0 74 20 63 68 61 72 20 73 71 6c 69 74 65 33 53 74  t char sqlite3St
2dbb0 72 42 49 4e 41 52 59 5b 5d 3b 0a 65 78 74 65 72  rBINARY[];.exter
2dbc0 6e 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64  n const unsigned
2dbd0 20 63 68 61 72 20 73 71 6c 69 74 65 33 55 70 70   char sqlite3Upp
2dbe0 65 72 54 6f 4c 6f 77 65 72 5b 5d 3b 0a 65 78 74  erToLower[];.ext
2dbf0 65 72 6e 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e  ern const unsign
2dc00 65 64 20 63 68 61 72 20 73 71 6c 69 74 65 33 43  ed char sqlite3C
2dc10 74 79 70 65 4d 61 70 5b 5d 3b 0a 65 78 74 65 72  typeMap[];.exter
2dc20 6e 20 63 6f 6e 73 74 20 54 6f 6b 65 6e 20 73 71  n const Token sq
2dc30 6c 69 74 65 33 49 6e 74 54 6f 6b 65 6e 73 5b 5d  lite3IntTokens[]
2dc40 3b 0a 65 78 74 65 72 6e 20 53 51 4c 49 54 45 5f  ;.extern SQLITE_
2dc50 57 53 44 20 73 74 72 75 63 74 20 53 71 6c 69 74  WSD struct Sqlit
2dc60 65 33 43 6f 6e 66 69 67 20 73 71 6c 69 74 65 33  e3Config sqlite3
2dc70 43 6f 6e 66 69 67 3b 0a 65 78 74 65 72 6e 20 46  Config;.extern F
2dc80 75 6e 63 44 65 66 48 61 73 68 20 73 71 6c 69 74  uncDefHash sqlit
2dc90 65 33 42 75 69 6c 74 69 6e 46 75 6e 63 74 69 6f  e3BuiltinFunctio
2dca0 6e 73 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  ns;.#ifndef SQLI
2dcb0 54 45 5f 4f 4d 49 54 5f 57 53 44 0a 65 78 74 65  TE_OMIT_WSD.exte
2dcc0 72 6e 20 69 6e 74 20 73 71 6c 69 74 65 33 50 65  rn int sqlite3Pe
2dcd0 6e 64 69 6e 67 42 79 74 65 3b 0a 23 65 6e 64 69  ndingByte;.#endi
2dce0 66 0a 23 65 6e 64 69 66 0a 23 69 66 64 65 66 20  f.#endif.#ifdef 
2dcf0 56 44 42 45 5f 50 52 4f 46 49 4c 45 0a 65 78 74  VDBE_PROFILE.ext
2dd00 65 72 6e 20 73 71 6c 69 74 65 33 5f 75 69 6e 74  ern sqlite3_uint
2dd10 36 34 20 73 71 6c 69 74 65 33 4e 50 72 6f 66 69  64 sqlite3NProfi
2dd20 6c 65 43 6e 74 3b 0a 23 65 6e 64 69 66 0a 76 6f  leCnt;.#endif.vo
2dd30 69 64 20 73 71 6c 69 74 65 33 52 6f 6f 74 50 61  id sqlite3RootPa
2dd40 67 65 4d 6f 76 65 64 28 73 71 6c 69 74 65 33 2a  geMoved(sqlite3*
2dd50 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29  , int, int, int)
2dd60 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65  ;.void sqlite3Re
2dd70 69 6e 64 65 78 28 50 61 72 73 65 2a 2c 20 54 6f  index(Parse*, To
2dd80 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76  ken*, Token*);.v
2dd90 6f 69 64 20 73 71 6c 69 74 65 33 41 6c 74 65 72  oid sqlite3Alter
2dda0 46 75 6e 63 74 69 6f 6e 73 28 76 6f 69 64 29 3b  Functions(void);
2ddb0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 6c 74  .void sqlite3Alt
2ddc0 65 72 52 65 6e 61 6d 65 54 61 62 6c 65 28 50 61  erRenameTable(Pa
2ddd0 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20  rse*, SrcList*, 
2dde0 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71  Token*);.void sq
2ddf0 6c 69 74 65 33 41 6c 74 65 72 52 65 6e 61 6d 65  lite3AlterRename
2de00 43 6f 6c 75 6d 6e 28 50 61 72 73 65 2a 2c 20 53  Column(Parse*, S
2de10 72 63 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 2c  rcList*, Token*,
2de20 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71   Token*);.int sq
2de30 6c 69 74 65 33 47 65 74 54 6f 6b 65 6e 28 63 6f  lite3GetToken(co
2de40 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61  nst unsigned cha
2de50 72 20 2a 2c 20 69 6e 74 20 2a 29 3b 0a 76 6f 69  r *, int *);.voi
2de60 64 20 73 71 6c 69 74 65 33 4e 65 73 74 65 64 50  d sqlite3NestedP
2de70 61 72 73 65 28 50 61 72 73 65 2a 2c 20 63 6f 6e  arse(Parse*, con
2de80 73 74 20 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a  st char*, ...);.
2de90 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 69  void sqlite3Expi
2dea0 72 65 50 72 65 70 61 72 65 64 53 74 61 74 65 6d  rePreparedStatem
2deb0 65 6e 74 73 28 73 71 6c 69 74 65 33 2a 2c 20 69  ents(sqlite3*, i
2dec0 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
2ded0 33 43 6f 64 65 52 68 73 4f 66 49 4e 28 50 61 72  3CodeRhsOfIN(Par
2dee0 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 2c  se*, Expr*, int,
2def0 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74   int);.int sqlit
2df00 65 33 43 6f 64 65 53 75 62 73 65 6c 65 63 74 28  e3CodeSubselect(
2df10 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 29 3b 0a  Parse*, Expr*);.
2df20 76 6f 69 64 20 73 71 6c 69 74 65 33 53 65 6c 65  void sqlite3Sele
2df30 63 74 50 72 65 70 28 50 61 72 73 65 2a 2c 20 53  ctPrep(Parse*, S
2df40 65 6c 65 63 74 2a 2c 20 4e 61 6d 65 43 6f 6e 74  elect*, NameCont
2df50 65 78 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ext*);.void sqli
2df60 74 65 33 53 65 6c 65 63 74 57 72 6f 6e 67 4e 75  te3SelectWrongNu
2df70 6d 54 65 72 6d 73 45 72 72 6f 72 28 50 61 72 73  mTermsError(Pars
2df80 65 20 2a 70 50 61 72 73 65 2c 20 53 65 6c 65 63  e *pParse, Selec
2df90 74 20 2a 70 29 3b 0a 69 6e 74 20 73 71 6c 69 74  t *p);.int sqlit
2dfa0 65 33 4d 61 74 63 68 53 70 61 6e 4e 61 6d 65 28  e3MatchSpanName(
2dfb0 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e  const char*, con
2dfc0 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20  st char*, const 
2dfd0 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61  char*, const cha
2dfe0 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  r*);.int sqlite3
2dff0 52 65 73 6f 6c 76 65 45 78 70 72 4e 61 6d 65 73  ResolveExprNames
2e000 28 4e 61 6d 65 43 6f 6e 74 65 78 74 2a 2c 20 45  (NameContext*, E
2e010 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  xpr*);.int sqlit
2e020 65 33 52 65 73 6f 6c 76 65 45 78 70 72 4c 69 73  e3ResolveExprLis
2e030 74 4e 61 6d 65 73 28 4e 61 6d 65 43 6f 6e 74 65  tNames(NameConte
2e040 78 74 2a 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b  xt*, ExprList*);
2e050 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 73  .void sqlite3Res
2e060 6f 6c 76 65 53 65 6c 65 63 74 4e 61 6d 65 73 28  olveSelectNames(
2e070 50 61 72 73 65 2a 2c 20 53 65 6c 65 63 74 2a 2c  Parse*, Select*,
2e080 20 4e 61 6d 65 43 6f 6e 74 65 78 74 2a 29 3b 0a   NameContext*);.
2e090 69 6e 74 20 73 71 6c 69 74 65 33 52 65 73 6f 6c  int sqlite3Resol
2e0a0 76 65 53 65 6c 66 52 65 66 65 72 65 6e 63 65 28  veSelfReference(
2e0b0 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a 2c 69 6e  Parse*,Table*,in
2e0c0 74 2c 45 78 70 72 2a 2c 45 78 70 72 4c 69 73 74  t,Expr*,ExprList
2e0d0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52  *);.int sqlite3R
2e0e0 65 73 6f 6c 76 65 4f 72 64 65 72 47 72 6f 75 70  esolveOrderGroup
2e0f0 42 79 28 50 61 72 73 65 2a 2c 20 53 65 6c 65 63  By(Parse*, Selec
2e100 74 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 63  t*, ExprList*, c
2e110 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69  onst char*);.voi
2e120 64 20 73 71 6c 69 74 65 33 43 6f 6c 75 6d 6e 44  d sqlite3ColumnD
2e130 65 66 61 75 6c 74 28 56 64 62 65 20 2a 2c 20 54  efault(Vdbe *, T
2e140 61 62 6c 65 20 2a 2c 20 69 6e 74 2c 20 69 6e 74  able *, int, int
2e150 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41  );.void sqlite3A
2e160 6c 74 65 72 46 69 6e 69 73 68 41 64 64 43 6f 6c  lterFinishAddCol
2e170 75 6d 6e 28 50 61 72 73 65 20 2a 2c 20 54 6f 6b  umn(Parse *, Tok
2e180 65 6e 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  en *);.void sqli
2e190 74 65 33 41 6c 74 65 72 42 65 67 69 6e 41 64 64  te3AlterBeginAdd
2e1a0 43 6f 6c 75 6d 6e 28 50 61 72 73 65 20 2a 2c 20  Column(Parse *, 
2e1b0 53 72 63 4c 69 73 74 20 2a 29 3b 0a 76 6f 69 64  SrcList *);.void
2e1c0 20 2a 73 71 6c 69 74 65 33 52 65 6e 61 6d 65 54   *sqlite3RenameT
2e1d0 6f 6b 65 6e 4d 61 70 28 50 61 72 73 65 2a 2c 20  okenMap(Parse*, 
2e1e0 76 6f 69 64 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a  void*, Token*);.
2e1f0 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 6e 61  void sqlite3Rena
2e200 6d 65 54 6f 6b 65 6e 52 65 6d 61 70 28 50 61 72  meTokenRemap(Par
2e210 73 65 2a 2c 20 76 6f 69 64 20 2a 70 54 6f 2c 20  se*, void *pTo, 
2e220 76 6f 69 64 20 2a 70 46 72 6f 6d 29 3b 0a 76 6f  void *pFrom);.vo
2e230 69 64 20 73 71 6c 69 74 65 33 52 65 6e 61 6d 65  id sqlite3Rename
2e240 45 78 70 72 55 6e 6d 61 70 28 50 61 72 73 65 2a  ExprUnmap(Parse*
2e250 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73  , Expr*);.void s
2e260 71 6c 69 74 65 33 52 65 6e 61 6d 65 45 78 70 72  qlite3RenameExpr
2e270 6c 69 73 74 55 6e 6d 61 70 28 50 61 72 73 65 2a  listUnmap(Parse*
2e280 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a 43 6f  , ExprList*);.Co
2e290 6c 6c 53 65 71 20 2a 73 71 6c 69 74 65 33 47 65  llSeq *sqlite3Ge
2e2a0 74 43 6f 6c 6c 53 65 71 28 50 61 72 73 65 2a 2c  tCollSeq(Parse*,
2e2b0 20 75 38 2c 20 43 6f 6c 6c 53 65 71 20 2a 2c 20   u8, CollSeq *, 
2e2c0 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 63 68  const char*);.ch
2e2d0 61 72 20 73 71 6c 69 74 65 33 41 66 66 69 6e 69  ar sqlite3Affini
2e2e0 74 79 54 79 70 65 28 63 6f 6e 73 74 20 63 68 61  tyType(const cha
2e2f0 72 2a 2c 20 43 6f 6c 75 6d 6e 2a 29 3b 0a 76 6f  r*, Column*);.vo
2e300 69 64 20 73 71 6c 69 74 65 33 41 6e 61 6c 79 7a  id sqlite3Analyz
2e310 65 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a  e(Parse*, Token*
2e320 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73  , Token*);.int s
2e330 71 6c 69 74 65 33 49 6e 76 6f 6b 65 42 75 73 79  qlite3InvokeBusy
2e340 48 61 6e 64 6c 65 72 28 42 75 73 79 48 61 6e 64  Handler(BusyHand
2e350 6c 65 72 2a 2c 20 73 71 6c 69 74 65 33 5f 66 69  ler*, sqlite3_fi
2e360 6c 65 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  le*);.int sqlite
2e370 33 46 69 6e 64 44 62 28 73 71 6c 69 74 65 33 2a  3FindDb(sqlite3*
2e380 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73  , Token*);.int s
2e390 71 6c 69 74 65 33 46 69 6e 64 44 62 4e 61 6d 65  qlite3FindDbName
2e3a0 28 73 71 6c 69 74 65 33 20 2a 2c 20 63 6f 6e 73  (sqlite3 *, cons
2e3b0 74 20 63 68 61 72 20 2a 29 3b 0a 69 6e 74 20 73  t char *);.int s
2e3c0 71 6c 69 74 65 33 41 6e 61 6c 79 73 69 73 4c 6f  qlite3AnalysisLo
2e3d0 61 64 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 20  ad(sqlite3*,int 
2e3e0 69 44 42 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  iDB);.void sqlit
2e3f0 65 33 44 65 6c 65 74 65 49 6e 64 65 78 53 61 6d  e3DeleteIndexSam
2e400 70 6c 65 73 28 73 71 6c 69 74 65 33 2a 2c 49 6e  ples(sqlite3*,In
2e410 64 65 78 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  dex*);.void sqli
2e420 74 65 33 44 65 66 61 75 6c 74 52 6f 77 45 73 74  te3DefaultRowEst
2e430 28 49 6e 64 65 78 2a 29 3b 0a 76 6f 69 64 20 73  (Index*);.void s
2e440 71 6c 69 74 65 33 52 65 67 69 73 74 65 72 4c 69  qlite3RegisterLi
2e450 6b 65 46 75 6e 63 74 69 6f 6e 73 28 73 71 6c 69  keFunctions(sqli
2e460 74 65 33 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20  te3*, int);.int 
2e470 73 71 6c 69 74 65 33 49 73 4c 69 6b 65 46 75 6e  sqlite3IsLikeFun
2e480 63 74 69 6f 6e 28 73 71 6c 69 74 65 33 2a 2c 45  ction(sqlite3*,E
2e490 78 70 72 2a 2c 69 6e 74 2a 2c 63 68 61 72 2a 29  xpr*,int*,char*)
2e4a0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 63  ;.void sqlite3Sc
2e4b0 68 65 6d 61 43 6c 65 61 72 28 76 6f 69 64 20 2a  hemaClear(void *
2e4c0 29 3b 0a 53 63 68 65 6d 61 20 2a 73 71 6c 69 74  );.Schema *sqlit
2e4d0 65 33 53 63 68 65 6d 61 47 65 74 28 73 71 6c 69  e3SchemaGet(sqli
2e4e0 74 65 33 20 2a 2c 20 42 74 72 65 65 20 2a 29 3b  te3 *, Btree *);
2e4f0 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 63 68 65  .int sqlite3Sche
2e500 6d 61 54 6f 49 6e 64 65 78 28 73 71 6c 69 74 65  maToIndex(sqlite
2e510 33 20 2a 64 62 2c 20 53 63 68 65 6d 61 20 2a 29  3 *db, Schema *)
2e520 3b 0a 4b 65 79 49 6e 66 6f 20 2a 73 71 6c 69 74  ;.KeyInfo *sqlit
2e530 65 33 4b 65 79 49 6e 66 6f 41 6c 6c 6f 63 28 73  e3KeyInfoAlloc(s
2e540 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 69 6e 74 29  qlite3*,int,int)
2e550 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4b 65  ;.void sqlite3Ke
2e560 79 49 6e 66 6f 55 6e 72 65 66 28 4b 65 79 49 6e  yInfoUnref(KeyIn
2e570 66 6f 2a 29 3b 0a 4b 65 79 49 6e 66 6f 20 2a 73  fo*);.KeyInfo *s
2e580 71 6c 69 74 65 33 4b 65 79 49 6e 66 6f 52 65 66  qlite3KeyInfoRef
2e590 28 4b 65 79 49 6e 66 6f 2a 29 3b 0a 4b 65 79 49  (KeyInfo*);.KeyI
2e5a0 6e 66 6f 20 2a 73 71 6c 69 74 65 33 4b 65 79 49  nfo *sqlite3KeyI
2e5b0 6e 66 6f 4f 66 49 6e 64 65 78 28 50 61 72 73 65  nfoOfIndex(Parse
2e5c0 2a 2c 20 49 6e 64 65 78 2a 29 3b 0a 4b 65 79 49  *, Index*);.KeyI
2e5d0 6e 66 6f 20 2a 73 71 6c 69 74 65 33 4b 65 79 49  nfo *sqlite3KeyI
2e5e0 6e 66 6f 46 72 6f 6d 45 78 70 72 4c 69 73 74 28  nfoFromExprList(
2e5f0 50 61 72 73 65 2a 2c 20 45 78 70 72 4c 69 73 74  Parse*, ExprList
2e600 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 0a 23  *, int, int);..#
2e610 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42  ifdef SQLITE_DEB
2e620 55 47 0a 69 6e 74 20 73 71 6c 69 74 65 33 4b 65  UG.int sqlite3Ke
2e630 79 49 6e 66 6f 49 73 57 72 69 74 65 61 62 6c 65  yInfoIsWriteable
2e640 28 4b 65 79 49 6e 66 6f 2a 29 3b 0a 23 65 6e 64  (KeyInfo*);.#end
2e650 69 66 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 72  if.int sqlite3Cr
2e660 65 61 74 65 46 75 6e 63 28 73 71 6c 69 74 65 33  eateFunc(sqlite3
2e670 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a   *, const char *
2e680 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 76 6f 69 64  , int, int, void
2e690 20 2a 2c 0a 20 20 76 6f 69 64 20 28 2a 29 28 73   *,.  void (*)(s
2e6a0 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c  qlite3_context*,
2e6b0 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75  int,sqlite3_valu
2e6c0 65 20 2a 2a 29 2c 0a 20 20 76 6f 69 64 20 28 2a  e **),.  void (*
2e6d0 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78  )(sqlite3_contex
2e6e0 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76  t*,int,sqlite3_v
2e6f0 61 6c 75 65 20 2a 2a 29 2c 20 0a 20 20 76 6f 69  alue **), .  voi
2e700 64 20 28 2a 29 28 73 71 6c 69 74 65 33 5f 63 6f  d (*)(sqlite3_co
2e710 6e 74 65 78 74 2a 29 2c 0a 20 20 76 6f 69 64 20  ntext*),.  void 
2e720 28 2a 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74  (*)(sqlite3_cont
2e730 65 78 74 2a 29 2c 0a 20 20 76 6f 69 64 20 28 2a  ext*),.  void (*
2e740 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78  )(sqlite3_contex
2e750 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76  t*,int,sqlite3_v
2e760 61 6c 75 65 20 2a 2a 29 2c 20 0a 20 20 46 75 6e  alue **), .  Fun
2e770 63 44 65 73 74 72 75 63 74 6f 72 20 2a 70 44 65  cDestructor *pDe
2e780 73 74 72 75 63 74 6f 72 0a 29 3b 0a 76 6f 69 64  structor.);.void
2e790 20 73 71 6c 69 74 65 33 4e 6f 6f 70 44 65 73 74   sqlite3NoopDest
2e7a0 72 75 63 74 6f 72 28 76 6f 69 64 2a 29 3b 0a 76  ructor(void*);.v
2e7b0 6f 69 64 20 73 71 6c 69 74 65 33 4f 6f 6d 46 61  oid sqlite3OomFa
2e7c0 75 6c 74 28 73 71 6c 69 74 65 33 2a 29 3b 0a 76  ult(sqlite3*);.v
2e7d0 6f 69 64 20 73 71 6c 69 74 65 33 4f 6f 6d 43 6c  oid sqlite3OomCl
2e7e0 65 61 72 28 73 71 6c 69 74 65 33 2a 29 3b 0a 69  ear(sqlite3*);.i
2e7f0 6e 74 20 73 71 6c 69 74 65 33 41 70 69 45 78 69  nt sqlite3ApiExi
2e800 74 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 69  t(sqlite3 *db, i
2e810 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  nt);.int sqlite3
2e820 4f 70 65 6e 54 65 6d 70 44 61 74 61 62 61 73 65  OpenTempDatabase
2e830 28 50 61 72 73 65 20 2a 29 3b 0a 0a 76 6f 69 64  (Parse *);..void
2e840 20 73 71 6c 69 74 65 33 53 74 72 41 63 63 75 6d   sqlite3StrAccum
2e850 49 6e 69 74 28 53 74 72 41 63 63 75 6d 2a 2c 20  Init(StrAccum*, 
2e860 73 71 6c 69 74 65 33 2a 2c 20 63 68 61 72 2a 2c  sqlite3*, char*,
2e870 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 63 68 61 72   int, int);.char
2e880 20 2a 73 71 6c 69 74 65 33 53 74 72 41 63 63 75   *sqlite3StrAccu
2e890 6d 46 69 6e 69 73 68 28 53 74 72 41 63 63 75 6d  mFinish(StrAccum
2e8a0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
2e8b0 53 65 6c 65 63 74 44 65 73 74 49 6e 69 74 28 53  SelectDestInit(S
2e8c0 65 6c 65 63 74 44 65 73 74 2a 2c 69 6e 74 2c 69  electDest*,int,i
2e8d0 6e 74 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74  nt);.Expr *sqlit
2e8e0 65 33 43 72 65 61 74 65 43 6f 6c 75 6d 6e 45 78  e3CreateColumnEx
2e8f0 70 72 28 73 71 6c 69 74 65 33 20 2a 2c 20 53 72  pr(sqlite3 *, Sr
2e900 63 4c 69 73 74 20 2a 2c 20 69 6e 74 2c 20 69 6e  cList *, int, in
2e910 74 29 3b 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65  t);..void sqlite
2e920 33 42 61 63 6b 75 70 52 65 73 74 61 72 74 28 73  3BackupRestart(s
2e930 71 6c 69 74 65 33 5f 62 61 63 6b 75 70 20 2a 29  qlite3_backup *)
2e940 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42 61  ;.void sqlite3Ba
2e950 63 6b 75 70 55 70 64 61 74 65 28 73 71 6c 69 74  ckupUpdate(sqlit
2e960 65 33 5f 62 61 63 6b 75 70 20 2a 2c 20 50 67 6e  e3_backup *, Pgn
2e970 6f 2c 20 63 6f 6e 73 74 20 75 38 20 2a 29 3b 0a  o, const u8 *);.
2e980 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
2e990 4f 4d 49 54 5f 53 55 42 51 55 45 52 59 0a 69 6e  OMIT_SUBQUERY.in
2e9a0 74 20 73 71 6c 69 74 65 33 45 78 70 72 43 68 65  t sqlite3ExprChe
2e9b0 63 6b 49 4e 28 50 61 72 73 65 2a 2c 20 45 78 70  ckIN(Parse*, Exp
2e9c0 72 2a 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66  r*);.#else.# def
2e9d0 69 6e 65 20 73 71 6c 69 74 65 33 45 78 70 72 43  ine sqlite3ExprC
2e9e0 68 65 63 6b 49 4e 28 78 2c 79 29 20 53 51 4c 49  heckIN(x,y) SQLI
2e9f0 54 45 5f 4f 4b 0a 23 65 6e 64 69 66 0a 0a 23 69  TE_OK.#endif..#i
2ea00 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  fdef SQLITE_ENAB
2ea10 4c 45 5f 53 54 41 54 33 5f 4f 52 5f 53 54 41 54  LE_STAT3_OR_STAT
2ea20 34 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 6e  4.void sqlite3An
2ea30 61 6c 79 7a 65 46 75 6e 63 74 69 6f 6e 73 28 76  alyzeFunctions(v
2ea40 6f 69 64 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  oid);.int sqlite
2ea50 33 53 74 61 74 34 50 72 6f 62 65 53 65 74 56 61  3Stat4ProbeSetVa
2ea60 6c 75 65 28 0a 20 20 20 20 50 61 72 73 65 2a 2c  lue(.    Parse*,
2ea70 49 6e 64 65 78 2a 2c 55 6e 70 61 63 6b 65 64 52  Index*,UnpackedR
2ea80 65 63 6f 72 64 2a 2a 2c 45 78 70 72 2a 2c 69 6e  ecord**,Expr*,in
2ea90 74 2c 69 6e 74 2c 69 6e 74 2a 29 3b 0a 69 6e 74  t,int,int*);.int
2eaa0 20 73 71 6c 69 74 65 33 53 74 61 74 34 56 61 6c   sqlite3Stat4Val
2eab0 75 65 46 72 6f 6d 45 78 70 72 28 50 61 72 73 65  ueFromExpr(Parse
2eac0 2a 2c 20 45 78 70 72 2a 2c 20 75 38 2c 20 73 71  *, Expr*, u8, sq
2ead0 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2a 29 3b 0a  lite3_value**);.
2eae0 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74 61 74  void sqlite3Stat
2eaf0 34 50 72 6f 62 65 46 72 65 65 28 55 6e 70 61 63  4ProbeFree(Unpac
2eb00 6b 65 64 52 65 63 6f 72 64 2a 29 3b 0a 69 6e 74  kedRecord*);.int
2eb10 20 73 71 6c 69 74 65 33 53 74 61 74 34 43 6f 6c   sqlite3Stat4Col
2eb20 75 6d 6e 28 73 71 6c 69 74 65 33 2a 2c 20 63 6f  umn(sqlite3*, co
2eb30 6e 73 74 20 76 6f 69 64 2a 2c 20 69 6e 74 2c 20  nst void*, int, 
2eb40 69 6e 74 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c  int, sqlite3_val
2eb50 75 65 2a 2a 29 3b 0a 63 68 61 72 20 73 71 6c 69  ue**);.char sqli
2eb60 74 65 33 49 6e 64 65 78 43 6f 6c 75 6d 6e 41 66  te3IndexColumnAf
2eb70 66 69 6e 69 74 79 28 73 71 6c 69 74 65 33 2a 2c  finity(sqlite3*,
2eb80 20 49 6e 64 65 78 2a 2c 20 69 6e 74 29 3b 0a 23   Index*, int);.#
2eb90 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  endif../*.** The
2eba0 20 69 6e 74 65 72 66 61 63 65 20 74 6f 20 74 68   interface to th
2ebb0 65 20 4c 45 4d 4f 4e 2d 67 65 6e 65 72 61 74 65  e LEMON-generate
2ebc0 64 20 70 61 72 73 65 72 0a 2a 2f 0a 23 69 66 6e  d parser.*/.#ifn
2ebd0 64 65 66 20 53 51 4c 49 54 45 5f 41 4d 41 4c 47  def SQLITE_AMALG
2ebe0 41 4d 41 54 49 4f 4e 0a 20 20 76 6f 69 64 20 2a  AMATION.  void *
2ebf0 73 71 6c 69 74 65 33 50 61 72 73 65 72 41 6c 6c  sqlite3ParserAll
2ec00 6f 63 28 76 6f 69 64 2a 28 2a 29 28 75 36 34 29  oc(void*(*)(u64)
2ec10 2c 20 50 61 72 73 65 2a 29 3b 0a 20 20 76 6f 69  , Parse*);.  voi
2ec20 64 20 73 71 6c 69 74 65 33 50 61 72 73 65 72 46  d sqlite3ParserF
2ec30 72 65 65 28 76 6f 69 64 2a 2c 20 76 6f 69 64 28  ree(void*, void(
2ec40 2a 29 28 76 6f 69 64 2a 29 29 3b 0a 23 65 6e 64  *)(void*));.#end
2ec50 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50  if.void sqlite3P
2ec60 61 72 73 65 72 28 76 6f 69 64 2a 2c 20 69 6e 74  arser(void*, int
2ec70 2c 20 54 6f 6b 65 6e 29 3b 0a 69 6e 74 20 73 71  , Token);.int sq
2ec80 6c 69 74 65 33 50 61 72 73 65 72 46 61 6c 6c 62  lite3ParserFallb
2ec90 61 63 6b 28 69 6e 74 29 3b 0a 23 69 66 64 65 66  ack(int);.#ifdef
2eca0 20 59 59 54 52 41 43 4b 4d 41 58 53 54 41 43 4b   YYTRACKMAXSTACK
2ecb0 44 45 50 54 48 0a 20 20 69 6e 74 20 73 71 6c 69  DEPTH.  int sqli
2ecc0 74 65 33 50 61 72 73 65 72 53 74 61 63 6b 50 65  te3ParserStackPe
2ecd0 61 6b 28 76 6f 69 64 2a 29 3b 0a 23 65 6e 64 69  ak(void*);.#endi
2ece0 66 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41  f..void sqlite3A
2ecf0 75 74 6f 4c 6f 61 64 45 78 74 65 6e 73 69 6f 6e  utoLoadExtension
2ed00 73 28 73 71 6c 69 74 65 33 2a 29 3b 0a 23 69 66  s(sqlite3*);.#if
2ed10 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
2ed20 5f 4c 4f 41 44 5f 45 58 54 45 4e 53 49 4f 4e 0a  _LOAD_EXTENSION.
2ed30 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6c    void sqlite3Cl
2ed40 6f 73 65 45 78 74 65 6e 73 69 6f 6e 73 28 73 71  oseExtensions(sq
2ed50 6c 69 74 65 33 2a 29 3b 0a 23 65 6c 73 65 0a 23  lite3*);.#else.#
2ed60 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 43   define sqlite3C
2ed70 6c 6f 73 65 45 78 74 65 6e 73 69 6f 6e 73 28 58  loseExtensions(X
2ed80 29 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65  ).#endif..#ifnde
2ed90 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 48  f SQLITE_OMIT_SH
2eda0 41 52 45 44 5f 43 41 43 48 45 0a 20 20 76 6f 69  ARED_CACHE.  voi
2edb0 64 20 73 71 6c 69 74 65 33 54 61 62 6c 65 4c 6f  d sqlite3TableLo
2edc0 63 6b 28 50 61 72 73 65 20 2a 2c 20 69 6e 74 2c  ck(Parse *, int,
2edd0 20 69 6e 74 2c 20 75 38 2c 20 63 6f 6e 73 74 20   int, u8, const 
2ede0 63 68 61 72 20 2a 29 3b 0a 23 65 6c 73 65 0a 20  char *);.#else. 
2edf0 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33   #define sqlite3
2ee00 54 61 62 6c 65 4c 6f 63 6b 28 76 2c 77 2c 78 2c  TableLock(v,w,x,
2ee10 79 2c 7a 29 0a 23 65 6e 64 69 66 0a 0a 23 69 66  y,z).#endif..#if
2ee20 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a  def SQLITE_TEST.
2ee30 20 20 69 6e 74 20 73 71 6c 69 74 65 33 55 74 66    int sqlite3Utf
2ee40 38 54 6f 38 28 75 6e 73 69 67 6e 65 64 20 63 68  8To8(unsigned ch
2ee50 61 72 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69  ar*);.#endif..#i
2ee60 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  fdef SQLITE_OMIT
2ee70 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 23 20  _VIRTUALTABLE.# 
2ee80 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56   define sqlite3V
2ee90 74 61 62 43 6c 65 61 72 28 59 29 0a 23 20 20 64  tabClear(Y).#  d
2eea0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61  efine sqlite3Vta
2eeb0 62 53 79 6e 63 28 58 2c 59 29 20 53 51 4c 49 54  bSync(X,Y) SQLIT
2eec0 45 5f 4f 4b 0a 23 20 20 64 65 66 69 6e 65 20 73  E_OK.#  define s
2eed0 71 6c 69 74 65 33 56 74 61 62 52 6f 6c 6c 62 61  qlite3VtabRollba
2eee0 63 6b 28 58 29 0a 23 20 20 64 65 66 69 6e 65 20  ck(X).#  define 
2eef0 73 71 6c 69 74 65 33 56 74 61 62 43 6f 6d 6d 69  sqlite3VtabCommi
2ef00 74 28 58 29 0a 23 20 20 64 65 66 69 6e 65 20 73  t(X).#  define s
2ef10 71 6c 69 74 65 33 56 74 61 62 49 6e 53 79 6e 63  qlite3VtabInSync
2ef20 28 64 62 29 20 30 0a 23 20 20 64 65 66 69 6e 65  (db) 0.#  define
2ef30 20 73 71 6c 69 74 65 33 56 74 61 62 4c 6f 63 6b   sqlite3VtabLock
2ef40 28 58 29 0a 23 20 20 64 65 66 69 6e 65 20 73 71  (X).#  define sq
2ef50 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f 63 6b 28  lite3VtabUnlock(
2ef60 58 29 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c  X).#  define sql
2ef70 69 74 65 33 56 74 61 62 55 6e 6c 6f 63 6b 4c 69  ite3VtabUnlockLi
2ef80 73 74 28 58 29 0a 23 20 20 64 65 66 69 6e 65 20  st(X).#  define 
2ef90 73 71 6c 69 74 65 33 56 74 61 62 53 61 76 65 70  sqlite3VtabSavep
2efa0 6f 69 6e 74 28 58 2c 20 59 2c 20 5a 29 20 53 51  oint(X, Y, Z) SQ
2efb0 4c 49 54 45 5f 4f 4b 0a 23 20 20 64 65 66 69 6e  LITE_OK.#  defin
2efc0 65 20 73 71 6c 69 74 65 33 47 65 74 56 54 61 62  e sqlite3GetVTab
2efd0 6c 65 28 58 2c 59 29 20 20 28 28 56 54 61 62 6c  le(X,Y)  ((VTabl
2efe0 65 2a 29 30 29 0a 23 65 6c 73 65 0a 20 20 20 76  e*)0).#else.   v
2eff0 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62 43  oid sqlite3VtabC
2f000 6c 65 61 72 28 73 71 6c 69 74 65 33 20 2a 64 62  lear(sqlite3 *db
2f010 2c 20 54 61 62 6c 65 2a 29 3b 0a 20 20 20 76 6f  , Table*);.   vo
2f020 69 64 20 73 71 6c 69 74 65 33 56 74 61 62 44 69  id sqlite3VtabDi
2f030 73 63 6f 6e 6e 65 63 74 28 73 71 6c 69 74 65 33  sconnect(sqlite3
2f040 20 2a 64 62 2c 20 54 61 62 6c 65 20 2a 70 29 3b   *db, Table *p);
2f050 0a 20 20 20 69 6e 74 20 73 71 6c 69 74 65 33 56  .   int sqlite3V
2f060 74 61 62 53 79 6e 63 28 73 71 6c 69 74 65 33 20  tabSync(sqlite3 
2f070 2a 64 62 2c 20 56 64 62 65 2a 29 3b 0a 20 20 20  *db, Vdbe*);.   
2f080 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62 52  int sqlite3VtabR
2f090 6f 6c 6c 62 61 63 6b 28 73 71 6c 69 74 65 33 20  ollback(sqlite3 
2f0a0 2a 64 62 29 3b 0a 20 20 20 69 6e 74 20 73 71 6c  *db);.   int sql
2f0b0 69 74 65 33 56 74 61 62 43 6f 6d 6d 69 74 28 73  ite3VtabCommit(s
2f0c0 71 6c 69 74 65 33 20 2a 64 62 29 3b 0a 20 20 20  qlite3 *db);.   
2f0d0 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62  void sqlite3Vtab
2f0e0 4c 6f 63 6b 28 56 54 61 62 6c 65 20 2a 29 3b 0a  Lock(VTable *);.
2f0f0 20 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 56     void sqlite3V
2f100 74 61 62 55 6e 6c 6f 63 6b 28 56 54 61 62 6c 65  tabUnlock(VTable
2f110 20 2a 29 3b 0a 20 20 20 76 6f 69 64 20 73 71 6c   *);.   void sql
2f120 69 74 65 33 56 74 61 62 55 6e 6c 6f 63 6b 4c 69  ite3VtabUnlockLi
2f130 73 74 28 73 71 6c 69 74 65 33 2a 29 3b 0a 20 20  st(sqlite3*);.  
2f140 20 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62   int sqlite3Vtab
2f150 53 61 76 65 70 6f 69 6e 74 28 73 71 6c 69 74 65  Savepoint(sqlite
2f160 33 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  3 *, int, int);.
2f170 20 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 56     void sqlite3V
2f180 74 61 62 49 6d 70 6f 72 74 45 72 72 6d 73 67 28  tabImportErrmsg(
2f190 56 64 62 65 2a 2c 20 73 71 6c 69 74 65 33 5f 76  Vdbe*, sqlite3_v
2f1a0 74 61 62 2a 29 3b 0a 20 20 20 56 54 61 62 6c 65  tab*);.   VTable
2f1b0 20 2a 73 71 6c 69 74 65 33 47 65 74 56 54 61 62   *sqlite3GetVTab
2f1c0 6c 65 28 73 71 6c 69 74 65 33 2a 2c 20 54 61 62  le(sqlite3*, Tab
2f1d0 6c 65 2a 29 3b 0a 20 20 20 4d 6f 64 75 6c 65 20  le*);.   Module 
2f1e0 2a 73 71 6c 69 74 65 33 56 74 61 62 43 72 65 61  *sqlite3VtabCrea
2f1f0 74 65 4d 6f 64 75 6c 65 28 0a 20 20 20 20 20 73  teModule(.     s
2f200 71 6c 69 74 65 33 2a 2c 0a 20 20 20 20 20 63 6f  qlite3*,.     co
2f210 6e 73 74 20 63 68 61 72 2a 2c 0a 20 20 20 20 20  nst char*,.     
2f220 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d 6f  const sqlite3_mo
2f230 64 75 6c 65 2a 2c 0a 20 20 20 20 20 76 6f 69 64  dule*,.     void
2f240 2a 2c 0a 20 20 20 20 20 76 6f 69 64 28 2a 29 28  *,.     void(*)(
2f250 76 6f 69 64 2a 29 0a 20 20 20 29 3b 0a 23 20 20  void*).   );.#  
2f260 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74  define sqlite3Vt
2f270 61 62 49 6e 53 79 6e 63 28 64 62 29 20 28 28 64  abInSync(db) ((d
2f280 62 29 2d 3e 6e 56 54 72 61 6e 73 3e 30 20 26 26  b)->nVTrans>0 &&
2f290 20 28 64 62 29 2d 3e 61 56 54 72 61 6e 73 3d 3d   (db)->aVTrans==
2f2a0 30 29 0a 23 65 6e 64 69 66 0a 69 6e 74 20 73 71  0).#endif.int sq
2f2b0 6c 69 74 65 33 56 74 61 62 45 70 6f 6e 79 6d 6f  lite3VtabEponymo
2f2c0 75 73 54 61 62 6c 65 49 6e 69 74 28 50 61 72 73  usTableInit(Pars
2f2d0 65 2a 2c 4d 6f 64 75 6c 65 2a 29 3b 0a 76 6f 69  e*,Module*);.voi
2f2e0 64 20 73 71 6c 69 74 65 33 56 74 61 62 45 70 6f  d sqlite3VtabEpo
2f2f0 6e 79 6d 6f 75 73 54 61 62 6c 65 43 6c 65 61 72  nymousTableClear
2f300 28 73 71 6c 69 74 65 33 2a 2c 4d 6f 64 75 6c 65  (sqlite3*,Module
2f310 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
2f320 56 74 61 62 4d 61 6b 65 57 72 69 74 61 62 6c 65  VtabMakeWritable
2f330 28 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a 29 3b  (Parse*,Table*);
2f340 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61  .void sqlite3Vta
2f350 62 42 65 67 69 6e 50 61 72 73 65 28 50 61 72 73  bBeginParse(Pars
2f360 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65  e*, Token*, Toke
2f370 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 69 6e 74 29  n*, Token*, int)
2f380 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74  ;.void sqlite3Vt
2f390 61 62 46 69 6e 69 73 68 50 61 72 73 65 28 50 61  abFinishParse(Pa
2f3a0 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76  rse*, Token*);.v
2f3b0 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62 41  oid sqlite3VtabA
2f3c0 72 67 49 6e 69 74 28 50 61 72 73 65 2a 29 3b 0a  rgInit(Parse*);.
2f3d0 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62  void sqlite3Vtab
2f3e0 41 72 67 45 78 74 65 6e 64 28 50 61 72 73 65 2a  ArgExtend(Parse*
2f3f0 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73  , Token*);.int s
2f400 71 6c 69 74 65 33 56 74 61 62 43 61 6c 6c 43 72  qlite3VtabCallCr
2f410 65 61 74 65 28 73 71 6c 69 74 65 33 2a 2c 20 69  eate(sqlite3*, i
2f420 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  nt, const char *
2f430 2c 20 63 68 61 72 20 2a 2a 29 3b 0a 69 6e 74 20  , char **);.int 
2f440 73 71 6c 69 74 65 33 56 74 61 62 43 61 6c 6c 43  sqlite3VtabCallC
2f450 6f 6e 6e 65 63 74 28 50 61 72 73 65 2a 2c 20 54  onnect(Parse*, T
2f460 61 62 6c 65 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  able*);.int sqli
2f470 74 65 33 56 74 61 62 43 61 6c 6c 44 65 73 74 72  te3VtabCallDestr
2f480 6f 79 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74  oy(sqlite3*, int
2f490 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 29 3b  , const char *);
2f4a0 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62  .int sqlite3Vtab
2f4b0 42 65 67 69 6e 28 73 71 6c 69 74 65 33 20 2a 2c  Begin(sqlite3 *,
2f4c0 20 56 54 61 62 6c 65 20 2a 29 3b 0a 46 75 6e 63   VTable *);.Func
2f4d0 44 65 66 20 2a 73 71 6c 69 74 65 33 56 74 61 62  Def *sqlite3Vtab
2f4e0 4f 76 65 72 6c 6f 61 64 46 75 6e 63 74 69 6f 6e  OverloadFunction
2f4f0 28 73 71 6c 69 74 65 33 20 2a 2c 46 75 6e 63 44  (sqlite3 *,FuncD
2f500 65 66 2a 2c 20 69 6e 74 20 6e 41 72 67 2c 20 45  ef*, int nArg, E
2f510 78 70 72 2a 29 3b 0a 73 71 6c 69 74 65 33 5f 69  xpr*);.sqlite3_i
2f520 6e 74 36 34 20 73 71 6c 69 74 65 33 53 74 6d 74  nt64 sqlite3Stmt
2f530 43 75 72 72 65 6e 74 54 69 6d 65 28 73 71 6c 69  CurrentTime(sqli
2f540 74 65 33 5f 63 6f 6e 74 65 78 74 2a 29 3b 0a 69  te3_context*);.i
2f550 6e 74 20 73 71 6c 69 74 65 33 56 64 62 65 50 61  nt sqlite3VdbePa
2f560 72 61 6d 65 74 65 72 49 6e 64 65 78 28 56 64 62  rameterIndex(Vdb
2f570 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c  e*, const char*,
2f580 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74   int);.int sqlit
2f590 65 33 54 72 61 6e 73 66 65 72 42 69 6e 64 69 6e  e3TransferBindin
2f5a0 67 73 28 73 71 6c 69 74 65 33 5f 73 74 6d 74 20  gs(sqlite3_stmt 
2f5b0 2a 2c 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20  *, sqlite3_stmt 
2f5c0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
2f5d0 50 61 72 73 65 72 52 65 73 65 74 28 50 61 72 73  ParserReset(Pars
2f5e0 65 2a 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49  e*);.#ifdef SQLI
2f5f0 54 45 5f 45 4e 41 42 4c 45 5f 4e 4f 52 4d 41 4c  TE_ENABLE_NORMAL
2f600 49 5a 45 0a 63 68 61 72 20 2a 73 71 6c 69 74 65  IZE.char *sqlite
2f610 33 4e 6f 72 6d 61 6c 69 7a 65 28 56 64 62 65 2a  3Normalize(Vdbe*
2f620 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  , const char*);.
2f630 23 65 6e 64 69 66 0a 69 6e 74 20 73 71 6c 69 74  #endif.int sqlit
2f640 65 33 52 65 70 72 65 70 61 72 65 28 56 64 62 65  e3Reprepare(Vdbe
2f650 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
2f660 45 78 70 72 4c 69 73 74 43 68 65 63 6b 4c 65 6e  ExprListCheckLen
2f670 67 74 68 28 50 61 72 73 65 2a 2c 20 45 78 70 72  gth(Parse*, Expr
2f680 4c 69 73 74 2a 2c 20 63 6f 6e 73 74 20 63 68 61  List*, const cha
2f690 72 2a 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73 71  r*);.CollSeq *sq
2f6a0 6c 69 74 65 33 42 69 6e 61 72 79 43 6f 6d 70 61  lite3BinaryCompa
2f6b0 72 65 43 6f 6c 6c 53 65 71 28 50 61 72 73 65 20  reCollSeq(Parse 
2f6c0 2a 2c 20 45 78 70 72 20 2a 2c 20 45 78 70 72 20  *, Expr *, Expr 
2f6d0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 54  *);.int sqlite3T
2f6e0 65 6d 70 49 6e 4d 65 6d 6f 72 79 28 63 6f 6e 73  empInMemory(cons
2f6f0 74 20 73 71 6c 69 74 65 33 2a 29 3b 0a 63 6f 6e  t sqlite3*);.con
2f700 73 74 20 63 68 61 72 20 2a 73 71 6c 69 74 65 33  st char *sqlite3
2f710 4a 6f 75 72 6e 61 6c 4d 6f 64 65 6e 61 6d 65 28  JournalModename(
2f720 69 6e 74 29 3b 0a 23 69 66 6e 64 65 66 20 53 51  int);.#ifndef SQ
2f730 4c 49 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a 20 20  LITE_OMIT_WAL.  
2f740 69 6e 74 20 73 71 6c 69 74 65 33 43 68 65 63 6b  int sqlite3Check
2f750 70 6f 69 6e 74 28 73 71 6c 69 74 65 33 2a 2c 20  point(sqlite3*, 
2f760 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 2a 2c 20  int, int, int*, 
2f770 69 6e 74 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c  int*);.  int sql
2f780 69 74 65 33 57 61 6c 44 65 66 61 75 6c 74 48 6f  ite3WalDefaultHo
2f790 6f 6b 28 76 6f 69 64 2a 2c 73 71 6c 69 74 65 33  ok(void*,sqlite3
2f7a0 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 69 6e  *,const char*,in
2f7b0 74 29 3b 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64  t);.#endif.#ifnd
2f7c0 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43  ef SQLITE_OMIT_C
2f7d0 54 45 0a 20 20 57 69 74 68 20 2a 73 71 6c 69 74  TE.  With *sqlit
2f7e0 65 33 57 69 74 68 41 64 64 28 50 61 72 73 65 2a  e3WithAdd(Parse*
2f7f0 2c 57 69 74 68 2a 2c 54 6f 6b 65 6e 2a 2c 45 78  ,With*,Token*,Ex
2f800 70 72 4c 69 73 74 2a 2c 53 65 6c 65 63 74 2a 29  prList*,Select*)
2f810 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
2f820 57 69 74 68 44 65 6c 65 74 65 28 73 71 6c 69 74  WithDelete(sqlit
2f830 65 33 2a 2c 57 69 74 68 2a 29 3b 0a 20 20 76 6f  e3*,With*);.  vo
2f840 69 64 20 73 71 6c 69 74 65 33 57 69 74 68 50 75  id sqlite3WithPu
2f850 73 68 28 50 61 72 73 65 2a 2c 20 57 69 74 68 2a  sh(Parse*, With*
2f860 2c 20 75 38 29 3b 0a 23 65 6c 73 65 0a 23 64 65  , u8);.#else.#de
2f870 66 69 6e 65 20 73 71 6c 69 74 65 33 57 69 74 68  fine sqlite3With
2f880 50 75 73 68 28 78 2c 79 2c 7a 29 0a 23 64 65 66  Push(x,y,z).#def
2f890 69 6e 65 20 73 71 6c 69 74 65 33 57 69 74 68 44  ine sqlite3WithD
2f8a0 65 6c 65 74 65 28 78 2c 79 29 0a 23 65 6e 64 69  elete(x,y).#endi
2f8b0 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  f.#ifndef SQLITE
2f8c0 5f 4f 4d 49 54 5f 55 50 53 45 52 54 0a 20 20 55  _OMIT_UPSERT.  U
2f8d0 70 73 65 72 74 20 2a 73 71 6c 69 74 65 33 55 70  psert *sqlite3Up
2f8e0 73 65 72 74 4e 65 77 28 73 71 6c 69 74 65 33 2a  sertNew(sqlite3*
2f8f0 2c 45 78 70 72 4c 69 73 74 2a 2c 45 78 70 72 2a  ,ExprList*,Expr*
2f900 2c 45 78 70 72 4c 69 73 74 2a 2c 45 78 70 72 2a  ,ExprList*,Expr*
2f910 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
2f920 33 55 70 73 65 72 74 44 65 6c 65 74 65 28 73 71  3UpsertDelete(sq
2f930 6c 69 74 65 33 2a 2c 55 70 73 65 72 74 2a 29 3b  lite3*,Upsert*);
2f940 0a 20 20 55 70 73 65 72 74 20 2a 73 71 6c 69 74  .  Upsert *sqlit
2f950 65 33 55 70 73 65 72 74 44 75 70 28 73 71 6c 69  e3UpsertDup(sqli
2f960 74 65 33 2a 2c 55 70 73 65 72 74 2a 29 3b 0a 20  te3*,Upsert*);. 
2f970 20 69 6e 74 20 73 71 6c 69 74 65 33 55 70 73 65   int sqlite3Upse
2f980 72 74 41 6e 61 6c 79 7a 65 54 61 72 67 65 74 28  rtAnalyzeTarget(
2f990 50 61 72 73 65 2a 2c 53 72 63 4c 69 73 74 2a 2c  Parse*,SrcList*,
2f9a0 55 70 73 65 72 74 2a 29 3b 0a 20 20 76 6f 69 64  Upsert*);.  void
2f9b0 20 73 71 6c 69 74 65 33 55 70 73 65 72 74 44 6f   sqlite3UpsertDo
2f9c0 55 70 64 61 74 65 28 50 61 72 73 65 2a 2c 55 70  Update(Parse*,Up
2f9d0 73 65 72 74 2a 2c 54 61 62 6c 65 2a 2c 49 6e 64  sert*,Table*,Ind
2f9e0 65 78 2a 2c 69 6e 74 29 3b 0a 23 65 6c 73 65 0a  ex*,int);.#else.
2f9f0 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 55  #define sqlite3U
2fa00 70 73 65 72 74 4e 65 77 28 76 2c 77 2c 78 2c 79  psertNew(v,w,x,y
2fa10 2c 7a 29 20 28 28 55 70 73 65 72 74 2a 29 30 29  ,z) ((Upsert*)0)
2fa20 0a 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  .#define sqlite3
2fa30 55 70 73 65 72 74 44 65 6c 65 74 65 28 78 2c 79  UpsertDelete(x,y
2fa40 29 0a 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65  ).#define sqlite
2fa50 33 55 70 73 65 72 74 44 75 70 28 78 2c 79 29 20  3UpsertDup(x,y) 
2fa60 20 20 20 20 20 20 28 28 55 70 73 65 72 74 2a 29        ((Upsert*)
2fa70 30 29 0a 23 65 6e 64 69 66 0a 0a 0a 2f 2a 20 44  0).#endif.../* D
2fa80 65 63 6c 61 72 61 74 69 6f 6e 73 20 66 6f 72 20  eclarations for 
2fa90 66 75 6e 63 74 69 6f 6e 73 20 69 6e 20 66 6b 65  functions in fke
2faa0 79 2e 63 2e 20 41 6c 6c 20 6f 66 20 74 68 65 73  y.c. All of thes
2fab0 65 20 61 72 65 20 72 65 70 6c 61 63 65 64 20 62  e are replaced b
2fac0 79 0a 2a 2a 20 6e 6f 2d 6f 70 20 6d 61 63 72 6f  y.** no-op macro
2fad0 73 20 69 66 20 4f 4d 49 54 5f 46 4f 52 45 49 47  s if OMIT_FOREIG
2fae0 4e 5f 4b 45 59 20 69 73 20 64 65 66 69 6e 65 64  N_KEY is defined
2faf0 2e 20 49 6e 20 74 68 69 73 20 63 61 73 65 20 6e  . In this case n
2fb00 6f 20 66 6f 72 65 69 67 6e 0a 2a 2a 20 6b 65 79  o foreign.** key
2fb10 20 66 75 6e 63 74 69 6f 6e 61 6c 69 74 79 20 69   functionality i
2fb20 73 20 61 76 61 69 6c 61 62 6c 65 2e 20 49 66 20  s available. If 
2fb30 4f 4d 49 54 5f 54 52 49 47 47 45 52 20 69 73 20  OMIT_TRIGGER is 
2fb40 64 65 66 69 6e 65 64 20 62 75 74 0a 2a 2a 20 4f  defined but.** O
2fb50 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 20  MIT_FOREIGN_KEY 
2fb60 69 73 20 6e 6f 74 2c 20 6f 6e 6c 79 20 73 6f 6d  is not, only som
2fb70 65 20 6f 66 20 74 68 65 20 66 75 6e 63 74 69 6f  e of the functio
2fb80 6e 73 20 61 72 65 20 6e 6f 2d 6f 70 65 64 2e 20  ns are no-oped. 
2fb90 49 6e 0a 2a 2a 20 74 68 69 73 20 63 61 73 65 20  In.** this case 
2fba0 66 6f 72 65 69 67 6e 20 6b 65 79 73 20 61 72 65  foreign keys are
2fbb0 20 70 61 72 73 65 64 2c 20 62 75 74 20 6e 6f 20   parsed, but no 
2fbc0 6f 74 68 65 72 20 66 75 6e 63 74 69 6f 6e 61 6c  other functional
2fbd0 69 74 79 20 69 73 0a 2a 2a 20 70 72 6f 76 69 64  ity is.** provid
2fbe0 65 64 20 28 65 6e 66 6f 72 63 65 6d 65 6e 74 20  ed (enforcement 
2fbf0 6f 66 20 46 4b 20 63 6f 6e 73 74 72 61 69 6e 74  of FK constraint
2fc00 73 20 72 65 71 75 69 72 65 73 20 74 68 65 20 74  s requires the t
2fc10 72 69 67 67 65 72 73 20 73 75 62 2d 73 79 73 74  riggers sub-syst
2fc20 65 6d 29 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66  em)..*/.#if !def
2fc30 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54  ined(SQLITE_OMIT
2fc40 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 29 20 26 26  _FOREIGN_KEY) &&
2fc50 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
2fc60 5f 4f 4d 49 54 5f 54 52 49 47 47 45 52 29 0a 20  _OMIT_TRIGGER). 
2fc70 20 76 6f 69 64 20 73 71 6c 69 74 65 33 46 6b 43   void sqlite3FkC
2fc80 68 65 63 6b 28 50 61 72 73 65 2a 2c 20 54 61 62  heck(Parse*, Tab
2fc90 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69  le*, int, int, i
2fca0 6e 74 2a 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69  nt*, int);.  voi
2fcb0 64 20 73 71 6c 69 74 65 33 46 6b 44 72 6f 70 54  d sqlite3FkDropT
2fcc0 61 62 6c 65 28 50 61 72 73 65 2a 2c 20 53 72 63  able(Parse*, Src
2fcd0 4c 69 73 74 20 2a 2c 20 54 61 62 6c 65 2a 29 3b  List *, Table*);
2fce0 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 46  .  void sqlite3F
2fcf0 6b 41 63 74 69 6f 6e 73 28 50 61 72 73 65 2a 2c  kActions(Parse*,
2fd00 20 54 61 62 6c 65 2a 2c 20 45 78 70 72 4c 69 73   Table*, ExprLis
2fd10 74 2a 2c 20 69 6e 74 2c 20 69 6e 74 2a 2c 20 69  t*, int, int*, i
2fd20 6e 74 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74  nt);.  int sqlit
2fd30 65 33 46 6b 52 65 71 75 69 72 65 64 28 50 61 72  e3FkRequired(Par
2fd40 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74  se*, Table*, int
2fd50 2a 2c 20 69 6e 74 29 3b 0a 20 20 75 33 32 20 73  *, int);.  u32 s
2fd60 71 6c 69 74 65 33 46 6b 4f 6c 64 6d 61 73 6b 28  qlite3FkOldmask(
2fd70 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 29 3b  Parse*, Table*);
2fd80 0a 20 20 46 4b 65 79 20 2a 73 71 6c 69 74 65 33  .  FKey *sqlite3
2fd90 46 6b 52 65 66 65 72 65 6e 63 65 73 28 54 61 62  FkReferences(Tab
2fda0 6c 65 20 2a 29 3b 0a 23 65 6c 73 65 0a 20 20 23  le *);.#else.  #
2fdb0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46 6b  define sqlite3Fk
2fdc0 41 63 74 69 6f 6e 73 28 61 2c 62 2c 63 2c 64 2c  Actions(a,b,c,d,
2fdd0 65 2c 66 29 0a 20 20 23 64 65 66 69 6e 65 20 73  e,f).  #define s
2fde0 71 6c 69 74 65 33 46 6b 43 68 65 63 6b 28 61 2c  qlite3FkCheck(a,
2fdf0 62 2c 63 2c 64 2c 65 2c 66 29 0a 20 20 23 64 65  b,c,d,e,f).  #de
2fe00 66 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 44 72  fine sqlite3FkDr
2fe10 6f 70 54 61 62 6c 65 28 61 2c 62 2c 63 29 0a 20  opTable(a,b,c). 
2fe20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33   #define sqlite3
2fe30 46 6b 4f 6c 64 6d 61 73 6b 28 61 2c 62 29 20 20  FkOldmask(a,b)  
2fe40 20 20 20 20 20 20 20 30 0a 20 20 23 64 65 66 69         0.  #defi
2fe50 6e 65 20 73 71 6c 69 74 65 33 46 6b 52 65 71 75  ne sqlite3FkRequ
2fe60 69 72 65 64 28 61 2c 62 2c 63 2c 64 29 20 20 20  ired(a,b,c,d)   
2fe70 20 30 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c   0.  #define sql
2fe80 69 74 65 33 46 6b 52 65 66 65 72 65 6e 63 65 73  ite3FkReferences
2fe90 28 61 29 20 20 20 20 20 20 20 20 30 0a 23 65 6e  (a)        0.#en
2fea0 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  dif.#ifndef SQLI
2feb0 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f  TE_OMIT_FOREIGN_
2fec0 4b 45 59 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  KEY.  void sqlit
2fed0 65 33 46 6b 44 65 6c 65 74 65 28 73 71 6c 69 74  e3FkDelete(sqlit
2fee0 65 33 20 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a 20  e3 *, Table*);. 
2fef0 20 69 6e 74 20 73 71 6c 69 74 65 33 46 6b 4c 6f   int sqlite3FkLo
2ff00 63 61 74 65 49 6e 64 65 78 28 50 61 72 73 65 2a  cateIndex(Parse*
2ff10 2c 54 61 62 6c 65 2a 2c 46 4b 65 79 2a 2c 49 6e  ,Table*,FKey*,In
2ff20 64 65 78 2a 2a 2c 69 6e 74 2a 2a 29 3b 0a 23 65  dex**,int**);.#e
2ff30 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20 73 71  lse.  #define sq
2ff40 6c 69 74 65 33 46 6b 44 65 6c 65 74 65 28 61 2c  lite3FkDelete(a,
2ff50 62 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c  b).  #define sql
2ff60 69 74 65 33 46 6b 4c 6f 63 61 74 65 49 6e 64 65  ite3FkLocateInde
2ff70 78 28 61 2c 62 2c 63 2c 64 2c 65 29 0a 23 65 6e  x(a,b,c,d,e).#en
2ff80 64 69 66 0a 0a 0a 2f 2a 0a 2a 2a 20 41 76 61 69  dif.../*.** Avai
2ff90 6c 61 62 6c 65 20 66 61 75 6c 74 20 69 6e 6a 65  lable fault inje
2ffa0 63 74 6f 72 73 2e 20 20 53 68 6f 75 6c 64 20 62  ctors.  Should b
2ffb0 65 20 6e 75 6d 62 65 72 65 64 20 62 65 67 69 6e  e numbered begin
2ffc0 6e 69 6e 67 20 77 69 74 68 20 30 2e 0a 2a 2f 0a  ning with 0..*/.
2ffd0 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46  #define SQLITE_F
2ffe0 41 55 4c 54 49 4e 4a 45 43 54 4f 52 5f 4d 41 4c  AULTINJECTOR_MAL
2fff0 4c 4f 43 20 20 20 20 20 30 0a 23 64 65 66 69 6e  LOC     0.#defin
30000 65 20 53 51 4c 49 54 45 5f 46 41 55 4c 54 49 4e  e SQLITE_FAULTIN
30010 4a 45 43 54 4f 52 5f 43 4f 55 4e 54 20 20 20 20  JECTOR_COUNT    
30020 20 20 31 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 69    1../*.** The i
30030 6e 74 65 72 66 61 63 65 20 74 6f 20 74 68 65 20  nterface to the 
30040 63 6f 64 65 20 69 6e 20 66 61 75 6c 74 2e 63 20  code in fault.c 
30050 75 73 65 64 20 66 6f 72 20 69 64 65 6e 74 69 66  used for identif
30060 79 69 6e 67 20 22 62 65 6e 69 67 6e 22 0a 2a 2a  ying "benign".**
30070 20 6d 61 6c 6c 6f 63 20 66 61 69 6c 75 72 65 73   malloc failures
30080 2e 20 54 68 69 73 20 69 73 20 6f 6e 6c 79 20 70  . This is only p
30090 72 65 73 65 6e 74 20 69 66 20 53 51 4c 49 54 45  resent if SQLITE
300a0 5f 55 4e 54 45 53 54 41 42 4c 45 0a 2a 2a 20 69  _UNTESTABLE.** i
300b0 73 20 6e 6f 74 20 64 65 66 69 6e 65 64 2e 0a 2a  s not defined..*
300c0 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  /.#ifndef SQLITE
300d0 5f 55 4e 54 45 53 54 41 42 4c 45 0a 20 20 76 6f  _UNTESTABLE.  vo
300e0 69 64 20 73 71 6c 69 74 65 33 42 65 67 69 6e 42  id sqlite3BeginB
300f0 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28 76 6f 69 64  enignMalloc(void
30100 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
30110 33 45 6e 64 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63  3EndBenignMalloc
30120 28 76 6f 69 64 29 3b 0a 23 65 6c 73 65 0a 20 20  (void);.#else.  
30130 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 42  #define sqlite3B
30140 65 67 69 6e 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63  eginBenignMalloc
30150 28 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c  ().  #define sql
30160 69 74 65 33 45 6e 64 42 65 6e 69 67 6e 4d 61 6c  ite3EndBenignMal
30170 6c 6f 63 28 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a  loc().#endif../*
30180 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 72 65 74 75  .** Allowed retu
30190 72 6e 20 76 61 6c 75 65 73 20 66 72 6f 6d 20 73  rn values from s
301a0 71 6c 69 74 65 33 46 69 6e 64 49 6e 49 6e 64 65  qlite3FindInInde
301b0 78 28 29 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 49  x().*/.#define I
301c0 4e 5f 49 4e 44 45 58 5f 52 4f 57 49 44 20 20 20  N_INDEX_ROWID   
301d0 20 20 20 20 20 31 20 20 20 2f 2a 20 53 65 61 72       1   /* Sear
301e0 63 68 20 74 68 65 20 72 6f 77 69 64 20 6f 66 20  ch the rowid of 
301f0 74 68 65 20 74 61 62 6c 65 20 2a 2f 0a 23 64 65  the table */.#de
30200 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 45 50  fine IN_INDEX_EP
30210 48 20 20 20 20 20 20 20 20 20 20 32 20 20 20 2f  H          2   /
30220 2a 20 53 65 61 72 63 68 20 61 6e 20 65 70 68 65  * Search an ephe
30230 6d 65 72 61 6c 20 62 2d 74 72 65 65 20 2a 2f 0a  meral b-tree */.
30240 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58  #define IN_INDEX
30250 5f 49 4e 44 45 58 5f 41 53 43 20 20 20 20 33 20  _INDEX_ASC    3 
30260 20 20 2f 2a 20 45 78 69 73 74 69 6e 67 20 69 6e    /* Existing in
30270 64 65 78 20 41 53 43 45 4e 44 49 4e 47 20 2a 2f  dex ASCENDING */
30280 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45  .#define IN_INDE
30290 58 5f 49 4e 44 45 58 5f 44 45 53 43 20 20 20 34  X_INDEX_DESC   4
302a0 20 20 20 2f 2a 20 45 78 69 73 74 69 6e 67 20 69     /* Existing i
302b0 6e 64 65 78 20 44 45 53 43 45 4e 44 49 4e 47 20  ndex DESCENDING 
302c0 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e  */.#define IN_IN
302d0 44 45 58 5f 4e 4f 4f 50 20 20 20 20 20 20 20 20  DEX_NOOP        
302e0 20 35 20 20 20 2f 2a 20 4e 6f 20 74 61 62 6c 65   5   /* No table
302f0 20 61 76 61 69 6c 61 62 6c 65 2e 20 55 73 65 20   available. Use 
30300 63 6f 6d 70 61 72 69 73 6f 6e 73 20 2a 2f 0a 2f  comparisons */./
30310 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 66 6c 61  *.** Allowed fla
30320 67 73 20 66 6f 72 20 74 68 65 20 33 72 64 20 70  gs for the 3rd p
30330 61 72 61 6d 65 74 65 72 20 74 6f 20 73 71 6c 69  arameter to sqli
30340 74 65 33 46 69 6e 64 49 6e 49 6e 64 65 78 28 29  te3FindInIndex()
30350 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f  ..*/.#define IN_
30360 49 4e 44 45 58 5f 4e 4f 4f 50 5f 4f 4b 20 20 20  INDEX_NOOP_OK   
30370 20 20 30 78 30 30 30 31 20 20 2f 2a 20 4f 4b 20    0x0001  /* OK 
30380 74 6f 20 72 65 74 75 72 6e 20 49 4e 5f 49 4e 44  to return IN_IND
30390 45 58 5f 4e 4f 4f 50 20 2a 2f 0a 23 64 65 66 69  EX_NOOP */.#defi
303a0 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 4d 45 4d 42  ne IN_INDEX_MEMB
303b0 45 52 53 48 49 50 20 20 30 78 30 30 30 32 20 20  ERSHIP  0x0002  
303c0 2f 2a 20 49 4e 20 6f 70 65 72 61 74 6f 72 20 75  /* IN operator u
303d0 73 65 64 20 66 6f 72 20 6d 65 6d 62 65 72 73 68  sed for membersh
303e0 69 70 20 74 65 73 74 20 2a 2f 0a 23 64 65 66 69  ip test */.#defi
303f0 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 4c 4f 4f 50  ne IN_INDEX_LOOP
30400 20 20 20 20 20 20 20 20 30 78 30 30 30 34 20 20          0x0004  
30410 2f 2a 20 49 4e 20 6f 70 65 72 61 74 6f 72 20 75  /* IN operator u
30420 73 65 64 20 61 73 20 61 20 6c 6f 6f 70 20 2a 2f  sed as a loop */
30430 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69 6e 64  .int sqlite3Find
30440 49 6e 49 6e 64 65 78 28 50 61 72 73 65 20 2a 2c  InIndex(Parse *,
30450 20 45 78 70 72 20 2a 2c 20 75 33 32 2c 20 69 6e   Expr *, u32, in
30460 74 2a 2c 20 69 6e 74 2a 2c 20 69 6e 74 2a 29 3b  t*, int*, int*);
30470 0a 0a 69 6e 74 20 73 71 6c 69 74 65 33 4a 6f 75  ..int sqlite3Jou
30480 72 6e 61 6c 4f 70 65 6e 28 73 71 6c 69 74 65 33  rnalOpen(sqlite3
30490 5f 76 66 73 20 2a 2c 20 63 6f 6e 73 74 20 63 68  _vfs *, const ch
304a0 61 72 20 2a 2c 20 73 71 6c 69 74 65 33 5f 66 69  ar *, sqlite3_fi
304b0 6c 65 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b  le *, int, int);
304c0 0a 69 6e 74 20 73 71 6c 69 74 65 33 4a 6f 75 72  .int sqlite3Jour
304d0 6e 61 6c 53 69 7a 65 28 73 71 6c 69 74 65 33 5f  nalSize(sqlite3_
304e0 76 66 73 20 2a 29 3b 0a 23 69 66 20 64 65 66 69  vfs *);.#if defi
304f0 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c  ned(SQLITE_ENABL
30500 45 5f 41 54 4f 4d 49 43 5f 57 52 49 54 45 29 20  E_ATOMIC_WRITE) 
30510 5c 0a 20 7c 7c 20 64 65 66 69 6e 65 64 28 53 51  \. || defined(SQ
30520 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 42 41 54 43  LITE_ENABLE_BATC
30530 48 5f 41 54 4f 4d 49 43 5f 57 52 49 54 45 29 0a  H_ATOMIC_WRITE).
30540 20 20 69 6e 74 20 73 71 6c 69 74 65 33 4a 6f 75    int sqlite3Jou
30550 72 6e 61 6c 43 72 65 61 74 65 28 73 71 6c 69 74  rnalCreate(sqlit
30560 65 33 5f 66 69 6c 65 20 2a 29 3b 0a 23 65 6e 64  e3_file *);.#end
30570 69 66 0a 0a 69 6e 74 20 73 71 6c 69 74 65 33 4a  if..int sqlite3J
30580 6f 75 72 6e 61 6c 49 73 49 6e 4d 65 6d 6f 72 79  ournalIsInMemory
30590 28 73 71 6c 69 74 65 33 5f 66 69 6c 65 20 2a 70  (sqlite3_file *p
305a0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4d  );.void sqlite3M
305b0 65 6d 4a 6f 75 72 6e 61 6c 4f 70 65 6e 28 73 71  emJournalOpen(sq
305c0 6c 69 74 65 33 5f 66 69 6c 65 20 2a 29 3b 0a 0a  lite3_file *);..
305d0 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
305e0 53 65 74 48 65 69 67 68 74 41 6e 64 46 6c 61 67  SetHeightAndFlag
305f0 73 28 50 61 72 73 65 20 2a 70 50 61 72 73 65 2c  s(Parse *pParse,
30600 20 45 78 70 72 20 2a 70 29 3b 0a 23 69 66 20 53   Expr *p);.#if S
30610 51 4c 49 54 45 5f 4d 41 58 5f 45 58 50 52 5f 44  QLITE_MAX_EXPR_D
30620 45 50 54 48 3e 30 0a 20 20 69 6e 74 20 73 71 6c  EPTH>0.  int sql
30630 69 74 65 33 53 65 6c 65 63 74 45 78 70 72 48 65  ite3SelectExprHe
30640 69 67 68 74 28 53 65 6c 65 63 74 20 2a 29 3b 0a  ight(Select *);.
30650 20 20 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70    int sqlite3Exp
30660 72 43 68 65 63 6b 48 65 69 67 68 74 28 50 61 72  rCheckHeight(Par
30670 73 65 2a 2c 20 69 6e 74 29 3b 0a 23 65 6c 73 65  se*, int);.#else
30680 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74  .  #define sqlit
30690 65 33 53 65 6c 65 63 74 45 78 70 72 48 65 69 67  e3SelectExprHeig
306a0 68 74 28 78 29 20 30 0a 20 20 23 64 65 66 69 6e  ht(x) 0.  #defin
306b0 65 20 73 71 6c 69 74 65 33 45 78 70 72 43 68 65  e sqlite3ExprChe
306c0 63 6b 48 65 69 67 68 74 28 78 2c 79 29 0a 23 65  ckHeight(x,y).#e
306d0 6e 64 69 66 0a 0a 75 33 32 20 73 71 6c 69 74 65  ndif..u32 sqlite
306e0 33 47 65 74 34 62 79 74 65 28 63 6f 6e 73 74 20  3Get4byte(const 
306f0 75 38 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  u8*);.void sqlit
30700 65 33 50 75 74 34 62 79 74 65 28 75 38 2a 2c 20  e3Put4byte(u8*, 
30710 75 33 32 29 3b 0a 0a 23 69 66 64 65 66 20 53 51  u32);..#ifdef SQ
30720 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 55 4e 4c 4f  LITE_ENABLE_UNLO
30730 43 4b 5f 4e 4f 54 49 46 59 0a 20 20 76 6f 69 64  CK_NOTIFY.  void
30740 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69   sqlite3Connecti
30750 6f 6e 42 6c 6f 63 6b 65 64 28 73 71 6c 69 74 65  onBlocked(sqlite
30760 33 20 2a 2c 20 73 71 6c 69 74 65 33 20 2a 29 3b  3 *, sqlite3 *);
30770 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 43  .  void sqlite3C
30780 6f 6e 6e 65 63 74 69 6f 6e 55 6e 6c 6f 63 6b 65  onnectionUnlocke
30790 64 28 73 71 6c 69 74 65 33 20 2a 64 62 29 3b 0a  d(sqlite3 *db);.
307a0 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f    void sqlite3Co
307b0 6e 6e 65 63 74 69 6f 6e 43 6c 6f 73 65 64 28 73  nnectionClosed(s
307c0 71 6c 69 74 65 33 20 2a 64 62 29 3b 0a 23 65 6c  qlite3 *db);.#el
307d0 73 65 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c  se.  #define sql
307e0 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 42 6c  ite3ConnectionBl
307f0 6f 63 6b 65 64 28 78 2c 79 29 0a 20 20 23 64 65  ocked(x,y).  #de
30800 66 69 6e 65 20 73 71 6c 69 74 65 33 43 6f 6e 6e  fine sqlite3Conn
30810 65 63 74 69 6f 6e 55 6e 6c 6f 63 6b 65 64 28 78  ectionUnlocked(x
30820 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69  ).  #define sqli
30830 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 43 6c 6f  te3ConnectionClo
30840 73 65 64 28 78 29 0a 23 65 6e 64 69 66 0a 0a 23  sed(x).#endif..#
30850 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42  ifdef SQLITE_DEB
30860 55 47 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  UG.  void sqlite
30870 33 50 61 72 73 65 72 54 72 61 63 65 28 46 49 4c  3ParserTrace(FIL
30880 45 2a 2c 20 63 68 61 72 20 2a 29 3b 0a 23 65 6e  E*, char *);.#en
30890 64 69 66 0a 23 69 66 20 64 65 66 69 6e 65 64 28  dif.#if defined(
308a0 59 59 43 4f 56 45 52 41 47 45 29 0a 20 20 69 6e  YYCOVERAGE).  in
308b0 74 20 73 71 6c 69 74 65 33 50 61 72 73 65 72 43  t sqlite3ParserC
308c0 6f 76 65 72 61 67 65 28 46 49 4c 45 2a 29 3b 0a  overage(FILE*);.
308d0 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 66  #endif../*.** If
308e0 20 74 68 65 20 53 51 4c 49 54 45 5f 45 4e 41 42   the SQLITE_ENAB
308f0 4c 45 20 49 4f 54 52 41 43 45 20 65 78 69 73 74  LE IOTRACE exist
30900 73 20 74 68 65 6e 20 74 68 65 20 67 6c 6f 62 61  s then the globa
30910 6c 20 76 61 72 69 61 62 6c 65 0a 2a 2a 20 73 71  l variable.** sq
30920 6c 69 74 65 33 49 6f 54 72 61 63 65 20 69 73 20  lite3IoTrace is 
30930 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 70  a pointer to a p
30940 72 69 6e 74 66 2d 6c 69 6b 65 20 72 6f 75 74 69  rintf-like routi
30950 6e 65 20 75 73 65 64 20 74 6f 0a 2a 2a 20 70 72  ne used to.** pr
30960 69 6e 74 20 49 2f 4f 20 74 72 61 63 69 6e 67 20  int I/O tracing 
30970 6d 65 73 73 61 67 65 73 2e 0a 2a 2f 0a 23 69 66  messages..*/.#if
30980 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  def SQLITE_ENABL
30990 45 5f 49 4f 54 52 41 43 45 0a 23 20 64 65 66 69  E_IOTRACE.# defi
309a0 6e 65 20 49 4f 54 52 41 43 45 28 41 29 20 20 69  ne IOTRACE(A)  i
309b0 66 28 20 73 71 6c 69 74 65 33 49 6f 54 72 61 63  f( sqlite3IoTrac
309c0 65 20 29 7b 20 73 71 6c 69 74 65 33 49 6f 54 72  e ){ sqlite3IoTr
309d0 61 63 65 20 41 3b 20 7d 0a 20 20 76 6f 69 64 20  ace A; }.  void 
309e0 73 71 6c 69 74 65 33 56 64 62 65 49 4f 54 72 61  sqlite3VdbeIOTra
309f0 63 65 53 71 6c 28 56 64 62 65 2a 29 3b 0a 53 51  ceSql(Vdbe*);.SQ
30a00 4c 49 54 45 5f 41 50 49 20 53 51 4c 49 54 45 5f  LITE_API SQLITE_
30a10 45 58 54 45 52 4e 20 76 6f 69 64 20 28 53 51 4c  EXTERN void (SQL
30a20 49 54 45 5f 43 44 45 43 4c 20 2a 73 71 6c 69 74  ITE_CDECL *sqlit
30a30 65 33 49 6f 54 72 61 63 65 29 28 63 6f 6e 73 74  e3IoTrace)(const
30a40 20 63 68 61 72 2a 2c 2e 2e 2e 29 3b 0a 23 65 6c   char*,...);.#el
30a50 73 65 0a 23 20 64 65 66 69 6e 65 20 49 4f 54 52  se.# define IOTR
30a60 41 43 45 28 41 29 0a 23 20 64 65 66 69 6e 65 20  ACE(A).# define 
30a70 73 71 6c 69 74 65 33 56 64 62 65 49 4f 54 72 61  sqlite3VdbeIOTra
30a80 63 65 53 71 6c 28 58 29 0a 23 65 6e 64 69 66 0a  ceSql(X).#endif.
30a90 0a 2f 2a 0a 2a 2a 20 54 68 65 73 65 20 72 6f 75  ./*.** These rou
30aa0 74 69 6e 65 73 20 61 72 65 20 61 76 61 69 6c 61  tines are availa
30ab0 62 6c 65 20 66 6f 72 20 74 68 65 20 6d 65 6d 32  ble for the mem2
30ac0 2e 63 20 64 65 62 75 67 67 69 6e 67 20 6d 65 6d  .c debugging mem
30ad0 6f 72 79 20 61 6c 6c 6f 63 61 74 6f 72 0a 2a 2a  ory allocator.**
30ae0 20 6f 6e 6c 79 2e 20 20 54 68 65 79 20 61 72 65   only.  They are
30af0 20 75 73 65 64 20 74 6f 20 76 65 72 69 66 79 20   used to verify 
30b00 74 68 61 74 20 64 69 66 66 65 72 65 6e 74 20 22  that different "
30b10 74 79 70 65 73 22 20 6f 66 20 6d 65 6d 6f 72 79  types" of memory
30b20 0a 2a 2a 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20  .** allocations 
30b30 61 72 65 20 70 72 6f 70 65 72 6c 79 20 74 72 61  are properly tra
30b40 63 6b 65 64 20 62 79 20 74 68 65 20 73 79 73 74  cked by the syst
30b50 65 6d 2e 0a 2a 2a 0a 2a 2a 20 73 71 6c 69 74 65  em..**.** sqlite
30b60 33 4d 65 6d 64 65 62 75 67 53 65 74 54 79 70 65  3MemdebugSetType
30b70 28 29 20 73 65 74 73 20 74 68 65 20 22 74 79 70  () sets the "typ
30b80 65 22 20 6f 66 20 61 6e 20 61 6c 6c 6f 63 61 74  e" of an allocat
30b90 69 6f 6e 20 74 6f 20 6f 6e 65 20 6f 66 0a 2a 2a  ion to one of.**
30ba0 20 74 68 65 20 4d 45 4d 54 59 50 45 5f 2a 20 6d   the MEMTYPE_* m
30bb0 61 63 72 6f 73 20 64 65 66 69 6e 65 64 20 62 65  acros defined be
30bc0 6c 6f 77 2e 20 20 54 68 65 20 74 79 70 65 20 6d  low.  The type m
30bd0 75 73 74 20 62 65 20 61 20 62 69 74 6d 61 73 6b  ust be a bitmask
30be0 20 77 69 74 68 0a 2a 2a 20 61 20 73 69 6e 67 6c   with.** a singl
30bf0 65 20 62 69 74 20 73 65 74 2e 0a 2a 2a 0a 2a 2a  e bit set..**.**
30c00 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67   sqlite3Memdebug
30c10 48 61 73 54 79 70 65 28 29 20 72 65 74 75 72 6e  HasType() return
30c20 73 20 74 72 75 65 20 69 66 20 61 6e 79 20 6f 66  s true if any of
30c30 20 74 68 65 20 62 69 74 73 20 69 6e 20 69 74 73   the bits in its
30c40 20 73 65 63 6f 6e 64 0a 2a 2a 20 61 72 67 75 6d   second.** argum
30c50 65 6e 74 20 6d 61 74 63 68 20 74 68 65 20 74 79  ent match the ty
30c60 70 65 20 73 65 74 20 62 79 20 74 68 65 20 70 72  pe set by the pr
30c70 65 76 69 6f 75 73 20 73 71 6c 69 74 65 33 4d 65  evious sqlite3Me
30c80 6d 64 65 62 75 67 53 65 74 54 79 70 65 28 29 2e  mdebugSetType().
30c90 0a 2a 2a 20 73 71 6c 69 74 65 33 4d 65 6d 64 65  .** sqlite3Memde
30ca0 62 75 67 48 61 73 54 79 70 65 28 29 20 69 73 20  bugHasType() is 
30cb0 69 6e 74 65 6e 64 65 64 20 66 6f 72 20 75 73 65  intended for use
30cc0 20 69 6e 73 69 64 65 20 61 73 73 65 72 74 28 29   inside assert()
30cd0 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a 2a 2a 0a   statements..**.
30ce0 2a 2a 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62  ** sqlite3Memdeb
30cf0 75 67 4e 6f 54 79 70 65 28 29 20 72 65 74 75 72  ugNoType() retur
30d00 6e 73 20 74 72 75 65 20 69 66 20 6e 6f 6e 65 20  ns true if none 
30d10 6f 66 20 74 68 65 20 62 69 74 73 20 69 6e 20 69  of the bits in i
30d20 74 73 20 73 65 63 6f 6e 64 0a 2a 2a 20 61 72 67  ts second.** arg
30d30 75 6d 65 6e 74 20 6d 61 74 63 68 20 74 68 65 20  ument match the 
30d40 74 79 70 65 20 73 65 74 20 62 79 20 74 68 65 20  type set by the 
30d50 70 72 65 76 69 6f 75 73 20 73 71 6c 69 74 65 33  previous sqlite3
30d60 4d 65 6d 64 65 62 75 67 53 65 74 54 79 70 65 28  MemdebugSetType(
30d70 29 2e 0a 2a 2a 0a 2a 2a 20 50 65 72 68 61 70 73  )..**.** Perhaps
30d80 20 74 68 65 20 6d 6f 73 74 20 69 6d 70 6f 72 74   the most import
30d90 61 6e 74 20 70 6f 69 6e 74 20 69 73 20 74 68 65  ant point is the
30da0 20 64 69 66 66 65 72 65 6e 63 65 20 62 65 74 77   difference betw
30db0 65 65 6e 20 4d 45 4d 54 59 50 45 5f 48 45 41 50  een MEMTYPE_HEAP
30dc0 0a 2a 2a 20 61 6e 64 20 4d 45 4d 54 59 50 45 5f  .** and MEMTYPE_
30dd0 4c 4f 4f 4b 41 53 49 44 45 2e 20 20 49 66 20 61  LOOKASIDE.  If a
30de0 6e 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 69 73 20  n allocation is 
30df0 4d 45 4d 54 59 50 45 5f 4c 4f 4f 4b 41 53 49 44  MEMTYPE_LOOKASID
30e00 45 2c 20 74 68 61 74 20 6d 65 61 6e 73 0a 2a 2a  E, that means.**
30e10 20 69 74 20 6d 69 67 68 74 20 68 61 76 65 20 62   it might have b
30e20 65 65 6e 20 61 6c 6c 6f 63 61 74 65 64 20 62 79  een allocated by
30e30 20 6c 6f 6f 6b 61 73 69 64 65 2c 20 65 78 63 65   lookaside, exce
30e40 70 74 20 74 68 65 20 61 6c 6c 6f 63 61 74 69 6f  pt the allocatio
30e50 6e 20 77 61 73 0a 2a 2a 20 74 6f 6f 20 6c 61 72  n was.** too lar
30e60 67 65 20 6f 72 20 6c 6f 6f 6b 61 73 69 64 65 20  ge or lookaside 
30e70 77 61 73 20 61 6c 72 65 61 64 79 20 66 75 6c 6c  was already full
30e80 2e 20 20 49 74 20 69 73 20 69 6d 70 6f 72 74 61  .  It is importa
30e90 6e 74 20 74 6f 20 76 65 72 69 66 79 0a 2a 2a 20  nt to verify.** 
30ea0 74 68 61 74 20 61 6c 6c 6f 63 61 74 69 6f 6e 73  that allocations
30eb0 20 74 68 61 74 20 6d 69 67 68 74 20 68 61 76 65   that might have
30ec0 20 62 65 65 6e 20 73 61 74 69 73 66 69 65 64 20   been satisfied 
30ed0 62 79 20 6c 6f 6f 6b 61 73 69 64 65 20 61 72 65  by lookaside are
30ee0 20 6e 6f 74 0a 2a 2a 20 70 61 73 73 65 64 20 62   not.** passed b
30ef0 61 63 6b 20 74 6f 20 6e 6f 6e 2d 6c 6f 6f 6b 61  ack to non-looka
30f00 73 69 64 65 20 66 72 65 65 28 29 20 72 6f 75 74  side free() rout
30f10 69 6e 65 73 2e 20 20 41 73 73 65 72 74 73 20 73  ines.  Asserts s
30f20 75 63 68 20 61 73 20 74 68 65 0a 2a 2a 20 65 78  uch as the.** ex
30f30 61 6d 70 6c 65 20 61 62 6f 76 65 20 61 72 65 20  ample above are 
30f40 70 6c 61 63 65 64 20 6f 6e 20 74 68 65 20 6e 6f  placed on the no
30f50 6e 2d 6c 6f 6f 6b 61 73 69 64 65 20 66 72 65 65  n-lookaside free
30f60 28 29 20 72 6f 75 74 69 6e 65 73 20 74 6f 20 76  () routines to v
30f70 65 72 69 66 79 0a 2a 2a 20 74 68 69 73 20 63 6f  erify.** this co
30f80 6e 73 74 72 61 69 6e 74 2e 0a 2a 2a 0a 2a 2a 20  nstraint..**.** 
30f90 41 6c 6c 20 6f 66 20 74 68 69 73 20 69 73 20 6e  All of this is n
30fa0 6f 2d 6f 70 20 66 6f 72 20 61 20 70 72 6f 64 75  o-op for a produ
30fb0 63 74 69 6f 6e 20 62 75 69 6c 64 2e 20 20 49 74  ction build.  It
30fc0 20 6f 6e 6c 79 20 63 6f 6d 65 73 20 69 6e 74 6f   only comes into
30fd0 0a 2a 2a 20 70 6c 61 79 20 77 68 65 6e 20 74 68  .** play when th
30fe0 65 20 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55  e SQLITE_MEMDEBU
30ff0 47 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f  G compile-time o
31000 70 74 69 6f 6e 20 69 73 20 75 73 65 64 2e 0a 2a  ption is used..*
31010 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
31020 4d 45 4d 44 45 42 55 47 0a 20 20 76 6f 69 64 20  MEMDEBUG.  void 
31030 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 53  sqlite3MemdebugS
31040 65 74 54 79 70 65 28 76 6f 69 64 2a 2c 75 38 29  etType(void*,u8)
31050 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 4d  ;.  int sqlite3M
31060 65 6d 64 65 62 75 67 48 61 73 54 79 70 65 28 76  emdebugHasType(v
31070 6f 69 64 2a 2c 75 38 29 3b 0a 20 20 69 6e 74 20  oid*,u8);.  int 
31080 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 4e  sqlite3MemdebugN
31090 6f 54 79 70 65 28 76 6f 69 64 2a 2c 75 38 29 3b  oType(void*,u8);
310a0 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
310b0 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 53  sqlite3MemdebugS
310c0 65 74 54 79 70 65 28 58 2c 59 29 20 20 2f 2a 20  etType(X,Y)  /* 
310d0 6e 6f 2d 6f 70 20 2a 2f 0a 23 20 64 65 66 69 6e  no-op */.# defin
310e0 65 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75  e sqlite3Memdebu
310f0 67 48 61 73 54 79 70 65 28 58 2c 59 29 20 20 31  gHasType(X,Y)  1
31100 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
31110 33 4d 65 6d 64 65 62 75 67 4e 6f 54 79 70 65 28  3MemdebugNoType(
31120 58 2c 59 29 20 20 20 31 0a 23 65 6e 64 69 66 0a  X,Y)   1.#endif.
31130 23 64 65 66 69 6e 65 20 4d 45 4d 54 59 50 45 5f  #define MEMTYPE_
31140 48 45 41 50 20 20 20 20 20 20 20 30 78 30 31 20  HEAP       0x01 
31150 20 2f 2a 20 47 65 6e 65 72 61 6c 20 68 65 61 70   /* General heap
31160 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 2a 2f 0a   allocations */.
31170 23 64 65 66 69 6e 65 20 4d 45 4d 54 59 50 45 5f  #define MEMTYPE_
31180 4c 4f 4f 4b 41 53 49 44 45 20 20 30 78 30 32 20  LOOKASIDE  0x02 
31190 20 2f 2a 20 48 65 61 70 20 74 68 61 74 20 6d 69   /* Heap that mi
311a0 67 68 74 20 68 61 76 65 20 62 65 65 6e 20 6c 6f  ght have been lo
311b0 6f 6b 61 73 69 64 65 20 2a 2f 0a 23 64 65 66 69  okaside */.#defi
311c0 6e 65 20 4d 45 4d 54 59 50 45 5f 50 43 41 43 48  ne MEMTYPE_PCACH
311d0 45 20 20 20 20 20 30 78 30 34 20 20 2f 2a 20 50  E     0x04  /* P
311e0 61 67 65 20 63 61 63 68 65 20 61 6c 6c 6f 63 61  age cache alloca
311f0 74 69 6f 6e 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20  tions */../*.** 
31200 54 68 72 65 61 64 69 6e 67 20 69 6e 74 65 72 66  Threading interf
31210 61 63 65 0a 2a 2f 0a 23 69 66 20 53 51 4c 49 54  ace.*/.#if SQLIT
31220 45 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54 48 52  E_MAX_WORKER_THR
31230 45 41 44 53 3e 30 0a 69 6e 74 20 73 71 6c 69 74  EADS>0.int sqlit
31240 65 33 54 68 72 65 61 64 43 72 65 61 74 65 28 53  e3ThreadCreate(S
31250 51 4c 69 74 65 54 68 72 65 61 64 2a 2a 2c 76 6f  QLiteThread**,vo
31260 69 64 2a 28 2a 29 28 76 6f 69 64 2a 29 2c 76 6f  id*(*)(void*),vo
31270 69 64 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  id*);.int sqlite
31280 33 54 68 72 65 61 64 4a 6f 69 6e 28 53 51 4c 69  3ThreadJoin(SQLi
31290 74 65 54 68 72 65 61 64 2a 2c 20 76 6f 69 64 2a  teThread*, void*
312a0 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 20  *);.#endif..#if 
312b0 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45  defined(SQLITE_E
312c0 4e 41 42 4c 45 5f 44 42 50 41 47 45 5f 56 54 41  NABLE_DBPAGE_VTA
312d0 42 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 53 51  B) || defined(SQ
312e0 4c 49 54 45 5f 54 45 53 54 29 0a 69 6e 74 20 73  LITE_TEST).int s
312f0 71 6c 69 74 65 33 44 62 70 61 67 65 52 65 67 69  qlite3DbpageRegi
31300 73 74 65 72 28 73 71 6c 69 74 65 33 2a 29 3b 0a  ster(sqlite3*);.
31310 23 65 6e 64 69 66 0a 23 69 66 20 64 65 66 69 6e  #endif.#if defin
31320 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ed(SQLITE_ENABLE
31330 5f 44 42 53 54 41 54 5f 56 54 41 42 29 20 7c 7c  _DBSTAT_VTAB) ||
31340 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
31350 54 45 53 54 29 0a 69 6e 74 20 73 71 6c 69 74 65  TEST).int sqlite
31360 33 44 62 73 74 61 74 52 65 67 69 73 74 65 72 28  3DbstatRegister(
31370 73 71 6c 69 74 65 33 2a 29 3b 0a 23 65 6e 64 69  sqlite3*);.#endi
31380 66 0a 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78  f..int sqlite3Ex
31390 70 72 56 65 63 74 6f 72 53 69 7a 65 28 45 78 70  prVectorSize(Exp
313a0 72 20 2a 70 45 78 70 72 29 3b 0a 69 6e 74 20 73  r *pExpr);.int s
313b0 71 6c 69 74 65 33 45 78 70 72 49 73 56 65 63 74  qlite3ExprIsVect
313c0 6f 72 28 45 78 70 72 20 2a 70 45 78 70 72 29 3b  or(Expr *pExpr);
313d0 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33 56 65  .Expr *sqlite3Ve
313e0 63 74 6f 72 46 69 65 6c 64 53 75 62 65 78 70 72  ctorFieldSubexpr
313f0 28 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 45 78  (Expr*, int);.Ex
31400 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72 46  pr *sqlite3ExprF
31410 6f 72 56 65 63 74 6f 72 46 69 65 6c 64 28 50 61  orVectorField(Pa
31420 72 73 65 2a 2c 45 78 70 72 2a 2c 69 6e 74 29 3b  rse*,Expr*,int);
31430 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 65 63  .void sqlite3Vec
31440 74 6f 72 45 72 72 6f 72 4d 73 67 28 50 61 72 73  torErrorMsg(Pars
31450 65 2a 2c 20 45 78 70 72 2a 29 3b 0a 0a 23 69 66  e*, Expr*);..#if
31460 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
31470 5f 43 4f 4d 50 49 4c 45 4f 50 54 49 4f 4e 5f 44  _COMPILEOPTION_D
31480 49 41 47 53 0a 63 6f 6e 73 74 20 63 68 61 72 20  IAGS.const char 
31490 2a 2a 73 71 6c 69 74 65 33 43 6f 6d 70 69 6c 65  **sqlite3Compile
314a0 4f 70 74 69 6f 6e 73 28 69 6e 74 20 2a 70 6e 4f  Options(int *pnO
314b0 70 74 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 65 6e  pt);.#endif..#en
314c0 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 49 4e 54  dif /* SQLITEINT
314d0 5f 48 20 2a 2f 0a                                _H */.