/ Hex Artifact Content
Login

Artifact 6cce5956d82972f3e03444c15636222e97938eb9f3dad399df038052c51a04a6:


0000: 2f 2a 0a 2a 2a 20 32 30 30 31 20 53 65 70 74 65  /*.** 2001 Septe
0010: 6d 62 65 72 20 31 35 0a 2a 2a 0a 2a 2a 20 54 68  mber 15.**.** Th
0020: 65 20 61 75 74 68 6f 72 20 64 69 73 63 6c 61 69  e author disclai
0030: 6d 73 20 63 6f 70 79 72 69 67 68 74 20 74 6f 20  ms copyright to 
0040: 74 68 69 73 20 73 6f 75 72 63 65 20 63 6f 64 65  this source code
0050: 2e 20 20 49 6e 20 70 6c 61 63 65 20 6f 66 0a 2a  .  In place of.*
0060: 2a 20 61 20 6c 65 67 61 6c 20 6e 6f 74 69 63 65  * a legal notice
0070: 2c 20 68 65 72 65 20 69 73 20 61 20 62 6c 65 73  , here is a bles
0080: 73 69 6e 67 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 4d  sing:.**.**    M
0090: 61 79 20 79 6f 75 20 64 6f 20 67 6f 6f 64 20 61  ay you do good a
00a0: 6e 64 20 6e 6f 74 20 65 76 69 6c 2e 0a 2a 2a 20  nd not evil..** 
00b0: 20 20 20 4d 61 79 20 79 6f 75 20 66 69 6e 64 20     May you find 
00c0: 66 6f 72 67 69 76 65 6e 65 73 73 20 66 6f 72 20  forgiveness for 
00d0: 79 6f 75 72 73 65 6c 66 20 61 6e 64 20 66 6f 72  yourself and for
00e0: 67 69 76 65 20 6f 74 68 65 72 73 2e 0a 2a 2a 20  give others..** 
00f0: 20 20 20 4d 61 79 20 79 6f 75 20 73 68 61 72 65     May you share
0100: 20 66 72 65 65 6c 79 2c 20 6e 65 76 65 72 20 74   freely, never t
0110: 61 6b 69 6e 67 20 6d 6f 72 65 20 74 68 61 6e 20  aking more than 
0120: 79 6f 75 20 67 69 76 65 2e 0a 2a 2a 0a 2a 2a 2a  you give..**.***
0130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0160: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0170: 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 49 6e 74 65 72 6e  ******.** Intern
0180: 61 6c 20 69 6e 74 65 72 66 61 63 65 20 64 65 66  al interface def
0190: 69 6e 69 74 69 6f 6e 73 20 66 6f 72 20 53 51 4c  initions for SQL
01a0: 69 74 65 2e 0a 2a 2a 0a 2a 2f 0a 23 69 66 6e 64  ite..**.*/.#ifnd
01b0: 65 66 20 53 51 4c 49 54 45 49 4e 54 5f 48 0a 23  ef SQLITEINT_H.#
01c0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 49 4e 54  define SQLITEINT
01d0: 5f 48 0a 0a 2f 2a 20 53 70 65 63 69 61 6c 20 43  _H../* Special C
01e0: 6f 6d 6d 65 6e 74 73 3a 0a 2a 2a 0a 2a 2a 20 53  omments:.**.** S
01f0: 6f 6d 65 20 63 6f 6d 6d 65 6e 74 73 20 68 61 76  ome comments hav
0200: 65 20 73 70 65 63 69 61 6c 20 6d 65 61 6e 69 6e  e special meanin
0210: 67 20 74 6f 20 74 68 65 20 74 6f 6f 6c 73 20 74  g to the tools t
0220: 68 61 74 20 6d 65 61 73 75 72 65 20 74 65 73 74  hat measure test
0230: 0a 2a 2a 20 63 6f 76 65 72 61 67 65 3a 0a 2a 2a  .** coverage:.**
0240: 0a 2a 2a 20 20 20 20 4e 4f 5f 54 45 53 54 20 20  .**    NO_TEST  
0250: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0260: 20 20 20 2d 20 54 68 65 20 62 72 61 6e 63 68 65     - The branche
0270: 73 20 6f 6e 20 74 68 69 73 20 6c 69 6e 65 20 61  s on this line a
0280: 72 65 20 6e 6f 74 0a 2a 2a 20 20 20 20 20 20 20  re not.**       
0290: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
02a0: 20 20 20 20 20 20 20 20 20 20 20 6d 65 61 73 75             measu
02b0: 72 65 64 20 62 79 20 62 72 61 6e 63 68 20 63 6f  red by branch co
02c0: 76 65 72 61 67 65 2e 20 20 54 68 69 73 20 69 73  verage.  This is
02d0: 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
02e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
02f0: 20 20 20 20 20 75 73 65 64 20 6f 6e 20 6c 69 6e       used on lin
0300: 65 73 20 6f 66 20 63 6f 64 65 20 74 68 61 74 20  es of code that 
0310: 61 63 74 75 61 6c 6c 79 0a 2a 2a 20 20 20 20 20  actually.**     
0320: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0330: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6d 70               imp
0340: 6c 65 6d 65 6e 74 20 70 61 72 74 73 20 6f 66 20  lement parts of 
0350: 63 6f 76 65 72 61 67 65 20 74 65 73 74 69 6e 67  coverage testing
0360: 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 4f 50 54 49 4d  ..**.**    OPTIM
0370: 49 5a 41 54 49 4f 4e 2d 49 46 2d 54 52 55 45 20  IZATION-IF-TRUE 
0380: 20 20 20 20 20 20 20 2d 20 54 68 69 73 20 62 72         - This br
0390: 61 6e 63 68 20 69 73 20 61 6c 6c 6f 77 65 64 20  anch is allowed 
03a0: 74 6f 20 61 6c 77 61 79 20 62 65 20 66 61 6c 73  to alway be fals
03b0: 65 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  e.**            
03c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
03d0: 20 20 20 20 20 20 61 6e 64 20 74 68 65 20 63 6f        and the co
03e0: 72 72 65 63 74 20 61 6e 73 77 65 72 20 69 73 20  rrect answer is 
03f0: 73 74 69 6c 6c 20 6f 62 74 61 69 6e 65 64 2c 0a  still obtained,.
0400: 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
0410: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0420: 20 20 20 20 74 68 6f 75 67 68 20 70 65 72 68 61      though perha
0430: 70 73 20 6d 6f 72 65 20 73 6c 6f 77 6c 79 2e 0a  ps more slowly..
0440: 2a 2a 0a 2a 2a 20 20 20 20 4f 50 54 49 4d 49 5a  **.**    OPTIMIZ
0450: 41 54 49 4f 4e 2d 49 46 2d 46 41 4c 53 45 20 20  ATION-IF-FALSE  
0460: 20 20 20 20 20 2d 20 54 68 69 73 20 62 72 61 6e       - This bran
0470: 63 68 20 69 73 20 61 6c 6c 6f 77 65 64 20 74 6f  ch is allowed to
0480: 20 61 6c 77 61 79 20 62 65 20 74 72 75 65 0a 2a   alway be true.*
0490: 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
04a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
04b0: 20 20 20 61 6e 64 20 74 68 65 20 63 6f 72 72 65     and the corre
04c0: 63 74 20 61 6e 73 77 65 72 20 69 73 20 73 74 69  ct answer is sti
04d0: 6c 6c 20 6f 62 74 61 69 6e 65 64 2c 0a 2a 2a 20  ll obtained,.** 
04e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
04f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0500: 20 74 68 6f 75 67 68 20 70 65 72 68 61 70 73 20   though perhaps 
0510: 6d 6f 72 65 20 73 6c 6f 77 6c 79 2e 0a 2a 2a 0a  more slowly..**.
0520: 2a 2a 20 20 20 20 50 52 45 56 45 4e 54 53 2d 48  **    PREVENTS-H
0530: 41 52 4d 4c 45 53 53 2d 4f 56 45 52 52 45 41 44  ARMLESS-OVERREAD
0540: 20 20 2d 20 54 68 69 73 20 62 72 61 6e 63 68 20    - This branch 
0550: 70 72 65 76 65 6e 74 73 20 61 20 62 75 66 66 65  prevents a buffe
0560: 72 20 6f 76 65 72 72 65 61 64 0a 2a 2a 20 20 20  r overread.**   
0570: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0580: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
0590: 68 61 74 20 77 6f 75 6c 64 20 62 65 20 68 61 72  hat would be har
05a0: 6d 6c 65 73 73 20 61 6e 64 20 75 6e 64 65 74 65  mless and undete
05b0: 63 74 61 62 6c 65 0a 2a 2a 20 20 20 20 20 20 20  ctable.**       
05c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
05d0: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 69 74             if it
05e0: 20 64 69 64 20 6f 63 63 75 72 2e 20 20 0a 2a 2a   did occur.  .**
05f0: 0a 2a 2a 20 49 6e 20 61 6c 6c 20 63 61 73 65 73  .** In all cases
0600: 2c 20 74 68 65 20 73 70 65 63 69 61 6c 20 63 6f  , the special co
0610: 6d 6d 65 6e 74 20 6d 75 73 74 20 62 65 20 65 6e  mment must be en
0620: 63 6c 6f 73 65 64 20 69 6e 20 74 68 65 20 75 73  closed in the us
0630: 75 61 6c 0a 2a 2a 20 73 6c 61 73 68 2d 61 73 74  ual.** slash-ast
0640: 65 72 69 73 6b 2e 2e 2e 61 73 74 65 72 69 73 6b  erisk...asterisk
0650: 2d 73 6c 61 73 68 20 63 6f 6d 6d 65 6e 74 20 6d  -slash comment m
0660: 61 72 6b 73 2c 20 77 69 74 68 20 6e 6f 20 73 70  arks, with no sp
0670: 61 63 65 73 20 62 65 74 77 65 65 6e 20 74 68 65  aces between the
0680: 20 0a 2a 2a 20 61 73 74 65 72 69 73 6b 73 20 61   .** asterisks a
0690: 6e 64 20 74 68 65 20 63 6f 6d 6d 65 6e 74 20 74  nd the comment t
06a0: 65 78 74 2e 0a 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 4d  ext..*/../*.** M
06b0: 61 6b 65 20 73 75 72 65 20 74 68 65 20 54 63 6c  ake sure the Tcl
06c0: 20 63 61 6c 6c 69 6e 67 20 63 6f 6e 76 65 6e 74   calling convent
06d0: 69 6f 6e 20 6d 61 63 72 6f 20 69 73 20 64 65 66  ion macro is def
06e0: 69 6e 65 64 2e 20 20 54 68 69 73 20 6d 61 63 72  ined.  This macr
06f0: 6f 20 69 73 0a 2a 2a 20 6f 6e 6c 79 20 75 73 65  o is.** only use
0700: 64 20 62 79 20 74 65 73 74 20 63 6f 64 65 20 61  d by test code a
0710: 6e 64 20 54 63 6c 20 69 6e 74 65 67 72 61 74 69  nd Tcl integrati
0720: 6f 6e 20 63 6f 64 65 2e 0a 2a 2f 0a 23 69 66 6e  on code..*/.#ifn
0730: 64 65 66 20 53 51 4c 49 54 45 5f 54 43 4c 41 50  def SQLITE_TCLAP
0740: 49 0a 23 20 20 64 65 66 69 6e 65 20 53 51 4c 49  I.#  define SQLI
0750: 54 45 5f 54 43 4c 41 50 49 0a 23 65 6e 64 69 66  TE_TCLAPI.#endif
0760: 0a 0a 2f 2a 0a 2a 2a 20 49 6e 63 6c 75 64 65 20  ../*.** Include 
0770: 74 68 65 20 68 65 61 64 65 72 20 66 69 6c 65 20  the header file 
0780: 75 73 65 64 20 74 6f 20 63 75 73 74 6f 6d 69 7a  used to customiz
0790: 65 20 74 68 65 20 63 6f 6d 70 69 6c 65 72 20 6f  e the compiler o
07a0: 70 74 69 6f 6e 73 20 66 6f 72 20 4d 53 56 43 2e  ptions for MSVC.
07b0: 0a 2a 2a 20 54 68 69 73 20 73 68 6f 75 6c 64 20  .** This should 
07c0: 62 65 20 64 6f 6e 65 20 66 69 72 73 74 20 73 6f  be done first so
07d0: 20 74 68 61 74 20 69 74 20 63 61 6e 20 73 75 63   that it can suc
07e0: 63 65 73 73 66 75 6c 6c 79 20 70 72 65 76 65 6e  cessfully preven
07f0: 74 20 73 70 75 72 69 6f 75 73 0a 2a 2a 20 63 6f  t spurious.** co
0800: 6d 70 69 6c 65 72 20 77 61 72 6e 69 6e 67 73 20  mpiler warnings 
0810: 64 75 65 20 74 6f 20 73 75 62 73 65 71 75 65 6e  due to subsequen
0820: 74 20 63 6f 6e 74 65 6e 74 20 69 6e 20 74 68 69  t content in thi
0830: 73 20 66 69 6c 65 20 61 6e 64 20 6f 74 68 65 72  s file and other
0840: 20 66 69 6c 65 73 0a 2a 2a 20 74 68 61 74 20 61   files.** that a
0850: 72 65 20 69 6e 63 6c 75 64 65 64 20 62 79 20 74  re included by t
0860: 68 69 73 20 66 69 6c 65 2e 0a 2a 2f 0a 23 69 6e  his file..*/.#in
0870: 63 6c 75 64 65 20 22 6d 73 76 63 2e 68 22 0a 0a  clude "msvc.h"..
0880: 2f 2a 0a 2a 2a 20 53 70 65 63 69 61 6c 20 73 65  /*.** Special se
0890: 74 75 70 20 66 6f 72 20 56 78 57 6f 72 6b 73 0a  tup for VxWorks.
08a0: 2a 2f 0a 23 69 6e 63 6c 75 64 65 20 22 76 78 77  */.#include "vxw
08b0: 6f 72 6b 73 2e 68 22 0a 0a 2f 2a 0a 2a 2a 20 54  orks.h"../*.** T
08c0: 68 65 73 65 20 23 64 65 66 69 6e 65 73 20 73 68  hese #defines sh
08d0: 6f 75 6c 64 20 65 6e 61 62 6c 65 20 3e 32 47 42  ould enable >2GB
08e0: 20 66 69 6c 65 20 73 75 70 70 6f 72 74 20 6f 6e   file support on
08f0: 20 50 4f 53 49 58 20 69 66 20 74 68 65 0a 2a 2a   POSIX if the.**
0900: 20 75 6e 64 65 72 6c 79 69 6e 67 20 6f 70 65 72   underlying oper
0910: 61 74 69 6e 67 20 73 79 73 74 65 6d 20 73 75 70  ating system sup
0920: 70 6f 72 74 73 20 69 74 2e 20 20 49 66 20 74 68  ports it.  If th
0930: 65 20 4f 53 20 6c 61 63 6b 73 0a 2a 2a 20 6c 61  e OS lacks.** la
0940: 72 67 65 20 66 69 6c 65 20 73 75 70 70 6f 72 74  rge file support
0950: 2c 20 6f 72 20 69 66 20 74 68 65 20 4f 53 20 69  , or if the OS i
0960: 73 20 77 69 6e 64 6f 77 73 2c 20 74 68 65 73 65  s windows, these
0970: 20 73 68 6f 75 6c 64 20 62 65 20 6e 6f 2d 6f 70   should be no-op
0980: 73 2e 0a 2a 2a 0a 2a 2a 20 54 69 63 6b 65 74 20  s..**.** Ticket 
0990: 23 32 37 33 39 3a 20 20 54 68 65 20 5f 4c 41 52  #2739:  The _LAR
09a0: 47 45 46 49 4c 45 5f 53 4f 55 52 43 45 20 6d 61  GEFILE_SOURCE ma
09b0: 63 72 6f 20 6d 75 73 74 20 61 70 70 65 61 72 20  cro must appear 
09c0: 62 65 66 6f 72 65 20 61 6e 79 0a 2a 2a 20 73 79  before any.** sy
09d0: 73 74 65 6d 20 23 69 6e 63 6c 75 64 65 73 2e 20  stem #includes. 
09e0: 20 48 65 6e 63 65 2c 20 74 68 69 73 20 62 6c 6f   Hence, this blo
09f0: 63 6b 20 6f 66 20 63 6f 64 65 20 6d 75 73 74 20  ck of code must 
0a00: 62 65 20 74 68 65 20 76 65 72 79 20 66 69 72 73  be the very firs
0a10: 74 0a 2a 2a 20 63 6f 64 65 20 69 6e 20 61 6c 6c  t.** code in all
0a20: 20 73 6f 75 72 63 65 20 66 69 6c 65 73 2e 0a 2a   source files..*
0a30: 2a 0a 2a 2a 20 4c 61 72 67 65 20 66 69 6c 65 20  *.** Large file 
0a40: 73 75 70 70 6f 72 74 20 63 61 6e 20 62 65 20 64  support can be d
0a50: 69 73 61 62 6c 65 64 20 75 73 69 6e 67 20 74 68  isabled using th
0a60: 65 20 2d 44 53 51 4c 49 54 45 5f 44 49 53 41 42  e -DSQLITE_DISAB
0a70: 4c 45 5f 4c 46 53 20 73 77 69 74 63 68 0a 2a 2a  LE_LFS switch.**
0a80: 20 6f 6e 20 74 68 65 20 63 6f 6d 70 69 6c 65 72   on the compiler
0a90: 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 2e 20 20   command line.  
0aa0: 54 68 69 73 20 69 73 20 6e 65 63 65 73 73 61 72  This is necessar
0ab0: 79 20 69 66 20 79 6f 75 20 61 72 65 20 63 6f 6d  y if you are com
0ac0: 70 69 6c 69 6e 67 0a 2a 2a 20 6f 6e 20 61 20 72  piling.** on a r
0ad0: 65 63 65 6e 74 20 6d 61 63 68 69 6e 65 20 28 65  ecent machine (e
0ae0: 78 3a 20 52 65 64 20 48 61 74 20 37 2e 32 29 20  x: Red Hat 7.2) 
0af0: 62 75 74 20 79 6f 75 20 77 61 6e 74 20 79 6f 75  but you want you
0b00: 72 20 63 6f 64 65 20 74 6f 20 77 6f 72 6b 0a 2a  r code to work.*
0b10: 2a 20 6f 6e 20 61 6e 20 6f 6c 64 65 72 20 6d 61  * on an older ma
0b20: 63 68 69 6e 65 20 28 65 78 3a 20 52 65 64 20 48  chine (ex: Red H
0b30: 61 74 20 36 2e 30 29 2e 20 20 49 66 20 79 6f 75  at 6.0).  If you
0b40: 20 63 6f 6d 70 69 6c 65 20 6f 6e 20 52 65 64 20   compile on Red 
0b50: 48 61 74 20 37 2e 32 0a 2a 2a 20 77 69 74 68 6f  Hat 7.2.** witho
0b60: 75 74 20 74 68 69 73 20 6f 70 74 69 6f 6e 2c 20  ut this option, 
0b70: 4c 46 53 20 69 73 20 65 6e 61 62 6c 65 2e 20 20  LFS is enable.  
0b80: 42 75 74 20 4c 46 53 20 64 6f 65 73 20 6e 6f 74  But LFS does not
0b90: 20 65 78 69 73 74 20 69 6e 20 74 68 65 20 6b 65   exist in the ke
0ba0: 72 6e 65 6c 0a 2a 2a 20 69 6e 20 52 65 64 20 48  rnel.** in Red H
0bb0: 61 74 20 36 2e 30 2c 20 73 6f 20 74 68 65 20 63  at 6.0, so the c
0bc0: 6f 64 65 20 77 6f 6e 27 74 20 77 6f 72 6b 2e 20  ode won't work. 
0bd0: 20 48 65 6e 63 65 2c 20 66 6f 72 20 6d 61 78 69   Hence, for maxi
0be0: 6d 75 6d 20 62 69 6e 61 72 79 0a 2a 2a 20 70 6f  mum binary.** po
0bf0: 72 74 61 62 69 6c 69 74 79 20 79 6f 75 20 73 68  rtability you sh
0c00: 6f 75 6c 64 20 6f 6d 69 74 20 4c 46 53 2e 0a 2a  ould omit LFS..*
0c10: 2a 0a 2a 2a 20 54 68 65 20 70 72 65 76 69 6f 75  *.** The previou
0c20: 73 20 70 61 72 61 67 72 61 70 68 20 77 61 73 20  s paragraph was 
0c30: 77 72 69 74 74 65 6e 20 69 6e 20 32 30 30 35 2e  written in 2005.
0c40: 20 20 28 54 68 69 73 20 70 61 72 61 67 72 61 70    (This paragrap
0c50: 68 20 69 73 20 77 72 69 74 74 65 6e 0a 2a 2a 20  h is written.** 
0c60: 6f 6e 20 32 30 30 38 2d 31 31 2d 32 38 2e 29 20  on 2008-11-28.) 
0c70: 54 68 65 73 65 20 64 61 79 73 2c 20 61 6c 6c 20  These days, all 
0c80: 4c 69 6e 75 78 20 6b 65 72 6e 65 6c 73 20 73 75  Linux kernels su
0c90: 70 70 6f 72 74 20 6c 61 72 67 65 20 66 69 6c 65  pport large file
0ca0: 73 2c 20 73 6f 0a 2a 2a 20 79 6f 75 20 73 68 6f  s, so.** you sho
0cb0: 75 6c 64 20 70 72 6f 62 61 62 6c 79 20 6c 65 61  uld probably lea
0cc0: 76 65 20 4c 46 53 20 65 6e 61 62 6c 65 64 2e 20  ve LFS enabled. 
0cd0: 20 42 75 74 20 73 6f 6d 65 20 65 6d 62 65 64 64   But some embedd
0ce0: 65 64 20 70 6c 61 74 66 6f 72 6d 73 20 6d 69 67  ed platforms mig
0cf0: 68 74 0a 2a 2a 20 6c 61 63 6b 20 4c 46 53 20 69  ht.** lack LFS i
0d00: 6e 20 77 68 69 63 68 20 63 61 73 65 20 74 68 65  n which case the
0d10: 20 53 51 4c 49 54 45 5f 44 49 53 41 42 4c 45 5f   SQLITE_DISABLE_
0d20: 4c 46 53 20 6d 61 63 72 6f 20 6d 69 67 68 74 20  LFS macro might 
0d30: 73 74 69 6c 6c 20 62 65 20 75 73 65 66 75 6c 2e  still be useful.
0d40: 0a 2a 2a 0a 2a 2a 20 53 69 6d 69 6c 61 72 20 69  .**.** Similar i
0d50: 73 20 74 72 75 65 20 66 6f 72 20 4d 61 63 20 4f  s true for Mac O
0d60: 53 20 58 2e 20 20 4c 46 53 20 69 73 20 6f 6e 6c  S X.  LFS is onl
0d70: 79 20 73 75 70 70 6f 72 74 65 64 20 6f 6e 20 4d  y supported on M
0d80: 61 63 20 4f 53 20 58 20 39 20 61 6e 64 20 6c 61  ac OS X 9 and la
0d90: 74 65 72 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20  ter..*/.#ifndef 
0da0: 53 51 4c 49 54 45 5f 44 49 53 41 42 4c 45 5f 4c  SQLITE_DISABLE_L
0db0: 46 53 0a 23 20 64 65 66 69 6e 65 20 5f 4c 41 52  FS.# define _LAR
0dc0: 47 45 5f 46 49 4c 45 20 20 20 20 20 20 20 31 0a  GE_FILE       1.
0dd0: 23 20 69 66 6e 64 65 66 20 5f 46 49 4c 45 5f 4f  # ifndef _FILE_O
0de0: 46 46 53 45 54 5f 42 49 54 53 0a 23 20 20 20 64  FFSET_BITS.#   d
0df0: 65 66 69 6e 65 20 5f 46 49 4c 45 5f 4f 46 46 53  efine _FILE_OFFS
0e00: 45 54 5f 42 49 54 53 20 36 34 0a 23 20 65 6e 64  ET_BITS 64.# end
0e10: 69 66 0a 23 20 64 65 66 69 6e 65 20 5f 4c 41 52  if.# define _LAR
0e20: 47 45 46 49 4c 45 5f 53 4f 55 52 43 45 20 31 0a  GEFILE_SOURCE 1.
0e30: 23 65 6e 64 69 66 0a 0a 2f 2a 20 54 68 65 20 47  #endif../* The G
0e40: 43 43 5f 56 45 52 53 49 4f 4e 20 61 6e 64 20 4d  CC_VERSION and M
0e50: 53 56 43 5f 56 45 52 53 49 4f 4e 20 6d 61 63 72  SVC_VERSION macr
0e60: 6f 73 20 61 72 65 20 75 73 65 64 20 74 6f 0a 2a  os are used to.*
0e70: 2a 20 63 6f 6e 64 69 74 69 6f 6e 61 6c 6c 79 20  * conditionally 
0e80: 69 6e 63 6c 75 64 65 20 6f 70 74 69 6d 69 7a 61  include optimiza
0e90: 74 69 6f 6e 73 20 66 6f 72 20 65 61 63 68 20 6f  tions for each o
0ea0: 66 20 74 68 65 73 65 20 63 6f 6d 70 69 6c 65 72  f these compiler
0eb0: 73 2e 20 20 41 0a 2a 2a 20 76 61 6c 75 65 20 6f  s.  A.** value o
0ec0: 66 20 30 20 6d 65 61 6e 73 20 74 68 61 74 20 63  f 0 means that c
0ed0: 6f 6d 70 69 6c 65 72 20 69 73 20 6e 6f 74 20 62  ompiler is not b
0ee0: 65 69 6e 67 20 75 73 65 64 2e 20 20 54 68 65 0a  eing used.  The.
0ef0: 2a 2a 20 53 51 4c 49 54 45 5f 44 49 53 41 42 4c  ** SQLITE_DISABL
0f00: 45 5f 49 4e 54 52 49 4e 53 49 43 20 6d 61 63 72  E_INTRINSIC macr
0f10: 6f 20 6d 65 61 6e 73 20 64 6f 20 6e 6f 74 20 75  o means do not u
0f20: 73 65 20 61 6e 79 20 63 6f 6d 70 69 6c 65 72 2d  se any compiler-
0f30: 73 70 65 63 69 66 69 63 0a 2a 2a 20 6f 70 74 69  specific.** opti
0f40: 6d 69 7a 61 74 69 6f 6e 73 2c 20 61 6e 64 20 68  mizations, and h
0f50: 65 6e 63 65 20 73 65 74 20 61 6c 6c 20 63 6f 6d  ence set all com
0f60: 70 69 6c 65 72 20 6d 61 63 72 6f 73 20 74 6f 20  piler macros to 
0f70: 30 0a 2a 2a 0a 2a 2a 20 54 68 65 72 65 20 77 61  0.**.** There wa
0f80: 73 20 6f 6e 63 65 20 61 6c 73 6f 20 61 20 43 4c  s once also a CL
0f90: 41 4e 47 5f 56 45 52 53 49 4f 4e 20 6d 61 63 72  ANG_VERSION macr
0fa0: 6f 2e 20 20 48 6f 77 65 76 65 72 2c 20 77 65 20  o.  However, we 
0fb0: 6c 65 61 72 6e 20 74 68 61 74 20 74 68 65 0a 2a  learn that the.*
0fc0: 2a 20 76 65 72 73 69 6f 6e 20 6e 75 6d 62 65 72  * version number
0fd0: 73 20 69 6e 20 63 6c 61 6e 67 20 61 72 65 20 66  s in clang are f
0fe0: 6f 72 20 22 6d 61 72 6b 65 74 69 6e 67 22 20 6f  or "marketing" o
0ff0: 6e 6c 79 20 61 6e 64 20 61 72 65 20 69 6e 63 6f  nly and are inco
1000: 6e 73 69 73 74 65 6e 74 0a 2a 2a 20 61 6e 64 20  nsistent.** and 
1010: 75 6e 72 65 6c 69 61 62 6c 65 2e 20 20 46 6f 72  unreliable.  For
1020: 74 75 6e 61 74 65 6c 79 2c 20 61 6c 6c 20 76 65  tunately, all ve
1030: 72 73 69 6f 6e 73 20 6f 66 20 63 6c 61 6e 67 20  rsions of clang 
1040: 61 6c 73 6f 20 72 65 63 6f 67 6e 69 7a 65 20 74  also recognize t
1050: 68 65 0a 2a 2a 20 67 63 63 20 76 65 72 73 69 6f  he.** gcc versio
1060: 6e 20 6e 75 6d 62 65 72 73 20 61 6e 64 20 68 61  n numbers and ha
1070: 76 65 20 72 65 61 73 6f 6e 61 62 6c 65 20 73 65  ve reasonable se
1080: 74 74 69 6e 67 73 20 66 6f 72 20 67 63 63 20 76  ttings for gcc v
1090: 65 72 73 69 6f 6e 20 6e 75 6d 62 65 72 73 2c 0a  ersion numbers,.
10a0: 2a 2a 20 73 6f 20 74 68 65 20 47 43 43 5f 56 45  ** so the GCC_VE
10b0: 52 53 49 4f 4e 20 6d 61 63 72 6f 20 77 69 6c 6c  RSION macro will
10c0: 20 62 65 20 73 65 74 20 74 6f 20 61 20 63 6f 72   be set to a cor
10d0: 72 65 63 74 20 6e 6f 6e 2d 7a 65 72 6f 20 76 61  rect non-zero va
10e0: 6c 75 65 20 65 76 65 6e 0a 2a 2a 20 77 68 65 6e  lue even.** when
10f0: 20 63 6f 6d 70 69 6c 69 6e 67 20 77 69 74 68 20   compiling with 
1100: 63 6c 61 6e 67 2e 0a 2a 2f 0a 23 69 66 20 64 65  clang..*/.#if de
1110: 66 69 6e 65 64 28 5f 5f 47 4e 55 43 5f 5f 29 20  fined(__GNUC__) 
1120: 26 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  && !defined(SQLI
1130: 54 45 5f 44 49 53 41 42 4c 45 5f 49 4e 54 52 49  TE_DISABLE_INTRI
1140: 4e 53 49 43 29 0a 23 20 64 65 66 69 6e 65 20 47  NSIC).# define G
1150: 43 43 5f 56 45 52 53 49 4f 4e 20 28 5f 5f 47 4e  CC_VERSION (__GN
1160: 55 43 5f 5f 2a 31 30 30 30 30 30 30 2b 5f 5f 47  UC__*1000000+__G
1170: 4e 55 43 5f 4d 49 4e 4f 52 5f 5f 2a 31 30 30 30  NUC_MINOR__*1000
1180: 2b 5f 5f 47 4e 55 43 5f 50 41 54 43 48 4c 45 56  +__GNUC_PATCHLEV
1190: 45 4c 5f 5f 29 0a 23 65 6c 73 65 0a 23 20 64 65  EL__).#else.# de
11a0: 66 69 6e 65 20 47 43 43 5f 56 45 52 53 49 4f 4e  fine GCC_VERSION
11b0: 20 30 0a 23 65 6e 64 69 66 0a 23 69 66 20 64 65   0.#endif.#if de
11c0: 66 69 6e 65 64 28 5f 4d 53 43 5f 56 45 52 29 20  fined(_MSC_VER) 
11d0: 26 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  && !defined(SQLI
11e0: 54 45 5f 44 49 53 41 42 4c 45 5f 49 4e 54 52 49  TE_DISABLE_INTRI
11f0: 4e 53 49 43 29 0a 23 20 64 65 66 69 6e 65 20 4d  NSIC).# define M
1200: 53 56 43 5f 56 45 52 53 49 4f 4e 20 5f 4d 53 43  SVC_VERSION _MSC
1210: 5f 56 45 52 0a 23 65 6c 73 65 0a 23 20 64 65 66  _VER.#else.# def
1220: 69 6e 65 20 4d 53 56 43 5f 56 45 52 53 49 4f 4e  ine MSVC_VERSION
1230: 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 4e 65   0.#endif../* Ne
1240: 65 64 65 64 20 66 6f 72 20 76 61 72 69 6f 75 73  eded for various
1250: 20 64 65 66 69 6e 69 74 69 6f 6e 73 2e 2e 2e 20   definitions... 
1260: 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28 5f  */.#if defined(_
1270: 5f 47 4e 55 43 5f 5f 29 20 26 26 20 21 64 65 66  _GNUC__) && !def
1280: 69 6e 65 64 28 5f 47 4e 55 5f 53 4f 55 52 43 45  ined(_GNU_SOURCE
1290: 29 0a 23 20 64 65 66 69 6e 65 20 5f 47 4e 55 5f  ).# define _GNU_
12a0: 53 4f 55 52 43 45 0a 23 65 6e 64 69 66 0a 0a 23  SOURCE.#endif..#
12b0: 69 66 20 64 65 66 69 6e 65 64 28 5f 5f 4f 70 65  if defined(__Ope
12c0: 6e 42 53 44 5f 5f 29 20 26 26 20 21 64 65 66 69  nBSD__) && !defi
12d0: 6e 65 64 28 5f 42 53 44 5f 53 4f 55 52 43 45 29  ned(_BSD_SOURCE)
12e0: 0a 23 20 64 65 66 69 6e 65 20 5f 42 53 44 5f 53  .# define _BSD_S
12f0: 4f 55 52 43 45 0a 23 65 6e 64 69 66 0a 0a 2f 2a  OURCE.#endif../*
1300: 0a 2a 2a 20 46 6f 72 20 4d 69 6e 47 57 2c 20 63  .** For MinGW, c
1310: 68 65 63 6b 20 74 6f 20 73 65 65 20 69 66 20 77  heck to see if w
1320: 65 20 63 61 6e 20 69 6e 63 6c 75 64 65 20 74 68  e can include th
1330: 65 20 68 65 61 64 65 72 20 66 69 6c 65 20 63 6f  e header file co
1340: 6e 74 61 69 6e 69 6e 67 20 69 74 73 0a 2a 2a 20  ntaining its.** 
1350: 76 65 72 73 69 6f 6e 20 69 6e 66 6f 72 6d 61 74  version informat
1360: 69 6f 6e 2c 20 61 6d 6f 6e 67 20 6f 74 68 65 72  ion, among other
1370: 20 74 68 69 6e 67 73 2e 20 20 4e 6f 72 6d 61 6c   things.  Normal
1380: 6c 79 2c 20 74 68 69 73 20 69 6e 74 65 72 6e 61  ly, this interna
1390: 6c 20 4d 69 6e 47 57 0a 2a 2a 20 68 65 61 64 65  l MinGW.** heade
13a0: 72 20 66 69 6c 65 20 77 6f 75 6c 64 20 5b 6f 6e  r file would [on
13b0: 6c 79 5d 20 62 65 20 69 6e 63 6c 75 64 65 64 20  ly] be included 
13c0: 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 62 79  automatically by
13d0: 20 6f 74 68 65 72 20 4d 69 6e 47 57 20 68 65 61   other MinGW hea
13e0: 64 65 72 0a 2a 2a 20 66 69 6c 65 73 3b 20 68 6f  der.** files; ho
13f0: 77 65 76 65 72 2c 20 74 68 65 20 63 6f 6e 74 61  wever, the conta
1400: 69 6e 65 64 20 76 65 72 73 69 6f 6e 20 69 6e 66  ined version inf
1410: 6f 72 6d 61 74 69 6f 6e 20 69 73 20 6e 6f 77 20  ormation is now 
1420: 72 65 71 75 69 72 65 64 20 62 79 20 74 68 69 73  required by this
1430: 0a 2a 2a 20 68 65 61 64 65 72 20 66 69 6c 65 20  .** header file 
1440: 74 6f 20 77 6f 72 6b 20 61 72 6f 75 6e 64 20 62  to work around b
1450: 69 6e 61 72 79 20 63 6f 6d 70 61 74 69 62 69 6c  inary compatibil
1460: 69 74 79 20 69 73 73 75 65 73 20 28 73 65 65 20  ity issues (see 
1470: 62 65 6c 6f 77 29 20 61 6e 64 0a 2a 2a 20 74 68  below) and.** th
1480: 69 73 20 69 73 20 74 68 65 20 6f 6e 6c 79 20 6b  is is the only k
1490: 6e 6f 77 6e 20 77 61 79 20 74 6f 20 72 65 6c 69  nown way to reli
14a0: 61 62 6c 79 20 6f 62 74 61 69 6e 20 69 74 2e 20  ably obtain it. 
14b0: 20 54 68 69 73 20 65 6e 74 69 72 65 20 23 69 66   This entire #if
14c0: 20 62 6c 6f 63 6b 0a 2a 2a 20 77 6f 75 6c 64 20   block.** would 
14d0: 62 65 20 63 6f 6d 70 6c 65 74 65 6c 79 20 75 6e  be completely un
14e0: 6e 65 63 65 73 73 61 72 79 20 69 66 20 74 68 65  necessary if the
14f0: 72 65 20 77 61 73 20 61 6e 79 20 6f 74 68 65 72  re was any other
1500: 20 77 61 79 20 6f 66 20 64 65 74 65 63 74 69 6e   way of detectin
1510: 67 0a 2a 2a 20 4d 69 6e 47 57 20 76 69 61 20 74  g.** MinGW via t
1520: 68 65 69 72 20 70 72 65 70 72 6f 63 65 73 73 6f  heir preprocesso
1530: 72 20 28 65 2e 67 2e 20 69 66 20 74 68 65 79 20  r (e.g. if they 
1540: 63 75 73 74 6f 6d 69 7a 65 64 20 74 68 65 69 72  customized their
1550: 20 47 43 43 20 74 6f 20 64 65 66 69 6e 65 0a 2a   GCC to define.*
1560: 2a 20 73 6f 6d 65 20 4d 69 6e 47 57 2d 73 70 65  * some MinGW-spe
1570: 63 69 66 69 63 20 6d 61 63 72 6f 73 29 2e 20 20  cific macros).  
1580: 57 68 65 6e 20 63 6f 6d 70 69 6c 69 6e 67 20 66  When compiling f
1590: 6f 72 20 4d 69 6e 47 57 2c 20 65 69 74 68 65 72  or MinGW, either
15a0: 20 74 68 65 0a 2a 2a 20 5f 48 41 56 45 5f 4d 49   the.** _HAVE_MI
15b0: 4e 47 57 5f 48 20 6f 72 20 5f 48 41 56 45 5f 5f  NGW_H or _HAVE__
15c0: 4d 49 4e 47 57 5f 48 20 28 6e 6f 74 65 20 74 68  MINGW_H (note th
15d0: 65 20 65 78 74 72 61 20 75 6e 64 65 72 73 63 6f  e extra undersco
15e0: 72 65 29 20 6d 61 63 72 6f 20 6d 75 73 74 20 62  re) macro must b
15f0: 65 0a 2a 2a 20 64 65 66 69 6e 65 64 3b 20 6f 74  e.** defined; ot
1600: 68 65 72 77 69 73 65 2c 20 64 65 74 65 63 74 69  herwise, detecti
1610: 6f 6e 20 6f 66 20 63 6f 6e 64 69 74 69 6f 6e 73  on of conditions
1620: 20 73 70 65 63 69 66 69 63 20 74 6f 20 4d 69 6e   specific to Min
1630: 47 57 20 77 69 6c 6c 20 62 65 0a 2a 2a 20 64 69  GW will be.** di
1640: 73 61 62 6c 65 64 2e 0a 2a 2f 0a 23 69 66 20 64  sabled..*/.#if d
1650: 65 66 69 6e 65 64 28 5f 48 41 56 45 5f 4d 49 4e  efined(_HAVE_MIN
1660: 47 57 5f 48 29 0a 23 20 69 6e 63 6c 75 64 65 20  GW_H).# include 
1670: 22 6d 69 6e 67 77 2e 68 22 0a 23 65 6c 69 66 20  "mingw.h".#elif 
1680: 64 65 66 69 6e 65 64 28 5f 48 41 56 45 5f 5f 4d  defined(_HAVE__M
1690: 49 4e 47 57 5f 48 29 0a 23 20 69 6e 63 6c 75 64  INGW_H).# includ
16a0: 65 20 22 5f 6d 69 6e 67 77 2e 68 22 0a 23 65 6e  e "_mingw.h".#en
16b0: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 46 6f 72 20 4d  dif../*.** For M
16c0: 69 6e 47 57 20 76 65 72 73 69 6f 6e 20 34 2e 78  inGW version 4.x
16d0: 20 28 61 6e 64 20 68 69 67 68 65 72 29 2c 20 63   (and higher), c
16e0: 68 65 63 6b 20 74 6f 20 73 65 65 20 69 66 20 74  heck to see if t
16f0: 68 65 20 5f 55 53 45 5f 33 32 42 49 54 5f 54 49  he _USE_32BIT_TI
1700: 4d 45 5f 54 0a 2a 2a 20 64 65 66 69 6e 65 20 69  ME_T.** define i
1710: 73 20 72 65 71 75 69 72 65 64 20 74 6f 20 6d 61  s required to ma
1720: 69 6e 74 61 69 6e 20 62 69 6e 61 72 79 20 63 6f  intain binary co
1730: 6d 70 61 74 69 62 69 6c 69 74 79 20 77 69 74 68  mpatibility with
1740: 20 74 68 65 20 4d 53 56 43 20 72 75 6e 74 69 6d   the MSVC runtim
1750: 65 0a 2a 2a 20 6c 69 62 72 61 72 79 20 69 6e 20  e.** library in 
1760: 75 73 65 20 28 65 2e 67 2e 20 66 6f 72 20 57 69  use (e.g. for Wi
1770: 6e 64 6f 77 73 20 58 50 29 2e 0a 2a 2f 0a 23 69  ndows XP)..*/.#i
1780: 66 20 21 64 65 66 69 6e 65 64 28 5f 55 53 45 5f  f !defined(_USE_
1790: 33 32 42 49 54 5f 54 49 4d 45 5f 54 29 20 26 26  32BIT_TIME_T) &&
17a0: 20 21 64 65 66 69 6e 65 64 28 5f 55 53 45 5f 36   !defined(_USE_6
17b0: 34 42 49 54 5f 54 49 4d 45 5f 54 29 20 26 26 20  4BIT_TIME_T) && 
17c0: 5c 0a 20 20 20 20 64 65 66 69 6e 65 64 28 5f 57  \.    defined(_W
17d0: 49 4e 33 32 29 20 26 26 20 21 64 65 66 69 6e 65  IN32) && !define
17e0: 64 28 5f 57 49 4e 36 34 29 20 26 26 20 5c 0a 20  d(_WIN64) && \. 
17f0: 20 20 20 64 65 66 69 6e 65 64 28 5f 5f 4d 49 4e     defined(__MIN
1800: 47 57 5f 4d 41 4a 4f 52 5f 56 45 52 53 49 4f 4e  GW_MAJOR_VERSION
1810: 29 20 26 26 20 5f 5f 4d 49 4e 47 57 5f 4d 41 4a  ) && __MINGW_MAJ
1820: 4f 52 5f 56 45 52 53 49 4f 4e 20 3e 3d 20 34 20  OR_VERSION >= 4 
1830: 26 26 20 5c 0a 20 20 20 20 64 65 66 69 6e 65 64  && \.    defined
1840: 28 5f 5f 4d 53 56 43 52 54 5f 5f 29 0a 23 20 64  (__MSVCRT__).# d
1850: 65 66 69 6e 65 20 5f 55 53 45 5f 33 32 42 49 54  efine _USE_32BIT
1860: 5f 54 49 4d 45 5f 54 0a 23 65 6e 64 69 66 0a 0a  _TIME_T.#endif..
1870: 2f 2a 20 54 68 65 20 70 75 62 6c 69 63 20 53 51  /* The public SQ
1880: 4c 69 74 65 20 69 6e 74 65 72 66 61 63 65 2e 20  Lite interface. 
1890: 20 54 68 65 20 5f 46 49 4c 45 5f 4f 46 46 53 45   The _FILE_OFFSE
18a0: 54 5f 42 49 54 53 20 6d 61 63 72 6f 20 6d 75 73  T_BITS macro mus
18b0: 74 20 61 70 70 65 61 72 0a 2a 2a 20 66 69 72 73  t appear.** firs
18c0: 74 20 69 6e 20 51 4e 58 2e 20 20 41 6c 73 6f 2c  t in QNX.  Also,
18d0: 20 74 68 65 20 5f 55 53 45 5f 33 32 42 49 54 5f   the _USE_32BIT_
18e0: 54 49 4d 45 5f 54 20 6d 61 63 72 6f 20 6d 75 73  TIME_T macro mus
18f0: 74 20 61 70 70 65 61 72 20 66 69 72 73 74 20 66  t appear first f
1900: 6f 72 0a 2a 2a 20 4d 69 6e 47 57 2e 0a 2a 2f 0a  or.** MinGW..*/.
1910: 23 69 6e 63 6c 75 64 65 20 22 73 71 6c 69 74 65  #include "sqlite
1920: 33 2e 68 22 0a 0a 2f 2a 0a 2a 2a 20 49 6e 63 6c  3.h"../*.** Incl
1930: 75 64 65 20 74 68 65 20 63 6f 6e 66 69 67 75 72  ude the configur
1940: 61 74 69 6f 6e 20 68 65 61 64 65 72 20 6f 75 74  ation header out
1950: 70 75 74 20 62 79 20 27 63 6f 6e 66 69 67 75 72  put by 'configur
1960: 65 27 20 69 66 20 77 65 27 72 65 20 75 73 69 6e  e' if we're usin
1970: 67 20 74 68 65 0a 2a 2a 20 61 75 74 6f 63 6f 6e  g the.** autocon
1980: 66 2d 62 61 73 65 64 20 62 75 69 6c 64 0a 2a 2f  f-based build.*/
1990: 0a 23 69 66 20 64 65 66 69 6e 65 64 28 5f 48 41  .#if defined(_HA
19a0: 56 45 5f 53 51 4c 49 54 45 5f 43 4f 4e 46 49 47  VE_SQLITE_CONFIG
19b0: 5f 48 29 20 26 26 20 21 64 65 66 69 6e 65 64 28  _H) && !defined(
19c0: 53 51 4c 49 54 45 43 4f 4e 46 49 47 5f 48 29 0a  SQLITECONFIG_H).
19d0: 23 69 6e 63 6c 75 64 65 20 22 63 6f 6e 66 69 67  #include "config
19e0: 2e 68 22 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  .h".#define SQLI
19f0: 54 45 43 4f 4e 46 49 47 5f 48 20 31 0a 23 65 6e  TECONFIG_H 1.#en
1a00: 64 69 66 0a 0a 23 69 6e 63 6c 75 64 65 20 22 73  dif..#include "s
1a10: 71 6c 69 74 65 4c 69 6d 69 74 2e 68 22 0a 0a 2f  qliteLimit.h"../
1a20: 2a 20 44 69 73 61 62 6c 65 20 6e 75 69 73 61 6e  * Disable nuisan
1a30: 63 65 20 77 61 72 6e 69 6e 67 73 20 6f 6e 20 42  ce warnings on B
1a40: 6f 72 6c 61 6e 64 20 63 6f 6d 70 69 6c 65 72 73  orland compilers
1a50: 20 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28   */.#if defined(
1a60: 5f 5f 42 4f 52 4c 41 4e 44 43 5f 5f 29 0a 23 70  __BORLANDC__).#p
1a70: 72 61 67 6d 61 20 77 61 72 6e 20 2d 72 63 68 20  ragma warn -rch 
1a80: 2f 2a 20 75 6e 72 65 61 63 68 61 62 6c 65 20 63  /* unreachable c
1a90: 6f 64 65 20 2a 2f 0a 23 70 72 61 67 6d 61 20 77  ode */.#pragma w
1aa0: 61 72 6e 20 2d 63 63 63 20 2f 2a 20 43 6f 6e 64  arn -ccc /* Cond
1ab0: 69 74 69 6f 6e 20 69 73 20 61 6c 77 61 79 73 20  ition is always 
1ac0: 74 72 75 65 20 6f 72 20 66 61 6c 73 65 20 2a 2f  true or false */
1ad0: 0a 23 70 72 61 67 6d 61 20 77 61 72 6e 20 2d 61  .#pragma warn -a
1ae0: 75 73 20 2f 2a 20 41 73 73 69 67 6e 65 64 20 76  us /* Assigned v
1af0: 61 6c 75 65 20 69 73 20 6e 65 76 65 72 20 75 73  alue is never us
1b00: 65 64 20 2a 2f 0a 23 70 72 61 67 6d 61 20 77 61  ed */.#pragma wa
1b10: 72 6e 20 2d 63 73 75 20 2f 2a 20 43 6f 6d 70 61  rn -csu /* Compa
1b20: 72 69 6e 67 20 73 69 67 6e 65 64 20 61 6e 64 20  ring signed and 
1b30: 75 6e 73 69 67 6e 65 64 20 2a 2f 0a 23 70 72 61  unsigned */.#pra
1b40: 67 6d 61 20 77 61 72 6e 20 2d 73 70 61 20 2f 2a  gma warn -spa /*
1b50: 20 53 75 73 70 69 63 69 6f 75 73 20 70 6f 69 6e   Suspicious poin
1b60: 74 65 72 20 61 72 69 74 68 6d 65 74 69 63 20 2a  ter arithmetic *
1b70: 2f 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  /.#endif../*.** 
1b80: 49 6e 63 6c 75 64 65 20 73 74 61 6e 64 61 72 64  Include standard
1b90: 20 68 65 61 64 65 72 20 66 69 6c 65 73 20 61 73   header files as
1ba0: 20 6e 65 63 65 73 73 61 72 79 0a 2a 2f 0a 23 69   necessary.*/.#i
1bb0: 66 64 65 66 20 48 41 56 45 5f 53 54 44 49 4e 54  fdef HAVE_STDINT
1bc0: 5f 48 0a 23 69 6e 63 6c 75 64 65 20 3c 73 74 64  _H.#include <std
1bd0: 69 6e 74 2e 68 3e 0a 23 65 6e 64 69 66 0a 23 69  int.h>.#endif.#i
1be0: 66 64 65 66 20 48 41 56 45 5f 49 4e 54 54 59 50  fdef HAVE_INTTYP
1bf0: 45 53 5f 48 0a 23 69 6e 63 6c 75 64 65 20 3c 69  ES_H.#include <i
1c00: 6e 74 74 79 70 65 73 2e 68 3e 0a 23 65 6e 64 69  nttypes.h>.#endi
1c10: 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c  f../*.** The fol
1c20: 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 73 20 61 72  lowing macros ar
1c30: 65 20 75 73 65 64 20 74 6f 20 63 61 73 74 20 70  e used to cast p
1c40: 6f 69 6e 74 65 72 73 20 74 6f 20 69 6e 74 65 67  ointers to integ
1c50: 65 72 73 20 61 6e 64 0a 2a 2a 20 69 6e 74 65 67  ers and.** integ
1c60: 65 72 73 20 74 6f 20 70 6f 69 6e 74 65 72 73 2e  ers to pointers.
1c70: 20 20 54 68 65 20 77 61 79 20 79 6f 75 20 64 6f    The way you do
1c80: 20 74 68 69 73 20 76 61 72 69 65 73 20 66 72 6f   this varies fro
1c90: 6d 20 6f 6e 65 20 63 6f 6d 70 69 6c 65 72 0a 2a  m one compiler.*
1ca0: 2a 20 74 6f 20 74 68 65 20 6e 65 78 74 2c 20 73  * to the next, s
1cb0: 6f 20 77 65 20 68 61 76 65 20 64 65 76 65 6c 6f  o we have develo
1cc0: 70 65 64 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e  ped the followin
1cd0: 67 20 73 65 74 20 6f 66 20 23 69 66 20 73 74 61  g set of #if sta
1ce0: 74 65 6d 65 6e 74 73 0a 2a 2a 20 74 6f 20 67 65  tements.** to ge
1cf0: 6e 65 72 61 74 65 20 61 70 70 72 6f 70 72 69 61  nerate appropria
1d00: 74 65 20 6d 61 63 72 6f 73 20 66 6f 72 20 61 20  te macros for a 
1d10: 77 69 64 65 20 72 61 6e 67 65 20 6f 66 20 63 6f  wide range of co
1d20: 6d 70 69 6c 65 72 73 2e 0a 2a 2a 0a 2a 2a 20 54  mpilers..**.** T
1d30: 68 65 20 63 6f 72 72 65 63 74 20 22 41 4e 53 49  he correct "ANSI
1d40: 22 20 77 61 79 20 74 6f 20 64 6f 20 74 68 69 73  " way to do this
1d50: 20 69 73 20 74 6f 20 75 73 65 20 74 68 65 20 69   is to use the i
1d60: 6e 74 70 74 72 5f 74 20 74 79 70 65 2e 0a 2a 2a  ntptr_t type..**
1d70: 20 55 6e 66 6f 72 74 75 6e 61 74 65 6c 79 2c 20   Unfortunately, 
1d80: 74 68 61 74 20 74 79 70 65 64 65 66 20 69 73 20  that typedef is 
1d90: 6e 6f 74 20 61 76 61 69 6c 61 62 6c 65 20 6f 6e  not available on
1da0: 20 61 6c 6c 20 63 6f 6d 70 69 6c 65 72 73 2c 20   all compilers, 
1db0: 6f 72 0a 2a 2a 20 69 66 20 69 74 20 69 73 20 61  or.** if it is a
1dc0: 76 61 69 6c 61 62 6c 65 2c 20 69 74 20 72 65 71  vailable, it req
1dd0: 75 69 72 65 73 20 61 6e 20 23 69 6e 63 6c 75 64  uires an #includ
1de0: 65 20 6f 66 20 73 70 65 63 69 66 69 63 20 68 65  e of specific he
1df0: 61 64 65 72 73 0a 2a 2a 20 74 68 61 74 20 76 61  aders.** that va
1e00: 72 79 20 66 72 6f 6d 20 6f 6e 65 20 6d 61 63 68  ry from one mach
1e10: 69 6e 65 20 74 6f 20 74 68 65 20 6e 65 78 74 2e  ine to the next.
1e20: 0a 2a 2a 0a 2a 2a 20 54 69 63 6b 65 74 20 23 33  .**.** Ticket #3
1e30: 38 36 30 3a 20 20 54 68 65 20 6c 6c 76 6d 2d 67  860:  The llvm-g
1e40: 63 63 2d 34 2e 32 20 63 6f 6d 70 69 6c 65 72 20  cc-4.2 compiler 
1e50: 66 72 6f 6d 20 41 70 70 6c 65 20 63 68 6f 6b 65  from Apple choke
1e60: 73 20 6f 6e 0a 2a 2a 20 74 68 65 20 28 28 76 6f  s on.** the ((vo
1e70: 69 64 2a 29 26 28 28 63 68 61 72 2a 29 30 29 5b  id*)&((char*)0)[
1e80: 58 5d 29 20 63 6f 6e 73 74 72 75 63 74 2e 20 20  X]) construct.  
1e90: 42 75 74 20 4d 53 56 43 20 63 68 6f 6b 65 73 20  But MSVC chokes 
1ea0: 6f 6e 20 28 28 76 6f 69 64 2a 29 28 58 29 29 2e  on ((void*)(X)).
1eb0: 0a 2a 2a 20 53 6f 20 77 65 20 68 61 76 65 20 74  .** So we have t
1ec0: 6f 20 64 65 66 69 6e 65 20 74 68 65 20 6d 61 63  o define the mac
1ed0: 72 6f 73 20 69 6e 20 64 69 66 66 65 72 65 6e 74  ros in different
1ee0: 20 77 61 79 73 20 64 65 70 65 6e 64 69 6e 67 20   ways depending 
1ef0: 6f 6e 20 74 68 65 0a 2a 2a 20 63 6f 6d 70 69 6c  on the.** compil
1f00: 65 72 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e  er..*/.#if defin
1f10: 65 64 28 5f 5f 50 54 52 44 49 46 46 5f 54 59 50  ed(__PTRDIFF_TYP
1f20: 45 5f 5f 29 20 20 2f 2a 20 54 68 69 73 20 63 61  E__)  /* This ca
1f30: 73 65 20 73 68 6f 75 6c 64 20 77 6f 72 6b 20 66  se should work f
1f40: 6f 72 20 47 43 43 20 2a 2f 0a 23 20 64 65 66 69  or GCC */.# defi
1f50: 6e 65 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f  ne SQLITE_INT_TO
1f60: 5f 50 54 52 28 58 29 20 20 28 28 76 6f 69 64 2a  _PTR(X)  ((void*
1f70: 29 28 5f 5f 50 54 52 44 49 46 46 5f 54 59 50 45  )(__PTRDIFF_TYPE
1f80: 5f 5f 29 28 58 29 29 0a 23 20 64 65 66 69 6e 65  __)(X)).# define
1f90: 20 53 51 4c 49 54 45 5f 50 54 52 5f 54 4f 5f 49   SQLITE_PTR_TO_I
1fa0: 4e 54 28 58 29 20 20 28 28 69 6e 74 29 28 5f 5f  NT(X)  ((int)(__
1fb0: 50 54 52 44 49 46 46 5f 54 59 50 45 5f 5f 29 28  PTRDIFF_TYPE__)(
1fc0: 58 29 29 0a 23 65 6c 69 66 20 21 64 65 66 69 6e  X)).#elif !defin
1fd0: 65 64 28 5f 5f 47 4e 55 43 5f 5f 29 20 20 20 20  ed(__GNUC__)    
1fe0: 20 20 20 2f 2a 20 57 6f 72 6b 73 20 66 6f 72 20     /* Works for 
1ff0: 63 6f 6d 70 69 6c 65 72 73 20 6f 74 68 65 72 20  compilers other 
2000: 74 68 61 6e 20 4c 4c 56 4d 20 2a 2f 0a 23 20 64  than LLVM */.# d
2010: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49 4e 54  efine SQLITE_INT
2020: 5f 54 4f 5f 50 54 52 28 58 29 20 20 28 28 76 6f  _TO_PTR(X)  ((vo
2030: 69 64 2a 29 26 28 28 63 68 61 72 2a 29 30 29 5b  id*)&((char*)0)[
2040: 58 5d 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  X]).# define SQL
2050: 49 54 45 5f 50 54 52 5f 54 4f 5f 49 4e 54 28 58  ITE_PTR_TO_INT(X
2060: 29 20 20 28 28 69 6e 74 29 28 28 28 63 68 61 72  )  ((int)(((char
2070: 2a 29 58 29 2d 28 63 68 61 72 2a 29 30 29 29 0a  *)X)-(char*)0)).
2080: 23 65 6c 69 66 20 64 65 66 69 6e 65 64 28 48 41  #elif defined(HA
2090: 56 45 5f 53 54 44 49 4e 54 5f 48 29 20 20 20 2f  VE_STDINT_H)   /
20a0: 2a 20 55 73 65 20 74 68 69 73 20 63 61 73 65 20  * Use this case 
20b0: 69 66 20 77 65 20 68 61 76 65 20 41 4e 53 49 20  if we have ANSI 
20c0: 68 65 61 64 65 72 73 20 2a 2f 0a 23 20 64 65 66  headers */.# def
20d0: 69 6e 65 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54  ine SQLITE_INT_T
20e0: 4f 5f 50 54 52 28 58 29 20 20 28 28 76 6f 69 64  O_PTR(X)  ((void
20f0: 2a 29 28 69 6e 74 70 74 72 5f 74 29 28 58 29 29  *)(intptr_t)(X))
2100: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
2110: 5f 50 54 52 5f 54 4f 5f 49 4e 54 28 58 29 20 20  _PTR_TO_INT(X)  
2120: 28 28 69 6e 74 29 28 69 6e 74 70 74 72 5f 74 29  ((int)(intptr_t)
2130: 28 58 29 29 0a 23 65 6c 73 65 20 20 20 20 20 20  (X)).#else      
2140: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2150: 20 20 20 20 2f 2a 20 47 65 6e 65 72 61 74 65 73      /* Generates
2160: 20 61 20 77 61 72 6e 69 6e 67 20 2d 20 62 75 74   a warning - but
2170: 20 69 74 20 61 6c 77 61 79 73 20 77 6f 72 6b 73   it always works
2180: 20 2a 2f 0a 23 20 64 65 66 69 6e 65 20 53 51 4c   */.# define SQL
2190: 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 58  ITE_INT_TO_PTR(X
21a0: 29 20 20 28 28 76 6f 69 64 2a 29 28 58 29 29 0a  )  ((void*)(X)).
21b0: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
21c0: 50 54 52 5f 54 4f 5f 49 4e 54 28 58 29 20 20 28  PTR_TO_INT(X)  (
21d0: 28 69 6e 74 29 28 58 29 29 0a 23 65 6e 64 69 66  (int)(X)).#endif
21e0: 0a 0a 2f 2a 0a 2a 2a 20 41 20 6d 61 63 72 6f 20  ../*.** A macro 
21f0: 74 6f 20 68 69 6e 74 20 74 6f 20 74 68 65 20 63  to hint to the c
2200: 6f 6d 70 69 6c 65 72 20 74 68 61 74 20 61 20 66  ompiler that a f
2210: 75 6e 63 74 69 6f 6e 20 73 68 6f 75 6c 64 20 6e  unction should n
2220: 6f 74 20 62 65 0a 2a 2a 20 69 6e 6c 69 6e 65 64  ot be.** inlined
2230: 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64  ..*/.#if defined
2240: 28 5f 5f 47 4e 55 43 5f 5f 29 0a 23 20 20 64 65  (__GNUC__).#  de
2250: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e 4f 49 4e  fine SQLITE_NOIN
2260: 4c 49 4e 45 20 20 5f 5f 61 74 74 72 69 62 75 74  LINE  __attribut
2270: 65 5f 5f 28 28 6e 6f 69 6e 6c 69 6e 65 29 29 0a  e__((noinline)).
2280: 23 65 6c 69 66 20 64 65 66 69 6e 65 64 28 5f 4d  #elif defined(_M
2290: 53 43 5f 56 45 52 29 20 26 26 20 5f 4d 53 43 5f  SC_VER) && _MSC_
22a0: 56 45 52 3e 3d 31 33 31 30 0a 23 20 20 64 65 66  VER>=1310.#  def
22b0: 69 6e 65 20 53 51 4c 49 54 45 5f 4e 4f 49 4e 4c  ine SQLITE_NOINL
22c0: 49 4e 45 20 20 5f 5f 64 65 63 6c 73 70 65 63 28  INE  __declspec(
22d0: 6e 6f 69 6e 6c 69 6e 65 29 0a 23 65 6c 73 65 0a  noinline).#else.
22e0: 23 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  #  define SQLITE
22f0: 5f 4e 4f 49 4e 4c 49 4e 45 0a 23 65 6e 64 69 66  _NOINLINE.#endif
2300: 0a 0a 2f 2a 0a 2a 2a 20 4d 61 6b 65 20 73 75 72  ../*.** Make sur
2310: 65 20 74 68 61 74 20 74 68 65 20 63 6f 6d 70 69  e that the compi
2320: 6c 65 72 20 69 6e 74 72 69 6e 73 69 63 73 20 77  ler intrinsics w
2330: 65 20 64 65 73 69 72 65 20 61 72 65 20 65 6e 61  e desire are ena
2340: 62 6c 65 64 20 77 68 65 6e 0a 2a 2a 20 63 6f 6d  bled when.** com
2350: 70 69 6c 69 6e 67 20 77 69 74 68 20 61 6e 20 61  piling with an a
2360: 70 70 72 6f 70 72 69 61 74 65 20 76 65 72 73 69  ppropriate versi
2370: 6f 6e 20 6f 66 20 4d 53 56 43 20 75 6e 6c 65 73  on of MSVC unles
2380: 73 20 70 72 65 76 65 6e 74 65 64 20 62 79 0a 2a  s prevented by.*
2390: 2a 20 74 68 65 20 53 51 4c 49 54 45 5f 44 49 53  * the SQLITE_DIS
23a0: 41 42 4c 45 5f 49 4e 54 52 49 4e 53 49 43 20 64  ABLE_INTRINSIC d
23b0: 65 66 69 6e 65 2e 0a 2a 2f 0a 23 69 66 20 21 64  efine..*/.#if !d
23c0: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 49  efined(SQLITE_DI
23d0: 53 41 42 4c 45 5f 49 4e 54 52 49 4e 53 49 43 29  SABLE_INTRINSIC)
23e0: 0a 23 20 20 69 66 20 64 65 66 69 6e 65 64 28 5f  .#  if defined(_
23f0: 4d 53 43 5f 56 45 52 29 20 26 26 20 5f 4d 53 43  MSC_VER) && _MSC
2400: 5f 56 45 52 3e 3d 31 34 30 30 0a 23 20 20 20 20  _VER>=1400.#    
2410: 69 66 20 21 64 65 66 69 6e 65 64 28 5f 57 49 4e  if !defined(_WIN
2420: 33 32 5f 57 43 45 29 0a 23 20 20 20 20 20 20 69  32_WCE).#      i
2430: 6e 63 6c 75 64 65 20 3c 69 6e 74 72 69 6e 2e 68  nclude <intrin.h
2440: 3e 0a 23 20 20 20 20 20 20 70 72 61 67 6d 61 20  >.#      pragma 
2450: 69 6e 74 72 69 6e 73 69 63 28 5f 62 79 74 65 73  intrinsic(_bytes
2460: 77 61 70 5f 75 73 68 6f 72 74 29 0a 23 20 20 20  wap_ushort).#   
2470: 20 20 20 70 72 61 67 6d 61 20 69 6e 74 72 69 6e     pragma intrin
2480: 73 69 63 28 5f 62 79 74 65 73 77 61 70 5f 75 6c  sic(_byteswap_ul
2490: 6f 6e 67 29 0a 23 20 20 20 20 20 20 70 72 61 67  ong).#      prag
24a0: 6d 61 20 69 6e 74 72 69 6e 73 69 63 28 5f 62 79  ma intrinsic(_by
24b0: 74 65 73 77 61 70 5f 75 69 6e 74 36 34 29 0a 23  teswap_uint64).#
24c0: 20 20 20 20 20 20 70 72 61 67 6d 61 20 69 6e 74        pragma int
24d0: 72 69 6e 73 69 63 28 5f 52 65 61 64 57 72 69 74  rinsic(_ReadWrit
24e0: 65 42 61 72 72 69 65 72 29 0a 23 20 20 20 20 65  eBarrier).#    e
24f0: 6c 73 65 0a 23 20 20 20 20 20 20 69 6e 63 6c 75  lse.#      inclu
2500: 64 65 20 3c 63 6d 6e 69 6e 74 72 69 6e 2e 68 3e  de <cmnintrin.h>
2510: 0a 23 20 20 20 20 65 6e 64 69 66 0a 23 20 20 65  .#    endif.#  e
2520: 6e 64 69 66 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  ndif.#endif../*.
2530: 2a 2a 20 54 68 65 20 53 51 4c 49 54 45 5f 54 48  ** The SQLITE_TH
2540: 52 45 41 44 53 41 46 45 20 6d 61 63 72 6f 20 6d  READSAFE macro m
2550: 75 73 74 20 62 65 20 64 65 66 69 6e 65 64 20 61  ust be defined a
2560: 73 20 30 2c 20 31 2c 20 6f 72 20 32 2e 0a 2a 2a  s 0, 1, or 2..**
2570: 20 30 20 6d 65 61 6e 73 20 6d 75 74 65 78 65 73   0 means mutexes
2580: 20 61 72 65 20 70 65 72 6d 61 6e 65 6e 74 6c 79   are permanently
2590: 20 64 69 73 61 62 6c 65 20 61 6e 64 20 74 68 65   disable and the
25a0: 20 6c 69 62 72 61 72 79 20 69 73 20 6e 65 76 65   library is neve
25b0: 72 0a 2a 2a 20 74 68 72 65 61 64 73 61 66 65 2e  r.** threadsafe.
25c0: 20 20 31 20 6d 65 61 6e 73 20 74 68 65 20 6c 69    1 means the li
25d0: 62 72 61 72 79 20 69 73 20 73 65 72 69 61 6c 69  brary is seriali
25e0: 7a 65 64 20 77 68 69 63 68 20 69 73 20 74 68 65  zed which is the
25f0: 20 68 69 67 68 65 73 74 0a 2a 2a 20 6c 65 76 65   highest.** leve
2600: 6c 20 6f 66 20 74 68 72 65 61 64 73 61 66 65 74  l of threadsafet
2610: 79 2e 20 20 32 20 6d 65 61 6e 73 20 74 68 65 20  y.  2 means the 
2620: 6c 69 62 72 61 72 79 20 69 73 20 6d 75 6c 74 69  library is multi
2630: 74 68 72 65 61 64 65 64 20 2d 20 6d 75 6c 74 69  threaded - multi
2640: 70 6c 65 0a 2a 2a 20 74 68 72 65 61 64 73 20 63  ple.** threads c
2650: 61 6e 20 75 73 65 20 53 51 4c 69 74 65 20 61 73  an use SQLite as
2660: 20 6c 6f 6e 67 20 61 73 20 6e 6f 20 74 77 6f 20   long as no two 
2670: 74 68 72 65 61 64 73 20 74 72 79 20 74 6f 20 75  threads try to u
2680: 73 65 20 74 68 65 20 73 61 6d 65 0a 2a 2a 20 64  se the same.** d
2690: 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
26a0: 6f 6e 20 61 74 20 74 68 65 20 73 61 6d 65 20 74  on at the same t
26b0: 69 6d 65 2e 0a 2a 2a 0a 2a 2a 20 4f 6c 64 65 72  ime..**.** Older
26c0: 20 76 65 72 73 69 6f 6e 73 20 6f 66 20 53 51 4c   versions of SQL
26d0: 69 74 65 20 75 73 65 64 20 61 6e 20 6f 70 74 69  ite used an opti
26e0: 6f 6e 61 6c 20 54 48 52 45 41 44 53 41 46 45 20  onal THREADSAFE 
26f0: 6d 61 63 72 6f 2e 0a 2a 2a 20 57 65 20 73 75 70  macro..** We sup
2700: 70 6f 72 74 20 74 68 61 74 20 66 6f 72 20 6c 65  port that for le
2710: 67 61 63 79 2e 0a 2a 2a 0a 2a 2a 20 54 6f 20 65  gacy..**.** To e
2720: 6e 73 75 72 65 20 74 68 61 74 20 74 68 65 20 63  nsure that the c
2730: 6f 72 72 65 63 74 20 76 61 6c 75 65 20 6f 66 20  orrect value of 
2740: 22 54 48 52 45 41 44 53 41 46 45 22 20 69 73 20  "THREADSAFE" is 
2750: 72 65 70 6f 72 74 65 64 20 77 68 65 6e 20 71 75  reported when qu
2760: 65 72 79 69 6e 67 0a 2a 2a 20 66 6f 72 20 63 6f  erying.** for co
2770: 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f  mpile-time optio
2780: 6e 73 20 61 74 20 72 75 6e 74 69 6d 65 20 28 65  ns at runtime (e
2790: 2e 67 2e 20 22 50 52 41 47 4d 41 20 63 6f 6d 70  .g. "PRAGMA comp
27a0: 69 6c 65 5f 6f 70 74 69 6f 6e 73 22 29 2c 20 74  ile_options"), t
27b0: 68 69 73 0a 2a 2a 20 6c 6f 67 69 63 20 69 73 20  his.** logic is 
27c0: 70 61 72 74 69 61 6c 6c 79 20 72 65 70 6c 69 63  partially replic
27d0: 61 74 65 64 20 69 6e 20 63 74 69 6d 65 2e 63 2e  ated in ctime.c.
27e0: 20 49 66 20 69 74 20 69 73 20 75 70 64 61 74 65   If it is update
27f0: 64 20 68 65 72 65 2c 20 69 74 20 73 68 6f 75 6c  d here, it shoul
2800: 64 0a 2a 2a 20 61 6c 73 6f 20 62 65 20 75 70 64  d.** also be upd
2810: 61 74 65 64 20 74 68 65 72 65 2e 0a 2a 2f 0a 23  ated there..*/.#
2820: 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  if !defined(SQLI
2830: 54 45 5f 54 48 52 45 41 44 53 41 46 45 29 0a 23  TE_THREADSAFE).#
2840: 20 69 66 20 64 65 66 69 6e 65 64 28 54 48 52 45   if defined(THRE
2850: 41 44 53 41 46 45 29 0a 23 20 20 20 64 65 66 69  ADSAFE).#   defi
2860: 6e 65 20 53 51 4c 49 54 45 5f 54 48 52 45 41 44  ne SQLITE_THREAD
2870: 53 41 46 45 20 54 48 52 45 41 44 53 41 46 45 0a  SAFE THREADSAFE.
2880: 23 20 65 6c 73 65 0a 23 20 20 20 64 65 66 69 6e  # else.#   defin
2890: 65 20 53 51 4c 49 54 45 5f 54 48 52 45 41 44 53  e SQLITE_THREADS
28a0: 41 46 45 20 31 20 2f 2a 20 49 4d 50 3a 20 52 2d  AFE 1 /* IMP: R-
28b0: 30 37 32 37 32 2d 32 32 33 30 39 20 2a 2f 0a 23  07272-22309 */.#
28c0: 20 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 0a 2f   endif.#endif../
28d0: 2a 0a 2a 2a 20 50 6f 77 65 72 73 61 66 65 20 6f  *.** Powersafe o
28e0: 76 65 72 77 72 69 74 65 20 69 73 20 6f 6e 20 62  verwrite is on b
28f0: 79 20 64 65 66 61 75 6c 74 2e 20 20 42 75 74 20  y default.  But 
2900: 63 61 6e 20 62 65 20 74 75 72 6e 65 64 20 6f 66  can be turned of
2910: 66 20 75 73 69 6e 67 0a 2a 2a 20 74 68 65 20 2d  f using.** the -
2920: 44 53 51 4c 49 54 45 5f 50 4f 57 45 52 53 41 46  DSQLITE_POWERSAF
2930: 45 5f 4f 56 45 52 57 52 49 54 45 3d 30 20 63 6f  E_OVERWRITE=0 co
2940: 6d 6d 61 6e 64 2d 6c 69 6e 65 20 6f 70 74 69 6f  mmand-line optio
2950: 6e 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51  n..*/.#ifndef SQ
2960: 4c 49 54 45 5f 50 4f 57 45 52 53 41 46 45 5f 4f  LITE_POWERSAFE_O
2970: 56 45 52 57 52 49 54 45 0a 23 20 64 65 66 69 6e  VERWRITE.# defin
2980: 65 20 53 51 4c 49 54 45 5f 50 4f 57 45 52 53 41  e SQLITE_POWERSA
2990: 46 45 5f 4f 56 45 52 57 52 49 54 45 20 31 0a 23  FE_OVERWRITE 1.#
29a0: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 45 56 49  endif../*.** EVI
29b0: 44 45 4e 43 45 2d 4f 46 3a 20 52 2d 32 35 37 31  DENCE-OF: R-2571
29c0: 35 2d 33 37 30 37 32 20 4d 65 6d 6f 72 79 20 61  5-37072 Memory a
29d0: 6c 6c 6f 63 61 74 69 6f 6e 20 73 74 61 74 69 73  llocation statis
29e0: 74 69 63 73 20 61 72 65 20 65 6e 61 62 6c 65 64  tics are enabled
29f0: 20 62 79 0a 2a 2a 20 64 65 66 61 75 6c 74 20 75   by.** default u
2a00: 6e 6c 65 73 73 20 53 51 4c 69 74 65 20 69 73 20  nless SQLite is 
2a10: 63 6f 6d 70 69 6c 65 64 20 77 69 74 68 20 53 51  compiled with SQ
2a20: 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d 45 4d  LITE_DEFAULT_MEM
2a30: 53 54 41 54 55 53 3d 30 20 69 6e 0a 2a 2a 20 77  STATUS=0 in.** w
2a40: 68 69 63 68 20 63 61 73 65 20 6d 65 6d 6f 72 79  hich case memory
2a50: 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 73 74 61 74   allocation stat
2a60: 69 73 74 69 63 73 20 61 72 65 20 64 69 73 61 62  istics are disab
2a70: 6c 65 64 20 62 79 20 64 65 66 61 75 6c 74 2e 0a  led by default..
2a80: 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28  */.#if !defined(
2a90: 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d  SQLITE_DEFAULT_M
2aa0: 45 4d 53 54 41 54 55 53 29 0a 23 20 64 65 66 69  EMSTATUS).# defi
2ab0: 6e 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c  ne SQLITE_DEFAUL
2ac0: 54 5f 4d 45 4d 53 54 41 54 55 53 20 31 0a 23 65  T_MEMSTATUS 1.#e
2ad0: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 45 78 61 63  ndif../*.** Exac
2ae0: 74 6c 79 20 6f 6e 65 20 6f 66 20 74 68 65 20 66  tly one of the f
2af0: 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 73 20  ollowing macros 
2b00: 6d 75 73 74 20 62 65 20 64 65 66 69 6e 65 64 20  must be defined 
2b10: 69 6e 20 6f 72 64 65 72 20 74 6f 0a 2a 2a 20 73  in order to.** s
2b20: 70 65 63 69 66 79 20 77 68 69 63 68 20 6d 65 6d  pecify which mem
2b30: 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 73  ory allocation s
2b40: 75 62 73 79 73 74 65 6d 20 74 6f 20 75 73 65 2e  ubsystem to use.
2b50: 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 51 4c 49 54  .**.**     SQLIT
2b60: 45 5f 53 59 53 54 45 4d 5f 4d 41 4c 4c 4f 43 20  E_SYSTEM_MALLOC 
2b70: 20 20 20 20 20 20 20 20 20 2f 2f 20 55 73 65 20           // Use 
2b80: 6e 6f 72 6d 61 6c 20 73 79 73 74 65 6d 20 6d 61  normal system ma
2b90: 6c 6c 6f 63 28 29 0a 2a 2a 20 20 20 20 20 53 51  lloc().**     SQ
2ba0: 4c 49 54 45 5f 57 49 4e 33 32 5f 4d 41 4c 4c 4f  LITE_WIN32_MALLO
2bb0: 43 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 55  C           // U
2bc0: 73 65 20 57 69 6e 33 32 20 6e 61 74 69 76 65 20  se Win32 native 
2bd0: 68 65 61 70 20 41 50 49 0a 2a 2a 20 20 20 20 20  heap API.**     
2be0: 53 51 4c 49 54 45 5f 5a 45 52 4f 5f 4d 41 4c 4c  SQLITE_ZERO_MALL
2bf0: 4f 43 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  OC            //
2c00: 20 55 73 65 20 61 20 73 74 75 62 20 61 6c 6c 6f   Use a stub allo
2c10: 63 61 74 6f 72 20 74 68 61 74 20 61 6c 77 61 79  cator that alway
2c20: 73 20 66 61 69 6c 73 0a 2a 2a 20 20 20 20 20 53  s fails.**     S
2c30: 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47 20 20  QLITE_MEMDEBUG  
2c40: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
2c50: 44 65 62 75 67 67 69 6e 67 20 76 65 72 73 69 6f  Debugging versio
2c60: 6e 20 6f 66 20 73 79 73 74 65 6d 20 6d 61 6c 6c  n of system mall
2c70: 6f 63 28 29 0a 2a 2a 0a 2a 2a 20 4f 6e 20 57 69  oc().**.** On Wi
2c80: 6e 64 6f 77 73 2c 20 69 66 20 74 68 65 20 53 51  ndows, if the SQ
2c90: 4c 49 54 45 5f 57 49 4e 33 32 5f 4d 41 4c 4c 4f  LITE_WIN32_MALLO
2ca0: 43 5f 56 41 4c 49 44 41 54 45 20 6d 61 63 72 6f  C_VALIDATE macro
2cb0: 20 69 73 20 64 65 66 69 6e 65 64 20 61 6e 64 20   is defined and 
2cc0: 74 68 65 0a 2a 2a 20 61 73 73 65 72 74 28 29 20  the.** assert() 
2cd0: 6d 61 63 72 6f 20 69 73 20 65 6e 61 62 6c 65 64  macro is enabled
2ce0: 2c 20 65 61 63 68 20 63 61 6c 6c 20 69 6e 74 6f  , each call into
2cf0: 20 74 68 65 20 57 69 6e 33 32 20 6e 61 74 69 76   the Win32 nativ
2d00: 65 20 68 65 61 70 20 73 75 62 73 79 73 74 65 6d  e heap subsystem
2d10: 0a 2a 2a 20 77 69 6c 6c 20 63 61 75 73 65 20 48  .** will cause H
2d20: 65 61 70 56 61 6c 69 64 61 74 65 20 74 6f 20 62  eapValidate to b
2d30: 65 20 63 61 6c 6c 65 64 2e 20 20 49 66 20 68 65  e called.  If he
2d40: 61 70 20 76 61 6c 69 64 61 74 69 6f 6e 20 73 68  ap validation sh
2d50: 6f 75 6c 64 20 66 61 69 6c 2c 20 61 6e 0a 2a 2a  ould fail, an.**
2d60: 20 61 73 73 65 72 74 69 6f 6e 20 77 69 6c 6c 20   assertion will 
2d70: 62 65 20 74 72 69 67 67 65 72 65 64 2e 0a 2a 2a  be triggered..**
2d80: 0a 2a 2a 20 49 66 20 6e 6f 6e 65 20 6f 66 20 74  .** If none of t
2d90: 68 65 20 61 62 6f 76 65 20 61 72 65 20 64 65 66  he above are def
2da0: 69 6e 65 64 2c 20 74 68 65 6e 20 73 65 74 20 53  ined, then set S
2db0: 51 4c 49 54 45 5f 53 59 53 54 45 4d 5f 4d 41 4c  QLITE_SYSTEM_MAL
2dc0: 4c 4f 43 20 61 73 0a 2a 2a 20 74 68 65 20 64 65  LOC as.** the de
2dd0: 66 61 75 6c 74 2e 0a 2a 2f 0a 23 69 66 20 64 65  fault..*/.#if de
2de0: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 53 59 53  fined(SQLITE_SYS
2df0: 54 45 4d 5f 4d 41 4c 4c 4f 43 29 20 5c 0a 20 20  TEM_MALLOC) \.  
2e00: 2b 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  + defined(SQLITE
2e10: 5f 57 49 4e 33 32 5f 4d 41 4c 4c 4f 43 29 20 5c  _WIN32_MALLOC) \
2e20: 0a 20 20 2b 20 64 65 66 69 6e 65 64 28 53 51 4c  .  + defined(SQL
2e30: 49 54 45 5f 5a 45 52 4f 5f 4d 41 4c 4c 4f 43 29  ITE_ZERO_MALLOC)
2e40: 20 5c 0a 20 20 2b 20 64 65 66 69 6e 65 64 28 53   \.  + defined(S
2e50: 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47 29 3e  QLITE_MEMDEBUG)>
2e60: 31 0a 23 20 65 72 72 6f 72 20 22 54 77 6f 20 6f  1.# error "Two o
2e70: 72 20 6d 6f 72 65 20 6f 66 20 74 68 65 20 66 6f  r more of the fo
2e80: 6c 6c 6f 77 69 6e 67 20 63 6f 6d 70 69 6c 65 2d  llowing compile-
2e90: 74 69 6d 65 20 63 6f 6e 66 69 67 75 72 61 74 69  time configurati
2ea0: 6f 6e 20 6f 70 74 69 6f 6e 73 5c 0a 20 61 72 65  on options\. are
2eb0: 20 64 65 66 69 6e 65 64 20 62 75 74 20 61 74 20   defined but at 
2ec0: 6d 6f 73 74 20 6f 6e 65 20 69 73 20 61 6c 6c 6f  most one is allo
2ed0: 77 65 64 3a 5c 0a 20 53 51 4c 49 54 45 5f 53 59  wed:\. SQLITE_SY
2ee0: 53 54 45 4d 5f 4d 41 4c 4c 4f 43 2c 20 53 51 4c  STEM_MALLOC, SQL
2ef0: 49 54 45 5f 57 49 4e 33 32 5f 4d 41 4c 4c 4f 43  ITE_WIN32_MALLOC
2f00: 2c 20 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55  , SQLITE_MEMDEBU
2f10: 47 2c 5c 0a 20 53 51 4c 49 54 45 5f 5a 45 52 4f  G,\. SQLITE_ZERO
2f20: 5f 4d 41 4c 4c 4f 43 22 0a 23 65 6e 64 69 66 0a  _MALLOC".#endif.
2f30: 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49  #if defined(SQLI
2f40: 54 45 5f 53 59 53 54 45 4d 5f 4d 41 4c 4c 4f 43  TE_SYSTEM_MALLOC
2f50: 29 20 5c 0a 20 20 2b 20 64 65 66 69 6e 65 64 28  ) \.  + defined(
2f60: 53 51 4c 49 54 45 5f 57 49 4e 33 32 5f 4d 41 4c  SQLITE_WIN32_MAL
2f70: 4c 4f 43 29 20 5c 0a 20 20 2b 20 64 65 66 69 6e  LOC) \.  + defin
2f80: 65 64 28 53 51 4c 49 54 45 5f 5a 45 52 4f 5f 4d  ed(SQLITE_ZERO_M
2f90: 41 4c 4c 4f 43 29 20 5c 0a 20 20 2b 20 64 65 66  ALLOC) \.  + def
2fa0: 69 6e 65 64 28 53 51 4c 49 54 45 5f 4d 45 4d 44  ined(SQLITE_MEMD
2fb0: 45 42 55 47 29 3d 3d 30 0a 23 20 64 65 66 69 6e  EBUG)==0.# defin
2fc0: 65 20 53 51 4c 49 54 45 5f 53 59 53 54 45 4d 5f  e SQLITE_SYSTEM_
2fd0: 4d 41 4c 4c 4f 43 20 31 0a 23 65 6e 64 69 66 0a  MALLOC 1.#endif.
2fe0: 0a 2f 2a 0a 2a 2a 20 49 66 20 53 51 4c 49 54 45  ./*.** If SQLITE
2ff0: 5f 4d 41 4c 4c 4f 43 5f 53 4f 46 54 5f 4c 49 4d  _MALLOC_SOFT_LIM
3000: 49 54 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20  IT is not zero, 
3010: 74 68 65 6e 20 74 72 79 20 74 6f 20 6b 65 65 70  then try to keep
3020: 20 74 68 65 0a 2a 2a 20 73 69 7a 65 73 20 6f 66   the.** sizes of
3030: 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69   memory allocati
3040: 6f 6e 73 20 62 65 6c 6f 77 20 74 68 69 73 20 76  ons below this v
3050: 61 6c 75 65 20 77 68 65 72 65 20 70 6f 73 73 69  alue where possi
3060: 62 6c 65 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66  ble..*/.#if !def
3070: 69 6e 65 64 28 53 51 4c 49 54 45 5f 4d 41 4c 4c  ined(SQLITE_MALL
3080: 4f 43 5f 53 4f 46 54 5f 4c 49 4d 49 54 29 0a 23  OC_SOFT_LIMIT).#
3090: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d   define SQLITE_M
30a0: 41 4c 4c 4f 43 5f 53 4f 46 54 5f 4c 49 4d 49 54  ALLOC_SOFT_LIMIT
30b0: 20 31 30 32 34 0a 23 65 6e 64 69 66 0a 0a 2f 2a   1024.#endif../*
30c0: 0a 2a 2a 20 57 65 20 6e 65 65 64 20 74 6f 20 64  .** We need to d
30d0: 65 66 69 6e 65 20 5f 58 4f 50 45 4e 5f 53 4f 55  efine _XOPEN_SOU
30e0: 52 43 45 20 61 73 20 66 6f 6c 6c 6f 77 73 20 69  RCE as follows i
30f0: 6e 20 6f 72 64 65 72 20 74 6f 20 65 6e 61 62 6c  n order to enabl
3100: 65 0a 2a 2a 20 72 65 63 75 72 73 69 76 65 20 6d  e.** recursive m
3110: 75 74 65 78 65 73 20 6f 6e 20 6d 6f 73 74 20 55  utexes on most U
3120: 6e 69 78 20 73 79 73 74 65 6d 73 20 61 6e 64 20  nix systems and 
3130: 66 63 68 6d 6f 64 28 29 20 6f 6e 20 4f 70 65 6e  fchmod() on Open
3140: 42 53 44 2e 0a 2a 2a 20 42 75 74 20 5f 58 4f 50  BSD..** But _XOP
3150: 45 4e 5f 53 4f 55 52 43 45 20 64 65 66 69 6e 65  EN_SOURCE define
3160: 20 63 61 75 73 65 73 20 70 72 6f 62 6c 65 6d 73   causes problems
3170: 20 66 6f 72 20 4d 61 63 20 4f 53 20 58 2c 20 73   for Mac OS X, s
3180: 6f 20 6f 6d 69 74 0a 2a 2a 20 69 74 2e 0a 2a 2f  o omit.** it..*/
3190: 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 5f 58  .#if !defined(_X
31a0: 4f 50 45 4e 5f 53 4f 55 52 43 45 29 20 26 26 20  OPEN_SOURCE) && 
31b0: 21 64 65 66 69 6e 65 64 28 5f 5f 44 41 52 57 49  !defined(__DARWI
31c0: 4e 5f 5f 29 20 26 26 20 21 64 65 66 69 6e 65 64  N__) && !defined
31d0: 28 5f 5f 41 50 50 4c 45 5f 5f 29 0a 23 20 20 64  (__APPLE__).#  d
31e0: 65 66 69 6e 65 20 5f 58 4f 50 45 4e 5f 53 4f 55  efine _XOPEN_SOU
31f0: 52 43 45 20 36 30 30 0a 23 65 6e 64 69 66 0a 0a  RCE 600.#endif..
3200: 2f 2a 0a 2a 2a 20 4e 44 45 42 55 47 20 61 6e 64  /*.** NDEBUG and
3210: 20 53 51 4c 49 54 45 5f 44 45 42 55 47 20 61 72   SQLITE_DEBUG ar
3220: 65 20 6f 70 70 6f 73 69 74 65 73 2e 20 20 49 74  e opposites.  It
3230: 20 73 68 6f 75 6c 64 20 61 6c 77 61 79 73 20 62   should always b
3240: 65 20 74 72 75 65 20 74 68 61 74 0a 2a 2a 20 64  e true that.** d
3250: 65 66 69 6e 65 64 28 4e 44 45 42 55 47 29 3d 3d  efined(NDEBUG)==
3260: 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
3270: 44 45 42 55 47 29 2e 20 20 49 66 20 74 68 69 73  DEBUG).  If this
3280: 20 69 73 20 6e 6f 74 20 63 75 72 72 65 6e 74 6c   is not currentl
3290: 79 20 74 72 75 65 2c 0a 2a 2a 20 6d 61 6b 65 20  y true,.** make 
32a0: 69 74 20 74 72 75 65 20 62 79 20 64 65 66 69 6e  it true by defin
32b0: 69 6e 67 20 6f 72 20 75 6e 64 65 66 69 6e 69 6e  ing or undefinin
32c0: 67 20 4e 44 45 42 55 47 2e 0a 2a 2a 0a 2a 2a 20  g NDEBUG..**.** 
32d0: 53 65 74 74 69 6e 67 20 4e 44 45 42 55 47 20 6d  Setting NDEBUG m
32e0: 61 6b 65 73 20 74 68 65 20 63 6f 64 65 20 73 6d  akes the code sm
32f0: 61 6c 6c 65 72 20 61 6e 64 20 66 61 73 74 65 72  aller and faster
3300: 20 62 79 20 64 69 73 61 62 6c 69 6e 67 20 74 68   by disabling th
3310: 65 0a 2a 2a 20 61 73 73 65 72 74 28 29 20 73 74  e.** assert() st
3320: 61 74 65 6d 65 6e 74 73 20 69 6e 20 74 68 65 20  atements in the 
3330: 63 6f 64 65 2e 20 20 53 6f 20 77 65 20 77 61 6e  code.  So we wan
3340: 74 20 74 68 65 20 64 65 66 61 75 6c 74 20 61 63  t the default ac
3350: 74 69 6f 6e 0a 2a 2a 20 74 6f 20 62 65 20 66 6f  tion.** to be fo
3360: 72 20 4e 44 45 42 55 47 20 74 6f 20 62 65 20 73  r NDEBUG to be s
3370: 65 74 20 61 6e 64 20 4e 44 45 42 55 47 20 74 6f  et and NDEBUG to
3380: 20 62 65 20 75 6e 64 65 66 69 6e 65 64 20 6f 6e   be undefined on
3390: 6c 79 20 69 66 20 53 51 4c 49 54 45 5f 44 45 42  ly if SQLITE_DEB
33a0: 55 47 0a 2a 2a 20 69 73 20 73 65 74 2e 20 20 54  UG.** is set.  T
33b0: 68 75 73 20 4e 44 45 42 55 47 20 62 65 63 6f 6d  hus NDEBUG becom
33c0: 65 73 20 61 6e 20 6f 70 74 2d 69 6e 20 72 61 74  es an opt-in rat
33d0: 68 65 72 20 74 68 61 6e 20 61 6e 20 6f 70 74 2d  her than an opt-
33e0: 6f 75 74 0a 2a 2a 20 66 65 61 74 75 72 65 2e 0a  out.** feature..
33f0: 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28  */.#if !defined(
3400: 4e 44 45 42 55 47 29 20 26 26 20 21 64 65 66 69  NDEBUG) && !defi
3410: 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47  ned(SQLITE_DEBUG
3420: 29 0a 23 20 64 65 66 69 6e 65 20 4e 44 45 42 55  ).# define NDEBU
3430: 47 20 31 0a 23 65 6e 64 69 66 0a 23 69 66 20 64  G 1.#endif.#if d
3440: 65 66 69 6e 65 64 28 4e 44 45 42 55 47 29 20 26  efined(NDEBUG) &
3450: 26 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  & defined(SQLITE
3460: 5f 44 45 42 55 47 29 0a 23 20 75 6e 64 65 66 20  _DEBUG).# undef 
3470: 4e 44 45 42 55 47 0a 23 65 6e 64 69 66 0a 0a 2f  NDEBUG.#endif../
3480: 2a 0a 2a 2a 20 45 6e 61 62 6c 65 20 53 51 4c 49  *.** Enable SQLI
3490: 54 45 5f 45 4e 41 42 4c 45 5f 45 58 50 4c 41 49  TE_ENABLE_EXPLAI
34a0: 4e 5f 43 4f 4d 4d 45 4e 54 53 20 69 66 20 53 51  N_COMMENTS if SQ
34b0: 4c 49 54 45 5f 44 45 42 55 47 20 69 73 20 74 75  LITE_DEBUG is tu
34c0: 72 6e 65 64 20 6f 6e 2e 0a 2a 2f 0a 23 69 66 20  rned on..*/.#if 
34d0: 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
34e0: 45 4e 41 42 4c 45 5f 45 58 50 4c 41 49 4e 5f 43  ENABLE_EXPLAIN_C
34f0: 4f 4d 4d 45 4e 54 53 29 20 26 26 20 64 65 66 69  OMMENTS) && defi
3500: 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47  ned(SQLITE_DEBUG
3510: 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  ).# define SQLIT
3520: 45 5f 45 4e 41 42 4c 45 5f 45 58 50 4c 41 49 4e  E_ENABLE_EXPLAIN
3530: 5f 43 4f 4d 4d 45 4e 54 53 20 31 0a 23 65 6e 64  _COMMENTS 1.#end
3540: 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 74 65  if../*.** The te
3550: 73 74 63 61 73 65 28 29 20 6d 61 63 72 6f 20 69  stcase() macro i
3560: 73 20 75 73 65 64 20 74 6f 20 61 69 64 20 69 6e  s used to aid in
3570: 20 63 6f 76 65 72 61 67 65 20 74 65 73 74 69 6e   coverage testin
3580: 67 2e 20 20 57 68 65 6e 0a 2a 2a 20 64 6f 69 6e  g.  When.** doin
3590: 67 20 63 6f 76 65 72 61 67 65 20 74 65 73 74 69  g coverage testi
35a0: 6e 67 2c 20 74 68 65 20 63 6f 6e 64 69 74 69 6f  ng, the conditio
35b0: 6e 20 69 6e 73 69 64 65 20 74 68 65 20 61 72 67  n inside the arg
35c0: 75 6d 65 6e 74 20 74 6f 0a 2a 2a 20 74 65 73 74  ument to.** test
35d0: 63 61 73 65 28 29 20 6d 75 73 74 20 62 65 20 65  case() must be e
35e0: 76 61 6c 75 61 74 65 64 20 62 6f 74 68 20 74 72  valuated both tr
35f0: 75 65 20 61 6e 64 20 66 61 6c 73 65 20 69 6e 20  ue and false in 
3600: 6f 72 64 65 72 20 74 6f 0a 2a 2a 20 67 65 74 20  order to.** get 
3610: 66 75 6c 6c 20 62 72 61 6e 63 68 20 63 6f 76 65  full branch cove
3620: 72 61 67 65 2e 20 20 54 68 65 20 74 65 73 74 63  rage.  The testc
3630: 61 73 65 28 29 20 6d 61 63 72 6f 20 69 73 20 69  ase() macro is i
3640: 6e 73 65 72 74 65 64 0a 2a 2a 20 74 6f 20 68 65  nserted.** to he
3650: 6c 70 20 65 6e 73 75 72 65 20 61 64 65 71 75 61  lp ensure adequa
3660: 74 65 20 74 65 73 74 20 63 6f 76 65 72 61 67 65  te test coverage
3670: 20 69 6e 20 70 6c 61 63 65 73 20 77 68 65 72 65   in places where
3680: 20 73 69 6d 70 6c 65 0a 2a 2a 20 63 6f 6e 64 69   simple.** condi
3690: 74 69 6f 6e 2f 64 65 63 69 73 69 6f 6e 20 63 6f  tion/decision co
36a0: 76 65 72 61 67 65 20 69 73 20 69 6e 61 64 65 71  verage is inadeq
36b0: 75 61 74 65 2e 20 20 46 6f 72 20 65 78 61 6d 70  uate.  For examp
36c0: 6c 65 2c 20 74 65 73 74 63 61 73 65 28 29 0a 2a  le, testcase().*
36d0: 2a 20 63 61 6e 20 62 65 20 75 73 65 64 20 74 6f  * can be used to
36e0: 20 6d 61 6b 65 20 73 75 72 65 20 62 6f 75 6e 64   make sure bound
36f0: 61 72 79 20 76 61 6c 75 65 73 20 61 72 65 20 74  ary values are t
3700: 65 73 74 65 64 2e 20 20 46 6f 72 0a 2a 2a 20 62  ested.  For.** b
3710: 69 74 6d 61 73 6b 20 74 65 73 74 73 2c 20 74 65  itmask tests, te
3720: 73 74 63 61 73 65 28 29 20 63 61 6e 20 62 65 20  stcase() can be 
3730: 75 73 65 64 20 74 6f 20 6d 61 6b 65 20 73 75 72  used to make sur
3740: 65 20 65 61 63 68 20 62 69 74 0a 2a 2a 20 69 73  e each bit.** is
3750: 20 73 69 67 6e 69 66 69 63 61 6e 74 20 61 6e 64   significant and
3760: 20 75 73 65 64 20 61 74 20 6c 65 61 73 74 20 6f   used at least o
3770: 6e 63 65 2e 20 20 4f 6e 20 73 77 69 74 63 68 20  nce.  On switch 
3780: 73 74 61 74 65 6d 65 6e 74 73 0a 2a 2a 20 77 68  statements.** wh
3790: 65 72 65 20 6d 75 6c 74 69 70 6c 65 20 63 61 73  ere multiple cas
37a0: 65 73 20 67 6f 20 74 6f 20 74 68 65 20 73 61 6d  es go to the sam
37b0: 65 20 62 6c 6f 63 6b 20 6f 66 20 63 6f 64 65 2c  e block of code,
37c0: 20 74 65 73 74 63 61 73 65 28 29 0a 2a 2a 20 63   testcase().** c
37d0: 61 6e 20 69 6e 73 75 72 65 20 74 68 61 74 20 61  an insure that a
37e0: 6c 6c 20 63 61 73 65 73 20 61 72 65 20 65 76 61  ll cases are eva
37f0: 6c 75 61 74 65 64 2e 0a 2a 2a 0a 2a 2f 0a 23 69  luated..**.*/.#i
3800: 66 64 65 66 20 53 51 4c 49 54 45 5f 43 4f 56 45  fdef SQLITE_COVE
3810: 52 41 47 45 5f 54 45 53 54 0a 20 20 76 6f 69 64  RAGE_TEST.  void
3820: 20 73 71 6c 69 74 65 33 43 6f 76 65 72 61 67 65   sqlite3Coverage
3830: 28 69 6e 74 29 3b 0a 23 20 64 65 66 69 6e 65 20  (int);.# define 
3840: 74 65 73 74 63 61 73 65 28 58 29 20 20 69 66 28  testcase(X)  if(
3850: 20 58 20 29 7b 20 73 71 6c 69 74 65 33 43 6f 76   X ){ sqlite3Cov
3860: 65 72 61 67 65 28 5f 5f 4c 49 4e 45 5f 5f 29 3b  erage(__LINE__);
3870: 20 7d 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e   }.#else.# defin
3880: 65 20 74 65 73 74 63 61 73 65 28 58 29 0a 23 65  e testcase(X).#e
3890: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  ndif../*.** The 
38a0: 54 45 53 54 4f 4e 4c 59 20 6d 61 63 72 6f 20 69  TESTONLY macro i
38b0: 73 20 75 73 65 64 20 74 6f 20 65 6e 63 6c 6f 73  s used to enclos
38c0: 65 20 76 61 72 69 61 62 6c 65 20 64 65 63 6c 61  e variable decla
38d0: 72 61 74 69 6f 6e 73 20 6f 72 0a 2a 2a 20 6f 74  rations or.** ot
38e0: 68 65 72 20 62 69 74 73 20 6f 66 20 63 6f 64 65  her bits of code
38f0: 20 74 68 61 74 20 61 72 65 20 6e 65 65 64 65 64   that are needed
3900: 20 74 6f 20 73 75 70 70 6f 72 74 20 74 68 65 20   to support the 
3910: 61 72 67 75 6d 65 6e 74 73 0a 2a 2a 20 77 69 74  arguments.** wit
3920: 68 69 6e 20 74 65 73 74 63 61 73 65 28 29 20 61  hin testcase() a
3930: 6e 64 20 61 73 73 65 72 74 28 29 20 6d 61 63 72  nd assert() macr
3940: 6f 73 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69  os..*/.#if !defi
3950: 6e 65 64 28 4e 44 45 42 55 47 29 20 7c 7c 20 64  ned(NDEBUG) || d
3960: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 43 4f  efined(SQLITE_CO
3970: 56 45 52 41 47 45 5f 54 45 53 54 29 0a 23 20 64  VERAGE_TEST).# d
3980: 65 66 69 6e 65 20 54 45 53 54 4f 4e 4c 59 28 58  efine TESTONLY(X
3990: 29 20 20 58 0a 23 65 6c 73 65 0a 23 20 64 65 66  )  X.#else.# def
39a0: 69 6e 65 20 54 45 53 54 4f 4e 4c 59 28 58 29 0a  ine TESTONLY(X).
39b0: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 53 6f  #endif../*.** So
39c0: 6d 65 74 69 6d 65 73 20 77 65 20 6e 65 65 64 20  metimes we need 
39d0: 61 20 73 6d 61 6c 6c 20 61 6d 6f 75 6e 74 20 6f  a small amount o
39e0: 66 20 63 6f 64 65 20 73 75 63 68 20 61 73 20 61  f code such as a
39f0: 20 76 61 72 69 61 62 6c 65 20 69 6e 69 74 69 61   variable initia
3a00: 6c 69 7a 61 74 69 6f 6e 0a 2a 2a 20 74 6f 20 73  lization.** to s
3a10: 65 74 75 70 20 66 6f 72 20 61 20 6c 61 74 65 72  etup for a later
3a20: 20 61 73 73 65 72 74 28 29 20 73 74 61 74 65 6d   assert() statem
3a30: 65 6e 74 2e 20 20 57 65 20 64 6f 20 6e 6f 74 20  ent.  We do not 
3a40: 77 61 6e 74 20 74 68 69 73 20 63 6f 64 65 20 74  want this code t
3a50: 6f 0a 2a 2a 20 61 70 70 65 61 72 20 77 68 65 6e  o.** appear when
3a60: 20 61 73 73 65 72 74 28 29 20 69 73 20 64 69 73   assert() is dis
3a70: 61 62 6c 65 64 2e 20 20 54 68 65 20 66 6f 6c 6c  abled.  The foll
3a80: 6f 77 69 6e 67 20 6d 61 63 72 6f 20 69 73 20 74  owing macro is t
3a90: 68 65 72 65 66 6f 72 65 0a 2a 2a 20 75 73 65 64  herefore.** used
3aa0: 20 74 6f 20 63 6f 6e 74 61 69 6e 20 74 68 61 74   to contain that
3ab0: 20 73 65 74 75 70 20 63 6f 64 65 2e 20 20 54 68   setup code.  Th
3ac0: 65 20 22 56 56 41 22 20 61 63 72 6f 6e 79 6d 20  e "VVA" acronym 
3ad0: 73 74 61 6e 64 73 20 66 6f 72 0a 2a 2a 20 22 56  stands for.** "V
3ae0: 65 72 69 66 69 63 61 74 69 6f 6e 2c 20 56 61 6c  erification, Val
3af0: 69 64 61 74 69 6f 6e 2c 20 61 6e 64 20 41 63 63  idation, and Acc
3b00: 72 65 64 69 74 61 74 69 6f 6e 22 2e 20 20 49 6e  reditation".  In
3b10: 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68   other words, th
3b20: 65 0a 2a 2a 20 63 6f 64 65 20 77 69 74 68 69 6e  e.** code within
3b30: 20 56 56 41 5f 4f 4e 4c 59 28 29 20 77 69 6c 6c   VVA_ONLY() will
3b40: 20 6f 6e 6c 79 20 72 75 6e 20 64 75 72 69 6e 67   only run during
3b50: 20 76 65 72 69 66 69 63 61 74 69 6f 6e 20 70 72   verification pr
3b60: 6f 63 65 73 73 65 73 2e 0a 2a 2f 0a 23 69 66 6e  ocesses..*/.#ifn
3b70: 64 65 66 20 4e 44 45 42 55 47 0a 23 20 64 65 66  def NDEBUG.# def
3b80: 69 6e 65 20 56 56 41 5f 4f 4e 4c 59 28 58 29 20  ine VVA_ONLY(X) 
3b90: 20 58 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e   X.#else.# defin
3ba0: 65 20 56 56 41 5f 4f 4e 4c 59 28 58 29 0a 23 65  e VVA_ONLY(X).#e
3bb0: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  ndif../*.** The 
3bc0: 41 4c 57 41 59 53 20 61 6e 64 20 4e 45 56 45 52  ALWAYS and NEVER
3bd0: 20 6d 61 63 72 6f 73 20 73 75 72 72 6f 75 6e 64   macros surround
3be0: 20 62 6f 6f 6c 65 61 6e 20 65 78 70 72 65 73 73   boolean express
3bf0: 69 6f 6e 73 20 77 68 69 63 68 0a 2a 2a 20 61 72  ions which.** ar
3c00: 65 20 69 6e 74 65 6e 64 65 64 20 74 6f 20 61 6c  e intended to al
3c10: 77 61 79 73 20 62 65 20 74 72 75 65 20 6f 72 20  ways be true or 
3c20: 66 61 6c 73 65 2c 20 72 65 73 70 65 63 74 69 76  false, respectiv
3c30: 65 6c 79 2e 20 20 53 75 63 68 0a 2a 2a 20 65 78  ely.  Such.** ex
3c40: 70 72 65 73 73 69 6f 6e 73 20 63 6f 75 6c 64 20  pressions could 
3c50: 62 65 20 6f 6d 69 74 74 65 64 20 66 72 6f 6d 20  be omitted from 
3c60: 74 68 65 20 63 6f 64 65 20 63 6f 6d 70 6c 65 74  the code complet
3c70: 65 6c 79 2e 20 20 42 75 74 20 74 68 65 79 0a 2a  ely.  But they.*
3c80: 2a 20 61 72 65 20 69 6e 63 6c 75 64 65 64 20 69  * are included i
3c90: 6e 20 61 20 66 65 77 20 63 61 73 65 73 20 69 6e  n a few cases in
3ca0: 20 6f 72 64 65 72 20 74 6f 20 65 6e 68 61 6e 63   order to enhanc
3cb0: 65 20 74 68 65 20 72 65 73 69 6c 69 65 6e 63 65  e the resilience
3cc0: 0a 2a 2a 20 6f 66 20 53 51 4c 69 74 65 20 74 6f  .** of SQLite to
3cd0: 20 75 6e 65 78 70 65 63 74 65 64 20 62 65 68 61   unexpected beha
3ce0: 76 69 6f 72 20 2d 20 74 6f 20 6d 61 6b 65 20 74  vior - to make t
3cf0: 68 65 20 63 6f 64 65 20 22 73 65 6c 66 2d 68 65  he code "self-he
3d00: 61 6c 69 6e 67 22 0a 2a 2a 20 6f 72 20 22 64 75  aling".** or "du
3d10: 63 74 69 6c 65 22 20 72 61 74 68 65 72 20 74 68  ctile" rather th
3d20: 61 6e 20 62 65 69 6e 67 20 22 62 72 69 74 74 6c  an being "brittl
3d30: 65 22 20 61 6e 64 20 63 72 61 73 68 69 6e 67 20  e" and crashing 
3d40: 61 74 20 74 68 65 20 66 69 72 73 74 0a 2a 2a 20  at the first.** 
3d50: 68 69 6e 74 20 6f 66 20 75 6e 70 6c 61 6e 6e 65  hint of unplanne
3d60: 64 20 62 65 68 61 76 69 6f 72 2e 0a 2a 2a 0a 2a  d behavior..**.*
3d70: 2a 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73  * In other words
3d80: 2c 20 41 4c 57 41 59 53 20 61 6e 64 20 4e 45 56  , ALWAYS and NEV
3d90: 45 52 20 61 72 65 20 61 64 64 65 64 20 66 6f 72  ER are added for
3da0: 20 64 65 66 65 6e 73 69 76 65 20 63 6f 64 65 2e   defensive code.
3db0: 0a 2a 2a 0a 2a 2a 20 57 68 65 6e 20 64 6f 69 6e  .**.** When doin
3dc0: 67 20 63 6f 76 65 72 61 67 65 20 74 65 73 74 69  g coverage testi
3dd0: 6e 67 20 41 4c 57 41 59 53 20 61 6e 64 20 4e 45  ng ALWAYS and NE
3de0: 56 45 52 20 61 72 65 20 68 61 72 64 2d 63 6f 64  VER are hard-cod
3df0: 65 64 20 74 6f 0a 2a 2a 20 62 65 20 74 72 75 65  ed to.** be true
3e00: 20 61 6e 64 20 66 61 6c 73 65 20 73 6f 20 74 68   and false so th
3e10: 61 74 20 74 68 65 20 75 6e 72 65 61 63 68 61 62  at the unreachab
3e20: 6c 65 20 63 6f 64 65 20 74 68 65 79 20 73 70 65  le code they spe
3e30: 63 69 66 79 20 77 69 6c 6c 0a 2a 2a 20 6e 6f 74  cify will.** not
3e40: 20 62 65 20 63 6f 75 6e 74 65 64 20 61 73 20 75   be counted as u
3e50: 6e 74 65 73 74 65 64 20 63 6f 64 65 2e 0a 2a 2f  ntested code..*/
3e60: 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c  .#if defined(SQL
3e70: 49 54 45 5f 43 4f 56 45 52 41 47 45 5f 54 45 53  ITE_COVERAGE_TES
3e80: 54 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 53 51  T) || defined(SQ
3e90: 4c 49 54 45 5f 4d 55 54 41 54 49 4f 4e 5f 54 45  LITE_MUTATION_TE
3ea0: 53 54 29 0a 23 20 64 65 66 69 6e 65 20 41 4c 57  ST).# define ALW
3eb0: 41 59 53 28 58 29 20 20 20 20 20 20 28 31 29 0a  AYS(X)      (1).
3ec0: 23 20 64 65 66 69 6e 65 20 4e 45 56 45 52 28 58  # define NEVER(X
3ed0: 29 20 20 20 20 20 20 20 28 30 29 0a 23 65 6c 69  )       (0).#eli
3ee0: 66 20 21 64 65 66 69 6e 65 64 28 4e 44 45 42 55  f !defined(NDEBU
3ef0: 47 29 0a 23 20 64 65 66 69 6e 65 20 41 4c 57 41  G).# define ALWA
3f00: 59 53 28 58 29 20 20 20 20 20 20 28 28 58 29 3f  YS(X)      ((X)?
3f10: 31 3a 28 61 73 73 65 72 74 28 30 29 2c 30 29 29  1:(assert(0),0))
3f20: 0a 23 20 64 65 66 69 6e 65 20 4e 45 56 45 52 28  .# define NEVER(
3f30: 58 29 20 20 20 20 20 20 20 28 28 58 29 3f 28 61  X)       ((X)?(a
3f40: 73 73 65 72 74 28 30 29 2c 31 29 3a 30 29 0a 23  ssert(0),1):0).#
3f50: 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 41 4c  else.# define AL
3f60: 57 41 59 53 28 58 29 20 20 20 20 20 20 28 58 29  WAYS(X)      (X)
3f70: 0a 23 20 64 65 66 69 6e 65 20 4e 45 56 45 52 28  .# define NEVER(
3f80: 58 29 20 20 20 20 20 20 20 28 58 29 0a 23 65 6e  X)       (X).#en
3f90: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 53 6f 6d 65 20  dif../*.** Some 
3fa0: 63 6f 6e 64 69 74 69 6f 6e 61 6c 73 20 61 72 65  conditionals are
3fb0: 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73 20 6f   optimizations o
3fc0: 6e 6c 79 2e 20 20 49 6e 20 6f 74 68 65 72 20 77  nly.  In other w
3fd0: 6f 72 64 73 2c 20 69 66 20 74 68 65 0a 2a 2a 20  ords, if the.** 
3fe0: 63 6f 6e 64 69 74 69 6f 6e 61 6c 73 20 61 72 65  conditionals are
3ff0: 20 72 65 70 6c 61 63 65 64 20 77 69 74 68 20 61   replaced with a
4000: 20 63 6f 6e 73 74 61 6e 74 20 31 20 28 74 72 75   constant 1 (tru
4010: 65 29 20 6f 72 20 30 20 28 66 61 6c 73 65 29 20  e) or 0 (false) 
4020: 74 68 65 6e 0a 2a 2a 20 74 68 65 20 63 6f 72 72  then.** the corr
4030: 65 63 74 20 61 6e 73 77 65 72 20 69 73 20 73 74  ect answer is st
4040: 69 6c 6c 20 6f 62 74 61 69 6e 65 64 2c 20 74 68  ill obtained, th
4050: 6f 75 67 68 20 70 65 72 68 61 70 73 20 6e 6f 74  ough perhaps not
4060: 20 61 73 20 71 75 69 63 6b 6c 79 2e 0a 2a 2a 0a   as quickly..**.
4070: 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  ** The following
4080: 20 6d 61 63 72 6f 73 20 6d 61 72 6b 20 74 68 65   macros mark the
4090: 73 65 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73  se optimizations
40a0: 20 63 6f 6e 64 69 74 69 6f 6e 61 6c 73 2e 0a 2a   conditionals..*
40b0: 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51  /.#if defined(SQ
40c0: 4c 49 54 45 5f 4d 55 54 41 54 49 4f 4e 5f 54 45  LITE_MUTATION_TE
40d0: 53 54 29 0a 23 20 64 65 66 69 6e 65 20 4f 4b 5f  ST).# define OK_
40e0: 49 46 5f 41 4c 57 41 59 53 5f 54 52 55 45 28 58  IF_ALWAYS_TRUE(X
40f0: 29 20 20 28 31 29 0a 23 20 64 65 66 69 6e 65 20  )  (1).# define 
4100: 4f 4b 5f 49 46 5f 41 4c 57 41 59 53 5f 46 41 4c  OK_IF_ALWAYS_FAL
4110: 53 45 28 58 29 20 28 30 29 0a 23 65 6c 73 65 0a  SE(X) (0).#else.
4120: 23 20 64 65 66 69 6e 65 20 4f 4b 5f 49 46 5f 41  # define OK_IF_A
4130: 4c 57 41 59 53 5f 54 52 55 45 28 58 29 20 20 28  LWAYS_TRUE(X)  (
4140: 58 29 0a 23 20 64 65 66 69 6e 65 20 4f 4b 5f 49  X).# define OK_I
4150: 46 5f 41 4c 57 41 59 53 5f 46 41 4c 53 45 28 58  F_ALWAYS_FALSE(X
4160: 29 20 28 58 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a  ) (X).#endif../*
4170: 0a 2a 2a 20 53 6f 6d 65 20 6d 61 6c 6c 6f 63 20  .** Some malloc 
4180: 66 61 69 6c 75 72 65 73 20 61 72 65 20 6f 6e 6c  failures are onl
4190: 79 20 70 6f 73 73 69 62 6c 65 20 69 66 20 53 51  y possible if SQ
41a0: 4c 49 54 45 5f 54 45 53 54 5f 52 45 41 4c 4c 4f  LITE_TEST_REALLO
41b0: 43 5f 53 54 52 45 53 53 20 69 73 0a 2a 2a 20 64  C_STRESS is.** d
41c0: 65 66 69 6e 65 64 2e 20 20 57 65 20 6e 65 65 64  efined.  We need
41d0: 20 74 6f 20 64 65 66 65 6e 64 20 61 67 61 69 6e   to defend again
41e0: 73 74 20 74 68 6f 73 65 20 66 61 69 6c 75 72 65  st those failure
41f0: 73 20 77 68 65 6e 20 74 65 73 74 69 6e 67 20 77  s when testing w
4200: 69 74 68 0a 2a 2a 20 53 51 4c 49 54 45 5f 54 45  ith.** SQLITE_TE
4210: 53 54 5f 52 45 41 4c 4c 4f 43 5f 53 54 52 45 53  ST_REALLOC_STRES
4220: 53 2c 20 62 75 74 20 77 65 20 64 6f 6e 27 74 20  S, but we don't 
4230: 77 61 6e 74 20 74 68 65 20 75 6e 72 65 61 63 68  want the unreach
4240: 61 62 6c 65 20 62 72 61 6e 63 68 65 73 0a 2a 2a  able branches.**
4250: 20 64 75 72 69 6e 67 20 61 20 6e 6f 72 6d 61 6c   during a normal
4260: 20 62 75 69 6c 64 2e 20 20 54 68 65 20 66 6f 6c   build.  The fol
4270: 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 20 63 61 6e  lowing macro can
4280: 20 62 65 20 75 73 65 64 20 74 6f 20 64 69 73 61   be used to disa
4290: 62 6c 65 20 74 65 73 74 73 0a 2a 2a 20 74 68 61  ble tests.** tha
42a0: 74 20 61 72 65 20 61 6c 77 61 79 73 20 66 61 6c  t are always fal
42b0: 73 65 20 65 78 63 65 70 74 20 77 68 65 6e 20 53  se except when S
42c0: 51 4c 49 54 45 5f 54 45 53 54 5f 52 45 41 4c 4c  QLITE_TEST_REALL
42d0: 4f 43 5f 53 54 52 45 53 53 20 69 73 20 73 65 74  OC_STRESS is set
42e0: 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64  ..*/.#if defined
42f0: 28 53 51 4c 49 54 45 5f 54 45 53 54 5f 52 45 41  (SQLITE_TEST_REA
4300: 4c 4c 4f 43 5f 53 54 52 45 53 53 29 0a 23 20 64  LLOC_STRESS).# d
4310: 65 66 69 6e 65 20 4f 4e 4c 59 5f 49 46 5f 52 45  efine ONLY_IF_RE
4320: 41 4c 4c 4f 43 5f 53 54 52 45 53 53 28 58 29 20  ALLOC_STRESS(X) 
4330: 20 28 58 29 0a 23 65 6c 69 66 20 21 64 65 66 69   (X).#elif !defi
4340: 6e 65 64 28 4e 44 45 42 55 47 29 0a 23 20 64 65  ned(NDEBUG).# de
4350: 66 69 6e 65 20 4f 4e 4c 59 5f 49 46 5f 52 45 41  fine ONLY_IF_REA
4360: 4c 4c 4f 43 5f 53 54 52 45 53 53 28 58 29 20 20  LLOC_STRESS(X)  
4370: 28 28 58 29 3f 28 61 73 73 65 72 74 28 30 29 2c  ((X)?(assert(0),
4380: 31 29 3a 30 29 0a 23 65 6c 73 65 0a 23 20 64 65  1):0).#else.# de
4390: 66 69 6e 65 20 4f 4e 4c 59 5f 49 46 5f 52 45 41  fine ONLY_IF_REA
43a0: 4c 4c 4f 43 5f 53 54 52 45 53 53 28 58 29 20 20  LLOC_STRESS(X)  
43b0: 28 30 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  (0).#endif../*.*
43c0: 2a 20 44 65 63 6c 61 72 61 74 69 6f 6e 73 20 75  * Declarations u
43d0: 73 65 64 20 66 6f 72 20 74 72 61 63 69 6e 67 20  sed for tracing 
43e0: 74 68 65 20 6f 70 65 72 61 74 69 6e 67 20 73 79  the operating sy
43f0: 73 74 65 6d 20 69 6e 74 65 72 66 61 63 65 73 2e  stem interfaces.
4400: 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28  .*/.#if defined(
4410: 53 51 4c 49 54 45 5f 46 4f 52 43 45 5f 4f 53 5f  SQLITE_FORCE_OS_
4420: 54 52 41 43 45 29 20 7c 7c 20 64 65 66 69 6e 65  TRACE) || define
4430: 64 28 53 51 4c 49 54 45 5f 54 45 53 54 29 20 7c  d(SQLITE_TEST) |
4440: 7c 20 5c 0a 20 20 20 20 28 64 65 66 69 6e 65 64  | \.    (defined
4450: 28 53 51 4c 49 54 45 5f 44 45 42 55 47 29 20 26  (SQLITE_DEBUG) &
4460: 26 20 53 51 4c 49 54 45 5f 4f 53 5f 57 49 4e 29  & SQLITE_OS_WIN)
4470: 0a 20 20 65 78 74 65 72 6e 20 69 6e 74 20 73 71  .  extern int sq
4480: 6c 69 74 65 33 4f 53 54 72 61 63 65 3b 0a 23 20  lite3OSTrace;.# 
4490: 64 65 66 69 6e 65 20 4f 53 54 52 41 43 45 28 58  define OSTRACE(X
44a0: 29 20 20 20 20 20 20 20 20 20 20 69 66 28 20 73  )          if( s
44b0: 71 6c 69 74 65 33 4f 53 54 72 61 63 65 20 29 20  qlite3OSTrace ) 
44c0: 73 71 6c 69 74 65 33 44 65 62 75 67 50 72 69 6e  sqlite3DebugPrin
44d0: 74 66 20 58 0a 23 20 64 65 66 69 6e 65 20 53 51  tf X.# define SQ
44e0: 4c 49 54 45 5f 48 41 56 45 5f 4f 53 5f 54 52 41  LITE_HAVE_OS_TRA
44f0: 43 45 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e  CE.#else.# defin
4500: 65 20 4f 53 54 52 41 43 45 28 58 29 0a 23 20 75  e OSTRACE(X).# u
4510: 6e 64 65 66 20 20 53 51 4c 49 54 45 5f 48 41 56  ndef  SQLITE_HAV
4520: 45 5f 4f 53 5f 54 52 41 43 45 0a 23 65 6e 64 69  E_OS_TRACE.#endi
4530: 66 0a 0a 2f 2a 0a 2a 2a 20 49 73 20 74 68 65 20  f../*.** Is the 
4540: 73 71 6c 69 74 65 33 45 72 72 4e 61 6d 65 28 29  sqlite3ErrName()
4550: 20 66 75 6e 63 74 69 6f 6e 20 6e 65 65 64 65 64   function needed
4560: 20 69 6e 20 74 68 65 20 62 75 69 6c 64 3f 20 20   in the build?  
4570: 43 75 72 72 65 6e 74 6c 79 2c 0a 2a 2a 20 69 74  Currently,.** it
4580: 20 69 73 20 6e 65 65 64 65 64 20 62 79 20 22 6d   is needed by "m
4590: 75 74 65 78 5f 77 33 32 2e 63 22 20 28 77 68 65  utex_w32.c" (whe
45a0: 6e 20 64 65 62 75 67 67 69 6e 67 29 2c 20 22 6f  n debugging), "o
45b0: 73 5f 77 69 6e 2e 63 22 20 28 77 68 65 6e 0a 2a  s_win.c" (when.*
45c0: 2a 20 4f 53 54 52 41 43 45 20 69 73 20 65 6e 61  * OSTRACE is ena
45d0: 62 6c 65 64 29 2c 20 61 6e 64 20 62 79 20 73 65  bled), and by se
45e0: 76 65 72 61 6c 20 22 74 65 73 74 2a 2e 63 22 20  veral "test*.c" 
45f0: 66 69 6c 65 73 20 28 77 68 69 63 68 20 61 72 65  files (which are
4600: 0a 2a 2a 20 63 6f 6d 70 69 6c 65 64 20 75 73 69  .** compiled usi
4610: 6e 67 20 53 51 4c 49 54 45 5f 54 45 53 54 29 2e  ng SQLITE_TEST).
4620: 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28  .*/.#if defined(
4630: 53 51 4c 49 54 45 5f 48 41 56 45 5f 4f 53 5f 54  SQLITE_HAVE_OS_T
4640: 52 41 43 45 29 20 7c 7c 20 64 65 66 69 6e 65 64  RACE) || defined
4650: 28 53 51 4c 49 54 45 5f 54 45 53 54 29 20 7c 7c  (SQLITE_TEST) ||
4660: 20 5c 0a 20 20 20 20 28 64 65 66 69 6e 65 64 28   \.    (defined(
4670: 53 51 4c 49 54 45 5f 44 45 42 55 47 29 20 26 26  SQLITE_DEBUG) &&
4680: 20 53 51 4c 49 54 45 5f 4f 53 5f 57 49 4e 29 0a   SQLITE_OS_WIN).
4690: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
46a0: 4e 45 45 44 5f 45 52 52 5f 4e 41 4d 45 0a 23 65  NEED_ERR_NAME.#e
46b0: 6c 73 65 0a 23 20 75 6e 64 65 66 20 20 53 51 4c  lse.# undef  SQL
46c0: 49 54 45 5f 4e 45 45 44 5f 45 52 52 5f 4e 41 4d  ITE_NEED_ERR_NAM
46d0: 45 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  E.#endif../*.** 
46e0: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 45 58  SQLITE_ENABLE_EX
46f0: 50 4c 41 49 4e 5f 43 4f 4d 4d 45 4e 54 53 20 69  PLAIN_COMMENTS i
4700: 73 20 69 6e 63 6f 6d 70 61 74 69 62 6c 65 20 77  s incompatible w
4710: 69 74 68 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ith SQLITE_OMIT_
4720: 45 58 50 4c 41 49 4e 0a 2a 2f 0a 23 69 66 64 65  EXPLAIN.*/.#ifde
4730: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 45 58  f SQLITE_OMIT_EX
4740: 50 4c 41 49 4e 0a 23 20 75 6e 64 65 66 20 53 51  PLAIN.# undef SQ
4750: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 45 58 50 4c  LITE_ENABLE_EXPL
4760: 41 49 4e 5f 43 4f 4d 4d 45 4e 54 53 0a 23 65 6e  AIN_COMMENTS.#en
4770: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72  dif../*.** Retur
4780: 6e 20 74 72 75 65 20 28 6e 6f 6e 2d 7a 65 72 6f  n true (non-zero
4790: 29 20 69 66 20 74 68 65 20 69 6e 70 75 74 20 69  ) if the input i
47a0: 73 20 61 6e 20 69 6e 74 65 67 65 72 20 74 68 61  s an integer tha
47b0: 74 20 69 73 20 74 6f 6f 20 6c 61 72 67 65 0a 2a  t is too large.*
47c0: 2a 20 74 6f 20 66 69 74 20 69 6e 20 33 32 2d 62  * to fit in 32-b
47d0: 69 74 73 2e 20 20 54 68 69 73 20 6d 61 63 72 6f  its.  This macro
47e0: 20 69 73 20 75 73 65 64 20 69 6e 73 69 64 65 20   is used inside 
47f0: 6f 66 20 76 61 72 69 6f 75 73 20 74 65 73 74 63  of various testc
4800: 61 73 65 28 29 0a 2a 2a 20 6d 61 63 72 6f 73 20  ase().** macros 
4810: 74 6f 20 76 65 72 69 66 79 20 74 68 61 74 20 77  to verify that w
4820: 65 20 68 61 76 65 20 74 65 73 74 65 64 20 53 51  e have tested SQ
4830: 4c 69 74 65 20 66 6f 72 20 6c 61 72 67 65 2d 66  Lite for large-f
4840: 69 6c 65 20 73 75 70 70 6f 72 74 2e 0a 2a 2f 0a  ile support..*/.
4850: 23 64 65 66 69 6e 65 20 49 53 5f 42 49 47 5f 49  #define IS_BIG_I
4860: 4e 54 28 58 29 20 20 28 28 28 58 29 26 7e 28 69  NT(X)  (((X)&~(i
4870: 36 34 29 30 78 66 66 66 66 66 66 66 66 29 21 3d  64)0xffffffff)!=
4880: 30 29 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6d 61  0)../*.** The ma
4890: 63 72 6f 20 75 6e 6c 69 6b 65 6c 79 28 29 20 69  cro unlikely() i
48a0: 73 20 61 20 68 69 6e 74 20 74 68 61 74 20 73 75  s a hint that su
48b0: 72 72 6f 75 6e 64 73 20 61 20 62 6f 6f 6c 65 61  rrounds a boolea
48c0: 6e 0a 2a 2a 20 65 78 70 72 65 73 73 69 6f 6e 20  n.** expression 
48d0: 74 68 61 74 20 69 73 20 75 73 75 61 6c 6c 79 20  that is usually 
48e0: 66 61 6c 73 65 2e 20 20 4d 61 63 72 6f 20 6c 69  false.  Macro li
48f0: 6b 65 6c 79 28 29 20 73 75 72 72 6f 75 6e 64 73  kely() surrounds
4900: 0a 2a 2a 20 61 20 62 6f 6f 6c 65 61 6e 20 65 78  .** a boolean ex
4910: 70 72 65 73 73 69 6f 6e 20 74 68 61 74 20 69 73  pression that is
4920: 20 75 73 75 61 6c 6c 79 20 74 72 75 65 2e 20 20   usually true.  
4930: 54 68 65 73 65 20 68 69 6e 74 73 20 63 6f 75 6c  These hints coul
4940: 64 2c 0a 2a 2a 20 69 6e 20 74 68 65 6f 72 79 2c  d,.** in theory,
4950: 20 62 65 20 75 73 65 64 20 62 79 20 74 68 65 20   be used by the 
4960: 63 6f 6d 70 69 6c 65 72 20 74 6f 20 67 65 6e 65  compiler to gene
4970: 72 61 74 65 20 62 65 74 74 65 72 20 63 6f 64 65  rate better code
4980: 2c 20 62 75 74 0a 2a 2a 20 63 75 72 72 65 6e 74  , but.** current
4990: 6c 79 20 74 68 65 79 20 61 72 65 20 6a 75 73 74  ly they are just
49a0: 20 63 6f 6d 6d 65 6e 74 73 20 66 6f 72 20 68 75   comments for hu
49b0: 6d 61 6e 20 72 65 61 64 65 72 73 2e 0a 2a 2f 0a  man readers..*/.
49c0: 23 64 65 66 69 6e 65 20 6c 69 6b 65 6c 79 28 58  #define likely(X
49d0: 29 20 20 20 20 28 58 29 0a 23 64 65 66 69 6e 65  )    (X).#define
49e0: 20 75 6e 6c 69 6b 65 6c 79 28 58 29 20 20 28 58   unlikely(X)  (X
49f0: 29 0a 0a 23 69 6e 63 6c 75 64 65 20 22 68 61 73  )..#include "has
4a00: 68 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20 22 70  h.h".#include "p
4a10: 61 72 73 65 2e 68 22 0a 23 69 6e 63 6c 75 64 65  arse.h".#include
4a20: 20 3c 73 74 64 69 6f 2e 68 3e 0a 23 69 6e 63 6c   <stdio.h>.#incl
4a30: 75 64 65 20 3c 73 74 64 6c 69 62 2e 68 3e 0a 23  ude <stdlib.h>.#
4a40: 69 6e 63 6c 75 64 65 20 3c 73 74 72 69 6e 67 2e  include <string.
4a50: 68 3e 0a 23 69 6e 63 6c 75 64 65 20 3c 61 73 73  h>.#include <ass
4a60: 65 72 74 2e 68 3e 0a 23 69 6e 63 6c 75 64 65 20  ert.h>.#include 
4a70: 3c 73 74 64 64 65 66 2e 68 3e 0a 0a 2f 2a 0a 2a  <stddef.h>../*.*
4a80: 2a 20 55 73 65 20 61 20 6d 61 63 72 6f 20 74 6f  * Use a macro to
4a90: 20 72 65 70 6c 61 63 65 20 6d 65 6d 63 70 79 28   replace memcpy(
4aa0: 29 20 69 66 20 63 6f 6d 70 69 6c 65 64 20 77 69  ) if compiled wi
4ab0: 74 68 20 53 51 4c 49 54 45 5f 49 4e 4c 49 4e 45  th SQLITE_INLINE
4ac0: 5f 4d 45 4d 43 50 59 2e 0a 2a 2a 20 54 68 69 73  _MEMCPY..** This
4ad0: 20 61 6c 6c 6f 77 73 20 62 65 74 74 65 72 20 6d   allows better m
4ae0: 65 61 73 75 72 65 6d 65 6e 74 73 20 6f 66 20 77  easurements of w
4af0: 68 65 72 65 20 6d 65 6d 63 70 79 28 29 20 69 73  here memcpy() is
4b00: 20 75 73 65 64 20 77 68 65 6e 20 72 75 6e 6e 69   used when runni
4b10: 6e 67 0a 2a 2a 20 63 61 63 68 65 67 72 69 6e 64  ng.** cachegrind
4b20: 2e 20 20 42 75 74 20 74 68 69 73 20 6d 61 63 72  .  But this macr
4b30: 6f 20 76 65 72 73 69 6f 6e 20 6f 66 20 6d 65 6d  o version of mem
4b40: 63 70 79 28 29 20 69 73 20 76 65 72 79 20 73 6c  cpy() is very sl
4b50: 6f 77 20 73 6f 20 69 74 0a 2a 2a 20 73 68 6f 75  ow so it.** shou
4b60: 6c 64 20 6e 6f 74 20 62 65 20 75 73 65 64 20 69  ld not be used i
4b70: 6e 20 70 72 6f 64 75 63 74 69 6f 6e 2e 20 20 54  n production.  T
4b80: 68 69 73 20 69 73 20 61 20 70 65 72 66 6f 72 6d  his is a perform
4b90: 61 6e 63 65 20 6d 65 61 73 75 72 65 6d 65 6e 74  ance measurement
4ba0: 0a 2a 2a 20 68 61 63 6b 20 6f 6e 6c 79 2e 0a 2a  .** hack only..*
4bb0: 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
4bc0: 49 4e 4c 49 4e 45 5f 4d 45 4d 43 50 59 0a 23 20  INLINE_MEMCPY.# 
4bd0: 64 65 66 69 6e 65 20 6d 65 6d 63 70 79 28 44 2c  define memcpy(D,
4be0: 53 2c 4e 29 20 7b 63 68 61 72 2a 78 78 64 3d 28  S,N) {char*xxd=(
4bf0: 63 68 61 72 2a 29 28 44 29 3b 63 6f 6e 73 74 20  char*)(D);const 
4c00: 63 68 61 72 2a 78 78 73 3d 28 63 6f 6e 73 74 20  char*xxs=(const 
4c10: 63 68 61 72 2a 29 28 53 29 3b 5c 0a 20 20 20 20  char*)(S);\.    
4c20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4c30: 20 20 20 20 69 6e 74 20 78 78 6e 3d 28 4e 29 3b      int xxn=(N);
4c40: 77 68 69 6c 65 28 78 78 6e 2d 2d 3e 30 29 2a 28  while(xxn-->0)*(
4c50: 78 78 64 2b 2b 29 3d 2a 28 78 78 73 2b 2b 29 3b  xxd++)=*(xxs++);
4c60: 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  }.#endif../*.** 
4c70: 49 66 20 63 6f 6d 70 69 6c 69 6e 67 20 66 6f 72  If compiling for
4c80: 20 61 20 70 72 6f 63 65 73 73 6f 72 20 74 68 61   a processor tha
4c90: 74 20 6c 61 63 6b 73 20 66 6c 6f 61 74 69 6e 67  t lacks floating
4ca0: 20 70 6f 69 6e 74 20 73 75 70 70 6f 72 74 2c 0a   point support,.
4cb0: 2a 2a 20 73 75 62 73 74 69 74 75 74 65 20 69 6e  ** substitute in
4cc0: 74 65 67 65 72 20 66 6f 72 20 66 6c 6f 61 74 69  teger for floati
4cd0: 6e 67 2d 70 6f 69 6e 74 0a 2a 2f 0a 23 69 66 64  ng-point.*/.#ifd
4ce0: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46  ef SQLITE_OMIT_F
4cf0: 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 0a 23 20  LOATING_POINT.# 
4d00: 64 65 66 69 6e 65 20 64 6f 75 62 6c 65 20 73 71  define double sq
4d10: 6c 69 74 65 5f 69 6e 74 36 34 0a 23 20 64 65 66  lite_int64.# def
4d20: 69 6e 65 20 66 6c 6f 61 74 20 73 71 6c 69 74 65  ine float sqlite
4d30: 5f 69 6e 74 36 34 0a 23 20 64 65 66 69 6e 65 20  _int64.# define 
4d40: 4c 4f 4e 47 44 4f 55 42 4c 45 5f 54 59 50 45 20  LONGDOUBLE_TYPE 
4d50: 73 71 6c 69 74 65 5f 69 6e 74 36 34 0a 23 20 69  sqlite_int64.# i
4d60: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 42 49 47  fndef SQLITE_BIG
4d70: 5f 44 42 4c 0a 23 20 20 20 64 65 66 69 6e 65 20  _DBL.#   define 
4d80: 53 51 4c 49 54 45 5f 42 49 47 5f 44 42 4c 20 28  SQLITE_BIG_DBL (
4d90: 28 28 73 71 6c 69 74 65 33 5f 69 6e 74 36 34 29  ((sqlite3_int64)
4da0: 31 29 3c 3c 35 30 29 0a 23 20 65 6e 64 69 66 0a  1)<<50).# endif.
4db0: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
4dc0: 4f 4d 49 54 5f 44 41 54 45 54 49 4d 45 5f 46 55  OMIT_DATETIME_FU
4dd0: 4e 43 53 20 31 0a 23 20 64 65 66 69 6e 65 20 53  NCS 1.# define S
4de0: 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 41 43 45  QLITE_OMIT_TRACE
4df0: 20 31 0a 23 20 75 6e 64 65 66 20 53 51 4c 49 54   1.# undef SQLIT
4e00: 45 5f 4d 49 58 45 44 5f 45 4e 44 49 41 4e 5f 36  E_MIXED_ENDIAN_6
4e10: 34 42 49 54 5f 46 4c 4f 41 54 0a 23 20 75 6e 64  4BIT_FLOAT.# und
4e20: 65 66 20 53 51 4c 49 54 45 5f 48 41 56 45 5f 49  ef SQLITE_HAVE_I
4e30: 53 4e 41 4e 0a 23 65 6e 64 69 66 0a 23 69 66 6e  SNAN.#endif.#ifn
4e40: 64 65 66 20 53 51 4c 49 54 45 5f 42 49 47 5f 44  def SQLITE_BIG_D
4e50: 42 4c 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  BL.# define SQLI
4e60: 54 45 5f 42 49 47 5f 44 42 4c 20 28 31 65 39 39  TE_BIG_DBL (1e99
4e70: 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  ).#endif../*.** 
4e80: 4f 4d 49 54 5f 54 45 4d 50 44 42 20 69 73 20 73  OMIT_TEMPDB is s
4e90: 65 74 20 74 6f 20 31 20 69 66 20 53 51 4c 49 54  et to 1 if SQLIT
4ea0: 45 5f 4f 4d 49 54 5f 54 45 4d 50 44 42 20 69 73  E_OMIT_TEMPDB is
4eb0: 20 64 65 66 69 6e 65 64 2c 20 6f 72 20 30 0a 2a   defined, or 0.*
4ec0: 2a 20 61 66 74 65 72 77 61 72 64 2e 20 48 61 76  * afterward. Hav
4ed0: 69 6e 67 20 74 68 69 73 20 6d 61 63 72 6f 20 61  ing this macro a
4ee0: 6c 6c 6f 77 73 20 75 73 20 74 6f 20 63 61 75 73  llows us to caus
4ef0: 65 20 74 68 65 20 43 20 63 6f 6d 70 69 6c 65 72  e the C compiler
4f00: 0a 2a 2a 20 74 6f 20 6f 6d 69 74 20 63 6f 64 65  .** to omit code
4f10: 20 75 73 65 64 20 62 79 20 54 45 4d 50 20 74 61   used by TEMP ta
4f20: 62 6c 65 73 20 77 69 74 68 6f 75 74 20 6d 65 73  bles without mes
4f30: 73 79 20 23 69 66 6e 64 65 66 20 73 74 61 74 65  sy #ifndef state
4f40: 6d 65 6e 74 73 2e 0a 2a 2f 0a 23 69 66 64 65 66  ments..*/.#ifdef
4f50: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 45 4d   SQLITE_OMIT_TEM
4f60: 50 44 42 0a 23 64 65 66 69 6e 65 20 4f 4d 49 54  PDB.#define OMIT
4f70: 5f 54 45 4d 50 44 42 20 31 0a 23 65 6c 73 65 0a  _TEMPDB 1.#else.
4f80: 23 64 65 66 69 6e 65 20 4f 4d 49 54 5f 54 45 4d  #define OMIT_TEM
4f90: 50 44 42 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a  PDB 0.#endif../*
4fa0: 0a 2a 2a 20 54 68 65 20 22 66 69 6c 65 20 66 6f  .** The "file fo
4fb0: 72 6d 61 74 22 20 6e 75 6d 62 65 72 20 69 73 20  rmat" number is 
4fc0: 61 6e 20 69 6e 74 65 67 65 72 20 74 68 61 74 20  an integer that 
4fd0: 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 77  is incremented w
4fe0: 68 65 6e 65 76 65 72 0a 2a 2a 20 74 68 65 20 56  henever.** the V
4ff0: 44 42 45 2d 6c 65 76 65 6c 20 66 69 6c 65 20 66  DBE-level file f
5000: 6f 72 6d 61 74 20 63 68 61 6e 67 65 73 2e 20 20  ormat changes.  
5010: 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61  The following ma
5020: 63 72 6f 73 20 64 65 66 69 6e 65 20 74 68 65 0a  cros define the.
5030: 2a 2a 20 74 68 65 20 64 65 66 61 75 6c 74 20 66  ** the default f
5040: 69 6c 65 20 66 6f 72 6d 61 74 20 66 6f 72 20 6e  ile format for n
5050: 65 77 20 64 61 74 61 62 61 73 65 73 20 61 6e 64  ew databases and
5060: 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 66 69 6c   the maximum fil
5070: 65 20 66 6f 72 6d 61 74 0a 2a 2a 20 74 68 61 74  e format.** that
5080: 20 74 68 65 20 6c 69 62 72 61 72 79 20 63 61 6e   the library can
5090: 20 72 65 61 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e   read..*/.#defin
50a0: 65 20 53 51 4c 49 54 45 5f 4d 41 58 5f 46 49 4c  e SQLITE_MAX_FIL
50b0: 45 5f 46 4f 52 4d 41 54 20 34 0a 23 69 66 6e 64  E_FORMAT 4.#ifnd
50c0: 65 66 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c  ef SQLITE_DEFAUL
50d0: 54 5f 46 49 4c 45 5f 46 4f 52 4d 41 54 0a 23 20  T_FILE_FORMAT.# 
50e0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 45  define SQLITE_DE
50f0: 46 41 55 4c 54 5f 46 49 4c 45 5f 46 4f 52 4d 41  FAULT_FILE_FORMA
5100: 54 20 34 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  T 4.#endif../*.*
5110: 2a 20 44 65 74 65 72 6d 69 6e 65 20 77 68 65 74  * Determine whet
5120: 68 65 72 20 74 72 69 67 67 65 72 73 20 61 72 65  her triggers are
5130: 20 72 65 63 75 72 73 69 76 65 20 62 79 20 64 65   recursive by de
5140: 66 61 75 6c 74 2e 20 20 54 68 69 73 20 63 61 6e  fault.  This can
5150: 20 62 65 0a 2a 2a 20 63 68 61 6e 67 65 64 20 61   be.** changed a
5160: 74 20 72 75 6e 2d 74 69 6d 65 20 75 73 69 6e 67  t run-time using
5170: 20 61 20 70 72 61 67 6d 61 2e 0a 2a 2f 0a 23 69   a pragma..*/.#i
5180: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 44 45 46  fndef SQLITE_DEF
5190: 41 55 4c 54 5f 52 45 43 55 52 53 49 56 45 5f 54  AULT_RECURSIVE_T
51a0: 52 49 47 47 45 52 53 0a 23 20 64 65 66 69 6e 65  RIGGERS.# define
51b0: 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f   SQLITE_DEFAULT_
51c0: 52 45 43 55 52 53 49 56 45 5f 54 52 49 47 47 45  RECURSIVE_TRIGGE
51d0: 52 53 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  RS 0.#endif../*.
51e0: 2a 2a 20 50 72 6f 76 69 64 65 20 61 20 64 65 66  ** Provide a def
51f0: 61 75 6c 74 20 76 61 6c 75 65 20 66 6f 72 20 53  ault value for S
5200: 51 4c 49 54 45 5f 54 45 4d 50 5f 53 54 4f 52 45  QLITE_TEMP_STORE
5210: 20 69 6e 20 63 61 73 65 20 69 74 20 69 73 20 6e   in case it is n
5220: 6f 74 20 73 70 65 63 69 66 69 65 64 0a 2a 2a 20  ot specified.** 
5230: 6f 6e 20 74 68 65 20 63 6f 6d 6d 61 6e 64 2d 6c  on the command-l
5240: 69 6e 65 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53  ine.*/.#ifndef S
5250: 51 4c 49 54 45 5f 54 45 4d 50 5f 53 54 4f 52 45  QLITE_TEMP_STORE
5260: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
5270: 5f 54 45 4d 50 5f 53 54 4f 52 45 20 31 0a 23 65  _TEMP_STORE 1.#e
5280: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 66 20 6e  ndif../*.** If n
5290: 6f 20 76 61 6c 75 65 20 68 61 73 20 62 65 65 6e  o value has been
52a0: 20 70 72 6f 76 69 64 65 64 20 66 6f 72 20 53 51   provided for SQ
52b0: 4c 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f  LITE_MAX_WORKER_
52c0: 54 48 52 45 41 44 53 2c 20 6f 72 20 69 66 0a 2a  THREADS, or if.*
52d0: 2a 20 53 51 4c 49 54 45 5f 54 45 4d 50 5f 53 54  * SQLITE_TEMP_ST
52e0: 4f 52 45 20 69 73 20 73 65 74 20 74 6f 20 33 20  ORE is set to 3 
52f0: 28 6e 65 76 65 72 20 75 73 65 20 74 65 6d 70 6f  (never use tempo
5300: 72 61 72 79 20 66 69 6c 65 73 29 2c 20 73 65 74  rary files), set
5310: 20 69 74 0a 2a 2a 20 74 6f 20 7a 65 72 6f 2e 0a   it.** to zero..
5320: 2a 2f 0a 23 69 66 20 53 51 4c 49 54 45 5f 54 45  */.#if SQLITE_TE
5330: 4d 50 5f 53 54 4f 52 45 3d 3d 33 20 7c 7c 20 53  MP_STORE==3 || S
5340: 51 4c 49 54 45 5f 54 48 52 45 41 44 53 41 46 45  QLITE_THREADSAFE
5350: 3d 3d 30 0a 23 20 75 6e 64 65 66 20 53 51 4c 49  ==0.# undef SQLI
5360: 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54 48  TE_MAX_WORKER_TH
5370: 52 45 41 44 53 0a 23 20 64 65 66 69 6e 65 20 53  READS.# define S
5380: 51 4c 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52  QLITE_MAX_WORKER
5390: 5f 54 48 52 45 41 44 53 20 30 0a 23 65 6e 64 69  _THREADS 0.#endi
53a0: 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  f.#ifndef SQLITE
53b0: 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54 48 52 45  _MAX_WORKER_THRE
53c0: 41 44 53 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  ADS.# define SQL
53d0: 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54  ITE_MAX_WORKER_T
53e0: 48 52 45 41 44 53 20 38 0a 23 65 6e 64 69 66 0a  HREADS 8.#endif.
53f0: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 44  #ifndef SQLITE_D
5400: 45 46 41 55 4c 54 5f 57 4f 52 4b 45 52 5f 54 48  EFAULT_WORKER_TH
5410: 52 45 41 44 53 0a 23 20 64 65 66 69 6e 65 20 53  READS.# define S
5420: 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 57 4f  QLITE_DEFAULT_WO
5430: 52 4b 45 52 5f 54 48 52 45 41 44 53 20 30 0a 23  RKER_THREADS 0.#
5440: 65 6e 64 69 66 0a 23 69 66 20 53 51 4c 49 54 45  endif.#if SQLITE
5450: 5f 44 45 46 41 55 4c 54 5f 57 4f 52 4b 45 52 5f  _DEFAULT_WORKER_
5460: 54 48 52 45 41 44 53 3e 53 51 4c 49 54 45 5f 4d  THREADS>SQLITE_M
5470: 41 58 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41 44  AX_WORKER_THREAD
5480: 53 0a 23 20 75 6e 64 65 66 20 53 51 4c 49 54 45  S.# undef SQLITE
5490: 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54 48 52 45  _MAX_WORKER_THRE
54a0: 41 44 53 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  ADS.# define SQL
54b0: 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54  ITE_MAX_WORKER_T
54c0: 48 52 45 41 44 53 20 53 51 4c 49 54 45 5f 44 45  HREADS SQLITE_DE
54d0: 46 41 55 4c 54 5f 57 4f 52 4b 45 52 5f 54 48 52  FAULT_WORKER_THR
54e0: 45 41 44 53 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  EADS.#endif../*.
54f0: 2a 2a 20 54 68 65 20 64 65 66 61 75 6c 74 20 69  ** The default i
5500: 6e 69 74 69 61 6c 20 61 6c 6c 6f 63 61 74 69 6f  nitial allocatio
5510: 6e 20 66 6f 72 20 74 68 65 20 70 61 67 65 63 61  n for the pageca
5520: 63 68 65 20 77 68 65 6e 20 75 73 69 6e 67 20 73  che when using s
5530: 65 70 61 72 61 74 65 0a 2a 2a 20 70 61 67 65 63  eparate.** pagec
5540: 61 63 68 65 73 20 66 6f 72 20 65 61 63 68 20 64  aches for each d
5550: 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
5560: 6f 6e 2e 20 20 41 20 70 6f 73 69 74 69 76 65 20  on.  A positive 
5570: 6e 75 6d 62 65 72 20 69 73 20 74 68 65 0a 2a 2a  number is the.**
5580: 20 6e 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73   number of pages
5590: 2e 20 20 41 20 6e 65 67 61 74 69 76 65 20 6e 75  .  A negative nu
55a0: 6d 62 65 72 20 4e 20 74 72 61 6e 73 6c 61 74 69  mber N translati
55b0: 6f 6e 73 20 6d 65 61 6e 73 20 74 68 61 74 20 61  ons means that a
55c0: 20 62 75 66 66 65 72 0a 2a 2a 20 6f 66 20 2d 31   buffer.** of -1
55d0: 30 32 34 2a 4e 20 62 79 74 65 73 20 69 73 20 61  024*N bytes is a
55e0: 6c 6c 6f 63 61 74 65 64 20 61 6e 64 20 75 73 65  llocated and use
55f0: 64 20 66 6f 72 20 61 73 20 6d 61 6e 79 20 70 61  d for as many pa
5600: 67 65 73 20 61 73 20 69 74 20 77 69 6c 6c 20 68  ges as it will h
5610: 6f 6c 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 64  old..**.** The d
5620: 65 66 61 75 6c 74 20 76 61 6c 75 65 20 6f 66 20  efault value of 
5630: 22 32 30 22 20 77 61 73 20 63 68 6f 6f 73 65 6e  "20" was choosen
5640: 20 74 6f 20 6d 69 6e 69 6d 69 7a 65 20 74 68 65   to minimize the
5650: 20 72 75 6e 2d 74 69 6d 65 20 6f 66 20 74 68 65   run-time of the
5660: 0a 2a 2a 20 73 70 65 65 64 74 65 73 74 31 20 74  .** speedtest1 t
5670: 65 73 74 20 70 72 6f 67 72 61 6d 20 77 69 74 68  est program with
5680: 20 6f 70 74 69 6f 6e 73 3a 20 2d 2d 73 68 72 69   options: --shri
5690: 6e 6b 2d 6d 65 6d 6f 72 79 20 2d 2d 72 65 70 72  nk-memory --repr
56a0: 65 70 61 72 65 0a 2a 2f 0a 23 69 66 6e 64 65 66  epare.*/.#ifndef
56b0: 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f   SQLITE_DEFAULT_
56c0: 50 43 41 43 48 45 5f 49 4e 49 54 53 5a 0a 23 20  PCACHE_INITSZ.# 
56d0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 45  define SQLITE_DE
56e0: 46 41 55 4c 54 5f 50 43 41 43 48 45 5f 49 4e 49  FAULT_PCACHE_INI
56f0: 54 53 5a 20 32 30 0a 23 65 6e 64 69 66 0a 0a 2f  TSZ 20.#endif../
5700: 2a 0a 2a 2a 20 44 65 66 61 75 6c 74 20 76 61 6c  *.** Default val
5710: 75 65 20 66 6f 72 20 74 68 65 20 53 51 4c 49 54  ue for the SQLIT
5720: 45 5f 43 4f 4e 46 49 47 5f 53 4f 52 54 45 52 52  E_CONFIG_SORTERR
5730: 45 46 5f 53 49 5a 45 20 6f 70 74 69 6f 6e 2e 0a  EF_SIZE option..
5740: 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  */.#ifndef SQLIT
5750: 45 5f 44 45 46 41 55 4c 54 5f 53 4f 52 54 45 52  E_DEFAULT_SORTER
5760: 52 45 46 5f 53 49 5a 45 0a 23 20 64 65 66 69 6e  REF_SIZE.# defin
5770: 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54  e SQLITE_DEFAULT
5780: 5f 53 4f 52 54 45 52 52 45 46 5f 53 49 5a 45 20  _SORTERREF_SIZE 
5790: 30 78 37 66 66 66 66 66 66 66 0a 23 65 6e 64 69  0x7fffffff.#endi
57a0: 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 63 6f 6d  f../*.** The com
57b0: 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e  pile-time option
57c0: 73 20 53 51 4c 49 54 45 5f 4d 4d 41 50 5f 52 45  s SQLITE_MMAP_RE
57d0: 41 44 57 52 49 54 45 20 61 6e 64 20 0a 2a 2a 20  ADWRITE and .** 
57e0: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 42 41  SQLITE_ENABLE_BA
57f0: 54 43 48 5f 41 54 4f 4d 49 43 5f 57 52 49 54 45  TCH_ATOMIC_WRITE
5800: 20 61 72 65 20 6e 6f 74 20 63 6f 6d 70 61 74 69   are not compati
5810: 62 6c 65 20 77 69 74 68 20 6f 6e 65 20 61 6e 6f  ble with one ano
5820: 74 68 65 72 2e 0a 2a 2a 20 59 6f 75 20 6d 75 73  ther..** You mus
5830: 74 20 63 68 6f 6f 73 65 20 6f 6e 65 20 6f 72 20  t choose one or 
5840: 74 68 65 20 6f 74 68 65 72 20 28 6f 72 20 6e 65  the other (or ne
5850: 69 74 68 65 72 29 20 62 75 74 20 6e 6f 74 20 62  ither) but not b
5860: 6f 74 68 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69  oth..*/.#if defi
5870: 6e 65 64 28 53 51 4c 49 54 45 5f 4d 4d 41 50 5f  ned(SQLITE_MMAP_
5880: 52 45 41 44 57 52 49 54 45 29 20 26 26 20 64 65  READWRITE) && de
5890: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41  fined(SQLITE_ENA
58a0: 42 4c 45 5f 42 41 54 43 48 5f 41 54 4f 4d 49 43  BLE_BATCH_ATOMIC
58b0: 5f 57 52 49 54 45 29 0a 23 65 72 72 6f 72 20 43  _WRITE).#error C
58c0: 61 6e 6e 6f 74 20 75 73 65 20 62 6f 74 68 20 53  annot use both S
58d0: 51 4c 49 54 45 5f 4d 4d 41 50 5f 52 45 41 44 57  QLITE_MMAP_READW
58e0: 52 49 54 45 20 61 6e 64 20 53 51 4c 49 54 45 5f  RITE and SQLITE_
58f0: 45 4e 41 42 4c 45 5f 42 41 54 43 48 5f 41 54 4f  ENABLE_BATCH_ATO
5900: 4d 49 43 5f 57 52 49 54 45 0a 23 65 6e 64 69 66  MIC_WRITE.#endif
5910: 0a 0a 2f 2a 0a 2a 2a 20 47 43 43 20 64 6f 65 73  ../*.** GCC does
5920: 20 6e 6f 74 20 64 65 66 69 6e 65 20 74 68 65 20   not define the 
5930: 6f 66 66 73 65 74 6f 66 28 29 20 6d 61 63 72 6f  offsetof() macro
5940: 20 73 6f 20 77 65 27 6c 6c 20 68 61 76 65 20 74   so we'll have t
5950: 6f 20 64 6f 20 69 74 0a 2a 2a 20 6f 75 72 73 65  o do it.** ourse
5960: 6c 76 65 73 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66  lves..*/.#ifndef
5970: 20 6f 66 66 73 65 74 6f 66 0a 23 64 65 66 69 6e   offsetof.#defin
5980: 65 20 6f 66 66 73 65 74 6f 66 28 53 54 52 55 43  e offsetof(STRUC
5990: 54 55 52 45 2c 46 49 45 4c 44 29 20 28 28 69 6e  TURE,FIELD) ((in
59a0: 74 29 28 28 63 68 61 72 2a 29 26 28 28 53 54 52  t)((char*)&((STR
59b0: 55 43 54 55 52 45 2a 29 30 29 2d 3e 46 49 45 4c  UCTURE*)0)->FIEL
59c0: 44 29 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  D)).#endif../*.*
59d0: 2a 20 4d 61 63 72 6f 73 20 74 6f 20 63 6f 6d 70  * Macros to comp
59e0: 75 74 65 20 6d 69 6e 69 6d 75 6d 20 61 6e 64 20  ute minimum and 
59f0: 6d 61 78 69 6d 75 6d 20 6f 66 20 74 77 6f 20 6e  maximum of two n
5a00: 75 6d 62 65 72 73 2e 0a 2a 2f 0a 23 69 66 6e 64  umbers..*/.#ifnd
5a10: 65 66 20 4d 49 4e 0a 23 20 64 65 66 69 6e 65 20  ef MIN.# define 
5a20: 4d 49 4e 28 41 2c 42 29 20 28 28 41 29 3c 28 42  MIN(A,B) ((A)<(B
5a30: 29 3f 28 41 29 3a 28 42 29 29 0a 23 65 6e 64 69  )?(A):(B)).#endi
5a40: 66 0a 23 69 66 6e 64 65 66 20 4d 41 58 0a 23 20  f.#ifndef MAX.# 
5a50: 64 65 66 69 6e 65 20 4d 41 58 28 41 2c 42 29 20  define MAX(A,B) 
5a60: 28 28 41 29 3e 28 42 29 3f 28 41 29 3a 28 42 29  ((A)>(B)?(A):(B)
5a70: 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  ).#endif../*.** 
5a80: 53 77 61 70 20 74 77 6f 20 6f 62 6a 65 63 74 73  Swap two objects
5a90: 20 6f 66 20 74 79 70 65 20 54 59 50 45 2e 0a 2a   of type TYPE..*
5aa0: 2f 0a 23 64 65 66 69 6e 65 20 53 57 41 50 28 54  /.#define SWAP(T
5ab0: 59 50 45 2c 41 2c 42 29 20 7b 54 59 50 45 20 74  YPE,A,B) {TYPE t
5ac0: 3d 41 3b 20 41 3d 42 3b 20 42 3d 74 3b 7d 0a 0a  =A; A=B; B=t;}..
5ad0: 2f 2a 0a 2a 2a 20 43 68 65 63 6b 20 74 6f 20 73  /*.** Check to s
5ae0: 65 65 20 69 66 20 74 68 69 73 20 6d 61 63 68 69  ee if this machi
5af0: 6e 65 20 75 73 65 73 20 45 42 43 44 49 43 2e 20  ne uses EBCDIC. 
5b00: 20 28 59 65 73 2c 20 62 65 6c 69 65 76 65 20 69   (Yes, believe i
5b10: 74 20 6f 72 0a 2a 2a 20 6e 6f 74 2c 20 74 68 65  t or.** not, the
5b20: 72 65 20 61 72 65 20 73 74 69 6c 6c 20 6d 61 63  re are still mac
5b30: 68 69 6e 65 73 20 6f 75 74 20 74 68 65 72 65 20  hines out there 
5b40: 74 68 61 74 20 75 73 65 20 45 42 43 44 49 43 2e  that use EBCDIC.
5b50: 29 0a 2a 2f 0a 23 69 66 20 27 41 27 20 3d 3d 20  ).*/.#if 'A' == 
5b60: 27 5c 33 30 31 27 0a 23 20 64 65 66 69 6e 65 20  '\301'.# define 
5b70: 53 51 4c 49 54 45 5f 45 42 43 44 49 43 20 31 0a  SQLITE_EBCDIC 1.
5b80: 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 53  #else.# define S
5b90: 51 4c 49 54 45 5f 41 53 43 49 49 20 31 0a 23 65  QLITE_ASCII 1.#e
5ba0: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 6e 74 65  ndif../*.** Inte
5bb0: 67 65 72 73 20 6f 66 20 6b 6e 6f 77 6e 20 73 69  gers of known si
5bc0: 7a 65 73 2e 20 20 54 68 65 73 65 20 74 79 70 65  zes.  These type
5bd0: 64 65 66 73 20 6d 69 67 68 74 20 63 68 61 6e 67  defs might chang
5be0: 65 20 66 6f 72 20 61 72 63 68 69 74 65 63 74 75  e for architectu
5bf0: 72 65 73 0a 2a 2a 20 77 68 65 72 65 20 74 68 65  res.** where the
5c00: 20 73 69 7a 65 73 20 76 65 72 79 2e 20 20 50 72   sizes very.  Pr
5c10: 65 70 72 6f 63 65 73 73 6f 72 20 6d 61 63 72 6f  eprocessor macro
5c20: 73 20 61 72 65 20 61 76 61 69 6c 61 62 6c 65 20  s are available 
5c30: 73 6f 20 74 68 61 74 20 74 68 65 0a 2a 2a 20 74  so that the.** t
5c40: 79 70 65 73 20 63 61 6e 20 62 65 20 63 6f 6e 76  ypes can be conv
5c50: 65 6e 69 65 6e 74 6c 79 20 72 65 64 65 66 69 6e  eniently redefin
5c60: 65 64 20 61 74 20 63 6f 6d 70 69 6c 65 2d 74 79  ed at compile-ty
5c70: 70 65 2e 20 20 4c 69 6b 65 20 74 68 69 73 3a 0a  pe.  Like this:.
5c80: 2a 2a 0a 2a 2a 20 20 20 20 20 20 20 20 20 63 63  **.**         cc
5c90: 20 27 2d 44 55 49 4e 54 50 54 52 5f 54 59 50 45   '-DUINTPTR_TYPE
5ca0: 3d 6c 6f 6e 67 20 6c 6f 6e 67 20 69 6e 74 27 20  =long long int' 
5cb0: 2e 2e 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 55  ....*/.#ifndef U
5cc0: 49 4e 54 33 32 5f 54 59 50 45 0a 23 20 69 66 64  INT32_TYPE.# ifd
5cd0: 65 66 20 48 41 56 45 5f 55 49 4e 54 33 32 5f 54  ef HAVE_UINT32_T
5ce0: 0a 23 20 20 64 65 66 69 6e 65 20 55 49 4e 54 33  .#  define UINT3
5cf0: 32 5f 54 59 50 45 20 75 69 6e 74 33 32 5f 74 0a  2_TYPE uint32_t.
5d00: 23 20 65 6c 73 65 0a 23 20 20 64 65 66 69 6e 65  # else.#  define
5d10: 20 55 49 4e 54 33 32 5f 54 59 50 45 20 75 6e 73   UINT32_TYPE uns
5d20: 69 67 6e 65 64 20 69 6e 74 0a 23 20 65 6e 64 69  igned int.# endi
5d30: 66 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66  f.#endif.#ifndef
5d40: 20 55 49 4e 54 31 36 5f 54 59 50 45 0a 23 20 69   UINT16_TYPE.# i
5d50: 66 64 65 66 20 48 41 56 45 5f 55 49 4e 54 31 36  fdef HAVE_UINT16
5d60: 5f 54 0a 23 20 20 64 65 66 69 6e 65 20 55 49 4e  _T.#  define UIN
5d70: 54 31 36 5f 54 59 50 45 20 75 69 6e 74 31 36 5f  T16_TYPE uint16_
5d80: 74 0a 23 20 65 6c 73 65 0a 23 20 20 64 65 66 69  t.# else.#  defi
5d90: 6e 65 20 55 49 4e 54 31 36 5f 54 59 50 45 20 75  ne UINT16_TYPE u
5da0: 6e 73 69 67 6e 65 64 20 73 68 6f 72 74 20 69 6e  nsigned short in
5db0: 74 0a 23 20 65 6e 64 69 66 0a 23 65 6e 64 69 66  t.# endif.#endif
5dc0: 0a 23 69 66 6e 64 65 66 20 49 4e 54 31 36 5f 54  .#ifndef INT16_T
5dd0: 59 50 45 0a 23 20 69 66 64 65 66 20 48 41 56 45  YPE.# ifdef HAVE
5de0: 5f 49 4e 54 31 36 5f 54 0a 23 20 20 64 65 66 69  _INT16_T.#  defi
5df0: 6e 65 20 49 4e 54 31 36 5f 54 59 50 45 20 69 6e  ne INT16_TYPE in
5e00: 74 31 36 5f 74 0a 23 20 65 6c 73 65 0a 23 20 20  t16_t.# else.#  
5e10: 64 65 66 69 6e 65 20 49 4e 54 31 36 5f 54 59 50  define INT16_TYP
5e20: 45 20 73 68 6f 72 74 20 69 6e 74 0a 23 20 65 6e  E short int.# en
5e30: 64 69 66 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64  dif.#endif.#ifnd
5e40: 65 66 20 55 49 4e 54 38 5f 54 59 50 45 0a 23 20  ef UINT8_TYPE.# 
5e50: 69 66 64 65 66 20 48 41 56 45 5f 55 49 4e 54 38  ifdef HAVE_UINT8
5e60: 5f 54 0a 23 20 20 64 65 66 69 6e 65 20 55 49 4e  _T.#  define UIN
5e70: 54 38 5f 54 59 50 45 20 75 69 6e 74 38 5f 74 0a  T8_TYPE uint8_t.
5e80: 23 20 65 6c 73 65 0a 23 20 20 64 65 66 69 6e 65  # else.#  define
5e90: 20 55 49 4e 54 38 5f 54 59 50 45 20 75 6e 73 69   UINT8_TYPE unsi
5ea0: 67 6e 65 64 20 63 68 61 72 0a 23 20 65 6e 64 69  gned char.# endi
5eb0: 66 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66  f.#endif.#ifndef
5ec0: 20 49 4e 54 38 5f 54 59 50 45 0a 23 20 69 66 64   INT8_TYPE.# ifd
5ed0: 65 66 20 48 41 56 45 5f 49 4e 54 38 5f 54 0a 23  ef HAVE_INT8_T.#
5ee0: 20 20 64 65 66 69 6e 65 20 49 4e 54 38 5f 54 59    define INT8_TY
5ef0: 50 45 20 69 6e 74 38 5f 74 0a 23 20 65 6c 73 65  PE int8_t.# else
5f00: 0a 23 20 20 64 65 66 69 6e 65 20 49 4e 54 38 5f  .#  define INT8_
5f10: 54 59 50 45 20 73 69 67 6e 65 64 20 63 68 61 72  TYPE signed char
5f20: 0a 23 20 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a  .# endif.#endif.
5f30: 23 69 66 6e 64 65 66 20 4c 4f 4e 47 44 4f 55 42  #ifndef LONGDOUB
5f40: 4c 45 5f 54 59 50 45 0a 23 20 64 65 66 69 6e 65  LE_TYPE.# define
5f50: 20 4c 4f 4e 47 44 4f 55 42 4c 45 5f 54 59 50 45   LONGDOUBLE_TYPE
5f60: 20 6c 6f 6e 67 20 64 6f 75 62 6c 65 0a 23 65 6e   long double.#en
5f70: 64 69 66 0a 74 79 70 65 64 65 66 20 73 71 6c 69  dif.typedef sqli
5f80: 74 65 5f 69 6e 74 36 34 20 69 36 34 3b 20 20 20  te_int64 i64;   
5f90: 20 20 20 20 20 20 20 2f 2a 20 38 2d 62 79 74 65         /* 8-byte
5fa0: 20 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20   signed integer 
5fb0: 2a 2f 0a 74 79 70 65 64 65 66 20 73 71 6c 69 74  */.typedef sqlit
5fc0: 65 5f 75 69 6e 74 36 34 20 75 36 34 3b 20 20 20  e_uint64 u64;   
5fd0: 20 20 20 20 20 20 2f 2a 20 38 2d 62 79 74 65 20        /* 8-byte 
5fe0: 75 6e 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72  unsigned integer
5ff0: 20 2a 2f 0a 74 79 70 65 64 65 66 20 55 49 4e 54   */.typedef UINT
6000: 33 32 5f 54 59 50 45 20 75 33 32 3b 20 20 20 20  32_TYPE u32;    
6010: 20 20 20 20 20 20 20 2f 2a 20 34 2d 62 79 74 65         /* 4-byte
6020: 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 65 67 65   unsigned intege
6030: 72 20 2a 2f 0a 74 79 70 65 64 65 66 20 55 49 4e  r */.typedef UIN
6040: 54 31 36 5f 54 59 50 45 20 75 31 36 3b 20 20 20  T16_TYPE u16;   
6050: 20 20 20 20 20 20 20 20 2f 2a 20 32 2d 62 79 74          /* 2-byt
6060: 65 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 65 67  e unsigned integ
6070: 65 72 20 2a 2f 0a 74 79 70 65 64 65 66 20 49 4e  er */.typedef IN
6080: 54 31 36 5f 54 59 50 45 20 69 31 36 3b 20 20 20  T16_TYPE i16;   
6090: 20 20 20 20 20 20 20 20 20 2f 2a 20 32 2d 62 79           /* 2-by
60a0: 74 65 20 73 69 67 6e 65 64 20 69 6e 74 65 67 65  te signed intege
60b0: 72 20 2a 2f 0a 74 79 70 65 64 65 66 20 55 49 4e  r */.typedef UIN
60c0: 54 38 5f 54 59 50 45 20 75 38 3b 20 20 20 20 20  T8_TYPE u8;     
60d0: 20 20 20 20 20 20 20 20 2f 2a 20 31 2d 62 79 74          /* 1-byt
60e0: 65 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 65 67  e unsigned integ
60f0: 65 72 20 2a 2f 0a 74 79 70 65 64 65 66 20 49 4e  er */.typedef IN
6100: 54 38 5f 54 59 50 45 20 69 38 3b 20 20 20 20 20  T8_TYPE i8;     
6110: 20 20 20 20 20 20 20 20 20 2f 2a 20 31 2d 62 79           /* 1-by
6120: 74 65 20 73 69 67 6e 65 64 20 69 6e 74 65 67 65  te signed intege
6130: 72 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 53 51 4c 49  r */../*.** SQLI
6140: 54 45 5f 4d 41 58 5f 55 33 32 20 69 73 20 61 20  TE_MAX_U32 is a 
6150: 75 36 34 20 63 6f 6e 73 74 61 6e 74 20 74 68 61  u64 constant tha
6160: 74 20 69 73 20 74 68 65 20 6d 61 78 69 6d 75 6d  t is the maximum
6170: 20 75 36 34 20 76 61 6c 75 65 0a 2a 2a 20 74 68   u64 value.** th
6180: 61 74 20 63 61 6e 20 62 65 20 73 74 6f 72 65 64  at can be stored
6190: 20 69 6e 20 61 20 75 33 32 20 77 69 74 68 6f 75   in a u32 withou
61a0: 74 20 6c 6f 73 73 20 6f 66 20 64 61 74 61 2e 20  t loss of data. 
61b0: 20 54 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69 73   The value.** is
61c0: 20 30 78 30 30 30 30 30 30 30 30 66 66 66 66 66   0x00000000fffff
61d0: 66 66 66 2e 20 20 42 75 74 20 62 65 63 61 75 73  fff.  But becaus
61e0: 65 20 6f 66 20 71 75 69 72 6b 73 20 6f 66 20 73  e of quirks of s
61f0: 6f 6d 65 20 63 6f 6d 70 69 6c 65 72 73 2c 20 77  ome compilers, w
6200: 65 0a 2a 2a 20 68 61 76 65 20 74 6f 20 73 70 65  e.** have to spe
6210: 63 69 66 79 20 74 68 65 20 76 61 6c 75 65 20 69  cify the value i
6220: 6e 20 74 68 65 20 6c 65 73 73 20 69 6e 74 75 69  n the less intui
6230: 74 69 76 65 20 6d 61 6e 6e 65 72 20 73 68 6f 77  tive manner show
6240: 6e 3a 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  n:.*/.#define SQ
6250: 4c 49 54 45 5f 4d 41 58 5f 55 33 32 20 20 28 28  LITE_MAX_U32  ((
6260: 28 28 75 36 34 29 31 29 3c 3c 33 32 29 2d 31 29  ((u64)1)<<32)-1)
6270: 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 64 61 74 61  ../*.** The data
6280: 74 79 70 65 20 75 73 65 64 20 74 6f 20 73 74 6f  type used to sto
6290: 72 65 20 65 73 74 69 6d 61 74 65 73 20 6f 66 20  re estimates of 
62a0: 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f  the number of ro
62b0: 77 73 20 69 6e 20 61 0a 2a 2a 20 74 61 62 6c 65  ws in a.** table
62c0: 20 6f 72 20 69 6e 64 65 78 2e 20 20 54 68 69 73   or index.  This
62d0: 20 69 73 20 61 6e 20 75 6e 73 69 67 6e 65 64 20   is an unsigned 
62e0: 69 6e 74 65 67 65 72 20 74 79 70 65 2e 20 20 46  integer type.  F
62f0: 6f 72 20 39 39 2e 39 25 20 6f 66 0a 2a 2a 20 74  or 99.9% of.** t
6300: 68 65 20 77 6f 72 6c 64 2c 20 61 20 33 32 2d 62  he world, a 32-b
6310: 69 74 20 69 6e 74 65 67 65 72 20 69 73 20 73 75  it integer is su
6320: 66 66 69 63 69 65 6e 74 2e 20 20 42 75 74 20 61  fficient.  But a
6330: 20 36 34 2d 62 69 74 20 69 6e 74 65 67 65 72 0a   64-bit integer.
6340: 2a 2a 20 63 61 6e 20 62 65 20 75 73 65 64 20 61  ** can be used a
6350: 74 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 69  t compile-time i
6360: 66 20 64 65 73 69 72 65 64 2e 0a 2a 2f 0a 23 69  f desired..*/.#i
6370: 66 64 65 66 20 53 51 4c 49 54 45 5f 36 34 42 49  fdef SQLITE_64BI
6380: 54 5f 53 54 41 54 53 0a 20 74 79 70 65 64 65 66  T_STATS. typedef
6390: 20 75 36 34 20 74 52 6f 77 63 6e 74 3b 20 20 20   u64 tRowcnt;   
63a0: 20 2f 2a 20 36 34 2d 62 69 74 20 6f 6e 6c 79 20   /* 64-bit only 
63b0: 69 66 20 72 65 71 75 65 73 74 65 64 20 61 74 20  if requested at 
63c0: 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 2a 2f 0a  compile-time */.
63d0: 23 65 6c 73 65 0a 20 74 79 70 65 64 65 66 20 75  #else. typedef u
63e0: 33 32 20 74 52 6f 77 63 6e 74 3b 20 20 20 20 2f  32 tRowcnt;    /
63f0: 2a 20 33 32 2d 62 69 74 20 69 73 20 74 68 65 20  * 32-bit is the 
6400: 64 65 66 61 75 6c 74 20 2a 2f 0a 23 65 6e 64 69  default */.#endi
6410: 66 0a 0a 2f 2a 0a 2a 2a 20 45 73 74 69 6d 61 74  f../*.** Estimat
6420: 65 64 20 71 75 61 6e 74 69 74 69 65 73 20 75 73  ed quantities us
6430: 65 64 20 66 6f 72 20 71 75 65 72 79 20 70 6c 61  ed for query pla
6440: 6e 6e 69 6e 67 20 61 72 65 20 73 74 6f 72 65 64  nning are stored
6450: 20 61 73 20 31 36 2d 62 69 74 0a 2a 2a 20 6c 6f   as 16-bit.** lo
6460: 67 61 72 69 74 68 6d 73 2e 20 20 46 6f 72 20 71  garithms.  For q
6470: 75 61 6e 74 69 74 79 20 58 2c 20 74 68 65 20 76  uantity X, the v
6480: 61 6c 75 65 20 73 74 6f 72 65 64 20 69 73 20 31  alue stored is 1
6490: 30 2a 6c 6f 67 32 28 58 29 2e 20 20 54 68 69 73  0*log2(X).  This
64a0: 0a 2a 2a 20 67 69 76 65 73 20 61 20 70 6f 73 73  .** gives a poss
64b0: 69 62 6c 65 20 72 61 6e 67 65 20 6f 66 20 76 61  ible range of va
64c0: 6c 75 65 73 20 6f 66 20 61 70 70 72 6f 78 69 6d  lues of approxim
64d0: 61 74 65 6c 79 20 31 2e 30 65 39 38 36 20 74 6f  ately 1.0e986 to
64e0: 20 31 65 2d 39 38 36 2e 0a 2a 2a 20 42 75 74 20   1e-986..** But 
64f0: 74 68 65 20 61 6c 6c 6f 77 65 64 20 76 61 6c 75  the allowed valu
6500: 65 73 20 61 72 65 20 22 67 72 61 69 6e 79 22 2e  es are "grainy".
6510: 20 20 4e 6f 74 20 65 76 65 72 79 20 76 61 6c 75    Not every valu
6520: 65 20 69 73 20 72 65 70 72 65 73 65 6e 74 61 62  e is representab
6530: 6c 65 2e 0a 2a 2a 20 46 6f 72 20 65 78 61 6d 70  le..** For examp
6540: 6c 65 2c 20 71 75 61 6e 74 69 74 69 65 73 20 31  le, quantities 1
6550: 36 20 61 6e 64 20 31 37 20 61 72 65 20 62 6f 74  6 and 17 are bot
6560: 68 20 72 65 70 72 65 73 65 6e 74 65 64 20 62 79  h represented by
6570: 20 61 20 4c 6f 67 45 73 74 0a 2a 2a 20 6f 66 20   a LogEst.** of 
6580: 34 30 2e 20 20 48 6f 77 65 76 65 72 2c 20 73 69  40.  However, si
6590: 6e 63 65 20 4c 6f 67 45 73 74 20 71 75 61 6e 74  nce LogEst quant
65a0: 69 74 69 65 73 20 61 72 65 20 73 75 70 70 6f 73  ities are suppos
65b0: 65 20 74 6f 20 62 65 20 65 73 74 69 6d 61 74 65  e to be estimate
65c0: 73 2c 0a 2a 2a 20 6e 6f 74 20 65 78 61 63 74 20  s,.** not exact 
65d0: 76 61 6c 75 65 73 2c 20 74 68 69 73 20 69 6d 70  values, this imp
65e0: 72 65 63 69 73 69 6f 6e 20 69 73 20 6e 6f 74 20  recision is not 
65f0: 61 20 70 72 6f 62 6c 65 6d 2e 0a 2a 2a 0a 2a 2a  a problem..**.**
6600: 20 22 4c 6f 67 45 73 74 22 20 69 73 20 73 68 6f   "LogEst" is sho
6610: 72 74 20 66 6f 72 20 22 4c 6f 67 61 72 69 74 68  rt for "Logarith
6620: 6d 69 63 20 45 73 74 69 6d 61 74 65 22 2e 0a 2a  mic Estimate"..*
6630: 2a 0a 2a 2a 20 45 78 61 6d 70 6c 65 73 3a 0a 2a  *.** Examples:.*
6640: 2a 20 20 20 20 20 20 31 20 2d 3e 20 30 20 20 20  *      1 -> 0   
6650: 20 20 20 20 20 20 20 20 20 20 20 32 30 20 2d 3e             20 ->
6660: 20 34 33 20 20 20 20 20 20 20 20 20 20 31 30 30   43          100
6670: 30 30 20 2d 3e 20 31 33 32 0a 2a 2a 20 20 20 20  00 -> 132.**    
6680: 20 20 32 20 2d 3e 20 31 30 20 20 20 20 20 20 20    2 -> 10       
6690: 20 20 20 20 20 20 32 35 20 2d 3e 20 34 36 20 20        25 -> 46  
66a0: 20 20 20 20 20 20 20 20 32 35 30 30 30 20 2d 3e          25000 ->
66b0: 20 31 34 36 0a 2a 2a 20 20 20 20 20 20 33 20 2d   146.**      3 -
66c0: 3e 20 31 36 20 20 20 20 20 20 20 20 20 20 20 20  > 16            
66d0: 31 30 30 20 2d 3e 20 36 36 20 20 20 20 20 20 20  100 -> 66       
66e0: 20 31 30 30 30 30 30 30 20 2d 3e 20 31 39 39 0a   1000000 -> 199.
66f0: 2a 2a 20 20 20 20 20 20 34 20 2d 3e 20 32 30 20  **      4 -> 20 
6700: 20 20 20 20 20 20 20 20 20 20 31 30 30 30 20 2d            1000 -
6710: 3e 20 39 39 20 20 20 20 20 20 20 20 31 30 34 38  > 99        1048
6720: 35 37 36 20 2d 3e 20 32 30 30 0a 2a 2a 20 20 20  576 -> 200.**   
6730: 20 20 31 30 20 2d 3e 20 33 33 20 20 20 20 20 20    10 -> 33      
6740: 20 20 20 20 20 31 30 32 34 20 2d 3e 20 31 30 30       1024 -> 100
6750: 20 20 20 20 34 32 39 34 39 36 37 32 39 36 20 2d      4294967296 -
6760: 3e 20 33 32 30 0a 2a 2a 0a 2a 2a 20 54 68 65 20  > 320.**.** The 
6770: 4c 6f 67 45 73 74 20 63 61 6e 20 62 65 20 6e 65  LogEst can be ne
6780: 67 61 74 69 76 65 20 74 6f 20 69 6e 64 69 63 61  gative to indica
6790: 74 65 20 66 72 61 63 74 69 6f 6e 61 6c 20 76 61  te fractional va
67a0: 6c 75 65 73 2e 0a 2a 2a 20 45 78 61 6d 70 6c 65  lues..** Example
67b0: 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 30 2e 35 20  s:.**.**    0.5 
67c0: 2d 3e 20 2d 31 30 20 20 20 20 20 20 20 20 20 20  -> -10          
67d0: 20 30 2e 31 20 2d 3e 20 2d 33 33 20 20 20 20 20   0.1 -> -33     
67e0: 20 20 20 30 2e 30 36 32 35 20 2d 3e 20 2d 34 30     0.0625 -> -40
67f0: 0a 2a 2f 0a 74 79 70 65 64 65 66 20 49 4e 54 31  .*/.typedef INT1
6800: 36 5f 54 59 50 45 20 4c 6f 67 45 73 74 3b 0a 0a  6_TYPE LogEst;..
6810: 2f 2a 0a 2a 2a 20 53 65 74 20 74 68 65 20 53 51  /*.** Set the SQ
6820: 4c 49 54 45 5f 50 54 52 53 49 5a 45 20 6d 61 63  LITE_PTRSIZE mac
6830: 72 6f 20 74 6f 20 74 68 65 20 6e 75 6d 62 65 72  ro to the number
6840: 20 6f 66 20 62 79 74 65 73 20 69 6e 20 61 20 70   of bytes in a p
6850: 6f 69 6e 74 65 72 0a 2a 2f 0a 23 69 66 6e 64 65  ointer.*/.#ifnde
6860: 66 20 53 51 4c 49 54 45 5f 50 54 52 53 49 5a 45  f SQLITE_PTRSIZE
6870: 0a 23 20 69 66 20 64 65 66 69 6e 65 64 28 5f 5f  .# if defined(__
6880: 53 49 5a 45 4f 46 5f 50 4f 49 4e 54 45 52 5f 5f  SIZEOF_POINTER__
6890: 29 0a 23 20 20 20 64 65 66 69 6e 65 20 53 51 4c  ).#   define SQL
68a0: 49 54 45 5f 50 54 52 53 49 5a 45 20 5f 5f 53 49  ITE_PTRSIZE __SI
68b0: 5a 45 4f 46 5f 50 4f 49 4e 54 45 52 5f 5f 0a 23  ZEOF_POINTER__.#
68c0: 20 65 6c 69 66 20 64 65 66 69 6e 65 64 28 69 33   elif defined(i3
68d0: 38 36 29 20 20 20 20 20 7c 7c 20 64 65 66 69 6e  86)     || defin
68e0: 65 64 28 5f 5f 69 33 38 36 5f 5f 29 20 20 20 7c  ed(__i386__)   |
68f0: 7c 20 64 65 66 69 6e 65 64 28 5f 4d 5f 49 58 38  | defined(_M_IX8
6900: 36 29 20 7c 7c 20 20 20 20 5c 0a 20 20 20 20 20  6) ||    \.     
6910: 20 20 64 65 66 69 6e 65 64 28 5f 4d 5f 41 52 4d    defined(_M_ARM
6920: 29 20 20 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f  )   || defined(_
6930: 5f 61 72 6d 5f 5f 29 20 20 20 20 7c 7c 20 64 65  _arm__)    || de
6940: 66 69 6e 65 64 28 5f 5f 78 38 36 29 0a 23 20 20  fined(__x86).#  
6950: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50   define SQLITE_P
6960: 54 52 53 49 5a 45 20 34 0a 23 20 65 6c 73 65 0a  TRSIZE 4.# else.
6970: 23 20 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54  #   define SQLIT
6980: 45 5f 50 54 52 53 49 5a 45 20 38 0a 23 20 65 6e  E_PTRSIZE 8.# en
6990: 64 69 66 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 54  dif.#endif../* T
69a0: 68 65 20 75 70 74 72 20 74 79 70 65 20 69 73 20  he uptr type is 
69b0: 61 6e 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 65  an unsigned inte
69c0: 67 65 72 20 6c 61 72 67 65 20 65 6e 6f 75 67 68  ger large enough
69d0: 20 74 6f 20 68 6f 6c 64 20 61 20 70 6f 69 6e 74   to hold a point
69e0: 65 72 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65  er.*/.#if define
69f0: 64 28 48 41 56 45 5f 53 54 44 49 4e 54 5f 48 29  d(HAVE_STDINT_H)
6a00: 0a 20 20 74 79 70 65 64 65 66 20 75 69 6e 74 70  .  typedef uintp
6a10: 74 72 5f 74 20 75 70 74 72 3b 0a 23 65 6c 69 66  tr_t uptr;.#elif
6a20: 20 53 51 4c 49 54 45 5f 50 54 52 53 49 5a 45 3d   SQLITE_PTRSIZE=
6a30: 3d 34 0a 20 20 74 79 70 65 64 65 66 20 75 33 32  =4.  typedef u32
6a40: 20 75 70 74 72 3b 0a 23 65 6c 73 65 0a 20 20 74   uptr;.#else.  t
6a50: 79 70 65 64 65 66 20 75 36 34 20 75 70 74 72 3b  ypedef u64 uptr;
6a60: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54  .#endif../*.** T
6a70: 68 65 20 53 51 4c 49 54 45 5f 57 49 54 48 49 4e  he SQLITE_WITHIN
6a80: 28 50 2c 53 2c 45 29 20 6d 61 63 72 6f 20 63 68  (P,S,E) macro ch
6a90: 65 63 6b 73 20 74 6f 20 73 65 65 20 69 66 20 70  ecks to see if p
6aa0: 6f 69 6e 74 65 72 20 50 20 70 6f 69 6e 74 73 20  ointer P points 
6ab0: 74 6f 0a 2a 2a 20 73 6f 6d 65 74 68 69 6e 67 20  to.** something 
6ac0: 62 65 74 77 65 65 6e 20 53 20 28 69 6e 63 6c 75  between S (inclu
6ad0: 73 69 76 65 29 20 61 6e 64 20 45 20 28 65 78 63  sive) and E (exc
6ae0: 6c 75 73 69 76 65 29 2e 0a 2a 2a 0a 2a 2a 20 49  lusive)..**.** I
6af0: 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 53  n other words, S
6b00: 20 69 73 20 61 20 62 75 66 66 65 72 20 61 6e 64   is a buffer and
6b10: 20 45 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20   E is a pointer 
6b20: 74 6f 20 74 68 65 20 66 69 72 73 74 20 62 79 74  to the first byt
6b30: 65 20 61 66 74 65 72 0a 2a 2a 20 74 68 65 20 65  e after.** the e
6b40: 6e 64 20 6f 66 20 62 75 66 66 65 72 20 53 2e 20  nd of buffer S. 
6b50: 20 54 68 69 73 20 6d 61 63 72 6f 20 72 65 74 75   This macro retu
6b60: 72 6e 73 20 74 72 75 65 20 69 66 20 50 20 70 6f  rns true if P po
6b70: 69 6e 74 73 20 74 6f 20 73 6f 6d 65 74 68 69 6e  ints to somethin
6b80: 67 0a 2a 2a 20 63 6f 6e 74 61 69 6e 65 64 20 77  g.** contained w
6b90: 69 74 68 69 6e 20 74 68 65 20 62 75 66 66 65 72  ithin the buffer
6ba0: 20 53 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53   S..*/.#define S
6bb0: 51 4c 49 54 45 5f 57 49 54 48 49 4e 28 50 2c 53  QLITE_WITHIN(P,S
6bc0: 2c 45 29 20 28 28 28 75 70 74 72 29 28 50 29 3e  ,E) (((uptr)(P)>
6bd0: 3d 28 75 70 74 72 29 28 53 29 29 26 26 28 28 75  =(uptr)(S))&&((u
6be0: 70 74 72 29 28 50 29 3c 28 75 70 74 72 29 28 45  ptr)(P)<(uptr)(E
6bf0: 29 29 29 0a 0a 0a 2f 2a 0a 2a 2a 20 4d 61 63 72  ))).../*.** Macr
6c00: 6f 73 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20  os to determine 
6c10: 77 68 65 74 68 65 72 20 74 68 65 20 6d 61 63 68  whether the mach
6c20: 69 6e 65 20 69 73 20 62 69 67 20 6f 72 20 6c 69  ine is big or li
6c30: 74 74 6c 65 20 65 6e 64 69 61 6e 2c 0a 2a 2a 20  ttle endian,.** 
6c40: 61 6e 64 20 77 68 65 74 68 65 72 20 6f 72 20 6e  and whether or n
6c50: 6f 74 20 74 68 61 74 20 64 65 74 65 72 6d 69 6e  ot that determin
6c60: 61 74 69 6f 6e 20 69 73 20 72 75 6e 2d 74 69 6d  ation is run-tim
6c70: 65 20 6f 72 20 63 6f 6d 70 69 6c 65 2d 74 69 6d  e or compile-tim
6c80: 65 2e 0a 2a 2a 0a 2a 2a 20 46 6f 72 20 62 65 73  e..**.** For bes
6c90: 74 20 70 65 72 66 6f 72 6d 61 6e 63 65 2c 20 61  t performance, a
6ca0: 6e 20 61 74 74 65 6d 70 74 20 69 73 20 6d 61 64  n attempt is mad
6cb0: 65 20 74 6f 20 67 75 65 73 73 20 61 74 20 74 68  e to guess at th
6cc0: 65 20 62 79 74 65 2d 6f 72 64 65 72 0a 2a 2a 20  e byte-order.** 
6cd0: 75 73 69 6e 67 20 43 2d 70 72 65 70 72 6f 63 65  using C-preproce
6ce0: 73 73 6f 72 20 6d 61 63 72 6f 73 2e 20 20 49 66  ssor macros.  If
6cf0: 20 74 68 61 74 20 69 73 20 75 6e 73 75 63 63 65   that is unsucce
6d00: 73 73 66 75 6c 2c 20 6f 72 20 69 66 0a 2a 2a 20  ssful, or if.** 
6d10: 2d 44 53 51 4c 49 54 45 5f 42 59 54 45 4f 52 44  -DSQLITE_BYTEORD
6d20: 45 52 3d 30 20 69 73 20 73 65 74 2c 20 74 68 65  ER=0 is set, the
6d30: 6e 20 62 79 74 65 2d 6f 72 64 65 72 20 69 73 20  n byte-order is 
6d40: 64 65 74 65 72 6d 69 6e 65 64 0a 2a 2a 20 61 74  determined.** at
6d50: 20 72 75 6e 2d 74 69 6d 65 2e 0a 2a 2f 0a 23 69   run-time..*/.#i
6d60: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 42 59 54  fndef SQLITE_BYT
6d70: 45 4f 52 44 45 52 0a 23 20 69 66 20 64 65 66 69  EORDER.# if defi
6d80: 6e 65 64 28 69 33 38 36 29 20 20 20 20 20 7c 7c  ned(i386)     ||
6d90: 20 64 65 66 69 6e 65 64 28 5f 5f 69 33 38 36 5f   defined(__i386_
6da0: 5f 29 20 20 20 7c 7c 20 64 65 66 69 6e 65 64 28  _)   || defined(
6db0: 5f 4d 5f 49 58 38 36 29 20 7c 7c 20 20 20 20 5c  _M_IX86) ||    \
6dc0: 0a 20 20 20 20 20 64 65 66 69 6e 65 64 28 5f 5f  .     defined(__
6dd0: 78 38 36 5f 36 34 29 20 7c 7c 20 64 65 66 69 6e  x86_64) || defin
6de0: 65 64 28 5f 5f 78 38 36 5f 36 34 5f 5f 29 20 7c  ed(__x86_64__) |
6df0: 7c 20 64 65 66 69 6e 65 64 28 5f 4d 5f 58 36 34  | defined(_M_X64
6e00: 29 20 20 7c 7c 20 20 20 20 5c 0a 20 20 20 20 20  )  ||    \.     
6e10: 64 65 66 69 6e 65 64 28 5f 4d 5f 41 4d 44 36 34  defined(_M_AMD64
6e20: 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 4d 5f  ) || defined(_M_
6e30: 41 52 4d 29 20 20 20 20 20 7c 7c 20 64 65 66 69  ARM)     || defi
6e40: 6e 65 64 28 5f 5f 78 38 36 29 20 20 20 7c 7c 20  ned(__x86)   || 
6e50: 20 20 20 5c 0a 20 20 20 20 20 64 65 66 69 6e 65     \.     define
6e60: 64 28 5f 5f 61 72 6d 5f 5f 29 0a 23 20 20 20 64  d(__arm__).#   d
6e70: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 42 59 54  efine SQLITE_BYT
6e80: 45 4f 52 44 45 52 20 20 20 20 31 32 33 34 0a 23  EORDER    1234.#
6e90: 20 65 6c 69 66 20 64 65 66 69 6e 65 64 28 73 70   elif defined(sp
6ea0: 61 72 63 29 20 20 20 20 7c 7c 20 64 65 66 69 6e  arc)    || defin
6eb0: 65 64 28 5f 5f 70 70 63 5f 5f 29 0a 23 20 20 20  ed(__ppc__).#   
6ec0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 42 59  define SQLITE_BY
6ed0: 54 45 4f 52 44 45 52 20 20 20 20 34 33 32 31 0a  TEORDER    4321.
6ee0: 23 20 65 6c 73 65 0a 23 20 20 20 64 65 66 69 6e  # else.#   defin
6ef0: 65 20 53 51 4c 49 54 45 5f 42 59 54 45 4f 52 44  e SQLITE_BYTEORD
6f00: 45 52 20 30 0a 23 20 65 6e 64 69 66 0a 23 65 6e  ER 0.# endif.#en
6f10: 64 69 66 0a 23 69 66 20 53 51 4c 49 54 45 5f 42  dif.#if SQLITE_B
6f20: 59 54 45 4f 52 44 45 52 3d 3d 34 33 32 31 0a 23  YTEORDER==4321.#
6f30: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 42   define SQLITE_B
6f40: 49 47 45 4e 44 49 41 4e 20 20 20 20 31 0a 23 20  IGENDIAN    1.# 
6f50: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4c 49  define SQLITE_LI
6f60: 54 54 4c 45 45 4e 44 49 41 4e 20 30 0a 23 20 64  TTLEENDIAN 0.# d
6f70: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 55 54 46  efine SQLITE_UTF
6f80: 31 36 4e 41 54 49 56 45 20 20 53 51 4c 49 54 45  16NATIVE  SQLITE
6f90: 5f 55 54 46 31 36 42 45 0a 23 65 6c 69 66 20 53  _UTF16BE.#elif S
6fa0: 51 4c 49 54 45 5f 42 59 54 45 4f 52 44 45 52 3d  QLITE_BYTEORDER=
6fb0: 3d 31 32 33 34 0a 23 20 64 65 66 69 6e 65 20 53  =1234.# define S
6fc0: 51 4c 49 54 45 5f 42 49 47 45 4e 44 49 41 4e 20  QLITE_BIGENDIAN 
6fd0: 20 20 20 30 0a 23 20 64 65 66 69 6e 65 20 53 51     0.# define SQ
6fe0: 4c 49 54 45 5f 4c 49 54 54 4c 45 45 4e 44 49 41  LITE_LITTLEENDIA
6ff0: 4e 20 31 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  N 1.# define SQL
7000: 49 54 45 5f 55 54 46 31 36 4e 41 54 49 56 45 20  ITE_UTF16NATIVE 
7010: 20 53 51 4c 49 54 45 5f 55 54 46 31 36 4c 45 0a   SQLITE_UTF16LE.
7020: 23 65 6c 73 65 0a 23 20 69 66 64 65 66 20 53 51  #else.# ifdef SQ
7030: 4c 49 54 45 5f 41 4d 41 4c 47 41 4d 41 54 49 4f  LITE_AMALGAMATIO
7040: 4e 0a 20 20 63 6f 6e 73 74 20 69 6e 74 20 73 71  N.  const int sq
7050: 6c 69 74 65 33 6f 6e 65 20 3d 20 31 3b 0a 23 20  lite3one = 1;.# 
7060: 65 6c 73 65 0a 20 20 65 78 74 65 72 6e 20 63 6f  else.  extern co
7070: 6e 73 74 20 69 6e 74 20 73 71 6c 69 74 65 33 6f  nst int sqlite3o
7080: 6e 65 3b 0a 23 20 65 6e 64 69 66 0a 23 20 64 65  ne;.# endif.# de
7090: 66 69 6e 65 20 53 51 4c 49 54 45 5f 42 49 47 45  fine SQLITE_BIGE
70a0: 4e 44 49 41 4e 20 20 20 20 28 2a 28 63 68 61 72  NDIAN    (*(char
70b0: 20 2a 29 28 26 73 71 6c 69 74 65 33 6f 6e 65 29   *)(&sqlite3one)
70c0: 3d 3d 30 29 0a 23 20 64 65 66 69 6e 65 20 53 51  ==0).# define SQ
70d0: 4c 49 54 45 5f 4c 49 54 54 4c 45 45 4e 44 49 41  LITE_LITTLEENDIA
70e0: 4e 20 28 2a 28 63 68 61 72 20 2a 29 28 26 73 71  N (*(char *)(&sq
70f0: 6c 69 74 65 33 6f 6e 65 29 3d 3d 31 29 0a 23 20  lite3one)==1).# 
7100: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 55 54  define SQLITE_UT
7110: 46 31 36 4e 41 54 49 56 45 20 20 28 53 51 4c 49  F16NATIVE  (SQLI
7120: 54 45 5f 42 49 47 45 4e 44 49 41 4e 3f 53 51 4c  TE_BIGENDIAN?SQL
7130: 49 54 45 5f 55 54 46 31 36 42 45 3a 53 51 4c 49  ITE_UTF16BE:SQLI
7140: 54 45 5f 55 54 46 31 36 4c 45 29 0a 23 65 6e 64  TE_UTF16LE).#end
7150: 69 66 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6e 73 74 61  if../*.** Consta
7160: 6e 74 73 20 66 6f 72 20 74 68 65 20 6c 61 72 67  nts for the larg
7170: 65 73 74 20 61 6e 64 20 73 6d 61 6c 6c 65 73 74  est and smallest
7180: 20 70 6f 73 73 69 62 6c 65 20 36 34 2d 62 69 74   possible 64-bit
7190: 20 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 73   signed integers
71a0: 2e 0a 2a 2a 20 54 68 65 73 65 20 6d 61 63 72 6f  ..** These macro
71b0: 73 20 61 72 65 20 64 65 73 69 67 6e 65 64 20 74  s are designed t
71c0: 6f 20 77 6f 72 6b 20 63 6f 72 72 65 63 74 6c 79  o work correctly
71d0: 20 6f 6e 20 62 6f 74 68 20 33 32 2d 62 69 74 20   on both 32-bit 
71e0: 61 6e 64 20 36 34 2d 62 69 74 0a 2a 2a 20 63 6f  and 64-bit.** co
71f0: 6d 70 69 6c 65 72 73 2e 0a 2a 2f 0a 23 64 65 66  mpilers..*/.#def
7200: 69 6e 65 20 4c 41 52 47 45 53 54 5f 49 4e 54 36  ine LARGEST_INT6
7210: 34 20 20 28 30 78 66 66 66 66 66 66 66 66 7c 28  4  (0xffffffff|(
7220: 28 28 69 36 34 29 30 78 37 66 66 66 66 66 66 66  ((i64)0x7fffffff
7230: 29 3c 3c 33 32 29 29 0a 23 64 65 66 69 6e 65 20  )<<32)).#define 
7240: 53 4d 41 4c 4c 45 53 54 5f 49 4e 54 36 34 20 28  SMALLEST_INT64 (
7250: 28 28 69 36 34 29 2d 31 29 20 2d 20 4c 41 52 47  ((i64)-1) - LARG
7260: 45 53 54 5f 49 4e 54 36 34 29 0a 0a 2f 2a 0a 2a  EST_INT64)../*.*
7270: 2a 20 52 6f 75 6e 64 20 75 70 20 61 20 6e 75 6d  * Round up a num
7280: 62 65 72 20 74 6f 20 74 68 65 20 6e 65 78 74 20  ber to the next 
7290: 6c 61 72 67 65 72 20 6d 75 6c 74 69 70 6c 65 20  larger multiple 
72a0: 6f 66 20 38 2e 20 20 54 68 69 73 20 69 73 20 75  of 8.  This is u
72b0: 73 65 64 0a 2a 2a 20 74 6f 20 66 6f 72 63 65 20  sed.** to force 
72c0: 38 2d 62 79 74 65 20 61 6c 69 67 6e 6d 65 6e 74  8-byte alignment
72d0: 20 6f 6e 20 36 34 2d 62 69 74 20 61 72 63 68 69   on 64-bit archi
72e0: 74 65 63 74 75 72 65 73 2e 0a 2a 2f 0a 23 64 65  tectures..*/.#de
72f0: 66 69 6e 65 20 52 4f 55 4e 44 38 28 78 29 20 20  fine ROUND8(x)  
7300: 20 20 20 28 28 28 78 29 2b 37 29 26 7e 37 29 0a     (((x)+7)&~7).
7310: 0a 2f 2a 0a 2a 2a 20 52 6f 75 6e 64 20 64 6f 77  ./*.** Round dow
7320: 6e 20 74 6f 20 74 68 65 20 6e 65 61 72 65 73 74  n to the nearest
7330: 20 6d 75 6c 74 69 70 6c 65 20 6f 66 20 38 0a 2a   multiple of 8.*
7340: 2f 0a 23 64 65 66 69 6e 65 20 52 4f 55 4e 44 44  /.#define ROUNDD
7350: 4f 57 4e 38 28 78 29 20 28 28 78 29 26 7e 37 29  OWN8(x) ((x)&~7)
7360: 0a 0a 2f 2a 0a 2a 2a 20 41 73 73 65 72 74 20 74  ../*.** Assert t
7370: 68 61 74 20 74 68 65 20 70 6f 69 6e 74 65 72 20  hat the pointer 
7380: 58 20 69 73 20 61 6c 69 67 6e 65 64 20 74 6f 20  X is aligned to 
7390: 61 6e 20 38 2d 62 79 74 65 20 62 6f 75 6e 64 61  an 8-byte bounda
73a0: 72 79 2e 20 20 54 68 69 73 0a 2a 2a 20 6d 61 63  ry.  This.** mac
73b0: 72 6f 20 69 73 20 75 73 65 64 20 6f 6e 6c 79 20  ro is used only 
73c0: 77 69 74 68 69 6e 20 61 73 73 65 72 74 28 29 20  within assert() 
73d0: 74 6f 20 76 65 72 69 66 79 20 74 68 61 74 20 74  to verify that t
73e0: 68 65 20 63 6f 64 65 20 67 65 74 73 0a 2a 2a 20  he code gets.** 
73f0: 61 6c 6c 20 61 6c 69 67 6e 6d 65 6e 74 20 72 65  all alignment re
7400: 73 74 72 69 63 74 69 6f 6e 73 20 63 6f 72 72 65  strictions corre
7410: 63 74 2e 0a 2a 2a 0a 2a 2a 20 45 78 63 65 70 74  ct..**.** Except
7420: 2c 20 69 66 20 53 51 4c 49 54 45 5f 34 5f 42 59  , if SQLITE_4_BY
7430: 54 45 5f 41 4c 49 47 4e 45 44 5f 4d 41 4c 4c 4f  TE_ALIGNED_MALLO
7440: 43 20 69 73 20 64 65 66 69 6e 65 64 2c 20 74 68  C is defined, th
7450: 65 6e 20 74 68 65 0a 2a 2a 20 75 6e 64 65 72 6c  en the.** underl
7460: 79 69 6e 67 20 6d 61 6c 6c 6f 63 28 29 20 69 6d  ying malloc() im
7470: 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6d 69 67  plementation mig
7480: 68 74 20 72 65 74 75 72 6e 20 75 73 20 34 2d 62  ht return us 4-b
7490: 79 74 65 20 61 6c 69 67 6e 65 64 0a 2a 2a 20 70  yte aligned.** p
74a0: 6f 69 6e 74 65 72 73 2e 20 20 49 6e 20 74 68 61  ointers.  In tha
74b0: 74 20 63 61 73 65 2c 20 6f 6e 6c 79 20 76 65 72  t case, only ver
74c0: 69 66 79 20 34 2d 62 79 74 65 20 61 6c 69 67 6e  ify 4-byte align
74d0: 6d 65 6e 74 2e 0a 2a 2f 0a 23 69 66 64 65 66 20  ment..*/.#ifdef 
74e0: 53 51 4c 49 54 45 5f 34 5f 42 59 54 45 5f 41 4c  SQLITE_4_BYTE_AL
74f0: 49 47 4e 45 44 5f 4d 41 4c 4c 4f 43 0a 23 20 64  IGNED_MALLOC.# d
7500: 65 66 69 6e 65 20 45 49 47 48 54 5f 42 59 54 45  efine EIGHT_BYTE
7510: 5f 41 4c 49 47 4e 4d 45 4e 54 28 58 29 20 20 20  _ALIGNMENT(X)   
7520: 28 28 28 28 63 68 61 72 2a 29 28 58 29 20 2d 20  ((((char*)(X) - 
7530: 28 63 68 61 72 2a 29 30 29 26 33 29 3d 3d 30 29  (char*)0)&3)==0)
7540: 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
7550: 45 49 47 48 54 5f 42 59 54 45 5f 41 4c 49 47 4e  EIGHT_BYTE_ALIGN
7560: 4d 45 4e 54 28 58 29 20 20 20 28 28 28 28 63 68  MENT(X)   ((((ch
7570: 61 72 2a 29 28 58 29 20 2d 20 28 63 68 61 72 2a  ar*)(X) - (char*
7580: 29 30 29 26 37 29 3d 3d 30 29 0a 23 65 6e 64 69  )0)&7)==0).#endi
7590: 66 0a 0a 2f 2a 0a 2a 2a 20 44 69 73 61 62 6c 65  f../*.** Disable
75a0: 20 4d 4d 41 50 20 6f 6e 20 70 6c 61 74 66 6f 72   MMAP on platfor
75b0: 6d 73 20 77 68 65 72 65 20 69 74 20 69 73 20 6b  ms where it is k
75c0: 6e 6f 77 6e 20 74 6f 20 6e 6f 74 20 77 6f 72 6b  nown to not work
75d0: 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28  .*/.#if defined(
75e0: 5f 5f 4f 70 65 6e 42 53 44 5f 5f 29 20 7c 7c 20  __OpenBSD__) || 
75f0: 64 65 66 69 6e 65 64 28 5f 5f 51 4e 58 4e 54 4f  defined(__QNXNTO
7600: 5f 5f 29 0a 23 20 75 6e 64 65 66 20 53 51 4c 49  __).# undef SQLI
7610: 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45  TE_MAX_MMAP_SIZE
7620: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
7630: 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 20 30  _MAX_MMAP_SIZE 0
7640: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 44  .#endif../*.** D
7650: 65 66 61 75 6c 74 20 6d 61 78 69 6d 75 6d 20 73  efault maximum s
7660: 69 7a 65 20 6f 66 20 6d 65 6d 6f 72 79 20 75 73  ize of memory us
7670: 65 64 20 62 79 20 6d 65 6d 6f 72 79 2d 6d 61 70  ed by memory-map
7680: 70 65 64 20 49 2f 4f 20 69 6e 20 74 68 65 20 56  ped I/O in the V
7690: 46 53 0a 2a 2f 0a 23 69 66 64 65 66 20 5f 5f 41  FS.*/.#ifdef __A
76a0: 50 50 4c 45 5f 5f 0a 23 20 69 6e 63 6c 75 64 65  PPLE__.# include
76b0: 20 3c 54 61 72 67 65 74 43 6f 6e 64 69 74 69 6f   <TargetConditio
76c0: 6e 61 6c 73 2e 68 3e 0a 23 65 6e 64 69 66 0a 23  nals.h>.#endif.#
76d0: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4d 41  ifndef SQLITE_MA
76e0: 58 5f 4d 4d 41 50 5f 53 49 5a 45 0a 23 20 69 66  X_MMAP_SIZE.# if
76f0: 20 64 65 66 69 6e 65 64 28 5f 5f 6c 69 6e 75 78   defined(__linux
7700: 5f 5f 29 20 5c 0a 20 20 7c 7c 20 64 65 66 69 6e  __) \.  || defin
7710: 65 64 28 5f 57 49 4e 33 32 29 20 5c 0a 20 20 7c  ed(_WIN32) \.  |
7720: 7c 20 28 64 65 66 69 6e 65 64 28 5f 5f 41 50 50  | (defined(__APP
7730: 4c 45 5f 5f 29 20 26 26 20 64 65 66 69 6e 65 64  LE__) && defined
7740: 28 5f 5f 4d 41 43 48 5f 5f 29 29 20 5c 0a 20 20  (__MACH__)) \.  
7750: 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 73 75 6e  || defined(__sun
7760: 29 20 5c 0a 20 20 7c 7c 20 64 65 66 69 6e 65 64  ) \.  || defined
7770: 28 5f 5f 46 72 65 65 42 53 44 5f 5f 29 20 5c 0a  (__FreeBSD__) \.
7780: 20 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 44    || defined(__D
7790: 72 61 67 6f 6e 46 6c 79 5f 5f 29 0a 23 20 20 20  ragonFly__).#   
77a0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41  define SQLITE_MA
77b0: 58 5f 4d 4d 41 50 5f 53 49 5a 45 20 30 78 37 66  X_MMAP_SIZE 0x7f
77c0: 66 66 30 30 30 30 20 20 2f 2a 20 32 31 34 37 34  ff0000  /* 21474
77d0: 31 38 31 31 32 20 2a 2f 0a 23 20 65 6c 73 65 0a  18112 */.# else.
77e0: 23 20 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54  #   define SQLIT
77f0: 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 20  E_MAX_MMAP_SIZE 
7800: 30 0a 23 20 65 6e 64 69 66 0a 23 65 6e 64 69 66  0.# endif.#endif
7810: 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 64 65 66 61  ../*.** The defa
7820: 75 6c 74 20 4d 4d 41 50 5f 53 49 5a 45 20 69 73  ult MMAP_SIZE is
7830: 20 7a 65 72 6f 20 6f 6e 20 61 6c 6c 20 70 6c 61   zero on all pla
7840: 74 66 6f 72 6d 73 2e 20 20 4f 72 2c 20 65 76 65  tforms.  Or, eve
7850: 6e 20 69 66 20 61 20 6c 61 72 67 65 72 0a 2a 2a  n if a larger.**
7860: 20 64 65 66 61 75 6c 74 20 4d 4d 41 50 5f 53 49   default MMAP_SI
7870: 5a 45 20 69 73 20 73 70 65 63 69 66 69 65 64 20  ZE is specified 
7880: 61 74 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 2c  at compile-time,
7890: 20 6d 61 6b 65 20 73 75 72 65 20 74 68 61 74 20   make sure that 
78a0: 69 74 20 64 6f 65 73 0a 2a 2a 20 6e 6f 74 20 65  it does.** not e
78b0: 78 63 65 65 64 20 74 68 65 20 6d 61 78 69 6d 75  xceed the maximu
78c0: 6d 20 6d 6d 61 70 20 73 69 7a 65 2e 0a 2a 2f 0a  m mmap size..*/.
78d0: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 44  #ifndef SQLITE_D
78e0: 45 46 41 55 4c 54 5f 4d 4d 41 50 5f 53 49 5a 45  EFAULT_MMAP_SIZE
78f0: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
7900: 5f 44 45 46 41 55 4c 54 5f 4d 4d 41 50 5f 53 49  _DEFAULT_MMAP_SI
7910: 5a 45 20 30 0a 23 65 6e 64 69 66 0a 23 69 66 20  ZE 0.#endif.#if 
7920: 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d  SQLITE_DEFAULT_M
7930: 4d 41 50 5f 53 49 5a 45 3e 53 51 4c 49 54 45 5f  MAP_SIZE>SQLITE_
7940: 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 0a 23 20  MAX_MMAP_SIZE.# 
7950: 75 6e 64 65 66 20 53 51 4c 49 54 45 5f 44 45 46  undef SQLITE_DEF
7960: 41 55 4c 54 5f 4d 4d 41 50 5f 53 49 5a 45 0a 23  AULT_MMAP_SIZE.#
7970: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44   define SQLITE_D
7980: 45 46 41 55 4c 54 5f 4d 4d 41 50 5f 53 49 5a 45  EFAULT_MMAP_SIZE
7990: 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50   SQLITE_MAX_MMAP
79a0: 5f 53 49 5a 45 0a 23 65 6e 64 69 66 0a 0a 2f 2a  _SIZE.#endif../*
79b0: 0a 2a 2a 20 4f 6e 6c 79 20 6f 6e 65 20 6f 66 20  .** Only one of 
79c0: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54  SQLITE_ENABLE_ST
79d0: 41 54 33 20 6f 72 20 53 51 4c 49 54 45 5f 45 4e  AT3 or SQLITE_EN
79e0: 41 42 4c 45 5f 53 54 41 54 34 20 63 61 6e 20 62  ABLE_STAT4 can b
79f0: 65 20 64 65 66 69 6e 65 64 2e 0a 2a 2a 20 50 72  e defined..** Pr
7a00: 69 6f 72 69 74 79 20 69 73 20 67 69 76 65 6e 20  iority is given 
7a10: 74 6f 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  to SQLITE_ENABLE
7a20: 5f 53 54 41 54 34 2e 20 20 49 66 20 65 69 74 68  _STAT4.  If eith
7a30: 65 72 20 61 72 65 20 64 65 66 69 6e 65 64 2c 20  er are defined, 
7a40: 61 6c 73 6f 0a 2a 2a 20 64 65 66 69 6e 65 20 53  also.** define S
7a50: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41  QLITE_ENABLE_STA
7a60: 54 33 5f 4f 52 5f 53 54 41 54 34 0a 2a 2f 0a 23  T3_OR_STAT4.*/.#
7a70: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  ifdef SQLITE_ENA
7a80: 42 4c 45 5f 53 54 41 54 34 0a 23 20 75 6e 64 65  BLE_STAT4.# unde
7a90: 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
7aa0: 53 54 41 54 33 0a 23 20 64 65 66 69 6e 65 20 53  STAT3.# define S
7ab0: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41  QLITE_ENABLE_STA
7ac0: 54 33 5f 4f 52 5f 53 54 41 54 34 20 31 0a 23 65  T3_OR_STAT4 1.#e
7ad0: 6c 69 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  lif SQLITE_ENABL
7ae0: 45 5f 53 54 41 54 33 0a 23 20 64 65 66 69 6e 65  E_STAT3.# define
7af0: 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53   SQLITE_ENABLE_S
7b00: 54 41 54 33 5f 4f 52 5f 53 54 41 54 34 20 31 0a  TAT3_OR_STAT4 1.
7b10: 23 65 6c 69 66 20 53 51 4c 49 54 45 5f 45 4e 41  #elif SQLITE_ENA
7b20: 42 4c 45 5f 53 54 41 54 33 5f 4f 52 5f 53 54 41  BLE_STAT3_OR_STA
7b30: 54 34 0a 23 20 75 6e 64 65 66 20 53 51 4c 49 54  T4.# undef SQLIT
7b40: 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 5f 4f  E_ENABLE_STAT3_O
7b50: 52 5f 53 54 41 54 34 0a 23 65 6e 64 69 66 0a 0a  R_STAT4.#endif..
7b60: 2f 2a 0a 2a 2a 20 53 45 4c 45 43 54 54 52 41 43  /*.** SELECTTRAC
7b70: 45 5f 45 4e 41 42 4c 45 44 20 77 69 6c 6c 20 62  E_ENABLED will b
7b80: 65 20 65 69 74 68 65 72 20 31 20 6f 72 20 30 20  e either 1 or 0 
7b90: 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20 77 68 65  depending on whe
7ba0: 74 68 65 72 20 6f 72 20 6e 6f 74 0a 2a 2a 20 74  ther or not.** t
7bb0: 68 65 20 53 65 6c 65 63 74 20 71 75 65 72 79 20  he Select query 
7bc0: 67 65 6e 65 72 61 74 6f 72 20 74 72 61 63 69 6e  generator tracin
7bd0: 67 20 6c 6f 67 69 63 20 69 73 20 74 75 72 6e 65  g logic is turne
7be0: 64 20 6f 6e 2e 0a 2a 2f 0a 23 69 66 20 64 65 66  d on..*/.#if def
7bf0: 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42  ined(SQLITE_ENAB
7c00: 4c 45 5f 53 45 4c 45 43 54 54 52 41 43 45 29 0a  LE_SELECTTRACE).
7c10: 23 20 64 65 66 69 6e 65 20 53 45 4c 45 43 54 54  # define SELECTT
7c20: 52 41 43 45 5f 45 4e 41 42 4c 45 44 20 31 0a 23  RACE_ENABLED 1.#
7c30: 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 53 45  else.# define SE
7c40: 4c 45 43 54 54 52 41 43 45 5f 45 4e 41 42 4c 45  LECTTRACE_ENABLE
7c50: 44 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  D 0.#endif../*.*
7c60: 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  * An instance of
7c70: 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   the following s
7c80: 74 72 75 63 74 75 72 65 20 69 73 20 75 73 65 64  tructure is used
7c90: 20 74 6f 20 73 74 6f 72 65 20 74 68 65 20 62 75   to store the bu
7ca0: 73 79 2d 68 61 6e 64 6c 65 72 0a 2a 2a 20 63 61  sy-handler.** ca
7cb0: 6c 6c 62 61 63 6b 20 66 6f 72 20 61 20 67 69 76  llback for a giv
7cc0: 65 6e 20 73 71 6c 69 74 65 20 68 61 6e 64 6c 65  en sqlite handle
7cd0: 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 73 71 6c 69  ..**.** The sqli
7ce0: 74 65 2e 62 75 73 79 48 61 6e 64 6c 65 72 20 6d  te.busyHandler m
7cf0: 65 6d 62 65 72 20 6f 66 20 74 68 65 20 73 71 6c  ember of the sql
7d00: 69 74 65 20 73 74 72 75 63 74 20 63 6f 6e 74 61  ite struct conta
7d10: 69 6e 73 20 74 68 65 20 62 75 73 79 0a 2a 2a 20  ins the busy.** 
7d20: 63 61 6c 6c 62 61 63 6b 20 66 6f 72 20 74 68 65  callback for the
7d30: 20 64 61 74 61 62 61 73 65 20 68 61 6e 64 6c 65   database handle
7d40: 2e 20 45 61 63 68 20 70 61 67 65 72 20 6f 70 65  . Each pager ope
7d50: 6e 65 64 20 76 69 61 20 74 68 65 20 73 71 6c 69  ned via the sqli
7d60: 74 65 0a 2a 2a 20 68 61 6e 64 6c 65 20 69 73 20  te.** handle is 
7d70: 70 61 73 73 65 64 20 61 20 70 6f 69 6e 74 65 72  passed a pointer
7d80: 20 74 6f 20 73 71 6c 69 74 65 2e 62 75 73 79 48   to sqlite.busyH
7d90: 61 6e 64 6c 65 72 2e 20 54 68 65 20 62 75 73 79  andler. The busy
7da0: 2d 68 61 6e 64 6c 65 72 0a 2a 2a 20 63 61 6c 6c  -handler.** call
7db0: 62 61 63 6b 20 69 73 20 63 75 72 72 65 6e 74 6c  back is currentl
7dc0: 79 20 69 6e 76 6f 6b 65 64 20 6f 6e 6c 79 20 66  y invoked only f
7dd0: 72 6f 6d 20 77 69 74 68 69 6e 20 70 61 67 65 72  rom within pager
7de0: 2e 63 2e 0a 2a 2f 0a 74 79 70 65 64 65 66 20 73  .c..*/.typedef s
7df0: 74 72 75 63 74 20 42 75 73 79 48 61 6e 64 6c 65  truct BusyHandle
7e00: 72 20 42 75 73 79 48 61 6e 64 6c 65 72 3b 0a 73  r BusyHandler;.s
7e10: 74 72 75 63 74 20 42 75 73 79 48 61 6e 64 6c 65  truct BusyHandle
7e20: 72 20 7b 0a 20 20 69 6e 74 20 28 2a 78 42 75 73  r {.  int (*xBus
7e30: 79 48 61 6e 64 6c 65 72 29 28 76 6f 69 64 20 2a  yHandler)(void *
7e40: 2c 69 6e 74 29 3b 20 20 2f 2a 20 54 68 65 20 62  ,int);  /* The b
7e50: 75 73 79 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a  usy callback */.
7e60: 20 20 76 6f 69 64 20 2a 70 42 75 73 79 41 72 67    void *pBusyArg
7e70: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
7e80: 20 20 20 20 2f 2a 20 46 69 72 73 74 20 61 72 67      /* First arg
7e90: 20 74 6f 20 62 75 73 79 20 63 61 6c 6c 62 61 63   to busy callbac
7ea0: 6b 20 2a 2f 0a 20 20 69 6e 74 20 6e 42 75 73 79  k */.  int nBusy
7eb0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
7ec0: 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 63 72           /* Incr
7ed0: 65 6d 65 6e 74 65 64 20 77 69 74 68 20 65 61 63  emented with eac
7ee0: 68 20 62 75 73 79 20 63 61 6c 6c 20 2a 2f 0a 20  h busy call */. 
7ef0: 20 75 38 20 62 45 78 74 72 61 46 69 6c 65 41 72   u8 bExtraFileAr
7f00: 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  g;              
7f10: 20 20 20 2f 2a 20 49 6e 63 6c 75 64 65 20 73 71     /* Include sq
7f20: 6c 69 74 65 33 5f 66 69 6c 65 20 61 73 20 63 61  lite3_file as ca
7f30: 6c 6c 62 61 63 6b 20 61 72 67 20 2a 2f 0a 7d 3b  llback arg */.};
7f40: 0a 0a 2f 2a 0a 2a 2a 20 4e 61 6d 65 20 6f 66 20  ../*.** Name of 
7f50: 74 68 65 20 6d 61 73 74 65 72 20 64 61 74 61 62  the master datab
7f60: 61 73 65 20 74 61 62 6c 65 2e 20 20 54 68 65 20  ase table.  The 
7f70: 6d 61 73 74 65 72 20 64 61 74 61 62 61 73 65 20  master database 
7f80: 74 61 62 6c 65 0a 2a 2a 20 69 73 20 61 20 73 70  table.** is a sp
7f90: 65 63 69 61 6c 20 74 61 62 6c 65 20 74 68 61 74  ecial table that
7fa0: 20 68 6f 6c 64 73 20 74 68 65 20 6e 61 6d 65 73   holds the names
7fb0: 20 61 6e 64 20 61 74 74 72 69 62 75 74 65 73 20   and attributes 
7fc0: 6f 66 20 61 6c 6c 0a 2a 2a 20 75 73 65 72 20 74  of all.** user t
7fd0: 61 62 6c 65 73 20 61 6e 64 20 69 6e 64 69 63 65  ables and indice
7fe0: 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 41  s..*/.#define MA
7ff0: 53 54 45 52 5f 4e 41 4d 45 20 20 20 20 20 20 20  STER_NAME       
8000: 22 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 22 0a  "sqlite_master".
8010: 23 64 65 66 69 6e 65 20 54 45 4d 50 5f 4d 41 53  #define TEMP_MAS
8020: 54 45 52 5f 4e 41 4d 45 20 20 22 73 71 6c 69 74  TER_NAME  "sqlit
8030: 65 5f 74 65 6d 70 5f 6d 61 73 74 65 72 22 0a 0a  e_temp_master"..
8040: 2f 2a 0a 2a 2a 20 54 68 65 20 72 6f 6f 74 2d 70  /*.** The root-p
8050: 61 67 65 20 6f 66 20 74 68 65 20 6d 61 73 74 65  age of the maste
8060: 72 20 64 61 74 61 62 61 73 65 20 74 61 62 6c 65  r database table
8070: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 41 53  ..*/.#define MAS
8080: 54 45 52 5f 52 4f 4f 54 20 20 20 20 20 20 20 31  TER_ROOT       1
8090: 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6e 61 6d 65  ../*.** The name
80a0: 20 6f 66 20 74 68 65 20 73 63 68 65 6d 61 20 74   of the schema t
80b0: 61 62 6c 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  able..*/.#define
80c0: 20 53 43 48 45 4d 41 5f 54 41 42 4c 45 28 78 29   SCHEMA_TABLE(x)
80d0: 20 20 28 28 21 4f 4d 49 54 5f 54 45 4d 50 44 42    ((!OMIT_TEMPDB
80e0: 29 26 26 28 78 3d 3d 31 29 3f 54 45 4d 50 5f 4d  )&&(x==1)?TEMP_M
80f0: 41 53 54 45 52 5f 4e 41 4d 45 3a 4d 41 53 54 45  ASTER_NAME:MASTE
8100: 52 5f 4e 41 4d 45 29 0a 0a 2f 2a 0a 2a 2a 20 41  R_NAME)../*.** A
8110: 20 63 6f 6e 76 65 6e 69 65 6e 63 65 20 6d 61 63   convenience mac
8120: 72 6f 20 74 68 61 74 20 72 65 74 75 72 6e 73 20  ro that returns 
8130: 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 65 6c  the number of el
8140: 65 6d 65 6e 74 73 20 69 6e 0a 2a 2a 20 61 6e 20  ements in.** an 
8150: 61 72 72 61 79 2e 0a 2a 2f 0a 23 64 65 66 69 6e  array..*/.#defin
8160: 65 20 41 72 72 61 79 53 69 7a 65 28 58 29 20 20  e ArraySize(X)  
8170: 20 20 28 28 69 6e 74 29 28 73 69 7a 65 6f 66 28    ((int)(sizeof(
8180: 58 29 2f 73 69 7a 65 6f 66 28 58 5b 30 5d 29 29  X)/sizeof(X[0]))
8190: 29 0a 0a 2f 2a 0a 2a 2a 20 44 65 74 65 72 6d 69  )../*.** Determi
81a0: 6e 65 20 69 66 20 74 68 65 20 61 72 67 75 6d 65  ne if the argume
81b0: 6e 74 20 69 73 20 61 20 70 6f 77 65 72 20 6f 66  nt is a power of
81c0: 20 74 77 6f 0a 2a 2f 0a 23 64 65 66 69 6e 65 20   two.*/.#define 
81d0: 49 73 50 6f 77 65 72 4f 66 54 77 6f 28 58 29 20  IsPowerOfTwo(X) 
81e0: 28 28 28 58 29 26 28 28 58 29 2d 31 29 29 3d 3d  (((X)&((X)-1))==
81f0: 30 29 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f  0)../*.** The fo
8200: 6c 6c 6f 77 69 6e 67 20 76 61 6c 75 65 20 61 73  llowing value as
8210: 20 61 20 64 65 73 74 72 75 63 74 6f 72 20 6d 65   a destructor me
8220: 61 6e 73 20 74 6f 20 75 73 65 20 73 71 6c 69 74  ans to use sqlit
8230: 65 33 44 62 46 72 65 65 28 29 2e 0a 2a 2a 20 54  e3DbFree()..** T
8240: 68 65 20 73 71 6c 69 74 65 33 44 62 46 72 65 65  he sqlite3DbFree
8250: 28 29 20 72 6f 75 74 69 6e 65 20 72 65 71 75 69  () routine requi
8260: 72 65 73 20 74 77 6f 20 70 61 72 61 6d 65 74 65  res two paramete
8270: 72 73 20 69 6e 73 74 65 61 64 20 6f 66 20 74 68  rs instead of th
8280: 65 0a 2a 2a 20 6f 6e 65 20 70 61 72 61 6d 65 74  e.** one paramet
8290: 65 72 20 74 68 61 74 20 64 65 73 74 72 75 63 74  er that destruct
82a0: 6f 72 73 20 6e 6f 72 6d 61 6c 6c 79 20 77 61 6e  ors normally wan
82b0: 74 2e 20 20 53 6f 20 77 65 20 68 61 76 65 20 74  t.  So we have t
82c0: 6f 20 69 6e 74 72 6f 64 75 63 65 0a 2a 2a 20 74  o introduce.** t
82d0: 68 69 73 20 6d 61 67 69 63 20 76 61 6c 75 65 20  his magic value 
82e0: 74 68 61 74 20 74 68 65 20 63 6f 64 65 20 6b 6e  that the code kn
82f0: 6f 77 73 20 74 6f 20 68 61 6e 64 6c 65 20 64 69  ows to handle di
8300: 66 66 65 72 65 6e 74 6c 79 2e 20 20 41 6e 79 0a  fferently.  Any.
8310: 2a 2a 20 70 6f 69 6e 74 65 72 20 77 69 6c 6c 20  ** pointer will 
8320: 77 6f 72 6b 20 68 65 72 65 20 61 73 20 6c 6f 6e  work here as lon
8330: 67 20 61 73 20 69 74 20 69 73 20 64 69 73 74 69  g as it is disti
8340: 6e 63 74 20 66 72 6f 6d 20 53 51 4c 49 54 45 5f  nct from SQLITE_
8350: 53 54 41 54 49 43 0a 2a 2a 20 61 6e 64 20 53 51  STATIC.** and SQ
8360: 4c 49 54 45 5f 54 52 41 4e 53 49 45 4e 54 2e 0a  LITE_TRANSIENT..
8370: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
8380: 45 5f 44 59 4e 41 4d 49 43 20 20 20 28 28 73 71  E_DYNAMIC   ((sq
8390: 6c 69 74 65 33 5f 64 65 73 74 72 75 63 74 6f 72  lite3_destructor
83a0: 5f 74 79 70 65 29 73 71 6c 69 74 65 33 4d 61 6c  _type)sqlite3Mal
83b0: 6c 6f 63 53 69 7a 65 29 0a 0a 2f 2a 0a 2a 2a 20  locSize)../*.** 
83c0: 57 68 65 6e 20 53 51 4c 49 54 45 5f 4f 4d 49 54  When SQLITE_OMIT
83d0: 5f 57 53 44 20 69 73 20 64 65 66 69 6e 65 64 2c  _WSD is defined,
83e0: 20 69 74 20 6d 65 61 6e 73 20 74 68 61 74 20 74   it means that t
83f0: 68 65 20 74 61 72 67 65 74 20 70 6c 61 74 66 6f  he target platfo
8400: 72 6d 20 64 6f 65 73 0a 2a 2a 20 6e 6f 74 20 73  rm does.** not s
8410: 75 70 70 6f 72 74 20 57 72 69 74 61 62 6c 65 20  upport Writable 
8420: 53 74 61 74 69 63 20 44 61 74 61 20 28 57 53 44  Static Data (WSD
8430: 29 20 73 75 63 68 20 61 73 20 67 6c 6f 62 61 6c  ) such as global
8440: 20 61 6e 64 20 73 74 61 74 69 63 20 76 61 72 69   and static vari
8450: 61 62 6c 65 73 2e 0a 2a 2a 20 41 6c 6c 20 76 61  ables..** All va
8460: 72 69 61 62 6c 65 73 20 6d 75 73 74 20 65 69 74  riables must eit
8470: 68 65 72 20 62 65 20 6f 6e 20 74 68 65 20 73 74  her be on the st
8480: 61 63 6b 20 6f 72 20 64 79 6e 61 6d 69 63 61 6c  ack or dynamical
8490: 6c 79 20 61 6c 6c 6f 63 61 74 65 64 20 66 72 6f  ly allocated fro
84a0: 6d 0a 2a 2a 20 74 68 65 20 68 65 61 70 2e 20 20  m.** the heap.  
84b0: 57 68 65 6e 20 57 53 44 20 69 73 20 75 6e 73 75  When WSD is unsu
84c0: 70 70 6f 72 74 65 64 2c 20 74 68 65 20 76 61 72  pported, the var
84d0: 69 61 62 6c 65 20 64 65 63 6c 61 72 61 74 69 6f  iable declaratio
84e0: 6e 73 20 73 63 61 74 74 65 72 65 64 0a 2a 2a 20  ns scattered.** 
84f0: 74 68 72 6f 75 67 68 6f 75 74 20 74 68 65 20 53  throughout the S
8500: 51 4c 69 74 65 20 63 6f 64 65 20 6d 75 73 74 20  QLite code must 
8510: 62 65 63 6f 6d 65 20 63 6f 6e 73 74 61 6e 74 73  become constants
8520: 20 69 6e 73 74 65 61 64 2e 20 20 54 68 65 20 53   instead.  The S
8530: 51 4c 49 54 45 5f 57 53 44 0a 2a 2a 20 6d 61 63  QLITE_WSD.** mac
8540: 72 6f 20 69 73 20 75 73 65 64 20 66 6f 72 20 74  ro is used for t
8550: 68 69 73 20 70 75 72 70 6f 73 65 2e 20 20 41 6e  his purpose.  An
8560: 64 20 69 6e 73 74 65 61 64 20 6f 66 20 72 65 66  d instead of ref
8570: 65 72 65 6e 63 69 6e 67 20 74 68 65 20 76 61 72  erencing the var
8580: 69 61 62 6c 65 0a 2a 2a 20 64 69 72 65 63 74 6c  iable.** directl
8590: 79 2c 20 77 65 20 75 73 65 20 69 74 73 20 63 6f  y, we use its co
85a0: 6e 73 74 61 6e 74 20 61 73 20 61 20 6b 65 79 20  nstant as a key 
85b0: 74 6f 20 6c 6f 6f 6b 75 70 20 74 68 65 20 72 75  to lookup the ru
85c0: 6e 2d 74 69 6d 65 20 61 6c 6c 6f 63 61 74 65 64  n-time allocated
85d0: 0a 2a 2a 20 62 75 66 66 65 72 20 74 68 61 74 20  .** buffer that 
85e0: 68 6f 6c 64 73 20 72 65 61 6c 20 76 61 72 69 61  holds real varia
85f0: 62 6c 65 2e 20 20 54 68 65 20 63 6f 6e 73 74 61  ble.  The consta
8600: 6e 74 20 69 73 20 61 6c 73 6f 20 74 68 65 20 69  nt is also the i
8610: 6e 69 74 69 61 6c 69 7a 65 72 0a 2a 2a 20 66 6f  nitializer.** fo
8620: 72 20 74 68 65 20 72 75 6e 2d 74 69 6d 65 20 61  r the run-time a
8630: 6c 6c 6f 63 61 74 65 64 20 62 75 66 66 65 72 2e  llocated buffer.
8640: 0a 2a 2a 0a 2a 2a 20 49 6e 20 74 68 65 20 75 73  .**.** In the us
8650: 75 61 6c 20 63 61 73 65 20 77 68 65 72 65 20 57  ual case where W
8660: 53 44 20 69 73 20 73 75 70 70 6f 72 74 65 64 2c  SD is supported,
8670: 20 74 68 65 20 53 51 4c 49 54 45 5f 57 53 44 20   the SQLITE_WSD 
8680: 61 6e 64 20 47 4c 4f 42 41 4c 0a 2a 2a 20 6d 61  and GLOBAL.** ma
8690: 63 72 6f 73 20 62 65 63 6f 6d 65 20 6e 6f 2d 6f  cros become no-o
86a0: 70 73 20 61 6e 64 20 68 61 76 65 20 7a 65 72 6f  ps and have zero
86b0: 20 70 65 72 66 6f 72 6d 61 6e 63 65 20 69 6d 70   performance imp
86c0: 61 63 74 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53  act..*/.#ifdef S
86d0: 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 53 44 0a 20  QLITE_OMIT_WSD. 
86e0: 20 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f   #define SQLITE_
86f0: 57 53 44 20 63 6f 6e 73 74 0a 20 20 23 64 65 66  WSD const.  #def
8700: 69 6e 65 20 47 4c 4f 42 41 4c 28 74 2c 76 29 20  ine GLOBAL(t,v) 
8710: 28 2a 28 74 2a 29 73 71 6c 69 74 65 33 5f 77 73  (*(t*)sqlite3_ws
8720: 64 5f 66 69 6e 64 28 28 76 6f 69 64 2a 29 26 28  d_find((void*)&(
8730: 76 29 2c 20 73 69 7a 65 6f 66 28 76 29 29 29 0a  v), sizeof(v))).
8740: 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65    #define sqlite
8750: 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 20 47 4c  3GlobalConfig GL
8760: 4f 42 41 4c 28 73 74 72 75 63 74 20 53 71 6c 69  OBAL(struct Sqli
8770: 74 65 33 43 6f 6e 66 69 67 2c 20 73 71 6c 69 74  te3Config, sqlit
8780: 65 33 43 6f 6e 66 69 67 29 0a 20 20 69 6e 74 20  e3Config).  int 
8790: 73 71 6c 69 74 65 33 5f 77 73 64 5f 69 6e 69 74  sqlite3_wsd_init
87a0: 28 69 6e 74 20 4e 2c 20 69 6e 74 20 4a 29 3b 0a  (int N, int J);.
87b0: 20 20 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 5f    void *sqlite3_
87c0: 77 73 64 5f 66 69 6e 64 28 76 6f 69 64 20 2a 4b  wsd_find(void *K
87d0: 2c 20 69 6e 74 20 4c 29 3b 0a 23 65 6c 73 65 0a  , int L);.#else.
87e0: 20 20 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45    #define SQLITE
87f0: 5f 57 53 44 0a 20 20 23 64 65 66 69 6e 65 20 47  _WSD.  #define G
8800: 4c 4f 42 41 4c 28 74 2c 76 29 20 76 0a 20 20 23  LOBAL(t,v) v.  #
8810: 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 47 6c  define sqlite3Gl
8820: 6f 62 61 6c 43 6f 6e 66 69 67 20 73 71 6c 69 74  obalConfig sqlit
8830: 65 33 43 6f 6e 66 69 67 0a 23 65 6e 64 69 66 0a  e3Config.#endif.
8840: 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f  ./*.** The follo
8850: 77 69 6e 67 20 6d 61 63 72 6f 73 20 61 72 65 20  wing macros are 
8860: 75 73 65 64 20 74 6f 20 73 75 70 70 72 65 73 73  used to suppress
8870: 20 63 6f 6d 70 69 6c 65 72 20 77 61 72 6e 69 6e   compiler warnin
8880: 67 73 20 61 6e 64 20 74 6f 0a 2a 2a 20 6d 61 6b  gs and to.** mak
8890: 65 20 69 74 20 63 6c 65 61 72 20 74 6f 20 68 75  e it clear to hu
88a0: 6d 61 6e 20 72 65 61 64 65 72 73 20 77 68 65 6e  man readers when
88b0: 20 61 20 66 75 6e 63 74 69 6f 6e 20 70 61 72 61   a function para
88c0: 6d 65 74 65 72 20 69 73 20 64 65 6c 69 62 65 72  meter is deliber
88d0: 61 74 65 6c 79 0a 2a 2a 20 6c 65 66 74 20 75 6e  ately.** left un
88e0: 75 73 65 64 20 77 69 74 68 69 6e 20 74 68 65 20  used within the 
88f0: 62 6f 64 79 20 6f 66 20 61 20 66 75 6e 63 74 69  body of a functi
8900: 6f 6e 2e 20 54 68 69 73 20 75 73 75 61 6c 6c 79  on. This usually
8910: 20 68 61 70 70 65 6e 73 20 77 68 65 6e 0a 2a 2a   happens when.**
8920: 20 61 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 63   a function is c
8930: 61 6c 6c 65 64 20 76 69 61 20 61 20 66 75 6e 63  alled via a func
8940: 74 69 6f 6e 20 70 6f 69 6e 74 65 72 2e 20 46 6f  tion pointer. Fo
8950: 72 20 65 78 61 6d 70 6c 65 20 74 68 65 0a 2a 2a  r example the.**
8960: 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20   implementation 
8970: 6f 66 20 61 6e 20 53 51 4c 20 61 67 67 72 65 67  of an SQL aggreg
8980: 61 74 65 20 73 74 65 70 20 63 61 6c 6c 62 61 63  ate step callbac
8990: 6b 20 6d 61 79 20 6e 6f 74 20 75 73 65 20 74 68  k may not use th
89a0: 65 0a 2a 2a 20 70 61 72 61 6d 65 74 65 72 20 69  e.** parameter i
89b0: 6e 64 69 63 61 74 69 6e 67 20 74 68 65 20 6e 75  ndicating the nu
89c0: 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74  mber of argument
89d0: 73 20 70 61 73 73 65 64 20 74 6f 20 74 68 65 20  s passed to the 
89e0: 61 67 67 72 65 67 61 74 65 2c 0a 2a 2a 20 69 66  aggregate,.** if
89f0: 20 69 74 20 6b 6e 6f 77 73 20 74 68 61 74 20 74   it knows that t
8a00: 68 69 73 20 69 73 20 65 6e 66 6f 72 63 65 64 20  his is enforced 
8a10: 65 6c 73 65 77 68 65 72 65 2e 0a 2a 2a 0a 2a 2a  elsewhere..**.**
8a20: 20 57 68 65 6e 20 61 20 66 75 6e 63 74 69 6f 6e   When a function
8a30: 20 70 61 72 61 6d 65 74 65 72 20 69 73 20 6e 6f   parameter is no
8a40: 74 20 75 73 65 64 20 61 74 20 61 6c 6c 20 77 69  t used at all wi
8a50: 74 68 69 6e 20 74 68 65 20 62 6f 64 79 20 6f 66  thin the body of
8a60: 20 61 20 66 75 6e 63 74 69 6f 6e 2c 0a 2a 2a 20   a function,.** 
8a70: 69 74 20 69 73 20 67 65 6e 65 72 61 6c 6c 79 20  it is generally 
8a80: 6e 61 6d 65 64 20 22 4e 6f 74 55 73 65 64 22 20  named "NotUsed" 
8a90: 6f 72 20 22 4e 6f 74 55 73 65 64 32 22 20 74 6f  or "NotUsed2" to
8aa0: 20 6d 61 6b 65 20 74 68 69 6e 67 73 20 65 76 65   make things eve
8ab0: 6e 20 63 6c 65 61 72 65 72 2e 0a 2a 2a 20 48 6f  n clearer..** Ho
8ac0: 77 65 76 65 72 2c 20 74 68 65 73 65 20 6d 61 63  wever, these mac
8ad0: 72 6f 73 20 6d 61 79 20 61 6c 73 6f 20 62 65 20  ros may also be 
8ae0: 75 73 65 64 20 74 6f 20 73 75 70 70 72 65 73 73  used to suppress
8af0: 20 77 61 72 6e 69 6e 67 73 20 72 65 6c 61 74 65   warnings relate
8b00: 64 20 74 6f 0a 2a 2a 20 70 61 72 61 6d 65 74 65  d to.** paramete
8b10: 72 73 20 74 68 61 74 20 6d 61 79 20 6f 72 20 6d  rs that may or m
8b20: 61 79 20 6e 6f 74 20 62 65 20 75 73 65 64 20 64  ay not be used d
8b30: 65 70 65 6e 64 69 6e 67 20 6f 6e 20 63 6f 6d 70  epending on comp
8b40: 69 6c 61 74 69 6f 6e 20 6f 70 74 69 6f 6e 73 2e  ilation options.
8b50: 0a 2a 2a 20 46 6f 72 20 65 78 61 6d 70 6c 65 20  .** For example 
8b60: 74 68 6f 73 65 20 70 61 72 61 6d 65 74 65 72 73  those parameters
8b70: 20 6f 6e 6c 79 20 75 73 65 64 20 69 6e 20 61 73   only used in as
8b80: 73 65 72 74 28 29 20 73 74 61 74 65 6d 65 6e 74  sert() statement
8b90: 73 2e 20 49 6e 20 74 68 65 73 65 0a 2a 2a 20 63  s. In these.** c
8ba0: 61 73 65 73 20 74 68 65 20 70 61 72 61 6d 65 74  ases the paramet
8bb0: 65 72 73 20 61 72 65 20 6e 61 6d 65 64 20 61 73  ers are named as
8bc0: 20 70 65 72 20 74 68 65 20 75 73 75 61 6c 20 63   per the usual c
8bd0: 6f 6e 76 65 6e 74 69 6f 6e 73 2e 0a 2a 2f 0a 23  onventions..*/.#
8be0: 64 65 66 69 6e 65 20 55 4e 55 53 45 44 5f 50 41  define UNUSED_PA
8bf0: 52 41 4d 45 54 45 52 28 78 29 20 28 76 6f 69 64  RAMETER(x) (void
8c00: 29 28 78 29 0a 23 64 65 66 69 6e 65 20 55 4e 55  )(x).#define UNU
8c10: 53 45 44 5f 50 41 52 41 4d 45 54 45 52 32 28 78  SED_PARAMETER2(x
8c20: 2c 79 29 20 55 4e 55 53 45 44 5f 50 41 52 41 4d  ,y) UNUSED_PARAM
8c30: 45 54 45 52 28 78 29 2c 55 4e 55 53 45 44 5f 50  ETER(x),UNUSED_P
8c40: 41 52 41 4d 45 54 45 52 28 79 29 0a 0a 2f 2a 0a  ARAMETER(y)../*.
8c50: 2a 2a 20 46 6f 72 77 61 72 64 20 72 65 66 65 72  ** Forward refer
8c60: 65 6e 63 65 73 20 74 6f 20 73 74 72 75 63 74 75  ences to structu
8c70: 72 65 73 0a 2a 2f 0a 74 79 70 65 64 65 66 20 73  res.*/.typedef s
8c80: 74 72 75 63 74 20 41 67 67 49 6e 66 6f 20 41 67  truct AggInfo Ag
8c90: 67 49 6e 66 6f 3b 0a 74 79 70 65 64 65 66 20 73  gInfo;.typedef s
8ca0: 74 72 75 63 74 20 41 75 74 68 43 6f 6e 74 65 78  truct AuthContex
8cb0: 74 20 41 75 74 68 43 6f 6e 74 65 78 74 3b 0a 74  t AuthContext;.t
8cc0: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 41 75  ypedef struct Au
8cd0: 74 6f 69 6e 63 49 6e 66 6f 20 41 75 74 6f 69 6e  toincInfo Autoin
8ce0: 63 49 6e 66 6f 3b 0a 74 79 70 65 64 65 66 20 73  cInfo;.typedef s
8cf0: 74 72 75 63 74 20 42 69 74 76 65 63 20 42 69 74  truct Bitvec Bit
8d00: 76 65 63 3b 0a 74 79 70 65 64 65 66 20 73 74 72  vec;.typedef str
8d10: 75 63 74 20 43 6f 6c 6c 53 65 71 20 43 6f 6c 6c  uct CollSeq Coll
8d20: 53 65 71 3b 0a 74 79 70 65 64 65 66 20 73 74 72  Seq;.typedef str
8d30: 75 63 74 20 43 6f 6c 75 6d 6e 20 43 6f 6c 75 6d  uct Column Colum
8d40: 6e 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  n;.typedef struc
8d50: 74 20 44 62 20 44 62 3b 0a 74 79 70 65 64 65 66  t Db Db;.typedef
8d60: 20 73 74 72 75 63 74 20 53 63 68 65 6d 61 20 53   struct Schema S
8d70: 63 68 65 6d 61 3b 0a 74 79 70 65 64 65 66 20 73  chema;.typedef s
8d80: 74 72 75 63 74 20 45 78 70 72 20 45 78 70 72 3b  truct Expr Expr;
8d90: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
8da0: 45 78 70 72 4c 69 73 74 20 45 78 70 72 4c 69 73  ExprList ExprLis
8db0: 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  t;.typedef struc
8dc0: 74 20 46 4b 65 79 20 46 4b 65 79 3b 0a 74 79 70  t FKey FKey;.typ
8dd0: 65 64 65 66 20 73 74 72 75 63 74 20 46 75 6e 63  edef struct Func
8de0: 44 65 73 74 72 75 63 74 6f 72 20 46 75 6e 63 44  Destructor FuncD
8df0: 65 73 74 72 75 63 74 6f 72 3b 0a 74 79 70 65 64  estructor;.typed
8e00: 65 66 20 73 74 72 75 63 74 20 46 75 6e 63 44 65  ef struct FuncDe
8e10: 66 20 46 75 6e 63 44 65 66 3b 0a 74 79 70 65 64  f FuncDef;.typed
8e20: 65 66 20 73 74 72 75 63 74 20 46 75 6e 63 44 65  ef struct FuncDe
8e30: 66 48 61 73 68 20 46 75 6e 63 44 65 66 48 61 73  fHash FuncDefHas
8e40: 68 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  h;.typedef struc
8e50: 74 20 49 64 4c 69 73 74 20 49 64 4c 69 73 74 3b  t IdList IdList;
8e60: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
8e70: 49 6e 64 65 78 20 49 6e 64 65 78 3b 0a 74 79 70  Index Index;.typ
8e80: 65 64 65 66 20 73 74 72 75 63 74 20 49 6e 64 65  edef struct Inde
8e90: 78 53 61 6d 70 6c 65 20 49 6e 64 65 78 53 61 6d  xSample IndexSam
8ea0: 70 6c 65 3b 0a 74 79 70 65 64 65 66 20 73 74 72  ple;.typedef str
8eb0: 75 63 74 20 4b 65 79 43 6c 61 73 73 20 4b 65 79  uct KeyClass Key
8ec0: 43 6c 61 73 73 3b 0a 74 79 70 65 64 65 66 20 73  Class;.typedef s
8ed0: 74 72 75 63 74 20 4b 65 79 49 6e 66 6f 20 4b 65  truct KeyInfo Ke
8ee0: 79 49 6e 66 6f 3b 0a 74 79 70 65 64 65 66 20 73  yInfo;.typedef s
8ef0: 74 72 75 63 74 20 4c 6f 6f 6b 61 73 69 64 65 20  truct Lookaside 
8f00: 4c 6f 6f 6b 61 73 69 64 65 3b 0a 74 79 70 65 64  Lookaside;.typed
8f10: 65 66 20 73 74 72 75 63 74 20 4c 6f 6f 6b 61 73  ef struct Lookas
8f20: 69 64 65 53 6c 6f 74 20 4c 6f 6f 6b 61 73 69 64  ideSlot Lookasid
8f30: 65 53 6c 6f 74 3b 0a 74 79 70 65 64 65 66 20 73  eSlot;.typedef s
8f40: 74 72 75 63 74 20 4d 6f 64 75 6c 65 20 4d 6f 64  truct Module Mod
8f50: 75 6c 65 3b 0a 74 79 70 65 64 65 66 20 73 74 72  ule;.typedef str
8f60: 75 63 74 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20  uct NameContext 
8f70: 4e 61 6d 65 43 6f 6e 74 65 78 74 3b 0a 74 79 70  NameContext;.typ
8f80: 65 64 65 66 20 73 74 72 75 63 74 20 50 61 72 73  edef struct Pars
8f90: 65 20 50 61 72 73 65 3b 0a 74 79 70 65 64 65 66  e Parse;.typedef
8fa0: 20 73 74 72 75 63 74 20 50 72 65 55 70 64 61 74   struct PreUpdat
8fb0: 65 20 50 72 65 55 70 64 61 74 65 3b 0a 74 79 70  e PreUpdate;.typ
8fc0: 65 64 65 66 20 73 74 72 75 63 74 20 50 72 69 6e  edef struct Prin
8fd0: 74 66 41 72 67 75 6d 65 6e 74 73 20 50 72 69 6e  tfArguments Prin
8fe0: 74 66 41 72 67 75 6d 65 6e 74 73 3b 0a 74 79 70  tfArguments;.typ
8ff0: 65 64 65 66 20 73 74 72 75 63 74 20 52 65 6e 61  edef struct Rena
9000: 6d 65 54 6f 6b 65 6e 20 52 65 6e 61 6d 65 54 6f  meToken RenameTo
9010: 6b 65 6e 3b 0a 74 79 70 65 64 65 66 20 73 74 72  ken;.typedef str
9020: 75 63 74 20 52 6f 77 53 65 74 20 52 6f 77 53 65  uct RowSet RowSe
9030: 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  t;.typedef struc
9040: 74 20 53 61 76 65 70 6f 69 6e 74 20 53 61 76 65  t Savepoint Save
9050: 70 6f 69 6e 74 3b 0a 74 79 70 65 64 65 66 20 73  point;.typedef s
9060: 74 72 75 63 74 20 53 65 6c 65 63 74 20 53 65 6c  truct Select Sel
9070: 65 63 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72  ect;.typedef str
9080: 75 63 74 20 53 51 4c 69 74 65 54 68 72 65 61 64  uct SQLiteThread
9090: 20 53 51 4c 69 74 65 54 68 72 65 61 64 3b 0a 74   SQLiteThread;.t
90a0: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 53 65  ypedef struct Se
90b0: 6c 65 63 74 44 65 73 74 20 53 65 6c 65 63 74 44  lectDest SelectD
90c0: 65 73 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72  est;.typedef str
90d0: 75 63 74 20 53 72 63 4c 69 73 74 20 53 72 63 4c  uct SrcList SrcL
90e0: 69 73 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72  ist;.typedef str
90f0: 75 63 74 20 73 71 6c 69 74 65 33 5f 73 74 72 20  uct sqlite3_str 
9100: 53 74 72 41 63 63 75 6d 3b 20 2f 2a 20 49 6e 74  StrAccum; /* Int
9110: 65 72 6e 61 6c 20 61 6c 69 61 73 20 66 6f 72 20  ernal alias for 
9120: 73 71 6c 69 74 65 33 5f 73 74 72 20 2a 2f 0a 74  sqlite3_str */.t
9130: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 54 61  ypedef struct Ta
9140: 62 6c 65 20 54 61 62 6c 65 3b 0a 74 79 70 65 64  ble Table;.typed
9150: 65 66 20 73 74 72 75 63 74 20 54 61 62 6c 65 4c  ef struct TableL
9160: 6f 63 6b 20 54 61 62 6c 65 4c 6f 63 6b 3b 0a 74  ock TableLock;.t
9170: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 54 6f  ypedef struct To
9180: 6b 65 6e 20 54 6f 6b 65 6e 3b 0a 74 79 70 65 64  ken Token;.typed
9190: 65 66 20 73 74 72 75 63 74 20 54 72 65 65 56 69  ef struct TreeVi
91a0: 65 77 20 54 72 65 65 56 69 65 77 3b 0a 74 79 70  ew TreeView;.typ
91b0: 65 64 65 66 20 73 74 72 75 63 74 20 54 72 69 67  edef struct Trig
91c0: 67 65 72 20 54 72 69 67 67 65 72 3b 0a 74 79 70  ger Trigger;.typ
91d0: 65 64 65 66 20 73 74 72 75 63 74 20 54 72 69 67  edef struct Trig
91e0: 67 65 72 50 72 67 20 54 72 69 67 67 65 72 50 72  gerPrg TriggerPr
91f0: 67 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  g;.typedef struc
9200: 74 20 54 72 69 67 67 65 72 53 74 65 70 20 54 72  t TriggerStep Tr
9210: 69 67 67 65 72 53 74 65 70 3b 0a 74 79 70 65 64  iggerStep;.typed
9220: 65 66 20 73 74 72 75 63 74 20 55 6e 70 61 63 6b  ef struct Unpack
9230: 65 64 52 65 63 6f 72 64 20 55 6e 70 61 63 6b 65  edRecord Unpacke
9240: 64 52 65 63 6f 72 64 3b 0a 74 79 70 65 64 65 66  dRecord;.typedef
9250: 20 73 74 72 75 63 74 20 55 70 73 65 72 74 20 55   struct Upsert U
9260: 70 73 65 72 74 3b 0a 74 79 70 65 64 65 66 20 73  psert;.typedef s
9270: 74 72 75 63 74 20 56 54 61 62 6c 65 20 56 54 61  truct VTable VTa
9280: 62 6c 65 3b 0a 74 79 70 65 64 65 66 20 73 74 72  ble;.typedef str
9290: 75 63 74 20 56 74 61 62 43 74 78 20 56 74 61 62  uct VtabCtx Vtab
92a0: 43 74 78 3b 0a 74 79 70 65 64 65 66 20 73 74 72  Ctx;.typedef str
92b0: 75 63 74 20 57 61 6c 6b 65 72 20 57 61 6c 6b 65  uct Walker Walke
92c0: 72 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  r;.typedef struc
92d0: 74 20 57 68 65 72 65 49 6e 66 6f 20 57 68 65 72  t WhereInfo Wher
92e0: 65 49 6e 66 6f 3b 0a 74 79 70 65 64 65 66 20 73  eInfo;.typedef s
92f0: 74 72 75 63 74 20 57 69 6e 64 6f 77 20 57 69 6e  truct Window Win
9300: 64 6f 77 3b 0a 74 79 70 65 64 65 66 20 73 74 72  dow;.typedef str
9310: 75 63 74 20 57 69 74 68 20 57 69 74 68 3b 0a 0a  uct With With;..
9320: 0a 2f 2a 0a 2a 2a 20 54 68 65 20 62 69 74 6d 61  ./*.** The bitma
9330: 73 6b 20 64 61 74 61 74 79 70 65 20 64 65 66 69  sk datatype defi
9340: 6e 65 64 20 62 65 6c 6f 77 20 69 73 20 75 73 65  ned below is use
9350: 64 20 66 6f 72 20 76 61 72 69 6f 75 73 20 6f 70  d for various op
9360: 74 69 6d 69 7a 61 74 69 6f 6e 73 2e 0a 2a 2a 0a  timizations..**.
9370: 2a 2a 20 43 68 61 6e 67 69 6e 67 20 74 68 69 73  ** Changing this
9380: 20 66 72 6f 6d 20 61 20 36 34 2d 62 69 74 20 74   from a 64-bit t
9390: 6f 20 61 20 33 32 2d 62 69 74 20 74 79 70 65 20  o a 32-bit type 
93a0: 6c 69 6d 69 74 73 20 74 68 65 20 6e 75 6d 62 65  limits the numbe
93b0: 72 20 6f 66 0a 2a 2a 20 74 61 62 6c 65 73 20 69  r of.** tables i
93c0: 6e 20 61 20 6a 6f 69 6e 20 74 6f 20 33 32 20 69  n a join to 32 i
93d0: 6e 73 74 65 61 64 20 6f 66 20 36 34 2e 20 20 42  nstead of 64.  B
93e0: 75 74 20 69 74 20 61 6c 73 6f 20 72 65 64 75 63  ut it also reduc
93f0: 65 73 20 74 68 65 20 73 69 7a 65 0a 2a 2a 20 6f  es the size.** o
9400: 66 20 74 68 65 20 6c 69 62 72 61 72 79 20 62 79  f the library by
9410: 20 37 33 38 20 62 79 74 65 73 20 6f 6e 20 69 78   738 bytes on ix
9420: 38 36 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51  86..*/.#ifdef SQ
9430: 4c 49 54 45 5f 42 49 54 4d 41 53 4b 5f 54 59 50  LITE_BITMASK_TYP
9440: 45 0a 20 20 74 79 70 65 64 65 66 20 53 51 4c 49  E.  typedef SQLI
9450: 54 45 5f 42 49 54 4d 41 53 4b 5f 54 59 50 45 20  TE_BITMASK_TYPE 
9460: 42 69 74 6d 61 73 6b 3b 0a 23 65 6c 73 65 0a 20  Bitmask;.#else. 
9470: 20 74 79 70 65 64 65 66 20 75 36 34 20 42 69 74   typedef u64 Bit
9480: 6d 61 73 6b 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a  mask;.#endif../*
9490: 0a 2a 2a 20 54 68 65 20 6e 75 6d 62 65 72 20 6f  .** The number o
94a0: 66 20 62 69 74 73 20 69 6e 20 61 20 42 69 74 6d  f bits in a Bitm
94b0: 61 73 6b 2e 20 20 22 42 4d 53 22 20 6d 65 61 6e  ask.  "BMS" mean
94c0: 73 20 22 42 69 74 4d 61 73 6b 20 53 69 7a 65 22  s "BitMask Size"
94d0: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 42 4d 53  ..*/.#define BMS
94e0: 20 20 28 28 69 6e 74 29 28 73 69 7a 65 6f 66 28    ((int)(sizeof(
94f0: 42 69 74 6d 61 73 6b 29 2a 38 29 29 0a 0a 2f 2a  Bitmask)*8))../*
9500: 0a 2a 2a 20 41 20 62 69 74 20 69 6e 20 61 20 42  .** A bit in a B
9510: 69 74 6d 61 73 6b 0a 2a 2f 0a 23 64 65 66 69 6e  itmask.*/.#defin
9520: 65 20 4d 41 53 4b 42 49 54 28 6e 29 20 20 20 28  e MASKBIT(n)   (
9530: 28 28 42 69 74 6d 61 73 6b 29 31 29 3c 3c 28 6e  ((Bitmask)1)<<(n
9540: 29 29 0a 23 64 65 66 69 6e 65 20 4d 41 53 4b 42  )).#define MASKB
9550: 49 54 33 32 28 6e 29 20 28 28 28 75 6e 73 69 67  IT32(n) (((unsig
9560: 6e 65 64 20 69 6e 74 29 31 29 3c 3c 28 6e 29 29  ned int)1)<<(n))
9570: 0a 23 64 65 66 69 6e 65 20 41 4c 4c 42 49 54 53  .#define ALLBITS
9580: 20 20 20 20 20 20 28 28 42 69 74 6d 61 73 6b 29        ((Bitmask)
9590: 2d 31 29 0a 0a 2f 2a 20 41 20 56 4c 69 73 74 20  -1)../* A VList 
95a0: 6f 62 6a 65 63 74 20 72 65 63 6f 72 64 73 20 61  object records a
95b0: 20 6d 61 70 70 69 6e 67 20 62 65 74 77 65 65 6e   mapping between
95c0: 20 70 61 72 61 6d 65 74 65 72 73 2f 76 61 72 69   parameters/vari
95d0: 61 62 6c 65 73 2f 77 69 6c 64 63 61 72 64 73 0a  ables/wildcards.
95e0: 2a 2a 20 69 6e 20 74 68 65 20 53 51 4c 20 73 74  ** in the SQL st
95f0: 61 74 65 6d 65 6e 74 20 28 73 75 63 68 20 61 73  atement (such as
9600: 20 24 61 62 63 2c 20 40 70 71 72 2c 20 6f 72 20   $abc, @pqr, or 
9610: 3a 78 79 7a 29 20 61 6e 64 20 74 68 65 20 69 6e  :xyz) and the in
9620: 74 65 67 65 72 0a 2a 2a 20 76 61 72 69 61 62 6c  teger.** variabl
9630: 65 20 6e 75 6d 62 65 72 20 61 73 73 6f 63 69 61  e number associa
9640: 74 65 64 20 77 69 74 68 20 74 68 61 74 20 70 61  ted with that pa
9650: 72 61 6d 65 74 65 72 2e 20 20 53 65 65 20 74 68  rameter.  See th
9660: 65 20 66 6f 72 6d 61 74 20 64 65 73 63 72 69 70  e format descrip
9670: 74 69 6f 6e 0a 2a 2a 20 6f 6e 20 74 68 65 20 73  tion.** on the s
9680: 71 6c 69 74 65 33 56 4c 69 73 74 41 64 64 28 29  qlite3VListAdd()
9690: 20 72 6f 75 74 69 6e 65 20 66 6f 72 20 6d 6f 72   routine for mor
96a0: 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 20 20  e information.  
96b0: 41 20 56 4c 69 73 74 20 69 73 20 72 65 61 6c 6c  A VList is reall
96c0: 79 0a 2a 2a 20 6a 75 73 74 20 61 6e 20 61 72 72  y.** just an arr
96d0: 61 79 20 6f 66 20 69 6e 74 65 67 65 72 73 2e 0a  ay of integers..
96e0: 2a 2f 0a 74 79 70 65 64 65 66 20 69 6e 74 20 56  */.typedef int V
96f0: 4c 69 73 74 3b 0a 0a 2f 2a 0a 2a 2a 20 44 65 66  List;../*.** Def
9700: 65 72 20 73 6f 75 72 63 69 6e 67 20 76 64 62 65  er sourcing vdbe
9710: 2e 68 20 61 6e 64 20 62 74 72 65 65 2e 68 20 75  .h and btree.h u
9720: 6e 74 69 6c 20 61 66 74 65 72 20 74 68 65 20 22  ntil after the "
9730: 75 38 22 20 61 6e 64 0a 2a 2a 20 22 42 75 73 79  u8" and.** "Busy
9740: 48 61 6e 64 6c 65 72 22 20 74 79 70 65 64 65 66  Handler" typedef
9750: 73 2e 20 76 64 62 65 2e 68 20 61 6c 73 6f 20 72  s. vdbe.h also r
9760: 65 71 75 69 72 65 73 20 61 20 66 65 77 20 6f 66  equires a few of
9770: 20 74 68 65 20 6f 70 61 71 75 65 0a 2a 2a 20 70   the opaque.** p
9780: 6f 69 6e 74 65 72 20 74 79 70 65 73 20 28 69 2e  ointer types (i.
9790: 65 2e 20 46 75 6e 63 44 65 66 29 20 64 65 66 69  e. FuncDef) defi
97a0: 6e 65 64 20 61 62 6f 76 65 2e 0a 2a 2f 0a 23 69  ned above..*/.#i
97b0: 6e 63 6c 75 64 65 20 22 62 74 72 65 65 2e 68 22  nclude "btree.h"
97c0: 0a 23 69 6e 63 6c 75 64 65 20 22 76 64 62 65 2e  .#include "vdbe.
97d0: 68 22 0a 23 69 6e 63 6c 75 64 65 20 22 70 61 67  h".#include "pag
97e0: 65 72 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20 22  er.h".#include "
97f0: 70 63 61 63 68 65 2e 68 22 0a 23 69 6e 63 6c 75  pcache.h".#inclu
9800: 64 65 20 22 6f 73 2e 68 22 0a 23 69 6e 63 6c 75  de "os.h".#inclu
9810: 64 65 20 22 6d 75 74 65 78 2e 68 22 0a 0a 2f 2a  de "mutex.h"../*
9820: 20 54 68 65 20 53 51 4c 49 54 45 5f 45 58 54 52   The SQLITE_EXTR
9830: 41 5f 44 55 52 41 42 4c 45 20 63 6f 6d 70 69 6c  A_DURABLE compil
9840: 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 20 75 73  e-time option us
9850: 65 64 20 74 6f 20 73 65 74 20 74 68 65 20 64 65  ed to set the de
9860: 66 61 75 6c 74 0a 2a 2a 20 73 79 6e 63 68 72 6f  fault.** synchro
9870: 6e 6f 75 73 20 73 65 74 74 69 6e 67 20 74 6f 20  nous setting to 
9880: 45 58 54 52 41 2e 20 20 49 74 20 69 73 20 6e 6f  EXTRA.  It is no
9890: 20 6c 6f 6e 67 65 72 20 73 75 70 70 6f 72 74 65   longer supporte
98a0: 64 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c  d..*/.#ifdef SQL
98b0: 49 54 45 5f 45 58 54 52 41 5f 44 55 52 41 42 4c  ITE_EXTRA_DURABL
98c0: 45 0a 23 20 77 61 72 6e 69 6e 67 20 55 73 65 20  E.# warning Use 
98d0: 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 53  SQLITE_DEFAULT_S
98e0: 59 4e 43 48 52 4f 4e 4f 55 53 3d 33 20 69 6e 73  YNCHRONOUS=3 ins
98f0: 74 65 61 64 20 6f 66 20 53 51 4c 49 54 45 5f 45  tead of SQLITE_E
9900: 58 54 52 41 5f 44 55 52 41 42 4c 45 0a 23 20 64  XTRA_DURABLE.# d
9910: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 45 46  efine SQLITE_DEF
9920: 41 55 4c 54 5f 53 59 4e 43 48 52 4f 4e 4f 55 53  AULT_SYNCHRONOUS
9930: 20 33 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a   3.#endif../*.**
9940: 20 44 65 66 61 75 6c 74 20 73 79 6e 63 68 72 6f   Default synchro
9950: 6e 6f 75 73 20 6c 65 76 65 6c 73 2e 0a 2a 2a 0a  nous levels..**.
9960: 2a 2a 20 4e 6f 74 65 20 74 68 61 74 20 28 66 6f  ** Note that (fo
9970: 72 20 68 69 73 74 6f 72 63 61 6c 20 72 65 61 73  r historcal reas
9980: 6f 6e 73 29 20 74 68 65 20 50 41 47 45 52 5f 53  ons) the PAGER_S
9990: 59 4e 43 48 52 4f 4e 4f 55 53 5f 2a 20 6d 61 63  YNCHRONOUS_* mac
99a0: 72 6f 73 20 64 69 66 66 65 72 0a 2a 2a 20 66 72  ros differ.** fr
99b0: 6f 6d 20 74 68 65 20 53 51 4c 49 54 45 5f 44 45  om the SQLITE_DE
99c0: 46 41 55 4c 54 5f 53 59 4e 43 48 52 4f 4e 4f 55  FAULT_SYNCHRONOU
99d0: 53 20 76 61 6c 75 65 20 62 79 20 31 2e 0a 2a 2a  S value by 1..**
99e0: 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 50 41  .**           PA
99f0: 47 45 52 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 20  GER_SYNCHRONOUS 
9a00: 20 20 20 20 20 20 44 45 46 41 55 4c 54 5f 53 59        DEFAULT_SY
9a10: 4e 43 48 52 4f 4e 4f 55 53 0a 2a 2a 20 20 20 4f  NCHRONOUS.**   O
9a20: 46 46 20 20 20 20 20 20 20 20 20 20 20 31 20 20  FF           1  
9a30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9a40: 20 20 20 20 20 20 20 30 0a 2a 2a 20 20 20 4e 4f         0.**   NO
9a50: 52 4d 41 4c 20 20 20 20 20 20 20 20 32 20 20 20  RMAL        2   
9a60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9a70: 20 20 20 20 20 20 31 0a 2a 2a 20 20 20 46 55 4c        1.**   FUL
9a80: 4c 20 20 20 20 20 20 20 20 20 20 33 20 20 20 20  L          3    
9a90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9aa0: 20 20 20 20 20 32 0a 2a 2a 20 20 20 45 58 54 52       2.**   EXTR
9ab0: 41 20 20 20 20 20 20 20 20 20 34 20 20 20 20 20  A         4     
9ac0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9ad0: 20 20 20 20 33 0a 2a 2a 0a 2a 2a 20 54 68 65 20      3.**.** The 
9ae0: 22 50 52 41 47 4d 41 20 73 79 6e 63 68 72 6f 6e  "PRAGMA synchron
9af0: 6f 75 73 22 20 73 74 61 74 65 6d 65 6e 74 20 61  ous" statement a
9b00: 6c 73 6f 20 75 73 65 73 20 74 68 65 20 7a 65 72  lso uses the zer
9b10: 6f 2d 62 61 73 65 64 20 6e 75 6d 62 65 72 73 2e  o-based numbers.
9b20: 0a 2a 2a 20 49 6e 20 6f 74 68 65 72 20 77 6f 72  .** In other wor
9b30: 64 73 2c 20 74 68 65 20 7a 65 72 6f 2d 62 61 73  ds, the zero-bas
9b40: 65 64 20 6e 75 6d 62 65 72 73 20 61 72 65 20 75  ed numbers are u
9b50: 73 65 64 20 66 6f 72 20 61 6c 6c 20 65 78 74 65  sed for all exte
9b60: 72 6e 61 6c 20 69 6e 74 65 72 66 61 63 65 73 0a  rnal interfaces.
9b70: 2a 2a 20 61 6e 64 20 74 68 65 20 6f 6e 65 2d 62  ** and the one-b
9b80: 61 73 65 64 20 76 61 6c 75 65 73 20 61 72 65 20  ased values are 
9b90: 75 73 65 64 20 69 6e 74 65 72 6e 61 6c 6c 79 2e  used internally.
9ba0: 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  .*/.#ifndef SQLI
9bb0: 54 45 5f 44 45 46 41 55 4c 54 5f 53 59 4e 43 48  TE_DEFAULT_SYNCH
9bc0: 52 4f 4e 4f 55 53 0a 23 20 64 65 66 69 6e 65 20  RONOUS.# define 
9bd0: 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 53  SQLITE_DEFAULT_S
9be0: 59 4e 43 48 52 4f 4e 4f 55 53 20 32 0a 23 65 6e  YNCHRONOUS 2.#en
9bf0: 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  dif.#ifndef SQLI
9c00: 54 45 5f 44 45 46 41 55 4c 54 5f 57 41 4c 5f 53  TE_DEFAULT_WAL_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 57 41 4c 5f 53 59 4e 43 48 52 4f 4e 4f  LT_WAL_SYNCHRONO
9c40: 55 53 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c  US SQLITE_DEFAUL
9c50: 54 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 0a 23 65  T_SYNCHRONOUS.#e
9c60: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68  ndif../*.** Each
9c70: 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 74   database file t
9c80: 6f 20 62 65 20 61 63 63 65 73 73 65 64 20 62 79  o be accessed by
9c90: 20 74 68 65 20 73 79 73 74 65 6d 20 69 73 20 61   the system is a
9ca0: 6e 20 69 6e 73 74 61 6e 63 65 0a 2a 2a 20 6f 66  n instance.** of
9cb0: 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   the following s
9cc0: 74 72 75 63 74 75 72 65 2e 20 20 54 68 65 72 65  tructure.  There
9cd0: 20 61 72 65 20 6e 6f 72 6d 61 6c 6c 79 20 74 77   are normally tw
9ce0: 6f 20 6f 66 20 74 68 65 73 65 20 73 74 72 75 63  o of these struc
9cf0: 74 75 72 65 73 0a 2a 2a 20 69 6e 20 74 68 65 20  tures.** in the 
9d00: 73 71 6c 69 74 65 2e 61 44 62 5b 5d 20 61 72 72  sqlite.aDb[] arr
9d10: 61 79 2e 20 20 61 44 62 5b 30 5d 20 69 73 20 74  ay.  aDb[0] is t
9d20: 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65  he main database
9d30: 20 66 69 6c 65 20 61 6e 64 0a 2a 2a 20 61 44 62   file and.** aDb
9d40: 5b 31 5d 20 69 73 20 74 68 65 20 64 61 74 61 62  [1] is the datab
9d50: 61 73 65 20 66 69 6c 65 20 75 73 65 64 20 74 6f  ase file used to
9d60: 20 68 6f 6c 64 20 74 65 6d 70 6f 72 61 72 79 20   hold temporary 
9d70: 74 61 62 6c 65 73 2e 20 20 41 64 64 69 74 69 6f  tables.  Additio
9d80: 6e 61 6c 0a 2a 2a 20 64 61 74 61 62 61 73 65 73  nal.** databases
9d90: 20 6d 61 79 20 62 65 20 61 74 74 61 63 68 65 64   may be attached
9da0: 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 44 62 20 7b  ..*/.struct Db {
9db0: 0a 20 20 63 68 61 72 20 2a 7a 44 62 53 4e 61 6d  .  char *zDbSNam
9dc0: 65 3b 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20  e;      /* Name 
9dd0: 6f 66 20 74 68 69 73 20 64 61 74 61 62 61 73 65  of this database
9de0: 2e 20 28 73 63 68 65 6d 61 20 6e 61 6d 65 2c 20  . (schema name, 
9df0: 6e 6f 74 20 66 69 6c 65 6e 61 6d 65 29 20 2a 2f  not filename) */
9e00: 0a 20 20 42 74 72 65 65 20 2a 70 42 74 3b 20 20  .  Btree *pBt;  
9e10: 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 42          /* The B
9e20: 2a 54 72 65 65 20 73 74 72 75 63 74 75 72 65 20  *Tree structure 
9e30: 66 6f 72 20 74 68 69 73 20 64 61 74 61 62 61 73  for this databas
9e40: 65 20 66 69 6c 65 20 2a 2f 0a 20 20 75 38 20 73  e file */.  u8 s
9e50: 61 66 65 74 79 5f 6c 65 76 65 6c 3b 20 20 20 20  afety_level;    
9e60: 20 2f 2a 20 48 6f 77 20 61 67 67 72 65 73 73 69   /* How aggressi
9e70: 76 65 20 61 74 20 73 79 6e 63 69 6e 67 20 64 61  ve at syncing da
9e80: 74 61 20 74 6f 20 64 69 73 6b 20 2a 2f 0a 20 20  ta to disk */.  
9e90: 75 38 20 62 53 79 6e 63 53 65 74 3b 20 20 20 20  u8 bSyncSet;    
9ea0: 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20       /* True if 
9eb0: 22 50 52 41 47 4d 41 20 73 79 6e 63 68 72 6f 6e  "PRAGMA synchron
9ec0: 6f 75 73 3d 4e 22 20 68 61 73 20 62 65 65 6e 20  ous=N" has been 
9ed0: 72 75 6e 20 2a 2f 0a 20 20 53 63 68 65 6d 61 20  run */.  Schema 
9ee0: 2a 70 53 63 68 65 6d 61 3b 20 20 20 20 20 2f 2a  *pSchema;     /*
9ef0: 20 50 6f 69 6e 74 65 72 20 74 6f 20 64 61 74 61   Pointer to data
9f00: 62 61 73 65 20 73 63 68 65 6d 61 20 28 70 6f 73  base schema (pos
9f10: 73 69 62 6c 79 20 73 68 61 72 65 64 29 20 2a 2f  sibly shared) */
9f20: 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e  .};../*.** An in
9f30: 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f  stance of the fo
9f40: 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72  llowing structur
9f50: 65 20 73 74 6f 72 65 73 20 61 20 64 61 74 61 62  e stores a datab
9f60: 61 73 65 20 73 63 68 65 6d 61 2e 0a 2a 2a 0a 2a  ase schema..**.*
9f70: 2a 20 4d 6f 73 74 20 53 63 68 65 6d 61 20 6f 62  * Most Schema ob
9f80: 6a 65 63 74 73 20 61 72 65 20 61 73 73 6f 63 69  jects are associ
9f90: 61 74 65 64 20 77 69 74 68 20 61 20 42 74 72 65  ated with a Btre
9fa0: 65 2e 20 20 54 68 65 20 65 78 63 65 70 74 69 6f  e.  The exceptio
9fb0: 6e 20 69 73 0a 2a 2a 20 74 68 65 20 53 63 68 65  n is.** the Sche
9fc0: 6d 61 20 66 6f 72 20 74 68 65 20 54 45 4d 50 20  ma for the TEMP 
9fd0: 64 61 74 61 62 61 65 73 20 28 73 71 6c 69 74 65  databaes (sqlite
9fe0: 33 2e 61 44 62 5b 31 5d 29 20 77 68 69 63 68 20  3.aDb[1]) which 
9ff0: 69 73 20 66 72 65 65 2d 73 74 61 6e 64 69 6e 67  is free-standing
a000: 2e 0a 2a 2a 20 49 6e 20 73 68 61 72 65 64 20 63  ..** In shared c
a010: 61 63 68 65 20 6d 6f 64 65 2c 20 61 20 73 69 6e  ache mode, a sin
a020: 67 6c 65 20 53 63 68 65 6d 61 20 6f 62 6a 65 63  gle Schema objec
a030: 74 20 63 61 6e 20 62 65 20 73 68 61 72 65 64 20  t can be shared 
a040: 62 79 20 6d 75 6c 74 69 70 6c 65 0a 2a 2a 20 42  by multiple.** B
a050: 74 72 65 65 73 20 74 68 61 74 20 72 65 66 65 72  trees that refer
a060: 20 74 6f 20 74 68 65 20 73 61 6d 65 20 75 6e 64   to the same und
a070: 65 72 6c 79 69 6e 67 20 42 74 53 68 61 72 65 64  erlying BtShared
a080: 20 6f 62 6a 65 63 74 2e 0a 2a 2a 0a 2a 2a 20 53   object..**.** S
a090: 63 68 65 6d 61 20 6f 62 6a 65 63 74 73 20 61 72  chema objects ar
a0a0: 65 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20  e automatically 
a0b0: 64 65 61 6c 6c 6f 63 61 74 65 64 20 77 68 65 6e  deallocated when
a0c0: 20 74 68 65 20 6c 61 73 74 20 42 74 72 65 65 20   the last Btree 
a0d0: 74 68 61 74 0a 2a 2a 20 72 65 66 65 72 65 6e 63  that.** referenc
a0e0: 65 73 20 74 68 65 6d 20 69 73 20 64 65 73 74 72  es them is destr
a0f0: 6f 79 65 64 2e 20 20 20 54 68 65 20 54 45 4d 50  oyed.   The TEMP
a100: 20 53 63 68 65 6d 61 20 69 73 20 6d 61 6e 75 61   Schema is manua
a110: 6c 6c 79 20 66 72 65 65 64 20 62 79 0a 2a 2a 20  lly freed by.** 
a120: 73 71 6c 69 74 65 33 5f 63 6c 6f 73 65 28 29 2e  sqlite3_close().
a130: 0a 2a 0a 2a 2a 20 41 20 74 68 72 65 61 64 20 6d  .*.** A thread m
a140: 75 73 74 20 62 65 20 68 6f 6c 64 69 6e 67 20 61  ust be holding a
a150: 20 6d 75 74 65 78 20 6f 6e 20 74 68 65 20 63 6f   mutex on the co
a160: 72 72 65 73 70 6f 6e 64 69 6e 67 20 42 74 72 65  rresponding Btre
a170: 65 20 69 6e 20 6f 72 64 65 72 0a 2a 2a 20 74 6f  e in order.** to
a180: 20 61 63 63 65 73 73 20 53 63 68 65 6d 61 20 63   access Schema c
a190: 6f 6e 74 65 6e 74 2e 20 20 54 68 69 73 20 69 6d  ontent.  This im
a1a0: 70 6c 69 65 73 20 74 68 61 74 20 74 68 65 20 74  plies that the t
a1b0: 68 72 65 61 64 20 6d 75 73 74 20 61 6c 73 6f 20  hread must also 
a1c0: 62 65 0a 2a 2a 20 68 6f 6c 64 69 6e 67 20 61 20  be.** holding a 
a1d0: 6d 75 74 65 78 20 6f 6e 20 74 68 65 20 73 71 6c  mutex on the sql
a1e0: 69 74 65 33 20 63 6f 6e 6e 65 63 74 69 6f 6e 20  ite3 connection 
a1f0: 70 6f 69 6e 74 65 72 20 74 68 61 74 20 6f 77 6e  pointer that own
a200: 73 20 74 68 65 20 42 74 72 65 65 2e 0a 2a 2a 20  s the Btree..** 
a210: 46 6f 72 20 61 20 54 45 4d 50 20 53 63 68 65 6d  For a TEMP Schem
a220: 61 2c 20 6f 6e 6c 79 20 74 68 65 20 63 6f 6e 6e  a, only the conn
a230: 65 63 74 69 6f 6e 20 6d 75 74 65 78 20 69 73 20  ection mutex is 
a240: 72 65 71 75 69 72 65 64 2e 0a 2a 2f 0a 73 74 72  required..*/.str
a250: 75 63 74 20 53 63 68 65 6d 61 20 7b 0a 20 20 69  uct Schema {.  i
a260: 6e 74 20 73 63 68 65 6d 61 5f 63 6f 6f 6b 69 65  nt schema_cookie
a270: 3b 20 20 20 2f 2a 20 44 61 74 61 62 61 73 65 20  ;   /* Database 
a280: 73 63 68 65 6d 61 20 76 65 72 73 69 6f 6e 20 6e  schema version n
a290: 75 6d 62 65 72 20 66 6f 72 20 74 68 69 73 20 66  umber for this f
a2a0: 69 6c 65 20 2a 2f 0a 20 20 69 6e 74 20 69 47 65  ile */.  int iGe
a2b0: 6e 65 72 61 74 69 6f 6e 3b 20 20 20 20 20 2f 2a  neration;     /*
a2c0: 20 47 65 6e 65 72 61 74 69 6f 6e 20 63 6f 75 6e   Generation coun
a2d0: 74 65 72 2e 20 20 49 6e 63 72 65 6d 65 6e 74 65  ter.  Incremente
a2e0: 64 20 77 69 74 68 20 65 61 63 68 20 63 68 61 6e  d with each chan
a2f0: 67 65 20 2a 2f 0a 20 20 48 61 73 68 20 74 62 6c  ge */.  Hash tbl
a300: 48 61 73 68 3b 20 20 20 20 20 20 20 20 2f 2a 20  Hash;        /* 
a310: 41 6c 6c 20 74 61 62 6c 65 73 20 69 6e 64 65 78  All tables index
a320: 65 64 20 62 79 20 6e 61 6d 65 20 2a 2f 0a 20 20  ed by name */.  
a330: 48 61 73 68 20 69 64 78 48 61 73 68 3b 20 20 20  Hash idxHash;   
a340: 20 20 20 20 20 2f 2a 20 41 6c 6c 20 28 6e 61 6d       /* All (nam
a350: 65 64 29 20 69 6e 64 69 63 65 73 20 69 6e 64 65  ed) indices inde
a360: 78 65 64 20 62 79 20 6e 61 6d 65 20 2a 2f 0a 20  xed by name */. 
a370: 20 48 61 73 68 20 74 72 69 67 48 61 73 68 3b 20   Hash trigHash; 
a380: 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20 74 72 69        /* All tri
a390: 67 67 65 72 73 20 69 6e 64 65 78 65 64 20 62 79  ggers indexed by
a3a0: 20 6e 61 6d 65 20 2a 2f 0a 20 20 48 61 73 68 20   name */.  Hash 
a3b0: 66 6b 65 79 48 61 73 68 3b 20 20 20 20 20 20 20  fkeyHash;       
a3c0: 2f 2a 20 41 6c 6c 20 66 6f 72 65 69 67 6e 20 6b  /* All foreign k
a3d0: 65 79 73 20 62 79 20 72 65 66 65 72 65 6e 63 65  eys by reference
a3e0: 64 20 74 61 62 6c 65 20 6e 61 6d 65 20 2a 2f 0a  d table name */.
a3f0: 20 20 54 61 62 6c 65 20 2a 70 53 65 71 54 61 62    Table *pSeqTab
a400: 3b 20 20 20 20 20 20 2f 2a 20 54 68 65 20 73 71  ;      /* The sq
a410: 6c 69 74 65 5f 73 65 71 75 65 6e 63 65 20 74 61  lite_sequence ta
a420: 62 6c 65 20 75 73 65 64 20 62 79 20 41 55 54 4f  ble used by AUTO
a430: 49 4e 43 52 45 4d 45 4e 54 20 2a 2f 0a 20 20 75  INCREMENT */.  u
a440: 38 20 66 69 6c 65 5f 66 6f 72 6d 61 74 3b 20 20  8 file_format;  
a450: 20 20 20 20 2f 2a 20 53 63 68 65 6d 61 20 66 6f      /* Schema fo
a460: 72 6d 61 74 20 76 65 72 73 69 6f 6e 20 66 6f 72  rmat version for
a470: 20 74 68 69 73 20 66 69 6c 65 20 2a 2f 0a 20 20   this file */.  
a480: 75 38 20 65 6e 63 3b 20 20 20 20 20 20 20 20 20  u8 enc;         
a490: 20 20 20 20 20 2f 2a 20 54 65 78 74 20 65 6e 63       /* Text enc
a4a0: 6f 64 69 6e 67 20 75 73 65 64 20 62 79 20 74 68  oding used by th
a4b0: 69 73 20 64 61 74 61 62 61 73 65 20 2a 2f 0a 20  is database */. 
a4c0: 20 75 31 36 20 73 63 68 65 6d 61 46 6c 61 67 73   u16 schemaFlags
a4d0: 3b 20 20 20 20 20 2f 2a 20 46 6c 61 67 73 20 61  ;     /* Flags a
a4e0: 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74  ssociated with t
a4f0: 68 69 73 20 73 63 68 65 6d 61 20 2a 2f 0a 20 20  his schema */.  
a500: 69 6e 74 20 63 61 63 68 65 5f 73 69 7a 65 3b 20  int cache_size; 
a510: 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
a520: 66 20 70 61 67 65 73 20 74 6f 20 75 73 65 20 69  f pages to use i
a530: 6e 20 74 68 65 20 63 61 63 68 65 20 2a 2f 0a 7d  n the cache */.}
a540: 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 73 65 20 6d  ;../*.** These m
a550: 61 63 72 6f 73 20 63 61 6e 20 62 65 20 75 73 65  acros can be use
a560: 64 20 74 6f 20 74 65 73 74 2c 20 73 65 74 2c 20  d to test, set, 
a570: 6f 72 20 63 6c 65 61 72 20 62 69 74 73 20 69 6e  or clear bits in
a580: 20 74 68 65 0a 2a 2a 20 44 62 2e 70 53 63 68 65   the.** Db.pSche
a590: 6d 61 2d 3e 66 6c 61 67 73 20 66 69 65 6c 64 2e  ma->flags field.
a5a0: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 44 62 48 61  .*/.#define DbHa
a5b0: 73 50 72 6f 70 65 72 74 79 28 44 2c 49 2c 50 29  sProperty(D,I,P)
a5c0: 20 20 20 20 20 28 28 28 44 29 2d 3e 61 44 62 5b       (((D)->aDb[
a5d0: 49 5d 2e 70 53 63 68 65 6d 61 2d 3e 73 63 68 65  I].pSchema->sche
a5e0: 6d 61 46 6c 61 67 73 26 28 50 29 29 3d 3d 28 50  maFlags&(P))==(P
a5f0: 29 29 0a 23 64 65 66 69 6e 65 20 44 62 48 61 73  )).#define DbHas
a600: 41 6e 79 50 72 6f 70 65 72 74 79 28 44 2c 49 2c  AnyProperty(D,I,
a610: 50 29 20 20 28 28 28 44 29 2d 3e 61 44 62 5b 49  P)  (((D)->aDb[I
a620: 5d 2e 70 53 63 68 65 6d 61 2d 3e 73 63 68 65 6d  ].pSchema->schem
a630: 61 46 6c 61 67 73 26 28 50 29 29 21 3d 30 29 0a  aFlags&(P))!=0).
a640: 23 64 65 66 69 6e 65 20 44 62 53 65 74 50 72 6f  #define DbSetPro
a650: 70 65 72 74 79 28 44 2c 49 2c 50 29 20 20 20 20  perty(D,I,P)    
a660: 20 28 44 29 2d 3e 61 44 62 5b 49 5d 2e 70 53 63   (D)->aDb[I].pSc
a670: 68 65 6d 61 2d 3e 73 63 68 65 6d 61 46 6c 61 67  hema->schemaFlag
a680: 73 7c 3d 28 50 29 0a 23 64 65 66 69 6e 65 20 44  s|=(P).#define D
a690: 62 43 6c 65 61 72 50 72 6f 70 65 72 74 79 28 44  bClearProperty(D
a6a0: 2c 49 2c 50 29 20 20 20 28 44 29 2d 3e 61 44 62  ,I,P)   (D)->aDb
a6b0: 5b 49 5d 2e 70 53 63 68 65 6d 61 2d 3e 73 63 68  [I].pSchema->sch
a6c0: 65 6d 61 46 6c 61 67 73 26 3d 7e 28 50 29 0a 0a  emaFlags&=~(P)..
a6d0: 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 76 61  /*.** Allowed va
a6e0: 6c 75 65 73 20 66 6f 72 20 74 68 65 20 44 42 2e  lues for the DB.
a6f0: 70 53 63 68 65 6d 61 2d 3e 66 6c 61 67 73 20 66  pSchema->flags f
a700: 69 65 6c 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  ield..**.** The 
a710: 44 42 5f 53 63 68 65 6d 61 4c 6f 61 64 65 64 20  DB_SchemaLoaded 
a720: 66 6c 61 67 20 69 73 20 73 65 74 20 61 66 74 65  flag is set afte
a730: 72 20 74 68 65 20 64 61 74 61 62 61 73 65 20 73  r the database s
a740: 63 68 65 6d 61 20 68 61 73 20 62 65 65 6e 0a 2a  chema has been.*
a750: 2a 20 72 65 61 64 20 69 6e 74 6f 20 69 6e 74 65  * read into inte
a760: 72 6e 61 6c 20 68 61 73 68 20 74 61 62 6c 65 73  rnal hash tables
a770: 2e 0a 2a 2a 0a 2a 2a 20 44 42 5f 55 6e 72 65 73  ..**.** DB_Unres
a780: 65 74 56 69 65 77 73 20 6d 65 61 6e 73 20 74 68  etViews means th
a790: 61 74 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 76  at one or more v
a7a0: 69 65 77 73 20 68 61 76 65 20 63 6f 6c 75 6d 6e  iews have column
a7b0: 20 6e 61 6d 65 73 20 74 68 61 74 0a 2a 2a 20 68   names that.** h
a7c0: 61 76 65 20 62 65 65 6e 20 66 69 6c 6c 65 64 20  ave been filled 
a7d0: 6f 75 74 2e 20 20 49 66 20 74 68 65 20 73 63 68  out.  If the sch
a7e0: 65 6d 61 20 63 68 61 6e 67 65 73 2c 20 74 68 65  ema changes, the
a7f0: 73 65 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20  se column names 
a800: 6d 69 67 68 74 0a 2a 2a 20 63 68 61 6e 67 65 73  might.** changes
a810: 20 61 6e 64 20 73 6f 20 74 68 65 20 76 69 65 77   and so the view
a820: 20 77 69 6c 6c 20 6e 65 65 64 20 74 6f 20 62 65   will need to be
a830: 20 72 65 73 65 74 2e 0a 2a 2f 0a 23 64 65 66 69   reset..*/.#defi
a840: 6e 65 20 44 42 5f 53 63 68 65 6d 61 4c 6f 61 64  ne DB_SchemaLoad
a850: 65 64 20 20 20 20 30 78 30 30 30 31 20 20 2f 2a  ed    0x0001  /*
a860: 20 54 68 65 20 73 63 68 65 6d 61 20 68 61 73 20   The schema has 
a870: 62 65 65 6e 20 6c 6f 61 64 65 64 20 2a 2f 0a 23  been loaded */.#
a880: 64 65 66 69 6e 65 20 44 42 5f 55 6e 72 65 73 65  define DB_Unrese
a890: 74 56 69 65 77 73 20 20 20 20 30 78 30 30 30 32  tViews    0x0002
a8a0: 20 20 2f 2a 20 53 6f 6d 65 20 76 69 65 77 73 20    /* Some views 
a8b0: 68 61 76 65 20 64 65 66 69 6e 65 64 20 63 6f 6c  have defined col
a8c0: 75 6d 6e 20 6e 61 6d 65 73 20 2a 2f 0a 23 64 65  umn names */.#de
a8d0: 66 69 6e 65 20 44 42 5f 45 6d 70 74 79 20 20 20  fine DB_Empty   
a8e0: 20 20 20 20 20 20 20 20 30 78 30 30 30 34 20 20          0x0004  
a8f0: 2f 2a 20 54 68 65 20 66 69 6c 65 20 69 73 20 65  /* The file is e
a900: 6d 70 74 79 20 28 6c 65 6e 67 74 68 20 30 20 62  mpty (length 0 b
a910: 79 74 65 73 29 20 2a 2f 0a 23 64 65 66 69 6e 65  ytes) */.#define
a920: 20 44 42 5f 52 65 73 65 74 57 61 6e 74 65 64 20   DB_ResetWanted 
a930: 20 20 20 20 30 78 30 30 30 38 20 20 2f 2a 20 52      0x0008  /* R
a940: 65 73 65 74 20 74 68 65 20 73 63 68 65 6d 61 20  eset the schema 
a950: 77 68 65 6e 20 6e 53 63 68 65 6d 61 4c 6f 63 6b  when nSchemaLock
a960: 3d 3d 30 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68  ==0 */../*.** Th
a970: 65 20 6e 75 6d 62 65 72 20 6f 66 20 64 69 66 66  e number of diff
a980: 65 72 65 6e 74 20 6b 69 6e 64 73 20 6f 66 20 74  erent kinds of t
a990: 68 69 6e 67 73 20 74 68 61 74 20 63 61 6e 20 62  hings that can b
a9a0: 65 20 6c 69 6d 69 74 65 64 0a 2a 2a 20 75 73 69  e limited.** usi
a9b0: 6e 67 20 74 68 65 20 73 71 6c 69 74 65 33 5f 6c  ng the sqlite3_l
a9c0: 69 6d 69 74 28 29 20 69 6e 74 65 72 66 61 63 65  imit() interface
a9d0: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  ..*/.#define SQL
a9e0: 49 54 45 5f 4e 5f 4c 49 4d 49 54 20 28 53 51 4c  ITE_N_LIMIT (SQL
a9f0: 49 54 45 5f 4c 49 4d 49 54 5f 57 4f 52 4b 45 52  ITE_LIMIT_WORKER
aa00: 5f 54 48 52 45 41 44 53 2b 31 29 0a 0a 2f 2a 0a  _THREADS+1)../*.
aa10: 2a 2a 20 4c 6f 6f 6b 61 73 69 64 65 20 6d 61 6c  ** Lookaside mal
aa20: 6c 6f 63 20 69 73 20 61 20 73 65 74 20 6f 66 20  loc is a set of 
aa30: 66 69 78 65 64 2d 73 69 7a 65 20 62 75 66 66 65  fixed-size buffe
aa40: 72 73 20 74 68 61 74 20 63 61 6e 20 62 65 20 75  rs that can be u
aa50: 73 65 64 0a 2a 2a 20 74 6f 20 73 61 74 69 73 66  sed.** to satisf
aa60: 79 20 73 6d 61 6c 6c 20 74 72 61 6e 73 69 65 6e  y small transien
aa70: 74 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74  t memory allocat
aa80: 69 6f 6e 20 72 65 71 75 65 73 74 73 20 66 6f 72  ion requests for
aa90: 20 6f 62 6a 65 63 74 73 0a 2a 2a 20 61 73 73 6f   objects.** asso
aaa0: 63 69 61 74 65 64 20 77 69 74 68 20 61 20 70 61  ciated with a pa
aab0: 72 74 69 63 75 6c 61 72 20 64 61 74 61 62 61 73  rticular databas
aac0: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 20 20 54  e connection.  T
aad0: 68 65 20 75 73 65 20 6f 66 0a 2a 2a 20 6c 6f 6f  he use of.** loo
aae0: 6b 61 73 69 64 65 20 6d 61 6c 6c 6f 63 20 70 72  kaside malloc pr
aaf0: 6f 76 69 64 65 73 20 61 20 73 69 67 6e 69 66 69  ovides a signifi
ab00: 63 61 6e 74 20 70 65 72 66 6f 72 6d 61 6e 63 65  cant performance
ab10: 20 65 6e 68 61 6e 63 65 6d 65 6e 74 0a 2a 2a 20   enhancement.** 
ab20: 28 61 70 70 72 6f 78 20 31 30 25 29 20 62 79 20  (approx 10%) by 
ab30: 61 76 6f 69 64 69 6e 67 20 6e 75 6d 65 72 6f 75  avoiding numerou
ab40: 73 20 6d 61 6c 6c 6f 63 2f 66 72 65 65 20 72 65  s malloc/free re
ab50: 71 75 65 73 74 73 20 77 68 69 6c 65 20 70 61 72  quests while par
ab60: 73 69 6e 67 0a 2a 2a 20 53 51 4c 20 73 74 61 74  sing.** SQL stat
ab70: 65 6d 65 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20 54 68  ements..**.** Th
ab80: 65 20 4c 6f 6f 6b 61 73 69 64 65 20 73 74 72 75  e Lookaside stru
ab90: 63 74 75 72 65 20 68 6f 6c 64 73 20 63 6f 6e 66  cture holds conf
aba0: 69 67 75 72 61 74 69 6f 6e 20 69 6e 66 6f 72 6d  iguration inform
abb0: 61 74 69 6f 6e 20 61 62 6f 75 74 20 74 68 65 0a  ation about the.
abc0: 2a 2a 20 6c 6f 6f 6b 61 73 69 64 65 20 6d 61 6c  ** lookaside mal
abd0: 6c 6f 63 20 73 75 62 73 79 73 74 65 6d 2e 20 20  loc subsystem.  
abe0: 45 61 63 68 20 61 76 61 69 6c 61 62 6c 65 20 6d  Each available m
abf0: 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e  emory allocation
ac00: 20 69 6e 0a 2a 2a 20 74 68 65 20 6c 6f 6f 6b 61   in.** the looka
ac10: 73 69 64 65 20 73 75 62 73 79 73 74 65 6d 20 69  side subsystem i
ac20: 73 20 73 74 6f 72 65 64 20 6f 6e 20 61 20 6c 69  s stored on a li
ac30: 6e 6b 65 64 20 6c 69 73 74 20 6f 66 20 4c 6f 6f  nked list of Loo
ac40: 6b 61 73 69 64 65 53 6c 6f 74 0a 2a 2a 20 6f 62  kasideSlot.** ob
ac50: 6a 65 63 74 73 2e 0a 2a 2a 0a 2a 2a 20 4c 6f 6f  jects..**.** Loo
ac60: 6b 61 73 69 64 65 20 61 6c 6c 6f 63 61 74 69 6f  kaside allocatio
ac70: 6e 73 20 61 72 65 20 6f 6e 6c 79 20 61 6c 6c 6f  ns are only allo
ac80: 77 65 64 20 66 6f 72 20 6f 62 6a 65 63 74 73 20  wed for objects 
ac90: 74 68 61 74 20 61 72 65 20 61 73 73 6f 63 69 61  that are associa
aca0: 74 65 64 0a 2a 2a 20 77 69 74 68 20 61 20 70 61  ted.** with a pa
acb0: 72 74 69 63 75 6c 61 72 20 64 61 74 61 62 61 73  rticular databas
acc0: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 20 20 48  e connection.  H
acd0: 65 6e 63 65 2c 20 73 63 68 65 6d 61 20 69 6e 66  ence, schema inf
ace0: 6f 72 6d 61 74 69 6f 6e 20 63 61 6e 6e 6f 74 0a  ormation cannot.
acf0: 2a 2a 20 62 65 20 73 74 6f 72 65 64 20 69 6e 20  ** be stored in 
ad00: 6c 6f 6f 6b 61 73 69 64 65 20 62 65 63 61 75 73  lookaside becaus
ad10: 65 20 69 6e 20 73 68 61 72 65 64 20 63 61 63 68  e in shared cach
ad20: 65 20 6d 6f 64 65 20 74 68 65 20 73 63 68 65 6d  e mode the schem
ad30: 61 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a 2a 2a  a information.**
ad40: 20 69 73 20 73 68 61 72 65 64 20 62 79 20 6d 75   is shared by mu
ad50: 6c 74 69 70 6c 65 20 64 61 74 61 62 61 73 65 20  ltiple database 
ad60: 63 6f 6e 6e 65 63 74 69 6f 6e 73 2e 20 20 54 68  connections.  Th
ad70: 65 72 65 66 6f 72 65 2c 20 77 68 69 6c 65 20 70  erefore, while p
ad80: 61 72 73 69 6e 67 0a 2a 2a 20 73 63 68 65 6d 61  arsing.** schema
ad90: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2c 20 74 68   information, th
ada0: 65 20 4c 6f 6f 6b 61 73 69 64 65 2e 62 45 6e 61  e Lookaside.bEna
adb0: 62 6c 65 64 20 66 6c 61 67 20 69 73 20 63 6c 65  bled flag is cle
adc0: 61 72 65 64 20 73 6f 20 74 68 61 74 0a 2a 2a 20  ared so that.** 
add0: 6c 6f 6f 6b 61 73 69 64 65 20 61 6c 6c 6f 63 61  lookaside alloca
ade0: 74 69 6f 6e 73 20 61 72 65 20 6e 6f 74 20 75 73  tions are not us
adf0: 65 64 20 74 6f 20 63 6f 6e 73 74 72 75 63 74 20  ed to construct 
ae00: 74 68 65 20 73 63 68 65 6d 61 20 6f 62 6a 65 63  the schema objec
ae10: 74 73 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 4c 6f  ts..*/.struct Lo
ae20: 6f 6b 61 73 69 64 65 20 7b 0a 20 20 75 33 32 20  okaside {.  u32 
ae30: 62 44 69 73 61 62 6c 65 3b 20 20 20 20 20 20 20  bDisable;       
ae40: 20 20 20 20 2f 2a 20 4f 6e 6c 79 20 6f 70 65 72      /* Only oper
ae50: 61 74 65 20 74 68 65 20 6c 6f 6f 6b 61 73 69 64  ate the lookasid
ae60: 65 20 77 68 65 6e 20 7a 65 72 6f 20 2a 2f 0a 20  e when zero */. 
ae70: 20 75 31 36 20 73 7a 3b 20 20 20 20 20 20 20 20   u16 sz;        
ae80: 20 20 20 20 20 20 20 20 20 2f 2a 20 53 69 7a 65           /* Size
ae90: 20 6f 66 20 65 61 63 68 20 62 75 66 66 65 72 20   of each buffer 
aea0: 69 6e 20 62 79 74 65 73 20 2a 2f 0a 20 20 75 38  in bytes */.  u8
aeb0: 20 62 4d 61 6c 6c 6f 63 65 64 3b 20 20 20 20 20   bMalloced;     
aec0: 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66        /* True if
aed0: 20 70 53 74 61 72 74 20 6f 62 74 61 69 6e 65 64   pStart obtained
aee0: 20 66 72 6f 6d 20 73 71 6c 69 74 65 33 5f 6d 61   from sqlite3_ma
aef0: 6c 6c 6f 63 28 29 20 2a 2f 0a 20 20 75 33 32 20  lloc() */.  u32 
af00: 6e 53 6c 6f 74 3b 20 20 20 20 20 20 20 20 20 20  nSlot;          
af10: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
af20: 20 6c 6f 6f 6b 61 73 69 64 65 20 73 6c 6f 74 73   lookaside slots
af30: 20 61 6c 6c 6f 63 61 74 65 64 20 2a 2f 0a 20 20   allocated */.  
af40: 75 33 32 20 61 6e 53 74 61 74 5b 33 5d 3b 20 20  u32 anStat[3];  
af50: 20 20 20 20 20 20 20 20 2f 2a 20 30 3a 20 68 69          /* 0: hi
af60: 74 73 2e 20 20 31 3a 20 73 69 7a 65 20 6d 69 73  ts.  1: size mis
af70: 73 65 73 2e 20 20 32 3a 20 66 75 6c 6c 20 6d 69  ses.  2: full mi
af80: 73 73 65 73 20 2a 2f 0a 20 20 4c 6f 6f 6b 61 73  sses */.  Lookas
af90: 69 64 65 53 6c 6f 74 20 2a 70 49 6e 69 74 3b 20  ideSlot *pInit; 
afa0: 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 62 75 66    /* List of buf
afb0: 66 65 72 73 20 6e 6f 74 20 70 72 65 76 69 6f 75  fers not previou
afc0: 73 6c 79 20 75 73 65 64 20 2a 2f 0a 20 20 4c 6f  sly used */.  Lo
afd0: 6f 6b 61 73 69 64 65 53 6c 6f 74 20 2a 70 46 72  okasideSlot *pFr
afe0: 65 65 3b 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66  ee;   /* List of
aff0: 20 61 76 61 69 6c 61 62 6c 65 20 62 75 66 66 65   available buffe
b000: 72 73 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 53  rs */.  void *pS
b010: 74 61 72 74 3b 20 20 20 20 20 20 20 20 20 20 20  tart;           
b020: 2f 2a 20 46 69 72 73 74 20 62 79 74 65 20 6f 66  /* First byte of
b030: 20 61 76 61 69 6c 61 62 6c 65 20 6d 65 6d 6f 72   available memor
b040: 79 20 73 70 61 63 65 20 2a 2f 0a 20 20 76 6f 69  y space */.  voi
b050: 64 20 2a 70 45 6e 64 3b 20 20 20 20 20 20 20 20  d *pEnd;        
b060: 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20 62 79       /* First by
b070: 74 65 20 70 61 73 74 20 65 6e 64 20 6f 66 20 61  te past end of a
b080: 76 61 69 6c 61 62 6c 65 20 73 70 61 63 65 20 2a  vailable space *
b090: 2f 0a 7d 3b 0a 73 74 72 75 63 74 20 4c 6f 6f 6b  /.};.struct Look
b0a0: 61 73 69 64 65 53 6c 6f 74 20 7b 0a 20 20 4c 6f  asideSlot {.  Lo
b0b0: 6f 6b 61 73 69 64 65 53 6c 6f 74 20 2a 70 4e 65  okasideSlot *pNe
b0c0: 78 74 3b 20 20 20 20 2f 2a 20 4e 65 78 74 20 62  xt;    /* Next b
b0d0: 75 66 66 65 72 20 69 6e 20 74 68 65 20 6c 69 73  uffer in the lis
b0e0: 74 20 6f 66 20 66 72 65 65 20 62 75 66 66 65 72  t of free buffer
b0f0: 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41  s */.};../*.** A
b100: 20 68 61 73 68 20 74 61 62 6c 65 20 66 6f 72 20   hash table for 
b110: 62 75 69 6c 74 2d 69 6e 20 66 75 6e 63 74 69 6f  built-in functio
b120: 6e 20 64 65 66 69 6e 69 74 69 6f 6e 73 2e 20 20  n definitions.  
b130: 28 41 70 70 6c 69 63 61 74 69 6f 6e 2d 64 65 66  (Application-def
b140: 69 6e 65 64 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e  ined.** function
b150: 73 20 75 73 65 20 61 20 72 65 67 75 6c 61 72 20  s use a regular 
b160: 74 61 62 6c 65 20 74 61 62 6c 65 20 66 72 6f 6d  table table from
b170: 20 68 61 73 68 2e 68 2e 29 0a 2a 2a 0a 2a 2a 20   hash.h.).**.** 
b180: 48 61 73 68 20 65 61 63 68 20 46 75 6e 63 44 65  Hash each FuncDe
b190: 66 20 73 74 72 75 63 74 75 72 65 20 69 6e 74 6f  f structure into
b1a0: 20 6f 6e 65 20 6f 66 20 74 68 65 20 46 75 6e 63   one of the Func
b1b0: 44 65 66 48 61 73 68 2e 61 5b 5d 20 73 6c 6f 74  DefHash.a[] slot
b1c0: 73 2e 0a 2a 2a 20 43 6f 6c 6c 69 73 69 6f 6e 73  s..** Collisions
b1d0: 20 61 72 65 20 6f 6e 20 74 68 65 20 46 75 6e 63   are on the Func
b1e0: 44 65 66 2e 75 2e 70 48 61 73 68 20 63 68 61 69  Def.u.pHash chai
b1f0: 6e 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  n..*/.#define SQ
b200: 4c 49 54 45 5f 46 55 4e 43 5f 48 41 53 48 5f 53  LITE_FUNC_HASH_S
b210: 5a 20 32 33 0a 73 74 72 75 63 74 20 46 75 6e 63  Z 23.struct Func
b220: 44 65 66 48 61 73 68 20 7b 0a 20 20 46 75 6e 63  DefHash {.  Func
b230: 44 65 66 20 2a 61 5b 53 51 4c 49 54 45 5f 46 55  Def *a[SQLITE_FU
b240: 4e 43 5f 48 41 53 48 5f 53 5a 5d 3b 20 20 20 20  NC_HASH_SZ];    
b250: 20 20 20 2f 2a 20 48 61 73 68 20 74 61 62 6c 65     /* Hash table
b260: 20 66 6f 72 20 66 75 6e 63 74 69 6f 6e 73 20 2a   for functions *
b270: 2f 0a 7d 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c  /.};..#ifdef SQL
b280: 49 54 45 5f 55 53 45 52 5f 41 55 54 48 45 4e 54  ITE_USER_AUTHENT
b290: 49 43 41 54 49 4f 4e 0a 2f 2a 0a 2a 2a 20 49 6e  ICATION./*.** In
b2a0: 66 6f 72 6d 61 74 69 6f 6e 20 68 65 6c 64 20 69  formation held i
b2b0: 6e 20 74 68 65 20 22 73 71 6c 69 74 65 33 22 20  n the "sqlite3" 
b2c0: 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74  database connect
b2d0: 69 6f 6e 20 6f 62 6a 65 63 74 20 61 6e 64 20 75  ion object and u
b2e0: 73 65 64 0a 2a 2a 20 74 6f 20 6d 61 6e 61 67 65  sed.** to manage
b2f0: 20 75 73 65 72 20 61 75 74 68 65 6e 74 69 63 61   user authentica
b300: 74 69 6f 6e 2e 0a 2a 2f 0a 74 79 70 65 64 65 66  tion..*/.typedef
b310: 20 73 74 72 75 63 74 20 73 71 6c 69 74 65 33 5f   struct sqlite3_
b320: 75 73 65 72 61 75 74 68 20 73 71 6c 69 74 65 33  userauth sqlite3
b330: 5f 75 73 65 72 61 75 74 68 3b 0a 73 74 72 75 63  _userauth;.struc
b340: 74 20 73 71 6c 69 74 65 33 5f 75 73 65 72 61 75  t sqlite3_userau
b350: 74 68 20 7b 0a 20 20 75 38 20 61 75 74 68 4c 65  th {.  u8 authLe
b360: 76 65 6c 3b 20 20 20 20 20 20 20 20 20 20 20 20  vel;            
b370: 20 20 20 20 20 2f 2a 20 43 75 72 72 65 6e 74 20       /* Current 
b380: 61 75 74 68 65 6e 74 69 63 61 74 69 6f 6e 20 6c  authentication l
b390: 65 76 65 6c 20 2a 2f 0a 20 20 69 6e 74 20 6e 41  evel */.  int nA
b3a0: 75 74 68 50 57 3b 20 20 20 20 20 20 20 20 20 20  uthPW;          
b3b0: 20 20 20 20 20 20 20 20 2f 2a 20 53 69 7a 65 20          /* Size 
b3c0: 6f 66 20 74 68 65 20 7a 41 75 74 68 50 57 20 69  of the zAuthPW i
b3d0: 6e 20 62 79 74 65 73 20 2a 2f 0a 20 20 63 68 61  n bytes */.  cha
b3e0: 72 20 2a 7a 41 75 74 68 50 57 3b 20 20 20 20 20  r *zAuthPW;     
b3f0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50 61             /* Pa
b400: 73 73 77 6f 72 64 20 75 73 65 64 20 74 6f 20 61  ssword used to a
b410: 75 74 68 65 6e 74 69 63 61 74 65 20 2a 2f 0a 20  uthenticate */. 
b420: 20 63 68 61 72 20 2a 7a 41 75 74 68 55 73 65 72   char *zAuthUser
b430: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
b440: 2a 20 55 73 65 72 20 6e 61 6d 65 20 75 73 65 64  * User name used
b450: 20 74 6f 20 61 75 74 68 65 6e 74 69 63 61 74 65   to authenticate
b460: 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 20 41 6c 6c 6f 77   */.};../* Allow
b470: 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20 73 71  ed values for sq
b480: 6c 69 74 65 33 5f 75 73 65 72 61 75 74 68 2e 61  lite3_userauth.a
b490: 75 74 68 4c 65 76 65 6c 20 2a 2f 0a 23 64 65 66  uthLevel */.#def
b4a0: 69 6e 65 20 55 41 55 54 48 5f 55 6e 6b 6e 6f 77  ine UAUTH_Unknow
b4b0: 6e 20 20 20 20 20 30 20 20 20 20 20 2f 2a 20 41  n     0     /* A
b4c0: 75 74 68 65 6e 74 69 63 61 74 69 6f 6e 20 6e 6f  uthentication no
b4d0: 74 20 79 65 74 20 63 68 65 63 6b 65 64 20 2a 2f  t yet checked */
b4e0: 0a 23 64 65 66 69 6e 65 20 55 41 55 54 48 5f 46  .#define UAUTH_F
b4f0: 61 69 6c 20 20 20 20 20 20 20 20 31 20 20 20 20  ail        1    
b500: 20 2f 2a 20 55 73 65 72 20 61 75 74 68 65 6e 74   /* User authent
b510: 69 63 61 74 69 6f 6e 20 66 61 69 6c 65 64 20 2a  ication failed *
b520: 2f 0a 23 64 65 66 69 6e 65 20 55 41 55 54 48 5f  /.#define UAUTH_
b530: 55 73 65 72 20 20 20 20 20 20 20 20 32 20 20 20  User        2   
b540: 20 20 2f 2a 20 41 75 74 68 65 6e 74 69 63 61 74    /* Authenticat
b550: 65 64 20 61 73 20 61 20 6e 6f 72 6d 61 6c 20 75  ed as a normal u
b560: 73 65 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 55  ser */.#define U
b570: 41 55 54 48 5f 41 64 6d 69 6e 20 20 20 20 20 20  AUTH_Admin      
b580: 20 33 20 20 20 20 20 2f 2a 20 41 75 74 68 65 6e   3     /* Authen
b590: 74 69 63 61 74 65 64 20 61 73 20 61 6e 20 61 64  ticated as an ad
b5a0: 6d 69 6e 69 73 74 72 61 74 6f 72 20 2a 2f 0a 0a  ministrator */..
b5b0: 2f 2a 20 46 75 6e 63 74 69 6f 6e 73 20 75 73 65  /* Functions use
b5c0: 64 20 6f 6e 6c 79 20 62 79 20 75 73 65 72 20 61  d only by user a
b5d0: 75 74 68 6f 72 69 7a 61 74 69 6f 6e 20 6c 6f 67  uthorization log
b5e0: 69 63 20 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65  ic */.int sqlite
b5f0: 33 55 73 65 72 41 75 74 68 54 61 62 6c 65 28 63  3UserAuthTable(c
b600: 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 69 6e 74  onst char*);.int
b610: 20 73 71 6c 69 74 65 33 55 73 65 72 41 75 74 68   sqlite3UserAuth
b620: 43 68 65 63 6b 4c 6f 67 69 6e 28 73 71 6c 69 74  CheckLogin(sqlit
b630: 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c  e3*,const char*,
b640: 75 38 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  u8*);.void sqlit
b650: 65 33 55 73 65 72 41 75 74 68 49 6e 69 74 28 73  e3UserAuthInit(s
b660: 71 6c 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20 73  qlite3*);.void s
b670: 71 6c 69 74 65 33 43 72 79 70 74 46 75 6e 63 28  qlite3CryptFunc(
b680: 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a  sqlite3_context*
b690: 2c 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c  ,int,sqlite3_val
b6a0: 75 65 2a 2a 29 3b 0a 0a 23 65 6e 64 69 66 20 2f  ue**);..#endif /
b6b0: 2a 20 53 51 4c 49 54 45 5f 55 53 45 52 5f 41 55  * SQLITE_USER_AU
b6c0: 54 48 45 4e 54 49 43 41 54 49 4f 4e 20 2a 2f 0a  THENTICATION */.
b6d0: 0a 2f 2a 0a 2a 2a 20 74 79 70 65 64 65 66 20 66  ./*.** typedef f
b6e0: 6f 72 20 74 68 65 20 61 75 74 68 6f 72 69 7a 61  or the authoriza
b6f0: 74 69 6f 6e 20 63 61 6c 6c 62 61 63 6b 20 66 75  tion callback fu
b700: 6e 63 74 69 6f 6e 2e 0a 2a 2f 0a 23 69 66 64 65  nction..*/.#ifde
b710: 66 20 53 51 4c 49 54 45 5f 55 53 45 52 5f 41 55  f SQLITE_USER_AU
b720: 54 48 45 4e 54 49 43 41 54 49 4f 4e 0a 20 20 74  THENTICATION.  t
b730: 79 70 65 64 65 66 20 69 6e 74 20 28 2a 73 71 6c  ypedef int (*sql
b740: 69 74 65 33 5f 78 61 75 74 68 29 28 76 6f 69 64  ite3_xauth)(void
b750: 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72  *,int,const char
b760: 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f  *,const char*,co
b770: 6e 73 74 20 63 68 61 72 2a 2c 0a 20 20 20 20 20  nst char*,.     
b780: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b790: 20 20 20 20 20 20 20 20 20 20 63 6f 6e 73 74 20            const 
b7a0: 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61  char*, const cha
b7b0: 72 2a 29 3b 0a 23 65 6c 73 65 0a 20 20 74 79 70  r*);.#else.  typ
b7c0: 65 64 65 66 20 69 6e 74 20 28 2a 73 71 6c 69 74  edef int (*sqlit
b7d0: 65 33 5f 78 61 75 74 68 29 28 76 6f 69 64 2a 2c  e3_xauth)(void*,
b7e0: 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c  int,const char*,
b7f0: 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73  const char*,cons
b800: 74 20 63 68 61 72 2a 2c 0a 20 20 20 20 20 20 20  t char*,.       
b810: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b820: 20 20 20 20 20 20 20 20 63 6f 6e 73 74 20 63 68          const ch
b830: 61 72 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69  ar*);.#endif..#i
b840: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
b850: 54 5f 44 45 50 52 45 43 41 54 45 44 0a 2f 2a 20  T_DEPRECATED./* 
b860: 54 68 69 73 20 69 73 20 61 6e 20 65 78 74 72 61  This is an extra
b870: 20 53 51 4c 49 54 45 5f 54 52 41 43 45 20 6d 61   SQLITE_TRACE ma
b880: 63 72 6f 20 74 68 61 74 20 69 6e 64 69 63 61 74  cro that indicat
b890: 65 73 20 22 6c 65 67 61 63 79 22 20 74 72 61 63  es "legacy" trac
b8a0: 69 6e 67 0a 2a 2a 20 69 6e 20 74 68 65 20 73 74  ing.** in the st
b8b0: 79 6c 65 20 6f 66 20 73 71 6c 69 74 65 33 5f 74  yle of sqlite3_t
b8c0: 72 61 63 65 28 29 0a 2a 2f 0a 23 64 65 66 69 6e  race().*/.#defin
b8d0: 65 20 53 51 4c 49 54 45 5f 54 52 41 43 45 5f 4c  e SQLITE_TRACE_L
b8e0: 45 47 41 43 59 20 20 30 78 38 30 0a 23 65 6c 73  EGACY  0x80.#els
b8f0: 65 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  e.#define SQLITE
b900: 5f 54 52 41 43 45 5f 4c 45 47 41 43 59 20 20 30  _TRACE_LEGACY  0
b910: 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
b920: 45 5f 4f 4d 49 54 5f 44 45 50 52 45 43 41 54 45  E_OMIT_DEPRECATE
b930: 44 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 45 61 63  D */.../*.** Eac
b940: 68 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65  h database conne
b950: 63 74 69 6f 6e 20 69 73 20 61 6e 20 69 6e 73 74  ction is an inst
b960: 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c  ance of the foll
b970: 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 2e  owing structure.
b980: 0a 2a 2f 0a 73 74 72 75 63 74 20 73 71 6c 69 74  .*/.struct sqlit
b990: 65 33 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 76  e3 {.  sqlite3_v
b9a0: 66 73 20 2a 70 56 66 73 3b 20 20 20 20 20 20 20  fs *pVfs;       
b9b0: 20 20 20 20 20 2f 2a 20 4f 53 20 49 6e 74 65 72       /* OS Inter
b9c0: 66 61 63 65 20 2a 2f 0a 20 20 73 74 72 75 63 74  face */.  struct
b9d0: 20 56 64 62 65 20 2a 70 56 64 62 65 3b 20 20 20   Vdbe *pVdbe;   
b9e0: 20 20 20 20 20 20 20 20 2f 2a 20 4c 69 73 74 20          /* List 
b9f0: 6f 66 20 61 63 74 69 76 65 20 76 69 72 74 75 61  of active virtua
ba00: 6c 20 6d 61 63 68 69 6e 65 73 20 2a 2f 0a 20 20  l machines */.  
ba10: 43 6f 6c 6c 53 65 71 20 2a 70 44 66 6c 74 43 6f  CollSeq *pDfltCo
ba20: 6c 6c 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ll;           /*
ba30: 20 54 68 65 20 64 65 66 61 75 6c 74 20 63 6f 6c   The default col
ba40: 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 20  lating sequence 
ba50: 28 42 49 4e 41 52 59 29 20 2a 2f 0a 20 20 73 71  (BINARY) */.  sq
ba60: 6c 69 74 65 33 5f 6d 75 74 65 78 20 2a 6d 75 74  lite3_mutex *mut
ba70: 65 78 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 43  ex;         /* C
ba80: 6f 6e 6e 65 63 74 69 6f 6e 20 6d 75 74 65 78 20  onnection mutex 
ba90: 2a 2f 0a 20 20 44 62 20 2a 61 44 62 3b 20 20 20  */.  Db *aDb;   
baa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bab0: 20 20 20 2f 2a 20 41 6c 6c 20 62 61 63 6b 65 6e     /* All backen
bac0: 64 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 44 62 3b  ds */.  int nDb;
bad0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bae0: 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
baf0: 6f 66 20 62 61 63 6b 65 6e 64 73 20 63 75 72 72  of backends curr
bb00: 65 6e 74 6c 79 20 69 6e 20 75 73 65 20 2a 2f 0a  ently in use */.
bb10: 20 20 75 33 32 20 6d 44 62 46 6c 61 67 73 3b 20    u32 mDbFlags; 
bb20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bb30: 2f 2a 20 66 6c 61 67 73 20 72 65 63 6f 72 64 69  /* flags recordi
bb40: 6e 67 20 69 6e 74 65 72 6e 61 6c 20 73 74 61 74  ng internal stat
bb50: 65 20 2a 2f 0a 20 20 75 33 32 20 66 6c 61 67 73  e */.  u32 flags
bb60: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
bb70: 20 20 20 20 20 2f 2a 20 66 6c 61 67 73 20 73 65       /* flags se
bb80: 74 74 61 62 6c 65 20 62 79 20 70 72 61 67 6d 61  ttable by pragma
bb90: 73 2e 20 53 65 65 20 62 65 6c 6f 77 20 2a 2f 0a  s. See below */.
bba0: 20 20 69 36 34 20 6c 61 73 74 52 6f 77 69 64 3b    i64 lastRowid;
bbb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bbc0: 2f 2a 20 52 4f 57 49 44 20 6f 66 20 6d 6f 73 74  /* ROWID of most
bbd0: 20 72 65 63 65 6e 74 20 69 6e 73 65 72 74 20 28   recent insert (
bbe0: 73 65 65 20 61 62 6f 76 65 29 20 2a 2f 0a 20 20  see above) */.  
bbf0: 69 36 34 20 73 7a 4d 6d 61 70 3b 20 20 20 20 20  i64 szMmap;     
bc00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
bc10: 20 44 65 66 61 75 6c 74 20 6d 6d 61 70 5f 73 69   Default mmap_si
bc20: 7a 65 20 73 65 74 74 69 6e 67 20 2a 2f 0a 20 20  ze setting */.  
bc30: 75 33 32 20 6e 53 63 68 65 6d 61 4c 6f 63 6b 3b  u32 nSchemaLock;
bc40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
bc50: 20 44 6f 20 6e 6f 74 20 72 65 73 65 74 20 74 68   Do not reset th
bc60: 65 20 73 63 68 65 6d 61 20 77 68 65 6e 20 6e 6f  e schema when no
bc70: 6e 2d 7a 65 72 6f 20 2a 2f 0a 20 20 75 6e 73 69  n-zero */.  unsi
bc80: 67 6e 65 64 20 69 6e 74 20 6f 70 65 6e 46 6c 61  gned int openFla
bc90: 67 73 3b 20 20 20 20 20 20 20 2f 2a 20 46 6c 61  gs;       /* Fla
bca0: 67 73 20 70 61 73 73 65 64 20 74 6f 20 73 71 6c  gs passed to sql
bcb0: 69 74 65 33 5f 76 66 73 2e 78 4f 70 65 6e 28 29  ite3_vfs.xOpen()
bcc0: 20 2a 2f 0a 20 20 69 6e 74 20 65 72 72 43 6f 64   */.  int errCod
bcd0: 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e;              
bce0: 20 20 20 20 2f 2a 20 4d 6f 73 74 20 72 65 63 65      /* Most rece
bcf0: 6e 74 20 65 72 72 6f 72 20 63 6f 64 65 20 28 53  nt error code (S
bd00: 51 4c 49 54 45 5f 2a 29 20 2a 2f 0a 20 20 69 6e  QLITE_*) */.  in
bd10: 74 20 65 72 72 4d 61 73 6b 3b 20 20 20 20 20 20  t errMask;      
bd20: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 26              /* &
bd30: 20 72 65 73 75 6c 74 20 63 6f 64 65 73 20 77 69   result codes wi
bd40: 74 68 20 74 68 69 73 20 62 65 66 6f 72 65 20 72  th this before r
bd50: 65 74 75 72 6e 69 6e 67 20 2a 2f 0a 20 20 69 6e  eturning */.  in
bd60: 74 20 69 53 79 73 45 72 72 6e 6f 3b 20 20 20 20  t iSysErrno;    
bd70: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 45              /* E
bd80: 72 72 6e 6f 20 76 61 6c 75 65 20 66 72 6f 6d 20  rrno value from 
bd90: 6c 61 73 74 20 73 79 73 74 65 6d 20 65 72 72 6f  last system erro
bda0: 72 20 2a 2f 0a 20 20 75 31 36 20 64 62 4f 70 74  r */.  u16 dbOpt
bdb0: 46 6c 61 67 73 3b 20 20 20 20 20 20 20 20 20 20  Flags;          
bdc0: 20 20 20 20 20 2f 2a 20 46 6c 61 67 73 20 74 6f       /* Flags to
bdd0: 20 65 6e 61 62 6c 65 2f 64 69 73 61 62 6c 65 20   enable/disable 
bde0: 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73 20 2a 2f  optimizations */
bdf0: 0a 20 20 75 38 20 65 6e 63 3b 20 20 20 20 20 20  .  u8 enc;      
be00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
be10: 20 2f 2a 20 54 65 78 74 20 65 6e 63 6f 64 69 6e   /* Text encodin
be20: 67 20 2a 2f 0a 20 20 75 38 20 61 75 74 6f 43 6f  g */.  u8 autoCo
be30: 6d 6d 69 74 3b 20 20 20 20 20 20 20 20 20 20 20  mmit;           
be40: 20 20 20 20 20 2f 2a 20 54 68 65 20 61 75 74 6f       /* The auto
be50: 2d 63 6f 6d 6d 69 74 20 66 6c 61 67 2e 20 2a 2f  -commit flag. */
be60: 0a 20 20 75 38 20 74 65 6d 70 5f 73 74 6f 72 65  .  u8 temp_store
be70: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
be80: 20 2f 2a 20 31 3a 20 66 69 6c 65 20 32 3a 20 6d   /* 1: file 2: m
be90: 65 6d 6f 72 79 20 30 3a 20 64 65 66 61 75 6c 74  emory 0: default
bea0: 20 2a 2f 0a 20 20 75 38 20 6d 61 6c 6c 6f 63 46   */.  u8 mallocF
beb0: 61 69 6c 65 64 3b 20 20 20 20 20 20 20 20 20 20  ailed;          
bec0: 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 77      /* True if w
bed0: 65 20 68 61 76 65 20 73 65 65 6e 20 61 20 6d 61  e have seen a ma
bee0: 6c 6c 6f 63 20 66 61 69 6c 75 72 65 20 2a 2f 0a  lloc failure */.
bef0: 20 20 75 38 20 62 42 65 6e 69 67 6e 4d 61 6c 6c    u8 bBenignMall
bf00: 6f 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  oc;             
bf10: 2f 2a 20 44 6f 20 6e 6f 74 20 72 65 71 75 69 72  /* Do not requir
bf20: 65 20 4f 4f 4d 73 20 69 66 20 74 72 75 65 20 2a  e OOMs if true *
bf30: 2f 0a 20 20 75 38 20 64 66 6c 74 4c 6f 63 6b 4d  /.  u8 dfltLockM
bf40: 6f 64 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ode;            
bf50: 20 20 2f 2a 20 44 65 66 61 75 6c 74 20 6c 6f 63    /* Default loc
bf60: 6b 69 6e 67 2d 6d 6f 64 65 20 66 6f 72 20 61 74  king-mode for at
bf70: 74 61 63 68 65 64 20 64 62 73 20 2a 2f 0a 20 20  tached dbs */.  
bf80: 73 69 67 6e 65 64 20 63 68 61 72 20 6e 65 78 74  signed char next
bf90: 41 75 74 6f 76 61 63 3b 20 20 20 20 20 20 2f 2a  Autovac;      /*
bfa0: 20 41 75 74 6f 76 61 63 20 73 65 74 74 69 6e 67   Autovac setting
bfb0: 20 61 66 74 65 72 20 56 41 43 55 55 4d 20 69 66   after VACUUM if
bfc0: 20 3e 3d 30 20 2a 2f 0a 20 20 75 38 20 73 75 70   >=0 */.  u8 sup
bfd0: 70 72 65 73 73 45 72 72 3b 20 20 20 20 20 20 20  pressErr;       
bfe0: 20 20 20 20 20 20 20 20 2f 2a 20 44 6f 20 6e 6f          /* Do no
bff0: 74 20 69 73 73 75 65 20 65 72 72 6f 72 20 6d 65  t issue error me
c000: 73 73 61 67 65 73 20 69 66 20 74 72 75 65 20 2a  ssages if true *
c010: 2f 0a 20 20 75 38 20 76 74 61 62 4f 6e 43 6f 6e  /.  u8 vtabOnCon
c020: 66 6c 69 63 74 3b 20 20 20 20 20 20 20 20 20 20  flict;          
c030: 20 20 2f 2a 20 56 61 6c 75 65 20 74 6f 20 72 65    /* Value to re
c040: 74 75 72 6e 20 66 6f 72 20 73 33 5f 76 74 61 62  turn for s3_vtab
c050: 5f 6f 6e 5f 63 6f 6e 66 6c 69 63 74 28 29 20 2a  _on_conflict() *
c060: 2f 0a 20 20 75 38 20 69 73 54 72 61 6e 73 61 63  /.  u8 isTransac
c070: 74 69 6f 6e 53 61 76 65 70 6f 69 6e 74 3b 20 20  tionSavepoint;  
c080: 20 20 2f 2a 20 54 72 75 65 20 69 66 20 74 68 65    /* True if the
c090: 20 6f 75 74 65 72 6d 6f 73 74 20 73 61 76 65 70   outermost savep
c0a0: 6f 69 6e 74 20 69 73 20 61 20 54 53 20 2a 2f 0a  oint is a TS */.
c0b0: 20 20 75 38 20 6d 54 72 61 63 65 3b 20 20 20 20    u8 mTrace;    
c0c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c0d0: 2f 2a 20 7a 65 72 6f 20 6f 72 20 6d 6f 72 65 20  /* zero or more 
c0e0: 53 51 4c 49 54 45 5f 54 52 41 43 45 20 66 6c 61  SQLITE_TRACE fla
c0f0: 67 73 20 2a 2f 0a 20 20 75 38 20 6e 6f 53 68 61  gs */.  u8 noSha
c100: 72 65 64 43 61 63 68 65 3b 20 20 20 20 20 20 20  redCache;       
c110: 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66        /* True if
c120: 20 6e 6f 20 73 68 61 72 65 64 2d 63 61 63 68 65   no shared-cache
c130: 20 62 61 63 6b 65 6e 64 73 20 2a 2f 0a 20 20 75   backends */.  u
c140: 38 20 6e 53 71 6c 45 78 65 63 3b 20 20 20 20 20  8 nSqlExec;     
c150: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
c160: 4e 75 6d 62 65 72 20 6f 66 20 70 65 6e 64 69 6e  Number of pendin
c170: 67 20 4f 50 5f 53 71 6c 45 78 65 63 20 6f 70 63  g OP_SqlExec opc
c180: 6f 64 65 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 65  odes */.  int ne
c190: 78 74 50 61 67 65 73 69 7a 65 3b 20 20 20 20 20  xtPagesize;     
c1a0: 20 20 20 20 20 20 20 20 2f 2a 20 50 61 67 65 73          /* Pages
c1b0: 69 7a 65 20 61 66 74 65 72 20 56 41 43 55 55 4d  ize after VACUUM
c1c0: 20 69 66 20 3e 30 20 2a 2f 0a 20 20 75 33 32 20   if >0 */.  u32 
c1d0: 6d 61 67 69 63 3b 20 20 20 20 20 20 20 20 20 20  magic;          
c1e0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 67            /* Mag
c1f0: 69 63 20 6e 75 6d 62 65 72 20 66 6f 72 20 64 65  ic number for de
c200: 74 65 63 74 20 6c 69 62 72 61 72 79 20 6d 69 73  tect library mis
c210: 75 73 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 43 68  use */.  int nCh
c220: 61 6e 67 65 3b 20 20 20 20 20 20 20 20 20 20 20  ange;           
c230: 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20         /* Value 
c240: 72 65 74 75 72 6e 65 64 20 62 79 20 73 71 6c 69  returned by sqli
c250: 74 65 33 5f 63 68 61 6e 67 65 73 28 29 20 2a 2f  te3_changes() */
c260: 0a 20 20 69 6e 74 20 6e 54 6f 74 61 6c 43 68 61  .  int nTotalCha
c270: 6e 67 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  nge;            
c280: 20 2f 2a 20 56 61 6c 75 65 20 72 65 74 75 72 6e   /* Value return
c290: 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f 74 6f  ed by sqlite3_to
c2a0: 74 61 6c 5f 63 68 61 6e 67 65 73 28 29 20 2a 2f  tal_changes() */
c2b0: 0a 20 20 69 6e 74 20 61 4c 69 6d 69 74 5b 53 51  .  int aLimit[SQ
c2c0: 4c 49 54 45 5f 4e 5f 4c 49 4d 49 54 5d 3b 20 20  LITE_N_LIMIT];  
c2d0: 20 2f 2a 20 4c 69 6d 69 74 73 20 2a 2f 0a 20 20   /* Limits */.  
c2e0: 69 6e 74 20 6e 4d 61 78 53 6f 72 74 65 72 4d 6d  int nMaxSorterMm
c2f0: 61 70 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ap;           /*
c300: 20 4d 61 78 69 6d 75 6d 20 73 69 7a 65 20 6f 66   Maximum size of
c310: 20 72 65 67 69 6f 6e 73 20 6d 61 70 70 65 64 20   regions mapped 
c320: 62 79 20 73 6f 72 74 65 72 20 2a 2f 0a 20 20 73  by sorter */.  s
c330: 74 72 75 63 74 20 73 71 6c 69 74 65 33 49 6e 69  truct sqlite3Ini
c340: 74 49 6e 66 6f 20 7b 20 20 20 20 20 20 2f 2a 20  tInfo {      /* 
c350: 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 75 73 65 64  Information used
c360: 20 64 75 72 69 6e 67 20 69 6e 69 74 69 61 6c 69   during initiali
c370: 7a 61 74 69 6f 6e 20 2a 2f 0a 20 20 20 20 69 6e  zation */.    in
c380: 74 20 6e 65 77 54 6e 75 6d 3b 20 20 20 20 20 20  t newTnum;      
c390: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 6f 6f            /* Roo
c3a0: 74 70 61 67 65 20 6f 66 20 74 61 62 6c 65 20 62  tpage of table b
c3b0: 65 69 6e 67 20 69 6e 69 74 69 61 6c 69 7a 65 64  eing initialized
c3c0: 20 2a 2f 0a 20 20 20 20 75 38 20 69 44 62 3b 20   */.    u8 iDb; 
c3d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c3e0: 20 20 20 20 2f 2a 20 57 68 69 63 68 20 64 62 20      /* Which db 
c3f0: 66 69 6c 65 20 69 73 20 62 65 69 6e 67 20 69 6e  file is being in
c400: 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 20  itialized */.   
c410: 20 75 38 20 62 75 73 79 3b 20 20 20 20 20 20 20   u8 busy;       
c420: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
c430: 54 52 55 45 20 69 66 20 63 75 72 72 65 6e 74 6c  TRUE if currentl
c440: 79 20 69 6e 69 74 69 61 6c 69 7a 69 6e 67 20 2a  y initializing *
c450: 2f 0a 20 20 20 20 75 6e 73 69 67 6e 65 64 20 6f  /.    unsigned o
c460: 72 70 68 61 6e 54 72 69 67 67 65 72 20 3a 20 31  rphanTrigger : 1
c470: 3b 20 2f 2a 20 4c 61 73 74 20 73 74 61 74 65 6d  ; /* Last statem
c480: 65 6e 74 20 69 73 20 6f 72 70 68 61 6e 65 64 20  ent is orphaned 
c490: 54 45 4d 50 20 74 72 69 67 67 65 72 20 2a 2f 0a  TEMP trigger */.
c4a0: 20 20 20 20 75 6e 73 69 67 6e 65 64 20 69 6d 70      unsigned imp
c4b0: 6f 73 74 65 72 54 61 62 6c 65 20 3a 20 31 3b 20  osterTable : 1; 
c4c0: 2f 2a 20 42 75 69 6c 64 69 6e 67 20 61 6e 20 69  /* Building an i
c4d0: 6d 70 6f 73 74 65 72 20 74 61 62 6c 65 20 2a 2f  mposter table */
c4e0: 0a 20 20 20 20 75 6e 73 69 67 6e 65 64 20 72 65  .    unsigned re
c4f0: 6f 70 65 6e 4d 65 6d 64 62 20 3a 20 31 3b 20 20  openMemdb : 1;  
c500: 20 2f 2a 20 41 54 54 41 43 48 20 69 73 20 72 65   /* ATTACH is re
c510: 61 6c 6c 79 20 61 20 72 65 6f 70 65 6e 20 75 73  ally a reopen us
c520: 69 6e 67 20 4d 65 6d 44 42 20 2a 2f 0a 20 20 7d  ing MemDB */.  }
c530: 20 69 6e 69 74 3b 0a 20 20 69 6e 74 20 6e 56 64   init;.  int nVd
c540: 62 65 41 63 74 69 76 65 3b 20 20 20 20 20 20 20  beActive;       
c550: 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
c560: 20 6f 66 20 56 44 42 45 73 20 63 75 72 72 65 6e   of VDBEs curren
c570: 74 6c 79 20 72 75 6e 6e 69 6e 67 20 2a 2f 0a 20  tly running */. 
c580: 20 69 6e 74 20 6e 56 64 62 65 52 65 61 64 3b 20   int nVdbeRead; 
c590: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
c5a0: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 63 74 69  * Number of acti
c5b0: 76 65 20 56 44 42 45 73 20 74 68 61 74 20 72 65  ve VDBEs that re
c5c0: 61 64 20 6f 72 20 77 72 69 74 65 20 2a 2f 0a 20  ad or write */. 
c5d0: 20 69 6e 74 20 6e 56 64 62 65 57 72 69 74 65 3b   int nVdbeWrite;
c5e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
c5f0: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 63 74 69  * Number of acti
c600: 76 65 20 56 44 42 45 73 20 74 68 61 74 20 72 65  ve VDBEs that re
c610: 61 64 20 61 6e 64 20 77 72 69 74 65 20 2a 2f 0a  ad and write */.
c620: 20 20 69 6e 74 20 6e 56 64 62 65 45 78 65 63 3b    int nVdbeExec;
c630: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c640: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6e 65 73  /* Number of nes
c650: 74 65 64 20 63 61 6c 6c 73 20 74 6f 20 56 64 62  ted calls to Vdb
c660: 65 45 78 65 63 28 29 20 2a 2f 0a 20 20 69 6e 74  eExec() */.  int
c670: 20 6e 56 44 65 73 74 72 6f 79 3b 20 20 20 20 20   nVDestroy;     
c680: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
c690: 6d 62 65 72 20 6f 66 20 61 63 74 69 76 65 20 4f  mber of active O
c6a0: 50 5f 56 44 65 73 74 72 6f 79 20 6f 70 65 72 61  P_VDestroy opera
c6b0: 74 69 6f 6e 73 20 2a 2f 0a 20 20 69 6e 74 20 6e  tions */.  int n
c6c0: 45 78 74 65 6e 73 69 6f 6e 3b 20 20 20 20 20 20  Extension;      
c6d0: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
c6e0: 65 72 20 6f 66 20 6c 6f 61 64 65 64 20 65 78 74  er of loaded ext
c6f0: 65 6e 73 69 6f 6e 73 20 2a 2f 0a 20 20 76 6f 69  ensions */.  voi
c700: 64 20 2a 2a 61 45 78 74 65 6e 73 69 6f 6e 3b 20  d **aExtension; 
c710: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72             /* Ar
c720: 72 61 79 20 6f 66 20 73 68 61 72 65 64 20 6c 69  ray of shared li
c730: 62 72 61 72 79 20 68 61 6e 64 6c 65 73 20 2a 2f  brary handles */
c740: 0a 20 20 69 6e 74 20 28 2a 78 54 72 61 63 65 29  .  int (*xTrace)
c750: 28 75 33 32 2c 76 6f 69 64 2a 2c 76 6f 69 64 2a  (u32,void*,void*
c760: 2c 76 6f 69 64 2a 29 3b 20 20 20 20 20 2f 2a 20  ,void*);     /* 
c770: 54 72 61 63 65 20 66 75 6e 63 74 69 6f 6e 20 2a  Trace function *
c780: 2f 0a 20 20 76 6f 69 64 20 2a 70 54 72 61 63 65  /.  void *pTrace
c790: 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20  Arg;            
c7a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
c7b0: 20 41 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65   Argument to the
c7c0: 20 74 72 61 63 65 20 66 75 6e 63 74 69 6f 6e 20   trace function 
c7d0: 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 50 72 6f  */.  void (*xPro
c7e0: 66 69 6c 65 29 28 76 6f 69 64 2a 2c 63 6f 6e 73  file)(void*,cons
c7f0: 74 20 63 68 61 72 2a 2c 75 36 34 29 3b 20 20 2f  t char*,u64);  /
c800: 2a 20 50 72 6f 66 69 6c 69 6e 67 20 66 75 6e 63  * Profiling func
c810: 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a  tion */.  void *
c820: 70 50 72 6f 66 69 6c 65 41 72 67 3b 20 20 20 20  pProfileArg;    
c830: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c840: 20 20 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74 20      /* Argument 
c850: 74 6f 20 70 72 6f 66 69 6c 65 20 66 75 6e 63 74  to profile funct
c860: 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70  ion */.  void *p
c870: 43 6f 6d 6d 69 74 41 72 67 3b 20 20 20 20 20 20  CommitArg;      
c880: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72             /* Ar
c890: 67 75 6d 65 6e 74 20 74 6f 20 78 43 6f 6d 6d 69  gument to xCommi
c8a0: 74 43 61 6c 6c 62 61 63 6b 28 29 20 2a 2f 0a 20  tCallback() */. 
c8b0: 20 69 6e 74 20 28 2a 78 43 6f 6d 6d 69 74 43 61   int (*xCommitCa
c8c0: 6c 6c 62 61 63 6b 29 28 76 6f 69 64 2a 29 3b 20  llback)(void*); 
c8d0: 20 20 20 2f 2a 20 49 6e 76 6f 6b 65 64 20 61 74     /* Invoked at
c8e0: 20 65 76 65 72 79 20 63 6f 6d 6d 69 74 2e 20 2a   every commit. *
c8f0: 2f 0a 20 20 76 6f 69 64 20 2a 70 52 6f 6c 6c 62  /.  void *pRollb
c900: 61 63 6b 41 72 67 3b 20 20 20 20 20 20 20 20 20  ackArg;         
c910: 20 20 20 20 20 20 2f 2a 20 41 72 67 75 6d 65 6e        /* Argumen
c920: 74 20 74 6f 20 78 52 6f 6c 6c 62 61 63 6b 43 61  t to xRollbackCa
c930: 6c 6c 62 61 63 6b 28 29 20 2a 2f 0a 20 20 76 6f  llback() */.  vo
c940: 69 64 20 28 2a 78 52 6f 6c 6c 62 61 63 6b 43 61  id (*xRollbackCa
c950: 6c 6c 62 61 63 6b 29 28 76 6f 69 64 2a 29 3b 20  llback)(void*); 
c960: 2f 2a 20 49 6e 76 6f 6b 65 64 20 61 74 20 65 76  /* Invoked at ev
c970: 65 72 79 20 63 6f 6d 6d 69 74 2e 20 2a 2f 0a 20  ery commit. */. 
c980: 20 76 6f 69 64 20 2a 70 55 70 64 61 74 65 41 72   void *pUpdateAr
c990: 67 3b 0a 20 20 76 6f 69 64 20 28 2a 78 55 70 64  g;.  void (*xUpd
c9a0: 61 74 65 43 61 6c 6c 62 61 63 6b 29 28 76 6f 69  ateCallback)(voi
c9b0: 64 2a 2c 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68  d*,int, const ch
c9c0: 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c  ar*,const char*,
c9d0: 73 71 6c 69 74 65 5f 69 6e 74 36 34 29 3b 0a 23  sqlite_int64);.#
c9e0: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  ifdef SQLITE_ENA
c9f0: 42 4c 45 5f 50 52 45 55 50 44 41 54 45 5f 48 4f  BLE_PREUPDATE_HO
ca00: 4f 4b 0a 20 20 76 6f 69 64 20 2a 70 50 72 65 55  OK.  void *pPreU
ca10: 70 64 61 74 65 41 72 67 3b 20 20 20 20 20 20 20  pdateArg;       
ca20: 20 20 20 2f 2a 20 46 69 72 73 74 20 61 72 67 75     /* First argu
ca30: 6d 65 6e 74 20 74 6f 20 78 50 72 65 55 70 64 61  ment to xPreUpda
ca40: 74 65 43 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20  teCallback */.  
ca50: 76 6f 69 64 20 28 2a 78 50 72 65 55 70 64 61 74  void (*xPreUpdat
ca60: 65 43 61 6c 6c 62 61 63 6b 29 28 20 20 20 2f 2a  eCallback)(   /*
ca70: 20 52 65 67 69 73 74 65 72 65 64 20 75 73 69 6e   Registered usin
ca80: 67 20 73 71 6c 69 74 65 33 5f 70 72 65 75 70 64  g sqlite3_preupd
ca90: 61 74 65 5f 68 6f 6f 6b 28 29 20 2a 2f 0a 20 20  ate_hook() */.  
caa0: 20 20 76 6f 69 64 2a 2c 73 71 6c 69 74 65 33 2a    void*,sqlite3*
cab0: 2c 69 6e 74 2c 63 68 61 72 20 63 6f 6e 73 74 2a  ,int,char const*
cac0: 2c 63 68 61 72 20 63 6f 6e 73 74 2a 2c 73 71 6c  ,char const*,sql
cad0: 69 74 65 33 5f 69 6e 74 36 34 2c 73 71 6c 69 74  ite3_int64,sqlit
cae0: 65 33 5f 69 6e 74 36 34 0a 20 20 29 3b 0a 20 20  e3_int64.  );.  
caf0: 50 72 65 55 70 64 61 74 65 20 2a 70 50 72 65 55  PreUpdate *pPreU
cb00: 70 64 61 74 65 3b 20 20 20 20 20 20 20 20 2f 2a  pdate;        /*
cb10: 20 43 6f 6e 74 65 78 74 20 66 6f 72 20 61 63 74   Context for act
cb20: 69 76 65 20 70 72 65 2d 75 70 64 61 74 65 20 63  ive pre-update c
cb30: 61 6c 6c 62 61 63 6b 20 2a 2f 0a 23 65 6e 64 69  allback */.#endi
cb40: 66 20 2f 2a 20 53 51 4c 49 54 45 5f 45 4e 41 42  f /* SQLITE_ENAB
cb50: 4c 45 5f 50 52 45 55 50 44 41 54 45 5f 48 4f 4f  LE_PREUPDATE_HOO
cb60: 4b 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c  K */.#ifndef SQL
cb70: 49 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a 20 20 69  ITE_OMIT_WAL.  i
cb80: 6e 74 20 28 2a 78 57 61 6c 43 61 6c 6c 62 61 63  nt (*xWalCallbac
cb90: 6b 29 28 76 6f 69 64 20 2a 2c 20 73 71 6c 69 74  k)(void *, sqlit
cba0: 65 33 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  e3 *, const char
cbb0: 20 2a 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64   *, int);.  void
cbc0: 20 2a 70 57 61 6c 41 72 67 3b 0a 23 65 6e 64 69   *pWalArg;.#endi
cbd0: 66 0a 20 20 76 6f 69 64 28 2a 78 43 6f 6c 6c 4e  f.  void(*xCollN
cbe0: 65 65 64 65 64 29 28 76 6f 69 64 2a 2c 73 71 6c  eeded)(void*,sql
cbf0: 69 74 65 33 2a 2c 69 6e 74 20 65 54 65 78 74 52  ite3*,int eTextR
cc00: 65 70 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  ep,const char*);
cc10: 0a 20 20 76 6f 69 64 28 2a 78 43 6f 6c 6c 4e 65  .  void(*xCollNe
cc20: 65 64 65 64 31 36 29 28 76 6f 69 64 2a 2c 73 71  eded16)(void*,sq
cc30: 6c 69 74 65 33 2a 2c 69 6e 74 20 65 54 65 78 74  lite3*,int eText
cc40: 52 65 70 2c 63 6f 6e 73 74 20 76 6f 69 64 2a 29  Rep,const void*)
cc50: 3b 0a 20 20 76 6f 69 64 20 2a 70 43 6f 6c 6c 4e  ;.  void *pCollN
cc60: 65 65 64 65 64 41 72 67 3b 0a 20 20 73 71 6c 69  eededArg;.  sqli
cc70: 74 65 33 5f 76 61 6c 75 65 20 2a 70 45 72 72 3b  te3_value *pErr;
cc80: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 6f 73            /* Mos
cc90: 74 20 72 65 63 65 6e 74 20 65 72 72 6f 72 20 6d  t recent error m
cca0: 65 73 73 61 67 65 20 2a 2f 0a 20 20 75 6e 69 6f  essage */.  unio
ccb0: 6e 20 7b 0a 20 20 20 20 76 6f 6c 61 74 69 6c 65  n {.    volatile
ccc0: 20 69 6e 74 20 69 73 49 6e 74 65 72 72 75 70 74   int isInterrupt
ccd0: 65 64 3b 20 2f 2a 20 54 72 75 65 20 69 66 20 73  ed; /* True if s
cce0: 71 6c 69 74 65 33 5f 69 6e 74 65 72 72 75 70 74  qlite3_interrupt
ccf0: 20 68 61 73 20 62 65 65 6e 20 63 61 6c 6c 65 64   has been called
cd00: 20 2a 2f 0a 20 20 20 20 64 6f 75 62 6c 65 20 6e   */.    double n
cd10: 6f 74 55 73 65 64 31 3b 20 20 20 20 20 20 20 20  otUsed1;        
cd20: 20 20 20 20 2f 2a 20 53 70 61 63 65 72 20 2a 2f      /* Spacer */
cd30: 0a 20 20 7d 20 75 31 3b 0a 20 20 4c 6f 6f 6b 61  .  } u1;.  Looka
cd40: 73 69 64 65 20 6c 6f 6f 6b 61 73 69 64 65 3b 20  side lookaside; 
cd50: 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f 6f 6b           /* Look
cd60: 61 73 69 64 65 20 6d 61 6c 6c 6f 63 20 63 6f 6e  aside malloc con
cd70: 66 69 67 75 72 61 74 69 6f 6e 20 2a 2f 0a 23 69  figuration */.#i
cd80: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
cd90: 54 5f 41 55 54 48 4f 52 49 5a 41 54 49 4f 4e 0a  T_AUTHORIZATION.
cda0: 20 20 73 71 6c 69 74 65 33 5f 78 61 75 74 68 20    sqlite3_xauth 
cdb0: 78 41 75 74 68 3b 20 20 20 20 20 20 20 20 20 20  xAuth;          
cdc0: 2f 2a 20 41 63 63 65 73 73 20 61 75 74 68 6f 72  /* Access author
cdd0: 69 7a 61 74 69 6f 6e 20 66 75 6e 63 74 69 6f 6e  ization function
cde0: 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 41 75 74   */.  void *pAut
cdf0: 68 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20  hArg;           
ce00: 20 20 20 20 2f 2a 20 31 73 74 20 61 72 67 75 6d      /* 1st argum
ce10: 65 6e 74 20 74 6f 20 74 68 65 20 61 63 63 65 73  ent to the acces
ce20: 73 20 61 75 74 68 20 66 75 6e 63 74 69 6f 6e 20  s auth function 
ce30: 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65  */.#endif.#ifnde
ce40: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52  f SQLITE_OMIT_PR
ce50: 4f 47 52 45 53 53 5f 43 41 4c 4c 42 41 43 4b 0a  OGRESS_CALLBACK.
ce60: 20 20 69 6e 74 20 28 2a 78 50 72 6f 67 72 65 73    int (*xProgres
ce70: 73 29 28 76 6f 69 64 20 2a 29 3b 20 20 20 20 20  s)(void *);     
ce80: 2f 2a 20 54 68 65 20 70 72 6f 67 72 65 73 73 20  /* The progress 
ce90: 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 76 6f  callback */.  vo
cea0: 69 64 20 2a 70 50 72 6f 67 72 65 73 73 41 72 67  id *pProgressArg
ceb0: 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41  ;           /* A
cec0: 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20 70  rgument to the p
ced0: 72 6f 67 72 65 73 73 20 63 61 6c 6c 62 61 63 6b  rogress callback
cee0: 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 6e   */.  unsigned n
cef0: 50 72 6f 67 72 65 73 73 4f 70 73 3b 20 20 20 20  ProgressOps;    
cf00: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
cf10: 20 6f 70 63 6f 64 65 73 20 66 6f 72 20 70 72 6f   opcodes for pro
cf20: 67 72 65 73 73 20 63 61 6c 6c 62 61 63 6b 20 2a  gress callback *
cf30: 2f 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66  /.#endif.#ifndef
cf40: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
cf50: 54 55 41 4c 54 41 42 4c 45 0a 20 20 69 6e 74 20  TUALTABLE.  int 
cf60: 6e 56 54 72 61 6e 73 3b 20 20 20 20 20 20 20 20  nVTrans;        
cf70: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c            /* All
cf80: 6f 63 61 74 65 64 20 73 69 7a 65 20 6f 66 20 61  ocated size of a
cf90: 56 54 72 61 6e 73 20 2a 2f 0a 20 20 48 61 73 68  VTrans */.  Hash
cfa0: 20 61 4d 6f 64 75 6c 65 3b 20 20 20 20 20 20 20   aModule;       
cfb0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 70 6f 70            /* pop
cfc0: 75 6c 61 74 65 64 20 62 79 20 73 71 6c 69 74 65  ulated by sqlite
cfd0: 33 5f 63 72 65 61 74 65 5f 6d 6f 64 75 6c 65 28  3_create_module(
cfe0: 29 20 2a 2f 0a 20 20 56 74 61 62 43 74 78 20 2a  ) */.  VtabCtx *
cff0: 70 56 74 61 62 43 74 78 3b 20 20 20 20 20 20 20  pVtabCtx;       
d000: 20 20 20 20 20 2f 2a 20 43 6f 6e 74 65 78 74 20       /* Context 
d010: 66 6f 72 20 61 63 74 69 76 65 20 76 74 61 62 20  for active vtab 
d020: 63 6f 6e 6e 65 63 74 2f 63 72 65 61 74 65 20 2a  connect/create *
d030: 2f 0a 20 20 56 54 61 62 6c 65 20 2a 2a 61 56 54  /.  VTable **aVT
d040: 72 61 6e 73 3b 20 20 20 20 20 20 20 20 20 20 20  rans;           
d050: 20 20 2f 2a 20 56 69 72 74 75 61 6c 20 74 61 62    /* Virtual tab
d060: 6c 65 73 20 77 69 74 68 20 6f 70 65 6e 20 74 72  les with open tr
d070: 61 6e 73 61 63 74 69 6f 6e 73 20 2a 2f 0a 20 20  ansactions */.  
d080: 56 54 61 62 6c 65 20 2a 70 44 69 73 63 6f 6e 6e  VTable *pDisconn
d090: 65 63 74 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  ect;          /*
d0a0: 20 44 69 73 63 6f 6e 6e 65 63 74 20 74 68 65 73   Disconnect thes
d0b0: 65 20 69 6e 20 6e 65 78 74 20 73 71 6c 69 74 65  e in next sqlite
d0c0: 33 5f 70 72 65 70 61 72 65 28 29 20 2a 2f 0a 23  3_prepare() */.#
d0d0: 65 6e 64 69 66 0a 20 20 48 61 73 68 20 61 46 75  endif.  Hash aFu
d0e0: 6e 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  nc;             
d0f0: 20 20 20 20 20 20 2f 2a 20 48 61 73 68 20 74 61        /* Hash ta
d100: 62 6c 65 20 6f 66 20 63 6f 6e 6e 65 63 74 69 6f  ble of connectio
d110: 6e 20 66 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a 20  n functions */. 
d120: 20 48 61 73 68 20 61 43 6f 6c 6c 53 65 71 3b 20   Hash aCollSeq; 
d130: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
d140: 2a 20 41 6c 6c 20 63 6f 6c 6c 61 74 69 6e 67 20  * All collating 
d150: 73 65 71 75 65 6e 63 65 73 20 2a 2f 0a 20 20 42  sequences */.  B
d160: 75 73 79 48 61 6e 64 6c 65 72 20 62 75 73 79 48  usyHandler busyH
d170: 61 6e 64 6c 65 72 3b 20 20 20 20 20 20 2f 2a 20  andler;      /* 
d180: 42 75 73 79 20 63 61 6c 6c 62 61 63 6b 20 2a 2f  Busy callback */
d190: 0a 20 20 44 62 20 61 44 62 53 74 61 74 69 63 5b  .  Db aDbStatic[
d1a0: 32 5d 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  2];             
d1b0: 20 2f 2a 20 53 74 61 74 69 63 20 73 70 61 63 65   /* Static space
d1c0: 20 66 6f 72 20 74 68 65 20 32 20 64 65 66 61 75   for the 2 defau
d1d0: 6c 74 20 62 61 63 6b 65 6e 64 73 20 2a 2f 0a 20  lt backends */. 
d1e0: 20 53 61 76 65 70 6f 69 6e 74 20 2a 70 53 61 76   Savepoint *pSav
d1f0: 65 70 6f 69 6e 74 3b 20 20 20 20 20 20 20 20 2f  epoint;        /
d200: 2a 20 4c 69 73 74 20 6f 66 20 61 63 74 69 76 65  * List of active
d210: 20 73 61 76 65 70 6f 69 6e 74 73 20 2a 2f 0a 20   savepoints */. 
d220: 20 69 6e 74 20 62 75 73 79 54 69 6d 65 6f 75 74   int busyTimeout
d230: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
d240: 2a 20 42 75 73 79 20 68 61 6e 64 6c 65 72 20 74  * Busy handler t
d250: 69 6d 65 6f 75 74 2c 20 69 6e 20 6d 73 65 63 20  imeout, in msec 
d260: 2a 2f 0a 20 20 69 6e 74 20 6e 53 61 76 65 70 6f  */.  int nSavepo
d270: 69 6e 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  int;            
d280: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
d290: 6e 6f 6e 2d 74 72 61 6e 73 61 63 74 69 6f 6e 20  non-transaction 
d2a0: 73 61 76 65 70 6f 69 6e 74 73 20 2a 2f 0a 20 20  savepoints */.  
d2b0: 69 6e 74 20 6e 53 74 61 74 65 6d 65 6e 74 3b 20  int nStatement; 
d2c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
d2d0: 20 4e 75 6d 62 65 72 20 6f 66 20 6e 65 73 74 65   Number of neste
d2e0: 64 20 73 74 61 74 65 6d 65 6e 74 2d 74 72 61 6e  d statement-tran
d2f0: 73 61 63 74 69 6f 6e 73 20 20 2a 2f 0a 20 20 69  sactions  */.  i
d300: 36 34 20 6e 44 65 66 65 72 72 65 64 43 6f 6e 73  64 nDeferredCons
d310: 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
d320: 4e 65 74 20 64 65 66 65 72 72 65 64 20 63 6f 6e  Net deferred con
d330: 73 74 72 61 69 6e 74 73 20 74 68 69 73 20 74 72  straints this tr
d340: 61 6e 73 61 63 74 69 6f 6e 2e 20 2a 2f 0a 20 20  ansaction. */.  
d350: 69 36 34 20 6e 44 65 66 65 72 72 65 64 49 6d 6d  i64 nDeferredImm
d360: 43 6f 6e 73 3b 20 20 20 20 20 20 20 20 20 2f 2a  Cons;         /*
d370: 20 4e 65 74 20 64 65 66 65 72 72 65 64 20 69 6d   Net deferred im
d380: 6d 65 64 69 61 74 65 20 63 6f 6e 73 74 72 61 69  mediate constrai
d390: 6e 74 73 20 2a 2f 0a 20 20 69 6e 74 20 2a 70 6e  nts */.  int *pn
d3a0: 42 79 74 65 73 46 72 65 65 64 3b 20 20 20 20 20  BytesFreed;     
d3b0: 20 20 20 20 20 20 20 2f 2a 20 49 66 20 6e 6f 74         /* If not
d3c0: 20 4e 55 4c 4c 2c 20 69 6e 63 72 65 6d 65 6e 74   NULL, increment
d3d0: 20 74 68 69 73 20 69 6e 20 44 62 46 72 65 65 28   this in DbFree(
d3e0: 29 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49  ) */.#ifdef SQLI
d3f0: 54 45 5f 45 4e 41 42 4c 45 5f 55 4e 4c 4f 43 4b  TE_ENABLE_UNLOCK
d400: 5f 4e 4f 54 49 46 59 0a 20 20 2f 2a 20 54 68 65  _NOTIFY.  /* The
d410: 20 66 6f 6c 6c 6f 77 69 6e 67 20 76 61 72 69 61   following varia
d420: 62 6c 65 73 20 61 72 65 20 61 6c 6c 20 70 72 6f  bles are all pro
d430: 74 65 63 74 65 64 20 62 79 20 74 68 65 20 53 54  tected by the ST
d440: 41 54 49 43 5f 4d 41 53 54 45 52 0a 20 20 2a 2a  ATIC_MASTER.  **
d450: 20 6d 75 74 65 78 2c 20 6e 6f 74 20 62 79 20 73   mutex, not by s
d460: 71 6c 69 74 65 33 2e 6d 75 74 65 78 2e 20 54 68  qlite3.mutex. Th
d470: 65 79 20 61 72 65 20 75 73 65 64 20 62 79 20 63  ey are used by c
d480: 6f 64 65 20 69 6e 20 6e 6f 74 69 66 79 2e 63 2e  ode in notify.c.
d490: 0a 20 20 2a 2a 0a 20 20 2a 2a 20 57 68 65 6e 20  .  **.  ** When 
d4a0: 58 2e 70 55 6e 6c 6f 63 6b 43 6f 6e 6e 65 63 74  X.pUnlockConnect
d4b0: 69 6f 6e 3d 3d 59 2c 20 74 68 61 74 20 6d 65 61  ion==Y, that mea
d4c0: 6e 73 20 74 68 61 74 20 58 20 69 73 20 77 61 69  ns that X is wai
d4d0: 74 69 6e 67 20 66 6f 72 20 59 20 74 6f 0a 20 20  ting for Y to.  
d4e0: 2a 2a 20 75 6e 6c 6f 63 6b 20 73 6f 20 74 68 61  ** unlock so tha
d4f0: 74 20 69 74 20 63 61 6e 20 70 72 6f 63 65 65 64  t it can proceed
d500: 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 57 68 65 6e  ..  **.  ** When
d510: 20 58 2e 70 42 6c 6f 63 6b 69 6e 67 43 6f 6e 6e   X.pBlockingConn
d520: 65 63 74 69 6f 6e 3d 3d 59 2c 20 74 68 61 74 20  ection==Y, that 
d530: 6d 65 61 6e 73 20 74 68 61 74 20 73 6f 6d 65 74  means that somet
d540: 68 69 6e 67 20 74 68 61 74 20 58 20 74 72 69 65  hing that X trie
d550: 64 0a 20 20 2a 2a 20 74 72 69 65 64 20 74 6f 20  d.  ** tried to 
d560: 64 6f 20 72 65 63 65 6e 74 6c 79 20 66 61 69 6c  do recently fail
d570: 65 64 20 77 69 74 68 20 61 6e 20 53 51 4c 49 54  ed with an SQLIT
d580: 45 5f 4c 4f 43 4b 45 44 20 65 72 72 6f 72 20 64  E_LOCKED error d
d590: 75 65 20 74 6f 20 6c 6f 63 6b 73 0a 20 20 2a 2a  ue to locks.  **
d5a0: 20 68 65 6c 64 20 62 79 20 59 2e 0a 20 20 2a 2f   held by Y..  */
d5b0: 0a 20 20 73 71 6c 69 74 65 33 20 2a 70 42 6c 6f  .  sqlite3 *pBlo
d5c0: 63 6b 69 6e 67 43 6f 6e 6e 65 63 74 69 6f 6e 3b  ckingConnection;
d5d0: 20 2f 2a 20 43 6f 6e 6e 65 63 74 69 6f 6e 20 74   /* Connection t
d5e0: 68 61 74 20 63 61 75 73 65 64 20 53 51 4c 49 54  hat caused SQLIT
d5f0: 45 5f 4c 4f 43 4b 45 44 20 2a 2f 0a 20 20 73 71  E_LOCKED */.  sq
d600: 6c 69 74 65 33 20 2a 70 55 6e 6c 6f 63 6b 43 6f  lite3 *pUnlockCo
d610: 6e 6e 65 63 74 69 6f 6e 3b 20 20 20 20 20 20 20  nnection;       
d620: 20 20 20 20 2f 2a 20 43 6f 6e 6e 65 63 74 69 6f      /* Connectio
d630: 6e 20 74 6f 20 77 61 74 63 68 20 66 6f 72 20 75  n to watch for u
d640: 6e 6c 6f 63 6b 20 2a 2f 0a 20 20 76 6f 69 64 20  nlock */.  void 
d650: 2a 70 55 6e 6c 6f 63 6b 41 72 67 3b 20 20 20 20  *pUnlockArg;    
d660: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d670: 20 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f 20   /* Argument to 
d680: 78 55 6e 6c 6f 63 6b 4e 6f 74 69 66 79 20 2a 2f  xUnlockNotify */
d690: 0a 20 20 76 6f 69 64 20 28 2a 78 55 6e 6c 6f 63  .  void (*xUnloc
d6a0: 6b 4e 6f 74 69 66 79 29 28 76 6f 69 64 20 2a 2a  kNotify)(void **
d6b0: 2c 20 69 6e 74 29 3b 20 20 2f 2a 20 55 6e 6c 6f  , int);  /* Unlo
d6c0: 63 6b 20 6e 6f 74 69 66 79 20 63 61 6c 6c 62 61  ck notify callba
d6d0: 63 6b 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 20  ck */.  sqlite3 
d6e0: 2a 70 4e 65 78 74 42 6c 6f 63 6b 65 64 3b 20 20  *pNextBlocked;  
d6f0: 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 69 6e        /* Next in
d700: 20 6c 69 73 74 20 6f 66 20 61 6c 6c 20 62 6c 6f   list of all blo
d710: 63 6b 65 64 20 63 6f 6e 6e 65 63 74 69 6f 6e 73  cked connections
d720: 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66 64 65   */.#endif.#ifde
d730: 66 20 53 51 4c 49 54 45 5f 55 53 45 52 5f 41 55  f SQLITE_USER_AU
d740: 54 48 45 4e 54 49 43 41 54 49 4f 4e 0a 20 20 73  THENTICATION.  s
d750: 71 6c 69 74 65 33 5f 75 73 65 72 61 75 74 68 20  qlite3_userauth 
d760: 61 75 74 68 3b 20 20 20 20 20 20 20 20 2f 2a 20  auth;        /* 
d770: 55 73 65 72 20 61 75 74 68 65 6e 74 69 63 61 74  User authenticat
d780: 69 6f 6e 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  ion information 
d790: 2a 2f 0a 23 65 6e 64 69 66 0a 7d 3b 0a 0a 2f 2a  */.#endif.};../*
d7a0: 0a 2a 2a 20 41 20 6d 61 63 72 6f 20 74 6f 20 64  .** A macro to d
d7b0: 69 73 63 6f 76 65 72 20 74 68 65 20 65 6e 63 6f  iscover the enco
d7c0: 64 69 6e 67 20 6f 66 20 61 20 64 61 74 61 62 61  ding of a databa
d7d0: 73 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53  se..*/.#define S
d7e0: 43 48 45 4d 41 5f 45 4e 43 28 64 62 29 20 28 28  CHEMA_ENC(db) ((
d7f0: 64 62 29 2d 3e 61 44 62 5b 30 5d 2e 70 53 63 68  db)->aDb[0].pSch
d800: 65 6d 61 2d 3e 65 6e 63 29 0a 23 64 65 66 69 6e  ema->enc).#defin
d810: 65 20 45 4e 43 28 64 62 29 20 20 20 20 20 20 20  e ENC(db)       
d820: 20 28 28 64 62 29 2d 3e 65 6e 63 29 0a 0a 2f 2a   ((db)->enc)../*
d830: 0a 2a 2a 20 50 6f 73 73 69 62 6c 65 20 76 61 6c  .** Possible val
d840: 75 65 73 20 66 6f 72 20 74 68 65 20 73 71 6c 69  ues for the sqli
d850: 74 65 33 2e 66 6c 61 67 73 2e 0a 2a 2a 0a 2a 2a  te3.flags..**.**
d860: 20 56 61 6c 75 65 20 63 6f 6e 73 74 72 61 69 6e   Value constrain
d870: 74 73 20 28 65 6e 66 6f 72 63 65 64 20 76 69 61  ts (enforced via
d880: 20 61 73 73 65 72 74 28 29 29 3a 0a 2a 2a 20 20   assert()):.**  
d890: 20 20 20 20 53 51 4c 49 54 45 5f 46 75 6c 6c 46      SQLITE_FullF
d8a0: 53 79 6e 63 20 20 20 20 20 3d 3d 20 50 41 47 45  Sync     == PAGE
d8b0: 52 5f 46 55 4c 4c 46 53 59 4e 43 0a 2a 2a 20 20  R_FULLFSYNC.**  
d8c0: 20 20 20 20 53 51 4c 49 54 45 5f 43 6b 70 74 46      SQLITE_CkptF
d8d0: 75 6c 6c 46 53 79 6e 63 20 3d 3d 20 50 41 47 45  ullFSync == PAGE
d8e0: 52 5f 43 4b 50 54 5f 46 55 4c 4c 46 53 59 4e 43  R_CKPT_FULLFSYNC
d8f0: 0a 2a 2a 20 20 20 20 20 20 53 51 4c 49 54 45 5f  .**      SQLITE_
d900: 43 61 63 68 65 53 70 69 6c 6c 20 20 20 20 3d 3d  CacheSpill    ==
d910: 20 50 41 47 45 52 5f 43 41 43 48 45 5f 53 50 49   PAGER_CACHE_SPI
d920: 4c 4c 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  LL.*/.#define SQ
d930: 4c 49 54 45 5f 57 72 69 74 65 53 63 68 65 6d 61  LITE_WriteSchema
d940: 20 20 20 20 30 78 30 30 30 30 30 30 30 31 20 20      0x00000001  
d950: 2f 2a 20 4f 4b 20 74 6f 20 75 70 64 61 74 65 20  /* OK to update 
d960: 53 51 4c 49 54 45 5f 4d 41 53 54 45 52 20 2a 2f  SQLITE_MASTER */
d970: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
d980: 4c 65 67 61 63 79 46 69 6c 65 46 6d 74 20 20 30  LegacyFileFmt  0
d990: 78 30 30 30 30 30 30 30 32 20 20 2f 2a 20 43 72  x00000002  /* Cr
d9a0: 65 61 74 65 20 6e 65 77 20 64 61 74 61 62 61 73  eate new databas
d9b0: 65 73 20 69 6e 20 66 6f 72 6d 61 74 20 31 20 2a  es in format 1 *
d9c0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
d9d0: 5f 46 75 6c 6c 43 6f 6c 4e 61 6d 65 73 20 20 20  _FullColNames   
d9e0: 30 78 30 30 30 30 30 30 30 34 20 20 2f 2a 20 53  0x00000004  /* S
d9f0: 68 6f 77 20 66 75 6c 6c 20 63 6f 6c 75 6d 6e 20  how full column 
da00: 6e 61 6d 65 73 20 6f 6e 20 53 45 4c 45 43 54 20  names on SELECT 
da10: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
da20: 45 5f 46 75 6c 6c 46 53 79 6e 63 20 20 20 20 20  E_FullFSync     
da30: 20 30 78 30 30 30 30 30 30 30 38 20 20 2f 2a 20   0x00000008  /* 
da40: 55 73 65 20 66 75 6c 6c 20 66 73 79 6e 63 20 6f  Use full fsync o
da50: 6e 20 74 68 65 20 62 61 63 6b 65 6e 64 20 2a 2f  n the backend */
da60: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
da70: 43 6b 70 74 46 75 6c 6c 46 53 79 6e 63 20 20 30  CkptFullFSync  0
da80: 78 30 30 30 30 30 30 31 30 20 20 2f 2a 20 55 73  x00000010  /* Us
da90: 65 20 66 75 6c 6c 20 66 73 79 6e 63 20 66 6f 72  e full fsync for
daa0: 20 63 68 65 63 6b 70 6f 69 6e 74 20 2a 2f 0a 23   checkpoint */.#
dab0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 61  define SQLITE_Ca
dac0: 63 68 65 53 70 69 6c 6c 20 20 20 20 20 30 78 30  cheSpill     0x0
dad0: 30 30 30 30 30 32 30 20 20 2f 2a 20 4f 4b 20 74  0000020  /* OK t
dae0: 6f 20 73 70 69 6c 6c 20 70 61 67 65 72 20 63 61  o spill pager ca
daf0: 63 68 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  che */.#define S
db00: 51 4c 49 54 45 5f 53 68 6f 72 74 43 6f 6c 4e 61  QLITE_ShortColNa
db10: 6d 65 73 20 20 30 78 30 30 30 30 30 30 34 30 20  mes  0x00000040 
db20: 20 2f 2a 20 53 68 6f 77 20 73 68 6f 72 74 20 63   /* Show short c
db30: 6f 6c 75 6d 6e 73 20 6e 61 6d 65 73 20 2a 2f 0a  olumns names */.
db40: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43  #define SQLITE_C
db50: 6f 75 6e 74 52 6f 77 73 20 20 20 20 20 20 30 78  ountRows      0x
db60: 30 30 30 30 30 30 38 30 20 20 2f 2a 20 43 6f 75  00000080  /* Cou
db70: 6e 74 20 72 6f 77 73 20 63 68 61 6e 67 65 64 20  nt rows changed 
db80: 62 79 20 49 4e 53 45 52 54 2c 20 2a 2f 0a 20 20  by INSERT, */.  
db90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dba0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dbb0: 20 20 20 20 20 20 20 20 2f 2a 20 20 20 44 45 4c          /*   DEL
dbc0: 45 54 45 2c 20 6f 72 20 55 50 44 41 54 45 20 61  ETE, or UPDATE a
dbd0: 6e 64 20 72 65 74 75 72 6e 20 2a 2f 0a 20 20 20  nd return */.   
dbe0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dbf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dc00: 20 20 20 20 20 20 20 2f 2a 20 20 20 74 68 65 20         /*   the 
dc10: 63 6f 75 6e 74 20 75 73 69 6e 67 20 61 20 63 61  count using a ca
dc20: 6c 6c 62 61 63 6b 2e 20 2a 2f 0a 23 64 65 66 69  llback. */.#defi
dc30: 6e 65 20 53 51 4c 49 54 45 5f 4e 75 6c 6c 43 61  ne SQLITE_NullCa
dc40: 6c 6c 62 61 63 6b 20 20 20 30 78 30 30 30 30 30  llback   0x00000
dc50: 31 30 30 20 20 2f 2a 20 49 6e 76 6f 6b 65 20 74  100  /* Invoke t
dc60: 68 65 20 63 61 6c 6c 62 61 63 6b 20 6f 6e 63 65  he callback once
dc70: 20 69 66 20 74 68 65 20 2a 2f 0a 20 20 20 20 20   if the */.     
dc80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dc90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dca0: 20 20 20 20 20 2f 2a 20 20 20 72 65 73 75 6c 74       /*   result
dcb0: 20 73 65 74 20 69 73 20 65 6d 70 74 79 20 2a 2f   set is empty */
dcc0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
dcd0: 49 67 6e 6f 72 65 43 68 65 63 6b 73 20 20 20 30  IgnoreChecks   0
dce0: 78 30 30 30 30 30 32 30 30 20 20 2f 2a 20 44 6f  x00000200  /* Do
dcf0: 20 6e 6f 74 20 65 6e 66 6f 72 63 65 20 63 68 65   not enforce che
dd00: 63 6b 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a  ck constraints *
dd10: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
dd20: 5f 52 65 61 64 55 6e 63 6f 6d 6d 69 74 20 20 20  _ReadUncommit   
dd30: 30 78 30 30 30 30 30 34 30 30 20 20 2f 2a 20 52  0x00000400  /* R
dd40: 45 41 44 20 55 4e 43 4f 4d 4d 49 54 54 45 44 20  EAD UNCOMMITTED 
dd50: 69 6e 20 73 68 61 72 65 64 2d 63 61 63 68 65 20  in shared-cache 
dd60: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
dd70: 45 5f 4e 6f 43 6b 70 74 4f 6e 43 6c 6f 73 65 20  E_NoCkptOnClose 
dd80: 20 30 78 30 30 30 30 30 38 30 30 20 20 2f 2a 20   0x00000800  /* 
dd90: 4e 6f 20 63 68 65 63 6b 70 6f 69 6e 74 20 6f 6e  No checkpoint on
dda0: 20 63 6c 6f 73 65 28 29 2f 44 45 54 41 43 48 20   close()/DETACH 
ddb0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
ddc0: 45 5f 52 65 76 65 72 73 65 4f 72 64 65 72 20 20  E_ReverseOrder  
ddd0: 20 30 78 30 30 30 30 31 30 30 30 20 20 2f 2a 20   0x00001000  /* 
dde0: 52 65 76 65 72 73 65 20 75 6e 6f 72 64 65 72 65  Reverse unordere
ddf0: 64 20 53 45 4c 45 43 54 73 20 2a 2f 0a 23 64 65  d SELECTs */.#de
de00: 66 69 6e 65 20 53 51 4c 49 54 45 5f 52 65 63 54  fine SQLITE_RecT
de10: 72 69 67 67 65 72 73 20 20 20 20 30 78 30 30 30  riggers    0x000
de20: 30 32 30 30 30 20 20 2f 2a 20 45 6e 61 62 6c 65  02000  /* Enable
de30: 20 72 65 63 75 72 73 69 76 65 20 74 72 69 67 67   recursive trigg
de40: 65 72 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ers */.#define S
de50: 51 4c 49 54 45 5f 46 6f 72 65 69 67 6e 4b 65 79  QLITE_ForeignKey
de60: 73 20 20 20 20 30 78 30 30 30 30 34 30 30 30 20  s    0x00004000 
de70: 20 2f 2a 20 45 6e 66 6f 72 63 65 20 66 6f 72 65   /* Enforce fore
de80: 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69  ign key constrai
de90: 6e 74 73 20 20 2a 2f 0a 23 64 65 66 69 6e 65 20  nts  */.#define 
dea0: 53 51 4c 49 54 45 5f 41 75 74 6f 49 6e 64 65 78  SQLITE_AutoIndex
deb0: 20 20 20 20 20 20 30 78 30 30 30 30 38 30 30 30        0x00008000
dec0: 20 20 2f 2a 20 45 6e 61 62 6c 65 20 61 75 74 6f    /* Enable auto
ded0: 6d 61 74 69 63 20 69 6e 64 65 78 65 73 20 2a 2f  matic indexes */
dee0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
def0: 4c 6f 61 64 45 78 74 65 6e 73 69 6f 6e 20 20 30  LoadExtension  0
df00: 78 30 30 30 31 30 30 30 30 20 20 2f 2a 20 45 6e  x00010000  /* En
df10: 61 62 6c 65 20 6c 6f 61 64 5f 65 78 74 65 6e 73  able load_extens
df20: 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ion */.#define S
df30: 51 4c 49 54 45 5f 4c 6f 61 64 45 78 74 46 75 6e  QLITE_LoadExtFun
df40: 63 20 20 20 20 30 78 30 30 30 32 30 30 30 30 20  c    0x00020000 
df50: 20 2f 2a 20 45 6e 61 62 6c 65 20 6c 6f 61 64 5f   /* Enable load_
df60: 65 78 74 65 6e 73 69 6f 6e 28 29 20 53 51 4c 20  extension() SQL 
df70: 66 75 6e 63 20 2a 2f 0a 23 64 65 66 69 6e 65 20  func */.#define 
df80: 53 51 4c 49 54 45 5f 45 6e 61 62 6c 65 54 72 69  SQLITE_EnableTri
df90: 67 67 65 72 20 20 30 78 30 30 30 34 30 30 30 30  gger  0x00040000
dfa0: 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 65 6e 61    /* True to ena
dfb0: 62 6c 65 20 74 72 69 67 67 65 72 73 20 2a 2f 0a  ble triggers */.
dfc0: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44  #define SQLITE_D
dfd0: 65 66 65 72 46 4b 73 20 20 20 20 20 20 20 30 78  eferFKs       0x
dfe0: 30 30 30 38 30 30 30 30 20 20 2f 2a 20 44 65 66  00080000  /* Def
dff0: 65 72 20 61 6c 6c 20 46 4b 20 63 6f 6e 73 74 72  er all FK constr
e000: 61 69 6e 74 73 20 2a 2f 0a 23 64 65 66 69 6e 65  aints */.#define
e010: 20 53 51 4c 49 54 45 5f 51 75 65 72 79 4f 6e 6c   SQLITE_QueryOnl
e020: 79 20 20 20 20 20 20 30 78 30 30 31 30 30 30 30  y      0x0010000
e030: 30 20 20 2f 2a 20 44 69 73 61 62 6c 65 20 64 61  0  /* Disable da
e040: 74 61 62 61 73 65 20 63 68 61 6e 67 65 73 20 2a  tabase changes *
e050: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
e060: 5f 43 65 6c 6c 53 69 7a 65 43 6b 20 20 20 20 20  _CellSizeCk     
e070: 30 78 30 30 32 30 30 30 30 30 20 20 2f 2a 20 43  0x00200000  /* C
e080: 68 65 63 6b 20 62 74 72 65 65 20 63 65 6c 6c 20  heck btree cell 
e090: 73 69 7a 65 73 20 6f 6e 20 6c 6f 61 64 20 2a 2f  sizes on load */
e0a0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
e0b0: 46 74 73 33 54 6f 6b 65 6e 69 7a 65 72 20 20 30  Fts3Tokenizer  0
e0c0: 78 30 30 34 30 30 30 30 30 20 20 2f 2a 20 45 6e  x00400000  /* En
e0d0: 61 62 6c 65 20 66 74 73 33 5f 74 6f 6b 65 6e 69  able fts3_tokeni
e0e0: 7a 65 72 28 32 29 20 2a 2f 0a 23 64 65 66 69 6e  zer(2) */.#defin
e0f0: 65 20 53 51 4c 49 54 45 5f 45 6e 61 62 6c 65 51  e SQLITE_EnableQ
e100: 50 53 47 20 20 20 20 20 30 78 30 30 38 30 30 30  PSG     0x008000
e110: 30 30 20 20 2f 2a 20 51 75 65 72 79 20 50 6c 61  00  /* Query Pla
e120: 6e 6e 65 72 20 53 74 61 62 69 6c 69 74 79 20 47  nner Stability G
e130: 75 61 72 61 6e 74 65 65 2a 2f 0a 23 64 65 66 69  uarantee*/.#defi
e140: 6e 65 20 53 51 4c 49 54 45 5f 54 72 69 67 67 65  ne SQLITE_Trigge
e150: 72 45 51 50 20 20 20 20 20 30 78 30 31 30 30 30  rEQP     0x01000
e160: 30 30 30 20 20 2f 2a 20 53 68 6f 77 20 74 72 69  000  /* Show tri
e170: 67 67 65 72 20 45 58 50 4c 41 49 4e 20 51 55 45  gger EXPLAIN QUE
e180: 52 59 20 50 4c 41 4e 20 2a 2f 0a 23 64 65 66 69  RY PLAN */.#defi
e190: 6e 65 20 53 51 4c 49 54 45 5f 52 65 73 65 74 44  ne SQLITE_ResetD
e1a0: 61 74 61 62 61 73 65 20 20 30 78 30 32 30 30 30  atabase  0x02000
e1b0: 30 30 30 20 20 2f 2a 20 52 65 73 65 74 20 74 68  000  /* Reset th
e1c0: 65 20 64 61 74 61 62 61 73 65 20 2a 2f 0a 0a 2f  e database */../
e1d0: 2a 20 46 6c 61 67 73 20 75 73 65 64 20 6f 6e 6c  * Flags used onl
e1e0: 79 20 69 66 20 64 65 62 75 67 67 69 6e 67 20 2a  y if debugging *
e1f0: 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
e200: 44 45 42 55 47 0a 23 64 65 66 69 6e 65 20 53 51  DEBUG.#define SQ
e210: 4c 49 54 45 5f 53 71 6c 54 72 61 63 65 20 20 20  LITE_SqlTrace   
e220: 20 20 20 20 30 78 30 38 30 30 30 30 30 30 20 20      0x08000000  
e230: 2f 2a 20 44 65 62 75 67 20 70 72 69 6e 74 20 53  /* Debug print S
e240: 51 4c 20 61 73 20 69 74 20 65 78 65 63 75 74 65  QL as it execute
e250: 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  s */.#define SQL
e260: 49 54 45 5f 56 64 62 65 4c 69 73 74 69 6e 67 20  ITE_VdbeListing 
e270: 20 20 20 30 78 31 30 30 30 30 30 30 30 20 20 2f     0x10000000  /
e280: 2a 20 44 65 62 75 67 20 6c 69 73 74 69 6e 67 73  * Debug listings
e290: 20 6f 66 20 56 44 42 45 20 70 72 6f 67 72 61 6d   of VDBE program
e2a0: 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  s */.#define SQL
e2b0: 49 54 45 5f 56 64 62 65 54 72 61 63 65 20 20 20  ITE_VdbeTrace   
e2c0: 20 20 20 30 78 32 30 30 30 30 30 30 30 20 20 2f     0x20000000  /
e2d0: 2a 20 54 72 75 65 20 74 6f 20 74 72 61 63 65 20  * True to trace 
e2e0: 56 44 42 45 20 65 78 65 63 75 74 69 6f 6e 20 2a  VDBE execution *
e2f0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
e300: 5f 56 64 62 65 41 64 64 6f 70 54 72 61 63 65 20  _VdbeAddopTrace 
e310: 30 78 34 30 30 30 30 30 30 30 20 20 2f 2a 20 54  0x40000000  /* T
e320: 72 61 63 65 20 73 71 6c 69 74 65 33 56 64 62 65  race sqlite3Vdbe
e330: 41 64 64 4f 70 28 29 20 63 61 6c 6c 73 20 2a 2f  AddOp() calls */
e340: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
e350: 56 64 62 65 45 51 50 20 20 20 20 20 20 20 20 30  VdbeEQP        0
e360: 78 38 30 30 30 30 30 30 30 20 20 2f 2a 20 44 65  x80000000  /* De
e370: 62 75 67 20 45 58 50 4c 41 49 4e 20 51 55 45 52  bug EXPLAIN QUER
e380: 59 20 50 4c 41 4e 20 2a 2f 0a 23 65 6e 64 69 66  Y PLAN */.#endif
e390: 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20  ../*.** Allowed 
e3a0: 76 61 6c 75 65 73 20 66 6f 72 20 73 71 6c 69 74  values for sqlit
e3b0: 65 33 2e 6d 44 62 46 6c 61 67 73 0a 2a 2f 0a 23  e3.mDbFlags.*/.#
e3c0: 64 65 66 69 6e 65 20 44 42 46 4c 41 47 5f 53 63  define DBFLAG_Sc
e3d0: 68 65 6d 61 43 68 61 6e 67 65 20 20 20 30 78 30  hemaChange   0x0
e3e0: 30 30 31 20 20 2f 2a 20 55 6e 63 6f 6d 6d 69 74  001  /* Uncommit
e3f0: 74 65 64 20 48 61 73 68 20 74 61 62 6c 65 20 63  ted Hash table c
e400: 68 61 6e 67 65 73 20 2a 2f 0a 23 64 65 66 69 6e  hanges */.#defin
e410: 65 20 44 42 46 4c 41 47 5f 50 72 65 66 65 72 42  e DBFLAG_PreferB
e420: 75 69 6c 74 69 6e 20 20 30 78 30 30 30 32 20 20  uiltin  0x0002  
e430: 2f 2a 20 50 72 65 66 65 72 65 6e 63 65 20 74 6f  /* Preference to
e440: 20 62 75 69 6c 74 2d 69 6e 20 66 75 6e 63 73 20   built-in funcs 
e450: 2a 2f 0a 23 64 65 66 69 6e 65 20 44 42 46 4c 41  */.#define DBFLA
e460: 47 5f 56 61 63 75 75 6d 20 20 20 20 20 20 20 20  G_Vacuum        
e470: 20 30 78 30 30 30 34 20 20 2f 2a 20 43 75 72 72   0x0004  /* Curr
e480: 65 6e 74 6c 79 20 69 6e 20 61 20 56 41 43 55 55  ently in a VACUU
e490: 4d 20 2a 2f 0a 23 64 65 66 69 6e 65 20 44 42 46  M */.#define DBF
e4a0: 4c 41 47 5f 53 63 68 65 6d 61 4b 6e 6f 77 6e 4f  LAG_SchemaKnownO
e4b0: 6b 20 20 30 78 30 30 30 38 20 20 2f 2a 20 53 63  k  0x0008  /* Sc
e4c0: 68 65 6d 61 20 69 73 20 6b 6e 6f 77 6e 20 74 6f  hema is known to
e4d0: 20 62 65 20 76 61 6c 69 64 20 2a 2f 0a 0a 2f 2a   be valid */../*
e4e0: 0a 2a 2a 20 42 69 74 73 20 6f 66 20 74 68 65 20  .** Bits of the 
e4f0: 73 71 6c 69 74 65 33 2e 64 62 4f 70 74 46 6c 61  sqlite3.dbOptFla
e500: 67 73 20 66 69 65 6c 64 20 74 68 61 74 20 61 72  gs field that ar
e510: 65 20 75 73 65 64 20 62 79 20 74 68 65 0a 2a 2a  e used by the.**
e520: 20 73 71 6c 69 74 65 33 5f 74 65 73 74 5f 63 6f   sqlite3_test_co
e530: 6e 74 72 6f 6c 28 53 51 4c 49 54 45 5f 54 45 53  ntrol(SQLITE_TES
e540: 54 43 54 52 4c 5f 4f 50 54 49 4d 49 5a 41 54 49  TCTRL_OPTIMIZATI
e550: 4f 4e 53 2c 2e 2e 2e 29 20 69 6e 74 65 72 66 61  ONS,...) interfa
e560: 63 65 20 74 6f 0a 2a 2a 20 73 65 6c 65 63 74 69  ce to.** selecti
e570: 76 65 6c 79 20 64 69 73 61 62 6c 65 20 76 61 72  vely disable var
e580: 69 6f 75 73 20 6f 70 74 69 6d 69 7a 61 74 69 6f  ious optimizatio
e590: 6e 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ns..*/.#define S
e5a0: 51 4c 49 54 45 5f 51 75 65 72 79 46 6c 61 74 74  QLITE_QueryFlatt
e5b0: 65 6e 65 72 20 30 78 30 30 30 31 20 20 20 2f 2a  ener 0x0001   /*
e5c0: 20 51 75 65 72 79 20 66 6c 61 74 74 65 6e 69 6e   Query flattenin
e5d0: 67 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20  g */.           
e5e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
e5f0: 2a 20 20 30 78 30 30 30 32 20 20 20 61 76 61 69  *  0x0002   avai
e600: 6c 61 62 6c 65 20 66 6f 72 20 72 65 75 73 65 20  lable for reuse 
e610: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
e620: 45 5f 47 72 6f 75 70 42 79 4f 72 64 65 72 20 20  E_GroupByOrder  
e630: 20 30 78 30 30 30 34 20 20 20 2f 2a 20 47 52 4f   0x0004   /* GRO
e640: 55 50 42 59 20 63 6f 76 65 72 20 6f 66 20 4f 52  UPBY cover of OR
e650: 44 45 52 42 59 20 2a 2f 0a 23 64 65 66 69 6e 65  DERBY */.#define
e660: 20 53 51 4c 49 54 45 5f 46 61 63 74 6f 72 4f 75   SQLITE_FactorOu
e670: 74 43 6f 6e 73 74 20 30 78 30 30 30 38 20 20 20  tConst 0x0008   
e680: 2f 2a 20 43 6f 6e 73 74 61 6e 74 20 66 61 63 74  /* Constant fact
e690: 6f 72 69 6e 67 20 2a 2f 0a 23 64 65 66 69 6e 65  oring */.#define
e6a0: 20 53 51 4c 49 54 45 5f 44 69 73 74 69 6e 63 74   SQLITE_Distinct
e6b0: 4f 70 74 20 20 20 20 30 78 30 30 31 30 20 20 20  Opt    0x0010   
e6c0: 2f 2a 20 44 49 53 54 49 4e 43 54 20 75 73 69 6e  /* DISTINCT usin
e6d0: 67 20 69 6e 64 65 78 65 73 20 2a 2f 0a 23 64 65  g indexes */.#de
e6e0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 6f 76 65  fine SQLITE_Cove
e6f0: 72 49 64 78 53 63 61 6e 20 20 20 30 78 30 30 32  rIdxScan   0x002
e700: 30 20 20 20 2f 2a 20 43 6f 76 65 72 69 6e 67 20  0   /* Covering 
e710: 69 6e 64 65 78 20 73 63 61 6e 73 20 2a 2f 0a 23  index scans */.#
e720: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4f 72  define SQLITE_Or
e730: 64 65 72 42 79 49 64 78 4a 6f 69 6e 20 30 78 30  derByIdxJoin 0x0
e740: 30 34 30 20 20 20 2f 2a 20 4f 52 44 45 52 20 42  040   /* ORDER B
e750: 59 20 6f 66 20 6a 6f 69 6e 73 20 76 69 61 20 69  Y of joins via i
e760: 6e 64 65 78 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ndex */.#define 
e770: 53 51 4c 49 54 45 5f 54 72 61 6e 73 69 74 69 76  SQLITE_Transitiv
e780: 65 20 20 20 20 20 30 78 30 30 38 30 20 20 20 2f  e     0x0080   /
e790: 2a 20 54 72 61 6e 73 69 74 69 76 65 20 63 6f 6e  * Transitive con
e7a0: 73 74 72 61 69 6e 74 73 20 2a 2f 0a 23 64 65 66  straints */.#def
e7b0: 69 6e 65 20 53 51 4c 49 54 45 5f 4f 6d 69 74 4e  ine SQLITE_OmitN
e7c0: 6f 6f 70 4a 6f 69 6e 20 20 20 30 78 30 31 30 30  oopJoin   0x0100
e7d0: 20 20 20 2f 2a 20 4f 6d 69 74 20 75 6e 75 73 65     /* Omit unuse
e7e0: 64 20 74 61 62 6c 65 73 20 69 6e 20 6a 6f 69 6e  d tables in join
e7f0: 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  s */.#define SQL
e800: 49 54 45 5f 43 6f 75 6e 74 4f 66 56 69 65 77 20  ITE_CountOfView 
e810: 20 20 20 30 78 30 32 30 30 20 20 20 2f 2a 20 54     0x0200   /* T
e820: 68 65 20 63 6f 75 6e 74 2d 6f 66 2d 76 69 65 77  he count-of-view
e830: 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 20 2a 2f   optimization */
e840: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
e850: 43 75 72 73 6f 72 48 69 6e 74 73 20 20 20 20 30  CursorHints    0
e860: 78 30 34 30 30 20 20 20 2f 2a 20 41 64 64 20 4f  x0400   /* Add O
e870: 50 5f 43 75 72 73 6f 72 48 69 6e 74 20 6f 70 63  P_CursorHint opc
e880: 6f 64 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  odes */.#define 
e890: 53 51 4c 49 54 45 5f 53 74 61 74 33 34 20 20 20  SQLITE_Stat34   
e8a0: 20 20 20 20 20 20 30 78 30 38 30 30 20 20 20 2f        0x0800   /
e8b0: 2a 20 55 73 65 20 53 54 41 54 33 20 6f 72 20 53  * Use STAT3 or S
e8c0: 54 41 54 34 20 64 61 74 61 20 2a 2f 0a 20 20 20  TAT4 data */.   
e8d0: 2f 2a 20 54 48 33 20 65 78 70 65 63 74 73 20 74  /* TH3 expects t
e8e0: 68 65 20 53 74 61 74 33 34 20 20 5e 5e 5e 5e 5e  he Stat34  ^^^^^
e8f0: 5e 20 76 61 6c 75 65 20 74 6f 20 62 65 20 30 78  ^ value to be 0x
e900: 30 38 30 30 2e 20 20 44 6f 6e 27 74 20 63 68 61  0800.  Don't cha
e910: 6e 67 65 20 69 74 20 2a 2f 0a 23 64 65 66 69 6e  nge it */.#defin
e920: 65 20 53 51 4c 49 54 45 5f 50 75 73 68 44 6f 77  e SQLITE_PushDow
e930: 6e 20 20 20 20 20 20 20 30 78 31 30 30 30 20 20  n       0x1000  
e940: 20 2f 2a 20 54 68 65 20 70 75 73 68 2d 64 6f 77   /* The push-dow
e950: 6e 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 20 2a  n optimization *
e960: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
e970: 5f 53 69 6d 70 6c 69 66 79 4a 6f 69 6e 20 20 20  _SimplifyJoin   
e980: 30 78 32 30 30 30 20 20 20 2f 2a 20 43 6f 6e 76  0x2000   /* Conv
e990: 65 72 74 20 4c 45 46 54 20 4a 4f 49 4e 20 74 6f  ert LEFT JOIN to
e9a0: 20 4a 4f 49 4e 20 2a 2f 0a 23 64 65 66 69 6e 65   JOIN */.#define
e9b0: 20 53 51 4c 49 54 45 5f 53 6b 69 70 53 63 61 6e   SQLITE_SkipScan
e9c0: 20 20 20 20 20 20 20 30 78 34 30 30 30 20 20 20         0x4000   
e9d0: 2f 2a 20 53 6b 69 70 2d 73 63 61 6e 73 20 2a 2f  /* Skip-scans */
e9e0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
e9f0: 50 72 6f 70 61 67 61 74 65 43 6f 6e 73 74 20 30  PropagateConst 0
ea00: 78 38 30 30 30 20 20 20 2f 2a 20 54 68 65 20 63  x8000   /* The c
ea10: 6f 6e 73 74 61 6e 74 20 70 72 6f 70 61 67 61 74  onstant propagat
ea20: 69 6f 6e 20 6f 70 74 20 2a 2f 0a 23 64 65 66 69  ion opt */.#defi
ea30: 6e 65 20 53 51 4c 49 54 45 5f 41 6c 6c 4f 70 74  ne SQLITE_AllOpt
ea40: 73 20 20 20 20 20 20 20 20 30 78 66 66 66 66 20  s        0xffff 
ea50: 20 20 2f 2a 20 41 6c 6c 20 6f 70 74 69 6d 69 7a    /* All optimiz
ea60: 61 74 69 6f 6e 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a  ations */../*.**
ea70: 20 4d 61 63 72 6f 73 20 66 6f 72 20 74 65 73 74   Macros for test
ea80: 69 6e 67 20 77 68 65 74 68 65 72 20 6f 72 20 6e  ing whether or n
ea90: 6f 74 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73  ot optimizations
eaa0: 20 61 72 65 20 65 6e 61 62 6c 65 64 20 6f 72 20   are enabled or 
eab0: 64 69 73 61 62 6c 65 64 2e 0a 2a 2f 0a 23 64 65  disabled..*/.#de
eac0: 66 69 6e 65 20 4f 70 74 69 6d 69 7a 61 74 69 6f  fine Optimizatio
ead0: 6e 44 69 73 61 62 6c 65 64 28 64 62 2c 20 6d 61  nDisabled(db, ma
eae0: 73 6b 29 20 20 28 28 28 64 62 29 2d 3e 64 62 4f  sk)  (((db)->dbO
eaf0: 70 74 46 6c 61 67 73 26 28 6d 61 73 6b 29 29 21  ptFlags&(mask))!
eb00: 3d 30 29 0a 23 64 65 66 69 6e 65 20 4f 70 74 69  =0).#define Opti
eb10: 6d 69 7a 61 74 69 6f 6e 45 6e 61 62 6c 65 64 28  mizationEnabled(
eb20: 64 62 2c 20 6d 61 73 6b 29 20 20 20 28 28 28 64  db, mask)   (((d
eb30: 62 29 2d 3e 64 62 4f 70 74 46 6c 61 67 73 26 28  b)->dbOptFlags&(
eb40: 6d 61 73 6b 29 29 3d 3d 30 29 0a 0a 2f 2a 0a 2a  mask))==0)../*.*
eb50: 2a 20 52 65 74 75 72 6e 20 74 72 75 65 20 69 66  * Return true if
eb60: 20 69 74 20 4f 4b 20 74 6f 20 66 61 63 74 6f 72   it OK to factor
eb70: 20 63 6f 6e 73 74 61 6e 74 20 65 78 70 72 65 73   constant expres
eb80: 73 69 6f 6e 73 20 69 6e 74 6f 20 74 68 65 20 69  sions into the i
eb90: 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e 0a 2a 2a  nitialization.**
eba0: 20 63 6f 64 65 2e 20 54 68 65 20 61 72 67 75 6d   code. The argum
ebb0: 65 6e 74 20 69 73 20 61 20 50 61 72 73 65 20 6f  ent is a Parse o
ebc0: 62 6a 65 63 74 20 66 6f 72 20 74 68 65 20 63 6f  bject for the co
ebd0: 64 65 20 67 65 6e 65 72 61 74 6f 72 2e 0a 2a 2f  de generator..*/
ebe0: 0a 23 64 65 66 69 6e 65 20 43 6f 6e 73 74 46 61  .#define ConstFa
ebf0: 63 74 6f 72 4f 6b 28 50 29 20 28 28 50 29 2d 3e  ctorOk(P) ((P)->
ec00: 6f 6b 43 6f 6e 73 74 46 61 63 74 6f 72 29 0a 0a  okConstFactor)..
ec10: 2f 2a 0a 2a 2a 20 50 6f 73 73 69 62 6c 65 20 76  /*.** Possible v
ec20: 61 6c 75 65 73 20 66 6f 72 20 74 68 65 20 73 71  alues for the sq
ec30: 6c 69 74 65 2e 6d 61 67 69 63 20 66 69 65 6c 64  lite.magic field
ec40: 2e 0a 2a 2a 20 54 68 65 20 6e 75 6d 62 65 72 73  ..** The numbers
ec50: 20 61 72 65 20 6f 62 74 61 69 6e 65 64 20 61 74   are obtained at
ec60: 20 72 61 6e 64 6f 6d 20 61 6e 64 20 68 61 76 65   random and have
ec70: 20 6e 6f 20 73 70 65 63 69 61 6c 20 6d 65 61 6e   no special mean
ec80: 69 6e 67 2c 20 6f 74 68 65 72 0a 2a 2a 20 74 68  ing, other.** th
ec90: 61 6e 20 62 65 69 6e 67 20 64 69 73 74 69 6e 63  an being distinc
eca0: 74 20 66 72 6f 6d 20 6f 6e 65 20 61 6e 6f 74 68  t from one anoth
ecb0: 65 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53  er..*/.#define S
ecc0: 51 4c 49 54 45 5f 4d 41 47 49 43 5f 4f 50 45 4e  QLITE_MAGIC_OPEN
ecd0: 20 20 20 20 20 30 78 61 30 32 39 61 36 39 37 20       0xa029a697 
ece0: 20 2f 2a 20 44 61 74 61 62 61 73 65 20 69 73 20   /* Database is 
ecf0: 6f 70 65 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  open */.#define 
ed00: 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 43 4c 4f  SQLITE_MAGIC_CLO
ed10: 53 45 44 20 20 20 30 78 39 66 33 63 32 64 33 33  SED   0x9f3c2d33
ed20: 20 20 2f 2a 20 44 61 74 61 62 61 73 65 20 69 73    /* Database is
ed30: 20 63 6c 6f 73 65 64 20 2a 2f 0a 23 64 65 66 69   closed */.#defi
ed40: 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f  ne SQLITE_MAGIC_
ed50: 53 49 43 4b 20 20 20 20 20 30 78 34 62 37 37 31  SICK     0x4b771
ed60: 32 39 30 20 20 2f 2a 20 45 72 72 6f 72 20 61 6e  290  /* Error an
ed70: 64 20 61 77 61 69 74 69 6e 67 20 63 6c 6f 73 65  d awaiting close
ed80: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
ed90: 54 45 5f 4d 41 47 49 43 5f 42 55 53 59 20 20 20  TE_MAGIC_BUSY   
eda0: 20 20 30 78 66 30 33 62 37 39 30 36 20 20 2f 2a    0xf03b7906  /*
edb0: 20 44 61 74 61 62 61 73 65 20 63 75 72 72 65 6e   Database curren
edc0: 74 6c 79 20 69 6e 20 75 73 65 20 2a 2f 0a 23 64  tly in use */.#d
edd0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47  efine SQLITE_MAG
ede0: 49 43 5f 45 52 52 4f 52 20 20 20 20 30 78 62 35  IC_ERROR    0xb5
edf0: 33 35 37 39 33 30 20 20 2f 2a 20 41 6e 20 53 51  357930  /* An SQ
ee00: 4c 49 54 45 5f 4d 49 53 55 53 45 20 65 72 72 6f  LITE_MISUSE erro
ee10: 72 20 6f 63 63 75 72 72 65 64 20 2a 2f 0a 23 64  r occurred */.#d
ee20: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47  efine SQLITE_MAG
ee30: 49 43 5f 5a 4f 4d 42 49 45 20 20 20 30 78 36 34  IC_ZOMBIE   0x64
ee40: 63 66 66 63 37 66 20 20 2f 2a 20 43 6c 6f 73 65  cffc7f  /* Close
ee50: 20 77 69 74 68 20 6c 61 73 74 20 73 74 61 74 65   with last state
ee60: 6d 65 6e 74 20 63 6c 6f 73 65 20 2a 2f 0a 0a 2f  ment close */../
ee70: 2a 0a 2a 2a 20 45 61 63 68 20 53 51 4c 20 66 75  *.** Each SQL fu
ee80: 6e 63 74 69 6f 6e 20 69 73 20 64 65 66 69 6e 65  nction is define
ee90: 64 20 62 79 20 61 6e 20 69 6e 73 74 61 6e 63 65  d by an instance
eea0: 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   of the followin
eeb0: 67 0a 2a 2a 20 73 74 72 75 63 74 75 72 65 2e 20  g.** structure. 
eec0: 20 46 6f 72 20 67 6c 6f 62 61 6c 20 62 75 69 6c   For global buil
eed0: 74 2d 69 6e 20 66 75 6e 63 74 69 6f 6e 73 20 28  t-in functions (
eee0: 65 78 3a 20 73 75 62 73 74 72 28 29 2c 20 6d 61  ex: substr(), ma
eef0: 78 28 29 2c 20 63 6f 75 6e 74 28 29 29 0a 2a 2a  x(), count()).**
ef00: 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68   a pointer to th
ef10: 69 73 20 73 74 72 75 63 74 75 72 65 20 69 73 20  is structure is 
ef20: 68 65 6c 64 20 69 6e 20 74 68 65 20 73 71 6c 69  held in the sqli
ef30: 74 65 33 42 75 69 6c 74 69 6e 46 75 6e 63 74 69  te3BuiltinFuncti
ef40: 6f 6e 73 20 6f 62 6a 65 63 74 2e 0a 2a 2a 20 46  ons object..** F
ef50: 6f 72 20 70 65 72 2d 63 6f 6e 6e 65 63 74 69 6f  or per-connectio
ef60: 6e 20 61 70 70 6c 69 63 61 74 69 6f 6e 2d 64 65  n application-de
ef70: 66 69 6e 65 64 20 66 75 6e 63 74 69 6f 6e 73 2c  fined functions,
ef80: 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68   a pointer to th
ef90: 69 73 0a 2a 2a 20 73 74 72 75 63 74 75 72 65 20  is.** structure 
efa0: 69 73 20 68 65 6c 64 20 69 6e 20 74 68 65 20 64  is held in the d
efb0: 62 2d 3e 61 48 61 73 68 20 68 61 73 68 20 74 61  b->aHash hash ta
efc0: 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 75  ble..**.** The u
efd0: 2e 70 48 61 73 68 20 66 69 65 6c 64 20 69 73 20  .pHash field is 
efe0: 75 73 65 64 20 62 79 20 74 68 65 20 67 6c 6f 62  used by the glob
eff0: 61 6c 20 62 75 69 6c 74 2d 69 6e 73 2e 20 20 54  al built-ins.  T
f000: 68 65 20 75 2e 70 44 65 73 74 72 75 63 74 6f 72  he u.pDestructor
f010: 0a 2a 2a 20 66 69 65 6c 64 20 69 73 20 75 73 65  .** field is use
f020: 64 20 62 79 20 70 65 72 2d 63 6f 6e 6e 65 63 74  d by per-connect
f030: 69 6f 6e 20 61 70 70 2d 64 65 66 20 66 75 6e 63  ion app-def func
f040: 74 69 6f 6e 73 2e 0a 2a 2f 0a 73 74 72 75 63 74  tions..*/.struct
f050: 20 46 75 6e 63 44 65 66 20 7b 0a 20 20 69 38 20   FuncDef {.  i8 
f060: 6e 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20  nArg;           
f070: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61    /* Number of a
f080: 72 67 75 6d 65 6e 74 73 2e 20 20 2d 31 20 6d 65  rguments.  -1 me
f090: 61 6e 73 20 75 6e 6c 69 6d 69 74 65 64 20 2a 2f  ans unlimited */
f0a0: 0a 20 20 75 33 32 20 66 75 6e 63 46 6c 61 67 73  .  u32 funcFlags
f0b0: 3b 20 20 20 20 20 20 20 2f 2a 20 53 6f 6d 65 20  ;       /* Some 
f0c0: 63 6f 6d 62 69 6e 61 74 69 6f 6e 20 6f 66 20 53  combination of S
f0d0: 51 4c 49 54 45 5f 46 55 4e 43 5f 2a 20 2a 2f 0a  QLITE_FUNC_* */.
f0e0: 20 20 76 6f 69 64 20 2a 70 55 73 65 72 44 61 74    void *pUserDat
f0f0: 61 3b 20 20 20 20 20 2f 2a 20 55 73 65 72 20 64  a;     /* User d
f100: 61 74 61 20 70 61 72 61 6d 65 74 65 72 20 2a 2f  ata parameter */
f110: 0a 20 20 46 75 6e 63 44 65 66 20 2a 70 4e 65 78  .  FuncDef *pNex
f120: 74 3b 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20  t;      /* Next 
f130: 66 75 6e 63 74 69 6f 6e 20 77 69 74 68 20 73 61  function with sa
f140: 6d 65 20 6e 61 6d 65 20 2a 2f 0a 20 20 76 6f 69  me name */.  voi
f150: 64 20 28 2a 78 53 46 75 6e 63 29 28 73 71 6c 69  d (*xSFunc)(sqli
f160: 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74  te3_context*,int
f170: 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2a  ,sqlite3_value**
f180: 29 3b 20 2f 2a 20 66 75 6e 63 20 6f 72 20 61 67  ); /* func or ag
f190: 67 2d 73 74 65 70 20 2a 2f 0a 20 20 76 6f 69 64  g-step */.  void
f1a0: 20 28 2a 78 46 69 6e 61 6c 69 7a 65 29 28 73 71   (*xFinalize)(sq
f1b0: 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 29 3b  lite3_context*);
f1c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f1d0: 20 20 2f 2a 20 41 67 67 20 66 69 6e 61 6c 69 7a    /* Agg finaliz
f1e0: 65 72 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78  er */.  void (*x
f1f0: 56 61 6c 75 65 29 28 73 71 6c 69 74 65 33 5f 63  Value)(sqlite3_c
f200: 6f 6e 74 65 78 74 2a 29 3b 20 20 20 20 20 20 20  ontext*);       
f210: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
f220: 20 43 75 72 72 65 6e 74 20 61 67 67 20 76 61 6c   Current agg val
f230: 75 65 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78  ue */.  void (*x
f240: 49 6e 76 65 72 73 65 29 28 73 71 6c 69 74 65 33  Inverse)(sqlite3
f250: 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71  _context*,int,sq
f260: 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2a 29 3b 20  lite3_value**); 
f270: 2f 2a 20 69 6e 76 65 72 73 65 20 61 67 67 2d 73  /* inverse agg-s
f280: 74 65 70 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63  tep */.  const c
f290: 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 2f 2a  har *zName;   /*
f2a0: 20 53 51 4c 20 6e 61 6d 65 20 6f 66 20 74 68 65   SQL name of the
f2b0: 20 66 75 6e 63 74 69 6f 6e 2e 20 2a 2f 0a 20 20   function. */.  
f2c0: 75 6e 69 6f 6e 20 7b 0a 20 20 20 20 46 75 6e 63  union {.    Func
f2d0: 44 65 66 20 2a 70 48 61 73 68 3b 20 20 20 20 20  Def *pHash;     
f2e0: 20 2f 2a 20 4e 65 78 74 20 77 69 74 68 20 61 20   /* Next with a 
f2f0: 64 69 66 66 65 72 65 6e 74 20 6e 61 6d 65 20 62  different name b
f300: 75 74 20 74 68 65 20 73 61 6d 65 20 68 61 73 68  ut the same hash
f310: 20 2a 2f 0a 20 20 20 20 46 75 6e 63 44 65 73 74   */.    FuncDest
f320: 72 75 63 74 6f 72 20 2a 70 44 65 73 74 72 75 63  ructor *pDestruc
f330: 74 6f 72 3b 20 20 20 2f 2a 20 52 65 66 65 72 65  tor;   /* Refere
f340: 6e 63 65 20 63 6f 75 6e 74 65 64 20 64 65 73 74  nce counted dest
f350: 72 75 63 74 6f 72 20 66 75 6e 63 74 69 6f 6e 20  ructor function 
f360: 2a 2f 0a 20 20 7d 20 75 3b 0a 7d 3b 0a 0a 2f 2a  */.  } u;.};../*
f370: 0a 2a 2a 20 54 68 69 73 20 73 74 72 75 63 74 75  .** This structu
f380: 72 65 20 65 6e 63 61 70 73 75 6c 61 74 65 73 20  re encapsulates 
f390: 61 20 75 73 65 72 2d 66 75 6e 63 74 69 6f 6e 20  a user-function 
f3a0: 64 65 73 74 72 75 63 74 6f 72 20 63 61 6c 6c 62  destructor callb
f3b0: 61 63 6b 20 28 61 73 0a 2a 2a 20 63 6f 6e 66 69  ack (as.** confi
f3c0: 67 75 72 65 64 20 75 73 69 6e 67 20 63 72 65 61  gured using crea
f3d0: 74 65 5f 66 75 6e 63 74 69 6f 6e 5f 76 32 28 29  te_function_v2()
f3e0: 29 20 61 6e 64 20 61 20 72 65 66 65 72 65 6e 63  ) and a referenc
f3f0: 65 20 63 6f 75 6e 74 65 72 2e 20 57 68 65 6e 0a  e counter. When.
f400: 2a 2a 20 63 72 65 61 74 65 5f 66 75 6e 63 74 69  ** create_functi
f410: 6f 6e 5f 76 32 28 29 20 69 73 20 63 61 6c 6c 65  on_v2() is calle
f420: 64 20 74 6f 20 63 72 65 61 74 65 20 61 20 66 75  d to create a fu
f430: 6e 63 74 69 6f 6e 20 77 69 74 68 20 61 20 64 65  nction with a de
f440: 73 74 72 75 63 74 6f 72 2c 0a 2a 2a 20 61 20 73  structor,.** a s
f450: 69 6e 67 6c 65 20 6f 62 6a 65 63 74 20 6f 66 20  ingle object of 
f460: 74 68 69 73 20 74 79 70 65 20 69 73 20 61 6c 6c  this type is all
f470: 6f 63 61 74 65 64 2e 20 46 75 6e 63 44 65 73 74  ocated. FuncDest
f480: 72 75 63 74 6f 72 2e 6e 52 65 66 20 69 73 20 73  ructor.nRef is s
f490: 65 74 20 74 6f 0a 2a 2a 20 74 68 65 20 6e 75 6d  et to.** the num
f4a0: 62 65 72 20 6f 66 20 46 75 6e 63 44 65 66 20 6f  ber of FuncDef o
f4b0: 62 6a 65 63 74 73 20 63 72 65 61 74 65 64 20 28  bjects created (
f4c0: 65 69 74 68 65 72 20 31 20 6f 72 20 33 2c 20 64  either 1 or 3, d
f4d0: 65 70 65 6e 64 69 6e 67 20 6f 6e 20 77 68 65 74  epending on whet
f4e0: 68 65 72 0a 2a 2a 20 6f 72 20 6e 6f 74 20 74 68  her.** or not th
f4f0: 65 20 73 70 65 63 69 66 69 65 64 20 65 6e 63 6f  e specified enco
f500: 64 69 6e 67 20 69 73 20 53 51 4c 49 54 45 5f 41  ding is SQLITE_A
f510: 4e 59 29 2e 20 54 68 65 20 46 75 6e 63 44 65 66  NY). The FuncDef
f520: 2e 70 44 65 73 74 72 75 63 74 6f 72 0a 2a 2a 20  .pDestructor.** 
f530: 6d 65 6d 62 65 72 20 6f 66 20 65 61 63 68 20 6f  member of each o
f540: 66 20 74 68 65 20 6e 65 77 20 46 75 6e 63 44 65  f the new FuncDe
f550: 66 20 6f 62 6a 65 63 74 73 20 69 73 20 73 65 74  f objects is set
f560: 20 74 6f 20 70 6f 69 6e 74 20 74 6f 20 74 68 65   to point to the
f570: 20 61 6c 6c 6f 63 61 74 65 64 0a 2a 2a 20 46 75   allocated.** Fu
f580: 6e 63 44 65 73 74 72 75 63 74 6f 72 2e 0a 2a 2a  ncDestructor..**
f590: 0a 2a 2a 20 54 68 65 72 65 61 66 74 65 72 2c 20  .** Thereafter, 
f5a0: 77 68 65 6e 20 6f 6e 65 20 6f 66 20 74 68 65 20  when one of the 
f5b0: 46 75 6e 63 44 65 66 20 6f 62 6a 65 63 74 73 20  FuncDef objects 
f5c0: 69 73 20 64 65 6c 65 74 65 64 2c 20 74 68 65 20  is deleted, the 
f5d0: 72 65 66 65 72 65 6e 63 65 0a 2a 2a 20 63 6f 75  reference.** cou
f5e0: 6e 74 20 6f 6e 20 74 68 69 73 20 6f 62 6a 65 63  nt on this objec
f5f0: 74 20 69 73 20 64 65 63 72 65 6d 65 6e 74 65 64  t is decremented
f600: 2e 20 57 68 65 6e 20 69 74 20 72 65 61 63 68 65  . When it reache
f610: 73 20 30 2c 20 74 68 65 20 64 65 73 74 72 75 63  s 0, the destruc
f620: 74 6f 72 0a 2a 2a 20 69 73 20 69 6e 76 6f 6b 65  tor.** is invoke
f630: 64 20 61 6e 64 20 74 68 65 20 46 75 6e 63 44 65  d and the FuncDe
f640: 73 74 72 75 63 74 6f 72 20 73 74 72 75 63 74 75  structor structu
f650: 72 65 20 66 72 65 65 64 2e 0a 2a 2f 0a 73 74 72  re freed..*/.str
f660: 75 63 74 20 46 75 6e 63 44 65 73 74 72 75 63 74  uct FuncDestruct
f670: 6f 72 20 7b 0a 20 20 69 6e 74 20 6e 52 65 66 3b  or {.  int nRef;
f680: 0a 20 20 76 6f 69 64 20 28 2a 78 44 65 73 74 72  .  void (*xDestr
f690: 6f 79 29 28 76 6f 69 64 20 2a 29 3b 0a 20 20 76  oy)(void *);.  v
f6a0: 6f 69 64 20 2a 70 55 73 65 72 44 61 74 61 3b 0a  oid *pUserData;.
f6b0: 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 50 6f 73 73 69 62  };../*.** Possib
f6c0: 6c 65 20 76 61 6c 75 65 73 20 66 6f 72 20 46 75  le values for Fu
f6d0: 6e 63 44 65 66 2e 66 6c 61 67 73 2e 20 20 4e 6f  ncDef.flags.  No
f6e0: 74 65 20 74 68 61 74 20 74 68 65 20 5f 4c 45 4e  te that the _LEN
f6f0: 47 54 48 20 61 6e 64 20 5f 54 59 50 45 4f 46 0a  GTH and _TYPEOF.
f700: 2a 2a 20 76 61 6c 75 65 73 20 6d 75 73 74 20 63  ** values must c
f710: 6f 72 72 65 73 70 6f 6e 64 20 74 6f 20 4f 50 46  orrespond to OPF
f720: 4c 41 47 5f 4c 45 4e 47 54 48 41 52 47 20 61 6e  LAG_LENGTHARG an
f730: 64 20 4f 50 46 4c 41 47 5f 54 59 50 45 4f 46 41  d OPFLAG_TYPEOFA
f740: 52 47 2e 20 20 41 6e 64 0a 2a 2a 20 53 51 4c 49  RG.  And.** SQLI
f750: 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54  TE_FUNC_CONSTANT
f760: 20 6d 75 73 74 20 62 65 20 74 68 65 20 73 61 6d   must be the sam
f770: 65 20 61 73 20 53 51 4c 49 54 45 5f 44 45 54 45  e as SQLITE_DETE
f780: 52 4d 49 4e 49 53 54 49 43 2e 20 20 54 68 65 72  RMINISTIC.  Ther
f790: 65 0a 2a 2a 20 61 72 65 20 61 73 73 65 72 74 28  e.** are assert(
f7a0: 29 20 73 74 61 74 65 6d 65 6e 74 73 20 69 6e 20  ) statements in 
f7b0: 74 68 65 20 63 6f 64 65 20 74 6f 20 76 65 72 69  the code to veri
f7c0: 66 79 20 74 68 69 73 2e 0a 2a 2a 0a 2a 2a 20 56  fy this..**.** V
f7d0: 61 6c 75 65 20 63 6f 6e 73 74 72 61 69 6e 74 73  alue constraints
f7e0: 20 28 65 6e 66 6f 72 63 65 64 20 76 69 61 20 61   (enforced via a
f7f0: 73 73 65 72 74 28 29 29 3a 0a 2a 2a 20 20 20 20  ssert()):.**    
f800: 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4d 49 4e   SQLITE_FUNC_MIN
f810: 4d 41 58 20 20 20 20 3d 3d 20 20 4e 43 5f 4d 69  MAX    ==  NC_Mi
f820: 6e 4d 61 78 41 67 67 20 20 20 20 20 20 3d 3d 20  nMaxAgg      == 
f830: 53 46 5f 4d 69 6e 4d 61 78 41 67 67 0a 2a 2a 20  SF_MinMaxAgg.** 
f840: 20 20 20 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f      SQLITE_FUNC_
f850: 4c 45 4e 47 54 48 20 20 20 20 3d 3d 20 20 4f 50  LENGTH    ==  OP
f860: 46 4c 41 47 5f 4c 45 4e 47 54 48 41 52 47 0a 2a  FLAG_LENGTHARG.*
f870: 2a 20 20 20 20 20 53 51 4c 49 54 45 5f 46 55 4e  *     SQLITE_FUN
f880: 43 5f 54 59 50 45 4f 46 20 20 20 20 3d 3d 20 20  C_TYPEOF    ==  
f890: 4f 50 46 4c 41 47 5f 54 59 50 45 4f 46 41 52 47  OPFLAG_TYPEOFARG
f8a0: 0a 2a 2a 20 20 20 20 20 53 51 4c 49 54 45 5f 46  .**     SQLITE_F
f8b0: 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 20 20 3d 3d  UNC_CONSTANT  ==
f8c0: 20 20 53 51 4c 49 54 45 5f 44 45 54 45 52 4d 49    SQLITE_DETERMI
f8d0: 4e 49 53 54 49 43 20 66 72 6f 6d 20 74 68 65 20  NISTIC from the 
f8e0: 41 50 49 0a 2a 2a 20 20 20 20 20 53 51 4c 49 54  API.**     SQLIT
f8f0: 45 5f 46 55 4e 43 5f 45 4e 43 4d 41 53 4b 20 20  E_FUNC_ENCMASK  
f900: 20 64 65 70 65 6e 64 73 20 6f 6e 20 53 51 4c 49   depends on SQLI
f910: 54 45 5f 55 54 46 2a 20 6d 61 63 72 6f 73 20 69  TE_UTF* macros i
f920: 6e 20 74 68 65 20 41 50 49 0a 2a 2f 0a 23 64 65  n the API.*/.#de
f930: 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43  fine SQLITE_FUNC
f940: 5f 45 4e 43 4d 41 53 4b 20 20 30 78 30 30 30 33  _ENCMASK  0x0003
f950: 20 2f 2a 20 53 51 4c 49 54 45 5f 55 54 46 38 2c   /* SQLITE_UTF8,
f960: 20 53 51 4c 49 54 45 5f 55 54 46 31 36 42 45 20   SQLITE_UTF16BE 
f970: 6f 72 20 55 54 46 31 36 4c 45 20 2a 2f 0a 23 64  or UTF16LE */.#d
f980: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e  efine SQLITE_FUN
f990: 43 5f 4c 49 4b 45 20 20 20 20 20 30 78 30 30 30  C_LIKE     0x000
f9a0: 34 20 2f 2a 20 43 61 6e 64 69 64 61 74 65 20 66  4 /* Candidate f
f9b0: 6f 72 20 74 68 65 20 4c 49 4b 45 20 6f 70 74 69  or the LIKE opti
f9c0: 6d 69 7a 61 74 69 6f 6e 20 2a 2f 0a 23 64 65 66  mization */.#def
f9d0: 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f  ine SQLITE_FUNC_
f9e0: 43 41 53 45 20 20 20 20 20 30 78 30 30 30 38 20  CASE     0x0008 
f9f0: 2f 2a 20 43 61 73 65 2d 73 65 6e 73 69 74 69 76  /* Case-sensitiv
fa00: 65 20 4c 49 4b 45 2d 74 79 70 65 20 66 75 6e 63  e LIKE-type func
fa10: 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  tion */.#define 
fa20: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 45 50 48 45  SQLITE_FUNC_EPHE
fa30: 4d 20 20 20 20 30 78 30 30 31 30 20 2f 2a 20 45  M    0x0010 /* E
fa40: 70 68 65 6d 65 72 61 6c 2e 20 20 44 65 6c 65 74  phemeral.  Delet
fa50: 65 20 77 69 74 68 20 56 44 42 45 20 2a 2f 0a 23  e with VDBE */.#
fa60: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55  define SQLITE_FU
fa70: 4e 43 5f 4e 45 45 44 43 4f 4c 4c 20 30 78 30 30  NC_NEEDCOLL 0x00
fa80: 32 30 20 2f 2a 20 73 71 6c 69 74 65 33 47 65 74  20 /* sqlite3Get
fa90: 46 75 6e 63 43 6f 6c 6c 53 65 71 28 29 20 6d 69  FuncCollSeq() mi
faa0: 67 68 74 20 62 65 20 63 61 6c 6c 65 64 2a 2f 0a  ght be called*/.
fab0: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46  #define SQLITE_F
fac0: 55 4e 43 5f 4c 45 4e 47 54 48 20 20 20 30 78 30  UNC_LENGTH   0x0
fad0: 30 34 30 20 2f 2a 20 42 75 69 6c 74 2d 69 6e 20  040 /* Built-in 
fae0: 6c 65 6e 67 74 68 28 29 20 66 75 6e 63 74 69 6f  length() functio
faf0: 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  n */.#define SQL
fb00: 49 54 45 5f 46 55 4e 43 5f 54 59 50 45 4f 46 20  ITE_FUNC_TYPEOF 
fb10: 20 20 30 78 30 30 38 30 20 2f 2a 20 42 75 69 6c    0x0080 /* Buil
fb20: 74 2d 69 6e 20 74 79 70 65 6f 66 28 29 20 66 75  t-in typeof() fu
fb30: 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e  nction */.#defin
fb40: 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f  e SQLITE_FUNC_CO
fb50: 55 4e 54 20 20 20 20 30 78 30 31 30 30 20 2f 2a  UNT    0x0100 /*
fb60: 20 42 75 69 6c 74 2d 69 6e 20 63 6f 75 6e 74 28   Built-in count(
fb70: 2a 29 20 61 67 67 72 65 67 61 74 65 20 2a 2f 0a  *) aggregate */.
fb80: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46  #define SQLITE_F
fb90: 55 4e 43 5f 43 4f 41 4c 45 53 43 45 20 30 78 30  UNC_COALESCE 0x0
fba0: 32 30 30 20 2f 2a 20 42 75 69 6c 74 2d 69 6e 20  200 /* Built-in 
fbb0: 63 6f 61 6c 65 73 63 65 28 29 20 6f 72 20 69 66  coalesce() or if
fbc0: 6e 75 6c 6c 28 29 20 2a 2f 0a 23 64 65 66 69 6e  null() */.#defin
fbd0: 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 55 4e  e SQLITE_FUNC_UN
fbe0: 4c 49 4b 45 4c 59 20 30 78 30 34 30 30 20 2f 2a  LIKELY 0x0400 /*
fbf0: 20 42 75 69 6c 74 2d 69 6e 20 75 6e 6c 69 6b 65   Built-in unlike
fc00: 6c 79 28 29 20 66 75 6e 63 74 69 6f 6e 20 2a 2f  ly() function */
fc10: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
fc20: 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 20 30 78  FUNC_CONSTANT 0x
fc30: 30 38 30 30 20 2f 2a 20 43 6f 6e 73 74 61 6e 74  0800 /* Constant
fc40: 20 69 6e 70 75 74 73 20 67 69 76 65 20 61 20 63   inputs give a c
fc50: 6f 6e 73 74 61 6e 74 20 6f 75 74 70 75 74 20 2a  onstant output *
fc60: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
fc70: 5f 46 55 4e 43 5f 4d 49 4e 4d 41 58 20 20 20 30  _FUNC_MINMAX   0
fc80: 78 31 30 30 30 20 2f 2a 20 54 72 75 65 20 66 6f  x1000 /* True fo
fc90: 72 20 6d 69 6e 28 29 20 61 6e 64 20 6d 61 78 28  r min() and max(
fca0: 29 20 61 67 67 72 65 67 61 74 65 73 20 2a 2f 0a  ) aggregates */.
fcb0: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46  #define SQLITE_F
fcc0: 55 4e 43 5f 53 4c 4f 43 48 4e 47 20 20 30 78 32  UNC_SLOCHNG  0x2
fcd0: 30 30 30 20 2f 2a 20 22 53 6c 6f 77 20 43 68 61  000 /* "Slow Cha
fce0: 6e 67 65 22 2e 20 56 61 6c 75 65 20 63 6f 6e 73  nge". Value cons
fcf0: 74 61 6e 74 20 64 75 72 69 6e 67 20 61 0a 20 20  tant during a.  
fd00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fd10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fd20: 20 20 2a 2a 20 73 69 6e 67 6c 65 20 71 75 65 72    ** single quer
fd30: 79 20 2d 20 6d 69 67 68 74 20 63 68 61 6e 67 65  y - might change
fd40: 20 6f 76 65 72 20 74 69 6d 65 20 2a 2f 0a 23 64   over time */.#d
fd50: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e  efine SQLITE_FUN
fd60: 43 5f 41 46 46 49 4e 49 54 59 20 30 78 34 30 30  C_AFFINITY 0x400
fd70: 30 20 2f 2a 20 42 75 69 6c 74 2d 69 6e 20 61 66  0 /* Built-in af
fd80: 66 69 6e 69 74 79 28 29 20 66 75 6e 63 74 69 6f  finity() functio
fd90: 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  n */.#define SQL
fda0: 49 54 45 5f 46 55 4e 43 5f 4f 46 46 53 45 54 20  ITE_FUNC_OFFSET 
fdb0: 20 20 30 78 38 30 30 30 20 2f 2a 20 42 75 69 6c    0x8000 /* Buil
fdc0: 74 2d 69 6e 20 73 71 6c 69 74 65 5f 6f 66 66 73  t-in sqlite_offs
fdd0: 65 74 28 29 20 66 75 6e 63 74 69 6f 6e 20 2a 2f  et() function */
fde0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
fdf0: 46 55 4e 43 5f 57 49 4e 44 4f 57 20 20 30 78 31  FUNC_WINDOW  0x1
fe00: 30 30 30 30 20 2f 2a 20 42 75 69 6c 74 2d 69 6e  0000 /* Built-in
fe10: 20 77 69 6e 64 6f 77 2d 6f 6e 6c 79 20 66 75 6e   window-only fun
fe20: 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65  ction */.#define
fe30: 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 57 49 4e   SQLITE_FUNC_WIN
fe40: 44 4f 57 5f 53 49 5a 45 20 20 30 78 32 30 30 30  DOW_SIZE  0x2000
fe50: 30 20 20 2f 2a 20 52 65 71 75 69 72 65 73 20 70  0  /* Requires p
fe60: 61 72 74 69 74 69 6f 6e 20 73 69 7a 65 20 61 73  artition size as
fe70: 20 61 72 67 2e 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20   arg. */../*.** 
fe80: 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 68  The following th
fe90: 72 65 65 20 6d 61 63 72 6f 73 2c 20 46 55 4e 43  ree macros, FUNC
fea0: 54 49 4f 4e 28 29 2c 20 4c 49 4b 45 46 55 4e 43  TION(), LIKEFUNC
feb0: 28 29 20 61 6e 64 20 41 47 47 52 45 47 41 54 45  () and AGGREGATE
fec0: 28 29 20 61 72 65 0a 2a 2a 20 75 73 65 64 20 74  () are.** used t
fed0: 6f 20 63 72 65 61 74 65 20 74 68 65 20 69 6e 69  o create the ini
fee0: 74 69 61 6c 69 7a 65 72 73 20 66 6f 72 20 74 68  tializers for th
fef0: 65 20 46 75 6e 63 44 65 66 20 73 74 72 75 63 74  e FuncDef struct
ff00: 75 72 65 73 2e 0a 2a 2a 0a 2a 2a 20 20 20 46 55  ures..**.**   FU
ff10: 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41  NCTION(zName, nA
ff20: 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78  rg, iArg, bNC, x
ff30: 46 75 6e 63 29 0a 2a 2a 20 20 20 20 20 55 73 65  Func).**     Use
ff40: 64 20 74 6f 20 63 72 65 61 74 65 20 61 20 73 63  d to create a sc
ff50: 61 6c 61 72 20 66 75 6e 63 74 69 6f 6e 20 64 65  alar function de
ff60: 66 69 6e 69 74 69 6f 6e 20 6f 66 20 61 20 66 75  finition of a fu
ff70: 6e 63 74 69 6f 6e 20 7a 4e 61 6d 65 0a 2a 2a 20  nction zName.** 
ff80: 20 20 20 20 69 6d 70 6c 65 6d 65 6e 74 65 64 20      implemented 
ff90: 62 79 20 43 20 66 75 6e 63 74 69 6f 6e 20 78 46  by C function xF
ffa0: 75 6e 63 20 74 68 61 74 20 61 63 63 65 70 74 73  unc that accepts
ffb0: 20 6e 41 72 67 20 61 72 67 75 6d 65 6e 74 73 2e   nArg arguments.
ffc0: 20 54 68 65 0a 2a 2a 20 20 20 20 20 76 61 6c 75   The.**     valu
ffd0: 65 20 70 61 73 73 65 64 20 61 73 20 69 41 72 67  e passed as iArg
ffe0: 20 69 73 20 63 61 73 74 20 74 6f 20 61 20 28 76   is cast to a (v
fff0: 6f 69 64 2a 29 20 61 6e 64 20 6d 61 64 65 20 61  oid*) and made a
10000 76 61 69 6c 61 62 6c 65 0a 2a 2a 20 20 20 20 20  vailable.**     
10010 61 73 20 74 68 65 20 75 73 65 72 2d 64 61 74 61  as the user-data
10020 20 28 73 71 6c 69 74 65 33 5f 75 73 65 72 5f 64   (sqlite3_user_d
10030 61 74 61 28 29 29 20 66 6f 72 20 74 68 65 20 66  ata()) for the f
10040 75 6e 63 74 69 6f 6e 2e 20 49 66 0a 2a 2a 20 20  unction. If.**  
10050 20 20 20 61 72 67 75 6d 65 6e 74 20 62 4e 43 20     argument bNC 
10060 69 73 20 74 72 75 65 2c 20 74 68 65 6e 20 74 68  is true, then th
10070 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45  e SQLITE_FUNC_NE
10080 45 44 43 4f 4c 4c 20 66 6c 61 67 20 69 73 20 73  EDCOLL flag is s
10090 65 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 56 46 55 4e  et..**.**   VFUN
100a0 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72  CTION(zName, nAr
100b0 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78 46  g, iArg, bNC, xF
100c0 75 6e 63 29 0a 2a 2a 20 20 20 20 20 4c 69 6b 65  unc).**     Like
100d0 20 46 55 4e 43 54 49 4f 4e 20 65 78 63 65 70 74   FUNCTION except
100e0 20 69 74 20 6f 6d 69 74 73 20 74 68 65 20 53 51   it omits the SQ
100f0 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41  LITE_FUNC_CONSTA
10100 4e 54 20 66 6c 61 67 2e 0a 2a 2a 0a 2a 2a 20 20  NT flag..**.**  
10110 20 44 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65   DFUNCTION(zName
10120 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c 20 62 4e  , nArg, iArg, bN
10130 43 2c 20 78 46 75 6e 63 29 0a 2a 2a 20 20 20 20  C, xFunc).**    
10140 20 4c 69 6b 65 20 46 55 4e 43 54 49 4f 4e 20 65   Like FUNCTION e
10150 78 63 65 70 74 20 69 74 20 6f 6d 69 74 73 20 74  xcept it omits t
10160 68 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43  he SQLITE_FUNC_C
10170 4f 4e 53 54 41 4e 54 20 66 6c 61 67 20 61 6e 64  ONSTANT flag and
10180 0a 2a 2a 20 20 20 20 20 61 64 64 73 20 74 68 65  .**     adds the
10190 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 53 4c 4f   SQLITE_FUNC_SLO
101a0 43 48 4e 47 20 66 6c 61 67 2e 20 20 55 73 65 64  CHNG flag.  Used
101b0 20 66 6f 72 20 64 61 74 65 20 26 20 74 69 6d 65   for date & time
101c0 20 66 75 6e 63 74 69 6f 6e 73 0a 2a 2a 20 20 20   functions.**   
101d0 20 20 61 6e 64 20 66 75 6e 63 74 69 6f 6e 73 20    and functions 
101e0 6c 69 6b 65 20 73 71 6c 69 74 65 5f 76 65 72 73  like sqlite_vers
101f0 69 6f 6e 28 29 20 74 68 61 74 20 63 61 6e 20 63  ion() that can c
10200 68 61 6e 67 65 2c 20 62 75 74 20 6e 6f 74 20 64  hange, but not d
10210 75 72 69 6e 67 0a 2a 2a 20 20 20 20 20 61 20 73  uring.**     a s
10220 69 6e 67 6c 65 20 71 75 65 72 79 2e 20 20 54 68  ingle query.  Th
10230 65 20 69 41 72 67 20 69 73 20 69 67 6e 6f 72 65  e iArg is ignore
10240 64 2e 20 20 54 68 65 20 75 73 65 72 2d 64 61 74  d.  The user-dat
10250 61 20 69 73 20 61 6c 77 61 79 73 20 73 65 74 0a  a is always set.
10260 2a 2a 20 20 20 20 20 74 6f 20 61 20 4e 55 4c 4c  **     to a NULL
10270 20 70 6f 69 6e 74 65 72 2e 20 20 54 68 65 20 62   pointer.  The b
10280 4e 43 20 70 61 72 61 6d 65 74 65 72 20 69 73 20  NC parameter is 
10290 6e 6f 74 20 75 73 65 64 2e 0a 2a 2a 0a 2a 2a 20  not used..**.** 
102a0 20 20 50 55 52 45 5f 44 41 54 45 28 7a 4e 61 6d    PURE_DATE(zNam
102b0 65 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c 20 62  e, nArg, iArg, b
102c0 4e 43 2c 20 78 46 75 6e 63 29 0a 2a 2a 20 20 20  NC, xFunc).**   
102d0 20 20 55 73 65 64 20 66 6f 72 20 22 70 75 72 65    Used for "pure
102e0 22 20 64 61 74 65 2f 74 69 6d 65 20 66 75 6e 63  " date/time func
102f0 74 69 6f 6e 73 2c 20 74 68 69 73 20 6d 61 63 72  tions, this macr
10300 6f 20 69 73 20 6c 69 6b 65 20 44 46 55 4e 43 54  o is like DFUNCT
10310 49 4f 4e 0a 2a 2a 20 20 20 20 20 65 78 63 65 70  ION.**     excep
10320 74 20 74 68 61 74 20 69 74 20 64 6f 65 73 20 73  t that it does s
10330 65 74 20 74 68 65 20 53 51 4c 49 54 45 5f 46 55  et the SQLITE_FU
10340 4e 43 5f 43 4f 4e 53 54 41 4e 54 20 66 6c 61 67  NC_CONSTANT flag
10350 73 2e 20 20 69 41 72 67 20 69 73 0a 2a 2a 20 20  s.  iArg is.**  
10360 20 20 20 69 67 6e 6f 72 65 64 20 61 6e 64 20 74     ignored and t
10370 68 65 20 75 73 65 72 2d 64 61 74 61 20 66 6f 72  he user-data for
10380 20 74 68 65 73 65 20 66 75 6e 63 74 69 6f 6e 73   these functions
10390 20 69 73 20 73 65 74 20 74 6f 20 61 6e 20 0a 2a   is set to an .*
103a0 2a 20 20 20 20 20 61 72 62 69 74 72 61 72 79 20  *     arbitrary 
103b0 6e 6f 6e 2d 4e 55 4c 4c 20 70 6f 69 6e 74 65 72  non-NULL pointer
103c0 2e 20 20 54 68 65 20 62 4e 43 20 70 61 72 61 6d  .  The bNC param
103d0 65 74 65 72 20 69 73 20 6e 6f 74 20 75 73 65 64  eter is not used
103e0 2e 0a 2a 2a 0a 2a 2a 20 20 20 41 47 47 52 45 47  ..**.**   AGGREG
103f0 41 54 45 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c  ATE(zName, nArg,
10400 20 69 41 72 67 2c 20 62 4e 43 2c 20 78 53 74 65   iArg, bNC, xSte
10410 70 2c 20 78 46 69 6e 61 6c 29 0a 2a 2a 20 20 20  p, xFinal).**   
10420 20 20 55 73 65 64 20 74 6f 20 63 72 65 61 74 65    Used to create
10430 20 61 6e 20 61 67 67 72 65 67 61 74 65 20 66 75   an aggregate fu
10440 6e 63 74 69 6f 6e 20 64 65 66 69 6e 69 74 69 6f  nction definitio
10450 6e 20 69 6d 70 6c 65 6d 65 6e 74 65 64 20 62 79  n implemented by
10460 0a 2a 2a 20 20 20 20 20 74 68 65 20 43 20 66 75  .**     the C fu
10470 6e 63 74 69 6f 6e 73 20 78 53 74 65 70 20 61 6e  nctions xStep an
10480 64 20 78 46 69 6e 61 6c 2e 20 54 68 65 20 66 69  d xFinal. The fi
10490 72 73 74 20 66 6f 75 72 20 70 61 72 61 6d 65 74  rst four paramet
104a0 65 72 73 0a 2a 2a 20 20 20 20 20 61 72 65 20 69  ers.**     are i
104b0 6e 74 65 72 70 72 65 74 65 64 20 69 6e 20 74 68  nterpreted in th
104c0 65 20 73 61 6d 65 20 77 61 79 20 61 73 20 74 68  e same way as th
104d0 65 20 66 69 72 73 74 20 34 20 70 61 72 61 6d 65  e first 4 parame
104e0 74 65 72 73 20 74 6f 0a 2a 2a 20 20 20 20 20 46  ters to.**     F
104f0 55 4e 43 54 49 4f 4e 28 29 2e 0a 2a 2a 0a 2a 2a  UNCTION()..**.**
10500 20 20 20 57 46 55 4e 43 54 49 4f 4e 28 7a 4e 61     WFUNCTION(zNa
10510 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c 20  me, nArg, iArg, 
10520 78 53 74 65 70 2c 20 78 46 69 6e 61 6c 2c 20 78  xStep, xFinal, x
10530 56 61 6c 75 65 2c 20 78 49 6e 76 65 72 73 65 29  Value, xInverse)
10540 0a 2a 2a 20 20 20 20 20 55 73 65 64 20 74 6f 20  .**     Used to 
10550 63 72 65 61 74 65 20 61 6e 20 61 67 67 72 65 67  create an aggreg
10560 61 74 65 20 66 75 6e 63 74 69 6f 6e 20 64 65 66  ate function def
10570 69 6e 69 74 69 6f 6e 20 69 6d 70 6c 65 6d 65 6e  inition implemen
10580 74 65 64 20 62 79 0a 2a 2a 20 20 20 20 20 74 68  ted by.**     th
10590 65 20 43 20 66 75 6e 63 74 69 6f 6e 73 20 78 53  e C functions xS
105a0 74 65 70 20 61 6e 64 20 78 46 69 6e 61 6c 2e 20  tep and xFinal. 
105b0 54 68 65 20 66 69 72 73 74 20 66 6f 75 72 20 70  The first four p
105c0 61 72 61 6d 65 74 65 72 73 0a 2a 2a 20 20 20 20  arameters.**    
105d0 20 61 72 65 20 69 6e 74 65 72 70 72 65 74 65 64   are interpreted
105e0 20 69 6e 20 74 68 65 20 73 61 6d 65 20 77 61 79   in the same way
105f0 20 61 73 20 74 68 65 20 66 69 72 73 74 20 34 20   as the first 4 
10600 70 61 72 61 6d 65 74 65 72 73 20 74 6f 0a 2a 2a  parameters to.**
10610 20 20 20 20 20 46 55 4e 43 54 49 4f 4e 28 29 2e       FUNCTION().
10620 0a 2a 2a 0a 2a 2a 20 20 20 4c 49 4b 45 46 55 4e  .**.**   LIKEFUN
10630 43 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 70  C(zName, nArg, p
10640 41 72 67 2c 20 66 6c 61 67 73 29 0a 2a 2a 20 20  Arg, flags).**  
10650 20 20 20 55 73 65 64 20 74 6f 20 63 72 65 61 74     Used to creat
10660 65 20 61 20 73 63 61 6c 61 72 20 66 75 6e 63 74  e a scalar funct
10670 69 6f 6e 20 64 65 66 69 6e 69 74 69 6f 6e 20 6f  ion definition o
10680 66 20 61 20 66 75 6e 63 74 69 6f 6e 20 7a 4e 61  f a function zNa
10690 6d 65 0a 2a 2a 20 20 20 20 20 74 68 61 74 20 61  me.**     that a
106a0 63 63 65 70 74 73 20 6e 41 72 67 20 61 72 67 75  ccepts nArg argu
106b0 6d 65 6e 74 73 20 61 6e 64 20 69 73 20 69 6d 70  ments and is imp
106c0 6c 65 6d 65 6e 74 65 64 20 62 79 20 61 20 63 61  lemented by a ca
106d0 6c 6c 20 74 6f 20 43 0a 2a 2a 20 20 20 20 20 66  ll to C.**     f
106e0 75 6e 63 74 69 6f 6e 20 6c 69 6b 65 46 75 6e 63  unction likeFunc
106f0 2e 20 41 72 67 75 6d 65 6e 74 20 70 41 72 67 20  . Argument pArg 
10700 69 73 20 63 61 73 74 20 74 6f 20 61 20 28 76 6f  is cast to a (vo
10710 69 64 20 2a 29 20 61 6e 64 20 6d 61 64 65 0a 2a  id *) and made.*
10720 2a 20 20 20 20 20 61 76 61 69 6c 61 62 6c 65 20  *     available 
10730 61 73 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20  as the function 
10740 75 73 65 72 2d 64 61 74 61 20 28 73 71 6c 69 74  user-data (sqlit
10750 65 33 5f 75 73 65 72 5f 64 61 74 61 28 29 29 2e  e3_user_data()).
10760 20 54 68 65 0a 2a 2a 20 20 20 20 20 46 75 6e 63   The.**     Func
10770 44 65 66 2e 66 6c 61 67 73 20 76 61 72 69 61 62  Def.flags variab
10780 6c 65 20 69 73 20 73 65 74 20 74 6f 20 74 68 65  le is set to the
10790 20 76 61 6c 75 65 20 70 61 73 73 65 64 20 61 73   value passed as
107a0 20 74 68 65 20 66 6c 61 67 73 0a 2a 2a 20 20 20   the flags.**   
107b0 20 20 70 61 72 61 6d 65 74 65 72 2e 0a 2a 2f 0a    parameter..*/.
107c0 23 64 65 66 69 6e 65 20 46 55 4e 43 54 49 4f 4e  #define FUNCTION
107d0 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41  (zName, nArg, iA
107e0 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29 20  rg, bNC, xFunc) 
107f0 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54  \.  {nArg, SQLIT
10800 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 7c  E_FUNC_CONSTANT|
10810 53 51 4c 49 54 45 5f 55 54 46 38 7c 28 62 4e 43  SQLITE_UTF8|(bNC
10820 2a 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45  *SQLITE_FUNC_NEE
10830 44 43 4f 4c 4c 29 2c 20 5c 0a 20 20 20 53 51 4c  DCOLL), \.   SQL
10840 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 69  ITE_INT_TO_PTR(i
10850 41 72 67 29 2c 20 30 2c 20 78 46 75 6e 63 2c 20  Arg), 0, xFunc, 
10860 30 2c 20 30 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c  0, 0, 0, #zName,
10870 20 7b 30 7d 20 7d 0a 23 64 65 66 69 6e 65 20 56   {0} }.#define V
10880 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20  FUNCTION(zName, 
10890 6e 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c  nArg, iArg, bNC,
108a0 20 78 46 75 6e 63 29 20 5c 0a 20 20 7b 6e 41 72   xFunc) \.  {nAr
108b0 67 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 7c 28  g, SQLITE_UTF8|(
108c0 62 4e 43 2a 53 51 4c 49 54 45 5f 46 55 4e 43 5f  bNC*SQLITE_FUNC_
108d0 4e 45 45 44 43 4f 4c 4c 29 2c 20 5c 0a 20 20 20  NEEDCOLL), \.   
108e0 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54  SQLITE_INT_TO_PT
108f0 52 28 69 41 72 67 29 2c 20 30 2c 20 78 46 75 6e  R(iArg), 0, xFun
10900 63 2c 20 30 2c 20 30 2c 20 30 2c 20 23 7a 4e 61  c, 0, 0, 0, #zNa
10910 6d 65 2c 20 7b 30 7d 20 7d 0a 23 64 65 66 69 6e  me, {0} }.#defin
10920 65 20 44 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d  e DFUNCTION(zNam
10930 65 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c 20 62  e, nArg, iArg, b
10940 4e 43 2c 20 78 46 75 6e 63 29 20 5c 0a 20 20 7b  NC, xFunc) \.  {
10950 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f 46 55 4e  nArg, SQLITE_FUN
10960 43 5f 53 4c 4f 43 48 4e 47 7c 53 51 4c 49 54 45  C_SLOCHNG|SQLITE
10970 5f 55 54 46 38 2c 20 5c 0a 20 20 20 30 2c 20 30  _UTF8, \.   0, 0
10980 2c 20 78 46 75 6e 63 2c 20 30 2c 20 30 2c 20 30  , xFunc, 0, 0, 0
10990 2c 20 23 7a 4e 61 6d 65 2c 20 7b 30 7d 20 7d 0a  , #zName, {0} }.
109a0 23 64 65 66 69 6e 65 20 50 55 52 45 5f 44 41 54  #define PURE_DAT
109b0 45 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69  E(zName, nArg, i
109c0 41 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29  Arg, bNC, xFunc)
109d0 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49   \.  {nArg, SQLI
109e0 54 45 5f 46 55 4e 43 5f 53 4c 4f 43 48 4e 47 7c  TE_FUNC_SLOCHNG|
109f0 53 51 4c 49 54 45 5f 55 54 46 38 7c 53 51 4c 49  SQLITE_UTF8|SQLI
10a00 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54  TE_FUNC_CONSTANT
10a10 2c 20 5c 0a 20 20 20 28 76 6f 69 64 2a 29 26 73  , \.   (void*)&s
10a20 71 6c 69 74 65 33 43 6f 6e 66 69 67 2c 20 30 2c  qlite3Config, 0,
10a30 20 78 46 75 6e 63 2c 20 30 2c 20 30 2c 20 30 2c   xFunc, 0, 0, 0,
10a40 20 23 7a 4e 61 6d 65 2c 20 7b 30 7d 20 7d 0a 23   #zName, {0} }.#
10a50 64 65 66 69 6e 65 20 46 55 4e 43 54 49 4f 4e 32  define FUNCTION2
10a60 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41  (zName, nArg, iA
10a70 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63 2c 20  rg, bNC, xFunc, 
10a80 65 78 74 72 61 46 6c 61 67 73 29 20 5c 0a 20 20  extraFlags) \.  
10a90 7b 6e 41 72 67 2c 53 51 4c 49 54 45 5f 46 55 4e  {nArg,SQLITE_FUN
10aa0 43 5f 43 4f 4e 53 54 41 4e 54 7c 53 51 4c 49 54  C_CONSTANT|SQLIT
10ab0 45 5f 55 54 46 38 7c 28 62 4e 43 2a 53 51 4c 49  E_UTF8|(bNC*SQLI
10ac0 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c  TE_FUNC_NEEDCOLL
10ad0 29 7c 65 78 74 72 61 46 6c 61 67 73 2c 5c 0a 20  )|extraFlags,\. 
10ae0 20 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f    SQLITE_INT_TO_
10af0 50 54 52 28 69 41 72 67 29 2c 20 30 2c 20 78 46  PTR(iArg), 0, xF
10b00 75 6e 63 2c 20 30 2c 20 30 2c 20 30 2c 20 23 7a  unc, 0, 0, 0, #z
10b10 4e 61 6d 65 2c 20 7b 30 7d 20 7d 0a 23 64 65 66  Name, {0} }.#def
10b20 69 6e 65 20 53 54 52 5f 46 55 4e 43 54 49 4f 4e  ine STR_FUNCTION
10b30 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 70 41  (zName, nArg, pA
10b40 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29 20  rg, bNC, xFunc) 
10b50 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54  \.  {nArg, SQLIT
10b60 45 5f 46 55 4e 43 5f 53 4c 4f 43 48 4e 47 7c 53  E_FUNC_SLOCHNG|S
10b70 51 4c 49 54 45 5f 55 54 46 38 7c 28 62 4e 43 2a  QLITE_UTF8|(bNC*
10b80 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44  SQLITE_FUNC_NEED
10b90 43 4f 4c 4c 29 2c 20 5c 0a 20 20 20 70 41 72 67  COLL), \.   pArg
10ba0 2c 20 30 2c 20 78 46 75 6e 63 2c 20 30 2c 20 30  , 0, xFunc, 0, 0
10bb0 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c 20 7d 0a 23  , 0, #zName, }.#
10bc0 64 65 66 69 6e 65 20 4c 49 4b 45 46 55 4e 43 28  define LIKEFUNC(
10bd0 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 61 72 67  zName, nArg, arg
10be0 2c 20 66 6c 61 67 73 29 20 5c 0a 20 20 7b 6e 41  , flags) \.  {nA
10bf0 72 67 2c 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f  rg, SQLITE_FUNC_
10c00 43 4f 4e 53 54 41 4e 54 7c 53 51 4c 49 54 45 5f  CONSTANT|SQLITE_
10c10 55 54 46 38 7c 66 6c 61 67 73 2c 20 5c 0a 20 20  UTF8|flags, \.  
10c20 20 28 76 6f 69 64 20 2a 29 61 72 67 2c 20 30 2c   (void *)arg, 0,
10c30 20 6c 69 6b 65 46 75 6e 63 2c 20 30 2c 20 30 2c   likeFunc, 0, 0,
10c40 20 30 2c 20 23 7a 4e 61 6d 65 2c 20 7b 30 7d 20   0, #zName, {0} 
10c50 7d 0a 23 64 65 66 69 6e 65 20 41 47 47 52 45 47  }.#define AGGREG
10c60 41 54 45 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c  ATE(zName, nArg,
10c70 20 61 72 67 2c 20 6e 63 2c 20 78 53 74 65 70 2c   arg, nc, xStep,
10c80 20 78 46 69 6e 61 6c 2c 20 78 56 61 6c 75 65 29   xFinal, xValue)
10c90 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49   \.  {nArg, SQLI
10ca0 54 45 5f 55 54 46 38 7c 28 6e 63 2a 53 51 4c 49  TE_UTF8|(nc*SQLI
10cb0 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c  TE_FUNC_NEEDCOLL
10cc0 29 2c 20 5c 0a 20 20 20 53 51 4c 49 54 45 5f 49  ), \.   SQLITE_I
10cd0 4e 54 5f 54 4f 5f 50 54 52 28 61 72 67 29 2c 20  NT_TO_PTR(arg), 
10ce0 30 2c 20 78 53 74 65 70 2c 78 46 69 6e 61 6c 2c  0, xStep,xFinal,
10cf0 78 56 61 6c 75 65 2c 30 2c 23 7a 4e 61 6d 65 2c  xValue,0,#zName,
10d00 20 7b 30 7d 7d 0a 23 64 65 66 69 6e 65 20 41 47   {0}}.#define AG
10d10 47 52 45 47 41 54 45 32 28 7a 4e 61 6d 65 2c 20  GREGATE2(zName, 
10d20 6e 41 72 67 2c 20 61 72 67 2c 20 6e 63 2c 20 78  nArg, arg, nc, x
10d30 53 74 65 70 2c 20 78 46 69 6e 61 6c 2c 20 65 78  Step, xFinal, ex
10d40 74 72 61 46 6c 61 67 73 29 20 5c 0a 20 20 7b 6e  traFlags) \.  {n
10d50 41 72 67 2c 20 53 51 4c 49 54 45 5f 55 54 46 38  Arg, SQLITE_UTF8
10d60 7c 28 6e 63 2a 53 51 4c 49 54 45 5f 46 55 4e 43  |(nc*SQLITE_FUNC
10d70 5f 4e 45 45 44 43 4f 4c 4c 29 7c 65 78 74 72 61  _NEEDCOLL)|extra
10d80 46 6c 61 67 73 2c 20 5c 0a 20 20 20 53 51 4c 49  Flags, \.   SQLI
10d90 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 61 72  TE_INT_TO_PTR(ar
10da0 67 29 2c 20 30 2c 20 78 53 74 65 70 2c 78 46 69  g), 0, xStep,xFi
10db0 6e 61 6c 2c 78 46 69 6e 61 6c 2c 30 2c 23 7a 4e  nal,xFinal,0,#zN
10dc0 61 6d 65 2c 20 7b 30 7d 7d 0a 0a 23 64 65 66 69  ame, {0}}..#defi
10dd0 6e 65 20 57 41 47 47 52 45 47 41 54 45 28 7a 4e  ne WAGGREGATE(zN
10de0 61 6d 65 2c 20 6e 41 72 67 2c 20 61 72 67 2c 20  ame, nArg, arg, 
10df0 6e 63 2c 20 78 53 74 65 70 2c 20 78 46 69 6e 61  nc, xStep, xFina
10e00 6c 2c 20 78 56 61 6c 75 65 2c 20 78 49 6e 76 65  l, xValue, xInve
10e10 72 73 65 2c 20 66 29 20 5c 0a 20 20 7b 6e 41 72  rse, f) \.  {nAr
10e20 67 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 7c 28  g, SQLITE_UTF8|(
10e30 6e 63 2a 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e  nc*SQLITE_FUNC_N
10e40 45 45 44 43 4f 4c 4c 29 7c 66 2c 20 5c 0a 20 20  EEDCOLL)|f, \.  
10e50 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50   SQLITE_INT_TO_P
10e60 54 52 28 61 72 67 29 2c 20 30 2c 20 78 53 74 65  TR(arg), 0, xSte
10e70 70 2c 78 46 69 6e 61 6c 2c 78 56 61 6c 75 65 2c  p,xFinal,xValue,
10e80 78 49 6e 76 65 72 73 65 2c 23 7a 4e 61 6d 65 2c  xInverse,#zName,
10e90 20 7b 30 7d 7d 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c   {0}}../*.** All
10ea0 20 63 75 72 72 65 6e 74 20 73 61 76 65 70 6f 69   current savepoi
10eb0 6e 74 73 20 61 72 65 20 73 74 6f 72 65 64 20 69  nts are stored i
10ec0 6e 20 61 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20  n a linked list 
10ed0 73 74 61 72 74 69 6e 67 20 61 74 0a 2a 2a 20 73  starting at.** s
10ee0 71 6c 69 74 65 33 2e 70 53 61 76 65 70 6f 69 6e  qlite3.pSavepoin
10ef0 74 2e 20 54 68 65 20 66 69 72 73 74 20 65 6c 65  t. The first ele
10f00 6d 65 6e 74 20 69 6e 20 74 68 65 20 6c 69 73 74  ment in the list
10f10 20 69 73 20 74 68 65 20 6d 6f 73 74 20 72 65 63   is the most rec
10f20 65 6e 74 6c 79 0a 2a 2a 20 6f 70 65 6e 65 64 20  ently.** opened 
10f30 73 61 76 65 70 6f 69 6e 74 2e 20 53 61 76 65 70  savepoint. Savep
10f40 6f 69 6e 74 73 20 61 72 65 20 61 64 64 65 64 20  oints are added 
10f50 74 6f 20 74 68 65 20 6c 69 73 74 20 62 79 20 74  to the list by t
10f60 68 65 20 76 64 62 65 0a 2a 2a 20 4f 50 5f 53 61  he vdbe.** OP_Sa
10f70 76 65 70 6f 69 6e 74 20 69 6e 73 74 72 75 63 74  vepoint instruct
10f80 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53  ion..*/.struct S
10f90 61 76 65 70 6f 69 6e 74 20 7b 0a 20 20 63 68 61  avepoint {.  cha
10fa0 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20  r *zName;       
10fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10fc0 20 2f 2a 20 53 61 76 65 70 6f 69 6e 74 20 6e 61   /* Savepoint na
10fd0 6d 65 20 28 6e 75 6c 2d 74 65 72 6d 69 6e 61 74  me (nul-terminat
10fe0 65 64 29 20 2a 2f 0a 20 20 69 36 34 20 6e 44 65  ed) */.  i64 nDe
10ff0 66 65 72 72 65 64 43 6f 6e 73 3b 20 20 20 20 20  ferredCons;     
11000 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
11010 4e 75 6d 62 65 72 20 6f 66 20 64 65 66 65 72 72  Number of deferr
11020 65 64 20 66 6b 20 76 69 6f 6c 61 74 69 6f 6e 73  ed fk violations
11030 20 2a 2f 0a 20 20 69 36 34 20 6e 44 65 66 65 72   */.  i64 nDefer
11040 72 65 64 49 6d 6d 43 6f 6e 73 3b 20 20 20 20 20  redImmCons;     
11050 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
11060 62 65 72 20 6f 66 20 64 65 66 65 72 72 65 64 20  ber of deferred 
11070 69 6d 6d 20 66 6b 2e 20 2a 2f 0a 20 20 53 61 76  imm fk. */.  Sav
11080 65 70 6f 69 6e 74 20 2a 70 4e 65 78 74 3b 20 20  epoint *pNext;  
11090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
110a0 20 2f 2a 20 50 61 72 65 6e 74 20 73 61 76 65 70   /* Parent savep
110b0 6f 69 6e 74 20 28 69 66 20 61 6e 79 29 20 2a 2f  oint (if any) */
110c0 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66  .};../*.** The f
110d0 6f 6c 6c 6f 77 69 6e 67 20 61 72 65 20 75 73 65  ollowing are use
110e0 64 20 61 73 20 74 68 65 20 73 65 63 6f 6e 64 20  d as the second 
110f0 70 61 72 61 6d 65 74 65 72 20 74 6f 20 73 71 6c  parameter to sql
11100 69 74 65 33 53 61 76 65 70 6f 69 6e 74 28 29 2c  ite3Savepoint(),
11110 0a 2a 2a 20 61 6e 64 20 61 73 20 74 68 65 20 50  .** and as the P
11120 31 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 74 68  1 argument to th
11130 65 20 4f 50 5f 53 61 76 65 70 6f 69 6e 74 20 69  e OP_Savepoint i
11140 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 23  nstruction..*/.#
11150 64 65 66 69 6e 65 20 53 41 56 45 50 4f 49 4e 54  define SAVEPOINT
11160 5f 42 45 47 49 4e 20 20 20 20 20 20 30 0a 23 64  _BEGIN      0.#d
11170 65 66 69 6e 65 20 53 41 56 45 50 4f 49 4e 54 5f  efine SAVEPOINT_
11180 52 45 4c 45 41 53 45 20 20 20 20 31 0a 23 64 65  RELEASE    1.#de
11190 66 69 6e 65 20 53 41 56 45 50 4f 49 4e 54 5f 52  fine SAVEPOINT_R
111a0 4f 4c 4c 42 41 43 4b 20 20 20 32 0a 0a 0a 2f 2a  OLLBACK   2.../*
111b0 0a 2a 2a 20 45 61 63 68 20 53 51 4c 69 74 65 20  .** Each SQLite 
111c0 6d 6f 64 75 6c 65 20 28 76 69 72 74 75 61 6c 20  module (virtual 
111d0 74 61 62 6c 65 20 64 65 66 69 6e 69 74 69 6f 6e  table definition
111e0 29 20 69 73 20 64 65 66 69 6e 65 64 20 62 79 20  ) is defined by 
111f0 61 6e 0a 2a 2a 20 69 6e 73 74 61 6e 63 65 20 6f  an.** instance o
11200 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  f the following 
11210 73 74 72 75 63 74 75 72 65 2c 20 73 74 6f 72 65  structure, store
11220 64 20 69 6e 20 74 68 65 20 73 71 6c 69 74 65 33  d in the sqlite3
11230 2e 61 4d 6f 64 75 6c 65 0a 2a 2a 20 68 61 73 68  .aModule.** hash
11240 20 74 61 62 6c 65 2e 0a 2a 2f 0a 73 74 72 75 63   table..*/.struc
11250 74 20 4d 6f 64 75 6c 65 20 7b 0a 20 20 63 6f 6e  t Module {.  con
11260 73 74 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c  st sqlite3_modul
11270 65 20 2a 70 4d 6f 64 75 6c 65 3b 20 20 20 20 20  e *pModule;     
11280 20 20 2f 2a 20 43 61 6c 6c 62 61 63 6b 20 70 6f    /* Callback po
11290 69 6e 74 65 72 73 20 2a 2f 0a 20 20 63 6f 6e 73  inters */.  cons
112a0 74 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20  t char *zName;  
112b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
112c0 20 2f 2a 20 4e 61 6d 65 20 70 61 73 73 65 64 20   /* Name passed 
112d0 74 6f 20 63 72 65 61 74 65 5f 6d 6f 64 75 6c 65  to create_module
112e0 28 29 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 41  () */.  void *pA
112f0 75 78 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ux;             
11300 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
11310 70 41 75 78 20 70 61 73 73 65 64 20 74 6f 20 63  pAux passed to c
11320 72 65 61 74 65 5f 6d 6f 64 75 6c 65 28 29 20 2a  reate_module() *
11330 2f 0a 20 20 76 6f 69 64 20 28 2a 78 44 65 73 74  /.  void (*xDest
11340 72 6f 79 29 28 76 6f 69 64 20 2a 29 3b 20 20 20  roy)(void *);   
11350 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 6f 64 75           /* Modu
11360 6c 65 20 64 65 73 74 72 75 63 74 6f 72 20 66 75  le destructor fu
11370 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 54 61 62 6c  nction */.  Tabl
11380 65 20 2a 70 45 70 6f 54 61 62 3b 20 20 20 20 20  e *pEpoTab;     
11390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
113a0 20 2f 2a 20 45 70 6f 6e 79 6d 6f 75 73 20 74 61   /* Eponymous ta
113b0 62 6c 65 20 66 6f 72 20 74 68 69 73 20 6d 6f 64  ble for this mod
113c0 75 6c 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  ule */.};../*.**
113d0 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f   information abo
113e0 75 74 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 6f  ut each column o
113f0 66 20 61 6e 20 53 51 4c 20 74 61 62 6c 65 20 69  f an SQL table i
11400 73 20 68 65 6c 64 20 69 6e 20 61 6e 20 69 6e 73  s held in an ins
11410 74 61 6e 63 65 0a 2a 2a 20 6f 66 20 74 68 69 73  tance.** of this
11420 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2f 0a 73   structure..*/.s
11430 74 72 75 63 74 20 43 6f 6c 75 6d 6e 20 7b 0a 20  truct Column {. 
11440 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20   char *zName;   
11450 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 69    /* Name of thi
11460 73 20 63 6f 6c 75 6d 6e 2c 20 5c 30 30 30 2c 20  s column, \000, 
11470 74 68 65 6e 20 74 68 65 20 74 79 70 65 20 2a 2f  then the type */
11480 0a 20 20 45 78 70 72 20 2a 70 44 66 6c 74 3b 20  .  Expr *pDflt; 
11490 20 20 20 20 2f 2a 20 44 65 66 61 75 6c 74 20 76      /* Default v
114a0 61 6c 75 65 20 6f 66 20 74 68 69 73 20 63 6f 6c  alue of this col
114b0 75 6d 6e 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a  umn */.  char *z
114c0 43 6f 6c 6c 3b 20 20 20 20 20 2f 2a 20 43 6f 6c  Coll;     /* Col
114d0 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 2e  lating sequence.
114e0 20 20 49 66 20 4e 55 4c 4c 2c 20 75 73 65 20 74    If NULL, use t
114f0 68 65 20 64 65 66 61 75 6c 74 20 2a 2f 0a 20 20  he default */.  
11500 75 38 20 6e 6f 74 4e 75 6c 6c 3b 20 20 20 20 20  u8 notNull;     
11510 20 2f 2a 20 41 6e 20 4f 45 5f 20 63 6f 64 65 20   /* An OE_ code 
11520 66 6f 72 20 68 61 6e 64 6c 69 6e 67 20 61 20 4e  for handling a N
11530 4f 54 20 4e 55 4c 4c 20 63 6f 6e 73 74 72 61 69  OT NULL constrai
11540 6e 74 20 2a 2f 0a 20 20 63 68 61 72 20 61 66 66  nt */.  char aff
11550 69 6e 69 74 79 3b 20 20 20 2f 2a 20 4f 6e 65 20  inity;   /* One 
11560 6f 66 20 74 68 65 20 53 51 4c 49 54 45 5f 41 46  of the SQLITE_AF
11570 46 5f 2e 2e 2e 20 76 61 6c 75 65 73 20 2a 2f 0a  F_... values */.
11580 20 20 75 38 20 73 7a 45 73 74 3b 20 20 20 20 20    u8 szEst;     
11590 20 20 20 2f 2a 20 45 73 74 69 6d 61 74 65 64 20     /* Estimated 
115a0 73 69 7a 65 20 6f 66 20 76 61 6c 75 65 20 69 6e  size of value in
115b0 20 74 68 69 73 20 63 6f 6c 75 6d 6e 2e 20 73 69   this column. si
115c0 7a 65 6f 66 28 49 4e 54 29 3d 3d 31 20 2a 2f 0a  zeof(INT)==1 */.
115d0 20 20 75 38 20 63 6f 6c 46 6c 61 67 73 3b 20 20    u8 colFlags;  
115e0 20 20 20 2f 2a 20 42 6f 6f 6c 65 61 6e 20 70 72     /* Boolean pr
115f0 6f 70 65 72 74 69 65 73 2e 20 20 53 65 65 20 43  operties.  See C
11600 4f 4c 46 4c 41 47 5f 20 64 65 66 69 6e 65 73 20  OLFLAG_ defines 
11610 62 65 6c 6f 77 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 20  below */.};../* 
11620 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20 66  Allowed values f
11630 6f 72 20 43 6f 6c 75 6d 6e 2e 63 6f 6c 46 6c 61  or Column.colFla
11640 67 73 3a 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 43  gs:.*/.#define C
11650 4f 4c 46 4c 41 47 5f 50 52 49 4d 4b 45 59 20 20  OLFLAG_PRIMKEY  
11660 30 78 30 30 30 31 20 20 20 20 2f 2a 20 43 6f 6c  0x0001    /* Col
11670 75 6d 6e 20 69 73 20 70 61 72 74 20 6f 66 20 74  umn is part of t
11680 68 65 20 70 72 69 6d 61 72 79 20 6b 65 79 20 2a  he primary key *
11690 2f 0a 23 64 65 66 69 6e 65 20 43 4f 4c 46 4c 41  /.#define COLFLA
116a0 47 5f 48 49 44 44 45 4e 20 20 20 30 78 30 30 30  G_HIDDEN   0x000
116b0 32 20 20 20 20 2f 2a 20 41 20 68 69 64 64 65 6e  2    /* A hidden
116c0 20 63 6f 6c 75 6d 6e 20 69 6e 20 61 20 76 69 72   column in a vir
116d0 74 75 61 6c 20 74 61 62 6c 65 20 2a 2f 0a 23 64  tual table */.#d
116e0 65 66 69 6e 65 20 43 4f 4c 46 4c 41 47 5f 48 41  efine COLFLAG_HA
116f0 53 54 59 50 45 20 20 30 78 30 30 30 34 20 20 20  STYPE  0x0004   
11700 20 2f 2a 20 54 79 70 65 20 6e 61 6d 65 20 66 6f   /* Type name fo
11710 6c 6c 6f 77 73 20 63 6f 6c 75 6d 6e 20 6e 61 6d  llows column nam
11720 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 43 4f 4c  e */.#define COL
11730 46 4c 41 47 5f 55 4e 49 51 55 45 20 20 20 30 78  FLAG_UNIQUE   0x
11740 30 30 30 38 20 20 20 20 2f 2a 20 43 6f 6c 75 6d  0008    /* Colum
11750 6e 20 64 65 66 20 63 6f 6e 74 61 69 6e 73 20 22  n def contains "
11760 55 4e 49 51 55 45 22 20 6f 72 20 22 50 4b 22 20  UNIQUE" or "PK" 
11770 2a 2f 0a 23 64 65 66 69 6e 65 20 43 4f 4c 46 4c  */.#define COLFL
11780 41 47 5f 53 4f 52 54 45 52 52 45 46 20 30 78 30  AG_SORTERREF 0x0
11790 30 31 30 20 20 20 2f 2a 20 55 73 65 20 73 6f 72  010   /* Use sor
117a0 74 65 72 2d 72 65 66 73 20 77 69 74 68 20 74 68  ter-refs with th
117b0 69 73 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 0a 2f 2a  is column */../*
117c0 0a 2a 2a 20 41 20 22 43 6f 6c 6c 61 74 69 6e 67  .** A "Collating
117d0 20 53 65 71 75 65 6e 63 65 22 20 69 73 20 64 65   Sequence" is de
117e0 66 69 6e 65 64 20 62 79 20 61 6e 20 69 6e 73 74  fined by an inst
117f0 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c  ance of the foll
11800 6f 77 69 6e 67 0a 2a 2a 20 73 74 72 75 63 74 75  owing.** structu
11810 72 65 2e 20 43 6f 6e 63 65 70 74 75 61 6c 6c 79  re. Conceptually
11820 2c 20 61 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65  , a collating se
11830 71 75 65 6e 63 65 20 63 6f 6e 73 69 73 74 73 20  quence consists 
11840 6f 66 20 61 20 6e 61 6d 65 20 61 6e 64 0a 2a 2a  of a name and.**
11850 20 61 20 63 6f 6d 70 61 72 69 73 6f 6e 20 72 6f   a comparison ro
11860 75 74 69 6e 65 20 74 68 61 74 20 64 65 66 69 6e  utine that defin
11870 65 73 20 74 68 65 20 6f 72 64 65 72 20 6f 66 20  es the order of 
11880 74 68 61 74 20 73 65 71 75 65 6e 63 65 2e 0a 2a  that sequence..*
11890 2a 0a 2a 2a 20 49 66 20 43 6f 6c 6c 53 65 71 2e  *.** If CollSeq.
118a0 78 43 6d 70 20 69 73 20 4e 55 4c 4c 2c 20 69 74  xCmp is NULL, it
118b0 20 6d 65 61 6e 73 20 74 68 61 74 20 74 68 65 0a   means that the.
118c0 2a 2a 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71  ** collating seq
118d0 75 65 6e 63 65 20 69 73 20 75 6e 64 65 66 69 6e  uence is undefin
118e0 65 64 2e 20 20 49 6e 64 69 63 65 73 20 62 75 69  ed.  Indices bui
118f0 6c 74 20 6f 6e 20 61 6e 20 75 6e 64 65 66 69 6e  lt on an undefin
11900 65 64 0a 2a 2a 20 63 6f 6c 6c 61 74 69 6e 67 20  ed.** collating 
11910 73 65 71 75 65 6e 63 65 20 6d 61 79 20 6e 6f 74  sequence may not
11920 20 62 65 20 72 65 61 64 20 6f 72 20 77 72 69 74   be read or writ
11930 74 65 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 43  ten..*/.struct C
11940 6f 6c 6c 53 65 71 20 7b 0a 20 20 63 68 61 72 20  ollSeq {.  char 
11950 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20  *zName;         
11960 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65 20   /* Name of the 
11970 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e  collating sequen
11980 63 65 2c 20 55 54 46 2d 38 20 65 6e 63 6f 64 65  ce, UTF-8 encode
11990 64 20 2a 2f 0a 20 20 75 38 20 65 6e 63 3b 20 20  d */.  u8 enc;  
119a0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
119b0 54 65 78 74 20 65 6e 63 6f 64 69 6e 67 20 68 61  Text encoding ha
119c0 6e 64 6c 65 64 20 62 79 20 78 43 6d 70 28 29 20  ndled by xCmp() 
119d0 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 55 73 65 72  */.  void *pUser
119e0 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 69  ;          /* Fi
119f0 72 73 74 20 61 72 67 75 6d 65 6e 74 20 74 6f 20  rst argument to 
11a00 78 43 6d 70 28 29 20 2a 2f 0a 20 20 69 6e 74 20  xCmp() */.  int 
11a10 28 2a 78 43 6d 70 29 28 76 6f 69 64 2a 2c 69 6e  (*xCmp)(void*,in
11a20 74 2c 20 63 6f 6e 73 74 20 76 6f 69 64 2a 2c 20  t, const void*, 
11a30 69 6e 74 2c 20 63 6f 6e 73 74 20 76 6f 69 64 2a  int, const void*
11a40 29 3b 0a 20 20 76 6f 69 64 20 28 2a 78 44 65 6c  );.  void (*xDel
11a50 29 28 76 6f 69 64 2a 29 3b 20 20 2f 2a 20 44 65  )(void*);  /* De
11a60 73 74 72 75 63 74 6f 72 20 66 6f 72 20 70 55 73  structor for pUs
11a70 65 72 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  er */.};../*.** 
11a80 41 20 73 6f 72 74 20 6f 72 64 65 72 20 63 61 6e  A sort order can
11a90 20 62 65 20 65 69 74 68 65 72 20 41 53 43 20 6f   be either ASC o
11aa0 72 20 44 45 53 43 2e 0a 2a 2f 0a 23 64 65 66 69  r DESC..*/.#defi
11ab0 6e 65 20 53 51 4c 49 54 45 5f 53 4f 5f 41 53 43  ne SQLITE_SO_ASC
11ac0 20 20 20 20 20 20 20 30 20 20 2f 2a 20 53 6f 72         0  /* Sor
11ad0 74 20 69 6e 20 61 73 63 65 6e 64 69 6e 67 20 6f  t in ascending o
11ae0 72 64 65 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20  rder */.#define 
11af0 53 51 4c 49 54 45 5f 53 4f 5f 44 45 53 43 20 20  SQLITE_SO_DESC  
11b00 20 20 20 20 31 20 20 2f 2a 20 53 6f 72 74 20 69      1  /* Sort i
11b10 6e 20 61 73 63 65 6e 64 69 6e 67 20 6f 72 64 65  n ascending orde
11b20 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  r */.#define SQL
11b30 49 54 45 5f 53 4f 5f 55 4e 44 45 46 49 4e 45 44  ITE_SO_UNDEFINED
11b40 20 2d 31 20 2f 2a 20 4e 6f 20 73 6f 72 74 20 6f   -1 /* No sort o
11b50 72 64 65 72 20 73 70 65 63 69 66 69 65 64 20 2a  rder specified *
11b60 2f 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6c 75 6d 6e 20  /../*.** Column 
11b70 61 66 66 69 6e 69 74 79 20 74 79 70 65 73 2e 0a  affinity types..
11b80 2a 2a 0a 2a 2a 20 54 68 65 73 65 20 75 73 65 64  **.** These used
11b90 20 74 6f 20 68 61 76 65 20 6d 6e 65 6d 6f 6e 69   to have mnemoni
11ba0 63 20 6e 61 6d 65 20 6c 69 6b 65 20 27 69 27 20  c name like 'i' 
11bb0 66 6f 72 20 53 51 4c 49 54 45 5f 41 46 46 5f 49  for SQLITE_AFF_I
11bc0 4e 54 45 47 45 52 20 61 6e 64 0a 2a 2a 20 27 74  NTEGER and.** 't
11bd0 27 20 66 6f 72 20 53 51 4c 49 54 45 5f 41 46 46  ' for SQLITE_AFF
11be0 5f 54 45 58 54 2e 20 20 42 75 74 20 77 65 20 63  _TEXT.  But we c
11bf0 61 6e 20 73 61 76 65 20 61 20 6c 69 74 74 6c 65  an save a little
11c00 20 73 70 61 63 65 20 61 6e 64 20 69 6d 70 72 6f   space and impro
11c10 76 65 0a 2a 2a 20 74 68 65 20 73 70 65 65 64 20  ve.** the speed 
11c20 61 20 6c 69 74 74 6c 65 20 62 79 20 6e 75 6d 62  a little by numb
11c30 65 72 69 6e 67 20 74 68 65 20 76 61 6c 75 65 73  ering the values
11c40 20 63 6f 6e 73 65 63 75 74 69 76 65 6c 79 2e 0a   consecutively..
11c50 2a 2a 0a 2a 2a 20 42 75 74 20 72 61 74 68 65 72  **.** But rather
11c60 20 74 68 61 6e 20 73 74 61 72 74 20 77 69 74 68   than start with
11c70 20 30 20 6f 72 20 31 2c 20 77 65 20 62 65 67 69   0 or 1, we begi
11c80 6e 20 77 69 74 68 20 27 41 27 2e 20 20 54 68 61  n with 'A'.  Tha
11c90 74 20 77 61 79 2c 0a 2a 2a 20 77 68 65 6e 20 6d  t way,.** when m
11ca0 75 6c 74 69 70 6c 65 20 61 66 66 69 6e 69 74 79  ultiple affinity
11cb0 20 74 79 70 65 73 20 61 72 65 20 63 6f 6e 63 61   types are conca
11cc0 74 65 6e 61 74 65 64 20 69 6e 74 6f 20 61 20 73  tenated into a s
11cd0 74 72 69 6e 67 20 61 6e 64 0a 2a 2a 20 75 73 65  tring and.** use
11ce0 64 20 61 73 20 74 68 65 20 50 34 20 6f 70 65 72  d as the P4 oper
11cf0 61 6e 64 2c 20 74 68 65 79 20 77 69 6c 6c 20 62  and, they will b
11d00 65 20 6d 6f 72 65 20 72 65 61 64 61 62 6c 65 2e  e more readable.
11d10 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65 20 61 6c 73 6f  .**.** Note also
11d20 20 74 68 61 74 20 74 68 65 20 6e 75 6d 65 72 69   that the numeri
11d30 63 20 74 79 70 65 73 20 61 72 65 20 67 72 6f 75  c types are grou
11d40 70 65 64 20 74 6f 67 65 74 68 65 72 20 73 6f 20  ped together so 
11d50 74 68 61 74 20 74 65 73 74 69 6e 67 0a 2a 2a 20  that testing.** 
11d60 66 6f 72 20 61 20 6e 75 6d 65 72 69 63 20 74 79  for a numeric ty
11d70 70 65 20 69 73 20 61 20 73 69 6e 67 6c 65 20 63  pe is a single c
11d80 6f 6d 70 61 72 69 73 6f 6e 2e 20 20 41 6e 64 20  omparison.  And 
11d90 74 68 65 20 42 4c 4f 42 20 74 79 70 65 20 69 73  the BLOB type is
11da0 20 66 69 72 73 74 2e 0a 2a 2f 0a 23 64 65 66 69   first..*/.#defi
11db0 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 42 4c  ne SQLITE_AFF_BL
11dc0 4f 42 20 20 20 20 20 27 41 27 0a 23 64 65 66 69  OB     'A'.#defi
11dd0 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 54 45  ne SQLITE_AFF_TE
11de0 58 54 20 20 20 20 20 27 42 27 0a 23 64 65 66 69  XT     'B'.#defi
11df0 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 4e 55  ne SQLITE_AFF_NU
11e00 4d 45 52 49 43 20 20 27 43 27 0a 23 64 65 66 69  MERIC  'C'.#defi
11e10 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 49 4e  ne SQLITE_AFF_IN
11e20 54 45 47 45 52 20 20 27 44 27 0a 23 64 65 66 69  TEGER  'D'.#defi
11e30 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 52 45  ne SQLITE_AFF_RE
11e40 41 4c 20 20 20 20 20 27 45 27 0a 0a 23 64 65 66  AL     'E'..#def
11e50 69 6e 65 20 73 71 6c 69 74 65 33 49 73 4e 75 6d  ine sqlite3IsNum
11e60 65 72 69 63 41 66 66 69 6e 69 74 79 28 58 29 20  ericAffinity(X) 
11e70 20 28 28 58 29 3e 3d 53 51 4c 49 54 45 5f 41 46   ((X)>=SQLITE_AF
11e80 46 5f 4e 55 4d 45 52 49 43 29 0a 0a 2f 2a 0a 2a  F_NUMERIC)../*.*
11e90 2a 20 54 68 65 20 53 51 4c 49 54 45 5f 41 46 46  * The SQLITE_AFF
11ea0 5f 4d 41 53 4b 20 76 61 6c 75 65 73 20 6d 61 73  _MASK values mas
11eb0 6b 73 20 6f 66 66 20 74 68 65 20 73 69 67 6e 69  ks off the signi
11ec0 66 69 63 61 6e 74 20 62 69 74 73 20 6f 66 20 61  ficant bits of a
11ed0 6e 0a 2a 2a 20 61 66 66 69 6e 69 74 79 20 76 61  n.** affinity va
11ee0 6c 75 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  lue..*/.#define 
11ef0 53 51 4c 49 54 45 5f 41 46 46 5f 4d 41 53 4b 20  SQLITE_AFF_MASK 
11f00 20 20 20 20 30 78 34 37 0a 0a 2f 2a 0a 2a 2a 20      0x47../*.** 
11f10 41 64 64 69 74 69 6f 6e 61 6c 20 62 69 74 20 76  Additional bit v
11f20 61 6c 75 65 73 20 74 68 61 74 20 63 61 6e 20 62  alues that can b
11f30 65 20 4f 52 65 64 20 77 69 74 68 20 61 6e 20 61  e ORed with an a
11f40 66 66 69 6e 69 74 79 20 77 69 74 68 6f 75 74 0a  ffinity without.
11f50 2a 2a 20 63 68 61 6e 67 69 6e 67 20 74 68 65 20  ** changing the 
11f60 61 66 66 69 6e 69 74 79 2e 0a 2a 2a 0a 2a 2a 20  affinity..**.** 
11f70 54 68 65 20 53 51 4c 49 54 45 5f 4e 4f 54 4e 55  The SQLITE_NOTNU
11f80 4c 4c 20 66 6c 61 67 20 69 73 20 61 20 63 6f 6d  LL flag is a com
11f90 62 69 6e 61 74 69 6f 6e 20 6f 66 20 4e 55 4c 4c  bination of NULL
11fa0 45 51 20 61 6e 64 20 4a 55 4d 50 49 46 4e 55 4c  EQ and JUMPIFNUL
11fb0 4c 2e 0a 2a 2a 20 49 74 20 63 61 75 73 65 73 20  L..** It causes 
11fc0 61 6e 20 61 73 73 65 72 74 28 29 20 74 6f 20 66  an assert() to f
11fd0 69 72 65 20 69 66 20 65 69 74 68 65 72 20 6f 70  ire if either op
11fe0 65 72 61 6e 64 20 74 6f 20 61 20 63 6f 6d 70 61  erand to a compa
11ff0 72 69 73 6f 6e 0a 2a 2a 20 6f 70 65 72 61 74 6f  rison.** operato
12000 72 20 69 73 20 4e 55 4c 4c 2e 20 20 49 74 20 69  r is NULL.  It i
12010 73 20 61 64 64 65 64 20 74 6f 20 63 65 72 74 61  s added to certa
12020 69 6e 20 63 6f 6d 70 61 72 69 73 6f 6e 20 6f 70  in comparison op
12030 65 72 61 74 6f 72 73 20 74 6f 0a 2a 2a 20 70 72  erators to.** pr
12040 6f 76 65 20 74 68 61 74 20 74 68 65 20 6f 70 65  ove that the ope
12050 72 61 6e 64 73 20 61 72 65 20 61 6c 77 61 79 73  rands are always
12060 20 4e 4f 54 20 4e 55 4c 4c 2e 0a 2a 2f 0a 23 64   NOT NULL..*/.#d
12070 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4b 45 45  efine SQLITE_KEE
12080 50 4e 55 4c 4c 20 20 20 20 20 30 78 30 38 20 20  PNULL     0x08  
12090 2f 2a 20 55 73 65 64 20 62 79 20 76 65 63 74 6f  /* Used by vecto
120a0 72 20 3d 3d 20 6f 72 20 3c 3e 20 2a 2f 0a 23 64  r == or <> */.#d
120b0 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4a 55 4d  efine SQLITE_JUM
120c0 50 49 46 4e 55 4c 4c 20 20 20 30 78 31 30 20 20  PIFNULL   0x10  
120d0 2f 2a 20 6a 75 6d 70 73 20 69 66 20 65 69 74 68  /* jumps if eith
120e0 65 72 20 6f 70 65 72 61 6e 64 20 69 73 20 4e 55  er operand is NU
120f0 4c 4c 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  LL */.#define SQ
12100 4c 49 54 45 5f 53 54 4f 52 45 50 32 20 20 20 20  LITE_STOREP2    
12110 20 20 30 78 32 30 20 20 2f 2a 20 53 74 6f 72 65    0x20  /* Store
12120 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67 5b 50   result in reg[P
12130 32 5d 20 72 61 74 68 65 72 20 74 68 61 6e 20 6a  2] rather than j
12140 75 6d 70 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ump */.#define S
12150 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 20 20 20  QLITE_NULLEQ    
12160 20 20 20 30 78 38 30 20 20 2f 2a 20 4e 55 4c 4c     0x80  /* NULL
12170 3d 4e 55 4c 4c 20 2a 2f 0a 23 64 65 66 69 6e 65  =NULL */.#define
12180 20 53 51 4c 49 54 45 5f 4e 4f 54 4e 55 4c 4c 20   SQLITE_NOTNULL 
12190 20 20 20 20 20 30 78 39 30 20 20 2f 2a 20 41 73       0x90  /* As
121a0 73 65 72 74 20 74 68 61 74 20 6f 70 65 72 61 6e  sert that operan
121b0 64 73 20 61 72 65 20 6e 65 76 65 72 20 4e 55 4c  ds are never NUL
121c0 4c 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 6f  L */../*.** An o
121d0 62 6a 65 63 74 20 6f 66 20 74 68 69 73 20 74 79  bject of this ty
121e0 70 65 20 69 73 20 63 72 65 61 74 65 64 20 66 6f  pe is created fo
121f0 72 20 65 61 63 68 20 76 69 72 74 75 61 6c 20 74  r each virtual t
12200 61 62 6c 65 20 70 72 65 73 65 6e 74 20 69 6e 0a  able present in.
12210 2a 2a 20 74 68 65 20 64 61 74 61 62 61 73 65 20  ** the database 
12220 73 63 68 65 6d 61 2e 0a 2a 2a 0a 2a 2a 20 49 66  schema..**.** If
12230 20 74 68 65 20 64 61 74 61 62 61 73 65 20 73 63   the database sc
12240 68 65 6d 61 20 69 73 20 73 68 61 72 65 64 2c 20  hema is shared, 
12250 74 68 65 6e 20 74 68 65 72 65 20 69 73 20 6f 6e  then there is on
12260 65 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  e instance of th
12270 69 73 0a 2a 2a 20 73 74 72 75 63 74 75 72 65 20  is.** structure 
12280 66 6f 72 20 65 61 63 68 20 64 61 74 61 62 61 73  for each databas
12290 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 28 73 71  e connection (sq
122a0 6c 69 74 65 33 2a 29 20 74 68 61 74 20 75 73 65  lite3*) that use
122b0 73 20 74 68 65 20 73 68 61 72 65 64 0a 2a 2a 20  s the shared.** 
122c0 73 63 68 65 6d 61 2e 20 54 68 69 73 20 69 73 20  schema. This is 
122d0 62 65 63 61 75 73 65 20 65 61 63 68 20 64 61 74  because each dat
122e0 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  abase connection
122f0 20 72 65 71 75 69 72 65 73 20 69 74 73 20 6f 77   requires its ow
12300 6e 20 75 6e 69 71 75 65 0a 2a 2a 20 69 6e 73 74  n unique.** inst
12310 61 6e 63 65 20 6f 66 20 74 68 65 20 73 71 6c 69  ance of the sqli
12320 74 65 33 5f 76 74 61 62 2a 20 68 61 6e 64 6c 65  te3_vtab* handle
12330 20 75 73 65 64 20 74 6f 20 61 63 63 65 73 73 20   used to access 
12340 74 68 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c  the virtual tabl
12350 65 0a 2a 2a 20 69 6d 70 6c 65 6d 65 6e 74 61 74  e.** implementat
12360 69 6f 6e 2e 20 73 71 6c 69 74 65 33 5f 76 74 61  ion. sqlite3_vta
12370 62 2a 20 68 61 6e 64 6c 65 73 20 63 61 6e 20 6e  b* handles can n
12380 6f 74 20 62 65 20 73 68 61 72 65 64 20 62 65 74  ot be shared bet
12390 77 65 65 6e 0a 2a 2a 20 64 61 74 61 62 61 73 65  ween.** database
123a0 20 63 6f 6e 6e 65 63 74 69 6f 6e 73 2c 20 65 76   connections, ev
123b0 65 6e 20 77 68 65 6e 20 74 68 65 20 72 65 73 74  en when the rest
123c0 20 6f 66 20 74 68 65 20 69 6e 2d 6d 65 6d 6f 72   of the in-memor
123d0 79 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 73 63  y database.** sc
123e0 68 65 6d 61 20 69 73 20 73 68 61 72 65 64 2c 20  hema is shared, 
123f0 61 73 20 74 68 65 20 69 6d 70 6c 65 6d 65 6e 74  as the implement
12400 61 74 69 6f 6e 20 6f 66 74 65 6e 20 73 74 6f 72  ation often stor
12410 65 73 20 74 68 65 20 64 61 74 61 62 61 73 65 0a  es the database.
12420 2a 2a 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61  ** connection ha
12430 6e 64 6c 65 20 70 61 73 73 65 64 20 74 6f 20 69  ndle passed to i
12440 74 20 76 69 61 20 74 68 65 20 78 43 6f 6e 6e 65  t via the xConne
12450 63 74 28 29 20 6f 72 20 78 43 72 65 61 74 65 28  ct() or xCreate(
12460 29 20 6d 65 74 68 6f 64 0a 2a 2a 20 64 75 72 69  ) method.** duri
12470 6e 67 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f  ng initializatio
12480 6e 20 69 6e 74 65 72 6e 61 6c 6c 79 2e 20 54 68  n internally. Th
12490 69 73 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e  is database conn
124a0 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65 20 6d 61  ection handle ma
124b0 79 0a 2a 2a 20 74 68 65 6e 20 62 65 20 75 73 65  y.** then be use
124c0 64 20 62 79 20 74 68 65 20 76 69 72 74 75 61 6c  d by the virtual
124d0 20 74 61 62 6c 65 20 69 6d 70 6c 65 6d 65 6e 74   table implement
124e0 61 74 69 6f 6e 20 74 6f 20 61 63 63 65 73 73 20  ation to access 
124f0 72 65 61 6c 20 74 61 62 6c 65 73 0a 2a 2a 20 77  real tables.** w
12500 69 74 68 69 6e 20 74 68 65 20 64 61 74 61 62 61  ithin the databa
12510 73 65 2e 20 53 6f 20 74 68 61 74 20 74 68 65 79  se. So that they
12520 20 61 70 70 65 61 72 20 61 73 20 70 61 72 74 20   appear as part 
12530 6f 66 20 74 68 65 20 63 61 6c 6c 65 72 73 0a 2a  of the callers.*
12540 2a 20 74 72 61 6e 73 61 63 74 69 6f 6e 2c 20 74  * transaction, t
12550 68 65 73 65 20 61 63 63 65 73 73 65 73 20 6e 65  hese accesses ne
12560 65 64 20 74 6f 20 62 65 20 6d 61 64 65 20 76 69  ed to be made vi
12570 61 20 74 68 65 20 73 61 6d 65 20 64 61 74 61 62  a the same datab
12580 61 73 65 0a 2a 2a 20 63 6f 6e 6e 65 63 74 69 6f  ase.** connectio
12590 6e 20 61 73 20 74 68 61 74 20 75 73 65 64 20 74  n as that used t
125a0 6f 20 65 78 65 63 75 74 65 20 53 51 4c 20 6f 70  o execute SQL op
125b0 65 72 61 74 69 6f 6e 73 20 6f 6e 20 74 68 65 20  erations on the 
125c0 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2e 0a 2a  virtual table..*
125d0 2a 0a 2a 2a 20 41 6c 6c 20 56 54 61 62 6c 65 20  *.** All VTable 
125e0 6f 62 6a 65 63 74 73 20 74 68 61 74 20 63 6f 72  objects that cor
125f0 72 65 73 70 6f 6e 64 20 74 6f 20 61 20 73 69 6e  respond to a sin
12600 67 6c 65 20 74 61 62 6c 65 20 69 6e 20 61 20 73  gle table in a s
12610 68 61 72 65 64 0a 2a 2a 20 64 61 74 61 62 61 73  hared.** databas
12620 65 20 73 63 68 65 6d 61 20 61 72 65 20 69 6e 69  e schema are ini
12630 74 69 61 6c 6c 79 20 73 74 6f 72 65 64 20 69 6e  tially stored in
12640 20 61 20 6c 69 6e 6b 65 64 2d 6c 69 73 74 20 70   a linked-list p
12650 6f 69 6e 74 65 64 20 74 6f 20 62 79 0a 2a 2a 20  ointed to by.** 
12660 74 68 65 20 54 61 62 6c 65 2e 70 56 54 61 62 6c  the Table.pVTabl
12670 65 20 6d 65 6d 62 65 72 20 76 61 72 69 61 62 6c  e member variabl
12680 65 20 6f 66 20 74 68 65 20 63 6f 72 72 65 73 70  e of the corresp
12690 6f 6e 64 69 6e 67 20 54 61 62 6c 65 20 6f 62 6a  onding Table obj
126a0 65 63 74 2e 0a 2a 2a 20 57 68 65 6e 20 61 6e 20  ect..** When an 
126b0 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 28  sqlite3_prepare(
126c0 29 20 6f 70 65 72 61 74 69 6f 6e 20 69 73 20 72  ) operation is r
126d0 65 71 75 69 72 65 64 20 74 6f 20 61 63 63 65 73  equired to acces
126e0 73 20 74 68 65 20 76 69 72 74 75 61 6c 0a 2a 2a  s the virtual.**
126f0 20 74 61 62 6c 65 2c 20 69 74 20 73 65 61 72 63   table, it searc
12700 68 65 73 20 74 68 65 20 6c 69 73 74 20 66 6f 72  hes the list for
12710 20 74 68 65 20 56 54 61 62 6c 65 20 74 68 61 74   the VTable that
12720 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20   corresponds to 
12730 74 68 65 0a 2a 2a 20 64 61 74 61 62 61 73 65 20  the.** database 
12740 63 6f 6e 6e 65 63 74 69 6f 6e 20 64 6f 69 6e 67  connection doing
12750 20 74 68 65 20 70 72 65 70 61 72 69 6e 67 20 73   the preparing s
12760 6f 20 61 73 20 74 6f 20 75 73 65 20 74 68 65 20  o as to use the 
12770 63 6f 72 72 65 63 74 0a 2a 2a 20 73 71 6c 69 74  correct.** sqlit
12780 65 33 5f 76 74 61 62 2a 20 68 61 6e 64 6c 65 20  e3_vtab* handle 
12790 69 6e 20 74 68 65 20 63 6f 6d 70 69 6c 65 64 20  in the compiled 
127a0 71 75 65 72 79 2e 0a 2a 2a 0a 2a 2a 20 57 68 65  query..**.** Whe
127b0 6e 20 61 6e 20 69 6e 2d 6d 65 6d 6f 72 79 20 54  n an in-memory T
127c0 61 62 6c 65 20 6f 62 6a 65 63 74 20 69 73 20 64  able object is d
127d0 65 6c 65 74 65 64 20 28 66 6f 72 20 65 78 61 6d  eleted (for exam
127e0 70 6c 65 20 77 68 65 6e 20 74 68 65 0a 2a 2a 20  ple when the.** 
127f0 73 63 68 65 6d 61 20 69 73 20 62 65 69 6e 67 20  schema is being 
12800 72 65 6c 6f 61 64 65 64 20 66 6f 72 20 73 6f 6d  reloaded for som
12810 65 20 72 65 61 73 6f 6e 29 2c 20 74 68 65 20 56  e reason), the V
12820 54 61 62 6c 65 20 6f 62 6a 65 63 74 73 20 61 72  Table objects ar
12830 65 20 6e 6f 74 0a 2a 2a 20 64 65 6c 65 74 65 64  e not.** deleted
12840 20 61 6e 64 20 74 68 65 20 73 71 6c 69 74 65 33   and the sqlite3
12850 5f 76 74 61 62 2a 20 68 61 6e 64 6c 65 73 20 61  _vtab* handles a
12860 72 65 20 6e 6f 74 20 78 44 69 73 63 6f 6e 6e 65  re not xDisconne
12870 63 74 28 29 65 64 0a 2a 2a 20 69 6d 6d 65 64 69  ct()ed.** immedi
12880 61 74 65 6c 79 2e 20 49 6e 73 74 65 61 64 2c 20  ately. Instead, 
12890 74 68 65 79 20 61 72 65 20 6d 6f 76 65 64 20 66  they are moved f
128a0 72 6f 6d 20 74 68 65 20 54 61 62 6c 65 2e 70 56  rom the Table.pV
128b0 54 61 62 6c 65 20 6c 69 73 74 20 74 6f 0a 2a 2a  Table list to.**
128c0 20 61 6e 6f 74 68 65 72 20 6c 69 6e 6b 65 64 20   another linked 
128d0 6c 69 73 74 20 68 65 61 64 65 64 20 62 79 20 74  list headed by t
128e0 68 65 20 73 71 6c 69 74 65 33 2e 70 44 69 73 63  he sqlite3.pDisc
128f0 6f 6e 6e 65 63 74 20 6d 65 6d 62 65 72 20 6f 66  onnect member of
12900 20 74 68 65 0a 2a 2a 20 63 6f 72 72 65 73 70 6f   the.** correspo
12910 6e 64 69 6e 67 20 73 71 6c 69 74 65 33 20 73 74  nding sqlite3 st
12920 72 75 63 74 75 72 65 2e 20 54 68 65 79 20 61 72  ructure. They ar
12930 65 20 74 68 65 6e 20 64 65 6c 65 74 65 64 2f 78  e then deleted/x
12940 44 69 73 63 6f 6e 6e 65 63 74 65 64 0a 2a 2a 20  Disconnected.** 
12950 6e 65 78 74 20 74 69 6d 65 20 61 20 73 74 61 74  next time a stat
12960 65 6d 65 6e 74 20 69 73 20 70 72 65 70 61 72 65  ement is prepare
12970 64 20 75 73 69 6e 67 20 73 61 69 64 20 73 71 6c  d using said sql
12980 69 74 65 33 2a 2e 20 54 68 69 73 20 69 73 20 64  ite3*. This is d
12990 6f 6e 65 0a 2a 2a 20 74 6f 20 61 76 6f 69 64 20  one.** to avoid 
129a0 64 65 61 64 6c 6f 63 6b 20 69 73 73 75 65 73 20  deadlock issues 
129b0 69 6e 76 6f 6c 76 69 6e 67 20 6d 75 6c 74 69 70  involving multip
129c0 6c 65 20 73 71 6c 69 74 65 33 2e 6d 75 74 65 78  le sqlite3.mutex
129d0 20 6d 75 74 65 78 65 73 2e 0a 2a 2a 20 52 65 66   mutexes..** Ref
129e0 65 72 20 74 6f 20 63 6f 6d 6d 65 6e 74 73 20 61  er to comments a
129f0 62 6f 76 65 20 66 75 6e 63 74 69 6f 6e 20 73 71  bove function sq
12a00 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f 63 6b 4c  lite3VtabUnlockL
12a10 69 73 74 28 29 20 66 6f 72 20 61 6e 0a 2a 2a 20  ist() for an.** 
12a20 65 78 70 6c 61 6e 61 74 69 6f 6e 20 61 73 20 74  explanation as t
12a30 6f 20 77 68 79 20 69 74 20 69 73 20 73 61 66 65  o why it is safe
12a40 20 74 6f 20 61 64 64 20 61 6e 20 65 6e 74 72 79   to add an entry
12a50 20 74 6f 20 61 6e 20 73 71 6c 69 74 65 33 2e 70   to an sqlite3.p
12a60 44 69 73 63 6f 6e 6e 65 63 74 0a 2a 2a 20 6c 69  Disconnect.** li
12a70 73 74 20 77 69 74 68 6f 75 74 20 68 6f 6c 64 69  st without holdi
12a80 6e 67 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e  ng the correspon
12a90 64 69 6e 67 20 73 71 6c 69 74 65 33 2e 6d 75 74  ding sqlite3.mut
12aa0 65 78 20 6d 75 74 65 78 2e 0a 2a 2a 0a 2a 2a 20  ex mutex..**.** 
12ab0 54 68 65 20 6d 65 6d 6f 72 79 20 66 6f 72 20 6f  The memory for o
12ac0 62 6a 65 63 74 73 20 6f 66 20 74 68 69 73 20 74  bjects of this t
12ad0 79 70 65 20 69 73 20 61 6c 77 61 79 73 20 61 6c  ype is always al
12ae0 6c 6f 63 61 74 65 64 20 62 79 0a 2a 2a 20 73 71  located by.** sq
12af0 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 28 29 2c  lite3DbMalloc(),
12b00 20 75 73 69 6e 67 20 74 68 65 20 63 6f 6e 6e 65   using the conne
12b10 63 74 69 6f 6e 20 68 61 6e 64 6c 65 20 73 74 6f  ction handle sto
12b20 72 65 64 20 69 6e 20 56 54 61 62 6c 65 2e 64 62  red in VTable.db
12b30 20 61 73 0a 2a 2a 20 74 68 65 20 66 69 72 73 74   as.** the first
12b40 20 61 72 67 75 6d 65 6e 74 2e 0a 2a 2f 0a 73 74   argument..*/.st
12b50 72 75 63 74 20 56 54 61 62 6c 65 20 7b 0a 20 20  ruct VTable {.  
12b60 73 71 6c 69 74 65 33 20 2a 64 62 3b 20 20 20 20  sqlite3 *db;    
12b70 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 61 74            /* Dat
12b80 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  abase connection
12b90 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68   associated with
12ba0 20 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20   this table */. 
12bb0 20 4d 6f 64 75 6c 65 20 2a 70 4d 6f 64 3b 20 20   Module *pMod;  
12bc0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50 6f             /* Po
12bd0 69 6e 74 65 72 20 74 6f 20 6d 6f 64 75 6c 65 20  inter to module 
12be0 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 2a  implementation *
12bf0 2f 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61 62  /.  sqlite3_vtab
12c00 20 2a 70 56 74 61 62 3b 20 20 20 20 20 20 2f 2a   *pVtab;      /*
12c10 20 50 6f 69 6e 74 65 72 20 74 6f 20 76 74 61 62   Pointer to vtab
12c20 20 69 6e 73 74 61 6e 63 65 20 2a 2f 0a 20 20 69   instance */.  i
12c30 6e 74 20 6e 52 65 66 3b 20 20 20 20 20 20 20 20  nt nRef;        
12c40 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
12c50 65 72 20 6f 66 20 70 6f 69 6e 74 65 72 73 20 74  er of pointers t
12c60 6f 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65  o this structure
12c70 20 2a 2f 0a 20 20 75 38 20 62 43 6f 6e 73 74 72   */.  u8 bConstr
12c80 61 69 6e 74 3b 20 20 20 20 20 20 20 20 20 20 20  aint;           
12c90 2f 2a 20 54 72 75 65 20 69 66 20 63 6f 6e 73 74  /* True if const
12ca0 72 61 69 6e 74 73 20 61 72 65 20 73 75 70 70 6f  raints are suppo
12cb0 72 74 65 64 20 2a 2f 0a 20 20 69 6e 74 20 69 53  rted */.  int iS
12cc0 61 76 65 70 6f 69 6e 74 3b 20 20 20 20 20 20 20  avepoint;       
12cd0 20 20 20 20 2f 2a 20 44 65 70 74 68 20 6f 66 20      /* Depth of 
12ce0 74 68 65 20 53 41 56 45 50 4f 49 4e 54 20 73 74  the SAVEPOINT st
12cf0 61 63 6b 20 2a 2f 0a 20 20 56 54 61 62 6c 65 20  ack */.  VTable 
12d00 2a 70 4e 65 78 74 3b 20 20 20 20 20 20 20 20 20  *pNext;         
12d10 20 20 20 2f 2a 20 4e 65 78 74 20 69 6e 20 6c 69     /* Next in li
12d20 6e 6b 65 64 20 6c 69 73 74 20 28 73 65 65 20 61  nked list (see a
12d30 62 6f 76 65 29 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a  bove) */.};../*.
12d40 2a 2a 20 54 68 65 20 73 63 68 65 6d 61 20 66 6f  ** The schema fo
12d50 72 20 65 61 63 68 20 53 51 4c 20 74 61 62 6c 65  r each SQL table
12d60 20 61 6e 64 20 76 69 65 77 20 69 73 20 72 65 70   and view is rep
12d70 72 65 73 65 6e 74 65 64 20 69 6e 20 6d 65 6d 6f  resented in memo
12d80 72 79 0a 2a 2a 20 62 79 20 61 6e 20 69 6e 73 74  ry.** by an inst
12d90 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c  ance of the foll
12da0 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 2e  owing structure.
12db0 0a 2a 2f 0a 73 74 72 75 63 74 20 54 61 62 6c 65  .*/.struct Table
12dc0 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65   {.  char *zName
12dd0 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d  ;         /* Nam
12de0 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 6f  e of the table o
12df0 72 20 76 69 65 77 20 2a 2f 0a 20 20 43 6f 6c 75  r view */.  Colu
12e00 6d 6e 20 2a 61 43 6f 6c 3b 20 20 20 20 20 20 20  mn *aCol;       
12e10 20 2f 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20   /* Information 
12e20 61 62 6f 75 74 20 65 61 63 68 20 63 6f 6c 75 6d  about each colum
12e30 6e 20 2a 2f 0a 20 20 49 6e 64 65 78 20 2a 70 49  n */.  Index *pI
12e40 6e 64 65 78 3b 20 20 20 20 20 20 20 2f 2a 20 4c  ndex;       /* L
12e50 69 73 74 20 6f 66 20 53 51 4c 20 69 6e 64 65 78  ist of SQL index
12e60 65 73 20 6f 6e 20 74 68 69 73 20 74 61 62 6c 65  es on this table
12e70 2e 20 2a 2f 0a 20 20 53 65 6c 65 63 74 20 2a 70  . */.  Select *p
12e80 53 65 6c 65 63 74 3b 20 20 20 20 20 2f 2a 20 4e  Select;     /* N
12e90 55 4c 4c 20 66 6f 72 20 74 61 62 6c 65 73 2e 20  ULL for tables. 
12ea0 20 50 6f 69 6e 74 73 20 74 6f 20 64 65 66 69 6e   Points to defin
12eb0 69 74 69 6f 6e 20 69 66 20 61 20 76 69 65 77 2e  ition if a view.
12ec0 20 2a 2f 0a 20 20 46 4b 65 79 20 2a 70 46 4b 65   */.  FKey *pFKe
12ed0 79 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 69  y;         /* Li
12ee0 6e 6b 65 64 20 6c 69 73 74 20 6f 66 20 61 6c 6c  nked list of all
12ef0 20 66 6f 72 65 69 67 6e 20 6b 65 79 73 20 69 6e   foreign keys in
12f00 20 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20   this table */. 
12f10 20 63 68 61 72 20 2a 7a 43 6f 6c 41 66 66 3b 20   char *zColAff; 
12f20 20 20 20 20 20 20 2f 2a 20 53 74 72 69 6e 67 20        /* String 
12f30 64 65 66 69 6e 69 6e 67 20 74 68 65 20 61 66 66  defining the aff
12f40 69 6e 69 74 79 20 6f 66 20 65 61 63 68 20 63 6f  inity of each co
12f50 6c 75 6d 6e 20 2a 2f 0a 20 20 45 78 70 72 4c 69  lumn */.  ExprLi
12f60 73 74 20 2a 70 43 68 65 63 6b 3b 20 20 20 20 2f  st *pCheck;    /
12f70 2a 20 41 6c 6c 20 43 48 45 43 4b 20 63 6f 6e 73  * All CHECK cons
12f80 74 72 61 69 6e 74 73 20 2a 2f 0a 20 20 20 20 20  traints */.     
12f90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12fa0 20 20 2f 2a 20 20 20 2e 2e 2e 20 61 6c 73 6f 20    /*   ... also 
12fb0 75 73 65 64 20 61 73 20 63 6f 6c 75 6d 6e 20 6e  used as column n
12fc0 61 6d 65 20 6c 69 73 74 20 69 6e 20 61 20 56 49  ame list in a VI
12fd0 45 57 20 2a 2f 0a 20 20 69 6e 74 20 74 6e 75 6d  EW */.  int tnum
12fe0 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
12ff0 52 6f 6f 74 20 42 54 72 65 65 20 70 61 67 65 20  Root BTree page 
13000 66 6f 72 20 74 68 69 73 20 74 61 62 6c 65 20 2a  for this table *
13010 2f 0a 20 20 75 33 32 20 6e 54 61 62 52 65 66 3b  /.  u32 nTabRef;
13020 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
13030 65 72 20 6f 66 20 70 6f 69 6e 74 65 72 73 20 74  er of pointers t
13040 6f 20 74 68 69 73 20 54 61 62 6c 65 20 2a 2f 0a  o this Table */.
13050 20 20 75 33 32 20 74 61 62 46 6c 61 67 73 3b 20    u32 tabFlags; 
13060 20 20 20 20 20 20 20 2f 2a 20 4d 61 73 6b 20 6f         /* Mask o
13070 66 20 54 46 5f 2a 20 76 61 6c 75 65 73 20 2a 2f  f TF_* values */
13080 0a 20 20 69 31 36 20 69 50 4b 65 79 3b 20 20 20  .  i16 iPKey;   
13090 20 20 20 20 20 20 20 20 2f 2a 20 49 66 20 6e 6f          /* If no
130a0 74 20 6e 65 67 61 74 69 76 65 2c 20 75 73 65 20  t negative, use 
130b0 61 43 6f 6c 5b 69 50 4b 65 79 5d 20 61 73 20 74  aCol[iPKey] as t
130c0 68 65 20 72 6f 77 69 64 20 2a 2f 0a 20 20 69 31  he rowid */.  i1
130d0 36 20 6e 43 6f 6c 3b 20 20 20 20 20 20 20 20 20  6 nCol;         
130e0 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
130f0 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 69 73 20  columns in this 
13100 74 61 62 6c 65 20 2a 2f 0a 20 20 4c 6f 67 45 73  table */.  LogEs
13110 74 20 6e 52 6f 77 4c 6f 67 45 73 74 3b 20 20 20  t nRowLogEst;   
13120 2f 2a 20 45 73 74 69 6d 61 74 65 64 20 72 6f 77  /* Estimated row
13130 73 20 69 6e 20 74 61 62 6c 65 20 2d 20 66 72 6f  s in table - fro
13140 6d 20 73 71 6c 69 74 65 5f 73 74 61 74 31 20 74  m sqlite_stat1 t
13150 61 62 6c 65 20 2a 2f 0a 20 20 4c 6f 67 45 73 74  able */.  LogEst
13160 20 73 7a 54 61 62 52 6f 77 3b 20 20 20 20 20 2f   szTabRow;     /
13170 2a 20 45 73 74 69 6d 61 74 65 64 20 73 69 7a 65  * Estimated size
13180 20 6f 66 20 65 61 63 68 20 74 61 62 6c 65 20 72   of each table r
13190 6f 77 20 69 6e 20 62 79 74 65 73 20 2a 2f 0a 23  ow in bytes */.#
131a0 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  ifdef SQLITE_ENA
131b0 42 4c 45 5f 43 4f 53 54 4d 55 4c 54 0a 20 20 4c  BLE_COSTMULT.  L
131c0 6f 67 45 73 74 20 63 6f 73 74 4d 75 6c 74 3b 20  ogEst costMult; 
131d0 20 20 20 20 2f 2a 20 43 6f 73 74 20 6d 75 6c 74      /* Cost mult
131e0 69 70 6c 69 65 72 20 66 6f 72 20 75 73 69 6e 67  iplier for using
131f0 20 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 23   this table */.#
13200 65 6e 64 69 66 0a 20 20 75 38 20 6b 65 79 43 6f  endif.  u8 keyCo
13210 6e 66 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  nf;          /* 
13220 57 68 61 74 20 74 6f 20 64 6f 20 69 6e 20 63 61  What to do in ca
13230 73 65 20 6f 66 20 75 6e 69 71 75 65 6e 65 73 73  se of uniqueness
13240 20 63 6f 6e 66 6c 69 63 74 20 6f 6e 20 69 50 4b   conflict on iPK
13250 65 79 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51  ey */.#ifndef SQ
13260 4c 49 54 45 5f 4f 4d 49 54 5f 41 4c 54 45 52 54  LITE_OMIT_ALTERT
13270 41 42 4c 45 0a 20 20 69 6e 74 20 61 64 64 43 6f  ABLE.  int addCo
13280 6c 4f 66 66 73 65 74 3b 20 20 20 20 2f 2a 20 4f  lOffset;    /* O
13290 66 66 73 65 74 20 69 6e 20 43 52 45 41 54 45 20  ffset in CREATE 
132a0 54 41 42 4c 45 20 73 74 6d 74 20 74 6f 20 61 64  TABLE stmt to ad
132b0 64 20 61 20 6e 65 77 20 63 6f 6c 75 6d 6e 20 2a  d a new column *
132c0 2f 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66  /.#endif.#ifndef
132d0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
132e0 54 55 41 4c 54 41 42 4c 45 0a 20 20 69 6e 74 20  TUALTABLE.  int 
132f0 6e 4d 6f 64 75 6c 65 41 72 67 3b 20 20 20 20 20  nModuleArg;     
13300 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 72   /* Number of ar
13310 67 75 6d 65 6e 74 73 20 74 6f 20 74 68 65 20 6d  guments to the m
13320 6f 64 75 6c 65 20 2a 2f 0a 20 20 63 68 61 72 20  odule */.  char 
13330 2a 2a 61 7a 4d 6f 64 75 6c 65 41 72 67 3b 20 20  **azModuleArg;  
13340 2f 2a 20 30 3a 20 6d 6f 64 75 6c 65 20 31 3a 20  /* 0: module 1: 
13350 73 63 68 65 6d 61 20 32 3a 20 76 74 61 62 20 6e  schema 2: vtab n
13360 61 6d 65 20 33 2e 2e 2e 3a 20 61 72 67 73 20 2a  ame 3...: args *
13370 2f 0a 20 20 56 54 61 62 6c 65 20 2a 70 56 54 61  /.  VTable *pVTa
13380 62 6c 65 3b 20 20 20 20 20 2f 2a 20 4c 69 73 74  ble;     /* List
13390 20 6f 66 20 56 54 61 62 6c 65 20 6f 62 6a 65 63   of VTable objec
133a0 74 73 2e 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20  ts. */.#endif.  
133b0 54 72 69 67 67 65 72 20 2a 70 54 72 69 67 67 65  Trigger *pTrigge
133c0 72 3b 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20  r;   /* List of 
133d0 74 72 69 67 67 65 72 73 20 73 74 6f 72 65 64 20  triggers stored 
133e0 69 6e 20 70 53 63 68 65 6d 61 20 2a 2f 0a 20 20  in pSchema */.  
133f0 53 63 68 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b  Schema *pSchema;
13400 20 20 20 20 20 2f 2a 20 53 63 68 65 6d 61 20 74       /* Schema t
13410 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 74 68 69  hat contains thi
13420 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20 54 61 62  s table */.  Tab
13430 6c 65 20 2a 70 4e 65 78 74 5a 6f 6d 62 69 65 3b  le *pNextZombie;
13440 20 20 2f 2a 20 4e 65 78 74 20 6f 6e 20 74 68 65    /* Next on the
13450 20 50 61 72 73 65 2e 70 5a 6f 6d 62 69 65 54 61   Parse.pZombieTa
13460 62 20 6c 69 73 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  b list */.};../*
13470 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75  .** Allowed valu
13480 65 73 20 66 6f 72 20 54 61 62 6c 65 2e 74 61 62  es for Table.tab
13490 46 6c 61 67 73 2e 0a 2a 2a 0a 2a 2a 20 54 46 5f  Flags..**.** TF_
134a0 4f 4f 4f 48 69 64 64 65 6e 20 61 70 70 6c 69 65  OOOHidden applie
134b0 73 20 74 6f 20 74 61 62 6c 65 73 20 6f 72 20 76  s to tables or v
134c0 69 65 77 20 74 68 61 74 20 68 61 76 65 20 68 69  iew that have hi
134d0 64 64 65 6e 20 63 6f 6c 75 6d 6e 73 20 74 68 61  dden columns tha
134e0 74 20 61 72 65 0a 2a 2a 20 66 6f 6c 6c 6f 77 65  t are.** followe
134f0 64 20 62 79 20 6e 6f 6e 2d 68 69 64 64 65 6e 20  d by non-hidden 
13500 63 6f 6c 75 6d 6e 73 2e 20 20 45 78 61 6d 70 6c  columns.  Exampl
13510 65 3a 20 20 22 43 52 45 41 54 45 20 56 49 52 54  e:  "CREATE VIRT
13520 55 41 4c 20 54 41 42 4c 45 20 78 20 55 53 49 4e  UAL TABLE x USIN
13530 47 0a 2a 2a 20 76 74 61 62 31 28 61 20 48 49 44  G.** vtab1(a HID
13540 44 45 4e 2c 20 62 29 3b 22 2e 20 20 53 69 6e 63  DEN, b);".  Sinc
13550 65 20 22 62 22 20 69 73 20 61 20 6e 6f 6e 2d 68  e "b" is a non-h
13560 69 64 64 65 6e 20 63 6f 6c 75 6d 6e 20 62 75 74  idden column but
13570 20 22 61 22 20 69 73 20 68 69 64 64 65 6e 2c 0a   "a" is hidden,.
13580 2a 2a 20 74 68 65 20 54 46 5f 4f 4f 4f 48 69 64  ** the TF_OOOHid
13590 64 65 6e 20 61 74 74 72 69 62 75 74 65 20 77 6f  den attribute wo
135a0 75 6c 64 20 61 70 70 6c 79 20 69 6e 20 74 68 69  uld apply in thi
135b0 73 20 63 61 73 65 2e 20 20 53 75 63 68 20 74 61  s case.  Such ta
135c0 62 6c 65 73 20 72 65 71 75 69 72 65 0a 2a 2a 20  bles require.** 
135d0 73 70 65 63 69 61 6c 20 68 61 6e 64 6c 69 6e 67  special handling
135e0 20 64 75 72 69 6e 67 20 49 4e 53 45 52 54 20 70   during INSERT p
135f0 72 6f 63 65 73 73 69 6e 67 2e 0a 2a 2f 0a 23 64  rocessing..*/.#d
13600 65 66 69 6e 65 20 54 46 5f 52 65 61 64 6f 6e 6c  efine TF_Readonl
13610 79 20 20 20 20 20 20 20 20 30 78 30 30 30 31 20  y        0x0001 
13620 20 20 20 2f 2a 20 52 65 61 64 2d 6f 6e 6c 79 20     /* Read-only 
13630 73 79 73 74 65 6d 20 74 61 62 6c 65 20 2a 2f 0a  system table */.
13640 23 64 65 66 69 6e 65 20 54 46 5f 45 70 68 65 6d  #define TF_Ephem
13650 65 72 61 6c 20 20 20 20 20 20 20 30 78 30 30 30  eral       0x000
13660 32 20 20 20 20 2f 2a 20 41 6e 20 65 70 68 65 6d  2    /* An ephem
13670 65 72 61 6c 20 74 61 62 6c 65 20 2a 2f 0a 23 64  eral table */.#d
13680 65 66 69 6e 65 20 54 46 5f 48 61 73 50 72 69 6d  efine TF_HasPrim
13690 61 72 79 4b 65 79 20 20 20 30 78 30 30 30 34 20  aryKey   0x0004 
136a0 20 20 20 2f 2a 20 54 61 62 6c 65 20 68 61 73 20     /* Table has 
136b0 61 20 70 72 69 6d 61 72 79 20 6b 65 79 20 2a 2f  a primary key */
136c0 0a 23 64 65 66 69 6e 65 20 54 46 5f 41 75 74 6f  .#define TF_Auto
136d0 69 6e 63 72 65 6d 65 6e 74 20 20 20 30 78 30 30  increment   0x00
136e0 30 38 20 20 20 20 2f 2a 20 49 6e 74 65 67 65 72  08    /* Integer
136f0 20 70 72 69 6d 61 72 79 20 6b 65 79 20 69 73 20   primary key is 
13700 61 75 74 6f 69 6e 63 72 65 6d 65 6e 74 20 2a 2f  autoincrement */
13710 0a 23 64 65 66 69 6e 65 20 54 46 5f 48 61 73 53  .#define TF_HasS
13720 74 61 74 31 20 20 20 20 20 20 20 20 30 78 30 30  tat1        0x00
13730 31 30 20 20 20 20 2f 2a 20 6e 52 6f 77 4c 6f 67  10    /* nRowLog
13740 45 73 74 20 73 65 74 20 66 72 6f 6d 20 73 71 6c  Est set from sql
13750 69 74 65 5f 73 74 61 74 31 20 2a 2f 0a 23 64 65  ite_stat1 */.#de
13760 66 69 6e 65 20 54 46 5f 57 69 74 68 6f 75 74 52  fine TF_WithoutR
13770 6f 77 69 64 20 20 20 20 30 78 30 30 32 30 20 20  owid    0x0020  
13780 20 20 2f 2a 20 4e 6f 20 72 6f 77 69 64 2e 20 20    /* No rowid.  
13790 50 52 49 4d 41 52 59 20 4b 45 59 20 69 73 20 74  PRIMARY KEY is t
137a0 68 65 20 6b 65 79 20 2a 2f 0a 23 64 65 66 69 6e  he key */.#defin
137b0 65 20 54 46 5f 4e 6f 56 69 73 69 62 6c 65 52 6f  e TF_NoVisibleRo
137c0 77 69 64 20 20 30 78 30 30 34 30 20 20 20 20 2f  wid  0x0040    /
137d0 2a 20 4e 6f 20 75 73 65 72 2d 76 69 73 69 62 6c  * No user-visibl
137e0 65 20 22 72 6f 77 69 64 22 20 63 6f 6c 75 6d 6e  e "rowid" column
137f0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 4f   */.#define TF_O
13800 4f 4f 48 69 64 64 65 6e 20 20 20 20 20 20 20 30  OOHidden       0
13810 78 30 30 38 30 20 20 20 20 2f 2a 20 4f 75 74 2d  x0080    /* Out-
13820 6f 66 2d 4f 72 64 65 72 20 68 69 64 64 65 6e 20  of-Order hidden 
13830 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 23 64 65 66 69  columns */.#defi
13840 6e 65 20 54 46 5f 53 74 61 74 73 55 73 65 64 20  ne TF_StatsUsed 
13850 20 20 20 20 20 20 30 78 30 31 30 30 20 20 20 20        0x0100    
13860 2f 2a 20 51 75 65 72 79 20 70 6c 61 6e 6e 65 72  /* Query planner
13870 20 64 65 63 69 73 69 6f 6e 73 20 61 66 66 65 63   decisions affec
13880 74 65 64 20 62 79 0a 20 20 20 20 20 20 20 20 20  ted by.         
13890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
138a0 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 49              ** I
138b0 6e 64 65 78 2e 61 69 52 6f 77 4c 6f 67 45 73 74  ndex.aiRowLogEst
138c0 5b 5d 20 76 61 6c 75 65 73 20 2a 2f 0a 23 64 65  [] values */.#de
138d0 66 69 6e 65 20 54 46 5f 48 61 73 4e 6f 74 4e 75  fine TF_HasNotNu
138e0 6c 6c 20 20 20 20 20 20 30 78 30 32 30 30 20 20  ll      0x0200  
138f0 20 20 2f 2a 20 43 6f 6e 74 61 69 6e 73 20 4e 4f    /* Contains NO
13900 54 20 4e 55 4c 4c 20 63 6f 6e 73 74 72 61 69 6e  T NULL constrain
13910 74 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 65 73  ts */../*.** Tes
13920 74 20 74 6f 20 73 65 65 20 77 68 65 74 68 65 72  t to see whether
13930 20 6f 72 20 6e 6f 74 20 61 20 74 61 62 6c 65 20   or not a table 
13940 69 73 20 61 20 76 69 72 74 75 61 6c 20 74 61 62  is a virtual tab
13950 6c 65 2e 20 20 54 68 69 73 20 69 73 0a 2a 2a 20  le.  This is.** 
13960 64 6f 6e 65 20 61 73 20 61 20 6d 61 63 72 6f 20  done as a macro 
13970 73 6f 20 74 68 61 74 20 69 74 20 77 69 6c 6c 20  so that it will 
13980 62 65 20 6f 70 74 69 6d 69 7a 65 64 20 6f 75 74  be optimized out
13990 20 77 68 65 6e 20 76 69 72 74 75 61 6c 0a 2a 2a   when virtual.**
139a0 20 74 61 62 6c 65 20 73 75 70 70 6f 72 74 20 69   table support i
139b0 73 20 6f 6d 69 74 74 65 64 20 66 72 6f 6d 20 74  s omitted from t
139c0 68 65 20 62 75 69 6c 64 2e 0a 2a 2f 0a 23 69 66  he build..*/.#if
139d0 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
139e0 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 23 20  _VIRTUALTABLE.# 
139f0 20 64 65 66 69 6e 65 20 49 73 56 69 72 74 75 61   define IsVirtua
13a00 6c 28 58 29 20 20 20 20 20 20 28 28 58 29 2d 3e  l(X)      ((X)->
13a10 6e 4d 6f 64 75 6c 65 41 72 67 29 0a 23 65 6c 73  nModuleArg).#els
13a20 65 0a 23 20 20 64 65 66 69 6e 65 20 49 73 56 69  e.#  define IsVi
13a30 72 74 75 61 6c 28 58 29 20 20 20 20 20 20 30 0a  rtual(X)      0.
13a40 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 4d 61  #endif../*.** Ma
13a50 63 72 6f 73 20 74 6f 20 64 65 74 65 72 6d 69 6e  cros to determin
13a60 65 20 69 66 20 61 20 63 6f 6c 75 6d 6e 20 69 73  e if a column is
13a70 20 68 69 64 64 65 6e 2e 20 20 49 73 4f 72 64 69   hidden.  IsOrdi
13a80 6e 61 72 79 48 69 64 64 65 6e 43 6f 6c 75 6d 6e  naryHiddenColumn
13a90 28 29 0a 2a 2a 20 6f 6e 6c 79 20 77 6f 72 6b 73  ().** only works
13aa0 20 66 6f 72 20 6e 6f 6e 2d 76 69 72 74 75 61 6c   for non-virtual
13ab0 20 74 61 62 6c 65 73 20 28 6f 72 64 69 6e 61 72   tables (ordinar
13ac0 79 20 74 61 62 6c 65 73 20 61 6e 64 20 76 69 65  y tables and vie
13ad0 77 73 29 20 61 6e 64 20 69 73 0a 2a 2a 20 61 6c  ws) and is.** al
13ae0 77 61 79 73 20 66 61 6c 73 65 20 75 6e 6c 65 73  ways false unles
13af0 73 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  s SQLITE_ENABLE_
13b00 48 49 44 44 45 4e 5f 43 4f 4c 55 4d 4e 53 20 69  HIDDEN_COLUMNS i
13b10 73 20 64 65 66 69 6e 65 64 2e 20 20 54 68 65 0a  s defined.  The.
13b20 2a 2a 20 49 73 48 69 64 64 65 6e 43 6f 6c 75 6d  ** IsHiddenColum
13b30 6e 28 29 20 6d 61 63 72 6f 20 69 73 20 67 65 6e  n() macro is gen
13b40 65 72 61 6c 20 70 75 72 70 6f 73 65 2e 0a 2a 2f  eral purpose..*/
13b50 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c  .#if defined(SQL
13b60 49 54 45 5f 45 4e 41 42 4c 45 5f 48 49 44 44 45  ITE_ENABLE_HIDDE
13b70 4e 5f 43 4f 4c 55 4d 4e 53 29 0a 23 20 20 64 65  N_COLUMNS).#  de
13b80 66 69 6e 65 20 49 73 48 69 64 64 65 6e 43 6f 6c  fine IsHiddenCol
13b90 75 6d 6e 28 58 29 20 20 20 20 20 20 20 20 20 28  umn(X)         (
13ba0 28 28 58 29 2d 3e 63 6f 6c 46 6c 61 67 73 20 26  ((X)->colFlags &
13bb0 20 43 4f 4c 46 4c 41 47 5f 48 49 44 44 45 4e 29   COLFLAG_HIDDEN)
13bc0 21 3d 30 29 0a 23 20 20 64 65 66 69 6e 65 20 49  !=0).#  define I
13bd0 73 4f 72 64 69 6e 61 72 79 48 69 64 64 65 6e 43  sOrdinaryHiddenC
13be0 6f 6c 75 6d 6e 28 58 29 20 28 28 28 58 29 2d 3e  olumn(X) (((X)->
13bf0 63 6f 6c 46 6c 61 67 73 20 26 20 43 4f 4c 46 4c  colFlags & COLFL
13c00 41 47 5f 48 49 44 44 45 4e 29 21 3d 30 29 0a 23  AG_HIDDEN)!=0).#
13c10 65 6c 69 66 20 21 64 65 66 69 6e 65 64 28 53 51  elif !defined(SQ
13c20 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
13c30 4c 54 41 42 4c 45 29 0a 23 20 20 64 65 66 69 6e  LTABLE).#  defin
13c40 65 20 49 73 48 69 64 64 65 6e 43 6f 6c 75 6d 6e  e IsHiddenColumn
13c50 28 58 29 20 20 20 20 20 20 20 20 20 28 28 28 58  (X)         (((X
13c60 29 2d 3e 63 6f 6c 46 6c 61 67 73 20 26 20 43 4f  )->colFlags & CO
13c70 4c 46 4c 41 47 5f 48 49 44 44 45 4e 29 21 3d 30  LFLAG_HIDDEN)!=0
13c80 29 0a 23 20 20 64 65 66 69 6e 65 20 49 73 4f 72  ).#  define IsOr
13c90 64 69 6e 61 72 79 48 69 64 64 65 6e 43 6f 6c 75  dinaryHiddenColu
13ca0 6d 6e 28 58 29 20 30 0a 23 65 6c 73 65 0a 23 20  mn(X) 0.#else.# 
13cb0 20 64 65 66 69 6e 65 20 49 73 48 69 64 64 65 6e   define IsHidden
13cc0 43 6f 6c 75 6d 6e 28 58 29 20 20 20 20 20 20 20  Column(X)       
13cd0 20 20 30 0a 23 20 20 64 65 66 69 6e 65 20 49 73    0.#  define Is
13ce0 4f 72 64 69 6e 61 72 79 48 69 64 64 65 6e 43 6f  OrdinaryHiddenCo
13cf0 6c 75 6d 6e 28 58 29 20 30 0a 23 65 6e 64 69 66  lumn(X) 0.#endif
13d00 0a 0a 0a 2f 2a 20 44 6f 65 73 20 74 68 65 20 74  .../* Does the t
13d10 61 62 6c 65 20 68 61 76 65 20 61 20 72 6f 77 69  able have a rowi
13d20 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 48 61 73  d */.#define Has
13d30 52 6f 77 69 64 28 58 29 20 20 20 20 20 28 28 28  Rowid(X)     (((
13d40 58 29 2d 3e 74 61 62 46 6c 61 67 73 20 26 20 54  X)->tabFlags & T
13d50 46 5f 57 69 74 68 6f 75 74 52 6f 77 69 64 29 3d  F_WithoutRowid)=
13d60 3d 30 29 0a 23 64 65 66 69 6e 65 20 56 69 73 69  =0).#define Visi
13d70 62 6c 65 52 6f 77 69 64 28 58 29 20 28 28 28 58  bleRowid(X) (((X
13d80 29 2d 3e 74 61 62 46 6c 61 67 73 20 26 20 54 46  )->tabFlags & TF
13d90 5f 4e 6f 56 69 73 69 62 6c 65 52 6f 77 69 64 29  _NoVisibleRowid)
13da0 3d 3d 30 29 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68  ==0)../*.** Each
13db0 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e   foreign key con
13dc0 73 74 72 61 69 6e 74 20 69 73 20 61 6e 20 69 6e  straint is an in
13dd0 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f  stance of the fo
13de0 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72  llowing structur
13df0 65 2e 0a 2a 2a 0a 2a 2a 20 41 20 66 6f 72 65 69  e..**.** A forei
13e00 67 6e 20 6b 65 79 20 69 73 20 61 73 73 6f 63 69  gn key is associ
13e10 61 74 65 64 20 77 69 74 68 20 74 77 6f 20 74 61  ated with two ta
13e20 62 6c 65 73 2e 20 20 54 68 65 20 22 66 72 6f 6d  bles.  The "from
13e30 22 20 74 61 62 6c 65 20 69 73 0a 2a 2a 20 74 68  " table is.** th
13e40 65 20 74 61 62 6c 65 20 74 68 61 74 20 63 6f 6e  e table that con
13e50 74 61 69 6e 73 20 74 68 65 20 52 45 46 45 52 45  tains the REFERE
13e60 4e 43 45 53 20 63 6c 61 75 73 65 20 74 68 61 74  NCES clause that
13e70 20 63 72 65 61 74 65 73 20 74 68 65 20 66 6f 72   creates the for
13e80 65 69 67 6e 0a 2a 2a 20 6b 65 79 2e 20 20 54 68  eign.** key.  Th
13e90 65 20 22 74 6f 22 20 74 61 62 6c 65 20 69 73 20  e "to" table is 
13ea0 74 68 65 20 74 61 62 6c 65 20 74 68 61 74 20 69  the table that i
13eb0 73 20 6e 61 6d 65 64 20 69 6e 20 74 68 65 20 52  s named in the R
13ec0 45 46 45 52 45 4e 43 45 53 20 63 6c 61 75 73 65  EFERENCES clause
13ed0 2e 0a 2a 2a 20 43 6f 6e 73 69 64 65 72 20 74 68  ..** Consider th
13ee0 69 73 20 65 78 61 6d 70 6c 65 3a 0a 2a 2a 0a 2a  is example:.**.*
13ef0 2a 20 20 20 20 20 43 52 45 41 54 45 20 54 41 42  *     CREATE TAB
13f00 4c 45 20 65 78 31 28 0a 2a 2a 20 20 20 20 20 20  LE ex1(.**      
13f10 20 61 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41   a INTEGER PRIMA
13f20 52 59 20 4b 45 59 2c 0a 2a 2a 20 20 20 20 20 20  RY KEY,.**      
13f30 20 62 20 49 4e 54 45 47 45 52 20 43 4f 4e 53 54   b INTEGER CONST
13f40 52 41 49 4e 54 20 66 6b 31 20 52 45 46 45 52 45  RAINT fk1 REFERE
13f50 4e 43 45 53 20 65 78 32 28 78 29 0a 2a 2a 20 20  NCES ex2(x).**  
13f60 20 20 20 29 3b 0a 2a 2a 0a 2a 2a 20 46 6f 72 20     );.**.** For 
13f70 66 6f 72 65 69 67 6e 20 6b 65 79 20 22 66 6b 31  foreign key "fk1
13f80 22 2c 20 74 68 65 20 66 72 6f 6d 2d 74 61 62 6c  ", the from-tabl
13f90 65 20 69 73 20 22 65 78 31 22 20 61 6e 64 20 74  e is "ex1" and t
13fa0 68 65 20 74 6f 2d 74 61 62 6c 65 20 69 73 20 22  he to-table is "
13fb0 65 78 32 22 2e 0a 2a 2a 20 45 71 75 69 76 61 6c  ex2"..** Equival
13fc0 65 6e 74 20 6e 61 6d 65 73 3a 0a 2a 2a 0a 2a 2a  ent names:.**.**
13fd0 20 20 20 20 20 66 72 6f 6d 2d 74 61 62 6c 65 20       from-table 
13fe0 3d 3d 20 63 68 69 6c 64 2d 74 61 62 6c 65 0a 2a  == child-table.*
13ff0 2a 20 20 20 20 20 20 20 74 6f 2d 74 61 62 6c 65  *       to-table
14000 20 3d 3d 20 70 61 72 65 6e 74 2d 74 61 62 6c 65   == parent-table
14010 0a 2a 2a 0a 2a 2a 20 45 61 63 68 20 52 45 46 45  .**.** Each REFE
14020 52 45 4e 43 45 53 20 63 6c 61 75 73 65 20 67 65  RENCES clause ge
14030 6e 65 72 61 74 65 73 20 61 6e 20 69 6e 73 74 61  nerates an insta
14040 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f  nce of the follo
14050 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 0a 2a  wing structure.*
14060 2a 20 77 68 69 63 68 20 69 73 20 61 74 74 61 63  * which is attac
14070 68 65 64 20 74 6f 20 74 68 65 20 66 72 6f 6d 2d  hed to the from-
14080 74 61 62 6c 65 2e 20 20 54 68 65 20 74 6f 2d 74  table.  The to-t
14090 61 62 6c 65 20 6e 65 65 64 20 6e 6f 74 20 65 78  able need not ex
140a0 69 73 74 20 77 68 65 6e 0a 2a 2a 20 74 68 65 20  ist when.** the 
140b0 66 72 6f 6d 2d 74 61 62 6c 65 20 69 73 20 63 72  from-table is cr
140c0 65 61 74 65 64 2e 20 20 54 68 65 20 65 78 69 73  eated.  The exis
140d0 74 65 6e 63 65 20 6f 66 20 74 68 65 20 74 6f 2d  tence of the to-
140e0 74 61 62 6c 65 20 69 73 20 6e 6f 74 20 63 68 65  table is not che
140f0 63 6b 65 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  cked..**.** The 
14100 6c 69 73 74 20 6f 66 20 61 6c 6c 20 70 61 72 65  list of all pare
14110 6e 74 73 20 66 6f 72 20 63 68 69 6c 64 20 54 61  nts for child Ta
14120 62 6c 65 20 58 20 69 73 20 68 65 6c 64 20 61 74  ble X is held at
14130 20 58 2e 70 46 4b 65 79 2e 0a 2a 2a 0a 2a 2a 20   X.pFKey..**.** 
14140 41 20 6c 69 73 74 20 6f 66 20 61 6c 6c 20 63 68  A list of all ch
14150 69 6c 64 72 65 6e 20 66 6f 72 20 61 20 74 61 62  ildren for a tab
14160 6c 65 20 6e 61 6d 65 64 20 5a 20 28 77 68 69 63  le named Z (whic
14170 68 20 6d 69 67 68 74 20 6e 6f 74 20 65 76 65 6e  h might not even
14180 20 65 78 69 73 74 29 0a 2a 2a 20 69 73 20 68 65   exist).** is he
14190 6c 64 20 69 6e 20 53 63 68 65 6d 61 2e 66 6b 65  ld in Schema.fke
141a0 79 48 61 73 68 20 77 69 74 68 20 61 20 68 61 73  yHash with a has
141b0 68 20 6b 65 79 20 6f 66 20 5a 2e 0a 2a 2f 0a 73  h key of Z..*/.s
141c0 74 72 75 63 74 20 46 4b 65 79 20 7b 0a 20 20 54  truct FKey {.  T
141d0 61 62 6c 65 20 2a 70 46 72 6f 6d 3b 20 20 20 20  able *pFrom;    
141e0 20 2f 2a 20 54 61 62 6c 65 20 63 6f 6e 74 61 69   /* Table contai
141f0 6e 69 6e 67 20 74 68 65 20 52 45 46 45 52 45 4e  ning the REFEREN
14200 43 45 53 20 63 6c 61 75 73 65 20 28 61 6b 61 3a  CES clause (aka:
14210 20 43 68 69 6c 64 29 20 2a 2f 0a 20 20 46 4b 65   Child) */.  FKe
14220 79 20 2a 70 4e 65 78 74 46 72 6f 6d 3b 20 20 2f  y *pNextFrom;  /
14230 2a 20 4e 65 78 74 20 46 4b 65 79 20 77 69 74 68  * Next FKey with
14240 20 74 68 65 20 73 61 6d 65 20 69 6e 20 70 46 72   the same in pFr
14250 6f 6d 2e 20 4e 65 78 74 20 70 61 72 65 6e 74 20  om. Next parent 
14260 6f 66 20 70 46 72 6f 6d 20 2a 2f 0a 20 20 63 68  of pFrom */.  ch
14270 61 72 20 2a 7a 54 6f 3b 20 20 20 20 20 20 20 20  ar *zTo;        
14280 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 61 62 6c 65  /* Name of table
14290 20 74 68 61 74 20 74 68 65 20 6b 65 79 20 70 6f   that the key po
142a0 69 6e 74 73 20 74 6f 20 28 61 6b 61 3a 20 50 61  ints to (aka: Pa
142b0 72 65 6e 74 29 20 2a 2f 0a 20 20 46 4b 65 79 20  rent) */.  FKey 
142c0 2a 70 4e 65 78 74 54 6f 3b 20 20 20 20 2f 2a 20  *pNextTo;    /* 
142d0 4e 65 78 74 20 77 69 74 68 20 74 68 65 20 73 61  Next with the sa
142e0 6d 65 20 7a 54 6f 2e 20 4e 65 78 74 20 63 68 69  me zTo. Next chi
142f0 6c 64 20 6f 66 20 7a 54 6f 2e 20 2a 2f 0a 20 20  ld of zTo. */.  
14300 46 4b 65 79 20 2a 70 50 72 65 76 54 6f 3b 20 20  FKey *pPrevTo;  
14310 20 20 2f 2a 20 50 72 65 76 69 6f 75 73 20 77 69    /* Previous wi
14320 74 68 20 74 68 65 20 73 61 6d 65 20 7a 54 6f 20  th the same zTo 
14330 2a 2f 0a 20 20 69 6e 74 20 6e 43 6f 6c 3b 20 20  */.  int nCol;  
14340 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
14350 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74   of columns in t
14360 68 69 73 20 6b 65 79 20 2a 2f 0a 20 20 2f 2a 20  his key */.  /* 
14370 45 56 3a 20 52 2d 33 30 33 32 33 2d 32 31 39 31  EV: R-30323-2191
14380 37 20 2a 2f 0a 20 20 75 38 20 69 73 44 65 66 65  7 */.  u8 isDefe
14390 72 72 65 64 3b 20 20 20 20 20 20 20 2f 2a 20 54  rred;       /* T
143a0 72 75 65 20 69 66 20 63 6f 6e 73 74 72 61 69 6e  rue if constrain
143b0 74 20 63 68 65 63 6b 69 6e 67 20 69 73 20 64 65  t checking is de
143c0 66 65 72 72 65 64 20 74 69 6c 6c 20 43 4f 4d 4d  ferred till COMM
143d0 49 54 20 2a 2f 0a 20 20 75 38 20 61 41 63 74 69  IT */.  u8 aActi
143e0 6f 6e 5b 32 5d 3b 20 20 20 20 20 20 20 20 2f 2a  on[2];        /*
143f0 20 4f 4e 20 44 45 4c 45 54 45 20 61 6e 64 20 4f   ON DELETE and O
14400 4e 20 55 50 44 41 54 45 20 61 63 74 69 6f 6e 73  N UPDATE actions
14410 2c 20 72 65 73 70 65 63 74 69 76 65 6c 79 20 2a  , respectively *
14420 2f 0a 20 20 54 72 69 67 67 65 72 20 2a 61 70 54  /.  Trigger *apT
14430 72 69 67 67 65 72 5b 32 5d 3b 2f 2a 20 54 72 69  rigger[2];/* Tri
14440 67 67 65 72 73 20 66 6f 72 20 61 41 63 74 69 6f  ggers for aActio
14450 6e 5b 5d 20 61 63 74 69 6f 6e 73 20 2a 2f 0a 20  n[] actions */. 
14460 20 73 74 72 75 63 74 20 73 43 6f 6c 4d 61 70 20   struct sColMap 
14470 7b 20 20 20 20 20 20 2f 2a 20 4d 61 70 70 69 6e  {      /* Mappin
14480 67 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20  g of columns in 
14490 70 46 72 6f 6d 20 74 6f 20 63 6f 6c 75 6d 6e 73  pFrom to columns
144a0 20 69 6e 20 7a 54 6f 20 2a 2f 0a 20 20 20 20 69   in zTo */.    i
144b0 6e 74 20 69 46 72 6f 6d 3b 20 20 20 20 20 20 20  nt iFrom;       
144c0 20 20 20 20 20 2f 2a 20 49 6e 64 65 78 20 6f 66       /* Index of
144d0 20 63 6f 6c 75 6d 6e 20 69 6e 20 70 46 72 6f 6d   column in pFrom
144e0 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a 43   */.    char *zC
144f0 6f 6c 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ol;           /*
14500 20 4e 61 6d 65 20 6f 66 20 63 6f 6c 75 6d 6e 20   Name of column 
14510 69 6e 20 7a 54 6f 2e 20 20 49 66 20 4e 55 4c 4c  in zTo.  If NULL
14520 20 75 73 65 20 50 52 49 4d 41 52 59 20 4b 45 59   use PRIMARY KEY
14530 20 2a 2f 0a 20 20 7d 20 61 43 6f 6c 5b 31 5d 3b   */.  } aCol[1];
14540 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f              /* O
14550 6e 65 20 65 6e 74 72 79 20 66 6f 72 20 65 61 63  ne entry for eac
14560 68 20 6f 66 20 6e 43 6f 6c 20 63 6f 6c 75 6d 6e  h of nCol column
14570 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 53  s */.};../*.** S
14580 51 4c 69 74 65 20 73 75 70 70 6f 72 74 73 20 6d  QLite supports m
14590 61 6e 79 20 64 69 66 66 65 72 65 6e 74 20 77 61  any different wa
145a0 79 73 20 74 6f 20 72 65 73 6f 6c 76 65 20 61 20  ys to resolve a 
145b0 63 6f 6e 73 74 72 61 69 6e 74 0a 2a 2a 20 65 72  constraint.** er
145c0 72 6f 72 2e 20 20 52 4f 4c 4c 42 41 43 4b 20 70  ror.  ROLLBACK p
145d0 72 6f 63 65 73 73 69 6e 67 20 6d 65 61 6e 73 20  rocessing means 
145e0 74 68 61 74 20 61 20 63 6f 6e 73 74 72 61 69 6e  that a constrain
145f0 74 20 76 69 6f 6c 61 74 69 6f 6e 0a 2a 2a 20 63  t violation.** c
14600 61 75 73 65 73 20 74 68 65 20 6f 70 65 72 61 74  auses the operat
14610 69 6f 6e 20 69 6e 20 70 72 6f 63 65 73 73 20 74  ion in process t
14620 6f 20 66 61 69 6c 20 61 6e 64 20 66 6f 72 20 74  o fail and for t
14630 68 65 20 63 75 72 72 65 6e 74 20 74 72 61 6e 73  he current trans
14640 61 63 74 69 6f 6e 0a 2a 2a 20 74 6f 20 62 65 20  action.** to be 
14650 72 6f 6c 6c 65 64 20 62 61 63 6b 2e 20 20 41 42  rolled back.  AB
14660 4f 52 54 20 70 72 6f 63 65 73 73 69 6e 67 20 6d  ORT processing m
14670 65 61 6e 73 20 74 68 65 20 6f 70 65 72 61 74 69  eans the operati
14680 6f 6e 20 69 6e 20 70 72 6f 63 65 73 73 0a 2a 2a  on in process.**
14690 20 66 61 69 6c 73 20 61 6e 64 20 61 6e 79 20 70   fails and any p
146a0 72 69 6f 72 20 63 68 61 6e 67 65 73 20 66 72 6f  rior changes fro
146b0 6d 20 74 68 61 74 20 6f 6e 65 20 6f 70 65 72 61  m that one opera
146c0 74 69 6f 6e 20 61 72 65 20 62 61 63 6b 65 64 20  tion are backed 
146d0 6f 75 74 2c 0a 2a 2a 20 62 75 74 20 74 68 65 20  out,.** but the 
146e0 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 6e  transaction is n
146f0 6f 74 20 72 6f 6c 6c 65 64 20 62 61 63 6b 2e 20  ot rolled back. 
14700 20 46 41 49 4c 20 70 72 6f 63 65 73 73 69 6e 67   FAIL processing
14710 20 6d 65 61 6e 73 20 74 68 61 74 0a 2a 2a 20 74   means that.** t
14720 68 65 20 6f 70 65 72 61 74 69 6f 6e 20 69 6e 20  he operation in 
14730 70 72 6f 67 72 65 73 73 20 73 74 6f 70 73 20 61  progress stops a
14740 6e 64 20 72 65 74 75 72 6e 73 20 61 6e 20 65 72  nd returns an er
14750 72 6f 72 20 63 6f 64 65 2e 20 20 42 75 74 20 70  ror code.  But p
14760 72 69 6f 72 0a 2a 2a 20 63 68 61 6e 67 65 73 20  rior.** changes 
14770 64 75 65 20 74 6f 20 74 68 65 20 73 61 6d 65 20  due to the same 
14780 6f 70 65 72 61 74 69 6f 6e 20 61 72 65 20 6e 6f  operation are no
14790 74 20 62 61 63 6b 65 64 20 6f 75 74 20 61 6e 64  t backed out and
147a0 20 6e 6f 20 72 6f 6c 6c 62 61 63 6b 0a 2a 2a 20   no rollback.** 
147b0 6f 63 63 75 72 73 2e 20 20 49 47 4e 4f 52 45 20  occurs.  IGNORE 
147c0 6d 65 61 6e 73 20 74 68 61 74 20 74 68 65 20 70  means that the p
147d0 61 72 74 69 63 75 6c 61 72 20 72 6f 77 20 74 68  articular row th
147e0 61 74 20 63 61 75 73 65 64 20 74 68 65 20 63 6f  at caused the co
147f0 6e 73 74 72 61 69 6e 74 0a 2a 2a 20 65 72 72 6f  nstraint.** erro
14800 72 20 69 73 20 6e 6f 74 20 69 6e 73 65 72 74 65  r is not inserte
14810 64 20 6f 72 20 75 70 64 61 74 65 64 2e 20 20 50  d or updated.  P
14820 72 6f 63 65 73 73 69 6e 67 20 63 6f 6e 74 69 6e  rocessing contin
14830 75 65 73 20 61 6e 64 20 6e 6f 20 65 72 72 6f 72  ues and no error
14840 0a 2a 2a 20 69 73 20 72 65 74 75 72 6e 65 64 2e  .** is returned.
14850 20 20 52 45 50 4c 41 43 45 20 6d 65 61 6e 73 20    REPLACE means 
14860 74 68 61 74 20 70 72 65 65 78 69 73 74 69 6e 67  that preexisting
14870 20 64 61 74 61 62 61 73 65 20 72 6f 77 73 20 74   database rows t
14880 68 61 74 20 63 61 75 73 65 64 0a 2a 2a 20 61 20  hat caused.** a 
14890 55 4e 49 51 55 45 20 63 6f 6e 73 74 72 61 69 6e  UNIQUE constrain
148a0 74 20 76 69 6f 6c 61 74 69 6f 6e 20 61 72 65 20  t violation are 
148b0 72 65 6d 6f 76 65 64 20 73 6f 20 74 68 61 74 20  removed so that 
148c0 74 68 65 20 6e 65 77 20 69 6e 73 65 72 74 20 6f  the new insert o
148d0 72 0a 2a 2a 20 75 70 64 61 74 65 20 63 61 6e 20  r.** update can 
148e0 70 72 6f 63 65 65 64 2e 20 20 50 72 6f 63 65 73  proceed.  Proces
148f0 73 69 6e 67 20 63 6f 6e 74 69 6e 75 65 73 20 61  sing continues a
14900 6e 64 20 6e 6f 20 65 72 72 6f 72 20 69 73 20 72  nd no error is r
14910 65 70 6f 72 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 52  eported..**.** R
14920 45 53 54 52 49 43 54 2c 20 53 45 54 4e 55 4c 4c  ESTRICT, SETNULL
14930 2c 20 61 6e 64 20 43 41 53 43 41 44 45 20 61 63  , and CASCADE ac
14940 74 69 6f 6e 73 20 61 70 70 6c 79 20 6f 6e 6c 79  tions apply only
14950 20 74 6f 20 66 6f 72 65 69 67 6e 20 6b 65 79 73   to foreign keys
14960 2e 0a 2a 2a 20 52 45 53 54 52 49 43 54 20 69 73  ..** RESTRICT is
14970 20 74 68 65 20 73 61 6d 65 20 61 73 20 41 42 4f   the same as ABO
14980 52 54 20 66 6f 72 20 49 4d 4d 45 44 49 41 54 45  RT for IMMEDIATE
14990 20 66 6f 72 65 69 67 6e 20 6b 65 79 73 20 61 6e   foreign keys an
149a0 64 20 74 68 65 0a 2a 2a 20 73 61 6d 65 20 61 73  d the.** same as
149b0 20 52 4f 4c 4c 42 41 43 4b 20 66 6f 72 20 44 45   ROLLBACK for DE
149c0 46 45 52 52 45 44 20 6b 65 79 73 2e 20 20 53 45  FERRED keys.  SE
149d0 54 4e 55 4c 4c 20 6d 65 61 6e 73 20 74 68 61 74  TNULL means that
149e0 20 74 68 65 20 66 6f 72 65 69 67 6e 0a 2a 2a 20   the foreign.** 
149f0 6b 65 79 20 69 73 20 73 65 74 20 74 6f 20 4e 55  key is set to NU
14a00 4c 4c 2e 20 20 43 41 53 43 41 44 45 20 6d 65 61  LL.  CASCADE mea
14a10 6e 73 20 74 68 61 74 20 61 20 44 45 4c 45 54 45  ns that a DELETE
14a20 20 6f 72 20 55 50 44 41 54 45 20 6f 66 20 74 68   or UPDATE of th
14a30 65 0a 2a 2a 20 72 65 66 65 72 65 6e 63 65 64 20  e.** referenced 
14a40 74 61 62 6c 65 20 72 6f 77 20 69 73 20 70 72 6f  table row is pro
14a50 70 61 67 61 74 65 64 20 69 6e 74 6f 20 74 68 65  pagated into the
14a60 20 72 6f 77 20 74 68 61 74 20 68 6f 6c 64 73 20   row that holds 
14a70 74 68 65 0a 2a 2a 20 66 6f 72 65 69 67 6e 20 6b  the.** foreign k
14a80 65 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 66 6f  ey..**.** The fo
14a90 6c 6c 6f 77 69 6e 67 20 73 79 6d 62 6f 6c 69 63  llowing symbolic
14aa0 20 76 61 6c 75 65 73 20 61 72 65 20 75 73 65 64   values are used
14ab0 20 74 6f 20 72 65 63 6f 72 64 20 77 68 69 63 68   to record which
14ac0 20 74 79 70 65 0a 2a 2a 20 6f 66 20 61 63 74 69   type.** of acti
14ad0 6f 6e 20 74 6f 20 74 61 6b 65 2e 0a 2a 2f 0a 23  on to take..*/.#
14ae0 64 65 66 69 6e 65 20 4f 45 5f 4e 6f 6e 65 20 20  define OE_None  
14af0 20 20 20 30 20 20 20 2f 2a 20 54 68 65 72 65 20     0   /* There 
14b00 69 73 20 6e 6f 20 63 6f 6e 73 74 72 61 69 6e 74  is no constraint
14b10 20 74 6f 20 63 68 65 63 6b 20 2a 2f 0a 23 64 65   to check */.#de
14b20 66 69 6e 65 20 4f 45 5f 52 6f 6c 6c 62 61 63 6b  fine OE_Rollback
14b30 20 31 20 20 20 2f 2a 20 46 61 69 6c 20 74 68 65   1   /* Fail the
14b40 20 6f 70 65 72 61 74 69 6f 6e 20 61 6e 64 20 72   operation and r
14b50 6f 6c 6c 62 61 63 6b 20 74 68 65 20 74 72 61 6e  ollback the tran
14b60 73 61 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69  saction */.#defi
14b70 6e 65 20 4f 45 5f 41 62 6f 72 74 20 20 20 20 32  ne OE_Abort    2
14b80 20 20 20 2f 2a 20 42 61 63 6b 20 6f 75 74 20 63     /* Back out c
14b90 68 61 6e 67 65 73 20 62 75 74 20 64 6f 20 6e 6f  hanges but do no
14ba0 20 72 6f 6c 6c 62 61 63 6b 20 74 72 61 6e 73 61   rollback transa
14bb0 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65  ction */.#define
14bc0 20 4f 45 5f 46 61 69 6c 20 20 20 20 20 33 20 20   OE_Fail     3  
14bd0 20 2f 2a 20 53 74 6f 70 20 74 68 65 20 6f 70 65   /* Stop the ope
14be0 72 61 74 69 6f 6e 20 62 75 74 20 6c 65 61 76 65  ration but leave
14bf0 20 61 6c 6c 20 70 72 69 6f 72 20 63 68 61 6e 67   all prior chang
14c00 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45  es */.#define OE
14c10 5f 49 67 6e 6f 72 65 20 20 20 34 20 20 20 2f 2a  _Ignore   4   /*
14c20 20 49 67 6e 6f 72 65 20 74 68 65 20 65 72 72 6f   Ignore the erro
14c30 72 2e 20 44 6f 20 6e 6f 74 20 64 6f 20 74 68 65  r. Do not do the
14c40 20 49 4e 53 45 52 54 20 6f 72 20 55 50 44 41 54   INSERT or UPDAT
14c50 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f  E */.#define OE_
14c60 52 65 70 6c 61 63 65 20 20 35 20 20 20 2f 2a 20  Replace  5   /* 
14c70 44 65 6c 65 74 65 20 65 78 69 73 74 69 6e 67 20  Delete existing 
14c80 72 65 63 6f 72 64 2c 20 74 68 65 6e 20 64 6f 20  record, then do 
14c90 49 4e 53 45 52 54 20 6f 72 20 55 50 44 41 54 45  INSERT or UPDATE
14ca0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 55   */.#define OE_U
14cb0 70 64 61 74 65 20 20 20 36 20 20 20 2f 2a 20 50  pdate   6   /* P
14cc0 72 6f 63 65 73 73 20 61 73 20 61 20 44 4f 20 55  rocess as a DO U
14cd0 50 44 41 54 45 20 69 6e 20 61 6e 20 75 70 73 65  PDATE in an upse
14ce0 72 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45  rt */.#define OE
14cf0 5f 52 65 73 74 72 69 63 74 20 37 20 20 20 2f 2a  _Restrict 7   /*
14d00 20 4f 45 5f 41 62 6f 72 74 20 66 6f 72 20 49 4d   OE_Abort for IM
14d10 4d 45 44 49 41 54 45 2c 20 4f 45 5f 52 6f 6c 6c  MEDIATE, OE_Roll
14d20 62 61 63 6b 20 66 6f 72 20 44 45 46 45 52 52 45  back for DEFERRE
14d30 44 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f  D */.#define OE_
14d40 53 65 74 4e 75 6c 6c 20 20 38 20 20 20 2f 2a 20  SetNull  8   /* 
14d50 53 65 74 20 74 68 65 20 66 6f 72 65 69 67 6e 20  Set the foreign 
14d60 6b 65 79 20 76 61 6c 75 65 20 74 6f 20 4e 55 4c  key value to NUL
14d70 4c 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f  L */.#define OE_
14d80 53 65 74 44 66 6c 74 20 20 39 20 20 20 2f 2a 20  SetDflt  9   /* 
14d90 53 65 74 20 74 68 65 20 66 6f 72 65 69 67 6e 20  Set the foreign 
14da0 6b 65 79 20 76 61 6c 75 65 20 74 6f 20 69 74 73  key value to its
14db0 20 64 65 66 61 75 6c 74 20 2a 2f 0a 23 64 65 66   default */.#def
14dc0 69 6e 65 20 4f 45 5f 43 61 73 63 61 64 65 20 20  ine OE_Cascade  
14dd0 31 30 20 20 2f 2a 20 43 61 73 63 61 64 65 20 74  10  /* Cascade t
14de0 68 65 20 63 68 61 6e 67 65 73 20 2a 2f 0a 23 64  he changes */.#d
14df0 65 66 69 6e 65 20 4f 45 5f 44 65 66 61 75 6c 74  efine OE_Default
14e00 20 20 31 31 20 20 2f 2a 20 44 6f 20 77 68 61 74    11  /* Do what
14e10 65 76 65 72 20 74 68 65 20 64 65 66 61 75 6c 74  ever the default
14e20 20 61 63 74 69 6f 6e 20 69 73 20 2a 2f 0a 0a 0a   action is */...
14e30 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63  /*.** An instanc
14e40 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69  e of the followi
14e50 6e 67 20 73 74 72 75 63 74 75 72 65 20 69 73 20  ng structure is 
14e60 70 61 73 73 65 64 20 61 73 20 74 68 65 20 66 69  passed as the fi
14e70 72 73 74 0a 2a 2a 20 61 72 67 75 6d 65 6e 74 20  rst.** argument 
14e80 74 6f 20 73 71 6c 69 74 65 33 56 64 62 65 4b 65  to sqlite3VdbeKe
14e90 79 43 6f 6d 70 61 72 65 20 61 6e 64 20 69 73 20  yCompare and is 
14ea0 75 73 65 64 20 74 6f 20 63 6f 6e 74 72 6f 6c 20  used to control 
14eb0 74 68 65 0a 2a 2a 20 63 6f 6d 70 61 72 69 73 6f  the.** compariso
14ec0 6e 20 6f 66 20 74 68 65 20 74 77 6f 20 69 6e 64  n of the two ind
14ed0 65 78 20 6b 65 79 73 2e 0a 2a 2a 0a 2a 2a 20 4e  ex keys..**.** N
14ee0 6f 74 65 20 74 68 61 74 20 61 53 6f 72 74 4f 72  ote that aSortOr
14ef0 64 65 72 5b 5d 20 61 6e 64 20 61 43 6f 6c 6c 5b  der[] and aColl[
14f00 5d 20 68 61 76 65 20 6e 46 69 65 6c 64 2b 31 20  ] have nField+1 
14f10 73 6c 6f 74 73 2e 20 20 54 68 65 72 65 0a 2a 2a  slots.  There.**
14f20 20 61 72 65 20 6e 46 69 65 6c 64 20 73 6c 6f 74   are nField slot
14f30 73 20 66 6f 72 20 74 68 65 20 63 6f 6c 75 6d 6e  s for the column
14f40 73 20 6f 66 20 61 6e 20 69 6e 64 65 78 20 74 68  s of an index th
14f50 65 6e 20 6f 6e 65 20 65 78 74 72 61 20 73 6c 6f  en one extra slo
14f60 74 0a 2a 2a 20 66 6f 72 20 74 68 65 20 72 6f 77  t.** for the row
14f70 69 64 20 61 74 20 74 68 65 20 65 6e 64 2e 0a 2a  id at the end..*
14f80 2f 0a 73 74 72 75 63 74 20 4b 65 79 49 6e 66 6f  /.struct KeyInfo
14f90 20 7b 0a 20 20 75 33 32 20 6e 52 65 66 3b 20 20   {.  u32 nRef;  
14fa0 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
14fb0 65 72 20 6f 66 20 72 65 66 65 72 65 6e 63 65 73  er of references
14fc0 20 74 6f 20 74 68 69 73 20 4b 65 79 49 6e 66 6f   to this KeyInfo
14fd0 20 6f 62 6a 65 63 74 20 2a 2f 0a 20 20 75 38 20   object */.  u8 
14fe0 65 6e 63 3b 20 20 20 20 20 20 20 20 20 20 20 20  enc;            
14ff0 20 2f 2a 20 54 65 78 74 20 65 6e 63 6f 64 69 6e   /* Text encodin
15000 67 20 2d 20 6f 6e 65 20 6f 66 20 74 68 65 20 53  g - one of the S
15010 51 4c 49 54 45 5f 55 54 46 2a 20 76 61 6c 75 65  QLITE_UTF* value
15020 73 20 2a 2f 0a 20 20 75 31 36 20 6e 4b 65 79 46  s */.  u16 nKeyF
15030 69 65 6c 64 3b 20 20 20 20 20 20 2f 2a 20 4e 75  ield;      /* Nu
15040 6d 62 65 72 20 6f 66 20 6b 65 79 20 63 6f 6c 75  mber of key colu
15050 6d 6e 73 20 69 6e 20 74 68 65 20 69 6e 64 65 78  mns in the index
15060 20 2a 2f 0a 20 20 75 31 36 20 6e 41 6c 6c 46 69   */.  u16 nAllFi
15070 65 6c 64 3b 20 20 20 20 20 20 2f 2a 20 54 6f 74  eld;      /* Tot
15080 61 6c 20 63 6f 6c 75 6d 6e 73 2c 20 69 6e 63 6c  al columns, incl
15090 75 64 69 6e 67 20 6b 65 79 20 70 6c 75 73 20 6f  uding key plus o
150a0 74 68 65 72 73 20 2a 2f 0a 20 20 73 71 6c 69 74  thers */.  sqlit
150b0 65 33 20 2a 64 62 3b 20 20 20 20 20 20 20 20 2f  e3 *db;        /
150c0 2a 20 54 68 65 20 64 61 74 61 62 61 73 65 20 63  * The database c
150d0 6f 6e 6e 65 63 74 69 6f 6e 20 2a 2f 0a 20 20 75  onnection */.  u
150e0 38 20 2a 61 53 6f 72 74 4f 72 64 65 72 3b 20 20  8 *aSortOrder;  
150f0 20 20 20 2f 2a 20 53 6f 72 74 20 6f 72 64 65 72     /* Sort order
15100 20 66 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e   for each column
15110 2e 20 2a 2f 0a 20 20 43 6f 6c 6c 53 65 71 20 2a  . */.  CollSeq *
15120 61 43 6f 6c 6c 5b 31 5d 3b 20 20 2f 2a 20 43 6f  aColl[1];  /* Co
15130 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65  llating sequence
15140 20 66 6f 72 20 65 61 63 68 20 74 65 72 6d 20 6f   for each term o
15150 66 20 74 68 65 20 6b 65 79 20 2a 2f 0a 7d 3b 0a  f the key */.};.
15160 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 6f 62 6a 65  ./*.** This obje
15170 63 74 20 68 6f 6c 64 73 20 61 20 72 65 63 6f 72  ct holds a recor
15180 64 20 77 68 69 63 68 20 68 61 73 20 62 65 65 6e  d which has been
15190 20 70 61 72 73 65 64 20 6f 75 74 20 69 6e 74 6f   parsed out into
151a0 20 69 6e 64 69 76 69 64 75 61 6c 0a 2a 2a 20 66   individual.** f
151b0 69 65 6c 64 73 2c 20 66 6f 72 20 74 68 65 20 70  ields, for the p
151c0 75 72 70 6f 73 65 73 20 6f 66 20 64 6f 69 6e 67  urposes of doing
151d0 20 61 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 0a 2a   a comparison..*
151e0 2a 0a 2a 2a 20 41 20 72 65 63 6f 72 64 20 69 73  *.** A record is
151f0 20 61 6e 20 6f 62 6a 65 63 74 20 74 68 61 74 20   an object that 
15200 63 6f 6e 74 61 69 6e 73 20 6f 6e 65 20 6f 72 20  contains one or 
15210 6d 6f 72 65 20 66 69 65 6c 64 73 20 6f 66 20 64  more fields of d
15220 61 74 61 2e 0a 2a 2a 20 52 65 63 6f 72 64 73 20  ata..** Records 
15230 61 72 65 20 75 73 65 64 20 74 6f 20 73 74 6f 72  are used to stor
15240 65 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66  e the content of
15250 20 61 20 74 61 62 6c 65 20 72 6f 77 20 61 6e 64   a table row and
15260 20 74 6f 20 73 74 6f 72 65 0a 2a 2a 20 74 68 65   to store.** the
15270 20 6b 65 79 20 6f 66 20 61 6e 20 69 6e 64 65 78   key of an index
15280 2e 20 20 41 20 62 6c 6f 62 20 65 6e 63 6f 64 69  .  A blob encodi
15290 6e 67 20 6f 66 20 61 20 72 65 63 6f 72 64 20 69  ng of a record i
152a0 73 20 63 72 65 61 74 65 64 20 62 79 0a 2a 2a 20  s created by.** 
152b0 74 68 65 20 4f 50 5f 4d 61 6b 65 52 65 63 6f 72  the OP_MakeRecor
152c0 64 20 6f 70 63 6f 64 65 20 6f 66 20 74 68 65 20  d opcode of the 
152d0 56 44 42 45 20 61 6e 64 20 69 73 20 64 69 73 61  VDBE and is disa
152e0 73 73 65 6d 62 6c 65 64 20 62 79 20 74 68 65 0a  ssembled by the.
152f0 2a 2a 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 70 63  ** OP_Column opc
15300 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 41 6e 20 69 6e  ode..**.** An in
15310 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73 20 6f  stance of this o
15320 62 6a 65 63 74 20 73 65 72 76 65 73 20 61 73 20  bject serves as 
15330 61 20 22 6b 65 79 22 20 66 6f 72 20 64 6f 69 6e  a "key" for doin
15340 67 20 61 20 73 65 61 72 63 68 20 6f 6e 0a 2a 2a  g a search on.**
15350 20 61 6e 20 69 6e 64 65 78 20 62 2b 74 72 65 65   an index b+tree
15360 2e 20 54 68 65 20 67 6f 61 6c 20 6f 66 20 74 68  . The goal of th
15370 65 20 73 65 61 72 63 68 20 69 73 20 74 6f 20 66  e search is to f
15380 69 6e 64 20 74 68 65 20 65 6e 74 72 79 20 74 68  ind the entry th
15390 61 74 0a 2a 2a 20 69 73 20 63 6c 6f 73 65 64 20  at.** is closed 
153a0 74 6f 20 74 68 65 20 6b 65 79 20 64 65 73 63 72  to the key descr
153b0 69 62 65 64 20 62 79 20 74 68 69 73 20 6f 62 6a  ibed by this obj
153c0 65 63 74 2e 20 20 54 68 69 73 20 6f 62 6a 65 63  ect.  This objec
153d0 74 20 6d 69 67 68 74 20 68 6f 6c 64 0a 2a 2a 20  t might hold.** 
153e0 6a 75 73 74 20 61 20 70 72 65 66 69 78 20 6f 66  just a prefix of
153f0 20 74 68 65 20 6b 65 79 2e 20 20 54 68 65 20 6e   the key.  The n
15400 75 6d 62 65 72 20 6f 66 20 66 69 65 6c 64 73 20  umber of fields 
15410 69 73 20 67 69 76 65 6e 20 62 79 0a 2a 2a 20 70  is given by.** p
15420 4b 65 79 49 6e 66 6f 2d 3e 6e 46 69 65 6c 64 2e  KeyInfo->nField.
15430 0a 2a 2a 0a 2a 2a 20 54 68 65 20 72 31 20 61 6e  .**.** The r1 an
15440 64 20 72 32 20 66 69 65 6c 64 73 20 61 72 65 20  d r2 fields are 
15450 74 68 65 20 76 61 6c 75 65 73 20 74 6f 20 72 65  the values to re
15460 74 75 72 6e 20 69 66 20 74 68 69 73 20 6b 65 79  turn if this key
15470 20 69 73 20 6c 65 73 73 20 74 68 61 6e 0a 2a 2a   is less than.**
15480 20 6f 72 20 67 72 65 61 74 65 72 20 74 68 61 6e   or greater than
15490 20 61 20 6b 65 79 20 69 6e 20 74 68 65 20 62 74   a key in the bt
154a0 72 65 65 2c 20 72 65 73 70 65 63 74 69 76 65 6c  ree, respectivel
154b0 79 2e 20 20 54 68 65 73 65 20 61 72 65 20 6e 6f  y.  These are no
154c0 72 6d 61 6c 6c 79 0a 2a 2a 20 2d 31 20 61 6e 64  rmally.** -1 and
154d0 20 2b 31 20 72 65 73 70 65 63 74 69 76 65 6c 79   +1 respectively
154e0 2c 20 62 75 74 20 6d 69 67 68 74 20 62 65 20 69  , but might be i
154f0 6e 76 65 72 74 65 64 20 74 6f 20 2b 31 20 61 6e  nverted to +1 an
15500 64 20 2d 31 20 69 66 20 74 68 65 20 62 2d 74 72  d -1 if the b-tr
15510 65 65 0a 2a 2a 20 69 73 20 69 6e 20 44 45 53 43  ee.** is in DESC
15520 20 6f 72 64 65 72 2e 0a 2a 2a 0a 2a 2a 20 54 68   order..**.** Th
15530 65 20 6b 65 79 20 63 6f 6d 70 61 72 69 73 6f 6e  e key comparison
15540 20 66 75 6e 63 74 69 6f 6e 73 20 61 63 74 75 61   functions actua
15550 6c 6c 79 20 72 65 74 75 72 6e 20 64 65 66 61 75  lly return defau
15560 6c 74 5f 72 63 20 77 68 65 6e 20 74 68 65 79 20  lt_rc when they 
15570 66 69 6e 64 0a 2a 2a 20 61 6e 20 65 71 75 61 6c  find.** an equal
15580 73 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 20 64  s comparison.  d
15590 65 66 61 75 6c 74 5f 72 63 20 63 61 6e 20 62 65  efault_rc can be
155a0 20 2d 31 2c 20 30 2c 20 6f 72 20 2b 31 2e 20 20   -1, 0, or +1.  
155b0 49 66 20 74 68 65 72 65 20 61 72 65 0a 2a 2a 20  If there are.** 
155c0 6d 75 6c 74 69 70 6c 65 20 65 6e 74 72 69 65 73  multiple entries
155d0 20 69 6e 20 74 68 65 20 62 2d 74 72 65 65 20 77   in the b-tree w
155e0 69 74 68 20 74 68 65 20 73 61 6d 65 20 6b 65 79  ith the same key
155f0 20 28 77 68 65 6e 20 6f 6e 6c 79 20 6c 6f 6f 6b   (when only look
15600 69 6e 67 0a 2a 2a 20 61 74 20 74 68 65 20 66 69  ing.** at the fi
15610 72 73 74 20 70 4b 65 79 49 6e 66 6f 2d 3e 6e 46  rst pKeyInfo->nF
15620 69 65 6c 64 73 2c 29 20 74 68 65 6e 20 64 65 66  ields,) then def
15630 61 75 6c 74 5f 72 63 20 63 61 6e 20 62 65 20 73  ault_rc can be s
15640 65 74 20 74 6f 20 2d 31 20 74 6f 0a 2a 2a 20 63  et to -1 to.** c
15650 61 75 73 65 20 74 68 65 20 73 65 61 72 63 68 20  ause the search 
15660 74 6f 20 66 69 6e 64 20 74 68 65 20 6c 61 73 74  to find the last
15670 20 6d 61 74 63 68 2c 20 6f 72 20 2b 31 20 74 6f   match, or +1 to
15680 20 63 61 75 73 65 20 74 68 65 20 73 65 61 72 63   cause the searc
15690 68 20 74 6f 0a 2a 2a 20 66 69 6e 64 20 74 68 65  h to.** find the
156a0 20 66 69 72 73 74 20 6d 61 74 63 68 2e 0a 2a 2a   first match..**
156b0 0a 2a 2a 20 54 68 65 20 6b 65 79 20 63 6f 6d 70  .** The key comp
156c0 61 72 69 73 6f 6e 20 66 75 6e 63 74 69 6f 6e 73  arison functions
156d0 20 77 69 6c 6c 20 73 65 74 20 65 71 53 65 65 6e   will set eqSeen
156e0 20 74 6f 20 74 72 75 65 20 69 66 20 74 68 65 79   to true if they
156f0 20 65 76 65 72 0a 2a 2a 20 67 65 74 20 61 6e 64   ever.** get and
15700 20 65 71 75 61 6c 20 72 65 73 75 6c 74 73 20 77   equal results w
15710 68 65 6e 20 63 6f 6d 70 61 72 69 6e 67 20 74 68  hen comparing th
15720 69 73 20 73 74 72 75 63 74 75 72 65 20 74 6f 20  is structure to 
15730 61 20 62 2d 74 72 65 65 20 72 65 63 6f 72 64 2e  a b-tree record.
15740 0a 2a 2a 20 57 68 65 6e 20 64 65 66 61 75 6c 74  .** When default
15750 5f 72 63 21 3d 30 2c 20 74 68 65 20 73 65 61 72  _rc!=0, the sear
15760 63 68 20 6d 69 67 68 74 20 65 6e 64 20 75 70 20  ch might end up 
15770 6f 6e 20 74 68 65 20 72 65 63 6f 72 64 20 69 6d  on the record im
15780 6d 65 64 69 61 74 65 6c 79 0a 2a 2a 20 62 65 66  mediately.** bef
15790 6f 72 65 20 74 68 65 20 66 69 72 73 74 20 6d 61  ore the first ma
157a0 74 63 68 20 6f 72 20 69 6d 6d 65 64 69 61 74 65  tch or immediate
157b0 6c 79 20 61 66 74 65 72 20 74 68 65 20 6c 61 73  ly after the las
157c0 74 20 6d 61 74 63 68 2e 20 20 54 68 65 0a 2a 2a  t match.  The.**
157d0 20 65 71 53 65 65 6e 20 66 69 65 6c 64 20 77 69   eqSeen field wi
157e0 6c 6c 20 69 6e 64 69 63 61 74 65 20 77 68 65 74  ll indicate whet
157f0 68 65 72 20 6f 72 20 6e 6f 74 20 61 6e 20 65 78  her or not an ex
15800 61 63 74 20 6d 61 74 63 68 20 65 78 69 73 74 73  act match exists
15810 20 69 6e 20 74 68 65 0a 2a 2a 20 62 2d 74 72 65   in the.** b-tre
15820 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 55 6e 70  e..*/.struct Unp
15830 61 63 6b 65 64 52 65 63 6f 72 64 20 7b 0a 20 20  ackedRecord {.  
15840 4b 65 79 49 6e 66 6f 20 2a 70 4b 65 79 49 6e 66  KeyInfo *pKeyInf
15850 6f 3b 20 20 2f 2a 20 43 6f 6c 6c 61 74 69 6f 6e  o;  /* Collation
15860 20 61 6e 64 20 73 6f 72 74 2d 6f 72 64 65 72 20   and sort-order 
15870 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 2a 2f 0a 20  information */. 
15880 20 4d 65 6d 20 2a 61 4d 65 6d 3b 20 20 20 20 20   Mem *aMem;     
15890 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 73 20 2a       /* Values *
158a0 2f 0a 20 20 75 31 36 20 6e 46 69 65 6c 64 3b 20  /.  u16 nField; 
158b0 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
158c0 72 20 6f 66 20 65 6e 74 72 69 65 73 20 69 6e 20  r of entries in 
158d0 61 70 4d 65 6d 5b 5d 20 2a 2f 0a 20 20 69 38 20  apMem[] */.  i8 
158e0 64 65 66 61 75 6c 74 5f 72 63 3b 20 20 20 20 20  default_rc;     
158f0 20 2f 2a 20 43 6f 6d 70 61 72 69 73 6f 6e 20 72   /* Comparison r
15900 65 73 75 6c 74 20 69 66 20 6b 65 79 73 20 61 72  esult if keys ar
15910 65 20 65 71 75 61 6c 20 2a 2f 0a 20 20 75 38 20  e equal */.  u8 
15920 65 72 72 43 6f 64 65 3b 20 20 20 20 20 20 20 20  errCode;        
15930 20 2f 2a 20 45 72 72 6f 72 20 64 65 74 65 63 74   /* Error detect
15940 65 64 20 62 79 20 78 52 65 63 6f 72 64 43 6f 6d  ed by xRecordCom
15950 70 61 72 65 20 28 43 4f 52 52 55 50 54 20 6f 72  pare (CORRUPT or
15960 20 4e 4f 4d 45 4d 29 20 2a 2f 0a 20 20 69 38 20   NOMEM) */.  i8 
15970 72 31 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  r1;             
15980 20 2f 2a 20 56 61 6c 75 65 20 74 6f 20 72 65 74   /* Value to ret
15990 75 72 6e 20 69 66 20 28 6c 68 73 20 3c 20 72 68  urn if (lhs < rh
159a0 73 29 20 2a 2f 0a 20 20 69 38 20 72 32 3b 20 20  s) */.  i8 r2;  
159b0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56              /* V
159c0 61 6c 75 65 20 74 6f 20 72 65 74 75 72 6e 20 69  alue to return i
159d0 66 20 28 6c 68 73 20 3e 20 72 68 73 29 20 2a 2f  f (lhs > rhs) */
159e0 0a 20 20 75 38 20 65 71 53 65 65 6e 3b 20 20 20  .  u8 eqSeen;   
159f0 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69         /* True i
15a00 66 20 61 6e 20 65 71 75 61 6c 69 74 79 20 63 6f  f an equality co
15a10 6d 70 61 72 69 73 6f 6e 20 68 61 73 20 62 65 65  mparison has bee
15a20 6e 20 73 65 65 6e 20 2a 2f 0a 7d 3b 0a 0a 0a 2f  n seen */.};.../
15a30 2a 0a 2a 2a 20 45 61 63 68 20 53 51 4c 20 69 6e  *.** Each SQL in
15a40 64 65 78 20 69 73 20 72 65 70 72 65 73 65 6e 74  dex is represent
15a50 65 64 20 69 6e 20 6d 65 6d 6f 72 79 20 62 79 20  ed in memory by 
15a60 61 6e 0a 2a 2a 20 69 6e 73 74 61 6e 63 65 20 6f  an.** instance o
15a70 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  f the following 
15a80 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a 0a 2a 2a  structure..**.**
15a90 20 54 68 65 20 63 6f 6c 75 6d 6e 73 20 6f 66 20   The columns of 
15aa0 74 68 65 20 74 61 62 6c 65 20 74 68 61 74 20 61  the table that a
15ab0 72 65 20 74 6f 20 62 65 20 69 6e 64 65 78 65 64  re to be indexed
15ac0 20 61 72 65 20 64 65 73 63 72 69 62 65 64 0a 2a   are described.*
15ad0 2a 20 62 79 20 74 68 65 20 61 69 43 6f 6c 75 6d  * by the aiColum
15ae0 6e 5b 5d 20 66 69 65 6c 64 20 6f 66 20 74 68 69  n[] field of thi
15af0 73 20 73 74 72 75 63 74 75 72 65 2e 20 20 46 6f  s structure.  Fo
15b00 72 20 65 78 61 6d 70 6c 65 2c 20 73 75 70 70 6f  r example, suppo
15b10 73 65 0a 2a 2a 20 77 65 20 68 61 76 65 20 74 68  se.** we have th
15b20 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 61 62 6c  e following tabl
15b30 65 20 61 6e 64 20 69 6e 64 65 78 3a 0a 2a 2a 0a  e and index:.**.
15b40 2a 2a 20 20 20 20 20 43 52 45 41 54 45 20 54 41  **     CREATE TA
15b50 42 4c 45 20 45 78 31 28 63 31 20 69 6e 74 2c 20  BLE Ex1(c1 int, 
15b60 63 32 20 69 6e 74 2c 20 63 33 20 74 65 78 74 29  c2 int, c3 text)
15b70 3b 0a 2a 2a 20 20 20 20 20 43 52 45 41 54 45 20  ;.**     CREATE 
15b80 49 4e 44 45 58 20 45 78 32 20 4f 4e 20 45 78 31  INDEX Ex2 ON Ex1
15b90 28 63 33 2c 63 31 29 3b 0a 2a 2a 0a 2a 2a 20 49  (c3,c1);.**.** I
15ba0 6e 20 74 68 65 20 54 61 62 6c 65 20 73 74 72 75  n the Table stru
15bb0 63 74 75 72 65 20 64 65 73 63 72 69 62 69 6e 67  cture describing
15bc0 20 45 78 31 2c 20 6e 43 6f 6c 3d 3d 33 20 62 65   Ex1, nCol==3 be
15bd0 63 61 75 73 65 20 74 68 65 72 65 20 61 72 65 0a  cause there are.
15be0 2a 2a 20 74 68 72 65 65 20 63 6f 6c 75 6d 6e 73  ** three columns
15bf0 20 69 6e 20 74 68 65 20 74 61 62 6c 65 2e 20 20   in the table.  
15c00 49 6e 20 74 68 65 20 49 6e 64 65 78 20 73 74 72  In the Index str
15c10 75 63 74 75 72 65 20 64 65 73 63 72 69 62 69 6e  ucture describin
15c20 67 0a 2a 2a 20 45 78 32 2c 20 6e 43 6f 6c 75 6d  g.** Ex2, nColum
15c30 6e 3d 3d 32 20 73 69 6e 63 65 20 32 20 6f 66 20  n==2 since 2 of 
15c40 74 68 65 20 33 20 63 6f 6c 75 6d 6e 73 20 6f 66  the 3 columns of
15c50 20 45 78 31 20 61 72 65 20 69 6e 64 65 78 65 64   Ex1 are indexed
15c60 2e 0a 2a 2a 20 54 68 65 20 76 61 6c 75 65 20 6f  ..** The value o
15c70 66 20 61 69 43 6f 6c 75 6d 6e 20 69 73 20 7b 32  f aiColumn is {2
15c80 2c 20 30 7d 2e 20 20 61 69 43 6f 6c 75 6d 6e 5b  , 0}.  aiColumn[
15c90 30 5d 3d 3d 32 20 62 65 63 61 75 73 65 20 74 68  0]==2 because th
15ca0 65 0a 2a 2a 20 66 69 72 73 74 20 63 6f 6c 75 6d  e.** first colum
15cb0 6e 20 74 6f 20 62 65 20 69 6e 64 65 78 65 64 20  n to be indexed 
15cc0 28 63 33 29 20 68 61 73 20 61 6e 20 69 6e 64 65  (c3) has an inde
15cd0 78 20 6f 66 20 32 20 69 6e 20 45 78 31 2e 61 43  x of 2 in Ex1.aC
15ce0 6f 6c 5b 5d 2e 0a 2a 2a 20 54 68 65 20 73 65 63  ol[]..** The sec
15cf0 6f 6e 64 20 63 6f 6c 75 6d 6e 20 74 6f 20 62 65  ond column to be
15d00 20 69 6e 64 65 78 65 64 20 28 63 31 29 20 68 61   indexed (c1) ha
15d10 73 20 61 6e 20 69 6e 64 65 78 20 6f 66 20 30 20  s an index of 0 
15d20 69 6e 0a 2a 2a 20 45 78 31 2e 61 43 6f 6c 5b 5d  in.** Ex1.aCol[]
15d30 2c 20 68 65 6e 63 65 20 45 78 32 2e 61 69 43 6f  , hence Ex2.aiCo
15d40 6c 75 6d 6e 5b 31 5d 3d 3d 30 2e 0a 2a 2a 0a 2a  lumn[1]==0..**.*
15d50 2a 20 54 68 65 20 49 6e 64 65 78 2e 6f 6e 45 72  * The Index.onEr
15d60 72 6f 72 20 66 69 65 6c 64 20 64 65 74 65 72 6d  ror field determ
15d70 69 6e 65 73 20 77 68 65 74 68 65 72 20 6f 72 20  ines whether or 
15d80 6e 6f 74 20 74 68 65 20 69 6e 64 65 78 65 64 20  not the indexed 
15d90 63 6f 6c 75 6d 6e 73 0a 2a 2a 20 6d 75 73 74 20  columns.** must 
15da0 62 65 20 75 6e 69 71 75 65 20 61 6e 64 20 77 68  be unique and wh
15db0 61 74 20 74 6f 20 64 6f 20 69 66 20 74 68 65 79  at to do if they
15dc0 20 61 72 65 20 6e 6f 74 2e 20 20 57 68 65 6e 20   are not.  When 
15dd0 49 6e 64 65 78 2e 6f 6e 45 72 72 6f 72 3d 4f 45  Index.onError=OE
15de0 5f 4e 6f 6e 65 2c 0a 2a 2a 20 69 74 20 6d 65 61  _None,.** it mea
15df0 6e 73 20 74 68 69 73 20 69 73 20 6e 6f 74 20 61  ns this is not a
15e00 20 75 6e 69 71 75 65 20 69 6e 64 65 78 2e 20 20   unique index.  
15e10 4f 74 68 65 72 77 69 73 65 20 69 74 20 69 73 20  Otherwise it is 
15e20 61 20 75 6e 69 71 75 65 20 69 6e 64 65 78 0a 2a  a unique index.*
15e30 2a 20 61 6e 64 20 74 68 65 20 76 61 6c 75 65 20  * and the value 
15e40 6f 66 20 49 6e 64 65 78 2e 6f 6e 45 72 72 6f 72  of Index.onError
15e50 20 69 6e 64 69 63 61 74 65 20 74 68 65 20 77 68   indicate the wh
15e60 69 63 68 20 63 6f 6e 66 6c 69 63 74 20 72 65 73  ich conflict res
15e70 6f 6c 75 74 69 6f 6e 0a 2a 2a 20 61 6c 67 6f 72  olution.** algor
15e80 69 74 68 6d 20 74 6f 20 65 6d 70 6c 6f 79 20 77  ithm to employ w
15e90 68 65 6e 65 76 65 72 20 61 6e 20 61 74 74 65 6d  henever an attem
15ea0 70 74 20 69 73 20 6d 61 64 65 20 74 6f 20 69 6e  pt is made to in
15eb0 73 65 72 74 20 61 20 6e 6f 6e 2d 75 6e 69 71 75  sert a non-uniqu
15ec0 65 0a 2a 2a 20 65 6c 65 6d 65 6e 74 2e 0a 2a 2a  e.** element..**
15ed0 0a 2a 2a 20 57 68 69 6c 65 20 70 61 72 73 69 6e  .** While parsin
15ee0 67 20 61 20 43 52 45 41 54 45 20 54 41 42 4c 45  g a CREATE TABLE
15ef0 20 6f 72 20 43 52 45 41 54 45 20 49 4e 44 45 58   or CREATE INDEX
15f00 20 73 74 61 74 65 6d 65 6e 74 20 69 6e 20 6f 72   statement in or
15f10 64 65 72 20 74 6f 0a 2a 2a 20 67 65 6e 65 72 61  der to.** genera
15f20 74 65 20 56 44 42 45 20 63 6f 64 65 20 28 61 73  te VDBE code (as
15f30 20 6f 70 70 6f 73 65 64 20 74 6f 20 70 61 72 73   opposed to pars
15f40 69 6e 67 20 6f 6e 65 20 72 65 61 64 20 66 72 6f  ing one read fro
15f50 6d 20 61 6e 20 73 71 6c 69 74 65 5f 6d 61 73 74  m an sqlite_mast
15f60 65 72 0a 2a 2a 20 74 61 62 6c 65 20 61 73 20 70  er.** table as p
15f70 61 72 74 20 6f 66 20 70 61 72 73 69 6e 67 20 61  art of parsing a
15f80 6e 20 65 78 69 73 74 69 6e 67 20 64 61 74 61 62  n existing datab
15f90 61 73 65 20 73 63 68 65 6d 61 29 2c 20 74 72 61  ase schema), tra
15fa0 6e 73 69 65 6e 74 20 69 6e 73 74 61 6e 63 65 73  nsient instances
15fb0 0a 2a 2a 20 6f 66 20 74 68 69 73 20 73 74 72 75  .** of this stru
15fc0 63 74 75 72 65 20 6d 61 79 20 62 65 20 63 72 65  cture may be cre
15fd0 61 74 65 64 2e 20 49 6e 20 74 68 69 73 20 63 61  ated. In this ca
15fe0 73 65 20 74 68 65 20 49 6e 64 65 78 2e 74 6e 75  se the Index.tnu
15ff0 6d 20 76 61 72 69 61 62 6c 65 20 69 73 0a 2a 2a  m variable is.**
16000 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20 74   used to store t
16010 68 65 20 61 64 64 72 65 73 73 20 6f 66 20 61 20  he address of a 
16020 56 44 42 45 20 69 6e 73 74 72 75 63 74 69 6f 6e  VDBE instruction
16030 2c 20 6e 6f 74 20 61 20 64 61 74 61 62 61 73 65  , not a database
16040 20 70 61 67 65 0a 2a 2a 20 6e 75 6d 62 65 72 20   page.** number 
16050 28 69 74 20 63 61 6e 6e 6f 74 20 2d 20 74 68 65  (it cannot - the
16060 20 64 61 74 61 62 61 73 65 20 70 61 67 65 20 69   database page i
16070 73 20 6e 6f 74 20 61 6c 6c 6f 63 61 74 65 64 20  s not allocated 
16080 75 6e 74 69 6c 20 74 68 65 20 56 44 42 45 0a 2a  until the VDBE.*
16090 2a 20 70 72 6f 67 72 61 6d 20 69 73 20 65 78 65  * program is exe
160a0 63 75 74 65 64 29 2e 20 53 65 65 20 63 6f 6e 76  cuted). See conv
160b0 65 72 74 54 6f 57 69 74 68 6f 75 74 52 6f 77 69  ertToWithoutRowi
160c0 64 54 61 62 6c 65 28 29 20 66 6f 72 20 64 65 74  dTable() for det
160d0 61 69 6c 73 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  ails..*/.struct 
160e0 49 6e 64 65 78 20 7b 0a 20 20 63 68 61 72 20 2a  Index {.  char *
160f0 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20  zName;          
16100 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68     /* Name of th
16110 69 73 20 69 6e 64 65 78 20 2a 2f 0a 20 20 69 31  is index */.  i1
16120 36 20 2a 61 69 43 6f 6c 75 6d 6e 3b 20 20 20 20  6 *aiColumn;    
16130 20 20 20 20 20 20 20 2f 2a 20 57 68 69 63 68 20         /* Which 
16140 63 6f 6c 75 6d 6e 73 20 61 72 65 20 75 73 65 64  columns are used
16150 20 62 79 20 74 68 69 73 20 69 6e 64 65 78 2e 20   by this index. 
16160 20 31 73 74 20 69 73 20 30 20 2a 2f 0a 20 20 4c   1st is 0 */.  L
16170 6f 67 45 73 74 20 2a 61 69 52 6f 77 4c 6f 67 45  ogEst *aiRowLogE
16180 73 74 3b 20 20 20 20 20 2f 2a 20 46 72 6f 6d 20  st;     /* From 
16190 41 4e 41 4c 59 5a 45 3a 20 45 73 74 2e 20 72 6f  ANALYZE: Est. ro
161a0 77 73 20 73 65 6c 65 63 74 65 64 20 62 79 20 65  ws selected by e
161b0 61 63 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20  ach column */.  
161c0 54 61 62 6c 65 20 2a 70 54 61 62 6c 65 3b 20 20  Table *pTable;  
161d0 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
161e0 53 51 4c 20 74 61 62 6c 65 20 62 65 69 6e 67 20  SQL table being 
161f0 69 6e 64 65 78 65 64 20 2a 2f 0a 20 20 63 68 61  indexed */.  cha
16200 72 20 2a 7a 43 6f 6c 41 66 66 3b 20 20 20 20 20  r *zColAff;     
16210 20 20 20 20 20 20 2f 2a 20 53 74 72 69 6e 67 20        /* String 
16220 64 65 66 69 6e 69 6e 67 20 74 68 65 20 61 66 66  defining the aff
16230 69 6e 69 74 79 20 6f 66 20 65 61 63 68 20 63 6f  inity of each co
16240 6c 75 6d 6e 20 2a 2f 0a 20 20 49 6e 64 65 78 20  lumn */.  Index 
16250 2a 70 4e 65 78 74 3b 20 20 20 20 20 20 20 20 20  *pNext;         
16260 20 20 20 2f 2a 20 54 68 65 20 6e 65 78 74 20 69     /* The next i
16270 6e 64 65 78 20 61 73 73 6f 63 69 61 74 65 64 20  ndex associated 
16280 77 69 74 68 20 74 68 65 20 73 61 6d 65 20 74 61  with the same ta
16290 62 6c 65 20 2a 2f 0a 20 20 53 63 68 65 6d 61 20  ble */.  Schema 
162a0 2a 70 53 63 68 65 6d 61 3b 20 20 20 20 20 20 20  *pSchema;       
162b0 20 20 2f 2a 20 53 63 68 65 6d 61 20 63 6f 6e 74    /* Schema cont
162c0 61 69 6e 69 6e 67 20 74 68 69 73 20 69 6e 64 65  aining this inde
162d0 78 20 2a 2f 0a 20 20 75 38 20 2a 61 53 6f 72 74  x */.  u8 *aSort
162e0 4f 72 64 65 72 3b 20 20 20 20 20 20 20 20 20 20  Order;          
162f0 2f 2a 20 66 6f 72 20 65 61 63 68 20 63 6f 6c 75  /* for each colu
16300 6d 6e 3a 20 54 72 75 65 3d 3d 44 45 53 43 2c 20  mn: True==DESC, 
16310 46 61 6c 73 65 3d 3d 41 53 43 20 2a 2f 0a 20 20  False==ASC */.  
16320 63 6f 6e 73 74 20 63 68 61 72 20 2a 2a 61 7a 43  const char **azC
16330 6f 6c 6c 3b 20 20 20 20 20 2f 2a 20 41 72 72 61  oll;     /* Arra
16340 79 20 6f 66 20 63 6f 6c 6c 61 74 69 6f 6e 20 73  y of collation s
16350 65 71 75 65 6e 63 65 20 6e 61 6d 65 73 20 66 6f  equence names fo
16360 72 20 69 6e 64 65 78 20 2a 2f 0a 20 20 45 78 70  r index */.  Exp
16370 72 20 2a 70 50 61 72 74 49 64 78 57 68 65 72 65  r *pPartIdxWhere
16380 3b 20 20 20 20 20 2f 2a 20 57 48 45 52 45 20 63  ;     /* WHERE c
16390 6c 61 75 73 65 20 66 6f 72 20 70 61 72 74 69 61  lause for partia
163a0 6c 20 69 6e 64 69 63 65 73 20 2a 2f 0a 20 20 45  l indices */.  E
163b0 78 70 72 4c 69 73 74 20 2a 61 43 6f 6c 45 78 70  xprList *aColExp
163c0 72 3b 20 20 20 20 20 20 2f 2a 20 43 6f 6c 75 6d  r;      /* Colum
163d0 6e 20 65 78 70 72 65 73 73 69 6f 6e 73 20 2a 2f  n expressions */
163e0 0a 20 20 69 6e 74 20 74 6e 75 6d 3b 20 20 20 20  .  int tnum;    
163f0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44              /* D
16400 42 20 50 61 67 65 20 63 6f 6e 74 61 69 6e 69 6e  B Page containin
16410 67 20 72 6f 6f 74 20 6f 66 20 74 68 69 73 20 69  g root of this i
16420 6e 64 65 78 20 2a 2f 0a 20 20 4c 6f 67 45 73 74  ndex */.  LogEst
16430 20 73 7a 49 64 78 52 6f 77 3b 20 20 20 20 20 20   szIdxRow;      
16440 20 20 20 2f 2a 20 45 73 74 69 6d 61 74 65 64 20     /* Estimated 
16450 61 76 65 72 61 67 65 20 72 6f 77 20 73 69 7a 65  average row size
16460 20 69 6e 20 62 79 74 65 73 20 2a 2f 0a 20 20 75   in bytes */.  u
16470 31 36 20 6e 4b 65 79 43 6f 6c 3b 20 20 20 20 20  16 nKeyCol;     
16480 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
16490 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 66 6f 72  r of columns for
164a0 6d 69 6e 67 20 74 68 65 20 6b 65 79 20 2a 2f 0a  ming the key */.
164b0 20 20 75 31 36 20 6e 43 6f 6c 75 6d 6e 3b 20 20    u16 nColumn;  
164c0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
164d0 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20  mber of columns 
164e0 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20 69 6e  stored in the in
164f0 64 65 78 20 2a 2f 0a 20 20 75 38 20 6f 6e 45 72  dex */.  u8 onEr
16500 72 6f 72 3b 20 20 20 20 20 20 20 20 20 20 20 20  ror;            
16510 20 20 2f 2a 20 4f 45 5f 41 62 6f 72 74 2c 20 4f    /* OE_Abort, O
16520 45 5f 49 67 6e 6f 72 65 2c 20 4f 45 5f 52 65 70  E_Ignore, OE_Rep
16530 6c 61 63 65 2c 20 6f 72 20 4f 45 5f 4e 6f 6e 65  lace, or OE_None
16540 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 69   */.  unsigned i
16550 64 78 54 79 70 65 3a 32 3b 20 20 20 20 20 20 2f  dxType:2;      /
16560 2a 20 31 3d 3d 55 4e 49 51 55 45 2c 20 32 3d 3d  * 1==UNIQUE, 2==
16570 50 52 49 4d 41 52 59 20 4b 45 59 2c 20 30 3d 3d  PRIMARY KEY, 0==
16580 43 52 45 41 54 45 20 49 4e 44 45 58 20 2a 2f 0a  CREATE INDEX */.
16590 20 20 75 6e 73 69 67 6e 65 64 20 62 55 6e 6f 72    unsigned bUnor
165a0 64 65 72 65 64 3a 31 3b 20 20 20 2f 2a 20 55 73  dered:1;   /* Us
165b0 65 20 74 68 69 73 20 69 6e 64 65 78 20 66 6f 72  e this index for
165c0 20 3d 3d 20 6f 72 20 49 4e 20 71 75 65 72 69 65   == or IN querie
165d0 73 20 6f 6e 6c 79 20 2a 2f 0a 20 20 75 6e 73 69  s only */.  unsi
165e0 67 6e 65 64 20 75 6e 69 71 4e 6f 74 4e 75 6c 6c  gned uniqNotNull
165f0 3a 31 3b 20 20 2f 2a 20 54 72 75 65 20 69 66 20  :1;  /* True if 
16600 55 4e 49 51 55 45 20 61 6e 64 20 4e 4f 54 20 4e  UNIQUE and NOT N
16610 55 4c 4c 20 66 6f 72 20 61 6c 6c 20 63 6f 6c 75  ULL for all colu
16620 6d 6e 73 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65  mns */.  unsigne
16630 64 20 69 73 52 65 73 69 7a 65 64 3a 31 3b 20 20  d isResized:1;  
16640 20 20 2f 2a 20 54 72 75 65 20 69 66 20 72 65 73    /* True if res
16650 69 7a 65 49 6e 64 65 78 4f 62 6a 65 63 74 28 29  izeIndexObject()
16660 20 68 61 73 20 62 65 65 6e 20 63 61 6c 6c 65 64   has been called
16670 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 69   */.  unsigned i
16680 73 43 6f 76 65 72 69 6e 67 3a 31 3b 20 20 20 2f  sCovering:1;   /
16690 2a 20 54 72 75 65 20 69 66 20 74 68 69 73 20 69  * True if this i
166a0 73 20 61 20 63 6f 76 65 72 69 6e 67 20 69 6e 64  s a covering ind
166b0 65 78 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64  ex */.  unsigned
166c0 20 6e 6f 53 6b 69 70 53 63 61 6e 3a 31 3b 20 20   noSkipScan:1;  
166d0 20 2f 2a 20 44 6f 20 6e 6f 74 20 74 72 79 20 74   /* Do not try t
166e0 6f 20 75 73 65 20 73 6b 69 70 2d 73 63 61 6e 20  o use skip-scan 
166f0 69 66 20 74 72 75 65 20 2a 2f 0a 20 20 75 6e 73  if true */.  uns
16700 69 67 6e 65 64 20 68 61 73 53 74 61 74 31 3a 31  igned hasStat1:1
16710 3b 20 20 20 20 20 2f 2a 20 61 69 52 6f 77 4c 6f  ;     /* aiRowLo
16720 67 45 73 74 20 76 61 6c 75 65 73 20 63 6f 6d 65  gEst values come
16730 20 66 72 6f 6d 20 73 71 6c 69 74 65 5f 73 74 61   from sqlite_sta
16740 74 31 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64  t1 */.  unsigned
16750 20 62 4e 6f 51 75 65 72 79 3a 31 3b 20 20 20 20   bNoQuery:1;    
16760 20 2f 2a 20 44 6f 20 6e 6f 74 20 75 73 65 20 74   /* Do not use t
16770 68 69 73 20 69 6e 64 65 78 20 74 6f 20 6f 70 74  his index to opt
16780 69 6d 69 7a 65 20 71 75 65 72 69 65 73 20 2a 2f  imize queries */
16790 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45  .#ifdef SQLITE_E
167a0 4e 41 42 4c 45 5f 53 54 41 54 33 5f 4f 52 5f 53  NABLE_STAT3_OR_S
167b0 54 41 54 34 0a 20 20 69 6e 74 20 6e 53 61 6d 70  TAT4.  int nSamp
167c0 6c 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  le;             
167d0 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 6c 65  /* Number of ele
167e0 6d 65 6e 74 73 20 69 6e 20 61 53 61 6d 70 6c 65  ments in aSample
167f0 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 61 6d  [] */.  int nSam
16800 70 6c 65 43 6f 6c 3b 20 20 20 20 20 20 20 20 20  pleCol;         
16810 20 2f 2a 20 53 69 7a 65 20 6f 66 20 49 6e 64 65   /* Size of Inde
16820 78 53 61 6d 70 6c 65 2e 61 6e 45 71 5b 5d 20 61  xSample.anEq[] a
16830 6e 64 20 73 6f 20 6f 6e 20 2a 2f 0a 20 20 74 52  nd so on */.  tR
16840 6f 77 63 6e 74 20 2a 61 41 76 67 45 71 3b 20 20  owcnt *aAvgEq;  
16850 20 20 20 20 20 20 20 2f 2a 20 41 76 65 72 61 67         /* Averag
16860 65 20 6e 45 71 20 76 61 6c 75 65 73 20 66 6f 72  e nEq values for
16870 20 6b 65 79 73 20 6e 6f 74 20 69 6e 20 61 53 61   keys not in aSa
16880 6d 70 6c 65 20 2a 2f 0a 20 20 49 6e 64 65 78 53  mple */.  IndexS
16890 61 6d 70 6c 65 20 2a 61 53 61 6d 70 6c 65 3b 20  ample *aSample; 
168a0 20 20 20 2f 2a 20 53 61 6d 70 6c 65 73 20 6f 66     /* Samples of
168b0 20 74 68 65 20 6c 65 66 74 2d 6d 6f 73 74 20 6b   the left-most k
168c0 65 79 20 2a 2f 0a 20 20 74 52 6f 77 63 6e 74 20  ey */.  tRowcnt 
168d0 2a 61 69 52 6f 77 45 73 74 3b 20 20 20 20 20 20  *aiRowEst;      
168e0 20 2f 2a 20 4e 6f 6e 2d 6c 6f 67 61 72 69 74 68   /* Non-logarith
168f0 6d 69 63 20 73 74 61 74 31 20 64 61 74 61 20 66  mic stat1 data f
16900 6f 72 20 74 68 69 73 20 69 6e 64 65 78 20 2a 2f  or this index */
16910 0a 20 20 74 52 6f 77 63 6e 74 20 6e 52 6f 77 45  .  tRowcnt nRowE
16920 73 74 30 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e  st0;        /* N
16930 6f 6e 2d 6c 6f 67 61 72 69 74 68 6d 69 63 20 6e  on-logarithmic n
16940 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 69 6e  umber of rows in
16950 20 74 68 65 20 69 6e 64 65 78 20 2a 2f 0a 23 65   the index */.#e
16960 6e 64 69 66 0a 20 20 42 69 74 6d 61 73 6b 20 63  ndif.  Bitmask c
16970 6f 6c 4e 6f 74 49 64 78 65 64 3b 20 20 20 20 20  olNotIdxed;     
16980 2f 2a 20 30 20 66 6f 72 20 75 6e 69 6e 64 65 78  /* 0 for unindex
16990 65 64 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 70 54  ed columns in pT
169a0 61 62 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  ab */.};../*.** 
169b0 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20 66  Allowed values f
169c0 6f 72 20 49 6e 64 65 78 2e 69 64 78 54 79 70 65  or Index.idxType
169d0 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  .*/.#define SQLI
169e0 54 45 5f 49 44 58 54 59 50 45 5f 41 50 50 44 45  TE_IDXTYPE_APPDE
169f0 46 20 20 20 20 20 20 30 20 20 20 2f 2a 20 43 72  F      0   /* Cr
16a00 65 61 74 65 64 20 75 73 69 6e 67 20 43 52 45 41  eated using CREA
16a10 54 45 20 49 4e 44 45 58 20 2a 2f 0a 23 64 65 66  TE INDEX */.#def
16a20 69 6e 65 20 53 51 4c 49 54 45 5f 49 44 58 54 59  ine SQLITE_IDXTY
16a30 50 45 5f 55 4e 49 51 55 45 20 20 20 20 20 20 31  PE_UNIQUE      1
16a40 20 20 20 2f 2a 20 49 6d 70 6c 65 6d 65 6e 74 73     /* Implements
16a50 20 61 20 55 4e 49 51 55 45 20 63 6f 6e 73 74 72   a UNIQUE constr
16a60 61 69 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20  aint */.#define 
16a70 53 51 4c 49 54 45 5f 49 44 58 54 59 50 45 5f 50  SQLITE_IDXTYPE_P
16a80 52 49 4d 41 52 59 4b 45 59 20 20 32 20 20 20 2f  RIMARYKEY  2   /
16a90 2a 20 49 73 20 74 68 65 20 50 52 49 4d 41 52 59  * Is the PRIMARY
16aa0 20 4b 45 59 20 66 6f 72 20 74 68 65 20 74 61 62   KEY for the tab
16ab0 6c 65 20 2a 2f 0a 0a 2f 2a 20 52 65 74 75 72 6e  le */../* Return
16ac0 20 74 72 75 65 20 69 66 20 69 6e 64 65 78 20 58   true if index X
16ad0 20 69 73 20 61 20 50 52 49 4d 41 52 59 20 4b 45   is a PRIMARY KE
16ae0 59 20 69 6e 64 65 78 20 2a 2f 0a 23 64 65 66 69  Y index */.#defi
16af0 6e 65 20 49 73 50 72 69 6d 61 72 79 4b 65 79 49  ne IsPrimaryKeyI
16b00 6e 64 65 78 28 58 29 20 20 28 28 58 29 2d 3e 69  ndex(X)  ((X)->i
16b10 64 78 54 79 70 65 3d 3d 53 51 4c 49 54 45 5f 49  dxType==SQLITE_I
16b20 44 58 54 59 50 45 5f 50 52 49 4d 41 52 59 4b 45  DXTYPE_PRIMARYKE
16b30 59 29 0a 0a 2f 2a 20 52 65 74 75 72 6e 20 74 72  Y)../* Return tr
16b40 75 65 20 69 66 20 69 6e 64 65 78 20 58 20 69 73  ue if index X is
16b50 20 61 20 55 4e 49 51 55 45 20 69 6e 64 65 78 20   a UNIQUE index 
16b60 2a 2f 0a 23 64 65 66 69 6e 65 20 49 73 55 6e 69  */.#define IsUni
16b70 71 75 65 49 6e 64 65 78 28 58 29 20 20 20 20 20  queIndex(X)     
16b80 20 28 28 58 29 2d 3e 6f 6e 45 72 72 6f 72 21 3d   ((X)->onError!=
16b90 4f 45 5f 4e 6f 6e 65 29 0a 0a 2f 2a 20 54 68 65  OE_None)../* The
16ba0 20 49 6e 64 65 78 2e 61 69 43 6f 6c 75 6d 6e 5b   Index.aiColumn[
16bb0 5d 20 76 61 6c 75 65 73 20 61 72 65 20 6e 6f 72  ] values are nor
16bc0 6d 61 6c 6c 79 20 70 6f 73 69 74 69 76 65 20 69  mally positive i
16bd0 6e 74 65 67 65 72 2e 20 20 42 75 74 0a 2a 2a 20  nteger.  But.** 
16be0 74 68 65 72 65 20 61 72 65 20 73 6f 6d 65 20 6e  there are some n
16bf0 65 67 61 74 69 76 65 20 76 61 6c 75 65 73 20 74  egative values t
16c00 68 61 74 20 68 61 76 65 20 73 70 65 63 69 61 6c  hat have special
16c10 20 6d 65 61 6e 69 6e 67 3a 0a 2a 2f 0a 23 64 65   meaning:.*/.#de
16c20 66 69 6e 65 20 58 4e 5f 52 4f 57 49 44 20 20 20  fine XN_ROWID   
16c30 20 20 28 2d 31 29 20 20 20 20 20 2f 2a 20 49 6e    (-1)     /* In
16c40 64 65 78 65 64 20 63 6f 6c 75 6d 6e 20 69 73 20  dexed column is 
16c50 74 68 65 20 72 6f 77 69 64 20 2a 2f 0a 23 64 65  the rowid */.#de
16c60 66 69 6e 65 20 58 4e 5f 45 58 50 52 20 20 20 20  fine XN_EXPR    
16c70 20 20 28 2d 32 29 20 20 20 20 20 2f 2a 20 49 6e    (-2)     /* In
16c80 64 65 78 65 64 20 63 6f 6c 75 6d 6e 20 69 73 20  dexed column is 
16c90 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 2a 2f  an expression */
16ca0 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 73 61 6d  ../*.** Each sam
16cb0 70 6c 65 20 73 74 6f 72 65 64 20 69 6e 20 74 68  ple stored in th
16cc0 65 20 73 71 6c 69 74 65 5f 73 74 61 74 33 20 74  e sqlite_stat3 t
16cd0 61 62 6c 65 20 69 73 20 72 65 70 72 65 73 65 6e  able is represen
16ce0 74 65 64 20 69 6e 20 6d 65 6d 6f 72 79 0a 2a 2a  ted in memory.**
16cf0 20 75 73 69 6e 67 20 61 20 73 74 72 75 63 74 75   using a structu
16d00 72 65 20 6f 66 20 74 68 69 73 20 74 79 70 65 2e  re of this type.
16d10 20 20 53 65 65 20 64 6f 63 75 6d 65 6e 74 61 74    See documentat
16d20 69 6f 6e 20 61 74 20 74 68 65 20 74 6f 70 20 6f  ion at the top o
16d30 66 20 74 68 65 0a 2a 2a 20 61 6e 61 6c 79 7a 65  f the.** analyze
16d40 2e 63 20 73 6f 75 72 63 65 20 66 69 6c 65 20 66  .c source file f
16d50 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e  or additional in
16d60 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 73 74  formation..*/.st
16d70 72 75 63 74 20 49 6e 64 65 78 53 61 6d 70 6c 65  ruct IndexSample
16d80 20 7b 0a 20 20 76 6f 69 64 20 2a 70 3b 20 20 20   {.  void *p;   
16d90 20 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65         /* Pointe
16da0 72 20 74 6f 20 73 61 6d 70 6c 65 64 20 72 65 63  r to sampled rec
16db0 6f 72 64 20 2a 2f 0a 20 20 69 6e 74 20 6e 3b 20  ord */.  int n; 
16dc0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 69             /* Si
16dd0 7a 65 20 6f 66 20 72 65 63 6f 72 64 20 69 6e 20  ze of record in 
16de0 62 79 74 65 73 20 2a 2f 0a 20 20 74 52 6f 77 63  bytes */.  tRowc
16df0 6e 74 20 2a 61 6e 45 71 3b 20 20 20 20 2f 2a 20  nt *anEq;    /* 
16e00 45 73 74 2e 20 6e 75 6d 62 65 72 20 6f 66 20 72  Est. number of r
16e10 6f 77 73 20 77 68 65 72 65 20 74 68 65 20 6b 65  ows where the ke
16e20 79 20 65 71 75 61 6c 73 20 74 68 69 73 20 73 61  y equals this sa
16e30 6d 70 6c 65 20 2a 2f 0a 20 20 74 52 6f 77 63 6e  mple */.  tRowcn
16e40 74 20 2a 61 6e 4c 74 3b 20 20 20 20 2f 2a 20 45  t *anLt;    /* E
16e50 73 74 2e 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f  st. number of ro
16e60 77 73 20 77 68 65 72 65 20 6b 65 79 20 69 73 20  ws where key is 
16e70 6c 65 73 73 20 74 68 61 6e 20 74 68 69 73 20 73  less than this s
16e80 61 6d 70 6c 65 20 2a 2f 0a 20 20 74 52 6f 77 63  ample */.  tRowc
16e90 6e 74 20 2a 61 6e 44 4c 74 3b 20 20 20 2f 2a 20  nt *anDLt;   /* 
16ea0 45 73 74 2e 20 6e 75 6d 62 65 72 20 6f 66 20 64  Est. number of d
16eb0 69 73 74 69 6e 63 74 20 6b 65 79 73 20 6c 65 73  istinct keys les
16ec0 73 20 74 68 61 6e 20 74 68 69 73 20 73 61 6d 70  s than this samp
16ed0 6c 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  le */.};../*.** 
16ee0 45 61 63 68 20 74 6f 6b 65 6e 20 63 6f 6d 69 6e  Each token comin
16ef0 67 20 6f 75 74 20 6f 66 20 74 68 65 20 6c 65 78  g out of the lex
16f00 65 72 20 69 73 20 61 6e 20 69 6e 73 74 61 6e 63  er is an instanc
16f10 65 20 6f 66 0a 2a 2a 20 74 68 69 73 20 73 74 72  e of.** this str
16f20 75 63 74 75 72 65 2e 20 20 54 6f 6b 65 6e 73 20  ucture.  Tokens 
16f30 61 72 65 20 61 6c 73 6f 20 75 73 65 64 20 61 73  are also used as
16f40 20 70 61 72 74 20 6f 66 20 61 6e 20 65 78 70 72   part of an expr
16f50 65 73 73 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68  ession..**.** Th
16f60 65 20 6d 65 6d 6f 72 79 20 74 68 61 74 20 22 7a  e memory that "z
16f70 22 20 70 6f 69 6e 74 73 20 74 6f 20 69 73 20 6f  " points to is o
16f80 77 6e 65 64 20 62 79 20 6f 74 68 65 72 20 6f 62  wned by other ob
16f90 6a 65 63 74 73 2e 20 20 54 61 6b 65 20 63 61 72  jects.  Take car
16fa0 65 0a 2a 2a 20 74 68 61 74 20 74 68 65 20 6f 77  e.** that the ow
16fb0 6e 65 72 20 6f 66 20 74 68 65 20 22 7a 22 20 73  ner of the "z" s
16fc0 74 72 69 6e 67 20 64 6f 65 73 20 6e 6f 74 20 64  tring does not d
16fd0 65 61 6c 6c 6f 63 61 74 65 20 74 68 65 20 73 74  eallocate the st
16fe0 72 69 6e 67 20 62 65 66 6f 72 65 0a 2a 2a 20 74  ring before.** t
16ff0 68 65 20 54 6f 6b 65 6e 20 67 6f 65 73 20 6f 75  he Token goes ou
17000 74 20 6f 66 20 73 63 6f 70 65 21 20 20 56 65 72  t of scope!  Ver
17010 79 20 6f 66 74 65 6e 2c 20 74 68 65 20 22 7a 22  y often, the "z"
17020 20 70 6f 69 6e 74 73 20 74 6f 20 73 6f 6d 65 20   points to some 
17030 70 6c 61 63 65 0a 2a 2a 20 69 6e 20 74 68 65 20  place.** in the 
17040 6d 69 64 64 6c 65 20 6f 66 20 74 68 65 20 50 61  middle of the Pa
17050 72 73 65 2e 7a 53 71 6c 20 74 65 78 74 2e 20 20  rse.zSql text.  
17060 42 75 74 20 69 74 20 6d 69 67 68 74 20 61 6c 73  But it might als
17070 6f 20 70 6f 69 6e 74 20 74 6f 20 61 0a 2a 2a 20  o point to a.** 
17080 73 74 61 74 69 63 20 73 74 72 69 6e 67 2e 0a 2a  static string..*
17090 2f 0a 73 74 72 75 63 74 20 54 6f 6b 65 6e 20 7b  /.struct Token {
170a0 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  .  const char *z
170b0 3b 20 20 20 20 20 2f 2a 20 54 65 78 74 20 6f 66  ;     /* Text of
170c0 20 74 68 65 20 74 6f 6b 65 6e 2e 20 20 4e 6f 74   the token.  Not
170d0 20 4e 55 4c 4c 2d 74 65 72 6d 69 6e 61 74 65 64   NULL-terminated
170e0 21 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20  ! */.  unsigned 
170f0 69 6e 74 20 6e 3b 20 20 20 20 2f 2a 20 4e 75 6d  int n;    /* Num
17100 62 65 72 20 6f 66 20 63 68 61 72 61 63 74 65 72  ber of character
17110 73 20 69 6e 20 74 68 69 73 20 74 6f 6b 65 6e 20  s in this token 
17120 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20  */.};../*.** An 
17130 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73  instance of this
17140 20 73 74 72 75 63 74 75 72 65 20 63 6f 6e 74 61   structure conta
17150 69 6e 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  ins information 
17160 6e 65 65 64 65 64 20 74 6f 20 67 65 6e 65 72 61  needed to genera
17170 74 65 0a 2a 2a 20 63 6f 64 65 20 66 6f 72 20 61  te.** code for a
17180 20 53 45 4c 45 43 54 20 74 68 61 74 20 63 6f 6e   SELECT that con
17190 74 61 69 6e 73 20 61 67 67 72 65 67 61 74 65 20  tains aggregate 
171a0 66 75 6e 63 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a  functions..**.**
171b0 20 49 66 20 45 78 70 72 2e 6f 70 3d 3d 54 4b 5f   If Expr.op==TK_
171c0 41 47 47 5f 43 4f 4c 55 4d 4e 20 6f 72 20 54 4b  AGG_COLUMN or TK
171d0 5f 41 47 47 5f 46 55 4e 43 54 49 4f 4e 20 74 68  _AGG_FUNCTION th
171e0 65 6e 20 45 78 70 72 2e 70 41 67 67 49 6e 66 6f  en Expr.pAggInfo
171f0 20 69 73 20 61 0a 2a 2a 20 70 6f 69 6e 74 65 72   is a.** pointer
17200 20 74 6f 20 74 68 69 73 20 73 74 72 75 63 74 75   to this structu
17210 72 65 2e 20 20 54 68 65 20 45 78 70 72 2e 69 43  re.  The Expr.iC
17220 6f 6c 75 6d 6e 20 66 69 65 6c 64 20 69 73 20 74  olumn field is t
17230 68 65 20 69 6e 64 65 78 20 69 6e 0a 2a 2a 20 41  he index in.** A
17240 67 67 49 6e 66 6f 2e 61 43 6f 6c 5b 5d 20 6f 72  ggInfo.aCol[] or
17250 20 41 67 67 49 6e 66 6f 2e 61 46 75 6e 63 5b 5d   AggInfo.aFunc[]
17260 20 6f 66 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20   of information 
17270 6e 65 65 64 65 64 20 74 6f 20 67 65 6e 65 72 61  needed to genera
17280 74 65 0a 2a 2a 20 63 6f 64 65 20 66 6f 72 20 74  te.** code for t
17290 68 61 74 20 6e 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20  hat node..**.** 
172a0 41 67 67 49 6e 66 6f 2e 70 47 72 6f 75 70 42 79  AggInfo.pGroupBy
172b0 20 61 6e 64 20 41 67 67 49 6e 66 6f 2e 61 46 75   and AggInfo.aFu
172c0 6e 63 2e 70 45 78 70 72 20 70 6f 69 6e 74 20 74  nc.pExpr point t
172d0 6f 20 66 69 65 6c 64 73 20 77 69 74 68 69 6e 20  o fields within 
172e0 74 68 65 0a 2a 2a 20 6f 72 69 67 69 6e 61 6c 20  the.** original 
172f0 53 65 6c 65 63 74 20 73 74 72 75 63 74 75 72 65  Select structure
17300 20 74 68 61 74 20 64 65 73 63 72 69 62 65 73 20   that describes 
17310 74 68 65 20 53 45 4c 45 43 54 20 73 74 61 74 65  the SELECT state
17320 6d 65 6e 74 2e 20 20 54 68 65 73 65 0a 2a 2a 20  ment.  These.** 
17330 66 69 65 6c 64 73 20 64 6f 20 6e 6f 74 20 6e 65  fields do not ne
17340 65 64 20 74 6f 20 62 65 20 66 72 65 65 64 20 77  ed to be freed w
17350 68 65 6e 20 64 65 61 6c 6c 6f 63 61 74 69 6e 67  hen deallocating
17360 20 74 68 65 20 41 67 67 49 6e 66 6f 20 73 74 72   the AggInfo str
17370 75 63 74 75 72 65 2e 0a 2a 2f 0a 73 74 72 75 63  ucture..*/.struc
17380 74 20 41 67 67 49 6e 66 6f 20 7b 0a 20 20 75 38  t AggInfo {.  u8
17390 20 64 69 72 65 63 74 4d 6f 64 65 3b 20 20 20 20   directMode;    
173a0 20 20 20 20 20 20 2f 2a 20 44 69 72 65 63 74 20        /* Direct 
173b0 72 65 6e 64 65 72 69 6e 67 20 6d 6f 64 65 20 6d  rendering mode m
173c0 65 61 6e 73 20 74 61 6b 65 20 64 61 74 61 20 64  eans take data d
173d0 69 72 65 63 74 6c 79 0a 20 20 20 20 20 20 20 20  irectly.        
173e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
173f0 20 20 2a 2a 20 66 72 6f 6d 20 73 6f 75 72 63 65    ** from source
17400 20 74 61 62 6c 65 73 20 72 61 74 68 65 72 20 74   tables rather t
17410 68 61 6e 20 66 72 6f 6d 20 61 63 63 75 6d 75 6c  han from accumul
17420 61 74 6f 72 73 20 2a 2f 0a 20 20 75 38 20 75 73  ators */.  u8 us
17430 65 53 6f 72 74 69 6e 67 49 64 78 3b 20 20 20 20  eSortingIdx;    
17440 20 20 20 2f 2a 20 49 6e 20 64 69 72 65 63 74 20     /* In direct 
17450 6d 6f 64 65 2c 20 72 65 66 65 72 65 6e 63 65 20  mode, reference 
17460 74 68 65 20 73 6f 72 74 69 6e 67 20 69 6e 64 65  the sorting inde
17470 78 20 72 61 74 68 65 72 0a 20 20 20 20 20 20 20  x rather.       
17480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17490 20 20 20 2a 2a 20 74 68 61 6e 20 74 68 65 20 73     ** than the s
174a0 6f 75 72 63 65 20 74 61 62 6c 65 20 2a 2f 0a 20  ource table */. 
174b0 20 69 6e 74 20 73 6f 72 74 69 6e 67 49 64 78 3b   int sortingIdx;
174c0 20 20 20 20 20 20 20 20 20 2f 2a 20 43 75 72 73           /* Curs
174d0 6f 72 20 6e 75 6d 62 65 72 20 6f 66 20 74 68 65  or number of the
174e0 20 73 6f 72 74 69 6e 67 20 69 6e 64 65 78 20 2a   sorting index *
174f0 2f 0a 20 20 69 6e 74 20 73 6f 72 74 69 6e 67 49  /.  int sortingI
17500 64 78 50 54 61 62 3b 20 20 20 20 20 2f 2a 20 43  dxPTab;     /* C
17510 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 6f 66 20  ursor number of 
17520 70 73 65 75 64 6f 2d 74 61 62 6c 65 20 2a 2f 0a  pseudo-table */.
17530 20 20 69 6e 74 20 6e 53 6f 72 74 69 6e 67 43 6f    int nSortingCo
17540 6c 75 6d 6e 3b 20 20 20 20 20 2f 2a 20 4e 75 6d  lumn;     /* Num
17550 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69  ber of columns i
17560 6e 20 74 68 65 20 73 6f 72 74 69 6e 67 20 69 6e  n the sorting in
17570 64 65 78 20 2a 2f 0a 20 20 69 6e 74 20 6d 6e 52  dex */.  int mnR
17580 65 67 2c 20 6d 78 52 65 67 3b 20 20 20 20 20 20  eg, mxReg;      
17590 20 2f 2a 20 52 61 6e 67 65 20 6f 66 20 72 65 67   /* Range of reg
175a0 69 73 74 65 72 73 20 61 6c 6c 6f 63 61 74 65 64  isters allocated
175b0 20 66 6f 72 20 61 43 6f 6c 20 61 6e 64 20 61 46   for aCol and aF
175c0 75 6e 63 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73  unc */.  ExprLis
175d0 74 20 2a 70 47 72 6f 75 70 42 79 3b 20 20 20 20  t *pGroupBy;    
175e0 20 2f 2a 20 54 68 65 20 67 72 6f 75 70 20 62 79   /* The group by
175f0 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 73 74 72   clause */.  str
17600 75 63 74 20 41 67 67 49 6e 66 6f 5f 63 6f 6c 20  uct AggInfo_col 
17610 7b 20 20 20 20 2f 2a 20 46 6f 72 20 65 61 63 68  {    /* For each
17620 20 63 6f 6c 75 6d 6e 20 75 73 65 64 20 69 6e 20   column used in 
17630 73 6f 75 72 63 65 20 74 61 62 6c 65 73 20 2a 2f  source tables */
17640 0a 20 20 20 20 54 61 62 6c 65 20 2a 70 54 61 62  .    Table *pTab
17650 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
17660 20 53 6f 75 72 63 65 20 74 61 62 6c 65 20 2a 2f   Source table */
17670 0a 20 20 20 20 69 6e 74 20 69 54 61 62 6c 65 3b  .    int iTable;
17680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
17690 20 43 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 6f   Cursor number o
176a0 66 20 74 68 65 20 73 6f 75 72 63 65 20 74 61 62  f the source tab
176b0 6c 65 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 43  le */.    int iC
176c0 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20 20 20  olumn;          
176d0 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20 6e 75 6d     /* Column num
176e0 62 65 72 20 77 69 74 68 69 6e 20 74 68 65 20 73  ber within the s
176f0 6f 75 72 63 65 20 74 61 62 6c 65 20 2a 2f 0a 20  ource table */. 
17700 20 20 20 69 6e 74 20 69 53 6f 72 74 65 72 43 6f     int iSorterCo
17710 6c 75 6d 6e 3b 20 20 20 20 20 20 20 2f 2a 20 43  lumn;       /* C
17720 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 69 6e 20  olumn number in 
17730 74 68 65 20 73 6f 72 74 69 6e 67 20 69 6e 64 65  the sorting inde
17740 78 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 4d 65  x */.    int iMe
17750 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  m;              
17760 20 20 2f 2a 20 4d 65 6d 6f 72 79 20 6c 6f 63 61    /* Memory loca
17770 74 69 6f 6e 20 74 68 61 74 20 61 63 74 73 20 61  tion that acts a
17780 73 20 61 63 63 75 6d 75 6c 61 74 6f 72 20 2a 2f  s accumulator */
17790 0a 20 20 20 20 45 78 70 72 20 2a 70 45 78 70 72  .    Expr *pExpr
177a0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
177b0 20 54 68 65 20 6f 72 69 67 69 6e 61 6c 20 65 78   The original ex
177c0 70 72 65 73 73 69 6f 6e 20 2a 2f 0a 20 20 7d 20  pression */.  } 
177d0 2a 61 43 6f 6c 3b 0a 20 20 69 6e 74 20 6e 43 6f  *aCol;.  int nCo
177e0 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20 20 20 20  lumn;           
177f0 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 75 73   /* Number of us
17800 65 64 20 65 6e 74 72 69 65 73 20 69 6e 20 61 43  ed entries in aC
17810 6f 6c 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 6e 41  ol[] */.  int nA
17820 63 63 75 6d 75 6c 61 74 6f 72 3b 20 20 20 20 20  ccumulator;     
17830 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63    /* Number of c
17840 6f 6c 75 6d 6e 73 20 74 68 61 74 20 73 68 6f 77  olumns that show
17850 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20   through to the 
17860 6f 75 74 70 75 74 2e 0a 20 20 20 20 20 20 20 20  output..        
17870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17880 20 20 2a 2a 20 41 64 64 69 74 69 6f 6e 61 6c 20    ** Additional 
17890 63 6f 6c 75 6d 6e 73 20 61 72 65 20 75 73 65 64  columns are used
178a0 20 6f 6e 6c 79 20 61 73 20 70 61 72 61 6d 65 74   only as paramet
178b0 65 72 73 20 74 6f 0a 20 20 20 20 20 20 20 20 20  ers to.         
178c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
178d0 20 2a 2a 20 61 67 67 72 65 67 61 74 65 20 66 75   ** aggregate fu
178e0 6e 63 74 69 6f 6e 73 20 2a 2f 0a 20 20 73 74 72  nctions */.  str
178f0 75 63 74 20 41 67 67 49 6e 66 6f 5f 66 75 6e 63  uct AggInfo_func
17900 20 7b 20 20 20 2f 2a 20 46 6f 72 20 65 61 63 68   {   /* For each
17910 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74   aggregate funct
17920 69 6f 6e 20 2a 2f 0a 20 20 20 20 45 78 70 72 20  ion */.    Expr 
17930 2a 70 45 78 70 72 3b 20 20 20 20 20 20 20 20 20  *pExpr;         
17940 20 20 20 20 2f 2a 20 45 78 70 72 65 73 73 69 6f      /* Expressio
17950 6e 20 65 6e 63 6f 64 69 6e 67 20 74 68 65 20 66  n encoding the f
17960 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 20 20 46  unction */.    F
17970 75 6e 63 44 65 66 20 2a 70 46 75 6e 63 3b 20 20  uncDef *pFunc;  
17980 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 61          /* The a
17990 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f  ggregate functio
179a0 6e 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  n implementation
179b0 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 4d 65 6d   */.    int iMem
179c0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
179d0 20 2f 2a 20 4d 65 6d 6f 72 79 20 6c 6f 63 61 74   /* Memory locat
179e0 69 6f 6e 20 74 68 61 74 20 61 63 74 73 20 61 73  ion that acts as
179f0 20 61 63 63 75 6d 75 6c 61 74 6f 72 20 2a 2f 0a   accumulator */.
17a00 20 20 20 20 69 6e 74 20 69 44 69 73 74 69 6e 63      int iDistinc
17a10 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  t;           /* 
17a20 45 70 68 65 6d 65 72 61 6c 20 74 61 62 6c 65 20  Ephemeral table 
17a30 75 73 65 64 20 74 6f 20 65 6e 66 6f 72 63 65 20  used to enforce 
17a40 44 49 53 54 49 4e 43 54 20 2a 2f 0a 20 20 7d 20  DISTINCT */.  } 
17a50 2a 61 46 75 6e 63 3b 0a 20 20 69 6e 74 20 6e 46  *aFunc;.  int nF
17a60 75 6e 63 3b 20 20 20 20 20 20 20 20 20 20 20 20  unc;            
17a70 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65    /* Number of e
17a80 6e 74 72 69 65 73 20 69 6e 20 61 46 75 6e 63 5b  ntries in aFunc[
17a90 5d 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54  ] */.};../*.** T
17aa0 68 65 20 64 61 74 61 74 79 70 65 20 79 6e 56 61  he datatype ynVa
17ab0 72 20 69 73 20 61 20 73 69 67 6e 65 64 20 69 6e  r is a signed in
17ac0 74 65 67 65 72 2c 20 65 69 74 68 65 72 20 31 36  teger, either 16
17ad0 2d 62 69 74 20 6f 72 20 33 32 2d 62 69 74 2e 0a  -bit or 32-bit..
17ae0 2a 2a 20 55 73 75 61 6c 6c 79 20 69 74 20 69 73  ** Usually it is
17af0 20 31 36 2d 62 69 74 73 2e 20 20 42 75 74 20 69   16-bits.  But i
17b00 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 56 41 52  f SQLITE_MAX_VAR
17b10 49 41 42 4c 45 5f 4e 55 4d 42 45 52 20 69 73 20  IABLE_NUMBER is 
17b20 67 72 65 61 74 65 72 0a 2a 2a 20 74 68 61 6e 20  greater.** than 
17b30 33 32 37 36 37 20 77 65 20 68 61 76 65 20 74 6f  32767 we have to
17b40 20 6d 61 6b 65 20 69 74 20 33 32 2d 62 69 74 2e   make it 32-bit.
17b50 20 20 31 36 2d 62 69 74 20 69 73 20 70 72 65 66    16-bit is pref
17b60 65 72 72 65 64 20 62 65 63 61 75 73 65 0a 2a 2a  erred because.**
17b70 20 69 74 20 75 73 65 73 20 6c 65 73 73 20 6d 65   it uses less me
17b80 6d 6f 72 79 20 69 6e 20 74 68 65 20 45 78 70 72  mory in the Expr
17b90 20 6f 62 6a 65 63 74 2c 20 77 68 69 63 68 20 69   object, which i
17ba0 73 20 61 20 62 69 67 20 6d 65 6d 6f 72 79 20 75  s a big memory u
17bb0 73 65 72 0a 2a 2a 20 69 6e 20 73 79 73 74 65 6d  ser.** in system
17bc0 73 20 77 69 74 68 20 6c 6f 74 73 20 6f 66 20 70  s with lots of p
17bd0 72 65 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e  repared statemen
17be0 74 73 2e 20 20 41 6e 64 20 66 65 77 20 61 70 70  ts.  And few app
17bf0 6c 69 63 61 74 69 6f 6e 73 0a 2a 2a 20 6e 65 65  lications.** nee
17c00 64 20 6d 6f 72 65 20 74 68 61 6e 20 61 62 6f 75  d more than abou
17c10 74 20 31 30 20 6f 72 20 32 30 20 76 61 72 69 61  t 10 or 20 varia
17c20 62 6c 65 73 2e 20 20 42 75 74 20 73 6f 6d 65 20  bles.  But some 
17c30 65 78 74 72 65 6d 65 20 75 73 65 72 73 20 77 61  extreme users wa
17c40 6e 74 0a 2a 2a 20 74 6f 20 68 61 76 65 20 70 72  nt.** to have pr
17c50 65 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74  epared statement
17c60 73 20 77 69 74 68 20 6f 76 65 72 20 33 32 37 36  s with over 3276
17c70 37 20 76 61 72 69 61 62 6c 65 73 2c 20 61 6e 64  7 variables, and
17c80 20 66 6f 72 20 74 68 65 6d 0a 2a 2a 20 74 68 65   for them.** the
17c90 20 6f 70 74 69 6f 6e 20 69 73 20 61 76 61 69 6c   option is avail
17ca0 61 62 6c 65 20 28 61 74 20 63 6f 6d 70 69 6c 65  able (at compile
17cb0 2d 74 69 6d 65 29 2e 0a 2a 2f 0a 23 69 66 20 53  -time)..*/.#if S
17cc0 51 4c 49 54 45 5f 4d 41 58 5f 56 41 52 49 41 42  QLITE_MAX_VARIAB
17cd0 4c 45 5f 4e 55 4d 42 45 52 3c 3d 33 32 37 36 37  LE_NUMBER<=32767
17ce0 0a 74 79 70 65 64 65 66 20 69 31 36 20 79 6e 56  .typedef i16 ynV
17cf0 61 72 3b 0a 23 65 6c 73 65 0a 74 79 70 65 64 65  ar;.#else.typede
17d00 66 20 69 6e 74 20 79 6e 56 61 72 3b 0a 23 65 6e  f int ynVar;.#en
17d10 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20  dif../*.** Each 
17d20 6e 6f 64 65 20 6f 66 20 61 6e 20 65 78 70 72 65  node of an expre
17d30 73 73 69 6f 6e 20 69 6e 20 74 68 65 20 70 61 72  ssion in the par
17d40 73 65 20 74 72 65 65 20 69 73 20 61 6e 20 69 6e  se tree is an in
17d50 73 74 61 6e 63 65 0a 2a 2a 20 6f 66 20 74 68 69  stance.** of thi
17d60 73 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a 0a  s structure..**.
17d70 2a 2a 20 45 78 70 72 2e 6f 70 20 69 73 20 74 68  ** Expr.op is th
17d80 65 20 6f 70 63 6f 64 65 2e 20 54 68 65 20 69 6e  e opcode. The in
17d90 74 65 67 65 72 20 70 61 72 73 65 72 20 74 6f 6b  teger parser tok
17da0 65 6e 20 63 6f 64 65 73 20 61 72 65 20 72 65 75  en codes are reu
17db0 73 65 64 0a 2a 2a 20 61 73 20 6f 70 63 6f 64 65  sed.** as opcode
17dc0 73 20 68 65 72 65 2e 20 46 6f 72 20 65 78 61 6d  s here. For exam
17dd0 70 6c 65 2c 20 74 68 65 20 70 61 72 73 65 72 20  ple, the parser 
17de0 64 65 66 69 6e 65 73 20 54 4b 5f 47 45 20 74 6f  defines TK_GE to
17df0 20 62 65 20 61 6e 20 69 6e 74 65 67 65 72 0a 2a   be an integer.*
17e00 2a 20 63 6f 64 65 20 72 65 70 72 65 73 65 6e 74  * code represent
17e10 69 6e 67 20 74 68 65 20 22 3e 3d 22 20 6f 70 65  ing the ">=" ope
17e20 72 61 74 6f 72 2e 20 54 68 69 73 20 73 61 6d 65  rator. This same
17e30 20 69 6e 74 65 67 65 72 20 63 6f 64 65 20 69 73   integer code is
17e40 20 72 65 75 73 65 64 0a 2a 2a 20 74 6f 20 72 65   reused.** to re
17e50 70 72 65 73 65 6e 74 20 74 68 65 20 67 72 65 61  present the grea
17e60 74 65 72 2d 74 68 61 6e 2d 6f 72 2d 65 71 75 61  ter-than-or-equa
17e70 6c 2d 74 6f 20 6f 70 65 72 61 74 6f 72 20 69 6e  l-to operator in
17e80 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 0a   the expression.
17e90 2a 2a 20 74 72 65 65 2e 0a 2a 2a 0a 2a 2a 20 49  ** tree..**.** I
17ea0 66 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e  f the expression
17eb0 20 69 73 20 61 6e 20 53 51 4c 20 6c 69 74 65 72   is an SQL liter
17ec0 61 6c 20 28 54 4b 5f 49 4e 54 45 47 45 52 2c 20  al (TK_INTEGER, 
17ed0 54 4b 5f 46 4c 4f 41 54 2c 20 54 4b 5f 42 4c 4f  TK_FLOAT, TK_BLO
17ee0 42 2c 0a 2a 2a 20 6f 72 20 54 4b 5f 53 54 52 49  B,.** or TK_STRI
17ef0 4e 47 29 2c 20 74 68 65 6e 20 45 78 70 72 2e 74  NG), then Expr.t
17f00 6f 6b 65 6e 20 63 6f 6e 74 61 69 6e 73 20 74 68  oken contains th
17f10 65 20 74 65 78 74 20 6f 66 20 74 68 65 20 53 51  e text of the SQ
17f20 4c 20 6c 69 74 65 72 61 6c 2e 20 49 66 0a 2a 2a  L literal. If.**
17f30 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20   the expression 
17f40 69 73 20 61 20 76 61 72 69 61 62 6c 65 20 28 54  is a variable (T
17f50 4b 5f 56 41 52 49 41 42 4c 45 29 2c 20 74 68 65  K_VARIABLE), the
17f60 6e 20 45 78 70 72 2e 74 6f 6b 65 6e 20 63 6f 6e  n Expr.token con
17f70 74 61 69 6e 73 20 74 68 65 0a 2a 2a 20 76 61 72  tains the.** var
17f80 69 61 62 6c 65 20 6e 61 6d 65 2e 20 46 69 6e 61  iable name. Fina
17f90 6c 6c 79 2c 20 69 66 20 74 68 65 20 65 78 70 72  lly, if the expr
17fa0 65 73 73 69 6f 6e 20 69 73 20 61 6e 20 53 51 4c  ession is an SQL
17fb0 20 66 75 6e 63 74 69 6f 6e 20 28 54 4b 5f 46 55   function (TK_FU
17fc0 4e 43 54 49 4f 4e 29 2c 0a 2a 2a 20 74 68 65 6e  NCTION),.** then
17fd0 20 45 78 70 72 2e 74 6f 6b 65 6e 20 63 6f 6e 74   Expr.token cont
17fe0 61 69 6e 73 20 74 68 65 20 6e 61 6d 65 20 6f 66  ains the name of
17ff0 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 2e 0a 2a   the function..*
18000 2a 0a 2a 2a 20 45 78 70 72 2e 70 52 69 67 68 74  *.** Expr.pRight
18010 20 61 6e 64 20 45 78 70 72 2e 70 4c 65 66 74 20   and Expr.pLeft 
18020 61 72 65 20 74 68 65 20 6c 65 66 74 20 61 6e 64  are the left and
18030 20 72 69 67 68 74 20 73 75 62 65 78 70 72 65 73   right subexpres
18040 73 69 6f 6e 73 20 6f 66 20 61 0a 2a 2a 20 62 69  sions of a.** bi
18050 6e 61 72 79 20 6f 70 65 72 61 74 6f 72 2e 20 45  nary operator. E
18060 69 74 68 65 72 20 6f 72 20 62 6f 74 68 20 6d 61  ither or both ma
18070 79 20 62 65 20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a 2a  y be NULL..**.**
18080 20 45 78 70 72 2e 78 2e 70 4c 69 73 74 20 69 73   Expr.x.pList is
18090 20 61 20 6c 69 73 74 20 6f 66 20 61 72 67 75 6d   a list of argum
180a0 65 6e 74 73 20 69 66 20 74 68 65 20 65 78 70 72  ents if the expr
180b0 65 73 73 69 6f 6e 20 69 73 20 61 6e 20 53 51 4c  ession is an SQL
180c0 20 66 75 6e 63 74 69 6f 6e 2c 0a 2a 2a 20 61 20   function,.** a 
180d0 43 41 53 45 20 65 78 70 72 65 73 73 69 6f 6e 20  CASE expression 
180e0 6f 72 20 61 6e 20 49 4e 20 65 78 70 72 65 73 73  or an IN express
180f0 69 6f 6e 20 6f 66 20 74 68 65 20 66 6f 72 6d 20  ion of the form 
18100 22 3c 6c 68 73 3e 20 49 4e 20 28 3c 79 3e 2c 20  "<lhs> IN (<y>, 
18110 3c 7a 3e 2e 2e 2e 29 22 2e 0a 2a 2a 20 45 78 70  <z>...)"..** Exp
18120 72 2e 78 2e 70 53 65 6c 65 63 74 20 69 73 20 75  r.x.pSelect is u
18130 73 65 64 20 69 66 20 74 68 65 20 65 78 70 72 65  sed if the expre
18140 73 73 69 6f 6e 20 69 73 20 61 20 73 75 62 2d 73  ssion is a sub-s
18150 65 6c 65 63 74 20 6f 72 20 61 6e 20 65 78 70 72  elect or an expr
18160 65 73 73 69 6f 6e 20 6f 66 0a 2a 2a 20 74 68 65  ession of.** the
18170 20 66 6f 72 6d 20 22 3c 6c 68 73 3e 20 49 4e 20   form "<lhs> IN 
18180 28 53 45 4c 45 43 54 20 2e 2e 2e 29 22 2e 20 49  (SELECT ...)". I
18190 66 20 74 68 65 20 45 50 5f 78 49 73 53 65 6c 65  f the EP_xIsSele
181a0 63 74 20 62 69 74 20 69 73 20 73 65 74 20 69 6e  ct bit is set in
181b0 20 74 68 65 0a 2a 2a 20 45 78 70 72 2e 66 6c 61   the.** Expr.fla
181c0 67 73 20 6d 61 73 6b 2c 20 74 68 65 6e 20 45 78  gs mask, then Ex
181d0 70 72 2e 78 2e 70 53 65 6c 65 63 74 20 69 73 20  pr.x.pSelect is 
181e0 76 61 6c 69 64 2e 20 4f 74 68 65 72 77 69 73 65  valid. Otherwise
181f0 2c 20 45 78 70 72 2e 78 2e 70 4c 69 73 74 20 69  , Expr.x.pList i
18200 73 0a 2a 2a 20 76 61 6c 69 64 2e 0a 2a 2a 0a 2a  s.** valid..**.*
18210 2a 20 41 6e 20 65 78 70 72 65 73 73 69 6f 6e 20  * An expression 
18220 6f 66 20 74 68 65 20 66 6f 72 6d 20 49 44 20 6f  of the form ID o
18230 72 20 49 44 2e 49 44 20 72 65 66 65 72 73 20 74  r ID.ID refers t
18240 6f 20 61 20 63 6f 6c 75 6d 6e 20 69 6e 20 61 20  o a column in a 
18250 74 61 62 6c 65 2e 0a 2a 2a 20 46 6f 72 20 73 75  table..** For su
18260 63 68 20 65 78 70 72 65 73 73 69 6f 6e 73 2c 20  ch expressions, 
18270 45 78 70 72 2e 6f 70 20 69 73 20 73 65 74 20 74  Expr.op is set t
18280 6f 20 54 4b 5f 43 4f 4c 55 4d 4e 20 61 6e 64 20  o TK_COLUMN and 
18290 45 78 70 72 2e 69 54 61 62 6c 65 20 69 73 0a 2a  Expr.iTable is.*
182a0 2a 20 74 68 65 20 69 6e 74 65 67 65 72 20 63 75  * the integer cu
182b0 72 73 6f 72 20 6e 75 6d 62 65 72 20 6f 66 20 61  rsor number of a
182c0 20 56 44 42 45 20 63 75 72 73 6f 72 20 70 6f 69   VDBE cursor poi
182d0 6e 74 69 6e 67 20 74 6f 20 74 68 61 74 20 74 61  nting to that ta
182e0 62 6c 65 20 61 6e 64 0a 2a 2a 20 45 78 70 72 2e  ble and.** Expr.
182f0 69 43 6f 6c 75 6d 6e 20 69 73 20 74 68 65 20 63  iColumn is the c
18300 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 66 6f 72  olumn number for
18310 20 74 68 65 20 73 70 65 63 69 66 69 63 20 63 6f   the specific co
18320 6c 75 6d 6e 2e 20 20 49 66 20 74 68 65 0a 2a 2a  lumn.  If the.**
18330 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 75   expression is u
18340 73 65 64 20 61 73 20 61 20 72 65 73 75 6c 74 20  sed as a result 
18350 69 6e 20 61 6e 20 61 67 67 72 65 67 61 74 65 20  in an aggregate 
18360 53 45 4c 45 43 54 2c 20 74 68 65 6e 20 74 68 65  SELECT, then the
18370 0a 2a 2a 20 76 61 6c 75 65 20 69 73 20 61 6c 73  .** value is als
18380 6f 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20  o stored in the 
18390 45 78 70 72 2e 69 41 67 67 20 63 6f 6c 75 6d 6e  Expr.iAgg column
183a0 20 69 6e 20 74 68 65 20 61 67 67 72 65 67 61 74   in the aggregat
183b0 65 20 73 6f 20 74 68 61 74 0a 2a 2a 20 69 74 20  e so that.** it 
183c0 63 61 6e 20 62 65 20 61 63 63 65 73 73 65 64 20  can be accessed 
183d0 61 66 74 65 72 20 61 6c 6c 20 61 67 67 72 65 67  after all aggreg
183e0 61 74 65 73 20 61 72 65 20 63 6f 6d 70 75 74 65  ates are compute
183f0 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  d..**.** If the 
18400 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61 6e  expression is an
18410 20 75 6e 62 6f 75 6e 64 20 76 61 72 69 61 62 6c   unbound variabl
18420 65 20 6d 61 72 6b 65 72 20 28 61 20 71 75 65 73  e marker (a ques
18430 74 69 6f 6e 20 6d 61 72 6b 0a 2a 2a 20 63 68 61  tion mark.** cha
18440 72 61 63 74 65 72 20 27 3f 27 20 69 6e 20 74 68  racter '?' in th
18450 65 20 6f 72 69 67 69 6e 61 6c 20 53 51 4c 29 20  e original SQL) 
18460 74 68 65 6e 20 74 68 65 20 45 78 70 72 2e 69 54  then the Expr.iT
18470 61 62 6c 65 20 68 6f 6c 64 73 20 74 68 65 20 69  able holds the i
18480 6e 64 65 78 0a 2a 2a 20 6e 75 6d 62 65 72 20 66  ndex.** number f
18490 6f 72 20 74 68 61 74 20 76 61 72 69 61 62 6c 65  or that variable
184a0 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 65  ..**.** If the e
184b0 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61 20 73  xpression is a s
184c0 75 62 71 75 65 72 79 20 74 68 65 6e 20 45 78 70  ubquery then Exp
184d0 72 2e 69 43 6f 6c 75 6d 6e 20 68 6f 6c 64 73 20  r.iColumn holds 
184e0 61 6e 20 69 6e 74 65 67 65 72 0a 2a 2a 20 72 65  an integer.** re
184f0 67 69 73 74 65 72 20 6e 75 6d 62 65 72 20 63 6f  gister number co
18500 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 72 65 73  ntaining the res
18510 75 6c 74 20 6f 66 20 74 68 65 20 73 75 62 71 75  ult of the subqu
18520 65 72 79 2e 20 20 49 66 20 74 68 65 0a 2a 2a 20  ery.  If the.** 
18530 73 75 62 71 75 65 72 79 20 67 69 76 65 73 20 61  subquery gives a
18540 20 63 6f 6e 73 74 61 6e 74 20 72 65 73 75 6c 74   constant result
18550 2c 20 74 68 65 6e 20 69 54 61 62 6c 65 20 69 73  , then iTable is
18560 20 2d 31 2e 20 20 49 66 20 74 68 65 20 73 75 62   -1.  If the sub
18570 71 75 65 72 79 0a 2a 2a 20 67 69 76 65 73 20 61  query.** gives a
18580 20 64 69 66 66 65 72 65 6e 74 20 61 6e 73 77 65   different answe
18590 72 20 61 74 20 64 69 66 66 65 72 65 6e 74 20 74  r at different t
185a0 69 6d 65 73 20 64 75 72 69 6e 67 20 73 74 61 74  imes during stat
185b0 65 6d 65 6e 74 20 70 72 6f 63 65 73 73 69 6e 67  ement processing
185c0 0a 2a 2a 20 74 68 65 6e 20 69 54 61 62 6c 65 20  .** then iTable 
185d0 69 73 20 74 68 65 20 61 64 64 72 65 73 73 20 6f  is the address o
185e0 66 20 61 20 73 75 62 72 6f 75 74 69 6e 65 20 74  f a subroutine t
185f0 68 61 74 20 63 6f 6d 70 75 74 65 73 20 74 68 65  hat computes the
18600 20 73 75 62 71 75 65 72 79 2e 0a 2a 2a 0a 2a 2a   subquery..**.**
18610 20 49 66 20 74 68 65 20 45 78 70 72 20 69 73 20   If the Expr is 
18620 6f 66 20 74 79 70 65 20 4f 50 5f 43 6f 6c 75 6d  of type OP_Colum
18630 6e 2c 20 61 6e 64 20 74 68 65 20 74 61 62 6c 65  n, and the table
18640 20 69 74 20 69 73 20 73 65 6c 65 63 74 69 6e 67   it is selecting
18650 20 66 72 6f 6d 0a 2a 2a 20 69 73 20 61 20 64 69   from.** is a di
18660 73 6b 20 74 61 62 6c 65 20 6f 72 20 74 68 65 20  sk table or the 
18670 22 6f 6c 64 2e 2a 22 20 70 73 65 75 64 6f 2d 74  "old.*" pseudo-t
18680 61 62 6c 65 2c 20 74 68 65 6e 20 70 54 61 62 20  able, then pTab 
18690 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 0a 2a 2a  points to the.**
186a0 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 74   corresponding t
186b0 61 62 6c 65 20 64 65 66 69 6e 69 74 69 6f 6e 2e  able definition.
186c0 0a 2a 2a 0a 2a 2a 20 41 4c 4c 4f 43 41 54 49 4f  .**.** ALLOCATIO
186d0 4e 20 4e 4f 54 45 53 3a 0a 2a 2a 0a 2a 2a 20 45  N NOTES:.**.** E
186e0 78 70 72 20 6f 62 6a 65 63 74 73 20 63 61 6e 20  xpr objects can 
186f0 75 73 65 20 61 20 6c 6f 74 20 6f 66 20 6d 65 6d  use a lot of mem
18700 6f 72 79 20 73 70 61 63 65 20 69 6e 20 64 61 74  ory space in dat
18710 61 62 61 73 65 20 73 63 68 65 6d 61 2e 20 20 54  abase schema.  T
18720 6f 0a 2a 2a 20 68 65 6c 70 20 72 65 64 75 63 65  o.** help reduce
18730 20 6d 65 6d 6f 72 79 20 72 65 71 75 69 72 65 6d   memory requirem
18740 65 6e 74 73 2c 20 73 6f 6d 65 74 69 6d 65 73 20  ents, sometimes 
18750 61 6e 20 45 78 70 72 20 6f 62 6a 65 63 74 20 77  an Expr object w
18760 69 6c 6c 20 62 65 0a 2a 2a 20 74 72 75 6e 63 61  ill be.** trunca
18770 74 65 64 2e 20 20 41 6e 64 20 74 6f 20 72 65 64  ted.  And to red
18780 75 63 65 20 74 68 65 20 6e 75 6d 62 65 72 20 6f  uce the number o
18790 66 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74  f memory allocat
187a0 69 6f 6e 73 2c 20 73 6f 6d 65 74 69 6d 65 73 0a  ions, sometimes.
187b0 2a 2a 20 74 77 6f 20 6f 72 20 6d 6f 72 65 20 45  ** two or more E
187c0 78 70 72 20 6f 62 6a 65 63 74 73 20 77 69 6c 6c  xpr objects will
187d0 20 62 65 20 73 74 6f 72 65 64 20 69 6e 20 61 20   be stored in a 
187e0 73 69 6e 67 6c 65 20 6d 65 6d 6f 72 79 20 61 6c  single memory al
187f0 6c 6f 63 61 74 69 6f 6e 2c 0a 2a 2a 20 74 6f 67  location,.** tog
18800 65 74 68 65 72 20 77 69 74 68 20 45 78 70 72 2e  ether with Expr.
18810 7a 54 6f 6b 65 6e 20 73 74 72 69 6e 67 73 2e 0a  zToken strings..
18820 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 45 50 5f  **.** If the EP_
18830 52 65 64 75 63 65 64 20 61 6e 64 20 45 50 5f 54  Reduced and EP_T
18840 6f 6b 65 6e 4f 6e 6c 79 20 66 6c 61 67 73 20 61  okenOnly flags a
18850 72 65 20 73 65 74 20 77 68 65 6e 0a 2a 2a 20 61  re set when.** a
18860 6e 20 45 78 70 72 20 6f 62 6a 65 63 74 20 69 73  n Expr object is
18870 20 74 72 75 6e 63 61 74 65 64 2e 20 20 57 68 65   truncated.  Whe
18880 6e 20 45 50 5f 52 65 64 75 63 65 64 20 69 73 20  n EP_Reduced is 
18890 73 65 74 2c 20 74 68 65 6e 20 61 6c 6c 0a 2a 2a  set, then all.**
188a0 20 74 68 65 20 63 68 69 6c 64 20 45 78 70 72 20   the child Expr 
188b0 6f 62 6a 65 63 74 73 20 69 6e 20 74 68 65 20 45  objects in the E
188c0 78 70 72 2e 70 4c 65 66 74 20 61 6e 64 20 45 78  xpr.pLeft and Ex
188d0 70 72 2e 70 52 69 67 68 74 20 73 75 62 74 72 65  pr.pRight subtre
188e0 65 73 0a 2a 2a 20 61 72 65 20 63 6f 6e 74 61 69  es.** are contai
188f0 6e 65 64 20 77 69 74 68 69 6e 20 74 68 65 20 73  ned within the s
18900 61 6d 65 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63  ame memory alloc
18910 61 74 69 6f 6e 2e 20 20 4e 6f 74 65 2c 20 68 6f  ation.  Note, ho
18920 77 65 76 65 72 2c 20 74 68 61 74 0a 2a 2a 20 74  wever, that.** t
18930 68 65 20 73 75 62 74 72 65 65 73 20 69 6e 20 45  he subtrees in E
18940 78 70 72 2e 78 2e 70 4c 69 73 74 20 6f 72 20 45  xpr.x.pList or E
18950 78 70 72 2e 78 2e 70 53 65 6c 65 63 74 20 61 72  xpr.x.pSelect ar
18960 65 20 61 6c 77 61 79 73 20 73 65 70 61 72 61 74  e always separat
18970 65 6c 79 0a 2a 2a 20 61 6c 6c 6f 63 61 74 65 64  ely.** allocated
18980 2c 20 72 65 67 61 72 64 6c 65 73 73 20 6f 66 20  , regardless of 
18990 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 45  whether or not E
189a0 50 5f 52 65 64 75 63 65 64 20 69 73 20 73 65 74  P_Reduced is set
189b0 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 45 78 70 72  ..*/.struct Expr
189c0 20 7b 0a 20 20 75 38 20 6f 70 3b 20 20 20 20 20   {.  u8 op;     
189d0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f              /* O
189e0 70 65 72 61 74 69 6f 6e 20 70 65 72 66 6f 72 6d  peration perform
189f0 65 64 20 62 79 20 74 68 69 73 20 6e 6f 64 65 20  ed by this node 
18a00 2a 2f 0a 20 20 63 68 61 72 20 61 66 66 69 6e 69  */.  char affini
18a10 74 79 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54  ty;         /* T
18a20 68 65 20 61 66 66 69 6e 69 74 79 20 6f 66 20 74  he affinity of t
18a30 68 65 20 63 6f 6c 75 6d 6e 20 6f 72 20 30 20 69  he column or 0 i
18a40 66 20 6e 6f 74 20 61 20 63 6f 6c 75 6d 6e 20 2a  f not a column *
18a50 2f 0a 20 20 75 33 32 20 66 6c 61 67 73 3b 20 20  /.  u32 flags;  
18a60 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61             /* Va
18a70 72 69 6f 75 73 20 66 6c 61 67 73 2e 20 20 45 50  rious flags.  EP
18a80 5f 2a 20 53 65 65 20 62 65 6c 6f 77 20 2a 2f 0a  _* See below */.
18a90 20 20 75 6e 69 6f 6e 20 7b 0a 20 20 20 20 63 68    union {.    ch
18aa0 61 72 20 2a 7a 54 6f 6b 65 6e 3b 20 20 20 20 20  ar *zToken;     
18ab0 20 20 20 20 20 2f 2a 20 54 6f 6b 65 6e 20 76 61       /* Token va
18ac0 6c 75 65 2e 20 5a 65 72 6f 20 74 65 72 6d 69 6e  lue. Zero termin
18ad0 61 74 65 64 20 61 6e 64 20 64 65 71 75 6f 74 65  ated and dequote
18ae0 64 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 56 61  d */.    int iVa
18af0 6c 75 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  lue;            
18b00 2f 2a 20 4e 6f 6e 2d 6e 65 67 61 74 69 76 65 20  /* Non-negative 
18b10 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20 69 66  integer value if
18b20 20 45 50 5f 49 6e 74 56 61 6c 75 65 20 2a 2f 0a   EP_IntValue */.
18b30 20 20 7d 20 75 3b 0a 0a 20 20 2f 2a 20 49 66 20    } u;..  /* If 
18b40 74 68 65 20 45 50 5f 54 6f 6b 65 6e 4f 6e 6c 79  the EP_TokenOnly
18b50 20 66 6c 61 67 20 69 73 20 73 65 74 20 69 6e 20   flag is set in 
18b60 74 68 65 20 45 78 70 72 2e 66 6c 61 67 73 20 6d  the Expr.flags m
18b70 61 73 6b 2c 20 74 68 65 6e 20 6e 6f 0a 20 20 2a  ask, then no.  *
18b80 2a 20 73 70 61 63 65 20 69 73 20 61 6c 6c 6f 63  * space is alloc
18b90 61 74 65 64 20 66 6f 72 20 74 68 65 20 66 69 65  ated for the fie
18ba0 6c 64 73 20 62 65 6c 6f 77 20 74 68 69 73 20 70  lds below this p
18bb0 6f 69 6e 74 2e 20 41 6e 20 61 74 74 65 6d 70 74  oint. An attempt
18bc0 20 74 6f 0a 20 20 2a 2a 20 61 63 63 65 73 73 20   to.  ** access 
18bd0 74 68 65 6d 20 77 69 6c 6c 20 72 65 73 75 6c 74  them will result
18be0 20 69 6e 20 61 20 73 65 67 66 61 75 6c 74 20 6f   in a segfault o
18bf0 72 20 6d 61 6c 66 75 6e 63 74 69 6f 6e 2e 0a 20  r malfunction.. 
18c00 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a   ***************
18c10 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
18c20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
18c30 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
18c40 2a 2a 2a 2a 2a 2a 2f 0a 0a 20 20 45 78 70 72 20  ******/..  Expr 
18c50 2a 70 4c 65 66 74 3b 20 20 20 20 20 20 20 20 20  *pLeft;         
18c60 20 20 2f 2a 20 4c 65 66 74 20 73 75 62 6e 6f 64    /* Left subnod
18c70 65 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 52 69  e */.  Expr *pRi
18c80 67 68 74 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  ght;          /*
18c90 20 52 69 67 68 74 20 73 75 62 6e 6f 64 65 20 2a   Right subnode *
18ca0 2f 0a 20 20 75 6e 69 6f 6e 20 7b 0a 20 20 20 20  /.  union {.    
18cb0 45 78 70 72 4c 69 73 74 20 2a 70 4c 69 73 74 3b  ExprList *pList;
18cc0 20 20 20 20 20 2f 2a 20 6f 70 20 3d 20 49 4e 2c       /* op = IN,
18cd0 20 45 58 49 53 54 53 2c 20 53 45 4c 45 43 54 2c   EXISTS, SELECT,
18ce0 20 43 41 53 45 2c 20 46 55 4e 43 54 49 4f 4e 2c   CASE, FUNCTION,
18cf0 20 42 45 54 57 45 45 4e 20 2a 2f 0a 20 20 20 20   BETWEEN */.    
18d00 53 65 6c 65 63 74 20 2a 70 53 65 6c 65 63 74 3b  Select *pSelect;
18d10 20 20 20 20 20 2f 2a 20 45 50 5f 78 49 73 53 65       /* EP_xIsSe
18d20 6c 65 63 74 20 61 6e 64 20 6f 70 20 3d 20 49 4e  lect and op = IN
18d30 2c 20 45 58 49 53 54 53 2c 20 53 45 4c 45 43 54  , EXISTS, SELECT
18d40 20 2a 2f 0a 20 20 7d 20 78 3b 0a 0a 20 20 2f 2a   */.  } x;..  /*
18d50 20 49 66 20 74 68 65 20 45 50 5f 52 65 64 75 63   If the EP_Reduc
18d60 65 64 20 66 6c 61 67 20 69 73 20 73 65 74 20 69  ed flag is set i
18d70 6e 20 74 68 65 20 45 78 70 72 2e 66 6c 61 67 73  n the Expr.flags
18d80 20 6d 61 73 6b 2c 20 74 68 65 6e 20 6e 6f 0a 20   mask, then no. 
18d90 20 2a 2a 20 73 70 61 63 65 20 69 73 20 61 6c 6c   ** space is all
18da0 6f 63 61 74 65 64 20 66 6f 72 20 74 68 65 20 66  ocated for the f
18db0 69 65 6c 64 73 20 62 65 6c 6f 77 20 74 68 69 73  ields below this
18dc0 20 70 6f 69 6e 74 2e 20 41 6e 20 61 74 74 65 6d   point. An attem
18dd0 70 74 20 74 6f 0a 20 20 2a 2a 20 61 63 63 65 73  pt to.  ** acces
18de0 73 20 74 68 65 6d 20 77 69 6c 6c 20 72 65 73 75  s them will resu
18df0 6c 74 20 69 6e 20 61 20 73 65 67 66 61 75 6c 74  lt in a segfault
18e00 20 6f 72 20 6d 61 6c 66 75 6e 63 74 69 6f 6e 2e   or malfunction.
18e10 0a 20 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  .  *************
18e20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
18e30 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
18e40 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
18e50 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 23 69 66 20 53  ********/..#if S
18e60 51 4c 49 54 45 5f 4d 41 58 5f 45 58 50 52 5f 44  QLITE_MAX_EXPR_D
18e70 45 50 54 48 3e 30 0a 20 20 69 6e 74 20 6e 48 65  EPTH>0.  int nHe
18e80 69 67 68 74 3b 20 20 20 20 20 20 20 20 20 20 20  ight;           
18e90 2f 2a 20 48 65 69 67 68 74 20 6f 66 20 74 68 65  /* Height of the
18ea0 20 74 72 65 65 20 68 65 61 64 65 64 20 62 79 20   tree headed by 
18eb0 74 68 69 73 20 6e 6f 64 65 20 2a 2f 0a 23 65 6e  this node */.#en
18ec0 64 69 66 0a 20 20 69 6e 74 20 69 54 61 62 6c 65  dif.  int iTable
18ed0 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
18ee0 54 4b 5f 43 4f 4c 55 4d 4e 3a 20 63 75 72 73 6f  TK_COLUMN: curso
18ef0 72 20 6e 75 6d 62 65 72 20 6f 66 20 74 61 62 6c  r number of tabl
18f00 65 20 68 6f 6c 64 69 6e 67 20 63 6f 6c 75 6d 6e  e holding column
18f10 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
18f20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f            ** TK_
18f30 52 45 47 49 53 54 45 52 3a 20 72 65 67 69 73 74  REGISTER: regist
18f40 65 72 20 6e 75 6d 62 65 72 0a 20 20 20 20 20 20  er number.      
18f50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18f60 20 20 20 2a 2a 20 54 4b 5f 54 52 49 47 47 45 52     ** TK_TRIGGER
18f70 3a 20 31 20 2d 3e 20 6e 65 77 2c 20 30 20 2d 3e  : 1 -> new, 0 ->
18f80 20 6f 6c 64 0a 20 20 20 20 20 20 20 20 20 20 20   old.           
18f90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a                **
18fa0 20 45 50 5f 55 6e 6c 69 6b 65 6c 79 3a 20 20 31   EP_Unlikely:  1
18fb0 33 34 32 31 37 37 32 38 20 74 69 6d 65 73 20 6c  34217728 times l
18fc0 69 6b 65 6c 69 68 6f 6f 64 0a 20 20 20 20 20 20  ikelihood.      
18fd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18fe0 20 20 20 2a 2a 20 54 4b 5f 53 45 4c 45 43 54 3a     ** TK_SELECT:
18ff0 20 31 73 74 20 72 65 67 69 73 74 65 72 20 6f 66   1st register of
19000 20 72 65 73 75 6c 74 20 76 65 63 74 6f 72 20 2a   result vector *
19010 2f 0a 20 20 79 6e 56 61 72 20 69 43 6f 6c 75 6d  /.  ynVar iColum
19020 6e 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54 4b  n;         /* TK
19030 5f 43 4f 4c 55 4d 4e 3a 20 63 6f 6c 75 6d 6e 20  _COLUMN: column 
19040 69 6e 64 65 78 2e 20 20 2d 31 20 66 6f 72 20 72  index.  -1 for r
19050 6f 77 69 64 2e 0a 20 20 20 20 20 20 20 20 20 20  owid..          
19060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a                 *
19070 2a 20 54 4b 5f 56 41 52 49 41 42 4c 45 3a 20 76  * TK_VARIABLE: v
19080 61 72 69 61 62 6c 65 20 6e 75 6d 62 65 72 20 28  ariable number (
19090 61 6c 77 61 79 73 20 3e 3d 20 31 29 2e 0a 20 20  always >= 1)..  
190a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
190b0 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f 53 45 4c         ** TK_SEL
190c0 45 43 54 5f 43 4f 4c 55 4d 4e 3a 20 63 6f 6c 75  ECT_COLUMN: colu
190d0 6d 6e 20 6f 66 20 74 68 65 20 72 65 73 75 6c 74  mn of the result
190e0 20 76 65 63 74 6f 72 20 2a 2f 0a 20 20 69 31 36   vector */.  i16
190f0 20 69 41 67 67 3b 20 20 20 20 20 20 20 20 20 20   iAgg;          
19100 20 20 20 20 2f 2a 20 57 68 69 63 68 20 65 6e 74      /* Which ent
19110 72 79 20 69 6e 20 70 41 67 67 49 6e 66 6f 2d 3e  ry in pAggInfo->
19120 61 43 6f 6c 5b 5d 20 6f 72 20 2d 3e 61 46 75 6e  aCol[] or ->aFun
19130 63 5b 5d 20 2a 2f 0a 20 20 69 31 36 20 69 52 69  c[] */.  i16 iRi
19140 67 68 74 4a 6f 69 6e 54 61 62 6c 65 3b 20 20 20  ghtJoinTable;   
19150 2f 2a 20 49 66 20 45 50 5f 46 72 6f 6d 4a 6f 69  /* If EP_FromJoi
19160 6e 2c 20 74 68 65 20 72 69 67 68 74 20 74 61 62  n, the right tab
19170 6c 65 20 6f 66 20 74 68 65 20 6a 6f 69 6e 20 2a  le of the join *
19180 2f 0a 20 20 75 38 20 6f 70 32 3b 20 20 20 20 20  /.  u8 op2;     
19190 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 4b             /* TK
191a0 5f 52 45 47 49 53 54 45 52 3a 20 6f 72 69 67 69  _REGISTER: origi
191b0 6e 61 6c 20 76 61 6c 75 65 20 6f 66 20 45 78 70  nal value of Exp
191c0 72 2e 6f 70 0a 20 20 20 20 20 20 20 20 20 20 20  r.op.           
191d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a                **
191e0 20 54 4b 5f 43 4f 4c 55 4d 4e 3a 20 74 68 65 20   TK_COLUMN: the 
191f0 76 61 6c 75 65 20 6f 66 20 70 35 20 66 6f 72 20  value of p5 for 
19200 4f 50 5f 43 6f 6c 75 6d 6e 0a 20 20 20 20 20 20  OP_Column.      
19210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19220 20 20 20 2a 2a 20 54 4b 5f 41 47 47 5f 46 55 4e     ** TK_AGG_FUN
19230 43 54 49 4f 4e 3a 20 6e 65 73 74 69 6e 67 20 64  CTION: nesting d
19240 65 70 74 68 20 2a 2f 0a 20 20 41 67 67 49 6e 66  epth */.  AggInf
19250 6f 20 2a 70 41 67 67 49 6e 66 6f 3b 20 20 20 20  o *pAggInfo;    
19260 20 2f 2a 20 55 73 65 64 20 62 79 20 54 4b 5f 41   /* Used by TK_A
19270 47 47 5f 43 4f 4c 55 4d 4e 20 61 6e 64 20 54 4b  GG_COLUMN and TK
19280 5f 41 47 47 5f 46 55 4e 43 54 49 4f 4e 20 2a 2f  _AGG_FUNCTION */
19290 0a 20 20 54 61 62 6c 65 20 2a 70 54 61 62 3b 20  .  Table *pTab; 
192a0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 61 62            /* Tab
192b0 6c 65 20 66 6f 72 20 54 4b 5f 43 4f 4c 55 4d 4e  le for TK_COLUMN
192c0 20 65 78 70 72 65 73 73 69 6f 6e 73 2e 20 20 43   expressions.  C
192d0 61 6e 20 62 65 20 4e 55 4c 4c 0a 20 20 20 20 20  an be NULL.     
192e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
192f0 20 20 20 20 2a 2a 20 66 6f 72 20 61 20 63 6f 6c      ** for a col
19300 75 6d 6e 20 6f 66 20 61 6e 20 69 6e 64 65 78 20  umn of an index 
19310 6f 6e 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e  on an expression
19320 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49   */.#ifndef SQLI
19330 54 45 5f 4f 4d 49 54 5f 57 49 4e 44 4f 57 46 55  TE_OMIT_WINDOWFU
19340 4e 43 0a 20 20 57 69 6e 64 6f 77 20 2a 70 57 69  NC.  Window *pWi
19350 6e 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57  n;          /* W
19360 69 6e 64 6f 77 20 64 65 66 69 6e 69 74 69 6f 6e  indow definition
19370 20 66 6f 72 20 77 69 6e 64 6f 77 20 66 75 6e 63   for window func
19380 74 69 6f 6e 73 20 2a 2f 0a 23 65 6e 64 69 66 0a  tions */.#endif.
19390 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f  };../*.** The fo
193a0 6c 6c 6f 77 69 6e 67 20 61 72 65 20 74 68 65 20  llowing are the 
193b0 6d 65 61 6e 69 6e 67 73 20 6f 66 20 62 69 74 73  meanings of bits
193c0 20 69 6e 20 74 68 65 20 45 78 70 72 2e 66 6c 61   in the Expr.fla
193d0 67 73 20 66 69 65 6c 64 2e 0a 2a 2f 0a 23 64 65  gs field..*/.#de
193e0 66 69 6e 65 20 45 50 5f 46 72 6f 6d 4a 6f 69 6e  fine EP_FromJoin
193f0 20 20 30 78 30 30 30 30 30 31 20 2f 2a 20 4f 72    0x000001 /* Or
19400 69 67 69 6e 61 74 65 73 20 69 6e 20 4f 4e 2f 55  iginates in ON/U
19410 53 49 4e 47 20 63 6c 61 75 73 65 20 6f 66 20 6f  SING clause of o
19420 75 74 65 72 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65  uter join */.#de
19430 66 69 6e 65 20 45 50 5f 41 67 67 20 20 20 20 20  fine EP_Agg     
19440 20 20 30 78 30 30 30 30 30 32 20 2f 2a 20 43 6f    0x000002 /* Co
19450 6e 74 61 69 6e 73 20 6f 6e 65 20 6f 72 20 6d 6f  ntains one or mo
19460 72 65 20 61 67 67 72 65 67 61 74 65 20 66 75 6e  re aggregate fun
19470 63 74 69 6f 6e 73 20 2a 2f 0a 23 64 65 66 69 6e  ctions */.#defin
19480 65 20 45 50 5f 48 61 73 46 75 6e 63 20 20 20 30  e EP_HasFunc   0
19490 78 30 30 30 30 30 34 20 2f 2a 20 43 6f 6e 74 61  x000004 /* Conta
194a0 69 6e 73 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20  ins one or more 
194b0 66 75 6e 63 74 69 6f 6e 73 20 6f 66 20 61 6e 79  functions of any
194c0 20 6b 69 6e 64 20 2a 2f 0a 23 64 65 66 69 6e 65   kind */.#define
194d0 20 45 50 5f 46 69 78 65 64 43 6f 6c 20 20 30 78   EP_FixedCol  0x
194e0 30 30 30 30 30 38 20 2f 2a 20 54 4b 5f 43 6f 6c  000008 /* TK_Col
194f0 75 6d 6e 20 77 69 74 68 20 61 20 6b 6e 6f 77 6e  umn with a known
19500 20 66 69 78 65 64 20 76 61 6c 75 65 20 2a 2f 0a   fixed value */.
19510 23 64 65 66 69 6e 65 20 45 50 5f 44 69 73 74 69  #define EP_Disti
19520 6e 63 74 20 20 30 78 30 30 30 30 31 30 20 2f 2a  nct  0x000010 /*
19530 20 41 67 67 72 65 67 61 74 65 20 66 75 6e 63 74   Aggregate funct
19540 69 6f 6e 20 77 69 74 68 20 44 49 53 54 49 4e 43  ion with DISTINC
19550 54 20 6b 65 79 77 6f 72 64 20 2a 2f 0a 23 64 65  T keyword */.#de
19560 66 69 6e 65 20 45 50 5f 56 61 72 53 65 6c 65 63  fine EP_VarSelec
19570 74 20 30 78 30 30 30 30 32 30 20 2f 2a 20 70 53  t 0x000020 /* pS
19580 65 6c 65 63 74 20 69 73 20 63 6f 72 72 65 6c 61  elect is correla
19590 74 65 64 2c 20 6e 6f 74 20 63 6f 6e 73 74 61 6e  ted, not constan
195a0 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  t */.#define EP_
195b0 44 62 6c 51 75 6f 74 65 64 20 30 78 30 30 30 30  DblQuoted 0x0000
195c0 34 30 20 2f 2a 20 74 6f 6b 65 6e 2e 7a 20 77 61  40 /* token.z wa
195d0 73 20 6f 72 69 67 69 6e 61 6c 6c 79 20 69 6e 20  s originally in 
195e0 22 2e 2e 2e 22 20 2a 2f 0a 23 64 65 66 69 6e 65  "..." */.#define
195f0 20 45 50 5f 49 6e 66 69 78 46 75 6e 63 20 30 78   EP_InfixFunc 0x
19600 30 30 30 30 38 30 20 2f 2a 20 54 72 75 65 20 66  000080 /* True f
19610 6f 72 20 61 6e 20 69 6e 66 69 78 20 66 75 6e 63  or an infix func
19620 74 69 6f 6e 3a 20 4c 49 4b 45 2c 20 47 4c 4f 42  tion: LIKE, GLOB
19630 2c 20 65 74 63 20 2a 2f 0a 23 64 65 66 69 6e 65  , etc */.#define
19640 20 45 50 5f 43 6f 6c 6c 61 74 65 20 20 20 30 78   EP_Collate   0x
19650 30 30 30 31 30 30 20 2f 2a 20 54 72 65 65 20 63  000100 /* Tree c
19660 6f 6e 74 61 69 6e 73 20 61 20 54 4b 5f 43 4f 4c  ontains a TK_COL
19670 4c 41 54 45 20 6f 70 65 72 61 74 6f 72 20 2a 2f  LATE operator */
19680 0a 23 64 65 66 69 6e 65 20 45 50 5f 47 65 6e 65  .#define EP_Gene
19690 72 69 63 20 20 20 30 78 30 30 30 32 30 30 20 2f  ric   0x000200 /
196a0 2a 20 49 67 6e 6f 72 65 20 43 4f 4c 4c 41 54 45  * Ignore COLLATE
196b0 20 6f 72 20 61 66 66 69 6e 69 74 79 20 6f 6e 20   or affinity on 
196c0 74 68 69 73 20 74 72 65 65 20 2a 2f 0a 23 64 65  this tree */.#de
196d0 66 69 6e 65 20 45 50 5f 49 6e 74 56 61 6c 75 65  fine EP_IntValue
196e0 20 20 30 78 30 30 30 34 30 30 20 2f 2a 20 49 6e    0x000400 /* In
196f0 74 65 67 65 72 20 76 61 6c 75 65 20 63 6f 6e 74  teger value cont
19700 61 69 6e 65 64 20 69 6e 20 75 2e 69 56 61 6c 75  ained in u.iValu
19710 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  e */.#define EP_
19720 78 49 73 53 65 6c 65 63 74 20 30 78 30 30 30 38  xIsSelect 0x0008
19730 30 30 20 2f 2a 20 78 2e 70 53 65 6c 65 63 74 20  00 /* x.pSelect 
19740 69 73 20 76 61 6c 69 64 20 28 6f 74 68 65 72 77  is valid (otherw
19750 69 73 65 20 78 2e 70 4c 69 73 74 20 69 73 29 20  ise x.pList is) 
19760 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 53 6b  */.#define EP_Sk
19770 69 70 20 20 20 20 20 20 30 78 30 30 31 30 30 30  ip      0x001000
19780 20 2f 2a 20 43 4f 4c 4c 41 54 45 2c 20 41 53 2c   /* COLLATE, AS,
19790 20 6f 72 20 55 4e 4c 49 4b 45 4c 59 20 2a 2f 0a   or UNLIKELY */.
197a0 23 64 65 66 69 6e 65 20 45 50 5f 52 65 64 75 63  #define EP_Reduc
197b0 65 64 20 20 20 30 78 30 30 32 30 30 30 20 2f 2a  ed   0x002000 /*
197c0 20 45 78 70 72 20 73 74 72 75 63 74 20 45 58 50   Expr struct EXP
197d0 52 5f 52 45 44 55 43 45 44 53 49 5a 45 20 62 79  R_REDUCEDSIZE by
197e0 74 65 73 20 6f 6e 6c 79 20 2a 2f 0a 23 64 65 66  tes only */.#def
197f0 69 6e 65 20 45 50 5f 54 6f 6b 65 6e 4f 6e 6c 79  ine EP_TokenOnly
19800 20 30 78 30 30 34 30 30 30 20 2f 2a 20 45 78 70   0x004000 /* Exp
19810 72 20 73 74 72 75 63 74 20 45 58 50 52 5f 54 4f  r struct EXPR_TO
19820 4b 45 4e 4f 4e 4c 59 53 49 5a 45 20 62 79 74 65  KENONLYSIZE byte
19830 73 20 6f 6e 6c 79 20 2a 2f 0a 23 64 65 66 69 6e  s only */.#defin
19840 65 20 45 50 5f 53 74 61 74 69 63 20 20 20 20 30  e EP_Static    0
19850 78 30 30 38 30 30 30 20 2f 2a 20 48 65 6c 64 20  x008000 /* Held 
19860 69 6e 20 6d 65 6d 6f 72 79 20 6e 6f 74 20 6f 62  in memory not ob
19870 74 61 69 6e 65 64 20 66 72 6f 6d 20 6d 61 6c 6c  tained from mall
19880 6f 63 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20  oc() */.#define 
19890 45 50 5f 4d 65 6d 54 6f 6b 65 6e 20 20 30 78 30  EP_MemToken  0x0
198a0 31 30 30 30 30 20 2f 2a 20 4e 65 65 64 20 74 6f  10000 /* Need to
198b0 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 29   sqlite3DbFree()
198c0 20 45 78 70 72 2e 7a 54 6f 6b 65 6e 20 2a 2f 0a   Expr.zToken */.
198d0 23 64 65 66 69 6e 65 20 45 50 5f 4e 6f 52 65 64  #define EP_NoRed
198e0 75 63 65 20 20 30 78 30 32 30 30 30 30 20 2f 2a  uce  0x020000 /*
198f0 20 43 61 6e 6e 6f 74 20 45 58 50 52 44 55 50 5f   Cannot EXPRDUP_
19900 52 45 44 55 43 45 20 74 68 69 73 20 45 78 70 72  REDUCE this Expr
19910 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 55   */.#define EP_U
19920 6e 6c 69 6b 65 6c 79 20 20 30 78 30 34 30 30 30  nlikely  0x04000
19930 30 20 2f 2a 20 75 6e 6c 69 6b 65 6c 79 28 29 20  0 /* unlikely() 
19940 6f 72 20 6c 69 6b 65 6c 69 68 6f 6f 64 28 29 20  or likelihood() 
19950 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66  function */.#def
19960 69 6e 65 20 45 50 5f 43 6f 6e 73 74 46 75 6e 63  ine EP_ConstFunc
19970 20 30 78 30 38 30 30 30 30 20 2f 2a 20 41 20 53   0x080000 /* A S
19980 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54  QLITE_FUNC_CONST
19990 41 4e 54 20 6f 72 20 5f 53 4c 4f 43 48 4e 47 20  ANT or _SLOCHNG 
199a0 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66  function */.#def
199b0 69 6e 65 20 45 50 5f 43 61 6e 42 65 4e 75 6c 6c  ine EP_CanBeNull
199c0 20 30 78 31 30 30 30 30 30 20 2f 2a 20 43 61 6e   0x100000 /* Can
199d0 20 62 65 20 6e 75 6c 6c 20 64 65 73 70 69 74 65   be null despite
199e0 20 4e 4f 54 20 4e 55 4c 4c 20 63 6f 6e 73 74 72   NOT NULL constr
199f0 61 69 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20  aint */.#define 
19a00 45 50 5f 53 75 62 71 75 65 72 79 20 20 30 78 32  EP_Subquery  0x2
19a10 30 30 30 30 30 20 2f 2a 20 54 72 65 65 20 63 6f  00000 /* Tree co
19a20 6e 74 61 69 6e 73 20 61 20 54 4b 5f 53 45 4c 45  ntains a TK_SELE
19a30 43 54 20 6f 70 65 72 61 74 6f 72 20 2a 2f 0a 23  CT operator */.#
19a40 64 65 66 69 6e 65 20 45 50 5f 41 6c 69 61 73 20  define EP_Alias 
19a50 20 20 20 20 30 78 34 30 30 30 30 30 20 2f 2a 20      0x400000 /* 
19a60 49 73 20 61 6e 20 61 6c 69 61 73 20 66 6f 72 20  Is an alias for 
19a70 61 20 72 65 73 75 6c 74 20 73 65 74 20 63 6f 6c  a result set col
19a80 75 6d 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45  umn */.#define E
19a90 50 5f 4c 65 61 66 20 20 20 20 20 20 30 78 38 30  P_Leaf      0x80
19aa0 30 30 30 30 20 2f 2a 20 45 78 70 72 2e 70 4c 65  0000 /* Expr.pLe
19ab0 66 74 2c 20 2e 70 52 69 67 68 74 2c 20 2e 75 2e  ft, .pRight, .u.
19ac0 70 53 65 6c 65 63 74 20 61 6c 6c 20 4e 55 4c 4c  pSelect all NULL
19ad0 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 45   */../*.** The E
19ae0 50 5f 50 72 6f 70 61 67 61 74 65 20 6d 61 73 6b  P_Propagate mask
19af0 20 69 73 20 61 20 73 65 74 20 6f 66 20 70 72 6f   is a set of pro
19b00 70 65 72 74 69 65 73 20 74 68 61 74 20 61 75 74  perties that aut
19b10 6f 6d 61 74 69 63 61 6c 6c 79 20 70 72 6f 70 61  omatically propa
19b20 67 61 74 65 0a 2a 2a 20 75 70 77 61 72 64 73 20  gate.** upwards 
19b30 69 6e 74 6f 20 70 61 72 65 6e 74 20 6e 6f 64 65  into parent node
19b40 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  s..*/.#define EP
19b50 5f 50 72 6f 70 61 67 61 74 65 20 28 45 50 5f 43  _Propagate (EP_C
19b60 6f 6c 6c 61 74 65 7c 45 50 5f 53 75 62 71 75 65  ollate|EP_Subque
19b70 72 79 7c 45 50 5f 48 61 73 46 75 6e 63 29 0a 0a  ry|EP_HasFunc)..
19b80 2f 2a 0a 2a 2a 20 54 68 65 73 65 20 6d 61 63 72  /*.** These macr
19b90 6f 73 20 63 61 6e 20 62 65 20 75 73 65 64 20 74  os can be used t
19ba0 6f 20 74 65 73 74 2c 20 73 65 74 2c 20 6f 72 20  o test, set, or 
19bb0 63 6c 65 61 72 20 62 69 74 73 20 69 6e 20 74 68  clear bits in th
19bc0 65 0a 2a 2a 20 45 78 70 72 2e 66 6c 61 67 73 20  e.** Expr.flags 
19bd0 66 69 65 6c 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e  field..*/.#defin
19be0 65 20 45 78 70 72 48 61 73 50 72 6f 70 65 72 74  e ExprHasPropert
19bf0 79 28 45 2c 50 29 20 20 20 20 20 28 28 28 45 29  y(E,P)     (((E)
19c00 2d 3e 66 6c 61 67 73 26 28 50 29 29 21 3d 30 29  ->flags&(P))!=0)
19c10 0a 23 64 65 66 69 6e 65 20 45 78 70 72 48 61 73  .#define ExprHas
19c20 41 6c 6c 50 72 6f 70 65 72 74 79 28 45 2c 50 29  AllProperty(E,P)
19c30 20 20 28 28 28 45 29 2d 3e 66 6c 61 67 73 26 28    (((E)->flags&(
19c40 50 29 29 3d 3d 28 50 29 29 0a 23 64 65 66 69 6e  P))==(P)).#defin
19c50 65 20 45 78 70 72 53 65 74 50 72 6f 70 65 72 74  e ExprSetPropert
19c60 79 28 45 2c 50 29 20 20 20 20 20 28 45 29 2d 3e  y(E,P)     (E)->
19c70 66 6c 61 67 73 7c 3d 28 50 29 0a 23 64 65 66 69  flags|=(P).#defi
19c80 6e 65 20 45 78 70 72 43 6c 65 61 72 50 72 6f 70  ne ExprClearProp
19c90 65 72 74 79 28 45 2c 50 29 20 20 20 28 45 29 2d  erty(E,P)   (E)-
19ca0 3e 66 6c 61 67 73 26 3d 7e 28 50 29 0a 0a 2f 2a  >flags&=~(P)../*
19cb0 20 54 68 65 20 45 78 70 72 53 65 74 56 56 41 50   The ExprSetVVAP
19cc0 72 6f 70 65 72 74 79 28 29 20 6d 61 63 72 6f 20  roperty() macro 
19cd0 69 73 20 75 73 65 64 20 66 6f 72 20 56 65 72 69  is used for Veri
19ce0 66 69 63 61 74 69 6f 6e 2c 20 56 61 6c 69 64 61  fication, Valida
19cf0 74 69 6f 6e 2c 0a 2a 2a 20 61 6e 64 20 41 63 63  tion,.** and Acc
19d00 72 65 64 69 74 61 74 69 6f 6e 20 6f 6e 6c 79 2e  reditation only.
19d10 20 20 49 74 20 77 6f 72 6b 73 20 6c 69 6b 65 20    It works like 
19d20 45 78 70 72 53 65 74 50 72 6f 70 65 72 74 79 28  ExprSetProperty(
19d30 29 20 64 75 72 69 6e 67 20 56 56 41 0a 2a 2a 20  ) during VVA.** 
19d40 70 72 6f 63 65 73 73 65 73 20 62 75 74 20 69 73  processes but is
19d50 20 61 20 6e 6f 2d 6f 70 20 66 6f 72 20 64 65 6c   a no-op for del
19d60 69 76 65 72 79 2e 0a 2a 2f 0a 23 69 66 64 65 66  ivery..*/.#ifdef
19d70 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 23 20   SQLITE_DEBUG.# 
19d80 64 65 66 69 6e 65 20 45 78 70 72 53 65 74 56 56  define ExprSetVV
19d90 41 50 72 6f 70 65 72 74 79 28 45 2c 50 29 20 20  AProperty(E,P)  
19da0 28 45 29 2d 3e 66 6c 61 67 73 7c 3d 28 50 29 0a  (E)->flags|=(P).
19db0 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 45  #else.# define E
19dc0 78 70 72 53 65 74 56 56 41 50 72 6f 70 65 72 74  xprSetVVAPropert
19dd0 79 28 45 2c 50 29 0a 23 65 6e 64 69 66 0a 0a 2f  y(E,P).#endif../
19de0 2a 0a 2a 2a 20 4d 61 63 72 6f 73 20 74 6f 20 64  *.** Macros to d
19df0 65 74 65 72 6d 69 6e 65 20 74 68 65 20 6e 75 6d  etermine the num
19e00 62 65 72 20 6f 66 20 62 79 74 65 73 20 72 65 71  ber of bytes req
19e10 75 69 72 65 64 20 62 79 20 61 20 6e 6f 72 6d 61  uired by a norma
19e20 6c 20 45 78 70 72 0a 2a 2a 20 73 74 72 75 63 74  l Expr.** struct
19e30 2c 20 61 6e 20 45 78 70 72 20 73 74 72 75 63 74  , an Expr struct
19e40 20 77 69 74 68 20 74 68 65 20 45 50 5f 52 65 64   with the EP_Red
19e50 75 63 65 64 20 66 6c 61 67 20 73 65 74 20 69 6e  uced flag set in
19e60 20 45 78 70 72 2e 66 6c 61 67 73 0a 2a 2a 20 61   Expr.flags.** a
19e70 6e 64 20 61 6e 20 45 78 70 72 20 73 74 72 75 63  nd an Expr struc
19e80 74 20 77 69 74 68 20 74 68 65 20 45 50 5f 54 6f  t with the EP_To
19e90 6b 65 6e 4f 6e 6c 79 20 66 6c 61 67 20 73 65 74  kenOnly flag set
19ea0 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 45 58 50  ..*/.#define EXP
19eb0 52 5f 46 55 4c 4c 53 49 5a 45 20 20 20 20 20 20  R_FULLSIZE      
19ec0 20 20 20 20 20 73 69 7a 65 6f 66 28 45 78 70 72       sizeof(Expr
19ed0 29 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46  )           /* F
19ee0 75 6c 6c 20 73 69 7a 65 20 2a 2f 0a 23 64 65 66  ull size */.#def
19ef0 69 6e 65 20 45 58 50 52 5f 52 45 44 55 43 45 44  ine EXPR_REDUCED
19f00 53 49 5a 45 20 20 20 20 20 20 20 20 6f 66 66 73  SIZE        offs
19f10 65 74 6f 66 28 45 78 70 72 2c 69 54 61 62 6c 65  etof(Expr,iTable
19f20 29 20 20 2f 2a 20 43 6f 6d 6d 6f 6e 20 66 65 61  )  /* Common fea
19f30 74 75 72 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65  tures */.#define
19f40 20 45 58 50 52 5f 54 4f 4b 45 4e 4f 4e 4c 59 53   EXPR_TOKENONLYS
19f50 49 5a 45 20 20 20 20 20 20 6f 66 66 73 65 74 6f  IZE      offseto
19f60 66 28 45 78 70 72 2c 70 4c 65 66 74 29 20 20 20  f(Expr,pLeft)   
19f70 2f 2a 20 46 65 77 65 72 20 66 65 61 74 75 72 65  /* Fewer feature
19f80 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 46 6c 61 67  s */../*.** Flag
19f90 73 20 70 61 73 73 65 64 20 74 6f 20 74 68 65 20  s passed to the 
19fa0 73 71 6c 69 74 65 33 45 78 70 72 44 75 70 28 29  sqlite3ExprDup()
19fb0 20 66 75 6e 63 74 69 6f 6e 2e 20 53 65 65 20 74   function. See t
19fc0 68 65 20 68 65 61 64 65 72 20 63 6f 6d 6d 65 6e  he header commen
19fd0 74 0a 2a 2a 20 61 62 6f 76 65 20 73 71 6c 69 74  t.** above sqlit
19fe0 65 33 45 78 70 72 44 75 70 28 29 20 66 6f 72 20  e3ExprDup() for 
19ff0 64 65 74 61 69 6c 73 2e 0a 2a 2f 0a 23 64 65 66  details..*/.#def
1a000 69 6e 65 20 45 58 50 52 44 55 50 5f 52 45 44 55  ine EXPRDUP_REDU
1a010 43 45 20 20 20 20 20 20 20 20 20 30 78 30 30 30  CE         0x000
1a020 31 20 20 2f 2a 20 55 73 65 64 20 72 65 64 75 63  1  /* Used reduc
1a030 65 64 2d 73 69 7a 65 20 45 78 70 72 20 6e 6f 64  ed-size Expr nod
1a040 65 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 20 6c  es */../*.** A l
1a050 69 73 74 20 6f 66 20 65 78 70 72 65 73 73 69 6f  ist of expressio
1a060 6e 73 2e 20 20 45 61 63 68 20 65 78 70 72 65 73  ns.  Each expres
1a070 73 69 6f 6e 20 6d 61 79 20 6f 70 74 69 6f 6e 61  sion may optiona
1a080 6c 6c 79 20 68 61 76 65 20 61 0a 2a 2a 20 6e 61  lly have a.** na
1a090 6d 65 2e 20 20 41 6e 20 65 78 70 72 2f 6e 61 6d  me.  An expr/nam
1a0a0 65 20 63 6f 6d 62 69 6e 61 74 69 6f 6e 20 63 61  e combination ca
1a0b0 6e 20 62 65 20 75 73 65 64 20 69 6e 20 73 65 76  n be used in sev
1a0c0 65 72 61 6c 20 77 61 79 73 2c 20 73 75 63 68 0a  eral ways, such.
1a0d0 2a 2a 20 61 73 20 74 68 65 20 6c 69 73 74 20 6f  ** as the list o
1a0e0 66 20 22 65 78 70 72 20 41 53 20 49 44 22 20 66  f "expr AS ID" f
1a0f0 69 65 6c 64 73 20 66 6f 6c 6c 6f 77 69 6e 67 20  ields following 
1a100 61 20 22 53 45 4c 45 43 54 22 20 6f 72 20 69 6e  a "SELECT" or in
1a110 20 74 68 65 0a 2a 2a 20 6c 69 73 74 20 6f 66 20   the.** list of 
1a120 22 49 44 20 3d 20 65 78 70 72 22 20 69 74 65 6d  "ID = expr" item
1a130 73 20 69 6e 20 61 6e 20 55 50 44 41 54 45 2e 20  s in an UPDATE. 
1a140 20 41 20 6c 69 73 74 20 6f 66 20 65 78 70 72 65   A list of expre
1a150 73 73 69 6f 6e 73 20 63 61 6e 0a 2a 2a 20 61 6c  ssions can.** al
1a160 73 6f 20 62 65 20 75 73 65 64 20 61 73 20 74 68  so be used as th
1a170 65 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 61 20  e argument to a 
1a180 66 75 6e 63 74 69 6f 6e 2c 20 69 6e 20 77 68 69  function, in whi
1a190 63 68 20 63 61 73 65 20 74 68 65 20 61 2e 7a 4e  ch case the a.zN
1a1a0 61 6d 65 0a 2a 2a 20 66 69 65 6c 64 20 69 73 20  ame.** field is 
1a1b0 6e 6f 74 20 75 73 65 64 2e 0a 2a 2a 0a 2a 2a 20  not used..**.** 
1a1c0 42 79 20 64 65 66 61 75 6c 74 20 74 68 65 20 45  By default the E
1a1d0 78 70 72 2e 7a 53 70 61 6e 20 66 69 65 6c 64 20  xpr.zSpan field 
1a1e0 68 6f 6c 64 73 20 61 20 68 75 6d 61 6e 2d 72 65  holds a human-re
1a1f0 61 64 61 62 6c 65 20 64 65 73 63 72 69 70 74 69  adable descripti
1a200 6f 6e 20 6f 66 0a 2a 2a 20 74 68 65 20 65 78 70  on of.** the exp
1a210 72 65 73 73 69 6f 6e 20 74 68 61 74 20 69 73 20  ression that is 
1a220 75 73 65 64 20 69 6e 20 74 68 65 20 67 65 6e 65  used in the gene
1a230 72 61 74 69 6f 6e 20 6f 66 20 65 72 72 6f 72 20  ration of error 
1a240 6d 65 73 73 61 67 65 73 20 61 6e 64 0a 2a 2a 20  messages and.** 
1a250 63 6f 6c 75 6d 6e 20 6c 61 62 65 6c 73 2e 20 20  column labels.  
1a260 49 6e 20 74 68 69 73 20 63 61 73 65 2c 20 45 78  In this case, Ex
1a270 70 72 2e 7a 53 70 61 6e 20 69 73 20 74 79 70 69  pr.zSpan is typi
1a280 63 61 6c 6c 79 20 74 68 65 20 74 65 78 74 20 6f  cally the text o
1a290 66 20 61 0a 2a 2a 20 63 6f 6c 75 6d 6e 20 65 78  f a.** column ex
1a2a0 70 72 65 73 73 69 6f 6e 20 61 73 20 69 74 20 65  pression as it e
1a2b0 78 69 73 74 73 20 69 6e 20 61 20 53 45 4c 45 43  xists in a SELEC
1a2c0 54 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 48 6f  T statement.  Ho
1a2d0 77 65 76 65 72 2c 20 69 66 0a 2a 2a 20 74 68 65  wever, if.** the
1a2e0 20 62 53 70 61 6e 49 73 54 61 62 20 66 6c 61 67   bSpanIsTab flag
1a2f0 20 69 73 20 73 65 74 2c 20 74 68 65 6e 20 7a 53   is set, then zS
1a300 70 61 6e 20 69 73 20 6f 76 65 72 6c 6f 61 64 65  pan is overloade
1a310 64 20 74 6f 20 6d 65 61 6e 20 74 68 65 20 6e 61  d to mean the na
1a320 6d 65 0a 2a 2a 20 6f 66 20 74 68 65 20 72 65 73  me.** of the res
1a330 75 6c 74 20 63 6f 6c 75 6d 6e 20 69 6e 20 74 68  ult column in th
1a340 65 20 66 6f 72 6d 3a 20 44 41 54 41 42 41 53 45  e form: DATABASE
1a350 2e 54 41 42 4c 45 2e 43 4f 4c 55 4d 4e 2e 20 20  .TABLE.COLUMN.  
1a360 54 68 69 73 20 6c 61 74 65 72 0a 2a 2a 20 66 6f  This later.** fo
1a370 72 6d 20 69 73 20 75 73 65 64 20 66 6f 72 20 6e  rm is used for n
1a380 61 6d 65 20 72 65 73 6f 6c 75 74 69 6f 6e 20 77  ame resolution w
1a390 69 74 68 20 6e 65 73 74 65 64 20 46 52 4f 4d 20  ith nested FROM 
1a3a0 63 6c 61 75 73 65 73 2e 0a 2a 2f 0a 73 74 72 75  clauses..*/.stru
1a3b0 63 74 20 45 78 70 72 4c 69 73 74 20 7b 0a 20 20  ct ExprList {.  
1a3c0 69 6e 74 20 6e 45 78 70 72 3b 20 20 20 20 20 20  int nExpr;      
1a3d0 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
1a3e0 20 6f 66 20 65 78 70 72 65 73 73 69 6f 6e 73 20   of expressions 
1a3f0 6f 6e 20 74 68 65 20 6c 69 73 74 20 2a 2f 0a 20  on the list */. 
1a400 20 73 74 72 75 63 74 20 45 78 70 72 4c 69 73 74   struct ExprList
1a410 5f 69 74 65 6d 20 7b 20 2f 2a 20 46 6f 72 20 65  _item { /* For e
1a420 61 63 68 20 65 78 70 72 65 73 73 69 6f 6e 20 69  ach expression i
1a430 6e 20 74 68 65 20 6c 69 73 74 20 2a 2f 0a 20 20  n the list */.  
1a440 20 20 45 78 70 72 20 2a 70 45 78 70 72 3b 20 20    Expr *pExpr;  
1a450 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
1a460 20 70 61 72 73 65 20 74 72 65 65 20 66 6f 72 20   parse tree for 
1a470 74 68 69 73 20 65 78 70 72 65 73 73 69 6f 6e 20  this expression 
1a480 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a 4e 61  */.    char *zNa
1a490 6d 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  me;            /
1a4a0 2a 20 54 6f 6b 65 6e 20 61 73 73 6f 63 69 61 74  * Token associat
1a4b0 65 64 20 77 69 74 68 20 74 68 69 73 20 65 78 70  ed with this exp
1a4c0 72 65 73 73 69 6f 6e 20 2a 2f 0a 20 20 20 20 63  ression */.    c
1a4d0 68 61 72 20 2a 7a 53 70 61 6e 3b 20 20 20 20 20  har *zSpan;     
1a4e0 20 20 20 20 20 20 20 2f 2a 20 4f 72 69 67 69 6e         /* Origin
1a4f0 61 6c 20 74 65 78 74 20 6f 66 20 74 68 65 20 65  al text of the e
1a500 78 70 72 65 73 73 69 6f 6e 20 2a 2f 0a 20 20 20  xpression */.   
1a510 20 75 38 20 73 6f 72 74 4f 72 64 65 72 3b 20 20   u8 sortOrder;  
1a520 20 20 20 20 20 20 20 20 20 2f 2a 20 31 20 66 6f           /* 1 fo
1a530 72 20 44 45 53 43 20 6f 72 20 30 20 66 6f 72 20  r DESC or 0 for 
1a540 41 53 43 20 2a 2f 0a 20 20 20 20 75 6e 73 69 67  ASC */.    unsig
1a550 6e 65 64 20 64 6f 6e 65 20 3a 31 3b 20 20 20 20  ned done :1;    
1a560 20 20 20 2f 2a 20 41 20 66 6c 61 67 20 74 6f 20     /* A flag to 
1a570 69 6e 64 69 63 61 74 65 20 77 68 65 6e 20 70 72  indicate when pr
1a580 6f 63 65 73 73 69 6e 67 20 69 73 20 66 69 6e 69  ocessing is fini
1a590 73 68 65 64 20 2a 2f 0a 20 20 20 20 75 6e 73 69  shed */.    unsi
1a5a0 67 6e 65 64 20 62 53 70 61 6e 49 73 54 61 62 20  gned bSpanIsTab 
1a5b0 3a 31 3b 20 2f 2a 20 7a 53 70 61 6e 20 68 6f 6c  :1; /* zSpan hol
1a5c0 64 73 20 44 42 2e 54 41 42 4c 45 2e 43 4f 4c 55  ds DB.TABLE.COLU
1a5d0 4d 4e 20 2a 2f 0a 20 20 20 20 75 6e 73 69 67 6e  MN */.    unsign
1a5e0 65 64 20 72 65 75 73 61 62 6c 65 20 3a 31 3b 20  ed reusable :1; 
1a5f0 20 20 2f 2a 20 43 6f 6e 73 74 61 6e 74 20 65 78    /* Constant ex
1a600 70 72 65 73 73 69 6f 6e 20 69 73 20 72 65 75 73  pression is reus
1a610 61 62 6c 65 20 2a 2f 0a 20 20 20 20 75 6e 73 69  able */.    unsi
1a620 67 6e 65 64 20 62 53 6f 72 74 65 72 52 65 66 20  gned bSorterRef 
1a630 3a 31 3b 20 2f 2a 20 44 65 66 65 72 20 65 76 61  :1; /* Defer eva
1a640 6c 75 61 74 69 6f 6e 20 75 6e 74 69 6c 20 61 66  luation until af
1a650 74 65 72 20 73 6f 72 74 69 6e 67 20 2a 2f 0a 20  ter sorting */. 
1a660 20 20 20 75 6e 69 6f 6e 20 7b 0a 20 20 20 20 20     union {.     
1a670 20 73 74 72 75 63 74 20 7b 0a 20 20 20 20 20 20   struct {.      
1a680 20 20 75 31 36 20 69 4f 72 64 65 72 42 79 43 6f    u16 iOrderByCo
1a690 6c 3b 20 20 20 20 20 20 2f 2a 20 46 6f 72 20 4f  l;      /* For O
1a6a0 52 44 45 52 20 42 59 2c 20 63 6f 6c 75 6d 6e 20  RDER BY, column 
1a6b0 6e 75 6d 62 65 72 20 69 6e 20 72 65 73 75 6c 74  number in result
1a6c0 20 73 65 74 20 2a 2f 0a 20 20 20 20 20 20 20 20   set */.        
1a6d0 75 31 36 20 69 41 6c 69 61 73 3b 20 20 20 20 20  u16 iAlias;     
1a6e0 20 20 20 20 20 20 2f 2a 20 49 6e 64 65 78 20 69        /* Index i
1a6f0 6e 74 6f 20 50 61 72 73 65 2e 61 41 6c 69 61 73  nto Parse.aAlias
1a700 5b 5d 20 66 6f 72 20 7a 4e 61 6d 65 20 2a 2f 0a  [] for zName */.
1a710 20 20 20 20 20 20 7d 20 78 3b 0a 20 20 20 20 20        } x;.     
1a720 20 69 6e 74 20 69 43 6f 6e 73 74 45 78 70 72 52   int iConstExprR
1a730 65 67 3b 20 20 20 20 20 20 2f 2a 20 52 65 67 69  eg;      /* Regi
1a740 73 74 65 72 20 69 6e 20 77 68 69 63 68 20 45 78  ster in which Ex
1a750 70 72 20 76 61 6c 75 65 20 69 73 20 63 61 63 68  pr value is cach
1a760 65 64 20 2a 2f 0a 20 20 20 20 7d 20 75 3b 0a 20  ed */.    } u;. 
1a770 20 7d 20 61 5b 31 5d 3b 20 20 20 20 20 20 20 20   } a[1];        
1a780 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65            /* One
1a790 20 73 6c 6f 74 20 66 6f 72 20 65 61 63 68 20 65   slot for each e
1a7a0 78 70 72 65 73 73 69 6f 6e 20 69 6e 20 74 68 65  xpression in the
1a7b0 20 6c 69 73 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a   list */.};../*.
1a7c0 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f  ** An instance o
1a7d0 66 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65  f this structure
1a7e0 20 63 61 6e 20 68 6f 6c 64 20 61 20 73 69 6d 70   can hold a simp
1a7f0 6c 65 20 6c 69 73 74 20 6f 66 20 69 64 65 6e 74  le list of ident
1a800 69 66 69 65 72 73 2c 0a 2a 2a 20 73 75 63 68 20  ifiers,.** such 
1a810 61 73 20 74 68 65 20 6c 69 73 74 20 22 61 2c 62  as the list "a,b
1a820 2c 63 22 20 69 6e 20 74 68 65 20 66 6f 6c 6c 6f  ,c" in the follo
1a830 77 69 6e 67 20 73 74 61 74 65 6d 65 6e 74 73 3a  wing statements:
1a840 0a 2a 2a 0a 2a 2a 20 20 20 20 20 20 49 4e 53 45  .**.**      INSE
1a850 52 54 20 49 4e 54 4f 20 74 28 61 2c 62 2c 63 29  RT INTO t(a,b,c)
1a860 20 56 41 4c 55 45 53 20 2e 2e 2e 3b 0a 2a 2a 20   VALUES ...;.** 
1a870 20 20 20 20 20 43 52 45 41 54 45 20 49 4e 44 45       CREATE INDE
1a880 58 20 69 64 78 20 4f 4e 20 74 28 61 2c 62 2c 63  X idx ON t(a,b,c
1a890 29 3b 0a 2a 2a 20 20 20 20 20 20 43 52 45 41 54  );.**      CREAT
1a8a0 45 20 54 52 49 47 47 45 52 20 74 72 69 67 20 42  E TRIGGER trig B
1a8b0 45 46 4f 52 45 20 55 50 44 41 54 45 20 4f 4e 20  EFORE UPDATE ON 
1a8c0 74 28 61 2c 62 2c 63 29 20 2e 2e 2e 3b 0a 2a 2a  t(a,b,c) ...;.**
1a8d0 0a 2a 2a 20 54 68 65 20 49 64 4c 69 73 74 2e 61  .** The IdList.a
1a8e0 2e 69 64 78 20 66 69 65 6c 64 20 69 73 20 75 73  .idx field is us
1a8f0 65 64 20 77 68 65 6e 20 74 68 65 20 49 64 4c 69  ed when the IdLi
1a900 73 74 20 72 65 70 72 65 73 65 6e 74 73 20 74 68  st represents th
1a910 65 20 6c 69 73 74 20 6f 66 0a 2a 2a 20 63 6f 6c  e list of.** col
1a920 75 6d 6e 20 6e 61 6d 65 73 20 61 66 74 65 72 20  umn names after 
1a930 61 20 74 61 62 6c 65 20 6e 61 6d 65 20 69 6e 20  a table name in 
1a940 61 6e 20 49 4e 53 45 52 54 20 73 74 61 74 65 6d  an INSERT statem
1a950 65 6e 74 2e 20 20 49 6e 20 74 68 65 20 73 74 61  ent.  In the sta
1a960 74 65 6d 65 6e 74 0a 2a 2a 0a 2a 2a 20 20 20 20  tement.**.**    
1a970 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 28 61   INSERT INTO t(a
1a980 2c 62 2c 63 29 20 2e 2e 2e 0a 2a 2a 0a 2a 2a 20  ,b,c) ....**.** 
1a990 49 66 20 22 61 22 20 69 73 20 74 68 65 20 6b 2d  If "a" is the k-
1a9a0 74 68 20 63 6f 6c 75 6d 6e 20 6f 66 20 74 61 62  th column of tab
1a9b0 6c 65 20 22 74 22 2c 20 74 68 65 6e 20 49 64 4c  le "t", then IdL
1a9c0 69 73 74 2e 61 5b 30 5d 2e 69 64 78 3d 3d 6b 2e  ist.a[0].idx==k.
1a9d0 0a 2a 2f 0a 73 74 72 75 63 74 20 49 64 4c 69 73  .*/.struct IdLis
1a9e0 74 20 7b 0a 20 20 73 74 72 75 63 74 20 49 64 4c  t {.  struct IdL
1a9f0 69 73 74 5f 69 74 65 6d 20 7b 0a 20 20 20 20 63  ist_item {.    c
1aa00 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20  har *zName;     
1aa10 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65 20   /* Name of the 
1aa20 69 64 65 6e 74 69 66 69 65 72 20 2a 2f 0a 20 20  identifier */.  
1aa30 20 20 69 6e 74 20 69 64 78 3b 20 20 20 20 20 20    int idx;      
1aa40 20 20 20 20 2f 2a 20 49 6e 64 65 78 20 69 6e 20      /* Index in 
1aa50 73 6f 6d 65 20 54 61 62 6c 65 2e 61 43 6f 6c 5b  some Table.aCol[
1aa60 5d 20 6f 66 20 61 20 63 6f 6c 75 6d 6e 20 6e 61  ] of a column na
1aa70 6d 65 64 20 7a 4e 61 6d 65 20 2a 2f 0a 20 20 7d  med zName */.  }
1aa80 20 2a 61 3b 0a 20 20 69 6e 74 20 6e 49 64 3b 20   *a;.  int nId; 
1aa90 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
1aaa0 72 20 6f 66 20 69 64 65 6e 74 69 66 69 65 72 73  r of identifiers
1aab0 20 6f 6e 20 74 68 65 20 6c 69 73 74 20 2a 2f 0a   on the list */.
1aac0 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f  };../*.** The fo
1aad0 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72  llowing structur
1aae0 65 20 64 65 73 63 72 69 62 65 73 20 74 68 65 20  e describes the 
1aaf0 46 52 4f 4d 20 63 6c 61 75 73 65 20 6f 66 20 61  FROM clause of a
1ab00 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e   SELECT statemen
1ab10 74 2e 0a 2a 2a 20 45 61 63 68 20 74 61 62 6c 65  t..** Each table
1ab20 20 6f 72 20 73 75 62 71 75 65 72 79 20 69 6e 20   or subquery in 
1ab30 74 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 20  the FROM clause 
1ab40 69 73 20 61 20 73 65 70 61 72 61 74 65 20 65 6c  is a separate el
1ab50 65 6d 65 6e 74 20 6f 66 0a 2a 2a 20 74 68 65 20  ement of.** the 
1ab60 53 72 63 4c 69 73 74 2e 61 5b 5d 20 61 72 72 61  SrcList.a[] arra
1ab70 79 2e 0a 2a 2a 0a 2a 2a 20 57 69 74 68 20 74 68  y..**.** With th
1ab80 65 20 61 64 64 69 74 69 6f 6e 20 6f 66 20 6d 75  e addition of mu
1ab90 6c 74 69 70 6c 65 20 64 61 74 61 62 61 73 65 20  ltiple database 
1aba0 73 75 70 70 6f 72 74 2c 20 74 68 65 20 66 6f 6c  support, the fol
1abb0 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65  lowing structure
1abc0 0a 2a 2a 20 63 61 6e 20 61 6c 73 6f 20 62 65 20  .** can also be 
1abd0 75 73 65 64 20 74 6f 20 64 65 73 63 72 69 62 65  used to describe
1abe0 20 61 20 70 61 72 74 69 63 75 6c 61 72 20 74 61   a particular ta
1abf0 62 6c 65 20 73 75 63 68 20 61 73 20 74 68 65 20  ble such as the 
1ac00 74 61 62 6c 65 20 74 68 61 74 0a 2a 2a 20 69 73  table that.** is
1ac10 20 6d 6f 64 69 66 69 65 64 20 62 79 20 61 6e 20   modified by an 
1ac20 49 4e 53 45 52 54 2c 20 44 45 4c 45 54 45 2c 20  INSERT, DELETE, 
1ac30 6f 72 20 55 50 44 41 54 45 20 73 74 61 74 65 6d  or UPDATE statem
1ac40 65 6e 74 2e 20 20 49 6e 20 73 74 61 6e 64 61 72  ent.  In standar
1ac50 64 20 53 51 4c 2c 0a 2a 2a 20 73 75 63 68 20 61  d SQL,.** such a
1ac60 20 74 61 62 6c 65 20 6d 75 73 74 20 62 65 20 61   table must be a
1ac70 20 73 69 6d 70 6c 65 20 6e 61 6d 65 3a 20 49 44   simple name: ID
1ac80 2e 20 20 42 75 74 20 69 6e 20 53 51 4c 69 74 65  .  But in SQLite
1ac90 2c 20 74 68 65 20 74 61 62 6c 65 20 63 61 6e 0a  , the table can.
1aca0 2a 2a 20 6e 6f 77 20 62 65 20 69 64 65 6e 74 69  ** now be identi
1acb0 66 69 65 64 20 62 79 20 61 20 64 61 74 61 62 61  fied by a databa
1acc0 73 65 20 6e 61 6d 65 2c 20 61 20 64 6f 74 2c 20  se name, a dot, 
1acd0 74 68 65 6e 20 74 68 65 20 74 61 62 6c 65 20 6e  then the table n
1ace0 61 6d 65 3a 20 49 44 2e 49 44 2e 0a 2a 2a 0a 2a  ame: ID.ID..**.*
1acf0 2a 20 54 68 65 20 6a 6f 69 6e 74 79 70 65 20 73  * The jointype s
1ad00 74 61 72 74 73 20 6f 75 74 20 73 68 6f 77 69 6e  tarts out showin
1ad10 67 20 74 68 65 20 6a 6f 69 6e 20 74 79 70 65 20  g the join type 
1ad20 62 65 74 77 65 65 6e 20 74 68 65 20 63 75 72 72  between the curr
1ad30 65 6e 74 20 74 61 62 6c 65 0a 2a 2a 20 61 6e 64  ent table.** and
1ad40 20 74 68 65 20 6e 65 78 74 20 74 61 62 6c 65 20   the next table 
1ad50 6f 6e 20 74 68 65 20 6c 69 73 74 2e 20 20 54 68  on the list.  Th
1ad60 65 20 70 61 72 73 65 72 20 62 75 69 6c 64 73 20  e parser builds 
1ad70 74 68 65 20 6c 69 73 74 20 74 68 69 73 20 77 61  the list this wa
1ad80 79 2e 0a 2a 2a 20 42 75 74 20 73 71 6c 69 74 65  y..** But sqlite
1ad90 33 53 72 63 4c 69 73 74 53 68 69 66 74 4a 6f 69  3SrcListShiftJoi
1ada0 6e 54 79 70 65 28 29 20 6c 61 74 65 72 20 73 68  nType() later sh
1adb0 69 66 74 73 20 74 68 65 20 6a 6f 69 6e 74 79 70  ifts the jointyp
1adc0 65 73 20 73 6f 20 74 68 61 74 20 65 61 63 68 0a  es so that each.
1add0 2a 2a 20 6a 6f 69 6e 74 79 70 65 20 65 78 70 72  ** jointype expr
1ade0 65 73 73 65 73 20 74 68 65 20 6a 6f 69 6e 20 62  esses the join b
1adf0 65 74 77 65 65 6e 20 74 68 65 20 74 61 62 6c 65  etween the table
1ae00 20 61 6e 64 20 74 68 65 20 70 72 65 76 69 6f 75   and the previou
1ae10 73 20 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49  s table..**.** I
1ae20 6e 20 74 68 65 20 63 6f 6c 55 73 65 64 20 66 69  n the colUsed fi
1ae30 65 6c 64 2c 20 74 68 65 20 68 69 67 68 2d 6f 72  eld, the high-or
1ae40 64 65 72 20 62 69 74 20 28 62 69 74 20 36 33 29  der bit (bit 63)
1ae50 20 69 73 20 73 65 74 20 69 66 20 74 68 65 20 74   is set if the t
1ae60 61 62 6c 65 0a 2a 2a 20 63 6f 6e 74 61 69 6e 73  able.** contains
1ae70 20 6d 6f 72 65 20 74 68 61 6e 20 36 33 20 63 6f   more than 63 co
1ae80 6c 75 6d 6e 73 20 61 6e 64 20 74 68 65 20 36 34  lumns and the 64
1ae90 2d 74 68 20 6f 72 20 6c 61 74 65 72 20 63 6f 6c  -th or later col
1aea0 75 6d 6e 20 69 73 20 75 73 65 64 2e 0a 2a 2f 0a  umn is used..*/.
1aeb0 73 74 72 75 63 74 20 53 72 63 4c 69 73 74 20 7b  struct SrcList {
1aec0 0a 20 20 69 6e 74 20 6e 53 72 63 3b 20 20 20 20  .  int nSrc;    
1aed0 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
1aee0 20 74 61 62 6c 65 73 20 6f 72 20 73 75 62 71 75   tables or subqu
1aef0 65 72 69 65 73 20 69 6e 20 74 68 65 20 46 52 4f  eries in the FRO
1af00 4d 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 75 33  M clause */.  u3
1af10 32 20 6e 41 6c 6c 6f 63 3b 20 20 20 20 20 20 2f  2 nAlloc;      /
1af20 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 6e 74 72  * Number of entr
1af30 69 65 73 20 61 6c 6c 6f 63 61 74 65 64 20 69 6e  ies allocated in
1af40 20 61 5b 5d 20 62 65 6c 6f 77 20 2a 2f 0a 20 20   a[] below */.  
1af50 73 74 72 75 63 74 20 53 72 63 4c 69 73 74 5f 69  struct SrcList_i
1af60 74 65 6d 20 7b 0a 20 20 20 20 53 63 68 65 6d 61  tem {.    Schema
1af70 20 2a 70 53 63 68 65 6d 61 3b 20 20 2f 2a 20 53   *pSchema;  /* S
1af80 63 68 65 6d 61 20 74 6f 20 77 68 69 63 68 20 74  chema to which t
1af90 68 69 73 20 69 74 65 6d 20 69 73 20 66 69 78 65  his item is fixe
1afa0 64 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a  d */.    char *z
1afb0 44 61 74 61 62 61 73 65 3b 20 20 2f 2a 20 4e 61  Database;  /* Na
1afc0 6d 65 20 6f 66 20 64 61 74 61 62 61 73 65 20 68  me of database h
1afd0 6f 6c 64 69 6e 67 20 74 68 69 73 20 74 61 62 6c  olding this tabl
1afe0 65 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a  e */.    char *z
1aff0 4e 61 6d 65 3b 20 20 20 20 20 20 2f 2a 20 4e 61  Name;      /* Na
1b000 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20  me of the table 
1b010 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a 41 6c  */.    char *zAl
1b020 69 61 73 3b 20 20 20 20 20 2f 2a 20 54 68 65 20  ias;     /* The 
1b030 22 42 22 20 70 61 72 74 20 6f 66 20 61 20 22 41  "B" part of a "A
1b040 20 41 53 20 42 22 20 70 68 72 61 73 65 2e 20 20   AS B" phrase.  
1b050 7a 4e 61 6d 65 20 69 73 20 74 68 65 20 22 41 22  zName is the "A"
1b060 20 2a 2f 0a 20 20 20 20 54 61 62 6c 65 20 2a 70   */.    Table *p
1b070 54 61 62 3b 20 20 20 20 20 20 2f 2a 20 41 6e 20  Tab;      /* An 
1b080 53 51 4c 20 74 61 62 6c 65 20 63 6f 72 72 65 73  SQL table corres
1b090 70 6f 6e 64 69 6e 67 20 74 6f 20 7a 4e 61 6d 65  ponding to zName
1b0a0 20 2a 2f 0a 20 20 20 20 53 65 6c 65 63 74 20 2a   */.    Select *
1b0b0 70 53 65 6c 65 63 74 3b 20 20 2f 2a 20 41 20 53  pSelect;  /* A S
1b0c0 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 20  ELECT statement 
1b0d0 75 73 65 64 20 69 6e 20 70 6c 61 63 65 20 6f 66  used in place of
1b0e0 20 61 20 74 61 62 6c 65 20 6e 61 6d 65 20 2a 2f   a table name */
1b0f0 0a 20 20 20 20 69 6e 74 20 61 64 64 72 46 69 6c  .    int addrFil
1b100 6c 53 75 62 3b 20 20 2f 2a 20 41 64 64 72 65 73  lSub;  /* Addres
1b110 73 20 6f 66 20 73 75 62 72 6f 75 74 69 6e 65 20  s of subroutine 
1b120 74 6f 20 6d 61 6e 69 66 65 73 74 20 61 20 73 75  to manifest a su
1b130 62 71 75 65 72 79 20 2a 2f 0a 20 20 20 20 69 6e  bquery */.    in
1b140 74 20 72 65 67 52 65 74 75 72 6e 3b 20 20 20 20  t regReturn;    
1b150 2f 2a 20 52 65 67 69 73 74 65 72 20 68 6f 6c 64  /* Register hold
1b160 69 6e 67 20 72 65 74 75 72 6e 20 61 64 64 72 65  ing return addre
1b170 73 73 20 6f 66 20 61 64 64 72 46 69 6c 6c 53 75  ss of addrFillSu
1b180 62 20 2a 2f 0a 20 20 20 20 69 6e 74 20 72 65 67  b */.    int reg
1b190 52 65 73 75 6c 74 3b 20 20 20 20 2f 2a 20 52 65  Result;    /* Re
1b1a0 67 69 73 74 65 72 73 20 68 6f 6c 64 69 6e 67 20  gisters holding 
1b1b0 72 65 73 75 6c 74 73 20 6f 66 20 61 20 63 6f 2d  results of a co-
1b1c0 72 6f 75 74 69 6e 65 20 2a 2f 0a 20 20 20 20 73  routine */.    s
1b1d0 74 72 75 63 74 20 7b 0a 20 20 20 20 20 20 75 38  truct {.      u8
1b1e0 20 6a 6f 69 6e 74 79 70 65 3b 20 20 20 20 20 20   jointype;      
1b1f0 2f 2a 20 54 79 70 65 20 6f 66 20 6a 6f 69 6e 20  /* Type of join 
1b200 62 65 74 77 65 65 6e 20 74 68 69 73 20 74 61 62  between this tab
1b210 6c 65 20 61 6e 64 20 74 68 65 20 70 72 65 76 69  le and the previ
1b220 6f 75 73 20 2a 2f 0a 20 20 20 20 20 20 75 6e 73  ous */.      uns
1b230 69 67 6e 65 64 20 6e 6f 74 49 6e 64 65 78 65 64  igned notIndexed
1b240 20 3a 31 3b 20 20 20 20 2f 2a 20 54 72 75 65 20   :1;    /* True 
1b250 69 66 20 74 68 65 72 65 20 69 73 20 61 20 4e 4f  if there is a NO
1b260 54 20 49 4e 44 45 58 45 44 20 63 6c 61 75 73 65  T INDEXED clause
1b270 20 2a 2f 0a 20 20 20 20 20 20 75 6e 73 69 67 6e   */.      unsign
1b280 65 64 20 69 73 49 6e 64 65 78 65 64 42 79 20 3a  ed isIndexedBy :
1b290 31 3b 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20  1;   /* True if 
1b2a0 74 68 65 72 65 20 69 73 20 61 6e 20 49 4e 44 45  there is an INDE
1b2b0 58 45 44 20 42 59 20 63 6c 61 75 73 65 20 2a 2f  XED BY clause */
1b2c0 0a 20 20 20 20 20 20 75 6e 73 69 67 6e 65 64 20  .      unsigned 
1b2d0 69 73 54 61 62 46 75 6e 63 20 3a 31 3b 20 20 20  isTabFunc :1;   
1b2e0 20 20 2f 2a 20 54 72 75 65 20 69 66 20 74 61 62    /* True if tab
1b2f0 6c 65 2d 76 61 6c 75 65 64 2d 66 75 6e 63 74 69  le-valued-functi
1b300 6f 6e 20 73 79 6e 74 61 78 20 2a 2f 0a 20 20 20  on syntax */.   
1b310 20 20 20 75 6e 73 69 67 6e 65 64 20 69 73 43 6f     unsigned isCo
1b320 72 72 65 6c 61 74 65 64 20 3a 31 3b 20 20 2f 2a  rrelated :1;  /*
1b330 20 54 72 75 65 20 69 66 20 73 75 62 2d 71 75 65   True if sub-que
1b340 72 79 20 69 73 20 63 6f 72 72 65 6c 61 74 65 64  ry is correlated
1b350 20 2a 2f 0a 20 20 20 20 20 20 75 6e 73 69 67 6e   */.      unsign
1b360 65 64 20 76 69 61 43 6f 72 6f 75 74 69 6e 65 20  ed viaCoroutine 
1b370 3a 31 3b 20 20 2f 2a 20 49 6d 70 6c 65 6d 65 6e  :1;  /* Implemen
1b380 74 65 64 20 61 73 20 61 20 63 6f 2d 72 6f 75 74  ted as a co-rout
1b390 69 6e 65 20 2a 2f 0a 20 20 20 20 20 20 75 6e 73  ine */.      uns
1b3a0 69 67 6e 65 64 20 69 73 52 65 63 75 72 73 69 76  igned isRecursiv
1b3b0 65 20 3a 31 3b 20 20 20 2f 2a 20 54 72 75 65 20  e :1;   /* True 
1b3c0 66 6f 72 20 72 65 63 75 72 73 69 76 65 20 72 65  for recursive re
1b3d0 66 65 72 65 6e 63 65 20 69 6e 20 57 49 54 48 20  ference in WITH 
1b3e0 2a 2f 0a 20 20 20 20 7d 20 66 67 3b 0a 20 20 20  */.    } fg;.   
1b3f0 20 69 6e 74 20 69 43 75 72 73 6f 72 3b 20 20 20   int iCursor;   
1b400 20 20 20 2f 2a 20 54 68 65 20 56 44 42 45 20 63     /* The VDBE c
1b410 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 75 73 65  ursor number use
1b420 64 20 74 6f 20 61 63 63 65 73 73 20 74 68 69 73  d to access this
1b430 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20 45 78   table */.    Ex
1b440 70 72 20 2a 70 4f 6e 3b 20 20 20 20 20 20 20 20  pr *pOn;        
1b450 2f 2a 20 54 68 65 20 4f 4e 20 63 6c 61 75 73 65  /* The ON clause
1b460 20 6f 66 20 61 20 6a 6f 69 6e 20 2a 2f 0a 20 20   of a join */.  
1b470 20 20 49 64 4c 69 73 74 20 2a 70 55 73 69 6e 67    IdList *pUsing
1b480 3b 20 20 20 2f 2a 20 54 68 65 20 55 53 49 4e 47  ;   /* The USING
1b490 20 63 6c 61 75 73 65 20 6f 66 20 61 20 6a 6f 69   clause of a joi
1b4a0 6e 20 2a 2f 0a 20 20 20 20 42 69 74 6d 61 73 6b  n */.    Bitmask
1b4b0 20 63 6f 6c 55 73 65 64 3b 20 20 2f 2a 20 42 69   colUsed;  /* Bi
1b4c0 74 20 4e 20 28 31 3c 3c 4e 29 20 73 65 74 20 69  t N (1<<N) set i
1b4d0 66 20 63 6f 6c 75 6d 6e 20 4e 20 6f 66 20 70 54  f column N of pT
1b4e0 61 62 20 69 73 20 75 73 65 64 20 2a 2f 0a 20 20  ab is used */.  
1b4f0 20 20 75 6e 69 6f 6e 20 7b 0a 20 20 20 20 20 20    union {.      
1b500 63 68 61 72 20 2a 7a 49 6e 64 65 78 65 64 42 79  char *zIndexedBy
1b510 3b 20 20 20 20 2f 2a 20 49 64 65 6e 74 69 66 69  ;    /* Identifi
1b520 65 72 20 66 72 6f 6d 20 22 49 4e 44 45 58 45 44  er from "INDEXED
1b530 20 42 59 20 3c 7a 49 6e 64 65 78 3e 22 20 63 6c   BY <zIndex>" cl
1b540 61 75 73 65 20 2a 2f 0a 20 20 20 20 20 20 45 78  ause */.      Ex
1b550 70 72 4c 69 73 74 20 2a 70 46 75 6e 63 41 72 67  prList *pFuncArg
1b560 3b 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74 73 20  ;  /* Arguments 
1b570 74 6f 20 74 61 62 6c 65 2d 76 61 6c 75 65 64 2d  to table-valued-
1b580 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 20 20  function */.    
1b590 7d 20 75 31 3b 0a 20 20 20 20 49 6e 64 65 78 20  } u1;.    Index 
1b5a0 2a 70 49 42 49 6e 64 65 78 3b 20 20 2f 2a 20 49  *pIBIndex;  /* I
1b5b0 6e 64 65 78 20 73 74 72 75 63 74 75 72 65 20 63  ndex structure c
1b5c0 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 74 6f 20  orresponding to 
1b5d0 75 31 2e 7a 49 6e 64 65 78 65 64 42 79 20 2a 2f  u1.zIndexedBy */
1b5e0 0a 20 20 7d 20 61 5b 31 5d 3b 20 20 20 20 20 20  .  } a[1];      
1b5f0 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20 65 6e         /* One en
1b600 74 72 79 20 66 6f 72 20 65 61 63 68 20 69 64 65  try for each ide
1b610 6e 74 69 66 69 65 72 20 6f 6e 20 74 68 65 20 6c  ntifier on the l
1b620 69 73 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  ist */.};../*.**
1b630 20 50 65 72 6d 69 74 74 65 64 20 76 61 6c 75 65   Permitted value
1b640 73 20 6f 66 20 74 68 65 20 53 72 63 4c 69 73 74  s of the SrcList
1b650 2e 61 2e 6a 6f 69 6e 74 79 70 65 20 66 69 65 6c  .a.jointype fiel
1b660 64 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f  d.*/.#define JT_
1b670 49 4e 4e 45 52 20 20 20 20 20 30 78 30 30 30 31  INNER     0x0001
1b680 20 20 20 20 2f 2a 20 41 6e 79 20 6b 69 6e 64 20      /* Any kind 
1b690 6f 66 20 69 6e 6e 65 72 20 6f 72 20 63 72 6f 73  of inner or cros
1b6a0 73 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66 69 6e  s join */.#defin
1b6b0 65 20 4a 54 5f 43 52 4f 53 53 20 20 20 20 20 30  e JT_CROSS     0
1b6c0 78 30 30 30 32 20 20 20 20 2f 2a 20 45 78 70 6c  x0002    /* Expl
1b6d0 69 63 69 74 20 75 73 65 20 6f 66 20 74 68 65 20  icit use of the 
1b6e0 43 52 4f 53 53 20 6b 65 79 77 6f 72 64 20 2a 2f  CROSS keyword */
1b6f0 0a 23 64 65 66 69 6e 65 20 4a 54 5f 4e 41 54 55  .#define JT_NATU
1b700 52 41 4c 20 20 20 30 78 30 30 30 34 20 20 20 20  RAL   0x0004    
1b710 2f 2a 20 54 72 75 65 20 66 6f 72 20 61 20 22 6e  /* True for a "n
1b720 61 74 75 72 61 6c 22 20 6a 6f 69 6e 20 2a 2f 0a  atural" join */.
1b730 23 64 65 66 69 6e 65 20 4a 54 5f 4c 45 46 54 20  #define JT_LEFT 
1b740 20 20 20 20 20 30 78 30 30 30 38 20 20 20 20 2f       0x0008    /
1b750 2a 20 4c 65 66 74 20 6f 75 74 65 72 20 6a 6f 69  * Left outer joi
1b760 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f  n */.#define JT_
1b770 52 49 47 48 54 20 20 20 20 20 30 78 30 30 31 30  RIGHT     0x0010
1b780 20 20 20 20 2f 2a 20 52 69 67 68 74 20 6f 75 74      /* Right out
1b790 65 72 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66 69  er join */.#defi
1b7a0 6e 65 20 4a 54 5f 4f 55 54 45 52 20 20 20 20 20  ne JT_OUTER     
1b7b0 30 78 30 30 32 30 20 20 20 20 2f 2a 20 54 68 65  0x0020    /* The
1b7c0 20 22 4f 55 54 45 52 22 20 6b 65 79 77 6f 72 64   "OUTER" keyword
1b7d0 20 69 73 20 70 72 65 73 65 6e 74 20 2a 2f 0a 23   is present */.#
1b7e0 64 65 66 69 6e 65 20 4a 54 5f 45 52 52 4f 52 20  define JT_ERROR 
1b7f0 20 20 20 20 30 78 30 30 34 30 20 20 20 20 2f 2a      0x0040    /*
1b800 20 75 6e 6b 6e 6f 77 6e 20 6f 72 20 75 6e 73 75   unknown or unsu
1b810 70 70 6f 72 74 65 64 20 6a 6f 69 6e 20 74 79 70  pported join typ
1b820 65 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 46 6c 61  e */.../*.** Fla
1b830 67 73 20 61 70 70 72 6f 70 72 69 61 74 65 20 66  gs appropriate f
1b840 6f 72 20 74 68 65 20 77 63 74 72 6c 46 6c 61 67  or the wctrlFlag
1b850 73 20 70 61 72 61 6d 65 74 65 72 20 6f 66 20 73  s parameter of s
1b860 71 6c 69 74 65 33 57 68 65 72 65 42 65 67 69 6e  qlite3WhereBegin
1b870 28 29 0a 2a 2a 20 61 6e 64 20 74 68 65 20 57 68  ().** and the Wh
1b880 65 72 65 49 6e 66 6f 2e 77 63 74 72 6c 46 6c 61  ereInfo.wctrlFla
1b890 67 73 20 6d 65 6d 62 65 72 2e 0a 2a 2a 0a 2a 2a  gs member..**.**
1b8a0 20 56 61 6c 75 65 20 63 6f 6e 73 74 72 61 69 6e   Value constrain
1b8b0 74 73 20 28 65 6e 66 6f 72 63 65 64 20 76 69 61  ts (enforced via
1b8c0 20 61 73 73 65 72 74 28 29 29 3a 0a 2a 2a 20 20   assert()):.**  
1b8d0 20 20 20 57 48 45 52 45 5f 55 53 45 5f 4c 49 4d     WHERE_USE_LIM
1b8e0 49 54 20 20 3d 3d 20 53 46 5f 46 69 78 65 64 4c  IT  == SF_FixedL
1b8f0 69 6d 69 74 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  imit.*/.#define 
1b900 57 48 45 52 45 5f 4f 52 44 45 52 42 59 5f 4e 4f  WHERE_ORDERBY_NO
1b910 52 4d 41 4c 20 20 20 30 78 30 30 30 30 20 2f 2a  RMAL   0x0000 /*
1b920 20 4e 6f 2d 6f 70 20 2a 2f 0a 23 64 65 66 69 6e   No-op */.#defin
1b930 65 20 57 48 45 52 45 5f 4f 52 44 45 52 42 59 5f  e WHERE_ORDERBY_
1b940 4d 49 4e 20 20 20 20 20 20 30 78 30 30 30 31 20  MIN      0x0001 
1b950 2f 2a 20 4f 52 44 45 52 20 42 59 20 70 72 6f 63  /* ORDER BY proc
1b960 65 73 73 69 6e 67 20 66 6f 72 20 6d 69 6e 28 29  essing for min()
1b970 20 66 75 6e 63 20 2a 2f 0a 23 64 65 66 69 6e 65   func */.#define
1b980 20 57 48 45 52 45 5f 4f 52 44 45 52 42 59 5f 4d   WHERE_ORDERBY_M
1b990 41 58 20 20 20 20 20 20 30 78 30 30 30 32 20 2f  AX      0x0002 /
1b9a0 2a 20 4f 52 44 45 52 20 42 59 20 70 72 6f 63 65  * ORDER BY proce
1b9b0 73 73 69 6e 67 20 66 6f 72 20 6d 61 78 28 29 20  ssing for max() 
1b9c0 66 75 6e 63 20 2a 2f 0a 23 64 65 66 69 6e 65 20  func */.#define 
1b9d0 57 48 45 52 45 5f 4f 4e 45 50 41 53 53 5f 44 45  WHERE_ONEPASS_DE
1b9e0 53 49 52 45 44 20 20 30 78 30 30 30 34 20 2f 2a  SIRED  0x0004 /*
1b9f0 20 57 61 6e 74 20 74 6f 20 64 6f 20 6f 6e 65 2d   Want to do one-
1ba00 70 61 73 73 20 55 50 44 41 54 45 2f 44 45 4c 45  pass UPDATE/DELE
1ba10 54 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48  TE */.#define WH
1ba20 45 52 45 5f 4f 4e 45 50 41 53 53 5f 4d 55 4c 54  ERE_ONEPASS_MULT
1ba30 49 52 4f 57 20 30 78 30 30 30 38 20 2f 2a 20 4f  IROW 0x0008 /* O
1ba40 4e 45 50 41 53 53 20 69 73 20 6f 6b 20 77 69 74  NEPASS is ok wit
1ba50 68 20 6d 75 6c 74 69 70 6c 65 20 72 6f 77 73 20  h multiple rows 
1ba60 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45  */.#define WHERE
1ba70 5f 44 55 50 4c 49 43 41 54 45 53 5f 4f 4b 20 20  _DUPLICATES_OK  
1ba80 20 20 30 78 30 30 31 30 20 2f 2a 20 4f 6b 20 74    0x0010 /* Ok t
1ba90 6f 20 72 65 74 75 72 6e 20 61 20 72 6f 77 20 6d  o return a row m
1baa0 6f 72 65 20 74 68 61 6e 20 6f 6e 63 65 20 2a 2f  ore than once */
1bab0 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 4f  .#define WHERE_O
1bac0 52 5f 53 55 42 43 4c 41 55 53 45 20 20 20 20 20  R_SUBCLAUSE     
1bad0 30 78 30 30 32 30 20 2f 2a 20 50 72 6f 63 65 73  0x0020 /* Proces
1bae0 73 69 6e 67 20 61 20 73 75 62 2d 57 48 45 52 45  sing a sub-WHERE
1baf0 20 61 73 20 70 61 72 74 20 6f 66 0a 20 20 20 20   as part of.    
1bb00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bb10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bb20 20 20 2a 2a 20 74 68 65 20 4f 52 20 6f 70 74 69    ** the OR opti
1bb30 6d 69 7a 61 74 69 6f 6e 20 20 2a 2f 0a 23 64 65  mization  */.#de
1bb40 66 69 6e 65 20 57 48 45 52 45 5f 47 52 4f 55 50  fine WHERE_GROUP
1bb50 42 59 20 20 20 20 20 20 20 20 20 20 30 78 30 30  BY          0x00
1bb60 34 30 20 2f 2a 20 70 4f 72 64 65 72 42 79 20 69  40 /* pOrderBy i
1bb70 73 20 72 65 61 6c 6c 79 20 61 20 47 52 4f 55 50  s really a GROUP
1bb80 20 42 59 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57   BY */.#define W
1bb90 48 45 52 45 5f 44 49 53 54 49 4e 43 54 42 59 20  HERE_DISTINCTBY 
1bba0 20 20 20 20 20 20 30 78 30 30 38 30 20 2f 2a 20        0x0080 /* 
1bbb0 70 4f 72 64 65 72 62 79 20 69 73 20 72 65 61 6c  pOrderby is real
1bbc0 6c 79 20 61 20 44 49 53 54 49 4e 43 54 20 63 6c  ly a DISTINCT cl
1bbd0 61 75 73 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ause */.#define 
1bbe0 57 48 45 52 45 5f 57 41 4e 54 5f 44 49 53 54 49  WHERE_WANT_DISTI
1bbf0 4e 43 54 20 20 20 20 30 78 30 31 30 30 20 2f 2a  NCT    0x0100 /*
1bc00 20 41 6c 6c 20 6f 75 74 70 75 74 20 6e 65 65 64   All output need
1bc10 73 20 74 6f 20 62 65 20 64 69 73 74 69 6e 63 74  s to be distinct
1bc20 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52   */.#define WHER
1bc30 45 5f 53 4f 52 54 42 59 47 52 4f 55 50 20 20 20  E_SORTBYGROUP   
1bc40 20 20 20 30 78 30 32 30 30 20 2f 2a 20 53 75 70     0x0200 /* Sup
1bc50 70 6f 72 74 20 73 71 6c 69 74 65 33 57 68 65 72  port sqlite3Wher
1bc60 65 49 73 53 6f 72 74 65 64 28 29 20 2a 2f 0a 23  eIsSorted() */.#
1bc70 64 65 66 69 6e 65 20 57 48 45 52 45 5f 53 45 45  define WHERE_SEE
1bc80 4b 5f 54 41 42 4c 45 20 20 20 20 20 20 20 30 78  K_TABLE       0x
1bc90 30 34 30 30 20 2f 2a 20 44 6f 20 6e 6f 74 20 64  0400 /* Do not d
1bca0 65 66 65 72 20 73 65 65 6b 73 20 6f 6e 20 6d 61  efer seeks on ma
1bcb0 69 6e 20 74 61 62 6c 65 20 2a 2f 0a 23 64 65 66  in table */.#def
1bcc0 69 6e 65 20 57 48 45 52 45 5f 4f 52 44 45 52 42  ine WHERE_ORDERB
1bcd0 59 5f 4c 49 4d 49 54 20 20 20 20 30 78 30 38 30  Y_LIMIT    0x080
1bce0 30 20 2f 2a 20 4f 52 44 45 52 42 59 2b 4c 49 4d  0 /* ORDERBY+LIM
1bcf0 49 54 20 6f 6e 20 74 68 65 20 69 6e 6e 65 72 20  IT on the inner 
1bd00 6c 6f 6f 70 20 2a 2f 0a 23 64 65 66 69 6e 65 20  loop */.#define 
1bd10 57 48 45 52 45 5f 53 45 45 4b 5f 55 4e 49 51 5f  WHERE_SEEK_UNIQ_
1bd20 54 41 42 4c 45 20 20 30 78 31 30 30 30 20 2f 2a  TABLE  0x1000 /*
1bd30 20 44 6f 20 6e 6f 74 20 64 65 66 65 72 20 73 65   Do not defer se
1bd40 65 6b 73 20 69 66 20 75 6e 69 71 75 65 20 2a 2f  eks if unique */
1bd50 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1bd60 20 20 20 20 20 20 20 20 20 2f 2a 20 20 20 20 20           /*     
1bd70 30 78 32 30 30 30 20 20 20 20 6e 6f 74 20 63 75  0x2000    not cu
1bd80 72 72 65 6e 74 6c 79 20 75 73 65 64 20 2a 2f 0a  rrently used */.
1bd90 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 55 53  #define WHERE_US
1bda0 45 5f 4c 49 4d 49 54 20 20 20 20 20 20 20 20 30  E_LIMIT        0
1bdb0 78 34 30 30 30 20 2f 2a 20 55 73 65 20 74 68 65  x4000 /* Use the
1bdc0 20 4c 49 4d 49 54 20 69 6e 20 63 6f 73 74 20 65   LIMIT in cost e
1bdd0 73 74 69 6d 61 74 65 73 20 2a 2f 0a 20 20 20 20  stimates */.    
1bde0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bdf0 20 20 20 20 2f 2a 20 20 20 20 20 30 78 38 30 30      /*     0x800
1be00 30 20 20 20 20 6e 6f 74 20 63 75 72 72 65 6e 74  0    not current
1be10 6c 79 20 75 73 65 64 20 2a 2f 0a 0a 2f 2a 20 41  ly used */../* A
1be20 6c 6c 6f 77 65 64 20 72 65 74 75 72 6e 20 76 61  llowed return va
1be30 6c 75 65 73 20 66 72 6f 6d 20 73 71 6c 69 74 65  lues from sqlite
1be40 33 57 68 65 72 65 49 73 44 69 73 74 69 6e 63 74  3WhereIsDistinct
1be50 28 29 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48  ().*/.#define WH
1be60 45 52 45 5f 44 49 53 54 49 4e 43 54 5f 4e 4f 4f  ERE_DISTINCT_NOO
1be70 50 20 20 20 20 20 20 30 20 20 2f 2a 20 44 49 53  P      0  /* DIS
1be80 54 49 4e 43 54 20 6b 65 79 77 6f 72 64 20 6e 6f  TINCT keyword no
1be90 74 20 75 73 65 64 20 2a 2f 0a 23 64 65 66 69 6e  t used */.#defin
1bea0 65 20 57 48 45 52 45 5f 44 49 53 54 49 4e 43 54  e WHERE_DISTINCT
1beb0 5f 55 4e 49 51 55 45 20 20 20 20 31 20 20 2f 2a  _UNIQUE    1  /*
1bec0 20 4e 6f 20 64 75 70 6c 69 63 61 74 65 73 20 2a   No duplicates *
1bed0 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f  /.#define WHERE_
1bee0 44 49 53 54 49 4e 43 54 5f 4f 52 44 45 52 45 44  DISTINCT_ORDERED
1bef0 20 20 20 32 20 20 2f 2a 20 41 6c 6c 20 64 75 70     2  /* All dup
1bf00 6c 69 63 61 74 65 73 20 61 72 65 20 61 64 6a 61  licates are adja
1bf10 63 65 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20  cent */.#define 
1bf20 57 48 45 52 45 5f 44 49 53 54 49 4e 43 54 5f 55  WHERE_DISTINCT_U
1bf30 4e 4f 52 44 45 52 45 44 20 33 20 20 2f 2a 20 44  NORDERED 3  /* D
1bf40 75 70 6c 69 63 61 74 65 73 20 61 72 65 20 73 63  uplicates are sc
1bf50 61 74 74 65 72 65 64 20 2a 2f 0a 0a 2f 2a 0a 2a  attered */../*.*
1bf60 2a 20 41 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20  * A NameContext 
1bf70 64 65 66 69 6e 65 73 20 61 20 63 6f 6e 74 65 78  defines a contex
1bf80 74 20 69 6e 20 77 68 69 63 68 20 74 6f 20 72 65  t in which to re
1bf90 73 6f 6c 76 65 20 74 61 62 6c 65 20 61 6e 64 20  solve table and 
1bfa0 63 6f 6c 75 6d 6e 0a 2a 2a 20 6e 61 6d 65 73 2e  column.** names.
1bfb0 20 20 54 68 65 20 63 6f 6e 74 65 78 74 20 63 6f    The context co
1bfc0 6e 73 69 73 74 73 20 6f 66 20 61 20 6c 69 73 74  nsists of a list
1bfd0 20 6f 66 20 74 61 62 6c 65 73 20 28 74 68 65 20   of tables (the 
1bfe0 70 53 72 63 4c 69 73 74 29 20 66 69 65 6c 64 20  pSrcList) field 
1bff0 61 6e 64 0a 2a 2a 20 61 20 6c 69 73 74 20 6f 66  and.** a list of
1c000 20 6e 61 6d 65 64 20 65 78 70 72 65 73 73 69 6f   named expressio
1c010 6e 20 28 70 45 4c 69 73 74 29 2e 20 20 54 68 65  n (pEList).  The
1c020 20 6e 61 6d 65 64 20 65 78 70 72 65 73 73 69 6f   named expressio
1c030 6e 20 6c 69 73 74 20 6d 61 79 0a 2a 2a 20 62 65  n list may.** be
1c040 20 4e 55 4c 4c 2e 20 20 54 68 65 20 70 53 72 63   NULL.  The pSrc
1c050 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20   corresponds to 
1c060 74 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 20  the FROM clause 
1c070 6f 66 20 61 20 53 45 4c 45 43 54 20 6f 72 0a 2a  of a SELECT or.*
1c080 2a 20 74 6f 20 74 68 65 20 74 61 62 6c 65 20 62  * to the table b
1c090 65 69 6e 67 20 6f 70 65 72 61 74 65 64 20 6f 6e  eing operated on
1c0a0 20 62 79 20 49 4e 53 45 52 54 2c 20 55 50 44 41   by INSERT, UPDA
1c0b0 54 45 2c 20 6f 72 20 44 45 4c 45 54 45 2e 20 20  TE, or DELETE.  
1c0c0 54 68 65 0a 2a 2a 20 70 45 4c 69 73 74 20 63 6f  The.** pEList co
1c0d0 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 74 68 65  rresponds to the
1c0e0 20 72 65 73 75 6c 74 20 73 65 74 20 6f 66 20 61   result set of a
1c0f0 20 53 45 4c 45 43 54 20 61 6e 64 20 69 73 20 4e   SELECT and is N
1c100 55 4c 4c 20 66 6f 72 0a 2a 2a 20 6f 74 68 65 72  ULL for.** other
1c110 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a 2a 2a 0a   statements..**.
1c120 2a 2a 20 4e 61 6d 65 43 6f 6e 74 65 78 74 73 20  ** NameContexts 
1c130 63 61 6e 20 62 65 20 6e 65 73 74 65 64 2e 20 20  can be nested.  
1c140 57 68 65 6e 20 72 65 73 6f 6c 76 69 6e 67 20 6e  When resolving n
1c150 61 6d 65 73 2c 20 74 68 65 20 69 6e 6e 65 72 2d  ames, the inner-
1c160 6d 6f 73 74 0a 2a 2a 20 63 6f 6e 74 65 78 74 20  most.** context 
1c170 69 73 20 73 65 61 72 63 68 65 64 20 66 69 72 73  is searched firs
1c180 74 2e 20 20 49 66 20 6e 6f 20 6d 61 74 63 68 20  t.  If no match 
1c190 69 73 20 66 6f 75 6e 64 2c 20 74 68 65 20 6e 65  is found, the ne
1c1a0 78 74 20 6f 75 74 65 72 0a 2a 2a 20 63 6f 6e 74  xt outer.** cont
1c1b0 65 78 74 20 69 73 20 63 68 65 63 6b 65 64 2e 20  ext is checked. 
1c1c0 20 49 66 20 74 68 65 72 65 20 69 73 20 73 74 69   If there is sti
1c1d0 6c 6c 20 6e 6f 20 6d 61 74 63 68 2c 20 74 68 65  ll no match, the
1c1e0 20 6e 65 78 74 20 63 6f 6e 74 65 78 74 0a 2a 2a   next context.**
1c1f0 20 69 73 20 63 68 65 63 6b 65 64 2e 20 20 54 68   is checked.  Th
1c200 69 73 20 70 72 6f 63 65 73 73 20 63 6f 6e 74 69  is process conti
1c210 6e 75 65 73 20 75 6e 74 69 6c 20 65 69 74 68 65  nues until eithe
1c220 72 20 61 20 6d 61 74 63 68 20 69 73 20 66 6f 75  r a match is fou
1c230 6e 64 0a 2a 2a 20 6f 72 20 61 6c 6c 20 63 6f 6e  nd.** or all con
1c240 74 65 78 74 73 20 61 72 65 20 63 68 65 63 6b 2e  texts are check.
1c250 20 20 57 68 65 6e 20 61 20 6d 61 74 63 68 20 69    When a match i
1c260 73 20 66 6f 75 6e 64 2c 20 74 68 65 20 6e 52 65  s found, the nRe
1c270 66 20 6d 65 6d 62 65 72 20 6f 66 0a 2a 2a 20 74  f member of.** t
1c280 68 65 20 63 6f 6e 74 65 78 74 20 63 6f 6e 74 61  he context conta
1c290 69 6e 69 6e 67 20 74 68 65 20 6d 61 74 63 68 20  ining the match 
1c2a0 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 2e 0a  is incremented..
1c2b0 2a 2a 0a 2a 2a 20 45 61 63 68 20 73 75 62 71 75  **.** Each subqu
1c2c0 65 72 79 20 67 65 74 73 20 61 20 6e 65 77 20 4e  ery gets a new N
1c2d0 61 6d 65 43 6f 6e 74 65 78 74 2e 20 20 54 68 65  ameContext.  The
1c2e0 20 70 4e 65 78 74 20 66 69 65 6c 64 20 70 6f 69   pNext field poi
1c2f0 6e 74 73 20 74 6f 20 74 68 65 0a 2a 2a 20 4e 61  nts to the.** Na
1c300 6d 65 43 6f 6e 74 65 78 74 20 69 6e 20 74 68 65  meContext in the
1c310 20 70 61 72 65 6e 74 20 71 75 65 72 79 2e 20 20   parent query.  
1c320 54 68 75 73 20 74 68 65 20 70 72 6f 63 65 73 73  Thus the process
1c330 20 6f 66 20 73 63 61 6e 6e 69 6e 67 20 74 68 65   of scanning the
1c340 0a 2a 2a 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20  .** NameContext 
1c350 6c 69 73 74 20 63 6f 72 72 65 73 70 6f 6e 64 73  list corresponds
1c360 20 74 6f 20 73 65 61 72 63 68 69 6e 67 20 74 68   to searching th
1c370 72 6f 75 67 68 20 73 75 63 63 65 73 73 69 76 65  rough successive
1c380 6c 79 20 6f 75 74 65 72 0a 2a 2a 20 73 75 62 71  ly outer.** subq
1c390 75 65 72 69 65 73 20 6c 6f 6f 6b 69 6e 67 20 66  ueries looking f
1c3a0 6f 72 20 61 20 6d 61 74 63 68 2e 0a 2a 2f 0a 73  or a match..*/.s
1c3b0 74 72 75 63 74 20 4e 61 6d 65 43 6f 6e 74 65 78  truct NameContex
1c3c0 74 20 7b 0a 20 20 50 61 72 73 65 20 2a 70 50 61  t {.  Parse *pPa
1c3d0 72 73 65 3b 20 20 20 20 20 20 20 2f 2a 20 54 68  rse;       /* Th
1c3e0 65 20 70 61 72 73 65 72 20 2a 2f 0a 20 20 53 72  e parser */.  Sr
1c3f0 63 4c 69 73 74 20 2a 70 53 72 63 4c 69 73 74 3b  cList *pSrcList;
1c400 20 20 20 2f 2a 20 4f 6e 65 20 6f 72 20 6d 6f 72     /* One or mor
1c410 65 20 74 61 62 6c 65 73 20 75 73 65 64 20 74 6f  e tables used to
1c420 20 72 65 73 6f 6c 76 65 20 6e 61 6d 65 73 20 2a   resolve names *
1c430 2f 0a 20 20 75 6e 69 6f 6e 20 7b 0a 20 20 20 20  /.  union {.    
1c440 45 78 70 72 4c 69 73 74 20 2a 70 45 4c 69 73 74  ExprList *pEList
1c450 3b 20 20 20 20 2f 2a 20 4f 70 74 69 6f 6e 61 6c  ;    /* Optional
1c460 20 6c 69 73 74 20 6f 66 20 72 65 73 75 6c 74 2d   list of result-
1c470 73 65 74 20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 20  set columns */. 
1c480 20 20 20 41 67 67 49 6e 66 6f 20 2a 70 41 67 67     AggInfo *pAgg
1c490 49 6e 66 6f 3b 20 20 20 2f 2a 20 49 6e 66 6f 72  Info;   /* Infor
1c4a0 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 61 67 67  mation about agg
1c4b0 72 65 67 61 74 65 73 20 61 74 20 74 68 69 73 20  regates at this 
1c4c0 6c 65 76 65 6c 20 2a 2f 0a 20 20 20 20 55 70 73  level */.    Ups
1c4d0 65 72 74 20 2a 70 55 70 73 65 72 74 3b 20 20 20  ert *pUpsert;   
1c4e0 20 20 2f 2a 20 4f 4e 20 43 4f 4e 46 4c 49 43 54    /* ON CONFLICT
1c4f0 20 63 6c 61 75 73 65 20 69 6e 66 6f 72 6d 61 74   clause informat
1c500 69 6f 6e 20 66 72 6f 6d 20 61 6e 20 75 70 73 65  ion from an upse
1c510 72 74 20 2a 2f 0a 20 20 7d 20 75 4e 43 3b 0a 20  rt */.  } uNC;. 
1c520 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20 2a 70 4e   NameContext *pN
1c530 65 78 74 3b 20 20 2f 2a 20 4e 65 78 74 20 6f 75  ext;  /* Next ou
1c540 74 65 72 20 6e 61 6d 65 20 63 6f 6e 74 65 78 74  ter name context
1c550 2e 20 20 4e 55 4c 4c 20 66 6f 72 20 6f 75 74 65  .  NULL for oute
1c560 72 6d 6f 73 74 20 2a 2f 0a 20 20 69 6e 74 20 6e  rmost */.  int n
1c570 52 65 66 3b 20 20 20 20 20 20 20 20 20 20 20 20  Ref;            
1c580 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6e 61 6d  /* Number of nam
1c590 65 73 20 72 65 73 6f 6c 76 65 64 20 62 79 20 74  es resolved by t
1c5a0 68 69 73 20 63 6f 6e 74 65 78 74 20 2a 2f 0a 20  his context */. 
1c5b0 20 69 6e 74 20 6e 45 72 72 3b 20 20 20 20 20 20   int nErr;      
1c5c0 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
1c5d0 6f 66 20 65 72 72 6f 72 73 20 65 6e 63 6f 75 6e  of errors encoun
1c5e0 74 65 72 65 64 20 77 68 69 6c 65 20 72 65 73 6f  tered while reso
1c5f0 6c 76 69 6e 67 20 6e 61 6d 65 73 20 2a 2f 0a 20  lving names */. 
1c600 20 75 31 36 20 6e 63 46 6c 61 67 73 3b 20 20 20   u16 ncFlags;   
1c610 20 20 20 20 20 20 2f 2a 20 5a 65 72 6f 20 6f 72        /* Zero or
1c620 20 6d 6f 72 65 20 4e 43 5f 2a 20 66 6c 61 67 73   more NC_* flags
1c630 20 64 65 66 69 6e 65 64 20 62 65 6c 6f 77 20 2a   defined below *
1c640 2f 0a 20 20 53 65 6c 65 63 74 20 2a 70 57 69 6e  /.  Select *pWin
1c650 53 65 6c 65 63 74 3b 20 20 2f 2a 20 53 45 4c 45  Select;  /* SELE
1c660 43 54 20 73 74 61 74 65 6d 65 6e 74 20 66 6f 72  CT statement for
1c670 20 61 6e 79 20 77 69 6e 64 6f 77 20 66 75 6e 63   any window func
1c680 74 69 6f 6e 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a  tions */.};../*.
1c690 2a 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65  ** Allowed value
1c6a0 73 20 66 6f 72 20 74 68 65 20 4e 61 6d 65 43 6f  s for the NameCo
1c6b0 6e 74 65 78 74 2c 20 6e 63 46 6c 61 67 73 20 66  ntext, ncFlags f
1c6c0 69 65 6c 64 2e 0a 2a 2a 0a 2a 2a 20 56 61 6c 75  ield..**.** Valu
1c6d0 65 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 28 61  e constraints (a
1c6e0 6c 6c 20 63 68 65 63 6b 65 64 20 76 69 61 20 61  ll checked via a
1c6f0 73 73 65 72 74 28 29 29 3a 0a 2a 2a 20 20 20 20  ssert()):.**    
1c700 4e 43 5f 48 61 73 41 67 67 20 20 20 20 3d 3d 20  NC_HasAgg    == 
1c710 53 46 5f 48 61 73 41 67 67 0a 2a 2a 20 20 20 20  SF_HasAgg.**    
1c720 4e 43 5f 4d 69 6e 4d 61 78 41 67 67 20 3d 3d 20  NC_MinMaxAgg == 
1c730 53 46 5f 4d 69 6e 4d 61 78 41 67 67 20 3d 3d 20  SF_MinMaxAgg == 
1c740 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4d 49 4e 4d  SQLITE_FUNC_MINM
1c750 41 58 0a 2a 2a 0a 2a 2f 0a 23 64 65 66 69 6e 65  AX.**.*/.#define
1c760 20 4e 43 5f 41 6c 6c 6f 77 41 67 67 20 20 30 78   NC_AllowAgg  0x
1c770 30 30 30 31 20 20 2f 2a 20 41 67 67 72 65 67 61  0001  /* Aggrega
1c780 74 65 20 66 75 6e 63 74 69 6f 6e 73 20 61 72 65  te functions are
1c790 20 61 6c 6c 6f 77 65 64 20 68 65 72 65 20 2a 2f   allowed here */
1c7a0 0a 23 64 65 66 69 6e 65 20 4e 43 5f 50 61 72 74  .#define NC_Part
1c7b0 49 64 78 20 20 20 30 78 30 30 30 32 20 20 2f 2a  Idx   0x0002  /*
1c7c0 20 54 72 75 65 20 69 66 20 72 65 73 6f 6c 76 69   True if resolvi
1c7d0 6e 67 20 61 20 70 61 72 74 69 61 6c 20 69 6e 64  ng a partial ind
1c7e0 65 78 20 57 48 45 52 45 20 2a 2f 0a 23 64 65 66  ex WHERE */.#def
1c7f0 69 6e 65 20 4e 43 5f 49 73 43 68 65 63 6b 20 20  ine NC_IsCheck  
1c800 20 30 78 30 30 30 34 20 20 2f 2a 20 54 72 75 65   0x0004  /* True
1c810 20 69 66 20 72 65 73 6f 6c 76 69 6e 67 20 6e 61   if resolving na
1c820 6d 65 73 20 69 6e 20 61 20 43 48 45 43 4b 20 63  mes in a CHECK c
1c830 6f 6e 73 74 72 61 69 6e 74 20 2a 2f 0a 23 64 65  onstraint */.#de
1c840 66 69 6e 65 20 4e 43 5f 49 6e 41 67 67 46 75 6e  fine NC_InAggFun
1c850 63 20 30 78 30 30 30 38 20 20 2f 2a 20 54 72 75  c 0x0008  /* Tru
1c860 65 20 69 66 20 61 6e 61 6c 79 7a 69 6e 67 20 61  e if analyzing a
1c870 72 67 75 6d 65 6e 74 73 20 74 6f 20 61 6e 20 61  rguments to an a
1c880 67 67 20 66 75 6e 63 20 2a 2f 0a 23 64 65 66 69  gg func */.#defi
1c890 6e 65 20 4e 43 5f 48 61 73 41 67 67 20 20 20 20  ne NC_HasAgg    
1c8a0 30 78 30 30 31 30 20 20 2f 2a 20 4f 6e 65 20 6f  0x0010  /* One o
1c8b0 72 20 6d 6f 72 65 20 61 67 67 72 65 67 61 74 65  r more aggregate
1c8c0 20 66 75 6e 63 74 69 6f 6e 73 20 73 65 65 6e 20   functions seen 
1c8d0 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 49 64  */.#define NC_Id
1c8e0 78 45 78 70 72 20 20 20 30 78 30 30 32 30 20 20  xExpr   0x0020  
1c8f0 2f 2a 20 54 72 75 65 20 69 66 20 72 65 73 6f 6c  /* True if resol
1c900 76 69 6e 67 20 63 6f 6c 75 6d 6e 73 20 6f 66 20  ving columns of 
1c910 43 52 45 41 54 45 20 49 4e 44 45 58 20 2a 2f 0a  CREATE INDEX */.
1c920 23 64 65 66 69 6e 65 20 4e 43 5f 56 61 72 53 65  #define NC_VarSe
1c930 6c 65 63 74 20 30 78 30 30 34 30 20 20 2f 2a 20  lect 0x0040  /* 
1c940 41 20 63 6f 72 72 65 6c 61 74 65 64 20 73 75 62  A correlated sub
1c950 71 75 65 72 79 20 68 61 73 20 62 65 65 6e 20 73  query has been s
1c960 65 65 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e  een */.#define N
1c970 43 5f 55 45 4c 69 73 74 20 20 20 20 30 78 30 30  C_UEList    0x00
1c980 38 30 20 20 2f 2a 20 54 72 75 65 20 69 66 20 75  80  /* True if u
1c990 4e 43 2e 70 45 4c 69 73 74 20 69 73 20 75 73 65  NC.pEList is use
1c9a0 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f  d */.#define NC_
1c9b0 55 41 67 67 49 6e 66 6f 20 20 30 78 30 31 30 30  UAggInfo  0x0100
1c9c0 20 20 2f 2a 20 54 72 75 65 20 69 66 20 75 4e 43    /* True if uNC
1c9d0 2e 70 41 67 67 49 6e 66 6f 20 69 73 20 75 73 65  .pAggInfo is use
1c9e0 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f  d */.#define NC_
1c9f0 55 55 70 73 65 72 74 20 20 20 30 78 30 32 30 30  UUpsert   0x0200
1ca00 20 20 2f 2a 20 54 72 75 65 20 69 66 20 75 4e 43    /* True if uNC
1ca10 2e 70 55 70 73 65 72 74 20 69 73 20 75 73 65 64  .pUpsert is used
1ca20 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 4d   */.#define NC_M
1ca30 69 6e 4d 61 78 41 67 67 20 30 78 31 30 30 30 20  inMaxAgg 0x1000 
1ca40 20 2f 2a 20 6d 69 6e 2f 6d 61 78 20 61 67 67 72   /* min/max aggr
1ca50 65 67 61 74 65 73 20 73 65 65 6e 2e 20 20 53 65  egates seen.  Se
1ca60 65 20 6e 6f 74 65 20 61 62 6f 76 65 20 2a 2f 0a  e note above */.
1ca70 23 64 65 66 69 6e 65 20 4e 43 5f 43 6f 6d 70 6c  #define NC_Compl
1ca80 65 78 20 20 20 30 78 32 30 30 30 20 20 2f 2a 20  ex   0x2000  /* 
1ca90 54 72 75 65 20 69 66 20 61 20 66 75 6e 63 74 69  True if a functi
1caa0 6f 6e 20 6f 72 20 73 75 62 71 75 65 72 79 20 73  on or subquery s
1cab0 65 65 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e  een */.#define N
1cac0 43 5f 41 6c 6c 6f 77 57 69 6e 20 20 30 78 34 30  C_AllowWin  0x40
1cad0 30 30 20 20 2f 2a 20 57 69 6e 64 6f 77 20 66 75  00  /* Window fu
1cae0 6e 63 74 69 6f 6e 73 20 61 72 65 20 61 6c 6c 6f  nctions are allo
1caf0 77 65 64 20 68 65 72 65 20 2a 2f 0a 0a 2f 2a 0a  wed here */../*.
1cb00 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f  ** An instance o
1cb10 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  f the following 
1cb20 6f 62 6a 65 63 74 20 64 65 73 63 72 69 62 65 73  object describes
1cb30 20 61 20 73 69 6e 67 6c 65 20 4f 4e 20 43 4f 4e   a single ON CON
1cb40 46 4c 49 43 54 0a 2a 2a 20 63 6c 61 75 73 65 20  FLICT.** clause 
1cb50 69 6e 20 61 6e 20 75 70 73 65 72 74 2e 0a 2a 2a  in an upsert..**
1cb60 0a 2a 2a 20 54 68 65 20 70 55 70 73 65 72 74 54  .** The pUpsertT
1cb70 61 72 67 65 74 20 66 69 65 6c 64 20 69 73 20 6f  arget field is o
1cb80 6e 6c 79 20 73 65 74 20 69 66 20 74 68 65 20 4f  nly set if the O
1cb90 4e 20 43 4f 4e 46 4c 49 43 54 20 63 6c 61 75 73  N CONFLICT claus
1cba0 65 20 69 6e 63 6c 75 64 65 73 0a 2a 2a 20 63 6f  e includes.** co
1cbb0 6e 66 6c 69 63 74 2d 74 61 72 67 65 74 20 63 6c  nflict-target cl
1cbc0 61 75 73 65 2e 20 20 28 49 6e 20 22 4f 4e 20 43  ause.  (In "ON C
1cbd0 4f 4e 46 4c 49 43 54 28 61 2c 62 29 22 20 74 68  ONFLICT(a,b)" th
1cbe0 65 20 22 28 61 2c 62 29 22 20 69 73 20 74 68 65  e "(a,b)" is the
1cbf0 0a 2a 2a 20 63 6f 6e 66 6c 69 63 74 2d 74 61 72  .** conflict-tar
1cc00 67 65 74 20 63 6c 61 75 73 65 2e 29 20 20 54 68  get clause.)  Th
1cc10 65 20 70 55 70 73 65 72 74 54 61 72 67 65 74 57  e pUpsertTargetW
1cc20 68 65 72 65 20 69 73 20 74 68 65 20 6f 70 74 69  here is the opti
1cc30 6f 6e 61 6c 0a 2a 2a 20 57 48 45 52 45 20 63 6c  onal.** WHERE cl
1cc40 61 75 73 65 20 75 73 65 64 20 74 6f 20 69 64 65  ause used to ide
1cc50 6e 74 69 66 79 20 70 61 72 74 69 61 6c 20 75 6e  ntify partial un
1cc60 69 71 75 65 20 69 6e 64 65 78 65 73 2e 0a 2a 2a  ique indexes..**
1cc70 0a 2a 2a 20 70 55 70 73 65 72 74 53 65 74 20 69  .** pUpsertSet i
1cc80 73 20 74 68 65 20 6c 69 73 74 20 6f 66 20 63 6f  s the list of co
1cc90 6c 75 6d 6e 3d 65 78 70 72 20 74 65 72 6d 73 20  lumn=expr terms 
1cca0 6f 66 20 74 68 65 20 55 50 44 41 54 45 20 73 74  of the UPDATE st
1ccb0 61 74 65 6d 65 6e 74 2e 20 0a 2a 2a 20 54 68 65  atement. .** The
1ccc0 20 70 55 70 73 65 72 74 53 65 74 20 66 69 65 6c   pUpsertSet fiel
1ccd0 64 20 69 73 20 4e 55 4c 4c 20 66 6f 72 20 61 20  d is NULL for a 
1cce0 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 44 4f 20 4e  ON CONFLICT DO N
1ccf0 4f 54 48 49 4e 47 2e 20 20 54 68 65 0a 2a 2a 20  OTHING.  The.** 
1cd00 70 55 70 73 65 72 74 57 68 65 72 65 20 69 73 20  pUpsertWhere is 
1cd10 74 68 65 20 57 48 45 52 45 20 63 6c 61 75 73 65  the WHERE clause
1cd20 20 66 6f 72 20 74 68 65 20 55 50 44 41 54 45 20   for the UPDATE 
1cd30 61 6e 64 20 69 73 20 4e 55 4c 4c 20 69 66 20 74  and is NULL if t
1cd40 68 65 0a 2a 2a 20 57 48 45 52 45 20 63 6c 61 75  he.** WHERE clau
1cd50 73 65 20 69 73 20 6f 6d 69 74 74 65 64 2e 0a 2a  se is omitted..*
1cd60 2f 0a 73 74 72 75 63 74 20 55 70 73 65 72 74 20  /.struct Upsert 
1cd70 7b 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70 55  {.  ExprList *pU
1cd80 70 73 65 72 74 54 61 72 67 65 74 3b 20 20 2f 2a  psertTarget;  /*
1cd90 20 4f 70 74 69 6f 6e 61 6c 20 64 65 73 63 72 69   Optional descri
1cda0 70 74 69 6f 6e 20 6f 66 20 63 6f 6e 66 6c 69 63  ption of conflic
1cdb0 74 69 6e 67 20 69 6e 64 65 78 20 2a 2f 0a 20 20  ting index */.  
1cdc0 45 78 70 72 20 2a 70 55 70 73 65 72 74 54 61 72  Expr *pUpsertTar
1cdd0 67 65 74 57 68 65 72 65 3b 20 2f 2a 20 57 48 45  getWhere; /* WHE
1cde0 52 45 20 63 6c 61 75 73 65 20 66 6f 72 20 70 61  RE clause for pa
1cdf0 72 74 69 61 6c 20 69 6e 64 65 78 20 74 61 72 67  rtial index targ
1ce00 65 74 73 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73  ets */.  ExprLis
1ce10 74 20 2a 70 55 70 73 65 72 74 53 65 74 3b 20 20  t *pUpsertSet;  
1ce20 20 20 20 2f 2a 20 54 68 65 20 53 45 54 20 63 6c     /* The SET cl
1ce30 61 75 73 65 20 66 72 6f 6d 20 61 6e 20 4f 4e 20  ause from an ON 
1ce40 43 4f 4e 46 4c 49 43 54 20 55 50 44 41 54 45 20  CONFLICT UPDATE 
1ce50 2a 2f 0a 20 20 45 78 70 72 20 2a 70 55 70 73 65  */.  Expr *pUpse
1ce60 72 74 57 68 65 72 65 3b 20 20 20 20 20 20 20 2f  rtWhere;       /
1ce70 2a 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 66  * WHERE clause f
1ce80 6f 72 20 74 68 65 20 4f 4e 20 43 4f 4e 46 4c 49  or the ON CONFLI
1ce90 43 54 20 55 50 44 41 54 45 20 2a 2f 0a 20 20 2f  CT UPDATE */.  /
1cea0 2a 20 54 68 65 20 66 69 65 6c 64 73 20 61 62 6f  * The fields abo
1ceb0 76 65 20 63 6f 6d 70 72 69 73 65 20 74 68 65 20  ve comprise the 
1cec0 70 61 72 73 65 20 74 72 65 65 20 66 6f 72 20 74  parse tree for t
1ced0 68 65 20 75 70 73 65 72 74 20 63 6c 61 75 73 65  he upsert clause
1cee0 2e 0a 20 20 2a 2a 20 54 68 65 20 66 69 65 6c 64  ..  ** The field
1cef0 73 20 62 65 6c 6f 77 20 61 72 65 20 75 73 65 64  s below are used
1cf00 20 74 6f 20 74 72 61 6e 73 66 65 72 20 69 6e 66   to transfer inf
1cf10 6f 72 6d 61 74 69 6f 6e 20 66 72 6f 6d 20 74 68  ormation from th
1cf20 65 20 49 4e 53 45 52 54 0a 20 20 2a 2a 20 70 72  e INSERT.  ** pr
1cf30 6f 63 65 73 73 69 6e 67 20 64 6f 77 6e 20 69 6e  ocessing down in
1cf40 74 6f 20 74 68 65 20 55 50 44 41 54 45 20 70 72  to the UPDATE pr
1cf50 6f 63 65 73 73 69 6e 67 20 77 68 69 6c 65 20 67  ocessing while g
1cf60 65 6e 65 72 61 74 69 6e 67 20 63 6f 64 65 2e 0a  enerating code..
1cf70 20 20 2a 2a 20 55 70 73 65 72 74 20 6f 77 6e 73    ** Upsert owns
1cf80 20 74 68 65 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f   the memory allo
1cf90 63 61 74 65 64 20 61 62 6f 76 65 2c 20 62 75 74  cated above, but
1cfa0 20 6e 6f 74 20 74 68 65 20 6d 65 6d 6f 72 79 20   not the memory 
1cfb0 62 65 6c 6f 77 2e 20 2a 2f 0a 20 20 49 6e 64 65  below. */.  Inde
1cfc0 78 20 2a 70 55 70 73 65 72 74 49 64 78 3b 20 20  x *pUpsertIdx;  
1cfd0 20 20 20 20 20 20 2f 2a 20 43 6f 6e 73 74 72 61        /* Constra
1cfe0 69 6e 74 20 74 68 61 74 20 70 55 70 73 65 72 74  int that pUpsert
1cff0 54 61 72 67 65 74 20 69 64 65 6e 74 69 66 69 65  Target identifie
1d000 73 20 2a 2f 0a 20 20 53 72 63 4c 69 73 74 20 2a  s */.  SrcList *
1d010 70 55 70 73 65 72 74 53 72 63 3b 20 20 20 20 20  pUpsertSrc;     
1d020 20 2f 2a 20 54 61 62 6c 65 20 74 6f 20 62 65 20   /* Table to be 
1d030 75 70 64 61 74 65 64 20 2a 2f 0a 20 20 69 6e 74  updated */.  int
1d040 20 72 65 67 44 61 74 61 3b 20 20 20 20 20 20 20   regData;       
1d050 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20         /* First 
1d060 72 65 67 69 73 74 65 72 20 68 6f 6c 64 69 6e 67  register holding
1d070 20 61 72 72 61 79 20 6f 66 20 56 41 4c 55 45 53   array of VALUES
1d080 20 2a 2f 0a 20 20 69 6e 74 20 69 44 61 74 61 43   */.  int iDataC
1d090 75 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ur;             
1d0a0 2f 2a 20 49 6e 64 65 78 20 6f 66 20 74 68 65 20  /* Index of the 
1d0b0 64 61 74 61 20 63 75 72 73 6f 72 20 2a 2f 0a 20  data cursor */. 
1d0c0 20 69 6e 74 20 69 49 64 78 43 75 72 3b 20 20 20   int iIdxCur;   
1d0d0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e             /* In
1d0e0 64 65 78 20 6f 66 20 74 68 65 20 66 69 72 73 74  dex of the first
1d0f0 20 69 6e 64 65 78 20 63 75 72 73 6f 72 20 2a 2f   index cursor */
1d100 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e  .};../*.** An in
1d110 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f  stance of the fo
1d120 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72  llowing structur
1d130 65 20 63 6f 6e 74 61 69 6e 73 20 61 6c 6c 20 69  e contains all i
1d140 6e 66 6f 72 6d 61 74 69 6f 6e 0a 2a 2a 20 6e 65  nformation.** ne
1d150 65 64 65 64 20 74 6f 20 67 65 6e 65 72 61 74 65  eded to generate
1d160 20 63 6f 64 65 20 66 6f 72 20 61 20 73 69 6e 67   code for a sing
1d170 6c 65 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d  le SELECT statem
1d180 65 6e 74 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 74  ent..**.** See t
1d190 68 65 20 68 65 61 64 65 72 20 63 6f 6d 6d 65 6e  he header commen
1d1a0 74 20 6f 6e 20 74 68 65 20 63 6f 6d 70 75 74 65  t on the compute
1d1b0 4c 69 6d 69 74 52 65 67 69 73 74 65 72 73 28 29  LimitRegisters()
1d1c0 20 72 6f 75 74 69 6e 65 20 66 6f 72 20 61 0a 2a   routine for a.*
1d1d0 2a 20 64 65 74 61 69 6c 65 64 20 64 65 73 63 72  * detailed descr
1d1e0 69 70 74 69 6f 6e 20 6f 66 20 74 68 65 20 6d 65  iption of the me
1d1f0 61 6e 69 6e 67 20 6f 66 20 74 68 65 20 69 4c 69  aning of the iLi
1d200 6d 69 74 20 61 6e 64 20 69 4f 66 66 73 65 74 20  mit and iOffset 
1d210 66 69 65 6c 64 73 2e 0a 2a 2a 0a 2a 2a 20 61 64  fields..**.** ad
1d220 64 72 4f 70 65 6e 45 70 68 6d 5b 5d 20 65 6e 74  drOpenEphm[] ent
1d230 72 69 65 73 20 63 6f 6e 74 61 69 6e 20 74 68 65  ries contain the
1d240 20 61 64 64 72 65 73 73 20 6f 66 20 4f 50 5f 4f   address of OP_O
1d250 70 65 6e 45 70 68 65 6d 65 72 61 6c 20 6f 70 63  penEphemeral opc
1d260 6f 64 65 73 2e 0a 2a 2a 20 54 68 65 73 65 20 61  odes..** These a
1d270 64 64 72 65 73 73 65 73 20 6d 75 73 74 20 62 65  ddresses must be
1d280 20 73 74 6f 72 65 64 20 73 6f 20 74 68 61 74 20   stored so that 
1d290 77 65 20 63 61 6e 20 67 6f 20 62 61 63 6b 20 61  we can go back a
1d2a0 6e 64 20 66 69 6c 6c 20 69 6e 0a 2a 2a 20 74 68  nd fill in.** th
1d2b0 65 20 50 34 5f 4b 45 59 49 4e 46 4f 20 61 6e 64  e P4_KEYINFO and
1d2c0 20 50 32 20 70 61 72 61 6d 65 74 65 72 73 20 6c   P2 parameters l
1d2d0 61 74 65 72 2e 20 20 4e 65 69 74 68 65 72 20 74  ater.  Neither t
1d2e0 68 65 20 4b 65 79 49 6e 66 6f 20 6e 6f 72 0a 2a  he KeyInfo nor.*
1d2f0 2a 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  * the number of 
1d300 63 6f 6c 75 6d 6e 73 20 69 6e 20 50 32 20 63 61  columns in P2 ca
1d310 6e 20 62 65 20 63 6f 6d 70 75 74 65 64 20 61 74  n be computed at
1d320 20 74 68 65 20 73 61 6d 65 20 74 69 6d 65 0a 2a   the same time.*
1d330 2a 20 61 73 20 74 68 65 20 4f 50 5f 4f 70 65 6e  * as the OP_Open
1d340 45 70 68 6d 20 69 6e 73 74 72 75 63 74 69 6f 6e  Ephm instruction
1d350 20 69 73 20 63 6f 64 65 64 20 62 65 63 61 75 73   is coded becaus
1d360 65 20 6e 6f 74 0a 2a 2a 20 65 6e 6f 75 67 68 20  e not.** enough 
1d370 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75  information abou
1d380 74 20 74 68 65 20 63 6f 6d 70 6f 75 6e 64 20 71  t the compound q
1d390 75 65 72 79 20 69 73 20 6b 6e 6f 77 6e 20 61 74  uery is known at
1d3a0 20 74 68 61 74 20 70 6f 69 6e 74 2e 0a 2a 2a 20   that point..** 
1d3b0 54 68 65 20 4b 65 79 49 6e 66 6f 20 66 6f 72 20  The KeyInfo for 
1d3c0 61 64 64 72 4f 70 65 6e 54 72 61 6e 5b 30 5d 20  addrOpenTran[0] 
1d3d0 61 6e 64 20 5b 31 5d 20 63 6f 6e 74 61 69 6e 73  and [1] contains
1d3e0 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65   collating seque
1d3f0 6e 63 65 73 0a 2a 2a 20 66 6f 72 20 74 68 65 20  nces.** for the 
1d400 72 65 73 75 6c 74 20 73 65 74 2e 20 20 54 68 65  result set.  The
1d410 20 4b 65 79 49 6e 66 6f 20 66 6f 72 20 61 64 64   KeyInfo for add
1d420 72 4f 70 65 6e 45 70 68 6d 5b 32 5d 20 63 6f 6e  rOpenEphm[2] con
1d430 74 61 69 6e 73 20 63 6f 6c 6c 61 74 69 6e 67 0a  tains collating.
1d440 2a 2a 20 73 65 71 75 65 6e 63 65 73 20 66 6f 72  ** sequences for
1d450 20 74 68 65 20 4f 52 44 45 52 20 42 59 20 63 6c   the ORDER BY cl
1d460 61 75 73 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  ause..*/.struct 
1d470 53 65 6c 65 63 74 20 7b 0a 20 20 45 78 70 72 4c  Select {.  ExprL
1d480 69 73 74 20 2a 70 45 4c 69 73 74 3b 20 20 20 20  ist *pEList;    
1d490 20 20 2f 2a 20 54 68 65 20 66 69 65 6c 64 73 20    /* The fields 
1d4a0 6f 66 20 74 68 65 20 72 65 73 75 6c 74 20 2a 2f  of the result */
1d4b0 0a 20 20 75 38 20 6f 70 3b 20 20 20 20 20 20 20  .  u8 op;       
1d4c0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65            /* One
1d4d0 20 6f 66 3a 20 54 4b 5f 55 4e 49 4f 4e 20 54 4b   of: TK_UNION TK
1d4e0 5f 41 4c 4c 20 54 4b 5f 49 4e 54 45 52 53 45 43  _ALL TK_INTERSEC
1d4f0 54 20 54 4b 5f 45 58 43 45 50 54 20 2a 2f 0a 20  T TK_EXCEPT */. 
1d500 20 4c 6f 67 45 73 74 20 6e 53 65 6c 65 63 74 52   LogEst nSelectR
1d510 6f 77 3b 20 20 20 20 20 2f 2a 20 45 73 74 69 6d  ow;     /* Estim
1d520 61 74 65 64 20 6e 75 6d 62 65 72 20 6f 66 20 72  ated number of r
1d530 65 73 75 6c 74 20 72 6f 77 73 20 2a 2f 0a 20 20  esult rows */.  
1d540 75 33 32 20 73 65 6c 46 6c 61 67 73 3b 20 20 20  u32 selFlags;   
1d550 20 20 20 20 20 20 20 2f 2a 20 56 61 72 69 6f 75         /* Variou
1d560 73 20 53 46 5f 2a 20 76 61 6c 75 65 73 20 2a 2f  s SF_* values */
1d570 0a 20 20 69 6e 74 20 69 4c 69 6d 69 74 2c 20 69  .  int iLimit, i
1d580 4f 66 66 73 65 74 3b 20 20 20 2f 2a 20 4d 65 6d  Offset;   /* Mem
1d590 6f 72 79 20 72 65 67 69 73 74 65 72 73 20 68 6f  ory registers ho
1d5a0 6c 64 69 6e 67 20 4c 49 4d 49 54 20 26 20 4f 46  lding LIMIT & OF
1d5b0 46 53 45 54 20 63 6f 75 6e 74 65 72 73 20 2a 2f  FSET counters */
1d5c0 0a 20 20 75 33 32 20 73 65 6c 49 64 3b 20 20 20  .  u32 selId;   
1d5d0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 55 6e 69            /* Uni
1d5e0 71 75 65 20 69 64 65 6e 74 69 66 69 65 72 20 6e  que identifier n
1d5f0 75 6d 62 65 72 20 66 6f 72 20 74 68 69 73 20 53  umber for this S
1d600 45 4c 45 43 54 20 2a 2f 0a 20 20 69 6e 74 20 61  ELECT */.  int a
1d610 64 64 72 4f 70 65 6e 45 70 68 6d 5b 32 5d 3b 20  ddrOpenEphm[2]; 
1d620 20 20 2f 2a 20 4f 50 5f 4f 70 65 6e 45 70 68 65    /* OP_OpenEphe
1d630 6d 20 6f 70 63 6f 64 65 73 20 72 65 6c 61 74 65  m opcodes relate
1d640 64 20 74 6f 20 74 68 69 73 20 73 65 6c 65 63 74  d to this select
1d650 20 2a 2f 0a 20 20 53 72 63 4c 69 73 74 20 2a 70   */.  SrcList *p
1d660 53 72 63 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  Src;         /* 
1d670 54 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 20  The FROM clause 
1d680 2a 2f 0a 20 20 45 78 70 72 20 2a 70 57 68 65 72  */.  Expr *pWher
1d690 65 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54  e;          /* T
1d6a0 68 65 20 57 48 45 52 45 20 63 6c 61 75 73 65 20  he WHERE clause 
1d6b0 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70  */.  ExprList *p
1d6c0 47 72 6f 75 70 42 79 3b 20 20 20 20 2f 2a 20 54  GroupBy;    /* T
1d6d0 68 65 20 47 52 4f 55 50 20 42 59 20 63 6c 61 75  he GROUP BY clau
1d6e0 73 65 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 48  se */.  Expr *pH
1d6f0 61 76 69 6e 67 3b 20 20 20 20 20 20 20 20 20 2f  aving;         /
1d700 2a 20 54 68 65 20 48 41 56 49 4e 47 20 63 6c 61  * The HAVING cla
1d710 75 73 65 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73  use */.  ExprLis
1d720 74 20 2a 70 4f 72 64 65 72 42 79 3b 20 20 20 20  t *pOrderBy;    
1d730 2f 2a 20 54 68 65 20 4f 52 44 45 52 20 42 59 20  /* The ORDER BY 
1d740 63 6c 61 75 73 65 20 2a 2f 0a 20 20 53 65 6c 65  clause */.  Sele
1d750 63 74 20 2a 70 50 72 69 6f 72 3b 20 20 20 20 20  ct *pPrior;     
1d760 20 20 20 2f 2a 20 50 72 69 6f 72 20 73 65 6c 65     /* Prior sele
1d770 63 74 20 69 6e 20 61 20 63 6f 6d 70 6f 75 6e 64  ct in a compound
1d780 20 73 65 6c 65 63 74 20 73 74 61 74 65 6d 65 6e   select statemen
1d790 74 20 2a 2f 0a 20 20 53 65 6c 65 63 74 20 2a 70  t */.  Select *p
1d7a0 4e 65 78 74 3b 20 20 20 20 20 20 20 20 20 2f 2a  Next;         /*
1d7b0 20 4e 65 78 74 20 73 65 6c 65 63 74 20 74 6f 20   Next select to 
1d7c0 74 68 65 20 6c 65 66 74 20 69 6e 20 61 20 63 6f  the left in a co
1d7d0 6d 70 6f 75 6e 64 20 2a 2f 0a 20 20 45 78 70 72  mpound */.  Expr
1d7e0 20 2a 70 4c 69 6d 69 74 3b 20 20 20 20 20 20 20   *pLimit;       
1d7f0 20 20 20 2f 2a 20 4c 49 4d 49 54 20 65 78 70 72     /* LIMIT expr
1d800 65 73 73 69 6f 6e 2e 20 4e 55 4c 4c 20 6d 65 61  ession. NULL mea
1d810 6e 73 20 6e 6f 74 20 75 73 65 64 2e 20 2a 2f 0a  ns not used. */.
1d820 20 20 57 69 74 68 20 2a 70 57 69 74 68 3b 20 20    With *pWith;  
1d830 20 20 20 20 20 20 20 20 20 2f 2a 20 57 49 54 48           /* WITH
1d840 20 63 6c 61 75 73 65 20 61 74 74 61 63 68 65 64   clause attached
1d850 20 74 6f 20 74 68 69 73 20 73 65 6c 65 63 74 2e   to this select.
1d860 20 4f 72 20 4e 55 4c 4c 2e 20 2a 2f 0a 23 69 66   Or NULL. */.#if
1d870 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
1d880 5f 57 49 4e 44 4f 57 46 55 4e 43 0a 20 20 57 69  _WINDOWFUNC.  Wi
1d890 6e 64 6f 77 20 2a 70 57 69 6e 3b 20 20 20 20 20  ndow *pWin;     
1d8a0 20 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20       /* List of 
1d8b0 77 69 6e 64 6f 77 20 66 75 6e 63 74 69 6f 6e 73  window functions
1d8c0 20 2a 2f 0a 20 20 57 69 6e 64 6f 77 20 2a 70 57   */.  Window *pW
1d8d0 69 6e 44 65 66 6e 3b 20 20 20 20 20 20 2f 2a 20  inDefn;      /* 
1d8e0 4c 69 73 74 20 6f 66 20 6e 61 6d 65 64 20 77 69  List of named wi
1d8f0 6e 64 6f 77 20 64 65 66 69 6e 69 74 69 6f 6e 73  ndow definitions
1d900 20 2a 2f 0a 23 65 6e 64 69 66 0a 7d 3b 0a 0a 2f   */.#endif.};../
1d910 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c  *.** Allowed val
1d920 75 65 73 20 66 6f 72 20 53 65 6c 65 63 74 2e 73  ues for Select.s
1d930 65 6c 46 6c 61 67 73 2e 20 20 54 68 65 20 22 53  elFlags.  The "S
1d940 46 22 20 70 72 65 66 69 78 20 73 74 61 6e 64 73  F" prefix stands
1d950 20 66 6f 72 0a 2a 2a 20 22 53 65 6c 65 63 74 20   for.** "Select 
1d960 46 6c 61 67 22 2e 0a 2a 2a 0a 2a 2a 20 56 61 6c  Flag"..**.** Val
1d970 75 65 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 28  ue constraints (
1d980 61 6c 6c 20 63 68 65 63 6b 65 64 20 76 69 61 20  all checked via 
1d990 61 73 73 65 72 74 28 29 29 0a 2a 2a 20 20 20 20  assert()).**    
1d9a0 20 53 46 5f 48 61 73 41 67 67 20 20 20 20 20 3d   SF_HasAgg     =
1d9b0 3d 20 4e 43 5f 48 61 73 41 67 67 0a 2a 2a 20 20  = NC_HasAgg.**  
1d9c0 20 20 20 53 46 5f 4d 69 6e 4d 61 78 41 67 67 20     SF_MinMaxAgg 
1d9d0 20 3d 3d 20 4e 43 5f 4d 69 6e 4d 61 78 41 67 67   == NC_MinMaxAgg
1d9e0 20 20 20 20 20 3d 3d 20 53 51 4c 49 54 45 5f 46       == SQLITE_F
1d9f0 55 4e 43 5f 4d 49 4e 4d 41 58 0a 2a 2a 20 20 20  UNC_MINMAX.**   
1da00 20 20 53 46 5f 46 69 78 65 64 4c 69 6d 69 74 20    SF_FixedLimit 
1da10 3d 3d 20 57 48 45 52 45 5f 55 53 45 5f 4c 49 4d  == WHERE_USE_LIM
1da20 49 54 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46  IT.*/.#define SF
1da30 5f 44 69 73 74 69 6e 63 74 20 20 20 20 20 20 20  _Distinct       
1da40 30 78 30 30 30 30 31 20 20 2f 2a 20 4f 75 74 70  0x00001  /* Outp
1da50 75 74 20 73 68 6f 75 6c 64 20 62 65 20 44 49 53  ut should be DIS
1da60 54 49 4e 43 54 20 2a 2f 0a 23 64 65 66 69 6e 65  TINCT */.#define
1da70 20 53 46 5f 41 6c 6c 20 20 20 20 20 20 20 20 20   SF_All         
1da80 20 20 20 30 78 30 30 30 30 32 20 20 2f 2a 20 49     0x00002  /* I
1da90 6e 63 6c 75 64 65 73 20 74 68 65 20 41 4c 4c 20  ncludes the ALL 
1daa0 6b 65 79 77 6f 72 64 20 2a 2f 0a 23 64 65 66 69  keyword */.#defi
1dab0 6e 65 20 53 46 5f 52 65 73 6f 6c 76 65 64 20 20  ne SF_Resolved  
1dac0 20 20 20 20 20 30 78 30 30 30 30 34 20 20 2f 2a       0x00004  /*
1dad0 20 49 64 65 6e 74 69 66 69 65 72 73 20 68 61 76   Identifiers hav
1dae0 65 20 62 65 65 6e 20 72 65 73 6f 6c 76 65 64 20  e been resolved 
1daf0 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 41 67  */.#define SF_Ag
1db00 67 72 65 67 61 74 65 20 20 20 20 20 20 30 78 30  gregate      0x0
1db10 30 30 30 38 20 20 2f 2a 20 43 6f 6e 74 61 69 6e  0008  /* Contain
1db20 73 20 61 67 67 20 66 75 6e 63 74 69 6f 6e 73 20  s agg functions 
1db30 6f 72 20 61 20 47 52 4f 55 50 20 42 59 20 2a 2f  or a GROUP BY */
1db40 0a 23 64 65 66 69 6e 65 20 53 46 5f 48 61 73 41  .#define SF_HasA
1db50 67 67 20 20 20 20 20 20 20 20 20 30 78 30 30 30  gg         0x000
1db60 31 30 20 20 2f 2a 20 43 6f 6e 74 61 69 6e 73 20  10  /* Contains 
1db70 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69  aggregate functi
1db80 6f 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ons */.#define S
1db90 46 5f 55 73 65 73 45 70 68 65 6d 65 72 61 6c 20  F_UsesEphemeral 
1dba0 20 30 78 30 30 30 32 30 20 20 2f 2a 20 55 73 65   0x00020  /* Use
1dbb0 73 20 74 68 65 20 4f 70 65 6e 45 70 68 65 6d 65  s the OpenEpheme
1dbc0 72 61 6c 20 6f 70 63 6f 64 65 20 2a 2f 0a 23 64  ral opcode */.#d
1dbd0 65 66 69 6e 65 20 53 46 5f 45 78 70 61 6e 64 65  efine SF_Expande
1dbe0 64 20 20 20 20 20 20 20 30 78 30 30 30 34 30 20  d       0x00040 
1dbf0 20 2f 2a 20 73 71 6c 69 74 65 33 53 65 6c 65 63   /* sqlite3Selec
1dc00 74 45 78 70 61 6e 64 28 29 20 63 61 6c 6c 65 64  tExpand() called
1dc10 20 6f 6e 20 74 68 69 73 20 2a 2f 0a 23 64 65 66   on this */.#def
1dc20 69 6e 65 20 53 46 5f 48 61 73 54 79 70 65 49 6e  ine SF_HasTypeIn
1dc30 66 6f 20 20 20 20 30 78 30 30 30 38 30 20 20 2f  fo    0x00080  /
1dc40 2a 20 46 52 4f 4d 20 73 75 62 71 75 65 72 69 65  * FROM subquerie
1dc50 73 20 68 61 76 65 20 54 61 62 6c 65 20 6d 65 74  s have Table met
1dc60 61 64 61 74 61 20 2a 2f 0a 23 64 65 66 69 6e 65  adata */.#define
1dc70 20 53 46 5f 43 6f 6d 70 6f 75 6e 64 20 20 20 20   SF_Compound    
1dc80 20 20 20 30 78 30 30 31 30 30 20 20 2f 2a 20 50     0x00100  /* P
1dc90 61 72 74 20 6f 66 20 61 20 63 6f 6d 70 6f 75 6e  art of a compoun
1dca0 64 20 71 75 65 72 79 20 2a 2f 0a 23 64 65 66 69  d query */.#defi
1dcb0 6e 65 20 53 46 5f 56 61 6c 75 65 73 20 20 20 20  ne SF_Values    
1dcc0 20 20 20 20 20 30 78 30 30 32 30 30 20 20 2f 2a       0x00200  /*
1dcd0 20 53 79 6e 74 68 65 73 69 7a 65 64 20 66 72 6f   Synthesized fro
1dce0 6d 20 56 41 4c 55 45 53 20 63 6c 61 75 73 65 20  m VALUES clause 
1dcf0 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 4d 75  */.#define SF_Mu
1dd00 6c 74 69 56 61 6c 75 65 20 20 20 20 20 30 78 30  ltiValue     0x0
1dd10 30 34 30 30 20 20 2f 2a 20 53 69 6e 67 6c 65 20  0400  /* Single 
1dd20 56 41 4c 55 45 53 20 74 65 72 6d 20 77 69 74 68  VALUES term with
1dd30 20 6d 75 6c 74 69 70 6c 65 20 72 6f 77 73 20 2a   multiple rows *
1dd40 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 4e 65 73  /.#define SF_Nes
1dd50 74 65 64 46 72 6f 6d 20 20 20 20 20 30 78 30 30  tedFrom     0x00
1dd60 38 30 30 20 20 2f 2a 20 50 61 72 74 20 6f 66 20  800  /* Part of 
1dd70 61 20 70 61 72 65 6e 74 68 65 73 69 7a 65 64 20  a parenthesized 
1dd80 46 52 4f 4d 20 63 6c 61 75 73 65 20 2a 2f 0a 23  FROM clause */.#
1dd90 64 65 66 69 6e 65 20 53 46 5f 4d 69 6e 4d 61 78  define SF_MinMax
1dda0 41 67 67 20 20 20 20 20 20 30 78 30 31 30 30 30  Agg      0x01000
1ddb0 20 20 2f 2a 20 41 67 67 72 65 67 61 74 65 20 63    /* Aggregate c
1ddc0 6f 6e 74 61 69 6e 69 6e 67 20 6d 69 6e 28 29 20  ontaining min() 
1ddd0 6f 72 20 6d 61 78 28 29 20 2a 2f 0a 23 64 65 66  or max() */.#def
1dde0 69 6e 65 20 53 46 5f 52 65 63 75 72 73 69 76 65  ine SF_Recursive
1ddf0 20 20 20 20 20 20 30 78 30 32 30 30 30 20 20 2f        0x02000  /
1de00 2a 20 54 68 65 20 72 65 63 75 72 73 69 76 65 20  * The recursive 
1de10 70 61 72 74 20 6f 66 20 61 20 72 65 63 75 72 73  part of a recurs
1de20 69 76 65 20 43 54 45 20 2a 2f 0a 23 64 65 66 69  ive CTE */.#defi
1de30 6e 65 20 53 46 5f 46 69 78 65 64 4c 69 6d 69 74  ne SF_FixedLimit
1de40 20 20 20 20 20 30 78 30 34 30 30 30 20 20 2f 2a       0x04000  /*
1de50 20 6e 53 65 6c 65 63 74 52 6f 77 20 73 65 74 20   nSelectRow set 
1de60 62 79 20 61 20 63 6f 6e 73 74 61 6e 74 20 4c 49  by a constant LI
1de70 4d 49 54 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  MIT */.#define S
1de80 46 5f 4d 61 79 62 65 43 6f 6e 76 65 72 74 20 20  F_MaybeConvert  
1de90 20 30 78 30 38 30 30 30 20 20 2f 2a 20 4e 65 65   0x08000  /* Nee
1dea0 64 20 63 6f 6e 76 65 72 74 43 6f 6d 70 6f 75 6e  d convertCompoun
1deb0 64 53 65 6c 65 63 74 54 6f 53 75 62 71 75 65 72  dSelectToSubquer
1dec0 79 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  y() */.#define S
1ded0 46 5f 43 6f 6e 76 65 72 74 65 64 20 20 20 20 20  F_Converted     
1dee0 20 30 78 31 30 30 30 30 20 20 2f 2a 20 42 79 20   0x10000  /* By 
1def0 63 6f 6e 76 65 72 74 43 6f 6d 70 6f 75 6e 64 53  convertCompoundS
1df00 65 6c 65 63 74 54 6f 53 75 62 71 75 65 72 79 28  electToSubquery(
1df10 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f  ) */.#define SF_
1df20 49 6e 63 6c 75 64 65 48 69 64 64 65 6e 20 20 30  IncludeHidden  0
1df30 78 32 30 30 30 30 20 20 2f 2a 20 49 6e 63 6c 75  x20000  /* Inclu
1df40 64 65 20 68 69 64 64 65 6e 20 63 6f 6c 75 6d 6e  de hidden column
1df50 73 20 69 6e 20 6f 75 74 70 75 74 20 2a 2f 0a 23  s in output */.#
1df60 64 65 66 69 6e 65 20 53 46 5f 43 6f 6d 70 6c 65  define SF_Comple
1df70 78 52 65 73 75 6c 74 20 20 30 78 34 30 30 30 30  xResult  0x40000
1df80 20 20 2f 2a 20 52 65 73 75 6c 74 20 63 6f 6e 74    /* Result cont
1df90 61 69 6e 73 20 73 75 62 71 75 65 72 79 20 6f 72  ains subquery or
1dfa0 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 0a 2f 2a   function */../*
1dfb0 0a 2a 2a 20 54 68 65 20 72 65 73 75 6c 74 73 20  .** The results 
1dfc0 6f 66 20 61 20 53 45 4c 45 43 54 20 63 61 6e 20  of a SELECT can 
1dfd0 62 65 20 64 69 73 74 72 69 62 75 74 65 64 20 69  be distributed i
1dfe0 6e 20 73 65 76 65 72 61 6c 20 77 61 79 73 2c 20  n several ways, 
1dff0 61 73 20 64 65 66 69 6e 65 64 0a 2a 2a 20 62 79  as defined.** by
1e000 20 6f 6e 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c   one of the foll
1e010 6f 77 69 6e 67 20 6d 61 63 72 6f 73 2e 20 20 54  owing macros.  T
1e020 68 65 20 22 53 52 54 22 20 70 72 65 66 69 78 20  he "SRT" prefix 
1e030 6d 65 61 6e 73 20 22 53 45 4c 45 43 54 20 52 65  means "SELECT Re
1e040 73 75 6c 74 0a 2a 2a 20 54 79 70 65 22 2e 0a 2a  sult.** Type"..*
1e050 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 55 6e 69  *.**     SRT_Uni
1e060 6f 6e 20 20 20 20 20 20 20 53 74 6f 72 65 20 72  on       Store r
1e070 65 73 75 6c 74 73 20 61 73 20 61 20 6b 65 79 20  esults as a key 
1e080 69 6e 20 61 20 74 65 6d 70 6f 72 61 72 79 20 69  in a temporary i
1e090 6e 64 65 78 0a 2a 2a 20 20 20 20 20 20 20 20 20  ndex.**         
1e0a0 20 20 20 20 20 20 20 20 20 20 20 20 69 64 65 6e              iden
1e0b0 74 69 66 69 65 64 20 62 79 20 70 44 65 73 74 2d  tified by pDest-
1e0c0 3e 69 53 44 50 61 72 6d 2e 0a 2a 2a 0a 2a 2a 20  >iSDParm..**.** 
1e0d0 20 20 20 20 53 52 54 5f 45 78 63 65 70 74 20 20      SRT_Except  
1e0e0 20 20 20 20 52 65 6d 6f 76 65 20 72 65 73 75 6c      Remove resul
1e0f0 74 73 20 66 72 6f 6d 20 74 68 65 20 74 65 6d 70  ts from the temp
1e100 6f 72 61 72 79 20 69 6e 64 65 78 20 70 44 65 73  orary index pDes
1e110 74 2d 3e 69 53 44 50 61 72 6d 2e 0a 2a 2a 0a 2a  t->iSDParm..**.*
1e120 2a 20 20 20 20 20 53 52 54 5f 45 78 69 73 74 73  *     SRT_Exists
1e130 20 20 20 20 20 20 53 74 6f 72 65 20 61 20 31 20        Store a 1 
1e140 69 6e 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 70  in memory cell p
1e150 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 20 69 66  Dest->iSDParm if
1e160 20 74 68 65 20 72 65 73 75 6c 74 0a 2a 2a 20 20   the result.**  
1e170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e180 20 20 20 73 65 74 20 69 73 20 6e 6f 74 20 65 6d     set is not em
1e190 70 74 79 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53  pty..**.**     S
1e1a0 52 54 5f 44 69 73 63 61 72 64 20 20 20 20 20 54  RT_Discard     T
1e1b0 68 72 6f 77 20 74 68 65 20 72 65 73 75 6c 74 73  hrow the results
1e1c0 20 61 77 61 79 2e 20 20 54 68 69 73 20 69 73 20   away.  This is 
1e1d0 75 73 65 64 20 62 79 20 53 45 4c 45 43 54 0a 2a  used by SELECT.*
1e1e0 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
1e1f0 20 20 20 20 20 20 73 74 61 74 65 6d 65 6e 74 73        statements
1e200 20 77 69 74 68 69 6e 20 74 72 69 67 67 65 72 73   within triggers
1e210 20 77 68 6f 73 65 20 6f 6e 6c 79 20 70 75 72 70   whose only purp
1e220 6f 73 65 20 69 73 0a 2a 2a 20 20 20 20 20 20 20  ose is.**       
1e230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
1e240 65 20 73 69 64 65 2d 65 66 66 65 63 74 73 20 6f  e side-effects o
1e250 66 20 66 75 6e 63 74 69 6f 6e 73 2e 0a 2a 2a 0a  f functions..**.
1e260 2a 2a 20 41 6c 6c 20 6f 66 20 74 68 65 20 61 62  ** All of the ab
1e270 6f 76 65 20 61 72 65 20 66 72 65 65 20 74 6f 20  ove are free to 
1e280 69 67 6e 6f 72 65 20 74 68 65 69 72 20 4f 52 44  ignore their ORD
1e290 45 52 20 42 59 20 63 6c 61 75 73 65 2e 20 54 68  ER BY clause. Th
1e2a0 6f 73 65 20 74 68 61 74 0a 2a 2a 20 66 6f 6c 6c  ose that.** foll
1e2b0 6f 77 20 6d 75 73 74 20 68 6f 6e 6f 72 20 74 68  ow must honor th
1e2c0 65 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73  e ORDER BY claus
1e2d0 65 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54  e..**.**     SRT
1e2e0 5f 4f 75 74 70 75 74 20 20 20 20 20 20 47 65 6e  _Output      Gen
1e2f0 65 72 61 74 65 20 61 20 72 6f 77 20 6f 66 20 6f  erate a row of o
1e300 75 74 70 75 74 20 28 75 73 69 6e 67 20 74 68 65  utput (using the
1e310 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 0a 2a 2a   OP_ResultRow.**
1e320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e330 20 20 20 20 20 6f 70 63 6f 64 65 29 20 66 6f 72       opcode) for
1e340 20 65 61 63 68 20 72 6f 77 20 69 6e 20 74 68 65   each row in the
1e350 20 72 65 73 75 6c 74 20 73 65 74 2e 0a 2a 2a 0a   result set..**.
1e360 2a 2a 20 20 20 20 20 53 52 54 5f 4d 65 6d 20 20  **     SRT_Mem  
1e370 20 20 20 20 20 20 20 4f 6e 6c 79 20 76 61 6c 69         Only vali
1e380 64 20 69 66 20 74 68 65 20 72 65 73 75 6c 74 20  d if the result 
1e390 69 73 20 61 20 73 69 6e 67 6c 65 20 63 6f 6c 75  is a single colu
1e3a0 6d 6e 2e 0a 2a 2a 20 20 20 20 20 20 20 20 20 20  mn..**          
1e3b0 20 20 20 20 20 20 20 20 20 20 20 53 74 6f 72 65             Store
1e3c0 20 74 68 65 20 66 69 72 73 74 20 63 6f 6c 75 6d   the first colum
1e3d0 6e 20 6f 66 20 74 68 65 20 66 69 72 73 74 20 72  n of the first r
1e3e0 65 73 75 6c 74 20 72 6f 77 0a 2a 2a 20 20 20 20  esult row.**    
1e3f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e400 20 69 6e 20 72 65 67 69 73 74 65 72 20 70 44 65   in register pDe
1e410 73 74 2d 3e 69 53 44 50 61 72 6d 20 74 68 65 6e  st->iSDParm then
1e420 20 61 62 61 6e 64 6f 6e 20 74 68 65 20 72 65 73   abandon the res
1e430 74 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  t.**            
1e440 20 20 20 20 20 20 20 20 20 6f 66 20 74 68 65 20           of the 
1e450 71 75 65 72 79 2e 20 20 54 68 69 73 20 64 65 73  query.  This des
1e460 74 69 6e 61 74 69 6f 6e 20 69 6d 70 6c 69 65 73  tination implies
1e470 20 22 4c 49 4d 49 54 20 31 22 2e 0a 2a 2a 0a 2a   "LIMIT 1"..**.*
1e480 2a 20 20 20 20 20 53 52 54 5f 53 65 74 20 20 20  *     SRT_Set   
1e490 20 20 20 20 20 20 54 68 65 20 72 65 73 75 6c 74        The result
1e4a0 20 6d 75 73 74 20 62 65 20 61 20 73 69 6e 67 6c   must be a singl
1e4b0 65 20 63 6f 6c 75 6d 6e 2e 20 20 53 74 6f 72 65  e column.  Store
1e4c0 20 65 61 63 68 0a 2a 2a 20 20 20 20 20 20 20 20   each.**        
1e4d0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 77               row
1e4e0 20 6f 66 20 72 65 73 75 6c 74 20 61 73 20 74 68   of result as th
1e4f0 65 20 6b 65 79 20 69 6e 20 74 61 62 6c 65 20 70  e key in table p
1e500 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 2e 0a 2a  Dest->iSDParm..*
1e510 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
1e520 20 20 20 20 20 20 41 70 70 6c 79 20 74 68 65 20        Apply the 
1e530 61 66 66 69 6e 69 74 79 20 70 44 65 73 74 2d 3e  affinity pDest->
1e540 61 66 66 53 64 73 74 20 62 65 66 6f 72 65 20 73  affSdst before s
1e550 74 6f 72 69 6e 67 0a 2a 2a 20 20 20 20 20 20 20  toring.**       
1e560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
1e570 73 75 6c 74 73 2e 20 20 55 73 65 64 20 74 6f 20  sults.  Used to 
1e580 69 6d 70 6c 65 6d 65 6e 74 20 22 49 4e 20 28 53  implement "IN (S
1e590 45 4c 45 43 54 20 2e 2e 2e 29 22 2e 0a 2a 2a 0a  ELECT ...)"..**.
1e5a0 2a 2a 20 20 20 20 20 53 52 54 5f 45 70 68 65 6d  **     SRT_Ephem
1e5b0 54 61 62 20 20 20 20 43 72 65 61 74 65 20 61 6e  Tab    Create an
1e5c0 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65   temporary table
1e5d0 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 20   pDest->iSDParm 
1e5e0 61 6e 64 20 73 74 6f 72 65 0a 2a 2a 20 20 20 20  and store.**    
1e5f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e600 20 74 68 65 20 72 65 73 75 6c 74 20 74 68 65 72   the result ther
1e610 65 2e 20 54 68 65 20 63 75 72 73 6f 72 20 69 73  e. The cursor is
1e620 20 6c 65 66 74 20 6f 70 65 6e 20 61 66 74 65 72   left open after
1e630 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
1e640 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 69 6e          returnin
1e650 67 2e 20 20 54 68 69 73 20 69 73 20 6c 69 6b 65  g.  This is like
1e660 20 53 52 54 5f 54 61 62 6c 65 20 65 78 63 65 70   SRT_Table excep
1e670 74 20 74 68 61 74 0a 2a 2a 20 20 20 20 20 20 20  t that.**       
1e680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
1e690 69 73 20 64 65 73 74 69 6e 61 74 69 6f 6e 20 75  is destination u
1e6a0 73 65 73 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d  ses OP_OpenEphem
1e6b0 65 72 61 6c 20 74 6f 20 63 72 65 61 74 65 0a 2a  eral to create.*
1e6c0 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
1e6d0 20 20 20 20 20 20 74 68 65 20 74 61 62 6c 65 20        the table 
1e6e0 66 69 72 73 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 20  first..**.**    
1e6f0 20 53 52 54 5f 43 6f 72 6f 75 74 69 6e 65 20 20   SRT_Coroutine  
1e700 20 47 65 6e 65 72 61 74 65 20 61 20 63 6f 2d 72   Generate a co-r
1e710 6f 75 74 69 6e 65 20 74 68 61 74 20 72 65 74 75  outine that retu
1e720 72 6e 73 20 61 20 6e 65 77 20 72 6f 77 20 6f 66  rns a new row of
1e730 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
1e740 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 73 20          results 
1e750 65 61 63 68 20 74 69 6d 65 20 69 74 20 69 73 20  each time it is 
1e760 69 6e 76 6f 6b 65 64 2e 20 20 54 68 65 20 65 6e  invoked.  The en
1e770 74 72 79 20 70 6f 69 6e 74 0a 2a 2a 20 20 20 20  try point.**    
1e780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e790 20 6f 66 20 74 68 65 20 63 6f 2d 72 6f 75 74 69   of the co-routi
1e7a0 6e 65 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20  ne is stored in 
1e7b0 72 65 67 69 73 74 65 72 20 70 44 65 73 74 2d 3e  register pDest->
1e7c0 69 53 44 50 61 72 6d 0a 2a 2a 20 20 20 20 20 20  iSDParm.**      
1e7d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61                 a
1e7e0 6e 64 20 74 68 65 20 72 65 73 75 6c 74 20 72 6f  nd the result ro
1e7f0 77 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 70  w is stored in p
1e800 44 65 73 74 2d 3e 6e 44 65 73 74 20 72 65 67 69  Dest->nDest regi
1e810 73 74 65 72 73 0a 2a 2a 20 20 20 20 20 20 20 20  sters.**        
1e820 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 61               sta
1e830 72 74 69 6e 67 20 77 69 74 68 20 70 44 65 73 74  rting with pDest
1e840 2d 3e 69 53 64 73 74 2e 0a 2a 2a 0a 2a 2a 20 20  ->iSdst..**.**  
1e850 20 20 20 53 52 54 5f 54 61 62 6c 65 20 20 20 20     SRT_Table    
1e860 20 20 20 53 74 6f 72 65 20 72 65 73 75 6c 74 73     Store results
1e870 20 69 6e 20 74 65 6d 70 6f 72 61 72 79 20 74 61   in temporary ta
1e880 62 6c 65 20 70 44 65 73 74 2d 3e 69 53 44 50 61  ble pDest->iSDPa
1e890 72 6d 2e 0a 2a 2a 20 20 20 20 20 53 52 54 5f 46  rm..**     SRT_F
1e8a0 69 66 6f 20 20 20 20 20 20 20 20 54 68 69 73 20  ifo        This 
1e8b0 69 73 20 6c 69 6b 65 20 53 52 54 5f 45 70 68 65  is like SRT_Ephe
1e8c0 6d 54 61 62 20 65 78 63 65 70 74 20 74 68 61 74  mTab except that
1e8d0 20 74 68 65 20 74 61 62 6c 65 0a 2a 2a 20 20 20   the table.**   
1e8e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e8f0 20 20 69 73 20 61 73 73 75 6d 65 64 20 74 6f 20    is assumed to 
1e900 61 6c 72 65 61 64 79 20 62 65 20 6f 70 65 6e 2e  already be open.
1e910 20 20 53 52 54 5f 46 69 66 6f 20 68 61 73 0a 2a    SRT_Fifo has.*
1e920 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
1e930 20 20 20 20 20 20 74 68 65 20 61 64 64 69 74 69        the additi
1e940 6f 6e 61 6c 20 70 72 6f 70 65 72 74 79 20 6f 66  onal property of
1e950 20 62 65 69 6e 67 20 61 62 6c 65 20 74 6f 20 69   being able to i
1e960 67 6e 6f 72 65 0a 2a 2a 20 20 20 20 20 20 20 20  gnore.**        
1e970 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 65               the
1e980 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73 65   ORDER BY clause
1e990 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f  ..**.**     SRT_
1e9a0 44 69 73 74 46 69 66 6f 20 20 20 20 53 74 6f 72  DistFifo    Stor
1e9b0 65 20 72 65 73 75 6c 74 73 20 69 6e 20 61 20 74  e results in a t
1e9c0 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 20 70  emporary table p
1e9d0 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 2e 0a 2a  Dest->iSDParm..*
1e9e0 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
1e9f0 20 20 20 20 20 20 42 75 74 20 61 6c 73 6f 20 75        But also u
1ea00 73 65 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62  se temporary tab
1ea10 6c 65 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72  le pDest->iSDPar
1ea20 6d 2b 31 20 61 73 0a 2a 2a 20 20 20 20 20 20 20  m+1 as.**       
1ea30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61 20                a 
1ea40 72 65 63 6f 72 64 20 6f 66 20 61 6c 6c 20 70 72  record of all pr
1ea50 69 6f 72 20 72 65 73 75 6c 74 73 20 61 6e 64 20  ior results and 
1ea60 69 67 6e 6f 72 65 20 61 6e 79 20 64 75 70 6c 69  ignore any dupli
1ea70 63 61 74 65 0a 2a 2a 20 20 20 20 20 20 20 20 20  cate.**         
1ea80 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 77 73              rows
1ea90 2e 20 20 4e 61 6d 65 20 6d 65 61 6e 73 3a 20 20  .  Name means:  
1eaa0 22 44 69 73 74 69 6e 63 74 20 46 69 66 6f 22 2e  "Distinct Fifo".
1eab0 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 51  .**.**     SRT_Q
1eac0 75 65 75 65 20 20 20 20 20 20 20 53 74 6f 72 65  ueue       Store
1ead0 20 72 65 73 75 6c 74 73 20 69 6e 20 70 72 69 6f   results in prio
1eae0 72 69 74 79 20 71 75 65 75 65 20 70 44 65 73 74  rity queue pDest
1eaf0 2d 3e 69 53 44 50 61 72 6d 20 28 72 65 61 6c 6c  ->iSDParm (reall
1eb00 79 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  y.**            
1eb10 20 20 20 20 20 20 20 20 20 61 6e 20 69 6e 64 65           an inde
1eb20 78 29 2e 20 20 41 70 70 65 6e 64 20 61 20 73 65  x).  Append a se
1eb30 71 75 65 6e 63 65 20 6e 75 6d 62 65 72 20 73 6f  quence number so
1eb40 20 74 68 61 74 20 61 6c 6c 20 65 6e 74 72 69 65   that all entrie
1eb50 73 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  s.**            
1eb60 20 20 20 20 20 20 20 20 20 61 72 65 20 64 69 73           are dis
1eb70 74 69 6e 63 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 20  tinct..**.**    
1eb80 20 53 52 54 5f 44 69 73 74 51 75 65 75 65 20 20   SRT_DistQueue  
1eb90 20 53 74 6f 72 65 20 72 65 73 75 6c 74 73 20 69   Store results i
1eba0 6e 20 70 72 69 6f 72 69 74 79 20 71 75 65 75 65  n priority queue
1ebb0 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 20   pDest->iSDParm 
1ebc0 6f 6e 6c 79 20 69 66 0a 2a 2a 20 20 20 20 20 20  only if.**      
1ebd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
1ebe0 68 65 20 73 61 6d 65 20 72 65 63 6f 72 64 20 68  he same record h
1ebf0 61 73 20 6e 65 76 65 72 20 62 65 65 6e 20 73 74  as never been st
1ec00 6f 72 65 64 20 62 65 66 6f 72 65 2e 20 20 54 68  ored before.  Th
1ec10 65 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  e.**            
1ec20 20 20 20 20 20 20 20 20 20 69 6e 64 65 78 20 61           index a
1ec30 74 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d  t pDest->iSDParm
1ec40 2b 31 20 68 6f 6c 64 20 61 6c 6c 20 70 72 69 6f  +1 hold all prio
1ec50 72 20 73 74 6f 72 65 73 2e 0a 2a 2f 0a 23 64 65  r stores..*/.#de
1ec60 66 69 6e 65 20 53 52 54 5f 55 6e 69 6f 6e 20 20  fine SRT_Union  
1ec70 20 20 20 20 20 20 31 20 20 2f 2a 20 53 74 6f 72        1  /* Stor
1ec80 65 20 72 65 73 75 6c 74 20 61 73 20 6b 65 79 73  e result as keys
1ec90 20 69 6e 20 61 6e 20 69 6e 64 65 78 20 2a 2f 0a   in an index */.
1eca0 23 64 65 66 69 6e 65 20 53 52 54 5f 45 78 63 65  #define SRT_Exce
1ecb0 70 74 20 20 20 20 20 20 20 32 20 20 2f 2a 20 52  pt       2  /* R
1ecc0 65 6d 6f 76 65 20 72 65 73 75 6c 74 20 66 72 6f  emove result fro
1ecd0 6d 20 61 20 55 4e 49 4f 4e 20 69 6e 64 65 78 20  m a UNION index 
1ece0 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 45  */.#define SRT_E
1ecf0 78 69 73 74 73 20 20 20 20 20 20 20 33 20 20 2f  xists       3  /
1ed00 2a 20 53 74 6f 72 65 20 31 20 69 66 20 74 68 65  * Store 1 if the
1ed10 20 72 65 73 75 6c 74 20 69 73 20 6e 6f 74 20 65   result is not e
1ed20 6d 70 74 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20  mpty */.#define 
1ed30 53 52 54 5f 44 69 73 63 61 72 64 20 20 20 20 20  SRT_Discard     
1ed40 20 34 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 73 61   4  /* Do not sa
1ed50 76 65 20 74 68 65 20 72 65 73 75 6c 74 73 20 61  ve the results a
1ed60 6e 79 77 68 65 72 65 20 2a 2f 0a 23 64 65 66 69  nywhere */.#defi
1ed70 6e 65 20 53 52 54 5f 46 69 66 6f 20 20 20 20 20  ne SRT_Fifo     
1ed80 20 20 20 20 35 20 20 2f 2a 20 53 74 6f 72 65 20      5  /* Store 
1ed90 72 65 73 75 6c 74 20 61 73 20 64 61 74 61 20 77  result as data w
1eda0 69 74 68 20 61 6e 20 61 75 74 6f 6d 61 74 69 63  ith an automatic
1edb0 20 72 6f 77 69 64 20 2a 2f 0a 23 64 65 66 69 6e   rowid */.#defin
1edc0 65 20 53 52 54 5f 44 69 73 74 46 69 66 6f 20 20  e SRT_DistFifo  
1edd0 20 20 20 36 20 20 2f 2a 20 4c 69 6b 65 20 53 52     6  /* Like SR
1ede0 54 5f 46 69 66 6f 2c 20 62 75 74 20 75 6e 69 71  T_Fifo, but uniq
1edf0 75 65 20 72 65 73 75 6c 74 73 20 6f 6e 6c 79 20  ue results only 
1ee00 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 51  */.#define SRT_Q
1ee10 75 65 75 65 20 20 20 20 20 20 20 20 37 20 20 2f  ueue        7  /
1ee20 2a 20 53 74 6f 72 65 20 72 65 73 75 6c 74 20 69  * Store result i
1ee30 6e 20 61 6e 20 71 75 65 75 65 20 2a 2f 0a 23 64  n an queue */.#d
1ee40 65 66 69 6e 65 20 53 52 54 5f 44 69 73 74 51 75  efine SRT_DistQu
1ee50 65 75 65 20 20 20 20 38 20 20 2f 2a 20 4c 69 6b  eue    8  /* Lik
1ee60 65 20 53 52 54 5f 51 75 65 75 65 2c 20 62 75 74  e SRT_Queue, but
1ee70 20 75 6e 69 71 75 65 20 72 65 73 75 6c 74 73 20   unique results 
1ee80 6f 6e 6c 79 20 2a 2f 0a 0a 2f 2a 20 54 68 65 20  only */../* The 
1ee90 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73 65 20  ORDER BY clause 
1eea0 69 73 20 69 67 6e 6f 72 65 64 20 66 6f 72 20 61  is ignored for a
1eeb0 6c 6c 20 6f 66 20 74 68 65 20 61 62 6f 76 65 20  ll of the above 
1eec0 2a 2f 0a 23 64 65 66 69 6e 65 20 49 67 6e 6f 72  */.#define Ignor
1eed0 61 62 6c 65 4f 72 64 65 72 62 79 28 58 29 20 28  ableOrderby(X) (
1eee0 28 58 2d 3e 65 44 65 73 74 29 3c 3d 53 52 54 5f  (X->eDest)<=SRT_
1eef0 44 69 73 74 51 75 65 75 65 29 0a 0a 23 64 65 66  DistQueue)..#def
1ef00 69 6e 65 20 53 52 54 5f 4f 75 74 70 75 74 20 20  ine SRT_Output  
1ef10 20 20 20 20 20 39 20 20 2f 2a 20 4f 75 74 70 75       9  /* Outpu
1ef20 74 20 65 61 63 68 20 72 6f 77 20 6f 66 20 72 65  t each row of re
1ef30 73 75 6c 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20  sult */.#define 
1ef40 53 52 54 5f 4d 65 6d 20 20 20 20 20 20 20 20 20  SRT_Mem         
1ef50 31 30 20 20 2f 2a 20 53 74 6f 72 65 20 72 65 73  10  /* Store res
1ef60 75 6c 74 20 69 6e 20 61 20 6d 65 6d 6f 72 79 20  ult in a memory 
1ef70 63 65 6c 6c 20 2a 2f 0a 23 64 65 66 69 6e 65 20  cell */.#define 
1ef80 53 52 54 5f 53 65 74 20 20 20 20 20 20 20 20 20  SRT_Set         
1ef90 31 31 20 20 2f 2a 20 53 74 6f 72 65 20 72 65 73  11  /* Store res
1efa0 75 6c 74 73 20 61 73 20 6b 65 79 73 20 69 6e 20  ults as keys in 
1efb0 61 6e 20 69 6e 64 65 78 20 2a 2f 0a 23 64 65 66  an index */.#def
1efc0 69 6e 65 20 53 52 54 5f 45 70 68 65 6d 54 61 62  ine SRT_EphemTab
1efd0 20 20 20 20 31 32 20 20 2f 2a 20 43 72 65 61 74      12  /* Creat
1efe0 65 20 74 72 61 6e 73 69 65 6e 74 20 74 61 62 20  e transient tab 
1eff0 61 6e 64 20 73 74 6f 72 65 20 6c 69 6b 65 20 53  and store like S
1f000 52 54 5f 54 61 62 6c 65 20 2a 2f 0a 23 64 65 66  RT_Table */.#def
1f010 69 6e 65 20 53 52 54 5f 43 6f 72 6f 75 74 69 6e  ine SRT_Coroutin
1f020 65 20 20 20 31 33 20 20 2f 2a 20 47 65 6e 65 72  e   13  /* Gener
1f030 61 74 65 20 61 20 73 69 6e 67 6c 65 20 72 6f 77  ate a single row
1f040 20 6f 66 20 72 65 73 75 6c 74 20 2a 2f 0a 23 64   of result */.#d
1f050 65 66 69 6e 65 20 53 52 54 5f 54 61 62 6c 65 20  efine SRT_Table 
1f060 20 20 20 20 20 20 31 34 20 20 2f 2a 20 53 74 6f        14  /* Sto
1f070 72 65 20 72 65 73 75 6c 74 20 61 73 20 64 61 74  re result as dat
1f080 61 20 77 69 74 68 20 61 6e 20 61 75 74 6f 6d 61  a with an automa
1f090 74 69 63 20 72 6f 77 69 64 20 2a 2f 0a 0a 2f 2a  tic rowid */../*
1f0a0 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20  .** An instance 
1f0b0 6f 66 20 74 68 69 73 20 6f 62 6a 65 63 74 20 64  of this object d
1f0c0 65 73 63 72 69 62 65 73 20 77 68 65 72 65 20 74  escribes where t
1f0d0 6f 20 70 75 74 20 6f 66 20 74 68 65 20 72 65 73  o put of the res
1f0e0 75 6c 74 73 20 6f 66 0a 2a 2a 20 61 20 53 45 4c  ults of.** a SEL
1f0f0 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 0a 2a  ECT statement..*
1f100 2f 0a 73 74 72 75 63 74 20 53 65 6c 65 63 74 44  /.struct SelectD
1f110 65 73 74 20 7b 0a 20 20 75 38 20 65 44 65 73 74  est {.  u8 eDest
1f120 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
1f130 48 6f 77 20 74 6f 20 64 69 73 70 6f 73 65 20 6f  How to dispose o
1f140 66 20 74 68 65 20 72 65 73 75 6c 74 73 2e 20 20  f the results.  
1f150 4f 6e 20 6f 66 20 53 52 54 5f 2a 20 61 62 6f 76  On of SRT_* abov
1f160 65 2e 20 2a 2f 0a 20 20 69 6e 74 20 69 53 44 50  e. */.  int iSDP
1f170 61 72 6d 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  arm;         /* 
1f180 41 20 70 61 72 61 6d 65 74 65 72 20 75 73 65 64  A parameter used
1f190 20 62 79 20 74 68 65 20 65 44 65 73 74 20 64 69   by the eDest di
1f1a0 73 70 6f 73 61 6c 20 6d 65 74 68 6f 64 20 2a 2f  sposal method */
1f1b0 0a 20 20 69 6e 74 20 69 53 64 73 74 3b 20 20 20  .  int iSdst;   
1f1c0 20 20 20 20 20 20 20 20 2f 2a 20 42 61 73 65 20          /* Base 
1f1d0 72 65 67 69 73 74 65 72 20 77 68 65 72 65 20 72  register where r
1f1e0 65 73 75 6c 74 73 20 61 72 65 20 77 72 69 74 74  esults are writt
1f1f0 65 6e 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 64 73  en */.  int nSds
1f200 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  t;           /* 
1f210 4e 75 6d 62 65 72 20 6f 66 20 72 65 67 69 73 74  Number of regist
1f220 65 72 73 20 61 6c 6c 6f 63 61 74 65 64 20 2a 2f  ers allocated */
1f230 0a 20 20 63 68 61 72 20 2a 7a 41 66 66 53 64 73  .  char *zAffSds
1f240 74 3b 20 20 20 20 20 20 2f 2a 20 41 66 66 69 6e  t;      /* Affin
1f250 69 74 79 20 75 73 65 64 20 77 68 65 6e 20 65 44  ity used when eD
1f260 65 73 74 3d 3d 53 52 54 5f 53 65 74 20 2a 2f 0a  est==SRT_Set */.
1f270 20 20 45 78 70 72 4c 69 73 74 20 2a 70 4f 72 64    ExprList *pOrd
1f280 65 72 42 79 3b 20 20 2f 2a 20 4b 65 79 20 63 6f  erBy;  /* Key co
1f290 6c 75 6d 6e 73 20 66 6f 72 20 53 52 54 5f 51 75  lumns for SRT_Qu
1f2a0 65 75 65 20 61 6e 64 20 53 52 54 5f 44 69 73 74  eue and SRT_Dist
1f2b0 51 75 65 75 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a  Queue */.};../*.
1f2c0 2a 2a 20 44 75 72 69 6e 67 20 63 6f 64 65 20 67  ** During code g
1f2d0 65 6e 65 72 61 74 69 6f 6e 20 6f 66 20 73 74 61  eneration of sta
1f2e0 74 65 6d 65 6e 74 73 20 74 68 61 74 20 64 6f 20  tements that do 
1f2f0 69 6e 73 65 72 74 73 20 69 6e 74 6f 20 41 55 54  inserts into AUT
1f300 4f 49 4e 43 52 45 4d 45 4e 54 0a 2a 2a 20 74 61  OINCREMENT.** ta
1f310 62 6c 65 73 2c 20 74 68 65 20 66 6f 6c 6c 6f 77  bles, the follow
1f320 69 6e 67 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  ing information 
1f330 69 73 20 61 74 74 61 63 68 65 64 20 74 6f 20 74  is attached to t
1f340 68 65 20 54 61 62 6c 65 2e 75 2e 61 75 74 6f 49  he Table.u.autoI
1f350 6e 63 2e 70 0a 2a 2a 20 70 6f 69 6e 74 65 72 20  nc.p.** pointer 
1f360 6f 66 20 65 61 63 68 20 61 75 74 6f 69 6e 63 72  of each autoincr
1f370 65 6d 65 6e 74 20 74 61 62 6c 65 20 74 6f 20 72  ement table to r
1f380 65 63 6f 72 64 20 73 6f 6d 65 20 73 69 64 65 20  ecord some side 
1f390 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 74 68 61 74  information that
1f3a0 0a 2a 2a 20 74 68 65 20 63 6f 64 65 20 67 65 6e  .** the code gen
1f3b0 65 72 61 74 6f 72 20 6e 65 65 64 73 2e 20 20 57  erator needs.  W
1f3c0 65 20 68 61 76 65 20 74 6f 20 6b 65 65 70 20 70  e have to keep p
1f3d0 65 72 2d 74 61 62 6c 65 20 61 75 74 6f 69 6e 63  er-table autoinc
1f3e0 72 65 6d 65 6e 74 0a 2a 2a 20 69 6e 66 6f 72 6d  rement.** inform
1f3f0 61 74 69 6f 6e 20 69 6e 20 63 61 73 65 20 69 6e  ation in case in
1f400 73 65 72 74 73 20 61 72 65 20 64 6f 6e 65 20 77  serts are done w
1f410 69 74 68 69 6e 20 74 72 69 67 67 65 72 73 2e 20  ithin triggers. 
1f420 20 54 72 69 67 67 65 72 73 20 64 6f 20 6e 6f 74   Triggers do not
1f430 0a 2a 2a 20 6e 6f 72 6d 61 6c 6c 79 20 63 6f 6f  .** normally coo
1f440 72 64 69 6e 61 74 65 20 74 68 65 69 72 20 61 63  rdinate their ac
1f450 74 69 76 69 74 69 65 73 2c 20 62 75 74 20 77 65  tivities, but we
1f460 20 64 6f 20 6e 65 65 64 20 74 6f 20 63 6f 6f 72   do need to coor
1f470 64 69 6e 61 74 65 20 74 68 65 0a 2a 2a 20 6c 6f  dinate the.** lo
1f480 61 64 69 6e 67 20 61 6e 64 20 73 61 76 69 6e 67  ading and saving
1f490 20 6f 66 20 61 75 74 6f 69 6e 63 72 65 6d 65 6e   of autoincremen
1f4a0 74 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a  t information..*
1f4b0 2f 0a 73 74 72 75 63 74 20 41 75 74 6f 69 6e 63  /.struct Autoinc
1f4c0 49 6e 66 6f 20 7b 0a 20 20 41 75 74 6f 69 6e 63  Info {.  Autoinc
1f4d0 49 6e 66 6f 20 2a 70 4e 65 78 74 3b 20 20 20 2f  Info *pNext;   /
1f4e0 2a 20 4e 65 78 74 20 69 6e 66 6f 20 62 6c 6f 63  * Next info bloc
1f4f0 6b 20 69 6e 20 61 20 6c 69 73 74 20 6f 66 20 74  k in a list of t
1f500 68 65 6d 20 61 6c 6c 20 2a 2f 0a 20 20 54 61 62  hem all */.  Tab
1f510 6c 65 20 2a 70 54 61 62 3b 20 20 20 20 20 20 20  le *pTab;       
1f520 20 20 20 2f 2a 20 54 61 62 6c 65 20 74 68 69 73     /* Table this
1f530 20 69 6e 66 6f 20 62 6c 6f 63 6b 20 72 65 66 65   info block refe
1f540 72 73 20 74 6f 20 2a 2f 0a 20 20 69 6e 74 20 69  rs to */.  int i
1f550 44 62 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  Db;             
1f560 20 2f 2a 20 49 6e 64 65 78 20 69 6e 20 73 71 6c   /* Index in sql
1f570 69 74 65 33 2e 61 44 62 5b 5d 20 6f 66 20 64 61  ite3.aDb[] of da
1f580 74 61 62 61 73 65 20 68 6f 6c 64 69 6e 67 20 70  tabase holding p
1f590 54 61 62 20 2a 2f 0a 20 20 69 6e 74 20 72 65 67  Tab */.  int reg
1f5a0 43 74 72 3b 20 20 20 20 20 20 20 20 20 20 20 2f  Ctr;           /
1f5b0 2a 20 4d 65 6d 6f 72 79 20 72 65 67 69 73 74 65  * Memory registe
1f5c0 72 20 68 6f 6c 64 69 6e 67 20 74 68 65 20 72 6f  r holding the ro
1f5d0 77 69 64 20 63 6f 75 6e 74 65 72 20 2a 2f 0a 7d  wid counter */.}
1f5e0 3b 0a 0a 2f 2a 0a 2a 2a 20 41 74 20 6c 65 61 73  ;../*.** At leas
1f5f0 74 20 6f 6e 65 20 69 6e 73 74 61 6e 63 65 20 6f  t one instance o
1f600 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  f the following 
1f610 73 74 72 75 63 74 75 72 65 20 69 73 20 63 72 65  structure is cre
1f620 61 74 65 64 20 66 6f 72 20 65 61 63 68 0a 2a 2a  ated for each.**
1f630 20 74 72 69 67 67 65 72 20 74 68 61 74 20 6d 61   trigger that ma
1f640 79 20 62 65 20 66 69 72 65 64 20 77 68 69 6c 65  y be fired while
1f650 20 70 61 72 73 69 6e 67 20 61 6e 20 49 4e 53 45   parsing an INSE
1f660 52 54 2c 20 55 50 44 41 54 45 20 6f 72 20 44 45  RT, UPDATE or DE
1f670 4c 45 54 45 0a 2a 2a 20 73 74 61 74 65 6d 65 6e  LETE.** statemen
1f680 74 2e 20 41 6c 6c 20 73 75 63 68 20 6f 62 6a 65  t. All such obje
1f690 63 74 73 20 61 72 65 20 73 74 6f 72 65 64 20 69  cts are stored i
1f6a0 6e 20 74 68 65 20 6c 69 6e 6b 65 64 20 6c 69 73  n the linked lis
1f6b0 74 20 68 65 61 64 65 64 20 61 74 0a 2a 2a 20 50  t headed at.** P
1f6c0 61 72 73 65 2e 70 54 72 69 67 67 65 72 50 72 67  arse.pTriggerPrg
1f6d0 20 61 6e 64 20 64 65 6c 65 74 65 64 20 6f 6e 63   and deleted onc
1f6e0 65 20 73 74 61 74 65 6d 65 6e 74 20 63 6f 6d 70  e statement comp
1f6f0 69 6c 61 74 69 6f 6e 20 68 61 73 20 62 65 65 6e  ilation has been
1f700 0a 2a 2a 20 63 6f 6d 70 6c 65 74 65 64 2e 0a 2a  .** completed..*
1f710 2a 0a 2a 2a 20 41 20 56 64 62 65 20 73 75 62 2d  *.** A Vdbe sub-
1f720 70 72 6f 67 72 61 6d 20 74 68 61 74 20 69 6d 70  program that imp
1f730 6c 65 6d 65 6e 74 73 20 74 68 65 20 62 6f 64 79  lements the body
1f740 20 61 6e 64 20 57 48 45 4e 20 63 6c 61 75 73 65   and WHEN clause
1f750 20 6f 66 20 74 72 69 67 67 65 72 0a 2a 2a 20 54   of trigger.** T
1f760 72 69 67 67 65 72 50 72 67 2e 70 54 72 69 67 67  riggerPrg.pTrigg
1f770 65 72 2c 20 61 73 73 75 6d 69 6e 67 20 61 20 64  er, assuming a d
1f780 65 66 61 75 6c 74 20 4f 4e 20 43 4f 4e 46 4c 49  efault ON CONFLI
1f790 43 54 20 63 6c 61 75 73 65 20 6f 66 0a 2a 2a 20  CT clause of.** 
1f7a0 54 72 69 67 67 65 72 50 72 67 2e 6f 72 63 6f 6e  TriggerPrg.orcon
1f7b0 66 2c 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20  f, is stored in 
1f7c0 74 68 65 20 54 72 69 67 67 65 72 50 72 67 2e 70  the TriggerPrg.p
1f7d0 50 72 6f 67 72 61 6d 20 76 61 72 69 61 62 6c 65  Program variable
1f7e0 2e 0a 2a 2a 20 54 68 65 20 50 61 72 73 65 2e 70  ..** The Parse.p
1f7f0 54 72 69 67 67 65 72 50 72 67 20 6c 69 73 74 20  TriggerPrg list 
1f800 6e 65 76 65 72 20 63 6f 6e 74 61 69 6e 73 20 74  never contains t
1f810 77 6f 20 65 6e 74 72 69 65 73 20 77 69 74 68 20  wo entries with 
1f820 74 68 65 20 73 61 6d 65 0a 2a 2a 20 76 61 6c 75  the same.** valu
1f830 65 73 20 66 6f 72 20 62 6f 74 68 20 70 54 72 69  es for both pTri
1f840 67 67 65 72 20 61 6e 64 20 6f 72 63 6f 6e 66 2e  gger and orconf.
1f850 0a 2a 2a 0a 2a 2a 20 54 68 65 20 54 72 69 67 67  .**.** The Trigg
1f860 65 72 50 72 67 2e 61 43 6f 6c 6d 61 73 6b 5b 30  erPrg.aColmask[0
1f870 5d 20 76 61 72 69 61 62 6c 65 20 69 73 20 73 65  ] variable is se
1f880 74 20 74 6f 20 61 20 6d 61 73 6b 20 6f 66 20 6f  t to a mask of o
1f890 6c 64 2e 2a 20 63 6f 6c 75 6d 6e 73 0a 2a 2a 20  ld.* columns.** 
1f8a0 61 63 63 65 73 73 65 64 20 28 6f 72 20 73 65 74  accessed (or set
1f8b0 20 74 6f 20 30 20 66 6f 72 20 74 72 69 67 67 65   to 0 for trigge
1f8c0 72 73 20 66 69 72 65 64 20 61 73 20 61 20 72 65  rs fired as a re
1f8d0 73 75 6c 74 20 6f 66 20 49 4e 53 45 52 54 0a 2a  sult of INSERT.*
1f8e0 2a 20 73 74 61 74 65 6d 65 6e 74 73 29 2e 20 53  * statements). S
1f8f0 69 6d 69 6c 61 72 6c 79 2c 20 74 68 65 20 54 72  imilarly, the Tr
1f900 69 67 67 65 72 50 72 67 2e 61 43 6f 6c 6d 61 73  iggerPrg.aColmas
1f910 6b 5b 31 5d 20 76 61 72 69 61 62 6c 65 20 69 73  k[1] variable is
1f920 20 73 65 74 20 74 6f 0a 2a 2a 20 61 20 6d 61 73   set to.** a mas
1f930 6b 20 6f 66 20 6e 65 77 2e 2a 20 63 6f 6c 75 6d  k of new.* colum
1f940 6e 73 20 75 73 65 64 20 62 79 20 74 68 65 20 70  ns used by the p
1f950 72 6f 67 72 61 6d 2e 0a 2a 2f 0a 73 74 72 75 63  rogram..*/.struc
1f960 74 20 54 72 69 67 67 65 72 50 72 67 20 7b 0a 20  t TriggerPrg {. 
1f970 20 54 72 69 67 67 65 72 20 2a 70 54 72 69 67 67   Trigger *pTrigg
1f980 65 72 3b 20 20 20 20 20 20 2f 2a 20 54 72 69 67  er;      /* Trig
1f990 67 65 72 20 74 68 69 73 20 70 72 6f 67 72 61 6d  ger this program
1f9a0 20 77 61 73 20 63 6f 64 65 64 20 66 72 6f 6d 20   was coded from 
1f9b0 2a 2f 0a 20 20 54 72 69 67 67 65 72 50 72 67 20  */.  TriggerPrg 
1f9c0 2a 70 4e 65 78 74 3b 20 20 20 20 20 20 2f 2a 20  *pNext;      /* 
1f9d0 4e 65 78 74 20 65 6e 74 72 79 20 69 6e 20 50 61  Next entry in Pa
1f9e0 72 73 65 2e 70 54 72 69 67 67 65 72 50 72 67 20  rse.pTriggerPrg 
1f9f0 6c 69 73 74 20 2a 2f 0a 20 20 53 75 62 50 72 6f  list */.  SubPro
1fa00 67 72 61 6d 20 2a 70 50 72 6f 67 72 61 6d 3b 20  gram *pProgram; 
1fa10 20 20 2f 2a 20 50 72 6f 67 72 61 6d 20 69 6d 70    /* Program imp
1fa20 6c 65 6d 65 6e 74 69 6e 67 20 70 54 72 69 67 67  lementing pTrigg
1fa30 65 72 2f 6f 72 63 6f 6e 66 20 2a 2f 0a 20 20 69  er/orconf */.  i
1fa40 6e 74 20 6f 72 63 6f 6e 66 3b 20 20 20 20 20 20  nt orconf;      
1fa50 20 20 20 20 20 20 20 2f 2a 20 44 65 66 61 75 6c         /* Defaul
1fa60 74 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 70 6f  t ON CONFLICT po
1fa70 6c 69 63 79 20 2a 2f 0a 20 20 75 33 32 20 61 43  licy */.  u32 aC
1fa80 6f 6c 6d 61 73 6b 5b 32 5d 3b 20 20 20 20 20 20  olmask[2];      
1fa90 20 20 2f 2a 20 4d 61 73 6b 73 20 6f 66 20 6f 6c    /* Masks of ol
1faa0 64 2e 2a 2c 20 6e 65 77 2e 2a 20 63 6f 6c 75 6d  d.*, new.* colum
1fab0 6e 73 20 61 63 63 65 73 73 65 64 20 2a 2f 0a 7d  ns accessed */.}
1fac0 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 79 44 62  ;../*.** The yDb
1fad0 4d 61 73 6b 20 64 61 74 61 74 79 70 65 20 66 6f  Mask datatype fo
1fae0 72 20 74 68 65 20 62 69 74 6d 61 73 6b 20 6f 66  r the bitmask of
1faf0 20 61 6c 6c 20 61 74 74 61 63 68 65 64 20 64 61   all attached da
1fb00 74 61 62 61 73 65 73 2e 0a 2a 2f 0a 23 69 66 20  tabases..*/.#if 
1fb10 53 51 4c 49 54 45 5f 4d 41 58 5f 41 54 54 41 43  SQLITE_MAX_ATTAC
1fb20 48 45 44 3e 33 30 0a 20 20 74 79 70 65 64 65 66  HED>30.  typedef
1fb30 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 79   unsigned char y
1fb40 44 62 4d 61 73 6b 5b 28 53 51 4c 49 54 45 5f 4d  DbMask[(SQLITE_M
1fb50 41 58 5f 41 54 54 41 43 48 45 44 2b 39 29 2f 38  AX_ATTACHED+9)/8
1fb60 5d 3b 0a 23 20 64 65 66 69 6e 65 20 44 62 4d 61  ];.# define DbMa
1fb70 73 6b 54 65 73 74 28 4d 2c 49 29 20 20 20 20 28  skTest(M,I)    (
1fb80 28 28 4d 29 5b 28 49 29 2f 38 5d 26 28 31 3c 3c  ((M)[(I)/8]&(1<<
1fb90 28 28 49 29 26 37 29 29 29 21 3d 30 29 0a 23 20  ((I)&7)))!=0).# 
1fba0 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 5a 65 72  define DbMaskZer
1fbb0 6f 28 4d 29 20 20 20 20 20 20 6d 65 6d 73 65 74  o(M)      memset
1fbc0 28 28 4d 29 2c 30 2c 73 69 7a 65 6f 66 28 4d 29  ((M),0,sizeof(M)
1fbd0 29 0a 23 20 64 65 66 69 6e 65 20 44 62 4d 61 73  ).# define DbMas
1fbe0 6b 53 65 74 28 4d 2c 49 29 20 20 20 20 20 28 4d  kSet(M,I)     (M
1fbf0 29 5b 28 49 29 2f 38 5d 7c 3d 28 31 3c 3c 28 28  )[(I)/8]|=(1<<((
1fc00 49 29 26 37 29 29 0a 23 20 64 65 66 69 6e 65 20  I)&7)).# define 
1fc10 44 62 4d 61 73 6b 41 6c 6c 5a 65 72 6f 28 4d 29  DbMaskAllZero(M)
1fc20 20 20 20 73 71 6c 69 74 65 33 44 62 4d 61 73 6b     sqlite3DbMask
1fc30 41 6c 6c 5a 65 72 6f 28 4d 29 0a 23 20 64 65 66  AllZero(M).# def
1fc40 69 6e 65 20 44 62 4d 61 73 6b 4e 6f 6e 5a 65 72  ine DbMaskNonZer
1fc50 6f 28 4d 29 20 20 20 28 73 71 6c 69 74 65 33 44  o(M)   (sqlite3D
1fc60 62 4d 61 73 6b 41 6c 6c 5a 65 72 6f 28 4d 29 3d  bMaskAllZero(M)=
1fc70 3d 30 29 0a 23 65 6c 73 65 0a 20 20 74 79 70 65  =0).#else.  type
1fc80 64 65 66 20 75 6e 73 69 67 6e 65 64 20 69 6e 74  def unsigned int
1fc90 20 79 44 62 4d 61 73 6b 3b 0a 23 20 64 65 66 69   yDbMask;.# defi
1fca0 6e 65 20 44 62 4d 61 73 6b 54 65 73 74 28 4d 2c  ne DbMaskTest(M,
1fcb0 49 29 20 20 20 20 28 28 28 4d 29 26 28 28 28 79  I)    (((M)&(((y
1fcc0 44 62 4d 61 73 6b 29 31 29 3c 3c 28 49 29 29 29  DbMask)1)<<(I)))
1fcd0 21 3d 30 29 0a 23 20 64 65 66 69 6e 65 20 44 62  !=0).# define Db
1fce0 4d 61 73 6b 5a 65 72 6f 28 4d 29 20 20 20 20 20  MaskZero(M)     
1fcf0 20 28 4d 29 3d 30 0a 23 20 64 65 66 69 6e 65 20   (M)=0.# define 
1fd00 44 62 4d 61 73 6b 53 65 74 28 4d 2c 49 29 20 20  DbMaskSet(M,I)  
1fd10 20 20 20 28 4d 29 7c 3d 28 28 28 79 44 62 4d 61     (M)|=(((yDbMa
1fd20 73 6b 29 31 29 3c 3c 28 49 29 29 0a 23 20 64 65  sk)1)<<(I)).# de
1fd30 66 69 6e 65 20 44 62 4d 61 73 6b 41 6c 6c 5a 65  fine DbMaskAllZe
1fd40 72 6f 28 4d 29 20 20 20 28 4d 29 3d 3d 30 0a 23  ro(M)   (M)==0.#
1fd50 20 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 4e 6f   define DbMaskNo
1fd60 6e 5a 65 72 6f 28 4d 29 20 20 20 28 4d 29 21 3d  nZero(M)   (M)!=
1fd70 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  0.#endif../*.** 
1fd80 41 6e 20 53 51 4c 20 70 61 72 73 65 72 20 63 6f  An SQL parser co
1fd90 6e 74 65 78 74 2e 20 20 41 20 63 6f 70 79 20 6f  ntext.  A copy o
1fda0 66 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65  f this structure
1fdb0 20 69 73 20 70 61 73 73 65 64 20 74 68 72 6f 75   is passed throu
1fdc0 67 68 0a 2a 2a 20 74 68 65 20 70 61 72 73 65 72  gh.** the parser
1fdd0 20 61 6e 64 20 64 6f 77 6e 20 69 6e 74 6f 20 61   and down into a
1fde0 6c 6c 20 74 68 65 20 70 61 72 73 65 72 20 61 63  ll the parser ac
1fdf0 74 69 6f 6e 20 72 6f 75 74 69 6e 65 20 69 6e 20  tion routine in 
1fe00 6f 72 64 65 72 20 74 6f 0a 2a 2a 20 63 61 72 72  order to.** carr
1fe10 79 20 61 72 6f 75 6e 64 20 69 6e 66 6f 72 6d 61  y around informa
1fe20 74 69 6f 6e 20 74 68 61 74 20 69 73 20 67 6c 6f  tion that is glo
1fe30 62 61 6c 20 74 6f 20 74 68 65 20 65 6e 74 69 72  bal to the entir
1fe40 65 20 70 61 72 73 65 2e 0a 2a 2a 0a 2a 2a 20 54  e parse..**.** T
1fe50 68 65 20 73 74 72 75 63 74 75 72 65 20 69 73 20  he structure is 
1fe60 64 69 76 69 64 65 64 20 69 6e 74 6f 20 74 77 6f  divided into two
1fe70 20 70 61 72 74 73 2e 20 20 57 68 65 6e 20 74 68   parts.  When th
1fe80 65 20 70 61 72 73 65 72 20 61 6e 64 20 63 6f 64  e parser and cod
1fe90 65 0a 2a 2a 20 67 65 6e 65 72 61 74 65 20 63 61  e.** generate ca
1fea0 6c 6c 20 74 68 65 6d 73 65 6c 76 65 73 20 72 65  ll themselves re
1feb0 63 75 72 73 69 76 65 6c 79 2c 20 74 68 65 20 66  cursively, the f
1fec0 69 72 73 74 20 70 61 72 74 20 6f 66 20 74 68 65  irst part of the
1fed0 20 73 74 72 75 63 74 75 72 65 0a 2a 2a 20 69 73   structure.** is
1fee0 20 63 6f 6e 73 74 61 6e 74 20 62 75 74 20 74 68   constant but th
1fef0 65 20 73 65 63 6f 6e 64 20 70 61 72 74 20 69 73  e second part is
1ff00 20 72 65 73 65 74 20 61 74 20 74 68 65 20 62 65   reset at the be
1ff10 67 69 6e 6e 69 6e 67 20 61 6e 64 20 65 6e 64 20  ginning and end 
1ff20 6f 66 0a 2a 2a 20 65 61 63 68 20 72 65 63 75 72  of.** each recur
1ff30 73 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  sion..**.** The 
1ff40 6e 54 61 62 6c 65 4c 6f 63 6b 20 61 6e 64 20 61  nTableLock and a
1ff50 54 61 62 6c 65 4c 6f 63 6b 20 76 61 72 69 61 62  TableLock variab
1ff60 6c 65 73 20 61 72 65 20 6f 6e 6c 79 20 75 73 65  les are only use
1ff70 64 20 69 66 20 74 68 65 20 73 68 61 72 65 64 2d  d if the shared-
1ff80 63 61 63 68 65 0a 2a 2a 20 66 65 61 74 75 72 65  cache.** feature
1ff90 20 69 73 20 65 6e 61 62 6c 65 64 20 28 69 66 20   is enabled (if 
1ffa0 73 71 6c 69 74 65 33 54 73 64 28 29 2d 3e 75 73  sqlite3Tsd()->us
1ffb0 65 53 68 61 72 65 64 44 61 74 61 20 69 73 20 74  eSharedData is t
1ffc0 72 75 65 29 2e 20 54 68 65 79 20 61 72 65 0a 2a  rue). They are.*
1ffd0 2a 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20  * used to store 
1ffe0 74 68 65 20 73 65 74 20 6f 66 20 74 61 62 6c 65  the set of table
1fff0 2d 6c 6f 63 6b 73 20 72 65 71 75 69 72 65 64 20  -locks required 
20000 62 79 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74  by the statement
20010 20 62 65 69 6e 67 0a 2a 2a 20 63 6f 6d 70 69 6c   being.** compil
20020 65 64 2e 20 46 75 6e 63 74 69 6f 6e 20 73 71 6c  ed. Function sql
20030 69 74 65 33 54 61 62 6c 65 4c 6f 63 6b 28 29 20  ite3TableLock() 
20040 69 73 20 75 73 65 64 20 74 6f 20 61 64 64 20 65  is used to add e
20050 6e 74 72 69 65 73 20 74 6f 20 74 68 65 0a 2a 2a  ntries to the.**
20060 20 6c 69 73 74 2e 0a 2a 2f 0a 73 74 72 75 63 74   list..*/.struct
20070 20 50 61 72 73 65 20 7b 0a 20 20 73 71 6c 69 74   Parse {.  sqlit
20080 65 33 20 2a 64 62 3b 20 20 20 20 20 20 20 20 20  e3 *db;         
20090 2f 2a 20 54 68 65 20 6d 61 69 6e 20 64 61 74 61  /* The main data
200a0 62 61 73 65 20 73 74 72 75 63 74 75 72 65 20 2a  base structure *
200b0 2f 0a 20 20 63 68 61 72 20 2a 7a 45 72 72 4d 73  /.  char *zErrMs
200c0 67 3b 20 20 20 20 20 20 20 2f 2a 20 41 6e 20 65  g;       /* An e
200d0 72 72 6f 72 20 6d 65 73 73 61 67 65 20 2a 2f 0a  rror message */.
200e0 20 20 56 64 62 65 20 2a 70 56 64 62 65 3b 20 20    Vdbe *pVdbe;  
200f0 20 20 20 20 20 20 20 2f 2a 20 41 6e 20 65 6e 67         /* An eng
20100 69 6e 65 20 66 6f 72 20 65 78 65 63 75 74 69 6e  ine for executin
20110 67 20 64 61 74 61 62 61 73 65 20 62 79 74 65 63  g database bytec
20120 6f 64 65 20 2a 2f 0a 20 20 69 6e 74 20 72 63 3b  ode */.  int rc;
20130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
20140 20 52 65 74 75 72 6e 20 63 6f 64 65 20 66 72 6f   Return code fro
20150 6d 20 65 78 65 63 75 74 69 6f 6e 20 2a 2f 0a 20  m execution */. 
20160 20 75 38 20 63 6f 6c 4e 61 6d 65 73 53 65 74 3b   u8 colNamesSet;
20170 20 20 20 20 20 20 2f 2a 20 54 52 55 45 20 61 66        /* TRUE af
20180 74 65 72 20 4f 50 5f 43 6f 6c 75 6d 6e 4e 61 6d  ter OP_ColumnNam
20190 65 20 68 61 73 20 62 65 65 6e 20 69 73 73 75 65  e has been issue
201a0 64 20 74 6f 20 70 56 64 62 65 20 2a 2f 0a 20 20  d to pVdbe */.  
201b0 75 38 20 63 68 65 63 6b 53 63 68 65 6d 61 3b 20  u8 checkSchema; 
201c0 20 20 20 20 20 2f 2a 20 43 61 75 73 65 73 20 73       /* Causes s
201d0 63 68 65 6d 61 20 63 6f 6f 6b 69 65 20 63 68 65  chema cookie che
201e0 63 6b 20 61 66 74 65 72 20 61 6e 20 65 72 72 6f  ck after an erro
201f0 72 20 2a 2f 0a 20 20 75 38 20 6e 65 73 74 65 64  r */.  u8 nested
20200 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e  ;           /* N
20210 75 6d 62 65 72 20 6f 66 20 6e 65 73 74 65 64 20  umber of nested 
20220 63 61 6c 6c 73 20 74 6f 20 74 68 65 20 70 61 72  calls to the par
20230 73 65 72 2f 63 6f 64 65 20 67 65 6e 65 72 61 74  ser/code generat
20240 6f 72 20 2a 2f 0a 20 20 75 38 20 6e 54 65 6d 70  or */.  u8 nTemp
20250 52 65 67 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  Reg;         /* 
20260 4e 75 6d 62 65 72 20 6f 66 20 74 65 6d 70 6f 72  Number of tempor
20270 61 72 79 20 72 65 67 69 73 74 65 72 73 20 69 6e  ary registers in
20280 20 61 54 65 6d 70 52 65 67 5b 5d 20 2a 2f 0a 20   aTempReg[] */. 
20290 20 75 38 20 69 73 4d 75 6c 74 69 57 72 69 74 65   u8 isMultiWrite
202a0 3b 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66  ;     /* True if
202b0 20 73 74 61 74 65 6d 65 6e 74 20 6d 61 79 20 6d   statement may m
202c0 6f 64 69 66 79 2f 69 6e 73 65 72 74 20 6d 75 6c  odify/insert mul
202d0 74 69 70 6c 65 20 72 6f 77 73 20 2a 2f 0a 20 20  tiple rows */.  
202e0 75 38 20 6d 61 79 41 62 6f 72 74 3b 20 20 20 20  u8 mayAbort;    
202f0 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20       /* True if 
20300 73 74 61 74 65 6d 65 6e 74 20 6d 61 79 20 74 68  statement may th
20310 72 6f 77 20 61 6e 20 41 42 4f 52 54 20 65 78 63  row an ABORT exc
20320 65 70 74 69 6f 6e 20 2a 2f 0a 20 20 75 38 20 68  eption */.  u8 h
20330 61 73 43 6f 6d 70 6f 75 6e 64 3b 20 20 20 20 20  asCompound;     
20340 20 2f 2a 20 4e 65 65 64 20 74 6f 20 69 6e 76 6f   /* Need to invo
20350 6b 65 20 63 6f 6e 76 65 72 74 43 6f 6d 70 6f 75  ke convertCompou
20360 6e 64 53 65 6c 65 63 74 54 6f 53 75 62 71 75 65  ndSelectToSubque
20370 72 79 28 29 20 2a 2f 0a 20 20 75 38 20 6f 6b 43  ry() */.  u8 okC
20380 6f 6e 73 74 46 61 63 74 6f 72 3b 20 20 20 20 2f  onstFactor;    /
20390 2a 20 4f 4b 20 74 6f 20 66 61 63 74 6f 72 20 6f  * OK to factor o
203a0 75 74 20 63 6f 6e 73 74 61 6e 74 73 20 2a 2f 0a  ut constants */.
203b0 20 20 75 38 20 64 69 73 61 62 6c 65 4c 6f 6f 6b    u8 disableLook
203c0 61 73 69 64 65 3b 20 2f 2a 20 4e 75 6d 62 65 72  aside; /* Number
203d0 20 6f 66 20 74 69 6d 65 73 20 6c 6f 6f 6b 61 73   of times lookas
203e0 69 64 65 20 68 61 73 20 62 65 65 6e 20 64 69 73  ide has been dis
203f0 61 62 6c 65 64 20 2a 2f 0a 20 20 69 6e 74 20 6e  abled */.  int n
20400 52 61 6e 67 65 52 65 67 3b 20 20 20 20 20 20 20  RangeReg;       
20410 2f 2a 20 53 69 7a 65 20 6f 66 20 74 68 65 20 74  /* Size of the t
20420 65 6d 70 6f 72 61 72 79 20 72 65 67 69 73 74 65  emporary registe
20430 72 20 62 6c 6f 63 6b 20 2a 2f 0a 20 20 69 6e 74  r block */.  int
20440 20 69 52 61 6e 67 65 52 65 67 3b 20 20 20 20 20   iRangeReg;     
20450 20 20 2f 2a 20 46 69 72 73 74 20 72 65 67 69 73    /* First regis
20460 74 65 72 20 69 6e 20 74 65 6d 70 6f 72 61 72 79  ter in temporary
20470 20 72 65 67 69 73 74 65 72 20 62 6c 6f 63 6b 20   register block 
20480 2a 2f 0a 20 20 69 6e 74 20 6e 45 72 72 3b 20 20  */.  int nErr;  
20490 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
204a0 62 65 72 20 6f 66 20 65 72 72 6f 72 73 20 73 65  ber of errors se
204b0 65 6e 20 2a 2f 0a 20 20 69 6e 74 20 6e 54 61 62  en */.  int nTab
204c0 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
204d0 4e 75 6d 62 65 72 20 6f 66 20 70 72 65 76 69 6f  Number of previo
204e0 75 73 6c 79 20 61 6c 6c 6f 63 61 74 65 64 20 56  usly allocated V
204f0 44 42 45 20 63 75 72 73 6f 72 73 20 2a 2f 0a 20  DBE cursors */. 
20500 20 69 6e 74 20 6e 4d 65 6d 3b 20 20 20 20 20 20   int nMem;      
20510 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
20520 6f 66 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 73 20  of memory cells 
20530 75 73 65 64 20 73 6f 20 66 61 72 20 2a 2f 0a 20  used so far */. 
20540 20 69 6e 74 20 6e 4f 70 41 6c 6c 6f 63 3b 20 20   int nOpAlloc;  
20550 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
20560 6f 66 20 73 6c 6f 74 73 20 61 6c 6c 6f 63 61 74  of slots allocat
20570 65 64 20 66 6f 72 20 56 64 62 65 2e 61 4f 70 5b  ed for Vdbe.aOp[
20580 5d 20 2a 2f 0a 20 20 69 6e 74 20 73 7a 4f 70 41  ] */.  int szOpA
20590 6c 6c 6f 63 3b 20 20 20 20 20 20 20 2f 2a 20 42  lloc;       /* B
205a0 79 74 65 73 20 6f 66 20 6d 65 6d 6f 72 79 20 73  ytes of memory s
205b0 70 61 63 65 20 61 6c 6c 6f 63 61 74 65 64 20 66  pace allocated f
205c0 6f 72 20 56 64 62 65 2e 61 4f 70 5b 5d 20 2a 2f  or Vdbe.aOp[] */
205d0 0a 20 20 69 6e 74 20 69 53 65 6c 66 54 61 62 3b  .  int iSelfTab;
205e0 20 20 20 20 20 20 20 20 2f 2a 20 54 61 62 6c 65          /* Table
205f0 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68   associated with
20600 20 61 6e 20 69 6e 64 65 78 20 6f 6e 20 65 78 70   an index on exp
20610 72 2c 20 6f 72 20 6e 65 67 61 74 69 76 65 0a 20  r, or negative. 
20620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20630 20 20 20 20 20 20 2a 2a 20 6f 66 20 74 68 65 20        ** of the 
20640 62 61 73 65 20 72 65 67 69 73 74 65 72 20 64 75  base register du
20650 72 69 6e 67 20 63 68 65 63 6b 2d 63 6f 6e 73 74  ring check-const
20660 72 61 69 6e 74 20 65 76 61 6c 20 2a 2f 0a 20 20  raint eval */.  
20670 69 6e 74 20 6e 4c 61 62 65 6c 3b 20 20 20 20 20  int nLabel;     
20680 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
20690 66 20 6c 61 62 65 6c 73 20 75 73 65 64 20 2a 2f  f labels used */
206a0 0a 20 20 69 6e 74 20 2a 61 4c 61 62 65 6c 3b 20  .  int *aLabel; 
206b0 20 20 20 20 20 20 20 20 2f 2a 20 53 70 61 63 65          /* Space
206c0 20 74 6f 20 68 6f 6c 64 20 74 68 65 20 6c 61 62   to hold the lab
206d0 65 6c 73 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73  els */.  ExprLis
206e0 74 20 2a 70 43 6f 6e 73 74 45 78 70 72 3b 2f 2a  t *pConstExpr;/*
206f0 20 43 6f 6e 73 74 61 6e 74 20 65 78 70 72 65 73   Constant expres
20700 73 69 6f 6e 73 20 2a 2f 0a 20 20 54 6f 6b 65 6e  sions */.  Token
20710 20 63 6f 6e 73 74 72 61 69 6e 74 4e 61 6d 65 3b   constraintName;
20720 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65 20 63  /* Name of the c
20730 6f 6e 73 74 72 61 69 6e 74 20 63 75 72 72 65 6e  onstraint curren
20740 74 6c 79 20 62 65 69 6e 67 20 70 61 72 73 65 64  tly being parsed
20750 20 2a 2f 0a 20 20 79 44 62 4d 61 73 6b 20 77 72   */.  yDbMask wr
20760 69 74 65 4d 61 73 6b 3b 20 20 20 2f 2a 20 53 74  iteMask;   /* St
20770 61 72 74 20 61 20 77 72 69 74 65 20 74 72 61 6e  art a write tran
20780 73 61 63 74 69 6f 6e 20 6f 6e 20 74 68 65 73 65  saction on these
20790 20 64 61 74 61 62 61 73 65 73 20 2a 2f 0a 20 20   databases */.  
207a0 79 44 62 4d 61 73 6b 20 63 6f 6f 6b 69 65 4d 61  yDbMask cookieMa
207b0 73 6b 3b 20 20 2f 2a 20 42 69 74 6d 61 73 6b 20  sk;  /* Bitmask 
207c0 6f 66 20 73 63 68 65 6d 61 20 76 65 72 69 66 69  of schema verifi
207d0 65 64 20 64 61 74 61 62 61 73 65 73 20 2a 2f 0a  ed databases */.
207e0 20 20 69 6e 74 20 72 65 67 52 6f 77 69 64 3b 20    int regRowid; 
207f0 20 20 20 20 20 20 20 2f 2a 20 52 65 67 69 73 74         /* Regist
20800 65 72 20 68 6f 6c 64 69 6e 67 20 72 6f 77 69 64  er holding rowid
20810 20 6f 66 20 43 52 45 41 54 45 20 54 41 42 4c 45   of CREATE TABLE
20820 20 65 6e 74 72 79 20 2a 2f 0a 20 20 69 6e 74 20   entry */.  int 
20830 72 65 67 52 6f 6f 74 3b 20 20 20 20 20 20 20 20  regRoot;        
20840 20 2f 2a 20 52 65 67 69 73 74 65 72 20 68 6f 6c   /* Register hol
20850 64 69 6e 67 20 72 6f 6f 74 20 70 61 67 65 20 6e  ding root page n
20860 75 6d 62 65 72 20 66 6f 72 20 6e 65 77 20 6f 62  umber for new ob
20870 6a 65 63 74 73 20 2a 2f 0a 20 20 69 6e 74 20 6e  jects */.  int n
20880 4d 61 78 41 72 67 3b 20 20 20 20 20 20 20 20 20  MaxArg;         
20890 2f 2a 20 4d 61 78 20 61 72 67 73 20 70 61 73 73  /* Max args pass
208a0 65 64 20 74 6f 20 75 73 65 72 20 66 75 6e 63 74  ed to user funct
208b0 69 6f 6e 20 62 79 20 73 75 62 2d 70 72 6f 67 72  ion by sub-progr
208c0 61 6d 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 65 6c  am */.  int nSel
208d0 65 63 74 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  ect;         /* 
208e0 4e 75 6d 62 65 72 20 6f 66 20 53 45 4c 45 43 54  Number of SELECT
208f0 20 73 74 6d 74 73 2e 20 43 6f 75 6e 74 65 72 20   stmts. Counter 
20900 66 6f 72 20 53 65 6c 65 63 74 2e 73 65 6c 49 64  for Select.selId
20910 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49   */.#ifndef SQLI
20920 54 45 5f 4f 4d 49 54 5f 53 48 41 52 45 44 5f 43  TE_OMIT_SHARED_C
20930 41 43 48 45 0a 20 20 69 6e 74 20 6e 54 61 62 6c  ACHE.  int nTabl
20940 65 4c 6f 63 6b 3b 20 20 20 20 20 20 20 20 2f 2a  eLock;        /*
20950 20 4e 75 6d 62 65 72 20 6f 66 20 6c 6f 63 6b 73   Number of locks
20960 20 69 6e 20 61 54 61 62 6c 65 4c 6f 63 6b 20 2a   in aTableLock *
20970 2f 0a 20 20 54 61 62 6c 65 4c 6f 63 6b 20 2a 61  /.  TableLock *a
20980 54 61 62 6c 65 4c 6f 63 6b 3b 20 2f 2a 20 52 65  TableLock; /* Re
20990 71 75 69 72 65 64 20 74 61 62 6c 65 20 6c 6f 63  quired table loc
209a0 6b 73 20 66 6f 72 20 73 68 61 72 65 64 2d 63 61  ks for shared-ca
209b0 63 68 65 20 6d 6f 64 65 20 2a 2f 0a 23 65 6e 64  che mode */.#end
209c0 69 66 0a 20 20 41 75 74 6f 69 6e 63 49 6e 66 6f  if.  AutoincInfo
209d0 20 2a 70 41 69 6e 63 3b 20 20 2f 2a 20 49 6e 66   *pAinc;  /* Inf
209e0 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 41  ormation about A
209f0 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 63 6f 75  UTOINCREMENT cou
20a00 6e 74 65 72 73 20 2a 2f 0a 20 20 50 61 72 73 65  nters */.  Parse
20a10 20 2a 70 54 6f 70 6c 65 76 65 6c 3b 20 20 20 20   *pToplevel;    
20a20 2f 2a 20 50 61 72 73 65 20 73 74 72 75 63 74 75  /* Parse structu
20a30 72 65 20 66 6f 72 20 6d 61 69 6e 20 70 72 6f 67  re for main prog
20a40 72 61 6d 20 28 6f 72 20 4e 55 4c 4c 29 20 2a 2f  ram (or NULL) */
20a50 0a 20 20 54 61 62 6c 65 20 2a 70 54 72 69 67 67  .  Table *pTrigg
20a60 65 72 54 61 62 3b 20 20 2f 2a 20 54 61 62 6c 65  erTab;  /* Table
20a70 20 74 72 69 67 67 65 72 73 20 61 72 65 20 62 65   triggers are be
20a80 69 6e 67 20 63 6f 64 65 64 20 66 6f 72 20 2a 2f  ing coded for */
20a90 0a 20 20 69 6e 74 20 61 64 64 72 43 72 54 61 62  .  int addrCrTab
20aa0 3b 20 20 20 20 20 20 20 2f 2a 20 41 64 64 72 65  ;       /* Addre
20ab0 73 73 20 6f 66 20 4f 50 5f 43 72 65 61 74 65 42  ss of OP_CreateB
20ac0 74 72 65 65 20 6f 70 63 6f 64 65 20 6f 6e 20 43  tree opcode on C
20ad0 52 45 41 54 45 20 54 41 42 4c 45 20 2a 2f 0a 20  REATE TABLE */. 
20ae0 20 75 33 32 20 6e 51 75 65 72 79 4c 6f 6f 70 3b   u32 nQueryLoop;
20af0 20 20 20 20 20 20 2f 2a 20 45 73 74 20 6e 75 6d        /* Est num
20b00 62 65 72 20 6f 66 20 69 74 65 72 61 74 69 6f 6e  ber of iteration
20b10 73 20 6f 66 20 61 20 71 75 65 72 79 20 28 31 30  s of a query (10
20b20 2a 6c 6f 67 32 28 4e 29 29 20 2a 2f 0a 20 20 75  *log2(N)) */.  u
20b30 33 32 20 6f 6c 64 6d 61 73 6b 3b 20 20 20 20 20  32 oldmask;     
20b40 20 20 20 20 2f 2a 20 4d 61 73 6b 20 6f 66 20 6f      /* Mask of o
20b50 6c 64 2e 2a 20 63 6f 6c 75 6d 6e 73 20 72 65 66  ld.* columns ref
20b60 65 72 65 6e 63 65 64 20 2a 2f 0a 20 20 75 33 32  erenced */.  u32
20b70 20 6e 65 77 6d 61 73 6b 3b 20 20 20 20 20 20 20   newmask;       
20b80 20 20 2f 2a 20 4d 61 73 6b 20 6f 66 20 6e 65 77    /* Mask of new
20b90 2e 2a 20 63 6f 6c 75 6d 6e 73 20 72 65 66 65 72  .* columns refer
20ba0 65 6e 63 65 64 20 2a 2f 0a 20 20 75 38 20 65 54  enced */.  u8 eT
20bb0 72 69 67 67 65 72 4f 70 3b 20 20 20 20 20 20 20  riggerOp;       
20bc0 2f 2a 20 54 4b 5f 55 50 44 41 54 45 2c 20 54 4b  /* TK_UPDATE, TK
20bd0 5f 49 4e 53 45 52 54 20 6f 72 20 54 4b 5f 44 45  _INSERT or TK_DE
20be0 4c 45 54 45 20 2a 2f 0a 20 20 75 38 20 65 4f 72  LETE */.  u8 eOr
20bf0 63 6f 6e 66 3b 20 20 20 20 20 20 20 20 20 20 2f  conf;          /
20c00 2a 20 44 65 66 61 75 6c 74 20 4f 4e 20 43 4f 4e  * Default ON CON
20c10 46 4c 49 43 54 20 70 6f 6c 69 63 79 20 66 6f 72  FLICT policy for
20c20 20 74 72 69 67 67 65 72 20 73 74 65 70 73 20 2a   trigger steps *
20c30 2f 0a 20 20 75 38 20 64 69 73 61 62 6c 65 54 72  /.  u8 disableTr
20c40 69 67 67 65 72 73 3b 20 20 2f 2a 20 54 72 75 65  iggers;  /* True
20c50 20 74 6f 20 64 69 73 61 62 6c 65 20 74 72 69 67   to disable trig
20c60 67 65 72 73 20 2a 2f 0a 0a 20 20 2f 2a 2a 2a 2a  gers */..  /****
20c70 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
20c80 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
20c90 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
20ca0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
20cb0 2a 2a 2a 2a 2a 2a 0a 20 20 2a 2a 20 46 69 65 6c  ******.  ** Fiel
20cc0 64 73 20 61 62 6f 76 65 20 6d 75 73 74 20 62 65  ds above must be
20cd0 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 74 6f 20   initialized to 
20ce0 7a 65 72 6f 2e 20 20 54 68 65 20 66 69 65 6c 64  zero.  The field
20cf0 73 20 74 68 61 74 20 66 6f 6c 6c 6f 77 2c 0a 20  s that follow,. 
20d00 20 2a 2a 20 64 6f 77 6e 20 74 6f 20 74 68 65 20   ** down to the 
20d10 62 65 67 69 6e 6e 69 6e 67 20 6f 66 20 74 68 65  beginning of the
20d20 20 72 65 63 75 72 73 69 76 65 20 73 65 63 74 69   recursive secti
20d30 6f 6e 2c 20 64 6f 20 6e 6f 74 20 6e 65 65 64 20  on, do not need 
20d40 74 6f 20 62 65 0a 20 20 2a 2a 20 69 6e 69 74 69  to be.  ** initi
20d50 61 6c 69 7a 65 64 20 61 73 20 74 68 65 79 20 77  alized as they w
20d60 69 6c 6c 20 62 65 20 73 65 74 20 62 65 66 6f 72  ill be set befor
20d70 65 20 62 65 69 6e 67 20 75 73 65 64 2e 20 20 54  e being used.  T
20d80 68 65 20 62 6f 75 6e 64 61 72 79 20 69 73 0a 20  he boundary is. 
20d90 20 2a 2a 20 64 65 74 65 72 6d 69 6e 65 64 20 62   ** determined b
20da0 79 20 6f 66 66 73 65 74 6f 66 28 50 61 72 73 65  y offsetof(Parse
20db0 2c 61 54 65 6d 70 52 65 67 29 2e 0a 20 20 2a 2a  ,aTempReg)..  **
20dc0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
20dd0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
20de0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
20df0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
20e00 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 20 20 69 6e 74  ********/..  int
20e10 20 61 54 65 6d 70 52 65 67 5b 38 5d 3b 20 20 20   aTempReg[8];   
20e20 20 20 20 20 20 2f 2a 20 48 6f 6c 64 69 6e 67 20       /* Holding 
20e30 61 72 65 61 20 66 6f 72 20 74 65 6d 70 6f 72 61  area for tempora
20e40 72 79 20 72 65 67 69 73 74 65 72 73 20 2a 2f 0a  ry registers */.
20e50 20 20 54 6f 6b 65 6e 20 73 4e 61 6d 65 54 6f 6b    Token sNameTok
20e60 65 6e 3b 20 20 20 20 20 20 20 2f 2a 20 54 6f 6b  en;       /* Tok
20e70 65 6e 20 77 69 74 68 20 75 6e 71 75 61 6c 69 66  en with unqualif
20e80 69 65 64 20 73 63 68 65 6d 61 20 6f 62 6a 65 63  ied schema objec
20e90 74 20 6e 61 6d 65 20 2a 2f 0a 0a 20 20 2f 2a 2a  t name */..  /**
20ea0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
20eb0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
20ec0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
20ed0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
20ee0 2a 2a 2a 2a 2a 2a 0a 20 20 2a 2a 20 41 62 6f 76  ******.  ** Abov
20ef0 65 20 69 73 20 63 6f 6e 73 74 61 6e 74 20 62 65  e is constant be
20f00 74 77 65 65 6e 20 72 65 63 75 72 73 69 6f 6e 73  tween recursions
20f10 2e 20 20 42 65 6c 6f 77 20 69 73 20 72 65 73 65  .  Below is rese
20f20 74 20 62 65 66 6f 72 65 20 61 6e 64 20 61 66 74  t before and aft
20f30 65 72 0a 20 20 2a 2a 20 65 61 63 68 20 72 65 63  er.  ** each rec
20f40 75 72 73 69 6f 6e 2e 20 20 54 68 65 20 62 6f 75  ursion.  The bou
20f50 6e 64 61 72 79 20 62 65 74 77 65 65 6e 20 74 68  ndary between th
20f60 65 73 65 20 74 77 6f 20 72 65 67 69 6f 6e 73 20  ese two regions 
20f70 69 73 20 64 65 74 65 72 6d 69 6e 65 64 0a 20 20  is determined.  
20f80 2a 2a 20 75 73 69 6e 67 20 6f 66 66 73 65 74 6f  ** using offseto
20f90 66 28 50 61 72 73 65 2c 73 4c 61 73 74 54 6f 6b  f(Parse,sLastTok
20fa0 65 6e 29 20 73 6f 20 74 68 65 20 73 4c 61 73 74  en) so the sLast
20fb0 54 6f 6b 65 6e 20 66 69 65 6c 64 20 6d 75 73 74  Token field must
20fc0 20 62 65 20 74 68 65 0a 20 20 2a 2a 20 66 69 72   be the.  ** fir
20fd0 73 74 20 66 69 65 6c 64 20 69 6e 20 74 68 65 20  st field in the 
20fe0 72 65 63 75 72 73 69 76 65 20 72 65 67 69 6f 6e  recursive region
20ff0 2e 0a 20 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ..  ************
21000 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21010 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21020 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21030 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 20  ************/.. 
21040 20 54 6f 6b 65 6e 20 73 4c 61 73 74 54 6f 6b 65   Token sLastToke
21050 6e 3b 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20  n;       /* The 
21060 6c 61 73 74 20 74 6f 6b 65 6e 20 70 61 72 73 65  last token parse
21070 64 20 2a 2f 0a 20 20 79 6e 56 61 72 20 6e 56 61  d */.  ynVar nVa
21080 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  r;              
21090 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 27 3f   /* Number of '?
210a0 27 20 76 61 72 69 61 62 6c 65 73 20 73 65 65 6e  ' variables seen
210b0 20 69 6e 20 74 68 65 20 53 51 4c 20 73 6f 20 66   in the SQL so f
210c0 61 72 20 2a 2f 0a 20 20 75 38 20 69 50 6b 53 6f  ar */.  u8 iPkSo
210d0 72 74 4f 72 64 65 72 3b 20 20 20 20 20 20 20 20  rtOrder;        
210e0 20 20 2f 2a 20 41 53 43 20 6f 72 20 44 45 53 43    /* ASC or DESC
210f0 20 66 6f 72 20 49 4e 54 45 47 45 52 20 50 52 49   for INTEGER PRI
21100 4d 41 52 59 20 4b 45 59 20 2a 2f 0a 20 20 75 38  MARY KEY */.  u8
21110 20 65 78 70 6c 61 69 6e 3b 20 20 20 20 20 20 20   explain;       
21120 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20          /* True 
21130 69 66 20 74 68 65 20 45 58 50 4c 41 49 4e 20 66  if the EXPLAIN f
21140 6c 61 67 20 69 73 20 66 6f 75 6e 64 20 6f 6e 20  lag is found on 
21150 74 68 65 20 71 75 65 72 79 20 2a 2f 0a 23 69 66  the query */.#if
21160 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
21170 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
21180 4c 45 29 20 26 26 20 21 64 65 66 69 6e 65 64 28  LE) && !defined(
21190 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 4c 54 45  SQLITE_OMIT_ALTE
211a0 52 54 41 42 4c 45 29 0a 20 20 75 38 20 65 50 61  RTABLE).  u8 ePa
211b0 72 73 65 4d 6f 64 65 3b 20 20 20 20 20 20 20 20  rseMode;        
211c0 20 20 20 20 2f 2a 20 50 41 52 53 45 5f 4d 4f 44      /* PARSE_MOD
211d0 45 5f 58 58 58 20 63 6f 6e 73 74 61 6e 74 20 2a  E_XXX constant *
211e0 2f 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66  /.#endif.#ifndef
211f0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
21200 54 55 41 4c 54 41 42 4c 45 0a 20 20 69 6e 74 20  TUALTABLE.  int 
21210 6e 56 74 61 62 4c 6f 63 6b 3b 20 20 20 20 20 20  nVtabLock;      
21220 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
21230 6f 66 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  of virtual table
21240 73 20 74 6f 20 6c 6f 63 6b 20 2a 2f 0a 23 65 6e  s to lock */.#en
21250 64 69 66 0a 20 20 69 6e 74 20 6e 48 65 69 67 68  dif.  int nHeigh
21260 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t;              
21270 2f 2a 20 45 78 70 72 65 73 73 69 6f 6e 20 74 72  /* Expression tr
21280 65 65 20 68 65 69 67 68 74 20 6f 66 20 63 75 72  ee height of cur
21290 72 65 6e 74 20 73 75 62 2d 73 65 6c 65 63 74 20  rent sub-select 
212a0 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  */.#ifndef SQLIT
212b0 45 5f 4f 4d 49 54 5f 45 58 50 4c 41 49 4e 0a 20  E_OMIT_EXPLAIN. 
212c0 20 69 6e 74 20 61 64 64 72 45 78 70 6c 61 69 6e   int addrExplain
212d0 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 64  ;          /* Ad
212e0 64 72 65 73 73 20 6f 66 20 63 75 72 72 65 6e 74  dress of current
212f0 20 4f 50 5f 45 78 70 6c 61 69 6e 20 6f 70 63 6f   OP_Explain opco
21300 64 65 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 56  de */.#endif.  V
21310 4c 69 73 74 20 2a 70 56 4c 69 73 74 3b 20 20 20  List *pVList;   
21320 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 70 70           /* Mapp
21330 69 6e 67 20 62 65 74 77 65 65 6e 20 76 61 72 69  ing between vari
21340 61 62 6c 65 20 6e 61 6d 65 73 20 61 6e 64 20 6e  able names and n
21350 75 6d 62 65 72 73 20 2a 2f 0a 20 20 56 64 62 65  umbers */.  Vdbe
21360 20 2a 70 52 65 70 72 65 70 61 72 65 3b 20 20 20   *pReprepare;   
21370 20 20 20 20 20 20 2f 2a 20 56 4d 20 62 65 69 6e        /* VM bein
21380 67 20 72 65 70 72 65 70 61 72 65 64 20 28 73 71  g reprepared (sq
21390 6c 69 74 65 33 52 65 70 72 65 70 61 72 65 28 29  lite3Reprepare()
213a0 29 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61  ) */.  const cha
213b0 72 20 2a 7a 54 61 69 6c 3b 20 20 20 20 20 20 20  r *zTail;       
213c0 20 2f 2a 20 41 6c 6c 20 53 51 4c 20 74 65 78 74   /* All SQL text
213d0 20 70 61 73 74 20 74 68 65 20 6c 61 73 74 20 73   past the last s
213e0 65 6d 69 63 6f 6c 6f 6e 20 70 61 72 73 65 64 20  emicolon parsed 
213f0 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70 4e 65 77  */.  Table *pNew
21400 54 61 62 6c 65 3b 20 20 20 20 20 20 20 20 20 2f  Table;         /
21410 2a 20 41 20 74 61 62 6c 65 20 62 65 69 6e 67 20  * A table being 
21420 63 6f 6e 73 74 72 75 63 74 65 64 20 62 79 20 43  constructed by C
21430 52 45 41 54 45 20 54 41 42 4c 45 20 2a 2f 0a 20  REATE TABLE */. 
21440 20 49 6e 64 65 78 20 2a 70 4e 65 77 49 6e 64 65   Index *pNewInde
21450 78 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 41 6e  x;         /* An
21460 20 69 6e 64 65 78 20 62 65 69 6e 67 20 63 6f 6e   index being con
21470 73 74 72 75 63 74 65 64 20 62 79 20 43 52 45 41  structed by CREA
21480 54 45 20 49 4e 44 45 58 20 2a 2f 0a 20 20 54 72  TE INDEX */.  Tr
21490 69 67 67 65 72 20 2a 70 4e 65 77 54 72 69 67 67  igger *pNewTrigg
214a0 65 72 3b 20 20 20 20 20 2f 2a 20 54 72 69 67 67  er;     /* Trigg
214b0 65 72 20 75 6e 64 65 72 20 63 6f 6e 73 74 72 75  er under constru
214c0 63 74 20 62 79 20 61 20 43 52 45 41 54 45 20 54  ct by a CREATE T
214d0 52 49 47 47 45 52 20 2a 2f 0a 20 20 63 6f 6e 73  RIGGER */.  cons
214e0 74 20 63 68 61 72 20 2a 7a 41 75 74 68 43 6f 6e  t char *zAuthCon
214f0 74 65 78 74 3b 20 2f 2a 20 54 68 65 20 36 74 68  text; /* The 6th
21500 20 70 61 72 61 6d 65 74 65 72 20 74 6f 20 64 62   parameter to db
21510 2d 3e 78 41 75 74 68 20 63 61 6c 6c 62 61 63 6b  ->xAuth callback
21520 73 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c  s */.#ifndef SQL
21530 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
21540 54 41 42 4c 45 0a 20 20 54 6f 6b 65 6e 20 73 41  TABLE.  Token sA
21550 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  rg;             
21560 20 20 2f 2a 20 43 6f 6d 70 6c 65 74 65 20 74 65    /* Complete te
21570 78 74 20 6f 66 20 61 20 6d 6f 64 75 6c 65 20 61  xt of a module a
21580 72 67 75 6d 65 6e 74 20 2a 2f 0a 20 20 54 61 62  rgument */.  Tab
21590 6c 65 20 2a 2a 61 70 56 74 61 62 4c 6f 63 6b 3b  le **apVtabLock;
215a0 20 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65         /* Pointe
215b0 72 20 74 6f 20 76 69 72 74 75 61 6c 20 74 61 62  r to virtual tab
215c0 6c 65 73 20 6e 65 65 64 69 6e 67 20 6c 6f 63 6b  les needing lock
215d0 69 6e 67 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20  ing */.#endif.  
215e0 54 61 62 6c 65 20 2a 70 5a 6f 6d 62 69 65 54 61  Table *pZombieTa
215f0 62 3b 20 20 20 20 20 20 20 20 2f 2a 20 4c 69 73  b;        /* Lis
21600 74 20 6f 66 20 54 61 62 6c 65 20 6f 62 6a 65 63  t of Table objec
21610 74 73 20 74 6f 20 64 65 6c 65 74 65 20 61 66 74  ts to delete aft
21620 65 72 20 63 6f 64 65 20 67 65 6e 20 2a 2f 0a 20  er code gen */. 
21630 20 54 72 69 67 67 65 72 50 72 67 20 2a 70 54 72   TriggerPrg *pTr
21640 69 67 67 65 72 50 72 67 3b 20 20 2f 2a 20 4c 69  iggerPrg;  /* Li
21650 6e 6b 65 64 20 6c 69 73 74 20 6f 66 20 63 6f 64  nked list of cod
21660 65 64 20 74 72 69 67 67 65 72 73 20 2a 2f 0a 20  ed triggers */. 
21670 20 57 69 74 68 20 2a 70 57 69 74 68 3b 20 20 20   With *pWith;   
21680 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 75             /* Cu
21690 72 72 65 6e 74 20 57 49 54 48 20 63 6c 61 75 73  rrent WITH claus
216a0 65 2c 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 20 20  e, or NULL */.  
216b0 57 69 74 68 20 2a 70 57 69 74 68 54 6f 46 72 65  With *pWithToFre
216c0 65 3b 20 20 20 20 20 20 20 20 2f 2a 20 46 72 65  e;        /* Fre
216d0 65 20 74 68 69 73 20 57 49 54 48 20 6f 62 6a 65  e this WITH obje
216e0 63 74 20 61 74 20 74 68 65 20 65 6e 64 20 6f 66  ct at the end of
216f0 20 74 68 65 20 70 61 72 73 65 20 2a 2f 0a 23 69   the parse */.#i
21700 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
21710 54 5f 41 4c 54 45 52 54 41 42 4c 45 0a 20 20 52  T_ALTERTABLE.  R
21720 65 6e 61 6d 65 54 6f 6b 65 6e 20 2a 70 52 65 6e  enameToken *pRen
21730 61 6d 65 3b 20 20 20 20 20 2f 2a 20 54 6f 6b 65  ame;     /* Toke
21740 6e 73 20 73 75 62 6a 65 63 74 20 74 6f 20 72 65  ns subject to re
21750 6e 61 6d 69 6e 67 20 62 79 20 41 4c 54 45 52 20  naming by ALTER 
21760 54 41 42 4c 45 20 2a 2f 0a 23 65 6e 64 69 66 0a  TABLE */.#endif.
21770 7d 3b 0a 0a 23 64 65 66 69 6e 65 20 50 41 52 53  };..#define PARS
21780 45 5f 4d 4f 44 45 5f 4e 4f 52 4d 41 4c 20 20 20  E_MODE_NORMAL   
21790 20 20 20 20 20 30 0a 23 64 65 66 69 6e 65 20 50       0.#define P
217a0 41 52 53 45 5f 4d 4f 44 45 5f 44 45 43 4c 41 52  ARSE_MODE_DECLAR
217b0 45 5f 56 54 41 42 20 20 31 0a 23 64 65 66 69 6e  E_VTAB  1.#defin
217c0 65 20 50 41 52 53 45 5f 4d 4f 44 45 5f 52 45 4e  e PARSE_MODE_REN
217d0 41 4d 45 5f 43 4f 4c 55 4d 4e 20 32 0a 0a 2f 2a  AME_COLUMN 2../*
217e0 0a 2a 2a 20 53 69 7a 65 73 20 61 6e 64 20 70 6f  .** Sizes and po
217f0 69 6e 74 65 72 73 20 6f 66 20 76 61 72 69 6f 75  inters of variou
21800 73 20 70 61 72 74 73 20 6f 66 20 74 68 65 20 50  s parts of the P
21810 61 72 73 65 20 6f 62 6a 65 63 74 2e 0a 2a 2f 0a  arse object..*/.
21820 23 64 65 66 69 6e 65 20 50 41 52 53 45 5f 48 44  #define PARSE_HD
21830 52 5f 53 5a 20 6f 66 66 73 65 74 6f 66 28 50 61  R_SZ offsetof(Pa
21840 72 73 65 2c 61 54 65 6d 70 52 65 67 29 20 2f 2a  rse,aTempReg) /*
21850 20 52 65 63 75 72 73 69 76 65 20 70 61 72 74 20   Recursive part 
21860 77 2f 6f 20 61 43 6f 6c 43 61 63 68 65 2a 2f 0a  w/o aColCache*/.
21870 23 64 65 66 69 6e 65 20 50 41 52 53 45 5f 52 45  #define PARSE_RE
21880 43 55 52 53 45 5f 53 5a 20 6f 66 66 73 65 74 6f  CURSE_SZ offseto
21890 66 28 50 61 72 73 65 2c 73 4c 61 73 74 54 6f 6b  f(Parse,sLastTok
218a0 65 6e 29 20 20 20 20 2f 2a 20 52 65 63 75 72 73  en)    /* Recurs
218b0 69 76 65 20 70 61 72 74 20 2a 2f 0a 23 64 65 66  ive part */.#def
218c0 69 6e 65 20 50 41 52 53 45 5f 54 41 49 4c 5f 53  ine PARSE_TAIL_S
218d0 5a 20 28 73 69 7a 65 6f 66 28 50 61 72 73 65 29  Z (sizeof(Parse)
218e0 2d 50 41 52 53 45 5f 52 45 43 55 52 53 45 5f 53  -PARSE_RECURSE_S
218f0 5a 29 20 2f 2a 20 4e 6f 6e 2d 72 65 63 75 72 73  Z) /* Non-recurs
21900 69 76 65 20 70 61 72 74 20 2a 2f 0a 23 64 65 66  ive part */.#def
21910 69 6e 65 20 50 41 52 53 45 5f 54 41 49 4c 28 58  ine PARSE_TAIL(X
21920 29 20 28 28 28 63 68 61 72 2a 29 28 58 29 29 2b  ) (((char*)(X))+
21930 50 41 52 53 45 5f 52 45 43 55 52 53 45 5f 53 5a  PARSE_RECURSE_SZ
21940 29 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f  )  /* Pointer to
21950 20 74 61 69 6c 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20   tail */../*.** 
21960 52 65 74 75 72 6e 20 74 72 75 65 20 69 66 20 63  Return true if c
21970 75 72 72 65 6e 74 6c 79 20 69 6e 73 69 64 65 20  urrently inside 
21980 61 6e 20 73 71 6c 69 74 65 33 5f 64 65 63 6c 61  an sqlite3_decla
21990 72 65 5f 76 74 61 62 28 29 20 63 61 6c 6c 2e 0a  re_vtab() call..
219a0 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
219b0 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
219c0 4c 45 0a 20 20 23 64 65 66 69 6e 65 20 49 4e 5f  LE.  #define IN_
219d0 44 45 43 4c 41 52 45 5f 56 54 41 42 20 30 0a 23  DECLARE_VTAB 0.#
219e0 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20 49  else.  #define I
219f0 4e 5f 44 45 43 4c 41 52 45 5f 56 54 41 42 20 28  N_DECLARE_VTAB (
21a00 70 50 61 72 73 65 2d 3e 65 50 61 72 73 65 4d 6f  pParse->eParseMo
21a10 64 65 3d 3d 50 41 52 53 45 5f 4d 4f 44 45 5f 44  de==PARSE_MODE_D
21a20 45 43 4c 41 52 45 5f 56 54 41 42 29 0a 23 65 6e  ECLARE_VTAB).#en
21a30 64 69 66 0a 0a 23 69 66 20 64 65 66 69 6e 65 64  dif..#if defined
21a40 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 4c 54  (SQLITE_OMIT_ALT
21a50 45 52 54 41 42 4c 45 29 0a 20 20 23 64 65 66 69  ERTABLE).  #defi
21a60 6e 65 20 49 4e 5f 52 45 4e 41 4d 45 5f 43 4f 4c  ne IN_RENAME_COL
21a70 55 4d 4e 20 30 0a 23 65 6c 73 65 0a 20 20 23 64  UMN 0.#else.  #d
21a80 65 66 69 6e 65 20 49 4e 5f 52 45 4e 41 4d 45 5f  efine IN_RENAME_
21a90 43 4f 4c 55 4d 4e 20 28 70 50 61 72 73 65 2d 3e  COLUMN (pParse->
21aa0 65 50 61 72 73 65 4d 6f 64 65 3d 3d 50 41 52 53  eParseMode==PARS
21ab0 45 5f 4d 4f 44 45 5f 52 45 4e 41 4d 45 5f 43 4f  E_MODE_RENAME_CO
21ac0 4c 55 4d 4e 29 0a 23 65 6e 64 69 66 0a 0a 23 69  LUMN).#endif..#i
21ad0 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  f defined(SQLITE
21ae0 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
21af0 4c 45 29 20 26 26 20 64 65 66 69 6e 65 64 28 53  LE) && defined(S
21b00 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 4c 54 45 52  QLITE_OMIT_ALTER
21b10 54 41 42 4c 45 29 0a 20 20 23 64 65 66 69 6e 65  TABLE).  #define
21b20 20 49 4e 5f 53 50 45 43 49 41 4c 5f 50 41 52 53   IN_SPECIAL_PARS
21b30 45 20 30 0a 23 65 6c 73 65 0a 20 20 23 64 65 66  E 0.#else.  #def
21b40 69 6e 65 20 49 4e 5f 53 50 45 43 49 41 4c 5f 50  ine IN_SPECIAL_P
21b50 41 52 53 45 20 28 70 50 61 72 73 65 2d 3e 65 50  ARSE (pParse->eP
21b60 61 72 73 65 4d 6f 64 65 21 3d 50 41 52 53 45 5f  arseMode!=PARSE_
21b70 4d 4f 44 45 5f 4e 4f 52 4d 41 4c 29 0a 23 65 6e  MODE_NORMAL).#en
21b80 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e  dif../*.** An in
21b90 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f  stance of the fo
21ba0 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72  llowing structur
21bb0 65 20 63 61 6e 20 62 65 20 64 65 63 6c 61 72 65  e can be declare
21bc0 64 20 6f 6e 20 61 20 73 74 61 63 6b 20 61 6e 64  d on a stack and
21bd0 20 75 73 65 64 0a 2a 2a 20 74 6f 20 73 61 76 65   used.** to save
21be0 20 74 68 65 20 50 61 72 73 65 2e 7a 41 75 74 68   the Parse.zAuth
21bf0 43 6f 6e 74 65 78 74 20 76 61 6c 75 65 20 73 6f  Context value so
21c00 20 74 68 61 74 20 69 74 20 63 61 6e 20 62 65 20   that it can be 
21c10 72 65 73 74 6f 72 65 64 20 6c 61 74 65 72 2e 0a  restored later..
21c20 2a 2f 0a 73 74 72 75 63 74 20 41 75 74 68 43 6f  */.struct AuthCo
21c30 6e 74 65 78 74 20 7b 0a 20 20 63 6f 6e 73 74 20  ntext {.  const 
21c40 63 68 61 72 20 2a 7a 41 75 74 68 43 6f 6e 74 65  char *zAuthConte
21c50 78 74 3b 20 20 20 2f 2a 20 50 75 74 20 73 61 76  xt;   /* Put sav
21c60 65 64 20 50 61 72 73 65 2e 7a 41 75 74 68 43 6f  ed Parse.zAuthCo
21c70 6e 74 65 78 74 20 68 65 72 65 20 2a 2f 0a 20 20  ntext here */.  
21c80 50 61 72 73 65 20 2a 70 50 61 72 73 65 3b 20 20  Parse *pParse;  
21c90 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
21ca0 68 65 20 50 61 72 73 65 20 73 74 72 75 63 74 75  he Parse structu
21cb0 72 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  re */.};../*.** 
21cc0 42 69 74 66 69 65 6c 64 20 66 6c 61 67 73 20 66  Bitfield flags f
21cd0 6f 72 20 50 35 20 76 61 6c 75 65 20 69 6e 20 76  or P5 value in v
21ce0 61 72 69 6f 75 73 20 6f 70 63 6f 64 65 73 2e 0a  arious opcodes..
21cf0 2a 2a 0a 2a 2a 20 56 61 6c 75 65 20 63 6f 6e 73  **.** Value cons
21d00 74 72 61 69 6e 74 73 20 28 65 6e 66 6f 72 63 65  traints (enforce
21d10 64 20 76 69 61 20 61 73 73 65 72 74 28 29 29 3a  d via assert()):
21d20 0a 2a 2a 20 20 20 20 4f 50 46 4c 41 47 5f 4c 45  .**    OPFLAG_LE
21d30 4e 47 54 48 41 52 47 20 20 20 20 3d 3d 20 53 51  NGTHARG    == SQ
21d40 4c 49 54 45 5f 46 55 4e 43 5f 4c 45 4e 47 54 48  LITE_FUNC_LENGTH
21d50 0a 2a 2a 20 20 20 20 4f 50 46 4c 41 47 5f 54 59  .**    OPFLAG_TY
21d60 50 45 4f 46 41 52 47 20 20 20 20 3d 3d 20 53 51  PEOFARG    == SQ
21d70 4c 49 54 45 5f 46 55 4e 43 5f 54 59 50 45 4f 46  LITE_FUNC_TYPEOF
21d80 0a 2a 2a 20 20 20 20 4f 50 46 4c 41 47 5f 42 55  .**    OPFLAG_BU
21d90 4c 4b 43 53 52 20 20 20 20 20 20 3d 3d 20 42 54  LKCSR      == BT
21da0 52 45 45 5f 42 55 4c 4b 4c 4f 41 44 0a 2a 2a 20  REE_BULKLOAD.** 
21db0 20 20 20 4f 50 46 4c 41 47 5f 53 45 45 4b 45 51     OPFLAG_SEEKEQ
21dc0 20 20 20 20 20 20 20 3d 3d 20 42 54 52 45 45 5f         == BTREE_
21dd0 53 45 45 4b 5f 45 51 0a 2a 2a 20 20 20 20 4f 50  SEEK_EQ.**    OP
21de0 46 4c 41 47 5f 46 4f 52 44 45 4c 45 54 45 20 20  FLAG_FORDELETE  
21df0 20 20 3d 3d 20 42 54 52 45 45 5f 46 4f 52 44 45    == BTREE_FORDE
21e00 4c 45 54 45 0a 2a 2a 20 20 20 20 4f 50 46 4c 41  LETE.**    OPFLA
21e10 47 5f 53 41 56 45 50 4f 53 49 54 49 4f 4e 20 3d  G_SAVEPOSITION =
21e20 3d 20 42 54 52 45 45 5f 53 41 56 45 50 4f 53 49  = BTREE_SAVEPOSI
21e30 54 49 4f 4e 0a 2a 2a 20 20 20 20 4f 50 46 4c 41  TION.**    OPFLA
21e40 47 5f 41 55 58 44 45 4c 45 54 45 20 20 20 20 3d  G_AUXDELETE    =
21e50 3d 20 42 54 52 45 45 5f 41 55 58 44 45 4c 45 54  = BTREE_AUXDELET
21e60 45 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46  E.*/.#define OPF
21e70 4c 41 47 5f 4e 43 48 41 4e 47 45 20 20 20 20 20  LAG_NCHANGE     
21e80 20 20 30 78 30 31 20 20 20 20 2f 2a 20 4f 50 5f    0x01    /* OP_
21e90 49 6e 73 65 72 74 3a 20 53 65 74 20 74 6f 20 75  Insert: Set to u
21ea0 70 64 61 74 65 20 64 62 2d 3e 6e 43 68 61 6e 67  pdate db->nChang
21eb0 65 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20  e */.           
21ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21ed0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 73            /* Als
21ee0 6f 20 75 73 65 64 20 69 6e 20 50 32 20 28 6e 6f  o used in P2 (no
21ef0 74 20 50 35 29 20 6f 66 20 4f 50 5f 44 65 6c 65  t P5) of OP_Dele
21f00 74 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50  te */.#define OP
21f10 46 4c 41 47 5f 45 50 48 45 4d 20 20 20 20 20 20  FLAG_EPHEM      
21f20 20 20 20 30 78 30 31 20 20 20 20 2f 2a 20 4f 50     0x01    /* OP
21f30 5f 43 6f 6c 75 6d 6e 3a 20 45 70 68 65 6d 65 72  _Column: Ephemer
21f40 61 6c 20 6f 75 74 70 75 74 20 69 73 20 6f 6b 20  al output is ok 
21f50 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41  */.#define OPFLA
21f60 47 5f 4c 41 53 54 52 4f 57 49 44 20 20 20 20 20  G_LASTROWID     
21f70 30 78 32 30 20 20 20 20 2f 2a 20 53 65 74 20 74  0x20    /* Set t
21f80 6f 20 75 70 64 61 74 65 20 64 62 2d 3e 6c 61 73  o update db->las
21f90 74 52 6f 77 69 64 20 2a 2f 0a 23 64 65 66 69 6e  tRowid */.#defin
21fa0 65 20 4f 50 46 4c 41 47 5f 49 53 55 50 44 41 54  e OPFLAG_ISUPDAT
21fb0 45 20 20 20 20 20 20 30 78 30 34 20 20 20 20 2f  E      0x04    /
21fc0 2a 20 54 68 69 73 20 4f 50 5f 49 6e 73 65 72 74  * This OP_Insert
21fd0 20 69 73 20 61 6e 20 73 71 6c 20 55 50 44 41 54   is an sql UPDAT
21fe0 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46  E */.#define OPF
21ff0 4c 41 47 5f 41 50 50 45 4e 44 20 20 20 20 20 20  LAG_APPEND      
22000 20 20 30 78 30 38 20 20 20 20 2f 2a 20 54 68 69    0x08    /* Thi
22010 73 20 69 73 20 6c 69 6b 65 6c 79 20 74 6f 20 62  s is likely to b
22020 65 20 61 6e 20 61 70 70 65 6e 64 20 2a 2f 0a 23  e an append */.#
22030 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 55 53  define OPFLAG_US
22040 45 53 45 45 4b 52 45 53 55 4c 54 20 30 78 31 30  ESEEKRESULT 0x10
22050 20 20 20 20 2f 2a 20 54 72 79 20 74 6f 20 61 76      /* Try to av
22060 6f 69 64 20 61 20 73 65 65 6b 20 69 6e 20 42 74  oid a seek in Bt
22070 72 65 65 49 6e 73 65 72 74 28 29 20 2a 2f 0a 23  reeInsert() */.#
22080 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 49 53  define OPFLAG_IS
22090 4e 4f 4f 50 20 20 20 20 20 20 20 20 30 78 34 30  NOOP        0x40
220a0 20 20 20 20 2f 2a 20 4f 50 5f 44 65 6c 65 74 65      /* OP_Delete
220b0 20 64 6f 65 73 20 70 72 65 2d 75 70 64 61 74 65   does pre-update
220c0 2d 68 6f 6f 6b 20 6f 6e 6c 79 20 2a 2f 0a 23 64  -hook only */.#d
220d0 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 4c 45 4e  efine OPFLAG_LEN
220e0 47 54 48 41 52 47 20 20 20 20 20 30 78 34 30 20  GTHARG     0x40 
220f0 20 20 20 2f 2a 20 4f 50 5f 43 6f 6c 75 6d 6e 20     /* OP_Column 
22100 6f 6e 6c 79 20 75 73 65 64 20 66 6f 72 20 6c 65  only used for le
22110 6e 67 74 68 28 29 20 2a 2f 0a 23 64 65 66 69 6e  ngth() */.#defin
22120 65 20 4f 50 46 4c 41 47 5f 54 59 50 45 4f 46 41  e OPFLAG_TYPEOFA
22130 52 47 20 20 20 20 20 30 78 38 30 20 20 20 20 2f  RG     0x80    /
22140 2a 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 6e 6c 79  * OP_Column only
22150 20 75 73 65 64 20 66 6f 72 20 74 79 70 65 6f 66   used for typeof
22160 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50  () */.#define OP
22170 46 4c 41 47 5f 42 55 4c 4b 43 53 52 20 20 20 20  FLAG_BULKCSR    
22180 20 20 20 30 78 30 31 20 20 20 20 2f 2a 20 4f 50     0x01    /* OP
22190 5f 4f 70 65 6e 2a 2a 20 75 73 65 64 20 74 6f 20  _Open** used to 
221a0 6f 70 65 6e 20 62 75 6c 6b 20 63 75 72 73 6f 72  open bulk cursor
221b0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c   */.#define OPFL
221c0 41 47 5f 53 45 45 4b 45 51 20 20 20 20 20 20 20  AG_SEEKEQ       
221d0 20 30 78 30 32 20 20 20 20 2f 2a 20 4f 50 5f 4f   0x02    /* OP_O
221e0 70 65 6e 2a 2a 20 63 75 72 73 6f 72 20 75 73 65  pen** cursor use
221f0 73 20 45 51 20 73 65 65 6b 20 6f 6e 6c 79 20 2a  s EQ seek only *
22200 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47  /.#define OPFLAG
22210 5f 46 4f 52 44 45 4c 45 54 45 20 20 20 20 20 30  _FORDELETE     0
22220 78 30 38 20 20 20 20 2f 2a 20 4f 50 5f 4f 70 65  x08    /* OP_Ope
22230 6e 20 73 68 6f 75 6c 64 20 75 73 65 20 42 54 52  n should use BTR
22240 45 45 5f 46 4f 52 44 45 4c 45 54 45 20 2a 2f 0a  EE_FORDELETE */.
22250 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 50  #define OPFLAG_P
22260 32 49 53 52 45 47 20 20 20 20 20 20 20 30 78 31  2ISREG       0x1
22270 30 20 20 20 20 2f 2a 20 50 32 20 74 6f 20 4f 50  0    /* P2 to OP
22280 5f 4f 70 65 6e 2a 2a 20 69 73 20 61 20 72 65 67  _Open** is a reg
22290 69 73 74 65 72 20 6e 75 6d 62 65 72 20 2a 2f 0a  ister number */.
222a0 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 50  #define OPFLAG_P
222b0 45 52 4d 55 54 45 20 20 20 20 20 20 20 30 78 30  ERMUTE       0x0
222c0 31 20 20 20 20 2f 2a 20 4f 50 5f 43 6f 6d 70 61  1    /* OP_Compa
222d0 72 65 3a 20 75 73 65 20 74 68 65 20 70 65 72 6d  re: use the perm
222e0 75 74 61 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69  utation */.#defi
222f0 6e 65 20 4f 50 46 4c 41 47 5f 53 41 56 45 50 4f  ne OPFLAG_SAVEPO
22300 53 49 54 49 4f 4e 20 20 30 78 30 32 20 20 20 20  SITION  0x02    
22310 2f 2a 20 4f 50 5f 44 65 6c 65 74 65 2f 49 6e 73  /* OP_Delete/Ins
22320 65 72 74 3a 20 73 61 76 65 20 63 75 72 73 6f 72  ert: save cursor
22330 20 70 6f 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20   pos */.#define 
22340 4f 50 46 4c 41 47 5f 41 55 58 44 45 4c 45 54 45  OPFLAG_AUXDELETE
22350 20 20 20 20 20 30 78 30 34 20 20 20 20 2f 2a 20       0x04    /* 
22360 4f 50 5f 44 65 6c 65 74 65 3a 20 69 6e 64 65 78  OP_Delete: index
22370 20 69 6e 20 61 20 44 45 4c 45 54 45 20 6f 70 20   in a DELETE op 
22380 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41  */.#define OPFLA
22390 47 5f 4e 4f 43 48 4e 47 5f 4d 41 47 49 43 20 20  G_NOCHNG_MAGIC  
223a0 30 78 36 64 20 20 20 20 2f 2a 20 4f 50 5f 4d 61  0x6d    /* OP_Ma
223b0 6b 65 52 65 63 6f 72 64 3a 20 73 65 72 69 61 6c  keRecord: serial
223c0 74 79 70 65 20 31 30 20 69 73 20 6f 6b 20 2a 2f  type 10 is ok */
223d0 0a 0a 2f 2a 0a 20 2a 20 45 61 63 68 20 74 72 69  ../*. * Each tri
223e0 67 67 65 72 20 70 72 65 73 65 6e 74 20 69 6e 20  gger present in 
223f0 74 68 65 20 64 61 74 61 62 61 73 65 20 73 63 68  the database sch
22400 65 6d 61 20 69 73 20 73 74 6f 72 65 64 20 61 73  ema is stored as
22410 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 0a   an instance of.
22420 20 2a 20 73 74 72 75 63 74 20 54 72 69 67 67 65   * struct Trigge
22430 72 2e 0a 20 2a 0a 20 2a 20 50 6f 69 6e 74 65 72  r.. *. * Pointer
22440 73 20 74 6f 20 69 6e 73 74 61 6e 63 65 73 20 6f  s to instances o
22450 66 20 73 74 72 75 63 74 20 54 72 69 67 67 65 72  f struct Trigger
22460 20 61 72 65 20 73 74 6f 72 65 64 20 69 6e 20 74   are stored in t
22470 77 6f 20 77 61 79 73 2e 0a 20 2a 20 31 2e 20 49  wo ways.. * 1. I
22480 6e 20 74 68 65 20 22 74 72 69 67 48 61 73 68 22  n the "trigHash"
22490 20 68 61 73 68 20 74 61 62 6c 65 20 28 70 61 72   hash table (par
224a0 74 20 6f 66 20 74 68 65 20 73 71 6c 69 74 65 33  t of the sqlite3
224b0 2a 20 74 68 61 74 20 72 65 70 72 65 73 65 6e 74  * that represent
224c0 73 20 74 68 65 0a 20 2a 20 20 20 20 64 61 74 61  s the. *    data
224d0 62 61 73 65 29 2e 20 54 68 69 73 20 61 6c 6c 6f  base). This allo
224e0 77 73 20 54 72 69 67 67 65 72 20 73 74 72 75 63  ws Trigger struc
224f0 74 75 72 65 73 20 74 6f 20 62 65 20 72 65 74 72  tures to be retr
22500 69 65 76 65 64 20 62 79 20 6e 61 6d 65 2e 0a 20  ieved by name.. 
22510 2a 20 32 2e 20 41 6c 6c 20 74 72 69 67 67 65 72  * 2. All trigger
22520 73 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  s associated wit
22530 68 20 61 20 73 69 6e 67 6c 65 20 74 61 62 6c 65  h a single table
22540 20 66 6f 72 6d 20 61 20 6c 69 6e 6b 65 64 20 6c   form a linked l
22550 69 73 74 2c 20 75 73 69 6e 67 20 74 68 65 0a 20  ist, using the. 
22560 2a 20 20 20 20 70 4e 65 78 74 20 6d 65 6d 62 65  *    pNext membe
22570 72 20 6f 66 20 73 74 72 75 63 74 20 54 72 69 67  r of struct Trig
22580 67 65 72 2e 20 41 20 70 6f 69 6e 74 65 72 20 74  ger. A pointer t
22590 6f 20 74 68 65 20 66 69 72 73 74 20 65 6c 65 6d  o the first elem
225a0 65 6e 74 20 6f 66 20 74 68 65 0a 20 2a 20 20 20  ent of the. *   
225b0 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 69 73 20   linked list is 
225c0 73 74 6f 72 65 64 20 61 73 20 74 68 65 20 22 70  stored as the "p
225d0 54 72 69 67 67 65 72 22 20 6d 65 6d 62 65 72 20  Trigger" member 
225e0 6f 66 20 74 68 65 20 61 73 73 6f 63 69 61 74 65  of the associate
225f0 64 0a 20 2a 20 20 20 20 73 74 72 75 63 74 20 54  d. *    struct T
22600 61 62 6c 65 2e 0a 20 2a 0a 20 2a 20 54 68 65 20  able.. *. * The 
22610 22 73 74 65 70 5f 6c 69 73 74 22 20 6d 65 6d 62  "step_list" memb
22620 65 72 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65  er points to the
22630 20 66 69 72 73 74 20 65 6c 65 6d 65 6e 74 20 6f   first element o
22640 66 20 61 20 6c 69 6e 6b 65 64 20 6c 69 73 74 0a  f a linked list.
22650 20 2a 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68   * containing th
22660 65 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73  e SQL statements
22670 20 73 70 65 63 69 66 69 65 64 20 61 73 20 74 68   specified as th
22680 65 20 74 72 69 67 67 65 72 20 70 72 6f 67 72 61  e trigger progra
22690 6d 2e 0a 20 2a 2f 0a 73 74 72 75 63 74 20 54 72  m.. */.struct Tr
226a0 69 67 67 65 72 20 7b 0a 20 20 63 68 61 72 20 2a  igger {.  char *
226b0 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20  zName;          
226c0 20 20 2f 2a 20 54 68 65 20 6e 61 6d 65 20 6f 66    /* The name of
226d0 20 74 68 65 20 74 72 69 67 67 65 72 20 20 20 20   the trigger    
226e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
226f0 20 20 20 20 2a 2f 0a 20 20 63 68 61 72 20 2a 74      */.  char *t
22700 61 62 6c 65 3b 20 20 20 20 20 20 20 20 20 20 20  able;           
22710 20 2f 2a 20 54 68 65 20 74 61 62 6c 65 20 6f 72   /* The table or
22720 20 76 69 65 77 20 74 6f 20 77 68 69 63 68 20 74   view to which t
22730 68 65 20 74 72 69 67 67 65 72 20 61 70 70 6c 69  he trigger appli
22740 65 73 20 2a 2f 0a 20 20 75 38 20 6f 70 3b 20 20  es */.  u8 op;  
22750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22760 2f 2a 20 4f 6e 65 20 6f 66 20 54 4b 5f 44 45 4c  /* One of TK_DEL
22770 45 54 45 2c 20 54 4b 5f 55 50 44 41 54 45 2c 20  ETE, TK_UPDATE, 
22780 54 4b 5f 49 4e 53 45 52 54 20 20 20 20 20 20 20  TK_INSERT       
22790 20 20 2a 2f 0a 20 20 75 38 20 74 72 5f 74 6d 3b    */.  u8 tr_tm;
227a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
227b0 2a 20 4f 6e 65 20 6f 66 20 54 52 49 47 47 45 52  * One of TRIGGER
227c0 5f 42 45 46 4f 52 45 2c 20 54 52 49 47 47 45 52  _BEFORE, TRIGGER
227d0 5f 41 46 54 45 52 20 2a 2f 0a 20 20 45 78 70 72  _AFTER */.  Expr
227e0 20 2a 70 57 68 65 6e 3b 20 20 20 20 20 20 20 20   *pWhen;        
227f0 20 20 20 20 2f 2a 20 54 68 65 20 57 48 45 4e 20      /* The WHEN 
22800 63 6c 61 75 73 65 20 6f 66 20 74 68 65 20 65 78  clause of the ex
22810 70 72 65 73 73 69 6f 6e 20 28 6d 61 79 20 62 65  pression (may be
22820 20 4e 55 4c 4c 29 20 2a 2f 0a 20 20 49 64 4c 69   NULL) */.  IdLi
22830 73 74 20 2a 70 43 6f 6c 75 6d 6e 73 3b 20 20 20  st *pColumns;   
22840 20 20 20 20 2f 2a 20 49 66 20 74 68 69 73 20 69      /* If this i
22850 73 20 61 6e 20 55 50 44 41 54 45 20 4f 46 20 3c  s an UPDATE OF <
22860 63 6f 6c 75 6d 6e 2d 6c 69 73 74 3e 20 74 72 69  column-list> tri
22870 67 67 65 72 2c 0a 20 20 20 20 20 20 20 20 20 20  gger,.          
22880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22890 20 20 20 74 68 65 20 3c 63 6f 6c 75 6d 6e 2d 6c     the <column-l
228a0 69 73 74 3e 20 69 73 20 73 74 6f 72 65 64 20 68  ist> is stored h
228b0 65 72 65 20 2a 2f 0a 20 20 53 63 68 65 6d 61 20  ere */.  Schema 
228c0 2a 70 53 63 68 65 6d 61 3b 20 20 20 20 20 20 20  *pSchema;       
228d0 20 2f 2a 20 53 63 68 65 6d 61 20 63 6f 6e 74 61   /* Schema conta
228e0 69 6e 69 6e 67 20 74 68 65 20 74 72 69 67 67 65  ining the trigge
228f0 72 20 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70  r */.  Schema *p
22900 54 61 62 53 63 68 65 6d 61 3b 20 20 20 20 20 2f  TabSchema;     /
22910 2a 20 53 63 68 65 6d 61 20 63 6f 6e 74 61 69 6e  * Schema contain
22920 69 6e 67 20 74 68 65 20 74 61 62 6c 65 20 2a 2f  ing the table */
22930 0a 20 20 54 72 69 67 67 65 72 53 74 65 70 20 2a  .  TriggerStep *
22940 73 74 65 70 5f 6c 69 73 74 3b 20 2f 2a 20 4c 69  step_list; /* Li
22950 6e 6b 20 6c 69 73 74 20 6f 66 20 74 72 69 67 67  nk list of trigg
22960 65 72 20 70 72 6f 67 72 61 6d 20 73 74 65 70 73  er program steps
22970 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2f 0a               */.
22980 20 20 54 72 69 67 67 65 72 20 2a 70 4e 65 78 74    Trigger *pNext
22990 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 78  ;         /* Nex
229a0 74 20 74 72 69 67 67 65 72 20 61 73 73 6f 63 69  t trigger associ
229b0 61 74 65 64 20 77 69 74 68 20 74 68 65 20 74 61  ated with the ta
229c0 62 6c 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  ble */.};../*.**
229d0 20 41 20 74 72 69 67 67 65 72 20 69 73 20 65 69   A trigger is ei
229e0 74 68 65 72 20 61 20 42 45 46 4f 52 45 20 6f 72  ther a BEFORE or
229f0 20 61 6e 20 41 46 54 45 52 20 74 72 69 67 67 65   an AFTER trigge
22a00 72 2e 20 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e  r.  The followin
22a10 67 20 63 6f 6e 73 74 61 6e 74 73 0a 2a 2a 20 64  g constants.** d
22a20 65 74 65 72 6d 69 6e 65 20 77 68 69 63 68 2e 0a  etermine which..
22a30 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 72 65 20 61  **.** If there a
22a40 72 65 20 6d 75 6c 74 69 70 6c 65 20 74 72 69 67  re multiple trig
22a50 67 65 72 73 2c 20 79 6f 75 20 6d 69 67 68 74 20  gers, you might 
22a60 6f 66 20 73 6f 6d 65 20 42 45 46 4f 52 45 20 61  of some BEFORE a
22a70 6e 64 20 73 6f 6d 65 20 41 46 54 45 52 2e 0a 2a  nd some AFTER..*
22a80 2a 20 49 6e 20 74 68 61 74 20 63 61 73 65 73 2c  * In that cases,
22a90 20 74 68 65 20 63 6f 6e 73 74 61 6e 74 73 20 62   the constants b
22aa0 65 6c 6f 77 20 63 61 6e 20 62 65 20 4f 52 65 64  elow can be ORed
22ab0 20 74 6f 67 65 74 68 65 72 2e 0a 2a 2f 0a 23 64   together..*/.#d
22ac0 65 66 69 6e 65 20 54 52 49 47 47 45 52 5f 42 45  efine TRIGGER_BE
22ad0 46 4f 52 45 20 20 31 0a 23 64 65 66 69 6e 65 20  FORE  1.#define 
22ae0 54 52 49 47 47 45 52 5f 41 46 54 45 52 20 20 20  TRIGGER_AFTER   
22af0 32 0a 0a 2f 2a 0a 20 2a 20 41 6e 20 69 6e 73 74  2../*. * An inst
22b00 61 6e 63 65 20 6f 66 20 73 74 72 75 63 74 20 54  ance of struct T
22b10 72 69 67 67 65 72 53 74 65 70 20 69 73 20 75 73  riggerStep is us
22b20 65 64 20 74 6f 20 73 74 6f 72 65 20 61 20 73 69  ed to store a si
22b30 6e 67 6c 65 20 53 51 4c 20 73 74 61 74 65 6d 65  ngle SQL stateme
22b40 6e 74 0a 20 2a 20 74 68 61 74 20 69 73 20 61 20  nt. * that is a 
22b50 70 61 72 74 20 6f 66 20 61 20 74 72 69 67 67 65  part of a trigge
22b60 72 2d 70 72 6f 67 72 61 6d 2e 0a 20 2a 0a 20 2a  r-program.. *. *
22b70 20 49 6e 73 74 61 6e 63 65 73 20 6f 66 20 73 74   Instances of st
22b80 72 75 63 74 20 54 72 69 67 67 65 72 53 74 65 70  ruct TriggerStep
22b90 20 61 72 65 20 73 74 6f 72 65 64 20 69 6e 20 61   are stored in a
22ba0 20 73 69 6e 67 6c 79 20 6c 69 6e 6b 65 64 20 6c   singly linked l
22bb0 69 73 74 20 28 6c 69 6e 6b 65 64 0a 20 2a 20 75  ist (linked. * u
22bc0 73 69 6e 67 20 74 68 65 20 22 70 4e 65 78 74 22  sing the "pNext"
22bd0 20 6d 65 6d 62 65 72 29 20 72 65 66 65 72 65 6e   member) referen
22be0 63 65 64 20 62 79 20 74 68 65 20 22 73 74 65 70  ced by the "step
22bf0 5f 6c 69 73 74 22 20 6d 65 6d 62 65 72 20 6f 66  _list" member of
22c00 20 74 68 65 0a 20 2a 20 61 73 73 6f 63 69 61 74   the. * associat
22c10 65 64 20 73 74 72 75 63 74 20 54 72 69 67 67 65  ed struct Trigge
22c20 72 20 69 6e 73 74 61 6e 63 65 2e 20 54 68 65 20  r instance. The 
22c30 66 69 72 73 74 20 65 6c 65 6d 65 6e 74 20 6f 66  first element of
22c40 20 74 68 65 20 6c 69 6e 6b 65 64 20 6c 69 73 74   the linked list
22c50 20 69 73 0a 20 2a 20 74 68 65 20 66 69 72 73 74   is. * the first
22c60 20 73 74 65 70 20 6f 66 20 74 68 65 20 74 72 69   step of the tri
22c70 67 67 65 72 2d 70 72 6f 67 72 61 6d 2e 0a 20 2a  gger-program.. *
22c80 0a 20 2a 20 54 68 65 20 22 6f 70 22 20 6d 65 6d  . * The "op" mem
22c90 62 65 72 20 69 6e 64 69 63 61 74 65 73 20 77 68  ber indicates wh
22ca0 65 74 68 65 72 20 74 68 69 73 20 69 73 20 61 20  ether this is a 
22cb0 22 44 45 4c 45 54 45 22 2c 20 22 49 4e 53 45 52  "DELETE", "INSER
22cc0 54 22 2c 20 22 55 50 44 41 54 45 22 20 6f 72 0a  T", "UPDATE" or.
22cd0 20 2a 20 22 53 45 4c 45 43 54 22 20 73 74 61 74   * "SELECT" stat
22ce0 65 6d 65 6e 74 2e 20 54 68 65 20 6d 65 61 6e 69  ement. The meani
22cf0 6e 67 73 20 6f 66 20 74 68 65 20 6f 74 68 65 72  ngs of the other
22d00 20 6d 65 6d 62 65 72 73 20 69 73 20 64 65 74 65   members is dete
22d10 72 6d 69 6e 65 64 20 62 79 20 74 68 65 0a 20 2a  rmined by the. *
22d20 20 76 61 6c 75 65 20 6f 66 20 22 6f 70 22 20 61   value of "op" a
22d30 73 20 66 6f 6c 6c 6f 77 73 3a 0a 20 2a 0a 20 2a  s follows:. *. *
22d40 20 28 6f 70 20 3d 3d 20 54 4b 5f 49 4e 53 45 52   (op == TK_INSER
22d50 54 29 0a 20 2a 20 6f 72 63 6f 6e 66 20 20 20 20  T). * orconf    
22d60 2d 3e 20 73 74 6f 72 65 73 20 74 68 65 20 4f 4e  -> stores the ON
22d70 20 43 4f 4e 46 4c 49 43 54 20 61 6c 67 6f 72 69   CONFLICT algori
22d80 74 68 6d 0a 20 2a 20 70 53 65 6c 65 63 74 20 20  thm. * pSelect  
22d90 20 2d 3e 20 49 66 20 74 68 69 73 20 69 73 20 61   -> If this is a
22da0 6e 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 2e 2e  n INSERT INTO ..
22db0 2e 20 53 45 4c 45 43 54 20 2e 2e 2e 20 73 74 61  . SELECT ... sta
22dc0 74 65 6d 65 6e 74 2c 20 74 68 65 6e 0a 20 2a 20  tement, then. * 
22dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69               thi
22de0 73 20 73 74 6f 72 65 73 20 61 20 70 6f 69 6e 74  s stores a point
22df0 65 72 20 74 6f 20 74 68 65 20 53 45 4c 45 43 54  er to the SELECT
22e00 20 73 74 61 74 65 6d 65 6e 74 2e 20 4f 74 68 65   statement. Othe
22e10 72 77 69 73 65 20 4e 55 4c 4c 2e 0a 20 2a 20 7a  rwise NULL.. * z
22e20 54 61 72 67 65 74 20 20 20 2d 3e 20 44 65 71 75  Target   -> Dequ
22e30 6f 74 65 64 20 6e 61 6d 65 20 6f 66 20 74 68 65  oted name of the
22e40 20 74 61 62 6c 65 20 74 6f 20 69 6e 73 65 72 74   table to insert
22e50 20 69 6e 74 6f 2e 0a 20 2a 20 70 45 78 70 72 4c   into.. * pExprL
22e60 69 73 74 20 2d 3e 20 49 66 20 74 68 69 73 20 69  ist -> If this i
22e70 73 20 61 6e 20 49 4e 53 45 52 54 20 49 4e 54 4f  s an INSERT INTO
22e80 20 2e 2e 2e 20 56 41 4c 55 45 53 20 2e 2e 2e 20   ... VALUES ... 
22e90 73 74 61 74 65 6d 65 6e 74 2c 20 74 68 65 6e 0a  statement, then.
22ea0 20 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20   *              
22eb0 74 68 69 73 20 73 74 6f 72 65 73 20 76 61 6c 75  this stores valu
22ec0 65 73 20 74 6f 20 62 65 20 69 6e 73 65 72 74 65  es to be inserte
22ed0 64 2e 20 4f 74 68 65 72 77 69 73 65 20 4e 55 4c  d. Otherwise NUL
22ee0 4c 2e 0a 20 2a 20 70 49 64 4c 69 73 74 20 20 20  L.. * pIdList   
22ef0 2d 3e 20 49 66 20 74 68 69 73 20 69 73 20 61 6e  -> If this is an
22f00 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 2e 2e 2e   INSERT INTO ...
22f10 20 28 3c 63 6f 6c 75 6d 6e 2d 6e 61 6d 65 73 3e   (<column-names>
22f20 29 20 56 41 4c 55 45 53 20 2e 2e 2e 0a 20 2a 20  ) VALUES .... * 
22f30 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 61               sta
22f40 74 65 6d 65 6e 74 2c 20 74 68 65 6e 20 74 68 69  tement, then thi
22f50 73 20 73 74 6f 72 65 73 20 74 68 65 20 63 6f 6c  s stores the col
22f60 75 6d 6e 2d 6e 61 6d 65 73 20 74 6f 20 62 65 0a  umn-names to be.
22f70 20 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20   *              
22f80 69 6e 73 65 72 74 65 64 20 69 6e 74 6f 2e 0a 20  inserted into.. 
22f90 2a 0a 20 2a 20 28 6f 70 20 3d 3d 20 54 4b 5f 44  *. * (op == TK_D
22fa0 45 4c 45 54 45 29 0a 20 2a 20 7a 54 61 72 67 65  ELETE). * zTarge
22fb0 74 20 20 20 2d 3e 20 44 65 71 75 6f 74 65 64 20  t   -> Dequoted 
22fc0 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c  name of the tabl
22fd0 65 20 74 6f 20 64 65 6c 65 74 65 20 66 72 6f 6d  e to delete from
22fe0 2e 0a 20 2a 20 70 57 68 65 72 65 20 20 20 20 2d  .. * pWhere    -
22ff0 3e 20 54 68 65 20 57 48 45 52 45 20 63 6c 61 75  > The WHERE clau
23000 73 65 20 6f 66 20 74 68 65 20 44 45 4c 45 54 45  se of the DELETE
23010 20 73 74 61 74 65 6d 65 6e 74 20 69 66 20 6f 6e   statement if on
23020 65 20 69 73 20 73 70 65 63 69 66 69 65 64 2e 0a  e is specified..
23030 20 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20   *              
23040 4f 74 68 65 72 77 69 73 65 20 4e 55 4c 4c 2e 0a  Otherwise NULL..
23050 20 2a 0a 20 2a 20 28 6f 70 20 3d 3d 20 54 4b 5f   *. * (op == TK_
23060 55 50 44 41 54 45 29 0a 20 2a 20 7a 54 61 72 67  UPDATE). * zTarg
23070 65 74 20 20 20 2d 3e 20 44 65 71 75 6f 74 65 64  et   -> Dequoted
23080 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62   name of the tab
23090 6c 65 20 74 6f 20 75 70 64 61 74 65 2e 0a 20 2a  le to update.. *
230a0 20 70 57 68 65 72 65 20 20 20 20 2d 3e 20 54 68   pWhere    -> Th
230b0 65 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 6f  e WHERE clause o
230c0 66 20 74 68 65 20 55 50 44 41 54 45 20 73 74 61  f the UPDATE sta
230d0 74 65 6d 65 6e 74 20 69 66 20 6f 6e 65 20 69 73  tement if one is
230e0 20 73 70 65 63 69 66 69 65 64 2e 0a 20 2a 20 20   specified.. *  
230f0 20 20 20 20 20 20 20 20 20 20 20 20 4f 74 68 65              Othe
23100 72 77 69 73 65 20 4e 55 4c 4c 2e 0a 20 2a 20 70  rwise NULL.. * p
23110 45 78 70 72 4c 69 73 74 20 2d 3e 20 41 20 6c 69  ExprList -> A li
23120 73 74 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e  st of the column
23130 73 20 74 6f 20 75 70 64 61 74 65 20 61 6e 64 20  s to update and 
23140 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 73 20  the expressions 
23150 74 6f 20 75 70 64 61 74 65 0a 20 2a 20 20 20 20  to update. *    
23160 20 20 20 20 20 20 20 20 20 20 74 68 65 6d 20 74            them t
23170 6f 2e 20 53 65 65 20 73 71 6c 69 74 65 33 55 70  o. See sqlite3Up
23180 64 61 74 65 28 29 20 64 6f 63 75 6d 65 6e 74 61  date() documenta
23190 74 69 6f 6e 20 6f 66 20 22 70 43 68 61 6e 67 65  tion of "pChange
231a0 73 22 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20  s". *           
231b0 20 20 20 61 72 67 75 6d 65 6e 74 2e 0a 20 2a 0a     argument.. *.
231c0 20 2a 2f 0a 73 74 72 75 63 74 20 54 72 69 67 67   */.struct Trigg
231d0 65 72 53 74 65 70 20 7b 0a 20 20 75 38 20 6f 70  erStep {.  u8 op
231e0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
231f0 2f 2a 20 4f 6e 65 20 6f 66 20 54 4b 5f 44 45 4c  /* One of TK_DEL
23200 45 54 45 2c 20 54 4b 5f 55 50 44 41 54 45 2c 20  ETE, TK_UPDATE, 
23210 54 4b 5f 49 4e 53 45 52 54 2c 20 54 4b 5f 53 45  TK_INSERT, TK_SE
23220 4c 45 43 54 20 2a 2f 0a 20 20 75 38 20 6f 72 63  LECT */.  u8 orc
23230 6f 6e 66 3b 20 20 20 20 20 20 20 20 20 20 20 2f  onf;           /
23240 2a 20 4f 45 5f 52 6f 6c 6c 62 61 63 6b 20 65 74  * OE_Rollback et
23250 63 2e 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 20  c. */.  Trigger 
23260 2a 70 54 72 69 67 3b 20 20 20 20 20 20 2f 2a 20  *pTrig;      /* 
23270 54 68 65 20 74 72 69 67 67 65 72 20 74 68 61 74  The trigger that
23280 20 74 68 69 73 20 73 74 65 70 20 69 73 20 61 20   this step is a 
23290 70 61 72 74 20 6f 66 20 2a 2f 0a 20 20 53 65 6c  part of */.  Sel
232a0 65 63 74 20 2a 70 53 65 6c 65 63 74 3b 20 20 20  ect *pSelect;   
232b0 20 20 2f 2a 20 53 45 4c 45 43 54 20 73 74 61 74    /* SELECT stat
232c0 65 6d 65 6e 74 20 6f 72 20 52 48 53 20 6f 66 20  ement or RHS of 
232d0 49 4e 53 45 52 54 20 49 4e 54 4f 20 53 45 4c 45  INSERT INTO SELE
232e0 43 54 20 2e 2e 2e 20 2a 2f 0a 20 20 63 68 61 72  CT ... */.  char
232f0 20 2a 7a 54 61 72 67 65 74 3b 20 20 20 20 20 20   *zTarget;      
23300 20 2f 2a 20 54 61 72 67 65 74 20 74 61 62 6c 65   /* Target table
23310 20 66 6f 72 20 44 45 4c 45 54 45 2c 20 55 50 44   for DELETE, UPD
23320 41 54 45 2c 20 49 4e 53 45 52 54 20 2a 2f 0a 20  ATE, INSERT */. 
23330 20 45 78 70 72 20 2a 70 57 68 65 72 65 3b 20 20   Expr *pWhere;  
23340 20 20 20 20 20 20 2f 2a 20 54 68 65 20 57 48 45        /* The WHE
23350 52 45 20 63 6c 61 75 73 65 20 66 6f 72 20 44 45  RE clause for DE
23360 4c 45 54 45 20 6f 72 20 55 50 44 41 54 45 20 73  LETE or UPDATE s
23370 74 65 70 73 20 2a 2f 0a 20 20 45 78 70 72 4c 69  teps */.  ExprLi
23380 73 74 20 2a 70 45 78 70 72 4c 69 73 74 3b 20 2f  st *pExprList; /
23390 2a 20 53 45 54 20 63 6c 61 75 73 65 20 66 6f 72  * SET clause for
233a0 20 55 50 44 41 54 45 20 2a 2f 0a 20 20 49 64 4c   UPDATE */.  IdL
233b0 69 73 74 20 2a 70 49 64 4c 69 73 74 3b 20 20 20  ist *pIdList;   
233c0 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20 6e 61 6d 65    /* Column name
233d0 73 20 66 6f 72 20 49 4e 53 45 52 54 20 2a 2f 0a  s for INSERT */.
233e0 20 20 55 70 73 65 72 74 20 2a 70 55 70 73 65 72    Upsert *pUpser
233f0 74 3b 20 20 20 20 20 2f 2a 20 55 70 73 65 72 74  t;     /* Upsert
23400 20 63 6c 61 75 73 65 73 20 6f 6e 20 61 6e 20 49   clauses on an I
23410 4e 53 45 52 54 20 2a 2f 0a 20 20 63 68 61 72 20  NSERT */.  char 
23420 2a 7a 53 70 61 6e 3b 20 20 20 20 20 20 20 20 20  *zSpan;         
23430 2f 2a 20 4f 72 69 67 69 6e 61 6c 20 53 51 4c 20  /* Original SQL 
23440 74 65 78 74 20 6f 66 20 74 68 69 73 20 63 6f 6d  text of this com
23450 6d 61 6e 64 20 2a 2f 0a 20 20 54 72 69 67 67 65  mand */.  Trigge
23460 72 53 74 65 70 20 2a 70 4e 65 78 74 3b 20 20 2f  rStep *pNext;  /
23470 2a 20 4e 65 78 74 20 69 6e 20 74 68 65 20 6c 69  * Next in the li
23480 6e 6b 2d 6c 69 73 74 20 2a 2f 0a 20 20 54 72 69  nk-list */.  Tri
23490 67 67 65 72 53 74 65 70 20 2a 70 4c 61 73 74 3b  ggerStep *pLast;
234a0 20 20 2f 2a 20 4c 61 73 74 20 65 6c 65 6d 65 6e    /* Last elemen
234b0 74 20 69 6e 20 6c 69 6e 6b 2d 6c 69 73 74 2e 20  t in link-list. 
234c0 56 61 6c 69 64 20 66 6f 72 20 31 73 74 20 65 6c  Valid for 1st el
234d0 65 6d 20 6f 6e 6c 79 20 2a 2f 0a 7d 3b 0a 0a 2f  em only */.};../
234e0 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69  *.** The followi
234f0 6e 67 20 73 74 72 75 63 74 75 72 65 20 63 6f 6e  ng structure con
23500 74 61 69 6e 73 20 69 6e 66 6f 72 6d 61 74 69 6f  tains informatio
23510 6e 20 75 73 65 64 20 62 79 20 74 68 65 20 73 71  n used by the sq
23520 6c 69 74 65 46 69 78 2e 2e 2e 0a 2a 2a 20 72 6f  liteFix....** ro
23530 75 74 69 6e 65 73 20 61 73 20 74 68 65 79 20 77  utines as they w
23540 61 6c 6b 20 74 68 65 20 70 61 72 73 65 20 74 72  alk the parse tr
23550 65 65 20 74 6f 20 6d 61 6b 65 20 64 61 74 61 62  ee to make datab
23560 61 73 65 20 72 65 66 65 72 65 6e 63 65 73 0a 2a  ase references.*
23570 2a 20 65 78 70 6c 69 63 69 74 2e 0a 2a 2f 0a 74  * explicit..*/.t
23580 79 70 65 64 65 66 20 73 74 72 75 63 74 20 44 62  ypedef struct Db
23590 46 69 78 65 72 20 44 62 46 69 78 65 72 3b 0a 73  Fixer DbFixer;.s
235a0 74 72 75 63 74 20 44 62 46 69 78 65 72 20 7b 0a  truct DbFixer {.
235b0 20 20 50 61 72 73 65 20 2a 70 50 61 72 73 65 3b    Parse *pParse;
235c0 20 20 20 20 20 20 2f 2a 20 54 68 65 20 70 61 72        /* The par
235d0 73 69 6e 67 20 63 6f 6e 74 65 78 74 2e 20 20 45  sing context.  E
235e0 72 72 6f 72 20 6d 65 73 73 61 67 65 73 20 77 72  rror messages wr
235f0 69 74 74 65 6e 20 68 65 72 65 20 2a 2f 0a 20 20  itten here */.  
23600 53 63 68 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b  Schema *pSchema;
23610 20 20 20 20 2f 2a 20 46 69 78 20 69 74 65 6d 73      /* Fix items
23620 20 74 6f 20 74 68 69 73 20 73 63 68 65 6d 61 20   to this schema 
23630 2a 2f 0a 20 20 69 6e 74 20 62 56 61 72 4f 6e 6c  */.  int bVarOnl
23640 79 3b 20 20 20 20 20 20 20 2f 2a 20 43 68 65 63  y;       /* Chec
23650 6b 20 66 6f 72 20 76 61 72 69 61 62 6c 65 20 72  k for variable r
23660 65 66 65 72 65 6e 63 65 73 20 6f 6e 6c 79 20 2a  eferences only *
23670 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  /.  const char *
23680 7a 44 62 3b 20 20 20 20 2f 2a 20 4d 61 6b 65 20  zDb;    /* Make 
23690 73 75 72 65 20 61 6c 6c 20 6f 62 6a 65 63 74 73  sure all objects
236a0 20 61 72 65 20 63 6f 6e 74 61 69 6e 65 64 20 69   are contained i
236b0 6e 20 74 68 69 73 20 64 61 74 61 62 61 73 65 20  n this database 
236c0 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20  */.  const char 
236d0 2a 7a 54 79 70 65 3b 20 20 2f 2a 20 54 79 70 65  *zType;  /* Type
236e0 20 6f 66 20 74 68 65 20 63 6f 6e 74 61 69 6e 65   of the containe
236f0 72 20 2d 20 75 73 65 64 20 66 6f 72 20 65 72 72  r - used for err
23700 6f 72 20 6d 65 73 73 61 67 65 73 20 2a 2f 0a 20  or messages */. 
23710 20 63 6f 6e 73 74 20 54 6f 6b 65 6e 20 2a 70 4e   const Token *pN
23720 61 6d 65 3b 20 2f 2a 20 4e 61 6d 65 20 6f 66 20  ame; /* Name of 
23730 74 68 65 20 63 6f 6e 74 61 69 6e 65 72 20 2d 20  the container - 
23740 75 73 65 64 20 66 6f 72 20 65 72 72 6f 72 20 6d  used for error m
23750 65 73 73 61 67 65 73 20 2a 2f 0a 7d 3b 0a 0a 2f  essages */.};../
23760 2a 0a 2a 2a 20 41 6e 20 6f 62 6a 65 63 74 65 64  *.** An objected
23770 20 75 73 65 64 20 74 6f 20 61 63 63 75 6d 75 6c   used to accumul
23780 61 74 65 20 74 68 65 20 74 65 78 74 20 6f 66 20  ate the text of 
23790 61 20 73 74 72 69 6e 67 20 77 68 65 72 65 20 77  a string where w
237a0 65 0a 2a 2a 20 64 6f 20 6e 6f 74 20 6e 65 63 65  e.** do not nece
237b0 73 73 61 72 69 6c 79 20 6b 6e 6f 77 20 68 6f 77  ssarily know how
237c0 20 62 69 67 20 74 68 65 20 73 74 72 69 6e 67 20   big the string 
237d0 77 69 6c 6c 20 62 65 20 69 6e 20 74 68 65 20 65  will be in the e
237e0 6e 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 73 71  nd..*/.struct sq
237f0 6c 69 74 65 33 5f 73 74 72 20 7b 0a 20 20 73 71  lite3_str {.  sq
23800 6c 69 74 65 33 20 2a 64 62 3b 20 20 20 20 20 20  lite3 *db;      
23810 20 20 20 2f 2a 20 4f 70 74 69 6f 6e 61 6c 20 64     /* Optional d
23820 61 74 61 62 61 73 65 20 66 6f 72 20 6c 6f 6f 6b  atabase for look
23830 61 73 69 64 65 2e 20 20 43 61 6e 20 62 65 20 4e  aside.  Can be N
23840 55 4c 4c 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a  ULL */.  char *z
23850 54 65 78 74 3b 20 20 20 20 20 20 20 20 20 2f 2a  Text;         /*
23860 20 54 68 65 20 73 74 72 69 6e 67 20 63 6f 6c 6c   The string coll
23870 65 63 74 65 64 20 73 6f 20 66 61 72 20 2a 2f 0a  ected so far */.
23880 20 20 75 33 32 20 20 6e 41 6c 6c 6f 63 3b 20 20    u32  nAlloc;  
23890 20 20 20 20 20 20 20 2f 2a 20 41 6d 6f 75 6e 74         /* Amount
238a0 20 6f 66 20 73 70 61 63 65 20 61 6c 6c 6f 63 61   of space alloca
238b0 74 65 64 20 69 6e 20 7a 54 65 78 74 20 2a 2f 0a  ted in zText */.
238c0 20 20 75 33 32 20 20 6d 78 41 6c 6c 6f 63 3b 20    u32  mxAlloc; 
238d0 20 20 20 20 20 20 20 2f 2a 20 4d 61 78 69 6d 75         /* Maximu
238e0 6d 20 61 6c 6c 6f 77 65 64 20 61 6c 6c 6f 63 61  m allowed alloca
238f0 74 69 6f 6e 2e 20 20 30 20 66 6f 72 20 6e 6f 20  tion.  0 for no 
23900 6d 61 6c 6c 6f 63 20 75 73 61 67 65 20 2a 2f 0a  malloc usage */.
23910 20 20 75 33 32 20 20 6e 43 68 61 72 3b 20 20 20    u32  nChar;   
23920 20 20 20 20 20 20 20 2f 2a 20 4c 65 6e 67 74 68         /* Length
23930 20 6f 66 20 74 68 65 20 73 74 72 69 6e 67 20 73   of the string s
23940 6f 20 66 61 72 20 2a 2f 0a 20 20 75 38 20 20 20  o far */.  u8   
23950 61 63 63 45 72 72 6f 72 3b 20 20 20 20 20 20 20  accError;       
23960 2f 2a 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 20  /* SQLITE_NOMEM 
23970 6f 72 20 53 51 4c 49 54 45 5f 54 4f 4f 42 49 47  or SQLITE_TOOBIG
23980 20 2a 2f 0a 20 20 75 38 20 20 20 70 72 69 6e 74   */.  u8   print
23990 66 46 6c 61 67 73 3b 20 20 20 20 2f 2a 20 53 51  fFlags;    /* SQ
239a0 4c 49 54 45 5f 50 52 49 4e 54 46 20 66 6c 61 67  LITE_PRINTF flag
239b0 73 20 62 65 6c 6f 77 20 2a 2f 0a 7d 3b 0a 23 64  s below */.};.#d
239c0 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 52 49  efine SQLITE_PRI
239d0 4e 54 46 5f 49 4e 54 45 52 4e 41 4c 20 30 78 30  NTF_INTERNAL 0x0
239e0 31 20 20 2f 2a 20 49 6e 74 65 72 6e 61 6c 2d 75  1  /* Internal-u
239f0 73 65 2d 6f 6e 6c 79 20 63 6f 6e 76 65 72 74 65  se-only converte
23a00 72 73 20 61 6c 6c 6f 77 65 64 20 2a 2f 0a 23 64  rs allowed */.#d
23a10 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 52 49  efine SQLITE_PRI
23a20 4e 54 46 5f 53 51 4c 46 55 4e 43 20 20 30 78 30  NTF_SQLFUNC  0x0
23a30 32 20 20 2f 2a 20 53 51 4c 20 66 75 6e 63 74 69  2  /* SQL functi
23a40 6f 6e 20 61 72 67 75 6d 65 6e 74 73 20 74 6f 20  on arguments to 
23a50 56 58 50 72 69 6e 74 66 20 2a 2f 0a 23 64 65 66  VXPrintf */.#def
23a60 69 6e 65 20 53 51 4c 49 54 45 5f 50 52 49 4e 54  ine SQLITE_PRINT
23a70 46 5f 4d 41 4c 4c 4f 43 45 44 20 30 78 30 34 20  F_MALLOCED 0x04 
23a80 20 2f 2a 20 54 72 75 65 20 69 66 20 78 54 65 78   /* True if xTex
23a90 74 20 69 73 20 61 6c 6c 6f 63 61 74 65 64 20 73  t is allocated s
23aa0 70 61 63 65 20 2a 2f 0a 0a 23 64 65 66 69 6e 65  pace */..#define
23ab0 20 69 73 4d 61 6c 6c 6f 63 65 64 28 58 29 20 20   isMalloced(X)  
23ac0 28 28 28 58 29 2d 3e 70 72 69 6e 74 66 46 6c 61  (((X)->printfFla
23ad0 67 73 20 26 20 53 51 4c 49 54 45 5f 50 52 49 4e  gs & SQLITE_PRIN
23ae0 54 46 5f 4d 41 4c 4c 4f 43 45 44 29 21 3d 30 29  TF_MALLOCED)!=0)
23af0 0a 0a 0a 2f 2a 0a 2a 2a 20 41 20 70 6f 69 6e 74  .../*.** A point
23b00 65 72 20 74 6f 20 74 68 69 73 20 73 74 72 75 63  er to this struc
23b10 74 75 72 65 20 69 73 20 75 73 65 64 20 74 6f 20  ture is used to 
23b20 63 6f 6d 6d 75 6e 69 63 61 74 65 20 69 6e 66 6f  communicate info
23b30 72 6d 61 74 69 6f 6e 0a 2a 2a 20 66 72 6f 6d 20  rmation.** from 
23b40 73 71 6c 69 74 65 33 49 6e 69 74 20 61 6e 64 20  sqlite3Init and 
23b50 4f 50 5f 50 61 72 73 65 53 63 68 65 6d 61 20 69  OP_ParseSchema i
23b60 6e 74 6f 20 74 68 65 20 73 71 6c 69 74 65 33 49  nto the sqlite3I
23b70 6e 69 74 43 61 6c 6c 62 61 63 6b 2e 0a 2a 2f 0a  nitCallback..*/.
23b80 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 7b  typedef struct {
23b90 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 20  .  sqlite3 *db; 
23ba0 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 64 61         /* The da
23bb0 74 61 62 61 73 65 20 62 65 69 6e 67 20 69 6e 69  tabase being ini
23bc0 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 63 68  tialized */.  ch
23bd0 61 72 20 2a 2a 70 7a 45 72 72 4d 73 67 3b 20 20  ar **pzErrMsg;  
23be0 20 20 2f 2a 20 45 72 72 6f 72 20 6d 65 73 73 61    /* Error messa
23bf0 67 65 20 73 74 6f 72 65 64 20 68 65 72 65 20 2a  ge stored here *
23c00 2f 0a 20 20 69 6e 74 20 69 44 62 3b 20 20 20 20  /.  int iDb;    
23c10 20 20 20 20 20 20 20 20 2f 2a 20 30 20 66 6f 72          /* 0 for
23c20 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 2e 20   main database. 
23c30 20 31 20 66 6f 72 20 54 45 4d 50 2c 20 32 2e 2e   1 for TEMP, 2..
23c40 20 66 6f 72 20 41 54 54 41 43 48 65 64 20 2a 2f   for ATTACHed */
23c50 0a 20 20 69 6e 74 20 72 63 3b 20 20 20 20 20 20  .  int rc;      
23c60 20 20 20 20 20 20 20 2f 2a 20 52 65 73 75 6c 74         /* Result
23c70 20 63 6f 64 65 20 73 74 6f 72 65 64 20 68 65 72   code stored her
23c80 65 20 2a 2f 0a 7d 20 49 6e 69 74 44 61 74 61 3b  e */.} InitData;
23c90 0a 0a 2f 2a 0a 2a 2a 20 53 74 72 75 63 74 75 72  ../*.** Structur
23ca0 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20 67 6c 6f  e containing glo
23cb0 62 61 6c 20 63 6f 6e 66 69 67 75 72 61 74 69 6f  bal configuratio
23cc0 6e 20 64 61 74 61 20 66 6f 72 20 74 68 65 20 53  n data for the S
23cd0 51 4c 69 74 65 20 6c 69 62 72 61 72 79 2e 0a 2a  QLite library..*
23ce0 2a 0a 2a 2a 20 54 68 69 73 20 73 74 72 75 63 74  *.** This struct
23cf0 75 72 65 20 61 6c 73 6f 20 63 6f 6e 74 61 69 6e  ure also contain
23d00 73 20 73 6f 6d 65 20 73 74 61 74 65 20 69 6e 66  s some state inf
23d10 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72  ormation..*/.str
23d20 75 63 74 20 53 71 6c 69 74 65 33 43 6f 6e 66 69  uct Sqlite3Confi
23d30 67 20 7b 0a 20 20 69 6e 74 20 62 4d 65 6d 73 74  g {.  int bMemst
23d40 61 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  at;             
23d50 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20          /* True 
23d60 74 6f 20 65 6e 61 62 6c 65 20 6d 65 6d 6f 72 79  to enable memory
23d70 20 73 74 61 74 75 73 20 2a 2f 0a 20 20 69 6e 74   status */.  int
23d80 20 62 43 6f 72 65 4d 75 74 65 78 3b 20 20 20 20   bCoreMutex;    
23d90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
23da0 2a 20 54 72 75 65 20 74 6f 20 65 6e 61 62 6c 65  * True to enable
23db0 20 63 6f 72 65 20 6d 75 74 65 78 69 6e 67 20 2a   core mutexing *
23dc0 2f 0a 20 20 69 6e 74 20 62 46 75 6c 6c 4d 75 74  /.  int bFullMut
23dd0 65 78 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ex;             
23de0 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 74 6f        /* True to
23df0 20 65 6e 61 62 6c 65 20 66 75 6c 6c 20 6d 75 74   enable full mut
23e00 65 78 69 6e 67 20 2a 2f 0a 20 20 69 6e 74 20 62  exing */.  int b
23e10 4f 70 65 6e 55 72 69 3b 20 20 20 20 20 20 20 20  OpenUri;        
23e20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
23e30 54 72 75 65 20 74 6f 20 69 6e 74 65 72 70 72 65  True to interpre
23e40 74 20 66 69 6c 65 6e 61 6d 65 73 20 61 73 20 55  t filenames as U
23e50 52 49 73 20 2a 2f 0a 20 20 69 6e 74 20 62 55 73  RIs */.  int bUs
23e60 65 43 69 73 3b 20 20 20 20 20 20 20 20 20 20 20  eCis;           
23e70 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 55 73             /* Us
23e80 65 20 63 6f 76 65 72 69 6e 67 20 69 6e 64 69 63  e covering indic
23e90 65 73 20 66 6f 72 20 66 75 6c 6c 2d 73 63 61 6e  es for full-scan
23ea0 73 20 2a 2f 0a 20 20 69 6e 74 20 62 53 6d 61 6c  s */.  int bSmal
23eb0 6c 4d 61 6c 6c 6f 63 3b 20 20 20 20 20 20 20 20  lMalloc;        
23ec0 20 20 20 20 20 20 20 20 20 2f 2a 20 41 76 6f 69           /* Avoi
23ed0 64 20 6c 61 72 67 65 20 6d 65 6d 6f 72 79 20 61  d large memory a
23ee0 6c 6c 6f 63 61 74 69 6f 6e 73 20 69 66 20 74 72  llocations if tr
23ef0 75 65 20 2a 2f 0a 20 20 69 6e 74 20 6d 78 53 74  ue */.  int mxSt
23f00 72 6c 65 6e 3b 20 20 20 20 20 20 20 20 20 20 20  rlen;           
23f10 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 78            /* Max
23f20 69 6d 75 6d 20 73 74 72 69 6e 67 20 6c 65 6e 67  imum string leng
23f30 74 68 20 2a 2f 0a 20 20 69 6e 74 20 6e 65 76 65  th */.  int neve
23f40 72 43 6f 72 72 75 70 74 3b 20 20 20 20 20 20 20  rCorrupt;       
23f50 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 61 74            /* Dat
23f60 61 62 61 73 65 20 69 73 20 61 6c 77 61 79 73 20  abase is always 
23f70 77 65 6c 6c 2d 66 6f 72 6d 65 64 20 2a 2f 0a 20  well-formed */. 
23f80 20 69 6e 74 20 73 7a 4c 6f 6f 6b 61 73 69 64 65   int szLookaside
23f90 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
23fa0 20 20 20 2f 2a 20 44 65 66 61 75 6c 74 20 6c 6f     /* Default lo
23fb0 6f 6b 61 73 69 64 65 20 62 75 66 66 65 72 20 73  okaside buffer s
23fc0 69 7a 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 4c 6f  ize */.  int nLo
23fd0 6f 6b 61 73 69 64 65 3b 20 20 20 20 20 20 20 20  okaside;        
23fe0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 65             /* De
23ff0 66 61 75 6c 74 20 6c 6f 6f 6b 61 73 69 64 65 20  fault lookaside 
24000 62 75 66 66 65 72 20 63 6f 75 6e 74 20 2a 2f 0a  buffer count */.
24010 20 20 69 6e 74 20 6e 53 74 6d 74 53 70 69 6c 6c    int nStmtSpill
24020 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
24030 20 20 20 20 2f 2a 20 53 74 6d 74 2d 6a 6f 75 72      /* Stmt-jour
24040 6e 61 6c 20 73 70 69 6c 6c 2d 74 6f 2d 64 69 73  nal spill-to-dis
24050 6b 20 74 68 72 65 73 68 6f 6c 64 20 2a 2f 0a 20  k threshold */. 
24060 20 73 71 6c 69 74 65 33 5f 6d 65 6d 5f 6d 65 74   sqlite3_mem_met
24070 68 6f 64 73 20 6d 3b 20 20 20 20 20 20 20 20 20  hods m;         
24080 20 20 20 2f 2a 20 4c 6f 77 2d 6c 65 76 65 6c 20     /* Low-level 
24090 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f  memory allocatio
240a0 6e 20 69 6e 74 65 72 66 61 63 65 20 2a 2f 0a 20  n interface */. 
240b0 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 6d   sqlite3_mutex_m
240c0 65 74 68 6f 64 73 20 6d 75 74 65 78 3b 20 20 20  ethods mutex;   
240d0 20 20 20 2f 2a 20 4c 6f 77 2d 6c 65 76 65 6c 20     /* Low-level 
240e0 6d 75 74 65 78 20 69 6e 74 65 72 66 61 63 65 20  mutex interface 
240f0 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 70 63 61  */.  sqlite3_pca
24100 63 68 65 5f 6d 65 74 68 6f 64 73 32 20 70 63 61  che_methods2 pca
24110 63 68 65 32 3b 20 20 2f 2a 20 4c 6f 77 2d 6c 65  che2;  /* Low-le
24120 76 65 6c 20 70 61 67 65 2d 63 61 63 68 65 20 69  vel page-cache i
24130 6e 74 65 72 66 61 63 65 20 2a 2f 0a 20 20 76 6f  nterface */.  vo
24140 69 64 20 2a 70 48 65 61 70 3b 20 20 20 20 20 20  id *pHeap;      
24150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24160 2f 2a 20 48 65 61 70 20 73 74 6f 72 61 67 65 20  /* Heap storage 
24170 73 70 61 63 65 20 2a 2f 0a 20 20 69 6e 74 20 6e  space */.  int n
24180 48 65 61 70 3b 20 20 20 20 20 20 20 20 20 20 20  Heap;           
24190 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
241a0 53 69 7a 65 20 6f 66 20 70 48 65 61 70 5b 5d 20  Size of pHeap[] 
241b0 2a 2f 0a 20 20 69 6e 74 20 6d 6e 52 65 71 2c 20  */.  int mnReq, 
241c0 6d 78 52 65 71 3b 20 20 20 20 20 20 20 20 20 20  mxReq;          
241d0 20 20 20 20 20 20 20 2f 2a 20 4d 69 6e 20 61 6e         /* Min an
241e0 64 20 6d 61 78 20 68 65 61 70 20 72 65 71 75 65  d max heap reque
241f0 73 74 73 20 73 69 7a 65 73 20 2a 2f 0a 20 20 73  sts sizes */.  s
24200 71 6c 69 74 65 33 5f 69 6e 74 36 34 20 73 7a 4d  qlite3_int64 szM
24210 6d 61 70 3b 20 20 20 20 20 20 20 20 20 20 20 20  map;            
24220 20 2f 2a 20 6d 6d 61 70 28 29 20 73 70 61 63 65   /* mmap() space
24230 20 70 65 72 20 6f 70 65 6e 20 66 69 6c 65 20 2a   per open file *
24240 2f 0a 20 20 73 71 6c 69 74 65 33 5f 69 6e 74 36  /.  sqlite3_int6
24250 34 20 6d 78 4d 6d 61 70 3b 20 20 20 20 20 20 20  4 mxMmap;       
24260 20 20 20 20 20 20 2f 2a 20 4d 61 78 69 6d 75 6d        /* Maximum
24270 20 76 61 6c 75 65 20 66 6f 72 20 73 7a 4d 6d 61   value for szMma
24280 70 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 50 61  p */.  void *pPa
24290 67 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ge;             
242a0 20 20 20 20 20 20 20 20 20 2f 2a 20 50 61 67 65           /* Page
242b0 20 63 61 63 68 65 20 6d 65 6d 6f 72 79 20 2a 2f   cache memory */
242c0 0a 20 20 69 6e 74 20 73 7a 50 61 67 65 3b 20 20  .  int szPage;  
242d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
242e0 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20       /* Size of 
242f0 65 61 63 68 20 70 61 67 65 20 69 6e 20 70 50 61  each page in pPa
24300 67 65 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 6e 50  ge[] */.  int nP
24310 61 67 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  age;            
24320 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
24330 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73 20 69  umber of pages i
24340 6e 20 70 50 61 67 65 5b 5d 20 2a 2f 0a 20 20 69  n pPage[] */.  i
24350 6e 74 20 6d 78 50 61 72 73 65 72 53 74 61 63 6b  nt mxParserStack
24360 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
24370 20 2f 2a 20 6d 61 78 69 6d 75 6d 20 64 65 70 74   /* maximum dept
24380 68 20 6f 66 20 74 68 65 20 70 61 72 73 65 72 20  h of the parser 
24390 73 74 61 63 6b 20 2a 2f 0a 20 20 69 6e 74 20 73  stack */.  int s
243a0 68 61 72 65 64 43 61 63 68 65 45 6e 61 62 6c 65  haredCacheEnable
243b0 64 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  d;           /* 
243c0 74 72 75 65 20 69 66 20 73 68 61 72 65 64 2d 63  true if shared-c
243d0 61 63 68 65 20 6d 6f 64 65 20 65 6e 61 62 6c 65  ache mode enable
243e0 64 20 2a 2f 0a 20 20 75 33 32 20 73 7a 50 6d 61  d */.  u32 szPma
243f0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
24400 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 78 69           /* Maxi
24410 6d 75 6d 20 53 6f 72 74 65 72 20 50 4d 41 20 73  mum Sorter PMA s
24420 69 7a 65 20 2a 2f 0a 20 20 2f 2a 20 54 68 65 20  ize */.  /* The 
24430 61 62 6f 76 65 20 6d 69 67 68 74 20 62 65 20 69  above might be i
24440 6e 69 74 69 61 6c 69 7a 65 64 20 74 6f 20 6e 6f  nitialized to no
24450 6e 2d 7a 65 72 6f 2e 20 20 54 68 65 20 66 6f 6c  n-zero.  The fol
24460 6c 6f 77 69 6e 67 20 6e 65 65 64 20 74 6f 20 61  lowing need to a
24470 6c 77 61 79 73 0a 20 20 2a 2a 20 69 6e 69 74 69  lways.  ** initi
24480 61 6c 6c 79 20 62 65 20 7a 65 72 6f 2c 20 68 6f  ally be zero, ho
24490 77 65 76 65 72 2e 20 2a 2f 0a 20 20 69 6e 74 20  wever. */.  int 
244a0 69 73 49 6e 69 74 3b 20 20 20 20 20 20 20 20 20  isInit;         
244b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
244c0 20 54 72 75 65 20 61 66 74 65 72 20 69 6e 69 74   True after init
244d0 69 61 6c 69 7a 61 74 69 6f 6e 20 68 61 73 20 66  ialization has f
244e0 69 6e 69 73 68 65 64 20 2a 2f 0a 20 20 69 6e 74  inished */.  int
244f0 20 69 6e 50 72 6f 67 72 65 73 73 3b 20 20 20 20   inProgress;    
24500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
24510 2a 20 54 72 75 65 20 77 68 69 6c 65 20 69 6e 69  * True while ini
24520 74 69 61 6c 69 7a 61 74 69 6f 6e 20 69 6e 20 70  tialization in p
24530 72 6f 67 72 65 73 73 20 2a 2f 0a 20 20 69 6e 74  rogress */.  int
24540 20 69 73 4d 75 74 65 78 49 6e 69 74 3b 20 20 20   isMutexInit;   
24550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
24560 2a 20 54 72 75 65 20 61 66 74 65 72 20 6d 75 74  * True after mut
24570 65 78 65 73 20 61 72 65 20 69 6e 69 74 69 61 6c  exes are initial
24580 69 7a 65 64 20 2a 2f 0a 20 20 69 6e 74 20 69 73  ized */.  int is
24590 4d 61 6c 6c 6f 63 49 6e 69 74 3b 20 20 20 20 20  MallocInit;     
245a0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
245b0 72 75 65 20 61 66 74 65 72 20 6d 61 6c 6c 6f 63  rue after malloc
245c0 20 69 73 20 69 6e 69 74 69 61 6c 69 7a 65 64 20   is initialized 
245d0 2a 2f 0a 20 20 69 6e 74 20 69 73 50 43 61 63 68  */.  int isPCach
245e0 65 49 6e 69 74 3b 20 20 20 20 20 20 20 20 20 20  eInit;          
245f0 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 61         /* True a
24600 66 74 65 72 20 6d 61 6c 6c 6f 63 20 69 73 20 69  fter malloc is i
24610 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20  nitialized */.  
24620 69 6e 74 20 6e 52 65 66 49 6e 69 74 4d 75 74 65  int nRefInitMute
24630 78 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  x;              
24640 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 75    /* Number of u
24650 73 65 72 73 20 6f 66 20 70 49 6e 69 74 4d 75 74  sers of pInitMut
24660 65 78 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f  ex */.  sqlite3_
24670 6d 75 74 65 78 20 2a 70 49 6e 69 74 4d 75 74 65  mutex *pInitMute
24680 78 3b 20 20 20 20 20 20 20 20 2f 2a 20 4d 75 74  x;        /* Mut
24690 65 78 20 75 73 65 64 20 62 79 20 73 71 6c 69 74  ex used by sqlit
246a0 65 33 5f 69 6e 69 74 69 61 6c 69 7a 65 28 29 20  e3_initialize() 
246b0 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 4c 6f 67  */.  void (*xLog
246c0 29 28 76 6f 69 64 2a 2c 69 6e 74 2c 63 6f 6e 73  )(void*,int,cons
246d0 74 20 63 68 61 72 2a 29 3b 20 2f 2a 20 46 75 6e  t char*); /* Fun
246e0 63 74 69 6f 6e 20 66 6f 72 20 6c 6f 67 67 69 6e  ction for loggin
246f0 67 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 4c 6f  g */.  void *pLo
24700 67 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20  gArg;           
24710 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46              /* F
24720 69 72 73 74 20 61 72 67 75 6d 65 6e 74 20 74 6f  irst argument to
24730 20 78 4c 6f 67 28 29 20 2a 2f 0a 23 69 66 64 65   xLog() */.#ifde
24740 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
24750 53 51 4c 4c 4f 47 0a 20 20 76 6f 69 64 28 2a 78  SQLLOG.  void(*x
24760 53 71 6c 6c 6f 67 29 28 76 6f 69 64 2a 2c 73 71  Sqllog)(void*,sq
24770 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61  lite3*,const cha
24780 72 2a 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64  r*, int);.  void
24790 20 2a 70 53 71 6c 6c 6f 67 41 72 67 3b 0a 23 65   *pSqllogArg;.#e
247a0 6e 64 69 66 0a 23 69 66 64 65 66 20 53 51 4c 49  ndif.#ifdef SQLI
247b0 54 45 5f 56 44 42 45 5f 43 4f 56 45 52 41 47 45  TE_VDBE_COVERAGE
247c0 0a 20 20 2f 2a 20 54 68 65 20 66 6f 6c 6c 6f 77  .  /* The follow
247d0 69 6e 67 20 63 61 6c 6c 62 61 63 6b 20 28 69 66  ing callback (if
247e0 20 6e 6f 74 20 4e 55 4c 4c 29 20 69 73 20 69 6e   not NULL) is in
247f0 76 6f 6b 65 64 20 6f 6e 20 65 76 65 72 79 20 56  voked on every V
24800 44 42 45 20 62 72 61 6e 63 68 0a 20 20 2a 2a 20  DBE branch.  ** 
24810 6f 70 65 72 61 74 69 6f 6e 2e 20 20 53 65 74 20  operation.  Set 
24820 74 68 65 20 63 61 6c 6c 62 61 63 6b 20 75 73 69  the callback usi
24830 6e 67 20 53 51 4c 49 54 45 5f 54 45 53 54 43 54  ng SQLITE_TESTCT
24840 52 4c 5f 56 44 42 45 5f 43 4f 56 45 52 41 47 45  RL_VDBE_COVERAGE
24850 2e 0a 20 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a  ..  */.  void (*
24860 78 56 64 62 65 42 72 61 6e 63 68 29 28 76 6f 69  xVdbeBranch)(voi
24870 64 2a 2c 75 6e 73 69 67 6e 65 64 20 69 53 72 63  d*,unsigned iSrc
24880 4c 69 6e 65 2c 75 38 20 65 54 68 69 73 2c 75 38  Line,u8 eThis,u8
24890 20 65 4d 78 29 3b 20 20 2f 2a 20 43 61 6c 6c 62   eMx);  /* Callb
248a0 61 63 6b 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70  ack */.  void *p
248b0 56 64 62 65 42 72 61 6e 63 68 41 72 67 3b 20 20  VdbeBranchArg;  
248c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
248d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
248e0 20 20 20 2f 2a 20 31 73 74 20 61 72 67 75 6d 65     /* 1st argume
248f0 6e 74 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66  nt */.#endif.#if
24900 6e 64 65 66 20 53 51 4c 49 54 45 5f 55 4e 54 45  ndef SQLITE_UNTE
24910 53 54 41 42 4c 45 0a 20 20 69 6e 74 20 28 2a 78  STABLE.  int (*x
24920 54 65 73 74 43 61 6c 6c 62 61 63 6b 29 28 69 6e  TestCallback)(in
24930 74 29 3b 20 20 20 20 20 20 20 20 2f 2a 20 49 6e  t);        /* In
24940 76 6f 6b 65 64 20 62 79 20 73 71 6c 69 74 65 33  voked by sqlite3
24950 46 61 75 6c 74 53 69 6d 28 29 20 2a 2f 0a 23 65  FaultSim() */.#e
24960 6e 64 69 66 0a 20 20 69 6e 74 20 62 4c 6f 63 61  ndif.  int bLoca
24970 6c 74 69 6d 65 46 61 75 6c 74 3b 20 20 20 20 20  ltimeFault;     
24980 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65           /* True
24990 20 74 6f 20 66 61 69 6c 20 6c 6f 63 61 6c 74 69   to fail localti
249a0 6d 65 28 29 20 63 61 6c 6c 73 20 2a 2f 0a 20 20  me() calls */.  
249b0 69 6e 74 20 69 4f 6e 63 65 52 65 73 65 74 54 68  int iOnceResetTh
249c0 72 65 73 68 6f 6c 64 3b 20 20 20 20 20 20 20 20  reshold;        
249d0 20 20 2f 2a 20 57 68 65 6e 20 74 6f 20 72 65 73    /* When to res
249e0 65 74 20 4f 50 5f 4f 6e 63 65 20 63 6f 75 6e 74  et OP_Once count
249f0 65 72 73 20 2a 2f 0a 20 20 75 33 32 20 73 7a 53  ers */.  u32 szS
24a00 6f 72 74 65 72 52 65 66 3b 20 20 20 20 20 20 20  orterRef;       
24a10 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 69             /* Mi
24a20 6e 20 73 69 7a 65 20 69 6e 20 62 79 74 65 73 20  n size in bytes 
24a30 74 6f 20 75 73 65 20 73 6f 72 74 65 72 2d 72 65  to use sorter-re
24a40 66 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  fs */.};../*.** 
24a50 54 68 69 73 20 6d 61 63 72 6f 20 69 73 20 75 73  This macro is us
24a60 65 64 20 69 6e 73 69 64 65 20 6f 66 20 61 73 73  ed inside of ass
24a70 65 72 74 28 29 20 73 74 61 74 65 6d 65 6e 74 73  ert() statements
24a80 20 74 6f 20 69 6e 64 69 63 61 74 65 20 74 68 61   to indicate tha
24a90 74 0a 2a 2a 20 74 68 65 20 61 73 73 65 72 74 20  t.** the assert 
24aa0 69 73 20 6f 6e 6c 79 20 76 61 6c 69 64 20 6f 6e  is only valid on
24ab0 20 61 20 77 65 6c 6c 2d 66 6f 72 6d 65 64 20 64   a well-formed d
24ac0 61 74 61 62 61 73 65 2e 20 20 49 6e 73 74 65 61  atabase.  Instea
24ad0 64 20 6f 66 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20  d of:.**.**     
24ae0 61 73 73 65 72 74 28 20 58 20 29 3b 0a 2a 2a 0a  assert( X );.**.
24af0 2a 2a 20 4f 6e 65 20 77 72 69 74 65 73 3a 0a 2a  ** One writes:.*
24b00 2a 0a 2a 2a 20 20 20 20 20 61 73 73 65 72 74 28  *.**     assert(
24b10 20 58 20 7c 7c 20 43 4f 52 52 55 50 54 5f 44 42   X || CORRUPT_DB
24b20 20 29 3b 0a 2a 2a 0a 2a 2a 20 43 4f 52 52 55 50   );.**.** CORRUP
24b30 54 5f 44 42 20 69 73 20 74 72 75 65 20 64 75 72  T_DB is true dur
24b40 69 6e 67 20 6e 6f 72 6d 61 6c 20 6f 70 65 72 61  ing normal opera
24b50 74 69 6f 6e 2e 20 20 43 4f 52 52 55 50 54 5f 44  tion.  CORRUPT_D
24b60 42 20 64 6f 65 73 20 6e 6f 74 20 69 6e 64 69 63  B does not indic
24b70 61 74 65 0a 2a 2a 20 74 68 61 74 20 74 68 65 20  ate.** that the 
24b80 64 61 74 61 62 61 73 65 20 69 73 20 64 65 66 69  database is defi
24b90 6e 69 74 65 6c 79 20 63 6f 72 72 75 70 74 2c 20  nitely corrupt, 
24ba0 6f 6e 6c 79 20 74 68 61 74 20 69 74 20 6d 69 67  only that it mig
24bb0 68 74 20 62 65 20 63 6f 72 72 75 70 74 2e 0a 2a  ht be corrupt..*
24bc0 2a 20 46 6f 72 20 6d 6f 73 74 20 74 65 73 74 20  * For most test 
24bd0 63 61 73 65 73 2c 20 43 4f 52 52 55 50 54 5f 44  cases, CORRUPT_D
24be0 42 20 69 73 20 73 65 74 20 74 6f 20 66 61 6c 73  B is set to fals
24bf0 65 20 75 73 69 6e 67 20 61 20 73 70 65 63 69 61  e using a specia
24c00 6c 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 74 65 73  l.** sqlite3_tes
24c10 74 5f 63 6f 6e 74 72 6f 6c 28 29 2e 20 20 54 68  t_control().  Th
24c20 69 73 20 65 6e 61 62 6c 65 73 20 61 73 73 65 72  is enables asser
24c30 74 28 29 20 73 74 61 74 65 6d 65 6e 74 73 20 74  t() statements t
24c40 6f 20 70 72 6f 76 65 0a 2a 2a 20 74 68 69 6e 67  o prove.** thing
24c50 73 20 74 68 61 74 20 61 72 65 20 61 6c 77 61 79  s that are alway
24c60 73 20 74 72 75 65 20 66 6f 72 20 77 65 6c 6c 2d  s true for well-
24c70 66 6f 72 6d 65 64 20 64 61 74 61 62 61 73 65 73  formed databases
24c80 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 43 4f 52  ..*/.#define COR
24c90 52 55 50 54 5f 44 42 20 20 28 73 71 6c 69 74 65  RUPT_DB  (sqlite
24ca0 33 43 6f 6e 66 69 67 2e 6e 65 76 65 72 43 6f 72  3Config.neverCor
24cb0 72 75 70 74 3d 3d 30 29 0a 0a 2f 2a 0a 2a 2a 20  rupt==0)../*.** 
24cc0 43 6f 6e 74 65 78 74 20 70 6f 69 6e 74 65 72 20  Context pointer 
24cd0 70 61 73 73 65 64 20 64 6f 77 6e 20 74 68 72 6f  passed down thro
24ce0 75 67 68 20 74 68 65 20 74 72 65 65 2d 77 61 6c  ugh the tree-wal
24cf0 6b 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 57 61 6c  k..*/.struct Wal
24d00 6b 65 72 20 7b 0a 20 20 50 61 72 73 65 20 2a 70  ker {.  Parse *p
24d10 50 61 72 73 65 3b 20 20 20 20 20 20 20 20 20 20  Parse;          
24d20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24d30 20 20 2f 2a 20 50 61 72 73 65 72 20 63 6f 6e 74    /* Parser cont
24d40 65 78 74 2e 20 20 2a 2f 0a 20 20 69 6e 74 20 28  ext.  */.  int (
24d50 2a 78 45 78 70 72 43 61 6c 6c 62 61 63 6b 29 28  *xExprCallback)(
24d60 57 61 6c 6b 65 72 2a 2c 20 45 78 70 72 2a 29 3b  Walker*, Expr*);
24d70 20 20 20 20 20 2f 2a 20 43 61 6c 6c 62 61 63 6b       /* Callback
24d80 20 66 6f 72 20 65 78 70 72 65 73 73 69 6f 6e 73   for expressions
24d90 20 2a 2f 0a 20 20 69 6e 74 20 28 2a 78 53 65 6c   */.  int (*xSel
24da0 65 63 74 43 61 6c 6c 62 61 63 6b 29 28 57 61 6c  ectCallback)(Wal
24db0 6b 65 72 2a 2c 53 65 6c 65 63 74 2a 29 3b 20 20  ker*,Select*);  
24dc0 2f 2a 20 43 61 6c 6c 62 61 63 6b 20 66 6f 72 20  /* Callback for 
24dd0 53 45 4c 45 43 54 73 20 2a 2f 0a 20 20 76 6f 69  SELECTs */.  voi
24de0 64 20 28 2a 78 53 65 6c 65 63 74 43 61 6c 6c 62  d (*xSelectCallb
24df0 61 63 6b 32 29 28 57 61 6c 6b 65 72 2a 2c 53 65  ack2)(Walker*,Se
24e00 6c 65 63 74 2a 29 3b 2f 2a 20 53 65 63 6f 6e 64  lect*);/* Second
24e10 20 63 61 6c 6c 62 61 63 6b 20 66 6f 72 20 53 45   callback for SE
24e20 4c 45 43 54 73 20 2a 2f 0a 20 20 69 6e 74 20 77  LECTs */.  int w
24e30 61 6c 6b 65 72 44 65 70 74 68 3b 20 20 20 20 20  alkerDepth;     
24e40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24e50 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
24e60 66 20 73 75 62 71 75 65 72 69 65 73 20 2a 2f 0a  f subqueries */.
24e70 20 20 75 38 20 65 43 6f 64 65 3b 20 20 20 20 20    u8 eCode;     
24e80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24e90 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41              /* A
24ea0 20 73 6d 61 6c 6c 20 70 72 6f 63 65 73 73 69 6e   small processin
24eb0 67 20 63 6f 64 65 20 2a 2f 0a 20 20 75 6e 69 6f  g code */.  unio
24ec0 6e 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20  n {             
24ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24ee0 20 20 20 20 20 20 2f 2a 20 45 78 74 72 61 20 64        /* Extra d
24ef0 61 74 61 20 66 6f 72 20 63 61 6c 6c 62 61 63 6b  ata for callback
24f00 20 2a 2f 0a 20 20 20 20 4e 61 6d 65 43 6f 6e 74   */.    NameCont
24f10 65 78 74 20 2a 70 4e 43 3b 20 20 20 20 20 20 20  ext *pNC;       
24f20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24f30 20 20 2f 2a 20 4e 61 6d 69 6e 67 20 63 6f 6e 74    /* Naming cont
24f40 65 78 74 20 2a 2f 0a 20 20 20 20 69 6e 74 20 6e  ext */.    int n
24f50 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
24f60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24f70 20 20 20 20 20 2f 2a 20 41 20 63 6f 75 6e 74 65       /* A counte
24f80 72 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 43 75  r */.    int iCu
24f90 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  r;              
24fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24fb0 20 20 20 2f 2a 20 41 20 63 75 72 73 6f 72 20 6e     /* A cursor n
24fc0 75 6d 62 65 72 20 2a 2f 0a 20 20 20 20 53 72 63  umber */.    Src
24fd0 4c 69 73 74 20 2a 70 53 72 63 4c 69 73 74 3b 20  List *pSrcList; 
24fe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24ff0 20 20 20 20 20 20 20 2f 2a 20 46 52 4f 4d 20 63         /* FROM c
25000 6c 61 75 73 65 20 2a 2f 0a 20 20 20 20 73 74 72  lause */.    str
25010 75 63 74 20 53 72 63 43 6f 75 6e 74 20 2a 70 53  uct SrcCount *pS
25020 72 63 43 6f 75 6e 74 3b 20 20 20 20 20 20 20 20  rcCount;        
25030 20 20 20 20 20 20 20 2f 2a 20 43 6f 75 6e 74 69         /* Counti
25040 6e 67 20 63 6f 6c 75 6d 6e 20 72 65 66 65 72 65  ng column refere
25050 6e 63 65 73 20 2a 2f 0a 20 20 20 20 73 74 72 75  nces */.    stru
25060 63 74 20 43 43 75 72 48 69 6e 74 20 2a 70 43 43  ct CCurHint *pCC
25070 75 72 48 69 6e 74 3b 20 20 20 20 20 20 20 20 20  urHint;         
25080 20 20 20 20 20 20 2f 2a 20 55 73 65 64 20 62 79        /* Used by
25090 20 63 6f 64 65 43 75 72 73 6f 72 48 69 6e 74 28   codeCursorHint(
250a0 29 20 2a 2f 0a 20 20 20 20 69 6e 74 20 2a 61 69  ) */.    int *ai
250b0 43 6f 6c 3b 20 20 20 20 20 20 20 20 20 20 20 20  Col;            
250c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
250d0 20 20 20 2f 2a 20 61 72 72 61 79 20 6f 66 20 63     /* array of c
250e0 6f 6c 75 6d 6e 20 69 6e 64 65 78 65 73 20 2a 2f  olumn indexes */
250f0 0a 20 20 20 20 73 74 72 75 63 74 20 49 64 78 43  .    struct IdxC
25100 6f 76 65 72 20 2a 70 49 64 78 43 6f 76 65 72 3b  over *pIdxCover;
25110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
25120 2a 20 43 68 65 63 6b 20 66 6f 72 20 69 6e 64 65  * Check for inde
25130 78 20 63 6f 76 65 72 61 67 65 20 2a 2f 0a 20 20  x coverage */.  
25140 20 20 73 74 72 75 63 74 20 49 64 78 45 78 70 72    struct IdxExpr
25150 54 72 61 6e 73 20 2a 70 49 64 78 54 72 61 6e 73  Trans *pIdxTrans
25160 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43  ;           /* C
25170 6f 6e 76 65 72 74 20 69 64 78 65 64 20 65 78 70  onvert idxed exp
25180 72 20 74 6f 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20  r to column */. 
25190 20 20 20 45 78 70 72 4c 69 73 74 20 2a 70 47 72     ExprList *pGr
251a0 6f 75 70 42 79 3b 20 20 20 20 20 20 20 20 20 20  oupBy;          
251b0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
251c0 47 52 4f 55 50 20 42 59 20 63 6c 61 75 73 65 20  GROUP BY clause 
251d0 2a 2f 0a 20 20 20 20 53 65 6c 65 63 74 20 2a 70  */.    Select *p
251e0 53 65 6c 65 63 74 3b 20 20 20 20 20 20 20 20 20  Select;         
251f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25200 20 2f 2a 20 48 41 56 49 4e 47 20 74 6f 20 57 48   /* HAVING to WH
25210 45 52 45 20 63 6c 61 75 73 65 20 63 74 78 20 2a  ERE clause ctx *
25220 2f 0a 20 20 20 20 73 74 72 75 63 74 20 57 69 6e  /.    struct Win
25230 64 6f 77 52 65 77 72 69 74 65 20 2a 70 52 65 77  dowRewrite *pRew
25240 72 69 74 65 3b 20 20 20 20 20 20 20 20 20 20 20  rite;           
25250 2f 2a 20 57 69 6e 64 6f 77 20 72 65 77 72 69 74  /* Window rewrit
25260 65 20 63 6f 6e 74 65 78 74 20 2a 2f 0a 20 20 20  e context */.   
25270 20 73 74 72 75 63 74 20 57 68 65 72 65 43 6f 6e   struct WhereCon
25280 73 74 20 2a 70 43 6f 6e 73 74 3b 20 20 20 20 20  st *pConst;     
25290 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57 48             /* WH
252a0 45 52 45 20 63 6c 61 75 73 65 20 63 6f 6e 73 74  ERE clause const
252b0 61 6e 74 73 20 2a 2f 0a 20 20 20 20 73 74 72 75  ants */.    stru
252c0 63 74 20 52 65 6e 61 6d 65 43 74 78 20 2a 70 52  ct RenameCtx *pR
252d0 65 6e 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20  ename;          
252e0 20 20 20 20 20 20 2f 2a 20 52 45 4e 41 4d 45 20        /* RENAME 
252f0 43 4f 4c 55 4d 4e 20 63 6f 6e 74 65 78 74 20 2a  COLUMN context *
25300 2f 0a 20 20 7d 20 75 3b 0a 7d 3b 0a 0a 2f 2a 20  /.  } u;.};../* 
25310 46 6f 72 77 61 72 64 20 64 65 63 6c 61 72 61 74  Forward declarat
25320 69 6f 6e 73 20 2a 2f 0a 69 6e 74 20 73 71 6c 69  ions */.int sqli
25330 74 65 33 57 61 6c 6b 45 78 70 72 28 57 61 6c 6b  te3WalkExpr(Walk
25340 65 72 2a 2c 20 45 78 70 72 2a 29 3b 0a 69 6e 74  er*, Expr*);.int
25350 20 73 71 6c 69 74 65 33 57 61 6c 6b 45 78 70 72   sqlite3WalkExpr
25360 4c 69 73 74 28 57 61 6c 6b 65 72 2a 2c 20 45 78  List(Walker*, Ex
25370 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71  prList*);.int sq
25380 6c 69 74 65 33 57 61 6c 6b 53 65 6c 65 63 74 28  lite3WalkSelect(
25390 57 61 6c 6b 65 72 2a 2c 20 53 65 6c 65 63 74 2a  Walker*, Select*
253a0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 61  );.int sqlite3Wa
253b0 6c 6b 53 65 6c 65 63 74 45 78 70 72 28 57 61 6c  lkSelectExpr(Wal
253c0 6b 65 72 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a  ker*, Select*);.
253d0 69 6e 74 20 73 71 6c 69 74 65 33 57 61 6c 6b 53  int sqlite3WalkS
253e0 65 6c 65 63 74 46 72 6f 6d 28 57 61 6c 6b 65 72  electFrom(Walker
253f0 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 69 6e 74  *, Select*);.int
25400 20 73 71 6c 69 74 65 33 45 78 70 72 57 61 6c 6b   sqlite3ExprWalk
25410 4e 6f 6f 70 28 57 61 6c 6b 65 72 2a 2c 20 45 78  Noop(Walker*, Ex
25420 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  pr*);.int sqlite
25430 33 53 65 6c 65 63 74 57 61 6c 6b 4e 6f 6f 70 28  3SelectWalkNoop(
25440 57 61 6c 6b 65 72 2a 2c 20 53 65 6c 65 63 74 2a  Walker*, Select*
25450 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 65  );.int sqlite3Se
25460 6c 65 63 74 57 61 6c 6b 46 61 69 6c 28 57 61 6c  lectWalkFail(Wal
25470 6b 65 72 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a  ker*, Select*);.
25480 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45  #ifdef SQLITE_DE
25490 42 55 47 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  BUG.void sqlite3
254a0 53 65 6c 65 63 74 57 61 6c 6b 41 73 73 65 72 74  SelectWalkAssert
254b0 32 28 57 61 6c 6b 65 72 2a 2c 20 53 65 6c 65 63  2(Walker*, Selec
254c0 74 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  t*);.#endif../*.
254d0 2a 2a 20 52 65 74 75 72 6e 20 63 6f 64 65 20 66  ** Return code f
254e0 72 6f 6d 20 74 68 65 20 70 61 72 73 65 2d 74 72  rom the parse-tr
254f0 65 65 20 77 61 6c 6b 69 6e 67 20 70 72 69 6d 69  ee walking primi
25500 74 69 76 65 73 20 61 6e 64 20 74 68 65 69 72 0a  tives and their.
25510 2a 2a 20 63 61 6c 6c 62 61 63 6b 73 2e 0a 2a 2f  ** callbacks..*/
25520 0a 23 64 65 66 69 6e 65 20 57 52 43 5f 43 6f 6e  .#define WRC_Con
25530 74 69 6e 75 65 20 20 20 20 30 20 20 20 2f 2a 20  tinue    0   /* 
25540 43 6f 6e 74 69 6e 75 65 20 64 6f 77 6e 20 69 6e  Continue down in
25550 74 6f 20 63 68 69 6c 64 72 65 6e 20 2a 2f 0a 23  to children */.#
25560 64 65 66 69 6e 65 20 57 52 43 5f 50 72 75 6e 65  define WRC_Prune
25570 20 20 20 20 20 20 20 31 20 20 20 2f 2a 20 4f 6d         1   /* Om
25580 69 74 20 63 68 69 6c 64 72 65 6e 20 62 75 74 20  it children but 
25590 63 6f 6e 74 69 6e 75 65 20 77 61 6c 6b 69 6e 67  continue walking
255a0 20 73 69 62 6c 69 6e 67 73 20 2a 2f 0a 23 64 65   siblings */.#de
255b0 66 69 6e 65 20 57 52 43 5f 41 62 6f 72 74 20 20  fine WRC_Abort  
255c0 20 20 20 20 20 32 20 20 20 2f 2a 20 41 62 61 6e       2   /* Aban
255d0 64 6f 6e 20 74 68 65 20 74 72 65 65 20 77 61 6c  don the tree wal
255e0 6b 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69  k */../*.** An i
255f0 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73 20  nstance of this 
25600 73 74 72 75 63 74 75 72 65 20 72 65 70 72 65 73  structure repres
25610 65 6e 74 73 20 61 20 73 65 74 20 6f 66 20 6f 6e  ents a set of on
25620 65 20 6f 72 20 6d 6f 72 65 20 43 54 45 73 0a 2a  e or more CTEs.*
25630 2a 20 28 63 6f 6d 6d 6f 6e 20 74 61 62 6c 65 20  * (common table 
25640 65 78 70 72 65 73 73 69 6f 6e 73 29 20 63 72 65  expressions) cre
25650 61 74 65 64 20 62 79 20 61 20 73 69 6e 67 6c 65  ated by a single
25660 20 57 49 54 48 20 63 6c 61 75 73 65 2e 0a 2a 2f   WITH clause..*/
25670 0a 73 74 72 75 63 74 20 57 69 74 68 20 7b 0a 20  .struct With {. 
25680 20 69 6e 74 20 6e 43 74 65 3b 20 20 20 20 20 20   int nCte;      
25690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
256a0 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 43 54   /* Number of CT
256b0 45 73 20 69 6e 20 74 68 65 20 57 49 54 48 20 63  Es in the WITH c
256c0 6c 61 75 73 65 20 2a 2f 0a 20 20 57 69 74 68 20  lause */.  With 
256d0 2a 70 4f 75 74 65 72 3b 20 20 20 20 20 20 20 20  *pOuter;        
256e0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f             /* Co
256f0 6e 74 61 69 6e 69 6e 67 20 57 49 54 48 20 63 6c  ntaining WITH cl
25700 61 75 73 65 2c 20 6f 72 20 4e 55 4c 4c 20 2a 2f  ause, or NULL */
25710 0a 20 20 73 74 72 75 63 74 20 43 74 65 20 7b 20  .  struct Cte { 
25720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25730 20 20 20 2f 2a 20 46 6f 72 20 65 61 63 68 20 43     /* For each C
25740 54 45 20 69 6e 20 74 68 65 20 57 49 54 48 20 63  TE in the WITH c
25750 6c 61 75 73 65 2e 2e 2e 2e 20 2a 2f 0a 20 20 20  lause.... */.   
25760 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20   char *zName;   
25770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25780 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 69 73   /* Name of this
25790 20 43 54 45 20 2a 2f 0a 20 20 20 20 45 78 70 72   CTE */.    Expr
257a0 4c 69 73 74 20 2a 70 43 6f 6c 73 3b 20 20 20 20  List *pCols;    
257b0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c              /* L
257c0 69 73 74 20 6f 66 20 65 78 70 6c 69 63 69 74 20  ist of explicit 
257d0 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 2c 20 6f 72  column names, or
257e0 20 4e 55 4c 4c 20 2a 2f 0a 20 20 20 20 53 65 6c   NULL */.    Sel
257f0 65 63 74 20 2a 70 53 65 6c 65 63 74 3b 20 20 20  ect *pSelect;   
25800 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
25810 54 68 65 20 64 65 66 69 6e 69 74 69 6f 6e 20 6f  The definition o
25820 66 20 74 68 69 73 20 43 54 45 20 2a 2f 0a 20 20  f this CTE */.  
25830 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 43    const char *zC
25840 74 65 45 72 72 3b 20 20 20 20 20 20 20 20 20 20  teErr;          
25850 20 20 2f 2a 20 45 72 72 6f 72 20 6d 65 73 73 61    /* Error messa
25860 67 65 20 66 6f 72 20 63 69 72 63 75 6c 61 72 20  ge for circular 
25870 72 65 66 65 72 65 6e 63 65 73 20 2a 2f 0a 20 20  references */.  
25880 7d 20 61 5b 31 5d 3b 0a 7d 3b 0a 0a 23 69 66 64  } a[1];.};..#ifd
25890 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
258a0 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63  /*.** An instanc
258b0 65 20 6f 66 20 74 68 65 20 54 72 65 65 56 69 65  e of the TreeVie
258c0 77 20 6f 62 6a 65 63 74 20 69 73 20 75 73 65 64  w object is used
258d0 20 66 6f 72 20 70 72 69 6e 74 69 6e 67 20 74 68   for printing th
258e0 65 20 63 6f 6e 74 65 6e 74 20 6f 66 0a 2a 2a 20  e content of.** 
258f0 64 61 74 61 20 73 74 72 75 63 74 75 72 65 73 20  data structures 
25900 6f 6e 20 73 71 6c 69 74 65 33 44 65 62 75 67 50  on sqlite3DebugP
25910 72 69 6e 74 66 28 29 20 75 73 69 6e 67 20 61 20  rintf() using a 
25920 74 72 65 65 2d 6c 69 6b 65 20 76 69 65 77 2e 0a  tree-like view..
25930 2a 2f 0a 73 74 72 75 63 74 20 54 72 65 65 56 69  */.struct TreeVi
25940 65 77 20 7b 0a 20 20 69 6e 74 20 69 4c 65 76 65  ew {.  int iLeve
25950 6c 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  l;             /
25960 2a 20 57 68 69 63 68 20 6c 65 76 65 6c 20 6f 66  * Which level of
25970 20 74 68 65 20 74 72 65 65 20 77 65 20 61 72 65   the tree we are
25980 20 6f 6e 20 2a 2f 0a 20 20 75 38 20 20 62 4c 69   on */.  u8  bLi
25990 6e 65 5b 31 30 30 5d 3b 20 20 20 20 20 20 20 20  ne[100];        
259a0 20 2f 2a 20 44 72 61 77 20 76 65 72 74 69 63 61   /* Draw vertica
259b0 6c 20 69 6e 20 63 6f 6c 75 6d 6e 20 69 20 69 66  l in column i if
259c0 20 62 4c 69 6e 65 5b 69 5d 20 69 73 20 74 72 75   bLine[i] is tru
259d0 65 20 2a 2f 0a 7d 3b 0a 23 65 6e 64 69 66 20 2f  e */.};.#endif /
259e0 2a 20 53 51 4c 49 54 45 5f 44 45 42 55 47 20 2a  * SQLITE_DEBUG *
259f0 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 6f 62  /../*.** This ob
25a00 6a 65 63 74 20 69 73 20 75 73 65 64 20 69 6e 20  ject is used in 
25a10 76 61 72 69 6f 69 75 73 20 77 61 79 73 2c 20 61  varioius ways, a
25a20 6c 6c 20 72 65 6c 61 74 65 64 20 74 6f 20 77 69  ll related to wi
25a30 6e 64 6f 77 20 66 75 6e 63 74 69 6f 6e 73 0a 2a  ndow functions.*
25a40 2a 0a 2a 2a 20 20 20 28 31 29 20 41 20 73 69 6e  *.**   (1) A sin
25a50 67 6c 65 20 69 6e 73 74 61 6e 63 65 20 6f 66 20  gle instance of 
25a60 74 68 69 73 20 73 74 72 75 63 74 75 72 65 20 69  this structure i
25a70 73 20 61 74 74 61 63 68 65 64 20 74 6f 20 74 68  s attached to th
25a80 65 0a 2a 2a 20 20 20 20 20 20 20 74 68 65 20 45  e.**       the E
25a90 78 70 72 2e 70 57 69 6e 20 66 69 65 6c 64 20 66  xpr.pWin field f
25aa0 6f 72 20 65 61 63 68 20 77 69 6e 64 6f 77 20 66  or each window f
25ab0 75 6e 63 74 69 6f 6e 20 69 6e 20 61 6e 20 65 78  unction in an ex
25ac0 70 72 65 73 73 69 6f 6e 20 74 72 65 65 2e 0a 2a  pression tree..*
25ad0 2a 20 20 20 20 20 20 20 54 68 69 73 20 6f 62 6a  *       This obj
25ae0 65 63 74 20 68 6f 6c 64 73 20 74 68 65 20 69 6e  ect holds the in
25af0 66 6f 72 6d 61 74 69 6f 6e 20 63 6f 6e 74 61 69  formation contai
25b00 6e 65 64 20 69 6e 20 74 68 65 20 4f 56 45 52 20  ned in the OVER 
25b10 63 6c 61 75 73 65 2c 0a 2a 2a 20 20 20 20 20 20  clause,.**      
25b20 20 70 6c 75 73 20 61 64 64 69 74 69 6f 6e 61 6c   plus additional
25b30 20 66 69 65 6c 64 73 20 75 73 65 64 20 64 75 72   fields used dur
25b40 69 6e 67 20 63 6f 64 65 20 67 65 6e 65 72 61 74  ing code generat
25b50 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 20 20 28 32 29  ion..**.**   (2)
25b60 20 41 6c 6c 20 77 69 6e 64 6f 77 20 66 75 6e 63   All window func
25b70 74 69 6f 6e 73 20 69 6e 20 61 20 73 69 6e 67 6c  tions in a singl
25b80 65 20 53 45 4c 45 43 54 20 66 6f 72 6d 20 61 20  e SELECT form a 
25b90 6c 69 6e 6b 65 64 2d 6c 69 73 74 0a 2a 2a 20 20  linked-list.**  
25ba0 20 20 20 20 20 61 74 74 61 63 68 65 64 20 74 6f       attached to
25bb0 20 53 65 6c 65 63 74 2e 70 57 69 6e 2e 20 20 54   Select.pWin.  T
25bc0 68 65 20 57 69 6e 64 6f 77 2e 70 46 75 6e 63 20  he Window.pFunc 
25bd0 61 6e 64 20 57 69 6e 64 6f 77 2e 70 45 78 70 72  and Window.pExpr
25be0 0a 2a 2a 20 20 20 20 20 20 20 66 69 65 6c 64 73  .**       fields
25bf0 20 70 6f 69 6e 74 20 62 61 63 6b 20 74 6f 20 74   point back to t
25c00 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 74 68  he expression th
25c10 61 74 20 69 73 20 74 68 65 20 77 69 6e 64 6f 77  at is the window
25c20 20 66 75 6e 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a   function..**.**
25c30 20 20 20 28 33 29 20 54 68 65 20 74 65 72 6d 73     (3) The terms
25c40 20 6f 66 20 74 68 65 20 57 49 4e 44 4f 57 20 63   of the WINDOW c
25c50 6c 61 75 73 65 20 6f 66 20 61 20 53 45 4c 45 43  lause of a SELEC
25c60 54 20 61 72 65 20 69 6e 73 74 61 6e 63 65 73 20  T are instances 
25c70 6f 66 20 74 68 69 73 0a 2a 2a 20 20 20 20 20 20  of this.**      
25c80 20 6f 62 6a 65 63 74 20 6f 6e 20 61 20 6c 69 6e   object on a lin
25c90 6b 65 64 20 6c 69 73 74 20 61 74 74 61 63 68 65  ked list attache
25ca0 64 20 74 6f 20 53 65 6c 65 63 74 2e 70 57 69 6e  d to Select.pWin
25cb0 44 65 66 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  Defn..**.** The 
25cc0 75 73 65 73 20 28 31 29 20 61 6e 64 20 28 32 29  uses (1) and (2)
25cd0 20 61 72 65 20 72 65 61 6c 6c 79 20 74 68 65 20   are really the 
25ce0 73 61 6d 65 20 57 69 6e 64 6f 77 20 6f 62 6a 65  same Window obje
25cf0 63 74 20 74 68 61 74 20 6a 75 73 74 20 68 61 70  ct that just hap
25d00 70 65 6e 73 0a 2a 2a 20 74 6f 20 62 65 20 61 63  pens.** to be ac
25d10 63 65 73 73 69 62 6c 65 20 69 6e 20 74 77 6f 20  cessible in two 
25d20 64 69 66 66 65 72 65 6e 74 20 77 61 79 73 2e 20  different ways. 
25d30 20 55 73 65 20 28 33 29 20 69 73 20 61 72 65 20   Use (3) is are 
25d40 73 65 70 61 72 61 74 65 20 6f 62 6a 65 63 74 73  separate objects
25d50 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 57 69 6e 64  ..*/.struct Wind
25d60 6f 77 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61  ow {.  char *zNa
25d70 6d 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  me;            /
25d80 2a 20 4e 61 6d 65 20 6f 66 20 77 69 6e 64 6f 77  * Name of window
25d90 20 28 6d 61 79 20 62 65 20 4e 55 4c 4c 29 20 2a   (may be NULL) *
25da0 2f 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70 50  /.  ExprList *pP
25db0 61 72 74 69 74 69 6f 6e 3b 20 20 20 2f 2a 20 50  artition;   /* P
25dc0 41 52 54 49 54 49 4f 4e 20 42 59 20 63 6c 61 75  ARTITION BY clau
25dd0 73 65 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74  se */.  ExprList
25de0 20 2a 70 4f 72 64 65 72 42 79 3b 20 20 20 20 20   *pOrderBy;     
25df0 2f 2a 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75  /* ORDER BY clau
25e00 73 65 20 2a 2f 0a 20 20 75 38 20 65 54 79 70 65  se */.  u8 eType
25e10 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
25e20 2f 2a 20 54 4b 5f 52 41 4e 47 45 20 6f 72 20 54  /* TK_RANGE or T
25e30 4b 5f 52 4f 57 53 20 2a 2f 0a 20 20 75 38 20 65  K_ROWS */.  u8 e
25e40 53 74 61 72 74 3b 20 20 20 20 20 20 20 20 20 20  Start;          
25e50 20 20 20 20 2f 2a 20 55 4e 42 4f 55 4e 44 45 44      /* UNBOUNDED
25e60 2c 20 43 55 52 52 45 4e 54 2c 20 50 52 45 43 45  , CURRENT, PRECE
25e70 44 49 4e 47 20 6f 72 20 46 4f 4c 4c 4f 57 49 4e  DING or FOLLOWIN
25e80 47 20 2a 2f 0a 20 20 75 38 20 65 45 6e 64 3b 20  G */.  u8 eEnd; 
25e90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
25ea0 2a 20 55 4e 42 4f 55 4e 44 45 44 2c 20 43 55 52  * UNBOUNDED, CUR
25eb0 52 45 4e 54 2c 20 50 52 45 43 45 44 49 4e 47 20  RENT, PRECEDING 
25ec0 6f 72 20 46 4f 4c 4c 4f 57 49 4e 47 20 2a 2f 0a  or FOLLOWING */.
25ed0 20 20 45 78 70 72 20 2a 70 53 74 61 72 74 3b 20    Expr *pStart; 
25ee0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 45 78 70            /* Exp
25ef0 72 65 73 73 69 6f 6e 20 66 6f 72 20 22 3c 65 78  ression for "<ex
25f00 70 72 3e 20 50 52 45 43 45 44 49 4e 47 22 20 2a  pr> PRECEDING" *
25f10 2f 0a 20 20 45 78 70 72 20 2a 70 45 6e 64 3b 20  /.  Expr *pEnd; 
25f20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 45              /* E
25f30 78 70 72 65 73 73 69 6f 6e 20 66 6f 72 20 22 3c  xpression for "<
25f40 65 78 70 72 3e 20 46 4f 4c 4c 4f 57 49 4e 47 22  expr> FOLLOWING"
25f50 20 2a 2f 0a 20 20 57 69 6e 64 6f 77 20 2a 70 4e   */.  Window *pN
25f60 65 78 74 57 69 6e 3b 20 20 20 20 20 20 20 2f 2a  extWin;       /*
25f70 20 4e 65 78 74 20 77 69 6e 64 6f 77 20 66 75 6e   Next window fun
25f80 63 74 69 6f 6e 20 62 65 6c 6f 6e 67 69 6e 67 20  ction belonging 
25f90 74 6f 20 74 68 69 73 20 53 45 4c 45 43 54 20 2a  to this SELECT *
25fa0 2f 0a 20 20 45 78 70 72 20 2a 70 46 69 6c 74 65  /.  Expr *pFilte
25fb0 72 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54  r;          /* T
25fc0 68 65 20 46 49 4c 54 45 52 20 65 78 70 72 65 73  he FILTER expres
25fd0 73 69 6f 6e 20 2a 2f 0a 20 20 46 75 6e 63 44 65  sion */.  FuncDe
25fe0 66 20 2a 70 46 75 6e 63 3b 20 20 20 20 20 20 20  f *pFunc;       
25ff0 20 20 2f 2a 20 54 68 65 20 66 75 6e 63 74 69 6f    /* The functio
26000 6e 20 2a 2f 0a 20 20 69 6e 74 20 69 45 70 68 43  n */.  int iEphC
26010 73 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  sr;            /
26020 2a 20 50 61 72 74 69 74 69 6f 6e 20 62 75 66 66  * Partition buff
26030 65 72 20 6f 72 20 50 65 65 72 20 62 75 66 66 65  er or Peer buffe
26040 72 20 2a 2f 0a 20 20 69 6e 74 20 72 65 67 41 63  r */.  int regAc
26050 63 75 6d 3b 0a 20 20 69 6e 74 20 72 65 67 52 65  cum;.  int regRe
26060 73 75 6c 74 3b 0a 20 20 69 6e 74 20 63 73 72 41  sult;.  int csrA
26070 70 70 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  pp;             
26080 2f 2a 20 46 75 6e 63 74 69 6f 6e 20 63 75 72 73  /* Function curs
26090 6f 72 20 28 75 73 65 64 20 62 79 20 6d 69 6e 2f  or (used by min/
260a0 6d 61 78 29 20 2a 2f 0a 20 20 69 6e 74 20 72 65  max) */.  int re
260b0 67 41 70 70 3b 20 20 20 20 20 20 20 20 20 20 20  gApp;           
260c0 20 20 2f 2a 20 46 75 6e 63 74 69 6f 6e 20 72 65    /* Function re
260d0 67 69 73 74 65 72 20 28 61 6c 73 6f 20 75 73 65  gister (also use
260e0 64 20 62 79 20 6d 69 6e 2f 6d 61 78 29 20 2a 2f  d by min/max) */
260f0 0a 20 20 69 6e 74 20 72 65 67 50 61 72 74 3b 20  .  int regPart; 
26100 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 69             /* Fi
26110 72 73 74 20 69 6e 20 61 20 73 65 74 20 6f 66 20  rst in a set of 
26120 72 65 67 69 73 74 65 72 73 20 68 6f 6c 64 69 6e  registers holdin
26130 67 20 50 41 52 54 49 54 49 4f 4e 20 42 59 0a 20  g PARTITION BY. 
26140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26150 20 20 20 20 20 20 20 20 20 2a 2a 20 61 6e 64 20           ** and 
26160 4f 52 44 45 52 20 42 59 20 76 61 6c 75 65 73 20  ORDER BY values 
26170 66 6f 72 20 74 68 65 20 77 69 6e 64 6f 77 20 2a  for the window *
26180 2f 0a 20 20 45 78 70 72 20 2a 70 4f 77 6e 65 72  /.  Expr *pOwner
26190 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 45  ;           /* E
261a0 78 70 72 65 73 73 69 6f 6e 20 6f 62 6a 65 63 74  xpression object
261b0 20 74 68 69 73 20 77 69 6e 64 6f 77 20 69 73 20   this window is 
261c0 61 74 74 61 63 68 65 64 20 74 6f 20 2a 2f 0a 20  attached to */. 
261d0 20 69 6e 74 20 6e 42 75 66 66 65 72 43 6f 6c 3b   int nBufferCol;
261e0 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
261f0 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e  er of columns in
26200 20 62 75 66 66 65 72 20 74 61 62 6c 65 20 2a 2f   buffer table */
26210 0a 20 20 69 6e 74 20 69 41 72 67 43 6f 6c 3b 20  .  int iArgCol; 
26220 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 66             /* Of
26230 66 73 65 74 20 6f 66 20 66 69 72 73 74 20 61 72  fset of first ar
26240 67 75 6d 65 6e 74 20 66 6f 72 20 74 68 69 73 20  gument for this 
26250 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 7d 3b 0a 0a  function */.};..
26260 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
26270 4d 49 54 5f 57 49 4e 44 4f 57 46 55 4e 43 0a 76  MIT_WINDOWFUNC.v
26280 6f 69 64 20 73 71 6c 69 74 65 33 57 69 6e 64 6f  oid sqlite3Windo
26290 77 44 65 6c 65 74 65 28 73 71 6c 69 74 65 33 2a  wDelete(sqlite3*
262a0 2c 20 57 69 6e 64 6f 77 2a 29 3b 0a 76 6f 69 64  , Window*);.void
262b0 20 73 71 6c 69 74 65 33 57 69 6e 64 6f 77 4c 69   sqlite3WindowLi
262c0 73 74 44 65 6c 65 74 65 28 73 71 6c 69 74 65 33  stDelete(sqlite3
262d0 20 2a 64 62 2c 20 57 69 6e 64 6f 77 20 2a 70 29   *db, Window *p)
262e0 3b 0a 57 69 6e 64 6f 77 20 2a 73 71 6c 69 74 65  ;.Window *sqlite
262f0 33 57 69 6e 64 6f 77 41 6c 6c 6f 63 28 50 61 72  3WindowAlloc(Par
26300 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 45  se*, int, int, E
26310 78 70 72 2a 2c 20 69 6e 74 20 2c 20 45 78 70 72  xpr*, int , Expr
26320 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
26330 57 69 6e 64 6f 77 41 74 74 61 63 68 28 50 61 72  WindowAttach(Par
26340 73 65 2a 2c 20 45 78 70 72 2a 2c 20 57 69 6e 64  se*, Expr*, Wind
26350 6f 77 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  ow*);.int sqlite
26360 33 57 69 6e 64 6f 77 43 6f 6d 70 61 72 65 28 50  3WindowCompare(P
26370 61 72 73 65 2a 2c 20 57 69 6e 64 6f 77 2a 2c 20  arse*, Window*, 
26380 57 69 6e 64 6f 77 2a 29 3b 0a 76 6f 69 64 20 73  Window*);.void s
26390 71 6c 69 74 65 33 57 69 6e 64 6f 77 43 6f 64 65  qlite3WindowCode
263a0 49 6e 69 74 28 50 61 72 73 65 2a 2c 20 57 69 6e  Init(Parse*, Win
263b0 64 6f 77 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  dow*);.void sqli
263c0 74 65 33 57 69 6e 64 6f 77 43 6f 64 65 53 74 65  te3WindowCodeSte
263d0 70 28 50 61 72 73 65 2a 2c 20 53 65 6c 65 63 74  p(Parse*, Select
263e0 2a 2c 20 57 68 65 72 65 49 6e 66 6f 2a 2c 20 69  *, WhereInfo*, i
263f0 6e 74 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71  nt, int);.int sq
26400 6c 69 74 65 33 57 69 6e 64 6f 77 52 65 77 72 69  lite3WindowRewri
26410 74 65 28 50 61 72 73 65 2a 2c 20 53 65 6c 65 63  te(Parse*, Selec
26420 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  t*);.int sqlite3
26430 45 78 70 61 6e 64 53 75 62 71 75 65 72 79 28 50  ExpandSubquery(P
26440 61 72 73 65 2a 2c 20 73 74 72 75 63 74 20 53 72  arse*, struct Sr
26450 63 4c 69 73 74 5f 69 74 65 6d 2a 29 3b 0a 76 6f  cList_item*);.vo
26460 69 64 20 73 71 6c 69 74 65 33 57 69 6e 64 6f 77  id sqlite3Window
26470 55 70 64 61 74 65 28 50 61 72 73 65 2a 2c 20 57  Update(Parse*, W
26480 69 6e 64 6f 77 2a 2c 20 57 69 6e 64 6f 77 2a 2c  indow*, Window*,
26490 20 46 75 6e 63 44 65 66 2a 29 3b 0a 57 69 6e 64   FuncDef*);.Wind
264a0 6f 77 20 2a 73 71 6c 69 74 65 33 57 69 6e 64 6f  ow *sqlite3Windo
264b0 77 44 75 70 28 73 71 6c 69 74 65 33 20 2a 64 62  wDup(sqlite3 *db
264c0 2c 20 45 78 70 72 20 2a 70 4f 77 6e 65 72 2c 20  , Expr *pOwner, 
264d0 57 69 6e 64 6f 77 20 2a 70 29 3b 0a 57 69 6e 64  Window *p);.Wind
264e0 6f 77 20 2a 73 71 6c 69 74 65 33 57 69 6e 64 6f  ow *sqlite3Windo
264f0 77 4c 69 73 74 44 75 70 28 73 71 6c 69 74 65 33  wListDup(sqlite3
26500 20 2a 64 62 2c 20 57 69 6e 64 6f 77 20 2a 70 29   *db, Window *p)
26510 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 57 69  ;.void sqlite3Wi
26520 6e 64 6f 77 46 75 6e 63 74 69 6f 6e 73 28 76 6f  ndowFunctions(vo
26530 69 64 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66  id);.#else.# def
26540 69 6e 65 20 73 71 6c 69 74 65 33 57 69 6e 64 6f  ine sqlite3Windo
26550 77 44 65 6c 65 74 65 28 61 2c 62 29 0a 23 20 64  wDelete(a,b).# d
26560 65 66 69 6e 65 20 73 71 6c 69 74 65 33 57 69 6e  efine sqlite3Win
26570 64 6f 77 46 75 6e 63 74 69 6f 6e 73 28 29 0a 23  dowFunctions().#
26580 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 57   define sqlite3W
26590 69 6e 64 6f 77 41 74 74 61 63 68 28 61 2c 62 2c  indowAttach(a,b,
265a0 63 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  c).#endif../*.**
265b0 20 41 73 73 75 6d 69 6e 67 20 7a 49 6e 20 70 6f   Assuming zIn po
265c0 69 6e 74 73 20 74 6f 20 74 68 65 20 66 69 72 73  ints to the firs
265d0 74 20 62 79 74 65 20 6f 66 20 61 20 55 54 46 2d  t byte of a UTF-
265e0 38 20 63 68 61 72 61 63 74 65 72 2c 0a 2a 2a 20  8 character,.** 
265f0 61 64 76 61 6e 63 65 20 7a 49 6e 20 74 6f 20 70  advance zIn to p
26600 6f 69 6e 74 20 74 6f 20 74 68 65 20 66 69 72 73  oint to the firs
26610 74 20 62 79 74 65 20 6f 66 20 74 68 65 20 6e 65  t byte of the ne
26620 78 74 20 55 54 46 2d 38 20 63 68 61 72 61 63 74  xt UTF-8 charact
26630 65 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53  er..*/.#define S
26640 51 4c 49 54 45 5f 53 4b 49 50 5f 55 54 46 38 28  QLITE_SKIP_UTF8(
26650 7a 49 6e 29 20 7b 20 20 20 20 20 20 20 20 20 20  zIn) {          
26660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5c 0a                \.
26670 20 20 69 66 28 20 28 2a 28 7a 49 6e 2b 2b 29 29    if( (*(zIn++))
26680 3e 3d 30 78 63 30 20 29 7b 20 20 20 20 20 20 20  >=0xc0 ){       
26690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
266a0 20 20 20 20 20 20 20 5c 0a 20 20 20 20 77 68 69         \.    whi
266b0 6c 65 28 20 28 2a 7a 49 6e 20 26 20 30 78 63 30  le( (*zIn & 0xc0
266c0 29 3d 3d 30 78 38 30 20 29 7b 20 7a 49 6e 2b 2b  )==0x80 ){ zIn++
266d0 3b 20 7d 20 20 20 20 20 20 20 20 20 20 20 20 20  ; }             
266e0 5c 0a 20 20 7d 20 20 20 20 20 20 20 20 20 20 20  \.  }           
266f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26710 20 20 20 20 20 20 20 20 20 5c 0a 7d 0a 0a 2f 2a           \.}../*
26720 0a 2a 2a 20 54 68 65 20 53 51 4c 49 54 45 5f 2a  .** The SQLITE_*
26730 5f 42 4b 50 54 20 6d 61 63 72 6f 73 20 61 72 65  _BKPT macros are
26740 20 73 75 62 73 74 69 74 75 74 65 73 20 66 6f 72   substitutes for
26750 20 74 68 65 20 65 72 72 6f 72 20 63 6f 64 65 73   the error codes
26760 20 77 69 74 68 0a 2a 2a 20 74 68 65 20 73 61 6d   with.** the sam
26770 65 20 6e 61 6d 65 20 62 75 74 20 77 69 74 68 6f  e name but witho
26780 75 74 20 74 68 65 20 5f 42 4b 50 54 20 73 75 66  ut the _BKPT suf
26790 66 69 78 2e 20 20 54 68 65 73 65 20 6d 61 63 72  fix.  These macr
267a0 6f 73 20 69 6e 76 6f 6b 65 0a 2a 2a 20 72 6f 75  os invoke.** rou
267b0 74 69 6e 65 73 20 74 68 61 74 20 72 65 70 6f 72  tines that repor
267c0 74 20 74 68 65 20 6c 69 6e 65 2d 6e 75 6d 62 65  t the line-numbe
267d0 72 20 6f 6e 20 77 68 69 63 68 20 74 68 65 20 65  r on which the e
267e0 72 72 6f 72 20 6f 72 69 67 69 6e 61 74 65 64 0a  rror originated.
267f0 2a 2a 20 75 73 69 6e 67 20 73 71 6c 69 74 65 33  ** using sqlite3
26800 5f 6c 6f 67 28 29 2e 20 20 54 68 65 20 72 6f 75  _log().  The rou
26810 74 69 6e 65 73 20 61 6c 73 6f 20 70 72 6f 76 69  tines also provi
26820 64 65 20 61 20 63 6f 6e 76 65 6e 69 65 6e 74 20  de a convenient 
26830 70 6c 61 63 65 0a 2a 2a 20 74 6f 20 73 65 74 20  place.** to set 
26840 61 20 64 65 62 75 67 67 65 72 20 62 72 65 61 6b  a debugger break
26850 70 6f 69 6e 74 2e 0a 2a 2f 0a 69 6e 74 20 73 71  point..*/.int sq
26860 6c 69 74 65 33 52 65 70 6f 72 74 45 72 72 6f 72  lite3ReportError
26870 28 69 6e 74 20 69 45 72 72 2c 20 69 6e 74 20 6c  (int iErr, int l
26880 69 6e 65 6e 6f 2c 20 63 6f 6e 73 74 20 63 68 61  ineno, const cha
26890 72 20 2a 7a 54 79 70 65 29 3b 0a 69 6e 74 20 73  r *zType);.int s
268a0 71 6c 69 74 65 33 43 6f 72 72 75 70 74 45 72 72  qlite3CorruptErr
268b0 6f 72 28 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c  or(int);.int sql
268c0 69 74 65 33 4d 69 73 75 73 65 45 72 72 6f 72 28  ite3MisuseError(
268d0 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  int);.int sqlite
268e0 33 43 61 6e 74 6f 70 65 6e 45 72 72 6f 72 28 69  3CantopenError(i
268f0 6e 74 29 3b 0a 23 64 65 66 69 6e 65 20 53 51 4c  nt);.#define SQL
26900 49 54 45 5f 43 4f 52 52 55 50 54 5f 42 4b 50 54  ITE_CORRUPT_BKPT
26910 20 73 71 6c 69 74 65 33 43 6f 72 72 75 70 74 45   sqlite3CorruptE
26920 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 29 0a 23  rror(__LINE__).#
26930 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 49  define SQLITE_MI
26940 53 55 53 45 5f 42 4b 50 54 20 73 71 6c 69 74 65  SUSE_BKPT sqlite
26950 33 4d 69 73 75 73 65 45 72 72 6f 72 28 5f 5f 4c  3MisuseError(__L
26960 49 4e 45 5f 5f 29 0a 23 64 65 66 69 6e 65 20 53  INE__).#define S
26970 51 4c 49 54 45 5f 43 41 4e 54 4f 50 45 4e 5f 42  QLITE_CANTOPEN_B
26980 4b 50 54 20 73 71 6c 69 74 65 33 43 61 6e 74 6f  KPT sqlite3Canto
26990 70 65 6e 45 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f  penError(__LINE_
269a0 5f 29 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  _).#ifdef SQLITE
269b0 5f 44 45 42 55 47 0a 20 20 69 6e 74 20 73 71 6c  _DEBUG.  int sql
269c0 69 74 65 33 4e 6f 6d 65 6d 45 72 72 6f 72 28 69  ite3NomemError(i
269d0 6e 74 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74  nt);.  int sqlit
269e0 65 33 49 6f 65 72 72 6e 6f 6d 65 6d 45 72 72 6f  e3IoerrnomemErro
269f0 72 28 69 6e 74 29 3b 0a 20 20 69 6e 74 20 73 71  r(int);.  int sq
26a00 6c 69 74 65 33 43 6f 72 72 75 70 74 50 67 6e 6f  lite3CorruptPgno
26a10 45 72 72 6f 72 28 69 6e 74 2c 50 67 6e 6f 29 3b  Error(int,Pgno);
26a20 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
26a30 5f 4e 4f 4d 45 4d 5f 42 4b 50 54 20 73 71 6c 69  _NOMEM_BKPT sqli
26a40 74 65 33 4e 6f 6d 65 6d 45 72 72 6f 72 28 5f 5f  te3NomemError(__
26a50 4c 49 4e 45 5f 5f 29 0a 23 20 64 65 66 69 6e 65  LINE__).# define
26a60 20 53 51 4c 49 54 45 5f 49 4f 45 52 52 5f 4e 4f   SQLITE_IOERR_NO
26a70 4d 45 4d 5f 42 4b 50 54 20 73 71 6c 69 74 65 33  MEM_BKPT sqlite3
26a80 49 6f 65 72 72 6e 6f 6d 65 6d 45 72 72 6f 72 28  IoerrnomemError(
26a90 5f 5f 4c 49 4e 45 5f 5f 29 0a 23 20 64 65 66 69  __LINE__).# defi
26aa0 6e 65 20 53 51 4c 49 54 45 5f 43 4f 52 52 55 50  ne SQLITE_CORRUP
26ab0 54 5f 50 47 4e 4f 28 50 29 20 73 71 6c 69 74 65  T_PGNO(P) sqlite
26ac0 33 43 6f 72 72 75 70 74 50 67 6e 6f 45 72 72 6f  3CorruptPgnoErro
26ad0 72 28 5f 5f 4c 49 4e 45 5f 5f 2c 28 50 29 29 0a  r(__LINE__,(P)).
26ae0 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 53  #else.# define S
26af0 51 4c 49 54 45 5f 4e 4f 4d 45 4d 5f 42 4b 50 54  QLITE_NOMEM_BKPT
26b00 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 0a 23 20   SQLITE_NOMEM.# 
26b10 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49 4f  define SQLITE_IO
26b20 45 52 52 5f 4e 4f 4d 45 4d 5f 42 4b 50 54 20 53  ERR_NOMEM_BKPT S
26b30 51 4c 49 54 45 5f 49 4f 45 52 52 5f 4e 4f 4d 45  QLITE_IOERR_NOME
26b40 4d 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  M.# define SQLIT
26b50 45 5f 43 4f 52 52 55 50 54 5f 50 47 4e 4f 28 50  E_CORRUPT_PGNO(P
26b60 29 20 73 71 6c 69 74 65 33 43 6f 72 72 75 70 74  ) sqlite3Corrupt
26b70 45 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 29 0a  Error(__LINE__).
26b80 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 46 54  #endif../*.** FT
26b90 53 33 20 61 6e 64 20 46 54 53 34 20 62 6f 74 68  S3 and FTS4 both
26ba0 20 72 65 71 75 69 72 65 20 76 69 72 74 75 61 6c   require virtual
26bb0 20 74 61 62 6c 65 20 73 75 70 70 6f 72 74 0a 2a   table support.*
26bc0 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51  /.#if defined(SQ
26bd0 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
26be0 4c 54 41 42 4c 45 29 0a 23 20 75 6e 64 65 66 20  LTABLE).# undef 
26bf0 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54  SQLITE_ENABLE_FT
26c00 53 33 0a 23 20 75 6e 64 65 66 20 53 51 4c 49 54  S3.# undef SQLIT
26c10 45 5f 45 4e 41 42 4c 45 5f 46 54 53 34 0a 23 65  E_ENABLE_FTS4.#e
26c20 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 46 54 53 34  ndif../*.** FTS4
26c30 20 69 73 20 72 65 61 6c 6c 79 20 61 6e 20 65 78   is really an ex
26c40 74 65 6e 73 69 6f 6e 20 66 6f 72 20 46 54 53 33  tension for FTS3
26c50 2e 20 20 49 74 20 69 73 20 65 6e 61 62 6c 65 64  .  It is enabled
26c60 20 75 73 69 6e 67 20 74 68 65 0a 2a 2a 20 53 51   using the.** SQ
26c70 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33  LITE_ENABLE_FTS3
26c80 20 6d 61 63 72 6f 2e 20 20 42 75 74 20 74 6f 20   macro.  But to 
26c90 61 76 6f 69 64 20 63 6f 6e 66 75 73 69 6f 6e 20  avoid confusion 
26ca0 77 65 20 61 6c 73 6f 20 63 61 6c 6c 0a 2a 2a 20  we also call.** 
26cb0 74 68 65 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  the SQLITE_ENABL
26cc0 45 5f 46 54 53 34 20 6d 61 63 72 6f 20 74 6f 20  E_FTS4 macro to 
26cd0 73 65 72 76 65 20 61 73 20 61 6e 20 61 6c 69 61  serve as an alia
26ce0 73 20 66 6f 72 20 53 51 4c 49 54 45 5f 45 4e 41  s for SQLITE_ENA
26cf0 42 4c 45 5f 46 54 53 33 2e 0a 2a 2f 0a 23 69 66  BLE_FTS3..*/.#if
26d00 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
26d10 45 4e 41 42 4c 45 5f 46 54 53 34 29 20 26 26 20  ENABLE_FTS4) && 
26d20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
26d30 45 4e 41 42 4c 45 5f 46 54 53 33 29 0a 23 20 64  ENABLE_FTS3).# d
26d40 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 4e 41  efine SQLITE_ENA
26d50 42 4c 45 5f 46 54 53 33 20 31 0a 23 65 6e 64 69  BLE_FTS3 1.#endi
26d60 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 63 74 79  f../*.** The cty
26d70 70 65 2e 68 20 68 65 61 64 65 72 20 69 73 20 6e  pe.h header is n
26d80 65 65 64 65 64 20 66 6f 72 20 6e 6f 6e 2d 41 53  eeded for non-AS
26d90 43 49 49 20 73 79 73 74 65 6d 73 2e 20 20 49 74  CII systems.  It
26da0 20 69 73 20 61 6c 73 6f 0a 2a 2a 20 6e 65 65 64   is also.** need
26db0 65 64 20 62 79 20 46 54 53 33 20 77 68 65 6e 20  ed by FTS3 when 
26dc0 46 54 53 33 20 69 73 20 69 6e 63 6c 75 64 65 64  FTS3 is included
26dd0 20 69 6e 20 74 68 65 20 61 6d 61 6c 67 61 6d 61   in the amalgama
26de0 74 69 6f 6e 2e 0a 2a 2f 0a 23 69 66 20 21 64 65  tion..*/.#if !de
26df0 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 41 53 43  fined(SQLITE_ASC
26e00 49 49 29 20 7c 7c 20 5c 0a 20 20 20 20 28 64 65  II) || \.    (de
26e10 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41  fined(SQLITE_ENA
26e20 42 4c 45 5f 46 54 53 33 29 20 26 26 20 64 65 66  BLE_FTS3) && def
26e30 69 6e 65 64 28 53 51 4c 49 54 45 5f 41 4d 41 4c  ined(SQLITE_AMAL
26e40 47 41 4d 41 54 49 4f 4e 29 29 0a 23 20 69 6e 63  GAMATION)).# inc
26e50 6c 75 64 65 20 3c 63 74 79 70 65 2e 68 3e 0a 23  lude <ctype.h>.#
26e60 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  endif../*.** The
26e70 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f   following macro
26e80 73 20 6d 69 6d 69 63 20 74 68 65 20 73 74 61 6e  s mimic the stan
26e90 64 61 72 64 20 6c 69 62 72 61 72 79 20 66 75 6e  dard library fun
26ea0 63 74 69 6f 6e 73 20 74 6f 75 70 70 65 72 28 29  ctions toupper()
26eb0 2c 0a 2a 2a 20 69 73 73 70 61 63 65 28 29 2c 20  ,.** isspace(), 
26ec0 69 73 61 6c 6e 75 6d 28 29 2c 20 69 73 64 69 67  isalnum(), isdig
26ed0 69 74 28 29 20 61 6e 64 20 69 73 78 64 69 67 69  it() and isxdigi
26ee0 74 28 29 2c 20 72 65 73 70 65 63 74 69 76 65 6c  t(), respectivel
26ef0 79 2e 20 54 68 65 0a 2a 2a 20 73 71 6c 69 74 65  y. The.** sqlite
26f00 20 76 65 72 73 69 6f 6e 73 20 6f 6e 6c 79 20 77   versions only w
26f10 6f 72 6b 20 66 6f 72 20 41 53 43 49 49 20 63 68  ork for ASCII ch
26f20 61 72 61 63 74 65 72 73 2c 20 72 65 67 61 72 64  aracters, regard
26f30 6c 65 73 73 20 6f 66 20 6c 6f 63 61 6c 65 2e 0a  less of locale..
26f40 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
26f50 5f 41 53 43 49 49 0a 23 20 64 65 66 69 6e 65 20  _ASCII.# define 
26f60 73 71 6c 69 74 65 33 54 6f 75 70 70 65 72 28 78  sqlite3Toupper(x
26f70 29 20 20 28 28 78 29 26 7e 28 73 71 6c 69 74 65  )  ((x)&~(sqlite
26f80 33 43 74 79 70 65 4d 61 70 5b 28 75 6e 73 69 67  3CtypeMap[(unsig
26f90 6e 65 64 20 63 68 61 72 29 28 78 29 5d 26 30 78  ned char)(x)]&0x
26fa0 32 30 29 29 0a 23 20 64 65 66 69 6e 65 20 73 71  20)).# define sq
26fb0 6c 69 74 65 33 49 73 73 70 61 63 65 28 78 29 20  lite3Isspace(x) 
26fc0 20 20 28 73 71 6c 69 74 65 33 43 74 79 70 65 4d    (sqlite3CtypeM
26fd0 61 70 5b 28 75 6e 73 69 67 6e 65 64 20 63 68 61  ap[(unsigned cha
26fe0 72 29 28 78 29 5d 26 30 78 30 31 29 0a 23 20 64  r)(x)]&0x01).# d
26ff0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 61  efine sqlite3Isa
27000 6c 6e 75 6d 28 78 29 20 20 20 28 73 71 6c 69 74  lnum(x)   (sqlit
27010 65 33 43 74 79 70 65 4d 61 70 5b 28 75 6e 73 69  e3CtypeMap[(unsi
27020 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d 26 30  gned char)(x)]&0
27030 78 30 36 29 0a 23 20 64 65 66 69 6e 65 20 73 71  x06).# define sq
27040 6c 69 74 65 33 49 73 61 6c 70 68 61 28 78 29 20  lite3Isalpha(x) 
27050 20 20 28 73 71 6c 69 74 65 33 43 74 79 70 65 4d    (sqlite3CtypeM
27060 61 70 5b 28 75 6e 73 69 67 6e 65 64 20 63 68 61  ap[(unsigned cha
27070 72 29 28 78 29 5d 26 30 78 30 32 29 0a 23 20 64  r)(x)]&0x02).# d
27080 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 64  efine sqlite3Isd
27090 69 67 69 74 28 78 29 20 20 20 28 73 71 6c 69 74  igit(x)   (sqlit
270a0 65 33 43 74 79 70 65 4d 61 70 5b 28 75 6e 73 69  e3CtypeMap[(unsi
270b0 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d 26 30  gned char)(x)]&0
270c0 78 30 34 29 0a 23 20 64 65 66 69 6e 65 20 73 71  x04).# define sq
270d0 6c 69 74 65 33 49 73 78 64 69 67 69 74 28 78 29  lite3Isxdigit(x)
270e0 20 20 28 73 71 6c 69 74 65 33 43 74 79 70 65 4d    (sqlite3CtypeM
270f0 61 70 5b 28 75 6e 73 69 67 6e 65 64 20 63 68 61  ap[(unsigned cha
27100 72 29 28 78 29 5d 26 30 78 30 38 29 0a 23 20 64  r)(x)]&0x08).# d
27110 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54 6f 6c  efine sqlite3Tol
27120 6f 77 65 72 28 78 29 20 20 20 28 73 71 6c 69 74  ower(x)   (sqlit
27130 65 33 55 70 70 65 72 54 6f 4c 6f 77 65 72 5b 28  e3UpperToLower[(
27140 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78  unsigned char)(x
27150 29 5d 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  )]).# define sql
27160 69 74 65 33 49 73 71 75 6f 74 65 28 78 29 20 20  ite3Isquote(x)  
27170 20 28 73 71 6c 69 74 65 33 43 74 79 70 65 4d 61   (sqlite3CtypeMa
27180 70 5b 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72  p[(unsigned char
27190 29 28 78 29 5d 26 30 78 38 30 29 0a 23 65 6c 73  )(x)]&0x80).#els
271a0 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  e.# define sqlit
271b0 65 33 54 6f 75 70 70 65 72 28 78 29 20 20 20 74  e3Toupper(x)   t
271c0 6f 75 70 70 65 72 28 28 75 6e 73 69 67 6e 65 64  oupper((unsigned
271d0 20 63 68 61 72 29 28 78 29 29 0a 23 20 64 65 66   char)(x)).# def
271e0 69 6e 65 20 73 71 6c 69 74 65 33 49 73 73 70 61  ine sqlite3Isspa
271f0 63 65 28 78 29 20 20 20 69 73 73 70 61 63 65 28  ce(x)   isspace(
27200 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28  (unsigned char)(
27210 78 29 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  x)).# define sql
27220 69 74 65 33 49 73 61 6c 6e 75 6d 28 78 29 20 20  ite3Isalnum(x)  
27230 20 69 73 61 6c 6e 75 6d 28 28 75 6e 73 69 67 6e   isalnum((unsign
27240 65 64 20 63 68 61 72 29 28 78 29 29 0a 23 20 64  ed char)(x)).# d
27250 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 61  efine sqlite3Isa
27260 6c 70 68 61 28 78 29 20 20 20 69 73 61 6c 70 68  lpha(x)   isalph
27270 61 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72  a((unsigned char
27280 29 28 78 29 29 0a 23 20 64 65 66 69 6e 65 20 73  )(x)).# define s
27290 71 6c 69 74 65 33 49 73 64 69 67 69 74 28 78 29  qlite3Isdigit(x)
272a0 20 20 20 69 73 64 69 67 69 74 28 28 75 6e 73 69     isdigit((unsi
272b0 67 6e 65 64 20 63 68 61 72 29 28 78 29 29 0a 23  gned char)(x)).#
272c0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49   define sqlite3I
272d0 73 78 64 69 67 69 74 28 78 29 20 20 69 73 78 64  sxdigit(x)  isxd
272e0 69 67 69 74 28 28 75 6e 73 69 67 6e 65 64 20 63  igit((unsigned c
272f0 68 61 72 29 28 78 29 29 0a 23 20 64 65 66 69 6e  har)(x)).# defin
27300 65 20 73 71 6c 69 74 65 33 54 6f 6c 6f 77 65 72  e sqlite3Tolower
27310 28 78 29 20 20 20 74 6f 6c 6f 77 65 72 28 28 75  (x)   tolower((u
27320 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29  nsigned char)(x)
27330 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
27340 65 33 49 73 71 75 6f 74 65 28 78 29 20 20 20 28  e3Isquote(x)   (
27350 28 78 29 3d 3d 27 22 27 7c 7c 28 78 29 3d 3d 27  (x)=='"'||(x)=='
27360 5c 27 27 7c 7c 28 78 29 3d 3d 27 5b 27 7c 7c 28  \''||(x)=='['||(
27370 78 29 3d 3d 27 60 27 29 0a 23 65 6e 64 69 66 0a  x)=='`').#endif.
27380 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
27390 4d 49 54 5f 43 4f 4d 50 49 4c 45 4f 50 54 49 4f  MIT_COMPILEOPTIO
273a0 4e 5f 44 49 41 47 53 0a 69 6e 74 20 73 71 6c 69  N_DIAGS.int sqli
273b0 74 65 33 49 73 49 64 43 68 61 72 28 75 38 29 3b  te3IsIdChar(u8);
273c0 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49  .#endif../*.** I
273d0 6e 74 65 72 6e 61 6c 20 66 75 6e 63 74 69 6f 6e  nternal function
273e0 20 70 72 6f 74 6f 74 79 70 65 73 0a 2a 2f 0a 69   prototypes.*/.i
273f0 6e 74 20 73 71 6c 69 74 65 33 53 74 72 49 43 6d  nt sqlite3StrICm
27400 70 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f  p(const char*,co
27410 6e 73 74 20 63 68 61 72 2a 29 3b 0a 69 6e 74 20  nst char*);.int 
27420 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28  sqlite3Strlen30(
27430 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 63 68  const char*);.ch
27440 61 72 20 2a 73 71 6c 69 74 65 33 43 6f 6c 75 6d  ar *sqlite3Colum
27450 6e 54 79 70 65 28 43 6f 6c 75 6d 6e 2a 2c 63 68  nType(Column*,ch
27460 61 72 2a 29 3b 0a 23 64 65 66 69 6e 65 20 73 71  ar*);.#define sq
27470 6c 69 74 65 33 53 74 72 4e 49 43 6d 70 20 73 71  lite3StrNICmp sq
27480 6c 69 74 65 33 5f 73 74 72 6e 69 63 6d 70 0a 0a  lite3_strnicmp..
27490 69 6e 74 20 73 71 6c 69 74 65 33 4d 61 6c 6c 6f  int sqlite3Mallo
274a0 63 49 6e 69 74 28 76 6f 69 64 29 3b 0a 76 6f 69  cInit(void);.voi
274b0 64 20 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 45  d sqlite3MallocE
274c0 6e 64 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20 2a  nd(void);.void *
274d0 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 28 75 36  sqlite3Malloc(u6
274e0 34 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65  4);.void *sqlite
274f0 33 4d 61 6c 6c 6f 63 5a 65 72 6f 28 75 36 34 29  3MallocZero(u64)
27500 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 44  ;.void *sqlite3D
27510 62 4d 61 6c 6c 6f 63 5a 65 72 6f 28 73 71 6c 69  bMallocZero(sqli
27520 74 65 33 2a 2c 20 75 36 34 29 3b 0a 76 6f 69 64  te3*, u64);.void
27530 20 2a 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f   *sqlite3DbMallo
27540 63 52 61 77 28 73 71 6c 69 74 65 33 2a 2c 20 75  cRaw(sqlite3*, u
27550 36 34 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74  64);.void *sqlit
27560 65 33 44 62 4d 61 6c 6c 6f 63 52 61 77 4e 4e 28  e3DbMallocRawNN(
27570 73 71 6c 69 74 65 33 2a 2c 20 75 36 34 29 3b 0a  sqlite3*, u64);.
27580 63 68 61 72 20 2a 73 71 6c 69 74 65 33 44 62 53  char *sqlite3DbS
27590 74 72 44 75 70 28 73 71 6c 69 74 65 33 2a 2c 63  trDup(sqlite3*,c
275a0 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 63 68 61  onst char*);.cha
275b0 72 20 2a 73 71 6c 69 74 65 33 44 62 53 74 72 4e  r *sqlite3DbStrN
275c0 44 75 70 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e  Dup(sqlite3*,con
275d0 73 74 20 63 68 61 72 2a 2c 20 75 36 34 29 3b 0a  st char*, u64);.
275e0 63 68 61 72 20 2a 73 71 6c 69 74 65 33 44 62 53  char *sqlite3DbS
275f0 70 61 6e 44 75 70 28 73 71 6c 69 74 65 33 2a 2c  panDup(sqlite3*,
27600 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73  const char*,cons
27610 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 2a  t char*);.void *
27620 73 71 6c 69 74 65 33 52 65 61 6c 6c 6f 63 28 76  sqlite3Realloc(v
27630 6f 69 64 2a 2c 20 75 36 34 29 3b 0a 76 6f 69 64  oid*, u64);.void
27640 20 2a 73 71 6c 69 74 65 33 44 62 52 65 61 6c 6c   *sqlite3DbReall
27650 6f 63 4f 72 46 72 65 65 28 73 71 6c 69 74 65 33  ocOrFree(sqlite3
27660 20 2a 2c 20 76 6f 69 64 20 2a 2c 20 75 36 34 29   *, void *, u64)
27670 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 44  ;.void *sqlite3D
27680 62 52 65 61 6c 6c 6f 63 28 73 71 6c 69 74 65 33  bRealloc(sqlite3
27690 20 2a 2c 20 76 6f 69 64 20 2a 2c 20 75 36 34 29   *, void *, u64)
276a0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44 62  ;.void sqlite3Db
276b0 46 72 65 65 28 73 71 6c 69 74 65 33 2a 2c 20 76  Free(sqlite3*, v
276c0 6f 69 64 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  oid*);.void sqli
276d0 74 65 33 44 62 46 72 65 65 4e 4e 28 73 71 6c 69  te3DbFreeNN(sqli
276e0 74 65 33 2a 2c 20 76 6f 69 64 2a 29 3b 0a 69 6e  te3*, void*);.in
276f0 74 20 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 53  t sqlite3MallocS
27700 69 7a 65 28 76 6f 69 64 2a 29 3b 0a 69 6e 74 20  ize(void*);.int 
27710 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 53  sqlite3DbMallocS
27720 69 7a 65 28 73 71 6c 69 74 65 33 2a 2c 20 76 6f  ize(sqlite3*, vo
27730 69 64 2a 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69  id*);.void *sqli
27740 74 65 33 50 61 67 65 4d 61 6c 6c 6f 63 28 69 6e  te3PageMalloc(in
27750 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
27760 50 61 67 65 46 72 65 65 28 76 6f 69 64 2a 29 3b  PageFree(void*);
27770 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 65 6d  .void sqlite3Mem
27780 53 65 74 44 65 66 61 75 6c 74 28 76 6f 69 64 29  SetDefault(void)
27790 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ;.#ifndef SQLITE
277a0 5f 55 4e 54 45 53 54 41 42 4c 45 0a 76 6f 69 64  _UNTESTABLE.void
277b0 20 73 71 6c 69 74 65 33 42 65 6e 69 67 6e 4d 61   sqlite3BenignMa
277c0 6c 6c 6f 63 48 6f 6f 6b 73 28 76 6f 69 64 20 28  llocHooks(void (
277d0 2a 29 28 76 6f 69 64 29 2c 20 76 6f 69 64 20 28  *)(void), void (
277e0 2a 29 28 76 6f 69 64 29 29 3b 0a 23 65 6e 64 69  *)(void));.#endi
277f0 66 0a 69 6e 74 20 73 71 6c 69 74 65 33 48 65 61  f.int sqlite3Hea
27800 70 4e 65 61 72 6c 79 46 75 6c 6c 28 76 6f 69 64  pNearlyFull(void
27810 29 3b 0a 0a 2f 2a 0a 2a 2a 20 4f 6e 20 73 79 73  );../*.** On sys
27820 74 65 6d 73 20 77 69 74 68 20 61 6d 70 6c 65 20  tems with ample 
27830 73 74 61 63 6b 20 73 70 61 63 65 20 61 6e 64 20  stack space and 
27840 74 68 61 74 20 73 75 70 70 6f 72 74 20 61 6c 6c  that support all
27850 6f 63 61 28 29 2c 20 6d 61 6b 65 0a 2a 2a 20 75  oca(), make.** u
27860 73 65 20 6f 66 20 61 6c 6c 6f 63 61 28 29 20 74  se of alloca() t
27870 6f 20 6f 62 74 61 69 6e 20 73 70 61 63 65 20 66  o obtain space f
27880 6f 72 20 6c 61 72 67 65 20 61 75 74 6f 6d 61 74  or large automat
27890 69 63 20 6f 62 6a 65 63 74 73 2e 20 20 42 79 20  ic objects.  By 
278a0 64 65 66 61 75 6c 74 2c 0a 2a 2a 20 6f 62 74 61  default,.** obta
278b0 69 6e 20 73 70 61 63 65 20 66 72 6f 6d 20 6d 61  in space from ma
278c0 6c 6c 6f 63 28 29 2e 0a 2a 2a 0a 2a 2a 20 54 68  lloc()..**.** Th
278d0 65 20 61 6c 6c 6f 63 61 28 29 20 72 6f 75 74 69  e alloca() routi
278e0 6e 65 20 6e 65 76 65 72 20 72 65 74 75 72 6e 73  ne never returns
278f0 20 4e 55 4c 4c 2e 20 20 54 68 69 73 20 77 69 6c   NULL.  This wil
27900 6c 20 63 61 75 73 65 20 63 6f 64 65 20 70 61 74  l cause code pat
27910 68 73 0a 2a 2a 20 74 68 61 74 20 64 65 61 6c 20  hs.** that deal 
27920 77 69 74 68 20 73 71 6c 69 74 65 33 53 74 61 63  with sqlite3Stac
27930 6b 41 6c 6c 6f 63 28 29 20 66 61 69 6c 75 72 65  kAlloc() failure
27940 73 20 74 6f 20 62 65 20 75 6e 72 65 61 63 68 61  s to be unreacha
27950 62 6c 65 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53  ble..*/.#ifdef S
27960 51 4c 49 54 45 5f 55 53 45 5f 41 4c 4c 4f 43 41  QLITE_USE_ALLOCA
27970 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
27980 33 53 74 61 63 6b 41 6c 6c 6f 63 52 61 77 28 44  3StackAllocRaw(D
27990 2c 4e 29 20 20 20 61 6c 6c 6f 63 61 28 4e 29 0a  ,N)   alloca(N).
279a0 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
279b0 53 74 61 63 6b 41 6c 6c 6f 63 5a 65 72 6f 28 44  StackAllocZero(D
279c0 2c 4e 29 20 20 6d 65 6d 73 65 74 28 61 6c 6c 6f  ,N)  memset(allo
279d0 63 61 28 4e 29 2c 20 30 2c 20 4e 29 0a 23 20 64  ca(N), 0, N).# d
279e0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74 61  efine sqlite3Sta
279f0 63 6b 46 72 65 65 28 44 2c 50 29 0a 23 65 6c 73  ckFree(D,P).#els
27a00 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  e.# define sqlit
27a10 65 33 53 74 61 63 6b 41 6c 6c 6f 63 52 61 77 28  e3StackAllocRaw(
27a20 44 2c 4e 29 20 20 20 73 71 6c 69 74 65 33 44 62  D,N)   sqlite3Db
27a30 4d 61 6c 6c 6f 63 52 61 77 28 44 2c 4e 29 0a 23  MallocRaw(D,N).#
27a40 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53   define sqlite3S
27a50 74 61 63 6b 41 6c 6c 6f 63 5a 65 72 6f 28 44 2c  tackAllocZero(D,
27a60 4e 29 20 20 73 71 6c 69 74 65 33 44 62 4d 61 6c  N)  sqlite3DbMal
27a70 6c 6f 63 5a 65 72 6f 28 44 2c 4e 29 0a 23 20 64  locZero(D,N).# d
27a80 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74 61  efine sqlite3Sta
27a90 63 6b 46 72 65 65 28 44 2c 50 29 20 20 20 20 20  ckFree(D,P)     
27aa0 20 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28    sqlite3DbFree(
27ab0 44 2c 50 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20  D,P).#endif../* 
27ac0 44 6f 20 6e 6f 74 20 61 6c 6c 6f 77 20 62 6f 74  Do not allow bot
27ad0 68 20 4d 45 4d 53 59 53 35 20 61 6e 64 20 4d 45  h MEMSYS5 and ME
27ae0 4d 53 59 53 33 20 74 6f 20 62 65 20 64 65 66 69  MSYS3 to be defi
27af0 6e 65 64 20 74 6f 67 65 74 68 65 72 2e 20 20 49  ned together.  I
27b00 66 20 74 68 65 79 0a 2a 2a 20 61 72 65 2c 20 64  f they.** are, d
27b10 69 73 61 62 6c 65 20 4d 45 4d 53 59 53 33 0a 2a  isable MEMSYS3.*
27b20 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
27b30 45 4e 41 42 4c 45 5f 4d 45 4d 53 59 53 35 0a 63  ENABLE_MEMSYS5.c
27b40 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d 65 6d  onst sqlite3_mem
27b50 5f 6d 65 74 68 6f 64 73 20 2a 73 71 6c 69 74 65  _methods *sqlite
27b60 33 4d 65 6d 47 65 74 4d 65 6d 73 79 73 35 28 76  3MemGetMemsys5(v
27b70 6f 69 64 29 3b 0a 23 75 6e 64 65 66 20 53 51 4c  oid);.#undef SQL
27b80 49 54 45 5f 45 4e 41 42 4c 45 5f 4d 45 4d 53 59  ITE_ENABLE_MEMSY
27b90 53 33 0a 23 65 6e 64 69 66 0a 23 69 66 64 65 66  S3.#endif.#ifdef
27ba0 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4d   SQLITE_ENABLE_M
27bb0 45 4d 53 59 53 33 0a 63 6f 6e 73 74 20 73 71 6c  EMSYS3.const sql
27bc0 69 74 65 33 5f 6d 65 6d 5f 6d 65 74 68 6f 64 73  ite3_mem_methods
27bd0 20 2a 73 71 6c 69 74 65 33 4d 65 6d 47 65 74 4d   *sqlite3MemGetM
27be0 65 6d 73 79 73 33 28 76 6f 69 64 29 3b 0a 23 65  emsys3(void);.#e
27bf0 6e 64 69 66 0a 0a 0a 23 69 66 6e 64 65 66 20 53  ndif...#ifndef S
27c00 51 4c 49 54 45 5f 4d 55 54 45 58 5f 4f 4d 49 54  QLITE_MUTEX_OMIT
27c10 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78  .  sqlite3_mutex
27c20 5f 6d 65 74 68 6f 64 73 20 63 6f 6e 73 74 20 2a  _methods const *
27c30 73 71 6c 69 74 65 33 44 65 66 61 75 6c 74 4d 75  sqlite3DefaultMu
27c40 74 65 78 28 76 6f 69 64 29 3b 0a 20 20 73 71 6c  tex(void);.  sql
27c50 69 74 65 33 5f 6d 75 74 65 78 5f 6d 65 74 68 6f  ite3_mutex_metho
27c60 64 73 20 63 6f 6e 73 74 20 2a 73 71 6c 69 74 65  ds const *sqlite
27c70 33 4e 6f 6f 70 4d 75 74 65 78 28 76 6f 69 64 29  3NoopMutex(void)
27c80 3b 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65  ;.  sqlite3_mute
27c90 78 20 2a 73 71 6c 69 74 65 33 4d 75 74 65 78 41  x *sqlite3MutexA
27ca0 6c 6c 6f 63 28 69 6e 74 29 3b 0a 20 20 69 6e 74  lloc(int);.  int
27cb0 20 73 71 6c 69 74 65 33 4d 75 74 65 78 49 6e 69   sqlite3MutexIni
27cc0 74 28 76 6f 69 64 29 3b 0a 20 20 69 6e 74 20 73  t(void);.  int s
27cd0 71 6c 69 74 65 33 4d 75 74 65 78 45 6e 64 28 76  qlite3MutexEnd(v
27ce0 6f 69 64 29 3b 0a 23 65 6e 64 69 66 0a 23 69 66  oid);.#endif.#if
27cf0 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
27d00 5f 4d 55 54 45 58 5f 4f 4d 49 54 29 20 26 26 20  _MUTEX_OMIT) && 
27d10 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
27d20 4d 55 54 45 58 5f 4e 4f 4f 50 29 0a 20 20 76 6f  MUTEX_NOOP).  vo
27d30 69 64 20 73 71 6c 69 74 65 33 4d 65 6d 6f 72 79  id sqlite3Memory
27d40 42 61 72 72 69 65 72 28 76 6f 69 64 29 3b 0a 23  Barrier(void);.#
27d50 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71  else.# define sq
27d60 6c 69 74 65 33 4d 65 6d 6f 72 79 42 61 72 72 69  lite3MemoryBarri
27d70 65 72 28 29 0a 23 65 6e 64 69 66 0a 0a 73 71 6c  er().#endif..sql
27d80 69 74 65 33 5f 69 6e 74 36 34 20 73 71 6c 69 74  ite3_int64 sqlit
27d90 65 33 53 74 61 74 75 73 56 61 6c 75 65 28 69 6e  e3StatusValue(in
27da0 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
27db0 53 74 61 74 75 73 55 70 28 69 6e 74 2c 20 69 6e  StatusUp(int, in
27dc0 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
27dd0 53 74 61 74 75 73 44 6f 77 6e 28 69 6e 74 2c 20  StatusDown(int, 
27de0 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
27df0 65 33 53 74 61 74 75 73 48 69 67 68 77 61 74 65  e3StatusHighwate
27e00 72 28 69 6e 74 2c 20 69 6e 74 29 3b 0a 69 6e 74  r(int, int);.int
27e10 20 73 71 6c 69 74 65 33 4c 6f 6f 6b 61 73 69 64   sqlite3Lookasid
27e20 65 55 73 65 64 28 73 71 6c 69 74 65 33 2a 2c 69  eUsed(sqlite3*,i
27e30 6e 74 2a 29 3b 0a 0a 2f 2a 20 41 63 63 65 73 73  nt*);../* Access
27e40 20 74 6f 20 6d 75 74 65 78 65 73 20 75 73 65 64   to mutexes used
27e50 20 62 79 20 73 71 6c 69 74 65 33 5f 73 74 61 74   by sqlite3_stat
27e60 75 73 28 29 20 2a 2f 0a 73 71 6c 69 74 65 33 5f  us() */.sqlite3_
27e70 6d 75 74 65 78 20 2a 73 71 6c 69 74 65 33 50 63  mutex *sqlite3Pc
27e80 61 63 68 65 31 4d 75 74 65 78 28 76 6f 69 64 29  ache1Mutex(void)
27e90 3b 0a 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 20  ;.sqlite3_mutex 
27ea0 2a 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 4d 75  *sqlite3MallocMu
27eb0 74 65 78 28 76 6f 69 64 29 3b 0a 0a 23 69 66 20  tex(void);..#if 
27ec0 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45  defined(SQLITE_E
27ed0 4e 41 42 4c 45 5f 4d 55 4c 54 49 54 48 52 45 41  NABLE_MULTITHREA
27ee0 44 45 44 5f 43 48 45 43 4b 53 29 20 26 26 20 21  DED_CHECKS) && !
27ef0 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4d  defined(SQLITE_M
27f00 55 54 45 58 5f 4f 4d 49 54 29 0a 76 6f 69 64 20  UTEX_OMIT).void 
27f10 73 71 6c 69 74 65 33 4d 75 74 65 78 57 61 72 6e  sqlite3MutexWarn
27f20 4f 6e 43 6f 6e 74 65 6e 74 69 6f 6e 28 73 71 6c  OnContention(sql
27f30 69 74 65 33 5f 6d 75 74 65 78 2a 29 3b 0a 23 65  ite3_mutex*);.#e
27f40 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  lse.# define sql
27f50 69 74 65 33 4d 75 74 65 78 57 61 72 6e 4f 6e 43  ite3MutexWarnOnC
27f60 6f 6e 74 65 6e 74 69 6f 6e 28 78 29 0a 23 65 6e  ontention(x).#en
27f70 64 69 66 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c  dif..#ifndef SQL
27f80 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e  ITE_OMIT_FLOATIN
27f90 47 5f 50 4f 49 4e 54 0a 20 20 69 6e 74 20 73 71  G_POINT.  int sq
27fa0 6c 69 74 65 33 49 73 4e 61 4e 28 64 6f 75 62 6c  lite3IsNaN(doubl
27fb0 65 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69  e);.#else.# defi
27fc0 6e 65 20 73 71 6c 69 74 65 33 49 73 4e 61 4e 28  ne sqlite3IsNaN(
27fd0 58 29 20 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a  X)  0.#endif../*
27fe0 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20  .** An instance 
27ff0 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  of the following
28000 20 73 74 72 75 63 74 75 72 65 20 68 6f 6c 64 73   structure holds
28010 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f   information abo
28020 75 74 20 53 51 4c 0a 2a 2a 20 66 75 6e 63 74 69  ut SQL.** functi
28030 6f 6e 73 20 61 72 67 75 6d 65 6e 74 73 20 74 68  ons arguments th
28040 61 74 20 61 72 65 20 74 68 65 20 70 61 72 61 6d  at are the param
28050 65 74 65 72 73 20 74 6f 20 74 68 65 20 70 72 69  eters to the pri
28060 6e 74 66 28 29 20 66 75 6e 63 74 69 6f 6e 2e 0a  ntf() function..
28070 2a 2f 0a 73 74 72 75 63 74 20 50 72 69 6e 74 66  */.struct Printf
28080 41 72 67 75 6d 65 6e 74 73 20 7b 0a 20 20 69 6e  Arguments {.  in
28090 74 20 6e 41 72 67 3b 20 20 20 20 20 20 20 20 20  t nArg;         
280a0 20 20 20 20 20 20 20 2f 2a 20 54 6f 74 61 6c 20         /* Total 
280b0 6e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65  number of argume
280c0 6e 74 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 55 73  nts */.  int nUs
280d0 65 64 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ed;             
280e0 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61    /* Number of a
280f0 72 67 75 6d 65 6e 74 73 20 75 73 65 64 20 73 6f  rguments used so
28100 20 66 61 72 20 2a 2f 0a 20 20 73 71 6c 69 74 65   far */.  sqlite
28110 33 5f 76 61 6c 75 65 20 2a 2a 61 70 41 72 67 3b  3_value **apArg;
28120 20 20 20 2f 2a 20 54 68 65 20 61 72 67 75 6d 65     /* The argume
28130 6e 74 20 76 61 6c 75 65 73 20 2a 2f 0a 7d 3b 0a  nt values */.};.
28140 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33 4d 50  .char *sqlite3MP
28150 72 69 6e 74 66 28 73 71 6c 69 74 65 33 2a 2c 63  rintf(sqlite3*,c
28160 6f 6e 73 74 20 63 68 61 72 2a 2c 20 2e 2e 2e 29  onst char*, ...)
28170 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33 56  ;.char *sqlite3V
28180 4d 50 72 69 6e 74 66 28 73 71 6c 69 74 65 33 2a  MPrintf(sqlite3*
28190 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 76 61  ,const char*, va
281a0 5f 6c 69 73 74 29 3b 0a 23 69 66 20 64 65 66 69  _list);.#if defi
281b0 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47  ned(SQLITE_DEBUG
281c0 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 53 51 4c  ) || defined(SQL
281d0 49 54 45 5f 48 41 56 45 5f 4f 53 5f 54 52 41 43  ITE_HAVE_OS_TRAC
281e0 45 29 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  E).  void sqlite
281f0 33 44 65 62 75 67 50 72 69 6e 74 66 28 63 6f 6e  3DebugPrintf(con
28200 73 74 20 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a  st char*, ...);.
28210 23 65 6e 64 69 66 0a 23 69 66 20 64 65 66 69 6e  #endif.#if defin
28220 65 64 28 53 51 4c 49 54 45 5f 54 45 53 54 29 0a  ed(SQLITE_TEST).
28230 20 20 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 54    void *sqlite3T
28240 65 73 74 54 65 78 74 54 6f 50 74 72 28 63 6f 6e  estTextToPtr(con
28250 73 74 20 63 68 61 72 2a 29 3b 0a 23 65 6e 64 69  st char*);.#endi
28260 66 0a 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53  f..#if defined(S
28270 51 4c 49 54 45 5f 44 45 42 55 47 29 0a 20 20 76  QLITE_DEBUG).  v
28280 6f 69 64 20 73 71 6c 69 74 65 33 54 72 65 65 56  oid sqlite3TreeV
28290 69 65 77 45 78 70 72 28 54 72 65 65 56 69 65 77  iewExpr(TreeView
282a0 2a 2c 20 63 6f 6e 73 74 20 45 78 70 72 2a 2c 20  *, const Expr*, 
282b0 75 38 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69  u8);.  void sqli
282c0 74 65 33 54 72 65 65 56 69 65 77 42 61 72 65 45  te3TreeViewBareE
282d0 78 70 72 4c 69 73 74 28 54 72 65 65 56 69 65 77  xprList(TreeView
282e0 2a 2c 20 63 6f 6e 73 74 20 45 78 70 72 4c 69 73  *, const ExprLis
282f0 74 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29  t*, const char*)
28300 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
28310 54 72 65 65 56 69 65 77 45 78 70 72 4c 69 73 74  TreeViewExprList
28320 28 54 72 65 65 56 69 65 77 2a 2c 20 63 6f 6e 73  (TreeView*, cons
28330 74 20 45 78 70 72 4c 69 73 74 2a 2c 20 75 38 2c  t ExprList*, u8,
28340 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20   const char*);. 
28350 20 76 6f 69 64 20 73 71 6c 69 74 65 33 54 72 65   void sqlite3Tre
28360 65 56 69 65 77 53 65 6c 65 63 74 28 54 72 65 65  eViewSelect(Tree
28370 56 69 65 77 2a 2c 20 63 6f 6e 73 74 20 53 65 6c  View*, const Sel
28380 65 63 74 2a 2c 20 75 38 29 3b 0a 20 20 76 6f 69  ect*, u8);.  voi
28390 64 20 73 71 6c 69 74 65 33 54 72 65 65 56 69 65  d sqlite3TreeVie
283a0 77 57 69 74 68 28 54 72 65 65 56 69 65 77 2a 2c  wWith(TreeView*,
283b0 20 63 6f 6e 73 74 20 57 69 74 68 2a 2c 20 75 38   const With*, u8
283c0 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  );.#ifndef SQLIT
283d0 45 5f 4f 4d 49 54 5f 57 49 4e 44 4f 57 46 55 4e  E_OMIT_WINDOWFUN
283e0 43 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  C.  void sqlite3
283f0 54 72 65 65 56 69 65 77 57 69 6e 64 6f 77 28 54  TreeViewWindow(T
28400 72 65 65 56 69 65 77 2a 2c 20 63 6f 6e 73 74 20  reeView*, const 
28410 57 69 6e 64 6f 77 2a 2c 20 75 38 29 3b 0a 20 20  Window*, u8);.  
28420 76 6f 69 64 20 73 71 6c 69 74 65 33 54 72 65 65  void sqlite3Tree
28430 56 69 65 77 57 69 6e 46 75 6e 63 28 54 72 65 65  ViewWinFunc(Tree
28440 56 69 65 77 2a 2c 20 63 6f 6e 73 74 20 57 69 6e  View*, const Win
28450 64 6f 77 2a 2c 20 75 38 29 3b 0a 23 65 6e 64 69  dow*, u8);.#endi
28460 66 0a 23 65 6e 64 69 66 0a 0a 0a 76 6f 69 64 20  f.#endif...void 
28470 73 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67  sqlite3SetString
28480 28 63 68 61 72 20 2a 2a 2c 20 73 71 6c 69 74 65  (char **, sqlite
28490 33 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29  3*, const char*)
284a0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 72  ;.void sqlite3Er
284b0 72 6f 72 4d 73 67 28 50 61 72 73 65 2a 2c 20 63  rorMsg(Parse*, c
284c0 6f 6e 73 74 20 63 68 61 72 2a 2c 20 2e 2e 2e 29  onst char*, ...)
284d0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65  ;.void sqlite3De
284e0 71 75 6f 74 65 28 63 68 61 72 2a 29 3b 0a 76 6f  quote(char*);.vo
284f0 69 64 20 73 71 6c 69 74 65 33 54 6f 6b 65 6e 49  id sqlite3TokenI
28500 6e 69 74 28 54 6f 6b 65 6e 2a 2c 63 68 61 72 2a  nit(Token*,char*
28510 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4b 65  );.int sqlite3Ke
28520 79 77 6f 72 64 43 6f 64 65 28 63 6f 6e 73 74 20  ywordCode(const 
28530 75 6e 73 69 67 6e 65 64 20 63 68 61 72 2a 2c 20  unsigned char*, 
28540 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  int);.int sqlite
28550 33 52 75 6e 50 61 72 73 65 72 28 50 61 72 73 65  3RunParser(Parse
28560 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  *, const char*, 
28570 63 68 61 72 20 2a 2a 29 3b 0a 76 6f 69 64 20 73  char **);.void s
28580 71 6c 69 74 65 33 46 69 6e 69 73 68 43 6f 64 69  qlite3FinishCodi
28590 6e 67 28 50 61 72 73 65 2a 29 3b 0a 69 6e 74 20  ng(Parse*);.int 
285a0 73 71 6c 69 74 65 33 47 65 74 54 65 6d 70 52 65  sqlite3GetTempRe
285b0 67 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20  g(Parse*);.void 
285c0 73 71 6c 69 74 65 33 52 65 6c 65 61 73 65 54 65  sqlite3ReleaseTe
285d0 6d 70 52 65 67 28 50 61 72 73 65 2a 2c 69 6e 74  mpReg(Parse*,int
285e0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 47 65  );.int sqlite3Ge
285f0 74 54 65 6d 70 52 61 6e 67 65 28 50 61 72 73 65  tTempRange(Parse
28600 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  *,int);.void sql
28610 69 74 65 33 52 65 6c 65 61 73 65 54 65 6d 70 52  ite3ReleaseTempR
28620 61 6e 67 65 28 50 61 72 73 65 2a 2c 69 6e 74 2c  ange(Parse*,int,
28630 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
28640 65 33 43 6c 65 61 72 54 65 6d 70 52 65 67 43 61  e3ClearTempRegCa
28650 63 68 65 28 50 61 72 73 65 2a 29 3b 0a 23 69 66  che(Parse*);.#if
28660 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47  def SQLITE_DEBUG
28670 0a 69 6e 74 20 73 71 6c 69 74 65 33 4e 6f 54 65  .int sqlite3NoTe
28680 6d 70 73 49 6e 52 61 6e 67 65 28 50 61 72 73 65  mpsInRange(Parse
28690 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a 23 65 6e 64  *,int,int);.#end
286a0 69 66 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33  if.Expr *sqlite3
286b0 45 78 70 72 41 6c 6c 6f 63 28 73 71 6c 69 74 65  ExprAlloc(sqlite
286c0 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 54 6f 6b  3*,int,const Tok
286d0 65 6e 2a 2c 69 6e 74 29 3b 0a 45 78 70 72 20 2a  en*,int);.Expr *
286e0 73 71 6c 69 74 65 33 45 78 70 72 28 73 71 6c 69  sqlite3Expr(sqli
286f0 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63  te3*,int,const c
28700 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  har*);.void sqli
28710 74 65 33 45 78 70 72 41 74 74 61 63 68 53 75 62  te3ExprAttachSub
28720 74 72 65 65 73 28 73 71 6c 69 74 65 33 2a 2c 45  trees(sqlite3*,E
28730 78 70 72 2a 2c 45 78 70 72 2a 2c 45 78 70 72 2a  xpr*,Expr*,Expr*
28740 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33  );.Expr *sqlite3
28750 50 45 78 70 72 28 50 61 72 73 65 2a 2c 20 69 6e  PExpr(Parse*, in
28760 74 2c 20 45 78 70 72 2a 2c 20 45 78 70 72 2a 29  t, Expr*, Expr*)
28770 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50 45  ;.void sqlite3PE
28780 78 70 72 41 64 64 53 65 6c 65 63 74 28 50 61 72  xprAddSelect(Par
28790 73 65 2a 2c 20 45 78 70 72 2a 2c 20 53 65 6c 65  se*, Expr*, Sele
287a0 63 74 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69  ct*);.Expr *sqli
287b0 74 65 33 45 78 70 72 41 6e 64 28 73 71 6c 69 74  te3ExprAnd(sqlit
287c0 65 33 2a 2c 45 78 70 72 2a 2c 20 45 78 70 72 2a  e3*,Expr*, Expr*
287d0 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33  );.Expr *sqlite3
287e0 45 78 70 72 46 75 6e 63 74 69 6f 6e 28 50 61 72  ExprFunction(Par
287f0 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 20 54  se*,ExprList*, T
28800 6f 6b 65 6e 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69  oken*, int);.voi
28810 64 20 73 71 6c 69 74 65 33 45 78 70 72 41 73 73  d sqlite3ExprAss
28820 69 67 6e 56 61 72 4e 75 6d 62 65 72 28 50 61 72  ignVarNumber(Par
28830 73 65 2a 2c 20 45 78 70 72 2a 2c 20 75 33 32 29  se*, Expr*, u32)
28840 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
28850 70 72 44 65 6c 65 74 65 28 73 71 6c 69 74 65 33  prDelete(sqlite3
28860 2a 2c 20 45 78 70 72 2a 29 3b 0a 45 78 70 72 4c  *, Expr*);.ExprL
28870 69 73 74 20 2a 73 71 6c 69 74 65 33 45 78 70 72  ist *sqlite3Expr
28880 4c 69 73 74 41 70 70 65 6e 64 28 50 61 72 73 65  ListAppend(Parse
28890 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 45 78 70 72  *,ExprList*,Expr
288a0 2a 29 3b 0a 45 78 70 72 4c 69 73 74 20 2a 73 71  *);.ExprList *sq
288b0 6c 69 74 65 33 45 78 70 72 4c 69 73 74 41 70 70  lite3ExprListApp
288c0 65 6e 64 56 65 63 74 6f 72 28 50 61 72 73 65 2a  endVector(Parse*
288d0 2c 45 78 70 72 4c 69 73 74 2a 2c 49 64 4c 69 73  ,ExprList*,IdLis
288e0 74 2a 2c 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20  t*,Expr*);.void 
288f0 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74 53  sqlite3ExprListS
28900 65 74 53 6f 72 74 4f 72 64 65 72 28 45 78 70 72  etSortOrder(Expr
28910 4c 69 73 74 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64  List*,int);.void
28920 20 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74   sqlite3ExprList
28930 53 65 74 4e 61 6d 65 28 50 61 72 73 65 2a 2c 45  SetName(Parse*,E
28940 78 70 72 4c 69 73 74 2a 2c 54 6f 6b 65 6e 2a 2c  xprList*,Token*,
28950 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
28960 65 33 45 78 70 72 4c 69 73 74 53 65 74 53 70 61  e3ExprListSetSpa
28970 6e 28 50 61 72 73 65 2a 2c 45 78 70 72 4c 69 73  n(Parse*,ExprLis
28980 74 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63  t*,const char*,c
28990 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69  onst char*);.voi
289a0 64 20 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73  d sqlite3ExprLis
289b0 74 44 65 6c 65 74 65 28 73 71 6c 69 74 65 33 2a  tDelete(sqlite3*
289c0 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a 75 33  , ExprList*);.u3
289d0 32 20 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73  2 sqlite3ExprLis
289e0 74 46 6c 61 67 73 28 63 6f 6e 73 74 20 45 78 70  tFlags(const Exp
289f0 72 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c  rList*);.int sql
28a00 69 74 65 33 49 6e 69 74 28 73 71 6c 69 74 65 33  ite3Init(sqlite3
28a10 2a 2c 20 63 68 61 72 2a 2a 29 3b 0a 69 6e 74 20  *, char**);.int 
28a20 73 71 6c 69 74 65 33 49 6e 69 74 43 61 6c 6c 62  sqlite3InitCallb
28a30 61 63 6b 28 76 6f 69 64 2a 2c 20 69 6e 74 2c 20  ack(void*, int, 
28a40 63 68 61 72 2a 2a 2c 20 63 68 61 72 2a 2a 29 3b  char**, char**);
28a50 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 6e 69 74  .int sqlite3Init
28a60 4f 6e 65 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e  One(sqlite3*, in
28a70 74 2c 20 63 68 61 72 2a 2a 29 3b 0a 76 6f 69 64  t, char**);.void
28a80 20 73 71 6c 69 74 65 33 50 72 61 67 6d 61 28 50   sqlite3Pragma(P
28a90 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b  arse*,Token*,Tok
28aa0 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 69 6e 74 29 3b  en*,Token*,int);
28ab0 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
28ac0 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
28ad0 45 0a 4d 6f 64 75 6c 65 20 2a 73 71 6c 69 74 65  E.Module *sqlite
28ae0 33 50 72 61 67 6d 61 56 74 61 62 52 65 67 69 73  3PragmaVtabRegis
28af0 74 65 72 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e  ter(sqlite3*,con
28b00 73 74 20 63 68 61 72 20 2a 7a 4e 61 6d 65 29 3b  st char *zName);
28b10 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c  .#endif.void sql
28b20 69 74 65 33 52 65 73 65 74 41 6c 6c 53 63 68 65  ite3ResetAllSche
28b30 6d 61 73 4f 66 43 6f 6e 6e 65 63 74 69 6f 6e 28  masOfConnection(
28b40 73 71 6c 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20  sqlite3*);.void 
28b50 73 71 6c 69 74 65 33 52 65 73 65 74 4f 6e 65 53  sqlite3ResetOneS
28b60 63 68 65 6d 61 28 73 71 6c 69 74 65 33 2a 2c 69  chema(sqlite3*,i
28b70 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
28b80 33 43 6f 6c 6c 61 70 73 65 44 61 74 61 62 61 73  3CollapseDatabas
28b90 65 41 72 72 61 79 28 73 71 6c 69 74 65 33 2a 29  eArray(sqlite3*)
28ba0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f  ;.void sqlite3Co
28bb0 6d 6d 69 74 49 6e 74 65 72 6e 61 6c 43 68 61 6e  mmitInternalChan
28bc0 67 65 73 28 73 71 6c 69 74 65 33 2a 29 3b 0a 76  ges(sqlite3*);.v
28bd0 6f 69 64 20 73 71 6c 69 74 65 33 44 65 6c 65 74  oid sqlite3Delet
28be0 65 43 6f 6c 75 6d 6e 4e 61 6d 65 73 28 73 71 6c  eColumnNames(sql
28bf0 69 74 65 33 2a 2c 54 61 62 6c 65 2a 29 3b 0a 69  ite3*,Table*);.i
28c00 6e 74 20 73 71 6c 69 74 65 33 43 6f 6c 75 6d 6e  nt sqlite3Column
28c10 73 46 72 6f 6d 45 78 70 72 4c 69 73 74 28 50 61  sFromExprList(Pa
28c20 72 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 69  rse*,ExprList*,i
28c30 31 36 2a 2c 43 6f 6c 75 6d 6e 2a 2a 29 3b 0a 76  16*,Column**);.v
28c40 6f 69 64 20 73 71 6c 69 74 65 33 53 65 6c 65 63  oid sqlite3Selec
28c50 74 41 64 64 43 6f 6c 75 6d 6e 54 79 70 65 41 6e  tAddColumnTypeAn
28c60 64 43 6f 6c 6c 61 74 69 6f 6e 28 50 61 72 73 65  dCollation(Parse
28c70 2a 2c 54 61 62 6c 65 2a 2c 53 65 6c 65 63 74 2a  *,Table*,Select*
28c80 29 3b 0a 54 61 62 6c 65 20 2a 73 71 6c 69 74 65  );.Table *sqlite
28c90 33 52 65 73 75 6c 74 53 65 74 4f 66 53 65 6c 65  3ResultSetOfSele
28ca0 63 74 28 50 61 72 73 65 2a 2c 53 65 6c 65 63 74  ct(Parse*,Select
28cb0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
28cc0 4f 70 65 6e 4d 61 73 74 65 72 54 61 62 6c 65 28  OpenMasterTable(
28cd0 50 61 72 73 65 20 2a 2c 20 69 6e 74 29 3b 0a 49  Parse *, int);.I
28ce0 6e 64 65 78 20 2a 73 71 6c 69 74 65 33 50 72 69  ndex *sqlite3Pri
28cf0 6d 61 72 79 4b 65 79 49 6e 64 65 78 28 54 61 62  maryKeyIndex(Tab
28d00 6c 65 2a 29 3b 0a 69 31 36 20 73 71 6c 69 74 65  le*);.i16 sqlite
28d10 33 43 6f 6c 75 6d 6e 4f 66 49 6e 64 65 78 28 49  3ColumnOfIndex(I
28d20 6e 64 65 78 2a 2c 20 69 31 36 29 3b 0a 76 6f 69  ndex*, i16);.voi
28d30 64 20 73 71 6c 69 74 65 33 53 74 61 72 74 54 61  d sqlite3StartTa
28d40 62 6c 65 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e  ble(Parse*,Token
28d50 2a 2c 54 6f 6b 65 6e 2a 2c 69 6e 74 2c 69 6e 74  *,Token*,int,int
28d60 2c 69 6e 74 2c 69 6e 74 29 3b 0a 23 69 66 20 53  ,int,int);.#if S
28d70 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 48 49 44  QLITE_ENABLE_HID
28d80 44 45 4e 5f 43 4f 4c 55 4d 4e 53 0a 20 20 76 6f  DEN_COLUMNS.  vo
28d90 69 64 20 73 71 6c 69 74 65 33 43 6f 6c 75 6d 6e  id sqlite3Column
28da0 50 72 6f 70 65 72 74 69 65 73 46 72 6f 6d 4e 61  PropertiesFromNa
28db0 6d 65 28 54 61 62 6c 65 2a 2c 20 43 6f 6c 75 6d  me(Table*, Colum
28dc0 6e 2a 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66  n*);.#else.# def
28dd0 69 6e 65 20 73 71 6c 69 74 65 33 43 6f 6c 75 6d  ine sqlite3Colum
28de0 6e 50 72 6f 70 65 72 74 69 65 73 46 72 6f 6d 4e  nPropertiesFromN
28df0 61 6d 65 28 54 2c 43 29 20 2f 2a 20 6e 6f 2d 6f  ame(T,C) /* no-o
28e00 70 20 2a 2f 0a 23 65 6e 64 69 66 0a 76 6f 69 64  p */.#endif.void
28e10 20 73 71 6c 69 74 65 33 41 64 64 43 6f 6c 75 6d   sqlite3AddColum
28e20 6e 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c  n(Parse*,Token*,
28e30 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71  Token*);.void sq
28e40 6c 69 74 65 33 41 64 64 4e 6f 74 4e 75 6c 6c 28  lite3AddNotNull(
28e50 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 76 6f  Parse*, int);.vo
28e60 69 64 20 73 71 6c 69 74 65 33 41 64 64 50 72 69  id sqlite3AddPri
28e70 6d 61 72 79 4b 65 79 28 50 61 72 73 65 2a 2c 20  maryKey(Parse*, 
28e80 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74 2c 20  ExprList*, int, 
28e90 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  int, int);.void 
28ea0 73 71 6c 69 74 65 33 41 64 64 43 68 65 63 6b 43  sqlite3AddCheckC
28eb0 6f 6e 73 74 72 61 69 6e 74 28 50 61 72 73 65 2a  onstraint(Parse*
28ec0 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73  , Expr*);.void s
28ed0 71 6c 69 74 65 33 41 64 64 44 65 66 61 75 6c 74  qlite3AddDefault
28ee0 56 61 6c 75 65 28 50 61 72 73 65 2a 2c 45 78 70  Value(Parse*,Exp
28ef0 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63  r*,const char*,c
28f00 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69  onst char*);.voi
28f10 64 20 73 71 6c 69 74 65 33 41 64 64 43 6f 6c 6c  d sqlite3AddColl
28f20 61 74 65 54 79 70 65 28 50 61 72 73 65 2a 2c 20  ateType(Parse*, 
28f30 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71  Token*);.void sq
28f40 6c 69 74 65 33 45 6e 64 54 61 62 6c 65 28 50 61  lite3EndTable(Pa
28f50 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65  rse*,Token*,Toke
28f60 6e 2a 2c 75 38 2c 53 65 6c 65 63 74 2a 29 3b 0a  n*,u8,Select*);.
28f70 69 6e 74 20 73 71 6c 69 74 65 33 50 61 72 73 65  int sqlite3Parse
28f80 55 72 69 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c  Uri(const char*,
28f90 63 6f 6e 73 74 20 63 68 61 72 2a 2c 75 6e 73 69  const char*,unsi
28fa0 67 6e 65 64 20 69 6e 74 2a 2c 0a 20 20 20 20 20  gned int*,.     
28fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
28fc0 71 6c 69 74 65 33 5f 76 66 73 2a 2a 2c 63 68 61  qlite3_vfs**,cha
28fd0 72 2a 2a 2c 63 68 61 72 20 2a 2a 29 3b 0a 42 74  r**,char **);.Bt
28fe0 72 65 65 20 2a 73 71 6c 69 74 65 33 44 62 4e 61  ree *sqlite3DbNa
28ff0 6d 65 54 6f 42 74 72 65 65 28 73 71 6c 69 74 65  meToBtree(sqlite
29000 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  3*,const char*);
29010 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ..#ifdef SQLITE_
29020 55 4e 54 45 53 54 41 42 4c 45 0a 23 20 64 65 66  UNTESTABLE.# def
29030 69 6e 65 20 73 71 6c 69 74 65 33 46 61 75 6c 74  ine sqlite3Fault
29040 53 69 6d 28 58 29 20 53 51 4c 49 54 45 5f 4f 4b  Sim(X) SQLITE_OK
29050 0a 23 65 6c 73 65 0a 20 20 69 6e 74 20 73 71 6c  .#else.  int sql
29060 69 74 65 33 46 61 75 6c 74 53 69 6d 28 69 6e 74  ite3FaultSim(int
29070 29 3b 0a 23 65 6e 64 69 66 0a 0a 42 69 74 76 65  );.#endif..Bitve
29080 63 20 2a 73 71 6c 69 74 65 33 42 69 74 76 65 63  c *sqlite3Bitvec
29090 43 72 65 61 74 65 28 75 33 32 29 3b 0a 69 6e 74  Create(u32);.int
290a0 20 73 71 6c 69 74 65 33 42 69 74 76 65 63 54 65   sqlite3BitvecTe
290b0 73 74 28 42 69 74 76 65 63 2a 2c 20 75 33 32 29  st(Bitvec*, u32)
290c0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 42 69 74  ;.int sqlite3Bit
290d0 76 65 63 54 65 73 74 4e 6f 74 4e 75 6c 6c 28 42  vecTestNotNull(B
290e0 69 74 76 65 63 2a 2c 20 75 33 32 29 3b 0a 69 6e  itvec*, u32);.in
290f0 74 20 73 71 6c 69 74 65 33 42 69 74 76 65 63 53  t sqlite3BitvecS
29100 65 74 28 42 69 74 76 65 63 2a 2c 20 75 33 32 29  et(Bitvec*, u32)
29110 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42 69  ;.void sqlite3Bi
29120 74 76 65 63 43 6c 65 61 72 28 42 69 74 76 65 63  tvecClear(Bitvec
29130 2a 2c 20 75 33 32 2c 20 76 6f 69 64 2a 29 3b 0a  *, u32, void*);.
29140 76 6f 69 64 20 73 71 6c 69 74 65 33 42 69 74 76  void sqlite3Bitv
29150 65 63 44 65 73 74 72 6f 79 28 42 69 74 76 65 63  ecDestroy(Bitvec
29160 2a 29 3b 0a 75 33 32 20 73 71 6c 69 74 65 33 42  *);.u32 sqlite3B
29170 69 74 76 65 63 53 69 7a 65 28 42 69 74 76 65 63  itvecSize(Bitvec
29180 2a 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  *);.#ifndef SQLI
29190 54 45 5f 55 4e 54 45 53 54 41 42 4c 45 0a 69 6e  TE_UNTESTABLE.in
291a0 74 20 73 71 6c 69 74 65 33 42 69 74 76 65 63 42  t sqlite3BitvecB
291b0 75 69 6c 74 69 6e 54 65 73 74 28 69 6e 74 2c 69  uiltinTest(int,i
291c0 6e 74 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 52 6f  nt*);.#endif..Ro
291d0 77 53 65 74 20 2a 73 71 6c 69 74 65 33 52 6f 77  wSet *sqlite3Row
291e0 53 65 74 49 6e 69 74 28 73 71 6c 69 74 65 33 2a  SetInit(sqlite3*
291f0 2c 20 76 6f 69 64 2a 2c 20 75 6e 73 69 67 6e 65  , void*, unsigne
29200 64 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  d int);.void sql
29210 69 74 65 33 52 6f 77 53 65 74 43 6c 65 61 72 28  ite3RowSetClear(
29220 52 6f 77 53 65 74 2a 29 3b 0a 76 6f 69 64 20 73  RowSet*);.void s
29230 71 6c 69 74 65 33 52 6f 77 53 65 74 49 6e 73 65  qlite3RowSetInse
29240 72 74 28 52 6f 77 53 65 74 2a 2c 20 69 36 34 29  rt(RowSet*, i64)
29250 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 6f 77  ;.int sqlite3Row
29260 53 65 74 54 65 73 74 28 52 6f 77 53 65 74 2a 2c  SetTest(RowSet*,
29270 20 69 6e 74 20 69 42 61 74 63 68 2c 20 69 36 34   int iBatch, i64
29280 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 6f  );.int sqlite3Ro
29290 77 53 65 74 4e 65 78 74 28 52 6f 77 53 65 74 2a  wSetNext(RowSet*
292a0 2c 20 69 36 34 2a 29 3b 0a 0a 76 6f 69 64 20 73  , i64*);..void s
292b0 71 6c 69 74 65 33 43 72 65 61 74 65 56 69 65 77  qlite3CreateView
292c0 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54  (Parse*,Token*,T
292d0 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 45 78 70  oken*,Token*,Exp
292e0 72 4c 69 73 74 2a 2c 53 65 6c 65 63 74 2a 2c 69  rList*,Select*,i
292f0 6e 74 2c 69 6e 74 29 3b 0a 0a 23 69 66 20 21 64  nt,int);..#if !d
29300 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d  efined(SQLITE_OM
29310 49 54 5f 56 49 45 57 29 20 7c 7c 20 21 64 65 66  IT_VIEW) || !def
29320 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54  ined(SQLITE_OMIT
29330 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 29 0a 20  _VIRTUALTABLE). 
29340 20 69 6e 74 20 73 71 6c 69 74 65 33 56 69 65 77   int sqlite3View
29350 47 65 74 43 6f 6c 75 6d 6e 4e 61 6d 65 73 28 50  GetColumnNames(P
29360 61 72 73 65 2a 2c 54 61 62 6c 65 2a 29 3b 0a 23  arse*,Table*);.#
29370 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71  else.# define sq
29380 6c 69 74 65 33 56 69 65 77 47 65 74 43 6f 6c 75  lite3ViewGetColu
29390 6d 6e 4e 61 6d 65 73 28 41 2c 42 29 20 30 0a 23  mnNames(A,B) 0.#
293a0 65 6e 64 69 66 0a 0a 23 69 66 20 53 51 4c 49 54  endif..#if SQLIT
293b0 45 5f 4d 41 58 5f 41 54 54 41 43 48 45 44 3e 33  E_MAX_ATTACHED>3
293c0 30 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 44  0.  int sqlite3D
293d0 62 4d 61 73 6b 41 6c 6c 5a 65 72 6f 28 79 44 62  bMaskAllZero(yDb
293e0 4d 61 73 6b 29 3b 0a 23 65 6e 64 69 66 0a 76 6f  Mask);.#endif.vo
293f0 69 64 20 73 71 6c 69 74 65 33 44 72 6f 70 54 61  id sqlite3DropTa
29400 62 6c 65 28 50 61 72 73 65 2a 2c 20 53 72 63 4c  ble(Parse*, SrcL
29410 69 73 74 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b  ist*, int, int);
29420 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 64  .void sqlite3Cod
29430 65 44 72 6f 70 54 61 62 6c 65 28 50 61 72 73 65  eDropTable(Parse
29440 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20  *, Table*, int, 
29450 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
29460 65 33 44 65 6c 65 74 65 54 61 62 6c 65 28 73 71  e3DeleteTable(sq
29470 6c 69 74 65 33 2a 2c 20 54 61 62 6c 65 2a 29 3b  lite3*, Table*);
29480 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 46 72 65  .void sqlite3Fre
29490 65 49 6e 64 65 78 28 73 71 6c 69 74 65 33 2a 2c  eIndex(sqlite3*,
294a0 20 49 6e 64 65 78 2a 29 3b 0a 23 69 66 6e 64 65   Index*);.#ifnde
294b0 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55  f SQLITE_OMIT_AU
294c0 54 4f 49 4e 43 52 45 4d 45 4e 54 0a 20 20 76 6f  TOINCREMENT.  vo
294d0 69 64 20 73 71 6c 69 74 65 33 41 75 74 6f 69 6e  id sqlite3Autoin
294e0 63 72 65 6d 65 6e 74 42 65 67 69 6e 28 50 61 72  crementBegin(Par
294f0 73 65 20 2a 70 50 61 72 73 65 29 3b 0a 20 20 76  se *pParse);.  v
29500 6f 69 64 20 73 71 6c 69 74 65 33 41 75 74 6f 69  oid sqlite3Autoi
29510 6e 63 72 65 6d 65 6e 74 45 6e 64 28 50 61 72 73  ncrementEnd(Pars
29520 65 20 2a 70 50 61 72 73 65 29 3b 0a 23 65 6c 73  e *pParse);.#els
29530 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  e.# define sqlit
29540 65 33 41 75 74 6f 69 6e 63 72 65 6d 65 6e 74 42  e3AutoincrementB
29550 65 67 69 6e 28 58 29 0a 23 20 64 65 66 69 6e 65  egin(X).# define
29560 20 73 71 6c 69 74 65 33 41 75 74 6f 69 6e 63 72   sqlite3Autoincr
29570 65 6d 65 6e 74 45 6e 64 28 58 29 0a 23 65 6e 64  ementEnd(X).#end
29580 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 49  if.void sqlite3I
29590 6e 73 65 72 74 28 50 61 72 73 65 2a 2c 20 53 72  nsert(Parse*, Sr
295a0 63 4c 69 73 74 2a 2c 20 53 65 6c 65 63 74 2a 2c  cList*, Select*,
295b0 20 49 64 4c 69 73 74 2a 2c 20 69 6e 74 2c 20 55   IdList*, int, U
295c0 70 73 65 72 74 2a 29 3b 0a 76 6f 69 64 20 2a 73  psert*);.void *s
295d0 71 6c 69 74 65 33 41 72 72 61 79 41 6c 6c 6f 63  qlite3ArrayAlloc
295e0 61 74 65 28 73 71 6c 69 74 65 33 2a 2c 76 6f 69  ate(sqlite3*,voi
295f0 64 2a 2c 69 6e 74 2c 69 6e 74 2a 2c 69 6e 74 2a  d*,int,int*,int*
29600 29 3b 0a 49 64 4c 69 73 74 20 2a 73 71 6c 69 74  );.IdList *sqlit
29610 65 33 49 64 4c 69 73 74 41 70 70 65 6e 64 28 73  e3IdListAppend(s
29620 71 6c 69 74 65 33 2a 2c 20 49 64 4c 69 73 74 2a  qlite3*, IdList*
29630 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73  , Token*);.int s
29640 71 6c 69 74 65 33 49 64 4c 69 73 74 49 6e 64 65  qlite3IdListInde
29650 78 28 49 64 4c 69 73 74 2a 2c 63 6f 6e 73 74 20  x(IdList*,const 
29660 63 68 61 72 2a 29 3b 0a 53 72 63 4c 69 73 74 20  char*);.SrcList 
29670 2a 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74 45  *sqlite3SrcListE
29680 6e 6c 61 72 67 65 28 73 71 6c 69 74 65 33 2a 2c  nlarge(sqlite3*,
29690 20 53 72 63 4c 69 73 74 2a 2c 20 69 6e 74 2c 20   SrcList*, int, 
296a0 69 6e 74 29 3b 0a 53 72 63 4c 69 73 74 20 2a 73  int);.SrcList *s
296b0 71 6c 69 74 65 33 53 72 63 4c 69 73 74 41 70 70  qlite3SrcListApp
296c0 65 6e 64 28 73 71 6c 69 74 65 33 2a 2c 20 53 72  end(sqlite3*, Sr
296d0 63 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 2c 20  cList*, Token*, 
296e0 54 6f 6b 65 6e 2a 29 3b 0a 53 72 63 4c 69 73 74  Token*);.SrcList
296f0 20 2a 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74   *sqlite3SrcList
29700 41 70 70 65 6e 64 46 72 6f 6d 54 65 72 6d 28 50  AppendFromTerm(P
29710 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c  arse*, SrcList*,
29720 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c   Token*, Token*,
29730 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
29740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29750 20 20 20 20 20 20 20 54 6f 6b 65 6e 2a 2c 20 53         Token*, S
29760 65 6c 65 63 74 2a 2c 20 45 78 70 72 2a 2c 20 49  elect*, Expr*, I
29770 64 4c 69 73 74 2a 29 3b 0a 76 6f 69 64 20 73 71  dList*);.void sq
29780 6c 69 74 65 33 53 72 63 4c 69 73 74 49 6e 64 65  lite3SrcListInde
29790 78 65 64 42 79 28 50 61 72 73 65 20 2a 2c 20 53  xedBy(Parse *, S
297a0 72 63 4c 69 73 74 20 2a 2c 20 54 6f 6b 65 6e 20  rcList *, Token 
297b0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
297c0 53 72 63 4c 69 73 74 46 75 6e 63 41 72 67 73 28  SrcListFuncArgs(
297d0 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a  Parse*, SrcList*
297e0 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a 69 6e  , ExprList*);.in
297f0 74 20 73 71 6c 69 74 65 33 49 6e 64 65 78 65 64  t sqlite3Indexed
29800 42 79 4c 6f 6f 6b 75 70 28 50 61 72 73 65 20 2a  ByLookup(Parse *
29810 2c 20 73 74 72 75 63 74 20 53 72 63 4c 69 73 74  , struct SrcList
29820 5f 69 74 65 6d 20 2a 29 3b 0a 76 6f 69 64 20 73  _item *);.void s
29830 71 6c 69 74 65 33 53 72 63 4c 69 73 74 53 68 69  qlite3SrcListShi
29840 66 74 4a 6f 69 6e 54 79 70 65 28 53 72 63 4c 69  ftJoinType(SrcLi
29850 73 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  st*);.void sqlit
29860 65 33 53 72 63 4c 69 73 74 41 73 73 69 67 6e 43  e3SrcListAssignC
29870 75 72 73 6f 72 73 28 50 61 72 73 65 2a 2c 20 53  ursors(Parse*, S
29880 72 63 4c 69 73 74 2a 29 3b 0a 76 6f 69 64 20 73  rcList*);.void s
29890 71 6c 69 74 65 33 49 64 4c 69 73 74 44 65 6c 65  qlite3IdListDele
298a0 74 65 28 73 71 6c 69 74 65 33 2a 2c 20 49 64 4c  te(sqlite3*, IdL
298b0 69 73 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ist*);.void sqli
298c0 74 65 33 53 72 63 4c 69 73 74 44 65 6c 65 74 65  te3SrcListDelete
298d0 28 73 71 6c 69 74 65 33 2a 2c 20 53 72 63 4c 69  (sqlite3*, SrcLi
298e0 73 74 2a 29 3b 0a 49 6e 64 65 78 20 2a 73 71 6c  st*);.Index *sql
298f0 69 74 65 33 41 6c 6c 6f 63 61 74 65 49 6e 64 65  ite3AllocateInde
29900 78 4f 62 6a 65 63 74 28 73 71 6c 69 74 65 33 2a  xObject(sqlite3*
29910 2c 69 31 36 2c 69 6e 74 2c 63 68 61 72 2a 2a 29  ,i16,int,char**)
29920 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 72  ;.void sqlite3Cr
29930 65 61 74 65 49 6e 64 65 78 28 50 61 72 73 65 2a  eateIndex(Parse*
29940 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 53  ,Token*,Token*,S
29950 72 63 4c 69 73 74 2a 2c 45 78 70 72 4c 69 73 74  rcList*,ExprList
29960 2a 2c 69 6e 74 2c 54 6f 6b 65 6e 2a 2c 0a 20 20  *,int,Token*,.  
29970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29980 20 20 20 20 20 20 20 20 45 78 70 72 2a 2c 20 69          Expr*, i
29990 6e 74 2c 20 69 6e 74 2c 20 75 38 29 3b 0a 76 6f  nt, int, u8);.vo
299a0 69 64 20 73 71 6c 69 74 65 33 44 72 6f 70 49 6e  id sqlite3DropIn
299b0 64 65 78 28 50 61 72 73 65 2a 2c 20 53 72 63 4c  dex(Parse*, SrcL
299c0 69 73 74 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20  ist*, int);.int 
299d0 73 71 6c 69 74 65 33 53 65 6c 65 63 74 28 50 61  sqlite3Select(Pa
299e0 72 73 65 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 53  rse*, Select*, S
299f0 65 6c 65 63 74 44 65 73 74 2a 29 3b 0a 53 65 6c  electDest*);.Sel
29a00 65 63 74 20 2a 73 71 6c 69 74 65 33 53 65 6c 65  ect *sqlite3Sele
29a10 63 74 4e 65 77 28 50 61 72 73 65 2a 2c 45 78 70  ctNew(Parse*,Exp
29a20 72 4c 69 73 74 2a 2c 53 72 63 4c 69 73 74 2a 2c  rList*,SrcList*,
29a30 45 78 70 72 2a 2c 45 78 70 72 4c 69 73 74 2a 2c  Expr*,ExprList*,
29a40 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
29a50 20 20 20 20 20 20 20 20 20 20 45 78 70 72 2a 2c            Expr*,
29a60 45 78 70 72 4c 69 73 74 2a 2c 75 33 32 2c 45 78  ExprList*,u32,Ex
29a70 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  pr*);.void sqlit
29a80 65 33 53 65 6c 65 63 74 44 65 6c 65 74 65 28 73  e3SelectDelete(s
29a90 71 6c 69 74 65 33 2a 2c 20 53 65 6c 65 63 74 2a  qlite3*, Select*
29aa0 29 3b 0a 54 61 62 6c 65 20 2a 73 71 6c 69 74 65  );.Table *sqlite
29ab0 33 53 72 63 4c 69 73 74 4c 6f 6f 6b 75 70 28 50  3SrcListLookup(P
29ac0 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 29  arse*, SrcList*)
29ad0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 73 52  ;.int sqlite3IsR
29ae0 65 61 64 4f 6e 6c 79 28 50 61 72 73 65 2a 2c 20  eadOnly(Parse*, 
29af0 54 61 62 6c 65 2a 2c 20 69 6e 74 29 3b 0a 76 6f  Table*, int);.vo
29b00 69 64 20 73 71 6c 69 74 65 33 4f 70 65 6e 54 61  id sqlite3OpenTa
29b10 62 6c 65 28 50 61 72 73 65 2a 2c 20 69 6e 74 20  ble(Parse*, int 
29b20 69 43 75 72 2c 20 69 6e 74 20 69 44 62 2c 20 54  iCur, int iDb, T
29b30 61 62 6c 65 2a 2c 20 69 6e 74 29 3b 0a 23 69 66  able*, int);.#if
29b40 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
29b50 45 4e 41 42 4c 45 5f 55 50 44 41 54 45 5f 44 45  ENABLE_UPDATE_DE
29b60 4c 45 54 45 5f 4c 49 4d 49 54 29 20 26 26 20 21  LETE_LIMIT) && !
29b70 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
29b80 4d 49 54 5f 53 55 42 51 55 45 52 59 29 0a 45 78  MIT_SUBQUERY).Ex
29b90 70 72 20 2a 73 71 6c 69 74 65 33 4c 69 6d 69 74  pr *sqlite3Limit
29ba0 57 68 65 72 65 28 50 61 72 73 65 2a 2c 53 72 63  Where(Parse*,Src
29bb0 4c 69 73 74 2a 2c 45 78 70 72 2a 2c 45 78 70 72  List*,Expr*,Expr
29bc0 4c 69 73 74 2a 2c 45 78 70 72 2a 2c 63 68 61 72  List*,Expr*,char
29bd0 2a 29 3b 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20  *);.#endif.void 
29be0 73 71 6c 69 74 65 33 44 65 6c 65 74 65 46 72 6f  sqlite3DeleteFro
29bf0 6d 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73  m(Parse*, SrcLis
29c00 74 2a 2c 20 45 78 70 72 2a 2c 20 45 78 70 72 4c  t*, Expr*, ExprL
29c10 69 73 74 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f  ist*, Expr*);.vo
29c20 69 64 20 73 71 6c 69 74 65 33 55 70 64 61 74 65  id sqlite3Update
29c30 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74  (Parse*, SrcList
29c40 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 45 78 70  *, ExprList*,Exp
29c50 72 2a 2c 69 6e 74 2c 45 78 70 72 4c 69 73 74 2a  r*,int,ExprList*
29c60 2c 45 78 70 72 2a 2c 0a 20 20 20 20 20 20 20 20  ,Expr*,.        
29c70 20 20 20 20 20 20 20 20 20 20 20 55 70 73 65 72             Upser
29c80 74 2a 29 3b 0a 57 68 65 72 65 49 6e 66 6f 20 2a  t*);.WhereInfo *
29c90 73 71 6c 69 74 65 33 57 68 65 72 65 42 65 67 69  sqlite3WhereBegi
29ca0 6e 28 50 61 72 73 65 2a 2c 53 72 63 4c 69 73 74  n(Parse*,SrcList
29cb0 2a 2c 45 78 70 72 2a 2c 45 78 70 72 4c 69 73 74  *,Expr*,ExprList
29cc0 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 75 31 36 2c  *,ExprList*,u16,
29cd0 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
29ce0 65 33 57 68 65 72 65 45 6e 64 28 57 68 65 72 65  e3WhereEnd(Where
29cf0 49 6e 66 6f 2a 29 3b 0a 4c 6f 67 45 73 74 20 73  Info*);.LogEst s
29d00 71 6c 69 74 65 33 57 68 65 72 65 4f 75 74 70 75  qlite3WhereOutpu
29d10 74 52 6f 77 43 6f 75 6e 74 28 57 68 65 72 65 49  tRowCount(WhereI
29d20 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  nfo*);.int sqlit
29d30 65 33 57 68 65 72 65 49 73 44 69 73 74 69 6e 63  e3WhereIsDistinc
29d40 74 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69  t(WhereInfo*);.i
29d50 6e 74 20 73 71 6c 69 74 65 33 57 68 65 72 65 49  nt sqlite3WhereI
29d60 73 4f 72 64 65 72 65 64 28 57 68 65 72 65 49 6e  sOrdered(WhereIn
29d70 66 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  fo*);.int sqlite
29d80 33 57 68 65 72 65 4f 72 64 65 72 65 64 49 6e 6e  3WhereOrderedInn
29d90 65 72 4c 6f 6f 70 28 57 68 65 72 65 49 6e 66 6f  erLoop(WhereInfo
29da0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57  *);.int sqlite3W
29db0 68 65 72 65 49 73 53 6f 72 74 65 64 28 57 68 65  hereIsSorted(Whe
29dc0 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73 71  reInfo*);.int sq
29dd0 6c 69 74 65 33 57 68 65 72 65 43 6f 6e 74 69 6e  lite3WhereContin
29de0 75 65 4c 61 62 65 6c 28 57 68 65 72 65 49 6e 66  ueLabel(WhereInf
29df0 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  o*);.int sqlite3
29e00 57 68 65 72 65 42 72 65 61 6b 4c 61 62 65 6c 28  WhereBreakLabel(
29e10 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74  WhereInfo*);.int
29e20 20 73 71 6c 69 74 65 33 57 68 65 72 65 4f 6b 4f   sqlite3WhereOkO
29e30 6e 65 50 61 73 73 28 57 68 65 72 65 49 6e 66 6f  nePass(WhereInfo
29e40 2a 2c 20 69 6e 74 2a 29 3b 0a 23 64 65 66 69 6e  *, int*);.#defin
29e50 65 20 4f 4e 45 50 41 53 53 5f 4f 46 46 20 20 20  e ONEPASS_OFF   
29e60 20 20 20 30 20 20 20 20 20 20 20 20 2f 2a 20 55     0        /* U
29e70 73 65 20 6f 66 20 4f 4e 45 50 41 53 53 20 6e 6f  se of ONEPASS no
29e80 74 20 61 6c 6c 6f 77 65 64 20 2a 2f 0a 23 64 65  t allowed */.#de
29e90 66 69 6e 65 20 4f 4e 45 50 41 53 53 5f 53 49 4e  fine ONEPASS_SIN
29ea0 47 4c 45 20 20 20 31 20 20 20 20 20 20 20 20 2f  GLE   1        /
29eb0 2a 20 4f 4e 45 50 41 53 53 20 76 61 6c 69 64 20  * ONEPASS valid 
29ec0 66 6f 72 20 61 20 73 69 6e 67 6c 65 20 72 6f 77  for a single row
29ed0 20 75 70 64 61 74 65 20 2a 2f 0a 23 64 65 66 69   update */.#defi
29ee0 6e 65 20 4f 4e 45 50 41 53 53 5f 4d 55 4c 54 49  ne ONEPASS_MULTI
29ef0 20 20 20 20 32 20 20 20 20 20 20 20 20 2f 2a 20      2        /* 
29f00 4f 4e 45 50 41 53 53 20 69 73 20 76 61 6c 69 64  ONEPASS is valid
29f10 20 66 6f 72 20 6d 75 6c 74 69 70 6c 65 20 72 6f   for multiple ro
29f20 77 73 20 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74  ws */.void sqlit
29f30 65 33 45 78 70 72 43 6f 64 65 4c 6f 61 64 49 6e  e3ExprCodeLoadIn
29f40 64 65 78 43 6f 6c 75 6d 6e 28 50 61 72 73 65 2a  dexColumn(Parse*
29f50 2c 20 49 6e 64 65 78 2a 2c 20 69 6e 74 2c 20 69  , Index*, int, i
29f60 6e 74 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71  nt, int);.int sq
29f70 6c 69 74 65 33 45 78 70 72 43 6f 64 65 47 65 74  lite3ExprCodeGet
29f80 43 6f 6c 75 6d 6e 28 50 61 72 73 65 2a 2c 20 54  Column(Parse*, T
29f90 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c  able*, int, int,
29fa0 20 69 6e 74 2c 20 75 38 29 3b 0a 76 6f 69 64 20   int, u8);.void 
29fb0 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 47  sqlite3ExprCodeG
29fc0 65 74 43 6f 6c 75 6d 6e 4f 66 54 61 62 6c 65 28  etColumnOfTable(
29fd0 56 64 62 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69  Vdbe*, Table*, i
29fe0 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76  nt, int, int);.v
29ff0 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 43  oid sqlite3ExprC
2a000 6f 64 65 4d 6f 76 65 28 50 61 72 73 65 2a 2c 20  odeMove(Parse*, 
2a010 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  int, int, int);.
2a020 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
2a030 43 6f 64 65 28 50 61 72 73 65 2a 2c 20 45 78 70  Code(Parse*, Exp
2a040 72 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  r*, int);.void s
2a050 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 43 6f  qlite3ExprCodeCo
2a060 70 79 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a  py(Parse*, Expr*
2a070 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
2a080 69 74 65 33 45 78 70 72 43 6f 64 65 46 61 63 74  ite3ExprCodeFact
2a090 6f 72 61 62 6c 65 28 50 61 72 73 65 2a 2c 20 45  orable(Parse*, E
2a0a0 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20  xpr*, int);.int 
2a0b0 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 41  sqlite3ExprCodeA
2a0c0 74 49 6e 69 74 28 50 61 72 73 65 2a 2c 20 45 78  tInit(Parse*, Ex
2a0d0 70 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73  pr*, int);.int s
2a0e0 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 54 65  qlite3ExprCodeTe
2a0f0 6d 70 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a  mp(Parse*, Expr*
2a100 2c 20 69 6e 74 2a 29 3b 0a 69 6e 74 20 73 71 6c  , int*);.int sql
2a110 69 74 65 33 45 78 70 72 43 6f 64 65 54 61 72 67  ite3ExprCodeTarg
2a120 65 74 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a  et(Parse*, Expr*
2a130 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
2a140 69 74 65 33 45 78 70 72 43 6f 64 65 41 6e 64 43  ite3ExprCodeAndC
2a150 61 63 68 65 28 50 61 72 73 65 2a 2c 20 45 78 70  ache(Parse*, Exp
2a160 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71  r*, int);.int sq
2a170 6c 69 74 65 33 45 78 70 72 43 6f 64 65 45 78 70  lite3ExprCodeExp
2a180 72 4c 69 73 74 28 50 61 72 73 65 2a 2c 20 45 78  rList(Parse*, Ex
2a190 70 72 4c 69 73 74 2a 2c 20 69 6e 74 2c 20 69 6e  prList*, int, in
2a1a0 74 2c 20 75 38 29 3b 0a 23 64 65 66 69 6e 65 20  t, u8);.#define 
2a1b0 53 51 4c 49 54 45 5f 45 43 45 4c 5f 44 55 50 20  SQLITE_ECEL_DUP 
2a1c0 20 20 20 20 20 30 78 30 31 20 20 2f 2a 20 44 65       0x01  /* De
2a1d0 65 70 2c 20 6e 6f 74 20 73 68 61 6c 6c 6f 77 20  ep, not shallow 
2a1e0 63 6f 70 69 65 73 20 2a 2f 0a 23 64 65 66 69 6e  copies */.#defin
2a1f0 65 20 53 51 4c 49 54 45 5f 45 43 45 4c 5f 46 41  e SQLITE_ECEL_FA
2a200 43 54 4f 52 20 20 20 30 78 30 32 20 20 2f 2a 20  CTOR   0x02  /* 
2a210 46 61 63 74 6f 72 20 6f 75 74 20 63 6f 6e 73 74  Factor out const
2a220 61 6e 74 20 74 65 72 6d 73 20 2a 2f 0a 23 64 65  ant terms */.#de
2a230 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 43 45 4c  fine SQLITE_ECEL
2a240 5f 52 45 46 20 20 20 20 20 20 30 78 30 34 20 20  _REF      0x04  
2a250 2f 2a 20 55 73 65 20 45 78 70 72 4c 69 73 74 2e  /* Use ExprList.
2a260 75 2e 78 2e 69 4f 72 64 65 72 42 79 43 6f 6c 20  u.x.iOrderByCol 
2a270 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
2a280 45 5f 45 43 45 4c 5f 4f 4d 49 54 52 45 46 20 20  E_ECEL_OMITREF  
2a290 30 78 30 38 20 20 2f 2a 20 4f 6d 69 74 20 69 66  0x08  /* Omit if
2a2a0 20 45 78 70 72 4c 69 73 74 2e 75 2e 78 2e 69 4f   ExprList.u.x.iO
2a2b0 72 64 65 72 42 79 43 6f 6c 20 2a 2f 0a 76 6f 69  rderByCol */.voi
2a2c0 64 20 73 71 6c 69 74 65 33 45 78 70 72 49 66 54  d sqlite3ExprIfT
2a2d0 72 75 65 28 50 61 72 73 65 2a 2c 20 45 78 70 72  rue(Parse*, Expr
2a2e0 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f  *, int, int);.vo
2a2f0 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 49 66  id sqlite3ExprIf
2a300 46 61 6c 73 65 28 50 61 72 73 65 2a 2c 20 45 78  False(Parse*, Ex
2a310 70 72 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  pr*, int, int);.
2a320 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
2a330 49 66 46 61 6c 73 65 44 75 70 28 50 61 72 73 65  IfFalseDup(Parse
2a340 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 2c 20 69  *, Expr*, int, i
2a350 6e 74 29 3b 0a 54 61 62 6c 65 20 2a 73 71 6c 69  nt);.Table *sqli
2a360 74 65 33 46 69 6e 64 54 61 62 6c 65 28 73 71 6c  te3FindTable(sql
2a370 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72  ite3*,const char
2a380 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  *, const char*);
2a390 0a 23 64 65 66 69 6e 65 20 4c 4f 43 41 54 45 5f  .#define LOCATE_
2a3a0 56 49 45 57 20 20 20 20 30 78 30 31 0a 23 64 65  VIEW    0x01.#de
2a3b0 66 69 6e 65 20 4c 4f 43 41 54 45 5f 4e 4f 45 52  fine LOCATE_NOER
2a3c0 52 20 20 20 30 78 30 32 0a 54 61 62 6c 65 20 2a  R   0x02.Table *
2a3d0 73 71 6c 69 74 65 33 4c 6f 63 61 74 65 54 61 62  sqlite3LocateTab
2a3e0 6c 65 28 50 61 72 73 65 2a 2c 75 33 32 20 66 6c  le(Parse*,u32 fl
2a3f0 61 67 73 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c  ags,const char*,
2a400 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 54   const char*);.T
2a410 61 62 6c 65 20 2a 73 71 6c 69 74 65 33 4c 6f 63  able *sqlite3Loc
2a420 61 74 65 54 61 62 6c 65 49 74 65 6d 28 50 61 72  ateTableItem(Par
2a430 73 65 2a 2c 75 33 32 20 66 6c 61 67 73 2c 73 74  se*,u32 flags,st
2a440 72 75 63 74 20 53 72 63 4c 69 73 74 5f 69 74 65  ruct SrcList_ite
2a450 6d 20 2a 29 3b 0a 49 6e 64 65 78 20 2a 73 71 6c  m *);.Index *sql
2a460 69 74 65 33 46 69 6e 64 49 6e 64 65 78 28 73 71  ite3FindIndex(sq
2a470 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61  lite3*,const cha
2a480 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29  r*, const char*)
2a490 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 55 6e  ;.void sqlite3Un
2a4a0 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65 54 61 62  linkAndDeleteTab
2a4b0 6c 65 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c  le(sqlite3*,int,
2a4c0 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f  const char*);.vo
2a4d0 69 64 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b  id sqlite3Unlink
2a4e0 41 6e 64 44 65 6c 65 74 65 49 6e 64 65 78 28 73  AndDeleteIndex(s
2a4f0 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73  qlite3*,int,cons
2a500 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73  t char*);.void s
2a510 71 6c 69 74 65 33 56 61 63 75 75 6d 28 50 61 72  qlite3Vacuum(Par
2a520 73 65 2a 2c 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74  se*,Token*);.int
2a530 20 73 71 6c 69 74 65 33 52 75 6e 56 61 63 75 75   sqlite3RunVacuu
2a540 6d 28 63 68 61 72 2a 2a 2c 20 73 71 6c 69 74 65  m(char**, sqlite
2a550 33 2a 2c 20 69 6e 74 29 3b 0a 63 68 61 72 20 2a  3*, int);.char *
2a560 73 71 6c 69 74 65 33 4e 61 6d 65 46 72 6f 6d 54  sqlite3NameFromT
2a570 6f 6b 65 6e 28 73 71 6c 69 74 65 33 2a 2c 20 54  oken(sqlite3*, T
2a580 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  oken*);.int sqli
2a590 74 65 33 45 78 70 72 43 6f 6d 70 61 72 65 28 50  te3ExprCompare(P
2a5a0 61 72 73 65 2a 2c 45 78 70 72 2a 2c 20 45 78 70  arse*,Expr*, Exp
2a5b0 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71  r*, int);.int sq
2a5c0 6c 69 74 65 33 45 78 70 72 43 6f 6d 70 61 72 65  lite3ExprCompare
2a5d0 53 6b 69 70 28 45 78 70 72 2a 2c 20 45 78 70 72  Skip(Expr*, Expr
2a5e0 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c  *, int);.int sql
2a5f0 69 74 65 33 45 78 70 72 4c 69 73 74 43 6f 6d 70  ite3ExprListComp
2a600 61 72 65 28 45 78 70 72 4c 69 73 74 2a 2c 20 45  are(ExprList*, E
2a610 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74 29 3b 0a  xprList*, int);.
2a620 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 49  int sqlite3ExprI
2a630 6d 70 6c 69 65 73 45 78 70 72 28 50 61 72 73 65  mpliesExpr(Parse
2a640 2a 2c 45 78 70 72 2a 2c 20 45 78 70 72 2a 2c 20  *,Expr*, Expr*, 
2a650 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  int);.int sqlite
2a660 33 45 78 70 72 49 6d 70 6c 69 65 73 4e 6f 6e 4e  3ExprImpliesNonN
2a670 75 6c 6c 52 6f 77 28 45 78 70 72 2a 2c 69 6e 74  ullRow(Expr*,int
2a680 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
2a690 78 70 72 41 6e 61 6c 79 7a 65 41 67 67 72 65 67  xprAnalyzeAggreg
2a6a0 61 74 65 73 28 4e 61 6d 65 43 6f 6e 74 65 78 74  ates(NameContext
2a6b0 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20  *, Expr*);.void 
2a6c0 73 71 6c 69 74 65 33 45 78 70 72 41 6e 61 6c 79  sqlite3ExprAnaly
2a6d0 7a 65 41 67 67 4c 69 73 74 28 4e 61 6d 65 43 6f  zeAggList(NameCo
2a6e0 6e 74 65 78 74 2a 2c 45 78 70 72 4c 69 73 74 2a  ntext*,ExprList*
2a6f0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78  );.int sqlite3Ex
2a700 70 72 43 6f 76 65 72 65 64 42 79 49 6e 64 65 78  prCoveredByIndex
2a710 28 45 78 70 72 2a 2c 20 69 6e 74 20 69 43 75 72  (Expr*, int iCur
2a720 2c 20 49 6e 64 65 78 20 2a 70 49 64 78 29 3b 0a  , Index *pIdx);.
2a730 69 6e 74 20 73 71 6c 69 74 65 33 46 75 6e 63 74  int sqlite3Funct
2a740 69 6f 6e 55 73 65 73 54 68 69 73 53 72 63 28 45  ionUsesThisSrc(E
2a750 78 70 72 2a 2c 20 53 72 63 4c 69 73 74 2a 29 3b  xpr*, SrcList*);
2a760 0a 56 64 62 65 20 2a 73 71 6c 69 74 65 33 47 65  .Vdbe *sqlite3Ge
2a770 74 56 64 62 65 28 50 61 72 73 65 2a 29 3b 0a 23  tVdbe(Parse*);.#
2a780 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 55 4e  ifndef SQLITE_UN
2a790 54 45 53 54 41 42 4c 45 0a 76 6f 69 64 20 73 71  TESTABLE.void sq
2a7a0 6c 69 74 65 33 50 72 6e 67 53 61 76 65 53 74 61  lite3PrngSaveSta
2a7b0 74 65 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20 73  te(void);.void s
2a7c0 71 6c 69 74 65 33 50 72 6e 67 52 65 73 74 6f 72  qlite3PrngRestor
2a7d0 65 53 74 61 74 65 28 76 6f 69 64 29 3b 0a 23 65  eState(void);.#e
2a7e0 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65  ndif.void sqlite
2a7f0 33 52 6f 6c 6c 62 61 63 6b 41 6c 6c 28 73 71 6c  3RollbackAll(sql
2a800 69 74 65 33 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64  ite3*,int);.void
2a810 20 73 71 6c 69 74 65 33 43 6f 64 65 56 65 72 69   sqlite3CodeVeri
2a820 66 79 53 63 68 65 6d 61 28 50 61 72 73 65 2a 2c  fySchema(Parse*,
2a830 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
2a840 74 65 33 43 6f 64 65 56 65 72 69 66 79 4e 61 6d  te3CodeVerifyNam
2a850 65 64 53 63 68 65 6d 61 28 50 61 72 73 65 2a 2c  edSchema(Parse*,
2a860 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 44 62   const char *zDb
2a870 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42  );.void sqlite3B
2a880 65 67 69 6e 54 72 61 6e 73 61 63 74 69 6f 6e 28  eginTransaction(
2a890 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 76 6f  Parse*, int);.vo
2a8a0 69 64 20 73 71 6c 69 74 65 33 45 6e 64 54 72 61  id sqlite3EndTra
2a8b0 6e 73 61 63 74 69 6f 6e 28 50 61 72 73 65 2a 2c  nsaction(Parse*,
2a8c0 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
2a8d0 65 33 53 61 76 65 70 6f 69 6e 74 28 50 61 72 73  e3Savepoint(Pars
2a8e0 65 2a 2c 20 69 6e 74 2c 20 54 6f 6b 65 6e 2a 29  e*, int, Token*)
2a8f0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6c  ;.void sqlite3Cl
2a900 6f 73 65 53 61 76 65 70 6f 69 6e 74 73 28 73 71  oseSavepoints(sq
2a910 6c 69 74 65 33 20 2a 29 3b 0a 76 6f 69 64 20 73  lite3 *);.void s
2a920 71 6c 69 74 65 33 4c 65 61 76 65 4d 75 74 65 78  qlite3LeaveMutex
2a930 41 6e 64 43 6c 6f 73 65 5a 6f 6d 62 69 65 28 73  AndCloseZombie(s
2a940 71 6c 69 74 65 33 2a 29 3b 0a 69 6e 74 20 73 71  qlite3*);.int sq
2a950 6c 69 74 65 33 45 78 70 72 49 64 54 6f 54 72 75  lite3ExprIdToTru
2a960 65 46 61 6c 73 65 28 45 78 70 72 2a 29 3b 0a 69  eFalse(Expr*);.i
2a970 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 54 72  nt sqlite3ExprTr
2a980 75 74 68 56 61 6c 75 65 28 63 6f 6e 73 74 20 45  uthValue(const E
2a990 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  xpr*);.int sqlit
2a9a0 65 33 45 78 70 72 49 73 43 6f 6e 73 74 61 6e 74  e3ExprIsConstant
2a9b0 28 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c  (Expr*);.int sql
2a9c0 69 74 65 33 45 78 70 72 49 73 43 6f 6e 73 74 61  ite3ExprIsConsta
2a9d0 6e 74 4e 6f 74 4a 6f 69 6e 28 45 78 70 72 2a 29  ntNotJoin(Expr*)
2a9e0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70  ;.int sqlite3Exp
2a9f0 72 49 73 43 6f 6e 73 74 61 6e 74 4f 72 46 75 6e  rIsConstantOrFun
2aa00 63 74 69 6f 6e 28 45 78 70 72 2a 2c 20 75 38 29  ction(Expr*, u8)
2aa10 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70  ;.int sqlite3Exp
2aa20 72 49 73 43 6f 6e 73 74 61 6e 74 4f 72 47 72 6f  rIsConstantOrGro
2aa30 75 70 42 79 28 50 61 72 73 65 2a 2c 20 45 78 70  upBy(Parse*, Exp
2aa40 72 2a 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a  r*, ExprList*);.
2aa50 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 49  int sqlite3ExprI
2aa60 73 54 61 62 6c 65 43 6f 6e 73 74 61 6e 74 28 45  sTableConstant(E
2aa70 78 70 72 2a 2c 69 6e 74 29 3b 0a 23 69 66 64 65  xpr*,int);.#ifde
2aa80 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
2aa90 43 55 52 53 4f 52 5f 48 49 4e 54 53 0a 69 6e 74  CURSOR_HINTS.int
2aaa0 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 6e 74   sqlite3ExprCont
2aab0 61 69 6e 73 53 75 62 71 75 65 72 79 28 45 78 70  ainsSubquery(Exp
2aac0 72 2a 29 3b 0a 23 65 6e 64 69 66 0a 69 6e 74 20  r*);.#endif.int 
2aad0 73 71 6c 69 74 65 33 45 78 70 72 49 73 49 6e 74  sqlite3ExprIsInt
2aae0 65 67 65 72 28 45 78 70 72 2a 2c 20 69 6e 74 2a  eger(Expr*, int*
2aaf0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78  );.int sqlite3Ex
2ab00 70 72 43 61 6e 42 65 4e 75 6c 6c 28 63 6f 6e 73  prCanBeNull(cons
2ab10 74 20 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71  t Expr*);.int sq
2ab20 6c 69 74 65 33 45 78 70 72 4e 65 65 64 73 4e 6f  lite3ExprNeedsNo
2ab30 41 66 66 69 6e 69 74 79 43 68 61 6e 67 65 28 63  AffinityChange(c
2ab40 6f 6e 73 74 20 45 78 70 72 2a 2c 20 63 68 61 72  onst Expr*, char
2ab50 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 73  );.int sqlite3Is
2ab60 52 6f 77 69 64 28 63 6f 6e 73 74 20 63 68 61 72  Rowid(const char
2ab70 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
2ab80 47 65 6e 65 72 61 74 65 52 6f 77 44 65 6c 65 74  GenerateRowDelet
2ab90 65 28 0a 20 20 20 20 50 61 72 73 65 2a 2c 54 61  e(.    Parse*,Ta
2aba0 62 6c 65 2a 2c 54 72 69 67 67 65 72 2a 2c 69 6e  ble*,Trigger*,in
2abb0 74 2c 69 6e 74 2c 69 6e 74 2c 69 31 36 2c 75 38  t,int,int,i16,u8
2abc0 2c 75 38 2c 75 38 2c 69 6e 74 29 3b 0a 76 6f 69  ,u8,u8,int);.voi
2abd0 64 20 73 71 6c 69 74 65 33 47 65 6e 65 72 61 74  d sqlite3Generat
2abe0 65 52 6f 77 49 6e 64 65 78 44 65 6c 65 74 65 28  eRowIndexDelete(
2abf0 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20  Parse*, Table*, 
2ac00 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 2a 2c 20  int, int, int*, 
2ac10 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  int);.int sqlite
2ac20 33 47 65 6e 65 72 61 74 65 49 6e 64 65 78 4b 65  3GenerateIndexKe
2ac30 79 28 50 61 72 73 65 2a 2c 20 49 6e 64 65 78 2a  y(Parse*, Index*
2ac40 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 2c  , int, int, int,
2ac50 20 69 6e 74 2a 2c 49 6e 64 65 78 2a 2c 69 6e 74   int*,Index*,int
2ac60 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52  );.void sqlite3R
2ac70 65 73 6f 6c 76 65 50 61 72 74 49 64 78 4c 61 62  esolvePartIdxLab
2ac80 65 6c 28 50 61 72 73 65 2a 2c 69 6e 74 29 3b 0a  el(Parse*,int);.
2ac90 76 6f 69 64 20 73 71 6c 69 74 65 33 47 65 6e 65  void sqlite3Gene
2aca0 72 61 74 65 43 6f 6e 73 74 72 61 69 6e 74 43 68  rateConstraintCh
2acb0 65 63 6b 73 28 50 61 72 73 65 2a 2c 54 61 62 6c  ecks(Parse*,Tabl
2acc0 65 2a 2c 69 6e 74 2a 2c 69 6e 74 2c 69 6e 74 2c  e*,int*,int,int,
2acd0 69 6e 74 2c 69 6e 74 2c 0a 20 20 20 20 20 20 20  int,int,.       
2ace0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2acf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 75 38                u8
2ad00 2c 75 38 2c 69 6e 74 2c 69 6e 74 2a 2c 69 6e 74  ,u8,int,int*,int
2ad10 2a 2c 55 70 73 65 72 74 2a 29 3b 0a 23 69 66 64  *,Upsert*);.#ifd
2ad20 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ef SQLITE_ENABLE
2ad30 5f 4e 55 4c 4c 5f 54 52 49 4d 0a 20 20 76 6f 69  _NULL_TRIM.  voi
2ad40 64 20 73 71 6c 69 74 65 33 53 65 74 4d 61 6b 65  d sqlite3SetMake
2ad50 52 65 63 6f 72 64 50 35 28 56 64 62 65 2a 2c 54  RecordP5(Vdbe*,T
2ad60 61 62 6c 65 2a 29 3b 0a 23 65 6c 73 65 0a 23 20  able*);.#else.# 
2ad70 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53 65  define sqlite3Se
2ad80 74 4d 61 6b 65 52 65 63 6f 72 64 50 35 28 41 2c  tMakeRecordP5(A,
2ad90 42 29 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73  B).#endif.void s
2ada0 71 6c 69 74 65 33 43 6f 6d 70 6c 65 74 65 49 6e  qlite3CompleteIn
2adb0 73 65 72 74 69 6f 6e 28 50 61 72 73 65 2a 2c 54  sertion(Parse*,T
2adc0 61 62 6c 65 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e  able*,int,int,in
2add0 74 2c 69 6e 74 2a 2c 69 6e 74 2c 69 6e 74 2c 69  t,int*,int,int,i
2ade0 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  nt);.int sqlite3
2adf0 4f 70 65 6e 54 61 62 6c 65 41 6e 64 49 6e 64 69  OpenTableAndIndi
2ae00 63 65 73 28 50 61 72 73 65 2a 2c 20 54 61 62 6c  ces(Parse*, Tabl
2ae10 65 2a 2c 20 69 6e 74 2c 20 75 38 2c 20 69 6e 74  e*, int, u8, int
2ae20 2c 20 75 38 2a 2c 20 69 6e 74 2a 2c 20 69 6e 74  , u8*, int*, int
2ae30 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
2ae40 42 65 67 69 6e 57 72 69 74 65 4f 70 65 72 61 74  BeginWriteOperat
2ae50 69 6f 6e 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c  ion(Parse*, int,
2ae60 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
2ae70 74 65 33 4d 75 6c 74 69 57 72 69 74 65 28 50 61  te3MultiWrite(Pa
2ae80 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  rse*);.void sqli
2ae90 74 65 33 4d 61 79 41 62 6f 72 74 28 50 61 72 73  te3MayAbort(Pars
2aea0 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  e*);.void sqlite
2aeb0 33 48 61 6c 74 43 6f 6e 73 74 72 61 69 6e 74 28  3HaltConstraint(
2aec0 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74  Parse*, int, int
2aed0 2c 20 63 68 61 72 2a 2c 20 69 38 2c 20 75 38 29  , char*, i8, u8)
2aee0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 55 6e  ;.void sqlite3Un
2aef0 69 71 75 65 43 6f 6e 73 74 72 61 69 6e 74 28 50  iqueConstraint(P
2af00 61 72 73 65 2a 2c 20 69 6e 74 2c 20 49 6e 64 65  arse*, int, Inde
2af10 78 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  x*);.void sqlite
2af20 33 52 6f 77 69 64 43 6f 6e 73 74 72 61 69 6e 74  3RowidConstraint
2af30 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 54 61  (Parse*, int, Ta
2af40 62 6c 65 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c  ble*);.Expr *sql
2af50 69 74 65 33 45 78 70 72 44 75 70 28 73 71 6c 69  ite3ExprDup(sqli
2af60 74 65 33 2a 2c 45 78 70 72 2a 2c 69 6e 74 29 3b  te3*,Expr*,int);
2af70 0a 45 78 70 72 4c 69 73 74 20 2a 73 71 6c 69 74  .ExprList *sqlit
2af80 65 33 45 78 70 72 4c 69 73 74 44 75 70 28 73 71  e3ExprListDup(sq
2af90 6c 69 74 65 33 2a 2c 45 78 70 72 4c 69 73 74 2a  lite3*,ExprList*
2afa0 2c 69 6e 74 29 3b 0a 53 72 63 4c 69 73 74 20 2a  ,int);.SrcList *
2afb0 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74 44 75  sqlite3SrcListDu
2afc0 70 28 73 71 6c 69 74 65 33 2a 2c 53 72 63 4c 69  p(sqlite3*,SrcLi
2afd0 73 74 2a 2c 69 6e 74 29 3b 0a 49 64 4c 69 73 74  st*,int);.IdList
2afe0 20 2a 73 71 6c 69 74 65 33 49 64 4c 69 73 74 44   *sqlite3IdListD
2aff0 75 70 28 73 71 6c 69 74 65 33 2a 2c 49 64 4c 69  up(sqlite3*,IdLi
2b000 73 74 2a 29 3b 0a 53 65 6c 65 63 74 20 2a 73 71  st*);.Select *sq
2b010 6c 69 74 65 33 53 65 6c 65 63 74 44 75 70 28 73  lite3SelectDup(s
2b020 71 6c 69 74 65 33 2a 2c 53 65 6c 65 63 74 2a 2c  qlite3*,Select*,
2b030 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
2b040 65 33 49 6e 73 65 72 74 42 75 69 6c 74 69 6e 46  e3InsertBuiltinF
2b050 75 6e 63 73 28 46 75 6e 63 44 65 66 2a 2c 69 6e  uncs(FuncDef*,in
2b060 74 29 3b 0a 46 75 6e 63 44 65 66 20 2a 73 71 6c  t);.FuncDef *sql
2b070 69 74 65 33 46 69 6e 64 46 75 6e 63 74 69 6f 6e  ite3FindFunction
2b080 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20  (sqlite3*,const 
2b090 63 68 61 72 2a 2c 69 6e 74 2c 75 38 2c 75 38 29  char*,int,u8,u8)
2b0a0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65  ;.void sqlite3Re
2b0b0 67 69 73 74 65 72 42 75 69 6c 74 69 6e 46 75 6e  gisterBuiltinFun
2b0c0 63 74 69 6f 6e 73 28 76 6f 69 64 29 3b 0a 76 6f  ctions(void);.vo
2b0d0 69 64 20 73 71 6c 69 74 65 33 52 65 67 69 73 74  id sqlite3Regist
2b0e0 65 72 44 61 74 65 54 69 6d 65 46 75 6e 63 74 69  erDateTimeFuncti
2b0f0 6f 6e 73 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20  ons(void);.void 
2b100 73 71 6c 69 74 65 33 52 65 67 69 73 74 65 72 50  sqlite3RegisterP
2b110 65 72 43 6f 6e 6e 65 63 74 69 6f 6e 42 75 69 6c  erConnectionBuil
2b120 74 69 6e 46 75 6e 63 74 69 6f 6e 73 28 73 71 6c  tinFunctions(sql
2b130 69 74 65 33 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  ite3*);.int sqli
2b140 74 65 33 53 61 66 65 74 79 43 68 65 63 6b 4f 6b  te3SafetyCheckOk
2b150 28 73 71 6c 69 74 65 33 2a 29 3b 0a 69 6e 74 20  (sqlite3*);.int 
2b160 73 71 6c 69 74 65 33 53 61 66 65 74 79 43 68 65  sqlite3SafetyChe
2b170 63 6b 53 69 63 6b 4f 72 4f 6b 28 73 71 6c 69 74  ckSickOrOk(sqlit
2b180 65 33 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  e3*);.void sqlit
2b190 65 33 43 68 61 6e 67 65 43 6f 6f 6b 69 65 28 50  e3ChangeCookie(P
2b1a0 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 0a 23 69  arse*, int);..#i
2b1b0 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  f !defined(SQLIT
2b1c0 45 5f 4f 4d 49 54 5f 56 49 45 57 29 20 26 26 20  E_OMIT_VIEW) && 
2b1d0 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
2b1e0 4f 4d 49 54 5f 54 52 49 47 47 45 52 29 0a 76 6f  OMIT_TRIGGER).vo
2b1f0 69 64 20 73 71 6c 69 74 65 33 4d 61 74 65 72 69  id sqlite3Materi
2b200 61 6c 69 7a 65 56 69 65 77 28 50 61 72 73 65 2a  alizeView(Parse*
2b210 2c 20 54 61 62 6c 65 2a 2c 20 45 78 70 72 2a 2c  , Table*, Expr*,
2b220 20 45 78 70 72 4c 69 73 74 2a 2c 45 78 70 72 2a   ExprList*,Expr*
2b230 2c 69 6e 74 29 3b 0a 23 65 6e 64 69 66 0a 0a 23  ,int);.#endif..#
2b240 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
2b250 49 54 5f 54 52 49 47 47 45 52 0a 20 20 76 6f 69  IT_TRIGGER.  voi
2b260 64 20 73 71 6c 69 74 65 33 42 65 67 69 6e 54 72  d sqlite3BeginTr
2b270 69 67 67 65 72 28 50 61 72 73 65 2a 2c 20 54 6f  igger(Parse*, To
2b280 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 69 6e 74 2c  ken*,Token*,int,
2b290 69 6e 74 2c 49 64 4c 69 73 74 2a 2c 53 72 63 4c  int,IdList*,SrcL
2b2a0 69 73 74 2a 2c 0a 20 20 20 20 20 20 20 20 20 20  ist*,.          
2b2b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b2c0 20 45 78 70 72 2a 2c 69 6e 74 2c 20 69 6e 74 29   Expr*,int, int)
2b2d0 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
2b2e0 46 69 6e 69 73 68 54 72 69 67 67 65 72 28 50 61  FinishTrigger(Pa
2b2f0 72 73 65 2a 2c 20 54 72 69 67 67 65 72 53 74 65  rse*, TriggerSte
2b300 70 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 20 20 76  p*, Token*);.  v
2b310 6f 69 64 20 73 71 6c 69 74 65 33 44 72 6f 70 54  oid sqlite3DropT
2b320 72 69 67 67 65 72 28 50 61 72 73 65 2a 2c 20 53  rigger(Parse*, S
2b330 72 63 4c 69 73 74 2a 2c 20 69 6e 74 29 3b 0a 20  rcList*, int);. 
2b340 20 76 6f 69 64 20 73 71 6c 69 74 65 33 44 72 6f   void sqlite3Dro
2b350 70 54 72 69 67 67 65 72 50 74 72 28 50 61 72 73  pTriggerPtr(Pars
2b360 65 2a 2c 20 54 72 69 67 67 65 72 2a 29 3b 0a 20  e*, Trigger*);. 
2b370 20 54 72 69 67 67 65 72 20 2a 73 71 6c 69 74 65   Trigger *sqlite
2b380 33 54 72 69 67 67 65 72 73 45 78 69 73 74 28 50  3TriggersExist(P
2b390 61 72 73 65 20 2a 2c 20 54 61 62 6c 65 2a 2c 20  arse *, Table*, 
2b3a0 69 6e 74 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20  int, ExprList*, 
2b3b0 69 6e 74 20 2a 70 4d 61 73 6b 29 3b 0a 20 20 54  int *pMask);.  T
2b3c0 72 69 67 67 65 72 20 2a 73 71 6c 69 74 65 33 54  rigger *sqlite3T
2b3d0 72 69 67 67 65 72 4c 69 73 74 28 50 61 72 73 65  riggerList(Parse
2b3e0 20 2a 2c 20 54 61 62 6c 65 20 2a 29 3b 0a 20 20   *, Table *);.  
2b3f0 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 64 65  void sqlite3Code
2b400 52 6f 77 54 72 69 67 67 65 72 28 50 61 72 73 65  RowTrigger(Parse
2b410 2a 2c 20 54 72 69 67 67 65 72 20 2a 2c 20 69 6e  *, Trigger *, in
2b420 74 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e  t, ExprList*, in
2b430 74 2c 20 54 61 62 6c 65 20 2a 2c 0a 20 20 20 20  t, Table *,.    
2b440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b450 20 20 20 20 20 20 20 20 69 6e 74 2c 20 69 6e 74          int, int
2b460 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20 73  , int);.  void s
2b470 71 6c 69 74 65 33 43 6f 64 65 52 6f 77 54 72 69  qlite3CodeRowTri
2b480 67 67 65 72 44 69 72 65 63 74 28 50 61 72 73 65  ggerDirect(Parse
2b490 20 2a 2c 20 54 72 69 67 67 65 72 20 2a 2c 20 54   *, Trigger *, T
2b4a0 61 62 6c 65 20 2a 2c 20 69 6e 74 2c 20 69 6e 74  able *, int, int
2b4b0 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20 73  , int);.  void s
2b4c0 71 6c 69 74 65 56 69 65 77 54 72 69 67 67 65 72  qliteViewTrigger
2b4d0 73 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a  s(Parse*, Table*
2b4e0 2c 20 45 78 70 72 2a 2c 20 69 6e 74 2c 20 45 78  , Expr*, int, Ex
2b4f0 70 72 4c 69 73 74 2a 29 3b 0a 20 20 76 6f 69 64  prList*);.  void
2b500 20 73 71 6c 69 74 65 33 44 65 6c 65 74 65 54 72   sqlite3DeleteTr
2b510 69 67 67 65 72 53 74 65 70 28 73 71 6c 69 74 65  iggerStep(sqlite
2b520 33 2a 2c 20 54 72 69 67 67 65 72 53 74 65 70 2a  3*, TriggerStep*
2b530 29 3b 0a 20 20 54 72 69 67 67 65 72 53 74 65 70  );.  TriggerStep
2b540 20 2a 73 71 6c 69 74 65 33 54 72 69 67 67 65 72   *sqlite3Trigger
2b550 53 65 6c 65 63 74 53 74 65 70 28 73 71 6c 69 74  SelectStep(sqlit
2b560 65 33 2a 2c 53 65 6c 65 63 74 2a 2c 0a 20 20 20  e3*,Select*,.   
2b570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b590 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 2a       const char*
2b5a0 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20  ,const char*);. 
2b5b0 20 54 72 69 67 67 65 72 53 74 65 70 20 2a 73 71   TriggerStep *sq
2b5c0 6c 69 74 65 33 54 72 69 67 67 65 72 49 6e 73 65  lite3TriggerInse
2b5d0 72 74 53 74 65 70 28 73 71 6c 69 74 65 33 2a 2c  rtStep(sqlite3*,
2b5e0 54 6f 6b 65 6e 2a 2c 20 49 64 4c 69 73 74 2a 2c  Token*, IdList*,
2b5f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2b600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b610 20 20 20 20 20 20 20 20 20 53 65 6c 65 63 74 2a           Select*
2b620 2c 75 38 2c 55 70 73 65 72 74 2a 2c 0a 20 20 20  ,u8,Upsert*,.   
2b630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b650 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 2a       const char*
2b660 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20  ,const char*);. 
2b670 20 54 72 69 67 67 65 72 53 74 65 70 20 2a 73 71   TriggerStep *sq
2b680 6c 69 74 65 33 54 72 69 67 67 65 72 55 70 64 61  lite3TriggerUpda
2b690 74 65 53 74 65 70 28 73 71 6c 69 74 65 33 2a 2c  teStep(sqlite3*,
2b6a0 54 6f 6b 65 6e 2a 2c 45 78 70 72 4c 69 73 74 2a  Token*,ExprList*
2b6b0 2c 20 45 78 70 72 2a 2c 20 75 38 2c 0a 20 20 20  , Expr*, u8,.   
2b6c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b6d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b6e0 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 2a       const char*
2b6f0 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20  ,const char*);. 
2b700 20 54 72 69 67 67 65 72 53 74 65 70 20 2a 73 71   TriggerStep *sq
2b710 6c 69 74 65 33 54 72 69 67 67 65 72 44 65 6c 65  lite3TriggerDele
2b720 74 65 53 74 65 70 28 73 71 6c 69 74 65 33 2a 2c  teStep(sqlite3*,
2b730 54 6f 6b 65 6e 2a 2c 20 45 78 70 72 2a 2c 0a 20  Token*, Expr*,. 
2b740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b760 20 20 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61         const cha
2b770 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  r*,const char*);
2b780 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 44  .  void sqlite3D
2b790 65 6c 65 74 65 54 72 69 67 67 65 72 28 73 71 6c  eleteTrigger(sql
2b7a0 69 74 65 33 2a 2c 20 54 72 69 67 67 65 72 2a 29  ite3*, Trigger*)
2b7b0 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
2b7c0 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65 54  UnlinkAndDeleteT
2b7d0 72 69 67 67 65 72 28 73 71 6c 69 74 65 33 2a 2c  rigger(sqlite3*,
2b7e0 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29  int,const char*)
2b7f0 3b 0a 20 20 75 33 32 20 73 71 6c 69 74 65 33 54  ;.  u32 sqlite3T
2b800 72 69 67 67 65 72 43 6f 6c 6d 61 73 6b 28 50 61  riggerColmask(Pa
2b810 72 73 65 2a 2c 54 72 69 67 67 65 72 2a 2c 45 78  rse*,Trigger*,Ex
2b820 70 72 4c 69 73 74 2a 2c 69 6e 74 2c 69 6e 74 2c  prList*,int,int,
2b830 54 61 62 6c 65 2a 2c 69 6e 74 29 3b 0a 23 20 64  Table*,int);.# d
2b840 65 66 69 6e 65 20 73 71 6c 69 74 65 33 50 61 72  efine sqlite3Par
2b850 73 65 54 6f 70 6c 65 76 65 6c 28 70 29 20 28 28  seToplevel(p) ((
2b860 70 29 2d 3e 70 54 6f 70 6c 65 76 65 6c 20 3f 20  p)->pToplevel ? 
2b870 28 70 29 2d 3e 70 54 6f 70 6c 65 76 65 6c 20 3a  (p)->pToplevel :
2b880 20 28 70 29 29 0a 23 20 64 65 66 69 6e 65 20 73   (p)).# define s
2b890 71 6c 69 74 65 33 49 73 54 6f 70 6c 65 76 65 6c  qlite3IsToplevel
2b8a0 28 70 29 20 28 28 70 29 2d 3e 70 54 6f 70 6c 65  (p) ((p)->pTople
2b8b0 76 65 6c 3d 3d 30 29 0a 23 65 6c 73 65 0a 23 20  vel==0).#else.# 
2b8c0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54 72  define sqlite3Tr
2b8d0 69 67 67 65 72 73 45 78 69 73 74 28 42 2c 43 2c  iggersExist(B,C,
2b8e0 44 2c 45 2c 46 29 20 30 0a 23 20 64 65 66 69 6e  D,E,F) 0.# defin
2b8f0 65 20 73 71 6c 69 74 65 33 44 65 6c 65 74 65 54  e sqlite3DeleteT
2b900 72 69 67 67 65 72 28 41 2c 42 29 0a 23 20 64 65  rigger(A,B).# de
2b910 66 69 6e 65 20 73 71 6c 69 74 65 33 44 72 6f 70  fine sqlite3Drop
2b920 54 72 69 67 67 65 72 50 74 72 28 41 2c 42 29 0a  TriggerPtr(A,B).
2b930 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
2b940 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65 54  UnlinkAndDeleteT
2b950 72 69 67 67 65 72 28 41 2c 42 2c 43 29 0a 23 20  rigger(A,B,C).# 
2b960 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 43 6f  define sqlite3Co
2b970 64 65 52 6f 77 54 72 69 67 67 65 72 28 41 2c 42  deRowTrigger(A,B
2b980 2c 43 2c 44 2c 45 2c 46 2c 47 2c 48 2c 49 29 0a  ,C,D,E,F,G,H,I).
2b990 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
2b9a0 43 6f 64 65 52 6f 77 54 72 69 67 67 65 72 44 69  CodeRowTriggerDi
2b9b0 72 65 63 74 28 41 2c 42 2c 43 2c 44 2c 45 2c 46  rect(A,B,C,D,E,F
2b9c0 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
2b9d0 65 33 54 72 69 67 67 65 72 4c 69 73 74 28 58 2c  e3TriggerList(X,
2b9e0 20 59 29 20 30 0a 23 20 64 65 66 69 6e 65 20 73   Y) 0.# define s
2b9f0 71 6c 69 74 65 33 50 61 72 73 65 54 6f 70 6c 65  qlite3ParseTople
2ba00 76 65 6c 28 70 29 20 70 0a 23 20 64 65 66 69 6e  vel(p) p.# defin
2ba10 65 20 73 71 6c 69 74 65 33 49 73 54 6f 70 6c 65  e sqlite3IsTople
2ba20 76 65 6c 28 70 29 20 31 0a 23 20 64 65 66 69 6e  vel(p) 1.# defin
2ba30 65 20 73 71 6c 69 74 65 33 54 72 69 67 67 65 72  e sqlite3Trigger
2ba40 43 6f 6c 6d 61 73 6b 28 41 2c 42 2c 43 2c 44 2c  Colmask(A,B,C,D,
2ba50 45 2c 46 2c 47 29 20 30 0a 23 65 6e 64 69 66 0a  E,F,G) 0.#endif.
2ba60 0a 69 6e 74 20 73 71 6c 69 74 65 33 4a 6f 69 6e  .int sqlite3Join
2ba70 54 79 70 65 28 50 61 72 73 65 2a 2c 20 54 6f 6b  Type(Parse*, Tok
2ba80 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b  en*, Token*, Tok
2ba90 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  en*);.void sqlit
2baa0 65 33 43 72 65 61 74 65 46 6f 72 65 69 67 6e 4b  e3CreateForeignK
2bab0 65 79 28 50 61 72 73 65 2a 2c 20 45 78 70 72 4c  ey(Parse*, ExprL
2bac0 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 45 78  ist*, Token*, Ex
2bad0 70 72 4c 69 73 74 2a 2c 20 69 6e 74 29 3b 0a 76  prList*, int);.v
2bae0 6f 69 64 20 73 71 6c 69 74 65 33 44 65 66 65 72  oid sqlite3Defer
2baf0 46 6f 72 65 69 67 6e 4b 65 79 28 50 61 72 73 65  ForeignKey(Parse
2bb00 2a 2c 20 69 6e 74 29 3b 0a 23 69 66 6e 64 65 66  *, int);.#ifndef
2bb10 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54   SQLITE_OMIT_AUT
2bb20 48 4f 52 49 5a 41 54 49 4f 4e 0a 20 20 76 6f 69  HORIZATION.  voi
2bb30 64 20 73 71 6c 69 74 65 33 41 75 74 68 52 65 61  d sqlite3AuthRea
2bb40 64 28 50 61 72 73 65 2a 2c 45 78 70 72 2a 2c 53  d(Parse*,Expr*,S
2bb50 63 68 65 6d 61 2a 2c 53 72 63 4c 69 73 74 2a 29  chema*,SrcList*)
2bb60 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 41  ;.  int sqlite3A
2bb70 75 74 68 43 68 65 63 6b 28 50 61 72 73 65 2a 2c  uthCheck(Parse*,
2bb80 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  int, const char*
2bb90 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63  , const char*, c
2bba0 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20 20 76  onst char*);.  v
2bbb0 6f 69 64 20 73 71 6c 69 74 65 33 41 75 74 68 43  oid sqlite3AuthC
2bbc0 6f 6e 74 65 78 74 50 75 73 68 28 50 61 72 73 65  ontextPush(Parse
2bbd0 2a 2c 20 41 75 74 68 43 6f 6e 74 65 78 74 2a 2c  *, AuthContext*,
2bbe0 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20   const char*);. 
2bbf0 20 76 6f 69 64 20 73 71 6c 69 74 65 33 41 75 74   void sqlite3Aut
2bc00 68 43 6f 6e 74 65 78 74 50 6f 70 28 41 75 74 68  hContextPop(Auth
2bc10 43 6f 6e 74 65 78 74 2a 29 3b 0a 20 20 69 6e 74  Context*);.  int
2bc20 20 73 71 6c 69 74 65 33 41 75 74 68 52 65 61 64   sqlite3AuthRead
2bc30 43 6f 6c 28 50 61 72 73 65 2a 2c 20 63 6f 6e 73  Col(Parse*, cons
2bc40 74 20 63 68 61 72 20 2a 2c 20 63 6f 6e 73 74 20  t char *, const 
2bc50 63 68 61 72 20 2a 2c 20 69 6e 74 29 3b 0a 23 65  char *, int);.#e
2bc60 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  lse.# define sql
2bc70 69 74 65 33 41 75 74 68 52 65 61 64 28 61 2c 62  ite3AuthRead(a,b
2bc80 2c 63 2c 64 29 0a 23 20 64 65 66 69 6e 65 20 73  ,c,d).# define s
2bc90 71 6c 69 74 65 33 41 75 74 68 43 68 65 63 6b 28  qlite3AuthCheck(
2bca0 61 2c 62 2c 63 2c 64 2c 65 29 20 20 20 20 53 51  a,b,c,d,e)    SQ
2bcb0 4c 49 54 45 5f 4f 4b 0a 23 20 64 65 66 69 6e 65  LITE_OK.# define
2bcc0 20 73 71 6c 69 74 65 33 41 75 74 68 43 6f 6e 74   sqlite3AuthCont
2bcd0 65 78 74 50 75 73 68 28 61 2c 62 2c 63 29 0a 23  extPush(a,b,c).#
2bce0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 41   define sqlite3A
2bcf0 75 74 68 43 6f 6e 74 65 78 74 50 6f 70 28 61 29  uthContextPop(a)
2bd00 20 20 28 28 76 6f 69 64 29 28 61 29 29 0a 23 65    ((void)(a)).#e
2bd10 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65  ndif.void sqlite
2bd20 33 41 74 74 61 63 68 28 50 61 72 73 65 2a 2c 20  3Attach(Parse*, 
2bd30 45 78 70 72 2a 2c 20 45 78 70 72 2a 2c 20 45 78  Expr*, Expr*, Ex
2bd40 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  pr*);.void sqlit
2bd50 65 33 44 65 74 61 63 68 28 50 61 72 73 65 2a 2c  e3Detach(Parse*,
2bd60 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71   Expr*);.void sq
2bd70 6c 69 74 65 33 46 69 78 49 6e 69 74 28 44 62 46  lite3FixInit(DbF
2bd80 69 78 65 72 2a 2c 20 50 61 72 73 65 2a 2c 20 69  ixer*, Parse*, i
2bd90 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c  nt, const char*,
2bda0 20 63 6f 6e 73 74 20 54 6f 6b 65 6e 2a 29 3b 0a   const Token*);.
2bdb0 69 6e 74 20 73 71 6c 69 74 65 33 46 69 78 53 72  int sqlite3FixSr
2bdc0 63 4c 69 73 74 28 44 62 46 69 78 65 72 2a 2c 20  cList(DbFixer*, 
2bdd0 53 72 63 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73  SrcList*);.int s
2bde0 71 6c 69 74 65 33 46 69 78 53 65 6c 65 63 74 28  qlite3FixSelect(
2bdf0 44 62 46 69 78 65 72 2a 2c 20 53 65 6c 65 63 74  DbFixer*, Select
2be00 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46  *);.int sqlite3F
2be10 69 78 45 78 70 72 28 44 62 46 69 78 65 72 2a 2c  ixExpr(DbFixer*,
2be20 20 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c   Expr*);.int sql
2be30 69 74 65 33 46 69 78 45 78 70 72 4c 69 73 74 28  ite3FixExprList(
2be40 44 62 46 69 78 65 72 2a 2c 20 45 78 70 72 4c 69  DbFixer*, ExprLi
2be50 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  st*);.int sqlite
2be60 33 46 69 78 54 72 69 67 67 65 72 53 74 65 70 28  3FixTriggerStep(
2be70 44 62 46 69 78 65 72 2a 2c 20 54 72 69 67 67 65  DbFixer*, Trigge
2be80 72 53 74 65 70 2a 29 3b 0a 69 6e 74 20 73 71 6c  rStep*);.int sql
2be90 69 74 65 33 41 74 6f 46 28 63 6f 6e 73 74 20 63  ite3AtoF(const c
2bea0 68 61 72 20 2a 7a 2c 20 64 6f 75 62 6c 65 2a 2c  har *z, double*,
2beb0 20 69 6e 74 2c 20 75 38 29 3b 0a 69 6e 74 20 73   int, u8);.int s
2bec0 71 6c 69 74 65 33 47 65 74 49 6e 74 33 32 28 63  qlite3GetInt32(c
2bed0 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20 69 6e 74  onst char *, int
2bee0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 41  *);.int sqlite3A
2bef0 74 6f 69 28 63 6f 6e 73 74 20 63 68 61 72 2a 29  toi(const char*)
2bf00 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ;.#ifndef SQLITE
2bf10 5f 4f 4d 49 54 5f 55 54 46 31 36 0a 69 6e 74 20  _OMIT_UTF16.int 
2bf20 73 71 6c 69 74 65 33 55 74 66 31 36 42 79 74 65  sqlite3Utf16Byte
2bf30 4c 65 6e 28 63 6f 6e 73 74 20 76 6f 69 64 20 2a  Len(const void *
2bf40 70 44 61 74 61 2c 20 69 6e 74 20 6e 43 68 61 72  pData, int nChar
2bf50 29 3b 0a 23 65 6e 64 69 66 0a 69 6e 74 20 73 71  );.#endif.int sq
2bf60 6c 69 74 65 33 55 74 66 38 43 68 61 72 4c 65 6e  lite3Utf8CharLen
2bf70 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 70 44 61  (const char *pDa
2bf80 74 61 2c 20 69 6e 74 20 6e 42 79 74 65 29 3b 0a  ta, int nByte);.
2bf90 75 33 32 20 73 71 6c 69 74 65 33 55 74 66 38 52  u32 sqlite3Utf8R
2bfa0 65 61 64 28 63 6f 6e 73 74 20 75 38 2a 2a 29 3b  ead(const u8**);
2bfb0 0a 4c 6f 67 45 73 74 20 73 71 6c 69 74 65 33 4c  .LogEst sqlite3L
2bfc0 6f 67 45 73 74 28 75 36 34 29 3b 0a 4c 6f 67 45  ogEst(u64);.LogE
2bfd0 73 74 20 73 71 6c 69 74 65 33 4c 6f 67 45 73 74  st sqlite3LogEst
2bfe0 41 64 64 28 4c 6f 67 45 73 74 2c 4c 6f 67 45 73  Add(LogEst,LogEs
2bff0 74 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  t);.#ifndef SQLI
2c000 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
2c010 41 42 4c 45 0a 4c 6f 67 45 73 74 20 73 71 6c 69  ABLE.LogEst sqli
2c020 74 65 33 4c 6f 67 45 73 74 46 72 6f 6d 44 6f 75  te3LogEstFromDou
2c030 62 6c 65 28 64 6f 75 62 6c 65 29 3b 0a 23 65 6e  ble(double);.#en
2c040 64 69 66 0a 23 69 66 20 64 65 66 69 6e 65 64 28  dif.#if defined(
2c050 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54  SQLITE_ENABLE_ST
2c060 4d 54 5f 53 43 41 4e 53 54 41 54 55 53 29 20 7c  MT_SCANSTATUS) |
2c070 7c 20 5c 0a 20 20 20 20 64 65 66 69 6e 65 64 28  | \.    defined(
2c080 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54  SQLITE_ENABLE_ST
2c090 41 54 33 5f 4f 52 5f 53 54 41 54 34 29 20 7c 7c  AT3_OR_STAT4) ||
2c0a0 20 5c 0a 20 20 20 20 64 65 66 69 6e 65 64 28 53   \.    defined(S
2c0b0 51 4c 49 54 45 5f 45 58 50 4c 41 49 4e 5f 45 53  QLITE_EXPLAIN_ES
2c0c0 54 49 4d 41 54 45 44 5f 52 4f 57 53 29 0a 75 36  TIMATED_ROWS).u6
2c0d0 34 20 73 71 6c 69 74 65 33 4c 6f 67 45 73 74 54  4 sqlite3LogEstT
2c0e0 6f 49 6e 74 28 4c 6f 67 45 73 74 29 3b 0a 23 65  oInt(LogEst);.#e
2c0f0 6e 64 69 66 0a 56 4c 69 73 74 20 2a 73 71 6c 69  ndif.VList *sqli
2c100 74 65 33 56 4c 69 73 74 41 64 64 28 73 71 6c 69  te3VListAdd(sqli
2c110 74 65 33 2a 2c 56 4c 69 73 74 2a 2c 63 6f 6e 73  te3*,VList*,cons
2c120 74 20 63 68 61 72 2a 2c 69 6e 74 2c 69 6e 74 29  t char*,int,int)
2c130 3b 0a 63 6f 6e 73 74 20 63 68 61 72 20 2a 73 71  ;.const char *sq
2c140 6c 69 74 65 33 56 4c 69 73 74 4e 75 6d 54 6f 4e  lite3VListNumToN
2c150 61 6d 65 28 56 4c 69 73 74 2a 2c 69 6e 74 29 3b  ame(VList*,int);
2c160 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 4c 69 73  .int sqlite3VLis
2c170 74 4e 61 6d 65 54 6f 4e 75 6d 28 56 4c 69 73 74  tNameToNum(VList
2c180 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 69 6e  *,const char*,in
2c190 74 29 3b 0a 0a 2f 2a 0a 2a 2a 20 52 6f 75 74 69  t);../*.** Routi
2c1a0 6e 65 73 20 74 6f 20 72 65 61 64 20 61 6e 64 20  nes to read and 
2c1b0 77 72 69 74 65 20 76 61 72 69 61 62 6c 65 2d 6c  write variable-l
2c1c0 65 6e 67 74 68 20 69 6e 74 65 67 65 72 73 2e 20  ength integers. 
2c1d0 20 54 68 65 73 65 20 75 73 65 64 20 74 6f 0a 2a   These used to.*
2c1e0 2a 20 62 65 20 64 65 66 69 6e 65 64 20 6c 6f 63  * be defined loc
2c1f0 61 6c 6c 79 2c 20 62 75 74 20 6e 6f 77 20 77 65  ally, but now we
2c200 20 75 73 65 20 74 68 65 20 76 61 72 69 6e 74 20   use the varint 
2c210 72 6f 75 74 69 6e 65 73 20 69 6e 20 74 68 65 20  routines in the 
2c220 75 74 69 6c 2e 63 0a 2a 2a 20 66 69 6c 65 2e 0a  util.c.** file..
2c230 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 50 75  */.int sqlite3Pu
2c240 74 56 61 72 69 6e 74 28 75 6e 73 69 67 6e 65 64  tVarint(unsigned
2c250 20 63 68 61 72 2a 2c 20 75 36 34 29 3b 0a 75 38   char*, u64);.u8
2c260 20 73 71 6c 69 74 65 33 47 65 74 56 61 72 69 6e   sqlite3GetVarin
2c270 74 28 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64  t(const unsigned
2c280 20 63 68 61 72 20 2a 2c 20 75 36 34 20 2a 29 3b   char *, u64 *);
2c290 0a 75 38 20 73 71 6c 69 74 65 33 47 65 74 56 61  .u8 sqlite3GetVa
2c2a0 72 69 6e 74 33 32 28 63 6f 6e 73 74 20 75 6e 73  rint32(const uns
2c2b0 69 67 6e 65 64 20 63 68 61 72 20 2a 2c 20 75 33  igned char *, u3
2c2c0 32 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  2 *);.int sqlite
2c2d0 33 56 61 72 69 6e 74 4c 65 6e 28 75 36 34 20 76  3VarintLen(u64 v
2c2e0 29 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 63 6f  );../*.** The co
2c2f0 6d 6d 6f 6e 20 63 61 73 65 20 69 73 20 66 6f 72  mmon case is for
2c300 20 61 20 76 61 72 69 6e 74 20 74 6f 20 62 65 20   a varint to be 
2c310 61 20 73 69 6e 67 6c 65 20 62 79 74 65 2e 20 20  a single byte.  
2c320 54 68 65 79 20 66 6f 6c 6c 6f 77 69 6e 67 0a 2a  They following.*
2c330 2a 20 6d 61 63 72 6f 73 20 68 61 6e 64 6c 65 20  * macros handle 
2c340 74 68 65 20 63 6f 6d 6d 6f 6e 20 63 61 73 65 20  the common case 
2c350 77 69 74 68 6f 75 74 20 61 20 70 72 6f 63 65 64  without a proced
2c360 75 72 65 20 63 61 6c 6c 2c 20 62 75 74 20 74 68  ure call, but th
2c370 65 6e 20 63 61 6c 6c 0a 2a 2a 20 74 68 65 20 70  en call.** the p
2c380 72 6f 63 65 64 75 72 65 20 66 6f 72 20 6c 61 72  rocedure for lar
2c390 67 65 72 20 76 61 72 69 6e 74 73 2e 0a 2a 2f 0a  ger varints..*/.
2c3a0 23 64 65 66 69 6e 65 20 67 65 74 56 61 72 69 6e  #define getVarin
2c3b0 74 33 32 28 41 2c 42 29 20 20 5c 0a 20 20 28 75  t32(A,B)  \.  (u
2c3c0 38 29 28 28 2a 28 41 29 3c 28 75 38 29 30 78 38  8)((*(A)<(u8)0x8
2c3d0 30 29 3f 28 28 42 29 3d 28 75 33 32 29 2a 28 41  0)?((B)=(u32)*(A
2c3e0 29 29 2c 31 3a 73 71 6c 69 74 65 33 47 65 74 56  )),1:sqlite3GetV
2c3f0 61 72 69 6e 74 33 32 28 28 41 29 2c 28 75 33 32  arint32((A),(u32
2c400 20 2a 29 26 28 42 29 29 29 0a 23 64 65 66 69 6e   *)&(B))).#defin
2c410 65 20 70 75 74 56 61 72 69 6e 74 33 32 28 41 2c  e putVarint32(A,
2c420 42 29 20 20 5c 0a 20 20 28 75 38 29 28 28 28 75  B)  \.  (u8)(((u
2c430 33 32 29 28 42 29 3c 28 75 33 32 29 30 78 38 30  32)(B)<(u32)0x80
2c440 29 3f 28 2a 28 41 29 3d 28 75 6e 73 69 67 6e 65  )?(*(A)=(unsigne
2c450 64 20 63 68 61 72 29 28 42 29 29 2c 31 3a 5c 0a  d char)(B)),1:\.
2c460 20 20 73 71 6c 69 74 65 33 50 75 74 56 61 72 69    sqlite3PutVari
2c470 6e 74 28 28 41 29 2c 28 42 29 29 29 0a 23 64 65  nt((A),(B))).#de
2c480 66 69 6e 65 20 67 65 74 56 61 72 69 6e 74 20 20  fine getVarint  
2c490 20 20 73 71 6c 69 74 65 33 47 65 74 56 61 72 69    sqlite3GetVari
2c4a0 6e 74 0a 23 64 65 66 69 6e 65 20 70 75 74 56 61  nt.#define putVa
2c4b0 72 69 6e 74 20 20 20 20 73 71 6c 69 74 65 33 50  rint    sqlite3P
2c4c0 75 74 56 61 72 69 6e 74 0a 0a 0a 63 6f 6e 73 74  utVarint...const
2c4d0 20 63 68 61 72 20 2a 73 71 6c 69 74 65 33 49 6e   char *sqlite3In
2c4e0 64 65 78 41 66 66 69 6e 69 74 79 53 74 72 28 73  dexAffinityStr(s
2c4f0 71 6c 69 74 65 33 2a 2c 20 49 6e 64 65 78 2a 29  qlite3*, Index*)
2c500 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 54 61  ;.void sqlite3Ta
2c510 62 6c 65 41 66 66 69 6e 69 74 79 28 56 64 62 65  bleAffinity(Vdbe
2c520 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 29 3b  *, Table*, int);
2c530 0a 63 68 61 72 20 73 71 6c 69 74 65 33 43 6f 6d  .char sqlite3Com
2c540 70 61 72 65 41 66 66 69 6e 69 74 79 28 45 78 70  pareAffinity(Exp
2c550 72 20 2a 70 45 78 70 72 2c 20 63 68 61 72 20 61  r *pExpr, char a
2c560 66 66 32 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  ff2);.int sqlite
2c570 33 49 6e 64 65 78 41 66 66 69 6e 69 74 79 4f 6b  3IndexAffinityOk
2c580 28 45 78 70 72 20 2a 70 45 78 70 72 2c 20 63 68  (Expr *pExpr, ch
2c590 61 72 20 69 64 78 5f 61 66 66 69 6e 69 74 79 29  ar idx_affinity)
2c5a0 3b 0a 63 68 61 72 20 73 71 6c 69 74 65 33 54 61  ;.char sqlite3Ta
2c5b0 62 6c 65 43 6f 6c 75 6d 6e 41 66 66 69 6e 69 74  bleColumnAffinit
2c5c0 79 28 54 61 62 6c 65 2a 2c 69 6e 74 29 3b 0a 63  y(Table*,int);.c
2c5d0 68 61 72 20 73 71 6c 69 74 65 33 45 78 70 72 41  har sqlite3ExprA
2c5e0 66 66 69 6e 69 74 79 28 45 78 70 72 20 2a 70 45  ffinity(Expr *pE
2c5f0 78 70 72 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  xpr);.int sqlite
2c600 33 41 74 6f 69 36 34 28 63 6f 6e 73 74 20 63 68  3Atoi64(const ch
2c610 61 72 2a 2c 20 69 36 34 2a 2c 20 69 6e 74 2c 20  ar*, i64*, int, 
2c620 75 38 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  u8);.int sqlite3
2c630 44 65 63 4f 72 48 65 78 54 6f 49 36 34 28 63 6f  DecOrHexToI64(co
2c640 6e 73 74 20 63 68 61 72 2a 2c 20 69 36 34 2a 29  nst char*, i64*)
2c650 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 72  ;.void sqlite3Er
2c660 72 6f 72 57 69 74 68 4d 73 67 28 73 71 6c 69 74  rorWithMsg(sqlit
2c670 65 33 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20  e3*, int, const 
2c680 63 68 61 72 2a 2c 2e 2e 2e 29 3b 0a 76 6f 69 64  char*,...);.void
2c690 20 73 71 6c 69 74 65 33 45 72 72 6f 72 28 73 71   sqlite3Error(sq
2c6a0 6c 69 74 65 33 2a 2c 69 6e 74 29 3b 0a 76 6f 69  lite3*,int);.voi
2c6b0 64 20 73 71 6c 69 74 65 33 53 79 73 74 65 6d 45  d sqlite3SystemE
2c6c0 72 72 6f 72 28 73 71 6c 69 74 65 33 2a 2c 69 6e  rror(sqlite3*,in
2c6d0 74 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65  t);.void *sqlite
2c6e0 33 48 65 78 54 6f 42 6c 6f 62 28 73 71 6c 69 74  3HexToBlob(sqlit
2c6f0 65 33 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20  e3*, const char 
2c700 2a 7a 2c 20 69 6e 74 20 6e 29 3b 0a 75 38 20 73  *z, int n);.u8 s
2c710 71 6c 69 74 65 33 48 65 78 54 6f 49 6e 74 28 69  qlite3HexToInt(i
2c720 6e 74 20 68 29 3b 0a 69 6e 74 20 73 71 6c 69 74  nt h);.int sqlit
2c730 65 33 54 77 6f 50 61 72 74 4e 61 6d 65 28 50 61  e3TwoPartName(Pa
2c740 72 73 65 20 2a 2c 20 54 6f 6b 65 6e 20 2a 2c 20  rse *, Token *, 
2c750 54 6f 6b 65 6e 20 2a 2c 20 54 6f 6b 65 6e 20 2a  Token *, Token *
2c760 2a 29 3b 0a 0a 23 69 66 20 64 65 66 69 6e 65 64  *);..#if defined
2c770 28 53 51 4c 49 54 45 5f 4e 45 45 44 5f 45 52 52  (SQLITE_NEED_ERR
2c780 5f 4e 41 4d 45 29 0a 63 6f 6e 73 74 20 63 68 61  _NAME).const cha
2c790 72 20 2a 73 71 6c 69 74 65 33 45 72 72 4e 61 6d  r *sqlite3ErrNam
2c7a0 65 28 69 6e 74 29 3b 0a 23 65 6e 64 69 66 0a 0a  e(int);.#endif..
2c7b0 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e  #ifdef SQLITE_EN
2c7c0 41 42 4c 45 5f 44 45 53 45 52 49 41 4c 49 5a 45  ABLE_DESERIALIZE
2c7d0 0a 69 6e 74 20 73 71 6c 69 74 65 33 4d 65 6d 64  .int sqlite3Memd
2c7e0 62 49 6e 69 74 28 76 6f 69 64 29 3b 0a 23 65 6e  bInit(void);.#en
2c7f0 64 69 66 0a 0a 63 6f 6e 73 74 20 63 68 61 72 20  dif..const char 
2c800 2a 73 71 6c 69 74 65 33 45 72 72 53 74 72 28 69  *sqlite3ErrStr(i
2c810 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  nt);.int sqlite3
2c820 52 65 61 64 53 63 68 65 6d 61 28 50 61 72 73 65  ReadSchema(Parse
2c830 20 2a 70 50 61 72 73 65 29 3b 0a 43 6f 6c 6c 53   *pParse);.CollS
2c840 65 71 20 2a 73 71 6c 69 74 65 33 46 69 6e 64 43  eq *sqlite3FindC
2c850 6f 6c 6c 53 65 71 28 73 71 6c 69 74 65 33 2a 2c  ollSeq(sqlite3*,
2c860 75 38 20 65 6e 63 2c 20 63 6f 6e 73 74 20 63 68  u8 enc, const ch
2c870 61 72 2a 2c 69 6e 74 29 3b 0a 69 6e 74 20 73 71  ar*,int);.int sq
2c880 6c 69 74 65 33 49 73 42 69 6e 61 72 79 28 63 6f  lite3IsBinary(co
2c890 6e 73 74 20 43 6f 6c 6c 53 65 71 2a 29 3b 0a 43  nst CollSeq*);.C
2c8a0 6f 6c 6c 53 65 71 20 2a 73 71 6c 69 74 65 33 4c  ollSeq *sqlite3L
2c8b0 6f 63 61 74 65 43 6f 6c 6c 53 65 71 28 50 61 72  ocateCollSeq(Par
2c8c0 73 65 20 2a 70 50 61 72 73 65 2c 20 63 6f 6e 73  se *pParse, cons
2c8d0 74 20 63 68 61 72 2a 7a 4e 61 6d 65 29 3b 0a 43  t char*zName);.C
2c8e0 6f 6c 6c 53 65 71 20 2a 73 71 6c 69 74 65 33 45  ollSeq *sqlite3E
2c8f0 78 70 72 43 6f 6c 6c 53 65 71 28 50 61 72 73 65  xprCollSeq(Parse
2c900 20 2a 70 50 61 72 73 65 2c 20 45 78 70 72 20 2a   *pParse, Expr *
2c910 70 45 78 70 72 29 3b 0a 43 6f 6c 6c 53 65 71 20  pExpr);.CollSeq 
2c920 2a 73 71 6c 69 74 65 33 45 78 70 72 4e 4e 43 6f  *sqlite3ExprNNCo
2c930 6c 6c 53 65 71 28 50 61 72 73 65 20 2a 70 50 61  llSeq(Parse *pPa
2c940 72 73 65 2c 20 45 78 70 72 20 2a 70 45 78 70 72  rse, Expr *pExpr
2c950 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78  );.int sqlite3Ex
2c960 70 72 43 6f 6c 6c 53 65 71 4d 61 74 63 68 28 50  prCollSeqMatch(P
2c970 61 72 73 65 2a 2c 45 78 70 72 2a 2c 45 78 70 72  arse*,Expr*,Expr
2c980 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65  *);.Expr *sqlite
2c990 33 45 78 70 72 41 64 64 43 6f 6c 6c 61 74 65 54  3ExprAddCollateT
2c9a0 6f 6b 65 6e 28 50 61 72 73 65 20 2a 70 50 61 72  oken(Parse *pPar
2c9b0 73 65 2c 20 45 78 70 72 2a 2c 20 63 6f 6e 73 74  se, Expr*, const
2c9c0 20 54 6f 6b 65 6e 2a 2c 20 69 6e 74 29 3b 0a 45   Token*, int);.E
2c9d0 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72  xpr *sqlite3Expr
2c9e0 41 64 64 43 6f 6c 6c 61 74 65 53 74 72 69 6e 67  AddCollateString
2c9f0 28 50 61 72 73 65 2a 2c 45 78 70 72 2a 2c 63 6f  (Parse*,Expr*,co
2ca00 6e 73 74 20 63 68 61 72 2a 29 3b 0a 45 78 70 72  nst char*);.Expr
2ca10 20 2a 73 71 6c 69 74 65 33 45 78 70 72 53 6b 69   *sqlite3ExprSki
2ca20 70 43 6f 6c 6c 61 74 65 28 45 78 70 72 2a 29 3b  pCollate(Expr*);
2ca30 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 68 65 63  .int sqlite3Chec
2ca40 6b 43 6f 6c 6c 53 65 71 28 50 61 72 73 65 20 2a  kCollSeq(Parse *
2ca50 2c 20 43 6f 6c 6c 53 65 71 20 2a 29 3b 0a 69 6e  , CollSeq *);.in
2ca60 74 20 73 71 6c 69 74 65 33 43 68 65 63 6b 4f 62  t sqlite3CheckOb
2ca70 6a 65 63 74 4e 61 6d 65 28 50 61 72 73 65 20 2a  jectName(Parse *
2ca80 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 29 3b  , const char *);
2ca90 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 64 62  .void sqlite3Vdb
2caa0 65 53 65 74 43 68 61 6e 67 65 73 28 73 71 6c 69  eSetChanges(sqli
2cab0 74 65 33 20 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74  te3 *, int);.int
2cac0 20 73 71 6c 69 74 65 33 41 64 64 49 6e 74 36 34   sqlite3AddInt64
2cad0 28 69 36 34 2a 2c 69 36 34 29 3b 0a 69 6e 74 20  (i64*,i64);.int 
2cae0 73 71 6c 69 74 65 33 53 75 62 49 6e 74 36 34 28  sqlite3SubInt64(
2caf0 69 36 34 2a 2c 69 36 34 29 3b 0a 69 6e 74 20 73  i64*,i64);.int s
2cb00 71 6c 69 74 65 33 4d 75 6c 49 6e 74 36 34 28 69  qlite3MulInt64(i
2cb10 36 34 2a 2c 69 36 34 29 3b 0a 69 6e 74 20 73 71  64*,i64);.int sq
2cb20 6c 69 74 65 33 41 62 73 49 6e 74 33 32 28 69 6e  lite3AbsInt32(in
2cb30 74 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54  t);.#ifdef SQLIT
2cb40 45 5f 45 4e 41 42 4c 45 5f 38 5f 33 5f 4e 41 4d  E_ENABLE_8_3_NAM
2cb50 45 53 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 46  ES.void sqlite3F
2cb60 69 6c 65 53 75 66 66 69 78 33 28 63 6f 6e 73 74  ileSuffix3(const
2cb70 20 63 68 61 72 2a 2c 20 63 68 61 72 2a 29 3b 0a   char*, char*);.
2cb80 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73  #else.# define s
2cb90 71 6c 69 74 65 33 46 69 6c 65 53 75 66 66 69 78  qlite3FileSuffix
2cba0 33 28 58 2c 59 29 0a 23 65 6e 64 69 66 0a 75 38  3(X,Y).#endif.u8
2cbb0 20 73 71 6c 69 74 65 33 47 65 74 42 6f 6f 6c 65   sqlite3GetBoole
2cbc0 61 6e 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  an(const char *z
2cbd0 2c 75 38 29 3b 0a 0a 63 6f 6e 73 74 20 76 6f 69  ,u8);..const voi
2cbe0 64 20 2a 73 71 6c 69 74 65 33 56 61 6c 75 65 54  d *sqlite3ValueT
2cbf0 65 78 74 28 73 71 6c 69 74 65 33 5f 76 61 6c 75  ext(sqlite3_valu
2cc00 65 2a 2c 20 75 38 29 3b 0a 69 6e 74 20 73 71 6c  e*, u8);.int sql
2cc10 69 74 65 33 56 61 6c 75 65 42 79 74 65 73 28 73  ite3ValueBytes(s
2cc20 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2c 20 75  qlite3_value*, u
2cc30 38 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  8);.void sqlite3
2cc40 56 61 6c 75 65 53 65 74 53 74 72 28 73 71 6c 69  ValueSetStr(sqli
2cc50 74 65 33 5f 76 61 6c 75 65 2a 2c 20 69 6e 74 2c  te3_value*, int,
2cc60 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a 2c 75 38   const void *,u8
2cc70 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
2cc80 20 20 20 20 20 20 20 20 20 20 76 6f 69 64 28 2a            void(*
2cc90 29 28 76 6f 69 64 2a 29 29 3b 0a 76 6f 69 64 20  )(void*));.void 
2cca0 73 71 6c 69 74 65 33 56 61 6c 75 65 53 65 74 4e  sqlite3ValueSetN
2ccb0 75 6c 6c 28 73 71 6c 69 74 65 33 5f 76 61 6c 75  ull(sqlite3_valu
2ccc0 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  e*);.void sqlite
2ccd0 33 56 61 6c 75 65 46 72 65 65 28 73 71 6c 69 74  3ValueFree(sqlit
2cce0 65 33 5f 76 61 6c 75 65 2a 29 3b 0a 73 71 6c 69  e3_value*);.sqli
2ccf0 74 65 33 5f 76 61 6c 75 65 20 2a 73 71 6c 69 74  te3_value *sqlit
2cd00 65 33 56 61 6c 75 65 4e 65 77 28 73 71 6c 69 74  e3ValueNew(sqlit
2cd10 65 33 20 2a 29 3b 0a 23 69 66 6e 64 65 66 20 53  e3 *);.#ifndef S
2cd20 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36  QLITE_OMIT_UTF16
2cd30 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33 55 74  .char *sqlite3Ut
2cd40 66 31 36 74 6f 38 28 73 71 6c 69 74 65 33 20 2a  f16to8(sqlite3 *
2cd50 2c 20 63 6f 6e 73 74 20 76 6f 69 64 2a 2c 20 69  , const void*, i
2cd60 6e 74 2c 20 75 38 29 3b 0a 23 65 6e 64 69 66 0a  nt, u8);.#endif.
2cd70 69 6e 74 20 73 71 6c 69 74 65 33 56 61 6c 75 65  int sqlite3Value
2cd80 46 72 6f 6d 45 78 70 72 28 73 71 6c 69 74 65 33  FromExpr(sqlite3
2cd90 20 2a 2c 20 45 78 70 72 20 2a 2c 20 75 38 2c 20   *, Expr *, u8, 
2cda0 75 38 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c 75  u8, sqlite3_valu
2cdb0 65 20 2a 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  e **);.void sqli
2cdc0 74 65 33 56 61 6c 75 65 41 70 70 6c 79 41 66 66  te3ValueApplyAff
2cdd0 69 6e 69 74 79 28 73 71 6c 69 74 65 33 5f 76 61  inity(sqlite3_va
2cde0 6c 75 65 20 2a 2c 20 75 38 2c 20 75 38 29 3b 0a  lue *, u8, u8);.
2cdf0 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 41  #ifndef SQLITE_A
2ce00 4d 41 4c 47 41 4d 41 54 49 4f 4e 0a 65 78 74 65  MALGAMATION.exte
2ce10 72 6e 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65  rn const unsigne
2ce20 64 20 63 68 61 72 20 73 71 6c 69 74 65 33 4f 70  d char sqlite3Op
2ce30 63 6f 64 65 50 72 6f 70 65 72 74 79 5b 5d 3b 0a  codeProperty[];.
2ce40 65 78 74 65 72 6e 20 63 6f 6e 73 74 20 63 68 61  extern const cha
2ce50 72 20 73 71 6c 69 74 65 33 53 74 72 42 49 4e 41  r sqlite3StrBINA
2ce60 52 59 5b 5d 3b 0a 65 78 74 65 72 6e 20 63 6f 6e  RY[];.extern con
2ce70 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72  st unsigned char
2ce80 20 73 71 6c 69 74 65 33 55 70 70 65 72 54 6f 4c   sqlite3UpperToL
2ce90 6f 77 65 72 5b 5d 3b 0a 65 78 74 65 72 6e 20 63  ower[];.extern c
2cea0 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68  onst unsigned ch
2ceb0 61 72 20 73 71 6c 69 74 65 33 43 74 79 70 65 4d  ar sqlite3CtypeM
2cec0 61 70 5b 5d 3b 0a 65 78 74 65 72 6e 20 63 6f 6e  ap[];.extern con
2ced0 73 74 20 54 6f 6b 65 6e 20 73 71 6c 69 74 65 33  st Token sqlite3
2cee0 49 6e 74 54 6f 6b 65 6e 73 5b 5d 3b 0a 65 78 74  IntTokens[];.ext
2cef0 65 72 6e 20 53 51 4c 49 54 45 5f 57 53 44 20 73  ern SQLITE_WSD s
2cf00 74 72 75 63 74 20 53 71 6c 69 74 65 33 43 6f 6e  truct Sqlite3Con
2cf10 66 69 67 20 73 71 6c 69 74 65 33 43 6f 6e 66 69  fig sqlite3Confi
2cf20 67 3b 0a 65 78 74 65 72 6e 20 46 75 6e 63 44 65  g;.extern FuncDe
2cf30 66 48 61 73 68 20 73 71 6c 69 74 65 33 42 75 69  fHash sqlite3Bui
2cf40 6c 74 69 6e 46 75 6e 63 74 69 6f 6e 73 3b 0a 23  ltinFunctions;.#
2cf50 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
2cf60 49 54 5f 57 53 44 0a 65 78 74 65 72 6e 20 69 6e  IT_WSD.extern in
2cf70 74 20 73 71 6c 69 74 65 33 50 65 6e 64 69 6e 67  t sqlite3Pending
2cf80 42 79 74 65 3b 0a 23 65 6e 64 69 66 0a 23 65 6e  Byte;.#endif.#en
2cf90 64 69 66 0a 23 69 66 64 65 66 20 56 44 42 45 5f  dif.#ifdef VDBE_
2cfa0 50 52 4f 46 49 4c 45 0a 65 78 74 65 72 6e 20 73  PROFILE.extern s
2cfb0 71 6c 69 74 65 33 5f 75 69 6e 74 36 34 20 73 71  qlite3_uint64 sq
2cfc0 6c 69 74 65 33 4e 50 72 6f 66 69 6c 65 43 6e 74  lite3NProfileCnt
2cfd0 3b 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71  ;.#endif.void sq
2cfe0 6c 69 74 65 33 52 6f 6f 74 50 61 67 65 4d 6f 76  lite3RootPageMov
2cff0 65 64 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74  ed(sqlite3*, int
2d000 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69  , int, int);.voi
2d010 64 20 73 71 6c 69 74 65 33 52 65 69 6e 64 65 78  d sqlite3Reindex
2d020 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c  (Parse*, Token*,
2d030 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73   Token*);.void s
2d040 71 6c 69 74 65 33 41 6c 74 65 72 46 75 6e 63 74  qlite3AlterFunct
2d050 69 6f 6e 73 28 76 6f 69 64 29 3b 0a 76 6f 69 64  ions(void);.void
2d060 20 73 71 6c 69 74 65 33 41 6c 74 65 72 52 65 6e   sqlite3AlterRen
2d070 61 6d 65 54 61 62 6c 65 28 50 61 72 73 65 2a 2c  ameTable(Parse*,
2d080 20 53 72 63 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e   SrcList*, Token
2d090 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
2d0a0 41 6c 74 65 72 52 65 6e 61 6d 65 43 6f 6c 75 6d  AlterRenameColum
2d0b0 6e 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73  n(Parse*, SrcLis
2d0c0 74 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65  t*, Token*, Toke
2d0d0 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  n*);.int sqlite3
2d0e0 47 65 74 54 6f 6b 65 6e 28 63 6f 6e 73 74 20 75  GetToken(const u
2d0f0 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a 2c 20  nsigned char *, 
2d100 69 6e 74 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  int *);.void sql
2d110 69 74 65 33 4e 65 73 74 65 64 50 61 72 73 65 28  ite3NestedParse(
2d120 50 61 72 73 65 2a 2c 20 63 6f 6e 73 74 20 63 68  Parse*, const ch
2d130 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 76 6f 69 64 20  ar*, ...);.void 
2d140 73 71 6c 69 74 65 33 45 78 70 69 72 65 50 72 65  sqlite3ExpirePre
2d150 70 61 72 65 64 53 74 61 74 65 6d 65 6e 74 73 28  paredStatements(
2d160 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74 29 3b 0a  sqlite3*, int);.
2d170 69 6e 74 20 73 71 6c 69 74 65 33 43 6f 64 65 53  int sqlite3CodeS
2d180 75 62 73 65 6c 65 63 74 28 50 61 72 73 65 2a 2c  ubselect(Parse*,
2d190 20 45 78 70 72 20 2a 2c 20 69 6e 74 2c 20 69 6e   Expr *, int, in
2d1a0 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
2d1b0 53 65 6c 65 63 74 50 72 65 70 28 50 61 72 73 65  SelectPrep(Parse
2d1c0 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 4e 61 6d 65  *, Select*, Name
2d1d0 43 6f 6e 74 65 78 74 2a 29 3b 0a 76 6f 69 64 20  Context*);.void 
2d1e0 73 71 6c 69 74 65 33 53 65 6c 65 63 74 57 72 6f  sqlite3SelectWro
2d1f0 6e 67 4e 75 6d 54 65 72 6d 73 45 72 72 6f 72 28  ngNumTermsError(
2d200 50 61 72 73 65 20 2a 70 50 61 72 73 65 2c 20 53  Parse *pParse, S
2d210 65 6c 65 63 74 20 2a 70 29 3b 0a 69 6e 74 20 73  elect *p);.int s
2d220 71 6c 69 74 65 33 4d 61 74 63 68 53 70 61 6e 4e  qlite3MatchSpanN
2d230 61 6d 65 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c  ame(const char*,
2d240 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f   const char*, co
2d250 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74  nst char*, const
2d260 20 63 68 61 72 2a 29 3b 0a 69 6e 74 20 73 71 6c   char*);.int sql
2d270 69 74 65 33 52 65 73 6f 6c 76 65 45 78 70 72 4e  ite3ResolveExprN
2d280 61 6d 65 73 28 4e 61 6d 65 43 6f 6e 74 65 78 74  ames(NameContext
2d290 2a 2c 20 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73  *, Expr*);.int s
2d2a0 71 6c 69 74 65 33 52 65 73 6f 6c 76 65 45 78 70  qlite3ResolveExp
2d2b0 72 4c 69 73 74 4e 61 6d 65 73 28 4e 61 6d 65 43  rListNames(NameC
2d2c0 6f 6e 74 65 78 74 2a 2c 20 45 78 70 72 4c 69 73  ontext*, ExprLis
2d2d0 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  t*);.void sqlite
2d2e0 33 52 65 73 6f 6c 76 65 53 65 6c 65 63 74 4e 61  3ResolveSelectNa
2d2f0 6d 65 73 28 50 61 72 73 65 2a 2c 20 53 65 6c 65  mes(Parse*, Sele
2d300 63 74 2a 2c 20 4e 61 6d 65 43 6f 6e 74 65 78 74  ct*, NameContext
2d310 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
2d320 52 65 73 6f 6c 76 65 53 65 6c 66 52 65 66 65 72  ResolveSelfRefer
2d330 65 6e 63 65 28 50 61 72 73 65 2a 2c 54 61 62 6c  ence(Parse*,Tabl
2d340 65 2a 2c 69 6e 74 2c 45 78 70 72 2a 2c 45 78 70  e*,int,Expr*,Exp
2d350 72 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c  rList*);.int sql
2d360 69 74 65 33 52 65 73 6f 6c 76 65 4f 72 64 65 72  ite3ResolveOrder
2d370 47 72 6f 75 70 42 79 28 50 61 72 73 65 2a 2c 20  GroupBy(Parse*, 
2d380 53 65 6c 65 63 74 2a 2c 20 45 78 70 72 4c 69 73  Select*, ExprLis
2d390 74 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29  t*, const char*)
2d3a0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f  ;.void sqlite3Co
2d3b0 6c 75 6d 6e 44 65 66 61 75 6c 74 28 56 64 62 65  lumnDefault(Vdbe
2d3c0 20 2a 2c 20 54 61 62 6c 65 20 2a 2c 20 69 6e 74   *, Table *, int
2d3d0 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
2d3e0 69 74 65 33 41 6c 74 65 72 46 69 6e 69 73 68 41  ite3AlterFinishA
2d3f0 64 64 43 6f 6c 75 6d 6e 28 50 61 72 73 65 20 2a  ddColumn(Parse *
2d400 2c 20 54 6f 6b 65 6e 20 2a 29 3b 0a 76 6f 69 64  , Token *);.void
2d410 20 73 71 6c 69 74 65 33 41 6c 74 65 72 42 65 67   sqlite3AlterBeg
2d420 69 6e 41 64 64 43 6f 6c 75 6d 6e 28 50 61 72 73  inAddColumn(Pars
2d430 65 20 2a 2c 20 53 72 63 4c 69 73 74 20 2a 29 3b  e *, SrcList *);
2d440 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 6e  .void sqlite3Ren
2d450 61 6d 65 54 6f 6b 65 6e 28 50 61 72 73 65 2a 2c  ameToken(Parse*,
2d460 20 76 6f 69 64 2a 2c 20 54 6f 6b 65 6e 2a 29 3b   void*, Token*);
2d470 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 6f 76  .void sqlite3Mov
2d480 65 52 65 6e 61 6d 65 54 6f 6b 65 6e 28 50 61 72  eRenameToken(Par
2d490 73 65 2a 2c 20 76 6f 69 64 20 2a 70 54 6f 2c 20  se*, void *pTo, 
2d4a0 76 6f 69 64 20 2a 70 46 72 6f 6d 29 3b 0a 43 6f  void *pFrom);.Co
2d4b0 6c 6c 53 65 71 20 2a 73 71 6c 69 74 65 33 47 65  llSeq *sqlite3Ge
2d4c0 74 43 6f 6c 6c 53 65 71 28 50 61 72 73 65 2a 2c  tCollSeq(Parse*,
2d4d0 20 75 38 2c 20 43 6f 6c 6c 53 65 71 20 2a 2c 20   u8, CollSeq *, 
2d4e0 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 63 68  const char*);.ch
2d4f0 61 72 20 73 71 6c 69 74 65 33 41 66 66 69 6e 69  ar sqlite3Affini
2d500 74 79 54 79 70 65 28 63 6f 6e 73 74 20 63 68 61  tyType(const cha
2d510 72 2a 2c 20 43 6f 6c 75 6d 6e 2a 29 3b 0a 76 6f  r*, Column*);.vo
2d520 69 64 20 73 71 6c 69 74 65 33 41 6e 61 6c 79 7a  id sqlite3Analyz
2d530 65 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a  e(Parse*, Token*
2d540 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73  , Token*);.int s
2d550 71 6c 69 74 65 33 49 6e 76 6f 6b 65 42 75 73 79  qlite3InvokeBusy
2d560 48 61 6e 64 6c 65 72 28 42 75 73 79 48 61 6e 64  Handler(BusyHand
2d570 6c 65 72 2a 2c 20 73 71 6c 69 74 65 33 5f 66 69  ler*, sqlite3_fi
2d580 6c 65 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  le*);.int sqlite
2d590 33 46 69 6e 64 44 62 28 73 71 6c 69 74 65 33 2a  3FindDb(sqlite3*
2d5a0 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73  , Token*);.int s
2d5b0 71 6c 69 74 65 33 46 69 6e 64 44 62 4e 61 6d 65  qlite3FindDbName
2d5c0 28 73 71 6c 69 74 65 33 20 2a 2c 20 63 6f 6e 73  (sqlite3 *, cons
2d5d0 74 20 63 68 61 72 20 2a 29 3b 0a 69 6e 74 20 73  t char *);.int s
2d5e0 71 6c 69 74 65 33 41 6e 61 6c 79 73 69 73 4c 6f  qlite3AnalysisLo
2d5f0 61 64 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 20  ad(sqlite3*,int 
2d600 69 44 42 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  iDB);.void sqlit
2d610 65 33 44 65 6c 65 74 65 49 6e 64 65 78 53 61 6d  e3DeleteIndexSam
2d620 70 6c 65 73 28 73 71 6c 69 74 65 33 2a 2c 49 6e  ples(sqlite3*,In
2d630 64 65 78 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  dex*);.void sqli
2d640 74 65 33 44 65 66 61 75 6c 74 52 6f 77 45 73 74  te3DefaultRowEst
2d650 28 49 6e 64 65 78 2a 29 3b 0a 76 6f 69 64 20 73  (Index*);.void s
2d660 71 6c 69 74 65 33 52 65 67 69 73 74 65 72 4c 69  qlite3RegisterLi
2d670 6b 65 46 75 6e 63 74 69 6f 6e 73 28 73 71 6c 69  keFunctions(sqli
2d680 74 65 33 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20  te3*, int);.int 
2d690 73 71 6c 69 74 65 33 49 73 4c 69 6b 65 46 75 6e  sqlite3IsLikeFun
2d6a0 63 74 69 6f 6e 28 73 71 6c 69 74 65 33 2a 2c 45  ction(sqlite3*,E
2d6b0 78 70 72 2a 2c 69 6e 74 2a 2c 63 68 61 72 2a 29  xpr*,int*,char*)
2d6c0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 63  ;.void sqlite3Sc
2d6d0 68 65 6d 61 43 6c 65 61 72 28 76 6f 69 64 20 2a  hemaClear(void *
2d6e0 29 3b 0a 53 63 68 65 6d 61 20 2a 73 71 6c 69 74  );.Schema *sqlit
2d6f0 65 33 53 63 68 65 6d 61 47 65 74 28 73 71 6c 69  e3SchemaGet(sqli
2d700 74 65 33 20 2a 2c 20 42 74 72 65 65 20 2a 29 3b  te3 *, Btree *);
2d710 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 63 68 65  .int sqlite3Sche
2d720 6d 61 54 6f 49 6e 64 65 78 28 73 71 6c 69 74 65  maToIndex(sqlite
2d730 33 20 2a 64 62 2c 20 53 63 68 65 6d 61 20 2a 29  3 *db, Schema *)
2d740 3b 0a 4b 65 79 49 6e 66 6f 20 2a 73 71 6c 69 74  ;.KeyInfo *sqlit
2d750 65 33 4b 65 79 49 6e 66 6f 41 6c 6c 6f 63 28 73  e3KeyInfoAlloc(s
2d760 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 69 6e 74 29  qlite3*,int,int)
2d770 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4b 65  ;.void sqlite3Ke
2d780 79 49 6e 66 6f 55 6e 72 65 66 28 4b 65 79 49 6e  yInfoUnref(KeyIn
2d790 66 6f 2a 29 3b 0a 4b 65 79 49 6e 66 6f 20 2a 73  fo*);.KeyInfo *s
2d7a0 71 6c 69 74 65 33 4b 65 79 49 6e 66 6f 52 65 66  qlite3KeyInfoRef
2d7b0 28 4b 65 79 49 6e 66 6f 2a 29 3b 0a 4b 65 79 49  (KeyInfo*);.KeyI
2d7c0 6e 66 6f 20 2a 73 71 6c 69 74 65 33 4b 65 79 49  nfo *sqlite3KeyI
2d7d0 6e 66 6f 4f 66 49 6e 64 65 78 28 50 61 72 73 65  nfoOfIndex(Parse
2d7e0 2a 2c 20 49 6e 64 65 78 2a 29 3b 0a 4b 65 79 49  *, Index*);.KeyI
2d7f0 6e 66 6f 20 2a 73 71 6c 69 74 65 33 4b 65 79 49  nfo *sqlite3KeyI
2d800 6e 66 6f 46 72 6f 6d 45 78 70 72 4c 69 73 74 28  nfoFromExprList(
2d810 50 61 72 73 65 2a 2c 20 45 78 70 72 4c 69 73 74  Parse*, ExprList
2d820 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 0a 23  *, int, int);..#
2d830 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42  ifdef SQLITE_DEB
2d840 55 47 0a 69 6e 74 20 73 71 6c 69 74 65 33 4b 65  UG.int sqlite3Ke
2d850 79 49 6e 66 6f 49 73 57 72 69 74 65 61 62 6c 65  yInfoIsWriteable
2d860 28 4b 65 79 49 6e 66 6f 2a 29 3b 0a 23 65 6e 64  (KeyInfo*);.#end
2d870 69 66 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 72  if.int sqlite3Cr
2d880 65 61 74 65 46 75 6e 63 28 73 71 6c 69 74 65 33  eateFunc(sqlite3
2d890 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a   *, const char *
2d8a0 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 76 6f 69 64  , int, int, void
2d8b0 20 2a 2c 0a 20 20 76 6f 69 64 20 28 2a 29 28 73   *,.  void (*)(s
2d8c0 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c  qlite3_context*,
2d8d0 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75  int,sqlite3_valu
2d8e0 65 20 2a 2a 29 2c 0a 20 20 76 6f 69 64 20 28 2a  e **),.  void (*
2d8f0 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78  )(sqlite3_contex
2d900 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76  t*,int,sqlite3_v
2d910 61 6c 75 65 20 2a 2a 29 2c 20 0a 20 20 76 6f 69  alue **), .  voi
2d920 64 20 28 2a 29 28 73 71 6c 69 74 65 33 5f 63 6f  d (*)(sqlite3_co
2d930 6e 74 65 78 74 2a 29 2c 0a 20 20 76 6f 69 64 20  ntext*),.  void 
2d940 28 2a 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74  (*)(sqlite3_cont
2d950 65 78 74 2a 29 2c 0a 20 20 76 6f 69 64 20 28 2a  ext*),.  void (*
2d960 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78  )(sqlite3_contex
2d970 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76  t*,int,sqlite3_v
2d980 61 6c 75 65 20 2a 2a 29 2c 20 0a 20 20 46 75 6e  alue **), .  Fun
2d990 63 44 65 73 74 72 75 63 74 6f 72 20 2a 70 44 65  cDestructor *pDe
2d9a0 73 74 72 75 63 74 6f 72 0a 29 3b 0a 76 6f 69 64  structor.);.void
2d9b0 20 73 71 6c 69 74 65 33 4e 6f 6f 70 44 65 73 74   sqlite3NoopDest
2d9c0 72 75 63 74 6f 72 28 76 6f 69 64 2a 29 3b 0a 76  ructor(void*);.v
2d9d0 6f 69 64 20 73 71 6c 69 74 65 33 4f 6f 6d 46 61  oid sqlite3OomFa
2d9e0 75 6c 74 28 73 71 6c 69 74 65 33 2a 29 3b 0a 76  ult(sqlite3*);.v
2d9f0 6f 69 64 20 73 71 6c 69 74 65 33 4f 6f 6d 43 6c  oid sqlite3OomCl
2da00 65 61 72 28 73 71 6c 69 74 65 33 2a 29 3b 0a 69  ear(sqlite3*);.i
2da10 6e 74 20 73 71 6c 69 74 65 33 41 70 69 45 78 69  nt sqlite3ApiExi
2da20 74 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 69  t(sqlite3 *db, i
2da30 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  nt);.int sqlite3
2da40 4f 70 65 6e 54 65 6d 70 44 61 74 61 62 61 73 65  OpenTempDatabase
2da50 28 50 61 72 73 65 20 2a 29 3b 0a 0a 76 6f 69 64  (Parse *);..void
2da60 20 73 71 6c 69 74 65 33 53 74 72 41 63 63 75 6d   sqlite3StrAccum
2da70 49 6e 69 74 28 53 74 72 41 63 63 75 6d 2a 2c 20  Init(StrAccum*, 
2da80 73 71 6c 69 74 65 33 2a 2c 20 63 68 61 72 2a 2c  sqlite3*, char*,
2da90 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 63 68 61 72   int, int);.char
2daa0 20 2a 73 71 6c 69 74 65 33 53 74 72 41 63 63 75   *sqlite3StrAccu
2dab0 6d 46 69 6e 69 73 68 28 53 74 72 41 63 63 75 6d  mFinish(StrAccum
2dac0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
2dad0 53 65 6c 65 63 74 44 65 73 74 49 6e 69 74 28 53  SelectDestInit(S
2dae0 65 6c 65 63 74 44 65 73 74 2a 2c 69 6e 74 2c 69  electDest*,int,i
2daf0 6e 74 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74  nt);.Expr *sqlit
2db00 65 33 43 72 65 61 74 65 43 6f 6c 75 6d 6e 45 78  e3CreateColumnEx
2db10 70 72 28 73 71 6c 69 74 65 33 20 2a 2c 20 53 72  pr(sqlite3 *, Sr
2db20 63 4c 69 73 74 20 2a 2c 20 69 6e 74 2c 20 69 6e  cList *, int, in
2db30 74 29 3b 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65  t);..void sqlite
2db40 33 42 61 63 6b 75 70 52 65 73 74 61 72 74 28 73  3BackupRestart(s
2db50 71 6c 69 74 65 33 5f 62 61 63 6b 75 70 20 2a 29  qlite3_backup *)
2db60 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42 61  ;.void sqlite3Ba
2db70 63 6b 75 70 55 70 64 61 74 65 28 73 71 6c 69 74  ckupUpdate(sqlit
2db80 65 33 5f 62 61 63 6b 75 70 20 2a 2c 20 50 67 6e  e3_backup *, Pgn
2db90 6f 2c 20 63 6f 6e 73 74 20 75 38 20 2a 29 3b 0a  o, const u8 *);.
2dba0 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
2dbb0 4f 4d 49 54 5f 53 55 42 51 55 45 52 59 0a 69 6e  OMIT_SUBQUERY.in
2dbc0 74 20 73 71 6c 69 74 65 33 45 78 70 72 43 68 65  t sqlite3ExprChe
2dbd0 63 6b 49 4e 28 50 61 72 73 65 2a 2c 20 45 78 70  ckIN(Parse*, Exp
2dbe0 72 2a 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66  r*);.#else.# def
2dbf0 69 6e 65 20 73 71 6c 69 74 65 33 45 78 70 72 43  ine sqlite3ExprC
2dc00 68 65 63 6b 49 4e 28 78 2c 79 29 20 53 51 4c 49  heckIN(x,y) SQLI
2dc10 54 45 5f 4f 4b 0a 23 65 6e 64 69 66 0a 0a 23 69  TE_OK.#endif..#i
2dc20 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  fdef SQLITE_ENAB
2dc30 4c 45 5f 53 54 41 54 33 5f 4f 52 5f 53 54 41 54  LE_STAT3_OR_STAT
2dc40 34 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 6e  4.void sqlite3An
2dc50 61 6c 79 7a 65 46 75 6e 63 74 69 6f 6e 73 28 76  alyzeFunctions(v
2dc60 6f 69 64 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  oid);.int sqlite
2dc70 33 53 74 61 74 34 50 72 6f 62 65 53 65 74 56 61  3Stat4ProbeSetVa
2dc80 6c 75 65 28 0a 20 20 20 20 50 61 72 73 65 2a 2c  lue(.    Parse*,
2dc90 49 6e 64 65 78 2a 2c 55 6e 70 61 63 6b 65 64 52  Index*,UnpackedR
2dca0 65 63 6f 72 64 2a 2a 2c 45 78 70 72 2a 2c 69 6e  ecord**,Expr*,in
2dcb0 74 2c 69 6e 74 2c 69 6e 74 2a 29 3b 0a 69 6e 74  t,int,int*);.int
2dcc0 20 73 71 6c 69 74 65 33 53 74 61 74 34 56 61 6c   sqlite3Stat4Val
2dcd0 75 65 46 72 6f 6d 45 78 70 72 28 50 61 72 73 65  ueFromExpr(Parse
2dce0 2a 2c 20 45 78 70 72 2a 2c 20 75 38 2c 20 73 71  *, Expr*, u8, sq
2dcf0 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2a 29 3b 0a  lite3_value**);.
2dd00 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74 61 74  void sqlite3Stat
2dd10 34 50 72 6f 62 65 46 72 65 65 28 55 6e 70 61 63  4ProbeFree(Unpac
2dd20 6b 65 64 52 65 63 6f 72 64 2a 29 3b 0a 69 6e 74  kedRecord*);.int
2dd30 20 73 71 6c 69 74 65 33 53 74 61 74 34 43 6f 6c   sqlite3Stat4Col
2dd40 75 6d 6e 28 73 71 6c 69 74 65 33 2a 2c 20 63 6f  umn(sqlite3*, co
2dd50 6e 73 74 20 76 6f 69 64 2a 2c 20 69 6e 74 2c 20  nst void*, int, 
2dd60 69 6e 74 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c  int, sqlite3_val
2dd70 75 65 2a 2a 29 3b 0a 63 68 61 72 20 73 71 6c 69  ue**);.char sqli
2dd80 74 65 33 49 6e 64 65 78 43 6f 6c 75 6d 6e 41 66  te3IndexColumnAf
2dd90 66 69 6e 69 74 79 28 73 71 6c 69 74 65 33 2a 2c  finity(sqlite3*,
2dda0 20 49 6e 64 65 78 2a 2c 20 69 6e 74 29 3b 0a 23   Index*, int);.#
2ddb0 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  endif../*.** The
2ddc0 20 69 6e 74 65 72 66 61 63 65 20 74 6f 20 74 68   interface to th
2ddd0 65 20 4c 45 4d 4f 4e 2d 67 65 6e 65 72 61 74 65  e LEMON-generate
2dde0 64 20 70 61 72 73 65 72 0a 2a 2f 0a 23 69 66 6e  d parser.*/.#ifn
2ddf0 64 65 66 20 53 51 4c 49 54 45 5f 41 4d 41 4c 47  def SQLITE_AMALG
2de00 41 4d 41 54 49 4f 4e 0a 20 20 76 6f 69 64 20 2a  AMATION.  void *
2de10 73 71 6c 69 74 65 33 50 61 72 73 65 72 41 6c 6c  sqlite3ParserAll
2de20 6f 63 28 76 6f 69 64 2a 28 2a 29 28 75 36 34 29  oc(void*(*)(u64)
2de30 2c 20 50 61 72 73 65 2a 29 3b 0a 20 20 76 6f 69  , Parse*);.  voi
2de40 64 20 73 71 6c 69 74 65 33 50 61 72 73 65 72 46  d sqlite3ParserF
2de50 72 65 65 28 76 6f 69 64 2a 2c 20 76 6f 69 64 28  ree(void*, void(
2de60 2a 29 28 76 6f 69 64 2a 29 29 3b 0a 23 65 6e 64  *)(void*));.#end
2de70 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50  if.void sqlite3P
2de80 61 72 73 65 72 28 76 6f 69 64 2a 2c 20 69 6e 74  arser(void*, int
2de90 2c 20 54 6f 6b 65 6e 29 3b 0a 69 6e 74 20 73 71  , Token);.int sq
2dea0 6c 69 74 65 33 50 61 72 73 65 72 46 61 6c 6c 62  lite3ParserFallb
2deb0 61 63 6b 28 69 6e 74 29 3b 0a 23 69 66 64 65 66  ack(int);.#ifdef
2dec0 20 59 59 54 52 41 43 4b 4d 41 58 53 54 41 43 4b   YYTRACKMAXSTACK
2ded0 44 45 50 54 48 0a 20 20 69 6e 74 20 73 71 6c 69  DEPTH.  int sqli
2dee0 74 65 33 50 61 72 73 65 72 53 74 61 63 6b 50 65  te3ParserStackPe
2def0 61 6b 28 76 6f 69 64 2a 29 3b 0a 23 65 6e 64 69  ak(void*);.#endi
2df00 66 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41  f..void sqlite3A
2df10 75 74 6f 4c 6f 61 64 45 78 74 65 6e 73 69 6f 6e  utoLoadExtension
2df20 73 28 73 71 6c 69 74 65 33 2a 29 3b 0a 23 69 66  s(sqlite3*);.#if
2df30 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
2df40 5f 4c 4f 41 44 5f 45 58 54 45 4e 53 49 4f 4e 0a  _LOAD_EXTENSION.
2df50 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6c    void sqlite3Cl
2df60 6f 73 65 45 78 74 65 6e 73 69 6f 6e 73 28 73 71  oseExtensions(sq
2df70 6c 69 74 65 33 2a 29 3b 0a 23 65 6c 73 65 0a 23  lite3*);.#else.#
2df80 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 43   define sqlite3C
2df90 6c 6f 73 65 45 78 74 65 6e 73 69 6f 6e 73 28 58  loseExtensions(X
2dfa0 29 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65  ).#endif..#ifnde
2dfb0 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 48  f SQLITE_OMIT_SH
2dfc0 41 52 45 44 5f 43 41 43 48 45 0a 20 20 76 6f 69  ARED_CACHE.  voi
2dfd0 64 20 73 71 6c 69 74 65 33 54 61 62 6c 65 4c 6f  d sqlite3TableLo
2dfe0 63 6b 28 50 61 72 73 65 20 2a 2c 20 69 6e 74 2c  ck(Parse *, int,
2dff0 20 69 6e 74 2c 20 75 38 2c 20 63 6f 6e 73 74 20   int, u8, const 
2e000 63 68 61 72 20 2a 29 3b 0a 23 65 6c 73 65 0a 20  char *);.#else. 
2e010 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33   #define sqlite3
2e020 54 61 62 6c 65 4c 6f 63 6b 28 76 2c 77 2c 78 2c  TableLock(v,w,x,
2e030 79 2c 7a 29 0a 23 65 6e 64 69 66 0a 0a 23 69 66  y,z).#endif..#if
2e040 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a  def SQLITE_TEST.
2e050 20 20 69 6e 74 20 73 71 6c 69 74 65 33 55 74 66    int sqlite3Utf
2e060 38 54 6f 38 28 75 6e 73 69 67 6e 65 64 20 63 68  8To8(unsigned ch
2e070 61 72 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69  ar*);.#endif..#i
2e080 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  fdef SQLITE_OMIT
2e090 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 23 20  _VIRTUALTABLE.# 
2e0a0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56   define sqlite3V
2e0b0 74 61 62 43 6c 65 61 72 28 59 29 0a 23 20 20 64  tabClear(Y).#  d
2e0c0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61  efine sqlite3Vta
2e0d0 62 53 79 6e 63 28 58 2c 59 29 20 53 51 4c 49 54  bSync(X,Y) SQLIT
2e0e0 45 5f 4f 4b 0a 23 20 20 64 65 66 69 6e 65 20 73  E_OK.#  define s
2e0f0 71 6c 69 74 65 33 56 74 61 62 52 6f 6c 6c 62 61  qlite3VtabRollba
2e100 63 6b 28 58 29 0a 23 20 20 64 65 66 69 6e 65 20  ck(X).#  define 
2e110 73 71 6c 69 74 65 33 56 74 61 62 43 6f 6d 6d 69  sqlite3VtabCommi
2e120 74 28 58 29 0a 23 20 20 64 65 66 69 6e 65 20 73  t(X).#  define s
2e130 71 6c 69 74 65 33 56 74 61 62 49 6e 53 79 6e 63  qlite3VtabInSync
2e140 28 64 62 29 20 30 0a 23 20 20 64 65 66 69 6e 65  (db) 0.#  define
2e150 20 73 71 6c 69 74 65 33 56 74 61 62 4c 6f 63 6b   sqlite3VtabLock
2e160 28 58 29 0a 23 20 20 64 65 66 69 6e 65 20 73 71  (X).#  define sq
2e170 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f 63 6b 28  lite3VtabUnlock(
2e180 58 29 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c  X).#  define sql
2e190 69 74 65 33 56 74 61 62 55 6e 6c 6f 63 6b 4c 69  ite3VtabUnlockLi
2e1a0 73 74 28 58 29 0a 23 20 20 64 65 66 69 6e 65 20  st(X).#  define 
2e1b0 73 71 6c 69 74 65 33 56 74 61 62 53 61 76 65 70  sqlite3VtabSavep
2e1c0 6f 69 6e 74 28 58 2c 20 59 2c 20 5a 29 20 53 51  oint(X, Y, Z) SQ
2e1d0 4c 49 54 45 5f 4f 4b 0a 23 20 20 64 65 66 69 6e  LITE_OK.#  defin
2e1e0 65 20 73 71 6c 69 74 65 33 47 65 74 56 54 61 62  e sqlite3GetVTab
2e1f0 6c 65 28 58 2c 59 29 20 20 28 28 56 54 61 62 6c  le(X,Y)  ((VTabl
2e200 65 2a 29 30 29 0a 23 65 6c 73 65 0a 20 20 20 76  e*)0).#else.   v
2e210 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62 43  oid sqlite3VtabC
2e220 6c 65 61 72 28 73 71 6c 69 74 65 33 20 2a 64 62  lear(sqlite3 *db
2e230 2c 20 54 61 62 6c 65 2a 29 3b 0a 20 20 20 76 6f  , Table*);.   vo
2e240 69 64 20 73 71 6c 69 74 65 33 56 74 61 62 44 69  id sqlite3VtabDi
2e250 73 63 6f 6e 6e 65 63 74 28 73 71 6c 69 74 65 33  sconnect(sqlite3
2e260 20 2a 64 62 2c 20 54 61 62 6c 65 20 2a 70 29 3b   *db, Table *p);
2e270 0a 20 20 20 69 6e 74 20 73 71 6c 69 74 65 33 56  .   int sqlite3V
2e280 74 61 62 53 79 6e 63 28 73 71 6c 69 74 65 33 20  tabSync(sqlite3 
2e290 2a 64 62 2c 20 56 64 62 65 2a 29 3b 0a 20 20 20  *db, Vdbe*);.   
2e2a0 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62 52  int sqlite3VtabR
2e2b0 6f 6c 6c 62 61 63 6b 28 73 71 6c 69 74 65 33 20  ollback(sqlite3 
2e2c0 2a 64 62 29 3b 0a 20 20 20 69 6e 74 20 73 71 6c  *db);.   int sql
2e2d0 69 74 65 33 56 74 61 62 43 6f 6d 6d 69 74 28 73  ite3VtabCommit(s
2e2e0 71 6c 69 74 65 33 20 2a 64 62 29 3b 0a 20 20 20  qlite3 *db);.   
2e2f0 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62  void sqlite3Vtab
2e300 4c 6f 63 6b 28 56 54 61 62 6c 65 20 2a 29 3b 0a  Lock(VTable *);.
2e310 20 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 56     void sqlite3V
2e320 74 61 62 55 6e 6c 6f 63 6b 28 56 54 61 62 6c 65  tabUnlock(VTable
2e330 20 2a 29 3b 0a 20 20 20 76 6f 69 64 20 73 71 6c   *);.   void sql
2e340 69 74 65 33 56 74 61 62 55 6e 6c 6f 63 6b 4c 69  ite3VtabUnlockLi
2e350 73 74 28 73 71 6c 69 74 65 33 2a 29 3b 0a 20 20  st(sqlite3*);.  
2e360 20 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62   int sqlite3Vtab
2e370 53 61 76 65 70 6f 69 6e 74 28 73 71 6c 69 74 65  Savepoint(sqlite
2e380 33 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  3 *, int, int);.
2e390 20 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 56     void sqlite3V
2e3a0 74 61 62 49 6d 70 6f 72 74 45 72 72 6d 73 67 28  tabImportErrmsg(
2e3b0 56 64 62 65 2a 2c 20 73 71 6c 69 74 65 33 5f 76  Vdbe*, sqlite3_v
2e3c0 74 61 62 2a 29 3b 0a 20 20 20 56 54 61 62 6c 65  tab*);.   VTable
2e3d0 20 2a 73 71 6c 69 74 65 33 47 65 74 56 54 61 62   *sqlite3GetVTab
2e3e0 6c 65 28 73 71 6c 69 74 65 33 2a 2c 20 54 61 62  le(sqlite3*, Tab
2e3f0 6c 65 2a 29 3b 0a 20 20 20 4d 6f 64 75 6c 65 20  le*);.   Module 
2e400 2a 73 71 6c 69 74 65 33 56 74 61 62 43 72 65 61  *sqlite3VtabCrea
2e410 74 65 4d 6f 64 75 6c 65 28 0a 20 20 20 20 20 73  teModule(.     s
2e420 71 6c 69 74 65 33 2a 2c 0a 20 20 20 20 20 63 6f  qlite3*,.     co
2e430 6e 73 74 20 63 68 61 72 2a 2c 0a 20 20 20 20 20  nst char*,.     
2e440 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d 6f  const sqlite3_mo
2e450 64 75 6c 65 2a 2c 0a 20 20 20 20 20 76 6f 69 64  dule*,.     void
2e460 2a 2c 0a 20 20 20 20 20 76 6f 69 64 28 2a 29 28  *,.     void(*)(
2e470 76 6f 69 64 2a 29 0a 20 20 20 29 3b 0a 23 20 20  void*).   );.#  
2e480 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74  define sqlite3Vt
2e490 61 62 49 6e 53 79 6e 63 28 64 62 29 20 28 28 64  abInSync(db) ((d
2e4a0 62 29 2d 3e 6e 56 54 72 61 6e 73 3e 30 20 26 26  b)->nVTrans>0 &&
2e4b0 20 28 64 62 29 2d 3e 61 56 54 72 61 6e 73 3d 3d   (db)->aVTrans==
2e4c0 30 29 0a 23 65 6e 64 69 66 0a 69 6e 74 20 73 71  0).#endif.int sq
2e4d0 6c 69 74 65 33 56 74 61 62 45 70 6f 6e 79 6d 6f  lite3VtabEponymo
2e4e0 75 73 54 61 62 6c 65 49 6e 69 74 28 50 61 72 73  usTableInit(Pars
2e4f0 65 2a 2c 4d 6f 64 75 6c 65 2a 29 3b 0a 76 6f 69  e*,Module*);.voi
2e500 64 20 73 71 6c 69 74 65 33 56 74 61 62 45 70 6f  d sqlite3VtabEpo
2e510 6e 79 6d 6f 75 73 54 61 62 6c 65 43 6c 65 61 72  nymousTableClear
2e520 28 73 71 6c 69 74 65 33 2a 2c 4d 6f 64 75 6c 65  (sqlite3*,Module
2e530 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
2e540 56 74 61 62 4d 61 6b 65 57 72 69 74 61 62 6c 65  VtabMakeWritable
2e550 28 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a 29 3b  (Parse*,Table*);
2e560 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61  .void sqlite3Vta
2e570 62 42 65 67 69 6e 50 61 72 73 65 28 50 61 72 73  bBeginParse(Pars
2e580 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65  e*, Token*, Toke
2e590 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 69 6e 74 29  n*, Token*, int)
2e5a0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74  ;.void sqlite3Vt
2e5b0 61 62 46 69 6e 69 73 68 50 61 72 73 65 28 50 61  abFinishParse(Pa
2e5c0 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76  rse*, Token*);.v
2e5d0 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62 41  oid sqlite3VtabA
2e5e0 72 67 49 6e 69 74 28 50 61 72 73 65 2a 29 3b 0a  rgInit(Parse*);.
2e5f0 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62  void sqlite3Vtab
2e600 41 72 67 45 78 74 65 6e 64 28 50 61 72 73 65 2a  ArgExtend(Parse*
2e610 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73  , Token*);.int s
2e620 71 6c 69 74 65 33 56 74 61 62 43 61 6c 6c 43 72  qlite3VtabCallCr
2e630 65 61 74 65 28 73 71 6c 69 74 65 33 2a 2c 20 69  eate(sqlite3*, i
2e640 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  nt, const char *
2e650 2c 20 63 68 61 72 20 2a 2a 29 3b 0a 69 6e 74 20  , char **);.int 
2e660 73 71 6c 69 74 65 33 56 74 61 62 43 61 6c 6c 43  sqlite3VtabCallC
2e670 6f 6e 6e 65 63 74 28 50 61 72 73 65 2a 2c 20 54  onnect(Parse*, T
2e680 61 62 6c 65 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  able*);.int sqli
2e690 74 65 33 56 74 61 62 43 61 6c 6c 44 65 73 74 72  te3VtabCallDestr
2e6a0 6f 79 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74  oy(sqlite3*, int
2e6b0 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 29 3b  , const char *);
2e6c0 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62  .int sqlite3Vtab
2e6d0 42 65 67 69 6e 28 73 71 6c 69 74 65 33 20 2a 2c  Begin(sqlite3 *,
2e6e0 20 56 54 61 62 6c 65 20 2a 29 3b 0a 46 75 6e 63   VTable *);.Func
2e6f0 44 65 66 20 2a 73 71 6c 69 74 65 33 56 74 61 62  Def *sqlite3Vtab
2e700 4f 76 65 72 6c 6f 61 64 46 75 6e 63 74 69 6f 6e  OverloadFunction
2e710 28 73 71 6c 69 74 65 33 20 2a 2c 46 75 6e 63 44  (sqlite3 *,FuncD
2e720 65 66 2a 2c 20 69 6e 74 20 6e 41 72 67 2c 20 45  ef*, int nArg, E
2e730 78 70 72 2a 29 3b 0a 73 71 6c 69 74 65 33 5f 69  xpr*);.sqlite3_i
2e740 6e 74 36 34 20 73 71 6c 69 74 65 33 53 74 6d 74  nt64 sqlite3Stmt
2e750 43 75 72 72 65 6e 74 54 69 6d 65 28 73 71 6c 69  CurrentTime(sqli
2e760 74 65 33 5f 63 6f 6e 74 65 78 74 2a 29 3b 0a 69  te3_context*);.i
2e770 6e 74 20 73 71 6c 69 74 65 33 56 64 62 65 50 61  nt sqlite3VdbePa
2e780 72 61 6d 65 74 65 72 49 6e 64 65 78 28 56 64 62  rameterIndex(Vdb
2e790 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c  e*, const char*,
2e7a0 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74   int);.int sqlit
2e7b0 65 33 54 72 61 6e 73 66 65 72 42 69 6e 64 69 6e  e3TransferBindin
2e7c0 67 73 28 73 71 6c 69 74 65 33 5f 73 74 6d 74 20  gs(sqlite3_stmt 
2e7d0 2a 2c 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20  *, sqlite3_stmt 
2e7e0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
2e7f0 50 61 72 73 65 72 52 65 73 65 74 28 50 61 72 73  ParserReset(Pars
2e800 65 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  e*);.int sqlite3
2e810 52 65 70 72 65 70 61 72 65 28 56 64 62 65 2a 29  Reprepare(Vdbe*)
2e820 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
2e830 70 72 4c 69 73 74 43 68 65 63 6b 4c 65 6e 67 74  prListCheckLengt
2e840 68 28 50 61 72 73 65 2a 2c 20 45 78 70 72 4c 69  h(Parse*, ExprLi
2e850 73 74 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  st*, const char*
2e860 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73 71 6c 69  );.CollSeq *sqli
2e870 74 65 33 42 69 6e 61 72 79 43 6f 6d 70 61 72 65  te3BinaryCompare
2e880 43 6f 6c 6c 53 65 71 28 50 61 72 73 65 20 2a 2c  CollSeq(Parse *,
2e890 20 45 78 70 72 20 2a 2c 20 45 78 70 72 20 2a 29   Expr *, Expr *)
2e8a0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 54 65 6d  ;.int sqlite3Tem
2e8b0 70 49 6e 4d 65 6d 6f 72 79 28 63 6f 6e 73 74 20  pInMemory(const 
2e8c0 73 71 6c 69 74 65 33 2a 29 3b 0a 63 6f 6e 73 74  sqlite3*);.const
2e8d0 20 63 68 61 72 20 2a 73 71 6c 69 74 65 33 4a 6f   char *sqlite3Jo
2e8e0 75 72 6e 61 6c 4d 6f 64 65 6e 61 6d 65 28 69 6e  urnalModename(in
2e8f0 74 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  t);.#ifndef SQLI
2e900 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a 20 20 69 6e  TE_OMIT_WAL.  in
2e910 74 20 73 71 6c 69 74 65 33 43 68 65 63 6b 70 6f  t sqlite3Checkpo
2e920 69 6e 74 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e  int(sqlite3*, in
2e930 74 2c 20 69 6e 74 2c 20 69 6e 74 2a 2c 20 69 6e  t, int, int*, in
2e940 74 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74  t*);.  int sqlit
2e950 65 33 57 61 6c 44 65 66 61 75 6c 74 48 6f 6f 6b  e3WalDefaultHook
2e960 28 76 6f 69 64 2a 2c 73 71 6c 69 74 65 33 2a 2c  (void*,sqlite3*,
2e970 63 6f 6e 73 74 20 63 68 61 72 2a 2c 69 6e 74 29  const char*,int)
2e980 3b 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66  ;.#endif.#ifndef
2e990 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 54 45   SQLITE_OMIT_CTE
2e9a0 0a 20 20 57 69 74 68 20 2a 73 71 6c 69 74 65 33  .  With *sqlite3
2e9b0 57 69 74 68 41 64 64 28 50 61 72 73 65 2a 2c 57  WithAdd(Parse*,W
2e9c0 69 74 68 2a 2c 54 6f 6b 65 6e 2a 2c 45 78 70 72  ith*,Token*,Expr
2e9d0 4c 69 73 74 2a 2c 53 65 6c 65 63 74 2a 29 3b 0a  List*,Select*);.
2e9e0 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 57 69    void sqlite3Wi
2e9f0 74 68 44 65 6c 65 74 65 28 73 71 6c 69 74 65 33  thDelete(sqlite3
2ea00 2a 2c 57 69 74 68 2a 29 3b 0a 20 20 76 6f 69 64  *,With*);.  void
2ea10 20 73 71 6c 69 74 65 33 57 69 74 68 50 75 73 68   sqlite3WithPush
2ea20 28 50 61 72 73 65 2a 2c 20 57 69 74 68 2a 2c 20  (Parse*, With*, 
2ea30 75 38 29 3b 0a 23 65 6c 73 65 0a 23 64 65 66 69  u8);.#else.#defi
2ea40 6e 65 20 73 71 6c 69 74 65 33 57 69 74 68 50 75  ne sqlite3WithPu
2ea50 73 68 28 78 2c 79 2c 7a 29 0a 23 64 65 66 69 6e  sh(x,y,z).#defin
2ea60 65 20 73 71 6c 69 74 65 33 57 69 74 68 44 65 6c  e sqlite3WithDel
2ea70 65 74 65 28 78 2c 79 29 0a 23 65 6e 64 69 66 0a  ete(x,y).#endif.
2ea80 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
2ea90 4d 49 54 5f 55 50 53 45 52 54 0a 20 20 55 70 73  MIT_UPSERT.  Ups
2eaa0 65 72 74 20 2a 73 71 6c 69 74 65 33 55 70 73 65  ert *sqlite3Upse
2eab0 72 74 4e 65 77 28 73 71 6c 69 74 65 33 2a 2c 45  rtNew(sqlite3*,E
2eac0 78 70 72 4c 69 73 74 2a 2c 45 78 70 72 2a 2c 45  xprList*,Expr*,E
2ead0 78 70 72 4c 69 73 74 2a 2c 45 78 70 72 2a 29 3b  xprList*,Expr*);
2eae0 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 55  .  void sqlite3U
2eaf0 70 73 65 72 74 44 65 6c 65 74 65 28 73 71 6c 69  psertDelete(sqli
2eb00 74 65 33 2a 2c 55 70 73 65 72 74 2a 29 3b 0a 20  te3*,Upsert*);. 
2eb10 20 55 70 73 65 72 74 20 2a 73 71 6c 69 74 65 33   Upsert *sqlite3
2eb20 55 70 73 65 72 74 44 75 70 28 73 71 6c 69 74 65  UpsertDup(sqlite
2eb30 33 2a 2c 55 70 73 65 72 74 2a 29 3b 0a 20 20 69  3*,Upsert*);.  i
2eb40 6e 74 20 73 71 6c 69 74 65 33 55 70 73 65 72 74  nt sqlite3Upsert
2eb50 41 6e 61 6c 79 7a 65 54 61 72 67 65 74 28 50 61  AnalyzeTarget(Pa
2eb60 72 73 65 2a 2c 53 72 63 4c 69 73 74 2a 2c 55 70  rse*,SrcList*,Up
2eb70 73 65 72 74 2a 29 3b 0a 20 20 76 6f 69 64 20 73  sert*);.  void s
2eb80 71 6c 69 74 65 33 55 70 73 65 72 74 44 6f 55 70  qlite3UpsertDoUp
2eb90 64 61 74 65 28 50 61 72 73 65 2a 2c 55 70 73 65  date(Parse*,Upse
2eba0 72 74 2a 2c 54 61 62 6c 65 2a 2c 49 6e 64 65 78  rt*,Table*,Index
2ebb0 2a 2c 69 6e 74 29 3b 0a 23 65 6c 73 65 0a 23 64  *,int);.#else.#d
2ebc0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 55 70 73  efine sqlite3Ups
2ebd0 65 72 74 4e 65 77 28 76 2c 77 2c 78 2c 79 2c 7a  ertNew(v,w,x,y,z
2ebe0 29 20 28 28 55 70 73 65 72 74 2a 29 30 29 0a 23  ) ((Upsert*)0).#
2ebf0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 55 70  define sqlite3Up
2ec00 73 65 72 74 44 65 6c 65 74 65 28 78 2c 79 29 0a  sertDelete(x,y).
2ec10 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 55  #define sqlite3U
2ec20 70 73 65 72 74 44 75 70 28 78 2c 79 29 20 20 20  psertDup(x,y)   
2ec30 20 20 20 20 28 28 55 70 73 65 72 74 2a 29 30 29      ((Upsert*)0)
2ec40 0a 23 65 6e 64 69 66 0a 0a 0a 2f 2a 20 44 65 63  .#endif.../* Dec
2ec50 6c 61 72 61 74 69 6f 6e 73 20 66 6f 72 20 66 75  larations for fu
2ec60 6e 63 74 69 6f 6e 73 20 69 6e 20 66 6b 65 79 2e  nctions in fkey.
2ec70 63 2e 20 41 6c 6c 20 6f 66 20 74 68 65 73 65 20  c. All of these 
2ec80 61 72 65 20 72 65 70 6c 61 63 65 64 20 62 79 0a  are replaced by.
2ec90 2a 2a 20 6e 6f 2d 6f 70 20 6d 61 63 72 6f 73 20  ** no-op macros 
2eca0 69 66 20 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f  if OMIT_FOREIGN_
2ecb0 4b 45 59 20 69 73 20 64 65 66 69 6e 65 64 2e 20  KEY is defined. 
2ecc0 49 6e 20 74 68 69 73 20 63 61 73 65 20 6e 6f 20  In this case no 
2ecd0 66 6f 72 65 69 67 6e 0a 2a 2a 20 6b 65 79 20 66  foreign.** key f
2ece0 75 6e 63 74 69 6f 6e 61 6c 69 74 79 20 69 73 20  unctionality is 
2ecf0 61 76 61 69 6c 61 62 6c 65 2e 20 49 66 20 4f 4d  available. If OM
2ed00 49 54 5f 54 52 49 47 47 45 52 20 69 73 20 64 65  IT_TRIGGER is de
2ed10 66 69 6e 65 64 20 62 75 74 0a 2a 2a 20 4f 4d 49  fined but.** OMI
2ed20 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 20 69 73  T_FOREIGN_KEY is
2ed30 20 6e 6f 74 2c 20 6f 6e 6c 79 20 73 6f 6d 65 20   not, only some 
2ed40 6f 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 73  of the functions
2ed50 20 61 72 65 20 6e 6f 2d 6f 70 65 64 2e 20 49 6e   are no-oped. In
2ed60 0a 2a 2a 20 74 68 69 73 20 63 61 73 65 20 66 6f  .** this case fo
2ed70 72 65 69 67 6e 20 6b 65 79 73 20 61 72 65 20 70  reign keys are p
2ed80 61 72 73 65 64 2c 20 62 75 74 20 6e 6f 20 6f 74  arsed, but no ot
2ed90 68 65 72 20 66 75 6e 63 74 69 6f 6e 61 6c 69 74  her functionalit
2eda0 79 20 69 73 0a 2a 2a 20 70 72 6f 76 69 64 65 64  y is.** provided
2edb0 20 28 65 6e 66 6f 72 63 65 6d 65 6e 74 20 6f 66   (enforcement of
2edc0 20 46 4b 20 63 6f 6e 73 74 72 61 69 6e 74 73 20   FK constraints 
2edd0 72 65 71 75 69 72 65 73 20 74 68 65 20 74 72 69  requires the tri
2ede0 67 67 65 72 73 20 73 75 62 2d 73 79 73 74 65 6d  ggers sub-system
2edf0 29 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e  )..*/.#if !defin
2ee00 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46  ed(SQLITE_OMIT_F
2ee10 4f 52 45 49 47 4e 5f 4b 45 59 29 20 26 26 20 21  OREIGN_KEY) && !
2ee20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
2ee30 4d 49 54 5f 54 52 49 47 47 45 52 29 0a 20 20 76  MIT_TRIGGER).  v
2ee40 6f 69 64 20 73 71 6c 69 74 65 33 46 6b 43 68 65  oid sqlite3FkChe
2ee50 63 6b 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65  ck(Parse*, Table
2ee60 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74  *, int, int, int
2ee70 2a 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20  *, int);.  void 
2ee80 73 71 6c 69 74 65 33 46 6b 44 72 6f 70 54 61 62  sqlite3FkDropTab
2ee90 6c 65 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69  le(Parse*, SrcLi
2eea0 73 74 20 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a 20  st *, Table*);. 
2eeb0 20 76 6f 69 64 20 73 71 6c 69 74 65 33 46 6b 41   void sqlite3FkA
2eec0 63 74 69 6f 6e 73 28 50 61 72 73 65 2a 2c 20 54  ctions(Parse*, T
2eed0 61 62 6c 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a  able*, ExprList*
2eee0 2c 20 69 6e 74 2c 20 69 6e 74 2a 2c 20 69 6e 74  , int, int*, int
2eef0 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33  );.  int sqlite3
2ef00 46 6b 52 65 71 75 69 72 65 64 28 50 61 72 73 65  FkRequired(Parse
2ef10 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2a 2c  *, Table*, int*,
2ef20 20 69 6e 74 29 3b 0a 20 20 75 33 32 20 73 71 6c   int);.  u32 sql
2ef30 69 74 65 33 46 6b 4f 6c 64 6d 61 73 6b 28 50 61  ite3FkOldmask(Pa
2ef40 72 73 65 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a 20  rse*, Table*);. 
2ef50 20 46 4b 65 79 20 2a 73 71 6c 69 74 65 33 46 6b   FKey *sqlite3Fk
2ef60 52 65 66 65 72 65 6e 63 65 73 28 54 61 62 6c 65  References(Table
2ef70 20 2a 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65   *);.#else.  #de
2ef80 66 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 41 63  fine sqlite3FkAc
2ef90 74 69 6f 6e 73 28 61 2c 62 2c 63 2c 64 2c 65 2c  tions(a,b,c,d,e,
2efa0 66 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c  f).  #define sql
2efb0 69 74 65 33 46 6b 43 68 65 63 6b 28 61 2c 62 2c  ite3FkCheck(a,b,
2efc0 63 2c 64 2c 65 2c 66 29 0a 20 20 23 64 65 66 69  c,d,e,f).  #defi
2efd0 6e 65 20 73 71 6c 69 74 65 33 46 6b 44 72 6f 70  ne sqlite3FkDrop
2efe0 54 61 62 6c 65 28 61 2c 62 2c 63 29 0a 20 20 23  Table(a,b,c).  #
2eff0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46 6b  define sqlite3Fk
2f000 4f 6c 64 6d 61 73 6b 28 61 2c 62 29 20 20 20 20  Oldmask(a,b)    
2f010 20 20 20 20 20 30 0a 20 20 23 64 65 66 69 6e 65       0.  #define
2f020 20 73 71 6c 69 74 65 33 46 6b 52 65 71 75 69 72   sqlite3FkRequir
2f030 65 64 28 61 2c 62 2c 63 2c 64 29 20 20 20 20 30  ed(a,b,c,d)    0
2f040 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74  .  #define sqlit
2f050 65 33 46 6b 52 65 66 65 72 65 6e 63 65 73 28 61  e3FkReferences(a
2f060 29 20 20 20 20 20 20 20 20 30 0a 23 65 6e 64 69  )        0.#endi
2f070 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  f.#ifndef SQLITE
2f080 5f 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45  _OMIT_FOREIGN_KE
2f090 59 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  Y.  void sqlite3
2f0a0 46 6b 44 65 6c 65 74 65 28 73 71 6c 69 74 65 33  FkDelete(sqlite3
2f0b0 20 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a 20 20 69   *, Table*);.  i
2f0c0 6e 74 20 73 71 6c 69 74 65 33 46 6b 4c 6f 63 61  nt sqlite3FkLoca
2f0d0 74 65 49 6e 64 65 78 28 50 61 72 73 65 2a 2c 54  teIndex(Parse*,T
2f0e0 61 62 6c 65 2a 2c 46 4b 65 79 2a 2c 49 6e 64 65  able*,FKey*,Inde
2f0f0 78 2a 2a 2c 69 6e 74 2a 2a 29 3b 0a 23 65 6c 73  x**,int**);.#els
2f100 65 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69  e.  #define sqli
2f110 74 65 33 46 6b 44 65 6c 65 74 65 28 61 2c 62 29  te3FkDelete(a,b)
2f120 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74  .  #define sqlit
2f130 65 33 46 6b 4c 6f 63 61 74 65 49 6e 64 65 78 28  e3FkLocateIndex(
2f140 61 2c 62 2c 63 2c 64 2c 65 29 0a 23 65 6e 64 69  a,b,c,d,e).#endi
2f150 66 0a 0a 0a 2f 2a 0a 2a 2a 20 41 76 61 69 6c 61  f.../*.** Availa
2f160 62 6c 65 20 66 61 75 6c 74 20 69 6e 6a 65 63 74  ble fault inject
2f170 6f 72 73 2e 20 20 53 68 6f 75 6c 64 20 62 65 20  ors.  Should be 
2f180 6e 75 6d 62 65 72 65 64 20 62 65 67 69 6e 6e 69  numbered beginni
2f190 6e 67 20 77 69 74 68 20 30 2e 0a 2a 2f 0a 23 64  ng with 0..*/.#d
2f1a0 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 41 55  efine SQLITE_FAU
2f1b0 4c 54 49 4e 4a 45 43 54 4f 52 5f 4d 41 4c 4c 4f  LTINJECTOR_MALLO
2f1c0 43 20 20 20 20 20 30 0a 23 64 65 66 69 6e 65 20  C     0.#define 
2f1d0 53 51 4c 49 54 45 5f 46 41 55 4c 54 49 4e 4a 45  SQLITE_FAULTINJE
2f1e0 43 54 4f 52 5f 43 4f 55 4e 54 20 20 20 20 20 20  CTOR_COUNT      
2f1f0 31 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 69 6e 74  1../*.** The int
2f200 65 72 66 61 63 65 20 74 6f 20 74 68 65 20 63 6f  erface to the co
2f210 64 65 20 69 6e 20 66 61 75 6c 74 2e 63 20 75 73  de in fault.c us
2f220 65 64 20 66 6f 72 20 69 64 65 6e 74 69 66 79 69  ed for identifyi
2f230 6e 67 20 22 62 65 6e 69 67 6e 22 0a 2a 2a 20 6d  ng "benign".** m
2f240 61 6c 6c 6f 63 20 66 61 69 6c 75 72 65 73 2e 20  alloc failures. 
2f250 54 68 69 73 20 69 73 20 6f 6e 6c 79 20 70 72 65  This is only pre
2f260 73 65 6e 74 20 69 66 20 53 51 4c 49 54 45 5f 55  sent if SQLITE_U
2f270 4e 54 45 53 54 41 42 4c 45 0a 2a 2a 20 69 73 20  NTESTABLE.** is 
2f280 6e 6f 74 20 64 65 66 69 6e 65 64 2e 0a 2a 2f 0a  not defined..*/.
2f290 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 55  #ifndef SQLITE_U
2f2a0 4e 54 45 53 54 41 42 4c 45 0a 20 20 76 6f 69 64  NTESTABLE.  void
2f2b0 20 73 71 6c 69 74 65 33 42 65 67 69 6e 42 65 6e   sqlite3BeginBen
2f2c0 69 67 6e 4d 61 6c 6c 6f 63 28 76 6f 69 64 29 3b  ignMalloc(void);
2f2d0 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 45  .  void sqlite3E
2f2e0 6e 64 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28 76  ndBenignMalloc(v
2f2f0 6f 69 64 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64  oid);.#else.  #d
2f300 65 66 69 6e 65 20 73 71 6c 69 74 65 33 42 65 67  efine sqlite3Beg
2f310 69 6e 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28 29  inBenignMalloc()
2f320 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74  .  #define sqlit
2f330 65 33 45 6e 64 42 65 6e 69 67 6e 4d 61 6c 6c 6f  e3EndBenignMallo
2f340 63 28 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  c().#endif../*.*
2f350 2a 20 41 6c 6c 6f 77 65 64 20 72 65 74 75 72 6e  * Allowed return
2f360 20 76 61 6c 75 65 73 20 66 72 6f 6d 20 73 71 6c   values from sql
2f370 69 74 65 33 46 69 6e 64 49 6e 49 6e 64 65 78 28  ite3FindInIndex(
2f380 29 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f  ).*/.#define IN_
2f390 49 4e 44 45 58 5f 52 4f 57 49 44 20 20 20 20 20  INDEX_ROWID     
2f3a0 20 20 20 31 20 20 20 2f 2a 20 53 65 61 72 63 68     1   /* Search
2f3b0 20 74 68 65 20 72 6f 77 69 64 20 6f 66 20 74 68   the rowid of th
2f3c0 65 20 74 61 62 6c 65 20 2a 2f 0a 23 64 65 66 69  e table */.#defi
2f3d0 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 45 50 48 20  ne IN_INDEX_EPH 
2f3e0 20 20 20 20 20 20 20 20 20 32 20 20 20 2f 2a 20           2   /* 
2f3f0 53 65 61 72 63 68 20 61 6e 20 65 70 68 65 6d 65  Search an epheme
2f400 72 61 6c 20 62 2d 74 72 65 65 20 2a 2f 0a 23 64  ral b-tree */.#d
2f410 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 49  efine IN_INDEX_I
2f420 4e 44 45 58 5f 41 53 43 20 20 20 20 33 20 20 20  NDEX_ASC    3   
2f430 2f 2a 20 45 78 69 73 74 69 6e 67 20 69 6e 64 65  /* Existing inde
2f440 78 20 41 53 43 45 4e 44 49 4e 47 20 2a 2f 0a 23  x ASCENDING */.#
2f450 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f  define IN_INDEX_
2f460 49 4e 44 45 58 5f 44 45 53 43 20 20 20 34 20 20  INDEX_DESC   4  
2f470 20 2f 2a 20 45 78 69 73 74 69 6e 67 20 69 6e 64   /* Existing ind
2f480 65 78 20 44 45 53 43 45 4e 44 49 4e 47 20 2a 2f  ex DESCENDING */
2f490 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45  .#define IN_INDE
2f4a0 58 5f 4e 4f 4f 50 20 20 20 20 20 20 20 20 20 35  X_NOOP         5
2f4b0 20 20 20 2f 2a 20 4e 6f 20 74 61 62 6c 65 20 61     /* No table a
2f4c0 76 61 69 6c 61 62 6c 65 2e 20 55 73 65 20 63 6f  vailable. Use co
2f4d0 6d 70 61 72 69 73 6f 6e 73 20 2a 2f 0a 2f 2a 0a  mparisons */./*.
2f4e0 2a 2a 20 41 6c 6c 6f 77 65 64 20 66 6c 61 67 73  ** Allowed flags
2f4f0 20 66 6f 72 20 74 68 65 20 33 72 64 20 70 61 72   for the 3rd par
2f500 61 6d 65 74 65 72 20 74 6f 20 73 71 6c 69 74 65  ameter to sqlite
2f510 33 46 69 6e 64 49 6e 49 6e 64 65 78 28 29 2e 0a  3FindInIndex()..
2f520 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e  */.#define IN_IN
2f530 44 45 58 5f 4e 4f 4f 50 5f 4f 4b 20 20 20 20 20  DEX_NOOP_OK     
2f540 30 78 30 30 30 31 20 20 2f 2a 20 4f 4b 20 74 6f  0x0001  /* OK to
2f550 20 72 65 74 75 72 6e 20 49 4e 5f 49 4e 44 45 58   return IN_INDEX
2f560 5f 4e 4f 4f 50 20 2a 2f 0a 23 64 65 66 69 6e 65  _NOOP */.#define
2f570 20 49 4e 5f 49 4e 44 45 58 5f 4d 45 4d 42 45 52   IN_INDEX_MEMBER
2f580 53 48 49 50 20 20 30 78 30 30 30 32 20 20 2f 2a  SHIP  0x0002  /*
2f590 20 49 4e 20 6f 70 65 72 61 74 6f 72 20 75 73 65   IN operator use
2f5a0 64 20 66 6f 72 20 6d 65 6d 62 65 72 73 68 69 70  d for membership
2f5b0 20 74 65 73 74 20 2a 2f 0a 23 64 65 66 69 6e 65   test */.#define
2f5c0 20 49 4e 5f 49 4e 44 45 58 5f 4c 4f 4f 50 20 20   IN_INDEX_LOOP  
2f5d0 20 20 20 20 20 20 30 78 30 30 30 34 20 20 2f 2a        0x0004  /*
2f5e0 20 49 4e 20 6f 70 65 72 61 74 6f 72 20 75 73 65   IN operator use
2f5f0 64 20 61 73 20 61 20 6c 6f 6f 70 20 2a 2f 0a 69  d as a loop */.i
2f600 6e 74 20 73 71 6c 69 74 65 33 46 69 6e 64 49 6e  nt sqlite3FindIn
2f610 49 6e 64 65 78 28 50 61 72 73 65 20 2a 2c 20 45  Index(Parse *, E
2f620 78 70 72 20 2a 2c 20 75 33 32 2c 20 69 6e 74 2a  xpr *, u32, int*
2f630 2c 20 69 6e 74 2a 29 3b 0a 0a 69 6e 74 20 73 71  , int*);..int sq
2f640 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 4f 70 65 6e  lite3JournalOpen
2f650 28 73 71 6c 69 74 65 33 5f 76 66 73 20 2a 2c 20  (sqlite3_vfs *, 
2f660 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20 73 71  const char *, sq
2f670 6c 69 74 65 33 5f 66 69 6c 65 20 2a 2c 20 69 6e  lite3_file *, in
2f680 74 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c  t, int);.int sql
2f690 69 74 65 33 4a 6f 75 72 6e 61 6c 53 69 7a 65 28  ite3JournalSize(
2f6a0 73 71 6c 69 74 65 33 5f 76 66 73 20 2a 29 3b 0a  sqlite3_vfs *);.
2f6b0 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49  #if defined(SQLI
2f6c0 54 45 5f 45 4e 41 42 4c 45 5f 41 54 4f 4d 49 43  TE_ENABLE_ATOMIC
2f6d0 5f 57 52 49 54 45 29 20 5c 0a 20 7c 7c 20 64 65  _WRITE) \. || de
2f6e0 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41  fined(SQLITE_ENA
2f6f0 42 4c 45 5f 42 41 54 43 48 5f 41 54 4f 4d 49 43  BLE_BATCH_ATOMIC
2f700 5f 57 52 49 54 45 29 0a 20 20 69 6e 74 20 73 71  _WRITE).  int sq
2f710 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 43 72 65 61  lite3JournalCrea
2f720 74 65 28 73 71 6c 69 74 65 33 5f 66 69 6c 65 20  te(sqlite3_file 
2f730 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 69 6e 74 20  *);.#endif..int 
2f740 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 49 73  sqlite3JournalIs
2f750 49 6e 4d 65 6d 6f 72 79 28 73 71 6c 69 74 65 33  InMemory(sqlite3
2f760 5f 66 69 6c 65 20 2a 70 29 3b 0a 76 6f 69 64 20  _file *p);.void 
2f770 73 71 6c 69 74 65 33 4d 65 6d 4a 6f 75 72 6e 61  sqlite3MemJourna
2f780 6c 4f 70 65 6e 28 73 71 6c 69 74 65 33 5f 66 69  lOpen(sqlite3_fi
2f790 6c 65 20 2a 29 3b 0a 0a 76 6f 69 64 20 73 71 6c  le *);..void sql
2f7a0 69 74 65 33 45 78 70 72 53 65 74 48 65 69 67 68  ite3ExprSetHeigh
2f7b0 74 41 6e 64 46 6c 61 67 73 28 50 61 72 73 65 20  tAndFlags(Parse 
2f7c0 2a 70 50 61 72 73 65 2c 20 45 78 70 72 20 2a 70  *pParse, Expr *p
2f7d0 29 3b 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d 41  );.#if SQLITE_MA
2f7e0 58 5f 45 58 50 52 5f 44 45 50 54 48 3e 30 0a 20  X_EXPR_DEPTH>0. 
2f7f0 20 69 6e 74 20 73 71 6c 69 74 65 33 53 65 6c 65   int sqlite3Sele
2f800 63 74 45 78 70 72 48 65 69 67 68 74 28 53 65 6c  ctExprHeight(Sel
2f810 65 63 74 20 2a 29 3b 0a 20 20 69 6e 74 20 73 71  ect *);.  int sq
2f820 6c 69 74 65 33 45 78 70 72 43 68 65 63 6b 48 65  lite3ExprCheckHe
2f830 69 67 68 74 28 50 61 72 73 65 2a 2c 20 69 6e 74  ight(Parse*, int
2f840 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69  );.#else.  #defi
2f850 6e 65 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74  ne sqlite3Select
2f860 45 78 70 72 48 65 69 67 68 74 28 78 29 20 30 0a  ExprHeight(x) 0.
2f870 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65    #define sqlite
2f880 33 45 78 70 72 43 68 65 63 6b 48 65 69 67 68 74  3ExprCheckHeight
2f890 28 78 2c 79 29 0a 23 65 6e 64 69 66 0a 0a 75 33  (x,y).#endif..u3
2f8a0 32 20 73 71 6c 69 74 65 33 47 65 74 34 62 79 74  2 sqlite3Get4byt
2f8b0 65 28 63 6f 6e 73 74 20 75 38 2a 29 3b 0a 76 6f  e(const u8*);.vo
2f8c0 69 64 20 73 71 6c 69 74 65 33 50 75 74 34 62 79  id sqlite3Put4by
2f8d0 74 65 28 75 38 2a 2c 20 75 33 32 29 3b 0a 0a 23  te(u8*, u32);..#
2f8e0 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  ifdef SQLITE_ENA
2f8f0 42 4c 45 5f 55 4e 4c 4f 43 4b 5f 4e 4f 54 49 46  BLE_UNLOCK_NOTIF
2f900 59 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  Y.  void sqlite3
2f910 43 6f 6e 6e 65 63 74 69 6f 6e 42 6c 6f 63 6b 65  ConnectionBlocke
2f920 64 28 73 71 6c 69 74 65 33 20 2a 2c 20 73 71 6c  d(sqlite3 *, sql
2f930 69 74 65 33 20 2a 29 3b 0a 20 20 76 6f 69 64 20  ite3 *);.  void 
2f940 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f  sqlite3Connectio
2f950 6e 55 6e 6c 6f 63 6b 65 64 28 73 71 6c 69 74 65  nUnlocked(sqlite
2f960 33 20 2a 64 62 29 3b 0a 20 20 76 6f 69 64 20 73  3 *db);.  void s
2f970 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e  qlite3Connection
2f980 43 6c 6f 73 65 64 28 73 71 6c 69 74 65 33 20 2a  Closed(sqlite3 *
2f990 64 62 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65  db);.#else.  #de
2f9a0 66 69 6e 65 20 73 71 6c 69 74 65 33 43 6f 6e 6e  fine sqlite3Conn
2f9b0 65 63 74 69 6f 6e 42 6c 6f 63 6b 65 64 28 78 2c  ectionBlocked(x,
2f9c0 79 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c  y).  #define sql
2f9d0 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 55 6e  ite3ConnectionUn
2f9e0 6c 6f 63 6b 65 64 28 78 29 0a 20 20 23 64 65 66  locked(x).  #def
2f9f0 69 6e 65 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65  ine sqlite3Conne
2fa00 63 74 69 6f 6e 43 6c 6f 73 65 64 28 78 29 0a 23  ctionClosed(x).#
2fa10 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51  endif..#ifdef SQ
2fa20 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 76 6f 69  LITE_DEBUG.  voi
2fa30 64 20 73 71 6c 69 74 65 33 50 61 72 73 65 72 54  d sqlite3ParserT
2fa40 72 61 63 65 28 46 49 4c 45 2a 2c 20 63 68 61 72  race(FILE*, char
2fa50 20 2a 29 3b 0a 23 65 6e 64 69 66 0a 23 69 66 20   *);.#endif.#if 
2fa60 64 65 66 69 6e 65 64 28 59 59 43 4f 56 45 52 41  defined(YYCOVERA
2fa70 47 45 29 0a 20 20 69 6e 74 20 73 71 6c 69 74 65  GE).  int sqlite
2fa80 33 50 61 72 73 65 72 43 6f 76 65 72 61 67 65 28  3ParserCoverage(
2fa90 46 49 4c 45 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a  FILE*);.#endif..
2faa0 2f 2a 0a 2a 2a 20 49 66 20 74 68 65 20 53 51 4c  /*.** If the SQL
2fab0 49 54 45 5f 45 4e 41 42 4c 45 20 49 4f 54 52 41  ITE_ENABLE IOTRA
2fac0 43 45 20 65 78 69 73 74 73 20 74 68 65 6e 20 74  CE exists then t
2fad0 68 65 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62  he global variab
2fae0 6c 65 0a 2a 2a 20 73 71 6c 69 74 65 33 49 6f 54  le.** sqlite3IoT
2faf0 72 61 63 65 20 69 73 20 61 20 70 6f 69 6e 74 65  race is a pointe
2fb00 72 20 74 6f 20 61 20 70 72 69 6e 74 66 2d 6c 69  r to a printf-li
2fb10 6b 65 20 72 6f 75 74 69 6e 65 20 75 73 65 64 20  ke routine used 
2fb20 74 6f 0a 2a 2a 20 70 72 69 6e 74 20 49 2f 4f 20  to.** print I/O 
2fb30 74 72 61 63 69 6e 67 20 6d 65 73 73 61 67 65 73  tracing messages
2fb40 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49  ..*/.#ifdef SQLI
2fb50 54 45 5f 45 4e 41 42 4c 45 5f 49 4f 54 52 41 43  TE_ENABLE_IOTRAC
2fb60 45 0a 23 20 64 65 66 69 6e 65 20 49 4f 54 52 41  E.# define IOTRA
2fb70 43 45 28 41 29 20 20 69 66 28 20 73 71 6c 69 74  CE(A)  if( sqlit
2fb80 65 33 49 6f 54 72 61 63 65 20 29 7b 20 73 71 6c  e3IoTrace ){ sql
2fb90 69 74 65 33 49 6f 54 72 61 63 65 20 41 3b 20 7d  ite3IoTrace A; }
2fba0 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 56  .  void sqlite3V
2fbb0 64 62 65 49 4f 54 72 61 63 65 53 71 6c 28 56 64  dbeIOTraceSql(Vd
2fbc0 62 65 2a 29 3b 0a 53 51 4c 49 54 45 5f 41 50 49  be*);.SQLITE_API
2fbd0 20 53 51 4c 49 54 45 5f 45 58 54 45 52 4e 20 76   SQLITE_EXTERN v
2fbe0 6f 69 64 20 28 53 51 4c 49 54 45 5f 43 44 45 43  oid (SQLITE_CDEC
2fbf0 4c 20 2a 73 71 6c 69 74 65 33 49 6f 54 72 61 63  L *sqlite3IoTrac
2fc00 65 29 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 2e  e)(const char*,.
2fc10 2e 2e 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66  ..);.#else.# def
2fc20 69 6e 65 20 49 4f 54 52 41 43 45 28 41 29 0a 23  ine IOTRACE(A).#
2fc30 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56   define sqlite3V
2fc40 64 62 65 49 4f 54 72 61 63 65 53 71 6c 28 58 29  dbeIOTraceSql(X)
2fc50 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54  .#endif../*.** T
2fc60 68 65 73 65 20 72 6f 75 74 69 6e 65 73 20 61 72  hese routines ar
2fc70 65 20 61 76 61 69 6c 61 62 6c 65 20 66 6f 72 20  e available for 
2fc80 74 68 65 20 6d 65 6d 32 2e 63 20 64 65 62 75 67  the mem2.c debug
2fc90 67 69 6e 67 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f  ging memory allo
2fca0 63 61 74 6f 72 0a 2a 2a 20 6f 6e 6c 79 2e 20 20  cator.** only.  
2fcb0 54 68 65 79 20 61 72 65 20 75 73 65 64 20 74 6f  They are used to
2fcc0 20 76 65 72 69 66 79 20 74 68 61 74 20 64 69 66   verify that dif
2fcd0 66 65 72 65 6e 74 20 22 74 79 70 65 73 22 20 6f  ferent "types" o
2fce0 66 20 6d 65 6d 6f 72 79 0a 2a 2a 20 61 6c 6c 6f  f memory.** allo
2fcf0 63 61 74 69 6f 6e 73 20 61 72 65 20 70 72 6f 70  cations are prop
2fd00 65 72 6c 79 20 74 72 61 63 6b 65 64 20 62 79 20  erly tracked by 
2fd10 74 68 65 20 73 79 73 74 65 6d 2e 0a 2a 2a 0a 2a  the system..**.*
2fd20 2a 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75  * sqlite3Memdebu
2fd30 67 53 65 74 54 79 70 65 28 29 20 73 65 74 73 20  gSetType() sets 
2fd40 74 68 65 20 22 74 79 70 65 22 20 6f 66 20 61 6e  the "type" of an
2fd50 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 74 6f 20 6f   allocation to o
2fd60 6e 65 20 6f 66 0a 2a 2a 20 74 68 65 20 4d 45 4d  ne of.** the MEM
2fd70 54 59 50 45 5f 2a 20 6d 61 63 72 6f 73 20 64 65  TYPE_* macros de
2fd80 66 69 6e 65 64 20 62 65 6c 6f 77 2e 20 20 54 68  fined below.  Th
2fd90 65 20 74 79 70 65 20 6d 75 73 74 20 62 65 20 61  e type must be a
2fda0 20 62 69 74 6d 61 73 6b 20 77 69 74 68 0a 2a 2a   bitmask with.**
2fdb0 20 61 20 73 69 6e 67 6c 65 20 62 69 74 20 73 65   a single bit se
2fdc0 74 2e 0a 2a 2a 0a 2a 2a 20 73 71 6c 69 74 65 33  t..**.** sqlite3
2fdd0 4d 65 6d 64 65 62 75 67 48 61 73 54 79 70 65 28  MemdebugHasType(
2fde0 29 20 72 65 74 75 72 6e 73 20 74 72 75 65 20 69  ) returns true i
2fdf0 66 20 61 6e 79 20 6f 66 20 74 68 65 20 62 69 74  f any of the bit
2fe00 73 20 69 6e 20 69 74 73 20 73 65 63 6f 6e 64 0a  s in its second.
2fe10 2a 2a 20 61 72 67 75 6d 65 6e 74 20 6d 61 74 63  ** argument matc
2fe20 68 20 74 68 65 20 74 79 70 65 20 73 65 74 20 62  h the type set b
2fe30 79 20 74 68 65 20 70 72 65 76 69 6f 75 73 20 73  y the previous s
2fe40 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 53 65  qlite3MemdebugSe
2fe50 74 54 79 70 65 28 29 2e 0a 2a 2a 20 73 71 6c 69  tType()..** sqli
2fe60 74 65 33 4d 65 6d 64 65 62 75 67 48 61 73 54 79  te3MemdebugHasTy
2fe70 70 65 28 29 20 69 73 20 69 6e 74 65 6e 64 65 64  pe() is intended
2fe80 20 66 6f 72 20 75 73 65 20 69 6e 73 69 64 65 20   for use inside 
2fe90 61 73 73 65 72 74 28 29 20 73 74 61 74 65 6d 65  assert() stateme
2fea0 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20 73 71 6c 69 74  nts..**.** sqlit
2feb0 65 33 4d 65 6d 64 65 62 75 67 4e 6f 54 79 70 65  e3MemdebugNoType
2fec0 28 29 20 72 65 74 75 72 6e 73 20 74 72 75 65 20  () returns true 
2fed0 69 66 20 6e 6f 6e 65 20 6f 66 20 74 68 65 20 62  if none of the b
2fee0 69 74 73 20 69 6e 20 69 74 73 20 73 65 63 6f 6e  its in its secon
2fef0 64 0a 2a 2a 20 61 72 67 75 6d 65 6e 74 20 6d 61  d.** argument ma
2ff00 74 63 68 20 74 68 65 20 74 79 70 65 20 73 65 74  tch the type set
2ff10 20 62 79 20 74 68 65 20 70 72 65 76 69 6f 75 73   by the previous
2ff20 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67   sqlite3Memdebug
2ff30 53 65 74 54 79 70 65 28 29 2e 0a 2a 2a 0a 2a 2a  SetType()..**.**
2ff40 20 50 65 72 68 61 70 73 20 74 68 65 20 6d 6f 73   Perhaps the mos
2ff50 74 20 69 6d 70 6f 72 74 61 6e 74 20 70 6f 69 6e  t important poin
2ff60 74 20 69 73 20 74 68 65 20 64 69 66 66 65 72 65  t is the differe
2ff70 6e 63 65 20 62 65 74 77 65 65 6e 20 4d 45 4d 54  nce between MEMT
2ff80 59 50 45 5f 48 45 41 50 0a 2a 2a 20 61 6e 64 20  YPE_HEAP.** and 
2ff90 4d 45 4d 54 59 50 45 5f 4c 4f 4f 4b 41 53 49 44  MEMTYPE_LOOKASID
2ffa0 45 2e 20 20 49 66 20 61 6e 20 61 6c 6c 6f 63 61  E.  If an alloca
2ffb0 74 69 6f 6e 20 69 73 20 4d 45 4d 54 59 50 45 5f  tion is MEMTYPE_
2ffc0 4c 4f 4f 4b 41 53 49 44 45 2c 20 74 68 61 74 20  LOOKASIDE, that 
2ffd0 6d 65 61 6e 73 0a 2a 2a 20 69 74 20 6d 69 67 68  means.** it migh
2ffe0 74 20 68 61 76 65 20 62 65 65 6e 20 61 6c 6c 6f  t have been allo
2fff0 63 61 74 65 64 20 62 79 20 6c 6f 6f 6b 61 73 69  cated by lookasi
30000 64 65 2c 20 65 78 63 65 70 74 20 74 68 65 20 61  de, except the a
30010 6c 6c 6f 63 61 74 69 6f 6e 20 77 61 73 0a 2a 2a  llocation was.**
30020 20 74 6f 6f 20 6c 61 72 67 65 20 6f 72 20 6c 6f   too large or lo
30030 6f 6b 61 73 69 64 65 20 77 61 73 20 61 6c 72 65  okaside was alre
30040 61 64 79 20 66 75 6c 6c 2e 20 20 49 74 20 69 73  ady full.  It is
30050 20 69 6d 70 6f 72 74 61 6e 74 20 74 6f 20 76 65   important to ve
30060 72 69 66 79 0a 2a 2a 20 74 68 61 74 20 61 6c 6c  rify.** that all
30070 6f 63 61 74 69 6f 6e 73 20 74 68 61 74 20 6d 69  ocations that mi
30080 67 68 74 20 68 61 76 65 20 62 65 65 6e 20 73 61  ght have been sa
30090 74 69 73 66 69 65 64 20 62 79 20 6c 6f 6f 6b 61  tisfied by looka
300a0 73 69 64 65 20 61 72 65 20 6e 6f 74 0a 2a 2a 20  side are not.** 
300b0 70 61 73 73 65 64 20 62 61 63 6b 20 74 6f 20 6e  passed back to n
300c0 6f 6e 2d 6c 6f 6f 6b 61 73 69 64 65 20 66 72 65  on-lookaside fre
300d0 65 28 29 20 72 6f 75 74 69 6e 65 73 2e 20 20 41  e() routines.  A
300e0 73 73 65 72 74 73 20 73 75 63 68 20 61 73 20 74  sserts such as t
300f0 68 65 0a 2a 2a 20 65 78 61 6d 70 6c 65 20 61 62  he.** example ab
30100 6f 76 65 20 61 72 65 20 70 6c 61 63 65 64 20 6f  ove are placed o
30110 6e 20 74 68 65 20 6e 6f 6e 2d 6c 6f 6f 6b 61 73  n the non-lookas
30120 69 64 65 20 66 72 65 65 28 29 20 72 6f 75 74 69  ide free() routi
30130 6e 65 73 20 74 6f 20 76 65 72 69 66 79 0a 2a 2a  nes to verify.**
30140 20 74 68 69 73 20 63 6f 6e 73 74 72 61 69 6e 74   this constraint
30150 2e 0a 2a 2a 0a 2a 2a 20 41 6c 6c 20 6f 66 20 74  ..**.** All of t
30160 68 69 73 20 69 73 20 6e 6f 2d 6f 70 20 66 6f 72  his is no-op for
30170 20 61 20 70 72 6f 64 75 63 74 69 6f 6e 20 62 75   a production bu
30180 69 6c 64 2e 20 20 49 74 20 6f 6e 6c 79 20 63 6f  ild.  It only co
30190 6d 65 73 20 69 6e 74 6f 0a 2a 2a 20 70 6c 61 79  mes into.** play
301a0 20 77 68 65 6e 20 74 68 65 20 53 51 4c 49 54 45   when the SQLITE
301b0 5f 4d 45 4d 44 45 42 55 47 20 63 6f 6d 70 69 6c  _MEMDEBUG compil
301c0 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 20 69 73  e-time option is
301d0 20 75 73 65 64 2e 0a 2a 2f 0a 23 69 66 64 65 66   used..*/.#ifdef
301e0 20 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47   SQLITE_MEMDEBUG
301f0 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 4d  .  void sqlite3M
30200 65 6d 64 65 62 75 67 53 65 74 54 79 70 65 28 76  emdebugSetType(v
30210 6f 69 64 2a 2c 75 38 29 3b 0a 20 20 69 6e 74 20  oid*,u8);.  int 
30220 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 48  sqlite3MemdebugH
30230 61 73 54 79 70 65 28 76 6f 69 64 2a 2c 75 38 29  asType(void*,u8)
30240 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 4d  ;.  int sqlite3M
30250 65 6d 64 65 62 75 67 4e 6f 54 79 70 65 28 76 6f  emdebugNoType(vo
30260 69 64 2a 2c 75 38 29 3b 0a 23 65 6c 73 65 0a 23  id*,u8);.#else.#
30270 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 4d   define sqlite3M
30280 65 6d 64 65 62 75 67 53 65 74 54 79 70 65 28 58  emdebugSetType(X
30290 2c 59 29 20 20 2f 2a 20 6e 6f 2d 6f 70 20 2a 2f  ,Y)  /* no-op */
302a0 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
302b0 33 4d 65 6d 64 65 62 75 67 48 61 73 54 79 70 65  3MemdebugHasType
302c0 28 58 2c 59 29 20 20 31 0a 23 20 64 65 66 69 6e  (X,Y)  1.# defin
302d0 65 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75  e sqlite3Memdebu
302e0 67 4e 6f 54 79 70 65 28 58 2c 59 29 20 20 20 31  gNoType(X,Y)   1
302f0 0a 23 65 6e 64 69 66 0a 23 64 65 66 69 6e 65 20  .#endif.#define 
30300 4d 45 4d 54 59 50 45 5f 48 45 41 50 20 20 20 20  MEMTYPE_HEAP    
30310 20 20 20 30 78 30 31 20 20 2f 2a 20 47 65 6e 65     0x01  /* Gene
30320 72 61 6c 20 68 65 61 70 20 61 6c 6c 6f 63 61 74  ral heap allocat
30330 69 6f 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ions */.#define 
30340 4d 45 4d 54 59 50 45 5f 4c 4f 4f 4b 41 53 49 44  MEMTYPE_LOOKASID
30350 45 20 20 30 78 30 32 20 20 2f 2a 20 48 65 61 70  E  0x02  /* Heap
30360 20 74 68 61 74 20 6d 69 67 68 74 20 68 61 76 65   that might have
30370 20 62 65 65 6e 20 6c 6f 6f 6b 61 73 69 64 65 20   been lookaside 
30380 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 45 4d 54 59  */.#define MEMTY
30390 50 45 5f 50 43 41 43 48 45 20 20 20 20 20 30 78  PE_PCACHE     0x
303a0 30 34 20 20 2f 2a 20 50 61 67 65 20 63 61 63 68  04  /* Page cach
303b0 65 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 2a 2f  e allocations */
303c0 0a 0a 2f 2a 0a 2a 2a 20 54 68 72 65 61 64 69 6e  ../*.** Threadin
303d0 67 20 69 6e 74 65 72 66 61 63 65 0a 2a 2f 0a 23  g interface.*/.#
303e0 69 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 57 4f  if SQLITE_MAX_WO
303f0 52 4b 45 52 5f 54 48 52 45 41 44 53 3e 30 0a 69  RKER_THREADS>0.i
30400 6e 74 20 73 71 6c 69 74 65 33 54 68 72 65 61 64  nt sqlite3Thread
30410 43 72 65 61 74 65 28 53 51 4c 69 74 65 54 68 72  Create(SQLiteThr
30420 65 61 64 2a 2a 2c 76 6f 69 64 2a 28 2a 29 28 76  ead**,void*(*)(v
30430 6f 69 64 2a 29 2c 76 6f 69 64 2a 29 3b 0a 69 6e  oid*),void*);.in
30440 74 20 73 71 6c 69 74 65 33 54 68 72 65 61 64 4a  t sqlite3ThreadJ
30450 6f 69 6e 28 53 51 4c 69 74 65 54 68 72 65 61 64  oin(SQLiteThread
30460 2a 2c 20 76 6f 69 64 2a 2a 29 3b 0a 23 65 6e 64  *, void**);.#end
30470 69 66 0a 0a 23 69 66 20 64 65 66 69 6e 65 64 28  if..#if defined(
30480 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 44 42  SQLITE_ENABLE_DB
30490 50 41 47 45 5f 56 54 41 42 29 20 7c 7c 20 64 65  PAGE_VTAB) || de
304a0 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 54 45 53  fined(SQLITE_TES
304b0 54 29 0a 69 6e 74 20 73 71 6c 69 74 65 33 44 62  T).int sqlite3Db
304c0 70 61 67 65 52 65 67 69 73 74 65 72 28 73 71 6c  pageRegister(sql
304d0 69 74 65 33 2a 29 3b 0a 23 65 6e 64 69 66 0a 23  ite3*);.#endif.#
304e0 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  if defined(SQLIT
304f0 45 5f 45 4e 41 42 4c 45 5f 44 42 53 54 41 54 5f  E_ENABLE_DBSTAT_
30500 56 54 41 42 29 20 7c 7c 20 64 65 66 69 6e 65 64  VTAB) || defined
30510 28 53 51 4c 49 54 45 5f 54 45 53 54 29 0a 69 6e  (SQLITE_TEST).in
30520 74 20 73 71 6c 69 74 65 33 44 62 73 74 61 74 52  t sqlite3DbstatR
30530 65 67 69 73 74 65 72 28 73 71 6c 69 74 65 33 2a  egister(sqlite3*
30540 29 3b 0a 23 65 6e 64 69 66 0a 0a 69 6e 74 20 73  );.#endif..int s
30550 71 6c 69 74 65 33 45 78 70 72 56 65 63 74 6f 72  qlite3ExprVector
30560 53 69 7a 65 28 45 78 70 72 20 2a 70 45 78 70 72  Size(Expr *pExpr
30570 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78  );.int sqlite3Ex
30580 70 72 49 73 56 65 63 74 6f 72 28 45 78 70 72 20  prIsVector(Expr 
30590 2a 70 45 78 70 72 29 3b 0a 45 78 70 72 20 2a 73  *pExpr);.Expr *s
305a0 71 6c 69 74 65 33 56 65 63 74 6f 72 46 69 65 6c  qlite3VectorFiel
305b0 64 53 75 62 65 78 70 72 28 45 78 70 72 2a 2c 20  dSubexpr(Expr*, 
305c0 69 6e 74 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69  int);.Expr *sqli
305d0 74 65 33 45 78 70 72 46 6f 72 56 65 63 74 6f 72  te3ExprForVector
305e0 46 69 65 6c 64 28 50 61 72 73 65 2a 2c 45 78 70  Field(Parse*,Exp
305f0 72 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  r*,int);.void sq
30600 6c 69 74 65 33 56 65 63 74 6f 72 45 72 72 6f 72  lite3VectorError
30610 4d 73 67 28 50 61 72 73 65 2a 2c 20 45 78 70 72  Msg(Parse*, Expr
30620 2a 29 3b 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c  *);..#ifndef SQL
30630 49 54 45 5f 4f 4d 49 54 5f 43 4f 4d 50 49 4c 45  ITE_OMIT_COMPILE
30640 4f 50 54 49 4f 4e 5f 44 49 41 47 53 0a 63 6f 6e  OPTION_DIAGS.con
30650 73 74 20 63 68 61 72 20 2a 2a 73 71 6c 69 74 65  st char **sqlite
30660 33 43 6f 6d 70 69 6c 65 4f 70 74 69 6f 6e 73 28  3CompileOptions(
30670 69 6e 74 20 2a 70 6e 4f 70 74 29 3b 0a 23 65 6e  int *pnOpt);.#en
30680 64 69 66 0a 0a 23 65 6e 64 69 66 20 2f 2a 20 53  dif..#endif /* S
30690 51 4c 49 54 45 49 4e 54 5f 48 20 2a 2f 0a        QLITEINT_H */.