/ Hex Artifact Content
Login

Artifact 7e32765449d103b6b68f6d64a54add80c82e94cd8661afe34c9657b0c0e61512:


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 20 53 51 4c 49 54 45 5f 44 45 42 55 47 5f 43  * SQLITE_DEBUG_C
3490: 4f 4c 55 4d 4e 43 41 43 48 45 20 69 73 20 73 79  OLUMNCACHE is sy
34a0: 6e 6f 6d 6f 75 73 20 77 69 74 68 20 53 51 4c 49  nomous with SQLI
34b0: 54 45 5f 44 45 42 55 47 2e 20 20 54 68 65 20 0a  TE_DEBUG.  The .
34c0: 2a 2a 20 53 51 4c 49 54 45 5f 44 45 42 55 47 5f  ** SQLITE_DEBUG_
34d0: 43 4f 4c 55 4d 4e 43 41 43 48 45 20 73 79 6d 62  COLUMNCACHE symb
34e0: 6f 6c 20 6f 6e 6c 79 20 65 78 69 73 74 73 20 74  ol only exists t
34f0: 6f 20 70 72 6f 76 69 64 65 20 61 20 63 6f 6e 76  o provide a conv
3500: 65 6e 69 65 6e 74 0a 2a 2a 20 77 61 79 20 74 6f  enient.** way to
3510: 20 73 65 61 72 63 68 20 66 6f 72 20 61 6c 6c 20   search for all 
3520: 63 6f 64 65 20 74 68 61 74 20 64 65 61 6c 73 20  code that deals 
3530: 77 69 74 68 20 76 65 72 69 66 79 69 6e 67 20 63  with verifying c
3540: 6f 72 72 65 63 74 20 62 65 68 61 76 69 6f 72 0a  orrect behavior.
3550: 2a 2a 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e  ** of the column
3560: 20 63 61 63 68 65 2e 0a 2a 2f 0a 23 69 66 64 65   cache..*/.#ifde
3570: 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 23  f SQLITE_DEBUG.#
3580: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44   define SQLITE_D
3590: 45 42 55 47 5f 43 4f 4c 55 4d 4e 43 41 43 48 45  EBUG_COLUMNCACHE
35a0: 20 31 0a 23 65 6c 73 65 0a 23 20 75 6e 64 65 66   1.#else.# undef
35b0: 20 53 51 4c 49 54 5f 44 45 42 55 47 5f 43 4f 4c   SQLIT_DEBUG_COL
35c0: 55 4d 4e 43 41 43 48 45 0a 23 65 6e 64 69 66 0a  UMNCACHE.#endif.
35d0: 0a 2f 2a 0a 2a 2a 20 45 6e 61 62 6c 65 20 53 51  ./*.** Enable SQ
35e0: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 45 58 50 4c  LITE_ENABLE_EXPL
35f0: 41 49 4e 5f 43 4f 4d 4d 45 4e 54 53 20 69 66 20  AIN_COMMENTS if 
3600: 53 51 4c 49 54 45 5f 44 45 42 55 47 20 69 73 20  SQLITE_DEBUG is 
3610: 74 75 72 6e 65 64 20 6f 6e 2e 0a 2a 2f 0a 23 69  turned on..*/.#i
3620: 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  f !defined(SQLIT
3630: 45 5f 45 4e 41 42 4c 45 5f 45 58 50 4c 41 49 4e  E_ENABLE_EXPLAIN
3640: 5f 43 4f 4d 4d 45 4e 54 53 29 20 26 26 20 64 65  _COMMENTS) && de
3650: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42  fined(SQLITE_DEB
3660: 55 47 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  UG).# define SQL
3670: 49 54 45 5f 45 4e 41 42 4c 45 5f 45 58 50 4c 41  ITE_ENABLE_EXPLA
3680: 49 4e 5f 43 4f 4d 4d 45 4e 54 53 20 31 0a 23 65  IN_COMMENTS 1.#e
3690: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  ndif../*.** The 
36a0: 74 65 73 74 63 61 73 65 28 29 20 6d 61 63 72 6f  testcase() macro
36b0: 20 69 73 20 75 73 65 64 20 74 6f 20 61 69 64 20   is used to aid 
36c0: 69 6e 20 63 6f 76 65 72 61 67 65 20 74 65 73 74  in coverage test
36d0: 69 6e 67 2e 20 20 57 68 65 6e 0a 2a 2a 20 64 6f  ing.  When.** do
36e0: 69 6e 67 20 63 6f 76 65 72 61 67 65 20 74 65 73  ing coverage tes
36f0: 74 69 6e 67 2c 20 74 68 65 20 63 6f 6e 64 69 74  ting, the condit
3700: 69 6f 6e 20 69 6e 73 69 64 65 20 74 68 65 20 61  ion inside the a
3710: 72 67 75 6d 65 6e 74 20 74 6f 0a 2a 2a 20 74 65  rgument to.** te
3720: 73 74 63 61 73 65 28 29 20 6d 75 73 74 20 62 65  stcase() must be
3730: 20 65 76 61 6c 75 61 74 65 64 20 62 6f 74 68 20   evaluated both 
3740: 74 72 75 65 20 61 6e 64 20 66 61 6c 73 65 20 69  true and false i
3750: 6e 20 6f 72 64 65 72 20 74 6f 0a 2a 2a 20 67 65  n order to.** ge
3760: 74 20 66 75 6c 6c 20 62 72 61 6e 63 68 20 63 6f  t full branch co
3770: 76 65 72 61 67 65 2e 20 20 54 68 65 20 74 65 73  verage.  The tes
3780: 74 63 61 73 65 28 29 20 6d 61 63 72 6f 20 69 73  tcase() macro is
3790: 20 69 6e 73 65 72 74 65 64 0a 2a 2a 20 74 6f 20   inserted.** to 
37a0: 68 65 6c 70 20 65 6e 73 75 72 65 20 61 64 65 71  help ensure adeq
37b0: 75 61 74 65 20 74 65 73 74 20 63 6f 76 65 72 61  uate test covera
37c0: 67 65 20 69 6e 20 70 6c 61 63 65 73 20 77 68 65  ge in places whe
37d0: 72 65 20 73 69 6d 70 6c 65 0a 2a 2a 20 63 6f 6e  re simple.** con
37e0: 64 69 74 69 6f 6e 2f 64 65 63 69 73 69 6f 6e 20  dition/decision 
37f0: 63 6f 76 65 72 61 67 65 20 69 73 20 69 6e 61 64  coverage is inad
3800: 65 71 75 61 74 65 2e 20 20 46 6f 72 20 65 78 61  equate.  For exa
3810: 6d 70 6c 65 2c 20 74 65 73 74 63 61 73 65 28 29  mple, testcase()
3820: 0a 2a 2a 20 63 61 6e 20 62 65 20 75 73 65 64 20  .** can be used 
3830: 74 6f 20 6d 61 6b 65 20 73 75 72 65 20 62 6f 75  to make sure bou
3840: 6e 64 61 72 79 20 76 61 6c 75 65 73 20 61 72 65  ndary values are
3850: 20 74 65 73 74 65 64 2e 20 20 46 6f 72 0a 2a 2a   tested.  For.**
3860: 20 62 69 74 6d 61 73 6b 20 74 65 73 74 73 2c 20   bitmask tests, 
3870: 74 65 73 74 63 61 73 65 28 29 20 63 61 6e 20 62  testcase() can b
3880: 65 20 75 73 65 64 20 74 6f 20 6d 61 6b 65 20 73  e used to make s
3890: 75 72 65 20 65 61 63 68 20 62 69 74 0a 2a 2a 20  ure each bit.** 
38a0: 69 73 20 73 69 67 6e 69 66 69 63 61 6e 74 20 61  is significant a
38b0: 6e 64 20 75 73 65 64 20 61 74 20 6c 65 61 73 74  nd used at least
38c0: 20 6f 6e 63 65 2e 20 20 4f 6e 20 73 77 69 74 63   once.  On switc
38d0: 68 20 73 74 61 74 65 6d 65 6e 74 73 0a 2a 2a 20  h statements.** 
38e0: 77 68 65 72 65 20 6d 75 6c 74 69 70 6c 65 20 63  where multiple c
38f0: 61 73 65 73 20 67 6f 20 74 6f 20 74 68 65 20 73  ases go to the s
3900: 61 6d 65 20 62 6c 6f 63 6b 20 6f 66 20 63 6f 64  ame block of cod
3910: 65 2c 20 74 65 73 74 63 61 73 65 28 29 0a 2a 2a  e, testcase().**
3920: 20 63 61 6e 20 69 6e 73 75 72 65 20 74 68 61 74   can insure that
3930: 20 61 6c 6c 20 63 61 73 65 73 20 61 72 65 20 65   all cases are e
3940: 76 61 6c 75 61 74 65 64 2e 0a 2a 2a 0a 2a 2f 0a  valuated..**.*/.
3950: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 43 4f  #ifdef SQLITE_CO
3960: 56 45 52 41 47 45 5f 54 45 53 54 0a 20 20 76 6f  VERAGE_TEST.  vo
3970: 69 64 20 73 71 6c 69 74 65 33 43 6f 76 65 72 61  id sqlite3Covera
3980: 67 65 28 69 6e 74 29 3b 0a 23 20 64 65 66 69 6e  ge(int);.# defin
3990: 65 20 74 65 73 74 63 61 73 65 28 58 29 20 20 69  e testcase(X)  i
39a0: 66 28 20 58 20 29 7b 20 73 71 6c 69 74 65 33 43  f( X ){ sqlite3C
39b0: 6f 76 65 72 61 67 65 28 5f 5f 4c 49 4e 45 5f 5f  overage(__LINE__
39c0: 29 3b 20 7d 0a 23 65 6c 73 65 0a 23 20 64 65 66  ); }.#else.# def
39d0: 69 6e 65 20 74 65 73 74 63 61 73 65 28 58 29 0a  ine testcase(X).
39e0: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68  #endif../*.** Th
39f0: 65 20 54 45 53 54 4f 4e 4c 59 20 6d 61 63 72 6f  e TESTONLY macro
3a00: 20 69 73 20 75 73 65 64 20 74 6f 20 65 6e 63 6c   is used to encl
3a10: 6f 73 65 20 76 61 72 69 61 62 6c 65 20 64 65 63  ose variable dec
3a20: 6c 61 72 61 74 69 6f 6e 73 20 6f 72 0a 2a 2a 20  larations or.** 
3a30: 6f 74 68 65 72 20 62 69 74 73 20 6f 66 20 63 6f  other bits of co
3a40: 64 65 20 74 68 61 74 20 61 72 65 20 6e 65 65 64  de that are need
3a50: 65 64 20 74 6f 20 73 75 70 70 6f 72 74 20 74 68  ed to support th
3a60: 65 20 61 72 67 75 6d 65 6e 74 73 0a 2a 2a 20 77  e arguments.** w
3a70: 69 74 68 69 6e 20 74 65 73 74 63 61 73 65 28 29  ithin testcase()
3a80: 20 61 6e 64 20 61 73 73 65 72 74 28 29 20 6d 61   and assert() ma
3a90: 63 72 6f 73 2e 0a 2a 2f 0a 23 69 66 20 21 64 65  cros..*/.#if !de
3aa0: 66 69 6e 65 64 28 4e 44 45 42 55 47 29 20 7c 7c  fined(NDEBUG) ||
3ab0: 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
3ac0: 43 4f 56 45 52 41 47 45 5f 54 45 53 54 29 0a 23  COVERAGE_TEST).#
3ad0: 20 64 65 66 69 6e 65 20 54 45 53 54 4f 4e 4c 59   define TESTONLY
3ae0: 28 58 29 20 20 58 0a 23 65 6c 73 65 0a 23 20 64  (X)  X.#else.# d
3af0: 65 66 69 6e 65 20 54 45 53 54 4f 4e 4c 59 28 58  efine TESTONLY(X
3b00: 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  ).#endif../*.** 
3b10: 53 6f 6d 65 74 69 6d 65 73 20 77 65 20 6e 65 65  Sometimes we nee
3b20: 64 20 61 20 73 6d 61 6c 6c 20 61 6d 6f 75 6e 74  d a small amount
3b30: 20 6f 66 20 63 6f 64 65 20 73 75 63 68 20 61 73   of code such as
3b40: 20 61 20 76 61 72 69 61 62 6c 65 20 69 6e 69 74   a variable init
3b50: 69 61 6c 69 7a 61 74 69 6f 6e 0a 2a 2a 20 74 6f  ialization.** to
3b60: 20 73 65 74 75 70 20 66 6f 72 20 61 20 6c 61 74   setup for a lat
3b70: 65 72 20 61 73 73 65 72 74 28 29 20 73 74 61 74  er assert() stat
3b80: 65 6d 65 6e 74 2e 20 20 57 65 20 64 6f 20 6e 6f  ement.  We do no
3b90: 74 20 77 61 6e 74 20 74 68 69 73 20 63 6f 64 65  t want this code
3ba0: 20 74 6f 0a 2a 2a 20 61 70 70 65 61 72 20 77 68   to.** appear wh
3bb0: 65 6e 20 61 73 73 65 72 74 28 29 20 69 73 20 64  en assert() is d
3bc0: 69 73 61 62 6c 65 64 2e 20 20 54 68 65 20 66 6f  isabled.  The fo
3bd0: 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 20 69 73  llowing macro is
3be0: 20 74 68 65 72 65 66 6f 72 65 0a 2a 2a 20 75 73   therefore.** us
3bf0: 65 64 20 74 6f 20 63 6f 6e 74 61 69 6e 20 74 68  ed to contain th
3c00: 61 74 20 73 65 74 75 70 20 63 6f 64 65 2e 20 20  at setup code.  
3c10: 54 68 65 20 22 56 56 41 22 20 61 63 72 6f 6e 79  The "VVA" acrony
3c20: 6d 20 73 74 61 6e 64 73 20 66 6f 72 0a 2a 2a 20  m stands for.** 
3c30: 22 56 65 72 69 66 69 63 61 74 69 6f 6e 2c 20 56  "Verification, V
3c40: 61 6c 69 64 61 74 69 6f 6e 2c 20 61 6e 64 20 41  alidation, and A
3c50: 63 63 72 65 64 69 74 61 74 69 6f 6e 22 2e 20 20  ccreditation".  
3c60: 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20  In other words, 
3c70: 74 68 65 0a 2a 2a 20 63 6f 64 65 20 77 69 74 68  the.** code with
3c80: 69 6e 20 56 56 41 5f 4f 4e 4c 59 28 29 20 77 69  in VVA_ONLY() wi
3c90: 6c 6c 20 6f 6e 6c 79 20 72 75 6e 20 64 75 72 69  ll only run duri
3ca0: 6e 67 20 76 65 72 69 66 69 63 61 74 69 6f 6e 20  ng verification 
3cb0: 70 72 6f 63 65 73 73 65 73 2e 0a 2a 2f 0a 23 69  processes..*/.#i
3cc0: 66 6e 64 65 66 20 4e 44 45 42 55 47 0a 23 20 64  fndef NDEBUG.# d
3cd0: 65 66 69 6e 65 20 56 56 41 5f 4f 4e 4c 59 28 58  efine VVA_ONLY(X
3ce0: 29 20 20 58 0a 23 65 6c 73 65 0a 23 20 64 65 66  )  X.#else.# def
3cf0: 69 6e 65 20 56 56 41 5f 4f 4e 4c 59 28 58 29 0a  ine VVA_ONLY(X).
3d00: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68  #endif../*.** Th
3d10: 65 20 41 4c 57 41 59 53 20 61 6e 64 20 4e 45 56  e ALWAYS and NEV
3d20: 45 52 20 6d 61 63 72 6f 73 20 73 75 72 72 6f 75  ER macros surrou
3d30: 6e 64 20 62 6f 6f 6c 65 61 6e 20 65 78 70 72 65  nd boolean expre
3d40: 73 73 69 6f 6e 73 20 77 68 69 63 68 0a 2a 2a 20  ssions which.** 
3d50: 61 72 65 20 69 6e 74 65 6e 64 65 64 20 74 6f 20  are intended to 
3d60: 61 6c 77 61 79 73 20 62 65 20 74 72 75 65 20 6f  always be true o
3d70: 72 20 66 61 6c 73 65 2c 20 72 65 73 70 65 63 74  r false, respect
3d80: 69 76 65 6c 79 2e 20 20 53 75 63 68 0a 2a 2a 20  ively.  Such.** 
3d90: 65 78 70 72 65 73 73 69 6f 6e 73 20 63 6f 75 6c  expressions coul
3da0: 64 20 62 65 20 6f 6d 69 74 74 65 64 20 66 72 6f  d be omitted fro
3db0: 6d 20 74 68 65 20 63 6f 64 65 20 63 6f 6d 70 6c  m the code compl
3dc0: 65 74 65 6c 79 2e 20 20 42 75 74 20 74 68 65 79  etely.  But they
3dd0: 0a 2a 2a 20 61 72 65 20 69 6e 63 6c 75 64 65 64  .** are included
3de0: 20 69 6e 20 61 20 66 65 77 20 63 61 73 65 73 20   in a few cases 
3df0: 69 6e 20 6f 72 64 65 72 20 74 6f 20 65 6e 68 61  in order to enha
3e00: 6e 63 65 20 74 68 65 20 72 65 73 69 6c 69 65 6e  nce the resilien
3e10: 63 65 0a 2a 2a 20 6f 66 20 53 51 4c 69 74 65 20  ce.** of SQLite 
3e20: 74 6f 20 75 6e 65 78 70 65 63 74 65 64 20 62 65  to unexpected be
3e30: 68 61 76 69 6f 72 20 2d 20 74 6f 20 6d 61 6b 65  havior - to make
3e40: 20 74 68 65 20 63 6f 64 65 20 22 73 65 6c 66 2d   the code "self-
3e50: 68 65 61 6c 69 6e 67 22 0a 2a 2a 20 6f 72 20 22  healing".** or "
3e60: 64 75 63 74 69 6c 65 22 20 72 61 74 68 65 72 20  ductile" rather 
3e70: 74 68 61 6e 20 62 65 69 6e 67 20 22 62 72 69 74  than being "brit
3e80: 74 6c 65 22 20 61 6e 64 20 63 72 61 73 68 69 6e  tle" and crashin
3e90: 67 20 61 74 20 74 68 65 20 66 69 72 73 74 0a 2a  g at the first.*
3ea0: 2a 20 68 69 6e 74 20 6f 66 20 75 6e 70 6c 61 6e  * hint of unplan
3eb0: 6e 65 64 20 62 65 68 61 76 69 6f 72 2e 0a 2a 2a  ned behavior..**
3ec0: 0a 2a 2a 20 49 6e 20 6f 74 68 65 72 20 77 6f 72  .** In other wor
3ed0: 64 73 2c 20 41 4c 57 41 59 53 20 61 6e 64 20 4e  ds, ALWAYS and N
3ee0: 45 56 45 52 20 61 72 65 20 61 64 64 65 64 20 66  EVER are added f
3ef0: 6f 72 20 64 65 66 65 6e 73 69 76 65 20 63 6f 64  or defensive cod
3f00: 65 2e 0a 2a 2a 0a 2a 2a 20 57 68 65 6e 20 64 6f  e..**.** When do
3f10: 69 6e 67 20 63 6f 76 65 72 61 67 65 20 74 65 73  ing coverage tes
3f20: 74 69 6e 67 20 41 4c 57 41 59 53 20 61 6e 64 20  ting ALWAYS and 
3f30: 4e 45 56 45 52 20 61 72 65 20 68 61 72 64 2d 63  NEVER are hard-c
3f40: 6f 64 65 64 20 74 6f 0a 2a 2a 20 62 65 20 74 72  oded to.** be tr
3f50: 75 65 20 61 6e 64 20 66 61 6c 73 65 20 73 6f 20  ue and false so 
3f60: 74 68 61 74 20 74 68 65 20 75 6e 72 65 61 63 68  that the unreach
3f70: 61 62 6c 65 20 63 6f 64 65 20 74 68 65 79 20 73  able code they s
3f80: 70 65 63 69 66 79 20 77 69 6c 6c 0a 2a 2a 20 6e  pecify will.** n
3f90: 6f 74 20 62 65 20 63 6f 75 6e 74 65 64 20 61 73  ot be counted as
3fa0: 20 75 6e 74 65 73 74 65 64 20 63 6f 64 65 2e 0a   untested code..
3fb0: 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53  */.#if defined(S
3fc0: 51 4c 49 54 45 5f 43 4f 56 45 52 41 47 45 5f 54  QLITE_COVERAGE_T
3fd0: 45 53 54 29 20 7c 7c 20 64 65 66 69 6e 65 64 28  EST) || defined(
3fe0: 53 51 4c 49 54 45 5f 4d 55 54 41 54 49 4f 4e 5f  SQLITE_MUTATION_
3ff0: 54 45 53 54 29 0a 23 20 64 65 66 69 6e 65 20 41  TEST).# define A
4000: 4c 57 41 59 53 28 58 29 20 20 20 20 20 20 28 31  LWAYS(X)      (1
4010: 29 0a 23 20 64 65 66 69 6e 65 20 4e 45 56 45 52  ).# define NEVER
4020: 28 58 29 20 20 20 20 20 20 20 28 30 29 0a 23 65  (X)       (0).#e
4030: 6c 69 66 20 21 64 65 66 69 6e 65 64 28 4e 44 45  lif !defined(NDE
4040: 42 55 47 29 0a 23 20 64 65 66 69 6e 65 20 41 4c  BUG).# define AL
4050: 57 41 59 53 28 58 29 20 20 20 20 20 20 28 28 58  WAYS(X)      ((X
4060: 29 3f 31 3a 28 61 73 73 65 72 74 28 30 29 2c 30  )?1:(assert(0),0
4070: 29 29 0a 23 20 64 65 66 69 6e 65 20 4e 45 56 45  )).# define NEVE
4080: 52 28 58 29 20 20 20 20 20 20 20 28 28 58 29 3f  R(X)       ((X)?
4090: 28 61 73 73 65 72 74 28 30 29 2c 31 29 3a 30 29  (assert(0),1):0)
40a0: 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
40b0: 41 4c 57 41 59 53 28 58 29 20 20 20 20 20 20 28  ALWAYS(X)      (
40c0: 58 29 0a 23 20 64 65 66 69 6e 65 20 4e 45 56 45  X).# define NEVE
40d0: 52 28 58 29 20 20 20 20 20 20 20 28 58 29 0a 23  R(X)       (X).#
40e0: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 53 6f 6d  endif../*.** Som
40f0: 65 20 63 6f 6e 64 69 74 69 6f 6e 61 6c 73 20 61  e conditionals a
4100: 72 65 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73  re optimizations
4110: 20 6f 6e 6c 79 2e 20 20 49 6e 20 6f 74 68 65 72   only.  In other
4120: 20 77 6f 72 64 73 2c 20 69 66 20 74 68 65 0a 2a   words, if the.*
4130: 2a 20 63 6f 6e 64 69 74 69 6f 6e 61 6c 73 20 61  * conditionals a
4140: 72 65 20 72 65 70 6c 61 63 65 64 20 77 69 74 68  re replaced with
4150: 20 61 20 63 6f 6e 73 74 61 6e 74 20 31 20 28 74   a constant 1 (t
4160: 72 75 65 29 20 6f 72 20 30 20 28 66 61 6c 73 65  rue) or 0 (false
4170: 29 20 74 68 65 6e 0a 2a 2a 20 74 68 65 20 63 6f  ) then.** the co
4180: 72 72 65 63 74 20 61 6e 73 77 65 72 20 69 73 20  rrect answer is 
4190: 73 74 69 6c 6c 20 6f 62 74 61 69 6e 65 64 2c 20  still obtained, 
41a0: 74 68 6f 75 67 68 20 70 65 72 68 61 70 73 20 6e  though perhaps n
41b0: 6f 74 20 61 73 20 71 75 69 63 6b 6c 79 2e 0a 2a  ot as quickly..*
41c0: 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69  *.** The followi
41d0: 6e 67 20 6d 61 63 72 6f 73 20 6d 61 72 6b 20 74  ng macros mark t
41e0: 68 65 73 65 20 6f 70 74 69 6d 69 7a 61 74 69 6f  hese optimizatio
41f0: 6e 73 20 63 6f 6e 64 69 74 69 6f 6e 61 6c 73 2e  ns conditionals.
4200: 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28  .*/.#if defined(
4210: 53 51 4c 49 54 45 5f 4d 55 54 41 54 49 4f 4e 5f  SQLITE_MUTATION_
4220: 54 45 53 54 29 0a 23 20 64 65 66 69 6e 65 20 4f  TEST).# define O
4230: 4b 5f 49 46 5f 41 4c 57 41 59 53 5f 54 52 55 45  K_IF_ALWAYS_TRUE
4240: 28 58 29 20 20 28 31 29 0a 23 20 64 65 66 69 6e  (X)  (1).# defin
4250: 65 20 4f 4b 5f 49 46 5f 41 4c 57 41 59 53 5f 46  e OK_IF_ALWAYS_F
4260: 41 4c 53 45 28 58 29 20 28 30 29 0a 23 65 6c 73  ALSE(X) (0).#els
4270: 65 0a 23 20 64 65 66 69 6e 65 20 4f 4b 5f 49 46  e.# define OK_IF
4280: 5f 41 4c 57 41 59 53 5f 54 52 55 45 28 58 29 20  _ALWAYS_TRUE(X) 
4290: 20 28 58 29 0a 23 20 64 65 66 69 6e 65 20 4f 4b   (X).# define OK
42a0: 5f 49 46 5f 41 4c 57 41 59 53 5f 46 41 4c 53 45  _IF_ALWAYS_FALSE
42b0: 28 58 29 20 28 58 29 0a 23 65 6e 64 69 66 0a 0a  (X) (X).#endif..
42c0: 2f 2a 0a 2a 2a 20 53 6f 6d 65 20 6d 61 6c 6c 6f  /*.** Some mallo
42d0: 63 20 66 61 69 6c 75 72 65 73 20 61 72 65 20 6f  c failures are o
42e0: 6e 6c 79 20 70 6f 73 73 69 62 6c 65 20 69 66 20  nly possible if 
42f0: 53 51 4c 49 54 45 5f 54 45 53 54 5f 52 45 41 4c  SQLITE_TEST_REAL
4300: 4c 4f 43 5f 53 54 52 45 53 53 20 69 73 0a 2a 2a  LOC_STRESS is.**
4310: 20 64 65 66 69 6e 65 64 2e 20 20 57 65 20 6e 65   defined.  We ne
4320: 65 64 20 74 6f 20 64 65 66 65 6e 64 20 61 67 61  ed to defend aga
4330: 69 6e 73 74 20 74 68 6f 73 65 20 66 61 69 6c 75  inst those failu
4340: 72 65 73 20 77 68 65 6e 20 74 65 73 74 69 6e 67  res when testing
4350: 20 77 69 74 68 0a 2a 2a 20 53 51 4c 49 54 45 5f   with.** SQLITE_
4360: 54 45 53 54 5f 52 45 41 4c 4c 4f 43 5f 53 54 52  TEST_REALLOC_STR
4370: 45 53 53 2c 20 62 75 74 20 77 65 20 64 6f 6e 27  ESS, but we don'
4380: 74 20 77 61 6e 74 20 74 68 65 20 75 6e 72 65 61  t want the unrea
4390: 63 68 61 62 6c 65 20 62 72 61 6e 63 68 65 73 0a  chable branches.
43a0: 2a 2a 20 64 75 72 69 6e 67 20 61 20 6e 6f 72 6d  ** during a norm
43b0: 61 6c 20 62 75 69 6c 64 2e 20 20 54 68 65 20 66  al build.  The f
43c0: 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 20 63  ollowing macro c
43d0: 61 6e 20 62 65 20 75 73 65 64 20 74 6f 20 64 69  an be used to di
43e0: 73 61 62 6c 65 20 74 65 73 74 73 0a 2a 2a 20 74  sable tests.** t
43f0: 68 61 74 20 61 72 65 20 61 6c 77 61 79 73 20 66  hat are always f
4400: 61 6c 73 65 20 65 78 63 65 70 74 20 77 68 65 6e  alse except when
4410: 20 53 51 4c 49 54 45 5f 54 45 53 54 5f 52 45 41   SQLITE_TEST_REA
4420: 4c 4c 4f 43 5f 53 54 52 45 53 53 20 69 73 20 73  LLOC_STRESS is s
4430: 65 74 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e  et..*/.#if defin
4440: 65 64 28 53 51 4c 49 54 45 5f 54 45 53 54 5f 52  ed(SQLITE_TEST_R
4450: 45 41 4c 4c 4f 43 5f 53 54 52 45 53 53 29 0a 23  EALLOC_STRESS).#
4460: 20 64 65 66 69 6e 65 20 4f 4e 4c 59 5f 49 46 5f   define ONLY_IF_
4470: 52 45 41 4c 4c 4f 43 5f 53 54 52 45 53 53 28 58  REALLOC_STRESS(X
4480: 29 20 20 28 58 29 0a 23 65 6c 69 66 20 21 64 65  )  (X).#elif !de
4490: 66 69 6e 65 64 28 4e 44 45 42 55 47 29 0a 23 20  fined(NDEBUG).# 
44a0: 64 65 66 69 6e 65 20 4f 4e 4c 59 5f 49 46 5f 52  define ONLY_IF_R
44b0: 45 41 4c 4c 4f 43 5f 53 54 52 45 53 53 28 58 29  EALLOC_STRESS(X)
44c0: 20 20 28 28 58 29 3f 28 61 73 73 65 72 74 28 30    ((X)?(assert(0
44d0: 29 2c 31 29 3a 30 29 0a 23 65 6c 73 65 0a 23 20  ),1):0).#else.# 
44e0: 64 65 66 69 6e 65 20 4f 4e 4c 59 5f 49 46 5f 52  define ONLY_IF_R
44f0: 45 41 4c 4c 4f 43 5f 53 54 52 45 53 53 28 58 29  EALLOC_STRESS(X)
4500: 20 20 28 30 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a    (0).#endif../*
4510: 0a 2a 2a 20 44 65 63 6c 61 72 61 74 69 6f 6e 73  .** Declarations
4520: 20 75 73 65 64 20 66 6f 72 20 74 72 61 63 69 6e   used for tracin
4530: 67 20 74 68 65 20 6f 70 65 72 61 74 69 6e 67 20  g the operating 
4540: 73 79 73 74 65 6d 20 69 6e 74 65 72 66 61 63 65  system interface
4550: 73 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65  s..*/.#if define
4560: 64 28 53 51 4c 49 54 45 5f 46 4f 52 43 45 5f 4f  d(SQLITE_FORCE_O
4570: 53 5f 54 52 41 43 45 29 20 7c 7c 20 64 65 66 69  S_TRACE) || defi
4580: 6e 65 64 28 53 51 4c 49 54 45 5f 54 45 53 54 29  ned(SQLITE_TEST)
4590: 20 7c 7c 20 5c 0a 20 20 20 20 28 64 65 66 69 6e   || \.    (defin
45a0: 65 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47 29  ed(SQLITE_DEBUG)
45b0: 20 26 26 20 53 51 4c 49 54 45 5f 4f 53 5f 57 49   && SQLITE_OS_WI
45c0: 4e 29 0a 20 20 65 78 74 65 72 6e 20 69 6e 74 20  N).  extern int 
45d0: 73 71 6c 69 74 65 33 4f 53 54 72 61 63 65 3b 0a  sqlite3OSTrace;.
45e0: 23 20 64 65 66 69 6e 65 20 4f 53 54 52 41 43 45  # define OSTRACE
45f0: 28 58 29 20 20 20 20 20 20 20 20 20 20 69 66 28  (X)          if(
4600: 20 73 71 6c 69 74 65 33 4f 53 54 72 61 63 65 20   sqlite3OSTrace 
4610: 29 20 73 71 6c 69 74 65 33 44 65 62 75 67 50 72  ) sqlite3DebugPr
4620: 69 6e 74 66 20 58 0a 23 20 64 65 66 69 6e 65 20  intf X.# define 
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 0a 23 65 6c 73 65 0a 23 20 64 65 66  RACE.#else.# def
4650: 69 6e 65 20 4f 53 54 52 41 43 45 28 58 29 0a 23  ine OSTRACE(X).#
4660: 20 75 6e 64 65 66 20 20 53 51 4c 49 54 45 5f 48   undef  SQLITE_H
4670: 41 56 45 5f 4f 53 5f 54 52 41 43 45 0a 23 65 6e  AVE_OS_TRACE.#en
4680: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 73 20 74 68  dif../*.** Is th
4690: 65 20 73 71 6c 69 74 65 33 45 72 72 4e 61 6d 65  e sqlite3ErrName
46a0: 28 29 20 66 75 6e 63 74 69 6f 6e 20 6e 65 65 64  () function need
46b0: 65 64 20 69 6e 20 74 68 65 20 62 75 69 6c 64 3f  ed in the build?
46c0: 20 20 43 75 72 72 65 6e 74 6c 79 2c 0a 2a 2a 20    Currently,.** 
46d0: 69 74 20 69 73 20 6e 65 65 64 65 64 20 62 79 20  it is needed by 
46e0: 22 6d 75 74 65 78 5f 77 33 32 2e 63 22 20 28 77  "mutex_w32.c" (w
46f0: 68 65 6e 20 64 65 62 75 67 67 69 6e 67 29 2c 20  hen debugging), 
4700: 22 6f 73 5f 77 69 6e 2e 63 22 20 28 77 68 65 6e  "os_win.c" (when
4710: 0a 2a 2a 20 4f 53 54 52 41 43 45 20 69 73 20 65  .** OSTRACE is e
4720: 6e 61 62 6c 65 64 29 2c 20 61 6e 64 20 62 79 20  nabled), and by 
4730: 73 65 76 65 72 61 6c 20 22 74 65 73 74 2a 2e 63  several "test*.c
4740: 22 20 66 69 6c 65 73 20 28 77 68 69 63 68 20 61  " files (which a
4750: 72 65 0a 2a 2a 20 63 6f 6d 70 69 6c 65 64 20 75  re.** compiled u
4760: 73 69 6e 67 20 53 51 4c 49 54 45 5f 54 45 53 54  sing SQLITE_TEST
4770: 29 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65  )..*/.#if define
4780: 64 28 53 51 4c 49 54 45 5f 48 41 56 45 5f 4f 53  d(SQLITE_HAVE_OS
4790: 5f 54 52 41 43 45 29 20 7c 7c 20 64 65 66 69 6e  _TRACE) || defin
47a0: 65 64 28 53 51 4c 49 54 45 5f 54 45 53 54 29 20  ed(SQLITE_TEST) 
47b0: 7c 7c 20 5c 0a 20 20 20 20 28 64 65 66 69 6e 65  || \.    (define
47c0: 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47 29 20  d(SQLITE_DEBUG) 
47d0: 26 26 20 53 51 4c 49 54 45 5f 4f 53 5f 57 49 4e  && SQLITE_OS_WIN
47e0: 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  ).# define SQLIT
47f0: 45 5f 4e 45 45 44 5f 45 52 52 5f 4e 41 4d 45 0a  E_NEED_ERR_NAME.
4800: 23 65 6c 73 65 0a 23 20 75 6e 64 65 66 20 20 53  #else.# undef  S
4810: 51 4c 49 54 45 5f 4e 45 45 44 5f 45 52 52 5f 4e  QLITE_NEED_ERR_N
4820: 41 4d 45 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  AME.#endif../*.*
4830: 2a 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  * SQLITE_ENABLE_
4840: 45 58 50 4c 41 49 4e 5f 43 4f 4d 4d 45 4e 54 53  EXPLAIN_COMMENTS
4850: 20 69 73 20 69 6e 63 6f 6d 70 61 74 69 62 6c 65   is incompatible
4860: 20 77 69 74 68 20 53 51 4c 49 54 45 5f 4f 4d 49   with SQLITE_OMI
4870: 54 5f 45 58 50 4c 41 49 4e 0a 2a 2f 0a 23 69 66  T_EXPLAIN.*/.#if
4880: 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
4890: 45 58 50 4c 41 49 4e 0a 23 20 75 6e 64 65 66 20  EXPLAIN.# undef 
48a0: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 45 58  SQLITE_ENABLE_EX
48b0: 50 4c 41 49 4e 5f 43 4f 4d 4d 45 4e 54 53 0a 23  PLAIN_COMMENTS.#
48c0: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 52 65 74  endif../*.** Ret
48d0: 75 72 6e 20 74 72 75 65 20 28 6e 6f 6e 2d 7a 65  urn true (non-ze
48e0: 72 6f 29 20 69 66 20 74 68 65 20 69 6e 70 75 74  ro) if the input
48f0: 20 69 73 20 61 6e 20 69 6e 74 65 67 65 72 20 74   is an integer t
4900: 68 61 74 20 69 73 20 74 6f 6f 20 6c 61 72 67 65  hat is too large
4910: 0a 2a 2a 20 74 6f 20 66 69 74 20 69 6e 20 33 32  .** to fit in 32
4920: 2d 62 69 74 73 2e 20 20 54 68 69 73 20 6d 61 63  -bits.  This mac
4930: 72 6f 20 69 73 20 75 73 65 64 20 69 6e 73 69 64  ro is used insid
4940: 65 20 6f 66 20 76 61 72 69 6f 75 73 20 74 65 73  e of various tes
4950: 74 63 61 73 65 28 29 0a 2a 2a 20 6d 61 63 72 6f  tcase().** macro
4960: 73 20 74 6f 20 76 65 72 69 66 79 20 74 68 61 74  s to verify that
4970: 20 77 65 20 68 61 76 65 20 74 65 73 74 65 64 20   we have tested 
4980: 53 51 4c 69 74 65 20 66 6f 72 20 6c 61 72 67 65  SQLite for large
4990: 2d 66 69 6c 65 20 73 75 70 70 6f 72 74 2e 0a 2a  -file support..*
49a0: 2f 0a 23 64 65 66 69 6e 65 20 49 53 5f 42 49 47  /.#define IS_BIG
49b0: 5f 49 4e 54 28 58 29 20 20 28 28 28 58 29 26 7e  _INT(X)  (((X)&~
49c0: 28 69 36 34 29 30 78 66 66 66 66 66 66 66 66 29  (i64)0xffffffff)
49d0: 21 3d 30 29 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  !=0)../*.** The 
49e0: 6d 61 63 72 6f 20 75 6e 6c 69 6b 65 6c 79 28 29  macro unlikely()
49f0: 20 69 73 20 61 20 68 69 6e 74 20 74 68 61 74 20   is a hint that 
4a00: 73 75 72 72 6f 75 6e 64 73 20 61 20 62 6f 6f 6c  surrounds a bool
4a10: 65 61 6e 0a 2a 2a 20 65 78 70 72 65 73 73 69 6f  ean.** expressio
4a20: 6e 20 74 68 61 74 20 69 73 20 75 73 75 61 6c 6c  n that is usuall
4a30: 79 20 66 61 6c 73 65 2e 20 20 4d 61 63 72 6f 20  y false.  Macro 
4a40: 6c 69 6b 65 6c 79 28 29 20 73 75 72 72 6f 75 6e  likely() surroun
4a50: 64 73 0a 2a 2a 20 61 20 62 6f 6f 6c 65 61 6e 20  ds.** a boolean 
4a60: 65 78 70 72 65 73 73 69 6f 6e 20 74 68 61 74 20  expression that 
4a70: 69 73 20 75 73 75 61 6c 6c 79 20 74 72 75 65 2e  is usually true.
4a80: 20 20 54 68 65 73 65 20 68 69 6e 74 73 20 63 6f    These hints co
4a90: 75 6c 64 2c 0a 2a 2a 20 69 6e 20 74 68 65 6f 72  uld,.** in theor
4aa0: 79 2c 20 62 65 20 75 73 65 64 20 62 79 20 74 68  y, be used by th
4ab0: 65 20 63 6f 6d 70 69 6c 65 72 20 74 6f 20 67 65  e compiler to ge
4ac0: 6e 65 72 61 74 65 20 62 65 74 74 65 72 20 63 6f  nerate better co
4ad0: 64 65 2c 20 62 75 74 0a 2a 2a 20 63 75 72 72 65  de, but.** curre
4ae0: 6e 74 6c 79 20 74 68 65 79 20 61 72 65 20 6a 75  ntly they are ju
4af0: 73 74 20 63 6f 6d 6d 65 6e 74 73 20 66 6f 72 20  st comments for 
4b00: 68 75 6d 61 6e 20 72 65 61 64 65 72 73 2e 0a 2a  human readers..*
4b10: 2f 0a 23 64 65 66 69 6e 65 20 6c 69 6b 65 6c 79  /.#define likely
4b20: 28 58 29 20 20 20 20 28 58 29 0a 23 64 65 66 69  (X)    (X).#defi
4b30: 6e 65 20 75 6e 6c 69 6b 65 6c 79 28 58 29 20 20  ne unlikely(X)  
4b40: 28 58 29 0a 0a 23 69 6e 63 6c 75 64 65 20 22 68  (X)..#include "h
4b50: 61 73 68 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20  ash.h".#include 
4b60: 22 70 61 72 73 65 2e 68 22 0a 23 69 6e 63 6c 75  "parse.h".#inclu
4b70: 64 65 20 3c 73 74 64 69 6f 2e 68 3e 0a 23 69 6e  de <stdio.h>.#in
4b80: 63 6c 75 64 65 20 3c 73 74 64 6c 69 62 2e 68 3e  clude <stdlib.h>
4b90: 0a 23 69 6e 63 6c 75 64 65 20 3c 73 74 72 69 6e  .#include <strin
4ba0: 67 2e 68 3e 0a 23 69 6e 63 6c 75 64 65 20 3c 61  g.h>.#include <a
4bb0: 73 73 65 72 74 2e 68 3e 0a 23 69 6e 63 6c 75 64  ssert.h>.#includ
4bc0: 65 20 3c 73 74 64 64 65 66 2e 68 3e 0a 0a 2f 2a  e <stddef.h>../*
4bd0: 0a 2a 2a 20 55 73 65 20 61 20 6d 61 63 72 6f 20  .** Use a macro 
4be0: 74 6f 20 72 65 70 6c 61 63 65 20 6d 65 6d 63 70  to replace memcp
4bf0: 79 28 29 20 69 66 20 63 6f 6d 70 69 6c 65 64 20  y() if compiled 
4c00: 77 69 74 68 20 53 51 4c 49 54 45 5f 49 4e 4c 49  with SQLITE_INLI
4c10: 4e 45 5f 4d 45 4d 43 50 59 2e 0a 2a 2a 20 54 68  NE_MEMCPY..** Th
4c20: 69 73 20 61 6c 6c 6f 77 73 20 62 65 74 74 65 72  is allows better
4c30: 20 6d 65 61 73 75 72 65 6d 65 6e 74 73 20 6f 66   measurements of
4c40: 20 77 68 65 72 65 20 6d 65 6d 63 70 79 28 29 20   where memcpy() 
4c50: 69 73 20 75 73 65 64 20 77 68 65 6e 20 72 75 6e  is used when run
4c60: 6e 69 6e 67 0a 2a 2a 20 63 61 63 68 65 67 72 69  ning.** cachegri
4c70: 6e 64 2e 20 20 42 75 74 20 74 68 69 73 20 6d 61  nd.  But this ma
4c80: 63 72 6f 20 76 65 72 73 69 6f 6e 20 6f 66 20 6d  cro version of m
4c90: 65 6d 63 70 79 28 29 20 69 73 20 76 65 72 79 20  emcpy() is very 
4ca0: 73 6c 6f 77 20 73 6f 20 69 74 0a 2a 2a 20 73 68  slow so it.** sh
4cb0: 6f 75 6c 64 20 6e 6f 74 20 62 65 20 75 73 65 64  ould not be used
4cc0: 20 69 6e 20 70 72 6f 64 75 63 74 69 6f 6e 2e 20   in production. 
4cd0: 20 54 68 69 73 20 69 73 20 61 20 70 65 72 66 6f   This is a perfo
4ce0: 72 6d 61 6e 63 65 20 6d 65 61 73 75 72 65 6d 65  rmance measureme
4cf0: 6e 74 0a 2a 2a 20 68 61 63 6b 20 6f 6e 6c 79 2e  nt.** hack only.
4d00: 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54  .*/.#ifdef SQLIT
4d10: 45 5f 49 4e 4c 49 4e 45 5f 4d 45 4d 43 50 59 0a  E_INLINE_MEMCPY.
4d20: 23 20 64 65 66 69 6e 65 20 6d 65 6d 63 70 79 28  # define memcpy(
4d30: 44 2c 53 2c 4e 29 20 7b 63 68 61 72 2a 78 78 64  D,S,N) {char*xxd
4d40: 3d 28 63 68 61 72 2a 29 28 44 29 3b 63 6f 6e 73  =(char*)(D);cons
4d50: 74 20 63 68 61 72 2a 78 78 73 3d 28 63 6f 6e 73  t char*xxs=(cons
4d60: 74 20 63 68 61 72 2a 29 28 53 29 3b 5c 0a 20 20  t char*)(S);\.  
4d70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4d80: 20 20 20 20 20 20 69 6e 74 20 78 78 6e 3d 28 4e        int xxn=(N
4d90: 29 3b 77 68 69 6c 65 28 78 78 6e 2d 2d 3e 30 29  );while(xxn-->0)
4da0: 2a 28 78 78 64 2b 2b 29 3d 2a 28 78 78 73 2b 2b  *(xxd++)=*(xxs++
4db0: 29 3b 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  );}.#endif../*.*
4dc0: 2a 20 49 66 20 63 6f 6d 70 69 6c 69 6e 67 20 66  * If compiling f
4dd0: 6f 72 20 61 20 70 72 6f 63 65 73 73 6f 72 20 74  or a processor t
4de0: 68 61 74 20 6c 61 63 6b 73 20 66 6c 6f 61 74 69  hat lacks floati
4df0: 6e 67 20 70 6f 69 6e 74 20 73 75 70 70 6f 72 74  ng point support
4e00: 2c 0a 2a 2a 20 73 75 62 73 74 69 74 75 74 65 20  ,.** substitute 
4e10: 69 6e 74 65 67 65 72 20 66 6f 72 20 66 6c 6f 61  integer for floa
4e20: 74 69 6e 67 2d 70 6f 69 6e 74 0a 2a 2f 0a 23 69  ting-point.*/.#i
4e30: 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  fdef SQLITE_OMIT
4e40: 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 0a  _FLOATING_POINT.
4e50: 23 20 64 65 66 69 6e 65 20 64 6f 75 62 6c 65 20  # define double 
4e60: 73 71 6c 69 74 65 5f 69 6e 74 36 34 0a 23 20 64  sqlite_int64.# d
4e70: 65 66 69 6e 65 20 66 6c 6f 61 74 20 73 71 6c 69  efine float sqli
4e80: 74 65 5f 69 6e 74 36 34 0a 23 20 64 65 66 69 6e  te_int64.# defin
4e90: 65 20 4c 4f 4e 47 44 4f 55 42 4c 45 5f 54 59 50  e LONGDOUBLE_TYP
4ea0: 45 20 73 71 6c 69 74 65 5f 69 6e 74 36 34 0a 23  E sqlite_int64.#
4eb0: 20 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 42   ifndef SQLITE_B
4ec0: 49 47 5f 44 42 4c 0a 23 20 20 20 64 65 66 69 6e  IG_DBL.#   defin
4ed0: 65 20 53 51 4c 49 54 45 5f 42 49 47 5f 44 42 4c  e SQLITE_BIG_DBL
4ee0: 20 28 28 28 73 71 6c 69 74 65 33 5f 69 6e 74 36   (((sqlite3_int6
4ef0: 34 29 31 29 3c 3c 35 30 29 0a 23 20 65 6e 64 69  4)1)<<50).# endi
4f00: 66 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  f.# define SQLIT
4f10: 45 5f 4f 4d 49 54 5f 44 41 54 45 54 49 4d 45 5f  E_OMIT_DATETIME_
4f20: 46 55 4e 43 53 20 31 0a 23 20 64 65 66 69 6e 65  FUNCS 1.# define
4f30: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 41   SQLITE_OMIT_TRA
4f40: 43 45 20 31 0a 23 20 75 6e 64 65 66 20 53 51 4c  CE 1.# undef SQL
4f50: 49 54 45 5f 4d 49 58 45 44 5f 45 4e 44 49 41 4e  ITE_MIXED_ENDIAN
4f60: 5f 36 34 42 49 54 5f 46 4c 4f 41 54 0a 23 20 75  _64BIT_FLOAT.# u
4f70: 6e 64 65 66 20 53 51 4c 49 54 45 5f 48 41 56 45  ndef SQLITE_HAVE
4f80: 5f 49 53 4e 41 4e 0a 23 65 6e 64 69 66 0a 23 69  _ISNAN.#endif.#i
4f90: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 42 49 47  fndef SQLITE_BIG
4fa0: 5f 44 42 4c 0a 23 20 64 65 66 69 6e 65 20 53 51  _DBL.# define SQ
4fb0: 4c 49 54 45 5f 42 49 47 5f 44 42 4c 20 28 31 65  LITE_BIG_DBL (1e
4fc0: 39 39 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  99).#endif../*.*
4fd0: 2a 20 4f 4d 49 54 5f 54 45 4d 50 44 42 20 69 73  * OMIT_TEMPDB is
4fe0: 20 73 65 74 20 74 6f 20 31 20 69 66 20 53 51 4c   set to 1 if SQL
4ff0: 49 54 45 5f 4f 4d 49 54 5f 54 45 4d 50 44 42 20  ITE_OMIT_TEMPDB 
5000: 69 73 20 64 65 66 69 6e 65 64 2c 20 6f 72 20 30  is defined, or 0
5010: 0a 2a 2a 20 61 66 74 65 72 77 61 72 64 2e 20 48  .** afterward. H
5020: 61 76 69 6e 67 20 74 68 69 73 20 6d 61 63 72 6f  aving this macro
5030: 20 61 6c 6c 6f 77 73 20 75 73 20 74 6f 20 63 61   allows us to ca
5040: 75 73 65 20 74 68 65 20 43 20 63 6f 6d 70 69 6c  use the C compil
5050: 65 72 0a 2a 2a 20 74 6f 20 6f 6d 69 74 20 63 6f  er.** to omit co
5060: 64 65 20 75 73 65 64 20 62 79 20 54 45 4d 50 20  de used by TEMP 
5070: 74 61 62 6c 65 73 20 77 69 74 68 6f 75 74 20 6d  tables without m
5080: 65 73 73 79 20 23 69 66 6e 64 65 66 20 73 74 61  essy #ifndef sta
5090: 74 65 6d 65 6e 74 73 2e 0a 2a 2f 0a 23 69 66 64  tements..*/.#ifd
50a0: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54  ef SQLITE_OMIT_T
50b0: 45 4d 50 44 42 0a 23 64 65 66 69 6e 65 20 4f 4d  EMPDB.#define OM
50c0: 49 54 5f 54 45 4d 50 44 42 20 31 0a 23 65 6c 73  IT_TEMPDB 1.#els
50d0: 65 0a 23 64 65 66 69 6e 65 20 4f 4d 49 54 5f 54  e.#define OMIT_T
50e0: 45 4d 50 44 42 20 30 0a 23 65 6e 64 69 66 0a 0a  EMPDB 0.#endif..
50f0: 2f 2a 0a 2a 2a 20 54 68 65 20 22 66 69 6c 65 20  /*.** The "file 
5100: 66 6f 72 6d 61 74 22 20 6e 75 6d 62 65 72 20 69  format" number i
5110: 73 20 61 6e 20 69 6e 74 65 67 65 72 20 74 68 61  s an integer tha
5120: 74 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64  t is incremented
5130: 20 77 68 65 6e 65 76 65 72 0a 2a 2a 20 74 68 65   whenever.** the
5140: 20 56 44 42 45 2d 6c 65 76 65 6c 20 66 69 6c 65   VDBE-level file
5150: 20 66 6f 72 6d 61 74 20 63 68 61 6e 67 65 73 2e   format changes.
5160: 20 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20    The following 
5170: 6d 61 63 72 6f 73 20 64 65 66 69 6e 65 20 74 68  macros define th
5180: 65 0a 2a 2a 20 74 68 65 20 64 65 66 61 75 6c 74  e.** the default
5190: 20 66 69 6c 65 20 66 6f 72 6d 61 74 20 66 6f 72   file format for
51a0: 20 6e 65 77 20 64 61 74 61 62 61 73 65 73 20 61   new databases a
51b0: 6e 64 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 66  nd the maximum f
51c0: 69 6c 65 20 66 6f 72 6d 61 74 0a 2a 2a 20 74 68  ile format.** th
51d0: 61 74 20 74 68 65 20 6c 69 62 72 61 72 79 20 63  at the library c
51e0: 61 6e 20 72 65 61 64 2e 0a 2a 2f 0a 23 64 65 66  an read..*/.#def
51f0: 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 58 5f 46  ine SQLITE_MAX_F
5200: 49 4c 45 5f 46 4f 52 4d 41 54 20 34 0a 23 69 66  ILE_FORMAT 4.#if
5210: 6e 64 65 66 20 53 51 4c 49 54 45 5f 44 45 46 41  ndef SQLITE_DEFA
5220: 55 4c 54 5f 46 49 4c 45 5f 46 4f 52 4d 41 54 0a  ULT_FILE_FORMAT.
5230: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
5240: 44 45 46 41 55 4c 54 5f 46 49 4c 45 5f 46 4f 52  DEFAULT_FILE_FOR
5250: 4d 41 54 20 34 0a 23 65 6e 64 69 66 0a 0a 2f 2a  MAT 4.#endif../*
5260: 0a 2a 2a 20 44 65 74 65 72 6d 69 6e 65 20 77 68  .** Determine wh
5270: 65 74 68 65 72 20 74 72 69 67 67 65 72 73 20 61  ether triggers a
5280: 72 65 20 72 65 63 75 72 73 69 76 65 20 62 79 20  re recursive by 
5290: 64 65 66 61 75 6c 74 2e 20 20 54 68 69 73 20 63  default.  This c
52a0: 61 6e 20 62 65 0a 2a 2a 20 63 68 61 6e 67 65 64  an be.** changed
52b0: 20 61 74 20 72 75 6e 2d 74 69 6d 65 20 75 73 69   at run-time usi
52c0: 6e 67 20 61 20 70 72 61 67 6d 61 2e 0a 2a 2f 0a  ng a pragma..*/.
52d0: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 44  #ifndef SQLITE_D
52e0: 45 46 41 55 4c 54 5f 52 45 43 55 52 53 49 56 45  EFAULT_RECURSIVE
52f0: 5f 54 52 49 47 47 45 52 53 0a 23 20 64 65 66 69  _TRIGGERS.# defi
5300: 6e 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c  ne SQLITE_DEFAUL
5310: 54 5f 52 45 43 55 52 53 49 56 45 5f 54 52 49 47  T_RECURSIVE_TRIG
5320: 47 45 52 53 20 30 0a 23 65 6e 64 69 66 0a 0a 2f  GERS 0.#endif../
5330: 2a 0a 2a 2a 20 50 72 6f 76 69 64 65 20 61 20 64  *.** Provide a d
5340: 65 66 61 75 6c 74 20 76 61 6c 75 65 20 66 6f 72  efault value for
5350: 20 53 51 4c 49 54 45 5f 54 45 4d 50 5f 53 54 4f   SQLITE_TEMP_STO
5360: 52 45 20 69 6e 20 63 61 73 65 20 69 74 20 69 73  RE in case it is
5370: 20 6e 6f 74 20 73 70 65 63 69 66 69 65 64 0a 2a   not specified.*
5380: 2a 20 6f 6e 20 74 68 65 20 63 6f 6d 6d 61 6e 64  * on the command
5390: 2d 6c 69 6e 65 0a 2a 2f 0a 23 69 66 6e 64 65 66  -line.*/.#ifndef
53a0: 20 53 51 4c 49 54 45 5f 54 45 4d 50 5f 53 54 4f   SQLITE_TEMP_STO
53b0: 52 45 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  RE.# define SQLI
53c0: 54 45 5f 54 45 4d 50 5f 53 54 4f 52 45 20 31 0a  TE_TEMP_STORE 1.
53d0: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 66  #endif../*.** If
53e0: 20 6e 6f 20 76 61 6c 75 65 20 68 61 73 20 62 65   no value has be
53f0: 65 6e 20 70 72 6f 76 69 64 65 64 20 66 6f 72 20  en provided for 
5400: 53 51 4c 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45  SQLITE_MAX_WORKE
5410: 52 5f 54 48 52 45 41 44 53 2c 20 6f 72 20 69 66  R_THREADS, or if
5420: 0a 2a 2a 20 53 51 4c 49 54 45 5f 54 45 4d 50 5f  .** SQLITE_TEMP_
5430: 53 54 4f 52 45 20 69 73 20 73 65 74 20 74 6f 20  STORE is set to 
5440: 33 20 28 6e 65 76 65 72 20 75 73 65 20 74 65 6d  3 (never use tem
5450: 70 6f 72 61 72 79 20 66 69 6c 65 73 29 2c 20 73  porary files), s
5460: 65 74 20 69 74 0a 2a 2a 20 74 6f 20 7a 65 72 6f  et it.** to zero
5470: 2e 0a 2a 2f 0a 23 69 66 20 53 51 4c 49 54 45 5f  ..*/.#if SQLITE_
5480: 54 45 4d 50 5f 53 54 4f 52 45 3d 3d 33 20 7c 7c  TEMP_STORE==3 ||
5490: 20 53 51 4c 49 54 45 5f 54 48 52 45 41 44 53 41   SQLITE_THREADSA
54a0: 46 45 3d 3d 30 0a 23 20 75 6e 64 65 66 20 53 51  FE==0.# undef SQ
54b0: 4c 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f  LITE_MAX_WORKER_
54c0: 54 48 52 45 41 44 53 0a 23 20 64 65 66 69 6e 65  THREADS.# define
54d0: 20 53 51 4c 49 54 45 5f 4d 41 58 5f 57 4f 52 4b   SQLITE_MAX_WORK
54e0: 45 52 5f 54 48 52 45 41 44 53 20 30 0a 23 65 6e  ER_THREADS 0.#en
54f0: 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  dif.#ifndef SQLI
5500: 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54 48  TE_MAX_WORKER_TH
5510: 52 45 41 44 53 0a 23 20 64 65 66 69 6e 65 20 53  READS.# define S
5520: 51 4c 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52  QLITE_MAX_WORKER
5530: 5f 54 48 52 45 41 44 53 20 38 0a 23 65 6e 64 69  _THREADS 8.#endi
5540: 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  f.#ifndef SQLITE
5550: 5f 44 45 46 41 55 4c 54 5f 57 4f 52 4b 45 52 5f  _DEFAULT_WORKER_
5560: 54 48 52 45 41 44 53 0a 23 20 64 65 66 69 6e 65  THREADS.# define
5570: 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f   SQLITE_DEFAULT_
5580: 57 4f 52 4b 45 52 5f 54 48 52 45 41 44 53 20 30  WORKER_THREADS 0
5590: 0a 23 65 6e 64 69 66 0a 23 69 66 20 53 51 4c 49  .#endif.#if SQLI
55a0: 54 45 5f 44 45 46 41 55 4c 54 5f 57 4f 52 4b 45  TE_DEFAULT_WORKE
55b0: 52 5f 54 48 52 45 41 44 53 3e 53 51 4c 49 54 45  R_THREADS>SQLITE
55c0: 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54 48 52 45  _MAX_WORKER_THRE
55d0: 41 44 53 0a 23 20 75 6e 64 65 66 20 53 51 4c 49  ADS.# undef SQLI
55e0: 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54 48  TE_MAX_WORKER_TH
55f0: 52 45 41 44 53 0a 23 20 64 65 66 69 6e 65 20 53  READS.# define S
5600: 51 4c 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52  QLITE_MAX_WORKER
5610: 5f 54 48 52 45 41 44 53 20 53 51 4c 49 54 45 5f  _THREADS SQLITE_
5620: 44 45 46 41 55 4c 54 5f 57 4f 52 4b 45 52 5f 54  DEFAULT_WORKER_T
5630: 48 52 45 41 44 53 0a 23 65 6e 64 69 66 0a 0a 2f  HREADS.#endif../
5640: 2a 0a 2a 2a 20 54 68 65 20 64 65 66 61 75 6c 74  *.** The default
5650: 20 69 6e 69 74 69 61 6c 20 61 6c 6c 6f 63 61 74   initial allocat
5660: 69 6f 6e 20 66 6f 72 20 74 68 65 20 70 61 67 65  ion for the page
5670: 63 61 63 68 65 20 77 68 65 6e 20 75 73 69 6e 67  cache when using
5680: 20 73 65 70 61 72 61 74 65 0a 2a 2a 20 70 61 67   separate.** pag
5690: 65 63 61 63 68 65 73 20 66 6f 72 20 65 61 63 68  ecaches for each
56a0: 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63   database connec
56b0: 74 69 6f 6e 2e 20 20 41 20 70 6f 73 69 74 69 76  tion.  A positiv
56c0: 65 20 6e 75 6d 62 65 72 20 69 73 20 74 68 65 0a  e number is the.
56d0: 2a 2a 20 6e 75 6d 62 65 72 20 6f 66 20 70 61 67  ** number of pag
56e0: 65 73 2e 20 20 41 20 6e 65 67 61 74 69 76 65 20  es.  A negative 
56f0: 6e 75 6d 62 65 72 20 4e 20 74 72 61 6e 73 6c 61  number N transla
5700: 74 69 6f 6e 73 20 6d 65 61 6e 73 20 74 68 61 74  tions means that
5710: 20 61 20 62 75 66 66 65 72 0a 2a 2a 20 6f 66 20   a buffer.** of 
5720: 2d 31 30 32 34 2a 4e 20 62 79 74 65 73 20 69 73  -1024*N bytes is
5730: 20 61 6c 6c 6f 63 61 74 65 64 20 61 6e 64 20 75   allocated and u
5740: 73 65 64 20 66 6f 72 20 61 73 20 6d 61 6e 79 20  sed for as many 
5750: 70 61 67 65 73 20 61 73 20 69 74 20 77 69 6c 6c  pages as it will
5760: 20 68 6f 6c 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65   hold..**.** The
5770: 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20 6f   default value o
5780: 66 20 22 32 30 22 20 77 61 73 20 63 68 6f 6f 73  f "20" was choos
5790: 65 6e 20 74 6f 20 6d 69 6e 69 6d 69 7a 65 20 74  en to minimize t
57a0: 68 65 20 72 75 6e 2d 74 69 6d 65 20 6f 66 20 74  he run-time of t
57b0: 68 65 0a 2a 2a 20 73 70 65 65 64 74 65 73 74 31  he.** speedtest1
57c0: 20 74 65 73 74 20 70 72 6f 67 72 61 6d 20 77 69   test program wi
57d0: 74 68 20 6f 70 74 69 6f 6e 73 3a 20 2d 2d 73 68  th options: --sh
57e0: 72 69 6e 6b 2d 6d 65 6d 6f 72 79 20 2d 2d 72 65  rink-memory --re
57f0: 70 72 65 70 61 72 65 0a 2a 2f 0a 23 69 66 6e 64  prepare.*/.#ifnd
5800: 65 66 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c  ef SQLITE_DEFAUL
5810: 54 5f 50 43 41 43 48 45 5f 49 4e 49 54 53 5a 0a  T_PCACHE_INITSZ.
5820: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
5830: 44 45 46 41 55 4c 54 5f 50 43 41 43 48 45 5f 49  DEFAULT_PCACHE_I
5840: 4e 49 54 53 5a 20 32 30 0a 23 65 6e 64 69 66 0a  NITSZ 20.#endif.
5850: 0a 2f 2a 0a 2a 2a 20 44 65 66 61 75 6c 74 20 76  ./*.** Default v
5860: 61 6c 75 65 20 66 6f 72 20 74 68 65 20 53 51 4c  alue for the SQL
5870: 49 54 45 5f 43 4f 4e 46 49 47 5f 53 4f 52 54 45  ITE_CONFIG_SORTE
5880: 52 52 45 46 5f 53 49 5a 45 20 6f 70 74 69 6f 6e  RREF_SIZE option
5890: 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c  ..*/.#ifndef SQL
58a0: 49 54 45 5f 44 45 46 41 55 4c 54 5f 53 4f 52 54  ITE_DEFAULT_SORT
58b0: 45 52 52 45 46 5f 53 49 5a 45 0a 23 20 64 65 66  ERREF_SIZE.# def
58c0: 69 6e 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55  ine SQLITE_DEFAU
58d0: 4c 54 5f 53 4f 52 54 45 52 52 45 46 5f 53 49 5a  LT_SORTERREF_SIZ
58e0: 45 20 30 78 37 66 66 66 66 66 66 66 0a 23 65 6e  E 0x7fffffff.#en
58f0: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 63  dif../*.** The c
5900: 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69  ompile-time opti
5910: 6f 6e 73 20 53 51 4c 49 54 45 5f 4d 4d 41 50 5f  ons SQLITE_MMAP_
5920: 52 45 41 44 57 52 49 54 45 20 61 6e 64 20 0a 2a  READWRITE and .*
5930: 2a 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  * SQLITE_ENABLE_
5940: 42 41 54 43 48 5f 41 54 4f 4d 49 43 5f 57 52 49  BATCH_ATOMIC_WRI
5950: 54 45 20 61 72 65 20 6e 6f 74 20 63 6f 6d 70 61  TE are not compa
5960: 74 69 62 6c 65 20 77 69 74 68 20 6f 6e 65 20 61  tible with one a
5970: 6e 6f 74 68 65 72 2e 0a 2a 2a 20 59 6f 75 20 6d  nother..** You m
5980: 75 73 74 20 63 68 6f 6f 73 65 20 6f 6e 65 20 6f  ust choose one o
5990: 72 20 74 68 65 20 6f 74 68 65 72 20 28 6f 72 20  r the other (or 
59a0: 6e 65 69 74 68 65 72 29 20 62 75 74 20 6e 6f 74  neither) but not
59b0: 20 62 6f 74 68 2e 0a 2a 2f 0a 23 69 66 20 64 65   both..*/.#if de
59c0: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4d 4d 41  fined(SQLITE_MMA
59d0: 50 5f 52 45 41 44 57 52 49 54 45 29 20 26 26 20  P_READWRITE) && 
59e0: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45  defined(SQLITE_E
59f0: 4e 41 42 4c 45 5f 42 41 54 43 48 5f 41 54 4f 4d  NABLE_BATCH_ATOM
5a00: 49 43 5f 57 52 49 54 45 29 0a 23 65 72 72 6f 72  IC_WRITE).#error
5a10: 20 43 61 6e 6e 6f 74 20 75 73 65 20 62 6f 74 68   Cannot use both
5a20: 20 53 51 4c 49 54 45 5f 4d 4d 41 50 5f 52 45 41   SQLITE_MMAP_REA
5a30: 44 57 52 49 54 45 20 61 6e 64 20 53 51 4c 49 54  DWRITE and SQLIT
5a40: 45 5f 45 4e 41 42 4c 45 5f 42 41 54 43 48 5f 41  E_ENABLE_BATCH_A
5a50: 54 4f 4d 49 43 5f 57 52 49 54 45 0a 23 65 6e 64  TOMIC_WRITE.#end
5a60: 69 66 0a 0a 2f 2a 0a 2a 2a 20 47 43 43 20 64 6f  if../*.** GCC do
5a70: 65 73 20 6e 6f 74 20 64 65 66 69 6e 65 20 74 68  es not define th
5a80: 65 20 6f 66 66 73 65 74 6f 66 28 29 20 6d 61 63  e offsetof() mac
5a90: 72 6f 20 73 6f 20 77 65 27 6c 6c 20 68 61 76 65  ro so we'll have
5aa0: 20 74 6f 20 64 6f 20 69 74 0a 2a 2a 20 6f 75 72   to do it.** our
5ab0: 73 65 6c 76 65 73 2e 0a 2a 2f 0a 23 69 66 6e 64  selves..*/.#ifnd
5ac0: 65 66 20 6f 66 66 73 65 74 6f 66 0a 23 64 65 66  ef offsetof.#def
5ad0: 69 6e 65 20 6f 66 66 73 65 74 6f 66 28 53 54 52  ine offsetof(STR
5ae0: 55 43 54 55 52 45 2c 46 49 45 4c 44 29 20 28 28  UCTURE,FIELD) ((
5af0: 69 6e 74 29 28 28 63 68 61 72 2a 29 26 28 28 53  int)((char*)&((S
5b00: 54 52 55 43 54 55 52 45 2a 29 30 29 2d 3e 46 49  TRUCTURE*)0)->FI
5b10: 45 4c 44 29 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a  ELD)).#endif../*
5b20: 0a 2a 2a 20 4d 61 63 72 6f 73 20 74 6f 20 63 6f  .** Macros to co
5b30: 6d 70 75 74 65 20 6d 69 6e 69 6d 75 6d 20 61 6e  mpute minimum an
5b40: 64 20 6d 61 78 69 6d 75 6d 20 6f 66 20 74 77 6f  d maximum of two
5b50: 20 6e 75 6d 62 65 72 73 2e 0a 2a 2f 0a 23 69 66   numbers..*/.#if
5b60: 6e 64 65 66 20 4d 49 4e 0a 23 20 64 65 66 69 6e  ndef MIN.# defin
5b70: 65 20 4d 49 4e 28 41 2c 42 29 20 28 28 41 29 3c  e MIN(A,B) ((A)<
5b80: 28 42 29 3f 28 41 29 3a 28 42 29 29 0a 23 65 6e  (B)?(A):(B)).#en
5b90: 64 69 66 0a 23 69 66 6e 64 65 66 20 4d 41 58 0a  dif.#ifndef MAX.
5ba0: 23 20 64 65 66 69 6e 65 20 4d 41 58 28 41 2c 42  # define MAX(A,B
5bb0: 29 20 28 28 41 29 3e 28 42 29 3f 28 41 29 3a 28  ) ((A)>(B)?(A):(
5bc0: 42 29 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  B)).#endif../*.*
5bd0: 2a 20 53 77 61 70 20 74 77 6f 20 6f 62 6a 65 63  * Swap two objec
5be0: 74 73 20 6f 66 20 74 79 70 65 20 54 59 50 45 2e  ts of type TYPE.
5bf0: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 57 41 50  .*/.#define SWAP
5c00: 28 54 59 50 45 2c 41 2c 42 29 20 7b 54 59 50 45  (TYPE,A,B) {TYPE
5c10: 20 74 3d 41 3b 20 41 3d 42 3b 20 42 3d 74 3b 7d   t=A; A=B; B=t;}
5c20: 0a 0a 2f 2a 0a 2a 2a 20 43 68 65 63 6b 20 74 6f  ../*.** Check to
5c30: 20 73 65 65 20 69 66 20 74 68 69 73 20 6d 61 63   see if this mac
5c40: 68 69 6e 65 20 75 73 65 73 20 45 42 43 44 49 43  hine uses EBCDIC
5c50: 2e 20 20 28 59 65 73 2c 20 62 65 6c 69 65 76 65  .  (Yes, believe
5c60: 20 69 74 20 6f 72 0a 2a 2a 20 6e 6f 74 2c 20 74   it or.** not, t
5c70: 68 65 72 65 20 61 72 65 20 73 74 69 6c 6c 20 6d  here are still m
5c80: 61 63 68 69 6e 65 73 20 6f 75 74 20 74 68 65 72  achines out ther
5c90: 65 20 74 68 61 74 20 75 73 65 20 45 42 43 44 49  e that use EBCDI
5ca0: 43 2e 29 0a 2a 2f 0a 23 69 66 20 27 41 27 20 3d  C.).*/.#if 'A' =
5cb0: 3d 20 27 5c 33 30 31 27 0a 23 20 64 65 66 69 6e  = '\301'.# defin
5cc0: 65 20 53 51 4c 49 54 45 5f 45 42 43 44 49 43 20  e SQLITE_EBCDIC 
5cd0: 31 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65  1.#else.# define
5ce0: 20 53 51 4c 49 54 45 5f 41 53 43 49 49 20 31 0a   SQLITE_ASCII 1.
5cf0: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 6e  #endif../*.** In
5d00: 74 65 67 65 72 73 20 6f 66 20 6b 6e 6f 77 6e 20  tegers of known 
5d10: 73 69 7a 65 73 2e 20 20 54 68 65 73 65 20 74 79  sizes.  These ty
5d20: 70 65 64 65 66 73 20 6d 69 67 68 74 20 63 68 61  pedefs might cha
5d30: 6e 67 65 20 66 6f 72 20 61 72 63 68 69 74 65 63  nge for architec
5d40: 74 75 72 65 73 0a 2a 2a 20 77 68 65 72 65 20 74  tures.** where t
5d50: 68 65 20 73 69 7a 65 73 20 76 65 72 79 2e 20 20  he sizes very.  
5d60: 50 72 65 70 72 6f 63 65 73 73 6f 72 20 6d 61 63  Preprocessor mac
5d70: 72 6f 73 20 61 72 65 20 61 76 61 69 6c 61 62 6c  ros are availabl
5d80: 65 20 73 6f 20 74 68 61 74 20 74 68 65 0a 2a 2a  e so that the.**
5d90: 20 74 79 70 65 73 20 63 61 6e 20 62 65 20 63 6f   types can be co
5da0: 6e 76 65 6e 69 65 6e 74 6c 79 20 72 65 64 65 66  nveniently redef
5db0: 69 6e 65 64 20 61 74 20 63 6f 6d 70 69 6c 65 2d  ined at compile-
5dc0: 74 79 70 65 2e 20 20 4c 69 6b 65 20 74 68 69 73  type.  Like this
5dd0: 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 20 20 20 20  :.**.**         
5de0: 63 63 20 27 2d 44 55 49 4e 54 50 54 52 5f 54 59  cc '-DUINTPTR_TY
5df0: 50 45 3d 6c 6f 6e 67 20 6c 6f 6e 67 20 69 6e 74  PE=long long int
5e00: 27 20 2e 2e 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66  ' ....*/.#ifndef
5e10: 20 55 49 4e 54 33 32 5f 54 59 50 45 0a 23 20 69   UINT32_TYPE.# i
5e20: 66 64 65 66 20 48 41 56 45 5f 55 49 4e 54 33 32  fdef HAVE_UINT32
5e30: 5f 54 0a 23 20 20 64 65 66 69 6e 65 20 55 49 4e  _T.#  define UIN
5e40: 54 33 32 5f 54 59 50 45 20 75 69 6e 74 33 32 5f  T32_TYPE uint32_
5e50: 74 0a 23 20 65 6c 73 65 0a 23 20 20 64 65 66 69  t.# else.#  defi
5e60: 6e 65 20 55 49 4e 54 33 32 5f 54 59 50 45 20 75  ne UINT32_TYPE u
5e70: 6e 73 69 67 6e 65 64 20 69 6e 74 0a 23 20 65 6e  nsigned int.# en
5e80: 64 69 66 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64  dif.#endif.#ifnd
5e90: 65 66 20 55 49 4e 54 31 36 5f 54 59 50 45 0a 23  ef UINT16_TYPE.#
5ea0: 20 69 66 64 65 66 20 48 41 56 45 5f 55 49 4e 54   ifdef HAVE_UINT
5eb0: 31 36 5f 54 0a 23 20 20 64 65 66 69 6e 65 20 55  16_T.#  define U
5ec0: 49 4e 54 31 36 5f 54 59 50 45 20 75 69 6e 74 31  INT16_TYPE uint1
5ed0: 36 5f 74 0a 23 20 65 6c 73 65 0a 23 20 20 64 65  6_t.# else.#  de
5ee0: 66 69 6e 65 20 55 49 4e 54 31 36 5f 54 59 50 45  fine UINT16_TYPE
5ef0: 20 75 6e 73 69 67 6e 65 64 20 73 68 6f 72 74 20   unsigned short 
5f00: 69 6e 74 0a 23 20 65 6e 64 69 66 0a 23 65 6e 64  int.# endif.#end
5f10: 69 66 0a 23 69 66 6e 64 65 66 20 49 4e 54 31 36  if.#ifndef INT16
5f20: 5f 54 59 50 45 0a 23 20 69 66 64 65 66 20 48 41  _TYPE.# ifdef HA
5f30: 56 45 5f 49 4e 54 31 36 5f 54 0a 23 20 20 64 65  VE_INT16_T.#  de
5f40: 66 69 6e 65 20 49 4e 54 31 36 5f 54 59 50 45 20  fine INT16_TYPE 
5f50: 69 6e 74 31 36 5f 74 0a 23 20 65 6c 73 65 0a 23  int16_t.# else.#
5f60: 20 20 64 65 66 69 6e 65 20 49 4e 54 31 36 5f 54    define INT16_T
5f70: 59 50 45 20 73 68 6f 72 74 20 69 6e 74 0a 23 20  YPE short int.# 
5f80: 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 23 69 66  endif.#endif.#if
5f90: 6e 64 65 66 20 55 49 4e 54 38 5f 54 59 50 45 0a  ndef UINT8_TYPE.
5fa0: 23 20 69 66 64 65 66 20 48 41 56 45 5f 55 49 4e  # ifdef HAVE_UIN
5fb0: 54 38 5f 54 0a 23 20 20 64 65 66 69 6e 65 20 55  T8_T.#  define U
5fc0: 49 4e 54 38 5f 54 59 50 45 20 75 69 6e 74 38 5f  INT8_TYPE uint8_
5fd0: 74 0a 23 20 65 6c 73 65 0a 23 20 20 64 65 66 69  t.# else.#  defi
5fe0: 6e 65 20 55 49 4e 54 38 5f 54 59 50 45 20 75 6e  ne UINT8_TYPE un
5ff0: 73 69 67 6e 65 64 20 63 68 61 72 0a 23 20 65 6e  signed char.# en
6000: 64 69 66 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64  dif.#endif.#ifnd
6010: 65 66 20 49 4e 54 38 5f 54 59 50 45 0a 23 20 69  ef INT8_TYPE.# i
6020: 66 64 65 66 20 48 41 56 45 5f 49 4e 54 38 5f 54  fdef HAVE_INT8_T
6030: 0a 23 20 20 64 65 66 69 6e 65 20 49 4e 54 38 5f  .#  define INT8_
6040: 54 59 50 45 20 69 6e 74 38 5f 74 0a 23 20 65 6c  TYPE int8_t.# el
6050: 73 65 0a 23 20 20 64 65 66 69 6e 65 20 49 4e 54  se.#  define INT
6060: 38 5f 54 59 50 45 20 73 69 67 6e 65 64 20 63 68  8_TYPE signed ch
6070: 61 72 0a 23 20 65 6e 64 69 66 0a 23 65 6e 64 69  ar.# endif.#endi
6080: 66 0a 23 69 66 6e 64 65 66 20 4c 4f 4e 47 44 4f  f.#ifndef LONGDO
6090: 55 42 4c 45 5f 54 59 50 45 0a 23 20 64 65 66 69  UBLE_TYPE.# defi
60a0: 6e 65 20 4c 4f 4e 47 44 4f 55 42 4c 45 5f 54 59  ne LONGDOUBLE_TY
60b0: 50 45 20 6c 6f 6e 67 20 64 6f 75 62 6c 65 0a 23  PE long double.#
60c0: 65 6e 64 69 66 0a 74 79 70 65 64 65 66 20 73 71  endif.typedef sq
60d0: 6c 69 74 65 5f 69 6e 74 36 34 20 69 36 34 3b 20  lite_int64 i64; 
60e0: 20 20 20 20 20 20 20 20 20 2f 2a 20 38 2d 62 79           /* 8-by
60f0: 74 65 20 73 69 67 6e 65 64 20 69 6e 74 65 67 65  te signed intege
6100: 72 20 2a 2f 0a 74 79 70 65 64 65 66 20 73 71 6c  r */.typedef sql
6110: 69 74 65 5f 75 69 6e 74 36 34 20 75 36 34 3b 20  ite_uint64 u64; 
6120: 20 20 20 20 20 20 20 20 2f 2a 20 38 2d 62 79 74          /* 8-byt
6130: 65 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 65 67  e unsigned integ
6140: 65 72 20 2a 2f 0a 74 79 70 65 64 65 66 20 55 49  er */.typedef UI
6150: 4e 54 33 32 5f 54 59 50 45 20 75 33 32 3b 20 20  NT32_TYPE u32;  
6160: 20 20 20 20 20 20 20 20 20 2f 2a 20 34 2d 62 79           /* 4-by
6170: 74 65 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 65  te unsigned inte
6180: 67 65 72 20 2a 2f 0a 74 79 70 65 64 65 66 20 55  ger */.typedef U
6190: 49 4e 54 31 36 5f 54 59 50 45 20 75 31 36 3b 20  INT16_TYPE u16; 
61a0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 32 2d 62            /* 2-b
61b0: 79 74 65 20 75 6e 73 69 67 6e 65 64 20 69 6e 74  yte unsigned int
61c0: 65 67 65 72 20 2a 2f 0a 74 79 70 65 64 65 66 20  eger */.typedef 
61d0: 49 4e 54 31 36 5f 54 59 50 45 20 69 31 36 3b 20  INT16_TYPE i16; 
61e0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 32 2d             /* 2-
61f0: 62 79 74 65 20 73 69 67 6e 65 64 20 69 6e 74 65  byte signed inte
6200: 67 65 72 20 2a 2f 0a 74 79 70 65 64 65 66 20 55  ger */.typedef U
6210: 49 4e 54 38 5f 54 59 50 45 20 75 38 3b 20 20 20  INT8_TYPE u8;   
6220: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 31 2d 62            /* 1-b
6230: 79 74 65 20 75 6e 73 69 67 6e 65 64 20 69 6e 74  yte unsigned int
6240: 65 67 65 72 20 2a 2f 0a 74 79 70 65 64 65 66 20  eger */.typedef 
6250: 49 4e 54 38 5f 54 59 50 45 20 69 38 3b 20 20 20  INT8_TYPE i8;   
6260: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 31 2d             /* 1-
6270: 62 79 74 65 20 73 69 67 6e 65 64 20 69 6e 74 65  byte signed inte
6280: 67 65 72 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 53 51  ger */../*.** SQ
6290: 4c 49 54 45 5f 4d 41 58 5f 55 33 32 20 69 73 20  LITE_MAX_U32 is 
62a0: 61 20 75 36 34 20 63 6f 6e 73 74 61 6e 74 20 74  a u64 constant t
62b0: 68 61 74 20 69 73 20 74 68 65 20 6d 61 78 69 6d  hat is the maxim
62c0: 75 6d 20 75 36 34 20 76 61 6c 75 65 0a 2a 2a 20  um u64 value.** 
62d0: 74 68 61 74 20 63 61 6e 20 62 65 20 73 74 6f 72  that can be stor
62e0: 65 64 20 69 6e 20 61 20 75 33 32 20 77 69 74 68  ed in a u32 with
62f0: 6f 75 74 20 6c 6f 73 73 20 6f 66 20 64 61 74 61  out loss of data
6300: 2e 20 20 54 68 65 20 76 61 6c 75 65 0a 2a 2a 20  .  The value.** 
6310: 69 73 20 30 78 30 30 30 30 30 30 30 30 66 66 66  is 0x00000000fff
6320: 66 66 66 66 66 2e 20 20 42 75 74 20 62 65 63 61  fffff.  But beca
6330: 75 73 65 20 6f 66 20 71 75 69 72 6b 73 20 6f 66  use of quirks of
6340: 20 73 6f 6d 65 20 63 6f 6d 70 69 6c 65 72 73 2c   some compilers,
6350: 20 77 65 0a 2a 2a 20 68 61 76 65 20 74 6f 20 73   we.** have to s
6360: 70 65 63 69 66 79 20 74 68 65 20 76 61 6c 75 65  pecify the value
6370: 20 69 6e 20 74 68 65 20 6c 65 73 73 20 69 6e 74   in the less int
6380: 75 69 74 69 76 65 20 6d 61 6e 6e 65 72 20 73 68  uitive manner sh
6390: 6f 77 6e 3a 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  own:.*/.#define 
63a0: 53 51 4c 49 54 45 5f 4d 41 58 5f 55 33 32 20 20  SQLITE_MAX_U32  
63b0: 28 28 28 28 75 36 34 29 31 29 3c 3c 33 32 29 2d  ((((u64)1)<<32)-
63c0: 31 29 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 64 61  1)../*.** The da
63d0: 74 61 74 79 70 65 20 75 73 65 64 20 74 6f 20 73  tatype used to s
63e0: 74 6f 72 65 20 65 73 74 69 6d 61 74 65 73 20 6f  tore estimates o
63f0: 66 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  f the number of 
6400: 72 6f 77 73 20 69 6e 20 61 0a 2a 2a 20 74 61 62  rows in a.** tab
6410: 6c 65 20 6f 72 20 69 6e 64 65 78 2e 20 20 54 68  le or index.  Th
6420: 69 73 20 69 73 20 61 6e 20 75 6e 73 69 67 6e 65  is is an unsigne
6430: 64 20 69 6e 74 65 67 65 72 20 74 79 70 65 2e 20  d integer type. 
6440: 20 46 6f 72 20 39 39 2e 39 25 20 6f 66 0a 2a 2a   For 99.9% of.**
6450: 20 74 68 65 20 77 6f 72 6c 64 2c 20 61 20 33 32   the world, a 32
6460: 2d 62 69 74 20 69 6e 74 65 67 65 72 20 69 73 20  -bit integer is 
6470: 73 75 66 66 69 63 69 65 6e 74 2e 20 20 42 75 74  sufficient.  But
6480: 20 61 20 36 34 2d 62 69 74 20 69 6e 74 65 67 65   a 64-bit intege
6490: 72 0a 2a 2a 20 63 61 6e 20 62 65 20 75 73 65 64  r.** can be used
64a0: 20 61 74 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65   at compile-time
64b0: 20 69 66 20 64 65 73 69 72 65 64 2e 0a 2a 2f 0a   if desired..*/.
64c0: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 36 34  #ifdef SQLITE_64
64d0: 42 49 54 5f 53 54 41 54 53 0a 20 74 79 70 65 64  BIT_STATS. typed
64e0: 65 66 20 75 36 34 20 74 52 6f 77 63 6e 74 3b 20  ef u64 tRowcnt; 
64f0: 20 20 20 2f 2a 20 36 34 2d 62 69 74 20 6f 6e 6c     /* 64-bit onl
6500: 79 20 69 66 20 72 65 71 75 65 73 74 65 64 20 61  y if requested a
6510: 74 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 2a  t compile-time *
6520: 2f 0a 23 65 6c 73 65 0a 20 74 79 70 65 64 65 66  /.#else. typedef
6530: 20 75 33 32 20 74 52 6f 77 63 6e 74 3b 20 20 20   u32 tRowcnt;   
6540: 20 2f 2a 20 33 32 2d 62 69 74 20 69 73 20 74 68   /* 32-bit is th
6550: 65 20 64 65 66 61 75 6c 74 20 2a 2f 0a 23 65 6e  e default */.#en
6560: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 45 73 74 69 6d  dif../*.** Estim
6570: 61 74 65 64 20 71 75 61 6e 74 69 74 69 65 73 20  ated quantities 
6580: 75 73 65 64 20 66 6f 72 20 71 75 65 72 79 20 70  used for query p
6590: 6c 61 6e 6e 69 6e 67 20 61 72 65 20 73 74 6f 72  lanning are stor
65a0: 65 64 20 61 73 20 31 36 2d 62 69 74 0a 2a 2a 20  ed as 16-bit.** 
65b0: 6c 6f 67 61 72 69 74 68 6d 73 2e 20 20 46 6f 72  logarithms.  For
65c0: 20 71 75 61 6e 74 69 74 79 20 58 2c 20 74 68 65   quantity X, the
65d0: 20 76 61 6c 75 65 20 73 74 6f 72 65 64 20 69 73   value stored is
65e0: 20 31 30 2a 6c 6f 67 32 28 58 29 2e 20 20 54 68   10*log2(X).  Th
65f0: 69 73 0a 2a 2a 20 67 69 76 65 73 20 61 20 70 6f  is.** gives a po
6600: 73 73 69 62 6c 65 20 72 61 6e 67 65 20 6f 66 20  ssible range of 
6610: 76 61 6c 75 65 73 20 6f 66 20 61 70 70 72 6f 78  values of approx
6620: 69 6d 61 74 65 6c 79 20 31 2e 30 65 39 38 36 20  imately 1.0e986 
6630: 74 6f 20 31 65 2d 39 38 36 2e 0a 2a 2a 20 42 75  to 1e-986..** Bu
6640: 74 20 74 68 65 20 61 6c 6c 6f 77 65 64 20 76 61  t the allowed va
6650: 6c 75 65 73 20 61 72 65 20 22 67 72 61 69 6e 79  lues are "grainy
6660: 22 2e 20 20 4e 6f 74 20 65 76 65 72 79 20 76 61  ".  Not every va
6670: 6c 75 65 20 69 73 20 72 65 70 72 65 73 65 6e 74  lue is represent
6680: 61 62 6c 65 2e 0a 2a 2a 20 46 6f 72 20 65 78 61  able..** For exa
6690: 6d 70 6c 65 2c 20 71 75 61 6e 74 69 74 69 65 73  mple, quantities
66a0: 20 31 36 20 61 6e 64 20 31 37 20 61 72 65 20 62   16 and 17 are b
66b0: 6f 74 68 20 72 65 70 72 65 73 65 6e 74 65 64 20  oth represented 
66c0: 62 79 20 61 20 4c 6f 67 45 73 74 0a 2a 2a 20 6f  by a LogEst.** o
66d0: 66 20 34 30 2e 20 20 48 6f 77 65 76 65 72 2c 20  f 40.  However, 
66e0: 73 69 6e 63 65 20 4c 6f 67 45 73 74 20 71 75 61  since LogEst qua
66f0: 6e 74 69 74 69 65 73 20 61 72 65 20 73 75 70 70  ntities are supp
6700: 6f 73 65 20 74 6f 20 62 65 20 65 73 74 69 6d 61  ose to be estima
6710: 74 65 73 2c 0a 2a 2a 20 6e 6f 74 20 65 78 61 63  tes,.** not exac
6720: 74 20 76 61 6c 75 65 73 2c 20 74 68 69 73 20 69  t values, this i
6730: 6d 70 72 65 63 69 73 69 6f 6e 20 69 73 20 6e 6f  mprecision is no
6740: 74 20 61 20 70 72 6f 62 6c 65 6d 2e 0a 2a 2a 0a  t a problem..**.
6750: 2a 2a 20 22 4c 6f 67 45 73 74 22 20 69 73 20 73  ** "LogEst" is s
6760: 68 6f 72 74 20 66 6f 72 20 22 4c 6f 67 61 72 69  hort for "Logari
6770: 74 68 6d 69 63 20 45 73 74 69 6d 61 74 65 22 2e  thmic Estimate".
6780: 0a 2a 2a 0a 2a 2a 20 45 78 61 6d 70 6c 65 73 3a  .**.** Examples:
6790: 0a 2a 2a 20 20 20 20 20 20 31 20 2d 3e 20 30 20  .**      1 -> 0 
67a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 32 30 20               20 
67b0: 2d 3e 20 34 33 20 20 20 20 20 20 20 20 20 20 31  -> 43          1
67c0: 30 30 30 30 20 2d 3e 20 31 33 32 0a 2a 2a 20 20  0000 -> 132.**  
67d0: 20 20 20 20 32 20 2d 3e 20 31 30 20 20 20 20 20      2 -> 10     
67e0: 20 20 20 20 20 20 20 20 32 35 20 2d 3e 20 34 36          25 -> 46
67f0: 20 20 20 20 20 20 20 20 20 20 32 35 30 30 30 20            25000 
6800: 2d 3e 20 31 34 36 0a 2a 2a 20 20 20 20 20 20 33  -> 146.**      3
6810: 20 2d 3e 20 31 36 20 20 20 20 20 20 20 20 20 20   -> 16          
6820: 20 20 31 30 30 20 2d 3e 20 36 36 20 20 20 20 20    100 -> 66     
6830: 20 20 20 31 30 30 30 30 30 30 20 2d 3e 20 31 39     1000000 -> 19
6840: 39 0a 2a 2a 20 20 20 20 20 20 34 20 2d 3e 20 32  9.**      4 -> 2
6850: 30 20 20 20 20 20 20 20 20 20 20 20 31 30 30 30  0           1000
6860: 20 2d 3e 20 39 39 20 20 20 20 20 20 20 20 31 30   -> 99        10
6870: 34 38 35 37 36 20 2d 3e 20 32 30 30 0a 2a 2a 20  48576 -> 200.** 
6880: 20 20 20 20 31 30 20 2d 3e 20 33 33 20 20 20 20      10 -> 33    
6890: 20 20 20 20 20 20 20 31 30 32 34 20 2d 3e 20 31         1024 -> 1
68a0: 30 30 20 20 20 20 34 32 39 34 39 36 37 32 39 36  00    4294967296
68b0: 20 2d 3e 20 33 32 30 0a 2a 2a 0a 2a 2a 20 54 68   -> 320.**.** Th
68c0: 65 20 4c 6f 67 45 73 74 20 63 61 6e 20 62 65 20  e LogEst can be 
68d0: 6e 65 67 61 74 69 76 65 20 74 6f 20 69 6e 64 69  negative to indi
68e0: 63 61 74 65 20 66 72 61 63 74 69 6f 6e 61 6c 20  cate fractional 
68f0: 76 61 6c 75 65 73 2e 0a 2a 2a 20 45 78 61 6d 70  values..** Examp
6900: 6c 65 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 30 2e  les:.**.**    0.
6910: 35 20 2d 3e 20 2d 31 30 20 20 20 20 20 20 20 20  5 -> -10        
6920: 20 20 20 30 2e 31 20 2d 3e 20 2d 33 33 20 20 20     0.1 -> -33   
6930: 20 20 20 20 20 30 2e 30 36 32 35 20 2d 3e 20 2d       0.0625 -> -
6940: 34 30 0a 2a 2f 0a 74 79 70 65 64 65 66 20 49 4e  40.*/.typedef IN
6950: 54 31 36 5f 54 59 50 45 20 4c 6f 67 45 73 74 3b  T16_TYPE LogEst;
6960: 0a 0a 2f 2a 0a 2a 2a 20 53 65 74 20 74 68 65 20  ../*.** Set the 
6970: 53 51 4c 49 54 45 5f 50 54 52 53 49 5a 45 20 6d  SQLITE_PTRSIZE m
6980: 61 63 72 6f 20 74 6f 20 74 68 65 20 6e 75 6d 62  acro to the numb
6990: 65 72 20 6f 66 20 62 79 74 65 73 20 69 6e 20 61  er of bytes in a
69a0: 20 70 6f 69 6e 74 65 72 0a 2a 2f 0a 23 69 66 6e   pointer.*/.#ifn
69b0: 64 65 66 20 53 51 4c 49 54 45 5f 50 54 52 53 49  def SQLITE_PTRSI
69c0: 5a 45 0a 23 20 69 66 20 64 65 66 69 6e 65 64 28  ZE.# if defined(
69d0: 5f 5f 53 49 5a 45 4f 46 5f 50 4f 49 4e 54 45 52  __SIZEOF_POINTER
69e0: 5f 5f 29 0a 23 20 20 20 64 65 66 69 6e 65 20 53  __).#   define S
69f0: 51 4c 49 54 45 5f 50 54 52 53 49 5a 45 20 5f 5f  QLITE_PTRSIZE __
6a00: 53 49 5a 45 4f 46 5f 50 4f 49 4e 54 45 52 5f 5f  SIZEOF_POINTER__
6a10: 0a 23 20 65 6c 69 66 20 64 65 66 69 6e 65 64 28  .# elif defined(
6a20: 69 33 38 36 29 20 20 20 20 20 7c 7c 20 64 65 66  i386)     || def
6a30: 69 6e 65 64 28 5f 5f 69 33 38 36 5f 5f 29 20 20  ined(__i386__)  
6a40: 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 4d 5f 49   || defined(_M_I
6a50: 58 38 36 29 20 7c 7c 20 20 20 20 5c 0a 20 20 20  X86) ||    \.   
6a60: 20 20 20 20 64 65 66 69 6e 65 64 28 5f 4d 5f 41      defined(_M_A
6a70: 52 4d 29 20 20 20 7c 7c 20 64 65 66 69 6e 65 64  RM)   || defined
6a80: 28 5f 5f 61 72 6d 5f 5f 29 20 20 20 20 7c 7c 20  (__arm__)    || 
6a90: 64 65 66 69 6e 65 64 28 5f 5f 78 38 36 29 0a 23  defined(__x86).#
6aa0: 20 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45     define SQLITE
6ab0: 5f 50 54 52 53 49 5a 45 20 34 0a 23 20 65 6c 73  _PTRSIZE 4.# els
6ac0: 65 0a 23 20 20 20 64 65 66 69 6e 65 20 53 51 4c  e.#   define SQL
6ad0: 49 54 45 5f 50 54 52 53 49 5a 45 20 38 0a 23 20  ITE_PTRSIZE 8.# 
6ae0: 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 0a 2f 2a  endif.#endif../*
6af0: 20 54 68 65 20 75 70 74 72 20 74 79 70 65 20 69   The uptr type i
6b00: 73 20 61 6e 20 75 6e 73 69 67 6e 65 64 20 69 6e  s an unsigned in
6b10: 74 65 67 65 72 20 6c 61 72 67 65 20 65 6e 6f 75  teger large enou
6b20: 67 68 20 74 6f 20 68 6f 6c 64 20 61 20 70 6f 69  gh to hold a poi
6b30: 6e 74 65 72 0a 2a 2f 0a 23 69 66 20 64 65 66 69  nter.*/.#if defi
6b40: 6e 65 64 28 48 41 56 45 5f 53 54 44 49 4e 54 5f  ned(HAVE_STDINT_
6b50: 48 29 0a 20 20 74 79 70 65 64 65 66 20 75 69 6e  H).  typedef uin
6b60: 74 70 74 72 5f 74 20 75 70 74 72 3b 0a 23 65 6c  tptr_t uptr;.#el
6b70: 69 66 20 53 51 4c 49 54 45 5f 50 54 52 53 49 5a  if SQLITE_PTRSIZ
6b80: 45 3d 3d 34 0a 20 20 74 79 70 65 64 65 66 20 75  E==4.  typedef u
6b90: 33 32 20 75 70 74 72 3b 0a 23 65 6c 73 65 0a 20  32 uptr;.#else. 
6ba0: 20 74 79 70 65 64 65 66 20 75 36 34 20 75 70 74   typedef u64 upt
6bb0: 72 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  r;.#endif../*.**
6bc0: 20 54 68 65 20 53 51 4c 49 54 45 5f 57 49 54 48   The SQLITE_WITH
6bd0: 49 4e 28 50 2c 53 2c 45 29 20 6d 61 63 72 6f 20  IN(P,S,E) macro 
6be0: 63 68 65 63 6b 73 20 74 6f 20 73 65 65 20 69 66  checks to see if
6bf0: 20 70 6f 69 6e 74 65 72 20 50 20 70 6f 69 6e 74   pointer P point
6c00: 73 20 74 6f 0a 2a 2a 20 73 6f 6d 65 74 68 69 6e  s to.** somethin
6c10: 67 20 62 65 74 77 65 65 6e 20 53 20 28 69 6e 63  g between S (inc
6c20: 6c 75 73 69 76 65 29 20 61 6e 64 20 45 20 28 65  lusive) and E (e
6c30: 78 63 6c 75 73 69 76 65 29 2e 0a 2a 2a 0a 2a 2a  xclusive)..**.**
6c40: 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c   In other words,
6c50: 20 53 20 69 73 20 61 20 62 75 66 66 65 72 20 61   S is a buffer a
6c60: 6e 64 20 45 20 69 73 20 61 20 70 6f 69 6e 74 65  nd E is a pointe
6c70: 72 20 74 6f 20 74 68 65 20 66 69 72 73 74 20 62  r to the first b
6c80: 79 74 65 20 61 66 74 65 72 0a 2a 2a 20 74 68 65  yte after.** the
6c90: 20 65 6e 64 20 6f 66 20 62 75 66 66 65 72 20 53   end of buffer S
6ca0: 2e 20 20 54 68 69 73 20 6d 61 63 72 6f 20 72 65  .  This macro re
6cb0: 74 75 72 6e 73 20 74 72 75 65 20 69 66 20 50 20  turns true if P 
6cc0: 70 6f 69 6e 74 73 20 74 6f 20 73 6f 6d 65 74 68  points to someth
6cd0: 69 6e 67 0a 2a 2a 20 63 6f 6e 74 61 69 6e 65 64  ing.** contained
6ce0: 20 77 69 74 68 69 6e 20 74 68 65 20 62 75 66 66   within the buff
6cf0: 65 72 20 53 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  er S..*/.#define
6d00: 20 53 51 4c 49 54 45 5f 57 49 54 48 49 4e 28 50   SQLITE_WITHIN(P
6d10: 2c 53 2c 45 29 20 28 28 28 75 70 74 72 29 28 50  ,S,E) (((uptr)(P
6d20: 29 3e 3d 28 75 70 74 72 29 28 53 29 29 26 26 28  )>=(uptr)(S))&&(
6d30: 28 75 70 74 72 29 28 50 29 3c 28 75 70 74 72 29  (uptr)(P)<(uptr)
6d40: 28 45 29 29 29 0a 0a 0a 2f 2a 0a 2a 2a 20 4d 61  (E))).../*.** Ma
6d50: 63 72 6f 73 20 74 6f 20 64 65 74 65 72 6d 69 6e  cros to determin
6d60: 65 20 77 68 65 74 68 65 72 20 74 68 65 20 6d 61  e whether the ma
6d70: 63 68 69 6e 65 20 69 73 20 62 69 67 20 6f 72 20  chine is big or 
6d80: 6c 69 74 74 6c 65 20 65 6e 64 69 61 6e 2c 0a 2a  little endian,.*
6d90: 2a 20 61 6e 64 20 77 68 65 74 68 65 72 20 6f 72  * and whether or
6da0: 20 6e 6f 74 20 74 68 61 74 20 64 65 74 65 72 6d   not that determ
6db0: 69 6e 61 74 69 6f 6e 20 69 73 20 72 75 6e 2d 74  ination is run-t
6dc0: 69 6d 65 20 6f 72 20 63 6f 6d 70 69 6c 65 2d 74  ime or compile-t
6dd0: 69 6d 65 2e 0a 2a 2a 0a 2a 2a 20 46 6f 72 20 62  ime..**.** For b
6de0: 65 73 74 20 70 65 72 66 6f 72 6d 61 6e 63 65 2c  est performance,
6df0: 20 61 6e 20 61 74 74 65 6d 70 74 20 69 73 20 6d   an attempt is m
6e00: 61 64 65 20 74 6f 20 67 75 65 73 73 20 61 74 20  ade to guess at 
6e10: 74 68 65 20 62 79 74 65 2d 6f 72 64 65 72 0a 2a  the byte-order.*
6e20: 2a 20 75 73 69 6e 67 20 43 2d 70 72 65 70 72 6f  * using C-prepro
6e30: 63 65 73 73 6f 72 20 6d 61 63 72 6f 73 2e 20 20  cessor macros.  
6e40: 49 66 20 74 68 61 74 20 69 73 20 75 6e 73 75 63  If that is unsuc
6e50: 63 65 73 73 66 75 6c 2c 20 6f 72 20 69 66 0a 2a  cessful, or if.*
6e60: 2a 20 2d 44 53 51 4c 49 54 45 5f 42 59 54 45 4f  * -DSQLITE_BYTEO
6e70: 52 44 45 52 3d 30 20 69 73 20 73 65 74 2c 20 74  RDER=0 is set, t
6e80: 68 65 6e 20 62 79 74 65 2d 6f 72 64 65 72 20 69  hen byte-order i
6e90: 73 20 64 65 74 65 72 6d 69 6e 65 64 0a 2a 2a 20  s determined.** 
6ea0: 61 74 20 72 75 6e 2d 74 69 6d 65 2e 0a 2a 2f 0a  at run-time..*/.
6eb0: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 42  #ifndef SQLITE_B
6ec0: 59 54 45 4f 52 44 45 52 0a 23 20 69 66 20 64 65  YTEORDER.# if de
6ed0: 66 69 6e 65 64 28 69 33 38 36 29 20 20 20 20 20  fined(i386)     
6ee0: 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 69 33 38  || defined(__i38
6ef0: 36 5f 5f 29 20 20 20 7c 7c 20 64 65 66 69 6e 65  6__)   || define
6f00: 64 28 5f 4d 5f 49 58 38 36 29 20 7c 7c 20 20 20  d(_M_IX86) ||   
6f10: 20 5c 0a 20 20 20 20 20 64 65 66 69 6e 65 64 28   \.     defined(
6f20: 5f 5f 78 38 36 5f 36 34 29 20 7c 7c 20 64 65 66  __x86_64) || def
6f30: 69 6e 65 64 28 5f 5f 78 38 36 5f 36 34 5f 5f 29  ined(__x86_64__)
6f40: 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 4d 5f 58   || defined(_M_X
6f50: 36 34 29 20 20 7c 7c 20 20 20 20 5c 0a 20 20 20  64)  ||    \.   
6f60: 20 20 64 65 66 69 6e 65 64 28 5f 4d 5f 41 4d 44    defined(_M_AMD
6f70: 36 34 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f  64) || defined(_
6f80: 4d 5f 41 52 4d 29 20 20 20 20 20 7c 7c 20 64 65  M_ARM)     || de
6f90: 66 69 6e 65 64 28 5f 5f 78 38 36 29 20 20 20 7c  fined(__x86)   |
6fa0: 7c 20 20 20 20 5c 0a 20 20 20 20 20 64 65 66 69  |    \.     defi
6fb0: 6e 65 64 28 5f 5f 61 72 6d 5f 5f 29 0a 23 20 20  ned(__arm__).#  
6fc0: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 42   define SQLITE_B
6fd0: 59 54 45 4f 52 44 45 52 20 20 20 20 31 32 33 34  YTEORDER    1234
6fe0: 0a 23 20 65 6c 69 66 20 64 65 66 69 6e 65 64 28  .# elif defined(
6ff0: 73 70 61 72 63 29 20 20 20 20 7c 7c 20 64 65 66  sparc)    || def
7000: 69 6e 65 64 28 5f 5f 70 70 63 5f 5f 29 0a 23 20  ined(__ppc__).# 
7010: 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f    define SQLITE_
7020: 42 59 54 45 4f 52 44 45 52 20 20 20 20 34 33 32  BYTEORDER    432
7030: 31 0a 23 20 65 6c 73 65 0a 23 20 20 20 64 65 66  1.# else.#   def
7040: 69 6e 65 20 53 51 4c 49 54 45 5f 42 59 54 45 4f  ine SQLITE_BYTEO
7050: 52 44 45 52 20 30 0a 23 20 65 6e 64 69 66 0a 23  RDER 0.# endif.#
7060: 65 6e 64 69 66 0a 23 69 66 20 53 51 4c 49 54 45  endif.#if SQLITE
7070: 5f 42 59 54 45 4f 52 44 45 52 3d 3d 34 33 32 31  _BYTEORDER==4321
7080: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
7090: 5f 42 49 47 45 4e 44 49 41 4e 20 20 20 20 31 0a  _BIGENDIAN    1.
70a0: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
70b0: 4c 49 54 54 4c 45 45 4e 44 49 41 4e 20 30 0a 23  LITTLEENDIAN 0.#
70c0: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 55   define SQLITE_U
70d0: 54 46 31 36 4e 41 54 49 56 45 20 20 53 51 4c 49  TF16NATIVE  SQLI
70e0: 54 45 5f 55 54 46 31 36 42 45 0a 23 65 6c 69 66  TE_UTF16BE.#elif
70f0: 20 53 51 4c 49 54 45 5f 42 59 54 45 4f 52 44 45   SQLITE_BYTEORDE
7100: 52 3d 3d 31 32 33 34 0a 23 20 64 65 66 69 6e 65  R==1234.# define
7110: 20 53 51 4c 49 54 45 5f 42 49 47 45 4e 44 49 41   SQLITE_BIGENDIA
7120: 4e 20 20 20 20 30 0a 23 20 64 65 66 69 6e 65 20  N    0.# define 
7130: 53 51 4c 49 54 45 5f 4c 49 54 54 4c 45 45 4e 44  SQLITE_LITTLEEND
7140: 49 41 4e 20 31 0a 23 20 64 65 66 69 6e 65 20 53  IAN 1.# define S
7150: 51 4c 49 54 45 5f 55 54 46 31 36 4e 41 54 49 56  QLITE_UTF16NATIV
7160: 45 20 20 53 51 4c 49 54 45 5f 55 54 46 31 36 4c  E  SQLITE_UTF16L
7170: 45 0a 23 65 6c 73 65 0a 23 20 69 66 64 65 66 20  E.#else.# ifdef 
7180: 53 51 4c 49 54 45 5f 41 4d 41 4c 47 41 4d 41 54  SQLITE_AMALGAMAT
7190: 49 4f 4e 0a 20 20 63 6f 6e 73 74 20 69 6e 74 20  ION.  const int 
71a0: 73 71 6c 69 74 65 33 6f 6e 65 20 3d 20 31 3b 0a  sqlite3one = 1;.
71b0: 23 20 65 6c 73 65 0a 20 20 65 78 74 65 72 6e 20  # else.  extern 
71c0: 63 6f 6e 73 74 20 69 6e 74 20 73 71 6c 69 74 65  const int sqlite
71d0: 33 6f 6e 65 3b 0a 23 20 65 6e 64 69 66 0a 23 20  3one;.# endif.# 
71e0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 42 49  define SQLITE_BI
71f0: 47 45 4e 44 49 41 4e 20 20 20 20 28 2a 28 63 68  GENDIAN    (*(ch
7200: 61 72 20 2a 29 28 26 73 71 6c 69 74 65 33 6f 6e  ar *)(&sqlite3on
7210: 65 29 3d 3d 30 29 0a 23 20 64 65 66 69 6e 65 20  e)==0).# define 
7220: 53 51 4c 49 54 45 5f 4c 49 54 54 4c 45 45 4e 44  SQLITE_LITTLEEND
7230: 49 41 4e 20 28 2a 28 63 68 61 72 20 2a 29 28 26  IAN (*(char *)(&
7240: 73 71 6c 69 74 65 33 6f 6e 65 29 3d 3d 31 29 0a  sqlite3one)==1).
7250: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
7260: 55 54 46 31 36 4e 41 54 49 56 45 20 20 28 53 51  UTF16NATIVE  (SQ
7270: 4c 49 54 45 5f 42 49 47 45 4e 44 49 41 4e 3f 53  LITE_BIGENDIAN?S
7280: 51 4c 49 54 45 5f 55 54 46 31 36 42 45 3a 53 51  QLITE_UTF16BE:SQ
7290: 4c 49 54 45 5f 55 54 46 31 36 4c 45 29 0a 23 65  LITE_UTF16LE).#e
72a0: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6e 73  ndif../*.** Cons
72b0: 74 61 6e 74 73 20 66 6f 72 20 74 68 65 20 6c 61  tants for the la
72c0: 72 67 65 73 74 20 61 6e 64 20 73 6d 61 6c 6c 65  rgest and smalle
72d0: 73 74 20 70 6f 73 73 69 62 6c 65 20 36 34 2d 62  st possible 64-b
72e0: 69 74 20 73 69 67 6e 65 64 20 69 6e 74 65 67 65  it signed intege
72f0: 72 73 2e 0a 2a 2a 20 54 68 65 73 65 20 6d 61 63  rs..** These mac
7300: 72 6f 73 20 61 72 65 20 64 65 73 69 67 6e 65 64  ros are designed
7310: 20 74 6f 20 77 6f 72 6b 20 63 6f 72 72 65 63 74   to work correct
7320: 6c 79 20 6f 6e 20 62 6f 74 68 20 33 32 2d 62 69  ly on both 32-bi
7330: 74 20 61 6e 64 20 36 34 2d 62 69 74 0a 2a 2a 20  t and 64-bit.** 
7340: 63 6f 6d 70 69 6c 65 72 73 2e 0a 2a 2f 0a 23 64  compilers..*/.#d
7350: 65 66 69 6e 65 20 4c 41 52 47 45 53 54 5f 49 4e  efine LARGEST_IN
7360: 54 36 34 20 20 28 30 78 66 66 66 66 66 66 66 66  T64  (0xffffffff
7370: 7c 28 28 28 69 36 34 29 30 78 37 66 66 66 66 66  |(((i64)0x7fffff
7380: 66 66 29 3c 3c 33 32 29 29 0a 23 64 65 66 69 6e  ff)<<32)).#defin
7390: 65 20 53 4d 41 4c 4c 45 53 54 5f 49 4e 54 36 34  e SMALLEST_INT64
73a0: 20 28 28 28 69 36 34 29 2d 31 29 20 2d 20 4c 41   (((i64)-1) - LA
73b0: 52 47 45 53 54 5f 49 4e 54 36 34 29 0a 0a 2f 2a  RGEST_INT64)../*
73c0: 0a 2a 2a 20 52 6f 75 6e 64 20 75 70 20 61 20 6e  .** Round up a n
73d0: 75 6d 62 65 72 20 74 6f 20 74 68 65 20 6e 65 78  umber to the nex
73e0: 74 20 6c 61 72 67 65 72 20 6d 75 6c 74 69 70 6c  t larger multipl
73f0: 65 20 6f 66 20 38 2e 20 20 54 68 69 73 20 69 73  e of 8.  This is
7400: 20 75 73 65 64 0a 2a 2a 20 74 6f 20 66 6f 72 63   used.** to forc
7410: 65 20 38 2d 62 79 74 65 20 61 6c 69 67 6e 6d 65  e 8-byte alignme
7420: 6e 74 20 6f 6e 20 36 34 2d 62 69 74 20 61 72 63  nt on 64-bit arc
7430: 68 69 74 65 63 74 75 72 65 73 2e 0a 2a 2f 0a 23  hitectures..*/.#
7440: 64 65 66 69 6e 65 20 52 4f 55 4e 44 38 28 78 29  define ROUND8(x)
7450: 20 20 20 20 20 28 28 28 78 29 2b 37 29 26 7e 37       (((x)+7)&~7
7460: 29 0a 0a 2f 2a 0a 2a 2a 20 52 6f 75 6e 64 20 64  )../*.** Round d
7470: 6f 77 6e 20 74 6f 20 74 68 65 20 6e 65 61 72 65  own to the neare
7480: 73 74 20 6d 75 6c 74 69 70 6c 65 20 6f 66 20 38  st multiple of 8
7490: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 52 4f 55 4e  .*/.#define ROUN
74a0: 44 44 4f 57 4e 38 28 78 29 20 28 28 78 29 26 7e  DDOWN8(x) ((x)&~
74b0: 37 29 0a 0a 2f 2a 0a 2a 2a 20 41 73 73 65 72 74  7)../*.** Assert
74c0: 20 74 68 61 74 20 74 68 65 20 70 6f 69 6e 74 65   that the pointe
74d0: 72 20 58 20 69 73 20 61 6c 69 67 6e 65 64 20 74  r X is aligned t
74e0: 6f 20 61 6e 20 38 2d 62 79 74 65 20 62 6f 75 6e  o an 8-byte boun
74f0: 64 61 72 79 2e 20 20 54 68 69 73 0a 2a 2a 20 6d  dary.  This.** m
7500: 61 63 72 6f 20 69 73 20 75 73 65 64 20 6f 6e 6c  acro is used onl
7510: 79 20 77 69 74 68 69 6e 20 61 73 73 65 72 74 28  y within assert(
7520: 29 20 74 6f 20 76 65 72 69 66 79 20 74 68 61 74  ) to verify that
7530: 20 74 68 65 20 63 6f 64 65 20 67 65 74 73 0a 2a   the code gets.*
7540: 2a 20 61 6c 6c 20 61 6c 69 67 6e 6d 65 6e 74 20  * all alignment 
7550: 72 65 73 74 72 69 63 74 69 6f 6e 73 20 63 6f 72  restrictions cor
7560: 72 65 63 74 2e 0a 2a 2a 0a 2a 2a 20 45 78 63 65  rect..**.** Exce
7570: 70 74 2c 20 69 66 20 53 51 4c 49 54 45 5f 34 5f  pt, if SQLITE_4_
7580: 42 59 54 45 5f 41 4c 49 47 4e 45 44 5f 4d 41 4c  BYTE_ALIGNED_MAL
7590: 4c 4f 43 20 69 73 20 64 65 66 69 6e 65 64 2c 20  LOC is defined, 
75a0: 74 68 65 6e 20 74 68 65 0a 2a 2a 20 75 6e 64 65  then the.** unde
75b0: 72 6c 79 69 6e 67 20 6d 61 6c 6c 6f 63 28 29 20  rlying malloc() 
75c0: 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6d  implementation m
75d0: 69 67 68 74 20 72 65 74 75 72 6e 20 75 73 20 34  ight return us 4
75e0: 2d 62 79 74 65 20 61 6c 69 67 6e 65 64 0a 2a 2a  -byte aligned.**
75f0: 20 70 6f 69 6e 74 65 72 73 2e 20 20 49 6e 20 74   pointers.  In t
7600: 68 61 74 20 63 61 73 65 2c 20 6f 6e 6c 79 20 76  hat case, only v
7610: 65 72 69 66 79 20 34 2d 62 79 74 65 20 61 6c 69  erify 4-byte ali
7620: 67 6e 6d 65 6e 74 2e 0a 2a 2f 0a 23 69 66 64 65  gnment..*/.#ifde
7630: 66 20 53 51 4c 49 54 45 5f 34 5f 42 59 54 45 5f  f SQLITE_4_BYTE_
7640: 41 4c 49 47 4e 45 44 5f 4d 41 4c 4c 4f 43 0a 23  ALIGNED_MALLOC.#
7650: 20 64 65 66 69 6e 65 20 45 49 47 48 54 5f 42 59   define EIGHT_BY
7660: 54 45 5f 41 4c 49 47 4e 4d 45 4e 54 28 58 29 20  TE_ALIGNMENT(X) 
7670: 20 20 28 28 28 28 63 68 61 72 2a 29 28 58 29 20    ((((char*)(X) 
7680: 2d 20 28 63 68 61 72 2a 29 30 29 26 33 29 3d 3d  - (char*)0)&3)==
7690: 30 29 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e  0).#else.# defin
76a0: 65 20 45 49 47 48 54 5f 42 59 54 45 5f 41 4c 49  e EIGHT_BYTE_ALI
76b0: 47 4e 4d 45 4e 54 28 58 29 20 20 20 28 28 28 28  GNMENT(X)   ((((
76c0: 63 68 61 72 2a 29 28 58 29 20 2d 20 28 63 68 61  char*)(X) - (cha
76d0: 72 2a 29 30 29 26 37 29 3d 3d 30 29 0a 23 65 6e  r*)0)&7)==0).#en
76e0: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 44 69 73 61 62  dif../*.** Disab
76f0: 6c 65 20 4d 4d 41 50 20 6f 6e 20 70 6c 61 74 66  le MMAP on platf
7700: 6f 72 6d 73 20 77 68 65 72 65 20 69 74 20 69 73  orms where it is
7710: 20 6b 6e 6f 77 6e 20 74 6f 20 6e 6f 74 20 77 6f   known to not wo
7720: 72 6b 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65  rk.*/.#if define
7730: 64 28 5f 5f 4f 70 65 6e 42 53 44 5f 5f 29 20 7c  d(__OpenBSD__) |
7740: 7c 20 64 65 66 69 6e 65 64 28 5f 5f 51 4e 58 4e  | defined(__QNXN
7750: 54 4f 5f 5f 29 0a 23 20 75 6e 64 65 66 20 53 51  TO__).# undef SQ
7760: 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49  LITE_MAX_MMAP_SI
7770: 5a 45 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  ZE.# define SQLI
7780: 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45  TE_MAX_MMAP_SIZE
7790: 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a   0.#endif../*.**
77a0: 20 44 65 66 61 75 6c 74 20 6d 61 78 69 6d 75 6d   Default maximum
77b0: 20 73 69 7a 65 20 6f 66 20 6d 65 6d 6f 72 79 20   size of memory 
77c0: 75 73 65 64 20 62 79 20 6d 65 6d 6f 72 79 2d 6d  used by memory-m
77d0: 61 70 70 65 64 20 49 2f 4f 20 69 6e 20 74 68 65  apped I/O in the
77e0: 20 56 46 53 0a 2a 2f 0a 23 69 66 64 65 66 20 5f   VFS.*/.#ifdef _
77f0: 5f 41 50 50 4c 45 5f 5f 0a 23 20 69 6e 63 6c 75  _APPLE__.# inclu
7800: 64 65 20 3c 54 61 72 67 65 74 43 6f 6e 64 69 74  de <TargetCondit
7810: 69 6f 6e 61 6c 73 2e 68 3e 0a 23 65 6e 64 69 66  ionals.h>.#endif
7820: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
7830: 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 0a 23 20  MAX_MMAP_SIZE.# 
7840: 69 66 20 64 65 66 69 6e 65 64 28 5f 5f 6c 69 6e  if defined(__lin
7850: 75 78 5f 5f 29 20 5c 0a 20 20 7c 7c 20 64 65 66  ux__) \.  || def
7860: 69 6e 65 64 28 5f 57 49 4e 33 32 29 20 5c 0a 20  ined(_WIN32) \. 
7870: 20 7c 7c 20 28 64 65 66 69 6e 65 64 28 5f 5f 41   || (defined(__A
7880: 50 50 4c 45 5f 5f 29 20 26 26 20 64 65 66 69 6e  PPLE__) && defin
7890: 65 64 28 5f 5f 4d 41 43 48 5f 5f 29 29 20 5c 0a  ed(__MACH__)) \.
78a0: 20 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 73    || defined(__s
78b0: 75 6e 29 20 5c 0a 20 20 7c 7c 20 64 65 66 69 6e  un) \.  || defin
78c0: 65 64 28 5f 5f 46 72 65 65 42 53 44 5f 5f 29 20  ed(__FreeBSD__) 
78d0: 5c 0a 20 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f  \.  || defined(_
78e0: 5f 44 72 61 67 6f 6e 46 6c 79 5f 5f 29 0a 23 20  _DragonFly__).# 
78f0: 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f    define SQLITE_
7900: 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 20 30 78  MAX_MMAP_SIZE 0x
7910: 37 66 66 66 30 30 30 30 20 20 2f 2a 20 32 31 34  7fff0000  /* 214
7920: 37 34 31 38 31 31 32 20 2a 2f 0a 23 20 65 6c 73  7418112 */.# els
7930: 65 0a 23 20 20 20 64 65 66 69 6e 65 20 53 51 4c  e.#   define SQL
7940: 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a  ITE_MAX_MMAP_SIZ
7950: 45 20 30 0a 23 20 65 6e 64 69 66 0a 23 65 6e 64  E 0.# endif.#end
7960: 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 64 65  if../*.** The de
7970: 66 61 75 6c 74 20 4d 4d 41 50 5f 53 49 5a 45 20  fault MMAP_SIZE 
7980: 69 73 20 7a 65 72 6f 20 6f 6e 20 61 6c 6c 20 70  is zero on all p
7990: 6c 61 74 66 6f 72 6d 73 2e 20 20 4f 72 2c 20 65  latforms.  Or, e
79a0: 76 65 6e 20 69 66 20 61 20 6c 61 72 67 65 72 0a  ven if a larger.
79b0: 2a 2a 20 64 65 66 61 75 6c 74 20 4d 4d 41 50 5f  ** default MMAP_
79c0: 53 49 5a 45 20 69 73 20 73 70 65 63 69 66 69 65  SIZE is specifie
79d0: 64 20 61 74 20 63 6f 6d 70 69 6c 65 2d 74 69 6d  d at compile-tim
79e0: 65 2c 20 6d 61 6b 65 20 73 75 72 65 20 74 68 61  e, make sure tha
79f0: 74 20 69 74 20 64 6f 65 73 0a 2a 2a 20 6e 6f 74  t it does.** not
7a00: 20 65 78 63 65 65 64 20 74 68 65 20 6d 61 78 69   exceed the maxi
7a10: 6d 75 6d 20 6d 6d 61 70 20 73 69 7a 65 2e 0a 2a  mum mmap size..*
7a20: 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  /.#ifndef SQLITE
7a30: 5f 44 45 46 41 55 4c 54 5f 4d 4d 41 50 5f 53 49  _DEFAULT_MMAP_SI
7a40: 5a 45 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  ZE.# define SQLI
7a50: 54 45 5f 44 45 46 41 55 4c 54 5f 4d 4d 41 50 5f  TE_DEFAULT_MMAP_
7a60: 53 49 5a 45 20 30 0a 23 65 6e 64 69 66 0a 23 69  SIZE 0.#endif.#i
7a70: 66 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54  f SQLITE_DEFAULT
7a80: 5f 4d 4d 41 50 5f 53 49 5a 45 3e 53 51 4c 49 54  _MMAP_SIZE>SQLIT
7a90: 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 0a  E_MAX_MMAP_SIZE.
7aa0: 23 20 75 6e 64 65 66 20 53 51 4c 49 54 45 5f 44  # undef SQLITE_D
7ab0: 45 46 41 55 4c 54 5f 4d 4d 41 50 5f 53 49 5a 45  EFAULT_MMAP_SIZE
7ac0: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
7ad0: 5f 44 45 46 41 55 4c 54 5f 4d 4d 41 50 5f 53 49  _DEFAULT_MMAP_SI
7ae0: 5a 45 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d  ZE SQLITE_MAX_MM
7af0: 41 50 5f 53 49 5a 45 0a 23 65 6e 64 69 66 0a 0a  AP_SIZE.#endif..
7b00: 2f 2a 0a 2a 2a 20 4f 6e 6c 79 20 6f 6e 65 20 6f  /*.** Only one o
7b10: 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
7b20: 53 54 41 54 33 20 6f 72 20 53 51 4c 49 54 45 5f  STAT3 or SQLITE_
7b30: 45 4e 41 42 4c 45 5f 53 54 41 54 34 20 63 61 6e  ENABLE_STAT4 can
7b40: 20 62 65 20 64 65 66 69 6e 65 64 2e 0a 2a 2a 20   be defined..** 
7b50: 50 72 69 6f 72 69 74 79 20 69 73 20 67 69 76 65  Priority is give
7b60: 6e 20 74 6f 20 53 51 4c 49 54 45 5f 45 4e 41 42  n to SQLITE_ENAB
7b70: 4c 45 5f 53 54 41 54 34 2e 20 20 49 66 20 65 69  LE_STAT4.  If ei
7b80: 74 68 65 72 20 61 72 65 20 64 65 66 69 6e 65 64  ther are defined
7b90: 2c 20 61 6c 73 6f 0a 2a 2a 20 64 65 66 69 6e 65  , also.** define
7ba0: 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53   SQLITE_ENABLE_S
7bb0: 54 41 54 33 5f 4f 52 5f 53 54 41 54 34 0a 2a 2f  TAT3_OR_STAT4.*/
7bc0: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45  .#ifdef SQLITE_E
7bd0: 4e 41 42 4c 45 5f 53 54 41 54 34 0a 23 20 75 6e  NABLE_STAT4.# un
7be0: 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  def SQLITE_ENABL
7bf0: 45 5f 53 54 41 54 33 0a 23 20 64 65 66 69 6e 65  E_STAT3.# define
7c00: 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53   SQLITE_ENABLE_S
7c10: 54 41 54 33 5f 4f 52 5f 53 54 41 54 34 20 31 0a  TAT3_OR_STAT4 1.
7c20: 23 65 6c 69 66 20 53 51 4c 49 54 45 5f 45 4e 41  #elif SQLITE_ENA
7c30: 42 4c 45 5f 53 54 41 54 33 0a 23 20 64 65 66 69  BLE_STAT3.# defi
7c40: 6e 65 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ne SQLITE_ENABLE
7c50: 5f 53 54 41 54 33 5f 4f 52 5f 53 54 41 54 34 20  _STAT3_OR_STAT4 
7c60: 31 0a 23 65 6c 69 66 20 53 51 4c 49 54 45 5f 45  1.#elif SQLITE_E
7c70: 4e 41 42 4c 45 5f 53 54 41 54 33 5f 4f 52 5f 53  NABLE_STAT3_OR_S
7c80: 54 41 54 34 0a 23 20 75 6e 64 65 66 20 53 51 4c  TAT4.# undef SQL
7c90: 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33  ITE_ENABLE_STAT3
7ca0: 5f 4f 52 5f 53 54 41 54 34 0a 23 65 6e 64 69 66  _OR_STAT4.#endif
7cb0: 0a 0a 2f 2a 0a 2a 2a 20 53 45 4c 45 43 54 54 52  ../*.** SELECTTR
7cc0: 41 43 45 5f 45 4e 41 42 4c 45 44 20 77 69 6c 6c  ACE_ENABLED will
7cd0: 20 62 65 20 65 69 74 68 65 72 20 31 20 6f 72 20   be either 1 or 
7ce0: 30 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20 77  0 depending on w
7cf0: 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 0a 2a 2a  hether or not.**
7d00: 20 74 68 65 20 53 65 6c 65 63 74 20 71 75 65 72   the Select quer
7d10: 79 20 67 65 6e 65 72 61 74 6f 72 20 74 72 61 63  y generator trac
7d20: 69 6e 67 20 6c 6f 67 69 63 20 69 73 20 74 75 72  ing logic is tur
7d30: 6e 65 64 20 6f 6e 2e 0a 2a 2f 0a 23 69 66 20 64  ned on..*/.#if d
7d40: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e  efined(SQLITE_EN
7d50: 41 42 4c 45 5f 53 45 4c 45 43 54 54 52 41 43 45  ABLE_SELECTTRACE
7d60: 29 0a 23 20 64 65 66 69 6e 65 20 53 45 4c 45 43  ).# define SELEC
7d70: 54 54 52 41 43 45 5f 45 4e 41 42 4c 45 44 20 31  TTRACE_ENABLED 1
7d80: 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
7d90: 53 45 4c 45 43 54 54 52 41 43 45 5f 45 4e 41 42  SELECTTRACE_ENAB
7da0: 4c 45 44 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a  LED 0.#endif../*
7db0: 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20  .** An instance 
7dc0: 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  of the following
7dd0: 20 73 74 72 75 63 74 75 72 65 20 69 73 20 75 73   structure is us
7de0: 65 64 20 74 6f 20 73 74 6f 72 65 20 74 68 65 20  ed to store the 
7df0: 62 75 73 79 2d 68 61 6e 64 6c 65 72 0a 2a 2a 20  busy-handler.** 
7e00: 63 61 6c 6c 62 61 63 6b 20 66 6f 72 20 61 20 67  callback for a g
7e10: 69 76 65 6e 20 73 71 6c 69 74 65 20 68 61 6e 64  iven sqlite hand
7e20: 6c 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 73 71  le..**.** The sq
7e30: 6c 69 74 65 2e 62 75 73 79 48 61 6e 64 6c 65 72  lite.busyHandler
7e40: 20 6d 65 6d 62 65 72 20 6f 66 20 74 68 65 20 73   member of the s
7e50: 71 6c 69 74 65 20 73 74 72 75 63 74 20 63 6f 6e  qlite struct con
7e60: 74 61 69 6e 73 20 74 68 65 20 62 75 73 79 0a 2a  tains the busy.*
7e70: 2a 20 63 61 6c 6c 62 61 63 6b 20 66 6f 72 20 74  * callback for t
7e80: 68 65 20 64 61 74 61 62 61 73 65 20 68 61 6e 64  he database hand
7e90: 6c 65 2e 20 45 61 63 68 20 70 61 67 65 72 20 6f  le. Each pager o
7ea0: 70 65 6e 65 64 20 76 69 61 20 74 68 65 20 73 71  pened via the sq
7eb0: 6c 69 74 65 0a 2a 2a 20 68 61 6e 64 6c 65 20 69  lite.** handle i
7ec0: 73 20 70 61 73 73 65 64 20 61 20 70 6f 69 6e 74  s passed a point
7ed0: 65 72 20 74 6f 20 73 71 6c 69 74 65 2e 62 75 73  er to sqlite.bus
7ee0: 79 48 61 6e 64 6c 65 72 2e 20 54 68 65 20 62 75  yHandler. The bu
7ef0: 73 79 2d 68 61 6e 64 6c 65 72 0a 2a 2a 20 63 61  sy-handler.** ca
7f00: 6c 6c 62 61 63 6b 20 69 73 20 63 75 72 72 65 6e  llback is curren
7f10: 74 6c 79 20 69 6e 76 6f 6b 65 64 20 6f 6e 6c 79  tly invoked only
7f20: 20 66 72 6f 6d 20 77 69 74 68 69 6e 20 70 61 67   from within pag
7f30: 65 72 2e 63 2e 0a 2a 2f 0a 74 79 70 65 64 65 66  er.c..*/.typedef
7f40: 20 73 74 72 75 63 74 20 42 75 73 79 48 61 6e 64   struct BusyHand
7f50: 6c 65 72 20 42 75 73 79 48 61 6e 64 6c 65 72 3b  ler BusyHandler;
7f60: 0a 73 74 72 75 63 74 20 42 75 73 79 48 61 6e 64  .struct BusyHand
7f70: 6c 65 72 20 7b 0a 20 20 69 6e 74 20 28 2a 78 42  ler {.  int (*xB
7f80: 75 73 79 48 61 6e 64 6c 65 72 29 28 76 6f 69 64  usyHandler)(void
7f90: 20 2a 2c 69 6e 74 29 3b 20 20 2f 2a 20 54 68 65   *,int);  /* The
7fa0: 20 62 75 73 79 20 63 61 6c 6c 62 61 63 6b 20 2a   busy callback *
7fb0: 2f 0a 20 20 76 6f 69 64 20 2a 70 42 75 73 79 41  /.  void *pBusyA
7fc0: 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  rg;             
7fd0: 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20 61        /* First a
7fe0: 72 67 20 74 6f 20 62 75 73 79 20 63 61 6c 6c 62  rg to busy callb
7ff0: 61 63 6b 20 2a 2f 0a 20 20 69 6e 74 20 6e 42 75  ack */.  int nBu
8000: 73 79 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  sy;             
8010: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e             /* In
8020: 63 72 65 6d 65 6e 74 65 64 20 77 69 74 68 20 65  cremented with e
8030: 61 63 68 20 62 75 73 79 20 63 61 6c 6c 20 2a 2f  ach busy call */
8040: 0a 20 20 75 38 20 62 45 78 74 72 61 46 69 6c 65  .  u8 bExtraFile
8050: 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20  Arg;            
8060: 20 20 20 20 20 2f 2a 20 49 6e 63 6c 75 64 65 20       /* Include 
8070: 73 71 6c 69 74 65 33 5f 66 69 6c 65 20 61 73 20  sqlite3_file as 
8080: 63 61 6c 6c 62 61 63 6b 20 61 72 67 20 2a 2f 0a  callback arg */.
8090: 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 4e 61 6d 65 20 6f  };../*.** Name o
80a0: 66 20 74 68 65 20 6d 61 73 74 65 72 20 64 61 74  f the master dat
80b0: 61 62 61 73 65 20 74 61 62 6c 65 2e 20 20 54 68  abase table.  Th
80c0: 65 20 6d 61 73 74 65 72 20 64 61 74 61 62 61 73  e master databas
80d0: 65 20 74 61 62 6c 65 0a 2a 2a 20 69 73 20 61 20  e table.** is a 
80e0: 73 70 65 63 69 61 6c 20 74 61 62 6c 65 20 74 68  special table th
80f0: 61 74 20 68 6f 6c 64 73 20 74 68 65 20 6e 61 6d  at holds the nam
8100: 65 73 20 61 6e 64 20 61 74 74 72 69 62 75 74 65  es and attribute
8110: 73 20 6f 66 20 61 6c 6c 0a 2a 2a 20 75 73 65 72  s of all.** user
8120: 20 74 61 62 6c 65 73 20 61 6e 64 20 69 6e 64 69   tables and indi
8130: 63 65 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ces..*/.#define 
8140: 4d 41 53 54 45 52 5f 4e 41 4d 45 20 20 20 20 20  MASTER_NAME     
8150: 20 20 22 73 71 6c 69 74 65 5f 6d 61 73 74 65 72    "sqlite_master
8160: 22 0a 23 64 65 66 69 6e 65 20 54 45 4d 50 5f 4d  ".#define TEMP_M
8170: 41 53 54 45 52 5f 4e 41 4d 45 20 20 22 73 71 6c  ASTER_NAME  "sql
8180: 69 74 65 5f 74 65 6d 70 5f 6d 61 73 74 65 72 22  ite_temp_master"
8190: 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 72 6f 6f 74  ../*.** The root
81a0: 2d 70 61 67 65 20 6f 66 20 74 68 65 20 6d 61 73  -page of the mas
81b0: 74 65 72 20 64 61 74 61 62 61 73 65 20 74 61 62  ter database tab
81c0: 6c 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4d  le..*/.#define M
81d0: 41 53 54 45 52 5f 52 4f 4f 54 20 20 20 20 20 20  ASTER_ROOT      
81e0: 20 31 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6e 61   1../*.** The na
81f0: 6d 65 20 6f 66 20 74 68 65 20 73 63 68 65 6d 61  me of the schema
8200: 20 74 61 62 6c 65 2e 0a 2a 2f 0a 23 64 65 66 69   table..*/.#defi
8210: 6e 65 20 53 43 48 45 4d 41 5f 54 41 42 4c 45 28  ne SCHEMA_TABLE(
8220: 78 29 20 20 28 28 21 4f 4d 49 54 5f 54 45 4d 50  x)  ((!OMIT_TEMP
8230: 44 42 29 26 26 28 78 3d 3d 31 29 3f 54 45 4d 50  DB)&&(x==1)?TEMP
8240: 5f 4d 41 53 54 45 52 5f 4e 41 4d 45 3a 4d 41 53  _MASTER_NAME:MAS
8250: 54 45 52 5f 4e 41 4d 45 29 0a 0a 2f 2a 0a 2a 2a  TER_NAME)../*.**
8260: 20 41 20 63 6f 6e 76 65 6e 69 65 6e 63 65 20 6d   A convenience m
8270: 61 63 72 6f 20 74 68 61 74 20 72 65 74 75 72 6e  acro that return
8280: 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  s the number of 
8290: 65 6c 65 6d 65 6e 74 73 20 69 6e 0a 2a 2a 20 61  elements in.** a
82a0: 6e 20 61 72 72 61 79 2e 0a 2a 2f 0a 23 64 65 66  n array..*/.#def
82b0: 69 6e 65 20 41 72 72 61 79 53 69 7a 65 28 58 29  ine ArraySize(X)
82c0: 20 20 20 20 28 28 69 6e 74 29 28 73 69 7a 65 6f      ((int)(sizeo
82d0: 66 28 58 29 2f 73 69 7a 65 6f 66 28 58 5b 30 5d  f(X)/sizeof(X[0]
82e0: 29 29 29 0a 0a 2f 2a 0a 2a 2a 20 44 65 74 65 72  )))../*.** Deter
82f0: 6d 69 6e 65 20 69 66 20 74 68 65 20 61 72 67 75  mine if the argu
8300: 6d 65 6e 74 20 69 73 20 61 20 70 6f 77 65 72 20  ment is a power 
8310: 6f 66 20 74 77 6f 0a 2a 2f 0a 23 64 65 66 69 6e  of two.*/.#defin
8320: 65 20 49 73 50 6f 77 65 72 4f 66 54 77 6f 28 58  e IsPowerOfTwo(X
8330: 29 20 28 28 28 58 29 26 28 28 58 29 2d 31 29 29  ) (((X)&((X)-1))
8340: 3d 3d 30 29 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  ==0)../*.** The 
8350: 66 6f 6c 6c 6f 77 69 6e 67 20 76 61 6c 75 65 20  following value 
8360: 61 73 20 61 20 64 65 73 74 72 75 63 74 6f 72 20  as a destructor 
8370: 6d 65 61 6e 73 20 74 6f 20 75 73 65 20 73 71 6c  means to use sql
8380: 69 74 65 33 44 62 46 72 65 65 28 29 2e 0a 2a 2a  ite3DbFree()..**
8390: 20 54 68 65 20 73 71 6c 69 74 65 33 44 62 46 72   The sqlite3DbFr
83a0: 65 65 28 29 20 72 6f 75 74 69 6e 65 20 72 65 71  ee() routine req
83b0: 75 69 72 65 73 20 74 77 6f 20 70 61 72 61 6d 65  uires two parame
83c0: 74 65 72 73 20 69 6e 73 74 65 61 64 20 6f 66 20  ters instead of 
83d0: 74 68 65 0a 2a 2a 20 6f 6e 65 20 70 61 72 61 6d  the.** one param
83e0: 65 74 65 72 20 74 68 61 74 20 64 65 73 74 72 75  eter that destru
83f0: 63 74 6f 72 73 20 6e 6f 72 6d 61 6c 6c 79 20 77  ctors normally w
8400: 61 6e 74 2e 20 20 53 6f 20 77 65 20 68 61 76 65  ant.  So we have
8410: 20 74 6f 20 69 6e 74 72 6f 64 75 63 65 0a 2a 2a   to introduce.**
8420: 20 74 68 69 73 20 6d 61 67 69 63 20 76 61 6c 75   this magic valu
8430: 65 20 74 68 61 74 20 74 68 65 20 63 6f 64 65 20  e that the code 
8440: 6b 6e 6f 77 73 20 74 6f 20 68 61 6e 64 6c 65 20  knows to handle 
8450: 64 69 66 66 65 72 65 6e 74 6c 79 2e 20 20 41 6e  differently.  An
8460: 79 0a 2a 2a 20 70 6f 69 6e 74 65 72 20 77 69 6c  y.** pointer wil
8470: 6c 20 77 6f 72 6b 20 68 65 72 65 20 61 73 20 6c  l work here as l
8480: 6f 6e 67 20 61 73 20 69 74 20 69 73 20 64 69 73  ong as it is dis
8490: 74 69 6e 63 74 20 66 72 6f 6d 20 53 51 4c 49 54  tinct from SQLIT
84a0: 45 5f 53 54 41 54 49 43 0a 2a 2a 20 61 6e 64 20  E_STATIC.** and 
84b0: 53 51 4c 49 54 45 5f 54 52 41 4e 53 49 45 4e 54  SQLITE_TRANSIENT
84c0: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  ..*/.#define SQL
84d0: 49 54 45 5f 44 59 4e 41 4d 49 43 20 20 20 28 28  ITE_DYNAMIC   ((
84e0: 73 71 6c 69 74 65 33 5f 64 65 73 74 72 75 63 74  sqlite3_destruct
84f0: 6f 72 5f 74 79 70 65 29 73 71 6c 69 74 65 33 4d  or_type)sqlite3M
8500: 61 6c 6c 6f 63 53 69 7a 65 29 0a 0a 2f 2a 0a 2a  allocSize)../*.*
8510: 2a 20 57 68 65 6e 20 53 51 4c 49 54 45 5f 4f 4d  * When SQLITE_OM
8520: 49 54 5f 57 53 44 20 69 73 20 64 65 66 69 6e 65  IT_WSD is define
8530: 64 2c 20 69 74 20 6d 65 61 6e 73 20 74 68 61 74  d, it means that
8540: 20 74 68 65 20 74 61 72 67 65 74 20 70 6c 61 74   the target plat
8550: 66 6f 72 6d 20 64 6f 65 73 0a 2a 2a 20 6e 6f 74  form does.** not
8560: 20 73 75 70 70 6f 72 74 20 57 72 69 74 61 62 6c   support Writabl
8570: 65 20 53 74 61 74 69 63 20 44 61 74 61 20 28 57  e Static Data (W
8580: 53 44 29 20 73 75 63 68 20 61 73 20 67 6c 6f 62  SD) such as glob
8590: 61 6c 20 61 6e 64 20 73 74 61 74 69 63 20 76 61  al and static va
85a0: 72 69 61 62 6c 65 73 2e 0a 2a 2a 20 41 6c 6c 20  riables..** All 
85b0: 76 61 72 69 61 62 6c 65 73 20 6d 75 73 74 20 65  variables must e
85c0: 69 74 68 65 72 20 62 65 20 6f 6e 20 74 68 65 20  ither be on the 
85d0: 73 74 61 63 6b 20 6f 72 20 64 79 6e 61 6d 69 63  stack or dynamic
85e0: 61 6c 6c 79 20 61 6c 6c 6f 63 61 74 65 64 20 66  ally allocated f
85f0: 72 6f 6d 0a 2a 2a 20 74 68 65 20 68 65 61 70 2e  rom.** the heap.
8600: 20 20 57 68 65 6e 20 57 53 44 20 69 73 20 75 6e    When WSD is un
8610: 73 75 70 70 6f 72 74 65 64 2c 20 74 68 65 20 76  supported, the v
8620: 61 72 69 61 62 6c 65 20 64 65 63 6c 61 72 61 74  ariable declarat
8630: 69 6f 6e 73 20 73 63 61 74 74 65 72 65 64 0a 2a  ions scattered.*
8640: 2a 20 74 68 72 6f 75 67 68 6f 75 74 20 74 68 65  * throughout the
8650: 20 53 51 4c 69 74 65 20 63 6f 64 65 20 6d 75 73   SQLite code mus
8660: 74 20 62 65 63 6f 6d 65 20 63 6f 6e 73 74 61 6e  t become constan
8670: 74 73 20 69 6e 73 74 65 61 64 2e 20 20 54 68 65  ts instead.  The
8680: 20 53 51 4c 49 54 45 5f 57 53 44 0a 2a 2a 20 6d   SQLITE_WSD.** m
8690: 61 63 72 6f 20 69 73 20 75 73 65 64 20 66 6f 72  acro is used for
86a0: 20 74 68 69 73 20 70 75 72 70 6f 73 65 2e 20 20   this purpose.  
86b0: 41 6e 64 20 69 6e 73 74 65 61 64 20 6f 66 20 72  And instead of r
86c0: 65 66 65 72 65 6e 63 69 6e 67 20 74 68 65 20 76  eferencing the v
86d0: 61 72 69 61 62 6c 65 0a 2a 2a 20 64 69 72 65 63  ariable.** direc
86e0: 74 6c 79 2c 20 77 65 20 75 73 65 20 69 74 73 20  tly, we use its 
86f0: 63 6f 6e 73 74 61 6e 74 20 61 73 20 61 20 6b 65  constant as a ke
8700: 79 20 74 6f 20 6c 6f 6f 6b 75 70 20 74 68 65 20  y to lookup the 
8710: 72 75 6e 2d 74 69 6d 65 20 61 6c 6c 6f 63 61 74  run-time allocat
8720: 65 64 0a 2a 2a 20 62 75 66 66 65 72 20 74 68 61  ed.** buffer tha
8730: 74 20 68 6f 6c 64 73 20 72 65 61 6c 20 76 61 72  t holds real var
8740: 69 61 62 6c 65 2e 20 20 54 68 65 20 63 6f 6e 73  iable.  The cons
8750: 74 61 6e 74 20 69 73 20 61 6c 73 6f 20 74 68 65  tant is also the
8760: 20 69 6e 69 74 69 61 6c 69 7a 65 72 0a 2a 2a 20   initializer.** 
8770: 66 6f 72 20 74 68 65 20 72 75 6e 2d 74 69 6d 65  for the run-time
8780: 20 61 6c 6c 6f 63 61 74 65 64 20 62 75 66 66 65   allocated buffe
8790: 72 2e 0a 2a 2a 0a 2a 2a 20 49 6e 20 74 68 65 20  r..**.** In the 
87a0: 75 73 75 61 6c 20 63 61 73 65 20 77 68 65 72 65  usual case where
87b0: 20 57 53 44 20 69 73 20 73 75 70 70 6f 72 74 65   WSD is supporte
87c0: 64 2c 20 74 68 65 20 53 51 4c 49 54 45 5f 57 53  d, the SQLITE_WS
87d0: 44 20 61 6e 64 20 47 4c 4f 42 41 4c 0a 2a 2a 20  D and GLOBAL.** 
87e0: 6d 61 63 72 6f 73 20 62 65 63 6f 6d 65 20 6e 6f  macros become no
87f0: 2d 6f 70 73 20 61 6e 64 20 68 61 76 65 20 7a 65  -ops and have ze
8800: 72 6f 20 70 65 72 66 6f 72 6d 61 6e 63 65 20 69  ro performance i
8810: 6d 70 61 63 74 2e 0a 2a 2f 0a 23 69 66 64 65 66  mpact..*/.#ifdef
8820: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 53 44   SQLITE_OMIT_WSD
8830: 0a 20 20 23 64 65 66 69 6e 65 20 53 51 4c 49 54  .  #define SQLIT
8840: 45 5f 57 53 44 20 63 6f 6e 73 74 0a 20 20 23 64  E_WSD const.  #d
8850: 65 66 69 6e 65 20 47 4c 4f 42 41 4c 28 74 2c 76  efine GLOBAL(t,v
8860: 29 20 28 2a 28 74 2a 29 73 71 6c 69 74 65 33 5f  ) (*(t*)sqlite3_
8870: 77 73 64 5f 66 69 6e 64 28 28 76 6f 69 64 2a 29  wsd_find((void*)
8880: 26 28 76 29 2c 20 73 69 7a 65 6f 66 28 76 29 29  &(v), sizeof(v))
8890: 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69  ).  #define sqli
88a0: 74 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 20  te3GlobalConfig 
88b0: 47 4c 4f 42 41 4c 28 73 74 72 75 63 74 20 53 71  GLOBAL(struct Sq
88c0: 6c 69 74 65 33 43 6f 6e 66 69 67 2c 20 73 71 6c  lite3Config, sql
88d0: 69 74 65 33 43 6f 6e 66 69 67 29 0a 20 20 69 6e  ite3Config).  in
88e0: 74 20 73 71 6c 69 74 65 33 5f 77 73 64 5f 69 6e  t sqlite3_wsd_in
88f0: 69 74 28 69 6e 74 20 4e 2c 20 69 6e 74 20 4a 29  it(int N, int J)
8900: 3b 0a 20 20 76 6f 69 64 20 2a 73 71 6c 69 74 65  ;.  void *sqlite
8910: 33 5f 77 73 64 5f 66 69 6e 64 28 76 6f 69 64 20  3_wsd_find(void 
8920: 2a 4b 2c 20 69 6e 74 20 4c 29 3b 0a 23 65 6c 73  *K, int L);.#els
8930: 65 0a 20 20 23 64 65 66 69 6e 65 20 53 51 4c 49  e.  #define SQLI
8940: 54 45 5f 57 53 44 0a 20 20 23 64 65 66 69 6e 65  TE_WSD.  #define
8950: 20 47 4c 4f 42 41 4c 28 74 2c 76 29 20 76 0a 20   GLOBAL(t,v) v. 
8960: 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33   #define sqlite3
8970: 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 20 73 71 6c  GlobalConfig sql
8980: 69 74 65 33 43 6f 6e 66 69 67 0a 23 65 6e 64 69  ite3Config.#endi
8990: 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c  f../*.** The fol
89a0: 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 73 20 61 72  lowing macros ar
89b0: 65 20 75 73 65 64 20 74 6f 20 73 75 70 70 72 65  e used to suppre
89c0: 73 73 20 63 6f 6d 70 69 6c 65 72 20 77 61 72 6e  ss compiler warn
89d0: 69 6e 67 73 20 61 6e 64 20 74 6f 0a 2a 2a 20 6d  ings and to.** m
89e0: 61 6b 65 20 69 74 20 63 6c 65 61 72 20 74 6f 20  ake it clear to 
89f0: 68 75 6d 61 6e 20 72 65 61 64 65 72 73 20 77 68  human readers wh
8a00: 65 6e 20 61 20 66 75 6e 63 74 69 6f 6e 20 70 61  en a function pa
8a10: 72 61 6d 65 74 65 72 20 69 73 20 64 65 6c 69 62  rameter is delib
8a20: 65 72 61 74 65 6c 79 0a 2a 2a 20 6c 65 66 74 20  erately.** left 
8a30: 75 6e 75 73 65 64 20 77 69 74 68 69 6e 20 74 68  unused within th
8a40: 65 20 62 6f 64 79 20 6f 66 20 61 20 66 75 6e 63  e body of a func
8a50: 74 69 6f 6e 2e 20 54 68 69 73 20 75 73 75 61 6c  tion. This usual
8a60: 6c 79 20 68 61 70 70 65 6e 73 20 77 68 65 6e 0a  ly happens when.
8a70: 2a 2a 20 61 20 66 75 6e 63 74 69 6f 6e 20 69 73  ** a function is
8a80: 20 63 61 6c 6c 65 64 20 76 69 61 20 61 20 66 75   called via a fu
8a90: 6e 63 74 69 6f 6e 20 70 6f 69 6e 74 65 72 2e 20  nction pointer. 
8aa0: 46 6f 72 20 65 78 61 6d 70 6c 65 20 74 68 65 0a  For example the.
8ab0: 2a 2a 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  ** implementatio
8ac0: 6e 20 6f 66 20 61 6e 20 53 51 4c 20 61 67 67 72  n of an SQL aggr
8ad0: 65 67 61 74 65 20 73 74 65 70 20 63 61 6c 6c 62  egate step callb
8ae0: 61 63 6b 20 6d 61 79 20 6e 6f 74 20 75 73 65 20  ack may not use 
8af0: 74 68 65 0a 2a 2a 20 70 61 72 61 6d 65 74 65 72  the.** parameter
8b00: 20 69 6e 64 69 63 61 74 69 6e 67 20 74 68 65 20   indicating the 
8b10: 6e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65  number of argume
8b20: 6e 74 73 20 70 61 73 73 65 64 20 74 6f 20 74 68  nts passed to th
8b30: 65 20 61 67 67 72 65 67 61 74 65 2c 0a 2a 2a 20  e aggregate,.** 
8b40: 69 66 20 69 74 20 6b 6e 6f 77 73 20 74 68 61 74  if it knows that
8b50: 20 74 68 69 73 20 69 73 20 65 6e 66 6f 72 63 65   this is enforce
8b60: 64 20 65 6c 73 65 77 68 65 72 65 2e 0a 2a 2a 0a  d elsewhere..**.
8b70: 2a 2a 20 57 68 65 6e 20 61 20 66 75 6e 63 74 69  ** When a functi
8b80: 6f 6e 20 70 61 72 61 6d 65 74 65 72 20 69 73 20  on parameter is 
8b90: 6e 6f 74 20 75 73 65 64 20 61 74 20 61 6c 6c 20  not used at all 
8ba0: 77 69 74 68 69 6e 20 74 68 65 20 62 6f 64 79 20  within the body 
8bb0: 6f 66 20 61 20 66 75 6e 63 74 69 6f 6e 2c 0a 2a  of a function,.*
8bc0: 2a 20 69 74 20 69 73 20 67 65 6e 65 72 61 6c 6c  * it is generall
8bd0: 79 20 6e 61 6d 65 64 20 22 4e 6f 74 55 73 65 64  y named "NotUsed
8be0: 22 20 6f 72 20 22 4e 6f 74 55 73 65 64 32 22 20  " or "NotUsed2" 
8bf0: 74 6f 20 6d 61 6b 65 20 74 68 69 6e 67 73 20 65  to make things e
8c00: 76 65 6e 20 63 6c 65 61 72 65 72 2e 0a 2a 2a 20  ven clearer..** 
8c10: 48 6f 77 65 76 65 72 2c 20 74 68 65 73 65 20 6d  However, these m
8c20: 61 63 72 6f 73 20 6d 61 79 20 61 6c 73 6f 20 62  acros may also b
8c30: 65 20 75 73 65 64 20 74 6f 20 73 75 70 70 72 65  e used to suppre
8c40: 73 73 20 77 61 72 6e 69 6e 67 73 20 72 65 6c 61  ss warnings rela
8c50: 74 65 64 20 74 6f 0a 2a 2a 20 70 61 72 61 6d 65  ted to.** parame
8c60: 74 65 72 73 20 74 68 61 74 20 6d 61 79 20 6f 72  ters that may or
8c70: 20 6d 61 79 20 6e 6f 74 20 62 65 20 75 73 65 64   may not be used
8c80: 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20 63 6f   depending on co
8c90: 6d 70 69 6c 61 74 69 6f 6e 20 6f 70 74 69 6f 6e  mpilation option
8ca0: 73 2e 0a 2a 2a 20 46 6f 72 20 65 78 61 6d 70 6c  s..** For exampl
8cb0: 65 20 74 68 6f 73 65 20 70 61 72 61 6d 65 74 65  e those paramete
8cc0: 72 73 20 6f 6e 6c 79 20 75 73 65 64 20 69 6e 20  rs only used in 
8cd0: 61 73 73 65 72 74 28 29 20 73 74 61 74 65 6d 65  assert() stateme
8ce0: 6e 74 73 2e 20 49 6e 20 74 68 65 73 65 0a 2a 2a  nts. In these.**
8cf0: 20 63 61 73 65 73 20 74 68 65 20 70 61 72 61 6d   cases the param
8d00: 65 74 65 72 73 20 61 72 65 20 6e 61 6d 65 64 20  eters are named 
8d10: 61 73 20 70 65 72 20 74 68 65 20 75 73 75 61 6c  as per the usual
8d20: 20 63 6f 6e 76 65 6e 74 69 6f 6e 73 2e 0a 2a 2f   conventions..*/
8d30: 0a 23 64 65 66 69 6e 65 20 55 4e 55 53 45 44 5f  .#define UNUSED_
8d40: 50 41 52 41 4d 45 54 45 52 28 78 29 20 28 76 6f  PARAMETER(x) (vo
8d50: 69 64 29 28 78 29 0a 23 64 65 66 69 6e 65 20 55  id)(x).#define U
8d60: 4e 55 53 45 44 5f 50 41 52 41 4d 45 54 45 52 32  NUSED_PARAMETER2
8d70: 28 78 2c 79 29 20 55 4e 55 53 45 44 5f 50 41 52  (x,y) UNUSED_PAR
8d80: 41 4d 45 54 45 52 28 78 29 2c 55 4e 55 53 45 44  AMETER(x),UNUSED
8d90: 5f 50 41 52 41 4d 45 54 45 52 28 79 29 0a 0a 2f  _PARAMETER(y)../
8da0: 2a 0a 2a 2a 20 46 6f 72 77 61 72 64 20 72 65 66  *.** Forward ref
8db0: 65 72 65 6e 63 65 73 20 74 6f 20 73 74 72 75 63  erences to struc
8dc0: 74 75 72 65 73 0a 2a 2f 0a 74 79 70 65 64 65 66  tures.*/.typedef
8dd0: 20 73 74 72 75 63 74 20 41 67 67 49 6e 66 6f 20   struct AggInfo 
8de0: 41 67 67 49 6e 66 6f 3b 0a 74 79 70 65 64 65 66  AggInfo;.typedef
8df0: 20 73 74 72 75 63 74 20 41 75 74 68 43 6f 6e 74   struct AuthCont
8e00: 65 78 74 20 41 75 74 68 43 6f 6e 74 65 78 74 3b  ext AuthContext;
8e10: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
8e20: 41 75 74 6f 69 6e 63 49 6e 66 6f 20 41 75 74 6f  AutoincInfo Auto
8e30: 69 6e 63 49 6e 66 6f 3b 0a 74 79 70 65 64 65 66  incInfo;.typedef
8e40: 20 73 74 72 75 63 74 20 42 69 74 76 65 63 20 42   struct Bitvec B
8e50: 69 74 76 65 63 3b 0a 74 79 70 65 64 65 66 20 73  itvec;.typedef s
8e60: 74 72 75 63 74 20 43 6f 6c 6c 53 65 71 20 43 6f  truct CollSeq Co
8e70: 6c 6c 53 65 71 3b 0a 74 79 70 65 64 65 66 20 73  llSeq;.typedef s
8e80: 74 72 75 63 74 20 43 6f 6c 75 6d 6e 20 43 6f 6c  truct Column Col
8e90: 75 6d 6e 3b 0a 74 79 70 65 64 65 66 20 73 74 72  umn;.typedef str
8ea0: 75 63 74 20 44 62 20 44 62 3b 0a 74 79 70 65 64  uct Db Db;.typed
8eb0: 65 66 20 73 74 72 75 63 74 20 53 63 68 65 6d 61  ef struct Schema
8ec0: 20 53 63 68 65 6d 61 3b 0a 74 79 70 65 64 65 66   Schema;.typedef
8ed0: 20 73 74 72 75 63 74 20 45 78 70 72 20 45 78 70   struct Expr Exp
8ee0: 72 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  r;.typedef struc
8ef0: 74 20 45 78 70 72 4c 69 73 74 20 45 78 70 72 4c  t ExprList ExprL
8f00: 69 73 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72  ist;.typedef str
8f10: 75 63 74 20 46 4b 65 79 20 46 4b 65 79 3b 0a 74  uct FKey FKey;.t
8f20: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 46 75  ypedef struct Fu
8f30: 6e 63 44 65 73 74 72 75 63 74 6f 72 20 46 75 6e  ncDestructor Fun
8f40: 63 44 65 73 74 72 75 63 74 6f 72 3b 0a 74 79 70  cDestructor;.typ
8f50: 65 64 65 66 20 73 74 72 75 63 74 20 46 75 6e 63  edef struct Func
8f60: 44 65 66 20 46 75 6e 63 44 65 66 3b 0a 74 79 70  Def FuncDef;.typ
8f70: 65 64 65 66 20 73 74 72 75 63 74 20 46 75 6e 63  edef struct Func
8f80: 44 65 66 48 61 73 68 20 46 75 6e 63 44 65 66 48  DefHash FuncDefH
8f90: 61 73 68 3b 0a 74 79 70 65 64 65 66 20 73 74 72  ash;.typedef str
8fa0: 75 63 74 20 49 64 4c 69 73 74 20 49 64 4c 69 73  uct IdList IdLis
8fb0: 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  t;.typedef struc
8fc0: 74 20 49 6e 64 65 78 20 49 6e 64 65 78 3b 0a 74  t Index Index;.t
8fd0: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 49 6e  ypedef struct In
8fe0: 64 65 78 53 61 6d 70 6c 65 20 49 6e 64 65 78 53  dexSample IndexS
8ff0: 61 6d 70 6c 65 3b 0a 74 79 70 65 64 65 66 20 73  ample;.typedef s
9000: 74 72 75 63 74 20 4b 65 79 43 6c 61 73 73 20 4b  truct KeyClass K
9010: 65 79 43 6c 61 73 73 3b 0a 74 79 70 65 64 65 66  eyClass;.typedef
9020: 20 73 74 72 75 63 74 20 4b 65 79 49 6e 66 6f 20   struct KeyInfo 
9030: 4b 65 79 49 6e 66 6f 3b 0a 74 79 70 65 64 65 66  KeyInfo;.typedef
9040: 20 73 74 72 75 63 74 20 4c 6f 6f 6b 61 73 69 64   struct Lookasid
9050: 65 20 4c 6f 6f 6b 61 73 69 64 65 3b 0a 74 79 70  e Lookaside;.typ
9060: 65 64 65 66 20 73 74 72 75 63 74 20 4c 6f 6f 6b  edef struct Look
9070: 61 73 69 64 65 53 6c 6f 74 20 4c 6f 6f 6b 61 73  asideSlot Lookas
9080: 69 64 65 53 6c 6f 74 3b 0a 74 79 70 65 64 65 66  ideSlot;.typedef
9090: 20 73 74 72 75 63 74 20 4d 6f 64 75 6c 65 20 4d   struct Module M
90a0: 6f 64 75 6c 65 3b 0a 74 79 70 65 64 65 66 20 73  odule;.typedef s
90b0: 74 72 75 63 74 20 4e 61 6d 65 43 6f 6e 74 65 78  truct NameContex
90c0: 74 20 4e 61 6d 65 43 6f 6e 74 65 78 74 3b 0a 74  t NameContext;.t
90d0: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 50 61  ypedef struct Pa
90e0: 72 73 65 20 50 61 72 73 65 3b 0a 74 79 70 65 64  rse Parse;.typed
90f0: 65 66 20 73 74 72 75 63 74 20 50 72 65 55 70 64  ef struct PreUpd
9100: 61 74 65 20 50 72 65 55 70 64 61 74 65 3b 0a 74  ate PreUpdate;.t
9110: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 50 72  ypedef struct Pr
9120: 69 6e 74 66 41 72 67 75 6d 65 6e 74 73 20 50 72  intfArguments Pr
9130: 69 6e 74 66 41 72 67 75 6d 65 6e 74 73 3b 0a 74  intfArguments;.t
9140: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 52 6f  ypedef struct Ro
9150: 77 53 65 74 20 52 6f 77 53 65 74 3b 0a 74 79 70  wSet RowSet;.typ
9160: 65 64 65 66 20 73 74 72 75 63 74 20 53 61 76 65  edef struct Save
9170: 70 6f 69 6e 74 20 53 61 76 65 70 6f 69 6e 74 3b  point Savepoint;
9180: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
9190: 53 65 6c 65 63 74 20 53 65 6c 65 63 74 3b 0a 74  Select Select;.t
91a0: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 53 51  ypedef struct SQ
91b0: 4c 69 74 65 54 68 72 65 61 64 20 53 51 4c 69 74  LiteThread SQLit
91c0: 65 54 68 72 65 61 64 3b 0a 74 79 70 65 64 65 66  eThread;.typedef
91d0: 20 73 74 72 75 63 74 20 53 65 6c 65 63 74 44 65   struct SelectDe
91e0: 73 74 20 53 65 6c 65 63 74 44 65 73 74 3b 0a 74  st SelectDest;.t
91f0: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 53 72  ypedef struct Sr
9200: 63 4c 69 73 74 20 53 72 63 4c 69 73 74 3b 0a 74  cList SrcList;.t
9210: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 73 71  ypedef struct sq
9220: 6c 69 74 65 33 5f 73 74 72 20 53 74 72 41 63 63  lite3_str StrAcc
9230: 75 6d 3b 20 2f 2a 20 49 6e 74 65 72 6e 61 6c 20  um; /* Internal 
9240: 61 6c 69 61 73 20 66 6f 72 20 73 71 6c 69 74 65  alias for sqlite
9250: 33 5f 73 74 72 20 2a 2f 0a 74 79 70 65 64 65 66  3_str */.typedef
9260: 20 73 74 72 75 63 74 20 54 61 62 6c 65 20 54 61   struct Table Ta
9270: 62 6c 65 3b 0a 74 79 70 65 64 65 66 20 73 74 72  ble;.typedef str
9280: 75 63 74 20 54 61 62 6c 65 4c 6f 63 6b 20 54 61  uct TableLock Ta
9290: 62 6c 65 4c 6f 63 6b 3b 0a 74 79 70 65 64 65 66  bleLock;.typedef
92a0: 20 73 74 72 75 63 74 20 54 6f 6b 65 6e 20 54 6f   struct Token To
92b0: 6b 65 6e 3b 0a 74 79 70 65 64 65 66 20 73 74 72  ken;.typedef str
92c0: 75 63 74 20 54 72 65 65 56 69 65 77 20 54 72 65  uct TreeView Tre
92d0: 65 56 69 65 77 3b 0a 74 79 70 65 64 65 66 20 73  eView;.typedef s
92e0: 74 72 75 63 74 20 54 72 69 67 67 65 72 20 54 72  truct Trigger Tr
92f0: 69 67 67 65 72 3b 0a 74 79 70 65 64 65 66 20 73  igger;.typedef s
9300: 74 72 75 63 74 20 54 72 69 67 67 65 72 50 72 67  truct TriggerPrg
9310: 20 54 72 69 67 67 65 72 50 72 67 3b 0a 74 79 70   TriggerPrg;.typ
9320: 65 64 65 66 20 73 74 72 75 63 74 20 54 72 69 67  edef struct Trig
9330: 67 65 72 53 74 65 70 20 54 72 69 67 67 65 72 53  gerStep TriggerS
9340: 74 65 70 3b 0a 74 79 70 65 64 65 66 20 73 74 72  tep;.typedef str
9350: 75 63 74 20 55 6e 70 61 63 6b 65 64 52 65 63 6f  uct UnpackedReco
9360: 72 64 20 55 6e 70 61 63 6b 65 64 52 65 63 6f 72  rd UnpackedRecor
9370: 64 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  d;.typedef struc
9380: 74 20 55 70 73 65 72 74 20 55 70 73 65 72 74 3b  t Upsert Upsert;
9390: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
93a0: 56 54 61 62 6c 65 20 56 54 61 62 6c 65 3b 0a 74  VTable VTable;.t
93b0: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 56 74  ypedef struct Vt
93c0: 61 62 43 74 78 20 56 74 61 62 43 74 78 3b 0a 74  abCtx VtabCtx;.t
93d0: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 57 61  ypedef struct Wa
93e0: 6c 6b 65 72 20 57 61 6c 6b 65 72 3b 0a 74 79 70  lker Walker;.typ
93f0: 65 64 65 66 20 73 74 72 75 63 74 20 57 68 65 72  edef struct Wher
9400: 65 49 6e 66 6f 20 57 68 65 72 65 49 6e 66 6f 3b  eInfo WhereInfo;
9410: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
9420: 57 69 6e 64 6f 77 20 57 69 6e 64 6f 77 3b 0a 74  Window Window;.t
9430: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 57 69  ypedef struct Wi
9440: 74 68 20 57 69 74 68 3b 0a 0a 0a 2f 2a 0a 2a 2a  th With;.../*.**
9450: 20 54 68 65 20 62 69 74 6d 61 73 6b 20 64 61 74   The bitmask dat
9460: 61 74 79 70 65 20 64 65 66 69 6e 65 64 20 62 65  atype defined be
9470: 6c 6f 77 20 69 73 20 75 73 65 64 20 66 6f 72 20  low is used for 
9480: 76 61 72 69 6f 75 73 20 6f 70 74 69 6d 69 7a 61  various optimiza
9490: 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 43 68 61  tions..**.** Cha
94a0: 6e 67 69 6e 67 20 74 68 69 73 20 66 72 6f 6d 20  nging this from 
94b0: 61 20 36 34 2d 62 69 74 20 74 6f 20 61 20 33 32  a 64-bit to a 32
94c0: 2d 62 69 74 20 74 79 70 65 20 6c 69 6d 69 74 73  -bit type limits
94d0: 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 0a 2a   the number of.*
94e0: 2a 20 74 61 62 6c 65 73 20 69 6e 20 61 20 6a 6f  * tables in a jo
94f0: 69 6e 20 74 6f 20 33 32 20 69 6e 73 74 65 61 64  in to 32 instead
9500: 20 6f 66 20 36 34 2e 20 20 42 75 74 20 69 74 20   of 64.  But it 
9510: 61 6c 73 6f 20 72 65 64 75 63 65 73 20 74 68 65  also reduces the
9520: 20 73 69 7a 65 0a 2a 2a 20 6f 66 20 74 68 65 20   size.** of the 
9530: 6c 69 62 72 61 72 79 20 62 79 20 37 33 38 20 62  library by 738 b
9540: 79 74 65 73 20 6f 6e 20 69 78 38 36 2e 0a 2a 2f  ytes on ix86..*/
9550: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 42  .#ifdef SQLITE_B
9560: 49 54 4d 41 53 4b 5f 54 59 50 45 0a 20 20 74 79  ITMASK_TYPE.  ty
9570: 70 65 64 65 66 20 53 51 4c 49 54 45 5f 42 49 54  pedef SQLITE_BIT
9580: 4d 41 53 4b 5f 54 59 50 45 20 42 69 74 6d 61 73  MASK_TYPE Bitmas
9590: 6b 3b 0a 23 65 6c 73 65 0a 20 20 74 79 70 65 64  k;.#else.  typed
95a0: 65 66 20 75 36 34 20 42 69 74 6d 61 73 6b 3b 0a  ef u64 Bitmask;.
95b0: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68  #endif../*.** Th
95c0: 65 20 6e 75 6d 62 65 72 20 6f 66 20 62 69 74 73  e number of bits
95d0: 20 69 6e 20 61 20 42 69 74 6d 61 73 6b 2e 20 20   in a Bitmask.  
95e0: 22 42 4d 53 22 20 6d 65 61 6e 73 20 22 42 69 74  "BMS" means "Bit
95f0: 4d 61 73 6b 20 53 69 7a 65 22 2e 0a 2a 2f 0a 23  Mask Size"..*/.#
9600: 64 65 66 69 6e 65 20 42 4d 53 20 20 28 28 69 6e  define BMS  ((in
9610: 74 29 28 73 69 7a 65 6f 66 28 42 69 74 6d 61 73  t)(sizeof(Bitmas
9620: 6b 29 2a 38 29 29 0a 0a 2f 2a 0a 2a 2a 20 41 20  k)*8))../*.** A 
9630: 62 69 74 20 69 6e 20 61 20 42 69 74 6d 61 73 6b  bit in a Bitmask
9640: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 41 53 4b  .*/.#define MASK
9650: 42 49 54 28 6e 29 20 20 20 28 28 28 42 69 74 6d  BIT(n)   (((Bitm
9660: 61 73 6b 29 31 29 3c 3c 28 6e 29 29 0a 23 64 65  ask)1)<<(n)).#de
9670: 66 69 6e 65 20 4d 41 53 4b 42 49 54 33 32 28 6e  fine MASKBIT32(n
9680: 29 20 28 28 28 75 6e 73 69 67 6e 65 64 20 69 6e  ) (((unsigned in
9690: 74 29 31 29 3c 3c 28 6e 29 29 0a 23 64 65 66 69  t)1)<<(n)).#defi
96a0: 6e 65 20 41 4c 4c 42 49 54 53 20 20 20 20 20 20  ne ALLBITS      
96b0: 28 28 42 69 74 6d 61 73 6b 29 2d 31 29 0a 0a 2f  ((Bitmask)-1)../
96c0: 2a 20 41 20 56 4c 69 73 74 20 6f 62 6a 65 63 74  * A VList object
96d0: 20 72 65 63 6f 72 64 73 20 61 20 6d 61 70 70 69   records a mappi
96e0: 6e 67 20 62 65 74 77 65 65 6e 20 70 61 72 61 6d  ng between param
96f0: 65 74 65 72 73 2f 76 61 72 69 61 62 6c 65 73 2f  eters/variables/
9700: 77 69 6c 64 63 61 72 64 73 0a 2a 2a 20 69 6e 20  wildcards.** in 
9710: 74 68 65 20 53 51 4c 20 73 74 61 74 65 6d 65 6e  the SQL statemen
9720: 74 20 28 73 75 63 68 20 61 73 20 24 61 62 63 2c  t (such as $abc,
9730: 20 40 70 71 72 2c 20 6f 72 20 3a 78 79 7a 29 20   @pqr, or :xyz) 
9740: 61 6e 64 20 74 68 65 20 69 6e 74 65 67 65 72 0a  and the integer.
9750: 2a 2a 20 76 61 72 69 61 62 6c 65 20 6e 75 6d 62  ** variable numb
9760: 65 72 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  er associated wi
9770: 74 68 20 74 68 61 74 20 70 61 72 61 6d 65 74 65  th that paramete
9780: 72 2e 20 20 53 65 65 20 74 68 65 20 66 6f 72 6d  r.  See the form
9790: 61 74 20 64 65 73 63 72 69 70 74 69 6f 6e 0a 2a  at description.*
97a0: 2a 20 6f 6e 20 74 68 65 20 73 71 6c 69 74 65 33  * on the sqlite3
97b0: 56 4c 69 73 74 41 64 64 28 29 20 72 6f 75 74 69  VListAdd() routi
97c0: 6e 65 20 66 6f 72 20 6d 6f 72 65 20 69 6e 66 6f  ne for more info
97d0: 72 6d 61 74 69 6f 6e 2e 20 20 41 20 56 4c 69 73  rmation.  A VLis
97e0: 74 20 69 73 20 72 65 61 6c 6c 79 0a 2a 2a 20 6a  t is really.** j
97f0: 75 73 74 20 61 6e 20 61 72 72 61 79 20 6f 66 20  ust an array of 
9800: 69 6e 74 65 67 65 72 73 2e 0a 2a 2f 0a 74 79 70  integers..*/.typ
9810: 65 64 65 66 20 69 6e 74 20 56 4c 69 73 74 3b 0a  edef int VList;.
9820: 0a 2f 2a 0a 2a 2a 20 44 65 66 65 72 20 73 6f 75  ./*.** Defer sou
9830: 72 63 69 6e 67 20 76 64 62 65 2e 68 20 61 6e 64  rcing vdbe.h and
9840: 20 62 74 72 65 65 2e 68 20 75 6e 74 69 6c 20 61   btree.h until a
9850: 66 74 65 72 20 74 68 65 20 22 75 38 22 20 61 6e  fter the "u8" an
9860: 64 0a 2a 2a 20 22 42 75 73 79 48 61 6e 64 6c 65  d.** "BusyHandle
9870: 72 22 20 74 79 70 65 64 65 66 73 2e 20 76 64 62  r" typedefs. vdb
9880: 65 2e 68 20 61 6c 73 6f 20 72 65 71 75 69 72 65  e.h also require
9890: 73 20 61 20 66 65 77 20 6f 66 20 74 68 65 20 6f  s a few of the o
98a0: 70 61 71 75 65 0a 2a 2a 20 70 6f 69 6e 74 65 72  paque.** pointer
98b0: 20 74 79 70 65 73 20 28 69 2e 65 2e 20 46 75 6e   types (i.e. Fun
98c0: 63 44 65 66 29 20 64 65 66 69 6e 65 64 20 61 62  cDef) defined ab
98d0: 6f 76 65 2e 0a 2a 2f 0a 23 69 6e 63 6c 75 64 65  ove..*/.#include
98e0: 20 22 62 74 72 65 65 2e 68 22 0a 23 69 6e 63 6c   "btree.h".#incl
98f0: 75 64 65 20 22 76 64 62 65 2e 68 22 0a 23 69 6e  ude "vdbe.h".#in
9900: 63 6c 75 64 65 20 22 70 61 67 65 72 2e 68 22 0a  clude "pager.h".
9910: 23 69 6e 63 6c 75 64 65 20 22 70 63 61 63 68 65  #include "pcache
9920: 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20 22 6f 73  .h".#include "os
9930: 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20 22 6d 75  .h".#include "mu
9940: 74 65 78 2e 68 22 0a 0a 2f 2a 20 54 68 65 20 53  tex.h"../* The S
9950: 51 4c 49 54 45 5f 45 58 54 52 41 5f 44 55 52 41  QLITE_EXTRA_DURA
9960: 42 4c 45 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65  BLE compile-time
9970: 20 6f 70 74 69 6f 6e 20 75 73 65 64 20 74 6f 20   option used to 
9980: 73 65 74 20 74 68 65 20 64 65 66 61 75 6c 74 0a  set the default.
9990: 2a 2a 20 73 79 6e 63 68 72 6f 6e 6f 75 73 20 73  ** synchronous s
99a0: 65 74 74 69 6e 67 20 74 6f 20 45 58 54 52 41 2e  etting to EXTRA.
99b0: 20 20 49 74 20 69 73 20 6e 6f 20 6c 6f 6e 67 65    It is no longe
99c0: 72 20 73 75 70 70 6f 72 74 65 64 2e 0a 2a 2f 0a  r supported..*/.
99d0: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 58  #ifdef SQLITE_EX
99e0: 54 52 41 5f 44 55 52 41 42 4c 45 0a 23 20 77 61  TRA_DURABLE.# wa
99f0: 72 6e 69 6e 67 20 55 73 65 20 53 51 4c 49 54 45  rning Use SQLITE
9a00: 5f 44 45 46 41 55 4c 54 5f 53 59 4e 43 48 52 4f  _DEFAULT_SYNCHRO
9a10: 4e 4f 55 53 3d 33 20 69 6e 73 74 65 61 64 20 6f  NOUS=3 instead o
9a20: 66 20 53 51 4c 49 54 45 5f 45 58 54 52 41 5f 44  f SQLITE_EXTRA_D
9a30: 55 52 41 42 4c 45 0a 23 20 64 65 66 69 6e 65 20  URABLE.# define 
9a40: 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 53  SQLITE_DEFAULT_S
9a50: 59 4e 43 48 52 4f 4e 4f 55 53 20 33 0a 23 65 6e  YNCHRONOUS 3.#en
9a60: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 44 65 66 61 75  dif../*.** Defau
9a70: 6c 74 20 73 79 6e 63 68 72 6f 6e 6f 75 73 20 6c  lt synchronous l
9a80: 65 76 65 6c 73 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74  evels..**.** Not
9a90: 65 20 74 68 61 74 20 28 66 6f 72 20 68 69 73 74  e that (for hist
9aa0: 6f 72 63 61 6c 20 72 65 61 73 6f 6e 73 29 20 74  orcal reasons) t
9ab0: 68 65 20 50 41 47 45 52 5f 53 59 4e 43 48 52 4f  he PAGER_SYNCHRO
9ac0: 4e 4f 55 53 5f 2a 20 6d 61 63 72 6f 73 20 64 69  NOUS_* macros di
9ad0: 66 66 65 72 0a 2a 2a 20 66 72 6f 6d 20 74 68 65  ffer.** from the
9ae0: 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f   SQLITE_DEFAULT_
9af0: 53 59 4e 43 48 52 4f 4e 4f 55 53 20 76 61 6c 75  SYNCHRONOUS valu
9b00: 65 20 62 79 20 31 2e 0a 2a 2a 0a 2a 2a 20 20 20  e by 1..**.**   
9b10: 20 20 20 20 20 20 20 20 50 41 47 45 52 5f 53 59          PAGER_SY
9b20: 4e 43 48 52 4f 4e 4f 55 53 20 20 20 20 20 20 20  NCHRONOUS       
9b30: 44 45 46 41 55 4c 54 5f 53 59 4e 43 48 52 4f 4e  DEFAULT_SYNCHRON
9b40: 4f 55 53 0a 2a 2a 20 20 20 4f 46 46 20 20 20 20  OUS.**   OFF    
9b50: 20 20 20 20 20 20 20 31 20 20 20 20 20 20 20 20         1        
9b60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9b70: 20 30 0a 2a 2a 20 20 20 4e 4f 52 4d 41 4c 20 20   0.**   NORMAL  
9b80: 20 20 20 20 20 20 32 20 20 20 20 20 20 20 20 20        2         
9b90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9ba0: 31 0a 2a 2a 20 20 20 46 55 4c 4c 20 20 20 20 20  1.**   FULL     
9bb0: 20 20 20 20 20 33 20 20 20 20 20 20 20 20 20 20       3          
9bc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 32                 2
9bd0: 0a 2a 2a 20 20 20 45 58 54 52 41 20 20 20 20 20  .**   EXTRA     
9be0: 20 20 20 20 34 20 20 20 20 20 20 20 20 20 20 20      4           
9bf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 33 0a                3.
9c00: 2a 2a 0a 2a 2a 20 54 68 65 20 22 50 52 41 47 4d  **.** The "PRAGM
9c10: 41 20 73 79 6e 63 68 72 6f 6e 6f 75 73 22 20 73  A synchronous" s
9c20: 74 61 74 65 6d 65 6e 74 20 61 6c 73 6f 20 75 73  tatement also us
9c30: 65 73 20 74 68 65 20 7a 65 72 6f 2d 62 61 73 65  es the zero-base
9c40: 64 20 6e 75 6d 62 65 72 73 2e 0a 2a 2a 20 49 6e  d numbers..** In
9c50: 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68   other words, th
9c60: 65 20 7a 65 72 6f 2d 62 61 73 65 64 20 6e 75 6d  e zero-based num
9c70: 62 65 72 73 20 61 72 65 20 75 73 65 64 20 66 6f  bers are used fo
9c80: 72 20 61 6c 6c 20 65 78 74 65 72 6e 61 6c 20 69  r all external i
9c90: 6e 74 65 72 66 61 63 65 73 0a 2a 2a 20 61 6e 64  nterfaces.** and
9ca0: 20 74 68 65 20 6f 6e 65 2d 62 61 73 65 64 20 76   the one-based v
9cb0: 61 6c 75 65 73 20 61 72 65 20 75 73 65 64 20 69  alues are used i
9cc0: 6e 74 65 72 6e 61 6c 6c 79 2e 0a 2a 2f 0a 23 69  nternally..*/.#i
9cd0: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 44 45 46  fndef SQLITE_DEF
9ce0: 41 55 4c 54 5f 53 59 4e 43 48 52 4f 4e 4f 55 53  AULT_SYNCHRONOUS
9cf0: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
9d00: 5f 44 45 46 41 55 4c 54 5f 53 59 4e 43 48 52 4f  _DEFAULT_SYNCHRO
9d10: 4e 4f 55 53 20 32 0a 23 65 6e 64 69 66 0a 23 69  NOUS 2.#endif.#i
9d20: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 44 45 46  fndef SQLITE_DEF
9d30: 41 55 4c 54 5f 57 41 4c 5f 53 59 4e 43 48 52 4f  AULT_WAL_SYNCHRO
9d40: 4e 4f 55 53 0a 23 20 64 65 66 69 6e 65 20 53 51  NOUS.# define SQ
9d50: 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 57 41 4c  LITE_DEFAULT_WAL
9d60: 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 20 53 51 4c  _SYNCHRONOUS SQL
9d70: 49 54 45 5f 44 45 46 41 55 4c 54 5f 53 59 4e 43  ITE_DEFAULT_SYNC
9d80: 48 52 4f 4e 4f 55 53 0a 23 65 6e 64 69 66 0a 0a  HRONOUS.#endif..
9d90: 2f 2a 0a 2a 2a 20 45 61 63 68 20 64 61 74 61 62  /*.** Each datab
9da0: 61 73 65 20 66 69 6c 65 20 74 6f 20 62 65 20 61  ase file to be a
9db0: 63 63 65 73 73 65 64 20 62 79 20 74 68 65 20 73  ccessed by the s
9dc0: 79 73 74 65 6d 20 69 73 20 61 6e 20 69 6e 73 74  ystem is an inst
9dd0: 61 6e 63 65 0a 2a 2a 20 6f 66 20 74 68 65 20 66  ance.** of the f
9de0: 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75  ollowing structu
9df0: 72 65 2e 20 20 54 68 65 72 65 20 61 72 65 20 6e  re.  There are n
9e00: 6f 72 6d 61 6c 6c 79 20 74 77 6f 20 6f 66 20 74  ormally two of t
9e10: 68 65 73 65 20 73 74 72 75 63 74 75 72 65 73 0a  hese structures.
9e20: 2a 2a 20 69 6e 20 74 68 65 20 73 71 6c 69 74 65  ** in the sqlite
9e30: 2e 61 44 62 5b 5d 20 61 72 72 61 79 2e 20 20 61  .aDb[] array.  a
9e40: 44 62 5b 30 5d 20 69 73 20 74 68 65 20 6d 61 69  Db[0] is the mai
9e50: 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  n database file 
9e60: 61 6e 64 0a 2a 2a 20 61 44 62 5b 31 5d 20 69 73  and.** aDb[1] is
9e70: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69   the database fi
9e80: 6c 65 20 75 73 65 64 20 74 6f 20 68 6f 6c 64 20  le used to hold 
9e90: 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 73  temporary tables
9ea0: 2e 20 20 41 64 64 69 74 69 6f 6e 61 6c 0a 2a 2a  .  Additional.**
9eb0: 20 64 61 74 61 62 61 73 65 73 20 6d 61 79 20 62   databases may b
9ec0: 65 20 61 74 74 61 63 68 65 64 2e 0a 2a 2f 0a 73  e attached..*/.s
9ed0: 74 72 75 63 74 20 44 62 20 7b 0a 20 20 63 68 61  truct Db {.  cha
9ee0: 72 20 2a 7a 44 62 53 4e 61 6d 65 3b 20 20 20 20  r *zDbSName;    
9ef0: 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 69    /* Name of thi
9f00: 73 20 64 61 74 61 62 61 73 65 2e 20 28 73 63 68  s database. (sch
9f10: 65 6d 61 20 6e 61 6d 65 2c 20 6e 6f 74 20 66 69  ema name, not fi
9f20: 6c 65 6e 61 6d 65 29 20 2a 2f 0a 20 20 42 74 72  lename) */.  Btr
9f30: 65 65 20 2a 70 42 74 3b 20 20 20 20 20 20 20 20  ee *pBt;        
9f40: 20 20 2f 2a 20 54 68 65 20 42 2a 54 72 65 65 20    /* The B*Tree 
9f50: 73 74 72 75 63 74 75 72 65 20 66 6f 72 20 74 68  structure for th
9f60: 69 73 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  is database file
9f70: 20 2a 2f 0a 20 20 75 38 20 73 61 66 65 74 79 5f   */.  u8 safety_
9f80: 6c 65 76 65 6c 3b 20 20 20 20 20 2f 2a 20 48 6f  level;     /* Ho
9f90: 77 20 61 67 67 72 65 73 73 69 76 65 20 61 74 20  w aggressive at 
9fa0: 73 79 6e 63 69 6e 67 20 64 61 74 61 20 74 6f 20  syncing data to 
9fb0: 64 69 73 6b 20 2a 2f 0a 20 20 75 38 20 62 53 79  disk */.  u8 bSy
9fc0: 6e 63 53 65 74 3b 20 20 20 20 20 20 20 20 20 2f  ncSet;         /
9fd0: 2a 20 54 72 75 65 20 69 66 20 22 50 52 41 47 4d  * True if "PRAGM
9fe0: 41 20 73 79 6e 63 68 72 6f 6e 6f 75 73 3d 4e 22  A synchronous=N"
9ff0: 20 68 61 73 20 62 65 65 6e 20 72 75 6e 20 2a 2f   has been run */
a000: 0a 20 20 53 63 68 65 6d 61 20 2a 70 53 63 68 65  .  Schema *pSche
a010: 6d 61 3b 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74  ma;     /* Point
a020: 65 72 20 74 6f 20 64 61 74 61 62 61 73 65 20 73  er to database s
a030: 63 68 65 6d 61 20 28 70 6f 73 73 69 62 6c 79 20  chema (possibly 
a040: 73 68 61 72 65 64 29 20 2a 2f 0a 7d 3b 0a 0a 2f  shared) */.};../
a050: 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65  *.** An instance
a060: 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   of the followin
a070: 67 20 73 74 72 75 63 74 75 72 65 20 73 74 6f 72  g structure stor
a080: 65 73 20 61 20 64 61 74 61 62 61 73 65 20 73 63  es a database sc
a090: 68 65 6d 61 2e 0a 2a 2a 0a 2a 2a 20 4d 6f 73 74  hema..**.** Most
a0a0: 20 53 63 68 65 6d 61 20 6f 62 6a 65 63 74 73 20   Schema objects 
a0b0: 61 72 65 20 61 73 73 6f 63 69 61 74 65 64 20 77  are associated w
a0c0: 69 74 68 20 61 20 42 74 72 65 65 2e 20 20 54 68  ith a Btree.  Th
a0d0: 65 20 65 78 63 65 70 74 69 6f 6e 20 69 73 0a 2a  e exception is.*
a0e0: 2a 20 74 68 65 20 53 63 68 65 6d 61 20 66 6f 72  * the Schema for
a0f0: 20 74 68 65 20 54 45 4d 50 20 64 61 74 61 62 61   the TEMP databa
a100: 65 73 20 28 73 71 6c 69 74 65 33 2e 61 44 62 5b  es (sqlite3.aDb[
a110: 31 5d 29 20 77 68 69 63 68 20 69 73 20 66 72 65  1]) which is fre
a120: 65 2d 73 74 61 6e 64 69 6e 67 2e 0a 2a 2a 20 49  e-standing..** I
a130: 6e 20 73 68 61 72 65 64 20 63 61 63 68 65 20 6d  n shared cache m
a140: 6f 64 65 2c 20 61 20 73 69 6e 67 6c 65 20 53 63  ode, a single Sc
a150: 68 65 6d 61 20 6f 62 6a 65 63 74 20 63 61 6e 20  hema object can 
a160: 62 65 20 73 68 61 72 65 64 20 62 79 20 6d 75 6c  be shared by mul
a170: 74 69 70 6c 65 0a 2a 2a 20 42 74 72 65 65 73 20  tiple.** Btrees 
a180: 74 68 61 74 20 72 65 66 65 72 20 74 6f 20 74 68  that refer to th
a190: 65 20 73 61 6d 65 20 75 6e 64 65 72 6c 79 69 6e  e same underlyin
a1a0: 67 20 42 74 53 68 61 72 65 64 20 6f 62 6a 65 63  g BtShared objec
a1b0: 74 2e 0a 2a 2a 0a 2a 2a 20 53 63 68 65 6d 61 20  t..**.** Schema 
a1c0: 6f 62 6a 65 63 74 73 20 61 72 65 20 61 75 74 6f  objects are auto
a1d0: 6d 61 74 69 63 61 6c 6c 79 20 64 65 61 6c 6c 6f  matically deallo
a1e0: 63 61 74 65 64 20 77 68 65 6e 20 74 68 65 20 6c  cated when the l
a1f0: 61 73 74 20 42 74 72 65 65 20 74 68 61 74 0a 2a  ast Btree that.*
a200: 2a 20 72 65 66 65 72 65 6e 63 65 73 20 74 68 65  * references the
a210: 6d 20 69 73 20 64 65 73 74 72 6f 79 65 64 2e 20  m is destroyed. 
a220: 20 20 54 68 65 20 54 45 4d 50 20 53 63 68 65 6d    The TEMP Schem
a230: 61 20 69 73 20 6d 61 6e 75 61 6c 6c 79 20 66 72  a is manually fr
a240: 65 65 64 20 62 79 0a 2a 2a 20 73 71 6c 69 74 65  eed by.** sqlite
a250: 33 5f 63 6c 6f 73 65 28 29 2e 0a 2a 0a 2a 2a 20  3_close()..*.** 
a260: 41 20 74 68 72 65 61 64 20 6d 75 73 74 20 62 65  A thread must be
a270: 20 68 6f 6c 64 69 6e 67 20 61 20 6d 75 74 65 78   holding a mutex
a280: 20 6f 6e 20 74 68 65 20 63 6f 72 72 65 73 70 6f   on the correspo
a290: 6e 64 69 6e 67 20 42 74 72 65 65 20 69 6e 20 6f  nding Btree in o
a2a0: 72 64 65 72 0a 2a 2a 20 74 6f 20 61 63 63 65 73  rder.** to acces
a2b0: 73 20 53 63 68 65 6d 61 20 63 6f 6e 74 65 6e 74  s Schema content
a2c0: 2e 20 20 54 68 69 73 20 69 6d 70 6c 69 65 73 20  .  This implies 
a2d0: 74 68 61 74 20 74 68 65 20 74 68 72 65 61 64 20  that the thread 
a2e0: 6d 75 73 74 20 61 6c 73 6f 20 62 65 0a 2a 2a 20  must also be.** 
a2f0: 68 6f 6c 64 69 6e 67 20 61 20 6d 75 74 65 78 20  holding a mutex 
a300: 6f 6e 20 74 68 65 20 73 71 6c 69 74 65 33 20 63  on the sqlite3 c
a310: 6f 6e 6e 65 63 74 69 6f 6e 20 70 6f 69 6e 74 65  onnection pointe
a320: 72 20 74 68 61 74 20 6f 77 6e 73 20 74 68 65 20  r that owns the 
a330: 42 74 72 65 65 2e 0a 2a 2a 20 46 6f 72 20 61 20  Btree..** For a 
a340: 54 45 4d 50 20 53 63 68 65 6d 61 2c 20 6f 6e 6c  TEMP Schema, onl
a350: 79 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  y the connection
a360: 20 6d 75 74 65 78 20 69 73 20 72 65 71 75 69 72   mutex is requir
a370: 65 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53 63  ed..*/.struct Sc
a380: 68 65 6d 61 20 7b 0a 20 20 69 6e 74 20 73 63 68  hema {.  int sch
a390: 65 6d 61 5f 63 6f 6f 6b 69 65 3b 20 20 20 2f 2a  ema_cookie;   /*
a3a0: 20 44 61 74 61 62 61 73 65 20 73 63 68 65 6d 61   Database schema
a3b0: 20 76 65 72 73 69 6f 6e 20 6e 75 6d 62 65 72 20   version number 
a3c0: 66 6f 72 20 74 68 69 73 20 66 69 6c 65 20 2a 2f  for this file */
a3d0: 0a 20 20 69 6e 74 20 69 47 65 6e 65 72 61 74 69  .  int iGenerati
a3e0: 6f 6e 3b 20 20 20 20 20 2f 2a 20 47 65 6e 65 72  on;     /* Gener
a3f0: 61 74 69 6f 6e 20 63 6f 75 6e 74 65 72 2e 20 20  ation counter.  
a400: 49 6e 63 72 65 6d 65 6e 74 65 64 20 77 69 74 68  Incremented with
a410: 20 65 61 63 68 20 63 68 61 6e 67 65 20 2a 2f 0a   each change */.
a420: 20 20 48 61 73 68 20 74 62 6c 48 61 73 68 3b 20    Hash tblHash; 
a430: 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20 74 61         /* All ta
a440: 62 6c 65 73 20 69 6e 64 65 78 65 64 20 62 79 20  bles indexed by 
a450: 6e 61 6d 65 20 2a 2f 0a 20 20 48 61 73 68 20 69  name */.  Hash i
a460: 64 78 48 61 73 68 3b 20 20 20 20 20 20 20 20 2f  dxHash;        /
a470: 2a 20 41 6c 6c 20 28 6e 61 6d 65 64 29 20 69 6e  * All (named) in
a480: 64 69 63 65 73 20 69 6e 64 65 78 65 64 20 62 79  dices indexed by
a490: 20 6e 61 6d 65 20 2a 2f 0a 20 20 48 61 73 68 20   name */.  Hash 
a4a0: 74 72 69 67 48 61 73 68 3b 20 20 20 20 20 20 20  trigHash;       
a4b0: 2f 2a 20 41 6c 6c 20 74 72 69 67 67 65 72 73 20  /* All triggers 
a4c0: 69 6e 64 65 78 65 64 20 62 79 20 6e 61 6d 65 20  indexed by name 
a4d0: 2a 2f 0a 20 20 48 61 73 68 20 66 6b 65 79 48 61  */.  Hash fkeyHa
a4e0: 73 68 3b 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c  sh;       /* All
a4f0: 20 66 6f 72 65 69 67 6e 20 6b 65 79 73 20 62 79   foreign keys by
a500: 20 72 65 66 65 72 65 6e 63 65 64 20 74 61 62 6c   referenced tabl
a510: 65 20 6e 61 6d 65 20 2a 2f 0a 20 20 54 61 62 6c  e name */.  Tabl
a520: 65 20 2a 70 53 65 71 54 61 62 3b 20 20 20 20 20  e *pSeqTab;     
a530: 20 2f 2a 20 54 68 65 20 73 71 6c 69 74 65 5f 73   /* The sqlite_s
a540: 65 71 75 65 6e 63 65 20 74 61 62 6c 65 20 75 73  equence table us
a550: 65 64 20 62 79 20 41 55 54 4f 49 4e 43 52 45 4d  ed by AUTOINCREM
a560: 45 4e 54 20 2a 2f 0a 20 20 75 38 20 66 69 6c 65  ENT */.  u8 file
a570: 5f 66 6f 72 6d 61 74 3b 20 20 20 20 20 20 2f 2a  _format;      /*
a580: 20 53 63 68 65 6d 61 20 66 6f 72 6d 61 74 20 76   Schema format v
a590: 65 72 73 69 6f 6e 20 66 6f 72 20 74 68 69 73 20  ersion for this 
a5a0: 66 69 6c 65 20 2a 2f 0a 20 20 75 38 20 65 6e 63  file */.  u8 enc
a5b0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
a5c0: 2a 20 54 65 78 74 20 65 6e 63 6f 64 69 6e 67 20  * Text encoding 
a5d0: 75 73 65 64 20 62 79 20 74 68 69 73 20 64 61 74  used by this dat
a5e0: 61 62 61 73 65 20 2a 2f 0a 20 20 75 31 36 20 73  abase */.  u16 s
a5f0: 63 68 65 6d 61 46 6c 61 67 73 3b 20 20 20 20 20  chemaFlags;     
a600: 2f 2a 20 46 6c 61 67 73 20 61 73 73 6f 63 69 61  /* Flags associa
a610: 74 65 64 20 77 69 74 68 20 74 68 69 73 20 73 63  ted with this sc
a620: 68 65 6d 61 20 2a 2f 0a 20 20 69 6e 74 20 63 61  hema */.  int ca
a630: 63 68 65 5f 73 69 7a 65 3b 20 20 20 20 20 20 2f  che_size;      /
a640: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 70 61 67 65  * Number of page
a650: 73 20 74 6f 20 75 73 65 20 69 6e 20 74 68 65 20  s to use in the 
a660: 63 61 63 68 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a  cache */.};../*.
a670: 2a 2a 20 54 68 65 73 65 20 6d 61 63 72 6f 73 20  ** These macros 
a680: 63 61 6e 20 62 65 20 75 73 65 64 20 74 6f 20 74  can be used to t
a690: 65 73 74 2c 20 73 65 74 2c 20 6f 72 20 63 6c 65  est, set, or cle
a6a0: 61 72 20 62 69 74 73 20 69 6e 20 74 68 65 0a 2a  ar bits in the.*
a6b0: 2a 20 44 62 2e 70 53 63 68 65 6d 61 2d 3e 66 6c  * Db.pSchema->fl
a6c0: 61 67 73 20 66 69 65 6c 64 2e 0a 2a 2f 0a 23 64  ags field..*/.#d
a6d0: 65 66 69 6e 65 20 44 62 48 61 73 50 72 6f 70 65  efine DbHasPrope
a6e0: 72 74 79 28 44 2c 49 2c 50 29 20 20 20 20 20 28  rty(D,I,P)     (
a6f0: 28 28 44 29 2d 3e 61 44 62 5b 49 5d 2e 70 53 63  ((D)->aDb[I].pSc
a700: 68 65 6d 61 2d 3e 73 63 68 65 6d 61 46 6c 61 67  hema->schemaFlag
a710: 73 26 28 50 29 29 3d 3d 28 50 29 29 0a 23 64 65  s&(P))==(P)).#de
a720: 66 69 6e 65 20 44 62 48 61 73 41 6e 79 50 72 6f  fine DbHasAnyPro
a730: 70 65 72 74 79 28 44 2c 49 2c 50 29 20 20 28 28  perty(D,I,P)  ((
a740: 28 44 29 2d 3e 61 44 62 5b 49 5d 2e 70 53 63 68  (D)->aDb[I].pSch
a750: 65 6d 61 2d 3e 73 63 68 65 6d 61 46 6c 61 67 73  ema->schemaFlags
a760: 26 28 50 29 29 21 3d 30 29 0a 23 64 65 66 69 6e  &(P))!=0).#defin
a770: 65 20 44 62 53 65 74 50 72 6f 70 65 72 74 79 28  e DbSetProperty(
a780: 44 2c 49 2c 50 29 20 20 20 20 20 28 44 29 2d 3e  D,I,P)     (D)->
a790: 61 44 62 5b 49 5d 2e 70 53 63 68 65 6d 61 2d 3e  aDb[I].pSchema->
a7a0: 73 63 68 65 6d 61 46 6c 61 67 73 7c 3d 28 50 29  schemaFlags|=(P)
a7b0: 0a 23 64 65 66 69 6e 65 20 44 62 43 6c 65 61 72  .#define DbClear
a7c0: 50 72 6f 70 65 72 74 79 28 44 2c 49 2c 50 29 20  Property(D,I,P) 
a7d0: 20 20 28 44 29 2d 3e 61 44 62 5b 49 5d 2e 70 53    (D)->aDb[I].pS
a7e0: 63 68 65 6d 61 2d 3e 73 63 68 65 6d 61 46 6c 61  chema->schemaFla
a7f0: 67 73 26 3d 7e 28 50 29 0a 0a 2f 2a 0a 2a 2a 20  gs&=~(P)../*.** 
a800: 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20 66  Allowed values f
a810: 6f 72 20 74 68 65 20 44 42 2e 70 53 63 68 65 6d  or the DB.pSchem
a820: 61 2d 3e 66 6c 61 67 73 20 66 69 65 6c 64 2e 0a  a->flags field..
a830: 2a 2a 0a 2a 2a 20 54 68 65 20 44 42 5f 53 63 68  **.** The DB_Sch
a840: 65 6d 61 4c 6f 61 64 65 64 20 66 6c 61 67 20 69  emaLoaded flag i
a850: 73 20 73 65 74 20 61 66 74 65 72 20 74 68 65 20  s set after the 
a860: 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 20  database schema 
a870: 68 61 73 20 62 65 65 6e 0a 2a 2a 20 72 65 61 64  has been.** read
a880: 20 69 6e 74 6f 20 69 6e 74 65 72 6e 61 6c 20 68   into internal h
a890: 61 73 68 20 74 61 62 6c 65 73 2e 0a 2a 2a 0a 2a  ash tables..**.*
a8a0: 2a 20 44 42 5f 55 6e 72 65 73 65 74 56 69 65 77  * DB_UnresetView
a8b0: 73 20 6d 65 61 6e 73 20 74 68 61 74 20 6f 6e 65  s means that one
a8c0: 20 6f 72 20 6d 6f 72 65 20 76 69 65 77 73 20 68   or more views h
a8d0: 61 76 65 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73  ave column names
a8e0: 20 74 68 61 74 0a 2a 2a 20 68 61 76 65 20 62 65   that.** have be
a8f0: 65 6e 20 66 69 6c 6c 65 64 20 6f 75 74 2e 20 20  en filled out.  
a900: 49 66 20 74 68 65 20 73 63 68 65 6d 61 20 63 68  If the schema ch
a910: 61 6e 67 65 73 2c 20 74 68 65 73 65 20 63 6f 6c  anges, these col
a920: 75 6d 6e 20 6e 61 6d 65 73 20 6d 69 67 68 74 0a  umn names might.
a930: 2a 2a 20 63 68 61 6e 67 65 73 20 61 6e 64 20 73  ** changes and s
a940: 6f 20 74 68 65 20 76 69 65 77 20 77 69 6c 6c 20  o the view will 
a950: 6e 65 65 64 20 74 6f 20 62 65 20 72 65 73 65 74  need to be reset
a960: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 44 42 5f  ..*/.#define DB_
a970: 53 63 68 65 6d 61 4c 6f 61 64 65 64 20 20 20 20  SchemaLoaded    
a980: 30 78 30 30 30 31 20 20 2f 2a 20 54 68 65 20 73  0x0001  /* The s
a990: 63 68 65 6d 61 20 68 61 73 20 62 65 65 6e 20 6c  chema has been l
a9a0: 6f 61 64 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65  oaded */.#define
a9b0: 20 44 42 5f 55 6e 72 65 73 65 74 56 69 65 77 73   DB_UnresetViews
a9c0: 20 20 20 20 30 78 30 30 30 32 20 20 2f 2a 20 53      0x0002  /* S
a9d0: 6f 6d 65 20 76 69 65 77 73 20 68 61 76 65 20 64  ome views have d
a9e0: 65 66 69 6e 65 64 20 63 6f 6c 75 6d 6e 20 6e 61  efined column na
a9f0: 6d 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 44  mes */.#define D
aa00: 42 5f 45 6d 70 74 79 20 20 20 20 20 20 20 20 20  B_Empty         
aa10: 20 20 30 78 30 30 30 34 20 20 2f 2a 20 54 68 65    0x0004  /* The
aa20: 20 66 69 6c 65 20 69 73 20 65 6d 70 74 79 20 28   file is empty (
aa30: 6c 65 6e 67 74 68 20 30 20 62 79 74 65 73 29 20  length 0 bytes) 
aa40: 2a 2f 0a 23 64 65 66 69 6e 65 20 44 42 5f 52 65  */.#define DB_Re
aa50: 73 65 74 57 61 6e 74 65 64 20 20 20 20 20 30 78  setWanted     0x
aa60: 30 30 30 38 20 20 2f 2a 20 52 65 73 65 74 20 74  0008  /* Reset t
aa70: 68 65 20 73 63 68 65 6d 61 20 77 68 65 6e 20 6e  he schema when n
aa80: 53 63 68 65 6d 61 4c 6f 63 6b 3d 3d 30 20 2a 2f  SchemaLock==0 */
aa90: 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6e 75 6d 62  ../*.** The numb
aaa0: 65 72 20 6f 66 20 64 69 66 66 65 72 65 6e 74 20  er of different 
aab0: 6b 69 6e 64 73 20 6f 66 20 74 68 69 6e 67 73 20  kinds of things 
aac0: 74 68 61 74 20 63 61 6e 20 62 65 20 6c 69 6d 69  that can be limi
aad0: 74 65 64 0a 2a 2a 20 75 73 69 6e 67 20 74 68 65  ted.** using the
aae0: 20 73 71 6c 69 74 65 33 5f 6c 69 6d 69 74 28 29   sqlite3_limit()
aaf0: 20 69 6e 74 65 72 66 61 63 65 2e 0a 2a 2f 0a 23   interface..*/.#
ab00: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e 5f  define SQLITE_N_
ab10: 4c 49 4d 49 54 20 28 53 51 4c 49 54 45 5f 4c 49  LIMIT (SQLITE_LI
ab20: 4d 49 54 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41  MIT_WORKER_THREA
ab30: 44 53 2b 31 29 0a 0a 2f 2a 0a 2a 2a 20 4c 6f 6f  DS+1)../*.** Loo
ab40: 6b 61 73 69 64 65 20 6d 61 6c 6c 6f 63 20 69 73  kaside malloc is
ab50: 20 61 20 73 65 74 20 6f 66 20 66 69 78 65 64 2d   a set of fixed-
ab60: 73 69 7a 65 20 62 75 66 66 65 72 73 20 74 68 61  size buffers tha
ab70: 74 20 63 61 6e 20 62 65 20 75 73 65 64 0a 2a 2a  t can be used.**
ab80: 20 74 6f 20 73 61 74 69 73 66 79 20 73 6d 61 6c   to satisfy smal
ab90: 6c 20 74 72 61 6e 73 69 65 6e 74 20 6d 65 6d 6f  l transient memo
aba0: 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 72 65  ry allocation re
abb0: 71 75 65 73 74 73 20 66 6f 72 20 6f 62 6a 65 63  quests for objec
abc0: 74 73 0a 2a 2a 20 61 73 73 6f 63 69 61 74 65 64  ts.** associated
abd0: 20 77 69 74 68 20 61 20 70 61 72 74 69 63 75 6c   with a particul
abe0: 61 72 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e  ar database conn
abf0: 65 63 74 69 6f 6e 2e 20 20 54 68 65 20 75 73 65  ection.  The use
ac00: 20 6f 66 0a 2a 2a 20 6c 6f 6f 6b 61 73 69 64 65   of.** lookaside
ac10: 20 6d 61 6c 6c 6f 63 20 70 72 6f 76 69 64 65 73   malloc provides
ac20: 20 61 20 73 69 67 6e 69 66 69 63 61 6e 74 20 70   a significant p
ac30: 65 72 66 6f 72 6d 61 6e 63 65 20 65 6e 68 61 6e  erformance enhan
ac40: 63 65 6d 65 6e 74 0a 2a 2a 20 28 61 70 70 72 6f  cement.** (appro
ac50: 78 20 31 30 25 29 20 62 79 20 61 76 6f 69 64 69  x 10%) by avoidi
ac60: 6e 67 20 6e 75 6d 65 72 6f 75 73 20 6d 61 6c 6c  ng numerous mall
ac70: 6f 63 2f 66 72 65 65 20 72 65 71 75 65 73 74 73  oc/free requests
ac80: 20 77 68 69 6c 65 20 70 61 72 73 69 6e 67 0a 2a   while parsing.*
ac90: 2a 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73  * SQL statements
aca0: 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 4c 6f 6f 6b  ..**.** The Look
acb0: 61 73 69 64 65 20 73 74 72 75 63 74 75 72 65 20  aside structure 
acc0: 68 6f 6c 64 73 20 63 6f 6e 66 69 67 75 72 61 74  holds configurat
acd0: 69 6f 6e 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  ion information 
ace0: 61 62 6f 75 74 20 74 68 65 0a 2a 2a 20 6c 6f 6f  about the.** loo
acf0: 6b 61 73 69 64 65 20 6d 61 6c 6c 6f 63 20 73 75  kaside malloc su
ad00: 62 73 79 73 74 65 6d 2e 20 20 45 61 63 68 20 61  bsystem.  Each a
ad10: 76 61 69 6c 61 62 6c 65 20 6d 65 6d 6f 72 79 20  vailable memory 
ad20: 61 6c 6c 6f 63 61 74 69 6f 6e 20 69 6e 0a 2a 2a  allocation in.**
ad30: 20 74 68 65 20 6c 6f 6f 6b 61 73 69 64 65 20 73   the lookaside s
ad40: 75 62 73 79 73 74 65 6d 20 69 73 20 73 74 6f 72  ubsystem is stor
ad50: 65 64 20 6f 6e 20 61 20 6c 69 6e 6b 65 64 20 6c  ed on a linked l
ad60: 69 73 74 20 6f 66 20 4c 6f 6f 6b 61 73 69 64 65  ist of Lookaside
ad70: 53 6c 6f 74 0a 2a 2a 20 6f 62 6a 65 63 74 73 2e  Slot.** objects.
ad80: 0a 2a 2a 0a 2a 2a 20 4c 6f 6f 6b 61 73 69 64 65  .**.** Lookaside
ad90: 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 61 72 65   allocations are
ada0: 20 6f 6e 6c 79 20 61 6c 6c 6f 77 65 64 20 66 6f   only allowed fo
adb0: 72 20 6f 62 6a 65 63 74 73 20 74 68 61 74 20 61  r objects that a
adc0: 72 65 20 61 73 73 6f 63 69 61 74 65 64 0a 2a 2a  re associated.**
add0: 20 77 69 74 68 20 61 20 70 61 72 74 69 63 75 6c   with a particul
ade0: 61 72 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e  ar database conn
adf0: 65 63 74 69 6f 6e 2e 20 20 48 65 6e 63 65 2c 20  ection.  Hence, 
ae00: 73 63 68 65 6d 61 20 69 6e 66 6f 72 6d 61 74 69  schema informati
ae10: 6f 6e 20 63 61 6e 6e 6f 74 0a 2a 2a 20 62 65 20  on cannot.** be 
ae20: 73 74 6f 72 65 64 20 69 6e 20 6c 6f 6f 6b 61 73  stored in lookas
ae30: 69 64 65 20 62 65 63 61 75 73 65 20 69 6e 20 73  ide because in s
ae40: 68 61 72 65 64 20 63 61 63 68 65 20 6d 6f 64 65  hared cache mode
ae50: 20 74 68 65 20 73 63 68 65 6d 61 20 69 6e 66 6f   the schema info
ae60: 72 6d 61 74 69 6f 6e 0a 2a 2a 20 69 73 20 73 68  rmation.** is sh
ae70: 61 72 65 64 20 62 79 20 6d 75 6c 74 69 70 6c 65  ared by multiple
ae80: 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63   database connec
ae90: 74 69 6f 6e 73 2e 20 20 54 68 65 72 65 66 6f 72  tions.  Therefor
aea0: 65 2c 20 77 68 69 6c 65 20 70 61 72 73 69 6e 67  e, while parsing
aeb0: 0a 2a 2a 20 73 63 68 65 6d 61 20 69 6e 66 6f 72  .** schema infor
aec0: 6d 61 74 69 6f 6e 2c 20 74 68 65 20 4c 6f 6f 6b  mation, the Look
aed0: 61 73 69 64 65 2e 62 45 6e 61 62 6c 65 64 20 66  aside.bEnabled f
aee0: 6c 61 67 20 69 73 20 63 6c 65 61 72 65 64 20 73  lag is cleared s
aef0: 6f 20 74 68 61 74 0a 2a 2a 20 6c 6f 6f 6b 61 73  o that.** lookas
af00: 69 64 65 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20  ide allocations 
af10: 61 72 65 20 6e 6f 74 20 75 73 65 64 20 74 6f 20  are not used to 
af20: 63 6f 6e 73 74 72 75 63 74 20 74 68 65 20 73 63  construct the sc
af30: 68 65 6d 61 20 6f 62 6a 65 63 74 73 2e 0a 2a 2f  hema objects..*/
af40: 0a 73 74 72 75 63 74 20 4c 6f 6f 6b 61 73 69 64  .struct Lookasid
af50: 65 20 7b 0a 20 20 75 33 32 20 62 44 69 73 61 62  e {.  u32 bDisab
af60: 6c 65 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  le;           /*
af70: 20 4f 6e 6c 79 20 6f 70 65 72 61 74 65 20 74 68   Only operate th
af80: 65 20 6c 6f 6f 6b 61 73 69 64 65 20 77 68 65 6e  e lookaside when
af90: 20 7a 65 72 6f 20 2a 2f 0a 20 20 75 31 36 20 73   zero */.  u16 s
afa0: 7a 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  z;              
afb0: 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20 65 61     /* Size of ea
afc0: 63 68 20 62 75 66 66 65 72 20 69 6e 20 62 79 74  ch buffer in byt
afd0: 65 73 20 2a 2f 0a 20 20 75 38 20 62 4d 61 6c 6c  es */.  u8 bMall
afe0: 6f 63 65 64 3b 20 20 20 20 20 20 20 20 20 20 20  oced;           
aff0: 2f 2a 20 54 72 75 65 20 69 66 20 70 53 74 61 72  /* True if pStar
b000: 74 20 6f 62 74 61 69 6e 65 64 20 66 72 6f 6d 20  t obtained from 
b010: 73 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63 28 29  sqlite3_malloc()
b020: 20 2a 2f 0a 20 20 75 33 32 20 6e 53 6c 6f 74 3b   */.  u32 nSlot;
b030: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
b040: 20 4e 75 6d 62 65 72 20 6f 66 20 6c 6f 6f 6b 61   Number of looka
b050: 73 69 64 65 20 73 6c 6f 74 73 20 61 6c 6c 6f 63  side slots alloc
b060: 61 74 65 64 20 2a 2f 0a 20 20 75 33 32 20 61 6e  ated */.  u32 an
b070: 53 74 61 74 5b 33 5d 3b 20 20 20 20 20 20 20 20  Stat[3];        
b080: 20 20 2f 2a 20 30 3a 20 68 69 74 73 2e 20 20 31    /* 0: hits.  1
b090: 3a 20 73 69 7a 65 20 6d 69 73 73 65 73 2e 20 20  : size misses.  
b0a0: 32 3a 20 66 75 6c 6c 20 6d 69 73 73 65 73 20 2a  2: full misses *
b0b0: 2f 0a 20 20 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f  /.  LookasideSlo
b0c0: 74 20 2a 70 49 6e 69 74 3b 20 20 20 2f 2a 20 4c  t *pInit;   /* L
b0d0: 69 73 74 20 6f 66 20 62 75 66 66 65 72 73 20 6e  ist of buffers n
b0e0: 6f 74 20 70 72 65 76 69 6f 75 73 6c 79 20 75 73  ot previously us
b0f0: 65 64 20 2a 2f 0a 20 20 4c 6f 6f 6b 61 73 69 64  ed */.  Lookasid
b100: 65 53 6c 6f 74 20 2a 70 46 72 65 65 3b 20 20 20  eSlot *pFree;   
b110: 2f 2a 20 4c 69 73 74 20 6f 66 20 61 76 61 69 6c  /* List of avail
b120: 61 62 6c 65 20 62 75 66 66 65 72 73 20 2a 2f 0a  able buffers */.
b130: 20 20 76 6f 69 64 20 2a 70 53 74 61 72 74 3b 20    void *pStart; 
b140: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 69 72            /* Fir
b150: 73 74 20 62 79 74 65 20 6f 66 20 61 76 61 69 6c  st byte of avail
b160: 61 62 6c 65 20 6d 65 6d 6f 72 79 20 73 70 61 63  able memory spac
b170: 65 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 45 6e  e */.  void *pEn
b180: 64 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  d;             /
b190: 2a 20 46 69 72 73 74 20 62 79 74 65 20 70 61 73  * First byte pas
b1a0: 74 20 65 6e 64 20 6f 66 20 61 76 61 69 6c 61 62  t end of availab
b1b0: 6c 65 20 73 70 61 63 65 20 2a 2f 0a 7d 3b 0a 73  le space */.};.s
b1c0: 74 72 75 63 74 20 4c 6f 6f 6b 61 73 69 64 65 53  truct LookasideS
b1d0: 6c 6f 74 20 7b 0a 20 20 4c 6f 6f 6b 61 73 69 64  lot {.  Lookasid
b1e0: 65 53 6c 6f 74 20 2a 70 4e 65 78 74 3b 20 20 20  eSlot *pNext;   
b1f0: 20 2f 2a 20 4e 65 78 74 20 62 75 66 66 65 72 20   /* Next buffer 
b200: 69 6e 20 74 68 65 20 6c 69 73 74 20 6f 66 20 66  in the list of f
b210: 72 65 65 20 62 75 66 66 65 72 73 20 2a 2f 0a 7d  ree buffers */.}
b220: 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20 68 61 73 68 20  ;../*.** A hash 
b230: 74 61 62 6c 65 20 66 6f 72 20 62 75 69 6c 74 2d  table for built-
b240: 69 6e 20 66 75 6e 63 74 69 6f 6e 20 64 65 66 69  in function defi
b250: 6e 69 74 69 6f 6e 73 2e 20 20 28 41 70 70 6c 69  nitions.  (Appli
b260: 63 61 74 69 6f 6e 2d 64 65 66 69 6e 65 64 0a 2a  cation-defined.*
b270: 2a 20 66 75 6e 63 74 69 6f 6e 73 20 75 73 65 20  * functions use 
b280: 61 20 72 65 67 75 6c 61 72 20 74 61 62 6c 65 20  a regular table 
b290: 74 61 62 6c 65 20 66 72 6f 6d 20 68 61 73 68 2e  table from hash.
b2a0: 68 2e 29 0a 2a 2a 0a 2a 2a 20 48 61 73 68 20 65  h.).**.** Hash e
b2b0: 61 63 68 20 46 75 6e 63 44 65 66 20 73 74 72 75  ach FuncDef stru
b2c0: 63 74 75 72 65 20 69 6e 74 6f 20 6f 6e 65 20 6f  cture into one o
b2d0: 66 20 74 68 65 20 46 75 6e 63 44 65 66 48 61 73  f the FuncDefHas
b2e0: 68 2e 61 5b 5d 20 73 6c 6f 74 73 2e 0a 2a 2a 20  h.a[] slots..** 
b2f0: 43 6f 6c 6c 69 73 69 6f 6e 73 20 61 72 65 20 6f  Collisions are o
b300: 6e 20 74 68 65 20 46 75 6e 63 44 65 66 2e 75 2e  n the FuncDef.u.
b310: 70 48 61 73 68 20 63 68 61 69 6e 2e 0a 2a 2f 0a  pHash chain..*/.
b320: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46  #define SQLITE_F
b330: 55 4e 43 5f 48 41 53 48 5f 53 5a 20 32 33 0a 73  UNC_HASH_SZ 23.s
b340: 74 72 75 63 74 20 46 75 6e 63 44 65 66 48 61 73  truct FuncDefHas
b350: 68 20 7b 0a 20 20 46 75 6e 63 44 65 66 20 2a 61  h {.  FuncDef *a
b360: 5b 53 51 4c 49 54 45 5f 46 55 4e 43 5f 48 41 53  [SQLITE_FUNC_HAS
b370: 48 5f 53 5a 5d 3b 20 20 20 20 20 20 20 2f 2a 20  H_SZ];       /* 
b380: 48 61 73 68 20 74 61 62 6c 65 20 66 6f 72 20 66  Hash table for f
b390: 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a 7d 3b 0a 0a  unctions */.};..
b3a0: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 55 53  #ifdef SQLITE_US
b3b0: 45 52 5f 41 55 54 48 45 4e 54 49 43 41 54 49 4f  ER_AUTHENTICATIO
b3c0: 4e 0a 2f 2a 0a 2a 2a 20 49 6e 66 6f 72 6d 61 74  N./*.** Informat
b3d0: 69 6f 6e 20 68 65 6c 64 20 69 6e 20 74 68 65 20  ion held in the 
b3e0: 22 73 71 6c 69 74 65 33 22 20 64 61 74 61 62 61  "sqlite3" databa
b3f0: 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 6f 62  se connection ob
b400: 6a 65 63 74 20 61 6e 64 20 75 73 65 64 0a 2a 2a  ject and used.**
b410: 20 74 6f 20 6d 61 6e 61 67 65 20 75 73 65 72 20   to manage user 
b420: 61 75 74 68 65 6e 74 69 63 61 74 69 6f 6e 2e 0a  authentication..
b430: 2a 2f 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  */.typedef struc
b440: 74 20 73 71 6c 69 74 65 33 5f 75 73 65 72 61 75  t sqlite3_userau
b450: 74 68 20 73 71 6c 69 74 65 33 5f 75 73 65 72 61  th sqlite3_usera
b460: 75 74 68 3b 0a 73 74 72 75 63 74 20 73 71 6c 69  uth;.struct sqli
b470: 74 65 33 5f 75 73 65 72 61 75 74 68 20 7b 0a 20  te3_userauth {. 
b480: 20 75 38 20 61 75 74 68 4c 65 76 65 6c 3b 20 20   u8 authLevel;  
b490: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
b4a0: 2a 20 43 75 72 72 65 6e 74 20 61 75 74 68 65 6e  * Current authen
b4b0: 74 69 63 61 74 69 6f 6e 20 6c 65 76 65 6c 20 2a  tication level *
b4c0: 2f 0a 20 20 69 6e 74 20 6e 41 75 74 68 50 57 3b  /.  int nAuthPW;
b4d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b4e0: 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20 74 68 65    /* Size of the
b4f0: 20 7a 41 75 74 68 50 57 20 69 6e 20 62 79 74 65   zAuthPW in byte
b500: 73 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 41 75  s */.  char *zAu
b510: 74 68 50 57 3b 20 20 20 20 20 20 20 20 20 20 20  thPW;           
b520: 20 20 20 20 20 2f 2a 20 50 61 73 73 77 6f 72 64       /* Password
b530: 20 75 73 65 64 20 74 6f 20 61 75 74 68 65 6e 74   used to authent
b540: 69 63 61 74 65 20 2a 2f 0a 20 20 63 68 61 72 20  icate */.  char 
b550: 2a 7a 41 75 74 68 55 73 65 72 3b 20 20 20 20 20  *zAuthUser;     
b560: 20 20 20 20 20 20 20 20 20 2f 2a 20 55 73 65 72           /* User
b570: 20 6e 61 6d 65 20 75 73 65 64 20 74 6f 20 61 75   name used to au
b580: 74 68 65 6e 74 69 63 61 74 65 20 2a 2f 0a 7d 3b  thenticate */.};
b590: 0a 0a 2f 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c  ../* Allowed val
b5a0: 75 65 73 20 66 6f 72 20 73 71 6c 69 74 65 33 5f  ues for sqlite3_
b5b0: 75 73 65 72 61 75 74 68 2e 61 75 74 68 4c 65 76  userauth.authLev
b5c0: 65 6c 20 2a 2f 0a 23 64 65 66 69 6e 65 20 55 41  el */.#define UA
b5d0: 55 54 48 5f 55 6e 6b 6e 6f 77 6e 20 20 20 20 20  UTH_Unknown     
b5e0: 30 20 20 20 20 20 2f 2a 20 41 75 74 68 65 6e 74  0     /* Authent
b5f0: 69 63 61 74 69 6f 6e 20 6e 6f 74 20 79 65 74 20  ication not yet 
b600: 63 68 65 63 6b 65 64 20 2a 2f 0a 23 64 65 66 69  checked */.#defi
b610: 6e 65 20 55 41 55 54 48 5f 46 61 69 6c 20 20 20  ne UAUTH_Fail   
b620: 20 20 20 20 20 31 20 20 20 20 20 2f 2a 20 55 73       1     /* Us
b630: 65 72 20 61 75 74 68 65 6e 74 69 63 61 74 69 6f  er authenticatio
b640: 6e 20 66 61 69 6c 65 64 20 2a 2f 0a 23 64 65 66  n failed */.#def
b650: 69 6e 65 20 55 41 55 54 48 5f 55 73 65 72 20 20  ine UAUTH_User  
b660: 20 20 20 20 20 20 32 20 20 20 20 20 2f 2a 20 41        2     /* A
b670: 75 74 68 65 6e 74 69 63 61 74 65 64 20 61 73 20  uthenticated as 
b680: 61 20 6e 6f 72 6d 61 6c 20 75 73 65 72 20 2a 2f  a normal user */
b690: 0a 23 64 65 66 69 6e 65 20 55 41 55 54 48 5f 41  .#define UAUTH_A
b6a0: 64 6d 69 6e 20 20 20 20 20 20 20 33 20 20 20 20  dmin       3    
b6b0: 20 2f 2a 20 41 75 74 68 65 6e 74 69 63 61 74 65   /* Authenticate
b6c0: 64 20 61 73 20 61 6e 20 61 64 6d 69 6e 69 73 74  d as an administ
b6d0: 72 61 74 6f 72 20 2a 2f 0a 0a 2f 2a 20 46 75 6e  rator */../* Fun
b6e0: 63 74 69 6f 6e 73 20 75 73 65 64 20 6f 6e 6c 79  ctions used only
b6f0: 20 62 79 20 75 73 65 72 20 61 75 74 68 6f 72 69   by user authori
b700: 7a 61 74 69 6f 6e 20 6c 6f 67 69 63 20 2a 2f 0a  zation logic */.
b710: 69 6e 74 20 73 71 6c 69 74 65 33 55 73 65 72 41  int sqlite3UserA
b720: 75 74 68 54 61 62 6c 65 28 63 6f 6e 73 74 20 63  uthTable(const c
b730: 68 61 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  har*);.int sqlit
b740: 65 33 55 73 65 72 41 75 74 68 43 68 65 63 6b 4c  e3UserAuthCheckL
b750: 6f 67 69 6e 28 73 71 6c 69 74 65 33 2a 2c 63 6f  ogin(sqlite3*,co
b760: 6e 73 74 20 63 68 61 72 2a 2c 75 38 2a 29 3b 0a  nst char*,u8*);.
b770: 76 6f 69 64 20 73 71 6c 69 74 65 33 55 73 65 72  void sqlite3User
b780: 41 75 74 68 49 6e 69 74 28 73 71 6c 69 74 65 33  AuthInit(sqlite3
b790: 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
b7a0: 43 72 79 70 74 46 75 6e 63 28 73 71 6c 69 74 65  CryptFunc(sqlite
b7b0: 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73  3_context*,int,s
b7c0: 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2a 29 3b  qlite3_value**);
b7d0: 0a 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  ..#endif /* SQLI
b7e0: 54 45 5f 55 53 45 52 5f 41 55 54 48 45 4e 54 49  TE_USER_AUTHENTI
b7f0: 43 41 54 49 4f 4e 20 2a 2f 0a 0a 2f 2a 0a 2a 2a  CATION */../*.**
b800: 20 74 79 70 65 64 65 66 20 66 6f 72 20 74 68 65   typedef for the
b810: 20 61 75 74 68 6f 72 69 7a 61 74 69 6f 6e 20 63   authorization c
b820: 61 6c 6c 62 61 63 6b 20 66 75 6e 63 74 69 6f 6e  allback function
b830: 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49  ..*/.#ifdef SQLI
b840: 54 45 5f 55 53 45 52 5f 41 55 54 48 45 4e 54 49  TE_USER_AUTHENTI
b850: 43 41 54 49 4f 4e 0a 20 20 74 79 70 65 64 65 66  CATION.  typedef
b860: 20 69 6e 74 20 28 2a 73 71 6c 69 74 65 33 5f 78   int (*sqlite3_x
b870: 61 75 74 68 29 28 76 6f 69 64 2a 2c 69 6e 74 2c  auth)(void*,int,
b880: 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73  const char*,cons
b890: 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68  t char*,const ch
b8a0: 61 72 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20  ar*,.           
b8b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b8c0: 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c      const char*,
b8d0: 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 23   const char*);.#
b8e0: 65 6c 73 65 0a 20 20 74 79 70 65 64 65 66 20 69  else.  typedef i
b8f0: 6e 74 20 28 2a 73 71 6c 69 74 65 33 5f 78 61 75  nt (*sqlite3_xau
b900: 74 68 29 28 76 6f 69 64 2a 2c 69 6e 74 2c 63 6f  th)(void*,int,co
b910: 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20  nst char*,const 
b920: 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72  char*,const char
b930: 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  *,.             
b940: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b950: 20 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a    const char*);.
b960: 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66 20  #endif..#ifndef 
b970: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 44 45 50 52  SQLITE_OMIT_DEPR
b980: 45 43 41 54 45 44 0a 2f 2a 20 54 68 69 73 20 69  ECATED./* This i
b990: 73 20 61 6e 20 65 78 74 72 61 20 53 51 4c 49 54  s an extra SQLIT
b9a0: 45 5f 54 52 41 43 45 20 6d 61 63 72 6f 20 74 68  E_TRACE macro th
b9b0: 61 74 20 69 6e 64 69 63 61 74 65 73 20 22 6c 65  at indicates "le
b9c0: 67 61 63 79 22 20 74 72 61 63 69 6e 67 0a 2a 2a  gacy" tracing.**
b9d0: 20 69 6e 20 74 68 65 20 73 74 79 6c 65 20 6f 66   in the style of
b9e0: 20 73 71 6c 69 74 65 33 5f 74 72 61 63 65 28 29   sqlite3_trace()
b9f0: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  .*/.#define SQLI
ba00: 54 45 5f 54 52 41 43 45 5f 4c 45 47 41 43 59 20  TE_TRACE_LEGACY 
ba10: 20 30 78 38 30 0a 23 65 6c 73 65 0a 23 64 65 66   0x80.#else.#def
ba20: 69 6e 65 20 53 51 4c 49 54 45 5f 54 52 41 43 45  ine SQLITE_TRACE
ba30: 5f 4c 45 47 41 43 59 20 20 30 0a 23 65 6e 64 69  _LEGACY  0.#endi
ba40: 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54  f /* SQLITE_OMIT
ba50: 5f 44 45 50 52 45 43 41 54 45 44 20 2a 2f 0a 0a  _DEPRECATED */..
ba60: 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 64 61 74 61  ./*.** Each data
ba70: 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20  base connection 
ba80: 69 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f  is an instance o
ba90: 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  f the following 
baa0: 73 74 72 75 63 74 75 72 65 2e 0a 2a 2f 0a 73 74  structure..*/.st
bab0: 72 75 63 74 20 73 71 6c 69 74 65 33 20 7b 0a 20  ruct sqlite3 {. 
bac0: 20 73 71 6c 69 74 65 33 5f 76 66 73 20 2a 70 56   sqlite3_vfs *pV
bad0: 66 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  fs;            /
bae0: 2a 20 4f 53 20 49 6e 74 65 72 66 61 63 65 20 2a  * OS Interface *
baf0: 2f 0a 20 20 73 74 72 75 63 74 20 56 64 62 65 20  /.  struct Vdbe 
bb00: 2a 70 56 64 62 65 3b 20 20 20 20 20 20 20 20 20  *pVdbe;         
bb10: 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 61 63 74    /* List of act
bb20: 69 76 65 20 76 69 72 74 75 61 6c 20 6d 61 63 68  ive virtual mach
bb30: 69 6e 65 73 20 2a 2f 0a 20 20 43 6f 6c 6c 53 65  ines */.  CollSe
bb40: 71 20 2a 70 44 66 6c 74 43 6f 6c 6c 3b 20 20 20  q *pDfltColl;   
bb50: 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 64          /* The d
bb60: 65 66 61 75 6c 74 20 63 6f 6c 6c 61 74 69 6e 67  efault collating
bb70: 20 73 65 71 75 65 6e 63 65 20 28 42 49 4e 41 52   sequence (BINAR
bb80: 59 29 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f  Y) */.  sqlite3_
bb90: 6d 75 74 65 78 20 2a 6d 75 74 65 78 3b 20 20 20  mutex *mutex;   
bba0: 20 20 20 20 20 20 2f 2a 20 43 6f 6e 6e 65 63 74        /* Connect
bbb0: 69 6f 6e 20 6d 75 74 65 78 20 2a 2f 0a 20 20 44  ion mutex */.  D
bbc0: 62 20 2a 61 44 62 3b 20 20 20 20 20 20 20 20 20  b *aDb;         
bbd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
bbe0: 41 6c 6c 20 62 61 63 6b 65 6e 64 73 20 2a 2f 0a  All backends */.
bbf0: 20 20 69 6e 74 20 6e 44 62 3b 20 20 20 20 20 20    int nDb;      
bc00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bc10: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 61 63  /* Number of bac
bc20: 6b 65 6e 64 73 20 63 75 72 72 65 6e 74 6c 79 20  kends currently 
bc30: 69 6e 20 75 73 65 20 2a 2f 0a 20 20 75 33 32 20  in use */.  u32 
bc40: 6d 44 62 46 6c 61 67 73 3b 20 20 20 20 20 20 20  mDbFlags;       
bc50: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 66 6c 61            /* fla
bc60: 67 73 20 72 65 63 6f 72 64 69 6e 67 20 69 6e 74  gs recording int
bc70: 65 72 6e 61 6c 20 73 74 61 74 65 20 2a 2f 0a 20  ernal state */. 
bc80: 20 75 33 32 20 66 6c 61 67 73 3b 20 20 20 20 20   u32 flags;     
bc90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
bca0: 2a 20 66 6c 61 67 73 20 73 65 74 74 61 62 6c 65  * flags settable
bcb0: 20 62 79 20 70 72 61 67 6d 61 73 2e 20 53 65 65   by pragmas. See
bcc0: 20 62 65 6c 6f 77 20 2a 2f 0a 20 20 69 36 34 20   below */.  i64 
bcd0: 6c 61 73 74 52 6f 77 69 64 3b 20 20 20 20 20 20  lastRowid;      
bce0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 4f 57            /* ROW
bcf0: 49 44 20 6f 66 20 6d 6f 73 74 20 72 65 63 65 6e  ID of most recen
bd00: 74 20 69 6e 73 65 72 74 20 28 73 65 65 20 61 62  t insert (see ab
bd10: 6f 76 65 29 20 2a 2f 0a 20 20 69 36 34 20 73 7a  ove) */.  i64 sz
bd20: 4d 6d 61 70 3b 20 20 20 20 20 20 20 20 20 20 20  Mmap;           
bd30: 20 20 20 20 20 20 20 20 2f 2a 20 44 65 66 61 75          /* Defau
bd40: 6c 74 20 6d 6d 61 70 5f 73 69 7a 65 20 73 65 74  lt mmap_size set
bd50: 74 69 6e 67 20 2a 2f 0a 20 20 75 33 32 20 6e 53  ting */.  u32 nS
bd60: 63 68 65 6d 61 4c 6f 63 6b 3b 20 20 20 20 20 20  chemaLock;      
bd70: 20 20 20 20 20 20 20 20 2f 2a 20 44 6f 20 6e 6f          /* Do no
bd80: 74 20 72 65 73 65 74 20 74 68 65 20 73 63 68 65  t reset the sche
bd90: 6d 61 20 77 68 65 6e 20 6e 6f 6e 2d 7a 65 72 6f  ma when non-zero
bda0: 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 69   */.  unsigned i
bdb0: 6e 74 20 6f 70 65 6e 46 6c 61 67 73 3b 20 20 20  nt openFlags;   
bdc0: 20 20 20 20 2f 2a 20 46 6c 61 67 73 20 70 61 73      /* Flags pas
bdd0: 73 65 64 20 74 6f 20 73 71 6c 69 74 65 33 5f 76  sed to sqlite3_v
bde0: 66 73 2e 78 4f 70 65 6e 28 29 20 2a 2f 0a 20 20  fs.xOpen() */.  
bdf0: 69 6e 74 20 65 72 72 43 6f 64 65 3b 20 20 20 20  int errCode;    
be00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
be10: 20 4d 6f 73 74 20 72 65 63 65 6e 74 20 65 72 72   Most recent err
be20: 6f 72 20 63 6f 64 65 20 28 53 51 4c 49 54 45 5f  or code (SQLITE_
be30: 2a 29 20 2a 2f 0a 20 20 69 6e 74 20 65 72 72 4d  *) */.  int errM
be40: 61 73 6b 3b 20 20 20 20 20 20 20 20 20 20 20 20  ask;            
be50: 20 20 20 20 20 20 2f 2a 20 26 20 72 65 73 75 6c        /* & resul
be60: 74 20 63 6f 64 65 73 20 77 69 74 68 20 74 68 69  t codes with thi
be70: 73 20 62 65 66 6f 72 65 20 72 65 74 75 72 6e 69  s before returni
be80: 6e 67 20 2a 2f 0a 20 20 69 6e 74 20 69 53 79 73  ng */.  int iSys
be90: 45 72 72 6e 6f 3b 20 20 20 20 20 20 20 20 20 20  Errno;          
bea0: 20 20 20 20 20 20 2f 2a 20 45 72 72 6e 6f 20 76        /* Errno v
beb0: 61 6c 75 65 20 66 72 6f 6d 20 6c 61 73 74 20 73  alue from last s
bec0: 79 73 74 65 6d 20 65 72 72 6f 72 20 2a 2f 0a 20  ystem error */. 
bed0: 20 75 31 36 20 64 62 4f 70 74 46 6c 61 67 73 3b   u16 dbOptFlags;
bee0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
bef0: 2a 20 46 6c 61 67 73 20 74 6f 20 65 6e 61 62 6c  * Flags to enabl
bf00: 65 2f 64 69 73 61 62 6c 65 20 6f 70 74 69 6d 69  e/disable optimi
bf10: 7a 61 74 69 6f 6e 73 20 2a 2f 0a 20 20 75 38 20  zations */.  u8 
bf20: 65 6e 63 3b 20 20 20 20 20 20 20 20 20 20 20 20  enc;            
bf30: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65             /* Te
bf40: 78 74 20 65 6e 63 6f 64 69 6e 67 20 2a 2f 0a 20  xt encoding */. 
bf50: 20 75 38 20 61 75 74 6f 43 6f 6d 6d 69 74 3b 20   u8 autoCommit; 
bf60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
bf70: 2a 20 54 68 65 20 61 75 74 6f 2d 63 6f 6d 6d 69  * The auto-commi
bf80: 74 20 66 6c 61 67 2e 20 2a 2f 0a 20 20 75 38 20  t flag. */.  u8 
bf90: 74 65 6d 70 5f 73 74 6f 72 65 3b 20 20 20 20 20  temp_store;     
bfa0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 31 3a             /* 1:
bfb0: 20 66 69 6c 65 20 32 3a 20 6d 65 6d 6f 72 79 20   file 2: memory 
bfc0: 30 3a 20 64 65 66 61 75 6c 74 20 2a 2f 0a 20 20  0: default */.  
bfd0: 75 38 20 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 3b  u8 mallocFailed;
bfe0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
bff0: 20 54 72 75 65 20 69 66 20 77 65 20 68 61 76 65   True if we have
c000: 20 73 65 65 6e 20 61 20 6d 61 6c 6c 6f 63 20 66   seen a malloc f
c010: 61 69 6c 75 72 65 20 2a 2f 0a 20 20 75 38 20 62  ailure */.  u8 b
c020: 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 3b 20 20 20  BenignMalloc;   
c030: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 6f 20            /* Do 
c040: 6e 6f 74 20 72 65 71 75 69 72 65 20 4f 4f 4d 73  not require OOMs
c050: 20 69 66 20 74 72 75 65 20 2a 2f 0a 20 20 75 38   if true */.  u8
c060: 20 64 66 6c 74 4c 6f 63 6b 4d 6f 64 65 3b 20 20   dfltLockMode;  
c070: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44              /* D
c080: 65 66 61 75 6c 74 20 6c 6f 63 6b 69 6e 67 2d 6d  efault locking-m
c090: 6f 64 65 20 66 6f 72 20 61 74 74 61 63 68 65 64  ode for attached
c0a0: 20 64 62 73 20 2a 2f 0a 20 20 73 69 67 6e 65 64   dbs */.  signed
c0b0: 20 63 68 61 72 20 6e 65 78 74 41 75 74 6f 76 61   char nextAutova
c0c0: 63 3b 20 20 20 20 20 20 2f 2a 20 41 75 74 6f 76  c;      /* Autov
c0d0: 61 63 20 73 65 74 74 69 6e 67 20 61 66 74 65 72  ac setting after
c0e0: 20 56 41 43 55 55 4d 20 69 66 20 3e 3d 30 20 2a   VACUUM if >=0 *
c0f0: 2f 0a 20 20 75 38 20 73 75 70 70 72 65 73 73 45  /.  u8 suppressE
c100: 72 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  rr;             
c110: 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 69 73 73 75    /* Do not issu
c120: 65 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 73  e error messages
c130: 20 69 66 20 74 72 75 65 20 2a 2f 0a 20 20 75 38   if true */.  u8
c140: 20 76 74 61 62 4f 6e 43 6f 6e 66 6c 69 63 74 3b   vtabOnConflict;
c150: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56              /* V
c160: 61 6c 75 65 20 74 6f 20 72 65 74 75 72 6e 20 66  alue to return f
c170: 6f 72 20 73 33 5f 76 74 61 62 5f 6f 6e 5f 63 6f  or s3_vtab_on_co
c180: 6e 66 6c 69 63 74 28 29 20 2a 2f 0a 20 20 75 38  nflict() */.  u8
c190: 20 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 53 61   isTransactionSa
c1a0: 76 65 70 6f 69 6e 74 3b 20 20 20 20 2f 2a 20 54  vepoint;    /* T
c1b0: 72 75 65 20 69 66 20 74 68 65 20 6f 75 74 65 72  rue if the outer
c1c0: 6d 6f 73 74 20 73 61 76 65 70 6f 69 6e 74 20 69  most savepoint i
c1d0: 73 20 61 20 54 53 20 2a 2f 0a 20 20 75 38 20 6d  s a TS */.  u8 m
c1e0: 54 72 61 63 65 3b 20 20 20 20 20 20 20 20 20 20  Trace;          
c1f0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 7a 65 72            /* zer
c200: 6f 20 6f 72 20 6d 6f 72 65 20 53 51 4c 49 54 45  o or more SQLITE
c210: 5f 54 52 41 43 45 20 66 6c 61 67 73 20 2a 2f 0a  _TRACE flags */.
c220: 20 20 75 38 20 6e 6f 53 68 61 72 65 64 43 61 63    u8 noSharedCac
c230: 68 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  he;             
c240: 2f 2a 20 54 72 75 65 20 69 66 20 6e 6f 20 73 68  /* True if no sh
c250: 61 72 65 64 2d 63 61 63 68 65 20 62 61 63 6b 65  ared-cache backe
c260: 6e 64 73 20 2a 2f 0a 20 20 75 38 20 6e 53 71 6c  nds */.  u8 nSql
c270: 45 78 65 63 3b 20 20 20 20 20 20 20 20 20 20 20  Exec;           
c280: 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
c290: 20 6f 66 20 70 65 6e 64 69 6e 67 20 4f 50 5f 53   of pending OP_S
c2a0: 71 6c 45 78 65 63 20 6f 70 63 6f 64 65 73 20 2a  qlExec opcodes *
c2b0: 2f 0a 20 20 69 6e 74 20 6e 65 78 74 50 61 67 65  /.  int nextPage
c2c0: 73 69 7a 65 3b 20 20 20 20 20 20 20 20 20 20 20  size;           
c2d0: 20 20 2f 2a 20 50 61 67 65 73 69 7a 65 20 61 66    /* Pagesize af
c2e0: 74 65 72 20 56 41 43 55 55 4d 20 69 66 20 3e 30  ter VACUUM if >0
c2f0: 20 2a 2f 0a 20 20 75 33 32 20 6d 61 67 69 63 3b   */.  u32 magic;
c300: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c310: 20 20 20 20 2f 2a 20 4d 61 67 69 63 20 6e 75 6d      /* Magic num
c320: 62 65 72 20 66 6f 72 20 64 65 74 65 63 74 20 6c  ber for detect l
c330: 69 62 72 61 72 79 20 6d 69 73 75 73 65 20 2a 2f  ibrary misuse */
c340: 0a 20 20 69 6e 74 20 6e 43 68 61 6e 67 65 3b 20  .  int nChange; 
c350: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c360: 20 2f 2a 20 56 61 6c 75 65 20 72 65 74 75 72 6e   /* Value return
c370: 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f 63 68  ed by sqlite3_ch
c380: 61 6e 67 65 73 28 29 20 2a 2f 0a 20 20 69 6e 74  anges() */.  int
c390: 20 6e 54 6f 74 61 6c 43 68 61 6e 67 65 3b 20 20   nTotalChange;  
c3a0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61             /* Va
c3b0: 6c 75 65 20 72 65 74 75 72 6e 65 64 20 62 79 20  lue returned by 
c3c0: 73 71 6c 69 74 65 33 5f 74 6f 74 61 6c 5f 63 68  sqlite3_total_ch
c3d0: 61 6e 67 65 73 28 29 20 2a 2f 0a 20 20 69 6e 74  anges() */.  int
c3e0: 20 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4e   aLimit[SQLITE_N
c3f0: 5f 4c 49 4d 49 54 5d 3b 20 20 20 2f 2a 20 4c 69  _LIMIT];   /* Li
c400: 6d 69 74 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 4d  mits */.  int nM
c410: 61 78 53 6f 72 74 65 72 4d 6d 61 70 3b 20 20 20  axSorterMmap;   
c420: 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 78 69 6d          /* Maxim
c430: 75 6d 20 73 69 7a 65 20 6f 66 20 72 65 67 69 6f  um size of regio
c440: 6e 73 20 6d 61 70 70 65 64 20 62 79 20 73 6f 72  ns mapped by sor
c450: 74 65 72 20 2a 2f 0a 20 20 73 74 72 75 63 74 20  ter */.  struct 
c460: 73 71 6c 69 74 65 33 49 6e 69 74 49 6e 66 6f 20  sqlite3InitInfo 
c470: 7b 20 20 20 20 20 20 2f 2a 20 49 6e 66 6f 72 6d  {      /* Inform
c480: 61 74 69 6f 6e 20 75 73 65 64 20 64 75 72 69 6e  ation used durin
c490: 67 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e  g initialization
c4a0: 20 2a 2f 0a 20 20 20 20 69 6e 74 20 6e 65 77 54   */.    int newT
c4b0: 6e 75 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20  num;            
c4c0: 20 20 20 20 2f 2a 20 52 6f 6f 74 70 61 67 65 20      /* Rootpage 
c4d0: 6f 66 20 74 61 62 6c 65 20 62 65 69 6e 67 20 69  of table being i
c4e0: 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20  nitialized */.  
c4f0: 20 20 75 38 20 69 44 62 3b 20 20 20 20 20 20 20    u8 iDb;       
c500: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
c510: 20 57 68 69 63 68 20 64 62 20 66 69 6c 65 20 69   Which db file i
c520: 73 20 62 65 69 6e 67 20 69 6e 69 74 69 61 6c 69  s being initiali
c530: 7a 65 64 20 2a 2f 0a 20 20 20 20 75 38 20 62 75  zed */.    u8 bu
c540: 73 79 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  sy;             
c550: 20 20 20 20 20 20 20 2f 2a 20 54 52 55 45 20 69         /* TRUE i
c560: 66 20 63 75 72 72 65 6e 74 6c 79 20 69 6e 69 74  f currently init
c570: 69 61 6c 69 7a 69 6e 67 20 2a 2f 0a 20 20 20 20  ializing */.    
c580: 75 6e 73 69 67 6e 65 64 20 6f 72 70 68 61 6e 54  unsigned orphanT
c590: 72 69 67 67 65 72 20 3a 20 31 3b 20 2f 2a 20 4c  rigger : 1; /* L
c5a0: 61 73 74 20 73 74 61 74 65 6d 65 6e 74 20 69 73  ast statement is
c5b0: 20 6f 72 70 68 61 6e 65 64 20 54 45 4d 50 20 74   orphaned TEMP t
c5c0: 72 69 67 67 65 72 20 2a 2f 0a 20 20 20 20 75 6e  rigger */.    un
c5d0: 73 69 67 6e 65 64 20 69 6d 70 6f 73 74 65 72 54  signed imposterT
c5e0: 61 62 6c 65 20 3a 20 31 3b 20 2f 2a 20 42 75 69  able : 1; /* Bui
c5f0: 6c 64 69 6e 67 20 61 6e 20 69 6d 70 6f 73 74 65  lding an imposte
c600: 72 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20 75  r table */.    u
c610: 6e 73 69 67 6e 65 64 20 72 65 6f 70 65 6e 4d 65  nsigned reopenMe
c620: 6d 64 62 20 3a 20 31 3b 20 20 20 2f 2a 20 41 54  mdb : 1;   /* AT
c630: 54 41 43 48 20 69 73 20 72 65 61 6c 6c 79 20 61  TACH is really a
c640: 20 72 65 6f 70 65 6e 20 75 73 69 6e 67 20 4d 65   reopen using Me
c650: 6d 44 42 20 2a 2f 0a 20 20 7d 20 69 6e 69 74 3b  mDB */.  } init;
c660: 0a 20 20 69 6e 74 20 6e 56 64 62 65 41 63 74 69  .  int nVdbeActi
c670: 76 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ve;             
c680: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 56 44   /* Number of VD
c690: 42 45 73 20 63 75 72 72 65 6e 74 6c 79 20 72 75  BEs currently ru
c6a0: 6e 6e 69 6e 67 20 2a 2f 0a 20 20 69 6e 74 20 6e  nning */.  int n
c6b0: 56 64 62 65 52 65 61 64 3b 20 20 20 20 20 20 20  VdbeRead;       
c6c0: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
c6d0: 65 72 20 6f 66 20 61 63 74 69 76 65 20 56 44 42  er of active VDB
c6e0: 45 73 20 74 68 61 74 20 72 65 61 64 20 6f 72 20  Es that read or 
c6f0: 77 72 69 74 65 20 2a 2f 0a 20 20 69 6e 74 20 6e  write */.  int n
c700: 56 64 62 65 57 72 69 74 65 3b 20 20 20 20 20 20  VdbeWrite;      
c710: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
c720: 65 72 20 6f 66 20 61 63 74 69 76 65 20 56 44 42  er of active VDB
c730: 45 73 20 74 68 61 74 20 72 65 61 64 20 61 6e 64  Es that read and
c740: 20 77 72 69 74 65 20 2a 2f 0a 20 20 69 6e 74 20   write */.  int 
c750: 6e 56 64 62 65 45 78 65 63 3b 20 20 20 20 20 20  nVdbeExec;      
c760: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
c770: 62 65 72 20 6f 66 20 6e 65 73 74 65 64 20 63 61  ber of nested ca
c780: 6c 6c 73 20 74 6f 20 56 64 62 65 45 78 65 63 28  lls to VdbeExec(
c790: 29 20 2a 2f 0a 20 20 69 6e 74 20 6e 56 44 65 73  ) */.  int nVDes
c7a0: 74 72 6f 79 3b 20 20 20 20 20 20 20 20 20 20 20  troy;           
c7b0: 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
c7c0: 66 20 61 63 74 69 76 65 20 4f 50 5f 56 44 65 73  f active OP_VDes
c7d0: 74 72 6f 79 20 6f 70 65 72 61 74 69 6f 6e 73 20  troy operations 
c7e0: 2a 2f 0a 20 20 69 6e 74 20 6e 45 78 74 65 6e 73  */.  int nExtens
c7f0: 69 6f 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20  ion;            
c800: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
c810: 6c 6f 61 64 65 64 20 65 78 74 65 6e 73 69 6f 6e  loaded extension
c820: 73 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 2a 61 45  s */.  void **aE
c830: 78 74 65 6e 73 69 6f 6e 3b 20 20 20 20 20 20 20  xtension;       
c840: 20 20 20 20 20 2f 2a 20 41 72 72 61 79 20 6f 66       /* Array of
c850: 20 73 68 61 72 65 64 20 6c 69 62 72 61 72 79 20   shared library 
c860: 68 61 6e 64 6c 65 73 20 2a 2f 0a 20 20 69 6e 74  handles */.  int
c870: 20 28 2a 78 54 72 61 63 65 29 28 75 33 32 2c 76   (*xTrace)(u32,v
c880: 6f 69 64 2a 2c 76 6f 69 64 2a 2c 76 6f 69 64 2a  oid*,void*,void*
c890: 29 3b 20 20 20 20 20 2f 2a 20 54 72 61 63 65 20  );     /* Trace 
c8a0: 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f  function */.  vo
c8b0: 69 64 20 2a 70 54 72 61 63 65 41 72 67 3b 20 20  id *pTraceArg;  
c8c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c8d0: 20 20 20 20 20 20 20 20 2f 2a 20 41 72 67 75 6d          /* Argum
c8e0: 65 6e 74 20 74 6f 20 74 68 65 20 74 72 61 63 65  ent to the trace
c8f0: 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 76   function */.  v
c900: 6f 69 64 20 28 2a 78 50 72 6f 66 69 6c 65 29 28  oid (*xProfile)(
c910: 76 6f 69 64 2a 2c 63 6f 6e 73 74 20 63 68 61 72  void*,const char
c920: 2a 2c 75 36 34 29 3b 20 20 2f 2a 20 50 72 6f 66  *,u64);  /* Prof
c930: 69 6c 69 6e 67 20 66 75 6e 63 74 69 6f 6e 20 2a  iling function *
c940: 2f 0a 20 20 76 6f 69 64 20 2a 70 50 72 6f 66 69  /.  void *pProfi
c950: 6c 65 41 72 67 3b 20 20 20 20 20 20 20 20 20 20  leArg;          
c960: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
c970: 20 41 72 67 75 6d 65 6e 74 20 74 6f 20 70 72 6f   Argument to pro
c980: 66 69 6c 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f  file function */
c990: 0a 20 20 76 6f 69 64 20 2a 70 43 6f 6d 6d 69 74  .  void *pCommit
c9a0: 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20  Arg;            
c9b0: 20 20 20 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74       /* Argument
c9c0: 20 74 6f 20 78 43 6f 6d 6d 69 74 43 61 6c 6c 62   to xCommitCallb
c9d0: 61 63 6b 28 29 20 2a 2f 0a 20 20 69 6e 74 20 28  ack() */.  int (
c9e0: 2a 78 43 6f 6d 6d 69 74 43 61 6c 6c 62 61 63 6b  *xCommitCallback
c9f0: 29 28 76 6f 69 64 2a 29 3b 20 20 20 20 2f 2a 20  )(void*);    /* 
ca00: 49 6e 76 6f 6b 65 64 20 61 74 20 65 76 65 72 79  Invoked at every
ca10: 20 63 6f 6d 6d 69 74 2e 20 2a 2f 0a 20 20 76 6f   commit. */.  vo
ca20: 69 64 20 2a 70 52 6f 6c 6c 62 61 63 6b 41 72 67  id *pRollbackArg
ca30: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
ca40: 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f 20 78  /* Argument to x
ca50: 52 6f 6c 6c 62 61 63 6b 43 61 6c 6c 62 61 63 6b  RollbackCallback
ca60: 28 29 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78  () */.  void (*x
ca70: 52 6f 6c 6c 62 61 63 6b 43 61 6c 6c 62 61 63 6b  RollbackCallback
ca80: 29 28 76 6f 69 64 2a 29 3b 20 2f 2a 20 49 6e 76  )(void*); /* Inv
ca90: 6f 6b 65 64 20 61 74 20 65 76 65 72 79 20 63 6f  oked at every co
caa0: 6d 6d 69 74 2e 20 2a 2f 0a 20 20 76 6f 69 64 20  mmit. */.  void 
cab0: 2a 70 55 70 64 61 74 65 41 72 67 3b 0a 20 20 76  *pUpdateArg;.  v
cac0: 6f 69 64 20 28 2a 78 55 70 64 61 74 65 43 61 6c  oid (*xUpdateCal
cad0: 6c 62 61 63 6b 29 28 76 6f 69 64 2a 2c 69 6e 74  lback)(void*,int
cae0: 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f  , const char*,co
caf0: 6e 73 74 20 63 68 61 72 2a 2c 73 71 6c 69 74 65  nst char*,sqlite
cb00: 5f 69 6e 74 36 34 29 3b 0a 23 69 66 64 65 66 20  _int64);.#ifdef 
cb10: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 50 52  SQLITE_ENABLE_PR
cb20: 45 55 50 44 41 54 45 5f 48 4f 4f 4b 0a 20 20 76  EUPDATE_HOOK.  v
cb30: 6f 69 64 20 2a 70 50 72 65 55 70 64 61 74 65 41  oid *pPreUpdateA
cb40: 72 67 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  rg;          /* 
cb50: 46 69 72 73 74 20 61 72 67 75 6d 65 6e 74 20 74  First argument t
cb60: 6f 20 78 50 72 65 55 70 64 61 74 65 43 61 6c 6c  o xPreUpdateCall
cb70: 62 61 63 6b 20 2a 2f 0a 20 20 76 6f 69 64 20 28  back */.  void (
cb80: 2a 78 50 72 65 55 70 64 61 74 65 43 61 6c 6c 62  *xPreUpdateCallb
cb90: 61 63 6b 29 28 20 20 20 2f 2a 20 52 65 67 69 73  ack)(   /* Regis
cba0: 74 65 72 65 64 20 75 73 69 6e 67 20 73 71 6c 69  tered using sqli
cbb0: 74 65 33 5f 70 72 65 75 70 64 61 74 65 5f 68 6f  te3_preupdate_ho
cbc0: 6f 6b 28 29 20 2a 2f 0a 20 20 20 20 76 6f 69 64  ok() */.    void
cbd0: 2a 2c 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 63  *,sqlite3*,int,c
cbe0: 68 61 72 20 63 6f 6e 73 74 2a 2c 63 68 61 72 20  har const*,char 
cbf0: 63 6f 6e 73 74 2a 2c 73 71 6c 69 74 65 33 5f 69  const*,sqlite3_i
cc00: 6e 74 36 34 2c 73 71 6c 69 74 65 33 5f 69 6e 74  nt64,sqlite3_int
cc10: 36 34 0a 20 20 29 3b 0a 20 20 50 72 65 55 70 64  64.  );.  PreUpd
cc20: 61 74 65 20 2a 70 50 72 65 55 70 64 61 74 65 3b  ate *pPreUpdate;
cc30: 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6e 74 65          /* Conte
cc40: 78 74 20 66 6f 72 20 61 63 74 69 76 65 20 70 72  xt for active pr
cc50: 65 2d 75 70 64 61 74 65 20 63 61 6c 6c 62 61 63  e-update callbac
cc60: 6b 20 2a 2f 0a 23 65 6e 64 69 66 20 2f 2a 20 53  k */.#endif /* S
cc70: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 50 52 45  QLITE_ENABLE_PRE
cc80: 55 50 44 41 54 45 5f 48 4f 4f 4b 20 2a 2f 0a 23  UPDATE_HOOK */.#
cc90: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
cca0: 49 54 5f 57 41 4c 0a 20 20 69 6e 74 20 28 2a 78  IT_WAL.  int (*x
ccb0: 57 61 6c 43 61 6c 6c 62 61 63 6b 29 28 76 6f 69  WalCallback)(voi
ccc0: 64 20 2a 2c 20 73 71 6c 69 74 65 33 20 2a 2c 20  d *, sqlite3 *, 
ccd0: 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20 69 6e  const char *, in
cce0: 74 29 3b 0a 20 20 76 6f 69 64 20 2a 70 57 61 6c  t);.  void *pWal
ccf0: 41 72 67 3b 0a 23 65 6e 64 69 66 0a 20 20 76 6f  Arg;.#endif.  vo
cd00: 69 64 28 2a 78 43 6f 6c 6c 4e 65 65 64 65 64 29  id(*xCollNeeded)
cd10: 28 76 6f 69 64 2a 2c 73 71 6c 69 74 65 33 2a 2c  (void*,sqlite3*,
cd20: 69 6e 74 20 65 54 65 78 74 52 65 70 2c 63 6f 6e  int eTextRep,con
cd30: 73 74 20 63 68 61 72 2a 29 3b 0a 20 20 76 6f 69  st char*);.  voi
cd40: 64 28 2a 78 43 6f 6c 6c 4e 65 65 64 65 64 31 36  d(*xCollNeeded16
cd50: 29 28 76 6f 69 64 2a 2c 73 71 6c 69 74 65 33 2a  )(void*,sqlite3*
cd60: 2c 69 6e 74 20 65 54 65 78 74 52 65 70 2c 63 6f  ,int eTextRep,co
cd70: 6e 73 74 20 76 6f 69 64 2a 29 3b 0a 20 20 76 6f  nst void*);.  vo
cd80: 69 64 20 2a 70 43 6f 6c 6c 4e 65 65 64 65 64 41  id *pCollNeededA
cd90: 72 67 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76 61  rg;.  sqlite3_va
cda0: 6c 75 65 20 2a 70 45 72 72 3b 20 20 20 20 20 20  lue *pErr;      
cdb0: 20 20 20 20 2f 2a 20 4d 6f 73 74 20 72 65 63 65      /* Most rece
cdc0: 6e 74 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65  nt error message
cdd0: 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b 0a 20 20   */.  union {.  
cde0: 20 20 76 6f 6c 61 74 69 6c 65 20 69 6e 74 20 69    volatile int i
cdf0: 73 49 6e 74 65 72 72 75 70 74 65 64 3b 20 2f 2a  sInterrupted; /*
ce00: 20 54 72 75 65 20 69 66 20 73 71 6c 69 74 65 33   True if sqlite3
ce10: 5f 69 6e 74 65 72 72 75 70 74 20 68 61 73 20 62  _interrupt has b
ce20: 65 65 6e 20 63 61 6c 6c 65 64 20 2a 2f 0a 20 20  een called */.  
ce30: 20 20 64 6f 75 62 6c 65 20 6e 6f 74 55 73 65 64    double notUsed
ce40: 31 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  1;            /*
ce50: 20 53 70 61 63 65 72 20 2a 2f 0a 20 20 7d 20 75   Spacer */.  } u
ce60: 31 3b 0a 20 20 4c 6f 6f 6b 61 73 69 64 65 20 6c  1;.  Lookaside l
ce70: 6f 6f 6b 61 73 69 64 65 3b 20 20 20 20 20 20 20  ookaside;       
ce80: 20 20 20 2f 2a 20 4c 6f 6f 6b 61 73 69 64 65 20     /* Lookaside 
ce90: 6d 61 6c 6c 6f 63 20 63 6f 6e 66 69 67 75 72 61  malloc configura
cea0: 74 69 6f 6e 20 2a 2f 0a 23 69 66 6e 64 65 66 20  tion */.#ifndef 
ceb0: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 48  SQLITE_OMIT_AUTH
cec0: 4f 52 49 5a 41 54 49 4f 4e 0a 20 20 73 71 6c 69  ORIZATION.  sqli
ced0: 74 65 33 5f 78 61 75 74 68 20 78 41 75 74 68 3b  te3_xauth xAuth;
cee0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 63 63            /* Acc
cef0: 65 73 73 20 61 75 74 68 6f 72 69 7a 61 74 69 6f  ess authorizatio
cf00: 6e 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20  n function */.  
cf10: 76 6f 69 64 20 2a 70 41 75 74 68 41 72 67 3b 20  void *pAuthArg; 
cf20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
cf30: 20 31 73 74 20 61 72 67 75 6d 65 6e 74 20 74 6f   1st argument to
cf40: 20 74 68 65 20 61 63 63 65 73 73 20 61 75 74 68   the access auth
cf50: 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 65 6e   function */.#en
cf60: 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  dif.#ifndef SQLI
cf70: 54 45 5f 4f 4d 49 54 5f 50 52 4f 47 52 45 53 53  TE_OMIT_PROGRESS
cf80: 5f 43 41 4c 4c 42 41 43 4b 0a 20 20 69 6e 74 20  _CALLBACK.  int 
cf90: 28 2a 78 50 72 6f 67 72 65 73 73 29 28 76 6f 69  (*xProgress)(voi
cfa0: 64 20 2a 29 3b 20 20 20 20 20 2f 2a 20 54 68 65  d *);     /* The
cfb0: 20 70 72 6f 67 72 65 73 73 20 63 61 6c 6c 62 61   progress callba
cfc0: 63 6b 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 50  ck */.  void *pP
cfd0: 72 6f 67 72 65 73 73 41 72 67 3b 20 20 20 20 20  rogressArg;     
cfe0: 20 20 20 20 20 20 2f 2a 20 41 72 67 75 6d 65 6e        /* Argumen
cff0: 74 20 74 6f 20 74 68 65 20 70 72 6f 67 72 65 73  t to the progres
d000: 73 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20  s callback */.  
d010: 75 6e 73 69 67 6e 65 64 20 6e 50 72 6f 67 72 65  unsigned nProgre
d020: 73 73 4f 70 73 3b 20 20 20 20 20 20 20 20 2f 2a  ssOps;        /*
d030: 20 4e 75 6d 62 65 72 20 6f 66 20 6f 70 63 6f 64   Number of opcod
d040: 65 73 20 66 6f 72 20 70 72 6f 67 72 65 73 73 20  es for progress 
d050: 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 23 65 6e 64  callback */.#end
d060: 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  if.#ifndef SQLIT
d070: 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
d080: 42 4c 45 0a 20 20 69 6e 74 20 6e 56 54 72 61 6e  BLE.  int nVTran
d090: 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  s;              
d0a0: 20 20 20 20 2f 2a 20 41 6c 6c 6f 63 61 74 65 64      /* Allocated
d0b0: 20 73 69 7a 65 20 6f 66 20 61 56 54 72 61 6e 73   size of aVTrans
d0c0: 20 2a 2f 0a 20 20 48 61 73 68 20 61 4d 6f 64 75   */.  Hash aModu
d0d0: 6c 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  le;             
d0e0: 20 20 20 20 2f 2a 20 70 6f 70 75 6c 61 74 65 64      /* populated
d0f0: 20 62 79 20 73 71 6c 69 74 65 33 5f 63 72 65 61   by sqlite3_crea
d100: 74 65 5f 6d 6f 64 75 6c 65 28 29 20 2a 2f 0a 20  te_module() */. 
d110: 20 56 74 61 62 43 74 78 20 2a 70 56 74 61 62 43   VtabCtx *pVtabC
d120: 74 78 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  tx;            /
d130: 2a 20 43 6f 6e 74 65 78 74 20 66 6f 72 20 61 63  * Context for ac
d140: 74 69 76 65 20 76 74 61 62 20 63 6f 6e 6e 65 63  tive vtab connec
d150: 74 2f 63 72 65 61 74 65 20 2a 2f 0a 20 20 56 54  t/create */.  VT
d160: 61 62 6c 65 20 2a 2a 61 56 54 72 61 6e 73 3b 20  able **aVTrans; 
d170: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56              /* V
d180: 69 72 74 75 61 6c 20 74 61 62 6c 65 73 20 77 69  irtual tables wi
d190: 74 68 20 6f 70 65 6e 20 74 72 61 6e 73 61 63 74  th open transact
d1a0: 69 6f 6e 73 20 2a 2f 0a 20 20 56 54 61 62 6c 65  ions */.  VTable
d1b0: 20 2a 70 44 69 73 63 6f 6e 6e 65 63 74 3b 20 20   *pDisconnect;  
d1c0: 20 20 20 20 20 20 20 20 2f 2a 20 44 69 73 63 6f          /* Disco
d1d0: 6e 6e 65 63 74 20 74 68 65 73 65 20 69 6e 20 6e  nnect these in n
d1e0: 65 78 74 20 73 71 6c 69 74 65 33 5f 70 72 65 70  ext sqlite3_prep
d1f0: 61 72 65 28 29 20 2a 2f 0a 23 65 6e 64 69 66 0a  are() */.#endif.
d200: 20 20 48 61 73 68 20 61 46 75 6e 63 3b 20 20 20    Hash aFunc;   
d210: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d220: 2f 2a 20 48 61 73 68 20 74 61 62 6c 65 20 6f 66  /* Hash table of
d230: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 66 75 6e 63   connection func
d240: 74 69 6f 6e 73 20 2a 2f 0a 20 20 48 61 73 68 20  tions */.  Hash 
d250: 61 43 6f 6c 6c 53 65 71 3b 20 20 20 20 20 20 20  aCollSeq;       
d260: 20 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20           /* All 
d270: 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e  collating sequen
d280: 63 65 73 20 2a 2f 0a 20 20 42 75 73 79 48 61 6e  ces */.  BusyHan
d290: 64 6c 65 72 20 62 75 73 79 48 61 6e 64 6c 65 72  dler busyHandler
d2a0: 3b 20 20 20 20 20 20 2f 2a 20 42 75 73 79 20 63  ;      /* Busy c
d2b0: 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 44 62 20  allback */.  Db 
d2c0: 61 44 62 53 74 61 74 69 63 5b 32 5d 3b 20 20 20  aDbStatic[2];   
d2d0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 74             /* St
d2e0: 61 74 69 63 20 73 70 61 63 65 20 66 6f 72 20 74  atic space for t
d2f0: 68 65 20 32 20 64 65 66 61 75 6c 74 20 62 61 63  he 2 default bac
d300: 6b 65 6e 64 73 20 2a 2f 0a 20 20 53 61 76 65 70  kends */.  Savep
d310: 6f 69 6e 74 20 2a 70 53 61 76 65 70 6f 69 6e 74  oint *pSavepoint
d320: 3b 20 20 20 20 20 20 20 20 2f 2a 20 4c 69 73 74  ;        /* List
d330: 20 6f 66 20 61 63 74 69 76 65 20 73 61 76 65 70   of active savep
d340: 6f 69 6e 74 73 20 2a 2f 0a 20 20 69 6e 74 20 62  oints */.  int b
d350: 75 73 79 54 69 6d 65 6f 75 74 3b 20 20 20 20 20  usyTimeout;     
d360: 20 20 20 20 20 20 20 20 20 2f 2a 20 42 75 73 79           /* Busy
d370: 20 68 61 6e 64 6c 65 72 20 74 69 6d 65 6f 75 74   handler timeout
d380: 2c 20 69 6e 20 6d 73 65 63 20 2a 2f 0a 20 20 69  , in msec */.  i
d390: 6e 74 20 6e 53 61 76 65 70 6f 69 6e 74 3b 20 20  nt nSavepoint;  
d3a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
d3b0: 4e 75 6d 62 65 72 20 6f 66 20 6e 6f 6e 2d 74 72  Number of non-tr
d3c0: 61 6e 73 61 63 74 69 6f 6e 20 73 61 76 65 70 6f  ansaction savepo
d3d0: 69 6e 74 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 53  ints */.  int nS
d3e0: 74 61 74 65 6d 65 6e 74 3b 20 20 20 20 20 20 20  tatement;       
d3f0: 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
d400: 72 20 6f 66 20 6e 65 73 74 65 64 20 73 74 61 74  r of nested stat
d410: 65 6d 65 6e 74 2d 74 72 61 6e 73 61 63 74 69 6f  ement-transactio
d420: 6e 73 20 20 2a 2f 0a 20 20 69 36 34 20 6e 44 65  ns  */.  i64 nDe
d430: 66 65 72 72 65 64 43 6f 6e 73 3b 20 20 20 20 20  ferredCons;     
d440: 20 20 20 20 20 20 20 2f 2a 20 4e 65 74 20 64 65         /* Net de
d450: 66 65 72 72 65 64 20 63 6f 6e 73 74 72 61 69 6e  ferred constrain
d460: 74 73 20 74 68 69 73 20 74 72 61 6e 73 61 63 74  ts this transact
d470: 69 6f 6e 2e 20 2a 2f 0a 20 20 69 36 34 20 6e 44  ion. */.  i64 nD
d480: 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3b 20  eferredImmCons; 
d490: 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 74 20 64          /* Net d
d4a0: 65 66 65 72 72 65 64 20 69 6d 6d 65 64 69 61 74  eferred immediat
d4b0: 65 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f  e constraints */
d4c0: 0a 20 20 69 6e 74 20 2a 70 6e 42 79 74 65 73 46  .  int *pnBytesF
d4d0: 72 65 65 64 3b 20 20 20 20 20 20 20 20 20 20 20  reed;           
d4e0: 20 2f 2a 20 49 66 20 6e 6f 74 20 4e 55 4c 4c 2c   /* If not NULL,
d4f0: 20 69 6e 63 72 65 6d 65 6e 74 20 74 68 69 73 20   increment this 
d500: 69 6e 20 44 62 46 72 65 65 28 29 20 2a 2f 0a 23  in DbFree() */.#
d510: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  ifdef SQLITE_ENA
d520: 42 4c 45 5f 55 4e 4c 4f 43 4b 5f 4e 4f 54 49 46  BLE_UNLOCK_NOTIF
d530: 59 0a 20 20 2f 2a 20 54 68 65 20 66 6f 6c 6c 6f  Y.  /* The follo
d540: 77 69 6e 67 20 76 61 72 69 61 62 6c 65 73 20 61  wing variables a
d550: 72 65 20 61 6c 6c 20 70 72 6f 74 65 63 74 65 64  re all protected
d560: 20 62 79 20 74 68 65 20 53 54 41 54 49 43 5f 4d   by the STATIC_M
d570: 41 53 54 45 52 0a 20 20 2a 2a 20 6d 75 74 65 78  ASTER.  ** mutex
d580: 2c 20 6e 6f 74 20 62 79 20 73 71 6c 69 74 65 33  , not by sqlite3
d590: 2e 6d 75 74 65 78 2e 20 54 68 65 79 20 61 72 65  .mutex. They are
d5a0: 20 75 73 65 64 20 62 79 20 63 6f 64 65 20 69 6e   used by code in
d5b0: 20 6e 6f 74 69 66 79 2e 63 2e 0a 20 20 2a 2a 0a   notify.c..  **.
d5c0: 20 20 2a 2a 20 57 68 65 6e 20 58 2e 70 55 6e 6c    ** When X.pUnl
d5d0: 6f 63 6b 43 6f 6e 6e 65 63 74 69 6f 6e 3d 3d 59  ockConnection==Y
d5e0: 2c 20 74 68 61 74 20 6d 65 61 6e 73 20 74 68 61  , that means tha
d5f0: 74 20 58 20 69 73 20 77 61 69 74 69 6e 67 20 66  t X is waiting f
d600: 6f 72 20 59 20 74 6f 0a 20 20 2a 2a 20 75 6e 6c  or Y to.  ** unl
d610: 6f 63 6b 20 73 6f 20 74 68 61 74 20 69 74 20 63  ock so that it c
d620: 61 6e 20 70 72 6f 63 65 65 64 2e 0a 20 20 2a 2a  an proceed..  **
d630: 0a 20 20 2a 2a 20 57 68 65 6e 20 58 2e 70 42 6c  .  ** When X.pBl
d640: 6f 63 6b 69 6e 67 43 6f 6e 6e 65 63 74 69 6f 6e  ockingConnection
d650: 3d 3d 59 2c 20 74 68 61 74 20 6d 65 61 6e 73 20  ==Y, that means 
d660: 74 68 61 74 20 73 6f 6d 65 74 68 69 6e 67 20 74  that something t
d670: 68 61 74 20 58 20 74 72 69 65 64 0a 20 20 2a 2a  hat X tried.  **
d680: 20 74 72 69 65 64 20 74 6f 20 64 6f 20 72 65 63   tried to do rec
d690: 65 6e 74 6c 79 20 66 61 69 6c 65 64 20 77 69 74  ently failed wit
d6a0: 68 20 61 6e 20 53 51 4c 49 54 45 5f 4c 4f 43 4b  h an SQLITE_LOCK
d6b0: 45 44 20 65 72 72 6f 72 20 64 75 65 20 74 6f 20  ED error due to 
d6c0: 6c 6f 63 6b 73 0a 20 20 2a 2a 20 68 65 6c 64 20  locks.  ** held 
d6d0: 62 79 20 59 2e 0a 20 20 2a 2f 0a 20 20 73 71 6c  by Y..  */.  sql
d6e0: 69 74 65 33 20 2a 70 42 6c 6f 63 6b 69 6e 67 43  ite3 *pBlockingC
d6f0: 6f 6e 6e 65 63 74 69 6f 6e 3b 20 2f 2a 20 43 6f  onnection; /* Co
d700: 6e 6e 65 63 74 69 6f 6e 20 74 68 61 74 20 63 61  nnection that ca
d710: 75 73 65 64 20 53 51 4c 49 54 45 5f 4c 4f 43 4b  used SQLITE_LOCK
d720: 45 44 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 20  ED */.  sqlite3 
d730: 2a 70 55 6e 6c 6f 63 6b 43 6f 6e 6e 65 63 74 69  *pUnlockConnecti
d740: 6f 6e 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  on;           /*
d750: 20 43 6f 6e 6e 65 63 74 69 6f 6e 20 74 6f 20 77   Connection to w
d760: 61 74 63 68 20 66 6f 72 20 75 6e 6c 6f 63 6b 20  atch for unlock 
d770: 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 55 6e 6c 6f  */.  void *pUnlo
d780: 63 6b 41 72 67 3b 20 20 20 20 20 20 20 20 20 20  ckArg;          
d790: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72             /* Ar
d7a0: 67 75 6d 65 6e 74 20 74 6f 20 78 55 6e 6c 6f 63  gument to xUnloc
d7b0: 6b 4e 6f 74 69 66 79 20 2a 2f 0a 20 20 76 6f 69  kNotify */.  voi
d7c0: 64 20 28 2a 78 55 6e 6c 6f 63 6b 4e 6f 74 69 66  d (*xUnlockNotif
d7d0: 79 29 28 76 6f 69 64 20 2a 2a 2c 20 69 6e 74 29  y)(void **, int)
d7e0: 3b 20 20 2f 2a 20 55 6e 6c 6f 63 6b 20 6e 6f 74  ;  /* Unlock not
d7f0: 69 66 79 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a  ify callback */.
d800: 20 20 73 71 6c 69 74 65 33 20 2a 70 4e 65 78 74    sqlite3 *pNext
d810: 42 6c 6f 63 6b 65 64 3b 20 20 20 20 20 20 20 20  Blocked;        
d820: 2f 2a 20 4e 65 78 74 20 69 6e 20 6c 69 73 74 20  /* Next in list 
d830: 6f 66 20 61 6c 6c 20 62 6c 6f 63 6b 65 64 20 63  of all blocked c
d840: 6f 6e 6e 65 63 74 69 6f 6e 73 20 2a 2f 0a 23 65  onnections */.#e
d850: 6e 64 69 66 0a 23 69 66 64 65 66 20 53 51 4c 49  ndif.#ifdef SQLI
d860: 54 45 5f 55 53 45 52 5f 41 55 54 48 45 4e 54 49  TE_USER_AUTHENTI
d870: 43 41 54 49 4f 4e 0a 20 20 73 71 6c 69 74 65 33  CATION.  sqlite3
d880: 5f 75 73 65 72 61 75 74 68 20 61 75 74 68 3b 20  _userauth auth; 
d890: 20 20 20 20 20 20 20 2f 2a 20 55 73 65 72 20 61         /* User a
d8a0: 75 74 68 65 6e 74 69 63 61 74 69 6f 6e 20 69 6e  uthentication in
d8b0: 66 6f 72 6d 61 74 69 6f 6e 20 2a 2f 0a 23 65 6e  formation */.#en
d8c0: 64 69 66 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20  dif.};../*.** A 
d8d0: 6d 61 63 72 6f 20 74 6f 20 64 69 73 63 6f 76 65  macro to discove
d8e0: 72 20 74 68 65 20 65 6e 63 6f 64 69 6e 67 20 6f  r the encoding o
d8f0: 66 20 61 20 64 61 74 61 62 61 73 65 2e 0a 2a 2f  f a database..*/
d900: 0a 23 64 65 66 69 6e 65 20 53 43 48 45 4d 41 5f  .#define SCHEMA_
d910: 45 4e 43 28 64 62 29 20 28 28 64 62 29 2d 3e 61  ENC(db) ((db)->a
d920: 44 62 5b 30 5d 2e 70 53 63 68 65 6d 61 2d 3e 65  Db[0].pSchema->e
d930: 6e 63 29 0a 23 64 65 66 69 6e 65 20 45 4e 43 28  nc).#define ENC(
d940: 64 62 29 20 20 20 20 20 20 20 20 28 28 64 62 29  db)        ((db)
d950: 2d 3e 65 6e 63 29 0a 0a 2f 2a 0a 2a 2a 20 50 6f  ->enc)../*.** Po
d960: 73 73 69 62 6c 65 20 76 61 6c 75 65 73 20 66 6f  ssible values fo
d970: 72 20 74 68 65 20 73 71 6c 69 74 65 33 2e 66 6c  r the sqlite3.fl
d980: 61 67 73 2e 0a 2a 2a 0a 2a 2a 20 56 61 6c 75 65  ags..**.** Value
d990: 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 28 65 6e   constraints (en
d9a0: 66 6f 72 63 65 64 20 76 69 61 20 61 73 73 65 72  forced via asser
d9b0: 74 28 29 29 3a 0a 2a 2a 20 20 20 20 20 20 53 51  t()):.**      SQ
d9c0: 4c 49 54 45 5f 46 75 6c 6c 46 53 79 6e 63 20 20  LITE_FullFSync  
d9d0: 20 20 20 3d 3d 20 50 41 47 45 52 5f 46 55 4c 4c     == PAGER_FULL
d9e0: 46 53 59 4e 43 0a 2a 2a 20 20 20 20 20 20 53 51  FSYNC.**      SQ
d9f0: 4c 49 54 45 5f 43 6b 70 74 46 75 6c 6c 46 53 79  LITE_CkptFullFSy
da00: 6e 63 20 3d 3d 20 50 41 47 45 52 5f 43 4b 50 54  nc == PAGER_CKPT
da10: 5f 46 55 4c 4c 46 53 59 4e 43 0a 2a 2a 20 20 20  _FULLFSYNC.**   
da20: 20 20 20 53 51 4c 49 54 45 5f 43 61 63 68 65 53     SQLITE_CacheS
da30: 70 69 6c 6c 20 20 20 20 3d 3d 20 50 41 47 45 52  pill    == PAGER
da40: 5f 43 41 43 48 45 5f 53 50 49 4c 4c 0a 2a 2f 0a  _CACHE_SPILL.*/.
da50: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 57  #define SQLITE_W
da60: 72 69 74 65 53 63 68 65 6d 61 20 20 20 20 30 78  riteSchema    0x
da70: 30 30 30 30 30 30 30 31 20 20 2f 2a 20 4f 4b 20  00000001  /* OK 
da80: 74 6f 20 75 70 64 61 74 65 20 53 51 4c 49 54 45  to update SQLITE
da90: 5f 4d 41 53 54 45 52 20 2a 2f 0a 23 64 65 66 69  _MASTER */.#defi
daa0: 6e 65 20 53 51 4c 49 54 45 5f 4c 65 67 61 63 79  ne SQLITE_Legacy
dab0: 46 69 6c 65 46 6d 74 20 20 30 78 30 30 30 30 30  FileFmt  0x00000
dac0: 30 30 32 20 20 2f 2a 20 43 72 65 61 74 65 20 6e  002  /* Create n
dad0: 65 77 20 64 61 74 61 62 61 73 65 73 20 69 6e 20  ew databases in 
dae0: 66 6f 72 6d 61 74 20 31 20 2a 2f 0a 23 64 65 66  format 1 */.#def
daf0: 69 6e 65 20 53 51 4c 49 54 45 5f 46 75 6c 6c 43  ine SQLITE_FullC
db00: 6f 6c 4e 61 6d 65 73 20 20 20 30 78 30 30 30 30  olNames   0x0000
db10: 30 30 30 34 20 20 2f 2a 20 53 68 6f 77 20 66 75  0004  /* Show fu
db20: 6c 6c 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20  ll column names 
db30: 6f 6e 20 53 45 4c 45 43 54 20 2a 2f 0a 23 64 65  on SELECT */.#de
db40: 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 75 6c 6c  fine SQLITE_Full
db50: 46 53 79 6e 63 20 20 20 20 20 20 30 78 30 30 30  FSync      0x000
db60: 30 30 30 30 38 20 20 2f 2a 20 55 73 65 20 66 75  00008  /* Use fu
db70: 6c 6c 20 66 73 79 6e 63 20 6f 6e 20 74 68 65 20  ll fsync on the 
db80: 62 61 63 6b 65 6e 64 20 2a 2f 0a 23 64 65 66 69  backend */.#defi
db90: 6e 65 20 53 51 4c 49 54 45 5f 43 6b 70 74 46 75  ne SQLITE_CkptFu
dba0: 6c 6c 46 53 79 6e 63 20 20 30 78 30 30 30 30 30  llFSync  0x00000
dbb0: 30 31 30 20 20 2f 2a 20 55 73 65 20 66 75 6c 6c  010  /* Use full
dbc0: 20 66 73 79 6e 63 20 66 6f 72 20 63 68 65 63 6b   fsync for check
dbd0: 70 6f 69 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65  point */.#define
dbe0: 20 53 51 4c 49 54 45 5f 43 61 63 68 65 53 70 69   SQLITE_CacheSpi
dbf0: 6c 6c 20 20 20 20 20 30 78 30 30 30 30 30 30 32  ll     0x0000002
dc00: 30 20 20 2f 2a 20 4f 4b 20 74 6f 20 73 70 69 6c  0  /* OK to spil
dc10: 6c 20 70 61 67 65 72 20 63 61 63 68 65 20 2a 2f  l pager cache */
dc20: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
dc30: 53 68 6f 72 74 43 6f 6c 4e 61 6d 65 73 20 20 30  ShortColNames  0
dc40: 78 30 30 30 30 30 30 34 30 20 20 2f 2a 20 53 68  x00000040  /* Sh
dc50: 6f 77 20 73 68 6f 72 74 20 63 6f 6c 75 6d 6e 73  ow short columns
dc60: 20 6e 61 6d 65 73 20 2a 2f 0a 23 64 65 66 69 6e   names */.#defin
dc70: 65 20 53 51 4c 49 54 45 5f 43 6f 75 6e 74 52 6f  e SQLITE_CountRo
dc80: 77 73 20 20 20 20 20 20 30 78 30 30 30 30 30 30  ws      0x000000
dc90: 38 30 20 20 2f 2a 20 43 6f 75 6e 74 20 72 6f 77  80  /* Count row
dca0: 73 20 63 68 61 6e 67 65 64 20 62 79 20 49 4e 53  s changed by INS
dcb0: 45 52 54 2c 20 2a 2f 0a 20 20 20 20 20 20 20 20  ERT, */.        
dcc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dcd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dce0: 20 20 2f 2a 20 20 20 44 45 4c 45 54 45 2c 20 6f    /*   DELETE, o
dcf0: 72 20 55 50 44 41 54 45 20 61 6e 64 20 72 65 74  r UPDATE and ret
dd00: 75 72 6e 20 2a 2f 0a 20 20 20 20 20 20 20 20 20  urn */.         
dd10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dd20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dd30: 20 2f 2a 20 20 20 74 68 65 20 63 6f 75 6e 74 20   /*   the count 
dd40: 75 73 69 6e 67 20 61 20 63 61 6c 6c 62 61 63 6b  using a callback
dd50: 2e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  . */.#define SQL
dd60: 49 54 45 5f 4e 75 6c 6c 43 61 6c 6c 62 61 63 6b  ITE_NullCallback
dd70: 20 20 20 30 78 30 30 30 30 30 31 30 30 20 20 2f     0x00000100  /
dd80: 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20 63 61 6c  * Invoke the cal
dd90: 6c 62 61 63 6b 20 6f 6e 63 65 20 69 66 20 74 68  lback once if th
dda0: 65 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20  e */.           
ddb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ddc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
ddd0: 2a 20 20 20 72 65 73 75 6c 74 20 73 65 74 20 69  *   result set i
dde0: 73 20 65 6d 70 74 79 20 2a 2f 0a 23 64 65 66 69  s empty */.#defi
ddf0: 6e 65 20 53 51 4c 49 54 45 5f 49 67 6e 6f 72 65  ne SQLITE_Ignore
de00: 43 68 65 63 6b 73 20 20 20 30 78 30 30 30 30 30  Checks   0x00000
de10: 32 30 30 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 65  200  /* Do not e
de20: 6e 66 6f 72 63 65 20 63 68 65 63 6b 20 63 6f 6e  nforce check con
de30: 73 74 72 61 69 6e 74 73 20 2a 2f 0a 23 64 65 66  straints */.#def
de40: 69 6e 65 20 53 51 4c 49 54 45 5f 52 65 61 64 55  ine SQLITE_ReadU
de50: 6e 63 6f 6d 6d 69 74 20 20 20 30 78 30 30 30 30  ncommit   0x0000
de60: 30 34 30 30 20 20 2f 2a 20 52 45 41 44 20 55 4e  0400  /* READ UN
de70: 43 4f 4d 4d 49 54 54 45 44 20 69 6e 20 73 68 61  COMMITTED in sha
de80: 72 65 64 2d 63 61 63 68 65 20 2a 2f 0a 23 64 65  red-cache */.#de
de90: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e 6f 43 6b  fine SQLITE_NoCk
dea0: 70 74 4f 6e 43 6c 6f 73 65 20 20 30 78 30 30 30  ptOnClose  0x000
deb0: 30 30 38 30 30 20 20 2f 2a 20 4e 6f 20 63 68 65  00800  /* No che
dec0: 63 6b 70 6f 69 6e 74 20 6f 6e 20 63 6c 6f 73 65  ckpoint on close
ded0: 28 29 2f 44 45 54 41 43 48 20 2a 2f 0a 23 64 65  ()/DETACH */.#de
dee0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 52 65 76 65  fine SQLITE_Reve
def0: 72 73 65 4f 72 64 65 72 20 20 20 30 78 30 30 30  rseOrder   0x000
df00: 30 31 30 30 30 20 20 2f 2a 20 52 65 76 65 72 73  01000  /* Revers
df10: 65 20 75 6e 6f 72 64 65 72 65 64 20 53 45 4c 45  e unordered SELE
df20: 43 54 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  CTs */.#define S
df30: 51 4c 49 54 45 5f 52 65 63 54 72 69 67 67 65 72  QLITE_RecTrigger
df40: 73 20 20 20 20 30 78 30 30 30 30 32 30 30 30 20  s    0x00002000 
df50: 20 2f 2a 20 45 6e 61 62 6c 65 20 72 65 63 75 72   /* Enable recur
df60: 73 69 76 65 20 74 72 69 67 67 65 72 73 20 2a 2f  sive triggers */
df70: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
df80: 46 6f 72 65 69 67 6e 4b 65 79 73 20 20 20 20 30  ForeignKeys    0
df90: 78 30 30 30 30 34 30 30 30 20 20 2f 2a 20 45 6e  x00004000  /* En
dfa0: 66 6f 72 63 65 20 66 6f 72 65 69 67 6e 20 6b 65  force foreign ke
dfb0: 79 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 20 2a  y constraints  *
dfc0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
dfd0: 5f 41 75 74 6f 49 6e 64 65 78 20 20 20 20 20 20  _AutoIndex      
dfe0: 30 78 30 30 30 30 38 30 30 30 20 20 2f 2a 20 45  0x00008000  /* E
dff0: 6e 61 62 6c 65 20 61 75 74 6f 6d 61 74 69 63 20  nable automatic 
e000: 69 6e 64 65 78 65 73 20 2a 2f 0a 23 64 65 66 69  indexes */.#defi
e010: 6e 65 20 53 51 4c 49 54 45 5f 4c 6f 61 64 45 78  ne SQLITE_LoadEx
e020: 74 65 6e 73 69 6f 6e 20 20 30 78 30 30 30 31 30  tension  0x00010
e030: 30 30 30 20 20 2f 2a 20 45 6e 61 62 6c 65 20 6c  000  /* Enable l
e040: 6f 61 64 5f 65 78 74 65 6e 73 69 6f 6e 20 2a 2f  oad_extension */
e050: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
e060: 4c 6f 61 64 45 78 74 46 75 6e 63 20 20 20 20 30  LoadExtFunc    0
e070: 78 30 30 30 32 30 30 30 30 20 20 2f 2a 20 45 6e  x00020000  /* En
e080: 61 62 6c 65 20 6c 6f 61 64 5f 65 78 74 65 6e 73  able load_extens
e090: 69 6f 6e 28 29 20 53 51 4c 20 66 75 6e 63 20 2a  ion() SQL func *
e0a0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
e0b0: 5f 45 6e 61 62 6c 65 54 72 69 67 67 65 72 20 20  _EnableTrigger  
e0c0: 30 78 30 30 30 34 30 30 30 30 20 20 2f 2a 20 54  0x00040000  /* T
e0d0: 72 75 65 20 74 6f 20 65 6e 61 62 6c 65 20 74 72  rue to enable tr
e0e0: 69 67 67 65 72 73 20 2a 2f 0a 23 64 65 66 69 6e  iggers */.#defin
e0f0: 65 20 53 51 4c 49 54 45 5f 44 65 66 65 72 46 4b  e SQLITE_DeferFK
e100: 73 20 20 20 20 20 20 20 30 78 30 30 30 38 30 30  s       0x000800
e110: 30 30 20 20 2f 2a 20 44 65 66 65 72 20 61 6c 6c  00  /* Defer all
e120: 20 46 4b 20 63 6f 6e 73 74 72 61 69 6e 74 73 20   FK constraints 
e130: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
e140: 45 5f 51 75 65 72 79 4f 6e 6c 79 20 20 20 20 20  E_QueryOnly     
e150: 20 30 78 30 30 31 30 30 30 30 30 20 20 2f 2a 20   0x00100000  /* 
e160: 44 69 73 61 62 6c 65 20 64 61 74 61 62 61 73 65  Disable database
e170: 20 63 68 61 6e 67 65 73 20 2a 2f 0a 23 64 65 66   changes */.#def
e180: 69 6e 65 20 53 51 4c 49 54 45 5f 43 65 6c 6c 53  ine SQLITE_CellS
e190: 69 7a 65 43 6b 20 20 20 20 20 30 78 30 30 32 30  izeCk     0x0020
e1a0: 30 30 30 30 20 20 2f 2a 20 43 68 65 63 6b 20 62  0000  /* Check b
e1b0: 74 72 65 65 20 63 65 6c 6c 20 73 69 7a 65 73 20  tree cell sizes 
e1c0: 6f 6e 20 6c 6f 61 64 20 2a 2f 0a 23 64 65 66 69  on load */.#defi
e1d0: 6e 65 20 53 51 4c 49 54 45 5f 46 74 73 33 54 6f  ne SQLITE_Fts3To
e1e0: 6b 65 6e 69 7a 65 72 20 20 30 78 30 30 34 30 30  kenizer  0x00400
e1f0: 30 30 30 20 20 2f 2a 20 45 6e 61 62 6c 65 20 66  000  /* Enable f
e200: 74 73 33 5f 74 6f 6b 65 6e 69 7a 65 72 28 32 29  ts3_tokenizer(2)
e210: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
e220: 54 45 5f 45 6e 61 62 6c 65 51 50 53 47 20 20 20  TE_EnableQPSG   
e230: 20 20 30 78 30 30 38 30 30 30 30 30 20 20 2f 2a    0x00800000  /*
e240: 20 51 75 65 72 79 20 50 6c 61 6e 6e 65 72 20 53   Query Planner S
e250: 74 61 62 69 6c 69 74 79 20 47 75 61 72 61 6e 74  tability Guarant
e260: 65 65 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  ee*/.#define SQL
e270: 49 54 45 5f 54 72 69 67 67 65 72 45 51 50 20 20  ITE_TriggerEQP  
e280: 20 20 20 30 78 30 31 30 30 30 30 30 30 20 20 2f     0x01000000  /
e290: 2a 20 53 68 6f 77 20 74 72 69 67 67 65 72 20 45  * Show trigger E
e2a0: 58 50 4c 41 49 4e 20 51 55 45 52 59 20 50 4c 41  XPLAIN QUERY PLA
e2b0: 4e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  N */.#define SQL
e2c0: 49 54 45 5f 52 65 73 65 74 44 61 74 61 62 61 73  ITE_ResetDatabas
e2d0: 65 20 20 30 78 30 32 30 30 30 30 30 30 20 20 2f  e  0x02000000  /
e2e0: 2a 20 52 65 73 65 74 20 74 68 65 20 64 61 74 61  * Reset the data
e2f0: 62 61 73 65 20 2a 2f 0a 0a 2f 2a 20 46 6c 61 67  base */../* Flag
e300: 73 20 75 73 65 64 20 6f 6e 6c 79 20 69 66 20 64  s used only if d
e310: 65 62 75 67 67 69 6e 67 20 2a 2f 0a 23 69 66 64  ebugging */.#ifd
e320: 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
e330: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53  #define SQLITE_S
e340: 71 6c 54 72 61 63 65 20 20 20 20 20 20 20 30 78  qlTrace       0x
e350: 30 38 30 30 30 30 30 30 20 20 2f 2a 20 44 65 62  08000000  /* Deb
e360: 75 67 20 70 72 69 6e 74 20 53 51 4c 20 61 73 20  ug print SQL as 
e370: 69 74 20 65 78 65 63 75 74 65 73 20 2a 2f 0a 23  it executes */.#
e380: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 56 64  define SQLITE_Vd
e390: 62 65 4c 69 73 74 69 6e 67 20 20 20 20 30 78 31  beListing    0x1
e3a0: 30 30 30 30 30 30 30 20 20 2f 2a 20 44 65 62 75  0000000  /* Debu
e3b0: 67 20 6c 69 73 74 69 6e 67 73 20 6f 66 20 56 44  g listings of VD
e3c0: 42 45 20 70 72 6f 67 72 61 6d 73 20 2a 2f 0a 23  BE programs */.#
e3d0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 56 64  define SQLITE_Vd
e3e0: 62 65 54 72 61 63 65 20 20 20 20 20 20 30 78 32  beTrace      0x2
e3f0: 30 30 30 30 30 30 30 20 20 2f 2a 20 54 72 75 65  0000000  /* True
e400: 20 74 6f 20 74 72 61 63 65 20 56 44 42 45 20 65   to trace VDBE e
e410: 78 65 63 75 74 69 6f 6e 20 2a 2f 0a 23 64 65 66  xecution */.#def
e420: 69 6e 65 20 53 51 4c 49 54 45 5f 56 64 62 65 41  ine SQLITE_VdbeA
e430: 64 64 6f 70 54 72 61 63 65 20 30 78 34 30 30 30  ddopTrace 0x4000
e440: 30 30 30 30 20 20 2f 2a 20 54 72 61 63 65 20 73  0000  /* Trace s
e450: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 28  qlite3VdbeAddOp(
e460: 29 20 63 61 6c 6c 73 20 2a 2f 0a 23 64 65 66 69  ) calls */.#defi
e470: 6e 65 20 53 51 4c 49 54 45 5f 56 64 62 65 45 51  ne SQLITE_VdbeEQ
e480: 50 20 20 20 20 20 20 20 20 30 78 38 30 30 30 30  P        0x80000
e490: 30 30 30 20 20 2f 2a 20 44 65 62 75 67 20 45 58  000  /* Debug EX
e4a0: 50 4c 41 49 4e 20 51 55 45 52 59 20 50 4c 41 4e  PLAIN QUERY PLAN
e4b0: 20 2a 2f 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a   */.#endif../*.*
e4c0: 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73  * Allowed values
e4d0: 20 66 6f 72 20 73 71 6c 69 74 65 33 2e 6d 44 62   for sqlite3.mDb
e4e0: 46 6c 61 67 73 0a 2a 2f 0a 23 64 65 66 69 6e 65  Flags.*/.#define
e4f0: 20 44 42 46 4c 41 47 5f 53 63 68 65 6d 61 43 68   DBFLAG_SchemaCh
e500: 61 6e 67 65 20 20 20 30 78 30 30 30 31 20 20 2f  ange   0x0001  /
e510: 2a 20 55 6e 63 6f 6d 6d 69 74 74 65 64 20 48 61  * Uncommitted Ha
e520: 73 68 20 74 61 62 6c 65 20 63 68 61 6e 67 65 73  sh table changes
e530: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 44 42 46 4c   */.#define DBFL
e540: 41 47 5f 50 72 65 66 65 72 42 75 69 6c 74 69 6e  AG_PreferBuiltin
e550: 20 20 30 78 30 30 30 32 20 20 2f 2a 20 50 72 65    0x0002  /* Pre
e560: 66 65 72 65 6e 63 65 20 74 6f 20 62 75 69 6c 74  ference to built
e570: 2d 69 6e 20 66 75 6e 63 73 20 2a 2f 0a 23 64 65  -in funcs */.#de
e580: 66 69 6e 65 20 44 42 46 4c 41 47 5f 56 61 63 75  fine DBFLAG_Vacu
e590: 75 6d 20 20 20 20 20 20 20 20 20 30 78 30 30 30  um         0x000
e5a0: 34 20 20 2f 2a 20 43 75 72 72 65 6e 74 6c 79 20  4  /* Currently 
e5b0: 69 6e 20 61 20 56 41 43 55 55 4d 20 2a 2f 0a 23  in a VACUUM */.#
e5c0: 64 65 66 69 6e 65 20 44 42 46 4c 41 47 5f 53 63  define DBFLAG_Sc
e5d0: 68 65 6d 61 4b 6e 6f 77 6e 4f 6b 20 20 30 78 30  hemaKnownOk  0x0
e5e0: 30 30 38 20 20 2f 2a 20 53 63 68 65 6d 61 20 69  008  /* Schema i
e5f0: 73 20 6b 6e 6f 77 6e 20 74 6f 20 62 65 20 76 61  s known to be va
e600: 6c 69 64 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 42 69  lid */../*.** Bi
e610: 74 73 20 6f 66 20 74 68 65 20 73 71 6c 69 74 65  ts of the sqlite
e620: 33 2e 64 62 4f 70 74 46 6c 61 67 73 20 66 69 65  3.dbOptFlags fie
e630: 6c 64 20 74 68 61 74 20 61 72 65 20 75 73 65 64  ld that are used
e640: 20 62 79 20 74 68 65 0a 2a 2a 20 73 71 6c 69 74   by the.** sqlit
e650: 65 33 5f 74 65 73 74 5f 63 6f 6e 74 72 6f 6c 28  e3_test_control(
e660: 53 51 4c 49 54 45 5f 54 45 53 54 43 54 52 4c 5f  SQLITE_TESTCTRL_
e670: 4f 50 54 49 4d 49 5a 41 54 49 4f 4e 53 2c 2e 2e  OPTIMIZATIONS,..
e680: 2e 29 20 69 6e 74 65 72 66 61 63 65 20 74 6f 0a  .) interface to.
e690: 2a 2a 20 73 65 6c 65 63 74 69 76 65 6c 79 20 64  ** selectively d
e6a0: 69 73 61 62 6c 65 20 76 61 72 69 6f 75 73 20 6f  isable various o
e6b0: 70 74 69 6d 69 7a 61 74 69 6f 6e 73 2e 0a 2a 2f  ptimizations..*/
e6c0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
e6d0: 51 75 65 72 79 46 6c 61 74 74 65 6e 65 72 20 30  QueryFlattener 0
e6e0: 78 30 30 30 31 20 20 20 2f 2a 20 51 75 65 72 79  x0001   /* Query
e6f0: 20 66 6c 61 74 74 65 6e 69 6e 67 20 2a 2f 0a 23   flattening */.#
e700: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 6f  define SQLITE_Co
e710: 6c 75 6d 6e 43 61 63 68 65 20 20 20 20 30 78 30  lumnCache    0x0
e720: 30 30 32 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20  002   /* Column 
e730: 63 61 63 68 65 20 2a 2f 0a 23 64 65 66 69 6e 65  cache */.#define
e740: 20 53 51 4c 49 54 45 5f 47 72 6f 75 70 42 79 4f   SQLITE_GroupByO
e750: 72 64 65 72 20 20 20 30 78 30 30 30 34 20 20 20  rder   0x0004   
e760: 2f 2a 20 47 52 4f 55 50 42 59 20 63 6f 76 65 72  /* GROUPBY cover
e770: 20 6f 66 20 4f 52 44 45 52 42 59 20 2a 2f 0a 23   of ORDERBY */.#
e780: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 61  define SQLITE_Fa
e790: 63 74 6f 72 4f 75 74 43 6f 6e 73 74 20 30 78 30  ctorOutConst 0x0
e7a0: 30 30 38 20 20 20 2f 2a 20 43 6f 6e 73 74 61 6e  008   /* Constan
e7b0: 74 20 66 61 63 74 6f 72 69 6e 67 20 2a 2f 0a 23  t factoring */.#
e7c0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 69  define SQLITE_Di
e7d0: 73 74 69 6e 63 74 4f 70 74 20 20 20 20 30 78 30  stinctOpt    0x0
e7e0: 30 31 30 20 20 20 2f 2a 20 44 49 53 54 49 4e 43  010   /* DISTINC
e7f0: 54 20 75 73 69 6e 67 20 69 6e 64 65 78 65 73 20  T using indexes 
e800: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
e810: 45 5f 43 6f 76 65 72 49 64 78 53 63 61 6e 20 20  E_CoverIdxScan  
e820: 20 30 78 30 30 32 30 20 20 20 2f 2a 20 43 6f 76   0x0020   /* Cov
e830: 65 72 69 6e 67 20 69 6e 64 65 78 20 73 63 61 6e  ering index scan
e840: 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  s */.#define SQL
e850: 49 54 45 5f 4f 72 64 65 72 42 79 49 64 78 4a 6f  ITE_OrderByIdxJo
e860: 69 6e 20 30 78 30 30 34 30 20 20 20 2f 2a 20 4f  in 0x0040   /* O
e870: 52 44 45 52 20 42 59 20 6f 66 20 6a 6f 69 6e 73  RDER BY of joins
e880: 20 76 69 61 20 69 6e 64 65 78 20 2a 2f 0a 23 64   via index */.#d
e890: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 54 72 61  efine SQLITE_Tra
e8a0: 6e 73 69 74 69 76 65 20 20 20 20 20 30 78 30 30  nsitive     0x00
e8b0: 38 30 20 20 20 2f 2a 20 54 72 61 6e 73 69 74 69  80   /* Transiti
e8c0: 76 65 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a  ve constraints *
e8d0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
e8e0: 5f 4f 6d 69 74 4e 6f 6f 70 4a 6f 69 6e 20 20 20  _OmitNoopJoin   
e8f0: 30 78 30 31 30 30 20 20 20 2f 2a 20 4f 6d 69 74  0x0100   /* Omit
e900: 20 75 6e 75 73 65 64 20 74 61 62 6c 65 73 20 69   unused tables i
e910: 6e 20 6a 6f 69 6e 73 20 2a 2f 0a 23 64 65 66 69  n joins */.#defi
e920: 6e 65 20 53 51 4c 49 54 45 5f 43 6f 75 6e 74 4f  ne SQLITE_CountO
e930: 66 56 69 65 77 20 20 20 20 30 78 30 32 30 30 20  fView    0x0200 
e940: 20 20 2f 2a 20 54 68 65 20 63 6f 75 6e 74 2d 6f    /* The count-o
e950: 66 2d 76 69 65 77 20 6f 70 74 69 6d 69 7a 61 74  f-view optimizat
e960: 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ion */.#define S
e970: 51 4c 49 54 45 5f 43 75 72 73 6f 72 48 69 6e 74  QLITE_CursorHint
e980: 73 20 20 20 20 30 78 30 34 30 30 20 20 20 2f 2a  s    0x0400   /*
e990: 20 41 64 64 20 4f 50 5f 43 75 72 73 6f 72 48 69   Add OP_CursorHi
e9a0: 6e 74 20 6f 70 63 6f 64 65 73 20 2a 2f 0a 23 64  nt opcodes */.#d
e9b0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 74 61  efine SQLITE_Sta
e9c0: 74 33 34 20 20 20 20 20 20 20 20 20 30 78 30 38  t34         0x08
e9d0: 30 30 20 20 20 2f 2a 20 55 73 65 20 53 54 41 54  00   /* Use STAT
e9e0: 33 20 6f 72 20 53 54 41 54 34 20 64 61 74 61 20  3 or STAT4 data 
e9f0: 2a 2f 0a 20 20 20 2f 2a 20 54 48 33 20 65 78 70  */.   /* TH3 exp
ea00: 65 63 74 73 20 74 68 65 20 53 74 61 74 33 34 20  ects the Stat34 
ea10: 20 5e 5e 5e 5e 5e 5e 20 76 61 6c 75 65 20 74 6f   ^^^^^^ value to
ea20: 20 62 65 20 30 78 30 38 30 30 2e 20 20 44 6f 6e   be 0x0800.  Don
ea30: 27 74 20 63 68 61 6e 67 65 20 69 74 20 2a 2f 0a  't change it */.
ea40: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50  #define SQLITE_P
ea50: 75 73 68 44 6f 77 6e 20 20 20 20 20 20 20 30 78  ushDown       0x
ea60: 31 30 30 30 20 20 20 2f 2a 20 54 68 65 20 70 75  1000   /* The pu
ea70: 73 68 2d 64 6f 77 6e 20 6f 70 74 69 6d 69 7a 61  sh-down optimiza
ea80: 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  tion */.#define 
ea90: 53 51 4c 49 54 45 5f 53 69 6d 70 6c 69 66 79 4a  SQLITE_SimplifyJ
eaa0: 6f 69 6e 20 20 20 30 78 32 30 30 30 20 20 20 2f  oin   0x2000   /
eab0: 2a 20 43 6f 6e 76 65 72 74 20 4c 45 46 54 20 4a  * Convert LEFT J
eac0: 4f 49 4e 20 74 6f 20 4a 4f 49 4e 20 2a 2f 0a 23  OIN to JOIN */.#
ead0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 6c  define SQLITE_Al
eae0: 6c 4f 70 74 73 20 20 20 20 20 20 20 20 30 78 66  lOpts        0xf
eaf0: 66 66 66 20 20 20 2f 2a 20 41 6c 6c 20 6f 70 74  fff   /* All opt
eb00: 69 6d 69 7a 61 74 69 6f 6e 73 20 2a 2f 0a 0a 2f  imizations */../
eb10: 2a 0a 2a 2a 20 4d 61 63 72 6f 73 20 66 6f 72 20  *.** Macros for 
eb20: 74 65 73 74 69 6e 67 20 77 68 65 74 68 65 72 20  testing whether 
eb30: 6f 72 20 6e 6f 74 20 6f 70 74 69 6d 69 7a 61 74  or not optimizat
eb40: 69 6f 6e 73 20 61 72 65 20 65 6e 61 62 6c 65 64  ions are enabled
eb50: 20 6f 72 20 64 69 73 61 62 6c 65 64 2e 0a 2a 2f   or disabled..*/
eb60: 0a 23 64 65 66 69 6e 65 20 4f 70 74 69 6d 69 7a  .#define Optimiz
eb70: 61 74 69 6f 6e 44 69 73 61 62 6c 65 64 28 64 62  ationDisabled(db
eb80: 2c 20 6d 61 73 6b 29 20 20 28 28 28 64 62 29 2d  , mask)  (((db)-
eb90: 3e 64 62 4f 70 74 46 6c 61 67 73 26 28 6d 61 73  >dbOptFlags&(mas
eba0: 6b 29 29 21 3d 30 29 0a 23 64 65 66 69 6e 65 20  k))!=0).#define 
ebb0: 4f 70 74 69 6d 69 7a 61 74 69 6f 6e 45 6e 61 62  OptimizationEnab
ebc0: 6c 65 64 28 64 62 2c 20 6d 61 73 6b 29 20 20 20  led(db, mask)   
ebd0: 28 28 28 64 62 29 2d 3e 64 62 4f 70 74 46 6c 61  (((db)->dbOptFla
ebe0: 67 73 26 28 6d 61 73 6b 29 29 3d 3d 30 29 0a 0a  gs&(mask))==0)..
ebf0: 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74 72 75  /*.** Return tru
ec00: 65 20 69 66 20 69 74 20 4f 4b 20 74 6f 20 66 61  e if it OK to fa
ec10: 63 74 6f 72 20 63 6f 6e 73 74 61 6e 74 20 65 78  ctor constant ex
ec20: 70 72 65 73 73 69 6f 6e 73 20 69 6e 74 6f 20 74  pressions into t
ec30: 68 65 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f  he initializatio
ec40: 6e 0a 2a 2a 20 63 6f 64 65 2e 20 54 68 65 20 61  n.** code. The a
ec50: 72 67 75 6d 65 6e 74 20 69 73 20 61 20 50 61 72  rgument is a Par
ec60: 73 65 20 6f 62 6a 65 63 74 20 66 6f 72 20 74 68  se object for th
ec70: 65 20 63 6f 64 65 20 67 65 6e 65 72 61 74 6f 72  e code generator
ec80: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 43 6f 6e  ..*/.#define Con
ec90: 73 74 46 61 63 74 6f 72 4f 6b 28 50 29 20 28 28  stFactorOk(P) ((
eca0: 50 29 2d 3e 6f 6b 43 6f 6e 73 74 46 61 63 74 6f  P)->okConstFacto
ecb0: 72 29 0a 0a 2f 2a 0a 2a 2a 20 50 6f 73 73 69 62  r)../*.** Possib
ecc0: 6c 65 20 76 61 6c 75 65 73 20 66 6f 72 20 74 68  le values for th
ecd0: 65 20 73 71 6c 69 74 65 2e 6d 61 67 69 63 20 66  e sqlite.magic f
ece0: 69 65 6c 64 2e 0a 2a 2a 20 54 68 65 20 6e 75 6d  ield..** The num
ecf0: 62 65 72 73 20 61 72 65 20 6f 62 74 61 69 6e 65  bers are obtaine
ed00: 64 20 61 74 20 72 61 6e 64 6f 6d 20 61 6e 64 20  d at random and 
ed10: 68 61 76 65 20 6e 6f 20 73 70 65 63 69 61 6c 20  have no special 
ed20: 6d 65 61 6e 69 6e 67 2c 20 6f 74 68 65 72 0a 2a  meaning, other.*
ed30: 2a 20 74 68 61 6e 20 62 65 69 6e 67 20 64 69 73  * than being dis
ed40: 74 69 6e 63 74 20 66 72 6f 6d 20 6f 6e 65 20 61  tinct from one a
ed50: 6e 6f 74 68 65 72 2e 0a 2a 2f 0a 23 64 65 66 69  nother..*/.#defi
ed60: 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f  ne SQLITE_MAGIC_
ed70: 4f 50 45 4e 20 20 20 20 20 30 78 61 30 32 39 61  OPEN     0xa029a
ed80: 36 39 37 20 20 2f 2a 20 44 61 74 61 62 61 73 65  697  /* Database
ed90: 20 69 73 20 6f 70 65 6e 20 2a 2f 0a 23 64 65 66   is open */.#def
eda0: 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47 49 43  ine SQLITE_MAGIC
edb0: 5f 43 4c 4f 53 45 44 20 20 20 30 78 39 66 33 63  _CLOSED   0x9f3c
edc0: 32 64 33 33 20 20 2f 2a 20 44 61 74 61 62 61 73  2d33  /* Databas
edd0: 65 20 69 73 20 63 6c 6f 73 65 64 20 2a 2f 0a 23  e is closed */.#
ede0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41  define SQLITE_MA
edf0: 47 49 43 5f 53 49 43 4b 20 20 20 20 20 30 78 34  GIC_SICK     0x4
ee00: 62 37 37 31 32 39 30 20 20 2f 2a 20 45 72 72 6f  b771290  /* Erro
ee10: 72 20 61 6e 64 20 61 77 61 69 74 69 6e 67 20 63  r and awaiting c
ee20: 6c 6f 73 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  lose */.#define 
ee30: 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 42 55 53  SQLITE_MAGIC_BUS
ee40: 59 20 20 20 20 20 30 78 66 30 33 62 37 39 30 36  Y     0xf03b7906
ee50: 20 20 2f 2a 20 44 61 74 61 62 61 73 65 20 63 75    /* Database cu
ee60: 72 72 65 6e 74 6c 79 20 69 6e 20 75 73 65 20 2a  rrently in use *
ee70: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
ee80: 5f 4d 41 47 49 43 5f 45 52 52 4f 52 20 20 20 20  _MAGIC_ERROR    
ee90: 30 78 62 35 33 35 37 39 33 30 20 20 2f 2a 20 41  0xb5357930  /* A
eea0: 6e 20 53 51 4c 49 54 45 5f 4d 49 53 55 53 45 20  n SQLITE_MISUSE 
eeb0: 65 72 72 6f 72 20 6f 63 63 75 72 72 65 64 20 2a  error occurred *
eec0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
eed0: 5f 4d 41 47 49 43 5f 5a 4f 4d 42 49 45 20 20 20  _MAGIC_ZOMBIE   
eee0: 30 78 36 34 63 66 66 63 37 66 20 20 2f 2a 20 43  0x64cffc7f  /* C
eef0: 6c 6f 73 65 20 77 69 74 68 20 6c 61 73 74 20 73  lose with last s
ef00: 74 61 74 65 6d 65 6e 74 20 63 6c 6f 73 65 20 2a  tatement close *
ef10: 2f 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 53 51  /../*.** Each SQ
ef20: 4c 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 64 65  L function is de
ef30: 66 69 6e 65 64 20 62 79 20 61 6e 20 69 6e 73 74  fined by an inst
ef40: 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c  ance of the foll
ef50: 6f 77 69 6e 67 0a 2a 2a 20 73 74 72 75 63 74 75  owing.** structu
ef60: 72 65 2e 20 20 46 6f 72 20 67 6c 6f 62 61 6c 20  re.  For global 
ef70: 62 75 69 6c 74 2d 69 6e 20 66 75 6e 63 74 69 6f  built-in functio
ef80: 6e 73 20 28 65 78 3a 20 73 75 62 73 74 72 28 29  ns (ex: substr()
ef90: 2c 20 6d 61 78 28 29 2c 20 63 6f 75 6e 74 28 29  , max(), count()
efa0: 29 0a 2a 2a 20 61 20 70 6f 69 6e 74 65 72 20 74  ).** a pointer t
efb0: 6f 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65  o this structure
efc0: 20 69 73 20 68 65 6c 64 20 69 6e 20 74 68 65 20   is held in the 
efd0: 73 71 6c 69 74 65 33 42 75 69 6c 74 69 6e 46 75  sqlite3BuiltinFu
efe0: 6e 63 74 69 6f 6e 73 20 6f 62 6a 65 63 74 2e 0a  nctions object..
eff0: 2a 2a 20 46 6f 72 20 70 65 72 2d 63 6f 6e 6e 65  ** For per-conne
f000: 63 74 69 6f 6e 20 61 70 70 6c 69 63 61 74 69 6f  ction applicatio
f010: 6e 2d 64 65 66 69 6e 65 64 20 66 75 6e 63 74 69  n-defined functi
f020: 6f 6e 73 2c 20 61 20 70 6f 69 6e 74 65 72 20 74  ons, a pointer t
f030: 6f 20 74 68 69 73 0a 2a 2a 20 73 74 72 75 63 74  o this.** struct
f040: 75 72 65 20 69 73 20 68 65 6c 64 20 69 6e 20 74  ure is held in t
f050: 68 65 20 64 62 2d 3e 61 48 61 73 68 20 68 61 73  he db->aHash has
f060: 68 20 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 54  h table..**.** T
f070: 68 65 20 75 2e 70 48 61 73 68 20 66 69 65 6c 64  he u.pHash field
f080: 20 69 73 20 75 73 65 64 20 62 79 20 74 68 65 20   is used by the 
f090: 67 6c 6f 62 61 6c 20 62 75 69 6c 74 2d 69 6e 73  global built-ins
f0a0: 2e 20 20 54 68 65 20 75 2e 70 44 65 73 74 72 75  .  The u.pDestru
f0b0: 63 74 6f 72 0a 2a 2a 20 66 69 65 6c 64 20 69 73  ctor.** field is
f0c0: 20 75 73 65 64 20 62 79 20 70 65 72 2d 63 6f 6e   used by per-con
f0d0: 6e 65 63 74 69 6f 6e 20 61 70 70 2d 64 65 66 20  nection app-def 
f0e0: 66 75 6e 63 74 69 6f 6e 73 2e 0a 2a 2f 0a 73 74  functions..*/.st
f0f0: 72 75 63 74 20 46 75 6e 63 44 65 66 20 7b 0a 20  ruct FuncDef {. 
f100: 20 69 38 20 6e 41 72 67 3b 20 20 20 20 20 20 20   i8 nArg;       
f110: 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
f120: 6f 66 20 61 72 67 75 6d 65 6e 74 73 2e 20 20 2d  of arguments.  -
f130: 31 20 6d 65 61 6e 73 20 75 6e 6c 69 6d 69 74 65  1 means unlimite
f140: 64 20 2a 2f 0a 20 20 75 33 32 20 66 75 6e 63 46  d */.  u32 funcF
f150: 6c 61 67 73 3b 20 20 20 20 20 20 20 2f 2a 20 53  lags;       /* S
f160: 6f 6d 65 20 63 6f 6d 62 69 6e 61 74 69 6f 6e 20  ome combination 
f170: 6f 66 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 2a  of SQLITE_FUNC_*
f180: 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 55 73 65   */.  void *pUse
f190: 72 44 61 74 61 3b 20 20 20 20 20 2f 2a 20 55 73  rData;     /* Us
f1a0: 65 72 20 64 61 74 61 20 70 61 72 61 6d 65 74 65  er data paramete
f1b0: 72 20 2a 2f 0a 20 20 46 75 6e 63 44 65 66 20 2a  r */.  FuncDef *
f1c0: 70 4e 65 78 74 3b 20 20 20 20 20 20 2f 2a 20 4e  pNext;      /* N
f1d0: 65 78 74 20 66 75 6e 63 74 69 6f 6e 20 77 69 74  ext function wit
f1e0: 68 20 73 61 6d 65 20 6e 61 6d 65 20 2a 2f 0a 20  h same name */. 
f1f0: 20 76 6f 69 64 20 28 2a 78 53 46 75 6e 63 29 28   void (*xSFunc)(
f200: 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a  sqlite3_context*
f210: 2c 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c  ,int,sqlite3_val
f220: 75 65 2a 2a 29 3b 20 2f 2a 20 66 75 6e 63 20 6f  ue**); /* func o
f230: 72 20 61 67 67 2d 73 74 65 70 20 2a 2f 0a 20 20  r agg-step */.  
f240: 76 6f 69 64 20 28 2a 78 46 69 6e 61 6c 69 7a 65  void (*xFinalize
f250: 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78  )(sqlite3_contex
f260: 74 2a 29 3b 20 20 20 20 20 20 20 20 20 20 20 20  t*);            
f270: 20 20 20 20 20 20 2f 2a 20 41 67 67 20 66 69 6e        /* Agg fin
f280: 61 6c 69 7a 65 72 20 2a 2f 0a 20 20 76 6f 69 64  alizer */.  void
f290: 20 28 2a 78 56 61 6c 75 65 29 28 73 71 6c 69 74   (*xValue)(sqlit
f2a0: 65 33 5f 63 6f 6e 74 65 78 74 2a 29 3b 20 20 20  e3_context*);   
f2b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f2c0: 20 20 2f 2a 20 43 75 72 72 65 6e 74 20 61 67 67    /* Current agg
f2d0: 20 76 61 6c 75 65 20 2a 2f 0a 20 20 76 6f 69 64   value */.  void
f2e0: 20 28 2a 78 49 6e 76 65 72 73 65 29 28 73 71 6c   (*xInverse)(sql
f2f0: 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e  ite3_context*,in
f300: 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a  t,sqlite3_value*
f310: 2a 29 3b 20 2f 2a 20 69 6e 76 65 72 73 65 20 61  *); /* inverse a
f320: 67 67 2d 73 74 65 70 20 2a 2f 0a 20 20 63 6f 6e  gg-step */.  con
f330: 73 74 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20  st char *zName; 
f340: 20 20 2f 2a 20 53 51 4c 20 6e 61 6d 65 20 6f 66    /* SQL name of
f350: 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 2e 20 2a   the function. *
f360: 2f 0a 20 20 75 6e 69 6f 6e 20 7b 0a 20 20 20 20  /.  union {.    
f370: 46 75 6e 63 44 65 66 20 2a 70 48 61 73 68 3b 20  FuncDef *pHash; 
f380: 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 77 69 74       /* Next wit
f390: 68 20 61 20 64 69 66 66 65 72 65 6e 74 20 6e 61  h a different na
f3a0: 6d 65 20 62 75 74 20 74 68 65 20 73 61 6d 65 20  me but the same 
f3b0: 68 61 73 68 20 2a 2f 0a 20 20 20 20 46 75 6e 63  hash */.    Func
f3c0: 44 65 73 74 72 75 63 74 6f 72 20 2a 70 44 65 73  Destructor *pDes
f3d0: 74 72 75 63 74 6f 72 3b 20 20 20 2f 2a 20 52 65  tructor;   /* Re
f3e0: 66 65 72 65 6e 63 65 20 63 6f 75 6e 74 65 64 20  ference counted 
f3f0: 64 65 73 74 72 75 63 74 6f 72 20 66 75 6e 63 74  destructor funct
f400: 69 6f 6e 20 2a 2f 0a 20 20 7d 20 75 3b 0a 7d 3b  ion */.  } u;.};
f410: 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 73 74 72  ../*.** This str
f420: 75 63 74 75 72 65 20 65 6e 63 61 70 73 75 6c 61  ucture encapsula
f430: 74 65 73 20 61 20 75 73 65 72 2d 66 75 6e 63 74  tes a user-funct
f440: 69 6f 6e 20 64 65 73 74 72 75 63 74 6f 72 20 63  ion destructor c
f450: 61 6c 6c 62 61 63 6b 20 28 61 73 0a 2a 2a 20 63  allback (as.** c
f460: 6f 6e 66 69 67 75 72 65 64 20 75 73 69 6e 67 20  onfigured using 
f470: 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 5f  create_function_
f480: 76 32 28 29 29 20 61 6e 64 20 61 20 72 65 66 65  v2()) and a refe
f490: 72 65 6e 63 65 20 63 6f 75 6e 74 65 72 2e 20 57  rence counter. W
f4a0: 68 65 6e 0a 2a 2a 20 63 72 65 61 74 65 5f 66 75  hen.** create_fu
f4b0: 6e 63 74 69 6f 6e 5f 76 32 28 29 20 69 73 20 63  nction_v2() is c
f4c0: 61 6c 6c 65 64 20 74 6f 20 63 72 65 61 74 65 20  alled to create 
f4d0: 61 20 66 75 6e 63 74 69 6f 6e 20 77 69 74 68 20  a function with 
f4e0: 61 20 64 65 73 74 72 75 63 74 6f 72 2c 0a 2a 2a  a destructor,.**
f4f0: 20 61 20 73 69 6e 67 6c 65 20 6f 62 6a 65 63 74   a single object
f500: 20 6f 66 20 74 68 69 73 20 74 79 70 65 20 69 73   of this type is
f510: 20 61 6c 6c 6f 63 61 74 65 64 2e 20 46 75 6e 63   allocated. Func
f520: 44 65 73 74 72 75 63 74 6f 72 2e 6e 52 65 66 20  Destructor.nRef 
f530: 69 73 20 73 65 74 20 74 6f 0a 2a 2a 20 74 68 65  is set to.** the
f540: 20 6e 75 6d 62 65 72 20 6f 66 20 46 75 6e 63 44   number of FuncD
f550: 65 66 20 6f 62 6a 65 63 74 73 20 63 72 65 61 74  ef objects creat
f560: 65 64 20 28 65 69 74 68 65 72 20 31 20 6f 72 20  ed (either 1 or 
f570: 33 2c 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20  3, depending on 
f580: 77 68 65 74 68 65 72 0a 2a 2a 20 6f 72 20 6e 6f  whether.** or no
f590: 74 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20  t the specified 
f5a0: 65 6e 63 6f 64 69 6e 67 20 69 73 20 53 51 4c 49  encoding is SQLI
f5b0: 54 45 5f 41 4e 59 29 2e 20 54 68 65 20 46 75 6e  TE_ANY). The Fun
f5c0: 63 44 65 66 2e 70 44 65 73 74 72 75 63 74 6f 72  cDef.pDestructor
f5d0: 0a 2a 2a 20 6d 65 6d 62 65 72 20 6f 66 20 65 61  .** member of ea
f5e0: 63 68 20 6f 66 20 74 68 65 20 6e 65 77 20 46 75  ch of the new Fu
f5f0: 6e 63 44 65 66 20 6f 62 6a 65 63 74 73 20 69 73  ncDef objects is
f600: 20 73 65 74 20 74 6f 20 70 6f 69 6e 74 20 74 6f   set to point to
f610: 20 74 68 65 20 61 6c 6c 6f 63 61 74 65 64 0a 2a   the allocated.*
f620: 2a 20 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72  * FuncDestructor
f630: 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 72 65 61 66 74  ..**.** Thereaft
f640: 65 72 2c 20 77 68 65 6e 20 6f 6e 65 20 6f 66 20  er, when one of 
f650: 74 68 65 20 46 75 6e 63 44 65 66 20 6f 62 6a 65  the FuncDef obje
f660: 63 74 73 20 69 73 20 64 65 6c 65 74 65 64 2c 20  cts is deleted, 
f670: 74 68 65 20 72 65 66 65 72 65 6e 63 65 0a 2a 2a  the reference.**
f680: 20 63 6f 75 6e 74 20 6f 6e 20 74 68 69 73 20 6f   count on this o
f690: 62 6a 65 63 74 20 69 73 20 64 65 63 72 65 6d 65  bject is decreme
f6a0: 6e 74 65 64 2e 20 57 68 65 6e 20 69 74 20 72 65  nted. When it re
f6b0: 61 63 68 65 73 20 30 2c 20 74 68 65 20 64 65 73  aches 0, the des
f6c0: 74 72 75 63 74 6f 72 0a 2a 2a 20 69 73 20 69 6e  tructor.** is in
f6d0: 76 6f 6b 65 64 20 61 6e 64 20 74 68 65 20 46 75  voked and the Fu
f6e0: 6e 63 44 65 73 74 72 75 63 74 6f 72 20 73 74 72  ncDestructor str
f6f0: 75 63 74 75 72 65 20 66 72 65 65 64 2e 0a 2a 2f  ucture freed..*/
f700: 0a 73 74 72 75 63 74 20 46 75 6e 63 44 65 73 74  .struct FuncDest
f710: 72 75 63 74 6f 72 20 7b 0a 20 20 69 6e 74 20 6e  ructor {.  int n
f720: 52 65 66 3b 0a 20 20 76 6f 69 64 20 28 2a 78 44  Ref;.  void (*xD
f730: 65 73 74 72 6f 79 29 28 76 6f 69 64 20 2a 29 3b  estroy)(void *);
f740: 0a 20 20 76 6f 69 64 20 2a 70 55 73 65 72 44 61  .  void *pUserDa
f750: 74 61 3b 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 50 6f  ta;.};../*.** Po
f760: 73 73 69 62 6c 65 20 76 61 6c 75 65 73 20 66 6f  ssible values fo
f770: 72 20 46 75 6e 63 44 65 66 2e 66 6c 61 67 73 2e  r FuncDef.flags.
f780: 20 20 4e 6f 74 65 20 74 68 61 74 20 74 68 65 20    Note that the 
f790: 5f 4c 45 4e 47 54 48 20 61 6e 64 20 5f 54 59 50  _LENGTH and _TYP
f7a0: 45 4f 46 0a 2a 2a 20 76 61 6c 75 65 73 20 6d 75  EOF.** values mu
f7b0: 73 74 20 63 6f 72 72 65 73 70 6f 6e 64 20 74 6f  st correspond to
f7c0: 20 4f 50 46 4c 41 47 5f 4c 45 4e 47 54 48 41 52   OPFLAG_LENGTHAR
f7d0: 47 20 61 6e 64 20 4f 50 46 4c 41 47 5f 54 59 50  G and OPFLAG_TYP
f7e0: 45 4f 46 41 52 47 2e 20 20 41 6e 64 0a 2a 2a 20  EOFARG.  And.** 
f7f0: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53  SQLITE_FUNC_CONS
f800: 54 41 4e 54 20 6d 75 73 74 20 62 65 20 74 68 65  TANT must be the
f810: 20 73 61 6d 65 20 61 73 20 53 51 4c 49 54 45 5f   same as SQLITE_
f820: 44 45 54 45 52 4d 49 4e 49 53 54 49 43 2e 20 20  DETERMINISTIC.  
f830: 54 68 65 72 65 0a 2a 2a 20 61 72 65 20 61 73 73  There.** are ass
f840: 65 72 74 28 29 20 73 74 61 74 65 6d 65 6e 74 73  ert() statements
f850: 20 69 6e 20 74 68 65 20 63 6f 64 65 20 74 6f 20   in the code to 
f860: 76 65 72 69 66 79 20 74 68 69 73 2e 0a 2a 2a 0a  verify this..**.
f870: 2a 2a 20 56 61 6c 75 65 20 63 6f 6e 73 74 72 61  ** Value constra
f880: 69 6e 74 73 20 28 65 6e 66 6f 72 63 65 64 20 76  ints (enforced v
f890: 69 61 20 61 73 73 65 72 74 28 29 29 3a 0a 2a 2a  ia assert()):.**
f8a0: 20 20 20 20 20 53 51 4c 49 54 45 5f 46 55 4e 43       SQLITE_FUNC
f8b0: 5f 4d 49 4e 4d 41 58 20 20 20 20 3d 3d 20 20 4e  _MINMAX    ==  N
f8c0: 43 5f 4d 69 6e 4d 61 78 41 67 67 20 20 20 20 20  C_MinMaxAgg     
f8d0: 20 3d 3d 20 53 46 5f 4d 69 6e 4d 61 78 41 67 67   == SF_MinMaxAgg
f8e0: 0a 2a 2a 20 20 20 20 20 53 51 4c 49 54 45 5f 46  .**     SQLITE_F
f8f0: 55 4e 43 5f 4c 45 4e 47 54 48 20 20 20 20 3d 3d  UNC_LENGTH    ==
f900: 20 20 4f 50 46 4c 41 47 5f 4c 45 4e 47 54 48 41    OPFLAG_LENGTHA
f910: 52 47 0a 2a 2a 20 20 20 20 20 53 51 4c 49 54 45  RG.**     SQLITE
f920: 5f 46 55 4e 43 5f 54 59 50 45 4f 46 20 20 20 20  _FUNC_TYPEOF    
f930: 3d 3d 20 20 4f 50 46 4c 41 47 5f 54 59 50 45 4f  ==  OPFLAG_TYPEO
f940: 46 41 52 47 0a 2a 2a 20 20 20 20 20 53 51 4c 49  FARG.**     SQLI
f950: 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54  TE_FUNC_CONSTANT
f960: 20 20 3d 3d 20 20 53 51 4c 49 54 45 5f 44 45 54    ==  SQLITE_DET
f970: 45 52 4d 49 4e 49 53 54 49 43 20 66 72 6f 6d 20  ERMINISTIC from 
f980: 74 68 65 20 41 50 49 0a 2a 2a 20 20 20 20 20 53  the API.**     S
f990: 51 4c 49 54 45 5f 46 55 4e 43 5f 45 4e 43 4d 41  QLITE_FUNC_ENCMA
f9a0: 53 4b 20 20 20 64 65 70 65 6e 64 73 20 6f 6e 20  SK   depends on 
f9b0: 53 51 4c 49 54 45 5f 55 54 46 2a 20 6d 61 63 72  SQLITE_UTF* macr
f9c0: 6f 73 20 69 6e 20 74 68 65 20 41 50 49 0a 2a 2f  os in the API.*/
f9d0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
f9e0: 46 55 4e 43 5f 45 4e 43 4d 41 53 4b 20 20 30 78  FUNC_ENCMASK  0x
f9f0: 30 30 30 33 20 2f 2a 20 53 51 4c 49 54 45 5f 55  0003 /* SQLITE_U
fa00: 54 46 38 2c 20 53 51 4c 49 54 45 5f 55 54 46 31  TF8, SQLITE_UTF1
fa10: 36 42 45 20 6f 72 20 55 54 46 31 36 4c 45 20 2a  6BE or UTF16LE *
fa20: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
fa30: 5f 46 55 4e 43 5f 4c 49 4b 45 20 20 20 20 20 30  _FUNC_LIKE     0
fa40: 78 30 30 30 34 20 2f 2a 20 43 61 6e 64 69 64 61  x0004 /* Candida
fa50: 74 65 20 66 6f 72 20 74 68 65 20 4c 49 4b 45 20  te for the LIKE 
fa60: 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 20 2a 2f 0a  optimization */.
fa70: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46  #define SQLITE_F
fa80: 55 4e 43 5f 43 41 53 45 20 20 20 20 20 30 78 30  UNC_CASE     0x0
fa90: 30 30 38 20 2f 2a 20 43 61 73 65 2d 73 65 6e 73  008 /* Case-sens
faa0: 69 74 69 76 65 20 4c 49 4b 45 2d 74 79 70 65 20  itive LIKE-type 
fab0: 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66  function */.#def
fac0: 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f  ine SQLITE_FUNC_
fad0: 45 50 48 45 4d 20 20 20 20 30 78 30 30 31 30 20  EPHEM    0x0010 
fae0: 2f 2a 20 45 70 68 65 6d 65 72 61 6c 2e 20 20 44  /* Ephemeral.  D
faf0: 65 6c 65 74 65 20 77 69 74 68 20 56 44 42 45 20  elete with VDBE 
fb00: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
fb10: 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 20  E_FUNC_NEEDCOLL 
fb20: 30 78 30 30 32 30 20 2f 2a 20 73 71 6c 69 74 65  0x0020 /* sqlite
fb30: 33 47 65 74 46 75 6e 63 43 6f 6c 6c 53 65 71 28  3GetFuncCollSeq(
fb40: 29 20 6d 69 67 68 74 20 62 65 20 63 61 6c 6c 65  ) might be calle
fb50: 64 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  d*/.#define SQLI
fb60: 54 45 5f 46 55 4e 43 5f 4c 45 4e 47 54 48 20 20  TE_FUNC_LENGTH  
fb70: 20 30 78 30 30 34 30 20 2f 2a 20 42 75 69 6c 74   0x0040 /* Built
fb80: 2d 69 6e 20 6c 65 6e 67 74 68 28 29 20 66 75 6e  -in length() fun
fb90: 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65  ction */.#define
fba0: 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 54 59 50   SQLITE_FUNC_TYP
fbb0: 45 4f 46 20 20 20 30 78 30 30 38 30 20 2f 2a 20  EOF   0x0080 /* 
fbc0: 42 75 69 6c 74 2d 69 6e 20 74 79 70 65 6f 66 28  Built-in typeof(
fbd0: 29 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64  ) function */.#d
fbe0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e  efine SQLITE_FUN
fbf0: 43 5f 43 4f 55 4e 54 20 20 20 20 30 78 30 31 30  C_COUNT    0x010
fc00: 30 20 2f 2a 20 42 75 69 6c 74 2d 69 6e 20 63 6f  0 /* Built-in co
fc10: 75 6e 74 28 2a 29 20 61 67 67 72 65 67 61 74 65  unt(*) aggregate
fc20: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
fc30: 54 45 5f 46 55 4e 43 5f 43 4f 41 4c 45 53 43 45  TE_FUNC_COALESCE
fc40: 20 30 78 30 32 30 30 20 2f 2a 20 42 75 69 6c 74   0x0200 /* Built
fc50: 2d 69 6e 20 63 6f 61 6c 65 73 63 65 28 29 20 6f  -in coalesce() o
fc60: 72 20 69 66 6e 75 6c 6c 28 29 20 2a 2f 0a 23 64  r ifnull() */.#d
fc70: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e  efine SQLITE_FUN
fc80: 43 5f 55 4e 4c 49 4b 45 4c 59 20 30 78 30 34 30  C_UNLIKELY 0x040
fc90: 30 20 2f 2a 20 42 75 69 6c 74 2d 69 6e 20 75 6e  0 /* Built-in un
fca0: 6c 69 6b 65 6c 79 28 29 20 66 75 6e 63 74 69 6f  likely() functio
fcb0: 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  n */.#define SQL
fcc0: 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e  ITE_FUNC_CONSTAN
fcd0: 54 20 30 78 30 38 30 30 20 2f 2a 20 43 6f 6e 73  T 0x0800 /* Cons
fce0: 74 61 6e 74 20 69 6e 70 75 74 73 20 67 69 76 65  tant inputs give
fcf0: 20 61 20 63 6f 6e 73 74 61 6e 74 20 6f 75 74 70   a constant outp
fd00: 75 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  ut */.#define SQ
fd10: 4c 49 54 45 5f 46 55 4e 43 5f 4d 49 4e 4d 41 58  LITE_FUNC_MINMAX
fd20: 20 20 20 30 78 31 30 30 30 20 2f 2a 20 54 72 75     0x1000 /* Tru
fd30: 65 20 66 6f 72 20 6d 69 6e 28 29 20 61 6e 64 20  e for min() and 
fd40: 6d 61 78 28 29 20 61 67 67 72 65 67 61 74 65 73  max() aggregates
fd50: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
fd60: 54 45 5f 46 55 4e 43 5f 53 4c 4f 43 48 4e 47 20  TE_FUNC_SLOCHNG 
fd70: 20 30 78 32 30 30 30 20 2f 2a 20 22 53 6c 6f 77   0x2000 /* "Slow
fd80: 20 43 68 61 6e 67 65 22 2e 20 56 61 6c 75 65 20   Change". Value 
fd90: 63 6f 6e 73 74 61 6e 74 20 64 75 72 69 6e 67 20  constant during 
fda0: 61 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  a.              
fdb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fdc0: 20 20 20 20 20 20 2a 2a 20 73 69 6e 67 6c 65 20        ** single 
fdd0: 71 75 65 72 79 20 2d 20 6d 69 67 68 74 20 63 68  query - might ch
fde0: 61 6e 67 65 20 6f 76 65 72 20 74 69 6d 65 20 2a  ange over time *
fdf0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
fe00: 5f 46 55 4e 43 5f 41 46 46 49 4e 49 54 59 20 30  _FUNC_AFFINITY 0
fe10: 78 34 30 30 30 20 2f 2a 20 42 75 69 6c 74 2d 69  x4000 /* Built-i
fe20: 6e 20 61 66 66 69 6e 69 74 79 28 29 20 66 75 6e  n affinity() fun
fe30: 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65  ction */.#define
fe40: 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4f 46 46   SQLITE_FUNC_OFF
fe50: 53 45 54 20 20 20 30 78 38 30 30 30 20 2f 2a 20  SET   0x8000 /* 
fe60: 42 75 69 6c 74 2d 69 6e 20 73 71 6c 69 74 65 5f  Built-in sqlite_
fe70: 6f 66 66 73 65 74 28 29 20 66 75 6e 63 74 69 6f  offset() functio
fe80: 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  n */.#define SQL
fe90: 49 54 45 5f 46 55 4e 43 5f 57 49 4e 44 4f 57 20  ITE_FUNC_WINDOW 
fea0: 20 30 78 31 30 30 30 30 20 2f 2a 20 42 75 69 6c   0x10000 /* Buil
feb0: 74 2d 69 6e 20 77 69 6e 64 6f 77 2d 6f 6e 6c 79  t-in window-only
fec0: 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65   function */.#de
fed0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43  fine SQLITE_FUNC
fee0: 5f 57 49 4e 44 4f 57 5f 53 49 5a 45 20 20 30 78  _WINDOW_SIZE  0x
fef0: 32 30 30 30 30 20 20 2f 2a 20 52 65 71 75 69 72  20000  /* Requir
ff00: 65 73 20 70 61 72 74 69 74 69 6f 6e 20 73 69 7a  es partition siz
ff10: 65 20 61 73 20 61 72 67 2e 20 2a 2f 0a 0a 2f 2a  e as arg. */../*
ff20: 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e  .** The followin
ff30: 67 20 74 68 72 65 65 20 6d 61 63 72 6f 73 2c 20  g three macros, 
ff40: 46 55 4e 43 54 49 4f 4e 28 29 2c 20 4c 49 4b 45  FUNCTION(), LIKE
ff50: 46 55 4e 43 28 29 20 61 6e 64 20 41 47 47 52 45  FUNC() and AGGRE
ff60: 47 41 54 45 28 29 20 61 72 65 0a 2a 2a 20 75 73  GATE() are.** us
ff70: 65 64 20 74 6f 20 63 72 65 61 74 65 20 74 68 65  ed to create the
ff80: 20 69 6e 69 74 69 61 6c 69 7a 65 72 73 20 66 6f   initializers fo
ff90: 72 20 74 68 65 20 46 75 6e 63 44 65 66 20 73 74  r the FuncDef st
ffa0: 72 75 63 74 75 72 65 73 2e 0a 2a 2a 0a 2a 2a 20  ructures..**.** 
ffb0: 20 20 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65    FUNCTION(zName
ffc0: 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c 20 62 4e  , nArg, iArg, bN
ffd0: 43 2c 20 78 46 75 6e 63 29 0a 2a 2a 20 20 20 20  C, xFunc).**    
ffe0: 20 55 73 65 64 20 74 6f 20 63 72 65 61 74 65 20   Used to create 
fff0: 61 20 73 63 61 6c 61 72 20 66 75 6e 63 74 69 6f  a scalar functio
10000 6e 20 64 65 66 69 6e 69 74 69 6f 6e 20 6f 66 20  n definition of 
10010 61 20 66 75 6e 63 74 69 6f 6e 20 7a 4e 61 6d 65  a function zName
10020 0a 2a 2a 20 20 20 20 20 69 6d 70 6c 65 6d 65 6e  .**     implemen
10030 74 65 64 20 62 79 20 43 20 66 75 6e 63 74 69 6f  ted by C functio
10040 6e 20 78 46 75 6e 63 20 74 68 61 74 20 61 63 63  n xFunc that acc
10050 65 70 74 73 20 6e 41 72 67 20 61 72 67 75 6d 65  epts nArg argume
10060 6e 74 73 2e 20 54 68 65 0a 2a 2a 20 20 20 20 20  nts. The.**     
10070 76 61 6c 75 65 20 70 61 73 73 65 64 20 61 73 20  value passed as 
10080 69 41 72 67 20 69 73 20 63 61 73 74 20 74 6f 20  iArg is cast to 
10090 61 20 28 76 6f 69 64 2a 29 20 61 6e 64 20 6d 61  a (void*) and ma
100a0 64 65 20 61 76 61 69 6c 61 62 6c 65 0a 2a 2a 20  de available.** 
100b0 20 20 20 20 61 73 20 74 68 65 20 75 73 65 72 2d      as the user-
100c0 64 61 74 61 20 28 73 71 6c 69 74 65 33 5f 75 73  data (sqlite3_us
100d0 65 72 5f 64 61 74 61 28 29 29 20 66 6f 72 20 74  er_data()) for t
100e0 68 65 20 66 75 6e 63 74 69 6f 6e 2e 20 49 66 0a  he function. If.
100f0 2a 2a 20 20 20 20 20 61 72 67 75 6d 65 6e 74 20  **     argument 
10100 62 4e 43 20 69 73 20 74 72 75 65 2c 20 74 68 65  bNC is true, the
10110 6e 20 74 68 65 20 53 51 4c 49 54 45 5f 46 55 4e  n the SQLITE_FUN
10120 43 5f 4e 45 45 44 43 4f 4c 4c 20 66 6c 61 67 20  C_NEEDCOLL flag 
10130 69 73 20 73 65 74 2e 0a 2a 2a 0a 2a 2a 20 20 20  is set..**.**   
10140 56 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c  VFUNCTION(zName,
10150 20 6e 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43   nArg, iArg, bNC
10160 2c 20 78 46 75 6e 63 29 0a 2a 2a 20 20 20 20 20  , xFunc).**     
10170 4c 69 6b 65 20 46 55 4e 43 54 49 4f 4e 20 65 78  Like FUNCTION ex
10180 63 65 70 74 20 69 74 20 6f 6d 69 74 73 20 74 68  cept it omits th
10190 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f  e SQLITE_FUNC_CO
101a0 4e 53 54 41 4e 54 20 66 6c 61 67 2e 0a 2a 2a 0a  NSTANT flag..**.
101b0 2a 2a 20 20 20 44 46 55 4e 43 54 49 4f 4e 28 7a  **   DFUNCTION(z
101c0 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72 67  Name, nArg, iArg
101d0 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29 0a 2a 2a  , bNC, xFunc).**
101e0 20 20 20 20 20 4c 69 6b 65 20 46 55 4e 43 54 49       Like FUNCTI
101f0 4f 4e 20 65 78 63 65 70 74 20 69 74 20 6f 6d 69  ON except it omi
10200 74 73 20 74 68 65 20 53 51 4c 49 54 45 5f 46 55  ts the SQLITE_FU
10210 4e 43 5f 43 4f 4e 53 54 41 4e 54 20 66 6c 61 67  NC_CONSTANT flag
10220 20 61 6e 64 0a 2a 2a 20 20 20 20 20 61 64 64 73   and.**     adds
10230 20 74 68 65 20 53 51 4c 49 54 45 5f 46 55 4e 43   the SQLITE_FUNC
10240 5f 53 4c 4f 43 48 4e 47 20 66 6c 61 67 2e 20 20  _SLOCHNG flag.  
10250 55 73 65 64 20 66 6f 72 20 64 61 74 65 20 26 20  Used for date & 
10260 74 69 6d 65 20 66 75 6e 63 74 69 6f 6e 73 0a 2a  time functions.*
10270 2a 20 20 20 20 20 61 6e 64 20 66 75 6e 63 74 69  *     and functi
10280 6f 6e 73 20 6c 69 6b 65 20 73 71 6c 69 74 65 5f  ons like sqlite_
10290 76 65 72 73 69 6f 6e 28 29 20 74 68 61 74 20 63  version() that c
102a0 61 6e 20 63 68 61 6e 67 65 2c 20 62 75 74 20 6e  an change, but n
102b0 6f 74 20 64 75 72 69 6e 67 0a 2a 2a 20 20 20 20  ot during.**    
102c0 20 61 20 73 69 6e 67 6c 65 20 71 75 65 72 79 2e   a single query.
102d0 20 20 54 68 65 20 69 41 72 67 20 69 73 20 69 67    The iArg is ig
102e0 6e 6f 72 65 64 2e 20 20 54 68 65 20 75 73 65 72  nored.  The user
102f0 2d 64 61 74 61 20 69 73 20 61 6c 77 61 79 73 20  -data is always 
10300 73 65 74 0a 2a 2a 20 20 20 20 20 74 6f 20 61 20  set.**     to a 
10310 4e 55 4c 4c 20 70 6f 69 6e 74 65 72 2e 20 20 54  NULL pointer.  T
10320 68 65 20 62 4e 43 20 70 61 72 61 6d 65 74 65 72  he bNC parameter
10330 20 69 73 20 6e 6f 74 20 75 73 65 64 2e 0a 2a 2a   is not used..**
10340 0a 2a 2a 20 20 20 50 55 52 45 5f 44 41 54 45 28  .**   PURE_DATE(
10350 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72  zName, nArg, iAr
10360 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29 0a 2a  g, bNC, xFunc).*
10370 2a 20 20 20 20 20 55 73 65 64 20 66 6f 72 20 22  *     Used for "
10380 70 75 72 65 22 20 64 61 74 65 2f 74 69 6d 65 20  pure" date/time 
10390 66 75 6e 63 74 69 6f 6e 73 2c 20 74 68 69 73 20  functions, this 
103a0 6d 61 63 72 6f 20 69 73 20 6c 69 6b 65 20 44 46  macro is like DF
103b0 55 4e 43 54 49 4f 4e 0a 2a 2a 20 20 20 20 20 65  UNCTION.**     e
103c0 78 63 65 70 74 20 74 68 61 74 20 69 74 20 64 6f  xcept that it do
103d0 65 73 20 73 65 74 20 74 68 65 20 53 51 4c 49 54  es set the SQLIT
103e0 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 20  E_FUNC_CONSTANT 
103f0 66 6c 61 67 73 2e 20 20 69 41 72 67 20 69 73 0a  flags.  iArg is.
10400 2a 2a 20 20 20 20 20 69 67 6e 6f 72 65 64 20 61  **     ignored a
10410 6e 64 20 74 68 65 20 75 73 65 72 2d 64 61 74 61  nd the user-data
10420 20 66 6f 72 20 74 68 65 73 65 20 66 75 6e 63 74   for these funct
10430 69 6f 6e 73 20 69 73 20 73 65 74 20 74 6f 20 61  ions is set to a
10440 6e 20 0a 2a 2a 20 20 20 20 20 61 72 62 69 74 72  n .**     arbitr
10450 61 72 79 20 6e 6f 6e 2d 4e 55 4c 4c 20 70 6f 69  ary non-NULL poi
10460 6e 74 65 72 2e 20 20 54 68 65 20 62 4e 43 20 70  nter.  The bNC p
10470 61 72 61 6d 65 74 65 72 20 69 73 20 6e 6f 74 20  arameter is not 
10480 75 73 65 64 2e 0a 2a 2a 0a 2a 2a 20 20 20 41 47  used..**.**   AG
10490 47 52 45 47 41 54 45 28 7a 4e 61 6d 65 2c 20 6e  GREGATE(zName, n
104a0 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20  Arg, iArg, bNC, 
104b0 78 53 74 65 70 2c 20 78 46 69 6e 61 6c 29 0a 2a  xStep, xFinal).*
104c0 2a 20 20 20 20 20 55 73 65 64 20 74 6f 20 63 72  *     Used to cr
104d0 65 61 74 65 20 61 6e 20 61 67 67 72 65 67 61 74  eate an aggregat
104e0 65 20 66 75 6e 63 74 69 6f 6e 20 64 65 66 69 6e  e function defin
104f0 69 74 69 6f 6e 20 69 6d 70 6c 65 6d 65 6e 74 65  ition implemente
10500 64 20 62 79 0a 2a 2a 20 20 20 20 20 74 68 65 20  d by.**     the 
10510 43 20 66 75 6e 63 74 69 6f 6e 73 20 78 53 74 65  C functions xSte
10520 70 20 61 6e 64 20 78 46 69 6e 61 6c 2e 20 54 68  p and xFinal. Th
10530 65 20 66 69 72 73 74 20 66 6f 75 72 20 70 61 72  e first four par
10540 61 6d 65 74 65 72 73 0a 2a 2a 20 20 20 20 20 61  ameters.**     a
10550 72 65 20 69 6e 74 65 72 70 72 65 74 65 64 20 69  re interpreted i
10560 6e 20 74 68 65 20 73 61 6d 65 20 77 61 79 20 61  n the same way a
10570 73 20 74 68 65 20 66 69 72 73 74 20 34 20 70 61  s the first 4 pa
10580 72 61 6d 65 74 65 72 73 20 74 6f 0a 2a 2a 20 20  rameters to.**  
10590 20 20 20 46 55 4e 43 54 49 4f 4e 28 29 2e 0a 2a     FUNCTION()..*
105a0 2a 0a 2a 2a 20 20 20 57 46 55 4e 43 54 49 4f 4e  *.**   WFUNCTION
105b0 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41  (zName, nArg, iA
105c0 72 67 2c 20 78 53 74 65 70 2c 20 78 46 69 6e 61  rg, xStep, xFina
105d0 6c 2c 20 78 56 61 6c 75 65 2c 20 78 49 6e 76 65  l, xValue, xInve
105e0 72 73 65 29 0a 2a 2a 20 20 20 20 20 55 73 65 64  rse).**     Used
105f0 20 74 6f 20 63 72 65 61 74 65 20 61 6e 20 61 67   to create an ag
10600 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e  gregate function
10610 20 64 65 66 69 6e 69 74 69 6f 6e 20 69 6d 70 6c   definition impl
10620 65 6d 65 6e 74 65 64 20 62 79 0a 2a 2a 20 20 20  emented by.**   
10630 20 20 74 68 65 20 43 20 66 75 6e 63 74 69 6f 6e    the C function
10640 73 20 78 53 74 65 70 20 61 6e 64 20 78 46 69 6e  s xStep and xFin
10650 61 6c 2e 20 54 68 65 20 66 69 72 73 74 20 66 6f  al. The first fo
10660 75 72 20 70 61 72 61 6d 65 74 65 72 73 0a 2a 2a  ur parameters.**
10670 20 20 20 20 20 61 72 65 20 69 6e 74 65 72 70 72       are interpr
10680 65 74 65 64 20 69 6e 20 74 68 65 20 73 61 6d 65  eted in the same
10690 20 77 61 79 20 61 73 20 74 68 65 20 66 69 72 73   way as the firs
106a0 74 20 34 20 70 61 72 61 6d 65 74 65 72 73 20 74  t 4 parameters t
106b0 6f 0a 2a 2a 20 20 20 20 20 46 55 4e 43 54 49 4f  o.**     FUNCTIO
106c0 4e 28 29 2e 0a 2a 2a 0a 2a 2a 20 20 20 4c 49 4b  N()..**.**   LIK
106d0 45 46 55 4e 43 28 7a 4e 61 6d 65 2c 20 6e 41 72  EFUNC(zName, nAr
106e0 67 2c 20 70 41 72 67 2c 20 66 6c 61 67 73 29 0a  g, pArg, flags).
106f0 2a 2a 20 20 20 20 20 55 73 65 64 20 74 6f 20 63  **     Used to c
10700 72 65 61 74 65 20 61 20 73 63 61 6c 61 72 20 66  reate a scalar f
10710 75 6e 63 74 69 6f 6e 20 64 65 66 69 6e 69 74 69  unction definiti
10720 6f 6e 20 6f 66 20 61 20 66 75 6e 63 74 69 6f 6e  on of a function
10730 20 7a 4e 61 6d 65 0a 2a 2a 20 20 20 20 20 74 68   zName.**     th
10740 61 74 20 61 63 63 65 70 74 73 20 6e 41 72 67 20  at accepts nArg 
10750 61 72 67 75 6d 65 6e 74 73 20 61 6e 64 20 69 73  arguments and is
10760 20 69 6d 70 6c 65 6d 65 6e 74 65 64 20 62 79 20   implemented by 
10770 61 20 63 61 6c 6c 20 74 6f 20 43 0a 2a 2a 20 20  a call to C.**  
10780 20 20 20 66 75 6e 63 74 69 6f 6e 20 6c 69 6b 65     function like
10790 46 75 6e 63 2e 20 41 72 67 75 6d 65 6e 74 20 70  Func. Argument p
107a0 41 72 67 20 69 73 20 63 61 73 74 20 74 6f 20 61  Arg is cast to a
107b0 20 28 76 6f 69 64 20 2a 29 20 61 6e 64 20 6d 61   (void *) and ma
107c0 64 65 0a 2a 2a 20 20 20 20 20 61 76 61 69 6c 61  de.**     availa
107d0 62 6c 65 20 61 73 20 74 68 65 20 66 75 6e 63 74  ble as the funct
107e0 69 6f 6e 20 75 73 65 72 2d 64 61 74 61 20 28 73  ion user-data (s
107f0 71 6c 69 74 65 33 5f 75 73 65 72 5f 64 61 74 61  qlite3_user_data
10800 28 29 29 2e 20 54 68 65 0a 2a 2a 20 20 20 20 20  ()). The.**     
10810 46 75 6e 63 44 65 66 2e 66 6c 61 67 73 20 76 61  FuncDef.flags va
10820 72 69 61 62 6c 65 20 69 73 20 73 65 74 20 74 6f  riable is set to
10830 20 74 68 65 20 76 61 6c 75 65 20 70 61 73 73 65   the value passe
10840 64 20 61 73 20 74 68 65 20 66 6c 61 67 73 0a 2a  d as the flags.*
10850 2a 20 20 20 20 20 70 61 72 61 6d 65 74 65 72 2e  *     parameter.
10860 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 46 55 4e 43  .*/.#define FUNC
10870 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72 67  TION(zName, nArg
10880 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78 46 75  , iArg, bNC, xFu
10890 6e 63 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53  nc) \.  {nArg, S
108a0 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54  QLITE_FUNC_CONST
108b0 41 4e 54 7c 53 51 4c 49 54 45 5f 55 54 46 38 7c  ANT|SQLITE_UTF8|
108c0 28 62 4e 43 2a 53 51 4c 49 54 45 5f 46 55 4e 43  (bNC*SQLITE_FUNC
108d0 5f 4e 45 45 44 43 4f 4c 4c 29 2c 20 5c 0a 20 20  _NEEDCOLL), \.  
108e0 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50   SQLITE_INT_TO_P
108f0 54 52 28 69 41 72 67 29 2c 20 30 2c 20 78 46 75  TR(iArg), 0, xFu
10900 6e 63 2c 20 30 2c 20 30 2c 20 30 2c 20 23 7a 4e  nc, 0, 0, 0, #zN
10910 61 6d 65 2c 20 7b 30 7d 20 7d 0a 23 64 65 66 69  ame, {0} }.#defi
10920 6e 65 20 56 46 55 4e 43 54 49 4f 4e 28 7a 4e 61  ne VFUNCTION(zNa
10930 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c 20  me, nArg, iArg, 
10940 62 4e 43 2c 20 78 46 75 6e 63 29 20 5c 0a 20 20  bNC, xFunc) \.  
10950 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f 55 54  {nArg, SQLITE_UT
10960 46 38 7c 28 62 4e 43 2a 53 51 4c 49 54 45 5f 46  F8|(bNC*SQLITE_F
10970 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 2c 20 5c  UNC_NEEDCOLL), \
10980 0a 20 20 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54  .   SQLITE_INT_T
10990 4f 5f 50 54 52 28 69 41 72 67 29 2c 20 30 2c 20  O_PTR(iArg), 0, 
109a0 78 46 75 6e 63 2c 20 30 2c 20 30 2c 20 30 2c 20  xFunc, 0, 0, 0, 
109b0 23 7a 4e 61 6d 65 2c 20 7b 30 7d 20 7d 0a 23 64  #zName, {0} }.#d
109c0 65 66 69 6e 65 20 44 46 55 4e 43 54 49 4f 4e 28  efine DFUNCTION(
109d0 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72  zName, nArg, iAr
109e0 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29 20 5c  g, bNC, xFunc) \
109f0 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45  .  {nArg, SQLITE
10a00 5f 46 55 4e 43 5f 53 4c 4f 43 48 4e 47 7c 53 51  _FUNC_SLOCHNG|SQ
10a10 4c 49 54 45 5f 55 54 46 38 2c 20 5c 0a 20 20 20  LITE_UTF8, \.   
10a20 30 2c 20 30 2c 20 78 46 75 6e 63 2c 20 30 2c 20  0, 0, xFunc, 0, 
10a30 30 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c 20 7b 30  0, 0, #zName, {0
10a40 7d 20 7d 0a 23 64 65 66 69 6e 65 20 50 55 52 45  } }.#define PURE
10a50 5f 44 41 54 45 28 7a 4e 61 6d 65 2c 20 6e 41 72  _DATE(zName, nAr
10a60 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78 46  g, iArg, bNC, xF
10a70 75 6e 63 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20  unc) \.  {nArg, 
10a80 53 51 4c 49 54 45 5f 46 55 4e 43 5f 53 4c 4f 43  SQLITE_FUNC_SLOC
10a90 48 4e 47 7c 53 51 4c 49 54 45 5f 55 54 46 38 7c  HNG|SQLITE_UTF8|
10aa0 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53  SQLITE_FUNC_CONS
10ab0 54 41 4e 54 2c 20 5c 0a 20 20 20 28 76 6f 69 64  TANT, \.   (void
10ac0 2a 29 26 73 71 6c 69 74 65 33 43 6f 6e 66 69 67  *)&sqlite3Config
10ad0 2c 20 30 2c 20 78 46 75 6e 63 2c 20 30 2c 20 30  , 0, xFunc, 0, 0
10ae0 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c 20 7b 30 7d  , 0, #zName, {0}
10af0 20 7d 0a 23 64 65 66 69 6e 65 20 46 55 4e 43 54   }.#define FUNCT
10b00 49 4f 4e 32 28 7a 4e 61 6d 65 2c 20 6e 41 72 67  ION2(zName, nArg
10b10 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78 46 75  , iArg, bNC, xFu
10b20 6e 63 2c 20 65 78 74 72 61 46 6c 61 67 73 29 20  nc, extraFlags) 
10b30 5c 0a 20 20 7b 6e 41 72 67 2c 53 51 4c 49 54 45  \.  {nArg,SQLITE
10b40 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 7c 53  _FUNC_CONSTANT|S
10b50 51 4c 49 54 45 5f 55 54 46 38 7c 28 62 4e 43 2a  QLITE_UTF8|(bNC*
10b60 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44  SQLITE_FUNC_NEED
10b70 43 4f 4c 4c 29 7c 65 78 74 72 61 46 6c 61 67 73  COLL)|extraFlags
10b80 2c 5c 0a 20 20 20 53 51 4c 49 54 45 5f 49 4e 54  ,\.   SQLITE_INT
10b90 5f 54 4f 5f 50 54 52 28 69 41 72 67 29 2c 20 30  _TO_PTR(iArg), 0
10ba0 2c 20 78 46 75 6e 63 2c 20 30 2c 20 30 2c 20 30  , xFunc, 0, 0, 0
10bb0 2c 20 23 7a 4e 61 6d 65 2c 20 7b 30 7d 20 7d 0a  , #zName, {0} }.
10bc0 23 64 65 66 69 6e 65 20 53 54 52 5f 46 55 4e 43  #define STR_FUNC
10bd0 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72 67  TION(zName, nArg
10be0 2c 20 70 41 72 67 2c 20 62 4e 43 2c 20 78 46 75  , pArg, bNC, xFu
10bf0 6e 63 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53  nc) \.  {nArg, S
10c00 51 4c 49 54 45 5f 46 55 4e 43 5f 53 4c 4f 43 48  QLITE_FUNC_SLOCH
10c10 4e 47 7c 53 51 4c 49 54 45 5f 55 54 46 38 7c 28  NG|SQLITE_UTF8|(
10c20 62 4e 43 2a 53 51 4c 49 54 45 5f 46 55 4e 43 5f  bNC*SQLITE_FUNC_
10c30 4e 45 45 44 43 4f 4c 4c 29 2c 20 5c 0a 20 20 20  NEEDCOLL), \.   
10c40 70 41 72 67 2c 20 30 2c 20 78 46 75 6e 63 2c 20  pArg, 0, xFunc, 
10c50 30 2c 20 30 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c  0, 0, 0, #zName,
10c60 20 7d 0a 23 64 65 66 69 6e 65 20 4c 49 4b 45 46   }.#define LIKEF
10c70 55 4e 43 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c  UNC(zName, nArg,
10c80 20 61 72 67 2c 20 66 6c 61 67 73 29 20 5c 0a 20   arg, flags) \. 
10c90 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f 46   {nArg, SQLITE_F
10ca0 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 7c 53 51 4c  UNC_CONSTANT|SQL
10cb0 49 54 45 5f 55 54 46 38 7c 66 6c 61 67 73 2c 20  ITE_UTF8|flags, 
10cc0 5c 0a 20 20 20 28 76 6f 69 64 20 2a 29 61 72 67  \.   (void *)arg
10cd0 2c 20 30 2c 20 6c 69 6b 65 46 75 6e 63 2c 20 30  , 0, likeFunc, 0
10ce0 2c 20 30 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c 20  , 0, 0, #zName, 
10cf0 7b 30 7d 20 7d 0a 23 64 65 66 69 6e 65 20 41 47  {0} }.#define AG
10d00 47 52 45 47 41 54 45 28 7a 4e 61 6d 65 2c 20 6e  GREGATE(zName, n
10d10 41 72 67 2c 20 61 72 67 2c 20 6e 63 2c 20 78 53  Arg, arg, nc, xS
10d20 74 65 70 2c 20 78 46 69 6e 61 6c 2c 20 78 56 61  tep, xFinal, xVa
10d30 6c 75 65 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20  lue) \.  {nArg, 
10d40 53 51 4c 49 54 45 5f 55 54 46 38 7c 28 6e 63 2a  SQLITE_UTF8|(nc*
10d50 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44  SQLITE_FUNC_NEED
10d60 43 4f 4c 4c 29 2c 20 5c 0a 20 20 20 53 51 4c 49  COLL), \.   SQLI
10d70 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 61 72  TE_INT_TO_PTR(ar
10d80 67 29 2c 20 30 2c 20 78 53 74 65 70 2c 78 46 69  g), 0, xStep,xFi
10d90 6e 61 6c 2c 78 56 61 6c 75 65 2c 30 2c 23 7a 4e  nal,xValue,0,#zN
10da0 61 6d 65 2c 20 7b 30 7d 7d 0a 23 64 65 66 69 6e  ame, {0}}.#defin
10db0 65 20 41 47 47 52 45 47 41 54 45 32 28 7a 4e 61  e AGGREGATE2(zNa
10dc0 6d 65 2c 20 6e 41 72 67 2c 20 61 72 67 2c 20 6e  me, nArg, arg, n
10dd0 63 2c 20 78 53 74 65 70 2c 20 78 46 69 6e 61 6c  c, xStep, xFinal
10de0 2c 20 65 78 74 72 61 46 6c 61 67 73 29 20 5c 0a  , extraFlags) \.
10df0 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f    {nArg, SQLITE_
10e00 55 54 46 38 7c 28 6e 63 2a 53 51 4c 49 54 45 5f  UTF8|(nc*SQLITE_
10e10 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 7c 65  FUNC_NEEDCOLL)|e
10e20 78 74 72 61 46 6c 61 67 73 2c 20 5c 0a 20 20 20  xtraFlags, \.   
10e30 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54  SQLITE_INT_TO_PT
10e40 52 28 61 72 67 29 2c 20 30 2c 20 78 53 74 65 70  R(arg), 0, xStep
10e50 2c 78 46 69 6e 61 6c 2c 78 46 69 6e 61 6c 2c 30  ,xFinal,xFinal,0
10e60 2c 23 7a 4e 61 6d 65 2c 20 7b 30 7d 7d 0a 0a 23  ,#zName, {0}}..#
10e70 64 65 66 69 6e 65 20 57 41 47 47 52 45 47 41 54  define WAGGREGAT
10e80 45 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 61  E(zName, nArg, a
10e90 72 67 2c 20 6e 63 2c 20 78 53 74 65 70 2c 20 78  rg, nc, xStep, x
10ea0 46 69 6e 61 6c 2c 20 78 56 61 6c 75 65 2c 20 78  Final, xValue, x
10eb0 49 6e 76 65 72 73 65 2c 20 66 29 20 5c 0a 20 20  Inverse, f) \.  
10ec0 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f 55 54  {nArg, SQLITE_UT
10ed0 46 38 7c 28 6e 63 2a 53 51 4c 49 54 45 5f 46 55  F8|(nc*SQLITE_FU
10ee0 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 7c 66 2c 20  NC_NEEDCOLL)|f, 
10ef0 5c 0a 20 20 20 53 51 4c 49 54 45 5f 49 4e 54 5f  \.   SQLITE_INT_
10f00 54 4f 5f 50 54 52 28 61 72 67 29 2c 20 30 2c 20  TO_PTR(arg), 0, 
10f10 78 53 74 65 70 2c 78 46 69 6e 61 6c 2c 78 56 61  xStep,xFinal,xVa
10f20 6c 75 65 2c 78 49 6e 76 65 72 73 65 2c 23 7a 4e  lue,xInverse,#zN
10f30 61 6d 65 2c 20 7b 30 7d 7d 0a 0a 2f 2a 0a 2a 2a  ame, {0}}../*.**
10f40 20 41 6c 6c 20 63 75 72 72 65 6e 74 20 73 61 76   All current sav
10f50 65 70 6f 69 6e 74 73 20 61 72 65 20 73 74 6f 72  epoints are stor
10f60 65 64 20 69 6e 20 61 20 6c 69 6e 6b 65 64 20 6c  ed in a linked l
10f70 69 73 74 20 73 74 61 72 74 69 6e 67 20 61 74 0a  ist starting at.
10f80 2a 2a 20 73 71 6c 69 74 65 33 2e 70 53 61 76 65  ** sqlite3.pSave
10f90 70 6f 69 6e 74 2e 20 54 68 65 20 66 69 72 73 74  point. The first
10fa0 20 65 6c 65 6d 65 6e 74 20 69 6e 20 74 68 65 20   element in the 
10fb0 6c 69 73 74 20 69 73 20 74 68 65 20 6d 6f 73 74  list is the most
10fc0 20 72 65 63 65 6e 74 6c 79 0a 2a 2a 20 6f 70 65   recently.** ope
10fd0 6e 65 64 20 73 61 76 65 70 6f 69 6e 74 2e 20 53  ned savepoint. S
10fe0 61 76 65 70 6f 69 6e 74 73 20 61 72 65 20 61 64  avepoints are ad
10ff0 64 65 64 20 74 6f 20 74 68 65 20 6c 69 73 74 20  ded to the list 
11000 62 79 20 74 68 65 20 76 64 62 65 0a 2a 2a 20 4f  by the vdbe.** O
11010 50 5f 53 61 76 65 70 6f 69 6e 74 20 69 6e 73 74  P_Savepoint inst
11020 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75  ruction..*/.stru
11030 63 74 20 53 61 76 65 70 6f 69 6e 74 20 7b 0a 20  ct Savepoint {. 
11040 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20   char *zName;   
11050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11060 20 20 20 20 20 2f 2a 20 53 61 76 65 70 6f 69 6e       /* Savepoin
11070 74 20 6e 61 6d 65 20 28 6e 75 6c 2d 74 65 72 6d  t name (nul-term
11080 69 6e 61 74 65 64 29 20 2a 2f 0a 20 20 69 36 34  inated) */.  i64
11090 20 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 3b 20   nDeferredCons; 
110a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
110b0 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 64 65   /* Number of de
110c0 66 65 72 72 65 64 20 66 6b 20 76 69 6f 6c 61 74  ferred fk violat
110d0 69 6f 6e 73 20 2a 2f 0a 20 20 69 36 34 20 6e 44  ions */.  i64 nD
110e0 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3b 20  eferredImmCons; 
110f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
11100 20 4e 75 6d 62 65 72 20 6f 66 20 64 65 66 65 72   Number of defer
11110 72 65 64 20 69 6d 6d 20 66 6b 2e 20 2a 2f 0a 20  red imm fk. */. 
11120 20 53 61 76 65 70 6f 69 6e 74 20 2a 70 4e 65 78   Savepoint *pNex
11130 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t;              
11140 20 20 20 20 20 2f 2a 20 50 61 72 65 6e 74 20 73       /* Parent s
11150 61 76 65 70 6f 69 6e 74 20 28 69 66 20 61 6e 79  avepoint (if any
11160 29 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54  ) */.};../*.** T
11170 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 72 65  he following are
11180 20 75 73 65 64 20 61 73 20 74 68 65 20 73 65 63   used as the sec
11190 6f 6e 64 20 70 61 72 61 6d 65 74 65 72 20 74 6f  ond parameter to
111a0 20 73 71 6c 69 74 65 33 53 61 76 65 70 6f 69 6e   sqlite3Savepoin
111b0 74 28 29 2c 0a 2a 2a 20 61 6e 64 20 61 73 20 74  t(),.** and as t
111c0 68 65 20 50 31 20 61 72 67 75 6d 65 6e 74 20 74  he P1 argument t
111d0 6f 20 74 68 65 20 4f 50 5f 53 61 76 65 70 6f 69  o the OP_Savepoi
111e0 6e 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a  nt instruction..
111f0 2a 2f 0a 23 64 65 66 69 6e 65 20 53 41 56 45 50  */.#define SAVEP
11200 4f 49 4e 54 5f 42 45 47 49 4e 20 20 20 20 20 20  OINT_BEGIN      
11210 30 0a 23 64 65 66 69 6e 65 20 53 41 56 45 50 4f  0.#define SAVEPO
11220 49 4e 54 5f 52 45 4c 45 41 53 45 20 20 20 20 31  INT_RELEASE    1
11230 0a 23 64 65 66 69 6e 65 20 53 41 56 45 50 4f 49  .#define SAVEPOI
11240 4e 54 5f 52 4f 4c 4c 42 41 43 4b 20 20 20 32 0a  NT_ROLLBACK   2.
11250 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 53 51 4c  ../*.** Each SQL
11260 69 74 65 20 6d 6f 64 75 6c 65 20 28 76 69 72 74  ite module (virt
11270 75 61 6c 20 74 61 62 6c 65 20 64 65 66 69 6e 69  ual table defini
11280 74 69 6f 6e 29 20 69 73 20 64 65 66 69 6e 65 64  tion) is defined
11290 20 62 79 20 61 6e 0a 2a 2a 20 69 6e 73 74 61 6e   by an.** instan
112a0 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77  ce of the follow
112b0 69 6e 67 20 73 74 72 75 63 74 75 72 65 2c 20 73  ing structure, s
112c0 74 6f 72 65 64 20 69 6e 20 74 68 65 20 73 71 6c  tored in the sql
112d0 69 74 65 33 2e 61 4d 6f 64 75 6c 65 0a 2a 2a 20  ite3.aModule.** 
112e0 68 61 73 68 20 74 61 62 6c 65 2e 0a 2a 2f 0a 73  hash table..*/.s
112f0 74 72 75 63 74 20 4d 6f 64 75 6c 65 20 7b 0a 20  truct Module {. 
11300 20 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d   const sqlite3_m
11310 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b 20  odule *pModule; 
11320 20 20 20 20 20 20 2f 2a 20 43 61 6c 6c 62 61 63        /* Callbac
11330 6b 20 70 6f 69 6e 74 65 72 73 20 2a 2f 0a 20 20  k pointers */.  
11340 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4e 61 6d  const char *zNam
11350 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e;              
11360 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 70 61 73       /* Name pas
11370 73 65 64 20 74 6f 20 63 72 65 61 74 65 5f 6d 6f  sed to create_mo
11380 64 75 6c 65 28 29 20 2a 2f 0a 20 20 76 6f 69 64  dule() */.  void
11390 20 2a 70 41 75 78 3b 20 20 20 20 20 20 20 20 20   *pAux;         
113a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
113b0 20 2f 2a 20 70 41 75 78 20 70 61 73 73 65 64 20   /* pAux passed 
113c0 74 6f 20 63 72 65 61 74 65 5f 6d 6f 64 75 6c 65  to create_module
113d0 28 29 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78  () */.  void (*x
113e0 44 65 73 74 72 6f 79 29 28 76 6f 69 64 20 2a 29  Destroy)(void *)
113f0 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
11400 4d 6f 64 75 6c 65 20 64 65 73 74 72 75 63 74 6f  Module destructo
11410 72 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20  r function */.  
11420 54 61 62 6c 65 20 2a 70 45 70 6f 54 61 62 3b 20  Table *pEpoTab; 
11430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11440 20 20 20 20 20 2f 2a 20 45 70 6f 6e 79 6d 6f 75       /* Eponymou
11450 73 20 74 61 62 6c 65 20 66 6f 72 20 74 68 69 73  s table for this
11460 20 6d 6f 64 75 6c 65 20 2a 2f 0a 7d 3b 0a 0a 2f   module */.};../
11470 2a 0a 2a 2a 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  *.** information
11480 20 61 62 6f 75 74 20 65 61 63 68 20 63 6f 6c 75   about each colu
11490 6d 6e 20 6f 66 20 61 6e 20 53 51 4c 20 74 61 62  mn of an SQL tab
114a0 6c 65 20 69 73 20 68 65 6c 64 20 69 6e 20 61 6e  le is held in an
114b0 20 69 6e 73 74 61 6e 63 65 0a 2a 2a 20 6f 66 20   instance.** of 
114c0 74 68 69 73 20 73 74 72 75 63 74 75 72 65 2e 0a  this structure..
114d0 2a 2f 0a 73 74 72 75 63 74 20 43 6f 6c 75 6d 6e  */.struct Column
114e0 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65   {.  char *zName
114f0 3b 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66  ;     /* Name of
11500 20 74 68 69 73 20 63 6f 6c 75 6d 6e 2c 20 5c 30   this column, \0
11510 30 30 2c 20 74 68 65 6e 20 74 68 65 20 74 79 70  00, then the typ
11520 65 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 44 66  e */.  Expr *pDf
11530 6c 74 3b 20 20 20 20 20 2f 2a 20 44 65 66 61 75  lt;     /* Defau
11540 6c 74 20 76 61 6c 75 65 20 6f 66 20 74 68 69 73  lt value of this
11550 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 63 68 61   column */.  cha
11560 72 20 2a 7a 43 6f 6c 6c 3b 20 20 20 20 20 2f 2a  r *zColl;     /*
11570 20 43 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65   Collating seque
11580 6e 63 65 2e 20 20 49 66 20 4e 55 4c 4c 2c 20 75  nce.  If NULL, u
11590 73 65 20 74 68 65 20 64 65 66 61 75 6c 74 20 2a  se the default *
115a0 2f 0a 20 20 75 38 20 6e 6f 74 4e 75 6c 6c 3b 20  /.  u8 notNull; 
115b0 20 20 20 20 20 2f 2a 20 41 6e 20 4f 45 5f 20 63       /* An OE_ c
115c0 6f 64 65 20 66 6f 72 20 68 61 6e 64 6c 69 6e 67  ode for handling
115d0 20 61 20 4e 4f 54 20 4e 55 4c 4c 20 63 6f 6e 73   a NOT NULL cons
115e0 74 72 61 69 6e 74 20 2a 2f 0a 20 20 63 68 61 72  traint */.  char
115f0 20 61 66 66 69 6e 69 74 79 3b 20 20 20 2f 2a 20   affinity;   /* 
11600 4f 6e 65 20 6f 66 20 74 68 65 20 53 51 4c 49 54  One of the SQLIT
11610 45 5f 41 46 46 5f 2e 2e 2e 20 76 61 6c 75 65 73  E_AFF_... values
11620 20 2a 2f 0a 20 20 75 38 20 73 7a 45 73 74 3b 20   */.  u8 szEst; 
11630 20 20 20 20 20 20 20 2f 2a 20 45 73 74 69 6d 61         /* Estima
11640 74 65 64 20 73 69 7a 65 20 6f 66 20 76 61 6c 75  ted size of valu
11650 65 20 69 6e 20 74 68 69 73 20 63 6f 6c 75 6d 6e  e in this column
11660 2e 20 73 69 7a 65 6f 66 28 49 4e 54 29 3d 3d 31  . sizeof(INT)==1
11670 20 2a 2f 0a 20 20 75 38 20 63 6f 6c 46 6c 61 67   */.  u8 colFlag
11680 73 3b 20 20 20 20 20 2f 2a 20 42 6f 6f 6c 65 61  s;     /* Boolea
11690 6e 20 70 72 6f 70 65 72 74 69 65 73 2e 20 20 53  n properties.  S
116a0 65 65 20 43 4f 4c 46 4c 41 47 5f 20 64 65 66 69  ee COLFLAG_ defi
116b0 6e 65 73 20 62 65 6c 6f 77 20 2a 2f 0a 7d 3b 0a  nes below */.};.
116c0 0a 2f 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75  ./* Allowed valu
116d0 65 73 20 66 6f 72 20 43 6f 6c 75 6d 6e 2e 63 6f  es for Column.co
116e0 6c 46 6c 61 67 73 3a 0a 2a 2f 0a 23 64 65 66 69  lFlags:.*/.#defi
116f0 6e 65 20 43 4f 4c 46 4c 41 47 5f 50 52 49 4d 4b  ne COLFLAG_PRIMK
11700 45 59 20 20 30 78 30 30 30 31 20 20 20 20 2f 2a  EY  0x0001    /*
11710 20 43 6f 6c 75 6d 6e 20 69 73 20 70 61 72 74 20   Column is part 
11720 6f 66 20 74 68 65 20 70 72 69 6d 61 72 79 20 6b  of the primary k
11730 65 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 43 4f  ey */.#define CO
11740 4c 46 4c 41 47 5f 48 49 44 44 45 4e 20 20 20 30  LFLAG_HIDDEN   0
11750 78 30 30 30 32 20 20 20 20 2f 2a 20 41 20 68 69  x0002    /* A hi
11760 64 64 65 6e 20 63 6f 6c 75 6d 6e 20 69 6e 20 61  dden column in a
11770 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 2a   virtual table *
11780 2f 0a 23 64 65 66 69 6e 65 20 43 4f 4c 46 4c 41  /.#define COLFLA
11790 47 5f 48 41 53 54 59 50 45 20 20 30 78 30 30 30  G_HASTYPE  0x000
117a0 34 20 20 20 20 2f 2a 20 54 79 70 65 20 6e 61 6d  4    /* Type nam
117b0 65 20 66 6f 6c 6c 6f 77 73 20 63 6f 6c 75 6d 6e  e follows column
117c0 20 6e 61 6d 65 20 2a 2f 0a 23 64 65 66 69 6e 65   name */.#define
117d0 20 43 4f 4c 46 4c 41 47 5f 55 4e 49 51 55 45 20   COLFLAG_UNIQUE 
117e0 20 20 30 78 30 30 30 38 20 20 20 20 2f 2a 20 43    0x0008    /* C
117f0 6f 6c 75 6d 6e 20 64 65 66 20 63 6f 6e 74 61 69  olumn def contai
11800 6e 73 20 22 55 4e 49 51 55 45 22 20 6f 72 20 22  ns "UNIQUE" or "
11810 50 4b 22 20 2a 2f 0a 23 64 65 66 69 6e 65 20 43  PK" */.#define C
11820 4f 4c 46 4c 41 47 5f 53 4f 52 54 45 52 52 45 46  OLFLAG_SORTERREF
11830 20 30 78 30 30 31 30 20 20 20 2f 2a 20 55 73 65   0x0010   /* Use
11840 20 73 6f 72 74 65 72 2d 72 65 66 73 20 77 69 74   sorter-refs wit
11850 68 20 74 68 69 73 20 63 6f 6c 75 6d 6e 20 2a 2f  h this column */
11860 0a 0a 2f 2a 0a 2a 2a 20 41 20 22 43 6f 6c 6c 61  ../*.** A "Colla
11870 74 69 6e 67 20 53 65 71 75 65 6e 63 65 22 20 69  ting Sequence" i
11880 73 20 64 65 66 69 6e 65 64 20 62 79 20 61 6e 20  s defined by an 
11890 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20  instance of the 
118a0 66 6f 6c 6c 6f 77 69 6e 67 0a 2a 2a 20 73 74 72  following.** str
118b0 75 63 74 75 72 65 2e 20 43 6f 6e 63 65 70 74 75  ucture. Conceptu
118c0 61 6c 6c 79 2c 20 61 20 63 6f 6c 6c 61 74 69 6e  ally, a collatin
118d0 67 20 73 65 71 75 65 6e 63 65 20 63 6f 6e 73 69  g sequence consi
118e0 73 74 73 20 6f 66 20 61 20 6e 61 6d 65 20 61 6e  sts of a name an
118f0 64 0a 2a 2a 20 61 20 63 6f 6d 70 61 72 69 73 6f  d.** a compariso
11900 6e 20 72 6f 75 74 69 6e 65 20 74 68 61 74 20 64  n routine that d
11910 65 66 69 6e 65 73 20 74 68 65 20 6f 72 64 65 72  efines the order
11920 20 6f 66 20 74 68 61 74 20 73 65 71 75 65 6e 63   of that sequenc
11930 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 43 6f 6c 6c  e..**.** If Coll
11940 53 65 71 2e 78 43 6d 70 20 69 73 20 4e 55 4c 4c  Seq.xCmp is NULL
11950 2c 20 69 74 20 6d 65 61 6e 73 20 74 68 61 74 20  , it means that 
11960 74 68 65 0a 2a 2a 20 63 6f 6c 6c 61 74 69 6e 67  the.** collating
11970 20 73 65 71 75 65 6e 63 65 20 69 73 20 75 6e 64   sequence is und
11980 65 66 69 6e 65 64 2e 20 20 49 6e 64 69 63 65 73  efined.  Indices
11990 20 62 75 69 6c 74 20 6f 6e 20 61 6e 20 75 6e 64   built on an und
119a0 65 66 69 6e 65 64 0a 2a 2a 20 63 6f 6c 6c 61 74  efined.** collat
119b0 69 6e 67 20 73 65 71 75 65 6e 63 65 20 6d 61 79  ing sequence may
119c0 20 6e 6f 74 20 62 65 20 72 65 61 64 20 6f 72 20   not be read or 
119d0 77 72 69 74 74 65 6e 2e 0a 2a 2f 0a 73 74 72 75  written..*/.stru
119e0 63 74 20 43 6f 6c 6c 53 65 71 20 7b 0a 20 20 63  ct CollSeq {.  c
119f0 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20  har *zName;     
11a00 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20       /* Name of 
11a10 74 68 65 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65  the collating se
11a20 71 75 65 6e 63 65 2c 20 55 54 46 2d 38 20 65 6e  quence, UTF-8 en
11a30 63 6f 64 65 64 20 2a 2f 0a 20 20 75 38 20 65 6e  coded */.  u8 en
11a40 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  c;              
11a50 20 2f 2a 20 54 65 78 74 20 65 6e 63 6f 64 69 6e   /* Text encodin
11a60 67 20 68 61 6e 64 6c 65 64 20 62 79 20 78 43 6d  g handled by xCm
11a70 70 28 29 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70  p() */.  void *p
11a80 55 73 65 72 3b 20 20 20 20 20 20 20 20 20 20 2f  User;          /
11a90 2a 20 46 69 72 73 74 20 61 72 67 75 6d 65 6e 74  * First argument
11aa0 20 74 6f 20 78 43 6d 70 28 29 20 2a 2f 0a 20 20   to xCmp() */.  
11ab0 69 6e 74 20 28 2a 78 43 6d 70 29 28 76 6f 69 64  int (*xCmp)(void
11ac0 2a 2c 69 6e 74 2c 20 63 6f 6e 73 74 20 76 6f 69  *,int, const voi
11ad0 64 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20 76  d*, int, const v
11ae0 6f 69 64 2a 29 3b 0a 20 20 76 6f 69 64 20 28 2a  oid*);.  void (*
11af0 78 44 65 6c 29 28 76 6f 69 64 2a 29 3b 20 20 2f  xDel)(void*);  /
11b00 2a 20 44 65 73 74 72 75 63 74 6f 72 20 66 6f 72  * Destructor for
11b10 20 70 55 73 65 72 20 2a 2f 0a 7d 3b 0a 0a 2f 2a   pUser */.};../*
11b20 0a 2a 2a 20 41 20 73 6f 72 74 20 6f 72 64 65 72  .** A sort order
11b30 20 63 61 6e 20 62 65 20 65 69 74 68 65 72 20 41   can be either A
11b40 53 43 20 6f 72 20 44 45 53 43 2e 0a 2a 2f 0a 23  SC or DESC..*/.#
11b50 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 4f  define SQLITE_SO
11b60 5f 41 53 43 20 20 20 20 20 20 20 30 20 20 2f 2a  _ASC       0  /*
11b70 20 53 6f 72 74 20 69 6e 20 61 73 63 65 6e 64 69   Sort in ascendi
11b80 6e 67 20 6f 72 64 65 72 20 2a 2f 0a 23 64 65 66  ng order */.#def
11b90 69 6e 65 20 53 51 4c 49 54 45 5f 53 4f 5f 44 45  ine SQLITE_SO_DE
11ba0 53 43 20 20 20 20 20 20 31 20 20 2f 2a 20 53 6f  SC      1  /* So
11bb0 72 74 20 69 6e 20 61 73 63 65 6e 64 69 6e 67 20  rt in ascending 
11bc0 6f 72 64 65 72 20 2a 2f 0a 23 64 65 66 69 6e 65  order */.#define
11bd0 20 53 51 4c 49 54 45 5f 53 4f 5f 55 4e 44 45 46   SQLITE_SO_UNDEF
11be0 49 4e 45 44 20 2d 31 20 2f 2a 20 4e 6f 20 73 6f  INED -1 /* No so
11bf0 72 74 20 6f 72 64 65 72 20 73 70 65 63 69 66 69  rt order specifi
11c00 65 64 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6c  ed */../*.** Col
11c10 75 6d 6e 20 61 66 66 69 6e 69 74 79 20 74 79 70  umn affinity typ
11c20 65 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 73 65 20  es..**.** These 
11c30 75 73 65 64 20 74 6f 20 68 61 76 65 20 6d 6e 65  used to have mne
11c40 6d 6f 6e 69 63 20 6e 61 6d 65 20 6c 69 6b 65 20  monic name like 
11c50 27 69 27 20 66 6f 72 20 53 51 4c 49 54 45 5f 41  'i' for SQLITE_A
11c60 46 46 5f 49 4e 54 45 47 45 52 20 61 6e 64 0a 2a  FF_INTEGER and.*
11c70 2a 20 27 74 27 20 66 6f 72 20 53 51 4c 49 54 45  * 't' for SQLITE
11c80 5f 41 46 46 5f 54 45 58 54 2e 20 20 42 75 74 20  _AFF_TEXT.  But 
11c90 77 65 20 63 61 6e 20 73 61 76 65 20 61 20 6c 69  we can save a li
11ca0 74 74 6c 65 20 73 70 61 63 65 20 61 6e 64 20 69  ttle space and i
11cb0 6d 70 72 6f 76 65 0a 2a 2a 20 74 68 65 20 73 70  mprove.** the sp
11cc0 65 65 64 20 61 20 6c 69 74 74 6c 65 20 62 79 20  eed a little by 
11cd0 6e 75 6d 62 65 72 69 6e 67 20 74 68 65 20 76 61  numbering the va
11ce0 6c 75 65 73 20 63 6f 6e 73 65 63 75 74 69 76 65  lues consecutive
11cf0 6c 79 2e 0a 2a 2a 0a 2a 2a 20 42 75 74 20 72 61  ly..**.** But ra
11d00 74 68 65 72 20 74 68 61 6e 20 73 74 61 72 74 20  ther than start 
11d10 77 69 74 68 20 30 20 6f 72 20 31 2c 20 77 65 20  with 0 or 1, we 
11d20 62 65 67 69 6e 20 77 69 74 68 20 27 41 27 2e 20  begin with 'A'. 
11d30 20 54 68 61 74 20 77 61 79 2c 0a 2a 2a 20 77 68   That way,.** wh
11d40 65 6e 20 6d 75 6c 74 69 70 6c 65 20 61 66 66 69  en multiple affi
11d50 6e 69 74 79 20 74 79 70 65 73 20 61 72 65 20 63  nity types are c
11d60 6f 6e 63 61 74 65 6e 61 74 65 64 20 69 6e 74 6f  oncatenated into
11d70 20 61 20 73 74 72 69 6e 67 20 61 6e 64 0a 2a 2a   a string and.**
11d80 20 75 73 65 64 20 61 73 20 74 68 65 20 50 34 20   used as the P4 
11d90 6f 70 65 72 61 6e 64 2c 20 74 68 65 79 20 77 69  operand, they wi
11da0 6c 6c 20 62 65 20 6d 6f 72 65 20 72 65 61 64 61  ll be more reada
11db0 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65 20  ble..**.** Note 
11dc0 61 6c 73 6f 20 74 68 61 74 20 74 68 65 20 6e 75  also that the nu
11dd0 6d 65 72 69 63 20 74 79 70 65 73 20 61 72 65 20  meric types are 
11de0 67 72 6f 75 70 65 64 20 74 6f 67 65 74 68 65 72  grouped together
11df0 20 73 6f 20 74 68 61 74 20 74 65 73 74 69 6e 67   so that testing
11e00 0a 2a 2a 20 66 6f 72 20 61 20 6e 75 6d 65 72 69  .** for a numeri
11e10 63 20 74 79 70 65 20 69 73 20 61 20 73 69 6e 67  c type is a sing
11e20 6c 65 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 20  le comparison.  
11e30 41 6e 64 20 74 68 65 20 42 4c 4f 42 20 74 79 70  And the BLOB typ
11e40 65 20 69 73 20 66 69 72 73 74 2e 0a 2a 2f 0a 23  e is first..*/.#
11e50 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 46  define SQLITE_AF
11e60 46 5f 42 4c 4f 42 20 20 20 20 20 27 41 27 0a 23  F_BLOB     'A'.#
11e70 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 46  define SQLITE_AF
11e80 46 5f 54 45 58 54 20 20 20 20 20 27 42 27 0a 23  F_TEXT     'B'.#
11e90 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 46  define SQLITE_AF
11ea0 46 5f 4e 55 4d 45 52 49 43 20 20 27 43 27 0a 23  F_NUMERIC  'C'.#
11eb0 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 46  define SQLITE_AF
11ec0 46 5f 49 4e 54 45 47 45 52 20 20 27 44 27 0a 23  F_INTEGER  'D'.#
11ed0 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 46  define SQLITE_AF
11ee0 46 5f 52 45 41 4c 20 20 20 20 20 27 45 27 0a 0a  F_REAL     'E'..
11ef0 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49  #define sqlite3I
11f00 73 4e 75 6d 65 72 69 63 41 66 66 69 6e 69 74 79  sNumericAffinity
11f10 28 58 29 20 20 28 28 58 29 3e 3d 53 51 4c 49 54  (X)  ((X)>=SQLIT
11f20 45 5f 41 46 46 5f 4e 55 4d 45 52 49 43 29 0a 0a  E_AFF_NUMERIC)..
11f30 2f 2a 0a 2a 2a 20 54 68 65 20 53 51 4c 49 54 45  /*.** The SQLITE
11f40 5f 41 46 46 5f 4d 41 53 4b 20 76 61 6c 75 65 73  _AFF_MASK values
11f50 20 6d 61 73 6b 73 20 6f 66 66 20 74 68 65 20 73   masks off the s
11f60 69 67 6e 69 66 69 63 61 6e 74 20 62 69 74 73 20  ignificant bits 
11f70 6f 66 20 61 6e 0a 2a 2a 20 61 66 66 69 6e 69 74  of an.** affinit
11f80 79 20 76 61 6c 75 65 2e 0a 2a 2f 0a 23 64 65 66  y value..*/.#def
11f90 69 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 4d  ine SQLITE_AFF_M
11fa0 41 53 4b 20 20 20 20 20 30 78 34 37 0a 0a 2f 2a  ASK     0x47../*
11fb0 0a 2a 2a 20 41 64 64 69 74 69 6f 6e 61 6c 20 62  .** Additional b
11fc0 69 74 20 76 61 6c 75 65 73 20 74 68 61 74 20 63  it values that c
11fd0 61 6e 20 62 65 20 4f 52 65 64 20 77 69 74 68 20  an be ORed with 
11fe0 61 6e 20 61 66 66 69 6e 69 74 79 20 77 69 74 68  an affinity with
11ff0 6f 75 74 0a 2a 2a 20 63 68 61 6e 67 69 6e 67 20  out.** changing 
12000 74 68 65 20 61 66 66 69 6e 69 74 79 2e 0a 2a 2a  the affinity..**
12010 0a 2a 2a 20 54 68 65 20 53 51 4c 49 54 45 5f 4e  .** The SQLITE_N
12020 4f 54 4e 55 4c 4c 20 66 6c 61 67 20 69 73 20 61  OTNULL flag is a
12030 20 63 6f 6d 62 69 6e 61 74 69 6f 6e 20 6f 66 20   combination of 
12040 4e 55 4c 4c 45 51 20 61 6e 64 20 4a 55 4d 50 49  NULLEQ and JUMPI
12050 46 4e 55 4c 4c 2e 0a 2a 2a 20 49 74 20 63 61 75  FNULL..** It cau
12060 73 65 73 20 61 6e 20 61 73 73 65 72 74 28 29 20  ses an assert() 
12070 74 6f 20 66 69 72 65 20 69 66 20 65 69 74 68 65  to fire if eithe
12080 72 20 6f 70 65 72 61 6e 64 20 74 6f 20 61 20 63  r operand to a c
12090 6f 6d 70 61 72 69 73 6f 6e 0a 2a 2a 20 6f 70 65  omparison.** ope
120a0 72 61 74 6f 72 20 69 73 20 4e 55 4c 4c 2e 20 20  rator is NULL.  
120b0 49 74 20 69 73 20 61 64 64 65 64 20 74 6f 20 63  It is added to c
120c0 65 72 74 61 69 6e 20 63 6f 6d 70 61 72 69 73 6f  ertain compariso
120d0 6e 20 6f 70 65 72 61 74 6f 72 73 20 74 6f 0a 2a  n operators to.*
120e0 2a 20 70 72 6f 76 65 20 74 68 61 74 20 74 68 65  * prove that the
120f0 20 6f 70 65 72 61 6e 64 73 20 61 72 65 20 61 6c   operands are al
12100 77 61 79 73 20 4e 4f 54 20 4e 55 4c 4c 2e 0a 2a  ways NOT NULL..*
12110 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
12120 5f 4b 45 45 50 4e 55 4c 4c 20 20 20 20 20 30 78  _KEEPNULL     0x
12130 30 38 20 20 2f 2a 20 55 73 65 64 20 62 79 20 76  08  /* Used by v
12140 65 63 74 6f 72 20 3d 3d 20 6f 72 20 3c 3e 20 2a  ector == or <> *
12150 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
12160 5f 4a 55 4d 50 49 46 4e 55 4c 4c 20 20 20 30 78  _JUMPIFNULL   0x
12170 31 30 20 20 2f 2a 20 6a 75 6d 70 73 20 69 66 20  10  /* jumps if 
12180 65 69 74 68 65 72 20 6f 70 65 72 61 6e 64 20 69  either operand i
12190 73 20 4e 55 4c 4c 20 2a 2f 0a 23 64 65 66 69 6e  s NULL */.#defin
121a0 65 20 53 51 4c 49 54 45 5f 53 54 4f 52 45 50 32  e SQLITE_STOREP2
121b0 20 20 20 20 20 20 30 78 32 30 20 20 2f 2a 20 53        0x20  /* S
121c0 74 6f 72 65 20 72 65 73 75 6c 74 20 69 6e 20 72  tore result in r
121d0 65 67 5b 50 32 5d 20 72 61 74 68 65 72 20 74 68  eg[P2] rather th
121e0 61 6e 20 6a 75 6d 70 20 2a 2f 0a 23 64 65 66 69  an jump */.#defi
121f0 6e 65 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51  ne SQLITE_NULLEQ
12200 20 20 20 20 20 20 20 30 78 38 30 20 20 2f 2a 20         0x80  /* 
12210 4e 55 4c 4c 3d 4e 55 4c 4c 20 2a 2f 0a 23 64 65  NULL=NULL */.#de
12220 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e 4f 54 4e  fine SQLITE_NOTN
12230 55 4c 4c 20 20 20 20 20 20 30 78 39 30 20 20 2f  ULL      0x90  /
12240 2a 20 41 73 73 65 72 74 20 74 68 61 74 20 6f 70  * Assert that op
12250 65 72 61 6e 64 73 20 61 72 65 20 6e 65 76 65 72  erands are never
12260 20 4e 55 4c 4c 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20   NULL */../*.** 
12270 41 6e 20 6f 62 6a 65 63 74 20 6f 66 20 74 68 69  An object of thi
12280 73 20 74 79 70 65 20 69 73 20 63 72 65 61 74 65  s type is create
12290 64 20 66 6f 72 20 65 61 63 68 20 76 69 72 74 75  d for each virtu
122a0 61 6c 20 74 61 62 6c 65 20 70 72 65 73 65 6e 74  al table present
122b0 20 69 6e 0a 2a 2a 20 74 68 65 20 64 61 74 61 62   in.** the datab
122c0 61 73 65 20 73 63 68 65 6d 61 2e 0a 2a 2a 0a 2a  ase schema..**.*
122d0 2a 20 49 66 20 74 68 65 20 64 61 74 61 62 61 73  * If the databas
122e0 65 20 73 63 68 65 6d 61 20 69 73 20 73 68 61 72  e schema is shar
122f0 65 64 2c 20 74 68 65 6e 20 74 68 65 72 65 20 69  ed, then there i
12300 73 20 6f 6e 65 20 69 6e 73 74 61 6e 63 65 20 6f  s one instance o
12310 66 20 74 68 69 73 0a 2a 2a 20 73 74 72 75 63 74  f this.** struct
12320 75 72 65 20 66 6f 72 20 65 61 63 68 20 64 61 74  ure for each dat
12330 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  abase connection
12340 20 28 73 71 6c 69 74 65 33 2a 29 20 74 68 61 74   (sqlite3*) that
12350 20 75 73 65 73 20 74 68 65 20 73 68 61 72 65 64   uses the shared
12360 0a 2a 2a 20 73 63 68 65 6d 61 2e 20 54 68 69 73  .** schema. This
12370 20 69 73 20 62 65 63 61 75 73 65 20 65 61 63 68   is because each
12380 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63   database connec
12390 74 69 6f 6e 20 72 65 71 75 69 72 65 73 20 69 74  tion requires it
123a0 73 20 6f 77 6e 20 75 6e 69 71 75 65 0a 2a 2a 20  s own unique.** 
123b0 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20  instance of the 
123c0 73 71 6c 69 74 65 33 5f 76 74 61 62 2a 20 68 61  sqlite3_vtab* ha
123d0 6e 64 6c 65 20 75 73 65 64 20 74 6f 20 61 63 63  ndle used to acc
123e0 65 73 73 20 74 68 65 20 76 69 72 74 75 61 6c 20  ess the virtual 
123f0 74 61 62 6c 65 0a 2a 2a 20 69 6d 70 6c 65 6d 65  table.** impleme
12400 6e 74 61 74 69 6f 6e 2e 20 73 71 6c 69 74 65 33  ntation. sqlite3
12410 5f 76 74 61 62 2a 20 68 61 6e 64 6c 65 73 20 63  _vtab* handles c
12420 61 6e 20 6e 6f 74 20 62 65 20 73 68 61 72 65 64  an not be shared
12430 20 62 65 74 77 65 65 6e 0a 2a 2a 20 64 61 74 61   between.** data
12440 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 73  base connections
12450 2c 20 65 76 65 6e 20 77 68 65 6e 20 74 68 65 20  , even when the 
12460 72 65 73 74 20 6f 66 20 74 68 65 20 69 6e 2d 6d  rest of the in-m
12470 65 6d 6f 72 79 20 64 61 74 61 62 61 73 65 0a 2a  emory database.*
12480 2a 20 73 63 68 65 6d 61 20 69 73 20 73 68 61 72  * schema is shar
12490 65 64 2c 20 61 73 20 74 68 65 20 69 6d 70 6c 65  ed, as the imple
124a0 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 74 65 6e 20  mentation often 
124b0 73 74 6f 72 65 73 20 74 68 65 20 64 61 74 61 62  stores the datab
124c0 61 73 65 0a 2a 2a 20 63 6f 6e 6e 65 63 74 69 6f  ase.** connectio
124d0 6e 20 68 61 6e 64 6c 65 20 70 61 73 73 65 64 20  n handle passed 
124e0 74 6f 20 69 74 20 76 69 61 20 74 68 65 20 78 43  to it via the xC
124f0 6f 6e 6e 65 63 74 28 29 20 6f 72 20 78 43 72 65  onnect() or xCre
12500 61 74 65 28 29 20 6d 65 74 68 6f 64 0a 2a 2a 20  ate() method.** 
12510 64 75 72 69 6e 67 20 69 6e 69 74 69 61 6c 69 7a  during initializ
12520 61 74 69 6f 6e 20 69 6e 74 65 72 6e 61 6c 6c 79  ation internally
12530 2e 20 54 68 69 73 20 64 61 74 61 62 61 73 65 20  . This database 
12540 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c  connection handl
12550 65 20 6d 61 79 0a 2a 2a 20 74 68 65 6e 20 62 65  e may.** then be
12560 20 75 73 65 64 20 62 79 20 74 68 65 20 76 69 72   used by the vir
12570 74 75 61 6c 20 74 61 62 6c 65 20 69 6d 70 6c 65  tual table imple
12580 6d 65 6e 74 61 74 69 6f 6e 20 74 6f 20 61 63 63  mentation to acc
12590 65 73 73 20 72 65 61 6c 20 74 61 62 6c 65 73 0a  ess real tables.
125a0 2a 2a 20 77 69 74 68 69 6e 20 74 68 65 20 64 61  ** within the da
125b0 74 61 62 61 73 65 2e 20 53 6f 20 74 68 61 74 20  tabase. So that 
125c0 74 68 65 79 20 61 70 70 65 61 72 20 61 73 20 70  they appear as p
125d0 61 72 74 20 6f 66 20 74 68 65 20 63 61 6c 6c 65  art of the calle
125e0 72 73 0a 2a 2a 20 74 72 61 6e 73 61 63 74 69 6f  rs.** transactio
125f0 6e 2c 20 74 68 65 73 65 20 61 63 63 65 73 73 65  n, these accesse
12600 73 20 6e 65 65 64 20 74 6f 20 62 65 20 6d 61 64  s need to be mad
12610 65 20 76 69 61 20 74 68 65 20 73 61 6d 65 20 64  e via the same d
12620 61 74 61 62 61 73 65 0a 2a 2a 20 63 6f 6e 6e 65  atabase.** conne
12630 63 74 69 6f 6e 20 61 73 20 74 68 61 74 20 75 73  ction as that us
12640 65 64 20 74 6f 20 65 78 65 63 75 74 65 20 53 51  ed to execute SQ
12650 4c 20 6f 70 65 72 61 74 69 6f 6e 73 20 6f 6e 20  L operations on 
12660 74 68 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c  the virtual tabl
12670 65 2e 0a 2a 2a 0a 2a 2a 20 41 6c 6c 20 56 54 61  e..**.** All VTa
12680 62 6c 65 20 6f 62 6a 65 63 74 73 20 74 68 61 74  ble objects that
12690 20 63 6f 72 72 65 73 70 6f 6e 64 20 74 6f 20 61   correspond to a
126a0 20 73 69 6e 67 6c 65 20 74 61 62 6c 65 20 69 6e   single table in
126b0 20 61 20 73 68 61 72 65 64 0a 2a 2a 20 64 61 74   a shared.** dat
126c0 61 62 61 73 65 20 73 63 68 65 6d 61 20 61 72 65  abase schema are
126d0 20 69 6e 69 74 69 61 6c 6c 79 20 73 74 6f 72 65   initially store
126e0 64 20 69 6e 20 61 20 6c 69 6e 6b 65 64 2d 6c 69  d in a linked-li
126f0 73 74 20 70 6f 69 6e 74 65 64 20 74 6f 20 62 79  st pointed to by
12700 0a 2a 2a 20 74 68 65 20 54 61 62 6c 65 2e 70 56  .** the Table.pV
12710 54 61 62 6c 65 20 6d 65 6d 62 65 72 20 76 61 72  Table member var
12720 69 61 62 6c 65 20 6f 66 20 74 68 65 20 63 6f 72  iable of the cor
12730 72 65 73 70 6f 6e 64 69 6e 67 20 54 61 62 6c 65  responding Table
12740 20 6f 62 6a 65 63 74 2e 0a 2a 2a 20 57 68 65 6e   object..** When
12750 20 61 6e 20 73 71 6c 69 74 65 33 5f 70 72 65 70   an sqlite3_prep
12760 61 72 65 28 29 20 6f 70 65 72 61 74 69 6f 6e 20  are() operation 
12770 69 73 20 72 65 71 75 69 72 65 64 20 74 6f 20 61  is required to a
12780 63 63 65 73 73 20 74 68 65 20 76 69 72 74 75 61  ccess the virtua
12790 6c 0a 2a 2a 20 74 61 62 6c 65 2c 20 69 74 20 73  l.** table, it s
127a0 65 61 72 63 68 65 73 20 74 68 65 20 6c 69 73 74  earches the list
127b0 20 66 6f 72 20 74 68 65 20 56 54 61 62 6c 65 20   for the VTable 
127c0 74 68 61 74 20 63 6f 72 72 65 73 70 6f 6e 64 73  that corresponds
127d0 20 74 6f 20 74 68 65 0a 2a 2a 20 64 61 74 61 62   to the.** datab
127e0 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 64  ase connection d
127f0 6f 69 6e 67 20 74 68 65 20 70 72 65 70 61 72 69  oing the prepari
12800 6e 67 20 73 6f 20 61 73 20 74 6f 20 75 73 65 20  ng so as to use 
12810 74 68 65 20 63 6f 72 72 65 63 74 0a 2a 2a 20 73  the correct.** s
12820 71 6c 69 74 65 33 5f 76 74 61 62 2a 20 68 61 6e  qlite3_vtab* han
12830 64 6c 65 20 69 6e 20 74 68 65 20 63 6f 6d 70 69  dle in the compi
12840 6c 65 64 20 71 75 65 72 79 2e 0a 2a 2a 0a 2a 2a  led query..**.**
12850 20 57 68 65 6e 20 61 6e 20 69 6e 2d 6d 65 6d 6f   When an in-memo
12860 72 79 20 54 61 62 6c 65 20 6f 62 6a 65 63 74 20  ry Table object 
12870 69 73 20 64 65 6c 65 74 65 64 20 28 66 6f 72 20  is deleted (for 
12880 65 78 61 6d 70 6c 65 20 77 68 65 6e 20 74 68 65  example when the
12890 0a 2a 2a 20 73 63 68 65 6d 61 20 69 73 20 62 65  .** schema is be
128a0 69 6e 67 20 72 65 6c 6f 61 64 65 64 20 66 6f 72  ing reloaded for
128b0 20 73 6f 6d 65 20 72 65 61 73 6f 6e 29 2c 20 74   some reason), t
128c0 68 65 20 56 54 61 62 6c 65 20 6f 62 6a 65 63 74  he VTable object
128d0 73 20 61 72 65 20 6e 6f 74 0a 2a 2a 20 64 65 6c  s are not.** del
128e0 65 74 65 64 20 61 6e 64 20 74 68 65 20 73 71 6c  eted and the sql
128f0 69 74 65 33 5f 76 74 61 62 2a 20 68 61 6e 64 6c  ite3_vtab* handl
12900 65 73 20 61 72 65 20 6e 6f 74 20 78 44 69 73 63  es are not xDisc
12910 6f 6e 6e 65 63 74 28 29 65 64 0a 2a 2a 20 69 6d  onnect()ed.** im
12920 6d 65 64 69 61 74 65 6c 79 2e 20 49 6e 73 74 65  mediately. Inste
12930 61 64 2c 20 74 68 65 79 20 61 72 65 20 6d 6f 76  ad, they are mov
12940 65 64 20 66 72 6f 6d 20 74 68 65 20 54 61 62 6c  ed from the Tabl
12950 65 2e 70 56 54 61 62 6c 65 20 6c 69 73 74 20 74  e.pVTable list t
12960 6f 0a 2a 2a 20 61 6e 6f 74 68 65 72 20 6c 69 6e  o.** another lin
12970 6b 65 64 20 6c 69 73 74 20 68 65 61 64 65 64 20  ked list headed 
12980 62 79 20 74 68 65 20 73 71 6c 69 74 65 33 2e 70  by the sqlite3.p
12990 44 69 73 63 6f 6e 6e 65 63 74 20 6d 65 6d 62 65  Disconnect membe
129a0 72 20 6f 66 20 74 68 65 0a 2a 2a 20 63 6f 72 72  r of the.** corr
129b0 65 73 70 6f 6e 64 69 6e 67 20 73 71 6c 69 74 65  esponding sqlite
129c0 33 20 73 74 72 75 63 74 75 72 65 2e 20 54 68 65  3 structure. The
129d0 79 20 61 72 65 20 74 68 65 6e 20 64 65 6c 65 74  y are then delet
129e0 65 64 2f 78 44 69 73 63 6f 6e 6e 65 63 74 65 64  ed/xDisconnected
129f0 0a 2a 2a 20 6e 65 78 74 20 74 69 6d 65 20 61 20  .** next time a 
12a00 73 74 61 74 65 6d 65 6e 74 20 69 73 20 70 72 65  statement is pre
12a10 70 61 72 65 64 20 75 73 69 6e 67 20 73 61 69 64  pared using said
12a20 20 73 71 6c 69 74 65 33 2a 2e 20 54 68 69 73 20   sqlite3*. This 
12a30 69 73 20 64 6f 6e 65 0a 2a 2a 20 74 6f 20 61 76  is done.** to av
12a40 6f 69 64 20 64 65 61 64 6c 6f 63 6b 20 69 73 73  oid deadlock iss
12a50 75 65 73 20 69 6e 76 6f 6c 76 69 6e 67 20 6d 75  ues involving mu
12a60 6c 74 69 70 6c 65 20 73 71 6c 69 74 65 33 2e 6d  ltiple sqlite3.m
12a70 75 74 65 78 20 6d 75 74 65 78 65 73 2e 0a 2a 2a  utex mutexes..**
12a80 20 52 65 66 65 72 20 74 6f 20 63 6f 6d 6d 65 6e   Refer to commen
12a90 74 73 20 61 62 6f 76 65 20 66 75 6e 63 74 69 6f  ts above functio
12aa0 6e 20 73 71 6c 69 74 65 33 56 74 61 62 55 6e 6c  n sqlite3VtabUnl
12ab0 6f 63 6b 4c 69 73 74 28 29 20 66 6f 72 20 61 6e  ockList() for an
12ac0 0a 2a 2a 20 65 78 70 6c 61 6e 61 74 69 6f 6e 20  .** explanation 
12ad0 61 73 20 74 6f 20 77 68 79 20 69 74 20 69 73 20  as to why it is 
12ae0 73 61 66 65 20 74 6f 20 61 64 64 20 61 6e 20 65  safe to add an e
12af0 6e 74 72 79 20 74 6f 20 61 6e 20 73 71 6c 69 74  ntry to an sqlit
12b00 65 33 2e 70 44 69 73 63 6f 6e 6e 65 63 74 0a 2a  e3.pDisconnect.*
12b10 2a 20 6c 69 73 74 20 77 69 74 68 6f 75 74 20 68  * list without h
12b20 6f 6c 64 69 6e 67 20 74 68 65 20 63 6f 72 72 65  olding the corre
12b30 73 70 6f 6e 64 69 6e 67 20 73 71 6c 69 74 65 33  sponding sqlite3
12b40 2e 6d 75 74 65 78 20 6d 75 74 65 78 2e 0a 2a 2a  .mutex mutex..**
12b50 0a 2a 2a 20 54 68 65 20 6d 65 6d 6f 72 79 20 66  .** The memory f
12b60 6f 72 20 6f 62 6a 65 63 74 73 20 6f 66 20 74 68  or objects of th
12b70 69 73 20 74 79 70 65 20 69 73 20 61 6c 77 61 79  is type is alway
12b80 73 20 61 6c 6c 6f 63 61 74 65 64 20 62 79 0a 2a  s allocated by.*
12b90 2a 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f  * sqlite3DbMallo
12ba0 63 28 29 2c 20 75 73 69 6e 67 20 74 68 65 20 63  c(), using the c
12bb0 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65  onnection handle
12bc0 20 73 74 6f 72 65 64 20 69 6e 20 56 54 61 62 6c   stored in VTabl
12bd0 65 2e 64 62 20 61 73 0a 2a 2a 20 74 68 65 20 66  e.db as.** the f
12be0 69 72 73 74 20 61 72 67 75 6d 65 6e 74 2e 0a 2a  irst argument..*
12bf0 2f 0a 73 74 72 75 63 74 20 56 54 61 62 6c 65 20  /.struct VTable 
12c00 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b  {.  sqlite3 *db;
12c10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
12c20 20 44 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63   Database connec
12c30 74 69 6f 6e 20 61 73 73 6f 63 69 61 74 65 64 20  tion associated 
12c40 77 69 74 68 20 74 68 69 73 20 74 61 62 6c 65 20  with this table 
12c50 2a 2f 0a 20 20 4d 6f 64 75 6c 65 20 2a 70 4d 6f  */.  Module *pMo
12c60 64 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  d;             /
12c70 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 6d 6f 64  * Pointer to mod
12c80 75 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  ule implementati
12c90 6f 6e 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f  on */.  sqlite3_
12ca0 76 74 61 62 20 2a 70 56 74 61 62 3b 20 20 20 20  vtab *pVtab;    
12cb0 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20    /* Pointer to 
12cc0 76 74 61 62 20 69 6e 73 74 61 6e 63 65 20 2a 2f  vtab instance */
12cd0 0a 20 20 69 6e 74 20 6e 52 65 66 3b 20 20 20 20  .  int nRef;    
12ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
12cf0 4e 75 6d 62 65 72 20 6f 66 20 70 6f 69 6e 74 65  Number of pointe
12d00 72 73 20 74 6f 20 74 68 69 73 20 73 74 72 75 63  rs to this struc
12d10 74 75 72 65 20 2a 2f 0a 20 20 75 38 20 62 43 6f  ture */.  u8 bCo
12d20 6e 73 74 72 61 69 6e 74 3b 20 20 20 20 20 20 20  nstraint;       
12d30 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 63      /* True if c
12d40 6f 6e 73 74 72 61 69 6e 74 73 20 61 72 65 20 73  onstraints are s
12d50 75 70 70 6f 72 74 65 64 20 2a 2f 0a 20 20 69 6e  upported */.  in
12d60 74 20 69 53 61 76 65 70 6f 69 6e 74 3b 20 20 20  t iSavepoint;   
12d70 20 20 20 20 20 20 20 20 2f 2a 20 44 65 70 74 68          /* Depth
12d80 20 6f 66 20 74 68 65 20 53 41 56 45 50 4f 49 4e   of the SAVEPOIN
12d90 54 20 73 74 61 63 6b 20 2a 2f 0a 20 20 56 54 61  T stack */.  VTa
12da0 62 6c 65 20 2a 70 4e 65 78 74 3b 20 20 20 20 20  ble *pNext;     
12db0 20 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 69         /* Next i
12dc0 6e 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 28 73  n linked list (s
12dd0 65 65 20 61 62 6f 76 65 29 20 2a 2f 0a 7d 3b 0a  ee above) */.};.
12de0 0a 2f 2a 0a 2a 2a 20 54 68 65 20 73 63 68 65 6d  ./*.** The schem
12df0 61 20 66 6f 72 20 65 61 63 68 20 53 51 4c 20 74  a for each SQL t
12e00 61 62 6c 65 20 61 6e 64 20 76 69 65 77 20 69 73  able and view is
12e10 20 72 65 70 72 65 73 65 6e 74 65 64 20 69 6e 20   represented in 
12e20 6d 65 6d 6f 72 79 0a 2a 2a 20 62 79 20 61 6e 20  memory.** by an 
12e30 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20  instance of the 
12e40 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74  following struct
12e50 75 72 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 54  ure..*/.struct T
12e60 61 62 6c 65 20 7b 0a 20 20 63 68 61 72 20 2a 7a  able {.  char *z
12e70 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20 2f 2a  Name;         /*
12e80 20 4e 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62   Name of the tab
12e90 6c 65 20 6f 72 20 76 69 65 77 20 2a 2f 0a 20 20  le or view */.  
12ea0 43 6f 6c 75 6d 6e 20 2a 61 43 6f 6c 3b 20 20 20  Column *aCol;   
12eb0 20 20 20 20 20 2f 2a 20 49 6e 66 6f 72 6d 61 74       /* Informat
12ec0 69 6f 6e 20 61 62 6f 75 74 20 65 61 63 68 20 63  ion about each c
12ed0 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 49 6e 64 65 78  olumn */.  Index
12ee0 20 2a 70 49 6e 64 65 78 3b 20 20 20 20 20 20 20   *pIndex;       
12ef0 2f 2a 20 4c 69 73 74 20 6f 66 20 53 51 4c 20 69  /* List of SQL i
12f00 6e 64 65 78 65 73 20 6f 6e 20 74 68 69 73 20 74  ndexes on this t
12f10 61 62 6c 65 2e 20 2a 2f 0a 20 20 53 65 6c 65 63  able. */.  Selec
12f20 74 20 2a 70 53 65 6c 65 63 74 3b 20 20 20 20 20  t *pSelect;     
12f30 2f 2a 20 4e 55 4c 4c 20 66 6f 72 20 74 61 62 6c  /* NULL for tabl
12f40 65 73 2e 20 20 50 6f 69 6e 74 73 20 74 6f 20 64  es.  Points to d
12f50 65 66 69 6e 69 74 69 6f 6e 20 69 66 20 61 20 76  efinition if a v
12f60 69 65 77 2e 20 2a 2f 0a 20 20 46 4b 65 79 20 2a  iew. */.  FKey *
12f70 70 46 4b 65 79 3b 20 20 20 20 20 20 20 20 20 2f  pFKey;         /
12f80 2a 20 4c 69 6e 6b 65 64 20 6c 69 73 74 20 6f 66  * Linked list of
12f90 20 61 6c 6c 20 66 6f 72 65 69 67 6e 20 6b 65 79   all foreign key
12fa0 73 20 69 6e 20 74 68 69 73 20 74 61 62 6c 65 20  s in this table 
12fb0 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 43 6f 6c 41  */.  char *zColA
12fc0 66 66 3b 20 20 20 20 20 20 20 2f 2a 20 53 74 72  ff;       /* Str
12fd0 69 6e 67 20 64 65 66 69 6e 69 6e 67 20 74 68 65  ing defining the
12fe0 20 61 66 66 69 6e 69 74 79 20 6f 66 20 65 61 63   affinity of eac
12ff0 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 45 78  h column */.  Ex
13000 70 72 4c 69 73 74 20 2a 70 43 68 65 63 6b 3b 20  prList *pCheck; 
13010 20 20 20 2f 2a 20 41 6c 6c 20 43 48 45 43 4b 20     /* All CHECK 
13020 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f 0a 20  constraints */. 
13030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13040 20 20 20 20 20 20 2f 2a 20 20 20 2e 2e 2e 20 61        /*   ... a
13050 6c 73 6f 20 75 73 65 64 20 61 73 20 63 6f 6c 75  lso used as colu
13060 6d 6e 20 6e 61 6d 65 20 6c 69 73 74 20 69 6e 20  mn name list in 
13070 61 20 56 49 45 57 20 2a 2f 0a 20 20 69 6e 74 20  a VIEW */.  int 
13080 74 6e 75 6d 3b 20 20 20 20 20 20 20 20 20 20 20  tnum;           
13090 20 2f 2a 20 52 6f 6f 74 20 42 54 72 65 65 20 70   /* Root BTree p
130a0 61 67 65 20 66 6f 72 20 74 68 69 73 20 74 61 62  age for this tab
130b0 6c 65 20 2a 2f 0a 20 20 75 33 32 20 6e 54 61 62  le */.  u32 nTab
130c0 52 65 66 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  Ref;         /* 
130d0 4e 75 6d 62 65 72 20 6f 66 20 70 6f 69 6e 74 65  Number of pointe
130e0 72 73 20 74 6f 20 74 68 69 73 20 54 61 62 6c 65  rs to this Table
130f0 20 2a 2f 0a 20 20 75 33 32 20 74 61 62 46 6c 61   */.  u32 tabFla
13100 67 73 3b 20 20 20 20 20 20 20 20 2f 2a 20 4d 61  gs;        /* Ma
13110 73 6b 20 6f 66 20 54 46 5f 2a 20 76 61 6c 75 65  sk of TF_* value
13120 73 20 2a 2f 0a 20 20 69 31 36 20 69 50 4b 65 79  s */.  i16 iPKey
13130 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49  ;           /* I
13140 66 20 6e 6f 74 20 6e 65 67 61 74 69 76 65 2c 20  f not negative, 
13150 75 73 65 20 61 43 6f 6c 5b 69 50 4b 65 79 5d 20  use aCol[iPKey] 
13160 61 73 20 74 68 65 20 72 6f 77 69 64 20 2a 2f 0a  as the rowid */.
13170 20 20 69 31 36 20 6e 43 6f 6c 3b 20 20 20 20 20    i16 nCol;     
13180 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
13190 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74   of columns in t
131a0 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20 4c  his table */.  L
131b0 6f 67 45 73 74 20 6e 52 6f 77 4c 6f 67 45 73 74  ogEst nRowLogEst
131c0 3b 20 20 20 2f 2a 20 45 73 74 69 6d 61 74 65 64  ;   /* Estimated
131d0 20 72 6f 77 73 20 69 6e 20 74 61 62 6c 65 20 2d   rows in table -
131e0 20 66 72 6f 6d 20 73 71 6c 69 74 65 5f 73 74 61   from sqlite_sta
131f0 74 31 20 74 61 62 6c 65 20 2a 2f 0a 20 20 4c 6f  t1 table */.  Lo
13200 67 45 73 74 20 73 7a 54 61 62 52 6f 77 3b 20 20  gEst szTabRow;  
13210 20 20 20 2f 2a 20 45 73 74 69 6d 61 74 65 64 20     /* Estimated 
13220 73 69 7a 65 20 6f 66 20 65 61 63 68 20 74 61 62  size of each tab
13230 6c 65 20 72 6f 77 20 69 6e 20 62 79 74 65 73 20  le row in bytes 
13240 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
13250 5f 45 4e 41 42 4c 45 5f 43 4f 53 54 4d 55 4c 54  _ENABLE_COSTMULT
13260 0a 20 20 4c 6f 67 45 73 74 20 63 6f 73 74 4d 75  .  LogEst costMu
13270 6c 74 3b 20 20 20 20 20 2f 2a 20 43 6f 73 74 20  lt;     /* Cost 
13280 6d 75 6c 74 69 70 6c 69 65 72 20 66 6f 72 20 75  multiplier for u
13290 73 69 6e 67 20 74 68 69 73 20 74 61 62 6c 65 20  sing this table 
132a0 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 75 38 20 6b  */.#endif.  u8 k
132b0 65 79 43 6f 6e 66 3b 20 20 20 20 20 20 20 20 20  eyConf;         
132c0 20 2f 2a 20 57 68 61 74 20 74 6f 20 64 6f 20 69   /* What to do i
132d0 6e 20 63 61 73 65 20 6f 66 20 75 6e 69 71 75 65  n case of unique
132e0 6e 65 73 73 20 63 6f 6e 66 6c 69 63 74 20 6f 6e  ness conflict on
132f0 20 69 50 4b 65 79 20 2a 2f 0a 23 69 66 6e 64 65   iPKey */.#ifnde
13300 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 4c  f SQLITE_OMIT_AL
13310 54 45 52 54 41 42 4c 45 0a 20 20 69 6e 74 20 61  TERTABLE.  int a
13320 64 64 43 6f 6c 4f 66 66 73 65 74 3b 20 20 20 20  ddColOffset;    
13330 2f 2a 20 4f 66 66 73 65 74 20 69 6e 20 43 52 45  /* Offset in CRE
13340 41 54 45 20 54 41 42 4c 45 20 73 74 6d 74 20 74  ATE TABLE stmt t
13350 6f 20 61 64 64 20 61 20 6e 65 77 20 63 6f 6c 75  o add a new colu
13360 6d 6e 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66  mn */.#endif.#if
13370 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
13380 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 20 20  _VIRTUALTABLE.  
13390 69 6e 74 20 6e 4d 6f 64 75 6c 65 41 72 67 3b 20  int nModuleArg; 
133a0 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
133b0 66 20 61 72 67 75 6d 65 6e 74 73 20 74 6f 20 74  f arguments to t
133c0 68 65 20 6d 6f 64 75 6c 65 20 2a 2f 0a 20 20 63  he module */.  c
133d0 68 61 72 20 2a 2a 61 7a 4d 6f 64 75 6c 65 41 72  har **azModuleAr
133e0 67 3b 20 20 2f 2a 20 30 3a 20 6d 6f 64 75 6c 65  g;  /* 0: module
133f0 20 31 3a 20 73 63 68 65 6d 61 20 32 3a 20 76 74   1: schema 2: vt
13400 61 62 20 6e 61 6d 65 20 33 2e 2e 2e 3a 20 61 72  ab name 3...: ar
13410 67 73 20 2a 2f 0a 20 20 56 54 61 62 6c 65 20 2a  gs */.  VTable *
13420 70 56 54 61 62 6c 65 3b 20 20 20 20 20 2f 2a 20  pVTable;     /* 
13430 4c 69 73 74 20 6f 66 20 56 54 61 62 6c 65 20 6f  List of VTable o
13440 62 6a 65 63 74 73 2e 20 2a 2f 0a 23 65 6e 64 69  bjects. */.#endi
13450 66 0a 20 20 54 72 69 67 67 65 72 20 2a 70 54 72  f.  Trigger *pTr
13460 69 67 67 65 72 3b 20 20 20 2f 2a 20 4c 69 73 74  igger;   /* List
13470 20 6f 66 20 74 72 69 67 67 65 72 73 20 73 74 6f   of triggers sto
13480 72 65 64 20 69 6e 20 70 53 63 68 65 6d 61 20 2a  red in pSchema *
13490 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70 53 63 68  /.  Schema *pSch
134a0 65 6d 61 3b 20 20 20 20 20 2f 2a 20 53 63 68 65  ema;     /* Sche
134b0 6d 61 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73  ma that contains
134c0 20 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20   this table */. 
134d0 20 54 61 62 6c 65 20 2a 70 4e 65 78 74 5a 6f 6d   Table *pNextZom
134e0 62 69 65 3b 20 20 2f 2a 20 4e 65 78 74 20 6f 6e  bie;  /* Next on
134f0 20 74 68 65 20 50 61 72 73 65 2e 70 5a 6f 6d 62   the Parse.pZomb
13500 69 65 54 61 62 20 6c 69 73 74 20 2a 2f 0a 7d 3b  ieTab list */.};
13510 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20  ../*.** Allowed 
13520 76 61 6c 75 65 73 20 66 6f 72 20 54 61 62 6c 65  values for Table
13530 2e 74 61 62 46 6c 61 67 73 2e 0a 2a 2a 0a 2a 2a  .tabFlags..**.**
13540 20 54 46 5f 4f 4f 4f 48 69 64 64 65 6e 20 61 70   TF_OOOHidden ap
13550 70 6c 69 65 73 20 74 6f 20 74 61 62 6c 65 73 20  plies to tables 
13560 6f 72 20 76 69 65 77 20 74 68 61 74 20 68 61 76  or view that hav
13570 65 20 68 69 64 64 65 6e 20 63 6f 6c 75 6d 6e 73  e hidden columns
13580 20 74 68 61 74 20 61 72 65 0a 2a 2a 20 66 6f 6c   that are.** fol
13590 6c 6f 77 65 64 20 62 79 20 6e 6f 6e 2d 68 69 64  lowed by non-hid
135a0 64 65 6e 20 63 6f 6c 75 6d 6e 73 2e 20 20 45 78  den columns.  Ex
135b0 61 6d 70 6c 65 3a 20 20 22 43 52 45 41 54 45 20  ample:  "CREATE 
135c0 56 49 52 54 55 41 4c 20 54 41 42 4c 45 20 78 20  VIRTUAL TABLE x 
135d0 55 53 49 4e 47 0a 2a 2a 20 76 74 61 62 31 28 61  USING.** vtab1(a
135e0 20 48 49 44 44 45 4e 2c 20 62 29 3b 22 2e 20 20   HIDDEN, b);".  
135f0 53 69 6e 63 65 20 22 62 22 20 69 73 20 61 20 6e  Since "b" is a n
13600 6f 6e 2d 68 69 64 64 65 6e 20 63 6f 6c 75 6d 6e  on-hidden column
13610 20 62 75 74 20 22 61 22 20 69 73 20 68 69 64 64   but "a" is hidd
13620 65 6e 2c 0a 2a 2a 20 74 68 65 20 54 46 5f 4f 4f  en,.** the TF_OO
13630 4f 48 69 64 64 65 6e 20 61 74 74 72 69 62 75 74  OHidden attribut
13640 65 20 77 6f 75 6c 64 20 61 70 70 6c 79 20 69 6e  e would apply in
13650 20 74 68 69 73 20 63 61 73 65 2e 20 20 53 75 63   this case.  Suc
13660 68 20 74 61 62 6c 65 73 20 72 65 71 75 69 72 65  h tables require
13670 0a 2a 2a 20 73 70 65 63 69 61 6c 20 68 61 6e 64  .** special hand
13680 6c 69 6e 67 20 64 75 72 69 6e 67 20 49 4e 53 45  ling during INSE
13690 52 54 20 70 72 6f 63 65 73 73 69 6e 67 2e 0a 2a  RT processing..*
136a0 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 52 65 61  /.#define TF_Rea
136b0 64 6f 6e 6c 79 20 20 20 20 20 20 20 20 30 78 30  donly        0x0
136c0 30 30 31 20 20 20 20 2f 2a 20 52 65 61 64 2d 6f  001    /* Read-o
136d0 6e 6c 79 20 73 79 73 74 65 6d 20 74 61 62 6c 65  nly system table
136e0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 45   */.#define TF_E
136f0 70 68 65 6d 65 72 61 6c 20 20 20 20 20 20 20 30  phemeral       0
13700 78 30 30 30 32 20 20 20 20 2f 2a 20 41 6e 20 65  x0002    /* An e
13710 70 68 65 6d 65 72 61 6c 20 74 61 62 6c 65 20 2a  phemeral table *
13720 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 48 61 73  /.#define TF_Has
13730 50 72 69 6d 61 72 79 4b 65 79 20 20 20 30 78 30  PrimaryKey   0x0
13740 30 30 34 20 20 20 20 2f 2a 20 54 61 62 6c 65 20  004    /* Table 
13750 68 61 73 20 61 20 70 72 69 6d 61 72 79 20 6b 65  has a primary ke
13760 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f  y */.#define TF_
13770 41 75 74 6f 69 6e 63 72 65 6d 65 6e 74 20 20 20  Autoincrement   
13780 30 78 30 30 30 38 20 20 20 20 2f 2a 20 49 6e 74  0x0008    /* Int
13790 65 67 65 72 20 70 72 69 6d 61 72 79 20 6b 65 79  eger primary key
137a0 20 69 73 20 61 75 74 6f 69 6e 63 72 65 6d 65 6e   is autoincremen
137b0 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f  t */.#define TF_
137c0 48 61 73 53 74 61 74 31 20 20 20 20 20 20 20 20  HasStat1        
137d0 30 78 30 30 31 30 20 20 20 20 2f 2a 20 6e 52 6f  0x0010    /* nRo
137e0 77 4c 6f 67 45 73 74 20 73 65 74 20 66 72 6f 6d  wLogEst set from
137f0 20 73 71 6c 69 74 65 5f 73 74 61 74 31 20 2a 2f   sqlite_stat1 */
13800 0a 23 64 65 66 69 6e 65 20 54 46 5f 57 69 74 68  .#define TF_With
13810 6f 75 74 52 6f 77 69 64 20 20 20 20 30 78 30 30  outRowid    0x00
13820 32 30 20 20 20 20 2f 2a 20 4e 6f 20 72 6f 77 69  20    /* No rowi
13830 64 2e 20 20 50 52 49 4d 41 52 59 20 4b 45 59 20  d.  PRIMARY KEY 
13840 69 73 20 74 68 65 20 6b 65 79 20 2a 2f 0a 23 64  is the key */.#d
13850 65 66 69 6e 65 20 54 46 5f 4e 6f 56 69 73 69 62  efine TF_NoVisib
13860 6c 65 52 6f 77 69 64 20 20 30 78 30 30 34 30 20  leRowid  0x0040 
13870 20 20 20 2f 2a 20 4e 6f 20 75 73 65 72 2d 76 69     /* No user-vi
13880 73 69 62 6c 65 20 22 72 6f 77 69 64 22 20 63 6f  sible "rowid" co
13890 6c 75 6d 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  lumn */.#define 
138a0 54 46 5f 4f 4f 4f 48 69 64 64 65 6e 20 20 20 20  TF_OOOHidden    
138b0 20 20 20 30 78 30 30 38 30 20 20 20 20 2f 2a 20     0x0080    /* 
138c0 4f 75 74 2d 6f 66 2d 4f 72 64 65 72 20 68 69 64  Out-of-Order hid
138d0 64 65 6e 20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 23  den columns */.#
138e0 64 65 66 69 6e 65 20 54 46 5f 53 74 61 74 73 55  define TF_StatsU
138f0 73 65 64 20 20 20 20 20 20 20 30 78 30 31 30 30  sed       0x0100
13900 20 20 20 20 2f 2a 20 51 75 65 72 79 20 70 6c 61      /* Query pla
13910 6e 6e 65 72 20 64 65 63 69 73 69 6f 6e 73 20 61  nner decisions a
13920 66 66 65 63 74 65 64 20 62 79 0a 20 20 20 20 20  ffected by.     
13930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13950 2a 2a 20 49 6e 64 65 78 2e 61 69 52 6f 77 4c 6f  ** Index.aiRowLo
13960 67 45 73 74 5b 5d 20 76 61 6c 75 65 73 20 2a 2f  gEst[] values */
13970 0a 23 64 65 66 69 6e 65 20 54 46 5f 48 61 73 4e  .#define TF_HasN
13980 6f 74 4e 75 6c 6c 20 20 20 20 20 20 30 78 30 32  otNull      0x02
13990 30 30 20 20 20 20 2f 2a 20 43 6f 6e 74 61 69 6e  00    /* Contain
139a0 73 20 4e 4f 54 20 4e 55 4c 4c 20 63 6f 6e 73 74  s NOT NULL const
139b0 72 61 69 6e 74 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a  raints */../*.**
139c0 20 54 65 73 74 20 74 6f 20 73 65 65 20 77 68 65   Test to see whe
139d0 74 68 65 72 20 6f 72 20 6e 6f 74 20 61 20 74 61  ther or not a ta
139e0 62 6c 65 20 69 73 20 61 20 76 69 72 74 75 61 6c  ble is a virtual
139f0 20 74 61 62 6c 65 2e 20 20 54 68 69 73 20 69 73   table.  This is
13a00 0a 2a 2a 20 64 6f 6e 65 20 61 73 20 61 20 6d 61  .** done as a ma
13a10 63 72 6f 20 73 6f 20 74 68 61 74 20 69 74 20 77  cro so that it w
13a20 69 6c 6c 20 62 65 20 6f 70 74 69 6d 69 7a 65 64  ill be optimized
13a30 20 6f 75 74 20 77 68 65 6e 20 76 69 72 74 75 61   out when virtua
13a40 6c 0a 2a 2a 20 74 61 62 6c 65 20 73 75 70 70 6f  l.** table suppo
13a50 72 74 20 69 73 20 6f 6d 69 74 74 65 64 20 66 72  rt is omitted fr
13a60 6f 6d 20 74 68 65 20 62 75 69 6c 64 2e 0a 2a 2f  om the build..*/
13a70 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
13a80 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
13a90 45 0a 23 20 20 64 65 66 69 6e 65 20 49 73 56 69  E.#  define IsVi
13aa0 72 74 75 61 6c 28 58 29 20 20 20 20 20 20 28 28  rtual(X)      ((
13ab0 58 29 2d 3e 6e 4d 6f 64 75 6c 65 41 72 67 29 0a  X)->nModuleArg).
13ac0 23 65 6c 73 65 0a 23 20 20 64 65 66 69 6e 65 20  #else.#  define 
13ad0 49 73 56 69 72 74 75 61 6c 28 58 29 20 20 20 20  IsVirtual(X)    
13ae0 20 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a    0.#endif../*.*
13af0 2a 20 4d 61 63 72 6f 73 20 74 6f 20 64 65 74 65  * Macros to dete
13b00 72 6d 69 6e 65 20 69 66 20 61 20 63 6f 6c 75 6d  rmine if a colum
13b10 6e 20 69 73 20 68 69 64 64 65 6e 2e 20 20 49 73  n is hidden.  Is
13b20 4f 72 64 69 6e 61 72 79 48 69 64 64 65 6e 43 6f  OrdinaryHiddenCo
13b30 6c 75 6d 6e 28 29 0a 2a 2a 20 6f 6e 6c 79 20 77  lumn().** only w
13b40 6f 72 6b 73 20 66 6f 72 20 6e 6f 6e 2d 76 69 72  orks for non-vir
13b50 74 75 61 6c 20 74 61 62 6c 65 73 20 28 6f 72 64  tual tables (ord
13b60 69 6e 61 72 79 20 74 61 62 6c 65 73 20 61 6e 64  inary tables and
13b70 20 76 69 65 77 73 29 20 61 6e 64 20 69 73 0a 2a   views) and is.*
13b80 2a 20 61 6c 77 61 79 73 20 66 61 6c 73 65 20 75  * always false u
13b90 6e 6c 65 73 73 20 53 51 4c 49 54 45 5f 45 4e 41  nless SQLITE_ENA
13ba0 42 4c 45 5f 48 49 44 44 45 4e 5f 43 4f 4c 55 4d  BLE_HIDDEN_COLUM
13bb0 4e 53 20 69 73 20 64 65 66 69 6e 65 64 2e 20 20  NS is defined.  
13bc0 54 68 65 0a 2a 2a 20 49 73 48 69 64 64 65 6e 43  The.** IsHiddenC
13bd0 6f 6c 75 6d 6e 28 29 20 6d 61 63 72 6f 20 69 73  olumn() macro is
13be0 20 67 65 6e 65 72 61 6c 20 70 75 72 70 6f 73 65   general purpose
13bf0 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64  ..*/.#if defined
13c00 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 48  (SQLITE_ENABLE_H
13c10 49 44 44 45 4e 5f 43 4f 4c 55 4d 4e 53 29 0a 23  IDDEN_COLUMNS).#
13c20 20 20 64 65 66 69 6e 65 20 49 73 48 69 64 64 65    define IsHidde
13c30 6e 43 6f 6c 75 6d 6e 28 58 29 20 20 20 20 20 20  nColumn(X)      
13c40 20 20 20 28 28 28 58 29 2d 3e 63 6f 6c 46 6c 61     (((X)->colFla
13c50 67 73 20 26 20 43 4f 4c 46 4c 41 47 5f 48 49 44  gs & COLFLAG_HID
13c60 44 45 4e 29 21 3d 30 29 0a 23 20 20 64 65 66 69  DEN)!=0).#  defi
13c70 6e 65 20 49 73 4f 72 64 69 6e 61 72 79 48 69 64  ne IsOrdinaryHid
13c80 64 65 6e 43 6f 6c 75 6d 6e 28 58 29 20 28 28 28  denColumn(X) (((
13c90 58 29 2d 3e 63 6f 6c 46 6c 61 67 73 20 26 20 43  X)->colFlags & C
13ca0 4f 4c 46 4c 41 47 5f 48 49 44 44 45 4e 29 21 3d  OLFLAG_HIDDEN)!=
13cb0 30 29 0a 23 65 6c 69 66 20 21 64 65 66 69 6e 65  0).#elif !define
13cc0 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  d(SQLITE_OMIT_VI
13cd0 52 54 55 41 4c 54 41 42 4c 45 29 0a 23 20 20 64  RTUALTABLE).#  d
13ce0 65 66 69 6e 65 20 49 73 48 69 64 64 65 6e 43 6f  efine IsHiddenCo
13cf0 6c 75 6d 6e 28 58 29 20 20 20 20 20 20 20 20 20  lumn(X)         
13d00 28 28 28 58 29 2d 3e 63 6f 6c 46 6c 61 67 73 20  (((X)->colFlags 
13d10 26 20 43 4f 4c 46 4c 41 47 5f 48 49 44 44 45 4e  & COLFLAG_HIDDEN
13d20 29 21 3d 30 29 0a 23 20 20 64 65 66 69 6e 65 20  )!=0).#  define 
13d30 49 73 4f 72 64 69 6e 61 72 79 48 69 64 64 65 6e  IsOrdinaryHidden
13d40 43 6f 6c 75 6d 6e 28 58 29 20 30 0a 23 65 6c 73  Column(X) 0.#els
13d50 65 0a 23 20 20 64 65 66 69 6e 65 20 49 73 48 69  e.#  define IsHi
13d60 64 64 65 6e 43 6f 6c 75 6d 6e 28 58 29 20 20 20  ddenColumn(X)   
13d70 20 20 20 20 20 20 30 0a 23 20 20 64 65 66 69 6e        0.#  defin
13d80 65 20 49 73 4f 72 64 69 6e 61 72 79 48 69 64 64  e IsOrdinaryHidd
13d90 65 6e 43 6f 6c 75 6d 6e 28 58 29 20 30 0a 23 65  enColumn(X) 0.#e
13da0 6e 64 69 66 0a 0a 0a 2f 2a 20 44 6f 65 73 20 74  ndif.../* Does t
13db0 68 65 20 74 61 62 6c 65 20 68 61 76 65 20 61 20  he table have a 
13dc0 72 6f 77 69 64 20 2a 2f 0a 23 64 65 66 69 6e 65  rowid */.#define
13dd0 20 48 61 73 52 6f 77 69 64 28 58 29 20 20 20 20   HasRowid(X)    
13de0 20 28 28 28 58 29 2d 3e 74 61 62 46 6c 61 67 73   (((X)->tabFlags
13df0 20 26 20 54 46 5f 57 69 74 68 6f 75 74 52 6f 77   & TF_WithoutRow
13e00 69 64 29 3d 3d 30 29 0a 23 64 65 66 69 6e 65 20  id)==0).#define 
13e10 56 69 73 69 62 6c 65 52 6f 77 69 64 28 58 29 20  VisibleRowid(X) 
13e20 28 28 28 58 29 2d 3e 74 61 62 46 6c 61 67 73 20  (((X)->tabFlags 
13e30 26 20 54 46 5f 4e 6f 56 69 73 69 62 6c 65 52 6f  & TF_NoVisibleRo
13e40 77 69 64 29 3d 3d 30 29 0a 0a 2f 2a 0a 2a 2a 20  wid)==0)../*.** 
13e50 45 61 63 68 20 66 6f 72 65 69 67 6e 20 6b 65 79  Each foreign key
13e60 20 63 6f 6e 73 74 72 61 69 6e 74 20 69 73 20 61   constraint is a
13e70 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  n instance of th
13e80 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75  e following stru
13e90 63 74 75 72 65 2e 0a 2a 2a 0a 2a 2a 20 41 20 66  cture..**.** A f
13ea0 6f 72 65 69 67 6e 20 6b 65 79 20 69 73 20 61 73  oreign key is as
13eb0 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 77  sociated with tw
13ec0 6f 20 74 61 62 6c 65 73 2e 20 20 54 68 65 20 22  o tables.  The "
13ed0 66 72 6f 6d 22 20 74 61 62 6c 65 20 69 73 0a 2a  from" table is.*
13ee0 2a 20 74 68 65 20 74 61 62 6c 65 20 74 68 61 74  * the table that
13ef0 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 52 45   contains the RE
13f00 46 45 52 45 4e 43 45 53 20 63 6c 61 75 73 65 20  FERENCES clause 
13f10 74 68 61 74 20 63 72 65 61 74 65 73 20 74 68 65  that creates the
13f20 20 66 6f 72 65 69 67 6e 0a 2a 2a 20 6b 65 79 2e   foreign.** key.
13f30 20 20 54 68 65 20 22 74 6f 22 20 74 61 62 6c 65    The "to" table
13f40 20 69 73 20 74 68 65 20 74 61 62 6c 65 20 74 68   is the table th
13f50 61 74 20 69 73 20 6e 61 6d 65 64 20 69 6e 20 74  at is named in t
13f60 68 65 20 52 45 46 45 52 45 4e 43 45 53 20 63 6c  he REFERENCES cl
13f70 61 75 73 65 2e 0a 2a 2a 20 43 6f 6e 73 69 64 65  ause..** Conside
13f80 72 20 74 68 69 73 20 65 78 61 6d 70 6c 65 3a 0a  r this example:.
13f90 2a 2a 0a 2a 2a 20 20 20 20 20 43 52 45 41 54 45  **.**     CREATE
13fa0 20 54 41 42 4c 45 20 65 78 31 28 0a 2a 2a 20 20   TABLE ex1(.**  
13fb0 20 20 20 20 20 61 20 49 4e 54 45 47 45 52 20 50       a INTEGER P
13fc0 52 49 4d 41 52 59 20 4b 45 59 2c 0a 2a 2a 20 20  RIMARY KEY,.**  
13fd0 20 20 20 20 20 62 20 49 4e 54 45 47 45 52 20 43       b INTEGER C
13fe0 4f 4e 53 54 52 41 49 4e 54 20 66 6b 31 20 52 45  ONSTRAINT fk1 RE
13ff0 46 45 52 45 4e 43 45 53 20 65 78 32 28 78 29 0a  FERENCES ex2(x).
14000 2a 2a 20 20 20 20 20 29 3b 0a 2a 2a 0a 2a 2a 20  **     );.**.** 
14010 46 6f 72 20 66 6f 72 65 69 67 6e 20 6b 65 79 20  For foreign key 
14020 22 66 6b 31 22 2c 20 74 68 65 20 66 72 6f 6d 2d  "fk1", the from-
14030 74 61 62 6c 65 20 69 73 20 22 65 78 31 22 20 61  table is "ex1" a
14040 6e 64 20 74 68 65 20 74 6f 2d 74 61 62 6c 65 20  nd the to-table 
14050 69 73 20 22 65 78 32 22 2e 0a 2a 2a 20 45 71 75  is "ex2"..** Equ
14060 69 76 61 6c 65 6e 74 20 6e 61 6d 65 73 3a 0a 2a  ivalent names:.*
14070 2a 0a 2a 2a 20 20 20 20 20 66 72 6f 6d 2d 74 61  *.**     from-ta
14080 62 6c 65 20 3d 3d 20 63 68 69 6c 64 2d 74 61 62  ble == child-tab
14090 6c 65 0a 2a 2a 20 20 20 20 20 20 20 74 6f 2d 74  le.**       to-t
140a0 61 62 6c 65 20 3d 3d 20 70 61 72 65 6e 74 2d 74  able == parent-t
140b0 61 62 6c 65 0a 2a 2a 0a 2a 2a 20 45 61 63 68 20  able.**.** Each 
140c0 52 45 46 45 52 45 4e 43 45 53 20 63 6c 61 75 73  REFERENCES claus
140d0 65 20 67 65 6e 65 72 61 74 65 73 20 61 6e 20 69  e generates an i
140e0 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66  nstance of the f
140f0 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75  ollowing structu
14100 72 65 0a 2a 2a 20 77 68 69 63 68 20 69 73 20 61  re.** which is a
14110 74 74 61 63 68 65 64 20 74 6f 20 74 68 65 20 66  ttached to the f
14120 72 6f 6d 2d 74 61 62 6c 65 2e 20 20 54 68 65 20  rom-table.  The 
14130 74 6f 2d 74 61 62 6c 65 20 6e 65 65 64 20 6e 6f  to-table need no
14140 74 20 65 78 69 73 74 20 77 68 65 6e 0a 2a 2a 20  t exist when.** 
14150 74 68 65 20 66 72 6f 6d 2d 74 61 62 6c 65 20 69  the from-table i
14160 73 20 63 72 65 61 74 65 64 2e 20 20 54 68 65 20  s created.  The 
14170 65 78 69 73 74 65 6e 63 65 20 6f 66 20 74 68 65  existence of the
14180 20 74 6f 2d 74 61 62 6c 65 20 69 73 20 6e 6f 74   to-table is not
14190 20 63 68 65 63 6b 65 64 2e 0a 2a 2a 0a 2a 2a 20   checked..**.** 
141a0 54 68 65 20 6c 69 73 74 20 6f 66 20 61 6c 6c 20  The list of all 
141b0 70 61 72 65 6e 74 73 20 66 6f 72 20 63 68 69 6c  parents for chil
141c0 64 20 54 61 62 6c 65 20 58 20 69 73 20 68 65 6c  d Table X is hel
141d0 64 20 61 74 20 58 2e 70 46 4b 65 79 2e 0a 2a 2a  d at X.pFKey..**
141e0 0a 2a 2a 20 41 20 6c 69 73 74 20 6f 66 20 61 6c  .** A list of al
141f0 6c 20 63 68 69 6c 64 72 65 6e 20 66 6f 72 20 61  l children for a
14200 20 74 61 62 6c 65 20 6e 61 6d 65 64 20 5a 20 28   table named Z (
14210 77 68 69 63 68 20 6d 69 67 68 74 20 6e 6f 74 20  which might not 
14220 65 76 65 6e 20 65 78 69 73 74 29 0a 2a 2a 20 69  even exist).** i
14230 73 20 68 65 6c 64 20 69 6e 20 53 63 68 65 6d 61  s held in Schema
14240 2e 66 6b 65 79 48 61 73 68 20 77 69 74 68 20 61  .fkeyHash with a
14250 20 68 61 73 68 20 6b 65 79 20 6f 66 20 5a 2e 0a   hash key of Z..
14260 2a 2f 0a 73 74 72 75 63 74 20 46 4b 65 79 20 7b  */.struct FKey {
14270 0a 20 20 54 61 62 6c 65 20 2a 70 46 72 6f 6d 3b  .  Table *pFrom;
14280 20 20 20 20 20 2f 2a 20 54 61 62 6c 65 20 63 6f       /* Table co
14290 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 52 45 46  ntaining the REF
142a0 45 52 45 4e 43 45 53 20 63 6c 61 75 73 65 20 28  ERENCES clause (
142b0 61 6b 61 3a 20 43 68 69 6c 64 29 20 2a 2f 0a 20  aka: Child) */. 
142c0 20 46 4b 65 79 20 2a 70 4e 65 78 74 46 72 6f 6d   FKey *pNextFrom
142d0 3b 20 20 2f 2a 20 4e 65 78 74 20 46 4b 65 79 20  ;  /* Next FKey 
142e0 77 69 74 68 20 74 68 65 20 73 61 6d 65 20 69 6e  with the same in
142f0 20 70 46 72 6f 6d 2e 20 4e 65 78 74 20 70 61 72   pFrom. Next par
14300 65 6e 74 20 6f 66 20 70 46 72 6f 6d 20 2a 2f 0a  ent of pFrom */.
14310 20 20 63 68 61 72 20 2a 7a 54 6f 3b 20 20 20 20    char *zTo;    
14320 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74      /* Name of t
14330 61 62 6c 65 20 74 68 61 74 20 74 68 65 20 6b 65  able that the ke
14340 79 20 70 6f 69 6e 74 73 20 74 6f 20 28 61 6b 61  y points to (aka
14350 3a 20 50 61 72 65 6e 74 29 20 2a 2f 0a 20 20 46  : Parent) */.  F
14360 4b 65 79 20 2a 70 4e 65 78 74 54 6f 3b 20 20 20  Key *pNextTo;   
14370 20 2f 2a 20 4e 65 78 74 20 77 69 74 68 20 74 68   /* Next with th
14380 65 20 73 61 6d 65 20 7a 54 6f 2e 20 4e 65 78 74  e same zTo. Next
14390 20 63 68 69 6c 64 20 6f 66 20 7a 54 6f 2e 20 2a   child of zTo. *
143a0 2f 0a 20 20 46 4b 65 79 20 2a 70 50 72 65 76 54  /.  FKey *pPrevT
143b0 6f 3b 20 20 20 20 2f 2a 20 50 72 65 76 69 6f 75  o;    /* Previou
143c0 73 20 77 69 74 68 20 74 68 65 20 73 61 6d 65 20  s with the same 
143d0 7a 54 6f 20 2a 2f 0a 20 20 69 6e 74 20 6e 43 6f  zTo */.  int nCo
143e0 6c 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75  l;         /* Nu
143f0 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20  mber of columns 
14400 69 6e 20 74 68 69 73 20 6b 65 79 20 2a 2f 0a 20  in this key */. 
14410 20 2f 2a 20 45 56 3a 20 52 2d 33 30 33 32 33 2d   /* EV: R-30323-
14420 32 31 39 31 37 20 2a 2f 0a 20 20 75 38 20 69 73  21917 */.  u8 is
14430 44 65 66 65 72 72 65 64 3b 20 20 20 20 20 20 20  Deferred;       
14440 2f 2a 20 54 72 75 65 20 69 66 20 63 6f 6e 73 74  /* True if const
14450 72 61 69 6e 74 20 63 68 65 63 6b 69 6e 67 20 69  raint checking i
14460 73 20 64 65 66 65 72 72 65 64 20 74 69 6c 6c 20  s deferred till 
14470 43 4f 4d 4d 49 54 20 2a 2f 0a 20 20 75 38 20 61  COMMIT */.  u8 a
14480 41 63 74 69 6f 6e 5b 32 5d 3b 20 20 20 20 20 20  Action[2];      
14490 20 20 2f 2a 20 4f 4e 20 44 45 4c 45 54 45 20 61    /* ON DELETE a
144a0 6e 64 20 4f 4e 20 55 50 44 41 54 45 20 61 63 74  nd ON UPDATE act
144b0 69 6f 6e 73 2c 20 72 65 73 70 65 63 74 69 76 65  ions, respective
144c0 6c 79 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 20  ly */.  Trigger 
144d0 2a 61 70 54 72 69 67 67 65 72 5b 32 5d 3b 2f 2a  *apTrigger[2];/*
144e0 20 54 72 69 67 67 65 72 73 20 66 6f 72 20 61 41   Triggers for aA
144f0 63 74 69 6f 6e 5b 5d 20 61 63 74 69 6f 6e 73 20  ction[] actions 
14500 2a 2f 0a 20 20 73 74 72 75 63 74 20 73 43 6f 6c  */.  struct sCol
14510 4d 61 70 20 7b 20 20 20 20 20 20 2f 2a 20 4d 61  Map {      /* Ma
14520 70 70 69 6e 67 20 6f 66 20 63 6f 6c 75 6d 6e 73  pping of columns
14530 20 69 6e 20 70 46 72 6f 6d 20 74 6f 20 63 6f 6c   in pFrom to col
14540 75 6d 6e 73 20 69 6e 20 7a 54 6f 20 2a 2f 0a 20  umns in zTo */. 
14550 20 20 20 69 6e 74 20 69 46 72 6f 6d 3b 20 20 20     int iFrom;   
14560 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 64 65           /* Inde
14570 78 20 6f 66 20 63 6f 6c 75 6d 6e 20 69 6e 20 70  x of column in p
14580 46 72 6f 6d 20 2a 2f 0a 20 20 20 20 63 68 61 72  From */.    char
14590 20 2a 7a 43 6f 6c 3b 20 20 20 20 20 20 20 20 20   *zCol;         
145a0 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 63 6f 6c    /* Name of col
145b0 75 6d 6e 20 69 6e 20 7a 54 6f 2e 20 20 49 66 20  umn in zTo.  If 
145c0 4e 55 4c 4c 20 75 73 65 20 50 52 49 4d 41 52 59  NULL use PRIMARY
145d0 20 4b 45 59 20 2a 2f 0a 20 20 7d 20 61 43 6f 6c   KEY */.  } aCol
145e0 5b 31 5d 3b 20 20 20 20 20 20 20 20 20 20 20 20  [1];            
145f0 2f 2a 20 4f 6e 65 20 65 6e 74 72 79 20 66 6f 72  /* One entry for
14600 20 65 61 63 68 20 6f 66 20 6e 43 6f 6c 20 63 6f   each of nCol co
14610 6c 75 6d 6e 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a  lumns */.};../*.
14620 2a 2a 20 53 51 4c 69 74 65 20 73 75 70 70 6f 72  ** SQLite suppor
14630 74 73 20 6d 61 6e 79 20 64 69 66 66 65 72 65 6e  ts many differen
14640 74 20 77 61 79 73 20 74 6f 20 72 65 73 6f 6c 76  t ways to resolv
14650 65 20 61 20 63 6f 6e 73 74 72 61 69 6e 74 0a 2a  e a constraint.*
14660 2a 20 65 72 72 6f 72 2e 20 20 52 4f 4c 4c 42 41  * error.  ROLLBA
14670 43 4b 20 70 72 6f 63 65 73 73 69 6e 67 20 6d 65  CK processing me
14680 61 6e 73 20 74 68 61 74 20 61 20 63 6f 6e 73 74  ans that a const
14690 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 0a  raint violation.
146a0 2a 2a 20 63 61 75 73 65 73 20 74 68 65 20 6f 70  ** causes the op
146b0 65 72 61 74 69 6f 6e 20 69 6e 20 70 72 6f 63 65  eration in proce
146c0 73 73 20 74 6f 20 66 61 69 6c 20 61 6e 64 20 66  ss to fail and f
146d0 6f 72 20 74 68 65 20 63 75 72 72 65 6e 74 20 74  or the current t
146e0 72 61 6e 73 61 63 74 69 6f 6e 0a 2a 2a 20 74 6f  ransaction.** to
146f0 20 62 65 20 72 6f 6c 6c 65 64 20 62 61 63 6b 2e   be rolled back.
14700 20 20 41 42 4f 52 54 20 70 72 6f 63 65 73 73 69    ABORT processi
14710 6e 67 20 6d 65 61 6e 73 20 74 68 65 20 6f 70 65  ng means the ope
14720 72 61 74 69 6f 6e 20 69 6e 20 70 72 6f 63 65 73  ration in proces
14730 73 0a 2a 2a 20 66 61 69 6c 73 20 61 6e 64 20 61  s.** fails and a
14740 6e 79 20 70 72 69 6f 72 20 63 68 61 6e 67 65 73  ny prior changes
14750 20 66 72 6f 6d 20 74 68 61 74 20 6f 6e 65 20 6f   from that one o
14760 70 65 72 61 74 69 6f 6e 20 61 72 65 20 62 61 63  peration are bac
14770 6b 65 64 20 6f 75 74 2c 0a 2a 2a 20 62 75 74 20  ked out,.** but 
14780 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  the transaction 
14790 69 73 20 6e 6f 74 20 72 6f 6c 6c 65 64 20 62 61  is not rolled ba
147a0 63 6b 2e 20 20 46 41 49 4c 20 70 72 6f 63 65 73  ck.  FAIL proces
147b0 73 69 6e 67 20 6d 65 61 6e 73 20 74 68 61 74 0a  sing means that.
147c0 2a 2a 20 74 68 65 20 6f 70 65 72 61 74 69 6f 6e  ** the operation
147d0 20 69 6e 20 70 72 6f 67 72 65 73 73 20 73 74 6f   in progress sto
147e0 70 73 20 61 6e 64 20 72 65 74 75 72 6e 73 20 61  ps and returns a
147f0 6e 20 65 72 72 6f 72 20 63 6f 64 65 2e 20 20 42  n error code.  B
14800 75 74 20 70 72 69 6f 72 0a 2a 2a 20 63 68 61 6e  ut prior.** chan
14810 67 65 73 20 64 75 65 20 74 6f 20 74 68 65 20 73  ges due to the s
14820 61 6d 65 20 6f 70 65 72 61 74 69 6f 6e 20 61 72  ame operation ar
14830 65 20 6e 6f 74 20 62 61 63 6b 65 64 20 6f 75 74  e not backed out
14840 20 61 6e 64 20 6e 6f 20 72 6f 6c 6c 62 61 63 6b   and no rollback
14850 0a 2a 2a 20 6f 63 63 75 72 73 2e 20 20 49 47 4e  .** occurs.  IGN
14860 4f 52 45 20 6d 65 61 6e 73 20 74 68 61 74 20 74  ORE means that t
14870 68 65 20 70 61 72 74 69 63 75 6c 61 72 20 72 6f  he particular ro
14880 77 20 74 68 61 74 20 63 61 75 73 65 64 20 74 68  w that caused th
14890 65 20 63 6f 6e 73 74 72 61 69 6e 74 0a 2a 2a 20  e constraint.** 
148a0 65 72 72 6f 72 20 69 73 20 6e 6f 74 20 69 6e 73  error is not ins
148b0 65 72 74 65 64 20 6f 72 20 75 70 64 61 74 65 64  erted or updated
148c0 2e 20 20 50 72 6f 63 65 73 73 69 6e 67 20 63 6f  .  Processing co
148d0 6e 74 69 6e 75 65 73 20 61 6e 64 20 6e 6f 20 65  ntinues and no e
148e0 72 72 6f 72 0a 2a 2a 20 69 73 20 72 65 74 75 72  rror.** is retur
148f0 6e 65 64 2e 20 20 52 45 50 4c 41 43 45 20 6d 65  ned.  REPLACE me
14900 61 6e 73 20 74 68 61 74 20 70 72 65 65 78 69 73  ans that preexis
14910 74 69 6e 67 20 64 61 74 61 62 61 73 65 20 72 6f  ting database ro
14920 77 73 20 74 68 61 74 20 63 61 75 73 65 64 0a 2a  ws that caused.*
14930 2a 20 61 20 55 4e 49 51 55 45 20 63 6f 6e 73 74  * a UNIQUE const
14940 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 20  raint violation 
14950 61 72 65 20 72 65 6d 6f 76 65 64 20 73 6f 20 74  are removed so t
14960 68 61 74 20 74 68 65 20 6e 65 77 20 69 6e 73 65  hat the new inse
14970 72 74 20 6f 72 0a 2a 2a 20 75 70 64 61 74 65 20  rt or.** update 
14980 63 61 6e 20 70 72 6f 63 65 65 64 2e 20 20 50 72  can proceed.  Pr
14990 6f 63 65 73 73 69 6e 67 20 63 6f 6e 74 69 6e 75  ocessing continu
149a0 65 73 20 61 6e 64 20 6e 6f 20 65 72 72 6f 72 20  es and no error 
149b0 69 73 20 72 65 70 6f 72 74 65 64 2e 0a 2a 2a 0a  is reported..**.
149c0 2a 2a 20 52 45 53 54 52 49 43 54 2c 20 53 45 54  ** RESTRICT, SET
149d0 4e 55 4c 4c 2c 20 61 6e 64 20 43 41 53 43 41 44  NULL, and CASCAD
149e0 45 20 61 63 74 69 6f 6e 73 20 61 70 70 6c 79 20  E actions apply 
149f0 6f 6e 6c 79 20 74 6f 20 66 6f 72 65 69 67 6e 20  only to foreign 
14a00 6b 65 79 73 2e 0a 2a 2a 20 52 45 53 54 52 49 43  keys..** RESTRIC
14a10 54 20 69 73 20 74 68 65 20 73 61 6d 65 20 61 73  T is the same as
14a20 20 41 42 4f 52 54 20 66 6f 72 20 49 4d 4d 45 44   ABORT for IMMED
14a30 49 41 54 45 20 66 6f 72 65 69 67 6e 20 6b 65 79  IATE foreign key
14a40 73 20 61 6e 64 20 74 68 65 0a 2a 2a 20 73 61 6d  s and the.** sam
14a50 65 20 61 73 20 52 4f 4c 4c 42 41 43 4b 20 66 6f  e as ROLLBACK fo
14a60 72 20 44 45 46 45 52 52 45 44 20 6b 65 79 73 2e  r DEFERRED keys.
14a70 20 20 53 45 54 4e 55 4c 4c 20 6d 65 61 6e 73 20    SETNULL means 
14a80 74 68 61 74 20 74 68 65 20 66 6f 72 65 69 67 6e  that the foreign
14a90 0a 2a 2a 20 6b 65 79 20 69 73 20 73 65 74 20 74  .** key is set t
14aa0 6f 20 4e 55 4c 4c 2e 20 20 43 41 53 43 41 44 45  o NULL.  CASCADE
14ab0 20 6d 65 61 6e 73 20 74 68 61 74 20 61 20 44 45   means that a DE
14ac0 4c 45 54 45 20 6f 72 20 55 50 44 41 54 45 20 6f  LETE or UPDATE o
14ad0 66 20 74 68 65 0a 2a 2a 20 72 65 66 65 72 65 6e  f the.** referen
14ae0 63 65 64 20 74 61 62 6c 65 20 72 6f 77 20 69 73  ced table row is
14af0 20 70 72 6f 70 61 67 61 74 65 64 20 69 6e 74 6f   propagated into
14b00 20 74 68 65 20 72 6f 77 20 74 68 61 74 20 68 6f   the row that ho
14b10 6c 64 73 20 74 68 65 0a 2a 2a 20 66 6f 72 65 69  lds the.** forei
14b20 67 6e 20 6b 65 79 2e 0a 2a 2a 0a 2a 2a 20 54 68  gn key..**.** Th
14b30 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 79 6d 62  e following symb
14b40 6f 6c 69 63 20 76 61 6c 75 65 73 20 61 72 65 20  olic values are 
14b50 75 73 65 64 20 74 6f 20 72 65 63 6f 72 64 20 77  used to record w
14b60 68 69 63 68 20 74 79 70 65 0a 2a 2a 20 6f 66 20  hich type.** of 
14b70 61 63 74 69 6f 6e 20 74 6f 20 74 61 6b 65 2e 0a  action to take..
14b80 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 4e 6f  */.#define OE_No
14b90 6e 65 20 20 20 20 20 30 20 20 20 2f 2a 20 54 68  ne     0   /* Th
14ba0 65 72 65 20 69 73 20 6e 6f 20 63 6f 6e 73 74 72  ere is no constr
14bb0 61 69 6e 74 20 74 6f 20 63 68 65 63 6b 20 2a 2f  aint to check */
14bc0 0a 23 64 65 66 69 6e 65 20 4f 45 5f 52 6f 6c 6c  .#define OE_Roll
14bd0 62 61 63 6b 20 31 20 20 20 2f 2a 20 46 61 69 6c  back 1   /* Fail
14be0 20 74 68 65 20 6f 70 65 72 61 74 69 6f 6e 20 61   the operation a
14bf0 6e 64 20 72 6f 6c 6c 62 61 63 6b 20 74 68 65 20  nd rollback the 
14c00 74 72 61 6e 73 61 63 74 69 6f 6e 20 2a 2f 0a 23  transaction */.#
14c10 64 65 66 69 6e 65 20 4f 45 5f 41 62 6f 72 74 20  define OE_Abort 
14c20 20 20 20 32 20 20 20 2f 2a 20 42 61 63 6b 20 6f     2   /* Back o
14c30 75 74 20 63 68 61 6e 67 65 73 20 62 75 74 20 64  ut changes but d
14c40 6f 20 6e 6f 20 72 6f 6c 6c 62 61 63 6b 20 74 72  o no rollback tr
14c50 61 6e 73 61 63 74 69 6f 6e 20 2a 2f 0a 23 64 65  ansaction */.#de
14c60 66 69 6e 65 20 4f 45 5f 46 61 69 6c 20 20 20 20  fine OE_Fail    
14c70 20 33 20 20 20 2f 2a 20 53 74 6f 70 20 74 68 65   3   /* Stop the
14c80 20 6f 70 65 72 61 74 69 6f 6e 20 62 75 74 20 6c   operation but l
14c90 65 61 76 65 20 61 6c 6c 20 70 72 69 6f 72 20 63  eave all prior c
14ca0 68 61 6e 67 65 73 20 2a 2f 0a 23 64 65 66 69 6e  hanges */.#defin
14cb0 65 20 4f 45 5f 49 67 6e 6f 72 65 20 20 20 34 20  e OE_Ignore   4 
14cc0 20 20 2f 2a 20 49 67 6e 6f 72 65 20 74 68 65 20    /* Ignore the 
14cd0 65 72 72 6f 72 2e 20 44 6f 20 6e 6f 74 20 64 6f  error. Do not do
14ce0 20 74 68 65 20 49 4e 53 45 52 54 20 6f 72 20 55   the INSERT or U
14cf0 50 44 41 54 45 20 2a 2f 0a 23 64 65 66 69 6e 65  PDATE */.#define
14d00 20 4f 45 5f 52 65 70 6c 61 63 65 20 20 35 20 20   OE_Replace  5  
14d10 20 2f 2a 20 44 65 6c 65 74 65 20 65 78 69 73 74   /* Delete exist
14d20 69 6e 67 20 72 65 63 6f 72 64 2c 20 74 68 65 6e  ing record, then
14d30 20 64 6f 20 49 4e 53 45 52 54 20 6f 72 20 55 50   do INSERT or UP
14d40 44 41 54 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20  DATE */.#define 
14d50 4f 45 5f 55 70 64 61 74 65 20 20 20 36 20 20 20  OE_Update   6   
14d60 2f 2a 20 50 72 6f 63 65 73 73 20 61 73 20 61 20  /* Process as a 
14d70 44 4f 20 55 50 44 41 54 45 20 69 6e 20 61 6e 20  DO UPDATE in an 
14d80 75 70 73 65 72 74 20 2a 2f 0a 23 64 65 66 69 6e  upsert */.#defin
14d90 65 20 4f 45 5f 52 65 73 74 72 69 63 74 20 37 20  e OE_Restrict 7 
14da0 20 20 2f 2a 20 4f 45 5f 41 62 6f 72 74 20 66 6f    /* OE_Abort fo
14db0 72 20 49 4d 4d 45 44 49 41 54 45 2c 20 4f 45 5f  r IMMEDIATE, OE_
14dc0 52 6f 6c 6c 62 61 63 6b 20 66 6f 72 20 44 45 46  Rollback for DEF
14dd0 45 52 52 45 44 20 2a 2f 0a 23 64 65 66 69 6e 65  ERRED */.#define
14de0 20 4f 45 5f 53 65 74 4e 75 6c 6c 20 20 38 20 20   OE_SetNull  8  
14df0 20 2f 2a 20 53 65 74 20 74 68 65 20 66 6f 72 65   /* Set the fore
14e00 69 67 6e 20 6b 65 79 20 76 61 6c 75 65 20 74 6f  ign key value to
14e10 20 4e 55 4c 4c 20 2a 2f 0a 23 64 65 66 69 6e 65   NULL */.#define
14e20 20 4f 45 5f 53 65 74 44 66 6c 74 20 20 39 20 20   OE_SetDflt  9  
14e30 20 2f 2a 20 53 65 74 20 74 68 65 20 66 6f 72 65   /* Set the fore
14e40 69 67 6e 20 6b 65 79 20 76 61 6c 75 65 20 74 6f  ign key value to
14e50 20 69 74 73 20 64 65 66 61 75 6c 74 20 2a 2f 0a   its default */.
14e60 23 64 65 66 69 6e 65 20 4f 45 5f 43 61 73 63 61  #define OE_Casca
14e70 64 65 20 20 31 30 20 20 2f 2a 20 43 61 73 63 61  de  10  /* Casca
14e80 64 65 20 74 68 65 20 63 68 61 6e 67 65 73 20 2a  de the changes *
14e90 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 44 65 66  /.#define OE_Def
14ea0 61 75 6c 74 20 20 31 31 20 20 2f 2a 20 44 6f 20  ault  11  /* Do 
14eb0 77 68 61 74 65 76 65 72 20 74 68 65 20 64 65 66  whatever the def
14ec0 61 75 6c 74 20 61 63 74 69 6f 6e 20 69 73 20 2a  ault action is *
14ed0 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73  /.../*.** An ins
14ee0 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c  tance of the fol
14ef0 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65  lowing structure
14f00 20 69 73 20 70 61 73 73 65 64 20 61 73 20 74 68   is passed as th
14f10 65 20 66 69 72 73 74 0a 2a 2a 20 61 72 67 75 6d  e first.** argum
14f20 65 6e 74 20 74 6f 20 73 71 6c 69 74 65 33 56 64  ent to sqlite3Vd
14f30 62 65 4b 65 79 43 6f 6d 70 61 72 65 20 61 6e 64  beKeyCompare and
14f40 20 69 73 20 75 73 65 64 20 74 6f 20 63 6f 6e 74   is used to cont
14f50 72 6f 6c 20 74 68 65 0a 2a 2a 20 63 6f 6d 70 61  rol the.** compa
14f60 72 69 73 6f 6e 20 6f 66 20 74 68 65 20 74 77 6f  rison of the two
14f70 20 69 6e 64 65 78 20 6b 65 79 73 2e 0a 2a 2a 0a   index keys..**.
14f80 2a 2a 20 4e 6f 74 65 20 74 68 61 74 20 61 53 6f  ** Note that aSo
14f90 72 74 4f 72 64 65 72 5b 5d 20 61 6e 64 20 61 43  rtOrder[] and aC
14fa0 6f 6c 6c 5b 5d 20 68 61 76 65 20 6e 46 69 65 6c  oll[] have nFiel
14fb0 64 2b 31 20 73 6c 6f 74 73 2e 20 20 54 68 65 72  d+1 slots.  Ther
14fc0 65 0a 2a 2a 20 61 72 65 20 6e 46 69 65 6c 64 20  e.** are nField 
14fd0 73 6c 6f 74 73 20 66 6f 72 20 74 68 65 20 63 6f  slots for the co
14fe0 6c 75 6d 6e 73 20 6f 66 20 61 6e 20 69 6e 64 65  lumns of an inde
14ff0 78 20 74 68 65 6e 20 6f 6e 65 20 65 78 74 72 61  x then one extra
15000 20 73 6c 6f 74 0a 2a 2a 20 66 6f 72 20 74 68 65   slot.** for the
15010 20 72 6f 77 69 64 20 61 74 20 74 68 65 20 65 6e   rowid at the en
15020 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 4b 65 79  d..*/.struct Key
15030 49 6e 66 6f 20 7b 0a 20 20 75 33 32 20 6e 52 65  Info {.  u32 nRe
15040 66 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  f;           /* 
15050 4e 75 6d 62 65 72 20 6f 66 20 72 65 66 65 72 65  Number of refere
15060 6e 63 65 73 20 74 6f 20 74 68 69 73 20 4b 65 79  nces to this Key
15070 49 6e 66 6f 20 6f 62 6a 65 63 74 20 2a 2f 0a 20  Info object */. 
15080 20 75 38 20 65 6e 63 3b 20 20 20 20 20 20 20 20   u8 enc;        
15090 20 20 20 20 20 2f 2a 20 54 65 78 74 20 65 6e 63       /* Text enc
150a0 6f 64 69 6e 67 20 2d 20 6f 6e 65 20 6f 66 20 74  oding - one of t
150b0 68 65 20 53 51 4c 49 54 45 5f 55 54 46 2a 20 76  he SQLITE_UTF* v
150c0 61 6c 75 65 73 20 2a 2f 0a 20 20 75 31 36 20 6e  alues */.  u16 n
150d0 4b 65 79 46 69 65 6c 64 3b 20 20 20 20 20 20 2f  KeyField;      /
150e0 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6b 65 79 20  * Number of key 
150f0 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 69  columns in the i
15100 6e 64 65 78 20 2a 2f 0a 20 20 75 31 36 20 6e 41  ndex */.  u16 nA
15110 6c 6c 46 69 65 6c 64 3b 20 20 20 20 20 20 2f 2a  llField;      /*
15120 20 54 6f 74 61 6c 20 63 6f 6c 75 6d 6e 73 2c 20   Total columns, 
15130 69 6e 63 6c 75 64 69 6e 67 20 6b 65 79 20 70 6c  including key pl
15140 75 73 20 6f 74 68 65 72 73 20 2a 2f 0a 20 20 73  us others */.  s
15150 71 6c 69 74 65 33 20 2a 64 62 3b 20 20 20 20 20  qlite3 *db;     
15160 20 20 20 2f 2a 20 54 68 65 20 64 61 74 61 62 61     /* The databa
15170 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 2a 2f  se connection */
15180 0a 20 20 75 38 20 2a 61 53 6f 72 74 4f 72 64 65  .  u8 *aSortOrde
15190 72 3b 20 20 20 20 20 2f 2a 20 53 6f 72 74 20 6f  r;     /* Sort o
151a0 72 64 65 72 20 66 6f 72 20 65 61 63 68 20 63 6f  rder for each co
151b0 6c 75 6d 6e 2e 20 2a 2f 0a 20 20 43 6f 6c 6c 53  lumn. */.  CollS
151c0 65 71 20 2a 61 43 6f 6c 6c 5b 31 5d 3b 20 20 2f  eq *aColl[1];  /
151d0 2a 20 43 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75  * Collating sequ
151e0 65 6e 63 65 20 66 6f 72 20 65 61 63 68 20 74 65  ence for each te
151f0 72 6d 20 6f 66 20 74 68 65 20 6b 65 79 20 2a 2f  rm of the key */
15200 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20  .};../*.** This 
15210 6f 62 6a 65 63 74 20 68 6f 6c 64 73 20 61 20 72  object holds a r
15220 65 63 6f 72 64 20 77 68 69 63 68 20 68 61 73 20  ecord which has 
15230 62 65 65 6e 20 70 61 72 73 65 64 20 6f 75 74 20  been parsed out 
15240 69 6e 74 6f 20 69 6e 64 69 76 69 64 75 61 6c 0a  into individual.
15250 2a 2a 20 66 69 65 6c 64 73 2c 20 66 6f 72 20 74  ** fields, for t
15260 68 65 20 70 75 72 70 6f 73 65 73 20 6f 66 20 64  he purposes of d
15270 6f 69 6e 67 20 61 20 63 6f 6d 70 61 72 69 73 6f  oing a compariso
15280 6e 2e 0a 2a 2a 0a 2a 2a 20 41 20 72 65 63 6f 72  n..**.** A recor
15290 64 20 69 73 20 61 6e 20 6f 62 6a 65 63 74 20 74  d is an object t
152a0 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 6f 6e 65  hat contains one
152b0 20 6f 72 20 6d 6f 72 65 20 66 69 65 6c 64 73 20   or more fields 
152c0 6f 66 20 64 61 74 61 2e 0a 2a 2a 20 52 65 63 6f  of data..** Reco
152d0 72 64 73 20 61 72 65 20 75 73 65 64 20 74 6f 20  rds are used to 
152e0 73 74 6f 72 65 20 74 68 65 20 63 6f 6e 74 65 6e  store the conten
152f0 74 20 6f 66 20 61 20 74 61 62 6c 65 20 72 6f 77  t of a table row
15300 20 61 6e 64 20 74 6f 20 73 74 6f 72 65 0a 2a 2a   and to store.**
15310 20 74 68 65 20 6b 65 79 20 6f 66 20 61 6e 20 69   the key of an i
15320 6e 64 65 78 2e 20 20 41 20 62 6c 6f 62 20 65 6e  ndex.  A blob en
15330 63 6f 64 69 6e 67 20 6f 66 20 61 20 72 65 63 6f  coding of a reco
15340 72 64 20 69 73 20 63 72 65 61 74 65 64 20 62 79  rd is created by
15350 0a 2a 2a 20 74 68 65 20 4f 50 5f 4d 61 6b 65 52  .** the OP_MakeR
15360 65 63 6f 72 64 20 6f 70 63 6f 64 65 20 6f 66 20  ecord opcode of 
15370 74 68 65 20 56 44 42 45 20 61 6e 64 20 69 73 20  the VDBE and is 
15380 64 69 73 61 73 73 65 6d 62 6c 65 64 20 62 79 20  disassembled by 
15390 74 68 65 0a 2a 2a 20 4f 50 5f 43 6f 6c 75 6d 6e  the.** OP_Column
153a0 20 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 41   opcode..**.** A
153b0 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  n instance of th
153c0 69 73 20 6f 62 6a 65 63 74 20 73 65 72 76 65 73  is object serves
153d0 20 61 73 20 61 20 22 6b 65 79 22 20 66 6f 72 20   as a "key" for 
153e0 64 6f 69 6e 67 20 61 20 73 65 61 72 63 68 20 6f  doing a search o
153f0 6e 0a 2a 2a 20 61 6e 20 69 6e 64 65 78 20 62 2b  n.** an index b+
15400 74 72 65 65 2e 20 54 68 65 20 67 6f 61 6c 20 6f  tree. The goal o
15410 66 20 74 68 65 20 73 65 61 72 63 68 20 69 73 20  f the search is 
15420 74 6f 20 66 69 6e 64 20 74 68 65 20 65 6e 74 72  to find the entr
15430 79 20 74 68 61 74 0a 2a 2a 20 69 73 20 63 6c 6f  y that.** is clo
15440 73 65 64 20 74 6f 20 74 68 65 20 6b 65 79 20 64  sed to the key d
15450 65 73 63 72 69 62 65 64 20 62 79 20 74 68 69 73  escribed by this
15460 20 6f 62 6a 65 63 74 2e 20 20 54 68 69 73 20 6f   object.  This o
15470 62 6a 65 63 74 20 6d 69 67 68 74 20 68 6f 6c 64  bject might hold
15480 0a 2a 2a 20 6a 75 73 74 20 61 20 70 72 65 66 69  .** just a prefi
15490 78 20 6f 66 20 74 68 65 20 6b 65 79 2e 20 20 54  x of the key.  T
154a0 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 66 69 65  he number of fie
154b0 6c 64 73 20 69 73 20 67 69 76 65 6e 20 62 79 0a  lds is given by.
154c0 2a 2a 20 70 4b 65 79 49 6e 66 6f 2d 3e 6e 46 69  ** pKeyInfo->nFi
154d0 65 6c 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 72  eld..**.** The r
154e0 31 20 61 6e 64 20 72 32 20 66 69 65 6c 64 73 20  1 and r2 fields 
154f0 61 72 65 20 74 68 65 20 76 61 6c 75 65 73 20 74  are the values t
15500 6f 20 72 65 74 75 72 6e 20 69 66 20 74 68 69 73  o return if this
15510 20 6b 65 79 20 69 73 20 6c 65 73 73 20 74 68 61   key is less tha
15520 6e 0a 2a 2a 20 6f 72 20 67 72 65 61 74 65 72 20  n.** or greater 
15530 74 68 61 6e 20 61 20 6b 65 79 20 69 6e 20 74 68  than a key in th
15540 65 20 62 74 72 65 65 2c 20 72 65 73 70 65 63 74  e btree, respect
15550 69 76 65 6c 79 2e 20 20 54 68 65 73 65 20 61 72  ively.  These ar
15560 65 20 6e 6f 72 6d 61 6c 6c 79 0a 2a 2a 20 2d 31  e normally.** -1
15570 20 61 6e 64 20 2b 31 20 72 65 73 70 65 63 74 69   and +1 respecti
15580 76 65 6c 79 2c 20 62 75 74 20 6d 69 67 68 74 20  vely, but might 
15590 62 65 20 69 6e 76 65 72 74 65 64 20 74 6f 20 2b  be inverted to +
155a0 31 20 61 6e 64 20 2d 31 20 69 66 20 74 68 65 20  1 and -1 if the 
155b0 62 2d 74 72 65 65 0a 2a 2a 20 69 73 20 69 6e 20  b-tree.** is in 
155c0 44 45 53 43 20 6f 72 64 65 72 2e 0a 2a 2a 0a 2a  DESC order..**.*
155d0 2a 20 54 68 65 20 6b 65 79 20 63 6f 6d 70 61 72  * The key compar
155e0 69 73 6f 6e 20 66 75 6e 63 74 69 6f 6e 73 20 61  ison functions a
155f0 63 74 75 61 6c 6c 79 20 72 65 74 75 72 6e 20 64  ctually return d
15600 65 66 61 75 6c 74 5f 72 63 20 77 68 65 6e 20 74  efault_rc when t
15610 68 65 79 20 66 69 6e 64 0a 2a 2a 20 61 6e 20 65  hey find.** an e
15620 71 75 61 6c 73 20 63 6f 6d 70 61 72 69 73 6f 6e  quals comparison
15630 2e 20 20 64 65 66 61 75 6c 74 5f 72 63 20 63 61  .  default_rc ca
15640 6e 20 62 65 20 2d 31 2c 20 30 2c 20 6f 72 20 2b  n be -1, 0, or +
15650 31 2e 20 20 49 66 20 74 68 65 72 65 20 61 72 65  1.  If there are
15660 0a 2a 2a 20 6d 75 6c 74 69 70 6c 65 20 65 6e 74  .** multiple ent
15670 72 69 65 73 20 69 6e 20 74 68 65 20 62 2d 74 72  ries in the b-tr
15680 65 65 20 77 69 74 68 20 74 68 65 20 73 61 6d 65  ee with the same
15690 20 6b 65 79 20 28 77 68 65 6e 20 6f 6e 6c 79 20   key (when only 
156a0 6c 6f 6f 6b 69 6e 67 0a 2a 2a 20 61 74 20 74 68  looking.** at th
156b0 65 20 66 69 72 73 74 20 70 4b 65 79 49 6e 66 6f  e first pKeyInfo
156c0 2d 3e 6e 46 69 65 6c 64 73 2c 29 20 74 68 65 6e  ->nFields,) then
156d0 20 64 65 66 61 75 6c 74 5f 72 63 20 63 61 6e 20   default_rc can 
156e0 62 65 20 73 65 74 20 74 6f 20 2d 31 20 74 6f 0a  be set to -1 to.
156f0 2a 2a 20 63 61 75 73 65 20 74 68 65 20 73 65 61  ** cause the sea
15700 72 63 68 20 74 6f 20 66 69 6e 64 20 74 68 65 20  rch to find the 
15710 6c 61 73 74 20 6d 61 74 63 68 2c 20 6f 72 20 2b  last match, or +
15720 31 20 74 6f 20 63 61 75 73 65 20 74 68 65 20 73  1 to cause the s
15730 65 61 72 63 68 20 74 6f 0a 2a 2a 20 66 69 6e 64  earch to.** find
15740 20 74 68 65 20 66 69 72 73 74 20 6d 61 74 63 68   the first match
15750 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6b 65 79 20  ..**.** The key 
15760 63 6f 6d 70 61 72 69 73 6f 6e 20 66 75 6e 63 74  comparison funct
15770 69 6f 6e 73 20 77 69 6c 6c 20 73 65 74 20 65 71  ions will set eq
15780 53 65 65 6e 20 74 6f 20 74 72 75 65 20 69 66 20  Seen to true if 
15790 74 68 65 79 20 65 76 65 72 0a 2a 2a 20 67 65 74  they ever.** get
157a0 20 61 6e 64 20 65 71 75 61 6c 20 72 65 73 75 6c   and equal resul
157b0 74 73 20 77 68 65 6e 20 63 6f 6d 70 61 72 69 6e  ts when comparin
157c0 67 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65  g this structure
157d0 20 74 6f 20 61 20 62 2d 74 72 65 65 20 72 65 63   to a b-tree rec
157e0 6f 72 64 2e 0a 2a 2a 20 57 68 65 6e 20 64 65 66  ord..** When def
157f0 61 75 6c 74 5f 72 63 21 3d 30 2c 20 74 68 65 20  ault_rc!=0, the 
15800 73 65 61 72 63 68 20 6d 69 67 68 74 20 65 6e 64  search might end
15810 20 75 70 20 6f 6e 20 74 68 65 20 72 65 63 6f 72   up on the recor
15820 64 20 69 6d 6d 65 64 69 61 74 65 6c 79 0a 2a 2a  d immediately.**
15830 20 62 65 66 6f 72 65 20 74 68 65 20 66 69 72 73   before the firs
15840 74 20 6d 61 74 63 68 20 6f 72 20 69 6d 6d 65 64  t match or immed
15850 69 61 74 65 6c 79 20 61 66 74 65 72 20 74 68 65  iately after the
15860 20 6c 61 73 74 20 6d 61 74 63 68 2e 20 20 54 68   last match.  Th
15870 65 0a 2a 2a 20 65 71 53 65 65 6e 20 66 69 65 6c  e.** eqSeen fiel
15880 64 20 77 69 6c 6c 20 69 6e 64 69 63 61 74 65 20  d will indicate 
15890 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 61  whether or not a
158a0 6e 20 65 78 61 63 74 20 6d 61 74 63 68 20 65 78  n exact match ex
158b0 69 73 74 73 20 69 6e 20 74 68 65 0a 2a 2a 20 62  ists in the.** b
158c0 2d 74 72 65 65 2e 0a 2a 2f 0a 73 74 72 75 63 74  -tree..*/.struct
158d0 20 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 20   UnpackedRecord 
158e0 7b 0a 20 20 4b 65 79 49 6e 66 6f 20 2a 70 4b 65  {.  KeyInfo *pKe
158f0 79 49 6e 66 6f 3b 20 20 2f 2a 20 43 6f 6c 6c 61  yInfo;  /* Colla
15900 74 69 6f 6e 20 61 6e 64 20 73 6f 72 74 2d 6f 72  tion and sort-or
15910 64 65 72 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  der information 
15920 2a 2f 0a 20 20 4d 65 6d 20 2a 61 4d 65 6d 3b 20  */.  Mem *aMem; 
15930 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75           /* Valu
15940 65 73 20 2a 2f 0a 20 20 75 31 36 20 6e 46 69 65  es */.  u16 nFie
15950 6c 64 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e  ld;         /* N
15960 75 6d 62 65 72 20 6f 66 20 65 6e 74 72 69 65 73  umber of entries
15970 20 69 6e 20 61 70 4d 65 6d 5b 5d 20 2a 2f 0a 20   in apMem[] */. 
15980 20 69 38 20 64 65 66 61 75 6c 74 5f 72 63 3b 20   i8 default_rc; 
15990 20 20 20 20 20 2f 2a 20 43 6f 6d 70 61 72 69 73       /* Comparis
159a0 6f 6e 20 72 65 73 75 6c 74 20 69 66 20 6b 65 79  on result if key
159b0 73 20 61 72 65 20 65 71 75 61 6c 20 2a 2f 0a 20  s are equal */. 
159c0 20 75 38 20 65 72 72 43 6f 64 65 3b 20 20 20 20   u8 errCode;    
159d0 20 20 20 20 20 2f 2a 20 45 72 72 6f 72 20 64 65       /* Error de
159e0 74 65 63 74 65 64 20 62 79 20 78 52 65 63 6f 72  tected by xRecor
159f0 64 43 6f 6d 70 61 72 65 20 28 43 4f 52 52 55 50  dCompare (CORRUP
15a00 54 20 6f 72 20 4e 4f 4d 45 4d 29 20 2a 2f 0a 20  T or NOMEM) */. 
15a10 20 69 38 20 72 31 3b 20 20 20 20 20 20 20 20 20   i8 r1;         
15a20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 74 6f       /* Value to
15a30 20 72 65 74 75 72 6e 20 69 66 20 28 6c 68 73 20   return if (lhs 
15a40 3c 20 72 68 73 29 20 2a 2f 0a 20 20 69 38 20 72  < rhs) */.  i8 r
15a50 32 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  2;              
15a60 2f 2a 20 56 61 6c 75 65 20 74 6f 20 72 65 74 75  /* Value to retu
15a70 72 6e 20 69 66 20 28 6c 68 73 20 3e 20 72 68 73  rn if (lhs > rhs
15a80 29 20 2a 2f 0a 20 20 75 38 20 65 71 53 65 65 6e  ) */.  u8 eqSeen
15a90 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72  ;          /* Tr
15aa0 75 65 20 69 66 20 61 6e 20 65 71 75 61 6c 69 74  ue if an equalit
15ab0 79 20 63 6f 6d 70 61 72 69 73 6f 6e 20 68 61 73  y comparison has
15ac0 20 62 65 65 6e 20 73 65 65 6e 20 2a 2f 0a 7d 3b   been seen */.};
15ad0 0a 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 53 51  .../*.** Each SQ
15ae0 4c 20 69 6e 64 65 78 20 69 73 20 72 65 70 72 65  L index is repre
15af0 73 65 6e 74 65 64 20 69 6e 20 6d 65 6d 6f 72 79  sented in memory
15b00 20 62 79 20 61 6e 0a 2a 2a 20 69 6e 73 74 61 6e   by an.** instan
15b10 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77  ce of the follow
15b20 69 6e 67 20 73 74 72 75 63 74 75 72 65 2e 0a 2a  ing structure..*
15b30 2a 0a 2a 2a 20 54 68 65 20 63 6f 6c 75 6d 6e 73  *.** The columns
15b40 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 74 68   of the table th
15b50 61 74 20 61 72 65 20 74 6f 20 62 65 20 69 6e 64  at are to be ind
15b60 65 78 65 64 20 61 72 65 20 64 65 73 63 72 69 62  exed are describ
15b70 65 64 0a 2a 2a 20 62 79 20 74 68 65 20 61 69 43  ed.** by the aiC
15b80 6f 6c 75 6d 6e 5b 5d 20 66 69 65 6c 64 20 6f 66  olumn[] field of
15b90 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65 2e   this structure.
15ba0 20 20 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20 73    For example, s
15bb0 75 70 70 6f 73 65 0a 2a 2a 20 77 65 20 68 61 76  uppose.** we hav
15bc0 65 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  e the following 
15bd0 74 61 62 6c 65 20 61 6e 64 20 69 6e 64 65 78 3a  table and index:
15be0 0a 2a 2a 0a 2a 2a 20 20 20 20 20 43 52 45 41 54  .**.**     CREAT
15bf0 45 20 54 41 42 4c 45 20 45 78 31 28 63 31 20 69  E TABLE Ex1(c1 i
15c00 6e 74 2c 20 63 32 20 69 6e 74 2c 20 63 33 20 74  nt, c2 int, c3 t
15c10 65 78 74 29 3b 0a 2a 2a 20 20 20 20 20 43 52 45  ext);.**     CRE
15c20 41 54 45 20 49 4e 44 45 58 20 45 78 32 20 4f 4e  ATE INDEX Ex2 ON
15c30 20 45 78 31 28 63 33 2c 63 31 29 3b 0a 2a 2a 0a   Ex1(c3,c1);.**.
15c40 2a 2a 20 49 6e 20 74 68 65 20 54 61 62 6c 65 20  ** In the Table 
15c50 73 74 72 75 63 74 75 72 65 20 64 65 73 63 72 69  structure descri
15c60 62 69 6e 67 20 45 78 31 2c 20 6e 43 6f 6c 3d 3d  bing Ex1, nCol==
15c70 33 20 62 65 63 61 75 73 65 20 74 68 65 72 65 20  3 because there 
15c80 61 72 65 0a 2a 2a 20 74 68 72 65 65 20 63 6f 6c  are.** three col
15c90 75 6d 6e 73 20 69 6e 20 74 68 65 20 74 61 62 6c  umns in the tabl
15ca0 65 2e 20 20 49 6e 20 74 68 65 20 49 6e 64 65 78  e.  In the Index
15cb0 20 73 74 72 75 63 74 75 72 65 20 64 65 73 63 72   structure descr
15cc0 69 62 69 6e 67 0a 2a 2a 20 45 78 32 2c 20 6e 43  ibing.** Ex2, nC
15cd0 6f 6c 75 6d 6e 3d 3d 32 20 73 69 6e 63 65 20 32  olumn==2 since 2
15ce0 20 6f 66 20 74 68 65 20 33 20 63 6f 6c 75 6d 6e   of the 3 column
15cf0 73 20 6f 66 20 45 78 31 20 61 72 65 20 69 6e 64  s of Ex1 are ind
15d00 65 78 65 64 2e 0a 2a 2a 20 54 68 65 20 76 61 6c  exed..** The val
15d10 75 65 20 6f 66 20 61 69 43 6f 6c 75 6d 6e 20 69  ue of aiColumn i
15d20 73 20 7b 32 2c 20 30 7d 2e 20 20 61 69 43 6f 6c  s {2, 0}.  aiCol
15d30 75 6d 6e 5b 30 5d 3d 3d 32 20 62 65 63 61 75 73  umn[0]==2 becaus
15d40 65 20 74 68 65 0a 2a 2a 20 66 69 72 73 74 20 63  e the.** first c
15d50 6f 6c 75 6d 6e 20 74 6f 20 62 65 20 69 6e 64 65  olumn to be inde
15d60 78 65 64 20 28 63 33 29 20 68 61 73 20 61 6e 20  xed (c3) has an 
15d70 69 6e 64 65 78 20 6f 66 20 32 20 69 6e 20 45 78  index of 2 in Ex
15d80 31 2e 61 43 6f 6c 5b 5d 2e 0a 2a 2a 20 54 68 65  1.aCol[]..** The
15d90 20 73 65 63 6f 6e 64 20 63 6f 6c 75 6d 6e 20 74   second column t
15da0 6f 20 62 65 20 69 6e 64 65 78 65 64 20 28 63 31  o be indexed (c1
15db0 29 20 68 61 73 20 61 6e 20 69 6e 64 65 78 20 6f  ) has an index o
15dc0 66 20 30 20 69 6e 0a 2a 2a 20 45 78 31 2e 61 43  f 0 in.** Ex1.aC
15dd0 6f 6c 5b 5d 2c 20 68 65 6e 63 65 20 45 78 32 2e  ol[], hence Ex2.
15de0 61 69 43 6f 6c 75 6d 6e 5b 31 5d 3d 3d 30 2e 0a  aiColumn[1]==0..
15df0 2a 2a 0a 2a 2a 20 54 68 65 20 49 6e 64 65 78 2e  **.** The Index.
15e00 6f 6e 45 72 72 6f 72 20 66 69 65 6c 64 20 64 65  onError field de
15e10 74 65 72 6d 69 6e 65 73 20 77 68 65 74 68 65 72  termines whether
15e20 20 6f 72 20 6e 6f 74 20 74 68 65 20 69 6e 64 65   or not the inde
15e30 78 65 64 20 63 6f 6c 75 6d 6e 73 0a 2a 2a 20 6d  xed columns.** m
15e40 75 73 74 20 62 65 20 75 6e 69 71 75 65 20 61 6e  ust be unique an
15e50 64 20 77 68 61 74 20 74 6f 20 64 6f 20 69 66 20  d what to do if 
15e60 74 68 65 79 20 61 72 65 20 6e 6f 74 2e 20 20 57  they are not.  W
15e70 68 65 6e 20 49 6e 64 65 78 2e 6f 6e 45 72 72 6f  hen Index.onErro
15e80 72 3d 4f 45 5f 4e 6f 6e 65 2c 0a 2a 2a 20 69 74  r=OE_None,.** it
15e90 20 6d 65 61 6e 73 20 74 68 69 73 20 69 73 20 6e   means this is n
15ea0 6f 74 20 61 20 75 6e 69 71 75 65 20 69 6e 64 65  ot a unique inde
15eb0 78 2e 20 20 4f 74 68 65 72 77 69 73 65 20 69 74  x.  Otherwise it
15ec0 20 69 73 20 61 20 75 6e 69 71 75 65 20 69 6e 64   is a unique ind
15ed0 65 78 0a 2a 2a 20 61 6e 64 20 74 68 65 20 76 61  ex.** and the va
15ee0 6c 75 65 20 6f 66 20 49 6e 64 65 78 2e 6f 6e 45  lue of Index.onE
15ef0 72 72 6f 72 20 69 6e 64 69 63 61 74 65 20 74 68  rror indicate th
15f00 65 20 77 68 69 63 68 20 63 6f 6e 66 6c 69 63 74  e which conflict
15f10 20 72 65 73 6f 6c 75 74 69 6f 6e 0a 2a 2a 20 61   resolution.** a
15f20 6c 67 6f 72 69 74 68 6d 20 74 6f 20 65 6d 70 6c  lgorithm to empl
15f30 6f 79 20 77 68 65 6e 65 76 65 72 20 61 6e 20 61  oy whenever an a
15f40 74 74 65 6d 70 74 20 69 73 20 6d 61 64 65 20 74  ttempt is made t
15f50 6f 20 69 6e 73 65 72 74 20 61 20 6e 6f 6e 2d 75  o insert a non-u
15f60 6e 69 71 75 65 0a 2a 2a 20 65 6c 65 6d 65 6e 74  nique.** element
15f70 2e 0a 2a 2a 0a 2a 2a 20 57 68 69 6c 65 20 70 61  ..**.** While pa
15f80 72 73 69 6e 67 20 61 20 43 52 45 41 54 45 20 54  rsing a CREATE T
15f90 41 42 4c 45 20 6f 72 20 43 52 45 41 54 45 20 49  ABLE or CREATE I
15fa0 4e 44 45 58 20 73 74 61 74 65 6d 65 6e 74 20 69  NDEX statement i
15fb0 6e 20 6f 72 64 65 72 20 74 6f 0a 2a 2a 20 67 65  n order to.** ge
15fc0 6e 65 72 61 74 65 20 56 44 42 45 20 63 6f 64 65  nerate VDBE code
15fd0 20 28 61 73 20 6f 70 70 6f 73 65 64 20 74 6f 20   (as opposed to 
15fe0 70 61 72 73 69 6e 67 20 6f 6e 65 20 72 65 61 64  parsing one read
15ff0 20 66 72 6f 6d 20 61 6e 20 73 71 6c 69 74 65 5f   from an sqlite_
16000 6d 61 73 74 65 72 0a 2a 2a 20 74 61 62 6c 65 20  master.** table 
16010 61 73 20 70 61 72 74 20 6f 66 20 70 61 72 73 69  as part of parsi
16020 6e 67 20 61 6e 20 65 78 69 73 74 69 6e 67 20 64  ng an existing d
16030 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 29 2c  atabase schema),
16040 20 74 72 61 6e 73 69 65 6e 74 20 69 6e 73 74 61   transient insta
16050 6e 63 65 73 0a 2a 2a 20 6f 66 20 74 68 69 73 20  nces.** of this 
16060 73 74 72 75 63 74 75 72 65 20 6d 61 79 20 62 65  structure may be
16070 20 63 72 65 61 74 65 64 2e 20 49 6e 20 74 68 69   created. In thi
16080 73 20 63 61 73 65 20 74 68 65 20 49 6e 64 65 78  s case the Index
16090 2e 74 6e 75 6d 20 76 61 72 69 61 62 6c 65 20 69  .tnum variable i
160a0 73 0a 2a 2a 20 75 73 65 64 20 74 6f 20 73 74 6f  s.** used to sto
160b0 72 65 20 74 68 65 20 61 64 64 72 65 73 73 20 6f  re the address o
160c0 66 20 61 20 56 44 42 45 20 69 6e 73 74 72 75 63  f a VDBE instruc
160d0 74 69 6f 6e 2c 20 6e 6f 74 20 61 20 64 61 74 61  tion, not a data
160e0 62 61 73 65 20 70 61 67 65 0a 2a 2a 20 6e 75 6d  base page.** num
160f0 62 65 72 20 28 69 74 20 63 61 6e 6e 6f 74 20 2d  ber (it cannot -
16100 20 74 68 65 20 64 61 74 61 62 61 73 65 20 70 61   the database pa
16110 67 65 20 69 73 20 6e 6f 74 20 61 6c 6c 6f 63 61  ge is not alloca
16120 74 65 64 20 75 6e 74 69 6c 20 74 68 65 20 56 44  ted until the VD
16130 42 45 0a 2a 2a 20 70 72 6f 67 72 61 6d 20 69 73  BE.** program is
16140 20 65 78 65 63 75 74 65 64 29 2e 20 53 65 65 20   executed). See 
16150 63 6f 6e 76 65 72 74 54 6f 57 69 74 68 6f 75 74  convertToWithout
16160 52 6f 77 69 64 54 61 62 6c 65 28 29 20 66 6f 72  RowidTable() for
16170 20 64 65 74 61 69 6c 73 2e 0a 2a 2f 0a 73 74 72   details..*/.str
16180 75 63 74 20 49 6e 64 65 78 20 7b 0a 20 20 63 68  uct Index {.  ch
16190 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20  ar *zName;      
161a0 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f         /* Name o
161b0 66 20 74 68 69 73 20 69 6e 64 65 78 20 2a 2f 0a  f this index */.
161c0 20 20 69 31 36 20 2a 61 69 43 6f 6c 75 6d 6e 3b    i16 *aiColumn;
161d0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57 68             /* Wh
161e0 69 63 68 20 63 6f 6c 75 6d 6e 73 20 61 72 65 20  ich columns are 
161f0 75 73 65 64 20 62 79 20 74 68 69 73 20 69 6e 64  used by this ind
16200 65 78 2e 20 20 31 73 74 20 69 73 20 30 20 2a 2f  ex.  1st is 0 */
16210 0a 20 20 4c 6f 67 45 73 74 20 2a 61 69 52 6f 77  .  LogEst *aiRow
16220 4c 6f 67 45 73 74 3b 20 20 20 20 20 2f 2a 20 46  LogEst;     /* F
16230 72 6f 6d 20 41 4e 41 4c 59 5a 45 3a 20 45 73 74  rom ANALYZE: Est
16240 2e 20 72 6f 77 73 20 73 65 6c 65 63 74 65 64 20  . rows selected 
16250 62 79 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 2a  by each column *
16260 2f 0a 20 20 54 61 62 6c 65 20 2a 70 54 61 62 6c  /.  Table *pTabl
16270 65 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  e;           /* 
16280 54 68 65 20 53 51 4c 20 74 61 62 6c 65 20 62 65  The SQL table be
16290 69 6e 67 20 69 6e 64 65 78 65 64 20 2a 2f 0a 20  ing indexed */. 
162a0 20 63 68 61 72 20 2a 7a 43 6f 6c 41 66 66 3b 20   char *zColAff; 
162b0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 74 72            /* Str
162c0 69 6e 67 20 64 65 66 69 6e 69 6e 67 20 74 68 65  ing defining the
162d0 20 61 66 66 69 6e 69 74 79 20 6f 66 20 65 61 63   affinity of eac
162e0 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 49 6e  h column */.  In
162f0 64 65 78 20 2a 70 4e 65 78 74 3b 20 20 20 20 20  dex *pNext;     
16300 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6e 65         /* The ne
16310 78 74 20 69 6e 64 65 78 20 61 73 73 6f 63 69 61  xt index associa
16320 74 65 64 20 77 69 74 68 20 74 68 65 20 73 61 6d  ted with the sam
16330 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20 53 63 68  e table */.  Sch
16340 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20 20 20  ema *pSchema;   
16350 20 20 20 20 20 20 2f 2a 20 53 63 68 65 6d 61 20        /* Schema 
16360 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 69 73 20  containing this 
16370 69 6e 64 65 78 20 2a 2f 0a 20 20 75 38 20 2a 61  index */.  u8 *a
16380 53 6f 72 74 4f 72 64 65 72 3b 20 20 20 20 20 20  SortOrder;      
16390 20 20 20 20 2f 2a 20 66 6f 72 20 65 61 63 68 20      /* for each 
163a0 63 6f 6c 75 6d 6e 3a 20 54 72 75 65 3d 3d 44 45  column: True==DE
163b0 53 43 2c 20 46 61 6c 73 65 3d 3d 41 53 43 20 2a  SC, False==ASC *
163c0 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  /.  const char *
163d0 2a 61 7a 43 6f 6c 6c 3b 20 20 20 20 20 2f 2a 20  *azColl;     /* 
163e0 41 72 72 61 79 20 6f 66 20 63 6f 6c 6c 61 74 69  Array of collati
163f0 6f 6e 20 73 65 71 75 65 6e 63 65 20 6e 61 6d 65  on sequence name
16400 73 20 66 6f 72 20 69 6e 64 65 78 20 2a 2f 0a 20  s for index */. 
16410 20 45 78 70 72 20 2a 70 50 61 72 74 49 64 78 57   Expr *pPartIdxW
16420 68 65 72 65 3b 20 20 20 20 20 2f 2a 20 57 48 45  here;     /* WHE
16430 52 45 20 63 6c 61 75 73 65 20 66 6f 72 20 70 61  RE clause for pa
16440 72 74 69 61 6c 20 69 6e 64 69 63 65 73 20 2a 2f  rtial indices */
16450 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 61 43 6f  .  ExprList *aCo
16460 6c 45 78 70 72 3b 20 20 20 20 20 20 2f 2a 20 43  lExpr;      /* C
16470 6f 6c 75 6d 6e 20 65 78 70 72 65 73 73 69 6f 6e  olumn expression
16480 73 20 2a 2f 0a 20 20 69 6e 74 20 74 6e 75 6d 3b  s */.  int tnum;
16490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
164a0 2f 2a 20 44 42 20 50 61 67 65 20 63 6f 6e 74 61  /* DB Page conta
164b0 69 6e 69 6e 67 20 72 6f 6f 74 20 6f 66 20 74 68  ining root of th
164c0 69 73 20 69 6e 64 65 78 20 2a 2f 0a 20 20 4c 6f  is index */.  Lo
164d0 67 45 73 74 20 73 7a 49 64 78 52 6f 77 3b 20 20  gEst szIdxRow;  
164e0 20 20 20 20 20 20 20 2f 2a 20 45 73 74 69 6d 61         /* Estima
164f0 74 65 64 20 61 76 65 72 61 67 65 20 72 6f 77 20  ted average row 
16500 73 69 7a 65 20 69 6e 20 62 79 74 65 73 20 2a 2f  size in bytes */
16510 0a 20 20 75 31 36 20 6e 4b 65 79 43 6f 6c 3b 20  .  u16 nKeyCol; 
16520 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
16530 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73  umber of columns
16540 20 66 6f 72 6d 69 6e 67 20 74 68 65 20 6b 65 79   forming the key
16550 20 2a 2f 0a 20 20 75 31 36 20 6e 43 6f 6c 75 6d   */.  u16 nColum
16560 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  n;             /
16570 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75  * Number of colu
16580 6d 6e 73 20 73 74 6f 72 65 64 20 69 6e 20 74 68  mns stored in th
16590 65 20 69 6e 64 65 78 20 2a 2f 0a 20 20 75 38 20  e index */.  u8 
165a0 6f 6e 45 72 72 6f 72 3b 20 20 20 20 20 20 20 20  onError;        
165b0 20 20 20 20 20 20 2f 2a 20 4f 45 5f 41 62 6f 72        /* OE_Abor
165c0 74 2c 20 4f 45 5f 49 67 6e 6f 72 65 2c 20 4f 45  t, OE_Ignore, OE
165d0 5f 52 65 70 6c 61 63 65 2c 20 6f 72 20 4f 45 5f  _Replace, or OE_
165e0 4e 6f 6e 65 20 2a 2f 0a 20 20 75 6e 73 69 67 6e  None */.  unsign
165f0 65 64 20 69 64 78 54 79 70 65 3a 32 3b 20 20 20  ed idxType:2;   
16600 20 20 20 2f 2a 20 31 3d 3d 55 4e 49 51 55 45 2c     /* 1==UNIQUE,
16610 20 32 3d 3d 50 52 49 4d 41 52 59 20 4b 45 59 2c   2==PRIMARY KEY,
16620 20 30 3d 3d 43 52 45 41 54 45 20 49 4e 44 45 58   0==CREATE INDEX
16630 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 62   */.  unsigned b
16640 55 6e 6f 72 64 65 72 65 64 3a 31 3b 20 20 20 2f  Unordered:1;   /
16650 2a 20 55 73 65 20 74 68 69 73 20 69 6e 64 65 78  * Use this index
16660 20 66 6f 72 20 3d 3d 20 6f 72 20 49 4e 20 71 75   for == or IN qu
16670 65 72 69 65 73 20 6f 6e 6c 79 20 2a 2f 0a 20 20  eries only */.  
16680 75 6e 73 69 67 6e 65 64 20 75 6e 69 71 4e 6f 74  unsigned uniqNot
16690 4e 75 6c 6c 3a 31 3b 20 20 2f 2a 20 54 72 75 65  Null:1;  /* True
166a0 20 69 66 20 55 4e 49 51 55 45 20 61 6e 64 20 4e   if UNIQUE and N
166b0 4f 54 20 4e 55 4c 4c 20 66 6f 72 20 61 6c 6c 20  OT NULL for all 
166c0 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 20 20 75 6e 73  columns */.  uns
166d0 69 67 6e 65 64 20 69 73 52 65 73 69 7a 65 64 3a  igned isResized:
166e0 31 3b 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66  1;    /* True if
166f0 20 72 65 73 69 7a 65 49 6e 64 65 78 4f 62 6a 65   resizeIndexObje
16700 63 74 28 29 20 68 61 73 20 62 65 65 6e 20 63 61  ct() has been ca
16710 6c 6c 65 64 20 2a 2f 0a 20 20 75 6e 73 69 67 6e  lled */.  unsign
16720 65 64 20 69 73 43 6f 76 65 72 69 6e 67 3a 31 3b  ed isCovering:1;
16730 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 74 68     /* True if th
16740 69 73 20 69 73 20 61 20 63 6f 76 65 72 69 6e 67  is is a covering
16750 20 69 6e 64 65 78 20 2a 2f 0a 20 20 75 6e 73 69   index */.  unsi
16760 67 6e 65 64 20 6e 6f 53 6b 69 70 53 63 61 6e 3a  gned noSkipScan:
16770 31 3b 20 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 74  1;   /* Do not t
16780 72 79 20 74 6f 20 75 73 65 20 73 6b 69 70 2d 73  ry to use skip-s
16790 63 61 6e 20 69 66 20 74 72 75 65 20 2a 2f 0a 20  can if true */. 
167a0 20 75 6e 73 69 67 6e 65 64 20 68 61 73 53 74 61   unsigned hasSta
167b0 74 31 3a 31 3b 20 20 20 20 20 2f 2a 20 61 69 52  t1:1;     /* aiR
167c0 6f 77 4c 6f 67 45 73 74 20 76 61 6c 75 65 73 20  owLogEst values 
167d0 63 6f 6d 65 20 66 72 6f 6d 20 73 71 6c 69 74 65  come from sqlite
167e0 5f 73 74 61 74 31 20 2a 2f 0a 20 20 75 6e 73 69  _stat1 */.  unsi
167f0 67 6e 65 64 20 62 4e 6f 51 75 65 72 79 3a 31 3b  gned bNoQuery:1;
16800 20 20 20 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 75       /* Do not u
16810 73 65 20 74 68 69 73 20 69 6e 64 65 78 20 74 6f  se this index to
16820 20 6f 70 74 69 6d 69 7a 65 20 71 75 65 72 69 65   optimize querie
16830 73 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49  s */.#ifdef SQLI
16840 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 5f  TE_ENABLE_STAT3_
16850 4f 52 5f 53 54 41 54 34 0a 20 20 69 6e 74 20 6e  OR_STAT4.  int n
16860 53 61 6d 70 6c 65 3b 20 20 20 20 20 20 20 20 20  Sample;         
16870 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
16880 20 65 6c 65 6d 65 6e 74 73 20 69 6e 20 61 53 61   elements in aSa
16890 6d 70 6c 65 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20  mple[] */.  int 
168a0 6e 53 61 6d 70 6c 65 43 6f 6c 3b 20 20 20 20 20  nSampleCol;     
168b0 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20       /* Size of 
168c0 49 6e 64 65 78 53 61 6d 70 6c 65 2e 61 6e 45 71  IndexSample.anEq
168d0 5b 5d 20 61 6e 64 20 73 6f 20 6f 6e 20 2a 2f 0a  [] and so on */.
168e0 20 20 74 52 6f 77 63 6e 74 20 2a 61 41 76 67 45    tRowcnt *aAvgE
168f0 71 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 41 76  q;         /* Av
16900 65 72 61 67 65 20 6e 45 71 20 76 61 6c 75 65 73  erage nEq values
16910 20 66 6f 72 20 6b 65 79 73 20 6e 6f 74 20 69 6e   for keys not in
16920 20 61 53 61 6d 70 6c 65 20 2a 2f 0a 20 20 49 6e   aSample */.  In
16930 64 65 78 53 61 6d 70 6c 65 20 2a 61 53 61 6d 70  dexSample *aSamp
16940 6c 65 3b 20 20 20 20 2f 2a 20 53 61 6d 70 6c 65  le;    /* Sample
16950 73 20 6f 66 20 74 68 65 20 6c 65 66 74 2d 6d 6f  s of the left-mo
16960 73 74 20 6b 65 79 20 2a 2f 0a 20 20 74 52 6f 77  st key */.  tRow
16970 63 6e 74 20 2a 61 69 52 6f 77 45 73 74 3b 20 20  cnt *aiRowEst;  
16980 20 20 20 20 20 2f 2a 20 4e 6f 6e 2d 6c 6f 67 61       /* Non-loga
16990 72 69 74 68 6d 69 63 20 73 74 61 74 31 20 64 61  rithmic stat1 da
169a0 74 61 20 66 6f 72 20 74 68 69 73 20 69 6e 64 65  ta for this inde
169b0 78 20 2a 2f 0a 20 20 74 52 6f 77 63 6e 74 20 6e  x */.  tRowcnt n
169c0 52 6f 77 45 73 74 30 3b 20 20 20 20 20 20 20 20  RowEst0;        
169d0 2f 2a 20 4e 6f 6e 2d 6c 6f 67 61 72 69 74 68 6d  /* Non-logarithm
169e0 69 63 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77  ic number of row
169f0 73 20 69 6e 20 74 68 65 20 69 6e 64 65 78 20 2a  s in the index *
16a00 2f 0a 23 65 6e 64 69 66 0a 20 20 42 69 74 6d 61  /.#endif.  Bitma
16a10 73 6b 20 63 6f 6c 4e 6f 74 49 64 78 65 64 3b 20  sk colNotIdxed; 
16a20 20 20 20 20 2f 2a 20 30 20 66 6f 72 20 75 6e 69      /* 0 for uni
16a30 6e 64 65 78 65 64 20 63 6f 6c 75 6d 6e 73 20 69  ndexed columns i
16a40 6e 20 70 54 61 62 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  n pTab */.};../*
16a50 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75  .** Allowed valu
16a60 65 73 20 66 6f 72 20 49 6e 64 65 78 2e 69 64 78  es for Index.idx
16a70 54 79 70 65 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  Type.*/.#define 
16a80 53 51 4c 49 54 45 5f 49 44 58 54 59 50 45 5f 41  SQLITE_IDXTYPE_A
16a90 50 50 44 45 46 20 20 20 20 20 20 30 20 20 20 2f  PPDEF      0   /
16aa0 2a 20 43 72 65 61 74 65 64 20 75 73 69 6e 67 20  * Created using 
16ab0 43 52 45 41 54 45 20 49 4e 44 45 58 20 2a 2f 0a  CREATE INDEX */.
16ac0 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49  #define SQLITE_I
16ad0 44 58 54 59 50 45 5f 55 4e 49 51 55 45 20 20 20  DXTYPE_UNIQUE   
16ae0 20 20 20 31 20 20 20 2f 2a 20 49 6d 70 6c 65 6d     1   /* Implem
16af0 65 6e 74 73 20 61 20 55 4e 49 51 55 45 20 63 6f  ents a UNIQUE co
16b00 6e 73 74 72 61 69 6e 74 20 2a 2f 0a 23 64 65 66  nstraint */.#def
16b10 69 6e 65 20 53 51 4c 49 54 45 5f 49 44 58 54 59  ine SQLITE_IDXTY
16b20 50 45 5f 50 52 49 4d 41 52 59 4b 45 59 20 20 32  PE_PRIMARYKEY  2
16b30 20 20 20 2f 2a 20 49 73 20 74 68 65 20 50 52 49     /* Is the PRI
16b40 4d 41 52 59 20 4b 45 59 20 66 6f 72 20 74 68 65  MARY KEY for the
16b50 20 74 61 62 6c 65 20 2a 2f 0a 0a 2f 2a 20 52 65   table */../* Re
16b60 74 75 72 6e 20 74 72 75 65 20 69 66 20 69 6e 64  turn true if ind
16b70 65 78 20 58 20 69 73 20 61 20 50 52 49 4d 41 52  ex X is a PRIMAR
16b80 59 20 4b 45 59 20 69 6e 64 65 78 20 2a 2f 0a 23  Y KEY index */.#
16b90 64 65 66 69 6e 65 20 49 73 50 72 69 6d 61 72 79  define IsPrimary
16ba0 4b 65 79 49 6e 64 65 78 28 58 29 20 20 28 28 58  KeyIndex(X)  ((X
16bb0 29 2d 3e 69 64 78 54 79 70 65 3d 3d 53 51 4c 49  )->idxType==SQLI
16bc0 54 45 5f 49 44 58 54 59 50 45 5f 50 52 49 4d 41  TE_IDXTYPE_PRIMA
16bd0 52 59 4b 45 59 29 0a 0a 2f 2a 20 52 65 74 75 72  RYKEY)../* Retur
16be0 6e 20 74 72 75 65 20 69 66 20 69 6e 64 65 78 20  n true if index 
16bf0 58 20 69 73 20 61 20 55 4e 49 51 55 45 20 69 6e  X is a UNIQUE in
16c00 64 65 78 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49  dex */.#define I
16c10 73 55 6e 69 71 75 65 49 6e 64 65 78 28 58 29 20  sUniqueIndex(X) 
16c20 20 20 20 20 20 28 28 58 29 2d 3e 6f 6e 45 72 72       ((X)->onErr
16c30 6f 72 21 3d 4f 45 5f 4e 6f 6e 65 29 0a 0a 2f 2a  or!=OE_None)../*
16c40 20 54 68 65 20 49 6e 64 65 78 2e 61 69 43 6f 6c   The Index.aiCol
16c50 75 6d 6e 5b 5d 20 76 61 6c 75 65 73 20 61 72 65  umn[] values are
16c60 20 6e 6f 72 6d 61 6c 6c 79 20 70 6f 73 69 74 69   normally positi
16c70 76 65 20 69 6e 74 65 67 65 72 2e 20 20 42 75 74  ve integer.  But
16c80 0a 2a 2a 20 74 68 65 72 65 20 61 72 65 20 73 6f  .** there are so
16c90 6d 65 20 6e 65 67 61 74 69 76 65 20 76 61 6c 75  me negative valu
16ca0 65 73 20 74 68 61 74 20 68 61 76 65 20 73 70 65  es that have spe
16cb0 63 69 61 6c 20 6d 65 61 6e 69 6e 67 3a 0a 2a 2f  cial meaning:.*/
16cc0 0a 23 64 65 66 69 6e 65 20 58 4e 5f 52 4f 57 49  .#define XN_ROWI
16cd0 44 20 20 20 20 20 28 2d 31 29 20 20 20 20 20 2f  D     (-1)     /
16ce0 2a 20 49 6e 64 65 78 65 64 20 63 6f 6c 75 6d 6e  * Indexed column
16cf0 20 69 73 20 74 68 65 20 72 6f 77 69 64 20 2a 2f   is the rowid */
16d00 0a 23 64 65 66 69 6e 65 20 58 4e 5f 45 58 50 52  .#define XN_EXPR
16d10 20 20 20 20 20 20 28 2d 32 29 20 20 20 20 20 2f        (-2)     /
16d20 2a 20 49 6e 64 65 78 65 64 20 63 6f 6c 75 6d 6e  * Indexed column
16d30 20 69 73 20 61 6e 20 65 78 70 72 65 73 73 69 6f   is an expressio
16d40 6e 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68  n */../*.** Each
16d50 20 73 61 6d 70 6c 65 20 73 74 6f 72 65 64 20 69   sample stored i
16d60 6e 20 74 68 65 20 73 71 6c 69 74 65 5f 73 74 61  n the sqlite_sta
16d70 74 33 20 74 61 62 6c 65 20 69 73 20 72 65 70 72  t3 table is repr
16d80 65 73 65 6e 74 65 64 20 69 6e 20 6d 65 6d 6f 72  esented in memor
16d90 79 0a 2a 2a 20 75 73 69 6e 67 20 61 20 73 74 72  y.** using a str
16da0 75 63 74 75 72 65 20 6f 66 20 74 68 69 73 20 74  ucture of this t
16db0 79 70 65 2e 20 20 53 65 65 20 64 6f 63 75 6d 65  ype.  See docume
16dc0 6e 74 61 74 69 6f 6e 20 61 74 20 74 68 65 20 74  ntation at the t
16dd0 6f 70 20 6f 66 20 74 68 65 0a 2a 2a 20 61 6e 61  op of the.** ana
16de0 6c 79 7a 65 2e 63 20 73 6f 75 72 63 65 20 66 69  lyze.c source fi
16df0 6c 65 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61  le for additiona
16e00 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a  l information..*
16e10 2f 0a 73 74 72 75 63 74 20 49 6e 64 65 78 53 61  /.struct IndexSa
16e20 6d 70 6c 65 20 7b 0a 20 20 76 6f 69 64 20 2a 70  mple {.  void *p
16e30 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50 6f  ;          /* Po
16e40 69 6e 74 65 72 20 74 6f 20 73 61 6d 70 6c 65 64  inter to sampled
16e50 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 6e 74   record */.  int
16e60 20 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f   n;            /
16e70 2a 20 53 69 7a 65 20 6f 66 20 72 65 63 6f 72 64  * Size of record
16e80 20 69 6e 20 62 79 74 65 73 20 2a 2f 0a 20 20 74   in bytes */.  t
16e90 52 6f 77 63 6e 74 20 2a 61 6e 45 71 3b 20 20 20  Rowcnt *anEq;   
16ea0 20 2f 2a 20 45 73 74 2e 20 6e 75 6d 62 65 72 20   /* Est. number 
16eb0 6f 66 20 72 6f 77 73 20 77 68 65 72 65 20 74 68  of rows where th
16ec0 65 20 6b 65 79 20 65 71 75 61 6c 73 20 74 68 69  e key equals thi
16ed0 73 20 73 61 6d 70 6c 65 20 2a 2f 0a 20 20 74 52  s sample */.  tR
16ee0 6f 77 63 6e 74 20 2a 61 6e 4c 74 3b 20 20 20 20  owcnt *anLt;    
16ef0 2f 2a 20 45 73 74 2e 20 6e 75 6d 62 65 72 20 6f  /* Est. number o
16f00 66 20 72 6f 77 73 20 77 68 65 72 65 20 6b 65 79  f rows where key
16f10 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20 74 68   is less than th
16f20 69 73 20 73 61 6d 70 6c 65 20 2a 2f 0a 20 20 74  is sample */.  t
16f30 52 6f 77 63 6e 74 20 2a 61 6e 44 4c 74 3b 20 20  Rowcnt *anDLt;  
16f40 20 2f 2a 20 45 73 74 2e 20 6e 75 6d 62 65 72 20   /* Est. number 
16f50 6f 66 20 64 69 73 74 69 6e 63 74 20 6b 65 79 73  of distinct keys
16f60 20 6c 65 73 73 20 74 68 61 6e 20 74 68 69 73 20   less than this 
16f70 73 61 6d 70 6c 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  sample */.};../*
16f80 0a 2a 2a 20 45 61 63 68 20 74 6f 6b 65 6e 20 63  .** Each token c
16f90 6f 6d 69 6e 67 20 6f 75 74 20 6f 66 20 74 68 65  oming out of the
16fa0 20 6c 65 78 65 72 20 69 73 20 61 6e 20 69 6e 73   lexer is an ins
16fb0 74 61 6e 63 65 20 6f 66 0a 2a 2a 20 74 68 69 73  tance of.** this
16fc0 20 73 74 72 75 63 74 75 72 65 2e 20 20 54 6f 6b   structure.  Tok
16fd0 65 6e 73 20 61 72 65 20 61 6c 73 6f 20 75 73 65  ens are also use
16fe0 64 20 61 73 20 70 61 72 74 20 6f 66 20 61 6e 20  d as part of an 
16ff0 65 78 70 72 65 73 73 69 6f 6e 2e 0a 2a 2a 0a 2a  expression..**.*
17000 2a 20 4e 6f 74 65 20 69 66 20 54 6f 6b 65 6e 2e  * Note if Token.
17010 7a 3d 3d 30 20 74 68 65 6e 20 54 6f 6b 65 6e 2e  z==0 then Token.
17020 64 79 6e 20 61 6e 64 20 54 6f 6b 65 6e 2e 6e 20  dyn and Token.n 
17030 61 72 65 20 75 6e 64 65 66 69 6e 65 64 20 61 6e  are undefined an
17040 64 0a 2a 2a 20 6d 61 79 20 63 6f 6e 74 61 69 6e  d.** may contain
17050 20 72 61 6e 64 6f 6d 20 76 61 6c 75 65 73 2e 20   random values. 
17060 20 44 6f 20 6e 6f 74 20 6d 61 6b 65 20 61 6e 79   Do not make any
17070 20 61 73 73 75 6d 70 74 69 6f 6e 73 20 61 62 6f   assumptions abo
17080 75 74 20 54 6f 6b 65 6e 2e 64 79 6e 0a 2a 2a 20  ut Token.dyn.** 
17090 61 6e 64 20 54 6f 6b 65 6e 2e 6e 20 77 68 65 6e  and Token.n when
170a0 20 54 6f 6b 65 6e 2e 7a 3d 3d 30 2e 0a 2a 2f 0a   Token.z==0..*/.
170b0 73 74 72 75 63 74 20 54 6f 6b 65 6e 20 7b 0a 20  struct Token {. 
170c0 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 3b 20   const char *z; 
170d0 20 20 20 20 2f 2a 20 54 65 78 74 20 6f 66 20 74      /* Text of t
170e0 68 65 20 74 6f 6b 65 6e 2e 20 20 4e 6f 74 20 4e  he token.  Not N
170f0 55 4c 4c 2d 74 65 72 6d 69 6e 61 74 65 64 21 20  ULL-terminated! 
17100 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 69 6e  */.  unsigned in
17110 74 20 6e 3b 20 20 20 20 2f 2a 20 4e 75 6d 62 65  t n;    /* Numbe
17120 72 20 6f 66 20 63 68 61 72 61 63 74 65 72 73 20  r of characters 
17130 69 6e 20 74 68 69 73 20 74 6f 6b 65 6e 20 2a 2f  in this token */
17140 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e  .};../*.** An in
17150 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73 20 73  stance of this s
17160 74 72 75 63 74 75 72 65 20 63 6f 6e 74 61 69 6e  tructure contain
17170 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 6e 65  s information ne
17180 65 64 65 64 20 74 6f 20 67 65 6e 65 72 61 74 65  eded to generate
17190 0a 2a 2a 20 63 6f 64 65 20 66 6f 72 20 61 20 53  .** code for a S
171a0 45 4c 45 43 54 20 74 68 61 74 20 63 6f 6e 74 61  ELECT that conta
171b0 69 6e 73 20 61 67 67 72 65 67 61 74 65 20 66 75  ins aggregate fu
171c0 6e 63 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 49  nctions..**.** I
171d0 66 20 45 78 70 72 2e 6f 70 3d 3d 54 4b 5f 41 47  f Expr.op==TK_AG
171e0 47 5f 43 4f 4c 55 4d 4e 20 6f 72 20 54 4b 5f 41  G_COLUMN or TK_A
171f0 47 47 5f 46 55 4e 43 54 49 4f 4e 20 74 68 65 6e  GG_FUNCTION then
17200 20 45 78 70 72 2e 70 41 67 67 49 6e 66 6f 20 69   Expr.pAggInfo i
17210 73 20 61 0a 2a 2a 20 70 6f 69 6e 74 65 72 20 74  s a.** pointer t
17220 6f 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65  o this structure
17230 2e 20 20 54 68 65 20 45 78 70 72 2e 69 43 6f 6c  .  The Expr.iCol
17240 75 6d 6e 20 66 69 65 6c 64 20 69 73 20 74 68 65  umn field is the
17250 20 69 6e 64 65 78 20 69 6e 0a 2a 2a 20 41 67 67   index in.** Agg
17260 49 6e 66 6f 2e 61 43 6f 6c 5b 5d 20 6f 72 20 41  Info.aCol[] or A
17270 67 67 49 6e 66 6f 2e 61 46 75 6e 63 5b 5d 20 6f  ggInfo.aFunc[] o
17280 66 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 6e 65  f information ne
17290 65 64 65 64 20 74 6f 20 67 65 6e 65 72 61 74 65  eded to generate
172a0 0a 2a 2a 20 63 6f 64 65 20 66 6f 72 20 74 68 61  .** code for tha
172b0 74 20 6e 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 41 67  t node..**.** Ag
172c0 67 49 6e 66 6f 2e 70 47 72 6f 75 70 42 79 20 61  gInfo.pGroupBy a
172d0 6e 64 20 41 67 67 49 6e 66 6f 2e 61 46 75 6e 63  nd AggInfo.aFunc
172e0 2e 70 45 78 70 72 20 70 6f 69 6e 74 20 74 6f 20  .pExpr point to 
172f0 66 69 65 6c 64 73 20 77 69 74 68 69 6e 20 74 68  fields within th
17300 65 0a 2a 2a 20 6f 72 69 67 69 6e 61 6c 20 53 65  e.** original Se
17310 6c 65 63 74 20 73 74 72 75 63 74 75 72 65 20 74  lect structure t
17320 68 61 74 20 64 65 73 63 72 69 62 65 73 20 74 68  hat describes th
17330 65 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  e SELECT stateme
17340 6e 74 2e 20 20 54 68 65 73 65 0a 2a 2a 20 66 69  nt.  These.** fi
17350 65 6c 64 73 20 64 6f 20 6e 6f 74 20 6e 65 65 64  elds do not need
17360 20 74 6f 20 62 65 20 66 72 65 65 64 20 77 68 65   to be freed whe
17370 6e 20 64 65 61 6c 6c 6f 63 61 74 69 6e 67 20 74  n deallocating t
17380 68 65 20 41 67 67 49 6e 66 6f 20 73 74 72 75 63  he AggInfo struc
17390 74 75 72 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  ture..*/.struct 
173a0 41 67 67 49 6e 66 6f 20 7b 0a 20 20 75 38 20 64  AggInfo {.  u8 d
173b0 69 72 65 63 74 4d 6f 64 65 3b 20 20 20 20 20 20  irectMode;      
173c0 20 20 20 20 2f 2a 20 44 69 72 65 63 74 20 72 65      /* Direct re
173d0 6e 64 65 72 69 6e 67 20 6d 6f 64 65 20 6d 65 61  ndering mode mea
173e0 6e 73 20 74 61 6b 65 20 64 61 74 61 20 64 69 72  ns take data dir
173f0 65 63 74 6c 79 0a 20 20 20 20 20 20 20 20 20 20  ectly.          
17400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17410 2a 2a 20 66 72 6f 6d 20 73 6f 75 72 63 65 20 74  ** from source t
17420 61 62 6c 65 73 20 72 61 74 68 65 72 20 74 68 61  ables rather tha
17430 6e 20 66 72 6f 6d 20 61 63 63 75 6d 75 6c 61 74  n from accumulat
17440 6f 72 73 20 2a 2f 0a 20 20 75 38 20 75 73 65 53  ors */.  u8 useS
17450 6f 72 74 69 6e 67 49 64 78 3b 20 20 20 20 20 20  ortingIdx;      
17460 20 2f 2a 20 49 6e 20 64 69 72 65 63 74 20 6d 6f   /* In direct mo
17470 64 65 2c 20 72 65 66 65 72 65 6e 63 65 20 74 68  de, reference th
17480 65 20 73 6f 72 74 69 6e 67 20 69 6e 64 65 78 20  e sorting index 
17490 72 61 74 68 65 72 0a 20 20 20 20 20 20 20 20 20  rather.         
174a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
174b0 20 2a 2a 20 74 68 61 6e 20 74 68 65 20 73 6f 75   ** than the sou
174c0 72 63 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20 69  rce table */.  i
174d0 6e 74 20 73 6f 72 74 69 6e 67 49 64 78 3b 20 20  nt sortingIdx;  
174e0 20 20 20 20 20 20 20 2f 2a 20 43 75 72 73 6f 72         /* Cursor
174f0 20 6e 75 6d 62 65 72 20 6f 66 20 74 68 65 20 73   number of the s
17500 6f 72 74 69 6e 67 20 69 6e 64 65 78 20 2a 2f 0a  orting index */.
17510 20 20 69 6e 74 20 73 6f 72 74 69 6e 67 49 64 78    int sortingIdx
17520 50 54 61 62 3b 20 20 20 20 20 2f 2a 20 43 75 72  PTab;     /* Cur
17530 73 6f 72 20 6e 75 6d 62 65 72 20 6f 66 20 70 73  sor number of ps
17540 65 75 64 6f 2d 74 61 62 6c 65 20 2a 2f 0a 20 20  eudo-table */.  
17550 69 6e 74 20 6e 53 6f 72 74 69 6e 67 43 6f 6c 75  int nSortingColu
17560 6d 6e 3b 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65  mn;     /* Numbe
17570 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20  r of columns in 
17580 74 68 65 20 73 6f 72 74 69 6e 67 20 69 6e 64 65  the sorting inde
17590 78 20 2a 2f 0a 20 20 69 6e 74 20 6d 6e 52 65 67  x */.  int mnReg
175a0 2c 20 6d 78 52 65 67 3b 20 20 20 20 20 20 20 2f  , mxReg;       /
175b0 2a 20 52 61 6e 67 65 20 6f 66 20 72 65 67 69 73  * Range of regis
175c0 74 65 72 73 20 61 6c 6c 6f 63 61 74 65 64 20 66  ters allocated f
175d0 6f 72 20 61 43 6f 6c 20 61 6e 64 20 61 46 75 6e  or aCol and aFun
175e0 63 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20  c */.  ExprList 
175f0 2a 70 47 72 6f 75 70 42 79 3b 20 20 20 20 20 2f  *pGroupBy;     /
17600 2a 20 54 68 65 20 67 72 6f 75 70 20 62 79 20 63  * The group by c
17610 6c 61 75 73 65 20 2a 2f 0a 20 20 73 74 72 75 63  lause */.  struc
17620 74 20 41 67 67 49 6e 66 6f 5f 63 6f 6c 20 7b 20  t AggInfo_col { 
17630 20 20 20 2f 2a 20 46 6f 72 20 65 61 63 68 20 63     /* For each c
17640 6f 6c 75 6d 6e 20 75 73 65 64 20 69 6e 20 73 6f  olumn used in so
17650 75 72 63 65 20 74 61 62 6c 65 73 20 2a 2f 0a 20  urce tables */. 
17660 20 20 20 54 61 62 6c 65 20 2a 70 54 61 62 3b 20     Table *pTab; 
17670 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53              /* S
17680 6f 75 72 63 65 20 74 61 62 6c 65 20 2a 2f 0a 20  ource table */. 
17690 20 20 20 69 6e 74 20 69 54 61 62 6c 65 3b 20 20     int iTable;  
176a0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43              /* C
176b0 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 6f 66 20  ursor number of 
176c0 74 68 65 20 73 6f 75 72 63 65 20 74 61 62 6c 65  the source table
176d0 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 43 6f 6c   */.    int iCol
176e0 75 6d 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20  umn;            
176f0 20 2f 2a 20 43 6f 6c 75 6d 6e 20 6e 75 6d 62 65   /* Column numbe
17700 72 20 77 69 74 68 69 6e 20 74 68 65 20 73 6f 75  r within the sou
17710 72 63 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20  rce table */.   
17720 20 69 6e 74 20 69 53 6f 72 74 65 72 43 6f 6c 75   int iSorterColu
17730 6d 6e 3b 20 20 20 20 20 20 20 2f 2a 20 43 6f 6c  mn;       /* Col
17740 75 6d 6e 20 6e 75 6d 62 65 72 20 69 6e 20 74 68  umn number in th
17750 65 20 73 6f 72 74 69 6e 67 20 69 6e 64 65 78 20  e sorting index 
17760 2a 2f 0a 20 20 20 20 69 6e 74 20 69 4d 65 6d 3b  */.    int iMem;
17770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17780 2f 2a 20 4d 65 6d 6f 72 79 20 6c 6f 63 61 74 69  /* Memory locati
17790 6f 6e 20 74 68 61 74 20 61 63 74 73 20 61 73 20  on that acts as 
177a0 61 63 63 75 6d 75 6c 61 74 6f 72 20 2a 2f 0a 20  accumulator */. 
177b0 20 20 20 45 78 70 72 20 2a 70 45 78 70 72 3b 20     Expr *pExpr; 
177c0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
177d0 68 65 20 6f 72 69 67 69 6e 61 6c 20 65 78 70 72  he original expr
177e0 65 73 73 69 6f 6e 20 2a 2f 0a 20 20 7d 20 2a 61  ession */.  } *a
177f0 43 6f 6c 3b 0a 20 20 69 6e 74 20 6e 43 6f 6c 75  Col;.  int nColu
17800 6d 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  mn;            /
17810 2a 20 4e 75 6d 62 65 72 20 6f 66 20 75 73 65 64  * Number of used
17820 20 65 6e 74 72 69 65 73 20 69 6e 20 61 43 6f 6c   entries in aCol
17830 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 6e 41 63 63  [] */.  int nAcc
17840 75 6d 75 6c 61 74 6f 72 3b 20 20 20 20 20 20 20  umulator;       
17850 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c  /* Number of col
17860 75 6d 6e 73 20 74 68 61 74 20 73 68 6f 77 20 74  umns that show t
17870 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6f 75  hrough to the ou
17880 74 70 75 74 2e 0a 20 20 20 20 20 20 20 20 20 20  tput..          
17890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
178a0 2a 2a 20 41 64 64 69 74 69 6f 6e 61 6c 20 63 6f  ** Additional co
178b0 6c 75 6d 6e 73 20 61 72 65 20 75 73 65 64 20 6f  lumns are used o
178c0 6e 6c 79 20 61 73 20 70 61 72 61 6d 65 74 65 72  nly as parameter
178d0 73 20 74 6f 0a 20 20 20 20 20 20 20 20 20 20 20  s to.           
178e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a                 *
178f0 2a 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63  * aggregate func
17900 74 69 6f 6e 73 20 2a 2f 0a 20 20 73 74 72 75 63  tions */.  struc
17910 74 20 41 67 67 49 6e 66 6f 5f 66 75 6e 63 20 7b  t AggInfo_func {
17920 20 20 20 2f 2a 20 46 6f 72 20 65 61 63 68 20 61     /* For each a
17930 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f  ggregate functio
17940 6e 20 2a 2f 0a 20 20 20 20 45 78 70 72 20 2a 70  n */.    Expr *p
17950 45 78 70 72 3b 20 20 20 20 20 20 20 20 20 20 20  Expr;           
17960 20 20 2f 2a 20 45 78 70 72 65 73 73 69 6f 6e 20    /* Expression 
17970 65 6e 63 6f 64 69 6e 67 20 74 68 65 20 66 75 6e  encoding the fun
17980 63 74 69 6f 6e 20 2a 2f 0a 20 20 20 20 46 75 6e  ction */.    Fun
17990 63 44 65 66 20 2a 70 46 75 6e 63 3b 20 20 20 20  cDef *pFunc;    
179a0 20 20 20 20 20 20 2f 2a 20 54 68 65 20 61 67 67        /* The agg
179b0 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 20  regate function 
179c0 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 2a  implementation *
179d0 2f 0a 20 20 20 20 69 6e 74 20 69 4d 65 6d 3b 20  /.    int iMem; 
179e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
179f0 2a 20 4d 65 6d 6f 72 79 20 6c 6f 63 61 74 69 6f  * Memory locatio
17a00 6e 20 74 68 61 74 20 61 63 74 73 20 61 73 20 61  n that acts as a
17a10 63 63 75 6d 75 6c 61 74 6f 72 20 2a 2f 0a 20 20  ccumulator */.  
17a20 20 20 69 6e 74 20 69 44 69 73 74 69 6e 63 74 3b    int iDistinct;
17a30 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 45 70             /* Ep
17a40 68 65 6d 65 72 61 6c 20 74 61 62 6c 65 20 75 73  hemeral table us
17a50 65 64 20 74 6f 20 65 6e 66 6f 72 63 65 20 44 49  ed to enforce DI
17a60 53 54 49 4e 43 54 20 2a 2f 0a 20 20 7d 20 2a 61  STINCT */.  } *a
17a70 46 75 6e 63 3b 0a 20 20 69 6e 74 20 6e 46 75 6e  Func;.  int nFun
17a80 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  c;              
17a90 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 6e 74  /* Number of ent
17aa0 72 69 65 73 20 69 6e 20 61 46 75 6e 63 5b 5d 20  ries in aFunc[] 
17ab0 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  */.};../*.** The
17ac0 20 64 61 74 61 74 79 70 65 20 79 6e 56 61 72 20   datatype ynVar 
17ad0 69 73 20 61 20 73 69 67 6e 65 64 20 69 6e 74 65  is a signed inte
17ae0 67 65 72 2c 20 65 69 74 68 65 72 20 31 36 2d 62  ger, either 16-b
17af0 69 74 20 6f 72 20 33 32 2d 62 69 74 2e 0a 2a 2a  it or 32-bit..**
17b00 20 55 73 75 61 6c 6c 79 20 69 74 20 69 73 20 31   Usually it is 1
17b10 36 2d 62 69 74 73 2e 20 20 42 75 74 20 69 66 20  6-bits.  But if 
17b20 53 51 4c 49 54 45 5f 4d 41 58 5f 56 41 52 49 41  SQLITE_MAX_VARIA
17b30 42 4c 45 5f 4e 55 4d 42 45 52 20 69 73 20 67 72  BLE_NUMBER is gr
17b40 65 61 74 65 72 0a 2a 2a 20 74 68 61 6e 20 33 32  eater.** than 32
17b50 37 36 37 20 77 65 20 68 61 76 65 20 74 6f 20 6d  767 we have to m
17b60 61 6b 65 20 69 74 20 33 32 2d 62 69 74 2e 20 20  ake it 32-bit.  
17b70 31 36 2d 62 69 74 20 69 73 20 70 72 65 66 65 72  16-bit is prefer
17b80 72 65 64 20 62 65 63 61 75 73 65 0a 2a 2a 20 69  red because.** i
17b90 74 20 75 73 65 73 20 6c 65 73 73 20 6d 65 6d 6f  t uses less memo
17ba0 72 79 20 69 6e 20 74 68 65 20 45 78 70 72 20 6f  ry in the Expr o
17bb0 62 6a 65 63 74 2c 20 77 68 69 63 68 20 69 73 20  bject, which is 
17bc0 61 20 62 69 67 20 6d 65 6d 6f 72 79 20 75 73 65  a big memory use
17bd0 72 0a 2a 2a 20 69 6e 20 73 79 73 74 65 6d 73 20  r.** in systems 
17be0 77 69 74 68 20 6c 6f 74 73 20 6f 66 20 70 72 65  with lots of pre
17bf0 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74 73  pared statements
17c00 2e 20 20 41 6e 64 20 66 65 77 20 61 70 70 6c 69  .  And few appli
17c10 63 61 74 69 6f 6e 73 0a 2a 2a 20 6e 65 65 64 20  cations.** need 
17c20 6d 6f 72 65 20 74 68 61 6e 20 61 62 6f 75 74 20  more than about 
17c30 31 30 20 6f 72 20 32 30 20 76 61 72 69 61 62 6c  10 or 20 variabl
17c40 65 73 2e 20 20 42 75 74 20 73 6f 6d 65 20 65 78  es.  But some ex
17c50 74 72 65 6d 65 20 75 73 65 72 73 20 77 61 6e 74  treme users want
17c60 0a 2a 2a 20 74 6f 20 68 61 76 65 20 70 72 65 70  .** to have prep
17c70 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74 73 20  ared statements 
17c80 77 69 74 68 20 6f 76 65 72 20 33 32 37 36 37 20  with over 32767 
17c90 76 61 72 69 61 62 6c 65 73 2c 20 61 6e 64 20 66  variables, and f
17ca0 6f 72 20 74 68 65 6d 0a 2a 2a 20 74 68 65 20 6f  or them.** the o
17cb0 70 74 69 6f 6e 20 69 73 20 61 76 61 69 6c 61 62  ption is availab
17cc0 6c 65 20 28 61 74 20 63 6f 6d 70 69 6c 65 2d 74  le (at compile-t
17cd0 69 6d 65 29 2e 0a 2a 2f 0a 23 69 66 20 53 51 4c  ime)..*/.#if SQL
17ce0 49 54 45 5f 4d 41 58 5f 56 41 52 49 41 42 4c 45  ITE_MAX_VARIABLE
17cf0 5f 4e 55 4d 42 45 52 3c 3d 33 32 37 36 37 0a 74  _NUMBER<=32767.t
17d00 79 70 65 64 65 66 20 69 31 36 20 79 6e 56 61 72  ypedef i16 ynVar
17d10 3b 0a 23 65 6c 73 65 0a 74 79 70 65 64 65 66 20  ;.#else.typedef 
17d20 69 6e 74 20 79 6e 56 61 72 3b 0a 23 65 6e 64 69  int ynVar;.#endi
17d30 66 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 6e 6f  f../*.** Each no
17d40 64 65 20 6f 66 20 61 6e 20 65 78 70 72 65 73 73  de of an express
17d50 69 6f 6e 20 69 6e 20 74 68 65 20 70 61 72 73 65  ion in the parse
17d60 20 74 72 65 65 20 69 73 20 61 6e 20 69 6e 73 74   tree is an inst
17d70 61 6e 63 65 0a 2a 2a 20 6f 66 20 74 68 69 73 20  ance.** of this 
17d80 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a 0a 2a 2a  structure..**.**
17d90 20 45 78 70 72 2e 6f 70 20 69 73 20 74 68 65 20   Expr.op is the 
17da0 6f 70 63 6f 64 65 2e 20 54 68 65 20 69 6e 74 65  opcode. The inte
17db0 67 65 72 20 70 61 72 73 65 72 20 74 6f 6b 65 6e  ger parser token
17dc0 20 63 6f 64 65 73 20 61 72 65 20 72 65 75 73 65   codes are reuse
17dd0 64 0a 2a 2a 20 61 73 20 6f 70 63 6f 64 65 73 20  d.** as opcodes 
17de0 68 65 72 65 2e 20 46 6f 72 20 65 78 61 6d 70 6c  here. For exampl
17df0 65 2c 20 74 68 65 20 70 61 72 73 65 72 20 64 65  e, the parser de
17e00 66 69 6e 65 73 20 54 4b 5f 47 45 20 74 6f 20 62  fines TK_GE to b
17e10 65 20 61 6e 20 69 6e 74 65 67 65 72 0a 2a 2a 20  e an integer.** 
17e20 63 6f 64 65 20 72 65 70 72 65 73 65 6e 74 69 6e  code representin
17e30 67 20 74 68 65 20 22 3e 3d 22 20 6f 70 65 72 61  g the ">=" opera
17e40 74 6f 72 2e 20 54 68 69 73 20 73 61 6d 65 20 69  tor. This same i
17e50 6e 74 65 67 65 72 20 63 6f 64 65 20 69 73 20 72  nteger code is r
17e60 65 75 73 65 64 0a 2a 2a 20 74 6f 20 72 65 70 72  eused.** to repr
17e70 65 73 65 6e 74 20 74 68 65 20 67 72 65 61 74 65  esent the greate
17e80 72 2d 74 68 61 6e 2d 6f 72 2d 65 71 75 61 6c 2d  r-than-or-equal-
17e90 74 6f 20 6f 70 65 72 61 74 6f 72 20 69 6e 20 74  to operator in t
17ea0 68 65 20 65 78 70 72 65 73 73 69 6f 6e 0a 2a 2a  he expression.**
17eb0 20 74 72 65 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20   tree..**.** If 
17ec0 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69  the expression i
17ed0 73 20 61 6e 20 53 51 4c 20 6c 69 74 65 72 61 6c  s an SQL literal
17ee0 20 28 54 4b 5f 49 4e 54 45 47 45 52 2c 20 54 4b   (TK_INTEGER, TK
17ef0 5f 46 4c 4f 41 54 2c 20 54 4b 5f 42 4c 4f 42 2c  _FLOAT, TK_BLOB,
17f00 0a 2a 2a 20 6f 72 20 54 4b 5f 53 54 52 49 4e 47  .** or TK_STRING
17f10 29 2c 20 74 68 65 6e 20 45 78 70 72 2e 74 6f 6b  ), then Expr.tok
17f20 65 6e 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20  en contains the 
17f30 74 65 78 74 20 6f 66 20 74 68 65 20 53 51 4c 20  text of the SQL 
17f40 6c 69 74 65 72 61 6c 2e 20 49 66 0a 2a 2a 20 74  literal. If.** t
17f50 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73  he expression is
17f60 20 61 20 76 61 72 69 61 62 6c 65 20 28 54 4b 5f   a variable (TK_
17f70 56 41 52 49 41 42 4c 45 29 2c 20 74 68 65 6e 20  VARIABLE), then 
17f80 45 78 70 72 2e 74 6f 6b 65 6e 20 63 6f 6e 74 61  Expr.token conta
17f90 69 6e 73 20 74 68 65 0a 2a 2a 20 76 61 72 69 61  ins the.** varia
17fa0 62 6c 65 20 6e 61 6d 65 2e 20 46 69 6e 61 6c 6c  ble name. Finall
17fb0 79 2c 20 69 66 20 74 68 65 20 65 78 70 72 65 73  y, if the expres
17fc0 73 69 6f 6e 20 69 73 20 61 6e 20 53 51 4c 20 66  sion is an SQL f
17fd0 75 6e 63 74 69 6f 6e 20 28 54 4b 5f 46 55 4e 43  unction (TK_FUNC
17fe0 54 49 4f 4e 29 2c 0a 2a 2a 20 74 68 65 6e 20 45  TION),.** then E
17ff0 78 70 72 2e 74 6f 6b 65 6e 20 63 6f 6e 74 61 69  xpr.token contai
18000 6e 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74  ns the name of t
18010 68 65 20 66 75 6e 63 74 69 6f 6e 2e 0a 2a 2a 0a  he function..**.
18020 2a 2a 20 45 78 70 72 2e 70 52 69 67 68 74 20 61  ** Expr.pRight a
18030 6e 64 20 45 78 70 72 2e 70 4c 65 66 74 20 61 72  nd Expr.pLeft ar
18040 65 20 74 68 65 20 6c 65 66 74 20 61 6e 64 20 72  e the left and r
18050 69 67 68 74 20 73 75 62 65 78 70 72 65 73 73 69  ight subexpressi
18060 6f 6e 73 20 6f 66 20 61 0a 2a 2a 20 62 69 6e 61  ons of a.** bina
18070 72 79 20 6f 70 65 72 61 74 6f 72 2e 20 45 69 74  ry operator. Eit
18080 68 65 72 20 6f 72 20 62 6f 74 68 20 6d 61 79 20  her or both may 
18090 62 65 20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a 2a 20 45  be NULL..**.** E
180a0 78 70 72 2e 78 2e 70 4c 69 73 74 20 69 73 20 61  xpr.x.pList is a
180b0 20 6c 69 73 74 20 6f 66 20 61 72 67 75 6d 65 6e   list of argumen
180c0 74 73 20 69 66 20 74 68 65 20 65 78 70 72 65 73  ts if the expres
180d0 73 69 6f 6e 20 69 73 20 61 6e 20 53 51 4c 20 66  sion is an SQL f
180e0 75 6e 63 74 69 6f 6e 2c 0a 2a 2a 20 61 20 43 41  unction,.** a CA
180f0 53 45 20 65 78 70 72 65 73 73 69 6f 6e 20 6f 72  SE expression or
18100 20 61 6e 20 49 4e 20 65 78 70 72 65 73 73 69 6f   an IN expressio
18110 6e 20 6f 66 20 74 68 65 20 66 6f 72 6d 20 22 3c  n of the form "<
18120 6c 68 73 3e 20 49 4e 20 28 3c 79 3e 2c 20 3c 7a  lhs> IN (<y>, <z
18130 3e 2e 2e 2e 29 22 2e 0a 2a 2a 20 45 78 70 72 2e  >...)"..** Expr.
18140 78 2e 70 53 65 6c 65 63 74 20 69 73 20 75 73 65  x.pSelect is use
18150 64 20 69 66 20 74 68 65 20 65 78 70 72 65 73 73  d if the express
18160 69 6f 6e 20 69 73 20 61 20 73 75 62 2d 73 65 6c  ion is a sub-sel
18170 65 63 74 20 6f 72 20 61 6e 20 65 78 70 72 65 73  ect or an expres
18180 73 69 6f 6e 20 6f 66 0a 2a 2a 20 74 68 65 20 66  sion of.** the f
18190 6f 72 6d 20 22 3c 6c 68 73 3e 20 49 4e 20 28 53  orm "<lhs> IN (S
181a0 45 4c 45 43 54 20 2e 2e 2e 29 22 2e 20 49 66 20  ELECT ...)". If 
181b0 74 68 65 20 45 50 5f 78 49 73 53 65 6c 65 63 74  the EP_xIsSelect
181c0 20 62 69 74 20 69 73 20 73 65 74 20 69 6e 20 74   bit is set in t
181d0 68 65 0a 2a 2a 20 45 78 70 72 2e 66 6c 61 67 73  he.** Expr.flags
181e0 20 6d 61 73 6b 2c 20 74 68 65 6e 20 45 78 70 72   mask, then Expr
181f0 2e 78 2e 70 53 65 6c 65 63 74 20 69 73 20 76 61  .x.pSelect is va
18200 6c 69 64 2e 20 4f 74 68 65 72 77 69 73 65 2c 20  lid. Otherwise, 
18210 45 78 70 72 2e 78 2e 70 4c 69 73 74 20 69 73 0a  Expr.x.pList is.
18220 2a 2a 20 76 61 6c 69 64 2e 0a 2a 2a 0a 2a 2a 20  ** valid..**.** 
18230 41 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 6f 66  An expression of
18240 20 74 68 65 20 66 6f 72 6d 20 49 44 20 6f 72 20   the form ID or 
18250 49 44 2e 49 44 20 72 65 66 65 72 73 20 74 6f 20  ID.ID refers to 
18260 61 20 63 6f 6c 75 6d 6e 20 69 6e 20 61 20 74 61  a column in a ta
18270 62 6c 65 2e 0a 2a 2a 20 46 6f 72 20 73 75 63 68  ble..** For such
18280 20 65 78 70 72 65 73 73 69 6f 6e 73 2c 20 45 78   expressions, Ex
18290 70 72 2e 6f 70 20 69 73 20 73 65 74 20 74 6f 20  pr.op is set to 
182a0 54 4b 5f 43 4f 4c 55 4d 4e 20 61 6e 64 20 45 78  TK_COLUMN and Ex
182b0 70 72 2e 69 54 61 62 6c 65 20 69 73 0a 2a 2a 20  pr.iTable is.** 
182c0 74 68 65 20 69 6e 74 65 67 65 72 20 63 75 72 73  the integer curs
182d0 6f 72 20 6e 75 6d 62 65 72 20 6f 66 20 61 20 56  or number of a V
182e0 44 42 45 20 63 75 72 73 6f 72 20 70 6f 69 6e 74  DBE cursor point
182f0 69 6e 67 20 74 6f 20 74 68 61 74 20 74 61 62 6c  ing to that tabl
18300 65 20 61 6e 64 0a 2a 2a 20 45 78 70 72 2e 69 43  e and.** Expr.iC
18310 6f 6c 75 6d 6e 20 69 73 20 74 68 65 20 63 6f 6c  olumn is the col
18320 75 6d 6e 20 6e 75 6d 62 65 72 20 66 6f 72 20 74  umn number for t
18330 68 65 20 73 70 65 63 69 66 69 63 20 63 6f 6c 75  he specific colu
18340 6d 6e 2e 20 20 49 66 20 74 68 65 0a 2a 2a 20 65  mn.  If the.** e
18350 78 70 72 65 73 73 69 6f 6e 20 69 73 20 75 73 65  xpression is use
18360 64 20 61 73 20 61 20 72 65 73 75 6c 74 20 69 6e  d as a result in
18370 20 61 6e 20 61 67 67 72 65 67 61 74 65 20 53 45   an aggregate SE
18380 4c 45 43 54 2c 20 74 68 65 6e 20 74 68 65 0a 2a  LECT, then the.*
18390 2a 20 76 61 6c 75 65 20 69 73 20 61 6c 73 6f 20  * value is also 
183a0 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20 45 78  stored in the Ex
183b0 70 72 2e 69 41 67 67 20 63 6f 6c 75 6d 6e 20 69  pr.iAgg column i
183c0 6e 20 74 68 65 20 61 67 67 72 65 67 61 74 65 20  n the aggregate 
183d0 73 6f 20 74 68 61 74 0a 2a 2a 20 69 74 20 63 61  so that.** it ca
183e0 6e 20 62 65 20 61 63 63 65 73 73 65 64 20 61 66  n be accessed af
183f0 74 65 72 20 61 6c 6c 20 61 67 67 72 65 67 61 74  ter all aggregat
18400 65 73 20 61 72 65 20 63 6f 6d 70 75 74 65 64 2e  es are computed.
18410 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 65 78  .**.** If the ex
18420 70 72 65 73 73 69 6f 6e 20 69 73 20 61 6e 20 75  pression is an u
18430 6e 62 6f 75 6e 64 20 76 61 72 69 61 62 6c 65 20  nbound variable 
18440 6d 61 72 6b 65 72 20 28 61 20 71 75 65 73 74 69  marker (a questi
18450 6f 6e 20 6d 61 72 6b 0a 2a 2a 20 63 68 61 72 61  on mark.** chara
18460 63 74 65 72 20 27 3f 27 20 69 6e 20 74 68 65 20  cter '?' in the 
18470 6f 72 69 67 69 6e 61 6c 20 53 51 4c 29 20 74 68  original SQL) th
18480 65 6e 20 74 68 65 20 45 78 70 72 2e 69 54 61 62  en the Expr.iTab
18490 6c 65 20 68 6f 6c 64 73 20 74 68 65 20 69 6e 64  le holds the ind
184a0 65 78 0a 2a 2a 20 6e 75 6d 62 65 72 20 66 6f 72  ex.** number for
184b0 20 74 68 61 74 20 76 61 72 69 61 62 6c 65 2e 0a   that variable..
184c0 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 65 78 70  **.** If the exp
184d0 72 65 73 73 69 6f 6e 20 69 73 20 61 20 73 75 62  ression is a sub
184e0 71 75 65 72 79 20 74 68 65 6e 20 45 78 70 72 2e  query then Expr.
184f0 69 43 6f 6c 75 6d 6e 20 68 6f 6c 64 73 20 61 6e  iColumn holds an
18500 20 69 6e 74 65 67 65 72 0a 2a 2a 20 72 65 67 69   integer.** regi
18510 73 74 65 72 20 6e 75 6d 62 65 72 20 63 6f 6e 74  ster number cont
18520 61 69 6e 69 6e 67 20 74 68 65 20 72 65 73 75 6c  aining the resul
18530 74 20 6f 66 20 74 68 65 20 73 75 62 71 75 65 72  t of the subquer
18540 79 2e 20 20 49 66 20 74 68 65 0a 2a 2a 20 73 75  y.  If the.** su
18550 62 71 75 65 72 79 20 67 69 76 65 73 20 61 20 63  bquery gives a c
18560 6f 6e 73 74 61 6e 74 20 72 65 73 75 6c 74 2c 20  onstant result, 
18570 74 68 65 6e 20 69 54 61 62 6c 65 20 69 73 20 2d  then iTable is -
18580 31 2e 20 20 49 66 20 74 68 65 20 73 75 62 71 75  1.  If the subqu
18590 65 72 79 0a 2a 2a 20 67 69 76 65 73 20 61 20 64  ery.** gives a d
185a0 69 66 66 65 72 65 6e 74 20 61 6e 73 77 65 72 20  ifferent answer 
185b0 61 74 20 64 69 66 66 65 72 65 6e 74 20 74 69 6d  at different tim
185c0 65 73 20 64 75 72 69 6e 67 20 73 74 61 74 65 6d  es during statem
185d0 65 6e 74 20 70 72 6f 63 65 73 73 69 6e 67 0a 2a  ent processing.*
185e0 2a 20 74 68 65 6e 20 69 54 61 62 6c 65 20 69 73  * then iTable is
185f0 20 74 68 65 20 61 64 64 72 65 73 73 20 6f 66 20   the address of 
18600 61 20 73 75 62 72 6f 75 74 69 6e 65 20 74 68 61  a subroutine tha
18610 74 20 63 6f 6d 70 75 74 65 73 20 74 68 65 20 73  t computes the s
18620 75 62 71 75 65 72 79 2e 0a 2a 2a 0a 2a 2a 20 49  ubquery..**.** I
18630 66 20 74 68 65 20 45 78 70 72 20 69 73 20 6f 66  f the Expr is of
18640 20 74 79 70 65 20 4f 50 5f 43 6f 6c 75 6d 6e 2c   type OP_Column,
18650 20 61 6e 64 20 74 68 65 20 74 61 62 6c 65 20 69   and the table i
18660 74 20 69 73 20 73 65 6c 65 63 74 69 6e 67 20 66  t is selecting f
18670 72 6f 6d 0a 2a 2a 20 69 73 20 61 20 64 69 73 6b  rom.** is a disk
18680 20 74 61 62 6c 65 20 6f 72 20 74 68 65 20 22 6f   table or the "o
18690 6c 64 2e 2a 22 20 70 73 65 75 64 6f 2d 74 61 62  ld.*" pseudo-tab
186a0 6c 65 2c 20 74 68 65 6e 20 70 54 61 62 20 70 6f  le, then pTab po
186b0 69 6e 74 73 20 74 6f 20 74 68 65 0a 2a 2a 20 63  ints to the.** c
186c0 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 74 61 62  orresponding tab
186d0 6c 65 20 64 65 66 69 6e 69 74 69 6f 6e 2e 0a 2a  le definition..*
186e0 2a 0a 2a 2a 20 41 4c 4c 4f 43 41 54 49 4f 4e 20  *.** ALLOCATION 
186f0 4e 4f 54 45 53 3a 0a 2a 2a 0a 2a 2a 20 45 78 70  NOTES:.**.** Exp
18700 72 20 6f 62 6a 65 63 74 73 20 63 61 6e 20 75 73  r objects can us
18710 65 20 61 20 6c 6f 74 20 6f 66 20 6d 65 6d 6f 72  e a lot of memor
18720 79 20 73 70 61 63 65 20 69 6e 20 64 61 74 61 62  y space in datab
18730 61 73 65 20 73 63 68 65 6d 61 2e 20 20 54 6f 0a  ase schema.  To.
18740 2a 2a 20 68 65 6c 70 20 72 65 64 75 63 65 20 6d  ** help reduce m
18750 65 6d 6f 72 79 20 72 65 71 75 69 72 65 6d 65 6e  emory requiremen
18760 74 73 2c 20 73 6f 6d 65 74 69 6d 65 73 20 61 6e  ts, sometimes an
18770 20 45 78 70 72 20 6f 62 6a 65 63 74 20 77 69 6c   Expr object wil
18780 6c 20 62 65 0a 2a 2a 20 74 72 75 6e 63 61 74 65  l be.** truncate
18790 64 2e 20 20 41 6e 64 20 74 6f 20 72 65 64 75 63  d.  And to reduc
187a0 65 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  e the number of 
187b0 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f  memory allocatio
187c0 6e 73 2c 20 73 6f 6d 65 74 69 6d 65 73 0a 2a 2a  ns, sometimes.**
187d0 20 74 77 6f 20 6f 72 20 6d 6f 72 65 20 45 78 70   two or more Exp
187e0 72 20 6f 62 6a 65 63 74 73 20 77 69 6c 6c 20 62  r objects will b
187f0 65 20 73 74 6f 72 65 64 20 69 6e 20 61 20 73 69  e stored in a si
18800 6e 67 6c 65 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f  ngle memory allo
18810 63 61 74 69 6f 6e 2c 0a 2a 2a 20 74 6f 67 65 74  cation,.** toget
18820 68 65 72 20 77 69 74 68 20 45 78 70 72 2e 7a 54  her with Expr.zT
18830 6f 6b 65 6e 20 73 74 72 69 6e 67 73 2e 0a 2a 2a  oken strings..**
18840 0a 2a 2a 20 49 66 20 74 68 65 20 45 50 5f 52 65  .** If the EP_Re
18850 64 75 63 65 64 20 61 6e 64 20 45 50 5f 54 6f 6b  duced and EP_Tok
18860 65 6e 4f 6e 6c 79 20 66 6c 61 67 73 20 61 72 65  enOnly flags are
18870 20 73 65 74 20 77 68 65 6e 0a 2a 2a 20 61 6e 20   set when.** an 
18880 45 78 70 72 20 6f 62 6a 65 63 74 20 69 73 20 74  Expr object is t
18890 72 75 6e 63 61 74 65 64 2e 20 20 57 68 65 6e 20  runcated.  When 
188a0 45 50 5f 52 65 64 75 63 65 64 20 69 73 20 73 65  EP_Reduced is se
188b0 74 2c 20 74 68 65 6e 20 61 6c 6c 0a 2a 2a 20 74  t, then all.** t
188c0 68 65 20 63 68 69 6c 64 20 45 78 70 72 20 6f 62  he child Expr ob
188d0 6a 65 63 74 73 20 69 6e 20 74 68 65 20 45 78 70  jects in the Exp
188e0 72 2e 70 4c 65 66 74 20 61 6e 64 20 45 78 70 72  r.pLeft and Expr
188f0 2e 70 52 69 67 68 74 20 73 75 62 74 72 65 65 73  .pRight subtrees
18900 0a 2a 2a 20 61 72 65 20 63 6f 6e 74 61 69 6e 65  .** are containe
18910 64 20 77 69 74 68 69 6e 20 74 68 65 20 73 61 6d  d within the sam
18920 65 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74  e memory allocat
18930 69 6f 6e 2e 20 20 4e 6f 74 65 2c 20 68 6f 77 65  ion.  Note, howe
18940 76 65 72 2c 20 74 68 61 74 0a 2a 2a 20 74 68 65  ver, that.** the
18950 20 73 75 62 74 72 65 65 73 20 69 6e 20 45 78 70   subtrees in Exp
18960 72 2e 78 2e 70 4c 69 73 74 20 6f 72 20 45 78 70  r.x.pList or Exp
18970 72 2e 78 2e 70 53 65 6c 65 63 74 20 61 72 65 20  r.x.pSelect are 
18980 61 6c 77 61 79 73 20 73 65 70 61 72 61 74 65 6c  always separatel
18990 79 0a 2a 2a 20 61 6c 6c 6f 63 61 74 65 64 2c 20  y.** allocated, 
189a0 72 65 67 61 72 64 6c 65 73 73 20 6f 66 20 77 68  regardless of wh
189b0 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 45 50 5f  ether or not EP_
189c0 52 65 64 75 63 65 64 20 69 73 20 73 65 74 2e 0a  Reduced is set..
189d0 2a 2f 0a 73 74 72 75 63 74 20 45 78 70 72 20 7b  */.struct Expr {
189e0 0a 20 20 75 38 20 6f 70 3b 20 20 20 20 20 20 20  .  u8 op;       
189f0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 70 65            /* Ope
18a00 72 61 74 69 6f 6e 20 70 65 72 66 6f 72 6d 65 64  ration performed
18a10 20 62 79 20 74 68 69 73 20 6e 6f 64 65 20 2a 2f   by this node */
18a20 0a 20 20 63 68 61 72 20 61 66 66 69 6e 69 74 79  .  char affinity
18a30 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65  ;         /* The
18a40 20 61 66 66 69 6e 69 74 79 20 6f 66 20 74 68 65   affinity of the
18a50 20 63 6f 6c 75 6d 6e 20 6f 72 20 30 20 69 66 20   column or 0 if 
18a60 6e 6f 74 20 61 20 63 6f 6c 75 6d 6e 20 2a 2f 0a  not a column */.
18a70 20 20 75 33 32 20 66 6c 61 67 73 3b 20 20 20 20    u32 flags;    
18a80 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61 72 69           /* Vari
18a90 6f 75 73 20 66 6c 61 67 73 2e 20 20 45 50 5f 2a  ous flags.  EP_*
18aa0 20 53 65 65 20 62 65 6c 6f 77 20 2a 2f 0a 20 20   See below */.  
18ab0 75 6e 69 6f 6e 20 7b 0a 20 20 20 20 63 68 61 72  union {.    char
18ac0 20 2a 7a 54 6f 6b 65 6e 3b 20 20 20 20 20 20 20   *zToken;       
18ad0 20 20 20 2f 2a 20 54 6f 6b 65 6e 20 76 61 6c 75     /* Token valu
18ae0 65 2e 20 5a 65 72 6f 20 74 65 72 6d 69 6e 61 74  e. Zero terminat
18af0 65 64 20 61 6e 64 20 64 65 71 75 6f 74 65 64 20  ed and dequoted 
18b00 2a 2f 0a 20 20 20 20 69 6e 74 20 69 56 61 6c 75  */.    int iValu
18b10 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  e;            /*
18b20 20 4e 6f 6e 2d 6e 65 67 61 74 69 76 65 20 69 6e   Non-negative in
18b30 74 65 67 65 72 20 76 61 6c 75 65 20 69 66 20 45  teger value if E
18b40 50 5f 49 6e 74 56 61 6c 75 65 20 2a 2f 0a 20 20  P_IntValue */.  
18b50 7d 20 75 3b 0a 0a 20 20 2f 2a 20 49 66 20 74 68  } u;..  /* If th
18b60 65 20 45 50 5f 54 6f 6b 65 6e 4f 6e 6c 79 20 66  e EP_TokenOnly f
18b70 6c 61 67 20 69 73 20 73 65 74 20 69 6e 20 74 68  lag is set in th
18b80 65 20 45 78 70 72 2e 66 6c 61 67 73 20 6d 61 73  e Expr.flags mas
18b90 6b 2c 20 74 68 65 6e 20 6e 6f 0a 20 20 2a 2a 20  k, then no.  ** 
18ba0 73 70 61 63 65 20 69 73 20 61 6c 6c 6f 63 61 74  space is allocat
18bb0 65 64 20 66 6f 72 20 74 68 65 20 66 69 65 6c 64  ed for the field
18bc0 73 20 62 65 6c 6f 77 20 74 68 69 73 20 70 6f 69  s below this poi
18bd0 6e 74 2e 20 41 6e 20 61 74 74 65 6d 70 74 20 74  nt. An attempt t
18be0 6f 0a 20 20 2a 2a 20 61 63 63 65 73 73 20 74 68  o.  ** access th
18bf0 65 6d 20 77 69 6c 6c 20 72 65 73 75 6c 74 20 69  em will result i
18c00 6e 20 61 20 73 65 67 66 61 75 6c 74 20 6f 72 20  n a segfault or 
18c10 6d 61 6c 66 75 6e 63 74 69 6f 6e 2e 0a 20 20 2a  malfunction..  *
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 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
18c50 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
18c60 2a 2a 2a 2a 2f 0a 0a 20 20 45 78 70 72 20 2a 70  ****/..  Expr *p
18c70 4c 65 66 74 3b 20 20 20 20 20 20 20 20 20 20 20  Left;           
18c80 2f 2a 20 4c 65 66 74 20 73 75 62 6e 6f 64 65 20  /* Left subnode 
18c90 2a 2f 0a 20 20 45 78 70 72 20 2a 70 52 69 67 68  */.  Expr *pRigh
18ca0 74 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52  t;          /* R
18cb0 69 67 68 74 20 73 75 62 6e 6f 64 65 20 2a 2f 0a  ight subnode */.
18cc0 20 20 75 6e 69 6f 6e 20 7b 0a 20 20 20 20 45 78    union {.    Ex
18cd0 70 72 4c 69 73 74 20 2a 70 4c 69 73 74 3b 20 20  prList *pList;  
18ce0 20 20 20 2f 2a 20 6f 70 20 3d 20 49 4e 2c 20 45     /* op = IN, E
18cf0 58 49 53 54 53 2c 20 53 45 4c 45 43 54 2c 20 43  XISTS, SELECT, C
18d00 41 53 45 2c 20 46 55 4e 43 54 49 4f 4e 2c 20 42  ASE, FUNCTION, B
18d10 45 54 57 45 45 4e 20 2a 2f 0a 20 20 20 20 53 65  ETWEEN */.    Se
18d20 6c 65 63 74 20 2a 70 53 65 6c 65 63 74 3b 20 20  lect *pSelect;  
18d30 20 20 20 2f 2a 20 45 50 5f 78 49 73 53 65 6c 65     /* EP_xIsSele
18d40 63 74 20 61 6e 64 20 6f 70 20 3d 20 49 4e 2c 20  ct and op = IN, 
18d50 45 58 49 53 54 53 2c 20 53 45 4c 45 43 54 20 2a  EXISTS, SELECT *
18d60 2f 0a 20 20 7d 20 78 3b 0a 0a 20 20 2f 2a 20 49  /.  } x;..  /* I
18d70 66 20 74 68 65 20 45 50 5f 52 65 64 75 63 65 64  f the EP_Reduced
18d80 20 66 6c 61 67 20 69 73 20 73 65 74 20 69 6e 20   flag is set in 
18d90 74 68 65 20 45 78 70 72 2e 66 6c 61 67 73 20 6d  the Expr.flags m
18da0 61 73 6b 2c 20 74 68 65 6e 20 6e 6f 0a 20 20 2a  ask, then no.  *
18db0 2a 20 73 70 61 63 65 20 69 73 20 61 6c 6c 6f 63  * space is alloc
18dc0 61 74 65 64 20 66 6f 72 20 74 68 65 20 66 69 65  ated for the fie
18dd0 6c 64 73 20 62 65 6c 6f 77 20 74 68 69 73 20 70  lds below this p
18de0 6f 69 6e 74 2e 20 41 6e 20 61 74 74 65 6d 70 74  oint. An attempt
18df0 20 74 6f 0a 20 20 2a 2a 20 61 63 63 65 73 73 20   to.  ** access 
18e00 74 68 65 6d 20 77 69 6c 6c 20 72 65 73 75 6c 74  them will result
18e10 20 69 6e 20 61 20 73 65 67 66 61 75 6c 74 20 6f   in a segfault o
18e20 72 20 6d 61 6c 66 75 6e 63 74 69 6f 6e 2e 0a 20  r malfunction.. 
18e30 20 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 2a 2a 2a 2a 2a 2a 2a 2a  ****************
18e60 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
18e70 2a 2a 2a 2a 2a 2a 2f 0a 0a 23 69 66 20 53 51 4c  ******/..#if SQL
18e80 49 54 45 5f 4d 41 58 5f 45 58 50 52 5f 44 45 50  ITE_MAX_EXPR_DEP
18e90 54 48 3e 30 0a 20 20 69 6e 74 20 6e 48 65 69 67  TH>0.  int nHeig
18ea0 68 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ht;           /*
18eb0 20 48 65 69 67 68 74 20 6f 66 20 74 68 65 20 74   Height of the t
18ec0 72 65 65 20 68 65 61 64 65 64 20 62 79 20 74 68  ree headed by th
18ed0 69 73 20 6e 6f 64 65 20 2a 2f 0a 23 65 6e 64 69  is node */.#endi
18ee0 66 0a 20 20 69 6e 74 20 69 54 61 62 6c 65 3b 20  f.  int iTable; 
18ef0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 4b             /* TK
18f00 5f 43 4f 4c 55 4d 4e 3a 20 63 75 72 73 6f 72 20  _COLUMN: cursor 
18f10 6e 75 6d 62 65 72 20 6f 66 20 74 61 62 6c 65 20  number of table 
18f20 68 6f 6c 64 69 6e 67 20 63 6f 6c 75 6d 6e 0a 20  holding column. 
18f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18f40 20 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f 52 45          ** TK_RE
18f50 47 49 53 54 45 52 3a 20 72 65 67 69 73 74 65 72  GISTER: register
18f60 20 6e 75 6d 62 65 72 0a 20 20 20 20 20 20 20 20   number.        
18f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18f80 20 2a 2a 20 54 4b 5f 54 52 49 47 47 45 52 3a 20   ** TK_TRIGGER: 
18f90 31 20 2d 3e 20 6e 65 77 2c 20 30 20 2d 3e 20 6f  1 -> new, 0 -> o
18fa0 6c 64 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ld.             
18fb0 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 45              ** E
18fc0 50 5f 55 6e 6c 69 6b 65 6c 79 3a 20 20 31 33 34  P_Unlikely:  134
18fd0 32 31 37 37 32 38 20 74 69 6d 65 73 20 6c 69 6b  217728 times lik
18fe0 65 6c 69 68 6f 6f 64 0a 20 20 20 20 20 20 20 20  elihood.        
18ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19000 20 2a 2a 20 54 4b 5f 53 45 4c 45 43 54 3a 20 31   ** TK_SELECT: 1
19010 73 74 20 72 65 67 69 73 74 65 72 20 6f 66 20 72  st register of r
19020 65 73 75 6c 74 20 76 65 63 74 6f 72 20 2a 2f 0a  esult vector */.
19030 20 20 79 6e 56 61 72 20 69 43 6f 6c 75 6d 6e 3b    ynVar iColumn;
19040 20 20 20 20 20 20 20 20 20 2f 2a 20 54 4b 5f 43           /* TK_C
19050 4f 4c 55 4d 4e 3a 20 63 6f 6c 75 6d 6e 20 69 6e  OLUMN: column in
19060 64 65 78 2e 20 20 2d 31 20 66 6f 72 20 72 6f 77  dex.  -1 for row
19070 69 64 2e 0a 20 20 20 20 20 20 20 20 20 20 20 20  id..            
19080 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20               ** 
19090 54 4b 5f 56 41 52 49 41 42 4c 45 3a 20 76 61 72  TK_VARIABLE: var
190a0 69 61 62 6c 65 20 6e 75 6d 62 65 72 20 28 61 6c  iable number (al
190b0 77 61 79 73 20 3e 3d 20 31 29 2e 0a 20 20 20 20  ways >= 1)..    
190c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
190d0 20 20 20 20 20 2a 2a 20 54 4b 5f 53 45 4c 45 43       ** TK_SELEC
190e0 54 5f 43 4f 4c 55 4d 4e 3a 20 63 6f 6c 75 6d 6e  T_COLUMN: column
190f0 20 6f 66 20 74 68 65 20 72 65 73 75 6c 74 20 76   of the result v
19100 65 63 74 6f 72 20 2a 2f 0a 20 20 69 31 36 20 69  ector */.  i16 i
19110 41 67 67 3b 20 20 20 20 20 20 20 20 20 20 20 20  Agg;            
19120 20 20 2f 2a 20 57 68 69 63 68 20 65 6e 74 72 79    /* Which entry
19130 20 69 6e 20 70 41 67 67 49 6e 66 6f 2d 3e 61 43   in pAggInfo->aC
19140 6f 6c 5b 5d 20 6f 72 20 2d 3e 61 46 75 6e 63 5b  ol[] or ->aFunc[
19150 5d 20 2a 2f 0a 20 20 69 31 36 20 69 52 69 67 68  ] */.  i16 iRigh
19160 74 4a 6f 69 6e 54 61 62 6c 65 3b 20 20 20 2f 2a  tJoinTable;   /*
19170 20 49 66 20 45 50 5f 46 72 6f 6d 4a 6f 69 6e 2c   If EP_FromJoin,
19180 20 74 68 65 20 72 69 67 68 74 20 74 61 62 6c 65   the right table
19190 20 6f 66 20 74 68 65 20 6a 6f 69 6e 20 2a 2f 0a   of the join */.
191a0 20 20 75 38 20 6f 70 32 3b 20 20 20 20 20 20 20    u8 op2;       
191b0 20 20 20 20 20 20 20 20 20 2f 2a 20 54 4b 5f 52           /* TK_R
191c0 45 47 49 53 54 45 52 3a 20 6f 72 69 67 69 6e 61  EGISTER: origina
191d0 6c 20 76 61 6c 75 65 20 6f 66 20 45 78 70 72 2e  l value of Expr.
191e0 6f 70 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  op.             
191f0 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 54              ** T
19200 4b 5f 43 4f 4c 55 4d 4e 3a 20 74 68 65 20 76 61  K_COLUMN: the va
19210 6c 75 65 20 6f 66 20 70 35 20 66 6f 72 20 4f 50  lue of p5 for OP
19220 5f 43 6f 6c 75 6d 6e 0a 20 20 20 20 20 20 20 20  _Column.        
19230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19240 20 2a 2a 20 54 4b 5f 41 47 47 5f 46 55 4e 43 54   ** TK_AGG_FUNCT
19250 49 4f 4e 3a 20 6e 65 73 74 69 6e 67 20 64 65 70  ION: nesting dep
19260 74 68 20 2a 2f 0a 20 20 41 67 67 49 6e 66 6f 20  th */.  AggInfo 
19270 2a 70 41 67 67 49 6e 66 6f 3b 20 20 20 20 20 2f  *pAggInfo;     /
19280 2a 20 55 73 65 64 20 62 79 20 54 4b 5f 41 47 47  * Used by TK_AGG
19290 5f 43 4f 4c 55 4d 4e 20 61 6e 64 20 54 4b 5f 41  _COLUMN and TK_A
192a0 47 47 5f 46 55 4e 43 54 49 4f 4e 20 2a 2f 0a 20  GG_FUNCTION */. 
192b0 20 54 61 62 6c 65 20 2a 70 54 61 62 3b 20 20 20   Table *pTab;   
192c0 20 20 20 20 20 20 20 20 2f 2a 20 54 61 62 6c 65          /* Table
192d0 20 66 6f 72 20 54 4b 5f 43 4f 4c 55 4d 4e 20 65   for TK_COLUMN e
192e0 78 70 72 65 73 73 69 6f 6e 73 2e 20 20 43 61 6e  xpressions.  Can
192f0 20 62 65 20 4e 55 4c 4c 0a 20 20 20 20 20 20 20   be NULL.       
19300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19310 20 20 2a 2a 20 66 6f 72 20 61 20 63 6f 6c 75 6d    ** for a colum
19320 6e 20 6f 66 20 61 6e 20 69 6e 64 65 78 20 6f 6e  n of an index on
19330 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 2a   an expression *
19340 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  /.#ifndef SQLITE
19350 5f 4f 4d 49 54 5f 57 49 4e 44 4f 57 46 55 4e 43  _OMIT_WINDOWFUNC
19360 0a 20 20 57 69 6e 64 6f 77 20 2a 70 57 69 6e 3b  .  Window *pWin;
19370 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57 69 6e            /* Win
19380 64 6f 77 20 64 65 66 69 6e 69 74 69 6f 6e 20 66  dow definition f
19390 6f 72 20 77 69 6e 64 6f 77 20 66 75 6e 63 74 69  or window functi
193a0 6f 6e 73 20 2a 2f 0a 23 65 6e 64 69 66 0a 7d 3b  ons */.#endif.};
193b0 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c  ../*.** The foll
193c0 6f 77 69 6e 67 20 61 72 65 20 74 68 65 20 6d 65  owing are the me
193d0 61 6e 69 6e 67 73 20 6f 66 20 62 69 74 73 20 69  anings of bits i
193e0 6e 20 74 68 65 20 45 78 70 72 2e 66 6c 61 67 73  n the Expr.flags
193f0 20 66 69 65 6c 64 2e 0a 2a 2f 0a 23 64 65 66 69   field..*/.#defi
19400 6e 65 20 45 50 5f 46 72 6f 6d 4a 6f 69 6e 20 20  ne EP_FromJoin  
19410 30 78 30 30 30 30 30 31 20 2f 2a 20 4f 72 69 67  0x000001 /* Orig
19420 69 6e 61 74 65 73 20 69 6e 20 4f 4e 2f 55 53 49  inates in ON/USI
19430 4e 47 20 63 6c 61 75 73 65 20 6f 66 20 6f 75 74  NG clause of out
19440 65 72 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66 69  er join */.#defi
19450 6e 65 20 45 50 5f 41 67 67 20 20 20 20 20 20 20  ne EP_Agg       
19460 30 78 30 30 30 30 30 32 20 2f 2a 20 43 6f 6e 74  0x000002 /* Cont
19470 61 69 6e 73 20 6f 6e 65 20 6f 72 20 6d 6f 72 65  ains one or more
19480 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74   aggregate funct
19490 69 6f 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ions */.#define 
194a0 45 50 5f 48 61 73 46 75 6e 63 20 20 20 30 78 30  EP_HasFunc   0x0
194b0 30 30 30 30 34 20 2f 2a 20 43 6f 6e 74 61 69 6e  00004 /* Contain
194c0 73 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 66 75  s one or more fu
194d0 6e 63 74 69 6f 6e 73 20 6f 66 20 61 6e 79 20 6b  nctions of any k
194e0 69 6e 64 20 2a 2f 0a 20 20 20 20 20 20 20 20 20  ind */.         
194f0 20 20 20 20 20 20 20 20 20 2f 2a 20 30 78 30 30           /* 0x00
19500 30 30 30 38 20 2f 2f 20 61 76 61 69 6c 61 62 6c  0008 // availabl
19510 65 20 66 6f 72 20 75 73 65 20 2a 2f 0a 23 64 65  e for use */.#de
19520 66 69 6e 65 20 45 50 5f 44 69 73 74 69 6e 63 74  fine EP_Distinct
19530 20 20 30 78 30 30 30 30 31 30 20 2f 2a 20 41 67    0x000010 /* Ag
19540 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e  gregate function
19550 20 77 69 74 68 20 44 49 53 54 49 4e 43 54 20 6b   with DISTINCT k
19560 65 79 77 6f 72 64 20 2a 2f 0a 23 64 65 66 69 6e  eyword */.#defin
19570 65 20 45 50 5f 56 61 72 53 65 6c 65 63 74 20 30  e EP_VarSelect 0
19580 78 30 30 30 30 32 30 20 2f 2a 20 70 53 65 6c 65  x000020 /* pSele
19590 63 74 20 69 73 20 63 6f 72 72 65 6c 61 74 65 64  ct is correlated
195a0 2c 20 6e 6f 74 20 63 6f 6e 73 74 61 6e 74 20 2a  , not constant *
195b0 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 44 62 6c  /.#define EP_Dbl
195c0 51 75 6f 74 65 64 20 30 78 30 30 30 30 34 30 20  Quoted 0x000040 
195d0 2f 2a 20 74 6f 6b 65 6e 2e 7a 20 77 61 73 20 6f  /* token.z was o
195e0 72 69 67 69 6e 61 6c 6c 79 20 69 6e 20 22 2e 2e  riginally in "..
195f0 2e 22 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  ." */.#define EP
19600 5f 49 6e 66 69 78 46 75 6e 63 20 30 78 30 30 30  _InfixFunc 0x000
19610 30 38 30 20 2f 2a 20 54 72 75 65 20 66 6f 72 20  080 /* True for 
19620 61 6e 20 69 6e 66 69 78 20 66 75 6e 63 74 69 6f  an infix functio
19630 6e 3a 20 4c 49 4b 45 2c 20 47 4c 4f 42 2c 20 65  n: LIKE, GLOB, e
19640 74 63 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  tc */.#define EP
19650 5f 43 6f 6c 6c 61 74 65 20 20 20 30 78 30 30 30  _Collate   0x000
19660 31 30 30 20 2f 2a 20 54 72 65 65 20 63 6f 6e 74  100 /* Tree cont
19670 61 69 6e 73 20 61 20 54 4b 5f 43 4f 4c 4c 41 54  ains a TK_COLLAT
19680 45 20 6f 70 65 72 61 74 6f 72 20 2a 2f 0a 23 64  E operator */.#d
19690 65 66 69 6e 65 20 45 50 5f 47 65 6e 65 72 69 63  efine EP_Generic
196a0 20 20 20 30 78 30 30 30 32 30 30 20 2f 2a 20 49     0x000200 /* I
196b0 67 6e 6f 72 65 20 43 4f 4c 4c 41 54 45 20 6f 72  gnore COLLATE or
196c0 20 61 66 66 69 6e 69 74 79 20 6f 6e 20 74 68 69   affinity on thi
196d0 73 20 74 72 65 65 20 2a 2f 0a 23 64 65 66 69 6e  s tree */.#defin
196e0 65 20 45 50 5f 49 6e 74 56 61 6c 75 65 20 20 30  e EP_IntValue  0
196f0 78 30 30 30 34 30 30 20 2f 2a 20 49 6e 74 65 67  x000400 /* Integ
19700 65 72 20 76 61 6c 75 65 20 63 6f 6e 74 61 69 6e  er value contain
19710 65 64 20 69 6e 20 75 2e 69 56 61 6c 75 65 20 2a  ed in u.iValue *
19720 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 78 49 73  /.#define EP_xIs
19730 53 65 6c 65 63 74 20 30 78 30 30 30 38 30 30 20  Select 0x000800 
19740 2f 2a 20 78 2e 70 53 65 6c 65 63 74 20 69 73 20  /* x.pSelect is 
19750 76 61 6c 69 64 20 28 6f 74 68 65 72 77 69 73 65  valid (otherwise
19760 20 78 2e 70 4c 69 73 74 20 69 73 29 20 2a 2f 0a   x.pList is) */.
19770 23 64 65 66 69 6e 65 20 45 50 5f 53 6b 69 70 20  #define EP_Skip 
19780 20 20 20 20 20 30 78 30 30 31 30 30 30 20 2f 2a       0x001000 /*
19790 20 43 4f 4c 4c 41 54 45 2c 20 41 53 2c 20 6f 72   COLLATE, AS, or
197a0 20 55 4e 4c 49 4b 45 4c 59 20 2a 2f 0a 23 64 65   UNLIKELY */.#de
197b0 66 69 6e 65 20 45 50 5f 52 65 64 75 63 65 64 20  fine EP_Reduced 
197c0 20 20 30 78 30 30 32 30 30 30 20 2f 2a 20 45 78    0x002000 /* Ex
197d0 70 72 20 73 74 72 75 63 74 20 45 58 50 52 5f 52  pr struct EXPR_R
197e0 45 44 55 43 45 44 53 49 5a 45 20 62 79 74 65 73  EDUCEDSIZE bytes
197f0 20 6f 6e 6c 79 20 2a 2f 0a 23 64 65 66 69 6e 65   only */.#define
19800 20 45 50 5f 54 6f 6b 65 6e 4f 6e 6c 79 20 30 78   EP_TokenOnly 0x
19810 30 30 34 30 30 30 20 2f 2a 20 45 78 70 72 20 73  004000 /* Expr s
19820 74 72 75 63 74 20 45 58 50 52 5f 54 4f 4b 45 4e  truct EXPR_TOKEN
19830 4f 4e 4c 59 53 49 5a 45 20 62 79 74 65 73 20 6f  ONLYSIZE bytes o
19840 6e 6c 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45  nly */.#define E
19850 50 5f 53 74 61 74 69 63 20 20 20 20 30 78 30 30  P_Static    0x00
19860 38 30 30 30 20 2f 2a 20 48 65 6c 64 20 69 6e 20  8000 /* Held in 
19870 6d 65 6d 6f 72 79 20 6e 6f 74 20 6f 62 74 61 69  memory not obtai
19880 6e 65 64 20 66 72 6f 6d 20 6d 61 6c 6c 6f 63 28  ned from malloc(
19890 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  ) */.#define EP_
198a0 4d 65 6d 54 6f 6b 65 6e 20 20 30 78 30 31 30 30  MemToken  0x0100
198b0 30 30 20 2f 2a 20 4e 65 65 64 20 74 6f 20 73 71  00 /* Need to sq
198c0 6c 69 74 65 33 44 62 46 72 65 65 28 29 20 45 78  lite3DbFree() Ex
198d0 70 72 2e 7a 54 6f 6b 65 6e 20 2a 2f 0a 23 64 65  pr.zToken */.#de
198e0 66 69 6e 65 20 45 50 5f 4e 6f 52 65 64 75 63 65  fine EP_NoReduce
198f0 20 20 30 78 30 32 30 30 30 30 20 2f 2a 20 43 61    0x020000 /* Ca
19900 6e 6e 6f 74 20 45 58 50 52 44 55 50 5f 52 45 44  nnot EXPRDUP_RED
19910 55 43 45 20 74 68 69 73 20 45 78 70 72 20 2a 2f  UCE this Expr */
19920 0a 23 64 65 66 69 6e 65 20 45 50 5f 55 6e 6c 69  .#define EP_Unli
19930 6b 65 6c 79 20 20 30 78 30 34 30 30 30 30 20 2f  kely  0x040000 /
19940 2a 20 75 6e 6c 69 6b 65 6c 79 28 29 20 6f 72 20  * unlikely() or 
19950 6c 69 6b 65 6c 69 68 6f 6f 64 28 29 20 66 75 6e  likelihood() fun
19960 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65  ction */.#define
19970 20 45 50 5f 43 6f 6e 73 74 46 75 6e 63 20 30 78   EP_ConstFunc 0x
19980 30 38 30 30 30 30 20 2f 2a 20 41 20 53 51 4c 49  080000 /* A SQLI
19990 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54  TE_FUNC_CONSTANT
199a0 20 6f 72 20 5f 53 4c 4f 43 48 4e 47 20 66 75 6e   or _SLOCHNG fun
199b0 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65  ction */.#define
199c0 20 45 50 5f 43 61 6e 42 65 4e 75 6c 6c 20 30 78   EP_CanBeNull 0x
199d0 31 30 30 30 30 30 20 2f 2a 20 43 61 6e 20 62 65  100000 /* Can be
199e0 20 6e 75 6c 6c 20 64 65 73 70 69 74 65 20 4e 4f   null despite NO
199f0 54 20 4e 55 4c 4c 20 63 6f 6e 73 74 72 61 69 6e  T NULL constrain
19a00 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  t */.#define EP_
19a10 53 75 62 71 75 65 72 79 20 20 30 78 32 30 30 30  Subquery  0x2000
19a20 30 30 20 2f 2a 20 54 72 65 65 20 63 6f 6e 74 61  00 /* Tree conta
19a30 69 6e 73 20 61 20 54 4b 5f 53 45 4c 45 43 54 20  ins a TK_SELECT 
19a40 6f 70 65 72 61 74 6f 72 20 2a 2f 0a 23 64 65 66  operator */.#def
19a50 69 6e 65 20 45 50 5f 41 6c 69 61 73 20 20 20 20  ine EP_Alias    
19a60 20 30 78 34 30 30 30 30 30 20 2f 2a 20 49 73 20   0x400000 /* Is 
19a70 61 6e 20 61 6c 69 61 73 20 66 6f 72 20 61 20 72  an alias for a r
19a80 65 73 75 6c 74 20 73 65 74 20 63 6f 6c 75 6d 6e  esult set column
19a90 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 4c   */.#define EP_L
19aa0 65 61 66 20 20 20 20 20 20 30 78 38 30 30 30 30  eaf      0x80000
19ab0 30 20 2f 2a 20 45 78 70 72 2e 70 4c 65 66 74 2c  0 /* Expr.pLeft,
19ac0 20 2e 70 52 69 67 68 74 2c 20 2e 75 2e 70 53 65   .pRight, .u.pSe
19ad0 6c 65 63 74 20 61 6c 6c 20 4e 55 4c 4c 20 2a 2f  lect all NULL */
19ae0 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 45 50 5f 50  ../*.** The EP_P
19af0 72 6f 70 61 67 61 74 65 20 6d 61 73 6b 20 69 73  ropagate mask is
19b00 20 61 20 73 65 74 20 6f 66 20 70 72 6f 70 65 72   a set of proper
19b10 74 69 65 73 20 74 68 61 74 20 61 75 74 6f 6d 61  ties that automa
19b20 74 69 63 61 6c 6c 79 20 70 72 6f 70 61 67 61 74  tically propagat
19b30 65 0a 2a 2a 20 75 70 77 61 72 64 73 20 69 6e 74  e.** upwards int
19b40 6f 20 70 61 72 65 6e 74 20 6e 6f 64 65 73 2e 0a  o parent nodes..
19b50 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 50 72  */.#define EP_Pr
19b60 6f 70 61 67 61 74 65 20 28 45 50 5f 43 6f 6c 6c  opagate (EP_Coll
19b70 61 74 65 7c 45 50 5f 53 75 62 71 75 65 72 79 7c  ate|EP_Subquery|
19b80 45 50 5f 48 61 73 46 75 6e 63 29 0a 0a 2f 2a 0a  EP_HasFunc)../*.
19b90 2a 2a 20 54 68 65 73 65 20 6d 61 63 72 6f 73 20  ** These macros 
19ba0 63 61 6e 20 62 65 20 75 73 65 64 20 74 6f 20 74  can be used to t
19bb0 65 73 74 2c 20 73 65 74 2c 20 6f 72 20 63 6c 65  est, set, or cle
19bc0 61 72 20 62 69 74 73 20 69 6e 20 74 68 65 0a 2a  ar bits in the.*
19bd0 2a 20 45 78 70 72 2e 66 6c 61 67 73 20 66 69 65  * Expr.flags fie
19be0 6c 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 45  ld..*/.#define E
19bf0 78 70 72 48 61 73 50 72 6f 70 65 72 74 79 28 45  xprHasProperty(E
19c00 2c 50 29 20 20 20 20 20 28 28 28 45 29 2d 3e 66  ,P)     (((E)->f
19c10 6c 61 67 73 26 28 50 29 29 21 3d 30 29 0a 23 64  lags&(P))!=0).#d
19c20 65 66 69 6e 65 20 45 78 70 72 48 61 73 41 6c 6c  efine ExprHasAll
19c30 50 72 6f 70 65 72 74 79 28 45 2c 50 29 20 20 28  Property(E,P)  (
19c40 28 28 45 29 2d 3e 66 6c 61 67 73 26 28 50 29 29  ((E)->flags&(P))
19c50 3d 3d 28 50 29 29 0a 23 64 65 66 69 6e 65 20 45  ==(P)).#define E
19c60 78 70 72 53 65 74 50 72 6f 70 65 72 74 79 28 45  xprSetProperty(E
19c70 2c 50 29 20 20 20 20 20 28 45 29 2d 3e 66 6c 61  ,P)     (E)->fla
19c80 67 73 7c 3d 28 50 29 0a 23 64 65 66 69 6e 65 20  gs|=(P).#define 
19c90 45 78 70 72 43 6c 65 61 72 50 72 6f 70 65 72 74  ExprClearPropert
19ca0 79 28 45 2c 50 29 20 20 20 28 45 29 2d 3e 66 6c  y(E,P)   (E)->fl
19cb0 61 67 73 26 3d 7e 28 50 29 0a 0a 2f 2a 20 54 68  ags&=~(P)../* Th
19cc0 65 20 45 78 70 72 53 65 74 56 56 41 50 72 6f 70  e ExprSetVVAProp
19cd0 65 72 74 79 28 29 20 6d 61 63 72 6f 20 69 73 20  erty() macro is 
19ce0 75 73 65 64 20 66 6f 72 20 56 65 72 69 66 69 63  used for Verific
19cf0 61 74 69 6f 6e 2c 20 56 61 6c 69 64 61 74 69 6f  ation, Validatio
19d00 6e 2c 0a 2a 2a 20 61 6e 64 20 41 63 63 72 65 64  n,.** and Accred
19d10 69 74 61 74 69 6f 6e 20 6f 6e 6c 79 2e 20 20 49  itation only.  I
19d20 74 20 77 6f 72 6b 73 20 6c 69 6b 65 20 45 78 70  t works like Exp
19d30 72 53 65 74 50 72 6f 70 65 72 74 79 28 29 20 64  rSetProperty() d
19d40 75 72 69 6e 67 20 56 56 41 0a 2a 2a 20 70 72 6f  uring VVA.** pro
19d50 63 65 73 73 65 73 20 62 75 74 20 69 73 20 61 20  cesses but is a 
19d60 6e 6f 2d 6f 70 20 66 6f 72 20 64 65 6c 69 76 65  no-op for delive
19d70 72 79 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51  ry..*/.#ifdef SQ
19d80 4c 49 54 45 5f 44 45 42 55 47 0a 23 20 64 65 66  LITE_DEBUG.# def
19d90 69 6e 65 20 45 78 70 72 53 65 74 56 56 41 50 72  ine ExprSetVVAPr
19da0 6f 70 65 72 74 79 28 45 2c 50 29 20 20 28 45 29  operty(E,P)  (E)
19db0 2d 3e 66 6c 61 67 73 7c 3d 28 50 29 0a 23 65 6c  ->flags|=(P).#el
19dc0 73 65 0a 23 20 64 65 66 69 6e 65 20 45 78 70 72  se.# define Expr
19dd0 53 65 74 56 56 41 50 72 6f 70 65 72 74 79 28 45  SetVVAProperty(E
19de0 2c 50 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  ,P).#endif../*.*
19df0 2a 20 4d 61 63 72 6f 73 20 74 6f 20 64 65 74 65  * Macros to dete
19e00 72 6d 69 6e 65 20 74 68 65 20 6e 75 6d 62 65 72  rmine the number
19e10 20 6f 66 20 62 79 74 65 73 20 72 65 71 75 69 72   of bytes requir
19e20 65 64 20 62 79 20 61 20 6e 6f 72 6d 61 6c 20 45  ed by a normal E
19e30 78 70 72 0a 2a 2a 20 73 74 72 75 63 74 2c 20 61  xpr.** struct, a
19e40 6e 20 45 78 70 72 20 73 74 72 75 63 74 20 77 69  n Expr struct wi
19e50 74 68 20 74 68 65 20 45 50 5f 52 65 64 75 63 65  th the EP_Reduce
19e60 64 20 66 6c 61 67 20 73 65 74 20 69 6e 20 45 78  d flag set in Ex
19e70 70 72 2e 66 6c 61 67 73 0a 2a 2a 20 61 6e 64 20  pr.flags.** and 
19e80 61 6e 20 45 78 70 72 20 73 74 72 75 63 74 20 77  an Expr struct w
19e90 69 74 68 20 74 68 65 20 45 50 5f 54 6f 6b 65 6e  ith the EP_Token
19ea0 4f 6e 6c 79 20 66 6c 61 67 20 73 65 74 2e 0a 2a  Only flag set..*
19eb0 2f 0a 23 64 65 66 69 6e 65 20 45 58 50 52 5f 46  /.#define EXPR_F
19ec0 55 4c 4c 53 49 5a 45 20 20 20 20 20 20 20 20 20  ULLSIZE         
19ed0 20 20 73 69 7a 65 6f 66 28 45 78 70 72 29 20 20    sizeof(Expr)  
19ee0 20 20 20 20 20 20 20 20 20 2f 2a 20 46 75 6c 6c           /* Full
19ef0 20 73 69 7a 65 20 2a 2f 0a 23 64 65 66 69 6e 65   size */.#define
19f00 20 45 58 50 52 5f 52 45 44 55 43 45 44 53 49 5a   EXPR_REDUCEDSIZ
19f10 45 20 20 20 20 20 20 20 20 6f 66 66 73 65 74 6f  E        offseto
19f20 66 28 45 78 70 72 2c 69 54 61 62 6c 65 29 20 20  f(Expr,iTable)  
19f30 2f 2a 20 43 6f 6d 6d 6f 6e 20 66 65 61 74 75 72  /* Common featur
19f40 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 58  es */.#define EX
19f50 50 52 5f 54 4f 4b 45 4e 4f 4e 4c 59 53 49 5a 45  PR_TOKENONLYSIZE
19f60 20 20 20 20 20 20 6f 66 66 73 65 74 6f 66 28 45        offsetof(E
19f70 78 70 72 2c 70 4c 65 66 74 29 20 20 20 2f 2a 20  xpr,pLeft)   /* 
19f80 46 65 77 65 72 20 66 65 61 74 75 72 65 73 20 2a  Fewer features *
19f90 2f 0a 0a 2f 2a 0a 2a 2a 20 46 6c 61 67 73 20 70  /../*.** Flags p
19fa0 61 73 73 65 64 20 74 6f 20 74 68 65 20 73 71 6c  assed to the sql
19fb0 69 74 65 33 45 78 70 72 44 75 70 28 29 20 66 75  ite3ExprDup() fu
19fc0 6e 63 74 69 6f 6e 2e 20 53 65 65 20 74 68 65 20  nction. See the 
19fd0 68 65 61 64 65 72 20 63 6f 6d 6d 65 6e 74 0a 2a  header comment.*
19fe0 2a 20 61 62 6f 76 65 20 73 71 6c 69 74 65 33 45  * above sqlite3E
19ff0 78 70 72 44 75 70 28 29 20 66 6f 72 20 64 65 74  xprDup() for det
1a000 61 69 6c 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  ails..*/.#define
1a010 20 45 58 50 52 44 55 50 5f 52 45 44 55 43 45 20   EXPRDUP_REDUCE 
1a020 20 20 20 20 20 20 20 20 30 78 30 30 30 31 20 20          0x0001  
1a030 2f 2a 20 55 73 65 64 20 72 65 64 75 63 65 64 2d  /* Used reduced-
1a040 73 69 7a 65 20 45 78 70 72 20 6e 6f 64 65 73 20  size Expr nodes 
1a050 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 20 6c 69 73 74  */../*.** A list
1a060 20 6f 66 20 65 78 70 72 65 73 73 69 6f 6e 73 2e   of expressions.
1a070 20 20 45 61 63 68 20 65 78 70 72 65 73 73 69 6f    Each expressio
1a080 6e 20 6d 61 79 20 6f 70 74 69 6f 6e 61 6c 6c 79  n may optionally
1a090 20 68 61 76 65 20 61 0a 2a 2a 20 6e 61 6d 65 2e   have a.** name.
1a0a0 20 20 41 6e 20 65 78 70 72 2f 6e 61 6d 65 20 63    An expr/name c
1a0b0 6f 6d 62 69 6e 61 74 69 6f 6e 20 63 61 6e 20 62  ombination can b
1a0c0 65 20 75 73 65 64 20 69 6e 20 73 65 76 65 72 61  e used in severa
1a0d0 6c 20 77 61 79 73 2c 20 73 75 63 68 0a 2a 2a 20  l ways, such.** 
1a0e0 61 73 20 74 68 65 20 6c 69 73 74 20 6f 66 20 22  as the list of "
1a0f0 65 78 70 72 20 41 53 20 49 44 22 20 66 69 65 6c  expr AS ID" fiel
1a100 64 73 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 20 22  ds following a "
1a110 53 45 4c 45 43 54 22 20 6f 72 20 69 6e 20 74 68  SELECT" or in th
1a120 65 0a 2a 2a 20 6c 69 73 74 20 6f 66 20 22 49 44  e.** list of "ID
1a130 20 3d 20 65 78 70 72 22 20 69 74 65 6d 73 20 69   = expr" items i
1a140 6e 20 61 6e 20 55 50 44 41 54 45 2e 20 20 41 20  n an UPDATE.  A 
1a150 6c 69 73 74 20 6f 66 20 65 78 70 72 65 73 73 69  list of expressi
1a160 6f 6e 73 20 63 61 6e 0a 2a 2a 20 61 6c 73 6f 20  ons can.** also 
1a170 62 65 20 75 73 65 64 20 61 73 20 74 68 65 20 61  be used as the a
1a180 72 67 75 6d 65 6e 74 20 74 6f 20 61 20 66 75 6e  rgument to a fun
1a190 63 74 69 6f 6e 2c 20 69 6e 20 77 68 69 63 68 20  ction, in which 
1a1a0 63 61 73 65 20 74 68 65 20 61 2e 7a 4e 61 6d 65  case the a.zName
1a1b0 0a 2a 2a 20 66 69 65 6c 64 20 69 73 20 6e 6f 74  .** field is not
1a1c0 20 75 73 65 64 2e 0a 2a 2a 0a 2a 2a 20 42 79 20   used..**.** By 
1a1d0 64 65 66 61 75 6c 74 20 74 68 65 20 45 78 70 72  default the Expr
1a1e0 2e 7a 53 70 61 6e 20 66 69 65 6c 64 20 68 6f 6c  .zSpan field hol
1a1f0 64 73 20 61 20 68 75 6d 61 6e 2d 72 65 61 64 61  ds a human-reada
1a200 62 6c 65 20 64 65 73 63 72 69 70 74 69 6f 6e 20  ble description 
1a210 6f 66 0a 2a 2a 20 74 68 65 20 65 78 70 72 65 73  of.** the expres
1a220 73 69 6f 6e 20 74 68 61 74 20 69 73 20 75 73 65  sion that is use
1a230 64 20 69 6e 20 74 68 65 20 67 65 6e 65 72 61 74  d in the generat
1a240 69 6f 6e 20 6f 66 20 65 72 72 6f 72 20 6d 65 73  ion of error mes
1a250 73 61 67 65 73 20 61 6e 64 0a 2a 2a 20 63 6f 6c  sages and.** col
1a260 75 6d 6e 20 6c 61 62 65 6c 73 2e 20 20 49 6e 20  umn labels.  In 
1a270 74 68 69 73 20 63 61 73 65 2c 20 45 78 70 72 2e  this case, Expr.
1a280 7a 53 70 61 6e 20 69 73 20 74 79 70 69 63 61 6c  zSpan is typical
1a290 6c 79 20 74 68 65 20 74 65 78 74 20 6f 66 20 61  ly the text of a
1a2a0 0a 2a 2a 20 63 6f 6c 75 6d 6e 20 65 78 70 72 65  .** column expre
1a2b0 73 73 69 6f 6e 20 61 73 20 69 74 20 65 78 69 73  ssion as it exis
1a2c0 74 73 20 69 6e 20 61 20 53 45 4c 45 43 54 20 73  ts in a SELECT s
1a2d0 74 61 74 65 6d 65 6e 74 2e 20 20 48 6f 77 65 76  tatement.  Howev
1a2e0 65 72 2c 20 69 66 0a 2a 2a 20 74 68 65 20 62 53  er, if.** the bS
1a2f0 70 61 6e 49 73 54 61 62 20 66 6c 61 67 20 69 73  panIsTab flag is
1a300 20 73 65 74 2c 20 74 68 65 6e 20 7a 53 70 61 6e   set, then zSpan
1a310 20 69 73 20 6f 76 65 72 6c 6f 61 64 65 64 20 74   is overloaded t
1a320 6f 20 6d 65 61 6e 20 74 68 65 20 6e 61 6d 65 0a  o mean the name.
1a330 2a 2a 20 6f 66 20 74 68 65 20 72 65 73 75 6c 74  ** of the result
1a340 20 63 6f 6c 75 6d 6e 20 69 6e 20 74 68 65 20 66   column in the f
1a350 6f 72 6d 3a 20 44 41 54 41 42 41 53 45 2e 54 41  orm: DATABASE.TA
1a360 42 4c 45 2e 43 4f 4c 55 4d 4e 2e 20 20 54 68 69  BLE.COLUMN.  Thi
1a370 73 20 6c 61 74 65 72 0a 2a 2a 20 66 6f 72 6d 20  s later.** form 
1a380 69 73 20 75 73 65 64 20 66 6f 72 20 6e 61 6d 65  is used for name
1a390 20 72 65 73 6f 6c 75 74 69 6f 6e 20 77 69 74 68   resolution with
1a3a0 20 6e 65 73 74 65 64 20 46 52 4f 4d 20 63 6c 61   nested FROM cla
1a3b0 75 73 65 73 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  uses..*/.struct 
1a3c0 45 78 70 72 4c 69 73 74 20 7b 0a 20 20 69 6e 74  ExprList {.  int
1a3d0 20 6e 45 78 70 72 3b 20 20 20 20 20 20 20 20 20   nExpr;         
1a3e0 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
1a3f0 20 65 78 70 72 65 73 73 69 6f 6e 73 20 6f 6e 20   expressions on 
1a400 74 68 65 20 6c 69 73 74 20 2a 2f 0a 20 20 73 74  the list */.  st
1a410 72 75 63 74 20 45 78 70 72 4c 69 73 74 5f 69 74  ruct ExprList_it
1a420 65 6d 20 7b 20 2f 2a 20 46 6f 72 20 65 61 63 68  em { /* For each
1a430 20 65 78 70 72 65 73 73 69 6f 6e 20 69 6e 20 74   expression in t
1a440 68 65 20 6c 69 73 74 20 2a 2f 0a 20 20 20 20 45  he list */.    E
1a450 78 70 72 20 2a 70 45 78 70 72 3b 20 20 20 20 20  xpr *pExpr;     
1a460 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 70 61         /* The pa
1a470 72 73 65 20 74 72 65 65 20 66 6f 72 20 74 68 69  rse tree for thi
1a480 73 20 65 78 70 72 65 73 73 69 6f 6e 20 2a 2f 0a  s expression */.
1a490 20 20 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b      char *zName;
1a4a0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
1a4b0 6f 6b 65 6e 20 61 73 73 6f 63 69 61 74 65 64 20  oken associated 
1a4c0 77 69 74 68 20 74 68 69 73 20 65 78 70 72 65 73  with this expres
1a4d0 73 69 6f 6e 20 2a 2f 0a 20 20 20 20 63 68 61 72  sion */.    char
1a4e0 20 2a 7a 53 70 61 6e 3b 20 20 20 20 20 20 20 20   *zSpan;        
1a4f0 20 20 20 20 2f 2a 20 4f 72 69 67 69 6e 61 6c 20      /* Original 
1a500 74 65 78 74 20 6f 66 20 74 68 65 20 65 78 70 72  text of the expr
1a510 65 73 73 69 6f 6e 20 2a 2f 0a 20 20 20 20 75 38  ession */.    u8
1a520 20 73 6f 72 74 4f 72 64 65 72 3b 20 20 20 20 20   sortOrder;     
1a530 20 20 20 20 20 20 2f 2a 20 31 20 66 6f 72 20 44        /* 1 for D
1a540 45 53 43 20 6f 72 20 30 20 66 6f 72 20 41 53 43  ESC or 0 for ASC
1a550 20 2a 2f 0a 20 20 20 20 75 6e 73 69 67 6e 65 64   */.    unsigned
1a560 20 64 6f 6e 65 20 3a 31 3b 20 20 20 20 20 20 20   done :1;       
1a570 2f 2a 20 41 20 66 6c 61 67 20 74 6f 20 69 6e 64  /* A flag to ind
1a580 69 63 61 74 65 20 77 68 65 6e 20 70 72 6f 63 65  icate when proce
1a590 73 73 69 6e 67 20 69 73 20 66 69 6e 69 73 68 65  ssing is finishe
1a5a0 64 20 2a 2f 0a 20 20 20 20 75 6e 73 69 67 6e 65  d */.    unsigne
1a5b0 64 20 62 53 70 61 6e 49 73 54 61 62 20 3a 31 3b  d bSpanIsTab :1;
1a5c0 20 2f 2a 20 7a 53 70 61 6e 20 68 6f 6c 64 73 20   /* zSpan holds 
1a5d0 44 42 2e 54 41 42 4c 45 2e 43 4f 4c 55 4d 4e 20  DB.TABLE.COLUMN 
1a5e0 2a 2f 0a 20 20 20 20 75 6e 73 69 67 6e 65 64 20  */.    unsigned 
1a5f0 72 65 75 73 61 62 6c 65 20 3a 31 3b 20 20 20 2f  reusable :1;   /
1a600 2a 20 43 6f 6e 73 74 61 6e 74 20 65 78 70 72 65  * Constant expre
1a610 73 73 69 6f 6e 20 69 73 20 72 65 75 73 61 62 6c  ssion is reusabl
1a620 65 20 2a 2f 0a 20 20 20 20 75 6e 73 69 67 6e 65  e */.    unsigne
1a630 64 20 62 53 6f 72 74 65 72 52 65 66 20 3a 31 3b  d bSorterRef :1;
1a640 20 2f 2a 20 44 65 66 65 72 20 65 76 61 6c 75 61   /* Defer evalua
1a650 74 69 6f 6e 20 75 6e 74 69 6c 20 61 66 74 65 72  tion until after
1a660 20 73 6f 72 74 69 6e 67 20 2a 2f 0a 20 20 20 20   sorting */.    
1a670 75 6e 69 6f 6e 20 7b 0a 20 20 20 20 20 20 73 74  union {.      st
1a680 72 75 63 74 20 7b 0a 20 20 20 20 20 20 20 20 75  ruct {.        u
1a690 31 36 20 69 4f 72 64 65 72 42 79 43 6f 6c 3b 20  16 iOrderByCol; 
1a6a0 20 20 20 20 20 2f 2a 20 46 6f 72 20 4f 52 44 45       /* For ORDE
1a6b0 52 20 42 59 2c 20 63 6f 6c 75 6d 6e 20 6e 75 6d  R BY, column num
1a6c0 62 65 72 20 69 6e 20 72 65 73 75 6c 74 20 73 65  ber in result se
1a6d0 74 20 2a 2f 0a 20 20 20 20 20 20 20 20 75 31 36  t */.        u16
1a6e0 20 69 41 6c 69 61 73 3b 20 20 20 20 20 20 20 20   iAlias;        
1a6f0 20 20 20 2f 2a 20 49 6e 64 65 78 20 69 6e 74 6f     /* Index into
1a700 20 50 61 72 73 65 2e 61 41 6c 69 61 73 5b 5d 20   Parse.aAlias[] 
1a710 66 6f 72 20 7a 4e 61 6d 65 20 2a 2f 0a 20 20 20  for zName */.   
1a720 20 20 20 7d 20 78 3b 0a 20 20 20 20 20 20 69 6e     } x;.      in
1a730 74 20 69 43 6f 6e 73 74 45 78 70 72 52 65 67 3b  t iConstExprReg;
1a740 20 20 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65        /* Registe
1a750 72 20 69 6e 20 77 68 69 63 68 20 45 78 70 72 20  r in which Expr 
1a760 76 61 6c 75 65 20 69 73 20 63 61 63 68 65 64 20  value is cached 
1a770 2a 2f 0a 20 20 20 20 7d 20 75 3b 0a 20 20 7d 20  */.    } u;.  } 
1a780 61 5b 31 5d 3b 20 20 20 20 20 20 20 20 20 20 20  a[1];           
1a790 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20 73 6c         /* One sl
1a7a0 6f 74 20 66 6f 72 20 65 61 63 68 20 65 78 70 72  ot for each expr
1a7b0 65 73 73 69 6f 6e 20 69 6e 20 74 68 65 20 6c 69  ession in the li
1a7c0 73 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  st */.};../*.** 
1a7d0 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  An instance of t
1a7e0 68 69 73 20 73 74 72 75 63 74 75 72 65 20 63 61  his structure ca
1a7f0 6e 20 68 6f 6c 64 20 61 20 73 69 6d 70 6c 65 20  n hold a simple 
1a800 6c 69 73 74 20 6f 66 20 69 64 65 6e 74 69 66 69  list of identifi
1a810 65 72 73 2c 0a 2a 2a 20 73 75 63 68 20 61 73 20  ers,.** such as 
1a820 74 68 65 20 6c 69 73 74 20 22 61 2c 62 2c 63 22  the list "a,b,c"
1a830 20 69 6e 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   in the followin
1a840 67 20 73 74 61 74 65 6d 65 6e 74 73 3a 0a 2a 2a  g statements:.**
1a850 0a 2a 2a 20 20 20 20 20 20 49 4e 53 45 52 54 20  .**      INSERT 
1a860 49 4e 54 4f 20 74 28 61 2c 62 2c 63 29 20 56 41  INTO t(a,b,c) VA
1a870 4c 55 45 53 20 2e 2e 2e 3b 0a 2a 2a 20 20 20 20  LUES ...;.**    
1a880 20 20 43 52 45 41 54 45 20 49 4e 44 45 58 20 69    CREATE INDEX i
1a890 64 78 20 4f 4e 20 74 28 61 2c 62 2c 63 29 3b 0a  dx ON t(a,b,c);.
1a8a0 2a 2a 20 20 20 20 20 20 43 52 45 41 54 45 20 54  **      CREATE T
1a8b0 52 49 47 47 45 52 20 74 72 69 67 20 42 45 46 4f  RIGGER trig BEFO
1a8c0 52 45 20 55 50 44 41 54 45 20 4f 4e 20 74 28 61  RE UPDATE ON t(a
1a8d0 2c 62 2c 63 29 20 2e 2e 2e 3b 0a 2a 2a 0a 2a 2a  ,b,c) ...;.**.**
1a8e0 20 54 68 65 20 49 64 4c 69 73 74 2e 61 2e 69 64   The IdList.a.id
1a8f0 78 20 66 69 65 6c 64 20 69 73 20 75 73 65 64 20  x field is used 
1a900 77 68 65 6e 20 74 68 65 20 49 64 4c 69 73 74 20  when the IdList 
1a910 72 65 70 72 65 73 65 6e 74 73 20 74 68 65 20 6c  represents the l
1a920 69 73 74 20 6f 66 0a 2a 2a 20 63 6f 6c 75 6d 6e  ist of.** column
1a930 20 6e 61 6d 65 73 20 61 66 74 65 72 20 61 20 74   names after a t
1a940 61 62 6c 65 20 6e 61 6d 65 20 69 6e 20 61 6e 20  able name in an 
1a950 49 4e 53 45 52 54 20 73 74 61 74 65 6d 65 6e 74  INSERT statement
1a960 2e 20 20 49 6e 20 74 68 65 20 73 74 61 74 65 6d  .  In the statem
1a970 65 6e 74 0a 2a 2a 0a 2a 2a 20 20 20 20 20 49 4e  ent.**.**     IN
1a980 53 45 52 54 20 49 4e 54 4f 20 74 28 61 2c 62 2c  SERT INTO t(a,b,
1a990 63 29 20 2e 2e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  c) ....**.** If 
1a9a0 22 61 22 20 69 73 20 74 68 65 20 6b 2d 74 68 20  "a" is the k-th 
1a9b0 63 6f 6c 75 6d 6e 20 6f 66 20 74 61 62 6c 65 20  column of table 
1a9c0 22 74 22 2c 20 74 68 65 6e 20 49 64 4c 69 73 74  "t", then IdList
1a9d0 2e 61 5b 30 5d 2e 69 64 78 3d 3d 6b 2e 0a 2a 2f  .a[0].idx==k..*/
1a9e0 0a 73 74 72 75 63 74 20 49 64 4c 69 73 74 20 7b  .struct IdList {
1a9f0 0a 20 20 73 74 72 75 63 74 20 49 64 4c 69 73 74  .  struct IdList
1aa00 5f 69 74 65 6d 20 7b 0a 20 20 20 20 63 68 61 72  _item {.    char
1aa10 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 2f 2a   *zName;      /*
1aa20 20 4e 61 6d 65 20 6f 66 20 74 68 65 20 69 64 65   Name of the ide
1aa30 6e 74 69 66 69 65 72 20 2a 2f 0a 20 20 20 20 69  ntifier */.    i
1aa40 6e 74 20 69 64 78 3b 20 20 20 20 20 20 20 20 20  nt idx;         
1aa50 20 2f 2a 20 49 6e 64 65 78 20 69 6e 20 73 6f 6d   /* Index in som
1aa60 65 20 54 61 62 6c 65 2e 61 43 6f 6c 5b 5d 20 6f  e Table.aCol[] o
1aa70 66 20 61 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 64  f a column named
1aa80 20 7a 4e 61 6d 65 20 2a 2f 0a 20 20 7d 20 2a 61   zName */.  } *a
1aa90 3b 0a 20 20 69 6e 74 20 6e 49 64 3b 20 20 20 20  ;.  int nId;    
1aaa0 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
1aab0 66 20 69 64 65 6e 74 69 66 69 65 72 73 20 6f 6e  f identifiers on
1aac0 20 74 68 65 20 6c 69 73 74 20 2a 2f 0a 7d 3b 0a   the list */.};.
1aad0 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f  ./*.** The follo
1aae0 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 20 64  wing structure d
1aaf0 65 73 63 72 69 62 65 73 20 74 68 65 20 46 52 4f  escribes the FRO
1ab00 4d 20 63 6c 61 75 73 65 20 6f 66 20 61 20 53 45  M clause of a SE
1ab10 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 0a  LECT statement..
1ab20 2a 2a 20 45 61 63 68 20 74 61 62 6c 65 20 6f 72  ** Each table or
1ab30 20 73 75 62 71 75 65 72 79 20 69 6e 20 74 68 65   subquery in the
1ab40 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 69 73 20   FROM clause is 
1ab50 61 20 73 65 70 61 72 61 74 65 20 65 6c 65 6d 65  a separate eleme
1ab60 6e 74 20 6f 66 0a 2a 2a 20 74 68 65 20 53 72 63  nt of.** the Src
1ab70 4c 69 73 74 2e 61 5b 5d 20 61 72 72 61 79 2e 0a  List.a[] array..
1ab80 2a 2a 0a 2a 2a 20 57 69 74 68 20 74 68 65 20 61  **.** With the a
1ab90 64 64 69 74 69 6f 6e 20 6f 66 20 6d 75 6c 74 69  ddition of multi
1aba0 70 6c 65 20 64 61 74 61 62 61 73 65 20 73 75 70  ple database sup
1abb0 70 6f 72 74 2c 20 74 68 65 20 66 6f 6c 6c 6f 77  port, the follow
1abc0 69 6e 67 20 73 74 72 75 63 74 75 72 65 0a 2a 2a  ing structure.**
1abd0 20 63 61 6e 20 61 6c 73 6f 20 62 65 20 75 73 65   can also be use
1abe0 64 20 74 6f 20 64 65 73 63 72 69 62 65 20 61 20  d to describe a 
1abf0 70 61 72 74 69 63 75 6c 61 72 20 74 61 62 6c 65  particular table
1ac00 20 73 75 63 68 20 61 73 20 74 68 65 20 74 61 62   such as the tab
1ac10 6c 65 20 74 68 61 74 0a 2a 2a 20 69 73 20 6d 6f  le that.** is mo
1ac20 64 69 66 69 65 64 20 62 79 20 61 6e 20 49 4e 53  dified by an INS
1ac30 45 52 54 2c 20 44 45 4c 45 54 45 2c 20 6f 72 20  ERT, DELETE, or 
1ac40 55 50 44 41 54 45 20 73 74 61 74 65 6d 65 6e 74  UPDATE statement
1ac50 2e 20 20 49 6e 20 73 74 61 6e 64 61 72 64 20 53  .  In standard S
1ac60 51 4c 2c 0a 2a 2a 20 73 75 63 68 20 61 20 74 61  QL,.** such a ta
1ac70 62 6c 65 20 6d 75 73 74 20 62 65 20 61 20 73 69  ble must be a si
1ac80 6d 70 6c 65 20 6e 61 6d 65 3a 20 49 44 2e 20 20  mple name: ID.  
1ac90 42 75 74 20 69 6e 20 53 51 4c 69 74 65 2c 20 74  But in SQLite, t
1aca0 68 65 20 74 61 62 6c 65 20 63 61 6e 0a 2a 2a 20  he table can.** 
1acb0 6e 6f 77 20 62 65 20 69 64 65 6e 74 69 66 69 65  now be identifie
1acc0 64 20 62 79 20 61 20 64 61 74 61 62 61 73 65 20  d by a database 
1acd0 6e 61 6d 65 2c 20 61 20 64 6f 74 2c 20 74 68 65  name, a dot, the
1ace0 6e 20 74 68 65 20 74 61 62 6c 65 20 6e 61 6d 65  n the table name
1acf0 3a 20 49 44 2e 49 44 2e 0a 2a 2a 0a 2a 2a 20 54  : ID.ID..**.** T
1ad00 68 65 20 6a 6f 69 6e 74 79 70 65 20 73 74 61 72  he jointype star
1ad10 74 73 20 6f 75 74 20 73 68 6f 77 69 6e 67 20 74  ts out showing t
1ad20 68 65 20 6a 6f 69 6e 20 74 79 70 65 20 62 65 74  he join type bet
1ad30 77 65 65 6e 20 74 68 65 20 63 75 72 72 65 6e 74  ween the current
1ad40 20 74 61 62 6c 65 0a 2a 2a 20 61 6e 64 20 74 68   table.** and th
1ad50 65 20 6e 65 78 74 20 74 61 62 6c 65 20 6f 6e 20  e next table on 
1ad60 74 68 65 20 6c 69 73 74 2e 20 20 54 68 65 20 70  the list.  The p
1ad70 61 72 73 65 72 20 62 75 69 6c 64 73 20 74 68 65  arser builds the
1ad80 20 6c 69 73 74 20 74 68 69 73 20 77 61 79 2e 0a   list this way..
1ad90 2a 2a 20 42 75 74 20 73 71 6c 69 74 65 33 53 72  ** But sqlite3Sr
1ada0 63 4c 69 73 74 53 68 69 66 74 4a 6f 69 6e 54 79  cListShiftJoinTy
1adb0 70 65 28 29 20 6c 61 74 65 72 20 73 68 69 66 74  pe() later shift
1adc0 73 20 74 68 65 20 6a 6f 69 6e 74 79 70 65 73 20  s the jointypes 
1add0 73 6f 20 74 68 61 74 20 65 61 63 68 0a 2a 2a 20  so that each.** 
1ade0 6a 6f 69 6e 74 79 70 65 20 65 78 70 72 65 73 73  jointype express
1adf0 65 73 20 74 68 65 20 6a 6f 69 6e 20 62 65 74 77  es the join betw
1ae00 65 65 6e 20 74 68 65 20 74 61 62 6c 65 20 61 6e  een the table an
1ae10 64 20 74 68 65 20 70 72 65 76 69 6f 75 73 20 74  d the previous t
1ae20 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49 6e 20 74  able..**.** In t
1ae30 68 65 20 63 6f 6c 55 73 65 64 20 66 69 65 6c 64  he colUsed field
1ae40 2c 20 74 68 65 20 68 69 67 68 2d 6f 72 64 65 72  , the high-order
1ae50 20 62 69 74 20 28 62 69 74 20 36 33 29 20 69 73   bit (bit 63) is
1ae60 20 73 65 74 20 69 66 20 74 68 65 20 74 61 62 6c   set if the tabl
1ae70 65 0a 2a 2a 20 63 6f 6e 74 61 69 6e 73 20 6d 6f  e.** contains mo
1ae80 72 65 20 74 68 61 6e 20 36 33 20 63 6f 6c 75 6d  re than 63 colum
1ae90 6e 73 20 61 6e 64 20 74 68 65 20 36 34 2d 74 68  ns and the 64-th
1aea0 20 6f 72 20 6c 61 74 65 72 20 63 6f 6c 75 6d 6e   or later column
1aeb0 20 69 73 20 75 73 65 64 2e 0a 2a 2f 0a 73 74 72   is used..*/.str
1aec0 75 63 74 20 53 72 63 4c 69 73 74 20 7b 0a 20 20  uct SrcList {.  
1aed0 69 6e 74 20 6e 53 72 63 3b 20 20 20 20 20 20 20  int nSrc;       
1aee0 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 74 61   /* Number of ta
1aef0 62 6c 65 73 20 6f 72 20 73 75 62 71 75 65 72 69  bles or subqueri
1af00 65 73 20 69 6e 20 74 68 65 20 46 52 4f 4d 20 63  es in the FROM c
1af10 6c 61 75 73 65 20 2a 2f 0a 20 20 75 33 32 20 6e  lause */.  u32 n
1af20 41 6c 6c 6f 63 3b 20 20 20 20 20 20 2f 2a 20 4e  Alloc;      /* N
1af30 75 6d 62 65 72 20 6f 66 20 65 6e 74 72 69 65 73  umber of entries
1af40 20 61 6c 6c 6f 63 61 74 65 64 20 69 6e 20 61 5b   allocated in a[
1af50 5d 20 62 65 6c 6f 77 20 2a 2f 0a 20 20 73 74 72  ] below */.  str
1af60 75 63 74 20 53 72 63 4c 69 73 74 5f 69 74 65 6d  uct SrcList_item
1af70 20 7b 0a 20 20 20 20 53 63 68 65 6d 61 20 2a 70   {.    Schema *p
1af80 53 63 68 65 6d 61 3b 20 20 2f 2a 20 53 63 68 65  Schema;  /* Sche
1af90 6d 61 20 74 6f 20 77 68 69 63 68 20 74 68 69 73  ma to which this
1afa0 20 69 74 65 6d 20 69 73 20 66 69 78 65 64 20 2a   item is fixed *
1afb0 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a 44 61 74  /.    char *zDat
1afc0 61 62 61 73 65 3b 20 20 2f 2a 20 4e 61 6d 65 20  abase;  /* Name 
1afd0 6f 66 20 64 61 74 61 62 61 73 65 20 68 6f 6c 64  of database hold
1afe0 69 6e 67 20 74 68 69 73 20 74 61 62 6c 65 20 2a  ing this table *
1aff0 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a 4e 61 6d  /.    char *zNam
1b000 65 3b 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20  e;      /* Name 
1b010 6f 66 20 74 68 65 20 74 61 62 6c 65 20 2a 2f 0a  of the table */.
1b020 20 20 20 20 63 68 61 72 20 2a 7a 41 6c 69 61 73      char *zAlias
1b030 3b 20 20 20 20 20 2f 2a 20 54 68 65 20 22 42 22  ;     /* The "B"
1b040 20 70 61 72 74 20 6f 66 20 61 20 22 41 20 41 53   part of a "A AS
1b050 20 42 22 20 70 68 72 61 73 65 2e 20 20 7a 4e 61   B" phrase.  zNa
1b060 6d 65 20 69 73 20 74 68 65 20 22 41 22 20 2a 2f  me is the "A" */
1b070 0a 20 20 20 20 54 61 62 6c 65 20 2a 70 54 61 62  .    Table *pTab
1b080 3b 20 20 20 20 20 20 2f 2a 20 41 6e 20 53 51 4c  ;      /* An SQL
1b090 20 74 61 62 6c 65 20 63 6f 72 72 65 73 70 6f 6e   table correspon
1b0a0 64 69 6e 67 20 74 6f 20 7a 4e 61 6d 65 20 2a 2f  ding to zName */
1b0b0 0a 20 20 20 20 53 65 6c 65 63 74 20 2a 70 53 65  .    Select *pSe
1b0c0 6c 65 63 74 3b 20 20 2f 2a 20 41 20 53 45 4c 45  lect;  /* A SELE
1b0d0 43 54 20 73 74 61 74 65 6d 65 6e 74 20 75 73 65  CT statement use
1b0e0 64 20 69 6e 20 70 6c 61 63 65 20 6f 66 20 61 20  d in place of a 
1b0f0 74 61 62 6c 65 20 6e 61 6d 65 20 2a 2f 0a 20 20  table name */.  
1b100 20 20 69 6e 74 20 61 64 64 72 46 69 6c 6c 53 75    int addrFillSu
1b110 62 3b 20 20 2f 2a 20 41 64 64 72 65 73 73 20 6f  b;  /* Address o
1b120 66 20 73 75 62 72 6f 75 74 69 6e 65 20 74 6f 20  f subroutine to 
1b130 6d 61 6e 69 66 65 73 74 20 61 20 73 75 62 71 75  manifest a subqu
1b140 65 72 79 20 2a 2f 0a 20 20 20 20 69 6e 74 20 72  ery */.    int r
1b150 65 67 52 65 74 75 72 6e 3b 20 20 20 20 2f 2a 20  egReturn;    /* 
1b160 52 65 67 69 73 74 65 72 20 68 6f 6c 64 69 6e 67  Register holding
1b170 20 72 65 74 75 72 6e 20 61 64 64 72 65 73 73 20   return address 
1b180 6f 66 20 61 64 64 72 46 69 6c 6c 53 75 62 20 2a  of addrFillSub *
1b190 2f 0a 20 20 20 20 69 6e 74 20 72 65 67 52 65 73  /.    int regRes
1b1a0 75 6c 74 3b 20 20 20 20 2f 2a 20 52 65 67 69 73  ult;    /* Regis
1b1b0 74 65 72 73 20 68 6f 6c 64 69 6e 67 20 72 65 73  ters holding res
1b1c0 75 6c 74 73 20 6f 66 20 61 20 63 6f 2d 72 6f 75  ults of a co-rou
1b1d0 74 69 6e 65 20 2a 2f 0a 20 20 20 20 73 74 72 75  tine */.    stru
1b1e0 63 74 20 7b 0a 20 20 20 20 20 20 75 38 20 6a 6f  ct {.      u8 jo
1b1f0 69 6e 74 79 70 65 3b 20 20 20 20 20 20 2f 2a 20  intype;      /* 
1b200 54 79 70 65 20 6f 66 20 6a 6f 69 6e 20 62 65 74  Type of join bet
1b210 77 65 65 6e 20 74 68 69 73 20 74 61 62 6c 65 20  ween this table 
1b220 61 6e 64 20 74 68 65 20 70 72 65 76 69 6f 75 73  and the previous
1b230 20 2a 2f 0a 20 20 20 20 20 20 75 6e 73 69 67 6e   */.      unsign
1b240 65 64 20 6e 6f 74 49 6e 64 65 78 65 64 20 3a 31  ed notIndexed :1
1b250 3b 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20  ;    /* True if 
1b260 74 68 65 72 65 20 69 73 20 61 20 4e 4f 54 20 49  there is a NOT I
1b270 4e 44 45 58 45 44 20 63 6c 61 75 73 65 20 2a 2f  NDEXED clause */
1b280 0a 20 20 20 20 20 20 75 6e 73 69 67 6e 65 64 20  .      unsigned 
1b290 69 73 49 6e 64 65 78 65 64 42 79 20 3a 31 3b 20  isIndexedBy :1; 
1b2a0 20 20 2f 2a 20 54 72 75 65 20 69 66 20 74 68 65    /* True if the
1b2b0 72 65 20 69 73 20 61 6e 20 49 4e 44 45 58 45 44  re is an INDEXED
1b2c0 20 42 59 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20   BY clause */.  
1b2d0 20 20 20 20 75 6e 73 69 67 6e 65 64 20 69 73 54      unsigned isT
1b2e0 61 62 46 75 6e 63 20 3a 31 3b 20 20 20 20 20 2f  abFunc :1;     /
1b2f0 2a 20 54 72 75 65 20 69 66 20 74 61 62 6c 65 2d  * True if table-
1b300 76 61 6c 75 65 64 2d 66 75 6e 63 74 69 6f 6e 20  valued-function 
1b310 73 79 6e 74 61 78 20 2a 2f 0a 20 20 20 20 20 20  syntax */.      
1b320 75 6e 73 69 67 6e 65 64 20 69 73 43 6f 72 72 65  unsigned isCorre
1b330 6c 61 74 65 64 20 3a 31 3b 20 20 2f 2a 20 54 72  lated :1;  /* Tr
1b340 75 65 20 69 66 20 73 75 62 2d 71 75 65 72 79 20  ue if sub-query 
1b350 69 73 20 63 6f 72 72 65 6c 61 74 65 64 20 2a 2f  is correlated */
1b360 0a 20 20 20 20 20 20 75 6e 73 69 67 6e 65 64 20  .      unsigned 
1b370 76 69 61 43 6f 72 6f 75 74 69 6e 65 20 3a 31 3b  viaCoroutine :1;
1b380 20 20 2f 2a 20 49 6d 70 6c 65 6d 65 6e 74 65 64    /* Implemented
1b390 20 61 73 20 61 20 63 6f 2d 72 6f 75 74 69 6e 65   as a co-routine
1b3a0 20 2a 2f 0a 20 20 20 20 20 20 75 6e 73 69 67 6e   */.      unsign
1b3b0 65 64 20 69 73 52 65 63 75 72 73 69 76 65 20 3a  ed isRecursive :
1b3c0 31 3b 20 20 20 2f 2a 20 54 72 75 65 20 66 6f 72  1;   /* True for
1b3d0 20 72 65 63 75 72 73 69 76 65 20 72 65 66 65 72   recursive refer
1b3e0 65 6e 63 65 20 69 6e 20 57 49 54 48 20 2a 2f 0a  ence in WITH */.
1b3f0 20 20 20 20 7d 20 66 67 3b 0a 20 20 20 20 69 6e      } fg;.    in
1b400 74 20 69 43 75 72 73 6f 72 3b 20 20 20 20 20 20  t iCursor;      
1b410 2f 2a 20 54 68 65 20 56 44 42 45 20 63 75 72 73  /* The VDBE curs
1b420 6f 72 20 6e 75 6d 62 65 72 20 75 73 65 64 20 74  or number used t
1b430 6f 20 61 63 63 65 73 73 20 74 68 69 73 20 74 61  o access this ta
1b440 62 6c 65 20 2a 2f 0a 20 20 20 20 45 78 70 72 20  ble */.    Expr 
1b450 2a 70 4f 6e 3b 20 20 20 20 20 20 20 20 2f 2a 20  *pOn;        /* 
1b460 54 68 65 20 4f 4e 20 63 6c 61 75 73 65 20 6f 66  The ON clause of
1b470 20 61 20 6a 6f 69 6e 20 2a 2f 0a 20 20 20 20 49   a join */.    I
1b480 64 4c 69 73 74 20 2a 70 55 73 69 6e 67 3b 20 20  dList *pUsing;  
1b490 20 2f 2a 20 54 68 65 20 55 53 49 4e 47 20 63 6c   /* The USING cl
1b4a0 61 75 73 65 20 6f 66 20 61 20 6a 6f 69 6e 20 2a  ause of a join *
1b4b0 2f 0a 20 20 20 20 42 69 74 6d 61 73 6b 20 63 6f  /.    Bitmask co
1b4c0 6c 55 73 65 64 3b 20 20 2f 2a 20 42 69 74 20 4e  lUsed;  /* Bit N
1b4d0 20 28 31 3c 3c 4e 29 20 73 65 74 20 69 66 20 63   (1<<N) set if c
1b4e0 6f 6c 75 6d 6e 20 4e 20 6f 66 20 70 54 61 62 20  olumn N of pTab 
1b4f0 69 73 20 75 73 65 64 20 2a 2f 0a 20 20 20 20 75  is used */.    u
1b500 6e 69 6f 6e 20 7b 0a 20 20 20 20 20 20 63 68 61  nion {.      cha
1b510 72 20 2a 7a 49 6e 64 65 78 65 64 42 79 3b 20 20  r *zIndexedBy;  
1b520 20 20 2f 2a 20 49 64 65 6e 74 69 66 69 65 72 20    /* Identifier 
1b530 66 72 6f 6d 20 22 49 4e 44 45 58 45 44 20 42 59  from "INDEXED BY
1b540 20 3c 7a 49 6e 64 65 78 3e 22 20 63 6c 61 75 73   <zIndex>" claus
1b550 65 20 2a 2f 0a 20 20 20 20 20 20 45 78 70 72 4c  e */.      ExprL
1b560 69 73 74 20 2a 70 46 75 6e 63 41 72 67 3b 20 20  ist *pFuncArg;  
1b570 2f 2a 20 41 72 67 75 6d 65 6e 74 73 20 74 6f 20  /* Arguments to 
1b580 74 61 62 6c 65 2d 76 61 6c 75 65 64 2d 66 75 6e  table-valued-fun
1b590 63 74 69 6f 6e 20 2a 2f 0a 20 20 20 20 7d 20 75  ction */.    } u
1b5a0 31 3b 0a 20 20 20 20 49 6e 64 65 78 20 2a 70 49  1;.    Index *pI
1b5b0 42 49 6e 64 65 78 3b 20 20 2f 2a 20 49 6e 64 65  BIndex;  /* Inde
1b5c0 78 20 73 74 72 75 63 74 75 72 65 20 63 6f 72 72  x structure corr
1b5d0 65 73 70 6f 6e 64 69 6e 67 20 74 6f 20 75 31 2e  esponding to u1.
1b5e0 7a 49 6e 64 65 78 65 64 42 79 20 2a 2f 0a 20 20  zIndexedBy */.  
1b5f0 7d 20 61 5b 31 5d 3b 20 20 20 20 20 20 20 20 20  } a[1];         
1b600 20 20 20 20 2f 2a 20 4f 6e 65 20 65 6e 74 72 79      /* One entry
1b610 20 66 6f 72 20 65 61 63 68 20 69 64 65 6e 74 69   for each identi
1b620 66 69 65 72 20 6f 6e 20 74 68 65 20 6c 69 73 74  fier on the list
1b630 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 50 65   */.};../*.** Pe
1b640 72 6d 69 74 74 65 64 20 76 61 6c 75 65 73 20 6f  rmitted values o
1b650 66 20 74 68 65 20 53 72 63 4c 69 73 74 2e 61 2e  f the SrcList.a.
1b660 6a 6f 69 6e 74 79 70 65 20 66 69 65 6c 64 0a 2a  jointype field.*
1b670 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f 49 4e 4e  /.#define JT_INN
1b680 45 52 20 20 20 20 20 30 78 30 30 30 31 20 20 20  ER     0x0001   
1b690 20 2f 2a 20 41 6e 79 20 6b 69 6e 64 20 6f 66 20   /* Any kind of 
1b6a0 69 6e 6e 65 72 20 6f 72 20 63 72 6f 73 73 20 6a  inner or cross j
1b6b0 6f 69 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a  oin */.#define J
1b6c0 54 5f 43 52 4f 53 53 20 20 20 20 20 30 78 30 30  T_CROSS     0x00
1b6d0 30 32 20 20 20 20 2f 2a 20 45 78 70 6c 69 63 69  02    /* Explici
1b6e0 74 20 75 73 65 20 6f 66 20 74 68 65 20 43 52 4f  t use of the CRO
1b6f0 53 53 20 6b 65 79 77 6f 72 64 20 2a 2f 0a 23 64  SS keyword */.#d
1b700 65 66 69 6e 65 20 4a 54 5f 4e 41 54 55 52 41 4c  efine JT_NATURAL
1b710 20 20 20 30 78 30 30 30 34 20 20 20 20 2f 2a 20     0x0004    /* 
1b720 54 72 75 65 20 66 6f 72 20 61 20 22 6e 61 74 75  True for a "natu
1b730 72 61 6c 22 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65  ral" join */.#de
1b740 66 69 6e 65 20 4a 54 5f 4c 45 46 54 20 20 20 20  fine JT_LEFT    
1b750 20 20 30 78 30 30 30 38 20 20 20 20 2f 2a 20 4c    0x0008    /* L
1b760 65 66 74 20 6f 75 74 65 72 20 6a 6f 69 6e 20 2a  eft outer join *
1b770 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f 52 49 47  /.#define JT_RIG
1b780 48 54 20 20 20 20 20 30 78 30 30 31 30 20 20 20  HT     0x0010   
1b790 20 2f 2a 20 52 69 67 68 74 20 6f 75 74 65 72 20   /* Right outer 
1b7a0 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  join */.#define 
1b7b0 4a 54 5f 4f 55 54 45 52 20 20 20 20 20 30 78 30  JT_OUTER     0x0
1b7c0 30 32 30 20 20 20 20 2f 2a 20 54 68 65 20 22 4f  020    /* The "O
1b7d0 55 54 45 52 22 20 6b 65 79 77 6f 72 64 20 69 73  UTER" keyword is
1b7e0 20 70 72 65 73 65 6e 74 20 2a 2f 0a 23 64 65 66   present */.#def
1b7f0 69 6e 65 20 4a 54 5f 45 52 52 4f 52 20 20 20 20  ine JT_ERROR    
1b800 20 30 78 30 30 34 30 20 20 20 20 2f 2a 20 75 6e   0x0040    /* un
1b810 6b 6e 6f 77 6e 20 6f 72 20 75 6e 73 75 70 70 6f  known or unsuppo
1b820 72 74 65 64 20 6a 6f 69 6e 20 74 79 70 65 20 2a  rted join type *
1b830 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 46 6c 61 67 73 20  /.../*.** Flags 
1b840 61 70 70 72 6f 70 72 69 61 74 65 20 66 6f 72 20  appropriate for 
1b850 74 68 65 20 77 63 74 72 6c 46 6c 61 67 73 20 70  the wctrlFlags p
1b860 61 72 61 6d 65 74 65 72 20 6f 66 20 73 71 6c 69  arameter of sqli
1b870 74 65 33 57 68 65 72 65 42 65 67 69 6e 28 29 0a  te3WhereBegin().
1b880 2a 2a 20 61 6e 64 20 74 68 65 20 57 68 65 72 65  ** and the Where
1b890 49 6e 66 6f 2e 77 63 74 72 6c 46 6c 61 67 73 20  Info.wctrlFlags 
1b8a0 6d 65 6d 62 65 72 2e 0a 2a 2a 0a 2a 2a 20 56 61  member..**.** Va
1b8b0 6c 75 65 20 63 6f 6e 73 74 72 61 69 6e 74 73 20  lue constraints 
1b8c0 28 65 6e 66 6f 72 63 65 64 20 76 69 61 20 61 73  (enforced via as
1b8d0 73 65 72 74 28 29 29 3a 0a 2a 2a 20 20 20 20 20  sert()):.**     
1b8e0 57 48 45 52 45 5f 55 53 45 5f 4c 49 4d 49 54 20  WHERE_USE_LIMIT 
1b8f0 20 3d 3d 20 53 46 5f 46 69 78 65 64 4c 69 6d 69   == SF_FixedLimi
1b900 74 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45  t.*/.#define WHE
1b910 52 45 5f 4f 52 44 45 52 42 59 5f 4e 4f 52 4d 41  RE_ORDERBY_NORMA
1b920 4c 20 20 20 30 78 30 30 30 30 20 2f 2a 20 4e 6f  L   0x0000 /* No
1b930 2d 6f 70 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57  -op */.#define W
1b940 48 45 52 45 5f 4f 52 44 45 52 42 59 5f 4d 49 4e  HERE_ORDERBY_MIN
1b950 20 20 20 20 20 20 30 78 30 30 30 31 20 2f 2a 20        0x0001 /* 
1b960 4f 52 44 45 52 20 42 59 20 70 72 6f 63 65 73 73  ORDER BY process
1b970 69 6e 67 20 66 6f 72 20 6d 69 6e 28 29 20 66 75  ing for min() fu
1b980 6e 63 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48  nc */.#define WH
1b990 45 52 45 5f 4f 52 44 45 52 42 59 5f 4d 41 58 20  ERE_ORDERBY_MAX 
1b9a0 20 20 20 20 20 30 78 30 30 30 32 20 2f 2a 20 4f       0x0002 /* O
1b9b0 52 44 45 52 20 42 59 20 70 72 6f 63 65 73 73 69  RDER BY processi
1b9c0 6e 67 20 66 6f 72 20 6d 61 78 28 29 20 66 75 6e  ng for max() fun
1b9d0 63 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45  c */.#define WHE
1b9e0 52 45 5f 4f 4e 45 50 41 53 53 5f 44 45 53 49 52  RE_ONEPASS_DESIR
1b9f0 45 44 20 20 30 78 30 30 30 34 20 2f 2a 20 57 61  ED  0x0004 /* Wa
1ba00 6e 74 20 74 6f 20 64 6f 20 6f 6e 65 2d 70 61 73  nt to do one-pas
1ba10 73 20 55 50 44 41 54 45 2f 44 45 4c 45 54 45 20  s UPDATE/DELETE 
1ba20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45  */.#define WHERE
1ba30 5f 4f 4e 45 50 41 53 53 5f 4d 55 4c 54 49 52 4f  _ONEPASS_MULTIRO
1ba40 57 20 30 78 30 30 30 38 20 2f 2a 20 4f 4e 45 50  W 0x0008 /* ONEP
1ba50 41 53 53 20 69 73 20 6f 6b 20 77 69 74 68 20 6d  ASS is ok with m
1ba60 75 6c 74 69 70 6c 65 20 72 6f 77 73 20 2a 2f 0a  ultiple rows */.
1ba70 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 44 55  #define WHERE_DU
1ba80 50 4c 49 43 41 54 45 53 5f 4f 4b 20 20 20 20 30  PLICATES_OK    0
1ba90 78 30 30 31 30 20 2f 2a 20 4f 6b 20 74 6f 20 72  x0010 /* Ok to r
1baa0 65 74 75 72 6e 20 61 20 72 6f 77 20 6d 6f 72 65  eturn a row more
1bab0 20 74 68 61 6e 20 6f 6e 63 65 20 2a 2f 0a 23 64   than once */.#d
1bac0 65 66 69 6e 65 20 57 48 45 52 45 5f 4f 52 5f 53  efine WHERE_OR_S
1bad0 55 42 43 4c 41 55 53 45 20 20 20 20 20 30 78 30  UBCLAUSE     0x0
1bae0 30 32 30 20 2f 2a 20 50 72 6f 63 65 73 73 69 6e  020 /* Processin
1baf0 67 20 61 20 73 75 62 2d 57 48 45 52 45 20 61 73  g a sub-WHERE as
1bb00 20 70 61 72 74 20 6f 66 0a 20 20 20 20 20 20 20   part of.       
1bb10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bb20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a                 *
1bb30 2a 20 74 68 65 20 4f 52 20 6f 70 74 69 6d 69 7a  * the OR optimiz
1bb40 61 74 69 6f 6e 20 20 2a 2f 0a 23 64 65 66 69 6e  ation  */.#defin
1bb50 65 20 57 48 45 52 45 5f 47 52 4f 55 50 42 59 20  e WHERE_GROUPBY 
1bb60 20 20 20 20 20 20 20 20 20 30 78 30 30 34 30 20           0x0040 
1bb70 2f 2a 20 70 4f 72 64 65 72 42 79 20 69 73 20 72  /* pOrderBy is r
1bb80 65 61 6c 6c 79 20 61 20 47 52 4f 55 50 20 42 59  eally a GROUP BY
1bb90 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52   */.#define WHER
1bba0 45 5f 44 49 53 54 49 4e 43 54 42 59 20 20 20 20  E_DISTINCTBY    
1bbb0 20 20 20 30 78 30 30 38 30 20 2f 2a 20 70 4f 72     0x0080 /* pOr
1bbc0 64 65 72 62 79 20 69 73 20 72 65 61 6c 6c 79 20  derby is really 
1bbd0 61 20 44 49 53 54 49 4e 43 54 20 63 6c 61 75 73  a DISTINCT claus
1bbe0 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45  e */.#define WHE
1bbf0 52 45 5f 57 41 4e 54 5f 44 49 53 54 49 4e 43 54  RE_WANT_DISTINCT
1bc00 20 20 20 20 30 78 30 31 30 30 20 2f 2a 20 41 6c      0x0100 /* Al
1bc10 6c 20 6f 75 74 70 75 74 20 6e 65 65 64 73 20 74  l output needs t
1bc20 6f 20 62 65 20 64 69 73 74 69 6e 63 74 20 2a 2f  o be distinct */
1bc30 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 53  .#define WHERE_S
1bc40 4f 52 54 42 59 47 52 4f 55 50 20 20 20 20 20 20  ORTBYGROUP      
1bc50 30 78 30 32 30 30 20 2f 2a 20 53 75 70 70 6f 72  0x0200 /* Suppor
1bc60 74 20 73 71 6c 69 74 65 33 57 68 65 72 65 49 73  t sqlite3WhereIs
1bc70 53 6f 72 74 65 64 28 29 20 2a 2f 0a 23 64 65 66  Sorted() */.#def
1bc80 69 6e 65 20 57 48 45 52 45 5f 53 45 45 4b 5f 54  ine WHERE_SEEK_T
1bc90 41 42 4c 45 20 20 20 20 20 20 20 30 78 30 34 30  ABLE       0x040
1bca0 30 20 2f 2a 20 44 6f 20 6e 6f 74 20 64 65 66 65  0 /* Do not defe
1bcb0 72 20 73 65 65 6b 73 20 6f 6e 20 6d 61 69 6e 20  r seeks on main 
1bcc0 74 61 62 6c 65 20 2a 2f 0a 23 64 65 66 69 6e 65  table */.#define
1bcd0 20 57 48 45 52 45 5f 4f 52 44 45 52 42 59 5f 4c   WHERE_ORDERBY_L
1bce0 49 4d 49 54 20 20 20 20 30 78 30 38 30 30 20 2f  IMIT    0x0800 /
1bcf0 2a 20 4f 52 44 45 52 42 59 2b 4c 49 4d 49 54 20  * ORDERBY+LIMIT 
1bd00 6f 6e 20 74 68 65 20 69 6e 6e 65 72 20 6c 6f 6f  on the inner loo
1bd10 70 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45  p */.#define WHE
1bd20 52 45 5f 53 45 45 4b 5f 55 4e 49 51 5f 54 41 42  RE_SEEK_UNIQ_TAB
1bd30 4c 45 20 20 30 78 31 30 30 30 20 2f 2a 20 44 6f  LE  0x1000 /* Do
1bd40 20 6e 6f 74 20 64 65 66 65 72 20 73 65 65 6b 73   not defer seeks
1bd50 20 69 66 20 75 6e 69 71 75 65 20 2a 2f 0a 20 20   if unique */.  
1bd60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bd70 20 20 20 20 20 20 2f 2a 20 20 20 20 20 30 78 32        /*     0x2
1bd80 30 30 30 20 20 20 20 6e 6f 74 20 63 75 72 72 65  000    not curre
1bd90 6e 74 6c 79 20 75 73 65 64 20 2a 2f 0a 23 64 65  ntly used */.#de
1bda0 66 69 6e 65 20 57 48 45 52 45 5f 55 53 45 5f 4c  fine WHERE_USE_L
1bdb0 49 4d 49 54 20 20 20 20 20 20 20 20 30 78 34 30  IMIT        0x40
1bdc0 30 30 20 2f 2a 20 55 73 65 20 74 68 65 20 4c 49  00 /* Use the LI
1bdd0 4d 49 54 20 69 6e 20 63 6f 73 74 20 65 73 74 69  MIT in cost esti
1bde0 6d 61 74 65 73 20 2a 2f 0a 20 20 20 20 20 20 20  mates */.       
1bdf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1be00 20 2f 2a 20 20 20 20 20 30 78 38 30 30 30 20 20   /*     0x8000  
1be10 20 20 6e 6f 74 20 63 75 72 72 65 6e 74 6c 79 20    not currently 
1be20 75 73 65 64 20 2a 2f 0a 0a 2f 2a 20 41 6c 6c 6f  used */../* Allo
1be30 77 65 64 20 72 65 74 75 72 6e 20 76 61 6c 75 65  wed return value
1be40 73 20 66 72 6f 6d 20 73 71 6c 69 74 65 33 57 68  s from sqlite3Wh
1be50 65 72 65 49 73 44 69 73 74 69 6e 63 74 28 29 0a  ereIsDistinct().
1be60 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45  */.#define WHERE
1be70 5f 44 49 53 54 49 4e 43 54 5f 4e 4f 4f 50 20 20  _DISTINCT_NOOP  
1be80 20 20 20 20 30 20 20 2f 2a 20 44 49 53 54 49 4e      0  /* DISTIN
1be90 43 54 20 6b 65 79 77 6f 72 64 20 6e 6f 74 20 75  CT keyword not u
1bea0 73 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57  sed */.#define W
1beb0 48 45 52 45 5f 44 49 53 54 49 4e 43 54 5f 55 4e  HERE_DISTINCT_UN
1bec0 49 51 55 45 20 20 20 20 31 20 20 2f 2a 20 4e 6f  IQUE    1  /* No
1bed0 20 64 75 70 6c 69 63 61 74 65 73 20 2a 2f 0a 23   duplicates */.#
1bee0 64 65 66 69 6e 65 20 57 48 45 52 45 5f 44 49 53  define WHERE_DIS
1bef0 54 49 4e 43 54 5f 4f 52 44 45 52 45 44 20 20 20  TINCT_ORDERED   
1bf00 32 20 20 2f 2a 20 41 6c 6c 20 64 75 70 6c 69 63  2  /* All duplic
1bf10 61 74 65 73 20 61 72 65 20 61 64 6a 61 63 65 6e  ates are adjacen
1bf20 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45  t */.#define WHE
1bf30 52 45 5f 44 49 53 54 49 4e 43 54 5f 55 4e 4f 52  RE_DISTINCT_UNOR
1bf40 44 45 52 45 44 20 33 20 20 2f 2a 20 44 75 70 6c  DERED 3  /* Dupl
1bf50 69 63 61 74 65 73 20 61 72 65 20 73 63 61 74 74  icates are scatt
1bf60 65 72 65 64 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41  ered */../*.** A
1bf70 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20 64 65 66   NameContext def
1bf80 69 6e 65 73 20 61 20 63 6f 6e 74 65 78 74 20 69  ines a context i
1bf90 6e 20 77 68 69 63 68 20 74 6f 20 72 65 73 6f 6c  n which to resol
1bfa0 76 65 20 74 61 62 6c 65 20 61 6e 64 20 63 6f 6c  ve table and col
1bfb0 75 6d 6e 0a 2a 2a 20 6e 61 6d 65 73 2e 20 20 54  umn.** names.  T
1bfc0 68 65 20 63 6f 6e 74 65 78 74 20 63 6f 6e 73 69  he context consi
1bfd0 73 74 73 20 6f 66 20 61 20 6c 69 73 74 20 6f 66  sts of a list of
1bfe0 20 74 61 62 6c 65 73 20 28 74 68 65 20 70 53 72   tables (the pSr
1bff0 63 4c 69 73 74 29 20 66 69 65 6c 64 20 61 6e 64  cList) field and
1c000 0a 2a 2a 20 61 20 6c 69 73 74 20 6f 66 20 6e 61  .** a list of na
1c010 6d 65 64 20 65 78 70 72 65 73 73 69 6f 6e 20 28  med expression (
1c020 70 45 4c 69 73 74 29 2e 20 20 54 68 65 20 6e 61  pEList).  The na
1c030 6d 65 64 20 65 78 70 72 65 73 73 69 6f 6e 20 6c  med expression l
1c040 69 73 74 20 6d 61 79 0a 2a 2a 20 62 65 20 4e 55  ist may.** be NU
1c050 4c 4c 2e 20 20 54 68 65 20 70 53 72 63 20 63 6f  LL.  The pSrc co
1c060 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 74 68 65  rresponds to the
1c070 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 6f 66 20   FROM clause of 
1c080 61 20 53 45 4c 45 43 54 20 6f 72 0a 2a 2a 20 74  a SELECT or.** t
1c090 6f 20 74 68 65 20 74 61 62 6c 65 20 62 65 69 6e  o the table bein
1c0a0 67 20 6f 70 65 72 61 74 65 64 20 6f 6e 20 62 79  g operated on by
1c0b0 20 49 4e 53 45 52 54 2c 20 55 50 44 41 54 45 2c   INSERT, UPDATE,
1c0c0 20 6f 72 20 44 45 4c 45 54 45 2e 20 20 54 68 65   or DELETE.  The
1c0d0 0a 2a 2a 20 70 45 4c 69 73 74 20 63 6f 72 72 65  .** pEList corre
1c0e0 73 70 6f 6e 64 73 20 74 6f 20 74 68 65 20 72 65  sponds to the re
1c0f0 73 75 6c 74 20 73 65 74 20 6f 66 20 61 20 53 45  sult set of a SE
1c100 4c 45 43 54 20 61 6e 64 20 69 73 20 4e 55 4c 4c  LECT and is NULL
1c110 20 66 6f 72 0a 2a 2a 20 6f 74 68 65 72 20 73 74   for.** other st
1c120 61 74 65 6d 65 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20  atements..**.** 
1c130 4e 61 6d 65 43 6f 6e 74 65 78 74 73 20 63 61 6e  NameContexts can
1c140 20 62 65 20 6e 65 73 74 65 64 2e 20 20 57 68 65   be nested.  Whe
1c150 6e 20 72 65 73 6f 6c 76 69 6e 67 20 6e 61 6d 65  n resolving name
1c160 73 2c 20 74 68 65 20 69 6e 6e 65 72 2d 6d 6f 73  s, the inner-mos
1c170 74 0a 2a 2a 20 63 6f 6e 74 65 78 74 20 69 73 20  t.** context is 
1c180 73 65 61 72 63 68 65 64 20 66 69 72 73 74 2e 20  searched first. 
1c190 20 49 66 20 6e 6f 20 6d 61 74 63 68 20 69 73 20   If no match is 
1c1a0 66 6f 75 6e 64 2c 20 74 68 65 20 6e 65 78 74 20  found, the next 
1c1b0 6f 75 74 65 72 0a 2a 2a 20 63 6f 6e 74 65 78 74  outer.** context
1c1c0 20 69 73 20 63 68 65 63 6b 65 64 2e 20 20 49 66   is checked.  If
1c1d0 20 74 68 65 72 65 20 69 73 20 73 74 69 6c 6c 20   there is still 
1c1e0 6e 6f 20 6d 61 74 63 68 2c 20 74 68 65 20 6e 65  no match, the ne
1c1f0 78 74 20 63 6f 6e 74 65 78 74 0a 2a 2a 20 69 73  xt context.** is
1c200 20 63 68 65 63 6b 65 64 2e 20 20 54 68 69 73 20   checked.  This 
1c210 70 72 6f 63 65 73 73 20 63 6f 6e 74 69 6e 75 65  process continue
1c220 73 20 75 6e 74 69 6c 20 65 69 74 68 65 72 20 61  s until either a
1c230 20 6d 61 74 63 68 20 69 73 20 66 6f 75 6e 64 0a   match is found.
1c240 2a 2a 20 6f 72 20 61 6c 6c 20 63 6f 6e 74 65 78  ** or all contex
1c250 74 73 20 61 72 65 20 63 68 65 63 6b 2e 20 20 57  ts are check.  W
1c260 68 65 6e 20 61 20 6d 61 74 63 68 20 69 73 20 66  hen a match is f
1c270 6f 75 6e 64 2c 20 74 68 65 20 6e 52 65 66 20 6d  ound, the nRef m
1c280 65 6d 62 65 72 20 6f 66 0a 2a 2a 20 74 68 65 20  ember of.** the 
1c290 63 6f 6e 74 65 78 74 20 63 6f 6e 74 61 69 6e 69  context containi
1c2a0 6e 67 20 74 68 65 20 6d 61 74 63 68 20 69 73 20  ng the match is 
1c2b0 69 6e 63 72 65 6d 65 6e 74 65 64 2e 0a 2a 2a 0a  incremented..**.
1c2c0 2a 2a 20 45 61 63 68 20 73 75 62 71 75 65 72 79  ** Each subquery
1c2d0 20 67 65 74 73 20 61 20 6e 65 77 20 4e 61 6d 65   gets a new Name
1c2e0 43 6f 6e 74 65 78 74 2e 20 20 54 68 65 20 70 4e  Context.  The pN
1c2f0 65 78 74 20 66 69 65 6c 64 20 70 6f 69 6e 74 73  ext field points
1c300 20 74 6f 20 74 68 65 0a 2a 2a 20 4e 61 6d 65 43   to the.** NameC
1c310 6f 6e 74 65 78 74 20 69 6e 20 74 68 65 20 70 61  ontext in the pa
1c320 72 65 6e 74 20 71 75 65 72 79 2e 20 20 54 68 75  rent query.  Thu
1c330 73 20 74 68 65 20 70 72 6f 63 65 73 73 20 6f 66  s the process of
1c340 20 73 63 61 6e 6e 69 6e 67 20 74 68 65 0a 2a 2a   scanning the.**
1c350 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20 6c 69 73   NameContext lis
1c360 74 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f  t corresponds to
1c370 20 73 65 61 72 63 68 69 6e 67 20 74 68 72 6f 75   searching throu
1c380 67 68 20 73 75 63 63 65 73 73 69 76 65 6c 79 20  gh successively 
1c390 6f 75 74 65 72 0a 2a 2a 20 73 75 62 71 75 65 72  outer.** subquer
1c3a0 69 65 73 20 6c 6f 6f 6b 69 6e 67 20 66 6f 72 20  ies looking for 
1c3b0 61 20 6d 61 74 63 68 2e 0a 2a 2f 0a 73 74 72 75  a match..*/.stru
1c3c0 63 74 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20 7b  ct NameContext {
1c3d0 0a 20 20 50 61 72 73 65 20 2a 70 50 61 72 73 65  .  Parse *pParse
1c3e0 3b 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 70  ;       /* The p
1c3f0 61 72 73 65 72 20 2a 2f 0a 20 20 53 72 63 4c 69  arser */.  SrcLi
1c400 73 74 20 2a 70 53 72 63 4c 69 73 74 3b 20 20 20  st *pSrcList;   
1c410 2f 2a 20 4f 6e 65 20 6f 72 20 6d 6f 72 65 20 74  /* One or more t
1c420 61 62 6c 65 73 20 75 73 65 64 20 74 6f 20 72 65  ables used to re
1c430 73 6f 6c 76 65 20 6e 61 6d 65 73 20 2a 2f 0a 20  solve names */. 
1c440 20 75 6e 69 6f 6e 20 7b 0a 20 20 20 20 45 78 70   union {.    Exp
1c450 72 4c 69 73 74 20 2a 70 45 4c 69 73 74 3b 20 20  rList *pEList;  
1c460 20 20 2f 2a 20 4f 70 74 69 6f 6e 61 6c 20 6c 69    /* Optional li
1c470 73 74 20 6f 66 20 72 65 73 75 6c 74 2d 73 65 74  st of result-set
1c480 20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 20 20 20 20   columns */.    
1c490 41 67 67 49 6e 66 6f 20 2a 70 41 67 67 49 6e 66  AggInfo *pAggInf
1c4a0 6f 3b 20 20 20 2f 2a 20 49 6e 66 6f 72 6d 61 74  o;   /* Informat
1c4b0 69 6f 6e 20 61 62 6f 75 74 20 61 67 67 72 65 67  ion about aggreg
1c4c0 61 74 65 73 20 61 74 20 74 68 69 73 20 6c 65 76  ates at this lev
1c4d0 65 6c 20 2a 2f 0a 20 20 20 20 55 70 73 65 72 74  el */.    Upsert
1c4e0 20 2a 70 55 70 73 65 72 74 3b 20 20 20 20 20 2f   *pUpsert;     /
1c4f0 2a 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 63 6c  * ON CONFLICT cl
1c500 61 75 73 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  ause information
1c510 20 66 72 6f 6d 20 61 6e 20 75 70 73 65 72 74 20   from an upsert 
1c520 2a 2f 0a 20 20 7d 20 75 4e 43 3b 0a 20 20 4e 61  */.  } uNC;.  Na
1c530 6d 65 43 6f 6e 74 65 78 74 20 2a 70 4e 65 78 74  meContext *pNext
1c540 3b 20 20 2f 2a 20 4e 65 78 74 20 6f 75 74 65 72  ;  /* Next outer
1c550 20 6e 61 6d 65 20 63 6f 6e 74 65 78 74 2e 20 20   name context.  
1c560 4e 55 4c 4c 20 66 6f 72 20 6f 75 74 65 72 6d 6f  NULL for outermo
1c570 73 74 20 2a 2f 0a 20 20 69 6e 74 20 6e 52 65 66  st */.  int nRef
1c580 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
1c590 4e 75 6d 62 65 72 20 6f 66 20 6e 61 6d 65 73 20  Number of names 
1c5a0 72 65 73 6f 6c 76 65 64 20 62 79 20 74 68 69 73  resolved by this
1c5b0 20 63 6f 6e 74 65 78 74 20 2a 2f 0a 20 20 69 6e   context */.  in
1c5c0 74 20 6e 45 72 72 3b 20 20 20 20 20 20 20 20 20  t nErr;         
1c5d0 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
1c5e0 65 72 72 6f 72 73 20 65 6e 63 6f 75 6e 74 65 72  errors encounter
1c5f0 65 64 20 77 68 69 6c 65 20 72 65 73 6f 6c 76 69  ed while resolvi
1c600 6e 67 20 6e 61 6d 65 73 20 2a 2f 0a 20 20 75 31  ng names */.  u1
1c610 36 20 6e 63 46 6c 61 67 73 3b 20 20 20 20 20 20  6 ncFlags;      
1c620 20 20 20 2f 2a 20 5a 65 72 6f 20 6f 72 20 6d 6f     /* Zero or mo
1c630 72 65 20 4e 43 5f 2a 20 66 6c 61 67 73 20 64 65  re NC_* flags de
1c640 66 69 6e 65 64 20 62 65 6c 6f 77 20 2a 2f 0a 20  fined below */. 
1c650 20 53 65 6c 65 63 74 20 2a 70 57 69 6e 53 65 6c   Select *pWinSel
1c660 65 63 74 3b 20 20 2f 2a 20 53 45 4c 45 43 54 20  ect;  /* SELECT 
1c670 73 74 61 74 65 6d 65 6e 74 20 66 6f 72 20 61 6e  statement for an
1c680 79 20 77 69 6e 64 6f 77 20 66 75 6e 63 74 69 6f  y window functio
1c690 6e 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  ns */.};../*.** 
1c6a0 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20 66  Allowed values f
1c6b0 6f 72 20 74 68 65 20 4e 61 6d 65 43 6f 6e 74 65  or the NameConte
1c6c0 78 74 2c 20 6e 63 46 6c 61 67 73 20 66 69 65 6c  xt, ncFlags fiel
1c6d0 64 2e 0a 2a 2a 0a 2a 2a 20 56 61 6c 75 65 20 63  d..**.** Value c
1c6e0 6f 6e 73 74 72 61 69 6e 74 73 20 28 61 6c 6c 20  onstraints (all 
1c6f0 63 68 65 63 6b 65 64 20 76 69 61 20 61 73 73 65  checked via asse
1c700 72 74 28 29 29 3a 0a 2a 2a 20 20 20 20 4e 43 5f  rt()):.**    NC_
1c710 48 61 73 41 67 67 20 20 20 20 3d 3d 20 53 46 5f  HasAgg    == SF_
1c720 48 61 73 41 67 67 0a 2a 2a 20 20 20 20 4e 43 5f  HasAgg.**    NC_
1c730 4d 69 6e 4d 61 78 41 67 67 20 3d 3d 20 53 46 5f  MinMaxAgg == SF_
1c740 4d 69 6e 4d 61 78 41 67 67 20 3d 3d 20 53 51 4c  MinMaxAgg == SQL
1c750 49 54 45 5f 46 55 4e 43 5f 4d 49 4e 4d 41 58 0a  ITE_FUNC_MINMAX.
1c760 2a 2a 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43  **.*/.#define NC
1c770 5f 41 6c 6c 6f 77 41 67 67 20 20 30 78 30 30 30  _AllowAgg  0x000
1c780 31 20 20 2f 2a 20 41 67 67 72 65 67 61 74 65 20  1  /* Aggregate 
1c790 66 75 6e 63 74 69 6f 6e 73 20 61 72 65 20 61 6c  functions are al
1c7a0 6c 6f 77 65 64 20 68 65 72 65 20 2a 2f 0a 23 64  lowed here */.#d
1c7b0 65 66 69 6e 65 20 4e 43 5f 50 61 72 74 49 64 78  efine NC_PartIdx
1c7c0 20 20 20 30 78 30 30 30 32 20 20 2f 2a 20 54 72     0x0002  /* Tr
1c7d0 75 65 20 69 66 20 72 65 73 6f 6c 76 69 6e 67 20  ue if resolving 
1c7e0 61 20 70 61 72 74 69 61 6c 20 69 6e 64 65 78 20  a partial index 
1c7f0 57 48 45 52 45 20 2a 2f 0a 23 64 65 66 69 6e 65  WHERE */.#define
1c800 20 4e 43 5f 49 73 43 68 65 63 6b 20 20 20 30 78   NC_IsCheck   0x
1c810 30 30 30 34 20 20 2f 2a 20 54 72 75 65 20 69 66  0004  /* True if
1c820 20 72 65 73 6f 6c 76 69 6e 67 20 6e 61 6d 65 73   resolving names
1c830 20 69 6e 20 61 20 43 48 45 43 4b 20 63 6f 6e 73   in a CHECK cons
1c840 74 72 61 69 6e 74 20 2a 2f 0a 23 64 65 66 69 6e  traint */.#defin
1c850 65 20 4e 43 5f 49 6e 41 67 67 46 75 6e 63 20 30  e NC_InAggFunc 0
1c860 78 30 30 30 38 20 20 2f 2a 20 54 72 75 65 20 69  x0008  /* True i
1c870 66 20 61 6e 61 6c 79 7a 69 6e 67 20 61 72 67 75  f analyzing argu
1c880 6d 65 6e 74 73 20 74 6f 20 61 6e 20 61 67 67 20  ments to an agg 
1c890 66 75 6e 63 20 2a 2f 0a 23 64 65 66 69 6e 65 20  func */.#define 
1c8a0 4e 43 5f 48 61 73 41 67 67 20 20 20 20 30 78 30  NC_HasAgg    0x0
1c8b0 30 31 30 20 20 2f 2a 20 4f 6e 65 20 6f 72 20 6d  010  /* One or m
1c8c0 6f 72 65 20 61 67 67 72 65 67 61 74 65 20 66 75  ore aggregate fu
1c8d0 6e 63 74 69 6f 6e 73 20 73 65 65 6e 20 2a 2f 0a  nctions seen */.
1c8e0 23 64 65 66 69 6e 65 20 4e 43 5f 49 64 78 45 78  #define NC_IdxEx
1c8f0 70 72 20 20 20 30 78 30 30 32 30 20 20 2f 2a 20  pr   0x0020  /* 
1c900 54 72 75 65 20 69 66 20 72 65 73 6f 6c 76 69 6e  True if resolvin
1c910 67 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 43 52 45  g columns of CRE
1c920 41 54 45 20 49 4e 44 45 58 20 2a 2f 0a 23 64 65  ATE INDEX */.#de
1c930 66 69 6e 65 20 4e 43 5f 56 61 72 53 65 6c 65 63  fine NC_VarSelec
1c940 74 20 30 78 30 30 34 30 20 20 2f 2a 20 41 20 63  t 0x0040  /* A c
1c950 6f 72 72 65 6c 61 74 65 64 20 73 75 62 71 75 65  orrelated subque
1c960 72 79 20 68 61 73 20 62 65 65 6e 20 73 65 65 6e  ry has been seen
1c970 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 55   */.#define NC_U
1c980 45 4c 69 73 74 20 20 20 20 30 78 30 30 38 30 20  EList    0x0080 
1c990 20 2f 2a 20 54 72 75 65 20 69 66 20 75 4e 43 2e   /* True if uNC.
1c9a0 70 45 4c 69 73 74 20 69 73 20 75 73 65 64 20 2a  pEList is used *
1c9b0 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 55 41 67  /.#define NC_UAg
1c9c0 67 49 6e 66 6f 20 20 30 78 30 31 30 30 20 20 2f  gInfo  0x0100  /
1c9d0 2a 20 54 72 75 65 20 69 66 20 75 4e 43 2e 70 41  * True if uNC.pA
1c9e0 67 67 49 6e 66 6f 20 69 73 20 75 73 65 64 20 2a  ggInfo is used *
1c9f0 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 55 55 70  /.#define NC_UUp
1ca00 73 65 72 74 20 20 20 30 78 30 32 30 30 20 20 2f  sert   0x0200  /
1ca10 2a 20 54 72 75 65 20 69 66 20 75 4e 43 2e 70 55  * True if uNC.pU
1ca20 70 73 65 72 74 20 69 73 20 75 73 65 64 20 2a 2f  psert is used */
1ca30 0a 23 64 65 66 69 6e 65 20 4e 43 5f 4d 69 6e 4d  .#define NC_MinM
1ca40 61 78 41 67 67 20 30 78 31 30 30 30 20 20 2f 2a  axAgg 0x1000  /*
1ca50 20 6d 69 6e 2f 6d 61 78 20 61 67 67 72 65 67 61   min/max aggrega
1ca60 74 65 73 20 73 65 65 6e 2e 20 20 53 65 65 20 6e  tes seen.  See n
1ca70 6f 74 65 20 61 62 6f 76 65 20 2a 2f 0a 23 64 65  ote above */.#de
1ca80 66 69 6e 65 20 4e 43 5f 43 6f 6d 70 6c 65 78 20  fine NC_Complex 
1ca90 20 20 30 78 32 30 30 30 20 20 2f 2a 20 54 72 75    0x2000  /* Tru
1caa0 65 20 69 66 20 61 20 66 75 6e 63 74 69 6f 6e 20  e if a function 
1cab0 6f 72 20 73 75 62 71 75 65 72 79 20 73 65 65 6e  or subquery seen
1cac0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 41   */.#define NC_A
1cad0 6c 6c 6f 77 57 69 6e 20 20 30 78 34 30 30 30 20  llowWin  0x4000 
1cae0 20 2f 2a 20 57 69 6e 64 6f 77 20 66 75 6e 63 74   /* Window funct
1caf0 69 6f 6e 73 20 61 72 65 20 61 6c 6c 6f 77 65 64  ions are allowed
1cb00 20 68 65 72 65 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20   here */../*.** 
1cb10 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  An instance of t
1cb20 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6f 62 6a  he following obj
1cb30 65 63 74 20 64 65 73 63 72 69 62 65 73 20 61 20  ect describes a 
1cb40 73 69 6e 67 6c 65 20 4f 4e 20 43 4f 4e 46 4c 49  single ON CONFLI
1cb50 43 54 0a 2a 2a 20 63 6c 61 75 73 65 20 69 6e 20  CT.** clause in 
1cb60 61 6e 20 75 70 73 65 72 74 2e 0a 2a 2a 0a 2a 2a  an upsert..**.**
1cb70 20 54 68 65 20 70 55 70 73 65 72 74 54 61 72 67   The pUpsertTarg
1cb80 65 74 20 66 69 65 6c 64 20 69 73 20 6f 6e 6c 79  et field is only
1cb90 20 73 65 74 20 69 66 20 74 68 65 20 4f 4e 20 43   set if the ON C
1cba0 4f 4e 46 4c 49 43 54 20 63 6c 61 75 73 65 20 69  ONFLICT clause i
1cbb0 6e 63 6c 75 64 65 73 0a 2a 2a 20 63 6f 6e 66 6c  ncludes.** confl
1cbc0 69 63 74 2d 74 61 72 67 65 74 20 63 6c 61 75 73  ict-target claus
1cbd0 65 2e 20 20 28 49 6e 20 22 4f 4e 20 43 4f 4e 46  e.  (In "ON CONF
1cbe0 4c 49 43 54 28 61 2c 62 29 22 20 74 68 65 20 22  LICT(a,b)" the "
1cbf0 28 61 2c 62 29 22 20 69 73 20 74 68 65 0a 2a 2a  (a,b)" is the.**
1cc00 20 63 6f 6e 66 6c 69 63 74 2d 74 61 72 67 65 74   conflict-target
1cc10 20 63 6c 61 75 73 65 2e 29 20 20 54 68 65 20 70   clause.)  The p
1cc20 55 70 73 65 72 74 54 61 72 67 65 74 57 68 65 72  UpsertTargetWher
1cc30 65 20 69 73 20 74 68 65 20 6f 70 74 69 6f 6e 61  e is the optiona
1cc40 6c 0a 2a 2a 20 57 48 45 52 45 20 63 6c 61 75 73  l.** WHERE claus
1cc50 65 20 75 73 65 64 20 74 6f 20 69 64 65 6e 74 69  e used to identi
1cc60 66 79 20 70 61 72 74 69 61 6c 20 75 6e 69 71 75  fy partial uniqu
1cc70 65 20 69 6e 64 65 78 65 73 2e 0a 2a 2a 0a 2a 2a  e indexes..**.**
1cc80 20 70 55 70 73 65 72 74 53 65 74 20 69 73 20 74   pUpsertSet is t
1cc90 68 65 20 6c 69 73 74 20 6f 66 20 63 6f 6c 75 6d  he list of colum
1cca0 6e 3d 65 78 70 72 20 74 65 72 6d 73 20 6f 66 20  n=expr terms of 
1ccb0 74 68 65 20 55 50 44 41 54 45 20 73 74 61 74 65  the UPDATE state
1ccc0 6d 65 6e 74 2e 20 0a 2a 2a 20 54 68 65 20 70 55  ment. .** The pU
1ccd0 70 73 65 72 74 53 65 74 20 66 69 65 6c 64 20 69  psertSet field i
1cce0 73 20 4e 55 4c 4c 20 66 6f 72 20 61 20 4f 4e 20  s NULL for a ON 
1ccf0 43 4f 4e 46 4c 49 43 54 20 44 4f 20 4e 4f 54 48  CONFLICT DO NOTH
1cd00 49 4e 47 2e 20 20 54 68 65 0a 2a 2a 20 70 55 70  ING.  The.** pUp
1cd10 73 65 72 74 57 68 65 72 65 20 69 73 20 74 68 65  sertWhere is the
1cd20 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 66 6f   WHERE clause fo
1cd30 72 20 74 68 65 20 55 50 44 41 54 45 20 61 6e 64  r the UPDATE and
1cd40 20 69 73 20 4e 55 4c 4c 20 69 66 20 74 68 65 0a   is NULL if the.
1cd50 2a 2a 20 57 48 45 52 45 20 63 6c 61 75 73 65 20  ** WHERE clause 
1cd60 69 73 20 6f 6d 69 74 74 65 64 2e 0a 2a 2f 0a 73  is omitted..*/.s
1cd70 74 72 75 63 74 20 55 70 73 65 72 74 20 7b 0a 20  truct Upsert {. 
1cd80 20 45 78 70 72 4c 69 73 74 20 2a 70 55 70 73 65   ExprList *pUpse
1cd90 72 74 54 61 72 67 65 74 3b 20 20 2f 2a 20 4f 70  rtTarget;  /* Op
1cda0 74 69 6f 6e 61 6c 20 64 65 73 63 72 69 70 74 69  tional descripti
1cdb0 6f 6e 20 6f 66 20 63 6f 6e 66 6c 69 63 74 69 6e  on of conflictin
1cdc0 67 20 69 6e 64 65 78 20 2a 2f 0a 20 20 45 78 70  g index */.  Exp
1cdd0 72 20 2a 70 55 70 73 65 72 74 54 61 72 67 65 74  r *pUpsertTarget
1cde0 57 68 65 72 65 3b 20 2f 2a 20 57 48 45 52 45 20  Where; /* WHERE 
1cdf0 63 6c 61 75 73 65 20 66 6f 72 20 70 61 72 74 69  clause for parti
1ce00 61 6c 20 69 6e 64 65 78 20 74 61 72 67 65 74 73  al index targets
1ce10 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20 2a   */.  ExprList *
1ce20 70 55 70 73 65 72 74 53 65 74 3b 20 20 20 20 20  pUpsertSet;     
1ce30 2f 2a 20 54 68 65 20 53 45 54 20 63 6c 61 75 73  /* The SET claus
1ce40 65 20 66 72 6f 6d 20 61 6e 20 4f 4e 20 43 4f 4e  e from an ON CON
1ce50 46 4c 49 43 54 20 55 50 44 41 54 45 20 2a 2f 0a  FLICT UPDATE */.
1ce60 20 20 45 78 70 72 20 2a 70 55 70 73 65 72 74 57    Expr *pUpsertW
1ce70 68 65 72 65 3b 20 20 20 20 20 20 20 2f 2a 20 57  here;       /* W
1ce80 48 45 52 45 20 63 6c 61 75 73 65 20 66 6f 72 20  HERE clause for 
1ce90 74 68 65 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20  the ON CONFLICT 
1cea0 55 50 44 41 54 45 20 2a 2f 0a 20 20 2f 2a 20 54  UPDATE */.  /* T
1ceb0 68 65 20 66 69 65 6c 64 73 20 61 62 6f 76 65 20  he fields above 
1cec0 63 6f 6d 70 72 69 73 65 20 74 68 65 20 70 61 72  comprise the par
1ced0 73 65 20 74 72 65 65 20 66 6f 72 20 74 68 65 20  se tree for the 
1cee0 75 70 73 65 72 74 20 63 6c 61 75 73 65 2e 0a 20  upsert clause.. 
1cef0 20 2a 2a 20 54 68 65 20 66 69 65 6c 64 73 20 62   ** The fields b
1cf00 65 6c 6f 77 20 61 72 65 20 75 73 65 64 20 74 6f  elow are used to
1cf10 20 74 72 61 6e 73 66 65 72 20 69 6e 66 6f 72 6d   transfer inform
1cf20 61 74 69 6f 6e 20 66 72 6f 6d 20 74 68 65 20 49  ation from the I
1cf30 4e 53 45 52 54 0a 20 20 2a 2a 20 70 72 6f 63 65  NSERT.  ** proce
1cf40 73 73 69 6e 67 20 64 6f 77 6e 20 69 6e 74 6f 20  ssing down into 
1cf50 74 68 65 20 55 50 44 41 54 45 20 70 72 6f 63 65  the UPDATE proce
1cf60 73 73 69 6e 67 20 77 68 69 6c 65 20 67 65 6e 65  ssing while gene
1cf70 72 61 74 69 6e 67 20 63 6f 64 65 2e 0a 20 20 2a  rating code..  *
1cf80 2a 20 55 70 73 65 72 74 20 6f 77 6e 73 20 74 68  * Upsert owns th
1cf90 65 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74  e memory allocat
1cfa0 65 64 20 61 62 6f 76 65 2c 20 62 75 74 20 6e 6f  ed above, but no
1cfb0 74 20 74 68 65 20 6d 65 6d 6f 72 79 20 62 65 6c  t the memory bel
1cfc0 6f 77 2e 20 2a 2f 0a 20 20 49 6e 64 65 78 20 2a  ow. */.  Index *
1cfd0 70 55 70 73 65 72 74 49 64 78 3b 20 20 20 20 20  pUpsertIdx;     
1cfe0 20 20 20 2f 2a 20 43 6f 6e 73 74 72 61 69 6e 74     /* Constraint
1cff0 20 74 68 61 74 20 70 55 70 73 65 72 74 54 61 72   that pUpsertTar
1d000 67 65 74 20 69 64 65 6e 74 69 66 69 65 73 20 2a  get identifies *
1d010 2f 0a 20 20 53 72 63 4c 69 73 74 20 2a 70 55 70  /.  SrcList *pUp
1d020 73 65 72 74 53 72 63 3b 20 20 20 20 20 20 2f 2a  sertSrc;      /*
1d030 20 54 61 62 6c 65 20 74 6f 20 62 65 20 75 70 64   Table to be upd
1d040 61 74 65 64 20 2a 2f 0a 20 20 69 6e 74 20 72 65  ated */.  int re
1d050 67 44 61 74 61 3b 20 20 20 20 20 20 20 20 20 20  gData;          
1d060 20 20 20 20 2f 2a 20 46 69 72 73 74 20 72 65 67      /* First reg
1d070 69 73 74 65 72 20 68 6f 6c 64 69 6e 67 20 61 72  ister holding ar
1d080 72 61 79 20 6f 66 20 56 41 4c 55 45 53 20 2a 2f  ray of VALUES */
1d090 0a 20 20 69 6e 74 20 69 44 61 74 61 43 75 72 3b  .  int iDataCur;
1d0a0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1d0b0 49 6e 64 65 78 20 6f 66 20 74 68 65 20 64 61 74  Index of the dat
1d0c0 61 20 63 75 72 73 6f 72 20 2a 2f 0a 20 20 69 6e  a cursor */.  in
1d0d0 74 20 69 49 64 78 43 75 72 3b 20 20 20 20 20 20  t iIdxCur;      
1d0e0 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 64 65 78          /* Index
1d0f0 20 6f 66 20 74 68 65 20 66 69 72 73 74 20 69 6e   of the first in
1d100 64 65 78 20 63 75 72 73 6f 72 20 2a 2f 0a 7d 3b  dex cursor */.};
1d110 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61  ../*.** An insta
1d120 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f  nce of the follo
1d130 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 20 63  wing structure c
1d140 6f 6e 74 61 69 6e 73 20 61 6c 6c 20 69 6e 66 6f  ontains all info
1d150 72 6d 61 74 69 6f 6e 0a 2a 2a 20 6e 65 65 64 65  rmation.** neede
1d160 64 20 74 6f 20 67 65 6e 65 72 61 74 65 20 63 6f  d to generate co
1d170 64 65 20 66 6f 72 20 61 20 73 69 6e 67 6c 65 20  de for a single 
1d180 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74  SELECT statement
1d190 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 74 68 65 20  ..**.** See the 
1d1a0 68 65 61 64 65 72 20 63 6f 6d 6d 65 6e 74 20 6f  header comment o
1d1b0 6e 20 74 68 65 20 63 6f 6d 70 75 74 65 4c 69 6d  n the computeLim
1d1c0 69 74 52 65 67 69 73 74 65 72 73 28 29 20 72 6f  itRegisters() ro
1d1d0 75 74 69 6e 65 20 66 6f 72 20 61 0a 2a 2a 20 64  utine for a.** d
1d1e0 65 74 61 69 6c 65 64 20 64 65 73 63 72 69 70 74  etailed descript
1d1f0 69 6f 6e 20 6f 66 20 74 68 65 20 6d 65 61 6e 69  ion of the meani
1d200 6e 67 20 6f 66 20 74 68 65 20 69 4c 69 6d 69 74  ng of the iLimit
1d210 20 61 6e 64 20 69 4f 66 66 73 65 74 20 66 69 65   and iOffset fie
1d220 6c 64 73 2e 0a 2a 2a 0a 2a 2a 20 61 64 64 72 4f  lds..**.** addrO
1d230 70 65 6e 45 70 68 6d 5b 5d 20 65 6e 74 72 69 65  penEphm[] entrie
1d240 73 20 63 6f 6e 74 61 69 6e 20 74 68 65 20 61 64  s contain the ad
1d250 64 72 65 73 73 20 6f 66 20 4f 50 5f 4f 70 65 6e  dress of OP_Open
1d260 45 70 68 65 6d 65 72 61 6c 20 6f 70 63 6f 64 65  Ephemeral opcode
1d270 73 2e 0a 2a 2a 20 54 68 65 73 65 20 61 64 64 72  s..** These addr
1d280 65 73 73 65 73 20 6d 75 73 74 20 62 65 20 73 74  esses must be st
1d290 6f 72 65 64 20 73 6f 20 74 68 61 74 20 77 65 20  ored so that we 
1d2a0 63 61 6e 20 67 6f 20 62 61 63 6b 20 61 6e 64 20  can go back and 
1d2b0 66 69 6c 6c 20 69 6e 0a 2a 2a 20 74 68 65 20 50  fill in.** the P
1d2c0 34 5f 4b 45 59 49 4e 46 4f 20 61 6e 64 20 50 32  4_KEYINFO and P2
1d2d0 20 70 61 72 61 6d 65 74 65 72 73 20 6c 61 74 65   parameters late
1d2e0 72 2e 20 20 4e 65 69 74 68 65 72 20 74 68 65 20  r.  Neither the 
1d2f0 4b 65 79 49 6e 66 6f 20 6e 6f 72 0a 2a 2a 20 74  KeyInfo nor.** t
1d300 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c  he number of col
1d310 75 6d 6e 73 20 69 6e 20 50 32 20 63 61 6e 20 62  umns in P2 can b
1d320 65 20 63 6f 6d 70 75 74 65 64 20 61 74 20 74 68  e computed at th
1d330 65 20 73 61 6d 65 20 74 69 6d 65 0a 2a 2a 20 61  e same time.** a
1d340 73 20 74 68 65 20 4f 50 5f 4f 70 65 6e 45 70 68  s the OP_OpenEph
1d350 6d 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 73  m instruction is
1d360 20 63 6f 64 65 64 20 62 65 63 61 75 73 65 20 6e   coded because n
1d370 6f 74 0a 2a 2a 20 65 6e 6f 75 67 68 20 69 6e 66  ot.** enough inf
1d380 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 74  ormation about t
1d390 68 65 20 63 6f 6d 70 6f 75 6e 64 20 71 75 65 72  he compound quer
1d3a0 79 20 69 73 20 6b 6e 6f 77 6e 20 61 74 20 74 68  y is known at th
1d3b0 61 74 20 70 6f 69 6e 74 2e 0a 2a 2a 20 54 68 65  at point..** The
1d3c0 20 4b 65 79 49 6e 66 6f 20 66 6f 72 20 61 64 64   KeyInfo for add
1d3d0 72 4f 70 65 6e 54 72 61 6e 5b 30 5d 20 61 6e 64  rOpenTran[0] and
1d3e0 20 5b 31 5d 20 63 6f 6e 74 61 69 6e 73 20 63 6f   [1] contains co
1d3f0 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65  llating sequence
1d400 73 0a 2a 2a 20 66 6f 72 20 74 68 65 20 72 65 73  s.** for the res
1d410 75 6c 74 20 73 65 74 2e 20 20 54 68 65 20 4b 65  ult set.  The Ke
1d420 79 49 6e 66 6f 20 66 6f 72 20 61 64 64 72 4f 70  yInfo for addrOp
1d430 65 6e 45 70 68 6d 5b 32 5d 20 63 6f 6e 74 61 69  enEphm[2] contai
1d440 6e 73 20 63 6f 6c 6c 61 74 69 6e 67 0a 2a 2a 20  ns collating.** 
1d450 73 65 71 75 65 6e 63 65 73 20 66 6f 72 20 74 68  sequences for th
1d460 65 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73  e ORDER BY claus
1d470 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53 65 6c  e..*/.struct Sel
1d480 65 63 74 20 7b 0a 20 20 45 78 70 72 4c 69 73 74  ect {.  ExprList
1d490 20 2a 70 45 4c 69 73 74 3b 20 20 20 20 20 20 2f   *pEList;      /
1d4a0 2a 20 54 68 65 20 66 69 65 6c 64 73 20 6f 66 20  * The fields of 
1d4b0 74 68 65 20 72 65 73 75 6c 74 20 2a 2f 0a 20 20  the result */.  
1d4c0 75 38 20 6f 70 3b 20 20 20 20 20 20 20 20 20 20  u8 op;          
1d4d0 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 66         /* One of
1d4e0 3a 20 54 4b 5f 55 4e 49 4f 4e 20 54 4b 5f 41 4c  : TK_UNION TK_AL
1d4f0 4c 20 54 4b 5f 49 4e 54 45 52 53 45 43 54 20 54  L TK_INTERSECT T
1d500 4b 5f 45 58 43 45 50 54 20 2a 2f 0a 20 20 4c 6f  K_EXCEPT */.  Lo
1d510 67 45 73 74 20 6e 53 65 6c 65 63 74 52 6f 77 3b  gEst nSelectRow;
1d520 20 20 20 20 20 2f 2a 20 45 73 74 69 6d 61 74 65       /* Estimate
1d530 64 20 6e 75 6d 62 65 72 20 6f 66 20 72 65 73 75  d number of resu
1d540 6c 74 20 72 6f 77 73 20 2a 2f 0a 20 20 75 33 32  lt rows */.  u32
1d550 20 73 65 6c 46 6c 61 67 73 3b 20 20 20 20 20 20   selFlags;      
1d560 20 20 20 20 2f 2a 20 56 61 72 69 6f 75 73 20 53      /* Various S
1d570 46 5f 2a 20 76 61 6c 75 65 73 20 2a 2f 0a 20 20  F_* values */.  
1d580 69 6e 74 20 69 4c 69 6d 69 74 2c 20 69 4f 66 66  int iLimit, iOff
1d590 73 65 74 3b 20 20 20 2f 2a 20 4d 65 6d 6f 72 79  set;   /* Memory
1d5a0 20 72 65 67 69 73 74 65 72 73 20 68 6f 6c 64 69   registers holdi
1d5b0 6e 67 20 4c 49 4d 49 54 20 26 20 4f 46 46 53 45  ng LIMIT & OFFSE
1d5c0 54 20 63 6f 75 6e 74 65 72 73 20 2a 2f 0a 23 69  T counters */.#i
1d5d0 66 20 53 45 4c 45 43 54 54 52 41 43 45 5f 45 4e  f SELECTTRACE_EN
1d5e0 41 42 4c 45 44 0a 20 20 63 68 61 72 20 7a 53 65  ABLED.  char zSe
1d5f0 6c 4e 61 6d 65 5b 31 32 5d 3b 20 20 20 20 20 2f  lName[12];     /
1d600 2a 20 53 79 6d 62 6f 6c 69 63 20 6e 61 6d 65 20  * Symbolic name 
1d610 6f 66 20 74 68 69 73 20 53 45 4c 45 43 54 20 75  of this SELECT u
1d620 73 65 20 66 6f 72 20 64 65 62 75 67 67 69 6e 67  se for debugging
1d630 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 69 6e 74   */.#endif.  int
1d640 20 61 64 64 72 4f 70 65 6e 45 70 68 6d 5b 32 5d   addrOpenEphm[2]
1d650 3b 20 20 20 2f 2a 20 4f 50 5f 4f 70 65 6e 45 70  ;   /* OP_OpenEp
1d660 68 65 6d 20 6f 70 63 6f 64 65 73 20 72 65 6c 61  hem opcodes rela
1d670 74 65 64 20 74 6f 20 74 68 69 73 20 73 65 6c 65  ted to this sele
1d680 63 74 20 2a 2f 0a 20 20 53 72 63 4c 69 73 74 20  ct */.  SrcList 
1d690 2a 70 53 72 63 3b 20 20 20 20 20 20 20 20 20 2f  *pSrc;         /
1d6a0 2a 20 54 68 65 20 46 52 4f 4d 20 63 6c 61 75 73  * The FROM claus
1d6b0 65 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 57 68  e */.  Expr *pWh
1d6c0 65 72 65 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  ere;          /*
1d6d0 20 54 68 65 20 57 48 45 52 45 20 63 6c 61 75 73   The WHERE claus
1d6e0 65 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20  e */.  ExprList 
1d6f0 2a 70 47 72 6f 75 70 42 79 3b 20 20 20 20 2f 2a  *pGroupBy;    /*
1d700 20 54 68 65 20 47 52 4f 55 50 20 42 59 20 63 6c   The GROUP BY cl
1d710 61 75 73 65 20 2a 2f 0a 20 20 45 78 70 72 20 2a  ause */.  Expr *
1d720 70 48 61 76 69 6e 67 3b 20 20 20 20 20 20 20 20  pHaving;        
1d730 20 2f 2a 20 54 68 65 20 48 41 56 49 4e 47 20 63   /* The HAVING c
1d740 6c 61 75 73 65 20 2a 2f 0a 20 20 45 78 70 72 4c  lause */.  ExprL
1d750 69 73 74 20 2a 70 4f 72 64 65 72 42 79 3b 20 20  ist *pOrderBy;  
1d760 20 20 2f 2a 20 54 68 65 20 4f 52 44 45 52 20 42    /* The ORDER B
1d770 59 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 53 65  Y clause */.  Se
1d780 6c 65 63 74 20 2a 70 50 72 69 6f 72 3b 20 20 20  lect *pPrior;   
1d790 20 20 20 20 20 2f 2a 20 50 72 69 6f 72 20 73 65       /* Prior se
1d7a0 6c 65 63 74 20 69 6e 20 61 20 63 6f 6d 70 6f 75  lect in a compou
1d7b0 6e 64 20 73 65 6c 65 63 74 20 73 74 61 74 65 6d  nd select statem
1d7c0 65 6e 74 20 2a 2f 0a 20 20 53 65 6c 65 63 74 20  ent */.  Select 
1d7d0 2a 70 4e 65 78 74 3b 20 20 20 20 20 20 20 20 20  *pNext;         
1d7e0 2f 2a 20 4e 65 78 74 20 73 65 6c 65 63 74 20 74  /* Next select t
1d7f0 6f 20 74 68 65 20 6c 65 66 74 20 69 6e 20 61 20  o the left in a 
1d800 63 6f 6d 70 6f 75 6e 64 20 2a 2f 0a 20 20 45 78  compound */.  Ex
1d810 70 72 20 2a 70 4c 69 6d 69 74 3b 20 20 20 20 20  pr *pLimit;     
1d820 20 20 20 20 20 2f 2a 20 4c 49 4d 49 54 20 65 78       /* LIMIT ex
1d830 70 72 65 73 73 69 6f 6e 2e 20 4e 55 4c 4c 20 6d  pression. NULL m
1d840 65 61 6e 73 20 6e 6f 74 20 75 73 65 64 2e 20 2a  eans not used. *
1d850 2f 0a 20 20 57 69 74 68 20 2a 70 57 69 74 68 3b  /.  With *pWith;
1d860 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57 49             /* WI
1d870 54 48 20 63 6c 61 75 73 65 20 61 74 74 61 63 68  TH clause attach
1d880 65 64 20 74 6f 20 74 68 69 73 20 73 65 6c 65 63  ed to this selec
1d890 74 2e 20 4f 72 20 4e 55 4c 4c 2e 20 2a 2f 0a 23  t. Or NULL. */.#
1d8a0 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
1d8b0 49 54 5f 57 49 4e 44 4f 57 46 55 4e 43 0a 20 20  IT_WINDOWFUNC.  
1d8c0 57 69 6e 64 6f 77 20 2a 70 57 69 6e 3b 20 20 20  Window *pWin;   
1d8d0 20 20 20 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f         /* List o
1d8e0 66 20 77 69 6e 64 6f 77 20 66 75 6e 63 74 69 6f  f window functio
1d8f0 6e 73 20 2a 2f 0a 20 20 57 69 6e 64 6f 77 20 2a  ns */.  Window *
1d900 70 57 69 6e 44 65 66 6e 3b 20 20 20 20 20 20 2f  pWinDefn;      /
1d910 2a 20 4c 69 73 74 20 6f 66 20 6e 61 6d 65 64 20  * List of named 
1d920 77 69 6e 64 6f 77 20 64 65 66 69 6e 69 74 69 6f  window definitio
1d930 6e 73 20 2a 2f 0a 23 65 6e 64 69 66 0a 7d 3b 0a  ns */.#endif.};.
1d940 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 76  ./*.** Allowed v
1d950 61 6c 75 65 73 20 66 6f 72 20 53 65 6c 65 63 74  alues for Select
1d960 2e 73 65 6c 46 6c 61 67 73 2e 20 20 54 68 65 20  .selFlags.  The 
1d970 22 53 46 22 20 70 72 65 66 69 78 20 73 74 61 6e  "SF" prefix stan
1d980 64 73 20 66 6f 72 0a 2a 2a 20 22 53 65 6c 65 63  ds for.** "Selec
1d990 74 20 46 6c 61 67 22 2e 0a 2a 2a 0a 2a 2a 20 56  t Flag"..**.** V
1d9a0 61 6c 75 65 20 63 6f 6e 73 74 72 61 69 6e 74 73  alue constraints
1d9b0 20 28 61 6c 6c 20 63 68 65 63 6b 65 64 20 76 69   (all checked vi
1d9c0 61 20 61 73 73 65 72 74 28 29 29 0a 2a 2a 20 20  a assert()).**  
1d9d0 20 20 20 53 46 5f 48 61 73 41 67 67 20 20 20 20     SF_HasAgg    
1d9e0 20 3d 3d 20 4e 43 5f 48 61 73 41 67 67 0a 2a 2a   == NC_HasAgg.**
1d9f0 20 20 20 20 20 53 46 5f 4d 69 6e 4d 61 78 41 67       SF_MinMaxAg
1da00 67 20 20 3d 3d 20 4e 43 5f 4d 69 6e 4d 61 78 41  g  == NC_MinMaxA
1da10 67 67 20 20 20 20 20 3d 3d 20 53 51 4c 49 54 45  gg     == SQLITE
1da20 5f 46 55 4e 43 5f 4d 49 4e 4d 41 58 0a 2a 2a 20  _FUNC_MINMAX.** 
1da30 20 20 20 20 53 46 5f 46 69 78 65 64 4c 69 6d 69      SF_FixedLimi
1da40 74 20 3d 3d 20 57 48 45 52 45 5f 55 53 45 5f 4c  t == WHERE_USE_L
1da50 49 4d 49 54 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  IMIT.*/.#define 
1da60 53 46 5f 44 69 73 74 69 6e 63 74 20 20 20 20 20  SF_Distinct     
1da70 20 20 30 78 30 30 30 30 31 20 20 2f 2a 20 4f 75    0x00001  /* Ou
1da80 74 70 75 74 20 73 68 6f 75 6c 64 20 62 65 20 44  tput should be D
1da90 49 53 54 49 4e 43 54 20 2a 2f 0a 23 64 65 66 69  ISTINCT */.#defi
1daa0 6e 65 20 53 46 5f 41 6c 6c 20 20 20 20 20 20 20  ne SF_All       
1dab0 20 20 20 20 20 30 78 30 30 30 30 32 20 20 2f 2a       0x00002  /*
1dac0 20 49 6e 63 6c 75 64 65 73 20 74 68 65 20 41 4c   Includes the AL
1dad0 4c 20 6b 65 79 77 6f 72 64 20 2a 2f 0a 23 64 65  L keyword */.#de
1dae0 66 69 6e 65 20 53 46 5f 52 65 73 6f 6c 76 65 64  fine SF_Resolved
1daf0 20 20 20 20 20 20 20 30 78 30 30 30 30 34 20 20         0x00004  
1db00 2f 2a 20 49 64 65 6e 74 69 66 69 65 72 73 20 68  /* Identifiers h
1db10 61 76 65 20 62 65 65 6e 20 72 65 73 6f 6c 76 65  ave been resolve
1db20 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f  d */.#define SF_
1db30 41 67 67 72 65 67 61 74 65 20 20 20 20 20 20 30  Aggregate      0
1db40 78 30 30 30 30 38 20 20 2f 2a 20 43 6f 6e 74 61  x00008  /* Conta
1db50 69 6e 73 20 61 67 67 20 66 75 6e 63 74 69 6f 6e  ins agg function
1db60 73 20 6f 72 20 61 20 47 52 4f 55 50 20 42 59 20  s or a GROUP BY 
1db70 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 48 61  */.#define SF_Ha
1db80 73 41 67 67 20 20 20 20 20 20 20 20 20 30 78 30  sAgg         0x0
1db90 30 30 31 30 20 20 2f 2a 20 43 6f 6e 74 61 69 6e  0010  /* Contain
1dba0 73 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63  s aggregate func
1dbb0 74 69 6f 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65  tions */.#define
1dbc0 20 53 46 5f 55 73 65 73 45 70 68 65 6d 65 72 61   SF_UsesEphemera
1dbd0 6c 20 20 30 78 30 30 30 32 30 20 20 2f 2a 20 55  l  0x00020  /* U
1dbe0 73 65 73 20 74 68 65 20 4f 70 65 6e 45 70 68 65  ses the OpenEphe
1dbf0 6d 65 72 61 6c 20 6f 70 63 6f 64 65 20 2a 2f 0a  meral opcode */.
1dc00 23 64 65 66 69 6e 65 20 53 46 5f 45 78 70 61 6e  #define SF_Expan
1dc10 64 65 64 20 20 20 20 20 20 20 30 78 30 30 30 34  ded       0x0004
1dc20 30 20 20 2f 2a 20 73 71 6c 69 74 65 33 53 65 6c  0  /* sqlite3Sel
1dc30 65 63 74 45 78 70 61 6e 64 28 29 20 63 61 6c 6c  ectExpand() call
1dc40 65 64 20 6f 6e 20 74 68 69 73 20 2a 2f 0a 23 64  ed on this */.#d
1dc50 65 66 69 6e 65 20 53 46 5f 48 61 73 54 79 70 65  efine SF_HasType
1dc60 49 6e 66 6f 20 20 20 20 30 78 30 30 30 38 30 20  Info    0x00080 
1dc70 20 2f 2a 20 46 52 4f 4d 20 73 75 62 71 75 65 72   /* FROM subquer
1dc80 69 65 73 20 68 61 76 65 20 54 61 62 6c 65 20 6d  ies have Table m
1dc90 65 74 61 64 61 74 61 20 2a 2f 0a 23 64 65 66 69  etadata */.#defi
1dca0 6e 65 20 53 46 5f 43 6f 6d 70 6f 75 6e 64 20 20  ne SF_Compound  
1dcb0 20 20 20 20 20 30 78 30 30 31 30 30 20 20 2f 2a       0x00100  /*
1dcc0 20 50 61 72 74 20 6f 66 20 61 20 63 6f 6d 70 6f   Part of a compo
1dcd0 75 6e 64 20 71 75 65 72 79 20 2a 2f 0a 23 64 65  und query */.#de
1dce0 66 69 6e 65 20 53 46 5f 56 61 6c 75 65 73 20 20  fine SF_Values  
1dcf0 20 20 20 20 20 20 20 30 78 30 30 32 30 30 20 20         0x00200  
1dd00 2f 2a 20 53 79 6e 74 68 65 73 69 7a 65 64 20 66  /* Synthesized f
1dd10 72 6f 6d 20 56 41 4c 55 45 53 20 63 6c 61 75 73  rom VALUES claus
1dd20 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f  e */.#define SF_
1dd30 4d 75 6c 74 69 56 61 6c 75 65 20 20 20 20 20 30  MultiValue     0
1dd40 78 30 30 34 30 30 20 20 2f 2a 20 53 69 6e 67 6c  x00400  /* Singl
1dd50 65 20 56 41 4c 55 45 53 20 74 65 72 6d 20 77 69  e VALUES term wi
1dd60 74 68 20 6d 75 6c 74 69 70 6c 65 20 72 6f 77 73  th multiple rows
1dd70 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 4e   */.#define SF_N
1dd80 65 73 74 65 64 46 72 6f 6d 20 20 20 20 20 30 78  estedFrom     0x
1dd90 30 30 38 30 30 20 20 2f 2a 20 50 61 72 74 20 6f  00800  /* Part o
1dda0 66 20 61 20 70 61 72 65 6e 74 68 65 73 69 7a 65  f a parenthesize
1ddb0 64 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 2a 2f  d FROM clause */
1ddc0 0a 23 64 65 66 69 6e 65 20 53 46 5f 4d 69 6e 4d  .#define SF_MinM
1ddd0 61 78 41 67 67 20 20 20 20 20 20 30 78 30 31 30  axAgg      0x010
1dde0 30 30 20 20 2f 2a 20 41 67 67 72 65 67 61 74 65  00  /* Aggregate
1ddf0 20 63 6f 6e 74 61 69 6e 69 6e 67 20 6d 69 6e 28   containing min(
1de00 29 20 6f 72 20 6d 61 78 28 29 20 2a 2f 0a 23 64  ) or max() */.#d
1de10 65 66 69 6e 65 20 53 46 5f 52 65 63 75 72 73 69  efine SF_Recursi
1de20 76 65 20 20 20 20 20 20 30 78 30 32 30 30 30 20  ve      0x02000 
1de30 20 2f 2a 20 54 68 65 20 72 65 63 75 72 73 69 76   /* The recursiv
1de40 65 20 70 61 72 74 20 6f 66 20 61 20 72 65 63 75  e part of a recu
1de50 72 73 69 76 65 20 43 54 45 20 2a 2f 0a 23 64 65  rsive CTE */.#de
1de60 66 69 6e 65 20 53 46 5f 46 69 78 65 64 4c 69 6d  fine SF_FixedLim
1de70 69 74 20 20 20 20 20 30 78 30 34 30 30 30 20 20  it     0x04000  
1de80 2f 2a 20 6e 53 65 6c 65 63 74 52 6f 77 20 73 65  /* nSelectRow se
1de90 74 20 62 79 20 61 20 63 6f 6e 73 74 61 6e 74 20  t by a constant 
1dea0 4c 49 4d 49 54 20 2a 2f 0a 23 64 65 66 69 6e 65  LIMIT */.#define
1deb0 20 53 46 5f 4d 61 79 62 65 43 6f 6e 76 65 72 74   SF_MaybeConvert
1dec0 20 20 20 30 78 30 38 30 30 30 20 20 2f 2a 20 4e     0x08000  /* N
1ded0 65 65 64 20 63 6f 6e 76 65 72 74 43 6f 6d 70 6f  eed convertCompo
1dee0 75 6e 64 53 65 6c 65 63 74 54 6f 53 75 62 71 75  undSelectToSubqu
1def0 65 72 79 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65  ery() */.#define
1df00 20 53 46 5f 43 6f 6e 76 65 72 74 65 64 20 20 20   SF_Converted   
1df10 20 20 20 30 78 31 30 30 30 30 20 20 2f 2a 20 42     0x10000  /* B
1df20 79 20 63 6f 6e 76 65 72 74 43 6f 6d 70 6f 75 6e  y convertCompoun
1df30 64 53 65 6c 65 63 74 54 6f 53 75 62 71 75 65 72  dSelectToSubquer
1df40 79 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  y() */.#define S
1df50 46 5f 49 6e 63 6c 75 64 65 48 69 64 64 65 6e 20  F_IncludeHidden 
1df60 20 30 78 32 30 30 30 30 20 20 2f 2a 20 49 6e 63   0x20000  /* Inc
1df70 6c 75 64 65 20 68 69 64 64 65 6e 20 63 6f 6c 75  lude hidden colu
1df80 6d 6e 73 20 69 6e 20 6f 75 74 70 75 74 20 2a 2f  mns in output */
1df90 0a 23 64 65 66 69 6e 65 20 53 46 5f 43 6f 6d 70  .#define SF_Comp
1dfa0 6c 65 78 52 65 73 75 6c 74 20 20 30 78 34 30 30  lexResult  0x400
1dfb0 30 30 20 20 2f 2a 20 52 65 73 75 6c 74 20 63 6f  00  /* Result co
1dfc0 6e 74 61 69 6e 73 20 73 75 62 71 75 65 72 79 20  ntains subquery 
1dfd0 6f 72 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 0a  or function */..
1dfe0 2f 2a 0a 2a 2a 20 54 68 65 20 72 65 73 75 6c 74  /*.** The result
1dff0 73 20 6f 66 20 61 20 53 45 4c 45 43 54 20 63 61  s of a SELECT ca
1e000 6e 20 62 65 20 64 69 73 74 72 69 62 75 74 65 64  n be distributed
1e010 20 69 6e 20 73 65 76 65 72 61 6c 20 77 61 79 73   in several ways
1e020 2c 20 61 73 20 64 65 66 69 6e 65 64 0a 2a 2a 20  , as defined.** 
1e030 62 79 20 6f 6e 65 20 6f 66 20 74 68 65 20 66 6f  by one of the fo
1e040 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 73 2e 20  llowing macros. 
1e050 20 54 68 65 20 22 53 52 54 22 20 70 72 65 66 69   The "SRT" prefi
1e060 78 20 6d 65 61 6e 73 20 22 53 45 4c 45 43 54 20  x means "SELECT 
1e070 52 65 73 75 6c 74 0a 2a 2a 20 54 79 70 65 22 2e  Result.** Type".
1e080 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 55  .**.**     SRT_U
1e090 6e 69 6f 6e 20 20 20 20 20 20 20 53 74 6f 72 65  nion       Store
1e0a0 20 72 65 73 75 6c 74 73 20 61 73 20 61 20 6b 65   results as a ke
1e0b0 79 20 69 6e 20 61 20 74 65 6d 70 6f 72 61 72 79  y in a temporary
1e0c0 20 69 6e 64 65 78 0a 2a 2a 20 20 20 20 20 20 20   index.**       
1e0d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 64                id
1e0e0 65 6e 74 69 66 69 65 64 20 62 79 20 70 44 65 73  entified by pDes
1e0f0 74 2d 3e 69 53 44 50 61 72 6d 2e 0a 2a 2a 0a 2a  t->iSDParm..**.*
1e100 2a 20 20 20 20 20 53 52 54 5f 45 78 63 65 70 74  *     SRT_Except
1e110 20 20 20 20 20 20 52 65 6d 6f 76 65 20 72 65 73        Remove res
1e120 75 6c 74 73 20 66 72 6f 6d 20 74 68 65 20 74 65  ults from the te
1e130 6d 70 6f 72 61 72 79 20 69 6e 64 65 78 20 70 44  mporary index pD
1e140 65 73 74 2d 3e 69 53 44 50 61 72 6d 2e 0a 2a 2a  est->iSDParm..**
1e150 0a 2a 2a 20 20 20 20 20 53 52 54 5f 45 78 69 73  .**     SRT_Exis
1e160 74 73 20 20 20 20 20 20 53 74 6f 72 65 20 61 20  ts      Store a 
1e170 31 20 69 6e 20 6d 65 6d 6f 72 79 20 63 65 6c 6c  1 in memory cell
1e180 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 20   pDest->iSDParm 
1e190 69 66 20 74 68 65 20 72 65 73 75 6c 74 0a 2a 2a  if the result.**
1e1a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e1b0 20 20 20 20 20 73 65 74 20 69 73 20 6e 6f 74 20       set is not 
1e1c0 65 6d 70 74 79 2e 0a 2a 2a 0a 2a 2a 20 20 20 20  empty..**.**    
1e1d0 20 53 52 54 5f 44 69 73 63 61 72 64 20 20 20 20   SRT_Discard    
1e1e0 20 54 68 72 6f 77 20 74 68 65 20 72 65 73 75 6c   Throw the resul
1e1f0 74 73 20 61 77 61 79 2e 20 20 54 68 69 73 20 69  ts away.  This i
1e200 73 20 75 73 65 64 20 62 79 20 53 45 4c 45 43 54  s used by SELECT
1e210 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
1e220 20 20 20 20 20 20 20 20 73 74 61 74 65 6d 65 6e          statemen
1e230 74 73 20 77 69 74 68 69 6e 20 74 72 69 67 67 65  ts within trigge
1e240 72 73 20 77 68 6f 73 65 20 6f 6e 6c 79 20 70 75  rs whose only pu
1e250 72 70 6f 73 65 20 69 73 0a 2a 2a 20 20 20 20 20  rpose is.**     
1e260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e270 74 68 65 20 73 69 64 65 2d 65 66 66 65 63 74 73  the side-effects
1e280 20 6f 66 20 66 75 6e 63 74 69 6f 6e 73 2e 0a 2a   of functions..*
1e290 2a 0a 2a 2a 20 41 6c 6c 20 6f 66 20 74 68 65 20  *.** All of the 
1e2a0 61 62 6f 76 65 20 61 72 65 20 66 72 65 65 20 74  above are free t
1e2b0 6f 20 69 67 6e 6f 72 65 20 74 68 65 69 72 20 4f  o ignore their O
1e2c0 52 44 45 52 20 42 59 20 63 6c 61 75 73 65 2e 20  RDER BY clause. 
1e2d0 54 68 6f 73 65 20 74 68 61 74 0a 2a 2a 20 66 6f  Those that.** fo
1e2e0 6c 6c 6f 77 20 6d 75 73 74 20 68 6f 6e 6f 72 20  llow must honor 
1e2f0 74 68 65 20 4f 52 44 45 52 20 42 59 20 63 6c 61  the ORDER BY cla
1e300 75 73 65 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53  use..**.**     S
1e310 52 54 5f 4f 75 74 70 75 74 20 20 20 20 20 20 47  RT_Output      G
1e320 65 6e 65 72 61 74 65 20 61 20 72 6f 77 20 6f 66  enerate a row of
1e330 20 6f 75 74 70 75 74 20 28 75 73 69 6e 67 20 74   output (using t
1e340 68 65 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 0a  he OP_ResultRow.
1e350 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
1e360 20 20 20 20 20 20 20 6f 70 63 6f 64 65 29 20 66         opcode) f
1e370 6f 72 20 65 61 63 68 20 72 6f 77 20 69 6e 20 74  or each row in t
1e380 68 65 20 72 65 73 75 6c 74 20 73 65 74 2e 0a 2a  he result set..*
1e390 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 4d 65 6d  *.**     SRT_Mem
1e3a0 20 20 20 20 20 20 20 20 20 4f 6e 6c 79 20 76 61           Only va
1e3b0 6c 69 64 20 69 66 20 74 68 65 20 72 65 73 75 6c  lid if the resul
1e3c0 74 20 69 73 20 61 20 73 69 6e 67 6c 65 20 63 6f  t is a single co
1e3d0 6c 75 6d 6e 2e 0a 2a 2a 20 20 20 20 20 20 20 20  lumn..**        
1e3e0 20 20 20 20 20 20 20 20 20 20 20 20 20 53 74 6f               Sto
1e3f0 72 65 20 74 68 65 20 66 69 72 73 74 20 63 6f 6c  re the first col
1e400 75 6d 6e 20 6f 66 20 74 68 65 20 66 69 72 73 74  umn of the first
1e410 20 72 65 73 75 6c 74 20 72 6f 77 0a 2a 2a 20 20   result row.**  
1e420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e430 20 20 20 69 6e 20 72 65 67 69 73 74 65 72 20 70     in register p
1e440 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 20 74 68  Dest->iSDParm th
1e450 65 6e 20 61 62 61 6e 64 6f 6e 20 74 68 65 20 72  en abandon the r
1e460 65 73 74 0a 2a 2a 20 20 20 20 20 20 20 20 20 20  est.**          
1e470 20 20 20 20 20 20 20 20 20 20 20 6f 66 20 74 68             of th
1e480 65 20 71 75 65 72 79 2e 20 20 54 68 69 73 20 64  e query.  This d
1e490 65 73 74 69 6e 61 74 69 6f 6e 20 69 6d 70 6c 69  estination impli
1e4a0 65 73 20 22 4c 49 4d 49 54 20 31 22 2e 0a 2a 2a  es "LIMIT 1"..**
1e4b0 0a 2a 2a 20 20 20 20 20 53 52 54 5f 53 65 74 20  .**     SRT_Set 
1e4c0 20 20 20 20 20 20 20 20 54 68 65 20 72 65 73 75          The resu
1e4d0 6c 74 20 6d 75 73 74 20 62 65 20 61 20 73 69 6e  lt must be a sin
1e4e0 67 6c 65 20 63 6f 6c 75 6d 6e 2e 20 20 53 74 6f  gle column.  Sto
1e4f0 72 65 20 65 61 63 68 0a 2a 2a 20 20 20 20 20 20  re each.**      
1e500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
1e510 6f 77 20 6f 66 20 72 65 73 75 6c 74 20 61 73 20  ow of result as 
1e520 74 68 65 20 6b 65 79 20 69 6e 20 74 61 62 6c 65  the key in table
1e530 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 2e   pDest->iSDParm.
1e540 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
1e550 20 20 20 20 20 20 20 20 41 70 70 6c 79 20 74 68          Apply th
1e560 65 20 61 66 66 69 6e 69 74 79 20 70 44 65 73 74  e affinity pDest
1e570 2d 3e 61 66 66 53 64 73 74 20 62 65 66 6f 72 65  ->affSdst before
1e580 20 73 74 6f 72 69 6e 67 0a 2a 2a 20 20 20 20 20   storing.**     
1e590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e5a0 72 65 73 75 6c 74 73 2e 20 20 55 73 65 64 20 74  results.  Used t
1e5b0 6f 20 69 6d 70 6c 65 6d 65 6e 74 20 22 49 4e 20  o implement "IN 
1e5c0 28 53 45 4c 45 43 54 20 2e 2e 2e 29 22 2e 0a 2a  (SELECT ...)"..*
1e5d0 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 45 70 68  *.**     SRT_Eph
1e5e0 65 6d 54 61 62 20 20 20 20 43 72 65 61 74 65 20  emTab    Create 
1e5f0 61 6e 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62  an temporary tab
1e600 6c 65 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72  le pDest->iSDPar
1e610 6d 20 61 6e 64 20 73 74 6f 72 65 0a 2a 2a 20 20  m and store.**  
1e620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e630 20 20 20 74 68 65 20 72 65 73 75 6c 74 20 74 68     the result th
1e640 65 72 65 2e 20 54 68 65 20 63 75 72 73 6f 72 20  ere. The cursor 
1e650 69 73 20 6c 65 66 74 20 6f 70 65 6e 20 61 66 74  is left open aft
1e660 65 72 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  er.**           
1e670 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
1e680 69 6e 67 2e 20 20 54 68 69 73 20 69 73 20 6c 69  ing.  This is li
1e690 6b 65 20 53 52 54 5f 54 61 62 6c 65 20 65 78 63  ke SRT_Table exc
1e6a0 65 70 74 20 74 68 61 74 0a 2a 2a 20 20 20 20 20  ept that.**     
1e6b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e6c0 74 68 69 73 20 64 65 73 74 69 6e 61 74 69 6f 6e  this destination
1e6d0 20 75 73 65 73 20 4f 50 5f 4f 70 65 6e 45 70 68   uses OP_OpenEph
1e6e0 65 6d 65 72 61 6c 20 74 6f 20 63 72 65 61 74 65  emeral to create
1e6f0 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
1e700 20 20 20 20 20 20 20 20 74 68 65 20 74 61 62 6c          the tabl
1e710 65 20 66 69 72 73 74 2e 0a 2a 2a 0a 2a 2a 20 20  e first..**.**  
1e720 20 20 20 53 52 54 5f 43 6f 72 6f 75 74 69 6e 65     SRT_Coroutine
1e730 20 20 20 47 65 6e 65 72 61 74 65 20 61 20 63 6f     Generate a co
1e740 2d 72 6f 75 74 69 6e 65 20 74 68 61 74 20 72 65  -routine that re
1e750 74 75 72 6e 73 20 61 20 6e 65 77 20 72 6f 77 20  turns a new row 
1e760 6f 66 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  of.**           
1e770 20 20 20 20 20 20 20 20 20 20 72 65 73 75 6c 74            result
1e780 73 20 65 61 63 68 20 74 69 6d 65 20 69 74 20 69  s each time it i
1e790 73 20 69 6e 76 6f 6b 65 64 2e 20 20 54 68 65 20  s invoked.  The 
1e7a0 65 6e 74 72 79 20 70 6f 69 6e 74 0a 2a 2a 20 20  entry point.**  
1e7b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e7c0 20 20 20 6f 66 20 74 68 65 20 63 6f 2d 72 6f 75     of the co-rou
1e7d0 74 69 6e 65 20 69 73 20 73 74 6f 72 65 64 20 69  tine is stored i
1e7e0 6e 20 72 65 67 69 73 74 65 72 20 70 44 65 73 74  n register pDest
1e7f0 2d 3e 69 53 44 50 61 72 6d 0a 2a 2a 20 20 20 20  ->iSDParm.**    
1e800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e810 20 61 6e 64 20 74 68 65 20 72 65 73 75 6c 74 20   and the result 
1e820 72 6f 77 20 69 73 20 73 74 6f 72 65 64 20 69 6e  row is stored in
1e830 20 70 44 65 73 74 2d 3e 6e 44 65 73 74 20 72 65   pDest->nDest re
1e840 67 69 73 74 65 72 73 0a 2a 2a 20 20 20 20 20 20  gisters.**      
1e850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
1e860 74 61 72 74 69 6e 67 20 77 69 74 68 20 70 44 65  tarting with pDe
1e870 73 74 2d 3e 69 53 64 73 74 2e 0a 2a 2a 0a 2a 2a  st->iSdst..**.**
1e880 20 20 20 20 20 53 52 54 5f 54 61 62 6c 65 20 20       SRT_Table  
1e890 20 20 20 20 20 53 74 6f 72 65 20 72 65 73 75 6c       Store resul
1e8a0 74 73 20 69 6e 20 74 65 6d 70 6f 72 61 72 79 20  ts in temporary 
1e8b0 74 61 62 6c 65 20 70 44 65 73 74 2d 3e 69 53 44  table pDest->iSD
1e8c0 50 61 72 6d 2e 0a 2a 2a 20 20 20 20 20 53 52 54  Parm..**     SRT
1e8d0 5f 46 69 66 6f 20 20 20 20 20 20 20 20 54 68 69  _Fifo        Thi
1e8e0 73 20 69 73 20 6c 69 6b 65 20 53 52 54 5f 45 70  s is like SRT_Ep
1e8f0 68 65 6d 54 61 62 20 65 78 63 65 70 74 20 74 68  hemTab except th
1e900 61 74 20 74 68 65 20 74 61 62 6c 65 0a 2a 2a 20  at the table.** 
1e910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e920 20 20 20 20 69 73 20 61 73 73 75 6d 65 64 20 74      is assumed t
1e930 6f 20 61 6c 72 65 61 64 79 20 62 65 20 6f 70 65  o already be ope
1e940 6e 2e 20 20 53 52 54 5f 46 69 66 6f 20 68 61 73  n.  SRT_Fifo has
1e950 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
1e960 20 20 20 20 20 20 20 20 74 68 65 20 61 64 64 69          the addi
1e970 74 69 6f 6e 61 6c 20 70 72 6f 70 65 72 74 79 20  tional property 
1e980 6f 66 20 62 65 69 6e 67 20 61 62 6c 65 20 74 6f  of being able to
1e990 20 69 67 6e 6f 72 65 0a 2a 2a 20 20 20 20 20 20   ignore.**      
1e9a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
1e9b0 68 65 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75  he ORDER BY clau
1e9c0 73 65 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52  se..**.**     SR
1e9d0 54 5f 44 69 73 74 46 69 66 6f 20 20 20 20 53 74  T_DistFifo    St
1e9e0 6f 72 65 20 72 65 73 75 6c 74 73 20 69 6e 20 61  ore results in a
1e9f0 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65   temporary table
1ea00 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 2e   pDest->iSDParm.
1ea10 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
1ea20 20 20 20 20 20 20 20 20 42 75 74 20 61 6c 73 6f          But also
1ea30 20 75 73 65 20 74 65 6d 70 6f 72 61 72 79 20 74   use temporary t
1ea40 61 62 6c 65 20 70 44 65 73 74 2d 3e 69 53 44 50  able pDest->iSDP
1ea50 61 72 6d 2b 31 20 61 73 0a 2a 2a 20 20 20 20 20  arm+1 as.**     
1ea60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ea70 61 20 72 65 63 6f 72 64 20 6f 66 20 61 6c 6c 20  a record of all 
1ea80 70 72 69 6f 72 20 72 65 73 75 6c 74 73 20 61 6e  prior results an
1ea90 64 20 69 67 6e 6f 72 65 20 61 6e 79 20 64 75 70  d ignore any dup
1eaa0 6c 69 63 61 74 65 0a 2a 2a 20 20 20 20 20 20 20  licate.**       
1eab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f                ro
1eac0 77 73 2e 20 20 4e 61 6d 65 20 6d 65 61 6e 73 3a  ws.  Name means:
1ead0 20 20 22 44 69 73 74 69 6e 63 74 20 46 69 66 6f    "Distinct Fifo
1eae0 22 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54  "..**.**     SRT
1eaf0 5f 51 75 65 75 65 20 20 20 20 20 20 20 53 74 6f  _Queue       Sto
1eb00 72 65 20 72 65 73 75 6c 74 73 20 69 6e 20 70 72  re results in pr
1eb10 69 6f 72 69 74 79 20 71 75 65 75 65 20 70 44 65  iority queue pDe
1eb20 73 74 2d 3e 69 53 44 50 61 72 6d 20 28 72 65 61  st->iSDParm (rea
1eb30 6c 6c 79 0a 2a 2a 20 20 20 20 20 20 20 20 20 20  lly.**          
1eb40 20 20 20 20 20 20 20 20 20 20 20 61 6e 20 69 6e             an in
1eb50 64 65 78 29 2e 20 20 41 70 70 65 6e 64 20 61 20  dex).  Append a 
1eb60 73 65 71 75 65 6e 63 65 20 6e 75 6d 62 65 72 20  sequence number 
1eb70 73 6f 20 74 68 61 74 20 61 6c 6c 20 65 6e 74 72  so that all entr
1eb80 69 65 73 0a 2a 2a 20 20 20 20 20 20 20 20 20 20  ies.**          
1eb90 20 20 20 20 20 20 20 20 20 20 20 61 72 65 20 64             are d
1eba0 69 73 74 69 6e 63 74 2e 0a 2a 2a 0a 2a 2a 20 20  istinct..**.**  
1ebb0 20 20 20 53 52 54 5f 44 69 73 74 51 75 65 75 65     SRT_DistQueue
1ebc0 20 20 20 53 74 6f 72 65 20 72 65 73 75 6c 74 73     Store results
1ebd0 20 69 6e 20 70 72 69 6f 72 69 74 79 20 71 75 65   in priority que
1ebe0 75 65 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72  ue pDest->iSDPar
1ebf0 6d 20 6f 6e 6c 79 20 69 66 0a 2a 2a 20 20 20 20  m only if.**    
1ec00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ec10 20 74 68 65 20 73 61 6d 65 20 72 65 63 6f 72 64   the same record
1ec20 20 68 61 73 20 6e 65 76 65 72 20 62 65 65 6e 20   has never been 
1ec30 73 74 6f 72 65 64 20 62 65 66 6f 72 65 2e 20 20  stored before.  
1ec40 54 68 65 0a 2a 2a 20 20 20 20 20 20 20 20 20 20  The.**          
1ec50 20 20 20 20 20 20 20 20 20 20 20 69 6e 64 65 78             index
1ec60 20 61 74 20 70 44 65 73 74 2d 3e 69 53 44 50 61   at pDest->iSDPa
1ec70 72 6d 2b 31 20 68 6f 6c 64 20 61 6c 6c 20 70 72  rm+1 hold all pr
1ec80 69 6f 72 20 73 74 6f 72 65 73 2e 0a 2a 2f 0a 23  ior stores..*/.#
1ec90 64 65 66 69 6e 65 20 53 52 54 5f 55 6e 69 6f 6e  define SRT_Union
1eca0 20 20 20 20 20 20 20 20 31 20 20 2f 2a 20 53 74          1  /* St
1ecb0 6f 72 65 20 72 65 73 75 6c 74 20 61 73 20 6b 65  ore result as ke
1ecc0 79 73 20 69 6e 20 61 6e 20 69 6e 64 65 78 20 2a  ys in an index *
1ecd0 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 45 78  /.#define SRT_Ex
1ece0 63 65 70 74 20 20 20 20 20 20 20 32 20 20 2f 2a  cept       2  /*
1ecf0 20 52 65 6d 6f 76 65 20 72 65 73 75 6c 74 20 66   Remove result f
1ed00 72 6f 6d 20 61 20 55 4e 49 4f 4e 20 69 6e 64 65  rom a UNION inde
1ed10 78 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54  x */.#define SRT
1ed20 5f 45 78 69 73 74 73 20 20 20 20 20 20 20 33 20  _Exists       3 
1ed30 20 2f 2a 20 53 74 6f 72 65 20 31 20 69 66 20 74   /* Store 1 if t
1ed40 68 65 20 72 65 73 75 6c 74 20 69 73 20 6e 6f 74  he result is not
1ed50 20 65 6d 70 74 79 20 2a 2f 0a 23 64 65 66 69 6e   empty */.#defin
1ed60 65 20 53 52 54 5f 44 69 73 63 61 72 64 20 20 20  e SRT_Discard   
1ed70 20 20 20 34 20 20 2f 2a 20 44 6f 20 6e 6f 74 20     4  /* Do not 
1ed80 73 61 76 65 20 74 68 65 20 72 65 73 75 6c 74 73  save the results
1ed90 20 61 6e 79 77 68 65 72 65 20 2a 2f 0a 23 64 65   anywhere */.#de
1eda0 66 69 6e 65 20 53 52 54 5f 46 69 66 6f 20 20 20  fine SRT_Fifo   
1edb0 20 20 20 20 20 20 35 20 20 2f 2a 20 53 74 6f 72        5  /* Stor
1edc0 65 20 72 65 73 75 6c 74 20 61 73 20 64 61 74 61  e result as data
1edd0 20 77 69 74 68 20 61 6e 20 61 75 74 6f 6d 61 74   with an automat
1ede0 69 63 20 72 6f 77 69 64 20 2a 2f 0a 23 64 65 66  ic rowid */.#def
1edf0 69 6e 65 20 53 52 54 5f 44 69 73 74 46 69 66 6f  ine SRT_DistFifo
1ee00 20 20 20 20 20 36 20 20 2f 2a 20 4c 69 6b 65 20       6  /* Like 
1ee10 53 52 54 5f 46 69 66 6f 2c 20 62 75 74 20 75 6e  SRT_Fifo, but un
1ee20 69 71 75 65 20 72 65 73 75 6c 74 73 20 6f 6e 6c  ique results onl
1ee30 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54  y */.#define SRT
1ee40 5f 51 75 65 75 65 20 20 20 20 20 20 20 20 37 20  _Queue        7 
1ee50 20 2f 2a 20 53 74 6f 72 65 20 72 65 73 75 6c 74   /* Store result
1ee60 20 69 6e 20 61 6e 20 71 75 65 75 65 20 2a 2f 0a   in an queue */.
1ee70 23 64 65 66 69 6e 65 20 53 52 54 5f 44 69 73 74  #define SRT_Dist
1ee80 51 75 65 75 65 20 20 20 20 38 20 20 2f 2a 20 4c  Queue    8  /* L
1ee90 69 6b 65 20 53 52 54 5f 51 75 65 75 65 2c 20 62  ike SRT_Queue, b
1eea0 75 74 20 75 6e 69 71 75 65 20 72 65 73 75 6c 74  ut unique result
1eeb0 73 20 6f 6e 6c 79 20 2a 2f 0a 0a 2f 2a 20 54 68  s only */../* Th
1eec0 65 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73  e ORDER BY claus
1eed0 65 20 69 73 20 69 67 6e 6f 72 65 64 20 66 6f 72  e is ignored for
1eee0 20 61 6c 6c 20 6f 66 20 74 68 65 20 61 62 6f 76   all of the abov
1eef0 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49 67 6e  e */.#define Ign
1ef00 6f 72 61 62 6c 65 4f 72 64 65 72 62 79 28 58 29  orableOrderby(X)
1ef10 20 28 28 58 2d 3e 65 44 65 73 74 29 3c 3d 53 52   ((X->eDest)<=SR
1ef20 54 5f 44 69 73 74 51 75 65 75 65 29 0a 0a 23 64  T_DistQueue)..#d
1ef30 65 66 69 6e 65 20 53 52 54 5f 4f 75 74 70 75 74  efine SRT_Output
1ef40 20 20 20 20 20 20 20 39 20 20 2f 2a 20 4f 75 74         9  /* Out
1ef50 70 75 74 20 65 61 63 68 20 72 6f 77 20 6f 66 20  put each row of 
1ef60 72 65 73 75 6c 74 20 2a 2f 0a 23 64 65 66 69 6e  result */.#defin
1ef70 65 20 53 52 54 5f 4d 65 6d 20 20 20 20 20 20 20  e SRT_Mem       
1ef80 20 20 31 30 20 20 2f 2a 20 53 74 6f 72 65 20 72    10  /* Store r
1ef90 65 73 75 6c 74 20 69 6e 20 61 20 6d 65 6d 6f 72  esult in a memor
1efa0 79 20 63 65 6c 6c 20 2a 2f 0a 23 64 65 66 69 6e  y cell */.#defin
1efb0 65 20 53 52 54 5f 53 65 74 20 20 20 20 20 20 20  e SRT_Set       
1efc0 20 20 31 31 20 20 2f 2a 20 53 74 6f 72 65 20 72    11  /* Store r
1efd0 65 73 75 6c 74 73 20 61 73 20 6b 65 79 73 20 69  esults as keys i
1efe0 6e 20 61 6e 20 69 6e 64 65 78 20 2a 2f 0a 23 64  n an index */.#d
1eff0 65 66 69 6e 65 20 53 52 54 5f 45 70 68 65 6d 54  efine SRT_EphemT
1f000 61 62 20 20 20 20 31 32 20 20 2f 2a 20 43 72 65  ab    12  /* Cre
1f010 61 74 65 20 74 72 61 6e 73 69 65 6e 74 20 74 61  ate transient ta
1f020 62 20 61 6e 64 20 73 74 6f 72 65 20 6c 69 6b 65  b and store like
1f030 20 53 52 54 5f 54 61 62 6c 65 20 2a 2f 0a 23 64   SRT_Table */.#d
1f040 65 66 69 6e 65 20 53 52 54 5f 43 6f 72 6f 75 74  efine SRT_Corout
1f050 69 6e 65 20 20 20 31 33 20 20 2f 2a 20 47 65 6e  ine   13  /* Gen
1f060 65 72 61 74 65 20 61 20 73 69 6e 67 6c 65 20 72  erate a single r
1f070 6f 77 20 6f 66 20 72 65 73 75 6c 74 20 2a 2f 0a  ow of result */.
1f080 23 64 65 66 69 6e 65 20 53 52 54 5f 54 61 62 6c  #define SRT_Tabl
1f090 65 20 20 20 20 20 20 20 31 34 20 20 2f 2a 20 53  e       14  /* S
1f0a0 74 6f 72 65 20 72 65 73 75 6c 74 20 61 73 20 64  tore result as d
1f0b0 61 74 61 20 77 69 74 68 20 61 6e 20 61 75 74 6f  ata with an auto
1f0c0 6d 61 74 69 63 20 72 6f 77 69 64 20 2a 2f 0a 0a  matic rowid */..
1f0d0 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63  /*.** An instanc
1f0e0 65 20 6f 66 20 74 68 69 73 20 6f 62 6a 65 63 74  e of this object
1f0f0 20 64 65 73 63 72 69 62 65 73 20 77 68 65 72 65   describes where
1f100 20 74 6f 20 70 75 74 20 6f 66 20 74 68 65 20 72   to put of the r
1f110 65 73 75 6c 74 73 20 6f 66 0a 2a 2a 20 61 20 53  esults of.** a S
1f120 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e  ELECT statement.
1f130 0a 2a 2f 0a 73 74 72 75 63 74 20 53 65 6c 65 63  .*/.struct Selec
1f140 74 44 65 73 74 20 7b 0a 20 20 75 38 20 65 44 65  tDest {.  u8 eDe
1f150 73 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  st;            /
1f160 2a 20 48 6f 77 20 74 6f 20 64 69 73 70 6f 73 65  * How to dispose
1f170 20 6f 66 20 74 68 65 20 72 65 73 75 6c 74 73 2e   of the results.
1f180 20 20 4f 6e 20 6f 66 20 53 52 54 5f 2a 20 61 62    On of SRT_* ab
1f190 6f 76 65 2e 20 2a 2f 0a 20 20 69 6e 74 20 69 53  ove. */.  int iS
1f1a0 44 50 61 72 6d 3b 20 20 20 20 20 20 20 20 20 2f  DParm;         /
1f1b0 2a 20 41 20 70 61 72 61 6d 65 74 65 72 20 75 73  * A parameter us
1f1c0 65 64 20 62 79 20 74 68 65 20 65 44 65 73 74 20  ed by the eDest 
1f1d0 64 69 73 70 6f 73 61 6c 20 6d 65 74 68 6f 64 20  disposal method 
1f1e0 2a 2f 0a 20 20 69 6e 74 20 69 53 64 73 74 3b 20  */.  int iSdst; 
1f1f0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 42 61 73            /* Bas
1f200 65 20 72 65 67 69 73 74 65 72 20 77 68 65 72 65  e register where
1f210 20 72 65 73 75 6c 74 73 20 61 72 65 20 77 72 69   results are wri
1f220 74 74 65 6e 20 2a 2f 0a 20 20 69 6e 74 20 6e 53  tten */.  int nS
1f230 64 73 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f  dst;           /
1f240 2a 20 4e 75 6d 62 65 72 20 6f 66 20 72 65 67 69  * Number of regi
1f250 73 74 65 72 73 20 61 6c 6c 6f 63 61 74 65 64 20  sters allocated 
1f260 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 41 66 66 53  */.  char *zAffS
1f270 64 73 74 3b 20 20 20 20 20 20 2f 2a 20 41 66 66  dst;      /* Aff
1f280 69 6e 69 74 79 20 75 73 65 64 20 77 68 65 6e 20  inity used when 
1f290 65 44 65 73 74 3d 3d 53 52 54 5f 53 65 74 20 2a  eDest==SRT_Set *
1f2a0 2f 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70 4f  /.  ExprList *pO
1f2b0 72 64 65 72 42 79 3b 20 20 2f 2a 20 4b 65 79 20  rderBy;  /* Key 
1f2c0 63 6f 6c 75 6d 6e 73 20 66 6f 72 20 53 52 54 5f  columns for SRT_
1f2d0 51 75 65 75 65 20 61 6e 64 20 53 52 54 5f 44 69  Queue and SRT_Di
1f2e0 73 74 51 75 65 75 65 20 2a 2f 0a 7d 3b 0a 0a 2f  stQueue */.};../
1f2f0 2a 0a 2a 2a 20 44 75 72 69 6e 67 20 63 6f 64 65  *.** During code
1f300 20 67 65 6e 65 72 61 74 69 6f 6e 20 6f 66 20 73   generation of s
1f310 74 61 74 65 6d 65 6e 74 73 20 74 68 61 74 20 64  tatements that d
1f320 6f 20 69 6e 73 65 72 74 73 20 69 6e 74 6f 20 41  o inserts into A
1f330 55 54 4f 49 4e 43 52 45 4d 45 4e 54 0a 2a 2a 20  UTOINCREMENT.** 
1f340 74 61 62 6c 65 73 2c 20 74 68 65 20 66 6f 6c 6c  tables, the foll
1f350 6f 77 69 6e 67 20 69 6e 66 6f 72 6d 61 74 69 6f  owing informatio
1f360 6e 20 69 73 20 61 74 74 61 63 68 65 64 20 74 6f  n is attached to
1f370 20 74 68 65 20 54 61 62 6c 65 2e 75 2e 61 75 74   the Table.u.aut
1f380 6f 49 6e 63 2e 70 0a 2a 2a 20 70 6f 69 6e 74 65  oInc.p.** pointe
1f390 72 20 6f 66 20 65 61 63 68 20 61 75 74 6f 69 6e  r of each autoin
1f3a0 63 72 65 6d 65 6e 74 20 74 61 62 6c 65 20 74 6f  crement table to
1f3b0 20 72 65 63 6f 72 64 20 73 6f 6d 65 20 73 69 64   record some sid
1f3c0 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 74 68  e information th
1f3d0 61 74 0a 2a 2a 20 74 68 65 20 63 6f 64 65 20 67  at.** the code g
1f3e0 65 6e 65 72 61 74 6f 72 20 6e 65 65 64 73 2e 20  enerator needs. 
1f3f0 20 57 65 20 68 61 76 65 20 74 6f 20 6b 65 65 70   We have to keep
1f400 20 70 65 72 2d 74 61 62 6c 65 20 61 75 74 6f 69   per-table autoi
1f410 6e 63 72 65 6d 65 6e 74 0a 2a 2a 20 69 6e 66 6f  ncrement.** info
1f420 72 6d 61 74 69 6f 6e 20 69 6e 20 63 61 73 65 20  rmation in case 
1f430 69 6e 73 65 72 74 73 20 61 72 65 20 64 6f 6e 65  inserts are done
1f440 20 77 69 74 68 69 6e 20 74 72 69 67 67 65 72 73   within triggers
1f450 2e 20 20 54 72 69 67 67 65 72 73 20 64 6f 20 6e  .  Triggers do n
1f460 6f 74 0a 2a 2a 20 6e 6f 72 6d 61 6c 6c 79 20 63  ot.** normally c
1f470 6f 6f 72 64 69 6e 61 74 65 20 74 68 65 69 72 20  oordinate their 
1f480 61 63 74 69 76 69 74 69 65 73 2c 20 62 75 74 20  activities, but 
1f490 77 65 20 64 6f 20 6e 65 65 64 20 74 6f 20 63 6f  we do need to co
1f4a0 6f 72 64 69 6e 61 74 65 20 74 68 65 0a 2a 2a 20  ordinate the.** 
1f4b0 6c 6f 61 64 69 6e 67 20 61 6e 64 20 73 61 76 69  loading and savi
1f4c0 6e 67 20 6f 66 20 61 75 74 6f 69 6e 63 72 65 6d  ng of autoincrem
1f4d0 65 6e 74 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e  ent information.
1f4e0 0a 2a 2f 0a 73 74 72 75 63 74 20 41 75 74 6f 69  .*/.struct Autoi
1f4f0 6e 63 49 6e 66 6f 20 7b 0a 20 20 41 75 74 6f 69  ncInfo {.  Autoi
1f500 6e 63 49 6e 66 6f 20 2a 70 4e 65 78 74 3b 20 20  ncInfo *pNext;  
1f510 20 2f 2a 20 4e 65 78 74 20 69 6e 66 6f 20 62 6c   /* Next info bl
1f520 6f 63 6b 20 69 6e 20 61 20 6c 69 73 74 20 6f 66  ock in a list of
1f530 20 74 68 65 6d 20 61 6c 6c 20 2a 2f 0a 20 20 54   them all */.  T
1f540 61 62 6c 65 20 2a 70 54 61 62 3b 20 20 20 20 20  able *pTab;     
1f550 20 20 20 20 20 2f 2a 20 54 61 62 6c 65 20 74 68       /* Table th
1f560 69 73 20 69 6e 66 6f 20 62 6c 6f 63 6b 20 72 65  is info block re
1f570 66 65 72 73 20 74 6f 20 2a 2f 0a 20 20 69 6e 74  fers to */.  int
1f580 20 69 44 62 3b 20 20 20 20 20 20 20 20 20 20 20   iDb;           
1f590 20 20 20 2f 2a 20 49 6e 64 65 78 20 69 6e 20 73     /* Index in s
1f5a0 71 6c 69 74 65 33 2e 61 44 62 5b 5d 20 6f 66 20  qlite3.aDb[] of 
1f5b0 64 61 74 61 62 61 73 65 20 68 6f 6c 64 69 6e 67  database holding
1f5c0 20 70 54 61 62 20 2a 2f 0a 20 20 69 6e 74 20 72   pTab */.  int r
1f5d0 65 67 43 74 72 3b 20 20 20 20 20 20 20 20 20 20  egCtr;          
1f5e0 20 2f 2a 20 4d 65 6d 6f 72 79 20 72 65 67 69 73   /* Memory regis
1f5f0 74 65 72 20 68 6f 6c 64 69 6e 67 20 74 68 65 20  ter holding the 
1f600 72 6f 77 69 64 20 63 6f 75 6e 74 65 72 20 2a 2f  rowid counter */
1f610 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 53 69 7a 65 20  .};../*.** Size 
1f620 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20 63 61  of the column ca
1f630 63 68 65 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53  che.*/.#ifndef S
1f640 51 4c 49 54 45 5f 4e 5f 43 4f 4c 43 41 43 48 45  QLITE_N_COLCACHE
1f650 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
1f660 5f 4e 5f 43 4f 4c 43 41 43 48 45 20 31 30 0a 23  _N_COLCACHE 10.#
1f670 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 74 20  endif../*.** At 
1f680 6c 65 61 73 74 20 6f 6e 65 20 69 6e 73 74 61 6e  least one instan
1f690 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77  ce of the follow
1f6a0 69 6e 67 20 73 74 72 75 63 74 75 72 65 20 69 73  ing structure is
1f6b0 20 63 72 65 61 74 65 64 20 66 6f 72 20 65 61 63   created for eac
1f6c0 68 0a 2a 2a 20 74 72 69 67 67 65 72 20 74 68 61  h.** trigger tha
1f6d0 74 20 6d 61 79 20 62 65 20 66 69 72 65 64 20 77  t may be fired w
1f6e0 68 69 6c 65 20 70 61 72 73 69 6e 67 20 61 6e 20  hile parsing an 
1f6f0 49 4e 53 45 52 54 2c 20 55 50 44 41 54 45 20 6f  INSERT, UPDATE o
1f700 72 20 44 45 4c 45 54 45 0a 2a 2a 20 73 74 61 74  r DELETE.** stat
1f710 65 6d 65 6e 74 2e 20 41 6c 6c 20 73 75 63 68 20  ement. All such 
1f720 6f 62 6a 65 63 74 73 20 61 72 65 20 73 74 6f 72  objects are stor
1f730 65 64 20 69 6e 20 74 68 65 20 6c 69 6e 6b 65 64  ed in the linked
1f740 20 6c 69 73 74 20 68 65 61 64 65 64 20 61 74 0a   list headed at.
1f750 2a 2a 20 50 61 72 73 65 2e 70 54 72 69 67 67 65  ** Parse.pTrigge
1f760 72 50 72 67 20 61 6e 64 20 64 65 6c 65 74 65 64  rPrg and deleted
1f770 20 6f 6e 63 65 20 73 74 61 74 65 6d 65 6e 74 20   once statement 
1f780 63 6f 6d 70 69 6c 61 74 69 6f 6e 20 68 61 73 20  compilation has 
1f790 62 65 65 6e 0a 2a 2a 20 63 6f 6d 70 6c 65 74 65  been.** complete
1f7a0 64 2e 0a 2a 2a 0a 2a 2a 20 41 20 56 64 62 65 20  d..**.** A Vdbe 
1f7b0 73 75 62 2d 70 72 6f 67 72 61 6d 20 74 68 61 74  sub-program that
1f7c0 20 69 6d 70 6c 65 6d 65 6e 74 73 20 74 68 65 20   implements the 
1f7d0 62 6f 64 79 20 61 6e 64 20 57 48 45 4e 20 63 6c  body and WHEN cl
1f7e0 61 75 73 65 20 6f 66 20 74 72 69 67 67 65 72 0a  ause of trigger.
1f7f0 2a 2a 20 54 72 69 67 67 65 72 50 72 67 2e 70 54  ** TriggerPrg.pT
1f800 72 69 67 67 65 72 2c 20 61 73 73 75 6d 69 6e 67  rigger, assuming
1f810 20 61 20 64 65 66 61 75 6c 74 20 4f 4e 20 43 4f   a default ON CO
1f820 4e 46 4c 49 43 54 20 63 6c 61 75 73 65 20 6f 66  NFLICT clause of
1f830 0a 2a 2a 20 54 72 69 67 67 65 72 50 72 67 2e 6f  .** TriggerPrg.o
1f840 72 63 6f 6e 66 2c 20 69 73 20 73 74 6f 72 65 64  rconf, is stored
1f850 20 69 6e 20 74 68 65 20 54 72 69 67 67 65 72 50   in the TriggerP
1f860 72 67 2e 70 50 72 6f 67 72 61 6d 20 76 61 72 69  rg.pProgram vari
1f870 61 62 6c 65 2e 0a 2a 2a 20 54 68 65 20 50 61 72  able..** The Par
1f880 73 65 2e 70 54 72 69 67 67 65 72 50 72 67 20 6c  se.pTriggerPrg l
1f890 69 73 74 20 6e 65 76 65 72 20 63 6f 6e 74 61 69  ist never contai
1f8a0 6e 73 20 74 77 6f 20 65 6e 74 72 69 65 73 20 77  ns two entries w
1f8b0 69 74 68 20 74 68 65 20 73 61 6d 65 0a 2a 2a 20  ith the same.** 
1f8c0 76 61 6c 75 65 73 20 66 6f 72 20 62 6f 74 68 20  values for both 
1f8d0 70 54 72 69 67 67 65 72 20 61 6e 64 20 6f 72 63  pTrigger and orc
1f8e0 6f 6e 66 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 54  onf..**.** The T
1f8f0 72 69 67 67 65 72 50 72 67 2e 61 43 6f 6c 6d 61  riggerPrg.aColma
1f900 73 6b 5b 30 5d 20 76 61 72 69 61 62 6c 65 20 69  sk[0] variable i
1f910 73 20 73 65 74 20 74 6f 20 61 20 6d 61 73 6b 20  s set to a mask 
1f920 6f 66 20 6f 6c 64 2e 2a 20 63 6f 6c 75 6d 6e 73  of old.* columns
1f930 0a 2a 2a 20 61 63 63 65 73 73 65 64 20 28 6f 72  .** accessed (or
1f940 20 73 65 74 20 74 6f 20 30 20 66 6f 72 20 74 72   set to 0 for tr
1f950 69 67 67 65 72 73 20 66 69 72 65 64 20 61 73 20  iggers fired as 
1f960 61 20 72 65 73 75 6c 74 20 6f 66 20 49 4e 53 45  a result of INSE
1f970 52 54 0a 2a 2a 20 73 74 61 74 65 6d 65 6e 74 73  RT.** statements
1f980 29 2e 20 53 69 6d 69 6c 61 72 6c 79 2c 20 74 68  ). Similarly, th
1f990 65 20 54 72 69 67 67 65 72 50 72 67 2e 61 43 6f  e TriggerPrg.aCo
1f9a0 6c 6d 61 73 6b 5b 31 5d 20 76 61 72 69 61 62 6c  lmask[1] variabl
1f9b0 65 20 69 73 20 73 65 74 20 74 6f 0a 2a 2a 20 61  e is set to.** a
1f9c0 20 6d 61 73 6b 20 6f 66 20 6e 65 77 2e 2a 20 63   mask of new.* c
1f9d0 6f 6c 75 6d 6e 73 20 75 73 65 64 20 62 79 20 74  olumns used by t
1f9e0 68 65 20 70 72 6f 67 72 61 6d 2e 0a 2a 2f 0a 73  he program..*/.s
1f9f0 74 72 75 63 74 20 54 72 69 67 67 65 72 50 72 67  truct TriggerPrg
1fa00 20 7b 0a 20 20 54 72 69 67 67 65 72 20 2a 70 54   {.  Trigger *pT
1fa10 72 69 67 67 65 72 3b 20 20 20 20 20 20 2f 2a 20  rigger;      /* 
1fa20 54 72 69 67 67 65 72 20 74 68 69 73 20 70 72 6f  Trigger this pro
1fa30 67 72 61 6d 20 77 61 73 20 63 6f 64 65 64 20 66  gram was coded f
1fa40 72 6f 6d 20 2a 2f 0a 20 20 54 72 69 67 67 65 72  rom */.  Trigger
1fa50 50 72 67 20 2a 70 4e 65 78 74 3b 20 20 20 20 20  Prg *pNext;     
1fa60 20 2f 2a 20 4e 65 78 74 20 65 6e 74 72 79 20 69   /* Next entry i
1fa70 6e 20 50 61 72 73 65 2e 70 54 72 69 67 67 65 72  n Parse.pTrigger
1fa80 50 72 67 20 6c 69 73 74 20 2a 2f 0a 20 20 53 75  Prg list */.  Su
1fa90 62 50 72 6f 67 72 61 6d 20 2a 70 50 72 6f 67 72  bProgram *pProgr
1faa0 61 6d 3b 20 20 20 2f 2a 20 50 72 6f 67 72 61 6d  am;   /* Program
1fab0 20 69 6d 70 6c 65 6d 65 6e 74 69 6e 67 20 70 54   implementing pT
1fac0 72 69 67 67 65 72 2f 6f 72 63 6f 6e 66 20 2a 2f  rigger/orconf */
1fad0 0a 20 20 69 6e 74 20 6f 72 63 6f 6e 66 3b 20 20  .  int orconf;  
1fae0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 65             /* De
1faf0 66 61 75 6c 74 20 4f 4e 20 43 4f 4e 46 4c 49 43  fault ON CONFLIC
1fb00 54 20 70 6f 6c 69 63 79 20 2a 2f 0a 20 20 75 33  T policy */.  u3
1fb10 32 20 61 43 6f 6c 6d 61 73 6b 5b 32 5d 3b 20 20  2 aColmask[2];  
1fb20 20 20 20 20 20 20 2f 2a 20 4d 61 73 6b 73 20 6f        /* Masks o
1fb30 66 20 6f 6c 64 2e 2a 2c 20 6e 65 77 2e 2a 20 63  f old.*, new.* c
1fb40 6f 6c 75 6d 6e 73 20 61 63 63 65 73 73 65 64 20  olumns accessed 
1fb50 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  */.};../*.** The
1fb60 20 79 44 62 4d 61 73 6b 20 64 61 74 61 74 79 70   yDbMask datatyp
1fb70 65 20 66 6f 72 20 74 68 65 20 62 69 74 6d 61 73  e for the bitmas
1fb80 6b 20 6f 66 20 61 6c 6c 20 61 74 74 61 63 68 65  k of all attache
1fb90 64 20 64 61 74 61 62 61 73 65 73 2e 0a 2a 2f 0a  d databases..*/.
1fba0 23 69 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 41  #if SQLITE_MAX_A
1fbb0 54 54 41 43 48 45 44 3e 33 30 0a 20 20 74 79 70  TTACHED>30.  typ
1fbc0 65 64 65 66 20 75 6e 73 69 67 6e 65 64 20 63 68  edef unsigned ch
1fbd0 61 72 20 79 44 62 4d 61 73 6b 5b 28 53 51 4c 49  ar yDbMask[(SQLI
1fbe0 54 45 5f 4d 41 58 5f 41 54 54 41 43 48 45 44 2b  TE_MAX_ATTACHED+
1fbf0 39 29 2f 38 5d 3b 0a 23 20 64 65 66 69 6e 65 20  9)/8];.# define 
1fc00 44 62 4d 61 73 6b 54 65 73 74 28 4d 2c 49 29 20  DbMaskTest(M,I) 
1fc10 20 20 20 28 28 28 4d 29 5b 28 49 29 2f 38 5d 26     (((M)[(I)/8]&
1fc20 28 31 3c 3c 28 28 49 29 26 37 29 29 29 21 3d 30  (1<<((I)&7)))!=0
1fc30 29 0a 23 20 64 65 66 69 6e 65 20 44 62 4d 61 73  ).# define DbMas
1fc40 6b 5a 65 72 6f 28 4d 29 20 20 20 20 20 20 6d 65  kZero(M)      me
1fc50 6d 73 65 74 28 28 4d 29 2c 30 2c 73 69 7a 65 6f  mset((M),0,sizeo
1fc60 66 28 4d 29 29 0a 23 20 64 65 66 69 6e 65 20 44  f(M)).# define D
1fc70 62 4d 61 73 6b 53 65 74 28 4d 2c 49 29 20 20 20  bMaskSet(M,I)   
1fc80 20 20 28 4d 29 5b 28 49 29 2f 38 5d 7c 3d 28 31    (M)[(I)/8]|=(1
1fc90 3c 3c 28 28 49 29 26 37 29 29 0a 23 20 64 65 66  <<((I)&7)).# def
1fca0 69 6e 65 20 44 62 4d 61 73 6b 41 6c 6c 5a 65 72  ine DbMaskAllZer
1fcb0 6f 28 4d 29 20 20 20 73 71 6c 69 74 65 33 44 62  o(M)   sqlite3Db
1fcc0 4d 61 73 6b 41 6c 6c 5a 65 72 6f 28 4d 29 0a 23  MaskAllZero(M).#
1fcd0 20 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 4e 6f   define DbMaskNo
1fce0 6e 5a 65 72 6f 28 4d 29 20 20 20 28 73 71 6c 69  nZero(M)   (sqli
1fcf0 74 65 33 44 62 4d 61 73 6b 41 6c 6c 5a 65 72 6f  te3DbMaskAllZero
1fd00 28 4d 29 3d 3d 30 29 0a 23 65 6c 73 65 0a 20 20  (M)==0).#else.  
1fd10 74 79 70 65 64 65 66 20 75 6e 73 69 67 6e 65 64  typedef unsigned
1fd20 20 69 6e 74 20 79 44 62 4d 61 73 6b 3b 0a 23 20   int yDbMask;.# 
1fd30 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 54 65 73  define DbMaskTes
1fd40 74 28 4d 2c 49 29 20 20 20 20 28 28 28 4d 29 26  t(M,I)    (((M)&
1fd50 28 28 28 79 44 62 4d 61 73 6b 29 31 29 3c 3c 28  (((yDbMask)1)<<(
1fd60 49 29 29 29 21 3d 30 29 0a 23 20 64 65 66 69 6e  I)))!=0).# defin
1fd70 65 20 44 62 4d 61 73 6b 5a 65 72 6f 28 4d 29 20  e DbMaskZero(M) 
1fd80 20 20 20 20 20 28 4d 29 3d 30 0a 23 20 64 65 66       (M)=0.# def
1fd90 69 6e 65 20 44 62 4d 61 73 6b 53 65 74 28 4d 2c  ine DbMaskSet(M,
1fda0 49 29 20 20 20 20 20 28 4d 29 7c 3d 28 28 28 79  I)     (M)|=(((y
1fdb0 44 62 4d 61 73 6b 29 31 29 3c 3c 28 49 29 29 0a  DbMask)1)<<(I)).
1fdc0 23 20 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 41  # define DbMaskA
1fdd0 6c 6c 5a 65 72 6f 28 4d 29 20 20 20 28 4d 29 3d  llZero(M)   (M)=
1fde0 3d 30 0a 23 20 64 65 66 69 6e 65 20 44 62 4d 61  =0.# define DbMa
1fdf0 73 6b 4e 6f 6e 5a 65 72 6f 28 4d 29 20 20 20 28  skNonZero(M)   (
1fe00 4d 29 21 3d 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a  M)!=0.#endif../*
1fe10 0a 2a 2a 20 41 6e 20 53 51 4c 20 70 61 72 73 65  .** An SQL parse
1fe20 72 20 63 6f 6e 74 65 78 74 2e 20 20 41 20 63 6f  r context.  A co
1fe30 70 79 20 6f 66 20 74 68 69 73 20 73 74 72 75 63  py of this struc
1fe40 74 75 72 65 20 69 73 20 70 61 73 73 65 64 20 74  ture is passed t
1fe50 68 72 6f 75 67 68 0a 2a 2a 20 74 68 65 20 70 61  hrough.** the pa
1fe60 72 73 65 72 20 61 6e 64 20 64 6f 77 6e 20 69 6e  rser and down in
1fe70 74 6f 20 61 6c 6c 20 74 68 65 20 70 61 72 73 65  to all the parse
1fe80 72 20 61 63 74 69 6f 6e 20 72 6f 75 74 69 6e 65  r action routine
1fe90 20 69 6e 20 6f 72 64 65 72 20 74 6f 0a 2a 2a 20   in order to.** 
1fea0 63 61 72 72 79 20 61 72 6f 75 6e 64 20 69 6e 66  carry around inf
1feb0 6f 72 6d 61 74 69 6f 6e 20 74 68 61 74 20 69 73  ormation that is
1fec0 20 67 6c 6f 62 61 6c 20 74 6f 20 74 68 65 20 65   global to the e
1fed0 6e 74 69 72 65 20 70 61 72 73 65 2e 0a 2a 2a 0a  ntire parse..**.
1fee0 2a 2a 20 54 68 65 20 73 74 72 75 63 74 75 72 65  ** The structure
1fef0 20 69 73 20 64 69 76 69 64 65 64 20 69 6e 74 6f   is divided into
1ff00 20 74 77 6f 20 70 61 72 74 73 2e 20 20 57 68 65   two parts.  Whe
1ff10 6e 20 74 68 65 20 70 61 72 73 65 72 20 61 6e 64  n the parser and
1ff20 20 63 6f 64 65 0a 2a 2a 20 67 65 6e 65 72 61 74   code.** generat
1ff30 65 20 63 61 6c 6c 20 74 68 65 6d 73 65 6c 76 65  e call themselve
1ff40 73 20 72 65 63 75 72 73 69 76 65 6c 79 2c 20 74  s recursively, t
1ff50 68 65 20 66 69 72 73 74 20 70 61 72 74 20 6f 66  he first part of
1ff60 20 74 68 65 20 73 74 72 75 63 74 75 72 65 0a 2a   the structure.*
1ff70 2a 20 69 73 20 63 6f 6e 73 74 61 6e 74 20 62 75  * is constant bu
1ff80 74 20 74 68 65 20 73 65 63 6f 6e 64 20 70 61 72  t the second par
1ff90 74 20 69 73 20 72 65 73 65 74 20 61 74 20 74 68  t is reset at th
1ffa0 65 20 62 65 67 69 6e 6e 69 6e 67 20 61 6e 64 20  e beginning and 
1ffb0 65 6e 64 20 6f 66 0a 2a 2a 20 65 61 63 68 20 72  end of.** each r
1ffc0 65 63 75 72 73 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20  ecursion..**.** 
1ffd0 54 68 65 20 6e 54 61 62 6c 65 4c 6f 63 6b 20 61  The nTableLock a
1ffe0 6e 64 20 61 54 61 62 6c 65 4c 6f 63 6b 20 76 61  nd aTableLock va
1fff0 72 69 61 62 6c 65 73 20 61 72 65 20 6f 6e 6c 79  riables are only
20000 20 75 73 65 64 20 69 66 20 74 68 65 20 73 68 61   used if the sha
20010 72 65 64 2d 63 61 63 68 65 0a 2a 2a 20 66 65 61  red-cache.** fea
20020 74 75 72 65 20 69 73 20 65 6e 61 62 6c 65 64 20  ture is enabled 
20030 28 69 66 20 73 71 6c 69 74 65 33 54 73 64 28 29  (if sqlite3Tsd()
20040 2d 3e 75 73 65 53 68 61 72 65 64 44 61 74 61 20  ->useSharedData 
20050 69 73 20 74 72 75 65 29 2e 20 54 68 65 79 20 61  is true). They a
20060 72 65 0a 2a 2a 20 75 73 65 64 20 74 6f 20 73 74  re.** used to st
20070 6f 72 65 20 74 68 65 20 73 65 74 20 6f 66 20 74  ore the set of t
20080 61 62 6c 65 2d 6c 6f 63 6b 73 20 72 65 71 75 69  able-locks requi
20090 72 65 64 20 62 79 20 74 68 65 20 73 74 61 74 65  red by the state
200a0 6d 65 6e 74 20 62 65 69 6e 67 0a 2a 2a 20 63 6f  ment being.** co
200b0 6d 70 69 6c 65 64 2e 20 46 75 6e 63 74 69 6f 6e  mpiled. Function
200c0 20 73 71 6c 69 74 65 33 54 61 62 6c 65 4c 6f 63   sqlite3TableLoc
200d0 6b 28 29 20 69 73 20 75 73 65 64 20 74 6f 20 61  k() is used to a
200e0 64 64 20 65 6e 74 72 69 65 73 20 74 6f 20 74 68  dd entries to th
200f0 65 0a 2a 2a 20 6c 69 73 74 2e 0a 2a 2f 0a 73 74  e.** list..*/.st
20100 72 75 63 74 20 50 61 72 73 65 20 7b 0a 20 20 73  ruct Parse {.  s
20110 71 6c 69 74 65 33 20 2a 64 62 3b 20 20 20 20 20  qlite3 *db;     
20120 20 20 20 20 2f 2a 20 54 68 65 20 6d 61 69 6e 20      /* The main 
20130 64 61 74 61 62 61 73 65 20 73 74 72 75 63 74 75  database structu
20140 72 65 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 45  re */.  char *zE
20150 72 72 4d 73 67 3b 20 20 20 20 20 20 20 2f 2a 20  rrMsg;       /* 
20160 41 6e 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65  An error message
20170 20 2a 2f 0a 20 20 56 64 62 65 20 2a 70 56 64 62   */.  Vdbe *pVdb
20180 65 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 41 6e  e;         /* An
20190 20 65 6e 67 69 6e 65 20 66 6f 72 20 65 78 65 63   engine for exec
201a0 75 74 69 6e 67 20 64 61 74 61 62 61 73 65 20 62  uting database b
201b0 79 74 65 63 6f 64 65 20 2a 2f 0a 20 20 69 6e 74  ytecode */.  int
201c0 20 72 63 3b 20 20 20 20 20 20 20 20 20 20 20 20   rc;            
201d0 20 20 2f 2a 20 52 65 74 75 72 6e 20 63 6f 64 65    /* Return code
201e0 20 66 72 6f 6d 20 65 78 65 63 75 74 69 6f 6e 20   from execution 
201f0 2a 2f 0a 20 20 75 38 20 63 6f 6c 4e 61 6d 65 73  */.  u8 colNames
20200 53 65 74 3b 20 20 20 20 20 20 2f 2a 20 54 52 55  Set;      /* TRU
20210 45 20 61 66 74 65 72 20 4f 50 5f 43 6f 6c 75 6d  E after OP_Colum
20220 6e 4e 61 6d 65 20 68 61 73 20 62 65 65 6e 20 69  nName has been i
20230 73 73 75 65 64 20 74 6f 20 70 56 64 62 65 20 2a  ssued to pVdbe *
20240 2f 0a 20 20 75 38 20 63 68 65 63 6b 53 63 68 65  /.  u8 checkSche
20250 6d 61 3b 20 20 20 20 20 20 2f 2a 20 43 61 75 73  ma;      /* Caus
20260 65 73 20 73 63 68 65 6d 61 20 63 6f 6f 6b 69 65  es schema cookie
20270 20 63 68 65 63 6b 20 61 66 74 65 72 20 61 6e 20   check after an 
20280 65 72 72 6f 72 20 2a 2f 0a 20 20 75 38 20 6e 65  error */.  u8 ne
20290 73 74 65 64 3b 20 20 20 20 20 20 20 20 20 20 20  sted;           
202a0 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6e 65 73  /* Number of nes
202b0 74 65 64 20 63 61 6c 6c 73 20 74 6f 20 74 68 65  ted calls to the
202c0 20 70 61 72 73 65 72 2f 63 6f 64 65 20 67 65 6e   parser/code gen
202d0 65 72 61 74 6f 72 20 2a 2f 0a 20 20 75 38 20 6e  erator */.  u8 n
202e0 54 65 6d 70 52 65 67 3b 20 20 20 20 20 20 20 20  TempReg;        
202f0 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 74 65   /* Number of te
20300 6d 70 6f 72 61 72 79 20 72 65 67 69 73 74 65 72  mporary register
20310 73 20 69 6e 20 61 54 65 6d 70 52 65 67 5b 5d 20  s in aTempReg[] 
20320 2a 2f 0a 20 20 75 38 20 69 73 4d 75 6c 74 69 57  */.  u8 isMultiW
20330 72 69 74 65 3b 20 20 20 20 20 2f 2a 20 54 72 75  rite;     /* Tru
20340 65 20 69 66 20 73 74 61 74 65 6d 65 6e 74 20 6d  e if statement m
20350 61 79 20 6d 6f 64 69 66 79 2f 69 6e 73 65 72 74  ay modify/insert
20360 20 6d 75 6c 74 69 70 6c 65 20 72 6f 77 73 20 2a   multiple rows *
20370 2f 0a 20 20 75 38 20 6d 61 79 41 62 6f 72 74 3b  /.  u8 mayAbort;
20380 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65           /* True
20390 20 69 66 20 73 74 61 74 65 6d 65 6e 74 20 6d 61   if statement ma
203a0 79 20 74 68 72 6f 77 20 61 6e 20 41 42 4f 52 54  y throw an ABORT
203b0 20 65 78 63 65 70 74 69 6f 6e 20 2a 2f 0a 20 20   exception */.  
203c0 75 38 20 68 61 73 43 6f 6d 70 6f 75 6e 64 3b 20  u8 hasCompound; 
203d0 20 20 20 20 20 2f 2a 20 4e 65 65 64 20 74 6f 20       /* Need to 
203e0 69 6e 76 6f 6b 65 20 63 6f 6e 76 65 72 74 43 6f  invoke convertCo
203f0 6d 70 6f 75 6e 64 53 65 6c 65 63 74 54 6f 53 75  mpoundSelectToSu
20400 62 71 75 65 72 79 28 29 20 2a 2f 0a 20 20 75 38  bquery() */.  u8
20410 20 6f 6b 43 6f 6e 73 74 46 61 63 74 6f 72 3b 20   okConstFactor; 
20420 20 20 20 2f 2a 20 4f 4b 20 74 6f 20 66 61 63 74     /* OK to fact
20430 6f 72 20 6f 75 74 20 63 6f 6e 73 74 61 6e 74 73  or out constants
20440 20 2a 2f 0a 20 20 75 38 20 64 69 73 61 62 6c 65   */.  u8 disable
20450 4c 6f 6f 6b 61 73 69 64 65 3b 20 2f 2a 20 4e 75  Lookaside; /* Nu
20460 6d 62 65 72 20 6f 66 20 74 69 6d 65 73 20 6c 6f  mber of times lo
20470 6f 6b 61 73 69 64 65 20 68 61 73 20 62 65 65 6e  okaside has been
20480 20 64 69 73 61 62 6c 65 64 20 2a 2f 0a 20 20 75   disabled */.  u
20490 38 20 6e 43 6f 6c 43 61 63 68 65 3b 20 20 20 20  8 nColCache;    
204a0 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
204b0 20 65 6e 74 72 69 65 73 20 69 6e 20 61 43 6f 6c   entries in aCol
204c0 43 61 63 68 65 5b 5d 20 2a 2f 0a 20 20 69 6e 74  Cache[] */.  int
204d0 20 6e 52 61 6e 67 65 52 65 67 3b 20 20 20 20 20   nRangeReg;     
204e0 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20 74 68 65    /* Size of the
204f0 20 74 65 6d 70 6f 72 61 72 79 20 72 65 67 69 73   temporary regis
20500 74 65 72 20 62 6c 6f 63 6b 20 2a 2f 0a 20 20 69  ter block */.  i
20510 6e 74 20 69 52 61 6e 67 65 52 65 67 3b 20 20 20  nt iRangeReg;   
20520 20 20 20 20 2f 2a 20 46 69 72 73 74 20 72 65 67      /* First reg
20530 69 73 74 65 72 20 69 6e 20 74 65 6d 70 6f 72 61  ister in tempora
20540 72 79 20 72 65 67 69 73 74 65 72 20 62 6c 6f 63  ry register bloc
20550 6b 20 2a 2f 0a 20 20 69 6e 74 20 6e 45 72 72 3b  k */.  int nErr;
20560 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
20570 75 6d 62 65 72 20 6f 66 20 65 72 72 6f 72 73 20  umber of errors 
20580 73 65 65 6e 20 2a 2f 0a 20 20 69 6e 74 20 6e 54  seen */.  int nT
20590 61 62 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  ab;            /
205a0 2a 20 4e 75 6d 62 65 72 20 6f 66 20 70 72 65 76  * Number of prev
205b0 69 6f 75 73 6c 79 20 61 6c 6c 6f 63 61 74 65 64  iously allocated
205c0 20 56 44 42 45 20 63 75 72 73 6f 72 73 20 2a 2f   VDBE cursors */
205d0 0a 20 20 69 6e 74 20 6e 4d 65 6d 3b 20 20 20 20  .  int nMem;    
205e0 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
205f0 72 20 6f 66 20 6d 65 6d 6f 72 79 20 63 65 6c 6c  r of memory cell
20600 73 20 75 73 65 64 20 73 6f 20 66 61 72 20 2a 2f  s used so far */
20610 0a 20 20 69 6e 74 20 6e 4f 70 41 6c 6c 6f 63 3b  .  int nOpAlloc;
20620 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
20630 72 20 6f 66 20 73 6c 6f 74 73 20 61 6c 6c 6f 63  r of slots alloc
20640 61 74 65 64 20 66 6f 72 20 56 64 62 65 2e 61 4f  ated for Vdbe.aO
20650 70 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 73 7a 4f  p[] */.  int szO
20660 70 41 6c 6c 6f 63 3b 20 20 20 20 20 20 20 2f 2a  pAlloc;       /*
20670 20 42 79 74 65 73 20 6f 66 20 6d 65 6d 6f 72 79   Bytes of memory
20680 20 73 70 61 63 65 20 61 6c 6c 6f 63 61 74 65 64   space allocated
20690 20 66 6f 72 20 56 64 62 65 2e 61 4f 70 5b 5d 20   for Vdbe.aOp[] 
206a0 2a 2f 0a 20 20 69 6e 74 20 69 53 65 6c 66 54 61  */.  int iSelfTa
206b0 62 3b 20 20 20 20 20 20 20 20 2f 2a 20 54 61 62  b;        /* Tab
206c0 6c 65 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  le associated wi
206d0 74 68 20 61 6e 20 69 6e 64 65 78 20 6f 6e 20 65  th an index on e
206e0 78 70 72 2c 20 6f 72 20 6e 65 67 61 74 69 76 65  xpr, or negative
206f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
20700 20 20 20 20 20 20 20 20 2a 2a 20 6f 66 20 74 68          ** of th
20710 65 20 62 61 73 65 20 72 65 67 69 73 74 65 72 20  e base register 
20720 64 75 72 69 6e 67 20 63 68 65 63 6b 2d 63 6f 6e  during check-con
20730 73 74 72 61 69 6e 74 20 65 76 61 6c 20 2a 2f 0a  straint eval */.
20740 20 20 69 6e 74 20 69 43 61 63 68 65 4c 65 76 65    int iCacheLeve
20750 6c 3b 20 20 20 20 20 2f 2a 20 43 6f 6c 43 61 63  l;     /* ColCac
20760 68 65 20 76 61 6c 69 64 20 77 68 65 6e 20 61 43  he valid when aC
20770 6f 6c 43 61 63 68 65 5b 5d 2e 69 4c 65 76 65 6c  olCache[].iLevel
20780 3c 3d 69 43 61 63 68 65 4c 65 76 65 6c 20 2a 2f  <=iCacheLevel */
20790 0a 20 20 69 6e 74 20 69 43 61 63 68 65 43 6e 74  .  int iCacheCnt
207a0 3b 20 20 20 20 20 20 20 2f 2a 20 43 6f 75 6e 74  ;       /* Count
207b0 65 72 20 75 73 65 64 20 74 6f 20 67 65 6e 65 72  er used to gener
207c0 61 74 65 20 61 43 6f 6c 43 61 63 68 65 5b 5d 2e  ate aColCache[].
207d0 6c 72 75 20 76 61 6c 75 65 73 20 2a 2f 0a 20 20  lru values */.  
207e0 69 6e 74 20 6e 4c 61 62 65 6c 3b 20 20 20 20 20  int nLabel;     
207f0 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
20800 66 20 6c 61 62 65 6c 73 20 75 73 65 64 20 2a 2f  f labels used */
20810 0a 20 20 69 6e 74 20 2a 61 4c 61 62 65 6c 3b 20  .  int *aLabel; 
20820 20 20 20 20 20 20 20 20 2f 2a 20 53 70 61 63 65          /* Space
20830 20 74 6f 20 68 6f 6c 64 20 74 68 65 20 6c 61 62   to hold the lab
20840 65 6c 73 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73  els */.  ExprLis
20850 74 20 2a 70 43 6f 6e 73 74 45 78 70 72 3b 2f 2a  t *pConstExpr;/*
20860 20 43 6f 6e 73 74 61 6e 74 20 65 78 70 72 65 73   Constant expres
20870 73 69 6f 6e 73 20 2a 2f 0a 20 20 54 6f 6b 65 6e  sions */.  Token
20880 20 63 6f 6e 73 74 72 61 69 6e 74 4e 61 6d 65 3b   constraintName;
20890 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65 20 63  /* Name of the c
208a0 6f 6e 73 74 72 61 69 6e 74 20 63 75 72 72 65 6e  onstraint curren
208b0 74 6c 79 20 62 65 69 6e 67 20 70 61 72 73 65 64  tly being parsed
208c0 20 2a 2f 0a 20 20 79 44 62 4d 61 73 6b 20 77 72   */.  yDbMask wr
208d0 69 74 65 4d 61 73 6b 3b 20 20 20 2f 2a 20 53 74  iteMask;   /* St
208e0 61 72 74 20 61 20 77 72 69 74 65 20 74 72 61 6e  art a write tran
208f0 73 61 63 74 69 6f 6e 20 6f 6e 20 74 68 65 73 65  saction on these
20900 20 64 61 74 61 62 61 73 65 73 20 2a 2f 0a 20 20   databases */.  
20910 79 44 62 4d 61 73 6b 20 63 6f 6f 6b 69 65 4d 61  yDbMask cookieMa
20920 73 6b 3b 20 20 2f 2a 20 42 69 74 6d 61 73 6b 20  sk;  /* Bitmask 
20930 6f 66 20 73 63 68 65 6d 61 20 76 65 72 69 66 69  of schema verifi
20940 65 64 20 64 61 74 61 62 61 73 65 73 20 2a 2f 0a  ed databases */.
20950 20 20 69 6e 74 20 72 65 67 52 6f 77 69 64 3b 20    int regRowid; 
20960 20 20 20 20 20 20 20 2f 2a 20 52 65 67 69 73 74         /* Regist
20970 65 72 20 68 6f 6c 64 69 6e 67 20 72 6f 77 69 64  er holding rowid
20980 20 6f 66 20 43 52 45 41 54 45 20 54 41 42 4c 45   of CREATE TABLE
20990 20 65 6e 74 72 79 20 2a 2f 0a 20 20 69 6e 74 20   entry */.  int 
209a0 72 65 67 52 6f 6f 74 3b 20 20 20 20 20 20 20 20  regRoot;        
209b0 20 2f 2a 20 52 65 67 69 73 74 65 72 20 68 6f 6c   /* Register hol
209c0 64 69 6e 67 20 72 6f 6f 74 20 70 61 67 65 20 6e  ding root page n
209d0 75 6d 62 65 72 20 66 6f 72 20 6e 65 77 20 6f 62  umber for new ob
209e0 6a 65 63 74 73 20 2a 2f 0a 20 20 69 6e 74 20 6e  jects */.  int n
209f0 4d 61 78 41 72 67 3b 20 20 20 20 20 20 20 20 20  MaxArg;         
20a00 2f 2a 20 4d 61 78 20 61 72 67 73 20 70 61 73 73  /* Max args pass
20a10 65 64 20 74 6f 20 75 73 65 72 20 66 75 6e 63 74  ed to user funct
20a20 69 6f 6e 20 62 79 20 73 75 62 2d 70 72 6f 67 72  ion by sub-progr
20a30 61 6d 20 2a 2f 0a 23 69 66 20 53 45 4c 45 43 54  am */.#if SELECT
20a40 54 52 41 43 45 5f 45 4e 41 42 4c 45 44 0a 20 20  TRACE_ENABLED.  
20a50 69 6e 74 20 6e 53 65 6c 65 63 74 3b 20 20 20 20  int nSelect;    
20a60 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
20a70 66 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  f SELECT stateme
20a80 6e 74 73 20 73 65 65 6e 20 2a 2f 0a 23 65 6e 64  nts seen */.#end
20a90 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  if.#ifndef SQLIT
20aa0 45 5f 4f 4d 49 54 5f 53 48 41 52 45 44 5f 43 41  E_OMIT_SHARED_CA
20ab0 43 48 45 0a 20 20 69 6e 74 20 6e 54 61 62 6c 65  CHE.  int nTable
20ac0 4c 6f 63 6b 3b 20 20 20 20 20 20 20 20 2f 2a 20  Lock;        /* 
20ad0 4e 75 6d 62 65 72 20 6f 66 20 6c 6f 63 6b 73 20  Number of locks 
20ae0 69 6e 20 61 54 61 62 6c 65 4c 6f 63 6b 20 2a 2f  in aTableLock */
20af0 0a 20 20 54 61 62 6c 65 4c 6f 63 6b 20 2a 61 54  .  TableLock *aT
20b00 61 62 6c 65 4c 6f 63 6b 3b 20 2f 2a 20 52 65 71  ableLock; /* Req
20b10 75 69 72 65 64 20 74 61 62 6c 65 20 6c 6f 63 6b  uired table lock
20b20 73 20 66 6f 72 20 73 68 61 72 65 64 2d 63 61 63  s for shared-cac
20b30 68 65 20 6d 6f 64 65 20 2a 2f 0a 23 65 6e 64 69  he mode */.#endi
20b40 66 0a 20 20 41 75 74 6f 69 6e 63 49 6e 66 6f 20  f.  AutoincInfo 
20b50 2a 70 41 69 6e 63 3b 20 20 2f 2a 20 49 6e 66 6f  *pAinc;  /* Info
20b60 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 41 55  rmation about AU
20b70 54 4f 49 4e 43 52 45 4d 45 4e 54 20 63 6f 75 6e  TOINCREMENT coun
20b80 74 65 72 73 20 2a 2f 0a 20 20 50 61 72 73 65 20  ters */.  Parse 
20b90 2a 70 54 6f 70 6c 65 76 65 6c 3b 20 20 20 20 2f  *pToplevel;    /
20ba0 2a 20 50 61 72 73 65 20 73 74 72 75 63 74 75 72  * Parse structur
20bb0 65 20 66 6f 72 20 6d 61 69 6e 20 70 72 6f 67 72  e for main progr
20bc0 61 6d 20 28 6f 72 20 4e 55 4c 4c 29 20 2a 2f 0a  am (or NULL) */.
20bd0 20 20 54 61 62 6c 65 20 2a 70 54 72 69 67 67 65    Table *pTrigge
20be0 72 54 61 62 3b 20 20 2f 2a 20 54 61 62 6c 65 20  rTab;  /* Table 
20bf0 74 72 69 67 67 65 72 73 20 61 72 65 20 62 65 69  triggers are bei
20c00 6e 67 20 63 6f 64 65 64 20 66 6f 72 20 2a 2f 0a  ng coded for */.
20c10 20 20 69 6e 74 20 61 64 64 72 43 72 54 61 62 3b    int addrCrTab;
20c20 20 20 20 20 20 20 20 2f 2a 20 41 64 64 72 65 73         /* Addres
20c30 73 20 6f 66 20 4f 50 5f 43 72 65 61 74 65 42 74  s of OP_CreateBt
20c40 72 65 65 20 6f 70 63 6f 64 65 20 6f 6e 20 43 52  ree opcode on CR
20c50 45 41 54 45 20 54 41 42 4c 45 20 2a 2f 0a 20 20  EATE TABLE */.  
20c60 75 33 32 20 6e 51 75 65 72 79 4c 6f 6f 70 3b 20  u32 nQueryLoop; 
20c70 20 20 20 20 20 2f 2a 20 45 73 74 20 6e 75 6d 62       /* Est numb
20c80 65 72 20 6f 66 20 69 74 65 72 61 74 69 6f 6e 73  er of iterations
20c90 20 6f 66 20 61 20 71 75 65 72 79 20 28 31 30 2a   of a query (10*
20ca0 6c 6f 67 32 28 4e 29 29 20 2a 2f 0a 20 20 75 33  log2(N)) */.  u3
20cb0 32 20 6f 6c 64 6d 61 73 6b 3b 20 20 20 20 20 20  2 oldmask;      
20cc0 20 20 20 2f 2a 20 4d 61 73 6b 20 6f 66 20 6f 6c     /* Mask of ol
20cd0 64 2e 2a 20 63 6f 6c 75 6d 6e 73 20 72 65 66 65  d.* columns refe
20ce0 72 65 6e 63 65 64 20 2a 2f 0a 20 20 75 33 32 20  renced */.  u32 
20cf0 6e 65 77 6d 61 73 6b 3b 20 20 20 20 20 20 20 20  newmask;        
20d00 20 2f 2a 20 4d 61 73 6b 20 6f 66 20 6e 65 77 2e   /* Mask of new.
20d10 2a 20 63 6f 6c 75 6d 6e 73 20 72 65 66 65 72 65  * columns refere
20d20 6e 63 65 64 20 2a 2f 0a 20 20 75 38 20 65 54 72  nced */.  u8 eTr
20d30 69 67 67 65 72 4f 70 3b 20 20 20 20 20 20 20 2f  iggerOp;       /
20d40 2a 20 54 4b 5f 55 50 44 41 54 45 2c 20 54 4b 5f  * TK_UPDATE, TK_
20d50 49 4e 53 45 52 54 20 6f 72 20 54 4b 5f 44 45 4c  INSERT or TK_DEL
20d60 45 54 45 20 2a 2f 0a 20 20 75 38 20 65 4f 72 63  ETE */.  u8 eOrc
20d70 6f 6e 66 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  onf;          /*
20d80 20 44 65 66 61 75 6c 74 20 4f 4e 20 43 4f 4e 46   Default ON CONF
20d90 4c 49 43 54 20 70 6f 6c 69 63 79 20 66 6f 72 20  LICT policy for 
20da0 74 72 69 67 67 65 72 20 73 74 65 70 73 20 2a 2f  trigger steps */
20db0 0a 20 20 75 38 20 64 69 73 61 62 6c 65 54 72 69  .  u8 disableTri
20dc0 67 67 65 72 73 3b 20 20 2f 2a 20 54 72 75 65 20  ggers;  /* True 
20dd0 74 6f 20 64 69 73 61 62 6c 65 20 74 72 69 67 67  to disable trigg
20de0 65 72 73 20 2a 2f 0a 0a 20 20 2f 2a 2a 2a 2a 2a  ers */..  /*****
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 2a 2a 2a 2a 2a 2a 2a 2a  ****************
20e10 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
20e20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
20e30 2a 2a 2a 2a 2a 0a 20 20 2a 2a 20 46 69 65 6c 64  *****.  ** Field
20e40 73 20 61 62 6f 76 65 20 6d 75 73 74 20 62 65 20  s above must be 
20e50 69 6e 69 74 69 61 6c 69 7a 65 64 20 74 6f 20 7a  initialized to z
20e60 65 72 6f 2e 20 20 54 68 65 20 66 69 65 6c 64 73  ero.  The fields
20e70 20 74 68 61 74 20 66 6f 6c 6c 6f 77 2c 0a 20 20   that follow,.  
20e80 2a 2a 20 64 6f 77 6e 20 74 6f 20 74 68 65 20 62  ** down to the b
20e90 65 67 69 6e 6e 69 6e 67 20 6f 66 20 74 68 65 20  eginning of the 
20ea0 72 65 63 75 72 73 69 76 65 20 73 65 63 74 69 6f  recursive sectio
20eb0 6e 2c 20 64 6f 20 6e 6f 74 20 6e 65 65 64 20 74  n, do not need t
20ec0 6f 20 62 65 0a 20 20 2a 2a 20 69 6e 69 74 69 61  o be.  ** initia
20ed0 6c 69 7a 65 64 20 61 73 20 74 68 65 79 20 77 69  lized as they wi
20ee0 6c 6c 20 62 65 20 73 65 74 20 62 65 66 6f 72 65  ll be set before
20ef0 20 62 65 69 6e 67 20 75 73 65 64 2e 20 20 54 68   being used.  Th
20f00 65 20 62 6f 75 6e 64 61 72 79 20 69 73 0a 20 20  e boundary is.  
20f10 2a 2a 20 64 65 74 65 72 6d 69 6e 65 64 20 62 79  ** determined by
20f20 20 6f 66 66 73 65 74 6f 66 28 50 61 72 73 65 2c   offsetof(Parse,
20f30 61 43 6f 6c 43 61 63 68 65 29 2e 0a 20 20 2a 2a  aColCache)..  **
20f40 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
20f50 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
20f60 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
20f70 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
20f80 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 20 20 73 74 72  ********/..  str
20f90 75 63 74 20 79 43 6f 6c 43 61 63 68 65 20 7b 0a  uct yColCache {.
20fa0 20 20 20 20 69 6e 74 20 69 54 61 62 6c 65 3b 20      int iTable; 
20fb0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 61 62            /* Tab
20fc0 6c 65 20 63 75 72 73 6f 72 20 6e 75 6d 62 65 72  le cursor number
20fd0 20 2a 2f 0a 20 20 20 20 69 31 36 20 69 43 6f 6c   */.    i16 iCol
20fe0 75 6d 6e 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  umn;          /*
20ff0 20 54 61 62 6c 65 20 63 6f 6c 75 6d 6e 20 6e 75   Table column nu
21000 6d 62 65 72 20 2a 2f 0a 20 20 20 20 75 38 20 74  mber */.    u8 t
21010 65 6d 70 52 65 67 3b 20 20 20 20 20 20 20 20 20  empReg;         
21020 20 20 2f 2a 20 69 52 65 67 20 69 73 20 61 20 74    /* iReg is a t
21030 65 6d 70 20 72 65 67 69 73 74 65 72 20 74 68 61  emp register tha
21040 74 20 6e 65 65 64 73 20 74 6f 20 62 65 20 66 72  t needs to be fr
21050 65 65 64 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69  eed */.    int i
21060 4c 65 76 65 6c 3b 20 20 20 20 20 20 20 20 20 20  Level;          
21070 20 2f 2a 20 4e 65 73 74 69 6e 67 20 6c 65 76 65   /* Nesting leve
21080 6c 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 52 65  l */.    int iRe
21090 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  g;             /
210a0 2a 20 52 65 67 20 77 69 74 68 20 76 61 6c 75 65  * Reg with value
210b0 20 6f 66 20 74 68 69 73 20 63 6f 6c 75 6d 6e 2e   of this column.
210c0 20 30 20 6d 65 61 6e 73 20 6e 6f 6e 65 2e 20 2a   0 means none. *
210d0 2f 0a 20 20 20 20 69 6e 74 20 6c 72 75 3b 20 20  /.    int lru;  
210e0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c              /* L
210f0 65 61 73 74 20 72 65 63 65 6e 74 6c 79 20 75 73  east recently us
21100 65 64 20 65 6e 74 72 79 20 68 61 73 20 74 68 65  ed entry has the
21110 20 73 6d 61 6c 6c 65 73 74 20 76 61 6c 75 65 20   smallest value 
21120 2a 2f 0a 20 20 7d 20 61 43 6f 6c 43 61 63 68 65  */.  } aColCache
21130 5b 53 51 4c 49 54 45 5f 4e 5f 43 4f 4c 43 41 43  [SQLITE_N_COLCAC
21140 48 45 5d 3b 20 20 2f 2a 20 4f 6e 65 20 66 6f 72  HE];  /* One for
21150 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 63 61 63   each column cac
21160 68 65 20 65 6e 74 72 79 20 2a 2f 0a 20 20 69 6e  he entry */.  in
21170 74 20 61 54 65 6d 70 52 65 67 5b 38 5d 3b 20 20  t aTempReg[8];  
21180 20 20 20 20 20 20 2f 2a 20 48 6f 6c 64 69 6e 67        /* Holding
21190 20 61 72 65 61 20 66 6f 72 20 74 65 6d 70 6f 72   area for tempor
211a0 61 72 79 20 72 65 67 69 73 74 65 72 73 20 2a 2f  ary registers */
211b0 0a 20 20 54 6f 6b 65 6e 20 73 4e 61 6d 65 54 6f  .  Token sNameTo
211c0 6b 65 6e 3b 20 20 20 20 20 20 20 2f 2a 20 54 6f  ken;       /* To
211d0 6b 65 6e 20 77 69 74 68 20 75 6e 71 75 61 6c 69  ken with unquali
211e0 66 69 65 64 20 73 63 68 65 6d 61 20 6f 62 6a 65  fied schema obje
211f0 63 74 20 6e 61 6d 65 20 2a 2f 0a 0a 20 20 2f 2a  ct name */..  /*
21200 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21210 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21220 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21230 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21240 2a 2a 2a 2a 2a 2a 2a 0a 20 20 2a 2a 20 41 62 6f  *******.  ** Abo
21250 76 65 20 69 73 20 63 6f 6e 73 74 61 6e 74 20 62  ve is constant b
21260 65 74 77 65 65 6e 20 72 65 63 75 72 73 69 6f 6e  etween recursion
21270 73 2e 20 20 42 65 6c 6f 77 20 69 73 20 72 65 73  s.  Below is res
21280 65 74 20 62 65 66 6f 72 65 20 61 6e 64 20 61 66  et before and af
21290 74 65 72 0a 20 20 2a 2a 20 65 61 63 68 20 72 65  ter.  ** each re
212a0 63 75 72 73 69 6f 6e 2e 20 20 54 68 65 20 62 6f  cursion.  The bo
212b0 75 6e 64 61 72 79 20 62 65 74 77 65 65 6e 20 74  undary between t
212c0 68 65 73 65 20 74 77 6f 20 72 65 67 69 6f 6e 73  hese two regions
212d0 20 69 73 20 64 65 74 65 72 6d 69 6e 65 64 0a 20   is determined. 
212e0 20 2a 2a 20 75 73 69 6e 67 20 6f 66 66 73 65 74   ** using offset
212f0 6f 66 28 50 61 72 73 65 2c 73 4c 61 73 74 54 6f  of(Parse,sLastTo
21300 6b 65 6e 29 20 73 6f 20 74 68 65 20 73 4c 61 73  ken) so the sLas
21310 74 54 6f 6b 65 6e 20 66 69 65 6c 64 20 6d 75 73  tToken field mus
21320 74 20 62 65 20 74 68 65 0a 20 20 2a 2a 20 66 69  t be the.  ** fi
21330 72 73 74 20 66 69 65 6c 64 20 69 6e 20 74 68 65  rst field in the
21340 20 72 65 63 75 72 73 69 76 65 20 72 65 67 69 6f   recursive regio
21350 6e 2e 0a 20 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  n..  ***********
21360 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21370 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21380 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21390 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a  *************/..
213a0 20 20 54 6f 6b 65 6e 20 73 4c 61 73 74 54 6f 6b    Token sLastTok
213b0 65 6e 3b 20 20 20 20 20 20 20 2f 2a 20 54 68 65  en;       /* The
213c0 20 6c 61 73 74 20 74 6f 6b 65 6e 20 70 61 72 73   last token pars
213d0 65 64 20 2a 2f 0a 20 20 79 6e 56 61 72 20 6e 56  ed */.  ynVar nV
213e0 61 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ar;             
213f0 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 27    /* Number of '
21400 3f 27 20 76 61 72 69 61 62 6c 65 73 20 73 65 65  ?' variables see
21410 6e 20 69 6e 20 74 68 65 20 53 51 4c 20 73 6f 20  n in the SQL so 
21420 66 61 72 20 2a 2f 0a 20 20 75 38 20 69 50 6b 53  far */.  u8 iPkS
21430 6f 72 74 4f 72 64 65 72 3b 20 20 20 20 20 20 20  ortOrder;       
21440 20 20 20 2f 2a 20 41 53 43 20 6f 72 20 44 45 53     /* ASC or DES
21450 43 20 66 6f 72 20 49 4e 54 45 47 45 52 20 50 52  C for INTEGER PR
21460 49 4d 41 52 59 20 4b 45 59 20 2a 2f 0a 20 20 75  IMARY KEY */.  u
21470 38 20 65 78 70 6c 61 69 6e 3b 20 20 20 20 20 20  8 explain;      
21480 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65           /* True
21490 20 69 66 20 74 68 65 20 45 58 50 4c 41 49 4e 20   if the EXPLAIN 
214a0 66 6c 61 67 20 69 73 20 66 6f 75 6e 64 20 6f 6e  flag is found on
214b0 20 74 68 65 20 71 75 65 72 79 20 2a 2f 0a 23 69   the query */.#i
214c0 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
214d0 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 20  T_VIRTUALTABLE. 
214e0 20 75 38 20 64 65 63 6c 61 72 65 56 74 61 62 3b   u8 declareVtab;
214f0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72             /* Tr
21500 75 65 20 69 66 20 69 6e 73 69 64 65 20 73 71 6c  ue if inside sql
21510 69 74 65 33 5f 64 65 63 6c 61 72 65 5f 76 74 61  ite3_declare_vta
21520 62 28 29 20 2a 2f 0a 20 20 69 6e 74 20 6e 56 74  b() */.  int nVt
21530 61 62 4c 6f 63 6b 3b 20 20 20 20 20 20 20 20 20  abLock;         
21540 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
21550 76 69 72 74 75 61 6c 20 74 61 62 6c 65 73 20 74  virtual tables t
21560 6f 20 6c 6f 63 6b 20 2a 2f 0a 23 65 6e 64 69 66  o lock */.#endif
21570 0a 20 20 69 6e 74 20 6e 48 65 69 67 68 74 3b 20  .  int nHeight; 
21580 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
21590 45 78 70 72 65 73 73 69 6f 6e 20 74 72 65 65 20  Expression tree 
215a0 68 65 69 67 68 74 20 6f 66 20 63 75 72 72 65 6e  height of curren
215b0 74 20 73 75 62 2d 73 65 6c 65 63 74 20 2a 2f 0a  t sub-select */.
215c0 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
215d0 4d 49 54 5f 45 58 50 4c 41 49 4e 0a 20 20 69 6e  MIT_EXPLAIN.  in
215e0 74 20 61 64 64 72 45 78 70 6c 61 69 6e 3b 20 20  t addrExplain;  
215f0 20 20 20 20 20 20 20 20 2f 2a 20 41 64 64 72 65          /* Addre
21600 73 73 20 6f 66 20 63 75 72 72 65 6e 74 20 4f 50  ss of current OP
21610 5f 45 78 70 6c 61 69 6e 20 6f 70 63 6f 64 65 20  _Explain opcode 
21620 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 56 4c 69 73  */.#endif.  VLis
21630 74 20 2a 70 56 4c 69 73 74 3b 20 20 20 20 20 20  t *pVList;      
21640 20 20 20 20 20 20 2f 2a 20 4d 61 70 70 69 6e 67        /* Mapping
21650 20 62 65 74 77 65 65 6e 20 76 61 72 69 61 62 6c   between variabl
21660 65 20 6e 61 6d 65 73 20 61 6e 64 20 6e 75 6d 62  e names and numb
21670 65 72 73 20 2a 2f 0a 20 20 56 64 62 65 20 2a 70  ers */.  Vdbe *p
21680 52 65 70 72 65 70 61 72 65 3b 20 20 20 20 20 20  Reprepare;      
21690 20 20 20 2f 2a 20 56 4d 20 62 65 69 6e 67 20 72     /* VM being r
216a0 65 70 72 65 70 61 72 65 64 20 28 73 71 6c 69 74  eprepared (sqlit
216b0 65 33 52 65 70 72 65 70 61 72 65 28 29 29 20 2a  e3Reprepare()) *
216c0 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  /.  const char *
216d0 7a 54 61 69 6c 3b 20 20 20 20 20 20 20 20 2f 2a  zTail;        /*
216e0 20 41 6c 6c 20 53 51 4c 20 74 65 78 74 20 70 61   All SQL text pa
216f0 73 74 20 74 68 65 20 6c 61 73 74 20 73 65 6d 69  st the last semi
21700 63 6f 6c 6f 6e 20 70 61 72 73 65 64 20 2a 2f 0a  colon parsed */.
21710 20 20 54 61 62 6c 65 20 2a 70 4e 65 77 54 61 62    Table *pNewTab
21720 6c 65 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 41  le;         /* A
21730 20 74 61 62 6c 65 20 62 65 69 6e 67 20 63 6f 6e   table being con
21740 73 74 72 75 63 74 65 64 20 62 79 20 43 52 45 41  structed by CREA
21750 54 45 20 54 41 42 4c 45 20 2a 2f 0a 20 20 54 72  TE TABLE */.  Tr
21760 69 67 67 65 72 20 2a 70 4e 65 77 54 72 69 67 67  igger *pNewTrigg
21770 65 72 3b 20 20 20 20 20 2f 2a 20 54 72 69 67 67  er;     /* Trigg
21780 65 72 20 75 6e 64 65 72 20 63 6f 6e 73 74 72 75  er under constru
21790 63 74 20 62 79 20 61 20 43 52 45 41 54 45 20 54  ct by a CREATE T
217a0 52 49 47 47 45 52 20 2a 2f 0a 20 20 63 6f 6e 73  RIGGER */.  cons
217b0 74 20 63 68 61 72 20 2a 7a 41 75 74 68 43 6f 6e  t char *zAuthCon
217c0 74 65 78 74 3b 20 2f 2a 20 54 68 65 20 36 74 68  text; /* The 6th
217d0 20 70 61 72 61 6d 65 74 65 72 20 74 6f 20 64 62   parameter to db
217e0 2d 3e 78 41 75 74 68 20 63 61 6c 6c 62 61 63 6b  ->xAuth callback
217f0 73 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c  s */.#ifndef SQL
21800 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
21810 54 41 42 4c 45 0a 20 20 54 6f 6b 65 6e 20 73 41  TABLE.  Token sA
21820 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  rg;             
21830 20 20 2f 2a 20 43 6f 6d 70 6c 65 74 65 20 74 65    /* Complete te
21840 78 74 20 6f 66 20 61 20 6d 6f 64 75 6c 65 20 61  xt of a module a
21850 72 67 75 6d 65 6e 74 20 2a 2f 0a 20 20 54 61 62  rgument */.  Tab
21860 6c 65 20 2a 2a 61 70 56 74 61 62 4c 6f 63 6b 3b  le **apVtabLock;
21870 20 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65         /* Pointe
21880 72 20 74 6f 20 76 69 72 74 75 61 6c 20 74 61 62  r to virtual tab
21890 6c 65 73 20 6e 65 65 64 69 6e 67 20 6c 6f 63 6b  les needing lock
218a0 69 6e 67 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20  ing */.#endif.  
218b0 54 61 62 6c 65 20 2a 70 5a 6f 6d 62 69 65 54 61  Table *pZombieTa
218c0 62 3b 20 20 20 20 20 20 20 20 2f 2a 20 4c 69 73  b;        /* Lis
218d0 74 20 6f 66 20 54 61 62 6c 65 20 6f 62 6a 65 63  t of Table objec
218e0 74 73 20 74 6f 20 64 65 6c 65 74 65 20 61 66 74  ts to delete aft
218f0 65 72 20 63 6f 64 65 20 67 65 6e 20 2a 2f 0a 20  er code gen */. 
21900 20 54 72 69 67 67 65 72 50 72 67 20 2a 70 54 72   TriggerPrg *pTr
21910 69 67 67 65 72 50 72 67 3b 20 20 2f 2a 20 4c 69  iggerPrg;  /* Li
21920 6e 6b 65 64 20 6c 69 73 74 20 6f 66 20 63 6f 64  nked list of cod
21930 65 64 20 74 72 69 67 67 65 72 73 20 2a 2f 0a 20  ed triggers */. 
21940 20 57 69 74 68 20 2a 70 57 69 74 68 3b 20 20 20   With *pWith;   
21950 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 75             /* Cu
21960 72 72 65 6e 74 20 57 49 54 48 20 63 6c 61 75 73  rrent WITH claus
21970 65 2c 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 20 20  e, or NULL */.  
21980 57 69 74 68 20 2a 70 57 69 74 68 54 6f 46 72 65  With *pWithToFre
21990 65 3b 20 20 20 20 20 20 20 20 2f 2a 20 46 72 65  e;        /* Fre
219a0 65 20 74 68 69 73 20 57 49 54 48 20 6f 62 6a 65  e this WITH obje
219b0 63 74 20 61 74 20 74 68 65 20 65 6e 64 20 6f 66  ct at the end of
219c0 20 74 68 65 20 70 61 72 73 65 20 2a 2f 0a 7d 3b   the parse */.};
219d0 0a 0a 2f 2a 0a 2a 2a 20 53 69 7a 65 73 20 61 6e  ../*.** Sizes an
219e0 64 20 70 6f 69 6e 74 65 72 73 20 6f 66 20 76 61  d pointers of va
219f0 72 69 6f 75 73 20 70 61 72 74 73 20 6f 66 20 74  rious parts of t
21a00 68 65 20 50 61 72 73 65 20 6f 62 6a 65 63 74 2e  he Parse object.
21a10 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 50 41 52 53  .*/.#define PARS
21a20 45 5f 48 44 52 5f 53 5a 20 6f 66 66 73 65 74 6f  E_HDR_SZ offseto
21a30 66 28 50 61 72 73 65 2c 61 43 6f 6c 43 61 63 68  f(Parse,aColCach
21a40 65 29 20 2f 2a 20 52 65 63 75 72 73 69 76 65 20  e) /* Recursive 
21a50 70 61 72 74 20 77 2f 6f 20 61 43 6f 6c 43 61 63  part w/o aColCac
21a60 68 65 2a 2f 0a 23 64 65 66 69 6e 65 20 50 41 52  he*/.#define PAR
21a70 53 45 5f 52 45 43 55 52 53 45 5f 53 5a 20 6f 66  SE_RECURSE_SZ of
21a80 66 73 65 74 6f 66 28 50 61 72 73 65 2c 73 4c 61  fsetof(Parse,sLa
21a90 73 74 54 6f 6b 65 6e 29 20 20 20 20 2f 2a 20 52  stToken)    /* R
21aa0 65 63 75 72 73 69 76 65 20 70 61 72 74 20 2a 2f  ecursive part */
21ab0 0a 23 64 65 66 69 6e 65 20 50 41 52 53 45 5f 54  .#define PARSE_T
21ac0 41 49 4c 5f 53 5a 20 28 73 69 7a 65 6f 66 28 50  AIL_SZ (sizeof(P
21ad0 61 72 73 65 29 2d 50 41 52 53 45 5f 52 45 43 55  arse)-PARSE_RECU
21ae0 52 53 45 5f 53 5a 29 20 2f 2a 20 4e 6f 6e 2d 72  RSE_SZ) /* Non-r
21af0 65 63 75 72 73 69 76 65 20 70 61 72 74 20 2a 2f  ecursive part */
21b00 0a 23 64 65 66 69 6e 65 20 50 41 52 53 45 5f 54  .#define PARSE_T
21b10 41 49 4c 28 58 29 20 28 28 28 63 68 61 72 2a 29  AIL(X) (((char*)
21b20 28 58 29 29 2b 50 41 52 53 45 5f 52 45 43 55 52  (X))+PARSE_RECUR
21b30 53 45 5f 53 5a 29 20 20 2f 2a 20 50 6f 69 6e 74  SE_SZ)  /* Point
21b40 65 72 20 74 6f 20 74 61 69 6c 20 2a 2f 0a 0a 2f  er to tail */../
21b50 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74 72 75 65  *.** Return true
21b60 20 69 66 20 63 75 72 72 65 6e 74 6c 79 20 69 6e   if currently in
21b70 73 69 64 65 20 61 6e 20 73 71 6c 69 74 65 33 5f  side an sqlite3_
21b80 64 65 63 6c 61 72 65 5f 76 74 61 62 28 29 20 63  declare_vtab() c
21b90 61 6c 6c 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53  all..*/.#ifdef S
21ba0 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
21bb0 41 4c 54 41 42 4c 45 0a 20 20 23 64 65 66 69 6e  ALTABLE.  #defin
21bc0 65 20 49 4e 5f 44 45 43 4c 41 52 45 5f 56 54 41  e IN_DECLARE_VTA
21bd0 42 20 30 0a 23 65 6c 73 65 0a 20 20 23 64 65 66  B 0.#else.  #def
21be0 69 6e 65 20 49 4e 5f 44 45 43 4c 41 52 45 5f 56  ine IN_DECLARE_V
21bf0 54 41 42 20 28 70 50 61 72 73 65 2d 3e 64 65 63  TAB (pParse->dec
21c00 6c 61 72 65 56 74 61 62 29 0a 23 65 6e 64 69 66  lareVtab).#endif
21c10 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61  ../*.** An insta
21c20 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f  nce of the follo
21c30 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 20 63  wing structure c
21c40 61 6e 20 62 65 20 64 65 63 6c 61 72 65 64 20 6f  an be declared o
21c50 6e 20 61 20 73 74 61 63 6b 20 61 6e 64 20 75 73  n a stack and us
21c60 65 64 0a 2a 2a 20 74 6f 20 73 61 76 65 20 74 68  ed.** to save th
21c70 65 20 50 61 72 73 65 2e 7a 41 75 74 68 43 6f 6e  e Parse.zAuthCon
21c80 74 65 78 74 20 76 61 6c 75 65 20 73 6f 20 74 68  text value so th
21c90 61 74 20 69 74 20 63 61 6e 20 62 65 20 72 65 73  at it can be res
21ca0 74 6f 72 65 64 20 6c 61 74 65 72 2e 0a 2a 2f 0a  tored later..*/.
21cb0 73 74 72 75 63 74 20 41 75 74 68 43 6f 6e 74 65  struct AuthConte
21cc0 78 74 20 7b 0a 20 20 63 6f 6e 73 74 20 63 68 61  xt {.  const cha
21cd0 72 20 2a 7a 41 75 74 68 43 6f 6e 74 65 78 74 3b  r *zAuthContext;
21ce0 20 20 20 2f 2a 20 50 75 74 20 73 61 76 65 64 20     /* Put saved 
21cf0 50 61 72 73 65 2e 7a 41 75 74 68 43 6f 6e 74 65  Parse.zAuthConte
21d00 78 74 20 68 65 72 65 20 2a 2f 0a 20 20 50 61 72  xt here */.  Par
21d10 73 65 20 2a 70 50 61 72 73 65 3b 20 20 20 20 20  se *pParse;     
21d20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
21d30 50 61 72 73 65 20 73 74 72 75 63 74 75 72 65 20  Parse structure 
21d40 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 42 69 74  */.};../*.** Bit
21d50 66 69 65 6c 64 20 66 6c 61 67 73 20 66 6f 72 20  field flags for 
21d60 50 35 20 76 61 6c 75 65 20 69 6e 20 76 61 72 69  P5 value in vari
21d70 6f 75 73 20 6f 70 63 6f 64 65 73 2e 0a 2a 2a 0a  ous opcodes..**.
21d80 2a 2a 20 56 61 6c 75 65 20 63 6f 6e 73 74 72 61  ** Value constra
21d90 69 6e 74 73 20 28 65 6e 66 6f 72 63 65 64 20 76  ints (enforced v
21da0 69 61 20 61 73 73 65 72 74 28 29 29 3a 0a 2a 2a  ia assert()):.**
21db0 20 20 20 20 4f 50 46 4c 41 47 5f 4c 45 4e 47 54      OPFLAG_LENGT
21dc0 48 41 52 47 20 20 20 20 3d 3d 20 53 51 4c 49 54  HARG    == SQLIT
21dd0 45 5f 46 55 4e 43 5f 4c 45 4e 47 54 48 0a 2a 2a  E_FUNC_LENGTH.**
21de0 20 20 20 20 4f 50 46 4c 41 47 5f 54 59 50 45 4f      OPFLAG_TYPEO
21df0 46 41 52 47 20 20 20 20 3d 3d 20 53 51 4c 49 54  FARG    == SQLIT
21e00 45 5f 46 55 4e 43 5f 54 59 50 45 4f 46 0a 2a 2a  E_FUNC_TYPEOF.**
21e10 20 20 20 20 4f 50 46 4c 41 47 5f 42 55 4c 4b 43      OPFLAG_BULKC
21e20 53 52 20 20 20 20 20 20 3d 3d 20 42 54 52 45 45  SR      == BTREE
21e30 5f 42 55 4c 4b 4c 4f 41 44 0a 2a 2a 20 20 20 20  _BULKLOAD.**    
21e40 4f 50 46 4c 41 47 5f 53 45 45 4b 45 51 20 20 20  OPFLAG_SEEKEQ   
21e50 20 20 20 20 3d 3d 20 42 54 52 45 45 5f 53 45 45      == BTREE_SEE
21e60 4b 5f 45 51 0a 2a 2a 20 20 20 20 4f 50 46 4c 41  K_EQ.**    OPFLA
21e70 47 5f 46 4f 52 44 45 4c 45 54 45 20 20 20 20 3d  G_FORDELETE    =
21e80 3d 20 42 54 52 45 45 5f 46 4f 52 44 45 4c 45 54  = BTREE_FORDELET
21e90 45 0a 2a 2a 20 20 20 20 4f 50 46 4c 41 47 5f 53  E.**    OPFLAG_S
21ea0 41 56 45 50 4f 53 49 54 49 4f 4e 20 3d 3d 20 42  AVEPOSITION == B
21eb0 54 52 45 45 5f 53 41 56 45 50 4f 53 49 54 49 4f  TREE_SAVEPOSITIO
21ec0 4e 0a 2a 2a 20 20 20 20 4f 50 46 4c 41 47 5f 41  N.**    OPFLAG_A
21ed0 55 58 44 45 4c 45 54 45 20 20 20 20 3d 3d 20 42  UXDELETE    == B
21ee0 54 52 45 45 5f 41 55 58 44 45 4c 45 54 45 0a 2a  TREE_AUXDELETE.*
21ef0 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47  /.#define OPFLAG
21f00 5f 4e 43 48 41 4e 47 45 20 20 20 20 20 20 20 30  _NCHANGE       0
21f10 78 30 31 20 20 20 20 2f 2a 20 4f 50 5f 49 6e 73  x01    /* OP_Ins
21f20 65 72 74 3a 20 53 65 74 20 74 6f 20 75 70 64 61  ert: Set to upda
21f30 74 65 20 64 62 2d 3e 6e 43 68 61 6e 67 65 20 2a  te db->nChange *
21f40 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  /.              
21f50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21f60 20 20 20 20 20 20 20 2f 2a 20 41 6c 73 6f 20 75         /* Also u
21f70 73 65 64 20 69 6e 20 50 32 20 28 6e 6f 74 20 50  sed in P2 (not P
21f80 35 29 20 6f 66 20 4f 50 5f 44 65 6c 65 74 65 20  5) of OP_Delete 
21f90 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41  */.#define OPFLA
21fa0 47 5f 45 50 48 45 4d 20 20 20 20 20 20 20 20 20  G_EPHEM         
21fb0 30 78 30 31 20 20 20 20 2f 2a 20 4f 50 5f 43 6f  0x01    /* OP_Co
21fc0 6c 75 6d 6e 3a 20 45 70 68 65 6d 65 72 61 6c 20  lumn: Ephemeral 
21fd0 6f 75 74 70 75 74 20 69 73 20 6f 6b 20 2a 2f 0a  output is ok */.
21fe0 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 4c  #define OPFLAG_L
21ff0 41 53 54 52 4f 57 49 44 20 20 20 20 20 30 78 32  ASTROWID     0x2
22000 30 20 20 20 20 2f 2a 20 53 65 74 20 74 6f 20 75  0    /* Set to u
22010 70 64 61 74 65 20 64 62 2d 3e 6c 61 73 74 52 6f  pdate db->lastRo
22020 77 69 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  wid */.#define O
22030 50 46 4c 41 47 5f 49 53 55 50 44 41 54 45 20 20  PFLAG_ISUPDATE  
22040 20 20 20 20 30 78 30 34 20 20 20 20 2f 2a 20 54      0x04    /* T
22050 68 69 73 20 4f 50 5f 49 6e 73 65 72 74 20 69 73  his OP_Insert is
22060 20 61 6e 20 73 71 6c 20 55 50 44 41 54 45 20 2a   an sql UPDATE *
22070 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47  /.#define OPFLAG
22080 5f 41 50 50 45 4e 44 20 20 20 20 20 20 20 20 30  _APPEND        0
22090 78 30 38 20 20 20 20 2f 2a 20 54 68 69 73 20 69  x08    /* This i
220a0 73 20 6c 69 6b 65 6c 79 20 74 6f 20 62 65 20 61  s likely to be a
220b0 6e 20 61 70 70 65 6e 64 20 2a 2f 0a 23 64 65 66  n append */.#def
220c0 69 6e 65 20 4f 50 46 4c 41 47 5f 55 53 45 53 45  ine OPFLAG_USESE
220d0 45 4b 52 45 53 55 4c 54 20 30 78 31 30 20 20 20  EKRESULT 0x10   
220e0 20 2f 2a 20 54 72 79 20 74 6f 20 61 76 6f 69 64   /* Try to avoid
220f0 20 61 20 73 65 65 6b 20 69 6e 20 42 74 72 65 65   a seek in Btree
22100 49 6e 73 65 72 74 28 29 20 2a 2f 0a 23 64 65 66  Insert() */.#def
22110 69 6e 65 20 4f 50 46 4c 41 47 5f 49 53 4e 4f 4f  ine OPFLAG_ISNOO
22120 50 20 20 20 20 20 20 20 20 30 78 34 30 20 20 20  P        0x40   
22130 20 2f 2a 20 4f 50 5f 44 65 6c 65 74 65 20 64 6f   /* OP_Delete do
22140 65 73 20 70 72 65 2d 75 70 64 61 74 65 2d 68 6f  es pre-update-ho
22150 6f 6b 20 6f 6e 6c 79 20 2a 2f 0a 23 64 65 66 69  ok only */.#defi
22160 6e 65 20 4f 50 46 4c 41 47 5f 4c 45 4e 47 54 48  ne OPFLAG_LENGTH
22170 41 52 47 20 20 20 20 20 30 78 34 30 20 20 20 20  ARG     0x40    
22180 2f 2a 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 6e 6c  /* OP_Column onl
22190 79 20 75 73 65 64 20 66 6f 72 20 6c 65 6e 67 74  y used for lengt
221a0 68 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  h() */.#define O
221b0 50 46 4c 41 47 5f 54 59 50 45 4f 46 41 52 47 20  PFLAG_TYPEOFARG 
221c0 20 20 20 20 30 78 38 30 20 20 20 20 2f 2a 20 4f      0x80    /* O
221d0 50 5f 43 6f 6c 75 6d 6e 20 6f 6e 6c 79 20 75 73  P_Column only us
221e0 65 64 20 66 6f 72 20 74 79 70 65 6f 66 28 29 20  ed for typeof() 
221f0 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41  */.#define OPFLA
22200 47 5f 42 55 4c 4b 43 53 52 20 20 20 20 20 20 20  G_BULKCSR       
22210 30 78 30 31 20 20 20 20 2f 2a 20 4f 50 5f 4f 70  0x01    /* OP_Op
22220 65 6e 2a 2a 20 75 73 65 64 20 74 6f 20 6f 70 65  en** used to ope
22230 6e 20 62 75 6c 6b 20 63 75 72 73 6f 72 20 2a 2f  n bulk cursor */
22240 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f  .#define OPFLAG_
22250 53 45 45 4b 45 51 20 20 20 20 20 20 20 20 30 78  SEEKEQ        0x
22260 30 32 20 20 20 20 2f 2a 20 4f 50 5f 4f 70 65 6e  02    /* OP_Open
22270 2a 2a 20 63 75 72 73 6f 72 20 75 73 65 73 20 45  ** cursor uses E
22280 51 20 73 65 65 6b 20 6f 6e 6c 79 20 2a 2f 0a 23  Q seek only */.#
22290 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 46 4f  define OPFLAG_FO
222a0 52 44 45 4c 45 54 45 20 20 20 20 20 30 78 30 38  RDELETE     0x08
222b0 20 20 20 20 2f 2a 20 4f 50 5f 4f 70 65 6e 20 73      /* OP_Open s
222c0 68 6f 75 6c 64 20 75 73 65 20 42 54 52 45 45 5f  hould use BTREE_
222d0 46 4f 52 44 45 4c 45 54 45 20 2a 2f 0a 23 64 65  FORDELETE */.#de
222e0 66 69 6e 65 20 4f 50 46 4c 41 47 5f 50 32 49 53  fine OPFLAG_P2IS
222f0 52 45 47 20 20 20 20 20 20 20 30 78 31 30 20 20  REG       0x10  
22300 20 20 2f 2a 20 50 32 20 74 6f 20 4f 50 5f 4f 70    /* P2 to OP_Op
22310 65 6e 2a 2a 20 69 73 20 61 20 72 65 67 69 73 74  en** is a regist
22320 65 72 20 6e 75 6d 62 65 72 20 2a 2f 0a 23 64 65  er number */.#de
22330 66 69 6e 65 20 4f 50 46 4c 41 47 5f 50 45 52 4d  fine OPFLAG_PERM
22340 55 54 45 20 20 20 20 20 20 20 30 78 30 31 20 20  UTE       0x01  
22350 20 20 2f 2a 20 4f 50 5f 43 6f 6d 70 61 72 65 3a    /* OP_Compare:
22360 20 75 73 65 20 74 68 65 20 70 65 72 6d 75 74 61   use the permuta
22370 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  tion */.#define 
22380 4f 50 46 4c 41 47 5f 53 41 56 45 50 4f 53 49 54  OPFLAG_SAVEPOSIT
22390 49 4f 4e 20 20 30 78 30 32 20 20 20 20 2f 2a 20  ION  0x02    /* 
223a0 4f 50 5f 44 65 6c 65 74 65 2f 49 6e 73 65 72 74  OP_Delete/Insert
223b0 3a 20 73 61 76 65 20 63 75 72 73 6f 72 20 70 6f  : save cursor po
223c0 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46  s */.#define OPF
223d0 4c 41 47 5f 41 55 58 44 45 4c 45 54 45 20 20 20  LAG_AUXDELETE   
223e0 20 20 30 78 30 34 20 20 20 20 2f 2a 20 4f 50 5f    0x04    /* OP_
223f0 44 65 6c 65 74 65 3a 20 69 6e 64 65 78 20 69 6e  Delete: index in
22400 20 61 20 44 45 4c 45 54 45 20 6f 70 20 2a 2f 0a   a DELETE op */.
22410 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 4e  #define OPFLAG_N
22420 4f 43 48 4e 47 5f 4d 41 47 49 43 20 20 30 78 36  OCHNG_MAGIC  0x6
22430 64 20 20 20 20 2f 2a 20 4f 50 5f 4d 61 6b 65 52  d    /* OP_MakeR
22440 65 63 6f 72 64 3a 20 73 65 72 69 61 6c 74 79 70  ecord: serialtyp
22450 65 20 31 30 20 69 73 20 6f 6b 20 2a 2f 0a 0a 2f  e 10 is ok */../
22460 2a 0a 20 2a 20 45 61 63 68 20 74 72 69 67 67 65  *. * Each trigge
22470 72 20 70 72 65 73 65 6e 74 20 69 6e 20 74 68 65  r present in the
22480 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61   database schema
22490 20 69 73 20 73 74 6f 72 65 64 20 61 73 20 61 6e   is stored as an
224a0 20 69 6e 73 74 61 6e 63 65 20 6f 66 0a 20 2a 20   instance of. * 
224b0 73 74 72 75 63 74 20 54 72 69 67 67 65 72 2e 0a  struct Trigger..
224c0 20 2a 0a 20 2a 20 50 6f 69 6e 74 65 72 73 20 74   *. * Pointers t
224d0 6f 20 69 6e 73 74 61 6e 63 65 73 20 6f 66 20 73  o instances of s
224e0 74 72 75 63 74 20 54 72 69 67 67 65 72 20 61 72  truct Trigger ar
224f0 65 20 73 74 6f 72 65 64 20 69 6e 20 74 77 6f 20  e stored in two 
22500 77 61 79 73 2e 0a 20 2a 20 31 2e 20 49 6e 20 74  ways.. * 1. In t
22510 68 65 20 22 74 72 69 67 48 61 73 68 22 20 68 61  he "trigHash" ha
22520 73 68 20 74 61 62 6c 65 20 28 70 61 72 74 20 6f  sh table (part o
22530 66 20 74 68 65 20 73 71 6c 69 74 65 33 2a 20 74  f the sqlite3* t
22540 68 61 74 20 72 65 70 72 65 73 65 6e 74 73 20 74  hat represents t
22550 68 65 0a 20 2a 20 20 20 20 64 61 74 61 62 61 73  he. *    databas
22560 65 29 2e 20 54 68 69 73 20 61 6c 6c 6f 77 73 20  e). This allows 
22570 54 72 69 67 67 65 72 20 73 74 72 75 63 74 75 72  Trigger structur
22580 65 73 20 74 6f 20 62 65 20 72 65 74 72 69 65 76  es to be retriev
22590 65 64 20 62 79 20 6e 61 6d 65 2e 0a 20 2a 20 32  ed by name.. * 2
225a0 2e 20 41 6c 6c 20 74 72 69 67 67 65 72 73 20 61  . All triggers a
225b0 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 61  ssociated with a
225c0 20 73 69 6e 67 6c 65 20 74 61 62 6c 65 20 66 6f   single table fo
225d0 72 6d 20 61 20 6c 69 6e 6b 65 64 20 6c 69 73 74  rm a linked list
225e0 2c 20 75 73 69 6e 67 20 74 68 65 0a 20 2a 20 20  , using the. *  
225f0 20 20 70 4e 65 78 74 20 6d 65 6d 62 65 72 20 6f    pNext member o
22600 66 20 73 74 72 75 63 74 20 54 72 69 67 67 65 72  f struct Trigger
22610 2e 20 41 20 70 6f 69 6e 74 65 72 20 74 6f 20 74  . A pointer to t
22620 68 65 20 66 69 72 73 74 20 65 6c 65 6d 65 6e 74  he first element
22630 20 6f 66 20 74 68 65 0a 20 2a 20 20 20 20 6c 69   of the. *    li
22640 6e 6b 65 64 20 6c 69 73 74 20 69 73 20 73 74 6f  nked list is sto
22650 72 65 64 20 61 73 20 74 68 65 20 22 70 54 72 69  red as the "pTri
22660 67 67 65 72 22 20 6d 65 6d 62 65 72 20 6f 66 20  gger" member of 
22670 74 68 65 20 61 73 73 6f 63 69 61 74 65 64 0a 20  the associated. 
22680 2a 20 20 20 20 73 74 72 75 63 74 20 54 61 62 6c  *    struct Tabl
22690 65 2e 0a 20 2a 0a 20 2a 20 54 68 65 20 22 73 74  e.. *. * The "st
226a0 65 70 5f 6c 69 73 74 22 20 6d 65 6d 62 65 72 20  ep_list" member 
226b0 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 66 69  points to the fi
226c0 72 73 74 20 65 6c 65 6d 65 6e 74 20 6f 66 20 61  rst element of a
226d0 20 6c 69 6e 6b 65 64 20 6c 69 73 74 0a 20 2a 20   linked list. * 
226e0 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 53  containing the S
226f0 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 73 70  QL statements sp
22700 65 63 69 66 69 65 64 20 61 73 20 74 68 65 20 74  ecified as the t
22710 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d 2e 0a  rigger program..
22720 20 2a 2f 0a 73 74 72 75 63 74 20 54 72 69 67 67   */.struct Trigg
22730 65 72 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61  er {.  char *zNa
22740 6d 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  me;            /
22750 2a 20 54 68 65 20 6e 61 6d 65 20 6f 66 20 74 68  * The name of th
22760 65 20 74 72 69 67 67 65 72 20 20 20 20 20 20 20  e trigger       
22770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22780 20 2a 2f 0a 20 20 63 68 61 72 20 2a 74 61 62 6c   */.  char *tabl
22790 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  e;            /*
227a0 20 54 68 65 20 74 61 62 6c 65 20 6f 72 20 76 69   The table or vi
227b0 65 77 20 74 6f 20 77 68 69 63 68 20 74 68 65 20  ew to which the 
227c0 74 72 69 67 67 65 72 20 61 70 70 6c 69 65 73 20  trigger applies 
227d0 2a 2f 0a 20 20 75 38 20 6f 70 3b 20 20 20 20 20  */.  u8 op;     
227e0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
227f0 4f 6e 65 20 6f 66 20 54 4b 5f 44 45 4c 45 54 45  One of TK_DELETE
22800 2c 20 54 4b 5f 55 50 44 41 54 45 2c 20 54 4b 5f  , TK_UPDATE, TK_
22810 49 4e 53 45 52 54 20 20 20 20 20 20 20 20 20 2a  INSERT         *
22820 2f 0a 20 20 75 38 20 74 72 5f 74 6d 3b 20 20 20  /.  u8 tr_tm;   
22830 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f              /* O
22840 6e 65 20 6f 66 20 54 52 49 47 47 45 52 5f 42 45  ne of TRIGGER_BE
22850 46 4f 52 45 2c 20 54 52 49 47 47 45 52 5f 41 46  FORE, TRIGGER_AF
22860 54 45 52 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70  TER */.  Expr *p
22870 57 68 65 6e 3b 20 20 20 20 20 20 20 20 20 20 20  When;           
22880 20 2f 2a 20 54 68 65 20 57 48 45 4e 20 63 6c 61   /* The WHEN cla
22890 75 73 65 20 6f 66 20 74 68 65 20 65 78 70 72 65  use of the expre
228a0 73 73 69 6f 6e 20 28 6d 61 79 20 62 65 20 4e 55  ssion (may be NU
228b0 4c 4c 29 20 2a 2f 0a 20 20 49 64 4c 69 73 74 20  LL) */.  IdList 
228c0 2a 70 43 6f 6c 75 6d 6e 73 3b 20 20 20 20 20 20  *pColumns;      
228d0 20 2f 2a 20 49 66 20 74 68 69 73 20 69 73 20 61   /* If this is a
228e0 6e 20 55 50 44 41 54 45 20 4f 46 20 3c 63 6f 6c  n UPDATE OF <col
228f0 75 6d 6e 2d 6c 69 73 74 3e 20 74 72 69 67 67 65  umn-list> trigge
22900 72 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  r,.             
22910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22920 74 68 65 20 3c 63 6f 6c 75 6d 6e 2d 6c 69 73 74  the <column-list
22930 3e 20 69 73 20 73 74 6f 72 65 64 20 68 65 72 65  > is stored here
22940 20 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70 53   */.  Schema *pS
22950 63 68 65 6d 61 3b 20 20 20 20 20 20 20 20 2f 2a  chema;        /*
22960 20 53 63 68 65 6d 61 20 63 6f 6e 74 61 69 6e 69   Schema containi
22970 6e 67 20 74 68 65 20 74 72 69 67 67 65 72 20 2a  ng the trigger *
22980 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70 54 61 62  /.  Schema *pTab
22990 53 63 68 65 6d 61 3b 20 20 20 20 20 2f 2a 20 53  Schema;     /* S
229a0 63 68 65 6d 61 20 63 6f 6e 74 61 69 6e 69 6e 67  chema containing
229b0 20 74 68 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20   the table */.  
229c0 54 72 69 67 67 65 72 53 74 65 70 20 2a 73 74 65  TriggerStep *ste
229d0 70 5f 6c 69 73 74 3b 20 2f 2a 20 4c 69 6e 6b 20  p_list; /* Link 
229e0 6c 69 73 74 20 6f 66 20 74 72 69 67 67 65 72 20  list of trigger 
229f0 70 72 6f 67 72 61 6d 20 73 74 65 70 73 20 20 20  program steps   
22a00 20 20 20 20 20 20 20 20 20 20 2a 2f 0a 20 20 54            */.  T
22a10 72 69 67 67 65 72 20 2a 70 4e 65 78 74 3b 20 20  rigger *pNext;  
22a20 20 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 74         /* Next t
22a30 72 69 67 67 65 72 20 61 73 73 6f 63 69 61 74 65  rigger associate
22a40 64 20 77 69 74 68 20 74 68 65 20 74 61 62 6c 65  d with the table
22a50 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20   */.};../*.** A 
22a60 74 72 69 67 67 65 72 20 69 73 20 65 69 74 68 65  trigger is eithe
22a70 72 20 61 20 42 45 46 4f 52 45 20 6f 72 20 61 6e  r a BEFORE or an
22a80 20 41 46 54 45 52 20 74 72 69 67 67 65 72 2e 20   AFTER trigger. 
22a90 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 63   The following c
22aa0 6f 6e 73 74 61 6e 74 73 0a 2a 2a 20 64 65 74 65  onstants.** dete
22ab0 72 6d 69 6e 65 20 77 68 69 63 68 2e 0a 2a 2a 0a  rmine which..**.
22ac0 2a 2a 20 49 66 20 74 68 65 72 65 20 61 72 65 20  ** If there are 
22ad0 6d 75 6c 74 69 70 6c 65 20 74 72 69 67 67 65 72  multiple trigger
22ae0 73 2c 20 79 6f 75 20 6d 69 67 68 74 20 6f 66 20  s, you might of 
22af0 73 6f 6d 65 20 42 45 46 4f 52 45 20 61 6e 64 20  some BEFORE and 
22b00 73 6f 6d 65 20 41 46 54 45 52 2e 0a 2a 2a 20 49  some AFTER..** I
22b10 6e 20 74 68 61 74 20 63 61 73 65 73 2c 20 74 68  n that cases, th
22b20 65 20 63 6f 6e 73 74 61 6e 74 73 20 62 65 6c 6f  e constants belo
22b30 77 20 63 61 6e 20 62 65 20 4f 52 65 64 20 74 6f  w can be ORed to
22b40 67 65 74 68 65 72 2e 0a 2a 2f 0a 23 64 65 66 69  gether..*/.#defi
22b50 6e 65 20 54 52 49 47 47 45 52 5f 42 45 46 4f 52  ne TRIGGER_BEFOR
22b60 45 20 20 31 0a 23 64 65 66 69 6e 65 20 54 52 49  E  1.#define TRI
22b70 47 47 45 52 5f 41 46 54 45 52 20 20 20 32 0a 0a  GGER_AFTER   2..
22b80 2f 2a 0a 20 2a 20 41 6e 20 69 6e 73 74 61 6e 63  /*. * An instanc
22b90 65 20 6f 66 20 73 74 72 75 63 74 20 54 72 69 67  e of struct Trig
22ba0 67 65 72 53 74 65 70 20 69 73 20 75 73 65 64 20  gerStep is used 
22bb0 74 6f 20 73 74 6f 72 65 20 61 20 73 69 6e 67 6c  to store a singl
22bc0 65 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 0a  e SQL statement.
22bd0 20 2a 20 74 68 61 74 20 69 73 20 61 20 70 61 72   * that is a par
22be0 74 20 6f 66 20 61 20 74 72 69 67 67 65 72 2d 70  t of a trigger-p
22bf0 72 6f 67 72 61 6d 2e 0a 20 2a 0a 20 2a 20 49 6e  rogram.. *. * In
22c00 73 74 61 6e 63 65 73 20 6f 66 20 73 74 72 75 63  stances of struc
22c10 74 20 54 72 69 67 67 65 72 53 74 65 70 20 61 72  t TriggerStep ar
22c20 65 20 73 74 6f 72 65 64 20 69 6e 20 61 20 73 69  e stored in a si
22c30 6e 67 6c 79 20 6c 69 6e 6b 65 64 20 6c 69 73 74  ngly linked list
22c40 20 28 6c 69 6e 6b 65 64 0a 20 2a 20 75 73 69 6e   (linked. * usin
22c50 67 20 74 68 65 20 22 70 4e 65 78 74 22 20 6d 65  g the "pNext" me
22c60 6d 62 65 72 29 20 72 65 66 65 72 65 6e 63 65 64  mber) referenced
22c70 20 62 79 20 74 68 65 20 22 73 74 65 70 5f 6c 69   by the "step_li
22c80 73 74 22 20 6d 65 6d 62 65 72 20 6f 66 20 74 68  st" member of th
22c90 65 0a 20 2a 20 61 73 73 6f 63 69 61 74 65 64 20  e. * associated 
22ca0 73 74 72 75 63 74 20 54 72 69 67 67 65 72 20 69  struct Trigger i
22cb0 6e 73 74 61 6e 63 65 2e 20 54 68 65 20 66 69 72  nstance. The fir
22cc0 73 74 20 65 6c 65 6d 65 6e 74 20 6f 66 20 74 68  st element of th
22cd0 65 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 69 73  e linked list is
22ce0 0a 20 2a 20 74 68 65 20 66 69 72 73 74 20 73 74  . * the first st
22cf0 65 70 20 6f 66 20 74 68 65 20 74 72 69 67 67 65  ep of the trigge
22d00 72 2d 70 72 6f 67 72 61 6d 2e 0a 20 2a 0a 20 2a  r-program.. *. *
22d10 20 54 68 65 20 22 6f 70 22 20 6d 65 6d 62 65 72   The "op" member
22d20 20 69 6e 64 69 63 61 74 65 73 20 77 68 65 74 68   indicates wheth
22d30 65 72 20 74 68 69 73 20 69 73 20 61 20 22 44 45  er this is a "DE
22d40 4c 45 54 45 22 2c 20 22 49 4e 53 45 52 54 22 2c  LETE", "INSERT",
22d50 20 22 55 50 44 41 54 45 22 20 6f 72 0a 20 2a 20   "UPDATE" or. * 
22d60 22 53 45 4c 45 43 54 22 20 73 74 61 74 65 6d 65  "SELECT" stateme
22d70 6e 74 2e 20 54 68 65 20 6d 65 61 6e 69 6e 67 73  nt. The meanings
22d80 20 6f 66 20 74 68 65 20 6f 74 68 65 72 20 6d 65   of the other me
22d90 6d 62 65 72 73 20 69 73 20 64 65 74 65 72 6d 69  mbers is determi
22da0 6e 65 64 20 62 79 20 74 68 65 0a 20 2a 20 76 61  ned by the. * va
22db0 6c 75 65 20 6f 66 20 22 6f 70 22 20 61 73 20 66  lue of "op" as f
22dc0 6f 6c 6c 6f 77 73 3a 0a 20 2a 0a 20 2a 20 28 6f  ollows:. *. * (o
22dd0 70 20 3d 3d 20 54 4b 5f 49 4e 53 45 52 54 29 0a  p == TK_INSERT).
22de0 20 2a 20 6f 72 63 6f 6e 66 20 20 20 20 2d 3e 20   * orconf    -> 
22df0 73 74 6f 72 65 73 20 74 68 65 20 4f 4e 20 43 4f  stores the ON CO
22e00 4e 46 4c 49 43 54 20 61 6c 67 6f 72 69 74 68 6d  NFLICT algorithm
22e10 0a 20 2a 20 70 53 65 6c 65 63 74 20 20 20 2d 3e  . * pSelect   ->
22e20 20 49 66 20 74 68 69 73 20 69 73 20 61 6e 20 49   If this is an I
22e30 4e 53 45 52 54 20 49 4e 54 4f 20 2e 2e 2e 20 53  NSERT INTO ... S
22e40 45 4c 45 43 54 20 2e 2e 2e 20 73 74 61 74 65 6d  ELECT ... statem
22e50 65 6e 74 2c 20 74 68 65 6e 0a 20 2a 20 20 20 20  ent, then. *    
22e60 20 20 20 20 20 20 20 20 20 20 74 68 69 73 20 73            this s
22e70 74 6f 72 65 73 20 61 20 70 6f 69 6e 74 65 72 20  tores a pointer 
22e80 74 6f 20 74 68 65 20 53 45 4c 45 43 54 20 73 74  to the SELECT st
22e90 61 74 65 6d 65 6e 74 2e 20 4f 74 68 65 72 77 69  atement. Otherwi
22ea0 73 65 20 4e 55 4c 4c 2e 0a 20 2a 20 7a 54 61 72  se NULL.. * zTar
22eb0 67 65 74 20 20 20 2d 3e 20 44 65 71 75 6f 74 65  get   -> Dequote
22ec0 64 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 61  d name of the ta
22ed0 62 6c 65 20 74 6f 20 69 6e 73 65 72 74 20 69 6e  ble to insert in
22ee0 74 6f 2e 0a 20 2a 20 70 45 78 70 72 4c 69 73 74  to.. * pExprList
22ef0 20 2d 3e 20 49 66 20 74 68 69 73 20 69 73 20 61   -> If this is a
22f00 6e 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 2e 2e  n INSERT INTO ..
22f10 2e 20 56 41 4c 55 45 53 20 2e 2e 2e 20 73 74 61  . VALUES ... sta
22f20 74 65 6d 65 6e 74 2c 20 74 68 65 6e 0a 20 2a 20  tement, then. * 
22f30 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69               thi
22f40 73 20 73 74 6f 72 65 73 20 76 61 6c 75 65 73 20  s stores values 
22f50 74 6f 20 62 65 20 69 6e 73 65 72 74 65 64 2e 20  to be inserted. 
22f60 4f 74 68 65 72 77 69 73 65 20 4e 55 4c 4c 2e 0a  Otherwise NULL..
22f70 20 2a 20 70 49 64 4c 69 73 74 20 20 20 2d 3e 20   * pIdList   -> 
22f80 49 66 20 74 68 69 73 20 69 73 20 61 6e 20 49 4e  If this is an IN
22f90 53 45 52 54 20 49 4e 54 4f 20 2e 2e 2e 20 28 3c  SERT INTO ... (<
22fa0 63 6f 6c 75 6d 6e 2d 6e 61 6d 65 73 3e 29 20 56  column-names>) V
22fb0 41 4c 55 45 53 20 2e 2e 2e 0a 20 2a 20 20 20 20  ALUES .... *    
22fc0 20 20 20 20 20 20 20 20 20 20 73 74 61 74 65 6d            statem
22fd0 65 6e 74 2c 20 74 68 65 6e 20 74 68 69 73 20 73  ent, then this s
22fe0 74 6f 72 65 73 20 74 68 65 20 63 6f 6c 75 6d 6e  tores the column
22ff0 2d 6e 61 6d 65 73 20 74 6f 20 62 65 0a 20 2a 20  -names to be. * 
23000 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 73               ins
23010 65 72 74 65 64 20 69 6e 74 6f 2e 0a 20 2a 0a 20  erted into.. *. 
23020 2a 20 28 6f 70 20 3d 3d 20 54 4b 5f 44 45 4c 45  * (op == TK_DELE
23030 54 45 29 0a 20 2a 20 7a 54 61 72 67 65 74 20 20  TE). * zTarget  
23040 20 2d 3e 20 44 65 71 75 6f 74 65 64 20 6e 61 6d   -> Dequoted nam
23050 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 74  e of the table t
23060 6f 20 64 65 6c 65 74 65 20 66 72 6f 6d 2e 0a 20  o delete from.. 
23070 2a 20 70 57 68 65 72 65 20 20 20 20 2d 3e 20 54  * pWhere    -> T
23080 68 65 20 57 48 45 52 45 20 63 6c 61 75 73 65 20  he WHERE clause 
23090 6f 66 20 74 68 65 20 44 45 4c 45 54 45 20 73 74  of the DELETE st
230a0 61 74 65 6d 65 6e 74 20 69 66 20 6f 6e 65 20 69  atement if one i
230b0 73 20 73 70 65 63 69 66 69 65 64 2e 0a 20 2a 20  s specified.. * 
230c0 20 20 20 20 20 20 20 20 20 20 20 20 20 4f 74 68               Oth
230d0 65 72 77 69 73 65 20 4e 55 4c 4c 2e 0a 20 2a 0a  erwise NULL.. *.
230e0 20 2a 20 28 6f 70 20 3d 3d 20 54 4b 5f 55 50 44   * (op == TK_UPD
230f0 41 54 45 29 0a 20 2a 20 7a 54 61 72 67 65 74 20  ATE). * zTarget 
23100 20 20 2d 3e 20 44 65 71 75 6f 74 65 64 20 6e 61    -> Dequoted na
23110 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20  me of the table 
23120 74 6f 20 75 70 64 61 74 65 2e 0a 20 2a 20 70 57  to update.. * pW
23130 68 65 72 65 20 20 20 20 2d 3e 20 54 68 65 20 57  here    -> The W
23140 48 45 52 45 20 63 6c 61 75 73 65 20 6f 66 20 74  HERE clause of t
23150 68 65 20 55 50 44 41 54 45 20 73 74 61 74 65 6d  he UPDATE statem
23160 65 6e 74 20 69 66 20 6f 6e 65 20 69 73 20 73 70  ent if one is sp
23170 65 63 69 66 69 65 64 2e 0a 20 2a 20 20 20 20 20  ecified.. *     
23180 20 20 20 20 20 20 20 20 20 4f 74 68 65 72 77 69           Otherwi
23190 73 65 20 4e 55 4c 4c 2e 0a 20 2a 20 70 45 78 70  se NULL.. * pExp
231a0 72 4c 69 73 74 20 2d 3e 20 41 20 6c 69 73 74 20  rList -> A list 
231b0 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 73 20 74  of the columns t
231c0 6f 20 75 70 64 61 74 65 20 61 6e 64 20 74 68 65  o update and the
231d0 20 65 78 70 72 65 73 73 69 6f 6e 73 20 74 6f 20   expressions to 
231e0 75 70 64 61 74 65 0a 20 2a 20 20 20 20 20 20 20  update. *       
231f0 20 20 20 20 20 20 20 74 68 65 6d 20 74 6f 2e 20         them to. 
23200 53 65 65 20 73 71 6c 69 74 65 33 55 70 64 61 74  See sqlite3Updat
23210 65 28 29 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f  e() documentatio
23220 6e 20 6f 66 20 22 70 43 68 61 6e 67 65 73 22 0a  n of "pChanges".
23230 20 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20   *              
23240 61 72 67 75 6d 65 6e 74 2e 0a 20 2a 0a 20 2a 2f  argument.. *. */
23250 0a 73 74 72 75 63 74 20 54 72 69 67 67 65 72 53  .struct TriggerS
23260 74 65 70 20 7b 0a 20 20 75 38 20 6f 70 3b 20 20  tep {.  u8 op;  
23270 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
23280 4f 6e 65 20 6f 66 20 54 4b 5f 44 45 4c 45 54 45  One of TK_DELETE
23290 2c 20 54 4b 5f 55 50 44 41 54 45 2c 20 54 4b 5f  , TK_UPDATE, TK_
232a0 49 4e 53 45 52 54 2c 20 54 4b 5f 53 45 4c 45 43  INSERT, TK_SELEC
232b0 54 20 2a 2f 0a 20 20 75 38 20 6f 72 63 6f 6e 66  T */.  u8 orconf
232c0 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f  ;           /* O
232d0 45 5f 52 6f 6c 6c 62 61 63 6b 20 65 74 63 2e 20  E_Rollback etc. 
232e0 2a 2f 0a 20 20 54 72 69 67 67 65 72 20 2a 70 54  */.  Trigger *pT
232f0 72 69 67 3b 20 20 20 20 20 20 2f 2a 20 54 68 65  rig;      /* The
23300 20 74 72 69 67 67 65 72 20 74 68 61 74 20 74 68   trigger that th
23310 69 73 20 73 74 65 70 20 69 73 20 61 20 70 61 72  is step is a par
23320 74 20 6f 66 20 2a 2f 0a 20 20 53 65 6c 65 63 74  t of */.  Select
23330 20 2a 70 53 65 6c 65 63 74 3b 20 20 20 20 20 2f   *pSelect;     /
23340 2a 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  * SELECT stateme
23350 6e 74 20 6f 72 20 52 48 53 20 6f 66 20 49 4e 53  nt or RHS of INS
23360 45 52 54 20 49 4e 54 4f 20 53 45 4c 45 43 54 20  ERT INTO SELECT 
23370 2e 2e 2e 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a  ... */.  char *z
23380 54 61 72 67 65 74 3b 20 20 20 20 20 20 20 2f 2a  Target;       /*
23390 20 54 61 72 67 65 74 20 74 61 62 6c 65 20 66 6f   Target table fo
233a0 72 20 44 45 4c 45 54 45 2c 20 55 50 44 41 54 45  r DELETE, UPDATE
233b0 2c 20 49 4e 53 45 52 54 20 2a 2f 0a 20 20 45 78  , INSERT */.  Ex
233c0 70 72 20 2a 70 57 68 65 72 65 3b 20 20 20 20 20  pr *pWhere;     
233d0 20 20 20 2f 2a 20 54 68 65 20 57 48 45 52 45 20     /* The WHERE 
233e0 63 6c 61 75 73 65 20 66 6f 72 20 44 45 4c 45 54  clause for DELET
233f0 45 20 6f 72 20 55 50 44 41 54 45 20 73 74 65 70  E or UPDATE step
23400 73 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20  s */.  ExprList 
23410 2a 70 45 78 70 72 4c 69 73 74 3b 20 2f 2a 20 53  *pExprList; /* S
23420 45 54 20 63 6c 61 75 73 65 20 66 6f 72 20 55 50  ET clause for UP
23430 44 41 54 45 20 2a 2f 0a 20 20 49 64 4c 69 73 74  DATE */.  IdList
23440 20 2a 70 49 64 4c 69 73 74 3b 20 20 20 20 20 2f   *pIdList;     /
23450 2a 20 43 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 66  * Column names f
23460 6f 72 20 49 4e 53 45 52 54 20 2a 2f 0a 20 20 55  or INSERT */.  U
23470 70 73 65 72 74 20 2a 70 55 70 73 65 72 74 3b 20  psert *pUpsert; 
23480 20 20 20 20 2f 2a 20 55 70 73 65 72 74 20 63 6c      /* Upsert cl
23490 61 75 73 65 73 20 6f 6e 20 61 6e 20 49 4e 53 45  auses on an INSE
234a0 52 54 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 53  RT */.  char *zS
234b0 70 61 6e 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  pan;         /* 
234c0 4f 72 69 67 69 6e 61 6c 20 53 51 4c 20 74 65 78  Original SQL tex
234d0 74 20 6f 66 20 74 68 69 73 20 63 6f 6d 6d 61 6e  t of this comman
234e0 64 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 53 74  d */.  TriggerSt
234f0 65 70 20 2a 70 4e 65 78 74 3b 20 20 2f 2a 20 4e  ep *pNext;  /* N
23500 65 78 74 20 69 6e 20 74 68 65 20 6c 69 6e 6b 2d  ext in the link-
23510 6c 69 73 74 20 2a 2f 0a 20 20 54 72 69 67 67 65  list */.  Trigge
23520 72 53 74 65 70 20 2a 70 4c 61 73 74 3b 20 20 2f  rStep *pLast;  /
23530 2a 20 4c 61 73 74 20 65 6c 65 6d 65 6e 74 20 69  * Last element i
23540 6e 20 6c 69 6e 6b 2d 6c 69 73 74 2e 20 56 61 6c  n link-list. Val
23550 69 64 20 66 6f 72 20 31 73 74 20 65 6c 65 6d 20  id for 1st elem 
23560 6f 6e 6c 79 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  only */.};../*.*
23570 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  * The following 
23580 73 74 72 75 63 74 75 72 65 20 63 6f 6e 74 61 69  structure contai
23590 6e 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 75  ns information u
235a0 73 65 64 20 62 79 20 74 68 65 20 73 71 6c 69 74  sed by the sqlit
235b0 65 46 69 78 2e 2e 2e 0a 2a 2a 20 72 6f 75 74 69  eFix....** routi
235c0 6e 65 73 20 61 73 20 74 68 65 79 20 77 61 6c 6b  nes as they walk
235d0 20 74 68 65 20 70 61 72 73 65 20 74 72 65 65 20   the parse tree 
235e0 74 6f 20 6d 61 6b 65 20 64 61 74 61 62 61 73 65  to make database
235f0 20 72 65 66 65 72 65 6e 63 65 73 0a 2a 2a 20 65   references.** e
23600 78 70 6c 69 63 69 74 2e 0a 2a 2f 0a 74 79 70 65  xplicit..*/.type
23610 64 65 66 20 73 74 72 75 63 74 20 44 62 46 69 78  def struct DbFix
23620 65 72 20 44 62 46 69 78 65 72 3b 0a 73 74 72 75  er DbFixer;.stru
23630 63 74 20 44 62 46 69 78 65 72 20 7b 0a 20 20 50  ct DbFixer {.  P
23640 61 72 73 65 20 2a 70 50 61 72 73 65 3b 20 20 20  arse *pParse;   
23650 20 20 20 2f 2a 20 54 68 65 20 70 61 72 73 69 6e     /* The parsin
23660 67 20 63 6f 6e 74 65 78 74 2e 20 20 45 72 72 6f  g context.  Erro
23670 72 20 6d 65 73 73 61 67 65 73 20 77 72 69 74 74  r messages writt
23680 65 6e 20 68 65 72 65 20 2a 2f 0a 20 20 53 63 68  en here */.  Sch
23690 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20 20 20  ema *pSchema;   
236a0 20 2f 2a 20 46 69 78 20 69 74 65 6d 73 20 74 6f   /* Fix items to
236b0 20 74 68 69 73 20 73 63 68 65 6d 61 20 2a 2f 0a   this schema */.
236c0 20 20 69 6e 74 20 62 56 61 72 4f 6e 6c 79 3b 20    int bVarOnly; 
236d0 20 20 20 20 20 20 2f 2a 20 43 68 65 63 6b 20 66        /* Check f
236e0 6f 72 20 76 61 72 69 61 62 6c 65 20 72 65 66 65  or variable refe
236f0 72 65 6e 63 65 73 20 6f 6e 6c 79 20 2a 2f 0a 20  rences only */. 
23700 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 44 62   const char *zDb
23710 3b 20 20 20 20 2f 2a 20 4d 61 6b 65 20 73 75 72  ;    /* Make sur
23720 65 20 61 6c 6c 20 6f 62 6a 65 63 74 73 20 61 72  e all objects ar
23730 65 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20 74  e contained in t
23740 68 69 73 20 64 61 74 61 62 61 73 65 20 2a 2f 0a  his database */.
23750 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 54    const char *zT
23760 79 70 65 3b 20 20 2f 2a 20 54 79 70 65 20 6f 66  ype;  /* Type of
23770 20 74 68 65 20 63 6f 6e 74 61 69 6e 65 72 20 2d   the container -
23780 20 75 73 65 64 20 66 6f 72 20 65 72 72 6f 72 20   used for error 
23790 6d 65 73 73 61 67 65 73 20 2a 2f 0a 20 20 63 6f  messages */.  co
237a0 6e 73 74 20 54 6f 6b 65 6e 20 2a 70 4e 61 6d 65  nst Token *pName
237b0 3b 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65  ; /* Name of the
237c0 20 63 6f 6e 74 61 69 6e 65 72 20 2d 20 75 73 65   container - use
237d0 64 20 66 6f 72 20 65 72 72 6f 72 20 6d 65 73 73  d for error mess
237e0 61 67 65 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  ages */.};../*.*
237f0 2a 20 41 6e 20 6f 62 6a 65 63 74 65 64 20 75 73  * An objected us
23800 65 64 20 74 6f 20 61 63 63 75 6d 75 6c 61 74 65  ed to accumulate
23810 20 74 68 65 20 74 65 78 74 20 6f 66 20 61 20 73   the text of a s
23820 74 72 69 6e 67 20 77 68 65 72 65 20 77 65 0a 2a  tring where we.*
23830 2a 20 64 6f 20 6e 6f 74 20 6e 65 63 65 73 73 61  * do not necessa
23840 72 69 6c 79 20 6b 6e 6f 77 20 68 6f 77 20 62 69  rily know how bi
23850 67 20 74 68 65 20 73 74 72 69 6e 67 20 77 69 6c  g the string wil
23860 6c 20 62 65 20 69 6e 20 74 68 65 20 65 6e 64 2e  l be in the end.
23870 0a 2a 2f 0a 73 74 72 75 63 74 20 73 71 6c 69 74  .*/.struct sqlit
23880 65 33 5f 73 74 72 20 7b 0a 20 20 73 71 6c 69 74  e3_str {.  sqlit
23890 65 33 20 2a 64 62 3b 20 20 20 20 20 20 20 20 20  e3 *db;         
238a0 2f 2a 20 4f 70 74 69 6f 6e 61 6c 20 64 61 74 61  /* Optional data
238b0 62 61 73 65 20 66 6f 72 20 6c 6f 6f 6b 61 73 69  base for lookasi
238c0 64 65 2e 20 20 43 61 6e 20 62 65 20 4e 55 4c 4c  de.  Can be NULL
238d0 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 54 65 78   */.  char *zTex
238e0 74 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68  t;         /* Th
238f0 65 20 73 74 72 69 6e 67 20 63 6f 6c 6c 65 63 74  e string collect
23900 65 64 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20 75  ed so far */.  u
23910 33 32 20 20 6e 41 6c 6c 6f 63 3b 20 20 20 20 20  32  nAlloc;     
23920 20 20 20 20 2f 2a 20 41 6d 6f 75 6e 74 20 6f 66      /* Amount of
23930 20 73 70 61 63 65 20 61 6c 6c 6f 63 61 74 65 64   space allocated
23940 20 69 6e 20 7a 54 65 78 74 20 2a 2f 0a 20 20 75   in zText */.  u
23950 33 32 20 20 6d 78 41 6c 6c 6f 63 3b 20 20 20 20  32  mxAlloc;    
23960 20 20 20 20 2f 2a 20 4d 61 78 69 6d 75 6d 20 61      /* Maximum a
23970 6c 6c 6f 77 65 64 20 61 6c 6c 6f 63 61 74 69 6f  llowed allocatio
23980 6e 2e 20 20 30 20 66 6f 72 20 6e 6f 20 6d 61 6c  n.  0 for no mal
23990 6c 6f 63 20 75 73 61 67 65 20 2a 2f 0a 20 20 75  loc usage */.  u
239a0 33 32 20 20 6e 43 68 61 72 3b 20 20 20 20 20 20  32  nChar;      
239b0 20 20 20 20 2f 2a 20 4c 65 6e 67 74 68 20 6f 66      /* Length of
239c0 20 74 68 65 20 73 74 72 69 6e 67 20 73 6f 20 66   the string so f
239d0 61 72 20 2a 2f 0a 20 20 75 38 20 20 20 61 63 63  ar */.  u8   acc
239e0 45 72 72 6f 72 3b 20 20 20 20 20 20 20 2f 2a 20  Error;       /* 
239f0 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 20 6f 72 20  SQLITE_NOMEM or 
23a00 53 51 4c 49 54 45 5f 54 4f 4f 42 49 47 20 2a 2f  SQLITE_TOOBIG */
23a10 0a 20 20 75 38 20 20 20 70 72 69 6e 74 66 46 6c  .  u8   printfFl
23a20 61 67 73 3b 20 20 20 20 2f 2a 20 53 51 4c 49 54  ags;    /* SQLIT
23a30 45 5f 50 52 49 4e 54 46 20 66 6c 61 67 73 20 62  E_PRINTF flags b
23a40 65 6c 6f 77 20 2a 2f 0a 7d 3b 0a 23 64 65 66 69  elow */.};.#defi
23a50 6e 65 20 53 51 4c 49 54 45 5f 50 52 49 4e 54 46  ne SQLITE_PRINTF
23a60 5f 49 4e 54 45 52 4e 41 4c 20 30 78 30 31 20 20  _INTERNAL 0x01  
23a70 2f 2a 20 49 6e 74 65 72 6e 61 6c 2d 75 73 65 2d  /* Internal-use-
23a80 6f 6e 6c 79 20 63 6f 6e 76 65 72 74 65 72 73 20  only converters 
23a90 61 6c 6c 6f 77 65 64 20 2a 2f 0a 23 64 65 66 69  allowed */.#defi
23aa0 6e 65 20 53 51 4c 49 54 45 5f 50 52 49 4e 54 46  ne SQLITE_PRINTF
23ab0 5f 53 51 4c 46 55 4e 43 20 20 30 78 30 32 20 20  _SQLFUNC  0x02  
23ac0 2f 2a 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 20  /* SQL function 
23ad0 61 72 67 75 6d 65 6e 74 73 20 74 6f 20 56 58 50  arguments to VXP
23ae0 72 69 6e 74 66 20 2a 2f 0a 23 64 65 66 69 6e 65  rintf */.#define
23af0 20 53 51 4c 49 54 45 5f 50 52 49 4e 54 46 5f 4d   SQLITE_PRINTF_M
23b00 41 4c 4c 4f 43 45 44 20 30 78 30 34 20 20 2f 2a  ALLOCED 0x04  /*
23b10 20 54 72 75 65 20 69 66 20 78 54 65 78 74 20 69   True if xText i
23b20 73 20 61 6c 6c 6f 63 61 74 65 64 20 73 70 61 63  s allocated spac
23b30 65 20 2a 2f 0a 0a 23 64 65 66 69 6e 65 20 69 73  e */..#define is
23b40 4d 61 6c 6c 6f 63 65 64 28 58 29 20 20 28 28 28  Malloced(X)  (((
23b50 58 29 2d 3e 70 72 69 6e 74 66 46 6c 61 67 73 20  X)->printfFlags 
23b60 26 20 53 51 4c 49 54 45 5f 50 52 49 4e 54 46 5f  & SQLITE_PRINTF_
23b70 4d 41 4c 4c 4f 43 45 44 29 21 3d 30 29 0a 0a 0a  MALLOCED)!=0)...
23b80 2f 2a 0a 2a 2a 20 41 20 70 6f 69 6e 74 65 72 20  /*.** A pointer 
23b90 74 6f 20 74 68 69 73 20 73 74 72 75 63 74 75 72  to this structur
23ba0 65 20 69 73 20 75 73 65 64 20 74 6f 20 63 6f 6d  e is used to com
23bb0 6d 75 6e 69 63 61 74 65 20 69 6e 66 6f 72 6d 61  municate informa
23bc0 74 69 6f 6e 0a 2a 2a 20 66 72 6f 6d 20 73 71 6c  tion.** from sql
23bd0 69 74 65 33 49 6e 69 74 20 61 6e 64 20 4f 50 5f  ite3Init and OP_
23be0 50 61 72 73 65 53 63 68 65 6d 61 20 69 6e 74 6f  ParseSchema into
23bf0 20 74 68 65 20 73 71 6c 69 74 65 33 49 6e 69 74   the sqlite3Init
23c00 43 61 6c 6c 62 61 63 6b 2e 0a 2a 2f 0a 74 79 70  Callback..*/.typ
23c10 65 64 65 66 20 73 74 72 75 63 74 20 7b 0a 20 20  edef struct {.  
23c20 73 71 6c 69 74 65 33 20 2a 64 62 3b 20 20 20 20  sqlite3 *db;    
23c30 20 20 20 20 2f 2a 20 54 68 65 20 64 61 74 61 62      /* The datab
23c40 61 73 65 20 62 65 69 6e 67 20 69 6e 69 74 69 61  ase being initia
23c50 6c 69 7a 65 64 20 2a 2f 0a 20 20 63 68 61 72 20  lized */.  char 
23c60 2a 2a 70 7a 45 72 72 4d 73 67 3b 20 20 20 20 2f  **pzErrMsg;    /
23c70 2a 20 45 72 72 6f 72 20 6d 65 73 73 61 67 65 20  * Error message 
23c80 73 74 6f 72 65 64 20 68 65 72 65 20 2a 2f 0a 20  stored here */. 
23c90 20 69 6e 74 20 69 44 62 3b 20 20 20 20 20 20 20   int iDb;       
23ca0 20 20 20 20 20 2f 2a 20 30 20 66 6f 72 20 6d 61       /* 0 for ma
23cb0 69 6e 20 64 61 74 61 62 61 73 65 2e 20 20 31 20  in database.  1 
23cc0 66 6f 72 20 54 45 4d 50 2c 20 32 2e 2e 20 66 6f  for TEMP, 2.. fo
23cd0 72 20 41 54 54 41 43 48 65 64 20 2a 2f 0a 20 20  r ATTACHed */.  
23ce0 69 6e 74 20 72 63 3b 20 20 20 20 20 20 20 20 20  int rc;         
23cf0 20 20 20 20 2f 2a 20 52 65 73 75 6c 74 20 63 6f      /* Result co
23d00 64 65 20 73 74 6f 72 65 64 20 68 65 72 65 20 2a  de stored here *
23d10 2f 0a 7d 20 49 6e 69 74 44 61 74 61 3b 0a 0a 2f  /.} InitData;../
23d20 2a 0a 2a 2a 20 53 74 72 75 63 74 75 72 65 20 63  *.** Structure c
23d30 6f 6e 74 61 69 6e 69 6e 67 20 67 6c 6f 62 61 6c  ontaining global
23d40 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 64   configuration d
23d50 61 74 61 20 66 6f 72 20 74 68 65 20 53 51 4c 69  ata for the SQLi
23d60 74 65 20 6c 69 62 72 61 72 79 2e 0a 2a 2a 0a 2a  te library..**.*
23d70 2a 20 54 68 69 73 20 73 74 72 75 63 74 75 72 65  * This structure
23d80 20 61 6c 73 6f 20 63 6f 6e 74 61 69 6e 73 20 73   also contains s
23d90 6f 6d 65 20 73 74 61 74 65 20 69 6e 66 6f 72 6d  ome state inform
23da0 61 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74  ation..*/.struct
23db0 20 53 71 6c 69 74 65 33 43 6f 6e 66 69 67 20 7b   Sqlite3Config {
23dc0 0a 20 20 69 6e 74 20 62 4d 65 6d 73 74 61 74 3b  .  int bMemstat;
23dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23de0 20 20 20 20 20 2f 2a 20 54 72 75 65 20 74 6f 20       /* True to 
23df0 65 6e 61 62 6c 65 20 6d 65 6d 6f 72 79 20 73 74  enable memory st
23e00 61 74 75 73 20 2a 2f 0a 20 20 69 6e 74 20 62 43  atus */.  int bC
23e10 6f 72 65 4d 75 74 65 78 3b 20 20 20 20 20 20 20  oreMutex;       
23e20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
23e30 72 75 65 20 74 6f 20 65 6e 61 62 6c 65 20 63 6f  rue to enable co
23e40 72 65 20 6d 75 74 65 78 69 6e 67 20 2a 2f 0a 20  re mutexing */. 
23e50 20 69 6e 74 20 62 46 75 6c 6c 4d 75 74 65 78 3b   int bFullMutex;
23e60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23e70 20 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 65 6e     /* True to en
23e80 61 62 6c 65 20 66 75 6c 6c 20 6d 75 74 65 78 69  able full mutexi
23e90 6e 67 20 2a 2f 0a 20 20 69 6e 74 20 62 4f 70 65  ng */.  int bOpe
23ea0 6e 55 72 69 3b 20 20 20 20 20 20 20 20 20 20 20  nUri;           
23eb0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75            /* Tru
23ec0 65 20 74 6f 20 69 6e 74 65 72 70 72 65 74 20 66  e to interpret f
23ed0 69 6c 65 6e 61 6d 65 73 20 61 73 20 55 52 49 73  ilenames as URIs
23ee0 20 2a 2f 0a 20 20 69 6e 74 20 62 55 73 65 43 69   */.  int bUseCi
23ef0 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  s;              
23f00 20 20 20 20 20 20 20 20 2f 2a 20 55 73 65 20 63          /* Use c
23f10 6f 76 65 72 69 6e 67 20 69 6e 64 69 63 65 73 20  overing indices 
23f20 66 6f 72 20 66 75 6c 6c 2d 73 63 61 6e 73 20 2a  for full-scans *
23f30 2f 0a 20 20 69 6e 74 20 62 53 6d 61 6c 6c 4d 61  /.  int bSmallMa
23f40 6c 6c 6f 63 3b 20 20 20 20 20 20 20 20 20 20 20  lloc;           
23f50 20 20 20 20 20 20 2f 2a 20 41 76 6f 69 64 20 6c        /* Avoid l
23f60 61 72 67 65 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f  arge memory allo
23f70 63 61 74 69 6f 6e 73 20 69 66 20 74 72 75 65 20  cations if true 
23f80 2a 2f 0a 20 20 69 6e 74 20 6d 78 53 74 72 6c 65  */.  int mxStrle
23f90 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  n;              
23fa0 20 20 20 20 20 20 20 2f 2a 20 4d 61 78 69 6d 75         /* Maximu
23fb0 6d 20 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20  m string length 
23fc0 2a 2f 0a 20 20 69 6e 74 20 6e 65 76 65 72 43 6f  */.  int neverCo
23fd0 72 72 75 70 74 3b 20 20 20 20 20 20 20 20 20 20  rrupt;          
23fe0 20 20 20 20 20 20 20 2f 2a 20 44 61 74 61 62 61         /* Databa
23ff0 73 65 20 69 73 20 61 6c 77 61 79 73 20 77 65 6c  se is always wel
24000 6c 2d 66 6f 72 6d 65 64 20 2a 2f 0a 20 20 69 6e  l-formed */.  in
24010 74 20 73 7a 4c 6f 6f 6b 61 73 69 64 65 3b 20 20  t szLookaside;  
24020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24030 2f 2a 20 44 65 66 61 75 6c 74 20 6c 6f 6f 6b 61  /* Default looka
24040 73 69 64 65 20 62 75 66 66 65 72 20 73 69 7a 65  side buffer size
24050 20 2a 2f 0a 20 20 69 6e 74 20 6e 4c 6f 6f 6b 61   */.  int nLooka
24060 73 69 64 65 3b 20 20 20 20 20 20 20 20 20 20 20  side;           
24070 20 20 20 20 20 20 20 20 2f 2a 20 44 65 66 61 75          /* Defau
24080 6c 74 20 6c 6f 6f 6b 61 73 69 64 65 20 62 75 66  lt lookaside buf
24090 66 65 72 20 63 6f 75 6e 74 20 2a 2f 0a 20 20 69  fer count */.  i
240a0 6e 74 20 6e 53 74 6d 74 53 70 69 6c 6c 3b 20 20  nt nStmtSpill;  
240b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
240c0 20 2f 2a 20 53 74 6d 74 2d 6a 6f 75 72 6e 61 6c   /* Stmt-journal
240d0 20 73 70 69 6c 6c 2d 74 6f 2d 64 69 73 6b 20 74   spill-to-disk t
240e0 68 72 65 73 68 6f 6c 64 20 2a 2f 0a 20 20 73 71  hreshold */.  sq
240f0 6c 69 74 65 33 5f 6d 65 6d 5f 6d 65 74 68 6f 64  lite3_mem_method
24100 73 20 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20  s m;            
24110 2f 2a 20 4c 6f 77 2d 6c 65 76 65 6c 20 6d 65 6d  /* Low-level mem
24120 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 69  ory allocation i
24130 6e 74 65 72 66 61 63 65 20 2a 2f 0a 20 20 73 71  nterface */.  sq
24140 6c 69 74 65 33 5f 6d 75 74 65 78 5f 6d 65 74 68  lite3_mutex_meth
24150 6f 64 73 20 6d 75 74 65 78 3b 20 20 20 20 20 20  ods mutex;      
24160 2f 2a 20 4c 6f 77 2d 6c 65 76 65 6c 20 6d 75 74  /* Low-level mut
24170 65 78 20 69 6e 74 65 72 66 61 63 65 20 2a 2f 0a  ex interface */.
24180 20 20 73 71 6c 69 74 65 33 5f 70 63 61 63 68 65    sqlite3_pcache
24190 5f 6d 65 74 68 6f 64 73 32 20 70 63 61 63 68 65  _methods2 pcache
241a0 32 3b 20 20 2f 2a 20 4c 6f 77 2d 6c 65 76 65 6c  2;  /* Low-level
241b0 20 70 61 67 65 2d 63 61 63 68 65 20 69 6e 74 65   page-cache inte
241c0 72 66 61 63 65 20 2a 2f 0a 20 20 76 6f 69 64 20  rface */.  void 
241d0 2a 70 48 65 61 70 3b 20 20 20 20 20 20 20 20 20  *pHeap;         
241e0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
241f0 48 65 61 70 20 73 74 6f 72 61 67 65 20 73 70 61  Heap storage spa
24200 63 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 48 65 61  ce */.  int nHea
24210 70 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  p;              
24220 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 69 7a            /* Siz
24230 65 20 6f 66 20 70 48 65 61 70 5b 5d 20 2a 2f 0a  e of pHeap[] */.
24240 20 20 69 6e 74 20 6d 6e 52 65 71 2c 20 6d 78 52    int mnReq, mxR
24250 65 71 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  eq;             
24260 20 20 20 20 2f 2a 20 4d 69 6e 20 61 6e 64 20 6d      /* Min and m
24270 61 78 20 68 65 61 70 20 72 65 71 75 65 73 74 73  ax heap requests
24280 20 73 69 7a 65 73 20 2a 2f 0a 20 20 73 71 6c 69   sizes */.  sqli
24290 74 65 33 5f 69 6e 74 36 34 20 73 7a 4d 6d 61 70  te3_int64 szMmap
242a0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
242b0 20 6d 6d 61 70 28 29 20 73 70 61 63 65 20 70 65   mmap() space pe
242c0 72 20 6f 70 65 6e 20 66 69 6c 65 20 2a 2f 0a 20  r open file */. 
242d0 20 73 71 6c 69 74 65 33 5f 69 6e 74 36 34 20 6d   sqlite3_int64 m
242e0 78 4d 6d 61 70 3b 20 20 20 20 20 20 20 20 20 20  xMmap;          
242f0 20 20 20 2f 2a 20 4d 61 78 69 6d 75 6d 20 76 61     /* Maximum va
24300 6c 75 65 20 66 6f 72 20 73 7a 4d 6d 61 70 20 2a  lue for szMmap *
24310 2f 0a 20 20 76 6f 69 64 20 2a 70 50 61 67 65 3b  /.  void *pPage;
24320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24330 20 20 20 20 20 20 2f 2a 20 50 61 67 65 20 63 61        /* Page ca
24340 63 68 65 20 6d 65 6d 6f 72 79 20 2a 2f 0a 20 20  che memory */.  
24350 69 6e 74 20 73 7a 50 61 67 65 3b 20 20 20 20 20  int szPage;     
24360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24370 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20 65 61 63    /* Size of eac
24380 68 20 70 61 67 65 20 69 6e 20 70 50 61 67 65 5b  h page in pPage[
24390 5d 20 2a 2f 0a 20 20 69 6e 74 20 6e 50 61 67 65  ] */.  int nPage
243a0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
243b0 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
243c0 65 72 20 6f 66 20 70 61 67 65 73 20 69 6e 20 70  er of pages in p
243d0 50 61 67 65 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20  Page[] */.  int 
243e0 6d 78 50 61 72 73 65 72 53 74 61 63 6b 3b 20 20  mxParserStack;  
243f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
24400 20 6d 61 78 69 6d 75 6d 20 64 65 70 74 68 20 6f   maximum depth o
24410 66 20 74 68 65 20 70 61 72 73 65 72 20 73 74 61  f the parser sta
24420 63 6b 20 2a 2f 0a 20 20 69 6e 74 20 73 68 61 72  ck */.  int shar
24430 65 64 43 61 63 68 65 45 6e 61 62 6c 65 64 3b 20  edCacheEnabled; 
24440 20 20 20 20 20 20 20 20 20 20 2f 2a 20 74 72 75            /* tru
24450 65 20 69 66 20 73 68 61 72 65 64 2d 63 61 63 68  e if shared-cach
24460 65 20 6d 6f 64 65 20 65 6e 61 62 6c 65 64 20 2a  e mode enabled *
24470 2f 0a 20 20 75 33 32 20 73 7a 50 6d 61 3b 20 20  /.  u32 szPma;  
24480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24490 20 20 20 20 20 20 2f 2a 20 4d 61 78 69 6d 75 6d        /* Maximum
244a0 20 53 6f 72 74 65 72 20 50 4d 41 20 73 69 7a 65   Sorter PMA size
244b0 20 2a 2f 0a 20 20 2f 2a 20 54 68 65 20 61 62 6f   */.  /* The abo
244c0 76 65 20 6d 69 67 68 74 20 62 65 20 69 6e 69 74  ve might be init
244d0 69 61 6c 69 7a 65 64 20 74 6f 20 6e 6f 6e 2d 7a  ialized to non-z
244e0 65 72 6f 2e 20 20 54 68 65 20 66 6f 6c 6c 6f 77  ero.  The follow
244f0 69 6e 67 20 6e 65 65 64 20 74 6f 20 61 6c 77 61  ing need to alwa
24500 79 73 0a 20 20 2a 2a 20 69 6e 69 74 69 61 6c 6c  ys.  ** initiall
24510 79 20 62 65 20 7a 65 72 6f 2c 20 68 6f 77 65 76  y be zero, howev
24520 65 72 2e 20 2a 2f 0a 20 20 69 6e 74 20 69 73 49  er. */.  int isI
24530 6e 69 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  nit;            
24540 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72             /* Tr
24550 75 65 20 61 66 74 65 72 20 69 6e 69 74 69 61 6c  ue after initial
24560 69 7a 61 74 69 6f 6e 20 68 61 73 20 66 69 6e 69  ization has fini
24570 73 68 65 64 20 2a 2f 0a 20 20 69 6e 74 20 69 6e  shed */.  int in
24580 50 72 6f 67 72 65 73 73 3b 20 20 20 20 20 20 20  Progress;       
24590 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
245a0 72 75 65 20 77 68 69 6c 65 20 69 6e 69 74 69 61  rue while initia
245b0 6c 69 7a 61 74 69 6f 6e 20 69 6e 20 70 72 6f 67  lization in prog
245c0 72 65 73 73 20 2a 2f 0a 20 20 69 6e 74 20 69 73  ress */.  int is
245d0 4d 75 74 65 78 49 6e 69 74 3b 20 20 20 20 20 20  MutexInit;      
245e0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
245f0 72 75 65 20 61 66 74 65 72 20 6d 75 74 65 78 65  rue after mutexe
24600 73 20 61 72 65 20 69 6e 69 74 69 61 6c 69 7a 65  s are initialize
24610 64 20 2a 2f 0a 20 20 69 6e 74 20 69 73 4d 61 6c  d */.  int isMal
24620 6c 6f 63 49 6e 69 74 3b 20 20 20 20 20 20 20 20  locInit;        
24630 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65           /* True
24640 20 61 66 74 65 72 20 6d 61 6c 6c 6f 63 20 69 73   after malloc is
24650 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a   initialized */.
24660 20 20 69 6e 74 20 69 73 50 43 61 63 68 65 49 6e    int isPCacheIn
24670 69 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  it;             
24680 20 20 20 20 2f 2a 20 54 72 75 65 20 61 66 74 65      /* True afte
24690 72 20 6d 61 6c 6c 6f 63 20 69 73 20 69 6e 69 74  r malloc is init
246a0 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 69 6e 74  ialized */.  int
246b0 20 6e 52 65 66 49 6e 69 74 4d 75 74 65 78 3b 20   nRefInitMutex; 
246c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
246d0 2a 20 4e 75 6d 62 65 72 20 6f 66 20 75 73 65 72  * Number of user
246e0 73 20 6f 66 20 70 49 6e 69 74 4d 75 74 65 78 20  s of pInitMutex 
246f0 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 74  */.  sqlite3_mut
24700 65 78 20 2a 70 49 6e 69 74 4d 75 74 65 78 3b 20  ex *pInitMutex; 
24710 20 20 20 20 20 20 20 2f 2a 20 4d 75 74 65 78 20         /* Mutex 
24720 75 73 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f  used by sqlite3_
24730 69 6e 69 74 69 61 6c 69 7a 65 28 29 20 2a 2f 0a  initialize() */.
24740 20 20 76 6f 69 64 20 28 2a 78 4c 6f 67 29 28 76    void (*xLog)(v
24750 6f 69 64 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63  oid*,int,const c
24760 68 61 72 2a 29 3b 20 2f 2a 20 46 75 6e 63 74 69  har*); /* Functi
24770 6f 6e 20 66 6f 72 20 6c 6f 67 67 69 6e 67 20 2a  on for logging *
24780 2f 0a 20 20 76 6f 69 64 20 2a 70 4c 6f 67 41 72  /.  void *pLogAr
24790 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  g;              
247a0 20 20 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73           /* Firs
247b0 74 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 78 4c  t argument to xL
247c0 6f 67 28 29 20 2a 2f 0a 23 69 66 64 65 66 20 53  og() */.#ifdef S
247d0 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 51 4c  QLITE_ENABLE_SQL
247e0 4c 4f 47 0a 20 20 76 6f 69 64 28 2a 78 53 71 6c  LOG.  void(*xSql
247f0 6c 6f 67 29 28 76 6f 69 64 2a 2c 73 71 6c 69 74  log)(void*,sqlit
24800 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c  e3*,const char*,
24810 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20 2a 70   int);.  void *p
24820 53 71 6c 6c 6f 67 41 72 67 3b 0a 23 65 6e 64 69  SqllogArg;.#endi
24830 66 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  f.#ifdef SQLITE_
24840 56 44 42 45 5f 43 4f 56 45 52 41 47 45 0a 20 20  VDBE_COVERAGE.  
24850 2f 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  /* The following
24860 20 63 61 6c 6c 62 61 63 6b 20 28 69 66 20 6e 6f   callback (if no
24870 74 20 4e 55 4c 4c 29 20 69 73 20 69 6e 76 6f 6b  t NULL) is invok
24880 65 64 20 6f 6e 20 65 76 65 72 79 20 56 44 42 45  ed on every VDBE
24890 20 62 72 61 6e 63 68 0a 20 20 2a 2a 20 6f 70 65   branch.  ** ope
248a0 72 61 74 69 6f 6e 2e 20 20 53 65 74 20 74 68 65  ration.  Set the
248b0 20 63 61 6c 6c 62 61 63 6b 20 75 73 69 6e 67 20   callback using 
248c0 53 51 4c 49 54 45 5f 54 45 53 54 43 54 52 4c 5f  SQLITE_TESTCTRL_
248d0 56 44 42 45 5f 43 4f 56 45 52 41 47 45 2e 0a 20  VDBE_COVERAGE.. 
248e0 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 56 64   */.  void (*xVd
248f0 62 65 42 72 61 6e 63 68 29 28 76 6f 69 64 2a 2c  beBranch)(void*,
24900 75 6e 73 69 67 6e 65 64 20 69 53 72 63 4c 69 6e  unsigned iSrcLin
24910 65 2c 75 38 20 65 54 68 69 73 2c 75 38 20 65 4d  e,u8 eThis,u8 eM
24920 78 29 3b 20 20 2f 2a 20 43 61 6c 6c 62 61 63 6b  x);  /* Callback
24930 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 56 64 62   */.  void *pVdb
24940 65 42 72 61 6e 63 68 41 72 67 3b 20 20 20 20 20  eBranchArg;     
24950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24970 2f 2a 20 31 73 74 20 61 72 67 75 6d 65 6e 74 20  /* 1st argument 
24980 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65  */.#endif.#ifnde
24990 66 20 53 51 4c 49 54 45 5f 55 4e 54 45 53 54 41  f SQLITE_UNTESTA
249a0 42 4c 45 0a 20 20 69 6e 74 20 28 2a 78 54 65 73  BLE.  int (*xTes
249b0 74 43 61 6c 6c 62 61 63 6b 29 28 69 6e 74 29 3b  tCallback)(int);
249c0 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 76 6f 6b          /* Invok
249d0 65 64 20 62 79 20 73 71 6c 69 74 65 33 46 61 75  ed by sqlite3Fau
249e0 6c 74 53 69 6d 28 29 20 2a 2f 0a 23 65 6e 64 69  ltSim() */.#endi
249f0 66 0a 20 20 69 6e 74 20 62 4c 6f 63 61 6c 74 69  f.  int bLocalti
24a00 6d 65 46 61 75 6c 74 3b 20 20 20 20 20 20 20 20  meFault;        
24a10 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 74 6f        /* True to
24a20 20 66 61 69 6c 20 6c 6f 63 61 6c 74 69 6d 65 28   fail localtime(
24a30 29 20 63 61 6c 6c 73 20 2a 2f 0a 20 20 69 6e 74  ) calls */.  int
24a40 20 69 4f 6e 63 65 52 65 73 65 74 54 68 72 65 73   iOnceResetThres
24a50 68 6f 6c 64 3b 20 20 20 20 20 20 20 20 20 20 2f  hold;          /
24a60 2a 20 57 68 65 6e 20 74 6f 20 72 65 73 65 74 20  * When to reset 
24a70 4f 50 5f 4f 6e 63 65 20 63 6f 75 6e 74 65 72 73  OP_Once counters
24a80 20 2a 2f 0a 20 20 75 33 32 20 73 7a 53 6f 72 74   */.  u32 szSort
24a90 65 72 52 65 66 3b 20 20 20 20 20 20 20 20 20 20  erRef;          
24aa0 20 20 20 20 20 20 20 20 2f 2a 20 4d 69 6e 20 73          /* Min s
24ab0 69 7a 65 20 69 6e 20 62 79 74 65 73 20 74 6f 20  ize in bytes to 
24ac0 75 73 65 20 73 6f 72 74 65 72 2d 72 65 66 73 20  use sorter-refs 
24ad0 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 69  */.};../*.** Thi
24ae0 73 20 6d 61 63 72 6f 20 69 73 20 75 73 65 64 20  s macro is used 
24af0 69 6e 73 69 64 65 20 6f 66 20 61 73 73 65 72 74  inside of assert
24b00 28 29 20 73 74 61 74 65 6d 65 6e 74 73 20 74 6f  () statements to
24b10 20 69 6e 64 69 63 61 74 65 20 74 68 61 74 0a 2a   indicate that.*
24b20 2a 20 74 68 65 20 61 73 73 65 72 74 20 69 73 20  * the assert is 
24b30 6f 6e 6c 79 20 76 61 6c 69 64 20 6f 6e 20 61 20  only valid on a 
24b40 77 65 6c 6c 2d 66 6f 72 6d 65 64 20 64 61 74 61  well-formed data
24b50 62 61 73 65 2e 20 20 49 6e 73 74 65 61 64 20 6f  base.  Instead o
24b60 66 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 61 73 73  f:.**.**     ass
24b70 65 72 74 28 20 58 20 29 3b 0a 2a 2a 0a 2a 2a 20  ert( X );.**.** 
24b80 4f 6e 65 20 77 72 69 74 65 73 3a 0a 2a 2a 0a 2a  One writes:.**.*
24b90 2a 20 20 20 20 20 61 73 73 65 72 74 28 20 58 20  *     assert( X 
24ba0 7c 7c 20 43 4f 52 52 55 50 54 5f 44 42 20 29 3b  || CORRUPT_DB );
24bb0 0a 2a 2a 0a 2a 2a 20 43 4f 52 52 55 50 54 5f 44  .**.** CORRUPT_D
24bc0 42 20 69 73 20 74 72 75 65 20 64 75 72 69 6e 67  B is true during
24bd0 20 6e 6f 72 6d 61 6c 20 6f 70 65 72 61 74 69 6f   normal operatio
24be0 6e 2e 20 20 43 4f 52 52 55 50 54 5f 44 42 20 64  n.  CORRUPT_DB d
24bf0 6f 65 73 20 6e 6f 74 20 69 6e 64 69 63 61 74 65  oes not indicate
24c00 0a 2a 2a 20 74 68 61 74 20 74 68 65 20 64 61 74  .** that the dat
24c10 61 62 61 73 65 20 69 73 20 64 65 66 69 6e 69 74  abase is definit
24c20 65 6c 79 20 63 6f 72 72 75 70 74 2c 20 6f 6e 6c  ely corrupt, onl
24c30 79 20 74 68 61 74 20 69 74 20 6d 69 67 68 74 20  y that it might 
24c40 62 65 20 63 6f 72 72 75 70 74 2e 0a 2a 2a 20 46  be corrupt..** F
24c50 6f 72 20 6d 6f 73 74 20 74 65 73 74 20 63 61 73  or most test cas
24c60 65 73 2c 20 43 4f 52 52 55 50 54 5f 44 42 20 69  es, CORRUPT_DB i
24c70 73 20 73 65 74 20 74 6f 20 66 61 6c 73 65 20 75  s set to false u
24c80 73 69 6e 67 20 61 20 73 70 65 63 69 61 6c 0a 2a  sing a special.*
24c90 2a 20 73 71 6c 69 74 65 33 5f 74 65 73 74 5f 63  * sqlite3_test_c
24ca0 6f 6e 74 72 6f 6c 28 29 2e 20 20 54 68 69 73 20  ontrol().  This 
24cb0 65 6e 61 62 6c 65 73 20 61 73 73 65 72 74 28 29  enables assert()
24cc0 20 73 74 61 74 65 6d 65 6e 74 73 20 74 6f 20 70   statements to p
24cd0 72 6f 76 65 0a 2a 2a 20 74 68 69 6e 67 73 20 74  rove.** things t
24ce0 68 61 74 20 61 72 65 20 61 6c 77 61 79 73 20 74  hat are always t
24cf0 72 75 65 20 66 6f 72 20 77 65 6c 6c 2d 66 6f 72  rue for well-for
24d00 6d 65 64 20 64 61 74 61 62 61 73 65 73 2e 0a 2a  med databases..*
24d10 2f 0a 23 64 65 66 69 6e 65 20 43 4f 52 52 55 50  /.#define CORRUP
24d20 54 5f 44 42 20 20 28 73 71 6c 69 74 65 33 43 6f  T_DB  (sqlite3Co
24d30 6e 66 69 67 2e 6e 65 76 65 72 43 6f 72 72 75 70  nfig.neverCorrup
24d40 74 3d 3d 30 29 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6e  t==0)../*.** Con
24d50 74 65 78 74 20 70 6f 69 6e 74 65 72 20 70 61 73  text pointer pas
24d60 73 65 64 20 64 6f 77 6e 20 74 68 72 6f 75 67 68  sed down through
24d70 20 74 68 65 20 74 72 65 65 2d 77 61 6c 6b 2e 0a   the tree-walk..
24d80 2a 2f 0a 73 74 72 75 63 74 20 57 61 6c 6b 65 72  */.struct Walker
24d90 20 7b 0a 20 20 50 61 72 73 65 20 2a 70 50 61 72   {.  Parse *pPar
24da0 73 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  se;             
24db0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
24dc0 2a 20 50 61 72 73 65 72 20 63 6f 6e 74 65 78 74  * Parser context
24dd0 2e 20 20 2a 2f 0a 20 20 69 6e 74 20 28 2a 78 45  .  */.  int (*xE
24de0 78 70 72 43 61 6c 6c 62 61 63 6b 29 28 57 61 6c  xprCallback)(Wal
24df0 6b 65 72 2a 2c 20 45 78 70 72 2a 29 3b 20 20 20  ker*, Expr*);   
24e00 20 20 2f 2a 20 43 61 6c 6c 62 61 63 6b 20 66 6f    /* Callback fo
24e10 72 20 65 78 70 72 65 73 73 69 6f 6e 73 20 2a 2f  r expressions */
24e20 0a 20 20 69 6e 74 20 28 2a 78 53 65 6c 65 63 74  .  int (*xSelect
24e30 43 61 6c 6c 62 61 63 6b 29 28 57 61 6c 6b 65 72  Callback)(Walker
24e40 2a 2c 53 65 6c 65 63 74 2a 29 3b 20 20 2f 2a 20  *,Select*);  /* 
24e50 43 61 6c 6c 62 61 63 6b 20 66 6f 72 20 53 45 4c  Callback for SEL
24e60 45 43 54 73 20 2a 2f 0a 20 20 76 6f 69 64 20 28  ECTs */.  void (
24e70 2a 78 53 65 6c 65 63 74 43 61 6c 6c 62 61 63 6b  *xSelectCallback
24e80 32 29 28 57 61 6c 6b 65 72 2a 2c 53 65 6c 65 63  2)(Walker*,Selec
24e90 74 2a 29 3b 2f 2a 20 53 65 63 6f 6e 64 20 63 61  t*);/* Second ca
24ea0 6c 6c 62 61 63 6b 20 66 6f 72 20 53 45 4c 45 43  llback for SELEC
24eb0 54 73 20 2a 2f 0a 20 20 69 6e 74 20 77 61 6c 6b  Ts */.  int walk
24ec0 65 72 44 65 70 74 68 3b 20 20 20 20 20 20 20 20  erDepth;        
24ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24ee0 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 73    /* Number of s
24ef0 75 62 71 75 65 72 69 65 73 20 2a 2f 0a 20 20 75  ubqueries */.  u
24f00 38 20 65 43 6f 64 65 3b 20 20 20 20 20 20 20 20  8 eCode;        
24f10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24f20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 20 73 6d           /* A sm
24f30 61 6c 6c 20 70 72 6f 63 65 73 73 69 6e 67 20 63  all processing c
24f40 6f 64 65 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b  ode */.  union {
24f50 20 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 2f 2a 20 45 78 74 72 61 20 64 61 74 61     /* Extra data
24f80 20 66 6f 72 20 63 61 6c 6c 62 61 63 6b 20 2a 2f   for callback */
24f90 0a 20 20 20 20 4e 61 6d 65 43 6f 6e 74 65 78 74  .    NameContext
24fa0 20 2a 70 4e 43 3b 20 20 20 20 20 20 20 20 20 20   *pNC;          
24fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
24fc0 2a 20 4e 61 6d 69 6e 67 20 63 6f 6e 74 65 78 74  * Naming context
24fd0 20 2a 2f 0a 20 20 20 20 69 6e 74 20 6e 3b 20 20   */.    int n;  
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 20 20 20 20 20 20 20 20 20                  
25000 20 20 2f 2a 20 41 20 63 6f 75 6e 74 65 72 20 2a    /* A counter *
25010 2f 0a 20 20 20 20 69 6e 74 20 69 43 75 72 3b 20  /.    int iCur; 
25020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25040 2f 2a 20 41 20 63 75 72 73 6f 72 20 6e 75 6d 62  /* A cursor numb
25050 65 72 20 2a 2f 0a 20 20 20 20 53 72 63 4c 69 73  er */.    SrcLis
25060 74 20 2a 70 53 72 63 4c 69 73 74 3b 20 20 20 20  t *pSrcList;    
25070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25080 20 20 20 20 2f 2a 20 46 52 4f 4d 20 63 6c 61 75      /* FROM clau
25090 73 65 20 2a 2f 0a 20 20 20 20 73 74 72 75 63 74  se */.    struct
250a0 20 53 72 63 43 6f 75 6e 74 20 2a 70 53 72 63 43   SrcCount *pSrcC
250b0 6f 75 6e 74 3b 20 20 20 20 20 20 20 20 20 20 20  ount;           
250c0 20 20 20 20 2f 2a 20 43 6f 75 6e 74 69 6e 67 20      /* Counting 
250d0 63 6f 6c 75 6d 6e 20 72 65 66 65 72 65 6e 63 65  column reference
250e0 73 20 2a 2f 0a 20 20 20 20 73 74 72 75 63 74 20  s */.    struct 
250f0 43 43 75 72 48 69 6e 74 20 2a 70 43 43 75 72 48  CCurHint *pCCurH
25100 69 6e 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  int;            
25110 20 20 20 2f 2a 20 55 73 65 64 20 62 79 20 63 6f     /* Used by co
25120 64 65 43 75 72 73 6f 72 48 69 6e 74 28 29 20 2a  deCursorHint() *
25130 2f 0a 20 20 20 20 69 6e 74 20 2a 61 69 43 6f 6c  /.    int *aiCol
25140 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
25150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25160 2f 2a 20 61 72 72 61 79 20 6f 66 20 63 6f 6c 75  /* array of colu
25170 6d 6e 20 69 6e 64 65 78 65 73 20 2a 2f 0a 20 20  mn indexes */.  
25180 20 20 73 74 72 75 63 74 20 49 64 78 43 6f 76 65    struct IdxCove
25190 72 20 2a 70 49 64 78 43 6f 76 65 72 3b 20 20 20  r *pIdxCover;   
251a0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43              /* C
251b0 68 65 63 6b 20 66 6f 72 20 69 6e 64 65 78 20 63  heck for index c
251c0 6f 76 65 72 61 67 65 20 2a 2f 0a 20 20 20 20 73  overage */.    s
251d0 74 72 75 63 74 20 49 64 78 45 78 70 72 54 72 61  truct IdxExprTra
251e0 6e 73 20 2a 70 49 64 78 54 72 61 6e 73 3b 20 20  ns *pIdxTrans;  
251f0 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6e 76           /* Conv
25200 65 72 74 20 69 64 78 65 64 20 65 78 70 72 20 74  ert idxed expr t
25210 6f 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 20 20  o column */.    
25220 45 78 70 72 4c 69 73 74 20 2a 70 47 72 6f 75 70  ExprList *pGroup
25230 42 79 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  By;             
25240 20 20 20 20 20 20 20 20 20 20 2f 2a 20 47 52 4f            /* GRO
25250 55 50 20 42 59 20 63 6c 61 75 73 65 20 2a 2f 0a  UP BY clause */.
25260 20 20 20 20 53 65 6c 65 63 74 20 2a 70 53 65 6c      Select *pSel
25270 65 63 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  ect;            
25280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
25290 20 48 41 56 49 4e 47 20 74 6f 20 57 48 45 52 45   HAVING to WHERE
252a0 20 63 6c 61 75 73 65 20 63 74 78 20 2a 2f 0a 20   clause ctx */. 
252b0 20 20 20 73 74 72 75 63 74 20 57 69 6e 64 6f 77     struct Window
252c0 52 65 77 72 69 74 65 20 2a 70 52 65 77 72 69 74  Rewrite *pRewrit
252d0 65 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  e;           /* 
252e0 57 69 6e 64 6f 77 20 72 65 77 72 69 74 65 20 63  Window rewrite c
252f0 6f 6e 74 65 78 74 20 2a 2f 0a 20 20 7d 20 75 3b  ontext */.  } u;
25300 0a 7d 3b 0a 0a 2f 2a 20 46 6f 72 77 61 72 64 20  .};../* Forward 
25310 64 65 63 6c 61 72 61 74 69 6f 6e 73 20 2a 2f 0a  declarations */.
25320 69 6e 74 20 73 71 6c 69 74 65 33 57 61 6c 6b 45  int sqlite3WalkE
25330 78 70 72 28 57 61 6c 6b 65 72 2a 2c 20 45 78 70  xpr(Walker*, Exp
25340 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  r*);.int sqlite3
25350 57 61 6c 6b 45 78 70 72 4c 69 73 74 28 57 61 6c  WalkExprList(Wal
25360 6b 65 72 2a 2c 20 45 78 70 72 4c 69 73 74 2a 29  ker*, ExprList*)
25370 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 61 6c  ;.int sqlite3Wal
25380 6b 53 65 6c 65 63 74 28 57 61 6c 6b 65 72 2a 2c  kSelect(Walker*,
25390 20 53 65 6c 65 63 74 2a 29 3b 0a 69 6e 74 20 73   Select*);.int s
253a0 71 6c 69 74 65 33 57 61 6c 6b 53 65 6c 65 63 74  qlite3WalkSelect
253b0 45 78 70 72 28 57 61 6c 6b 65 72 2a 2c 20 53 65  Expr(Walker*, Se
253c0 6c 65 63 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  lect*);.int sqli
253d0 74 65 33 57 61 6c 6b 53 65 6c 65 63 74 46 72 6f  te3WalkSelectFro
253e0 6d 28 57 61 6c 6b 65 72 2a 2c 20 53 65 6c 65 63  m(Walker*, Selec
253f0 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  t*);.int sqlite3
25400 45 78 70 72 57 61 6c 6b 4e 6f 6f 70 28 57 61 6c  ExprWalkNoop(Wal
25410 6b 65 72 2a 2c 20 45 78 70 72 2a 29 3b 0a 69 6e  ker*, Expr*);.in
25420 74 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74 57  t sqlite3SelectW
25430 61 6c 6b 4e 6f 6f 70 28 57 61 6c 6b 65 72 2a 2c  alkNoop(Walker*,
25440 20 53 65 6c 65 63 74 2a 29 3b 0a 69 6e 74 20 73   Select*);.int s
25450 71 6c 69 74 65 33 53 65 6c 65 63 74 57 61 6c 6b  qlite3SelectWalk
25460 46 61 69 6c 28 57 61 6c 6b 65 72 2a 2c 20 53 65  Fail(Walker*, Se
25470 6c 65 63 74 2a 29 3b 0a 23 69 66 64 65 66 20 53  lect*);.#ifdef S
25480 51 4c 49 54 45 5f 44 45 42 55 47 0a 76 6f 69 64  QLITE_DEBUG.void
25490 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74 57 61   sqlite3SelectWa
254a0 6c 6b 41 73 73 65 72 74 32 28 57 61 6c 6b 65 72  lkAssert2(Walker
254b0 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 23 65 6e  *, Select*);.#en
254c0 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72  dif../*.** Retur
254d0 6e 20 63 6f 64 65 20 66 72 6f 6d 20 74 68 65 20  n code from the 
254e0 70 61 72 73 65 2d 74 72 65 65 20 77 61 6c 6b 69  parse-tree walki
254f0 6e 67 20 70 72 69 6d 69 74 69 76 65 73 20 61 6e  ng primitives an
25500 64 20 74 68 65 69 72 0a 2a 2a 20 63 61 6c 6c 62  d their.** callb
25510 61 63 6b 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  acks..*/.#define
25520 20 57 52 43 5f 43 6f 6e 74 69 6e 75 65 20 20 20   WRC_Continue   
25530 20 30 20 20 20 2f 2a 20 43 6f 6e 74 69 6e 75 65   0   /* Continue
25540 20 64 6f 77 6e 20 69 6e 74 6f 20 63 68 69 6c 64   down into child
25550 72 65 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57  ren */.#define W
25560 52 43 5f 50 72 75 6e 65 20 20 20 20 20 20 20 31  RC_Prune       1
25570 20 20 20 2f 2a 20 4f 6d 69 74 20 63 68 69 6c 64     /* Omit child
25580 72 65 6e 20 62 75 74 20 63 6f 6e 74 69 6e 75 65  ren but continue
25590 20 77 61 6c 6b 69 6e 67 20 73 69 62 6c 69 6e 67   walking sibling
255a0 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 52 43  s */.#define WRC
255b0 5f 41 62 6f 72 74 20 20 20 20 20 20 20 32 20 20  _Abort       2  
255c0 20 2f 2a 20 41 62 61 6e 64 6f 6e 20 74 68 65 20   /* Abandon the 
255d0 74 72 65 65 20 77 61 6c 6b 20 2a 2f 0a 0a 2f 2a  tree walk */../*
255e0 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20  .** An instance 
255f0 6f 66 20 74 68 69 73 20 73 74 72 75 63 74 75 72  of this structur
25600 65 20 72 65 70 72 65 73 65 6e 74 73 20 61 20 73  e represents a s
25610 65 74 20 6f 66 20 6f 6e 65 20 6f 72 20 6d 6f 72  et of one or mor
25620 65 20 43 54 45 73 0a 2a 2a 20 28 63 6f 6d 6d 6f  e CTEs.** (commo
25630 6e 20 74 61 62 6c 65 20 65 78 70 72 65 73 73 69  n table expressi
25640 6f 6e 73 29 20 63 72 65 61 74 65 64 20 62 79 20  ons) created by 
25650 61 20 73 69 6e 67 6c 65 20 57 49 54 48 20 63 6c  a single WITH cl
25660 61 75 73 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  ause..*/.struct 
25670 57 69 74 68 20 7b 0a 20 20 69 6e 74 20 6e 43 74  With {.  int nCt
25680 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e;              
25690 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
256a0 65 72 20 6f 66 20 43 54 45 73 20 69 6e 20 74 68  er of CTEs in th
256b0 65 20 57 49 54 48 20 63 6c 61 75 73 65 20 2a 2f  e WITH clause */
256c0 0a 20 20 57 69 74 68 20 2a 70 4f 75 74 65 72 3b  .  With *pOuter;
256d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
256e0 20 20 20 2f 2a 20 43 6f 6e 74 61 69 6e 69 6e 67     /* Containing
256f0 20 57 49 54 48 20 63 6c 61 75 73 65 2c 20 6f 72   WITH clause, or
25700 20 4e 55 4c 4c 20 2a 2f 0a 20 20 73 74 72 75 63   NULL */.  struc
25710 74 20 43 74 65 20 7b 20 20 20 20 20 20 20 20 20  t Cte {         
25720 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 6f             /* Fo
25730 72 20 65 61 63 68 20 43 54 45 20 69 6e 20 74 68  r each CTE in th
25740 65 20 57 49 54 48 20 63 6c 61 75 73 65 2e 2e 2e  e WITH clause...
25750 2e 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a  . */.    char *z
25760 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20 20  Name;           
25770 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65           /* Name
25780 20 6f 66 20 74 68 69 73 20 43 54 45 20 2a 2f 0a   of this CTE */.
25790 20 20 20 20 45 78 70 72 4c 69 73 74 20 2a 70 43      ExprList *pC
257a0 6f 6c 73 3b 20 20 20 20 20 20 20 20 20 20 20 20  ols;            
257b0 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 65      /* List of e
257c0 78 70 6c 69 63 69 74 20 63 6f 6c 75 6d 6e 20 6e  xplicit column n
257d0 61 6d 65 73 2c 20 6f 72 20 4e 55 4c 4c 20 2a 2f  ames, or NULL */
257e0 0a 20 20 20 20 53 65 6c 65 63 74 20 2a 70 53 65  .    Select *pSe
257f0 6c 65 63 74 3b 20 20 20 20 20 20 20 20 20 20 20  lect;           
25800 20 20 20 20 20 2f 2a 20 54 68 65 20 64 65 66 69       /* The defi
25810 6e 69 74 69 6f 6e 20 6f 66 20 74 68 69 73 20 43  nition of this C
25820 54 45 20 2a 2f 0a 20 20 20 20 63 6f 6e 73 74 20  TE */.    const 
25830 63 68 61 72 20 2a 7a 43 74 65 45 72 72 3b 20 20  char *zCteErr;  
25840 20 20 20 20 20 20 20 20 20 20 2f 2a 20 45 72 72            /* Err
25850 6f 72 20 6d 65 73 73 61 67 65 20 66 6f 72 20 63  or message for c
25860 69 72 63 75 6c 61 72 20 72 65 66 65 72 65 6e 63  ircular referenc
25870 65 73 20 2a 2f 0a 20 20 7d 20 61 5b 31 5d 3b 0a  es */.  } a[1];.
25880 7d 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54  };..#ifdef SQLIT
25890 45 5f 44 45 42 55 47 0a 2f 2a 0a 2a 2a 20 41 6e  E_DEBUG./*.** An
258a0 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65   instance of the
258b0 20 54 72 65 65 56 69 65 77 20 6f 62 6a 65 63 74   TreeView object
258c0 20 69 73 20 75 73 65 64 20 66 6f 72 20 70 72 69   is used for pri
258d0 6e 74 69 6e 67 20 74 68 65 20 63 6f 6e 74 65 6e  nting the conten
258e0 74 20 6f 66 0a 2a 2a 20 64 61 74 61 20 73 74 72  t of.** data str
258f0 75 63 74 75 72 65 73 20 6f 6e 20 73 71 6c 69 74  uctures on sqlit
25900 65 33 44 65 62 75 67 50 72 69 6e 74 66 28 29 20  e3DebugPrintf() 
25910 75 73 69 6e 67 20 61 20 74 72 65 65 2d 6c 69 6b  using a tree-lik
25920 65 20 76 69 65 77 2e 0a 2a 2f 0a 73 74 72 75 63  e view..*/.struc
25930 74 20 54 72 65 65 56 69 65 77 20 7b 0a 20 20 69  t TreeView {.  i
25940 6e 74 20 69 4c 65 76 65 6c 3b 20 20 20 20 20 20  nt iLevel;      
25950 20 20 20 20 20 20 20 2f 2a 20 57 68 69 63 68 20         /* Which 
25960 6c 65 76 65 6c 20 6f 66 20 74 68 65 20 74 72 65  level of the tre
25970 65 20 77 65 20 61 72 65 20 6f 6e 20 2a 2f 0a 20  e we are on */. 
25980 20 75 38 20 20 62 4c 69 6e 65 5b 31 30 30 5d 3b   u8  bLine[100];
25990 20 20 20 20 20 20 20 20 20 2f 2a 20 44 72 61 77           /* Draw
259a0 20 76 65 72 74 69 63 61 6c 20 69 6e 20 63 6f 6c   vertical in col
259b0 75 6d 6e 20 69 20 69 66 20 62 4c 69 6e 65 5b 69  umn i if bLine[i
259c0 5d 20 69 73 20 74 72 75 65 20 2a 2f 0a 7d 3b 0a  ] is true */.};.
259d0 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
259e0 5f 44 45 42 55 47 20 2a 2f 0a 0a 2f 2a 0a 2a 2a  _DEBUG */../*.**
259f0 20 54 68 69 73 20 6f 62 6a 65 63 74 20 69 73 20   This object is 
25a00 75 73 65 64 20 69 6e 20 76 61 72 69 6f 69 75 73  used in varioius
25a10 20 77 61 79 73 2c 20 61 6c 6c 20 72 65 6c 61 74   ways, all relat
25a20 65 64 20 74 6f 20 77 69 6e 64 6f 77 20 66 75 6e  ed to window fun
25a30 63 74 69 6f 6e 73 0a 2a 2a 0a 2a 2a 20 20 20 28  ctions.**.**   (
25a40 31 29 20 41 20 73 69 6e 67 6c 65 20 69 6e 73 74  1) A single inst
25a50 61 6e 63 65 20 6f 66 20 74 68 69 73 20 73 74 72  ance of this str
25a60 75 63 74 75 72 65 20 69 73 20 61 74 74 61 63 68  ucture is attach
25a70 65 64 20 74 6f 20 74 68 65 0a 2a 2a 20 20 20 20  ed to the.**    
25a80 20 20 20 74 68 65 20 45 78 70 72 2e 70 57 69 6e     the Expr.pWin
25a90 20 66 69 65 6c 64 20 66 6f 72 20 65 61 63 68 20   field for each 
25aa0 77 69 6e 64 6f 77 20 66 75 6e 63 74 69 6f 6e 20  window function 
25ab0 69 6e 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e  in an expression
25ac0 20 74 72 65 65 2e 0a 2a 2a 20 20 20 20 20 20 20   tree..**       
25ad0 54 68 69 73 20 6f 62 6a 65 63 74 20 68 6f 6c 64  This object hold
25ae0 73 20 74 68 65 20 69 6e 66 6f 72 6d 61 74 69 6f  s the informatio
25af0 6e 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20 74  n contained in t
25b00 68 65 20 4f 56 45 52 20 63 6c 61 75 73 65 2c 0a  he OVER clause,.
25b10 2a 2a 20 20 20 20 20 20 20 70 6c 75 73 20 61 64  **       plus ad
25b20 64 69 74 69 6f 6e 61 6c 20 66 69 65 6c 64 73 20  ditional fields 
25b30 75 73 65 64 20 64 75 72 69 6e 67 20 63 6f 64 65  used during code
25b40 20 67 65 6e 65 72 61 74 69 6f 6e 2e 0a 2a 2a 0a   generation..**.
25b50 2a 2a 20 20 20 28 32 29 20 41 6c 6c 20 77 69 6e  **   (2) All win
25b60 64 6f 77 20 66 75 6e 63 74 69 6f 6e 73 20 69 6e  dow functions in
25b70 20 61 20 73 69 6e 67 6c 65 20 53 45 4c 45 43 54   a single SELECT
25b80 20 66 6f 72 6d 20 61 20 6c 69 6e 6b 65 64 2d 6c   form a linked-l
25b90 69 73 74 0a 2a 2a 20 20 20 20 20 20 20 61 74 74  ist.**       att
25ba0 61 63 68 65 64 20 74 6f 20 53 65 6c 65 63 74 2e  ached to Select.
25bb0 70 57 69 6e 2e 20 20 54 68 65 20 57 69 6e 64 6f  pWin.  The Windo
25bc0 77 2e 70 46 75 6e 63 20 61 6e 64 20 57 69 6e 64  w.pFunc and Wind
25bd0 6f 77 2e 70 45 78 70 72 0a 2a 2a 20 20 20 20 20  ow.pExpr.**     
25be0 20 20 66 69 65 6c 64 73 20 70 6f 69 6e 74 20 62    fields point b
25bf0 61 63 6b 20 74 6f 20 74 68 65 20 65 78 70 72 65  ack to the expre
25c00 73 73 69 6f 6e 20 74 68 61 74 20 69 73 20 74 68  ssion that is th
25c10 65 20 77 69 6e 64 6f 77 20 66 75 6e 63 74 69 6f  e window functio
25c20 6e 2e 0a 2a 2a 0a 2a 2a 20 20 20 28 33 29 20 54  n..**.**   (3) T
25c30 68 65 20 74 65 72 6d 73 20 6f 66 20 74 68 65 20  he terms of the 
25c40 57 49 4e 44 4f 57 20 63 6c 61 75 73 65 20 6f 66  WINDOW clause of
25c50 20 61 20 53 45 4c 45 43 54 20 61 72 65 20 69 6e   a SELECT are in
25c60 73 74 61 6e 63 65 73 20 6f 66 20 74 68 69 73 0a  stances of this.
25c70 2a 2a 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20  **       object 
25c80 6f 6e 20 61 20 6c 69 6e 6b 65 64 20 6c 69 73 74  on a linked list
25c90 20 61 74 74 61 63 68 65 64 20 74 6f 20 53 65 6c   attached to Sel
25ca0 65 63 74 2e 70 57 69 6e 44 65 66 6e 2e 0a 2a 2a  ect.pWinDefn..**
25cb0 0a 2a 2a 20 54 68 65 20 75 73 65 73 20 28 31 29  .** The uses (1)
25cc0 20 61 6e 64 20 28 32 29 20 61 72 65 20 72 65 61   and (2) are rea
25cd0 6c 6c 79 20 74 68 65 20 73 61 6d 65 20 57 69 6e  lly the same Win
25ce0 64 6f 77 20 6f 62 6a 65 63 74 20 74 68 61 74 20  dow object that 
25cf0 6a 75 73 74 20 68 61 70 70 65 6e 73 0a 2a 2a 20  just happens.** 
25d00 74 6f 20 62 65 20 61 63 63 65 73 73 69 62 6c 65  to be accessible
25d10 20 69 6e 20 74 77 6f 20 64 69 66 66 65 72 65 6e   in two differen
25d20 74 20 77 61 79 73 2e 20 20 55 73 65 20 28 33 29  t ways.  Use (3)
25d30 20 69 73 20 61 72 65 20 73 65 70 61 72 61 74 65   is are separate
25d40 20 6f 62 6a 65 63 74 73 2e 0a 2a 2f 0a 73 74 72   objects..*/.str
25d50 75 63 74 20 57 69 6e 64 6f 77 20 7b 0a 20 20 63  uct Window {.  c
25d60 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20  har *zName;     
25d70 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f         /* Name o
25d80 66 20 77 69 6e 64 6f 77 20 28 6d 61 79 20 62 65  f window (may be
25d90 20 4e 55 4c 4c 29 20 2a 2f 0a 20 20 45 78 70 72   NULL) */.  Expr
25da0 4c 69 73 74 20 2a 70 50 61 72 74 69 74 69 6f 6e  List *pPartition
25db0 3b 20 20 20 2f 2a 20 50 41 52 54 49 54 49 4f 4e  ;   /* PARTITION
25dc0 20 42 59 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20   BY clause */.  
25dd0 45 78 70 72 4c 69 73 74 20 2a 70 4f 72 64 65 72  ExprList *pOrder
25de0 42 79 3b 20 20 20 20 20 2f 2a 20 4f 52 44 45 52  By;     /* ORDER
25df0 20 42 59 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20   BY clause */.  
25e00 75 38 20 65 54 79 70 65 3b 20 20 20 20 20 20 20  u8 eType;       
25e10 20 20 20 20 20 20 20 20 2f 2a 20 54 4b 5f 52 41          /* TK_RA
25e20 4e 47 45 20 6f 72 20 54 4b 5f 52 4f 57 53 20 2a  NGE or TK_ROWS *
25e30 2f 0a 20 20 75 38 20 65 53 74 61 72 74 3b 20 20  /.  u8 eStart;  
25e40 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 55              /* U
25e50 4e 42 4f 55 4e 44 45 44 2c 20 43 55 52 52 45 4e  NBOUNDED, CURREN
25e60 54 2c 20 50 52 45 43 45 44 49 4e 47 20 6f 72 20  T, PRECEDING or 
25e70 46 4f 4c 4c 4f 57 49 4e 47 20 2a 2f 0a 20 20 75  FOLLOWING */.  u
25e80 38 20 65 45 6e 64 3b 20 20 20 20 20 20 20 20 20  8 eEnd;         
25e90 20 20 20 20 20 20 20 2f 2a 20 55 4e 42 4f 55 4e         /* UNBOUN
25ea0 44 45 44 2c 20 43 55 52 52 45 4e 54 2c 20 50 52  DED, CURRENT, PR
25eb0 45 43 45 44 49 4e 47 20 6f 72 20 46 4f 4c 4c 4f  ECEDING or FOLLO
25ec0 57 49 4e 47 20 2a 2f 0a 20 20 45 78 70 72 20 2a  WING */.  Expr *
25ed0 70 53 74 61 72 74 3b 20 20 20 20 20 20 20 20 20  pStart;         
25ee0 20 20 2f 2a 20 45 78 70 72 65 73 73 69 6f 6e 20    /* Expression 
25ef0 66 6f 72 20 22 3c 65 78 70 72 3e 20 50 52 45 43  for "<expr> PREC
25f00 45 44 49 4e 47 22 20 2a 2f 0a 20 20 45 78 70 72  EDING" */.  Expr
25f10 20 2a 70 45 6e 64 3b 20 20 20 20 20 20 20 20 20   *pEnd;         
25f20 20 20 20 20 2f 2a 20 45 78 70 72 65 73 73 69 6f      /* Expressio
25f30 6e 20 66 6f 72 20 22 3c 65 78 70 72 3e 20 46 4f  n for "<expr> FO
25f40 4c 4c 4f 57 49 4e 47 22 20 2a 2f 0a 20 20 57 69  LLOWING" */.  Wi
25f50 6e 64 6f 77 20 2a 70 4e 65 78 74 57 69 6e 3b 20  ndow *pNextWin; 
25f60 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 77 69        /* Next wi
25f70 6e 64 6f 77 20 66 75 6e 63 74 69 6f 6e 20 62 65  ndow function be
25f80 6c 6f 6e 67 69 6e 67 20 74 6f 20 74 68 69 73 20  longing to this 
25f90 53 45 4c 45 43 54 20 2a 2f 0a 20 20 45 78 70 72  SELECT */.  Expr
25fa0 20 2a 70 46 69 6c 74 65 72 3b 20 20 20 20 20 20   *pFilter;      
25fb0 20 20 20 20 2f 2a 20 54 68 65 20 46 49 4c 54 45      /* The FILTE
25fc0 52 20 65 78 70 72 65 73 73 69 6f 6e 20 2a 2f 0a  R expression */.
25fd0 20 20 46 75 6e 63 44 65 66 20 2a 70 46 75 6e 63    FuncDef *pFunc
25fe0 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65  ;         /* The
25ff0 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 69   function */.  i
26000 6e 74 20 69 45 70 68 43 73 72 3b 20 20 20 20 20  nt iEphCsr;     
26010 20 20 20 20 20 20 20 2f 2a 20 54 65 6d 70 20 74         /* Temp t
26020 61 62 6c 65 20 75 73 65 64 20 62 79 20 74 68 69  able used by thi
26030 73 20 77 69 6e 64 6f 77 20 2a 2f 0a 20 20 69 6e  s window */.  in
26040 74 20 72 65 67 41 63 63 75 6d 3b 0a 20 20 69 6e  t regAccum;.  in
26050 74 20 72 65 67 52 65 73 75 6c 74 3b 0a 20 20 69  t regResult;.  i
26060 6e 74 20 63 73 72 41 70 70 3b 20 20 20 20 20 20  nt csrApp;      
26070 20 20 20 20 20 20 20 2f 2a 20 46 75 6e 63 74 69         /* Functi
26080 6f 6e 20 63 75 72 73 6f 72 20 28 75 73 65 64 20  on cursor (used 
26090 62 79 20 6d 69 6e 2f 6d 61 78 29 20 2a 2f 0a 20  by min/max) */. 
260a0 20 69 6e 74 20 72 65 67 41 70 70 3b 20 20 20 20   int regApp;    
260b0 20 20 20 20 20 20 20 20 20 2f 2a 20 46 75 6e 63           /* Func
260c0 74 69 6f 6e 20 72 65 67 69 73 74 65 72 20 28 61  tion register (a
260d0 6c 73 6f 20 75 73 65 64 20 62 79 20 6d 69 6e 2f  lso used by min/
260e0 6d 61 78 29 20 2a 2f 0a 20 20 69 6e 74 20 72 65  max) */.  int re
260f0 67 50 61 72 74 3b 20 20 20 20 20 20 20 20 20 20  gPart;          
26100 20 20 2f 2a 20 46 69 72 73 74 20 69 6e 20 61 20    /* First in a 
26110 73 65 74 20 6f 66 20 72 65 67 69 73 74 65 72 73  set of registers
26120 20 68 6f 6c 64 69 6e 67 20 50 41 52 54 49 54 49   holding PARTITI
26130 4f 4e 20 42 59 0a 20 20 20 20 20 20 20 20 20 20  ON BY.          
26140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26150 2a 2a 20 61 6e 64 20 4f 52 44 45 52 20 42 59 20  ** and ORDER BY 
26160 76 61 6c 75 65 73 20 66 6f 72 20 74 68 65 20 77  values for the w
26170 69 6e 64 6f 77 20 2a 2f 0a 20 20 45 78 70 72 20  indow */.  Expr 
26180 2a 70 4f 77 6e 65 72 3b 20 20 20 20 20 20 20 20  *pOwner;        
26190 20 20 20 2f 2a 20 45 78 70 72 65 73 73 69 6f 6e     /* Expression
261a0 20 6f 62 6a 65 63 74 20 74 68 69 73 20 77 69 6e   object this win
261b0 64 6f 77 20 69 73 20 61 74 74 61 63 68 65 64 20  dow is attached 
261c0 74 6f 20 2a 2f 0a 20 20 69 6e 74 20 6e 42 75 66  to */.  int nBuf
261d0 66 65 72 43 6f 6c 3b 20 20 20 20 20 20 20 20 20  ferCol;         
261e0 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c  /* Number of col
261f0 75 6d 6e 73 20 69 6e 20 62 75 66 66 65 72 20 74  umns in buffer t
26200 61 62 6c 65 20 2a 2f 0a 20 20 69 6e 74 20 69 41  able */.  int iA
26210 72 67 43 6f 6c 3b 20 20 20 20 20 20 20 20 20 20  rgCol;          
26220 20 20 2f 2a 20 4f 66 66 73 65 74 20 6f 66 20 66    /* Offset of f
26230 69 72 73 74 20 61 72 67 75 6d 65 6e 74 20 66 6f  irst argument fo
26240 72 20 74 68 69 73 20 66 75 6e 63 74 69 6f 6e 20  r this function 
26250 2a 2f 0a 7d 3b 0a 0a 23 69 66 6e 64 65 66 20 53  */.};..#ifndef S
26260 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 49 4e 44 4f  QLITE_OMIT_WINDO
26270 57 46 55 4e 43 0a 76 6f 69 64 20 73 71 6c 69 74  WFUNC.void sqlit
26280 65 33 57 69 6e 64 6f 77 44 65 6c 65 74 65 28 73  e3WindowDelete(s
26290 71 6c 69 74 65 33 2a 2c 20 57 69 6e 64 6f 77 2a  qlite3*, Window*
262a0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 57  );.void sqlite3W
262b0 69 6e 64 6f 77 4c 69 73 74 44 65 6c 65 74 65 28  indowListDelete(
262c0 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 57 69 6e  sqlite3 *db, Win
262d0 64 6f 77 20 2a 70 29 3b 0a 57 69 6e 64 6f 77 20  dow *p);.Window 
262e0 2a 73 71 6c 69 74 65 33 57 69 6e 64 6f 77 41 6c  *sqlite3WindowAl
262f0 6c 6f 63 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c  loc(Parse*, int,
26300 20 69 6e 74 2c 20 45 78 70 72 2a 2c 20 69 6e 74   int, Expr*, int
26310 20 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20   , Expr*);.void 
26320 73 71 6c 69 74 65 33 57 69 6e 64 6f 77 41 74 74  sqlite3WindowAtt
26330 61 63 68 28 50 61 72 73 65 2a 2c 20 45 78 70 72  ach(Parse*, Expr
26340 2a 2c 20 57 69 6e 64 6f 77 2a 29 3b 0a 69 6e 74  *, Window*);.int
26350 20 73 71 6c 69 74 65 33 57 69 6e 64 6f 77 43 6f   sqlite3WindowCo
26360 6d 70 61 72 65 28 50 61 72 73 65 2a 2c 20 57 69  mpare(Parse*, Wi
26370 6e 64 6f 77 2a 2c 20 57 69 6e 64 6f 77 2a 29 3b  ndow*, Window*);
26380 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 57 69 6e  .void sqlite3Win
26390 64 6f 77 43 6f 64 65 49 6e 69 74 28 50 61 72 73  dowCodeInit(Pars
263a0 65 2a 2c 20 57 69 6e 64 6f 77 2a 29 3b 0a 76 6f  e*, Window*);.vo
263b0 69 64 20 73 71 6c 69 74 65 33 57 69 6e 64 6f 77  id sqlite3Window
263c0 43 6f 64 65 53 74 65 70 28 50 61 72 73 65 2a 2c  CodeStep(Parse*,
263d0 20 53 65 6c 65 63 74 2a 2c 20 57 68 65 72 65 49   Select*, WhereI
263e0 6e 66 6f 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b  nfo*, int, int);
263f0 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 69 6e 64  .int sqlite3Wind
26400 6f 77 52 65 77 72 69 74 65 28 50 61 72 73 65 2a  owRewrite(Parse*
26410 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 69 6e 74 20  , Select*);.int 
26420 73 71 6c 69 74 65 33 45 78 70 61 6e 64 53 75 62  sqlite3ExpandSub
26430 71 75 65 72 79 28 50 61 72 73 65 2a 2c 20 73 74  query(Parse*, st
26440 72 75 63 74 20 53 72 63 4c 69 73 74 5f 69 74 65  ruct SrcList_ite
26450 6d 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  m*);.void sqlite
26460 33 57 69 6e 64 6f 77 55 70 64 61 74 65 28 50 61  3WindowUpdate(Pa
26470 72 73 65 2a 2c 20 57 69 6e 64 6f 77 2a 2c 20 57  rse*, Window*, W
26480 69 6e 64 6f 77 2a 2c 20 46 75 6e 63 44 65 66 2a  indow*, FuncDef*
26490 29 3b 0a 57 69 6e 64 6f 77 20 2a 73 71 6c 69 74  );.Window *sqlit
264a0 65 33 57 69 6e 64 6f 77 44 75 70 28 73 71 6c 69  e3WindowDup(sqli
264b0 74 65 33 20 2a 64 62 2c 20 45 78 70 72 20 2a 70  te3 *db, Expr *p
264c0 4f 77 6e 65 72 2c 20 57 69 6e 64 6f 77 20 2a 70  Owner, Window *p
264d0 29 3b 0a 57 69 6e 64 6f 77 20 2a 73 71 6c 69 74  );.Window *sqlit
264e0 65 33 57 69 6e 64 6f 77 4c 69 73 74 44 75 70 28  e3WindowListDup(
264f0 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 57 69 6e  sqlite3 *db, Win
26500 64 6f 77 20 2a 70 29 3b 0a 76 6f 69 64 20 73 71  dow *p);.void sq
26510 6c 69 74 65 33 57 69 6e 64 6f 77 46 75 6e 63 74  lite3WindowFunct
26520 69 6f 6e 73 28 76 6f 69 64 29 3b 0a 23 65 6c 73  ions(void);.#els
26530 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  e.# define sqlit
26540 65 33 57 69 6e 64 6f 77 44 65 6c 65 74 65 28 61  e3WindowDelete(a
26550 2c 62 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  ,b).# define sql
26560 69 74 65 33 57 69 6e 64 6f 77 46 75 6e 63 74 69  ite3WindowFuncti
26570 6f 6e 73 28 29 0a 23 20 64 65 66 69 6e 65 20 73  ons().# define s
26580 71 6c 69 74 65 33 57 69 6e 64 6f 77 41 74 74 61  qlite3WindowAtta
26590 63 68 28 61 2c 62 2c 63 29 0a 23 65 6e 64 69 66  ch(a,b,c).#endif
265a0 0a 0a 2f 2a 0a 2a 2a 20 41 73 73 75 6d 69 6e 67  ../*.** Assuming
265b0 20 7a 49 6e 20 70 6f 69 6e 74 73 20 74 6f 20 74   zIn points to t
265c0 68 65 20 66 69 72 73 74 20 62 79 74 65 20 6f 66  he first byte of
265d0 20 61 20 55 54 46 2d 38 20 63 68 61 72 61 63 74   a UTF-8 charact
265e0 65 72 2c 0a 2a 2a 20 61 64 76 61 6e 63 65 20 7a  er,.** advance z
265f0 49 6e 20 74 6f 20 70 6f 69 6e 74 20 74 6f 20 74  In to point to t
26600 68 65 20 66 69 72 73 74 20 62 79 74 65 20 6f 66  he first byte of
26610 20 74 68 65 20 6e 65 78 74 20 55 54 46 2d 38 20   the next UTF-8 
26620 63 68 61 72 61 63 74 65 72 2e 0a 2a 2f 0a 23 64  character..*/.#d
26630 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 4b 49  efine SQLITE_SKI
26640 50 5f 55 54 46 38 28 7a 49 6e 29 20 7b 20 20 20  P_UTF8(zIn) {   
26650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26660 20 20 20 20 20 5c 0a 20 20 69 66 28 20 28 2a 28       \.  if( (*(
26670 7a 49 6e 2b 2b 29 29 3e 3d 30 78 63 30 20 29 7b  zIn++))>=0xc0 ){
26680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5c 0a                \.
266a0 20 20 20 20 77 68 69 6c 65 28 20 28 2a 7a 49 6e      while( (*zIn
266b0 20 26 20 30 78 63 30 29 3d 3d 30 78 38 30 20 29   & 0xc0)==0x80 )
266c0 7b 20 7a 49 6e 2b 2b 3b 20 7d 20 20 20 20 20 20  { zIn++; }      
266d0 20 20 20 20 20 20 20 5c 0a 20 20 7d 20 20 20 20         \.  }    
266e0 20 20 20 20 20 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 5c 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 53  \.}../*.** The S
26720 51 4c 49 54 45 5f 2a 5f 42 4b 50 54 20 6d 61 63  QLITE_*_BKPT mac
26730 72 6f 73 20 61 72 65 20 73 75 62 73 74 69 74 75  ros are substitu
26740 74 65 73 20 66 6f 72 20 74 68 65 20 65 72 72 6f  tes for the erro
26750 72 20 63 6f 64 65 73 20 77 69 74 68 0a 2a 2a 20  r codes with.** 
26760 74 68 65 20 73 61 6d 65 20 6e 61 6d 65 20 62 75  the same name bu
26770 74 20 77 69 74 68 6f 75 74 20 74 68 65 20 5f 42  t without the _B
26780 4b 50 54 20 73 75 66 66 69 78 2e 20 20 54 68 65  KPT suffix.  The
26790 73 65 20 6d 61 63 72 6f 73 20 69 6e 76 6f 6b 65  se macros invoke
267a0 0a 2a 2a 20 72 6f 75 74 69 6e 65 73 20 74 68 61  .** routines tha
267b0 74 20 72 65 70 6f 72 74 20 74 68 65 20 6c 69 6e  t report the lin
267c0 65 2d 6e 75 6d 62 65 72 20 6f 6e 20 77 68 69 63  e-number on whic
267d0 68 20 74 68 65 20 65 72 72 6f 72 20 6f 72 69 67  h the error orig
267e0 69 6e 61 74 65 64 0a 2a 2a 20 75 73 69 6e 67 20  inated.** using 
267f0 73 71 6c 69 74 65 33 5f 6c 6f 67 28 29 2e 20 20  sqlite3_log().  
26800 54 68 65 20 72 6f 75 74 69 6e 65 73 20 61 6c 73  The routines als
26810 6f 20 70 72 6f 76 69 64 65 20 61 20 63 6f 6e 76  o provide a conv
26820 65 6e 69 65 6e 74 20 70 6c 61 63 65 0a 2a 2a 20  enient place.** 
26830 74 6f 20 73 65 74 20 61 20 64 65 62 75 67 67 65  to set a debugge
26840 72 20 62 72 65 61 6b 70 6f 69 6e 74 2e 0a 2a 2f  r breakpoint..*/
26850 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 65 70 6f  .int sqlite3Repo
26860 72 74 45 72 72 6f 72 28 69 6e 74 20 69 45 72 72  rtError(int iErr
26870 2c 20 69 6e 74 20 6c 69 6e 65 6e 6f 2c 20 63 6f  , int lineno, co
26880 6e 73 74 20 63 68 61 72 20 2a 7a 54 79 70 65 29  nst char *zType)
26890 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 6f 72  ;.int sqlite3Cor
268a0 72 75 70 74 45 72 72 6f 72 28 69 6e 74 29 3b 0a  ruptError(int);.
268b0 69 6e 74 20 73 71 6c 69 74 65 33 4d 69 73 75 73  int sqlite3Misus
268c0 65 45 72 72 6f 72 28 69 6e 74 29 3b 0a 69 6e 74  eError(int);.int
268d0 20 73 71 6c 69 74 65 33 43 61 6e 74 6f 70 65 6e   sqlite3Cantopen
268e0 45 72 72 6f 72 28 69 6e 74 29 3b 0a 23 64 65 66  Error(int);.#def
268f0 69 6e 65 20 53 51 4c 49 54 45 5f 43 4f 52 52 55  ine SQLITE_CORRU
26900 50 54 5f 42 4b 50 54 20 73 71 6c 69 74 65 33 43  PT_BKPT sqlite3C
26910 6f 72 72 75 70 74 45 72 72 6f 72 28 5f 5f 4c 49  orruptError(__LI
26920 4e 45 5f 5f 29 0a 23 64 65 66 69 6e 65 20 53 51  NE__).#define SQ
26930 4c 49 54 45 5f 4d 49 53 55 53 45 5f 42 4b 50 54  LITE_MISUSE_BKPT
26940 20 73 71 6c 69 74 65 33 4d 69 73 75 73 65 45 72   sqlite3MisuseEr
26950 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 29 0a 23 64  ror(__LINE__).#d
26960 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 41 4e  efine SQLITE_CAN
26970 54 4f 50 45 4e 5f 42 4b 50 54 20 73 71 6c 69 74  TOPEN_BKPT sqlit
26980 65 33 43 61 6e 74 6f 70 65 6e 45 72 72 6f 72 28  e3CantopenError(
26990 5f 5f 4c 49 4e 45 5f 5f 29 0a 23 69 66 64 65 66  __LINE__).#ifdef
269a0 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20   SQLITE_DEBUG.  
269b0 69 6e 74 20 73 71 6c 69 74 65 33 4e 6f 6d 65 6d  int sqlite3Nomem
269c0 45 72 72 6f 72 28 69 6e 74 29 3b 0a 20 20 69 6e  Error(int);.  in
269d0 74 20 73 71 6c 69 74 65 33 49 6f 65 72 72 6e 6f  t sqlite3Ioerrno
269e0 6d 65 6d 45 72 72 6f 72 28 69 6e 74 29 3b 0a 20  memError(int);. 
269f0 20 69 6e 74 20 73 71 6c 69 74 65 33 43 6f 72 72   int sqlite3Corr
26a00 75 70 74 50 67 6e 6f 45 72 72 6f 72 28 69 6e 74  uptPgnoError(int
26a10 2c 50 67 6e 6f 29 3b 0a 23 20 64 65 66 69 6e 65  ,Pgno);.# define
26a20 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 5f 42 4b   SQLITE_NOMEM_BK
26a30 50 54 20 73 71 6c 69 74 65 33 4e 6f 6d 65 6d 45  PT sqlite3NomemE
26a40 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 29 0a 23  rror(__LINE__).#
26a50 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49   define SQLITE_I
26a60 4f 45 52 52 5f 4e 4f 4d 45 4d 5f 42 4b 50 54 20  OERR_NOMEM_BKPT 
26a70 73 71 6c 69 74 65 33 49 6f 65 72 72 6e 6f 6d 65  sqlite3Ioerrnome
26a80 6d 45 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 29  mError(__LINE__)
26a90 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
26aa0 5f 43 4f 52 52 55 50 54 5f 50 47 4e 4f 28 50 29  _CORRUPT_PGNO(P)
26ab0 20 73 71 6c 69 74 65 33 43 6f 72 72 75 70 74 50   sqlite3CorruptP
26ac0 67 6e 6f 45 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f  gnoError(__LINE_
26ad0 5f 2c 28 50 29 29 0a 23 65 6c 73 65 0a 23 20 64  _,(P)).#else.# d
26ae0 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e 4f 4d  efine SQLITE_NOM
26af0 45 4d 5f 42 4b 50 54 20 53 51 4c 49 54 45 5f 4e  EM_BKPT SQLITE_N
26b00 4f 4d 45 4d 0a 23 20 64 65 66 69 6e 65 20 53 51  OMEM.# define SQ
26b10 4c 49 54 45 5f 49 4f 45 52 52 5f 4e 4f 4d 45 4d  LITE_IOERR_NOMEM
26b20 5f 42 4b 50 54 20 53 51 4c 49 54 45 5f 49 4f 45  _BKPT SQLITE_IOE
26b30 52 52 5f 4e 4f 4d 45 4d 0a 23 20 64 65 66 69 6e  RR_NOMEM.# defin
26b40 65 20 53 51 4c 49 54 45 5f 43 4f 52 52 55 50 54  e SQLITE_CORRUPT
26b50 5f 50 47 4e 4f 28 50 29 20 73 71 6c 69 74 65 33  _PGNO(P) sqlite3
26b60 43 6f 72 72 75 70 74 45 72 72 6f 72 28 5f 5f 4c  CorruptError(__L
26b70 49 4e 45 5f 5f 29 0a 23 65 6e 64 69 66 0a 0a 2f  INE__).#endif../
26b80 2a 0a 2a 2a 20 46 54 53 33 20 61 6e 64 20 46 54  *.** FTS3 and FT
26b90 53 34 20 62 6f 74 68 20 72 65 71 75 69 72 65 20  S4 both require 
26ba0 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 73 75  virtual table su
26bb0 70 70 6f 72 74 0a 2a 2f 0a 23 69 66 20 64 65 66  pport.*/.#if def
26bc0 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54  ined(SQLITE_OMIT
26bd0 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 29 0a 23  _VIRTUALTABLE).#
26be0 20 75 6e 64 65 66 20 53 51 4c 49 54 45 5f 45 4e   undef SQLITE_EN
26bf0 41 42 4c 45 5f 46 54 53 33 0a 23 20 75 6e 64 65  ABLE_FTS3.# unde
26c00 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
26c10 46 54 53 34 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  FTS4.#endif../*.
26c20 2a 2a 20 46 54 53 34 20 69 73 20 72 65 61 6c 6c  ** FTS4 is reall
26c30 79 20 61 6e 20 65 78 74 65 6e 73 69 6f 6e 20 66  y an extension f
26c40 6f 72 20 46 54 53 33 2e 20 20 49 74 20 69 73 20  or FTS3.  It is 
26c50 65 6e 61 62 6c 65 64 20 75 73 69 6e 67 20 74 68  enabled using th
26c60 65 0a 2a 2a 20 53 51 4c 49 54 45 5f 45 4e 41 42  e.** SQLITE_ENAB
26c70 4c 45 5f 46 54 53 33 20 6d 61 63 72 6f 2e 20 20  LE_FTS3 macro.  
26c80 42 75 74 20 74 6f 20 61 76 6f 69 64 20 63 6f 6e  But to avoid con
26c90 66 75 73 69 6f 6e 20 77 65 20 61 6c 73 6f 20 63  fusion we also c
26ca0 61 6c 6c 0a 2a 2a 20 74 68 65 20 53 51 4c 49 54  all.** the SQLIT
26cb0 45 5f 45 4e 41 42 4c 45 5f 46 54 53 34 20 6d 61  E_ENABLE_FTS4 ma
26cc0 63 72 6f 20 74 6f 20 73 65 72 76 65 20 61 73 20  cro to serve as 
26cd0 61 6e 20 61 6c 69 61 73 20 66 6f 72 20 53 51 4c  an alias for SQL
26ce0 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33 2e  ITE_ENABLE_FTS3.
26cf0 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28  .*/.#if defined(
26d00 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54  SQLITE_ENABLE_FT
26d10 53 34 29 20 26 26 20 21 64 65 66 69 6e 65 64 28  S4) && !defined(
26d20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54  SQLITE_ENABLE_FT
26d30 53 33 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  S3).# define SQL
26d40 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33 20  ITE_ENABLE_FTS3 
26d50 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  1.#endif../*.** 
26d60 54 68 65 20 63 74 79 70 65 2e 68 20 68 65 61 64  The ctype.h head
26d70 65 72 20 69 73 20 6e 65 65 64 65 64 20 66 6f 72  er is needed for
26d80 20 6e 6f 6e 2d 41 53 43 49 49 20 73 79 73 74 65   non-ASCII syste
26d90 6d 73 2e 20 20 49 74 20 69 73 20 61 6c 73 6f 0a  ms.  It is also.
26da0 2a 2a 20 6e 65 65 64 65 64 20 62 79 20 46 54 53  ** needed by FTS
26db0 33 20 77 68 65 6e 20 46 54 53 33 20 69 73 20 69  3 when FTS3 is i
26dc0 6e 63 6c 75 64 65 64 20 69 6e 20 74 68 65 20 61  ncluded in the a
26dd0 6d 61 6c 67 61 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a  malgamation..*/.
26de0 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c  #if !defined(SQL
26df0 49 54 45 5f 41 53 43 49 49 29 20 7c 7c 20 5c 0a  ITE_ASCII) || \.
26e00 20 20 20 20 28 64 65 66 69 6e 65 64 28 53 51 4c      (defined(SQL
26e10 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33 29  ITE_ENABLE_FTS3)
26e20 20 26 26 20 64 65 66 69 6e 65 64 28 53 51 4c 49   && defined(SQLI
26e30 54 45 5f 41 4d 41 4c 47 41 4d 41 54 49 4f 4e 29  TE_AMALGAMATION)
26e40 29 0a 23 20 69 6e 63 6c 75 64 65 20 3c 63 74 79  ).# include <cty
26e50 70 65 2e 68 3e 0a 23 65 6e 64 69 66 0a 0a 2f 2a  pe.h>.#endif../*
26e60 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e  .** The followin
26e70 67 20 6d 61 63 72 6f 73 20 6d 69 6d 69 63 20 74  g macros mimic t
26e80 68 65 20 73 74 61 6e 64 61 72 64 20 6c 69 62 72  he standard libr
26e90 61 72 79 20 66 75 6e 63 74 69 6f 6e 73 20 74 6f  ary functions to
26ea0 75 70 70 65 72 28 29 2c 0a 2a 2a 20 69 73 73 70  upper(),.** issp
26eb0 61 63 65 28 29 2c 20 69 73 61 6c 6e 75 6d 28 29  ace(), isalnum()
26ec0 2c 20 69 73 64 69 67 69 74 28 29 20 61 6e 64 20  , isdigit() and 
26ed0 69 73 78 64 69 67 69 74 28 29 2c 20 72 65 73 70  isxdigit(), resp
26ee0 65 63 74 69 76 65 6c 79 2e 20 54 68 65 0a 2a 2a  ectively. The.**
26ef0 20 73 71 6c 69 74 65 20 76 65 72 73 69 6f 6e 73   sqlite versions
26f00 20 6f 6e 6c 79 20 77 6f 72 6b 20 66 6f 72 20 41   only work for A
26f10 53 43 49 49 20 63 68 61 72 61 63 74 65 72 73 2c  SCII characters,
26f20 20 72 65 67 61 72 64 6c 65 73 73 20 6f 66 20 6c   regardless of l
26f30 6f 63 61 6c 65 2e 0a 2a 2f 0a 23 69 66 64 65 66  ocale..*/.#ifdef
26f40 20 53 51 4c 49 54 45 5f 41 53 43 49 49 0a 23 20   SQLITE_ASCII.# 
26f50 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54 6f  define sqlite3To
26f60 75 70 70 65 72 28 78 29 20 20 28 28 78 29 26 7e  upper(x)  ((x)&~
26f70 28 73 71 6c 69 74 65 33 43 74 79 70 65 4d 61 70  (sqlite3CtypeMap
26f80 5b 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29  [(unsigned char)
26f90 28 78 29 5d 26 30 78 32 30 29 29 0a 23 20 64 65  (x)]&0x20)).# de
26fa0 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 73 70  fine sqlite3Issp
26fb0 61 63 65 28 78 29 20 20 20 28 73 71 6c 69 74 65  ace(x)   (sqlite
26fc0 33 43 74 79 70 65 4d 61 70 5b 28 75 6e 73 69 67  3CtypeMap[(unsig
26fd0 6e 65 64 20 63 68 61 72 29 28 78 29 5d 26 30 78  ned char)(x)]&0x
26fe0 30 31 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  01).# define sql
26ff0 69 74 65 33 49 73 61 6c 6e 75 6d 28 78 29 20 20  ite3Isalnum(x)  
27000 20 28 73 71 6c 69 74 65 33 43 74 79 70 65 4d 61   (sqlite3CtypeMa
27010 70 5b 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72  p[(unsigned char
27020 29 28 78 29 5d 26 30 78 30 36 29 0a 23 20 64 65  )(x)]&0x06).# de
27030 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 61 6c  fine sqlite3Isal
27040 70 68 61 28 78 29 20 20 20 28 73 71 6c 69 74 65  pha(x)   (sqlite
27050 33 43 74 79 70 65 4d 61 70 5b 28 75 6e 73 69 67  3CtypeMap[(unsig
27060 6e 65 64 20 63 68 61 72 29 28 78 29 5d 26 30 78  ned char)(x)]&0x
27070 30 32 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  02).# define sql
27080 69 74 65 33 49 73 64 69 67 69 74 28 78 29 20 20  ite3Isdigit(x)  
27090 20 28 73 71 6c 69 74 65 33 43 74 79 70 65 4d 61   (sqlite3CtypeMa
270a0 70 5b 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72  p[(unsigned char
270b0 29 28 78 29 5d 26 30 78 30 34 29 0a 23 20 64 65  )(x)]&0x04).# de
270c0 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 78 64  fine sqlite3Isxd
270d0 69 67 69 74 28 78 29 20 20 28 73 71 6c 69 74 65  igit(x)  (sqlite
270e0 33 43 74 79 70 65 4d 61 70 5b 28 75 6e 73 69 67  3CtypeMap[(unsig
270f0 6e 65 64 20 63 68 61 72 29 28 78 29 5d 26 30 78  ned char)(x)]&0x
27100 30 38 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  08).# define sql
27110 69 74 65 33 54 6f 6c 6f 77 65 72 28 78 29 20 20  ite3Tolower(x)  
27120 20 28 73 71 6c 69 74 65 33 55 70 70 65 72 54 6f   (sqlite3UpperTo
27130 4c 6f 77 65 72 5b 28 75 6e 73 69 67 6e 65 64 20  Lower[(unsigned 
27140 63 68 61 72 29 28 78 29 5d 29 0a 23 20 64 65 66  char)(x)]).# def
27150 69 6e 65 20 73 71 6c 69 74 65 33 49 73 71 75 6f  ine sqlite3Isquo
27160 74 65 28 78 29 20 20 20 28 73 71 6c 69 74 65 33  te(x)   (sqlite3
27170 43 74 79 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e  CtypeMap[(unsign
27180 65 64 20 63 68 61 72 29 28 78 29 5d 26 30 78 38  ed char)(x)]&0x8
27190 30 29 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e  0).#else.# defin
271a0 65 20 73 71 6c 69 74 65 33 54 6f 75 70 70 65 72  e sqlite3Toupper
271b0 28 78 29 20 20 20 74 6f 75 70 70 65 72 28 28 75  (x)   toupper((u
271c0 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29  nsigned char)(x)
271d0 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
271e0 65 33 49 73 73 70 61 63 65 28 78 29 20 20 20 69  e3Isspace(x)   i
271f0 73 73 70 61 63 65 28 28 75 6e 73 69 67 6e 65 64  sspace((unsigned
27200 20 63 68 61 72 29 28 78 29 29 0a 23 20 64 65 66   char)(x)).# def
27210 69 6e 65 20 73 71 6c 69 74 65 33 49 73 61 6c 6e  ine sqlite3Isaln
27220 75 6d 28 78 29 20 20 20 69 73 61 6c 6e 75 6d 28  um(x)   isalnum(
27230 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28  (unsigned char)(
27240 78 29 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  x)).# define sql
27250 69 74 65 33 49 73 61 6c 70 68 61 28 78 29 20 20  ite3Isalpha(x)  
27260 20 69 73 61 6c 70 68 61 28 28 75 6e 73 69 67 6e   isalpha((unsign
27270 65 64 20 63 68 61 72 29 28 78 29 29 0a 23 20 64  ed char)(x)).# d
27280 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 64  efine sqlite3Isd
27290 69 67 69 74 28 78 29 20 20 20 69 73 64 69 67 69  igit(x)   isdigi
272a0 74 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72  t((unsigned char
272b0 29 28 78 29 29 0a 23 20 64 65 66 69 6e 65 20 73  )(x)).# define s
272c0 71 6c 69 74 65 33 49 73 78 64 69 67 69 74 28 78  qlite3Isxdigit(x
272d0 29 20 20 69 73 78 64 69 67 69 74 28 28 75 6e 73  )  isxdigit((uns
272e0 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 29 0a  igned char)(x)).
272f0 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
27300 54 6f 6c 6f 77 65 72 28 78 29 20 20 20 74 6f 6c  Tolower(x)   tol
27310 6f 77 65 72 28 28 75 6e 73 69 67 6e 65 64 20 63  ower((unsigned c
27320 68 61 72 29 28 78 29 29 0a 23 20 64 65 66 69 6e  har)(x)).# defin
27330 65 20 73 71 6c 69 74 65 33 49 73 71 75 6f 74 65  e sqlite3Isquote
27340 28 78 29 20 20 20 28 28 78 29 3d 3d 27 22 27 7c  (x)   ((x)=='"'|
27350 7c 28 78 29 3d 3d 27 5c 27 27 7c 7c 28 78 29 3d  |(x)=='\''||(x)=
27360 3d 27 5b 27 7c 7c 28 78 29 3d 3d 27 60 27 29 0a  ='['||(x)=='`').
27370 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53  #endif.#ifndef S
27380 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 4f 4d 50 49  QLITE_OMIT_COMPI
27390 4c 45 4f 50 54 49 4f 4e 5f 44 49 41 47 53 0a 69  LEOPTION_DIAGS.i
273a0 6e 74 20 73 71 6c 69 74 65 33 49 73 49 64 43 68  nt sqlite3IsIdCh
273b0 61 72 28 75 38 29 3b 0a 23 65 6e 64 69 66 0a 0a  ar(u8);.#endif..
273c0 2f 2a 0a 2a 2a 20 49 6e 74 65 72 6e 61 6c 20 66  /*.** Internal f
273d0 75 6e 63 74 69 6f 6e 20 70 72 6f 74 6f 74 79 70  unction prototyp
273e0 65 73 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65  es.*/.int sqlite
273f0 33 53 74 72 49 43 6d 70 28 63 6f 6e 73 74 20 63  3StrICmp(const c
27400 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  har*,const char*
27410 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 74  );.int sqlite3St
27420 72 6c 65 6e 33 30 28 63 6f 6e 73 74 20 63 68 61  rlen30(const cha
27430 72 2a 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74  r*);.char *sqlit
27440 65 33 43 6f 6c 75 6d 6e 54 79 70 65 28 43 6f 6c  e3ColumnType(Col
27450 75 6d 6e 2a 2c 63 68 61 72 2a 29 3b 0a 23 64 65  umn*,char*);.#de
27460 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74 72 4e  fine sqlite3StrN
27470 49 43 6d 70 20 73 71 6c 69 74 65 33 5f 73 74 72  ICmp sqlite3_str
27480 6e 69 63 6d 70 0a 0a 69 6e 74 20 73 71 6c 69 74  nicmp..int sqlit
27490 65 33 4d 61 6c 6c 6f 63 49 6e 69 74 28 76 6f 69  e3MallocInit(voi
274a0 64 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  d);.void sqlite3
274b0 4d 61 6c 6c 6f 63 45 6e 64 28 76 6f 69 64 29 3b  MallocEnd(void);
274c0 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 4d 61  .void *sqlite3Ma
274d0 6c 6c 6f 63 28 75 36 34 29 3b 0a 76 6f 69 64 20  lloc(u64);.void 
274e0 2a 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 5a 65  *sqlite3MallocZe
274f0 72 6f 28 75 36 34 29 3b 0a 76 6f 69 64 20 2a 73  ro(u64);.void *s
27500 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 5a 65  qlite3DbMallocZe
27510 72 6f 28 73 71 6c 69 74 65 33 2a 2c 20 75 36 34  ro(sqlite3*, u64
27520 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33  );.void *sqlite3
27530 44 62 4d 61 6c 6c 6f 63 52 61 77 28 73 71 6c 69  DbMallocRaw(sqli
27540 74 65 33 2a 2c 20 75 36 34 29 3b 0a 76 6f 69 64  te3*, u64);.void
27550 20 2a 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f   *sqlite3DbMallo
27560 63 52 61 77 4e 4e 28 73 71 6c 69 74 65 33 2a 2c  cRawNN(sqlite3*,
27570 20 75 36 34 29 3b 0a 63 68 61 72 20 2a 73 71 6c   u64);.char *sql
27580 69 74 65 33 44 62 53 74 72 44 75 70 28 73 71 6c  ite3DbStrDup(sql
27590 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72  ite3*,const char
275a0 2a 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74 65  *);.char *sqlite
275b0 33 44 62 53 74 72 4e 44 75 70 28 73 71 6c 69 74  3DbStrNDup(sqlit
275c0 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c  e3*,const char*,
275d0 20 75 36 34 29 3b 0a 63 68 61 72 20 2a 73 71 6c   u64);.char *sql
275e0 69 74 65 33 44 62 53 70 61 6e 44 75 70 28 73 71  ite3DbSpanDup(sq
275f0 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61  lite3*,const cha
27600 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  r*,const char*);
27610 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 52 65  .void *sqlite3Re
27620 61 6c 6c 6f 63 28 76 6f 69 64 2a 2c 20 75 36 34  alloc(void*, u64
27630 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33  );.void *sqlite3
27640 44 62 52 65 61 6c 6c 6f 63 4f 72 46 72 65 65 28  DbReallocOrFree(
27650 73 71 6c 69 74 65 33 20 2a 2c 20 76 6f 69 64 20  sqlite3 *, void 
27660 2a 2c 20 75 36 34 29 3b 0a 76 6f 69 64 20 2a 73  *, u64);.void *s
27670 71 6c 69 74 65 33 44 62 52 65 61 6c 6c 6f 63 28  qlite3DbRealloc(
27680 73 71 6c 69 74 65 33 20 2a 2c 20 76 6f 69 64 20  sqlite3 *, void 
27690 2a 2c 20 75 36 34 29 3b 0a 76 6f 69 64 20 73 71  *, u64);.void sq
276a0 6c 69 74 65 33 44 62 46 72 65 65 28 73 71 6c 69  lite3DbFree(sqli
276b0 74 65 33 2a 2c 20 76 6f 69 64 2a 29 3b 0a 76 6f  te3*, void*);.vo
276c0 69 64 20 73 71 6c 69 74 65 33 44 62 46 72 65 65  id sqlite3DbFree
276d0 4e 4e 28 73 71 6c 69 74 65 33 2a 2c 20 76 6f 69  NN(sqlite3*, voi
276e0 64 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  d*);.int sqlite3
276f0 4d 61 6c 6c 6f 63 53 69 7a 65 28 76 6f 69 64 2a  MallocSize(void*
27700 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 44 62  );.int sqlite3Db
27710 4d 61 6c 6c 6f 63 53 69 7a 65 28 73 71 6c 69 74  MallocSize(sqlit
27720 65 33 2a 2c 20 76 6f 69 64 2a 29 3b 0a 76 6f 69  e3*, void*);.voi
27730 64 20 2a 73 71 6c 69 74 65 33 50 61 67 65 4d 61  d *sqlite3PageMa
27740 6c 6c 6f 63 28 69 6e 74 29 3b 0a 76 6f 69 64 20  lloc(int);.void 
27750 73 71 6c 69 74 65 33 50 61 67 65 46 72 65 65 28  sqlite3PageFree(
27760 76 6f 69 64 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  void*);.void sql
27770 69 74 65 33 4d 65 6d 53 65 74 44 65 66 61 75 6c  ite3MemSetDefaul
27780 74 28 76 6f 69 64 29 3b 0a 23 69 66 6e 64 65 66  t(void);.#ifndef
27790 20 53 51 4c 49 54 45 5f 55 4e 54 45 53 54 41 42   SQLITE_UNTESTAB
277a0 4c 45 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42  LE.void sqlite3B
277b0 65 6e 69 67 6e 4d 61 6c 6c 6f 63 48 6f 6f 6b 73  enignMallocHooks
277c0 28 76 6f 69 64 20 28 2a 29 28 76 6f 69 64 29 2c  (void (*)(void),
277d0 20 76 6f 69 64 20 28 2a 29 28 76 6f 69 64 29 29   void (*)(void))
277e0 3b 0a 23 65 6e 64 69 66 0a 69 6e 74 20 73 71 6c  ;.#endif.int sql
277f0 69 74 65 33 48 65 61 70 4e 65 61 72 6c 79 46 75  ite3HeapNearlyFu
27800 6c 6c 28 76 6f 69 64 29 3b 0a 0a 2f 2a 0a 2a 2a  ll(void);../*.**
27810 20 4f 6e 20 73 79 73 74 65 6d 73 20 77 69 74 68   On systems with
27820 20 61 6d 70 6c 65 20 73 74 61 63 6b 20 73 70 61   ample stack spa
27830 63 65 20 61 6e 64 20 74 68 61 74 20 73 75 70 70  ce and that supp
27840 6f 72 74 20 61 6c 6c 6f 63 61 28 29 2c 20 6d 61  ort alloca(), ma
27850 6b 65 0a 2a 2a 20 75 73 65 20 6f 66 20 61 6c 6c  ke.** use of all
27860 6f 63 61 28 29 20 74 6f 20 6f 62 74 61 69 6e 20  oca() to obtain 
27870 73 70 61 63 65 20 66 6f 72 20 6c 61 72 67 65 20  space for large 
27880 61 75 74 6f 6d 61 74 69 63 20 6f 62 6a 65 63 74  automatic object
27890 73 2e 20 20 42 79 20 64 65 66 61 75 6c 74 2c 0a  s.  By default,.
278a0 2a 2a 20 6f 62 74 61 69 6e 20 73 70 61 63 65 20  ** obtain space 
278b0 66 72 6f 6d 20 6d 61 6c 6c 6f 63 28 29 2e 0a 2a  from malloc()..*
278c0 2a 0a 2a 2a 20 54 68 65 20 61 6c 6c 6f 63 61 28  *.** The alloca(
278d0 29 20 72 6f 75 74 69 6e 65 20 6e 65 76 65 72 20  ) routine never 
278e0 72 65 74 75 72 6e 73 20 4e 55 4c 4c 2e 20 20 54  returns NULL.  T
278f0 68 69 73 20 77 69 6c 6c 20 63 61 75 73 65 20 63  his will cause c
27900 6f 64 65 20 70 61 74 68 73 0a 2a 2a 20 74 68 61  ode paths.** tha
27910 74 20 64 65 61 6c 20 77 69 74 68 20 73 71 6c 69  t deal with sqli
27920 74 65 33 53 74 61 63 6b 41 6c 6c 6f 63 28 29 20  te3StackAlloc() 
27930 66 61 69 6c 75 72 65 73 20 74 6f 20 62 65 20 75  failures to be u
27940 6e 72 65 61 63 68 61 62 6c 65 2e 0a 2a 2f 0a 23  nreachable..*/.#
27950 69 66 64 65 66 20 53 51 4c 49 54 45 5f 55 53 45  ifdef SQLITE_USE
27960 5f 41 4c 4c 4f 43 41 0a 23 20 64 65 66 69 6e 65  _ALLOCA.# define
27970 20 73 71 6c 69 74 65 33 53 74 61 63 6b 41 6c 6c   sqlite3StackAll
27980 6f 63 52 61 77 28 44 2c 4e 29 20 20 20 61 6c 6c  ocRaw(D,N)   all
27990 6f 63 61 28 4e 29 0a 23 20 64 65 66 69 6e 65 20  oca(N).# define 
279a0 73 71 6c 69 74 65 33 53 74 61 63 6b 41 6c 6c 6f  sqlite3StackAllo
279b0 63 5a 65 72 6f 28 44 2c 4e 29 20 20 6d 65 6d 73  cZero(D,N)  mems
279c0 65 74 28 61 6c 6c 6f 63 61 28 4e 29 2c 20 30 2c  et(alloca(N), 0,
279d0 20 4e 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c   N).# define sql
279e0 69 74 65 33 53 74 61 63 6b 46 72 65 65 28 44 2c  ite3StackFree(D,
279f0 50 29 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e  P).#else.# defin
27a00 65 20 73 71 6c 69 74 65 33 53 74 61 63 6b 41 6c  e sqlite3StackAl
27a10 6c 6f 63 52 61 77 28 44 2c 4e 29 20 20 20 73 71  locRaw(D,N)   sq
27a20 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 52 61 77  lite3DbMallocRaw
27a30 28 44 2c 4e 29 0a 23 20 64 65 66 69 6e 65 20 73  (D,N).# define s
27a40 71 6c 69 74 65 33 53 74 61 63 6b 41 6c 6c 6f 63  qlite3StackAlloc
27a50 5a 65 72 6f 28 44 2c 4e 29 20 20 73 71 6c 69 74  Zero(D,N)  sqlit
27a60 65 33 44 62 4d 61 6c 6c 6f 63 5a 65 72 6f 28 44  e3DbMallocZero(D
27a70 2c 4e 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  ,N).# define sql
27a80 69 74 65 33 53 74 61 63 6b 46 72 65 65 28 44 2c  ite3StackFree(D,
27a90 50 29 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  P)       sqlite3
27aa0 44 62 46 72 65 65 28 44 2c 50 29 0a 23 65 6e 64  DbFree(D,P).#end
27ab0 69 66 0a 0a 2f 2a 20 44 6f 20 6e 6f 74 20 61 6c  if../* Do not al
27ac0 6c 6f 77 20 62 6f 74 68 20 4d 45 4d 53 59 53 35  low both MEMSYS5
27ad0 20 61 6e 64 20 4d 45 4d 53 59 53 33 20 74 6f 20   and MEMSYS3 to 
27ae0 62 65 20 64 65 66 69 6e 65 64 20 74 6f 67 65 74  be defined toget
27af0 68 65 72 2e 20 20 49 66 20 74 68 65 79 0a 2a 2a  her.  If they.**
27b00 20 61 72 65 2c 20 64 69 73 61 62 6c 65 20 4d 45   are, disable ME
27b10 4d 53 59 53 33 0a 2a 2f 0a 23 69 66 64 65 66 20  MSYS3.*/.#ifdef 
27b20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4d 45  SQLITE_ENABLE_ME
27b30 4d 53 59 53 35 0a 63 6f 6e 73 74 20 73 71 6c 69  MSYS5.const sqli
27b40 74 65 33 5f 6d 65 6d 5f 6d 65 74 68 6f 64 73 20  te3_mem_methods 
27b50 2a 73 71 6c 69 74 65 33 4d 65 6d 47 65 74 4d 65  *sqlite3MemGetMe
27b60 6d 73 79 73 35 28 76 6f 69 64 29 3b 0a 23 75 6e  msys5(void);.#un
27b70 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  def SQLITE_ENABL
27b80 45 5f 4d 45 4d 53 59 53 33 0a 23 65 6e 64 69 66  E_MEMSYS3.#endif
27b90 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45  .#ifdef SQLITE_E
27ba0 4e 41 42 4c 45 5f 4d 45 4d 53 59 53 33 0a 63 6f  NABLE_MEMSYS3.co
27bb0 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d 65 6d 5f  nst sqlite3_mem_
27bc0 6d 65 74 68 6f 64 73 20 2a 73 71 6c 69 74 65 33  methods *sqlite3
27bd0 4d 65 6d 47 65 74 4d 65 6d 73 79 73 33 28 76 6f  MemGetMemsys3(vo
27be0 69 64 29 3b 0a 23 65 6e 64 69 66 0a 0a 0a 23 69  id);.#endif...#i
27bf0 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4d 55 54  fndef SQLITE_MUT
27c00 45 58 5f 4f 4d 49 54 0a 20 20 73 71 6c 69 74 65  EX_OMIT.  sqlite
27c10 33 5f 6d 75 74 65 78 5f 6d 65 74 68 6f 64 73 20  3_mutex_methods 
27c20 63 6f 6e 73 74 20 2a 73 71 6c 69 74 65 33 44 65  const *sqlite3De
27c30 66 61 75 6c 74 4d 75 74 65 78 28 76 6f 69 64 29  faultMutex(void)
27c40 3b 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65  ;.  sqlite3_mute
27c50 78 5f 6d 65 74 68 6f 64 73 20 63 6f 6e 73 74 20  x_methods const 
27c60 2a 73 71 6c 69 74 65 33 4e 6f 6f 70 4d 75 74 65  *sqlite3NoopMute
27c70 78 28 76 6f 69 64 29 3b 0a 20 20 73 71 6c 69 74  x(void);.  sqlit
27c80 65 33 5f 6d 75 74 65 78 20 2a 73 71 6c 69 74 65  e3_mutex *sqlite
27c90 33 4d 75 74 65 78 41 6c 6c 6f 63 28 69 6e 74 29  3MutexAlloc(int)
27ca0 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 4d  ;.  int sqlite3M
27cb0 75 74 65 78 49 6e 69 74 28 76 6f 69 64 29 3b 0a  utexInit(void);.
27cc0 20 20 69 6e 74 20 73 71 6c 69 74 65 33 4d 75 74    int sqlite3Mut
27cd0 65 78 45 6e 64 28 76 6f 69 64 29 3b 0a 23 65 6e  exEnd(void);.#en
27ce0 64 69 66 0a 23 69 66 20 21 64 65 66 69 6e 65 64  dif.#if !defined
27cf0 28 53 51 4c 49 54 45 5f 4d 55 54 45 58 5f 4f 4d  (SQLITE_MUTEX_OM
27d00 49 54 29 20 26 26 20 21 64 65 66 69 6e 65 64 28  IT) && !defined(
27d10 53 51 4c 49 54 45 5f 4d 55 54 45 58 5f 4e 4f 4f  SQLITE_MUTEX_NOO
27d20 50 29 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  P).  void sqlite
27d30 33 4d 65 6d 6f 72 79 42 61 72 72 69 65 72 28 76  3MemoryBarrier(v
27d40 6f 69 64 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65  oid);.#else.# de
27d50 66 69 6e 65 20 73 71 6c 69 74 65 33 4d 65 6d 6f  fine sqlite3Memo
27d60 72 79 42 61 72 72 69 65 72 28 29 0a 23 65 6e 64  ryBarrier().#end
27d70 69 66 0a 0a 73 71 6c 69 74 65 33 5f 69 6e 74 36  if..sqlite3_int6
27d80 34 20 73 71 6c 69 74 65 33 53 74 61 74 75 73 56  4 sqlite3StatusV
27d90 61 6c 75 65 28 69 6e 74 29 3b 0a 76 6f 69 64 20  alue(int);.void 
27da0 73 71 6c 69 74 65 33 53 74 61 74 75 73 55 70 28  sqlite3StatusUp(
27db0 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  int, int);.void 
27dc0 73 71 6c 69 74 65 33 53 74 61 74 75 73 44 6f 77  sqlite3StatusDow
27dd0 6e 28 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69  n(int, int);.voi
27de0 64 20 73 71 6c 69 74 65 33 53 74 61 74 75 73 48  d sqlite3StatusH
27df0 69 67 68 77 61 74 65 72 28 69 6e 74 2c 20 69 6e  ighwater(int, in
27e00 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4c  t);.int sqlite3L
27e10 6f 6f 6b 61 73 69 64 65 55 73 65 64 28 73 71 6c  ookasideUsed(sql
27e20 69 74 65 33 2a 2c 69 6e 74 2a 29 3b 0a 0a 2f 2a  ite3*,int*);../*
27e30 20 41 63 63 65 73 73 20 74 6f 20 6d 75 74 65 78   Access to mutex
27e40 65 73 20 75 73 65 64 20 62 79 20 73 71 6c 69 74  es used by sqlit
27e50 65 33 5f 73 74 61 74 75 73 28 29 20 2a 2f 0a 73  e3_status() */.s
27e60 71 6c 69 74 65 33 5f 6d 75 74 65 78 20 2a 73 71  qlite3_mutex *sq
27e70 6c 69 74 65 33 50 63 61 63 68 65 31 4d 75 74 65  lite3Pcache1Mute
27e80 78 28 76 6f 69 64 29 3b 0a 73 71 6c 69 74 65 33  x(void);.sqlite3
27e90 5f 6d 75 74 65 78 20 2a 73 71 6c 69 74 65 33 4d  _mutex *sqlite3M
27ea0 61 6c 6c 6f 63 4d 75 74 65 78 28 76 6f 69 64 29  allocMutex(void)
27eb0 3b 0a 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53  ;..#if defined(S
27ec0 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4d 55 4c  QLITE_ENABLE_MUL
27ed0 54 49 54 48 52 45 41 44 45 44 5f 43 48 45 43 4b  TITHREADED_CHECK
27ee0 53 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 53  S) && !defined(S
27ef0 51 4c 49 54 45 5f 4d 55 54 45 58 5f 4f 4d 49 54  QLITE_MUTEX_OMIT
27f00 29 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 75  ).void sqlite3Mu
27f10 74 65 78 57 61 72 6e 4f 6e 43 6f 6e 74 65 6e 74  texWarnOnContent
27f20 69 6f 6e 28 73 71 6c 69 74 65 33 5f 6d 75 74 65  ion(sqlite3_mute
27f30 78 2a 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66  x*);.#else.# def
27f40 69 6e 65 20 73 71 6c 69 74 65 33 4d 75 74 65 78  ine sqlite3Mutex
27f50 57 61 72 6e 4f 6e 43 6f 6e 74 65 6e 74 69 6f 6e  WarnOnContention
27f60 28 78 29 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e  (x).#endif..#ifn
27f70 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
27f80 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 0a 20  FLOATING_POINT. 
27f90 20 69 6e 74 20 73 71 6c 69 74 65 33 49 73 4e 61   int sqlite3IsNa
27fa0 4e 28 64 6f 75 62 6c 65 29 3b 0a 23 65 6c 73 65  N(double);.#else
27fb0 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
27fc0 33 49 73 4e 61 4e 28 58 29 20 20 30 0a 23 65 6e  3IsNaN(X)  0.#en
27fd0 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e  dif../*.** An in
27fe0 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f  stance of the fo
27ff0 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72  llowing structur
28000 65 20 68 6f 6c 64 73 20 69 6e 66 6f 72 6d 61 74  e holds informat
28010 69 6f 6e 20 61 62 6f 75 74 20 53 51 4c 0a 2a 2a  ion about SQL.**
28020 20 66 75 6e 63 74 69 6f 6e 73 20 61 72 67 75 6d   functions argum
28030 65 6e 74 73 20 74 68 61 74 20 61 72 65 20 74 68  ents that are th
28040 65 20 70 61 72 61 6d 65 74 65 72 73 20 74 6f 20  e parameters to 
28050 74 68 65 20 70 72 69 6e 74 66 28 29 20 66 75 6e  the printf() fun
28060 63 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74  ction..*/.struct
28070 20 50 72 69 6e 74 66 41 72 67 75 6d 65 6e 74 73   PrintfArguments
28080 20 7b 0a 20 20 69 6e 74 20 6e 41 72 67 3b 20 20   {.  int nArg;  
28090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
280a0 20 54 6f 74 61 6c 20 6e 75 6d 62 65 72 20 6f 66   Total number of
280b0 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f 0a 20 20   arguments */.  
280c0 69 6e 74 20 6e 55 73 65 64 3b 20 20 20 20 20 20  int nUsed;      
280d0 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
280e0 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20  er of arguments 
280f0 75 73 65 64 20 73 6f 20 66 61 72 20 2a 2f 0a 20  used so far */. 
28100 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a   sqlite3_value *
28110 2a 61 70 41 72 67 3b 20 20 20 2f 2a 20 54 68 65  *apArg;   /* The
28120 20 61 72 67 75 6d 65 6e 74 20 76 61 6c 75 65 73   argument values
28130 20 2a 2f 0a 7d 3b 0a 0a 63 68 61 72 20 2a 73 71   */.};..char *sq
28140 6c 69 74 65 33 4d 50 72 69 6e 74 66 28 73 71 6c  lite3MPrintf(sql
28150 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72  ite3*,const char
28160 2a 2c 20 2e 2e 2e 29 3b 0a 63 68 61 72 20 2a 73  *, ...);.char *s
28170 71 6c 69 74 65 33 56 4d 50 72 69 6e 74 66 28 73  qlite3VMPrintf(s
28180 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68  qlite3*,const ch
28190 61 72 2a 2c 20 76 61 5f 6c 69 73 74 29 3b 0a 23  ar*, va_list);.#
281a0 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  if defined(SQLIT
281b0 45 5f 44 45 42 55 47 29 20 7c 7c 20 64 65 66 69  E_DEBUG) || defi
281c0 6e 65 64 28 53 51 4c 49 54 45 5f 48 41 56 45 5f  ned(SQLITE_HAVE_
281d0 4f 53 5f 54 52 41 43 45 29 0a 20 20 76 6f 69 64  OS_TRACE).  void
281e0 20 73 71 6c 69 74 65 33 44 65 62 75 67 50 72 69   sqlite3DebugPri
281f0 6e 74 66 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c  ntf(const char*,
28200 20 2e 2e 2e 29 3b 0a 23 65 6e 64 69 66 0a 23 69   ...);.#endif.#i
28210 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  f defined(SQLITE
28220 5f 54 45 53 54 29 0a 20 20 76 6f 69 64 20 2a 73  _TEST).  void *s
28230 71 6c 69 74 65 33 54 65 73 74 54 65 78 74 54 6f  qlite3TestTextTo
28240 50 74 72 28 63 6f 6e 73 74 20 63 68 61 72 2a 29  Ptr(const char*)
28250 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 20 64 65  ;.#endif..#if de
28260 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42  fined(SQLITE_DEB
28270 55 47 29 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  UG).  void sqlit
28280 65 33 54 72 65 65 56 69 65 77 45 78 70 72 28 54  e3TreeViewExpr(T
28290 72 65 65 56 69 65 77 2a 2c 20 63 6f 6e 73 74 20  reeView*, const 
282a0 45 78 70 72 2a 2c 20 75 38 29 3b 0a 20 20 76 6f  Expr*, u8);.  vo
282b0 69 64 20 73 71 6c 69 74 65 33 54 72 65 65 56 69  id sqlite3TreeVi
282c0 65 77 42 61 72 65 45 78 70 72 4c 69 73 74 28 54  ewBareExprList(T
282d0 72 65 65 56 69 65 77 2a 2c 20 63 6f 6e 73 74 20  reeView*, const 
282e0 45 78 70 72 4c 69 73 74 2a 2c 20 63 6f 6e 73 74  ExprList*, const
282f0 20 63 68 61 72 2a 29 3b 0a 20 20 76 6f 69 64 20   char*);.  void 
28300 73 71 6c 69 74 65 33 54 72 65 65 56 69 65 77 45  sqlite3TreeViewE
28310 78 70 72 4c 69 73 74 28 54 72 65 65 56 69 65 77  xprList(TreeView
28320 2a 2c 20 63 6f 6e 73 74 20 45 78 70 72 4c 69 73  *, const ExprLis
28330 74 2a 2c 20 75 38 2c 20 63 6f 6e 73 74 20 63 68  t*, u8, const ch
28340 61 72 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c  ar*);.  void sql
28350 69 74 65 33 54 72 65 65 56 69 65 77 53 65 6c 65  ite3TreeViewSele
28360 63 74 28 54 72 65 65 56 69 65 77 2a 2c 20 63 6f  ct(TreeView*, co
28370 6e 73 74 20 53 65 6c 65 63 74 2a 2c 20 75 38 29  nst Select*, u8)
28380 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
28390 54 72 65 65 56 69 65 77 57 69 74 68 28 54 72 65  TreeViewWith(Tre
283a0 65 56 69 65 77 2a 2c 20 63 6f 6e 73 74 20 57 69  eView*, const Wi
283b0 74 68 2a 2c 20 75 38 29 3b 0a 23 69 66 6e 64 65  th*, u8);.#ifnde
283c0 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 49  f SQLITE_OMIT_WI
283d0 4e 44 4f 57 46 55 4e 43 0a 20 20 76 6f 69 64 20  NDOWFUNC.  void 
283e0 73 71 6c 69 74 65 33 54 72 65 65 56 69 65 77 57  sqlite3TreeViewW
283f0 69 6e 64 6f 77 28 54 72 65 65 56 69 65 77 2a 2c  indow(TreeView*,
28400 20 63 6f 6e 73 74 20 57 69 6e 64 6f 77 2a 2c 20   const Window*, 
28410 75 38 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69  u8);.  void sqli
28420 74 65 33 54 72 65 65 56 69 65 77 57 69 6e 46 75  te3TreeViewWinFu
28430 6e 63 28 54 72 65 65 56 69 65 77 2a 2c 20 63 6f  nc(TreeView*, co
28440 6e 73 74 20 57 69 6e 64 6f 77 2a 2c 20 75 38 29  nst Window*, u8)
28450 3b 0a 23 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a  ;.#endif.#endif.
28460 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 65  ..void sqlite3Se
28470 74 53 74 72 69 6e 67 28 63 68 61 72 20 2a 2a 2c  tString(char **,
28480 20 73 71 6c 69 74 65 33 2a 2c 20 63 6f 6e 73 74   sqlite3*, const
28490 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71   char*);.void sq
284a0 6c 69 74 65 33 45 72 72 6f 72 4d 73 67 28 50 61  lite3ErrorMsg(Pa
284b0 72 73 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  rse*, const char
284c0 2a 2c 20 2e 2e 2e 29 3b 0a 76 6f 69 64 20 73 71  *, ...);.void sq
284d0 6c 69 74 65 33 44 65 71 75 6f 74 65 28 63 68 61  lite3Dequote(cha
284e0 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  r*);.void sqlite
284f0 33 54 6f 6b 65 6e 49 6e 69 74 28 54 6f 6b 65 6e  3TokenInit(Token
28500 2a 2c 63 68 61 72 2a 29 3b 0a 69 6e 74 20 73 71  *,char*);.int sq
28510 6c 69 74 65 33 4b 65 79 77 6f 72 64 43 6f 64 65  lite3KeywordCode
28520 28 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20  (const unsigned 
28530 63 68 61 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74  char*, int);.int
28540 20 73 71 6c 69 74 65 33 52 75 6e 50 61 72 73 65   sqlite3RunParse
28550 72 28 50 61 72 73 65 2a 2c 20 63 6f 6e 73 74 20  r(Parse*, const 
28560 63 68 61 72 2a 2c 20 63 68 61 72 20 2a 2a 29 3b  char*, char **);
28570 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 46 69 6e  .void sqlite3Fin
28580 69 73 68 43 6f 64 69 6e 67 28 50 61 72 73 65 2a  ishCoding(Parse*
28590 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 47 65  );.int sqlite3Ge
285a0 74 54 65 6d 70 52 65 67 28 50 61 72 73 65 2a 29  tTempReg(Parse*)
285b0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65  ;.void sqlite3Re
285c0 6c 65 61 73 65 54 65 6d 70 52 65 67 28 50 61 72  leaseTempReg(Par
285d0 73 65 2a 2c 69 6e 74 29 3b 0a 69 6e 74 20 73 71  se*,int);.int sq
285e0 6c 69 74 65 33 47 65 74 54 65 6d 70 52 61 6e 67  lite3GetTempRang
285f0 65 28 50 61 72 73 65 2a 2c 69 6e 74 29 3b 0a 76  e(Parse*,int);.v
28600 6f 69 64 20 73 71 6c 69 74 65 33 52 65 6c 65 61  oid sqlite3Relea
28610 73 65 54 65 6d 70 52 61 6e 67 65 28 50 61 72 73  seTempRange(Pars
28620 65 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a 76 6f 69  e*,int,int);.voi
28630 64 20 73 71 6c 69 74 65 33 43 6c 65 61 72 54 65  d sqlite3ClearTe
28640 6d 70 52 65 67 43 61 63 68 65 28 50 61 72 73 65  mpRegCache(Parse
28650 2a 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54  *);.#ifdef SQLIT
28660 45 5f 44 45 42 55 47 0a 69 6e 74 20 73 71 6c 69  E_DEBUG.int sqli
28670 74 65 33 4e 6f 54 65 6d 70 73 49 6e 52 61 6e 67  te3NoTempsInRang
28680 65 28 50 61 72 73 65 2a 2c 69 6e 74 2c 69 6e 74  e(Parse*,int,int
28690 29 3b 0a 23 65 6e 64 69 66 0a 45 78 70 72 20 2a  );.#endif.Expr *
286a0 73 71 6c 69 74 65 33 45 78 70 72 41 6c 6c 6f 63  sqlite3ExprAlloc
286b0 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 63 6f  (sqlite3*,int,co
286c0 6e 73 74 20 54 6f 6b 65 6e 2a 2c 69 6e 74 29 3b  nst Token*,int);
286d0 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78  .Expr *sqlite3Ex
286e0 70 72 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c  pr(sqlite3*,int,
286f0 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f  const char*);.vo
28700 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 41 74  id sqlite3ExprAt
28710 74 61 63 68 53 75 62 74 72 65 65 73 28 73 71 6c  tachSubtrees(sql
28720 69 74 65 33 2a 2c 45 78 70 72 2a 2c 45 78 70 72  ite3*,Expr*,Expr
28730 2a 2c 45 78 70 72 2a 29 3b 0a 45 78 70 72 20 2a  *,Expr*);.Expr *
28740 73 71 6c 69 74 65 33 50 45 78 70 72 28 50 61 72  sqlite3PExpr(Par
28750 73 65 2a 2c 20 69 6e 74 2c 20 45 78 70 72 2a 2c  se*, int, Expr*,
28760 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71   Expr*);.void sq
28770 6c 69 74 65 33 50 45 78 70 72 41 64 64 53 65 6c  lite3PExprAddSel
28780 65 63 74 28 50 61 72 73 65 2a 2c 20 45 78 70 72  ect(Parse*, Expr
28790 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 45 78 70  *, Select*);.Exp
287a0 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72 41 6e  r *sqlite3ExprAn
287b0 64 28 73 71 6c 69 74 65 33 2a 2c 45 78 70 72 2a  d(sqlite3*,Expr*
287c0 2c 20 45 78 70 72 2a 29 3b 0a 45 78 70 72 20 2a  , Expr*);.Expr *
287d0 73 71 6c 69 74 65 33 45 78 70 72 46 75 6e 63 74  sqlite3ExprFunct
287e0 69 6f 6e 28 50 61 72 73 65 2a 2c 45 78 70 72 4c  ion(Parse*,ExprL
287f0 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76  ist*, Token*);.v
28800 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 41  oid sqlite3ExprA
28810 73 73 69 67 6e 56 61 72 4e 75 6d 62 65 72 28 50  ssignVarNumber(P
28820 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 75 33  arse*, Expr*, u3
28830 32 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  2);.void sqlite3
28840 45 78 70 72 44 65 6c 65 74 65 28 73 71 6c 69 74  ExprDelete(sqlit
28850 65 33 2a 2c 20 45 78 70 72 2a 29 3b 0a 45 78 70  e3*, Expr*);.Exp
28860 72 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 45 78  rList *sqlite3Ex
28870 70 72 4c 69 73 74 41 70 70 65 6e 64 28 50 61 72  prListAppend(Par
28880 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 45 78  se*,ExprList*,Ex
28890 70 72 2a 29 3b 0a 45 78 70 72 4c 69 73 74 20 2a  pr*);.ExprList *
288a0 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74 41  sqlite3ExprListA
288b0 70 70 65 6e 64 56 65 63 74 6f 72 28 50 61 72 73  ppendVector(Pars
288c0 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 49 64 4c  e*,ExprList*,IdL
288d0 69 73 74 2a 2c 45 78 70 72 2a 29 3b 0a 76 6f 69  ist*,Expr*);.voi
288e0 64 20 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73  d sqlite3ExprLis
288f0 74 53 65 74 53 6f 72 74 4f 72 64 65 72 28 45 78  tSetSortOrder(Ex
28900 70 72 4c 69 73 74 2a 2c 69 6e 74 29 3b 0a 76 6f  prList*,int);.vo
28910 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 4c 69  id sqlite3ExprLi
28920 73 74 53 65 74 4e 61 6d 65 28 50 61 72 73 65 2a  stSetName(Parse*
28930 2c 45 78 70 72 4c 69 73 74 2a 2c 54 6f 6b 65 6e  ,ExprList*,Token
28940 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  *,int);.void sql
28950 69 74 65 33 45 78 70 72 4c 69 73 74 53 65 74 53  ite3ExprListSetS
28960 70 61 6e 28 50 61 72 73 65 2a 2c 45 78 70 72 4c  pan(Parse*,ExprL
28970 69 73 74 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  ist*,const char*
28980 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76  ,const char*);.v
28990 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 4c  oid sqlite3ExprL
289a0 69 73 74 44 65 6c 65 74 65 28 73 71 6c 69 74 65  istDelete(sqlite
289b0 33 2a 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a  3*, ExprList*);.
289c0 75 33 32 20 73 71 6c 69 74 65 33 45 78 70 72 4c  u32 sqlite3ExprL
289d0 69 73 74 46 6c 61 67 73 28 63 6f 6e 73 74 20 45  istFlags(const E
289e0 78 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73  xprList*);.int s
289f0 71 6c 69 74 65 33 49 6e 69 74 28 73 71 6c 69 74  qlite3Init(sqlit
28a00 65 33 2a 2c 20 63 68 61 72 2a 2a 29 3b 0a 69 6e  e3*, char**);.in
28a10 74 20 73 71 6c 69 74 65 33 49 6e 69 74 43 61 6c  t sqlite3InitCal
28a20 6c 62 61 63 6b 28 76 6f 69 64 2a 2c 20 69 6e 74  lback(void*, int
28a30 2c 20 63 68 61 72 2a 2a 2c 20 63 68 61 72 2a 2a  , char**, char**
28a40 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50  );.void sqlite3P
28a50 72 61 67 6d 61 28 50 61 72 73 65 2a 2c 54 6f 6b  ragma(Parse*,Tok
28a60 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e  en*,Token*,Token
28a70 2a 2c 69 6e 74 29 3b 0a 23 69 66 6e 64 65 66 20  *,int);.#ifndef 
28a80 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
28a90 55 41 4c 54 41 42 4c 45 0a 4d 6f 64 75 6c 65 20  UALTABLE.Module 
28aa0 2a 73 71 6c 69 74 65 33 50 72 61 67 6d 61 56 74  *sqlite3PragmaVt
28ab0 61 62 52 65 67 69 73 74 65 72 28 73 71 6c 69 74  abRegister(sqlit
28ac0 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 20 2a  e3*,const char *
28ad0 7a 4e 61 6d 65 29 3b 0a 23 65 6e 64 69 66 0a 76  zName);.#endif.v
28ae0 6f 69 64 20 73 71 6c 69 74 65 33 52 65 73 65 74  oid sqlite3Reset
28af0 41 6c 6c 53 63 68 65 6d 61 73 4f 66 43 6f 6e 6e  AllSchemasOfConn
28b00 65 63 74 69 6f 6e 28 73 71 6c 69 74 65 33 2a 29  ection(sqlite3*)
28b10 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65  ;.void sqlite3Re
28b20 73 65 74 4f 6e 65 53 63 68 65 6d 61 28 73 71 6c  setOneSchema(sql
28b30 69 74 65 33 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64  ite3*,int);.void
28b40 20 73 71 6c 69 74 65 33 43 6f 6c 6c 61 70 73 65   sqlite3Collapse
28b50 44 61 74 61 62 61 73 65 41 72 72 61 79 28 73 71  DatabaseArray(sq
28b60 6c 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20 73 71  lite3*);.void sq
28b70 6c 69 74 65 33 43 6f 6d 6d 69 74 49 6e 74 65 72  lite3CommitInter
28b80 6e 61 6c 43 68 61 6e 67 65 73 28 73 71 6c 69 74  nalChanges(sqlit
28b90 65 33 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  e3*);.void sqlit
28ba0 65 33 44 65 6c 65 74 65 43 6f 6c 75 6d 6e 4e 61  e3DeleteColumnNa
28bb0 6d 65 73 28 73 71 6c 69 74 65 33 2a 2c 54 61 62  mes(sqlite3*,Tab
28bc0 6c 65 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  le*);.int sqlite
28bd0 33 43 6f 6c 75 6d 6e 73 46 72 6f 6d 45 78 70 72  3ColumnsFromExpr
28be0 4c 69 73 74 28 50 61 72 73 65 2a 2c 45 78 70 72  List(Parse*,Expr
28bf0 4c 69 73 74 2a 2c 69 31 36 2a 2c 43 6f 6c 75 6d  List*,i16*,Colum
28c00 6e 2a 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  n**);.void sqlit
28c10 65 33 53 65 6c 65 63 74 41 64 64 43 6f 6c 75 6d  e3SelectAddColum
28c20 6e 54 79 70 65 41 6e 64 43 6f 6c 6c 61 74 69 6f  nTypeAndCollatio
28c30 6e 28 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a 2c  n(Parse*,Table*,
28c40 53 65 6c 65 63 74 2a 29 3b 0a 54 61 62 6c 65 20  Select*);.Table 
28c50 2a 73 71 6c 69 74 65 33 52 65 73 75 6c 74 53 65  *sqlite3ResultSe
28c60 74 4f 66 53 65 6c 65 63 74 28 50 61 72 73 65 2a  tOfSelect(Parse*
28c70 2c 53 65 6c 65 63 74 2a 29 3b 0a 76 6f 69 64 20  ,Select*);.void 
28c80 73 71 6c 69 74 65 33 4f 70 65 6e 4d 61 73 74 65  sqlite3OpenMaste
28c90 72 54 61 62 6c 65 28 50 61 72 73 65 20 2a 2c 20  rTable(Parse *, 
28ca0 69 6e 74 29 3b 0a 49 6e 64 65 78 20 2a 73 71 6c  int);.Index *sql
28cb0 69 74 65 33 50 72 69 6d 61 72 79 4b 65 79 49 6e  ite3PrimaryKeyIn
28cc0 64 65 78 28 54 61 62 6c 65 2a 29 3b 0a 69 31 36  dex(Table*);.i16
28cd0 20 73 71 6c 69 74 65 33 43 6f 6c 75 6d 6e 4f 66   sqlite3ColumnOf
28ce0 49 6e 64 65 78 28 49 6e 64 65 78 2a 2c 20 69 31  Index(Index*, i1
28cf0 36 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  6);.void sqlite3
28d00 53 74 61 72 74 54 61 62 6c 65 28 50 61 72 73 65  StartTable(Parse
28d10 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c  *,Token*,Token*,
28d20 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 29  int,int,int,int)
28d30 3b 0a 23 69 66 20 53 51 4c 49 54 45 5f 45 4e 41  ;.#if SQLITE_ENA
28d40 42 4c 45 5f 48 49 44 44 45 4e 5f 43 4f 4c 55 4d  BLE_HIDDEN_COLUM
28d50 4e 53 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  NS.  void sqlite
28d60 33 43 6f 6c 75 6d 6e 50 72 6f 70 65 72 74 69 65  3ColumnPropertie
28d70 73 46 72 6f 6d 4e 61 6d 65 28 54 61 62 6c 65 2a  sFromName(Table*
28d80 2c 20 43 6f 6c 75 6d 6e 2a 29 3b 0a 23 65 6c 73  , Column*);.#els
28d90 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  e.# define sqlit
28da0 65 33 43 6f 6c 75 6d 6e 50 72 6f 70 65 72 74 69  e3ColumnProperti
28db0 65 73 46 72 6f 6d 4e 61 6d 65 28 54 2c 43 29 20  esFromName(T,C) 
28dc0 2f 2a 20 6e 6f 2d 6f 70 20 2a 2f 0a 23 65 6e 64  /* no-op */.#end
28dd0 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41  if.void sqlite3A
28de0 64 64 43 6f 6c 75 6d 6e 28 50 61 72 73 65 2a 2c  ddColumn(Parse*,
28df0 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 29 3b 0a  Token*,Token*);.
28e00 76 6f 69 64 20 73 71 6c 69 74 65 33 41 64 64 4e  void sqlite3AddN
28e10 6f 74 4e 75 6c 6c 28 50 61 72 73 65 2a 2c 20 69  otNull(Parse*, i
28e20 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
28e30 33 41 64 64 50 72 69 6d 61 72 79 4b 65 79 28 50  3AddPrimaryKey(P
28e40 61 72 73 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a  arse*, ExprList*
28e50 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29  , int, int, int)
28e60 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 64  ;.void sqlite3Ad
28e70 64 43 68 65 63 6b 43 6f 6e 73 74 72 61 69 6e 74  dCheckConstraint
28e80 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 29 3b  (Parse*, Expr*);
28e90 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 64 64  .void sqlite3Add
28ea0 44 65 66 61 75 6c 74 56 61 6c 75 65 28 50 61 72  DefaultValue(Par
28eb0 73 65 2a 2c 45 78 70 72 2a 2c 63 6f 6e 73 74 20  se*,Expr*,const 
28ec0 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72  char*,const char
28ed0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
28ee0 41 64 64 43 6f 6c 6c 61 74 65 54 79 70 65 28 50  AddCollateType(P
28ef0 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a  arse*, Token*);.
28f00 76 6f 69 64 20 73 71 6c 69 74 65 33 45 6e 64 54  void sqlite3EndT
28f10 61 62 6c 65 28 50 61 72 73 65 2a 2c 54 6f 6b 65  able(Parse*,Toke
28f20 6e 2a 2c 54 6f 6b 65 6e 2a 2c 75 38 2c 53 65 6c  n*,Token*,u8,Sel
28f30 65 63 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ect*);.int sqlit
28f40 65 33 50 61 72 73 65 55 72 69 28 63 6f 6e 73 74  e3ParseUri(const
28f50 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61   char*,const cha
28f60 72 2a 2c 75 6e 73 69 67 6e 65 64 20 69 6e 74 2a  r*,unsigned int*
28f70 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
28f80 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 76 66        sqlite3_vf
28f90 73 2a 2a 2c 63 68 61 72 2a 2a 2c 63 68 61 72 20  s**,char**,char 
28fa0 2a 2a 29 3b 0a 42 74 72 65 65 20 2a 73 71 6c 69  **);.Btree *sqli
28fb0 74 65 33 44 62 4e 61 6d 65 54 6f 42 74 72 65 65  te3DbNameToBtree
28fc0 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20  (sqlite3*,const 
28fd0 63 68 61 72 2a 29 3b 0a 0a 23 69 66 64 65 66 20  char*);..#ifdef 
28fe0 53 51 4c 49 54 45 5f 55 4e 54 45 53 54 41 42 4c  SQLITE_UNTESTABL
28ff0 45 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  E.# define sqlit
29000 65 33 46 61 75 6c 74 53 69 6d 28 58 29 20 53 51  e3FaultSim(X) SQ
29010 4c 49 54 45 5f 4f 4b 0a 23 65 6c 73 65 0a 20 20  LITE_OK.#else.  
29020 69 6e 74 20 73 71 6c 69 74 65 33 46 61 75 6c 74  int sqlite3Fault
29030 53 69 6d 28 69 6e 74 29 3b 0a 23 65 6e 64 69 66  Sim(int);.#endif
29040 0a 0a 42 69 74 76 65 63 20 2a 73 71 6c 69 74 65  ..Bitvec *sqlite
29050 33 42 69 74 76 65 63 43 72 65 61 74 65 28 75 33  3BitvecCreate(u3
29060 32 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 42  2);.int sqlite3B
29070 69 74 76 65 63 54 65 73 74 28 42 69 74 76 65 63  itvecTest(Bitvec
29080 2a 2c 20 75 33 32 29 3b 0a 69 6e 74 20 73 71 6c  *, u32);.int sql
29090 69 74 65 33 42 69 74 76 65 63 54 65 73 74 4e 6f  ite3BitvecTestNo
290a0 74 4e 75 6c 6c 28 42 69 74 76 65 63 2a 2c 20 75  tNull(Bitvec*, u
290b0 33 32 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  32);.int sqlite3
290c0 42 69 74 76 65 63 53 65 74 28 42 69 74 76 65 63  BitvecSet(Bitvec
290d0 2a 2c 20 75 33 32 29 3b 0a 76 6f 69 64 20 73 71  *, u32);.void sq
290e0 6c 69 74 65 33 42 69 74 76 65 63 43 6c 65 61 72  lite3BitvecClear
290f0 28 42 69 74 76 65 63 2a 2c 20 75 33 32 2c 20 76  (Bitvec*, u32, v
29100 6f 69 64 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  oid*);.void sqli
29110 74 65 33 42 69 74 76 65 63 44 65 73 74 72 6f 79  te3BitvecDestroy
29120 28 42 69 74 76 65 63 2a 29 3b 0a 75 33 32 20 73  (Bitvec*);.u32 s
29130 71 6c 69 74 65 33 42 69 74 76 65 63 53 69 7a 65  qlite3BitvecSize
29140 28 42 69 74 76 65 63 2a 29 3b 0a 23 69 66 6e 64  (Bitvec*);.#ifnd
29150 65 66 20 53 51 4c 49 54 45 5f 55 4e 54 45 53 54  ef SQLITE_UNTEST
29160 41 42 4c 45 0a 69 6e 74 20 73 71 6c 69 74 65 33  ABLE.int sqlite3
29170 42 69 74 76 65 63 42 75 69 6c 74 69 6e 54 65 73  BitvecBuiltinTes
29180 74 28 69 6e 74 2c 69 6e 74 2a 29 3b 0a 23 65 6e  t(int,int*);.#en
29190 64 69 66 0a 0a 52 6f 77 53 65 74 20 2a 73 71 6c  dif..RowSet *sql
291a0 69 74 65 33 52 6f 77 53 65 74 49 6e 69 74 28 73  ite3RowSetInit(s
291b0 71 6c 69 74 65 33 2a 2c 20 76 6f 69 64 2a 2c 20  qlite3*, void*, 
291c0 75 6e 73 69 67 6e 65 64 20 69 6e 74 29 3b 0a 76  unsigned int);.v
291d0 6f 69 64 20 73 71 6c 69 74 65 33 52 6f 77 53 65  oid sqlite3RowSe
291e0 74 43 6c 65 61 72 28 52 6f 77 53 65 74 2a 29 3b  tClear(RowSet*);
291f0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 6f 77  .void sqlite3Row
29200 53 65 74 49 6e 73 65 72 74 28 52 6f 77 53 65 74  SetInsert(RowSet
29210 2a 2c 20 69 36 34 29 3b 0a 69 6e 74 20 73 71 6c  *, i64);.int sql
29220 69 74 65 33 52 6f 77 53 65 74 54 65 73 74 28 52  ite3RowSetTest(R
29230 6f 77 53 65 74 2a 2c 20 69 6e 74 20 69 42 61 74  owSet*, int iBat
29240 63 68 2c 20 69 36 34 29 3b 0a 69 6e 74 20 73 71  ch, i64);.int sq
29250 6c 69 74 65 33 52 6f 77 53 65 74 4e 65 78 74 28  lite3RowSetNext(
29260 52 6f 77 53 65 74 2a 2c 20 69 36 34 2a 29 3b 0a  RowSet*, i64*);.
29270 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 72 65  .void sqlite3Cre
29280 61 74 65 56 69 65 77 28 50 61 72 73 65 2a 2c 54  ateView(Parse*,T
29290 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b  oken*,Token*,Tok
292a0 65 6e 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 53 65  en*,ExprList*,Se
292b0 6c 65 63 74 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a  lect*,int,int);.
292c0 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51  .#if !defined(SQ
292d0 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 45 57 29 20  LITE_OMIT_VIEW) 
292e0 7c 7c 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  || !defined(SQLI
292f0 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
29300 41 42 4c 45 29 0a 20 20 69 6e 74 20 73 71 6c 69  ABLE).  int sqli
29310 74 65 33 56 69 65 77 47 65 74 43 6f 6c 75 6d 6e  te3ViewGetColumn
29320 4e 61 6d 65 73 28 50 61 72 73 65 2a 2c 54 61 62  Names(Parse*,Tab
29330 6c 65 2a 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65  le*);.#else.# de
29340 66 69 6e 65 20 73 71 6c 69 74 65 33 56 69 65 77  fine sqlite3View
29350 47 65 74 43 6f 6c 75 6d 6e 4e 61 6d 65 73 28 41  GetColumnNames(A
29360 2c 42 29 20 30 0a 23 65 6e 64 69 66 0a 0a 23 69  ,B) 0.#endif..#i
29370 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 41 54 54  f SQLITE_MAX_ATT
29380 41 43 48 45 44 3e 33 30 0a 20 20 69 6e 74 20 73  ACHED>30.  int s
29390 71 6c 69 74 65 33 44 62 4d 61 73 6b 41 6c 6c 5a  qlite3DbMaskAllZ
293a0 65 72 6f 28 79 44 62 4d 61 73 6b 29 3b 0a 23 65  ero(yDbMask);.#e
293b0 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65  ndif.void sqlite
293c0 33 44 72 6f 70 54 61 62 6c 65 28 50 61 72 73 65  3DropTable(Parse
293d0 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 69 6e 74  *, SrcList*, int
293e0 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
293f0 69 74 65 33 43 6f 64 65 44 72 6f 70 54 61 62 6c  ite3CodeDropTabl
29400 65 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a  e(Parse*, Table*
29410 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69  , int, int);.voi
29420 64 20 73 71 6c 69 74 65 33 44 65 6c 65 74 65 54  d sqlite3DeleteT
29430 61 62 6c 65 28 73 71 6c 69 74 65 33 2a 2c 20 54  able(sqlite3*, T
29440 61 62 6c 65 2a 29 3b 0a 23 69 66 6e 64 65 66 20  able*);.#ifndef 
29450 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f  SQLITE_OMIT_AUTO
29460 49 4e 43 52 45 4d 45 4e 54 0a 20 20 76 6f 69 64  INCREMENT.  void
29470 20 73 71 6c 69 74 65 33 41 75 74 6f 69 6e 63 72   sqlite3Autoincr
29480 65 6d 65 6e 74 42 65 67 69 6e 28 50 61 72 73 65  ementBegin(Parse
29490 20 2a 70 50 61 72 73 65 29 3b 0a 20 20 76 6f 69   *pParse);.  voi
294a0 64 20 73 71 6c 69 74 65 33 41 75 74 6f 69 6e 63  d sqlite3Autoinc
294b0 72 65 6d 65 6e 74 45 6e 64 28 50 61 72 73 65 20  rementEnd(Parse 
294c0 2a 70 50 61 72 73 65 29 3b 0a 23 65 6c 73 65 0a  *pParse);.#else.
294d0 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
294e0 41 75 74 6f 69 6e 63 72 65 6d 65 6e 74 42 65 67  AutoincrementBeg
294f0 69 6e 28 58 29 0a 23 20 64 65 66 69 6e 65 20 73  in(X).# define s
29500 71 6c 69 74 65 33 41 75 74 6f 69 6e 63 72 65 6d  qlite3Autoincrem
29510 65 6e 74 45 6e 64 28 58 29 0a 23 65 6e 64 69 66  entEnd(X).#endif
29520 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 49 6e 73  .void sqlite3Ins
29530 65 72 74 28 50 61 72 73 65 2a 2c 20 53 72 63 4c  ert(Parse*, SrcL
29540 69 73 74 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 49  ist*, Select*, I
29550 64 4c 69 73 74 2a 2c 20 69 6e 74 2c 20 55 70 73  dList*, int, Ups
29560 65 72 74 2a 29 3b 0a 76 6f 69 64 20 2a 73 71 6c  ert*);.void *sql
29570 69 74 65 33 41 72 72 61 79 41 6c 6c 6f 63 61 74  ite3ArrayAllocat
29580 65 28 73 71 6c 69 74 65 33 2a 2c 76 6f 69 64 2a  e(sqlite3*,void*
29590 2c 69 6e 74 2c 69 6e 74 2a 2c 69 6e 74 2a 29 3b  ,int,int*,int*);
295a0 0a 49 64 4c 69 73 74 20 2a 73 71 6c 69 74 65 33  .IdList *sqlite3
295b0 49 64 4c 69 73 74 41 70 70 65 6e 64 28 73 71 6c  IdListAppend(sql
295c0 69 74 65 33 2a 2c 20 49 64 4c 69 73 74 2a 2c 20  ite3*, IdList*, 
295d0 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c  Token*);.int sql
295e0 69 74 65 33 49 64 4c 69 73 74 49 6e 64 65 78 28  ite3IdListIndex(
295f0 49 64 4c 69 73 74 2a 2c 63 6f 6e 73 74 20 63 68  IdList*,const ch
29600 61 72 2a 29 3b 0a 53 72 63 4c 69 73 74 20 2a 73  ar*);.SrcList *s
29610 71 6c 69 74 65 33 53 72 63 4c 69 73 74 45 6e 6c  qlite3SrcListEnl
29620 61 72 67 65 28 73 71 6c 69 74 65 33 2a 2c 20 53  arge(sqlite3*, S
29630 72 63 4c 69 73 74 2a 2c 20 69 6e 74 2c 20 69 6e  rcList*, int, in
29640 74 29 3b 0a 53 72 63 4c 69 73 74 20 2a 73 71 6c  t);.SrcList *sql
29650 69 74 65 33 53 72 63 4c 69 73 74 41 70 70 65 6e  ite3SrcListAppen
29660 64 28 73 71 6c 69 74 65 33 2a 2c 20 53 72 63 4c  d(sqlite3*, SrcL
29670 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f  ist*, Token*, To
29680 6b 65 6e 2a 29 3b 0a 53 72 63 4c 69 73 74 20 2a  ken*);.SrcList *
29690 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74 41 70  sqlite3SrcListAp
296a0 70 65 6e 64 46 72 6f 6d 54 65 72 6d 28 50 61 72  pendFromTerm(Par
296b0 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 54  se*, SrcList*, T
296c0 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c 0a 20  oken*, Token*,. 
296d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
296e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
296f0 20 20 20 20 20 54 6f 6b 65 6e 2a 2c 20 53 65 6c       Token*, Sel
29700 65 63 74 2a 2c 20 45 78 70 72 2a 2c 20 49 64 4c  ect*, Expr*, IdL
29710 69 73 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ist*);.void sqli
29720 74 65 33 53 72 63 4c 69 73 74 49 6e 64 65 78 65  te3SrcListIndexe
29730 64 42 79 28 50 61 72 73 65 20 2a 2c 20 53 72 63  dBy(Parse *, Src
29740 4c 69 73 74 20 2a 2c 20 54 6f 6b 65 6e 20 2a 29  List *, Token *)
29750 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 72  ;.void sqlite3Sr
29760 63 4c 69 73 74 46 75 6e 63 41 72 67 73 28 50 61  cListFuncArgs(Pa
29770 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20  rse*, SrcList*, 
29780 45 78 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74 20  ExprList*);.int 
29790 73 71 6c 69 74 65 33 49 6e 64 65 78 65 64 42 79  sqlite3IndexedBy
297a0 4c 6f 6f 6b 75 70 28 50 61 72 73 65 20 2a 2c 20  Lookup(Parse *, 
297b0 73 74 72 75 63 74 20 53 72 63 4c 69 73 74 5f 69  struct SrcList_i
297c0 74 65 6d 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  tem *);.void sql
297d0 69 74 65 33 53 72 63 4c 69 73 74 53 68 69 66 74  ite3SrcListShift
297e0 4a 6f 69 6e 54 79 70 65 28 53 72 63 4c 69 73 74  JoinType(SrcList
297f0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
29800 53 72 63 4c 69 73 74 41 73 73 69 67 6e 43 75 72  SrcListAssignCur
29810 73 6f 72 73 28 50 61 72 73 65 2a 2c 20 53 72 63  sors(Parse*, Src
29820 4c 69 73 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  List*);.void sql
29830 69 74 65 33 49 64 4c 69 73 74 44 65 6c 65 74 65  ite3IdListDelete
29840 28 73 71 6c 69 74 65 33 2a 2c 20 49 64 4c 69 73  (sqlite3*, IdLis
29850 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  t*);.void sqlite
29860 33 53 72 63 4c 69 73 74 44 65 6c 65 74 65 28 73  3SrcListDelete(s
29870 71 6c 69 74 65 33 2a 2c 20 53 72 63 4c 69 73 74  qlite3*, SrcList
29880 2a 29 3b 0a 49 6e 64 65 78 20 2a 73 71 6c 69 74  *);.Index *sqlit
29890 65 33 41 6c 6c 6f 63 61 74 65 49 6e 64 65 78 4f  e3AllocateIndexO
298a0 62 6a 65 63 74 28 73 71 6c 69 74 65 33 2a 2c 69  bject(sqlite3*,i
298b0 31 36 2c 69 6e 74 2c 63 68 61 72 2a 2a 29 3b 0a  16,int,char**);.
298c0 76 6f 69 64 20 73 71 6c 69 74 65 33 43 72 65 61  void sqlite3Crea
298d0 74 65 49 6e 64 65 78 28 50 61 72 73 65 2a 2c 54  teIndex(Parse*,T
298e0 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 53 72 63  oken*,Token*,Src
298f0 4c 69 73 74 2a 2c 45 78 70 72 4c 69 73 74 2a 2c  List*,ExprList*,
29900 69 6e 74 2c 54 6f 6b 65 6e 2a 2c 0a 20 20 20 20  int,Token*,.    
29910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29920 20 20 20 20 20 20 45 78 70 72 2a 2c 20 69 6e 74        Expr*, int
29930 2c 20 69 6e 74 2c 20 75 38 29 3b 0a 76 6f 69 64  , int, u8);.void
29940 20 73 71 6c 69 74 65 33 44 72 6f 70 49 6e 64 65   sqlite3DropInde
29950 78 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73  x(Parse*, SrcLis
29960 74 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71  t*, int);.int sq
29970 6c 69 74 65 33 53 65 6c 65 63 74 28 50 61 72 73  lite3Select(Pars
29980 65 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 53 65 6c  e*, Select*, Sel
29990 65 63 74 44 65 73 74 2a 29 3b 0a 53 65 6c 65 63  ectDest*);.Selec
299a0 74 20 2a 73 71 6c 69 74 65 33 53 65 6c 65 63 74  t *sqlite3Select
299b0 4e 65 77 28 50 61 72 73 65 2a 2c 45 78 70 72 4c  New(Parse*,ExprL
299c0 69 73 74 2a 2c 53 72 63 4c 69 73 74 2a 2c 45 78  ist*,SrcList*,Ex
299d0 70 72 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 0a 20  pr*,ExprList*,. 
299e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
299f0 20 20 20 20 20 20 20 20 45 78 70 72 2a 2c 45 78          Expr*,Ex
29a00 70 72 4c 69 73 74 2a 2c 75 33 32 2c 45 78 70 72  prList*,u32,Expr
29a10 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
29a20 53 65 6c 65 63 74 44 65 6c 65 74 65 28 73 71 6c  SelectDelete(sql
29a30 69 74 65 33 2a 2c 20 53 65 6c 65 63 74 2a 29 3b  ite3*, Select*);
29a40 0a 54 61 62 6c 65 20 2a 73 71 6c 69 74 65 33 53  .Table *sqlite3S
29a50 72 63 4c 69 73 74 4c 6f 6f 6b 75 70 28 50 61 72  rcListLookup(Par
29a60 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 29 3b 0a  se*, SrcList*);.
29a70 69 6e 74 20 73 71 6c 69 74 65 33 49 73 52 65 61  int sqlite3IsRea
29a80 64 4f 6e 6c 79 28 50 61 72 73 65 2a 2c 20 54 61  dOnly(Parse*, Ta
29a90 62 6c 65 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64  ble*, int);.void
29aa0 20 73 71 6c 69 74 65 33 4f 70 65 6e 54 61 62 6c   sqlite3OpenTabl
29ab0 65 28 50 61 72 73 65 2a 2c 20 69 6e 74 20 69 43  e(Parse*, int iC
29ac0 75 72 2c 20 69 6e 74 20 69 44 62 2c 20 54 61 62  ur, int iDb, Tab
29ad0 6c 65 2a 2c 20 69 6e 74 29 3b 0a 23 69 66 20 64  le*, int);.#if d
29ae0 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e  efined(SQLITE_EN
29af0 41 42 4c 45 5f 55 50 44 41 54 45 5f 44 45 4c 45  ABLE_UPDATE_DELE
29b00 54 45 5f 4c 49 4d 49 54 29 20 26 26 20 21 64 65  TE_LIMIT) && !de
29b10 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49  fined(SQLITE_OMI
29b20 54 5f 53 55 42 51 55 45 52 59 29 0a 45 78 70 72  T_SUBQUERY).Expr
29b30 20 2a 73 71 6c 69 74 65 33 4c 69 6d 69 74 57 68   *sqlite3LimitWh
29b40 65 72 65 28 50 61 72 73 65 2a 2c 53 72 63 4c 69  ere(Parse*,SrcLi
29b50 73 74 2a 2c 45 78 70 72 2a 2c 45 78 70 72 4c 69  st*,Expr*,ExprLi
29b60 73 74 2a 2c 45 78 70 72 2a 2c 63 68 61 72 2a 29  st*,Expr*,char*)
29b70 3b 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71  ;.#endif.void sq
29b80 6c 69 74 65 33 44 65 6c 65 74 65 46 72 6f 6d 28  lite3DeleteFrom(
29b90 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a  Parse*, SrcList*
29ba0 2c 20 45 78 70 72 2a 2c 20 45 78 70 72 4c 69 73  , Expr*, ExprLis
29bb0 74 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64  t*, Expr*);.void
29bc0 20 73 71 6c 69 74 65 33 55 70 64 61 74 65 28 50   sqlite3Update(P
29bd0 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c  arse*, SrcList*,
29be0 20 45 78 70 72 4c 69 73 74 2a 2c 45 78 70 72 2a   ExprList*,Expr*
29bf0 2c 69 6e 74 2c 45 78 70 72 4c 69 73 74 2a 2c 45  ,int,ExprList*,E
29c00 78 70 72 2a 2c 0a 20 20 20 20 20 20 20 20 20 20  xpr*,.          
29c10 20 20 20 20 20 20 20 20 20 55 70 73 65 72 74 2a           Upsert*
29c20 29 3b 0a 57 68 65 72 65 49 6e 66 6f 20 2a 73 71  );.WhereInfo *sq
29c30 6c 69 74 65 33 57 68 65 72 65 42 65 67 69 6e 28  lite3WhereBegin(
29c40 50 61 72 73 65 2a 2c 53 72 63 4c 69 73 74 2a 2c  Parse*,SrcList*,
29c50 45 78 70 72 2a 2c 45 78 70 72 4c 69 73 74 2a 2c  Expr*,ExprList*,
29c60 45 78 70 72 4c 69 73 74 2a 2c 75 31 36 2c 69 6e  ExprList*,u16,in
29c70 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
29c80 57 68 65 72 65 45 6e 64 28 57 68 65 72 65 49 6e  WhereEnd(WhereIn
29c90 66 6f 2a 29 3b 0a 4c 6f 67 45 73 74 20 73 71 6c  fo*);.LogEst sql
29ca0 69 74 65 33 57 68 65 72 65 4f 75 74 70 75 74 52  ite3WhereOutputR
29cb0 6f 77 43 6f 75 6e 74 28 57 68 65 72 65 49 6e 66  owCount(WhereInf
29cc0 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  o*);.int sqlite3
29cd0 57 68 65 72 65 49 73 44 69 73 74 69 6e 63 74 28  WhereIsDistinct(
29ce0 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74  WhereInfo*);.int
29cf0 20 73 71 6c 69 74 65 33 57 68 65 72 65 49 73 4f   sqlite3WhereIsO
29d00 72 64 65 72 65 64 28 57 68 65 72 65 49 6e 66 6f  rdered(WhereInfo
29d10 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57  *);.int sqlite3W
29d20 68 65 72 65 4f 72 64 65 72 65 64 49 6e 6e 65 72  hereOrderedInner
29d30 4c 6f 6f 70 28 57 68 65 72 65 49 6e 66 6f 2a 29  Loop(WhereInfo*)
29d40 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 68 65  ;.int sqlite3Whe
29d50 72 65 49 73 53 6f 72 74 65 64 28 57 68 65 72 65  reIsSorted(Where
29d60 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  Info*);.int sqli
29d70 74 65 33 57 68 65 72 65 43 6f 6e 74 69 6e 75 65  te3WhereContinue
29d80 4c 61 62 65 6c 28 57 68 65 72 65 49 6e 66 6f 2a  Label(WhereInfo*
29d90 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 68  );.int sqlite3Wh
29da0 65 72 65 42 72 65 61 6b 4c 61 62 65 6c 28 57 68  ereBreakLabel(Wh
29db0 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73  ereInfo*);.int s
29dc0 71 6c 69 74 65 33 57 68 65 72 65 4f 6b 4f 6e 65  qlite3WhereOkOne
29dd0 50 61 73 73 28 57 68 65 72 65 49 6e 66 6f 2a 2c  Pass(WhereInfo*,
29de0 20 69 6e 74 2a 29 3b 0a 23 64 65 66 69 6e 65 20   int*);.#define 
29df0 4f 4e 45 50 41 53 53 5f 4f 46 46 20 20 20 20 20  ONEPASS_OFF     
29e00 20 30 20 20 20 20 20 20 20 20 2f 2a 20 55 73 65   0        /* Use
29e10 20 6f 66 20 4f 4e 45 50 41 53 53 20 6e 6f 74 20   of ONEPASS not 
29e20 61 6c 6c 6f 77 65 64 20 2a 2f 0a 23 64 65 66 69  allowed */.#defi
29e30 6e 65 20 4f 4e 45 50 41 53 53 5f 53 49 4e 47 4c  ne ONEPASS_SINGL
29e40 45 20 20 20 31 20 20 20 20 20 20 20 20 2f 2a 20  E   1        /* 
29e50 4f 4e 45 50 41 53 53 20 76 61 6c 69 64 20 66 6f  ONEPASS valid fo
29e60 72 20 61 20 73 69 6e 67 6c 65 20 72 6f 77 20 75  r a single row u
29e70 70 64 61 74 65 20 2a 2f 0a 23 64 65 66 69 6e 65  pdate */.#define
29e80 20 4f 4e 45 50 41 53 53 5f 4d 55 4c 54 49 20 20   ONEPASS_MULTI  
29e90 20 20 32 20 20 20 20 20 20 20 20 2f 2a 20 4f 4e    2        /* ON
29ea0 45 50 41 53 53 20 69 73 20 76 61 6c 69 64 20 66  EPASS is valid f
29eb0 6f 72 20 6d 75 6c 74 69 70 6c 65 20 72 6f 77 73  or multiple rows
29ec0 20 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65 33   */.void sqlite3
29ed0 45 78 70 72 43 6f 64 65 4c 6f 61 64 49 6e 64 65  ExprCodeLoadInde
29ee0 78 43 6f 6c 75 6d 6e 28 50 61 72 73 65 2a 2c 20  xColumn(Parse*, 
29ef0 49 6e 64 65 78 2a 2c 20 69 6e 74 2c 20 69 6e 74  Index*, int, int
29f00 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69  , int);.int sqli
29f10 74 65 33 45 78 70 72 43 6f 64 65 47 65 74 43 6f  te3ExprCodeGetCo
29f20 6c 75 6d 6e 28 50 61 72 73 65 2a 2c 20 54 61 62  lumn(Parse*, Tab
29f30 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69  le*, int, int, i
29f40 6e 74 2c 20 75 38 29 3b 0a 76 6f 69 64 20 73 71  nt, u8);.void sq
29f50 6c 69 74 65 33 45 78 70 72 43 6f 64 65 47 65 74  lite3ExprCodeGet
29f60 43 6f 6c 75 6d 6e 54 6f 52 65 67 28 50 61 72 73  ColumnToReg(Pars
29f70 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c  e*, Table*, int,
29f80 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64   int, int);.void
29f90 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65   sqlite3ExprCode
29fa0 47 65 74 43 6f 6c 75 6d 6e 4f 66 54 61 62 6c 65  GetColumnOfTable
29fb0 28 56 64 62 65 2a 2c 20 54 61 62 6c 65 2a 2c 20  (Vdbe*, Table*, 
29fc0 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  int, int, int);.
29fd0 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
29fe0 43 6f 64 65 4d 6f 76 65 28 50 61 72 73 65 2a 2c  CodeMove(Parse*,
29ff0 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b   int, int, int);
2a000 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
2a010 72 43 61 63 68 65 53 74 6f 72 65 28 50 61 72 73  rCacheStore(Pars
2a020 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e  e*, int, int, in
2a030 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
2a040 45 78 70 72 43 61 63 68 65 50 75 73 68 28 50 61  ExprCachePush(Pa
2a050 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  rse*);.void sqli
2a060 74 65 33 45 78 70 72 43 61 63 68 65 50 6f 70 28  te3ExprCachePop(
2a070 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71  Parse*);.void sq
2a080 6c 69 74 65 33 45 78 70 72 43 61 63 68 65 52 65  lite3ExprCacheRe
2a090 6d 6f 76 65 28 50 61 72 73 65 2a 2c 20 69 6e 74  move(Parse*, int
2a0a0 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
2a0b0 69 74 65 33 45 78 70 72 43 61 63 68 65 43 6c 65  ite3ExprCacheCle
2a0c0 61 72 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64  ar(Parse*);.void
2a0d0 20 73 71 6c 69 74 65 33 45 78 70 72 43 61 63 68   sqlite3ExprCach
2a0e0 65 41 66 66 69 6e 69 74 79 43 68 61 6e 67 65 28  eAffinityChange(
2a0f0 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74  Parse*, int, int
2a100 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
2a110 78 70 72 43 6f 64 65 28 50 61 72 73 65 2a 2c 20  xprCode(Parse*, 
2a120 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69  Expr*, int);.voi
2a130 64 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64  d sqlite3ExprCod
2a140 65 43 6f 70 79 28 50 61 72 73 65 2a 2c 20 45 78  eCopy(Parse*, Ex
2a150 70 72 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  pr*, int);.void 
2a160 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 46  sqlite3ExprCodeF
2a170 61 63 74 6f 72 61 62 6c 65 28 50 61 72 73 65 2a  actorable(Parse*
2a180 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 69  , Expr*, int);.i
2a190 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f  nt sqlite3ExprCo
2a1a0 64 65 41 74 49 6e 69 74 28 50 61 72 73 65 2a 2c  deAtInit(Parse*,
2a1b0 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e   Expr*, int);.in
2a1c0 74 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64  t sqlite3ExprCod
2a1d0 65 54 65 6d 70 28 50 61 72 73 65 2a 2c 20 45 78  eTemp(Parse*, Ex
2a1e0 70 72 2a 2c 20 69 6e 74 2a 29 3b 0a 69 6e 74 20  pr*, int*);.int 
2a1f0 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 54  sqlite3ExprCodeT
2a200 61 72 67 65 74 28 50 61 72 73 65 2a 2c 20 45 78  arget(Parse*, Ex
2a210 70 72 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  pr*, int);.void 
2a220 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 41  sqlite3ExprCodeA
2a230 6e 64 43 61 63 68 65 28 50 61 72 73 65 2a 2c 20  ndCache(Parse*, 
2a240 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74  Expr*, int);.int
2a250 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65   sqlite3ExprCode
2a260 45 78 70 72 4c 69 73 74 28 50 61 72 73 65 2a 2c  ExprList(Parse*,
2a270 20 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74 2c   ExprList*, int,
2a280 20 69 6e 74 2c 20 75 38 29 3b 0a 23 64 65 66 69   int, u8);.#defi
2a290 6e 65 20 53 51 4c 49 54 45 5f 45 43 45 4c 5f 44  ne SQLITE_ECEL_D
2a2a0 55 50 20 20 20 20 20 20 30 78 30 31 20 20 2f 2a  UP      0x01  /*
2a2b0 20 44 65 65 70 2c 20 6e 6f 74 20 73 68 61 6c 6c   Deep, not shall
2a2c0 6f 77 20 63 6f 70 69 65 73 20 2a 2f 0a 23 64 65  ow copies */.#de
2a2d0 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 43 45 4c  fine SQLITE_ECEL
2a2e0 5f 46 41 43 54 4f 52 20 20 20 30 78 30 32 20 20  _FACTOR   0x02  
2a2f0 2f 2a 20 46 61 63 74 6f 72 20 6f 75 74 20 63 6f  /* Factor out co
2a300 6e 73 74 61 6e 74 20 74 65 72 6d 73 20 2a 2f 0a  nstant terms */.
2a310 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 45  #define SQLITE_E
2a320 43 45 4c 5f 52 45 46 20 20 20 20 20 20 30 78 30  CEL_REF      0x0
2a330 34 20 20 2f 2a 20 55 73 65 20 45 78 70 72 4c 69  4  /* Use ExprLi
2a340 73 74 2e 75 2e 78 2e 69 4f 72 64 65 72 42 79 43  st.u.x.iOrderByC
2a350 6f 6c 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  ol */.#define SQ
2a360 4c 49 54 45 5f 45 43 45 4c 5f 4f 4d 49 54 52 45  LITE_ECEL_OMITRE
2a370 46 20 20 30 78 30 38 20 20 2f 2a 20 4f 6d 69 74  F  0x08  /* Omit
2a380 20 69 66 20 45 78 70 72 4c 69 73 74 2e 75 2e 78   if ExprList.u.x
2a390 2e 69 4f 72 64 65 72 42 79 43 6f 6c 20 2a 2f 0a  .iOrderByCol */.
2a3a0 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
2a3b0 49 66 54 72 75 65 28 50 61 72 73 65 2a 2c 20 45  IfTrue(Parse*, E
2a3c0 78 70 72 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b  xpr*, int, int);
2a3d0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
2a3e0 72 49 66 46 61 6c 73 65 28 50 61 72 73 65 2a 2c  rIfFalse(Parse*,
2a3f0 20 45 78 70 72 2a 2c 20 69 6e 74 2c 20 69 6e 74   Expr*, int, int
2a400 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
2a410 78 70 72 49 66 46 61 6c 73 65 44 75 70 28 50 61  xprIfFalseDup(Pa
2a420 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74  rse*, Expr*, int
2a430 2c 20 69 6e 74 29 3b 0a 54 61 62 6c 65 20 2a 73  , int);.Table *s
2a440 71 6c 69 74 65 33 46 69 6e 64 54 61 62 6c 65 28  qlite3FindTable(
2a450 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63  sqlite3*,const c
2a460 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  har*, const char
2a470 2a 29 3b 0a 23 64 65 66 69 6e 65 20 4c 4f 43 41  *);.#define LOCA
2a480 54 45 5f 56 49 45 57 20 20 20 20 30 78 30 31 0a  TE_VIEW    0x01.
2a490 23 64 65 66 69 6e 65 20 4c 4f 43 41 54 45 5f 4e  #define LOCATE_N
2a4a0 4f 45 52 52 20 20 20 30 78 30 32 0a 54 61 62 6c  OERR   0x02.Tabl
2a4b0 65 20 2a 73 71 6c 69 74 65 33 4c 6f 63 61 74 65  e *sqlite3Locate
2a4c0 54 61 62 6c 65 28 50 61 72 73 65 2a 2c 75 33 32  Table(Parse*,u32
2a4d0 20 66 6c 61 67 73 2c 63 6f 6e 73 74 20 63 68 61   flags,const cha
2a4e0 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29  r*, const char*)
2a4f0 3b 0a 54 61 62 6c 65 20 2a 73 71 6c 69 74 65 33  ;.Table *sqlite3
2a500 4c 6f 63 61 74 65 54 61 62 6c 65 49 74 65 6d 28  LocateTableItem(
2a510 50 61 72 73 65 2a 2c 75 33 32 20 66 6c 61 67 73  Parse*,u32 flags
2a520 2c 73 74 72 75 63 74 20 53 72 63 4c 69 73 74 5f  ,struct SrcList_
2a530 69 74 65 6d 20 2a 29 3b 0a 49 6e 64 65 78 20 2a  item *);.Index *
2a540 73 71 6c 69 74 65 33 46 69 6e 64 49 6e 64 65 78  sqlite3FindIndex
2a550 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20  (sqlite3*,const 
2a560 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61  char*, const cha
2a570 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  r*);.void sqlite
2a580 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65  3UnlinkAndDelete
2a590 54 61 62 6c 65 28 73 71 6c 69 74 65 33 2a 2c 69  Table(sqlite3*,i
2a5a0 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  nt,const char*);
2a5b0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 55 6e 6c  .void sqlite3Unl
2a5c0 69 6e 6b 41 6e 64 44 65 6c 65 74 65 49 6e 64 65  inkAndDeleteInde
2a5d0 78 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 63  x(sqlite3*,int,c
2a5e0 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69  onst char*);.voi
2a5f0 64 20 73 71 6c 69 74 65 33 56 61 63 75 75 6d 28  d sqlite3Vacuum(
2a600 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 29 3b 0a  Parse*,Token*);.
2a610 69 6e 74 20 73 71 6c 69 74 65 33 52 75 6e 56 61  int sqlite3RunVa
2a620 63 75 75 6d 28 63 68 61 72 2a 2a 2c 20 73 71 6c  cuum(char**, sql
2a630 69 74 65 33 2a 2c 20 69 6e 74 29 3b 0a 63 68 61  ite3*, int);.cha
2a640 72 20 2a 73 71 6c 69 74 65 33 4e 61 6d 65 46 72  r *sqlite3NameFr
2a650 6f 6d 54 6f 6b 65 6e 28 73 71 6c 69 74 65 33 2a  omToken(sqlite3*
2a660 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73  , Token*);.int s
2a670 71 6c 69 74 65 33 45 78 70 72 43 6f 6d 70 61 72  qlite3ExprCompar
2a680 65 28 50 61 72 73 65 2a 2c 45 78 70 72 2a 2c 20  e(Parse*,Expr*, 
2a690 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74  Expr*, int);.int
2a6a0 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 6d 70   sqlite3ExprComp
2a6b0 61 72 65 53 6b 69 70 28 45 78 70 72 2a 2c 20 45  areSkip(Expr*, E
2a6c0 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20  xpr*, int);.int 
2a6d0 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74 43  sqlite3ExprListC
2a6e0 6f 6d 70 61 72 65 28 45 78 70 72 4c 69 73 74 2a  ompare(ExprList*
2a6f0 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74  , ExprList*, int
2a700 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78  );.int sqlite3Ex
2a710 70 72 49 6d 70 6c 69 65 73 45 78 70 72 28 50 61  prImpliesExpr(Pa
2a720 72 73 65 2a 2c 45 78 70 72 2a 2c 20 45 78 70 72  rse*,Expr*, Expr
2a730 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c  *, int);.int sql
2a740 69 74 65 33 45 78 70 72 49 6d 70 6c 69 65 73 4e  ite3ExprImpliesN
2a750 6f 6e 4e 75 6c 6c 52 6f 77 28 45 78 70 72 2a 2c  onNullRow(Expr*,
2a760 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
2a770 65 33 45 78 70 72 41 6e 61 6c 79 7a 65 41 67 67  e3ExprAnalyzeAgg
2a780 72 65 67 61 74 65 73 28 4e 61 6d 65 43 6f 6e 74  regates(NameCont
2a790 65 78 74 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f  ext*, Expr*);.vo
2a7a0 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 41 6e  id sqlite3ExprAn
2a7b0 61 6c 79 7a 65 41 67 67 4c 69 73 74 28 4e 61 6d  alyzeAggList(Nam
2a7c0 65 43 6f 6e 74 65 78 74 2a 2c 45 78 70 72 4c 69  eContext*,ExprLi
2a7d0 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  st*);.int sqlite
2a7e0 33 45 78 70 72 43 6f 76 65 72 65 64 42 79 49 6e  3ExprCoveredByIn
2a7f0 64 65 78 28 45 78 70 72 2a 2c 20 69 6e 74 20 69  dex(Expr*, int i
2a800 43 75 72 2c 20 49 6e 64 65 78 20 2a 70 49 64 78  Cur, Index *pIdx
2a810 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 75  );.int sqlite3Fu
2a820 6e 63 74 69 6f 6e 55 73 65 73 54 68 69 73 53 72  nctionUsesThisSr
2a830 63 28 45 78 70 72 2a 2c 20 53 72 63 4c 69 73 74  c(Expr*, SrcList
2a840 2a 29 3b 0a 56 64 62 65 20 2a 73 71 6c 69 74 65  *);.Vdbe *sqlite
2a850 33 47 65 74 56 64 62 65 28 50 61 72 73 65 2a 29  3GetVdbe(Parse*)
2a860 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ;.#ifndef SQLITE
2a870 5f 55 4e 54 45 53 54 41 42 4c 45 0a 76 6f 69 64  _UNTESTABLE.void
2a880 20 73 71 6c 69 74 65 33 50 72 6e 67 53 61 76 65   sqlite3PrngSave
2a890 53 74 61 74 65 28 76 6f 69 64 29 3b 0a 76 6f 69  State(void);.voi
2a8a0 64 20 73 71 6c 69 74 65 33 50 72 6e 67 52 65 73  d sqlite3PrngRes
2a8b0 74 6f 72 65 53 74 61 74 65 28 76 6f 69 64 29 3b  toreState(void);
2a8c0 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c  .#endif.void sql
2a8d0 69 74 65 33 52 6f 6c 6c 62 61 63 6b 41 6c 6c 28  ite3RollbackAll(
2a8e0 73 71 6c 69 74 65 33 2a 2c 69 6e 74 29 3b 0a 76  sqlite3*,int);.v
2a8f0 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 64 65 56  oid sqlite3CodeV
2a900 65 72 69 66 79 53 63 68 65 6d 61 28 50 61 72 73  erifySchema(Pars
2a910 65 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  e*, int);.void s
2a920 71 6c 69 74 65 33 43 6f 64 65 56 65 72 69 66 79  qlite3CodeVerify
2a930 4e 61 6d 65 64 53 63 68 65 6d 61 28 50 61 72 73  NamedSchema(Pars
2a940 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  e*, const char *
2a950 7a 44 62 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  zDb);.void sqlit
2a960 65 33 42 65 67 69 6e 54 72 61 6e 73 61 63 74 69  e3BeginTransacti
2a970 6f 6e 28 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b  on(Parse*, int);
2a980 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 6e 64  .void sqlite3End
2a990 54 72 61 6e 73 61 63 74 69 6f 6e 28 50 61 72 73  Transaction(Pars
2a9a0 65 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  e*,int);.void sq
2a9b0 6c 69 74 65 33 53 61 76 65 70 6f 69 6e 74 28 50  lite3Savepoint(P
2a9c0 61 72 73 65 2a 2c 20 69 6e 74 2c 20 54 6f 6b 65  arse*, int, Toke
2a9d0 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  n*);.void sqlite
2a9e0 33 43 6c 6f 73 65 53 61 76 65 70 6f 69 6e 74 73  3CloseSavepoints
2a9f0 28 73 71 6c 69 74 65 33 20 2a 29 3b 0a 76 6f 69  (sqlite3 *);.voi
2aa00 64 20 73 71 6c 69 74 65 33 4c 65 61 76 65 4d 75  d sqlite3LeaveMu
2aa10 74 65 78 41 6e 64 43 6c 6f 73 65 5a 6f 6d 62 69  texAndCloseZombi
2aa20 65 28 73 71 6c 69 74 65 33 2a 29 3b 0a 69 6e 74  e(sqlite3*);.int
2aa30 20 73 71 6c 69 74 65 33 45 78 70 72 49 64 54 6f   sqlite3ExprIdTo
2aa40 54 72 75 65 46 61 6c 73 65 28 45 78 70 72 2a 29  TrueFalse(Expr*)
2aa50 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70  ;.int sqlite3Exp
2aa60 72 54 72 75 74 68 56 61 6c 75 65 28 63 6f 6e 73  rTruthValue(cons
2aa70 74 20 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71  t Expr*);.int sq
2aa80 6c 69 74 65 33 45 78 70 72 49 73 43 6f 6e 73 74  lite3ExprIsConst
2aa90 61 6e 74 28 45 78 70 72 2a 29 3b 0a 69 6e 74 20  ant(Expr*);.int 
2aaa0 73 71 6c 69 74 65 33 45 78 70 72 49 73 43 6f 6e  sqlite3ExprIsCon
2aab0 73 74 61 6e 74 4e 6f 74 4a 6f 69 6e 28 45 78 70  stantNotJoin(Exp
2aac0 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  r*);.int sqlite3
2aad0 45 78 70 72 49 73 43 6f 6e 73 74 61 6e 74 4f 72  ExprIsConstantOr
2aae0 46 75 6e 63 74 69 6f 6e 28 45 78 70 72 2a 2c 20  Function(Expr*, 
2aaf0 75 38 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  u8);.int sqlite3
2ab00 45 78 70 72 49 73 43 6f 6e 73 74 61 6e 74 4f 72  ExprIsConstantOr
2ab10 47 72 6f 75 70 42 79 28 50 61 72 73 65 2a 2c 20  GroupBy(Parse*, 
2ab20 45 78 70 72 2a 2c 20 45 78 70 72 4c 69 73 74 2a  Expr*, ExprList*
2ab30 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78  );.int sqlite3Ex
2ab40 70 72 49 73 54 61 62 6c 65 43 6f 6e 73 74 61 6e  prIsTableConstan
2ab50 74 28 45 78 70 72 2a 2c 69 6e 74 29 3b 0a 23 69  t(Expr*,int);.#i
2ab60 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  fdef SQLITE_ENAB
2ab70 4c 45 5f 43 55 52 53 4f 52 5f 48 49 4e 54 53 0a  LE_CURSOR_HINTS.
2ab80 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 43  int sqlite3ExprC
2ab90 6f 6e 74 61 69 6e 73 53 75 62 71 75 65 72 79 28  ontainsSubquery(
2aba0 45 78 70 72 2a 29 3b 0a 23 65 6e 64 69 66 0a 69  Expr*);.#endif.i
2abb0 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 49 73  nt sqlite3ExprIs
2abc0 49 6e 74 65 67 65 72 28 45 78 70 72 2a 2c 20 69  Integer(Expr*, i
2abd0 6e 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  nt*);.int sqlite
2abe0 33 45 78 70 72 43 61 6e 42 65 4e 75 6c 6c 28 63  3ExprCanBeNull(c
2abf0 6f 6e 73 74 20 45 78 70 72 2a 29 3b 0a 69 6e 74  onst Expr*);.int
2ac00 20 73 71 6c 69 74 65 33 45 78 70 72 4e 65 65 64   sqlite3ExprNeed
2ac10 73 4e 6f 41 66 66 69 6e 69 74 79 43 68 61 6e 67  sNoAffinityChang
2ac20 65 28 63 6f 6e 73 74 20 45 78 70 72 2a 2c 20 63  e(const Expr*, c
2ac30 68 61 72 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  har);.int sqlite
2ac40 33 49 73 52 6f 77 69 64 28 63 6f 6e 73 74 20 63  3IsRowid(const c
2ac50 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  har*);.void sqli
2ac60 74 65 33 47 65 6e 65 72 61 74 65 52 6f 77 44 65  te3GenerateRowDe
2ac70 6c 65 74 65 28 0a 20 20 20 20 50 61 72 73 65 2a  lete(.    Parse*
2ac80 2c 54 61 62 6c 65 2a 2c 54 72 69 67 67 65 72 2a  ,Table*,Trigger*
2ac90 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c 69 31 36  ,int,int,int,i16
2aca0 2c 75 38 2c 75 38 2c 75 38 2c 69 6e 74 29 3b 0a  ,u8,u8,u8,int);.
2acb0 76 6f 69 64 20 73 71 6c 69 74 65 33 47 65 6e 65  void sqlite3Gene
2acc0 72 61 74 65 52 6f 77 49 6e 64 65 78 44 65 6c 65  rateRowIndexDele
2acd0 74 65 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65  te(Parse*, Table
2ace0 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74  *, int, int, int
2acf0 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c  *, int);.int sql
2ad00 69 74 65 33 47 65 6e 65 72 61 74 65 49 6e 64 65  ite3GenerateInde
2ad10 78 4b 65 79 28 50 61 72 73 65 2a 2c 20 49 6e 64  xKey(Parse*, Ind
2ad20 65 78 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69  ex*, int, int, i
2ad30 6e 74 2c 20 69 6e 74 2a 2c 49 6e 64 65 78 2a 2c  nt, int*,Index*,
2ad40 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
2ad50 65 33 52 65 73 6f 6c 76 65 50 61 72 74 49 64 78  e3ResolvePartIdx
2ad60 4c 61 62 65 6c 28 50 61 72 73 65 2a 2c 69 6e 74  Label(Parse*,int
2ad70 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 47  );.void sqlite3G
2ad80 65 6e 65 72 61 74 65 43 6f 6e 73 74 72 61 69 6e  enerateConstrain
2ad90 74 43 68 65 63 6b 73 28 50 61 72 73 65 2a 2c 54  tChecks(Parse*,T
2ada0 61 62 6c 65 2a 2c 69 6e 74 2a 2c 69 6e 74 2c 69  able*,int*,int,i
2adb0 6e 74 2c 69 6e 74 2c 69 6e 74 2c 0a 20 20 20 20  nt,int,int,.    
2adc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2add0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ade0 20 75 38 2c 75 38 2c 69 6e 74 2c 69 6e 74 2a 2c   u8,u8,int,int*,
2adf0 69 6e 74 2a 2c 55 70 73 65 72 74 2a 29 3b 0a 23  int*,Upsert*);.#
2ae00 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  ifdef SQLITE_ENA
2ae10 42 4c 45 5f 4e 55 4c 4c 5f 54 52 49 4d 0a 20 20  BLE_NULL_TRIM.  
2ae20 76 6f 69 64 20 73 71 6c 69 74 65 33 53 65 74 4d  void sqlite3SetM
2ae30 61 6b 65 52 65 63 6f 72 64 50 35 28 56 64 62 65  akeRecordP5(Vdbe
2ae40 2a 2c 54 61 62 6c 65 2a 29 3b 0a 23 65 6c 73 65  *,Table*);.#else
2ae50 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
2ae60 33 53 65 74 4d 61 6b 65 52 65 63 6f 72 64 50 35  3SetMakeRecordP5
2ae70 28 41 2c 42 29 0a 23 65 6e 64 69 66 0a 76 6f 69  (A,B).#endif.voi
2ae80 64 20 73 71 6c 69 74 65 33 43 6f 6d 70 6c 65 74  d sqlite3Complet
2ae90 65 49 6e 73 65 72 74 69 6f 6e 28 50 61 72 73 65  eInsertion(Parse
2aea0 2a 2c 54 61 62 6c 65 2a 2c 69 6e 74 2c 69 6e 74  *,Table*,int,int
2aeb0 2c 69 6e 74 2c 69 6e 74 2a 2c 69 6e 74 2c 69 6e  ,int,int*,int,in
2aec0 74 2c 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69  t,int);.int sqli
2aed0 74 65 33 4f 70 65 6e 54 61 62 6c 65 41 6e 64 49  te3OpenTableAndI
2aee0 6e 64 69 63 65 73 28 50 61 72 73 65 2a 2c 20 54  ndices(Parse*, T
2aef0 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 75 38 2c 20  able*, int, u8, 
2af00 69 6e 74 2c 20 75 38 2a 2c 20 69 6e 74 2a 2c 20  int, u8*, int*, 
2af10 69 6e 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  int*);.void sqli
2af20 74 65 33 42 65 67 69 6e 57 72 69 74 65 4f 70 65  te3BeginWriteOpe
2af30 72 61 74 69 6f 6e 28 50 61 72 73 65 2a 2c 20 69  ration(Parse*, i
2af40 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  nt, int);.void s
2af50 71 6c 69 74 65 33 4d 75 6c 74 69 57 72 69 74 65  qlite3MultiWrite
2af60 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73  (Parse*);.void s
2af70 71 6c 69 74 65 33 4d 61 79 41 62 6f 72 74 28 50  qlite3MayAbort(P
2af80 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  arse*);.void sql
2af90 69 74 65 33 48 61 6c 74 43 6f 6e 73 74 72 61 69  ite3HaltConstrai
2afa0 6e 74 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20  nt(Parse*, int, 
2afb0 69 6e 74 2c 20 63 68 61 72 2a 2c 20 69 38 2c 20  int, char*, i8, 
2afc0 75 38 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  u8);.void sqlite
2afd0 33 55 6e 69 71 75 65 43 6f 6e 73 74 72 61 69 6e  3UniqueConstrain
2afe0 74 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 49  t(Parse*, int, I
2aff0 6e 64 65 78 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  ndex*);.void sql
2b000 69 74 65 33 52 6f 77 69 64 43 6f 6e 73 74 72 61  ite3RowidConstra
2b010 69 6e 74 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c  int(Parse*, int,
2b020 20 54 61 62 6c 65 2a 29 3b 0a 45 78 70 72 20 2a   Table*);.Expr *
2b030 73 71 6c 69 74 65 33 45 78 70 72 44 75 70 28 73  sqlite3ExprDup(s
2b040 71 6c 69 74 65 33 2a 2c 45 78 70 72 2a 2c 69 6e  qlite3*,Expr*,in
2b050 74 29 3b 0a 45 78 70 72 4c 69 73 74 20 2a 73 71  t);.ExprList *sq
2b060 6c 69 74 65 33 45 78 70 72 4c 69 73 74 44 75 70  lite3ExprListDup
2b070 28 73 71 6c 69 74 65 33 2a 2c 45 78 70 72 4c 69  (sqlite3*,ExprLi
2b080 73 74 2a 2c 69 6e 74 29 3b 0a 53 72 63 4c 69 73  st*,int);.SrcLis
2b090 74 20 2a 73 71 6c 69 74 65 33 53 72 63 4c 69 73  t *sqlite3SrcLis
2b0a0 74 44 75 70 28 73 71 6c 69 74 65 33 2a 2c 53 72  tDup(sqlite3*,Sr
2b0b0 63 4c 69 73 74 2a 2c 69 6e 74 29 3b 0a 49 64 4c  cList*,int);.IdL
2b0c0 69 73 74 20 2a 73 71 6c 69 74 65 33 49 64 4c 69  ist *sqlite3IdLi
2b0d0 73 74 44 75 70 28 73 71 6c 69 74 65 33 2a 2c 49  stDup(sqlite3*,I
2b0e0 64 4c 69 73 74 2a 29 3b 0a 53 65 6c 65 63 74 20  dList*);.Select 
2b0f0 2a 73 71 6c 69 74 65 33 53 65 6c 65 63 74 44 75  *sqlite3SelectDu
2b100 70 28 73 71 6c 69 74 65 33 2a 2c 53 65 6c 65 63  p(sqlite3*,Selec
2b110 74 2a 2c 69 6e 74 29 3b 0a 23 69 66 20 53 45 4c  t*,int);.#if SEL
2b120 45 43 54 54 52 41 43 45 5f 45 4e 41 42 4c 45 44  ECTTRACE_ENABLED
2b130 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 65 6c  .void sqlite3Sel
2b140 65 63 74 53 65 74 4e 61 6d 65 28 53 65 6c 65 63  ectSetName(Selec
2b150 74 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  t*,const char*);
2b160 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
2b170 73 71 6c 69 74 65 33 53 65 6c 65 63 74 53 65 74  sqlite3SelectSet
2b180 4e 61 6d 65 28 41 2c 42 29 0a 23 65 6e 64 69 66  Name(A,B).#endif
2b190 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 49 6e 73  .void sqlite3Ins
2b1a0 65 72 74 42 75 69 6c 74 69 6e 46 75 6e 63 73 28  ertBuiltinFuncs(
2b1b0 46 75 6e 63 44 65 66 2a 2c 69 6e 74 29 3b 0a 46  FuncDef*,int);.F
2b1c0 75 6e 63 44 65 66 20 2a 73 71 6c 69 74 65 33 46  uncDef *sqlite3F
2b1d0 69 6e 64 46 75 6e 63 74 69 6f 6e 28 73 71 6c 69  indFunction(sqli
2b1e0 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  te3*,const char*
2b1f0 2c 69 6e 74 2c 75 38 2c 75 38 29 3b 0a 76 6f 69  ,int,u8,u8);.voi
2b200 64 20 73 71 6c 69 74 65 33 52 65 67 69 73 74 65  d sqlite3Registe
2b210 72 42 75 69 6c 74 69 6e 46 75 6e 63 74 69 6f 6e  rBuiltinFunction
2b220 73 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20 73 71  s(void);.void sq
2b230 6c 69 74 65 33 52 65 67 69 73 74 65 72 44 61 74  lite3RegisterDat
2b240 65 54 69 6d 65 46 75 6e 63 74 69 6f 6e 73 28 76  eTimeFunctions(v
2b250 6f 69 64 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  oid);.void sqlit
2b260 65 33 52 65 67 69 73 74 65 72 50 65 72 43 6f 6e  e3RegisterPerCon
2b270 6e 65 63 74 69 6f 6e 42 75 69 6c 74 69 6e 46 75  nectionBuiltinFu
2b280 6e 63 74 69 6f 6e 73 28 73 71 6c 69 74 65 33 2a  nctions(sqlite3*
2b290 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 61  );.int sqlite3Sa
2b2a0 66 65 74 79 43 68 65 63 6b 4f 6b 28 73 71 6c 69  fetyCheckOk(sqli
2b2b0 74 65 33 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  te3*);.int sqlit
2b2c0 65 33 53 61 66 65 74 79 43 68 65 63 6b 53 69 63  e3SafetyCheckSic
2b2d0 6b 4f 72 4f 6b 28 73 71 6c 69 74 65 33 2a 29 3b  kOrOk(sqlite3*);
2b2e0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 68 61  .void sqlite3Cha
2b2f0 6e 67 65 43 6f 6f 6b 69 65 28 50 61 72 73 65 2a  ngeCookie(Parse*
2b300 2c 20 69 6e 74 29 3b 0a 0a 23 69 66 20 21 64 65  , int);..#if !de
2b310 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49  fined(SQLITE_OMI
2b320 54 5f 56 49 45 57 29 20 26 26 20 21 64 65 66 69  T_VIEW) && !defi
2b330 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ned(SQLITE_OMIT_
2b340 54 52 49 47 47 45 52 29 0a 76 6f 69 64 20 73 71  TRIGGER).void sq
2b350 6c 69 74 65 33 4d 61 74 65 72 69 61 6c 69 7a 65  lite3Materialize
2b360 56 69 65 77 28 50 61 72 73 65 2a 2c 20 54 61 62  View(Parse*, Tab
2b370 6c 65 2a 2c 20 45 78 70 72 2a 2c 20 45 78 70 72  le*, Expr*, Expr
2b380 4c 69 73 74 2a 2c 45 78 70 72 2a 2c 69 6e 74 29  List*,Expr*,int)
2b390 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65  ;.#endif..#ifnde
2b3a0 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52  f SQLITE_OMIT_TR
2b3b0 49 47 47 45 52 0a 20 20 76 6f 69 64 20 73 71 6c  IGGER.  void sql
2b3c0 69 74 65 33 42 65 67 69 6e 54 72 69 67 67 65 72  ite3BeginTrigger
2b3d0 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c  (Parse*, Token*,
2b3e0 54 6f 6b 65 6e 2a 2c 69 6e 74 2c 69 6e 74 2c 49  Token*,int,int,I
2b3f0 64 4c 69 73 74 2a 2c 53 72 63 4c 69 73 74 2a 2c  dList*,SrcList*,
2b400 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2b410 20 20 20 20 20 20 20 20 20 20 20 20 45 78 70 72              Expr
2b420 2a 2c 69 6e 74 2c 20 69 6e 74 29 3b 0a 20 20 76  *,int, int);.  v
2b430 6f 69 64 20 73 71 6c 69 74 65 33 46 69 6e 69 73  oid sqlite3Finis
2b440 68 54 72 69 67 67 65 72 28 50 61 72 73 65 2a 2c  hTrigger(Parse*,
2b450 20 54 72 69 67 67 65 72 53 74 65 70 2a 2c 20 54   TriggerStep*, T
2b460 6f 6b 65 6e 2a 29 3b 0a 20 20 76 6f 69 64 20 73  oken*);.  void s
2b470 71 6c 69 74 65 33 44 72 6f 70 54 72 69 67 67 65  qlite3DropTrigge
2b480 72 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73  r(Parse*, SrcLis
2b490 74 2a 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64  t*, int);.  void
2b4a0 20 73 71 6c 69 74 65 33 44 72 6f 70 54 72 69 67   sqlite3DropTrig
2b4b0 67 65 72 50 74 72 28 50 61 72 73 65 2a 2c 20 54  gerPtr(Parse*, T
2b4c0 72 69 67 67 65 72 2a 29 3b 0a 20 20 54 72 69 67  rigger*);.  Trig
2b4d0 67 65 72 20 2a 73 71 6c 69 74 65 33 54 72 69 67  ger *sqlite3Trig
2b4e0 67 65 72 73 45 78 69 73 74 28 50 61 72 73 65 20  gersExist(Parse 
2b4f0 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20  *, Table*, int, 
2b500 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74 20 2a  ExprList*, int *
2b510 70 4d 61 73 6b 29 3b 0a 20 20 54 72 69 67 67 65  pMask);.  Trigge
2b520 72 20 2a 73 71 6c 69 74 65 33 54 72 69 67 67 65  r *sqlite3Trigge
2b530 72 4c 69 73 74 28 50 61 72 73 65 20 2a 2c 20 54  rList(Parse *, T
2b540 61 62 6c 65 20 2a 29 3b 0a 20 20 76 6f 69 64 20  able *);.  void 
2b550 73 71 6c 69 74 65 33 43 6f 64 65 52 6f 77 54 72  sqlite3CodeRowTr
2b560 69 67 67 65 72 28 50 61 72 73 65 2a 2c 20 54 72  igger(Parse*, Tr
2b570 69 67 67 65 72 20 2a 2c 20 69 6e 74 2c 20 45 78  igger *, int, Ex
2b580 70 72 4c 69 73 74 2a 2c 20 69 6e 74 2c 20 54 61  prList*, int, Ta
2b590 62 6c 65 20 2a 2c 0a 20 20 20 20 20 20 20 20 20  ble *,.         
2b5a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b5b0 20 20 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74     int, int, int
2b5c0 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
2b5d0 33 43 6f 64 65 52 6f 77 54 72 69 67 67 65 72 44  3CodeRowTriggerD
2b5e0 69 72 65 63 74 28 50 61 72 73 65 20 2a 2c 20 54  irect(Parse *, T
2b5f0 72 69 67 67 65 72 20 2a 2c 20 54 61 62 6c 65 20  rigger *, Table 
2b600 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74  *, int, int, int
2b610 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
2b620 56 69 65 77 54 72 69 67 67 65 72 73 28 50 61 72  ViewTriggers(Par
2b630 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 45 78 70  se*, Table*, Exp
2b640 72 2a 2c 20 69 6e 74 2c 20 45 78 70 72 4c 69 73  r*, int, ExprLis
2b650 74 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69  t*);.  void sqli
2b660 74 65 33 44 65 6c 65 74 65 54 72 69 67 67 65 72  te3DeleteTrigger
2b670 53 74 65 70 28 73 71 6c 69 74 65 33 2a 2c 20 54  Step(sqlite3*, T
2b680 72 69 67 67 65 72 53 74 65 70 2a 29 3b 0a 20 20  riggerStep*);.  
2b690 54 72 69 67 67 65 72 53 74 65 70 20 2a 73 71 6c  TriggerStep *sql
2b6a0 69 74 65 33 54 72 69 67 67 65 72 53 65 6c 65 63  ite3TriggerSelec
2b6b0 74 53 74 65 70 28 73 71 6c 69 74 65 33 2a 2c 53  tStep(sqlite3*,S
2b6c0 65 6c 65 63 74 2a 2c 0a 20 20 20 20 20 20 20 20  elect*,.        
2b6d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b6e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b6f0 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73  const char*,cons
2b700 74 20 63 68 61 72 2a 29 3b 0a 20 20 54 72 69 67  t char*);.  Trig
2b710 67 65 72 53 74 65 70 20 2a 73 71 6c 69 74 65 33  gerStep *sqlite3
2b720 54 72 69 67 67 65 72 49 6e 73 65 72 74 53 74 65  TriggerInsertSte
2b730 70 28 73 71 6c 69 74 65 33 2a 2c 54 6f 6b 65 6e  p(sqlite3*,Token
2b740 2a 2c 20 49 64 4c 69 73 74 2a 2c 0a 20 20 20 20  *, IdList*,.    
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 20 20 20 20 20 20 20 20 20                  
2b770 20 20 20 20 53 65 6c 65 63 74 2a 2c 75 38 2c 55      Select*,u8,U
2b780 70 73 65 72 74 2a 2c 0a 20 20 20 20 20 20 20 20  psert*,.        
2b790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b7a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b7b0 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73  const char*,cons
2b7c0 74 20 63 68 61 72 2a 29 3b 0a 20 20 54 72 69 67  t char*);.  Trig
2b7d0 67 65 72 53 74 65 70 20 2a 73 71 6c 69 74 65 33  gerStep *sqlite3
2b7e0 54 72 69 67 67 65 72 55 70 64 61 74 65 53 74 65  TriggerUpdateSte
2b7f0 70 28 73 71 6c 69 74 65 33 2a 2c 54 6f 6b 65 6e  p(sqlite3*,Token
2b800 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 20 45 78 70  *,ExprList*, Exp
2b810 72 2a 2c 20 75 38 2c 0a 20 20 20 20 20 20 20 20  r*, u8,.        
2b820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b840 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73  const char*,cons
2b850 74 20 63 68 61 72 2a 29 3b 0a 20 20 54 72 69 67  t char*);.  Trig
2b860 67 65 72 53 74 65 70 20 2a 73 71 6c 69 74 65 33  gerStep *sqlite3
2b870 54 72 69 67 67 65 72 44 65 6c 65 74 65 53 74 65  TriggerDeleteSte
2b880 70 28 73 71 6c 69 74 65 33 2a 2c 54 6f 6b 65 6e  p(sqlite3*,Token
2b890 2a 2c 20 45 78 70 72 2a 2c 0a 20 20 20 20 20 20  *, Expr*,.      
2b8a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b8b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b8c0 20 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f    const char*,co
2b8d0 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20 20 76 6f  nst char*);.  vo
2b8e0 69 64 20 73 71 6c 69 74 65 33 44 65 6c 65 74 65  id sqlite3Delete
2b8f0 54 72 69 67 67 65 72 28 73 71 6c 69 74 65 33 2a  Trigger(sqlite3*
2b900 2c 20 54 72 69 67 67 65 72 2a 29 3b 0a 20 20 76  , Trigger*);.  v
2b910 6f 69 64 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e  oid sqlite3Unlin
2b920 6b 41 6e 64 44 65 6c 65 74 65 54 72 69 67 67 65  kAndDeleteTrigge
2b930 72 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 63  r(sqlite3*,int,c
2b940 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20 20 75  onst char*);.  u
2b950 33 32 20 73 71 6c 69 74 65 33 54 72 69 67 67 65  32 sqlite3Trigge
2b960 72 43 6f 6c 6d 61 73 6b 28 50 61 72 73 65 2a 2c  rColmask(Parse*,
2b970 54 72 69 67 67 65 72 2a 2c 45 78 70 72 4c 69 73  Trigger*,ExprLis
2b980 74 2a 2c 69 6e 74 2c 69 6e 74 2c 54 61 62 6c 65  t*,int,int,Table
2b990 2a 2c 69 6e 74 29 3b 0a 23 20 64 65 66 69 6e 65  *,int);.# define
2b9a0 20 73 71 6c 69 74 65 33 50 61 72 73 65 54 6f 70   sqlite3ParseTop
2b9b0 6c 65 76 65 6c 28 70 29 20 28 28 70 29 2d 3e 70  level(p) ((p)->p
2b9c0 54 6f 70 6c 65 76 65 6c 20 3f 20 28 70 29 2d 3e  Toplevel ? (p)->
2b9d0 70 54 6f 70 6c 65 76 65 6c 20 3a 20 28 70 29 29  pToplevel : (p))
2b9e0 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
2b9f0 33 49 73 54 6f 70 6c 65 76 65 6c 28 70 29 20 28  3IsToplevel(p) (
2ba00 28 70 29 2d 3e 70 54 6f 70 6c 65 76 65 6c 3d 3d  (p)->pToplevel==
2ba10 30 29 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e  0).#else.# defin
2ba20 65 20 73 71 6c 69 74 65 33 54 72 69 67 67 65 72  e sqlite3Trigger
2ba30 73 45 78 69 73 74 28 42 2c 43 2c 44 2c 45 2c 46  sExist(B,C,D,E,F
2ba40 29 20 30 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  ) 0.# define sql
2ba50 69 74 65 33 44 65 6c 65 74 65 54 72 69 67 67 65  ite3DeleteTrigge
2ba60 72 28 41 2c 42 29 0a 23 20 64 65 66 69 6e 65 20  r(A,B).# define 
2ba70 73 71 6c 69 74 65 33 44 72 6f 70 54 72 69 67 67  sqlite3DropTrigg
2ba80 65 72 50 74 72 28 41 2c 42 29 0a 23 20 64 65 66  erPtr(A,B).# def
2ba90 69 6e 65 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e  ine sqlite3Unlin
2baa0 6b 41 6e 64 44 65 6c 65 74 65 54 72 69 67 67 65  kAndDeleteTrigge
2bab0 72 28 41 2c 42 2c 43 29 0a 23 20 64 65 66 69 6e  r(A,B,C).# defin
2bac0 65 20 73 71 6c 69 74 65 33 43 6f 64 65 52 6f 77  e sqlite3CodeRow
2bad0 54 72 69 67 67 65 72 28 41 2c 42 2c 43 2c 44 2c  Trigger(A,B,C,D,
2bae0 45 2c 46 2c 47 2c 48 2c 49 29 0a 23 20 64 65 66  E,F,G,H,I).# def
2baf0 69 6e 65 20 73 71 6c 69 74 65 33 43 6f 64 65 52  ine sqlite3CodeR
2bb00 6f 77 54 72 69 67 67 65 72 44 69 72 65 63 74 28  owTriggerDirect(
2bb10 41 2c 42 2c 43 2c 44 2c 45 2c 46 29 0a 23 20 64  A,B,C,D,E,F).# d
2bb20 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54 72 69  efine sqlite3Tri
2bb30 67 67 65 72 4c 69 73 74 28 58 2c 20 59 29 20 30  ggerList(X, Y) 0
2bb40 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
2bb50 33 50 61 72 73 65 54 6f 70 6c 65 76 65 6c 28 70  3ParseToplevel(p
2bb60 29 20 70 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  ) p.# define sql
2bb70 69 74 65 33 49 73 54 6f 70 6c 65 76 65 6c 28 70  ite3IsToplevel(p
2bb80 29 20 31 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  ) 1.# define sql
2bb90 69 74 65 33 54 72 69 67 67 65 72 43 6f 6c 6d 61  ite3TriggerColma
2bba0 73 6b 28 41 2c 42 2c 43 2c 44 2c 45 2c 46 2c 47  sk(A,B,C,D,E,F,G
2bbb0 29 20 30 0a 23 65 6e 64 69 66 0a 0a 69 6e 74 20  ) 0.#endif..int 
2bbc0 73 71 6c 69 74 65 33 4a 6f 69 6e 54 79 70 65 28  sqlite3JoinType(
2bbd0 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 20  Parse*, Token*, 
2bbe0 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 29 3b  Token*, Token*);
2bbf0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 72 65  .void sqlite3Cre
2bc00 61 74 65 46 6f 72 65 69 67 6e 4b 65 79 28 50 61  ateForeignKey(Pa
2bc10 72 73 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c  rse*, ExprList*,
2bc20 20 54 6f 6b 65 6e 2a 2c 20 45 78 70 72 4c 69 73   Token*, ExprLis
2bc30 74 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  t*, int);.void s
2bc40 71 6c 69 74 65 33 44 65 66 65 72 46 6f 72 65 69  qlite3DeferForei
2bc50 67 6e 4b 65 79 28 50 61 72 73 65 2a 2c 20 69 6e  gnKey(Parse*, in
2bc60 74 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  t);.#ifndef SQLI
2bc70 54 45 5f 4f 4d 49 54 5f 41 55 54 48 4f 52 49 5a  TE_OMIT_AUTHORIZ
2bc80 41 54 49 4f 4e 0a 20 20 76 6f 69 64 20 73 71 6c  ATION.  void sql
2bc90 69 74 65 33 41 75 74 68 52 65 61 64 28 50 61 72  ite3AuthRead(Par
2bca0 73 65 2a 2c 45 78 70 72 2a 2c 53 63 68 65 6d 61  se*,Expr*,Schema
2bcb0 2a 2c 53 72 63 4c 69 73 74 2a 29 3b 0a 20 20 69  *,SrcList*);.  i
2bcc0 6e 74 20 73 71 6c 69 74 65 33 41 75 74 68 43 68  nt sqlite3AuthCh
2bcd0 65 63 6b 28 50 61 72 73 65 2a 2c 69 6e 74 2c 20  eck(Parse*,int, 
2bce0 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e  const char*, con
2bcf0 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20  st char*, const 
2bd00 63 68 61 72 2a 29 3b 0a 20 20 76 6f 69 64 20 73  char*);.  void s
2bd10 71 6c 69 74 65 33 41 75 74 68 43 6f 6e 74 65 78  qlite3AuthContex
2bd20 74 50 75 73 68 28 50 61 72 73 65 2a 2c 20 41 75  tPush(Parse*, Au
2bd30 74 68 43 6f 6e 74 65 78 74 2a 2c 20 63 6f 6e 73  thContext*, cons
2bd40 74 20 63 68 61 72 2a 29 3b 0a 20 20 76 6f 69 64  t char*);.  void
2bd50 20 73 71 6c 69 74 65 33 41 75 74 68 43 6f 6e 74   sqlite3AuthCont
2bd60 65 78 74 50 6f 70 28 41 75 74 68 43 6f 6e 74 65  extPop(AuthConte
2bd70 78 74 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69  xt*);.  int sqli
2bd80 74 65 33 41 75 74 68 52 65 61 64 43 6f 6c 28 50  te3AuthReadCol(P
2bd90 61 72 73 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61  arse*, const cha
2bda0 72 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20  r *, const char 
2bdb0 2a 2c 20 69 6e 74 29 3b 0a 23 65 6c 73 65 0a 23  *, int);.#else.#
2bdc0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 41   define sqlite3A
2bdd0 75 74 68 52 65 61 64 28 61 2c 62 2c 63 2c 64 29  uthRead(a,b,c,d)
2bde0 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
2bdf0 33 41 75 74 68 43 68 65 63 6b 28 61 2c 62 2c 63  3AuthCheck(a,b,c
2be00 2c 64 2c 65 29 20 20 20 20 53 51 4c 49 54 45 5f  ,d,e)    SQLITE_
2be10 4f 4b 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  OK.# define sqli
2be20 74 65 33 41 75 74 68 43 6f 6e 74 65 78 74 50 75  te3AuthContextPu
2be30 73 68 28 61 2c 62 2c 63 29 0a 23 20 64 65 66 69  sh(a,b,c).# defi
2be40 6e 65 20 73 71 6c 69 74 65 33 41 75 74 68 43 6f  ne sqlite3AuthCo
2be50 6e 74 65 78 74 50 6f 70 28 61 29 20 20 28 28 76  ntextPop(a)  ((v
2be60 6f 69 64 29 28 61 29 29 0a 23 65 6e 64 69 66 0a  oid)(a)).#endif.
2be70 76 6f 69 64 20 73 71 6c 69 74 65 33 41 74 74 61  void sqlite3Atta
2be80 63 68 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a  ch(Parse*, Expr*
2be90 2c 20 45 78 70 72 2a 2c 20 45 78 70 72 2a 29 3b  , Expr*, Expr*);
2bea0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65 74  .void sqlite3Det
2beb0 61 63 68 28 50 61 72 73 65 2a 2c 20 45 78 70 72  ach(Parse*, Expr
2bec0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
2bed0 46 69 78 49 6e 69 74 28 44 62 46 69 78 65 72 2a  FixInit(DbFixer*
2bee0 2c 20 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 63  , Parse*, int, c
2bef0 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73  onst char*, cons
2bf00 74 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73  t Token*);.int s
2bf10 71 6c 69 74 65 33 46 69 78 53 72 63 4c 69 73 74  qlite3FixSrcList
2bf20 28 44 62 46 69 78 65 72 2a 2c 20 53 72 63 4c 69  (DbFixer*, SrcLi
2bf30 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  st*);.int sqlite
2bf40 33 46 69 78 53 65 6c 65 63 74 28 44 62 46 69 78  3FixSelect(DbFix
2bf50 65 72 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 69  er*, Select*);.i
2bf60 6e 74 20 73 71 6c 69 74 65 33 46 69 78 45 78 70  nt sqlite3FixExp
2bf70 72 28 44 62 46 69 78 65 72 2a 2c 20 45 78 70 72  r(DbFixer*, Expr
2bf80 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46  *);.int sqlite3F
2bf90 69 78 45 78 70 72 4c 69 73 74 28 44 62 46 69 78  ixExprList(DbFix
2bfa0 65 72 2a 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b  er*, ExprList*);
2bfb0 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69 78 54  .int sqlite3FixT
2bfc0 72 69 67 67 65 72 53 74 65 70 28 44 62 46 69 78  riggerStep(DbFix
2bfd0 65 72 2a 2c 20 54 72 69 67 67 65 72 53 74 65 70  er*, TriggerStep
2bfe0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 41  *);.int sqlite3A
2bff0 74 6f 46 28 63 6f 6e 73 74 20 63 68 61 72 20 2a  toF(const char *
2c000 7a 2c 20 64 6f 75 62 6c 65 2a 2c 20 69 6e 74 2c  z, double*, int,
2c010 20 75 38 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65   u8);.int sqlite
2c020 33 47 65 74 49 6e 74 33 32 28 63 6f 6e 73 74 20  3GetInt32(const 
2c030 63 68 61 72 20 2a 2c 20 69 6e 74 2a 29 3b 0a 69  char *, int*);.i
2c040 6e 74 20 73 71 6c 69 74 65 33 41 74 6f 69 28 63  nt sqlite3Atoi(c
2c050 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 23 69 66  onst char*);.#if
2c060 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
2c070 5f 55 54 46 31 36 0a 69 6e 74 20 73 71 6c 69 74  _UTF16.int sqlit
2c080 65 33 55 74 66 31 36 42 79 74 65 4c 65 6e 28 63  e3Utf16ByteLen(c
2c090 6f 6e 73 74 20 76 6f 69 64 20 2a 70 44 61 74 61  onst void *pData
2c0a0 2c 20 69 6e 74 20 6e 43 68 61 72 29 3b 0a 23 65  , int nChar);.#e
2c0b0 6e 64 69 66 0a 69 6e 74 20 73 71 6c 69 74 65 33  ndif.int sqlite3
2c0c0 55 74 66 38 43 68 61 72 4c 65 6e 28 63 6f 6e 73  Utf8CharLen(cons
2c0d0 74 20 63 68 61 72 20 2a 70 44 61 74 61 2c 20 69  t char *pData, i
2c0e0 6e 74 20 6e 42 79 74 65 29 3b 0a 75 33 32 20 73  nt nByte);.u32 s
2c0f0 71 6c 69 74 65 33 55 74 66 38 52 65 61 64 28 63  qlite3Utf8Read(c
2c100 6f 6e 73 74 20 75 38 2a 2a 29 3b 0a 4c 6f 67 45  onst u8**);.LogE
2c110 73 74 20 73 71 6c 69 74 65 33 4c 6f 67 45 73 74  st sqlite3LogEst
2c120 28 75 36 34 29 3b 0a 4c 6f 67 45 73 74 20 73 71  (u64);.LogEst sq
2c130 6c 69 74 65 33 4c 6f 67 45 73 74 41 64 64 28 4c  lite3LogEstAdd(L
2c140 6f 67 45 73 74 2c 4c 6f 67 45 73 74 29 3b 0a 23  ogEst,LogEst);.#
2c150 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
2c160 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a  IT_VIRTUALTABLE.
2c170 4c 6f 67 45 73 74 20 73 71 6c 69 74 65 33 4c 6f  LogEst sqlite3Lo
2c180 67 45 73 74 46 72 6f 6d 44 6f 75 62 6c 65 28 64  gEstFromDouble(d
2c190 6f 75 62 6c 65 29 3b 0a 23 65 6e 64 69 66 0a 23  ouble);.#endif.#
2c1a0 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  if defined(SQLIT
2c1b0 45 5f 45 4e 41 42 4c 45 5f 53 54 4d 54 5f 53 43  E_ENABLE_STMT_SC
2c1c0 41 4e 53 54 41 54 55 53 29 20 7c 7c 20 5c 0a 20  ANSTATUS) || \. 
2c1d0 20 20 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54     defined(SQLIT
2c1e0 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 5f 4f  E_ENABLE_STAT3_O
2c1f0 52 5f 53 54 41 54 34 29 20 7c 7c 20 5c 0a 20 20  R_STAT4) || \.  
2c200 20 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45    defined(SQLITE
2c210 5f 45 58 50 4c 41 49 4e 5f 45 53 54 49 4d 41 54  _EXPLAIN_ESTIMAT
2c220 45 44 5f 52 4f 57 53 29 0a 75 36 34 20 73 71 6c  ED_ROWS).u64 sql
2c230 69 74 65 33 4c 6f 67 45 73 74 54 6f 49 6e 74 28  ite3LogEstToInt(
2c240 4c 6f 67 45 73 74 29 3b 0a 23 65 6e 64 69 66 0a  LogEst);.#endif.
2c250 56 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 56 4c  VList *sqlite3VL
2c260 69 73 74 41 64 64 28 73 71 6c 69 74 65 33 2a 2c  istAdd(sqlite3*,
2c270 56 4c 69 73 74 2a 2c 63 6f 6e 73 74 20 63 68 61  VList*,const cha
2c280 72 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a 63 6f 6e  r*,int,int);.con
2c290 73 74 20 63 68 61 72 20 2a 73 71 6c 69 74 65 33  st char *sqlite3
2c2a0 56 4c 69 73 74 4e 75 6d 54 6f 4e 61 6d 65 28 56  VListNumToName(V
2c2b0 4c 69 73 74 2a 2c 69 6e 74 29 3b 0a 69 6e 74 20  List*,int);.int 
2c2c0 73 71 6c 69 74 65 33 56 4c 69 73 74 4e 61 6d 65  sqlite3VListName
2c2d0 54 6f 4e 75 6d 28 56 4c 69 73 74 2a 2c 63 6f 6e  ToNum(VList*,con
2c2e0 73 74 20 63 68 61 72 2a 2c 69 6e 74 29 3b 0a 0a  st char*,int);..
2c2f0 2f 2a 0a 2a 2a 20 52 6f 75 74 69 6e 65 73 20 74  /*.** Routines t
2c300 6f 20 72 65 61 64 20 61 6e 64 20 77 72 69 74 65  o read and write
2c310 20 76 61 72 69 61 62 6c 65 2d 6c 65 6e 67 74 68   variable-length
2c320 20 69 6e 74 65 67 65 72 73 2e 20 20 54 68 65 73   integers.  Thes
2c330 65 20 75 73 65 64 20 74 6f 0a 2a 2a 20 62 65 20  e used to.** be 
2c340 64 65 66 69 6e 65 64 20 6c 6f 63 61 6c 6c 79 2c  defined locally,
2c350 20 62 75 74 20 6e 6f 77 20 77 65 20 75 73 65 20   but now we use 
2c360 74 68 65 20 76 61 72 69 6e 74 20 72 6f 75 74 69  the varint routi
2c370 6e 65 73 20 69 6e 20 74 68 65 20 75 74 69 6c 2e  nes in the util.
2c380 63 0a 2a 2a 20 66 69 6c 65 2e 0a 2a 2f 0a 69 6e  c.** file..*/.in
2c390 74 20 73 71 6c 69 74 65 33 50 75 74 56 61 72 69  t sqlite3PutVari
2c3a0 6e 74 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72  nt(unsigned char
2c3b0 2a 2c 20 75 36 34 29 3b 0a 75 38 20 73 71 6c 69  *, u64);.u8 sqli
2c3c0 74 65 33 47 65 74 56 61 72 69 6e 74 28 63 6f 6e  te3GetVarint(con
2c3d0 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72  st unsigned char
2c3e0 20 2a 2c 20 75 36 34 20 2a 29 3b 0a 75 38 20 73   *, u64 *);.u8 s
2c3f0 71 6c 69 74 65 33 47 65 74 56 61 72 69 6e 74 33  qlite3GetVarint3
2c400 32 28 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64  2(const unsigned
2c410 20 63 68 61 72 20 2a 2c 20 75 33 32 20 2a 29 3b   char *, u32 *);
2c420 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 61 72 69  .int sqlite3Vari
2c430 6e 74 4c 65 6e 28 75 36 34 20 76 29 3b 0a 0a 2f  ntLen(u64 v);../
2c440 2a 0a 2a 2a 20 54 68 65 20 63 6f 6d 6d 6f 6e 20  *.** The common 
2c450 63 61 73 65 20 69 73 20 66 6f 72 20 61 20 76 61  case is for a va
2c460 72 69 6e 74 20 74 6f 20 62 65 20 61 20 73 69 6e  rint to be a sin
2c470 67 6c 65 20 62 79 74 65 2e 20 20 54 68 65 79 20  gle byte.  They 
2c480 66 6f 6c 6c 6f 77 69 6e 67 0a 2a 2a 20 6d 61 63  following.** mac
2c490 72 6f 73 20 68 61 6e 64 6c 65 20 74 68 65 20 63  ros handle the c
2c4a0 6f 6d 6d 6f 6e 20 63 61 73 65 20 77 69 74 68 6f  ommon case witho
2c4b0 75 74 20 61 20 70 72 6f 63 65 64 75 72 65 20 63  ut a procedure c
2c4c0 61 6c 6c 2c 20 62 75 74 20 74 68 65 6e 20 63 61  all, but then ca
2c4d0 6c 6c 0a 2a 2a 20 74 68 65 20 70 72 6f 63 65 64  ll.** the proced
2c4e0 75 72 65 20 66 6f 72 20 6c 61 72 67 65 72 20 76  ure for larger v
2c4f0 61 72 69 6e 74 73 2e 0a 2a 2f 0a 23 64 65 66 69  arints..*/.#defi
2c500 6e 65 20 67 65 74 56 61 72 69 6e 74 33 32 28 41  ne getVarint32(A
2c510 2c 42 29 20 20 5c 0a 20 20 28 75 38 29 28 28 2a  ,B)  \.  (u8)((*
2c520 28 41 29 3c 28 75 38 29 30 78 38 30 29 3f 28 28  (A)<(u8)0x80)?((
2c530 42 29 3d 28 75 33 32 29 2a 28 41 29 29 2c 31 3a  B)=(u32)*(A)),1:
2c540 73 71 6c 69 74 65 33 47 65 74 56 61 72 69 6e 74  sqlite3GetVarint
2c550 33 32 28 28 41 29 2c 28 75 33 32 20 2a 29 26 28  32((A),(u32 *)&(
2c560 42 29 29 29 0a 23 64 65 66 69 6e 65 20 70 75 74  B))).#define put
2c570 56 61 72 69 6e 74 33 32 28 41 2c 42 29 20 20 5c  Varint32(A,B)  \
2c580 0a 20 20 28 75 38 29 28 28 28 75 33 32 29 28 42  .  (u8)(((u32)(B
2c590 29 3c 28 75 33 32 29 30 78 38 30 29 3f 28 2a 28  )<(u32)0x80)?(*(
2c5a0 41 29 3d 28 75 6e 73 69 67 6e 65 64 20 63 68 61  A)=(unsigned cha
2c5b0 72 29 28 42 29 29 2c 31 3a 5c 0a 20 20 73 71 6c  r)(B)),1:\.  sql
2c5c0 69 74 65 33 50 75 74 56 61 72 69 6e 74 28 28 41  ite3PutVarint((A
2c5d0 29 2c 28 42 29 29 29 0a 23 64 65 66 69 6e 65 20  ),(B))).#define 
2c5e0 67 65 74 56 61 72 69 6e 74 20 20 20 20 73 71 6c  getVarint    sql
2c5f0 69 74 65 33 47 65 74 56 61 72 69 6e 74 0a 23 64  ite3GetVarint.#d
2c600 65 66 69 6e 65 20 70 75 74 56 61 72 69 6e 74 20  efine putVarint 
2c610 20 20 20 73 71 6c 69 74 65 33 50 75 74 56 61 72     sqlite3PutVar
2c620 69 6e 74 0a 0a 0a 63 6f 6e 73 74 20 63 68 61 72  int...const char
2c630 20 2a 73 71 6c 69 74 65 33 49 6e 64 65 78 41 66   *sqlite3IndexAf
2c640 66 69 6e 69 74 79 53 74 72 28 73 71 6c 69 74 65  finityStr(sqlite
2c650 33 2a 2c 20 49 6e 64 65 78 2a 29 3b 0a 76 6f 69  3*, Index*);.voi
2c660 64 20 73 71 6c 69 74 65 33 54 61 62 6c 65 41 66  d sqlite3TableAf
2c670 66 69 6e 69 74 79 28 56 64 62 65 2a 2c 20 54 61  finity(Vdbe*, Ta
2c680 62 6c 65 2a 2c 20 69 6e 74 29 3b 0a 63 68 61 72  ble*, int);.char
2c690 20 73 71 6c 69 74 65 33 43 6f 6d 70 61 72 65 41   sqlite3CompareA
2c6a0 66 66 69 6e 69 74 79 28 45 78 70 72 20 2a 70 45  ffinity(Expr *pE
2c6b0 78 70 72 2c 20 63 68 61 72 20 61 66 66 32 29 3b  xpr, char aff2);
2c6c0 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 6e 64 65  .int sqlite3Inde
2c6d0 78 41 66 66 69 6e 69 74 79 4f 6b 28 45 78 70 72  xAffinityOk(Expr
2c6e0 20 2a 70 45 78 70 72 2c 20 63 68 61 72 20 69 64   *pExpr, char id
2c6f0 78 5f 61 66 66 69 6e 69 74 79 29 3b 0a 63 68 61  x_affinity);.cha
2c700 72 20 73 71 6c 69 74 65 33 54 61 62 6c 65 43 6f  r sqlite3TableCo
2c710 6c 75 6d 6e 41 66 66 69 6e 69 74 79 28 54 61 62  lumnAffinity(Tab
2c720 6c 65 2a 2c 69 6e 74 29 3b 0a 63 68 61 72 20 73  le*,int);.char s
2c730 71 6c 69 74 65 33 45 78 70 72 41 66 66 69 6e 69  qlite3ExprAffini
2c740 74 79 28 45 78 70 72 20 2a 70 45 78 70 72 29 3b  ty(Expr *pExpr);
2c750 0a 69 6e 74 20 73 71 6c 69 74 65 33 41 74 6f 69  .int sqlite3Atoi
2c760 36 34 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  64(const char*, 
2c770 69 36 34 2a 2c 20 69 6e 74 2c 20 75 38 29 3b 0a  i64*, int, u8);.
2c780 69 6e 74 20 73 71 6c 69 74 65 33 44 65 63 4f 72  int sqlite3DecOr
2c790 48 65 78 54 6f 49 36 34 28 63 6f 6e 73 74 20 63  HexToI64(const c
2c7a0 68 61 72 2a 2c 20 69 36 34 2a 29 3b 0a 76 6f 69  har*, i64*);.voi
2c7b0 64 20 73 71 6c 69 74 65 33 45 72 72 6f 72 57 69  d sqlite3ErrorWi
2c7c0 74 68 4d 73 67 28 73 71 6c 69 74 65 33 2a 2c 20  thMsg(sqlite3*, 
2c7d0 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  int, const char*
2c7e0 2c 2e 2e 2e 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ,...);.void sqli
2c7f0 74 65 33 45 72 72 6f 72 28 73 71 6c 69 74 65 33  te3Error(sqlite3
2c800 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  *,int);.void sql
2c810 69 74 65 33 53 79 73 74 65 6d 45 72 72 6f 72 28  ite3SystemError(
2c820 73 71 6c 69 74 65 33 2a 2c 69 6e 74 29 3b 0a 76  sqlite3*,int);.v
2c830 6f 69 64 20 2a 73 71 6c 69 74 65 33 48 65 78 54  oid *sqlite3HexT
2c840 6f 42 6c 6f 62 28 73 71 6c 69 74 65 33 2a 2c 20  oBlob(sqlite3*, 
2c850 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 2c 20 69  const char *z, i
2c860 6e 74 20 6e 29 3b 0a 75 38 20 73 71 6c 69 74 65  nt n);.u8 sqlite
2c870 33 48 65 78 54 6f 49 6e 74 28 69 6e 74 20 68 29  3HexToInt(int h)
2c880 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 54 77 6f  ;.int sqlite3Two
2c890 50 61 72 74 4e 61 6d 65 28 50 61 72 73 65 20 2a  PartName(Parse *
2c8a0 2c 20 54 6f 6b 65 6e 20 2a 2c 20 54 6f 6b 65 6e  , Token *, Token
2c8b0 20 2a 2c 20 54 6f 6b 65 6e 20 2a 2a 29 3b 0a 0a   *, Token **);..
2c8c0 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49  #if defined(SQLI
2c8d0 54 45 5f 4e 45 45 44 5f 45 52 52 5f 4e 41 4d 45  TE_NEED_ERR_NAME
2c8e0 29 0a 63 6f 6e 73 74 20 63 68 61 72 20 2a 73 71  ).const char *sq
2c8f0 6c 69 74 65 33 45 72 72 4e 61 6d 65 28 69 6e 74  lite3ErrName(int
2c900 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65  );.#endif..#ifde
2c910 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
2c920 44 45 53 45 52 49 41 4c 49 5a 45 0a 69 6e 74 20  DESERIALIZE.int 
2c930 73 71 6c 69 74 65 33 4d 65 6d 64 62 49 6e 69 74  sqlite3MemdbInit
2c940 28 76 6f 69 64 29 3b 0a 23 65 6e 64 69 66 0a 0a  (void);.#endif..
2c950 63 6f 6e 73 74 20 63 68 61 72 20 2a 73 71 6c 69  const char *sqli
2c960 74 65 33 45 72 72 53 74 72 28 69 6e 74 29 3b 0a  te3ErrStr(int);.
2c970 69 6e 74 20 73 71 6c 69 74 65 33 52 65 61 64 53  int sqlite3ReadS
2c980 63 68 65 6d 61 28 50 61 72 73 65 20 2a 70 50 61  chema(Parse *pPa
2c990 72 73 65 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73  rse);.CollSeq *s
2c9a0 71 6c 69 74 65 33 46 69 6e 64 43 6f 6c 6c 53 65  qlite3FindCollSe
2c9b0 71 28 73 71 6c 69 74 65 33 2a 2c 75 38 20 65 6e  q(sqlite3*,u8 en
2c9c0 63 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 69  c, const char*,i
2c9d0 6e 74 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73 71  nt);.CollSeq *sq
2c9e0 6c 69 74 65 33 4c 6f 63 61 74 65 43 6f 6c 6c 53  lite3LocateCollS
2c9f0 65 71 28 50 61 72 73 65 20 2a 70 50 61 72 73 65  eq(Parse *pParse
2ca00 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 7a 4e 61  , const char*zNa
2ca10 6d 65 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73 71  me);.CollSeq *sq
2ca20 6c 69 74 65 33 45 78 70 72 43 6f 6c 6c 53 65 71  lite3ExprCollSeq
2ca30 28 50 61 72 73 65 20 2a 70 50 61 72 73 65 2c 20  (Parse *pParse, 
2ca40 45 78 70 72 20 2a 70 45 78 70 72 29 3b 0a 43 6f  Expr *pExpr);.Co
2ca50 6c 6c 53 65 71 20 2a 73 71 6c 69 74 65 33 45 78  llSeq *sqlite3Ex
2ca60 70 72 4e 4e 43 6f 6c 6c 53 65 71 28 50 61 72 73  prNNCollSeq(Pars
2ca70 65 20 2a 70 50 61 72 73 65 2c 20 45 78 70 72 20  e *pParse, Expr 
2ca80 2a 70 45 78 70 72 29 3b 0a 69 6e 74 20 73 71 6c  *pExpr);.int sql
2ca90 69 74 65 33 45 78 70 72 43 6f 6c 6c 53 65 71 4d  ite3ExprCollSeqM
2caa0 61 74 63 68 28 50 61 72 73 65 2a 2c 45 78 70 72  atch(Parse*,Expr
2cab0 2a 2c 45 78 70 72 2a 29 3b 0a 45 78 70 72 20 2a  *,Expr*);.Expr *
2cac0 73 71 6c 69 74 65 33 45 78 70 72 41 64 64 43 6f  sqlite3ExprAddCo
2cad0 6c 6c 61 74 65 54 6f 6b 65 6e 28 50 61 72 73 65  llateToken(Parse
2cae0 20 2a 70 50 61 72 73 65 2c 20 45 78 70 72 2a 2c   *pParse, Expr*,
2caf0 20 63 6f 6e 73 74 20 54 6f 6b 65 6e 2a 2c 20 69   const Token*, i
2cb00 6e 74 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74  nt);.Expr *sqlit
2cb10 65 33 45 78 70 72 41 64 64 43 6f 6c 6c 61 74 65  e3ExprAddCollate
2cb20 53 74 72 69 6e 67 28 50 61 72 73 65 2a 2c 45 78  String(Parse*,Ex
2cb30 70 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29  pr*,const char*)
2cb40 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45  ;.Expr *sqlite3E
2cb50 78 70 72 53 6b 69 70 43 6f 6c 6c 61 74 65 28 45  xprSkipCollate(E
2cb60 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  xpr*);.int sqlit
2cb70 65 33 43 68 65 63 6b 43 6f 6c 6c 53 65 71 28 50  e3CheckCollSeq(P
2cb80 61 72 73 65 20 2a 2c 20 43 6f 6c 6c 53 65 71 20  arse *, CollSeq 
2cb90 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 43  *);.int sqlite3C
2cba0 68 65 63 6b 4f 62 6a 65 63 74 4e 61 6d 65 28 50  heckObjectName(P
2cbb0 61 72 73 65 20 2a 2c 20 63 6f 6e 73 74 20 63 68  arse *, const ch
2cbc0 61 72 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ar *);.void sqli
2cbd0 74 65 33 56 64 62 65 53 65 74 43 68 61 6e 67 65  te3VdbeSetChange
2cbe0 73 28 73 71 6c 69 74 65 33 20 2a 2c 20 69 6e 74  s(sqlite3 *, int
2cbf0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 41 64  );.int sqlite3Ad
2cc00 64 49 6e 74 36 34 28 69 36 34 2a 2c 69 36 34 29  dInt64(i64*,i64)
2cc10 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 75 62  ;.int sqlite3Sub
2cc20 49 6e 74 36 34 28 69 36 34 2a 2c 69 36 34 29 3b  Int64(i64*,i64);
2cc30 0a 69 6e 74 20 73 71 6c 69 74 65 33 4d 75 6c 49  .int sqlite3MulI
2cc40 6e 74 36 34 28 69 36 34 2a 2c 69 36 34 29 3b 0a  nt64(i64*,i64);.
2cc50 69 6e 74 20 73 71 6c 69 74 65 33 41 62 73 49 6e  int sqlite3AbsIn
2cc60 74 33 32 28 69 6e 74 29 3b 0a 23 69 66 64 65 66  t32(int);.#ifdef
2cc70 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 38   SQLITE_ENABLE_8
2cc80 5f 33 5f 4e 41 4d 45 53 0a 76 6f 69 64 20 73 71  _3_NAMES.void sq
2cc90 6c 69 74 65 33 46 69 6c 65 53 75 66 66 69 78 33  lite3FileSuffix3
2cca0 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 68  (const char*, ch
2ccb0 61 72 2a 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65  ar*);.#else.# de
2ccc0 66 69 6e 65 20 73 71 6c 69 74 65 33 46 69 6c 65  fine sqlite3File
2ccd0 53 75 66 66 69 78 33 28 58 2c 59 29 0a 23 65 6e  Suffix3(X,Y).#en
2cce0 64 69 66 0a 75 38 20 73 71 6c 69 74 65 33 47 65  dif.u8 sqlite3Ge
2ccf0 74 42 6f 6f 6c 65 61 6e 28 63 6f 6e 73 74 20 63  tBoolean(const c
2cd00 68 61 72 20 2a 7a 2c 75 38 29 3b 0a 0a 63 6f 6e  har *z,u8);..con
2cd10 73 74 20 76 6f 69 64 20 2a 73 71 6c 69 74 65 33  st void *sqlite3
2cd20 56 61 6c 75 65 54 65 78 74 28 73 71 6c 69 74 65  ValueText(sqlite
2cd30 33 5f 76 61 6c 75 65 2a 2c 20 75 38 29 3b 0a 69  3_value*, u8);.i
2cd40 6e 74 20 73 71 6c 69 74 65 33 56 61 6c 75 65 42  nt sqlite3ValueB
2cd50 79 74 65 73 28 73 71 6c 69 74 65 33 5f 76 61 6c  ytes(sqlite3_val
2cd60 75 65 2a 2c 20 75 38 29 3b 0a 76 6f 69 64 20 73  ue*, u8);.void s
2cd70 71 6c 69 74 65 33 56 61 6c 75 65 53 65 74 53 74  qlite3ValueSetSt
2cd80 72 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a  r(sqlite3_value*
2cd90 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20 76 6f 69  , int, const voi
2cda0 64 20 2a 2c 75 38 2c 0a 20 20 20 20 20 20 20 20  d *,u8,.        
2cdb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cdc0 76 6f 69 64 28 2a 29 28 76 6f 69 64 2a 29 29 3b  void(*)(void*));
2cdd0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 61 6c  .void sqlite3Val
2cde0 75 65 53 65 74 4e 75 6c 6c 28 73 71 6c 69 74 65  ueSetNull(sqlite
2cdf0 33 5f 76 61 6c 75 65 2a 29 3b 0a 76 6f 69 64 20  3_value*);.void 
2ce00 73 71 6c 69 74 65 33 56 61 6c 75 65 46 72 65 65  sqlite3ValueFree
2ce10 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 29  (sqlite3_value*)
2ce20 3b 0a 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20  ;.sqlite3_value 
2ce30 2a 73 71 6c 69 74 65 33 56 61 6c 75 65 4e 65 77  *sqlite3ValueNew
2ce40 28 73 71 6c 69 74 65 33 20 2a 29 3b 0a 23 69 66  (sqlite3 *);.#if
2ce50 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
2ce60 5f 55 54 46 31 36 0a 63 68 61 72 20 2a 73 71 6c  _UTF16.char *sql
2ce70 69 74 65 33 55 74 66 31 36 74 6f 38 28 73 71 6c  ite3Utf16to8(sql
2ce80 69 74 65 33 20 2a 2c 20 63 6f 6e 73 74 20 76 6f  ite3 *, const vo
2ce90 69 64 2a 2c 20 69 6e 74 2c 20 75 38 29 3b 0a 23  id*, int, u8);.#
2cea0 65 6e 64 69 66 0a 69 6e 74 20 73 71 6c 69 74 65  endif.int sqlite
2ceb0 33 56 61 6c 75 65 46 72 6f 6d 45 78 70 72 28 73  3ValueFromExpr(s
2cec0 71 6c 69 74 65 33 20 2a 2c 20 45 78 70 72 20 2a  qlite3 *, Expr *
2ced0 2c 20 75 38 2c 20 75 38 2c 20 73 71 6c 69 74 65  , u8, u8, sqlite
2cee0 33 5f 76 61 6c 75 65 20 2a 2a 29 3b 0a 76 6f 69  3_value **);.voi
2cef0 64 20 73 71 6c 69 74 65 33 56 61 6c 75 65 41 70  d sqlite3ValueAp
2cf00 70 6c 79 41 66 66 69 6e 69 74 79 28 73 71 6c 69  plyAffinity(sqli
2cf10 74 65 33 5f 76 61 6c 75 65 20 2a 2c 20 75 38 2c  te3_value *, u8,
2cf20 20 75 38 29 3b 0a 23 69 66 6e 64 65 66 20 53 51   u8);.#ifndef SQ
2cf30 4c 49 54 45 5f 41 4d 41 4c 47 41 4d 41 54 49 4f  LITE_AMALGAMATIO
2cf40 4e 0a 65 78 74 65 72 6e 20 63 6f 6e 73 74 20 75  N.extern const u
2cf50 6e 73 69 67 6e 65 64 20 63 68 61 72 20 73 71 6c  nsigned char sql
2cf60 69 74 65 33 4f 70 63 6f 64 65 50 72 6f 70 65 72  ite3OpcodeProper
2cf70 74 79 5b 5d 3b 0a 65 78 74 65 72 6e 20 63 6f 6e  ty[];.extern con
2cf80 73 74 20 63 68 61 72 20 73 71 6c 69 74 65 33 53  st char sqlite3S
2cf90 74 72 42 49 4e 41 52 59 5b 5d 3b 0a 65 78 74 65  trBINARY[];.exte
2cfa0 72 6e 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65  rn const unsigne
2cfb0 64 20 63 68 61 72 20 73 71 6c 69 74 65 33 55 70  d char sqlite3Up
2cfc0 70 65 72 54 6f 4c 6f 77 65 72 5b 5d 3b 0a 65 78  perToLower[];.ex
2cfd0 74 65 72 6e 20 63 6f 6e 73 74 20 75 6e 73 69 67  tern const unsig
2cfe0 6e 65 64 20 63 68 61 72 20 73 71 6c 69 74 65 33  ned char sqlite3
2cff0 43 74 79 70 65 4d 61 70 5b 5d 3b 0a 65 78 74 65  CtypeMap[];.exte
2d000 72 6e 20 63 6f 6e 73 74 20 54 6f 6b 65 6e 20 73  rn const Token s
2d010 71 6c 69 74 65 33 49 6e 74 54 6f 6b 65 6e 73 5b  qlite3IntTokens[
2d020 5d 3b 0a 65 78 74 65 72 6e 20 53 51 4c 49 54 45  ];.extern SQLITE
2d030 5f 57 53 44 20 73 74 72 75 63 74 20 53 71 6c 69  _WSD struct Sqli
2d040 74 65 33 43 6f 6e 66 69 67 20 73 71 6c 69 74 65  te3Config sqlite
2d050 33 43 6f 6e 66 69 67 3b 0a 65 78 74 65 72 6e 20  3Config;.extern 
2d060 46 75 6e 63 44 65 66 48 61 73 68 20 73 71 6c 69  FuncDefHash sqli
2d070 74 65 33 42 75 69 6c 74 69 6e 46 75 6e 63 74 69  te3BuiltinFuncti
2d080 6f 6e 73 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c  ons;.#ifndef SQL
2d090 49 54 45 5f 4f 4d 49 54 5f 57 53 44 0a 65 78 74  ITE_OMIT_WSD.ext
2d0a0 65 72 6e 20 69 6e 74 20 73 71 6c 69 74 65 33 50  ern int sqlite3P
2d0b0 65 6e 64 69 6e 67 42 79 74 65 3b 0a 23 65 6e 64  endingByte;.#end
2d0c0 69 66 0a 23 65 6e 64 69 66 0a 23 69 66 64 65 66  if.#endif.#ifdef
2d0d0 20 56 44 42 45 5f 50 52 4f 46 49 4c 45 0a 65 78   VDBE_PROFILE.ex
2d0e0 74 65 72 6e 20 73 71 6c 69 74 65 33 5f 75 69 6e  tern sqlite3_uin
2d0f0 74 36 34 20 73 71 6c 69 74 65 33 4e 50 72 6f 66  t64 sqlite3NProf
2d100 69 6c 65 43 6e 74 3b 0a 23 65 6e 64 69 66 0a 76  ileCnt;.#endif.v
2d110 6f 69 64 20 73 71 6c 69 74 65 33 52 6f 6f 74 50  oid sqlite3RootP
2d120 61 67 65 4d 6f 76 65 64 28 73 71 6c 69 74 65 33  ageMoved(sqlite3
2d130 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74  *, int, int, int
2d140 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52  );.void sqlite3R
2d150 65 69 6e 64 65 78 28 50 61 72 73 65 2a 2c 20 54  eindex(Parse*, T
2d160 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a  oken*, Token*);.
2d170 76 6f 69 64 20 73 71 6c 69 74 65 33 41 6c 74 65  void sqlite3Alte
2d180 72 46 75 6e 63 74 69 6f 6e 73 28 76 6f 69 64 29  rFunctions(void)
2d190 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 6c  ;.void sqlite3Al
2d1a0 74 65 72 52 65 6e 61 6d 65 54 61 62 6c 65 28 50  terRenameTable(P
2d1b0 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c  arse*, SrcList*,
2d1c0 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71   Token*);.int sq
2d1d0 6c 69 74 65 33 47 65 74 54 6f 6b 65 6e 28 63 6f  lite3GetToken(co
2d1e0 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61  nst unsigned cha
2d1f0 72 20 2a 2c 20 69 6e 74 20 2a 29 3b 0a 76 6f 69  r *, int *);.voi
2d200 64 20 73 71 6c 69 74 65 33 4e 65 73 74 65 64 50  d sqlite3NestedP
2d210 61 72 73 65 28 50 61 72 73 65 2a 2c 20 63 6f 6e  arse(Parse*, con
2d220 73 74 20 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a  st char*, ...);.
2d230 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 69  void sqlite3Expi
2d240 72 65 50 72 65 70 61 72 65 64 53 74 61 74 65 6d  rePreparedStatem
2d250 65 6e 74 73 28 73 71 6c 69 74 65 33 2a 29 3b 0a  ents(sqlite3*);.
2d260 69 6e 74 20 73 71 6c 69 74 65 33 43 6f 64 65 53  int sqlite3CodeS
2d270 75 62 73 65 6c 65 63 74 28 50 61 72 73 65 2a 2c  ubselect(Parse*,
2d280 20 45 78 70 72 20 2a 2c 20 69 6e 74 2c 20 69 6e   Expr *, int, in
2d290 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
2d2a0 53 65 6c 65 63 74 50 72 65 70 28 50 61 72 73 65  SelectPrep(Parse
2d2b0 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 4e 61 6d 65  *, Select*, Name
2d2c0 43 6f 6e 74 65 78 74 2a 29 3b 0a 76 6f 69 64 20  Context*);.void 
2d2d0 73 71 6c 69 74 65 33 53 65 6c 65 63 74 57 72 6f  sqlite3SelectWro
2d2e0 6e 67 4e 75 6d 54 65 72 6d 73 45 72 72 6f 72 28  ngNumTermsError(
2d2f0 50 61 72 73 65 20 2a 70 50 61 72 73 65 2c 20 53  Parse *pParse, S
2d300 65 6c 65 63 74 20 2a 70 29 3b 0a 69 6e 74 20 73  elect *p);.int s
2d310 71 6c 69 74 65 33 4d 61 74 63 68 53 70 61 6e 4e  qlite3MatchSpanN
2d320 61 6d 65 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c  ame(const char*,
2d330 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f   const char*, co
2d340 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74  nst char*, const
2d350 20 63 68 61 72 2a 29 3b 0a 69 6e 74 20 73 71 6c   char*);.int sql
2d360 69 74 65 33 52 65 73 6f 6c 76 65 45 78 70 72 4e  ite3ResolveExprN
2d370 61 6d 65 73 28 4e 61 6d 65 43 6f 6e 74 65 78 74  ames(NameContext
2d380 2a 2c 20 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73  *, Expr*);.int s
2d390 71 6c 69 74 65 33 52 65 73 6f 6c 76 65 45 78 70  qlite3ResolveExp
2d3a0 72 4c 69 73 74 4e 61 6d 65 73 28 4e 61 6d 65 43  rListNames(NameC
2d3b0 6f 6e 74 65 78 74 2a 2c 20 45 78 70 72 4c 69 73  ontext*, ExprLis
2d3c0 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  t*);.void sqlite
2d3d0 33 52 65 73 6f 6c 76 65 53 65 6c 65 63 74 4e 61  3ResolveSelectNa
2d3e0 6d 65 73 28 50 61 72 73 65 2a 2c 20 53 65 6c 65  mes(Parse*, Sele
2d3f0 63 74 2a 2c 20 4e 61 6d 65 43 6f 6e 74 65 78 74  ct*, NameContext
2d400 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
2d410 52 65 73 6f 6c 76 65 53 65 6c 66 52 65 66 65 72  ResolveSelfRefer
2d420 65 6e 63 65 28 50 61 72 73 65 2a 2c 54 61 62 6c  ence(Parse*,Tabl
2d430 65 2a 2c 69 6e 74 2c 45 78 70 72 2a 2c 45 78 70  e*,int,Expr*,Exp
2d440 72 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c  rList*);.int sql
2d450 69 74 65 33 52 65 73 6f 6c 76 65 4f 72 64 65 72  ite3ResolveOrder
2d460 47 72 6f 75 70 42 79 28 50 61 72 73 65 2a 2c 20  GroupBy(Parse*, 
2d470 53 65 6c 65 63 74 2a 2c 20 45 78 70 72 4c 69 73  Select*, ExprLis
2d480 74 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29  t*, const char*)
2d490 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f  ;.void sqlite3Co
2d4a0 6c 75 6d 6e 44 65 66 61 75 6c 74 28 56 64 62 65  lumnDefault(Vdbe
2d4b0 20 2a 2c 20 54 61 62 6c 65 20 2a 2c 20 69 6e 74   *, Table *, int
2d4c0 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
2d4d0 69 74 65 33 41 6c 74 65 72 46 69 6e 69 73 68 41  ite3AlterFinishA
2d4e0 64 64 43 6f 6c 75 6d 6e 28 50 61 72 73 65 20 2a  ddColumn(Parse *
2d4f0 2c 20 54 6f 6b 65 6e 20 2a 29 3b 0a 76 6f 69 64  , Token *);.void
2d500 20 73 71 6c 69 74 65 33 41 6c 74 65 72 42 65 67   sqlite3AlterBeg
2d510 69 6e 41 64 64 43 6f 6c 75 6d 6e 28 50 61 72 73  inAddColumn(Pars
2d520 65 20 2a 2c 20 53 72 63 4c 69 73 74 20 2a 29 3b  e *, SrcList *);
2d530 0a 43 6f 6c 6c 53 65 71 20 2a 73 71 6c 69 74 65  .CollSeq *sqlite
2d540 33 47 65 74 43 6f 6c 6c 53 65 71 28 50 61 72 73  3GetCollSeq(Pars
2d550 65 2a 2c 20 75 38 2c 20 43 6f 6c 6c 53 65 71 20  e*, u8, CollSeq 
2d560 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  *, const char*);
2d570 0a 63 68 61 72 20 73 71 6c 69 74 65 33 41 66 66  .char sqlite3Aff
2d580 69 6e 69 74 79 54 79 70 65 28 63 6f 6e 73 74 20  inityType(const 
2d590 63 68 61 72 2a 2c 20 43 6f 6c 75 6d 6e 2a 29 3b  char*, Column*);
2d5a0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 6e 61  .void sqlite3Ana
2d5b0 6c 79 7a 65 28 50 61 72 73 65 2a 2c 20 54 6f 6b  lyze(Parse*, Tok
2d5c0 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e  en*, Token*);.in
2d5d0 74 20 73 71 6c 69 74 65 33 49 6e 76 6f 6b 65 42  t sqlite3InvokeB
2d5e0 75 73 79 48 61 6e 64 6c 65 72 28 42 75 73 79 48  usyHandler(BusyH
2d5f0 61 6e 64 6c 65 72 2a 2c 20 73 71 6c 69 74 65 33  andler*, sqlite3
2d600 5f 66 69 6c 65 2a 29 3b 0a 69 6e 74 20 73 71 6c  _file*);.int sql
2d610 69 74 65 33 46 69 6e 64 44 62 28 73 71 6c 69 74  ite3FindDb(sqlit
2d620 65 33 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e  e3*, Token*);.in
2d630 74 20 73 71 6c 69 74 65 33 46 69 6e 64 44 62 4e  t sqlite3FindDbN
2d640 61 6d 65 28 73 71 6c 69 74 65 33 20 2a 2c 20 63  ame(sqlite3 *, c
2d650 6f 6e 73 74 20 63 68 61 72 20 2a 29 3b 0a 69 6e  onst char *);.in
2d660 74 20 73 71 6c 69 74 65 33 41 6e 61 6c 79 73 69  t sqlite3Analysi
2d670 73 4c 6f 61 64 28 73 71 6c 69 74 65 33 2a 2c 69  sLoad(sqlite3*,i
2d680 6e 74 20 69 44 42 29 3b 0a 76 6f 69 64 20 73 71  nt iDB);.void sq
2d690 6c 69 74 65 33 44 65 6c 65 74 65 49 6e 64 65 78  lite3DeleteIndex
2d6a0 53 61 6d 70 6c 65 73 28 73 71 6c 69 74 65 33 2a  Samples(sqlite3*
2d6b0 2c 49 6e 64 65 78 2a 29 3b 0a 76 6f 69 64 20 73  ,Index*);.void s
2d6c0 71 6c 69 74 65 33 44 65 66 61 75 6c 74 52 6f 77  qlite3DefaultRow
2d6d0 45 73 74 28 49 6e 64 65 78 2a 29 3b 0a 76 6f 69  Est(Index*);.voi
2d6e0 64 20 73 71 6c 69 74 65 33 52 65 67 69 73 74 65  d sqlite3Registe
2d6f0 72 4c 69 6b 65 46 75 6e 63 74 69 6f 6e 73 28 73  rLikeFunctions(s
2d700 71 6c 69 74 65 33 2a 2c 20 69 6e 74 29 3b 0a 69  qlite3*, int);.i
2d710 6e 74 20 73 71 6c 69 74 65 33 49 73 4c 69 6b 65  nt sqlite3IsLike
2d720 46 75 6e 63 74 69 6f 6e 28 73 71 6c 69 74 65 33  Function(sqlite3
2d730 2a 2c 45 78 70 72 2a 2c 69 6e 74 2a 2c 63 68 61  *,Expr*,int*,cha
2d740 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  r*);.void sqlite
2d750 33 53 63 68 65 6d 61 43 6c 65 61 72 28 76 6f 69  3SchemaClear(voi
2d760 64 20 2a 29 3b 0a 53 63 68 65 6d 61 20 2a 73 71  d *);.Schema *sq
2d770 6c 69 74 65 33 53 63 68 65 6d 61 47 65 74 28 73  lite3SchemaGet(s
2d780 71 6c 69 74 65 33 20 2a 2c 20 42 74 72 65 65 20  qlite3 *, Btree 
2d790 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53  *);.int sqlite3S
2d7a0 63 68 65 6d 61 54 6f 49 6e 64 65 78 28 73 71 6c  chemaToIndex(sql
2d7b0 69 74 65 33 20 2a 64 62 2c 20 53 63 68 65 6d 61  ite3 *db, Schema
2d7c0 20 2a 29 3b 0a 4b 65 79 49 6e 66 6f 20 2a 73 71   *);.KeyInfo *sq
2d7d0 6c 69 74 65 33 4b 65 79 49 6e 66 6f 41 6c 6c 6f  lite3KeyInfoAllo
2d7e0 63 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 69  c(sqlite3*,int,i
2d7f0 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
2d800 33 4b 65 79 49 6e 66 6f 55 6e 72 65 66 28 4b 65  3KeyInfoUnref(Ke
2d810 79 49 6e 66 6f 2a 29 3b 0a 4b 65 79 49 6e 66 6f  yInfo*);.KeyInfo
2d820 20 2a 73 71 6c 69 74 65 33 4b 65 79 49 6e 66 6f   *sqlite3KeyInfo
2d830 52 65 66 28 4b 65 79 49 6e 66 6f 2a 29 3b 0a 4b  Ref(KeyInfo*);.K
2d840 65 79 49 6e 66 6f 20 2a 73 71 6c 69 74 65 33 4b  eyInfo *sqlite3K
2d850 65 79 49 6e 66 6f 4f 66 49 6e 64 65 78 28 50 61  eyInfoOfIndex(Pa
2d860 72 73 65 2a 2c 20 49 6e 64 65 78 2a 29 3b 0a 4b  rse*, Index*);.K
2d870 65 79 49 6e 66 6f 20 2a 73 71 6c 69 74 65 33 4b  eyInfo *sqlite3K
2d880 65 79 49 6e 66 6f 46 72 6f 6d 45 78 70 72 4c 69  eyInfoFromExprLi
2d890 73 74 28 50 61 72 73 65 2a 2c 20 45 78 70 72 4c  st(Parse*, ExprL
2d8a0 69 73 74 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b  ist*, int, int);
2d8b0 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ..#ifdef SQLITE_
2d8c0 44 45 42 55 47 0a 69 6e 74 20 73 71 6c 69 74 65  DEBUG.int sqlite
2d8d0 33 4b 65 79 49 6e 66 6f 49 73 57 72 69 74 65 61  3KeyInfoIsWritea
2d8e0 62 6c 65 28 4b 65 79 49 6e 66 6f 2a 29 3b 0a 23  ble(KeyInfo*);.#
2d8f0 65 6e 64 69 66 0a 69 6e 74 20 73 71 6c 69 74 65  endif.int sqlite
2d900 33 43 72 65 61 74 65 46 75 6e 63 28 73 71 6c 69  3CreateFunc(sqli
2d910 74 65 33 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61  te3 *, const cha
2d920 72 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 76  r *, int, int, v
2d930 6f 69 64 20 2a 2c 0a 20 20 76 6f 69 64 20 28 2a  oid *,.  void (*
2d940 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78  )(sqlite3_contex
2d950 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76  t*,int,sqlite3_v
2d960 61 6c 75 65 20 2a 2a 29 2c 0a 20 20 76 6f 69 64  alue **),.  void
2d970 20 28 2a 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e   (*)(sqlite3_con
2d980 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65  text*,int,sqlite
2d990 33 5f 76 61 6c 75 65 20 2a 2a 29 2c 20 0a 20 20  3_value **), .  
2d9a0 76 6f 69 64 20 28 2a 29 28 73 71 6c 69 74 65 33  void (*)(sqlite3
2d9b0 5f 63 6f 6e 74 65 78 74 2a 29 2c 0a 20 20 76 6f  _context*),.  vo
2d9c0 69 64 20 28 2a 29 28 73 71 6c 69 74 65 33 5f 63  id (*)(sqlite3_c
2d9d0 6f 6e 74 65 78 74 2a 29 2c 0a 20 20 76 6f 69 64  ontext*),.  void
2d9e0 20 28 2a 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e   (*)(sqlite3_con
2d9f0 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65  text*,int,sqlite
2da00 33 5f 76 61 6c 75 65 20 2a 2a 29 2c 20 0a 20 20  3_value **), .  
2da10 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72 20 2a  FuncDestructor *
2da20 70 44 65 73 74 72 75 63 74 6f 72 0a 29 3b 0a 76  pDestructor.);.v
2da30 6f 69 64 20 73 71 6c 69 74 65 33 4e 6f 6f 70 44  oid sqlite3NoopD
2da40 65 73 74 72 75 63 74 6f 72 28 76 6f 69 64 2a 29  estructor(void*)
2da50 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4f 6f  ;.void sqlite3Oo
2da60 6d 46 61 75 6c 74 28 73 71 6c 69 74 65 33 2a 29  mFault(sqlite3*)
2da70 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4f 6f  ;.void sqlite3Oo
2da80 6d 43 6c 65 61 72 28 73 71 6c 69 74 65 33 2a 29  mClear(sqlite3*)
2da90 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 41 70 69  ;.int sqlite3Api
2daa0 45 78 69 74 28 73 71 6c 69 74 65 33 20 2a 64 62  Exit(sqlite3 *db
2dab0 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69  , int);.int sqli
2dac0 74 65 33 4f 70 65 6e 54 65 6d 70 44 61 74 61 62  te3OpenTempDatab
2dad0 61 73 65 28 50 61 72 73 65 20 2a 29 3b 0a 0a 76  ase(Parse *);..v
2dae0 6f 69 64 20 73 71 6c 69 74 65 33 53 74 72 41 63  oid sqlite3StrAc
2daf0 63 75 6d 49 6e 69 74 28 53 74 72 41 63 63 75 6d  cumInit(StrAccum
2db00 2a 2c 20 73 71 6c 69 74 65 33 2a 2c 20 63 68 61  *, sqlite3*, cha
2db10 72 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 63  r*, int, int);.c
2db20 68 61 72 20 2a 73 71 6c 69 74 65 33 53 74 72 41  har *sqlite3StrA
2db30 63 63 75 6d 46 69 6e 69 73 68 28 53 74 72 41 63  ccumFinish(StrAc
2db40 63 75 6d 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  cum*);.void sqli
2db50 74 65 33 53 65 6c 65 63 74 44 65 73 74 49 6e 69  te3SelectDestIni
2db60 74 28 53 65 6c 65 63 74 44 65 73 74 2a 2c 69 6e  t(SelectDest*,in
2db70 74 2c 69 6e 74 29 3b 0a 45 78 70 72 20 2a 73 71  t,int);.Expr *sq
2db80 6c 69 74 65 33 43 72 65 61 74 65 43 6f 6c 75 6d  lite3CreateColum
2db90 6e 45 78 70 72 28 73 71 6c 69 74 65 33 20 2a 2c  nExpr(sqlite3 *,
2dba0 20 53 72 63 4c 69 73 74 20 2a 2c 20 69 6e 74 2c   SrcList *, int,
2dbb0 20 69 6e 74 29 3b 0a 0a 76 6f 69 64 20 73 71 6c   int);..void sql
2dbc0 69 74 65 33 42 61 63 6b 75 70 52 65 73 74 61 72  ite3BackupRestar
2dbd0 74 28 73 71 6c 69 74 65 33 5f 62 61 63 6b 75 70  t(sqlite3_backup
2dbe0 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65   *);.void sqlite
2dbf0 33 42 61 63 6b 75 70 55 70 64 61 74 65 28 73 71  3BackupUpdate(sq
2dc00 6c 69 74 65 33 5f 62 61 63 6b 75 70 20 2a 2c 20  lite3_backup *, 
2dc10 50 67 6e 6f 2c 20 63 6f 6e 73 74 20 75 38 20 2a  Pgno, const u8 *
2dc20 29 3b 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  );..#ifndef SQLI
2dc30 54 45 5f 4f 4d 49 54 5f 53 55 42 51 55 45 52 59  TE_OMIT_SUBQUERY
2dc40 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72  .int sqlite3Expr
2dc50 43 68 65 63 6b 49 4e 28 50 61 72 73 65 2a 2c 20  CheckIN(Parse*, 
2dc60 45 78 70 72 2a 29 3b 0a 23 65 6c 73 65 0a 23 20  Expr*);.#else.# 
2dc70 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 45 78  define sqlite3Ex
2dc80 70 72 43 68 65 63 6b 49 4e 28 78 2c 79 29 20 53  prCheckIN(x,y) S
2dc90 51 4c 49 54 45 5f 4f 4b 0a 23 65 6e 64 69 66 0a  QLITE_OK.#endif.
2dca0 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45  .#ifdef SQLITE_E
2dcb0 4e 41 42 4c 45 5f 53 54 41 54 33 5f 4f 52 5f 53  NABLE_STAT3_OR_S
2dcc0 54 41 54 34 0a 76 6f 69 64 20 73 71 6c 69 74 65  TAT4.void sqlite
2dcd0 33 41 6e 61 6c 79 7a 65 46 75 6e 63 74 69 6f 6e  3AnalyzeFunction
2dce0 73 28 76 6f 69 64 29 3b 0a 69 6e 74 20 73 71 6c  s(void);.int sql
2dcf0 69 74 65 33 53 74 61 74 34 50 72 6f 62 65 53 65  ite3Stat4ProbeSe
2dd00 74 56 61 6c 75 65 28 0a 20 20 20 20 50 61 72 73  tValue(.    Pars
2dd10 65 2a 2c 49 6e 64 65 78 2a 2c 55 6e 70 61 63 6b  e*,Index*,Unpack
2dd20 65 64 52 65 63 6f 72 64 2a 2a 2c 45 78 70 72 2a  edRecord**,Expr*
2dd30 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 2a 29 3b 0a  ,int,int,int*);.
2dd40 69 6e 74 20 73 71 6c 69 74 65 33 53 74 61 74 34  int sqlite3Stat4
2dd50 56 61 6c 75 65 46 72 6f 6d 45 78 70 72 28 50 61  ValueFromExpr(Pa
2dd60 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 75 38 2c  rse*, Expr*, u8,
2dd70 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2a   sqlite3_value**
2dd80 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53  );.void sqlite3S
2dd90 74 61 74 34 50 72 6f 62 65 46 72 65 65 28 55 6e  tat4ProbeFree(Un
2dda0 70 61 63 6b 65 64 52 65 63 6f 72 64 2a 29 3b 0a  packedRecord*);.
2ddb0 69 6e 74 20 73 71 6c 69 74 65 33 53 74 61 74 34  int sqlite3Stat4
2ddc0 43 6f 6c 75 6d 6e 28 73 71 6c 69 74 65 33 2a 2c  Column(sqlite3*,
2ddd0 20 63 6f 6e 73 74 20 76 6f 69 64 2a 2c 20 69 6e   const void*, in
2dde0 74 2c 20 69 6e 74 2c 20 73 71 6c 69 74 65 33 5f  t, int, sqlite3_
2ddf0 76 61 6c 75 65 2a 2a 29 3b 0a 63 68 61 72 20 73  value**);.char s
2de00 71 6c 69 74 65 33 49 6e 64 65 78 43 6f 6c 75 6d  qlite3IndexColum
2de10 6e 41 66 66 69 6e 69 74 79 28 73 71 6c 69 74 65  nAffinity(sqlite
2de20 33 2a 2c 20 49 6e 64 65 78 2a 2c 20 69 6e 74 29  3*, Index*, int)
2de30 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  ;.#endif../*.** 
2de40 54 68 65 20 69 6e 74 65 72 66 61 63 65 20 74 6f  The interface to
2de50 20 74 68 65 20 4c 45 4d 4f 4e 2d 67 65 6e 65 72   the LEMON-gener
2de60 61 74 65 64 20 70 61 72 73 65 72 0a 2a 2f 0a 23  ated parser.*/.#
2de70 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 41 4d  ifndef SQLITE_AM
2de80 41 4c 47 41 4d 41 54 49 4f 4e 0a 20 20 76 6f 69  ALGAMATION.  voi
2de90 64 20 2a 73 71 6c 69 74 65 33 50 61 72 73 65 72  d *sqlite3Parser
2dea0 41 6c 6c 6f 63 28 76 6f 69 64 2a 28 2a 29 28 75  Alloc(void*(*)(u
2deb0 36 34 29 2c 20 50 61 72 73 65 2a 29 3b 0a 20 20  64), Parse*);.  
2dec0 76 6f 69 64 20 73 71 6c 69 74 65 33 50 61 72 73  void sqlite3Pars
2ded0 65 72 46 72 65 65 28 76 6f 69 64 2a 2c 20 76 6f  erFree(void*, vo
2dee0 69 64 28 2a 29 28 76 6f 69 64 2a 29 29 3b 0a 23  id(*)(void*));.#
2def0 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74  endif.void sqlit
2df00 65 33 50 61 72 73 65 72 28 76 6f 69 64 2a 2c 20  e3Parser(void*, 
2df10 69 6e 74 2c 20 54 6f 6b 65 6e 29 3b 0a 69 6e 74  int, Token);.int
2df20 20 73 71 6c 69 74 65 33 50 61 72 73 65 72 46 61   sqlite3ParserFa
2df30 6c 6c 62 61 63 6b 28 69 6e 74 29 3b 0a 23 69 66  llback(int);.#if
2df40 64 65 66 20 59 59 54 52 41 43 4b 4d 41 58 53 54  def YYTRACKMAXST
2df50 41 43 4b 44 45 50 54 48 0a 20 20 69 6e 74 20 73  ACKDEPTH.  int s
2df60 71 6c 69 74 65 33 50 61 72 73 65 72 53 74 61 63  qlite3ParserStac
2df70 6b 50 65 61 6b 28 76 6f 69 64 2a 29 3b 0a 23 65  kPeak(void*);.#e
2df80 6e 64 69 66 0a 0a 76 6f 69 64 20 73 71 6c 69 74  ndif..void sqlit
2df90 65 33 41 75 74 6f 4c 6f 61 64 45 78 74 65 6e 73  e3AutoLoadExtens
2dfa0 69 6f 6e 73 28 73 71 6c 69 74 65 33 2a 29 3b 0a  ions(sqlite3*);.
2dfb0 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
2dfc0 4d 49 54 5f 4c 4f 41 44 5f 45 58 54 45 4e 53 49  MIT_LOAD_EXTENSI
2dfd0 4f 4e 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  ON.  void sqlite
2dfe0 33 43 6c 6f 73 65 45 78 74 65 6e 73 69 6f 6e 73  3CloseExtensions
2dff0 28 73 71 6c 69 74 65 33 2a 29 3b 0a 23 65 6c 73  (sqlite3*);.#els
2e000 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  e.# define sqlit
2e010 65 33 43 6c 6f 73 65 45 78 74 65 6e 73 69 6f 6e  e3CloseExtension
2e020 73 28 58 29 0a 23 65 6e 64 69 66 0a 0a 23 69 66  s(X).#endif..#if
2e030 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
2e040 5f 53 48 41 52 45 44 5f 43 41 43 48 45 0a 20 20  _SHARED_CACHE.  
2e050 76 6f 69 64 20 73 71 6c 69 74 65 33 54 61 62 6c  void sqlite3Tabl
2e060 65 4c 6f 63 6b 28 50 61 72 73 65 20 2a 2c 20 69  eLock(Parse *, i
2e070 6e 74 2c 20 69 6e 74 2c 20 75 38 2c 20 63 6f 6e  nt, int, u8, con
2e080 73 74 20 63 68 61 72 20 2a 29 3b 0a 23 65 6c 73  st char *);.#els
2e090 65 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69  e.  #define sqli
2e0a0 74 65 33 54 61 62 6c 65 4c 6f 63 6b 28 76 2c 77  te3TableLock(v,w
2e0b0 2c 78 2c 79 2c 7a 29 0a 23 65 6e 64 69 66 0a 0a  ,x,y,z).#endif..
2e0c0 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 54 45  #ifdef SQLITE_TE
2e0d0 53 54 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33  ST.  int sqlite3
2e0e0 55 74 66 38 54 6f 38 28 75 6e 73 69 67 6e 65 64  Utf8To8(unsigned
2e0f0 20 63 68 61 72 2a 29 3b 0a 23 65 6e 64 69 66 0a   char*);.#endif.
2e100 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f  .#ifdef SQLITE_O
2e110 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
2e120 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74  .#  define sqlit
2e130 65 33 56 74 61 62 43 6c 65 61 72 28 59 29 0a 23  e3VtabClear(Y).#
2e140 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33    define sqlite3
2e150 56 74 61 62 53 79 6e 63 28 58 2c 59 29 20 53 51  VtabSync(X,Y) SQ
2e160 4c 49 54 45 5f 4f 4b 0a 23 20 20 64 65 66 69 6e  LITE_OK.#  defin
2e170 65 20 73 71 6c 69 74 65 33 56 74 61 62 52 6f 6c  e sqlite3VtabRol
2e180 6c 62 61 63 6b 28 58 29 0a 23 20 20 64 65 66 69  lback(X).#  defi
2e190 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62 43 6f  ne sqlite3VtabCo
2e1a0 6d 6d 69 74 28 58 29 0a 23 20 20 64 65 66 69 6e  mmit(X).#  defin
2e1b0 65 20 73 71 6c 69 74 65 33 56 74 61 62 49 6e 53  e sqlite3VtabInS
2e1c0 79 6e 63 28 64 62 29 20 30 0a 23 20 20 64 65 66  ync(db) 0.#  def
2e1d0 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62 4c  ine sqlite3VtabL
2e1e0 6f 63 6b 28 58 29 0a 23 20 20 64 65 66 69 6e 65  ock(X).#  define
2e1f0 20 73 71 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f   sqlite3VtabUnlo
2e200 63 6b 28 58 29 0a 23 20 20 64 65 66 69 6e 65 20  ck(X).#  define 
2e210 73 71 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f 63  sqlite3VtabUnloc
2e220 6b 4c 69 73 74 28 58 29 0a 23 20 20 64 65 66 69  kList(X).#  defi
2e230 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62 53 61  ne sqlite3VtabSa
2e240 76 65 70 6f 69 6e 74 28 58 2c 20 59 2c 20 5a 29  vepoint(X, Y, Z)
2e250 20 53 51 4c 49 54 45 5f 4f 4b 0a 23 20 20 64 65   SQLITE_OK.#  de
2e260 66 69 6e 65 20 73 71 6c 69 74 65 33 47 65 74 56  fine sqlite3GetV
2e270 54 61 62 6c 65 28 58 2c 59 29 20 20 28 28 56 54  Table(X,Y)  ((VT
2e280 61 62 6c 65 2a 29 30 29 0a 23 65 6c 73 65 0a 20  able*)0).#else. 
2e290 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74    void sqlite3Vt
2e2a0 61 62 43 6c 65 61 72 28 73 71 6c 69 74 65 33 20  abClear(sqlite3 
2e2b0 2a 64 62 2c 20 54 61 62 6c 65 2a 29 3b 0a 20 20  *db, Table*);.  
2e2c0 20 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61   void sqlite3Vta
2e2d0 62 44 69 73 63 6f 6e 6e 65 63 74 28 73 71 6c 69  bDisconnect(sqli
2e2e0 74 65 33 20 2a 64 62 2c 20 54 61 62 6c 65 20 2a  te3 *db, Table *
2e2f0 70 29 3b 0a 20 20 20 69 6e 74 20 73 71 6c 69 74  p);.   int sqlit
2e300 65 33 56 74 61 62 53 79 6e 63 28 73 71 6c 69 74  e3VtabSync(sqlit
2e310 65 33 20 2a 64 62 2c 20 56 64 62 65 2a 29 3b 0a  e3 *db, Vdbe*);.
2e320 20 20 20 69 6e 74 20 73 71 6c 69 74 65 33 56 74     int sqlite3Vt
2e330 61 62 52 6f 6c 6c 62 61 63 6b 28 73 71 6c 69 74  abRollback(sqlit
2e340 65 33 20 2a 64 62 29 3b 0a 20 20 20 69 6e 74 20  e3 *db);.   int 
2e350 73 71 6c 69 74 65 33 56 74 61 62 43 6f 6d 6d 69  sqlite3VtabCommi
2e360 74 28 73 71 6c 69 74 65 33 20 2a 64 62 29 3b 0a  t(sqlite3 *db);.
2e370 20 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 56     void sqlite3V
2e380 74 61 62 4c 6f 63 6b 28 56 54 61 62 6c 65 20 2a  tabLock(VTable *
2e390 29 3b 0a 20 20 20 76 6f 69 64 20 73 71 6c 69 74  );.   void sqlit
2e3a0 65 33 56 74 61 62 55 6e 6c 6f 63 6b 28 56 54 61  e3VtabUnlock(VTa
2e3b0 62 6c 65 20 2a 29 3b 0a 20 20 20 76 6f 69 64 20  ble *);.   void 
2e3c0 73 71 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f 63  sqlite3VtabUnloc
2e3d0 6b 4c 69 73 74 28 73 71 6c 69 74 65 33 2a 29 3b  kList(sqlite3*);
2e3e0 0a 20 20 20 69 6e 74 20 73 71 6c 69 74 65 33 56  .   int sqlite3V
2e3f0 74 61 62 53 61 76 65 70 6f 69 6e 74 28 73 71 6c  tabSavepoint(sql
2e400 69 74 65 33 20 2a 2c 20 69 6e 74 2c 20 69 6e 74  ite3 *, int, int
2e410 29 3b 0a 20 20 20 76 6f 69 64 20 73 71 6c 69 74  );.   void sqlit
2e420 65 33 56 74 61 62 49 6d 70 6f 72 74 45 72 72 6d  e3VtabImportErrm
2e430 73 67 28 56 64 62 65 2a 2c 20 73 71 6c 69 74 65  sg(Vdbe*, sqlite
2e440 33 5f 76 74 61 62 2a 29 3b 0a 20 20 20 56 54 61  3_vtab*);.   VTa
2e450 62 6c 65 20 2a 73 71 6c 69 74 65 33 47 65 74 56  ble *sqlite3GetV
2e460 54 61 62 6c 65 28 73 71 6c 69 74 65 33 2a 2c 20  Table(sqlite3*, 
2e470 54 61 62 6c 65 2a 29 3b 0a 20 20 20 4d 6f 64 75  Table*);.   Modu
2e480 6c 65 20 2a 73 71 6c 69 74 65 33 56 74 61 62 43  le *sqlite3VtabC
2e490 72 65 61 74 65 4d 6f 64 75 6c 65 28 0a 20 20 20  reateModule(.   
2e4a0 20 20 73 71 6c 69 74 65 33 2a 2c 0a 20 20 20 20    sqlite3*,.    
2e4b0 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 0a 20 20   const char*,.  
2e4c0 20 20 20 63 6f 6e 73 74 20 73 71 6c 69 74 65 33     const sqlite3
2e4d0 5f 6d 6f 64 75 6c 65 2a 2c 0a 20 20 20 20 20 76  _module*,.     v
2e4e0 6f 69 64 2a 2c 0a 20 20 20 20 20 76 6f 69 64 28  oid*,.     void(
2e4f0 2a 29 28 76 6f 69 64 2a 29 0a 20 20 20 29 3b 0a  *)(void*).   );.
2e500 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  #  define sqlite
2e510 33 56 74 61 62 49 6e 53 79 6e 63 28 64 62 29 20  3VtabInSync(db) 
2e520 28 28 64 62 29 2d 3e 6e 56 54 72 61 6e 73 3e 30  ((db)->nVTrans>0
2e530 20 26 26 20 28 64 62 29 2d 3e 61 56 54 72 61 6e   && (db)->aVTran
2e540 73 3d 3d 30 29 0a 23 65 6e 64 69 66 0a 69 6e 74  s==0).#endif.int
2e550 20 73 71 6c 69 74 65 33 56 74 61 62 45 70 6f 6e   sqlite3VtabEpon
2e560 79 6d 6f 75 73 54 61 62 6c 65 49 6e 69 74 28 50  ymousTableInit(P
2e570 61 72 73 65 2a 2c 4d 6f 64 75 6c 65 2a 29 3b 0a  arse*,Module*);.
2e580 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62  void sqlite3Vtab
2e590 45 70 6f 6e 79 6d 6f 75 73 54 61 62 6c 65 43 6c  EponymousTableCl
2e5a0 65 61 72 28 73 71 6c 69 74 65 33 2a 2c 4d 6f 64  ear(sqlite3*,Mod
2e5b0 75 6c 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ule*);.void sqli
2e5c0 74 65 33 56 74 61 62 4d 61 6b 65 57 72 69 74 61  te3VtabMakeWrita
2e5d0 62 6c 65 28 50 61 72 73 65 2a 2c 54 61 62 6c 65  ble(Parse*,Table
2e5e0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
2e5f0 56 74 61 62 42 65 67 69 6e 50 61 72 73 65 28 50  VtabBeginParse(P
2e600 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54  arse*, Token*, T
2e610 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 69  oken*, Token*, i
2e620 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
2e630 33 56 74 61 62 46 69 6e 69 73 68 50 61 72 73 65  3VtabFinishParse
2e640 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 29  (Parse*, Token*)
2e650 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74  ;.void sqlite3Vt
2e660 61 62 41 72 67 49 6e 69 74 28 50 61 72 73 65 2a  abArgInit(Parse*
2e670 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56  );.void sqlite3V
2e680 74 61 62 41 72 67 45 78 74 65 6e 64 28 50 61 72  tabArgExtend(Par
2e690 73 65 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e  se*, Token*);.in
2e6a0 74 20 73 71 6c 69 74 65 33 56 74 61 62 43 61 6c  t sqlite3VtabCal
2e6b0 6c 43 72 65 61 74 65 28 73 71 6c 69 74 65 33 2a  lCreate(sqlite3*
2e6c0 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61  , int, const cha
2e6d0 72 20 2a 2c 20 63 68 61 72 20 2a 2a 29 3b 0a 69  r *, char **);.i
2e6e0 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62 43 61  nt sqlite3VtabCa
2e6f0 6c 6c 43 6f 6e 6e 65 63 74 28 50 61 72 73 65 2a  llConnect(Parse*
2e700 2c 20 54 61 62 6c 65 2a 29 3b 0a 69 6e 74 20 73  , Table*);.int s
2e710 71 6c 69 74 65 33 56 74 61 62 43 61 6c 6c 44 65  qlite3VtabCallDe
2e720 73 74 72 6f 79 28 73 71 6c 69 74 65 33 2a 2c 20  stroy(sqlite3*, 
2e730 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61 72 20  int, const char 
2e740 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56  *);.int sqlite3V
2e750 74 61 62 42 65 67 69 6e 28 73 71 6c 69 74 65 33  tabBegin(sqlite3
2e760 20 2a 2c 20 56 54 61 62 6c 65 20 2a 29 3b 0a 46   *, VTable *);.F
2e770 75 6e 63 44 65 66 20 2a 73 71 6c 69 74 65 33 56  uncDef *sqlite3V
2e780 74 61 62 4f 76 65 72 6c 6f 61 64 46 75 6e 63 74  tabOverloadFunct
2e790 69 6f 6e 28 73 71 6c 69 74 65 33 20 2a 2c 46 75  ion(sqlite3 *,Fu
2e7a0 6e 63 44 65 66 2a 2c 20 69 6e 74 20 6e 41 72 67  ncDef*, int nArg
2e7b0 2c 20 45 78 70 72 2a 29 3b 0a 73 71 6c 69 74 65  , Expr*);.sqlite
2e7c0 33 5f 69 6e 74 36 34 20 73 71 6c 69 74 65 33 53  3_int64 sqlite3S
2e7d0 74 6d 74 43 75 72 72 65 6e 74 54 69 6d 65 28 73  tmtCurrentTime(s
2e7e0 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 29  qlite3_context*)
2e7f0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 64 62  ;.int sqlite3Vdb
2e800 65 50 61 72 61 6d 65 74 65 72 49 6e 64 65 78 28  eParameterIndex(
2e810 56 64 62 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61  Vdbe*, const cha
2e820 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71  r*, int);.int sq
2e830 6c 69 74 65 33 54 72 61 6e 73 66 65 72 42 69 6e  lite3TransferBin
2e840 64 69 6e 67 73 28 73 71 6c 69 74 65 33 5f 73 74  dings(sqlite3_st
2e850 6d 74 20 2a 2c 20 73 71 6c 69 74 65 33 5f 73 74  mt *, sqlite3_st
2e860 6d 74 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  mt *);.void sqli
2e870 74 65 33 50 61 72 73 65 72 52 65 73 65 74 28 50  te3ParserReset(P
2e880 61 72 73 65 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  arse*);.int sqli
2e890 74 65 33 52 65 70 72 65 70 61 72 65 28 56 64 62  te3Reprepare(Vdb
2e8a0 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  e*);.void sqlite
2e8b0 33 45 78 70 72 4c 69 73 74 43 68 65 63 6b 4c 65  3ExprListCheckLe
2e8c0 6e 67 74 68 28 50 61 72 73 65 2a 2c 20 45 78 70  ngth(Parse*, Exp
2e8d0 72 4c 69 73 74 2a 2c 20 63 6f 6e 73 74 20 63 68  rList*, const ch
2e8e0 61 72 2a 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73  ar*);.CollSeq *s
2e8f0 71 6c 69 74 65 33 42 69 6e 61 72 79 43 6f 6d 70  qlite3BinaryComp
2e900 61 72 65 43 6f 6c 6c 53 65 71 28 50 61 72 73 65  areCollSeq(Parse
2e910 20 2a 2c 20 45 78 70 72 20 2a 2c 20 45 78 70 72   *, Expr *, Expr
2e920 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33   *);.int sqlite3
2e930 54 65 6d 70 49 6e 4d 65 6d 6f 72 79 28 63 6f 6e  TempInMemory(con
2e940 73 74 20 73 71 6c 69 74 65 33 2a 29 3b 0a 63 6f  st sqlite3*);.co
2e950 6e 73 74 20 63 68 61 72 20 2a 73 71 6c 69 74 65  nst char *sqlite
2e960 33 4a 6f 75 72 6e 61 6c 4d 6f 64 65 6e 61 6d 65  3JournalModename
2e970 28 69 6e 74 29 3b 0a 23 69 66 6e 64 65 66 20 53  (int);.#ifndef S
2e980 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a 20  QLITE_OMIT_WAL. 
2e990 20 69 6e 74 20 73 71 6c 69 74 65 33 43 68 65 63   int sqlite3Chec
2e9a0 6b 70 6f 69 6e 74 28 73 71 6c 69 74 65 33 2a 2c  kpoint(sqlite3*,
2e9b0 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 2a 2c   int, int, int*,
2e9c0 20 69 6e 74 2a 29 3b 0a 20 20 69 6e 74 20 73 71   int*);.  int sq
2e9d0 6c 69 74 65 33 57 61 6c 44 65 66 61 75 6c 74 48  lite3WalDefaultH
2e9e0 6f 6f 6b 28 76 6f 69 64 2a 2c 73 71 6c 69 74 65  ook(void*,sqlite
2e9f0 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 69  3*,const char*,i
2ea00 6e 74 29 3b 0a 23 65 6e 64 69 66 0a 23 69 66 6e  nt);.#endif.#ifn
2ea10 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
2ea20 43 54 45 0a 20 20 57 69 74 68 20 2a 73 71 6c 69  CTE.  With *sqli
2ea30 74 65 33 57 69 74 68 41 64 64 28 50 61 72 73 65  te3WithAdd(Parse
2ea40 2a 2c 57 69 74 68 2a 2c 54 6f 6b 65 6e 2a 2c 45  *,With*,Token*,E
2ea50 78 70 72 4c 69 73 74 2a 2c 53 65 6c 65 63 74 2a  xprList*,Select*
2ea60 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
2ea70 33 57 69 74 68 44 65 6c 65 74 65 28 73 71 6c 69  3WithDelete(sqli
2ea80 74 65 33 2a 2c 57 69 74 68 2a 29 3b 0a 20 20 76  te3*,With*);.  v
2ea90 6f 69 64 20 73 71 6c 69 74 65 33 57 69 74 68 50  oid sqlite3WithP
2eaa0 75 73 68 28 50 61 72 73 65 2a 2c 20 57 69 74 68  ush(Parse*, With
2eab0 2a 2c 20 75 38 29 3b 0a 23 65 6c 73 65 0a 23 64  *, u8);.#else.#d
2eac0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 57 69 74  efine sqlite3Wit
2ead0 68 50 75 73 68 28 78 2c 79 2c 7a 29 0a 23 64 65  hPush(x,y,z).#de
2eae0 66 69 6e 65 20 73 71 6c 69 74 65 33 57 69 74 68  fine sqlite3With
2eaf0 44 65 6c 65 74 65 28 78 2c 79 29 0a 23 65 6e 64  Delete(x,y).#end
2eb00 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  if.#ifndef SQLIT
2eb10 45 5f 4f 4d 49 54 5f 55 50 53 45 52 54 0a 20 20  E_OMIT_UPSERT.  
2eb20 55 70 73 65 72 74 20 2a 73 71 6c 69 74 65 33 55  Upsert *sqlite3U
2eb30 70 73 65 72 74 4e 65 77 28 73 71 6c 69 74 65 33  psertNew(sqlite3
2eb40 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 45 78 70 72  *,ExprList*,Expr
2eb50 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 45 78 70 72  *,ExprList*,Expr
2eb60 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  *);.  void sqlit
2eb70 65 33 55 70 73 65 72 74 44 65 6c 65 74 65 28 73  e3UpsertDelete(s
2eb80 71 6c 69 74 65 33 2a 2c 55 70 73 65 72 74 2a 29  qlite3*,Upsert*)
2eb90 3b 0a 20 20 55 70 73 65 72 74 20 2a 73 71 6c 69  ;.  Upsert *sqli
2eba0 74 65 33 55 70 73 65 72 74 44 75 70 28 73 71 6c  te3UpsertDup(sql
2ebb0 69 74 65 33 2a 2c 55 70 73 65 72 74 2a 29 3b 0a  ite3*,Upsert*);.
2ebc0 20 20 69 6e 74 20 73 71 6c 69 74 65 33 55 70 73    int sqlite3Ups
2ebd0 65 72 74 41 6e 61 6c 79 7a 65 54 61 72 67 65 74  ertAnalyzeTarget
2ebe0 28 50 61 72 73 65 2a 2c 53 72 63 4c 69 73 74 2a  (Parse*,SrcList*
2ebf0 2c 55 70 73 65 72 74 2a 29 3b 0a 20 20 76 6f 69  ,Upsert*);.  voi
2ec00 64 20 73 71 6c 69 74 65 33 55 70 73 65 72 74 44  d sqlite3UpsertD
2ec10 6f 55 70 64 61 74 65 28 50 61 72 73 65 2a 2c 55  oUpdate(Parse*,U
2ec20 70 73 65 72 74 2a 2c 54 61 62 6c 65 2a 2c 49 6e  psert*,Table*,In
2ec30 64 65 78 2a 2c 69 6e 74 29 3b 0a 23 65 6c 73 65  dex*,int);.#else
2ec40 0a 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  .#define sqlite3
2ec50 55 70 73 65 72 74 4e 65 77 28 76 2c 77 2c 78 2c  UpsertNew(v,w,x,
2ec60 79 2c 7a 29 20 28 28 55 70 73 65 72 74 2a 29 30  y,z) ((Upsert*)0
2ec70 29 0a 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65  ).#define sqlite
2ec80 33 55 70 73 65 72 74 44 65 6c 65 74 65 28 78 2c  3UpsertDelete(x,
2ec90 79 29 0a 23 64 65 66 69 6e 65 20 73 71 6c 69 74  y).#define sqlit
2eca0 65 33 55 70 73 65 72 74 44 75 70 28 78 2c 79 29  e3UpsertDup(x,y)
2ecb0 20 20 20 20 20 20 20 28 28 55 70 73 65 72 74 2a         ((Upsert*
2ecc0 29 30 29 0a 23 65 6e 64 69 66 0a 0a 0a 2f 2a 20  )0).#endif.../* 
2ecd0 44 65 63 6c 61 72 61 74 69 6f 6e 73 20 66 6f 72  Declarations for
2ece0 20 66 75 6e 63 74 69 6f 6e 73 20 69 6e 20 66 6b   functions in fk
2ecf0 65 79 2e 63 2e 20 41 6c 6c 20 6f 66 20 74 68 65  ey.c. All of the
2ed00 73 65 20 61 72 65 20 72 65 70 6c 61 63 65 64 20  se are replaced 
2ed10 62 79 0a 2a 2a 20 6e 6f 2d 6f 70 20 6d 61 63 72  by.** no-op macr
2ed20 6f 73 20 69 66 20 4f 4d 49 54 5f 46 4f 52 45 49  os if OMIT_FOREI
2ed30 47 4e 5f 4b 45 59 20 69 73 20 64 65 66 69 6e 65  GN_KEY is define
2ed40 64 2e 20 49 6e 20 74 68 69 73 20 63 61 73 65 20  d. In this case 
2ed50 6e 6f 20 66 6f 72 65 69 67 6e 0a 2a 2a 20 6b 65  no foreign.** ke
2ed60 79 20 66 75 6e 63 74 69 6f 6e 61 6c 69 74 79 20  y functionality 
2ed70 69 73 20 61 76 61 69 6c 61 62 6c 65 2e 20 49 66  is available. If
2ed80 20 4f 4d 49 54 5f 54 52 49 47 47 45 52 20 69 73   OMIT_TRIGGER is
2ed90 20 64 65 66 69 6e 65 64 20 62 75 74 0a 2a 2a 20   defined but.** 
2eda0 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59  OMIT_FOREIGN_KEY
2edb0 20 69 73 20 6e 6f 74 2c 20 6f 6e 6c 79 20 73 6f   is not, only so
2edc0 6d 65 20 6f 66 20 74 68 65 20 66 75 6e 63 74 69  me of the functi
2edd0 6f 6e 73 20 61 72 65 20 6e 6f 2d 6f 70 65 64 2e  ons are no-oped.
2ede0 20 49 6e 0a 2a 2a 20 74 68 69 73 20 63 61 73 65   In.** this case
2edf0 20 66 6f 72 65 69 67 6e 20 6b 65 79 73 20 61 72   foreign keys ar
2ee00 65 20 70 61 72 73 65 64 2c 20 62 75 74 20 6e 6f  e parsed, but no
2ee10 20 6f 74 68 65 72 20 66 75 6e 63 74 69 6f 6e 61   other functiona
2ee20 6c 69 74 79 20 69 73 0a 2a 2a 20 70 72 6f 76 69  lity is.** provi
2ee30 64 65 64 20 28 65 6e 66 6f 72 63 65 6d 65 6e 74  ded (enforcement
2ee40 20 6f 66 20 46 4b 20 63 6f 6e 73 74 72 61 69 6e   of FK constrain
2ee50 74 73 20 72 65 71 75 69 72 65 73 20 74 68 65 20  ts requires the 
2ee60 74 72 69 67 67 65 72 73 20 73 75 62 2d 73 79 73  triggers sub-sys
2ee70 74 65 6d 29 2e 0a 2a 2f 0a 23 69 66 20 21 64 65  tem)..*/.#if !de
2ee80 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49  fined(SQLITE_OMI
2ee90 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 29 20 26  T_FOREIGN_KEY) &
2eea0 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  & !defined(SQLIT
2eeb0 45 5f 4f 4d 49 54 5f 54 52 49 47 47 45 52 29 0a  E_OMIT_TRIGGER).
2eec0 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 46 6b    void sqlite3Fk
2eed0 43 68 65 63 6b 28 50 61 72 73 65 2a 2c 20 54 61  Check(Parse*, Ta
2eee0 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20  ble*, int, int, 
2eef0 69 6e 74 2a 2c 20 69 6e 74 29 3b 0a 20 20 76 6f  int*, int);.  vo
2ef00 69 64 20 73 71 6c 69 74 65 33 46 6b 44 72 6f 70  id sqlite3FkDrop
2ef10 54 61 62 6c 65 28 50 61 72 73 65 2a 2c 20 53 72  Table(Parse*, Sr
2ef20 63 4c 69 73 74 20 2a 2c 20 54 61 62 6c 65 2a 29  cList *, Table*)
2ef30 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
2ef40 46 6b 41 63 74 69 6f 6e 73 28 50 61 72 73 65 2a  FkActions(Parse*
2ef50 2c 20 54 61 62 6c 65 2a 2c 20 45 78 70 72 4c 69  , Table*, ExprLi
2ef60 73 74 2a 2c 20 69 6e 74 2c 20 69 6e 74 2a 2c 20  st*, int, int*, 
2ef70 69 6e 74 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69  int);.  int sqli
2ef80 74 65 33 46 6b 52 65 71 75 69 72 65 64 28 50 61  te3FkRequired(Pa
2ef90 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e  rse*, Table*, in
2efa0 74 2a 2c 20 69 6e 74 29 3b 0a 20 20 75 33 32 20  t*, int);.  u32 
2efb0 73 71 6c 69 74 65 33 46 6b 4f 6c 64 6d 61 73 6b  sqlite3FkOldmask
2efc0 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 29  (Parse*, Table*)
2efd0 3b 0a 20 20 46 4b 65 79 20 2a 73 71 6c 69 74 65  ;.  FKey *sqlite
2efe0 33 46 6b 52 65 66 65 72 65 6e 63 65 73 28 54 61  3FkReferences(Ta
2eff0 62 6c 65 20 2a 29 3b 0a 23 65 6c 73 65 0a 20 20  ble *);.#else.  
2f000 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46  #define sqlite3F
2f010 6b 41 63 74 69 6f 6e 73 28 61 2c 62 2c 63 2c 64  kActions(a,b,c,d
2f020 2c 65 2c 66 29 0a 20 20 23 64 65 66 69 6e 65 20  ,e,f).  #define 
2f030 73 71 6c 69 74 65 33 46 6b 43 68 65 63 6b 28 61  sqlite3FkCheck(a
2f040 2c 62 2c 63 2c 64 2c 65 2c 66 29 0a 20 20 23 64  ,b,c,d,e,f).  #d
2f050 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 44  efine sqlite3FkD
2f060 72 6f 70 54 61 62 6c 65 28 61 2c 62 2c 63 29 0a  ropTable(a,b,c).
2f070 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65    #define sqlite
2f080 33 46 6b 4f 6c 64 6d 61 73 6b 28 61 2c 62 29 20  3FkOldmask(a,b) 
2f090 20 20 20 20 20 20 20 20 30 0a 20 20 23 64 65 66          0.  #def
2f0a0 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 52 65 71  ine sqlite3FkReq
2f0b0 75 69 72 65 64 28 61 2c 62 2c 63 2c 64 29 20 20  uired(a,b,c,d)  
2f0c0 20 20 30 0a 20 20 23 64 65 66 69 6e 65 20 73 71    0.  #define sq
2f0d0 6c 69 74 65 33 46 6b 52 65 66 65 72 65 6e 63 65  lite3FkReference
2f0e0 73 28 61 29 20 20 20 20 20 20 20 20 30 0a 23 65  s(a)        0.#e
2f0f0 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c  ndif.#ifndef SQL
2f100 49 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49 47 4e  ITE_OMIT_FOREIGN
2f110 5f 4b 45 59 0a 20 20 76 6f 69 64 20 73 71 6c 69  _KEY.  void sqli
2f120 74 65 33 46 6b 44 65 6c 65 74 65 28 73 71 6c 69  te3FkDelete(sqli
2f130 74 65 33 20 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a  te3 *, Table*);.
2f140 20 20 69 6e 74 20 73 71 6c 69 74 65 33 46 6b 4c    int sqlite3FkL
2f150 6f 63 61 74 65 49 6e 64 65 78 28 50 61 72 73 65  ocateIndex(Parse
2f160 2a 2c 54 61 62 6c 65 2a 2c 46 4b 65 79 2a 2c 49  *,Table*,FKey*,I
2f170 6e 64 65 78 2a 2a 2c 69 6e 74 2a 2a 29 3b 0a 23  ndex**,int**);.#
2f180 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20 73  else.  #define s
2f190 71 6c 69 74 65 33 46 6b 44 65 6c 65 74 65 28 61  qlite3FkDelete(a
2f1a0 2c 62 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71  ,b).  #define sq
2f1b0 6c 69 74 65 33 46 6b 4c 6f 63 61 74 65 49 6e 64  lite3FkLocateInd
2f1c0 65 78 28 61 2c 62 2c 63 2c 64 2c 65 29 0a 23 65  ex(a,b,c,d,e).#e
2f1d0 6e 64 69 66 0a 0a 0a 2f 2a 0a 2a 2a 20 41 76 61  ndif.../*.** Ava
2f1e0 69 6c 61 62 6c 65 20 66 61 75 6c 74 20 69 6e 6a  ilable fault inj
2f1f0 65 63 74 6f 72 73 2e 20 20 53 68 6f 75 6c 64 20  ectors.  Should 
2f200 62 65 20 6e 75 6d 62 65 72 65 64 20 62 65 67 69  be numbered begi
2f210 6e 6e 69 6e 67 20 77 69 74 68 20 30 2e 0a 2a 2f  nning with 0..*/
2f220 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
2f230 46 41 55 4c 54 49 4e 4a 45 43 54 4f 52 5f 4d 41  FAULTINJECTOR_MA
2f240 4c 4c 4f 43 20 20 20 20 20 30 0a 23 64 65 66 69  LLOC     0.#defi
2f250 6e 65 20 53 51 4c 49 54 45 5f 46 41 55 4c 54 49  ne SQLITE_FAULTI
2f260 4e 4a 45 43 54 4f 52 5f 43 4f 55 4e 54 20 20 20  NJECTOR_COUNT   
2f270 20 20 20 31 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20     1../*.** The 
2f280 69 6e 74 65 72 66 61 63 65 20 74 6f 20 74 68 65  interface to the
2f290 20 63 6f 64 65 20 69 6e 20 66 61 75 6c 74 2e 63   code in fault.c
2f2a0 20 75 73 65 64 20 66 6f 72 20 69 64 65 6e 74 69   used for identi
2f2b0 66 79 69 6e 67 20 22 62 65 6e 69 67 6e 22 0a 2a  fying "benign".*
2f2c0 2a 20 6d 61 6c 6c 6f 63 20 66 61 69 6c 75 72 65  * malloc failure
2f2d0 73 2e 20 54 68 69 73 20 69 73 20 6f 6e 6c 79 20  s. This is only 
2f2e0 70 72 65 73 65 6e 74 20 69 66 20 53 51 4c 49 54  present if SQLIT
2f2f0 45 5f 55 4e 54 45 53 54 41 42 4c 45 0a 2a 2a 20  E_UNTESTABLE.** 
2f300 69 73 20 6e 6f 74 20 64 65 66 69 6e 65 64 2e 0a  is not defined..
2f310 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  */.#ifndef SQLIT
2f320 45 5f 55 4e 54 45 53 54 41 42 4c 45 0a 20 20 76  E_UNTESTABLE.  v
2f330 6f 69 64 20 73 71 6c 69 74 65 33 42 65 67 69 6e  oid sqlite3Begin
2f340 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28 76 6f 69  BenignMalloc(voi
2f350 64 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  d);.  void sqlit
2f360 65 33 45 6e 64 42 65 6e 69 67 6e 4d 61 6c 6c 6f  e3EndBenignMallo
2f370 63 28 76 6f 69 64 29 3b 0a 23 65 6c 73 65 0a 20  c(void);.#else. 
2f380 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33   #define sqlite3
2f390 42 65 67 69 6e 42 65 6e 69 67 6e 4d 61 6c 6c 6f  BeginBenignMallo
2f3a0 63 28 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71  c().  #define sq
2f3b0 6c 69 74 65 33 45 6e 64 42 65 6e 69 67 6e 4d 61  lite3EndBenignMa
2f3c0 6c 6c 6f 63 28 29 0a 23 65 6e 64 69 66 0a 0a 2f  lloc().#endif../
2f3d0 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 72 65 74  *.** Allowed ret
2f3e0 75 72 6e 20 76 61 6c 75 65 73 20 66 72 6f 6d 20  urn values from 
2f3f0 73 71 6c 69 74 65 33 46 69 6e 64 49 6e 49 6e 64  sqlite3FindInInd
2f400 65 78 28 29 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ex().*/.#define 
2f410 49 4e 5f 49 4e 44 45 58 5f 52 4f 57 49 44 20 20  IN_INDEX_ROWID  
2f420 20 20 20 20 20 20 31 20 20 20 2f 2a 20 53 65 61        1   /* Sea
2f430 72 63 68 20 74 68 65 20 72 6f 77 69 64 20 6f 66  rch the rowid of
2f440 20 74 68 65 20 74 61 62 6c 65 20 2a 2f 0a 23 64   the table */.#d
2f450 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 45  efine IN_INDEX_E
2f460 50 48 20 20 20 20 20 20 20 20 20 20 32 20 20 20  PH          2   
2f470 2f 2a 20 53 65 61 72 63 68 20 61 6e 20 65 70 68  /* Search an eph
2f480 65 6d 65 72 61 6c 20 62 2d 74 72 65 65 20 2a 2f  emeral b-tree */
2f490 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45  .#define IN_INDE
2f4a0 58 5f 49 4e 44 45 58 5f 41 53 43 20 20 20 20 33  X_INDEX_ASC    3
2f4b0 20 20 20 2f 2a 20 45 78 69 73 74 69 6e 67 20 69     /* Existing i
2f4c0 6e 64 65 78 20 41 53 43 45 4e 44 49 4e 47 20 2a  ndex ASCENDING *
2f4d0 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44  /.#define IN_IND
2f4e0 45 58 5f 49 4e 44 45 58 5f 44 45 53 43 20 20 20  EX_INDEX_DESC   
2f4f0 34 20 20 20 2f 2a 20 45 78 69 73 74 69 6e 67 20  4   /* Existing 
2f500 69 6e 64 65 78 20 44 45 53 43 45 4e 44 49 4e 47  index DESCENDING
2f510 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49   */.#define IN_I
2f520 4e 44 45 58 5f 4e 4f 4f 50 20 20 20 20 20 20 20  NDEX_NOOP       
2f530 20 20 35 20 20 20 2f 2a 20 4e 6f 20 74 61 62 6c    5   /* No tabl
2f540 65 20 61 76 61 69 6c 61 62 6c 65 2e 20 55 73 65  e available. Use
2f550 20 63 6f 6d 70 61 72 69 73 6f 6e 73 20 2a 2f 0a   comparisons */.
2f560 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 66 6c  /*.** Allowed fl
2f570 61 67 73 20 66 6f 72 20 74 68 65 20 33 72 64 20  ags for the 3rd 
2f580 70 61 72 61 6d 65 74 65 72 20 74 6f 20 73 71 6c  parameter to sql
2f590 69 74 65 33 46 69 6e 64 49 6e 49 6e 64 65 78 28  ite3FindInIndex(
2f5a0 29 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e  )..*/.#define IN
2f5b0 5f 49 4e 44 45 58 5f 4e 4f 4f 50 5f 4f 4b 20 20  _INDEX_NOOP_OK  
2f5c0 20 20 20 30 78 30 30 30 31 20 20 2f 2a 20 4f 4b     0x0001  /* OK
2f5d0 20 74 6f 20 72 65 74 75 72 6e 20 49 4e 5f 49 4e   to return IN_IN
2f5e0 44 45 58 5f 4e 4f 4f 50 20 2a 2f 0a 23 64 65 66  DEX_NOOP */.#def
2f5f0 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 4d 45 4d  ine IN_INDEX_MEM
2f600 42 45 52 53 48 49 50 20 20 30 78 30 30 30 32 20  BERSHIP  0x0002 
2f610 20 2f 2a 20 49 4e 20 6f 70 65 72 61 74 6f 72 20   /* IN operator 
2f620 75 73 65 64 20 66 6f 72 20 6d 65 6d 62 65 72 73  used for members
2f630 68 69 70 20 74 65 73 74 20 2a 2f 0a 23 64 65 66  hip test */.#def
2f640 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 4c 4f 4f  ine IN_INDEX_LOO
2f650 50 20 20 20 20 20 20 20 20 30 78 30 30 30 34 20  P        0x0004 
2f660 20 2f 2a 20 49 4e 20 6f 70 65 72 61 74 6f 72 20   /* IN operator 
2f670 75 73 65 64 20 61 73 20 61 20 6c 6f 6f 70 20 2a  used as a loop *
2f680 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69 6e  /.int sqlite3Fin
2f690 64 49 6e 49 6e 64 65 78 28 50 61 72 73 65 20 2a  dInIndex(Parse *
2f6a0 2c 20 45 78 70 72 20 2a 2c 20 75 33 32 2c 20 69  , Expr *, u32, i
2f6b0 6e 74 2a 2c 20 69 6e 74 2a 29 3b 0a 0a 69 6e 74  nt*, int*);..int
2f6c0 20 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 4f   sqlite3JournalO
2f6d0 70 65 6e 28 73 71 6c 69 74 65 33 5f 76 66 73 20  pen(sqlite3_vfs 
2f6e0 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c  *, const char *,
2f6f0 20 73 71 6c 69 74 65 33 5f 66 69 6c 65 20 2a 2c   sqlite3_file *,
2f700 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 69 6e 74 20   int, int);.int 
2f710 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 53 69  sqlite3JournalSi
2f720 7a 65 28 73 71 6c 69 74 65 33 5f 76 66 73 20 2a  ze(sqlite3_vfs *
2f730 29 3b 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53  );.#if defined(S
2f740 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 41 54 4f  QLITE_ENABLE_ATO
2f750 4d 49 43 5f 57 52 49 54 45 29 20 5c 0a 20 7c 7c  MIC_WRITE) \. ||
2f760 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
2f770 45 4e 41 42 4c 45 5f 42 41 54 43 48 5f 41 54 4f  ENABLE_BATCH_ATO
2f780 4d 49 43 5f 57 52 49 54 45 29 0a 20 20 69 6e 74  MIC_WRITE).  int
2f790 20 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 43   sqlite3JournalC
2f7a0 72 65 61 74 65 28 73 71 6c 69 74 65 33 5f 66 69  reate(sqlite3_fi
2f7b0 6c 65 20 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 69  le *);.#endif..i
2f7c0 6e 74 20 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61  nt sqlite3Journa
2f7d0 6c 49 73 49 6e 4d 65 6d 6f 72 79 28 73 71 6c 69  lIsInMemory(sqli
2f7e0 74 65 33 5f 66 69 6c 65 20 2a 70 29 3b 0a 76 6f  te3_file *p);.vo
2f7f0 69 64 20 73 71 6c 69 74 65 33 4d 65 6d 4a 6f 75  id sqlite3MemJou
2f800 72 6e 61 6c 4f 70 65 6e 28 73 71 6c 69 74 65 33  rnalOpen(sqlite3
2f810 5f 66 69 6c 65 20 2a 29 3b 0a 0a 76 6f 69 64 20  _file *);..void 
2f820 73 71 6c 69 74 65 33 45 78 70 72 53 65 74 48 65  sqlite3ExprSetHe
2f830 69 67 68 74 41 6e 64 46 6c 61 67 73 28 50 61 72  ightAndFlags(Par
2f840 73 65 20 2a 70 50 61 72 73 65 2c 20 45 78 70 72  se *pParse, Expr
2f850 20 2a 70 29 3b 0a 23 69 66 20 53 51 4c 49 54 45   *p);.#if SQLITE
2f860 5f 4d 41 58 5f 45 58 50 52 5f 44 45 50 54 48 3e  _MAX_EXPR_DEPTH>
2f870 30 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 53  0.  int sqlite3S
2f880 65 6c 65 63 74 45 78 70 72 48 65 69 67 68 74 28  electExprHeight(
2f890 53 65 6c 65 63 74 20 2a 29 3b 0a 20 20 69 6e 74  Select *);.  int
2f8a0 20 73 71 6c 69 74 65 33 45 78 70 72 43 68 65 63   sqlite3ExprChec
2f8b0 6b 48 65 69 67 68 74 28 50 61 72 73 65 2a 2c 20  kHeight(Parse*, 
2f8c0 69 6e 74 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64  int);.#else.  #d
2f8d0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53 65 6c  efine sqlite3Sel
2f8e0 65 63 74 45 78 70 72 48 65 69 67 68 74 28 78 29  ectExprHeight(x)
2f8f0 20 30 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c   0.  #define sql
2f900 69 74 65 33 45 78 70 72 43 68 65 63 6b 48 65 69  ite3ExprCheckHei
2f910 67 68 74 28 78 2c 79 29 0a 23 65 6e 64 69 66 0a  ght(x,y).#endif.
2f920 0a 75 33 32 20 73 71 6c 69 74 65 33 47 65 74 34  .u32 sqlite3Get4
2f930 62 79 74 65 28 63 6f 6e 73 74 20 75 38 2a 29 3b  byte(const u8*);
2f940 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50 75 74  .void sqlite3Put
2f950 34 62 79 74 65 28 75 38 2a 2c 20 75 33 32 29 3b  4byte(u8*, u32);
2f960 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ..#ifdef SQLITE_
2f970 45 4e 41 42 4c 45 5f 55 4e 4c 4f 43 4b 5f 4e 4f  ENABLE_UNLOCK_NO
2f980 54 49 46 59 0a 20 20 76 6f 69 64 20 73 71 6c 69  TIFY.  void sqli
2f990 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 42 6c 6f  te3ConnectionBlo
2f9a0 63 6b 65 64 28 73 71 6c 69 74 65 33 20 2a 2c 20  cked(sqlite3 *, 
2f9b0 73 71 6c 69 74 65 33 20 2a 29 3b 0a 20 20 76 6f  sqlite3 *);.  vo
2f9c0 69 64 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63  id sqlite3Connec
2f9d0 74 69 6f 6e 55 6e 6c 6f 63 6b 65 64 28 73 71 6c  tionUnlocked(sql
2f9e0 69 74 65 33 20 2a 64 62 29 3b 0a 20 20 76 6f 69  ite3 *db);.  voi
2f9f0 64 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74  d sqlite3Connect
2fa00 69 6f 6e 43 6c 6f 73 65 64 28 73 71 6c 69 74 65  ionClosed(sqlite
2fa10 33 20 2a 64 62 29 3b 0a 23 65 6c 73 65 0a 20 20  3 *db);.#else.  
2fa20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 43  #define sqlite3C
2fa30 6f 6e 6e 65 63 74 69 6f 6e 42 6c 6f 63 6b 65 64  onnectionBlocked
2fa40 28 78 2c 79 29 0a 20 20 23 64 65 66 69 6e 65 20  (x,y).  #define 
2fa50 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f  sqlite3Connectio
2fa60 6e 55 6e 6c 6f 63 6b 65 64 28 78 29 0a 20 20 23  nUnlocked(x).  #
2fa70 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 43 6f  define sqlite3Co
2fa80 6e 6e 65 63 74 69 6f 6e 43 6c 6f 73 65 64 28 78  nnectionClosed(x
2fa90 29 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66  ).#endif..#ifdef
2faa0 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20   SQLITE_DEBUG.  
2fab0 76 6f 69 64 20 73 71 6c 69 74 65 33 50 61 72 73  void sqlite3Pars
2fac0 65 72 54 72 61 63 65 28 46 49 4c 45 2a 2c 20 63  erTrace(FILE*, c
2fad0 68 61 72 20 2a 29 3b 0a 23 65 6e 64 69 66 0a 23  har *);.#endif.#
2fae0 69 66 20 64 65 66 69 6e 65 64 28 59 59 43 4f 56  if defined(YYCOV
2faf0 45 52 41 47 45 29 0a 20 20 69 6e 74 20 73 71 6c  ERAGE).  int sql
2fb00 69 74 65 33 50 61 72 73 65 72 43 6f 76 65 72 61  ite3ParserCovera
2fb10 67 65 28 46 49 4c 45 2a 29 3b 0a 23 65 6e 64 69  ge(FILE*);.#endi
2fb20 66 0a 0a 2f 2a 0a 2a 2a 20 49 66 20 74 68 65 20  f../*.** If the 
2fb30 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 20 49 4f  SQLITE_ENABLE IO
2fb40 54 52 41 43 45 20 65 78 69 73 74 73 20 74 68 65  TRACE exists the
2fb50 6e 20 74 68 65 20 67 6c 6f 62 61 6c 20 76 61 72  n the global var
2fb60 69 61 62 6c 65 0a 2a 2a 20 73 71 6c 69 74 65 33  iable.** sqlite3
2fb70 49 6f 54 72 61 63 65 20 69 73 20 61 20 70 6f 69  IoTrace is a poi
2fb80 6e 74 65 72 20 74 6f 20 61 20 70 72 69 6e 74 66  nter to a printf
2fb90 2d 6c 69 6b 65 20 72 6f 75 74 69 6e 65 20 75 73  -like routine us
2fba0 65 64 20 74 6f 0a 2a 2a 20 70 72 69 6e 74 20 49  ed to.** print I
2fbb0 2f 4f 20 74 72 61 63 69 6e 67 20 6d 65 73 73 61  /O tracing messa
2fbc0 67 65 73 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53  ges..*/.#ifdef S
2fbd0 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 49 4f 54  QLITE_ENABLE_IOT
2fbe0 52 41 43 45 0a 23 20 64 65 66 69 6e 65 20 49 4f  RACE.# define IO
2fbf0 54 52 41 43 45 28 41 29 20 20 69 66 28 20 73 71  TRACE(A)  if( sq
2fc00 6c 69 74 65 33 49 6f 54 72 61 63 65 20 29 7b 20  lite3IoTrace ){ 
2fc10 73 71 6c 69 74 65 33 49 6f 54 72 61 63 65 20 41  sqlite3IoTrace A
2fc20 3b 20 7d 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  ; }.  void sqlit
2fc30 65 33 56 64 62 65 49 4f 54 72 61 63 65 53 71 6c  e3VdbeIOTraceSql
2fc40 28 56 64 62 65 2a 29 3b 0a 53 51 4c 49 54 45 5f  (Vdbe*);.SQLITE_
2fc50 41 50 49 20 53 51 4c 49 54 45 5f 45 58 54 45 52  API SQLITE_EXTER
2fc60 4e 20 76 6f 69 64 20 28 53 51 4c 49 54 45 5f 43  N void (SQLITE_C
2fc70 44 45 43 4c 20 2a 73 71 6c 69 74 65 33 49 6f 54  DECL *sqlite3IoT
2fc80 72 61 63 65 29 28 63 6f 6e 73 74 20 63 68 61 72  race)(const char
2fc90 2a 2c 2e 2e 2e 29 3b 0a 23 65 6c 73 65 0a 23 20  *,...);.#else.# 
2fca0 64 65 66 69 6e 65 20 49 4f 54 52 41 43 45 28 41  define IOTRACE(A
2fcb0 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
2fcc0 65 33 56 64 62 65 49 4f 54 72 61 63 65 53 71 6c  e3VdbeIOTraceSql
2fcd0 28 58 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  (X).#endif../*.*
2fce0 2a 20 54 68 65 73 65 20 72 6f 75 74 69 6e 65 73  * These routines
2fcf0 20 61 72 65 20 61 76 61 69 6c 61 62 6c 65 20 66   are available f
2fd00 6f 72 20 74 68 65 20 6d 65 6d 32 2e 63 20 64 65  or the mem2.c de
2fd10 62 75 67 67 69 6e 67 20 6d 65 6d 6f 72 79 20 61  bugging memory a
2fd20 6c 6c 6f 63 61 74 6f 72 0a 2a 2a 20 6f 6e 6c 79  llocator.** only
2fd30 2e 20 20 54 68 65 79 20 61 72 65 20 75 73 65 64  .  They are used
2fd40 20 74 6f 20 76 65 72 69 66 79 20 74 68 61 74 20   to verify that 
2fd50 64 69 66 66 65 72 65 6e 74 20 22 74 79 70 65 73  different "types
2fd60 22 20 6f 66 20 6d 65 6d 6f 72 79 0a 2a 2a 20 61  " of memory.** a
2fd70 6c 6c 6f 63 61 74 69 6f 6e 73 20 61 72 65 20 70  llocations are p
2fd80 72 6f 70 65 72 6c 79 20 74 72 61 63 6b 65 64 20  roperly tracked 
2fd90 62 79 20 74 68 65 20 73 79 73 74 65 6d 2e 0a 2a  by the system..*
2fda0 2a 0a 2a 2a 20 73 71 6c 69 74 65 33 4d 65 6d 64  *.** sqlite3Memd
2fdb0 65 62 75 67 53 65 74 54 79 70 65 28 29 20 73 65  ebugSetType() se
2fdc0 74 73 20 74 68 65 20 22 74 79 70 65 22 20 6f 66  ts the "type" of
2fdd0 20 61 6e 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 74   an allocation t
2fde0 6f 20 6f 6e 65 20 6f 66 0a 2a 2a 20 74 68 65 20  o one of.** the 
2fdf0 4d 45 4d 54 59 50 45 5f 2a 20 6d 61 63 72 6f 73  MEMTYPE_* macros
2fe00 20 64 65 66 69 6e 65 64 20 62 65 6c 6f 77 2e 20   defined below. 
2fe10 20 54 68 65 20 74 79 70 65 20 6d 75 73 74 20 62   The type must b
2fe20 65 20 61 20 62 69 74 6d 61 73 6b 20 77 69 74 68  e a bitmask with
2fe30 0a 2a 2a 20 61 20 73 69 6e 67 6c 65 20 62 69 74  .** a single bit
2fe40 20 73 65 74 2e 0a 2a 2a 0a 2a 2a 20 73 71 6c 69   set..**.** sqli
2fe50 74 65 33 4d 65 6d 64 65 62 75 67 48 61 73 54 79  te3MemdebugHasTy
2fe60 70 65 28 29 20 72 65 74 75 72 6e 73 20 74 72 75  pe() returns tru
2fe70 65 20 69 66 20 61 6e 79 20 6f 66 20 74 68 65 20  e if any of the 
2fe80 62 69 74 73 20 69 6e 20 69 74 73 20 73 65 63 6f  bits in its seco
2fe90 6e 64 0a 2a 2a 20 61 72 67 75 6d 65 6e 74 20 6d  nd.** argument m
2fea0 61 74 63 68 20 74 68 65 20 74 79 70 65 20 73 65  atch the type se
2feb0 74 20 62 79 20 74 68 65 20 70 72 65 76 69 6f 75  t by the previou
2fec0 73 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75  s sqlite3Memdebu
2fed0 67 53 65 74 54 79 70 65 28 29 2e 0a 2a 2a 20 73  gSetType()..** s
2fee0 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 48 61  qlite3MemdebugHa
2fef0 73 54 79 70 65 28 29 20 69 73 20 69 6e 74 65 6e  sType() is inten
2ff00 64 65 64 20 66 6f 72 20 75 73 65 20 69 6e 73 69  ded for use insi
2ff10 64 65 20 61 73 73 65 72 74 28 29 20 73 74 61 74  de assert() stat
2ff20 65 6d 65 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20 73 71  ements..**.** sq
2ff30 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 4e 6f 54  lite3MemdebugNoT
2ff40 79 70 65 28 29 20 72 65 74 75 72 6e 73 20 74 72  ype() returns tr
2ff50 75 65 20 69 66 20 6e 6f 6e 65 20 6f 66 20 74 68  ue if none of th
2ff60 65 20 62 69 74 73 20 69 6e 20 69 74 73 20 73 65  e bits in its se
2ff70 63 6f 6e 64 0a 2a 2a 20 61 72 67 75 6d 65 6e 74  cond.** argument
2ff80 20 6d 61 74 63 68 20 74 68 65 20 74 79 70 65 20   match the type 
2ff90 73 65 74 20 62 79 20 74 68 65 20 70 72 65 76 69  set by the previ
2ffa0 6f 75 73 20 73 71 6c 69 74 65 33 4d 65 6d 64 65  ous sqlite3Memde
2ffb0 62 75 67 53 65 74 54 79 70 65 28 29 2e 0a 2a 2a  bugSetType()..**
2ffc0 0a 2a 2a 20 50 65 72 68 61 70 73 20 74 68 65 20  .** Perhaps the 
2ffd0 6d 6f 73 74 20 69 6d 70 6f 72 74 61 6e 74 20 70  most important p
2ffe0 6f 69 6e 74 20 69 73 20 74 68 65 20 64 69 66 66  oint is the diff
2fff0 65 72 65 6e 63 65 20 62 65 74 77 65 65 6e 20 4d  erence between M
30000 45 4d 54 59 50 45 5f 48 45 41 50 0a 2a 2a 20 61  EMTYPE_HEAP.** a
30010 6e 64 20 4d 45 4d 54 59 50 45 5f 4c 4f 4f 4b 41  nd MEMTYPE_LOOKA
30020 53 49 44 45 2e 20 20 49 66 20 61 6e 20 61 6c 6c  SIDE.  If an all
30030 6f 63 61 74 69 6f 6e 20 69 73 20 4d 45 4d 54 59  ocation is MEMTY
30040 50 45 5f 4c 4f 4f 4b 41 53 49 44 45 2c 20 74 68  PE_LOOKASIDE, th
30050 61 74 20 6d 65 61 6e 73 0a 2a 2a 20 69 74 20 6d  at means.** it m
30060 69 67 68 74 20 68 61 76 65 20 62 65 65 6e 20 61  ight have been a
30070 6c 6c 6f 63 61 74 65 64 20 62 79 20 6c 6f 6f 6b  llocated by look
30080 61 73 69 64 65 2c 20 65 78 63 65 70 74 20 74 68  aside, except th
30090 65 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 77 61 73  e allocation was
300a0 0a 2a 2a 20 74 6f 6f 20 6c 61 72 67 65 20 6f 72  .** too large or
300b0 20 6c 6f 6f 6b 61 73 69 64 65 20 77 61 73 20 61   lookaside was a
300c0 6c 72 65 61 64 79 20 66 75 6c 6c 2e 20 20 49 74  lready full.  It
300d0 20 69 73 20 69 6d 70 6f 72 74 61 6e 74 20 74 6f   is important to
300e0 20 76 65 72 69 66 79 0a 2a 2a 20 74 68 61 74 20   verify.** that 
300f0 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 74 68 61 74  allocations that
30100 20 6d 69 67 68 74 20 68 61 76 65 20 62 65 65 6e   might have been
30110 20 73 61 74 69 73 66 69 65 64 20 62 79 20 6c 6f   satisfied by lo
30120 6f 6b 61 73 69 64 65 20 61 72 65 20 6e 6f 74 0a  okaside are not.
30130 2a 2a 20 70 61 73 73 65 64 20 62 61 63 6b 20 74  ** passed back t
30140 6f 20 6e 6f 6e 2d 6c 6f 6f 6b 61 73 69 64 65 20  o non-lookaside 
30150 66 72 65 65 28 29 20 72 6f 75 74 69 6e 65 73 2e  free() routines.
30160 20 20 41 73 73 65 72 74 73 20 73 75 63 68 20 61    Asserts such a
30170 73 20 74 68 65 0a 2a 2a 20 65 78 61 6d 70 6c 65  s the.** example
30180 20 61 62 6f 76 65 20 61 72 65 20 70 6c 61 63 65   above are place
30190 64 20 6f 6e 20 74 68 65 20 6e 6f 6e 2d 6c 6f 6f  d on the non-loo
301a0 6b 61 73 69 64 65 20 66 72 65 65 28 29 20 72 6f  kaside free() ro
301b0 75 74 69 6e 65 73 20 74 6f 20 76 65 72 69 66 79  utines to verify
301c0 0a 2a 2a 20 74 68 69 73 20 63 6f 6e 73 74 72 61  .** this constra
301d0 69 6e 74 2e 0a 2a 2a 0a 2a 2a 20 41 6c 6c 20 6f  int..**.** All o
301e0 66 20 74 68 69 73 20 69 73 20 6e 6f 2d 6f 70 20  f this is no-op 
301f0 66 6f 72 20 61 20 70 72 6f 64 75 63 74 69 6f 6e  for a production
30200 20 62 75 69 6c 64 2e 20 20 49 74 20 6f 6e 6c 79   build.  It only
30210 20 63 6f 6d 65 73 20 69 6e 74 6f 0a 2a 2a 20 70   comes into.** p
30220 6c 61 79 20 77 68 65 6e 20 74 68 65 20 53 51 4c  lay when the SQL
30230 49 54 45 5f 4d 45 4d 44 45 42 55 47 20 63 6f 6d  ITE_MEMDEBUG com
30240 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e  pile-time option
30250 20 69 73 20 75 73 65 64 2e 0a 2a 2f 0a 23 69 66   is used..*/.#if
30260 64 65 66 20 53 51 4c 49 54 45 5f 4d 45 4d 44 45  def SQLITE_MEMDE
30270 42 55 47 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  BUG.  void sqlit
30280 65 33 4d 65 6d 64 65 62 75 67 53 65 74 54 79 70  e3MemdebugSetTyp
30290 65 28 76 6f 69 64 2a 2c 75 38 29 3b 0a 20 20 69  e(void*,u8);.  i
302a0 6e 74 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62  nt sqlite3Memdeb
302b0 75 67 48 61 73 54 79 70 65 28 76 6f 69 64 2a 2c  ugHasType(void*,
302c0 75 38 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74  u8);.  int sqlit
302d0 65 33 4d 65 6d 64 65 62 75 67 4e 6f 54 79 70 65  e3MemdebugNoType
302e0 28 76 6f 69 64 2a 2c 75 38 29 3b 0a 23 65 6c 73  (void*,u8);.#els
302f0 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  e.# define sqlit
30300 65 33 4d 65 6d 64 65 62 75 67 53 65 74 54 79 70  e3MemdebugSetTyp
30310 65 28 58 2c 59 29 20 20 2f 2a 20 6e 6f 2d 6f 70  e(X,Y)  /* no-op
30320 20 2a 2f 0a 23 20 64 65 66 69 6e 65 20 73 71 6c   */.# define sql
30330 69 74 65 33 4d 65 6d 64 65 62 75 67 48 61 73 54  ite3MemdebugHasT
30340 79 70 65 28 58 2c 59 29 20 20 31 0a 23 20 64 65  ype(X,Y)  1.# de
30350 66 69 6e 65 20 73 71 6c 69 74 65 33 4d 65 6d 64  fine sqlite3Memd
30360 65 62 75 67 4e 6f 54 79 70 65 28 58 2c 59 29 20  ebugNoType(X,Y) 
30370 20 20 31 0a 23 65 6e 64 69 66 0a 23 64 65 66 69    1.#endif.#defi
30380 6e 65 20 4d 45 4d 54 59 50 45 5f 48 45 41 50 20  ne MEMTYPE_HEAP 
30390 20 20 20 20 20 20 30 78 30 31 20 20 2f 2a 20 47        0x01  /* G
303a0 65 6e 65 72 61 6c 20 68 65 61 70 20 61 6c 6c 6f  eneral heap allo
303b0 63 61 74 69 6f 6e 73 20 2a 2f 0a 23 64 65 66 69  cations */.#defi
303c0 6e 65 20 4d 45 4d 54 59 50 45 5f 4c 4f 4f 4b 41  ne MEMTYPE_LOOKA
303d0 53 49 44 45 20 20 30 78 30 32 20 20 2f 2a 20 48  SIDE  0x02  /* H
303e0 65 61 70 20 74 68 61 74 20 6d 69 67 68 74 20 68  eap that might h
303f0 61 76 65 20 62 65 65 6e 20 6c 6f 6f 6b 61 73 69  ave been lookasi
30400 64 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 45  de */.#define ME
30410 4d 54 59 50 45 5f 50 43 41 43 48 45 20 20 20 20  MTYPE_PCACHE    
30420 20 30 78 30 34 20 20 2f 2a 20 50 61 67 65 20 63   0x04  /* Page c
30430 61 63 68 65 20 61 6c 6c 6f 63 61 74 69 6f 6e 73  ache allocations
30440 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68 72 65 61   */../*.** Threa
30450 64 69 6e 67 20 69 6e 74 65 72 66 61 63 65 0a 2a  ding interface.*
30460 2f 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d 41 58  /.#if SQLITE_MAX
30470 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41 44 53 3e  _WORKER_THREADS>
30480 30 0a 69 6e 74 20 73 71 6c 69 74 65 33 54 68 72  0.int sqlite3Thr
30490 65 61 64 43 72 65 61 74 65 28 53 51 4c 69 74 65  eadCreate(SQLite
304a0 54 68 72 65 61 64 2a 2a 2c 76 6f 69 64 2a 28 2a  Thread**,void*(*
304b0 29 28 76 6f 69 64 2a 29 2c 76 6f 69 64 2a 29 3b  )(void*),void*);
304c0 0a 69 6e 74 20 73 71 6c 69 74 65 33 54 68 72 65  .int sqlite3Thre
304d0 61 64 4a 6f 69 6e 28 53 51 4c 69 74 65 54 68 72  adJoin(SQLiteThr
304e0 65 61 64 2a 2c 20 76 6f 69 64 2a 2a 29 3b 0a 23  ead*, void**);.#
304f0 65 6e 64 69 66 0a 0a 23 69 66 20 64 65 66 69 6e  endif..#if defin
30500 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ed(SQLITE_ENABLE
30510 5f 44 42 50 41 47 45 5f 56 54 41 42 29 20 7c 7c  _DBPAGE_VTAB) ||
30520 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
30530 54 45 53 54 29 0a 69 6e 74 20 73 71 6c 69 74 65  TEST).int sqlite
30540 33 44 62 70 61 67 65 52 65 67 69 73 74 65 72 28  3DbpageRegister(
30550 73 71 6c 69 74 65 33 2a 29 3b 0a 23 65 6e 64 69  sqlite3*);.#endi
30560 66 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51  f.#if defined(SQ
30570 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 44 42 53 54  LITE_ENABLE_DBST
30580 41 54 5f 56 54 41 42 29 20 7c 7c 20 64 65 66 69  AT_VTAB) || defi
30590 6e 65 64 28 53 51 4c 49 54 45 5f 54 45 53 54 29  ned(SQLITE_TEST)
305a0 0a 69 6e 74 20 73 71 6c 69 74 65 33 44 62 73 74  .int sqlite3Dbst
305b0 61 74 52 65 67 69 73 74 65 72 28 73 71 6c 69 74  atRegister(sqlit
305c0 65 33 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 69 6e  e3*);.#endif..in
305d0 74 20 73 71 6c 69 74 65 33 45 78 70 72 56 65 63  t sqlite3ExprVec
305e0 74 6f 72 53 69 7a 65 28 45 78 70 72 20 2a 70 45  torSize(Expr *pE
305f0 78 70 72 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  xpr);.int sqlite
30600 33 45 78 70 72 49 73 56 65 63 74 6f 72 28 45 78  3ExprIsVector(Ex
30610 70 72 20 2a 70 45 78 70 72 29 3b 0a 45 78 70 72  pr *pExpr);.Expr
30620 20 2a 73 71 6c 69 74 65 33 56 65 63 74 6f 72 46   *sqlite3VectorF
30630 69 65 6c 64 53 75 62 65 78 70 72 28 45 78 70 72  ieldSubexpr(Expr
30640 2a 2c 20 69 6e 74 29 3b 0a 45 78 70 72 20 2a 73  *, int);.Expr *s
30650 71 6c 69 74 65 33 45 78 70 72 46 6f 72 56 65 63  qlite3ExprForVec
30660 74 6f 72 46 69 65 6c 64 28 50 61 72 73 65 2a 2c  torField(Parse*,
30670 45 78 70 72 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64  Expr*,int);.void
30680 20 73 71 6c 69 74 65 33 56 65 63 74 6f 72 45 72   sqlite3VectorEr
30690 72 6f 72 4d 73 67 28 50 61 72 73 65 2a 2c 20 45  rorMsg(Parse*, E
306a0 78 70 72 2a 29 3b 0a 0a 23 69 66 6e 64 65 66 20  xpr*);..#ifndef 
306b0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 4f 4d 50  SQLITE_OMIT_COMP
306c0 49 4c 45 4f 50 54 49 4f 4e 5f 44 49 41 47 53 0a  ILEOPTION_DIAGS.
306d0 63 6f 6e 73 74 20 63 68 61 72 20 2a 2a 73 71 6c  const char **sql
306e0 69 74 65 33 43 6f 6d 70 69 6c 65 4f 70 74 69 6f  ite3CompileOptio
306f0 6e 73 28 69 6e 74 20 2a 70 6e 4f 70 74 29 3b 0a  ns(int *pnOpt);.
30700 23 65 6e 64 69 66 0a 0a 23 65 6e 64 69 66 20 2f  #endif..#endif /
30710 2a 20 53 51 4c 49 54 45 49 4e 54 5f 48 20 2a 2f  * SQLITEINT_H */
30720 0a                                               .