/ Hex Artifact Content
Login

Artifact c85e80d38406614b6de7f4afe5856c8cb3126b14b5ac95fcffe51bdf6c4464d9:


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 54 68 69 73 20 69 73 20 61  ./*.** This is a
2ff0: 20 6d 61 67 69 63 20 73 74 72 69 6e 67 20 74 68   magic string th
3000: 61 74 20 61 70 70 65 61 72 73 20 61 74 20 74 68  at appears at th
3010: 65 20 62 65 67 69 6e 6e 69 6e 67 20 6f 66 20 65  e beginning of e
3020: 76 65 72 79 0a 2a 2a 20 53 51 4c 69 74 65 20 64  very.** SQLite d
3030: 61 74 61 62 61 73 65 20 69 6e 20 6f 72 64 65 72  atabase in order
3040: 20 74 6f 20 69 64 65 6e 74 69 66 79 20 74 68 65   to identify the
3050: 20 66 69 6c 65 20 61 73 20 61 20 72 65 61 6c 20   file as a real 
3060: 64 61 74 61 62 61 73 65 2e 0a 2a 2a 0a 2a 2a 20  database..**.** 
3070: 59 6f 75 20 63 61 6e 20 63 68 61 6e 67 65 20 74  You can change t
3080: 68 69 73 20 76 61 6c 75 65 20 61 74 20 63 6f 6d  his value at com
3090: 70 69 6c 65 2d 74 69 6d 65 20 62 79 20 73 70 65  pile-time by spe
30a0: 63 69 66 79 69 6e 67 20 61 0a 2a 2a 20 2d 44 53  cifying a.** -DS
30b0: 51 4c 49 54 45 5f 46 49 4c 45 5f 48 45 41 44 45  QLITE_FILE_HEADE
30c0: 52 3d 22 2e 2e 2e 22 20 6f 6e 20 74 68 65 20 63  R="..." on the c
30d0: 6f 6d 70 69 6c 65 72 20 63 6f 6d 6d 61 6e 64 2d  ompiler command-
30e0: 6c 69 6e 65 2e 20 20 54 68 65 0a 2a 2a 20 68 65  line.  The.** he
30f0: 61 64 65 72 20 6d 75 73 74 20 62 65 20 65 78 61  ader must be exa
3100: 63 74 6c 79 20 31 36 20 62 79 74 65 73 20 69 6e  ctly 16 bytes in
3110: 63 6c 75 64 69 6e 67 20 74 68 65 20 7a 65 72 6f  cluding the zero
3120: 2d 74 65 72 6d 69 6e 61 74 6f 72 20 73 6f 0a 2a  -terminator so.*
3130: 2a 20 74 68 65 20 73 74 72 69 6e 67 20 69 74 73  * the string its
3140: 65 6c 66 20 73 68 6f 75 6c 64 20 62 65 20 31 35  elf should be 15
3150: 20 63 68 61 72 61 63 74 65 72 73 20 6c 6f 6e 67   characters long
3160: 2e 20 20 49 66 20 79 6f 75 20 63 68 61 6e 67 65  .  If you change
3170: 0a 2a 2a 20 74 68 65 20 68 65 61 64 65 72 2c 20  .** the header, 
3180: 74 68 65 6e 20 79 6f 75 72 20 63 75 73 74 6f 6d  then your custom
3190: 20 6c 69 62 72 61 72 79 20 77 69 6c 6c 20 6e 6f   library will no
31a0: 74 20 62 65 20 61 62 6c 65 20 74 6f 20 72 65 61  t be able to rea
31b0: 64 20 0a 2a 2a 20 64 61 74 61 62 61 73 65 73 20  d .** databases 
31c0: 67 65 6e 65 72 61 74 65 64 20 62 79 20 74 68 65  generated by the
31d0: 20 73 74 61 6e 64 61 72 64 20 74 6f 6f 6c 73 20   standard tools 
31e0: 61 6e 64 20 74 68 65 20 73 74 61 6e 64 61 72 64  and the standard
31f0: 20 74 6f 6f 6c 73 0a 2a 2a 20 77 69 6c 6c 20 6e   tools.** will n
3200: 6f 74 20 62 65 20 61 62 6c 65 20 74 6f 20 72 65  ot be able to re
3210: 61 64 20 64 61 74 61 62 61 73 65 73 20 63 72 65  ad databases cre
3220: 61 74 65 64 20 62 79 20 79 6f 75 72 20 63 75 73  ated by your cus
3230: 74 6f 6d 20 6c 69 62 72 61 72 79 2e 0a 2a 2f 0a  tom library..*/.
3240: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 46  #ifndef SQLITE_F
3250: 49 4c 45 5f 48 45 41 44 45 52 20 2f 2a 20 31 32  ILE_HEADER /* 12
3260: 33 34 35 36 37 38 39 20 31 32 33 34 35 36 20 2a  3456789 123456 *
3270: 2f 0a 23 20 20 64 65 66 69 6e 65 20 53 51 4c 49  /.#  define SQLI
3280: 54 45 5f 46 49 4c 45 5f 48 45 41 44 45 52 20 22  TE_FILE_HEADER "
3290: 53 51 4c 69 74 65 20 66 6f 72 6d 61 74 20 33 22  SQLite format 3"
32a0: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49  .#endif../*.** I
32b0: 66 20 53 51 4c 49 54 45 5f 4d 41 4c 4c 4f 43 5f  f SQLITE_MALLOC_
32c0: 53 4f 46 54 5f 4c 49 4d 49 54 20 69 73 20 6e 6f  SOFT_LIMIT is no
32d0: 74 20 7a 65 72 6f 2c 20 74 68 65 6e 20 74 72 79  t zero, then try
32e0: 20 74 6f 20 6b 65 65 70 20 74 68 65 0a 2a 2a 20   to keep the.** 
32f0: 73 69 7a 65 73 20 6f 66 20 6d 65 6d 6f 72 79 20  sizes of memory 
3300: 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 62 65 6c 6f  allocations belo
3310: 77 20 74 68 69 73 20 76 61 6c 75 65 20 77 68 65  w this value whe
3320: 72 65 20 70 6f 73 73 69 62 6c 65 2e 0a 2a 2f 0a  re possible..*/.
3330: 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c  #if !defined(SQL
3340: 49 54 45 5f 4d 41 4c 4c 4f 43 5f 53 4f 46 54 5f  ITE_MALLOC_SOFT_
3350: 4c 49 4d 49 54 29 0a 23 20 64 65 66 69 6e 65 20  LIMIT).# define 
3360: 53 51 4c 49 54 45 5f 4d 41 4c 4c 4f 43 5f 53 4f  SQLITE_MALLOC_SO
3370: 46 54 5f 4c 49 4d 49 54 20 31 30 32 34 0a 23 65  FT_LIMIT 1024.#e
3380: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 57 65 20 6e  ndif../*.** We n
3390: 65 65 64 20 74 6f 20 64 65 66 69 6e 65 20 5f 58  eed to define _X
33a0: 4f 50 45 4e 5f 53 4f 55 52 43 45 20 61 73 20 66  OPEN_SOURCE as f
33b0: 6f 6c 6c 6f 77 73 20 69 6e 20 6f 72 64 65 72 20  ollows in order 
33c0: 74 6f 20 65 6e 61 62 6c 65 0a 2a 2a 20 72 65 63  to enable.** rec
33d0: 75 72 73 69 76 65 20 6d 75 74 65 78 65 73 20 6f  ursive mutexes o
33e0: 6e 20 6d 6f 73 74 20 55 6e 69 78 20 73 79 73 74  n most Unix syst
33f0: 65 6d 73 20 61 6e 64 20 66 63 68 6d 6f 64 28 29  ems and fchmod()
3400: 20 6f 6e 20 4f 70 65 6e 42 53 44 2e 0a 2a 2a 20   on OpenBSD..** 
3410: 42 75 74 20 5f 58 4f 50 45 4e 5f 53 4f 55 52 43  But _XOPEN_SOURC
3420: 45 20 64 65 66 69 6e 65 20 63 61 75 73 65 73 20  E define causes 
3430: 70 72 6f 62 6c 65 6d 73 20 66 6f 72 20 4d 61 63  problems for Mac
3440: 20 4f 53 20 58 2c 20 73 6f 20 6f 6d 69 74 0a 2a   OS X, so omit.*
3450: 2a 20 69 74 2e 0a 2a 2f 0a 23 69 66 20 21 64 65  * it..*/.#if !de
3460: 66 69 6e 65 64 28 5f 58 4f 50 45 4e 5f 53 4f 55  fined(_XOPEN_SOU
3470: 52 43 45 29 20 26 26 20 21 64 65 66 69 6e 65 64  RCE) && !defined
3480: 28 5f 5f 44 41 52 57 49 4e 5f 5f 29 20 26 26 20  (__DARWIN__) && 
3490: 21 64 65 66 69 6e 65 64 28 5f 5f 41 50 50 4c 45  !defined(__APPLE
34a0: 5f 5f 29 0a 23 20 20 64 65 66 69 6e 65 20 5f 58  __).#  define _X
34b0: 4f 50 45 4e 5f 53 4f 55 52 43 45 20 36 30 30 0a  OPEN_SOURCE 600.
34c0: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 4e 44  #endif../*.** ND
34d0: 45 42 55 47 20 61 6e 64 20 53 51 4c 49 54 45 5f  EBUG and SQLITE_
34e0: 44 45 42 55 47 20 61 72 65 20 6f 70 70 6f 73 69  DEBUG are opposi
34f0: 74 65 73 2e 20 20 49 74 20 73 68 6f 75 6c 64 20  tes.  It should 
3500: 61 6c 77 61 79 73 20 62 65 20 74 72 75 65 20 74  always be true t
3510: 68 61 74 0a 2a 2a 20 64 65 66 69 6e 65 64 28 4e  hat.** defined(N
3520: 44 45 42 55 47 29 3d 3d 21 64 65 66 69 6e 65 64  DEBUG)==!defined
3530: 28 53 51 4c 49 54 45 5f 44 45 42 55 47 29 2e 20  (SQLITE_DEBUG). 
3540: 20 49 66 20 74 68 69 73 20 69 73 20 6e 6f 74 20   If this is not 
3550: 63 75 72 72 65 6e 74 6c 79 20 74 72 75 65 2c 0a  currently true,.
3560: 2a 2a 20 6d 61 6b 65 20 69 74 20 74 72 75 65 20  ** make it true 
3570: 62 79 20 64 65 66 69 6e 69 6e 67 20 6f 72 20 75  by defining or u
3580: 6e 64 65 66 69 6e 69 6e 67 20 4e 44 45 42 55 47  ndefining NDEBUG
3590: 2e 0a 2a 2a 0a 2a 2a 20 53 65 74 74 69 6e 67 20  ..**.** Setting 
35a0: 4e 44 45 42 55 47 20 6d 61 6b 65 73 20 74 68 65  NDEBUG makes the
35b0: 20 63 6f 64 65 20 73 6d 61 6c 6c 65 72 20 61 6e   code smaller an
35c0: 64 20 66 61 73 74 65 72 20 62 79 20 64 69 73 61  d faster by disa
35d0: 62 6c 69 6e 67 20 74 68 65 0a 2a 2a 20 61 73 73  bling the.** ass
35e0: 65 72 74 28 29 20 73 74 61 74 65 6d 65 6e 74 73  ert() statements
35f0: 20 69 6e 20 74 68 65 20 63 6f 64 65 2e 20 20 53   in the code.  S
3600: 6f 20 77 65 20 77 61 6e 74 20 74 68 65 20 64 65  o we want the de
3610: 66 61 75 6c 74 20 61 63 74 69 6f 6e 0a 2a 2a 20  fault action.** 
3620: 74 6f 20 62 65 20 66 6f 72 20 4e 44 45 42 55 47  to be for NDEBUG
3630: 20 74 6f 20 62 65 20 73 65 74 20 61 6e 64 20 4e   to be set and N
3640: 44 45 42 55 47 20 74 6f 20 62 65 20 75 6e 64 65  DEBUG to be unde
3650: 66 69 6e 65 64 20 6f 6e 6c 79 20 69 66 20 53 51  fined only if SQ
3660: 4c 49 54 45 5f 44 45 42 55 47 0a 2a 2a 20 69 73  LITE_DEBUG.** is
3670: 20 73 65 74 2e 20 20 54 68 75 73 20 4e 44 45 42   set.  Thus NDEB
3680: 55 47 20 62 65 63 6f 6d 65 73 20 61 6e 20 6f 70  UG becomes an op
3690: 74 2d 69 6e 20 72 61 74 68 65 72 20 74 68 61 6e  t-in rather than
36a0: 20 61 6e 20 6f 70 74 2d 6f 75 74 0a 2a 2a 20 66   an opt-out.** f
36b0: 65 61 74 75 72 65 2e 0a 2a 2f 0a 23 69 66 20 21  eature..*/.#if !
36c0: 64 65 66 69 6e 65 64 28 4e 44 45 42 55 47 29 20  defined(NDEBUG) 
36d0: 26 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  && !defined(SQLI
36e0: 54 45 5f 44 45 42 55 47 29 0a 23 20 64 65 66 69  TE_DEBUG).# defi
36f0: 6e 65 20 4e 44 45 42 55 47 20 31 0a 23 65 6e 64  ne NDEBUG 1.#end
3700: 69 66 0a 23 69 66 20 64 65 66 69 6e 65 64 28 4e  if.#if defined(N
3710: 44 45 42 55 47 29 20 26 26 20 64 65 66 69 6e 65  DEBUG) && define
3720: 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47 29 0a  d(SQLITE_DEBUG).
3730: 23 20 75 6e 64 65 66 20 4e 44 45 42 55 47 0a 23  # undef NDEBUG.#
3740: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 45 6e 61  endif../*.** Ena
3750: 62 6c 65 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  ble SQLITE_ENABL
3760: 45 5f 45 58 50 4c 41 49 4e 5f 43 4f 4d 4d 45 4e  E_EXPLAIN_COMMEN
3770: 54 53 20 69 66 20 53 51 4c 49 54 45 5f 44 45 42  TS if SQLITE_DEB
3780: 55 47 20 69 73 20 74 75 72 6e 65 64 20 6f 6e 2e  UG is turned on.
3790: 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64  .*/.#if !defined
37a0: 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 45  (SQLITE_ENABLE_E
37b0: 58 50 4c 41 49 4e 5f 43 4f 4d 4d 45 4e 54 53 29  XPLAIN_COMMENTS)
37c0: 20 26 26 20 64 65 66 69 6e 65 64 28 53 51 4c 49   && defined(SQLI
37d0: 54 45 5f 44 45 42 55 47 29 0a 23 20 64 65 66 69  TE_DEBUG).# defi
37e0: 6e 65 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ne SQLITE_ENABLE
37f0: 5f 45 58 50 4c 41 49 4e 5f 43 4f 4d 4d 45 4e 54  _EXPLAIN_COMMENT
3800: 53 20 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  S 1.#endif../*.*
3810: 2a 20 54 68 65 20 74 65 73 74 63 61 73 65 28 29  * The testcase()
3820: 20 6d 61 63 72 6f 20 69 73 20 75 73 65 64 20 74   macro is used t
3830: 6f 20 61 69 64 20 69 6e 20 63 6f 76 65 72 61 67  o aid in coverag
3840: 65 20 74 65 73 74 69 6e 67 2e 20 20 57 68 65 6e  e testing.  When
3850: 0a 2a 2a 20 64 6f 69 6e 67 20 63 6f 76 65 72 61  .** doing covera
3860: 67 65 20 74 65 73 74 69 6e 67 2c 20 74 68 65 20  ge testing, the 
3870: 63 6f 6e 64 69 74 69 6f 6e 20 69 6e 73 69 64 65  condition inside
3880: 20 74 68 65 20 61 72 67 75 6d 65 6e 74 20 74 6f   the argument to
3890: 0a 2a 2a 20 74 65 73 74 63 61 73 65 28 29 20 6d  .** testcase() m
38a0: 75 73 74 20 62 65 20 65 76 61 6c 75 61 74 65 64  ust be evaluated
38b0: 20 62 6f 74 68 20 74 72 75 65 20 61 6e 64 20 66   both true and f
38c0: 61 6c 73 65 20 69 6e 20 6f 72 64 65 72 20 74 6f  alse in order to
38d0: 0a 2a 2a 20 67 65 74 20 66 75 6c 6c 20 62 72 61  .** get full bra
38e0: 6e 63 68 20 63 6f 76 65 72 61 67 65 2e 20 20 54  nch coverage.  T
38f0: 68 65 20 74 65 73 74 63 61 73 65 28 29 20 6d 61  he testcase() ma
3900: 63 72 6f 20 69 73 20 69 6e 73 65 72 74 65 64 0a  cro is inserted.
3910: 2a 2a 20 74 6f 20 68 65 6c 70 20 65 6e 73 75 72  ** to help ensur
3920: 65 20 61 64 65 71 75 61 74 65 20 74 65 73 74 20  e adequate test 
3930: 63 6f 76 65 72 61 67 65 20 69 6e 20 70 6c 61 63  coverage in plac
3940: 65 73 20 77 68 65 72 65 20 73 69 6d 70 6c 65 0a  es where simple.
3950: 2a 2a 20 63 6f 6e 64 69 74 69 6f 6e 2f 64 65 63  ** condition/dec
3960: 69 73 69 6f 6e 20 63 6f 76 65 72 61 67 65 20 69  ision coverage i
3970: 73 20 69 6e 61 64 65 71 75 61 74 65 2e 20 20 46  s inadequate.  F
3980: 6f 72 20 65 78 61 6d 70 6c 65 2c 20 74 65 73 74  or example, test
3990: 63 61 73 65 28 29 0a 2a 2a 20 63 61 6e 20 62 65  case().** can be
39a0: 20 75 73 65 64 20 74 6f 20 6d 61 6b 65 20 73 75   used to make su
39b0: 72 65 20 62 6f 75 6e 64 61 72 79 20 76 61 6c 75  re boundary valu
39c0: 65 73 20 61 72 65 20 74 65 73 74 65 64 2e 20 20  es are tested.  
39d0: 46 6f 72 0a 2a 2a 20 62 69 74 6d 61 73 6b 20 74  For.** bitmask t
39e0: 65 73 74 73 2c 20 74 65 73 74 63 61 73 65 28 29  ests, testcase()
39f0: 20 63 61 6e 20 62 65 20 75 73 65 64 20 74 6f 20   can be used to 
3a00: 6d 61 6b 65 20 73 75 72 65 20 65 61 63 68 20 62  make sure each b
3a10: 69 74 0a 2a 2a 20 69 73 20 73 69 67 6e 69 66 69  it.** is signifi
3a20: 63 61 6e 74 20 61 6e 64 20 75 73 65 64 20 61 74  cant and used at
3a30: 20 6c 65 61 73 74 20 6f 6e 63 65 2e 20 20 4f 6e   least once.  On
3a40: 20 73 77 69 74 63 68 20 73 74 61 74 65 6d 65 6e   switch statemen
3a50: 74 73 0a 2a 2a 20 77 68 65 72 65 20 6d 75 6c 74  ts.** where mult
3a60: 69 70 6c 65 20 63 61 73 65 73 20 67 6f 20 74 6f  iple cases go to
3a70: 20 74 68 65 20 73 61 6d 65 20 62 6c 6f 63 6b 20   the same block 
3a80: 6f 66 20 63 6f 64 65 2c 20 74 65 73 74 63 61 73  of code, testcas
3a90: 65 28 29 0a 2a 2a 20 63 61 6e 20 69 6e 73 75 72  e().** can insur
3aa0: 65 20 74 68 61 74 20 61 6c 6c 20 63 61 73 65 73  e that all cases
3ab0: 20 61 72 65 20 65 76 61 6c 75 61 74 65 64 2e 0a   are evaluated..
3ac0: 2a 2a 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c  **.*/.#ifdef SQL
3ad0: 49 54 45 5f 43 4f 56 45 52 41 47 45 5f 54 45 53  ITE_COVERAGE_TES
3ae0: 54 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  T.  void sqlite3
3af0: 43 6f 76 65 72 61 67 65 28 69 6e 74 29 3b 0a 23  Coverage(int);.#
3b00: 20 64 65 66 69 6e 65 20 74 65 73 74 63 61 73 65   define testcase
3b10: 28 58 29 20 20 69 66 28 20 58 20 29 7b 20 73 71  (X)  if( X ){ sq
3b20: 6c 69 74 65 33 43 6f 76 65 72 61 67 65 28 5f 5f  lite3Coverage(__
3b30: 4c 49 4e 45 5f 5f 29 3b 20 7d 0a 23 65 6c 73 65  LINE__); }.#else
3b40: 0a 23 20 64 65 66 69 6e 65 20 74 65 73 74 63 61  .# define testca
3b50: 73 65 28 58 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a  se(X).#endif../*
3b60: 0a 2a 2a 20 54 68 65 20 54 45 53 54 4f 4e 4c 59  .** The TESTONLY
3b70: 20 6d 61 63 72 6f 20 69 73 20 75 73 65 64 20 74   macro is used t
3b80: 6f 20 65 6e 63 6c 6f 73 65 20 76 61 72 69 61 62  o enclose variab
3b90: 6c 65 20 64 65 63 6c 61 72 61 74 69 6f 6e 73 20  le declarations 
3ba0: 6f 72 0a 2a 2a 20 6f 74 68 65 72 20 62 69 74 73  or.** other bits
3bb0: 20 6f 66 20 63 6f 64 65 20 74 68 61 74 20 61 72   of code that ar
3bc0: 65 20 6e 65 65 64 65 64 20 74 6f 20 73 75 70 70  e needed to supp
3bd0: 6f 72 74 20 74 68 65 20 61 72 67 75 6d 65 6e 74  ort the argument
3be0: 73 0a 2a 2a 20 77 69 74 68 69 6e 20 74 65 73 74  s.** within test
3bf0: 63 61 73 65 28 29 20 61 6e 64 20 61 73 73 65 72  case() and asser
3c00: 74 28 29 20 6d 61 63 72 6f 73 2e 0a 2a 2f 0a 23  t() macros..*/.#
3c10: 69 66 20 21 64 65 66 69 6e 65 64 28 4e 44 45 42  if !defined(NDEB
3c20: 55 47 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 53  UG) || defined(S
3c30: 51 4c 49 54 45 5f 43 4f 56 45 52 41 47 45 5f 54  QLITE_COVERAGE_T
3c40: 45 53 54 29 0a 23 20 64 65 66 69 6e 65 20 54 45  EST).# define TE
3c50: 53 54 4f 4e 4c 59 28 58 29 20 20 58 0a 23 65 6c  STONLY(X)  X.#el
3c60: 73 65 0a 23 20 64 65 66 69 6e 65 20 54 45 53 54  se.# define TEST
3c70: 4f 4e 4c 59 28 58 29 0a 23 65 6e 64 69 66 0a 0a  ONLY(X).#endif..
3c80: 2f 2a 0a 2a 2a 20 53 6f 6d 65 74 69 6d 65 73 20  /*.** Sometimes 
3c90: 77 65 20 6e 65 65 64 20 61 20 73 6d 61 6c 6c 20  we need a small 
3ca0: 61 6d 6f 75 6e 74 20 6f 66 20 63 6f 64 65 20 73  amount of code s
3cb0: 75 63 68 20 61 73 20 61 20 76 61 72 69 61 62 6c  uch as a variabl
3cc0: 65 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e  e initialization
3cd0: 0a 2a 2a 20 74 6f 20 73 65 74 75 70 20 66 6f 72  .** to setup for
3ce0: 20 61 20 6c 61 74 65 72 20 61 73 73 65 72 74 28   a later assert(
3cf0: 29 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 57 65  ) statement.  We
3d00: 20 64 6f 20 6e 6f 74 20 77 61 6e 74 20 74 68 69   do not want thi
3d10: 73 20 63 6f 64 65 20 74 6f 0a 2a 2a 20 61 70 70  s code to.** app
3d20: 65 61 72 20 77 68 65 6e 20 61 73 73 65 72 74 28  ear when assert(
3d30: 29 20 69 73 20 64 69 73 61 62 6c 65 64 2e 20 20  ) is disabled.  
3d40: 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61  The following ma
3d50: 63 72 6f 20 69 73 20 74 68 65 72 65 66 6f 72 65  cro is therefore
3d60: 0a 2a 2a 20 75 73 65 64 20 74 6f 20 63 6f 6e 74  .** used to cont
3d70: 61 69 6e 20 74 68 61 74 20 73 65 74 75 70 20 63  ain that setup c
3d80: 6f 64 65 2e 20 20 54 68 65 20 22 56 56 41 22 20  ode.  The "VVA" 
3d90: 61 63 72 6f 6e 79 6d 20 73 74 61 6e 64 73 20 66  acronym stands f
3da0: 6f 72 0a 2a 2a 20 22 56 65 72 69 66 69 63 61 74  or.** "Verificat
3db0: 69 6f 6e 2c 20 56 61 6c 69 64 61 74 69 6f 6e 2c  ion, Validation,
3dc0: 20 61 6e 64 20 41 63 63 72 65 64 69 74 61 74 69   and Accreditati
3dd0: 6f 6e 22 2e 20 20 49 6e 20 6f 74 68 65 72 20 77  on".  In other w
3de0: 6f 72 64 73 2c 20 74 68 65 0a 2a 2a 20 63 6f 64  ords, the.** cod
3df0: 65 20 77 69 74 68 69 6e 20 56 56 41 5f 4f 4e 4c  e within VVA_ONL
3e00: 59 28 29 20 77 69 6c 6c 20 6f 6e 6c 79 20 72 75  Y() will only ru
3e10: 6e 20 64 75 72 69 6e 67 20 76 65 72 69 66 69 63  n during verific
3e20: 61 74 69 6f 6e 20 70 72 6f 63 65 73 73 65 73 2e  ation processes.
3e30: 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 4e 44 45 42  .*/.#ifndef NDEB
3e40: 55 47 0a 23 20 64 65 66 69 6e 65 20 56 56 41 5f  UG.# define VVA_
3e50: 4f 4e 4c 59 28 58 29 20 20 58 0a 23 65 6c 73 65  ONLY(X)  X.#else
3e60: 0a 23 20 64 65 66 69 6e 65 20 56 56 41 5f 4f 4e  .# define VVA_ON
3e70: 4c 59 28 58 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a  LY(X).#endif../*
3e80: 0a 2a 2a 20 54 68 65 20 41 4c 57 41 59 53 20 61  .** The ALWAYS a
3e90: 6e 64 20 4e 45 56 45 52 20 6d 61 63 72 6f 73 20  nd NEVER macros 
3ea0: 73 75 72 72 6f 75 6e 64 20 62 6f 6f 6c 65 61 6e  surround boolean
3eb0: 20 65 78 70 72 65 73 73 69 6f 6e 73 20 77 68 69   expressions whi
3ec0: 63 68 0a 2a 2a 20 61 72 65 20 69 6e 74 65 6e 64  ch.** are intend
3ed0: 65 64 20 74 6f 20 61 6c 77 61 79 73 20 62 65 20  ed to always be 
3ee0: 74 72 75 65 20 6f 72 20 66 61 6c 73 65 2c 20 72  true or false, r
3ef0: 65 73 70 65 63 74 69 76 65 6c 79 2e 20 20 53 75  espectively.  Su
3f00: 63 68 0a 2a 2a 20 65 78 70 72 65 73 73 69 6f 6e  ch.** expression
3f10: 73 20 63 6f 75 6c 64 20 62 65 20 6f 6d 69 74 74  s could be omitt
3f20: 65 64 20 66 72 6f 6d 20 74 68 65 20 63 6f 64 65  ed from the code
3f30: 20 63 6f 6d 70 6c 65 74 65 6c 79 2e 20 20 42 75   completely.  Bu
3f40: 74 20 74 68 65 79 0a 2a 2a 20 61 72 65 20 69 6e  t they.** are in
3f50: 63 6c 75 64 65 64 20 69 6e 20 61 20 66 65 77 20  cluded in a few 
3f60: 63 61 73 65 73 20 69 6e 20 6f 72 64 65 72 20 74  cases in order t
3f70: 6f 20 65 6e 68 61 6e 63 65 20 74 68 65 20 72 65  o enhance the re
3f80: 73 69 6c 69 65 6e 63 65 0a 2a 2a 20 6f 66 20 53  silience.** of S
3f90: 51 4c 69 74 65 20 74 6f 20 75 6e 65 78 70 65 63  QLite to unexpec
3fa0: 74 65 64 20 62 65 68 61 76 69 6f 72 20 2d 20 74  ted behavior - t
3fb0: 6f 20 6d 61 6b 65 20 74 68 65 20 63 6f 64 65 20  o make the code 
3fc0: 22 73 65 6c 66 2d 68 65 61 6c 69 6e 67 22 0a 2a  "self-healing".*
3fd0: 2a 20 6f 72 20 22 64 75 63 74 69 6c 65 22 20 72  * or "ductile" r
3fe0: 61 74 68 65 72 20 74 68 61 6e 20 62 65 69 6e 67  ather than being
3ff0: 20 22 62 72 69 74 74 6c 65 22 20 61 6e 64 20 63   "brittle" and c
4000: 72 61 73 68 69 6e 67 20 61 74 20 74 68 65 20 66  rashing at the f
4010: 69 72 73 74 0a 2a 2a 20 68 69 6e 74 20 6f 66 20  irst.** hint of 
4020: 75 6e 70 6c 61 6e 6e 65 64 20 62 65 68 61 76 69  unplanned behavi
4030: 6f 72 2e 0a 2a 2a 0a 2a 2a 20 49 6e 20 6f 74 68  or..**.** In oth
4040: 65 72 20 77 6f 72 64 73 2c 20 41 4c 57 41 59 53  er words, ALWAYS
4050: 20 61 6e 64 20 4e 45 56 45 52 20 61 72 65 20 61   and NEVER are a
4060: 64 64 65 64 20 66 6f 72 20 64 65 66 65 6e 73 69  dded for defensi
4070: 76 65 20 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 57  ve code..**.** W
4080: 68 65 6e 20 64 6f 69 6e 67 20 63 6f 76 65 72 61  hen doing covera
4090: 67 65 20 74 65 73 74 69 6e 67 20 41 4c 57 41 59  ge testing ALWAY
40a0: 53 20 61 6e 64 20 4e 45 56 45 52 20 61 72 65 20  S and NEVER are 
40b0: 68 61 72 64 2d 63 6f 64 65 64 20 74 6f 0a 2a 2a  hard-coded to.**
40c0: 20 62 65 20 74 72 75 65 20 61 6e 64 20 66 61 6c   be true and fal
40d0: 73 65 20 73 6f 20 74 68 61 74 20 74 68 65 20 75  se so that the u
40e0: 6e 72 65 61 63 68 61 62 6c 65 20 63 6f 64 65 20  nreachable code 
40f0: 74 68 65 79 20 73 70 65 63 69 66 79 20 77 69 6c  they specify wil
4100: 6c 0a 2a 2a 20 6e 6f 74 20 62 65 20 63 6f 75 6e  l.** not be coun
4110: 74 65 64 20 61 73 20 75 6e 74 65 73 74 65 64 20  ted as untested 
4120: 63 6f 64 65 2e 0a 2a 2f 0a 23 69 66 20 64 65 66  code..*/.#if def
4130: 69 6e 65 64 28 53 51 4c 49 54 45 5f 43 4f 56 45  ined(SQLITE_COVE
4140: 52 41 47 45 5f 54 45 53 54 29 20 7c 7c 20 64 65  RAGE_TEST) || de
4150: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4d 55 54  fined(SQLITE_MUT
4160: 41 54 49 4f 4e 5f 54 45 53 54 29 0a 23 20 64 65  ATION_TEST).# de
4170: 66 69 6e 65 20 41 4c 57 41 59 53 28 58 29 20 20  fine ALWAYS(X)  
4180: 20 20 20 20 28 31 29 0a 23 20 64 65 66 69 6e 65      (1).# define
4190: 20 4e 45 56 45 52 28 58 29 20 20 20 20 20 20 20   NEVER(X)       
41a0: 28 30 29 0a 23 65 6c 69 66 20 21 64 65 66 69 6e  (0).#elif !defin
41b0: 65 64 28 4e 44 45 42 55 47 29 0a 23 20 64 65 66  ed(NDEBUG).# def
41c0: 69 6e 65 20 41 4c 57 41 59 53 28 58 29 20 20 20  ine ALWAYS(X)   
41d0: 20 20 20 28 28 58 29 3f 31 3a 28 61 73 73 65 72     ((X)?1:(asser
41e0: 74 28 30 29 2c 30 29 29 0a 23 20 64 65 66 69 6e  t(0),0)).# defin
41f0: 65 20 4e 45 56 45 52 28 58 29 20 20 20 20 20 20  e NEVER(X)      
4200: 20 28 28 58 29 3f 28 61 73 73 65 72 74 28 30 29   ((X)?(assert(0)
4210: 2c 31 29 3a 30 29 0a 23 65 6c 73 65 0a 23 20 64  ,1):0).#else.# d
4220: 65 66 69 6e 65 20 41 4c 57 41 59 53 28 58 29 20  efine ALWAYS(X) 
4230: 20 20 20 20 20 28 58 29 0a 23 20 64 65 66 69 6e       (X).# defin
4240: 65 20 4e 45 56 45 52 28 58 29 20 20 20 20 20 20  e NEVER(X)      
4250: 20 28 58 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a   (X).#endif../*.
4260: 2a 2a 20 53 6f 6d 65 20 63 6f 6e 64 69 74 69 6f  ** Some conditio
4270: 6e 61 6c 73 20 61 72 65 20 6f 70 74 69 6d 69 7a  nals are optimiz
4280: 61 74 69 6f 6e 73 20 6f 6e 6c 79 2e 20 20 49 6e  ations only.  In
4290: 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 69 66   other words, if
42a0: 20 74 68 65 0a 2a 2a 20 63 6f 6e 64 69 74 69 6f   the.** conditio
42b0: 6e 61 6c 73 20 61 72 65 20 72 65 70 6c 61 63 65  nals are replace
42c0: 64 20 77 69 74 68 20 61 20 63 6f 6e 73 74 61 6e  d with a constan
42d0: 74 20 31 20 28 74 72 75 65 29 20 6f 72 20 30 20  t 1 (true) or 0 
42e0: 28 66 61 6c 73 65 29 20 74 68 65 6e 0a 2a 2a 20  (false) then.** 
42f0: 74 68 65 20 63 6f 72 72 65 63 74 20 61 6e 73 77  the correct answ
4300: 65 72 20 69 73 20 73 74 69 6c 6c 20 6f 62 74 61  er is still obta
4310: 69 6e 65 64 2c 20 74 68 6f 75 67 68 20 70 65 72  ined, though per
4320: 68 61 70 73 20 6e 6f 74 20 61 73 20 71 75 69 63  haps not as quic
4330: 6b 6c 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 66  kly..**.** The f
4340: 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 73 20  ollowing macros 
4350: 6d 61 72 6b 20 74 68 65 73 65 20 6f 70 74 69 6d  mark these optim
4360: 69 7a 61 74 69 6f 6e 73 20 63 6f 6e 64 69 74 69  izations conditi
4370: 6f 6e 61 6c 73 2e 0a 2a 2f 0a 23 69 66 20 64 65  onals..*/.#if de
4380: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4d 55 54  fined(SQLITE_MUT
4390: 41 54 49 4f 4e 5f 54 45 53 54 29 0a 23 20 64 65  ATION_TEST).# de
43a0: 66 69 6e 65 20 4f 4b 5f 49 46 5f 41 4c 57 41 59  fine OK_IF_ALWAY
43b0: 53 5f 54 52 55 45 28 58 29 20 20 28 31 29 0a 23  S_TRUE(X)  (1).#
43c0: 20 64 65 66 69 6e 65 20 4f 4b 5f 49 46 5f 41 4c   define OK_IF_AL
43d0: 57 41 59 53 5f 46 41 4c 53 45 28 58 29 20 28 30  WAYS_FALSE(X) (0
43e0: 29 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65  ).#else.# define
43f0: 20 4f 4b 5f 49 46 5f 41 4c 57 41 59 53 5f 54 52   OK_IF_ALWAYS_TR
4400: 55 45 28 58 29 20 20 28 58 29 0a 23 20 64 65 66  UE(X)  (X).# def
4410: 69 6e 65 20 4f 4b 5f 49 46 5f 41 4c 57 41 59 53  ine OK_IF_ALWAYS
4420: 5f 46 41 4c 53 45 28 58 29 20 28 58 29 0a 23 65  _FALSE(X) (X).#e
4430: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 53 6f 6d 65  ndif../*.** Some
4440: 20 6d 61 6c 6c 6f 63 20 66 61 69 6c 75 72 65 73   malloc failures
4450: 20 61 72 65 20 6f 6e 6c 79 20 70 6f 73 73 69 62   are only possib
4460: 6c 65 20 69 66 20 53 51 4c 49 54 45 5f 54 45 53  le if SQLITE_TES
4470: 54 5f 52 45 41 4c 4c 4f 43 5f 53 54 52 45 53 53  T_REALLOC_STRESS
4480: 20 69 73 0a 2a 2a 20 64 65 66 69 6e 65 64 2e 20   is.** defined. 
4490: 20 57 65 20 6e 65 65 64 20 74 6f 20 64 65 66 65   We need to defe
44a0: 6e 64 20 61 67 61 69 6e 73 74 20 74 68 6f 73 65  nd against those
44b0: 20 66 61 69 6c 75 72 65 73 20 77 68 65 6e 20 74   failures when t
44c0: 65 73 74 69 6e 67 20 77 69 74 68 0a 2a 2a 20 53  esting with.** S
44d0: 51 4c 49 54 45 5f 54 45 53 54 5f 52 45 41 4c 4c  QLITE_TEST_REALL
44e0: 4f 43 5f 53 54 52 45 53 53 2c 20 62 75 74 20 77  OC_STRESS, but w
44f0: 65 20 64 6f 6e 27 74 20 77 61 6e 74 20 74 68 65  e don't want the
4500: 20 75 6e 72 65 61 63 68 61 62 6c 65 20 62 72 61   unreachable bra
4510: 6e 63 68 65 73 0a 2a 2a 20 64 75 72 69 6e 67 20  nches.** during 
4520: 61 20 6e 6f 72 6d 61 6c 20 62 75 69 6c 64 2e 20  a normal build. 
4530: 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d   The following m
4540: 61 63 72 6f 20 63 61 6e 20 62 65 20 75 73 65 64  acro can be used
4550: 20 74 6f 20 64 69 73 61 62 6c 65 20 74 65 73 74   to disable test
4560: 73 0a 2a 2a 20 74 68 61 74 20 61 72 65 20 61 6c  s.** that are al
4570: 77 61 79 73 20 66 61 6c 73 65 20 65 78 63 65 70  ways false excep
4580: 74 20 77 68 65 6e 20 53 51 4c 49 54 45 5f 54 45  t when SQLITE_TE
4590: 53 54 5f 52 45 41 4c 4c 4f 43 5f 53 54 52 45 53  ST_REALLOC_STRES
45a0: 53 20 69 73 20 73 65 74 2e 0a 2a 2f 0a 23 69 66  S is set..*/.#if
45b0: 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
45c0: 54 45 53 54 5f 52 45 41 4c 4c 4f 43 5f 53 54 52  TEST_REALLOC_STR
45d0: 45 53 53 29 0a 23 20 64 65 66 69 6e 65 20 4f 4e  ESS).# define ON
45e0: 4c 59 5f 49 46 5f 52 45 41 4c 4c 4f 43 5f 53 54  LY_IF_REALLOC_ST
45f0: 52 45 53 53 28 58 29 20 20 28 58 29 0a 23 65 6c  RESS(X)  (X).#el
4600: 69 66 20 21 64 65 66 69 6e 65 64 28 4e 44 45 42  if !defined(NDEB
4610: 55 47 29 0a 23 20 64 65 66 69 6e 65 20 4f 4e 4c  UG).# define ONL
4620: 59 5f 49 46 5f 52 45 41 4c 4c 4f 43 5f 53 54 52  Y_IF_REALLOC_STR
4630: 45 53 53 28 58 29 20 20 28 28 58 29 3f 28 61 73  ESS(X)  ((X)?(as
4640: 73 65 72 74 28 30 29 2c 31 29 3a 30 29 0a 23 65  sert(0),1):0).#e
4650: 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 4f 4e 4c  lse.# define ONL
4660: 59 5f 49 46 5f 52 45 41 4c 4c 4f 43 5f 53 54 52  Y_IF_REALLOC_STR
4670: 45 53 53 28 58 29 20 20 28 30 29 0a 23 65 6e 64  ESS(X)  (0).#end
4680: 69 66 0a 0a 2f 2a 0a 2a 2a 20 44 65 63 6c 61 72  if../*.** Declar
4690: 61 74 69 6f 6e 73 20 75 73 65 64 20 66 6f 72 20  ations used for 
46a0: 74 72 61 63 69 6e 67 20 74 68 65 20 6f 70 65 72  tracing the oper
46b0: 61 74 69 6e 67 20 73 79 73 74 65 6d 20 69 6e 74  ating system int
46c0: 65 72 66 61 63 65 73 2e 0a 2a 2f 0a 23 69 66 20  erfaces..*/.#if 
46d0: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 46  defined(SQLITE_F
46e0: 4f 52 43 45 5f 4f 53 5f 54 52 41 43 45 29 20 7c  ORCE_OS_TRACE) |
46f0: 7c 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  | defined(SQLITE
4700: 5f 54 45 53 54 29 20 7c 7c 20 5c 0a 20 20 20 20  _TEST) || \.    
4710: 28 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  (defined(SQLITE_
4720: 44 45 42 55 47 29 20 26 26 20 53 51 4c 49 54 45  DEBUG) && SQLITE
4730: 5f 4f 53 5f 57 49 4e 29 0a 20 20 65 78 74 65 72  _OS_WIN).  exter
4740: 6e 20 69 6e 74 20 73 71 6c 69 74 65 33 4f 53 54  n int sqlite3OST
4750: 72 61 63 65 3b 0a 23 20 64 65 66 69 6e 65 20 4f  race;.# define O
4760: 53 54 52 41 43 45 28 58 29 20 20 20 20 20 20 20  STRACE(X)       
4770: 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 4f 53     if( sqlite3OS
4780: 54 72 61 63 65 20 29 20 73 71 6c 69 74 65 33 44  Trace ) sqlite3D
4790: 65 62 75 67 50 72 69 6e 74 66 20 58 0a 23 20 64  ebugPrintf X.# d
47a0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 48 41 56  efine SQLITE_HAV
47b0: 45 5f 4f 53 5f 54 52 41 43 45 0a 23 65 6c 73 65  E_OS_TRACE.#else
47c0: 0a 23 20 64 65 66 69 6e 65 20 4f 53 54 52 41 43  .# define OSTRAC
47d0: 45 28 58 29 0a 23 20 75 6e 64 65 66 20 20 53 51  E(X).# undef  SQ
47e0: 4c 49 54 45 5f 48 41 56 45 5f 4f 53 5f 54 52 41  LITE_HAVE_OS_TRA
47f0: 43 45 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  CE.#endif../*.**
4800: 20 49 73 20 74 68 65 20 73 71 6c 69 74 65 33 45   Is the sqlite3E
4810: 72 72 4e 61 6d 65 28 29 20 66 75 6e 63 74 69 6f  rrName() functio
4820: 6e 20 6e 65 65 64 65 64 20 69 6e 20 74 68 65 20  n needed in the 
4830: 62 75 69 6c 64 3f 20 20 43 75 72 72 65 6e 74 6c  build?  Currentl
4840: 79 2c 0a 2a 2a 20 69 74 20 69 73 20 6e 65 65 64  y,.** it is need
4850: 65 64 20 62 79 20 22 6d 75 74 65 78 5f 77 33 32  ed by "mutex_w32
4860: 2e 63 22 20 28 77 68 65 6e 20 64 65 62 75 67 67  .c" (when debugg
4870: 69 6e 67 29 2c 20 22 6f 73 5f 77 69 6e 2e 63 22  ing), "os_win.c"
4880: 20 28 77 68 65 6e 0a 2a 2a 20 4f 53 54 52 41 43   (when.** OSTRAC
4890: 45 20 69 73 20 65 6e 61 62 6c 65 64 29 2c 20 61  E is enabled), a
48a0: 6e 64 20 62 79 20 73 65 76 65 72 61 6c 20 22 74  nd by several "t
48b0: 65 73 74 2a 2e 63 22 20 66 69 6c 65 73 20 28 77  est*.c" files (w
48c0: 68 69 63 68 20 61 72 65 0a 2a 2a 20 63 6f 6d 70  hich are.** comp
48d0: 69 6c 65 64 20 75 73 69 6e 67 20 53 51 4c 49 54  iled using SQLIT
48e0: 45 5f 54 45 53 54 29 2e 0a 2a 2f 0a 23 69 66 20  E_TEST)..*/.#if 
48f0: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 48  defined(SQLITE_H
4900: 41 56 45 5f 4f 53 5f 54 52 41 43 45 29 20 7c 7c  AVE_OS_TRACE) ||
4910: 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
4920: 54 45 53 54 29 20 7c 7c 20 5c 0a 20 20 20 20 28  TEST) || \.    (
4930: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44  defined(SQLITE_D
4940: 45 42 55 47 29 20 26 26 20 53 51 4c 49 54 45 5f  EBUG) && SQLITE_
4950: 4f 53 5f 57 49 4e 29 0a 23 20 64 65 66 69 6e 65  OS_WIN).# define
4960: 20 53 51 4c 49 54 45 5f 4e 45 45 44 5f 45 52 52   SQLITE_NEED_ERR
4970: 5f 4e 41 4d 45 0a 23 65 6c 73 65 0a 23 20 75 6e  _NAME.#else.# un
4980: 64 65 66 20 20 53 51 4c 49 54 45 5f 4e 45 45 44  def  SQLITE_NEED
4990: 5f 45 52 52 5f 4e 41 4d 45 0a 23 65 6e 64 69 66  _ERR_NAME.#endif
49a0: 0a 0a 2f 2a 0a 2a 2a 20 53 51 4c 49 54 45 5f 45  ../*.** SQLITE_E
49b0: 4e 41 42 4c 45 5f 45 58 50 4c 41 49 4e 5f 43 4f  NABLE_EXPLAIN_CO
49c0: 4d 4d 45 4e 54 53 20 69 73 20 69 6e 63 6f 6d 70  MMENTS is incomp
49d0: 61 74 69 62 6c 65 20 77 69 74 68 20 53 51 4c 49  atible with SQLI
49e0: 54 45 5f 4f 4d 49 54 5f 45 58 50 4c 41 49 4e 0a  TE_OMIT_EXPLAIN.
49f0: 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
4a00: 5f 4f 4d 49 54 5f 45 58 50 4c 41 49 4e 0a 23 20  _OMIT_EXPLAIN.# 
4a10: 75 6e 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  undef SQLITE_ENA
4a20: 42 4c 45 5f 45 58 50 4c 41 49 4e 5f 43 4f 4d 4d  BLE_EXPLAIN_COMM
4a30: 45 4e 54 53 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  ENTS.#endif../*.
4a40: 2a 2a 20 52 65 74 75 72 6e 20 74 72 75 65 20 28  ** Return true (
4a50: 6e 6f 6e 2d 7a 65 72 6f 29 20 69 66 20 74 68 65  non-zero) if the
4a60: 20 69 6e 70 75 74 20 69 73 20 61 6e 20 69 6e 74   input is an int
4a70: 65 67 65 72 20 74 68 61 74 20 69 73 20 74 6f 6f  eger that is too
4a80: 20 6c 61 72 67 65 0a 2a 2a 20 74 6f 20 66 69 74   large.** to fit
4a90: 20 69 6e 20 33 32 2d 62 69 74 73 2e 20 20 54 68   in 32-bits.  Th
4aa0: 69 73 20 6d 61 63 72 6f 20 69 73 20 75 73 65 64  is macro is used
4ab0: 20 69 6e 73 69 64 65 20 6f 66 20 76 61 72 69 6f   inside of vario
4ac0: 75 73 20 74 65 73 74 63 61 73 65 28 29 0a 2a 2a  us testcase().**
4ad0: 20 6d 61 63 72 6f 73 20 74 6f 20 76 65 72 69 66   macros to verif
4ae0: 79 20 74 68 61 74 20 77 65 20 68 61 76 65 20 74  y that we have t
4af0: 65 73 74 65 64 20 53 51 4c 69 74 65 20 66 6f 72  ested SQLite for
4b00: 20 6c 61 72 67 65 2d 66 69 6c 65 20 73 75 70 70   large-file supp
4b10: 6f 72 74 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ort..*/.#define 
4b20: 49 53 5f 42 49 47 5f 49 4e 54 28 58 29 20 20 28  IS_BIG_INT(X)  (
4b30: 28 28 58 29 26 7e 28 69 36 34 29 30 78 66 66 66  ((X)&~(i64)0xfff
4b40: 66 66 66 66 66 29 21 3d 30 29 0a 0a 2f 2a 0a 2a  fffff)!=0)../*.*
4b50: 2a 20 54 68 65 20 6d 61 63 72 6f 20 75 6e 6c 69  * The macro unli
4b60: 6b 65 6c 79 28 29 20 69 73 20 61 20 68 69 6e 74  kely() is a hint
4b70: 20 74 68 61 74 20 73 75 72 72 6f 75 6e 64 73 20   that surrounds 
4b80: 61 20 62 6f 6f 6c 65 61 6e 0a 2a 2a 20 65 78 70  a boolean.** exp
4b90: 72 65 73 73 69 6f 6e 20 74 68 61 74 20 69 73 20  ression that is 
4ba0: 75 73 75 61 6c 6c 79 20 66 61 6c 73 65 2e 20 20  usually false.  
4bb0: 4d 61 63 72 6f 20 6c 69 6b 65 6c 79 28 29 20 73  Macro likely() s
4bc0: 75 72 72 6f 75 6e 64 73 0a 2a 2a 20 61 20 62 6f  urrounds.** a bo
4bd0: 6f 6c 65 61 6e 20 65 78 70 72 65 73 73 69 6f 6e  olean expression
4be0: 20 74 68 61 74 20 69 73 20 75 73 75 61 6c 6c 79   that is usually
4bf0: 20 74 72 75 65 2e 20 20 54 68 65 73 65 20 68 69   true.  These hi
4c00: 6e 74 73 20 63 6f 75 6c 64 2c 0a 2a 2a 20 69 6e  nts could,.** in
4c10: 20 74 68 65 6f 72 79 2c 20 62 65 20 75 73 65 64   theory, be used
4c20: 20 62 79 20 74 68 65 20 63 6f 6d 70 69 6c 65 72   by the compiler
4c30: 20 74 6f 20 67 65 6e 65 72 61 74 65 20 62 65 74   to generate bet
4c40: 74 65 72 20 63 6f 64 65 2c 20 62 75 74 0a 2a 2a  ter code, but.**
4c50: 20 63 75 72 72 65 6e 74 6c 79 20 74 68 65 79 20   currently they 
4c60: 61 72 65 20 6a 75 73 74 20 63 6f 6d 6d 65 6e 74  are just comment
4c70: 73 20 66 6f 72 20 68 75 6d 61 6e 20 72 65 61 64  s for human read
4c80: 65 72 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ers..*/.#define 
4c90: 6c 69 6b 65 6c 79 28 58 29 20 20 20 20 28 58 29  likely(X)    (X)
4ca0: 0a 23 64 65 66 69 6e 65 20 75 6e 6c 69 6b 65 6c  .#define unlikel
4cb0: 79 28 58 29 20 20 28 58 29 0a 0a 23 69 6e 63 6c  y(X)  (X)..#incl
4cc0: 75 64 65 20 22 68 61 73 68 2e 68 22 0a 23 69 6e  ude "hash.h".#in
4cd0: 63 6c 75 64 65 20 22 70 61 72 73 65 2e 68 22 0a  clude "parse.h".
4ce0: 23 69 6e 63 6c 75 64 65 20 3c 73 74 64 69 6f 2e  #include <stdio.
4cf0: 68 3e 0a 23 69 6e 63 6c 75 64 65 20 3c 73 74 64  h>.#include <std
4d00: 6c 69 62 2e 68 3e 0a 23 69 6e 63 6c 75 64 65 20  lib.h>.#include 
4d10: 3c 73 74 72 69 6e 67 2e 68 3e 0a 23 69 6e 63 6c  <string.h>.#incl
4d20: 75 64 65 20 3c 61 73 73 65 72 74 2e 68 3e 0a 23  ude <assert.h>.#
4d30: 69 6e 63 6c 75 64 65 20 3c 73 74 64 64 65 66 2e  include <stddef.
4d40: 68 3e 0a 0a 2f 2a 0a 2a 2a 20 55 73 65 20 61 20  h>../*.** Use a 
4d50: 6d 61 63 72 6f 20 74 6f 20 72 65 70 6c 61 63 65  macro to replace
4d60: 20 6d 65 6d 63 70 79 28 29 20 69 66 20 63 6f 6d   memcpy() if com
4d70: 70 69 6c 65 64 20 77 69 74 68 20 53 51 4c 49 54  piled with SQLIT
4d80: 45 5f 49 4e 4c 49 4e 45 5f 4d 45 4d 43 50 59 2e  E_INLINE_MEMCPY.
4d90: 0a 2a 2a 20 54 68 69 73 20 61 6c 6c 6f 77 73 20  .** This allows 
4da0: 62 65 74 74 65 72 20 6d 65 61 73 75 72 65 6d 65  better measureme
4db0: 6e 74 73 20 6f 66 20 77 68 65 72 65 20 6d 65 6d  nts of where mem
4dc0: 63 70 79 28 29 20 69 73 20 75 73 65 64 20 77 68  cpy() is used wh
4dd0: 65 6e 20 72 75 6e 6e 69 6e 67 0a 2a 2a 20 63 61  en running.** ca
4de0: 63 68 65 67 72 69 6e 64 2e 20 20 42 75 74 20 74  chegrind.  But t
4df0: 68 69 73 20 6d 61 63 72 6f 20 76 65 72 73 69 6f  his macro versio
4e00: 6e 20 6f 66 20 6d 65 6d 63 70 79 28 29 20 69 73  n of memcpy() is
4e10: 20 76 65 72 79 20 73 6c 6f 77 20 73 6f 20 69 74   very slow so it
4e20: 0a 2a 2a 20 73 68 6f 75 6c 64 20 6e 6f 74 20 62  .** should not b
4e30: 65 20 75 73 65 64 20 69 6e 20 70 72 6f 64 75 63  e used in produc
4e40: 74 69 6f 6e 2e 20 20 54 68 69 73 20 69 73 20 61  tion.  This is a
4e50: 20 70 65 72 66 6f 72 6d 61 6e 63 65 20 6d 65 61   performance mea
4e60: 73 75 72 65 6d 65 6e 74 0a 2a 2a 20 68 61 63 6b  surement.** hack
4e70: 20 6f 6e 6c 79 2e 0a 2a 2f 0a 23 69 66 64 65 66   only..*/.#ifdef
4e80: 20 53 51 4c 49 54 45 5f 49 4e 4c 49 4e 45 5f 4d   SQLITE_INLINE_M
4e90: 45 4d 43 50 59 0a 23 20 64 65 66 69 6e 65 20 6d  EMCPY.# define m
4ea0: 65 6d 63 70 79 28 44 2c 53 2c 4e 29 20 7b 63 68  emcpy(D,S,N) {ch
4eb0: 61 72 2a 78 78 64 3d 28 63 68 61 72 2a 29 28 44  ar*xxd=(char*)(D
4ec0: 29 3b 63 6f 6e 73 74 20 63 68 61 72 2a 78 78 73  );const char*xxs
4ed0: 3d 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 28 53  =(const char*)(S
4ee0: 29 3b 5c 0a 20 20 20 20 20 20 20 20 20 20 20 20  );\.            
4ef0: 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 20              int 
4f00: 78 78 6e 3d 28 4e 29 3b 77 68 69 6c 65 28 78 78  xxn=(N);while(xx
4f10: 6e 2d 2d 3e 30 29 2a 28 78 78 64 2b 2b 29 3d 2a  n-->0)*(xxd++)=*
4f20: 28 78 78 73 2b 2b 29 3b 7d 0a 23 65 6e 64 69 66  (xxs++);}.#endif
4f30: 0a 0a 2f 2a 0a 2a 2a 20 49 66 20 63 6f 6d 70 69  ../*.** If compi
4f40: 6c 69 6e 67 20 66 6f 72 20 61 20 70 72 6f 63 65  ling for a proce
4f50: 73 73 6f 72 20 74 68 61 74 20 6c 61 63 6b 73 20  ssor that lacks 
4f60: 66 6c 6f 61 74 69 6e 67 20 70 6f 69 6e 74 20 73  floating point s
4f70: 75 70 70 6f 72 74 2c 0a 2a 2a 20 73 75 62 73 74  upport,.** subst
4f80: 69 74 75 74 65 20 69 6e 74 65 67 65 72 20 66 6f  itute integer fo
4f90: 72 20 66 6c 6f 61 74 69 6e 67 2d 70 6f 69 6e 74  r floating-point
4fa0: 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54  .*/.#ifdef SQLIT
4fb0: 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f  E_OMIT_FLOATING_
4fc0: 50 4f 49 4e 54 0a 23 20 64 65 66 69 6e 65 20 64  POINT.# define d
4fd0: 6f 75 62 6c 65 20 73 71 6c 69 74 65 5f 69 6e 74  ouble sqlite_int
4fe0: 36 34 0a 23 20 64 65 66 69 6e 65 20 66 6c 6f 61  64.# define floa
4ff0: 74 20 73 71 6c 69 74 65 5f 69 6e 74 36 34 0a 23  t sqlite_int64.#
5000: 20 64 65 66 69 6e 65 20 4c 4f 4e 47 44 4f 55 42   define LONGDOUB
5010: 4c 45 5f 54 59 50 45 20 73 71 6c 69 74 65 5f 69  LE_TYPE sqlite_i
5020: 6e 74 36 34 0a 23 20 69 66 6e 64 65 66 20 53 51  nt64.# ifndef SQ
5030: 4c 49 54 45 5f 42 49 47 5f 44 42 4c 0a 23 20 20  LITE_BIG_DBL.#  
5040: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 42   define SQLITE_B
5050: 49 47 5f 44 42 4c 20 28 28 28 73 71 6c 69 74 65  IG_DBL (((sqlite
5060: 33 5f 69 6e 74 36 34 29 31 29 3c 3c 35 30 29 0a  3_int64)1)<<50).
5070: 23 20 65 6e 64 69 66 0a 23 20 64 65 66 69 6e 65  # endif.# define
5080: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 44 41 54   SQLITE_OMIT_DAT
5090: 45 54 49 4d 45 5f 46 55 4e 43 53 20 31 0a 23 20  ETIME_FUNCS 1.# 
50a0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4f 4d  define SQLITE_OM
50b0: 49 54 5f 54 52 41 43 45 20 31 0a 23 20 75 6e 64  IT_TRACE 1.# und
50c0: 65 66 20 53 51 4c 49 54 45 5f 4d 49 58 45 44 5f  ef SQLITE_MIXED_
50d0: 45 4e 44 49 41 4e 5f 36 34 42 49 54 5f 46 4c 4f  ENDIAN_64BIT_FLO
50e0: 41 54 0a 23 20 75 6e 64 65 66 20 53 51 4c 49 54  AT.# undef SQLIT
50f0: 45 5f 48 41 56 45 5f 49 53 4e 41 4e 0a 23 65 6e  E_HAVE_ISNAN.#en
5100: 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  dif.#ifndef SQLI
5110: 54 45 5f 42 49 47 5f 44 42 4c 0a 23 20 64 65 66  TE_BIG_DBL.# def
5120: 69 6e 65 20 53 51 4c 49 54 45 5f 42 49 47 5f 44  ine SQLITE_BIG_D
5130: 42 4c 20 28 31 65 39 39 29 0a 23 65 6e 64 69 66  BL (1e99).#endif
5140: 0a 0a 2f 2a 0a 2a 2a 20 4f 4d 49 54 5f 54 45 4d  ../*.** OMIT_TEM
5150: 50 44 42 20 69 73 20 73 65 74 20 74 6f 20 31 20  PDB is set to 1 
5160: 69 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54  if SQLITE_OMIT_T
5170: 45 4d 50 44 42 20 69 73 20 64 65 66 69 6e 65 64  EMPDB is defined
5180: 2c 20 6f 72 20 30 0a 2a 2a 20 61 66 74 65 72 77  , or 0.** afterw
5190: 61 72 64 2e 20 48 61 76 69 6e 67 20 74 68 69 73  ard. Having this
51a0: 20 6d 61 63 72 6f 20 61 6c 6c 6f 77 73 20 75 73   macro allows us
51b0: 20 74 6f 20 63 61 75 73 65 20 74 68 65 20 43 20   to cause the C 
51c0: 63 6f 6d 70 69 6c 65 72 0a 2a 2a 20 74 6f 20 6f  compiler.** to o
51d0: 6d 69 74 20 63 6f 64 65 20 75 73 65 64 20 62 79  mit code used by
51e0: 20 54 45 4d 50 20 74 61 62 6c 65 73 20 77 69 74   TEMP tables wit
51f0: 68 6f 75 74 20 6d 65 73 73 79 20 23 69 66 6e 64  hout messy #ifnd
5200: 65 66 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a 2a  ef statements..*
5210: 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
5220: 4f 4d 49 54 5f 54 45 4d 50 44 42 0a 23 64 65 66  OMIT_TEMPDB.#def
5230: 69 6e 65 20 4f 4d 49 54 5f 54 45 4d 50 44 42 20  ine OMIT_TEMPDB 
5240: 31 0a 23 65 6c 73 65 0a 23 64 65 66 69 6e 65 20  1.#else.#define 
5250: 4f 4d 49 54 5f 54 45 4d 50 44 42 20 30 0a 23 65  OMIT_TEMPDB 0.#e
5260: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  ndif../*.** The 
5270: 22 66 69 6c 65 20 66 6f 72 6d 61 74 22 20 6e 75  "file format" nu
5280: 6d 62 65 72 20 69 73 20 61 6e 20 69 6e 74 65 67  mber is an integ
5290: 65 72 20 74 68 61 74 20 69 73 20 69 6e 63 72 65  er that is incre
52a0: 6d 65 6e 74 65 64 20 77 68 65 6e 65 76 65 72 0a  mented whenever.
52b0: 2a 2a 20 74 68 65 20 56 44 42 45 2d 6c 65 76 65  ** the VDBE-leve
52c0: 6c 20 66 69 6c 65 20 66 6f 72 6d 61 74 20 63 68  l file format ch
52d0: 61 6e 67 65 73 2e 20 20 54 68 65 20 66 6f 6c 6c  anges.  The foll
52e0: 6f 77 69 6e 67 20 6d 61 63 72 6f 73 20 64 65 66  owing macros def
52f0: 69 6e 65 20 74 68 65 0a 2a 2a 20 74 68 65 20 64  ine the.** the d
5300: 65 66 61 75 6c 74 20 66 69 6c 65 20 66 6f 72 6d  efault file form
5310: 61 74 20 66 6f 72 20 6e 65 77 20 64 61 74 61 62  at for new datab
5320: 61 73 65 73 20 61 6e 64 20 74 68 65 20 6d 61 78  ases and the max
5330: 69 6d 75 6d 20 66 69 6c 65 20 66 6f 72 6d 61 74  imum file format
5340: 0a 2a 2a 20 74 68 61 74 20 74 68 65 20 6c 69 62  .** that the lib
5350: 72 61 72 79 20 63 61 6e 20 72 65 61 64 2e 0a 2a  rary can read..*
5360: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
5370: 5f 4d 41 58 5f 46 49 4c 45 5f 46 4f 52 4d 41 54  _MAX_FILE_FORMAT
5380: 20 34 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54   4.#ifndef SQLIT
5390: 45 5f 44 45 46 41 55 4c 54 5f 46 49 4c 45 5f 46  E_DEFAULT_FILE_F
53a0: 4f 52 4d 41 54 0a 23 20 64 65 66 69 6e 65 20 53  ORMAT.# define S
53b0: 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 46 49  QLITE_DEFAULT_FI
53c0: 4c 45 5f 46 4f 52 4d 41 54 20 34 0a 23 65 6e 64  LE_FORMAT 4.#end
53d0: 69 66 0a 0a 2f 2a 0a 2a 2a 20 44 65 74 65 72 6d  if../*.** Determ
53e0: 69 6e 65 20 77 68 65 74 68 65 72 20 74 72 69 67  ine whether trig
53f0: 67 65 72 73 20 61 72 65 20 72 65 63 75 72 73 69  gers are recursi
5400: 76 65 20 62 79 20 64 65 66 61 75 6c 74 2e 20 20  ve by default.  
5410: 54 68 69 73 20 63 61 6e 20 62 65 0a 2a 2a 20 63  This can be.** c
5420: 68 61 6e 67 65 64 20 61 74 20 72 75 6e 2d 74 69  hanged at run-ti
5430: 6d 65 20 75 73 69 6e 67 20 61 20 70 72 61 67 6d  me using a pragm
5440: 61 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51  a..*/.#ifndef SQ
5450: 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 52 45 43  LITE_DEFAULT_REC
5460: 55 52 53 49 56 45 5f 54 52 49 47 47 45 52 53 0a  URSIVE_TRIGGERS.
5470: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
5480: 44 45 46 41 55 4c 54 5f 52 45 43 55 52 53 49 56  DEFAULT_RECURSIV
5490: 45 5f 54 52 49 47 47 45 52 53 20 30 0a 23 65 6e  E_TRIGGERS 0.#en
54a0: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 50 72 6f 76 69  dif../*.** Provi
54b0: 64 65 20 61 20 64 65 66 61 75 6c 74 20 76 61 6c  de a default val
54c0: 75 65 20 66 6f 72 20 53 51 4c 49 54 45 5f 54 45  ue for SQLITE_TE
54d0: 4d 50 5f 53 54 4f 52 45 20 69 6e 20 63 61 73 65  MP_STORE in case
54e0: 20 69 74 20 69 73 20 6e 6f 74 20 73 70 65 63 69   it is not speci
54f0: 66 69 65 64 0a 2a 2a 20 6f 6e 20 74 68 65 20 63  fied.** on the c
5500: 6f 6d 6d 61 6e 64 2d 6c 69 6e 65 0a 2a 2f 0a 23  ommand-line.*/.#
5510: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 54 45  ifndef SQLITE_TE
5520: 4d 50 5f 53 54 4f 52 45 0a 23 20 64 65 66 69 6e  MP_STORE.# defin
5530: 65 20 53 51 4c 49 54 45 5f 54 45 4d 50 5f 53 54  e SQLITE_TEMP_ST
5540: 4f 52 45 20 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a  ORE 1.#endif../*
5550: 0a 2a 2a 20 49 66 20 6e 6f 20 76 61 6c 75 65 20  .** If no value 
5560: 68 61 73 20 62 65 65 6e 20 70 72 6f 76 69 64 65  has been provide
5570: 64 20 66 6f 72 20 53 51 4c 49 54 45 5f 4d 41 58  d for SQLITE_MAX
5580: 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41 44 53 2c  _WORKER_THREADS,
5590: 20 6f 72 20 69 66 0a 2a 2a 20 53 51 4c 49 54 45   or if.** SQLITE
55a0: 5f 54 45 4d 50 5f 53 54 4f 52 45 20 69 73 20 73  _TEMP_STORE is s
55b0: 65 74 20 74 6f 20 33 20 28 6e 65 76 65 72 20 75  et to 3 (never u
55c0: 73 65 20 74 65 6d 70 6f 72 61 72 79 20 66 69 6c  se temporary fil
55d0: 65 73 29 2c 20 73 65 74 20 69 74 0a 2a 2a 20 74  es), set it.** t
55e0: 6f 20 7a 65 72 6f 2e 0a 2a 2f 0a 23 69 66 20 53  o zero..*/.#if S
55f0: 51 4c 49 54 45 5f 54 45 4d 50 5f 53 54 4f 52 45  QLITE_TEMP_STORE
5600: 3d 3d 33 20 7c 7c 20 53 51 4c 49 54 45 5f 54 48  ==3 || SQLITE_TH
5610: 52 45 41 44 53 41 46 45 3d 3d 30 0a 23 20 75 6e  READSAFE==0.# un
5620: 64 65 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 57  def SQLITE_MAX_W
5630: 4f 52 4b 45 52 5f 54 48 52 45 41 44 53 0a 23 20  ORKER_THREADS.# 
5640: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41  define SQLITE_MA
5650: 58 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41 44 53  X_WORKER_THREADS
5660: 20 30 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65   0.#endif.#ifnde
5670: 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 57 4f 52  f SQLITE_MAX_WOR
5680: 4b 45 52 5f 54 48 52 45 41 44 53 0a 23 20 64 65  KER_THREADS.# de
5690: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 58 5f  fine SQLITE_MAX_
56a0: 57 4f 52 4b 45 52 5f 54 48 52 45 41 44 53 20 38  WORKER_THREADS 8
56b0: 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20  .#endif.#ifndef 
56c0: 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 57  SQLITE_DEFAULT_W
56d0: 4f 52 4b 45 52 5f 54 48 52 45 41 44 53 0a 23 20  ORKER_THREADS.# 
56e0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 45  define SQLITE_DE
56f0: 46 41 55 4c 54 5f 57 4f 52 4b 45 52 5f 54 48 52  FAULT_WORKER_THR
5700: 45 41 44 53 20 30 0a 23 65 6e 64 69 66 0a 23 69  EADS 0.#endif.#i
5710: 66 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54  f SQLITE_DEFAULT
5720: 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41 44 53 3e  _WORKER_THREADS>
5730: 53 51 4c 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45  SQLITE_MAX_WORKE
5740: 52 5f 54 48 52 45 41 44 53 0a 23 20 75 6e 64 65  R_THREADS.# unde
5750: 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 57 4f 52  f SQLITE_MAX_WOR
5760: 4b 45 52 5f 54 48 52 45 41 44 53 0a 23 20 64 65  KER_THREADS.# de
5770: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 58 5f  fine SQLITE_MAX_
5780: 57 4f 52 4b 45 52 5f 54 48 52 45 41 44 53 20 53  WORKER_THREADS S
5790: 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 57 4f  QLITE_DEFAULT_WO
57a0: 52 4b 45 52 5f 54 48 52 45 41 44 53 0a 23 65 6e  RKER_THREADS.#en
57b0: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 64  dif../*.** The d
57c0: 65 66 61 75 6c 74 20 69 6e 69 74 69 61 6c 20 61  efault initial a
57d0: 6c 6c 6f 63 61 74 69 6f 6e 20 66 6f 72 20 74 68  llocation for th
57e0: 65 20 70 61 67 65 63 61 63 68 65 20 77 68 65 6e  e pagecache when
57f0: 20 75 73 69 6e 67 20 73 65 70 61 72 61 74 65 0a   using separate.
5800: 2a 2a 20 70 61 67 65 63 61 63 68 65 73 20 66 6f  ** pagecaches fo
5810: 72 20 65 61 63 68 20 64 61 74 61 62 61 73 65 20  r each database 
5820: 63 6f 6e 6e 65 63 74 69 6f 6e 2e 20 20 41 20 70  connection.  A p
5830: 6f 73 69 74 69 76 65 20 6e 75 6d 62 65 72 20 69  ositive number i
5840: 73 20 74 68 65 0a 2a 2a 20 6e 75 6d 62 65 72 20  s the.** number 
5850: 6f 66 20 70 61 67 65 73 2e 20 20 41 20 6e 65 67  of pages.  A neg
5860: 61 74 69 76 65 20 6e 75 6d 62 65 72 20 4e 20 74  ative number N t
5870: 72 61 6e 73 6c 61 74 69 6f 6e 73 20 6d 65 61 6e  ranslations mean
5880: 73 20 74 68 61 74 20 61 20 62 75 66 66 65 72 0a  s that a buffer.
5890: 2a 2a 20 6f 66 20 2d 31 30 32 34 2a 4e 20 62 79  ** of -1024*N by
58a0: 74 65 73 20 69 73 20 61 6c 6c 6f 63 61 74 65 64  tes is allocated
58b0: 20 61 6e 64 20 75 73 65 64 20 66 6f 72 20 61 73   and used for as
58c0: 20 6d 61 6e 79 20 70 61 67 65 73 20 61 73 20 69   many pages as i
58d0: 74 20 77 69 6c 6c 20 68 6f 6c 64 2e 0a 2a 2a 0a  t will hold..**.
58e0: 2a 2a 20 54 68 65 20 64 65 66 61 75 6c 74 20 76  ** The default v
58f0: 61 6c 75 65 20 6f 66 20 22 32 30 22 20 77 61 73  alue of "20" was
5900: 20 63 68 6f 6f 73 65 6e 20 74 6f 20 6d 69 6e 69   choosen to mini
5910: 6d 69 7a 65 20 74 68 65 20 72 75 6e 2d 74 69 6d  mize the run-tim
5920: 65 20 6f 66 20 74 68 65 0a 2a 2a 20 73 70 65 65  e of the.** spee
5930: 64 74 65 73 74 31 20 74 65 73 74 20 70 72 6f 67  dtest1 test prog
5940: 72 61 6d 20 77 69 74 68 20 6f 70 74 69 6f 6e 73  ram with options
5950: 3a 20 2d 2d 73 68 72 69 6e 6b 2d 6d 65 6d 6f 72  : --shrink-memor
5960: 79 20 2d 2d 72 65 70 72 65 70 61 72 65 0a 2a 2f  y --reprepare.*/
5970: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
5980: 44 45 46 41 55 4c 54 5f 50 43 41 43 48 45 5f 49  DEFAULT_PCACHE_I
5990: 4e 49 54 53 5a 0a 23 20 64 65 66 69 6e 65 20 53  NITSZ.# define S
59a0: 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 50 43  QLITE_DEFAULT_PC
59b0: 41 43 48 45 5f 49 4e 49 54 53 5a 20 32 30 0a 23  ACHE_INITSZ 20.#
59c0: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 44 65 66  endif../*.** Def
59d0: 61 75 6c 74 20 76 61 6c 75 65 20 66 6f 72 20 74  ault value for t
59e0: 68 65 20 53 51 4c 49 54 45 5f 43 4f 4e 46 49 47  he SQLITE_CONFIG
59f0: 5f 53 4f 52 54 45 52 52 45 46 5f 53 49 5a 45 20  _SORTERREF_SIZE 
5a00: 6f 70 74 69 6f 6e 2e 0a 2a 2f 0a 23 69 66 6e 64  option..*/.#ifnd
5a10: 65 66 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c  ef SQLITE_DEFAUL
5a20: 54 5f 53 4f 52 54 45 52 52 45 46 5f 53 49 5a 45  T_SORTERREF_SIZE
5a30: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
5a40: 5f 44 45 46 41 55 4c 54 5f 53 4f 52 54 45 52 52  _DEFAULT_SORTERR
5a50: 45 46 5f 53 49 5a 45 20 30 78 37 66 66 66 66 66  EF_SIZE 0x7fffff
5a60: 66 66 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  ff.#endif../*.**
5a70: 20 54 68 65 20 63 6f 6d 70 69 6c 65 2d 74 69 6d   The compile-tim
5a80: 65 20 6f 70 74 69 6f 6e 73 20 53 51 4c 49 54 45  e options SQLITE
5a90: 5f 4d 4d 41 50 5f 52 45 41 44 57 52 49 54 45 20  _MMAP_READWRITE 
5aa0: 61 6e 64 20 0a 2a 2a 20 53 51 4c 49 54 45 5f 45  and .** SQLITE_E
5ab0: 4e 41 42 4c 45 5f 42 41 54 43 48 5f 41 54 4f 4d  NABLE_BATCH_ATOM
5ac0: 49 43 5f 57 52 49 54 45 20 61 72 65 20 6e 6f 74  IC_WRITE are not
5ad0: 20 63 6f 6d 70 61 74 69 62 6c 65 20 77 69 74 68   compatible with
5ae0: 20 6f 6e 65 20 61 6e 6f 74 68 65 72 2e 0a 2a 2a   one another..**
5af0: 20 59 6f 75 20 6d 75 73 74 20 63 68 6f 6f 73 65   You must choose
5b00: 20 6f 6e 65 20 6f 72 20 74 68 65 20 6f 74 68 65   one or the othe
5b10: 72 20 28 6f 72 20 6e 65 69 74 68 65 72 29 20 62  r (or neither) b
5b20: 75 74 20 6e 6f 74 20 62 6f 74 68 2e 0a 2a 2f 0a  ut not both..*/.
5b30: 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49  #if defined(SQLI
5b40: 54 45 5f 4d 4d 41 50 5f 52 45 41 44 57 52 49 54  TE_MMAP_READWRIT
5b50: 45 29 20 26 26 20 64 65 66 69 6e 65 64 28 53 51  E) && defined(SQ
5b60: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 42 41 54 43  LITE_ENABLE_BATC
5b70: 48 5f 41 54 4f 4d 49 43 5f 57 52 49 54 45 29 0a  H_ATOMIC_WRITE).
5b80: 23 65 72 72 6f 72 20 43 61 6e 6e 6f 74 20 75 73  #error Cannot us
5b90: 65 20 62 6f 74 68 20 53 51 4c 49 54 45 5f 4d 4d  e both SQLITE_MM
5ba0: 41 50 5f 52 45 41 44 57 52 49 54 45 20 61 6e 64  AP_READWRITE and
5bb0: 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 42   SQLITE_ENABLE_B
5bc0: 41 54 43 48 5f 41 54 4f 4d 49 43 5f 57 52 49 54  ATCH_ATOMIC_WRIT
5bd0: 45 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  E.#endif../*.** 
5be0: 47 43 43 20 64 6f 65 73 20 6e 6f 74 20 64 65 66  GCC does not def
5bf0: 69 6e 65 20 74 68 65 20 6f 66 66 73 65 74 6f 66  ine the offsetof
5c00: 28 29 20 6d 61 63 72 6f 20 73 6f 20 77 65 27 6c  () macro so we'l
5c10: 6c 20 68 61 76 65 20 74 6f 20 64 6f 20 69 74 0a  l have to do it.
5c20: 2a 2a 20 6f 75 72 73 65 6c 76 65 73 2e 0a 2a 2f  ** ourselves..*/
5c30: 0a 23 69 66 6e 64 65 66 20 6f 66 66 73 65 74 6f  .#ifndef offseto
5c40: 66 0a 23 64 65 66 69 6e 65 20 6f 66 66 73 65 74  f.#define offset
5c50: 6f 66 28 53 54 52 55 43 54 55 52 45 2c 46 49 45  of(STRUCTURE,FIE
5c60: 4c 44 29 20 28 28 69 6e 74 29 28 28 63 68 61 72  LD) ((int)((char
5c70: 2a 29 26 28 28 53 54 52 55 43 54 55 52 45 2a 29  *)&((STRUCTURE*)
5c80: 30 29 2d 3e 46 49 45 4c 44 29 29 0a 23 65 6e 64  0)->FIELD)).#end
5c90: 69 66 0a 0a 2f 2a 0a 2a 2a 20 4d 61 63 72 6f 73  if../*.** Macros
5ca0: 20 74 6f 20 63 6f 6d 70 75 74 65 20 6d 69 6e 69   to compute mini
5cb0: 6d 75 6d 20 61 6e 64 20 6d 61 78 69 6d 75 6d 20  mum and maximum 
5cc0: 6f 66 20 74 77 6f 20 6e 75 6d 62 65 72 73 2e 0a  of two numbers..
5cd0: 2a 2f 0a 23 69 66 6e 64 65 66 20 4d 49 4e 0a 23  */.#ifndef MIN.#
5ce0: 20 64 65 66 69 6e 65 20 4d 49 4e 28 41 2c 42 29   define MIN(A,B)
5cf0: 20 28 28 41 29 3c 28 42 29 3f 28 41 29 3a 28 42   ((A)<(B)?(A):(B
5d00: 29 29 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65  )).#endif.#ifnde
5d10: 66 20 4d 41 58 0a 23 20 64 65 66 69 6e 65 20 4d  f MAX.# define M
5d20: 41 58 28 41 2c 42 29 20 28 28 41 29 3e 28 42 29  AX(A,B) ((A)>(B)
5d30: 3f 28 41 29 3a 28 42 29 29 0a 23 65 6e 64 69 66  ?(A):(B)).#endif
5d40: 0a 0a 2f 2a 0a 2a 2a 20 53 77 61 70 20 74 77 6f  ../*.** Swap two
5d50: 20 6f 62 6a 65 63 74 73 20 6f 66 20 74 79 70 65   objects of type
5d60: 20 54 59 50 45 2e 0a 2a 2f 0a 23 64 65 66 69 6e   TYPE..*/.#defin
5d70: 65 20 53 57 41 50 28 54 59 50 45 2c 41 2c 42 29  e SWAP(TYPE,A,B)
5d80: 20 7b 54 59 50 45 20 74 3d 41 3b 20 41 3d 42 3b   {TYPE t=A; A=B;
5d90: 20 42 3d 74 3b 7d 0a 0a 2f 2a 0a 2a 2a 20 43 68   B=t;}../*.** Ch
5da0: 65 63 6b 20 74 6f 20 73 65 65 20 69 66 20 74 68  eck to see if th
5db0: 69 73 20 6d 61 63 68 69 6e 65 20 75 73 65 73 20  is machine uses 
5dc0: 45 42 43 44 49 43 2e 20 20 28 59 65 73 2c 20 62  EBCDIC.  (Yes, b
5dd0: 65 6c 69 65 76 65 20 69 74 20 6f 72 0a 2a 2a 20  elieve it or.** 
5de0: 6e 6f 74 2c 20 74 68 65 72 65 20 61 72 65 20 73  not, there are s
5df0: 74 69 6c 6c 20 6d 61 63 68 69 6e 65 73 20 6f 75  till machines ou
5e00: 74 20 74 68 65 72 65 20 74 68 61 74 20 75 73 65  t there that use
5e10: 20 45 42 43 44 49 43 2e 29 0a 2a 2f 0a 23 69 66   EBCDIC.).*/.#if
5e20: 20 27 41 27 20 3d 3d 20 27 5c 33 30 31 27 0a 23   'A' == '\301'.#
5e30: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 45   define SQLITE_E
5e40: 42 43 44 49 43 20 31 0a 23 65 6c 73 65 0a 23 20  BCDIC 1.#else.# 
5e50: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 53  define SQLITE_AS
5e60: 43 49 49 20 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a  CII 1.#endif../*
5e70: 0a 2a 2a 20 49 6e 74 65 67 65 72 73 20 6f 66 20  .** Integers of 
5e80: 6b 6e 6f 77 6e 20 73 69 7a 65 73 2e 20 20 54 68  known sizes.  Th
5e90: 65 73 65 20 74 79 70 65 64 65 66 73 20 6d 69 67  ese typedefs mig
5ea0: 68 74 20 63 68 61 6e 67 65 20 66 6f 72 20 61 72  ht change for ar
5eb0: 63 68 69 74 65 63 74 75 72 65 73 0a 2a 2a 20 77  chitectures.** w
5ec0: 68 65 72 65 20 74 68 65 20 73 69 7a 65 73 20 76  here the sizes v
5ed0: 65 72 79 2e 20 20 50 72 65 70 72 6f 63 65 73 73  ery.  Preprocess
5ee0: 6f 72 20 6d 61 63 72 6f 73 20 61 72 65 20 61 76  or macros are av
5ef0: 61 69 6c 61 62 6c 65 20 73 6f 20 74 68 61 74 20  ailable so that 
5f00: 74 68 65 0a 2a 2a 20 74 79 70 65 73 20 63 61 6e  the.** types can
5f10: 20 62 65 20 63 6f 6e 76 65 6e 69 65 6e 74 6c 79   be conveniently
5f20: 20 72 65 64 65 66 69 6e 65 64 20 61 74 20 63 6f   redefined at co
5f30: 6d 70 69 6c 65 2d 74 79 70 65 2e 20 20 4c 69 6b  mpile-type.  Lik
5f40: 65 20 74 68 69 73 3a 0a 2a 2a 0a 2a 2a 20 20 20  e this:.**.**   
5f50: 20 20 20 20 20 20 63 63 20 27 2d 44 55 49 4e 54        cc '-DUINT
5f60: 50 54 52 5f 54 59 50 45 3d 6c 6f 6e 67 20 6c 6f  PTR_TYPE=long lo
5f70: 6e 67 20 69 6e 74 27 20 2e 2e 2e 0a 2a 2f 0a 23  ng int' ....*/.#
5f80: 69 66 6e 64 65 66 20 55 49 4e 54 33 32 5f 54 59  ifndef UINT32_TY
5f90: 50 45 0a 23 20 69 66 64 65 66 20 48 41 56 45 5f  PE.# ifdef HAVE_
5fa0: 55 49 4e 54 33 32 5f 54 0a 23 20 20 64 65 66 69  UINT32_T.#  defi
5fb0: 6e 65 20 55 49 4e 54 33 32 5f 54 59 50 45 20 75  ne UINT32_TYPE u
5fc0: 69 6e 74 33 32 5f 74 0a 23 20 65 6c 73 65 0a 23  int32_t.# else.#
5fd0: 20 20 64 65 66 69 6e 65 20 55 49 4e 54 33 32 5f    define UINT32_
5fe0: 54 59 50 45 20 75 6e 73 69 67 6e 65 64 20 69 6e  TYPE unsigned in
5ff0: 74 0a 23 20 65 6e 64 69 66 0a 23 65 6e 64 69 66  t.# endif.#endif
6000: 0a 23 69 66 6e 64 65 66 20 55 49 4e 54 31 36 5f  .#ifndef UINT16_
6010: 54 59 50 45 0a 23 20 69 66 64 65 66 20 48 41 56  TYPE.# ifdef HAV
6020: 45 5f 55 49 4e 54 31 36 5f 54 0a 23 20 20 64 65  E_UINT16_T.#  de
6030: 66 69 6e 65 20 55 49 4e 54 31 36 5f 54 59 50 45  fine UINT16_TYPE
6040: 20 75 69 6e 74 31 36 5f 74 0a 23 20 65 6c 73 65   uint16_t.# else
6050: 0a 23 20 20 64 65 66 69 6e 65 20 55 49 4e 54 31  .#  define UINT1
6060: 36 5f 54 59 50 45 20 75 6e 73 69 67 6e 65 64 20  6_TYPE unsigned 
6070: 73 68 6f 72 74 20 69 6e 74 0a 23 20 65 6e 64 69  short int.# endi
6080: 66 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66  f.#endif.#ifndef
6090: 20 49 4e 54 31 36 5f 54 59 50 45 0a 23 20 69 66   INT16_TYPE.# if
60a0: 64 65 66 20 48 41 56 45 5f 49 4e 54 31 36 5f 54  def HAVE_INT16_T
60b0: 0a 23 20 20 64 65 66 69 6e 65 20 49 4e 54 31 36  .#  define INT16
60c0: 5f 54 59 50 45 20 69 6e 74 31 36 5f 74 0a 23 20  _TYPE int16_t.# 
60d0: 65 6c 73 65 0a 23 20 20 64 65 66 69 6e 65 20 49  else.#  define I
60e0: 4e 54 31 36 5f 54 59 50 45 20 73 68 6f 72 74 20  NT16_TYPE short 
60f0: 69 6e 74 0a 23 20 65 6e 64 69 66 0a 23 65 6e 64  int.# endif.#end
6100: 69 66 0a 23 69 66 6e 64 65 66 20 55 49 4e 54 38  if.#ifndef UINT8
6110: 5f 54 59 50 45 0a 23 20 69 66 64 65 66 20 48 41  _TYPE.# ifdef HA
6120: 56 45 5f 55 49 4e 54 38 5f 54 0a 23 20 20 64 65  VE_UINT8_T.#  de
6130: 66 69 6e 65 20 55 49 4e 54 38 5f 54 59 50 45 20  fine UINT8_TYPE 
6140: 75 69 6e 74 38 5f 74 0a 23 20 65 6c 73 65 0a 23  uint8_t.# else.#
6150: 20 20 64 65 66 69 6e 65 20 55 49 4e 54 38 5f 54    define UINT8_T
6160: 59 50 45 20 75 6e 73 69 67 6e 65 64 20 63 68 61  YPE unsigned cha
6170: 72 0a 23 20 65 6e 64 69 66 0a 23 65 6e 64 69 66  r.# endif.#endif
6180: 0a 23 69 66 6e 64 65 66 20 49 4e 54 38 5f 54 59  .#ifndef INT8_TY
6190: 50 45 0a 23 20 69 66 64 65 66 20 48 41 56 45 5f  PE.# ifdef HAVE_
61a0: 49 4e 54 38 5f 54 0a 23 20 20 64 65 66 69 6e 65  INT8_T.#  define
61b0: 20 49 4e 54 38 5f 54 59 50 45 20 69 6e 74 38 5f   INT8_TYPE int8_
61c0: 74 0a 23 20 65 6c 73 65 0a 23 20 20 64 65 66 69  t.# else.#  defi
61d0: 6e 65 20 49 4e 54 38 5f 54 59 50 45 20 73 69 67  ne INT8_TYPE sig
61e0: 6e 65 64 20 63 68 61 72 0a 23 20 65 6e 64 69 66  ned char.# endif
61f0: 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20  .#endif.#ifndef 
6200: 4c 4f 4e 47 44 4f 55 42 4c 45 5f 54 59 50 45 0a  LONGDOUBLE_TYPE.
6210: 23 20 64 65 66 69 6e 65 20 4c 4f 4e 47 44 4f 55  # define LONGDOU
6220: 42 4c 45 5f 54 59 50 45 20 6c 6f 6e 67 20 64 6f  BLE_TYPE long do
6230: 75 62 6c 65 0a 23 65 6e 64 69 66 0a 74 79 70 65  uble.#endif.type
6240: 64 65 66 20 73 71 6c 69 74 65 5f 69 6e 74 36 34  def sqlite_int64
6250: 20 69 36 34 3b 20 20 20 20 20 20 20 20 20 20 2f   i64;          /
6260: 2a 20 38 2d 62 79 74 65 20 73 69 67 6e 65 64 20  * 8-byte signed 
6270: 69 6e 74 65 67 65 72 20 2a 2f 0a 74 79 70 65 64  integer */.typed
6280: 65 66 20 73 71 6c 69 74 65 5f 75 69 6e 74 36 34  ef sqlite_uint64
6290: 20 75 36 34 3b 20 20 20 20 20 20 20 20 20 2f 2a   u64;         /*
62a0: 20 38 2d 62 79 74 65 20 75 6e 73 69 67 6e 65 64   8-byte unsigned
62b0: 20 69 6e 74 65 67 65 72 20 2a 2f 0a 74 79 70 65   integer */.type
62c0: 64 65 66 20 55 49 4e 54 33 32 5f 54 59 50 45 20  def UINT32_TYPE 
62d0: 75 33 32 3b 20 20 20 20 20 20 20 20 20 20 20 2f  u32;           /
62e0: 2a 20 34 2d 62 79 74 65 20 75 6e 73 69 67 6e 65  * 4-byte unsigne
62f0: 64 20 69 6e 74 65 67 65 72 20 2a 2f 0a 74 79 70  d integer */.typ
6300: 65 64 65 66 20 55 49 4e 54 31 36 5f 54 59 50 45  edef UINT16_TYPE
6310: 20 75 31 36 3b 20 20 20 20 20 20 20 20 20 20 20   u16;           
6320: 2f 2a 20 32 2d 62 79 74 65 20 75 6e 73 69 67 6e  /* 2-byte unsign
6330: 65 64 20 69 6e 74 65 67 65 72 20 2a 2f 0a 74 79  ed integer */.ty
6340: 70 65 64 65 66 20 49 4e 54 31 36 5f 54 59 50 45  pedef INT16_TYPE
6350: 20 69 31 36 3b 20 20 20 20 20 20 20 20 20 20 20   i16;           
6360: 20 2f 2a 20 32 2d 62 79 74 65 20 73 69 67 6e 65   /* 2-byte signe
6370: 64 20 69 6e 74 65 67 65 72 20 2a 2f 0a 74 79 70  d integer */.typ
6380: 65 64 65 66 20 55 49 4e 54 38 5f 54 59 50 45 20  edef UINT8_TYPE 
6390: 75 38 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  u8;             
63a0: 2f 2a 20 31 2d 62 79 74 65 20 75 6e 73 69 67 6e  /* 1-byte unsign
63b0: 65 64 20 69 6e 74 65 67 65 72 20 2a 2f 0a 74 79  ed integer */.ty
63c0: 70 65 64 65 66 20 49 4e 54 38 5f 54 59 50 45 20  pedef INT8_TYPE 
63d0: 69 38 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  i8;             
63e0: 20 2f 2a 20 31 2d 62 79 74 65 20 73 69 67 6e 65   /* 1-byte signe
63f0: 64 20 69 6e 74 65 67 65 72 20 2a 2f 0a 0a 2f 2a  d integer */../*
6400: 0a 2a 2a 20 53 51 4c 49 54 45 5f 4d 41 58 5f 55  .** SQLITE_MAX_U
6410: 33 32 20 69 73 20 61 20 75 36 34 20 63 6f 6e 73  32 is a u64 cons
6420: 74 61 6e 74 20 74 68 61 74 20 69 73 20 74 68 65  tant that is the
6430: 20 6d 61 78 69 6d 75 6d 20 75 36 34 20 76 61 6c   maximum u64 val
6440: 75 65 0a 2a 2a 20 74 68 61 74 20 63 61 6e 20 62  ue.** that can b
6450: 65 20 73 74 6f 72 65 64 20 69 6e 20 61 20 75 33  e stored in a u3
6460: 32 20 77 69 74 68 6f 75 74 20 6c 6f 73 73 20 6f  2 without loss o
6470: 66 20 64 61 74 61 2e 20 20 54 68 65 20 76 61 6c  f data.  The val
6480: 75 65 0a 2a 2a 20 69 73 20 30 78 30 30 30 30 30  ue.** is 0x00000
6490: 30 30 30 66 66 66 66 66 66 66 66 2e 20 20 42 75  000ffffffff.  Bu
64a0: 74 20 62 65 63 61 75 73 65 20 6f 66 20 71 75 69  t because of qui
64b0: 72 6b 73 20 6f 66 20 73 6f 6d 65 20 63 6f 6d 70  rks of some comp
64c0: 69 6c 65 72 73 2c 20 77 65 0a 2a 2a 20 68 61 76  ilers, we.** hav
64d0: 65 20 74 6f 20 73 70 65 63 69 66 79 20 74 68 65  e to specify the
64e0: 20 76 61 6c 75 65 20 69 6e 20 74 68 65 20 6c 65   value in the le
64f0: 73 73 20 69 6e 74 75 69 74 69 76 65 20 6d 61 6e  ss intuitive man
6500: 6e 65 72 20 73 68 6f 77 6e 3a 0a 2a 2f 0a 23 64  ner shown:.*/.#d
6510: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 58  efine SQLITE_MAX
6520: 5f 55 33 32 20 20 28 28 28 28 75 36 34 29 31 29  _U32  ((((u64)1)
6530: 3c 3c 33 32 29 2d 31 29 0a 0a 2f 2a 0a 2a 2a 20  <<32)-1)../*.** 
6540: 54 68 65 20 64 61 74 61 74 79 70 65 20 75 73 65  The datatype use
6550: 64 20 74 6f 20 73 74 6f 72 65 20 65 73 74 69 6d  d to store estim
6560: 61 74 65 73 20 6f 66 20 74 68 65 20 6e 75 6d 62  ates of the numb
6570: 65 72 20 6f 66 20 72 6f 77 73 20 69 6e 20 61 0a  er of rows in a.
6580: 2a 2a 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65  ** table or inde
6590: 78 2e 20 20 54 68 69 73 20 69 73 20 61 6e 20 75  x.  This is an u
65a0: 6e 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20  nsigned integer 
65b0: 74 79 70 65 2e 20 20 46 6f 72 20 39 39 2e 39 25  type.  For 99.9%
65c0: 20 6f 66 0a 2a 2a 20 74 68 65 20 77 6f 72 6c 64   of.** the world
65d0: 2c 20 61 20 33 32 2d 62 69 74 20 69 6e 74 65 67  , a 32-bit integ
65e0: 65 72 20 69 73 20 73 75 66 66 69 63 69 65 6e 74  er is sufficient
65f0: 2e 20 20 42 75 74 20 61 20 36 34 2d 62 69 74 20  .  But a 64-bit 
6600: 69 6e 74 65 67 65 72 0a 2a 2a 20 63 61 6e 20 62  integer.** can b
6610: 65 20 75 73 65 64 20 61 74 20 63 6f 6d 70 69 6c  e used at compil
6620: 65 2d 74 69 6d 65 20 69 66 20 64 65 73 69 72 65  e-time if desire
6630: 64 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c  d..*/.#ifdef SQL
6640: 49 54 45 5f 36 34 42 49 54 5f 53 54 41 54 53 0a  ITE_64BIT_STATS.
6650: 20 74 79 70 65 64 65 66 20 75 36 34 20 74 52 6f   typedef u64 tRo
6660: 77 63 6e 74 3b 20 20 20 20 2f 2a 20 36 34 2d 62  wcnt;    /* 64-b
6670: 69 74 20 6f 6e 6c 79 20 69 66 20 72 65 71 75 65  it only if reque
6680: 73 74 65 64 20 61 74 20 63 6f 6d 70 69 6c 65 2d  sted at compile-
6690: 74 69 6d 65 20 2a 2f 0a 23 65 6c 73 65 0a 20 74  time */.#else. t
66a0: 79 70 65 64 65 66 20 75 33 32 20 74 52 6f 77 63  ypedef u32 tRowc
66b0: 6e 74 3b 20 20 20 20 2f 2a 20 33 32 2d 62 69 74  nt;    /* 32-bit
66c0: 20 69 73 20 74 68 65 20 64 65 66 61 75 6c 74 20   is the default 
66d0: 2a 2f 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  */.#endif../*.**
66e0: 20 45 73 74 69 6d 61 74 65 64 20 71 75 61 6e 74   Estimated quant
66f0: 69 74 69 65 73 20 75 73 65 64 20 66 6f 72 20 71  ities used for q
6700: 75 65 72 79 20 70 6c 61 6e 6e 69 6e 67 20 61 72  uery planning ar
6710: 65 20 73 74 6f 72 65 64 20 61 73 20 31 36 2d 62  e stored as 16-b
6720: 69 74 0a 2a 2a 20 6c 6f 67 61 72 69 74 68 6d 73  it.** logarithms
6730: 2e 20 20 46 6f 72 20 71 75 61 6e 74 69 74 79 20  .  For quantity 
6740: 58 2c 20 74 68 65 20 76 61 6c 75 65 20 73 74 6f  X, the value sto
6750: 72 65 64 20 69 73 20 31 30 2a 6c 6f 67 32 28 58  red is 10*log2(X
6760: 29 2e 20 20 54 68 69 73 0a 2a 2a 20 67 69 76 65  ).  This.** give
6770: 73 20 61 20 70 6f 73 73 69 62 6c 65 20 72 61 6e  s a possible ran
6780: 67 65 20 6f 66 20 76 61 6c 75 65 73 20 6f 66 20  ge of values of 
6790: 61 70 70 72 6f 78 69 6d 61 74 65 6c 79 20 31 2e  approximately 1.
67a0: 30 65 39 38 36 20 74 6f 20 31 65 2d 39 38 36 2e  0e986 to 1e-986.
67b0: 0a 2a 2a 20 42 75 74 20 74 68 65 20 61 6c 6c 6f  .** But the allo
67c0: 77 65 64 20 76 61 6c 75 65 73 20 61 72 65 20 22  wed values are "
67d0: 67 72 61 69 6e 79 22 2e 20 20 4e 6f 74 20 65 76  grainy".  Not ev
67e0: 65 72 79 20 76 61 6c 75 65 20 69 73 20 72 65 70  ery value is rep
67f0: 72 65 73 65 6e 74 61 62 6c 65 2e 0a 2a 2a 20 46  resentable..** F
6800: 6f 72 20 65 78 61 6d 70 6c 65 2c 20 71 75 61 6e  or example, quan
6810: 74 69 74 69 65 73 20 31 36 20 61 6e 64 20 31 37  tities 16 and 17
6820: 20 61 72 65 20 62 6f 74 68 20 72 65 70 72 65 73   are both repres
6830: 65 6e 74 65 64 20 62 79 20 61 20 4c 6f 67 45 73  ented by a LogEs
6840: 74 0a 2a 2a 20 6f 66 20 34 30 2e 20 20 48 6f 77  t.** of 40.  How
6850: 65 76 65 72 2c 20 73 69 6e 63 65 20 4c 6f 67 45  ever, since LogE
6860: 73 74 20 71 75 61 6e 74 69 74 69 65 73 20 61 72  st quantities ar
6870: 65 20 73 75 70 70 6f 73 65 20 74 6f 20 62 65 20  e suppose to be 
6880: 65 73 74 69 6d 61 74 65 73 2c 0a 2a 2a 20 6e 6f  estimates,.** no
6890: 74 20 65 78 61 63 74 20 76 61 6c 75 65 73 2c 20  t exact values, 
68a0: 74 68 69 73 20 69 6d 70 72 65 63 69 73 69 6f 6e  this imprecision
68b0: 20 69 73 20 6e 6f 74 20 61 20 70 72 6f 62 6c 65   is not a proble
68c0: 6d 2e 0a 2a 2a 0a 2a 2a 20 22 4c 6f 67 45 73 74  m..**.** "LogEst
68d0: 22 20 69 73 20 73 68 6f 72 74 20 66 6f 72 20 22  " is short for "
68e0: 4c 6f 67 61 72 69 74 68 6d 69 63 20 45 73 74 69  Logarithmic Esti
68f0: 6d 61 74 65 22 2e 0a 2a 2a 0a 2a 2a 20 45 78 61  mate"..**.** Exa
6900: 6d 70 6c 65 73 3a 0a 2a 2a 20 20 20 20 20 20 31  mples:.**      1
6910: 20 2d 3e 20 30 20 20 20 20 20 20 20 20 20 20 20   -> 0           
6920: 20 20 20 32 30 20 2d 3e 20 34 33 20 20 20 20 20     20 -> 43     
6930: 20 20 20 20 20 31 30 30 30 30 20 2d 3e 20 31 33       10000 -> 13
6940: 32 0a 2a 2a 20 20 20 20 20 20 32 20 2d 3e 20 31  2.**      2 -> 1
6950: 30 20 20 20 20 20 20 20 20 20 20 20 20 20 32 35  0             25
6960: 20 2d 3e 20 34 36 20 20 20 20 20 20 20 20 20 20   -> 46          
6970: 32 35 30 30 30 20 2d 3e 20 31 34 36 0a 2a 2a 20  25000 -> 146.** 
6980: 20 20 20 20 20 33 20 2d 3e 20 31 36 20 20 20 20       3 -> 16    
6990: 20 20 20 20 20 20 20 20 31 30 30 20 2d 3e 20 36          100 -> 6
69a0: 36 20 20 20 20 20 20 20 20 31 30 30 30 30 30 30  6        1000000
69b0: 20 2d 3e 20 31 39 39 0a 2a 2a 20 20 20 20 20 20   -> 199.**      
69c0: 34 20 2d 3e 20 32 30 20 20 20 20 20 20 20 20 20  4 -> 20         
69d0: 20 20 31 30 30 30 20 2d 3e 20 39 39 20 20 20 20    1000 -> 99    
69e0: 20 20 20 20 31 30 34 38 35 37 36 20 2d 3e 20 32      1048576 -> 2
69f0: 30 30 0a 2a 2a 20 20 20 20 20 31 30 20 2d 3e 20  00.**     10 -> 
6a00: 33 33 20 20 20 20 20 20 20 20 20 20 20 31 30 32  33           102
6a10: 34 20 2d 3e 20 31 30 30 20 20 20 20 34 32 39 34  4 -> 100    4294
6a20: 39 36 37 32 39 36 20 2d 3e 20 33 32 30 0a 2a 2a  967296 -> 320.**
6a30: 0a 2a 2a 20 54 68 65 20 4c 6f 67 45 73 74 20 63  .** The LogEst c
6a40: 61 6e 20 62 65 20 6e 65 67 61 74 69 76 65 20 74  an be negative t
6a50: 6f 20 69 6e 64 69 63 61 74 65 20 66 72 61 63 74  o indicate fract
6a60: 69 6f 6e 61 6c 20 76 61 6c 75 65 73 2e 0a 2a 2a  ional values..**
6a70: 20 45 78 61 6d 70 6c 65 73 3a 0a 2a 2a 0a 2a 2a   Examples:.**.**
6a80: 20 20 20 20 30 2e 35 20 2d 3e 20 2d 31 30 20 20      0.5 -> -10  
6a90: 20 20 20 20 20 20 20 20 20 30 2e 31 20 2d 3e 20           0.1 -> 
6aa0: 2d 33 33 20 20 20 20 20 20 20 20 30 2e 30 36 32  -33        0.062
6ab0: 35 20 2d 3e 20 2d 34 30 0a 2a 2f 0a 74 79 70 65  5 -> -40.*/.type
6ac0: 64 65 66 20 49 4e 54 31 36 5f 54 59 50 45 20 4c  def INT16_TYPE L
6ad0: 6f 67 45 73 74 3b 0a 0a 2f 2a 0a 2a 2a 20 53 65  ogEst;../*.** Se
6ae0: 74 20 74 68 65 20 53 51 4c 49 54 45 5f 50 54 52  t the SQLITE_PTR
6af0: 53 49 5a 45 20 6d 61 63 72 6f 20 74 6f 20 74 68  SIZE macro to th
6b00: 65 20 6e 75 6d 62 65 72 20 6f 66 20 62 79 74 65  e number of byte
6b10: 73 20 69 6e 20 61 20 70 6f 69 6e 74 65 72 0a 2a  s in a pointer.*
6b20: 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  /.#ifndef SQLITE
6b30: 5f 50 54 52 53 49 5a 45 0a 23 20 69 66 20 64 65  _PTRSIZE.# if de
6b40: 66 69 6e 65 64 28 5f 5f 53 49 5a 45 4f 46 5f 50  fined(__SIZEOF_P
6b50: 4f 49 4e 54 45 52 5f 5f 29 0a 23 20 20 20 64 65  OINTER__).#   de
6b60: 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 54 52 53  fine SQLITE_PTRS
6b70: 49 5a 45 20 5f 5f 53 49 5a 45 4f 46 5f 50 4f 49  IZE __SIZEOF_POI
6b80: 4e 54 45 52 5f 5f 0a 23 20 65 6c 69 66 20 64 65  NTER__.# elif de
6b90: 66 69 6e 65 64 28 69 33 38 36 29 20 20 20 20 20  fined(i386)     
6ba0: 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 69 33 38  || defined(__i38
6bb0: 36 5f 5f 29 20 20 20 7c 7c 20 64 65 66 69 6e 65  6__)   || define
6bc0: 64 28 5f 4d 5f 49 58 38 36 29 20 7c 7c 20 20 20  d(_M_IX86) ||   
6bd0: 20 5c 0a 20 20 20 20 20 20 20 64 65 66 69 6e 65   \.       define
6be0: 64 28 5f 4d 5f 41 52 4d 29 20 20 20 7c 7c 20 64  d(_M_ARM)   || d
6bf0: 65 66 69 6e 65 64 28 5f 5f 61 72 6d 5f 5f 29 20  efined(__arm__) 
6c00: 20 20 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f     || defined(__
6c10: 78 38 36 29 20 20 20 7c 7c 20 20 20 20 5c 0a 20  x86)   ||    \. 
6c20: 20 20 20 20 20 28 64 65 66 69 6e 65 64 28 5f 5f       (defined(__
6c30: 54 4f 53 5f 41 49 58 5f 5f 29 20 26 26 20 21 64  TOS_AIX__) && !d
6c40: 65 66 69 6e 65 64 28 5f 5f 36 34 42 49 54 5f 5f  efined(__64BIT__
6c50: 29 29 0a 23 20 20 20 64 65 66 69 6e 65 20 53 51  )).#   define SQ
6c60: 4c 49 54 45 5f 50 54 52 53 49 5a 45 20 34 0a 23  LITE_PTRSIZE 4.#
6c70: 20 65 6c 73 65 0a 23 20 20 20 64 65 66 69 6e 65   else.#   define
6c80: 20 53 51 4c 49 54 45 5f 50 54 52 53 49 5a 45 20   SQLITE_PTRSIZE 
6c90: 38 0a 23 20 65 6e 64 69 66 0a 23 65 6e 64 69 66  8.# endif.#endif
6ca0: 0a 0a 2f 2a 20 54 68 65 20 75 70 74 72 20 74 79  ../* The uptr ty
6cb0: 70 65 20 69 73 20 61 6e 20 75 6e 73 69 67 6e 65  pe is an unsigne
6cc0: 64 20 69 6e 74 65 67 65 72 20 6c 61 72 67 65 20  d integer large 
6cd0: 65 6e 6f 75 67 68 20 74 6f 20 68 6f 6c 64 20 61  enough to hold a
6ce0: 20 70 6f 69 6e 74 65 72 0a 2a 2f 0a 23 69 66 20   pointer.*/.#if 
6cf0: 64 65 66 69 6e 65 64 28 48 41 56 45 5f 53 54 44  defined(HAVE_STD
6d00: 49 4e 54 5f 48 29 0a 20 20 74 79 70 65 64 65 66  INT_H).  typedef
6d10: 20 75 69 6e 74 70 74 72 5f 74 20 75 70 74 72 3b   uintptr_t uptr;
6d20: 0a 23 65 6c 69 66 20 53 51 4c 49 54 45 5f 50 54  .#elif SQLITE_PT
6d30: 52 53 49 5a 45 3d 3d 34 0a 20 20 74 79 70 65 64  RSIZE==4.  typed
6d40: 65 66 20 75 33 32 20 75 70 74 72 3b 0a 23 65 6c  ef u32 uptr;.#el
6d50: 73 65 0a 20 20 74 79 70 65 64 65 66 20 75 36 34  se.  typedef u64
6d60: 20 75 70 74 72 3b 0a 23 65 6e 64 69 66 0a 0a 2f   uptr;.#endif../
6d70: 2a 0a 2a 2a 20 54 68 65 20 53 51 4c 49 54 45 5f  *.** The SQLITE_
6d80: 57 49 54 48 49 4e 28 50 2c 53 2c 45 29 20 6d 61  WITHIN(P,S,E) ma
6d90: 63 72 6f 20 63 68 65 63 6b 73 20 74 6f 20 73 65  cro checks to se
6da0: 65 20 69 66 20 70 6f 69 6e 74 65 72 20 50 20 70  e if pointer P p
6db0: 6f 69 6e 74 73 20 74 6f 0a 2a 2a 20 73 6f 6d 65  oints to.** some
6dc0: 74 68 69 6e 67 20 62 65 74 77 65 65 6e 20 53 20  thing between S 
6dd0: 28 69 6e 63 6c 75 73 69 76 65 29 20 61 6e 64 20  (inclusive) and 
6de0: 45 20 28 65 78 63 6c 75 73 69 76 65 29 2e 0a 2a  E (exclusive)..*
6df0: 2a 0a 2a 2a 20 49 6e 20 6f 74 68 65 72 20 77 6f  *.** In other wo
6e00: 72 64 73 2c 20 53 20 69 73 20 61 20 62 75 66 66  rds, S is a buff
6e10: 65 72 20 61 6e 64 20 45 20 69 73 20 61 20 70 6f  er and E is a po
6e20: 69 6e 74 65 72 20 74 6f 20 74 68 65 20 66 69 72  inter to the fir
6e30: 73 74 20 62 79 74 65 20 61 66 74 65 72 0a 2a 2a  st byte after.**
6e40: 20 74 68 65 20 65 6e 64 20 6f 66 20 62 75 66 66   the end of buff
6e50: 65 72 20 53 2e 20 20 54 68 69 73 20 6d 61 63 72  er S.  This macr
6e60: 6f 20 72 65 74 75 72 6e 73 20 74 72 75 65 20 69  o returns true i
6e70: 66 20 50 20 70 6f 69 6e 74 73 20 74 6f 20 73 6f  f P points to so
6e80: 6d 65 74 68 69 6e 67 0a 2a 2a 20 63 6f 6e 74 61  mething.** conta
6e90: 69 6e 65 64 20 77 69 74 68 69 6e 20 74 68 65 20  ined within the 
6ea0: 62 75 66 66 65 72 20 53 2e 0a 2a 2f 0a 23 64 65  buffer S..*/.#de
6eb0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 57 49 54 48  fine SQLITE_WITH
6ec0: 49 4e 28 50 2c 53 2c 45 29 20 28 28 28 75 70 74  IN(P,S,E) (((upt
6ed0: 72 29 28 50 29 3e 3d 28 75 70 74 72 29 28 53 29  r)(P)>=(uptr)(S)
6ee0: 29 26 26 28 28 75 70 74 72 29 28 50 29 3c 28 75  )&&((uptr)(P)<(u
6ef0: 70 74 72 29 28 45 29 29 29 0a 0a 0a 2f 2a 0a 2a  ptr)(E))).../*.*
6f00: 2a 20 4d 61 63 72 6f 73 20 74 6f 20 64 65 74 65  * Macros to dete
6f10: 72 6d 69 6e 65 20 77 68 65 74 68 65 72 20 74 68  rmine whether th
6f20: 65 20 6d 61 63 68 69 6e 65 20 69 73 20 62 69 67  e machine is big
6f30: 20 6f 72 20 6c 69 74 74 6c 65 20 65 6e 64 69 61   or little endia
6f40: 6e 2c 0a 2a 2a 20 61 6e 64 20 77 68 65 74 68 65  n,.** and whethe
6f50: 72 20 6f 72 20 6e 6f 74 20 74 68 61 74 20 64 65  r or not that de
6f60: 74 65 72 6d 69 6e 61 74 69 6f 6e 20 69 73 20 72  termination is r
6f70: 75 6e 2d 74 69 6d 65 20 6f 72 20 63 6f 6d 70 69  un-time or compi
6f80: 6c 65 2d 74 69 6d 65 2e 0a 2a 2a 0a 2a 2a 20 46  le-time..**.** F
6f90: 6f 72 20 62 65 73 74 20 70 65 72 66 6f 72 6d 61  or best performa
6fa0: 6e 63 65 2c 20 61 6e 20 61 74 74 65 6d 70 74 20  nce, an attempt 
6fb0: 69 73 20 6d 61 64 65 20 74 6f 20 67 75 65 73 73  is made to guess
6fc0: 20 61 74 20 74 68 65 20 62 79 74 65 2d 6f 72 64   at the byte-ord
6fd0: 65 72 0a 2a 2a 20 75 73 69 6e 67 20 43 2d 70 72  er.** using C-pr
6fe0: 65 70 72 6f 63 65 73 73 6f 72 20 6d 61 63 72 6f  eprocessor macro
6ff0: 73 2e 20 20 49 66 20 74 68 61 74 20 69 73 20 75  s.  If that is u
7000: 6e 73 75 63 63 65 73 73 66 75 6c 2c 20 6f 72 20  nsuccessful, or 
7010: 69 66 0a 2a 2a 20 2d 44 53 51 4c 49 54 45 5f 42  if.** -DSQLITE_B
7020: 59 54 45 4f 52 44 45 52 3d 30 20 69 73 20 73 65  YTEORDER=0 is se
7030: 74 2c 20 74 68 65 6e 20 62 79 74 65 2d 6f 72 64  t, then byte-ord
7040: 65 72 20 69 73 20 64 65 74 65 72 6d 69 6e 65 64  er is determined
7050: 0a 2a 2a 20 61 74 20 72 75 6e 2d 74 69 6d 65 2e  .** at run-time.
7060: 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  .*/.#ifndef SQLI
7070: 54 45 5f 42 59 54 45 4f 52 44 45 52 0a 23 20 69  TE_BYTEORDER.# i
7080: 66 20 64 65 66 69 6e 65 64 28 69 33 38 36 29 20  f defined(i386) 
7090: 20 20 20 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f      || defined(_
70a0: 5f 69 33 38 36 5f 5f 29 20 20 20 7c 7c 20 64 65  _i386__)   || de
70b0: 66 69 6e 65 64 28 5f 4d 5f 49 58 38 36 29 20 7c  fined(_M_IX86) |
70c0: 7c 20 20 20 20 5c 0a 20 20 20 20 20 64 65 66 69  |    \.     defi
70d0: 6e 65 64 28 5f 5f 78 38 36 5f 36 34 29 20 7c 7c  ned(__x86_64) ||
70e0: 20 64 65 66 69 6e 65 64 28 5f 5f 78 38 36 5f 36   defined(__x86_6
70f0: 34 5f 5f 29 20 7c 7c 20 64 65 66 69 6e 65 64 28  4__) || defined(
7100: 5f 4d 5f 58 36 34 29 20 20 7c 7c 20 20 20 20 5c  _M_X64)  ||    \
7110: 0a 20 20 20 20 20 64 65 66 69 6e 65 64 28 5f 4d  .     defined(_M
7120: 5f 41 4d 44 36 34 29 20 7c 7c 20 64 65 66 69 6e  _AMD64) || defin
7130: 65 64 28 5f 4d 5f 41 52 4d 29 20 20 20 20 20 7c  ed(_M_ARM)     |
7140: 7c 20 64 65 66 69 6e 65 64 28 5f 5f 78 38 36 29  | defined(__x86)
7150: 20 20 20 7c 7c 20 20 20 20 5c 0a 20 20 20 20 20     ||    \.     
7160: 64 65 66 69 6e 65 64 28 5f 5f 61 72 6d 5f 5f 29  defined(__arm__)
7170: 20 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 4d 5f    || defined(_M_
7180: 41 52 4d 36 34 29 0a 23 20 20 20 64 65 66 69 6e  ARM64).#   defin
7190: 65 20 53 51 4c 49 54 45 5f 42 59 54 45 4f 52 44  e SQLITE_BYTEORD
71a0: 45 52 20 20 20 20 31 32 33 34 0a 23 20 65 6c 69  ER    1234.# eli
71b0: 66 20 64 65 66 69 6e 65 64 28 73 70 61 72 63 29  f defined(sparc)
71c0: 20 20 20 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f      || defined(_
71d0: 5f 70 70 63 5f 5f 29 0a 23 20 20 20 64 65 66 69  _ppc__).#   defi
71e0: 6e 65 20 53 51 4c 49 54 45 5f 42 59 54 45 4f 52  ne SQLITE_BYTEOR
71f0: 44 45 52 20 20 20 20 34 33 32 31 0a 23 20 65 6c  DER    4321.# el
7200: 73 65 0a 23 20 20 20 64 65 66 69 6e 65 20 53 51  se.#   define SQ
7210: 4c 49 54 45 5f 42 59 54 45 4f 52 44 45 52 20 30  LITE_BYTEORDER 0
7220: 0a 23 20 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a  .# endif.#endif.
7230: 23 69 66 20 53 51 4c 49 54 45 5f 42 59 54 45 4f  #if SQLITE_BYTEO
7240: 52 44 45 52 3d 3d 34 33 32 31 0a 23 20 64 65 66  RDER==4321.# def
7250: 69 6e 65 20 53 51 4c 49 54 45 5f 42 49 47 45 4e  ine SQLITE_BIGEN
7260: 44 49 41 4e 20 20 20 20 31 0a 23 20 64 65 66 69  DIAN    1.# defi
7270: 6e 65 20 53 51 4c 49 54 45 5f 4c 49 54 54 4c 45  ne SQLITE_LITTLE
7280: 45 4e 44 49 41 4e 20 30 0a 23 20 64 65 66 69 6e  ENDIAN 0.# defin
7290: 65 20 53 51 4c 49 54 45 5f 55 54 46 31 36 4e 41  e SQLITE_UTF16NA
72a0: 54 49 56 45 20 20 53 51 4c 49 54 45 5f 55 54 46  TIVE  SQLITE_UTF
72b0: 31 36 42 45 0a 23 65 6c 69 66 20 53 51 4c 49 54  16BE.#elif SQLIT
72c0: 45 5f 42 59 54 45 4f 52 44 45 52 3d 3d 31 32 33  E_BYTEORDER==123
72d0: 34 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  4.# define SQLIT
72e0: 45 5f 42 49 47 45 4e 44 49 41 4e 20 20 20 20 30  E_BIGENDIAN    0
72f0: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
7300: 5f 4c 49 54 54 4c 45 45 4e 44 49 41 4e 20 31 0a  _LITTLEENDIAN 1.
7310: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
7320: 55 54 46 31 36 4e 41 54 49 56 45 20 20 53 51 4c  UTF16NATIVE  SQL
7330: 49 54 45 5f 55 54 46 31 36 4c 45 0a 23 65 6c 73  ITE_UTF16LE.#els
7340: 65 0a 23 20 69 66 64 65 66 20 53 51 4c 49 54 45  e.# ifdef SQLITE
7350: 5f 41 4d 41 4c 47 41 4d 41 54 49 4f 4e 0a 20 20  _AMALGAMATION.  
7360: 63 6f 6e 73 74 20 69 6e 74 20 73 71 6c 69 74 65  const int sqlite
7370: 33 6f 6e 65 20 3d 20 31 3b 0a 23 20 65 6c 73 65  3one = 1;.# else
7380: 0a 20 20 65 78 74 65 72 6e 20 63 6f 6e 73 74 20  .  extern const 
7390: 69 6e 74 20 73 71 6c 69 74 65 33 6f 6e 65 3b 0a  int sqlite3one;.
73a0: 23 20 65 6e 64 69 66 0a 23 20 64 65 66 69 6e 65  # endif.# define
73b0: 20 53 51 4c 49 54 45 5f 42 49 47 45 4e 44 49 41   SQLITE_BIGENDIA
73c0: 4e 20 20 20 20 28 2a 28 63 68 61 72 20 2a 29 28  N    (*(char *)(
73d0: 26 73 71 6c 69 74 65 33 6f 6e 65 29 3d 3d 30 29  &sqlite3one)==0)
73e0: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
73f0: 5f 4c 49 54 54 4c 45 45 4e 44 49 41 4e 20 28 2a  _LITTLEENDIAN (*
7400: 28 63 68 61 72 20 2a 29 28 26 73 71 6c 69 74 65  (char *)(&sqlite
7410: 33 6f 6e 65 29 3d 3d 31 29 0a 23 20 64 65 66 69  3one)==1).# defi
7420: 6e 65 20 53 51 4c 49 54 45 5f 55 54 46 31 36 4e  ne SQLITE_UTF16N
7430: 41 54 49 56 45 20 20 28 53 51 4c 49 54 45 5f 42  ATIVE  (SQLITE_B
7440: 49 47 45 4e 44 49 41 4e 3f 53 51 4c 49 54 45 5f  IGENDIAN?SQLITE_
7450: 55 54 46 31 36 42 45 3a 53 51 4c 49 54 45 5f 55  UTF16BE:SQLITE_U
7460: 54 46 31 36 4c 45 29 0a 23 65 6e 64 69 66 0a 0a  TF16LE).#endif..
7470: 2f 2a 0a 2a 2a 20 43 6f 6e 73 74 61 6e 74 73 20  /*.** Constants 
7480: 66 6f 72 20 74 68 65 20 6c 61 72 67 65 73 74 20  for the largest 
7490: 61 6e 64 20 73 6d 61 6c 6c 65 73 74 20 70 6f 73  and smallest pos
74a0: 73 69 62 6c 65 20 36 34 2d 62 69 74 20 73 69 67  sible 64-bit sig
74b0: 6e 65 64 20 69 6e 74 65 67 65 72 73 2e 0a 2a 2a  ned integers..**
74c0: 20 54 68 65 73 65 20 6d 61 63 72 6f 73 20 61 72   These macros ar
74d0: 65 20 64 65 73 69 67 6e 65 64 20 74 6f 20 77 6f  e designed to wo
74e0: 72 6b 20 63 6f 72 72 65 63 74 6c 79 20 6f 6e 20  rk correctly on 
74f0: 62 6f 74 68 20 33 32 2d 62 69 74 20 61 6e 64 20  both 32-bit and 
7500: 36 34 2d 62 69 74 0a 2a 2a 20 63 6f 6d 70 69 6c  64-bit.** compil
7510: 65 72 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ers..*/.#define 
7520: 4c 41 52 47 45 53 54 5f 49 4e 54 36 34 20 20 28  LARGEST_INT64  (
7530: 30 78 66 66 66 66 66 66 66 66 7c 28 28 28 69 36  0xffffffff|(((i6
7540: 34 29 30 78 37 66 66 66 66 66 66 66 29 3c 3c 33  4)0x7fffffff)<<3
7550: 32 29 29 0a 23 64 65 66 69 6e 65 20 53 4d 41 4c  2)).#define SMAL
7560: 4c 45 53 54 5f 49 4e 54 36 34 20 28 28 28 69 36  LEST_INT64 (((i6
7570: 34 29 2d 31 29 20 2d 20 4c 41 52 47 45 53 54 5f  4)-1) - LARGEST_
7580: 49 4e 54 36 34 29 0a 0a 2f 2a 0a 2a 2a 20 52 6f  INT64)../*.** Ro
7590: 75 6e 64 20 75 70 20 61 20 6e 75 6d 62 65 72 20  und up a number 
75a0: 74 6f 20 74 68 65 20 6e 65 78 74 20 6c 61 72 67  to the next larg
75b0: 65 72 20 6d 75 6c 74 69 70 6c 65 20 6f 66 20 38  er multiple of 8
75c0: 2e 20 20 54 68 69 73 20 69 73 20 75 73 65 64 0a  .  This is used.
75d0: 2a 2a 20 74 6f 20 66 6f 72 63 65 20 38 2d 62 79  ** to force 8-by
75e0: 74 65 20 61 6c 69 67 6e 6d 65 6e 74 20 6f 6e 20  te alignment on 
75f0: 36 34 2d 62 69 74 20 61 72 63 68 69 74 65 63 74  64-bit architect
7600: 75 72 65 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  ures..*/.#define
7610: 20 52 4f 55 4e 44 38 28 78 29 20 20 20 20 20 28   ROUND8(x)     (
7620: 28 28 78 29 2b 37 29 26 7e 37 29 0a 0a 2f 2a 0a  ((x)+7)&~7)../*.
7630: 2a 2a 20 52 6f 75 6e 64 20 64 6f 77 6e 20 74 6f  ** Round down to
7640: 20 74 68 65 20 6e 65 61 72 65 73 74 20 6d 75 6c   the nearest mul
7650: 74 69 70 6c 65 20 6f 66 20 38 0a 2a 2f 0a 23 64  tiple of 8.*/.#d
7660: 65 66 69 6e 65 20 52 4f 55 4e 44 44 4f 57 4e 38  efine ROUNDDOWN8
7670: 28 78 29 20 28 28 78 29 26 7e 37 29 0a 0a 2f 2a  (x) ((x)&~7)../*
7680: 0a 2a 2a 20 41 73 73 65 72 74 20 74 68 61 74 20  .** Assert that 
7690: 74 68 65 20 70 6f 69 6e 74 65 72 20 58 20 69 73  the pointer X is
76a0: 20 61 6c 69 67 6e 65 64 20 74 6f 20 61 6e 20 38   aligned to an 8
76b0: 2d 62 79 74 65 20 62 6f 75 6e 64 61 72 79 2e 20  -byte boundary. 
76c0: 20 54 68 69 73 0a 2a 2a 20 6d 61 63 72 6f 20 69   This.** macro i
76d0: 73 20 75 73 65 64 20 6f 6e 6c 79 20 77 69 74 68  s used only with
76e0: 69 6e 20 61 73 73 65 72 74 28 29 20 74 6f 20 76  in assert() to v
76f0: 65 72 69 66 79 20 74 68 61 74 20 74 68 65 20 63  erify that the c
7700: 6f 64 65 20 67 65 74 73 0a 2a 2a 20 61 6c 6c 20  ode gets.** all 
7710: 61 6c 69 67 6e 6d 65 6e 74 20 72 65 73 74 72 69  alignment restri
7720: 63 74 69 6f 6e 73 20 63 6f 72 72 65 63 74 2e 0a  ctions correct..
7730: 2a 2a 0a 2a 2a 20 45 78 63 65 70 74 2c 20 69 66  **.** Except, if
7740: 20 53 51 4c 49 54 45 5f 34 5f 42 59 54 45 5f 41   SQLITE_4_BYTE_A
7750: 4c 49 47 4e 45 44 5f 4d 41 4c 4c 4f 43 20 69 73  LIGNED_MALLOC is
7760: 20 64 65 66 69 6e 65 64 2c 20 74 68 65 6e 20 74   defined, then t
7770: 68 65 0a 2a 2a 20 75 6e 64 65 72 6c 79 69 6e 67  he.** underlying
7780: 20 6d 61 6c 6c 6f 63 28 29 20 69 6d 70 6c 65 6d   malloc() implem
7790: 65 6e 74 61 74 69 6f 6e 20 6d 69 67 68 74 20 72  entation might r
77a0: 65 74 75 72 6e 20 75 73 20 34 2d 62 79 74 65 20  eturn us 4-byte 
77b0: 61 6c 69 67 6e 65 64 0a 2a 2a 20 70 6f 69 6e 74  aligned.** point
77c0: 65 72 73 2e 20 20 49 6e 20 74 68 61 74 20 63 61  ers.  In that ca
77d0: 73 65 2c 20 6f 6e 6c 79 20 76 65 72 69 66 79 20  se, only verify 
77e0: 34 2d 62 79 74 65 20 61 6c 69 67 6e 6d 65 6e 74  4-byte alignment
77f0: 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49  ..*/.#ifdef SQLI
7800: 54 45 5f 34 5f 42 59 54 45 5f 41 4c 49 47 4e 45  TE_4_BYTE_ALIGNE
7810: 44 5f 4d 41 4c 4c 4f 43 0a 23 20 64 65 66 69 6e  D_MALLOC.# defin
7820: 65 20 45 49 47 48 54 5f 42 59 54 45 5f 41 4c 49  e EIGHT_BYTE_ALI
7830: 47 4e 4d 45 4e 54 28 58 29 20 20 20 28 28 28 28  GNMENT(X)   ((((
7840: 63 68 61 72 2a 29 28 58 29 20 2d 20 28 63 68 61  char*)(X) - (cha
7850: 72 2a 29 30 29 26 33 29 3d 3d 30 29 0a 23 65 6c  r*)0)&3)==0).#el
7860: 73 65 0a 23 20 64 65 66 69 6e 65 20 45 49 47 48  se.# define EIGH
7870: 54 5f 42 59 54 45 5f 41 4c 49 47 4e 4d 45 4e 54  T_BYTE_ALIGNMENT
7880: 28 58 29 20 20 20 28 28 28 28 63 68 61 72 2a 29  (X)   ((((char*)
7890: 28 58 29 20 2d 20 28 63 68 61 72 2a 29 30 29 26  (X) - (char*)0)&
78a0: 37 29 3d 3d 30 29 0a 23 65 6e 64 69 66 0a 0a 2f  7)==0).#endif../
78b0: 2a 0a 2a 2a 20 44 69 73 61 62 6c 65 20 4d 4d 41  *.** Disable MMA
78c0: 50 20 6f 6e 20 70 6c 61 74 66 6f 72 6d 73 20 77  P on platforms w
78d0: 68 65 72 65 20 69 74 20 69 73 20 6b 6e 6f 77 6e  here it is known
78e0: 20 74 6f 20 6e 6f 74 20 77 6f 72 6b 0a 2a 2f 0a   to not work.*/.
78f0: 23 69 66 20 64 65 66 69 6e 65 64 28 5f 5f 4f 70  #if defined(__Op
7900: 65 6e 42 53 44 5f 5f 29 20 7c 7c 20 64 65 66 69  enBSD__) || defi
7910: 6e 65 64 28 5f 5f 51 4e 58 4e 54 4f 5f 5f 29 0a  ned(__QNXNTO__).
7920: 23 20 75 6e 64 65 66 20 53 51 4c 49 54 45 5f 4d  # undef SQLITE_M
7930: 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 0a 23 20 64  AX_MMAP_SIZE.# d
7940: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 58  efine SQLITE_MAX
7950: 5f 4d 4d 41 50 5f 53 49 5a 45 20 30 0a 23 65 6e  _MMAP_SIZE 0.#en
7960: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 44 65 66 61 75  dif../*.** Defau
7970: 6c 74 20 6d 61 78 69 6d 75 6d 20 73 69 7a 65 20  lt maximum size 
7980: 6f 66 20 6d 65 6d 6f 72 79 20 75 73 65 64 20 62  of memory used b
7990: 79 20 6d 65 6d 6f 72 79 2d 6d 61 70 70 65 64 20  y memory-mapped 
79a0: 49 2f 4f 20 69 6e 20 74 68 65 20 56 46 53 0a 2a  I/O in the VFS.*
79b0: 2f 0a 23 69 66 64 65 66 20 5f 5f 41 50 50 4c 45  /.#ifdef __APPLE
79c0: 5f 5f 0a 23 20 69 6e 63 6c 75 64 65 20 3c 54 61  __.# include <Ta
79d0: 72 67 65 74 43 6f 6e 64 69 74 69 6f 6e 61 6c 73  rgetConditionals
79e0: 2e 68 3e 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64  .h>.#endif.#ifnd
79f0: 65 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d  ef SQLITE_MAX_MM
7a00: 41 50 5f 53 49 5a 45 0a 23 20 69 66 20 64 65 66  AP_SIZE.# if def
7a10: 69 6e 65 64 28 5f 5f 6c 69 6e 75 78 5f 5f 29 20  ined(__linux__) 
7a20: 5c 0a 20 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f  \.  || defined(_
7a30: 57 49 4e 33 32 29 20 5c 0a 20 20 7c 7c 20 28 64  WIN32) \.  || (d
7a40: 65 66 69 6e 65 64 28 5f 5f 41 50 50 4c 45 5f 5f  efined(__APPLE__
7a50: 29 20 26 26 20 64 65 66 69 6e 65 64 28 5f 5f 4d  ) && defined(__M
7a60: 41 43 48 5f 5f 29 29 20 5c 0a 20 20 7c 7c 20 64  ACH__)) \.  || d
7a70: 65 66 69 6e 65 64 28 5f 5f 73 75 6e 29 20 5c 0a  efined(__sun) \.
7a80: 20 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 46    || defined(__F
7a90: 72 65 65 42 53 44 5f 5f 29 20 5c 0a 20 20 7c 7c  reeBSD__) \.  ||
7aa0: 20 64 65 66 69 6e 65 64 28 5f 5f 44 72 61 67 6f   defined(__Drago
7ab0: 6e 46 6c 79 5f 5f 29 0a 23 20 20 20 64 65 66 69  nFly__).#   defi
7ac0: 6e 65 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d  ne SQLITE_MAX_MM
7ad0: 41 50 5f 53 49 5a 45 20 30 78 37 66 66 66 30 30  AP_SIZE 0x7fff00
7ae0: 30 30 20 20 2f 2a 20 32 31 34 37 34 31 38 31 31  00  /* 214741811
7af0: 32 20 2a 2f 0a 23 20 65 6c 73 65 0a 23 20 20 20  2 */.# else.#   
7b00: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41  define SQLITE_MA
7b10: 58 5f 4d 4d 41 50 5f 53 49 5a 45 20 30 0a 23 20  X_MMAP_SIZE 0.# 
7b20: 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 0a 2f 2a  endif.#endif../*
7b30: 0a 2a 2a 20 54 68 65 20 64 65 66 61 75 6c 74 20  .** The default 
7b40: 4d 4d 41 50 5f 53 49 5a 45 20 69 73 20 7a 65 72  MMAP_SIZE is zer
7b50: 6f 20 6f 6e 20 61 6c 6c 20 70 6c 61 74 66 6f 72  o on all platfor
7b60: 6d 73 2e 20 20 4f 72 2c 20 65 76 65 6e 20 69 66  ms.  Or, even if
7b70: 20 61 20 6c 61 72 67 65 72 0a 2a 2a 20 64 65 66   a larger.** def
7b80: 61 75 6c 74 20 4d 4d 41 50 5f 53 49 5a 45 20 69  ault MMAP_SIZE i
7b90: 73 20 73 70 65 63 69 66 69 65 64 20 61 74 20 63  s specified at c
7ba0: 6f 6d 70 69 6c 65 2d 74 69 6d 65 2c 20 6d 61 6b  ompile-time, mak
7bb0: 65 20 73 75 72 65 20 74 68 61 74 20 69 74 20 64  e sure that it d
7bc0: 6f 65 73 0a 2a 2a 20 6e 6f 74 20 65 78 63 65 65  oes.** not excee
7bd0: 64 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 6d 6d  d the maximum mm
7be0: 61 70 20 73 69 7a 65 2e 0a 2a 2f 0a 23 69 66 6e  ap size..*/.#ifn
7bf0: 64 65 66 20 53 51 4c 49 54 45 5f 44 45 46 41 55  def SQLITE_DEFAU
7c00: 4c 54 5f 4d 4d 41 50 5f 53 49 5a 45 0a 23 20 64  LT_MMAP_SIZE.# d
7c10: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 45 46  efine SQLITE_DEF
7c20: 41 55 4c 54 5f 4d 4d 41 50 5f 53 49 5a 45 20 30  AULT_MMAP_SIZE 0
7c30: 0a 23 65 6e 64 69 66 0a 23 69 66 20 53 51 4c 49  .#endif.#if SQLI
7c40: 54 45 5f 44 45 46 41 55 4c 54 5f 4d 4d 41 50 5f  TE_DEFAULT_MMAP_
7c50: 53 49 5a 45 3e 53 51 4c 49 54 45 5f 4d 41 58 5f  SIZE>SQLITE_MAX_
7c60: 4d 4d 41 50 5f 53 49 5a 45 0a 23 20 75 6e 64 65  MMAP_SIZE.# unde
7c70: 66 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54  f SQLITE_DEFAULT
7c80: 5f 4d 4d 41 50 5f 53 49 5a 45 0a 23 20 64 65 66  _MMAP_SIZE.# def
7c90: 69 6e 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55  ine SQLITE_DEFAU
7ca0: 4c 54 5f 4d 4d 41 50 5f 53 49 5a 45 20 53 51 4c  LT_MMAP_SIZE SQL
7cb0: 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a  ITE_MAX_MMAP_SIZ
7cc0: 45 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  E.#endif../*.** 
7cd0: 4f 6e 6c 79 20 6f 6e 65 20 6f 66 20 53 51 4c 49  Only one of SQLI
7ce0: 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 20  TE_ENABLE_STAT3 
7cf0: 6f 72 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  or SQLITE_ENABLE
7d00: 5f 53 54 41 54 34 20 63 61 6e 20 62 65 20 64 65  _STAT4 can be de
7d10: 66 69 6e 65 64 2e 0a 2a 2a 20 50 72 69 6f 72 69  fined..** Priori
7d20: 74 79 20 69 73 20 67 69 76 65 6e 20 74 6f 20 53  ty is given to S
7d30: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41  QLITE_ENABLE_STA
7d40: 54 34 2e 20 20 49 66 20 65 69 74 68 65 72 20 61  T4.  If either a
7d50: 72 65 20 64 65 66 69 6e 65 64 2c 20 61 6c 73 6f  re defined, also
7d60: 0a 2a 2a 20 64 65 66 69 6e 65 20 53 51 4c 49 54  .** define SQLIT
7d70: 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 5f 4f  E_ENABLE_STAT3_O
7d80: 52 5f 53 54 41 54 34 0a 2a 2f 0a 23 69 66 64 65  R_STAT4.*/.#ifde
7d90: 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
7da0: 53 54 41 54 34 0a 23 20 75 6e 64 65 66 20 53 51  STAT4.# undef SQ
7db0: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54  LITE_ENABLE_STAT
7dc0: 33 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  3.# define SQLIT
7dd0: 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 5f 4f  E_ENABLE_STAT3_O
7de0: 52 5f 53 54 41 54 34 20 31 0a 23 65 6c 69 66 20  R_STAT4 1.#elif 
7df0: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54  SQLITE_ENABLE_ST
7e00: 41 54 33 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  AT3.# define SQL
7e10: 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33  ITE_ENABLE_STAT3
7e20: 5f 4f 52 5f 53 54 41 54 34 20 31 0a 23 65 6c 69  _OR_STAT4 1.#eli
7e30: 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
7e40: 53 54 41 54 33 5f 4f 52 5f 53 54 41 54 34 0a 23  STAT3_OR_STAT4.#
7e50: 20 75 6e 64 65 66 20 53 51 4c 49 54 45 5f 45 4e   undef SQLITE_EN
7e60: 41 42 4c 45 5f 53 54 41 54 33 5f 4f 52 5f 53 54  ABLE_STAT3_OR_ST
7e70: 41 54 34 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  AT4.#endif../*.*
7e80: 2a 20 53 45 4c 45 43 54 54 52 41 43 45 5f 45 4e  * SELECTTRACE_EN
7e90: 41 42 4c 45 44 20 77 69 6c 6c 20 62 65 20 65 69  ABLED will be ei
7ea0: 74 68 65 72 20 31 20 6f 72 20 30 20 64 65 70 65  ther 1 or 0 depe
7eb0: 6e 64 69 6e 67 20 6f 6e 20 77 68 65 74 68 65 72  nding on whether
7ec0: 20 6f 72 20 6e 6f 74 0a 2a 2a 20 74 68 65 20 53   or not.** the S
7ed0: 65 6c 65 63 74 20 71 75 65 72 79 20 67 65 6e 65  elect query gene
7ee0: 72 61 74 6f 72 20 74 72 61 63 69 6e 67 20 6c 6f  rator tracing lo
7ef0: 67 69 63 20 69 73 20 74 75 72 6e 65 64 20 6f 6e  gic is turned on
7f00: 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64  ..*/.#if defined
7f10: 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53  (SQLITE_ENABLE_S
7f20: 45 4c 45 43 54 54 52 41 43 45 29 0a 23 20 64 65  ELECTTRACE).# de
7f30: 66 69 6e 65 20 53 45 4c 45 43 54 54 52 41 43 45  fine SELECTTRACE
7f40: 5f 45 4e 41 42 4c 45 44 20 31 0a 23 65 6c 73 65  _ENABLED 1.#else
7f50: 0a 23 20 64 65 66 69 6e 65 20 53 45 4c 45 43 54  .# define SELECT
7f60: 54 52 41 43 45 5f 45 4e 41 42 4c 45 44 20 30 0a  TRACE_ENABLED 0.
7f70: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6e  #endif../*.** An
7f80: 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65   instance of the
7f90: 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63   following struc
7fa0: 74 75 72 65 20 69 73 20 75 73 65 64 20 74 6f 20  ture is used to 
7fb0: 73 74 6f 72 65 20 74 68 65 20 62 75 73 79 2d 68  store the busy-h
7fc0: 61 6e 64 6c 65 72 0a 2a 2a 20 63 61 6c 6c 62 61  andler.** callba
7fd0: 63 6b 20 66 6f 72 20 61 20 67 69 76 65 6e 20 73  ck for a given s
7fe0: 71 6c 69 74 65 20 68 61 6e 64 6c 65 2e 0a 2a 2a  qlite handle..**
7ff0: 0a 2a 2a 20 54 68 65 20 73 71 6c 69 74 65 2e 62  .** The sqlite.b
8000: 75 73 79 48 61 6e 64 6c 65 72 20 6d 65 6d 62 65  usyHandler membe
8010: 72 20 6f 66 20 74 68 65 20 73 71 6c 69 74 65 20  r of the sqlite 
8020: 73 74 72 75 63 74 20 63 6f 6e 74 61 69 6e 73 20  struct contains 
8030: 74 68 65 20 62 75 73 79 0a 2a 2a 20 63 61 6c 6c  the busy.** call
8040: 62 61 63 6b 20 66 6f 72 20 74 68 65 20 64 61 74  back for the dat
8050: 61 62 61 73 65 20 68 61 6e 64 6c 65 2e 20 45 61  abase handle. Ea
8060: 63 68 20 70 61 67 65 72 20 6f 70 65 6e 65 64 20  ch pager opened 
8070: 76 69 61 20 74 68 65 20 73 71 6c 69 74 65 0a 2a  via the sqlite.*
8080: 2a 20 68 61 6e 64 6c 65 20 69 73 20 70 61 73 73  * handle is pass
8090: 65 64 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20  ed a pointer to 
80a0: 73 71 6c 69 74 65 2e 62 75 73 79 48 61 6e 64 6c  sqlite.busyHandl
80b0: 65 72 2e 20 54 68 65 20 62 75 73 79 2d 68 61 6e  er. The busy-han
80c0: 64 6c 65 72 0a 2a 2a 20 63 61 6c 6c 62 61 63 6b  dler.** callback
80d0: 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20 69 6e   is currently in
80e0: 76 6f 6b 65 64 20 6f 6e 6c 79 20 66 72 6f 6d 20  voked only from 
80f0: 77 69 74 68 69 6e 20 70 61 67 65 72 2e 63 2e 0a  within pager.c..
8100: 2a 2f 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  */.typedef struc
8110: 74 20 42 75 73 79 48 61 6e 64 6c 65 72 20 42 75  t BusyHandler Bu
8120: 73 79 48 61 6e 64 6c 65 72 3b 0a 73 74 72 75 63  syHandler;.struc
8130: 74 20 42 75 73 79 48 61 6e 64 6c 65 72 20 7b 0a  t BusyHandler {.
8140: 20 20 69 6e 74 20 28 2a 78 42 75 73 79 48 61 6e    int (*xBusyHan
8150: 64 6c 65 72 29 28 76 6f 69 64 20 2a 2c 69 6e 74  dler)(void *,int
8160: 29 3b 20 20 2f 2a 20 54 68 65 20 62 75 73 79 20  );  /* The busy 
8170: 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 76 6f  callback */.  vo
8180: 69 64 20 2a 70 42 75 73 79 41 72 67 3b 20 20 20  id *pBusyArg;   
8190: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
81a0: 2f 2a 20 46 69 72 73 74 20 61 72 67 20 74 6f 20  /* First arg to 
81b0: 62 75 73 79 20 63 61 6c 6c 62 61 63 6b 20 2a 2f  busy callback */
81c0: 0a 20 20 69 6e 74 20 6e 42 75 73 79 3b 20 20 20  .  int nBusy;   
81d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
81e0: 20 20 20 20 20 2f 2a 20 49 6e 63 72 65 6d 65 6e       /* Incremen
81f0: 74 65 64 20 77 69 74 68 20 65 61 63 68 20 62 75  ted with each bu
8200: 73 79 20 63 61 6c 6c 20 2a 2f 0a 20 20 75 38 20  sy call */.  u8 
8210: 62 45 78 74 72 61 46 69 6c 65 41 72 67 3b 20 20  bExtraFileArg;  
8220: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
8230: 2a 20 49 6e 63 6c 75 64 65 20 73 71 6c 69 74 65  * Include sqlite
8240: 33 5f 66 69 6c 65 20 61 73 20 63 61 6c 6c 62 61  3_file as callba
8250: 63 6b 20 61 72 67 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  ck arg */.};../*
8260: 0a 2a 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65 20  .** Name of the 
8270: 6d 61 73 74 65 72 20 64 61 74 61 62 61 73 65 20  master database 
8280: 74 61 62 6c 65 2e 20 20 54 68 65 20 6d 61 73 74  table.  The mast
8290: 65 72 20 64 61 74 61 62 61 73 65 20 74 61 62 6c  er database tabl
82a0: 65 0a 2a 2a 20 69 73 20 61 20 73 70 65 63 69 61  e.** is a specia
82b0: 6c 20 74 61 62 6c 65 20 74 68 61 74 20 68 6f 6c  l table that hol
82c0: 64 73 20 74 68 65 20 6e 61 6d 65 73 20 61 6e 64  ds the names and
82d0: 20 61 74 74 72 69 62 75 74 65 73 20 6f 66 20 61   attributes of a
82e0: 6c 6c 0a 2a 2a 20 75 73 65 72 20 74 61 62 6c 65  ll.** user table
82f0: 73 20 61 6e 64 20 69 6e 64 69 63 65 73 2e 0a 2a  s and indices..*
8300: 2f 0a 23 64 65 66 69 6e 65 20 4d 41 53 54 45 52  /.#define MASTER
8310: 5f 4e 41 4d 45 20 20 20 20 20 20 20 22 73 71 6c  _NAME       "sql
8320: 69 74 65 5f 6d 61 73 74 65 72 22 0a 23 64 65 66  ite_master".#def
8330: 69 6e 65 20 54 45 4d 50 5f 4d 41 53 54 45 52 5f  ine TEMP_MASTER_
8340: 4e 41 4d 45 20 20 22 73 71 6c 69 74 65 5f 74 65  NAME  "sqlite_te
8350: 6d 70 5f 6d 61 73 74 65 72 22 0a 0a 2f 2a 0a 2a  mp_master"../*.*
8360: 2a 20 54 68 65 20 72 6f 6f 74 2d 70 61 67 65 20  * The root-page 
8370: 6f 66 20 74 68 65 20 6d 61 73 74 65 72 20 64 61  of the master da
8380: 74 61 62 61 73 65 20 74 61 62 6c 65 2e 0a 2a 2f  tabase table..*/
8390: 0a 23 64 65 66 69 6e 65 20 4d 41 53 54 45 52 5f  .#define MASTER_
83a0: 52 4f 4f 54 20 20 20 20 20 20 20 31 0a 0a 2f 2a  ROOT       1../*
83b0: 0a 2a 2a 20 54 68 65 20 6e 61 6d 65 20 6f 66 20  .** The name of 
83c0: 74 68 65 20 73 63 68 65 6d 61 20 74 61 62 6c 65  the schema table
83d0: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 43 48  ..*/.#define SCH
83e0: 45 4d 41 5f 54 41 42 4c 45 28 78 29 20 20 28 28  EMA_TABLE(x)  ((
83f0: 21 4f 4d 49 54 5f 54 45 4d 50 44 42 29 26 26 28  !OMIT_TEMPDB)&&(
8400: 78 3d 3d 31 29 3f 54 45 4d 50 5f 4d 41 53 54 45  x==1)?TEMP_MASTE
8410: 52 5f 4e 41 4d 45 3a 4d 41 53 54 45 52 5f 4e 41  R_NAME:MASTER_NA
8420: 4d 45 29 0a 0a 2f 2a 0a 2a 2a 20 41 20 63 6f 6e  ME)../*.** A con
8430: 76 65 6e 69 65 6e 63 65 20 6d 61 63 72 6f 20 74  venience macro t
8440: 68 61 74 20 72 65 74 75 72 6e 73 20 74 68 65 20  hat returns the 
8450: 6e 75 6d 62 65 72 20 6f 66 20 65 6c 65 6d 65 6e  number of elemen
8460: 74 73 20 69 6e 0a 2a 2a 20 61 6e 20 61 72 72 61  ts in.** an arra
8470: 79 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 41 72  y..*/.#define Ar
8480: 72 61 79 53 69 7a 65 28 58 29 20 20 20 20 28 28  raySize(X)    ((
8490: 69 6e 74 29 28 73 69 7a 65 6f 66 28 58 29 2f 73  int)(sizeof(X)/s
84a0: 69 7a 65 6f 66 28 58 5b 30 5d 29 29 29 0a 0a 2f  izeof(X[0])))../
84b0: 2a 0a 2a 2a 20 44 65 74 65 72 6d 69 6e 65 20 69  *.** Determine i
84c0: 66 20 74 68 65 20 61 72 67 75 6d 65 6e 74 20 69  f the argument i
84d0: 73 20 61 20 70 6f 77 65 72 20 6f 66 20 74 77 6f  s a power of two
84e0: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 49 73 50 6f  .*/.#define IsPo
84f0: 77 65 72 4f 66 54 77 6f 28 58 29 20 28 28 28 58  werOfTwo(X) (((X
8500: 29 26 28 28 58 29 2d 31 29 29 3d 3d 30 29 0a 0a  )&((X)-1))==0)..
8510: 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77  /*.** The follow
8520: 69 6e 67 20 76 61 6c 75 65 20 61 73 20 61 20 64  ing value as a d
8530: 65 73 74 72 75 63 74 6f 72 20 6d 65 61 6e 73 20  estructor means 
8540: 74 6f 20 75 73 65 20 73 71 6c 69 74 65 33 44 62  to use sqlite3Db
8550: 46 72 65 65 28 29 2e 0a 2a 2a 20 54 68 65 20 73  Free()..** The s
8560: 71 6c 69 74 65 33 44 62 46 72 65 65 28 29 20 72  qlite3DbFree() r
8570: 6f 75 74 69 6e 65 20 72 65 71 75 69 72 65 73 20  outine requires 
8580: 74 77 6f 20 70 61 72 61 6d 65 74 65 72 73 20 69  two parameters i
8590: 6e 73 74 65 61 64 20 6f 66 20 74 68 65 0a 2a 2a  nstead of the.**
85a0: 20 6f 6e 65 20 70 61 72 61 6d 65 74 65 72 20 74   one parameter t
85b0: 68 61 74 20 64 65 73 74 72 75 63 74 6f 72 73 20  hat destructors 
85c0: 6e 6f 72 6d 61 6c 6c 79 20 77 61 6e 74 2e 20 20  normally want.  
85d0: 53 6f 20 77 65 20 68 61 76 65 20 74 6f 20 69 6e  So we have to in
85e0: 74 72 6f 64 75 63 65 0a 2a 2a 20 74 68 69 73 20  troduce.** this 
85f0: 6d 61 67 69 63 20 76 61 6c 75 65 20 74 68 61 74  magic value that
8600: 20 74 68 65 20 63 6f 64 65 20 6b 6e 6f 77 73 20   the code knows 
8610: 74 6f 20 68 61 6e 64 6c 65 20 64 69 66 66 65 72  to handle differ
8620: 65 6e 74 6c 79 2e 20 20 41 6e 79 0a 2a 2a 20 70  ently.  Any.** p
8630: 6f 69 6e 74 65 72 20 77 69 6c 6c 20 77 6f 72 6b  ointer will work
8640: 20 68 65 72 65 20 61 73 20 6c 6f 6e 67 20 61 73   here as long as
8650: 20 69 74 20 69 73 20 64 69 73 74 69 6e 63 74 20   it is distinct 
8660: 66 72 6f 6d 20 53 51 4c 49 54 45 5f 53 54 41 54  from SQLITE_STAT
8670: 49 43 0a 2a 2a 20 61 6e 64 20 53 51 4c 49 54 45  IC.** and SQLITE
8680: 5f 54 52 41 4e 53 49 45 4e 54 2e 0a 2a 2f 0a 23  _TRANSIENT..*/.#
8690: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 59  define SQLITE_DY
86a0: 4e 41 4d 49 43 20 20 20 28 28 73 71 6c 69 74 65  NAMIC   ((sqlite
86b0: 33 5f 64 65 73 74 72 75 63 74 6f 72 5f 74 79 70  3_destructor_typ
86c0: 65 29 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 53  e)sqlite3MallocS
86d0: 69 7a 65 29 0a 0a 2f 2a 0a 2a 2a 20 57 68 65 6e  ize)../*.** When
86e0: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 53 44   SQLITE_OMIT_WSD
86f0: 20 69 73 20 64 65 66 69 6e 65 64 2c 20 69 74 20   is defined, it 
8700: 6d 65 61 6e 73 20 74 68 61 74 20 74 68 65 20 74  means that the t
8710: 61 72 67 65 74 20 70 6c 61 74 66 6f 72 6d 20 64  arget platform d
8720: 6f 65 73 0a 2a 2a 20 6e 6f 74 20 73 75 70 70 6f  oes.** not suppo
8730: 72 74 20 57 72 69 74 61 62 6c 65 20 53 74 61 74  rt Writable Stat
8740: 69 63 20 44 61 74 61 20 28 57 53 44 29 20 73 75  ic Data (WSD) su
8750: 63 68 20 61 73 20 67 6c 6f 62 61 6c 20 61 6e 64  ch as global and
8760: 20 73 74 61 74 69 63 20 76 61 72 69 61 62 6c 65   static variable
8770: 73 2e 0a 2a 2a 20 41 6c 6c 20 76 61 72 69 61 62  s..** All variab
8780: 6c 65 73 20 6d 75 73 74 20 65 69 74 68 65 72 20  les must either 
8790: 62 65 20 6f 6e 20 74 68 65 20 73 74 61 63 6b 20  be on the stack 
87a0: 6f 72 20 64 79 6e 61 6d 69 63 61 6c 6c 79 20 61  or dynamically a
87b0: 6c 6c 6f 63 61 74 65 64 20 66 72 6f 6d 0a 2a 2a  llocated from.**
87c0: 20 74 68 65 20 68 65 61 70 2e 20 20 57 68 65 6e   the heap.  When
87d0: 20 57 53 44 20 69 73 20 75 6e 73 75 70 70 6f 72   WSD is unsuppor
87e0: 74 65 64 2c 20 74 68 65 20 76 61 72 69 61 62 6c  ted, the variabl
87f0: 65 20 64 65 63 6c 61 72 61 74 69 6f 6e 73 20 73  e declarations s
8800: 63 61 74 74 65 72 65 64 0a 2a 2a 20 74 68 72 6f  cattered.** thro
8810: 75 67 68 6f 75 74 20 74 68 65 20 53 51 4c 69 74  ughout the SQLit
8820: 65 20 63 6f 64 65 20 6d 75 73 74 20 62 65 63 6f  e code must beco
8830: 6d 65 20 63 6f 6e 73 74 61 6e 74 73 20 69 6e 73  me constants ins
8840: 74 65 61 64 2e 20 20 54 68 65 20 53 51 4c 49 54  tead.  The SQLIT
8850: 45 5f 57 53 44 0a 2a 2a 20 6d 61 63 72 6f 20 69  E_WSD.** macro i
8860: 73 20 75 73 65 64 20 66 6f 72 20 74 68 69 73 20  s used for this 
8870: 70 75 72 70 6f 73 65 2e 20 20 41 6e 64 20 69 6e  purpose.  And in
8880: 73 74 65 61 64 20 6f 66 20 72 65 66 65 72 65 6e  stead of referen
8890: 63 69 6e 67 20 74 68 65 20 76 61 72 69 61 62 6c  cing the variabl
88a0: 65 0a 2a 2a 20 64 69 72 65 63 74 6c 79 2c 20 77  e.** directly, w
88b0: 65 20 75 73 65 20 69 74 73 20 63 6f 6e 73 74 61  e use its consta
88c0: 6e 74 20 61 73 20 61 20 6b 65 79 20 74 6f 20 6c  nt as a key to l
88d0: 6f 6f 6b 75 70 20 74 68 65 20 72 75 6e 2d 74 69  ookup the run-ti
88e0: 6d 65 20 61 6c 6c 6f 63 61 74 65 64 0a 2a 2a 20  me allocated.** 
88f0: 62 75 66 66 65 72 20 74 68 61 74 20 68 6f 6c 64  buffer that hold
8900: 73 20 72 65 61 6c 20 76 61 72 69 61 62 6c 65 2e  s real variable.
8910: 20 20 54 68 65 20 63 6f 6e 73 74 61 6e 74 20 69    The constant i
8920: 73 20 61 6c 73 6f 20 74 68 65 20 69 6e 69 74 69  s also the initi
8930: 61 6c 69 7a 65 72 0a 2a 2a 20 66 6f 72 20 74 68  alizer.** for th
8940: 65 20 72 75 6e 2d 74 69 6d 65 20 61 6c 6c 6f 63  e run-time alloc
8950: 61 74 65 64 20 62 75 66 66 65 72 2e 0a 2a 2a 0a  ated buffer..**.
8960: 2a 2a 20 49 6e 20 74 68 65 20 75 73 75 61 6c 20  ** In the usual 
8970: 63 61 73 65 20 77 68 65 72 65 20 57 53 44 20 69  case where WSD i
8980: 73 20 73 75 70 70 6f 72 74 65 64 2c 20 74 68 65  s supported, the
8990: 20 53 51 4c 49 54 45 5f 57 53 44 20 61 6e 64 20   SQLITE_WSD and 
89a0: 47 4c 4f 42 41 4c 0a 2a 2a 20 6d 61 63 72 6f 73  GLOBAL.** macros
89b0: 20 62 65 63 6f 6d 65 20 6e 6f 2d 6f 70 73 20 61   become no-ops a
89c0: 6e 64 20 68 61 76 65 20 7a 65 72 6f 20 70 65 72  nd have zero per
89d0: 66 6f 72 6d 61 6e 63 65 20 69 6d 70 61 63 74 2e  formance impact.
89e0: 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54  .*/.#ifdef SQLIT
89f0: 45 5f 4f 4d 49 54 5f 57 53 44 0a 20 20 23 64 65  E_OMIT_WSD.  #de
8a00: 66 69 6e 65 20 53 51 4c 49 54 45 5f 57 53 44 20  fine SQLITE_WSD 
8a10: 63 6f 6e 73 74 0a 20 20 23 64 65 66 69 6e 65 20  const.  #define 
8a20: 47 4c 4f 42 41 4c 28 74 2c 76 29 20 28 2a 28 74  GLOBAL(t,v) (*(t
8a30: 2a 29 73 71 6c 69 74 65 33 5f 77 73 64 5f 66 69  *)sqlite3_wsd_fi
8a40: 6e 64 28 28 76 6f 69 64 2a 29 26 28 76 29 2c 20  nd((void*)&(v), 
8a50: 73 69 7a 65 6f 66 28 76 29 29 29 0a 20 20 23 64  sizeof(v))).  #d
8a60: 65 66 69 6e 65 20 73 71 6c 69 74 65 33 47 6c 6f  efine sqlite3Glo
8a70: 62 61 6c 43 6f 6e 66 69 67 20 47 4c 4f 42 41 4c  balConfig GLOBAL
8a80: 28 73 74 72 75 63 74 20 53 71 6c 69 74 65 33 43  (struct Sqlite3C
8a90: 6f 6e 66 69 67 2c 20 73 71 6c 69 74 65 33 43 6f  onfig, sqlite3Co
8aa0: 6e 66 69 67 29 0a 20 20 69 6e 74 20 73 71 6c 69  nfig).  int sqli
8ab0: 74 65 33 5f 77 73 64 5f 69 6e 69 74 28 69 6e 74  te3_wsd_init(int
8ac0: 20 4e 2c 20 69 6e 74 20 4a 29 3b 0a 20 20 76 6f   N, int J);.  vo
8ad0: 69 64 20 2a 73 71 6c 69 74 65 33 5f 77 73 64 5f  id *sqlite3_wsd_
8ae0: 66 69 6e 64 28 76 6f 69 64 20 2a 4b 2c 20 69 6e  find(void *K, in
8af0: 74 20 4c 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64  t L);.#else.  #d
8b00: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 57 53 44  efine SQLITE_WSD
8b10: 0a 20 20 23 64 65 66 69 6e 65 20 47 4c 4f 42 41  .  #define GLOBA
8b20: 4c 28 74 2c 76 29 20 76 0a 20 20 23 64 65 66 69  L(t,v) v.  #defi
8b30: 6e 65 20 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c  ne sqlite3Global
8b40: 43 6f 6e 66 69 67 20 73 71 6c 69 74 65 33 43 6f  Config sqlite3Co
8b50: 6e 66 69 67 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  nfig.#endif../*.
8b60: 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  ** The following
8b70: 20 6d 61 63 72 6f 73 20 61 72 65 20 75 73 65 64   macros are used
8b80: 20 74 6f 20 73 75 70 70 72 65 73 73 20 63 6f 6d   to suppress com
8b90: 70 69 6c 65 72 20 77 61 72 6e 69 6e 67 73 20 61  piler warnings a
8ba0: 6e 64 20 74 6f 0a 2a 2a 20 6d 61 6b 65 20 69 74  nd to.** make it
8bb0: 20 63 6c 65 61 72 20 74 6f 20 68 75 6d 61 6e 20   clear to human 
8bc0: 72 65 61 64 65 72 73 20 77 68 65 6e 20 61 20 66  readers when a f
8bd0: 75 6e 63 74 69 6f 6e 20 70 61 72 61 6d 65 74 65  unction paramete
8be0: 72 20 69 73 20 64 65 6c 69 62 65 72 61 74 65 6c  r is deliberatel
8bf0: 79 0a 2a 2a 20 6c 65 66 74 20 75 6e 75 73 65 64  y.** left unused
8c00: 20 77 69 74 68 69 6e 20 74 68 65 20 62 6f 64 79   within the body
8c10: 20 6f 66 20 61 20 66 75 6e 63 74 69 6f 6e 2e 20   of a function. 
8c20: 54 68 69 73 20 75 73 75 61 6c 6c 79 20 68 61 70  This usually hap
8c30: 70 65 6e 73 20 77 68 65 6e 0a 2a 2a 20 61 20 66  pens when.** a f
8c40: 75 6e 63 74 69 6f 6e 20 69 73 20 63 61 6c 6c 65  unction is calle
8c50: 64 20 76 69 61 20 61 20 66 75 6e 63 74 69 6f 6e  d via a function
8c60: 20 70 6f 69 6e 74 65 72 2e 20 46 6f 72 20 65 78   pointer. For ex
8c70: 61 6d 70 6c 65 20 74 68 65 0a 2a 2a 20 69 6d 70  ample the.** imp
8c80: 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 20 61  lementation of a
8c90: 6e 20 53 51 4c 20 61 67 67 72 65 67 61 74 65 20  n SQL aggregate 
8ca0: 73 74 65 70 20 63 61 6c 6c 62 61 63 6b 20 6d 61  step callback ma
8cb0: 79 20 6e 6f 74 20 75 73 65 20 74 68 65 0a 2a 2a  y not use the.**
8cc0: 20 70 61 72 61 6d 65 74 65 72 20 69 6e 64 69 63   parameter indic
8cd0: 61 74 69 6e 67 20 74 68 65 20 6e 75 6d 62 65 72  ating the number
8ce0: 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 70 61   of arguments pa
8cf0: 73 73 65 64 20 74 6f 20 74 68 65 20 61 67 67 72  ssed to the aggr
8d00: 65 67 61 74 65 2c 0a 2a 2a 20 69 66 20 69 74 20  egate,.** if it 
8d10: 6b 6e 6f 77 73 20 74 68 61 74 20 74 68 69 73 20  knows that this 
8d20: 69 73 20 65 6e 66 6f 72 63 65 64 20 65 6c 73 65  is enforced else
8d30: 77 68 65 72 65 2e 0a 2a 2a 0a 2a 2a 20 57 68 65  where..**.** Whe
8d40: 6e 20 61 20 66 75 6e 63 74 69 6f 6e 20 70 61 72  n a function par
8d50: 61 6d 65 74 65 72 20 69 73 20 6e 6f 74 20 75 73  ameter is not us
8d60: 65 64 20 61 74 20 61 6c 6c 20 77 69 74 68 69 6e  ed at all within
8d70: 20 74 68 65 20 62 6f 64 79 20 6f 66 20 61 20 66   the body of a f
8d80: 75 6e 63 74 69 6f 6e 2c 0a 2a 2a 20 69 74 20 69  unction,.** it i
8d90: 73 20 67 65 6e 65 72 61 6c 6c 79 20 6e 61 6d 65  s generally name
8da0: 64 20 22 4e 6f 74 55 73 65 64 22 20 6f 72 20 22  d "NotUsed" or "
8db0: 4e 6f 74 55 73 65 64 32 22 20 74 6f 20 6d 61 6b  NotUsed2" to mak
8dc0: 65 20 74 68 69 6e 67 73 20 65 76 65 6e 20 63 6c  e things even cl
8dd0: 65 61 72 65 72 2e 0a 2a 2a 20 48 6f 77 65 76 65  earer..** Howeve
8de0: 72 2c 20 74 68 65 73 65 20 6d 61 63 72 6f 73 20  r, these macros 
8df0: 6d 61 79 20 61 6c 73 6f 20 62 65 20 75 73 65 64  may also be used
8e00: 20 74 6f 20 73 75 70 70 72 65 73 73 20 77 61 72   to suppress war
8e10: 6e 69 6e 67 73 20 72 65 6c 61 74 65 64 20 74 6f  nings related to
8e20: 0a 2a 2a 20 70 61 72 61 6d 65 74 65 72 73 20 74  .** parameters t
8e30: 68 61 74 20 6d 61 79 20 6f 72 20 6d 61 79 20 6e  hat may or may n
8e40: 6f 74 20 62 65 20 75 73 65 64 20 64 65 70 65 6e  ot be used depen
8e50: 64 69 6e 67 20 6f 6e 20 63 6f 6d 70 69 6c 61 74  ding on compilat
8e60: 69 6f 6e 20 6f 70 74 69 6f 6e 73 2e 0a 2a 2a 20  ion options..** 
8e70: 46 6f 72 20 65 78 61 6d 70 6c 65 20 74 68 6f 73  For example thos
8e80: 65 20 70 61 72 61 6d 65 74 65 72 73 20 6f 6e 6c  e parameters onl
8e90: 79 20 75 73 65 64 20 69 6e 20 61 73 73 65 72 74  y used in assert
8ea0: 28 29 20 73 74 61 74 65 6d 65 6e 74 73 2e 20 49  () statements. I
8eb0: 6e 20 74 68 65 73 65 0a 2a 2a 20 63 61 73 65 73  n these.** cases
8ec0: 20 74 68 65 20 70 61 72 61 6d 65 74 65 72 73 20   the parameters 
8ed0: 61 72 65 20 6e 61 6d 65 64 20 61 73 20 70 65 72  are named as per
8ee0: 20 74 68 65 20 75 73 75 61 6c 20 63 6f 6e 76 65   the usual conve
8ef0: 6e 74 69 6f 6e 73 2e 0a 2a 2f 0a 23 64 65 66 69  ntions..*/.#defi
8f00: 6e 65 20 55 4e 55 53 45 44 5f 50 41 52 41 4d 45  ne UNUSED_PARAME
8f10: 54 45 52 28 78 29 20 28 76 6f 69 64 29 28 78 29  TER(x) (void)(x)
8f20: 0a 23 64 65 66 69 6e 65 20 55 4e 55 53 45 44 5f  .#define UNUSED_
8f30: 50 41 52 41 4d 45 54 45 52 32 28 78 2c 79 29 20  PARAMETER2(x,y) 
8f40: 55 4e 55 53 45 44 5f 50 41 52 41 4d 45 54 45 52  UNUSED_PARAMETER
8f50: 28 78 29 2c 55 4e 55 53 45 44 5f 50 41 52 41 4d  (x),UNUSED_PARAM
8f60: 45 54 45 52 28 79 29 0a 0a 2f 2a 0a 2a 2a 20 46  ETER(y)../*.** F
8f70: 6f 72 77 61 72 64 20 72 65 66 65 72 65 6e 63 65  orward reference
8f80: 73 20 74 6f 20 73 74 72 75 63 74 75 72 65 73 0a  s to structures.
8f90: 2a 2f 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  */.typedef struc
8fa0: 74 20 41 67 67 49 6e 66 6f 20 41 67 67 49 6e 66  t AggInfo AggInf
8fb0: 6f 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  o;.typedef struc
8fc0: 74 20 41 75 74 68 43 6f 6e 74 65 78 74 20 41 75  t AuthContext Au
8fd0: 74 68 43 6f 6e 74 65 78 74 3b 0a 74 79 70 65 64  thContext;.typed
8fe0: 65 66 20 73 74 72 75 63 74 20 41 75 74 6f 69 6e  ef struct Autoin
8ff0: 63 49 6e 66 6f 20 41 75 74 6f 69 6e 63 49 6e 66  cInfo AutoincInf
9000: 6f 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  o;.typedef struc
9010: 74 20 42 69 74 76 65 63 20 42 69 74 76 65 63 3b  t Bitvec Bitvec;
9020: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
9030: 43 6f 6c 6c 53 65 71 20 43 6f 6c 6c 53 65 71 3b  CollSeq CollSeq;
9040: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
9050: 43 6f 6c 75 6d 6e 20 43 6f 6c 75 6d 6e 3b 0a 74  Column Column;.t
9060: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 44 62  ypedef struct Db
9070: 20 44 62 3b 0a 74 79 70 65 64 65 66 20 73 74 72   Db;.typedef str
9080: 75 63 74 20 53 63 68 65 6d 61 20 53 63 68 65 6d  uct Schema Schem
9090: 61 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  a;.typedef struc
90a0: 74 20 45 78 70 72 20 45 78 70 72 3b 0a 74 79 70  t Expr Expr;.typ
90b0: 65 64 65 66 20 73 74 72 75 63 74 20 45 78 70 72  edef struct Expr
90c0: 4c 69 73 74 20 45 78 70 72 4c 69 73 74 3b 0a 74  List ExprList;.t
90d0: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 46 4b  ypedef struct FK
90e0: 65 79 20 46 4b 65 79 3b 0a 74 79 70 65 64 65 66  ey FKey;.typedef
90f0: 20 73 74 72 75 63 74 20 46 75 6e 63 44 65 73 74   struct FuncDest
9100: 72 75 63 74 6f 72 20 46 75 6e 63 44 65 73 74 72  ructor FuncDestr
9110: 75 63 74 6f 72 3b 0a 74 79 70 65 64 65 66 20 73  uctor;.typedef s
9120: 74 72 75 63 74 20 46 75 6e 63 44 65 66 20 46 75  truct FuncDef Fu
9130: 6e 63 44 65 66 3b 0a 74 79 70 65 64 65 66 20 73  ncDef;.typedef s
9140: 74 72 75 63 74 20 46 75 6e 63 44 65 66 48 61 73  truct FuncDefHas
9150: 68 20 46 75 6e 63 44 65 66 48 61 73 68 3b 0a 74  h FuncDefHash;.t
9160: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 49 64  ypedef struct Id
9170: 4c 69 73 74 20 49 64 4c 69 73 74 3b 0a 74 79 70  List IdList;.typ
9180: 65 64 65 66 20 73 74 72 75 63 74 20 49 6e 64 65  edef struct Inde
9190: 78 20 49 6e 64 65 78 3b 0a 74 79 70 65 64 65 66  x Index;.typedef
91a0: 20 73 74 72 75 63 74 20 49 6e 64 65 78 53 61 6d   struct IndexSam
91b0: 70 6c 65 20 49 6e 64 65 78 53 61 6d 70 6c 65 3b  ple IndexSample;
91c0: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
91d0: 4b 65 79 43 6c 61 73 73 20 4b 65 79 43 6c 61 73  KeyClass KeyClas
91e0: 73 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  s;.typedef struc
91f0: 74 20 4b 65 79 49 6e 66 6f 20 4b 65 79 49 6e 66  t KeyInfo KeyInf
9200: 6f 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  o;.typedef struc
9210: 74 20 4c 6f 6f 6b 61 73 69 64 65 20 4c 6f 6f 6b  t Lookaside Look
9220: 61 73 69 64 65 3b 0a 74 79 70 65 64 65 66 20 73  aside;.typedef s
9230: 74 72 75 63 74 20 4c 6f 6f 6b 61 73 69 64 65 53  truct LookasideS
9240: 6c 6f 74 20 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f  lot LookasideSlo
9250: 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  t;.typedef struc
9260: 74 20 4d 6f 64 75 6c 65 20 4d 6f 64 75 6c 65 3b  t Module Module;
9270: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
9280: 4e 61 6d 65 43 6f 6e 74 65 78 74 20 4e 61 6d 65  NameContext Name
9290: 43 6f 6e 74 65 78 74 3b 0a 74 79 70 65 64 65 66  Context;.typedef
92a0: 20 73 74 72 75 63 74 20 50 61 72 73 65 20 50 61   struct Parse Pa
92b0: 72 73 65 3b 0a 74 79 70 65 64 65 66 20 73 74 72  rse;.typedef str
92c0: 75 63 74 20 50 72 65 55 70 64 61 74 65 20 50 72  uct PreUpdate Pr
92d0: 65 55 70 64 61 74 65 3b 0a 74 79 70 65 64 65 66  eUpdate;.typedef
92e0: 20 73 74 72 75 63 74 20 50 72 69 6e 74 66 41 72   struct PrintfAr
92f0: 67 75 6d 65 6e 74 73 20 50 72 69 6e 74 66 41 72  guments PrintfAr
9300: 67 75 6d 65 6e 74 73 3b 0a 74 79 70 65 64 65 66  guments;.typedef
9310: 20 73 74 72 75 63 74 20 52 65 6e 61 6d 65 54 6f   struct RenameTo
9320: 6b 65 6e 20 52 65 6e 61 6d 65 54 6f 6b 65 6e 3b  ken RenameToken;
9330: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
9340: 52 6f 77 53 65 74 20 52 6f 77 53 65 74 3b 0a 74  RowSet RowSet;.t
9350: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 53 61  ypedef struct Sa
9360: 76 65 70 6f 69 6e 74 20 53 61 76 65 70 6f 69 6e  vepoint Savepoin
9370: 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  t;.typedef struc
9380: 74 20 53 65 6c 65 63 74 20 53 65 6c 65 63 74 3b  t Select Select;
9390: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
93a0: 53 51 4c 69 74 65 54 68 72 65 61 64 20 53 51 4c  SQLiteThread SQL
93b0: 69 74 65 54 68 72 65 61 64 3b 0a 74 79 70 65 64  iteThread;.typed
93c0: 65 66 20 73 74 72 75 63 74 20 53 65 6c 65 63 74  ef struct Select
93d0: 44 65 73 74 20 53 65 6c 65 63 74 44 65 73 74 3b  Dest SelectDest;
93e0: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
93f0: 53 72 63 4c 69 73 74 20 53 72 63 4c 69 73 74 3b  SrcList SrcList;
9400: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
9410: 73 71 6c 69 74 65 33 5f 73 74 72 20 53 74 72 41  sqlite3_str StrA
9420: 63 63 75 6d 3b 20 2f 2a 20 49 6e 74 65 72 6e 61  ccum; /* Interna
9430: 6c 20 61 6c 69 61 73 20 66 6f 72 20 73 71 6c 69  l alias for sqli
9440: 74 65 33 5f 73 74 72 20 2a 2f 0a 74 79 70 65 64  te3_str */.typed
9450: 65 66 20 73 74 72 75 63 74 20 54 61 62 6c 65 20  ef struct Table 
9460: 54 61 62 6c 65 3b 0a 74 79 70 65 64 65 66 20 73  Table;.typedef s
9470: 74 72 75 63 74 20 54 61 62 6c 65 4c 6f 63 6b 20  truct TableLock 
9480: 54 61 62 6c 65 4c 6f 63 6b 3b 0a 74 79 70 65 64  TableLock;.typed
9490: 65 66 20 73 74 72 75 63 74 20 54 6f 6b 65 6e 20  ef struct Token 
94a0: 54 6f 6b 65 6e 3b 0a 74 79 70 65 64 65 66 20 73  Token;.typedef s
94b0: 74 72 75 63 74 20 54 72 65 65 56 69 65 77 20 54  truct TreeView T
94c0: 72 65 65 56 69 65 77 3b 0a 74 79 70 65 64 65 66  reeView;.typedef
94d0: 20 73 74 72 75 63 74 20 54 72 69 67 67 65 72 20   struct Trigger 
94e0: 54 72 69 67 67 65 72 3b 0a 74 79 70 65 64 65 66  Trigger;.typedef
94f0: 20 73 74 72 75 63 74 20 54 72 69 67 67 65 72 50   struct TriggerP
9500: 72 67 20 54 72 69 67 67 65 72 50 72 67 3b 0a 74  rg TriggerPrg;.t
9510: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 54 72  ypedef struct Tr
9520: 69 67 67 65 72 53 74 65 70 20 54 72 69 67 67 65  iggerStep Trigge
9530: 72 53 74 65 70 3b 0a 74 79 70 65 64 65 66 20 73  rStep;.typedef s
9540: 74 72 75 63 74 20 55 6e 70 61 63 6b 65 64 52 65  truct UnpackedRe
9550: 63 6f 72 64 20 55 6e 70 61 63 6b 65 64 52 65 63  cord UnpackedRec
9560: 6f 72 64 3b 0a 74 79 70 65 64 65 66 20 73 74 72  ord;.typedef str
9570: 75 63 74 20 55 70 73 65 72 74 20 55 70 73 65 72  uct Upsert Upser
9580: 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  t;.typedef struc
9590: 74 20 56 54 61 62 6c 65 20 56 54 61 62 6c 65 3b  t VTable VTable;
95a0: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
95b0: 56 74 61 62 43 74 78 20 56 74 61 62 43 74 78 3b  VtabCtx VtabCtx;
95c0: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
95d0: 57 61 6c 6b 65 72 20 57 61 6c 6b 65 72 3b 0a 74  Walker Walker;.t
95e0: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 57 68  ypedef struct Wh
95f0: 65 72 65 49 6e 66 6f 20 57 68 65 72 65 49 6e 66  ereInfo WhereInf
9600: 6f 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  o;.typedef struc
9610: 74 20 57 69 6e 64 6f 77 20 57 69 6e 64 6f 77 3b  t Window Window;
9620: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
9630: 57 69 74 68 20 57 69 74 68 3b 0a 0a 0a 2f 2a 0a  With With;.../*.
9640: 2a 2a 20 54 68 65 20 62 69 74 6d 61 73 6b 20 64  ** The bitmask d
9650: 61 74 61 74 79 70 65 20 64 65 66 69 6e 65 64 20  atatype defined 
9660: 62 65 6c 6f 77 20 69 73 20 75 73 65 64 20 66 6f  below is used fo
9670: 72 20 76 61 72 69 6f 75 73 20 6f 70 74 69 6d 69  r various optimi
9680: 7a 61 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 43  zations..**.** C
9690: 68 61 6e 67 69 6e 67 20 74 68 69 73 20 66 72 6f  hanging this fro
96a0: 6d 20 61 20 36 34 2d 62 69 74 20 74 6f 20 61 20  m a 64-bit to a 
96b0: 33 32 2d 62 69 74 20 74 79 70 65 20 6c 69 6d 69  32-bit type limi
96c0: 74 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  ts the number of
96d0: 0a 2a 2a 20 74 61 62 6c 65 73 20 69 6e 20 61 20  .** tables in a 
96e0: 6a 6f 69 6e 20 74 6f 20 33 32 20 69 6e 73 74 65  join to 32 inste
96f0: 61 64 20 6f 66 20 36 34 2e 20 20 42 75 74 20 69  ad of 64.  But i
9700: 74 20 61 6c 73 6f 20 72 65 64 75 63 65 73 20 74  t also reduces t
9710: 68 65 20 73 69 7a 65 0a 2a 2a 20 6f 66 20 74 68  he size.** of th
9720: 65 20 6c 69 62 72 61 72 79 20 62 79 20 37 33 38  e library by 738
9730: 20 62 79 74 65 73 20 6f 6e 20 69 78 38 36 2e 0a   bytes on ix86..
9740: 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
9750: 5f 42 49 54 4d 41 53 4b 5f 54 59 50 45 0a 20 20  _BITMASK_TYPE.  
9760: 74 79 70 65 64 65 66 20 53 51 4c 49 54 45 5f 42  typedef SQLITE_B
9770: 49 54 4d 41 53 4b 5f 54 59 50 45 20 42 69 74 6d  ITMASK_TYPE Bitm
9780: 61 73 6b 3b 0a 23 65 6c 73 65 0a 20 20 74 79 70  ask;.#else.  typ
9790: 65 64 65 66 20 75 36 34 20 42 69 74 6d 61 73 6b  edef u64 Bitmask
97a0: 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  ;.#endif../*.** 
97b0: 54 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 62 69  The number of bi
97c0: 74 73 20 69 6e 20 61 20 42 69 74 6d 61 73 6b 2e  ts in a Bitmask.
97d0: 20 20 22 42 4d 53 22 20 6d 65 61 6e 73 20 22 42    "BMS" means "B
97e0: 69 74 4d 61 73 6b 20 53 69 7a 65 22 2e 0a 2a 2f  itMask Size"..*/
97f0: 0a 23 64 65 66 69 6e 65 20 42 4d 53 20 20 28 28  .#define BMS  ((
9800: 69 6e 74 29 28 73 69 7a 65 6f 66 28 42 69 74 6d  int)(sizeof(Bitm
9810: 61 73 6b 29 2a 38 29 29 0a 0a 2f 2a 0a 2a 2a 20  ask)*8))../*.** 
9820: 41 20 62 69 74 20 69 6e 20 61 20 42 69 74 6d 61  A bit in a Bitma
9830: 73 6b 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 41  sk.*/.#define MA
9840: 53 4b 42 49 54 28 6e 29 20 20 20 28 28 28 42 69  SKBIT(n)   (((Bi
9850: 74 6d 61 73 6b 29 31 29 3c 3c 28 6e 29 29 0a 23  tmask)1)<<(n)).#
9860: 64 65 66 69 6e 65 20 4d 41 53 4b 42 49 54 33 32  define MASKBIT32
9870: 28 6e 29 20 28 28 28 75 6e 73 69 67 6e 65 64 20  (n) (((unsigned 
9880: 69 6e 74 29 31 29 3c 3c 28 6e 29 29 0a 23 64 65  int)1)<<(n)).#de
9890: 66 69 6e 65 20 41 4c 4c 42 49 54 53 20 20 20 20  fine ALLBITS    
98a0: 20 20 28 28 42 69 74 6d 61 73 6b 29 2d 31 29 0a    ((Bitmask)-1).
98b0: 0a 2f 2a 20 41 20 56 4c 69 73 74 20 6f 62 6a 65  ./* A VList obje
98c0: 63 74 20 72 65 63 6f 72 64 73 20 61 20 6d 61 70  ct records a map
98d0: 70 69 6e 67 20 62 65 74 77 65 65 6e 20 70 61 72  ping between par
98e0: 61 6d 65 74 65 72 73 2f 76 61 72 69 61 62 6c 65  ameters/variable
98f0: 73 2f 77 69 6c 64 63 61 72 64 73 0a 2a 2a 20 69  s/wildcards.** i
9900: 6e 20 74 68 65 20 53 51 4c 20 73 74 61 74 65 6d  n the SQL statem
9910: 65 6e 74 20 28 73 75 63 68 20 61 73 20 24 61 62  ent (such as $ab
9920: 63 2c 20 40 70 71 72 2c 20 6f 72 20 3a 78 79 7a  c, @pqr, or :xyz
9930: 29 20 61 6e 64 20 74 68 65 20 69 6e 74 65 67 65  ) and the intege
9940: 72 0a 2a 2a 20 76 61 72 69 61 62 6c 65 20 6e 75  r.** variable nu
9950: 6d 62 65 72 20 61 73 73 6f 63 69 61 74 65 64 20  mber associated 
9960: 77 69 74 68 20 74 68 61 74 20 70 61 72 61 6d 65  with that parame
9970: 74 65 72 2e 20 20 53 65 65 20 74 68 65 20 66 6f  ter.  See the fo
9980: 72 6d 61 74 20 64 65 73 63 72 69 70 74 69 6f 6e  rmat description
9990: 0a 2a 2a 20 6f 6e 20 74 68 65 20 73 71 6c 69 74  .** on the sqlit
99a0: 65 33 56 4c 69 73 74 41 64 64 28 29 20 72 6f 75  e3VListAdd() rou
99b0: 74 69 6e 65 20 66 6f 72 20 6d 6f 72 65 20 69 6e  tine for more in
99c0: 66 6f 72 6d 61 74 69 6f 6e 2e 20 20 41 20 56 4c  formation.  A VL
99d0: 69 73 74 20 69 73 20 72 65 61 6c 6c 79 0a 2a 2a  ist is really.**
99e0: 20 6a 75 73 74 20 61 6e 20 61 72 72 61 79 20 6f   just an array o
99f0: 66 20 69 6e 74 65 67 65 72 73 2e 0a 2a 2f 0a 74  f integers..*/.t
9a00: 79 70 65 64 65 66 20 69 6e 74 20 56 4c 69 73 74  ypedef int VList
9a10: 3b 0a 0a 2f 2a 0a 2a 2a 20 44 65 66 65 72 20 73  ;../*.** Defer s
9a20: 6f 75 72 63 69 6e 67 20 76 64 62 65 2e 68 20 61  ourcing vdbe.h a
9a30: 6e 64 20 62 74 72 65 65 2e 68 20 75 6e 74 69 6c  nd btree.h until
9a40: 20 61 66 74 65 72 20 74 68 65 20 22 75 38 22 20   after the "u8" 
9a50: 61 6e 64 0a 2a 2a 20 22 42 75 73 79 48 61 6e 64  and.** "BusyHand
9a60: 6c 65 72 22 20 74 79 70 65 64 65 66 73 2e 20 76  ler" typedefs. v
9a70: 64 62 65 2e 68 20 61 6c 73 6f 20 72 65 71 75 69  dbe.h also requi
9a80: 72 65 73 20 61 20 66 65 77 20 6f 66 20 74 68 65  res a few of the
9a90: 20 6f 70 61 71 75 65 0a 2a 2a 20 70 6f 69 6e 74   opaque.** point
9aa0: 65 72 20 74 79 70 65 73 20 28 69 2e 65 2e 20 46  er types (i.e. F
9ab0: 75 6e 63 44 65 66 29 20 64 65 66 69 6e 65 64 20  uncDef) defined 
9ac0: 61 62 6f 76 65 2e 0a 2a 2f 0a 23 69 6e 63 6c 75  above..*/.#inclu
9ad0: 64 65 20 22 62 74 72 65 65 2e 68 22 0a 23 69 6e  de "btree.h".#in
9ae0: 63 6c 75 64 65 20 22 76 64 62 65 2e 68 22 0a 23  clude "vdbe.h".#
9af0: 69 6e 63 6c 75 64 65 20 22 70 61 67 65 72 2e 68  include "pager.h
9b00: 22 0a 23 69 6e 63 6c 75 64 65 20 22 70 63 61 63  ".#include "pcac
9b10: 68 65 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20 22  he.h".#include "
9b20: 6f 73 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20 22  os.h".#include "
9b30: 6d 75 74 65 78 2e 68 22 0a 0a 2f 2a 20 54 68 65  mutex.h"../* The
9b40: 20 53 51 4c 49 54 45 5f 45 58 54 52 41 5f 44 55   SQLITE_EXTRA_DU
9b50: 52 41 42 4c 45 20 63 6f 6d 70 69 6c 65 2d 74 69  RABLE compile-ti
9b60: 6d 65 20 6f 70 74 69 6f 6e 20 75 73 65 64 20 74  me option used t
9b70: 6f 20 73 65 74 20 74 68 65 20 64 65 66 61 75 6c  o set the defaul
9b80: 74 0a 2a 2a 20 73 79 6e 63 68 72 6f 6e 6f 75 73  t.** synchronous
9b90: 20 73 65 74 74 69 6e 67 20 74 6f 20 45 58 54 52   setting to EXTR
9ba0: 41 2e 20 20 49 74 20 69 73 20 6e 6f 20 6c 6f 6e  A.  It is no lon
9bb0: 67 65 72 20 73 75 70 70 6f 72 74 65 64 2e 0a 2a  ger supported..*
9bc0: 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
9bd0: 45 58 54 52 41 5f 44 55 52 41 42 4c 45 0a 23 20  EXTRA_DURABLE.# 
9be0: 77 61 72 6e 69 6e 67 20 55 73 65 20 53 51 4c 49  warning Use SQLI
9bf0: 54 45 5f 44 45 46 41 55 4c 54 5f 53 59 4e 43 48  TE_DEFAULT_SYNCH
9c00: 52 4f 4e 4f 55 53 3d 33 20 69 6e 73 74 65 61 64  RONOUS=3 instead
9c10: 20 6f 66 20 53 51 4c 49 54 45 5f 45 58 54 52 41   of SQLITE_EXTRA
9c20: 5f 44 55 52 41 42 4c 45 0a 23 20 64 65 66 69 6e  _DURABLE.# defin
9c30: 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54  e SQLITE_DEFAULT
9c40: 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 20 33 0a 23  _SYNCHRONOUS 3.#
9c50: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 44 65 66  endif../*.** Def
9c60: 61 75 6c 74 20 73 79 6e 63 68 72 6f 6e 6f 75 73  ault synchronous
9c70: 20 6c 65 76 65 6c 73 2e 0a 2a 2a 0a 2a 2a 20 4e   levels..**.** N
9c80: 6f 74 65 20 74 68 61 74 20 28 66 6f 72 20 68 69  ote that (for hi
9c90: 73 74 6f 72 63 61 6c 20 72 65 61 73 6f 6e 73 29  storcal reasons)
9ca0: 20 74 68 65 20 50 41 47 45 52 5f 53 59 4e 43 48   the PAGER_SYNCH
9cb0: 52 4f 4e 4f 55 53 5f 2a 20 6d 61 63 72 6f 73 20  RONOUS_* macros 
9cc0: 64 69 66 66 65 72 0a 2a 2a 20 66 72 6f 6d 20 74  differ.** from t
9cd0: 68 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c  he SQLITE_DEFAUL
9ce0: 54 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 20 76 61  T_SYNCHRONOUS va
9cf0: 6c 75 65 20 62 79 20 31 2e 0a 2a 2a 0a 2a 2a 20  lue by 1..**.** 
9d00: 20 20 20 20 20 20 20 20 20 20 50 41 47 45 52 5f            PAGER_
9d10: 53 59 4e 43 48 52 4f 4e 4f 55 53 20 20 20 20 20  SYNCHRONOUS     
9d20: 20 20 44 45 46 41 55 4c 54 5f 53 59 4e 43 48 52    DEFAULT_SYNCHR
9d30: 4f 4e 4f 55 53 0a 2a 2a 20 20 20 4f 46 46 20 20  ONOUS.**   OFF  
9d40: 20 20 20 20 20 20 20 20 20 31 20 20 20 20 20 20           1      
9d50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9d60: 20 20 20 30 0a 2a 2a 20 20 20 4e 4f 52 4d 41 4c     0.**   NORMAL
9d70: 20 20 20 20 20 20 20 20 32 20 20 20 20 20 20 20          2       
9d80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9d90: 20 20 31 0a 2a 2a 20 20 20 46 55 4c 4c 20 20 20    1.**   FULL   
9da0: 20 20 20 20 20 20 20 33 20 20 20 20 20 20 20 20         3        
9db0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9dc0: 20 32 0a 2a 2a 20 20 20 45 58 54 52 41 20 20 20   2.**   EXTRA   
9dd0: 20 20 20 20 20 20 34 20 20 20 20 20 20 20 20 20        4         
9de0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9df0: 33 0a 2a 2a 0a 2a 2a 20 54 68 65 20 22 50 52 41  3.**.** The "PRA
9e00: 47 4d 41 20 73 79 6e 63 68 72 6f 6e 6f 75 73 22  GMA synchronous"
9e10: 20 73 74 61 74 65 6d 65 6e 74 20 61 6c 73 6f 20   statement also 
9e20: 75 73 65 73 20 74 68 65 20 7a 65 72 6f 2d 62 61  uses the zero-ba
9e30: 73 65 64 20 6e 75 6d 62 65 72 73 2e 0a 2a 2a 20  sed numbers..** 
9e40: 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20  In other words, 
9e50: 74 68 65 20 7a 65 72 6f 2d 62 61 73 65 64 20 6e  the zero-based n
9e60: 75 6d 62 65 72 73 20 61 72 65 20 75 73 65 64 20  umbers are used 
9e70: 66 6f 72 20 61 6c 6c 20 65 78 74 65 72 6e 61 6c  for all external
9e80: 20 69 6e 74 65 72 66 61 63 65 73 0a 2a 2a 20 61   interfaces.** a
9e90: 6e 64 20 74 68 65 20 6f 6e 65 2d 62 61 73 65 64  nd the one-based
9ea0: 20 76 61 6c 75 65 73 20 61 72 65 20 75 73 65 64   values are used
9eb0: 20 69 6e 74 65 72 6e 61 6c 6c 79 2e 0a 2a 2f 0a   internally..*/.
9ec0: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 44  #ifndef SQLITE_D
9ed0: 45 46 41 55 4c 54 5f 53 59 4e 43 48 52 4f 4e 4f  EFAULT_SYNCHRONO
9ee0: 55 53 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  US.# define SQLI
9ef0: 54 45 5f 44 45 46 41 55 4c 54 5f 53 59 4e 43 48  TE_DEFAULT_SYNCH
9f00: 52 4f 4e 4f 55 53 20 32 0a 23 65 6e 64 69 66 0a  RONOUS 2.#endif.
9f10: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 44  #ifndef SQLITE_D
9f20: 45 46 41 55 4c 54 5f 57 41 4c 5f 53 59 4e 43 48  EFAULT_WAL_SYNCH
9f30: 52 4f 4e 4f 55 53 0a 23 20 64 65 66 69 6e 65 20  RONOUS.# define 
9f40: 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 57  SQLITE_DEFAULT_W
9f50: 41 4c 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 20 53  AL_SYNCHRONOUS S
9f60: 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 53 59  QLITE_DEFAULT_SY
9f70: 4e 43 48 52 4f 4e 4f 55 53 0a 23 65 6e 64 69 66  NCHRONOUS.#endif
9f80: 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 64 61 74  ../*.** Each dat
9f90: 61 62 61 73 65 20 66 69 6c 65 20 74 6f 20 62 65  abase file to be
9fa0: 20 61 63 63 65 73 73 65 64 20 62 79 20 74 68 65   accessed by the
9fb0: 20 73 79 73 74 65 6d 20 69 73 20 61 6e 20 69 6e   system is an in
9fc0: 73 74 61 6e 63 65 0a 2a 2a 20 6f 66 20 74 68 65  stance.** of the
9fd0: 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63   following struc
9fe0: 74 75 72 65 2e 20 20 54 68 65 72 65 20 61 72 65  ture.  There are
9ff0: 20 6e 6f 72 6d 61 6c 6c 79 20 74 77 6f 20 6f 66   normally two of
a000: 20 74 68 65 73 65 20 73 74 72 75 63 74 75 72 65   these structure
a010: 73 0a 2a 2a 20 69 6e 20 74 68 65 20 73 71 6c 69  s.** in the sqli
a020: 74 65 2e 61 44 62 5b 5d 20 61 72 72 61 79 2e 20  te.aDb[] array. 
a030: 20 61 44 62 5b 30 5d 20 69 73 20 74 68 65 20 6d   aDb[0] is the m
a040: 61 69 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c  ain database fil
a050: 65 20 61 6e 64 0a 2a 2a 20 61 44 62 5b 31 5d 20  e and.** aDb[1] 
a060: 69 73 20 74 68 65 20 64 61 74 61 62 61 73 65 20  is the database 
a070: 66 69 6c 65 20 75 73 65 64 20 74 6f 20 68 6f 6c  file used to hol
a080: 64 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c  d temporary tabl
a090: 65 73 2e 20 20 41 64 64 69 74 69 6f 6e 61 6c 0a  es.  Additional.
a0a0: 2a 2a 20 64 61 74 61 62 61 73 65 73 20 6d 61 79  ** databases may
a0b0: 20 62 65 20 61 74 74 61 63 68 65 64 2e 0a 2a 2f   be attached..*/
a0c0: 0a 73 74 72 75 63 74 20 44 62 20 7b 0a 20 20 63  .struct Db {.  c
a0d0: 68 61 72 20 2a 7a 44 62 53 4e 61 6d 65 3b 20 20  har *zDbSName;  
a0e0: 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74      /* Name of t
a0f0: 68 69 73 20 64 61 74 61 62 61 73 65 2e 20 28 73  his database. (s
a100: 63 68 65 6d 61 20 6e 61 6d 65 2c 20 6e 6f 74 20  chema name, not 
a110: 66 69 6c 65 6e 61 6d 65 29 20 2a 2f 0a 20 20 42  filename) */.  B
a120: 74 72 65 65 20 2a 70 42 74 3b 20 20 20 20 20 20  tree *pBt;      
a130: 20 20 20 20 2f 2a 20 54 68 65 20 42 2a 54 72 65      /* The B*Tre
a140: 65 20 73 74 72 75 63 74 75 72 65 20 66 6f 72 20  e structure for 
a150: 74 68 69 73 20 64 61 74 61 62 61 73 65 20 66 69  this database fi
a160: 6c 65 20 2a 2f 0a 20 20 75 38 20 73 61 66 65 74  le */.  u8 safet
a170: 79 5f 6c 65 76 65 6c 3b 20 20 20 20 20 2f 2a 20  y_level;     /* 
a180: 48 6f 77 20 61 67 67 72 65 73 73 69 76 65 20 61  How aggressive a
a190: 74 20 73 79 6e 63 69 6e 67 20 64 61 74 61 20 74  t syncing data t
a1a0: 6f 20 64 69 73 6b 20 2a 2f 0a 20 20 75 38 20 62  o disk */.  u8 b
a1b0: 53 79 6e 63 53 65 74 3b 20 20 20 20 20 20 20 20  SyncSet;        
a1c0: 20 2f 2a 20 54 72 75 65 20 69 66 20 22 50 52 41   /* True if "PRA
a1d0: 47 4d 41 20 73 79 6e 63 68 72 6f 6e 6f 75 73 3d  GMA synchronous=
a1e0: 4e 22 20 68 61 73 20 62 65 65 6e 20 72 75 6e 20  N" has been run 
a1f0: 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70 53 63  */.  Schema *pSc
a200: 68 65 6d 61 3b 20 20 20 20 20 2f 2a 20 50 6f 69  hema;     /* Poi
a210: 6e 74 65 72 20 74 6f 20 64 61 74 61 62 61 73 65  nter to database
a220: 20 73 63 68 65 6d 61 20 28 70 6f 73 73 69 62 6c   schema (possibl
a230: 79 20 73 68 61 72 65 64 29 20 2a 2f 0a 7d 3b 0a  y shared) */.};.
a240: 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e  ./*.** An instan
a250: 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77  ce of the follow
a260: 69 6e 67 20 73 74 72 75 63 74 75 72 65 20 73 74  ing structure st
a270: 6f 72 65 73 20 61 20 64 61 74 61 62 61 73 65 20  ores a database 
a280: 73 63 68 65 6d 61 2e 0a 2a 2a 0a 2a 2a 20 4d 6f  schema..**.** Mo
a290: 73 74 20 53 63 68 65 6d 61 20 6f 62 6a 65 63 74  st Schema object
a2a0: 73 20 61 72 65 20 61 73 73 6f 63 69 61 74 65 64  s are associated
a2b0: 20 77 69 74 68 20 61 20 42 74 72 65 65 2e 20 20   with a Btree.  
a2c0: 54 68 65 20 65 78 63 65 70 74 69 6f 6e 20 69 73  The exception is
a2d0: 0a 2a 2a 20 74 68 65 20 53 63 68 65 6d 61 20 66  .** the Schema f
a2e0: 6f 72 20 74 68 65 20 54 45 4d 50 20 64 61 74 61  or the TEMP data
a2f0: 62 61 65 73 20 28 73 71 6c 69 74 65 33 2e 61 44  baes (sqlite3.aD
a300: 62 5b 31 5d 29 20 77 68 69 63 68 20 69 73 20 66  b[1]) which is f
a310: 72 65 65 2d 73 74 61 6e 64 69 6e 67 2e 0a 2a 2a  ree-standing..**
a320: 20 49 6e 20 73 68 61 72 65 64 20 63 61 63 68 65   In shared cache
a330: 20 6d 6f 64 65 2c 20 61 20 73 69 6e 67 6c 65 20   mode, a single 
a340: 53 63 68 65 6d 61 20 6f 62 6a 65 63 74 20 63 61  Schema object ca
a350: 6e 20 62 65 20 73 68 61 72 65 64 20 62 79 20 6d  n be shared by m
a360: 75 6c 74 69 70 6c 65 0a 2a 2a 20 42 74 72 65 65  ultiple.** Btree
a370: 73 20 74 68 61 74 20 72 65 66 65 72 20 74 6f 20  s that refer to 
a380: 74 68 65 20 73 61 6d 65 20 75 6e 64 65 72 6c 79  the same underly
a390: 69 6e 67 20 42 74 53 68 61 72 65 64 20 6f 62 6a  ing BtShared obj
a3a0: 65 63 74 2e 0a 2a 2a 0a 2a 2a 20 53 63 68 65 6d  ect..**.** Schem
a3b0: 61 20 6f 62 6a 65 63 74 73 20 61 72 65 20 61 75  a objects are au
a3c0: 74 6f 6d 61 74 69 63 61 6c 6c 79 20 64 65 61 6c  tomatically deal
a3d0: 6c 6f 63 61 74 65 64 20 77 68 65 6e 20 74 68 65  located when the
a3e0: 20 6c 61 73 74 20 42 74 72 65 65 20 74 68 61 74   last Btree that
a3f0: 0a 2a 2a 20 72 65 66 65 72 65 6e 63 65 73 20 74  .** references t
a400: 68 65 6d 20 69 73 20 64 65 73 74 72 6f 79 65 64  hem is destroyed
a410: 2e 20 20 20 54 68 65 20 54 45 4d 50 20 53 63 68  .   The TEMP Sch
a420: 65 6d 61 20 69 73 20 6d 61 6e 75 61 6c 6c 79 20  ema is manually 
a430: 66 72 65 65 64 20 62 79 0a 2a 2a 20 73 71 6c 69  freed by.** sqli
a440: 74 65 33 5f 63 6c 6f 73 65 28 29 2e 0a 2a 0a 2a  te3_close()..*.*
a450: 2a 20 41 20 74 68 72 65 61 64 20 6d 75 73 74 20  * A thread must 
a460: 62 65 20 68 6f 6c 64 69 6e 67 20 61 20 6d 75 74  be holding a mut
a470: 65 78 20 6f 6e 20 74 68 65 20 63 6f 72 72 65 73  ex on the corres
a480: 70 6f 6e 64 69 6e 67 20 42 74 72 65 65 20 69 6e  ponding Btree in
a490: 20 6f 72 64 65 72 0a 2a 2a 20 74 6f 20 61 63 63   order.** to acc
a4a0: 65 73 73 20 53 63 68 65 6d 61 20 63 6f 6e 74 65  ess Schema conte
a4b0: 6e 74 2e 20 20 54 68 69 73 20 69 6d 70 6c 69 65  nt.  This implie
a4c0: 73 20 74 68 61 74 20 74 68 65 20 74 68 72 65 61  s that the threa
a4d0: 64 20 6d 75 73 74 20 61 6c 73 6f 20 62 65 0a 2a  d must also be.*
a4e0: 2a 20 68 6f 6c 64 69 6e 67 20 61 20 6d 75 74 65  * holding a mute
a4f0: 78 20 6f 6e 20 74 68 65 20 73 71 6c 69 74 65 33  x on the sqlite3
a500: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 70 6f 69 6e   connection poin
a510: 74 65 72 20 74 68 61 74 20 6f 77 6e 73 20 74 68  ter that owns th
a520: 65 20 42 74 72 65 65 2e 0a 2a 2a 20 46 6f 72 20  e Btree..** For 
a530: 61 20 54 45 4d 50 20 53 63 68 65 6d 61 2c 20 6f  a TEMP Schema, o
a540: 6e 6c 79 20 74 68 65 20 63 6f 6e 6e 65 63 74 69  nly the connecti
a550: 6f 6e 20 6d 75 74 65 78 20 69 73 20 72 65 71 75  on mutex is requ
a560: 69 72 65 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  ired..*/.struct 
a570: 53 63 68 65 6d 61 20 7b 0a 20 20 69 6e 74 20 73  Schema {.  int s
a580: 63 68 65 6d 61 5f 63 6f 6f 6b 69 65 3b 20 20 20  chema_cookie;   
a590: 2f 2a 20 44 61 74 61 62 61 73 65 20 73 63 68 65  /* Database sche
a5a0: 6d 61 20 76 65 72 73 69 6f 6e 20 6e 75 6d 62 65  ma version numbe
a5b0: 72 20 66 6f 72 20 74 68 69 73 20 66 69 6c 65 20  r for this file 
a5c0: 2a 2f 0a 20 20 69 6e 74 20 69 47 65 6e 65 72 61  */.  int iGenera
a5d0: 74 69 6f 6e 3b 20 20 20 20 20 2f 2a 20 47 65 6e  tion;     /* Gen
a5e0: 65 72 61 74 69 6f 6e 20 63 6f 75 6e 74 65 72 2e  eration counter.
a5f0: 20 20 49 6e 63 72 65 6d 65 6e 74 65 64 20 77 69    Incremented wi
a600: 74 68 20 65 61 63 68 20 63 68 61 6e 67 65 20 2a  th each change *
a610: 2f 0a 20 20 48 61 73 68 20 74 62 6c 48 61 73 68  /.  Hash tblHash
a620: 3b 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20  ;        /* All 
a630: 74 61 62 6c 65 73 20 69 6e 64 65 78 65 64 20 62  tables indexed b
a640: 79 20 6e 61 6d 65 20 2a 2f 0a 20 20 48 61 73 68  y name */.  Hash
a650: 20 69 64 78 48 61 73 68 3b 20 20 20 20 20 20 20   idxHash;       
a660: 20 2f 2a 20 41 6c 6c 20 28 6e 61 6d 65 64 29 20   /* All (named) 
a670: 69 6e 64 69 63 65 73 20 69 6e 64 65 78 65 64 20  indices indexed 
a680: 62 79 20 6e 61 6d 65 20 2a 2f 0a 20 20 48 61 73  by name */.  Has
a690: 68 20 74 72 69 67 48 61 73 68 3b 20 20 20 20 20  h trigHash;     
a6a0: 20 20 2f 2a 20 41 6c 6c 20 74 72 69 67 67 65 72    /* All trigger
a6b0: 73 20 69 6e 64 65 78 65 64 20 62 79 20 6e 61 6d  s indexed by nam
a6c0: 65 20 2a 2f 0a 20 20 48 61 73 68 20 66 6b 65 79  e */.  Hash fkey
a6d0: 48 61 73 68 3b 20 20 20 20 20 20 20 2f 2a 20 41  Hash;       /* A
a6e0: 6c 6c 20 66 6f 72 65 69 67 6e 20 6b 65 79 73 20  ll foreign keys 
a6f0: 62 79 20 72 65 66 65 72 65 6e 63 65 64 20 74 61  by referenced ta
a700: 62 6c 65 20 6e 61 6d 65 20 2a 2f 0a 20 20 54 61  ble name */.  Ta
a710: 62 6c 65 20 2a 70 53 65 71 54 61 62 3b 20 20 20  ble *pSeqTab;   
a720: 20 20 20 2f 2a 20 54 68 65 20 73 71 6c 69 74 65     /* The sqlite
a730: 5f 73 65 71 75 65 6e 63 65 20 74 61 62 6c 65 20  _sequence table 
a740: 75 73 65 64 20 62 79 20 41 55 54 4f 49 4e 43 52  used by AUTOINCR
a750: 45 4d 45 4e 54 20 2a 2f 0a 20 20 75 38 20 66 69  EMENT */.  u8 fi
a760: 6c 65 5f 66 6f 72 6d 61 74 3b 20 20 20 20 20 20  le_format;      
a770: 2f 2a 20 53 63 68 65 6d 61 20 66 6f 72 6d 61 74  /* Schema format
a780: 20 76 65 72 73 69 6f 6e 20 66 6f 72 20 74 68 69   version for thi
a790: 73 20 66 69 6c 65 20 2a 2f 0a 20 20 75 38 20 65  s file */.  u8 e
a7a0: 6e 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  nc;             
a7b0: 20 2f 2a 20 54 65 78 74 20 65 6e 63 6f 64 69 6e   /* Text encodin
a7c0: 67 20 75 73 65 64 20 62 79 20 74 68 69 73 20 64  g used by this d
a7d0: 61 74 61 62 61 73 65 20 2a 2f 0a 20 20 75 31 36  atabase */.  u16
a7e0: 20 73 63 68 65 6d 61 46 6c 61 67 73 3b 20 20 20   schemaFlags;   
a7f0: 20 20 2f 2a 20 46 6c 61 67 73 20 61 73 73 6f 63    /* Flags assoc
a800: 69 61 74 65 64 20 77 69 74 68 20 74 68 69 73 20  iated with this 
a810: 73 63 68 65 6d 61 20 2a 2f 0a 20 20 69 6e 74 20  schema */.  int 
a820: 63 61 63 68 65 5f 73 69 7a 65 3b 20 20 20 20 20  cache_size;     
a830: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 70 61   /* Number of pa
a840: 67 65 73 20 74 6f 20 75 73 65 20 69 6e 20 74 68  ges to use in th
a850: 65 20 63 61 63 68 65 20 2a 2f 0a 7d 3b 0a 0a 2f  e cache */.};../
a860: 2a 0a 2a 2a 20 54 68 65 73 65 20 6d 61 63 72 6f  *.** These macro
a870: 73 20 63 61 6e 20 62 65 20 75 73 65 64 20 74 6f  s can be used to
a880: 20 74 65 73 74 2c 20 73 65 74 2c 20 6f 72 20 63   test, set, or c
a890: 6c 65 61 72 20 62 69 74 73 20 69 6e 20 74 68 65  lear bits in the
a8a0: 0a 2a 2a 20 44 62 2e 70 53 63 68 65 6d 61 2d 3e  .** Db.pSchema->
a8b0: 66 6c 61 67 73 20 66 69 65 6c 64 2e 0a 2a 2f 0a  flags field..*/.
a8c0: 23 64 65 66 69 6e 65 20 44 62 48 61 73 50 72 6f  #define DbHasPro
a8d0: 70 65 72 74 79 28 44 2c 49 2c 50 29 20 20 20 20  perty(D,I,P)    
a8e0: 20 28 28 28 44 29 2d 3e 61 44 62 5b 49 5d 2e 70   (((D)->aDb[I].p
a8f0: 53 63 68 65 6d 61 2d 3e 73 63 68 65 6d 61 46 6c  Schema->schemaFl
a900: 61 67 73 26 28 50 29 29 3d 3d 28 50 29 29 0a 23  ags&(P))==(P)).#
a910: 64 65 66 69 6e 65 20 44 62 48 61 73 41 6e 79 50  define DbHasAnyP
a920: 72 6f 70 65 72 74 79 28 44 2c 49 2c 50 29 20 20  roperty(D,I,P)  
a930: 28 28 28 44 29 2d 3e 61 44 62 5b 49 5d 2e 70 53  (((D)->aDb[I].pS
a940: 63 68 65 6d 61 2d 3e 73 63 68 65 6d 61 46 6c 61  chema->schemaFla
a950: 67 73 26 28 50 29 29 21 3d 30 29 0a 23 64 65 66  gs&(P))!=0).#def
a960: 69 6e 65 20 44 62 53 65 74 50 72 6f 70 65 72 74  ine DbSetPropert
a970: 79 28 44 2c 49 2c 50 29 20 20 20 20 20 28 44 29  y(D,I,P)     (D)
a980: 2d 3e 61 44 62 5b 49 5d 2e 70 53 63 68 65 6d 61  ->aDb[I].pSchema
a990: 2d 3e 73 63 68 65 6d 61 46 6c 61 67 73 7c 3d 28  ->schemaFlags|=(
a9a0: 50 29 0a 23 64 65 66 69 6e 65 20 44 62 43 6c 65  P).#define DbCle
a9b0: 61 72 50 72 6f 70 65 72 74 79 28 44 2c 49 2c 50  arProperty(D,I,P
a9c0: 29 20 20 20 28 44 29 2d 3e 61 44 62 5b 49 5d 2e  )   (D)->aDb[I].
a9d0: 70 53 63 68 65 6d 61 2d 3e 73 63 68 65 6d 61 46  pSchema->schemaF
a9e0: 6c 61 67 73 26 3d 7e 28 50 29 0a 0a 2f 2a 0a 2a  lags&=~(P)../*.*
a9f0: 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73  * Allowed values
aa00: 20 66 6f 72 20 74 68 65 20 44 42 2e 70 53 63 68   for the DB.pSch
aa10: 65 6d 61 2d 3e 66 6c 61 67 73 20 66 69 65 6c 64  ema->flags field
aa20: 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 44 42 5f 53  ..**.** The DB_S
aa30: 63 68 65 6d 61 4c 6f 61 64 65 64 20 66 6c 61 67  chemaLoaded flag
aa40: 20 69 73 20 73 65 74 20 61 66 74 65 72 20 74 68   is set after th
aa50: 65 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d  e database schem
aa60: 61 20 68 61 73 20 62 65 65 6e 0a 2a 2a 20 72 65  a has been.** re
aa70: 61 64 20 69 6e 74 6f 20 69 6e 74 65 72 6e 61 6c  ad into internal
aa80: 20 68 61 73 68 20 74 61 62 6c 65 73 2e 0a 2a 2a   hash tables..**
aa90: 0a 2a 2a 20 44 42 5f 55 6e 72 65 73 65 74 56 69  .** DB_UnresetVi
aaa0: 65 77 73 20 6d 65 61 6e 73 20 74 68 61 74 20 6f  ews means that o
aab0: 6e 65 20 6f 72 20 6d 6f 72 65 20 76 69 65 77 73  ne or more views
aac0: 20 68 61 76 65 20 63 6f 6c 75 6d 6e 20 6e 61 6d   have column nam
aad0: 65 73 20 74 68 61 74 0a 2a 2a 20 68 61 76 65 20  es that.** have 
aae0: 62 65 65 6e 20 66 69 6c 6c 65 64 20 6f 75 74 2e  been filled out.
aaf0: 20 20 49 66 20 74 68 65 20 73 63 68 65 6d 61 20    If the schema 
ab00: 63 68 61 6e 67 65 73 2c 20 74 68 65 73 65 20 63  changes, these c
ab10: 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 6d 69 67 68  olumn names migh
ab20: 74 0a 2a 2a 20 63 68 61 6e 67 65 73 20 61 6e 64  t.** changes and
ab30: 20 73 6f 20 74 68 65 20 76 69 65 77 20 77 69 6c   so the view wil
ab40: 6c 20 6e 65 65 64 20 74 6f 20 62 65 20 72 65 73  l need to be res
ab50: 65 74 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 44  et..*/.#define D
ab60: 42 5f 53 63 68 65 6d 61 4c 6f 61 64 65 64 20 20  B_SchemaLoaded  
ab70: 20 20 30 78 30 30 30 31 20 20 2f 2a 20 54 68 65    0x0001  /* The
ab80: 20 73 63 68 65 6d 61 20 68 61 73 20 62 65 65 6e   schema has been
ab90: 20 6c 6f 61 64 65 64 20 2a 2f 0a 23 64 65 66 69   loaded */.#defi
aba0: 6e 65 20 44 42 5f 55 6e 72 65 73 65 74 56 69 65  ne DB_UnresetVie
abb0: 77 73 20 20 20 20 30 78 30 30 30 32 20 20 2f 2a  ws    0x0002  /*
abc0: 20 53 6f 6d 65 20 76 69 65 77 73 20 68 61 76 65   Some views have
abd0: 20 64 65 66 69 6e 65 64 20 63 6f 6c 75 6d 6e 20   defined column 
abe0: 6e 61 6d 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65  names */.#define
abf0: 20 44 42 5f 45 6d 70 74 79 20 20 20 20 20 20 20   DB_Empty       
ac00: 20 20 20 20 30 78 30 30 30 34 20 20 2f 2a 20 54      0x0004  /* T
ac10: 68 65 20 66 69 6c 65 20 69 73 20 65 6d 70 74 79  he file is empty
ac20: 20 28 6c 65 6e 67 74 68 20 30 20 62 79 74 65 73   (length 0 bytes
ac30: 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 44 42 5f  ) */.#define DB_
ac40: 52 65 73 65 74 57 61 6e 74 65 64 20 20 20 20 20  ResetWanted     
ac50: 30 78 30 30 30 38 20 20 2f 2a 20 52 65 73 65 74  0x0008  /* Reset
ac60: 20 74 68 65 20 73 63 68 65 6d 61 20 77 68 65 6e   the schema when
ac70: 20 6e 53 63 68 65 6d 61 4c 6f 63 6b 3d 3d 30 20   nSchemaLock==0 
ac80: 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6e 75  */../*.** The nu
ac90: 6d 62 65 72 20 6f 66 20 64 69 66 66 65 72 65 6e  mber of differen
aca0: 74 20 6b 69 6e 64 73 20 6f 66 20 74 68 69 6e 67  t kinds of thing
acb0: 73 20 74 68 61 74 20 63 61 6e 20 62 65 20 6c 69  s that can be li
acc0: 6d 69 74 65 64 0a 2a 2a 20 75 73 69 6e 67 20 74  mited.** using t
acd0: 68 65 20 73 71 6c 69 74 65 33 5f 6c 69 6d 69 74  he sqlite3_limit
ace0: 28 29 20 69 6e 74 65 72 66 61 63 65 2e 0a 2a 2f  () interface..*/
acf0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
ad00: 4e 5f 4c 49 4d 49 54 20 28 53 51 4c 49 54 45 5f  N_LIMIT (SQLITE_
ad10: 4c 49 4d 49 54 5f 57 4f 52 4b 45 52 5f 54 48 52  LIMIT_WORKER_THR
ad20: 45 41 44 53 2b 31 29 0a 0a 2f 2a 0a 2a 2a 20 4c  EADS+1)../*.** L
ad30: 6f 6f 6b 61 73 69 64 65 20 6d 61 6c 6c 6f 63 20  ookaside malloc 
ad40: 69 73 20 61 20 73 65 74 20 6f 66 20 66 69 78 65  is a set of fixe
ad50: 64 2d 73 69 7a 65 20 62 75 66 66 65 72 73 20 74  d-size buffers t
ad60: 68 61 74 20 63 61 6e 20 62 65 20 75 73 65 64 0a  hat can be used.
ad70: 2a 2a 20 74 6f 20 73 61 74 69 73 66 79 20 73 6d  ** to satisfy sm
ad80: 61 6c 6c 20 74 72 61 6e 73 69 65 6e 74 20 6d 65  all transient me
ad90: 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20  mory allocation 
ada0: 72 65 71 75 65 73 74 73 20 66 6f 72 20 6f 62 6a  requests for obj
adb0: 65 63 74 73 0a 2a 2a 20 61 73 73 6f 63 69 61 74  ects.** associat
adc0: 65 64 20 77 69 74 68 20 61 20 70 61 72 74 69 63  ed with a partic
add0: 75 6c 61 72 20 64 61 74 61 62 61 73 65 20 63 6f  ular database co
ade0: 6e 6e 65 63 74 69 6f 6e 2e 20 20 54 68 65 20 75  nnection.  The u
adf0: 73 65 20 6f 66 0a 2a 2a 20 6c 6f 6f 6b 61 73 69  se of.** lookasi
ae00: 64 65 20 6d 61 6c 6c 6f 63 20 70 72 6f 76 69 64  de malloc provid
ae10: 65 73 20 61 20 73 69 67 6e 69 66 69 63 61 6e 74  es a significant
ae20: 20 70 65 72 66 6f 72 6d 61 6e 63 65 20 65 6e 68   performance enh
ae30: 61 6e 63 65 6d 65 6e 74 0a 2a 2a 20 28 61 70 70  ancement.** (app
ae40: 72 6f 78 20 31 30 25 29 20 62 79 20 61 76 6f 69  rox 10%) by avoi
ae50: 64 69 6e 67 20 6e 75 6d 65 72 6f 75 73 20 6d 61  ding numerous ma
ae60: 6c 6c 6f 63 2f 66 72 65 65 20 72 65 71 75 65 73  lloc/free reques
ae70: 74 73 20 77 68 69 6c 65 20 70 61 72 73 69 6e 67  ts while parsing
ae80: 0a 2a 2a 20 53 51 4c 20 73 74 61 74 65 6d 65 6e  .** SQL statemen
ae90: 74 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 4c 6f  ts..**.** The Lo
aea0: 6f 6b 61 73 69 64 65 20 73 74 72 75 63 74 75 72  okaside structur
aeb0: 65 20 68 6f 6c 64 73 20 63 6f 6e 66 69 67 75 72  e holds configur
aec0: 61 74 69 6f 6e 20 69 6e 66 6f 72 6d 61 74 69 6f  ation informatio
aed0: 6e 20 61 62 6f 75 74 20 74 68 65 0a 2a 2a 20 6c  n about the.** l
aee0: 6f 6f 6b 61 73 69 64 65 20 6d 61 6c 6c 6f 63 20  ookaside malloc 
aef0: 73 75 62 73 79 73 74 65 6d 2e 20 20 45 61 63 68  subsystem.  Each
af00: 20 61 76 61 69 6c 61 62 6c 65 20 6d 65 6d 6f 72   available memor
af10: 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 69 6e 0a  y allocation in.
af20: 2a 2a 20 74 68 65 20 6c 6f 6f 6b 61 73 69 64 65  ** the lookaside
af30: 20 73 75 62 73 79 73 74 65 6d 20 69 73 20 73 74   subsystem is st
af40: 6f 72 65 64 20 6f 6e 20 61 20 6c 69 6e 6b 65 64  ored on a linked
af50: 20 6c 69 73 74 20 6f 66 20 4c 6f 6f 6b 61 73 69   list of Lookasi
af60: 64 65 53 6c 6f 74 0a 2a 2a 20 6f 62 6a 65 63 74  deSlot.** object
af70: 73 2e 0a 2a 2a 0a 2a 2a 20 4c 6f 6f 6b 61 73 69  s..**.** Lookasi
af80: 64 65 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 61  de allocations a
af90: 72 65 20 6f 6e 6c 79 20 61 6c 6c 6f 77 65 64 20  re only allowed 
afa0: 66 6f 72 20 6f 62 6a 65 63 74 73 20 74 68 61 74  for objects that
afb0: 20 61 72 65 20 61 73 73 6f 63 69 61 74 65 64 0a   are associated.
afc0: 2a 2a 20 77 69 74 68 20 61 20 70 61 72 74 69 63  ** with a partic
afd0: 75 6c 61 72 20 64 61 74 61 62 61 73 65 20 63 6f  ular database co
afe0: 6e 6e 65 63 74 69 6f 6e 2e 20 20 48 65 6e 63 65  nnection.  Hence
aff0: 2c 20 73 63 68 65 6d 61 20 69 6e 66 6f 72 6d 61  , schema informa
b000: 74 69 6f 6e 20 63 61 6e 6e 6f 74 0a 2a 2a 20 62  tion cannot.** b
b010: 65 20 73 74 6f 72 65 64 20 69 6e 20 6c 6f 6f 6b  e stored in look
b020: 61 73 69 64 65 20 62 65 63 61 75 73 65 20 69 6e  aside because in
b030: 20 73 68 61 72 65 64 20 63 61 63 68 65 20 6d 6f   shared cache mo
b040: 64 65 20 74 68 65 20 73 63 68 65 6d 61 20 69 6e  de the schema in
b050: 66 6f 72 6d 61 74 69 6f 6e 0a 2a 2a 20 69 73 20  formation.** is 
b060: 73 68 61 72 65 64 20 62 79 20 6d 75 6c 74 69 70  shared by multip
b070: 6c 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e  le database conn
b080: 65 63 74 69 6f 6e 73 2e 20 20 54 68 65 72 65 66  ections.  Theref
b090: 6f 72 65 2c 20 77 68 69 6c 65 20 70 61 72 73 69  ore, while parsi
b0a0: 6e 67 0a 2a 2a 20 73 63 68 65 6d 61 20 69 6e 66  ng.** schema inf
b0b0: 6f 72 6d 61 74 69 6f 6e 2c 20 74 68 65 20 4c 6f  ormation, the Lo
b0c0: 6f 6b 61 73 69 64 65 2e 62 45 6e 61 62 6c 65 64  okaside.bEnabled
b0d0: 20 66 6c 61 67 20 69 73 20 63 6c 65 61 72 65 64   flag is cleared
b0e0: 20 73 6f 20 74 68 61 74 0a 2a 2a 20 6c 6f 6f 6b   so that.** look
b0f0: 61 73 69 64 65 20 61 6c 6c 6f 63 61 74 69 6f 6e  aside allocation
b100: 73 20 61 72 65 20 6e 6f 74 20 75 73 65 64 20 74  s are not used t
b110: 6f 20 63 6f 6e 73 74 72 75 63 74 20 74 68 65 20  o construct the 
b120: 73 63 68 65 6d 61 20 6f 62 6a 65 63 74 73 2e 0a  schema objects..
b130: 2a 2f 0a 73 74 72 75 63 74 20 4c 6f 6f 6b 61 73  */.struct Lookas
b140: 69 64 65 20 7b 0a 20 20 75 33 32 20 62 44 69 73  ide {.  u32 bDis
b150: 61 62 6c 65 3b 20 20 20 20 20 20 20 20 20 20 20  able;           
b160: 2f 2a 20 4f 6e 6c 79 20 6f 70 65 72 61 74 65 20  /* Only operate 
b170: 74 68 65 20 6c 6f 6f 6b 61 73 69 64 65 20 77 68  the lookaside wh
b180: 65 6e 20 7a 65 72 6f 20 2a 2f 0a 20 20 75 31 36  en zero */.  u16
b190: 20 73 7a 3b 20 20 20 20 20 20 20 20 20 20 20 20   sz;            
b1a0: 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20       /* Size of 
b1b0: 65 61 63 68 20 62 75 66 66 65 72 20 69 6e 20 62  each buffer in b
b1c0: 79 74 65 73 20 2a 2f 0a 20 20 75 38 20 62 4d 61  ytes */.  u8 bMa
b1d0: 6c 6c 6f 63 65 64 3b 20 20 20 20 20 20 20 20 20  lloced;         
b1e0: 20 20 2f 2a 20 54 72 75 65 20 69 66 20 70 53 74    /* True if pSt
b1f0: 61 72 74 20 6f 62 74 61 69 6e 65 64 20 66 72 6f  art obtained fro
b200: 6d 20 73 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63  m sqlite3_malloc
b210: 28 29 20 2a 2f 0a 20 20 75 33 32 20 6e 53 6c 6f  () */.  u32 nSlo
b220: 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t;              
b230: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6c 6f 6f  /* Number of loo
b240: 6b 61 73 69 64 65 20 73 6c 6f 74 73 20 61 6c 6c  kaside slots all
b250: 6f 63 61 74 65 64 20 2a 2f 0a 20 20 75 33 32 20  ocated */.  u32 
b260: 61 6e 53 74 61 74 5b 33 5d 3b 20 20 20 20 20 20  anStat[3];      
b270: 20 20 20 20 2f 2a 20 30 3a 20 68 69 74 73 2e 20      /* 0: hits. 
b280: 20 31 3a 20 73 69 7a 65 20 6d 69 73 73 65 73 2e   1: size misses.
b290: 20 20 32 3a 20 66 75 6c 6c 20 6d 69 73 73 65 73    2: full misses
b2a0: 20 2a 2f 0a 20 20 4c 6f 6f 6b 61 73 69 64 65 53   */.  LookasideS
b2b0: 6c 6f 74 20 2a 70 49 6e 69 74 3b 20 20 20 2f 2a  lot *pInit;   /*
b2c0: 20 4c 69 73 74 20 6f 66 20 62 75 66 66 65 72 73   List of buffers
b2d0: 20 6e 6f 74 20 70 72 65 76 69 6f 75 73 6c 79 20   not previously 
b2e0: 75 73 65 64 20 2a 2f 0a 20 20 4c 6f 6f 6b 61 73  used */.  Lookas
b2f0: 69 64 65 53 6c 6f 74 20 2a 70 46 72 65 65 3b 20  ideSlot *pFree; 
b300: 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 61 76 61    /* List of ava
b310: 69 6c 61 62 6c 65 20 62 75 66 66 65 72 73 20 2a  ilable buffers *
b320: 2f 0a 20 20 76 6f 69 64 20 2a 70 53 74 61 72 74  /.  void *pStart
b330: 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46  ;           /* F
b340: 69 72 73 74 20 62 79 74 65 20 6f 66 20 61 76 61  irst byte of ava
b350: 69 6c 61 62 6c 65 20 6d 65 6d 6f 72 79 20 73 70  ilable memory sp
b360: 61 63 65 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70  ace */.  void *p
b370: 45 6e 64 3b 20 20 20 20 20 20 20 20 20 20 20 20  End;            
b380: 20 2f 2a 20 46 69 72 73 74 20 62 79 74 65 20 70   /* First byte p
b390: 61 73 74 20 65 6e 64 20 6f 66 20 61 76 61 69 6c  ast end of avail
b3a0: 61 62 6c 65 20 73 70 61 63 65 20 2a 2f 0a 7d 3b  able space */.};
b3b0: 0a 73 74 72 75 63 74 20 4c 6f 6f 6b 61 73 69 64  .struct Lookasid
b3c0: 65 53 6c 6f 74 20 7b 0a 20 20 4c 6f 6f 6b 61 73  eSlot {.  Lookas
b3d0: 69 64 65 53 6c 6f 74 20 2a 70 4e 65 78 74 3b 20  ideSlot *pNext; 
b3e0: 20 20 20 2f 2a 20 4e 65 78 74 20 62 75 66 66 65     /* Next buffe
b3f0: 72 20 69 6e 20 74 68 65 20 6c 69 73 74 20 6f 66  r in the list of
b400: 20 66 72 65 65 20 62 75 66 66 65 72 73 20 2a 2f   free buffers */
b410: 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20 68 61 73  .};../*.** A has
b420: 68 20 74 61 62 6c 65 20 66 6f 72 20 62 75 69 6c  h table for buil
b430: 74 2d 69 6e 20 66 75 6e 63 74 69 6f 6e 20 64 65  t-in function de
b440: 66 69 6e 69 74 69 6f 6e 73 2e 20 20 28 41 70 70  finitions.  (App
b450: 6c 69 63 61 74 69 6f 6e 2d 64 65 66 69 6e 65 64  lication-defined
b460: 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 73 20 75 73  .** functions us
b470: 65 20 61 20 72 65 67 75 6c 61 72 20 74 61 62 6c  e a regular tabl
b480: 65 20 74 61 62 6c 65 20 66 72 6f 6d 20 68 61 73  e table from has
b490: 68 2e 68 2e 29 0a 2a 2a 0a 2a 2a 20 48 61 73 68  h.h.).**.** Hash
b4a0: 20 65 61 63 68 20 46 75 6e 63 44 65 66 20 73 74   each FuncDef st
b4b0: 72 75 63 74 75 72 65 20 69 6e 74 6f 20 6f 6e 65  ructure into one
b4c0: 20 6f 66 20 74 68 65 20 46 75 6e 63 44 65 66 48   of the FuncDefH
b4d0: 61 73 68 2e 61 5b 5d 20 73 6c 6f 74 73 2e 0a 2a  ash.a[] slots..*
b4e0: 2a 20 43 6f 6c 6c 69 73 69 6f 6e 73 20 61 72 65  * Collisions are
b4f0: 20 6f 6e 20 74 68 65 20 46 75 6e 63 44 65 66 2e   on the FuncDef.
b500: 75 2e 70 48 61 73 68 20 63 68 61 69 6e 2e 20 20  u.pHash chain.  
b510: 55 73 65 20 74 68 65 20 53 51 4c 49 54 45 5f 46  Use the SQLITE_F
b520: 55 4e 43 5f 48 41 53 48 28 29 0a 2a 2a 20 6d 61  UNC_HASH().** ma
b530: 63 72 6f 20 74 6f 20 63 6f 6d 70 75 74 65 20 61  cro to compute a
b540: 20 68 61 73 68 20 6f 6e 20 74 68 65 20 66 75 6e   hash on the fun
b550: 63 74 69 6f 6e 20 6e 61 6d 65 2e 0a 2a 2f 0a 23  ction name..*/.#
b560: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55  define SQLITE_FU
b570: 4e 43 5f 48 41 53 48 5f 53 5a 20 32 33 0a 73 74  NC_HASH_SZ 23.st
b580: 72 75 63 74 20 46 75 6e 63 44 65 66 48 61 73 68  ruct FuncDefHash
b590: 20 7b 0a 20 20 46 75 6e 63 44 65 66 20 2a 61 5b   {.  FuncDef *a[
b5a0: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 48 41 53 48  SQLITE_FUNC_HASH
b5b0: 5f 53 5a 5d 3b 20 20 20 20 20 20 20 2f 2a 20 48  _SZ];       /* H
b5c0: 61 73 68 20 74 61 62 6c 65 20 66 6f 72 20 66 75  ash table for fu
b5d0: 6e 63 74 69 6f 6e 73 20 2a 2f 0a 7d 3b 0a 23 64  nctions */.};.#d
b5e0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e  efine SQLITE_FUN
b5f0: 43 5f 48 41 53 48 28 43 2c 4c 29 20 28 28 28 43  C_HASH(C,L) (((C
b600: 29 2b 28 4c 29 29 25 53 51 4c 49 54 45 5f 46 55  )+(L))%SQLITE_FU
b610: 4e 43 5f 48 41 53 48 5f 53 5a 29 0a 0a 23 69 66  NC_HASH_SZ)..#if
b620: 64 65 66 20 53 51 4c 49 54 45 5f 55 53 45 52 5f  def SQLITE_USER_
b630: 41 55 54 48 45 4e 54 49 43 41 54 49 4f 4e 0a 2f  AUTHENTICATION./
b640: 2a 0a 2a 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e  *.** Information
b650: 20 68 65 6c 64 20 69 6e 20 74 68 65 20 22 73 71   held in the "sq
b660: 6c 69 74 65 33 22 20 64 61 74 61 62 61 73 65 20  lite3" database 
b670: 63 6f 6e 6e 65 63 74 69 6f 6e 20 6f 62 6a 65 63  connection objec
b680: 74 20 61 6e 64 20 75 73 65 64 0a 2a 2a 20 74 6f  t and used.** to
b690: 20 6d 61 6e 61 67 65 20 75 73 65 72 20 61 75 74   manage user aut
b6a0: 68 65 6e 74 69 63 61 74 69 6f 6e 2e 0a 2a 2f 0a  hentication..*/.
b6b0: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 73  typedef struct s
b6c0: 71 6c 69 74 65 33 5f 75 73 65 72 61 75 74 68 20  qlite3_userauth 
b6d0: 73 71 6c 69 74 65 33 5f 75 73 65 72 61 75 74 68  sqlite3_userauth
b6e0: 3b 0a 73 74 72 75 63 74 20 73 71 6c 69 74 65 33  ;.struct sqlite3
b6f0: 5f 75 73 65 72 61 75 74 68 20 7b 0a 20 20 75 38  _userauth {.  u8
b700: 20 61 75 74 68 4c 65 76 65 6c 3b 20 20 20 20 20   authLevel;     
b710: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43              /* C
b720: 75 72 72 65 6e 74 20 61 75 74 68 65 6e 74 69 63  urrent authentic
b730: 61 74 69 6f 6e 20 6c 65 76 65 6c 20 2a 2f 0a 20  ation level */. 
b740: 20 69 6e 74 20 6e 41 75 74 68 50 57 3b 20 20 20   int nAuthPW;   
b750: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
b760: 2a 20 53 69 7a 65 20 6f 66 20 74 68 65 20 7a 41  * Size of the zA
b770: 75 74 68 50 57 20 69 6e 20 62 79 74 65 73 20 2a  uthPW in bytes *
b780: 2f 0a 20 20 63 68 61 72 20 2a 7a 41 75 74 68 50  /.  char *zAuthP
b790: 57 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  W;              
b7a0: 20 20 2f 2a 20 50 61 73 73 77 6f 72 64 20 75 73    /* Password us
b7b0: 65 64 20 74 6f 20 61 75 74 68 65 6e 74 69 63 61  ed to authentica
b7c0: 74 65 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 41  te */.  char *zA
b7d0: 75 74 68 55 73 65 72 3b 20 20 20 20 20 20 20 20  uthUser;        
b7e0: 20 20 20 20 20 20 2f 2a 20 55 73 65 72 20 6e 61        /* User na
b7f0: 6d 65 20 75 73 65 64 20 74 6f 20 61 75 74 68 65  me used to authe
b800: 6e 74 69 63 61 74 65 20 2a 2f 0a 7d 3b 0a 0a 2f  nticate */.};../
b810: 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73  * Allowed values
b820: 20 66 6f 72 20 73 71 6c 69 74 65 33 5f 75 73 65   for sqlite3_use
b830: 72 61 75 74 68 2e 61 75 74 68 4c 65 76 65 6c 20  rauth.authLevel 
b840: 2a 2f 0a 23 64 65 66 69 6e 65 20 55 41 55 54 48  */.#define UAUTH
b850: 5f 55 6e 6b 6e 6f 77 6e 20 20 20 20 20 30 20 20  _Unknown     0  
b860: 20 20 20 2f 2a 20 41 75 74 68 65 6e 74 69 63 61     /* Authentica
b870: 74 69 6f 6e 20 6e 6f 74 20 79 65 74 20 63 68 65  tion not yet che
b880: 63 6b 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20  cked */.#define 
b890: 55 41 55 54 48 5f 46 61 69 6c 20 20 20 20 20 20  UAUTH_Fail      
b8a0: 20 20 31 20 20 20 20 20 2f 2a 20 55 73 65 72 20    1     /* User 
b8b0: 61 75 74 68 65 6e 74 69 63 61 74 69 6f 6e 20 66  authentication f
b8c0: 61 69 6c 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65  ailed */.#define
b8d0: 20 55 41 55 54 48 5f 55 73 65 72 20 20 20 20 20   UAUTH_User     
b8e0: 20 20 20 32 20 20 20 20 20 2f 2a 20 41 75 74 68     2     /* Auth
b8f0: 65 6e 74 69 63 61 74 65 64 20 61 73 20 61 20 6e  enticated as a n
b900: 6f 72 6d 61 6c 20 75 73 65 72 20 2a 2f 0a 23 64  ormal user */.#d
b910: 65 66 69 6e 65 20 55 41 55 54 48 5f 41 64 6d 69  efine UAUTH_Admi
b920: 6e 20 20 20 20 20 20 20 33 20 20 20 20 20 2f 2a  n       3     /*
b930: 20 41 75 74 68 65 6e 74 69 63 61 74 65 64 20 61   Authenticated a
b940: 73 20 61 6e 20 61 64 6d 69 6e 69 73 74 72 61 74  s an administrat
b950: 6f 72 20 2a 2f 0a 0a 2f 2a 20 46 75 6e 63 74 69  or */../* Functi
b960: 6f 6e 73 20 75 73 65 64 20 6f 6e 6c 79 20 62 79  ons used only by
b970: 20 75 73 65 72 20 61 75 74 68 6f 72 69 7a 61 74   user authorizat
b980: 69 6f 6e 20 6c 6f 67 69 63 20 2a 2f 0a 69 6e 74  ion logic */.int
b990: 20 73 71 6c 69 74 65 33 55 73 65 72 41 75 74 68   sqlite3UserAuth
b9a0: 54 61 62 6c 65 28 63 6f 6e 73 74 20 63 68 61 72  Table(const char
b9b0: 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 55  *);.int sqlite3U
b9c0: 73 65 72 41 75 74 68 43 68 65 63 6b 4c 6f 67 69  serAuthCheckLogi
b9d0: 6e 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74  n(sqlite3*,const
b9e0: 20 63 68 61 72 2a 2c 75 38 2a 29 3b 0a 76 6f 69   char*,u8*);.voi
b9f0: 64 20 73 71 6c 69 74 65 33 55 73 65 72 41 75 74  d sqlite3UserAut
ba00: 68 49 6e 69 74 28 73 71 6c 69 74 65 33 2a 29 3b  hInit(sqlite3*);
ba10: 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 72 79  .void sqlite3Cry
ba20: 70 74 46 75 6e 63 28 73 71 6c 69 74 65 33 5f 63  ptFunc(sqlite3_c
ba30: 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69  ontext*,int,sqli
ba40: 74 65 33 5f 76 61 6c 75 65 2a 2a 29 3b 0a 0a 23  te3_value**);..#
ba50: 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
ba60: 55 53 45 52 5f 41 55 54 48 45 4e 54 49 43 41 54  USER_AUTHENTICAT
ba70: 49 4f 4e 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 74 79  ION */../*.** ty
ba80: 70 65 64 65 66 20 66 6f 72 20 74 68 65 20 61 75  pedef for the au
ba90: 74 68 6f 72 69 7a 61 74 69 6f 6e 20 63 61 6c 6c  thorization call
baa0: 62 61 63 6b 20 66 75 6e 63 74 69 6f 6e 2e 0a 2a  back function..*
bab0: 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
bac0: 55 53 45 52 5f 41 55 54 48 45 4e 54 49 43 41 54  USER_AUTHENTICAT
bad0: 49 4f 4e 0a 20 20 74 79 70 65 64 65 66 20 69 6e  ION.  typedef in
bae0: 74 20 28 2a 73 71 6c 69 74 65 33 5f 78 61 75 74  t (*sqlite3_xaut
baf0: 68 29 28 76 6f 69 64 2a 2c 69 6e 74 2c 63 6f 6e  h)(void*,int,con
bb00: 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63  st char*,const c
bb10: 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  har*,const char*
bb20: 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
bb30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bb40: 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f   const char*, co
bb50: 6e 73 74 20 63 68 61 72 2a 29 3b 0a 23 65 6c 73  nst char*);.#els
bb60: 65 0a 20 20 74 79 70 65 64 65 66 20 69 6e 74 20  e.  typedef int 
bb70: 28 2a 73 71 6c 69 74 65 33 5f 78 61 75 74 68 29  (*sqlite3_xauth)
bb80: 28 76 6f 69 64 2a 2c 69 6e 74 2c 63 6f 6e 73 74  (void*,int,const
bb90: 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61   char*,const cha
bba0: 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 0a  r*,const char*,.
bbb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bbc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
bbd0: 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 23 65 6e  onst char*);.#en
bbe0: 64 69 66 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c  dif..#ifndef SQL
bbf0: 49 54 45 5f 4f 4d 49 54 5f 44 45 50 52 45 43 41  ITE_OMIT_DEPRECA
bc00: 54 45 44 0a 2f 2a 20 54 68 69 73 20 69 73 20 61  TED./* This is a
bc10: 6e 20 65 78 74 72 61 20 53 51 4c 49 54 45 5f 54  n extra SQLITE_T
bc20: 52 41 43 45 20 6d 61 63 72 6f 20 74 68 61 74 20  RACE macro that 
bc30: 69 6e 64 69 63 61 74 65 73 20 22 6c 65 67 61 63  indicates "legac
bc40: 79 22 20 74 72 61 63 69 6e 67 0a 2a 2a 20 69 6e  y" tracing.** in
bc50: 20 74 68 65 20 73 74 79 6c 65 20 6f 66 20 73 71   the style of sq
bc60: 6c 69 74 65 33 5f 74 72 61 63 65 28 29 0a 2a 2f  lite3_trace().*/
bc70: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
bc80: 54 52 41 43 45 5f 4c 45 47 41 43 59 20 20 20 20  TRACE_LEGACY    
bc90: 20 20 20 20 20 20 30 78 34 30 20 20 20 20 20 2f        0x40     /
bca0: 2a 20 55 73 65 20 74 68 65 20 6c 65 67 61 63 79  * Use the legacy
bcb0: 20 78 54 72 61 63 65 20 2a 2f 0a 23 64 65 66 69   xTrace */.#defi
bcc0: 6e 65 20 53 51 4c 49 54 45 5f 54 52 41 43 45 5f  ne SQLITE_TRACE_
bcd0: 58 50 52 4f 46 49 4c 45 20 20 20 20 20 20 20 20  XPROFILE        
bce0: 30 78 38 30 20 20 20 20 20 2f 2a 20 55 73 65 20  0x80     /* Use 
bcf0: 74 68 65 20 6c 65 67 61 63 79 20 78 50 72 6f 66  the legacy xProf
bd00: 69 6c 65 20 2a 2f 0a 23 65 6c 73 65 0a 23 64 65  ile */.#else.#de
bd10: 66 69 6e 65 20 53 51 4c 49 54 45 5f 54 52 41 43  fine SQLITE_TRAC
bd20: 45 5f 4c 45 47 41 43 59 20 20 20 20 20 20 20 20  E_LEGACY        
bd30: 20 20 30 0a 23 64 65 66 69 6e 65 20 53 51 4c 49    0.#define SQLI
bd40: 54 45 5f 54 52 41 43 45 5f 58 50 52 4f 46 49 4c  TE_TRACE_XPROFIL
bd50: 45 20 20 20 20 20 20 20 20 30 0a 23 65 6e 64 69  E        0.#endi
bd60: 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54  f /* SQLITE_OMIT
bd70: 5f 44 45 50 52 45 43 41 54 45 44 20 2a 2f 0a 23  _DEPRECATED */.#
bd80: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 54 52  define SQLITE_TR
bd90: 41 43 45 5f 4e 4f 4e 4c 45 47 41 43 59 5f 4d 41  ACE_NONLEGACY_MA
bda0: 53 4b 20 20 30 78 30 66 20 20 20 20 20 2f 2a 20  SK  0x0f     /* 
bdb0: 4e 6f 72 6d 61 6c 20 66 6c 61 67 73 20 2a 2f 0a  Normal flags */.
bdc0: 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 64 61 74  ../*.** Each dat
bdd0: 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  abase connection
bde0: 20 69 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 20   is an instance 
bdf0: 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  of the following
be00: 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2f 0a 73   structure..*/.s
be10: 74 72 75 63 74 20 73 71 6c 69 74 65 33 20 7b 0a  truct sqlite3 {.
be20: 20 20 73 71 6c 69 74 65 33 5f 76 66 73 20 2a 70    sqlite3_vfs *p
be30: 56 66 73 3b 20 20 20 20 20 20 20 20 20 20 20 20  Vfs;            
be40: 2f 2a 20 4f 53 20 49 6e 74 65 72 66 61 63 65 20  /* OS Interface 
be50: 2a 2f 0a 20 20 73 74 72 75 63 74 20 56 64 62 65  */.  struct Vdbe
be60: 20 2a 70 56 64 62 65 3b 20 20 20 20 20 20 20 20   *pVdbe;        
be70: 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 61 63     /* List of ac
be80: 74 69 76 65 20 76 69 72 74 75 61 6c 20 6d 61 63  tive virtual mac
be90: 68 69 6e 65 73 20 2a 2f 0a 20 20 43 6f 6c 6c 53  hines */.  CollS
bea0: 65 71 20 2a 70 44 66 6c 74 43 6f 6c 6c 3b 20 20  eq *pDfltColl;  
beb0: 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
bec0: 64 65 66 61 75 6c 74 20 63 6f 6c 6c 61 74 69 6e  default collatin
bed0: 67 20 73 65 71 75 65 6e 63 65 20 28 42 49 4e 41  g sequence (BINA
bee0: 52 59 29 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33  RY) */.  sqlite3
bef0: 5f 6d 75 74 65 78 20 2a 6d 75 74 65 78 3b 20 20  _mutex *mutex;  
bf00: 20 20 20 20 20 20 20 2f 2a 20 43 6f 6e 6e 65 63         /* Connec
bf10: 74 69 6f 6e 20 6d 75 74 65 78 20 2a 2f 0a 20 20  tion mutex */.  
bf20: 44 62 20 2a 61 44 62 3b 20 20 20 20 20 20 20 20  Db *aDb;        
bf30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
bf40: 20 41 6c 6c 20 62 61 63 6b 65 6e 64 73 20 2a 2f   All backends */
bf50: 0a 20 20 69 6e 74 20 6e 44 62 3b 20 20 20 20 20  .  int nDb;     
bf60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bf70: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 61   /* Number of ba
bf80: 63 6b 65 6e 64 73 20 63 75 72 72 65 6e 74 6c 79  ckends currently
bf90: 20 69 6e 20 75 73 65 20 2a 2f 0a 20 20 75 33 32   in use */.  u32
bfa0: 20 6d 44 62 46 6c 61 67 73 3b 20 20 20 20 20 20   mDbFlags;      
bfb0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 66 6c             /* fl
bfc0: 61 67 73 20 72 65 63 6f 72 64 69 6e 67 20 69 6e  ags recording in
bfd0: 74 65 72 6e 61 6c 20 73 74 61 74 65 20 2a 2f 0a  ternal state */.
bfe0: 20 20 75 36 34 20 66 6c 61 67 73 3b 20 20 20 20    u64 flags;    
bff0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c000: 2f 2a 20 66 6c 61 67 73 20 73 65 74 74 61 62 6c  /* flags settabl
c010: 65 20 62 79 20 70 72 61 67 6d 61 73 2e 20 53 65  e by pragmas. Se
c020: 65 20 62 65 6c 6f 77 20 2a 2f 0a 20 20 69 36 34  e below */.  i64
c030: 20 6c 61 73 74 52 6f 77 69 64 3b 20 20 20 20 20   lastRowid;     
c040: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 4f             /* RO
c050: 57 49 44 20 6f 66 20 6d 6f 73 74 20 72 65 63 65  WID of most rece
c060: 6e 74 20 69 6e 73 65 72 74 20 28 73 65 65 20 61  nt insert (see a
c070: 62 6f 76 65 29 20 2a 2f 0a 20 20 69 36 34 20 73  bove) */.  i64 s
c080: 7a 4d 6d 61 70 3b 20 20 20 20 20 20 20 20 20 20  zMmap;          
c090: 20 20 20 20 20 20 20 20 20 2f 2a 20 44 65 66 61           /* Defa
c0a0: 75 6c 74 20 6d 6d 61 70 5f 73 69 7a 65 20 73 65  ult mmap_size se
c0b0: 74 74 69 6e 67 20 2a 2f 0a 20 20 75 33 32 20 6e  tting */.  u32 n
c0c0: 53 63 68 65 6d 61 4c 6f 63 6b 3b 20 20 20 20 20  SchemaLock;     
c0d0: 20 20 20 20 20 20 20 20 20 2f 2a 20 44 6f 20 6e           /* Do n
c0e0: 6f 74 20 72 65 73 65 74 20 74 68 65 20 73 63 68  ot reset the sch
c0f0: 65 6d 61 20 77 68 65 6e 20 6e 6f 6e 2d 7a 65 72  ema when non-zer
c100: 6f 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20  o */.  unsigned 
c110: 69 6e 74 20 6f 70 65 6e 46 6c 61 67 73 3b 20 20  int openFlags;  
c120: 20 20 20 20 20 2f 2a 20 46 6c 61 67 73 20 70 61       /* Flags pa
c130: 73 73 65 64 20 74 6f 20 73 71 6c 69 74 65 33 5f  ssed to sqlite3_
c140: 76 66 73 2e 78 4f 70 65 6e 28 29 20 2a 2f 0a 20  vfs.xOpen() */. 
c150: 20 69 6e 74 20 65 72 72 43 6f 64 65 3b 20 20 20   int errCode;   
c160: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
c170: 2a 20 4d 6f 73 74 20 72 65 63 65 6e 74 20 65 72  * Most recent er
c180: 72 6f 72 20 63 6f 64 65 20 28 53 51 4c 49 54 45  ror code (SQLITE
c190: 5f 2a 29 20 2a 2f 0a 20 20 69 6e 74 20 65 72 72  _*) */.  int err
c1a0: 4d 61 73 6b 3b 20 20 20 20 20 20 20 20 20 20 20  Mask;           
c1b0: 20 20 20 20 20 20 20 2f 2a 20 26 20 72 65 73 75         /* & resu
c1c0: 6c 74 20 63 6f 64 65 73 20 77 69 74 68 20 74 68  lt codes with th
c1d0: 69 73 20 62 65 66 6f 72 65 20 72 65 74 75 72 6e  is before return
c1e0: 69 6e 67 20 2a 2f 0a 20 20 69 6e 74 20 69 53 79  ing */.  int iSy
c1f0: 73 45 72 72 6e 6f 3b 20 20 20 20 20 20 20 20 20  sErrno;         
c200: 20 20 20 20 20 20 20 2f 2a 20 45 72 72 6e 6f 20         /* Errno 
c210: 76 61 6c 75 65 20 66 72 6f 6d 20 6c 61 73 74 20  value from last 
c220: 73 79 73 74 65 6d 20 65 72 72 6f 72 20 2a 2f 0a  system error */.
c230: 20 20 75 31 36 20 64 62 4f 70 74 46 6c 61 67 73    u16 dbOptFlags
c240: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
c250: 2f 2a 20 46 6c 61 67 73 20 74 6f 20 65 6e 61 62  /* Flags to enab
c260: 6c 65 2f 64 69 73 61 62 6c 65 20 6f 70 74 69 6d  le/disable optim
c270: 69 7a 61 74 69 6f 6e 73 20 2a 2f 0a 20 20 75 38  izations */.  u8
c280: 20 65 6e 63 3b 20 20 20 20 20 20 20 20 20 20 20   enc;           
c290: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
c2a0: 65 78 74 20 65 6e 63 6f 64 69 6e 67 20 2a 2f 0a  ext encoding */.
c2b0: 20 20 75 38 20 61 75 74 6f 43 6f 6d 6d 69 74 3b    u8 autoCommit;
c2c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c2d0: 2f 2a 20 54 68 65 20 61 75 74 6f 2d 63 6f 6d 6d  /* The auto-comm
c2e0: 69 74 20 66 6c 61 67 2e 20 2a 2f 0a 20 20 75 38  it flag. */.  u8
c2f0: 20 74 65 6d 70 5f 73 74 6f 72 65 3b 20 20 20 20   temp_store;    
c300: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 31              /* 1
c310: 3a 20 66 69 6c 65 20 32 3a 20 6d 65 6d 6f 72 79  : file 2: memory
c320: 20 30 3a 20 64 65 66 61 75 6c 74 20 2a 2f 0a 20   0: default */. 
c330: 20 75 38 20 6d 61 6c 6c 6f 63 46 61 69 6c 65 64   u8 mallocFailed
c340: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
c350: 2a 20 54 72 75 65 20 69 66 20 77 65 20 68 61 76  * True if we hav
c360: 65 20 73 65 65 6e 20 61 20 6d 61 6c 6c 6f 63 20  e seen a malloc 
c370: 66 61 69 6c 75 72 65 20 2a 2f 0a 20 20 75 38 20  failure */.  u8 
c380: 62 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 3b 20 20  bBenignMalloc;  
c390: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 6f             /* Do
c3a0: 20 6e 6f 74 20 72 65 71 75 69 72 65 20 4f 4f 4d   not require OOM
c3b0: 73 20 69 66 20 74 72 75 65 20 2a 2f 0a 20 20 75  s if true */.  u
c3c0: 38 20 64 66 6c 74 4c 6f 63 6b 4d 6f 64 65 3b 20  8 dfltLockMode; 
c3d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
c3e0: 44 65 66 61 75 6c 74 20 6c 6f 63 6b 69 6e 67 2d  Default locking-
c3f0: 6d 6f 64 65 20 66 6f 72 20 61 74 74 61 63 68 65  mode for attache
c400: 64 20 64 62 73 20 2a 2f 0a 20 20 73 69 67 6e 65  d dbs */.  signe
c410: 64 20 63 68 61 72 20 6e 65 78 74 41 75 74 6f 76  d char nextAutov
c420: 61 63 3b 20 20 20 20 20 20 2f 2a 20 41 75 74 6f  ac;      /* Auto
c430: 76 61 63 20 73 65 74 74 69 6e 67 20 61 66 74 65  vac setting afte
c440: 72 20 56 41 43 55 55 4d 20 69 66 20 3e 3d 30 20  r VACUUM if >=0 
c450: 2a 2f 0a 20 20 75 38 20 73 75 70 70 72 65 73 73  */.  u8 suppress
c460: 45 72 72 3b 20 20 20 20 20 20 20 20 20 20 20 20  Err;            
c470: 20 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 69 73 73     /* Do not iss
c480: 75 65 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65  ue error message
c490: 73 20 69 66 20 74 72 75 65 20 2a 2f 0a 20 20 75  s if true */.  u
c4a0: 38 20 76 74 61 62 4f 6e 43 6f 6e 66 6c 69 63 74  8 vtabOnConflict
c4b0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
c4c0: 56 61 6c 75 65 20 74 6f 20 72 65 74 75 72 6e 20  Value to return 
c4d0: 66 6f 72 20 73 33 5f 76 74 61 62 5f 6f 6e 5f 63  for s3_vtab_on_c
c4e0: 6f 6e 66 6c 69 63 74 28 29 20 2a 2f 0a 20 20 75  onflict() */.  u
c4f0: 38 20 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 53  8 isTransactionS
c500: 61 76 65 70 6f 69 6e 74 3b 20 20 20 20 2f 2a 20  avepoint;    /* 
c510: 54 72 75 65 20 69 66 20 74 68 65 20 6f 75 74 65  True if the oute
c520: 72 6d 6f 73 74 20 73 61 76 65 70 6f 69 6e 74 20  rmost savepoint 
c530: 69 73 20 61 20 54 53 20 2a 2f 0a 20 20 75 38 20  is a TS */.  u8 
c540: 6d 54 72 61 63 65 3b 20 20 20 20 20 20 20 20 20  mTrace;         
c550: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 7a 65             /* ze
c560: 72 6f 20 6f 72 20 6d 6f 72 65 20 53 51 4c 49 54  ro or more SQLIT
c570: 45 5f 54 52 41 43 45 20 66 6c 61 67 73 20 2a 2f  E_TRACE flags */
c580: 0a 20 20 75 38 20 6e 6f 53 68 61 72 65 64 43 61  .  u8 noSharedCa
c590: 63 68 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  che;            
c5a0: 20 2f 2a 20 54 72 75 65 20 69 66 20 6e 6f 20 73   /* True if no s
c5b0: 68 61 72 65 64 2d 63 61 63 68 65 20 62 61 63 6b  hared-cache back
c5c0: 65 6e 64 73 20 2a 2f 0a 20 20 75 38 20 6e 53 71  ends */.  u8 nSq
c5d0: 6c 45 78 65 63 3b 20 20 20 20 20 20 20 20 20 20  lExec;          
c5e0: 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
c5f0: 72 20 6f 66 20 70 65 6e 64 69 6e 67 20 4f 50 5f  r of pending OP_
c600: 53 71 6c 45 78 65 63 20 6f 70 63 6f 64 65 73 20  SqlExec opcodes 
c610: 2a 2f 0a 20 20 69 6e 74 20 6e 65 78 74 50 61 67  */.  int nextPag
c620: 65 73 69 7a 65 3b 20 20 20 20 20 20 20 20 20 20  esize;          
c630: 20 20 20 2f 2a 20 50 61 67 65 73 69 7a 65 20 61     /* Pagesize a
c640: 66 74 65 72 20 56 41 43 55 55 4d 20 69 66 20 3e  fter VACUUM if >
c650: 30 20 2a 2f 0a 20 20 75 33 32 20 6d 61 67 69 63  0 */.  u32 magic
c660: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
c670: 20 20 20 20 20 2f 2a 20 4d 61 67 69 63 20 6e 75       /* Magic nu
c680: 6d 62 65 72 20 66 6f 72 20 64 65 74 65 63 74 20  mber for detect 
c690: 6c 69 62 72 61 72 79 20 6d 69 73 75 73 65 20 2a  library misuse *
c6a0: 2f 0a 20 20 69 6e 74 20 6e 43 68 61 6e 67 65 3b  /.  int nChange;
c6b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c6c0: 20 20 2f 2a 20 56 61 6c 75 65 20 72 65 74 75 72    /* Value retur
c6d0: 6e 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f 63  ned by sqlite3_c
c6e0: 68 61 6e 67 65 73 28 29 20 2a 2f 0a 20 20 69 6e  hanges() */.  in
c6f0: 74 20 6e 54 6f 74 61 6c 43 68 61 6e 67 65 3b 20  t nTotalChange; 
c700: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56              /* V
c710: 61 6c 75 65 20 72 65 74 75 72 6e 65 64 20 62 79  alue returned by
c720: 20 73 71 6c 69 74 65 33 5f 74 6f 74 61 6c 5f 63   sqlite3_total_c
c730: 68 61 6e 67 65 73 28 29 20 2a 2f 0a 20 20 69 6e  hanges() */.  in
c740: 74 20 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f  t aLimit[SQLITE_
c750: 4e 5f 4c 49 4d 49 54 5d 3b 20 20 20 2f 2a 20 4c  N_LIMIT];   /* L
c760: 69 6d 69 74 73 20 2a 2f 0a 20 20 69 6e 74 20 6e  imits */.  int n
c770: 4d 61 78 53 6f 72 74 65 72 4d 6d 61 70 3b 20 20  MaxSorterMmap;  
c780: 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 78 69           /* Maxi
c790: 6d 75 6d 20 73 69 7a 65 20 6f 66 20 72 65 67 69  mum size of regi
c7a0: 6f 6e 73 20 6d 61 70 70 65 64 20 62 79 20 73 6f  ons mapped by so
c7b0: 72 74 65 72 20 2a 2f 0a 20 20 73 74 72 75 63 74  rter */.  struct
c7c0: 20 73 71 6c 69 74 65 33 49 6e 69 74 49 6e 66 6f   sqlite3InitInfo
c7d0: 20 7b 20 20 20 20 20 20 2f 2a 20 49 6e 66 6f 72   {      /* Infor
c7e0: 6d 61 74 69 6f 6e 20 75 73 65 64 20 64 75 72 69  mation used duri
c7f0: 6e 67 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f  ng initializatio
c800: 6e 20 2a 2f 0a 20 20 20 20 69 6e 74 20 6e 65 77  n */.    int new
c810: 54 6e 75 6d 3b 20 20 20 20 20 20 20 20 20 20 20  Tnum;           
c820: 20 20 20 20 20 2f 2a 20 52 6f 6f 74 70 61 67 65       /* Rootpage
c830: 20 6f 66 20 74 61 62 6c 65 20 62 65 69 6e 67 20   of table being 
c840: 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20  initialized */. 
c850: 20 20 20 75 38 20 69 44 62 3b 20 20 20 20 20 20     u8 iDb;      
c860: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
c870: 2a 20 57 68 69 63 68 20 64 62 20 66 69 6c 65 20  * Which db file 
c880: 69 73 20 62 65 69 6e 67 20 69 6e 69 74 69 61 6c  is being initial
c890: 69 7a 65 64 20 2a 2f 0a 20 20 20 20 75 38 20 62  ized */.    u8 b
c8a0: 75 73 79 3b 20 20 20 20 20 20 20 20 20 20 20 20  usy;            
c8b0: 20 20 20 20 20 20 20 20 2f 2a 20 54 52 55 45 20          /* TRUE 
c8c0: 69 66 20 63 75 72 72 65 6e 74 6c 79 20 69 6e 69  if currently ini
c8d0: 74 69 61 6c 69 7a 69 6e 67 20 2a 2f 0a 20 20 20  tializing */.   
c8e0: 20 75 6e 73 69 67 6e 65 64 20 6f 72 70 68 61 6e   unsigned orphan
c8f0: 54 72 69 67 67 65 72 20 3a 20 31 3b 20 2f 2a 20  Trigger : 1; /* 
c900: 4c 61 73 74 20 73 74 61 74 65 6d 65 6e 74 20 69  Last statement i
c910: 73 20 6f 72 70 68 61 6e 65 64 20 54 45 4d 50 20  s orphaned TEMP 
c920: 74 72 69 67 67 65 72 20 2a 2f 0a 20 20 20 20 75  trigger */.    u
c930: 6e 73 69 67 6e 65 64 20 69 6d 70 6f 73 74 65 72  nsigned imposter
c940: 54 61 62 6c 65 20 3a 20 31 3b 20 2f 2a 20 42 75  Table : 1; /* Bu
c950: 69 6c 64 69 6e 67 20 61 6e 20 69 6d 70 6f 73 74  ilding an impost
c960: 65 72 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20  er table */.    
c970: 75 6e 73 69 67 6e 65 64 20 72 65 6f 70 65 6e 4d  unsigned reopenM
c980: 65 6d 64 62 20 3a 20 31 3b 20 20 20 2f 2a 20 41  emdb : 1;   /* A
c990: 54 54 41 43 48 20 69 73 20 72 65 61 6c 6c 79 20  TTACH is really 
c9a0: 61 20 72 65 6f 70 65 6e 20 75 73 69 6e 67 20 4d  a reopen using M
c9b0: 65 6d 44 42 20 2a 2f 0a 20 20 7d 20 69 6e 69 74  emDB */.  } init
c9c0: 3b 0a 20 20 69 6e 74 20 6e 56 64 62 65 41 63 74  ;.  int nVdbeAct
c9d0: 69 76 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ive;            
c9e0: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 56    /* Number of V
c9f0: 44 42 45 73 20 63 75 72 72 65 6e 74 6c 79 20 72  DBEs currently r
ca00: 75 6e 6e 69 6e 67 20 2a 2f 0a 20 20 69 6e 74 20  unning */.  int 
ca10: 6e 56 64 62 65 52 65 61 64 3b 20 20 20 20 20 20  nVdbeRead;      
ca20: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
ca30: 62 65 72 20 6f 66 20 61 63 74 69 76 65 20 56 44  ber of active VD
ca40: 42 45 73 20 74 68 61 74 20 72 65 61 64 20 6f 72  BEs that read or
ca50: 20 77 72 69 74 65 20 2a 2f 0a 20 20 69 6e 74 20   write */.  int 
ca60: 6e 56 64 62 65 57 72 69 74 65 3b 20 20 20 20 20  nVdbeWrite;     
ca70: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
ca80: 62 65 72 20 6f 66 20 61 63 74 69 76 65 20 56 44  ber of active VD
ca90: 42 45 73 20 74 68 61 74 20 72 65 61 64 20 61 6e  BEs that read an
caa0: 64 20 77 72 69 74 65 20 2a 2f 0a 20 20 69 6e 74  d write */.  int
cab0: 20 6e 56 64 62 65 45 78 65 63 3b 20 20 20 20 20   nVdbeExec;     
cac0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
cad0: 6d 62 65 72 20 6f 66 20 6e 65 73 74 65 64 20 63  mber of nested c
cae0: 61 6c 6c 73 20 74 6f 20 56 64 62 65 45 78 65 63  alls to VdbeExec
caf0: 28 29 20 2a 2f 0a 20 20 69 6e 74 20 6e 56 44 65  () */.  int nVDe
cb00: 73 74 72 6f 79 3b 20 20 20 20 20 20 20 20 20 20  stroy;          
cb10: 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
cb20: 6f 66 20 61 63 74 69 76 65 20 4f 50 5f 56 44 65  of active OP_VDe
cb30: 73 74 72 6f 79 20 6f 70 65 72 61 74 69 6f 6e 73  stroy operations
cb40: 20 2a 2f 0a 20 20 69 6e 74 20 6e 45 78 74 65 6e   */.  int nExten
cb50: 73 69 6f 6e 3b 20 20 20 20 20 20 20 20 20 20 20  sion;           
cb60: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
cb70: 20 6c 6f 61 64 65 64 20 65 78 74 65 6e 73 69 6f   loaded extensio
cb80: 6e 73 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 2a 61  ns */.  void **a
cb90: 45 78 74 65 6e 73 69 6f 6e 3b 20 20 20 20 20 20  Extension;      
cba0: 20 20 20 20 20 20 2f 2a 20 41 72 72 61 79 20 6f        /* Array o
cbb0: 66 20 73 68 61 72 65 64 20 6c 69 62 72 61 72 79  f shared library
cbc0: 20 68 61 6e 64 6c 65 73 20 2a 2f 0a 20 20 69 6e   handles */.  in
cbd0: 74 20 28 2a 78 54 72 61 63 65 29 28 75 33 32 2c  t (*xTrace)(u32,
cbe0: 76 6f 69 64 2a 2c 76 6f 69 64 2a 2c 76 6f 69 64  void*,void*,void
cbf0: 2a 29 3b 20 20 20 20 20 2f 2a 20 54 72 61 63 65  *);     /* Trace
cc00: 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 76   function */.  v
cc10: 6f 69 64 20 2a 70 54 72 61 63 65 41 72 67 3b 20  oid *pTraceArg; 
cc20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cc30: 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72 67 75           /* Argu
cc40: 6d 65 6e 74 20 74 6f 20 74 68 65 20 74 72 61 63  ment to the trac
cc50: 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 69  e function */.#i
cc60: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
cc70: 54 5f 44 45 50 52 45 43 41 54 45 44 0a 20 20 76  T_DEPRECATED.  v
cc80: 6f 69 64 20 28 2a 78 50 72 6f 66 69 6c 65 29 28  oid (*xProfile)(
cc90: 76 6f 69 64 2a 2c 63 6f 6e 73 74 20 63 68 61 72  void*,const char
cca0: 2a 2c 75 36 34 29 3b 20 20 2f 2a 20 50 72 6f 66  *,u64);  /* Prof
ccb0: 69 6c 69 6e 67 20 66 75 6e 63 74 69 6f 6e 20 2a  iling function *
ccc0: 2f 0a 20 20 76 6f 69 64 20 2a 70 50 72 6f 66 69  /.  void *pProfi
ccd0: 6c 65 41 72 67 3b 20 20 20 20 20 20 20 20 20 20  leArg;          
cce0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
ccf0: 20 41 72 67 75 6d 65 6e 74 20 74 6f 20 70 72 6f   Argument to pro
cd00: 66 69 6c 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f  file function */
cd10: 0a 23 65 6e 64 69 66 0a 20 20 76 6f 69 64 20 2a  .#endif.  void *
cd20: 70 43 6f 6d 6d 69 74 41 72 67 3b 20 20 20 20 20  pCommitArg;     
cd30: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41              /* A
cd40: 72 67 75 6d 65 6e 74 20 74 6f 20 78 43 6f 6d 6d  rgument to xComm
cd50: 69 74 43 61 6c 6c 62 61 63 6b 28 29 20 2a 2f 0a  itCallback() */.
cd60: 20 20 69 6e 74 20 28 2a 78 43 6f 6d 6d 69 74 43    int (*xCommitC
cd70: 61 6c 6c 62 61 63 6b 29 28 76 6f 69 64 2a 29 3b  allback)(void*);
cd80: 20 20 20 20 2f 2a 20 49 6e 76 6f 6b 65 64 20 61      /* Invoked a
cd90: 74 20 65 76 65 72 79 20 63 6f 6d 6d 69 74 2e 20  t every commit. 
cda0: 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 52 6f 6c 6c  */.  void *pRoll
cdb0: 62 61 63 6b 41 72 67 3b 20 20 20 20 20 20 20 20  backArg;        
cdc0: 20 20 20 20 20 20 20 2f 2a 20 41 72 67 75 6d 65         /* Argume
cdd0: 6e 74 20 74 6f 20 78 52 6f 6c 6c 62 61 63 6b 43  nt to xRollbackC
cde0: 61 6c 6c 62 61 63 6b 28 29 20 2a 2f 0a 20 20 76  allback() */.  v
cdf0: 6f 69 64 20 28 2a 78 52 6f 6c 6c 62 61 63 6b 43  oid (*xRollbackC
ce00: 61 6c 6c 62 61 63 6b 29 28 76 6f 69 64 2a 29 3b  allback)(void*);
ce10: 20 2f 2a 20 49 6e 76 6f 6b 65 64 20 61 74 20 65   /* Invoked at e
ce20: 76 65 72 79 20 63 6f 6d 6d 69 74 2e 20 2a 2f 0a  very commit. */.
ce30: 20 20 76 6f 69 64 20 2a 70 55 70 64 61 74 65 41    void *pUpdateA
ce40: 72 67 3b 0a 20 20 76 6f 69 64 20 28 2a 78 55 70  rg;.  void (*xUp
ce50: 64 61 74 65 43 61 6c 6c 62 61 63 6b 29 28 76 6f  dateCallback)(vo
ce60: 69 64 2a 2c 69 6e 74 2c 20 63 6f 6e 73 74 20 63  id*,int, const c
ce70: 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  har*,const char*
ce80: 2c 73 71 6c 69 74 65 5f 69 6e 74 36 34 29 3b 0a  ,sqlite_int64);.
ce90: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e  #ifdef SQLITE_EN
cea0: 41 42 4c 45 5f 50 52 45 55 50 44 41 54 45 5f 48  ABLE_PREUPDATE_H
ceb0: 4f 4f 4b 0a 20 20 76 6f 69 64 20 2a 70 50 72 65  OOK.  void *pPre
cec0: 55 70 64 61 74 65 41 72 67 3b 20 20 20 20 20 20  UpdateArg;      
ced0: 20 20 20 20 2f 2a 20 46 69 72 73 74 20 61 72 67      /* First arg
cee0: 75 6d 65 6e 74 20 74 6f 20 78 50 72 65 55 70 64  ument to xPreUpd
cef0: 61 74 65 43 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20  ateCallback */. 
cf00: 20 76 6f 69 64 20 28 2a 78 50 72 65 55 70 64 61   void (*xPreUpda
cf10: 74 65 43 61 6c 6c 62 61 63 6b 29 28 20 20 20 2f  teCallback)(   /
cf20: 2a 20 52 65 67 69 73 74 65 72 65 64 20 75 73 69  * Registered usi
cf30: 6e 67 20 73 71 6c 69 74 65 33 5f 70 72 65 75 70  ng sqlite3_preup
cf40: 64 61 74 65 5f 68 6f 6f 6b 28 29 20 2a 2f 0a 20  date_hook() */. 
cf50: 20 20 20 76 6f 69 64 2a 2c 73 71 6c 69 74 65 33     void*,sqlite3
cf60: 2a 2c 69 6e 74 2c 63 68 61 72 20 63 6f 6e 73 74  *,int,char const
cf70: 2a 2c 63 68 61 72 20 63 6f 6e 73 74 2a 2c 73 71  *,char const*,sq
cf80: 6c 69 74 65 33 5f 69 6e 74 36 34 2c 73 71 6c 69  lite3_int64,sqli
cf90: 74 65 33 5f 69 6e 74 36 34 0a 20 20 29 3b 0a 20  te3_int64.  );. 
cfa0: 20 50 72 65 55 70 64 61 74 65 20 2a 70 50 72 65   PreUpdate *pPre
cfb0: 55 70 64 61 74 65 3b 20 20 20 20 20 20 20 20 2f  Update;        /
cfc0: 2a 20 43 6f 6e 74 65 78 74 20 66 6f 72 20 61 63  * Context for ac
cfd0: 74 69 76 65 20 70 72 65 2d 75 70 64 61 74 65 20  tive pre-update 
cfe0: 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 23 65 6e 64  callback */.#end
cff0: 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 45 4e 41  if /* SQLITE_ENA
d000: 42 4c 45 5f 50 52 45 55 50 44 41 54 45 5f 48 4f  BLE_PREUPDATE_HO
d010: 4f 4b 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51  OK */.#ifndef SQ
d020: 4c 49 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a 20 20  LITE_OMIT_WAL.  
d030: 69 6e 74 20 28 2a 78 57 61 6c 43 61 6c 6c 62 61  int (*xWalCallba
d040: 63 6b 29 28 76 6f 69 64 20 2a 2c 20 73 71 6c 69  ck)(void *, sqli
d050: 74 65 33 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61  te3 *, const cha
d060: 72 20 2a 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69  r *, int);.  voi
d070: 64 20 2a 70 57 61 6c 41 72 67 3b 0a 23 65 6e 64  d *pWalArg;.#end
d080: 69 66 0a 20 20 76 6f 69 64 28 2a 78 43 6f 6c 6c  if.  void(*xColl
d090: 4e 65 65 64 65 64 29 28 76 6f 69 64 2a 2c 73 71  Needed)(void*,sq
d0a0: 6c 69 74 65 33 2a 2c 69 6e 74 20 65 54 65 78 74  lite3*,int eText
d0b0: 52 65 70 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29  Rep,const char*)
d0c0: 3b 0a 20 20 76 6f 69 64 28 2a 78 43 6f 6c 6c 4e  ;.  void(*xCollN
d0d0: 65 65 64 65 64 31 36 29 28 76 6f 69 64 2a 2c 73  eeded16)(void*,s
d0e0: 71 6c 69 74 65 33 2a 2c 69 6e 74 20 65 54 65 78  qlite3*,int eTex
d0f0: 74 52 65 70 2c 63 6f 6e 73 74 20 76 6f 69 64 2a  tRep,const void*
d100: 29 3b 0a 20 20 76 6f 69 64 20 2a 70 43 6f 6c 6c  );.  void *pColl
d110: 4e 65 65 64 65 64 41 72 67 3b 0a 20 20 73 71 6c  NeededArg;.  sql
d120: 69 74 65 33 5f 76 61 6c 75 65 20 2a 70 45 72 72  ite3_value *pErr
d130: 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 6f  ;          /* Mo
d140: 73 74 20 72 65 63 65 6e 74 20 65 72 72 6f 72 20  st recent error 
d150: 6d 65 73 73 61 67 65 20 2a 2f 0a 20 20 75 6e 69  message */.  uni
d160: 6f 6e 20 7b 0a 20 20 20 20 76 6f 6c 61 74 69 6c  on {.    volatil
d170: 65 20 69 6e 74 20 69 73 49 6e 74 65 72 72 75 70  e int isInterrup
d180: 74 65 64 3b 20 2f 2a 20 54 72 75 65 20 69 66 20  ted; /* True if 
d190: 73 71 6c 69 74 65 33 5f 69 6e 74 65 72 72 75 70  sqlite3_interrup
d1a0: 74 20 68 61 73 20 62 65 65 6e 20 63 61 6c 6c 65  t has been calle
d1b0: 64 20 2a 2f 0a 20 20 20 20 64 6f 75 62 6c 65 20  d */.    double 
d1c0: 6e 6f 74 55 73 65 64 31 3b 20 20 20 20 20 20 20  notUsed1;       
d1d0: 20 20 20 20 20 2f 2a 20 53 70 61 63 65 72 20 2a       /* Spacer *
d1e0: 2f 0a 20 20 7d 20 75 31 3b 0a 20 20 4c 6f 6f 6b  /.  } u1;.  Look
d1f0: 61 73 69 64 65 20 6c 6f 6f 6b 61 73 69 64 65 3b  aside lookaside;
d200: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f 6f            /* Loo
d210: 6b 61 73 69 64 65 20 6d 61 6c 6c 6f 63 20 63 6f  kaside malloc co
d220: 6e 66 69 67 75 72 61 74 69 6f 6e 20 2a 2f 0a 23  nfiguration */.#
d230: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
d240: 49 54 5f 41 55 54 48 4f 52 49 5a 41 54 49 4f 4e  IT_AUTHORIZATION
d250: 0a 20 20 73 71 6c 69 74 65 33 5f 78 61 75 74 68  .  sqlite3_xauth
d260: 20 78 41 75 74 68 3b 20 20 20 20 20 20 20 20 20   xAuth;         
d270: 20 2f 2a 20 41 63 63 65 73 73 20 61 75 74 68 6f   /* Access autho
d280: 72 69 7a 61 74 69 6f 6e 20 66 75 6e 63 74 69 6f  rization functio
d290: 6e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 41 75  n */.  void *pAu
d2a0: 74 68 41 72 67 3b 20 20 20 20 20 20 20 20 20 20  thArg;          
d2b0: 20 20 20 20 20 2f 2a 20 31 73 74 20 61 72 67 75       /* 1st argu
d2c0: 6d 65 6e 74 20 74 6f 20 74 68 65 20 61 63 63 65  ment to the acce
d2d0: 73 73 20 61 75 74 68 20 66 75 6e 63 74 69 6f 6e  ss auth function
d2e0: 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64   */.#endif.#ifnd
d2f0: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50  ef SQLITE_OMIT_P
d300: 52 4f 47 52 45 53 53 5f 43 41 4c 4c 42 41 43 4b  ROGRESS_CALLBACK
d310: 0a 20 20 69 6e 74 20 28 2a 78 50 72 6f 67 72 65  .  int (*xProgre
d320: 73 73 29 28 76 6f 69 64 20 2a 29 3b 20 20 20 20  ss)(void *);    
d330: 20 2f 2a 20 54 68 65 20 70 72 6f 67 72 65 73 73   /* The progress
d340: 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 76   callback */.  v
d350: 6f 69 64 20 2a 70 50 72 6f 67 72 65 73 73 41 72  oid *pProgressAr
d360: 67 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  g;           /* 
d370: 41 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20  Argument to the 
d380: 70 72 6f 67 72 65 73 73 20 63 61 6c 6c 62 61 63  progress callbac
d390: 6b 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20  k */.  unsigned 
d3a0: 6e 50 72 6f 67 72 65 73 73 4f 70 73 3b 20 20 20  nProgressOps;   
d3b0: 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
d3c0: 66 20 6f 70 63 6f 64 65 73 20 66 6f 72 20 70 72  f opcodes for pr
d3d0: 6f 67 72 65 73 73 20 63 61 6c 6c 62 61 63 6b 20  ogress callback 
d3e0: 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65  */.#endif.#ifnde
d3f0: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  f SQLITE_OMIT_VI
d400: 52 54 55 41 4c 54 41 42 4c 45 0a 20 20 69 6e 74  RTUALTABLE.  int
d410: 20 6e 56 54 72 61 6e 73 3b 20 20 20 20 20 20 20   nVTrans;       
d420: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 6c             /* Al
d430: 6c 6f 63 61 74 65 64 20 73 69 7a 65 20 6f 66 20  located size of 
d440: 61 56 54 72 61 6e 73 20 2a 2f 0a 20 20 48 61 73  aVTrans */.  Has
d450: 68 20 61 4d 6f 64 75 6c 65 3b 20 20 20 20 20 20  h aModule;      
d460: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 70 6f             /* po
d470: 70 75 6c 61 74 65 64 20 62 79 20 73 71 6c 69 74  pulated by sqlit
d480: 65 33 5f 63 72 65 61 74 65 5f 6d 6f 64 75 6c 65  e3_create_module
d490: 28 29 20 2a 2f 0a 20 20 56 74 61 62 43 74 78 20  () */.  VtabCtx 
d4a0: 2a 70 56 74 61 62 43 74 78 3b 20 20 20 20 20 20  *pVtabCtx;      
d4b0: 20 20 20 20 20 20 2f 2a 20 43 6f 6e 74 65 78 74        /* Context
d4c0: 20 66 6f 72 20 61 63 74 69 76 65 20 76 74 61 62   for active vtab
d4d0: 20 63 6f 6e 6e 65 63 74 2f 63 72 65 61 74 65 20   connect/create 
d4e0: 2a 2f 0a 20 20 56 54 61 62 6c 65 20 2a 2a 61 56  */.  VTable **aV
d4f0: 54 72 61 6e 73 3b 20 20 20 20 20 20 20 20 20 20  Trans;          
d500: 20 20 20 2f 2a 20 56 69 72 74 75 61 6c 20 74 61     /* Virtual ta
d510: 62 6c 65 73 20 77 69 74 68 20 6f 70 65 6e 20 74  bles with open t
d520: 72 61 6e 73 61 63 74 69 6f 6e 73 20 2a 2f 0a 20  ransactions */. 
d530: 20 56 54 61 62 6c 65 20 2a 70 44 69 73 63 6f 6e   VTable *pDiscon
d540: 6e 65 63 74 3b 20 20 20 20 20 20 20 20 20 20 2f  nect;          /
d550: 2a 20 44 69 73 63 6f 6e 6e 65 63 74 20 74 68 65  * Disconnect the
d560: 73 65 20 69 6e 20 6e 65 78 74 20 73 71 6c 69 74  se in next sqlit
d570: 65 33 5f 70 72 65 70 61 72 65 28 29 20 2a 2f 0a  e3_prepare() */.
d580: 23 65 6e 64 69 66 0a 20 20 48 61 73 68 20 61 46  #endif.  Hash aF
d590: 75 6e 63 3b 20 20 20 20 20 20 20 20 20 20 20 20  unc;            
d5a0: 20 20 20 20 20 20 20 2f 2a 20 48 61 73 68 20 74         /* Hash t
d5b0: 61 62 6c 65 20 6f 66 20 63 6f 6e 6e 65 63 74 69  able of connecti
d5c0: 6f 6e 20 66 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a  on functions */.
d5d0: 20 20 48 61 73 68 20 61 43 6f 6c 6c 53 65 71 3b    Hash aCollSeq;
d5e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d5f0: 2f 2a 20 41 6c 6c 20 63 6f 6c 6c 61 74 69 6e 67  /* All collating
d600: 20 73 65 71 75 65 6e 63 65 73 20 2a 2f 0a 20 20   sequences */.  
d610: 42 75 73 79 48 61 6e 64 6c 65 72 20 62 75 73 79  BusyHandler busy
d620: 48 61 6e 64 6c 65 72 3b 20 20 20 20 20 20 2f 2a  Handler;      /*
d630: 20 42 75 73 79 20 63 61 6c 6c 62 61 63 6b 20 2a   Busy callback *
d640: 2f 0a 20 20 44 62 20 61 44 62 53 74 61 74 69 63  /.  Db aDbStatic
d650: 5b 32 5d 3b 20 20 20 20 20 20 20 20 20 20 20 20  [2];            
d660: 20 20 2f 2a 20 53 74 61 74 69 63 20 73 70 61 63    /* Static spac
d670: 65 20 66 6f 72 20 74 68 65 20 32 20 64 65 66 61  e for the 2 defa
d680: 75 6c 74 20 62 61 63 6b 65 6e 64 73 20 2a 2f 0a  ult backends */.
d690: 20 20 53 61 76 65 70 6f 69 6e 74 20 2a 70 53 61    Savepoint *pSa
d6a0: 76 65 70 6f 69 6e 74 3b 20 20 20 20 20 20 20 20  vepoint;        
d6b0: 2f 2a 20 4c 69 73 74 20 6f 66 20 61 63 74 69 76  /* List of activ
d6c0: 65 20 73 61 76 65 70 6f 69 6e 74 73 20 2a 2f 0a  e savepoints */.
d6d0: 20 20 69 6e 74 20 62 75 73 79 54 69 6d 65 6f 75    int busyTimeou
d6e0: 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t;              
d6f0: 2f 2a 20 42 75 73 79 20 68 61 6e 64 6c 65 72 20  /* Busy handler 
d700: 74 69 6d 65 6f 75 74 2c 20 69 6e 20 6d 73 65 63  timeout, in msec
d710: 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 61 76 65 70   */.  int nSavep
d720: 6f 69 6e 74 3b 20 20 20 20 20 20 20 20 20 20 20  oint;           
d730: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
d740: 20 6e 6f 6e 2d 74 72 61 6e 73 61 63 74 69 6f 6e   non-transaction
d750: 20 73 61 76 65 70 6f 69 6e 74 73 20 2a 2f 0a 20   savepoints */. 
d760: 20 69 6e 74 20 6e 53 74 61 74 65 6d 65 6e 74 3b   int nStatement;
d770: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
d780: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6e 65 73 74  * Number of nest
d790: 65 64 20 73 74 61 74 65 6d 65 6e 74 2d 74 72 61  ed statement-tra
d7a0: 6e 73 61 63 74 69 6f 6e 73 20 20 2a 2f 0a 20 20  nsactions  */.  
d7b0: 69 36 34 20 6e 44 65 66 65 72 72 65 64 43 6f 6e  i64 nDeferredCon
d7c0: 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  s;            /*
d7d0: 20 4e 65 74 20 64 65 66 65 72 72 65 64 20 63 6f   Net deferred co
d7e0: 6e 73 74 72 61 69 6e 74 73 20 74 68 69 73 20 74  nstraints this t
d7f0: 72 61 6e 73 61 63 74 69 6f 6e 2e 20 2a 2f 0a 20  ransaction. */. 
d800: 20 69 36 34 20 6e 44 65 66 65 72 72 65 64 49 6d   i64 nDeferredIm
d810: 6d 43 6f 6e 73 3b 20 20 20 20 20 20 20 20 20 2f  mCons;         /
d820: 2a 20 4e 65 74 20 64 65 66 65 72 72 65 64 20 69  * Net deferred i
d830: 6d 6d 65 64 69 61 74 65 20 63 6f 6e 73 74 72 61  mmediate constra
d840: 69 6e 74 73 20 2a 2f 0a 20 20 69 6e 74 20 2a 70  ints */.  int *p
d850: 6e 42 79 74 65 73 46 72 65 65 64 3b 20 20 20 20  nBytesFreed;    
d860: 20 20 20 20 20 20 20 20 2f 2a 20 49 66 20 6e 6f          /* If no
d870: 74 20 4e 55 4c 4c 2c 20 69 6e 63 72 65 6d 65 6e  t NULL, incremen
d880: 74 20 74 68 69 73 20 69 6e 20 44 62 46 72 65 65  t this in DbFree
d890: 28 29 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c  () */.#ifdef SQL
d8a0: 49 54 45 5f 45 4e 41 42 4c 45 5f 55 4e 4c 4f 43  ITE_ENABLE_UNLOC
d8b0: 4b 5f 4e 4f 54 49 46 59 0a 20 20 2f 2a 20 54 68  K_NOTIFY.  /* Th
d8c0: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 76 61 72 69  e following vari
d8d0: 61 62 6c 65 73 20 61 72 65 20 61 6c 6c 20 70 72  ables are all pr
d8e0: 6f 74 65 63 74 65 64 20 62 79 20 74 68 65 20 53  otected by the S
d8f0: 54 41 54 49 43 5f 4d 41 53 54 45 52 0a 20 20 2a  TATIC_MASTER.  *
d900: 2a 20 6d 75 74 65 78 2c 20 6e 6f 74 20 62 79 20  * mutex, not by 
d910: 73 71 6c 69 74 65 33 2e 6d 75 74 65 78 2e 20 54  sqlite3.mutex. T
d920: 68 65 79 20 61 72 65 20 75 73 65 64 20 62 79 20  hey are used by 
d930: 63 6f 64 65 20 69 6e 20 6e 6f 74 69 66 79 2e 63  code in notify.c
d940: 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 57 68 65 6e  ..  **.  ** When
d950: 20 58 2e 70 55 6e 6c 6f 63 6b 43 6f 6e 6e 65 63   X.pUnlockConnec
d960: 74 69 6f 6e 3d 3d 59 2c 20 74 68 61 74 20 6d 65  tion==Y, that me
d970: 61 6e 73 20 74 68 61 74 20 58 20 69 73 20 77 61  ans that X is wa
d980: 69 74 69 6e 67 20 66 6f 72 20 59 20 74 6f 0a 20  iting for Y to. 
d990: 20 2a 2a 20 75 6e 6c 6f 63 6b 20 73 6f 20 74 68   ** unlock so th
d9a0: 61 74 20 69 74 20 63 61 6e 20 70 72 6f 63 65 65  at it can procee
d9b0: 64 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 57 68 65  d..  **.  ** Whe
d9c0: 6e 20 58 2e 70 42 6c 6f 63 6b 69 6e 67 43 6f 6e  n X.pBlockingCon
d9d0: 6e 65 63 74 69 6f 6e 3d 3d 59 2c 20 74 68 61 74  nection==Y, that
d9e0: 20 6d 65 61 6e 73 20 74 68 61 74 20 73 6f 6d 65   means that some
d9f0: 74 68 69 6e 67 20 74 68 61 74 20 58 20 74 72 69  thing that X tri
da00: 65 64 0a 20 20 2a 2a 20 74 72 69 65 64 20 74 6f  ed.  ** tried to
da10: 20 64 6f 20 72 65 63 65 6e 74 6c 79 20 66 61 69   do recently fai
da20: 6c 65 64 20 77 69 74 68 20 61 6e 20 53 51 4c 49  led with an SQLI
da30: 54 45 5f 4c 4f 43 4b 45 44 20 65 72 72 6f 72 20  TE_LOCKED error 
da40: 64 75 65 20 74 6f 20 6c 6f 63 6b 73 0a 20 20 2a  due to locks.  *
da50: 2a 20 68 65 6c 64 20 62 79 20 59 2e 0a 20 20 2a  * held by Y..  *
da60: 2f 0a 20 20 73 71 6c 69 74 65 33 20 2a 70 42 6c  /.  sqlite3 *pBl
da70: 6f 63 6b 69 6e 67 43 6f 6e 6e 65 63 74 69 6f 6e  ockingConnection
da80: 3b 20 2f 2a 20 43 6f 6e 6e 65 63 74 69 6f 6e 20  ; /* Connection 
da90: 74 68 61 74 20 63 61 75 73 65 64 20 53 51 4c 49  that caused SQLI
daa0: 54 45 5f 4c 4f 43 4b 45 44 20 2a 2f 0a 20 20 73  TE_LOCKED */.  s
dab0: 71 6c 69 74 65 33 20 2a 70 55 6e 6c 6f 63 6b 43  qlite3 *pUnlockC
dac0: 6f 6e 6e 65 63 74 69 6f 6e 3b 20 20 20 20 20 20  onnection;      
dad0: 20 20 20 20 20 2f 2a 20 43 6f 6e 6e 65 63 74 69       /* Connecti
dae0: 6f 6e 20 74 6f 20 77 61 74 63 68 20 66 6f 72 20  on to watch for 
daf0: 75 6e 6c 6f 63 6b 20 2a 2f 0a 20 20 76 6f 69 64  unlock */.  void
db00: 20 2a 70 55 6e 6c 6f 63 6b 41 72 67 3b 20 20 20   *pUnlockArg;   
db10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
db20: 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f    /* Argument to
db30: 20 78 55 6e 6c 6f 63 6b 4e 6f 74 69 66 79 20 2a   xUnlockNotify *
db40: 2f 0a 20 20 76 6f 69 64 20 28 2a 78 55 6e 6c 6f  /.  void (*xUnlo
db50: 63 6b 4e 6f 74 69 66 79 29 28 76 6f 69 64 20 2a  ckNotify)(void *
db60: 2a 2c 20 69 6e 74 29 3b 20 20 2f 2a 20 55 6e 6c  *, int);  /* Unl
db70: 6f 63 6b 20 6e 6f 74 69 66 79 20 63 61 6c 6c 62  ock notify callb
db80: 61 63 6b 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33  ack */.  sqlite3
db90: 20 2a 70 4e 65 78 74 42 6c 6f 63 6b 65 64 3b 20   *pNextBlocked; 
dba0: 20 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 69         /* Next i
dbb0: 6e 20 6c 69 73 74 20 6f 66 20 61 6c 6c 20 62 6c  n list of all bl
dbc0: 6f 63 6b 65 64 20 63 6f 6e 6e 65 63 74 69 6f 6e  ocked connection
dbd0: 73 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66 64  s */.#endif.#ifd
dbe0: 65 66 20 53 51 4c 49 54 45 5f 55 53 45 52 5f 41  ef SQLITE_USER_A
dbf0: 55 54 48 45 4e 54 49 43 41 54 49 4f 4e 0a 20 20  UTHENTICATION.  
dc00: 73 71 6c 69 74 65 33 5f 75 73 65 72 61 75 74 68  sqlite3_userauth
dc10: 20 61 75 74 68 3b 20 20 20 20 20 20 20 20 2f 2a   auth;        /*
dc20: 20 55 73 65 72 20 61 75 74 68 65 6e 74 69 63 61   User authentica
dc30: 74 69 6f 6e 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  tion information
dc40: 20 2a 2f 0a 23 65 6e 64 69 66 0a 7d 3b 0a 0a 2f   */.#endif.};../
dc50: 2a 0a 2a 2a 20 41 20 6d 61 63 72 6f 20 74 6f 20  *.** A macro to 
dc60: 64 69 73 63 6f 76 65 72 20 74 68 65 20 65 6e 63  discover the enc
dc70: 6f 64 69 6e 67 20 6f 66 20 61 20 64 61 74 61 62  oding of a datab
dc80: 61 73 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ase..*/.#define 
dc90: 53 43 48 45 4d 41 5f 45 4e 43 28 64 62 29 20 28  SCHEMA_ENC(db) (
dca0: 28 64 62 29 2d 3e 61 44 62 5b 30 5d 2e 70 53 63  (db)->aDb[0].pSc
dcb0: 68 65 6d 61 2d 3e 65 6e 63 29 0a 23 64 65 66 69  hema->enc).#defi
dcc0: 6e 65 20 45 4e 43 28 64 62 29 20 20 20 20 20 20  ne ENC(db)      
dcd0: 20 20 28 28 64 62 29 2d 3e 65 6e 63 29 0a 0a 2f    ((db)->enc)../
dce0: 2a 0a 2a 2a 20 50 6f 73 73 69 62 6c 65 20 76 61  *.** Possible va
dcf0: 6c 75 65 73 20 66 6f 72 20 74 68 65 20 73 71 6c  lues for the sql
dd00: 69 74 65 33 2e 66 6c 61 67 73 2e 0a 2a 2a 0a 2a  ite3.flags..**.*
dd10: 2a 20 56 61 6c 75 65 20 63 6f 6e 73 74 72 61 69  * Value constrai
dd20: 6e 74 73 20 28 65 6e 66 6f 72 63 65 64 20 76 69  nts (enforced vi
dd30: 61 20 61 73 73 65 72 74 28 29 29 3a 0a 2a 2a 20  a assert()):.** 
dd40: 20 20 20 20 20 53 51 4c 49 54 45 5f 46 75 6c 6c       SQLITE_Full
dd50: 46 53 79 6e 63 20 20 20 20 20 3d 3d 20 50 41 47  FSync     == PAG
dd60: 45 52 5f 46 55 4c 4c 46 53 59 4e 43 0a 2a 2a 20  ER_FULLFSYNC.** 
dd70: 20 20 20 20 20 53 51 4c 49 54 45 5f 43 6b 70 74       SQLITE_Ckpt
dd80: 46 75 6c 6c 46 53 79 6e 63 20 3d 3d 20 50 41 47  FullFSync == PAG
dd90: 45 52 5f 43 4b 50 54 5f 46 55 4c 4c 46 53 59 4e  ER_CKPT_FULLFSYN
dda0: 43 0a 2a 2a 20 20 20 20 20 20 53 51 4c 49 54 45  C.**      SQLITE
ddb0: 5f 43 61 63 68 65 53 70 69 6c 6c 20 20 20 20 3d  _CacheSpill    =
ddc0: 3d 20 50 41 47 45 52 5f 43 41 43 48 45 5f 53 50  = PAGER_CACHE_SP
ddd0: 49 4c 4c 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ILL.*/.#define S
dde0: 51 4c 49 54 45 5f 57 72 69 74 65 53 63 68 65 6d  QLITE_WriteSchem
ddf0: 61 20 20 20 20 30 78 30 30 30 30 30 30 30 31 20  a    0x00000001 
de00: 20 2f 2a 20 4f 4b 20 74 6f 20 75 70 64 61 74 65   /* OK to update
de10: 20 53 51 4c 49 54 45 5f 4d 41 53 54 45 52 20 2a   SQLITE_MASTER *
de20: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
de30: 5f 4c 65 67 61 63 79 46 69 6c 65 46 6d 74 20 20  _LegacyFileFmt  
de40: 30 78 30 30 30 30 30 30 30 32 20 20 2f 2a 20 43  0x00000002  /* C
de50: 72 65 61 74 65 20 6e 65 77 20 64 61 74 61 62 61  reate new databa
de60: 73 65 73 20 69 6e 20 66 6f 72 6d 61 74 20 31 20  ses in format 1 
de70: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
de80: 45 5f 46 75 6c 6c 43 6f 6c 4e 61 6d 65 73 20 20  E_FullColNames  
de90: 20 30 78 30 30 30 30 30 30 30 34 20 20 2f 2a 20   0x00000004  /* 
dea0: 53 68 6f 77 20 66 75 6c 6c 20 63 6f 6c 75 6d 6e  Show full column
deb0: 20 6e 61 6d 65 73 20 6f 6e 20 53 45 4c 45 43 54   names on SELECT
dec0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
ded0: 54 45 5f 46 75 6c 6c 46 53 79 6e 63 20 20 20 20  TE_FullFSync    
dee0: 20 20 30 78 30 30 30 30 30 30 30 38 20 20 2f 2a    0x00000008  /*
def0: 20 55 73 65 20 66 75 6c 6c 20 66 73 79 6e 63 20   Use full fsync 
df00: 6f 6e 20 74 68 65 20 62 61 63 6b 65 6e 64 20 2a  on the backend *
df10: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
df20: 5f 43 6b 70 74 46 75 6c 6c 46 53 79 6e 63 20 20  _CkptFullFSync  
df30: 30 78 30 30 30 30 30 30 31 30 20 20 2f 2a 20 55  0x00000010  /* U
df40: 73 65 20 66 75 6c 6c 20 66 73 79 6e 63 20 66 6f  se full fsync fo
df50: 72 20 63 68 65 63 6b 70 6f 69 6e 74 20 2a 2f 0a  r checkpoint */.
df60: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43  #define SQLITE_C
df70: 61 63 68 65 53 70 69 6c 6c 20 20 20 20 20 30 78  acheSpill     0x
df80: 30 30 30 30 30 30 32 30 20 20 2f 2a 20 4f 4b 20  00000020  /* OK 
df90: 74 6f 20 73 70 69 6c 6c 20 70 61 67 65 72 20 63  to spill pager c
dfa0: 61 63 68 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ache */.#define 
dfb0: 53 51 4c 49 54 45 5f 53 68 6f 72 74 43 6f 6c 4e  SQLITE_ShortColN
dfc0: 61 6d 65 73 20 20 30 78 30 30 30 30 30 30 34 30  ames  0x00000040
dfd0: 20 20 2f 2a 20 53 68 6f 77 20 73 68 6f 72 74 20    /* Show short 
dfe0: 63 6f 6c 75 6d 6e 73 20 6e 61 6d 65 73 20 2a 2f  columns names */
dff0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
e000: 43 6f 75 6e 74 52 6f 77 73 20 20 20 20 20 20 30  CountRows      0
e010: 78 30 30 30 30 30 30 38 30 20 20 2f 2a 20 43 6f  x00000080  /* Co
e020: 75 6e 74 20 72 6f 77 73 20 63 68 61 6e 67 65 64  unt rows changed
e030: 20 62 79 20 49 4e 53 45 52 54 2c 20 2a 2f 0a 20   by INSERT, */. 
e040: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e050: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e060: 20 20 20 20 20 20 20 20 20 2f 2a 20 20 20 44 45           /*   DE
e070: 4c 45 54 45 2c 20 6f 72 20 55 50 44 41 54 45 20  LETE, or UPDATE 
e080: 61 6e 64 20 72 65 74 75 72 6e 20 2a 2f 0a 20 20  and return */.  
e090: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e0a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e0b0: 20 20 20 20 20 20 20 20 2f 2a 20 20 20 74 68 65          /*   the
e0c0: 20 63 6f 75 6e 74 20 75 73 69 6e 67 20 61 20 63   count using a c
e0d0: 61 6c 6c 62 61 63 6b 2e 20 2a 2f 0a 23 64 65 66  allback. */.#def
e0e0: 69 6e 65 20 53 51 4c 49 54 45 5f 4e 75 6c 6c 43  ine SQLITE_NullC
e0f0: 61 6c 6c 62 61 63 6b 20 20 20 30 78 30 30 30 30  allback   0x0000
e100: 30 31 30 30 20 20 2f 2a 20 49 6e 76 6f 6b 65 20  0100  /* Invoke 
e110: 74 68 65 20 63 61 6c 6c 62 61 63 6b 20 6f 6e 63  the callback onc
e120: 65 20 69 66 20 74 68 65 20 2a 2f 0a 20 20 20 20  e if the */.    
e130: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e140: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e150: 20 20 20 20 20 20 2f 2a 20 20 20 72 65 73 75 6c        /*   resul
e160: 74 20 73 65 74 20 69 73 20 65 6d 70 74 79 20 2a  t set is empty *
e170: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
e180: 5f 49 67 6e 6f 72 65 43 68 65 63 6b 73 20 20 20  _IgnoreChecks   
e190: 30 78 30 30 30 30 30 32 30 30 20 20 2f 2a 20 44  0x00000200  /* D
e1a0: 6f 20 6e 6f 74 20 65 6e 66 6f 72 63 65 20 63 68  o not enforce ch
e1b0: 65 63 6b 20 63 6f 6e 73 74 72 61 69 6e 74 73 20  eck constraints 
e1c0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
e1d0: 45 5f 52 65 61 64 55 6e 63 6f 6d 6d 69 74 20 20  E_ReadUncommit  
e1e0: 20 30 78 30 30 30 30 30 34 30 30 20 20 2f 2a 20   0x00000400  /* 
e1f0: 52 45 41 44 20 55 4e 43 4f 4d 4d 49 54 54 45 44  READ UNCOMMITTED
e200: 20 69 6e 20 73 68 61 72 65 64 2d 63 61 63 68 65   in shared-cache
e210: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
e220: 54 45 5f 4e 6f 43 6b 70 74 4f 6e 43 6c 6f 73 65  TE_NoCkptOnClose
e230: 20 20 30 78 30 30 30 30 30 38 30 30 20 20 2f 2a    0x00000800  /*
e240: 20 4e 6f 20 63 68 65 63 6b 70 6f 69 6e 74 20 6f   No checkpoint o
e250: 6e 20 63 6c 6f 73 65 28 29 2f 44 45 54 41 43 48  n close()/DETACH
e260: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
e270: 54 45 5f 52 65 76 65 72 73 65 4f 72 64 65 72 20  TE_ReverseOrder 
e280: 20 20 30 78 30 30 30 30 31 30 30 30 20 20 2f 2a    0x00001000  /*
e290: 20 52 65 76 65 72 73 65 20 75 6e 6f 72 64 65 72   Reverse unorder
e2a0: 65 64 20 53 45 4c 45 43 54 73 20 2a 2f 0a 23 64  ed SELECTs */.#d
e2b0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 52 65 63  efine SQLITE_Rec
e2c0: 54 72 69 67 67 65 72 73 20 20 20 20 30 78 30 30  Triggers    0x00
e2d0: 30 30 32 30 30 30 20 20 2f 2a 20 45 6e 61 62 6c  002000  /* Enabl
e2e0: 65 20 72 65 63 75 72 73 69 76 65 20 74 72 69 67  e recursive trig
e2f0: 67 65 72 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  gers */.#define 
e300: 53 51 4c 49 54 45 5f 46 6f 72 65 69 67 6e 4b 65  SQLITE_ForeignKe
e310: 79 73 20 20 20 20 30 78 30 30 30 30 34 30 30 30  ys    0x00004000
e320: 20 20 2f 2a 20 45 6e 66 6f 72 63 65 20 66 6f 72    /* Enforce for
e330: 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61  eign key constra
e340: 69 6e 74 73 20 20 2a 2f 0a 23 64 65 66 69 6e 65  ints  */.#define
e350: 20 53 51 4c 49 54 45 5f 41 75 74 6f 49 6e 64 65   SQLITE_AutoInde
e360: 78 20 20 20 20 20 20 30 78 30 30 30 30 38 30 30  x      0x0000800
e370: 30 20 20 2f 2a 20 45 6e 61 62 6c 65 20 61 75 74  0  /* Enable aut
e380: 6f 6d 61 74 69 63 20 69 6e 64 65 78 65 73 20 2a  omatic indexes *
e390: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
e3a0: 5f 4c 6f 61 64 45 78 74 65 6e 73 69 6f 6e 20 20  _LoadExtension  
e3b0: 30 78 30 30 30 31 30 30 30 30 20 20 2f 2a 20 45  0x00010000  /* E
e3c0: 6e 61 62 6c 65 20 6c 6f 61 64 5f 65 78 74 65 6e  nable load_exten
e3d0: 73 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  sion */.#define 
e3e0: 53 51 4c 49 54 45 5f 4c 6f 61 64 45 78 74 46 75  SQLITE_LoadExtFu
e3f0: 6e 63 20 20 20 20 30 78 30 30 30 32 30 30 30 30  nc    0x00020000
e400: 20 20 2f 2a 20 45 6e 61 62 6c 65 20 6c 6f 61 64    /* Enable load
e410: 5f 65 78 74 65 6e 73 69 6f 6e 28 29 20 53 51 4c  _extension() SQL
e420: 20 66 75 6e 63 20 2a 2f 0a 23 64 65 66 69 6e 65   func */.#define
e430: 20 53 51 4c 49 54 45 5f 45 6e 61 62 6c 65 54 72   SQLITE_EnableTr
e440: 69 67 67 65 72 20 20 30 78 30 30 30 34 30 30 30  igger  0x0004000
e450: 30 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 65 6e  0  /* True to en
e460: 61 62 6c 65 20 74 72 69 67 67 65 72 73 20 2a 2f  able triggers */
e470: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
e480: 44 65 66 65 72 46 4b 73 20 20 20 20 20 20 20 30  DeferFKs       0
e490: 78 30 30 30 38 30 30 30 30 20 20 2f 2a 20 44 65  x00080000  /* De
e4a0: 66 65 72 20 61 6c 6c 20 46 4b 20 63 6f 6e 73 74  fer all FK const
e4b0: 72 61 69 6e 74 73 20 2a 2f 0a 23 64 65 66 69 6e  raints */.#defin
e4c0: 65 20 53 51 4c 49 54 45 5f 51 75 65 72 79 4f 6e  e SQLITE_QueryOn
e4d0: 6c 79 20 20 20 20 20 20 30 78 30 30 31 30 30 30  ly      0x001000
e4e0: 30 30 20 20 2f 2a 20 44 69 73 61 62 6c 65 20 64  00  /* Disable d
e4f0: 61 74 61 62 61 73 65 20 63 68 61 6e 67 65 73 20  atabase changes 
e500: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
e510: 45 5f 43 65 6c 6c 53 69 7a 65 43 6b 20 20 20 20  E_CellSizeCk    
e520: 20 30 78 30 30 32 30 30 30 30 30 20 20 2f 2a 20   0x00200000  /* 
e530: 43 68 65 63 6b 20 62 74 72 65 65 20 63 65 6c 6c  Check btree cell
e540: 20 73 69 7a 65 73 20 6f 6e 20 6c 6f 61 64 20 2a   sizes on load *
e550: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
e560: 5f 46 74 73 33 54 6f 6b 65 6e 69 7a 65 72 20 20  _Fts3Tokenizer  
e570: 30 78 30 30 34 30 30 30 30 30 20 20 2f 2a 20 45  0x00400000  /* E
e580: 6e 61 62 6c 65 20 66 74 73 33 5f 74 6f 6b 65 6e  nable fts3_token
e590: 69 7a 65 72 28 32 29 20 2a 2f 0a 23 64 65 66 69  izer(2) */.#defi
e5a0: 6e 65 20 53 51 4c 49 54 45 5f 45 6e 61 62 6c 65  ne SQLITE_Enable
e5b0: 51 50 53 47 20 20 20 20 20 30 78 30 30 38 30 30  QPSG     0x00800
e5c0: 30 30 30 20 20 2f 2a 20 51 75 65 72 79 20 50 6c  000  /* Query Pl
e5d0: 61 6e 6e 65 72 20 53 74 61 62 69 6c 69 74 79 20  anner Stability 
e5e0: 47 75 61 72 61 6e 74 65 65 2a 2f 0a 23 64 65 66  Guarantee*/.#def
e5f0: 69 6e 65 20 53 51 4c 49 54 45 5f 54 72 69 67 67  ine SQLITE_Trigg
e600: 65 72 45 51 50 20 20 20 20 20 30 78 30 31 30 30  erEQP     0x0100
e610: 30 30 30 30 20 20 2f 2a 20 53 68 6f 77 20 74 72  0000  /* Show tr
e620: 69 67 67 65 72 20 45 58 50 4c 41 49 4e 20 51 55  igger EXPLAIN QU
e630: 45 52 59 20 50 4c 41 4e 20 2a 2f 0a 23 64 65 66  ERY PLAN */.#def
e640: 69 6e 65 20 53 51 4c 49 54 45 5f 52 65 73 65 74  ine SQLITE_Reset
e650: 44 61 74 61 62 61 73 65 20 20 30 78 30 32 30 30  Database  0x0200
e660: 30 30 30 30 20 20 2f 2a 20 52 65 73 65 74 20 74  0000  /* Reset t
e670: 68 65 20 64 61 74 61 62 61 73 65 20 2a 2f 0a 23  he database */.#
e680: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4c 65  define SQLITE_Le
e690: 67 61 63 79 41 6c 74 65 72 20 20 20 20 30 78 30  gacyAlter    0x0
e6a0: 34 30 30 30 30 30 30 20 20 2f 2a 20 4c 65 67 61  4000000  /* Lega
e6b0: 63 79 20 41 4c 54 45 52 20 54 41 42 4c 45 20 62  cy ALTER TABLE b
e6c0: 65 68 61 76 69 6f 75 72 20 2a 2f 0a 23 64 65 66  ehaviour */.#def
e6d0: 69 6e 65 20 53 51 4c 49 54 45 5f 4e 6f 53 63 68  ine SQLITE_NoSch
e6e0: 65 6d 61 45 72 72 6f 72 20 20 30 78 30 38 30 30  emaError  0x0800
e6f0: 30 30 30 30 20 20 2f 2a 20 44 6f 20 6e 6f 74 20  0000  /* Do not 
e700: 72 65 70 6f 72 74 20 73 63 68 65 6d 61 20 70 61  report schema pa
e710: 72 73 65 20 65 72 72 6f 72 73 2a 2f 0a 23 64 65  rse errors*/.#de
e720: 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 65 66 65  fine SQLITE_Defe
e730: 6e 73 69 76 65 20 20 20 20 20 20 30 78 31 30 30  nsive      0x100
e740: 30 30 30 30 30 20 20 2f 2a 20 49 6e 70 75 74 20  00000  /* Input 
e750: 53 51 4c 20 69 73 20 6c 69 6b 65 6c 79 20 68 6f  SQL is likely ho
e760: 73 74 69 6c 65 20 2a 2f 0a 0a 2f 2a 20 46 6c 61  stile */../* Fla
e770: 67 73 20 75 73 65 64 20 6f 6e 6c 79 20 69 66 20  gs used only if 
e780: 64 65 62 75 67 67 69 6e 67 20 2a 2f 0a 23 64 65  debugging */.#de
e790: 66 69 6e 65 20 48 49 28 58 29 20 20 28 28 75 36  fine HI(X)  ((u6
e7a0: 34 29 28 58 29 3c 3c 33 32 29 0a 23 69 66 64 65  4)(X)<<32).#ifde
e7b0: 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 23  f SQLITE_DEBUG.#
e7c0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 71  define SQLITE_Sq
e7d0: 6c 54 72 61 63 65 20 20 20 20 20 20 20 48 49 28  lTrace       HI(
e7e0: 30 78 30 30 30 31 29 20 20 2f 2a 20 44 65 62 75  0x0001)  /* Debu
e7f0: 67 20 70 72 69 6e 74 20 53 51 4c 20 61 73 20 69  g print SQL as i
e800: 74 20 65 78 65 63 75 74 65 73 20 2a 2f 0a 23 64  t executes */.#d
e810: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 56 64 62  efine SQLITE_Vdb
e820: 65 4c 69 73 74 69 6e 67 20 20 20 20 48 49 28 30  eListing    HI(0
e830: 78 30 30 30 32 29 20 20 2f 2a 20 44 65 62 75 67  x0002)  /* Debug
e840: 20 6c 69 73 74 69 6e 67 73 20 6f 66 20 56 44 42   listings of VDB
e850: 45 20 70 72 6f 67 73 20 2a 2f 0a 23 64 65 66 69  E progs */.#defi
e860: 6e 65 20 53 51 4c 49 54 45 5f 56 64 62 65 54 72  ne SQLITE_VdbeTr
e870: 61 63 65 20 20 20 20 20 20 48 49 28 30 78 30 30  ace      HI(0x00
e880: 30 34 29 20 20 2f 2a 20 54 72 75 65 20 74 6f 20  04)  /* True to 
e890: 74 72 61 63 65 20 56 44 42 45 20 65 78 65 63 75  trace VDBE execu
e8a0: 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  tion */.#define 
e8b0: 53 51 4c 49 54 45 5f 56 64 62 65 41 64 64 6f 70  SQLITE_VdbeAddop
e8c0: 54 72 61 63 65 20 48 49 28 30 78 30 30 30 38 29  Trace HI(0x0008)
e8d0: 20 20 2f 2a 20 54 72 61 63 65 20 73 71 6c 69 74    /* Trace sqlit
e8e0: 65 33 56 64 62 65 41 64 64 4f 70 28 29 20 63 61  e3VdbeAddOp() ca
e8f0: 6c 6c 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  lls */.#define S
e900: 51 4c 49 54 45 5f 56 64 62 65 45 51 50 20 20 20  QLITE_VdbeEQP   
e910: 20 20 20 20 20 48 49 28 30 78 30 30 31 30 29 20       HI(0x0010) 
e920: 20 2f 2a 20 44 65 62 75 67 20 45 58 50 4c 41 49   /* Debug EXPLAI
e930: 4e 20 51 55 45 52 59 20 50 4c 41 4e 20 2a 2f 0a  N QUERY PLAN */.
e940: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50  #define SQLITE_P
e950: 61 72 73 65 72 54 72 61 63 65 20 20 20 20 48 49  arserTrace    HI
e960: 28 30 78 30 30 32 30 29 20 20 2f 2a 20 50 52 41  (0x0020)  /* PRA
e970: 47 4d 41 20 70 61 72 73 65 72 5f 74 72 61 63 65  GMA parser_trace
e980: 3d 4f 4e 20 2a 2f 0a 23 65 6e 64 69 66 0a 0a 2f  =ON */.#endif../
e990: 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c  *.** Allowed val
e9a0: 75 65 73 20 66 6f 72 20 73 71 6c 69 74 65 33 2e  ues for sqlite3.
e9b0: 6d 44 62 46 6c 61 67 73 0a 2a 2f 0a 23 64 65 66  mDbFlags.*/.#def
e9c0: 69 6e 65 20 44 42 46 4c 41 47 5f 53 63 68 65 6d  ine DBFLAG_Schem
e9d0: 61 43 68 61 6e 67 65 20 20 20 30 78 30 30 30 31  aChange   0x0001
e9e0: 20 20 2f 2a 20 55 6e 63 6f 6d 6d 69 74 74 65 64    /* Uncommitted
e9f0: 20 48 61 73 68 20 74 61 62 6c 65 20 63 68 61 6e   Hash table chan
ea00: 67 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 44  ges */.#define D
ea10: 42 46 4c 41 47 5f 50 72 65 66 65 72 42 75 69 6c  BFLAG_PreferBuil
ea20: 74 69 6e 20 20 30 78 30 30 30 32 20 20 2f 2a 20  tin  0x0002  /* 
ea30: 50 72 65 66 65 72 65 6e 63 65 20 74 6f 20 62 75  Preference to bu
ea40: 69 6c 74 2d 69 6e 20 66 75 6e 63 73 20 2a 2f 0a  ilt-in funcs */.
ea50: 23 64 65 66 69 6e 65 20 44 42 46 4c 41 47 5f 56  #define DBFLAG_V
ea60: 61 63 75 75 6d 20 20 20 20 20 20 20 20 20 30 78  acuum         0x
ea70: 30 30 30 34 20 20 2f 2a 20 43 75 72 72 65 6e 74  0004  /* Current
ea80: 6c 79 20 69 6e 20 61 20 56 41 43 55 55 4d 20 2a  ly in a VACUUM *
ea90: 2f 0a 23 64 65 66 69 6e 65 20 44 42 46 4c 41 47  /.#define DBFLAG
eaa0: 5f 53 63 68 65 6d 61 4b 6e 6f 77 6e 4f 6b 20 20  _SchemaKnownOk  
eab0: 30 78 30 30 30 38 20 20 2f 2a 20 53 63 68 65 6d  0x0008  /* Schem
eac0: 61 20 69 73 20 6b 6e 6f 77 6e 20 74 6f 20 62 65  a is known to be
ead0: 20 76 61 6c 69 64 20 2a 2f 0a 0a 2f 2a 0a 2a 2a   valid */../*.**
eae0: 20 42 69 74 73 20 6f 66 20 74 68 65 20 73 71 6c   Bits of the sql
eaf0: 69 74 65 33 2e 64 62 4f 70 74 46 6c 61 67 73 20  ite3.dbOptFlags 
eb00: 66 69 65 6c 64 20 74 68 61 74 20 61 72 65 20 75  field that are u
eb10: 73 65 64 20 62 79 20 74 68 65 0a 2a 2a 20 73 71  sed by the.** sq
eb20: 6c 69 74 65 33 5f 74 65 73 74 5f 63 6f 6e 74 72  lite3_test_contr
eb30: 6f 6c 28 53 51 4c 49 54 45 5f 54 45 53 54 43 54  ol(SQLITE_TESTCT
eb40: 52 4c 5f 4f 50 54 49 4d 49 5a 41 54 49 4f 4e 53  RL_OPTIMIZATIONS
eb50: 2c 2e 2e 2e 29 20 69 6e 74 65 72 66 61 63 65 20  ,...) interface 
eb60: 74 6f 0a 2a 2a 20 73 65 6c 65 63 74 69 76 65 6c  to.** selectivel
eb70: 79 20 64 69 73 61 62 6c 65 20 76 61 72 69 6f 75  y disable variou
eb80: 73 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73 2e  s optimizations.
eb90: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  .*/.#define SQLI
eba0: 54 45 5f 51 75 65 72 79 46 6c 61 74 74 65 6e 65  TE_QueryFlattene
ebb0: 72 20 30 78 30 30 30 31 20 20 20 2f 2a 20 51 75  r 0x0001   /* Qu
ebc0: 65 72 79 20 66 6c 61 74 74 65 6e 69 6e 67 20 2a  ery flattening *
ebd0: 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  /.              
ebe0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 20              /*  
ebf0: 30 78 30 30 30 32 20 20 20 61 76 61 69 6c 61 62  0x0002   availab
ec00: 6c 65 20 66 6f 72 20 72 65 75 73 65 20 2a 2f 0a  le for reuse */.
ec10: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 47  #define SQLITE_G
ec20: 72 6f 75 70 42 79 4f 72 64 65 72 20 20 20 30 78  roupByOrder   0x
ec30: 30 30 30 34 20 20 20 2f 2a 20 47 52 4f 55 50 42  0004   /* GROUPB
ec40: 59 20 63 6f 76 65 72 20 6f 66 20 4f 52 44 45 52  Y cover of ORDER
ec50: 42 59 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  BY */.#define SQ
ec60: 4c 49 54 45 5f 46 61 63 74 6f 72 4f 75 74 43 6f  LITE_FactorOutCo
ec70: 6e 73 74 20 30 78 30 30 30 38 20 20 20 2f 2a 20  nst 0x0008   /* 
ec80: 43 6f 6e 73 74 61 6e 74 20 66 61 63 74 6f 72 69  Constant factori
ec90: 6e 67 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  ng */.#define SQ
eca0: 4c 49 54 45 5f 44 69 73 74 69 6e 63 74 4f 70 74  LITE_DistinctOpt
ecb0: 20 20 20 20 30 78 30 30 31 30 20 20 20 2f 2a 20      0x0010   /* 
ecc0: 44 49 53 54 49 4e 43 54 20 75 73 69 6e 67 20 69  DISTINCT using i
ecd0: 6e 64 65 78 65 73 20 2a 2f 0a 23 64 65 66 69 6e  ndexes */.#defin
ece0: 65 20 53 51 4c 49 54 45 5f 43 6f 76 65 72 49 64  e SQLITE_CoverId
ecf0: 78 53 63 61 6e 20 20 20 30 78 30 30 32 30 20 20  xScan   0x0020  
ed00: 20 2f 2a 20 43 6f 76 65 72 69 6e 67 20 69 6e 64   /* Covering ind
ed10: 65 78 20 73 63 61 6e 73 20 2a 2f 0a 23 64 65 66  ex scans */.#def
ed20: 69 6e 65 20 53 51 4c 49 54 45 5f 4f 72 64 65 72  ine SQLITE_Order
ed30: 42 79 49 64 78 4a 6f 69 6e 20 30 78 30 30 34 30  ByIdxJoin 0x0040
ed40: 20 20 20 2f 2a 20 4f 52 44 45 52 20 42 59 20 6f     /* ORDER BY o
ed50: 66 20 6a 6f 69 6e 73 20 76 69 61 20 69 6e 64 65  f joins via inde
ed60: 78 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  x */.#define SQL
ed70: 49 54 45 5f 54 72 61 6e 73 69 74 69 76 65 20 20  ITE_Transitive  
ed80: 20 20 20 30 78 30 30 38 30 20 20 20 2f 2a 20 54     0x0080   /* T
ed90: 72 61 6e 73 69 74 69 76 65 20 63 6f 6e 73 74 72  ransitive constr
eda0: 61 69 6e 74 73 20 2a 2f 0a 23 64 65 66 69 6e 65  aints */.#define
edb0: 20 53 51 4c 49 54 45 5f 4f 6d 69 74 4e 6f 6f 70   SQLITE_OmitNoop
edc0: 4a 6f 69 6e 20 20 20 30 78 30 31 30 30 20 20 20  Join   0x0100   
edd0: 2f 2a 20 4f 6d 69 74 20 75 6e 75 73 65 64 20 74  /* Omit unused t
ede0: 61 62 6c 65 73 20 69 6e 20 6a 6f 69 6e 73 20 2a  ables in joins *
edf0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
ee00: 5f 43 6f 75 6e 74 4f 66 56 69 65 77 20 20 20 20  _CountOfView    
ee10: 30 78 30 32 30 30 20 20 20 2f 2a 20 54 68 65 20  0x0200   /* The 
ee20: 63 6f 75 6e 74 2d 6f 66 2d 76 69 65 77 20 6f 70  count-of-view op
ee30: 74 69 6d 69 7a 61 74 69 6f 6e 20 2a 2f 0a 23 64  timization */.#d
ee40: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 75 72  efine SQLITE_Cur
ee50: 73 6f 72 48 69 6e 74 73 20 20 20 20 30 78 30 34  sorHints    0x04
ee60: 30 30 20 20 20 2f 2a 20 41 64 64 20 4f 50 5f 43  00   /* Add OP_C
ee70: 75 72 73 6f 72 48 69 6e 74 20 6f 70 63 6f 64 65  ursorHint opcode
ee80: 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  s */.#define SQL
ee90: 49 54 45 5f 53 74 61 74 33 34 20 20 20 20 20 20  ITE_Stat34      
eea0: 20 20 20 30 78 30 38 30 30 20 20 20 2f 2a 20 55     0x0800   /* U
eeb0: 73 65 20 53 54 41 54 33 20 6f 72 20 53 54 41 54  se STAT3 or STAT
eec0: 34 20 64 61 74 61 20 2a 2f 0a 20 20 20 2f 2a 20  4 data */.   /* 
eed0: 54 48 33 20 65 78 70 65 63 74 73 20 74 68 65 20  TH3 expects the 
eee0: 53 74 61 74 33 34 20 20 5e 5e 5e 5e 5e 5e 20 76  Stat34  ^^^^^^ v
eef0: 61 6c 75 65 20 74 6f 20 62 65 20 30 78 30 38 30  alue to be 0x080
ef00: 30 2e 20 20 44 6f 6e 27 74 20 63 68 61 6e 67 65  0.  Don't change
ef10: 20 69 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53   it */.#define S
ef20: 51 4c 49 54 45 5f 50 75 73 68 44 6f 77 6e 20 20  QLITE_PushDown  
ef30: 20 20 20 20 20 30 78 31 30 30 30 20 20 20 2f 2a       0x1000   /*
ef40: 20 54 68 65 20 70 75 73 68 2d 64 6f 77 6e 20 6f   The push-down o
ef50: 70 74 69 6d 69 7a 61 74 69 6f 6e 20 2a 2f 0a 23  ptimization */.#
ef60: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 69  define SQLITE_Si
ef70: 6d 70 6c 69 66 79 4a 6f 69 6e 20 20 20 30 78 32  mplifyJoin   0x2
ef80: 30 30 30 20 20 20 2f 2a 20 43 6f 6e 76 65 72 74  000   /* Convert
ef90: 20 4c 45 46 54 20 4a 4f 49 4e 20 74 6f 20 4a 4f   LEFT JOIN to JO
efa0: 49 4e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  IN */.#define SQ
efb0: 4c 49 54 45 5f 53 6b 69 70 53 63 61 6e 20 20 20  LITE_SkipScan   
efc0: 20 20 20 20 30 78 34 30 30 30 20 20 20 2f 2a 20      0x4000   /* 
efd0: 53 6b 69 70 2d 73 63 61 6e 73 20 2a 2f 0a 23 64  Skip-scans */.#d
efe0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 72 6f  efine SQLITE_Pro
eff0: 70 61 67 61 74 65 43 6f 6e 73 74 20 30 78 38 30  pagateConst 0x80
f000: 30 30 20 20 20 2f 2a 20 54 68 65 20 63 6f 6e 73  00   /* The cons
f010: 74 61 6e 74 20 70 72 6f 70 61 67 61 74 69 6f 6e  tant propagation
f020: 20 6f 70 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20   opt */.#define 
f030: 53 51 4c 49 54 45 5f 41 6c 6c 4f 70 74 73 20 20  SQLITE_AllOpts  
f040: 20 20 20 20 20 20 30 78 66 66 66 66 20 20 20 2f        0xffff   /
f050: 2a 20 41 6c 6c 20 6f 70 74 69 6d 69 7a 61 74 69  * All optimizati
f060: 6f 6e 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 4d 61  ons */../*.** Ma
f070: 63 72 6f 73 20 66 6f 72 20 74 65 73 74 69 6e 67  cros for testing
f080: 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20   whether or not 
f090: 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73 20 61 72  optimizations ar
f0a0: 65 20 65 6e 61 62 6c 65 64 20 6f 72 20 64 69 73  e enabled or dis
f0b0: 61 62 6c 65 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e  abled..*/.#defin
f0c0: 65 20 4f 70 74 69 6d 69 7a 61 74 69 6f 6e 44 69  e OptimizationDi
f0d0: 73 61 62 6c 65 64 28 64 62 2c 20 6d 61 73 6b 29  sabled(db, mask)
f0e0: 20 20 28 28 28 64 62 29 2d 3e 64 62 4f 70 74 46    (((db)->dbOptF
f0f0: 6c 61 67 73 26 28 6d 61 73 6b 29 29 21 3d 30 29  lags&(mask))!=0)
f100: 0a 23 64 65 66 69 6e 65 20 4f 70 74 69 6d 69 7a  .#define Optimiz
f110: 61 74 69 6f 6e 45 6e 61 62 6c 65 64 28 64 62 2c  ationEnabled(db,
f120: 20 6d 61 73 6b 29 20 20 20 28 28 28 64 62 29 2d   mask)   (((db)-
f130: 3e 64 62 4f 70 74 46 6c 61 67 73 26 28 6d 61 73  >dbOptFlags&(mas
f140: 6b 29 29 3d 3d 30 29 0a 0a 2f 2a 0a 2a 2a 20 52  k))==0)../*.** R
f150: 65 74 75 72 6e 20 74 72 75 65 20 69 66 20 69 74  eturn true if it
f160: 20 4f 4b 20 74 6f 20 66 61 63 74 6f 72 20 63 6f   OK to factor co
f170: 6e 73 74 61 6e 74 20 65 78 70 72 65 73 73 69 6f  nstant expressio
f180: 6e 73 20 69 6e 74 6f 20 74 68 65 20 69 6e 69 74  ns into the init
f190: 69 61 6c 69 7a 61 74 69 6f 6e 0a 2a 2a 20 63 6f  ialization.** co
f1a0: 64 65 2e 20 54 68 65 20 61 72 67 75 6d 65 6e 74  de. The argument
f1b0: 20 69 73 20 61 20 50 61 72 73 65 20 6f 62 6a 65   is a Parse obje
f1c0: 63 74 20 66 6f 72 20 74 68 65 20 63 6f 64 65 20  ct for the code 
f1d0: 67 65 6e 65 72 61 74 6f 72 2e 0a 2a 2f 0a 23 64  generator..*/.#d
f1e0: 65 66 69 6e 65 20 43 6f 6e 73 74 46 61 63 74 6f  efine ConstFacto
f1f0: 72 4f 6b 28 50 29 20 28 28 50 29 2d 3e 6f 6b 43  rOk(P) ((P)->okC
f200: 6f 6e 73 74 46 61 63 74 6f 72 29 0a 0a 2f 2a 0a  onstFactor)../*.
f210: 2a 2a 20 50 6f 73 73 69 62 6c 65 20 76 61 6c 75  ** Possible valu
f220: 65 73 20 66 6f 72 20 74 68 65 20 73 71 6c 69 74  es for the sqlit
f230: 65 2e 6d 61 67 69 63 20 66 69 65 6c 64 2e 0a 2a  e.magic field..*
f240: 2a 20 54 68 65 20 6e 75 6d 62 65 72 73 20 61 72  * The numbers ar
f250: 65 20 6f 62 74 61 69 6e 65 64 20 61 74 20 72 61  e obtained at ra
f260: 6e 64 6f 6d 20 61 6e 64 20 68 61 76 65 20 6e 6f  ndom and have no
f270: 20 73 70 65 63 69 61 6c 20 6d 65 61 6e 69 6e 67   special meaning
f280: 2c 20 6f 74 68 65 72 0a 2a 2a 20 74 68 61 6e 20  , other.** than 
f290: 62 65 69 6e 67 20 64 69 73 74 69 6e 63 74 20 66  being distinct f
f2a0: 72 6f 6d 20 6f 6e 65 20 61 6e 6f 74 68 65 72 2e  rom one another.
f2b0: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  .*/.#define SQLI
f2c0: 54 45 5f 4d 41 47 49 43 5f 4f 50 45 4e 20 20 20  TE_MAGIC_OPEN   
f2d0: 20 20 30 78 61 30 32 39 61 36 39 37 20 20 2f 2a    0xa029a697  /*
f2e0: 20 44 61 74 61 62 61 73 65 20 69 73 20 6f 70 65   Database is ope
f2f0: 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  n */.#define SQL
f300: 49 54 45 5f 4d 41 47 49 43 5f 43 4c 4f 53 45 44  ITE_MAGIC_CLOSED
f310: 20 20 20 30 78 39 66 33 63 32 64 33 33 20 20 2f     0x9f3c2d33  /
f320: 2a 20 44 61 74 61 62 61 73 65 20 69 73 20 63 6c  * Database is cl
f330: 6f 73 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20  osed */.#define 
f340: 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 53 49 43  SQLITE_MAGIC_SIC
f350: 4b 20 20 20 20 20 30 78 34 62 37 37 31 32 39 30  K     0x4b771290
f360: 20 20 2f 2a 20 45 72 72 6f 72 20 61 6e 64 20 61    /* Error and a
f370: 77 61 69 74 69 6e 67 20 63 6c 6f 73 65 20 2a 2f  waiting close */
f380: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
f390: 4d 41 47 49 43 5f 42 55 53 59 20 20 20 20 20 30  MAGIC_BUSY     0
f3a0: 78 66 30 33 62 37 39 30 36 20 20 2f 2a 20 44 61  xf03b7906  /* Da
f3b0: 74 61 62 61 73 65 20 63 75 72 72 65 6e 74 6c 79  tabase currently
f3c0: 20 69 6e 20 75 73 65 20 2a 2f 0a 23 64 65 66 69   in use */.#defi
f3d0: 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f  ne SQLITE_MAGIC_
f3e0: 45 52 52 4f 52 20 20 20 20 30 78 62 35 33 35 37  ERROR    0xb5357
f3f0: 39 33 30 20 20 2f 2a 20 41 6e 20 53 51 4c 49 54  930  /* An SQLIT
f400: 45 5f 4d 49 53 55 53 45 20 65 72 72 6f 72 20 6f  E_MISUSE error o
f410: 63 63 75 72 72 65 64 20 2a 2f 0a 23 64 65 66 69  ccurred */.#defi
f420: 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f  ne SQLITE_MAGIC_
f430: 5a 4f 4d 42 49 45 20 20 20 30 78 36 34 63 66 66  ZOMBIE   0x64cff
f440: 63 37 66 20 20 2f 2a 20 43 6c 6f 73 65 20 77 69  c7f  /* Close wi
f450: 74 68 20 6c 61 73 74 20 73 74 61 74 65 6d 65 6e  th last statemen
f460: 74 20 63 6c 6f 73 65 20 2a 2f 0a 0a 2f 2a 0a 2a  t close */../*.*
f470: 2a 20 45 61 63 68 20 53 51 4c 20 66 75 6e 63 74  * Each SQL funct
f480: 69 6f 6e 20 69 73 20 64 65 66 69 6e 65 64 20 62  ion is defined b
f490: 79 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  y an instance of
f4a0: 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 0a 2a   the following.*
f4b0: 2a 20 73 74 72 75 63 74 75 72 65 2e 20 20 46 6f  * structure.  Fo
f4c0: 72 20 67 6c 6f 62 61 6c 20 62 75 69 6c 74 2d 69  r global built-i
f4d0: 6e 20 66 75 6e 63 74 69 6f 6e 73 20 28 65 78 3a  n functions (ex:
f4e0: 20 73 75 62 73 74 72 28 29 2c 20 6d 61 78 28 29   substr(), max()
f4f0: 2c 20 63 6f 75 6e 74 28 29 29 0a 2a 2a 20 61 20  , count()).** a 
f500: 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 69 73 20  pointer to this 
f510: 73 74 72 75 63 74 75 72 65 20 69 73 20 68 65 6c  structure is hel
f520: 64 20 69 6e 20 74 68 65 20 73 71 6c 69 74 65 33  d in the sqlite3
f530: 42 75 69 6c 74 69 6e 46 75 6e 63 74 69 6f 6e 73  BuiltinFunctions
f540: 20 6f 62 6a 65 63 74 2e 0a 2a 2a 20 46 6f 72 20   object..** For 
f550: 70 65 72 2d 63 6f 6e 6e 65 63 74 69 6f 6e 20 61  per-connection a
f560: 70 70 6c 69 63 61 74 69 6f 6e 2d 64 65 66 69 6e  pplication-defin
f570: 65 64 20 66 75 6e 63 74 69 6f 6e 73 2c 20 61 20  ed functions, a 
f580: 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 69 73 0a  pointer to this.
f590: 2a 2a 20 73 74 72 75 63 74 75 72 65 20 69 73 20  ** structure is 
f5a0: 68 65 6c 64 20 69 6e 20 74 68 65 20 64 62 2d 3e  held in the db->
f5b0: 61 48 61 73 68 20 68 61 73 68 20 74 61 62 6c 65  aHash hash table
f5c0: 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 75 2e 70 48  ..**.** The u.pH
f5d0: 61 73 68 20 66 69 65 6c 64 20 69 73 20 75 73 65  ash field is use
f5e0: 64 20 62 79 20 74 68 65 20 67 6c 6f 62 61 6c 20  d by the global 
f5f0: 62 75 69 6c 74 2d 69 6e 73 2e 20 20 54 68 65 20  built-ins.  The 
f600: 75 2e 70 44 65 73 74 72 75 63 74 6f 72 0a 2a 2a  u.pDestructor.**
f610: 20 66 69 65 6c 64 20 69 73 20 75 73 65 64 20 62   field is used b
f620: 79 20 70 65 72 2d 63 6f 6e 6e 65 63 74 69 6f 6e  y per-connection
f630: 20 61 70 70 2d 64 65 66 20 66 75 6e 63 74 69 6f   app-def functio
f640: 6e 73 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 46 75  ns..*/.struct Fu
f650: 6e 63 44 65 66 20 7b 0a 20 20 69 38 20 6e 41 72  ncDef {.  i8 nAr
f660: 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  g;             /
f670: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 72 67 75  * Number of argu
f680: 6d 65 6e 74 73 2e 20 20 2d 31 20 6d 65 61 6e 73  ments.  -1 means
f690: 20 75 6e 6c 69 6d 69 74 65 64 20 2a 2f 0a 20 20   unlimited */.  
f6a0: 75 33 32 20 66 75 6e 63 46 6c 61 67 73 3b 20 20  u32 funcFlags;  
f6b0: 20 20 20 20 20 2f 2a 20 53 6f 6d 65 20 63 6f 6d       /* Some com
f6c0: 62 69 6e 61 74 69 6f 6e 20 6f 66 20 53 51 4c 49  bination of SQLI
f6d0: 54 45 5f 46 55 4e 43 5f 2a 20 2a 2f 0a 20 20 76  TE_FUNC_* */.  v
f6e0: 6f 69 64 20 2a 70 55 73 65 72 44 61 74 61 3b 20  oid *pUserData; 
f6f0: 20 20 20 20 2f 2a 20 55 73 65 72 20 64 61 74 61      /* User data
f700: 20 70 61 72 61 6d 65 74 65 72 20 2a 2f 0a 20 20   parameter */.  
f710: 46 75 6e 63 44 65 66 20 2a 70 4e 65 78 74 3b 20  FuncDef *pNext; 
f720: 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 66 75 6e       /* Next fun
f730: 63 74 69 6f 6e 20 77 69 74 68 20 73 61 6d 65 20  ction with same 
f740: 6e 61 6d 65 20 2a 2f 0a 20 20 76 6f 69 64 20 28  name */.  void (
f750: 2a 78 53 46 75 6e 63 29 28 73 71 6c 69 74 65 33  *xSFunc)(sqlite3
f760: 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71  _context*,int,sq
f770: 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2a 29 3b 20  lite3_value**); 
f780: 2f 2a 20 66 75 6e 63 20 6f 72 20 61 67 67 2d 73  /* func or agg-s
f790: 74 65 70 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a  tep */.  void (*
f7a0: 78 46 69 6e 61 6c 69 7a 65 29 28 73 71 6c 69 74  xFinalize)(sqlit
f7b0: 65 33 5f 63 6f 6e 74 65 78 74 2a 29 3b 20 20 20  e3_context*);   
f7c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
f7d0: 2a 20 41 67 67 20 66 69 6e 61 6c 69 7a 65 72 20  * Agg finalizer 
f7e0: 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 56 61 6c  */.  void (*xVal
f7f0: 75 65 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74  ue)(sqlite3_cont
f800: 65 78 74 2a 29 3b 20 20 20 20 20 20 20 20 20 20  ext*);          
f810: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 75             /* Cu
f820: 72 72 65 6e 74 20 61 67 67 20 76 61 6c 75 65 20  rrent agg value 
f830: 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 49 6e 76  */.  void (*xInv
f840: 65 72 73 65 29 28 73 71 6c 69 74 65 33 5f 63 6f  erse)(sqlite3_co
f850: 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74  ntext*,int,sqlit
f860: 65 33 5f 76 61 6c 75 65 2a 2a 29 3b 20 2f 2a 20  e3_value**); /* 
f870: 69 6e 76 65 72 73 65 20 61 67 67 2d 73 74 65 70  inverse agg-step
f880: 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72   */.  const char
f890: 20 2a 7a 4e 61 6d 65 3b 20 20 20 2f 2a 20 53 51   *zName;   /* SQ
f8a0: 4c 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 66 75  L name of the fu
f8b0: 6e 63 74 69 6f 6e 2e 20 2a 2f 0a 20 20 75 6e 69  nction. */.  uni
f8c0: 6f 6e 20 7b 0a 20 20 20 20 46 75 6e 63 44 65 66  on {.    FuncDef
f8d0: 20 2a 70 48 61 73 68 3b 20 20 20 20 20 20 2f 2a   *pHash;      /*
f8e0: 20 4e 65 78 74 20 77 69 74 68 20 61 20 64 69 66   Next with a dif
f8f0: 66 65 72 65 6e 74 20 6e 61 6d 65 20 62 75 74 20  ferent name but 
f900: 74 68 65 20 73 61 6d 65 20 68 61 73 68 20 2a 2f  the same hash */
f910: 0a 20 20 20 20 46 75 6e 63 44 65 73 74 72 75 63  .    FuncDestruc
f920: 74 6f 72 20 2a 70 44 65 73 74 72 75 63 74 6f 72  tor *pDestructor
f930: 3b 20 20 20 2f 2a 20 52 65 66 65 72 65 6e 63 65  ;   /* Reference
f940: 20 63 6f 75 6e 74 65 64 20 64 65 73 74 72 75 63   counted destruc
f950: 74 6f 72 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a  tor function */.
f960: 20 20 7d 20 75 3b 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a    } u;.};../*.**
f970: 20 54 68 69 73 20 73 74 72 75 63 74 75 72 65 20   This structure 
f980: 65 6e 63 61 70 73 75 6c 61 74 65 73 20 61 20 75  encapsulates a u
f990: 73 65 72 2d 66 75 6e 63 74 69 6f 6e 20 64 65 73  ser-function des
f9a0: 74 72 75 63 74 6f 72 20 63 61 6c 6c 62 61 63 6b  tructor callback
f9b0: 20 28 61 73 0a 2a 2a 20 63 6f 6e 66 69 67 75 72   (as.** configur
f9c0: 65 64 20 75 73 69 6e 67 20 63 72 65 61 74 65 5f  ed using create_
f9d0: 66 75 6e 63 74 69 6f 6e 5f 76 32 28 29 29 20 61  function_v2()) a
f9e0: 6e 64 20 61 20 72 65 66 65 72 65 6e 63 65 20 63  nd a reference c
f9f0: 6f 75 6e 74 65 72 2e 20 57 68 65 6e 0a 2a 2a 20  ounter. When.** 
fa00: 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 5f  create_function_
fa10: 76 32 28 29 20 69 73 20 63 61 6c 6c 65 64 20 74  v2() is called t
fa20: 6f 20 63 72 65 61 74 65 20 61 20 66 75 6e 63 74  o create a funct
fa30: 69 6f 6e 20 77 69 74 68 20 61 20 64 65 73 74 72  ion with a destr
fa40: 75 63 74 6f 72 2c 0a 2a 2a 20 61 20 73 69 6e 67  uctor,.** a sing
fa50: 6c 65 20 6f 62 6a 65 63 74 20 6f 66 20 74 68 69  le object of thi
fa60: 73 20 74 79 70 65 20 69 73 20 61 6c 6c 6f 63 61  s type is alloca
fa70: 74 65 64 2e 20 46 75 6e 63 44 65 73 74 72 75 63  ted. FuncDestruc
fa80: 74 6f 72 2e 6e 52 65 66 20 69 73 20 73 65 74 20  tor.nRef is set 
fa90: 74 6f 0a 2a 2a 20 74 68 65 20 6e 75 6d 62 65 72  to.** the number
faa0: 20 6f 66 20 46 75 6e 63 44 65 66 20 6f 62 6a 65   of FuncDef obje
fab0: 63 74 73 20 63 72 65 61 74 65 64 20 28 65 69 74  cts created (eit
fac0: 68 65 72 20 31 20 6f 72 20 33 2c 20 64 65 70 65  her 1 or 3, depe
fad0: 6e 64 69 6e 67 20 6f 6e 20 77 68 65 74 68 65 72  nding on whether
fae0: 0a 2a 2a 20 6f 72 20 6e 6f 74 20 74 68 65 20 73  .** or not the s
faf0: 70 65 63 69 66 69 65 64 20 65 6e 63 6f 64 69 6e  pecified encodin
fb00: 67 20 69 73 20 53 51 4c 49 54 45 5f 41 4e 59 29  g is SQLITE_ANY)
fb10: 2e 20 54 68 65 20 46 75 6e 63 44 65 66 2e 70 44  . The FuncDef.pD
fb20: 65 73 74 72 75 63 74 6f 72 0a 2a 2a 20 6d 65 6d  estructor.** mem
fb30: 62 65 72 20 6f 66 20 65 61 63 68 20 6f 66 20 74  ber of each of t
fb40: 68 65 20 6e 65 77 20 46 75 6e 63 44 65 66 20 6f  he new FuncDef o
fb50: 62 6a 65 63 74 73 20 69 73 20 73 65 74 20 74 6f  bjects is set to
fb60: 20 70 6f 69 6e 74 20 74 6f 20 74 68 65 20 61 6c   point to the al
fb70: 6c 6f 63 61 74 65 64 0a 2a 2a 20 46 75 6e 63 44  located.** FuncD
fb80: 65 73 74 72 75 63 74 6f 72 2e 0a 2a 2a 0a 2a 2a  estructor..**.**
fb90: 20 54 68 65 72 65 61 66 74 65 72 2c 20 77 68 65   Thereafter, whe
fba0: 6e 20 6f 6e 65 20 6f 66 20 74 68 65 20 46 75 6e  n one of the Fun
fbb0: 63 44 65 66 20 6f 62 6a 65 63 74 73 20 69 73 20  cDef objects is 
fbc0: 64 65 6c 65 74 65 64 2c 20 74 68 65 20 72 65 66  deleted, the ref
fbd0: 65 72 65 6e 63 65 0a 2a 2a 20 63 6f 75 6e 74 20  erence.** count 
fbe0: 6f 6e 20 74 68 69 73 20 6f 62 6a 65 63 74 20 69  on this object i
fbf0: 73 20 64 65 63 72 65 6d 65 6e 74 65 64 2e 20 57  s decremented. W
fc00: 68 65 6e 20 69 74 20 72 65 61 63 68 65 73 20 30  hen it reaches 0
fc10: 2c 20 74 68 65 20 64 65 73 74 72 75 63 74 6f 72  , the destructor
fc20: 0a 2a 2a 20 69 73 20 69 6e 76 6f 6b 65 64 20 61  .** is invoked a
fc30: 6e 64 20 74 68 65 20 46 75 6e 63 44 65 73 74 72  nd the FuncDestr
fc40: 75 63 74 6f 72 20 73 74 72 75 63 74 75 72 65 20  uctor structure 
fc50: 66 72 65 65 64 2e 0a 2a 2f 0a 73 74 72 75 63 74  freed..*/.struct
fc60: 20 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72 20   FuncDestructor 
fc70: 7b 0a 20 20 69 6e 74 20 6e 52 65 66 3b 0a 20 20  {.  int nRef;.  
fc80: 76 6f 69 64 20 28 2a 78 44 65 73 74 72 6f 79 29  void (*xDestroy)
fc90: 28 76 6f 69 64 20 2a 29 3b 0a 20 20 76 6f 69 64  (void *);.  void
fca0: 20 2a 70 55 73 65 72 44 61 74 61 3b 0a 7d 3b 0a   *pUserData;.};.
fcb0: 0a 2f 2a 0a 2a 2a 20 50 6f 73 73 69 62 6c 65 20  ./*.** Possible 
fcc0: 76 61 6c 75 65 73 20 66 6f 72 20 46 75 6e 63 44  values for FuncD
fcd0: 65 66 2e 66 6c 61 67 73 2e 20 20 4e 6f 74 65 20  ef.flags.  Note 
fce0: 74 68 61 74 20 74 68 65 20 5f 4c 45 4e 47 54 48  that the _LENGTH
fcf0: 20 61 6e 64 20 5f 54 59 50 45 4f 46 0a 2a 2a 20   and _TYPEOF.** 
fd00: 76 61 6c 75 65 73 20 6d 75 73 74 20 63 6f 72 72  values must corr
fd10: 65 73 70 6f 6e 64 20 74 6f 20 4f 50 46 4c 41 47  espond to OPFLAG
fd20: 5f 4c 45 4e 47 54 48 41 52 47 20 61 6e 64 20 4f  _LENGTHARG and O
fd30: 50 46 4c 41 47 5f 54 59 50 45 4f 46 41 52 47 2e  PFLAG_TYPEOFARG.
fd40: 20 20 41 6e 64 0a 2a 2a 20 53 51 4c 49 54 45 5f    And.** SQLITE_
fd50: 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 20 6d 75  FUNC_CONSTANT mu
fd60: 73 74 20 62 65 20 74 68 65 20 73 61 6d 65 20 61  st be the same a
fd70: 73 20 53 51 4c 49 54 45 5f 44 45 54 45 52 4d 49  s SQLITE_DETERMI
fd80: 4e 49 53 54 49 43 2e 20 20 54 68 65 72 65 0a 2a  NISTIC.  There.*
fd90: 2a 20 61 72 65 20 61 73 73 65 72 74 28 29 20 73  * are assert() s
fda0: 74 61 74 65 6d 65 6e 74 73 20 69 6e 20 74 68 65  tatements in the
fdb0: 20 63 6f 64 65 20 74 6f 20 76 65 72 69 66 79 20   code to verify 
fdc0: 74 68 69 73 2e 0a 2a 2a 0a 2a 2a 20 56 61 6c 75  this..**.** Valu
fdd0: 65 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 28 65  e constraints (e
fde0: 6e 66 6f 72 63 65 64 20 76 69 61 20 61 73 73 65  nforced via asse
fdf0: 72 74 28 29 29 3a 0a 2a 2a 20 20 20 20 20 53 51  rt()):.**     SQ
fe00: 4c 49 54 45 5f 46 55 4e 43 5f 4d 49 4e 4d 41 58  LITE_FUNC_MINMAX
fe10: 20 20 20 20 3d 3d 20 20 4e 43 5f 4d 69 6e 4d 61      ==  NC_MinMa
fe20: 78 41 67 67 20 20 20 20 20 20 3d 3d 20 53 46 5f  xAgg      == SF_
fe30: 4d 69 6e 4d 61 78 41 67 67 0a 2a 2a 20 20 20 20  MinMaxAgg.**    
fe40: 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4c 45 4e   SQLITE_FUNC_LEN
fe50: 47 54 48 20 20 20 20 3d 3d 20 20 4f 50 46 4c 41  GTH    ==  OPFLA
fe60: 47 5f 4c 45 4e 47 54 48 41 52 47 0a 2a 2a 20 20  G_LENGTHARG.**  
fe70: 20 20 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 54     SQLITE_FUNC_T
fe80: 59 50 45 4f 46 20 20 20 20 3d 3d 20 20 4f 50 46  YPEOF    ==  OPF
fe90: 4c 41 47 5f 54 59 50 45 4f 46 41 52 47 0a 2a 2a  LAG_TYPEOFARG.**
fea0: 20 20 20 20 20 53 51 4c 49 54 45 5f 46 55 4e 43       SQLITE_FUNC
feb0: 5f 43 4f 4e 53 54 41 4e 54 20 20 3d 3d 20 20 53  _CONSTANT  ==  S
fec0: 51 4c 49 54 45 5f 44 45 54 45 52 4d 49 4e 49 53  QLITE_DETERMINIS
fed0: 54 49 43 20 66 72 6f 6d 20 74 68 65 20 41 50 49  TIC from the API
fee0: 0a 2a 2a 20 20 20 20 20 53 51 4c 49 54 45 5f 46  .**     SQLITE_F
fef0: 55 4e 43 5f 45 4e 43 4d 41 53 4b 20 20 20 64 65  UNC_ENCMASK   de
ff00: 70 65 6e 64 73 20 6f 6e 20 53 51 4c 49 54 45 5f  pends on SQLITE_
ff10: 55 54 46 2a 20 6d 61 63 72 6f 73 20 69 6e 20 74  UTF* macros in t
ff20: 68 65 20 41 50 49 0a 2a 2f 0a 23 64 65 66 69 6e  he API.*/.#defin
ff30: 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 45 4e  e SQLITE_FUNC_EN
ff40: 43 4d 41 53 4b 20 20 30 78 30 30 30 33 20 2f 2a  CMASK  0x0003 /*
ff50: 20 53 51 4c 49 54 45 5f 55 54 46 38 2c 20 53 51   SQLITE_UTF8, SQ
ff60: 4c 49 54 45 5f 55 54 46 31 36 42 45 20 6f 72 20  LITE_UTF16BE or 
ff70: 55 54 46 31 36 4c 45 20 2a 2f 0a 23 64 65 66 69  UTF16LE */.#defi
ff80: 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4c  ne SQLITE_FUNC_L
ff90: 49 4b 45 20 20 20 20 20 30 78 30 30 30 34 20 2f  IKE     0x0004 /
ffa0: 2a 20 43 61 6e 64 69 64 61 74 65 20 66 6f 72 20  * Candidate for 
ffb0: 74 68 65 20 4c 49 4b 45 20 6f 70 74 69 6d 69 7a  the LIKE optimiz
ffc0: 61 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65  ation */.#define
ffd0: 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 41 53   SQLITE_FUNC_CAS
ffe0: 45 20 20 20 20 20 30 78 30 30 30 38 20 2f 2a 20  E     0x0008 /* 
fff0: 43 61 73 65 2d 73 65 6e 73 69 74 69 76 65 20 4c  Case-sensitive L
10000 49 4b 45 2d 74 79 70 65 20 66 75 6e 63 74 69 6f  IKE-type functio
10010 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  n */.#define SQL
10020 49 54 45 5f 46 55 4e 43 5f 45 50 48 45 4d 20 20  ITE_FUNC_EPHEM  
10030 20 20 30 78 30 30 31 30 20 2f 2a 20 45 70 68 65    0x0010 /* Ephe
10040 6d 65 72 61 6c 2e 20 20 44 65 6c 65 74 65 20 77  meral.  Delete w
10050 69 74 68 20 56 44 42 45 20 2a 2f 0a 23 64 65 66  ith VDBE */.#def
10060 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f  ine SQLITE_FUNC_
10070 4e 45 45 44 43 4f 4c 4c 20 30 78 30 30 32 30 20  NEEDCOLL 0x0020 
10080 2f 2a 20 73 71 6c 69 74 65 33 47 65 74 46 75 6e  /* sqlite3GetFun
10090 63 43 6f 6c 6c 53 65 71 28 29 20 6d 69 67 68 74  cCollSeq() might
100a0 20 62 65 20 63 61 6c 6c 65 64 2a 2f 0a 23 64 65   be called*/.#de
100b0 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43  fine SQLITE_FUNC
100c0 5f 4c 45 4e 47 54 48 20 20 20 30 78 30 30 34 30  _LENGTH   0x0040
100d0 20 2f 2a 20 42 75 69 6c 74 2d 69 6e 20 6c 65 6e   /* Built-in len
100e0 67 74 68 28 29 20 66 75 6e 63 74 69 6f 6e 20 2a  gth() function *
100f0 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
10100 5f 46 55 4e 43 5f 54 59 50 45 4f 46 20 20 20 30  _FUNC_TYPEOF   0
10110 78 30 30 38 30 20 2f 2a 20 42 75 69 6c 74 2d 69  x0080 /* Built-i
10120 6e 20 74 79 70 65 6f 66 28 29 20 66 75 6e 63 74  n typeof() funct
10130 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ion */.#define S
10140 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 55 4e 54  QLITE_FUNC_COUNT
10150 20 20 20 20 30 78 30 31 30 30 20 2f 2a 20 42 75      0x0100 /* Bu
10160 69 6c 74 2d 69 6e 20 63 6f 75 6e 74 28 2a 29 20  ilt-in count(*) 
10170 61 67 67 72 65 67 61 74 65 20 2a 2f 0a 23 64 65  aggregate */.#de
10180 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43  fine SQLITE_FUNC
10190 5f 43 4f 41 4c 45 53 43 45 20 30 78 30 32 30 30  _COALESCE 0x0200
101a0 20 2f 2a 20 42 75 69 6c 74 2d 69 6e 20 63 6f 61   /* Built-in coa
101b0 6c 65 73 63 65 28 29 20 6f 72 20 69 66 6e 75 6c  lesce() or ifnul
101c0 6c 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  l() */.#define S
101d0 51 4c 49 54 45 5f 46 55 4e 43 5f 55 4e 4c 49 4b  QLITE_FUNC_UNLIK
101e0 45 4c 59 20 30 78 30 34 30 30 20 2f 2a 20 42 75  ELY 0x0400 /* Bu
101f0 69 6c 74 2d 69 6e 20 75 6e 6c 69 6b 65 6c 79 28  ilt-in unlikely(
10200 29 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64  ) function */.#d
10210 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e  efine SQLITE_FUN
10220 43 5f 43 4f 4e 53 54 41 4e 54 20 30 78 30 38 30  C_CONSTANT 0x080
10230 30 20 2f 2a 20 43 6f 6e 73 74 61 6e 74 20 69 6e  0 /* Constant in
10240 70 75 74 73 20 67 69 76 65 20 61 20 63 6f 6e 73  puts give a cons
10250 74 61 6e 74 20 6f 75 74 70 75 74 20 2a 2f 0a 23  tant output */.#
10260 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55  define SQLITE_FU
10270 4e 43 5f 4d 49 4e 4d 41 58 20 20 20 30 78 31 30  NC_MINMAX   0x10
10280 30 30 20 2f 2a 20 54 72 75 65 20 66 6f 72 20 6d  00 /* True for m
10290 69 6e 28 29 20 61 6e 64 20 6d 61 78 28 29 20 61  in() and max() a
102a0 67 67 72 65 67 61 74 65 73 20 2a 2f 0a 23 64 65  ggregates */.#de
102b0 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43  fine SQLITE_FUNC
102c0 5f 53 4c 4f 43 48 4e 47 20 20 30 78 32 30 30 30  _SLOCHNG  0x2000
102d0 20 2f 2a 20 22 53 6c 6f 77 20 43 68 61 6e 67 65   /* "Slow Change
102e0 22 2e 20 56 61 6c 75 65 20 63 6f 6e 73 74 61 6e  ". Value constan
102f0 74 20 64 75 72 69 6e 67 20 61 0a 20 20 20 20 20  t during a.     
10300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a                 *
10320 2a 20 73 69 6e 67 6c 65 20 71 75 65 72 79 20 2d  * single query -
10330 20 6d 69 67 68 74 20 63 68 61 6e 67 65 20 6f 76   might change ov
10340 65 72 20 74 69 6d 65 20 2a 2f 0a 23 64 65 66 69  er time */.#defi
10350 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 41  ne SQLITE_FUNC_A
10360 46 46 49 4e 49 54 59 20 30 78 34 30 30 30 20 2f  FFINITY 0x4000 /
10370 2a 20 42 75 69 6c 74 2d 69 6e 20 61 66 66 69 6e  * Built-in affin
10380 69 74 79 28 29 20 66 75 6e 63 74 69 6f 6e 20 2a  ity() function *
10390 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
103a0 5f 46 55 4e 43 5f 4f 46 46 53 45 54 20 20 20 30  _FUNC_OFFSET   0
103b0 78 38 30 30 30 20 2f 2a 20 42 75 69 6c 74 2d 69  x8000 /* Built-i
103c0 6e 20 73 71 6c 69 74 65 5f 6f 66 66 73 65 74 28  n sqlite_offset(
103d0 29 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64  ) function */.#d
103e0 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e  efine SQLITE_FUN
103f0 43 5f 57 49 4e 44 4f 57 20 20 20 30 78 30 30 30  C_WINDOW   0x000
10400 31 30 30 30 30 20 2f 2a 20 42 75 69 6c 74 2d 69  10000 /* Built-i
10410 6e 20 77 69 6e 64 6f 77 2d 6f 6e 6c 79 20 66 75  n window-only fu
10420 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e  nction */.#defin
10430 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 57 49  e SQLITE_FUNC_WI
10440 4e 44 4f 57 5f 53 49 5a 45 20 30 78 32 30 30 30  NDOW_SIZE 0x2000
10450 30 20 2f 2a 20 52 65 71 75 69 72 65 73 20 70 61  0 /* Requires pa
10460 72 74 69 74 69 6f 6e 20 73 69 7a 65 20 61 73 20  rtition size as 
10470 61 72 67 2e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  arg. */.#define 
10480 53 51 4c 49 54 45 5f 46 55 4e 43 5f 49 4e 54 45  SQLITE_FUNC_INTE
10490 52 4e 41 4c 20 30 78 30 30 30 34 30 30 30 30 20  RNAL 0x00040000 
104a0 2f 2a 20 46 6f 72 20 75 73 65 20 62 79 20 4e 65  /* For use by Ne
104b0 73 74 65 64 50 61 72 73 65 28 29 20 6f 6e 6c 79  stedParse() only
104c0 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66   */../*.** The f
104d0 6f 6c 6c 6f 77 69 6e 67 20 74 68 72 65 65 20 6d  ollowing three m
104e0 61 63 72 6f 73 2c 20 46 55 4e 43 54 49 4f 4e 28  acros, FUNCTION(
104f0 29 2c 20 4c 49 4b 45 46 55 4e 43 28 29 20 61 6e  ), LIKEFUNC() an
10500 64 20 41 47 47 52 45 47 41 54 45 28 29 20 61 72  d AGGREGATE() ar
10510 65 0a 2a 2a 20 75 73 65 64 20 74 6f 20 63 72 65  e.** used to cre
10520 61 74 65 20 74 68 65 20 69 6e 69 74 69 61 6c 69  ate the initiali
10530 7a 65 72 73 20 66 6f 72 20 74 68 65 20 46 75 6e  zers for the Fun
10540 63 44 65 66 20 73 74 72 75 63 74 75 72 65 73 2e  cDef structures.
10550 0a 2a 2a 0a 2a 2a 20 20 20 46 55 4e 43 54 49 4f  .**.**   FUNCTIO
10560 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69  N(zName, nArg, i
10570 41 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29  Arg, bNC, xFunc)
10580 0a 2a 2a 20 20 20 20 20 55 73 65 64 20 74 6f 20  .**     Used to 
10590 63 72 65 61 74 65 20 61 20 73 63 61 6c 61 72 20  create a scalar 
105a0 66 75 6e 63 74 69 6f 6e 20 64 65 66 69 6e 69 74  function definit
105b0 69 6f 6e 20 6f 66 20 61 20 66 75 6e 63 74 69 6f  ion of a functio
105c0 6e 20 7a 4e 61 6d 65 0a 2a 2a 20 20 20 20 20 69  n zName.**     i
105d0 6d 70 6c 65 6d 65 6e 74 65 64 20 62 79 20 43 20  mplemented by C 
105e0 66 75 6e 63 74 69 6f 6e 20 78 46 75 6e 63 20 74  function xFunc t
105f0 68 61 74 20 61 63 63 65 70 74 73 20 6e 41 72 67  hat accepts nArg
10600 20 61 72 67 75 6d 65 6e 74 73 2e 20 54 68 65 0a   arguments. The.
10610 2a 2a 20 20 20 20 20 76 61 6c 75 65 20 70 61 73  **     value pas
10620 73 65 64 20 61 73 20 69 41 72 67 20 69 73 20 63  sed as iArg is c
10630 61 73 74 20 74 6f 20 61 20 28 76 6f 69 64 2a 29  ast to a (void*)
10640 20 61 6e 64 20 6d 61 64 65 20 61 76 61 69 6c 61   and made availa
10650 62 6c 65 0a 2a 2a 20 20 20 20 20 61 73 20 74 68  ble.**     as th
10660 65 20 75 73 65 72 2d 64 61 74 61 20 28 73 71 6c  e user-data (sql
10670 69 74 65 33 5f 75 73 65 72 5f 64 61 74 61 28 29  ite3_user_data()
10680 29 20 66 6f 72 20 74 68 65 20 66 75 6e 63 74 69  ) for the functi
10690 6f 6e 2e 20 49 66 0a 2a 2a 20 20 20 20 20 61 72  on. If.**     ar
106a0 67 75 6d 65 6e 74 20 62 4e 43 20 69 73 20 74 72  gument bNC is tr
106b0 75 65 2c 20 74 68 65 6e 20 74 68 65 20 53 51 4c  ue, then the SQL
106c0 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c  ITE_FUNC_NEEDCOL
106d0 4c 20 66 6c 61 67 20 69 73 20 73 65 74 2e 0a 2a  L flag is set..*
106e0 2a 0a 2a 2a 20 20 20 56 46 55 4e 43 54 49 4f 4e  *.**   VFUNCTION
106f0 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41  (zName, nArg, iA
10700 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29 0a  rg, bNC, xFunc).
10710 2a 2a 20 20 20 20 20 4c 69 6b 65 20 46 55 4e 43  **     Like FUNC
10720 54 49 4f 4e 20 65 78 63 65 70 74 20 69 74 20 6f  TION except it o
10730 6d 69 74 73 20 74 68 65 20 53 51 4c 49 54 45 5f  mits the SQLITE_
10740 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 20 66 6c  FUNC_CONSTANT fl
10750 61 67 2e 0a 2a 2a 0a 2a 2a 20 20 20 44 46 55 4e  ag..**.**   DFUN
10760 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72  CTION(zName, nAr
10770 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78 46  g, iArg, bNC, xF
10780 75 6e 63 29 0a 2a 2a 20 20 20 20 20 4c 69 6b 65  unc).**     Like
10790 20 46 55 4e 43 54 49 4f 4e 20 65 78 63 65 70 74   FUNCTION except
107a0 20 69 74 20 6f 6d 69 74 73 20 74 68 65 20 53 51   it omits the SQ
107b0 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41  LITE_FUNC_CONSTA
107c0 4e 54 20 66 6c 61 67 20 61 6e 64 0a 2a 2a 20 20  NT flag and.**  
107d0 20 20 20 61 64 64 73 20 74 68 65 20 53 51 4c 49     adds the SQLI
107e0 54 45 5f 46 55 4e 43 5f 53 4c 4f 43 48 4e 47 20  TE_FUNC_SLOCHNG 
107f0 66 6c 61 67 2e 20 20 55 73 65 64 20 66 6f 72 20  flag.  Used for 
10800 64 61 74 65 20 26 20 74 69 6d 65 20 66 75 6e 63  date & time func
10810 74 69 6f 6e 73 0a 2a 2a 20 20 20 20 20 61 6e 64  tions.**     and
10820 20 66 75 6e 63 74 69 6f 6e 73 20 6c 69 6b 65 20   functions like 
10830 73 71 6c 69 74 65 5f 76 65 72 73 69 6f 6e 28 29  sqlite_version()
10840 20 74 68 61 74 20 63 61 6e 20 63 68 61 6e 67 65   that can change
10850 2c 20 62 75 74 20 6e 6f 74 20 64 75 72 69 6e 67  , but not during
10860 0a 2a 2a 20 20 20 20 20 61 20 73 69 6e 67 6c 65  .**     a single
10870 20 71 75 65 72 79 2e 20 20 54 68 65 20 69 41 72   query.  The iAr
10880 67 20 69 73 20 69 67 6e 6f 72 65 64 2e 20 20 54  g is ignored.  T
10890 68 65 20 75 73 65 72 2d 64 61 74 61 20 69 73 20  he user-data is 
108a0 61 6c 77 61 79 73 20 73 65 74 0a 2a 2a 20 20 20  always set.**   
108b0 20 20 74 6f 20 61 20 4e 55 4c 4c 20 70 6f 69 6e    to a NULL poin
108c0 74 65 72 2e 20 20 54 68 65 20 62 4e 43 20 70 61  ter.  The bNC pa
108d0 72 61 6d 65 74 65 72 20 69 73 20 6e 6f 74 20 75  rameter is not u
108e0 73 65 64 2e 0a 2a 2a 0a 2a 2a 20 20 20 50 55 52  sed..**.**   PUR
108f0 45 5f 44 41 54 45 28 7a 4e 61 6d 65 2c 20 6e 41  E_DATE(zName, nA
10900 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78  rg, iArg, bNC, x
10910 46 75 6e 63 29 0a 2a 2a 20 20 20 20 20 55 73 65  Func).**     Use
10920 64 20 66 6f 72 20 22 70 75 72 65 22 20 64 61 74  d for "pure" dat
10930 65 2f 74 69 6d 65 20 66 75 6e 63 74 69 6f 6e 73  e/time functions
10940 2c 20 74 68 69 73 20 6d 61 63 72 6f 20 69 73 20  , this macro is 
10950 6c 69 6b 65 20 44 46 55 4e 43 54 49 4f 4e 0a 2a  like DFUNCTION.*
10960 2a 20 20 20 20 20 65 78 63 65 70 74 20 74 68 61  *     except tha
10970 74 20 69 74 20 64 6f 65 73 20 73 65 74 20 74 68  t it does set th
10980 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f  e SQLITE_FUNC_CO
10990 4e 53 54 41 4e 54 20 66 6c 61 67 73 2e 20 20 69  NSTANT flags.  i
109a0 41 72 67 20 69 73 0a 2a 2a 20 20 20 20 20 69 67  Arg is.**     ig
109b0 6e 6f 72 65 64 20 61 6e 64 20 74 68 65 20 75 73  nored and the us
109c0 65 72 2d 64 61 74 61 20 66 6f 72 20 74 68 65 73  er-data for thes
109d0 65 20 66 75 6e 63 74 69 6f 6e 73 20 69 73 20 73  e functions is s
109e0 65 74 20 74 6f 20 61 6e 20 0a 2a 2a 20 20 20 20  et to an .**    
109f0 20 61 72 62 69 74 72 61 72 79 20 6e 6f 6e 2d 4e   arbitrary non-N
10a00 55 4c 4c 20 70 6f 69 6e 74 65 72 2e 20 20 54 68  ULL pointer.  Th
10a10 65 20 62 4e 43 20 70 61 72 61 6d 65 74 65 72 20  e bNC parameter 
10a20 69 73 20 6e 6f 74 20 75 73 65 64 2e 0a 2a 2a 0a  is not used..**.
10a30 2a 2a 20 20 20 41 47 47 52 45 47 41 54 45 28 7a  **   AGGREGATE(z
10a40 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72 67  Name, nArg, iArg
10a50 2c 20 62 4e 43 2c 20 78 53 74 65 70 2c 20 78 46  , bNC, xStep, xF
10a60 69 6e 61 6c 29 0a 2a 2a 20 20 20 20 20 55 73 65  inal).**     Use
10a70 64 20 74 6f 20 63 72 65 61 74 65 20 61 6e 20 61  d to create an a
10a80 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f  ggregate functio
10a90 6e 20 64 65 66 69 6e 69 74 69 6f 6e 20 69 6d 70  n definition imp
10aa0 6c 65 6d 65 6e 74 65 64 20 62 79 0a 2a 2a 20 20  lemented by.**  
10ab0 20 20 20 74 68 65 20 43 20 66 75 6e 63 74 69 6f     the C functio
10ac0 6e 73 20 78 53 74 65 70 20 61 6e 64 20 78 46 69  ns xStep and xFi
10ad0 6e 61 6c 2e 20 54 68 65 20 66 69 72 73 74 20 66  nal. The first f
10ae0 6f 75 72 20 70 61 72 61 6d 65 74 65 72 73 0a 2a  our parameters.*
10af0 2a 20 20 20 20 20 61 72 65 20 69 6e 74 65 72 70  *     are interp
10b00 72 65 74 65 64 20 69 6e 20 74 68 65 20 73 61 6d  reted in the sam
10b10 65 20 77 61 79 20 61 73 20 74 68 65 20 66 69 72  e way as the fir
10b20 73 74 20 34 20 70 61 72 61 6d 65 74 65 72 73 20  st 4 parameters 
10b30 74 6f 0a 2a 2a 20 20 20 20 20 46 55 4e 43 54 49  to.**     FUNCTI
10b40 4f 4e 28 29 2e 0a 2a 2a 0a 2a 2a 20 20 20 57 46  ON()..**.**   WF
10b50 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e  UNCTION(zName, n
10b60 41 72 67 2c 20 69 41 72 67 2c 20 78 53 74 65 70  Arg, iArg, xStep
10b70 2c 20 78 46 69 6e 61 6c 2c 20 78 56 61 6c 75 65  , xFinal, xValue
10b80 2c 20 78 49 6e 76 65 72 73 65 29 0a 2a 2a 20 20  , xInverse).**  
10b90 20 20 20 55 73 65 64 20 74 6f 20 63 72 65 61 74     Used to creat
10ba0 65 20 61 6e 20 61 67 67 72 65 67 61 74 65 20 66  e an aggregate f
10bb0 75 6e 63 74 69 6f 6e 20 64 65 66 69 6e 69 74 69  unction definiti
10bc0 6f 6e 20 69 6d 70 6c 65 6d 65 6e 74 65 64 20 62  on implemented b
10bd0 79 0a 2a 2a 20 20 20 20 20 74 68 65 20 43 20 66  y.**     the C f
10be0 75 6e 63 74 69 6f 6e 73 20 78 53 74 65 70 20 61  unctions xStep a
10bf0 6e 64 20 78 46 69 6e 61 6c 2e 20 54 68 65 20 66  nd xFinal. The f
10c00 69 72 73 74 20 66 6f 75 72 20 70 61 72 61 6d 65  irst four parame
10c10 74 65 72 73 0a 2a 2a 20 20 20 20 20 61 72 65 20  ters.**     are 
10c20 69 6e 74 65 72 70 72 65 74 65 64 20 69 6e 20 74  interpreted in t
10c30 68 65 20 73 61 6d 65 20 77 61 79 20 61 73 20 74  he same way as t
10c40 68 65 20 66 69 72 73 74 20 34 20 70 61 72 61 6d  he first 4 param
10c50 65 74 65 72 73 20 74 6f 0a 2a 2a 20 20 20 20 20  eters to.**     
10c60 46 55 4e 43 54 49 4f 4e 28 29 2e 0a 2a 2a 0a 2a  FUNCTION()..**.*
10c70 2a 20 20 20 4c 49 4b 45 46 55 4e 43 28 7a 4e 61  *   LIKEFUNC(zNa
10c80 6d 65 2c 20 6e 41 72 67 2c 20 70 41 72 67 2c 20  me, nArg, pArg, 
10c90 66 6c 61 67 73 29 0a 2a 2a 20 20 20 20 20 55 73  flags).**     Us
10ca0 65 64 20 74 6f 20 63 72 65 61 74 65 20 61 20 73  ed to create a s
10cb0 63 61 6c 61 72 20 66 75 6e 63 74 69 6f 6e 20 64  calar function d
10cc0 65 66 69 6e 69 74 69 6f 6e 20 6f 66 20 61 20 66  efinition of a f
10cd0 75 6e 63 74 69 6f 6e 20 7a 4e 61 6d 65 0a 2a 2a  unction zName.**
10ce0 20 20 20 20 20 74 68 61 74 20 61 63 63 65 70 74       that accept
10cf0 73 20 6e 41 72 67 20 61 72 67 75 6d 65 6e 74 73  s nArg arguments
10d00 20 61 6e 64 20 69 73 20 69 6d 70 6c 65 6d 65 6e   and is implemen
10d10 74 65 64 20 62 79 20 61 20 63 61 6c 6c 20 74 6f  ted by a call to
10d20 20 43 0a 2a 2a 20 20 20 20 20 66 75 6e 63 74 69   C.**     functi
10d30 6f 6e 20 6c 69 6b 65 46 75 6e 63 2e 20 41 72 67  on likeFunc. Arg
10d40 75 6d 65 6e 74 20 70 41 72 67 20 69 73 20 63 61  ument pArg is ca
10d50 73 74 20 74 6f 20 61 20 28 76 6f 69 64 20 2a 29  st to a (void *)
10d60 20 61 6e 64 20 6d 61 64 65 0a 2a 2a 20 20 20 20   and made.**    
10d70 20 61 76 61 69 6c 61 62 6c 65 20 61 73 20 74 68   available as th
10d80 65 20 66 75 6e 63 74 69 6f 6e 20 75 73 65 72 2d  e function user-
10d90 64 61 74 61 20 28 73 71 6c 69 74 65 33 5f 75 73  data (sqlite3_us
10da0 65 72 5f 64 61 74 61 28 29 29 2e 20 54 68 65 0a  er_data()). The.
10db0 2a 2a 20 20 20 20 20 46 75 6e 63 44 65 66 2e 66  **     FuncDef.f
10dc0 6c 61 67 73 20 76 61 72 69 61 62 6c 65 20 69 73  lags variable is
10dd0 20 73 65 74 20 74 6f 20 74 68 65 20 76 61 6c 75   set to the valu
10de0 65 20 70 61 73 73 65 64 20 61 73 20 74 68 65 20  e passed as the 
10df0 66 6c 61 67 73 0a 2a 2a 20 20 20 20 20 70 61 72  flags.**     par
10e00 61 6d 65 74 65 72 2e 0a 2a 2f 0a 23 64 65 66 69  ameter..*/.#defi
10e10 6e 65 20 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d  ne FUNCTION(zNam
10e20 65 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c 20 62  e, nArg, iArg, b
10e30 4e 43 2c 20 78 46 75 6e 63 29 20 5c 0a 20 20 7b  NC, xFunc) \.  {
10e40 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f 46 55 4e  nArg, SQLITE_FUN
10e50 43 5f 43 4f 4e 53 54 41 4e 54 7c 53 51 4c 49 54  C_CONSTANT|SQLIT
10e60 45 5f 55 54 46 38 7c 28 62 4e 43 2a 53 51 4c 49  E_UTF8|(bNC*SQLI
10e70 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c  TE_FUNC_NEEDCOLL
10e80 29 2c 20 5c 0a 20 20 20 53 51 4c 49 54 45 5f 49  ), \.   SQLITE_I
10e90 4e 54 5f 54 4f 5f 50 54 52 28 69 41 72 67 29 2c  NT_TO_PTR(iArg),
10ea0 20 30 2c 20 78 46 75 6e 63 2c 20 30 2c 20 30 2c   0, xFunc, 0, 0,
10eb0 20 30 2c 20 23 7a 4e 61 6d 65 2c 20 7b 30 7d 20   0, #zName, {0} 
10ec0 7d 0a 23 64 65 66 69 6e 65 20 56 46 55 4e 43 54  }.#define VFUNCT
10ed0 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c  ION(zName, nArg,
10ee0 20 69 41 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e   iArg, bNC, xFun
10ef0 63 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51  c) \.  {nArg, SQ
10f00 4c 49 54 45 5f 55 54 46 38 7c 28 62 4e 43 2a 53  LITE_UTF8|(bNC*S
10f10 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43  QLITE_FUNC_NEEDC
10f20 4f 4c 4c 29 2c 20 5c 0a 20 20 20 53 51 4c 49 54  OLL), \.   SQLIT
10f30 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 69 41 72  E_INT_TO_PTR(iAr
10f40 67 29 2c 20 30 2c 20 78 46 75 6e 63 2c 20 30 2c  g), 0, xFunc, 0,
10f50 20 30 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c 20 7b   0, 0, #zName, {
10f60 30 7d 20 7d 0a 23 64 65 66 69 6e 65 20 44 46 55  0} }.#define DFU
10f70 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41  NCTION(zName, nA
10f80 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78  rg, iArg, bNC, x
10f90 46 75 6e 63 29 20 5c 0a 20 20 7b 6e 41 72 67 2c  Func) \.  {nArg,
10fa0 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 53 4c 4f   SQLITE_FUNC_SLO
10fb0 43 48 4e 47 7c 53 51 4c 49 54 45 5f 55 54 46 38  CHNG|SQLITE_UTF8
10fc0 2c 20 5c 0a 20 20 20 30 2c 20 30 2c 20 78 46 75  , \.   0, 0, xFu
10fd0 6e 63 2c 20 30 2c 20 30 2c 20 30 2c 20 23 7a 4e  nc, 0, 0, 0, #zN
10fe0 61 6d 65 2c 20 7b 30 7d 20 7d 0a 23 64 65 66 69  ame, {0} }.#defi
10ff0 6e 65 20 50 55 52 45 5f 44 41 54 45 28 7a 4e 61  ne PURE_DATE(zNa
11000 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c 20  me, nArg, iArg, 
11010 62 4e 43 2c 20 78 46 75 6e 63 29 20 5c 0a 20 20  bNC, xFunc) \.  
11020 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f 46 55  {nArg, SQLITE_FU
11030 4e 43 5f 53 4c 4f 43 48 4e 47 7c 53 51 4c 49 54  NC_SLOCHNG|SQLIT
11040 45 5f 55 54 46 38 7c 53 51 4c 49 54 45 5f 46 55  E_UTF8|SQLITE_FU
11050 4e 43 5f 43 4f 4e 53 54 41 4e 54 2c 20 5c 0a 20  NC_CONSTANT, \. 
11060 20 20 28 76 6f 69 64 2a 29 26 73 71 6c 69 74 65    (void*)&sqlite
11070 33 43 6f 6e 66 69 67 2c 20 30 2c 20 78 46 75 6e  3Config, 0, xFun
11080 63 2c 20 30 2c 20 30 2c 20 30 2c 20 23 7a 4e 61  c, 0, 0, 0, #zNa
11090 6d 65 2c 20 7b 30 7d 20 7d 0a 23 64 65 66 69 6e  me, {0} }.#defin
110a0 65 20 46 55 4e 43 54 49 4f 4e 32 28 7a 4e 61 6d  e FUNCTION2(zNam
110b0 65 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c 20 62  e, nArg, iArg, b
110c0 4e 43 2c 20 78 46 75 6e 63 2c 20 65 78 74 72 61  NC, xFunc, extra
110d0 46 6c 61 67 73 29 20 5c 0a 20 20 7b 6e 41 72 67  Flags) \.  {nArg
110e0 2c 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e  ,SQLITE_FUNC_CON
110f0 53 54 41 4e 54 7c 53 51 4c 49 54 45 5f 55 54 46  STANT|SQLITE_UTF
11100 38 7c 28 62 4e 43 2a 53 51 4c 49 54 45 5f 46 55  8|(bNC*SQLITE_FU
11110 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 7c 65 78 74  NC_NEEDCOLL)|ext
11120 72 61 46 6c 61 67 73 2c 5c 0a 20 20 20 53 51 4c  raFlags,\.   SQL
11130 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 69  ITE_INT_TO_PTR(i
11140 41 72 67 29 2c 20 30 2c 20 78 46 75 6e 63 2c 20  Arg), 0, xFunc, 
11150 30 2c 20 30 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c  0, 0, 0, #zName,
11160 20 7b 30 7d 20 7d 0a 23 64 65 66 69 6e 65 20 53   {0} }.#define S
11170 54 52 5f 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d  TR_FUNCTION(zNam
11180 65 2c 20 6e 41 72 67 2c 20 70 41 72 67 2c 20 62  e, nArg, pArg, b
11190 4e 43 2c 20 78 46 75 6e 63 29 20 5c 0a 20 20 7b  NC, xFunc) \.  {
111a0 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f 46 55 4e  nArg, SQLITE_FUN
111b0 43 5f 53 4c 4f 43 48 4e 47 7c 53 51 4c 49 54 45  C_SLOCHNG|SQLITE
111c0 5f 55 54 46 38 7c 28 62 4e 43 2a 53 51 4c 49 54  _UTF8|(bNC*SQLIT
111d0 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29  E_FUNC_NEEDCOLL)
111e0 2c 20 5c 0a 20 20 20 70 41 72 67 2c 20 30 2c 20  , \.   pArg, 0, 
111f0 78 46 75 6e 63 2c 20 30 2c 20 30 2c 20 30 2c 20  xFunc, 0, 0, 0, 
11200 23 7a 4e 61 6d 65 2c 20 7d 0a 23 64 65 66 69 6e  #zName, }.#defin
11210 65 20 4c 49 4b 45 46 55 4e 43 28 7a 4e 61 6d 65  e LIKEFUNC(zName
11220 2c 20 6e 41 72 67 2c 20 61 72 67 2c 20 66 6c 61  , nArg, arg, fla
11230 67 73 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53  gs) \.  {nArg, S
11240 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54  QLITE_FUNC_CONST
11250 41 4e 54 7c 53 51 4c 49 54 45 5f 55 54 46 38 7c  ANT|SQLITE_UTF8|
11260 66 6c 61 67 73 2c 20 5c 0a 20 20 20 28 76 6f 69  flags, \.   (voi
11270 64 20 2a 29 61 72 67 2c 20 30 2c 20 6c 69 6b 65  d *)arg, 0, like
11280 46 75 6e 63 2c 20 30 2c 20 30 2c 20 30 2c 20 23  Func, 0, 0, 0, #
11290 7a 4e 61 6d 65 2c 20 7b 30 7d 20 7d 0a 23 64 65  zName, {0} }.#de
112a0 66 69 6e 65 20 41 47 47 52 45 47 41 54 45 28 7a  fine AGGREGATE(z
112b0 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 61 72 67 2c  Name, nArg, arg,
112c0 20 6e 63 2c 20 78 53 74 65 70 2c 20 78 46 69 6e   nc, xStep, xFin
112d0 61 6c 2c 20 78 56 61 6c 75 65 29 20 5c 0a 20 20  al, xValue) \.  
112e0 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f 55 54  {nArg, SQLITE_UT
112f0 46 38 7c 28 6e 63 2a 53 51 4c 49 54 45 5f 46 55  F8|(nc*SQLITE_FU
11300 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 2c 20 5c 0a  NC_NEEDCOLL), \.
11310 20 20 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f     SQLITE_INT_TO
11320 5f 50 54 52 28 61 72 67 29 2c 20 30 2c 20 78 53  _PTR(arg), 0, xS
11330 74 65 70 2c 78 46 69 6e 61 6c 2c 78 56 61 6c 75  tep,xFinal,xValu
11340 65 2c 30 2c 23 7a 4e 61 6d 65 2c 20 7b 30 7d 7d  e,0,#zName, {0}}
11350 0a 23 64 65 66 69 6e 65 20 41 47 47 52 45 47 41  .#define AGGREGA
11360 54 45 32 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c  TE2(zName, nArg,
11370 20 61 72 67 2c 20 6e 63 2c 20 78 53 74 65 70 2c   arg, nc, xStep,
11380 20 78 46 69 6e 61 6c 2c 20 65 78 74 72 61 46 6c   xFinal, extraFl
11390 61 67 73 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20  ags) \.  {nArg, 
113a0 53 51 4c 49 54 45 5f 55 54 46 38 7c 28 6e 63 2a  SQLITE_UTF8|(nc*
113b0 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44  SQLITE_FUNC_NEED
113c0 43 4f 4c 4c 29 7c 65 78 74 72 61 46 6c 61 67 73  COLL)|extraFlags
113d0 2c 20 5c 0a 20 20 20 53 51 4c 49 54 45 5f 49 4e  , \.   SQLITE_IN
113e0 54 5f 54 4f 5f 50 54 52 28 61 72 67 29 2c 20 30  T_TO_PTR(arg), 0
113f0 2c 20 78 53 74 65 70 2c 78 46 69 6e 61 6c 2c 78  , xStep,xFinal,x
11400 46 69 6e 61 6c 2c 30 2c 23 7a 4e 61 6d 65 2c 20  Final,0,#zName, 
11410 7b 30 7d 7d 0a 23 64 65 66 69 6e 65 20 57 41 47  {0}}.#define WAG
11420 47 52 45 47 41 54 45 28 7a 4e 61 6d 65 2c 20 6e  GREGATE(zName, n
11430 41 72 67 2c 20 61 72 67 2c 20 6e 63 2c 20 78 53  Arg, arg, nc, xS
11440 74 65 70 2c 20 78 46 69 6e 61 6c 2c 20 78 56 61  tep, xFinal, xVa
11450 6c 75 65 2c 20 78 49 6e 76 65 72 73 65 2c 20 66  lue, xInverse, f
11460 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c  ) \.  {nArg, SQL
11470 49 54 45 5f 55 54 46 38 7c 28 6e 63 2a 53 51 4c  ITE_UTF8|(nc*SQL
11480 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c  ITE_FUNC_NEEDCOL
11490 4c 29 7c 66 2c 20 5c 0a 20 20 20 53 51 4c 49 54  L)|f, \.   SQLIT
114a0 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 61 72 67  E_INT_TO_PTR(arg
114b0 29 2c 20 30 2c 20 78 53 74 65 70 2c 78 46 69 6e  ), 0, xStep,xFin
114c0 61 6c 2c 78 56 61 6c 75 65 2c 78 49 6e 76 65 72  al,xValue,xInver
114d0 73 65 2c 23 7a 4e 61 6d 65 2c 20 7b 30 7d 7d 0a  se,#zName, {0}}.
114e0 23 64 65 66 69 6e 65 20 49 4e 54 45 52 4e 41 4c  #define INTERNAL
114f0 5f 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c  _FUNCTION(zName,
11500 20 6e 41 72 67 2c 20 78 46 75 6e 63 29 20 5c 0a   nArg, xFunc) \.
11510 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f    {nArg, SQLITE_
11520 46 55 4e 43 5f 49 4e 54 45 52 4e 41 4c 7c 53 51  FUNC_INTERNAL|SQ
11530 4c 49 54 45 5f 55 54 46 38 7c 53 51 4c 49 54 45  LITE_UTF8|SQLITE
11540 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 2c 20  _FUNC_CONSTANT, 
11550 5c 0a 20 20 20 30 2c 20 30 2c 20 78 46 75 6e 63  \.   0, 0, xFunc
11560 2c 20 30 2c 20 30 2c 20 30 2c 20 23 7a 4e 61 6d  , 0, 0, 0, #zNam
11570 65 2c 20 7b 30 7d 20 7d 0a 0a 0a 2f 2a 0a 2a 2a  e, {0} }.../*.**
11580 20 41 6c 6c 20 63 75 72 72 65 6e 74 20 73 61 76   All current sav
11590 65 70 6f 69 6e 74 73 20 61 72 65 20 73 74 6f 72  epoints are stor
115a0 65 64 20 69 6e 20 61 20 6c 69 6e 6b 65 64 20 6c  ed in a linked l
115b0 69 73 74 20 73 74 61 72 74 69 6e 67 20 61 74 0a  ist starting at.
115c0 2a 2a 20 73 71 6c 69 74 65 33 2e 70 53 61 76 65  ** sqlite3.pSave
115d0 70 6f 69 6e 74 2e 20 54 68 65 20 66 69 72 73 74  point. The first
115e0 20 65 6c 65 6d 65 6e 74 20 69 6e 20 74 68 65 20   element in the 
115f0 6c 69 73 74 20 69 73 20 74 68 65 20 6d 6f 73 74  list is the most
11600 20 72 65 63 65 6e 74 6c 79 0a 2a 2a 20 6f 70 65   recently.** ope
11610 6e 65 64 20 73 61 76 65 70 6f 69 6e 74 2e 20 53  ned savepoint. S
11620 61 76 65 70 6f 69 6e 74 73 20 61 72 65 20 61 64  avepoints are ad
11630 64 65 64 20 74 6f 20 74 68 65 20 6c 69 73 74 20  ded to the list 
11640 62 79 20 74 68 65 20 76 64 62 65 0a 2a 2a 20 4f  by the vdbe.** O
11650 50 5f 53 61 76 65 70 6f 69 6e 74 20 69 6e 73 74  P_Savepoint inst
11660 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75  ruction..*/.stru
11670 63 74 20 53 61 76 65 70 6f 69 6e 74 20 7b 0a 20  ct Savepoint {. 
11680 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20   char *zName;   
11690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
116a0 20 20 20 20 20 2f 2a 20 53 61 76 65 70 6f 69 6e       /* Savepoin
116b0 74 20 6e 61 6d 65 20 28 6e 75 6c 2d 74 65 72 6d  t name (nul-term
116c0 69 6e 61 74 65 64 29 20 2a 2f 0a 20 20 69 36 34  inated) */.  i64
116d0 20 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 3b 20   nDeferredCons; 
116e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
116f0 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 64 65   /* Number of de
11700 66 65 72 72 65 64 20 66 6b 20 76 69 6f 6c 61 74  ferred fk violat
11710 69 6f 6e 73 20 2a 2f 0a 20 20 69 36 34 20 6e 44  ions */.  i64 nD
11720 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3b 20  eferredImmCons; 
11730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
11740 20 4e 75 6d 62 65 72 20 6f 66 20 64 65 66 65 72   Number of defer
11750 72 65 64 20 69 6d 6d 20 66 6b 2e 20 2a 2f 0a 20  red imm fk. */. 
11760 20 53 61 76 65 70 6f 69 6e 74 20 2a 70 4e 65 78   Savepoint *pNex
11770 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t;              
11780 20 20 20 20 20 2f 2a 20 50 61 72 65 6e 74 20 73       /* Parent s
11790 61 76 65 70 6f 69 6e 74 20 28 69 66 20 61 6e 79  avepoint (if any
117a0 29 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54  ) */.};../*.** T
117b0 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 72 65  he following are
117c0 20 75 73 65 64 20 61 73 20 74 68 65 20 73 65 63   used as the sec
117d0 6f 6e 64 20 70 61 72 61 6d 65 74 65 72 20 74 6f  ond parameter to
117e0 20 73 71 6c 69 74 65 33 53 61 76 65 70 6f 69 6e   sqlite3Savepoin
117f0 74 28 29 2c 0a 2a 2a 20 61 6e 64 20 61 73 20 74  t(),.** and as t
11800 68 65 20 50 31 20 61 72 67 75 6d 65 6e 74 20 74  he P1 argument t
11810 6f 20 74 68 65 20 4f 50 5f 53 61 76 65 70 6f 69  o the OP_Savepoi
11820 6e 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a  nt instruction..
11830 2a 2f 0a 23 64 65 66 69 6e 65 20 53 41 56 45 50  */.#define SAVEP
11840 4f 49 4e 54 5f 42 45 47 49 4e 20 20 20 20 20 20  OINT_BEGIN      
11850 30 0a 23 64 65 66 69 6e 65 20 53 41 56 45 50 4f  0.#define SAVEPO
11860 49 4e 54 5f 52 45 4c 45 41 53 45 20 20 20 20 31  INT_RELEASE    1
11870 0a 23 64 65 66 69 6e 65 20 53 41 56 45 50 4f 49  .#define SAVEPOI
11880 4e 54 5f 52 4f 4c 4c 42 41 43 4b 20 20 20 32 0a  NT_ROLLBACK   2.
11890 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 53 51 4c  ../*.** Each SQL
118a0 69 74 65 20 6d 6f 64 75 6c 65 20 28 76 69 72 74  ite module (virt
118b0 75 61 6c 20 74 61 62 6c 65 20 64 65 66 69 6e 69  ual table defini
118c0 74 69 6f 6e 29 20 69 73 20 64 65 66 69 6e 65 64  tion) is defined
118d0 20 62 79 20 61 6e 0a 2a 2a 20 69 6e 73 74 61 6e   by an.** instan
118e0 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77  ce of the follow
118f0 69 6e 67 20 73 74 72 75 63 74 75 72 65 2c 20 73  ing structure, s
11900 74 6f 72 65 64 20 69 6e 20 74 68 65 20 73 71 6c  tored in the sql
11910 69 74 65 33 2e 61 4d 6f 64 75 6c 65 0a 2a 2a 20  ite3.aModule.** 
11920 68 61 73 68 20 74 61 62 6c 65 2e 0a 2a 2f 0a 73  hash table..*/.s
11930 74 72 75 63 74 20 4d 6f 64 75 6c 65 20 7b 0a 20  truct Module {. 
11940 20 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d   const sqlite3_m
11950 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b 20  odule *pModule; 
11960 20 20 20 20 20 20 2f 2a 20 43 61 6c 6c 62 61 63        /* Callbac
11970 6b 20 70 6f 69 6e 74 65 72 73 20 2a 2f 0a 20 20  k pointers */.  
11980 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4e 61 6d  const char *zNam
11990 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e;              
119a0 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 70 61 73       /* Name pas
119b0 73 65 64 20 74 6f 20 63 72 65 61 74 65 5f 6d 6f  sed to create_mo
119c0 64 75 6c 65 28 29 20 2a 2f 0a 20 20 76 6f 69 64  dule() */.  void
119d0 20 2a 70 41 75 78 3b 20 20 20 20 20 20 20 20 20   *pAux;         
119e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
119f0 20 2f 2a 20 70 41 75 78 20 70 61 73 73 65 64 20   /* pAux passed 
11a00 74 6f 20 63 72 65 61 74 65 5f 6d 6f 64 75 6c 65  to create_module
11a10 28 29 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78  () */.  void (*x
11a20 44 65 73 74 72 6f 79 29 28 76 6f 69 64 20 2a 29  Destroy)(void *)
11a30 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
11a40 4d 6f 64 75 6c 65 20 64 65 73 74 72 75 63 74 6f  Module destructo
11a50 72 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20  r function */.  
11a60 54 61 62 6c 65 20 2a 70 45 70 6f 54 61 62 3b 20  Table *pEpoTab; 
11a70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11a80 20 20 20 20 20 2f 2a 20 45 70 6f 6e 79 6d 6f 75       /* Eponymou
11a90 73 20 74 61 62 6c 65 20 66 6f 72 20 74 68 69 73  s table for this
11aa0 20 6d 6f 64 75 6c 65 20 2a 2f 0a 7d 3b 0a 0a 2f   module */.};../
11ab0 2a 0a 2a 2a 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  *.** information
11ac0 20 61 62 6f 75 74 20 65 61 63 68 20 63 6f 6c 75   about each colu
11ad0 6d 6e 20 6f 66 20 61 6e 20 53 51 4c 20 74 61 62  mn of an SQL tab
11ae0 6c 65 20 69 73 20 68 65 6c 64 20 69 6e 20 61 6e  le is held in an
11af0 20 69 6e 73 74 61 6e 63 65 0a 2a 2a 20 6f 66 20   instance.** of 
11b00 74 68 69 73 20 73 74 72 75 63 74 75 72 65 2e 0a  this structure..
11b10 2a 2f 0a 73 74 72 75 63 74 20 43 6f 6c 75 6d 6e  */.struct Column
11b20 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65   {.  char *zName
11b30 3b 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66  ;     /* Name of
11b40 20 74 68 69 73 20 63 6f 6c 75 6d 6e 2c 20 5c 30   this column, \0
11b50 30 30 2c 20 74 68 65 6e 20 74 68 65 20 74 79 70  00, then the typ
11b60 65 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 44 66  e */.  Expr *pDf
11b70 6c 74 3b 20 20 20 20 20 2f 2a 20 44 65 66 61 75  lt;     /* Defau
11b80 6c 74 20 76 61 6c 75 65 20 6f 66 20 74 68 69 73  lt value of this
11b90 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 63 68 61   column */.  cha
11ba0 72 20 2a 7a 43 6f 6c 6c 3b 20 20 20 20 20 2f 2a  r *zColl;     /*
11bb0 20 43 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65   Collating seque
11bc0 6e 63 65 2e 20 20 49 66 20 4e 55 4c 4c 2c 20 75  nce.  If NULL, u
11bd0 73 65 20 74 68 65 20 64 65 66 61 75 6c 74 20 2a  se the default *
11be0 2f 0a 20 20 75 38 20 6e 6f 74 4e 75 6c 6c 3b 20  /.  u8 notNull; 
11bf0 20 20 20 20 20 2f 2a 20 41 6e 20 4f 45 5f 20 63       /* An OE_ c
11c00 6f 64 65 20 66 6f 72 20 68 61 6e 64 6c 69 6e 67  ode for handling
11c10 20 61 20 4e 4f 54 20 4e 55 4c 4c 20 63 6f 6e 73   a NOT NULL cons
11c20 74 72 61 69 6e 74 20 2a 2f 0a 20 20 63 68 61 72  traint */.  char
11c30 20 61 66 66 69 6e 69 74 79 3b 20 20 20 2f 2a 20   affinity;   /* 
11c40 4f 6e 65 20 6f 66 20 74 68 65 20 53 51 4c 49 54  One of the SQLIT
11c50 45 5f 41 46 46 5f 2e 2e 2e 20 76 61 6c 75 65 73  E_AFF_... values
11c60 20 2a 2f 0a 20 20 75 38 20 73 7a 45 73 74 3b 20   */.  u8 szEst; 
11c70 20 20 20 20 20 20 20 2f 2a 20 45 73 74 69 6d 61         /* Estima
11c80 74 65 64 20 73 69 7a 65 20 6f 66 20 76 61 6c 75  ted size of valu
11c90 65 20 69 6e 20 74 68 69 73 20 63 6f 6c 75 6d 6e  e in this column
11ca0 2e 20 73 69 7a 65 6f 66 28 49 4e 54 29 3d 3d 31  . sizeof(INT)==1
11cb0 20 2a 2f 0a 20 20 75 38 20 63 6f 6c 46 6c 61 67   */.  u8 colFlag
11cc0 73 3b 20 20 20 20 20 2f 2a 20 42 6f 6f 6c 65 61  s;     /* Boolea
11cd0 6e 20 70 72 6f 70 65 72 74 69 65 73 2e 20 20 53  n properties.  S
11ce0 65 65 20 43 4f 4c 46 4c 41 47 5f 20 64 65 66 69  ee COLFLAG_ defi
11cf0 6e 65 73 20 62 65 6c 6f 77 20 2a 2f 0a 7d 3b 0a  nes below */.};.
11d00 0a 2f 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75  ./* Allowed valu
11d10 65 73 20 66 6f 72 20 43 6f 6c 75 6d 6e 2e 63 6f  es for Column.co
11d20 6c 46 6c 61 67 73 3a 0a 2a 2f 0a 23 64 65 66 69  lFlags:.*/.#defi
11d30 6e 65 20 43 4f 4c 46 4c 41 47 5f 50 52 49 4d 4b  ne COLFLAG_PRIMK
11d40 45 59 20 20 30 78 30 30 30 31 20 20 20 20 2f 2a  EY  0x0001    /*
11d50 20 43 6f 6c 75 6d 6e 20 69 73 20 70 61 72 74 20   Column is part 
11d60 6f 66 20 74 68 65 20 70 72 69 6d 61 72 79 20 6b  of the primary k
11d70 65 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 43 4f  ey */.#define CO
11d80 4c 46 4c 41 47 5f 48 49 44 44 45 4e 20 20 20 30  LFLAG_HIDDEN   0
11d90 78 30 30 30 32 20 20 20 20 2f 2a 20 41 20 68 69  x0002    /* A hi
11da0 64 64 65 6e 20 63 6f 6c 75 6d 6e 20 69 6e 20 61  dden column in a
11db0 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 2a   virtual table *
11dc0 2f 0a 23 64 65 66 69 6e 65 20 43 4f 4c 46 4c 41  /.#define COLFLA
11dd0 47 5f 48 41 53 54 59 50 45 20 20 30 78 30 30 30  G_HASTYPE  0x000
11de0 34 20 20 20 20 2f 2a 20 54 79 70 65 20 6e 61 6d  4    /* Type nam
11df0 65 20 66 6f 6c 6c 6f 77 73 20 63 6f 6c 75 6d 6e  e follows column
11e00 20 6e 61 6d 65 20 2a 2f 0a 23 64 65 66 69 6e 65   name */.#define
11e10 20 43 4f 4c 46 4c 41 47 5f 55 4e 49 51 55 45 20   COLFLAG_UNIQUE 
11e20 20 20 30 78 30 30 30 38 20 20 20 20 2f 2a 20 43    0x0008    /* C
11e30 6f 6c 75 6d 6e 20 64 65 66 20 63 6f 6e 74 61 69  olumn def contai
11e40 6e 73 20 22 55 4e 49 51 55 45 22 20 6f 72 20 22  ns "UNIQUE" or "
11e50 50 4b 22 20 2a 2f 0a 23 64 65 66 69 6e 65 20 43  PK" */.#define C
11e60 4f 4c 46 4c 41 47 5f 53 4f 52 54 45 52 52 45 46  OLFLAG_SORTERREF
11e70 20 30 78 30 30 31 30 20 20 20 2f 2a 20 55 73 65   0x0010   /* Use
11e80 20 73 6f 72 74 65 72 2d 72 65 66 73 20 77 69 74   sorter-refs wit
11e90 68 20 74 68 69 73 20 63 6f 6c 75 6d 6e 20 2a 2f  h this column */
11ea0 0a 0a 2f 2a 0a 2a 2a 20 41 20 22 43 6f 6c 6c 61  ../*.** A "Colla
11eb0 74 69 6e 67 20 53 65 71 75 65 6e 63 65 22 20 69  ting Sequence" i
11ec0 73 20 64 65 66 69 6e 65 64 20 62 79 20 61 6e 20  s defined by an 
11ed0 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20  instance of the 
11ee0 66 6f 6c 6c 6f 77 69 6e 67 0a 2a 2a 20 73 74 72  following.** str
11ef0 75 63 74 75 72 65 2e 20 43 6f 6e 63 65 70 74 75  ucture. Conceptu
11f00 61 6c 6c 79 2c 20 61 20 63 6f 6c 6c 61 74 69 6e  ally, a collatin
11f10 67 20 73 65 71 75 65 6e 63 65 20 63 6f 6e 73 69  g sequence consi
11f20 73 74 73 20 6f 66 20 61 20 6e 61 6d 65 20 61 6e  sts of a name an
11f30 64 0a 2a 2a 20 61 20 63 6f 6d 70 61 72 69 73 6f  d.** a compariso
11f40 6e 20 72 6f 75 74 69 6e 65 20 74 68 61 74 20 64  n routine that d
11f50 65 66 69 6e 65 73 20 74 68 65 20 6f 72 64 65 72  efines the order
11f60 20 6f 66 20 74 68 61 74 20 73 65 71 75 65 6e 63   of that sequenc
11f70 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 43 6f 6c 6c  e..**.** If Coll
11f80 53 65 71 2e 78 43 6d 70 20 69 73 20 4e 55 4c 4c  Seq.xCmp is NULL
11f90 2c 20 69 74 20 6d 65 61 6e 73 20 74 68 61 74 20  , it means that 
11fa0 74 68 65 0a 2a 2a 20 63 6f 6c 6c 61 74 69 6e 67  the.** collating
11fb0 20 73 65 71 75 65 6e 63 65 20 69 73 20 75 6e 64   sequence is und
11fc0 65 66 69 6e 65 64 2e 20 20 49 6e 64 69 63 65 73  efined.  Indices
11fd0 20 62 75 69 6c 74 20 6f 6e 20 61 6e 20 75 6e 64   built on an und
11fe0 65 66 69 6e 65 64 0a 2a 2a 20 63 6f 6c 6c 61 74  efined.** collat
11ff0 69 6e 67 20 73 65 71 75 65 6e 63 65 20 6d 61 79  ing sequence may
12000 20 6e 6f 74 20 62 65 20 72 65 61 64 20 6f 72 20   not be read or 
12010 77 72 69 74 74 65 6e 2e 0a 2a 2f 0a 73 74 72 75  written..*/.stru
12020 63 74 20 43 6f 6c 6c 53 65 71 20 7b 0a 20 20 63  ct CollSeq {.  c
12030 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20  har *zName;     
12040 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20       /* Name of 
12050 74 68 65 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65  the collating se
12060 71 75 65 6e 63 65 2c 20 55 54 46 2d 38 20 65 6e  quence, UTF-8 en
12070 63 6f 64 65 64 20 2a 2f 0a 20 20 75 38 20 65 6e  coded */.  u8 en
12080 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  c;              
12090 20 2f 2a 20 54 65 78 74 20 65 6e 63 6f 64 69 6e   /* Text encodin
120a0 67 20 68 61 6e 64 6c 65 64 20 62 79 20 78 43 6d  g handled by xCm
120b0 70 28 29 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70  p() */.  void *p
120c0 55 73 65 72 3b 20 20 20 20 20 20 20 20 20 20 2f  User;          /
120d0 2a 20 46 69 72 73 74 20 61 72 67 75 6d 65 6e 74  * First argument
120e0 20 74 6f 20 78 43 6d 70 28 29 20 2a 2f 0a 20 20   to xCmp() */.  
120f0 69 6e 74 20 28 2a 78 43 6d 70 29 28 76 6f 69 64  int (*xCmp)(void
12100 2a 2c 69 6e 74 2c 20 63 6f 6e 73 74 20 76 6f 69  *,int, const voi
12110 64 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20 76  d*, int, const v
12120 6f 69 64 2a 29 3b 0a 20 20 76 6f 69 64 20 28 2a  oid*);.  void (*
12130 78 44 65 6c 29 28 76 6f 69 64 2a 29 3b 20 20 2f  xDel)(void*);  /
12140 2a 20 44 65 73 74 72 75 63 74 6f 72 20 66 6f 72  * Destructor for
12150 20 70 55 73 65 72 20 2a 2f 0a 7d 3b 0a 0a 2f 2a   pUser */.};../*
12160 0a 2a 2a 20 41 20 73 6f 72 74 20 6f 72 64 65 72  .** A sort order
12170 20 63 61 6e 20 62 65 20 65 69 74 68 65 72 20 41   can be either A
12180 53 43 20 6f 72 20 44 45 53 43 2e 0a 2a 2f 0a 23  SC or DESC..*/.#
12190 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 4f  define SQLITE_SO
121a0 5f 41 53 43 20 20 20 20 20 20 20 30 20 20 2f 2a  _ASC       0  /*
121b0 20 53 6f 72 74 20 69 6e 20 61 73 63 65 6e 64 69   Sort in ascendi
121c0 6e 67 20 6f 72 64 65 72 20 2a 2f 0a 23 64 65 66  ng order */.#def
121d0 69 6e 65 20 53 51 4c 49 54 45 5f 53 4f 5f 44 45  ine SQLITE_SO_DE
121e0 53 43 20 20 20 20 20 20 31 20 20 2f 2a 20 53 6f  SC      1  /* So
121f0 72 74 20 69 6e 20 61 73 63 65 6e 64 69 6e 67 20  rt in ascending 
12200 6f 72 64 65 72 20 2a 2f 0a 23 64 65 66 69 6e 65  order */.#define
12210 20 53 51 4c 49 54 45 5f 53 4f 5f 55 4e 44 45 46   SQLITE_SO_UNDEF
12220 49 4e 45 44 20 2d 31 20 2f 2a 20 4e 6f 20 73 6f  INED -1 /* No so
12230 72 74 20 6f 72 64 65 72 20 73 70 65 63 69 66 69  rt order specifi
12240 65 64 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6c  ed */../*.** Col
12250 75 6d 6e 20 61 66 66 69 6e 69 74 79 20 74 79 70  umn affinity typ
12260 65 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 73 65 20  es..**.** These 
12270 75 73 65 64 20 74 6f 20 68 61 76 65 20 6d 6e 65  used to have mne
12280 6d 6f 6e 69 63 20 6e 61 6d 65 20 6c 69 6b 65 20  monic name like 
12290 27 69 27 20 66 6f 72 20 53 51 4c 49 54 45 5f 41  'i' for SQLITE_A
122a0 46 46 5f 49 4e 54 45 47 45 52 20 61 6e 64 0a 2a  FF_INTEGER and.*
122b0 2a 20 27 74 27 20 66 6f 72 20 53 51 4c 49 54 45  * 't' for SQLITE
122c0 5f 41 46 46 5f 54 45 58 54 2e 20 20 42 75 74 20  _AFF_TEXT.  But 
122d0 77 65 20 63 61 6e 20 73 61 76 65 20 61 20 6c 69  we can save a li
122e0 74 74 6c 65 20 73 70 61 63 65 20 61 6e 64 20 69  ttle space and i
122f0 6d 70 72 6f 76 65 0a 2a 2a 20 74 68 65 20 73 70  mprove.** the sp
12300 65 65 64 20 61 20 6c 69 74 74 6c 65 20 62 79 20  eed a little by 
12310 6e 75 6d 62 65 72 69 6e 67 20 74 68 65 20 76 61  numbering the va
12320 6c 75 65 73 20 63 6f 6e 73 65 63 75 74 69 76 65  lues consecutive
12330 6c 79 2e 0a 2a 2a 0a 2a 2a 20 42 75 74 20 72 61  ly..**.** But ra
12340 74 68 65 72 20 74 68 61 6e 20 73 74 61 72 74 20  ther than start 
12350 77 69 74 68 20 30 20 6f 72 20 31 2c 20 77 65 20  with 0 or 1, we 
12360 62 65 67 69 6e 20 77 69 74 68 20 27 41 27 2e 20  begin with 'A'. 
12370 20 54 68 61 74 20 77 61 79 2c 0a 2a 2a 20 77 68   That way,.** wh
12380 65 6e 20 6d 75 6c 74 69 70 6c 65 20 61 66 66 69  en multiple affi
12390 6e 69 74 79 20 74 79 70 65 73 20 61 72 65 20 63  nity types are c
123a0 6f 6e 63 61 74 65 6e 61 74 65 64 20 69 6e 74 6f  oncatenated into
123b0 20 61 20 73 74 72 69 6e 67 20 61 6e 64 0a 2a 2a   a string and.**
123c0 20 75 73 65 64 20 61 73 20 74 68 65 20 50 34 20   used as the P4 
123d0 6f 70 65 72 61 6e 64 2c 20 74 68 65 79 20 77 69  operand, they wi
123e0 6c 6c 20 62 65 20 6d 6f 72 65 20 72 65 61 64 61  ll be more reada
123f0 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65 20  ble..**.** Note 
12400 61 6c 73 6f 20 74 68 61 74 20 74 68 65 20 6e 75  also that the nu
12410 6d 65 72 69 63 20 74 79 70 65 73 20 61 72 65 20  meric types are 
12420 67 72 6f 75 70 65 64 20 74 6f 67 65 74 68 65 72  grouped together
12430 20 73 6f 20 74 68 61 74 20 74 65 73 74 69 6e 67   so that testing
12440 0a 2a 2a 20 66 6f 72 20 61 20 6e 75 6d 65 72 69  .** for a numeri
12450 63 20 74 79 70 65 20 69 73 20 61 20 73 69 6e 67  c type is a sing
12460 6c 65 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 20  le comparison.  
12470 41 6e 64 20 74 68 65 20 42 4c 4f 42 20 74 79 70  And the BLOB typ
12480 65 20 69 73 20 66 69 72 73 74 2e 0a 2a 2f 0a 23  e is first..*/.#
12490 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 46  define SQLITE_AF
124a0 46 5f 42 4c 4f 42 20 20 20 20 20 27 41 27 0a 23  F_BLOB     'A'.#
124b0 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 46  define SQLITE_AF
124c0 46 5f 54 45 58 54 20 20 20 20 20 27 42 27 0a 23  F_TEXT     'B'.#
124d0 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 46  define SQLITE_AF
124e0 46 5f 4e 55 4d 45 52 49 43 20 20 27 43 27 0a 23  F_NUMERIC  'C'.#
124f0 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 46  define SQLITE_AF
12500 46 5f 49 4e 54 45 47 45 52 20 20 27 44 27 0a 23  F_INTEGER  'D'.#
12510 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 46  define SQLITE_AF
12520 46 5f 52 45 41 4c 20 20 20 20 20 27 45 27 0a 0a  F_REAL     'E'..
12530 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49  #define sqlite3I
12540 73 4e 75 6d 65 72 69 63 41 66 66 69 6e 69 74 79  sNumericAffinity
12550 28 58 29 20 20 28 28 58 29 3e 3d 53 51 4c 49 54  (X)  ((X)>=SQLIT
12560 45 5f 41 46 46 5f 4e 55 4d 45 52 49 43 29 0a 0a  E_AFF_NUMERIC)..
12570 2f 2a 0a 2a 2a 20 54 68 65 20 53 51 4c 49 54 45  /*.** The SQLITE
12580 5f 41 46 46 5f 4d 41 53 4b 20 76 61 6c 75 65 73  _AFF_MASK values
12590 20 6d 61 73 6b 73 20 6f 66 66 20 74 68 65 20 73   masks off the s
125a0 69 67 6e 69 66 69 63 61 6e 74 20 62 69 74 73 20  ignificant bits 
125b0 6f 66 20 61 6e 0a 2a 2a 20 61 66 66 69 6e 69 74  of an.** affinit
125c0 79 20 76 61 6c 75 65 2e 0a 2a 2f 0a 23 64 65 66  y value..*/.#def
125d0 69 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 4d  ine SQLITE_AFF_M
125e0 41 53 4b 20 20 20 20 20 30 78 34 37 0a 0a 2f 2a  ASK     0x47../*
125f0 0a 2a 2a 20 41 64 64 69 74 69 6f 6e 61 6c 20 62  .** Additional b
12600 69 74 20 76 61 6c 75 65 73 20 74 68 61 74 20 63  it values that c
12610 61 6e 20 62 65 20 4f 52 65 64 20 77 69 74 68 20  an be ORed with 
12620 61 6e 20 61 66 66 69 6e 69 74 79 20 77 69 74 68  an affinity with
12630 6f 75 74 0a 2a 2a 20 63 68 61 6e 67 69 6e 67 20  out.** changing 
12640 74 68 65 20 61 66 66 69 6e 69 74 79 2e 0a 2a 2a  the affinity..**
12650 0a 2a 2a 20 54 68 65 20 53 51 4c 49 54 45 5f 4e  .** The SQLITE_N
12660 4f 54 4e 55 4c 4c 20 66 6c 61 67 20 69 73 20 61  OTNULL flag is a
12670 20 63 6f 6d 62 69 6e 61 74 69 6f 6e 20 6f 66 20   combination of 
12680 4e 55 4c 4c 45 51 20 61 6e 64 20 4a 55 4d 50 49  NULLEQ and JUMPI
12690 46 4e 55 4c 4c 2e 0a 2a 2a 20 49 74 20 63 61 75  FNULL..** It cau
126a0 73 65 73 20 61 6e 20 61 73 73 65 72 74 28 29 20  ses an assert() 
126b0 74 6f 20 66 69 72 65 20 69 66 20 65 69 74 68 65  to fire if eithe
126c0 72 20 6f 70 65 72 61 6e 64 20 74 6f 20 61 20 63  r operand to a c
126d0 6f 6d 70 61 72 69 73 6f 6e 0a 2a 2a 20 6f 70 65  omparison.** ope
126e0 72 61 74 6f 72 20 69 73 20 4e 55 4c 4c 2e 20 20  rator is NULL.  
126f0 49 74 20 69 73 20 61 64 64 65 64 20 74 6f 20 63  It is added to c
12700 65 72 74 61 69 6e 20 63 6f 6d 70 61 72 69 73 6f  ertain compariso
12710 6e 20 6f 70 65 72 61 74 6f 72 73 20 74 6f 0a 2a  n operators to.*
12720 2a 20 70 72 6f 76 65 20 74 68 61 74 20 74 68 65  * prove that the
12730 20 6f 70 65 72 61 6e 64 73 20 61 72 65 20 61 6c   operands are al
12740 77 61 79 73 20 4e 4f 54 20 4e 55 4c 4c 2e 0a 2a  ways NOT NULL..*
12750 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
12760 5f 4b 45 45 50 4e 55 4c 4c 20 20 20 20 20 30 78  _KEEPNULL     0x
12770 30 38 20 20 2f 2a 20 55 73 65 64 20 62 79 20 76  08  /* Used by v
12780 65 63 74 6f 72 20 3d 3d 20 6f 72 20 3c 3e 20 2a  ector == or <> *
12790 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
127a0 5f 4a 55 4d 50 49 46 4e 55 4c 4c 20 20 20 30 78  _JUMPIFNULL   0x
127b0 31 30 20 20 2f 2a 20 6a 75 6d 70 73 20 69 66 20  10  /* jumps if 
127c0 65 69 74 68 65 72 20 6f 70 65 72 61 6e 64 20 69  either operand i
127d0 73 20 4e 55 4c 4c 20 2a 2f 0a 23 64 65 66 69 6e  s NULL */.#defin
127e0 65 20 53 51 4c 49 54 45 5f 53 54 4f 52 45 50 32  e SQLITE_STOREP2
127f0 20 20 20 20 20 20 30 78 32 30 20 20 2f 2a 20 53        0x20  /* S
12800 74 6f 72 65 20 72 65 73 75 6c 74 20 69 6e 20 72  tore result in r
12810 65 67 5b 50 32 5d 20 72 61 74 68 65 72 20 74 68  eg[P2] rather th
12820 61 6e 20 6a 75 6d 70 20 2a 2f 0a 23 64 65 66 69  an jump */.#defi
12830 6e 65 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51  ne SQLITE_NULLEQ
12840 20 20 20 20 20 20 20 30 78 38 30 20 20 2f 2a 20         0x80  /* 
12850 4e 55 4c 4c 3d 4e 55 4c 4c 20 2a 2f 0a 23 64 65  NULL=NULL */.#de
12860 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e 4f 54 4e  fine SQLITE_NOTN
12870 55 4c 4c 20 20 20 20 20 20 30 78 39 30 20 20 2f  ULL      0x90  /
12880 2a 20 41 73 73 65 72 74 20 74 68 61 74 20 6f 70  * Assert that op
12890 65 72 61 6e 64 73 20 61 72 65 20 6e 65 76 65 72  erands are never
128a0 20 4e 55 4c 4c 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20   NULL */../*.** 
128b0 41 6e 20 6f 62 6a 65 63 74 20 6f 66 20 74 68 69  An object of thi
128c0 73 20 74 79 70 65 20 69 73 20 63 72 65 61 74 65  s type is create
128d0 64 20 66 6f 72 20 65 61 63 68 20 76 69 72 74 75  d for each virtu
128e0 61 6c 20 74 61 62 6c 65 20 70 72 65 73 65 6e 74  al table present
128f0 20 69 6e 0a 2a 2a 20 74 68 65 20 64 61 74 61 62   in.** the datab
12900 61 73 65 20 73 63 68 65 6d 61 2e 0a 2a 2a 0a 2a  ase schema..**.*
12910 2a 20 49 66 20 74 68 65 20 64 61 74 61 62 61 73  * If the databas
12920 65 20 73 63 68 65 6d 61 20 69 73 20 73 68 61 72  e schema is shar
12930 65 64 2c 20 74 68 65 6e 20 74 68 65 72 65 20 69  ed, then there i
12940 73 20 6f 6e 65 20 69 6e 73 74 61 6e 63 65 20 6f  s one instance o
12950 66 20 74 68 69 73 0a 2a 2a 20 73 74 72 75 63 74  f this.** struct
12960 75 72 65 20 66 6f 72 20 65 61 63 68 20 64 61 74  ure for each dat
12970 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  abase connection
12980 20 28 73 71 6c 69 74 65 33 2a 29 20 74 68 61 74   (sqlite3*) that
12990 20 75 73 65 73 20 74 68 65 20 73 68 61 72 65 64   uses the shared
129a0 0a 2a 2a 20 73 63 68 65 6d 61 2e 20 54 68 69 73  .** schema. This
129b0 20 69 73 20 62 65 63 61 75 73 65 20 65 61 63 68   is because each
129c0 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63   database connec
129d0 74 69 6f 6e 20 72 65 71 75 69 72 65 73 20 69 74  tion requires it
129e0 73 20 6f 77 6e 20 75 6e 69 71 75 65 0a 2a 2a 20  s own unique.** 
129f0 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20  instance of the 
12a00 73 71 6c 69 74 65 33 5f 76 74 61 62 2a 20 68 61  sqlite3_vtab* ha
12a10 6e 64 6c 65 20 75 73 65 64 20 74 6f 20 61 63 63  ndle used to acc
12a20 65 73 73 20 74 68 65 20 76 69 72 74 75 61 6c 20  ess the virtual 
12a30 74 61 62 6c 65 0a 2a 2a 20 69 6d 70 6c 65 6d 65  table.** impleme
12a40 6e 74 61 74 69 6f 6e 2e 20 73 71 6c 69 74 65 33  ntation. sqlite3
12a50 5f 76 74 61 62 2a 20 68 61 6e 64 6c 65 73 20 63  _vtab* handles c
12a60 61 6e 20 6e 6f 74 20 62 65 20 73 68 61 72 65 64  an not be shared
12a70 20 62 65 74 77 65 65 6e 0a 2a 2a 20 64 61 74 61   between.** data
12a80 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 73  base connections
12a90 2c 20 65 76 65 6e 20 77 68 65 6e 20 74 68 65 20  , even when the 
12aa0 72 65 73 74 20 6f 66 20 74 68 65 20 69 6e 2d 6d  rest of the in-m
12ab0 65 6d 6f 72 79 20 64 61 74 61 62 61 73 65 0a 2a  emory database.*
12ac0 2a 20 73 63 68 65 6d 61 20 69 73 20 73 68 61 72  * schema is shar
12ad0 65 64 2c 20 61 73 20 74 68 65 20 69 6d 70 6c 65  ed, as the imple
12ae0 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 74 65 6e 20  mentation often 
12af0 73 74 6f 72 65 73 20 74 68 65 20 64 61 74 61 62  stores the datab
12b00 61 73 65 0a 2a 2a 20 63 6f 6e 6e 65 63 74 69 6f  ase.** connectio
12b10 6e 20 68 61 6e 64 6c 65 20 70 61 73 73 65 64 20  n handle passed 
12b20 74 6f 20 69 74 20 76 69 61 20 74 68 65 20 78 43  to it via the xC
12b30 6f 6e 6e 65 63 74 28 29 20 6f 72 20 78 43 72 65  onnect() or xCre
12b40 61 74 65 28 29 20 6d 65 74 68 6f 64 0a 2a 2a 20  ate() method.** 
12b50 64 75 72 69 6e 67 20 69 6e 69 74 69 61 6c 69 7a  during initializ
12b60 61 74 69 6f 6e 20 69 6e 74 65 72 6e 61 6c 6c 79  ation internally
12b70 2e 20 54 68 69 73 20 64 61 74 61 62 61 73 65 20  . This database 
12b80 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c  connection handl
12b90 65 20 6d 61 79 0a 2a 2a 20 74 68 65 6e 20 62 65  e may.** then be
12ba0 20 75 73 65 64 20 62 79 20 74 68 65 20 76 69 72   used by the vir
12bb0 74 75 61 6c 20 74 61 62 6c 65 20 69 6d 70 6c 65  tual table imple
12bc0 6d 65 6e 74 61 74 69 6f 6e 20 74 6f 20 61 63 63  mentation to acc
12bd0 65 73 73 20 72 65 61 6c 20 74 61 62 6c 65 73 0a  ess real tables.
12be0 2a 2a 20 77 69 74 68 69 6e 20 74 68 65 20 64 61  ** within the da
12bf0 74 61 62 61 73 65 2e 20 53 6f 20 74 68 61 74 20  tabase. So that 
12c00 74 68 65 79 20 61 70 70 65 61 72 20 61 73 20 70  they appear as p
12c10 61 72 74 20 6f 66 20 74 68 65 20 63 61 6c 6c 65  art of the calle
12c20 72 73 0a 2a 2a 20 74 72 61 6e 73 61 63 74 69 6f  rs.** transactio
12c30 6e 2c 20 74 68 65 73 65 20 61 63 63 65 73 73 65  n, these accesse
12c40 73 20 6e 65 65 64 20 74 6f 20 62 65 20 6d 61 64  s need to be mad
12c50 65 20 76 69 61 20 74 68 65 20 73 61 6d 65 20 64  e via the same d
12c60 61 74 61 62 61 73 65 0a 2a 2a 20 63 6f 6e 6e 65  atabase.** conne
12c70 63 74 69 6f 6e 20 61 73 20 74 68 61 74 20 75 73  ction as that us
12c80 65 64 20 74 6f 20 65 78 65 63 75 74 65 20 53 51  ed to execute SQ
12c90 4c 20 6f 70 65 72 61 74 69 6f 6e 73 20 6f 6e 20  L operations on 
12ca0 74 68 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c  the virtual tabl
12cb0 65 2e 0a 2a 2a 0a 2a 2a 20 41 6c 6c 20 56 54 61  e..**.** All VTa
12cc0 62 6c 65 20 6f 62 6a 65 63 74 73 20 74 68 61 74  ble objects that
12cd0 20 63 6f 72 72 65 73 70 6f 6e 64 20 74 6f 20 61   correspond to a
12ce0 20 73 69 6e 67 6c 65 20 74 61 62 6c 65 20 69 6e   single table in
12cf0 20 61 20 73 68 61 72 65 64 0a 2a 2a 20 64 61 74   a shared.** dat
12d00 61 62 61 73 65 20 73 63 68 65 6d 61 20 61 72 65  abase schema are
12d10 20 69 6e 69 74 69 61 6c 6c 79 20 73 74 6f 72 65   initially store
12d20 64 20 69 6e 20 61 20 6c 69 6e 6b 65 64 2d 6c 69  d in a linked-li
12d30 73 74 20 70 6f 69 6e 74 65 64 20 74 6f 20 62 79  st pointed to by
12d40 0a 2a 2a 20 74 68 65 20 54 61 62 6c 65 2e 70 56  .** the Table.pV
12d50 54 61 62 6c 65 20 6d 65 6d 62 65 72 20 76 61 72  Table member var
12d60 69 61 62 6c 65 20 6f 66 20 74 68 65 20 63 6f 72  iable of the cor
12d70 72 65 73 70 6f 6e 64 69 6e 67 20 54 61 62 6c 65  responding Table
12d80 20 6f 62 6a 65 63 74 2e 0a 2a 2a 20 57 68 65 6e   object..** When
12d90 20 61 6e 20 73 71 6c 69 74 65 33 5f 70 72 65 70   an sqlite3_prep
12da0 61 72 65 28 29 20 6f 70 65 72 61 74 69 6f 6e 20  are() operation 
12db0 69 73 20 72 65 71 75 69 72 65 64 20 74 6f 20 61  is required to a
12dc0 63 63 65 73 73 20 74 68 65 20 76 69 72 74 75 61  ccess the virtua
12dd0 6c 0a 2a 2a 20 74 61 62 6c 65 2c 20 69 74 20 73  l.** table, it s
12de0 65 61 72 63 68 65 73 20 74 68 65 20 6c 69 73 74  earches the list
12df0 20 66 6f 72 20 74 68 65 20 56 54 61 62 6c 65 20   for the VTable 
12e00 74 68 61 74 20 63 6f 72 72 65 73 70 6f 6e 64 73  that corresponds
12e10 20 74 6f 20 74 68 65 0a 2a 2a 20 64 61 74 61 62   to the.** datab
12e20 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 64  ase connection d
12e30 6f 69 6e 67 20 74 68 65 20 70 72 65 70 61 72 69  oing the prepari
12e40 6e 67 20 73 6f 20 61 73 20 74 6f 20 75 73 65 20  ng so as to use 
12e50 74 68 65 20 63 6f 72 72 65 63 74 0a 2a 2a 20 73  the correct.** s
12e60 71 6c 69 74 65 33 5f 76 74 61 62 2a 20 68 61 6e  qlite3_vtab* han
12e70 64 6c 65 20 69 6e 20 74 68 65 20 63 6f 6d 70 69  dle in the compi
12e80 6c 65 64 20 71 75 65 72 79 2e 0a 2a 2a 0a 2a 2a  led query..**.**
12e90 20 57 68 65 6e 20 61 6e 20 69 6e 2d 6d 65 6d 6f   When an in-memo
12ea0 72 79 20 54 61 62 6c 65 20 6f 62 6a 65 63 74 20  ry Table object 
12eb0 69 73 20 64 65 6c 65 74 65 64 20 28 66 6f 72 20  is deleted (for 
12ec0 65 78 61 6d 70 6c 65 20 77 68 65 6e 20 74 68 65  example when the
12ed0 0a 2a 2a 20 73 63 68 65 6d 61 20 69 73 20 62 65  .** schema is be
12ee0 69 6e 67 20 72 65 6c 6f 61 64 65 64 20 66 6f 72  ing reloaded for
12ef0 20 73 6f 6d 65 20 72 65 61 73 6f 6e 29 2c 20 74   some reason), t
12f00 68 65 20 56 54 61 62 6c 65 20 6f 62 6a 65 63 74  he VTable object
12f10 73 20 61 72 65 20 6e 6f 74 0a 2a 2a 20 64 65 6c  s are not.** del
12f20 65 74 65 64 20 61 6e 64 20 74 68 65 20 73 71 6c  eted and the sql
12f30 69 74 65 33 5f 76 74 61 62 2a 20 68 61 6e 64 6c  ite3_vtab* handl
12f40 65 73 20 61 72 65 20 6e 6f 74 20 78 44 69 73 63  es are not xDisc
12f50 6f 6e 6e 65 63 74 28 29 65 64 0a 2a 2a 20 69 6d  onnect()ed.** im
12f60 6d 65 64 69 61 74 65 6c 79 2e 20 49 6e 73 74 65  mediately. Inste
12f70 61 64 2c 20 74 68 65 79 20 61 72 65 20 6d 6f 76  ad, they are mov
12f80 65 64 20 66 72 6f 6d 20 74 68 65 20 54 61 62 6c  ed from the Tabl
12f90 65 2e 70 56 54 61 62 6c 65 20 6c 69 73 74 20 74  e.pVTable list t
12fa0 6f 0a 2a 2a 20 61 6e 6f 74 68 65 72 20 6c 69 6e  o.** another lin
12fb0 6b 65 64 20 6c 69 73 74 20 68 65 61 64 65 64 20  ked list headed 
12fc0 62 79 20 74 68 65 20 73 71 6c 69 74 65 33 2e 70  by the sqlite3.p
12fd0 44 69 73 63 6f 6e 6e 65 63 74 20 6d 65 6d 62 65  Disconnect membe
12fe0 72 20 6f 66 20 74 68 65 0a 2a 2a 20 63 6f 72 72  r of the.** corr
12ff0 65 73 70 6f 6e 64 69 6e 67 20 73 71 6c 69 74 65  esponding sqlite
13000 33 20 73 74 72 75 63 74 75 72 65 2e 20 54 68 65  3 structure. The
13010 79 20 61 72 65 20 74 68 65 6e 20 64 65 6c 65 74  y are then delet
13020 65 64 2f 78 44 69 73 63 6f 6e 6e 65 63 74 65 64  ed/xDisconnected
13030 0a 2a 2a 20 6e 65 78 74 20 74 69 6d 65 20 61 20  .** next time a 
13040 73 74 61 74 65 6d 65 6e 74 20 69 73 20 70 72 65  statement is pre
13050 70 61 72 65 64 20 75 73 69 6e 67 20 73 61 69 64  pared using said
13060 20 73 71 6c 69 74 65 33 2a 2e 20 54 68 69 73 20   sqlite3*. This 
13070 69 73 20 64 6f 6e 65 0a 2a 2a 20 74 6f 20 61 76  is done.** to av
13080 6f 69 64 20 64 65 61 64 6c 6f 63 6b 20 69 73 73  oid deadlock iss
13090 75 65 73 20 69 6e 76 6f 6c 76 69 6e 67 20 6d 75  ues involving mu
130a0 6c 74 69 70 6c 65 20 73 71 6c 69 74 65 33 2e 6d  ltiple sqlite3.m
130b0 75 74 65 78 20 6d 75 74 65 78 65 73 2e 0a 2a 2a  utex mutexes..**
130c0 20 52 65 66 65 72 20 74 6f 20 63 6f 6d 6d 65 6e   Refer to commen
130d0 74 73 20 61 62 6f 76 65 20 66 75 6e 63 74 69 6f  ts above functio
130e0 6e 20 73 71 6c 69 74 65 33 56 74 61 62 55 6e 6c  n sqlite3VtabUnl
130f0 6f 63 6b 4c 69 73 74 28 29 20 66 6f 72 20 61 6e  ockList() for an
13100 0a 2a 2a 20 65 78 70 6c 61 6e 61 74 69 6f 6e 20  .** explanation 
13110 61 73 20 74 6f 20 77 68 79 20 69 74 20 69 73 20  as to why it is 
13120 73 61 66 65 20 74 6f 20 61 64 64 20 61 6e 20 65  safe to add an e
13130 6e 74 72 79 20 74 6f 20 61 6e 20 73 71 6c 69 74  ntry to an sqlit
13140 65 33 2e 70 44 69 73 63 6f 6e 6e 65 63 74 0a 2a  e3.pDisconnect.*
13150 2a 20 6c 69 73 74 20 77 69 74 68 6f 75 74 20 68  * list without h
13160 6f 6c 64 69 6e 67 20 74 68 65 20 63 6f 72 72 65  olding the corre
13170 73 70 6f 6e 64 69 6e 67 20 73 71 6c 69 74 65 33  sponding sqlite3
13180 2e 6d 75 74 65 78 20 6d 75 74 65 78 2e 0a 2a 2a  .mutex mutex..**
13190 0a 2a 2a 20 54 68 65 20 6d 65 6d 6f 72 79 20 66  .** The memory f
131a0 6f 72 20 6f 62 6a 65 63 74 73 20 6f 66 20 74 68  or objects of th
131b0 69 73 20 74 79 70 65 20 69 73 20 61 6c 77 61 79  is type is alway
131c0 73 20 61 6c 6c 6f 63 61 74 65 64 20 62 79 0a 2a  s allocated by.*
131d0 2a 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f  * sqlite3DbMallo
131e0 63 28 29 2c 20 75 73 69 6e 67 20 74 68 65 20 63  c(), using the c
131f0 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65  onnection handle
13200 20 73 74 6f 72 65 64 20 69 6e 20 56 54 61 62 6c   stored in VTabl
13210 65 2e 64 62 20 61 73 0a 2a 2a 20 74 68 65 20 66  e.db as.** the f
13220 69 72 73 74 20 61 72 67 75 6d 65 6e 74 2e 0a 2a  irst argument..*
13230 2f 0a 73 74 72 75 63 74 20 56 54 61 62 6c 65 20  /.struct VTable 
13240 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b  {.  sqlite3 *db;
13250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
13260 20 44 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63   Database connec
13270 74 69 6f 6e 20 61 73 73 6f 63 69 61 74 65 64 20  tion associated 
13280 77 69 74 68 20 74 68 69 73 20 74 61 62 6c 65 20  with this table 
13290 2a 2f 0a 20 20 4d 6f 64 75 6c 65 20 2a 70 4d 6f  */.  Module *pMo
132a0 64 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  d;             /
132b0 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 6d 6f 64  * Pointer to mod
132c0 75 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  ule implementati
132d0 6f 6e 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f  on */.  sqlite3_
132e0 76 74 61 62 20 2a 70 56 74 61 62 3b 20 20 20 20  vtab *pVtab;    
132f0 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20    /* Pointer to 
13300 76 74 61 62 20 69 6e 73 74 61 6e 63 65 20 2a 2f  vtab instance */
13310 0a 20 20 69 6e 74 20 6e 52 65 66 3b 20 20 20 20  .  int nRef;    
13320 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
13330 4e 75 6d 62 65 72 20 6f 66 20 70 6f 69 6e 74 65  Number of pointe
13340 72 73 20 74 6f 20 74 68 69 73 20 73 74 72 75 63  rs to this struc
13350 74 75 72 65 20 2a 2f 0a 20 20 75 38 20 62 43 6f  ture */.  u8 bCo
13360 6e 73 74 72 61 69 6e 74 3b 20 20 20 20 20 20 20  nstraint;       
13370 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 63      /* True if c
13380 6f 6e 73 74 72 61 69 6e 74 73 20 61 72 65 20 73  onstraints are s
13390 75 70 70 6f 72 74 65 64 20 2a 2f 0a 20 20 69 6e  upported */.  in
133a0 74 20 69 53 61 76 65 70 6f 69 6e 74 3b 20 20 20  t iSavepoint;   
133b0 20 20 20 20 20 20 20 20 2f 2a 20 44 65 70 74 68          /* Depth
133c0 20 6f 66 20 74 68 65 20 53 41 56 45 50 4f 49 4e   of the SAVEPOIN
133d0 54 20 73 74 61 63 6b 20 2a 2f 0a 20 20 56 54 61  T stack */.  VTa
133e0 62 6c 65 20 2a 70 4e 65 78 74 3b 20 20 20 20 20  ble *pNext;     
133f0 20 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 69         /* Next i
13400 6e 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 28 73  n linked list (s
13410 65 65 20 61 62 6f 76 65 29 20 2a 2f 0a 7d 3b 0a  ee above) */.};.
13420 0a 2f 2a 0a 2a 2a 20 54 68 65 20 73 63 68 65 6d  ./*.** The schem
13430 61 20 66 6f 72 20 65 61 63 68 20 53 51 4c 20 74  a for each SQL t
13440 61 62 6c 65 20 61 6e 64 20 76 69 65 77 20 69 73  able and view is
13450 20 72 65 70 72 65 73 65 6e 74 65 64 20 69 6e 20   represented in 
13460 6d 65 6d 6f 72 79 0a 2a 2a 20 62 79 20 61 6e 20  memory.** by an 
13470 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20  instance of the 
13480 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74  following struct
13490 75 72 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 54  ure..*/.struct T
134a0 61 62 6c 65 20 7b 0a 20 20 63 68 61 72 20 2a 7a  able {.  char *z
134b0 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20 2f 2a  Name;         /*
134c0 20 4e 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62   Name of the tab
134d0 6c 65 20 6f 72 20 76 69 65 77 20 2a 2f 0a 20 20  le or view */.  
134e0 43 6f 6c 75 6d 6e 20 2a 61 43 6f 6c 3b 20 20 20  Column *aCol;   
134f0 20 20 20 20 20 2f 2a 20 49 6e 66 6f 72 6d 61 74       /* Informat
13500 69 6f 6e 20 61 62 6f 75 74 20 65 61 63 68 20 63  ion about each c
13510 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 49 6e 64 65 78  olumn */.  Index
13520 20 2a 70 49 6e 64 65 78 3b 20 20 20 20 20 20 20   *pIndex;       
13530 2f 2a 20 4c 69 73 74 20 6f 66 20 53 51 4c 20 69  /* List of SQL i
13540 6e 64 65 78 65 73 20 6f 6e 20 74 68 69 73 20 74  ndexes on this t
13550 61 62 6c 65 2e 20 2a 2f 0a 20 20 53 65 6c 65 63  able. */.  Selec
13560 74 20 2a 70 53 65 6c 65 63 74 3b 20 20 20 20 20  t *pSelect;     
13570 2f 2a 20 4e 55 4c 4c 20 66 6f 72 20 74 61 62 6c  /* NULL for tabl
13580 65 73 2e 20 20 50 6f 69 6e 74 73 20 74 6f 20 64  es.  Points to d
13590 65 66 69 6e 69 74 69 6f 6e 20 69 66 20 61 20 76  efinition if a v
135a0 69 65 77 2e 20 2a 2f 0a 20 20 46 4b 65 79 20 2a  iew. */.  FKey *
135b0 70 46 4b 65 79 3b 20 20 20 20 20 20 20 20 20 2f  pFKey;         /
135c0 2a 20 4c 69 6e 6b 65 64 20 6c 69 73 74 20 6f 66  * Linked list of
135d0 20 61 6c 6c 20 66 6f 72 65 69 67 6e 20 6b 65 79   all foreign key
135e0 73 20 69 6e 20 74 68 69 73 20 74 61 62 6c 65 20  s in this table 
135f0 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 43 6f 6c 41  */.  char *zColA
13600 66 66 3b 20 20 20 20 20 20 20 2f 2a 20 53 74 72  ff;       /* Str
13610 69 6e 67 20 64 65 66 69 6e 69 6e 67 20 74 68 65  ing defining the
13620 20 61 66 66 69 6e 69 74 79 20 6f 66 20 65 61 63   affinity of eac
13630 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 45 78  h column */.  Ex
13640 70 72 4c 69 73 74 20 2a 70 43 68 65 63 6b 3b 20  prList *pCheck; 
13650 20 20 20 2f 2a 20 41 6c 6c 20 43 48 45 43 4b 20     /* All CHECK 
13660 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f 0a 20  constraints */. 
13670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13680 20 20 20 20 20 20 2f 2a 20 20 20 2e 2e 2e 20 61        /*   ... a
13690 6c 73 6f 20 75 73 65 64 20 61 73 20 63 6f 6c 75  lso used as colu
136a0 6d 6e 20 6e 61 6d 65 20 6c 69 73 74 20 69 6e 20  mn name list in 
136b0 61 20 56 49 45 57 20 2a 2f 0a 20 20 69 6e 74 20  a VIEW */.  int 
136c0 74 6e 75 6d 3b 20 20 20 20 20 20 20 20 20 20 20  tnum;           
136d0 20 2f 2a 20 52 6f 6f 74 20 42 54 72 65 65 20 70   /* Root BTree p
136e0 61 67 65 20 66 6f 72 20 74 68 69 73 20 74 61 62  age for this tab
136f0 6c 65 20 2a 2f 0a 20 20 75 33 32 20 6e 54 61 62  le */.  u32 nTab
13700 52 65 66 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  Ref;         /* 
13710 4e 75 6d 62 65 72 20 6f 66 20 70 6f 69 6e 74 65  Number of pointe
13720 72 73 20 74 6f 20 74 68 69 73 20 54 61 62 6c 65  rs to this Table
13730 20 2a 2f 0a 20 20 75 33 32 20 74 61 62 46 6c 61   */.  u32 tabFla
13740 67 73 3b 20 20 20 20 20 20 20 20 2f 2a 20 4d 61  gs;        /* Ma
13750 73 6b 20 6f 66 20 54 46 5f 2a 20 76 61 6c 75 65  sk of TF_* value
13760 73 20 2a 2f 0a 20 20 69 31 36 20 69 50 4b 65 79  s */.  i16 iPKey
13770 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49  ;           /* I
13780 66 20 6e 6f 74 20 6e 65 67 61 74 69 76 65 2c 20  f not negative, 
13790 75 73 65 20 61 43 6f 6c 5b 69 50 4b 65 79 5d 20  use aCol[iPKey] 
137a0 61 73 20 74 68 65 20 72 6f 77 69 64 20 2a 2f 0a  as the rowid */.
137b0 20 20 69 31 36 20 6e 43 6f 6c 3b 20 20 20 20 20    i16 nCol;     
137c0 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
137d0 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74   of columns in t
137e0 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20 4c  his table */.  L
137f0 6f 67 45 73 74 20 6e 52 6f 77 4c 6f 67 45 73 74  ogEst nRowLogEst
13800 3b 20 20 20 2f 2a 20 45 73 74 69 6d 61 74 65 64  ;   /* Estimated
13810 20 72 6f 77 73 20 69 6e 20 74 61 62 6c 65 20 2d   rows in table -
13820 20 66 72 6f 6d 20 73 71 6c 69 74 65 5f 73 74 61   from sqlite_sta
13830 74 31 20 74 61 62 6c 65 20 2a 2f 0a 20 20 4c 6f  t1 table */.  Lo
13840 67 45 73 74 20 73 7a 54 61 62 52 6f 77 3b 20 20  gEst szTabRow;  
13850 20 20 20 2f 2a 20 45 73 74 69 6d 61 74 65 64 20     /* Estimated 
13860 73 69 7a 65 20 6f 66 20 65 61 63 68 20 74 61 62  size of each tab
13870 6c 65 20 72 6f 77 20 69 6e 20 62 79 74 65 73 20  le row in bytes 
13880 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
13890 5f 45 4e 41 42 4c 45 5f 43 4f 53 54 4d 55 4c 54  _ENABLE_COSTMULT
138a0 0a 20 20 4c 6f 67 45 73 74 20 63 6f 73 74 4d 75  .  LogEst costMu
138b0 6c 74 3b 20 20 20 20 20 2f 2a 20 43 6f 73 74 20  lt;     /* Cost 
138c0 6d 75 6c 74 69 70 6c 69 65 72 20 66 6f 72 20 75  multiplier for u
138d0 73 69 6e 67 20 74 68 69 73 20 74 61 62 6c 65 20  sing this table 
138e0 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 75 38 20 6b  */.#endif.  u8 k
138f0 65 79 43 6f 6e 66 3b 20 20 20 20 20 20 20 20 20  eyConf;         
13900 20 2f 2a 20 57 68 61 74 20 74 6f 20 64 6f 20 69   /* What to do i
13910 6e 20 63 61 73 65 20 6f 66 20 75 6e 69 71 75 65  n case of unique
13920 6e 65 73 73 20 63 6f 6e 66 6c 69 63 74 20 6f 6e  ness conflict on
13930 20 69 50 4b 65 79 20 2a 2f 0a 23 69 66 6e 64 65   iPKey */.#ifnde
13940 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 4c  f SQLITE_OMIT_AL
13950 54 45 52 54 41 42 4c 45 0a 20 20 69 6e 74 20 61  TERTABLE.  int a
13960 64 64 43 6f 6c 4f 66 66 73 65 74 3b 20 20 20 20  ddColOffset;    
13970 2f 2a 20 4f 66 66 73 65 74 20 69 6e 20 43 52 45  /* Offset in CRE
13980 41 54 45 20 54 41 42 4c 45 20 73 74 6d 74 20 74  ATE TABLE stmt t
13990 6f 20 61 64 64 20 61 20 6e 65 77 20 63 6f 6c 75  o add a new colu
139a0 6d 6e 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66  mn */.#endif.#if
139b0 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
139c0 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 20 20  _VIRTUALTABLE.  
139d0 69 6e 74 20 6e 4d 6f 64 75 6c 65 41 72 67 3b 20  int nModuleArg; 
139e0 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
139f0 66 20 61 72 67 75 6d 65 6e 74 73 20 74 6f 20 74  f arguments to t
13a00 68 65 20 6d 6f 64 75 6c 65 20 2a 2f 0a 20 20 63  he module */.  c
13a10 68 61 72 20 2a 2a 61 7a 4d 6f 64 75 6c 65 41 72  har **azModuleAr
13a20 67 3b 20 20 2f 2a 20 30 3a 20 6d 6f 64 75 6c 65  g;  /* 0: module
13a30 20 31 3a 20 73 63 68 65 6d 61 20 32 3a 20 76 74   1: schema 2: vt
13a40 61 62 20 6e 61 6d 65 20 33 2e 2e 2e 3a 20 61 72  ab name 3...: ar
13a50 67 73 20 2a 2f 0a 20 20 56 54 61 62 6c 65 20 2a  gs */.  VTable *
13a60 70 56 54 61 62 6c 65 3b 20 20 20 20 20 2f 2a 20  pVTable;     /* 
13a70 4c 69 73 74 20 6f 66 20 56 54 61 62 6c 65 20 6f  List of VTable o
13a80 62 6a 65 63 74 73 2e 20 2a 2f 0a 23 65 6e 64 69  bjects. */.#endi
13a90 66 0a 20 20 54 72 69 67 67 65 72 20 2a 70 54 72  f.  Trigger *pTr
13aa0 69 67 67 65 72 3b 20 20 20 2f 2a 20 4c 69 73 74  igger;   /* List
13ab0 20 6f 66 20 74 72 69 67 67 65 72 73 20 73 74 6f   of triggers sto
13ac0 72 65 64 20 69 6e 20 70 53 63 68 65 6d 61 20 2a  red in pSchema *
13ad0 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70 53 63 68  /.  Schema *pSch
13ae0 65 6d 61 3b 20 20 20 20 20 2f 2a 20 53 63 68 65  ema;     /* Sche
13af0 6d 61 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73  ma that contains
13b00 20 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20   this table */. 
13b10 20 54 61 62 6c 65 20 2a 70 4e 65 78 74 5a 6f 6d   Table *pNextZom
13b20 62 69 65 3b 20 20 2f 2a 20 4e 65 78 74 20 6f 6e  bie;  /* Next on
13b30 20 74 68 65 20 50 61 72 73 65 2e 70 5a 6f 6d 62   the Parse.pZomb
13b40 69 65 54 61 62 20 6c 69 73 74 20 2a 2f 0a 7d 3b  ieTab list */.};
13b50 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20  ../*.** Allowed 
13b60 76 61 6c 75 65 73 20 66 6f 72 20 54 61 62 6c 65  values for Table
13b70 2e 74 61 62 46 6c 61 67 73 2e 0a 2a 2a 0a 2a 2a  .tabFlags..**.**
13b80 20 54 46 5f 4f 4f 4f 48 69 64 64 65 6e 20 61 70   TF_OOOHidden ap
13b90 70 6c 69 65 73 20 74 6f 20 74 61 62 6c 65 73 20  plies to tables 
13ba0 6f 72 20 76 69 65 77 20 74 68 61 74 20 68 61 76  or view that hav
13bb0 65 20 68 69 64 64 65 6e 20 63 6f 6c 75 6d 6e 73  e hidden columns
13bc0 20 74 68 61 74 20 61 72 65 0a 2a 2a 20 66 6f 6c   that are.** fol
13bd0 6c 6f 77 65 64 20 62 79 20 6e 6f 6e 2d 68 69 64  lowed by non-hid
13be0 64 65 6e 20 63 6f 6c 75 6d 6e 73 2e 20 20 45 78  den columns.  Ex
13bf0 61 6d 70 6c 65 3a 20 20 22 43 52 45 41 54 45 20  ample:  "CREATE 
13c00 56 49 52 54 55 41 4c 20 54 41 42 4c 45 20 78 20  VIRTUAL TABLE x 
13c10 55 53 49 4e 47 0a 2a 2a 20 76 74 61 62 31 28 61  USING.** vtab1(a
13c20 20 48 49 44 44 45 4e 2c 20 62 29 3b 22 2e 20 20   HIDDEN, b);".  
13c30 53 69 6e 63 65 20 22 62 22 20 69 73 20 61 20 6e  Since "b" is a n
13c40 6f 6e 2d 68 69 64 64 65 6e 20 63 6f 6c 75 6d 6e  on-hidden column
13c50 20 62 75 74 20 22 61 22 20 69 73 20 68 69 64 64   but "a" is hidd
13c60 65 6e 2c 0a 2a 2a 20 74 68 65 20 54 46 5f 4f 4f  en,.** the TF_OO
13c70 4f 48 69 64 64 65 6e 20 61 74 74 72 69 62 75 74  OHidden attribut
13c80 65 20 77 6f 75 6c 64 20 61 70 70 6c 79 20 69 6e  e would apply in
13c90 20 74 68 69 73 20 63 61 73 65 2e 20 20 53 75 63   this case.  Suc
13ca0 68 20 74 61 62 6c 65 73 20 72 65 71 75 69 72 65  h tables require
13cb0 0a 2a 2a 20 73 70 65 63 69 61 6c 20 68 61 6e 64  .** special hand
13cc0 6c 69 6e 67 20 64 75 72 69 6e 67 20 49 4e 53 45  ling during INSE
13cd0 52 54 20 70 72 6f 63 65 73 73 69 6e 67 2e 0a 2a  RT processing..*
13ce0 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 52 65 61  /.#define TF_Rea
13cf0 64 6f 6e 6c 79 20 20 20 20 20 20 20 20 30 78 30  donly        0x0
13d00 30 30 31 20 20 20 20 2f 2a 20 52 65 61 64 2d 6f  001    /* Read-o
13d10 6e 6c 79 20 73 79 73 74 65 6d 20 74 61 62 6c 65  nly system table
13d20 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 45   */.#define TF_E
13d30 70 68 65 6d 65 72 61 6c 20 20 20 20 20 20 20 30  phemeral       0
13d40 78 30 30 30 32 20 20 20 20 2f 2a 20 41 6e 20 65  x0002    /* An e
13d50 70 68 65 6d 65 72 61 6c 20 74 61 62 6c 65 20 2a  phemeral table *
13d60 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 48 61 73  /.#define TF_Has
13d70 50 72 69 6d 61 72 79 4b 65 79 20 20 20 30 78 30  PrimaryKey   0x0
13d80 30 30 34 20 20 20 20 2f 2a 20 54 61 62 6c 65 20  004    /* Table 
13d90 68 61 73 20 61 20 70 72 69 6d 61 72 79 20 6b 65  has a primary ke
13da0 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f  y */.#define TF_
13db0 41 75 74 6f 69 6e 63 72 65 6d 65 6e 74 20 20 20  Autoincrement   
13dc0 30 78 30 30 30 38 20 20 20 20 2f 2a 20 49 6e 74  0x0008    /* Int
13dd0 65 67 65 72 20 70 72 69 6d 61 72 79 20 6b 65 79  eger primary key
13de0 20 69 73 20 61 75 74 6f 69 6e 63 72 65 6d 65 6e   is autoincremen
13df0 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f  t */.#define TF_
13e00 48 61 73 53 74 61 74 31 20 20 20 20 20 20 20 20  HasStat1        
13e10 30 78 30 30 31 30 20 20 20 20 2f 2a 20 6e 52 6f  0x0010    /* nRo
13e20 77 4c 6f 67 45 73 74 20 73 65 74 20 66 72 6f 6d  wLogEst set from
13e30 20 73 71 6c 69 74 65 5f 73 74 61 74 31 20 2a 2f   sqlite_stat1 */
13e40 0a 23 64 65 66 69 6e 65 20 54 46 5f 57 69 74 68  .#define TF_With
13e50 6f 75 74 52 6f 77 69 64 20 20 20 20 30 78 30 30  outRowid    0x00
13e60 32 30 20 20 20 20 2f 2a 20 4e 6f 20 72 6f 77 69  20    /* No rowi
13e70 64 2e 20 20 50 52 49 4d 41 52 59 20 4b 45 59 20  d.  PRIMARY KEY 
13e80 69 73 20 74 68 65 20 6b 65 79 20 2a 2f 0a 23 64  is the key */.#d
13e90 65 66 69 6e 65 20 54 46 5f 4e 6f 56 69 73 69 62  efine TF_NoVisib
13ea0 6c 65 52 6f 77 69 64 20 20 30 78 30 30 34 30 20  leRowid  0x0040 
13eb0 20 20 20 2f 2a 20 4e 6f 20 75 73 65 72 2d 76 69     /* No user-vi
13ec0 73 69 62 6c 65 20 22 72 6f 77 69 64 22 20 63 6f  sible "rowid" co
13ed0 6c 75 6d 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  lumn */.#define 
13ee0 54 46 5f 4f 4f 4f 48 69 64 64 65 6e 20 20 20 20  TF_OOOHidden    
13ef0 20 20 20 30 78 30 30 38 30 20 20 20 20 2f 2a 20     0x0080    /* 
13f00 4f 75 74 2d 6f 66 2d 4f 72 64 65 72 20 68 69 64  Out-of-Order hid
13f10 64 65 6e 20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 23  den columns */.#
13f20 64 65 66 69 6e 65 20 54 46 5f 53 74 61 74 73 55  define TF_StatsU
13f30 73 65 64 20 20 20 20 20 20 20 30 78 30 31 30 30  sed       0x0100
13f40 20 20 20 20 2f 2a 20 51 75 65 72 79 20 70 6c 61      /* Query pla
13f50 6e 6e 65 72 20 64 65 63 69 73 69 6f 6e 73 20 61  nner decisions a
13f60 66 66 65 63 74 65 64 20 62 79 0a 20 20 20 20 20  ffected by.     
13f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13f80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13f90 2a 2a 20 49 6e 64 65 78 2e 61 69 52 6f 77 4c 6f  ** Index.aiRowLo
13fa0 67 45 73 74 5b 5d 20 76 61 6c 75 65 73 20 2a 2f  gEst[] values */
13fb0 0a 23 64 65 66 69 6e 65 20 54 46 5f 48 61 73 4e  .#define TF_HasN
13fc0 6f 74 4e 75 6c 6c 20 20 20 20 20 20 30 78 30 32  otNull      0x02
13fd0 30 30 20 20 20 20 2f 2a 20 43 6f 6e 74 61 69 6e  00    /* Contain
13fe0 73 20 4e 4f 54 20 4e 55 4c 4c 20 63 6f 6e 73 74  s NOT NULL const
13ff0 72 61 69 6e 74 73 20 2a 2f 0a 23 64 65 66 69 6e  raints */.#defin
14000 65 20 54 46 5f 53 68 61 64 6f 77 20 20 20 20 20  e TF_Shadow     
14010 20 20 20 20 20 30 78 30 34 30 30 20 20 20 20 2f       0x0400    /
14020 2a 20 54 72 75 65 20 66 6f 72 20 61 20 73 68 61  * True for a sha
14030 64 6f 77 20 74 61 62 6c 65 20 2a 2f 0a 0a 2f 2a  dow table */../*
14040 0a 2a 2a 20 54 65 73 74 20 74 6f 20 73 65 65 20  .** Test to see 
14050 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 61  whether or not a
14060 20 74 61 62 6c 65 20 69 73 20 61 20 76 69 72 74   table is a virt
14070 75 61 6c 20 74 61 62 6c 65 2e 20 20 54 68 69 73  ual table.  This
14080 20 69 73 0a 2a 2a 20 64 6f 6e 65 20 61 73 20 61   is.** done as a
14090 20 6d 61 63 72 6f 20 73 6f 20 74 68 61 74 20 69   macro so that i
140a0 74 20 77 69 6c 6c 20 62 65 20 6f 70 74 69 6d 69  t will be optimi
140b0 7a 65 64 20 6f 75 74 20 77 68 65 6e 20 76 69 72  zed out when vir
140c0 74 75 61 6c 0a 2a 2a 20 74 61 62 6c 65 20 73 75  tual.** table su
140d0 70 70 6f 72 74 20 69 73 20 6f 6d 69 74 74 65 64  pport is omitted
140e0 20 66 72 6f 6d 20 74 68 65 20 62 75 69 6c 64 2e   from the build.
140f0 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  .*/.#ifndef SQLI
14100 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
14110 41 42 4c 45 0a 23 20 20 64 65 66 69 6e 65 20 49  ABLE.#  define I
14120 73 56 69 72 74 75 61 6c 28 58 29 20 20 20 20 20  sVirtual(X)     
14130 20 28 28 58 29 2d 3e 6e 4d 6f 64 75 6c 65 41 72   ((X)->nModuleAr
14140 67 29 0a 23 65 6c 73 65 0a 23 20 20 64 65 66 69  g).#else.#  defi
14150 6e 65 20 49 73 56 69 72 74 75 61 6c 28 58 29 20  ne IsVirtual(X) 
14160 20 20 20 20 20 30 0a 23 65 6e 64 69 66 0a 0a 2f       0.#endif../
14170 2a 0a 2a 2a 20 4d 61 63 72 6f 73 20 74 6f 20 64  *.** Macros to d
14180 65 74 65 72 6d 69 6e 65 20 69 66 20 61 20 63 6f  etermine if a co
14190 6c 75 6d 6e 20 69 73 20 68 69 64 64 65 6e 2e 20  lumn is hidden. 
141a0 20 49 73 4f 72 64 69 6e 61 72 79 48 69 64 64 65   IsOrdinaryHidde
141b0 6e 43 6f 6c 75 6d 6e 28 29 0a 2a 2a 20 6f 6e 6c  nColumn().** onl
141c0 79 20 77 6f 72 6b 73 20 66 6f 72 20 6e 6f 6e 2d  y works for non-
141d0 76 69 72 74 75 61 6c 20 74 61 62 6c 65 73 20 28  virtual tables (
141e0 6f 72 64 69 6e 61 72 79 20 74 61 62 6c 65 73 20  ordinary tables 
141f0 61 6e 64 20 76 69 65 77 73 29 20 61 6e 64 20 69  and views) and i
14200 73 0a 2a 2a 20 61 6c 77 61 79 73 20 66 61 6c 73  s.** always fals
14210 65 20 75 6e 6c 65 73 73 20 53 51 4c 49 54 45 5f  e unless SQLITE_
14220 45 4e 41 42 4c 45 5f 48 49 44 44 45 4e 5f 43 4f  ENABLE_HIDDEN_CO
14230 4c 55 4d 4e 53 20 69 73 20 64 65 66 69 6e 65 64  LUMNS is defined
14240 2e 20 20 54 68 65 0a 2a 2a 20 49 73 48 69 64 64  .  The.** IsHidd
14250 65 6e 43 6f 6c 75 6d 6e 28 29 20 6d 61 63 72 6f  enColumn() macro
14260 20 69 73 20 67 65 6e 65 72 61 6c 20 70 75 72 70   is general purp
14270 6f 73 65 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69  ose..*/.#if defi
14280 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c  ned(SQLITE_ENABL
14290 45 5f 48 49 44 44 45 4e 5f 43 4f 4c 55 4d 4e 53  E_HIDDEN_COLUMNS
142a0 29 0a 23 20 20 64 65 66 69 6e 65 20 49 73 48 69  ).#  define IsHi
142b0 64 64 65 6e 43 6f 6c 75 6d 6e 28 58 29 20 20 20  ddenColumn(X)   
142c0 20 20 20 20 20 20 28 28 28 58 29 2d 3e 63 6f 6c        (((X)->col
142d0 46 6c 61 67 73 20 26 20 43 4f 4c 46 4c 41 47 5f  Flags & COLFLAG_
142e0 48 49 44 44 45 4e 29 21 3d 30 29 0a 23 20 20 64  HIDDEN)!=0).#  d
142f0 65 66 69 6e 65 20 49 73 4f 72 64 69 6e 61 72 79  efine IsOrdinary
14300 48 69 64 64 65 6e 43 6f 6c 75 6d 6e 28 58 29 20  HiddenColumn(X) 
14310 28 28 28 58 29 2d 3e 63 6f 6c 46 6c 61 67 73 20  (((X)->colFlags 
14320 26 20 43 4f 4c 46 4c 41 47 5f 48 49 44 44 45 4e  & COLFLAG_HIDDEN
14330 29 21 3d 30 29 0a 23 65 6c 69 66 20 21 64 65 66  )!=0).#elif !def
14340 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54  ined(SQLITE_OMIT
14350 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 29 0a 23  _VIRTUALTABLE).#
14360 20 20 64 65 66 69 6e 65 20 49 73 48 69 64 64 65    define IsHidde
14370 6e 43 6f 6c 75 6d 6e 28 58 29 20 20 20 20 20 20  nColumn(X)      
14380 20 20 20 28 28 28 58 29 2d 3e 63 6f 6c 46 6c 61     (((X)->colFla
14390 67 73 20 26 20 43 4f 4c 46 4c 41 47 5f 48 49 44  gs & COLFLAG_HID
143a0 44 45 4e 29 21 3d 30 29 0a 23 20 20 64 65 66 69  DEN)!=0).#  defi
143b0 6e 65 20 49 73 4f 72 64 69 6e 61 72 79 48 69 64  ne IsOrdinaryHid
143c0 64 65 6e 43 6f 6c 75 6d 6e 28 58 29 20 30 0a 23  denColumn(X) 0.#
143d0 65 6c 73 65 0a 23 20 20 64 65 66 69 6e 65 20 49  else.#  define I
143e0 73 48 69 64 64 65 6e 43 6f 6c 75 6d 6e 28 58 29  sHiddenColumn(X)
143f0 20 20 20 20 20 20 20 20 20 30 0a 23 20 20 64 65           0.#  de
14400 66 69 6e 65 20 49 73 4f 72 64 69 6e 61 72 79 48  fine IsOrdinaryH
14410 69 64 64 65 6e 43 6f 6c 75 6d 6e 28 58 29 20 30  iddenColumn(X) 0
14420 0a 23 65 6e 64 69 66 0a 0a 0a 2f 2a 20 44 6f 65  .#endif.../* Doe
14430 73 20 74 68 65 20 74 61 62 6c 65 20 68 61 76 65  s the table have
14440 20 61 20 72 6f 77 69 64 20 2a 2f 0a 23 64 65 66   a rowid */.#def
14450 69 6e 65 20 48 61 73 52 6f 77 69 64 28 58 29 20  ine HasRowid(X) 
14460 20 20 20 20 28 28 28 58 29 2d 3e 74 61 62 46 6c      (((X)->tabFl
14470 61 67 73 20 26 20 54 46 5f 57 69 74 68 6f 75 74  ags & TF_Without
14480 52 6f 77 69 64 29 3d 3d 30 29 0a 23 64 65 66 69  Rowid)==0).#defi
14490 6e 65 20 56 69 73 69 62 6c 65 52 6f 77 69 64 28  ne VisibleRowid(
144a0 58 29 20 28 28 28 58 29 2d 3e 74 61 62 46 6c 61  X) (((X)->tabFla
144b0 67 73 20 26 20 54 46 5f 4e 6f 56 69 73 69 62 6c  gs & TF_NoVisibl
144c0 65 52 6f 77 69 64 29 3d 3d 30 29 0a 0a 2f 2a 0a  eRowid)==0)../*.
144d0 2a 2a 20 45 61 63 68 20 66 6f 72 65 69 67 6e 20  ** Each foreign 
144e0 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 20 69  key constraint i
144f0 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  s an instance of
14500 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   the following s
14510 74 72 75 63 74 75 72 65 2e 0a 2a 2a 0a 2a 2a 20  tructure..**.** 
14520 41 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 69 73  A foreign key is
14530 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68   associated with
14540 20 74 77 6f 20 74 61 62 6c 65 73 2e 20 20 54 68   two tables.  Th
14550 65 20 22 66 72 6f 6d 22 20 74 61 62 6c 65 20 69  e "from" table i
14560 73 0a 2a 2a 20 74 68 65 20 74 61 62 6c 65 20 74  s.** the table t
14570 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 74 68 65  hat contains the
14580 20 52 45 46 45 52 45 4e 43 45 53 20 63 6c 61 75   REFERENCES clau
14590 73 65 20 74 68 61 74 20 63 72 65 61 74 65 73 20  se that creates 
145a0 74 68 65 20 66 6f 72 65 69 67 6e 0a 2a 2a 20 6b  the foreign.** k
145b0 65 79 2e 20 20 54 68 65 20 22 74 6f 22 20 74 61  ey.  The "to" ta
145c0 62 6c 65 20 69 73 20 74 68 65 20 74 61 62 6c 65  ble is the table
145d0 20 74 68 61 74 20 69 73 20 6e 61 6d 65 64 20 69   that is named i
145e0 6e 20 74 68 65 20 52 45 46 45 52 45 4e 43 45 53  n the REFERENCES
145f0 20 63 6c 61 75 73 65 2e 0a 2a 2a 20 43 6f 6e 73   clause..** Cons
14600 69 64 65 72 20 74 68 69 73 20 65 78 61 6d 70 6c  ider this exampl
14610 65 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 43 52 45  e:.**.**     CRE
14620 41 54 45 20 54 41 42 4c 45 20 65 78 31 28 0a 2a  ATE TABLE ex1(.*
14630 2a 20 20 20 20 20 20 20 61 20 49 4e 54 45 47 45  *       a INTEGE
14640 52 20 50 52 49 4d 41 52 59 20 4b 45 59 2c 0a 2a  R PRIMARY KEY,.*
14650 2a 20 20 20 20 20 20 20 62 20 49 4e 54 45 47 45  *       b INTEGE
14660 52 20 43 4f 4e 53 54 52 41 49 4e 54 20 66 6b 31  R CONSTRAINT fk1
14670 20 52 45 46 45 52 45 4e 43 45 53 20 65 78 32 28   REFERENCES ex2(
14680 78 29 0a 2a 2a 20 20 20 20 20 29 3b 0a 2a 2a 0a  x).**     );.**.
14690 2a 2a 20 46 6f 72 20 66 6f 72 65 69 67 6e 20 6b  ** For foreign k
146a0 65 79 20 22 66 6b 31 22 2c 20 74 68 65 20 66 72  ey "fk1", the fr
146b0 6f 6d 2d 74 61 62 6c 65 20 69 73 20 22 65 78 31  om-table is "ex1
146c0 22 20 61 6e 64 20 74 68 65 20 74 6f 2d 74 61 62  " and the to-tab
146d0 6c 65 20 69 73 20 22 65 78 32 22 2e 0a 2a 2a 20  le is "ex2"..** 
146e0 45 71 75 69 76 61 6c 65 6e 74 20 6e 61 6d 65 73  Equivalent names
146f0 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 66 72 6f 6d  :.**.**     from
14700 2d 74 61 62 6c 65 20 3d 3d 20 63 68 69 6c 64 2d  -table == child-
14710 74 61 62 6c 65 0a 2a 2a 20 20 20 20 20 20 20 74  table.**       t
14720 6f 2d 74 61 62 6c 65 20 3d 3d 20 70 61 72 65 6e  o-table == paren
14730 74 2d 74 61 62 6c 65 0a 2a 2a 0a 2a 2a 20 45 61  t-table.**.** Ea
14740 63 68 20 52 45 46 45 52 45 4e 43 45 53 20 63 6c  ch REFERENCES cl
14750 61 75 73 65 20 67 65 6e 65 72 61 74 65 73 20 61  ause generates a
14760 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  n instance of th
14770 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75  e following stru
14780 63 74 75 72 65 0a 2a 2a 20 77 68 69 63 68 20 69  cture.** which i
14790 73 20 61 74 74 61 63 68 65 64 20 74 6f 20 74 68  s attached to th
147a0 65 20 66 72 6f 6d 2d 74 61 62 6c 65 2e 20 20 54  e from-table.  T
147b0 68 65 20 74 6f 2d 74 61 62 6c 65 20 6e 65 65 64  he to-table need
147c0 20 6e 6f 74 20 65 78 69 73 74 20 77 68 65 6e 0a   not exist when.
147d0 2a 2a 20 74 68 65 20 66 72 6f 6d 2d 74 61 62 6c  ** the from-tabl
147e0 65 20 69 73 20 63 72 65 61 74 65 64 2e 20 20 54  e is created.  T
147f0 68 65 20 65 78 69 73 74 65 6e 63 65 20 6f 66 20  he existence of 
14800 74 68 65 20 74 6f 2d 74 61 62 6c 65 20 69 73 20  the to-table is 
14810 6e 6f 74 20 63 68 65 63 6b 65 64 2e 0a 2a 2a 0a  not checked..**.
14820 2a 2a 20 54 68 65 20 6c 69 73 74 20 6f 66 20 61  ** The list of a
14830 6c 6c 20 70 61 72 65 6e 74 73 20 66 6f 72 20 63  ll parents for c
14840 68 69 6c 64 20 54 61 62 6c 65 20 58 20 69 73 20  hild Table X is 
14850 68 65 6c 64 20 61 74 20 58 2e 70 46 4b 65 79 2e  held at X.pFKey.
14860 0a 2a 2a 0a 2a 2a 20 41 20 6c 69 73 74 20 6f 66  .**.** A list of
14870 20 61 6c 6c 20 63 68 69 6c 64 72 65 6e 20 66 6f   all children fo
14880 72 20 61 20 74 61 62 6c 65 20 6e 61 6d 65 64 20  r a table named 
14890 5a 20 28 77 68 69 63 68 20 6d 69 67 68 74 20 6e  Z (which might n
148a0 6f 74 20 65 76 65 6e 20 65 78 69 73 74 29 0a 2a  ot even exist).*
148b0 2a 20 69 73 20 68 65 6c 64 20 69 6e 20 53 63 68  * is held in Sch
148c0 65 6d 61 2e 66 6b 65 79 48 61 73 68 20 77 69 74  ema.fkeyHash wit
148d0 68 20 61 20 68 61 73 68 20 6b 65 79 20 6f 66 20  h a hash key of 
148e0 5a 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 46 4b 65  Z..*/.struct FKe
148f0 79 20 7b 0a 20 20 54 61 62 6c 65 20 2a 70 46 72  y {.  Table *pFr
14900 6f 6d 3b 20 20 20 20 20 2f 2a 20 54 61 62 6c 65  om;     /* Table
14910 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20   containing the 
14920 52 45 46 45 52 45 4e 43 45 53 20 63 6c 61 75 73  REFERENCES claus
14930 65 20 28 61 6b 61 3a 20 43 68 69 6c 64 29 20 2a  e (aka: Child) *
14940 2f 0a 20 20 46 4b 65 79 20 2a 70 4e 65 78 74 46  /.  FKey *pNextF
14950 72 6f 6d 3b 20 20 2f 2a 20 4e 65 78 74 20 46 4b  rom;  /* Next FK
14960 65 79 20 77 69 74 68 20 74 68 65 20 73 61 6d 65  ey with the same
14970 20 69 6e 20 70 46 72 6f 6d 2e 20 4e 65 78 74 20   in pFrom. Next 
14980 70 61 72 65 6e 74 20 6f 66 20 70 46 72 6f 6d 20  parent of pFrom 
14990 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 54 6f 3b 20  */.  char *zTo; 
149a0 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f         /* Name o
149b0 66 20 74 61 62 6c 65 20 74 68 61 74 20 74 68 65  f table that the
149c0 20 6b 65 79 20 70 6f 69 6e 74 73 20 74 6f 20 28   key points to (
149d0 61 6b 61 3a 20 50 61 72 65 6e 74 29 20 2a 2f 0a  aka: Parent) */.
149e0 20 20 46 4b 65 79 20 2a 70 4e 65 78 74 54 6f 3b    FKey *pNextTo;
149f0 20 20 20 20 2f 2a 20 4e 65 78 74 20 77 69 74 68      /* Next with
14a00 20 74 68 65 20 73 61 6d 65 20 7a 54 6f 2e 20 4e   the same zTo. N
14a10 65 78 74 20 63 68 69 6c 64 20 6f 66 20 7a 54 6f  ext child of zTo
14a20 2e 20 2a 2f 0a 20 20 46 4b 65 79 20 2a 70 50 72  . */.  FKey *pPr
14a30 65 76 54 6f 3b 20 20 20 20 2f 2a 20 50 72 65 76  evTo;    /* Prev
14a40 69 6f 75 73 20 77 69 74 68 20 74 68 65 20 73 61  ious with the sa
14a50 6d 65 20 7a 54 6f 20 2a 2f 0a 20 20 69 6e 74 20  me zTo */.  int 
14a60 6e 43 6f 6c 3b 20 20 20 20 20 20 20 20 20 2f 2a  nCol;         /*
14a70 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d   Number of colum
14a80 6e 73 20 69 6e 20 74 68 69 73 20 6b 65 79 20 2a  ns in this key *
14a90 2f 0a 20 20 2f 2a 20 45 56 3a 20 52 2d 33 30 33  /.  /* EV: R-303
14aa0 32 33 2d 32 31 39 31 37 20 2a 2f 0a 20 20 75 38  23-21917 */.  u8
14ab0 20 69 73 44 65 66 65 72 72 65 64 3b 20 20 20 20   isDeferred;    
14ac0 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 63 6f     /* True if co
14ad0 6e 73 74 72 61 69 6e 74 20 63 68 65 63 6b 69 6e  nstraint checkin
14ae0 67 20 69 73 20 64 65 66 65 72 72 65 64 20 74 69  g is deferred ti
14af0 6c 6c 20 43 4f 4d 4d 49 54 20 2a 2f 0a 20 20 75  ll COMMIT */.  u
14b00 38 20 61 41 63 74 69 6f 6e 5b 32 5d 3b 20 20 20  8 aAction[2];   
14b10 20 20 20 20 20 2f 2a 20 4f 4e 20 44 45 4c 45 54       /* ON DELET
14b20 45 20 61 6e 64 20 4f 4e 20 55 50 44 41 54 45 20  E and ON UPDATE 
14b30 61 63 74 69 6f 6e 73 2c 20 72 65 73 70 65 63 74  actions, respect
14b40 69 76 65 6c 79 20 2a 2f 0a 20 20 54 72 69 67 67  ively */.  Trigg
14b50 65 72 20 2a 61 70 54 72 69 67 67 65 72 5b 32 5d  er *apTrigger[2]
14b60 3b 2f 2a 20 54 72 69 67 67 65 72 73 20 66 6f 72  ;/* Triggers for
14b70 20 61 41 63 74 69 6f 6e 5b 5d 20 61 63 74 69 6f   aAction[] actio
14b80 6e 73 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 73  ns */.  struct s
14b90 43 6f 6c 4d 61 70 20 7b 20 20 20 20 20 20 2f 2a  ColMap {      /*
14ba0 20 4d 61 70 70 69 6e 67 20 6f 66 20 63 6f 6c 75   Mapping of colu
14bb0 6d 6e 73 20 69 6e 20 70 46 72 6f 6d 20 74 6f 20  mns in pFrom to 
14bc0 63 6f 6c 75 6d 6e 73 20 69 6e 20 7a 54 6f 20 2a  columns in zTo *
14bd0 2f 0a 20 20 20 20 69 6e 74 20 69 46 72 6f 6d 3b  /.    int iFrom;
14be0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49              /* I
14bf0 6e 64 65 78 20 6f 66 20 63 6f 6c 75 6d 6e 20 69  ndex of column i
14c00 6e 20 70 46 72 6f 6d 20 2a 2f 0a 20 20 20 20 63  n pFrom */.    c
14c10 68 61 72 20 2a 7a 43 6f 6c 3b 20 20 20 20 20 20  har *zCol;      
14c20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20       /* Name of 
14c30 63 6f 6c 75 6d 6e 20 69 6e 20 7a 54 6f 2e 20 20  column in zTo.  
14c40 49 66 20 4e 55 4c 4c 20 75 73 65 20 50 52 49 4d  If NULL use PRIM
14c50 41 52 59 20 4b 45 59 20 2a 2f 0a 20 20 7d 20 61  ARY KEY */.  } a
14c60 43 6f 6c 5b 31 5d 3b 20 20 20 20 20 20 20 20 20  Col[1];         
14c70 20 20 20 2f 2a 20 4f 6e 65 20 65 6e 74 72 79 20     /* One entry 
14c80 66 6f 72 20 65 61 63 68 20 6f 66 20 6e 43 6f 6c  for each of nCol
14c90 20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 7d 3b 0a 0a   columns */.};..
14ca0 2f 2a 0a 2a 2a 20 53 51 4c 69 74 65 20 73 75 70  /*.** SQLite sup
14cb0 70 6f 72 74 73 20 6d 61 6e 79 20 64 69 66 66 65  ports many diffe
14cc0 72 65 6e 74 20 77 61 79 73 20 74 6f 20 72 65 73  rent ways to res
14cd0 6f 6c 76 65 20 61 20 63 6f 6e 73 74 72 61 69 6e  olve a constrain
14ce0 74 0a 2a 2a 20 65 72 72 6f 72 2e 20 20 52 4f 4c  t.** error.  ROL
14cf0 4c 42 41 43 4b 20 70 72 6f 63 65 73 73 69 6e 67  LBACK processing
14d00 20 6d 65 61 6e 73 20 74 68 61 74 20 61 20 63 6f   means that a co
14d10 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69  nstraint violati
14d20 6f 6e 0a 2a 2a 20 63 61 75 73 65 73 20 74 68 65  on.** causes the
14d30 20 6f 70 65 72 61 74 69 6f 6e 20 69 6e 20 70 72   operation in pr
14d40 6f 63 65 73 73 20 74 6f 20 66 61 69 6c 20 61 6e  ocess to fail an
14d50 64 20 66 6f 72 20 74 68 65 20 63 75 72 72 65 6e  d for the curren
14d60 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 0a 2a 2a  t transaction.**
14d70 20 74 6f 20 62 65 20 72 6f 6c 6c 65 64 20 62 61   to be rolled ba
14d80 63 6b 2e 20 20 41 42 4f 52 54 20 70 72 6f 63 65  ck.  ABORT proce
14d90 73 73 69 6e 67 20 6d 65 61 6e 73 20 74 68 65 20  ssing means the 
14da0 6f 70 65 72 61 74 69 6f 6e 20 69 6e 20 70 72 6f  operation in pro
14db0 63 65 73 73 0a 2a 2a 20 66 61 69 6c 73 20 61 6e  cess.** fails an
14dc0 64 20 61 6e 79 20 70 72 69 6f 72 20 63 68 61 6e  d any prior chan
14dd0 67 65 73 20 66 72 6f 6d 20 74 68 61 74 20 6f 6e  ges from that on
14de0 65 20 6f 70 65 72 61 74 69 6f 6e 20 61 72 65 20  e operation are 
14df0 62 61 63 6b 65 64 20 6f 75 74 2c 0a 2a 2a 20 62  backed out,.** b
14e00 75 74 20 74 68 65 20 74 72 61 6e 73 61 63 74 69  ut the transacti
14e10 6f 6e 20 69 73 20 6e 6f 74 20 72 6f 6c 6c 65 64  on is not rolled
14e20 20 62 61 63 6b 2e 20 20 46 41 49 4c 20 70 72 6f   back.  FAIL pro
14e30 63 65 73 73 69 6e 67 20 6d 65 61 6e 73 20 74 68  cessing means th
14e40 61 74 0a 2a 2a 20 74 68 65 20 6f 70 65 72 61 74  at.** the operat
14e50 69 6f 6e 20 69 6e 20 70 72 6f 67 72 65 73 73 20  ion in progress 
14e60 73 74 6f 70 73 20 61 6e 64 20 72 65 74 75 72 6e  stops and return
14e70 73 20 61 6e 20 65 72 72 6f 72 20 63 6f 64 65 2e  s an error code.
14e80 20 20 42 75 74 20 70 72 69 6f 72 0a 2a 2a 20 63    But prior.** c
14e90 68 61 6e 67 65 73 20 64 75 65 20 74 6f 20 74 68  hanges due to th
14ea0 65 20 73 61 6d 65 20 6f 70 65 72 61 74 69 6f 6e  e same operation
14eb0 20 61 72 65 20 6e 6f 74 20 62 61 63 6b 65 64 20   are not backed 
14ec0 6f 75 74 20 61 6e 64 20 6e 6f 20 72 6f 6c 6c 62  out and no rollb
14ed0 61 63 6b 0a 2a 2a 20 6f 63 63 75 72 73 2e 20 20  ack.** occurs.  
14ee0 49 47 4e 4f 52 45 20 6d 65 61 6e 73 20 74 68 61  IGNORE means tha
14ef0 74 20 74 68 65 20 70 61 72 74 69 63 75 6c 61 72  t the particular
14f00 20 72 6f 77 20 74 68 61 74 20 63 61 75 73 65 64   row that caused
14f10 20 74 68 65 20 63 6f 6e 73 74 72 61 69 6e 74 0a   the constraint.
14f20 2a 2a 20 65 72 72 6f 72 20 69 73 20 6e 6f 74 20  ** error is not 
14f30 69 6e 73 65 72 74 65 64 20 6f 72 20 75 70 64 61  inserted or upda
14f40 74 65 64 2e 20 20 50 72 6f 63 65 73 73 69 6e 67  ted.  Processing
14f50 20 63 6f 6e 74 69 6e 75 65 73 20 61 6e 64 20 6e   continues and n
14f60 6f 20 65 72 72 6f 72 0a 2a 2a 20 69 73 20 72 65  o error.** is re
14f70 74 75 72 6e 65 64 2e 20 20 52 45 50 4c 41 43 45  turned.  REPLACE
14f80 20 6d 65 61 6e 73 20 74 68 61 74 20 70 72 65 65   means that pree
14f90 78 69 73 74 69 6e 67 20 64 61 74 61 62 61 73 65  xisting database
14fa0 20 72 6f 77 73 20 74 68 61 74 20 63 61 75 73 65   rows that cause
14fb0 64 0a 2a 2a 20 61 20 55 4e 49 51 55 45 20 63 6f  d.** a UNIQUE co
14fc0 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69  nstraint violati
14fd0 6f 6e 20 61 72 65 20 72 65 6d 6f 76 65 64 20 73  on are removed s
14fe0 6f 20 74 68 61 74 20 74 68 65 20 6e 65 77 20 69  o that the new i
14ff0 6e 73 65 72 74 20 6f 72 0a 2a 2a 20 75 70 64 61  nsert or.** upda
15000 74 65 20 63 61 6e 20 70 72 6f 63 65 65 64 2e 20  te can proceed. 
15010 20 50 72 6f 63 65 73 73 69 6e 67 20 63 6f 6e 74   Processing cont
15020 69 6e 75 65 73 20 61 6e 64 20 6e 6f 20 65 72 72  inues and no err
15030 6f 72 20 69 73 20 72 65 70 6f 72 74 65 64 2e 0a  or is reported..
15040 2a 2a 0a 2a 2a 20 52 45 53 54 52 49 43 54 2c 20  **.** RESTRICT, 
15050 53 45 54 4e 55 4c 4c 2c 20 61 6e 64 20 43 41 53  SETNULL, and CAS
15060 43 41 44 45 20 61 63 74 69 6f 6e 73 20 61 70 70  CADE actions app
15070 6c 79 20 6f 6e 6c 79 20 74 6f 20 66 6f 72 65 69  ly only to forei
15080 67 6e 20 6b 65 79 73 2e 0a 2a 2a 20 52 45 53 54  gn keys..** REST
15090 52 49 43 54 20 69 73 20 74 68 65 20 73 61 6d 65  RICT is the same
150a0 20 61 73 20 41 42 4f 52 54 20 66 6f 72 20 49 4d   as ABORT for IM
150b0 4d 45 44 49 41 54 45 20 66 6f 72 65 69 67 6e 20  MEDIATE foreign 
150c0 6b 65 79 73 20 61 6e 64 20 74 68 65 0a 2a 2a 20  keys and the.** 
150d0 73 61 6d 65 20 61 73 20 52 4f 4c 4c 42 41 43 4b  same as ROLLBACK
150e0 20 66 6f 72 20 44 45 46 45 52 52 45 44 20 6b 65   for DEFERRED ke
150f0 79 73 2e 20 20 53 45 54 4e 55 4c 4c 20 6d 65 61  ys.  SETNULL mea
15100 6e 73 20 74 68 61 74 20 74 68 65 20 66 6f 72 65  ns that the fore
15110 69 67 6e 0a 2a 2a 20 6b 65 79 20 69 73 20 73 65  ign.** key is se
15120 74 20 74 6f 20 4e 55 4c 4c 2e 20 20 43 41 53 43  t to NULL.  CASC
15130 41 44 45 20 6d 65 61 6e 73 20 74 68 61 74 20 61  ADE means that a
15140 20 44 45 4c 45 54 45 20 6f 72 20 55 50 44 41 54   DELETE or UPDAT
15150 45 20 6f 66 20 74 68 65 0a 2a 2a 20 72 65 66 65  E of the.** refe
15160 72 65 6e 63 65 64 20 74 61 62 6c 65 20 72 6f 77  renced table row
15170 20 69 73 20 70 72 6f 70 61 67 61 74 65 64 20 69   is propagated i
15180 6e 74 6f 20 74 68 65 20 72 6f 77 20 74 68 61 74  nto the row that
15190 20 68 6f 6c 64 73 20 74 68 65 0a 2a 2a 20 66 6f   holds the.** fo
151a0 72 65 69 67 6e 20 6b 65 79 2e 0a 2a 2a 0a 2a 2a  reign key..**.**
151b0 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   The following s
151c0 79 6d 62 6f 6c 69 63 20 76 61 6c 75 65 73 20 61  ymbolic values a
151d0 72 65 20 75 73 65 64 20 74 6f 20 72 65 63 6f 72  re used to recor
151e0 64 20 77 68 69 63 68 20 74 79 70 65 0a 2a 2a 20  d which type.** 
151f0 6f 66 20 61 63 74 69 6f 6e 20 74 6f 20 74 61 6b  of action to tak
15200 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45  e..*/.#define OE
15210 5f 4e 6f 6e 65 20 20 20 20 20 30 20 20 20 2f 2a  _None     0   /*
15220 20 54 68 65 72 65 20 69 73 20 6e 6f 20 63 6f 6e   There is no con
15230 73 74 72 61 69 6e 74 20 74 6f 20 63 68 65 63 6b  straint to check
15240 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 52   */.#define OE_R
15250 6f 6c 6c 62 61 63 6b 20 31 20 20 20 2f 2a 20 46  ollback 1   /* F
15260 61 69 6c 20 74 68 65 20 6f 70 65 72 61 74 69 6f  ail the operatio
15270 6e 20 61 6e 64 20 72 6f 6c 6c 62 61 63 6b 20 74  n and rollback t
15280 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 2a  he transaction *
15290 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 41 62 6f  /.#define OE_Abo
152a0 72 74 20 20 20 20 32 20 20 20 2f 2a 20 42 61 63  rt    2   /* Bac
152b0 6b 20 6f 75 74 20 63 68 61 6e 67 65 73 20 62 75  k out changes bu
152c0 74 20 64 6f 20 6e 6f 20 72 6f 6c 6c 62 61 63 6b  t do no rollback
152d0 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 2a 2f 0a   transaction */.
152e0 23 64 65 66 69 6e 65 20 4f 45 5f 46 61 69 6c 20  #define OE_Fail 
152f0 20 20 20 20 33 20 20 20 2f 2a 20 53 74 6f 70 20      3   /* Stop 
15300 74 68 65 20 6f 70 65 72 61 74 69 6f 6e 20 62 75  the operation bu
15310 74 20 6c 65 61 76 65 20 61 6c 6c 20 70 72 69 6f  t leave all prio
15320 72 20 63 68 61 6e 67 65 73 20 2a 2f 0a 23 64 65  r changes */.#de
15330 66 69 6e 65 20 4f 45 5f 49 67 6e 6f 72 65 20 20  fine OE_Ignore  
15340 20 34 20 20 20 2f 2a 20 49 67 6e 6f 72 65 20 74   4   /* Ignore t
15350 68 65 20 65 72 72 6f 72 2e 20 44 6f 20 6e 6f 74  he error. Do not
15360 20 64 6f 20 74 68 65 20 49 4e 53 45 52 54 20 6f   do the INSERT o
15370 72 20 55 50 44 41 54 45 20 2a 2f 0a 23 64 65 66  r UPDATE */.#def
15380 69 6e 65 20 4f 45 5f 52 65 70 6c 61 63 65 20 20  ine OE_Replace  
15390 35 20 20 20 2f 2a 20 44 65 6c 65 74 65 20 65 78  5   /* Delete ex
153a0 69 73 74 69 6e 67 20 72 65 63 6f 72 64 2c 20 74  isting record, t
153b0 68 65 6e 20 64 6f 20 49 4e 53 45 52 54 20 6f 72  hen do INSERT or
153c0 20 55 50 44 41 54 45 20 2a 2f 0a 23 64 65 66 69   UPDATE */.#defi
153d0 6e 65 20 4f 45 5f 55 70 64 61 74 65 20 20 20 36  ne OE_Update   6
153e0 20 20 20 2f 2a 20 50 72 6f 63 65 73 73 20 61 73     /* Process as
153f0 20 61 20 44 4f 20 55 50 44 41 54 45 20 69 6e 20   a DO UPDATE in 
15400 61 6e 20 75 70 73 65 72 74 20 2a 2f 0a 23 64 65  an upsert */.#de
15410 66 69 6e 65 20 4f 45 5f 52 65 73 74 72 69 63 74  fine OE_Restrict
15420 20 37 20 20 20 2f 2a 20 4f 45 5f 41 62 6f 72 74   7   /* OE_Abort
15430 20 66 6f 72 20 49 4d 4d 45 44 49 41 54 45 2c 20   for IMMEDIATE, 
15440 4f 45 5f 52 6f 6c 6c 62 61 63 6b 20 66 6f 72 20  OE_Rollback for 
15450 44 45 46 45 52 52 45 44 20 2a 2f 0a 23 64 65 66  DEFERRED */.#def
15460 69 6e 65 20 4f 45 5f 53 65 74 4e 75 6c 6c 20 20  ine OE_SetNull  
15470 38 20 20 20 2f 2a 20 53 65 74 20 74 68 65 20 66  8   /* Set the f
15480 6f 72 65 69 67 6e 20 6b 65 79 20 76 61 6c 75 65  oreign key value
15490 20 74 6f 20 4e 55 4c 4c 20 2a 2f 0a 23 64 65 66   to NULL */.#def
154a0 69 6e 65 20 4f 45 5f 53 65 74 44 66 6c 74 20 20  ine OE_SetDflt  
154b0 39 20 20 20 2f 2a 20 53 65 74 20 74 68 65 20 66  9   /* Set the f
154c0 6f 72 65 69 67 6e 20 6b 65 79 20 76 61 6c 75 65  oreign key value
154d0 20 74 6f 20 69 74 73 20 64 65 66 61 75 6c 74 20   to its default 
154e0 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 43 61  */.#define OE_Ca
154f0 73 63 61 64 65 20 20 31 30 20 20 2f 2a 20 43 61  scade  10  /* Ca
15500 73 63 61 64 65 20 74 68 65 20 63 68 61 6e 67 65  scade the change
15510 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f  s */.#define OE_
15520 44 65 66 61 75 6c 74 20 20 31 31 20 20 2f 2a 20  Default  11  /* 
15530 44 6f 20 77 68 61 74 65 76 65 72 20 74 68 65 20  Do whatever the 
15540 64 65 66 61 75 6c 74 20 61 63 74 69 6f 6e 20 69  default action i
15550 73 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20  s */.../*.** An 
15560 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20  instance of the 
15570 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74  following struct
15580 75 72 65 20 69 73 20 70 61 73 73 65 64 20 61 73  ure is passed as
15590 20 74 68 65 20 66 69 72 73 74 0a 2a 2a 20 61 72   the first.** ar
155a0 67 75 6d 65 6e 74 20 74 6f 20 73 71 6c 69 74 65  gument to sqlite
155b0 33 56 64 62 65 4b 65 79 43 6f 6d 70 61 72 65 20  3VdbeKeyCompare 
155c0 61 6e 64 20 69 73 20 75 73 65 64 20 74 6f 20 63  and is used to c
155d0 6f 6e 74 72 6f 6c 20 74 68 65 0a 2a 2a 20 63 6f  ontrol the.** co
155e0 6d 70 61 72 69 73 6f 6e 20 6f 66 20 74 68 65 20  mparison of the 
155f0 74 77 6f 20 69 6e 64 65 78 20 6b 65 79 73 2e 0a  two index keys..
15600 2a 2a 0a 2a 2a 20 4e 6f 74 65 20 74 68 61 74 20  **.** Note that 
15610 61 53 6f 72 74 4f 72 64 65 72 5b 5d 20 61 6e 64  aSortOrder[] and
15620 20 61 43 6f 6c 6c 5b 5d 20 68 61 76 65 20 6e 46   aColl[] have nF
15630 69 65 6c 64 2b 31 20 73 6c 6f 74 73 2e 20 20 54  ield+1 slots.  T
15640 68 65 72 65 0a 2a 2a 20 61 72 65 20 6e 46 69 65  here.** are nFie
15650 6c 64 20 73 6c 6f 74 73 20 66 6f 72 20 74 68 65  ld slots for the
15660 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 61 6e 20 69   columns of an i
15670 6e 64 65 78 20 74 68 65 6e 20 6f 6e 65 20 65 78  ndex then one ex
15680 74 72 61 20 73 6c 6f 74 0a 2a 2a 20 66 6f 72 20  tra slot.** for 
15690 74 68 65 20 72 6f 77 69 64 20 61 74 20 74 68 65  the rowid at the
156a0 20 65 6e 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20   end..*/.struct 
156b0 4b 65 79 49 6e 66 6f 20 7b 0a 20 20 75 33 32 20  KeyInfo {.  u32 
156c0 6e 52 65 66 3b 20 20 20 20 20 20 20 20 20 20 20  nRef;           
156d0 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 72 65 66  /* Number of ref
156e0 65 72 65 6e 63 65 73 20 74 6f 20 74 68 69 73 20  erences to this 
156f0 4b 65 79 49 6e 66 6f 20 6f 62 6a 65 63 74 20 2a  KeyInfo object *
15700 2f 0a 20 20 75 38 20 65 6e 63 3b 20 20 20 20 20  /.  u8 enc;     
15710 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78 74 20          /* Text 
15720 65 6e 63 6f 64 69 6e 67 20 2d 20 6f 6e 65 20 6f  encoding - one o
15730 66 20 74 68 65 20 53 51 4c 49 54 45 5f 55 54 46  f the SQLITE_UTF
15740 2a 20 76 61 6c 75 65 73 20 2a 2f 0a 20 20 75 31  * values */.  u1
15750 36 20 6e 4b 65 79 46 69 65 6c 64 3b 20 20 20 20  6 nKeyField;    
15760 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6b    /* Number of k
15770 65 79 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68  ey columns in th
15780 65 20 69 6e 64 65 78 20 2a 2f 0a 20 20 75 31 36  e index */.  u16
15790 20 6e 41 6c 6c 46 69 65 6c 64 3b 20 20 20 20 20   nAllField;     
157a0 20 2f 2a 20 54 6f 74 61 6c 20 63 6f 6c 75 6d 6e   /* Total column
157b0 73 2c 20 69 6e 63 6c 75 64 69 6e 67 20 6b 65 79  s, including key
157c0 20 70 6c 75 73 20 6f 74 68 65 72 73 20 2a 2f 0a   plus others */.
157d0 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 20 20    sqlite3 *db;  
157e0 20 20 20 20 20 20 2f 2a 20 54 68 65 20 64 61 74        /* The dat
157f0 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  abase connection
15800 20 2a 2f 0a 20 20 75 38 20 2a 61 53 6f 72 74 4f   */.  u8 *aSortO
15810 72 64 65 72 3b 20 20 20 20 20 2f 2a 20 53 6f 72  rder;     /* Sor
15820 74 20 6f 72 64 65 72 20 66 6f 72 20 65 61 63 68  t order for each
15830 20 63 6f 6c 75 6d 6e 2e 20 2a 2f 0a 20 20 43 6f   column. */.  Co
15840 6c 6c 53 65 71 20 2a 61 43 6f 6c 6c 5b 31 5d 3b  llSeq *aColl[1];
15850 20 20 2f 2a 20 43 6f 6c 6c 61 74 69 6e 67 20 73    /* Collating s
15860 65 71 75 65 6e 63 65 20 66 6f 72 20 65 61 63 68  equence for each
15870 20 74 65 72 6d 20 6f 66 20 74 68 65 20 6b 65 79   term of the key
15880 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68   */.};../*.** Th
15890 69 73 20 6f 62 6a 65 63 74 20 68 6f 6c 64 73 20  is object holds 
158a0 61 20 72 65 63 6f 72 64 20 77 68 69 63 68 20 68  a record which h
158b0 61 73 20 62 65 65 6e 20 70 61 72 73 65 64 20 6f  as been parsed o
158c0 75 74 20 69 6e 74 6f 20 69 6e 64 69 76 69 64 75  ut into individu
158d0 61 6c 0a 2a 2a 20 66 69 65 6c 64 73 2c 20 66 6f  al.** fields, fo
158e0 72 20 74 68 65 20 70 75 72 70 6f 73 65 73 20 6f  r the purposes o
158f0 66 20 64 6f 69 6e 67 20 61 20 63 6f 6d 70 61 72  f doing a compar
15900 69 73 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 41 20 72 65  ison..**.** A re
15910 63 6f 72 64 20 69 73 20 61 6e 20 6f 62 6a 65 63  cord is an objec
15920 74 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20  t that contains 
15930 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 66 69 65 6c  one or more fiel
15940 64 73 20 6f 66 20 64 61 74 61 2e 0a 2a 2a 20 52  ds of data..** R
15950 65 63 6f 72 64 73 20 61 72 65 20 75 73 65 64 20  ecords are used 
15960 74 6f 20 73 74 6f 72 65 20 74 68 65 20 63 6f 6e  to store the con
15970 74 65 6e 74 20 6f 66 20 61 20 74 61 62 6c 65 20  tent of a table 
15980 72 6f 77 20 61 6e 64 20 74 6f 20 73 74 6f 72 65  row and to store
15990 0a 2a 2a 20 74 68 65 20 6b 65 79 20 6f 66 20 61  .** the key of a
159a0 6e 20 69 6e 64 65 78 2e 20 20 41 20 62 6c 6f 62  n index.  A blob
159b0 20 65 6e 63 6f 64 69 6e 67 20 6f 66 20 61 20 72   encoding of a r
159c0 65 63 6f 72 64 20 69 73 20 63 72 65 61 74 65 64  ecord is created
159d0 20 62 79 0a 2a 2a 20 74 68 65 20 4f 50 5f 4d 61   by.** the OP_Ma
159e0 6b 65 52 65 63 6f 72 64 20 6f 70 63 6f 64 65 20  keRecord opcode 
159f0 6f 66 20 74 68 65 20 56 44 42 45 20 61 6e 64 20  of the VDBE and 
15a00 69 73 20 64 69 73 61 73 73 65 6d 62 6c 65 64 20  is disassembled 
15a10 62 79 20 74 68 65 0a 2a 2a 20 4f 50 5f 43 6f 6c  by the.** OP_Col
15a20 75 6d 6e 20 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a  umn opcode..**.*
15a30 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  * An instance of
15a40 20 74 68 69 73 20 6f 62 6a 65 63 74 20 73 65 72   this object ser
15a50 76 65 73 20 61 73 20 61 20 22 6b 65 79 22 20 66  ves as a "key" f
15a60 6f 72 20 64 6f 69 6e 67 20 61 20 73 65 61 72 63  or doing a searc
15a70 68 20 6f 6e 0a 2a 2a 20 61 6e 20 69 6e 64 65 78  h on.** an index
15a80 20 62 2b 74 72 65 65 2e 20 54 68 65 20 67 6f 61   b+tree. The goa
15a90 6c 20 6f 66 20 74 68 65 20 73 65 61 72 63 68 20  l of the search 
15aa0 69 73 20 74 6f 20 66 69 6e 64 20 74 68 65 20 65  is to find the e
15ab0 6e 74 72 79 20 74 68 61 74 0a 2a 2a 20 69 73 20  ntry that.** is 
15ac0 63 6c 6f 73 65 64 20 74 6f 20 74 68 65 20 6b 65  closed to the ke
15ad0 79 20 64 65 73 63 72 69 62 65 64 20 62 79 20 74  y described by t
15ae0 68 69 73 20 6f 62 6a 65 63 74 2e 20 20 54 68 69  his object.  Thi
15af0 73 20 6f 62 6a 65 63 74 20 6d 69 67 68 74 20 68  s object might h
15b00 6f 6c 64 0a 2a 2a 20 6a 75 73 74 20 61 20 70 72  old.** just a pr
15b10 65 66 69 78 20 6f 66 20 74 68 65 20 6b 65 79 2e  efix of the key.
15b20 20 20 54 68 65 20 6e 75 6d 62 65 72 20 6f 66 20    The number of 
15b30 66 69 65 6c 64 73 20 69 73 20 67 69 76 65 6e 20  fields is given 
15b40 62 79 0a 2a 2a 20 70 4b 65 79 49 6e 66 6f 2d 3e  by.** pKeyInfo->
15b50 6e 46 69 65 6c 64 2e 0a 2a 2a 0a 2a 2a 20 54 68  nField..**.** Th
15b60 65 20 72 31 20 61 6e 64 20 72 32 20 66 69 65 6c  e r1 and r2 fiel
15b70 64 73 20 61 72 65 20 74 68 65 20 76 61 6c 75 65  ds are the value
15b80 73 20 74 6f 20 72 65 74 75 72 6e 20 69 66 20 74  s to return if t
15b90 68 69 73 20 6b 65 79 20 69 73 20 6c 65 73 73 20  his key is less 
15ba0 74 68 61 6e 0a 2a 2a 20 6f 72 20 67 72 65 61 74  than.** or great
15bb0 65 72 20 74 68 61 6e 20 61 20 6b 65 79 20 69 6e  er than a key in
15bc0 20 74 68 65 20 62 74 72 65 65 2c 20 72 65 73 70   the btree, resp
15bd0 65 63 74 69 76 65 6c 79 2e 20 20 54 68 65 73 65  ectively.  These
15be0 20 61 72 65 20 6e 6f 72 6d 61 6c 6c 79 0a 2a 2a   are normally.**
15bf0 20 2d 31 20 61 6e 64 20 2b 31 20 72 65 73 70 65   -1 and +1 respe
15c00 63 74 69 76 65 6c 79 2c 20 62 75 74 20 6d 69 67  ctively, but mig
15c10 68 74 20 62 65 20 69 6e 76 65 72 74 65 64 20 74  ht be inverted t
15c20 6f 20 2b 31 20 61 6e 64 20 2d 31 20 69 66 20 74  o +1 and -1 if t
15c30 68 65 20 62 2d 74 72 65 65 0a 2a 2a 20 69 73 20  he b-tree.** is 
15c40 69 6e 20 44 45 53 43 20 6f 72 64 65 72 2e 0a 2a  in DESC order..*
15c50 2a 0a 2a 2a 20 54 68 65 20 6b 65 79 20 63 6f 6d  *.** The key com
15c60 70 61 72 69 73 6f 6e 20 66 75 6e 63 74 69 6f 6e  parison function
15c70 73 20 61 63 74 75 61 6c 6c 79 20 72 65 74 75 72  s actually retur
15c80 6e 20 64 65 66 61 75 6c 74 5f 72 63 20 77 68 65  n default_rc whe
15c90 6e 20 74 68 65 79 20 66 69 6e 64 0a 2a 2a 20 61  n they find.** a
15ca0 6e 20 65 71 75 61 6c 73 20 63 6f 6d 70 61 72 69  n equals compari
15cb0 73 6f 6e 2e 20 20 64 65 66 61 75 6c 74 5f 72 63  son.  default_rc
15cc0 20 63 61 6e 20 62 65 20 2d 31 2c 20 30 2c 20 6f   can be -1, 0, o
15cd0 72 20 2b 31 2e 20 20 49 66 20 74 68 65 72 65 20  r +1.  If there 
15ce0 61 72 65 0a 2a 2a 20 6d 75 6c 74 69 70 6c 65 20  are.** multiple 
15cf0 65 6e 74 72 69 65 73 20 69 6e 20 74 68 65 20 62  entries in the b
15d00 2d 74 72 65 65 20 77 69 74 68 20 74 68 65 20 73  -tree with the s
15d10 61 6d 65 20 6b 65 79 20 28 77 68 65 6e 20 6f 6e  ame key (when on
15d20 6c 79 20 6c 6f 6f 6b 69 6e 67 0a 2a 2a 20 61 74  ly looking.** at
15d30 20 74 68 65 20 66 69 72 73 74 20 70 4b 65 79 49   the first pKeyI
15d40 6e 66 6f 2d 3e 6e 46 69 65 6c 64 73 2c 29 20 74  nfo->nFields,) t
15d50 68 65 6e 20 64 65 66 61 75 6c 74 5f 72 63 20 63  hen default_rc c
15d60 61 6e 20 62 65 20 73 65 74 20 74 6f 20 2d 31 20  an be set to -1 
15d70 74 6f 0a 2a 2a 20 63 61 75 73 65 20 74 68 65 20  to.** cause the 
15d80 73 65 61 72 63 68 20 74 6f 20 66 69 6e 64 20 74  search to find t
15d90 68 65 20 6c 61 73 74 20 6d 61 74 63 68 2c 20 6f  he last match, o
15da0 72 20 2b 31 20 74 6f 20 63 61 75 73 65 20 74 68  r +1 to cause th
15db0 65 20 73 65 61 72 63 68 20 74 6f 0a 2a 2a 20 66  e search to.** f
15dc0 69 6e 64 20 74 68 65 20 66 69 72 73 74 20 6d 61  ind the first ma
15dd0 74 63 68 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6b  tch..**.** The k
15de0 65 79 20 63 6f 6d 70 61 72 69 73 6f 6e 20 66 75  ey comparison fu
15df0 6e 63 74 69 6f 6e 73 20 77 69 6c 6c 20 73 65 74  nctions will set
15e00 20 65 71 53 65 65 6e 20 74 6f 20 74 72 75 65 20   eqSeen to true 
15e10 69 66 20 74 68 65 79 20 65 76 65 72 0a 2a 2a 20  if they ever.** 
15e20 67 65 74 20 61 6e 64 20 65 71 75 61 6c 20 72 65  get and equal re
15e30 73 75 6c 74 73 20 77 68 65 6e 20 63 6f 6d 70 61  sults when compa
15e40 72 69 6e 67 20 74 68 69 73 20 73 74 72 75 63 74  ring this struct
15e50 75 72 65 20 74 6f 20 61 20 62 2d 74 72 65 65 20  ure to a b-tree 
15e60 72 65 63 6f 72 64 2e 0a 2a 2a 20 57 68 65 6e 20  record..** When 
15e70 64 65 66 61 75 6c 74 5f 72 63 21 3d 30 2c 20 74  default_rc!=0, t
15e80 68 65 20 73 65 61 72 63 68 20 6d 69 67 68 74 20  he search might 
15e90 65 6e 64 20 75 70 20 6f 6e 20 74 68 65 20 72 65  end up on the re
15ea0 63 6f 72 64 20 69 6d 6d 65 64 69 61 74 65 6c 79  cord immediately
15eb0 0a 2a 2a 20 62 65 66 6f 72 65 20 74 68 65 20 66  .** before the f
15ec0 69 72 73 74 20 6d 61 74 63 68 20 6f 72 20 69 6d  irst match or im
15ed0 6d 65 64 69 61 74 65 6c 79 20 61 66 74 65 72 20  mediately after 
15ee0 74 68 65 20 6c 61 73 74 20 6d 61 74 63 68 2e 20  the last match. 
15ef0 20 54 68 65 0a 2a 2a 20 65 71 53 65 65 6e 20 66   The.** eqSeen f
15f00 69 65 6c 64 20 77 69 6c 6c 20 69 6e 64 69 63 61  ield will indica
15f10 74 65 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f  te whether or no
15f20 74 20 61 6e 20 65 78 61 63 74 20 6d 61 74 63 68  t an exact match
15f30 20 65 78 69 73 74 73 20 69 6e 20 74 68 65 0a 2a   exists in the.*
15f40 2a 20 62 2d 74 72 65 65 2e 0a 2a 2f 0a 73 74 72  * b-tree..*/.str
15f50 75 63 74 20 55 6e 70 61 63 6b 65 64 52 65 63 6f  uct UnpackedReco
15f60 72 64 20 7b 0a 20 20 4b 65 79 49 6e 66 6f 20 2a  rd {.  KeyInfo *
15f70 70 4b 65 79 49 6e 66 6f 3b 20 20 2f 2a 20 43 6f  pKeyInfo;  /* Co
15f80 6c 6c 61 74 69 6f 6e 20 61 6e 64 20 73 6f 72 74  llation and sort
15f90 2d 6f 72 64 65 72 20 69 6e 66 6f 72 6d 61 74 69  -order informati
15fa0 6f 6e 20 2a 2f 0a 20 20 4d 65 6d 20 2a 61 4d 65  on */.  Mem *aMe
15fb0 6d 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56  m;          /* V
15fc0 61 6c 75 65 73 20 2a 2f 0a 20 20 75 31 36 20 6e  alues */.  u16 n
15fd0 46 69 65 6c 64 3b 20 20 20 20 20 20 20 20 20 2f  Field;         /
15fe0 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 6e 74 72  * Number of entr
15ff0 69 65 73 20 69 6e 20 61 70 4d 65 6d 5b 5d 20 2a  ies in apMem[] *
16000 2f 0a 20 20 69 38 20 64 65 66 61 75 6c 74 5f 72  /.  i8 default_r
16010 63 3b 20 20 20 20 20 20 2f 2a 20 43 6f 6d 70 61  c;      /* Compa
16020 72 69 73 6f 6e 20 72 65 73 75 6c 74 20 69 66 20  rison result if 
16030 6b 65 79 73 20 61 72 65 20 65 71 75 61 6c 20 2a  keys are equal *
16040 2f 0a 20 20 75 38 20 65 72 72 43 6f 64 65 3b 20  /.  u8 errCode; 
16050 20 20 20 20 20 20 20 20 2f 2a 20 45 72 72 6f 72          /* Error
16060 20 64 65 74 65 63 74 65 64 20 62 79 20 78 52 65   detected by xRe
16070 63 6f 72 64 43 6f 6d 70 61 72 65 20 28 43 4f 52  cordCompare (COR
16080 52 55 50 54 20 6f 72 20 4e 4f 4d 45 4d 29 20 2a  RUPT or NOMEM) *
16090 2f 0a 20 20 69 38 20 72 31 3b 20 20 20 20 20 20  /.  i8 r1;      
160a0 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65          /* Value
160b0 20 74 6f 20 72 65 74 75 72 6e 20 69 66 20 28 6c   to return if (l
160c0 68 73 20 3c 20 72 68 73 29 20 2a 2f 0a 20 20 69  hs < rhs) */.  i
160d0 38 20 72 32 3b 20 20 20 20 20 20 20 20 20 20 20  8 r2;           
160e0 20 20 20 2f 2a 20 56 61 6c 75 65 20 74 6f 20 72     /* Value to r
160f0 65 74 75 72 6e 20 69 66 20 28 6c 68 73 20 3e 20  eturn if (lhs > 
16100 72 68 73 29 20 2a 2f 0a 20 20 75 38 20 65 71 53  rhs) */.  u8 eqS
16110 65 65 6e 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  een;          /*
16120 20 54 72 75 65 20 69 66 20 61 6e 20 65 71 75 61   True if an equa
16130 6c 69 74 79 20 63 6f 6d 70 61 72 69 73 6f 6e 20  lity comparison 
16140 68 61 73 20 62 65 65 6e 20 73 65 65 6e 20 2a 2f  has been seen */
16150 0a 7d 3b 0a 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68  .};.../*.** Each
16160 20 53 51 4c 20 69 6e 64 65 78 20 69 73 20 72 65   SQL index is re
16170 70 72 65 73 65 6e 74 65 64 20 69 6e 20 6d 65 6d  presented in mem
16180 6f 72 79 20 62 79 20 61 6e 0a 2a 2a 20 69 6e 73  ory by an.** ins
16190 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c  tance of the fol
161a0 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65  lowing structure
161b0 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f 6c 75  ..**.** The colu
161c0 6d 6e 73 20 6f 66 20 74 68 65 20 74 61 62 6c 65  mns of the table
161d0 20 74 68 61 74 20 61 72 65 20 74 6f 20 62 65 20   that are to be 
161e0 69 6e 64 65 78 65 64 20 61 72 65 20 64 65 73 63  indexed are desc
161f0 72 69 62 65 64 0a 2a 2a 20 62 79 20 74 68 65 20  ribed.** by the 
16200 61 69 43 6f 6c 75 6d 6e 5b 5d 20 66 69 65 6c 64  aiColumn[] field
16210 20 6f 66 20 74 68 69 73 20 73 74 72 75 63 74 75   of this structu
16220 72 65 2e 20 20 46 6f 72 20 65 78 61 6d 70 6c 65  re.  For example
16230 2c 20 73 75 70 70 6f 73 65 0a 2a 2a 20 77 65 20  , suppose.** we 
16240 68 61 76 65 20 74 68 65 20 66 6f 6c 6c 6f 77 69  have the followi
16250 6e 67 20 74 61 62 6c 65 20 61 6e 64 20 69 6e 64  ng table and ind
16260 65 78 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 43 52  ex:.**.**     CR
16270 45 41 54 45 20 54 41 42 4c 45 20 45 78 31 28 63  EATE TABLE Ex1(c
16280 31 20 69 6e 74 2c 20 63 32 20 69 6e 74 2c 20 63  1 int, c2 int, c
16290 33 20 74 65 78 74 29 3b 0a 2a 2a 20 20 20 20 20  3 text);.**     
162a0 43 52 45 41 54 45 20 49 4e 44 45 58 20 45 78 32  CREATE INDEX Ex2
162b0 20 4f 4e 20 45 78 31 28 63 33 2c 63 31 29 3b 0a   ON Ex1(c3,c1);.
162c0 2a 2a 0a 2a 2a 20 49 6e 20 74 68 65 20 54 61 62  **.** In the Tab
162d0 6c 65 20 73 74 72 75 63 74 75 72 65 20 64 65 73  le structure des
162e0 63 72 69 62 69 6e 67 20 45 78 31 2c 20 6e 43 6f  cribing Ex1, nCo
162f0 6c 3d 3d 33 20 62 65 63 61 75 73 65 20 74 68 65  l==3 because the
16300 72 65 20 61 72 65 0a 2a 2a 20 74 68 72 65 65 20  re are.** three 
16310 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 74  columns in the t
16320 61 62 6c 65 2e 20 20 49 6e 20 74 68 65 20 49 6e  able.  In the In
16330 64 65 78 20 73 74 72 75 63 74 75 72 65 20 64 65  dex structure de
16340 73 63 72 69 62 69 6e 67 0a 2a 2a 20 45 78 32 2c  scribing.** Ex2,
16350 20 6e 43 6f 6c 75 6d 6e 3d 3d 32 20 73 69 6e 63   nColumn==2 sinc
16360 65 20 32 20 6f 66 20 74 68 65 20 33 20 63 6f 6c  e 2 of the 3 col
16370 75 6d 6e 73 20 6f 66 20 45 78 31 20 61 72 65 20  umns of Ex1 are 
16380 69 6e 64 65 78 65 64 2e 0a 2a 2a 20 54 68 65 20  indexed..** The 
16390 76 61 6c 75 65 20 6f 66 20 61 69 43 6f 6c 75 6d  value of aiColum
163a0 6e 20 69 73 20 7b 32 2c 20 30 7d 2e 20 20 61 69  n is {2, 0}.  ai
163b0 43 6f 6c 75 6d 6e 5b 30 5d 3d 3d 32 20 62 65 63  Column[0]==2 bec
163c0 61 75 73 65 20 74 68 65 0a 2a 2a 20 66 69 72 73  ause the.** firs
163d0 74 20 63 6f 6c 75 6d 6e 20 74 6f 20 62 65 20 69  t column to be i
163e0 6e 64 65 78 65 64 20 28 63 33 29 20 68 61 73 20  ndexed (c3) has 
163f0 61 6e 20 69 6e 64 65 78 20 6f 66 20 32 20 69 6e  an index of 2 in
16400 20 45 78 31 2e 61 43 6f 6c 5b 5d 2e 0a 2a 2a 20   Ex1.aCol[]..** 
16410 54 68 65 20 73 65 63 6f 6e 64 20 63 6f 6c 75 6d  The second colum
16420 6e 20 74 6f 20 62 65 20 69 6e 64 65 78 65 64 20  n to be indexed 
16430 28 63 31 29 20 68 61 73 20 61 6e 20 69 6e 64 65  (c1) has an inde
16440 78 20 6f 66 20 30 20 69 6e 0a 2a 2a 20 45 78 31  x of 0 in.** Ex1
16450 2e 61 43 6f 6c 5b 5d 2c 20 68 65 6e 63 65 20 45  .aCol[], hence E
16460 78 32 2e 61 69 43 6f 6c 75 6d 6e 5b 31 5d 3d 3d  x2.aiColumn[1]==
16470 30 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 49 6e 64  0..**.** The Ind
16480 65 78 2e 6f 6e 45 72 72 6f 72 20 66 69 65 6c 64  ex.onError field
16490 20 64 65 74 65 72 6d 69 6e 65 73 20 77 68 65 74   determines whet
164a0 68 65 72 20 6f 72 20 6e 6f 74 20 74 68 65 20 69  her or not the i
164b0 6e 64 65 78 65 64 20 63 6f 6c 75 6d 6e 73 0a 2a  ndexed columns.*
164c0 2a 20 6d 75 73 74 20 62 65 20 75 6e 69 71 75 65  * must be unique
164d0 20 61 6e 64 20 77 68 61 74 20 74 6f 20 64 6f 20   and what to do 
164e0 69 66 20 74 68 65 79 20 61 72 65 20 6e 6f 74 2e  if they are not.
164f0 20 20 57 68 65 6e 20 49 6e 64 65 78 2e 6f 6e 45    When Index.onE
16500 72 72 6f 72 3d 4f 45 5f 4e 6f 6e 65 2c 0a 2a 2a  rror=OE_None,.**
16510 20 69 74 20 6d 65 61 6e 73 20 74 68 69 73 20 69   it means this i
16520 73 20 6e 6f 74 20 61 20 75 6e 69 71 75 65 20 69  s not a unique i
16530 6e 64 65 78 2e 20 20 4f 74 68 65 72 77 69 73 65  ndex.  Otherwise
16540 20 69 74 20 69 73 20 61 20 75 6e 69 71 75 65 20   it is a unique 
16550 69 6e 64 65 78 0a 2a 2a 20 61 6e 64 20 74 68 65  index.** and the
16560 20 76 61 6c 75 65 20 6f 66 20 49 6e 64 65 78 2e   value of Index.
16570 6f 6e 45 72 72 6f 72 20 69 6e 64 69 63 61 74 65  onError indicate
16580 20 74 68 65 20 77 68 69 63 68 20 63 6f 6e 66 6c   the which confl
16590 69 63 74 20 72 65 73 6f 6c 75 74 69 6f 6e 0a 2a  ict resolution.*
165a0 2a 20 61 6c 67 6f 72 69 74 68 6d 20 74 6f 20 65  * algorithm to e
165b0 6d 70 6c 6f 79 20 77 68 65 6e 65 76 65 72 20 61  mploy whenever a
165c0 6e 20 61 74 74 65 6d 70 74 20 69 73 20 6d 61 64  n attempt is mad
165d0 65 20 74 6f 20 69 6e 73 65 72 74 20 61 20 6e 6f  e to insert a no
165e0 6e 2d 75 6e 69 71 75 65 0a 2a 2a 20 65 6c 65 6d  n-unique.** elem
165f0 65 6e 74 2e 0a 2a 2a 0a 2a 2a 20 57 68 69 6c 65  ent..**.** While
16600 20 70 61 72 73 69 6e 67 20 61 20 43 52 45 41 54   parsing a CREAT
16610 45 20 54 41 42 4c 45 20 6f 72 20 43 52 45 41 54  E TABLE or CREAT
16620 45 20 49 4e 44 45 58 20 73 74 61 74 65 6d 65 6e  E INDEX statemen
16630 74 20 69 6e 20 6f 72 64 65 72 20 74 6f 0a 2a 2a  t in order to.**
16640 20 67 65 6e 65 72 61 74 65 20 56 44 42 45 20 63   generate VDBE c
16650 6f 64 65 20 28 61 73 20 6f 70 70 6f 73 65 64 20  ode (as opposed 
16660 74 6f 20 70 61 72 73 69 6e 67 20 6f 6e 65 20 72  to parsing one r
16670 65 61 64 20 66 72 6f 6d 20 61 6e 20 73 71 6c 69  ead from an sqli
16680 74 65 5f 6d 61 73 74 65 72 0a 2a 2a 20 74 61 62  te_master.** tab
16690 6c 65 20 61 73 20 70 61 72 74 20 6f 66 20 70 61  le as part of pa
166a0 72 73 69 6e 67 20 61 6e 20 65 78 69 73 74 69 6e  rsing an existin
166b0 67 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d  g database schem
166c0 61 29 2c 20 74 72 61 6e 73 69 65 6e 74 20 69 6e  a), transient in
166d0 73 74 61 6e 63 65 73 0a 2a 2a 20 6f 66 20 74 68  stances.** of th
166e0 69 73 20 73 74 72 75 63 74 75 72 65 20 6d 61 79  is structure may
166f0 20 62 65 20 63 72 65 61 74 65 64 2e 20 49 6e 20   be created. In 
16700 74 68 69 73 20 63 61 73 65 20 74 68 65 20 49 6e  this case the In
16710 64 65 78 2e 74 6e 75 6d 20 76 61 72 69 61 62 6c  dex.tnum variabl
16720 65 20 69 73 0a 2a 2a 20 75 73 65 64 20 74 6f 20  e is.** used to 
16730 73 74 6f 72 65 20 74 68 65 20 61 64 64 72 65 73  store the addres
16740 73 20 6f 66 20 61 20 56 44 42 45 20 69 6e 73 74  s of a VDBE inst
16750 72 75 63 74 69 6f 6e 2c 20 6e 6f 74 20 61 20 64  ruction, not a d
16760 61 74 61 62 61 73 65 20 70 61 67 65 0a 2a 2a 20  atabase page.** 
16770 6e 75 6d 62 65 72 20 28 69 74 20 63 61 6e 6e 6f  number (it canno
16780 74 20 2d 20 74 68 65 20 64 61 74 61 62 61 73 65  t - the database
16790 20 70 61 67 65 20 69 73 20 6e 6f 74 20 61 6c 6c   page is not all
167a0 6f 63 61 74 65 64 20 75 6e 74 69 6c 20 74 68 65  ocated until the
167b0 20 56 44 42 45 0a 2a 2a 20 70 72 6f 67 72 61 6d   VDBE.** program
167c0 20 69 73 20 65 78 65 63 75 74 65 64 29 2e 20 53   is executed). S
167d0 65 65 20 63 6f 6e 76 65 72 74 54 6f 57 69 74 68  ee convertToWith
167e0 6f 75 74 52 6f 77 69 64 54 61 62 6c 65 28 29 20  outRowidTable() 
167f0 66 6f 72 20 64 65 74 61 69 6c 73 2e 0a 2a 2f 0a  for details..*/.
16800 73 74 72 75 63 74 20 49 6e 64 65 78 20 7b 0a 20  struct Index {. 
16810 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20   char *zName;   
16820 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d            /* Nam
16830 65 20 6f 66 20 74 68 69 73 20 69 6e 64 65 78 20  e of this index 
16840 2a 2f 0a 20 20 69 31 36 20 2a 61 69 43 6f 6c 75  */.  i16 *aiColu
16850 6d 6e 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  mn;           /*
16860 20 57 68 69 63 68 20 63 6f 6c 75 6d 6e 73 20 61   Which columns a
16870 72 65 20 75 73 65 64 20 62 79 20 74 68 69 73 20  re used by this 
16880 69 6e 64 65 78 2e 20 20 31 73 74 20 69 73 20 30  index.  1st is 0
16890 20 2a 2f 0a 20 20 4c 6f 67 45 73 74 20 2a 61 69   */.  LogEst *ai
168a0 52 6f 77 4c 6f 67 45 73 74 3b 20 20 20 20 20 2f  RowLogEst;     /
168b0 2a 20 46 72 6f 6d 20 41 4e 41 4c 59 5a 45 3a 20  * From ANALYZE: 
168c0 45 73 74 2e 20 72 6f 77 73 20 73 65 6c 65 63 74  Est. rows select
168d0 65 64 20 62 79 20 65 61 63 68 20 63 6f 6c 75 6d  ed by each colum
168e0 6e 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70 54  n */.  Table *pT
168f0 61 62 6c 65 3b 20 20 20 20 20 20 20 20 20 20 20  able;           
16900 2f 2a 20 54 68 65 20 53 51 4c 20 74 61 62 6c 65  /* The SQL table
16910 20 62 65 69 6e 67 20 69 6e 64 65 78 65 64 20 2a   being indexed *
16920 2f 0a 20 20 63 68 61 72 20 2a 7a 43 6f 6c 41 66  /.  char *zColAf
16930 66 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  f;           /* 
16940 53 74 72 69 6e 67 20 64 65 66 69 6e 69 6e 67 20  String defining 
16950 74 68 65 20 61 66 66 69 6e 69 74 79 20 6f 66 20  the affinity of 
16960 65 61 63 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20  each column */. 
16970 20 49 6e 64 65 78 20 2a 70 4e 65 78 74 3b 20 20   Index *pNext;  
16980 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
16990 20 6e 65 78 74 20 69 6e 64 65 78 20 61 73 73 6f   next index asso
169a0 63 69 61 74 65 64 20 77 69 74 68 20 74 68 65 20  ciated with the 
169b0 73 61 6d 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20  same table */.  
169c0 53 63 68 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b  Schema *pSchema;
169d0 20 20 20 20 20 20 20 20 20 2f 2a 20 53 63 68 65           /* Sche
169e0 6d 61 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68  ma containing th
169f0 69 73 20 69 6e 64 65 78 20 2a 2f 0a 20 20 75 38  is index */.  u8
16a00 20 2a 61 53 6f 72 74 4f 72 64 65 72 3b 20 20 20   *aSortOrder;   
16a10 20 20 20 20 20 20 20 2f 2a 20 66 6f 72 20 65 61         /* for ea
16a20 63 68 20 63 6f 6c 75 6d 6e 3a 20 54 72 75 65 3d  ch column: True=
16a30 3d 44 45 53 43 2c 20 46 61 6c 73 65 3d 3d 41 53  =DESC, False==AS
16a40 43 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61  C */.  const cha
16a50 72 20 2a 2a 61 7a 43 6f 6c 6c 3b 20 20 20 20 20  r **azColl;     
16a60 2f 2a 20 41 72 72 61 79 20 6f 66 20 63 6f 6c 6c  /* Array of coll
16a70 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 6e  ation sequence n
16a80 61 6d 65 73 20 66 6f 72 20 69 6e 64 65 78 20 2a  ames for index *
16a90 2f 0a 20 20 45 78 70 72 20 2a 70 50 61 72 74 49  /.  Expr *pPartI
16aa0 64 78 57 68 65 72 65 3b 20 20 20 20 20 2f 2a 20  dxWhere;     /* 
16ab0 57 48 45 52 45 20 63 6c 61 75 73 65 20 66 6f 72  WHERE clause for
16ac0 20 70 61 72 74 69 61 6c 20 69 6e 64 69 63 65 73   partial indices
16ad0 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20 2a   */.  ExprList *
16ae0 61 43 6f 6c 45 78 70 72 3b 20 20 20 20 20 20 2f  aColExpr;      /
16af0 2a 20 43 6f 6c 75 6d 6e 20 65 78 70 72 65 73 73  * Column express
16b00 69 6f 6e 73 20 2a 2f 0a 20 20 69 6e 74 20 74 6e  ions */.  int tn
16b10 75 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  um;             
16b20 20 20 20 2f 2a 20 44 42 20 50 61 67 65 20 63 6f     /* DB Page co
16b30 6e 74 61 69 6e 69 6e 67 20 72 6f 6f 74 20 6f 66  ntaining root of
16b40 20 74 68 69 73 20 69 6e 64 65 78 20 2a 2f 0a 20   this index */. 
16b50 20 4c 6f 67 45 73 74 20 73 7a 49 64 78 52 6f 77   LogEst szIdxRow
16b60 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 45 73 74  ;         /* Est
16b70 69 6d 61 74 65 64 20 61 76 65 72 61 67 65 20 72  imated average r
16b80 6f 77 20 73 69 7a 65 20 69 6e 20 62 79 74 65 73  ow size in bytes
16b90 20 2a 2f 0a 20 20 75 31 36 20 6e 4b 65 79 43 6f   */.  u16 nKeyCo
16ba0 6c 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  l;             /
16bb0 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75  * Number of colu
16bc0 6d 6e 73 20 66 6f 72 6d 69 6e 67 20 74 68 65 20  mns forming the 
16bd0 6b 65 79 20 2a 2f 0a 20 20 75 31 36 20 6e 43 6f  key */.  u16 nCo
16be0 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20 20 20 20  lumn;           
16bf0 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63    /* Number of c
16c00 6f 6c 75 6d 6e 73 20 73 74 6f 72 65 64 20 69 6e  olumns stored in
16c10 20 74 68 65 20 69 6e 64 65 78 20 2a 2f 0a 20 20   the index */.  
16c20 75 38 20 6f 6e 45 72 72 6f 72 3b 20 20 20 20 20  u8 onError;     
16c30 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 45 5f 41           /* OE_A
16c40 62 6f 72 74 2c 20 4f 45 5f 49 67 6e 6f 72 65 2c  bort, OE_Ignore,
16c50 20 4f 45 5f 52 65 70 6c 61 63 65 2c 20 6f 72 20   OE_Replace, or 
16c60 4f 45 5f 4e 6f 6e 65 20 2a 2f 0a 20 20 75 6e 73  OE_None */.  uns
16c70 69 67 6e 65 64 20 69 64 78 54 79 70 65 3a 32 3b  igned idxType:2;
16c80 20 20 20 20 20 20 2f 2a 20 30 3a 4e 6f 72 6d 61        /* 0:Norma
16c90 6c 20 31 3a 55 4e 49 51 55 45 2c 20 32 3a 50 52  l 1:UNIQUE, 2:PR
16ca0 49 4d 41 52 59 20 4b 45 59 2c 20 33 3a 49 50 4b  IMARY KEY, 3:IPK
16cb0 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 62   */.  unsigned b
16cc0 55 6e 6f 72 64 65 72 65 64 3a 31 3b 20 20 20 2f  Unordered:1;   /
16cd0 2a 20 55 73 65 20 74 68 69 73 20 69 6e 64 65 78  * Use this index
16ce0 20 66 6f 72 20 3d 3d 20 6f 72 20 49 4e 20 71 75   for == or IN qu
16cf0 65 72 69 65 73 20 6f 6e 6c 79 20 2a 2f 0a 20 20  eries only */.  
16d00 75 6e 73 69 67 6e 65 64 20 75 6e 69 71 4e 6f 74  unsigned uniqNot
16d10 4e 75 6c 6c 3a 31 3b 20 20 2f 2a 20 54 72 75 65  Null:1;  /* True
16d20 20 69 66 20 55 4e 49 51 55 45 20 61 6e 64 20 4e   if UNIQUE and N
16d30 4f 54 20 4e 55 4c 4c 20 66 6f 72 20 61 6c 6c 20  OT NULL for all 
16d40 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 20 20 75 6e 73  columns */.  uns
16d50 69 67 6e 65 64 20 69 73 52 65 73 69 7a 65 64 3a  igned isResized:
16d60 31 3b 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66  1;    /* True if
16d70 20 72 65 73 69 7a 65 49 6e 64 65 78 4f 62 6a 65   resizeIndexObje
16d80 63 74 28 29 20 68 61 73 20 62 65 65 6e 20 63 61  ct() has been ca
16d90 6c 6c 65 64 20 2a 2f 0a 20 20 75 6e 73 69 67 6e  lled */.  unsign
16da0 65 64 20 69 73 43 6f 76 65 72 69 6e 67 3a 31 3b  ed isCovering:1;
16db0 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 74 68     /* True if th
16dc0 69 73 20 69 73 20 61 20 63 6f 76 65 72 69 6e 67  is is a covering
16dd0 20 69 6e 64 65 78 20 2a 2f 0a 20 20 75 6e 73 69   index */.  unsi
16de0 67 6e 65 64 20 6e 6f 53 6b 69 70 53 63 61 6e 3a  gned noSkipScan:
16df0 31 3b 20 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 74  1;   /* Do not t
16e00 72 79 20 74 6f 20 75 73 65 20 73 6b 69 70 2d 73  ry to use skip-s
16e10 63 61 6e 20 69 66 20 74 72 75 65 20 2a 2f 0a 20  can if true */. 
16e20 20 75 6e 73 69 67 6e 65 64 20 68 61 73 53 74 61   unsigned hasSta
16e30 74 31 3a 31 3b 20 20 20 20 20 2f 2a 20 61 69 52  t1:1;     /* aiR
16e40 6f 77 4c 6f 67 45 73 74 20 76 61 6c 75 65 73 20  owLogEst values 
16e50 63 6f 6d 65 20 66 72 6f 6d 20 73 71 6c 69 74 65  come from sqlite
16e60 5f 73 74 61 74 31 20 2a 2f 0a 20 20 75 6e 73 69  _stat1 */.  unsi
16e70 67 6e 65 64 20 62 4e 6f 51 75 65 72 79 3a 31 3b  gned bNoQuery:1;
16e80 20 20 20 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 75       /* Do not u
16e90 73 65 20 74 68 69 73 20 69 6e 64 65 78 20 74 6f  se this index to
16ea0 20 6f 70 74 69 6d 69 7a 65 20 71 75 65 72 69 65   optimize querie
16eb0 73 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49  s */.#ifdef SQLI
16ec0 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 5f  TE_ENABLE_STAT3_
16ed0 4f 52 5f 53 54 41 54 34 0a 20 20 69 6e 74 20 6e  OR_STAT4.  int n
16ee0 53 61 6d 70 6c 65 3b 20 20 20 20 20 20 20 20 20  Sample;         
16ef0 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
16f00 20 65 6c 65 6d 65 6e 74 73 20 69 6e 20 61 53 61   elements in aSa
16f10 6d 70 6c 65 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20  mple[] */.  int 
16f20 6e 53 61 6d 70 6c 65 43 6f 6c 3b 20 20 20 20 20  nSampleCol;     
16f30 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20       /* Size of 
16f40 49 6e 64 65 78 53 61 6d 70 6c 65 2e 61 6e 45 71  IndexSample.anEq
16f50 5b 5d 20 61 6e 64 20 73 6f 20 6f 6e 20 2a 2f 0a  [] and so on */.
16f60 20 20 74 52 6f 77 63 6e 74 20 2a 61 41 76 67 45    tRowcnt *aAvgE
16f70 71 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 41 76  q;         /* Av
16f80 65 72 61 67 65 20 6e 45 71 20 76 61 6c 75 65 73  erage nEq values
16f90 20 66 6f 72 20 6b 65 79 73 20 6e 6f 74 20 69 6e   for keys not in
16fa0 20 61 53 61 6d 70 6c 65 20 2a 2f 0a 20 20 49 6e   aSample */.  In
16fb0 64 65 78 53 61 6d 70 6c 65 20 2a 61 53 61 6d 70  dexSample *aSamp
16fc0 6c 65 3b 20 20 20 20 2f 2a 20 53 61 6d 70 6c 65  le;    /* Sample
16fd0 73 20 6f 66 20 74 68 65 20 6c 65 66 74 2d 6d 6f  s of the left-mo
16fe0 73 74 20 6b 65 79 20 2a 2f 0a 20 20 74 52 6f 77  st key */.  tRow
16ff0 63 6e 74 20 2a 61 69 52 6f 77 45 73 74 3b 20 20  cnt *aiRowEst;  
17000 20 20 20 20 20 2f 2a 20 4e 6f 6e 2d 6c 6f 67 61       /* Non-loga
17010 72 69 74 68 6d 69 63 20 73 74 61 74 31 20 64 61  rithmic stat1 da
17020 74 61 20 66 6f 72 20 74 68 69 73 20 69 6e 64 65  ta for this inde
17030 78 20 2a 2f 0a 20 20 74 52 6f 77 63 6e 74 20 6e  x */.  tRowcnt n
17040 52 6f 77 45 73 74 30 3b 20 20 20 20 20 20 20 20  RowEst0;        
17050 2f 2a 20 4e 6f 6e 2d 6c 6f 67 61 72 69 74 68 6d  /* Non-logarithm
17060 69 63 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77  ic number of row
17070 73 20 69 6e 20 74 68 65 20 69 6e 64 65 78 20 2a  s in the index *
17080 2f 0a 23 65 6e 64 69 66 0a 20 20 42 69 74 6d 61  /.#endif.  Bitma
17090 73 6b 20 63 6f 6c 4e 6f 74 49 64 78 65 64 3b 20  sk colNotIdxed; 
170a0 20 20 20 20 2f 2a 20 30 20 66 6f 72 20 75 6e 69      /* 0 for uni
170b0 6e 64 65 78 65 64 20 63 6f 6c 75 6d 6e 73 20 69  ndexed columns i
170c0 6e 20 70 54 61 62 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  n pTab */.};../*
170d0 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75  .** Allowed valu
170e0 65 73 20 66 6f 72 20 49 6e 64 65 78 2e 69 64 78  es for Index.idx
170f0 54 79 70 65 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  Type.*/.#define 
17100 53 51 4c 49 54 45 5f 49 44 58 54 59 50 45 5f 41  SQLITE_IDXTYPE_A
17110 50 50 44 45 46 20 20 20 20 20 20 30 20 20 20 2f  PPDEF      0   /
17120 2a 20 43 72 65 61 74 65 64 20 75 73 69 6e 67 20  * Created using 
17130 43 52 45 41 54 45 20 49 4e 44 45 58 20 2a 2f 0a  CREATE INDEX */.
17140 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49  #define SQLITE_I
17150 44 58 54 59 50 45 5f 55 4e 49 51 55 45 20 20 20  DXTYPE_UNIQUE   
17160 20 20 20 31 20 20 20 2f 2a 20 49 6d 70 6c 65 6d     1   /* Implem
17170 65 6e 74 73 20 61 20 55 4e 49 51 55 45 20 63 6f  ents a UNIQUE co
17180 6e 73 74 72 61 69 6e 74 20 2a 2f 0a 23 64 65 66  nstraint */.#def
17190 69 6e 65 20 53 51 4c 49 54 45 5f 49 44 58 54 59  ine SQLITE_IDXTY
171a0 50 45 5f 50 52 49 4d 41 52 59 4b 45 59 20 20 32  PE_PRIMARYKEY  2
171b0 20 20 20 2f 2a 20 49 73 20 74 68 65 20 50 52 49     /* Is the PRI
171c0 4d 41 52 59 20 4b 45 59 20 66 6f 72 20 74 68 65  MARY KEY for the
171d0 20 74 61 62 6c 65 20 2a 2f 0a 23 64 65 66 69 6e   table */.#defin
171e0 65 20 53 51 4c 49 54 45 5f 49 44 58 54 59 50 45  e SQLITE_IDXTYPE
171f0 5f 49 50 4b 20 20 20 20 20 20 20 20 20 33 20 20  _IPK         3  
17200 20 2f 2a 20 49 4e 54 45 47 45 52 20 50 52 49 4d   /* INTEGER PRIM
17210 41 52 59 20 4b 45 59 20 69 6e 64 65 78 20 2a 2f  ARY KEY index */
17220 0a 0a 2f 2a 20 52 65 74 75 72 6e 20 74 72 75 65  ../* Return true
17230 20 69 66 20 69 6e 64 65 78 20 58 20 69 73 20 61   if index X is a
17240 20 50 52 49 4d 41 52 59 20 4b 45 59 20 69 6e 64   PRIMARY KEY ind
17250 65 78 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49 73  ex */.#define Is
17260 50 72 69 6d 61 72 79 4b 65 79 49 6e 64 65 78 28  PrimaryKeyIndex(
17270 58 29 20 20 28 28 58 29 2d 3e 69 64 78 54 79 70  X)  ((X)->idxTyp
17280 65 3d 3d 53 51 4c 49 54 45 5f 49 44 58 54 59 50  e==SQLITE_IDXTYP
17290 45 5f 50 52 49 4d 41 52 59 4b 45 59 29 0a 0a 2f  E_PRIMARYKEY)../
172a0 2a 20 52 65 74 75 72 6e 20 74 72 75 65 20 69 66  * Return true if
172b0 20 69 6e 64 65 78 20 58 20 69 73 20 61 20 55 4e   index X is a UN
172c0 49 51 55 45 20 69 6e 64 65 78 20 2a 2f 0a 23 64  IQUE index */.#d
172d0 65 66 69 6e 65 20 49 73 55 6e 69 71 75 65 49 6e  efine IsUniqueIn
172e0 64 65 78 28 58 29 20 20 20 20 20 20 28 28 58 29  dex(X)      ((X)
172f0 2d 3e 6f 6e 45 72 72 6f 72 21 3d 4f 45 5f 4e 6f  ->onError!=OE_No
17300 6e 65 29 0a 0a 2f 2a 20 54 68 65 20 49 6e 64 65  ne)../* The Inde
17310 78 2e 61 69 43 6f 6c 75 6d 6e 5b 5d 20 76 61 6c  x.aiColumn[] val
17320 75 65 73 20 61 72 65 20 6e 6f 72 6d 61 6c 6c 79  ues are normally
17330 20 70 6f 73 69 74 69 76 65 20 69 6e 74 65 67 65   positive intege
17340 72 2e 20 20 42 75 74 0a 2a 2a 20 74 68 65 72 65  r.  But.** there
17350 20 61 72 65 20 73 6f 6d 65 20 6e 65 67 61 74 69   are some negati
17360 76 65 20 76 61 6c 75 65 73 20 74 68 61 74 20 68  ve values that h
17370 61 76 65 20 73 70 65 63 69 61 6c 20 6d 65 61 6e  ave special mean
17380 69 6e 67 3a 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ing:.*/.#define 
17390 58 4e 5f 52 4f 57 49 44 20 20 20 20 20 28 2d 31  XN_ROWID     (-1
173a0 29 20 20 20 20 20 2f 2a 20 49 6e 64 65 78 65 64  )     /* Indexed
173b0 20 63 6f 6c 75 6d 6e 20 69 73 20 74 68 65 20 72   column is the r
173c0 6f 77 69 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20  owid */.#define 
173d0 58 4e 5f 45 58 50 52 20 20 20 20 20 20 28 2d 32  XN_EXPR      (-2
173e0 29 20 20 20 20 20 2f 2a 20 49 6e 64 65 78 65 64  )     /* Indexed
173f0 20 63 6f 6c 75 6d 6e 20 69 73 20 61 6e 20 65 78   column is an ex
17400 70 72 65 73 73 69 6f 6e 20 2a 2f 0a 0a 2f 2a 0a  pression */../*.
17410 2a 2a 20 45 61 63 68 20 73 61 6d 70 6c 65 20 73  ** Each sample s
17420 74 6f 72 65 64 20 69 6e 20 74 68 65 20 73 71 6c  tored in the sql
17430 69 74 65 5f 73 74 61 74 33 20 74 61 62 6c 65 20  ite_stat3 table 
17440 69 73 20 72 65 70 72 65 73 65 6e 74 65 64 20 69  is represented i
17450 6e 20 6d 65 6d 6f 72 79 0a 2a 2a 20 75 73 69 6e  n memory.** usin
17460 67 20 61 20 73 74 72 75 63 74 75 72 65 20 6f 66  g a structure of
17470 20 74 68 69 73 20 74 79 70 65 2e 20 20 53 65 65   this type.  See
17480 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 20 61   documentation a
17490 74 20 74 68 65 20 74 6f 70 20 6f 66 20 74 68 65  t the top of the
174a0 0a 2a 2a 20 61 6e 61 6c 79 7a 65 2e 63 20 73 6f  .** analyze.c so
174b0 75 72 63 65 20 66 69 6c 65 20 66 6f 72 20 61 64  urce file for ad
174c0 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61  ditional informa
174d0 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  tion..*/.struct 
174e0 49 6e 64 65 78 53 61 6d 70 6c 65 20 7b 0a 20 20  IndexSample {.  
174f0 76 6f 69 64 20 2a 70 3b 20 20 20 20 20 20 20 20  void *p;        
17500 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20    /* Pointer to 
17510 73 61 6d 70 6c 65 64 20 72 65 63 6f 72 64 20 2a  sampled record *
17520 2f 0a 20 20 69 6e 74 20 6e 3b 20 20 20 20 20 20  /.  int n;      
17530 20 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66        /* Size of
17540 20 72 65 63 6f 72 64 20 69 6e 20 62 79 74 65 73   record in bytes
17550 20 2a 2f 0a 20 20 74 52 6f 77 63 6e 74 20 2a 61   */.  tRowcnt *a
17560 6e 45 71 3b 20 20 20 20 2f 2a 20 45 73 74 2e 20  nEq;    /* Est. 
17570 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 77  number of rows w
17580 68 65 72 65 20 74 68 65 20 6b 65 79 20 65 71 75  here the key equ
17590 61 6c 73 20 74 68 69 73 20 73 61 6d 70 6c 65 20  als this sample 
175a0 2a 2f 0a 20 20 74 52 6f 77 63 6e 74 20 2a 61 6e  */.  tRowcnt *an
175b0 4c 74 3b 20 20 20 20 2f 2a 20 45 73 74 2e 20 6e  Lt;    /* Est. n
175c0 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 77 68  umber of rows wh
175d0 65 72 65 20 6b 65 79 20 69 73 20 6c 65 73 73 20  ere key is less 
175e0 74 68 61 6e 20 74 68 69 73 20 73 61 6d 70 6c 65  than this sample
175f0 20 2a 2f 0a 20 20 74 52 6f 77 63 6e 74 20 2a 61   */.  tRowcnt *a
17600 6e 44 4c 74 3b 20 20 20 2f 2a 20 45 73 74 2e 20  nDLt;   /* Est. 
17610 6e 75 6d 62 65 72 20 6f 66 20 64 69 73 74 69 6e  number of distin
17620 63 74 20 6b 65 79 73 20 6c 65 73 73 20 74 68 61  ct keys less tha
17630 6e 20 74 68 69 73 20 73 61 6d 70 6c 65 20 2a 2f  n this sample */
17640 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 50 6f 73 73 69  .};../*.** Possi
17650 62 6c 65 20 76 61 6c 75 65 73 20 74 6f 20 75 73  ble values to us
17660 65 20 77 69 74 68 69 6e 20 74 68 65 20 66 6c 61  e within the fla
17670 67 73 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 73  gs argument to s
17680 71 6c 69 74 65 33 47 65 74 54 6f 6b 65 6e 28 29  qlite3GetToken()
17690 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  ..*/.#define SQL
176a0 49 54 45 5f 54 4f 4b 45 4e 5f 51 55 4f 54 45 44  ITE_TOKEN_QUOTED
176b0 20 20 20 20 30 78 31 20 2f 2a 20 54 6f 6b 65 6e      0x1 /* Token
176c0 20 69 73 20 61 20 71 75 6f 74 65 64 20 69 64 65   is a quoted ide
176d0 6e 74 69 66 69 65 72 2e 20 2a 2f 0a 23 64 65 66  ntifier. */.#def
176e0 69 6e 65 20 53 51 4c 49 54 45 5f 54 4f 4b 45 4e  ine SQLITE_TOKEN
176f0 5f 4b 45 59 57 4f 52 44 20 20 20 30 78 32 20 2f  _KEYWORD   0x2 /
17700 2a 20 54 6f 6b 65 6e 20 69 73 20 61 20 6b 65 79  * Token is a key
17710 77 6f 72 64 2e 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20  word. */../*.** 
17720 45 61 63 68 20 74 6f 6b 65 6e 20 63 6f 6d 69 6e  Each token comin
17730 67 20 6f 75 74 20 6f 66 20 74 68 65 20 6c 65 78  g out of the lex
17740 65 72 20 69 73 20 61 6e 20 69 6e 73 74 61 6e 63  er is an instanc
17750 65 20 6f 66 0a 2a 2a 20 74 68 69 73 20 73 74 72  e of.** this str
17760 75 63 74 75 72 65 2e 20 20 54 6f 6b 65 6e 73 20  ucture.  Tokens 
17770 61 72 65 20 61 6c 73 6f 20 75 73 65 64 20 61 73  are also used as
17780 20 70 61 72 74 20 6f 66 20 61 6e 20 65 78 70 72   part of an expr
17790 65 73 73 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68  ession..**.** Th
177a0 65 20 6d 65 6d 6f 72 79 20 74 68 61 74 20 22 7a  e memory that "z
177b0 22 20 70 6f 69 6e 74 73 20 74 6f 20 69 73 20 6f  " points to is o
177c0 77 6e 65 64 20 62 79 20 6f 74 68 65 72 20 6f 62  wned by other ob
177d0 6a 65 63 74 73 2e 20 20 54 61 6b 65 20 63 61 72  jects.  Take car
177e0 65 0a 2a 2a 20 74 68 61 74 20 74 68 65 20 6f 77  e.** that the ow
177f0 6e 65 72 20 6f 66 20 74 68 65 20 22 7a 22 20 73  ner of the "z" s
17800 74 72 69 6e 67 20 64 6f 65 73 20 6e 6f 74 20 64  tring does not d
17810 65 61 6c 6c 6f 63 61 74 65 20 74 68 65 20 73 74  eallocate the st
17820 72 69 6e 67 20 62 65 66 6f 72 65 0a 2a 2a 20 74  ring before.** t
17830 68 65 20 54 6f 6b 65 6e 20 67 6f 65 73 20 6f 75  he Token goes ou
17840 74 20 6f 66 20 73 63 6f 70 65 21 20 20 56 65 72  t of scope!  Ver
17850 79 20 6f 66 74 65 6e 2c 20 74 68 65 20 22 7a 22  y often, the "z"
17860 20 70 6f 69 6e 74 73 20 74 6f 20 73 6f 6d 65 20   points to some 
17870 70 6c 61 63 65 0a 2a 2a 20 69 6e 20 74 68 65 20  place.** in the 
17880 6d 69 64 64 6c 65 20 6f 66 20 74 68 65 20 50 61  middle of the Pa
17890 72 73 65 2e 7a 53 71 6c 20 74 65 78 74 2e 20 20  rse.zSql text.  
178a0 42 75 74 20 69 74 20 6d 69 67 68 74 20 61 6c 73  But it might als
178b0 6f 20 70 6f 69 6e 74 20 74 6f 20 61 0a 2a 2a 20  o point to a.** 
178c0 73 74 61 74 69 63 20 73 74 72 69 6e 67 2e 0a 2a  static string..*
178d0 2f 0a 73 74 72 75 63 74 20 54 6f 6b 65 6e 20 7b  /.struct Token {
178e0 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  .  const char *z
178f0 3b 20 20 20 20 20 2f 2a 20 54 65 78 74 20 6f 66  ;     /* Text of
17900 20 74 68 65 20 74 6f 6b 65 6e 2e 20 20 4e 6f 74   the token.  Not
17910 20 4e 55 4c 4c 2d 74 65 72 6d 69 6e 61 74 65 64   NULL-terminated
17920 21 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20  ! */.  unsigned 
17930 69 6e 74 20 6e 3b 20 20 20 20 2f 2a 20 4e 75 6d  int n;    /* Num
17940 62 65 72 20 6f 66 20 63 68 61 72 61 63 74 65 72  ber of character
17950 73 20 69 6e 20 74 68 69 73 20 74 6f 6b 65 6e 20  s in this token 
17960 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20  */.};../*.** An 
17970 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73  instance of this
17980 20 73 74 72 75 63 74 75 72 65 20 63 6f 6e 74 61   structure conta
17990 69 6e 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  ins information 
179a0 6e 65 65 64 65 64 20 74 6f 20 67 65 6e 65 72 61  needed to genera
179b0 74 65 0a 2a 2a 20 63 6f 64 65 20 66 6f 72 20 61  te.** code for a
179c0 20 53 45 4c 45 43 54 20 74 68 61 74 20 63 6f 6e   SELECT that con
179d0 74 61 69 6e 73 20 61 67 67 72 65 67 61 74 65 20  tains aggregate 
179e0 66 75 6e 63 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a  functions..**.**
179f0 20 49 66 20 45 78 70 72 2e 6f 70 3d 3d 54 4b 5f   If Expr.op==TK_
17a00 41 47 47 5f 43 4f 4c 55 4d 4e 20 6f 72 20 54 4b  AGG_COLUMN or TK
17a10 5f 41 47 47 5f 46 55 4e 43 54 49 4f 4e 20 74 68  _AGG_FUNCTION th
17a20 65 6e 20 45 78 70 72 2e 70 41 67 67 49 6e 66 6f  en Expr.pAggInfo
17a30 20 69 73 20 61 0a 2a 2a 20 70 6f 69 6e 74 65 72   is a.** pointer
17a40 20 74 6f 20 74 68 69 73 20 73 74 72 75 63 74 75   to this structu
17a50 72 65 2e 20 20 54 68 65 20 45 78 70 72 2e 69 43  re.  The Expr.iC
17a60 6f 6c 75 6d 6e 20 66 69 65 6c 64 20 69 73 20 74  olumn field is t
17a70 68 65 20 69 6e 64 65 78 20 69 6e 0a 2a 2a 20 41  he index in.** A
17a80 67 67 49 6e 66 6f 2e 61 43 6f 6c 5b 5d 20 6f 72  ggInfo.aCol[] or
17a90 20 41 67 67 49 6e 66 6f 2e 61 46 75 6e 63 5b 5d   AggInfo.aFunc[]
17aa0 20 6f 66 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20   of information 
17ab0 6e 65 65 64 65 64 20 74 6f 20 67 65 6e 65 72 61  needed to genera
17ac0 74 65 0a 2a 2a 20 63 6f 64 65 20 66 6f 72 20 74  te.** code for t
17ad0 68 61 74 20 6e 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20  hat node..**.** 
17ae0 41 67 67 49 6e 66 6f 2e 70 47 72 6f 75 70 42 79  AggInfo.pGroupBy
17af0 20 61 6e 64 20 41 67 67 49 6e 66 6f 2e 61 46 75   and AggInfo.aFu
17b00 6e 63 2e 70 45 78 70 72 20 70 6f 69 6e 74 20 74  nc.pExpr point t
17b10 6f 20 66 69 65 6c 64 73 20 77 69 74 68 69 6e 20  o fields within 
17b20 74 68 65 0a 2a 2a 20 6f 72 69 67 69 6e 61 6c 20  the.** original 
17b30 53 65 6c 65 63 74 20 73 74 72 75 63 74 75 72 65  Select structure
17b40 20 74 68 61 74 20 64 65 73 63 72 69 62 65 73 20   that describes 
17b50 74 68 65 20 53 45 4c 45 43 54 20 73 74 61 74 65  the SELECT state
17b60 6d 65 6e 74 2e 20 20 54 68 65 73 65 0a 2a 2a 20  ment.  These.** 
17b70 66 69 65 6c 64 73 20 64 6f 20 6e 6f 74 20 6e 65  fields do not ne
17b80 65 64 20 74 6f 20 62 65 20 66 72 65 65 64 20 77  ed to be freed w
17b90 68 65 6e 20 64 65 61 6c 6c 6f 63 61 74 69 6e 67  hen deallocating
17ba0 20 74 68 65 20 41 67 67 49 6e 66 6f 20 73 74 72   the AggInfo str
17bb0 75 63 74 75 72 65 2e 0a 2a 2f 0a 73 74 72 75 63  ucture..*/.struc
17bc0 74 20 41 67 67 49 6e 66 6f 20 7b 0a 20 20 75 38  t AggInfo {.  u8
17bd0 20 64 69 72 65 63 74 4d 6f 64 65 3b 20 20 20 20   directMode;    
17be0 20 20 20 20 20 20 2f 2a 20 44 69 72 65 63 74 20        /* Direct 
17bf0 72 65 6e 64 65 72 69 6e 67 20 6d 6f 64 65 20 6d  rendering mode m
17c00 65 61 6e 73 20 74 61 6b 65 20 64 61 74 61 20 64  eans take data d
17c10 69 72 65 63 74 6c 79 0a 20 20 20 20 20 20 20 20  irectly.        
17c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17c30 20 20 2a 2a 20 66 72 6f 6d 20 73 6f 75 72 63 65    ** from source
17c40 20 74 61 62 6c 65 73 20 72 61 74 68 65 72 20 74   tables rather t
17c50 68 61 6e 20 66 72 6f 6d 20 61 63 63 75 6d 75 6c  han from accumul
17c60 61 74 6f 72 73 20 2a 2f 0a 20 20 75 38 20 75 73  ators */.  u8 us
17c70 65 53 6f 72 74 69 6e 67 49 64 78 3b 20 20 20 20  eSortingIdx;    
17c80 20 20 20 2f 2a 20 49 6e 20 64 69 72 65 63 74 20     /* In direct 
17c90 6d 6f 64 65 2c 20 72 65 66 65 72 65 6e 63 65 20  mode, reference 
17ca0 74 68 65 20 73 6f 72 74 69 6e 67 20 69 6e 64 65  the sorting inde
17cb0 78 20 72 61 74 68 65 72 0a 20 20 20 20 20 20 20  x rather.       
17cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17cd0 20 20 20 2a 2a 20 74 68 61 6e 20 74 68 65 20 73     ** than the s
17ce0 6f 75 72 63 65 20 74 61 62 6c 65 20 2a 2f 0a 20  ource table */. 
17cf0 20 69 6e 74 20 73 6f 72 74 69 6e 67 49 64 78 3b   int sortingIdx;
17d00 20 20 20 20 20 20 20 20 20 2f 2a 20 43 75 72 73           /* Curs
17d10 6f 72 20 6e 75 6d 62 65 72 20 6f 66 20 74 68 65  or number of the
17d20 20 73 6f 72 74 69 6e 67 20 69 6e 64 65 78 20 2a   sorting index *
17d30 2f 0a 20 20 69 6e 74 20 73 6f 72 74 69 6e 67 49  /.  int sortingI
17d40 64 78 50 54 61 62 3b 20 20 20 20 20 2f 2a 20 43  dxPTab;     /* C
17d50 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 6f 66 20  ursor number of 
17d60 70 73 65 75 64 6f 2d 74 61 62 6c 65 20 2a 2f 0a  pseudo-table */.
17d70 20 20 69 6e 74 20 6e 53 6f 72 74 69 6e 67 43 6f    int nSortingCo
17d80 6c 75 6d 6e 3b 20 20 20 20 20 2f 2a 20 4e 75 6d  lumn;     /* Num
17d90 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69  ber of columns i
17da0 6e 20 74 68 65 20 73 6f 72 74 69 6e 67 20 69 6e  n the sorting in
17db0 64 65 78 20 2a 2f 0a 20 20 69 6e 74 20 6d 6e 52  dex */.  int mnR
17dc0 65 67 2c 20 6d 78 52 65 67 3b 20 20 20 20 20 20  eg, mxReg;      
17dd0 20 2f 2a 20 52 61 6e 67 65 20 6f 66 20 72 65 67   /* Range of reg
17de0 69 73 74 65 72 73 20 61 6c 6c 6f 63 61 74 65 64  isters allocated
17df0 20 66 6f 72 20 61 43 6f 6c 20 61 6e 64 20 61 46   for aCol and aF
17e00 75 6e 63 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73  unc */.  ExprLis
17e10 74 20 2a 70 47 72 6f 75 70 42 79 3b 20 20 20 20  t *pGroupBy;    
17e20 20 2f 2a 20 54 68 65 20 67 72 6f 75 70 20 62 79   /* The group by
17e30 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 73 74 72   clause */.  str
17e40 75 63 74 20 41 67 67 49 6e 66 6f 5f 63 6f 6c 20  uct AggInfo_col 
17e50 7b 20 20 20 20 2f 2a 20 46 6f 72 20 65 61 63 68  {    /* For each
17e60 20 63 6f 6c 75 6d 6e 20 75 73 65 64 20 69 6e 20   column used in 
17e70 73 6f 75 72 63 65 20 74 61 62 6c 65 73 20 2a 2f  source tables */
17e80 0a 20 20 20 20 54 61 62 6c 65 20 2a 70 54 61 62  .    Table *pTab
17e90 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
17ea0 20 53 6f 75 72 63 65 20 74 61 62 6c 65 20 2a 2f   Source table */
17eb0 0a 20 20 20 20 69 6e 74 20 69 54 61 62 6c 65 3b  .    int iTable;
17ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
17ed0 20 43 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 6f   Cursor number o
17ee0 66 20 74 68 65 20 73 6f 75 72 63 65 20 74 61 62  f the source tab
17ef0 6c 65 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 43  le */.    int iC
17f00 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20 20 20  olumn;          
17f10 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20 6e 75 6d     /* Column num
17f20 62 65 72 20 77 69 74 68 69 6e 20 74 68 65 20 73  ber within the s
17f30 6f 75 72 63 65 20 74 61 62 6c 65 20 2a 2f 0a 20  ource table */. 
17f40 20 20 20 69 6e 74 20 69 53 6f 72 74 65 72 43 6f     int iSorterCo
17f50 6c 75 6d 6e 3b 20 20 20 20 20 20 20 2f 2a 20 43  lumn;       /* C
17f60 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 69 6e 20  olumn number in 
17f70 74 68 65 20 73 6f 72 74 69 6e 67 20 69 6e 64 65  the sorting inde
17f80 78 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 4d 65  x */.    int iMe
17f90 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  m;              
17fa0 20 20 2f 2a 20 4d 65 6d 6f 72 79 20 6c 6f 63 61    /* Memory loca
17fb0 74 69 6f 6e 20 74 68 61 74 20 61 63 74 73 20 61  tion that acts a
17fc0 73 20 61 63 63 75 6d 75 6c 61 74 6f 72 20 2a 2f  s accumulator */
17fd0 0a 20 20 20 20 45 78 70 72 20 2a 70 45 78 70 72  .    Expr *pExpr
17fe0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
17ff0 20 54 68 65 20 6f 72 69 67 69 6e 61 6c 20 65 78   The original ex
18000 70 72 65 73 73 69 6f 6e 20 2a 2f 0a 20 20 7d 20  pression */.  } 
18010 2a 61 43 6f 6c 3b 0a 20 20 69 6e 74 20 6e 43 6f  *aCol;.  int nCo
18020 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20 20 20 20  lumn;           
18030 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 75 73   /* Number of us
18040 65 64 20 65 6e 74 72 69 65 73 20 69 6e 20 61 43  ed entries in aC
18050 6f 6c 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 6e 41  ol[] */.  int nA
18060 63 63 75 6d 75 6c 61 74 6f 72 3b 20 20 20 20 20  ccumulator;     
18070 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63    /* Number of c
18080 6f 6c 75 6d 6e 73 20 74 68 61 74 20 73 68 6f 77  olumns that show
18090 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20   through to the 
180a0 6f 75 74 70 75 74 2e 0a 20 20 20 20 20 20 20 20  output..        
180b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
180c0 20 20 2a 2a 20 41 64 64 69 74 69 6f 6e 61 6c 20    ** Additional 
180d0 63 6f 6c 75 6d 6e 73 20 61 72 65 20 75 73 65 64  columns are used
180e0 20 6f 6e 6c 79 20 61 73 20 70 61 72 61 6d 65 74   only as paramet
180f0 65 72 73 20 74 6f 0a 20 20 20 20 20 20 20 20 20  ers to.         
18100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18110 20 2a 2a 20 61 67 67 72 65 67 61 74 65 20 66 75   ** aggregate fu
18120 6e 63 74 69 6f 6e 73 20 2a 2f 0a 20 20 73 74 72  nctions */.  str
18130 75 63 74 20 41 67 67 49 6e 66 6f 5f 66 75 6e 63  uct AggInfo_func
18140 20 7b 20 20 20 2f 2a 20 46 6f 72 20 65 61 63 68   {   /* For each
18150 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74   aggregate funct
18160 69 6f 6e 20 2a 2f 0a 20 20 20 20 45 78 70 72 20  ion */.    Expr 
18170 2a 70 45 78 70 72 3b 20 20 20 20 20 20 20 20 20  *pExpr;         
18180 20 20 20 20 2f 2a 20 45 78 70 72 65 73 73 69 6f      /* Expressio
18190 6e 20 65 6e 63 6f 64 69 6e 67 20 74 68 65 20 66  n encoding the f
181a0 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 20 20 46  unction */.    F
181b0 75 6e 63 44 65 66 20 2a 70 46 75 6e 63 3b 20 20  uncDef *pFunc;  
181c0 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 61          /* The a
181d0 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f  ggregate functio
181e0 6e 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  n implementation
181f0 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 4d 65 6d   */.    int iMem
18200 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
18210 20 2f 2a 20 4d 65 6d 6f 72 79 20 6c 6f 63 61 74   /* Memory locat
18220 69 6f 6e 20 74 68 61 74 20 61 63 74 73 20 61 73  ion that acts as
18230 20 61 63 63 75 6d 75 6c 61 74 6f 72 20 2a 2f 0a   accumulator */.
18240 20 20 20 20 69 6e 74 20 69 44 69 73 74 69 6e 63      int iDistinc
18250 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  t;           /* 
18260 45 70 68 65 6d 65 72 61 6c 20 74 61 62 6c 65 20  Ephemeral table 
18270 75 73 65 64 20 74 6f 20 65 6e 66 6f 72 63 65 20  used to enforce 
18280 44 49 53 54 49 4e 43 54 20 2a 2f 0a 20 20 7d 20  DISTINCT */.  } 
18290 2a 61 46 75 6e 63 3b 0a 20 20 69 6e 74 20 6e 46  *aFunc;.  int nF
182a0 75 6e 63 3b 20 20 20 20 20 20 20 20 20 20 20 20  unc;            
182b0 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65    /* Number of e
182c0 6e 74 72 69 65 73 20 69 6e 20 61 46 75 6e 63 5b  ntries in aFunc[
182d0 5d 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54  ] */.};../*.** T
182e0 68 65 20 64 61 74 61 74 79 70 65 20 79 6e 56 61  he datatype ynVa
182f0 72 20 69 73 20 61 20 73 69 67 6e 65 64 20 69 6e  r is a signed in
18300 74 65 67 65 72 2c 20 65 69 74 68 65 72 20 31 36  teger, either 16
18310 2d 62 69 74 20 6f 72 20 33 32 2d 62 69 74 2e 0a  -bit or 32-bit..
18320 2a 2a 20 55 73 75 61 6c 6c 79 20 69 74 20 69 73  ** Usually it is
18330 20 31 36 2d 62 69 74 73 2e 20 20 42 75 74 20 69   16-bits.  But i
18340 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 56 41 52  f SQLITE_MAX_VAR
18350 49 41 42 4c 45 5f 4e 55 4d 42 45 52 20 69 73 20  IABLE_NUMBER is 
18360 67 72 65 61 74 65 72 0a 2a 2a 20 74 68 61 6e 20  greater.** than 
18370 33 32 37 36 37 20 77 65 20 68 61 76 65 20 74 6f  32767 we have to
18380 20 6d 61 6b 65 20 69 74 20 33 32 2d 62 69 74 2e   make it 32-bit.
18390 20 20 31 36 2d 62 69 74 20 69 73 20 70 72 65 66    16-bit is pref
183a0 65 72 72 65 64 20 62 65 63 61 75 73 65 0a 2a 2a  erred because.**
183b0 20 69 74 20 75 73 65 73 20 6c 65 73 73 20 6d 65   it uses less me
183c0 6d 6f 72 79 20 69 6e 20 74 68 65 20 45 78 70 72  mory in the Expr
183d0 20 6f 62 6a 65 63 74 2c 20 77 68 69 63 68 20 69   object, which i
183e0 73 20 61 20 62 69 67 20 6d 65 6d 6f 72 79 20 75  s a big memory u
183f0 73 65 72 0a 2a 2a 20 69 6e 20 73 79 73 74 65 6d  ser.** in system
18400 73 20 77 69 74 68 20 6c 6f 74 73 20 6f 66 20 70  s with lots of p
18410 72 65 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e  repared statemen
18420 74 73 2e 20 20 41 6e 64 20 66 65 77 20 61 70 70  ts.  And few app
18430 6c 69 63 61 74 69 6f 6e 73 0a 2a 2a 20 6e 65 65  lications.** nee
18440 64 20 6d 6f 72 65 20 74 68 61 6e 20 61 62 6f 75  d more than abou
18450 74 20 31 30 20 6f 72 20 32 30 20 76 61 72 69 61  t 10 or 20 varia
18460 62 6c 65 73 2e 20 20 42 75 74 20 73 6f 6d 65 20  bles.  But some 
18470 65 78 74 72 65 6d 65 20 75 73 65 72 73 20 77 61  extreme users wa
18480 6e 74 0a 2a 2a 20 74 6f 20 68 61 76 65 20 70 72  nt.** to have pr
18490 65 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74  epared statement
184a0 73 20 77 69 74 68 20 6f 76 65 72 20 33 32 37 36  s with over 3276
184b0 37 20 76 61 72 69 61 62 6c 65 73 2c 20 61 6e 64  7 variables, and
184c0 20 66 6f 72 20 74 68 65 6d 0a 2a 2a 20 74 68 65   for them.** the
184d0 20 6f 70 74 69 6f 6e 20 69 73 20 61 76 61 69 6c   option is avail
184e0 61 62 6c 65 20 28 61 74 20 63 6f 6d 70 69 6c 65  able (at compile
184f0 2d 74 69 6d 65 29 2e 0a 2a 2f 0a 23 69 66 20 53  -time)..*/.#if S
18500 51 4c 49 54 45 5f 4d 41 58 5f 56 41 52 49 41 42  QLITE_MAX_VARIAB
18510 4c 45 5f 4e 55 4d 42 45 52 3c 3d 33 32 37 36 37  LE_NUMBER<=32767
18520 0a 74 79 70 65 64 65 66 20 69 31 36 20 79 6e 56  .typedef i16 ynV
18530 61 72 3b 0a 23 65 6c 73 65 0a 74 79 70 65 64 65  ar;.#else.typede
18540 66 20 69 6e 74 20 79 6e 56 61 72 3b 0a 23 65 6e  f int ynVar;.#en
18550 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20  dif../*.** Each 
18560 6e 6f 64 65 20 6f 66 20 61 6e 20 65 78 70 72 65  node of an expre
18570 73 73 69 6f 6e 20 69 6e 20 74 68 65 20 70 61 72  ssion in the par
18580 73 65 20 74 72 65 65 20 69 73 20 61 6e 20 69 6e  se tree is an in
18590 73 74 61 6e 63 65 0a 2a 2a 20 6f 66 20 74 68 69  stance.** of thi
185a0 73 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a 0a  s structure..**.
185b0 2a 2a 20 45 78 70 72 2e 6f 70 20 69 73 20 74 68  ** Expr.op is th
185c0 65 20 6f 70 63 6f 64 65 2e 20 54 68 65 20 69 6e  e opcode. The in
185d0 74 65 67 65 72 20 70 61 72 73 65 72 20 74 6f 6b  teger parser tok
185e0 65 6e 20 63 6f 64 65 73 20 61 72 65 20 72 65 75  en codes are reu
185f0 73 65 64 0a 2a 2a 20 61 73 20 6f 70 63 6f 64 65  sed.** as opcode
18600 73 20 68 65 72 65 2e 20 46 6f 72 20 65 78 61 6d  s here. For exam
18610 70 6c 65 2c 20 74 68 65 20 70 61 72 73 65 72 20  ple, the parser 
18620 64 65 66 69 6e 65 73 20 54 4b 5f 47 45 20 74 6f  defines TK_GE to
18630 20 62 65 20 61 6e 20 69 6e 74 65 67 65 72 0a 2a   be an integer.*
18640 2a 20 63 6f 64 65 20 72 65 70 72 65 73 65 6e 74  * code represent
18650 69 6e 67 20 74 68 65 20 22 3e 3d 22 20 6f 70 65  ing the ">=" ope
18660 72 61 74 6f 72 2e 20 54 68 69 73 20 73 61 6d 65  rator. This same
18670 20 69 6e 74 65 67 65 72 20 63 6f 64 65 20 69 73   integer code is
18680 20 72 65 75 73 65 64 0a 2a 2a 20 74 6f 20 72 65   reused.** to re
18690 70 72 65 73 65 6e 74 20 74 68 65 20 67 72 65 61  present the grea
186a0 74 65 72 2d 74 68 61 6e 2d 6f 72 2d 65 71 75 61  ter-than-or-equa
186b0 6c 2d 74 6f 20 6f 70 65 72 61 74 6f 72 20 69 6e  l-to operator in
186c0 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 0a   the expression.
186d0 2a 2a 20 74 72 65 65 2e 0a 2a 2a 0a 2a 2a 20 49  ** tree..**.** I
186e0 66 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e  f the expression
186f0 20 69 73 20 61 6e 20 53 51 4c 20 6c 69 74 65 72   is an SQL liter
18700 61 6c 20 28 54 4b 5f 49 4e 54 45 47 45 52 2c 20  al (TK_INTEGER, 
18710 54 4b 5f 46 4c 4f 41 54 2c 20 54 4b 5f 42 4c 4f  TK_FLOAT, TK_BLO
18720 42 2c 0a 2a 2a 20 6f 72 20 54 4b 5f 53 54 52 49  B,.** or TK_STRI
18730 4e 47 29 2c 20 74 68 65 6e 20 45 78 70 72 2e 74  NG), then Expr.t
18740 6f 6b 65 6e 20 63 6f 6e 74 61 69 6e 73 20 74 68  oken contains th
18750 65 20 74 65 78 74 20 6f 66 20 74 68 65 20 53 51  e text of the SQ
18760 4c 20 6c 69 74 65 72 61 6c 2e 20 49 66 0a 2a 2a  L literal. If.**
18770 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20   the expression 
18780 69 73 20 61 20 76 61 72 69 61 62 6c 65 20 28 54  is a variable (T
18790 4b 5f 56 41 52 49 41 42 4c 45 29 2c 20 74 68 65  K_VARIABLE), the
187a0 6e 20 45 78 70 72 2e 74 6f 6b 65 6e 20 63 6f 6e  n Expr.token con
187b0 74 61 69 6e 73 20 74 68 65 0a 2a 2a 20 76 61 72  tains the.** var
187c0 69 61 62 6c 65 20 6e 61 6d 65 2e 20 46 69 6e 61  iable name. Fina
187d0 6c 6c 79 2c 20 69 66 20 74 68 65 20 65 78 70 72  lly, if the expr
187e0 65 73 73 69 6f 6e 20 69 73 20 61 6e 20 53 51 4c  ession is an SQL
187f0 20 66 75 6e 63 74 69 6f 6e 20 28 54 4b 5f 46 55   function (TK_FU
18800 4e 43 54 49 4f 4e 29 2c 0a 2a 2a 20 74 68 65 6e  NCTION),.** then
18810 20 45 78 70 72 2e 74 6f 6b 65 6e 20 63 6f 6e 74   Expr.token cont
18820 61 69 6e 73 20 74 68 65 20 6e 61 6d 65 20 6f 66  ains the name of
18830 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 2e 0a 2a   the function..*
18840 2a 0a 2a 2a 20 45 78 70 72 2e 70 52 69 67 68 74  *.** Expr.pRight
18850 20 61 6e 64 20 45 78 70 72 2e 70 4c 65 66 74 20   and Expr.pLeft 
18860 61 72 65 20 74 68 65 20 6c 65 66 74 20 61 6e 64  are the left and
18870 20 72 69 67 68 74 20 73 75 62 65 78 70 72 65 73   right subexpres
18880 73 69 6f 6e 73 20 6f 66 20 61 0a 2a 2a 20 62 69  sions of a.** bi
18890 6e 61 72 79 20 6f 70 65 72 61 74 6f 72 2e 20 45  nary operator. E
188a0 69 74 68 65 72 20 6f 72 20 62 6f 74 68 20 6d 61  ither or both ma
188b0 79 20 62 65 20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a 2a  y be NULL..**.**
188c0 20 45 78 70 72 2e 78 2e 70 4c 69 73 74 20 69 73   Expr.x.pList is
188d0 20 61 20 6c 69 73 74 20 6f 66 20 61 72 67 75 6d   a list of argum
188e0 65 6e 74 73 20 69 66 20 74 68 65 20 65 78 70 72  ents if the expr
188f0 65 73 73 69 6f 6e 20 69 73 20 61 6e 20 53 51 4c  ession is an SQL
18900 20 66 75 6e 63 74 69 6f 6e 2c 0a 2a 2a 20 61 20   function,.** a 
18910 43 41 53 45 20 65 78 70 72 65 73 73 69 6f 6e 20  CASE expression 
18920 6f 72 20 61 6e 20 49 4e 20 65 78 70 72 65 73 73  or an IN express
18930 69 6f 6e 20 6f 66 20 74 68 65 20 66 6f 72 6d 20  ion of the form 
18940 22 3c 6c 68 73 3e 20 49 4e 20 28 3c 79 3e 2c 20  "<lhs> IN (<y>, 
18950 3c 7a 3e 2e 2e 2e 29 22 2e 0a 2a 2a 20 45 78 70  <z>...)"..** Exp
18960 72 2e 78 2e 70 53 65 6c 65 63 74 20 69 73 20 75  r.x.pSelect is u
18970 73 65 64 20 69 66 20 74 68 65 20 65 78 70 72 65  sed if the expre
18980 73 73 69 6f 6e 20 69 73 20 61 20 73 75 62 2d 73  ssion is a sub-s
18990 65 6c 65 63 74 20 6f 72 20 61 6e 20 65 78 70 72  elect or an expr
189a0 65 73 73 69 6f 6e 20 6f 66 0a 2a 2a 20 74 68 65  ession of.** the
189b0 20 66 6f 72 6d 20 22 3c 6c 68 73 3e 20 49 4e 20   form "<lhs> IN 
189c0 28 53 45 4c 45 43 54 20 2e 2e 2e 29 22 2e 20 49  (SELECT ...)". I
189d0 66 20 74 68 65 20 45 50 5f 78 49 73 53 65 6c 65  f the EP_xIsSele
189e0 63 74 20 62 69 74 20 69 73 20 73 65 74 20 69 6e  ct bit is set in
189f0 20 74 68 65 0a 2a 2a 20 45 78 70 72 2e 66 6c 61   the.** Expr.fla
18a00 67 73 20 6d 61 73 6b 2c 20 74 68 65 6e 20 45 78  gs mask, then Ex
18a10 70 72 2e 78 2e 70 53 65 6c 65 63 74 20 69 73 20  pr.x.pSelect is 
18a20 76 61 6c 69 64 2e 20 4f 74 68 65 72 77 69 73 65  valid. Otherwise
18a30 2c 20 45 78 70 72 2e 78 2e 70 4c 69 73 74 20 69  , Expr.x.pList i
18a40 73 0a 2a 2a 20 76 61 6c 69 64 2e 0a 2a 2a 0a 2a  s.** valid..**.*
18a50 2a 20 41 6e 20 65 78 70 72 65 73 73 69 6f 6e 20  * An expression 
18a60 6f 66 20 74 68 65 20 66 6f 72 6d 20 49 44 20 6f  of the form ID o
18a70 72 20 49 44 2e 49 44 20 72 65 66 65 72 73 20 74  r ID.ID refers t
18a80 6f 20 61 20 63 6f 6c 75 6d 6e 20 69 6e 20 61 20  o a column in a 
18a90 74 61 62 6c 65 2e 0a 2a 2a 20 46 6f 72 20 73 75  table..** For su
18aa0 63 68 20 65 78 70 72 65 73 73 69 6f 6e 73 2c 20  ch expressions, 
18ab0 45 78 70 72 2e 6f 70 20 69 73 20 73 65 74 20 74  Expr.op is set t
18ac0 6f 20 54 4b 5f 43 4f 4c 55 4d 4e 20 61 6e 64 20  o TK_COLUMN and 
18ad0 45 78 70 72 2e 69 54 61 62 6c 65 20 69 73 0a 2a  Expr.iTable is.*
18ae0 2a 20 74 68 65 20 69 6e 74 65 67 65 72 20 63 75  * the integer cu
18af0 72 73 6f 72 20 6e 75 6d 62 65 72 20 6f 66 20 61  rsor number of a
18b00 20 56 44 42 45 20 63 75 72 73 6f 72 20 70 6f 69   VDBE cursor poi
18b10 6e 74 69 6e 67 20 74 6f 20 74 68 61 74 20 74 61  nting to that ta
18b20 62 6c 65 20 61 6e 64 0a 2a 2a 20 45 78 70 72 2e  ble and.** Expr.
18b30 69 43 6f 6c 75 6d 6e 20 69 73 20 74 68 65 20 63  iColumn is the c
18b40 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 66 6f 72  olumn number for
18b50 20 74 68 65 20 73 70 65 63 69 66 69 63 20 63 6f   the specific co
18b60 6c 75 6d 6e 2e 20 20 49 66 20 74 68 65 0a 2a 2a  lumn.  If the.**
18b70 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 75   expression is u
18b80 73 65 64 20 61 73 20 61 20 72 65 73 75 6c 74 20  sed as a result 
18b90 69 6e 20 61 6e 20 61 67 67 72 65 67 61 74 65 20  in an aggregate 
18ba0 53 45 4c 45 43 54 2c 20 74 68 65 6e 20 74 68 65  SELECT, then the
18bb0 0a 2a 2a 20 76 61 6c 75 65 20 69 73 20 61 6c 73  .** value is als
18bc0 6f 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20  o stored in the 
18bd0 45 78 70 72 2e 69 41 67 67 20 63 6f 6c 75 6d 6e  Expr.iAgg column
18be0 20 69 6e 20 74 68 65 20 61 67 67 72 65 67 61 74   in the aggregat
18bf0 65 20 73 6f 20 74 68 61 74 0a 2a 2a 20 69 74 20  e so that.** it 
18c00 63 61 6e 20 62 65 20 61 63 63 65 73 73 65 64 20  can be accessed 
18c10 61 66 74 65 72 20 61 6c 6c 20 61 67 67 72 65 67  after all aggreg
18c20 61 74 65 73 20 61 72 65 20 63 6f 6d 70 75 74 65  ates are compute
18c30 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  d..**.** If the 
18c40 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61 6e  expression is an
18c50 20 75 6e 62 6f 75 6e 64 20 76 61 72 69 61 62 6c   unbound variabl
18c60 65 20 6d 61 72 6b 65 72 20 28 61 20 71 75 65 73  e marker (a ques
18c70 74 69 6f 6e 20 6d 61 72 6b 0a 2a 2a 20 63 68 61  tion mark.** cha
18c80 72 61 63 74 65 72 20 27 3f 27 20 69 6e 20 74 68  racter '?' in th
18c90 65 20 6f 72 69 67 69 6e 61 6c 20 53 51 4c 29 20  e original SQL) 
18ca0 74 68 65 6e 20 74 68 65 20 45 78 70 72 2e 69 54  then the Expr.iT
18cb0 61 62 6c 65 20 68 6f 6c 64 73 20 74 68 65 20 69  able holds the i
18cc0 6e 64 65 78 0a 2a 2a 20 6e 75 6d 62 65 72 20 66  ndex.** number f
18cd0 6f 72 20 74 68 61 74 20 76 61 72 69 61 62 6c 65  or that variable
18ce0 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 65  ..**.** If the e
18cf0 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61 20 73  xpression is a s
18d00 75 62 71 75 65 72 79 20 74 68 65 6e 20 45 78 70  ubquery then Exp
18d10 72 2e 69 43 6f 6c 75 6d 6e 20 68 6f 6c 64 73 20  r.iColumn holds 
18d20 61 6e 20 69 6e 74 65 67 65 72 0a 2a 2a 20 72 65  an integer.** re
18d30 67 69 73 74 65 72 20 6e 75 6d 62 65 72 20 63 6f  gister number co
18d40 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 72 65 73  ntaining the res
18d50 75 6c 74 20 6f 66 20 74 68 65 20 73 75 62 71 75  ult of the subqu
18d60 65 72 79 2e 20 20 49 66 20 74 68 65 0a 2a 2a 20  ery.  If the.** 
18d70 73 75 62 71 75 65 72 79 20 67 69 76 65 73 20 61  subquery gives a
18d80 20 63 6f 6e 73 74 61 6e 74 20 72 65 73 75 6c 74   constant result
18d90 2c 20 74 68 65 6e 20 69 54 61 62 6c 65 20 69 73  , then iTable is
18da0 20 2d 31 2e 20 20 49 66 20 74 68 65 20 73 75 62   -1.  If the sub
18db0 71 75 65 72 79 0a 2a 2a 20 67 69 76 65 73 20 61  query.** gives a
18dc0 20 64 69 66 66 65 72 65 6e 74 20 61 6e 73 77 65   different answe
18dd0 72 20 61 74 20 64 69 66 66 65 72 65 6e 74 20 74  r at different t
18de0 69 6d 65 73 20 64 75 72 69 6e 67 20 73 74 61 74  imes during stat
18df0 65 6d 65 6e 74 20 70 72 6f 63 65 73 73 69 6e 67  ement processing
18e00 0a 2a 2a 20 74 68 65 6e 20 69 54 61 62 6c 65 20  .** then iTable 
18e10 69 73 20 74 68 65 20 61 64 64 72 65 73 73 20 6f  is the address o
18e20 66 20 61 20 73 75 62 72 6f 75 74 69 6e 65 20 74  f a subroutine t
18e30 68 61 74 20 63 6f 6d 70 75 74 65 73 20 74 68 65  hat computes the
18e40 20 73 75 62 71 75 65 72 79 2e 0a 2a 2a 0a 2a 2a   subquery..**.**
18e50 20 49 66 20 74 68 65 20 45 78 70 72 20 69 73 20   If the Expr is 
18e60 6f 66 20 74 79 70 65 20 4f 50 5f 43 6f 6c 75 6d  of type OP_Colum
18e70 6e 2c 20 61 6e 64 20 74 68 65 20 74 61 62 6c 65  n, and the table
18e80 20 69 74 20 69 73 20 73 65 6c 65 63 74 69 6e 67   it is selecting
18e90 20 66 72 6f 6d 0a 2a 2a 20 69 73 20 61 20 64 69   from.** is a di
18ea0 73 6b 20 74 61 62 6c 65 20 6f 72 20 74 68 65 20  sk table or the 
18eb0 22 6f 6c 64 2e 2a 22 20 70 73 65 75 64 6f 2d 74  "old.*" pseudo-t
18ec0 61 62 6c 65 2c 20 74 68 65 6e 20 70 54 61 62 20  able, then pTab 
18ed0 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 0a 2a 2a  points to the.**
18ee0 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 74   corresponding t
18ef0 61 62 6c 65 20 64 65 66 69 6e 69 74 69 6f 6e 2e  able definition.
18f00 0a 2a 2a 0a 2a 2a 20 41 4c 4c 4f 43 41 54 49 4f  .**.** ALLOCATIO
18f10 4e 20 4e 4f 54 45 53 3a 0a 2a 2a 0a 2a 2a 20 45  N NOTES:.**.** E
18f20 78 70 72 20 6f 62 6a 65 63 74 73 20 63 61 6e 20  xpr objects can 
18f30 75 73 65 20 61 20 6c 6f 74 20 6f 66 20 6d 65 6d  use a lot of mem
18f40 6f 72 79 20 73 70 61 63 65 20 69 6e 20 64 61 74  ory space in dat
18f50 61 62 61 73 65 20 73 63 68 65 6d 61 2e 20 20 54  abase schema.  T
18f60 6f 0a 2a 2a 20 68 65 6c 70 20 72 65 64 75 63 65  o.** help reduce
18f70 20 6d 65 6d 6f 72 79 20 72 65 71 75 69 72 65 6d   memory requirem
18f80 65 6e 74 73 2c 20 73 6f 6d 65 74 69 6d 65 73 20  ents, sometimes 
18f90 61 6e 20 45 78 70 72 20 6f 62 6a 65 63 74 20 77  an Expr object w
18fa0 69 6c 6c 20 62 65 0a 2a 2a 20 74 72 75 6e 63 61  ill be.** trunca
18fb0 74 65 64 2e 20 20 41 6e 64 20 74 6f 20 72 65 64  ted.  And to red
18fc0 75 63 65 20 74 68 65 20 6e 75 6d 62 65 72 20 6f  uce the number o
18fd0 66 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74  f memory allocat
18fe0 69 6f 6e 73 2c 20 73 6f 6d 65 74 69 6d 65 73 0a  ions, sometimes.
18ff0 2a 2a 20 74 77 6f 20 6f 72 20 6d 6f 72 65 20 45  ** two or more E
19000 78 70 72 20 6f 62 6a 65 63 74 73 20 77 69 6c 6c  xpr objects will
19010 20 62 65 20 73 74 6f 72 65 64 20 69 6e 20 61 20   be stored in a 
19020 73 69 6e 67 6c 65 20 6d 65 6d 6f 72 79 20 61 6c  single memory al
19030 6c 6f 63 61 74 69 6f 6e 2c 0a 2a 2a 20 74 6f 67  location,.** tog
19040 65 74 68 65 72 20 77 69 74 68 20 45 78 70 72 2e  ether with Expr.
19050 7a 54 6f 6b 65 6e 20 73 74 72 69 6e 67 73 2e 0a  zToken strings..
19060 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 45 50 5f  **.** If the EP_
19070 52 65 64 75 63 65 64 20 61 6e 64 20 45 50 5f 54  Reduced and EP_T
19080 6f 6b 65 6e 4f 6e 6c 79 20 66 6c 61 67 73 20 61  okenOnly flags a
19090 72 65 20 73 65 74 20 77 68 65 6e 0a 2a 2a 20 61  re set when.** a
190a0 6e 20 45 78 70 72 20 6f 62 6a 65 63 74 20 69 73  n Expr object is
190b0 20 74 72 75 6e 63 61 74 65 64 2e 20 20 57 68 65   truncated.  Whe
190c0 6e 20 45 50 5f 52 65 64 75 63 65 64 20 69 73 20  n EP_Reduced is 
190d0 73 65 74 2c 20 74 68 65 6e 20 61 6c 6c 0a 2a 2a  set, then all.**
190e0 20 74 68 65 20 63 68 69 6c 64 20 45 78 70 72 20   the child Expr 
190f0 6f 62 6a 65 63 74 73 20 69 6e 20 74 68 65 20 45  objects in the E
19100 78 70 72 2e 70 4c 65 66 74 20 61 6e 64 20 45 78  xpr.pLeft and Ex
19110 70 72 2e 70 52 69 67 68 74 20 73 75 62 74 72 65  pr.pRight subtre
19120 65 73 0a 2a 2a 20 61 72 65 20 63 6f 6e 74 61 69  es.** are contai
19130 6e 65 64 20 77 69 74 68 69 6e 20 74 68 65 20 73  ned within the s
19140 61 6d 65 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63  ame memory alloc
19150 61 74 69 6f 6e 2e 20 20 4e 6f 74 65 2c 20 68 6f  ation.  Note, ho
19160 77 65 76 65 72 2c 20 74 68 61 74 0a 2a 2a 20 74  wever, that.** t
19170 68 65 20 73 75 62 74 72 65 65 73 20 69 6e 20 45  he subtrees in E
19180 78 70 72 2e 78 2e 70 4c 69 73 74 20 6f 72 20 45  xpr.x.pList or E
19190 78 70 72 2e 78 2e 70 53 65 6c 65 63 74 20 61 72  xpr.x.pSelect ar
191a0 65 20 61 6c 77 61 79 73 20 73 65 70 61 72 61 74  e always separat
191b0 65 6c 79 0a 2a 2a 20 61 6c 6c 6f 63 61 74 65 64  ely.** allocated
191c0 2c 20 72 65 67 61 72 64 6c 65 73 73 20 6f 66 20  , regardless of 
191d0 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 45  whether or not E
191e0 50 5f 52 65 64 75 63 65 64 20 69 73 20 73 65 74  P_Reduced is set
191f0 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 45 78 70 72  ..*/.struct Expr
19200 20 7b 0a 20 20 75 38 20 6f 70 3b 20 20 20 20 20   {.  u8 op;     
19210 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f              /* O
19220 70 65 72 61 74 69 6f 6e 20 70 65 72 66 6f 72 6d  peration perform
19230 65 64 20 62 79 20 74 68 69 73 20 6e 6f 64 65 20  ed by this node 
19240 2a 2f 0a 20 20 63 68 61 72 20 61 66 66 69 6e 69  */.  char affini
19250 74 79 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54  ty;         /* T
19260 68 65 20 61 66 66 69 6e 69 74 79 20 6f 66 20 74  he affinity of t
19270 68 65 20 63 6f 6c 75 6d 6e 20 6f 72 20 30 20 69  he column or 0 i
19280 66 20 6e 6f 74 20 61 20 63 6f 6c 75 6d 6e 20 2a  f not a column *
19290 2f 0a 20 20 75 33 32 20 66 6c 61 67 73 3b 20 20  /.  u32 flags;  
192a0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61             /* Va
192b0 72 69 6f 75 73 20 66 6c 61 67 73 2e 20 20 45 50  rious flags.  EP
192c0 5f 2a 20 53 65 65 20 62 65 6c 6f 77 20 2a 2f 0a  _* See below */.
192d0 20 20 75 6e 69 6f 6e 20 7b 0a 20 20 20 20 63 68    union {.    ch
192e0 61 72 20 2a 7a 54 6f 6b 65 6e 3b 20 20 20 20 20  ar *zToken;     
192f0 20 20 20 20 20 2f 2a 20 54 6f 6b 65 6e 20 76 61       /* Token va
19300 6c 75 65 2e 20 5a 65 72 6f 20 74 65 72 6d 69 6e  lue. Zero termin
19310 61 74 65 64 20 61 6e 64 20 64 65 71 75 6f 74 65  ated and dequote
19320 64 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 56 61  d */.    int iVa
19330 6c 75 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  lue;            
19340 2f 2a 20 4e 6f 6e 2d 6e 65 67 61 74 69 76 65 20  /* Non-negative 
19350 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20 69 66  integer value if
19360 20 45 50 5f 49 6e 74 56 61 6c 75 65 20 2a 2f 0a   EP_IntValue */.
19370 20 20 7d 20 75 3b 0a 0a 20 20 2f 2a 20 49 66 20    } u;..  /* If 
19380 74 68 65 20 45 50 5f 54 6f 6b 65 6e 4f 6e 6c 79  the EP_TokenOnly
19390 20 66 6c 61 67 20 69 73 20 73 65 74 20 69 6e 20   flag is set in 
193a0 74 68 65 20 45 78 70 72 2e 66 6c 61 67 73 20 6d  the Expr.flags m
193b0 61 73 6b 2c 20 74 68 65 6e 20 6e 6f 0a 20 20 2a  ask, then no.  *
193c0 2a 20 73 70 61 63 65 20 69 73 20 61 6c 6c 6f 63  * space is alloc
193d0 61 74 65 64 20 66 6f 72 20 74 68 65 20 66 69 65  ated for the fie
193e0 6c 64 73 20 62 65 6c 6f 77 20 74 68 69 73 20 70  lds below this p
193f0 6f 69 6e 74 2e 20 41 6e 20 61 74 74 65 6d 70 74  oint. An attempt
19400 20 74 6f 0a 20 20 2a 2a 20 61 63 63 65 73 73 20   to.  ** access 
19410 74 68 65 6d 20 77 69 6c 6c 20 72 65 73 75 6c 74  them will result
19420 20 69 6e 20 61 20 73 65 67 66 61 75 6c 74 20 6f   in a segfault o
19430 72 20 6d 61 6c 66 75 6e 63 74 69 6f 6e 2e 0a 20  r malfunction.. 
19440 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a   ***************
19450 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
19460 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
19470 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
19480 2a 2a 2a 2a 2a 2a 2f 0a 0a 20 20 45 78 70 72 20  ******/..  Expr 
19490 2a 70 4c 65 66 74 3b 20 20 20 20 20 20 20 20 20  *pLeft;         
194a0 20 20 2f 2a 20 4c 65 66 74 20 73 75 62 6e 6f 64    /* Left subnod
194b0 65 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 52 69  e */.  Expr *pRi
194c0 67 68 74 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  ght;          /*
194d0 20 52 69 67 68 74 20 73 75 62 6e 6f 64 65 20 2a   Right subnode *
194e0 2f 0a 20 20 75 6e 69 6f 6e 20 7b 0a 20 20 20 20  /.  union {.    
194f0 45 78 70 72 4c 69 73 74 20 2a 70 4c 69 73 74 3b  ExprList *pList;
19500 20 20 20 20 20 2f 2a 20 6f 70 20 3d 20 49 4e 2c       /* op = IN,
19510 20 45 58 49 53 54 53 2c 20 53 45 4c 45 43 54 2c   EXISTS, SELECT,
19520 20 43 41 53 45 2c 20 46 55 4e 43 54 49 4f 4e 2c   CASE, FUNCTION,
19530 20 42 45 54 57 45 45 4e 20 2a 2f 0a 20 20 20 20   BETWEEN */.    
19540 53 65 6c 65 63 74 20 2a 70 53 65 6c 65 63 74 3b  Select *pSelect;
19550 20 20 20 20 20 2f 2a 20 45 50 5f 78 49 73 53 65       /* EP_xIsSe
19560 6c 65 63 74 20 61 6e 64 20 6f 70 20 3d 20 49 4e  lect and op = IN
19570 2c 20 45 58 49 53 54 53 2c 20 53 45 4c 45 43 54  , EXISTS, SELECT
19580 20 2a 2f 0a 20 20 7d 20 78 3b 0a 0a 20 20 2f 2a   */.  } x;..  /*
19590 20 49 66 20 74 68 65 20 45 50 5f 52 65 64 75 63   If the EP_Reduc
195a0 65 64 20 66 6c 61 67 20 69 73 20 73 65 74 20 69  ed flag is set i
195b0 6e 20 74 68 65 20 45 78 70 72 2e 66 6c 61 67 73  n the Expr.flags
195c0 20 6d 61 73 6b 2c 20 74 68 65 6e 20 6e 6f 0a 20   mask, then no. 
195d0 20 2a 2a 20 73 70 61 63 65 20 69 73 20 61 6c 6c   ** space is all
195e0 6f 63 61 74 65 64 20 66 6f 72 20 74 68 65 20 66  ocated for the f
195f0 69 65 6c 64 73 20 62 65 6c 6f 77 20 74 68 69 73  ields below this
19600 20 70 6f 69 6e 74 2e 20 41 6e 20 61 74 74 65 6d   point. An attem
19610 70 74 20 74 6f 0a 20 20 2a 2a 20 61 63 63 65 73  pt to.  ** acces
19620 73 20 74 68 65 6d 20 77 69 6c 6c 20 72 65 73 75  s them will resu
19630 6c 74 20 69 6e 20 61 20 73 65 67 66 61 75 6c 74  lt in a segfault
19640 20 6f 72 20 6d 61 6c 66 75 6e 63 74 69 6f 6e 2e   or malfunction.
19650 0a 20 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  .  *************
19660 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
19670 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
19680 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
19690 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 23 69 66 20 53  ********/..#if S
196a0 51 4c 49 54 45 5f 4d 41 58 5f 45 58 50 52 5f 44  QLITE_MAX_EXPR_D
196b0 45 50 54 48 3e 30 0a 20 20 69 6e 74 20 6e 48 65  EPTH>0.  int nHe
196c0 69 67 68 74 3b 20 20 20 20 20 20 20 20 20 20 20  ight;           
196d0 2f 2a 20 48 65 69 67 68 74 20 6f 66 20 74 68 65  /* Height of the
196e0 20 74 72 65 65 20 68 65 61 64 65 64 20 62 79 20   tree headed by 
196f0 74 68 69 73 20 6e 6f 64 65 20 2a 2f 0a 23 65 6e  this node */.#en
19700 64 69 66 0a 20 20 69 6e 74 20 69 54 61 62 6c 65  dif.  int iTable
19710 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
19720 54 4b 5f 43 4f 4c 55 4d 4e 3a 20 63 75 72 73 6f  TK_COLUMN: curso
19730 72 20 6e 75 6d 62 65 72 20 6f 66 20 74 61 62 6c  r number of tabl
19740 65 20 68 6f 6c 64 69 6e 67 20 63 6f 6c 75 6d 6e  e holding column
19750 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
19760 20 20 20 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f            ** TK_
19770 52 45 47 49 53 54 45 52 3a 20 72 65 67 69 73 74  REGISTER: regist
19780 65 72 20 6e 75 6d 62 65 72 0a 20 20 20 20 20 20  er number.      
19790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
197a0 20 20 20 2a 2a 20 54 4b 5f 54 52 49 47 47 45 52     ** TK_TRIGGER
197b0 3a 20 31 20 2d 3e 20 6e 65 77 2c 20 30 20 2d 3e  : 1 -> new, 0 ->
197c0 20 6f 6c 64 0a 20 20 20 20 20 20 20 20 20 20 20   old.           
197d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a                **
197e0 20 45 50 5f 55 6e 6c 69 6b 65 6c 79 3a 20 20 31   EP_Unlikely:  1
197f0 33 34 32 31 37 37 32 38 20 74 69 6d 65 73 20 6c  34217728 times l
19800 69 6b 65 6c 69 68 6f 6f 64 0a 20 20 20 20 20 20  ikelihood.      
19810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19820 20 20 20 2a 2a 20 54 4b 5f 53 45 4c 45 43 54 3a     ** TK_SELECT:
19830 20 31 73 74 20 72 65 67 69 73 74 65 72 20 6f 66   1st register of
19840 20 72 65 73 75 6c 74 20 76 65 63 74 6f 72 20 2a   result vector *
19850 2f 0a 20 20 79 6e 56 61 72 20 69 43 6f 6c 75 6d  /.  ynVar iColum
19860 6e 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54 4b  n;         /* TK
19870 5f 43 4f 4c 55 4d 4e 3a 20 63 6f 6c 75 6d 6e 20  _COLUMN: column 
19880 69 6e 64 65 78 2e 20 20 2d 31 20 66 6f 72 20 72  index.  -1 for r
19890 6f 77 69 64 2e 0a 20 20 20 20 20 20 20 20 20 20  owid..          
198a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a                 *
198b0 2a 20 54 4b 5f 56 41 52 49 41 42 4c 45 3a 20 76  * TK_VARIABLE: v
198c0 61 72 69 61 62 6c 65 20 6e 75 6d 62 65 72 20 28  ariable number (
198d0 61 6c 77 61 79 73 20 3e 3d 20 31 29 2e 0a 20 20  always >= 1)..  
198e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
198f0 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f 53 45 4c         ** TK_SEL
19900 45 43 54 5f 43 4f 4c 55 4d 4e 3a 20 63 6f 6c 75  ECT_COLUMN: colu
19910 6d 6e 20 6f 66 20 74 68 65 20 72 65 73 75 6c 74  mn of the result
19920 20 76 65 63 74 6f 72 20 2a 2f 0a 20 20 69 31 36   vector */.  i16
19930 20 69 41 67 67 3b 20 20 20 20 20 20 20 20 20 20   iAgg;          
19940 20 20 20 20 2f 2a 20 57 68 69 63 68 20 65 6e 74      /* Which ent
19950 72 79 20 69 6e 20 70 41 67 67 49 6e 66 6f 2d 3e  ry in pAggInfo->
19960 61 43 6f 6c 5b 5d 20 6f 72 20 2d 3e 61 46 75 6e  aCol[] or ->aFun
19970 63 5b 5d 20 2a 2f 0a 20 20 69 31 36 20 69 52 69  c[] */.  i16 iRi
19980 67 68 74 4a 6f 69 6e 54 61 62 6c 65 3b 20 20 20  ghtJoinTable;   
19990 2f 2a 20 49 66 20 45 50 5f 46 72 6f 6d 4a 6f 69  /* If EP_FromJoi
199a0 6e 2c 20 74 68 65 20 72 69 67 68 74 20 74 61 62  n, the right tab
199b0 6c 65 20 6f 66 20 74 68 65 20 6a 6f 69 6e 20 2a  le of the join *
199c0 2f 0a 20 20 75 38 20 6f 70 32 3b 20 20 20 20 20  /.  u8 op2;     
199d0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 4b             /* TK
199e0 5f 52 45 47 49 53 54 45 52 3a 20 6f 72 69 67 69  _REGISTER: origi
199f0 6e 61 6c 20 76 61 6c 75 65 20 6f 66 20 45 78 70  nal value of Exp
19a00 72 2e 6f 70 0a 20 20 20 20 20 20 20 20 20 20 20  r.op.           
19a10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a                **
19a20 20 54 4b 5f 43 4f 4c 55 4d 4e 3a 20 74 68 65 20   TK_COLUMN: the 
19a30 76 61 6c 75 65 20 6f 66 20 70 35 20 66 6f 72 20  value of p5 for 
19a40 4f 50 5f 43 6f 6c 75 6d 6e 0a 20 20 20 20 20 20  OP_Column.      
19a50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19a60 20 20 20 2a 2a 20 54 4b 5f 41 47 47 5f 46 55 4e     ** TK_AGG_FUN
19a70 43 54 49 4f 4e 3a 20 6e 65 73 74 69 6e 67 20 64  CTION: nesting d
19a80 65 70 74 68 20 2a 2f 0a 20 20 41 67 67 49 6e 66  epth */.  AggInf
19a90 6f 20 2a 70 41 67 67 49 6e 66 6f 3b 20 20 20 20  o *pAggInfo;    
19aa0 20 2f 2a 20 55 73 65 64 20 62 79 20 54 4b 5f 41   /* Used by TK_A
19ab0 47 47 5f 43 4f 4c 55 4d 4e 20 61 6e 64 20 54 4b  GG_COLUMN and TK
19ac0 5f 41 47 47 5f 46 55 4e 43 54 49 4f 4e 20 2a 2f  _AGG_FUNCTION */
19ad0 0a 20 20 75 6e 69 6f 6e 20 7b 0a 20 20 20 20 54  .  union {.    T
19ae0 61 62 6c 65 20 2a 70 54 61 62 3b 20 20 20 20 20  able *pTab;     
19af0 20 20 20 20 20 20 2f 2a 20 54 4b 5f 43 4f 4c 55        /* TK_COLU
19b00 4d 4e 3a 20 54 61 62 6c 65 20 63 6f 6e 74 61 69  MN: Table contai
19b10 6e 69 6e 67 20 63 6f 6c 75 6d 6e 2e 20 43 61 6e  ning column. Can
19b20 20 62 65 20 4e 55 4c 4c 0a 20 20 20 20 20 20 20   be NULL.       
19b30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19b40 20 20 20 20 2a 2a 20 66 6f 72 20 61 20 63 6f 6c      ** for a col
19b50 75 6d 6e 20 6f 66 20 61 6e 20 69 6e 64 65 78 20  umn of an index 
19b60 6f 6e 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e  on an expression
19b70 20 2a 2f 0a 20 20 20 20 57 69 6e 64 6f 77 20 2a   */.    Window *
19b80 70 57 69 6e 3b 20 20 20 20 20 20 20 20 20 20 2f  pWin;          /
19b90 2a 20 54 4b 5f 46 55 4e 43 54 49 4f 4e 3a 20 57  * TK_FUNCTION: W
19ba0 69 6e 64 6f 77 20 64 65 66 69 6e 69 74 69 6f 6e  indow definition
19bb0 20 66 6f 72 20 74 68 65 20 66 75 6e 63 20 2a 2f   for the func */
19bc0 0a 20 20 20 20 73 74 72 75 63 74 20 7b 20 20 20  .    struct {   
19bd0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
19be0 4b 5f 49 4e 2c 20 54 4b 5f 53 45 4c 45 43 54 2c  K_IN, TK_SELECT,
19bf0 20 61 6e 64 20 54 4b 5f 45 58 49 53 54 53 20 2a   and TK_EXISTS *
19c00 2f 0a 20 20 20 20 20 20 69 6e 74 20 69 41 64 64  /.      int iAdd
19c10 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  r;             /
19c20 2a 20 53 75 62 72 6f 75 74 69 6e 65 20 65 6e 74  * Subroutine ent
19c30 72 79 20 61 64 64 72 65 73 73 20 2a 2f 0a 20 20  ry address */.  
19c40 20 20 20 20 69 6e 74 20 72 65 67 52 65 74 75 72      int regRetur
19c50 6e 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65  n;         /* Re
19c60 67 69 73 74 65 72 20 75 73 65 64 20 74 6f 20 68  gister used to h
19c70 6f 6c 64 20 72 65 74 75 72 6e 20 61 64 64 72 65  old return addre
19c80 73 73 20 2a 2f 0a 20 20 20 20 7d 20 73 75 62 3b  ss */.    } sub;
19c90 0a 20 20 7d 20 79 3b 0a 7d 3b 0a 0a 2f 2a 0a 2a  .  } y;.};../*.*
19ca0 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  * The following 
19cb0 61 72 65 20 74 68 65 20 6d 65 61 6e 69 6e 67 73  are the meanings
19cc0 20 6f 66 20 62 69 74 73 20 69 6e 20 74 68 65 20   of bits in the 
19cd0 45 78 70 72 2e 66 6c 61 67 73 20 66 69 65 6c 64  Expr.flags field
19ce0 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  ..*/.#define EP_
19cf0 46 72 6f 6d 4a 6f 69 6e 20 20 30 78 30 30 30 30  FromJoin  0x0000
19d00 30 31 20 2f 2a 20 4f 72 69 67 69 6e 61 74 65 73  01 /* Originates
19d10 20 69 6e 20 4f 4e 2f 55 53 49 4e 47 20 63 6c 61   in ON/USING cla
19d20 75 73 65 20 6f 66 20 6f 75 74 65 72 20 6a 6f 69  use of outer joi
19d30 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  n */.#define EP_
19d40 41 67 67 20 20 20 20 20 20 20 30 78 30 30 30 30  Agg       0x0000
19d50 30 32 20 2f 2a 20 43 6f 6e 74 61 69 6e 73 20 6f  02 /* Contains o
19d60 6e 65 20 6f 72 20 6d 6f 72 65 20 61 67 67 72 65  ne or more aggre
19d70 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 20 2a  gate functions *
19d80 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 48 61 73  /.#define EP_Has
19d90 46 75 6e 63 20 20 20 30 78 30 30 30 30 30 34 20  Func   0x000004 
19da0 2f 2a 20 43 6f 6e 74 61 69 6e 73 20 6f 6e 65 20  /* Contains one 
19db0 6f 72 20 6d 6f 72 65 20 66 75 6e 63 74 69 6f 6e  or more function
19dc0 73 20 6f 66 20 61 6e 79 20 6b 69 6e 64 20 2a 2f  s of any kind */
19dd0 0a 23 64 65 66 69 6e 65 20 45 50 5f 46 69 78 65  .#define EP_Fixe
19de0 64 43 6f 6c 20 20 30 78 30 30 30 30 30 38 20 2f  dCol  0x000008 /
19df0 2a 20 54 4b 5f 43 6f 6c 75 6d 6e 20 77 69 74 68  * TK_Column with
19e00 20 61 20 6b 6e 6f 77 6e 20 66 69 78 65 64 20 76   a known fixed v
19e10 61 6c 75 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  alue */.#define 
19e20 45 50 5f 44 69 73 74 69 6e 63 74 20 20 30 78 30  EP_Distinct  0x0
19e30 30 30 30 31 30 20 2f 2a 20 41 67 67 72 65 67 61  00010 /* Aggrega
19e40 74 65 20 66 75 6e 63 74 69 6f 6e 20 77 69 74 68  te function with
19e50 20 44 49 53 54 49 4e 43 54 20 6b 65 79 77 6f 72   DISTINCT keywor
19e60 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  d */.#define EP_
19e70 56 61 72 53 65 6c 65 63 74 20 30 78 30 30 30 30  VarSelect 0x0000
19e80 32 30 20 2f 2a 20 70 53 65 6c 65 63 74 20 69 73  20 /* pSelect is
19e90 20 63 6f 72 72 65 6c 61 74 65 64 2c 20 6e 6f 74   correlated, not
19ea0 20 63 6f 6e 73 74 61 6e 74 20 2a 2f 0a 23 64 65   constant */.#de
19eb0 66 69 6e 65 20 45 50 5f 44 62 6c 51 75 6f 74 65  fine EP_DblQuote
19ec0 64 20 30 78 30 30 30 30 34 30 20 2f 2a 20 74 6f  d 0x000040 /* to
19ed0 6b 65 6e 2e 7a 20 77 61 73 20 6f 72 69 67 69 6e  ken.z was origin
19ee0 61 6c 6c 79 20 69 6e 20 22 2e 2e 2e 22 20 2a 2f  ally in "..." */
19ef0 0a 23 64 65 66 69 6e 65 20 45 50 5f 49 6e 66 69  .#define EP_Infi
19f00 78 46 75 6e 63 20 30 78 30 30 30 30 38 30 20 2f  xFunc 0x000080 /
19f10 2a 20 54 72 75 65 20 66 6f 72 20 61 6e 20 69 6e  * True for an in
19f20 66 69 78 20 66 75 6e 63 74 69 6f 6e 3a 20 4c 49  fix function: LI
19f30 4b 45 2c 20 47 4c 4f 42 2c 20 65 74 63 20 2a 2f  KE, GLOB, etc */
19f40 0a 23 64 65 66 69 6e 65 20 45 50 5f 43 6f 6c 6c  .#define EP_Coll
19f50 61 74 65 20 20 20 30 78 30 30 30 31 30 30 20 2f  ate   0x000100 /
19f60 2a 20 54 72 65 65 20 63 6f 6e 74 61 69 6e 73 20  * Tree contains 
19f70 61 20 54 4b 5f 43 4f 4c 4c 41 54 45 20 6f 70 65  a TK_COLLATE ope
19f80 72 61 74 6f 72 20 2a 2f 0a 23 64 65 66 69 6e 65  rator */.#define
19f90 20 45 50 5f 47 65 6e 65 72 69 63 20 20 20 30 78   EP_Generic   0x
19fa0 30 30 30 32 30 30 20 2f 2a 20 49 67 6e 6f 72 65  000200 /* Ignore
19fb0 20 43 4f 4c 4c 41 54 45 20 6f 72 20 61 66 66 69   COLLATE or affi
19fc0 6e 69 74 79 20 6f 6e 20 74 68 69 73 20 74 72 65  nity on this tre
19fd0 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  e */.#define EP_
19fe0 49 6e 74 56 61 6c 75 65 20 20 30 78 30 30 30 34  IntValue  0x0004
19ff0 30 30 20 2f 2a 20 49 6e 74 65 67 65 72 20 76 61  00 /* Integer va
1a000 6c 75 65 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e  lue contained in
1a010 20 75 2e 69 56 61 6c 75 65 20 2a 2f 0a 23 64 65   u.iValue */.#de
1a020 66 69 6e 65 20 45 50 5f 78 49 73 53 65 6c 65 63  fine EP_xIsSelec
1a030 74 20 30 78 30 30 30 38 30 30 20 2f 2a 20 78 2e  t 0x000800 /* x.
1a040 70 53 65 6c 65 63 74 20 69 73 20 76 61 6c 69 64  pSelect is valid
1a050 20 28 6f 74 68 65 72 77 69 73 65 20 78 2e 70 4c   (otherwise x.pL
1a060 69 73 74 20 69 73 29 20 2a 2f 0a 23 64 65 66 69  ist is) */.#defi
1a070 6e 65 20 45 50 5f 53 6b 69 70 20 20 20 20 20 20  ne EP_Skip      
1a080 30 78 30 30 31 30 30 30 20 2f 2a 20 43 4f 4c 4c  0x001000 /* COLL
1a090 41 54 45 2c 20 41 53 2c 20 6f 72 20 55 4e 4c 49  ATE, AS, or UNLI
1a0a0 4b 45 4c 59 20 2a 2f 0a 23 64 65 66 69 6e 65 20  KELY */.#define 
1a0b0 45 50 5f 52 65 64 75 63 65 64 20 20 20 30 78 30  EP_Reduced   0x0
1a0c0 30 32 30 30 30 20 2f 2a 20 45 78 70 72 20 73 74  02000 /* Expr st
1a0d0 72 75 63 74 20 45 58 50 52 5f 52 45 44 55 43 45  ruct EXPR_REDUCE
1a0e0 44 53 49 5a 45 20 62 79 74 65 73 20 6f 6e 6c 79  DSIZE bytes only
1a0f0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 54   */.#define EP_T
1a100 6f 6b 65 6e 4f 6e 6c 79 20 30 78 30 30 34 30 30  okenOnly 0x00400
1a110 30 20 2f 2a 20 45 78 70 72 20 73 74 72 75 63 74  0 /* Expr struct
1a120 20 45 58 50 52 5f 54 4f 4b 45 4e 4f 4e 4c 59 53   EXPR_TOKENONLYS
1a130 49 5a 45 20 62 79 74 65 73 20 6f 6e 6c 79 20 2a  IZE bytes only *
1a140 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 53 74 61  /.#define EP_Sta
1a150 74 69 63 20 20 20 20 30 78 30 30 38 30 30 30 20  tic    0x008000 
1a160 2f 2a 20 48 65 6c 64 20 69 6e 20 6d 65 6d 6f 72  /* Held in memor
1a170 79 20 6e 6f 74 20 6f 62 74 61 69 6e 65 64 20 66  y not obtained f
1a180 72 6f 6d 20 6d 61 6c 6c 6f 63 28 29 20 2a 2f 0a  rom malloc() */.
1a190 23 64 65 66 69 6e 65 20 45 50 5f 4d 65 6d 54 6f  #define EP_MemTo
1a1a0 6b 65 6e 20 20 30 78 30 31 30 30 30 30 20 2f 2a  ken  0x010000 /*
1a1b0 20 4e 65 65 64 20 74 6f 20 73 71 6c 69 74 65 33   Need to sqlite3
1a1c0 44 62 46 72 65 65 28 29 20 45 78 70 72 2e 7a 54  DbFree() Expr.zT
1a1d0 6f 6b 65 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  oken */.#define 
1a1e0 45 50 5f 4e 6f 52 65 64 75 63 65 20 20 30 78 30  EP_NoReduce  0x0
1a1f0 32 30 30 30 30 20 2f 2a 20 43 61 6e 6e 6f 74 20  20000 /* Cannot 
1a200 45 58 50 52 44 55 50 5f 52 45 44 55 43 45 20 74  EXPRDUP_REDUCE t
1a210 68 69 73 20 45 78 70 72 20 2a 2f 0a 23 64 65 66  his Expr */.#def
1a220 69 6e 65 20 45 50 5f 55 6e 6c 69 6b 65 6c 79 20  ine EP_Unlikely 
1a230 20 30 78 30 34 30 30 30 30 20 2f 2a 20 75 6e 6c   0x040000 /* unl
1a240 69 6b 65 6c 79 28 29 20 6f 72 20 6c 69 6b 65 6c  ikely() or likel
1a250 69 68 6f 6f 64 28 29 20 66 75 6e 63 74 69 6f 6e  ihood() function
1a260 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 43   */.#define EP_C
1a270 6f 6e 73 74 46 75 6e 63 20 30 78 30 38 30 30 30  onstFunc 0x08000
1a280 30 20 2f 2a 20 41 20 53 51 4c 49 54 45 5f 46 55  0 /* A SQLITE_FU
1a290 4e 43 5f 43 4f 4e 53 54 41 4e 54 20 6f 72 20 5f  NC_CONSTANT or _
1a2a0 53 4c 4f 43 48 4e 47 20 66 75 6e 63 74 69 6f 6e  SLOCHNG function
1a2b0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 43   */.#define EP_C
1a2c0 61 6e 42 65 4e 75 6c 6c 20 30 78 31 30 30 30 30  anBeNull 0x10000
1a2d0 30 20 2f 2a 20 43 61 6e 20 62 65 20 6e 75 6c 6c  0 /* Can be null
1a2e0 20 64 65 73 70 69 74 65 20 4e 4f 54 20 4e 55 4c   despite NOT NUL
1a2f0 4c 20 63 6f 6e 73 74 72 61 69 6e 74 20 2a 2f 0a  L constraint */.
1a300 23 64 65 66 69 6e 65 20 45 50 5f 53 75 62 71 75  #define EP_Subqu
1a310 65 72 79 20 20 30 78 32 30 30 30 30 30 20 2f 2a  ery  0x200000 /*
1a320 20 54 72 65 65 20 63 6f 6e 74 61 69 6e 73 20 61   Tree contains a
1a330 20 54 4b 5f 53 45 4c 45 43 54 20 6f 70 65 72 61   TK_SELECT opera
1a340 74 6f 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45  tor */.#define E
1a350 50 5f 41 6c 69 61 73 20 20 20 20 20 30 78 34 30  P_Alias     0x40
1a360 30 30 30 30 20 2f 2a 20 49 73 20 61 6e 20 61 6c  0000 /* Is an al
1a370 69 61 73 20 66 6f 72 20 61 20 72 65 73 75 6c 74  ias for a result
1a380 20 73 65 74 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 23   set column */.#
1a390 64 65 66 69 6e 65 20 45 50 5f 4c 65 61 66 20 20  define EP_Leaf  
1a3a0 20 20 20 20 30 78 38 30 30 30 30 30 20 2f 2a 20      0x800000 /* 
1a3b0 45 78 70 72 2e 70 4c 65 66 74 2c 20 2e 70 52 69  Expr.pLeft, .pRi
1a3c0 67 68 74 2c 20 2e 75 2e 70 53 65 6c 65 63 74 20  ght, .u.pSelect 
1a3d0 61 6c 6c 20 4e 55 4c 4c 20 2a 2f 0a 23 64 65 66  all NULL */.#def
1a3e0 69 6e 65 20 45 50 5f 57 69 6e 46 75 6e 63 20 20  ine EP_WinFunc  
1a3f0 30 78 31 30 30 30 30 30 30 20 2f 2a 20 54 4b 5f  0x1000000 /* TK_
1a400 46 55 4e 43 54 49 4f 4e 20 77 69 74 68 20 45 78  FUNCTION with Ex
1a410 70 72 2e 79 2e 70 57 69 6e 20 73 65 74 20 2a 2f  pr.y.pWin set */
1a420 0a 23 64 65 66 69 6e 65 20 45 50 5f 53 75 62 72  .#define EP_Subr
1a430 74 6e 20 20 20 30 78 32 30 30 30 30 30 30 20 2f  tn   0x2000000 /
1a440 2a 20 55 73 65 73 20 45 78 70 72 2e 79 2e 73 75  * Uses Expr.y.su
1a450 62 2e 20 54 4b 5f 49 4e 2c 20 5f 53 45 4c 45 43  b. TK_IN, _SELEC
1a460 54 2c 20 6f 72 20 5f 45 58 49 53 54 53 20 2a 2f  T, or _EXISTS */
1a470 0a 23 64 65 66 69 6e 65 20 45 50 5f 51 75 6f 74  .#define EP_Quot
1a480 65 64 20 20 20 30 78 34 30 30 30 30 30 30 20 2f  ed   0x4000000 /
1a490 2a 20 54 4b 5f 49 44 20 77 61 73 20 6f 72 69 67  * TK_ID was orig
1a4a0 69 6e 61 6c 6c 79 20 71 75 6f 74 65 64 20 2a 2f  inally quoted */
1a4b0 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 45 50 5f 50  ../*.** The EP_P
1a4c0 72 6f 70 61 67 61 74 65 20 6d 61 73 6b 20 69 73  ropagate mask is
1a4d0 20 61 20 73 65 74 20 6f 66 20 70 72 6f 70 65 72   a set of proper
1a4e0 74 69 65 73 20 74 68 61 74 20 61 75 74 6f 6d 61  ties that automa
1a4f0 74 69 63 61 6c 6c 79 20 70 72 6f 70 61 67 61 74  tically propagat
1a500 65 0a 2a 2a 20 75 70 77 61 72 64 73 20 69 6e 74  e.** upwards int
1a510 6f 20 70 61 72 65 6e 74 20 6e 6f 64 65 73 2e 0a  o parent nodes..
1a520 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 50 72  */.#define EP_Pr
1a530 6f 70 61 67 61 74 65 20 28 45 50 5f 43 6f 6c 6c  opagate (EP_Coll
1a540 61 74 65 7c 45 50 5f 53 75 62 71 75 65 72 79 7c  ate|EP_Subquery|
1a550 45 50 5f 48 61 73 46 75 6e 63 29 0a 0a 2f 2a 0a  EP_HasFunc)../*.
1a560 2a 2a 20 54 68 65 73 65 20 6d 61 63 72 6f 73 20  ** These macros 
1a570 63 61 6e 20 62 65 20 75 73 65 64 20 74 6f 20 74  can be used to t
1a580 65 73 74 2c 20 73 65 74 2c 20 6f 72 20 63 6c 65  est, set, or cle
1a590 61 72 20 62 69 74 73 20 69 6e 20 74 68 65 0a 2a  ar bits in the.*
1a5a0 2a 20 45 78 70 72 2e 66 6c 61 67 73 20 66 69 65  * Expr.flags fie
1a5b0 6c 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 45  ld..*/.#define E
1a5c0 78 70 72 48 61 73 50 72 6f 70 65 72 74 79 28 45  xprHasProperty(E
1a5d0 2c 50 29 20 20 20 20 20 28 28 28 45 29 2d 3e 66  ,P)     (((E)->f
1a5e0 6c 61 67 73 26 28 50 29 29 21 3d 30 29 0a 23 64  lags&(P))!=0).#d
1a5f0 65 66 69 6e 65 20 45 78 70 72 48 61 73 41 6c 6c  efine ExprHasAll
1a600 50 72 6f 70 65 72 74 79 28 45 2c 50 29 20 20 28  Property(E,P)  (
1a610 28 28 45 29 2d 3e 66 6c 61 67 73 26 28 50 29 29  ((E)->flags&(P))
1a620 3d 3d 28 50 29 29 0a 23 64 65 66 69 6e 65 20 45  ==(P)).#define E
1a630 78 70 72 53 65 74 50 72 6f 70 65 72 74 79 28 45  xprSetProperty(E
1a640 2c 50 29 20 20 20 20 20 28 45 29 2d 3e 66 6c 61  ,P)     (E)->fla
1a650 67 73 7c 3d 28 50 29 0a 23 64 65 66 69 6e 65 20  gs|=(P).#define 
1a660 45 78 70 72 43 6c 65 61 72 50 72 6f 70 65 72 74  ExprClearPropert
1a670 79 28 45 2c 50 29 20 20 20 28 45 29 2d 3e 66 6c  y(E,P)   (E)->fl
1a680 61 67 73 26 3d 7e 28 50 29 0a 0a 2f 2a 20 54 68  ags&=~(P)../* Th
1a690 65 20 45 78 70 72 53 65 74 56 56 41 50 72 6f 70  e ExprSetVVAProp
1a6a0 65 72 74 79 28 29 20 6d 61 63 72 6f 20 69 73 20  erty() macro is 
1a6b0 75 73 65 64 20 66 6f 72 20 56 65 72 69 66 69 63  used for Verific
1a6c0 61 74 69 6f 6e 2c 20 56 61 6c 69 64 61 74 69 6f  ation, Validatio
1a6d0 6e 2c 0a 2a 2a 20 61 6e 64 20 41 63 63 72 65 64  n,.** and Accred
1a6e0 69 74 61 74 69 6f 6e 20 6f 6e 6c 79 2e 20 20 49  itation only.  I
1a6f0 74 20 77 6f 72 6b 73 20 6c 69 6b 65 20 45 78 70  t works like Exp
1a700 72 53 65 74 50 72 6f 70 65 72 74 79 28 29 20 64  rSetProperty() d
1a710 75 72 69 6e 67 20 56 56 41 0a 2a 2a 20 70 72 6f  uring VVA.** pro
1a720 63 65 73 73 65 73 20 62 75 74 20 69 73 20 61 20  cesses but is a 
1a730 6e 6f 2d 6f 70 20 66 6f 72 20 64 65 6c 69 76 65  no-op for delive
1a740 72 79 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51  ry..*/.#ifdef SQ
1a750 4c 49 54 45 5f 44 45 42 55 47 0a 23 20 64 65 66  LITE_DEBUG.# def
1a760 69 6e 65 20 45 78 70 72 53 65 74 56 56 41 50 72  ine ExprSetVVAPr
1a770 6f 70 65 72 74 79 28 45 2c 50 29 20 20 28 45 29  operty(E,P)  (E)
1a780 2d 3e 66 6c 61 67 73 7c 3d 28 50 29 0a 23 65 6c  ->flags|=(P).#el
1a790 73 65 0a 23 20 64 65 66 69 6e 65 20 45 78 70 72  se.# define Expr
1a7a0 53 65 74 56 56 41 50 72 6f 70 65 72 74 79 28 45  SetVVAProperty(E
1a7b0 2c 50 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  ,P).#endif../*.*
1a7c0 2a 20 4d 61 63 72 6f 73 20 74 6f 20 64 65 74 65  * Macros to dete
1a7d0 72 6d 69 6e 65 20 74 68 65 20 6e 75 6d 62 65 72  rmine the number
1a7e0 20 6f 66 20 62 79 74 65 73 20 72 65 71 75 69 72   of bytes requir
1a7f0 65 64 20 62 79 20 61 20 6e 6f 72 6d 61 6c 20 45  ed by a normal E
1a800 78 70 72 0a 2a 2a 20 73 74 72 75 63 74 2c 20 61  xpr.** struct, a
1a810 6e 20 45 78 70 72 20 73 74 72 75 63 74 20 77 69  n Expr struct wi
1a820 74 68 20 74 68 65 20 45 50 5f 52 65 64 75 63 65  th the EP_Reduce
1a830 64 20 66 6c 61 67 20 73 65 74 20 69 6e 20 45 78  d flag set in Ex
1a840 70 72 2e 66 6c 61 67 73 0a 2a 2a 20 61 6e 64 20  pr.flags.** and 
1a850 61 6e 20 45 78 70 72 20 73 74 72 75 63 74 20 77  an Expr struct w
1a860 69 74 68 20 74 68 65 20 45 50 5f 54 6f 6b 65 6e  ith the EP_Token
1a870 4f 6e 6c 79 20 66 6c 61 67 20 73 65 74 2e 0a 2a  Only flag set..*
1a880 2f 0a 23 64 65 66 69 6e 65 20 45 58 50 52 5f 46  /.#define EXPR_F
1a890 55 4c 4c 53 49 5a 45 20 20 20 20 20 20 20 20 20  ULLSIZE         
1a8a0 20 20 73 69 7a 65 6f 66 28 45 78 70 72 29 20 20    sizeof(Expr)  
1a8b0 20 20 20 20 20 20 20 20 20 2f 2a 20 46 75 6c 6c           /* Full
1a8c0 20 73 69 7a 65 20 2a 2f 0a 23 64 65 66 69 6e 65   size */.#define
1a8d0 20 45 58 50 52 5f 52 45 44 55 43 45 44 53 49 5a   EXPR_REDUCEDSIZ
1a8e0 45 20 20 20 20 20 20 20 20 6f 66 66 73 65 74 6f  E        offseto
1a8f0 66 28 45 78 70 72 2c 69 54 61 62 6c 65 29 20 20  f(Expr,iTable)  
1a900 2f 2a 20 43 6f 6d 6d 6f 6e 20 66 65 61 74 75 72  /* Common featur
1a910 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 58  es */.#define EX
1a920 50 52 5f 54 4f 4b 45 4e 4f 4e 4c 59 53 49 5a 45  PR_TOKENONLYSIZE
1a930 20 20 20 20 20 20 6f 66 66 73 65 74 6f 66 28 45        offsetof(E
1a940 78 70 72 2c 70 4c 65 66 74 29 20 20 20 2f 2a 20  xpr,pLeft)   /* 
1a950 46 65 77 65 72 20 66 65 61 74 75 72 65 73 20 2a  Fewer features *
1a960 2f 0a 0a 2f 2a 0a 2a 2a 20 46 6c 61 67 73 20 70  /../*.** Flags p
1a970 61 73 73 65 64 20 74 6f 20 74 68 65 20 73 71 6c  assed to the sql
1a980 69 74 65 33 45 78 70 72 44 75 70 28 29 20 66 75  ite3ExprDup() fu
1a990 6e 63 74 69 6f 6e 2e 20 53 65 65 20 74 68 65 20  nction. See the 
1a9a0 68 65 61 64 65 72 20 63 6f 6d 6d 65 6e 74 0a 2a  header comment.*
1a9b0 2a 20 61 62 6f 76 65 20 73 71 6c 69 74 65 33 45  * above sqlite3E
1a9c0 78 70 72 44 75 70 28 29 20 66 6f 72 20 64 65 74  xprDup() for det
1a9d0 61 69 6c 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  ails..*/.#define
1a9e0 20 45 58 50 52 44 55 50 5f 52 45 44 55 43 45 20   EXPRDUP_REDUCE 
1a9f0 20 20 20 20 20 20 20 20 30 78 30 30 30 31 20 20          0x0001  
1aa00 2f 2a 20 55 73 65 64 20 72 65 64 75 63 65 64 2d  /* Used reduced-
1aa10 73 69 7a 65 20 45 78 70 72 20 6e 6f 64 65 73 20  size Expr nodes 
1aa20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 20 6c 69 73 74  */../*.** A list
1aa30 20 6f 66 20 65 78 70 72 65 73 73 69 6f 6e 73 2e   of expressions.
1aa40 20 20 45 61 63 68 20 65 78 70 72 65 73 73 69 6f    Each expressio
1aa50 6e 20 6d 61 79 20 6f 70 74 69 6f 6e 61 6c 6c 79  n may optionally
1aa60 20 68 61 76 65 20 61 0a 2a 2a 20 6e 61 6d 65 2e   have a.** name.
1aa70 20 20 41 6e 20 65 78 70 72 2f 6e 61 6d 65 20 63    An expr/name c
1aa80 6f 6d 62 69 6e 61 74 69 6f 6e 20 63 61 6e 20 62  ombination can b
1aa90 65 20 75 73 65 64 20 69 6e 20 73 65 76 65 72 61  e used in severa
1aaa0 6c 20 77 61 79 73 2c 20 73 75 63 68 0a 2a 2a 20  l ways, such.** 
1aab0 61 73 20 74 68 65 20 6c 69 73 74 20 6f 66 20 22  as the list of "
1aac0 65 78 70 72 20 41 53 20 49 44 22 20 66 69 65 6c  expr AS ID" fiel
1aad0 64 73 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 20 22  ds following a "
1aae0 53 45 4c 45 43 54 22 20 6f 72 20 69 6e 20 74 68  SELECT" or in th
1aaf0 65 0a 2a 2a 20 6c 69 73 74 20 6f 66 20 22 49 44  e.** list of "ID
1ab00 20 3d 20 65 78 70 72 22 20 69 74 65 6d 73 20 69   = expr" items i
1ab10 6e 20 61 6e 20 55 50 44 41 54 45 2e 20 20 41 20  n an UPDATE.  A 
1ab20 6c 69 73 74 20 6f 66 20 65 78 70 72 65 73 73 69  list of expressi
1ab30 6f 6e 73 20 63 61 6e 0a 2a 2a 20 61 6c 73 6f 20  ons can.** also 
1ab40 62 65 20 75 73 65 64 20 61 73 20 74 68 65 20 61  be used as the a
1ab50 72 67 75 6d 65 6e 74 20 74 6f 20 61 20 66 75 6e  rgument to a fun
1ab60 63 74 69 6f 6e 2c 20 69 6e 20 77 68 69 63 68 20  ction, in which 
1ab70 63 61 73 65 20 74 68 65 20 61 2e 7a 4e 61 6d 65  case the a.zName
1ab80 0a 2a 2a 20 66 69 65 6c 64 20 69 73 20 6e 6f 74  .** field is not
1ab90 20 75 73 65 64 2e 0a 2a 2a 0a 2a 2a 20 42 79 20   used..**.** By 
1aba0 64 65 66 61 75 6c 74 20 74 68 65 20 45 78 70 72  default the Expr
1abb0 2e 7a 53 70 61 6e 20 66 69 65 6c 64 20 68 6f 6c  .zSpan field hol
1abc0 64 73 20 61 20 68 75 6d 61 6e 2d 72 65 61 64 61  ds a human-reada
1abd0 62 6c 65 20 64 65 73 63 72 69 70 74 69 6f 6e 20  ble description 
1abe0 6f 66 0a 2a 2a 20 74 68 65 20 65 78 70 72 65 73  of.** the expres
1abf0 73 69 6f 6e 20 74 68 61 74 20 69 73 20 75 73 65  sion that is use
1ac00 64 20 69 6e 20 74 68 65 20 67 65 6e 65 72 61 74  d in the generat
1ac10 69 6f 6e 20 6f 66 20 65 72 72 6f 72 20 6d 65 73  ion of error mes
1ac20 73 61 67 65 73 20 61 6e 64 0a 2a 2a 20 63 6f 6c  sages and.** col
1ac30 75 6d 6e 20 6c 61 62 65 6c 73 2e 20 20 49 6e 20  umn labels.  In 
1ac40 74 68 69 73 20 63 61 73 65 2c 20 45 78 70 72 2e  this case, Expr.
1ac50 7a 53 70 61 6e 20 69 73 20 74 79 70 69 63 61 6c  zSpan is typical
1ac60 6c 79 20 74 68 65 20 74 65 78 74 20 6f 66 20 61  ly the text of a
1ac70 0a 2a 2a 20 63 6f 6c 75 6d 6e 20 65 78 70 72 65  .** column expre
1ac80 73 73 69 6f 6e 20 61 73 20 69 74 20 65 78 69 73  ssion as it exis
1ac90 74 73 20 69 6e 20 61 20 53 45 4c 45 43 54 20 73  ts in a SELECT s
1aca0 74 61 74 65 6d 65 6e 74 2e 20 20 48 6f 77 65 76  tatement.  Howev
1acb0 65 72 2c 20 69 66 0a 2a 2a 20 74 68 65 20 62 53  er, if.** the bS
1acc0 70 61 6e 49 73 54 61 62 20 66 6c 61 67 20 69 73  panIsTab flag is
1acd0 20 73 65 74 2c 20 74 68 65 6e 20 7a 53 70 61 6e   set, then zSpan
1ace0 20 69 73 20 6f 76 65 72 6c 6f 61 64 65 64 20 74   is overloaded t
1acf0 6f 20 6d 65 61 6e 20 74 68 65 20 6e 61 6d 65 0a  o mean the name.
1ad00 2a 2a 20 6f 66 20 74 68 65 20 72 65 73 75 6c 74  ** of the result
1ad10 20 63 6f 6c 75 6d 6e 20 69 6e 20 74 68 65 20 66   column in the f
1ad20 6f 72 6d 3a 20 44 41 54 41 42 41 53 45 2e 54 41  orm: DATABASE.TA
1ad30 42 4c 45 2e 43 4f 4c 55 4d 4e 2e 20 20 54 68 69  BLE.COLUMN.  Thi
1ad40 73 20 6c 61 74 65 72 0a 2a 2a 20 66 6f 72 6d 20  s later.** form 
1ad50 69 73 20 75 73 65 64 20 66 6f 72 20 6e 61 6d 65  is used for name
1ad60 20 72 65 73 6f 6c 75 74 69 6f 6e 20 77 69 74 68   resolution with
1ad70 20 6e 65 73 74 65 64 20 46 52 4f 4d 20 63 6c 61   nested FROM cla
1ad80 75 73 65 73 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  uses..*/.struct 
1ad90 45 78 70 72 4c 69 73 74 20 7b 0a 20 20 69 6e 74  ExprList {.  int
1ada0 20 6e 45 78 70 72 3b 20 20 20 20 20 20 20 20 20   nExpr;         
1adb0 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
1adc0 20 65 78 70 72 65 73 73 69 6f 6e 73 20 6f 6e 20   expressions on 
1add0 74 68 65 20 6c 69 73 74 20 2a 2f 0a 20 20 73 74  the list */.  st
1ade0 72 75 63 74 20 45 78 70 72 4c 69 73 74 5f 69 74  ruct ExprList_it
1adf0 65 6d 20 7b 20 2f 2a 20 46 6f 72 20 65 61 63 68  em { /* For each
1ae00 20 65 78 70 72 65 73 73 69 6f 6e 20 69 6e 20 74   expression in t
1ae10 68 65 20 6c 69 73 74 20 2a 2f 0a 20 20 20 20 45  he list */.    E
1ae20 78 70 72 20 2a 70 45 78 70 72 3b 20 20 20 20 20  xpr *pExpr;     
1ae30 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 70 61         /* The pa
1ae40 72 73 65 20 74 72 65 65 20 66 6f 72 20 74 68 69  rse tree for thi
1ae50 73 20 65 78 70 72 65 73 73 69 6f 6e 20 2a 2f 0a  s expression */.
1ae60 20 20 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b      char *zName;
1ae70 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
1ae80 6f 6b 65 6e 20 61 73 73 6f 63 69 61 74 65 64 20  oken associated 
1ae90 77 69 74 68 20 74 68 69 73 20 65 78 70 72 65 73  with this expres
1aea0 73 69 6f 6e 20 2a 2f 0a 20 20 20 20 63 68 61 72  sion */.    char
1aeb0 20 2a 7a 53 70 61 6e 3b 20 20 20 20 20 20 20 20   *zSpan;        
1aec0 20 20 20 20 2f 2a 20 4f 72 69 67 69 6e 61 6c 20      /* Original 
1aed0 74 65 78 74 20 6f 66 20 74 68 65 20 65 78 70 72  text of the expr
1aee0 65 73 73 69 6f 6e 20 2a 2f 0a 20 20 20 20 75 38  ession */.    u8
1aef0 20 73 6f 72 74 4f 72 64 65 72 3b 20 20 20 20 20   sortOrder;     
1af00 20 20 20 20 20 20 2f 2a 20 31 20 66 6f 72 20 44        /* 1 for D
1af10 45 53 43 20 6f 72 20 30 20 66 6f 72 20 41 53 43  ESC or 0 for ASC
1af20 20 2a 2f 0a 20 20 20 20 75 6e 73 69 67 6e 65 64   */.    unsigned
1af30 20 64 6f 6e 65 20 3a 31 3b 20 20 20 20 20 20 20   done :1;       
1af40 2f 2a 20 41 20 66 6c 61 67 20 74 6f 20 69 6e 64  /* A flag to ind
1af50 69 63 61 74 65 20 77 68 65 6e 20 70 72 6f 63 65  icate when proce
1af60 73 73 69 6e 67 20 69 73 20 66 69 6e 69 73 68 65  ssing is finishe
1af70 64 20 2a 2f 0a 20 20 20 20 75 6e 73 69 67 6e 65  d */.    unsigne
1af80 64 20 62 53 70 61 6e 49 73 54 61 62 20 3a 31 3b  d bSpanIsTab :1;
1af90 20 2f 2a 20 7a 53 70 61 6e 20 68 6f 6c 64 73 20   /* zSpan holds 
1afa0 44 42 2e 54 41 42 4c 45 2e 43 4f 4c 55 4d 4e 20  DB.TABLE.COLUMN 
1afb0 2a 2f 0a 20 20 20 20 75 6e 73 69 67 6e 65 64 20  */.    unsigned 
1afc0 72 65 75 73 61 62 6c 65 20 3a 31 3b 20 20 20 2f  reusable :1;   /
1afd0 2a 20 43 6f 6e 73 74 61 6e 74 20 65 78 70 72 65  * Constant expre
1afe0 73 73 69 6f 6e 20 69 73 20 72 65 75 73 61 62 6c  ssion is reusabl
1aff0 65 20 2a 2f 0a 20 20 20 20 75 6e 73 69 67 6e 65  e */.    unsigne
1b000 64 20 62 53 6f 72 74 65 72 52 65 66 20 3a 31 3b  d bSorterRef :1;
1b010 20 2f 2a 20 44 65 66 65 72 20 65 76 61 6c 75 61   /* Defer evalua
1b020 74 69 6f 6e 20 75 6e 74 69 6c 20 61 66 74 65 72  tion until after
1b030 20 73 6f 72 74 69 6e 67 20 2a 2f 0a 20 20 20 20   sorting */.    
1b040 75 6e 69 6f 6e 20 7b 0a 20 20 20 20 20 20 73 74  union {.      st
1b050 72 75 63 74 20 7b 0a 20 20 20 20 20 20 20 20 75  ruct {.        u
1b060 31 36 20 69 4f 72 64 65 72 42 79 43 6f 6c 3b 20  16 iOrderByCol; 
1b070 20 20 20 20 20 2f 2a 20 46 6f 72 20 4f 52 44 45       /* For ORDE
1b080 52 20 42 59 2c 20 63 6f 6c 75 6d 6e 20 6e 75 6d  R BY, column num
1b090 62 65 72 20 69 6e 20 72 65 73 75 6c 74 20 73 65  ber in result se
1b0a0 74 20 2a 2f 0a 20 20 20 20 20 20 20 20 75 31 36  t */.        u16
1b0b0 20 69 41 6c 69 61 73 3b 20 20 20 20 20 20 20 20   iAlias;        
1b0c0 20 20 20 2f 2a 20 49 6e 64 65 78 20 69 6e 74 6f     /* Index into
1b0d0 20 50 61 72 73 65 2e 61 41 6c 69 61 73 5b 5d 20   Parse.aAlias[] 
1b0e0 66 6f 72 20 7a 4e 61 6d 65 20 2a 2f 0a 20 20 20  for zName */.   
1b0f0 20 20 20 7d 20 78 3b 0a 20 20 20 20 20 20 69 6e     } x;.      in
1b100 74 20 69 43 6f 6e 73 74 45 78 70 72 52 65 67 3b  t iConstExprReg;
1b110 20 20 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65        /* Registe
1b120 72 20 69 6e 20 77 68 69 63 68 20 45 78 70 72 20  r in which Expr 
1b130 76 61 6c 75 65 20 69 73 20 63 61 63 68 65 64 20  value is cached 
1b140 2a 2f 0a 20 20 20 20 7d 20 75 3b 0a 20 20 7d 20  */.    } u;.  } 
1b150 61 5b 31 5d 3b 20 20 20 20 20 20 20 20 20 20 20  a[1];           
1b160 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20 73 6c         /* One sl
1b170 6f 74 20 66 6f 72 20 65 61 63 68 20 65 78 70 72  ot for each expr
1b180 65 73 73 69 6f 6e 20 69 6e 20 74 68 65 20 6c 69  ession in the li
1b190 73 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  st */.};../*.** 
1b1a0 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  An instance of t
1b1b0 68 69 73 20 73 74 72 75 63 74 75 72 65 20 63 61  his structure ca
1b1c0 6e 20 68 6f 6c 64 20 61 20 73 69 6d 70 6c 65 20  n hold a simple 
1b1d0 6c 69 73 74 20 6f 66 20 69 64 65 6e 74 69 66 69  list of identifi
1b1e0 65 72 73 2c 0a 2a 2a 20 73 75 63 68 20 61 73 20  ers,.** such as 
1b1f0 74 68 65 20 6c 69 73 74 20 22 61 2c 62 2c 63 22  the list "a,b,c"
1b200 20 69 6e 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   in the followin
1b210 67 20 73 74 61 74 65 6d 65 6e 74 73 3a 0a 2a 2a  g statements:.**
1b220 0a 2a 2a 20 20 20 20 20 20 49 4e 53 45 52 54 20  .**      INSERT 
1b230 49 4e 54 4f 20 74 28 61 2c 62 2c 63 29 20 56 41  INTO t(a,b,c) VA
1b240 4c 55 45 53 20 2e 2e 2e 3b 0a 2a 2a 20 20 20 20  LUES ...;.**    
1b250 20 20 43 52 45 41 54 45 20 49 4e 44 45 58 20 69    CREATE INDEX i
1b260 64 78 20 4f 4e 20 74 28 61 2c 62 2c 63 29 3b 0a  dx ON t(a,b,c);.
1b270 2a 2a 20 20 20 20 20 20 43 52 45 41 54 45 20 54  **      CREATE T
1b280 52 49 47 47 45 52 20 74 72 69 67 20 42 45 46 4f  RIGGER trig BEFO
1b290 52 45 20 55 50 44 41 54 45 20 4f 4e 20 74 28 61  RE UPDATE ON t(a
1b2a0 2c 62 2c 63 29 20 2e 2e 2e 3b 0a 2a 2a 0a 2a 2a  ,b,c) ...;.**.**
1b2b0 20 54 68 65 20 49 64 4c 69 73 74 2e 61 2e 69 64   The IdList.a.id
1b2c0 78 20 66 69 65 6c 64 20 69 73 20 75 73 65 64 20  x field is used 
1b2d0 77 68 65 6e 20 74 68 65 20 49 64 4c 69 73 74 20  when the IdList 
1b2e0 72 65 70 72 65 73 65 6e 74 73 20 74 68 65 20 6c  represents the l
1b2f0 69 73 74 20 6f 66 0a 2a 2a 20 63 6f 6c 75 6d 6e  ist of.** column
1b300 20 6e 61 6d 65 73 20 61 66 74 65 72 20 61 20 74   names after a t
1b310 61 62 6c 65 20 6e 61 6d 65 20 69 6e 20 61 6e 20  able name in an 
1b320 49 4e 53 45 52 54 20 73 74 61 74 65 6d 65 6e 74  INSERT statement
1b330 2e 20 20 49 6e 20 74 68 65 20 73 74 61 74 65 6d  .  In the statem
1b340 65 6e 74 0a 2a 2a 0a 2a 2a 20 20 20 20 20 49 4e  ent.**.**     IN
1b350 53 45 52 54 20 49 4e 54 4f 20 74 28 61 2c 62 2c  SERT INTO t(a,b,
1b360 63 29 20 2e 2e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  c) ....**.** If 
1b370 22 61 22 20 69 73 20 74 68 65 20 6b 2d 74 68 20  "a" is the k-th 
1b380 63 6f 6c 75 6d 6e 20 6f 66 20 74 61 62 6c 65 20  column of table 
1b390 22 74 22 2c 20 74 68 65 6e 20 49 64 4c 69 73 74  "t", then IdList
1b3a0 2e 61 5b 30 5d 2e 69 64 78 3d 3d 6b 2e 0a 2a 2f  .a[0].idx==k..*/
1b3b0 0a 73 74 72 75 63 74 20 49 64 4c 69 73 74 20 7b  .struct IdList {
1b3c0 0a 20 20 73 74 72 75 63 74 20 49 64 4c 69 73 74  .  struct IdList
1b3d0 5f 69 74 65 6d 20 7b 0a 20 20 20 20 63 68 61 72  _item {.    char
1b3e0 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 2f 2a   *zName;      /*
1b3f0 20 4e 61 6d 65 20 6f 66 20 74 68 65 20 69 64 65   Name of the ide
1b400 6e 74 69 66 69 65 72 20 2a 2f 0a 20 20 20 20 69  ntifier */.    i
1b410 6e 74 20 69 64 78 3b 20 20 20 20 20 20 20 20 20  nt idx;         
1b420 20 2f 2a 20 49 6e 64 65 78 20 69 6e 20 73 6f 6d   /* Index in som
1b430 65 20 54 61 62 6c 65 2e 61 43 6f 6c 5b 5d 20 6f  e Table.aCol[] o
1b440 66 20 61 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 64  f a column named
1b450 20 7a 4e 61 6d 65 20 2a 2f 0a 20 20 7d 20 2a 61   zName */.  } *a
1b460 3b 0a 20 20 69 6e 74 20 6e 49 64 3b 20 20 20 20  ;.  int nId;    
1b470 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
1b480 66 20 69 64 65 6e 74 69 66 69 65 72 73 20 6f 6e  f identifiers on
1b490 20 74 68 65 20 6c 69 73 74 20 2a 2f 0a 7d 3b 0a   the list */.};.
1b4a0 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f  ./*.** The follo
1b4b0 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 20 64  wing structure d
1b4c0 65 73 63 72 69 62 65 73 20 74 68 65 20 46 52 4f  escribes the FRO
1b4d0 4d 20 63 6c 61 75 73 65 20 6f 66 20 61 20 53 45  M clause of a SE
1b4e0 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 0a  LECT statement..
1b4f0 2a 2a 20 45 61 63 68 20 74 61 62 6c 65 20 6f 72  ** Each table or
1b500 20 73 75 62 71 75 65 72 79 20 69 6e 20 74 68 65   subquery in the
1b510 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 69 73 20   FROM clause is 
1b520 61 20 73 65 70 61 72 61 74 65 20 65 6c 65 6d 65  a separate eleme
1b530 6e 74 20 6f 66 0a 2a 2a 20 74 68 65 20 53 72 63  nt of.** the Src
1b540 4c 69 73 74 2e 61 5b 5d 20 61 72 72 61 79 2e 0a  List.a[] array..
1b550 2a 2a 0a 2a 2a 20 57 69 74 68 20 74 68 65 20 61  **.** With the a
1b560 64 64 69 74 69 6f 6e 20 6f 66 20 6d 75 6c 74 69  ddition of multi
1b570 70 6c 65 20 64 61 74 61 62 61 73 65 20 73 75 70  ple database sup
1b580 70 6f 72 74 2c 20 74 68 65 20 66 6f 6c 6c 6f 77  port, the follow
1b590 69 6e 67 20 73 74 72 75 63 74 75 72 65 0a 2a 2a  ing structure.**
1b5a0 20 63 61 6e 20 61 6c 73 6f 20 62 65 20 75 73 65   can also be use
1b5b0 64 20 74 6f 20 64 65 73 63 72 69 62 65 20 61 20  d to describe a 
1b5c0 70 61 72 74 69 63 75 6c 61 72 20 74 61 62 6c 65  particular table
1b5d0 20 73 75 63 68 20 61 73 20 74 68 65 20 74 61 62   such as the tab
1b5e0 6c 65 20 74 68 61 74 0a 2a 2a 20 69 73 20 6d 6f  le that.** is mo
1b5f0 64 69 66 69 65 64 20 62 79 20 61 6e 20 49 4e 53  dified by an INS
1b600 45 52 54 2c 20 44 45 4c 45 54 45 2c 20 6f 72 20  ERT, DELETE, or 
1b610 55 50 44 41 54 45 20 73 74 61 74 65 6d 65 6e 74  UPDATE statement
1b620 2e 20 20 49 6e 20 73 74 61 6e 64 61 72 64 20 53  .  In standard S
1b630 51 4c 2c 0a 2a 2a 20 73 75 63 68 20 61 20 74 61  QL,.** such a ta
1b640 62 6c 65 20 6d 75 73 74 20 62 65 20 61 20 73 69  ble must be a si
1b650 6d 70 6c 65 20 6e 61 6d 65 3a 20 49 44 2e 20 20  mple name: ID.  
1b660 42 75 74 20 69 6e 20 53 51 4c 69 74 65 2c 20 74  But in SQLite, t
1b670 68 65 20 74 61 62 6c 65 20 63 61 6e 0a 2a 2a 20  he table can.** 
1b680 6e 6f 77 20 62 65 20 69 64 65 6e 74 69 66 69 65  now be identifie
1b690 64 20 62 79 20 61 20 64 61 74 61 62 61 73 65 20  d by a database 
1b6a0 6e 61 6d 65 2c 20 61 20 64 6f 74 2c 20 74 68 65  name, a dot, the
1b6b0 6e 20 74 68 65 20 74 61 62 6c 65 20 6e 61 6d 65  n the table name
1b6c0 3a 20 49 44 2e 49 44 2e 0a 2a 2a 0a 2a 2a 20 54  : ID.ID..**.** T
1b6d0 68 65 20 6a 6f 69 6e 74 79 70 65 20 73 74 61 72  he jointype star
1b6e0 74 73 20 6f 75 74 20 73 68 6f 77 69 6e 67 20 74  ts out showing t
1b6f0 68 65 20 6a 6f 69 6e 20 74 79 70 65 20 62 65 74  he join type bet
1b700 77 65 65 6e 20 74 68 65 20 63 75 72 72 65 6e 74  ween the current
1b710 20 74 61 62 6c 65 0a 2a 2a 20 61 6e 64 20 74 68   table.** and th
1b720 65 20 6e 65 78 74 20 74 61 62 6c 65 20 6f 6e 20  e next table on 
1b730 74 68 65 20 6c 69 73 74 2e 20 20 54 68 65 20 70  the list.  The p
1b740 61 72 73 65 72 20 62 75 69 6c 64 73 20 74 68 65  arser builds the
1b750 20 6c 69 73 74 20 74 68 69 73 20 77 61 79 2e 0a   list this way..
1b760 2a 2a 20 42 75 74 20 73 71 6c 69 74 65 33 53 72  ** But sqlite3Sr
1b770 63 4c 69 73 74 53 68 69 66 74 4a 6f 69 6e 54 79  cListShiftJoinTy
1b780 70 65 28 29 20 6c 61 74 65 72 20 73 68 69 66 74  pe() later shift
1b790 73 20 74 68 65 20 6a 6f 69 6e 74 79 70 65 73 20  s the jointypes 
1b7a0 73 6f 20 74 68 61 74 20 65 61 63 68 0a 2a 2a 20  so that each.** 
1b7b0 6a 6f 69 6e 74 79 70 65 20 65 78 70 72 65 73 73  jointype express
1b7c0 65 73 20 74 68 65 20 6a 6f 69 6e 20 62 65 74 77  es the join betw
1b7d0 65 65 6e 20 74 68 65 20 74 61 62 6c 65 20 61 6e  een the table an
1b7e0 64 20 74 68 65 20 70 72 65 76 69 6f 75 73 20 74  d the previous t
1b7f0 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49 6e 20 74  able..**.** In t
1b800 68 65 20 63 6f 6c 55 73 65 64 20 66 69 65 6c 64  he colUsed field
1b810 2c 20 74 68 65 20 68 69 67 68 2d 6f 72 64 65 72  , the high-order
1b820 20 62 69 74 20 28 62 69 74 20 36 33 29 20 69 73   bit (bit 63) is
1b830 20 73 65 74 20 69 66 20 74 68 65 20 74 61 62 6c   set if the tabl
1b840 65 0a 2a 2a 20 63 6f 6e 74 61 69 6e 73 20 6d 6f  e.** contains mo
1b850 72 65 20 74 68 61 6e 20 36 33 20 63 6f 6c 75 6d  re than 63 colum
1b860 6e 73 20 61 6e 64 20 74 68 65 20 36 34 2d 74 68  ns and the 64-th
1b870 20 6f 72 20 6c 61 74 65 72 20 63 6f 6c 75 6d 6e   or later column
1b880 20 69 73 20 75 73 65 64 2e 0a 2a 2f 0a 73 74 72   is used..*/.str
1b890 75 63 74 20 53 72 63 4c 69 73 74 20 7b 0a 20 20  uct SrcList {.  
1b8a0 69 6e 74 20 6e 53 72 63 3b 20 20 20 20 20 20 20  int nSrc;       
1b8b0 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 74 61   /* Number of ta
1b8c0 62 6c 65 73 20 6f 72 20 73 75 62 71 75 65 72 69  bles or subqueri
1b8d0 65 73 20 69 6e 20 74 68 65 20 46 52 4f 4d 20 63  es in the FROM c
1b8e0 6c 61 75 73 65 20 2a 2f 0a 20 20 75 33 32 20 6e  lause */.  u32 n
1b8f0 41 6c 6c 6f 63 3b 20 20 20 20 20 20 2f 2a 20 4e  Alloc;      /* N
1b900 75 6d 62 65 72 20 6f 66 20 65 6e 74 72 69 65 73  umber of entries
1b910 20 61 6c 6c 6f 63 61 74 65 64 20 69 6e 20 61 5b   allocated in a[
1b920 5d 20 62 65 6c 6f 77 20 2a 2f 0a 20 20 73 74 72  ] below */.  str
1b930 75 63 74 20 53 72 63 4c 69 73 74 5f 69 74 65 6d  uct SrcList_item
1b940 20 7b 0a 20 20 20 20 53 63 68 65 6d 61 20 2a 70   {.    Schema *p
1b950 53 63 68 65 6d 61 3b 20 20 2f 2a 20 53 63 68 65  Schema;  /* Sche
1b960 6d 61 20 74 6f 20 77 68 69 63 68 20 74 68 69 73  ma to which this
1b970 20 69 74 65 6d 20 69 73 20 66 69 78 65 64 20 2a   item is fixed *
1b980 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a 44 61 74  /.    char *zDat
1b990 61 62 61 73 65 3b 20 20 2f 2a 20 4e 61 6d 65 20  abase;  /* Name 
1b9a0 6f 66 20 64 61 74 61 62 61 73 65 20 68 6f 6c 64  of database hold
1b9b0 69 6e 67 20 74 68 69 73 20 74 61 62 6c 65 20 2a  ing this table *
1b9c0 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a 4e 61 6d  /.    char *zNam
1b9d0 65 3b 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20  e;      /* Name 
1b9e0 6f 66 20 74 68 65 20 74 61 62 6c 65 20 2a 2f 0a  of the table */.
1b9f0 20 20 20 20 63 68 61 72 20 2a 7a 41 6c 69 61 73      char *zAlias
1ba00 3b 20 20 20 20 20 2f 2a 20 54 68 65 20 22 42 22  ;     /* The "B"
1ba10 20 70 61 72 74 20 6f 66 20 61 20 22 41 20 41 53   part of a "A AS
1ba20 20 42 22 20 70 68 72 61 73 65 2e 20 20 7a 4e 61   B" phrase.  zNa
1ba30 6d 65 20 69 73 20 74 68 65 20 22 41 22 20 2a 2f  me is the "A" */
1ba40 0a 20 20 20 20 54 61 62 6c 65 20 2a 70 54 61 62  .    Table *pTab
1ba50 3b 20 20 20 20 20 20 2f 2a 20 41 6e 20 53 51 4c  ;      /* An SQL
1ba60 20 74 61 62 6c 65 20 63 6f 72 72 65 73 70 6f 6e   table correspon
1ba70 64 69 6e 67 20 74 6f 20 7a 4e 61 6d 65 20 2a 2f  ding to zName */
1ba80 0a 20 20 20 20 53 65 6c 65 63 74 20 2a 70 53 65  .    Select *pSe
1ba90 6c 65 63 74 3b 20 20 2f 2a 20 41 20 53 45 4c 45  lect;  /* A SELE
1baa0 43 54 20 73 74 61 74 65 6d 65 6e 74 20 75 73 65  CT statement use
1bab0 64 20 69 6e 20 70 6c 61 63 65 20 6f 66 20 61 20  d in place of a 
1bac0 74 61 62 6c 65 20 6e 61 6d 65 20 2a 2f 0a 20 20  table name */.  
1bad0 20 20 69 6e 74 20 61 64 64 72 46 69 6c 6c 53 75    int addrFillSu
1bae0 62 3b 20 20 2f 2a 20 41 64 64 72 65 73 73 20 6f  b;  /* Address o
1baf0 66 20 73 75 62 72 6f 75 74 69 6e 65 20 74 6f 20  f subroutine to 
1bb00 6d 61 6e 69 66 65 73 74 20 61 20 73 75 62 71 75  manifest a subqu
1bb10 65 72 79 20 2a 2f 0a 20 20 20 20 69 6e 74 20 72  ery */.    int r
1bb20 65 67 52 65 74 75 72 6e 3b 20 20 20 20 2f 2a 20  egReturn;    /* 
1bb30 52 65 67 69 73 74 65 72 20 68 6f 6c 64 69 6e 67  Register holding
1bb40 20 72 65 74 75 72 6e 20 61 64 64 72 65 73 73 20   return address 
1bb50 6f 66 20 61 64 64 72 46 69 6c 6c 53 75 62 20 2a  of addrFillSub *
1bb60 2f 0a 20 20 20 20 69 6e 74 20 72 65 67 52 65 73  /.    int regRes
1bb70 75 6c 74 3b 20 20 20 20 2f 2a 20 52 65 67 69 73  ult;    /* Regis
1bb80 74 65 72 73 20 68 6f 6c 64 69 6e 67 20 72 65 73  ters holding res
1bb90 75 6c 74 73 20 6f 66 20 61 20 63 6f 2d 72 6f 75  ults of a co-rou
1bba0 74 69 6e 65 20 2a 2f 0a 20 20 20 20 73 74 72 75  tine */.    stru
1bbb0 63 74 20 7b 0a 20 20 20 20 20 20 75 38 20 6a 6f  ct {.      u8 jo
1bbc0 69 6e 74 79 70 65 3b 20 20 20 20 20 20 2f 2a 20  intype;      /* 
1bbd0 54 79 70 65 20 6f 66 20 6a 6f 69 6e 20 62 65 74  Type of join bet
1bbe0 77 65 65 6e 20 74 68 69 73 20 74 61 62 6c 65 20  ween this table 
1bbf0 61 6e 64 20 74 68 65 20 70 72 65 76 69 6f 75 73  and the previous
1bc00 20 2a 2f 0a 20 20 20 20 20 20 75 6e 73 69 67 6e   */.      unsign
1bc10 65 64 20 6e 6f 74 49 6e 64 65 78 65 64 20 3a 31  ed notIndexed :1
1bc20 3b 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20  ;    /* True if 
1bc30 74 68 65 72 65 20 69 73 20 61 20 4e 4f 54 20 49  there is a NOT I
1bc40 4e 44 45 58 45 44 20 63 6c 61 75 73 65 20 2a 2f  NDEXED clause */
1bc50 0a 20 20 20 20 20 20 75 6e 73 69 67 6e 65 64 20  .      unsigned 
1bc60 69 73 49 6e 64 65 78 65 64 42 79 20 3a 31 3b 20  isIndexedBy :1; 
1bc70 20 20 2f 2a 20 54 72 75 65 20 69 66 20 74 68 65    /* True if the
1bc80 72 65 20 69 73 20 61 6e 20 49 4e 44 45 58 45 44  re is an INDEXED
1bc90 20 42 59 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20   BY clause */.  
1bca0 20 20 20 20 75 6e 73 69 67 6e 65 64 20 69 73 54      unsigned isT
1bcb0 61 62 46 75 6e 63 20 3a 31 3b 20 20 20 20 20 2f  abFunc :1;     /
1bcc0 2a 20 54 72 75 65 20 69 66 20 74 61 62 6c 65 2d  * True if table-
1bcd0 76 61 6c 75 65 64 2d 66 75 6e 63 74 69 6f 6e 20  valued-function 
1bce0 73 79 6e 74 61 78 20 2a 2f 0a 20 20 20 20 20 20  syntax */.      
1bcf0 75 6e 73 69 67 6e 65 64 20 69 73 43 6f 72 72 65  unsigned isCorre
1bd00 6c 61 74 65 64 20 3a 31 3b 20 20 2f 2a 20 54 72  lated :1;  /* Tr
1bd10 75 65 20 69 66 20 73 75 62 2d 71 75 65 72 79 20  ue if sub-query 
1bd20 69 73 20 63 6f 72 72 65 6c 61 74 65 64 20 2a 2f  is correlated */
1bd30 0a 20 20 20 20 20 20 75 6e 73 69 67 6e 65 64 20  .      unsigned 
1bd40 76 69 61 43 6f 72 6f 75 74 69 6e 65 20 3a 31 3b  viaCoroutine :1;
1bd50 20 20 2f 2a 20 49 6d 70 6c 65 6d 65 6e 74 65 64    /* Implemented
1bd60 20 61 73 20 61 20 63 6f 2d 72 6f 75 74 69 6e 65   as a co-routine
1bd70 20 2a 2f 0a 20 20 20 20 20 20 75 6e 73 69 67 6e   */.      unsign
1bd80 65 64 20 69 73 52 65 63 75 72 73 69 76 65 20 3a  ed isRecursive :
1bd90 31 3b 20 20 20 2f 2a 20 54 72 75 65 20 66 6f 72  1;   /* True for
1bda0 20 72 65 63 75 72 73 69 76 65 20 72 65 66 65 72   recursive refer
1bdb0 65 6e 63 65 20 69 6e 20 57 49 54 48 20 2a 2f 0a  ence in WITH */.
1bdc0 20 20 20 20 7d 20 66 67 3b 0a 20 20 20 20 69 6e      } fg;.    in
1bdd0 74 20 69 43 75 72 73 6f 72 3b 20 20 20 20 20 20  t iCursor;      
1bde0 2f 2a 20 54 68 65 20 56 44 42 45 20 63 75 72 73  /* The VDBE curs
1bdf0 6f 72 20 6e 75 6d 62 65 72 20 75 73 65 64 20 74  or number used t
1be00 6f 20 61 63 63 65 73 73 20 74 68 69 73 20 74 61  o access this ta
1be10 62 6c 65 20 2a 2f 0a 20 20 20 20 45 78 70 72 20  ble */.    Expr 
1be20 2a 70 4f 6e 3b 20 20 20 20 20 20 20 20 2f 2a 20  *pOn;        /* 
1be30 54 68 65 20 4f 4e 20 63 6c 61 75 73 65 20 6f 66  The ON clause of
1be40 20 61 20 6a 6f 69 6e 20 2a 2f 0a 20 20 20 20 49   a join */.    I
1be50 64 4c 69 73 74 20 2a 70 55 73 69 6e 67 3b 20 20  dList *pUsing;  
1be60 20 2f 2a 20 54 68 65 20 55 53 49 4e 47 20 63 6c   /* The USING cl
1be70 61 75 73 65 20 6f 66 20 61 20 6a 6f 69 6e 20 2a  ause of a join *
1be80 2f 0a 20 20 20 20 42 69 74 6d 61 73 6b 20 63 6f  /.    Bitmask co
1be90 6c 55 73 65 64 3b 20 20 2f 2a 20 42 69 74 20 4e  lUsed;  /* Bit N
1bea0 20 28 31 3c 3c 4e 29 20 73 65 74 20 69 66 20 63   (1<<N) set if c
1beb0 6f 6c 75 6d 6e 20 4e 20 6f 66 20 70 54 61 62 20  olumn N of pTab 
1bec0 69 73 20 75 73 65 64 20 2a 2f 0a 20 20 20 20 75  is used */.    u
1bed0 6e 69 6f 6e 20 7b 0a 20 20 20 20 20 20 63 68 61  nion {.      cha
1bee0 72 20 2a 7a 49 6e 64 65 78 65 64 42 79 3b 20 20  r *zIndexedBy;  
1bef0 20 20 2f 2a 20 49 64 65 6e 74 69 66 69 65 72 20    /* Identifier 
1bf00 66 72 6f 6d 20 22 49 4e 44 45 58 45 44 20 42 59  from "INDEXED BY
1bf10 20 3c 7a 49 6e 64 65 78 3e 22 20 63 6c 61 75 73   <zIndex>" claus
1bf20 65 20 2a 2f 0a 20 20 20 20 20 20 45 78 70 72 4c  e */.      ExprL
1bf30 69 73 74 20 2a 70 46 75 6e 63 41 72 67 3b 20 20  ist *pFuncArg;  
1bf40 2f 2a 20 41 72 67 75 6d 65 6e 74 73 20 74 6f 20  /* Arguments to 
1bf50 74 61 62 6c 65 2d 76 61 6c 75 65 64 2d 66 75 6e  table-valued-fun
1bf60 63 74 69 6f 6e 20 2a 2f 0a 20 20 20 20 7d 20 75  ction */.    } u
1bf70 31 3b 0a 20 20 20 20 49 6e 64 65 78 20 2a 70 49  1;.    Index *pI
1bf80 42 49 6e 64 65 78 3b 20 20 2f 2a 20 49 6e 64 65  BIndex;  /* Inde
1bf90 78 20 73 74 72 75 63 74 75 72 65 20 63 6f 72 72  x structure corr
1bfa0 65 73 70 6f 6e 64 69 6e 67 20 74 6f 20 75 31 2e  esponding to u1.
1bfb0 7a 49 6e 64 65 78 65 64 42 79 20 2a 2f 0a 20 20  zIndexedBy */.  
1bfc0 7d 20 61 5b 31 5d 3b 20 20 20 20 20 20 20 20 20  } a[1];         
1bfd0 20 20 20 20 2f 2a 20 4f 6e 65 20 65 6e 74 72 79      /* One entry
1bfe0 20 66 6f 72 20 65 61 63 68 20 69 64 65 6e 74 69   for each identi
1bff0 66 69 65 72 20 6f 6e 20 74 68 65 20 6c 69 73 74  fier on the list
1c000 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 50 65   */.};../*.** Pe
1c010 72 6d 69 74 74 65 64 20 76 61 6c 75 65 73 20 6f  rmitted values o
1c020 66 20 74 68 65 20 53 72 63 4c 69 73 74 2e 61 2e  f the SrcList.a.
1c030 6a 6f 69 6e 74 79 70 65 20 66 69 65 6c 64 0a 2a  jointype field.*
1c040 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f 49 4e 4e  /.#define JT_INN
1c050 45 52 20 20 20 20 20 30 78 30 30 30 31 20 20 20  ER     0x0001   
1c060 20 2f 2a 20 41 6e 79 20 6b 69 6e 64 20 6f 66 20   /* Any kind of 
1c070 69 6e 6e 65 72 20 6f 72 20 63 72 6f 73 73 20 6a  inner or cross j
1c080 6f 69 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a  oin */.#define J
1c090 54 5f 43 52 4f 53 53 20 20 20 20 20 30 78 30 30  T_CROSS     0x00
1c0a0 30 32 20 20 20 20 2f 2a 20 45 78 70 6c 69 63 69  02    /* Explici
1c0b0 74 20 75 73 65 20 6f 66 20 74 68 65 20 43 52 4f  t use of the CRO
1c0c0 53 53 20 6b 65 79 77 6f 72 64 20 2a 2f 0a 23 64  SS keyword */.#d
1c0d0 65 66 69 6e 65 20 4a 54 5f 4e 41 54 55 52 41 4c  efine JT_NATURAL
1c0e0 20 20 20 30 78 30 30 30 34 20 20 20 20 2f 2a 20     0x0004    /* 
1c0f0 54 72 75 65 20 66 6f 72 20 61 20 22 6e 61 74 75  True for a "natu
1c100 72 61 6c 22 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65  ral" join */.#de
1c110 66 69 6e 65 20 4a 54 5f 4c 45 46 54 20 20 20 20  fine JT_LEFT    
1c120 20 20 30 78 30 30 30 38 20 20 20 20 2f 2a 20 4c    0x0008    /* L
1c130 65 66 74 20 6f 75 74 65 72 20 6a 6f 69 6e 20 2a  eft outer join *
1c140 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f 52 49 47  /.#define JT_RIG
1c150 48 54 20 20 20 20 20 30 78 30 30 31 30 20 20 20  HT     0x0010   
1c160 20 2f 2a 20 52 69 67 68 74 20 6f 75 74 65 72 20   /* Right outer 
1c170 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  join */.#define 
1c180 4a 54 5f 4f 55 54 45 52 20 20 20 20 20 30 78 30  JT_OUTER     0x0
1c190 30 32 30 20 20 20 20 2f 2a 20 54 68 65 20 22 4f  020    /* The "O
1c1a0 55 54 45 52 22 20 6b 65 79 77 6f 72 64 20 69 73  UTER" keyword is
1c1b0 20 70 72 65 73 65 6e 74 20 2a 2f 0a 23 64 65 66   present */.#def
1c1c0 69 6e 65 20 4a 54 5f 45 52 52 4f 52 20 20 20 20  ine JT_ERROR    
1c1d0 20 30 78 30 30 34 30 20 20 20 20 2f 2a 20 75 6e   0x0040    /* un
1c1e0 6b 6e 6f 77 6e 20 6f 72 20 75 6e 73 75 70 70 6f  known or unsuppo
1c1f0 72 74 65 64 20 6a 6f 69 6e 20 74 79 70 65 20 2a  rted join type *
1c200 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 46 6c 61 67 73 20  /.../*.** Flags 
1c210 61 70 70 72 6f 70 72 69 61 74 65 20 66 6f 72 20  appropriate for 
1c220 74 68 65 20 77 63 74 72 6c 46 6c 61 67 73 20 70  the wctrlFlags p
1c230 61 72 61 6d 65 74 65 72 20 6f 66 20 73 71 6c 69  arameter of sqli
1c240 74 65 33 57 68 65 72 65 42 65 67 69 6e 28 29 0a  te3WhereBegin().
1c250 2a 2a 20 61 6e 64 20 74 68 65 20 57 68 65 72 65  ** and the Where
1c260 49 6e 66 6f 2e 77 63 74 72 6c 46 6c 61 67 73 20  Info.wctrlFlags 
1c270 6d 65 6d 62 65 72 2e 0a 2a 2a 0a 2a 2a 20 56 61  member..**.** Va
1c280 6c 75 65 20 63 6f 6e 73 74 72 61 69 6e 74 73 20  lue constraints 
1c290 28 65 6e 66 6f 72 63 65 64 20 76 69 61 20 61 73  (enforced via as
1c2a0 73 65 72 74 28 29 29 3a 0a 2a 2a 20 20 20 20 20  sert()):.**     
1c2b0 57 48 45 52 45 5f 55 53 45 5f 4c 49 4d 49 54 20  WHERE_USE_LIMIT 
1c2c0 20 3d 3d 20 53 46 5f 46 69 78 65 64 4c 69 6d 69   == SF_FixedLimi
1c2d0 74 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45  t.*/.#define WHE
1c2e0 52 45 5f 4f 52 44 45 52 42 59 5f 4e 4f 52 4d 41  RE_ORDERBY_NORMA
1c2f0 4c 20 20 20 30 78 30 30 30 30 20 2f 2a 20 4e 6f  L   0x0000 /* No
1c300 2d 6f 70 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57  -op */.#define W
1c310 48 45 52 45 5f 4f 52 44 45 52 42 59 5f 4d 49 4e  HERE_ORDERBY_MIN
1c320 20 20 20 20 20 20 30 78 30 30 30 31 20 2f 2a 20        0x0001 /* 
1c330 4f 52 44 45 52 20 42 59 20 70 72 6f 63 65 73 73  ORDER BY process
1c340 69 6e 67 20 66 6f 72 20 6d 69 6e 28 29 20 66 75  ing for min() fu
1c350 6e 63 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48  nc */.#define WH
1c360 45 52 45 5f 4f 52 44 45 52 42 59 5f 4d 41 58 20  ERE_ORDERBY_MAX 
1c370 20 20 20 20 20 30 78 30 30 30 32 20 2f 2a 20 4f       0x0002 /* O
1c380 52 44 45 52 20 42 59 20 70 72 6f 63 65 73 73 69  RDER BY processi
1c390 6e 67 20 66 6f 72 20 6d 61 78 28 29 20 66 75 6e  ng for max() fun
1c3a0 63 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45  c */.#define WHE
1c3b0 52 45 5f 4f 4e 45 50 41 53 53 5f 44 45 53 49 52  RE_ONEPASS_DESIR
1c3c0 45 44 20 20 30 78 30 30 30 34 20 2f 2a 20 57 61  ED  0x0004 /* Wa
1c3d0 6e 74 20 74 6f 20 64 6f 20 6f 6e 65 2d 70 61 73  nt to do one-pas
1c3e0 73 20 55 50 44 41 54 45 2f 44 45 4c 45 54 45 20  s UPDATE/DELETE 
1c3f0 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45  */.#define WHERE
1c400 5f 4f 4e 45 50 41 53 53 5f 4d 55 4c 54 49 52 4f  _ONEPASS_MULTIRO
1c410 57 20 30 78 30 30 30 38 20 2f 2a 20 4f 4e 45 50  W 0x0008 /* ONEP
1c420 41 53 53 20 69 73 20 6f 6b 20 77 69 74 68 20 6d  ASS is ok with m
1c430 75 6c 74 69 70 6c 65 20 72 6f 77 73 20 2a 2f 0a  ultiple rows */.
1c440 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 44 55  #define WHERE_DU
1c450 50 4c 49 43 41 54 45 53 5f 4f 4b 20 20 20 20 30  PLICATES_OK    0
1c460 78 30 30 31 30 20 2f 2a 20 4f 6b 20 74 6f 20 72  x0010 /* Ok to r
1c470 65 74 75 72 6e 20 61 20 72 6f 77 20 6d 6f 72 65  eturn a row more
1c480 20 74 68 61 6e 20 6f 6e 63 65 20 2a 2f 0a 23 64   than once */.#d
1c490 65 66 69 6e 65 20 57 48 45 52 45 5f 4f 52 5f 53  efine WHERE_OR_S
1c4a0 55 42 43 4c 41 55 53 45 20 20 20 20 20 30 78 30  UBCLAUSE     0x0
1c4b0 30 32 30 20 2f 2a 20 50 72 6f 63 65 73 73 69 6e  020 /* Processin
1c4c0 67 20 61 20 73 75 62 2d 57 48 45 52 45 20 61 73  g a sub-WHERE as
1c4d0 20 70 61 72 74 20 6f 66 0a 20 20 20 20 20 20 20   part of.       
1c4e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c4f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a                 *
1c500 2a 20 74 68 65 20 4f 52 20 6f 70 74 69 6d 69 7a  * the OR optimiz
1c510 61 74 69 6f 6e 20 20 2a 2f 0a 23 64 65 66 69 6e  ation  */.#defin
1c520 65 20 57 48 45 52 45 5f 47 52 4f 55 50 42 59 20  e WHERE_GROUPBY 
1c530 20 20 20 20 20 20 20 20 20 30 78 30 30 34 30 20           0x0040 
1c540 2f 2a 20 70 4f 72 64 65 72 42 79 20 69 73 20 72  /* pOrderBy is r
1c550 65 61 6c 6c 79 20 61 20 47 52 4f 55 50 20 42 59  eally a GROUP BY
1c560 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52   */.#define WHER
1c570 45 5f 44 49 53 54 49 4e 43 54 42 59 20 20 20 20  E_DISTINCTBY    
1c580 20 20 20 30 78 30 30 38 30 20 2f 2a 20 70 4f 72     0x0080 /* pOr
1c590 64 65 72 62 79 20 69 73 20 72 65 61 6c 6c 79 20  derby is really 
1c5a0 61 20 44 49 53 54 49 4e 43 54 20 63 6c 61 75 73  a DISTINCT claus
1c5b0 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45  e */.#define WHE
1c5c0 52 45 5f 57 41 4e 54 5f 44 49 53 54 49 4e 43 54  RE_WANT_DISTINCT
1c5d0 20 20 20 20 30 78 30 31 30 30 20 2f 2a 20 41 6c      0x0100 /* Al
1c5e0 6c 20 6f 75 74 70 75 74 20 6e 65 65 64 73 20 74  l output needs t
1c5f0 6f 20 62 65 20 64 69 73 74 69 6e 63 74 20 2a 2f  o be distinct */
1c600 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 53  .#define WHERE_S
1c610 4f 52 54 42 59 47 52 4f 55 50 20 20 20 20 20 20  ORTBYGROUP      
1c620 30 78 30 32 30 30 20 2f 2a 20 53 75 70 70 6f 72  0x0200 /* Suppor
1c630 74 20 73 71 6c 69 74 65 33 57 68 65 72 65 49 73  t sqlite3WhereIs
1c640 53 6f 72 74 65 64 28 29 20 2a 2f 0a 23 64 65 66  Sorted() */.#def
1c650 69 6e 65 20 57 48 45 52 45 5f 53 45 45 4b 5f 54  ine WHERE_SEEK_T
1c660 41 42 4c 45 20 20 20 20 20 20 20 30 78 30 34 30  ABLE       0x040
1c670 30 20 2f 2a 20 44 6f 20 6e 6f 74 20 64 65 66 65  0 /* Do not defe
1c680 72 20 73 65 65 6b 73 20 6f 6e 20 6d 61 69 6e 20  r seeks on main 
1c690 74 61 62 6c 65 20 2a 2f 0a 23 64 65 66 69 6e 65  table */.#define
1c6a0 20 57 48 45 52 45 5f 4f 52 44 45 52 42 59 5f 4c   WHERE_ORDERBY_L
1c6b0 49 4d 49 54 20 20 20 20 30 78 30 38 30 30 20 2f  IMIT    0x0800 /
1c6c0 2a 20 4f 52 44 45 52 42 59 2b 4c 49 4d 49 54 20  * ORDERBY+LIMIT 
1c6d0 6f 6e 20 74 68 65 20 69 6e 6e 65 72 20 6c 6f 6f  on the inner loo
1c6e0 70 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45  p */.#define WHE
1c6f0 52 45 5f 53 45 45 4b 5f 55 4e 49 51 5f 54 41 42  RE_SEEK_UNIQ_TAB
1c700 4c 45 20 20 30 78 31 30 30 30 20 2f 2a 20 44 6f  LE  0x1000 /* Do
1c710 20 6e 6f 74 20 64 65 66 65 72 20 73 65 65 6b 73   not defer seeks
1c720 20 69 66 20 75 6e 69 71 75 65 20 2a 2f 0a 20 20   if unique */.  
1c730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c740 20 20 20 20 20 20 2f 2a 20 20 20 20 20 30 78 32        /*     0x2
1c750 30 30 30 20 20 20 20 6e 6f 74 20 63 75 72 72 65  000    not curre
1c760 6e 74 6c 79 20 75 73 65 64 20 2a 2f 0a 23 64 65  ntly used */.#de
1c770 66 69 6e 65 20 57 48 45 52 45 5f 55 53 45 5f 4c  fine WHERE_USE_L
1c780 49 4d 49 54 20 20 20 20 20 20 20 20 30 78 34 30  IMIT        0x40
1c790 30 30 20 2f 2a 20 55 73 65 20 74 68 65 20 4c 49  00 /* Use the LI
1c7a0 4d 49 54 20 69 6e 20 63 6f 73 74 20 65 73 74 69  MIT in cost esti
1c7b0 6d 61 74 65 73 20 2a 2f 0a 20 20 20 20 20 20 20  mates */.       
1c7c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c7d0 20 2f 2a 20 20 20 20 20 30 78 38 30 30 30 20 20   /*     0x8000  
1c7e0 20 20 6e 6f 74 20 63 75 72 72 65 6e 74 6c 79 20    not currently 
1c7f0 75 73 65 64 20 2a 2f 0a 0a 2f 2a 20 41 6c 6c 6f  used */../* Allo
1c800 77 65 64 20 72 65 74 75 72 6e 20 76 61 6c 75 65  wed return value
1c810 73 20 66 72 6f 6d 20 73 71 6c 69 74 65 33 57 68  s from sqlite3Wh
1c820 65 72 65 49 73 44 69 73 74 69 6e 63 74 28 29 0a  ereIsDistinct().
1c830 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45  */.#define WHERE
1c840 5f 44 49 53 54 49 4e 43 54 5f 4e 4f 4f 50 20 20  _DISTINCT_NOOP  
1c850 20 20 20 20 30 20 20 2f 2a 20 44 49 53 54 49 4e      0  /* DISTIN
1c860 43 54 20 6b 65 79 77 6f 72 64 20 6e 6f 74 20 75  CT keyword not u
1c870 73 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57  sed */.#define W
1c880 48 45 52 45 5f 44 49 53 54 49 4e 43 54 5f 55 4e  HERE_DISTINCT_UN
1c890 49 51 55 45 20 20 20 20 31 20 20 2f 2a 20 4e 6f  IQUE    1  /* No
1c8a0 20 64 75 70 6c 69 63 61 74 65 73 20 2a 2f 0a 23   duplicates */.#
1c8b0 64 65 66 69 6e 65 20 57 48 45 52 45 5f 44 49 53  define WHERE_DIS
1c8c0 54 49 4e 43 54 5f 4f 52 44 45 52 45 44 20 20 20  TINCT_ORDERED   
1c8d0 32 20 20 2f 2a 20 41 6c 6c 20 64 75 70 6c 69 63  2  /* All duplic
1c8e0 61 74 65 73 20 61 72 65 20 61 64 6a 61 63 65 6e  ates are adjacen
1c8f0 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45  t */.#define WHE
1c900 52 45 5f 44 49 53 54 49 4e 43 54 5f 55 4e 4f 52  RE_DISTINCT_UNOR
1c910 44 45 52 45 44 20 33 20 20 2f 2a 20 44 75 70 6c  DERED 3  /* Dupl
1c920 69 63 61 74 65 73 20 61 72 65 20 73 63 61 74 74  icates are scatt
1c930 65 72 65 64 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41  ered */../*.** A
1c940 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20 64 65 66   NameContext def
1c950 69 6e 65 73 20 61 20 63 6f 6e 74 65 78 74 20 69  ines a context i
1c960 6e 20 77 68 69 63 68 20 74 6f 20 72 65 73 6f 6c  n which to resol
1c970 76 65 20 74 61 62 6c 65 20 61 6e 64 20 63 6f 6c  ve table and col
1c980 75 6d 6e 0a 2a 2a 20 6e 61 6d 65 73 2e 20 20 54  umn.** names.  T
1c990 68 65 20 63 6f 6e 74 65 78 74 20 63 6f 6e 73 69  he context consi
1c9a0 73 74 73 20 6f 66 20 61 20 6c 69 73 74 20 6f 66  sts of a list of
1c9b0 20 74 61 62 6c 65 73 20 28 74 68 65 20 70 53 72   tables (the pSr
1c9c0 63 4c 69 73 74 29 20 66 69 65 6c 64 20 61 6e 64  cList) field and
1c9d0 0a 2a 2a 20 61 20 6c 69 73 74 20 6f 66 20 6e 61  .** a list of na
1c9e0 6d 65 64 20 65 78 70 72 65 73 73 69 6f 6e 20 28  med expression (
1c9f0 70 45 4c 69 73 74 29 2e 20 20 54 68 65 20 6e 61  pEList).  The na
1ca00 6d 65 64 20 65 78 70 72 65 73 73 69 6f 6e 20 6c  med expression l
1ca10 69 73 74 20 6d 61 79 0a 2a 2a 20 62 65 20 4e 55  ist may.** be NU
1ca20 4c 4c 2e 20 20 54 68 65 20 70 53 72 63 20 63 6f  LL.  The pSrc co
1ca30 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 74 68 65  rresponds to the
1ca40 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 6f 66 20   FROM clause of 
1ca50 61 20 53 45 4c 45 43 54 20 6f 72 0a 2a 2a 20 74  a SELECT or.** t
1ca60 6f 20 74 68 65 20 74 61 62 6c 65 20 62 65 69 6e  o the table bein
1ca70 67 20 6f 70 65 72 61 74 65 64 20 6f 6e 20 62 79  g operated on by
1ca80 20 49 4e 53 45 52 54 2c 20 55 50 44 41 54 45 2c   INSERT, UPDATE,
1ca90 20 6f 72 20 44 45 4c 45 54 45 2e 20 20 54 68 65   or DELETE.  The
1caa0 0a 2a 2a 20 70 45 4c 69 73 74 20 63 6f 72 72 65  .** pEList corre
1cab0 73 70 6f 6e 64 73 20 74 6f 20 74 68 65 20 72 65  sponds to the re
1cac0 73 75 6c 74 20 73 65 74 20 6f 66 20 61 20 53 45  sult set of a SE
1cad0 4c 45 43 54 20 61 6e 64 20 69 73 20 4e 55 4c 4c  LECT and is NULL
1cae0 20 66 6f 72 0a 2a 2a 20 6f 74 68 65 72 20 73 74   for.** other st
1caf0 61 74 65 6d 65 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20  atements..**.** 
1cb00 4e 61 6d 65 43 6f 6e 74 65 78 74 73 20 63 61 6e  NameContexts can
1cb10 20 62 65 20 6e 65 73 74 65 64 2e 20 20 57 68 65   be nested.  Whe
1cb20 6e 20 72 65 73 6f 6c 76 69 6e 67 20 6e 61 6d 65  n resolving name
1cb30 73 2c 20 74 68 65 20 69 6e 6e 65 72 2d 6d 6f 73  s, the inner-mos
1cb40 74 0a 2a 2a 20 63 6f 6e 74 65 78 74 20 69 73 20  t.** context is 
1cb50 73 65 61 72 63 68 65 64 20 66 69 72 73 74 2e 20  searched first. 
1cb60 20 49 66 20 6e 6f 20 6d 61 74 63 68 20 69 73 20   If no match is 
1cb70 66 6f 75 6e 64 2c 20 74 68 65 20 6e 65 78 74 20  found, the next 
1cb80 6f 75 74 65 72 0a 2a 2a 20 63 6f 6e 74 65 78 74  outer.** context
1cb90 20 69 73 20 63 68 65 63 6b 65 64 2e 20 20 49 66   is checked.  If
1cba0 20 74 68 65 72 65 20 69 73 20 73 74 69 6c 6c 20   there is still 
1cbb0 6e 6f 20 6d 61 74 63 68 2c 20 74 68 65 20 6e 65  no match, the ne
1cbc0 78 74 20 63 6f 6e 74 65 78 74 0a 2a 2a 20 69 73  xt context.** is
1cbd0 20 63 68 65 63 6b 65 64 2e 20 20 54 68 69 73 20   checked.  This 
1cbe0 70 72 6f 63 65 73 73 20 63 6f 6e 74 69 6e 75 65  process continue
1cbf0 73 20 75 6e 74 69 6c 20 65 69 74 68 65 72 20 61  s until either a
1cc00 20 6d 61 74 63 68 20 69 73 20 66 6f 75 6e 64 0a   match is found.
1cc10 2a 2a 20 6f 72 20 61 6c 6c 20 63 6f 6e 74 65 78  ** or all contex
1cc20 74 73 20 61 72 65 20 63 68 65 63 6b 2e 20 20 57  ts are check.  W
1cc30 68 65 6e 20 61 20 6d 61 74 63 68 20 69 73 20 66  hen a match is f
1cc40 6f 75 6e 64 2c 20 74 68 65 20 6e 52 65 66 20 6d  ound, the nRef m
1cc50 65 6d 62 65 72 20 6f 66 0a 2a 2a 20 74 68 65 20  ember of.** the 
1cc60 63 6f 6e 74 65 78 74 20 63 6f 6e 74 61 69 6e 69  context containi
1cc70 6e 67 20 74 68 65 20 6d 61 74 63 68 20 69 73 20  ng the match is 
1cc80 69 6e 63 72 65 6d 65 6e 74 65 64 2e 0a 2a 2a 0a  incremented..**.
1cc90 2a 2a 20 45 61 63 68 20 73 75 62 71 75 65 72 79  ** Each subquery
1cca0 20 67 65 74 73 20 61 20 6e 65 77 20 4e 61 6d 65   gets a new Name
1ccb0 43 6f 6e 74 65 78 74 2e 20 20 54 68 65 20 70 4e  Context.  The pN
1ccc0 65 78 74 20 66 69 65 6c 64 20 70 6f 69 6e 74 73  ext field points
1ccd0 20 74 6f 20 74 68 65 0a 2a 2a 20 4e 61 6d 65 43   to the.** NameC
1cce0 6f 6e 74 65 78 74 20 69 6e 20 74 68 65 20 70 61  ontext in the pa
1ccf0 72 65 6e 74 20 71 75 65 72 79 2e 20 20 54 68 75  rent query.  Thu
1cd00 73 20 74 68 65 20 70 72 6f 63 65 73 73 20 6f 66  s the process of
1cd10 20 73 63 61 6e 6e 69 6e 67 20 74 68 65 0a 2a 2a   scanning the.**
1cd20 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20 6c 69 73   NameContext lis
1cd30 74 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f  t corresponds to
1cd40 20 73 65 61 72 63 68 69 6e 67 20 74 68 72 6f 75   searching throu
1cd50 67 68 20 73 75 63 63 65 73 73 69 76 65 6c 79 20  gh successively 
1cd60 6f 75 74 65 72 0a 2a 2a 20 73 75 62 71 75 65 72  outer.** subquer
1cd70 69 65 73 20 6c 6f 6f 6b 69 6e 67 20 66 6f 72 20  ies looking for 
1cd80 61 20 6d 61 74 63 68 2e 0a 2a 2f 0a 73 74 72 75  a match..*/.stru
1cd90 63 74 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20 7b  ct NameContext {
1cda0 0a 20 20 50 61 72 73 65 20 2a 70 50 61 72 73 65  .  Parse *pParse
1cdb0 3b 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 70  ;       /* The p
1cdc0 61 72 73 65 72 20 2a 2f 0a 20 20 53 72 63 4c 69  arser */.  SrcLi
1cdd0 73 74 20 2a 70 53 72 63 4c 69 73 74 3b 20 20 20  st *pSrcList;   
1cde0 2f 2a 20 4f 6e 65 20 6f 72 20 6d 6f 72 65 20 74  /* One or more t
1cdf0 61 62 6c 65 73 20 75 73 65 64 20 74 6f 20 72 65  ables used to re
1ce00 73 6f 6c 76 65 20 6e 61 6d 65 73 20 2a 2f 0a 20  solve names */. 
1ce10 20 75 6e 69 6f 6e 20 7b 0a 20 20 20 20 45 78 70   union {.    Exp
1ce20 72 4c 69 73 74 20 2a 70 45 4c 69 73 74 3b 20 20  rList *pEList;  
1ce30 20 20 2f 2a 20 4f 70 74 69 6f 6e 61 6c 20 6c 69    /* Optional li
1ce40 73 74 20 6f 66 20 72 65 73 75 6c 74 2d 73 65 74  st of result-set
1ce50 20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 20 20 20 20   columns */.    
1ce60 41 67 67 49 6e 66 6f 20 2a 70 41 67 67 49 6e 66  AggInfo *pAggInf
1ce70 6f 3b 20 20 20 2f 2a 20 49 6e 66 6f 72 6d 61 74  o;   /* Informat
1ce80 69 6f 6e 20 61 62 6f 75 74 20 61 67 67 72 65 67  ion about aggreg
1ce90 61 74 65 73 20 61 74 20 74 68 69 73 20 6c 65 76  ates at this lev
1cea0 65 6c 20 2a 2f 0a 20 20 20 20 55 70 73 65 72 74  el */.    Upsert
1ceb0 20 2a 70 55 70 73 65 72 74 3b 20 20 20 20 20 2f   *pUpsert;     /
1cec0 2a 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 63 6c  * ON CONFLICT cl
1ced0 61 75 73 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  ause information
1cee0 20 66 72 6f 6d 20 61 6e 20 75 70 73 65 72 74 20   from an upsert 
1cef0 2a 2f 0a 20 20 7d 20 75 4e 43 3b 0a 20 20 4e 61  */.  } uNC;.  Na
1cf00 6d 65 43 6f 6e 74 65 78 74 20 2a 70 4e 65 78 74  meContext *pNext
1cf10 3b 20 20 2f 2a 20 4e 65 78 74 20 6f 75 74 65 72  ;  /* Next outer
1cf20 20 6e 61 6d 65 20 63 6f 6e 74 65 78 74 2e 20 20   name context.  
1cf30 4e 55 4c 4c 20 66 6f 72 20 6f 75 74 65 72 6d 6f  NULL for outermo
1cf40 73 74 20 2a 2f 0a 20 20 69 6e 74 20 6e 52 65 66  st */.  int nRef
1cf50 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
1cf60 4e 75 6d 62 65 72 20 6f 66 20 6e 61 6d 65 73 20  Number of names 
1cf70 72 65 73 6f 6c 76 65 64 20 62 79 20 74 68 69 73  resolved by this
1cf80 20 63 6f 6e 74 65 78 74 20 2a 2f 0a 20 20 69 6e   context */.  in
1cf90 74 20 6e 45 72 72 3b 20 20 20 20 20 20 20 20 20  t nErr;         
1cfa0 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
1cfb0 65 72 72 6f 72 73 20 65 6e 63 6f 75 6e 74 65 72  errors encounter
1cfc0 65 64 20 77 68 69 6c 65 20 72 65 73 6f 6c 76 69  ed while resolvi
1cfd0 6e 67 20 6e 61 6d 65 73 20 2a 2f 0a 20 20 75 31  ng names */.  u1
1cfe0 36 20 6e 63 46 6c 61 67 73 3b 20 20 20 20 20 20  6 ncFlags;      
1cff0 20 20 20 2f 2a 20 5a 65 72 6f 20 6f 72 20 6d 6f     /* Zero or mo
1d000 72 65 20 4e 43 5f 2a 20 66 6c 61 67 73 20 64 65  re NC_* flags de
1d010 66 69 6e 65 64 20 62 65 6c 6f 77 20 2a 2f 0a 20  fined below */. 
1d020 20 53 65 6c 65 63 74 20 2a 70 57 69 6e 53 65 6c   Select *pWinSel
1d030 65 63 74 3b 20 20 2f 2a 20 53 45 4c 45 43 54 20  ect;  /* SELECT 
1d040 73 74 61 74 65 6d 65 6e 74 20 66 6f 72 20 61 6e  statement for an
1d050 79 20 77 69 6e 64 6f 77 20 66 75 6e 63 74 69 6f  y window functio
1d060 6e 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  ns */.};../*.** 
1d070 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20 66  Allowed values f
1d080 6f 72 20 74 68 65 20 4e 61 6d 65 43 6f 6e 74 65  or the NameConte
1d090 78 74 2c 20 6e 63 46 6c 61 67 73 20 66 69 65 6c  xt, ncFlags fiel
1d0a0 64 2e 0a 2a 2a 0a 2a 2a 20 56 61 6c 75 65 20 63  d..**.** Value c
1d0b0 6f 6e 73 74 72 61 69 6e 74 73 20 28 61 6c 6c 20  onstraints (all 
1d0c0 63 68 65 63 6b 65 64 20 76 69 61 20 61 73 73 65  checked via asse
1d0d0 72 74 28 29 29 3a 0a 2a 2a 20 20 20 20 4e 43 5f  rt()):.**    NC_
1d0e0 48 61 73 41 67 67 20 20 20 20 3d 3d 20 53 46 5f  HasAgg    == SF_
1d0f0 48 61 73 41 67 67 0a 2a 2a 20 20 20 20 4e 43 5f  HasAgg.**    NC_
1d100 4d 69 6e 4d 61 78 41 67 67 20 3d 3d 20 53 46 5f  MinMaxAgg == SF_
1d110 4d 69 6e 4d 61 78 41 67 67 20 3d 3d 20 53 51 4c  MinMaxAgg == SQL
1d120 49 54 45 5f 46 55 4e 43 5f 4d 49 4e 4d 41 58 0a  ITE_FUNC_MINMAX.
1d130 2a 2a 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43  **.*/.#define NC
1d140 5f 41 6c 6c 6f 77 41 67 67 20 20 30 78 30 30 30  _AllowAgg  0x000
1d150 31 20 20 2f 2a 20 41 67 67 72 65 67 61 74 65 20  1  /* Aggregate 
1d160 66 75 6e 63 74 69 6f 6e 73 20 61 72 65 20 61 6c  functions are al
1d170 6c 6f 77 65 64 20 68 65 72 65 20 2a 2f 0a 23 64  lowed here */.#d
1d180 65 66 69 6e 65 20 4e 43 5f 50 61 72 74 49 64 78  efine NC_PartIdx
1d190 20 20 20 30 78 30 30 30 32 20 20 2f 2a 20 54 72     0x0002  /* Tr
1d1a0 75 65 20 69 66 20 72 65 73 6f 6c 76 69 6e 67 20  ue if resolving 
1d1b0 61 20 70 61 72 74 69 61 6c 20 69 6e 64 65 78 20  a partial index 
1d1c0 57 48 45 52 45 20 2a 2f 0a 23 64 65 66 69 6e 65  WHERE */.#define
1d1d0 20 4e 43 5f 49 73 43 68 65 63 6b 20 20 20 30 78   NC_IsCheck   0x
1d1e0 30 30 30 34 20 20 2f 2a 20 54 72 75 65 20 69 66  0004  /* True if
1d1f0 20 72 65 73 6f 6c 76 69 6e 67 20 6e 61 6d 65 73   resolving names
1d200 20 69 6e 20 61 20 43 48 45 43 4b 20 63 6f 6e 73   in a CHECK cons
1d210 74 72 61 69 6e 74 20 2a 2f 0a 23 64 65 66 69 6e  traint */.#defin
1d220 65 20 4e 43 5f 49 6e 41 67 67 46 75 6e 63 20 30  e NC_InAggFunc 0
1d230 78 30 30 30 38 20 20 2f 2a 20 54 72 75 65 20 69  x0008  /* True i
1d240 66 20 61 6e 61 6c 79 7a 69 6e 67 20 61 72 67 75  f analyzing argu
1d250 6d 65 6e 74 73 20 74 6f 20 61 6e 20 61 67 67 20  ments to an agg 
1d260 66 75 6e 63 20 2a 2f 0a 23 64 65 66 69 6e 65 20  func */.#define 
1d270 4e 43 5f 48 61 73 41 67 67 20 20 20 20 30 78 30  NC_HasAgg    0x0
1d280 30 31 30 20 20 2f 2a 20 4f 6e 65 20 6f 72 20 6d  010  /* One or m
1d290 6f 72 65 20 61 67 67 72 65 67 61 74 65 20 66 75  ore aggregate fu
1d2a0 6e 63 74 69 6f 6e 73 20 73 65 65 6e 20 2a 2f 0a  nctions seen */.
1d2b0 23 64 65 66 69 6e 65 20 4e 43 5f 49 64 78 45 78  #define NC_IdxEx
1d2c0 70 72 20 20 20 30 78 30 30 32 30 20 20 2f 2a 20  pr   0x0020  /* 
1d2d0 54 72 75 65 20 69 66 20 72 65 73 6f 6c 76 69 6e  True if resolvin
1d2e0 67 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 43 52 45  g columns of CRE
1d2f0 41 54 45 20 49 4e 44 45 58 20 2a 2f 0a 23 64 65  ATE INDEX */.#de
1d300 66 69 6e 65 20 4e 43 5f 56 61 72 53 65 6c 65 63  fine NC_VarSelec
1d310 74 20 30 78 30 30 34 30 20 20 2f 2a 20 41 20 63  t 0x0040  /* A c
1d320 6f 72 72 65 6c 61 74 65 64 20 73 75 62 71 75 65  orrelated subque
1d330 72 79 20 68 61 73 20 62 65 65 6e 20 73 65 65 6e  ry has been seen
1d340 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 55   */.#define NC_U
1d350 45 4c 69 73 74 20 20 20 20 30 78 30 30 38 30 20  EList    0x0080 
1d360 20 2f 2a 20 54 72 75 65 20 69 66 20 75 4e 43 2e   /* True if uNC.
1d370 70 45 4c 69 73 74 20 69 73 20 75 73 65 64 20 2a  pEList is used *
1d380 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 55 41 67  /.#define NC_UAg
1d390 67 49 6e 66 6f 20 20 30 78 30 31 30 30 20 20 2f  gInfo  0x0100  /
1d3a0 2a 20 54 72 75 65 20 69 66 20 75 4e 43 2e 70 41  * True if uNC.pA
1d3b0 67 67 49 6e 66 6f 20 69 73 20 75 73 65 64 20 2a  ggInfo is used *
1d3c0 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 55 55 70  /.#define NC_UUp
1d3d0 73 65 72 74 20 20 20 30 78 30 32 30 30 20 20 2f  sert   0x0200  /
1d3e0 2a 20 54 72 75 65 20 69 66 20 75 4e 43 2e 70 55  * True if uNC.pU
1d3f0 70 73 65 72 74 20 69 73 20 75 73 65 64 20 2a 2f  psert is used */
1d400 0a 23 64 65 66 69 6e 65 20 4e 43 5f 4d 69 6e 4d  .#define NC_MinM
1d410 61 78 41 67 67 20 30 78 31 30 30 30 20 20 2f 2a  axAgg 0x1000  /*
1d420 20 6d 69 6e 2f 6d 61 78 20 61 67 67 72 65 67 61   min/max aggrega
1d430 74 65 73 20 73 65 65 6e 2e 20 20 53 65 65 20 6e  tes seen.  See n
1d440 6f 74 65 20 61 62 6f 76 65 20 2a 2f 0a 23 64 65  ote above */.#de
1d450 66 69 6e 65 20 4e 43 5f 43 6f 6d 70 6c 65 78 20  fine NC_Complex 
1d460 20 20 30 78 32 30 30 30 20 20 2f 2a 20 54 72 75    0x2000  /* Tru
1d470 65 20 69 66 20 61 20 66 75 6e 63 74 69 6f 6e 20  e if a function 
1d480 6f 72 20 73 75 62 71 75 65 72 79 20 73 65 65 6e  or subquery seen
1d490 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 41   */.#define NC_A
1d4a0 6c 6c 6f 77 57 69 6e 20 20 30 78 34 30 30 30 20  llowWin  0x4000 
1d4b0 20 2f 2a 20 57 69 6e 64 6f 77 20 66 75 6e 63 74   /* Window funct
1d4c0 69 6f 6e 73 20 61 72 65 20 61 6c 6c 6f 77 65 64  ions are allowed
1d4d0 20 68 65 72 65 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20   here */../*.** 
1d4e0 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  An instance of t
1d4f0 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6f 62 6a  he following obj
1d500 65 63 74 20 64 65 73 63 72 69 62 65 73 20 61 20  ect describes a 
1d510 73 69 6e 67 6c 65 20 4f 4e 20 43 4f 4e 46 4c 49  single ON CONFLI
1d520 43 54 0a 2a 2a 20 63 6c 61 75 73 65 20 69 6e 20  CT.** clause in 
1d530 61 6e 20 75 70 73 65 72 74 2e 0a 2a 2a 0a 2a 2a  an upsert..**.**
1d540 20 54 68 65 20 70 55 70 73 65 72 74 54 61 72 67   The pUpsertTarg
1d550 65 74 20 66 69 65 6c 64 20 69 73 20 6f 6e 6c 79  et field is only
1d560 20 73 65 74 20 69 66 20 74 68 65 20 4f 4e 20 43   set if the ON C
1d570 4f 4e 46 4c 49 43 54 20 63 6c 61 75 73 65 20 69  ONFLICT clause i
1d580 6e 63 6c 75 64 65 73 0a 2a 2a 20 63 6f 6e 66 6c  ncludes.** confl
1d590 69 63 74 2d 74 61 72 67 65 74 20 63 6c 61 75 73  ict-target claus
1d5a0 65 2e 20 20 28 49 6e 20 22 4f 4e 20 43 4f 4e 46  e.  (In "ON CONF
1d5b0 4c 49 43 54 28 61 2c 62 29 22 20 74 68 65 20 22  LICT(a,b)" the "
1d5c0 28 61 2c 62 29 22 20 69 73 20 74 68 65 0a 2a 2a  (a,b)" is the.**
1d5d0 20 63 6f 6e 66 6c 69 63 74 2d 74 61 72 67 65 74   conflict-target
1d5e0 20 63 6c 61 75 73 65 2e 29 20 20 54 68 65 20 70   clause.)  The p
1d5f0 55 70 73 65 72 74 54 61 72 67 65 74 57 68 65 72  UpsertTargetWher
1d600 65 20 69 73 20 74 68 65 20 6f 70 74 69 6f 6e 61  e is the optiona
1d610 6c 0a 2a 2a 20 57 48 45 52 45 20 63 6c 61 75 73  l.** WHERE claus
1d620 65 20 75 73 65 64 20 74 6f 20 69 64 65 6e 74 69  e used to identi
1d630 66 79 20 70 61 72 74 69 61 6c 20 75 6e 69 71 75  fy partial uniqu
1d640 65 20 69 6e 64 65 78 65 73 2e 0a 2a 2a 0a 2a 2a  e indexes..**.**
1d650 20 70 55 70 73 65 72 74 53 65 74 20 69 73 20 74   pUpsertSet is t
1d660 68 65 20 6c 69 73 74 20 6f 66 20 63 6f 6c 75 6d  he list of colum
1d670 6e 3d 65 78 70 72 20 74 65 72 6d 73 20 6f 66 20  n=expr terms of 
1d680 74 68 65 20 55 50 44 41 54 45 20 73 74 61 74 65  the UPDATE state
1d690 6d 65 6e 74 2e 20 0a 2a 2a 20 54 68 65 20 70 55  ment. .** The pU
1d6a0 70 73 65 72 74 53 65 74 20 66 69 65 6c 64 20 69  psertSet field i
1d6b0 73 20 4e 55 4c 4c 20 66 6f 72 20 61 20 4f 4e 20  s NULL for a ON 
1d6c0 43 4f 4e 46 4c 49 43 54 20 44 4f 20 4e 4f 54 48  CONFLICT DO NOTH
1d6d0 49 4e 47 2e 20 20 54 68 65 0a 2a 2a 20 70 55 70  ING.  The.** pUp
1d6e0 73 65 72 74 57 68 65 72 65 20 69 73 20 74 68 65  sertWhere is the
1d6f0 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 66 6f   WHERE clause fo
1d700 72 20 74 68 65 20 55 50 44 41 54 45 20 61 6e 64  r the UPDATE and
1d710 20 69 73 20 4e 55 4c 4c 20 69 66 20 74 68 65 0a   is NULL if the.
1d720 2a 2a 20 57 48 45 52 45 20 63 6c 61 75 73 65 20  ** WHERE clause 
1d730 69 73 20 6f 6d 69 74 74 65 64 2e 0a 2a 2f 0a 73  is omitted..*/.s
1d740 74 72 75 63 74 20 55 70 73 65 72 74 20 7b 0a 20  truct Upsert {. 
1d750 20 45 78 70 72 4c 69 73 74 20 2a 70 55 70 73 65   ExprList *pUpse
1d760 72 74 54 61 72 67 65 74 3b 20 20 2f 2a 20 4f 70  rtTarget;  /* Op
1d770 74 69 6f 6e 61 6c 20 64 65 73 63 72 69 70 74 69  tional descripti
1d780 6f 6e 20 6f 66 20 63 6f 6e 66 6c 69 63 74 69 6e  on of conflictin
1d790 67 20 69 6e 64 65 78 20 2a 2f 0a 20 20 45 78 70  g index */.  Exp
1d7a0 72 20 2a 70 55 70 73 65 72 74 54 61 72 67 65 74  r *pUpsertTarget
1d7b0 57 68 65 72 65 3b 20 2f 2a 20 57 48 45 52 45 20  Where; /* WHERE 
1d7c0 63 6c 61 75 73 65 20 66 6f 72 20 70 61 72 74 69  clause for parti
1d7d0 61 6c 20 69 6e 64 65 78 20 74 61 72 67 65 74 73  al index targets
1d7e0 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20 2a   */.  ExprList *
1d7f0 70 55 70 73 65 72 74 53 65 74 3b 20 20 20 20 20  pUpsertSet;     
1d800 2f 2a 20 54 68 65 20 53 45 54 20 63 6c 61 75 73  /* The SET claus
1d810 65 20 66 72 6f 6d 20 61 6e 20 4f 4e 20 43 4f 4e  e from an ON CON
1d820 46 4c 49 43 54 20 55 50 44 41 54 45 20 2a 2f 0a  FLICT UPDATE */.
1d830 20 20 45 78 70 72 20 2a 70 55 70 73 65 72 74 57    Expr *pUpsertW
1d840 68 65 72 65 3b 20 20 20 20 20 20 20 2f 2a 20 57  here;       /* W
1d850 48 45 52 45 20 63 6c 61 75 73 65 20 66 6f 72 20  HERE clause for 
1d860 74 68 65 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20  the ON CONFLICT 
1d870 55 50 44 41 54 45 20 2a 2f 0a 20 20 2f 2a 20 54  UPDATE */.  /* T
1d880 68 65 20 66 69 65 6c 64 73 20 61 62 6f 76 65 20  he fields above 
1d890 63 6f 6d 70 72 69 73 65 20 74 68 65 20 70 61 72  comprise the par
1d8a0 73 65 20 74 72 65 65 20 66 6f 72 20 74 68 65 20  se tree for the 
1d8b0 75 70 73 65 72 74 20 63 6c 61 75 73 65 2e 0a 20  upsert clause.. 
1d8c0 20 2a 2a 20 54 68 65 20 66 69 65 6c 64 73 20 62   ** The fields b
1d8d0 65 6c 6f 77 20 61 72 65 20 75 73 65 64 20 74 6f  elow are used to
1d8e0 20 74 72 61 6e 73 66 65 72 20 69 6e 66 6f 72 6d   transfer inform
1d8f0 61 74 69 6f 6e 20 66 72 6f 6d 20 74 68 65 20 49  ation from the I
1d900 4e 53 45 52 54 0a 20 20 2a 2a 20 70 72 6f 63 65  NSERT.  ** proce
1d910 73 73 69 6e 67 20 64 6f 77 6e 20 69 6e 74 6f 20  ssing down into 
1d920 74 68 65 20 55 50 44 41 54 45 20 70 72 6f 63 65  the UPDATE proce
1d930 73 73 69 6e 67 20 77 68 69 6c 65 20 67 65 6e 65  ssing while gene
1d940 72 61 74 69 6e 67 20 63 6f 64 65 2e 0a 20 20 2a  rating code..  *
1d950 2a 20 55 70 73 65 72 74 20 6f 77 6e 73 20 74 68  * Upsert owns th
1d960 65 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74  e memory allocat
1d970 65 64 20 61 62 6f 76 65 2c 20 62 75 74 20 6e 6f  ed above, but no
1d980 74 20 74 68 65 20 6d 65 6d 6f 72 79 20 62 65 6c  t the memory bel
1d990 6f 77 2e 20 2a 2f 0a 20 20 49 6e 64 65 78 20 2a  ow. */.  Index *
1d9a0 70 55 70 73 65 72 74 49 64 78 3b 20 20 20 20 20  pUpsertIdx;     
1d9b0 20 20 20 2f 2a 20 43 6f 6e 73 74 72 61 69 6e 74     /* Constraint
1d9c0 20 74 68 61 74 20 70 55 70 73 65 72 74 54 61 72   that pUpsertTar
1d9d0 67 65 74 20 69 64 65 6e 74 69 66 69 65 73 20 2a  get identifies *
1d9e0 2f 0a 20 20 53 72 63 4c 69 73 74 20 2a 70 55 70  /.  SrcList *pUp
1d9f0 73 65 72 74 53 72 63 3b 20 20 20 20 20 20 2f 2a  sertSrc;      /*
1da00 20 54 61 62 6c 65 20 74 6f 20 62 65 20 75 70 64   Table to be upd
1da10 61 74 65 64 20 2a 2f 0a 20 20 69 6e 74 20 72 65  ated */.  int re
1da20 67 44 61 74 61 3b 20 20 20 20 20 20 20 20 20 20  gData;          
1da30 20 20 20 20 2f 2a 20 46 69 72 73 74 20 72 65 67      /* First reg
1da40 69 73 74 65 72 20 68 6f 6c 64 69 6e 67 20 61 72  ister holding ar
1da50 72 61 79 20 6f 66 20 56 41 4c 55 45 53 20 2a 2f  ray of VALUES */
1da60 0a 20 20 69 6e 74 20 69 44 61 74 61 43 75 72 3b  .  int iDataCur;
1da70 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1da80 49 6e 64 65 78 20 6f 66 20 74 68 65 20 64 61 74  Index of the dat
1da90 61 20 63 75 72 73 6f 72 20 2a 2f 0a 20 20 69 6e  a cursor */.  in
1daa0 74 20 69 49 64 78 43 75 72 3b 20 20 20 20 20 20  t iIdxCur;      
1dab0 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 64 65 78          /* Index
1dac0 20 6f 66 20 74 68 65 20 66 69 72 73 74 20 69 6e   of the first in
1dad0 64 65 78 20 63 75 72 73 6f 72 20 2a 2f 0a 7d 3b  dex cursor */.};
1dae0 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61  ../*.** An insta
1daf0 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f  nce of the follo
1db00 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 20 63  wing structure c
1db10 6f 6e 74 61 69 6e 73 20 61 6c 6c 20 69 6e 66 6f  ontains all info
1db20 72 6d 61 74 69 6f 6e 0a 2a 2a 20 6e 65 65 64 65  rmation.** neede
1db30 64 20 74 6f 20 67 65 6e 65 72 61 74 65 20 63 6f  d to generate co
1db40 64 65 20 66 6f 72 20 61 20 73 69 6e 67 6c 65 20  de for a single 
1db50 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74  SELECT statement
1db60 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 74 68 65 20  ..**.** See the 
1db70 68 65 61 64 65 72 20 63 6f 6d 6d 65 6e 74 20 6f  header comment o
1db80 6e 20 74 68 65 20 63 6f 6d 70 75 74 65 4c 69 6d  n the computeLim
1db90 69 74 52 65 67 69 73 74 65 72 73 28 29 20 72 6f  itRegisters() ro
1dba0 75 74 69 6e 65 20 66 6f 72 20 61 0a 2a 2a 20 64  utine for a.** d
1dbb0 65 74 61 69 6c 65 64 20 64 65 73 63 72 69 70 74  etailed descript
1dbc0 69 6f 6e 20 6f 66 20 74 68 65 20 6d 65 61 6e 69  ion of the meani
1dbd0 6e 67 20 6f 66 20 74 68 65 20 69 4c 69 6d 69 74  ng of the iLimit
1dbe0 20 61 6e 64 20 69 4f 66 66 73 65 74 20 66 69 65   and iOffset fie
1dbf0 6c 64 73 2e 0a 2a 2a 0a 2a 2a 20 61 64 64 72 4f  lds..**.** addrO
1dc00 70 65 6e 45 70 68 6d 5b 5d 20 65 6e 74 72 69 65  penEphm[] entrie
1dc10 73 20 63 6f 6e 74 61 69 6e 20 74 68 65 20 61 64  s contain the ad
1dc20 64 72 65 73 73 20 6f 66 20 4f 50 5f 4f 70 65 6e  dress of OP_Open
1dc30 45 70 68 65 6d 65 72 61 6c 20 6f 70 63 6f 64 65  Ephemeral opcode
1dc40 73 2e 0a 2a 2a 20 54 68 65 73 65 20 61 64 64 72  s..** These addr
1dc50 65 73 73 65 73 20 6d 75 73 74 20 62 65 20 73 74  esses must be st
1dc60 6f 72 65 64 20 73 6f 20 74 68 61 74 20 77 65 20  ored so that we 
1dc70 63 61 6e 20 67 6f 20 62 61 63 6b 20 61 6e 64 20  can go back and 
1dc80 66 69 6c 6c 20 69 6e 0a 2a 2a 20 74 68 65 20 50  fill in.** the P
1dc90 34 5f 4b 45 59 49 4e 46 4f 20 61 6e 64 20 50 32  4_KEYINFO and P2
1dca0 20 70 61 72 61 6d 65 74 65 72 73 20 6c 61 74 65   parameters late
1dcb0 72 2e 20 20 4e 65 69 74 68 65 72 20 74 68 65 20  r.  Neither the 
1dcc0 4b 65 79 49 6e 66 6f 20 6e 6f 72 0a 2a 2a 20 74  KeyInfo nor.** t
1dcd0 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c  he number of col
1dce0 75 6d 6e 73 20 69 6e 20 50 32 20 63 61 6e 20 62  umns in P2 can b
1dcf0 65 20 63 6f 6d 70 75 74 65 64 20 61 74 20 74 68  e computed at th
1dd00 65 20 73 61 6d 65 20 74 69 6d 65 0a 2a 2a 20 61  e same time.** a
1dd10 73 20 74 68 65 20 4f 50 5f 4f 70 65 6e 45 70 68  s the OP_OpenEph
1dd20 6d 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 73  m instruction is
1dd30 20 63 6f 64 65 64 20 62 65 63 61 75 73 65 20 6e   coded because n
1dd40 6f 74 0a 2a 2a 20 65 6e 6f 75 67 68 20 69 6e 66  ot.** enough inf
1dd50 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 74  ormation about t
1dd60 68 65 20 63 6f 6d 70 6f 75 6e 64 20 71 75 65 72  he compound quer
1dd70 79 20 69 73 20 6b 6e 6f 77 6e 20 61 74 20 74 68  y is known at th
1dd80 61 74 20 70 6f 69 6e 74 2e 0a 2a 2a 20 54 68 65  at point..** The
1dd90 20 4b 65 79 49 6e 66 6f 20 66 6f 72 20 61 64 64   KeyInfo for add
1dda0 72 4f 70 65 6e 54 72 61 6e 5b 30 5d 20 61 6e 64  rOpenTran[0] and
1ddb0 20 5b 31 5d 20 63 6f 6e 74 61 69 6e 73 20 63 6f   [1] contains co
1ddc0 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65  llating sequence
1ddd0 73 0a 2a 2a 20 66 6f 72 20 74 68 65 20 72 65 73  s.** for the res
1dde0 75 6c 74 20 73 65 74 2e 20 20 54 68 65 20 4b 65  ult set.  The Ke
1ddf0 79 49 6e 66 6f 20 66 6f 72 20 61 64 64 72 4f 70  yInfo for addrOp
1de00 65 6e 45 70 68 6d 5b 32 5d 20 63 6f 6e 74 61 69  enEphm[2] contai
1de10 6e 73 20 63 6f 6c 6c 61 74 69 6e 67 0a 2a 2a 20  ns collating.** 
1de20 73 65 71 75 65 6e 63 65 73 20 66 6f 72 20 74 68  sequences for th
1de30 65 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73  e ORDER BY claus
1de40 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53 65 6c  e..*/.struct Sel
1de50 65 63 74 20 7b 0a 20 20 45 78 70 72 4c 69 73 74  ect {.  ExprList
1de60 20 2a 70 45 4c 69 73 74 3b 20 20 20 20 20 20 2f   *pEList;      /
1de70 2a 20 54 68 65 20 66 69 65 6c 64 73 20 6f 66 20  * The fields of 
1de80 74 68 65 20 72 65 73 75 6c 74 20 2a 2f 0a 20 20  the result */.  
1de90 75 38 20 6f 70 3b 20 20 20 20 20 20 20 20 20 20  u8 op;          
1dea0 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 66         /* One of
1deb0 3a 20 54 4b 5f 55 4e 49 4f 4e 20 54 4b 5f 41 4c  : TK_UNION TK_AL
1dec0 4c 20 54 4b 5f 49 4e 54 45 52 53 45 43 54 20 54  L TK_INTERSECT T
1ded0 4b 5f 45 58 43 45 50 54 20 2a 2f 0a 20 20 4c 6f  K_EXCEPT */.  Lo
1dee0 67 45 73 74 20 6e 53 65 6c 65 63 74 52 6f 77 3b  gEst nSelectRow;
1def0 20 20 20 20 20 2f 2a 20 45 73 74 69 6d 61 74 65       /* Estimate
1df00 64 20 6e 75 6d 62 65 72 20 6f 66 20 72 65 73 75  d number of resu
1df10 6c 74 20 72 6f 77 73 20 2a 2f 0a 20 20 75 33 32  lt rows */.  u32
1df20 20 73 65 6c 46 6c 61 67 73 3b 20 20 20 20 20 20   selFlags;      
1df30 20 20 20 20 2f 2a 20 56 61 72 69 6f 75 73 20 53      /* Various S
1df40 46 5f 2a 20 76 61 6c 75 65 73 20 2a 2f 0a 20 20  F_* values */.  
1df50 69 6e 74 20 69 4c 69 6d 69 74 2c 20 69 4f 66 66  int iLimit, iOff
1df60 73 65 74 3b 20 20 20 2f 2a 20 4d 65 6d 6f 72 79  set;   /* Memory
1df70 20 72 65 67 69 73 74 65 72 73 20 68 6f 6c 64 69   registers holdi
1df80 6e 67 20 4c 49 4d 49 54 20 26 20 4f 46 46 53 45  ng LIMIT & OFFSE
1df90 54 20 63 6f 75 6e 74 65 72 73 20 2a 2f 0a 20 20  T counters */.  
1dfa0 75 33 32 20 73 65 6c 49 64 3b 20 20 20 20 20 20  u32 selId;      
1dfb0 20 20 20 20 20 20 20 2f 2a 20 55 6e 69 71 75 65         /* Unique
1dfc0 20 69 64 65 6e 74 69 66 69 65 72 20 6e 75 6d 62   identifier numb
1dfd0 65 72 20 66 6f 72 20 74 68 69 73 20 53 45 4c 45  er for this SELE
1dfe0 43 54 20 2a 2f 0a 20 20 69 6e 74 20 61 64 64 72  CT */.  int addr
1dff0 4f 70 65 6e 45 70 68 6d 5b 32 5d 3b 20 20 20 2f  OpenEphm[2];   /
1e000 2a 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 20 6f  * OP_OpenEphem o
1e010 70 63 6f 64 65 73 20 72 65 6c 61 74 65 64 20 74  pcodes related t
1e020 6f 20 74 68 69 73 20 73 65 6c 65 63 74 20 2a 2f  o this select */
1e030 0a 20 20 53 72 63 4c 69 73 74 20 2a 70 53 72 63  .  SrcList *pSrc
1e040 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65  ;         /* The
1e050 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 2a 2f 0a   FROM clause */.
1e060 20 20 45 78 70 72 20 2a 70 57 68 65 72 65 3b 20    Expr *pWhere; 
1e070 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
1e080 57 48 45 52 45 20 63 6c 61 75 73 65 20 2a 2f 0a  WHERE clause */.
1e090 20 20 45 78 70 72 4c 69 73 74 20 2a 70 47 72 6f    ExprList *pGro
1e0a0 75 70 42 79 3b 20 20 20 20 2f 2a 20 54 68 65 20  upBy;    /* The 
1e0b0 47 52 4f 55 50 20 42 59 20 63 6c 61 75 73 65 20  GROUP BY clause 
1e0c0 2a 2f 0a 20 20 45 78 70 72 20 2a 70 48 61 76 69  */.  Expr *pHavi
1e0d0 6e 67 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54  ng;         /* T
1e0e0 68 65 20 48 41 56 49 4e 47 20 63 6c 61 75 73 65  he HAVING clause
1e0f0 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20 2a   */.  ExprList *
1e100 70 4f 72 64 65 72 42 79 3b 20 20 20 20 2f 2a 20  pOrderBy;    /* 
1e110 54 68 65 20 4f 52 44 45 52 20 42 59 20 63 6c 61  The ORDER BY cla
1e120 75 73 65 20 2a 2f 0a 20 20 53 65 6c 65 63 74 20  use */.  Select 
1e130 2a 70 50 72 69 6f 72 3b 20 20 20 20 20 20 20 20  *pPrior;        
1e140 2f 2a 20 50 72 69 6f 72 20 73 65 6c 65 63 74 20  /* Prior select 
1e150 69 6e 20 61 20 63 6f 6d 70 6f 75 6e 64 20 73 65  in a compound se
1e160 6c 65 63 74 20 73 74 61 74 65 6d 65 6e 74 20 2a  lect statement *
1e170 2f 0a 20 20 53 65 6c 65 63 74 20 2a 70 4e 65 78  /.  Select *pNex
1e180 74 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 65  t;         /* Ne
1e190 78 74 20 73 65 6c 65 63 74 20 74 6f 20 74 68 65  xt select to the
1e1a0 20 6c 65 66 74 20 69 6e 20 61 20 63 6f 6d 70 6f   left in a compo
1e1b0 75 6e 64 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70  und */.  Expr *p
1e1c0 4c 69 6d 69 74 3b 20 20 20 20 20 20 20 20 20 20  Limit;          
1e1d0 2f 2a 20 4c 49 4d 49 54 20 65 78 70 72 65 73 73  /* LIMIT express
1e1e0 69 6f 6e 2e 20 4e 55 4c 4c 20 6d 65 61 6e 73 20  ion. NULL means 
1e1f0 6e 6f 74 20 75 73 65 64 2e 20 2a 2f 0a 20 20 57  not used. */.  W
1e200 69 74 68 20 2a 70 57 69 74 68 3b 20 20 20 20 20  ith *pWith;     
1e210 20 20 20 20 20 20 2f 2a 20 57 49 54 48 20 63 6c        /* WITH cl
1e220 61 75 73 65 20 61 74 74 61 63 68 65 64 20 74 6f  ause attached to
1e230 20 74 68 69 73 20 73 65 6c 65 63 74 2e 20 4f 72   this select. Or
1e240 20 4e 55 4c 4c 2e 20 2a 2f 0a 23 69 66 6e 64 65   NULL. */.#ifnde
1e250 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 49  f SQLITE_OMIT_WI
1e260 4e 44 4f 57 46 55 4e 43 0a 20 20 57 69 6e 64 6f  NDOWFUNC.  Windo
1e270 77 20 2a 70 57 69 6e 3b 20 20 20 20 20 20 20 20  w *pWin;        
1e280 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 77 69 6e    /* List of win
1e290 64 6f 77 20 66 75 6e 63 74 69 6f 6e 73 20 2a 2f  dow functions */
1e2a0 0a 20 20 57 69 6e 64 6f 77 20 2a 70 57 69 6e 44  .  Window *pWinD
1e2b0 65 66 6e 3b 20 20 20 20 20 20 2f 2a 20 4c 69 73  efn;      /* Lis
1e2c0 74 20 6f 66 20 6e 61 6d 65 64 20 77 69 6e 64 6f  t of named windo
1e2d0 77 20 64 65 66 69 6e 69 74 69 6f 6e 73 20 2a 2f  w definitions */
1e2e0 0a 23 65 6e 64 69 66 0a 7d 3b 0a 0a 2f 2a 0a 2a  .#endif.};../*.*
1e2f0 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73  * Allowed values
1e300 20 66 6f 72 20 53 65 6c 65 63 74 2e 73 65 6c 46   for Select.selF
1e310 6c 61 67 73 2e 20 20 54 68 65 20 22 53 46 22 20  lags.  The "SF" 
1e320 70 72 65 66 69 78 20 73 74 61 6e 64 73 20 66 6f  prefix stands fo
1e330 72 0a 2a 2a 20 22 53 65 6c 65 63 74 20 46 6c 61  r.** "Select Fla
1e340 67 22 2e 0a 2a 2a 0a 2a 2a 20 56 61 6c 75 65 20  g"..**.** Value 
1e350 63 6f 6e 73 74 72 61 69 6e 74 73 20 28 61 6c 6c  constraints (all
1e360 20 63 68 65 63 6b 65 64 20 76 69 61 20 61 73 73   checked via ass
1e370 65 72 74 28 29 29 0a 2a 2a 20 20 20 20 20 53 46  ert()).**     SF
1e380 5f 48 61 73 41 67 67 20 20 20 20 20 3d 3d 20 4e  _HasAgg     == N
1e390 43 5f 48 61 73 41 67 67 0a 2a 2a 20 20 20 20 20  C_HasAgg.**     
1e3a0 53 46 5f 4d 69 6e 4d 61 78 41 67 67 20 20 3d 3d  SF_MinMaxAgg  ==
1e3b0 20 4e 43 5f 4d 69 6e 4d 61 78 41 67 67 20 20 20   NC_MinMaxAgg   
1e3c0 20 20 3d 3d 20 53 51 4c 49 54 45 5f 46 55 4e 43    == SQLITE_FUNC
1e3d0 5f 4d 49 4e 4d 41 58 0a 2a 2a 20 20 20 20 20 53  _MINMAX.**     S
1e3e0 46 5f 46 69 78 65 64 4c 69 6d 69 74 20 3d 3d 20  F_FixedLimit == 
1e3f0 57 48 45 52 45 5f 55 53 45 5f 4c 49 4d 49 54 0a  WHERE_USE_LIMIT.
1e400 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 44 69  */.#define SF_Di
1e410 73 74 69 6e 63 74 20 20 20 20 20 20 20 30 78 30  stinct       0x0
1e420 30 30 30 31 20 20 2f 2a 20 4f 75 74 70 75 74 20  0001  /* Output 
1e430 73 68 6f 75 6c 64 20 62 65 20 44 49 53 54 49 4e  should be DISTIN
1e440 43 54 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46  CT */.#define SF
1e450 5f 41 6c 6c 20 20 20 20 20 20 20 20 20 20 20 20  _All            
1e460 30 78 30 30 30 30 32 20 20 2f 2a 20 49 6e 63 6c  0x00002  /* Incl
1e470 75 64 65 73 20 74 68 65 20 41 4c 4c 20 6b 65 79  udes the ALL key
1e480 77 6f 72 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20  word */.#define 
1e490 53 46 5f 52 65 73 6f 6c 76 65 64 20 20 20 20 20  SF_Resolved     
1e4a0 20 20 30 78 30 30 30 30 34 20 20 2f 2a 20 49 64    0x00004  /* Id
1e4b0 65 6e 74 69 66 69 65 72 73 20 68 61 76 65 20 62  entifiers have b
1e4c0 65 65 6e 20 72 65 73 6f 6c 76 65 64 20 2a 2f 0a  een resolved */.
1e4d0 23 64 65 66 69 6e 65 20 53 46 5f 41 67 67 72 65  #define SF_Aggre
1e4e0 67 61 74 65 20 20 20 20 20 20 30 78 30 30 30 30  gate      0x0000
1e4f0 38 20 20 2f 2a 20 43 6f 6e 74 61 69 6e 73 20 61  8  /* Contains a
1e500 67 67 20 66 75 6e 63 74 69 6f 6e 73 20 6f 72 20  gg functions or 
1e510 61 20 47 52 4f 55 50 20 42 59 20 2a 2f 0a 23 64  a GROUP BY */.#d
1e520 65 66 69 6e 65 20 53 46 5f 48 61 73 41 67 67 20  efine SF_HasAgg 
1e530 20 20 20 20 20 20 20 20 30 78 30 30 30 31 30 20          0x00010 
1e540 20 2f 2a 20 43 6f 6e 74 61 69 6e 73 20 61 67 67   /* Contains agg
1e550 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73  regate functions
1e560 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 55   */.#define SF_U
1e570 73 65 73 45 70 68 65 6d 65 72 61 6c 20 20 30 78  sesEphemeral  0x
1e580 30 30 30 32 30 20 20 2f 2a 20 55 73 65 73 20 74  00020  /* Uses t
1e590 68 65 20 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c  he OpenEphemeral
1e5a0 20 6f 70 63 6f 64 65 20 2a 2f 0a 23 64 65 66 69   opcode */.#defi
1e5b0 6e 65 20 53 46 5f 45 78 70 61 6e 64 65 64 20 20  ne SF_Expanded  
1e5c0 20 20 20 20 20 30 78 30 30 30 34 30 20 20 2f 2a       0x00040  /*
1e5d0 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74 45 78   sqlite3SelectEx
1e5e0 70 61 6e 64 28 29 20 63 61 6c 6c 65 64 20 6f 6e  pand() called on
1e5f0 20 74 68 69 73 20 2a 2f 0a 23 64 65 66 69 6e 65   this */.#define
1e600 20 53 46 5f 48 61 73 54 79 70 65 49 6e 66 6f 20   SF_HasTypeInfo 
1e610 20 20 20 30 78 30 30 30 38 30 20 20 2f 2a 20 46     0x00080  /* F
1e620 52 4f 4d 20 73 75 62 71 75 65 72 69 65 73 20 68  ROM subqueries h
1e630 61 76 65 20 54 61 62 6c 65 20 6d 65 74 61 64 61  ave Table metada
1e640 74 61 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46  ta */.#define SF
1e650 5f 43 6f 6d 70 6f 75 6e 64 20 20 20 20 20 20 20  _Compound       
1e660 30 78 30 30 31 30 30 20 20 2f 2a 20 50 61 72 74  0x00100  /* Part
1e670 20 6f 66 20 61 20 63 6f 6d 70 6f 75 6e 64 20 71   of a compound q
1e680 75 65 72 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20  uery */.#define 
1e690 53 46 5f 56 61 6c 75 65 73 20 20 20 20 20 20 20  SF_Values       
1e6a0 20 20 30 78 30 30 32 30 30 20 20 2f 2a 20 53 79    0x00200  /* Sy
1e6b0 6e 74 68 65 73 69 7a 65 64 20 66 72 6f 6d 20 56  nthesized from V
1e6c0 41 4c 55 45 53 20 63 6c 61 75 73 65 20 2a 2f 0a  ALUES clause */.
1e6d0 23 64 65 66 69 6e 65 20 53 46 5f 4d 75 6c 74 69  #define SF_Multi
1e6e0 56 61 6c 75 65 20 20 20 20 20 30 78 30 30 34 30  Value     0x0040
1e6f0 30 20 20 2f 2a 20 53 69 6e 67 6c 65 20 56 41 4c  0  /* Single VAL
1e700 55 45 53 20 74 65 72 6d 20 77 69 74 68 20 6d 75  UES term with mu
1e710 6c 74 69 70 6c 65 20 72 6f 77 73 20 2a 2f 0a 23  ltiple rows */.#
1e720 64 65 66 69 6e 65 20 53 46 5f 4e 65 73 74 65 64  define SF_Nested
1e730 46 72 6f 6d 20 20 20 20 20 30 78 30 30 38 30 30  From     0x00800
1e740 20 20 2f 2a 20 50 61 72 74 20 6f 66 20 61 20 70    /* Part of a p
1e750 61 72 65 6e 74 68 65 73 69 7a 65 64 20 46 52 4f  arenthesized FRO
1e760 4d 20 63 6c 61 75 73 65 20 2a 2f 0a 23 64 65 66  M clause */.#def
1e770 69 6e 65 20 53 46 5f 4d 69 6e 4d 61 78 41 67 67  ine SF_MinMaxAgg
1e780 20 20 20 20 20 20 30 78 30 31 30 30 30 20 20 2f        0x01000  /
1e790 2a 20 41 67 67 72 65 67 61 74 65 20 63 6f 6e 74  * Aggregate cont
1e7a0 61 69 6e 69 6e 67 20 6d 69 6e 28 29 20 6f 72 20  aining min() or 
1e7b0 6d 61 78 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65  max() */.#define
1e7c0 20 53 46 5f 52 65 63 75 72 73 69 76 65 20 20 20   SF_Recursive   
1e7d0 20 20 20 30 78 30 32 30 30 30 20 20 2f 2a 20 54     0x02000  /* T
1e7e0 68 65 20 72 65 63 75 72 73 69 76 65 20 70 61 72  he recursive par
1e7f0 74 20 6f 66 20 61 20 72 65 63 75 72 73 69 76 65  t of a recursive
1e800 20 43 54 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20   CTE */.#define 
1e810 53 46 5f 46 69 78 65 64 4c 69 6d 69 74 20 20 20  SF_FixedLimit   
1e820 20 20 30 78 30 34 30 30 30 20 20 2f 2a 20 6e 53    0x04000  /* nS
1e830 65 6c 65 63 74 52 6f 77 20 73 65 74 20 62 79 20  electRow set by 
1e840 61 20 63 6f 6e 73 74 61 6e 74 20 4c 49 4d 49 54  a constant LIMIT
1e850 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 4d   */.#define SF_M
1e860 61 79 62 65 43 6f 6e 76 65 72 74 20 20 20 30 78  aybeConvert   0x
1e870 30 38 30 30 30 20 20 2f 2a 20 4e 65 65 64 20 63  08000  /* Need c
1e880 6f 6e 76 65 72 74 43 6f 6d 70 6f 75 6e 64 53 65  onvertCompoundSe
1e890 6c 65 63 74 54 6f 53 75 62 71 75 65 72 79 28 29  lectToSubquery()
1e8a0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 43   */.#define SF_C
1e8b0 6f 6e 76 65 72 74 65 64 20 20 20 20 20 20 30 78  onverted      0x
1e8c0 31 30 30 30 30 20 20 2f 2a 20 42 79 20 63 6f 6e  10000  /* By con
1e8d0 76 65 72 74 43 6f 6d 70 6f 75 6e 64 53 65 6c 65  vertCompoundSele
1e8e0 63 74 54 6f 53 75 62 71 75 65 72 79 28 29 20 2a  ctToSubquery() *
1e8f0 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 49 6e 63  /.#define SF_Inc
1e900 6c 75 64 65 48 69 64 64 65 6e 20 20 30 78 32 30  ludeHidden  0x20
1e910 30 30 30 20 20 2f 2a 20 49 6e 63 6c 75 64 65 20  000  /* Include 
1e920 68 69 64 64 65 6e 20 63 6f 6c 75 6d 6e 73 20 69  hidden columns i
1e930 6e 20 6f 75 74 70 75 74 20 2a 2f 0a 23 64 65 66  n output */.#def
1e940 69 6e 65 20 53 46 5f 43 6f 6d 70 6c 65 78 52 65  ine SF_ComplexRe
1e950 73 75 6c 74 20 20 30 78 34 30 30 30 30 20 20 2f  sult  0x40000  /
1e960 2a 20 52 65 73 75 6c 74 20 63 6f 6e 74 61 69 6e  * Result contain
1e970 73 20 73 75 62 71 75 65 72 79 20 6f 72 20 66 75  s subquery or fu
1e980 6e 63 74 69 6f 6e 20 2a 2f 0a 0a 2f 2a 0a 2a 2a  nction */../*.**
1e990 20 54 68 65 20 72 65 73 75 6c 74 73 20 6f 66 20   The results of 
1e9a0 61 20 53 45 4c 45 43 54 20 63 61 6e 20 62 65 20  a SELECT can be 
1e9b0 64 69 73 74 72 69 62 75 74 65 64 20 69 6e 20 73  distributed in s
1e9c0 65 76 65 72 61 6c 20 77 61 79 73 2c 20 61 73 20  everal ways, as 
1e9d0 64 65 66 69 6e 65 64 0a 2a 2a 20 62 79 20 6f 6e  defined.** by on
1e9e0 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69  e of the followi
1e9f0 6e 67 20 6d 61 63 72 6f 73 2e 20 20 54 68 65 20  ng macros.  The 
1ea00 22 53 52 54 22 20 70 72 65 66 69 78 20 6d 65 61  "SRT" prefix mea
1ea10 6e 73 20 22 53 45 4c 45 43 54 20 52 65 73 75 6c  ns "SELECT Resul
1ea20 74 0a 2a 2a 20 54 79 70 65 22 2e 0a 2a 2a 0a 2a  t.** Type"..**.*
1ea30 2a 20 20 20 20 20 53 52 54 5f 55 6e 69 6f 6e 20  *     SRT_Union 
1ea40 20 20 20 20 20 20 53 74 6f 72 65 20 72 65 73 75        Store resu
1ea50 6c 74 73 20 61 73 20 61 20 6b 65 79 20 69 6e 20  lts as a key in 
1ea60 61 20 74 65 6d 70 6f 72 61 72 79 20 69 6e 64 65  a temporary inde
1ea70 78 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  x.**            
1ea80 20 20 20 20 20 20 20 20 20 69 64 65 6e 74 69 66           identif
1ea90 69 65 64 20 62 79 20 70 44 65 73 74 2d 3e 69 53  ied by pDest->iS
1eaa0 44 50 61 72 6d 2e 0a 2a 2a 0a 2a 2a 20 20 20 20  DParm..**.**    
1eab0 20 53 52 54 5f 45 78 63 65 70 74 20 20 20 20 20   SRT_Except     
1eac0 20 52 65 6d 6f 76 65 20 72 65 73 75 6c 74 73 20   Remove results 
1ead0 66 72 6f 6d 20 74 68 65 20 74 65 6d 70 6f 72 61  from the tempora
1eae0 72 79 20 69 6e 64 65 78 20 70 44 65 73 74 2d 3e  ry index pDest->
1eaf0 69 53 44 50 61 72 6d 2e 0a 2a 2a 0a 2a 2a 20 20  iSDParm..**.**  
1eb00 20 20 20 53 52 54 5f 45 78 69 73 74 73 20 20 20     SRT_Exists   
1eb10 20 20 20 53 74 6f 72 65 20 61 20 31 20 69 6e 20     Store a 1 in 
1eb20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 70 44 65 73  memory cell pDes
1eb30 74 2d 3e 69 53 44 50 61 72 6d 20 69 66 20 74 68  t->iSDParm if th
1eb40 65 20 72 65 73 75 6c 74 0a 2a 2a 20 20 20 20 20  e result.**     
1eb50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1eb60 73 65 74 20 69 73 20 6e 6f 74 20 65 6d 70 74 79  set is not empty
1eb70 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f  ..**.**     SRT_
1eb80 44 69 73 63 61 72 64 20 20 20 20 20 54 68 72 6f  Discard     Thro
1eb90 77 20 74 68 65 20 72 65 73 75 6c 74 73 20 61 77  w the results aw
1eba0 61 79 2e 20 20 54 68 69 73 20 69 73 20 75 73 65  ay.  This is use
1ebb0 64 20 62 79 20 53 45 4c 45 43 54 0a 2a 2a 20 20  d by SELECT.**  
1ebc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ebd0 20 20 20 73 74 61 74 65 6d 65 6e 74 73 20 77 69     statements wi
1ebe0 74 68 69 6e 20 74 72 69 67 67 65 72 73 20 77 68  thin triggers wh
1ebf0 6f 73 65 20 6f 6e 6c 79 20 70 75 72 70 6f 73 65  ose only purpose
1ec00 20 69 73 0a 2a 2a 20 20 20 20 20 20 20 20 20 20   is.**          
1ec10 20 20 20 20 20 20 20 20 20 20 20 74 68 65 20 73             the s
1ec20 69 64 65 2d 65 66 66 65 63 74 73 20 6f 66 20 66  ide-effects of f
1ec30 75 6e 63 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20  unctions..**.** 
1ec40 41 6c 6c 20 6f 66 20 74 68 65 20 61 62 6f 76 65  All of the above
1ec50 20 61 72 65 20 66 72 65 65 20 74 6f 20 69 67 6e   are free to ign
1ec60 6f 72 65 20 74 68 65 69 72 20 4f 52 44 45 52 20  ore their ORDER 
1ec70 42 59 20 63 6c 61 75 73 65 2e 20 54 68 6f 73 65  BY clause. Those
1ec80 20 74 68 61 74 0a 2a 2a 20 66 6f 6c 6c 6f 77 20   that.** follow 
1ec90 6d 75 73 74 20 68 6f 6e 6f 72 20 74 68 65 20 4f  must honor the O
1eca0 52 44 45 52 20 42 59 20 63 6c 61 75 73 65 2e 0a  RDER BY clause..
1ecb0 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 4f 75  **.**     SRT_Ou
1ecc0 74 70 75 74 20 20 20 20 20 20 47 65 6e 65 72 61  tput      Genera
1ecd0 74 65 20 61 20 72 6f 77 20 6f 66 20 6f 75 74 70  te a row of outp
1ece0 75 74 20 28 75 73 69 6e 67 20 74 68 65 20 4f 50  ut (using the OP
1ecf0 5f 52 65 73 75 6c 74 52 6f 77 0a 2a 2a 20 20 20  _ResultRow.**   
1ed00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ed10 20 20 6f 70 63 6f 64 65 29 20 66 6f 72 20 65 61    opcode) for ea
1ed20 63 68 20 72 6f 77 20 69 6e 20 74 68 65 20 72 65  ch row in the re
1ed30 73 75 6c 74 20 73 65 74 2e 0a 2a 2a 0a 2a 2a 20  sult set..**.** 
1ed40 20 20 20 20 53 52 54 5f 4d 65 6d 20 20 20 20 20      SRT_Mem     
1ed50 20 20 20 20 4f 6e 6c 79 20 76 61 6c 69 64 20 69      Only valid i
1ed60 66 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20  f the result is 
1ed70 61 20 73 69 6e 67 6c 65 20 63 6f 6c 75 6d 6e 2e  a single column.
1ed80 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
1ed90 20 20 20 20 20 20 20 20 53 74 6f 72 65 20 74 68          Store th
1eda0 65 20 66 69 72 73 74 20 63 6f 6c 75 6d 6e 20 6f  e first column o
1edb0 66 20 74 68 65 20 66 69 72 73 74 20 72 65 73 75  f the first resu
1edc0 6c 74 20 72 6f 77 0a 2a 2a 20 20 20 20 20 20 20  lt row.**       
1edd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e                in
1ede0 20 72 65 67 69 73 74 65 72 20 70 44 65 73 74 2d   register pDest-
1edf0 3e 69 53 44 50 61 72 6d 20 74 68 65 6e 20 61 62  >iSDParm then ab
1ee00 61 6e 64 6f 6e 20 74 68 65 20 72 65 73 74 0a 2a  andon the rest.*
1ee10 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
1ee20 20 20 20 20 20 20 6f 66 20 74 68 65 20 71 75 65        of the que
1ee30 72 79 2e 20 20 54 68 69 73 20 64 65 73 74 69 6e  ry.  This destin
1ee40 61 74 69 6f 6e 20 69 6d 70 6c 69 65 73 20 22 4c  ation implies "L
1ee50 49 4d 49 54 20 31 22 2e 0a 2a 2a 0a 2a 2a 20 20  IMIT 1"..**.**  
1ee60 20 20 20 53 52 54 5f 53 65 74 20 20 20 20 20 20     SRT_Set      
1ee70 20 20 20 54 68 65 20 72 65 73 75 6c 74 20 6d 75     The result mu
1ee80 73 74 20 62 65 20 61 20 73 69 6e 67 6c 65 20 63  st be a single c
1ee90 6f 6c 75 6d 6e 2e 20 20 53 74 6f 72 65 20 65 61  olumn.  Store ea
1eea0 63 68 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  ch.**           
1eeb0 20 20 20 20 20 20 20 20 20 20 72 6f 77 20 6f 66            row of
1eec0 20 72 65 73 75 6c 74 20 61 73 20 74 68 65 20 6b   result as the k
1eed0 65 79 20 69 6e 20 74 61 62 6c 65 20 70 44 65 73  ey in table pDes
1eee0 74 2d 3e 69 53 44 50 61 72 6d 2e 0a 2a 2a 20 20  t->iSDParm..**  
1eef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ef00 20 20 20 41 70 70 6c 79 20 74 68 65 20 61 66 66     Apply the aff
1ef10 69 6e 69 74 79 20 70 44 65 73 74 2d 3e 61 66 66  inity pDest->aff
1ef20 53 64 73 74 20 62 65 66 6f 72 65 20 73 74 6f 72  Sdst before stor
1ef30 69 6e 67 0a 2a 2a 20 20 20 20 20 20 20 20 20 20  ing.**          
1ef40 20 20 20 20 20 20 20 20 20 20 20 72 65 73 75 6c             resul
1ef50 74 73 2e 20 20 55 73 65 64 20 74 6f 20 69 6d 70  ts.  Used to imp
1ef60 6c 65 6d 65 6e 74 20 22 49 4e 20 28 53 45 4c 45  lement "IN (SELE
1ef70 43 54 20 2e 2e 2e 29 22 2e 0a 2a 2a 0a 2a 2a 20  CT ...)"..**.** 
1ef80 20 20 20 20 53 52 54 5f 45 70 68 65 6d 54 61 62      SRT_EphemTab
1ef90 20 20 20 20 43 72 65 61 74 65 20 61 6e 20 74 65      Create an te
1efa0 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 20 70 44  mporary table pD
1efb0 65 73 74 2d 3e 69 53 44 50 61 72 6d 20 61 6e 64  est->iSDParm and
1efc0 20 73 74 6f 72 65 0a 2a 2a 20 20 20 20 20 20 20   store.**       
1efd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
1efe0 65 20 72 65 73 75 6c 74 20 74 68 65 72 65 2e 20  e result there. 
1eff0 54 68 65 20 63 75 72 73 6f 72 20 69 73 20 6c 65  The cursor is le
1f000 66 74 20 6f 70 65 6e 20 61 66 74 65 72 0a 2a 2a  ft open after.**
1f010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f020 20 20 20 20 20 72 65 74 75 72 6e 69 6e 67 2e 20       returning. 
1f030 20 54 68 69 73 20 69 73 20 6c 69 6b 65 20 53 52   This is like SR
1f040 54 5f 54 61 62 6c 65 20 65 78 63 65 70 74 20 74  T_Table except t
1f050 68 61 74 0a 2a 2a 20 20 20 20 20 20 20 20 20 20  hat.**          
1f060 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73 20             this 
1f070 64 65 73 74 69 6e 61 74 69 6f 6e 20 75 73 65 73  destination uses
1f080 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 65 72 61   OP_OpenEphemera
1f090 6c 20 74 6f 20 63 72 65 61 74 65 0a 2a 2a 20 20  l to create.**  
1f0a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f0b0 20 20 20 74 68 65 20 74 61 62 6c 65 20 66 69 72     the table fir
1f0c0 73 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52  st..**.**     SR
1f0d0 54 5f 43 6f 72 6f 75 74 69 6e 65 20 20 20 47 65  T_Coroutine   Ge
1f0e0 6e 65 72 61 74 65 20 61 20 63 6f 2d 72 6f 75 74  nerate a co-rout
1f0f0 69 6e 65 20 74 68 61 74 20 72 65 74 75 72 6e 73  ine that returns
1f100 20 61 20 6e 65 77 20 72 6f 77 20 6f 66 0a 2a 2a   a new row of.**
1f110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f120 20 20 20 20 20 72 65 73 75 6c 74 73 20 65 61 63       results eac
1f130 68 20 74 69 6d 65 20 69 74 20 69 73 20 69 6e 76  h time it is inv
1f140 6f 6b 65 64 2e 20 20 54 68 65 20 65 6e 74 72 79  oked.  The entry
1f150 20 70 6f 69 6e 74 0a 2a 2a 20 20 20 20 20 20 20   point.**       
1f160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6f 66                of
1f170 20 74 68 65 20 63 6f 2d 72 6f 75 74 69 6e 65 20   the co-routine 
1f180 69 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67  is stored in reg
1f190 69 73 74 65 72 20 70 44 65 73 74 2d 3e 69 53 44  ister pDest->iSD
1f1a0 50 61 72 6d 0a 2a 2a 20 20 20 20 20 20 20 20 20  Parm.**         
1f1b0 20 20 20 20 20 20 20 20 20 20 20 20 61 6e 64 20              and 
1f1c0 74 68 65 20 72 65 73 75 6c 74 20 72 6f 77 20 69  the result row i
1f1d0 73 20 73 74 6f 72 65 64 20 69 6e 20 70 44 65 73  s stored in pDes
1f1e0 74 2d 3e 6e 44 65 73 74 20 72 65 67 69 73 74 65  t->nDest registe
1f1f0 72 73 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  rs.**           
1f200 20 20 20 20 20 20 20 20 20 20 73 74 61 72 74 69            starti
1f210 6e 67 20 77 69 74 68 20 70 44 65 73 74 2d 3e 69  ng with pDest->i
1f220 53 64 73 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20  Sdst..**.**     
1f230 53 52 54 5f 54 61 62 6c 65 20 20 20 20 20 20 20  SRT_Table       
1f240 53 74 6f 72 65 20 72 65 73 75 6c 74 73 20 69 6e  Store results in
1f250 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65   temporary table
1f260 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 2e   pDest->iSDParm.
1f270 0a 2a 2a 20 20 20 20 20 53 52 54 5f 46 69 66 6f  .**     SRT_Fifo
1f280 20 20 20 20 20 20 20 20 54 68 69 73 20 69 73 20          This is 
1f290 6c 69 6b 65 20 53 52 54 5f 45 70 68 65 6d 54 61  like SRT_EphemTa
1f2a0 62 20 65 78 63 65 70 74 20 74 68 61 74 20 74 68  b except that th
1f2b0 65 20 74 61 62 6c 65 0a 2a 2a 20 20 20 20 20 20  e table.**      
1f2c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
1f2d0 73 20 61 73 73 75 6d 65 64 20 74 6f 20 61 6c 72  s assumed to alr
1f2e0 65 61 64 79 20 62 65 20 6f 70 65 6e 2e 20 20 53  eady be open.  S
1f2f0 52 54 5f 46 69 66 6f 20 68 61 73 0a 2a 2a 20 20  RT_Fifo has.**  
1f300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f310 20 20 20 74 68 65 20 61 64 64 69 74 69 6f 6e 61     the additiona
1f320 6c 20 70 72 6f 70 65 72 74 79 20 6f 66 20 62 65  l property of be
1f330 69 6e 67 20 61 62 6c 65 20 74 6f 20 69 67 6e 6f  ing able to igno
1f340 72 65 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  re.**           
1f350 20 20 20 20 20 20 20 20 20 20 74 68 65 20 4f 52            the OR
1f360 44 45 52 20 42 59 20 63 6c 61 75 73 65 2e 0a 2a  DER BY clause..*
1f370 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 44 69 73  *.**     SRT_Dis
1f380 74 46 69 66 6f 20 20 20 20 53 74 6f 72 65 20 72  tFifo    Store r
1f390 65 73 75 6c 74 73 20 69 6e 20 61 20 74 65 6d 70  esults in a temp
1f3a0 6f 72 61 72 79 20 74 61 62 6c 65 20 70 44 65 73  orary table pDes
1f3b0 74 2d 3e 69 53 44 50 61 72 6d 2e 0a 2a 2a 20 20  t->iSDParm..**  
1f3c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f3d0 20 20 20 42 75 74 20 61 6c 73 6f 20 75 73 65 20     But also use 
1f3e0 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 20  temporary table 
1f3f0 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 2b 31  pDest->iSDParm+1
1f400 20 61 73 0a 2a 2a 20 20 20 20 20 20 20 20 20 20   as.**          
1f410 20 20 20 20 20 20 20 20 20 20 20 61 20 72 65 63             a rec
1f420 6f 72 64 20 6f 66 20 61 6c 6c 20 70 72 69 6f 72  ord of all prior
1f430 20 72 65 73 75 6c 74 73 20 61 6e 64 20 69 67 6e   results and ign
1f440 6f 72 65 20 61 6e 79 20 64 75 70 6c 69 63 61 74  ore any duplicat
1f450 65 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  e.**            
1f460 20 20 20 20 20 20 20 20 20 72 6f 77 73 2e 20 20           rows.  
1f470 4e 61 6d 65 20 6d 65 61 6e 73 3a 20 20 22 44 69  Name means:  "Di
1f480 73 74 69 6e 63 74 20 46 69 66 6f 22 2e 0a 2a 2a  stinct Fifo"..**
1f490 0a 2a 2a 20 20 20 20 20 53 52 54 5f 51 75 65 75  .**     SRT_Queu
1f4a0 65 20 20 20 20 20 20 20 53 74 6f 72 65 20 72 65  e       Store re
1f4b0 73 75 6c 74 73 20 69 6e 20 70 72 69 6f 72 69 74  sults in priorit
1f4c0 79 20 71 75 65 75 65 20 70 44 65 73 74 2d 3e 69  y queue pDest->i
1f4d0 53 44 50 61 72 6d 20 28 72 65 61 6c 6c 79 0a 2a  SDParm (really.*
1f4e0 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
1f4f0 20 20 20 20 20 20 61 6e 20 69 6e 64 65 78 29 2e        an index).
1f500 20 20 41 70 70 65 6e 64 20 61 20 73 65 71 75 65    Append a seque
1f510 6e 63 65 20 6e 75 6d 62 65 72 20 73 6f 20 74 68  nce number so th
1f520 61 74 20 61 6c 6c 20 65 6e 74 72 69 65 73 0a 2a  at all entries.*
1f530 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
1f540 20 20 20 20 20 20 61 72 65 20 64 69 73 74 69 6e        are distin
1f550 63 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52  ct..**.**     SR
1f560 54 5f 44 69 73 74 51 75 65 75 65 20 20 20 53 74  T_DistQueue   St
1f570 6f 72 65 20 72 65 73 75 6c 74 73 20 69 6e 20 70  ore results in p
1f580 72 69 6f 72 69 74 79 20 71 75 65 75 65 20 70 44  riority queue pD
1f590 65 73 74 2d 3e 69 53 44 50 61 72 6d 20 6f 6e 6c  est->iSDParm onl
1f5a0 79 20 69 66 0a 2a 2a 20 20 20 20 20 20 20 20 20  y if.**         
1f5b0 20 20 20 20 20 20 20 20 20 20 20 20 74 68 65 20              the 
1f5c0 73 61 6d 65 20 72 65 63 6f 72 64 20 68 61 73 20  same record has 
1f5d0 6e 65 76 65 72 20 62 65 65 6e 20 73 74 6f 72 65  never been store
1f5e0 64 20 62 65 66 6f 72 65 2e 20 20 54 68 65 0a 2a  d before.  The.*
1f5f0 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
1f600 20 20 20 20 20 20 69 6e 64 65 78 20 61 74 20 70        index at p
1f610 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 2b 31 20  Dest->iSDParm+1 
1f620 68 6f 6c 64 20 61 6c 6c 20 70 72 69 6f 72 20 73  hold all prior s
1f630 74 6f 72 65 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e  tores..*/.#defin
1f640 65 20 53 52 54 5f 55 6e 69 6f 6e 20 20 20 20 20  e SRT_Union     
1f650 20 20 20 31 20 20 2f 2a 20 53 74 6f 72 65 20 72     1  /* Store r
1f660 65 73 75 6c 74 20 61 73 20 6b 65 79 73 20 69 6e  esult as keys in
1f670 20 61 6e 20 69 6e 64 65 78 20 2a 2f 0a 23 64 65   an index */.#de
1f680 66 69 6e 65 20 53 52 54 5f 45 78 63 65 70 74 20  fine SRT_Except 
1f690 20 20 20 20 20 20 32 20 20 2f 2a 20 52 65 6d 6f        2  /* Remo
1f6a0 76 65 20 72 65 73 75 6c 74 20 66 72 6f 6d 20 61  ve result from a
1f6b0 20 55 4e 49 4f 4e 20 69 6e 64 65 78 20 2a 2f 0a   UNION index */.
1f6c0 23 64 65 66 69 6e 65 20 53 52 54 5f 45 78 69 73  #define SRT_Exis
1f6d0 74 73 20 20 20 20 20 20 20 33 20 20 2f 2a 20 53  ts       3  /* S
1f6e0 74 6f 72 65 20 31 20 69 66 20 74 68 65 20 72 65  tore 1 if the re
1f6f0 73 75 6c 74 20 69 73 20 6e 6f 74 20 65 6d 70 74  sult is not empt
1f700 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54  y */.#define SRT
1f710 5f 44 69 73 63 61 72 64 20 20 20 20 20 20 34 20  _Discard      4 
1f720 20 2f 2a 20 44 6f 20 6e 6f 74 20 73 61 76 65 20   /* Do not save 
1f730 74 68 65 20 72 65 73 75 6c 74 73 20 61 6e 79 77  the results anyw
1f740 68 65 72 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  here */.#define 
1f750 53 52 54 5f 46 69 66 6f 20 20 20 20 20 20 20 20  SRT_Fifo        
1f760 20 35 20 20 2f 2a 20 53 74 6f 72 65 20 72 65 73   5  /* Store res
1f770 75 6c 74 20 61 73 20 64 61 74 61 20 77 69 74 68  ult as data with
1f780 20 61 6e 20 61 75 74 6f 6d 61 74 69 63 20 72 6f   an automatic ro
1f790 77 69 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  wid */.#define S
1f7a0 52 54 5f 44 69 73 74 46 69 66 6f 20 20 20 20 20  RT_DistFifo     
1f7b0 36 20 20 2f 2a 20 4c 69 6b 65 20 53 52 54 5f 46  6  /* Like SRT_F
1f7c0 69 66 6f 2c 20 62 75 74 20 75 6e 69 71 75 65 20  ifo, but unique 
1f7d0 72 65 73 75 6c 74 73 20 6f 6e 6c 79 20 2a 2f 0a  results only */.
1f7e0 23 64 65 66 69 6e 65 20 53 52 54 5f 51 75 65 75  #define SRT_Queu
1f7f0 65 20 20 20 20 20 20 20 20 37 20 20 2f 2a 20 53  e        7  /* S
1f800 74 6f 72 65 20 72 65 73 75 6c 74 20 69 6e 20 61  tore result in a
1f810 6e 20 71 75 65 75 65 20 2a 2f 0a 23 64 65 66 69  n queue */.#defi
1f820 6e 65 20 53 52 54 5f 44 69 73 74 51 75 65 75 65  ne SRT_DistQueue
1f830 20 20 20 20 38 20 20 2f 2a 20 4c 69 6b 65 20 53      8  /* Like S
1f840 52 54 5f 51 75 65 75 65 2c 20 62 75 74 20 75 6e  RT_Queue, but un
1f850 69 71 75 65 20 72 65 73 75 6c 74 73 20 6f 6e 6c  ique results onl
1f860 79 20 2a 2f 0a 0a 2f 2a 20 54 68 65 20 4f 52 44  y */../* The ORD
1f870 45 52 20 42 59 20 63 6c 61 75 73 65 20 69 73 20  ER BY clause is 
1f880 69 67 6e 6f 72 65 64 20 66 6f 72 20 61 6c 6c 20  ignored for all 
1f890 6f 66 20 74 68 65 20 61 62 6f 76 65 20 2a 2f 0a  of the above */.
1f8a0 23 64 65 66 69 6e 65 20 49 67 6e 6f 72 61 62 6c  #define Ignorabl
1f8b0 65 4f 72 64 65 72 62 79 28 58 29 20 28 28 58 2d  eOrderby(X) ((X-
1f8c0 3e 65 44 65 73 74 29 3c 3d 53 52 54 5f 44 69 73  >eDest)<=SRT_Dis
1f8d0 74 51 75 65 75 65 29 0a 0a 23 64 65 66 69 6e 65  tQueue)..#define
1f8e0 20 53 52 54 5f 4f 75 74 70 75 74 20 20 20 20 20   SRT_Output     
1f8f0 20 20 39 20 20 2f 2a 20 4f 75 74 70 75 74 20 65    9  /* Output e
1f900 61 63 68 20 72 6f 77 20 6f 66 20 72 65 73 75 6c  ach row of resul
1f910 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54  t */.#define SRT
1f920 5f 4d 65 6d 20 20 20 20 20 20 20 20 20 31 30 20  _Mem         10 
1f930 20 2f 2a 20 53 74 6f 72 65 20 72 65 73 75 6c 74   /* Store result
1f940 20 69 6e 20 61 20 6d 65 6d 6f 72 79 20 63 65 6c   in a memory cel
1f950 6c 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54  l */.#define SRT
1f960 5f 53 65 74 20 20 20 20 20 20 20 20 20 31 31 20  _Set         11 
1f970 20 2f 2a 20 53 74 6f 72 65 20 72 65 73 75 6c 74   /* Store result
1f980 73 20 61 73 20 6b 65 79 73 20 69 6e 20 61 6e 20  s as keys in an 
1f990 69 6e 64 65 78 20 2a 2f 0a 23 64 65 66 69 6e 65  index */.#define
1f9a0 20 53 52 54 5f 45 70 68 65 6d 54 61 62 20 20 20   SRT_EphemTab   
1f9b0 20 31 32 20 20 2f 2a 20 43 72 65 61 74 65 20 74   12  /* Create t
1f9c0 72 61 6e 73 69 65 6e 74 20 74 61 62 20 61 6e 64  ransient tab and
1f9d0 20 73 74 6f 72 65 20 6c 69 6b 65 20 53 52 54 5f   store like SRT_
1f9e0 54 61 62 6c 65 20 2a 2f 0a 23 64 65 66 69 6e 65  Table */.#define
1f9f0 20 53 52 54 5f 43 6f 72 6f 75 74 69 6e 65 20 20   SRT_Coroutine  
1fa00 20 31 33 20 20 2f 2a 20 47 65 6e 65 72 61 74 65   13  /* Generate
1fa10 20 61 20 73 69 6e 67 6c 65 20 72 6f 77 20 6f 66   a single row of
1fa20 20 72 65 73 75 6c 74 20 2a 2f 0a 23 64 65 66 69   result */.#defi
1fa30 6e 65 20 53 52 54 5f 54 61 62 6c 65 20 20 20 20  ne SRT_Table    
1fa40 20 20 20 31 34 20 20 2f 2a 20 53 74 6f 72 65 20     14  /* Store 
1fa50 72 65 73 75 6c 74 20 61 73 20 64 61 74 61 20 77  result as data w
1fa60 69 74 68 20 61 6e 20 61 75 74 6f 6d 61 74 69 63  ith an automatic
1fa70 20 72 6f 77 69 64 20 2a 2f 0a 0a 2f 2a 0a 2a 2a   rowid */../*.**
1fa80 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20   An instance of 
1fa90 74 68 69 73 20 6f 62 6a 65 63 74 20 64 65 73 63  this object desc
1faa0 72 69 62 65 73 20 77 68 65 72 65 20 74 6f 20 70  ribes where to p
1fab0 75 74 20 6f 66 20 74 68 65 20 72 65 73 75 6c 74  ut of the result
1fac0 73 20 6f 66 0a 2a 2a 20 61 20 53 45 4c 45 43 54  s of.** a SELECT
1fad0 20 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2f 0a 73   statement..*/.s
1fae0 74 72 75 63 74 20 53 65 6c 65 63 74 44 65 73 74  truct SelectDest
1faf0 20 7b 0a 20 20 75 38 20 65 44 65 73 74 3b 20 20   {.  u8 eDest;  
1fb00 20 20 20 20 20 20 20 20 20 20 2f 2a 20 48 6f 77            /* How
1fb10 20 74 6f 20 64 69 73 70 6f 73 65 20 6f 66 20 74   to dispose of t
1fb20 68 65 20 72 65 73 75 6c 74 73 2e 20 20 4f 6e 20  he results.  On 
1fb30 6f 66 20 53 52 54 5f 2a 20 61 62 6f 76 65 2e 20  of SRT_* above. 
1fb40 2a 2f 0a 20 20 69 6e 74 20 69 53 44 50 61 72 6d  */.  int iSDParm
1fb50 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 41 20 70  ;         /* A p
1fb60 61 72 61 6d 65 74 65 72 20 75 73 65 64 20 62 79  arameter used by
1fb70 20 74 68 65 20 65 44 65 73 74 20 64 69 73 70 6f   the eDest dispo
1fb80 73 61 6c 20 6d 65 74 68 6f 64 20 2a 2f 0a 20 20  sal method */.  
1fb90 69 6e 74 20 69 53 64 73 74 3b 20 20 20 20 20 20  int iSdst;      
1fba0 20 20 20 20 20 2f 2a 20 42 61 73 65 20 72 65 67       /* Base reg
1fbb0 69 73 74 65 72 20 77 68 65 72 65 20 72 65 73 75  ister where resu
1fbc0 6c 74 73 20 61 72 65 20 77 72 69 74 74 65 6e 20  lts are written 
1fbd0 2a 2f 0a 20 20 69 6e 74 20 6e 53 64 73 74 3b 20  */.  int nSdst; 
1fbe0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
1fbf0 62 65 72 20 6f 66 20 72 65 67 69 73 74 65 72 73  ber of registers
1fc00 20 61 6c 6c 6f 63 61 74 65 64 20 2a 2f 0a 20 20   allocated */.  
1fc10 63 68 61 72 20 2a 7a 41 66 66 53 64 73 74 3b 20  char *zAffSdst; 
1fc20 20 20 20 20 20 2f 2a 20 41 66 66 69 6e 69 74 79       /* Affinity
1fc30 20 75 73 65 64 20 77 68 65 6e 20 65 44 65 73 74   used when eDest
1fc40 3d 3d 53 52 54 5f 53 65 74 20 2a 2f 0a 20 20 45  ==SRT_Set */.  E
1fc50 78 70 72 4c 69 73 74 20 2a 70 4f 72 64 65 72 42  xprList *pOrderB
1fc60 79 3b 20 20 2f 2a 20 4b 65 79 20 63 6f 6c 75 6d  y;  /* Key colum
1fc70 6e 73 20 66 6f 72 20 53 52 54 5f 51 75 65 75 65  ns for SRT_Queue
1fc80 20 61 6e 64 20 53 52 54 5f 44 69 73 74 51 75 65   and SRT_DistQue
1fc90 75 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  ue */.};../*.** 
1fca0 44 75 72 69 6e 67 20 63 6f 64 65 20 67 65 6e 65  During code gene
1fcb0 72 61 74 69 6f 6e 20 6f 66 20 73 74 61 74 65 6d  ration of statem
1fcc0 65 6e 74 73 20 74 68 61 74 20 64 6f 20 69 6e 73  ents that do ins
1fcd0 65 72 74 73 20 69 6e 74 6f 20 41 55 54 4f 49 4e  erts into AUTOIN
1fce0 43 52 45 4d 45 4e 54 0a 2a 2a 20 74 61 62 6c 65  CREMENT.** table
1fcf0 73 2c 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  s, the following
1fd00 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 69 73 20   information is 
1fd10 61 74 74 61 63 68 65 64 20 74 6f 20 74 68 65 20  attached to the 
1fd20 54 61 62 6c 65 2e 75 2e 61 75 74 6f 49 6e 63 2e  Table.u.autoInc.
1fd30 70 0a 2a 2a 20 70 6f 69 6e 74 65 72 20 6f 66 20  p.** pointer of 
1fd40 65 61 63 68 20 61 75 74 6f 69 6e 63 72 65 6d 65  each autoincreme
1fd50 6e 74 20 74 61 62 6c 65 20 74 6f 20 72 65 63 6f  nt table to reco
1fd60 72 64 20 73 6f 6d 65 20 73 69 64 65 20 69 6e 66  rd some side inf
1fd70 6f 72 6d 61 74 69 6f 6e 20 74 68 61 74 0a 2a 2a  ormation that.**
1fd80 20 74 68 65 20 63 6f 64 65 20 67 65 6e 65 72 61   the code genera
1fd90 74 6f 72 20 6e 65 65 64 73 2e 20 20 57 65 20 68  tor needs.  We h
1fda0 61 76 65 20 74 6f 20 6b 65 65 70 20 70 65 72 2d  ave to keep per-
1fdb0 74 61 62 6c 65 20 61 75 74 6f 69 6e 63 72 65 6d  table autoincrem
1fdc0 65 6e 74 0a 2a 2a 20 69 6e 66 6f 72 6d 61 74 69  ent.** informati
1fdd0 6f 6e 20 69 6e 20 63 61 73 65 20 69 6e 73 65 72  on in case inser
1fde0 74 73 20 61 72 65 20 64 6f 6e 65 20 77 69 74 68  ts are done with
1fdf0 69 6e 20 74 72 69 67 67 65 72 73 2e 20 20 54 72  in triggers.  Tr
1fe00 69 67 67 65 72 73 20 64 6f 20 6e 6f 74 0a 2a 2a  iggers do not.**
1fe10 20 6e 6f 72 6d 61 6c 6c 79 20 63 6f 6f 72 64 69   normally coordi
1fe20 6e 61 74 65 20 74 68 65 69 72 20 61 63 74 69 76  nate their activ
1fe30 69 74 69 65 73 2c 20 62 75 74 20 77 65 20 64 6f  ities, but we do
1fe40 20 6e 65 65 64 20 74 6f 20 63 6f 6f 72 64 69 6e   need to coordin
1fe50 61 74 65 20 74 68 65 0a 2a 2a 20 6c 6f 61 64 69  ate the.** loadi
1fe60 6e 67 20 61 6e 64 20 73 61 76 69 6e 67 20 6f 66  ng and saving of
1fe70 20 61 75 74 6f 69 6e 63 72 65 6d 65 6e 74 20 69   autoincrement i
1fe80 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 73  nformation..*/.s
1fe90 74 72 75 63 74 20 41 75 74 6f 69 6e 63 49 6e 66  truct AutoincInf
1fea0 6f 20 7b 0a 20 20 41 75 74 6f 69 6e 63 49 6e 66  o {.  AutoincInf
1feb0 6f 20 2a 70 4e 65 78 74 3b 20 20 20 2f 2a 20 4e  o *pNext;   /* N
1fec0 65 78 74 20 69 6e 66 6f 20 62 6c 6f 63 6b 20 69  ext info block i
1fed0 6e 20 61 20 6c 69 73 74 20 6f 66 20 74 68 65 6d  n a list of them
1fee0 20 61 6c 6c 20 2a 2f 0a 20 20 54 61 62 6c 65 20   all */.  Table 
1fef0 2a 70 54 61 62 3b 20 20 20 20 20 20 20 20 20 20  *pTab;          
1ff00 2f 2a 20 54 61 62 6c 65 20 74 68 69 73 20 69 6e  /* Table this in
1ff10 66 6f 20 62 6c 6f 63 6b 20 72 65 66 65 72 73 20  fo block refers 
1ff20 74 6f 20 2a 2f 0a 20 20 69 6e 74 20 69 44 62 3b  to */.  int iDb;
1ff30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1ff40 20 49 6e 64 65 78 20 69 6e 20 73 71 6c 69 74 65   Index in sqlite
1ff50 33 2e 61 44 62 5b 5d 20 6f 66 20 64 61 74 61 62  3.aDb[] of datab
1ff60 61 73 65 20 68 6f 6c 64 69 6e 67 20 70 54 61 62  ase holding pTab
1ff70 20 2a 2f 0a 20 20 69 6e 74 20 72 65 67 43 74 72   */.  int regCtr
1ff80 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d  ;           /* M
1ff90 65 6d 6f 72 79 20 72 65 67 69 73 74 65 72 20 68  emory register h
1ffa0 6f 6c 64 69 6e 67 20 74 68 65 20 72 6f 77 69 64  olding the rowid
1ffb0 20 63 6f 75 6e 74 65 72 20 2a 2f 0a 7d 3b 0a 0a   counter */.};..
1ffc0 2f 2a 0a 2a 2a 20 41 74 20 6c 65 61 73 74 20 6f  /*.** At least o
1ffd0 6e 65 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  ne instance of t
1ffe0 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72  he following str
1fff0 75 63 74 75 72 65 20 69 73 20 63 72 65 61 74 65  ucture is create
20000 64 20 66 6f 72 20 65 61 63 68 0a 2a 2a 20 74 72  d for each.** tr
20010 69 67 67 65 72 20 74 68 61 74 20 6d 61 79 20 62  igger that may b
20020 65 20 66 69 72 65 64 20 77 68 69 6c 65 20 70 61  e fired while pa
20030 72 73 69 6e 67 20 61 6e 20 49 4e 53 45 52 54 2c  rsing an INSERT,
20040 20 55 50 44 41 54 45 20 6f 72 20 44 45 4c 45 54   UPDATE or DELET
20050 45 0a 2a 2a 20 73 74 61 74 65 6d 65 6e 74 2e 20  E.** statement. 
20060 41 6c 6c 20 73 75 63 68 20 6f 62 6a 65 63 74 73  All such objects
20070 20 61 72 65 20 73 74 6f 72 65 64 20 69 6e 20 74   are stored in t
20080 68 65 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 68  he linked list h
20090 65 61 64 65 64 20 61 74 0a 2a 2a 20 50 61 72 73  eaded at.** Pars
200a0 65 2e 70 54 72 69 67 67 65 72 50 72 67 20 61 6e  e.pTriggerPrg an
200b0 64 20 64 65 6c 65 74 65 64 20 6f 6e 63 65 20 73  d deleted once s
200c0 74 61 74 65 6d 65 6e 74 20 63 6f 6d 70 69 6c 61  tatement compila
200d0 74 69 6f 6e 20 68 61 73 20 62 65 65 6e 0a 2a 2a  tion has been.**
200e0 20 63 6f 6d 70 6c 65 74 65 64 2e 0a 2a 2a 0a 2a   completed..**.*
200f0 2a 20 41 20 56 64 62 65 20 73 75 62 2d 70 72 6f  * A Vdbe sub-pro
20100 67 72 61 6d 20 74 68 61 74 20 69 6d 70 6c 65 6d  gram that implem
20110 65 6e 74 73 20 74 68 65 20 62 6f 64 79 20 61 6e  ents the body an
20120 64 20 57 48 45 4e 20 63 6c 61 75 73 65 20 6f 66  d WHEN clause of
20130 20 74 72 69 67 67 65 72 0a 2a 2a 20 54 72 69 67   trigger.** Trig
20140 67 65 72 50 72 67 2e 70 54 72 69 67 67 65 72 2c  gerPrg.pTrigger,
20150 20 61 73 73 75 6d 69 6e 67 20 61 20 64 65 66 61   assuming a defa
20160 75 6c 74 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20  ult ON CONFLICT 
20170 63 6c 61 75 73 65 20 6f 66 0a 2a 2a 20 54 72 69  clause of.** Tri
20180 67 67 65 72 50 72 67 2e 6f 72 63 6f 6e 66 2c 20  ggerPrg.orconf, 
20190 69 73 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65  is stored in the
201a0 20 54 72 69 67 67 65 72 50 72 67 2e 70 50 72 6f   TriggerPrg.pPro
201b0 67 72 61 6d 20 76 61 72 69 61 62 6c 65 2e 0a 2a  gram variable..*
201c0 2a 20 54 68 65 20 50 61 72 73 65 2e 70 54 72 69  * The Parse.pTri
201d0 67 67 65 72 50 72 67 20 6c 69 73 74 20 6e 65 76  ggerPrg list nev
201e0 65 72 20 63 6f 6e 74 61 69 6e 73 20 74 77 6f 20  er contains two 
201f0 65 6e 74 72 69 65 73 20 77 69 74 68 20 74 68 65  entries with the
20200 20 73 61 6d 65 0a 2a 2a 20 76 61 6c 75 65 73 20   same.** values 
20210 66 6f 72 20 62 6f 74 68 20 70 54 72 69 67 67 65  for both pTrigge
20220 72 20 61 6e 64 20 6f 72 63 6f 6e 66 2e 0a 2a 2a  r and orconf..**
20230 0a 2a 2a 20 54 68 65 20 54 72 69 67 67 65 72 50  .** The TriggerP
20240 72 67 2e 61 43 6f 6c 6d 61 73 6b 5b 30 5d 20 76  rg.aColmask[0] v
20250 61 72 69 61 62 6c 65 20 69 73 20 73 65 74 20 74  ariable is set t
20260 6f 20 61 20 6d 61 73 6b 20 6f 66 20 6f 6c 64 2e  o a mask of old.
20270 2a 20 63 6f 6c 75 6d 6e 73 0a 2a 2a 20 61 63 63  * columns.** acc
20280 65 73 73 65 64 20 28 6f 72 20 73 65 74 20 74 6f  essed (or set to
20290 20 30 20 66 6f 72 20 74 72 69 67 67 65 72 73 20   0 for triggers 
202a0 66 69 72 65 64 20 61 73 20 61 20 72 65 73 75 6c  fired as a resul
202b0 74 20 6f 66 20 49 4e 53 45 52 54 0a 2a 2a 20 73  t of INSERT.** s
202c0 74 61 74 65 6d 65 6e 74 73 29 2e 20 53 69 6d 69  tatements). Simi
202d0 6c 61 72 6c 79 2c 20 74 68 65 20 54 72 69 67 67  larly, the Trigg
202e0 65 72 50 72 67 2e 61 43 6f 6c 6d 61 73 6b 5b 31  erPrg.aColmask[1
202f0 5d 20 76 61 72 69 61 62 6c 65 20 69 73 20 73 65  ] variable is se
20300 74 20 74 6f 0a 2a 2a 20 61 20 6d 61 73 6b 20 6f  t to.** a mask o
20310 66 20 6e 65 77 2e 2a 20 63 6f 6c 75 6d 6e 73 20  f new.* columns 
20320 75 73 65 64 20 62 79 20 74 68 65 20 70 72 6f 67  used by the prog
20330 72 61 6d 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 54  ram..*/.struct T
20340 72 69 67 67 65 72 50 72 67 20 7b 0a 20 20 54 72  riggerPrg {.  Tr
20350 69 67 67 65 72 20 2a 70 54 72 69 67 67 65 72 3b  igger *pTrigger;
20360 20 20 20 20 20 20 2f 2a 20 54 72 69 67 67 65 72        /* Trigger
20370 20 74 68 69 73 20 70 72 6f 67 72 61 6d 20 77 61   this program wa
20380 73 20 63 6f 64 65 64 20 66 72 6f 6d 20 2a 2f 0a  s coded from */.
20390 20 20 54 72 69 67 67 65 72 50 72 67 20 2a 70 4e    TriggerPrg *pN
203a0 65 78 74 3b 20 20 20 20 20 20 2f 2a 20 4e 65 78  ext;      /* Nex
203b0 74 20 65 6e 74 72 79 20 69 6e 20 50 61 72 73 65  t entry in Parse
203c0 2e 70 54 72 69 67 67 65 72 50 72 67 20 6c 69 73  .pTriggerPrg lis
203d0 74 20 2a 2f 0a 20 20 53 75 62 50 72 6f 67 72 61  t */.  SubProgra
203e0 6d 20 2a 70 50 72 6f 67 72 61 6d 3b 20 20 20 2f  m *pProgram;   /
203f0 2a 20 50 72 6f 67 72 61 6d 20 69 6d 70 6c 65 6d  * Program implem
20400 65 6e 74 69 6e 67 20 70 54 72 69 67 67 65 72 2f  enting pTrigger/
20410 6f 72 63 6f 6e 66 20 2a 2f 0a 20 20 69 6e 74 20  orconf */.  int 
20420 6f 72 63 6f 6e 66 3b 20 20 20 20 20 20 20 20 20  orconf;         
20430 20 20 20 20 2f 2a 20 44 65 66 61 75 6c 74 20 4f      /* Default O
20440 4e 20 43 4f 4e 46 4c 49 43 54 20 70 6f 6c 69 63  N CONFLICT polic
20450 79 20 2a 2f 0a 20 20 75 33 32 20 61 43 6f 6c 6d  y */.  u32 aColm
20460 61 73 6b 5b 32 5d 3b 20 20 20 20 20 20 20 20 2f  ask[2];        /
20470 2a 20 4d 61 73 6b 73 20 6f 66 20 6f 6c 64 2e 2a  * Masks of old.*
20480 2c 20 6e 65 77 2e 2a 20 63 6f 6c 75 6d 6e 73 20  , new.* columns 
20490 61 63 63 65 73 73 65 64 20 2a 2f 0a 7d 3b 0a 0a  accessed */.};..
204a0 2f 2a 0a 2a 2a 20 54 68 65 20 79 44 62 4d 61 73  /*.** The yDbMas
204b0 6b 20 64 61 74 61 74 79 70 65 20 66 6f 72 20 74  k datatype for t
204c0 68 65 20 62 69 74 6d 61 73 6b 20 6f 66 20 61 6c  he bitmask of al
204d0 6c 20 61 74 74 61 63 68 65 64 20 64 61 74 61 62  l attached datab
204e0 61 73 65 73 2e 0a 2a 2f 0a 23 69 66 20 53 51 4c  ases..*/.#if SQL
204f0 49 54 45 5f 4d 41 58 5f 41 54 54 41 43 48 45 44  ITE_MAX_ATTACHED
20500 3e 33 30 0a 20 20 74 79 70 65 64 65 66 20 75 6e  >30.  typedef un
20510 73 69 67 6e 65 64 20 63 68 61 72 20 79 44 62 4d  signed char yDbM
20520 61 73 6b 5b 28 53 51 4c 49 54 45 5f 4d 41 58 5f  ask[(SQLITE_MAX_
20530 41 54 54 41 43 48 45 44 2b 39 29 2f 38 5d 3b 0a  ATTACHED+9)/8];.
20540 23 20 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 54  # define DbMaskT
20550 65 73 74 28 4d 2c 49 29 20 20 20 20 28 28 28 4d  est(M,I)    (((M
20560 29 5b 28 49 29 2f 38 5d 26 28 31 3c 3c 28 28 49  )[(I)/8]&(1<<((I
20570 29 26 37 29 29 29 21 3d 30 29 0a 23 20 64 65 66  )&7)))!=0).# def
20580 69 6e 65 20 44 62 4d 61 73 6b 5a 65 72 6f 28 4d  ine DbMaskZero(M
20590 29 20 20 20 20 20 20 6d 65 6d 73 65 74 28 28 4d  )      memset((M
205a0 29 2c 30 2c 73 69 7a 65 6f 66 28 4d 29 29 0a 23  ),0,sizeof(M)).#
205b0 20 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 53 65   define DbMaskSe
205c0 74 28 4d 2c 49 29 20 20 20 20 20 28 4d 29 5b 28  t(M,I)     (M)[(
205d0 49 29 2f 38 5d 7c 3d 28 31 3c 3c 28 28 49 29 26  I)/8]|=(1<<((I)&
205e0 37 29 29 0a 23 20 64 65 66 69 6e 65 20 44 62 4d  7)).# define DbM
205f0 61 73 6b 41 6c 6c 5a 65 72 6f 28 4d 29 20 20 20  askAllZero(M)   
20600 73 71 6c 69 74 65 33 44 62 4d 61 73 6b 41 6c 6c  sqlite3DbMaskAll
20610 5a 65 72 6f 28 4d 29 0a 23 20 64 65 66 69 6e 65  Zero(M).# define
20620 20 44 62 4d 61 73 6b 4e 6f 6e 5a 65 72 6f 28 4d   DbMaskNonZero(M
20630 29 20 20 20 28 73 71 6c 69 74 65 33 44 62 4d 61  )   (sqlite3DbMa
20640 73 6b 41 6c 6c 5a 65 72 6f 28 4d 29 3d 3d 30 29  skAllZero(M)==0)
20650 0a 23 65 6c 73 65 0a 20 20 74 79 70 65 64 65 66  .#else.  typedef
20660 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 20 79 44   unsigned int yD
20670 62 4d 61 73 6b 3b 0a 23 20 64 65 66 69 6e 65 20  bMask;.# define 
20680 44 62 4d 61 73 6b 54 65 73 74 28 4d 2c 49 29 20  DbMaskTest(M,I) 
20690 20 20 20 28 28 28 4d 29 26 28 28 28 79 44 62 4d     (((M)&(((yDbM
206a0 61 73 6b 29 31 29 3c 3c 28 49 29 29 29 21 3d 30  ask)1)<<(I)))!=0
206b0 29 0a 23 20 64 65 66 69 6e 65 20 44 62 4d 61 73  ).# define DbMas
206c0 6b 5a 65 72 6f 28 4d 29 20 20 20 20 20 20 28 4d  kZero(M)      (M
206d0 29 3d 30 0a 23 20 64 65 66 69 6e 65 20 44 62 4d  )=0.# define DbM
206e0 61 73 6b 53 65 74 28 4d 2c 49 29 20 20 20 20 20  askSet(M,I)     
206f0 28 4d 29 7c 3d 28 28 28 79 44 62 4d 61 73 6b 29  (M)|=(((yDbMask)
20700 31 29 3c 3c 28 49 29 29 0a 23 20 64 65 66 69 6e  1)<<(I)).# defin
20710 65 20 44 62 4d 61 73 6b 41 6c 6c 5a 65 72 6f 28  e DbMaskAllZero(
20720 4d 29 20 20 20 28 4d 29 3d 3d 30 0a 23 20 64 65  M)   (M)==0.# de
20730 66 69 6e 65 20 44 62 4d 61 73 6b 4e 6f 6e 5a 65  fine DbMaskNonZe
20740 72 6f 28 4d 29 20 20 20 28 4d 29 21 3d 30 0a 23  ro(M)   (M)!=0.#
20750 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20  endif../*.** An 
20760 53 51 4c 20 70 61 72 73 65 72 20 63 6f 6e 74 65  SQL parser conte
20770 78 74 2e 20 20 41 20 63 6f 70 79 20 6f 66 20 74  xt.  A copy of t
20780 68 69 73 20 73 74 72 75 63 74 75 72 65 20 69 73  his structure is
20790 20 70 61 73 73 65 64 20 74 68 72 6f 75 67 68 0a   passed through.
207a0 2a 2a 20 74 68 65 20 70 61 72 73 65 72 20 61 6e  ** the parser an
207b0 64 20 64 6f 77 6e 20 69 6e 74 6f 20 61 6c 6c 20  d down into all 
207c0 74 68 65 20 70 61 72 73 65 72 20 61 63 74 69 6f  the parser actio
207d0 6e 20 72 6f 75 74 69 6e 65 20 69 6e 20 6f 72 64  n routine in ord
207e0 65 72 20 74 6f 0a 2a 2a 20 63 61 72 72 79 20 61  er to.** carry a
207f0 72 6f 75 6e 64 20 69 6e 66 6f 72 6d 61 74 69 6f  round informatio
20800 6e 20 74 68 61 74 20 69 73 20 67 6c 6f 62 61 6c  n that is global
20810 20 74 6f 20 74 68 65 20 65 6e 74 69 72 65 20 70   to the entire p
20820 61 72 73 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  arse..**.** The 
20830 73 74 72 75 63 74 75 72 65 20 69 73 20 64 69 76  structure is div
20840 69 64 65 64 20 69 6e 74 6f 20 74 77 6f 20 70 61  ided into two pa
20850 72 74 73 2e 20 20 57 68 65 6e 20 74 68 65 20 70  rts.  When the p
20860 61 72 73 65 72 20 61 6e 64 20 63 6f 64 65 0a 2a  arser and code.*
20870 2a 20 67 65 6e 65 72 61 74 65 20 63 61 6c 6c 20  * generate call 
20880 74 68 65 6d 73 65 6c 76 65 73 20 72 65 63 75 72  themselves recur
20890 73 69 76 65 6c 79 2c 20 74 68 65 20 66 69 72 73  sively, the firs
208a0 74 20 70 61 72 74 20 6f 66 20 74 68 65 20 73 74  t part of the st
208b0 72 75 63 74 75 72 65 0a 2a 2a 20 69 73 20 63 6f  ructure.** is co
208c0 6e 73 74 61 6e 74 20 62 75 74 20 74 68 65 20 73  nstant but the s
208d0 65 63 6f 6e 64 20 70 61 72 74 20 69 73 20 72 65  econd part is re
208e0 73 65 74 20 61 74 20 74 68 65 20 62 65 67 69 6e  set at the begin
208f0 6e 69 6e 67 20 61 6e 64 20 65 6e 64 20 6f 66 0a  ning and end of.
20900 2a 2a 20 65 61 63 68 20 72 65 63 75 72 73 69 6f  ** each recursio
20910 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6e 54 61  n..**.** The nTa
20920 62 6c 65 4c 6f 63 6b 20 61 6e 64 20 61 54 61 62  bleLock and aTab
20930 6c 65 4c 6f 63 6b 20 76 61 72 69 61 62 6c 65 73  leLock variables
20940 20 61 72 65 20 6f 6e 6c 79 20 75 73 65 64 20 69   are only used i
20950 66 20 74 68 65 20 73 68 61 72 65 64 2d 63 61 63  f the shared-cac
20960 68 65 0a 2a 2a 20 66 65 61 74 75 72 65 20 69 73  he.** feature is
20970 20 65 6e 61 62 6c 65 64 20 28 69 66 20 73 71 6c   enabled (if sql
20980 69 74 65 33 54 73 64 28 29 2d 3e 75 73 65 53 68  ite3Tsd()->useSh
20990 61 72 65 64 44 61 74 61 20 69 73 20 74 72 75 65  aredData is true
209a0 29 2e 20 54 68 65 79 20 61 72 65 0a 2a 2a 20 75  ). They are.** u
209b0 73 65 64 20 74 6f 20 73 74 6f 72 65 20 74 68 65  sed to store the
209c0 20 73 65 74 20 6f 66 20 74 61 62 6c 65 2d 6c 6f   set of table-lo
209d0 63 6b 73 20 72 65 71 75 69 72 65 64 20 62 79 20  cks required by 
209e0 74 68 65 20 73 74 61 74 65 6d 65 6e 74 20 62 65  the statement be
209f0 69 6e 67 0a 2a 2a 20 63 6f 6d 70 69 6c 65 64 2e  ing.** compiled.
20a00 20 46 75 6e 63 74 69 6f 6e 20 73 71 6c 69 74 65   Function sqlite
20a10 33 54 61 62 6c 65 4c 6f 63 6b 28 29 20 69 73 20  3TableLock() is 
20a20 75 73 65 64 20 74 6f 20 61 64 64 20 65 6e 74 72  used to add entr
20a30 69 65 73 20 74 6f 20 74 68 65 0a 2a 2a 20 6c 69  ies to the.** li
20a40 73 74 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 50 61  st..*/.struct Pa
20a50 72 73 65 20 7b 0a 20 20 73 71 6c 69 74 65 33 20  rse {.  sqlite3 
20a60 2a 64 62 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  *db;         /* 
20a70 54 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73  The main databas
20a80 65 20 73 74 72 75 63 74 75 72 65 20 2a 2f 0a 20  e structure */. 
20a90 20 63 68 61 72 20 2a 7a 45 72 72 4d 73 67 3b 20   char *zErrMsg; 
20aa0 20 20 20 20 20 20 2f 2a 20 41 6e 20 65 72 72 6f        /* An erro
20ab0 72 20 6d 65 73 73 61 67 65 20 2a 2f 0a 20 20 56  r message */.  V
20ac0 64 62 65 20 2a 70 56 64 62 65 3b 20 20 20 20 20  dbe *pVdbe;     
20ad0 20 20 20 20 2f 2a 20 41 6e 20 65 6e 67 69 6e 65      /* An engine
20ae0 20 66 6f 72 20 65 78 65 63 75 74 69 6e 67 20 64   for executing d
20af0 61 74 61 62 61 73 65 20 62 79 74 65 63 6f 64 65  atabase bytecode
20b00 20 2a 2f 0a 20 20 69 6e 74 20 72 63 3b 20 20 20   */.  int rc;   
20b10 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65             /* Re
20b20 74 75 72 6e 20 63 6f 64 65 20 66 72 6f 6d 20 65  turn code from e
20b30 78 65 63 75 74 69 6f 6e 20 2a 2f 0a 20 20 75 38  xecution */.  u8
20b40 20 63 6f 6c 4e 61 6d 65 73 53 65 74 3b 20 20 20   colNamesSet;   
20b50 20 20 20 2f 2a 20 54 52 55 45 20 61 66 74 65 72     /* TRUE after
20b60 20 4f 50 5f 43 6f 6c 75 6d 6e 4e 61 6d 65 20 68   OP_ColumnName h
20b70 61 73 20 62 65 65 6e 20 69 73 73 75 65 64 20 74  as been issued t
20b80 6f 20 70 56 64 62 65 20 2a 2f 0a 20 20 75 38 20  o pVdbe */.  u8 
20b90 63 68 65 63 6b 53 63 68 65 6d 61 3b 20 20 20 20  checkSchema;    
20ba0 20 20 2f 2a 20 43 61 75 73 65 73 20 73 63 68 65    /* Causes sche
20bb0 6d 61 20 63 6f 6f 6b 69 65 20 63 68 65 63 6b 20  ma cookie check 
20bc0 61 66 74 65 72 20 61 6e 20 65 72 72 6f 72 20 2a  after an error *
20bd0 2f 0a 20 20 75 38 20 6e 65 73 74 65 64 3b 20 20  /.  u8 nested;  
20be0 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
20bf0 65 72 20 6f 66 20 6e 65 73 74 65 64 20 63 61 6c  er of nested cal
20c00 6c 73 20 74 6f 20 74 68 65 20 70 61 72 73 65 72  ls to the parser
20c10 2f 63 6f 64 65 20 67 65 6e 65 72 61 74 6f 72 20  /code generator 
20c20 2a 2f 0a 20 20 75 38 20 6e 54 65 6d 70 52 65 67  */.  u8 nTempReg
20c30 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d  ;         /* Num
20c40 62 65 72 20 6f 66 20 74 65 6d 70 6f 72 61 72 79  ber of temporary
20c50 20 72 65 67 69 73 74 65 72 73 20 69 6e 20 61 54   registers in aT
20c60 65 6d 70 52 65 67 5b 5d 20 2a 2f 0a 20 20 75 38  empReg[] */.  u8
20c70 20 69 73 4d 75 6c 74 69 57 72 69 74 65 3b 20 20   isMultiWrite;  
20c80 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 73 74     /* True if st
20c90 61 74 65 6d 65 6e 74 20 6d 61 79 20 6d 6f 64 69  atement may modi
20ca0 66 79 2f 69 6e 73 65 72 74 20 6d 75 6c 74 69 70  fy/insert multip
20cb0 6c 65 20 72 6f 77 73 20 2a 2f 0a 20 20 75 38 20  le rows */.  u8 
20cc0 6d 61 79 41 62 6f 72 74 3b 20 20 20 20 20 20 20  mayAbort;       
20cd0 20 20 2f 2a 20 54 72 75 65 20 69 66 20 73 74 61    /* True if sta
20ce0 74 65 6d 65 6e 74 20 6d 61 79 20 74 68 72 6f 77  tement may throw
20cf0 20 61 6e 20 41 42 4f 52 54 20 65 78 63 65 70 74   an ABORT except
20d00 69 6f 6e 20 2a 2f 0a 20 20 75 38 20 68 61 73 43  ion */.  u8 hasC
20d10 6f 6d 70 6f 75 6e 64 3b 20 20 20 20 20 20 2f 2a  ompound;      /*
20d20 20 4e 65 65 64 20 74 6f 20 69 6e 76 6f 6b 65 20   Need to invoke 
20d30 63 6f 6e 76 65 72 74 43 6f 6d 70 6f 75 6e 64 53  convertCompoundS
20d40 65 6c 65 63 74 54 6f 53 75 62 71 75 65 72 79 28  electToSubquery(
20d50 29 20 2a 2f 0a 20 20 75 38 20 6f 6b 43 6f 6e 73  ) */.  u8 okCons
20d60 74 46 61 63 74 6f 72 3b 20 20 20 20 2f 2a 20 4f  tFactor;    /* O
20d70 4b 20 74 6f 20 66 61 63 74 6f 72 20 6f 75 74 20  K to factor out 
20d80 63 6f 6e 73 74 61 6e 74 73 20 2a 2f 0a 20 20 75  constants */.  u
20d90 38 20 64 69 73 61 62 6c 65 4c 6f 6f 6b 61 73 69  8 disableLookasi
20da0 64 65 3b 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66  de; /* Number of
20db0 20 74 69 6d 65 73 20 6c 6f 6f 6b 61 73 69 64 65   times lookaside
20dc0 20 68 61 73 20 62 65 65 6e 20 64 69 73 61 62 6c   has been disabl
20dd0 65 64 20 2a 2f 0a 20 20 75 38 20 64 69 73 61 62  ed */.  u8 disab
20de0 6c 65 56 74 61 62 3b 20 20 20 20 20 20 2f 2a 20  leVtab;      /* 
20df0 44 69 73 61 62 6c 65 20 61 6c 6c 20 76 69 72 74  Disable all virt
20e00 75 61 6c 20 74 61 62 6c 65 73 20 66 6f 72 20 74  ual tables for t
20e10 68 69 73 20 70 61 72 73 65 20 2a 2f 0a 20 20 69  his parse */.  i
20e20 6e 74 20 6e 52 61 6e 67 65 52 65 67 3b 20 20 20  nt nRangeReg;   
20e30 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20 74      /* Size of t
20e40 68 65 20 74 65 6d 70 6f 72 61 72 79 20 72 65 67  he temporary reg
20e50 69 73 74 65 72 20 62 6c 6f 63 6b 20 2a 2f 0a 20  ister block */. 
20e60 20 69 6e 74 20 69 52 61 6e 67 65 52 65 67 3b 20   int iRangeReg; 
20e70 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20 72        /* First r
20e80 65 67 69 73 74 65 72 20 69 6e 20 74 65 6d 70 6f  egister in tempo
20e90 72 61 72 79 20 72 65 67 69 73 74 65 72 20 62 6c  rary register bl
20ea0 6f 63 6b 20 2a 2f 0a 20 20 69 6e 74 20 6e 45 72  ock */.  int nEr
20eb0 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  r;            /*
20ec0 20 4e 75 6d 62 65 72 20 6f 66 20 65 72 72 6f 72   Number of error
20ed0 73 20 73 65 65 6e 20 2a 2f 0a 20 20 69 6e 74 20  s seen */.  int 
20ee0 6e 54 61 62 3b 20 20 20 20 20 20 20 20 20 20 20  nTab;           
20ef0 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 70 72   /* Number of pr
20f00 65 76 69 6f 75 73 6c 79 20 61 6c 6c 6f 63 61 74  eviously allocat
20f10 65 64 20 56 44 42 45 20 63 75 72 73 6f 72 73 20  ed VDBE cursors 
20f20 2a 2f 0a 20 20 69 6e 74 20 6e 4d 65 6d 3b 20 20  */.  int nMem;  
20f30 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
20f40 62 65 72 20 6f 66 20 6d 65 6d 6f 72 79 20 63 65  ber of memory ce
20f50 6c 6c 73 20 75 73 65 64 20 73 6f 20 66 61 72 20  lls used so far 
20f60 2a 2f 0a 20 20 69 6e 74 20 73 7a 4f 70 41 6c 6c  */.  int szOpAll
20f70 6f 63 3b 20 20 20 20 20 20 20 2f 2a 20 42 79 74  oc;       /* Byt
20f80 65 73 20 6f 66 20 6d 65 6d 6f 72 79 20 73 70 61  es of memory spa
20f90 63 65 20 61 6c 6c 6f 63 61 74 65 64 20 66 6f 72  ce allocated for
20fa0 20 56 64 62 65 2e 61 4f 70 5b 5d 20 2a 2f 0a 20   Vdbe.aOp[] */. 
20fb0 20 69 6e 74 20 69 53 65 6c 66 54 61 62 3b 20 20   int iSelfTab;  
20fc0 20 20 20 20 20 20 2f 2a 20 54 61 62 6c 65 20 61        /* Table a
20fd0 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 61  ssociated with a
20fe0 6e 20 69 6e 64 65 78 20 6f 6e 20 65 78 70 72 2c  n index on expr,
20ff0 20 6f 72 20 6e 65 67 61 74 69 76 65 0a 20 20 20   or negative.   
21000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21010 20 20 20 20 2a 2a 20 6f 66 20 74 68 65 20 62 61      ** of the ba
21020 73 65 20 72 65 67 69 73 74 65 72 20 64 75 72 69  se register duri
21030 6e 67 20 63 68 65 63 6b 2d 63 6f 6e 73 74 72 61  ng check-constra
21040 69 6e 74 20 65 76 61 6c 20 2a 2f 0a 20 20 69 6e  int eval */.  in
21050 74 20 6e 4c 61 62 65 6c 3b 20 20 20 20 20 20 20  t nLabel;       
21060 20 20 20 2f 2a 20 54 68 65 20 2a 6e 65 67 61 74     /* The *negat
21070 69 76 65 2a 20 6f 66 20 74 68 65 20 6e 75 6d 62  ive* of the numb
21080 65 72 20 6f 66 20 6c 61 62 65 6c 73 20 75 73 65  er of labels use
21090 64 20 2a 2f 0a 20 20 69 6e 74 20 6e 4c 61 62 65  d */.  int nLabe
210a0 6c 41 6c 6c 6f 63 3b 20 20 20 20 20 2f 2a 20 4e  lAlloc;     /* N
210b0 75 6d 62 65 72 20 6f 66 20 73 6c 6f 74 73 20 69  umber of slots i
210c0 6e 20 61 4c 61 62 65 6c 20 2a 2f 0a 20 20 69 6e  n aLabel */.  in
210d0 74 20 2a 61 4c 61 62 65 6c 3b 20 20 20 20 20 20  t *aLabel;      
210e0 20 20 20 2f 2a 20 53 70 61 63 65 20 74 6f 20 68     /* Space to h
210f0 6f 6c 64 20 74 68 65 20 6c 61 62 65 6c 73 20 2a  old the labels *
21100 2f 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70 43  /.  ExprList *pC
21110 6f 6e 73 74 45 78 70 72 3b 2f 2a 20 43 6f 6e 73  onstExpr;/* Cons
21120 74 61 6e 74 20 65 78 70 72 65 73 73 69 6f 6e 73  tant expressions
21130 20 2a 2f 0a 20 20 54 6f 6b 65 6e 20 63 6f 6e 73   */.  Token cons
21140 74 72 61 69 6e 74 4e 61 6d 65 3b 2f 2a 20 4e 61  traintName;/* Na
21150 6d 65 20 6f 66 20 74 68 65 20 63 6f 6e 73 74 72  me of the constr
21160 61 69 6e 74 20 63 75 72 72 65 6e 74 6c 79 20 62  aint currently b
21170 65 69 6e 67 20 70 61 72 73 65 64 20 2a 2f 0a 20  eing parsed */. 
21180 20 79 44 62 4d 61 73 6b 20 77 72 69 74 65 4d 61   yDbMask writeMa
21190 73 6b 3b 20 20 20 2f 2a 20 53 74 61 72 74 20 61  sk;   /* Start a
211a0 20 77 72 69 74 65 20 74 72 61 6e 73 61 63 74 69   write transacti
211b0 6f 6e 20 6f 6e 20 74 68 65 73 65 20 64 61 74 61  on on these data
211c0 62 61 73 65 73 20 2a 2f 0a 20 20 79 44 62 4d 61  bases */.  yDbMa
211d0 73 6b 20 63 6f 6f 6b 69 65 4d 61 73 6b 3b 20 20  sk cookieMask;  
211e0 2f 2a 20 42 69 74 6d 61 73 6b 20 6f 66 20 73 63  /* Bitmask of sc
211f0 68 65 6d 61 20 76 65 72 69 66 69 65 64 20 64 61  hema verified da
21200 74 61 62 61 73 65 73 20 2a 2f 0a 20 20 69 6e 74  tabases */.  int
21210 20 72 65 67 52 6f 77 69 64 3b 20 20 20 20 20 20   regRowid;      
21220 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20 68 6f    /* Register ho
21230 6c 64 69 6e 67 20 72 6f 77 69 64 20 6f 66 20 43  lding rowid of C
21240 52 45 41 54 45 20 54 41 42 4c 45 20 65 6e 74 72  REATE TABLE entr
21250 79 20 2a 2f 0a 20 20 69 6e 74 20 72 65 67 52 6f  y */.  int regRo
21260 6f 74 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 52  ot;         /* R
21270 65 67 69 73 74 65 72 20 68 6f 6c 64 69 6e 67 20  egister holding 
21280 72 6f 6f 74 20 70 61 67 65 20 6e 75 6d 62 65 72  root page number
21290 20 66 6f 72 20 6e 65 77 20 6f 62 6a 65 63 74 73   for new objects
212a0 20 2a 2f 0a 20 20 69 6e 74 20 6e 4d 61 78 41 72   */.  int nMaxAr
212b0 67 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61  g;         /* Ma
212c0 78 20 61 72 67 73 20 70 61 73 73 65 64 20 74 6f  x args passed to
212d0 20 75 73 65 72 20 66 75 6e 63 74 69 6f 6e 20 62   user function b
212e0 79 20 73 75 62 2d 70 72 6f 67 72 61 6d 20 2a 2f  y sub-program */
212f0 0a 20 20 69 6e 74 20 6e 53 65 6c 65 63 74 3b 20  .  int nSelect; 
21300 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
21310 72 20 6f 66 20 53 45 4c 45 43 54 20 73 74 6d 74  r of SELECT stmt
21320 73 2e 20 43 6f 75 6e 74 65 72 20 66 6f 72 20 53  s. Counter for S
21330 65 6c 65 63 74 2e 73 65 6c 49 64 20 2a 2f 0a 23  elect.selId */.#
21340 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
21350 49 54 5f 53 48 41 52 45 44 5f 43 41 43 48 45 0a  IT_SHARED_CACHE.
21360 20 20 69 6e 74 20 6e 54 61 62 6c 65 4c 6f 63 6b    int nTableLock
21370 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62  ;        /* Numb
21380 65 72 20 6f 66 20 6c 6f 63 6b 73 20 69 6e 20 61  er of locks in a
21390 54 61 62 6c 65 4c 6f 63 6b 20 2a 2f 0a 20 20 54  TableLock */.  T
213a0 61 62 6c 65 4c 6f 63 6b 20 2a 61 54 61 62 6c 65  ableLock *aTable
213b0 4c 6f 63 6b 3b 20 2f 2a 20 52 65 71 75 69 72 65  Lock; /* Require
213c0 64 20 74 61 62 6c 65 20 6c 6f 63 6b 73 20 66 6f  d table locks fo
213d0 72 20 73 68 61 72 65 64 2d 63 61 63 68 65 20 6d  r shared-cache m
213e0 6f 64 65 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20  ode */.#endif.  
213f0 41 75 74 6f 69 6e 63 49 6e 66 6f 20 2a 70 41 69  AutoincInfo *pAi
21400 6e 63 3b 20 20 2f 2a 20 49 6e 66 6f 72 6d 61 74  nc;  /* Informat
21410 69 6f 6e 20 61 62 6f 75 74 20 41 55 54 4f 49 4e  ion about AUTOIN
21420 43 52 45 4d 45 4e 54 20 63 6f 75 6e 74 65 72 73  CREMENT counters
21430 20 2a 2f 0a 20 20 50 61 72 73 65 20 2a 70 54 6f   */.  Parse *pTo
21440 70 6c 65 76 65 6c 3b 20 20 20 20 2f 2a 20 50 61  plevel;    /* Pa
21450 72 73 65 20 73 74 72 75 63 74 75 72 65 20 66 6f  rse structure fo
21460 72 20 6d 61 69 6e 20 70 72 6f 67 72 61 6d 20 28  r main program (
21470 6f 72 20 4e 55 4c 4c 29 20 2a 2f 0a 20 20 54 61  or NULL) */.  Ta
21480 62 6c 65 20 2a 70 54 72 69 67 67 65 72 54 61 62  ble *pTriggerTab
21490 3b 20 20 2f 2a 20 54 61 62 6c 65 20 74 72 69 67  ;  /* Table trig
214a0 67 65 72 73 20 61 72 65 20 62 65 69 6e 67 20 63  gers are being c
214b0 6f 64 65 64 20 66 6f 72 20 2a 2f 0a 20 20 69 6e  oded for */.  in
214c0 74 20 61 64 64 72 43 72 54 61 62 3b 20 20 20 20  t addrCrTab;    
214d0 20 20 20 2f 2a 20 41 64 64 72 65 73 73 20 6f 66     /* Address of
214e0 20 4f 50 5f 43 72 65 61 74 65 42 74 72 65 65 20   OP_CreateBtree 
214f0 6f 70 63 6f 64 65 20 6f 6e 20 43 52 45 41 54 45  opcode on CREATE
21500 20 54 41 42 4c 45 20 2a 2f 0a 20 20 75 33 32 20   TABLE */.  u32 
21510 6e 51 75 65 72 79 4c 6f 6f 70 3b 20 20 20 20 20  nQueryLoop;     
21520 20 2f 2a 20 45 73 74 20 6e 75 6d 62 65 72 20 6f   /* Est number o
21530 66 20 69 74 65 72 61 74 69 6f 6e 73 20 6f 66 20  f iterations of 
21540 61 20 71 75 65 72 79 20 28 31 30 2a 6c 6f 67 32  a query (10*log2
21550 28 4e 29 29 20 2a 2f 0a 20 20 75 33 32 20 6f 6c  (N)) */.  u32 ol
21560 64 6d 61 73 6b 3b 20 20 20 20 20 20 20 20 20 2f  dmask;         /
21570 2a 20 4d 61 73 6b 20 6f 66 20 6f 6c 64 2e 2a 20  * Mask of old.* 
21580 63 6f 6c 75 6d 6e 73 20 72 65 66 65 72 65 6e 63  columns referenc
21590 65 64 20 2a 2f 0a 20 20 75 33 32 20 6e 65 77 6d  ed */.  u32 newm
215a0 61 73 6b 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  ask;         /* 
215b0 4d 61 73 6b 20 6f 66 20 6e 65 77 2e 2a 20 63 6f  Mask of new.* co
215c0 6c 75 6d 6e 73 20 72 65 66 65 72 65 6e 63 65 64  lumns referenced
215d0 20 2a 2f 0a 20 20 75 38 20 65 54 72 69 67 67 65   */.  u8 eTrigge
215e0 72 4f 70 3b 20 20 20 20 20 20 20 2f 2a 20 54 4b  rOp;       /* TK
215f0 5f 55 50 44 41 54 45 2c 20 54 4b 5f 49 4e 53 45  _UPDATE, TK_INSE
21600 52 54 20 6f 72 20 54 4b 5f 44 45 4c 45 54 45 20  RT or TK_DELETE 
21610 2a 2f 0a 20 20 75 38 20 65 4f 72 63 6f 6e 66 3b  */.  u8 eOrconf;
21620 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 65 66            /* Def
21630 61 75 6c 74 20 4f 4e 20 43 4f 4e 46 4c 49 43 54  ault ON CONFLICT
21640 20 70 6f 6c 69 63 79 20 66 6f 72 20 74 72 69 67   policy for trig
21650 67 65 72 20 73 74 65 70 73 20 2a 2f 0a 20 20 75  ger steps */.  u
21660 38 20 64 69 73 61 62 6c 65 54 72 69 67 67 65 72  8 disableTrigger
21670 73 3b 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 64  s;  /* True to d
21680 69 73 61 62 6c 65 20 74 72 69 67 67 65 72 73 20  isable triggers 
21690 2a 2f 0a 0a 20 20 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a  */..  /*********
216a0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
216b0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
216c0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
216d0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
216e0 2a 0a 20 20 2a 2a 20 46 69 65 6c 64 73 20 61 62  *.  ** Fields ab
216f0 6f 76 65 20 6d 75 73 74 20 62 65 20 69 6e 69 74  ove must be init
21700 69 61 6c 69 7a 65 64 20 74 6f 20 7a 65 72 6f 2e  ialized to zero.
21710 20 20 54 68 65 20 66 69 65 6c 64 73 20 74 68 61    The fields tha
21720 74 20 66 6f 6c 6c 6f 77 2c 0a 20 20 2a 2a 20 64  t follow,.  ** d
21730 6f 77 6e 20 74 6f 20 74 68 65 20 62 65 67 69 6e  own to the begin
21740 6e 69 6e 67 20 6f 66 20 74 68 65 20 72 65 63 75  ning of the recu
21750 72 73 69 76 65 20 73 65 63 74 69 6f 6e 2c 20 64  rsive section, d
21760 6f 20 6e 6f 74 20 6e 65 65 64 20 74 6f 20 62 65  o not need to be
21770 0a 20 20 2a 2a 20 69 6e 69 74 69 61 6c 69 7a 65  .  ** initialize
21780 64 20 61 73 20 74 68 65 79 20 77 69 6c 6c 20 62  d as they will b
21790 65 20 73 65 74 20 62 65 66 6f 72 65 20 62 65 69  e set before bei
217a0 6e 67 20 75 73 65 64 2e 20 20 54 68 65 20 62 6f  ng used.  The bo
217b0 75 6e 64 61 72 79 20 69 73 0a 20 20 2a 2a 20 64  undary is.  ** d
217c0 65 74 65 72 6d 69 6e 65 64 20 62 79 20 6f 66 66  etermined by off
217d0 73 65 74 6f 66 28 50 61 72 73 65 2c 61 54 65 6d  setof(Parse,aTem
217e0 70 52 65 67 29 2e 0a 20 20 2a 2a 2a 2a 2a 2a 2a  pReg)..  *******
217f0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21800 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21810 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21820 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21830 2a 2a 2a 2f 0a 0a 20 20 69 6e 74 20 61 54 65 6d  ***/..  int aTem
21840 70 52 65 67 5b 38 5d 3b 20 20 20 20 20 20 20 20  pReg[8];        
21850 2f 2a 20 48 6f 6c 64 69 6e 67 20 61 72 65 61 20  /* Holding area 
21860 66 6f 72 20 74 65 6d 70 6f 72 61 72 79 20 72 65  for temporary re
21870 67 69 73 74 65 72 73 20 2a 2f 0a 20 20 54 6f 6b  gisters */.  Tok
21880 65 6e 20 73 4e 61 6d 65 54 6f 6b 65 6e 3b 20 20  en sNameToken;  
21890 20 20 20 20 20 2f 2a 20 54 6f 6b 65 6e 20 77 69       /* Token wi
218a0 74 68 20 75 6e 71 75 61 6c 69 66 69 65 64 20 73  th unqualified s
218b0 63 68 65 6d 61 20 6f 62 6a 65 63 74 20 6e 61 6d  chema object nam
218c0 65 20 2a 2f 0a 0a 20 20 2f 2a 2a 2a 2a 2a 2a 2a  e */..  /*******
218d0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
218e0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
218f0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21900 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21910 2a 0a 20 20 2a 2a 20 41 62 6f 76 65 20 69 73 20  *.  ** Above is 
21920 63 6f 6e 73 74 61 6e 74 20 62 65 74 77 65 65 6e  constant between
21930 20 72 65 63 75 72 73 69 6f 6e 73 2e 20 20 42 65   recursions.  Be
21940 6c 6f 77 20 69 73 20 72 65 73 65 74 20 62 65 66  low is reset bef
21950 6f 72 65 20 61 6e 64 20 61 66 74 65 72 0a 20 20  ore and after.  
21960 2a 2a 20 65 61 63 68 20 72 65 63 75 72 73 69 6f  ** each recursio
21970 6e 2e 20 20 54 68 65 20 62 6f 75 6e 64 61 72 79  n.  The boundary
21980 20 62 65 74 77 65 65 6e 20 74 68 65 73 65 20 74   between these t
21990 77 6f 20 72 65 67 69 6f 6e 73 20 69 73 20 64 65  wo regions is de
219a0 74 65 72 6d 69 6e 65 64 0a 20 20 2a 2a 20 75 73  termined.  ** us
219b0 69 6e 67 20 6f 66 66 73 65 74 6f 66 28 50 61 72  ing offsetof(Par
219c0 73 65 2c 73 4c 61 73 74 54 6f 6b 65 6e 29 20 73  se,sLastToken) s
219d0 6f 20 74 68 65 20 73 4c 61 73 74 54 6f 6b 65 6e  o the sLastToken
219e0 20 66 69 65 6c 64 20 6d 75 73 74 20 62 65 20 74   field must be t
219f0 68 65 0a 20 20 2a 2a 20 66 69 72 73 74 20 66 69  he.  ** first fi
21a00 65 6c 64 20 69 6e 20 74 68 65 20 72 65 63 75 72  eld in the recur
21a10 73 69 76 65 20 72 65 67 69 6f 6e 2e 0a 20 20 2a  sive region..  *
21a20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21a30 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21a40 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21a50 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21a60 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 20 20 54 6f 6b 65  *******/..  Toke
21a70 6e 20 73 4c 61 73 74 54 6f 6b 65 6e 3b 20 20 20  n sLastToken;   
21a80 20 20 20 20 2f 2a 20 54 68 65 20 6c 61 73 74 20      /* The last 
21a90 74 6f 6b 65 6e 20 70 61 72 73 65 64 20 2a 2f 0a  token parsed */.
21aa0 20 20 79 6e 56 61 72 20 6e 56 61 72 3b 20 20 20    ynVar nVar;   
21ab0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
21ac0 75 6d 62 65 72 20 6f 66 20 27 3f 27 20 76 61 72  umber of '?' var
21ad0 69 61 62 6c 65 73 20 73 65 65 6e 20 69 6e 20 74  iables seen in t
21ae0 68 65 20 53 51 4c 20 73 6f 20 66 61 72 20 2a 2f  he SQL so far */
21af0 0a 20 20 75 38 20 69 50 6b 53 6f 72 74 4f 72 64  .  u8 iPkSortOrd
21b00 65 72 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  er;          /* 
21b10 41 53 43 20 6f 72 20 44 45 53 43 20 66 6f 72 20  ASC or DESC for 
21b20 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20  INTEGER PRIMARY 
21b30 4b 45 59 20 2a 2f 0a 20 20 75 38 20 65 78 70 6c  KEY */.  u8 expl
21b40 61 69 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20  ain;            
21b50 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 74 68     /* True if th
21b60 65 20 45 58 50 4c 41 49 4e 20 66 6c 61 67 20 69  e EXPLAIN flag i
21b70 73 20 66 6f 75 6e 64 20 6f 6e 20 74 68 65 20 71  s found on the q
21b80 75 65 72 79 20 2a 2f 0a 23 69 66 20 21 28 64 65  uery */.#if !(de
21b90 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49  fined(SQLITE_OMI
21ba0 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 29 20  T_VIRTUALTABLE) 
21bb0 26 26 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  && defined(SQLIT
21bc0 45 5f 4f 4d 49 54 5f 41 4c 54 45 52 54 41 42 4c  E_OMIT_ALTERTABL
21bd0 45 29 29 0a 20 20 75 38 20 65 50 61 72 73 65 4d  E)).  u8 eParseM
21be0 6f 64 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ode;            
21bf0 2f 2a 20 50 41 52 53 45 5f 4d 4f 44 45 5f 58 58  /* PARSE_MODE_XX
21c00 58 20 63 6f 6e 73 74 61 6e 74 20 2a 2f 0a 23 65  X constant */.#e
21c10 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c  ndif.#ifndef SQL
21c20 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
21c30 54 41 42 4c 45 0a 20 20 69 6e 74 20 6e 56 74 61  TABLE.  int nVta
21c40 62 4c 6f 63 6b 3b 20 20 20 20 20 20 20 20 20 20  bLock;          
21c50 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 76    /* Number of v
21c60 69 72 74 75 61 6c 20 74 61 62 6c 65 73 20 74 6f  irtual tables to
21c70 20 6c 6f 63 6b 20 2a 2f 0a 23 65 6e 64 69 66 0a   lock */.#endif.
21c80 20 20 69 6e 74 20 6e 48 65 69 67 68 74 3b 20 20    int nHeight;  
21c90 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 45              /* E
21ca0 78 70 72 65 73 73 69 6f 6e 20 74 72 65 65 20 68  xpression tree h
21cb0 65 69 67 68 74 20 6f 66 20 63 75 72 72 65 6e 74  eight of current
21cc0 20 73 75 62 2d 73 65 6c 65 63 74 20 2a 2f 0a 23   sub-select */.#
21cd0 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
21ce0 49 54 5f 45 58 50 4c 41 49 4e 0a 20 20 69 6e 74  IT_EXPLAIN.  int
21cf0 20 61 64 64 72 45 78 70 6c 61 69 6e 3b 20 20 20   addrExplain;   
21d00 20 20 20 20 20 20 20 2f 2a 20 41 64 64 72 65 73         /* Addres
21d10 73 20 6f 66 20 63 75 72 72 65 6e 74 20 4f 50 5f  s of current OP_
21d20 45 78 70 6c 61 69 6e 20 6f 70 63 6f 64 65 20 2a  Explain opcode *
21d30 2f 0a 23 65 6e 64 69 66 0a 20 20 56 4c 69 73 74  /.#endif.  VList
21d40 20 2a 70 56 4c 69 73 74 3b 20 20 20 20 20 20 20   *pVList;       
21d50 20 20 20 20 20 2f 2a 20 4d 61 70 70 69 6e 67 20       /* Mapping 
21d60 62 65 74 77 65 65 6e 20 76 61 72 69 61 62 6c 65  between variable
21d70 20 6e 61 6d 65 73 20 61 6e 64 20 6e 75 6d 62 65   names and numbe
21d80 72 73 20 2a 2f 0a 20 20 56 64 62 65 20 2a 70 52  rs */.  Vdbe *pR
21d90 65 70 72 65 70 61 72 65 3b 20 20 20 20 20 20 20  eprepare;       
21da0 20 20 2f 2a 20 56 4d 20 62 65 69 6e 67 20 72 65    /* VM being re
21db0 70 72 65 70 61 72 65 64 20 28 73 71 6c 69 74 65  prepared (sqlite
21dc0 33 52 65 70 72 65 70 61 72 65 28 29 29 20 2a 2f  3Reprepare()) */
21dd0 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  .  const char *z
21de0 54 61 69 6c 3b 20 20 20 20 20 20 20 20 2f 2a 20  Tail;        /* 
21df0 41 6c 6c 20 53 51 4c 20 74 65 78 74 20 70 61 73  All SQL text pas
21e00 74 20 74 68 65 20 6c 61 73 74 20 73 65 6d 69 63  t the last semic
21e10 6f 6c 6f 6e 20 70 61 72 73 65 64 20 2a 2f 0a 20  olon parsed */. 
21e20 20 54 61 62 6c 65 20 2a 70 4e 65 77 54 61 62 6c   Table *pNewTabl
21e30 65 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 41 20  e;         /* A 
21e40 74 61 62 6c 65 20 62 65 69 6e 67 20 63 6f 6e 73  table being cons
21e50 74 72 75 63 74 65 64 20 62 79 20 43 52 45 41 54  tructed by CREAT
21e60 45 20 54 41 42 4c 45 20 2a 2f 0a 20 20 49 6e 64  E TABLE */.  Ind
21e70 65 78 20 2a 70 4e 65 77 49 6e 64 65 78 3b 20 20  ex *pNewIndex;  
21e80 20 20 20 20 20 20 20 2f 2a 20 41 6e 20 69 6e 64         /* An ind
21e90 65 78 20 62 65 69 6e 67 20 63 6f 6e 73 74 72 75  ex being constru
21ea0 63 74 65 64 20 62 79 20 43 52 45 41 54 45 20 49  cted by CREATE I
21eb0 4e 44 45 58 2e 0a 20 20 20 20 20 20 20 20 20 20  NDEX..          
21ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21ed0 20 20 2a 2a 20 41 6c 73 6f 20 75 73 65 64 20 74    ** Also used t
21ee0 6f 20 68 6f 6c 64 20 72 65 64 75 6e 64 61 6e 74  o hold redundant
21ef0 20 55 4e 49 51 55 45 20 63 6f 6e 73 74 72 61 69   UNIQUE constrai
21f00 6e 74 73 0a 20 20 20 20 20 20 20 20 20 20 20 20  nts.            
21f10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21f20 2a 2a 20 64 75 72 69 6e 67 20 61 20 52 45 4e 41  ** during a RENA
21f30 4d 45 20 43 4f 4c 55 4d 4e 20 2a 2f 0a 20 20 54  ME COLUMN */.  T
21f40 72 69 67 67 65 72 20 2a 70 4e 65 77 54 72 69 67  rigger *pNewTrig
21f50 67 65 72 3b 20 20 20 20 20 2f 2a 20 54 72 69 67  ger;     /* Trig
21f60 67 65 72 20 75 6e 64 65 72 20 63 6f 6e 73 74 72  ger under constr
21f70 75 63 74 20 62 79 20 61 20 43 52 45 41 54 45 20  uct by a CREATE 
21f80 54 52 49 47 47 45 52 20 2a 2f 0a 20 20 63 6f 6e  TRIGGER */.  con
21f90 73 74 20 63 68 61 72 20 2a 7a 41 75 74 68 43 6f  st char *zAuthCo
21fa0 6e 74 65 78 74 3b 20 2f 2a 20 54 68 65 20 36 74  ntext; /* The 6t
21fb0 68 20 70 61 72 61 6d 65 74 65 72 20 74 6f 20 64  h parameter to d
21fc0 62 2d 3e 78 41 75 74 68 20 63 61 6c 6c 62 61 63  b->xAuth callbac
21fd0 6b 73 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51  ks */.#ifndef SQ
21fe0 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
21ff0 4c 54 41 42 4c 45 0a 20 20 54 6f 6b 65 6e 20 73  LTABLE.  Token s
22000 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20  Arg;            
22010 20 20 20 2f 2a 20 43 6f 6d 70 6c 65 74 65 20 74     /* Complete t
22020 65 78 74 20 6f 66 20 61 20 6d 6f 64 75 6c 65 20  ext of a module 
22030 61 72 67 75 6d 65 6e 74 20 2a 2f 0a 20 20 54 61  argument */.  Ta
22040 62 6c 65 20 2a 2a 61 70 56 74 61 62 4c 6f 63 6b  ble **apVtabLock
22050 3b 20 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74  ;       /* Point
22060 65 72 20 74 6f 20 76 69 72 74 75 61 6c 20 74 61  er to virtual ta
22070 62 6c 65 73 20 6e 65 65 64 69 6e 67 20 6c 6f 63  bles needing loc
22080 6b 69 6e 67 20 2a 2f 0a 23 65 6e 64 69 66 0a 20  king */.#endif. 
22090 20 54 61 62 6c 65 20 2a 70 5a 6f 6d 62 69 65 54   Table *pZombieT
220a0 61 62 3b 20 20 20 20 20 20 20 20 2f 2a 20 4c 69  ab;        /* Li
220b0 73 74 20 6f 66 20 54 61 62 6c 65 20 6f 62 6a 65  st of Table obje
220c0 63 74 73 20 74 6f 20 64 65 6c 65 74 65 20 61 66  cts to delete af
220d0 74 65 72 20 63 6f 64 65 20 67 65 6e 20 2a 2f 0a  ter code gen */.
220e0 20 20 54 72 69 67 67 65 72 50 72 67 20 2a 70 54    TriggerPrg *pT
220f0 72 69 67 67 65 72 50 72 67 3b 20 20 2f 2a 20 4c  riggerPrg;  /* L
22100 69 6e 6b 65 64 20 6c 69 73 74 20 6f 66 20 63 6f  inked list of co
22110 64 65 64 20 74 72 69 67 67 65 72 73 20 2a 2f 0a  ded triggers */.
22120 20 20 57 69 74 68 20 2a 70 57 69 74 68 3b 20 20    With *pWith;  
22130 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43              /* C
22140 75 72 72 65 6e 74 20 57 49 54 48 20 63 6c 61 75  urrent WITH clau
22150 73 65 2c 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 20  se, or NULL */. 
22160 20 57 69 74 68 20 2a 70 57 69 74 68 54 6f 46 72   With *pWithToFr
22170 65 65 3b 20 20 20 20 20 20 20 20 2f 2a 20 46 72  ee;        /* Fr
22180 65 65 20 74 68 69 73 20 57 49 54 48 20 6f 62 6a  ee this WITH obj
22190 65 63 74 20 61 74 20 74 68 65 20 65 6e 64 20 6f  ect at the end o
221a0 66 20 74 68 65 20 70 61 72 73 65 20 2a 2f 0a 23  f the parse */.#
221b0 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
221c0 49 54 5f 41 4c 54 45 52 54 41 42 4c 45 0a 20 20  IT_ALTERTABLE.  
221d0 52 65 6e 61 6d 65 54 6f 6b 65 6e 20 2a 70 52 65  RenameToken *pRe
221e0 6e 61 6d 65 3b 20 20 20 20 20 2f 2a 20 54 6f 6b  name;     /* Tok
221f0 65 6e 73 20 73 75 62 6a 65 63 74 20 74 6f 20 72  ens subject to r
22200 65 6e 61 6d 69 6e 67 20 62 79 20 41 4c 54 45 52  enaming by ALTER
22210 20 54 41 42 4c 45 20 2a 2f 0a 23 65 6e 64 69 66   TABLE */.#endif
22220 0a 7d 3b 0a 0a 23 64 65 66 69 6e 65 20 50 41 52  .};..#define PAR
22230 53 45 5f 4d 4f 44 45 5f 4e 4f 52 4d 41 4c 20 20  SE_MODE_NORMAL  
22240 20 20 20 20 20 20 30 0a 23 64 65 66 69 6e 65 20        0.#define 
22250 50 41 52 53 45 5f 4d 4f 44 45 5f 44 45 43 4c 41  PARSE_MODE_DECLA
22260 52 45 5f 56 54 41 42 20 20 31 0a 23 64 65 66 69  RE_VTAB  1.#defi
22270 6e 65 20 50 41 52 53 45 5f 4d 4f 44 45 5f 52 45  ne PARSE_MODE_RE
22280 4e 41 4d 45 5f 43 4f 4c 55 4d 4e 20 32 0a 23 64  NAME_COLUMN 2.#d
22290 65 66 69 6e 65 20 50 41 52 53 45 5f 4d 4f 44 45  efine PARSE_MODE
222a0 5f 52 45 4e 41 4d 45 5f 54 41 42 4c 45 20 20 33  _RENAME_TABLE  3
222b0 0a 0a 2f 2a 0a 2a 2a 20 53 69 7a 65 73 20 61 6e  ../*.** Sizes an
222c0 64 20 70 6f 69 6e 74 65 72 73 20 6f 66 20 76 61  d pointers of va
222d0 72 69 6f 75 73 20 70 61 72 74 73 20 6f 66 20 74  rious parts of t
222e0 68 65 20 50 61 72 73 65 20 6f 62 6a 65 63 74 2e  he Parse object.
222f0 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 50 41 52 53  .*/.#define PARS
22300 45 5f 48 44 52 5f 53 5a 20 6f 66 66 73 65 74 6f  E_HDR_SZ offseto
22310 66 28 50 61 72 73 65 2c 61 54 65 6d 70 52 65 67  f(Parse,aTempReg
22320 29 20 2f 2a 20 52 65 63 75 72 73 69 76 65 20 70  ) /* Recursive p
22330 61 72 74 20 77 2f 6f 20 61 43 6f 6c 43 61 63 68  art w/o aColCach
22340 65 2a 2f 0a 23 64 65 66 69 6e 65 20 50 41 52 53  e*/.#define PARS
22350 45 5f 52 45 43 55 52 53 45 5f 53 5a 20 6f 66 66  E_RECURSE_SZ off
22360 73 65 74 6f 66 28 50 61 72 73 65 2c 73 4c 61 73  setof(Parse,sLas
22370 74 54 6f 6b 65 6e 29 20 20 20 20 2f 2a 20 52 65  tToken)    /* Re
22380 63 75 72 73 69 76 65 20 70 61 72 74 20 2a 2f 0a  cursive part */.
22390 23 64 65 66 69 6e 65 20 50 41 52 53 45 5f 54 41  #define PARSE_TA
223a0 49 4c 5f 53 5a 20 28 73 69 7a 65 6f 66 28 50 61  IL_SZ (sizeof(Pa
223b0 72 73 65 29 2d 50 41 52 53 45 5f 52 45 43 55 52  rse)-PARSE_RECUR
223c0 53 45 5f 53 5a 29 20 2f 2a 20 4e 6f 6e 2d 72 65  SE_SZ) /* Non-re
223d0 63 75 72 73 69 76 65 20 70 61 72 74 20 2a 2f 0a  cursive part */.
223e0 23 64 65 66 69 6e 65 20 50 41 52 53 45 5f 54 41  #define PARSE_TA
223f0 49 4c 28 58 29 20 28 28 28 63 68 61 72 2a 29 28  IL(X) (((char*)(
22400 58 29 29 2b 50 41 52 53 45 5f 52 45 43 55 52 53  X))+PARSE_RECURS
22410 45 5f 53 5a 29 20 20 2f 2a 20 50 6f 69 6e 74 65  E_SZ)  /* Pointe
22420 72 20 74 6f 20 74 61 69 6c 20 2a 2f 0a 0a 2f 2a  r to tail */../*
22430 0a 2a 2a 20 52 65 74 75 72 6e 20 74 72 75 65 20  .** Return true 
22440 69 66 20 63 75 72 72 65 6e 74 6c 79 20 69 6e 73  if currently ins
22450 69 64 65 20 61 6e 20 73 71 6c 69 74 65 33 5f 64  ide an sqlite3_d
22460 65 63 6c 61 72 65 5f 76 74 61 62 28 29 20 63 61  eclare_vtab() ca
22470 6c 6c 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51  ll..*/.#ifdef SQ
22480 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
22490 4c 54 41 42 4c 45 0a 20 20 23 64 65 66 69 6e 65  LTABLE.  #define
224a0 20 49 4e 5f 44 45 43 4c 41 52 45 5f 56 54 41 42   IN_DECLARE_VTAB
224b0 20 30 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69   0.#else.  #defi
224c0 6e 65 20 49 4e 5f 44 45 43 4c 41 52 45 5f 56 54  ne IN_DECLARE_VT
224d0 41 42 20 28 70 50 61 72 73 65 2d 3e 65 50 61 72  AB (pParse->ePar
224e0 73 65 4d 6f 64 65 3d 3d 50 41 52 53 45 5f 4d 4f  seMode==PARSE_MO
224f0 44 45 5f 44 45 43 4c 41 52 45 5f 56 54 41 42 29  DE_DECLARE_VTAB)
22500 0a 23 65 6e 64 69 66 0a 0a 23 69 66 20 64 65 66  .#endif..#if def
22510 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54  ined(SQLITE_OMIT
22520 5f 41 4c 54 45 52 54 41 42 4c 45 29 0a 20 20 23  _ALTERTABLE).  #
22530 64 65 66 69 6e 65 20 49 4e 5f 52 45 4e 41 4d 45  define IN_RENAME
22540 5f 4f 42 4a 45 43 54 20 30 0a 23 65 6c 73 65 0a  _OBJECT 0.#else.
22550 20 20 23 64 65 66 69 6e 65 20 49 4e 5f 52 45 4e    #define IN_REN
22560 41 4d 45 5f 4f 42 4a 45 43 54 20 28 70 50 61 72  AME_OBJECT (pPar
22570 73 65 2d 3e 65 50 61 72 73 65 4d 6f 64 65 3e 3d  se->eParseMode>=
22580 50 41 52 53 45 5f 4d 4f 44 45 5f 52 45 4e 41 4d  PARSE_MODE_RENAM
22590 45 5f 43 4f 4c 55 4d 4e 29 0a 23 65 6e 64 69 66  E_COLUMN).#endif
225a0 0a 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51  ..#if defined(SQ
225b0 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
225c0 4c 54 41 42 4c 45 29 20 26 26 20 64 65 66 69 6e  LTABLE) && defin
225d0 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41  ed(SQLITE_OMIT_A
225e0 4c 54 45 52 54 41 42 4c 45 29 0a 20 20 23 64 65  LTERTABLE).  #de
225f0 66 69 6e 65 20 49 4e 5f 53 50 45 43 49 41 4c 5f  fine IN_SPECIAL_
22600 50 41 52 53 45 20 30 0a 23 65 6c 73 65 0a 20 20  PARSE 0.#else.  
22610 23 64 65 66 69 6e 65 20 49 4e 5f 53 50 45 43 49  #define IN_SPECI
22620 41 4c 5f 50 41 52 53 45 20 28 70 50 61 72 73 65  AL_PARSE (pParse
22630 2d 3e 65 50 61 72 73 65 4d 6f 64 65 21 3d 50 41  ->eParseMode!=PA
22640 52 53 45 5f 4d 4f 44 45 5f 4e 4f 52 4d 41 4c 29  RSE_MODE_NORMAL)
22650 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41  .#endif../*.** A
22660 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  n instance of th
22670 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75  e following stru
22680 63 74 75 72 65 20 63 61 6e 20 62 65 20 64 65 63  cture can be dec
22690 6c 61 72 65 64 20 6f 6e 20 61 20 73 74 61 63 6b  lared on a stack
226a0 20 61 6e 64 20 75 73 65 64 0a 2a 2a 20 74 6f 20   and used.** to 
226b0 73 61 76 65 20 74 68 65 20 50 61 72 73 65 2e 7a  save the Parse.z
226c0 41 75 74 68 43 6f 6e 74 65 78 74 20 76 61 6c 75  AuthContext valu
226d0 65 20 73 6f 20 74 68 61 74 20 69 74 20 63 61 6e  e so that it can
226e0 20 62 65 20 72 65 73 74 6f 72 65 64 20 6c 61 74   be restored lat
226f0 65 72 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 41 75  er..*/.struct Au
22700 74 68 43 6f 6e 74 65 78 74 20 7b 0a 20 20 63 6f  thContext {.  co
22710 6e 73 74 20 63 68 61 72 20 2a 7a 41 75 74 68 43  nst char *zAuthC
22720 6f 6e 74 65 78 74 3b 20 20 20 2f 2a 20 50 75 74  ontext;   /* Put
22730 20 73 61 76 65 64 20 50 61 72 73 65 2e 7a 41 75   saved Parse.zAu
22740 74 68 43 6f 6e 74 65 78 74 20 68 65 72 65 20 2a  thContext here *
22750 2f 0a 20 20 50 61 72 73 65 20 2a 70 50 61 72 73  /.  Parse *pPars
22760 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e;              
22770 2f 2a 20 54 68 65 20 50 61 72 73 65 20 73 74 72  /* The Parse str
22780 75 63 74 75 72 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  ucture */.};../*
22790 0a 2a 2a 20 42 69 74 66 69 65 6c 64 20 66 6c 61  .** Bitfield fla
227a0 67 73 20 66 6f 72 20 50 35 20 76 61 6c 75 65 20  gs for P5 value 
227b0 69 6e 20 76 61 72 69 6f 75 73 20 6f 70 63 6f 64  in various opcod
227c0 65 73 2e 0a 2a 2a 0a 2a 2a 20 56 61 6c 75 65 20  es..**.** Value 
227d0 63 6f 6e 73 74 72 61 69 6e 74 73 20 28 65 6e 66  constraints (enf
227e0 6f 72 63 65 64 20 76 69 61 20 61 73 73 65 72 74  orced via assert
227f0 28 29 29 3a 0a 2a 2a 20 20 20 20 4f 50 46 4c 41  ()):.**    OPFLA
22800 47 5f 4c 45 4e 47 54 48 41 52 47 20 20 20 20 3d  G_LENGTHARG    =
22810 3d 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4c 45  = SQLITE_FUNC_LE
22820 4e 47 54 48 0a 2a 2a 20 20 20 20 4f 50 46 4c 41  NGTH.**    OPFLA
22830 47 5f 54 59 50 45 4f 46 41 52 47 20 20 20 20 3d  G_TYPEOFARG    =
22840 3d 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 54 59  = SQLITE_FUNC_TY
22850 50 45 4f 46 0a 2a 2a 20 20 20 20 4f 50 46 4c 41  PEOF.**    OPFLA
22860 47 5f 42 55 4c 4b 43 53 52 20 20 20 20 20 20 3d  G_BULKCSR      =
22870 3d 20 42 54 52 45 45 5f 42 55 4c 4b 4c 4f 41 44  = BTREE_BULKLOAD
22880 0a 2a 2a 20 20 20 20 4f 50 46 4c 41 47 5f 53 45  .**    OPFLAG_SE
22890 45 4b 45 51 20 20 20 20 20 20 20 3d 3d 20 42 54  EKEQ       == BT
228a0 52 45 45 5f 53 45 45 4b 5f 45 51 0a 2a 2a 20 20  REE_SEEK_EQ.**  
228b0 20 20 4f 50 46 4c 41 47 5f 46 4f 52 44 45 4c 45    OPFLAG_FORDELE
228c0 54 45 20 20 20 20 3d 3d 20 42 54 52 45 45 5f 46  TE    == BTREE_F
228d0 4f 52 44 45 4c 45 54 45 0a 2a 2a 20 20 20 20 4f  ORDELETE.**    O
228e0 50 46 4c 41 47 5f 53 41 56 45 50 4f 53 49 54 49  PFLAG_SAVEPOSITI
228f0 4f 4e 20 3d 3d 20 42 54 52 45 45 5f 53 41 56 45  ON == BTREE_SAVE
22900 50 4f 53 49 54 49 4f 4e 0a 2a 2a 20 20 20 20 4f  POSITION.**    O
22910 50 46 4c 41 47 5f 41 55 58 44 45 4c 45 54 45 20  PFLAG_AUXDELETE 
22920 20 20 20 3d 3d 20 42 54 52 45 45 5f 41 55 58 44     == BTREE_AUXD
22930 45 4c 45 54 45 0a 2a 2f 0a 23 64 65 66 69 6e 65  ELETE.*/.#define
22940 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20   OPFLAG_NCHANGE 
22950 20 20 20 20 20 20 30 78 30 31 20 20 20 20 2f 2a        0x01    /*
22960 20 4f 50 5f 49 6e 73 65 72 74 3a 20 53 65 74 20   OP_Insert: Set 
22970 74 6f 20 75 70 64 61 74 65 20 64 62 2d 3e 6e 43  to update db->nC
22980 68 61 6e 67 65 20 2a 2f 0a 20 20 20 20 20 20 20  hange */.       
22990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
229a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
229b0 20 41 6c 73 6f 20 75 73 65 64 20 69 6e 20 50 32   Also used in P2
229c0 20 28 6e 6f 74 20 50 35 29 20 6f 66 20 4f 50 5f   (not P5) of OP_
229d0 44 65 6c 65 74 65 20 2a 2f 0a 23 64 65 66 69 6e  Delete */.#defin
229e0 65 20 4f 50 46 4c 41 47 5f 4e 4f 43 48 4e 47 20  e OPFLAG_NOCHNG 
229f0 20 20 20 20 20 20 20 30 78 30 31 20 20 20 20 2f         0x01    /
22a00 2a 20 4f 50 5f 56 43 6f 6c 75 6d 6e 20 6e 6f 63  * OP_VColumn noc
22a10 68 61 6e 67 65 20 66 6f 72 20 55 50 44 41 54 45  hange for UPDATE
22a20 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c   */.#define OPFL
22a30 41 47 5f 45 50 48 45 4d 20 20 20 20 20 20 20 20  AG_EPHEM        
22a40 20 30 78 30 31 20 20 20 20 2f 2a 20 4f 50 5f 43   0x01    /* OP_C
22a50 6f 6c 75 6d 6e 3a 20 45 70 68 65 6d 65 72 61 6c  olumn: Ephemeral
22a60 20 6f 75 74 70 75 74 20 69 73 20 6f 6b 20 2a 2f   output is ok */
22a70 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f  .#define OPFLAG_
22a80 4c 41 53 54 52 4f 57 49 44 20 20 20 20 20 30 78  LASTROWID     0x
22a90 32 30 20 20 20 20 2f 2a 20 53 65 74 20 74 6f 20  20    /* Set to 
22aa0 75 70 64 61 74 65 20 64 62 2d 3e 6c 61 73 74 52  update db->lastR
22ab0 6f 77 69 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20  owid */.#define 
22ac0 4f 50 46 4c 41 47 5f 49 53 55 50 44 41 54 45 20  OPFLAG_ISUPDATE 
22ad0 20 20 20 20 20 30 78 30 34 20 20 20 20 2f 2a 20       0x04    /* 
22ae0 54 68 69 73 20 4f 50 5f 49 6e 73 65 72 74 20 69  This OP_Insert i
22af0 73 20 61 6e 20 73 71 6c 20 55 50 44 41 54 45 20  s an sql UPDATE 
22b00 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41  */.#define OPFLA
22b10 47 5f 41 50 50 45 4e 44 20 20 20 20 20 20 20 20  G_APPEND        
22b20 30 78 30 38 20 20 20 20 2f 2a 20 54 68 69 73 20  0x08    /* This 
22b30 69 73 20 6c 69 6b 65 6c 79 20 74 6f 20 62 65 20  is likely to be 
22b40 61 6e 20 61 70 70 65 6e 64 20 2a 2f 0a 23 64 65  an append */.#de
22b50 66 69 6e 65 20 4f 50 46 4c 41 47 5f 55 53 45 53  fine OPFLAG_USES
22b60 45 45 4b 52 45 53 55 4c 54 20 30 78 31 30 20 20  EEKRESULT 0x10  
22b70 20 20 2f 2a 20 54 72 79 20 74 6f 20 61 76 6f 69    /* Try to avoi
22b80 64 20 61 20 73 65 65 6b 20 69 6e 20 42 74 72 65  d a seek in Btre
22b90 65 49 6e 73 65 72 74 28 29 20 2a 2f 0a 23 64 65  eInsert() */.#de
22ba0 66 69 6e 65 20 4f 50 46 4c 41 47 5f 49 53 4e 4f  fine OPFLAG_ISNO
22bb0 4f 50 20 20 20 20 20 20 20 20 30 78 34 30 20 20  OP        0x40  
22bc0 20 20 2f 2a 20 4f 50 5f 44 65 6c 65 74 65 20 64    /* OP_Delete d
22bd0 6f 65 73 20 70 72 65 2d 75 70 64 61 74 65 2d 68  oes pre-update-h
22be0 6f 6f 6b 20 6f 6e 6c 79 20 2a 2f 0a 23 64 65 66  ook only */.#def
22bf0 69 6e 65 20 4f 50 46 4c 41 47 5f 4c 45 4e 47 54  ine OPFLAG_LENGT
22c00 48 41 52 47 20 20 20 20 20 30 78 34 30 20 20 20  HARG     0x40   
22c10 20 2f 2a 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 6e   /* OP_Column on
22c20 6c 79 20 75 73 65 64 20 66 6f 72 20 6c 65 6e 67  ly used for leng
22c30 74 68 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20  th() */.#define 
22c40 4f 50 46 4c 41 47 5f 54 59 50 45 4f 46 41 52 47  OPFLAG_TYPEOFARG
22c50 20 20 20 20 20 30 78 38 30 20 20 20 20 2f 2a 20       0x80    /* 
22c60 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 6e 6c 79 20 75  OP_Column only u
22c70 73 65 64 20 66 6f 72 20 74 79 70 65 6f 66 28 29  sed for typeof()
22c80 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c   */.#define OPFL
22c90 41 47 5f 42 55 4c 4b 43 53 52 20 20 20 20 20 20  AG_BULKCSR      
22ca0 20 30 78 30 31 20 20 20 20 2f 2a 20 4f 50 5f 4f   0x01    /* OP_O
22cb0 70 65 6e 2a 2a 20 75 73 65 64 20 74 6f 20 6f 70  pen** used to op
22cc0 65 6e 20 62 75 6c 6b 20 63 75 72 73 6f 72 20 2a  en bulk cursor *
22cd0 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47  /.#define OPFLAG
22ce0 5f 53 45 45 4b 45 51 20 20 20 20 20 20 20 20 30  _SEEKEQ        0
22cf0 78 30 32 20 20 20 20 2f 2a 20 4f 50 5f 4f 70 65  x02    /* OP_Ope
22d00 6e 2a 2a 20 63 75 72 73 6f 72 20 75 73 65 73 20  n** cursor uses 
22d10 45 51 20 73 65 65 6b 20 6f 6e 6c 79 20 2a 2f 0a  EQ seek only */.
22d20 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 46  #define OPFLAG_F
22d30 4f 52 44 45 4c 45 54 45 20 20 20 20 20 30 78 30  ORDELETE     0x0
22d40 38 20 20 20 20 2f 2a 20 4f 50 5f 4f 70 65 6e 20  8    /* OP_Open 
22d50 73 68 6f 75 6c 64 20 75 73 65 20 42 54 52 45 45  should use BTREE
22d60 5f 46 4f 52 44 45 4c 45 54 45 20 2a 2f 0a 23 64  _FORDELETE */.#d
22d70 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 50 32 49  efine OPFLAG_P2I
22d80 53 52 45 47 20 20 20 20 20 20 20 30 78 31 30 20  SREG       0x10 
22d90 20 20 20 2f 2a 20 50 32 20 74 6f 20 4f 50 5f 4f     /* P2 to OP_O
22da0 70 65 6e 2a 2a 20 69 73 20 61 20 72 65 67 69 73  pen** is a regis
22db0 74 65 72 20 6e 75 6d 62 65 72 20 2a 2f 0a 23 64  ter number */.#d
22dc0 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 50 45 52  efine OPFLAG_PER
22dd0 4d 55 54 45 20 20 20 20 20 20 20 30 78 30 31 20  MUTE       0x01 
22de0 20 20 20 2f 2a 20 4f 50 5f 43 6f 6d 70 61 72 65     /* OP_Compare
22df0 3a 20 75 73 65 20 74 68 65 20 70 65 72 6d 75 74  : use the permut
22e00 61 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65  ation */.#define
22e10 20 4f 50 46 4c 41 47 5f 53 41 56 45 50 4f 53 49   OPFLAG_SAVEPOSI
22e20 54 49 4f 4e 20 20 30 78 30 32 20 20 20 20 2f 2a  TION  0x02    /*
22e30 20 4f 50 5f 44 65 6c 65 74 65 2f 49 6e 73 65 72   OP_Delete/Inser
22e40 74 3a 20 73 61 76 65 20 63 75 72 73 6f 72 20 70  t: save cursor p
22e50 6f 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50  os */.#define OP
22e60 46 4c 41 47 5f 41 55 58 44 45 4c 45 54 45 20 20  FLAG_AUXDELETE  
22e70 20 20 20 30 78 30 34 20 20 20 20 2f 2a 20 4f 50     0x04    /* OP
22e80 5f 44 65 6c 65 74 65 3a 20 69 6e 64 65 78 20 69  _Delete: index i
22e90 6e 20 61 20 44 45 4c 45 54 45 20 6f 70 20 2a 2f  n a DELETE op */
22ea0 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f  .#define OPFLAG_
22eb0 4e 4f 43 48 4e 47 5f 4d 41 47 49 43 20 20 30 78  NOCHNG_MAGIC  0x
22ec0 36 64 20 20 20 20 2f 2a 20 4f 50 5f 4d 61 6b 65  6d    /* OP_Make
22ed0 52 65 63 6f 72 64 3a 20 73 65 72 69 61 6c 74 79  Record: serialty
22ee0 70 65 20 31 30 20 69 73 20 6f 6b 20 2a 2f 0a 0a  pe 10 is ok */..
22ef0 2f 2a 0a 20 2a 20 45 61 63 68 20 74 72 69 67 67  /*. * Each trigg
22f00 65 72 20 70 72 65 73 65 6e 74 20 69 6e 20 74 68  er present in th
22f10 65 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d  e database schem
22f20 61 20 69 73 20 73 74 6f 72 65 64 20 61 73 20 61  a is stored as a
22f30 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 0a 20 2a  n instance of. *
22f40 20 73 74 72 75 63 74 20 54 72 69 67 67 65 72 2e   struct Trigger.
22f50 0a 20 2a 0a 20 2a 20 50 6f 69 6e 74 65 72 73 20  . *. * Pointers 
22f60 74 6f 20 69 6e 73 74 61 6e 63 65 73 20 6f 66 20  to instances of 
22f70 73 74 72 75 63 74 20 54 72 69 67 67 65 72 20 61  struct Trigger a
22f80 72 65 20 73 74 6f 72 65 64 20 69 6e 20 74 77 6f  re stored in two
22f90 20 77 61 79 73 2e 0a 20 2a 20 31 2e 20 49 6e 20   ways.. * 1. In 
22fa0 74 68 65 20 22 74 72 69 67 48 61 73 68 22 20 68  the "trigHash" h
22fb0 61 73 68 20 74 61 62 6c 65 20 28 70 61 72 74 20  ash table (part 
22fc0 6f 66 20 74 68 65 20 73 71 6c 69 74 65 33 2a 20  of the sqlite3* 
22fd0 74 68 61 74 20 72 65 70 72 65 73 65 6e 74 73 20  that represents 
22fe0 74 68 65 0a 20 2a 20 20 20 20 64 61 74 61 62 61  the. *    databa
22ff0 73 65 29 2e 20 54 68 69 73 20 61 6c 6c 6f 77 73  se). This allows
23000 20 54 72 69 67 67 65 72 20 73 74 72 75 63 74 75   Trigger structu
23010 72 65 73 20 74 6f 20 62 65 20 72 65 74 72 69 65  res to be retrie
23020 76 65 64 20 62 79 20 6e 61 6d 65 2e 0a 20 2a 20  ved by name.. * 
23030 32 2e 20 41 6c 6c 20 74 72 69 67 67 65 72 73 20  2. All triggers 
23040 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20  associated with 
23050 61 20 73 69 6e 67 6c 65 20 74 61 62 6c 65 20 66  a single table f
23060 6f 72 6d 20 61 20 6c 69 6e 6b 65 64 20 6c 69 73  orm a linked lis
23070 74 2c 20 75 73 69 6e 67 20 74 68 65 0a 20 2a 20  t, using the. * 
23080 20 20 20 70 4e 65 78 74 20 6d 65 6d 62 65 72 20     pNext member 
23090 6f 66 20 73 74 72 75 63 74 20 54 72 69 67 67 65  of struct Trigge
230a0 72 2e 20 41 20 70 6f 69 6e 74 65 72 20 74 6f 20  r. A pointer to 
230b0 74 68 65 20 66 69 72 73 74 20 65 6c 65 6d 65 6e  the first elemen
230c0 74 20 6f 66 20 74 68 65 0a 20 2a 20 20 20 20 6c  t of the. *    l
230d0 69 6e 6b 65 64 20 6c 69 73 74 20 69 73 20 73 74  inked list is st
230e0 6f 72 65 64 20 61 73 20 74 68 65 20 22 70 54 72  ored as the "pTr
230f0 69 67 67 65 72 22 20 6d 65 6d 62 65 72 20 6f 66  igger" member of
23100 20 74 68 65 20 61 73 73 6f 63 69 61 74 65 64 0a   the associated.
23110 20 2a 20 20 20 20 73 74 72 75 63 74 20 54 61 62   *    struct Tab
23120 6c 65 2e 0a 20 2a 0a 20 2a 20 54 68 65 20 22 73  le.. *. * The "s
23130 74 65 70 5f 6c 69 73 74 22 20 6d 65 6d 62 65 72  tep_list" member
23140 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 66   points to the f
23150 69 72 73 74 20 65 6c 65 6d 65 6e 74 20 6f 66 20  irst element of 
23160 61 20 6c 69 6e 6b 65 64 20 6c 69 73 74 0a 20 2a  a linked list. *
23170 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20   containing the 
23180 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 73  SQL statements s
23190 70 65 63 69 66 69 65 64 20 61 73 20 74 68 65 20  pecified as the 
231a0 74 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d 2e  trigger program.
231b0 0a 20 2a 2f 0a 73 74 72 75 63 74 20 54 72 69 67  . */.struct Trig
231c0 67 65 72 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e  ger {.  char *zN
231d0 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ame;            
231e0 2f 2a 20 54 68 65 20 6e 61 6d 65 20 6f 66 20 74  /* The name of t
231f0 68 65 20 74 72 69 67 67 65 72 20 20 20 20 20 20  he trigger      
23200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23210 20 20 2a 2f 0a 20 20 63 68 61 72 20 2a 74 61 62    */.  char *tab
23220 6c 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  le;            /
23230 2a 20 54 68 65 20 74 61 62 6c 65 20 6f 72 20 76  * The table or v
23240 69 65 77 20 74 6f 20 77 68 69 63 68 20 74 68 65  iew to which the
23250 20 74 72 69 67 67 65 72 20 61 70 70 6c 69 65 73   trigger applies
23260 20 2a 2f 0a 20 20 75 38 20 6f 70 3b 20 20 20 20   */.  u8 op;    
23270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
23280 20 4f 6e 65 20 6f 66 20 54 4b 5f 44 45 4c 45 54   One of TK_DELET
23290 45 2c 20 54 4b 5f 55 50 44 41 54 45 2c 20 54 4b  E, TK_UPDATE, TK
232a0 5f 49 4e 53 45 52 54 20 20 20 20 20 20 20 20 20  _INSERT         
232b0 2a 2f 0a 20 20 75 38 20 74 72 5f 74 6d 3b 20 20  */.  u8 tr_tm;  
232c0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
232d0 4f 6e 65 20 6f 66 20 54 52 49 47 47 45 52 5f 42  One of TRIGGER_B
232e0 45 46 4f 52 45 2c 20 54 52 49 47 47 45 52 5f 41  EFORE, TRIGGER_A
232f0 46 54 45 52 20 2a 2f 0a 20 20 45 78 70 72 20 2a  FTER */.  Expr *
23300 70 57 68 65 6e 3b 20 20 20 20 20 20 20 20 20 20  pWhen;          
23310 20 20 2f 2a 20 54 68 65 20 57 48 45 4e 20 63 6c    /* The WHEN cl
23320 61 75 73 65 20 6f 66 20 74 68 65 20 65 78 70 72  ause of the expr
23330 65 73 73 69 6f 6e 20 28 6d 61 79 20 62 65 20 4e  ession (may be N
23340 55 4c 4c 29 20 2a 2f 0a 20 20 49 64 4c 69 73 74  ULL) */.  IdList
23350 20 2a 70 43 6f 6c 75 6d 6e 73 3b 20 20 20 20 20   *pColumns;     
23360 20 20 2f 2a 20 49 66 20 74 68 69 73 20 69 73 20    /* If this is 
23370 61 6e 20 55 50 44 41 54 45 20 4f 46 20 3c 63 6f  an UPDATE OF <co
23380 6c 75 6d 6e 2d 6c 69 73 74 3e 20 74 72 69 67 67  lumn-list> trigg
23390 65 72 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  er,.            
233a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
233b0 20 74 68 65 20 3c 63 6f 6c 75 6d 6e 2d 6c 69 73   the <column-lis
233c0 74 3e 20 69 73 20 73 74 6f 72 65 64 20 68 65 72  t> is stored her
233d0 65 20 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70  e */.  Schema *p
233e0 53 63 68 65 6d 61 3b 20 20 20 20 20 20 20 20 2f  Schema;        /
233f0 2a 20 53 63 68 65 6d 61 20 63 6f 6e 74 61 69 6e  * Schema contain
23400 69 6e 67 20 74 68 65 20 74 72 69 67 67 65 72 20  ing the trigger 
23410 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70 54 61  */.  Schema *pTa
23420 62 53 63 68 65 6d 61 3b 20 20 20 20 20 2f 2a 20  bSchema;     /* 
23430 53 63 68 65 6d 61 20 63 6f 6e 74 61 69 6e 69 6e  Schema containin
23440 67 20 74 68 65 20 74 61 62 6c 65 20 2a 2f 0a 20  g the table */. 
23450 20 54 72 69 67 67 65 72 53 74 65 70 20 2a 73 74   TriggerStep *st
23460 65 70 5f 6c 69 73 74 3b 20 2f 2a 20 4c 69 6e 6b  ep_list; /* Link
23470 20 6c 69 73 74 20 6f 66 20 74 72 69 67 67 65 72   list of trigger
23480 20 70 72 6f 67 72 61 6d 20 73 74 65 70 73 20 20   program steps  
23490 20 20 20 20 20 20 20 20 20 20 20 2a 2f 0a 20 20             */.  
234a0 54 72 69 67 67 65 72 20 2a 70 4e 65 78 74 3b 20  Trigger *pNext; 
234b0 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20          /* Next 
234c0 74 72 69 67 67 65 72 20 61 73 73 6f 63 69 61 74  trigger associat
234d0 65 64 20 77 69 74 68 20 74 68 65 20 74 61 62 6c  ed with the tabl
234e0 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41  e */.};../*.** A
234f0 20 74 72 69 67 67 65 72 20 69 73 20 65 69 74 68   trigger is eith
23500 65 72 20 61 20 42 45 46 4f 52 45 20 6f 72 20 61  er a BEFORE or a
23510 6e 20 41 46 54 45 52 20 74 72 69 67 67 65 72 2e  n AFTER trigger.
23520 20 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20    The following 
23530 63 6f 6e 73 74 61 6e 74 73 0a 2a 2a 20 64 65 74  constants.** det
23540 65 72 6d 69 6e 65 20 77 68 69 63 68 2e 0a 2a 2a  ermine which..**
23550 0a 2a 2a 20 49 66 20 74 68 65 72 65 20 61 72 65  .** If there are
23560 20 6d 75 6c 74 69 70 6c 65 20 74 72 69 67 67 65   multiple trigge
23570 72 73 2c 20 79 6f 75 20 6d 69 67 68 74 20 6f 66  rs, you might of
23580 20 73 6f 6d 65 20 42 45 46 4f 52 45 20 61 6e 64   some BEFORE and
23590 20 73 6f 6d 65 20 41 46 54 45 52 2e 0a 2a 2a 20   some AFTER..** 
235a0 49 6e 20 74 68 61 74 20 63 61 73 65 73 2c 20 74  In that cases, t
235b0 68 65 20 63 6f 6e 73 74 61 6e 74 73 20 62 65 6c  he constants bel
235c0 6f 77 20 63 61 6e 20 62 65 20 4f 52 65 64 20 74  ow can be ORed t
235d0 6f 67 65 74 68 65 72 2e 0a 2a 2f 0a 23 64 65 66  ogether..*/.#def
235e0 69 6e 65 20 54 52 49 47 47 45 52 5f 42 45 46 4f  ine TRIGGER_BEFO
235f0 52 45 20 20 31 0a 23 64 65 66 69 6e 65 20 54 52  RE  1.#define TR
23600 49 47 47 45 52 5f 41 46 54 45 52 20 20 20 32 0a  IGGER_AFTER   2.
23610 0a 2f 2a 0a 20 2a 20 41 6e 20 69 6e 73 74 61 6e  ./*. * An instan
23620 63 65 20 6f 66 20 73 74 72 75 63 74 20 54 72 69  ce of struct Tri
23630 67 67 65 72 53 74 65 70 20 69 73 20 75 73 65 64  ggerStep is used
23640 20 74 6f 20 73 74 6f 72 65 20 61 20 73 69 6e 67   to store a sing
23650 6c 65 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74  le SQL statement
23660 0a 20 2a 20 74 68 61 74 20 69 73 20 61 20 70 61  . * that is a pa
23670 72 74 20 6f 66 20 61 20 74 72 69 67 67 65 72 2d  rt of a trigger-
23680 70 72 6f 67 72 61 6d 2e 0a 20 2a 0a 20 2a 20 49  program.. *. * I
23690 6e 73 74 61 6e 63 65 73 20 6f 66 20 73 74 72 75  nstances of stru
236a0 63 74 20 54 72 69 67 67 65 72 53 74 65 70 20 61  ct TriggerStep a
236b0 72 65 20 73 74 6f 72 65 64 20 69 6e 20 61 20 73  re stored in a s
236c0 69 6e 67 6c 79 20 6c 69 6e 6b 65 64 20 6c 69 73  ingly linked lis
236d0 74 20 28 6c 69 6e 6b 65 64 0a 20 2a 20 75 73 69  t (linked. * usi
236e0 6e 67 20 74 68 65 20 22 70 4e 65 78 74 22 20 6d  ng the "pNext" m
236f0 65 6d 62 65 72 29 20 72 65 66 65 72 65 6e 63 65  ember) reference
23700 64 20 62 79 20 74 68 65 20 22 73 74 65 70 5f 6c  d by the "step_l
23710 69 73 74 22 20 6d 65 6d 62 65 72 20 6f 66 20 74  ist" member of t
23720 68 65 0a 20 2a 20 61 73 73 6f 63 69 61 74 65 64  he. * associated
23730 20 73 74 72 75 63 74 20 54 72 69 67 67 65 72 20   struct Trigger 
23740 69 6e 73 74 61 6e 63 65 2e 20 54 68 65 20 66 69  instance. The fi
23750 72 73 74 20 65 6c 65 6d 65 6e 74 20 6f 66 20 74  rst element of t
23760 68 65 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 69  he linked list i
23770 73 0a 20 2a 20 74 68 65 20 66 69 72 73 74 20 73  s. * the first s
23780 74 65 70 20 6f 66 20 74 68 65 20 74 72 69 67 67  tep of the trigg
23790 65 72 2d 70 72 6f 67 72 61 6d 2e 0a 20 2a 0a 20  er-program.. *. 
237a0 2a 20 54 68 65 20 22 6f 70 22 20 6d 65 6d 62 65  * The "op" membe
237b0 72 20 69 6e 64 69 63 61 74 65 73 20 77 68 65 74  r indicates whet
237c0 68 65 72 20 74 68 69 73 20 69 73 20 61 20 22 44  her this is a "D
237d0 45 4c 45 54 45 22 2c 20 22 49 4e 53 45 52 54 22  ELETE", "INSERT"
237e0 2c 20 22 55 50 44 41 54 45 22 20 6f 72 0a 20 2a  , "UPDATE" or. *
237f0 20 22 53 45 4c 45 43 54 22 20 73 74 61 74 65 6d   "SELECT" statem
23800 65 6e 74 2e 20 54 68 65 20 6d 65 61 6e 69 6e 67  ent. The meaning
23810 73 20 6f 66 20 74 68 65 20 6f 74 68 65 72 20 6d  s of the other m
23820 65 6d 62 65 72 73 20 69 73 20 64 65 74 65 72 6d  embers is determ
23830 69 6e 65 64 20 62 79 20 74 68 65 0a 20 2a 20 76  ined by the. * v
23840 61 6c 75 65 20 6f 66 20 22 6f 70 22 20 61 73 20  alue of "op" as 
23850 66 6f 6c 6c 6f 77 73 3a 0a 20 2a 0a 20 2a 20 28  follows:. *. * (
23860 6f 70 20 3d 3d 20 54 4b 5f 49 4e 53 45 52 54 29  op == TK_INSERT)
23870 0a 20 2a 20 6f 72 63 6f 6e 66 20 20 20 20 2d 3e  . * orconf    ->
23880 20 73 74 6f 72 65 73 20 74 68 65 20 4f 4e 20 43   stores the ON C
23890 4f 4e 46 4c 49 43 54 20 61 6c 67 6f 72 69 74 68  ONFLICT algorith
238a0 6d 0a 20 2a 20 70 53 65 6c 65 63 74 20 20 20 2d  m. * pSelect   -
238b0 3e 20 49 66 20 74 68 69 73 20 69 73 20 61 6e 20  > If this is an 
238c0 49 4e 53 45 52 54 20 49 4e 54 4f 20 2e 2e 2e 20  INSERT INTO ... 
238d0 53 45 4c 45 43 54 20 2e 2e 2e 20 73 74 61 74 65  SELECT ... state
238e0 6d 65 6e 74 2c 20 74 68 65 6e 0a 20 2a 20 20 20  ment, then. *   
238f0 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73 20             this 
23900 73 74 6f 72 65 73 20 61 20 70 6f 69 6e 74 65 72  stores a pointer
23910 20 74 6f 20 74 68 65 20 53 45 4c 45 43 54 20 73   to the SELECT s
23920 74 61 74 65 6d 65 6e 74 2e 20 4f 74 68 65 72 77  tatement. Otherw
23930 69 73 65 20 4e 55 4c 4c 2e 0a 20 2a 20 7a 54 61  ise NULL.. * zTa
23940 72 67 65 74 20 20 20 2d 3e 20 44 65 71 75 6f 74  rget   -> Dequot
23950 65 64 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74  ed name of the t
23960 61 62 6c 65 20 74 6f 20 69 6e 73 65 72 74 20 69  able to insert i
23970 6e 74 6f 2e 0a 20 2a 20 70 45 78 70 72 4c 69 73  nto.. * pExprLis
23980 74 20 2d 3e 20 49 66 20 74 68 69 73 20 69 73 20  t -> If this is 
23990 61 6e 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 2e  an INSERT INTO .
239a0 2e 2e 20 56 41 4c 55 45 53 20 2e 2e 2e 20 73 74  .. VALUES ... st
239b0 61 74 65 6d 65 6e 74 2c 20 74 68 65 6e 0a 20 2a  atement, then. *
239c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
239d0 69 73 20 73 74 6f 72 65 73 20 76 61 6c 75 65 73  is stores values
239e0 20 74 6f 20 62 65 20 69 6e 73 65 72 74 65 64 2e   to be inserted.
239f0 20 4f 74 68 65 72 77 69 73 65 20 4e 55 4c 4c 2e   Otherwise NULL.
23a00 0a 20 2a 20 70 49 64 4c 69 73 74 20 20 20 2d 3e  . * pIdList   ->
23a10 20 49 66 20 74 68 69 73 20 69 73 20 61 6e 20 49   If this is an I
23a20 4e 53 45 52 54 20 49 4e 54 4f 20 2e 2e 2e 20 28  NSERT INTO ... (
23a30 3c 63 6f 6c 75 6d 6e 2d 6e 61 6d 65 73 3e 29 20  <column-names>) 
23a40 56 41 4c 55 45 53 20 2e 2e 2e 0a 20 2a 20 20 20  VALUES .... *   
23a50 20 20 20 20 20 20 20 20 20 20 20 73 74 61 74 65             state
23a60 6d 65 6e 74 2c 20 74 68 65 6e 20 74 68 69 73 20  ment, then this 
23a70 73 74 6f 72 65 73 20 74 68 65 20 63 6f 6c 75 6d  stores the colum
23a80 6e 2d 6e 61 6d 65 73 20 74 6f 20 62 65 0a 20 2a  n-names to be. *
23a90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e                in
23aa0 73 65 72 74 65 64 20 69 6e 74 6f 2e 0a 20 2a 0a  serted into.. *.
23ab0 20 2a 20 28 6f 70 20 3d 3d 20 54 4b 5f 44 45 4c   * (op == TK_DEL
23ac0 45 54 45 29 0a 20 2a 20 7a 54 61 72 67 65 74 20  ETE). * zTarget 
23ad0 20 20 2d 3e 20 44 65 71 75 6f 74 65 64 20 6e 61    -> Dequoted na
23ae0 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20  me of the table 
23af0 74 6f 20 64 65 6c 65 74 65 20 66 72 6f 6d 2e 0a  to delete from..
23b00 20 2a 20 70 57 68 65 72 65 20 20 20 20 2d 3e 20   * pWhere    -> 
23b10 54 68 65 20 57 48 45 52 45 20 63 6c 61 75 73 65  The WHERE clause
23b20 20 6f 66 20 74 68 65 20 44 45 4c 45 54 45 20 73   of the DELETE s
23b30 74 61 74 65 6d 65 6e 74 20 69 66 20 6f 6e 65 20  tatement if one 
23b40 69 73 20 73 70 65 63 69 66 69 65 64 2e 0a 20 2a  is specified.. *
23b50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4f 74                Ot
23b60 68 65 72 77 69 73 65 20 4e 55 4c 4c 2e 0a 20 2a  herwise NULL.. *
23b70 0a 20 2a 20 28 6f 70 20 3d 3d 20 54 4b 5f 55 50  . * (op == TK_UP
23b80 44 41 54 45 29 0a 20 2a 20 7a 54 61 72 67 65 74  DATE). * zTarget
23b90 20 20 20 2d 3e 20 44 65 71 75 6f 74 65 64 20 6e     -> Dequoted n
23ba0 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65  ame of the table
23bb0 20 74 6f 20 75 70 64 61 74 65 2e 0a 20 2a 20 70   to update.. * p
23bc0 57 68 65 72 65 20 20 20 20 2d 3e 20 54 68 65 20  Where    -> The 
23bd0 57 48 45 52 45 20 63 6c 61 75 73 65 20 6f 66 20  WHERE clause of 
23be0 74 68 65 20 55 50 44 41 54 45 20 73 74 61 74 65  the UPDATE state
23bf0 6d 65 6e 74 20 69 66 20 6f 6e 65 20 69 73 20 73  ment if one is s
23c00 70 65 63 69 66 69 65 64 2e 0a 20 2a 20 20 20 20  pecified.. *    
23c10 20 20 20 20 20 20 20 20 20 20 4f 74 68 65 72 77            Otherw
23c20 69 73 65 20 4e 55 4c 4c 2e 0a 20 2a 20 70 45 78  ise NULL.. * pEx
23c30 70 72 4c 69 73 74 20 2d 3e 20 41 20 6c 69 73 74  prList -> A list
23c40 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 73 20   of the columns 
23c50 74 6f 20 75 70 64 61 74 65 20 61 6e 64 20 74 68  to update and th
23c60 65 20 65 78 70 72 65 73 73 69 6f 6e 73 20 74 6f  e expressions to
23c70 20 75 70 64 61 74 65 0a 20 2a 20 20 20 20 20 20   update. *      
23c80 20 20 20 20 20 20 20 20 74 68 65 6d 20 74 6f 2e          them to.
23c90 20 53 65 65 20 73 71 6c 69 74 65 33 55 70 64 61   See sqlite3Upda
23ca0 74 65 28 29 20 64 6f 63 75 6d 65 6e 74 61 74 69  te() documentati
23cb0 6f 6e 20 6f 66 20 22 70 43 68 61 6e 67 65 73 22  on of "pChanges"
23cc0 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  . *             
23cd0 20 61 72 67 75 6d 65 6e 74 2e 0a 20 2a 0a 20 2a   argument.. *. *
23ce0 2f 0a 73 74 72 75 63 74 20 54 72 69 67 67 65 72  /.struct Trigger
23cf0 53 74 65 70 20 7b 0a 20 20 75 38 20 6f 70 3b 20  Step {.  u8 op; 
23d00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
23d10 20 4f 6e 65 20 6f 66 20 54 4b 5f 44 45 4c 45 54   One of TK_DELET
23d20 45 2c 20 54 4b 5f 55 50 44 41 54 45 2c 20 54 4b  E, TK_UPDATE, TK
23d30 5f 49 4e 53 45 52 54 2c 20 54 4b 5f 53 45 4c 45  _INSERT, TK_SELE
23d40 43 54 20 2a 2f 0a 20 20 75 38 20 6f 72 63 6f 6e  CT */.  u8 orcon
23d50 66 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  f;           /* 
23d60 4f 45 5f 52 6f 6c 6c 62 61 63 6b 20 65 74 63 2e  OE_Rollback etc.
23d70 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 20 2a 70   */.  Trigger *p
23d80 54 72 69 67 3b 20 20 20 20 20 20 2f 2a 20 54 68  Trig;      /* Th
23d90 65 20 74 72 69 67 67 65 72 20 74 68 61 74 20 74  e trigger that t
23da0 68 69 73 20 73 74 65 70 20 69 73 20 61 20 70 61  his step is a pa
23db0 72 74 20 6f 66 20 2a 2f 0a 20 20 53 65 6c 65 63  rt of */.  Selec
23dc0 74 20 2a 70 53 65 6c 65 63 74 3b 20 20 20 20 20  t *pSelect;     
23dd0 2f 2a 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d  /* SELECT statem
23de0 65 6e 74 20 6f 72 20 52 48 53 20 6f 66 20 49 4e  ent or RHS of IN
23df0 53 45 52 54 20 49 4e 54 4f 20 53 45 4c 45 43 54  SERT INTO SELECT
23e00 20 2e 2e 2e 20 2a 2f 0a 20 20 63 68 61 72 20 2a   ... */.  char *
23e10 7a 54 61 72 67 65 74 3b 20 20 20 20 20 20 20 2f  zTarget;       /
23e20 2a 20 54 61 72 67 65 74 20 74 61 62 6c 65 20 66  * Target table f
23e30 6f 72 20 44 45 4c 45 54 45 2c 20 55 50 44 41 54  or DELETE, UPDAT
23e40 45 2c 20 49 4e 53 45 52 54 20 2a 2f 0a 20 20 45  E, INSERT */.  E
23e50 78 70 72 20 2a 70 57 68 65 72 65 3b 20 20 20 20  xpr *pWhere;    
23e60 20 20 20 20 2f 2a 20 54 68 65 20 57 48 45 52 45      /* The WHERE
23e70 20 63 6c 61 75 73 65 20 66 6f 72 20 44 45 4c 45   clause for DELE
23e80 54 45 20 6f 72 20 55 50 44 41 54 45 20 73 74 65  TE or UPDATE ste
23e90 70 73 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74  ps */.  ExprList
23ea0 20 2a 70 45 78 70 72 4c 69 73 74 3b 20 2f 2a 20   *pExprList; /* 
23eb0 53 45 54 20 63 6c 61 75 73 65 20 66 6f 72 20 55  SET clause for U
23ec0 50 44 41 54 45 20 2a 2f 0a 20 20 49 64 4c 69 73  PDATE */.  IdLis
23ed0 74 20 2a 70 49 64 4c 69 73 74 3b 20 20 20 20 20  t *pIdList;     
23ee0 2f 2a 20 43 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20  /* Column names 
23ef0 66 6f 72 20 49 4e 53 45 52 54 20 2a 2f 0a 20 20  for INSERT */.  
23f00 55 70 73 65 72 74 20 2a 70 55 70 73 65 72 74 3b  Upsert *pUpsert;
23f10 20 20 20 20 20 2f 2a 20 55 70 73 65 72 74 20 63       /* Upsert c
23f20 6c 61 75 73 65 73 20 6f 6e 20 61 6e 20 49 4e 53  lauses on an INS
23f30 45 52 54 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a  ERT */.  char *z
23f40 53 70 61 6e 3b 20 20 20 20 20 20 20 20 20 2f 2a  Span;         /*
23f50 20 4f 72 69 67 69 6e 61 6c 20 53 51 4c 20 74 65   Original SQL te
23f60 78 74 20 6f 66 20 74 68 69 73 20 63 6f 6d 6d 61  xt of this comma
23f70 6e 64 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 53  nd */.  TriggerS
23f80 74 65 70 20 2a 70 4e 65 78 74 3b 20 20 2f 2a 20  tep *pNext;  /* 
23f90 4e 65 78 74 20 69 6e 20 74 68 65 20 6c 69 6e 6b  Next in the link
23fa0 2d 6c 69 73 74 20 2a 2f 0a 20 20 54 72 69 67 67  -list */.  Trigg
23fb0 65 72 53 74 65 70 20 2a 70 4c 61 73 74 3b 20 20  erStep *pLast;  
23fc0 2f 2a 20 4c 61 73 74 20 65 6c 65 6d 65 6e 74 20  /* Last element 
23fd0 69 6e 20 6c 69 6e 6b 2d 6c 69 73 74 2e 20 56 61  in link-list. Va
23fe0 6c 69 64 20 66 6f 72 20 31 73 74 20 65 6c 65 6d  lid for 1st elem
23ff0 20 6f 6e 6c 79 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a   only */.};../*.
24000 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  ** The following
24010 20 73 74 72 75 63 74 75 72 65 20 63 6f 6e 74 61   structure conta
24020 69 6e 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  ins information 
24030 75 73 65 64 20 62 79 20 74 68 65 20 73 71 6c 69  used by the sqli
24040 74 65 46 69 78 2e 2e 2e 0a 2a 2a 20 72 6f 75 74  teFix....** rout
24050 69 6e 65 73 20 61 73 20 74 68 65 79 20 77 61 6c  ines as they wal
24060 6b 20 74 68 65 20 70 61 72 73 65 20 74 72 65 65  k the parse tree
24070 20 74 6f 20 6d 61 6b 65 20 64 61 74 61 62 61 73   to make databas
24080 65 20 72 65 66 65 72 65 6e 63 65 73 0a 2a 2a 20  e references.** 
24090 65 78 70 6c 69 63 69 74 2e 0a 2a 2f 0a 74 79 70  explicit..*/.typ
240a0 65 64 65 66 20 73 74 72 75 63 74 20 44 62 46 69  edef struct DbFi
240b0 78 65 72 20 44 62 46 69 78 65 72 3b 0a 73 74 72  xer DbFixer;.str
240c0 75 63 74 20 44 62 46 69 78 65 72 20 7b 0a 20 20  uct DbFixer {.  
240d0 50 61 72 73 65 20 2a 70 50 61 72 73 65 3b 20 20  Parse *pParse;  
240e0 20 20 20 20 2f 2a 20 54 68 65 20 70 61 72 73 69      /* The parsi
240f0 6e 67 20 63 6f 6e 74 65 78 74 2e 20 20 45 72 72  ng context.  Err
24100 6f 72 20 6d 65 73 73 61 67 65 73 20 77 72 69 74  or messages writ
24110 74 65 6e 20 68 65 72 65 20 2a 2f 0a 20 20 53 63  ten here */.  Sc
24120 68 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20 20  hema *pSchema;  
24130 20 20 2f 2a 20 46 69 78 20 69 74 65 6d 73 20 74    /* Fix items t
24140 6f 20 74 68 69 73 20 73 63 68 65 6d 61 20 2a 2f  o this schema */
24150 0a 20 20 69 6e 74 20 62 56 61 72 4f 6e 6c 79 3b  .  int bVarOnly;
24160 20 20 20 20 20 20 20 2f 2a 20 43 68 65 63 6b 20         /* Check 
24170 66 6f 72 20 76 61 72 69 61 62 6c 65 20 72 65 66  for variable ref
24180 65 72 65 6e 63 65 73 20 6f 6e 6c 79 20 2a 2f 0a  erences only */.
24190 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 44    const char *zD
241a0 62 3b 20 20 20 20 2f 2a 20 4d 61 6b 65 20 73 75  b;    /* Make su
241b0 72 65 20 61 6c 6c 20 6f 62 6a 65 63 74 73 20 61  re all objects a
241c0 72 65 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20  re contained in 
241d0 74 68 69 73 20 64 61 74 61 62 61 73 65 20 2a 2f  this database */
241e0 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  .  const char *z
241f0 54 79 70 65 3b 20 20 2f 2a 20 54 79 70 65 20 6f  Type;  /* Type o
24200 66 20 74 68 65 20 63 6f 6e 74 61 69 6e 65 72 20  f the container 
24210 2d 20 75 73 65 64 20 66 6f 72 20 65 72 72 6f 72  - used for error
24220 20 6d 65 73 73 61 67 65 73 20 2a 2f 0a 20 20 63   messages */.  c
24230 6f 6e 73 74 20 54 6f 6b 65 6e 20 2a 70 4e 61 6d  onst Token *pNam
24240 65 3b 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68  e; /* Name of th
24250 65 20 63 6f 6e 74 61 69 6e 65 72 20 2d 20 75 73  e container - us
24260 65 64 20 66 6f 72 20 65 72 72 6f 72 20 6d 65 73  ed for error mes
24270 73 61 67 65 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a  sages */.};../*.
24280 2a 2a 20 41 6e 20 6f 62 6a 65 63 74 65 64 20 75  ** An objected u
24290 73 65 64 20 74 6f 20 61 63 63 75 6d 75 6c 61 74  sed to accumulat
242a0 65 20 74 68 65 20 74 65 78 74 20 6f 66 20 61 20  e the text of a 
242b0 73 74 72 69 6e 67 20 77 68 65 72 65 20 77 65 0a  string where we.
242c0 2a 2a 20 64 6f 20 6e 6f 74 20 6e 65 63 65 73 73  ** do not necess
242d0 61 72 69 6c 79 20 6b 6e 6f 77 20 68 6f 77 20 62  arily know how b
242e0 69 67 20 74 68 65 20 73 74 72 69 6e 67 20 77 69  ig the string wi
242f0 6c 6c 20 62 65 20 69 6e 20 74 68 65 20 65 6e 64  ll be in the end
24300 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 73 71 6c 69  ..*/.struct sqli
24310 74 65 33 5f 73 74 72 20 7b 0a 20 20 73 71 6c 69  te3_str {.  sqli
24320 74 65 33 20 2a 64 62 3b 20 20 20 20 20 20 20 20  te3 *db;        
24330 20 2f 2a 20 4f 70 74 69 6f 6e 61 6c 20 64 61 74   /* Optional dat
24340 61 62 61 73 65 20 66 6f 72 20 6c 6f 6f 6b 61 73  abase for lookas
24350 69 64 65 2e 20 20 43 61 6e 20 62 65 20 4e 55 4c  ide.  Can be NUL
24360 4c 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 54 65  L */.  char *zTe
24370 78 74 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54  xt;         /* T
24380 68 65 20 73 74 72 69 6e 67 20 63 6f 6c 6c 65 63  he string collec
24390 74 65 64 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20  ted so far */.  
243a0 75 33 32 20 20 6e 41 6c 6c 6f 63 3b 20 20 20 20  u32  nAlloc;    
243b0 20 20 20 20 20 2f 2a 20 41 6d 6f 75 6e 74 20 6f       /* Amount o
243c0 66 20 73 70 61 63 65 20 61 6c 6c 6f 63 61 74 65  f space allocate
243d0 64 20 69 6e 20 7a 54 65 78 74 20 2a 2f 0a 20 20  d in zText */.  
243e0 75 33 32 20 20 6d 78 41 6c 6c 6f 63 3b 20 20 20  u32  mxAlloc;   
243f0 20 20 20 20 20 2f 2a 20 4d 61 78 69 6d 75 6d 20       /* Maximum 
24400 61 6c 6c 6f 77 65 64 20 61 6c 6c 6f 63 61 74 69  allowed allocati
24410 6f 6e 2e 20 20 30 20 66 6f 72 20 6e 6f 20 6d 61  on.  0 for no ma
24420 6c 6c 6f 63 20 75 73 61 67 65 20 2a 2f 0a 20 20  lloc usage */.  
24430 75 33 32 20 20 6e 43 68 61 72 3b 20 20 20 20 20  u32  nChar;     
24440 20 20 20 20 20 2f 2a 20 4c 65 6e 67 74 68 20 6f       /* Length o
24450 66 20 74 68 65 20 73 74 72 69 6e 67 20 73 6f 20  f the string so 
24460 66 61 72 20 2a 2f 0a 20 20 75 38 20 20 20 61 63  far */.  u8   ac
24470 63 45 72 72 6f 72 3b 20 20 20 20 20 20 20 2f 2a  cError;       /*
24480 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 20 6f 72   SQLITE_NOMEM or
24490 20 53 51 4c 49 54 45 5f 54 4f 4f 42 49 47 20 2a   SQLITE_TOOBIG *
244a0 2f 0a 20 20 75 38 20 20 20 70 72 69 6e 74 66 46  /.  u8   printfF
244b0 6c 61 67 73 3b 20 20 20 20 2f 2a 20 53 51 4c 49  lags;    /* SQLI
244c0 54 45 5f 50 52 49 4e 54 46 20 66 6c 61 67 73 20  TE_PRINTF flags 
244d0 62 65 6c 6f 77 20 2a 2f 0a 7d 3b 0a 23 64 65 66  below */.};.#def
244e0 69 6e 65 20 53 51 4c 49 54 45 5f 50 52 49 4e 54  ine SQLITE_PRINT
244f0 46 5f 49 4e 54 45 52 4e 41 4c 20 30 78 30 31 20  F_INTERNAL 0x01 
24500 20 2f 2a 20 49 6e 74 65 72 6e 61 6c 2d 75 73 65   /* Internal-use
24510 2d 6f 6e 6c 79 20 63 6f 6e 76 65 72 74 65 72 73  -only converters
24520 20 61 6c 6c 6f 77 65 64 20 2a 2f 0a 23 64 65 66   allowed */.#def
24530 69 6e 65 20 53 51 4c 49 54 45 5f 50 52 49 4e 54  ine SQLITE_PRINT
24540 46 5f 53 51 4c 46 55 4e 43 20 20 30 78 30 32 20  F_SQLFUNC  0x02 
24550 20 2f 2a 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e   /* SQL function
24560 20 61 72 67 75 6d 65 6e 74 73 20 74 6f 20 56 58   arguments to VX
24570 50 72 69 6e 74 66 20 2a 2f 0a 23 64 65 66 69 6e  Printf */.#defin
24580 65 20 53 51 4c 49 54 45 5f 50 52 49 4e 54 46 5f  e SQLITE_PRINTF_
24590 4d 41 4c 4c 4f 43 45 44 20 30 78 30 34 20 20 2f  MALLOCED 0x04  /
245a0 2a 20 54 72 75 65 20 69 66 20 78 54 65 78 74 20  * True if xText 
245b0 69 73 20 61 6c 6c 6f 63 61 74 65 64 20 73 70 61  is allocated spa
245c0 63 65 20 2a 2f 0a 0a 23 64 65 66 69 6e 65 20 69  ce */..#define i
245d0 73 4d 61 6c 6c 6f 63 65 64 28 58 29 20 20 28 28  sMalloced(X)  ((
245e0 28 58 29 2d 3e 70 72 69 6e 74 66 46 6c 61 67 73  (X)->printfFlags
245f0 20 26 20 53 51 4c 49 54 45 5f 50 52 49 4e 54 46   & SQLITE_PRINTF
24600 5f 4d 41 4c 4c 4f 43 45 44 29 21 3d 30 29 0a 0a  _MALLOCED)!=0)..
24610 0a 2f 2a 0a 2a 2a 20 41 20 70 6f 69 6e 74 65 72  ./*.** A pointer
24620 20 74 6f 20 74 68 69 73 20 73 74 72 75 63 74 75   to this structu
24630 72 65 20 69 73 20 75 73 65 64 20 74 6f 20 63 6f  re is used to co
24640 6d 6d 75 6e 69 63 61 74 65 20 69 6e 66 6f 72 6d  mmunicate inform
24650 61 74 69 6f 6e 0a 2a 2a 20 66 72 6f 6d 20 73 71  ation.** from sq
24660 6c 69 74 65 33 49 6e 69 74 20 61 6e 64 20 4f 50  lite3Init and OP
24670 5f 50 61 72 73 65 53 63 68 65 6d 61 20 69 6e 74  _ParseSchema int
24680 6f 20 74 68 65 20 73 71 6c 69 74 65 33 49 6e 69  o the sqlite3Ini
24690 74 43 61 6c 6c 62 61 63 6b 2e 0a 2a 2f 0a 74 79  tCallback..*/.ty
246a0 70 65 64 65 66 20 73 74 72 75 63 74 20 7b 0a 20  pedef struct {. 
246b0 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 20 20 20   sqlite3 *db;   
246c0 20 20 20 20 20 2f 2a 20 54 68 65 20 64 61 74 61       /* The data
246d0 62 61 73 65 20 62 65 69 6e 67 20 69 6e 69 74 69  base being initi
246e0 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 63 68 61 72  alized */.  char
246f0 20 2a 2a 70 7a 45 72 72 4d 73 67 3b 20 20 20 20   **pzErrMsg;    
24700 2f 2a 20 45 72 72 6f 72 20 6d 65 73 73 61 67 65  /* Error message
24710 20 73 74 6f 72 65 64 20 68 65 72 65 20 2a 2f 0a   stored here */.
24720 20 20 69 6e 74 20 69 44 62 3b 20 20 20 20 20 20    int iDb;      
24730 20 20 20 20 20 20 2f 2a 20 30 20 66 6f 72 20 6d        /* 0 for m
24740 61 69 6e 20 64 61 74 61 62 61 73 65 2e 20 20 31  ain database.  1
24750 20 66 6f 72 20 54 45 4d 50 2c 20 32 2e 2e 20 66   for TEMP, 2.. f
24760 6f 72 20 41 54 54 41 43 48 65 64 20 2a 2f 0a 20  or ATTACHed */. 
24770 20 69 6e 74 20 72 63 3b 20 20 20 20 20 20 20 20   int rc;        
24780 20 20 20 20 20 2f 2a 20 52 65 73 75 6c 74 20 63       /* Result c
24790 6f 64 65 20 73 74 6f 72 65 64 20 68 65 72 65 20  ode stored here 
247a0 2a 2f 0a 20 20 75 33 32 20 6d 49 6e 69 74 46 6c  */.  u32 mInitFl
247b0 61 67 73 3b 20 20 20 20 20 2f 2a 20 46 6c 61 67  ags;     /* Flag
247c0 73 20 63 6f 6e 74 72 6f 6c 6c 69 6e 67 20 65 72  s controlling er
247d0 72 6f 72 20 6d 65 73 73 61 67 65 73 20 2a 2f 0a  ror messages */.
247e0 20 20 75 33 32 20 6e 49 6e 69 74 52 6f 77 3b 20    u32 nInitRow; 
247f0 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
24800 6f 66 20 72 6f 77 73 20 70 72 6f 63 65 73 73 65  of rows processe
24810 64 20 2a 2f 0a 7d 20 49 6e 69 74 44 61 74 61 3b  d */.} InitData;
24820 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20  ../*.** Allowed 
24830 76 61 6c 75 65 73 20 66 6f 72 20 6d 49 6e 69 74  values for mInit
24840 46 6c 61 67 73 0a 2a 2f 0a 23 64 65 66 69 6e 65  Flags.*/.#define
24850 20 49 4e 49 54 46 4c 41 47 5f 41 6c 74 65 72 54   INITFLAG_AlterT
24860 61 62 6c 65 20 20 20 30 78 30 30 30 31 20 20 2f  able   0x0001  /
24870 2a 20 54 68 69 73 20 69 73 20 61 20 72 65 70 61  * This is a repa
24880 72 73 65 20 61 66 74 65 72 20 41 4c 54 45 52 20  rse after ALTER 
24890 54 41 42 4c 45 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20  TABLE */../*.** 
248a0 53 74 72 75 63 74 75 72 65 20 63 6f 6e 74 61 69  Structure contai
248b0 6e 69 6e 67 20 67 6c 6f 62 61 6c 20 63 6f 6e 66  ning global conf
248c0 69 67 75 72 61 74 69 6f 6e 20 64 61 74 61 20 66  iguration data f
248d0 6f 72 20 74 68 65 20 53 51 4c 69 74 65 20 6c 69  or the SQLite li
248e0 62 72 61 72 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 69  brary..**.** Thi
248f0 73 20 73 74 72 75 63 74 75 72 65 20 61 6c 73 6f  s structure also
24900 20 63 6f 6e 74 61 69 6e 73 20 73 6f 6d 65 20 73   contains some s
24910 74 61 74 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  tate information
24920 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53 71 6c 69  ..*/.struct Sqli
24930 74 65 33 43 6f 6e 66 69 67 20 7b 0a 20 20 69 6e  te3Config {.  in
24940 74 20 62 4d 65 6d 73 74 61 74 3b 20 20 20 20 20  t bMemstat;     
24950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24960 2f 2a 20 54 72 75 65 20 74 6f 20 65 6e 61 62 6c  /* True to enabl
24970 65 20 6d 65 6d 6f 72 79 20 73 74 61 74 75 73 20  e memory status 
24980 2a 2f 0a 20 20 69 6e 74 20 62 43 6f 72 65 4d 75  */.  int bCoreMu
24990 74 65 78 3b 20 20 20 20 20 20 20 20 20 20 20 20  tex;            
249a0 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 74         /* True t
249b0 6f 20 65 6e 61 62 6c 65 20 63 6f 72 65 20 6d 75  o enable core mu
249c0 74 65 78 69 6e 67 20 2a 2f 0a 20 20 69 6e 74 20  texing */.  int 
249d0 62 46 75 6c 6c 4d 75 74 65 78 3b 20 20 20 20 20  bFullMutex;     
249e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
249f0 20 54 72 75 65 20 74 6f 20 65 6e 61 62 6c 65 20   True to enable 
24a00 66 75 6c 6c 20 6d 75 74 65 78 69 6e 67 20 2a 2f  full mutexing */
24a10 0a 20 20 69 6e 74 20 62 4f 70 65 6e 55 72 69 3b  .  int bOpenUri;
24a20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24a30 20 20 20 20 20 2f 2a 20 54 72 75 65 20 74 6f 20       /* True to 
24a40 69 6e 74 65 72 70 72 65 74 20 66 69 6c 65 6e 61  interpret filena
24a50 6d 65 73 20 61 73 20 55 52 49 73 20 2a 2f 0a 20  mes as URIs */. 
24a60 20 69 6e 74 20 62 55 73 65 43 69 73 3b 20 20 20   int bUseCis;   
24a70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24a80 20 20 20 2f 2a 20 55 73 65 20 63 6f 76 65 72 69     /* Use coveri
24a90 6e 67 20 69 6e 64 69 63 65 73 20 66 6f 72 20 66  ng indices for f
24aa0 75 6c 6c 2d 73 63 61 6e 73 20 2a 2f 0a 20 20 69  ull-scans */.  i
24ab0 6e 74 20 62 53 6d 61 6c 6c 4d 61 6c 6c 6f 63 3b  nt bSmallMalloc;
24ac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24ad0 20 2f 2a 20 41 76 6f 69 64 20 6c 61 72 67 65 20   /* Avoid large 
24ae0 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f  memory allocatio
24af0 6e 73 20 69 66 20 74 72 75 65 20 2a 2f 0a 20 20  ns if true */.  
24b00 69 6e 74 20 6d 78 53 74 72 6c 65 6e 3b 20 20 20  int mxStrlen;   
24b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24b20 20 20 2f 2a 20 4d 61 78 69 6d 75 6d 20 73 74 72    /* Maximum str
24b30 69 6e 67 20 6c 65 6e 67 74 68 20 2a 2f 0a 20 20  ing length */.  
24b40 69 6e 74 20 6e 65 76 65 72 43 6f 72 72 75 70 74  int neverCorrupt
24b50 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
24b60 20 20 2f 2a 20 44 61 74 61 62 61 73 65 20 69 73    /* Database is
24b70 20 61 6c 77 61 79 73 20 77 65 6c 6c 2d 66 6f 72   always well-for
24b80 6d 65 64 20 2a 2f 0a 20 20 69 6e 74 20 73 7a 4c  med */.  int szL
24b90 6f 6f 6b 61 73 69 64 65 3b 20 20 20 20 20 20 20  ookaside;       
24ba0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 65             /* De
24bb0 66 61 75 6c 74 20 6c 6f 6f 6b 61 73 69 64 65 20  fault lookaside 
24bc0 62 75 66 66 65 72 20 73 69 7a 65 20 2a 2f 0a 20  buffer size */. 
24bd0 20 69 6e 74 20 6e 4c 6f 6f 6b 61 73 69 64 65 3b   int nLookaside;
24be0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24bf0 20 20 20 2f 2a 20 44 65 66 61 75 6c 74 20 6c 6f     /* Default lo
24c00 6f 6b 61 73 69 64 65 20 62 75 66 66 65 72 20 63  okaside buffer c
24c10 6f 75 6e 74 20 2a 2f 0a 20 20 69 6e 74 20 6e 53  ount */.  int nS
24c20 74 6d 74 53 70 69 6c 6c 3b 20 20 20 20 20 20 20  tmtSpill;       
24c30 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53              /* S
24c40 74 6d 74 2d 6a 6f 75 72 6e 61 6c 20 73 70 69 6c  tmt-journal spil
24c50 6c 2d 74 6f 2d 64 69 73 6b 20 74 68 72 65 73 68  l-to-disk thresh
24c60 6f 6c 64 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33  old */.  sqlite3
24c70 5f 6d 65 6d 5f 6d 65 74 68 6f 64 73 20 6d 3b 20  _mem_methods m; 
24c80 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f             /* Lo
24c90 77 2d 6c 65 76 65 6c 20 6d 65 6d 6f 72 79 20 61  w-level memory a
24ca0 6c 6c 6f 63 61 74 69 6f 6e 20 69 6e 74 65 72 66  llocation interf
24cb0 61 63 65 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33  ace */.  sqlite3
24cc0 5f 6d 75 74 65 78 5f 6d 65 74 68 6f 64 73 20 6d  _mutex_methods m
24cd0 75 74 65 78 3b 20 20 20 20 20 20 2f 2a 20 4c 6f  utex;      /* Lo
24ce0 77 2d 6c 65 76 65 6c 20 6d 75 74 65 78 20 69 6e  w-level mutex in
24cf0 74 65 72 66 61 63 65 20 2a 2f 0a 20 20 73 71 6c  terface */.  sql
24d00 69 74 65 33 5f 70 63 61 63 68 65 5f 6d 65 74 68  ite3_pcache_meth
24d10 6f 64 73 32 20 70 63 61 63 68 65 32 3b 20 20 2f  ods2 pcache2;  /
24d20 2a 20 4c 6f 77 2d 6c 65 76 65 6c 20 70 61 67 65  * Low-level page
24d30 2d 63 61 63 68 65 20 69 6e 74 65 72 66 61 63 65  -cache interface
24d40 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 48 65 61   */.  void *pHea
24d50 70 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  p;              
24d60 20 20 20 20 20 20 20 20 2f 2a 20 48 65 61 70 20          /* Heap 
24d70 73 74 6f 72 61 67 65 20 73 70 61 63 65 20 2a 2f  storage space */
24d80 0a 20 20 69 6e 74 20 6e 48 65 61 70 3b 20 20 20  .  int nHeap;   
24d90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24da0 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20       /* Size of 
24db0 70 48 65 61 70 5b 5d 20 2a 2f 0a 20 20 69 6e 74  pHeap[] */.  int
24dc0 20 6d 6e 52 65 71 2c 20 6d 78 52 65 71 3b 20 20   mnReq, mxReq;  
24dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
24de0 2a 20 4d 69 6e 20 61 6e 64 20 6d 61 78 20 68 65  * Min and max he
24df0 61 70 20 72 65 71 75 65 73 74 73 20 73 69 7a 65  ap requests size
24e00 73 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 69  s */.  sqlite3_i
24e10 6e 74 36 34 20 73 7a 4d 6d 61 70 3b 20 20 20 20  nt64 szMmap;    
24e20 20 20 20 20 20 20 20 20 20 2f 2a 20 6d 6d 61 70           /* mmap
24e30 28 29 20 73 70 61 63 65 20 70 65 72 20 6f 70 65  () space per ope
24e40 6e 20 66 69 6c 65 20 2a 2f 0a 20 20 73 71 6c 69  n file */.  sqli
24e50 74 65 33 5f 69 6e 74 36 34 20 6d 78 4d 6d 61 70  te3_int64 mxMmap
24e60 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
24e70 20 4d 61 78 69 6d 75 6d 20 76 61 6c 75 65 20 66   Maximum value f
24e80 6f 72 20 73 7a 4d 6d 61 70 20 2a 2f 0a 20 20 76  or szMmap */.  v
24e90 6f 69 64 20 2a 70 50 61 67 65 3b 20 20 20 20 20  oid *pPage;     
24ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24eb0 20 2f 2a 20 50 61 67 65 20 63 61 63 68 65 20 6d   /* Page cache m
24ec0 65 6d 6f 72 79 20 2a 2f 0a 20 20 69 6e 74 20 73  emory */.  int s
24ed0 7a 50 61 67 65 3b 20 20 20 20 20 20 20 20 20 20  zPage;          
24ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
24ef0 53 69 7a 65 20 6f 66 20 65 61 63 68 20 70 61 67  Size of each pag
24f00 65 20 69 6e 20 70 50 61 67 65 5b 5d 20 2a 2f 0a  e in pPage[] */.
24f10 20 20 69 6e 74 20 6e 50 61 67 65 3b 20 20 20 20    int nPage;    
24f20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24f30 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
24f40 20 70 61 67 65 73 20 69 6e 20 70 50 61 67 65 5b   pages in pPage[
24f50 5d 20 2a 2f 0a 20 20 69 6e 74 20 6d 78 50 61 72  ] */.  int mxPar
24f60 73 65 72 53 74 61 63 6b 3b 20 20 20 20 20 20 20  serStack;       
24f70 20 20 20 20 20 20 20 20 20 2f 2a 20 6d 61 78 69           /* maxi
24f80 6d 75 6d 20 64 65 70 74 68 20 6f 66 20 74 68 65  mum depth of the
24f90 20 70 61 72 73 65 72 20 73 74 61 63 6b 20 2a 2f   parser stack */
24fa0 0a 20 20 69 6e 74 20 73 68 61 72 65 64 43 61 63  .  int sharedCac
24fb0 68 65 45 6e 61 62 6c 65 64 3b 20 20 20 20 20 20  heEnabled;      
24fc0 20 20 20 20 20 2f 2a 20 74 72 75 65 20 69 66 20       /* true if 
24fd0 73 68 61 72 65 64 2d 63 61 63 68 65 20 6d 6f 64  shared-cache mod
24fe0 65 20 65 6e 61 62 6c 65 64 20 2a 2f 0a 20 20 75  e enabled */.  u
24ff0 33 32 20 73 7a 50 6d 61 3b 20 20 20 20 20 20 20  32 szPma;       
25000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25010 20 2f 2a 20 4d 61 78 69 6d 75 6d 20 53 6f 72 74   /* Maximum Sort
25020 65 72 20 50 4d 41 20 73 69 7a 65 20 2a 2f 0a 20  er PMA size */. 
25030 20 2f 2a 20 54 68 65 20 61 62 6f 76 65 20 6d 69   /* The above mi
25040 67 68 74 20 62 65 20 69 6e 69 74 69 61 6c 69 7a  ght be initializ
25050 65 64 20 74 6f 20 6e 6f 6e 2d 7a 65 72 6f 2e 20  ed to non-zero. 
25060 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6e   The following n
25070 65 65 64 20 74 6f 20 61 6c 77 61 79 73 0a 20 20  eed to always.  
25080 2a 2a 20 69 6e 69 74 69 61 6c 6c 79 20 62 65 20  ** initially be 
25090 7a 65 72 6f 2c 20 68 6f 77 65 76 65 72 2e 20 2a  zero, however. *
250a0 2f 0a 20 20 69 6e 74 20 69 73 49 6e 69 74 3b 20  /.  int isInit; 
250b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
250c0 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 61 66        /* True af
250d0 74 65 72 20 69 6e 69 74 69 61 6c 69 7a 61 74 69  ter initializati
250e0 6f 6e 20 68 61 73 20 66 69 6e 69 73 68 65 64 20  on has finished 
250f0 2a 2f 0a 20 20 69 6e 74 20 69 6e 50 72 6f 67 72  */.  int inProgr
25100 65 73 73 3b 20 20 20 20 20 20 20 20 20 20 20 20  ess;            
25110 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 77         /* True w
25120 68 69 6c 65 20 69 6e 69 74 69 61 6c 69 7a 61 74  hile initializat
25130 69 6f 6e 20 69 6e 20 70 72 6f 67 72 65 73 73 20  ion in progress 
25140 2a 2f 0a 20 20 69 6e 74 20 69 73 4d 75 74 65 78  */.  int isMutex
25150 49 6e 69 74 3b 20 20 20 20 20 20 20 20 20 20 20  Init;           
25160 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 61         /* True a
25170 66 74 65 72 20 6d 75 74 65 78 65 73 20 61 72 65  fter mutexes are
25180 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a   initialized */.
25190 20 20 69 6e 74 20 69 73 4d 61 6c 6c 6f 63 49 6e    int isMallocIn
251a0 69 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  it;             
251b0 20 20 20 20 2f 2a 20 54 72 75 65 20 61 66 74 65      /* True afte
251c0 72 20 6d 61 6c 6c 6f 63 20 69 73 20 69 6e 69 74  r malloc is init
251d0 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 69 6e 74  ialized */.  int
251e0 20 69 73 50 43 61 63 68 65 49 6e 69 74 3b 20 20   isPCacheInit;  
251f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
25200 2a 20 54 72 75 65 20 61 66 74 65 72 20 6d 61 6c  * True after mal
25210 6c 6f 63 20 69 73 20 69 6e 69 74 69 61 6c 69 7a  loc is initializ
25220 65 64 20 2a 2f 0a 20 20 69 6e 74 20 6e 52 65 66  ed */.  int nRef
25230 49 6e 69 74 4d 75 74 65 78 3b 20 20 20 20 20 20  InitMutex;      
25240 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
25250 62 65 72 20 6f 66 20 75 73 65 72 73 20 6f 66 20  ber of users of 
25260 70 49 6e 69 74 4d 75 74 65 78 20 2a 2f 0a 20 20  pInitMutex */.  
25270 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 20 2a 70  sqlite3_mutex *p
25280 49 6e 69 74 4d 75 74 65 78 3b 20 20 20 20 20 20  InitMutex;      
25290 20 20 2f 2a 20 4d 75 74 65 78 20 75 73 65 64 20    /* Mutex used 
252a0 62 79 20 73 71 6c 69 74 65 33 5f 69 6e 69 74 69  by sqlite3_initi
252b0 61 6c 69 7a 65 28 29 20 2a 2f 0a 20 20 76 6f 69  alize() */.  voi
252c0 64 20 28 2a 78 4c 6f 67 29 28 76 6f 69 64 2a 2c  d (*xLog)(void*,
252d0 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29  int,const char*)
252e0 3b 20 2f 2a 20 46 75 6e 63 74 69 6f 6e 20 66 6f  ; /* Function fo
252f0 72 20 6c 6f 67 67 69 6e 67 20 2a 2f 0a 20 20 76  r logging */.  v
25300 6f 69 64 20 2a 70 4c 6f 67 41 72 67 3b 20 20 20  oid *pLogArg;   
25310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25320 20 20 20 20 2f 2a 20 46 69 72 73 74 20 61 72 67      /* First arg
25330 75 6d 65 6e 74 20 74 6f 20 78 4c 6f 67 28 29 20  ument to xLog() 
25340 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
25350 5f 45 4e 41 42 4c 45 5f 53 51 4c 4c 4f 47 0a 20  _ENABLE_SQLLOG. 
25360 20 76 6f 69 64 28 2a 78 53 71 6c 6c 6f 67 29 28   void(*xSqllog)(
25370 76 6f 69 64 2a 2c 73 71 6c 69 74 65 33 2a 2c 63  void*,sqlite3*,c
25380 6f 6e 73 74 20 63 68 61 72 2a 2c 20 69 6e 74 29  onst char*, int)
25390 3b 0a 20 20 76 6f 69 64 20 2a 70 53 71 6c 6c 6f  ;.  void *pSqllo
253a0 67 41 72 67 3b 0a 23 65 6e 64 69 66 0a 23 69 66  gArg;.#endif.#if
253b0 64 65 66 20 53 51 4c 49 54 45 5f 56 44 42 45 5f  def SQLITE_VDBE_
253c0 43 4f 56 45 52 41 47 45 0a 20 20 2f 2a 20 54 68  COVERAGE.  /* Th
253d0 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 63 61 6c 6c  e following call
253e0 62 61 63 6b 20 28 69 66 20 6e 6f 74 20 4e 55 4c  back (if not NUL
253f0 4c 29 20 69 73 20 69 6e 76 6f 6b 65 64 20 6f 6e  L) is invoked on
25400 20 65 76 65 72 79 20 56 44 42 45 20 62 72 61 6e   every VDBE bran
25410 63 68 0a 20 20 2a 2a 20 6f 70 65 72 61 74 69 6f  ch.  ** operatio
25420 6e 2e 20 20 53 65 74 20 74 68 65 20 63 61 6c 6c  n.  Set the call
25430 62 61 63 6b 20 75 73 69 6e 67 20 53 51 4c 49 54  back using SQLIT
25440 45 5f 54 45 53 54 43 54 52 4c 5f 56 44 42 45 5f  E_TESTCTRL_VDBE_
25450 43 4f 56 45 52 41 47 45 2e 0a 20 20 2a 2f 0a 20  COVERAGE..  */. 
25460 20 76 6f 69 64 20 28 2a 78 56 64 62 65 42 72 61   void (*xVdbeBra
25470 6e 63 68 29 28 76 6f 69 64 2a 2c 75 6e 73 69 67  nch)(void*,unsig
25480 6e 65 64 20 69 53 72 63 4c 69 6e 65 2c 75 38 20  ned iSrcLine,u8 
25490 65 54 68 69 73 2c 75 38 20 65 4d 78 29 3b 20 20  eThis,u8 eMx);  
254a0 2f 2a 20 43 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20  /* Callback */. 
254b0 20 76 6f 69 64 20 2a 70 56 64 62 65 42 72 61 6e   void *pVdbeBran
254c0 63 68 41 72 67 3b 20 20 20 20 20 20 20 20 20 20  chArg;          
254d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
254e0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 31 73             /* 1s
254f0 74 20 61 72 67 75 6d 65 6e 74 20 2a 2f 0a 23 65  t argument */.#e
25500 6e 64 69 66 0a 23 69 66 64 65 66 20 53 51 4c 49  ndif.#ifdef SQLI
25510 54 45 5f 45 4e 41 42 4c 45 5f 44 45 53 45 52 49  TE_ENABLE_DESERI
25520 41 4c 49 5a 45 0a 20 20 73 71 6c 69 74 65 33 5f  ALIZE.  sqlite3_
25530 69 6e 74 36 34 20 6d 78 4d 65 6d 64 62 53 69 7a  int64 mxMemdbSiz
25540 65 3b 20 20 20 20 20 20 20 20 2f 2a 20 44 65 66  e;        /* Def
25550 61 75 6c 74 20 6d 61 78 20 6d 65 6d 64 62 20 73  ault max memdb s
25560 69 7a 65 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 69  ize */.#endif.#i
25570 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 55 4e 54  fndef SQLITE_UNT
25580 45 53 54 41 42 4c 45 0a 20 20 69 6e 74 20 28 2a  ESTABLE.  int (*
25590 78 54 65 73 74 43 61 6c 6c 62 61 63 6b 29 28 69  xTestCallback)(i
255a0 6e 74 29 3b 20 20 20 20 20 20 20 20 2f 2a 20 49  nt);        /* I
255b0 6e 76 6f 6b 65 64 20 62 79 20 73 71 6c 69 74 65  nvoked by sqlite
255c0 33 46 61 75 6c 74 53 69 6d 28 29 20 2a 2f 0a 23  3FaultSim() */.#
255d0 65 6e 64 69 66 0a 20 20 69 6e 74 20 62 4c 6f 63  endif.  int bLoc
255e0 61 6c 74 69 6d 65 46 61 75 6c 74 3b 20 20 20 20  altimeFault;    
255f0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75            /* Tru
25600 65 20 74 6f 20 66 61 69 6c 20 6c 6f 63 61 6c 74  e to fail localt
25610 69 6d 65 28 29 20 63 61 6c 6c 73 20 2a 2f 0a 20  ime() calls */. 
25620 20 69 6e 74 20 62 49 6e 74 65 72 6e 61 6c 46 75   int bInternalFu
25630 6e 63 74 69 6f 6e 73 3b 20 20 20 20 20 20 20 20  nctions;        
25640 20 20 20 2f 2a 20 49 6e 74 65 72 6e 61 6c 20 53     /* Internal S
25650 51 4c 20 66 75 6e 63 74 69 6f 6e 73 20 61 72 65  QL functions are
25660 20 76 69 73 69 62 6c 65 20 2a 2f 0a 20 20 69 6e   visible */.  in
25670 74 20 69 4f 6e 63 65 52 65 73 65 74 54 68 72 65  t iOnceResetThre
25680 73 68 6f 6c 64 3b 20 20 20 20 20 20 20 20 20 20  shold;          
25690 2f 2a 20 57 68 65 6e 20 74 6f 20 72 65 73 65 74  /* When to reset
256a0 20 4f 50 5f 4f 6e 63 65 20 63 6f 75 6e 74 65 72   OP_Once counter
256b0 73 20 2a 2f 0a 20 20 75 33 32 20 73 7a 53 6f 72  s */.  u32 szSor
256c0 74 65 72 52 65 66 3b 20 20 20 20 20 20 20 20 20  terRef;         
256d0 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 69 6e 20           /* Min 
256e0 73 69 7a 65 20 69 6e 20 62 79 74 65 73 20 74 6f  size in bytes to
256f0 20 75 73 65 20 73 6f 72 74 65 72 2d 72 65 66 73   use sorter-refs
25700 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68   */.};../*.** Th
25710 69 73 20 6d 61 63 72 6f 20 69 73 20 75 73 65 64  is macro is used
25720 20 69 6e 73 69 64 65 20 6f 66 20 61 73 73 65 72   inside of asser
25730 74 28 29 20 73 74 61 74 65 6d 65 6e 74 73 20 74  t() statements t
25740 6f 20 69 6e 64 69 63 61 74 65 20 74 68 61 74 0a  o indicate that.
25750 2a 2a 20 74 68 65 20 61 73 73 65 72 74 20 69 73  ** the assert is
25760 20 6f 6e 6c 79 20 76 61 6c 69 64 20 6f 6e 20 61   only valid on a
25770 20 77 65 6c 6c 2d 66 6f 72 6d 65 64 20 64 61 74   well-formed dat
25780 61 62 61 73 65 2e 20 20 49 6e 73 74 65 61 64 20  abase.  Instead 
25790 6f 66 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 61 73  of:.**.**     as
257a0 73 65 72 74 28 20 58 20 29 3b 0a 2a 2a 0a 2a 2a  sert( X );.**.**
257b0 20 4f 6e 65 20 77 72 69 74 65 73 3a 0a 2a 2a 0a   One writes:.**.
257c0 2a 2a 20 20 20 20 20 61 73 73 65 72 74 28 20 58  **     assert( X
257d0 20 7c 7c 20 43 4f 52 52 55 50 54 5f 44 42 20 29   || CORRUPT_DB )
257e0 3b 0a 2a 2a 0a 2a 2a 20 43 4f 52 52 55 50 54 5f  ;.**.** CORRUPT_
257f0 44 42 20 69 73 20 74 72 75 65 20 64 75 72 69 6e  DB is true durin
25800 67 20 6e 6f 72 6d 61 6c 20 6f 70 65 72 61 74 69  g normal operati
25810 6f 6e 2e 20 20 43 4f 52 52 55 50 54 5f 44 42 20  on.  CORRUPT_DB 
25820 64 6f 65 73 20 6e 6f 74 20 69 6e 64 69 63 61 74  does not indicat
25830 65 0a 2a 2a 20 74 68 61 74 20 74 68 65 20 64 61  e.** that the da
25840 74 61 62 61 73 65 20 69 73 20 64 65 66 69 6e 69  tabase is defini
25850 74 65 6c 79 20 63 6f 72 72 75 70 74 2c 20 6f 6e  tely corrupt, on
25860 6c 79 20 74 68 61 74 20 69 74 20 6d 69 67 68 74  ly that it might
25870 20 62 65 20 63 6f 72 72 75 70 74 2e 0a 2a 2a 20   be corrupt..** 
25880 46 6f 72 20 6d 6f 73 74 20 74 65 73 74 20 63 61  For most test ca
25890 73 65 73 2c 20 43 4f 52 52 55 50 54 5f 44 42 20  ses, CORRUPT_DB 
258a0 69 73 20 73 65 74 20 74 6f 20 66 61 6c 73 65 20  is set to false 
258b0 75 73 69 6e 67 20 61 20 73 70 65 63 69 61 6c 0a  using a special.
258c0 2a 2a 20 73 71 6c 69 74 65 33 5f 74 65 73 74 5f  ** sqlite3_test_
258d0 63 6f 6e 74 72 6f 6c 28 29 2e 20 20 54 68 69 73  control().  This
258e0 20 65 6e 61 62 6c 65 73 20 61 73 73 65 72 74 28   enables assert(
258f0 29 20 73 74 61 74 65 6d 65 6e 74 73 20 74 6f 20  ) statements to 
25900 70 72 6f 76 65 0a 2a 2a 20 74 68 69 6e 67 73 20  prove.** things 
25910 74 68 61 74 20 61 72 65 20 61 6c 77 61 79 73 20  that are always 
25920 74 72 75 65 20 66 6f 72 20 77 65 6c 6c 2d 66 6f  true for well-fo
25930 72 6d 65 64 20 64 61 74 61 62 61 73 65 73 2e 0a  rmed databases..
25940 2a 2f 0a 23 64 65 66 69 6e 65 20 43 4f 52 52 55  */.#define CORRU
25950 50 54 5f 44 42 20 20 28 73 71 6c 69 74 65 33 43  PT_DB  (sqlite3C
25960 6f 6e 66 69 67 2e 6e 65 76 65 72 43 6f 72 72 75  onfig.neverCorru
25970 70 74 3d 3d 30 29 0a 0a 2f 2a 0a 2a 2a 20 43 6f  pt==0)../*.** Co
25980 6e 74 65 78 74 20 70 6f 69 6e 74 65 72 20 70 61  ntext pointer pa
25990 73 73 65 64 20 64 6f 77 6e 20 74 68 72 6f 75 67  ssed down throug
259a0 68 20 74 68 65 20 74 72 65 65 2d 77 61 6c 6b 2e  h the tree-walk.
259b0 0a 2a 2f 0a 73 74 72 75 63 74 20 57 61 6c 6b 65  .*/.struct Walke
259c0 72 20 7b 0a 20 20 50 61 72 73 65 20 2a 70 50 61  r {.  Parse *pPa
259d0 72 73 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  rse;            
259e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
259f0 2f 2a 20 50 61 72 73 65 72 20 63 6f 6e 74 65 78  /* Parser contex
25a00 74 2e 20 20 2a 2f 0a 20 20 69 6e 74 20 28 2a 78  t.  */.  int (*x
25a10 45 78 70 72 43 61 6c 6c 62 61 63 6b 29 28 57 61  ExprCallback)(Wa
25a20 6c 6b 65 72 2a 2c 20 45 78 70 72 2a 29 3b 20 20  lker*, Expr*);  
25a30 20 20 20 2f 2a 20 43 61 6c 6c 62 61 63 6b 20 66     /* Callback f
25a40 6f 72 20 65 78 70 72 65 73 73 69 6f 6e 73 20 2a  or expressions *
25a50 2f 0a 20 20 69 6e 74 20 28 2a 78 53 65 6c 65 63  /.  int (*xSelec
25a60 74 43 61 6c 6c 62 61 63 6b 29 28 57 61 6c 6b 65  tCallback)(Walke
25a70 72 2a 2c 53 65 6c 65 63 74 2a 29 3b 20 20 2f 2a  r*,Select*);  /*
25a80 20 43 61 6c 6c 62 61 63 6b 20 66 6f 72 20 53 45   Callback for SE
25a90 4c 45 43 54 73 20 2a 2f 0a 20 20 76 6f 69 64 20  LECTs */.  void 
25aa0 28 2a 78 53 65 6c 65 63 74 43 61 6c 6c 62 61 63  (*xSelectCallbac
25ab0 6b 32 29 28 57 61 6c 6b 65 72 2a 2c 53 65 6c 65  k2)(Walker*,Sele
25ac0 63 74 2a 29 3b 2f 2a 20 53 65 63 6f 6e 64 20 63  ct*);/* Second c
25ad0 61 6c 6c 62 61 63 6b 20 66 6f 72 20 53 45 4c 45  allback for SELE
25ae0 43 54 73 20 2a 2f 0a 20 20 69 6e 74 20 77 61 6c  CTs */.  int wal
25af0 6b 65 72 44 65 70 74 68 3b 20 20 20 20 20 20 20  kerDepth;       
25b00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25b10 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
25b20 73 75 62 71 75 65 72 69 65 73 20 2a 2f 0a 20 20  subqueries */.  
25b30 75 38 20 65 43 6f 64 65 3b 20 20 20 20 20 20 20  u8 eCode;       
25b40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25b50 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 20 73            /* A s
25b60 6d 61 6c 6c 20 70 72 6f 63 65 73 73 69 6e 67 20  mall processing 
25b70 63 6f 64 65 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20  code */.  union 
25b80 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  {               
25b90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25ba0 20 20 20 20 2f 2a 20 45 78 74 72 61 20 64 61 74      /* Extra dat
25bb0 61 20 66 6f 72 20 63 61 6c 6c 62 61 63 6b 20 2a  a for callback *
25bc0 2f 0a 20 20 20 20 4e 61 6d 65 43 6f 6e 74 65 78  /.    NameContex
25bd0 74 20 2a 70 4e 43 3b 20 20 20 20 20 20 20 20 20  t *pNC;         
25be0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25bf0 2f 2a 20 4e 61 6d 69 6e 67 20 63 6f 6e 74 65 78  /* Naming contex
25c00 74 20 2a 2f 0a 20 20 20 20 69 6e 74 20 6e 3b 20  t */.    int n; 
25c10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25c30 20 20 20 2f 2a 20 41 20 63 6f 75 6e 74 65 72 20     /* A counter 
25c40 2a 2f 0a 20 20 20 20 69 6e 74 20 69 43 75 72 3b  */.    int iCur;
25c50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25c60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25c70 20 2f 2a 20 41 20 63 75 72 73 6f 72 20 6e 75 6d   /* A cursor num
25c80 62 65 72 20 2a 2f 0a 20 20 20 20 53 72 63 4c 69  ber */.    SrcLi
25c90 73 74 20 2a 70 53 72 63 4c 69 73 74 3b 20 20 20  st *pSrcList;   
25ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25cb0 20 20 20 20 20 2f 2a 20 46 52 4f 4d 20 63 6c 61       /* FROM cla
25cc0 75 73 65 20 2a 2f 0a 20 20 20 20 73 74 72 75 63  use */.    struc
25cd0 74 20 53 72 63 43 6f 75 6e 74 20 2a 70 53 72 63  t SrcCount *pSrc
25ce0 43 6f 75 6e 74 3b 20 20 20 20 20 20 20 20 20 20  Count;          
25cf0 20 20 20 20 20 2f 2a 20 43 6f 75 6e 74 69 6e 67       /* Counting
25d00 20 63 6f 6c 75 6d 6e 20 72 65 66 65 72 65 6e 63   column referenc
25d10 65 73 20 2a 2f 0a 20 20 20 20 73 74 72 75 63 74  es */.    struct
25d20 20 43 43 75 72 48 69 6e 74 20 2a 70 43 43 75 72   CCurHint *pCCur
25d30 48 69 6e 74 3b 20 20 20 20 20 20 20 20 20 20 20  Hint;           
25d40 20 20 20 20 2f 2a 20 55 73 65 64 20 62 79 20 63      /* Used by c
25d50 6f 64 65 43 75 72 73 6f 72 48 69 6e 74 28 29 20  odeCursorHint() 
25d60 2a 2f 0a 20 20 20 20 69 6e 74 20 2a 61 69 43 6f  */.    int *aiCo
25d70 6c 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  l;              
25d80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25d90 20 2f 2a 20 61 72 72 61 79 20 6f 66 20 63 6f 6c   /* array of col
25da0 75 6d 6e 20 69 6e 64 65 78 65 73 20 2a 2f 0a 20  umn indexes */. 
25db0 20 20 20 73 74 72 75 63 74 20 49 64 78 43 6f 76     struct IdxCov
25dc0 65 72 20 2a 70 49 64 78 43 6f 76 65 72 3b 20 20  er *pIdxCover;  
25dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
25de0 43 68 65 63 6b 20 66 6f 72 20 69 6e 64 65 78 20  Check for index 
25df0 63 6f 76 65 72 61 67 65 20 2a 2f 0a 20 20 20 20  coverage */.    
25e00 73 74 72 75 63 74 20 49 64 78 45 78 70 72 54 72  struct IdxExprTr
25e10 61 6e 73 20 2a 70 49 64 78 54 72 61 6e 73 3b 20  ans *pIdxTrans; 
25e20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6e            /* Con
25e30 76 65 72 74 20 69 64 78 65 64 20 65 78 70 72 20  vert idxed expr 
25e40 74 6f 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 20  to column */.   
25e50 20 45 78 70 72 4c 69 73 74 20 2a 70 47 72 6f 75   ExprList *pGrou
25e60 70 42 79 3b 20 20 20 20 20 20 20 20 20 20 20 20  pBy;            
25e70 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 47 52             /* GR
25e80 4f 55 50 20 42 59 20 63 6c 61 75 73 65 20 2a 2f  OUP BY clause */
25e90 0a 20 20 20 20 53 65 6c 65 63 74 20 2a 70 53 65  .    Select *pSe
25ea0 6c 65 63 74 3b 20 20 20 20 20 20 20 20 20 20 20  lect;           
25eb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
25ec0 2a 20 48 41 56 49 4e 47 20 74 6f 20 57 48 45 52  * HAVING to WHER
25ed0 45 20 63 6c 61 75 73 65 20 63 74 78 20 2a 2f 0a  E clause ctx */.
25ee0 20 20 20 20 73 74 72 75 63 74 20 57 69 6e 64 6f      struct Windo
25ef0 77 52 65 77 72 69 74 65 20 2a 70 52 65 77 72 69  wRewrite *pRewri
25f00 74 65 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  te;           /*
25f10 20 57 69 6e 64 6f 77 20 72 65 77 72 69 74 65 20   Window rewrite 
25f20 63 6f 6e 74 65 78 74 20 2a 2f 0a 20 20 20 20 73  context */.    s
25f30 74 72 75 63 74 20 57 68 65 72 65 43 6f 6e 73 74  truct WhereConst
25f40 20 2a 70 43 6f 6e 73 74 3b 20 20 20 20 20 20 20   *pConst;       
25f50 20 20 20 20 20 20 20 20 20 2f 2a 20 57 48 45 52           /* WHER
25f60 45 20 63 6c 61 75 73 65 20 63 6f 6e 73 74 61 6e  E clause constan
25f70 74 73 20 2a 2f 0a 20 20 20 20 73 74 72 75 63 74  ts */.    struct
25f80 20 52 65 6e 61 6d 65 43 74 78 20 2a 70 52 65 6e   RenameCtx *pRen
25f90 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ame;            
25fa0 20 20 20 20 2f 2a 20 52 45 4e 41 4d 45 20 43 4f      /* RENAME CO
25fb0 4c 55 4d 4e 20 63 6f 6e 74 65 78 74 20 2a 2f 0a  LUMN context */.
25fc0 20 20 7d 20 75 3b 0a 7d 3b 0a 0a 2f 2a 20 46 6f    } u;.};../* Fo
25fd0 72 77 61 72 64 20 64 65 63 6c 61 72 61 74 69 6f  rward declaratio
25fe0 6e 73 20 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65  ns */.int sqlite
25ff0 33 57 61 6c 6b 45 78 70 72 28 57 61 6c 6b 65 72  3WalkExpr(Walker
26000 2a 2c 20 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73  *, Expr*);.int s
26010 71 6c 69 74 65 33 57 61 6c 6b 45 78 70 72 4c 69  qlite3WalkExprLi
26020 73 74 28 57 61 6c 6b 65 72 2a 2c 20 45 78 70 72  st(Walker*, Expr
26030 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  List*);.int sqli
26040 74 65 33 57 61 6c 6b 53 65 6c 65 63 74 28 57 61  te3WalkSelect(Wa
26050 6c 6b 65 72 2a 2c 20 53 65 6c 65 63 74 2a 29 3b  lker*, Select*);
26060 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 61 6c 6b  .int sqlite3Walk
26070 53 65 6c 65 63 74 45 78 70 72 28 57 61 6c 6b 65  SelectExpr(Walke
26080 72 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 69 6e  r*, Select*);.in
26090 74 20 73 71 6c 69 74 65 33 57 61 6c 6b 53 65 6c  t sqlite3WalkSel
260a0 65 63 74 46 72 6f 6d 28 57 61 6c 6b 65 72 2a 2c  ectFrom(Walker*,
260b0 20 53 65 6c 65 63 74 2a 29 3b 0a 69 6e 74 20 73   Select*);.int s
260c0 71 6c 69 74 65 33 45 78 70 72 57 61 6c 6b 4e 6f  qlite3ExprWalkNo
260d0 6f 70 28 57 61 6c 6b 65 72 2a 2c 20 45 78 70 72  op(Walker*, Expr
260e0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53  *);.int sqlite3S
260f0 65 6c 65 63 74 57 61 6c 6b 4e 6f 6f 70 28 57 61  electWalkNoop(Wa
26100 6c 6b 65 72 2a 2c 20 53 65 6c 65 63 74 2a 29 3b  lker*, Select*);
26110 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 65 6c 65  .int sqlite3Sele
26120 63 74 57 61 6c 6b 46 61 69 6c 28 57 61 6c 6b 65  ctWalkFail(Walke
26130 72 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 23 69  r*, Select*);.#i
26140 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55  fdef SQLITE_DEBU
26150 47 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 65  G.void sqlite3Se
26160 6c 65 63 74 57 61 6c 6b 41 73 73 65 72 74 32 28  lectWalkAssert2(
26170 57 61 6c 6b 65 72 2a 2c 20 53 65 6c 65 63 74 2a  Walker*, Select*
26180 29 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  );.#endif../*.**
26190 20 52 65 74 75 72 6e 20 63 6f 64 65 20 66 72 6f   Return code fro
261a0 6d 20 74 68 65 20 70 61 72 73 65 2d 74 72 65 65  m the parse-tree
261b0 20 77 61 6c 6b 69 6e 67 20 70 72 69 6d 69 74 69   walking primiti
261c0 76 65 73 20 61 6e 64 20 74 68 65 69 72 0a 2a 2a  ves and their.**
261d0 20 63 61 6c 6c 62 61 63 6b 73 2e 0a 2a 2f 0a 23   callbacks..*/.#
261e0 64 65 66 69 6e 65 20 57 52 43 5f 43 6f 6e 74 69  define WRC_Conti
261f0 6e 75 65 20 20 20 20 30 20 20 20 2f 2a 20 43 6f  nue    0   /* Co
26200 6e 74 69 6e 75 65 20 64 6f 77 6e 20 69 6e 74 6f  ntinue down into
26210 20 63 68 69 6c 64 72 65 6e 20 2a 2f 0a 23 64 65   children */.#de
26220 66 69 6e 65 20 57 52 43 5f 50 72 75 6e 65 20 20  fine WRC_Prune  
26230 20 20 20 20 20 31 20 20 20 2f 2a 20 4f 6d 69 74       1   /* Omit
26240 20 63 68 69 6c 64 72 65 6e 20 62 75 74 20 63 6f   children but co
26250 6e 74 69 6e 75 65 20 77 61 6c 6b 69 6e 67 20 73  ntinue walking s
26260 69 62 6c 69 6e 67 73 20 2a 2f 0a 23 64 65 66 69  iblings */.#defi
26270 6e 65 20 57 52 43 5f 41 62 6f 72 74 20 20 20 20  ne WRC_Abort    
26280 20 20 20 32 20 20 20 2f 2a 20 41 62 61 6e 64 6f     2   /* Abando
26290 6e 20 74 68 65 20 74 72 65 65 20 77 61 6c 6b 20  n the tree walk 
262a0 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73  */../*.** An ins
262b0 74 61 6e 63 65 20 6f 66 20 74 68 69 73 20 73 74  tance of this st
262c0 72 75 63 74 75 72 65 20 72 65 70 72 65 73 65 6e  ructure represen
262d0 74 73 20 61 20 73 65 74 20 6f 66 20 6f 6e 65 20  ts a set of one 
262e0 6f 72 20 6d 6f 72 65 20 43 54 45 73 0a 2a 2a 20  or more CTEs.** 
262f0 28 63 6f 6d 6d 6f 6e 20 74 61 62 6c 65 20 65 78  (common table ex
26300 70 72 65 73 73 69 6f 6e 73 29 20 63 72 65 61 74  pressions) creat
26310 65 64 20 62 79 20 61 20 73 69 6e 67 6c 65 20 57  ed by a single W
26320 49 54 48 20 63 6c 61 75 73 65 2e 0a 2a 2f 0a 73  ITH clause..*/.s
26330 74 72 75 63 74 20 57 69 74 68 20 7b 0a 20 20 69  truct With {.  i
26340 6e 74 20 6e 43 74 65 3b 20 20 20 20 20 20 20 20  nt nCte;        
26350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
26360 2a 20 4e 75 6d 62 65 72 20 6f 66 20 43 54 45 73  * Number of CTEs
26370 20 69 6e 20 74 68 65 20 57 49 54 48 20 63 6c 61   in the WITH cla
26380 75 73 65 20 2a 2f 0a 20 20 57 69 74 68 20 2a 70  use */.  With *p
26390 4f 75 74 65 72 3b 20 20 20 20 20 20 20 20 20 20  Outer;          
263a0 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6e 74           /* Cont
263b0 61 69 6e 69 6e 67 20 57 49 54 48 20 63 6c 61 75  aining WITH clau
263c0 73 65 2c 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 20  se, or NULL */. 
263d0 20 73 74 72 75 63 74 20 43 74 65 20 7b 20 20 20   struct Cte {   
263e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
263f0 20 2f 2a 20 46 6f 72 20 65 61 63 68 20 43 54 45   /* For each CTE
26400 20 69 6e 20 74 68 65 20 57 49 54 48 20 63 6c 61   in the WITH cla
26410 75 73 65 2e 2e 2e 2e 20 2a 2f 0a 20 20 20 20 63  use.... */.    c
26420 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20  har *zName;     
26430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
26440 2a 20 4e 61 6d 65 20 6f 66 20 74 68 69 73 20 43  * Name of this C
26450 54 45 20 2a 2f 0a 20 20 20 20 45 78 70 72 4c 69  TE */.    ExprLi
26460 73 74 20 2a 70 43 6f 6c 73 3b 20 20 20 20 20 20  st *pCols;      
26470 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 69 73            /* Lis
26480 74 20 6f 66 20 65 78 70 6c 69 63 69 74 20 63 6f  t of explicit co
26490 6c 75 6d 6e 20 6e 61 6d 65 73 2c 20 6f 72 20 4e  lumn names, or N
264a0 55 4c 4c 20 2a 2f 0a 20 20 20 20 53 65 6c 65 63  ULL */.    Selec
264b0 74 20 2a 70 53 65 6c 65 63 74 3b 20 20 20 20 20  t *pSelect;     
264c0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68             /* Th
264d0 65 20 64 65 66 69 6e 69 74 69 6f 6e 20 6f 66 20  e definition of 
264e0 74 68 69 73 20 43 54 45 20 2a 2f 0a 20 20 20 20  this CTE */.    
264f0 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 43 74 65  const char *zCte
26500 45 72 72 3b 20 20 20 20 20 20 20 20 20 20 20 20  Err;            
26510 2f 2a 20 45 72 72 6f 72 20 6d 65 73 73 61 67 65  /* Error message
26520 20 66 6f 72 20 63 69 72 63 75 6c 61 72 20 72 65   for circular re
26530 66 65 72 65 6e 63 65 73 20 2a 2f 0a 20 20 7d 20  ferences */.  } 
26540 61 5b 31 5d 3b 0a 7d 3b 0a 0a 23 69 66 64 65 66  a[1];.};..#ifdef
26550 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 2f 2a   SQLITE_DEBUG./*
26560 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20  .** An instance 
26570 6f 66 20 74 68 65 20 54 72 65 65 56 69 65 77 20  of the TreeView 
26580 6f 62 6a 65 63 74 20 69 73 20 75 73 65 64 20 66  object is used f
26590 6f 72 20 70 72 69 6e 74 69 6e 67 20 74 68 65 20  or printing the 
265a0 63 6f 6e 74 65 6e 74 20 6f 66 0a 2a 2a 20 64 61  content of.** da
265b0 74 61 20 73 74 72 75 63 74 75 72 65 73 20 6f 6e  ta structures on
265c0 20 73 71 6c 69 74 65 33 44 65 62 75 67 50 72 69   sqlite3DebugPri
265d0 6e 74 66 28 29 20 75 73 69 6e 67 20 61 20 74 72  ntf() using a tr
265e0 65 65 2d 6c 69 6b 65 20 76 69 65 77 2e 0a 2a 2f  ee-like view..*/
265f0 0a 73 74 72 75 63 74 20 54 72 65 65 56 69 65 77  .struct TreeView
26600 20 7b 0a 20 20 69 6e 74 20 69 4c 65 76 65 6c 3b   {.  int iLevel;
26610 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
26620 57 68 69 63 68 20 6c 65 76 65 6c 20 6f 66 20 74  Which level of t
26630 68 65 20 74 72 65 65 20 77 65 20 61 72 65 20 6f  he tree we are o
26640 6e 20 2a 2f 0a 20 20 75 38 20 20 62 4c 69 6e 65  n */.  u8  bLine
26650 5b 31 30 30 5d 3b 20 20 20 20 20 20 20 20 20 2f  [100];         /
26660 2a 20 44 72 61 77 20 76 65 72 74 69 63 61 6c 20  * Draw vertical 
26670 69 6e 20 63 6f 6c 75 6d 6e 20 69 20 69 66 20 62  in column i if b
26680 4c 69 6e 65 5b 69 5d 20 69 73 20 74 72 75 65 20  Line[i] is true 
26690 2a 2f 0a 7d 3b 0a 23 65 6e 64 69 66 20 2f 2a 20  */.};.#endif /* 
266a0 53 51 4c 49 54 45 5f 44 45 42 55 47 20 2a 2f 0a  SQLITE_DEBUG */.
266b0 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 6f 62 6a 65  ./*.** This obje
266c0 63 74 20 69 73 20 75 73 65 64 20 69 6e 20 76 61  ct is used in va
266d0 72 69 6f 69 75 73 20 77 61 79 73 2c 20 61 6c 6c  rioius ways, all
266e0 20 72 65 6c 61 74 65 64 20 74 6f 20 77 69 6e 64   related to wind
266f0 6f 77 20 66 75 6e 63 74 69 6f 6e 73 0a 2a 2a 0a  ow functions.**.
26700 2a 2a 20 20 20 28 31 29 20 41 20 73 69 6e 67 6c  **   (1) A singl
26710 65 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  e instance of th
26720 69 73 20 73 74 72 75 63 74 75 72 65 20 69 73 20  is structure is 
26730 61 74 74 61 63 68 65 64 20 74 6f 20 74 68 65 0a  attached to the.
26740 2a 2a 20 20 20 20 20 20 20 74 68 65 20 45 78 70  **       the Exp
26750 72 2e 70 57 69 6e 20 66 69 65 6c 64 20 66 6f 72  r.pWin field for
26760 20 65 61 63 68 20 77 69 6e 64 6f 77 20 66 75 6e   each window fun
26770 63 74 69 6f 6e 20 69 6e 20 61 6e 20 65 78 70 72  ction in an expr
26780 65 73 73 69 6f 6e 20 74 72 65 65 2e 0a 2a 2a 20  ession tree..** 
26790 20 20 20 20 20 20 54 68 69 73 20 6f 62 6a 65 63        This objec
267a0 74 20 68 6f 6c 64 73 20 74 68 65 20 69 6e 66 6f  t holds the info
267b0 72 6d 61 74 69 6f 6e 20 63 6f 6e 74 61 69 6e 65  rmation containe
267c0 64 20 69 6e 20 74 68 65 20 4f 56 45 52 20 63 6c  d in the OVER cl
267d0 61 75 73 65 2c 0a 2a 2a 20 20 20 20 20 20 20 70  ause,.**       p
267e0 6c 75 73 20 61 64 64 69 74 69 6f 6e 61 6c 20 66  lus additional f
267f0 69 65 6c 64 73 20 75 73 65 64 20 64 75 72 69 6e  ields used durin
26800 67 20 63 6f 64 65 20 67 65 6e 65 72 61 74 69 6f  g code generatio
26810 6e 2e 0a 2a 2a 0a 2a 2a 20 20 20 28 32 29 20 41  n..**.**   (2) A
26820 6c 6c 20 77 69 6e 64 6f 77 20 66 75 6e 63 74 69  ll window functi
26830 6f 6e 73 20 69 6e 20 61 20 73 69 6e 67 6c 65 20  ons in a single 
26840 53 45 4c 45 43 54 20 66 6f 72 6d 20 61 20 6c 69  SELECT form a li
26850 6e 6b 65 64 2d 6c 69 73 74 0a 2a 2a 20 20 20 20  nked-list.**    
26860 20 20 20 61 74 74 61 63 68 65 64 20 74 6f 20 53     attached to S
26870 65 6c 65 63 74 2e 70 57 69 6e 2e 20 20 54 68 65  elect.pWin.  The
26880 20 57 69 6e 64 6f 77 2e 70 46 75 6e 63 20 61 6e   Window.pFunc an
26890 64 20 57 69 6e 64 6f 77 2e 70 45 78 70 72 0a 2a  d Window.pExpr.*
268a0 2a 20 20 20 20 20 20 20 66 69 65 6c 64 73 20 70  *       fields p
268b0 6f 69 6e 74 20 62 61 63 6b 20 74 6f 20 74 68 65  oint back to the
268c0 20 65 78 70 72 65 73 73 69 6f 6e 20 74 68 61 74   expression that
268d0 20 69 73 20 74 68 65 20 77 69 6e 64 6f 77 20 66   is the window f
268e0 75 6e 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 20  unction..**.**  
268f0 20 28 33 29 20 54 68 65 20 74 65 72 6d 73 20 6f   (3) The terms o
26900 66 20 74 68 65 20 57 49 4e 44 4f 57 20 63 6c 61  f the WINDOW cla
26910 75 73 65 20 6f 66 20 61 20 53 45 4c 45 43 54 20  use of a SELECT 
26920 61 72 65 20 69 6e 73 74 61 6e 63 65 73 20 6f 66  are instances of
26930 20 74 68 69 73 0a 2a 2a 20 20 20 20 20 20 20 6f   this.**       o
26940 62 6a 65 63 74 20 6f 6e 20 61 20 6c 69 6e 6b 65  bject on a linke
26950 64 20 6c 69 73 74 20 61 74 74 61 63 68 65 64 20  d list attached 
26960 74 6f 20 53 65 6c 65 63 74 2e 70 57 69 6e 44 65  to Select.pWinDe
26970 66 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 75 73  fn..**.** The us
26980 65 73 20 28 31 29 20 61 6e 64 20 28 32 29 20 61  es (1) and (2) a
26990 72 65 20 72 65 61 6c 6c 79 20 74 68 65 20 73 61  re really the sa
269a0 6d 65 20 57 69 6e 64 6f 77 20 6f 62 6a 65 63 74  me Window object
269b0 20 74 68 61 74 20 6a 75 73 74 20 68 61 70 70 65   that just happe
269c0 6e 73 0a 2a 2a 20 74 6f 20 62 65 20 61 63 63 65  ns.** to be acce
269d0 73 73 69 62 6c 65 20 69 6e 20 74 77 6f 20 64 69  ssible in two di
269e0 66 66 65 72 65 6e 74 20 77 61 79 73 2e 20 20 55  fferent ways.  U
269f0 73 65 20 28 33 29 20 69 73 20 61 72 65 20 73 65  se (3) is are se
26a00 70 61 72 61 74 65 20 6f 62 6a 65 63 74 73 2e 0a  parate objects..
26a10 2a 2f 0a 73 74 72 75 63 74 20 57 69 6e 64 6f 77  */.struct Window
26a20 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65   {.  char *zName
26a30 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
26a40 4e 61 6d 65 20 6f 66 20 77 69 6e 64 6f 77 20 28  Name of window (
26a50 6d 61 79 20 62 65 20 4e 55 4c 4c 29 20 2a 2f 0a  may be NULL) */.
26a60 20 20 45 78 70 72 4c 69 73 74 20 2a 70 50 61 72    ExprList *pPar
26a70 74 69 74 69 6f 6e 3b 20 20 20 2f 2a 20 50 41 52  tition;   /* PAR
26a80 54 49 54 49 4f 4e 20 42 59 20 63 6c 61 75 73 65  TITION BY clause
26a90 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20 2a   */.  ExprList *
26aa0 70 4f 72 64 65 72 42 79 3b 20 20 20 20 20 2f 2a  pOrderBy;     /*
26ab0 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73 65   ORDER BY clause
26ac0 20 2a 2f 0a 20 20 75 38 20 65 54 79 70 65 3b 20   */.  u8 eType; 
26ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
26ae0 20 54 4b 5f 52 41 4e 47 45 20 6f 72 20 54 4b 5f   TK_RANGE or TK_
26af0 52 4f 57 53 20 2a 2f 0a 20 20 75 38 20 65 53 74  ROWS */.  u8 eSt
26b00 61 72 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  art;            
26b10 20 20 2f 2a 20 55 4e 42 4f 55 4e 44 45 44 2c 20    /* UNBOUNDED, 
26b20 43 55 52 52 45 4e 54 2c 20 50 52 45 43 45 44 49  CURRENT, PRECEDI
26b30 4e 47 20 6f 72 20 46 4f 4c 4c 4f 57 49 4e 47 20  NG or FOLLOWING 
26b40 2a 2f 0a 20 20 75 38 20 65 45 6e 64 3b 20 20 20  */.  u8 eEnd;   
26b50 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
26b60 55 4e 42 4f 55 4e 44 45 44 2c 20 43 55 52 52 45  UNBOUNDED, CURRE
26b70 4e 54 2c 20 50 52 45 43 45 44 49 4e 47 20 6f 72  NT, PRECEDING or
26b80 20 46 4f 4c 4c 4f 57 49 4e 47 20 2a 2f 0a 20 20   FOLLOWING */.  
26b90 45 78 70 72 20 2a 70 53 74 61 72 74 3b 20 20 20  Expr *pStart;   
26ba0 20 20 20 20 20 20 20 20 2f 2a 20 45 78 70 72 65          /* Expre
26bb0 73 73 69 6f 6e 20 66 6f 72 20 22 3c 65 78 70 72  ssion for "<expr
26bc0 3e 20 50 52 45 43 45 44 49 4e 47 22 20 2a 2f 0a  > PRECEDING" */.
26bd0 20 20 45 78 70 72 20 2a 70 45 6e 64 3b 20 20 20    Expr *pEnd;   
26be0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 45 78 70            /* Exp
26bf0 72 65 73 73 69 6f 6e 20 66 6f 72 20 22 3c 65 78  ression for "<ex
26c00 70 72 3e 20 46 4f 4c 4c 4f 57 49 4e 47 22 20 2a  pr> FOLLOWING" *
26c10 2f 0a 20 20 57 69 6e 64 6f 77 20 2a 70 4e 65 78  /.  Window *pNex
26c20 74 57 69 6e 3b 20 20 20 20 20 20 20 2f 2a 20 4e  tWin;       /* N
26c30 65 78 74 20 77 69 6e 64 6f 77 20 66 75 6e 63 74  ext window funct
26c40 69 6f 6e 20 62 65 6c 6f 6e 67 69 6e 67 20 74 6f  ion belonging to
26c50 20 74 68 69 73 20 53 45 4c 45 43 54 20 2a 2f 0a   this SELECT */.
26c60 20 20 45 78 70 72 20 2a 70 46 69 6c 74 65 72 3b    Expr *pFilter;
26c70 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
26c80 20 46 49 4c 54 45 52 20 65 78 70 72 65 73 73 69   FILTER expressi
26c90 6f 6e 20 2a 2f 0a 20 20 46 75 6e 63 44 65 66 20  on */.  FuncDef 
26ca0 2a 70 46 75 6e 63 3b 20 20 20 20 20 20 20 20 20  *pFunc;         
26cb0 2f 2a 20 54 68 65 20 66 75 6e 63 74 69 6f 6e 20  /* The function 
26cc0 2a 2f 0a 20 20 69 6e 74 20 69 45 70 68 43 73 72  */.  int iEphCsr
26cd0 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
26ce0 50 61 72 74 69 74 69 6f 6e 20 62 75 66 66 65 72  Partition buffer
26cf0 20 6f 72 20 50 65 65 72 20 62 75 66 66 65 72 20   or Peer buffer 
26d00 2a 2f 0a 20 20 69 6e 74 20 72 65 67 41 63 63 75  */.  int regAccu
26d10 6d 3b 0a 20 20 69 6e 74 20 72 65 67 52 65 73 75  m;.  int regResu
26d20 6c 74 3b 0a 20 20 69 6e 74 20 63 73 72 41 70 70  lt;.  int csrApp
26d30 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
26d40 20 46 75 6e 63 74 69 6f 6e 20 63 75 72 73 6f 72   Function cursor
26d50 20 28 75 73 65 64 20 62 79 20 6d 69 6e 2f 6d 61   (used by min/ma
26d60 78 29 20 2a 2f 0a 20 20 69 6e 74 20 72 65 67 41  x) */.  int regA
26d70 70 70 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  pp;             
26d80 2f 2a 20 46 75 6e 63 74 69 6f 6e 20 72 65 67 69  /* Function regi
26d90 73 74 65 72 20 28 61 6c 73 6f 20 75 73 65 64 20  ster (also used 
26da0 62 79 20 6d 69 6e 2f 6d 61 78 29 20 2a 2f 0a 20  by min/max) */. 
26db0 20 69 6e 74 20 72 65 67 50 61 72 74 3b 20 20 20   int regPart;   
26dc0 20 20 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73           /* Firs
26dd0 74 20 69 6e 20 61 20 73 65 74 20 6f 66 20 72 65  t in a set of re
26de0 67 69 73 74 65 72 73 20 68 6f 6c 64 69 6e 67 20  gisters holding 
26df0 50 41 52 54 49 54 49 4f 4e 20 42 59 0a 20 20 20  PARTITION BY.   
26e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26e10 20 20 20 20 20 20 20 2a 2a 20 61 6e 64 20 4f 52         ** and OR
26e20 44 45 52 20 42 59 20 76 61 6c 75 65 73 20 66 6f  DER BY values fo
26e30 72 20 74 68 65 20 77 69 6e 64 6f 77 20 2a 2f 0a  r the window */.
26e40 20 20 45 78 70 72 20 2a 70 4f 77 6e 65 72 3b 20    Expr *pOwner; 
26e50 20 20 20 20 20 20 20 20 20 20 2f 2a 20 45 78 70            /* Exp
26e60 72 65 73 73 69 6f 6e 20 6f 62 6a 65 63 74 20 74  ression object t
26e70 68 69 73 20 77 69 6e 64 6f 77 20 69 73 20 61 74  his window is at
26e80 74 61 63 68 65 64 20 74 6f 20 2a 2f 0a 20 20 69  tached to */.  i
26e90 6e 74 20 6e 42 75 66 66 65 72 43 6f 6c 3b 20 20  nt nBufferCol;  
26ea0 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
26eb0 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 62   of columns in b
26ec0 75 66 66 65 72 20 74 61 62 6c 65 20 2a 2f 0a 20  uffer table */. 
26ed0 20 69 6e 74 20 69 41 72 67 43 6f 6c 3b 20 20 20   int iArgCol;   
26ee0 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 66 66 73           /* Offs
26ef0 65 74 20 6f 66 20 66 69 72 73 74 20 61 72 67 75  et of first argu
26f00 6d 65 6e 74 20 66 6f 72 20 74 68 69 73 20 66 75  ment for this fu
26f10 6e 63 74 69 6f 6e 20 2a 2f 0a 7d 3b 0a 0a 23 69  nction */.};..#i
26f20 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
26f30 54 5f 57 49 4e 44 4f 57 46 55 4e 43 0a 76 6f 69  T_WINDOWFUNC.voi
26f40 64 20 73 71 6c 69 74 65 33 57 69 6e 64 6f 77 44  d sqlite3WindowD
26f50 65 6c 65 74 65 28 73 71 6c 69 74 65 33 2a 2c 20  elete(sqlite3*, 
26f60 57 69 6e 64 6f 77 2a 29 3b 0a 76 6f 69 64 20 73  Window*);.void s
26f70 71 6c 69 74 65 33 57 69 6e 64 6f 77 4c 69 73 74  qlite3WindowList
26f80 44 65 6c 65 74 65 28 73 71 6c 69 74 65 33 20 2a  Delete(sqlite3 *
26f90 64 62 2c 20 57 69 6e 64 6f 77 20 2a 70 29 3b 0a  db, Window *p);.
26fa0 57 69 6e 64 6f 77 20 2a 73 71 6c 69 74 65 33 57  Window *sqlite3W
26fb0 69 6e 64 6f 77 41 6c 6c 6f 63 28 50 61 72 73 65  indowAlloc(Parse
26fc0 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 45 78 70  *, int, int, Exp
26fd0 72 2a 2c 20 69 6e 74 20 2c 20 45 78 70 72 2a 29  r*, int , Expr*)
26fe0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 57 69  ;.void sqlite3Wi
26ff0 6e 64 6f 77 41 74 74 61 63 68 28 50 61 72 73 65  ndowAttach(Parse
27000 2a 2c 20 45 78 70 72 2a 2c 20 57 69 6e 64 6f 77  *, Expr*, Window
27010 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57  *);.int sqlite3W
27020 69 6e 64 6f 77 43 6f 6d 70 61 72 65 28 50 61 72  indowCompare(Par
27030 73 65 2a 2c 20 57 69 6e 64 6f 77 2a 2c 20 57 69  se*, Window*, Wi
27040 6e 64 6f 77 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  ndow*);.void sql
27050 69 74 65 33 57 69 6e 64 6f 77 43 6f 64 65 49 6e  ite3WindowCodeIn
27060 69 74 28 50 61 72 73 65 2a 2c 20 57 69 6e 64 6f  it(Parse*, Windo
27070 77 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  w*);.void sqlite
27080 33 57 69 6e 64 6f 77 43 6f 64 65 53 74 65 70 28  3WindowCodeStep(
27090 50 61 72 73 65 2a 2c 20 53 65 6c 65 63 74 2a 2c  Parse*, Select*,
270a0 20 57 68 65 72 65 49 6e 66 6f 2a 2c 20 69 6e 74   WhereInfo*, int
270b0 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69  , int);.int sqli
270c0 74 65 33 57 69 6e 64 6f 77 52 65 77 72 69 74 65  te3WindowRewrite
270d0 28 50 61 72 73 65 2a 2c 20 53 65 6c 65 63 74 2a  (Parse*, Select*
270e0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78  );.int sqlite3Ex
270f0 70 61 6e 64 53 75 62 71 75 65 72 79 28 50 61 72  pandSubquery(Par
27100 73 65 2a 2c 20 73 74 72 75 63 74 20 53 72 63 4c  se*, struct SrcL
27110 69 73 74 5f 69 74 65 6d 2a 29 3b 0a 76 6f 69 64  ist_item*);.void
27120 20 73 71 6c 69 74 65 33 57 69 6e 64 6f 77 55 70   sqlite3WindowUp
27130 64 61 74 65 28 50 61 72 73 65 2a 2c 20 57 69 6e  date(Parse*, Win
27140 64 6f 77 2a 2c 20 57 69 6e 64 6f 77 2a 2c 20 46  dow*, Window*, F
27150 75 6e 63 44 65 66 2a 29 3b 0a 57 69 6e 64 6f 77  uncDef*);.Window
27160 20 2a 73 71 6c 69 74 65 33 57 69 6e 64 6f 77 44   *sqlite3WindowD
27170 75 70 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20  up(sqlite3 *db, 
27180 45 78 70 72 20 2a 70 4f 77 6e 65 72 2c 20 57 69  Expr *pOwner, Wi
27190 6e 64 6f 77 20 2a 70 29 3b 0a 57 69 6e 64 6f 77  ndow *p);.Window
271a0 20 2a 73 71 6c 69 74 65 33 57 69 6e 64 6f 77 4c   *sqlite3WindowL
271b0 69 73 74 44 75 70 28 73 71 6c 69 74 65 33 20 2a  istDup(sqlite3 *
271c0 64 62 2c 20 57 69 6e 64 6f 77 20 2a 70 29 3b 0a  db, Window *p);.
271d0 76 6f 69 64 20 73 71 6c 69 74 65 33 57 69 6e 64  void sqlite3Wind
271e0 6f 77 46 75 6e 63 74 69 6f 6e 73 28 76 6f 69 64  owFunctions(void
271f0 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e  );.#else.# defin
27200 65 20 73 71 6c 69 74 65 33 57 69 6e 64 6f 77 44  e sqlite3WindowD
27210 65 6c 65 74 65 28 61 2c 62 29 0a 23 20 64 65 66  elete(a,b).# def
27220 69 6e 65 20 73 71 6c 69 74 65 33 57 69 6e 64 6f  ine sqlite3Windo
27230 77 46 75 6e 63 74 69 6f 6e 73 28 29 0a 23 20 64  wFunctions().# d
27240 65 66 69 6e 65 20 73 71 6c 69 74 65 33 57 69 6e  efine sqlite3Win
27250 64 6f 77 41 74 74 61 63 68 28 61 2c 62 2c 63 29  dowAttach(a,b,c)
27260 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41  .#endif../*.** A
27270 73 73 75 6d 69 6e 67 20 7a 49 6e 20 70 6f 69 6e  ssuming zIn poin
27280 74 73 20 74 6f 20 74 68 65 20 66 69 72 73 74 20  ts to the first 
27290 62 79 74 65 20 6f 66 20 61 20 55 54 46 2d 38 20  byte of a UTF-8 
272a0 63 68 61 72 61 63 74 65 72 2c 0a 2a 2a 20 61 64  character,.** ad
272b0 76 61 6e 63 65 20 7a 49 6e 20 74 6f 20 70 6f 69  vance zIn to poi
272c0 6e 74 20 74 6f 20 74 68 65 20 66 69 72 73 74 20  nt to the first 
272d0 62 79 74 65 20 6f 66 20 74 68 65 20 6e 65 78 74  byte of the next
272e0 20 55 54 46 2d 38 20 63 68 61 72 61 63 74 65 72   UTF-8 character
272f0 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  ..*/.#define SQL
27300 49 54 45 5f 53 4b 49 50 5f 55 54 46 38 28 7a 49  ITE_SKIP_UTF8(zI
27310 6e 29 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  n) {            
27320 20 20 20 20 20 20 20 20 20 20 20 20 5c 0a 20 20              \.  
27330 69 66 28 20 28 2a 28 7a 49 6e 2b 2b 29 29 3e 3d  if( (*(zIn++))>=
27340 30 78 63 30 20 29 7b 20 20 20 20 20 20 20 20 20  0xc0 ){         
27350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27360 20 20 20 20 20 5c 0a 20 20 20 20 77 68 69 6c 65       \.    while
27370 28 20 28 2a 7a 49 6e 20 26 20 30 78 63 30 29 3d  ( (*zIn & 0xc0)=
27380 3d 30 78 38 30 20 29 7b 20 7a 49 6e 2b 2b 3b 20  =0x80 ){ zIn++; 
27390 7d 20 20 20 20 20 20 20 20 20 20 20 20 20 5c 0a  }             \.
273a0 20 20 7d 20 20 20 20 20 20 20 20 20 20 20 20 20    }             
273b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
273c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
273d0 20 20 20 20 20 20 20 5c 0a 7d 0a 0a 2f 2a 0a 2a         \.}../*.*
273e0 2a 20 54 68 65 20 53 51 4c 49 54 45 5f 2a 5f 42  * The SQLITE_*_B
273f0 4b 50 54 20 6d 61 63 72 6f 73 20 61 72 65 20 73  KPT macros are s
27400 75 62 73 74 69 74 75 74 65 73 20 66 6f 72 20 74  ubstitutes for t
27410 68 65 20 65 72 72 6f 72 20 63 6f 64 65 73 20 77  he error codes w
27420 69 74 68 0a 2a 2a 20 74 68 65 20 73 61 6d 65 20  ith.** the same 
27430 6e 61 6d 65 20 62 75 74 20 77 69 74 68 6f 75 74  name but without
27440 20 74 68 65 20 5f 42 4b 50 54 20 73 75 66 66 69   the _BKPT suffi
27450 78 2e 20 20 54 68 65 73 65 20 6d 61 63 72 6f 73  x.  These macros
27460 20 69 6e 76 6f 6b 65 0a 2a 2a 20 72 6f 75 74 69   invoke.** routi
27470 6e 65 73 20 74 68 61 74 20 72 65 70 6f 72 74 20  nes that report 
27480 74 68 65 20 6c 69 6e 65 2d 6e 75 6d 62 65 72 20  the line-number 
27490 6f 6e 20 77 68 69 63 68 20 74 68 65 20 65 72 72  on which the err
274a0 6f 72 20 6f 72 69 67 69 6e 61 74 65 64 0a 2a 2a  or originated.**
274b0 20 75 73 69 6e 67 20 73 71 6c 69 74 65 33 5f 6c   using sqlite3_l
274c0 6f 67 28 29 2e 20 20 54 68 65 20 72 6f 75 74 69  og().  The routi
274d0 6e 65 73 20 61 6c 73 6f 20 70 72 6f 76 69 64 65  nes also provide
274e0 20 61 20 63 6f 6e 76 65 6e 69 65 6e 74 20 70 6c   a convenient pl
274f0 61 63 65 0a 2a 2a 20 74 6f 20 73 65 74 20 61 20  ace.** to set a 
27500 64 65 62 75 67 67 65 72 20 62 72 65 61 6b 70 6f  debugger breakpo
27510 69 6e 74 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69  int..*/.int sqli
27520 74 65 33 52 65 70 6f 72 74 45 72 72 6f 72 28 69  te3ReportError(i
27530 6e 74 20 69 45 72 72 2c 20 69 6e 74 20 6c 69 6e  nt iErr, int lin
27540 65 6e 6f 2c 20 63 6f 6e 73 74 20 63 68 61 72 20  eno, const char 
27550 2a 7a 54 79 70 65 29 3b 0a 69 6e 74 20 73 71 6c  *zType);.int sql
27560 69 74 65 33 43 6f 72 72 75 70 74 45 72 72 6f 72  ite3CorruptError
27570 28 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74  (int);.int sqlit
27580 65 33 4d 69 73 75 73 65 45 72 72 6f 72 28 69 6e  e3MisuseError(in
27590 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 43  t);.int sqlite3C
275a0 61 6e 74 6f 70 65 6e 45 72 72 6f 72 28 69 6e 74  antopenError(int
275b0 29 3b 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  );.#define SQLIT
275c0 45 5f 43 4f 52 52 55 50 54 5f 42 4b 50 54 20 73  E_CORRUPT_BKPT s
275d0 71 6c 69 74 65 33 43 6f 72 72 75 70 74 45 72 72  qlite3CorruptErr
275e0 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 29 0a 23 64 65  or(__LINE__).#de
275f0 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 49 53 55  fine SQLITE_MISU
27600 53 45 5f 42 4b 50 54 20 73 71 6c 69 74 65 33 4d  SE_BKPT sqlite3M
27610 69 73 75 73 65 45 72 72 6f 72 28 5f 5f 4c 49 4e  isuseError(__LIN
27620 45 5f 5f 29 0a 23 64 65 66 69 6e 65 20 53 51 4c  E__).#define SQL
27630 49 54 45 5f 43 41 4e 54 4f 50 45 4e 5f 42 4b 50  ITE_CANTOPEN_BKP
27640 54 20 73 71 6c 69 74 65 33 43 61 6e 74 6f 70 65  T sqlite3Cantope
27650 6e 45 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 29  nError(__LINE__)
27660 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44  .#ifdef SQLITE_D
27670 45 42 55 47 0a 20 20 69 6e 74 20 73 71 6c 69 74  EBUG.  int sqlit
27680 65 33 4e 6f 6d 65 6d 45 72 72 6f 72 28 69 6e 74  e3NomemError(int
27690 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33  );.  int sqlite3
276a0 49 6f 65 72 72 6e 6f 6d 65 6d 45 72 72 6f 72 28  IoerrnomemError(
276b0 69 6e 74 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69  int);.  int sqli
276c0 74 65 33 43 6f 72 72 75 70 74 50 67 6e 6f 45 72  te3CorruptPgnoEr
276d0 72 6f 72 28 69 6e 74 2c 50 67 6e 6f 29 3b 0a 23  ror(int,Pgno);.#
276e0 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e   define SQLITE_N
276f0 4f 4d 45 4d 5f 42 4b 50 54 20 73 71 6c 69 74 65  OMEM_BKPT sqlite
27700 33 4e 6f 6d 65 6d 45 72 72 6f 72 28 5f 5f 4c 49  3NomemError(__LI
27710 4e 45 5f 5f 29 0a 23 20 64 65 66 69 6e 65 20 53  NE__).# define S
27720 51 4c 49 54 45 5f 49 4f 45 52 52 5f 4e 4f 4d 45  QLITE_IOERR_NOME
27730 4d 5f 42 4b 50 54 20 73 71 6c 69 74 65 33 49 6f  M_BKPT sqlite3Io
27740 65 72 72 6e 6f 6d 65 6d 45 72 72 6f 72 28 5f 5f  errnomemError(__
27750 4c 49 4e 45 5f 5f 29 0a 23 20 64 65 66 69 6e 65  LINE__).# define
27760 20 53 51 4c 49 54 45 5f 43 4f 52 52 55 50 54 5f   SQLITE_CORRUPT_
27770 50 47 4e 4f 28 50 29 20 73 71 6c 69 74 65 33 43  PGNO(P) sqlite3C
27780 6f 72 72 75 70 74 50 67 6e 6f 45 72 72 6f 72 28  orruptPgnoError(
27790 5f 5f 4c 49 4e 45 5f 5f 2c 28 50 29 29 0a 23 65  __LINE__,(P)).#e
277a0 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  lse.# define SQL
277b0 49 54 45 5f 4e 4f 4d 45 4d 5f 42 4b 50 54 20 53  ITE_NOMEM_BKPT S
277c0 51 4c 49 54 45 5f 4e 4f 4d 45 4d 0a 23 20 64 65  QLITE_NOMEM.# de
277d0 66 69 6e 65 20 53 51 4c 49 54 45 5f 49 4f 45 52  fine SQLITE_IOER
277e0 52 5f 4e 4f 4d 45 4d 5f 42 4b 50 54 20 53 51 4c  R_NOMEM_BKPT SQL
277f0 49 54 45 5f 49 4f 45 52 52 5f 4e 4f 4d 45 4d 0a  ITE_IOERR_NOMEM.
27800 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
27810 43 4f 52 52 55 50 54 5f 50 47 4e 4f 28 50 29 20  CORRUPT_PGNO(P) 
27820 73 71 6c 69 74 65 33 43 6f 72 72 75 70 74 45 72  sqlite3CorruptEr
27830 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 29 0a 23 65  ror(__LINE__).#e
27840 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 46 54 53 33  ndif../*.** FTS3
27850 20 61 6e 64 20 46 54 53 34 20 62 6f 74 68 20 72   and FTS4 both r
27860 65 71 75 69 72 65 20 76 69 72 74 75 61 6c 20 74  equire virtual t
27870 61 62 6c 65 20 73 75 70 70 6f 72 74 0a 2a 2f 0a  able support.*/.
27880 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49  #if defined(SQLI
27890 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
278a0 41 42 4c 45 29 0a 23 20 75 6e 64 65 66 20 53 51  ABLE).# undef SQ
278b0 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33  LITE_ENABLE_FTS3
278c0 0a 23 20 75 6e 64 65 66 20 53 51 4c 49 54 45 5f  .# undef SQLITE_
278d0 45 4e 41 42 4c 45 5f 46 54 53 34 0a 23 65 6e 64  ENABLE_FTS4.#end
278e0 69 66 0a 0a 2f 2a 0a 2a 2a 20 46 54 53 34 20 69  if../*.** FTS4 i
278f0 73 20 72 65 61 6c 6c 79 20 61 6e 20 65 78 74 65  s really an exte
27900 6e 73 69 6f 6e 20 66 6f 72 20 46 54 53 33 2e 20  nsion for FTS3. 
27910 20 49 74 20 69 73 20 65 6e 61 62 6c 65 64 20 75   It is enabled u
27920 73 69 6e 67 20 74 68 65 0a 2a 2a 20 53 51 4c 49  sing the.** SQLI
27930 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33 20 6d  TE_ENABLE_FTS3 m
27940 61 63 72 6f 2e 20 20 42 75 74 20 74 6f 20 61 76  acro.  But to av
27950 6f 69 64 20 63 6f 6e 66 75 73 69 6f 6e 20 77 65  oid confusion we
27960 20 61 6c 73 6f 20 63 61 6c 6c 0a 2a 2a 20 74 68   also call.** th
27970 65 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  e SQLITE_ENABLE_
27980 46 54 53 34 20 6d 61 63 72 6f 20 74 6f 20 73 65  FTS4 macro to se
27990 72 76 65 20 61 73 20 61 6e 20 61 6c 69 61 73 20  rve as an alias 
279a0 66 6f 72 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  for SQLITE_ENABL
279b0 45 5f 46 54 53 33 2e 0a 2a 2f 0a 23 69 66 20 64  E_FTS3..*/.#if d
279c0 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e  efined(SQLITE_EN
279d0 41 42 4c 45 5f 46 54 53 34 29 20 26 26 20 21 64  ABLE_FTS4) && !d
279e0 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e  efined(SQLITE_EN
279f0 41 42 4c 45 5f 46 54 53 33 29 0a 23 20 64 65 66  ABLE_FTS3).# def
27a00 69 6e 65 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  ine SQLITE_ENABL
27a10 45 5f 46 54 53 33 20 31 0a 23 65 6e 64 69 66 0a  E_FTS3 1.#endif.
27a20 0a 2f 2a 0a 2a 2a 20 54 68 65 20 63 74 79 70 65  ./*.** The ctype
27a30 2e 68 20 68 65 61 64 65 72 20 69 73 20 6e 65 65  .h header is nee
27a40 64 65 64 20 66 6f 72 20 6e 6f 6e 2d 41 53 43 49  ded for non-ASCI
27a50 49 20 73 79 73 74 65 6d 73 2e 20 20 49 74 20 69  I systems.  It i
27a60 73 20 61 6c 73 6f 0a 2a 2a 20 6e 65 65 64 65 64  s also.** needed
27a70 20 62 79 20 46 54 53 33 20 77 68 65 6e 20 46 54   by FTS3 when FT
27a80 53 33 20 69 73 20 69 6e 63 6c 75 64 65 64 20 69  S3 is included i
27a90 6e 20 74 68 65 20 61 6d 61 6c 67 61 6d 61 74 69  n the amalgamati
27aa0 6f 6e 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69  on..*/.#if !defi
27ab0 6e 65 64 28 53 51 4c 49 54 45 5f 41 53 43 49 49  ned(SQLITE_ASCII
27ac0 29 20 7c 7c 20 5c 0a 20 20 20 20 28 64 65 66 69  ) || \.    (defi
27ad0 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c  ned(SQLITE_ENABL
27ae0 45 5f 46 54 53 33 29 20 26 26 20 64 65 66 69 6e  E_FTS3) && defin
27af0 65 64 28 53 51 4c 49 54 45 5f 41 4d 41 4c 47 41  ed(SQLITE_AMALGA
27b00 4d 41 54 49 4f 4e 29 29 0a 23 20 69 6e 63 6c 75  MATION)).# inclu
27b10 64 65 20 3c 63 74 79 70 65 2e 68 3e 0a 23 65 6e  de <ctype.h>.#en
27b20 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66  dif../*.** The f
27b30 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 73 20  ollowing macros 
27b40 6d 69 6d 69 63 20 74 68 65 20 73 74 61 6e 64 61  mimic the standa
27b50 72 64 20 6c 69 62 72 61 72 79 20 66 75 6e 63 74  rd library funct
27b60 69 6f 6e 73 20 74 6f 75 70 70 65 72 28 29 2c 0a  ions toupper(),.
27b70 2a 2a 20 69 73 73 70 61 63 65 28 29 2c 20 69 73  ** isspace(), is
27b80 61 6c 6e 75 6d 28 29 2c 20 69 73 64 69 67 69 74  alnum(), isdigit
27b90 28 29 20 61 6e 64 20 69 73 78 64 69 67 69 74 28  () and isxdigit(
27ba0 29 2c 20 72 65 73 70 65 63 74 69 76 65 6c 79 2e  ), respectively.
27bb0 20 54 68 65 0a 2a 2a 20 73 71 6c 69 74 65 20 76   The.** sqlite v
27bc0 65 72 73 69 6f 6e 73 20 6f 6e 6c 79 20 77 6f 72  ersions only wor
27bd0 6b 20 66 6f 72 20 41 53 43 49 49 20 63 68 61 72  k for ASCII char
27be0 61 63 74 65 72 73 2c 20 72 65 67 61 72 64 6c 65  acters, regardle
27bf0 73 73 20 6f 66 20 6c 6f 63 61 6c 65 2e 0a 2a 2f  ss of locale..*/
27c00 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 41  .#ifdef SQLITE_A
27c10 53 43 49 49 0a 23 20 64 65 66 69 6e 65 20 73 71  SCII.# define sq
27c20 6c 69 74 65 33 54 6f 75 70 70 65 72 28 78 29 20  lite3Toupper(x) 
27c30 20 28 28 78 29 26 7e 28 73 71 6c 69 74 65 33 43   ((x)&~(sqlite3C
27c40 74 79 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65  typeMap[(unsigne
27c50 64 20 63 68 61 72 29 28 78 29 5d 26 30 78 32 30  d char)(x)]&0x20
27c60 29 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  )).# define sqli
27c70 74 65 33 49 73 73 70 61 63 65 28 78 29 20 20 20  te3Isspace(x)   
27c80 28 73 71 6c 69 74 65 33 43 74 79 70 65 4d 61 70  (sqlite3CtypeMap
27c90 5b 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29  [(unsigned char)
27ca0 28 78 29 5d 26 30 78 30 31 29 0a 23 20 64 65 66  (x)]&0x01).# def
27cb0 69 6e 65 20 73 71 6c 69 74 65 33 49 73 61 6c 6e  ine sqlite3Isaln
27cc0 75 6d 28 78 29 20 20 20 28 73 71 6c 69 74 65 33  um(x)   (sqlite3
27cd0 43 74 79 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e  CtypeMap[(unsign
27ce0 65 64 20 63 68 61 72 29 28 78 29 5d 26 30 78 30  ed char)(x)]&0x0
27cf0 36 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  6).# define sqli
27d00 74 65 33 49 73 61 6c 70 68 61 28 78 29 20 20 20  te3Isalpha(x)   
27d10 28 73 71 6c 69 74 65 33 43 74 79 70 65 4d 61 70  (sqlite3CtypeMap
27d20 5b 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29  [(unsigned char)
27d30 28 78 29 5d 26 30 78 30 32 29 0a 23 20 64 65 66  (x)]&0x02).# def
27d40 69 6e 65 20 73 71 6c 69 74 65 33 49 73 64 69 67  ine sqlite3Isdig
27d50 69 74 28 78 29 20 20 20 28 73 71 6c 69 74 65 33  it(x)   (sqlite3
27d60 43 74 79 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e  CtypeMap[(unsign
27d70 65 64 20 63 68 61 72 29 28 78 29 5d 26 30 78 30  ed char)(x)]&0x0
27d80 34 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  4).# define sqli
27d90 74 65 33 49 73 78 64 69 67 69 74 28 78 29 20 20  te3Isxdigit(x)  
27da0 28 73 71 6c 69 74 65 33 43 74 79 70 65 4d 61 70  (sqlite3CtypeMap
27db0 5b 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29  [(unsigned char)
27dc0 28 78 29 5d 26 30 78 30 38 29 0a 23 20 64 65 66  (x)]&0x08).# def
27dd0 69 6e 65 20 73 71 6c 69 74 65 33 54 6f 6c 6f 77  ine sqlite3Tolow
27de0 65 72 28 78 29 20 20 20 28 73 71 6c 69 74 65 33  er(x)   (sqlite3
27df0 55 70 70 65 72 54 6f 4c 6f 77 65 72 5b 28 75 6e  UpperToLower[(un
27e00 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d  signed char)(x)]
27e10 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
27e20 65 33 49 73 71 75 6f 74 65 28 78 29 20 20 20 28  e3Isquote(x)   (
27e30 73 71 6c 69 74 65 33 43 74 79 70 65 4d 61 70 5b  sqlite3CtypeMap[
27e40 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28  (unsigned char)(
27e50 78 29 5d 26 30 78 38 30 29 0a 23 65 6c 73 65 0a  x)]&0x80).#else.
27e60 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
27e70 54 6f 75 70 70 65 72 28 78 29 20 20 20 74 6f 75  Toupper(x)   tou
27e80 70 70 65 72 28 28 75 6e 73 69 67 6e 65 64 20 63  pper((unsigned c
27e90 68 61 72 29 28 78 29 29 0a 23 20 64 65 66 69 6e  har)(x)).# defin
27ea0 65 20 73 71 6c 69 74 65 33 49 73 73 70 61 63 65  e sqlite3Isspace
27eb0 28 78 29 20 20 20 69 73 73 70 61 63 65 28 28 75  (x)   isspace((u
27ec0 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29  nsigned char)(x)
27ed0 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
27ee0 65 33 49 73 61 6c 6e 75 6d 28 78 29 20 20 20 69  e3Isalnum(x)   i
27ef0 73 61 6c 6e 75 6d 28 28 75 6e 73 69 67 6e 65 64  salnum((unsigned
27f00 20 63 68 61 72 29 28 78 29 29 0a 23 20 64 65 66   char)(x)).# def
27f10 69 6e 65 20 73 71 6c 69 74 65 33 49 73 61 6c 70  ine sqlite3Isalp
27f20 68 61 28 78 29 20 20 20 69 73 61 6c 70 68 61 28  ha(x)   isalpha(
27f30 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28  (unsigned char)(
27f40 78 29 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  x)).# define sql
27f50 69 74 65 33 49 73 64 69 67 69 74 28 78 29 20 20  ite3Isdigit(x)  
27f60 20 69 73 64 69 67 69 74 28 28 75 6e 73 69 67 6e   isdigit((unsign
27f70 65 64 20 63 68 61 72 29 28 78 29 29 0a 23 20 64  ed char)(x)).# d
27f80 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 78  efine sqlite3Isx
27f90 64 69 67 69 74 28 78 29 20 20 69 73 78 64 69 67  digit(x)  isxdig
27fa0 69 74 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61  it((unsigned cha
27fb0 72 29 28 78 29 29 0a 23 20 64 65 66 69 6e 65 20  r)(x)).# define 
27fc0 73 71 6c 69 74 65 33 54 6f 6c 6f 77 65 72 28 78  sqlite3Tolower(x
27fd0 29 20 20 20 74 6f 6c 6f 77 65 72 28 28 75 6e 73  )   tolower((uns
27fe0 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 29 0a  igned char)(x)).
27ff0 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
28000 49 73 71 75 6f 74 65 28 78 29 20 20 20 28 28 78  Isquote(x)   ((x
28010 29 3d 3d 27 22 27 7c 7c 28 78 29 3d 3d 27 5c 27  )=='"'||(x)=='\'
28020 27 7c 7c 28 78 29 3d 3d 27 5b 27 7c 7c 28 78 29  '||(x)=='['||(x)
28030 3d 3d 27 60 27 29 0a 23 65 6e 64 69 66 0a 69 6e  =='`').#endif.in
28040 74 20 73 71 6c 69 74 65 33 49 73 49 64 43 68 61  t sqlite3IsIdCha
28050 72 28 75 38 29 3b 0a 0a 2f 2a 0a 2a 2a 20 49 6e  r(u8);../*.** In
28060 74 65 72 6e 61 6c 20 66 75 6e 63 74 69 6f 6e 20  ternal function 
28070 70 72 6f 74 6f 74 79 70 65 73 0a 2a 2f 0a 69 6e  prototypes.*/.in
28080 74 20 73 71 6c 69 74 65 33 53 74 72 49 43 6d 70  t sqlite3StrICmp
28090 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e  (const char*,con
280a0 73 74 20 63 68 61 72 2a 29 3b 0a 69 6e 74 20 73  st char*);.int s
280b0 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 63  qlite3Strlen30(c
280c0 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 23 64 65  onst char*);.#de
280d0 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74 72 6c  fine sqlite3Strl
280e0 65 6e 33 30 4e 4e 28 43 29 20 28 73 74 72 6c 65  en30NN(C) (strle
280f0 6e 28 43 29 26 30 78 33 66 66 66 66 66 66 66 29  n(C)&0x3fffffff)
28100 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33 43 6f  .char *sqlite3Co
28110 6c 75 6d 6e 54 79 70 65 28 43 6f 6c 75 6d 6e 2a  lumnType(Column*
28120 2c 63 68 61 72 2a 29 3b 0a 23 64 65 66 69 6e 65  ,char*);.#define
28130 20 73 71 6c 69 74 65 33 53 74 72 4e 49 43 6d 70   sqlite3StrNICmp
28140 20 73 71 6c 69 74 65 33 5f 73 74 72 6e 69 63 6d   sqlite3_strnicm
28150 70 0a 0a 69 6e 74 20 73 71 6c 69 74 65 33 4d 61  p..int sqlite3Ma
28160 6c 6c 6f 63 49 6e 69 74 28 76 6f 69 64 29 3b 0a  llocInit(void);.
28170 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 61 6c 6c  void sqlite3Mall
28180 6f 63 45 6e 64 28 76 6f 69 64 29 3b 0a 76 6f 69  ocEnd(void);.voi
28190 64 20 2a 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63  d *sqlite3Malloc
281a0 28 75 36 34 29 3b 0a 76 6f 69 64 20 2a 73 71 6c  (u64);.void *sql
281b0 69 74 65 33 4d 61 6c 6c 6f 63 5a 65 72 6f 28 75  ite3MallocZero(u
281c0 36 34 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74  64);.void *sqlit
281d0 65 33 44 62 4d 61 6c 6c 6f 63 5a 65 72 6f 28 73  e3DbMallocZero(s
281e0 71 6c 69 74 65 33 2a 2c 20 75 36 34 29 3b 0a 76  qlite3*, u64);.v
281f0 6f 69 64 20 2a 73 71 6c 69 74 65 33 44 62 4d 61  oid *sqlite3DbMa
28200 6c 6c 6f 63 52 61 77 28 73 71 6c 69 74 65 33 2a  llocRaw(sqlite3*
28210 2c 20 75 36 34 29 3b 0a 76 6f 69 64 20 2a 73 71  , u64);.void *sq
28220 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 52 61 77  lite3DbMallocRaw
28230 4e 4e 28 73 71 6c 69 74 65 33 2a 2c 20 75 36 34  NN(sqlite3*, u64
28240 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33  );.char *sqlite3
28250 44 62 53 74 72 44 75 70 28 73 71 6c 69 74 65 33  DbStrDup(sqlite3
28260 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  *,const char*);.
28270 63 68 61 72 20 2a 73 71 6c 69 74 65 33 44 62 53  char *sqlite3DbS
28280 74 72 4e 44 75 70 28 73 71 6c 69 74 65 33 2a 2c  trNDup(sqlite3*,
28290 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 75 36 34  const char*, u64
282a0 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33  );.char *sqlite3
282b0 44 62 53 70 61 6e 44 75 70 28 73 71 6c 69 74 65  DbSpanDup(sqlite
282c0 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63  3*,const char*,c
282d0 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69  onst char*);.voi
282e0 64 20 2a 73 71 6c 69 74 65 33 52 65 61 6c 6c 6f  d *sqlite3Reallo
282f0 63 28 76 6f 69 64 2a 2c 20 75 36 34 29 3b 0a 76  c(void*, u64);.v
28300 6f 69 64 20 2a 73 71 6c 69 74 65 33 44 62 52 65  oid *sqlite3DbRe
28310 61 6c 6c 6f 63 4f 72 46 72 65 65 28 73 71 6c 69  allocOrFree(sqli
28320 74 65 33 20 2a 2c 20 76 6f 69 64 20 2a 2c 20 75  te3 *, void *, u
28330 36 34 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74  64);.void *sqlit
28340 65 33 44 62 52 65 61 6c 6c 6f 63 28 73 71 6c 69  e3DbRealloc(sqli
28350 74 65 33 20 2a 2c 20 76 6f 69 64 20 2a 2c 20 75  te3 *, void *, u
28360 36 34 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  64);.void sqlite
28370 33 44 62 46 72 65 65 28 73 71 6c 69 74 65 33 2a  3DbFree(sqlite3*
28380 2c 20 76 6f 69 64 2a 29 3b 0a 76 6f 69 64 20 73  , void*);.void s
28390 71 6c 69 74 65 33 44 62 46 72 65 65 4e 4e 28 73  qlite3DbFreeNN(s
283a0 71 6c 69 74 65 33 2a 2c 20 76 6f 69 64 2a 29 3b  qlite3*, void*);
283b0 0a 69 6e 74 20 73 71 6c 69 74 65 33 4d 61 6c 6c  .int sqlite3Mall
283c0 6f 63 53 69 7a 65 28 76 6f 69 64 2a 29 3b 0a 69  ocSize(void*);.i
283d0 6e 74 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c  nt sqlite3DbMall
283e0 6f 63 53 69 7a 65 28 73 71 6c 69 74 65 33 2a 2c  ocSize(sqlite3*,
283f0 20 76 6f 69 64 2a 29 3b 0a 76 6f 69 64 20 2a 73   void*);.void *s
28400 71 6c 69 74 65 33 50 61 67 65 4d 61 6c 6c 6f 63  qlite3PageMalloc
28410 28 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69  (int);.void sqli
28420 74 65 33 50 61 67 65 46 72 65 65 28 76 6f 69 64  te3PageFree(void
28430 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
28440 4d 65 6d 53 65 74 44 65 66 61 75 6c 74 28 76 6f  MemSetDefault(vo
28450 69 64 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c  id);.#ifndef SQL
28460 49 54 45 5f 55 4e 54 45 53 54 41 42 4c 45 0a 76  ITE_UNTESTABLE.v
28470 6f 69 64 20 73 71 6c 69 74 65 33 42 65 6e 69 67  oid sqlite3Benig
28480 6e 4d 61 6c 6c 6f 63 48 6f 6f 6b 73 28 76 6f 69  nMallocHooks(voi
28490 64 20 28 2a 29 28 76 6f 69 64 29 2c 20 76 6f 69  d (*)(void), voi
284a0 64 20 28 2a 29 28 76 6f 69 64 29 29 3b 0a 23 65  d (*)(void));.#e
284b0 6e 64 69 66 0a 69 6e 74 20 73 71 6c 69 74 65 33  ndif.int sqlite3
284c0 48 65 61 70 4e 65 61 72 6c 79 46 75 6c 6c 28 76  HeapNearlyFull(v
284d0 6f 69 64 29 3b 0a 0a 2f 2a 0a 2a 2a 20 4f 6e 20  oid);../*.** On 
284e0 73 79 73 74 65 6d 73 20 77 69 74 68 20 61 6d 70  systems with amp
284f0 6c 65 20 73 74 61 63 6b 20 73 70 61 63 65 20 61  le stack space a
28500 6e 64 20 74 68 61 74 20 73 75 70 70 6f 72 74 20  nd that support 
28510 61 6c 6c 6f 63 61 28 29 2c 20 6d 61 6b 65 0a 2a  alloca(), make.*
28520 2a 20 75 73 65 20 6f 66 20 61 6c 6c 6f 63 61 28  * use of alloca(
28530 29 20 74 6f 20 6f 62 74 61 69 6e 20 73 70 61 63  ) to obtain spac
28540 65 20 66 6f 72 20 6c 61 72 67 65 20 61 75 74 6f  e for large auto
28550 6d 61 74 69 63 20 6f 62 6a 65 63 74 73 2e 20 20  matic objects.  
28560 42 79 20 64 65 66 61 75 6c 74 2c 0a 2a 2a 20 6f  By default,.** o
28570 62 74 61 69 6e 20 73 70 61 63 65 20 66 72 6f 6d  btain space from
28580 20 6d 61 6c 6c 6f 63 28 29 2e 0a 2a 2a 0a 2a 2a   malloc()..**.**
28590 20 54 68 65 20 61 6c 6c 6f 63 61 28 29 20 72 6f   The alloca() ro
285a0 75 74 69 6e 65 20 6e 65 76 65 72 20 72 65 74 75  utine never retu
285b0 72 6e 73 20 4e 55 4c 4c 2e 20 20 54 68 69 73 20  rns NULL.  This 
285c0 77 69 6c 6c 20 63 61 75 73 65 20 63 6f 64 65 20  will cause code 
285d0 70 61 74 68 73 0a 2a 2a 20 74 68 61 74 20 64 65  paths.** that de
285e0 61 6c 20 77 69 74 68 20 73 71 6c 69 74 65 33 53  al with sqlite3S
285f0 74 61 63 6b 41 6c 6c 6f 63 28 29 20 66 61 69 6c  tackAlloc() fail
28600 75 72 65 73 20 74 6f 20 62 65 20 75 6e 72 65 61  ures to be unrea
28610 63 68 61 62 6c 65 2e 0a 2a 2f 0a 23 69 66 64 65  chable..*/.#ifde
28620 66 20 53 51 4c 49 54 45 5f 55 53 45 5f 41 4c 4c  f SQLITE_USE_ALL
28630 4f 43 41 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  OCA.# define sql
28640 69 74 65 33 53 74 61 63 6b 41 6c 6c 6f 63 52 61  ite3StackAllocRa
28650 77 28 44 2c 4e 29 20 20 20 61 6c 6c 6f 63 61 28  w(D,N)   alloca(
28660 4e 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  N).# define sqli
28670 74 65 33 53 74 61 63 6b 41 6c 6c 6f 63 5a 65 72  te3StackAllocZer
28680 6f 28 44 2c 4e 29 20 20 6d 65 6d 73 65 74 28 61  o(D,N)  memset(a
28690 6c 6c 6f 63 61 28 4e 29 2c 20 30 2c 20 4e 29 0a  lloca(N), 0, N).
286a0 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
286b0 53 74 61 63 6b 46 72 65 65 28 44 2c 50 29 0a 23  StackFree(D,P).#
286c0 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71  else.# define sq
286d0 6c 69 74 65 33 53 74 61 63 6b 41 6c 6c 6f 63 52  lite3StackAllocR
286e0 61 77 28 44 2c 4e 29 20 20 20 73 71 6c 69 74 65  aw(D,N)   sqlite
286f0 33 44 62 4d 61 6c 6c 6f 63 52 61 77 28 44 2c 4e  3DbMallocRaw(D,N
28700 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
28710 65 33 53 74 61 63 6b 41 6c 6c 6f 63 5a 65 72 6f  e3StackAllocZero
28720 28 44 2c 4e 29 20 20 73 71 6c 69 74 65 33 44 62  (D,N)  sqlite3Db
28730 4d 61 6c 6c 6f 63 5a 65 72 6f 28 44 2c 4e 29 0a  MallocZero(D,N).
28740 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
28750 53 74 61 63 6b 46 72 65 65 28 44 2c 50 29 20 20  StackFree(D,P)  
28760 20 20 20 20 20 73 71 6c 69 74 65 33 44 62 46 72       sqlite3DbFr
28770 65 65 28 44 2c 50 29 0a 23 65 6e 64 69 66 0a 0a  ee(D,P).#endif..
28780 2f 2a 20 44 6f 20 6e 6f 74 20 61 6c 6c 6f 77 20  /* Do not allow 
28790 62 6f 74 68 20 4d 45 4d 53 59 53 35 20 61 6e 64  both MEMSYS5 and
287a0 20 4d 45 4d 53 59 53 33 20 74 6f 20 62 65 20 64   MEMSYS3 to be d
287b0 65 66 69 6e 65 64 20 74 6f 67 65 74 68 65 72 2e  efined together.
287c0 20 20 49 66 20 74 68 65 79 0a 2a 2a 20 61 72 65    If they.** are
287d0 2c 20 64 69 73 61 62 6c 65 20 4d 45 4d 53 59 53  , disable MEMSYS
287e0 33 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49  3.*/.#ifdef SQLI
287f0 54 45 5f 45 4e 41 42 4c 45 5f 4d 45 4d 53 59 53  TE_ENABLE_MEMSYS
28800 35 0a 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f  5.const sqlite3_
28810 6d 65 6d 5f 6d 65 74 68 6f 64 73 20 2a 73 71 6c  mem_methods *sql
28820 69 74 65 33 4d 65 6d 47 65 74 4d 65 6d 73 79 73  ite3MemGetMemsys
28830 35 28 76 6f 69 64 29 3b 0a 23 75 6e 64 65 66 20  5(void);.#undef 
28840 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4d 45  SQLITE_ENABLE_ME
28850 4d 53 59 53 33 0a 23 65 6e 64 69 66 0a 23 69 66  MSYS3.#endif.#if
28860 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  def SQLITE_ENABL
28870 45 5f 4d 45 4d 53 59 53 33 0a 63 6f 6e 73 74 20  E_MEMSYS3.const 
28880 73 71 6c 69 74 65 33 5f 6d 65 6d 5f 6d 65 74 68  sqlite3_mem_meth
28890 6f 64 73 20 2a 73 71 6c 69 74 65 33 4d 65 6d 47  ods *sqlite3MemG
288a0 65 74 4d 65 6d 73 79 73 33 28 76 6f 69 64 29 3b  etMemsys3(void);
288b0 0a 23 65 6e 64 69 66 0a 0a 0a 23 69 66 6e 64 65  .#endif...#ifnde
288c0 66 20 53 51 4c 49 54 45 5f 4d 55 54 45 58 5f 4f  f SQLITE_MUTEX_O
288d0 4d 49 54 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75  MIT.  sqlite3_mu
288e0 74 65 78 5f 6d 65 74 68 6f 64 73 20 63 6f 6e 73  tex_methods cons
288f0 74 20 2a 73 71 6c 69 74 65 33 44 65 66 61 75 6c  t *sqlite3Defaul
28900 74 4d 75 74 65 78 28 76 6f 69 64 29 3b 0a 20 20  tMutex(void);.  
28910 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 6d 65  sqlite3_mutex_me
28920 74 68 6f 64 73 20 63 6f 6e 73 74 20 2a 73 71 6c  thods const *sql
28930 69 74 65 33 4e 6f 6f 70 4d 75 74 65 78 28 76 6f  ite3NoopMutex(vo
28940 69 64 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f 6d  id);.  sqlite3_m
28950 75 74 65 78 20 2a 73 71 6c 69 74 65 33 4d 75 74  utex *sqlite3Mut
28960 65 78 41 6c 6c 6f 63 28 69 6e 74 29 3b 0a 20 20  exAlloc(int);.  
28970 69 6e 74 20 73 71 6c 69 74 65 33 4d 75 74 65 78  int sqlite3Mutex
28980 49 6e 69 74 28 76 6f 69 64 29 3b 0a 20 20 69 6e  Init(void);.  in
28990 74 20 73 71 6c 69 74 65 33 4d 75 74 65 78 45 6e  t sqlite3MutexEn
289a0 64 28 76 6f 69 64 29 3b 0a 23 65 6e 64 69 66 0a  d(void);.#endif.
289b0 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c  #if !defined(SQL
289c0 49 54 45 5f 4d 55 54 45 58 5f 4f 4d 49 54 29 20  ITE_MUTEX_OMIT) 
289d0 26 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  && !defined(SQLI
289e0 54 45 5f 4d 55 54 45 58 5f 4e 4f 4f 50 29 0a 20  TE_MUTEX_NOOP). 
289f0 20 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 65 6d   void sqlite3Mem
28a00 6f 72 79 42 61 72 72 69 65 72 28 76 6f 69 64 29  oryBarrier(void)
28a10 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65  ;.#else.# define
28a20 20 73 71 6c 69 74 65 33 4d 65 6d 6f 72 79 42 61   sqlite3MemoryBa
28a30 72 72 69 65 72 28 29 0a 23 65 6e 64 69 66 0a 0a  rrier().#endif..
28a40 73 71 6c 69 74 65 33 5f 69 6e 74 36 34 20 73 71  sqlite3_int64 sq
28a50 6c 69 74 65 33 53 74 61 74 75 73 56 61 6c 75 65  lite3StatusValue
28a60 28 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69  (int);.void sqli
28a70 74 65 33 53 74 61 74 75 73 55 70 28 69 6e 74 2c  te3StatusUp(int,
28a80 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
28a90 74 65 33 53 74 61 74 75 73 44 6f 77 6e 28 69 6e  te3StatusDown(in
28aa0 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  t, int);.void sq
28ab0 6c 69 74 65 33 53 74 61 74 75 73 48 69 67 68 77  lite3StatusHighw
28ac0 61 74 65 72 28 69 6e 74 2c 20 69 6e 74 29 3b 0a  ater(int, int);.
28ad0 69 6e 74 20 73 71 6c 69 74 65 33 4c 6f 6f 6b 61  int sqlite3Looka
28ae0 73 69 64 65 55 73 65 64 28 73 71 6c 69 74 65 33  sideUsed(sqlite3
28af0 2a 2c 69 6e 74 2a 29 3b 0a 0a 2f 2a 20 41 63 63  *,int*);../* Acc
28b00 65 73 73 20 74 6f 20 6d 75 74 65 78 65 73 20 75  ess to mutexes u
28b10 73 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f 73  sed by sqlite3_s
28b20 74 61 74 75 73 28 29 20 2a 2f 0a 73 71 6c 69 74  tatus() */.sqlit
28b30 65 33 5f 6d 75 74 65 78 20 2a 73 71 6c 69 74 65  e3_mutex *sqlite
28b40 33 50 63 61 63 68 65 31 4d 75 74 65 78 28 76 6f  3Pcache1Mutex(vo
28b50 69 64 29 3b 0a 73 71 6c 69 74 65 33 5f 6d 75 74  id);.sqlite3_mut
28b60 65 78 20 2a 73 71 6c 69 74 65 33 4d 61 6c 6c 6f  ex *sqlite3Mallo
28b70 63 4d 75 74 65 78 28 76 6f 69 64 29 3b 0a 0a 23  cMutex(void);..#
28b80 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  if defined(SQLIT
28b90 45 5f 45 4e 41 42 4c 45 5f 4d 55 4c 54 49 54 48  E_ENABLE_MULTITH
28ba0 52 45 41 44 45 44 5f 43 48 45 43 4b 53 29 20 26  READED_CHECKS) &
28bb0 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  & !defined(SQLIT
28bc0 45 5f 4d 55 54 45 58 5f 4f 4d 49 54 29 0a 76 6f  E_MUTEX_OMIT).vo
28bd0 69 64 20 73 71 6c 69 74 65 33 4d 75 74 65 78 57  id sqlite3MutexW
28be0 61 72 6e 4f 6e 43 6f 6e 74 65 6e 74 69 6f 6e 28  arnOnContention(
28bf0 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 2a 29 3b  sqlite3_mutex*);
28c00 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
28c10 73 71 6c 69 74 65 33 4d 75 74 65 78 57 61 72 6e  sqlite3MutexWarn
28c20 4f 6e 43 6f 6e 74 65 6e 74 69 6f 6e 28 78 29 0a  OnContention(x).
28c30 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66 20  #endif..#ifndef 
28c40 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41  SQLITE_OMIT_FLOA
28c50 54 49 4e 47 5f 50 4f 49 4e 54 0a 20 20 69 6e 74  TING_POINT.  int
28c60 20 73 71 6c 69 74 65 33 49 73 4e 61 4e 28 64 6f   sqlite3IsNaN(do
28c70 75 62 6c 65 29 3b 0a 23 65 6c 73 65 0a 23 20 64  uble);.#else.# d
28c80 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 4e  efine sqlite3IsN
28c90 61 4e 28 58 29 20 20 30 0a 23 65 6e 64 69 66 0a  aN(X)  0.#endif.
28ca0 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e  ./*.** An instan
28cb0 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77  ce of the follow
28cc0 69 6e 67 20 73 74 72 75 63 74 75 72 65 20 68 6f  ing structure ho
28cd0 6c 64 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  lds information 
28ce0 61 62 6f 75 74 20 53 51 4c 0a 2a 2a 20 66 75 6e  about SQL.** fun
28cf0 63 74 69 6f 6e 73 20 61 72 67 75 6d 65 6e 74 73  ctions arguments
28d00 20 74 68 61 74 20 61 72 65 20 74 68 65 20 70 61   that are the pa
28d10 72 61 6d 65 74 65 72 73 20 74 6f 20 74 68 65 20  rameters to the 
28d20 70 72 69 6e 74 66 28 29 20 66 75 6e 63 74 69 6f  printf() functio
28d30 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 50 72 69  n..*/.struct Pri
28d40 6e 74 66 41 72 67 75 6d 65 6e 74 73 20 7b 0a 20  ntfArguments {. 
28d50 20 69 6e 74 20 6e 41 72 67 3b 20 20 20 20 20 20   int nArg;      
28d60 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 6f 74            /* Tot
28d70 61 6c 20 6e 75 6d 62 65 72 20 6f 66 20 61 72 67  al number of arg
28d80 75 6d 65 6e 74 73 20 2a 2f 0a 20 20 69 6e 74 20  uments */.  int 
28d90 6e 55 73 65 64 3b 20 20 20 20 20 20 20 20 20 20  nUsed;          
28da0 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
28db0 66 20 61 72 67 75 6d 65 6e 74 73 20 75 73 65 64  f arguments used
28dc0 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20 73 71 6c   so far */.  sql
28dd0 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a 61 70 41  ite3_value **apA
28de0 72 67 3b 20 20 20 2f 2a 20 54 68 65 20 61 72 67  rg;   /* The arg
28df0 75 6d 65 6e 74 20 76 61 6c 75 65 73 20 2a 2f 0a  ument values */.
28e00 7d 3b 0a 0a 63 68 61 72 20 2a 73 71 6c 69 74 65  };..char *sqlite
28e10 33 4d 50 72 69 6e 74 66 28 73 71 6c 69 74 65 33  3MPrintf(sqlite3
28e20 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 2e  *,const char*, .
28e30 2e 2e 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74  ..);.char *sqlit
28e40 65 33 56 4d 50 72 69 6e 74 66 28 73 71 6c 69 74  e3VMPrintf(sqlit
28e50 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c  e3*,const char*,
28e60 20 76 61 5f 6c 69 73 74 29 3b 0a 23 69 66 20 64   va_list);.#if d
28e70 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 45  efined(SQLITE_DE
28e80 42 55 47 29 20 7c 7c 20 64 65 66 69 6e 65 64 28  BUG) || defined(
28e90 53 51 4c 49 54 45 5f 48 41 56 45 5f 4f 53 5f 54  SQLITE_HAVE_OS_T
28ea0 52 41 43 45 29 0a 20 20 76 6f 69 64 20 73 71 6c  RACE).  void sql
28eb0 69 74 65 33 44 65 62 75 67 50 72 69 6e 74 66 28  ite3DebugPrintf(
28ec0 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 2e 2e 2e  const char*, ...
28ed0 29 3b 0a 23 65 6e 64 69 66 0a 23 69 66 20 64 65  );.#endif.#if de
28ee0 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 54 45 53  fined(SQLITE_TES
28ef0 54 29 0a 20 20 76 6f 69 64 20 2a 73 71 6c 69 74  T).  void *sqlit
28f00 65 33 54 65 73 74 54 65 78 74 54 6f 50 74 72 28  e3TestTextToPtr(
28f10 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 23 65  const char*);.#e
28f20 6e 64 69 66 0a 0a 23 69 66 20 64 65 66 69 6e 65  ndif..#if define
28f30 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47 29 0a  d(SQLITE_DEBUG).
28f40 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 54 72    void sqlite3Tr
28f50 65 65 56 69 65 77 45 78 70 72 28 54 72 65 65 56  eeViewExpr(TreeV
28f60 69 65 77 2a 2c 20 63 6f 6e 73 74 20 45 78 70 72  iew*, const Expr
28f70 2a 2c 20 75 38 29 3b 0a 20 20 76 6f 69 64 20 73  *, u8);.  void s
28f80 71 6c 69 74 65 33 54 72 65 65 56 69 65 77 42 61  qlite3TreeViewBa
28f90 72 65 45 78 70 72 4c 69 73 74 28 54 72 65 65 56  reExprList(TreeV
28fa0 69 65 77 2a 2c 20 63 6f 6e 73 74 20 45 78 70 72  iew*, const Expr
28fb0 4c 69 73 74 2a 2c 20 63 6f 6e 73 74 20 63 68 61  List*, const cha
28fc0 72 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69  r*);.  void sqli
28fd0 74 65 33 54 72 65 65 56 69 65 77 45 78 70 72 4c  te3TreeViewExprL
28fe0 69 73 74 28 54 72 65 65 56 69 65 77 2a 2c 20 63  ist(TreeView*, c
28ff0 6f 6e 73 74 20 45 78 70 72 4c 69 73 74 2a 2c 20  onst ExprList*, 
29000 75 38 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29  u8, const char*)
29010 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
29020 54 72 65 65 56 69 65 77 53 72 63 4c 69 73 74 28  TreeViewSrcList(
29030 54 72 65 65 56 69 65 77 2a 2c 20 63 6f 6e 73 74  TreeView*, const
29040 20 53 72 63 4c 69 73 74 2a 29 3b 0a 20 20 76 6f   SrcList*);.  vo
29050 69 64 20 73 71 6c 69 74 65 33 54 72 65 65 56 69  id sqlite3TreeVi
29060 65 77 53 65 6c 65 63 74 28 54 72 65 65 56 69 65  ewSelect(TreeVie
29070 77 2a 2c 20 63 6f 6e 73 74 20 53 65 6c 65 63 74  w*, const Select
29080 2a 2c 20 75 38 29 3b 0a 20 20 76 6f 69 64 20 73  *, u8);.  void s
29090 71 6c 69 74 65 33 54 72 65 65 56 69 65 77 57 69  qlite3TreeViewWi
290a0 74 68 28 54 72 65 65 56 69 65 77 2a 2c 20 63 6f  th(TreeView*, co
290b0 6e 73 74 20 57 69 74 68 2a 2c 20 75 38 29 3b 0a  nst With*, u8);.
290c0 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
290d0 4d 49 54 5f 57 49 4e 44 4f 57 46 55 4e 43 0a 20  MIT_WINDOWFUNC. 
290e0 20 76 6f 69 64 20 73 71 6c 69 74 65 33 54 72 65   void sqlite3Tre
290f0 65 56 69 65 77 57 69 6e 64 6f 77 28 54 72 65 65  eViewWindow(Tree
29100 56 69 65 77 2a 2c 20 63 6f 6e 73 74 20 57 69 6e  View*, const Win
29110 64 6f 77 2a 2c 20 75 38 29 3b 0a 20 20 76 6f 69  dow*, u8);.  voi
29120 64 20 73 71 6c 69 74 65 33 54 72 65 65 56 69 65  d sqlite3TreeVie
29130 77 57 69 6e 46 75 6e 63 28 54 72 65 65 56 69 65  wWinFunc(TreeVie
29140 77 2a 2c 20 63 6f 6e 73 74 20 57 69 6e 64 6f 77  w*, const Window
29150 2a 2c 20 75 38 29 3b 0a 23 65 6e 64 69 66 0a 23  *, u8);.#endif.#
29160 65 6e 64 69 66 0a 0a 0a 76 6f 69 64 20 73 71 6c  endif...void sql
29170 69 74 65 33 53 65 74 53 74 72 69 6e 67 28 63 68  ite3SetString(ch
29180 61 72 20 2a 2a 2c 20 73 71 6c 69 74 65 33 2a 2c  ar **, sqlite3*,
29190 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76   const char*);.v
291a0 6f 69 64 20 73 71 6c 69 74 65 33 45 72 72 6f 72  oid sqlite3Error
291b0 4d 73 67 28 50 61 72 73 65 2a 2c 20 63 6f 6e 73  Msg(Parse*, cons
291c0 74 20 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 76  t char*, ...);.v
291d0 6f 69 64 20 73 71 6c 69 74 65 33 44 65 71 75 6f  oid sqlite3Dequo
291e0 74 65 28 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20  te(char*);.void 
291f0 73 71 6c 69 74 65 33 44 65 71 75 6f 74 65 45 78  sqlite3DequoteEx
29200 70 72 28 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20  pr(Expr*);.void 
29210 73 71 6c 69 74 65 33 54 6f 6b 65 6e 49 6e 69 74  sqlite3TokenInit
29220 28 54 6f 6b 65 6e 2a 2c 63 68 61 72 2a 29 3b 0a  (Token*,char*);.
29230 69 6e 74 20 73 71 6c 69 74 65 33 4b 65 79 77 6f  int sqlite3Keywo
29240 72 64 43 6f 64 65 28 63 6f 6e 73 74 20 75 6e 73  rdCode(const uns
29250 69 67 6e 65 64 20 63 68 61 72 2a 2c 20 69 6e 74  igned char*, int
29260 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 75  );.int sqlite3Ru
29270 6e 50 61 72 73 65 72 28 50 61 72 73 65 2a 2c 20  nParser(Parse*, 
29280 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 68 61  const char*, cha
29290 72 20 2a 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  r **);.void sqli
292a0 74 65 33 46 69 6e 69 73 68 43 6f 64 69 6e 67 28  te3FinishCoding(
292b0 50 61 72 73 65 2a 29 3b 0a 69 6e 74 20 73 71 6c  Parse*);.int sql
292c0 69 74 65 33 47 65 74 54 65 6d 70 52 65 67 28 50  ite3GetTempReg(P
292d0 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  arse*);.void sql
292e0 69 74 65 33 52 65 6c 65 61 73 65 54 65 6d 70 52  ite3ReleaseTempR
292f0 65 67 28 50 61 72 73 65 2a 2c 69 6e 74 29 3b 0a  eg(Parse*,int);.
29300 69 6e 74 20 73 71 6c 69 74 65 33 47 65 74 54 65  int sqlite3GetTe
29310 6d 70 52 61 6e 67 65 28 50 61 72 73 65 2a 2c 69  mpRange(Parse*,i
29320 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
29330 33 52 65 6c 65 61 73 65 54 65 6d 70 52 61 6e 67  3ReleaseTempRang
29340 65 28 50 61 72 73 65 2a 2c 69 6e 74 2c 69 6e 74  e(Parse*,int,int
29350 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43  );.void sqlite3C
29360 6c 65 61 72 54 65 6d 70 52 65 67 43 61 63 68 65  learTempRegCache
29370 28 50 61 72 73 65 2a 29 3b 0a 23 69 66 64 65 66  (Parse*);.#ifdef
29380 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 69 6e   SQLITE_DEBUG.in
29390 74 20 73 71 6c 69 74 65 33 4e 6f 54 65 6d 70 73  t sqlite3NoTemps
293a0 49 6e 52 61 6e 67 65 28 50 61 72 73 65 2a 2c 69  InRange(Parse*,i
293b0 6e 74 2c 69 6e 74 29 3b 0a 23 65 6e 64 69 66 0a  nt,int);.#endif.
293c0 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70  Expr *sqlite3Exp
293d0 72 41 6c 6c 6f 63 28 73 71 6c 69 74 65 33 2a 2c  rAlloc(sqlite3*,
293e0 69 6e 74 2c 63 6f 6e 73 74 20 54 6f 6b 65 6e 2a  int,const Token*
293f0 2c 69 6e 74 29 3b 0a 45 78 70 72 20 2a 73 71 6c  ,int);.Expr *sql
29400 69 74 65 33 45 78 70 72 28 73 71 6c 69 74 65 33  ite3Expr(sqlite3
29410 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72  *,int,const char
29420 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
29430 45 78 70 72 41 74 74 61 63 68 53 75 62 74 72 65  ExprAttachSubtre
29440 65 73 28 73 71 6c 69 74 65 33 2a 2c 45 78 70 72  es(sqlite3*,Expr
29450 2a 2c 45 78 70 72 2a 2c 45 78 70 72 2a 29 3b 0a  *,Expr*,Expr*);.
29460 45 78 70 72 20 2a 73 71 6c 69 74 65 33 50 45 78  Expr *sqlite3PEx
29470 70 72 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20  pr(Parse*, int, 
29480 45 78 70 72 2a 2c 20 45 78 70 72 2a 29 3b 0a 76  Expr*, Expr*);.v
29490 6f 69 64 20 73 71 6c 69 74 65 33 50 45 78 70 72  oid sqlite3PExpr
294a0 41 64 64 53 65 6c 65 63 74 28 50 61 72 73 65 2a  AddSelect(Parse*
294b0 2c 20 45 78 70 72 2a 2c 20 53 65 6c 65 63 74 2a  , Expr*, Select*
294c0 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33  );.Expr *sqlite3
294d0 45 78 70 72 41 6e 64 28 73 71 6c 69 74 65 33 2a  ExprAnd(sqlite3*
294e0 2c 45 78 70 72 2a 2c 20 45 78 70 72 2a 29 3b 0a  ,Expr*, Expr*);.
294f0 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70  Expr *sqlite3Exp
29500 72 46 75 6e 63 74 69 6f 6e 28 50 61 72 73 65 2a  rFunction(Parse*
29510 2c 45 78 70 72 4c 69 73 74 2a 2c 20 54 6f 6b 65  ,ExprList*, Toke
29520 6e 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  n*, int);.void s
29530 71 6c 69 74 65 33 45 78 70 72 41 73 73 69 67 6e  qlite3ExprAssign
29540 56 61 72 4e 75 6d 62 65 72 28 50 61 72 73 65 2a  VarNumber(Parse*
29550 2c 20 45 78 70 72 2a 2c 20 75 33 32 29 3b 0a 76  , Expr*, u32);.v
29560 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 44  oid sqlite3ExprD
29570 65 6c 65 74 65 28 73 71 6c 69 74 65 33 2a 2c 20  elete(sqlite3*, 
29580 45 78 70 72 2a 29 3b 0a 45 78 70 72 4c 69 73 74  Expr*);.ExprList
29590 20 2a 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73   *sqlite3ExprLis
295a0 74 41 70 70 65 6e 64 28 50 61 72 73 65 2a 2c 45  tAppend(Parse*,E
295b0 78 70 72 4c 69 73 74 2a 2c 45 78 70 72 2a 29 3b  xprList*,Expr*);
295c0 0a 45 78 70 72 4c 69 73 74 20 2a 73 71 6c 69 74  .ExprList *sqlit
295d0 65 33 45 78 70 72 4c 69 73 74 41 70 70 65 6e 64  e3ExprListAppend
295e0 56 65 63 74 6f 72 28 50 61 72 73 65 2a 2c 45 78  Vector(Parse*,Ex
295f0 70 72 4c 69 73 74 2a 2c 49 64 4c 69 73 74 2a 2c  prList*,IdList*,
29600 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  Expr*);.void sql
29610 69 74 65 33 45 78 70 72 4c 69 73 74 53 65 74 53  ite3ExprListSetS
29620 6f 72 74 4f 72 64 65 72 28 45 78 70 72 4c 69 73  ortOrder(ExprLis
29630 74 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  t*,int);.void sq
29640 6c 69 74 65 33 45 78 70 72 4c 69 73 74 53 65 74  lite3ExprListSet
29650 4e 61 6d 65 28 50 61 72 73 65 2a 2c 45 78 70 72  Name(Parse*,Expr
29660 4c 69 73 74 2a 2c 54 6f 6b 65 6e 2a 2c 69 6e 74  List*,Token*,int
29670 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
29680 78 70 72 4c 69 73 74 53 65 74 53 70 61 6e 28 50  xprListSetSpan(P
29690 61 72 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c  arse*,ExprList*,
296a0 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73  const char*,cons
296b0 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73  t char*);.void s
296c0 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74 44 65  qlite3ExprListDe
296d0 6c 65 74 65 28 73 71 6c 69 74 65 33 2a 2c 20 45  lete(sqlite3*, E
296e0 78 70 72 4c 69 73 74 2a 29 3b 0a 75 33 32 20 73  xprList*);.u32 s
296f0 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74 46 6c  qlite3ExprListFl
29700 61 67 73 28 63 6f 6e 73 74 20 45 78 70 72 4c 69  ags(const ExprLi
29710 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  st*);.int sqlite
29720 33 49 6e 64 65 78 48 61 73 44 75 70 6c 69 63 61  3IndexHasDuplica
29730 74 65 52 6f 6f 74 50 61 67 65 28 49 6e 64 65 78  teRootPage(Index
29740 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49  *);.int sqlite3I
29750 6e 69 74 28 73 71 6c 69 74 65 33 2a 2c 20 63 68  nit(sqlite3*, ch
29760 61 72 2a 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ar**);.int sqlit
29770 65 33 49 6e 69 74 43 61 6c 6c 62 61 63 6b 28 76  e3InitCallback(v
29780 6f 69 64 2a 2c 20 69 6e 74 2c 20 63 68 61 72 2a  oid*, int, char*
29790 2a 2c 20 63 68 61 72 2a 2a 29 3b 0a 69 6e 74 20  *, char**);.int 
297a0 73 71 6c 69 74 65 33 49 6e 69 74 4f 6e 65 28 73  sqlite3InitOne(s
297b0 71 6c 69 74 65 33 2a 2c 20 69 6e 74 2c 20 63 68  qlite3*, int, ch
297c0 61 72 2a 2a 2c 20 75 33 32 29 3b 0a 76 6f 69 64  ar**, u32);.void
297d0 20 73 71 6c 69 74 65 33 50 72 61 67 6d 61 28 50   sqlite3Pragma(P
297e0 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b  arse*,Token*,Tok
297f0 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 69 6e 74 29 3b  en*,Token*,int);
29800 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
29810 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
29820 45 0a 4d 6f 64 75 6c 65 20 2a 73 71 6c 69 74 65  E.Module *sqlite
29830 33 50 72 61 67 6d 61 56 74 61 62 52 65 67 69 73  3PragmaVtabRegis
29840 74 65 72 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e  ter(sqlite3*,con
29850 73 74 20 63 68 61 72 20 2a 7a 4e 61 6d 65 29 3b  st char *zName);
29860 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c  .#endif.void sql
29870 69 74 65 33 52 65 73 65 74 41 6c 6c 53 63 68 65  ite3ResetAllSche
29880 6d 61 73 4f 66 43 6f 6e 6e 65 63 74 69 6f 6e 28  masOfConnection(
29890 73 71 6c 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20  sqlite3*);.void 
298a0 73 71 6c 69 74 65 33 52 65 73 65 74 4f 6e 65 53  sqlite3ResetOneS
298b0 63 68 65 6d 61 28 73 71 6c 69 74 65 33 2a 2c 69  chema(sqlite3*,i
298c0 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
298d0 33 43 6f 6c 6c 61 70 73 65 44 61 74 61 62 61 73  3CollapseDatabas
298e0 65 41 72 72 61 79 28 73 71 6c 69 74 65 33 2a 29  eArray(sqlite3*)
298f0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f  ;.void sqlite3Co
29900 6d 6d 69 74 49 6e 74 65 72 6e 61 6c 43 68 61 6e  mmitInternalChan
29910 67 65 73 28 73 71 6c 69 74 65 33 2a 29 3b 0a 76  ges(sqlite3*);.v
29920 6f 69 64 20 73 71 6c 69 74 65 33 44 65 6c 65 74  oid sqlite3Delet
29930 65 43 6f 6c 75 6d 6e 4e 61 6d 65 73 28 73 71 6c  eColumnNames(sql
29940 69 74 65 33 2a 2c 54 61 62 6c 65 2a 29 3b 0a 69  ite3*,Table*);.i
29950 6e 74 20 73 71 6c 69 74 65 33 43 6f 6c 75 6d 6e  nt sqlite3Column
29960 73 46 72 6f 6d 45 78 70 72 4c 69 73 74 28 50 61  sFromExprList(Pa
29970 72 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 69  rse*,ExprList*,i
29980 31 36 2a 2c 43 6f 6c 75 6d 6e 2a 2a 29 3b 0a 76  16*,Column**);.v
29990 6f 69 64 20 73 71 6c 69 74 65 33 53 65 6c 65 63  oid sqlite3Selec
299a0 74 41 64 64 43 6f 6c 75 6d 6e 54 79 70 65 41 6e  tAddColumnTypeAn
299b0 64 43 6f 6c 6c 61 74 69 6f 6e 28 50 61 72 73 65  dCollation(Parse
299c0 2a 2c 54 61 62 6c 65 2a 2c 53 65 6c 65 63 74 2a  *,Table*,Select*
299d0 29 3b 0a 54 61 62 6c 65 20 2a 73 71 6c 69 74 65  );.Table *sqlite
299e0 33 52 65 73 75 6c 74 53 65 74 4f 66 53 65 6c 65  3ResultSetOfSele
299f0 63 74 28 50 61 72 73 65 2a 2c 53 65 6c 65 63 74  ct(Parse*,Select
29a00 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
29a10 4f 70 65 6e 4d 61 73 74 65 72 54 61 62 6c 65 28  OpenMasterTable(
29a20 50 61 72 73 65 20 2a 2c 20 69 6e 74 29 3b 0a 49  Parse *, int);.I
29a30 6e 64 65 78 20 2a 73 71 6c 69 74 65 33 50 72 69  ndex *sqlite3Pri
29a40 6d 61 72 79 4b 65 79 49 6e 64 65 78 28 54 61 62  maryKeyIndex(Tab
29a50 6c 65 2a 29 3b 0a 69 31 36 20 73 71 6c 69 74 65  le*);.i16 sqlite
29a60 33 43 6f 6c 75 6d 6e 4f 66 49 6e 64 65 78 28 49  3ColumnOfIndex(I
29a70 6e 64 65 78 2a 2c 20 69 31 36 29 3b 0a 76 6f 69  ndex*, i16);.voi
29a80 64 20 73 71 6c 69 74 65 33 53 74 61 72 74 54 61  d sqlite3StartTa
29a90 62 6c 65 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e  ble(Parse*,Token
29aa0 2a 2c 54 6f 6b 65 6e 2a 2c 69 6e 74 2c 69 6e 74  *,Token*,int,int
29ab0 2c 69 6e 74 2c 69 6e 74 29 3b 0a 23 69 66 20 53  ,int,int);.#if S
29ac0 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 48 49 44  QLITE_ENABLE_HID
29ad0 44 45 4e 5f 43 4f 4c 55 4d 4e 53 0a 20 20 76 6f  DEN_COLUMNS.  vo
29ae0 69 64 20 73 71 6c 69 74 65 33 43 6f 6c 75 6d 6e  id sqlite3Column
29af0 50 72 6f 70 65 72 74 69 65 73 46 72 6f 6d 4e 61  PropertiesFromNa
29b00 6d 65 28 54 61 62 6c 65 2a 2c 20 43 6f 6c 75 6d  me(Table*, Colum
29b10 6e 2a 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66  n*);.#else.# def
29b20 69 6e 65 20 73 71 6c 69 74 65 33 43 6f 6c 75 6d  ine sqlite3Colum
29b30 6e 50 72 6f 70 65 72 74 69 65 73 46 72 6f 6d 4e  nPropertiesFromN
29b40 61 6d 65 28 54 2c 43 29 20 2f 2a 20 6e 6f 2d 6f  ame(T,C) /* no-o
29b50 70 20 2a 2f 0a 23 65 6e 64 69 66 0a 76 6f 69 64  p */.#endif.void
29b60 20 73 71 6c 69 74 65 33 41 64 64 43 6f 6c 75 6d   sqlite3AddColum
29b70 6e 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c  n(Parse*,Token*,
29b80 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71  Token*);.void sq
29b90 6c 69 74 65 33 41 64 64 4e 6f 74 4e 75 6c 6c 28  lite3AddNotNull(
29ba0 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 76 6f  Parse*, int);.vo
29bb0 69 64 20 73 71 6c 69 74 65 33 41 64 64 50 72 69  id sqlite3AddPri
29bc0 6d 61 72 79 4b 65 79 28 50 61 72 73 65 2a 2c 20  maryKey(Parse*, 
29bd0 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74 2c 20  ExprList*, int, 
29be0 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  int, int);.void 
29bf0 73 71 6c 69 74 65 33 41 64 64 43 68 65 63 6b 43  sqlite3AddCheckC
29c00 6f 6e 73 74 72 61 69 6e 74 28 50 61 72 73 65 2a  onstraint(Parse*
29c10 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73  , Expr*);.void s
29c20 71 6c 69 74 65 33 41 64 64 44 65 66 61 75 6c 74  qlite3AddDefault
29c30 56 61 6c 75 65 28 50 61 72 73 65 2a 2c 45 78 70  Value(Parse*,Exp
29c40 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63  r*,const char*,c
29c50 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69  onst char*);.voi
29c60 64 20 73 71 6c 69 74 65 33 41 64 64 43 6f 6c 6c  d sqlite3AddColl
29c70 61 74 65 54 79 70 65 28 50 61 72 73 65 2a 2c 20  ateType(Parse*, 
29c80 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71  Token*);.void sq
29c90 6c 69 74 65 33 45 6e 64 54 61 62 6c 65 28 50 61  lite3EndTable(Pa
29ca0 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65  rse*,Token*,Toke
29cb0 6e 2a 2c 75 38 2c 53 65 6c 65 63 74 2a 29 3b 0a  n*,u8,Select*);.
29cc0 69 6e 74 20 73 71 6c 69 74 65 33 50 61 72 73 65  int sqlite3Parse
29cd0 55 72 69 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c  Uri(const char*,
29ce0 63 6f 6e 73 74 20 63 68 61 72 2a 2c 75 6e 73 69  const char*,unsi
29cf0 67 6e 65 64 20 69 6e 74 2a 2c 0a 20 20 20 20 20  gned int*,.     
29d00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
29d10 71 6c 69 74 65 33 5f 76 66 73 2a 2a 2c 63 68 61  qlite3_vfs**,cha
29d20 72 2a 2a 2c 63 68 61 72 20 2a 2a 29 3b 0a 23 69  r**,char **);.#i
29d30 66 64 65 66 20 53 51 4c 49 54 45 5f 48 41 53 5f  fdef SQLITE_HAS_
29d40 43 4f 44 45 43 0a 20 20 69 6e 74 20 73 71 6c 69  CODEC.  int sqli
29d50 74 65 33 43 6f 64 65 63 51 75 65 72 79 50 61 72  te3CodecQueryPar
29d60 61 6d 65 74 65 72 73 28 73 71 6c 69 74 65 33 2a  ameters(sqlite3*
29d70 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e  ,const char*,con
29d80 73 74 20 63 68 61 72 2a 29 3b 0a 23 65 6c 73 65  st char*);.#else
29d90 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
29da0 33 43 6f 64 65 63 51 75 65 72 79 50 61 72 61 6d  3CodecQueryParam
29db0 65 74 65 72 73 28 41 2c 42 2c 43 29 20 30 0a 23  eters(A,B,C) 0.#
29dc0 65 6e 64 69 66 0a 42 74 72 65 65 20 2a 73 71 6c  endif.Btree *sql
29dd0 69 74 65 33 44 62 4e 61 6d 65 54 6f 42 74 72 65  ite3DbNameToBtre
29de0 65 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74  e(sqlite3*,const
29df0 20 63 68 61 72 2a 29 3b 0a 0a 23 69 66 64 65 66   char*);..#ifdef
29e00 20 53 51 4c 49 54 45 5f 55 4e 54 45 53 54 41 42   SQLITE_UNTESTAB
29e10 4c 45 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  LE.# define sqli
29e20 74 65 33 46 61 75 6c 74 53 69 6d 28 58 29 20 53  te3FaultSim(X) S
29e30 51 4c 49 54 45 5f 4f 4b 0a 23 65 6c 73 65 0a 20  QLITE_OK.#else. 
29e40 20 69 6e 74 20 73 71 6c 69 74 65 33 46 61 75 6c   int sqlite3Faul
29e50 74 53 69 6d 28 69 6e 74 29 3b 0a 23 65 6e 64 69  tSim(int);.#endi
29e60 66 0a 0a 42 69 74 76 65 63 20 2a 73 71 6c 69 74  f..Bitvec *sqlit
29e70 65 33 42 69 74 76 65 63 43 72 65 61 74 65 28 75  e3BitvecCreate(u
29e80 33 32 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  32);.int sqlite3
29e90 42 69 74 76 65 63 54 65 73 74 28 42 69 74 76 65  BitvecTest(Bitve
29ea0 63 2a 2c 20 75 33 32 29 3b 0a 69 6e 74 20 73 71  c*, u32);.int sq
29eb0 6c 69 74 65 33 42 69 74 76 65 63 54 65 73 74 4e  lite3BitvecTestN
29ec0 6f 74 4e 75 6c 6c 28 42 69 74 76 65 63 2a 2c 20  otNull(Bitvec*, 
29ed0 75 33 32 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  u32);.int sqlite
29ee0 33 42 69 74 76 65 63 53 65 74 28 42 69 74 76 65  3BitvecSet(Bitve
29ef0 63 2a 2c 20 75 33 32 29 3b 0a 76 6f 69 64 20 73  c*, u32);.void s
29f00 71 6c 69 74 65 33 42 69 74 76 65 63 43 6c 65 61  qlite3BitvecClea
29f10 72 28 42 69 74 76 65 63 2a 2c 20 75 33 32 2c 20  r(Bitvec*, u32, 
29f20 76 6f 69 64 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  void*);.void sql
29f30 69 74 65 33 42 69 74 76 65 63 44 65 73 74 72 6f  ite3BitvecDestro
29f40 79 28 42 69 74 76 65 63 2a 29 3b 0a 75 33 32 20  y(Bitvec*);.u32 
29f50 73 71 6c 69 74 65 33 42 69 74 76 65 63 53 69 7a  sqlite3BitvecSiz
29f60 65 28 42 69 74 76 65 63 2a 29 3b 0a 23 69 66 6e  e(Bitvec*);.#ifn
29f70 64 65 66 20 53 51 4c 49 54 45 5f 55 4e 54 45 53  def SQLITE_UNTES
29f80 54 41 42 4c 45 0a 69 6e 74 20 73 71 6c 69 74 65  TABLE.int sqlite
29f90 33 42 69 74 76 65 63 42 75 69 6c 74 69 6e 54 65  3BitvecBuiltinTe
29fa0 73 74 28 69 6e 74 2c 69 6e 74 2a 29 3b 0a 23 65  st(int,int*);.#e
29fb0 6e 64 69 66 0a 0a 52 6f 77 53 65 74 20 2a 73 71  ndif..RowSet *sq
29fc0 6c 69 74 65 33 52 6f 77 53 65 74 49 6e 69 74 28  lite3RowSetInit(
29fd0 73 71 6c 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20  sqlite3*);.void 
29fe0 73 71 6c 69 74 65 33 52 6f 77 53 65 74 44 65 6c  sqlite3RowSetDel
29ff0 65 74 65 28 76 6f 69 64 2a 29 3b 0a 76 6f 69 64  ete(void*);.void
2a000 20 73 71 6c 69 74 65 33 52 6f 77 53 65 74 43 6c   sqlite3RowSetCl
2a010 65 61 72 28 76 6f 69 64 2a 29 3b 0a 76 6f 69 64  ear(void*);.void
2a020 20 73 71 6c 69 74 65 33 52 6f 77 53 65 74 49 6e   sqlite3RowSetIn
2a030 73 65 72 74 28 52 6f 77 53 65 74 2a 2c 20 69 36  sert(RowSet*, i6
2a040 34 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52  4);.int sqlite3R
2a050 6f 77 53 65 74 54 65 73 74 28 52 6f 77 53 65 74  owSetTest(RowSet
2a060 2a 2c 20 69 6e 74 20 69 42 61 74 63 68 2c 20 69  *, int iBatch, i
2a070 36 34 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  64);.int sqlite3
2a080 52 6f 77 53 65 74 4e 65 78 74 28 52 6f 77 53 65  RowSetNext(RowSe
2a090 74 2a 2c 20 69 36 34 2a 29 3b 0a 0a 76 6f 69 64  t*, i64*);..void
2a0a0 20 73 71 6c 69 74 65 33 43 72 65 61 74 65 56 69   sqlite3CreateVi
2a0b0 65 77 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a  ew(Parse*,Token*
2a0c0 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 45  ,Token*,Token*,E
2a0d0 78 70 72 4c 69 73 74 2a 2c 53 65 6c 65 63 74 2a  xprList*,Select*
2a0e0 2c 69 6e 74 2c 69 6e 74 29 3b 0a 0a 23 69 66 20  ,int,int);..#if 
2a0f0 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
2a100 4f 4d 49 54 5f 56 49 45 57 29 20 7c 7c 20 21 64  OMIT_VIEW) || !d
2a110 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d  efined(SQLITE_OM
2a120 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 29  IT_VIRTUALTABLE)
2a130 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 56 69  .  int sqlite3Vi
2a140 65 77 47 65 74 43 6f 6c 75 6d 6e 4e 61 6d 65 73  ewGetColumnNames
2a150 28 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a 29 3b  (Parse*,Table*);
2a160 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
2a170 73 71 6c 69 74 65 33 56 69 65 77 47 65 74 43 6f  sqlite3ViewGetCo
2a180 6c 75 6d 6e 4e 61 6d 65 73 28 41 2c 42 29 20 30  lumnNames(A,B) 0
2a190 0a 23 65 6e 64 69 66 0a 0a 23 69 66 20 53 51 4c  .#endif..#if SQL
2a1a0 49 54 45 5f 4d 41 58 5f 41 54 54 41 43 48 45 44  ITE_MAX_ATTACHED
2a1b0 3e 33 30 0a 20 20 69 6e 74 20 73 71 6c 69 74 65  >30.  int sqlite
2a1c0 33 44 62 4d 61 73 6b 41 6c 6c 5a 65 72 6f 28 79  3DbMaskAllZero(y
2a1d0 44 62 4d 61 73 6b 29 3b 0a 23 65 6e 64 69 66 0a  DbMask);.#endif.
2a1e0 76 6f 69 64 20 73 71 6c 69 74 65 33 44 72 6f 70  void sqlite3Drop
2a1f0 54 61 62 6c 65 28 50 61 72 73 65 2a 2c 20 53 72  Table(Parse*, Sr
2a200 63 4c 69 73 74 2a 2c 20 69 6e 74 2c 20 69 6e 74  cList*, int, int
2a210 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43  );.void sqlite3C
2a220 6f 64 65 44 72 6f 70 54 61 62 6c 65 28 50 61 72  odeDropTable(Par
2a230 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74  se*, Table*, int
2a240 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
2a250 69 74 65 33 44 65 6c 65 74 65 54 61 62 6c 65 28  ite3DeleteTable(
2a260 73 71 6c 69 74 65 33 2a 2c 20 54 61 62 6c 65 2a  sqlite3*, Table*
2a270 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 46  );.void sqlite3F
2a280 72 65 65 49 6e 64 65 78 28 73 71 6c 69 74 65 33  reeIndex(sqlite3
2a290 2a 2c 20 49 6e 64 65 78 2a 29 3b 0a 23 69 66 6e  *, Index*);.#ifn
2a2a0 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
2a2b0 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 0a 20 20  AUTOINCREMENT.  
2a2c0 76 6f 69 64 20 73 71 6c 69 74 65 33 41 75 74 6f  void sqlite3Auto
2a2d0 69 6e 63 72 65 6d 65 6e 74 42 65 67 69 6e 28 50  incrementBegin(P
2a2e0 61 72 73 65 20 2a 70 50 61 72 73 65 29 3b 0a 20  arse *pParse);. 
2a2f0 20 76 6f 69 64 20 73 71 6c 69 74 65 33 41 75 74   void sqlite3Aut
2a300 6f 69 6e 63 72 65 6d 65 6e 74 45 6e 64 28 50 61  oincrementEnd(Pa
2a310 72 73 65 20 2a 70 50 61 72 73 65 29 3b 0a 23 65  rse *pParse);.#e
2a320 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  lse.# define sql
2a330 69 74 65 33 41 75 74 6f 69 6e 63 72 65 6d 65 6e  ite3Autoincremen
2a340 74 42 65 67 69 6e 28 58 29 0a 23 20 64 65 66 69  tBegin(X).# defi
2a350 6e 65 20 73 71 6c 69 74 65 33 41 75 74 6f 69 6e  ne sqlite3Autoin
2a360 63 72 65 6d 65 6e 74 45 6e 64 28 58 29 0a 23 65  crementEnd(X).#e
2a370 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65  ndif.void sqlite
2a380 33 49 6e 73 65 72 74 28 50 61 72 73 65 2a 2c 20  3Insert(Parse*, 
2a390 53 72 63 4c 69 73 74 2a 2c 20 53 65 6c 65 63 74  SrcList*, Select
2a3a0 2a 2c 20 49 64 4c 69 73 74 2a 2c 20 69 6e 74 2c  *, IdList*, int,
2a3b0 20 55 70 73 65 72 74 2a 29 3b 0a 76 6f 69 64 20   Upsert*);.void 
2a3c0 2a 73 71 6c 69 74 65 33 41 72 72 61 79 41 6c 6c  *sqlite3ArrayAll
2a3d0 6f 63 61 74 65 28 73 71 6c 69 74 65 33 2a 2c 76  ocate(sqlite3*,v
2a3e0 6f 69 64 2a 2c 69 6e 74 2c 69 6e 74 2a 2c 69 6e  oid*,int,int*,in
2a3f0 74 2a 29 3b 0a 49 64 4c 69 73 74 20 2a 73 71 6c  t*);.IdList *sql
2a400 69 74 65 33 49 64 4c 69 73 74 41 70 70 65 6e 64  ite3IdListAppend
2a410 28 50 61 72 73 65 2a 2c 20 49 64 4c 69 73 74 2a  (Parse*, IdList*
2a420 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73  , Token*);.int s
2a430 71 6c 69 74 65 33 49 64 4c 69 73 74 49 6e 64 65  qlite3IdListInde
2a440 78 28 49 64 4c 69 73 74 2a 2c 63 6f 6e 73 74 20  x(IdList*,const 
2a450 63 68 61 72 2a 29 3b 0a 53 72 63 4c 69 73 74 20  char*);.SrcList 
2a460 2a 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74 45  *sqlite3SrcListE
2a470 6e 6c 61 72 67 65 28 50 61 72 73 65 2a 2c 20 53  nlarge(Parse*, S
2a480 72 63 4c 69 73 74 2a 2c 20 69 6e 74 2c 20 69 6e  rcList*, int, in
2a490 74 29 3b 0a 53 72 63 4c 69 73 74 20 2a 73 71 6c  t);.SrcList *sql
2a4a0 69 74 65 33 53 72 63 4c 69 73 74 41 70 70 65 6e  ite3SrcListAppen
2a4b0 64 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73  d(Parse*, SrcLis
2a4c0 74 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65  t*, Token*, Toke
2a4d0 6e 2a 29 3b 0a 53 72 63 4c 69 73 74 20 2a 73 71  n*);.SrcList *sq
2a4e0 6c 69 74 65 33 53 72 63 4c 69 73 74 41 70 70 65  lite3SrcListAppe
2a4f0 6e 64 46 72 6f 6d 54 65 72 6d 28 50 61 72 73 65  ndFromTerm(Parse
2a500 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 54 6f 6b  *, SrcList*, Tok
2a510 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c 0a 20 20 20  en*, Token*,.   
2a520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a540 20 20 20 54 6f 6b 65 6e 2a 2c 20 53 65 6c 65 63     Token*, Selec
2a550 74 2a 2c 20 45 78 70 72 2a 2c 20 49 64 4c 69 73  t*, Expr*, IdLis
2a560 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  t*);.void sqlite
2a570 33 53 72 63 4c 69 73 74 49 6e 64 65 78 65 64 42  3SrcListIndexedB
2a580 79 28 50 61 72 73 65 20 2a 2c 20 53 72 63 4c 69  y(Parse *, SrcLi
2a590 73 74 20 2a 2c 20 54 6f 6b 65 6e 20 2a 29 3b 0a  st *, Token *);.
2a5a0 76 6f 69 64 20 73 71 6c 69 74 65 33 53 72 63 4c  void sqlite3SrcL
2a5b0 69 73 74 46 75 6e 63 41 72 67 73 28 50 61 72 73  istFuncArgs(Pars
2a5c0 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 45 78  e*, SrcList*, Ex
2a5d0 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71  prList*);.int sq
2a5e0 6c 69 74 65 33 49 6e 64 65 78 65 64 42 79 4c 6f  lite3IndexedByLo
2a5f0 6f 6b 75 70 28 50 61 72 73 65 20 2a 2c 20 73 74  okup(Parse *, st
2a600 72 75 63 74 20 53 72 63 4c 69 73 74 5f 69 74 65  ruct SrcList_ite
2a610 6d 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  m *);.void sqlit
2a620 65 33 53 72 63 4c 69 73 74 53 68 69 66 74 4a 6f  e3SrcListShiftJo
2a630 69 6e 54 79 70 65 28 53 72 63 4c 69 73 74 2a 29  inType(SrcList*)
2a640 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 72  ;.void sqlite3Sr
2a650 63 4c 69 73 74 41 73 73 69 67 6e 43 75 72 73 6f  cListAssignCurso
2a660 72 73 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69  rs(Parse*, SrcLi
2a670 73 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  st*);.void sqlit
2a680 65 33 49 64 4c 69 73 74 44 65 6c 65 74 65 28 73  e3IdListDelete(s
2a690 71 6c 69 74 65 33 2a 2c 20 49 64 4c 69 73 74 2a  qlite3*, IdList*
2a6a0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53  );.void sqlite3S
2a6b0 72 63 4c 69 73 74 44 65 6c 65 74 65 28 73 71 6c  rcListDelete(sql
2a6c0 69 74 65 33 2a 2c 20 53 72 63 4c 69 73 74 2a 29  ite3*, SrcList*)
2a6d0 3b 0a 49 6e 64 65 78 20 2a 73 71 6c 69 74 65 33  ;.Index *sqlite3
2a6e0 41 6c 6c 6f 63 61 74 65 49 6e 64 65 78 4f 62 6a  AllocateIndexObj
2a6f0 65 63 74 28 73 71 6c 69 74 65 33 2a 2c 69 31 36  ect(sqlite3*,i16
2a700 2c 69 6e 74 2c 63 68 61 72 2a 2a 29 3b 0a 76 6f  ,int,char**);.vo
2a710 69 64 20 73 71 6c 69 74 65 33 43 72 65 61 74 65  id sqlite3Create
2a720 49 6e 64 65 78 28 50 61 72 73 65 2a 2c 54 6f 6b  Index(Parse*,Tok
2a730 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 53 72 63 4c 69  en*,Token*,SrcLi
2a740 73 74 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 69 6e  st*,ExprList*,in
2a750 74 2c 54 6f 6b 65 6e 2a 2c 0a 20 20 20 20 20 20  t,Token*,.      
2a760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a770 20 20 20 20 45 78 70 72 2a 2c 20 69 6e 74 2c 20      Expr*, int, 
2a780 69 6e 74 2c 20 75 38 29 3b 0a 76 6f 69 64 20 73  int, u8);.void s
2a790 71 6c 69 74 65 33 44 72 6f 70 49 6e 64 65 78 28  qlite3DropIndex(
2a7a0 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a  Parse*, SrcList*
2a7b0 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69  , int);.int sqli
2a7c0 74 65 33 53 65 6c 65 63 74 28 50 61 72 73 65 2a  te3Select(Parse*
2a7d0 2c 20 53 65 6c 65 63 74 2a 2c 20 53 65 6c 65 63  , Select*, Selec
2a7e0 74 44 65 73 74 2a 29 3b 0a 53 65 6c 65 63 74 20  tDest*);.Select 
2a7f0 2a 73 71 6c 69 74 65 33 53 65 6c 65 63 74 4e 65  *sqlite3SelectNe
2a800 77 28 50 61 72 73 65 2a 2c 45 78 70 72 4c 69 73  w(Parse*,ExprLis
2a810 74 2a 2c 53 72 63 4c 69 73 74 2a 2c 45 78 70 72  t*,SrcList*,Expr
2a820 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 0a 20 20 20  *,ExprList*,.   
2a830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a840 20 20 20 20 20 20 45 78 70 72 2a 2c 45 78 70 72        Expr*,Expr
2a850 4c 69 73 74 2a 2c 75 33 32 2c 45 78 70 72 2a 29  List*,u32,Expr*)
2a860 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 65  ;.void sqlite3Se
2a870 6c 65 63 74 44 65 6c 65 74 65 28 73 71 6c 69 74  lectDelete(sqlit
2a880 65 33 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 54  e3*, Select*);.T
2a890 61 62 6c 65 20 2a 73 71 6c 69 74 65 33 53 72 63  able *sqlite3Src
2a8a0 4c 69 73 74 4c 6f 6f 6b 75 70 28 50 61 72 73 65  ListLookup(Parse
2a8b0 2a 2c 20 53 72 63 4c 69 73 74 2a 29 3b 0a 69 6e  *, SrcList*);.in
2a8c0 74 20 73 71 6c 69 74 65 33 49 73 52 65 61 64 4f  t sqlite3IsReadO
2a8d0 6e 6c 79 28 50 61 72 73 65 2a 2c 20 54 61 62 6c  nly(Parse*, Tabl
2a8e0 65 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  e*, int);.void s
2a8f0 71 6c 69 74 65 33 4f 70 65 6e 54 61 62 6c 65 28  qlite3OpenTable(
2a900 50 61 72 73 65 2a 2c 20 69 6e 74 20 69 43 75 72  Parse*, int iCur
2a910 2c 20 69 6e 74 20 69 44 62 2c 20 54 61 62 6c 65  , int iDb, Table
2a920 2a 2c 20 69 6e 74 29 3b 0a 23 69 66 20 64 65 66  *, int);.#if def
2a930 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42  ined(SQLITE_ENAB
2a940 4c 45 5f 55 50 44 41 54 45 5f 44 45 4c 45 54 45  LE_UPDATE_DELETE
2a950 5f 4c 49 4d 49 54 29 20 26 26 20 21 64 65 66 69  _LIMIT) && !defi
2a960 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ned(SQLITE_OMIT_
2a970 53 55 42 51 55 45 52 59 29 0a 45 78 70 72 20 2a  SUBQUERY).Expr *
2a980 73 71 6c 69 74 65 33 4c 69 6d 69 74 57 68 65 72  sqlite3LimitWher
2a990 65 28 50 61 72 73 65 2a 2c 53 72 63 4c 69 73 74  e(Parse*,SrcList
2a9a0 2a 2c 45 78 70 72 2a 2c 45 78 70 72 4c 69 73 74  *,Expr*,ExprList
2a9b0 2a 2c 45 78 70 72 2a 2c 63 68 61 72 2a 29 3b 0a  *,Expr*,char*);.
2a9c0 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c 69  #endif.void sqli
2a9d0 74 65 33 44 65 6c 65 74 65 46 72 6f 6d 28 50 61  te3DeleteFrom(Pa
2a9e0 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20  rse*, SrcList*, 
2a9f0 45 78 70 72 2a 2c 20 45 78 70 72 4c 69 73 74 2a  Expr*, ExprList*
2aa00 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73  , Expr*);.void s
2aa10 71 6c 69 74 65 33 55 70 64 61 74 65 28 50 61 72  qlite3Update(Par
2aa20 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 45  se*, SrcList*, E
2aa30 78 70 72 4c 69 73 74 2a 2c 45 78 70 72 2a 2c 69  xprList*,Expr*,i
2aa40 6e 74 2c 45 78 70 72 4c 69 73 74 2a 2c 45 78 70  nt,ExprList*,Exp
2aa50 72 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  r*,.            
2aa60 20 20 20 20 20 20 20 55 70 73 65 72 74 2a 29 3b         Upsert*);
2aa70 0a 57 68 65 72 65 49 6e 66 6f 20 2a 73 71 6c 69  .WhereInfo *sqli
2aa80 74 65 33 57 68 65 72 65 42 65 67 69 6e 28 50 61  te3WhereBegin(Pa
2aa90 72 73 65 2a 2c 53 72 63 4c 69 73 74 2a 2c 45 78  rse*,SrcList*,Ex
2aaa0 70 72 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 45 78  pr*,ExprList*,Ex
2aab0 70 72 4c 69 73 74 2a 2c 75 31 36 2c 69 6e 74 29  prList*,u16,int)
2aac0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 57 68  ;.void sqlite3Wh
2aad0 65 72 65 45 6e 64 28 57 68 65 72 65 49 6e 66 6f  ereEnd(WhereInfo
2aae0 2a 29 3b 0a 4c 6f 67 45 73 74 20 73 71 6c 69 74  *);.LogEst sqlit
2aaf0 65 33 57 68 65 72 65 4f 75 74 70 75 74 52 6f 77  e3WhereOutputRow
2ab00 43 6f 75 6e 74 28 57 68 65 72 65 49 6e 66 6f 2a  Count(WhereInfo*
2ab10 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 68  );.int sqlite3Wh
2ab20 65 72 65 49 73 44 69 73 74 69 6e 63 74 28 57 68  ereIsDistinct(Wh
2ab30 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73  ereInfo*);.int s
2ab40 71 6c 69 74 65 33 57 68 65 72 65 49 73 4f 72 64  qlite3WhereIsOrd
2ab50 65 72 65 64 28 57 68 65 72 65 49 6e 66 6f 2a 29  ered(WhereInfo*)
2ab60 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 68 65  ;.int sqlite3Whe
2ab70 72 65 4f 72 64 65 72 42 79 4c 69 6d 69 74 4f 70  reOrderByLimitOp
2ab80 74 4c 61 62 65 6c 28 57 68 65 72 65 49 6e 66 6f  tLabel(WhereInfo
2ab90 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57  *);.int sqlite3W
2aba0 68 65 72 65 49 73 53 6f 72 74 65 64 28 57 68 65  hereIsSorted(Whe
2abb0 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73 71  reInfo*);.int sq
2abc0 6c 69 74 65 33 57 68 65 72 65 43 6f 6e 74 69 6e  lite3WhereContin
2abd0 75 65 4c 61 62 65 6c 28 57 68 65 72 65 49 6e 66  ueLabel(WhereInf
2abe0 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  o*);.int sqlite3
2abf0 57 68 65 72 65 42 72 65 61 6b 4c 61 62 65 6c 28  WhereBreakLabel(
2ac00 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74  WhereInfo*);.int
2ac10 20 73 71 6c 69 74 65 33 57 68 65 72 65 4f 6b 4f   sqlite3WhereOkO
2ac20 6e 65 50 61 73 73 28 57 68 65 72 65 49 6e 66 6f  nePass(WhereInfo
2ac30 2a 2c 20 69 6e 74 2a 29 3b 0a 23 64 65 66 69 6e  *, int*);.#defin
2ac40 65 20 4f 4e 45 50 41 53 53 5f 4f 46 46 20 20 20  e ONEPASS_OFF   
2ac50 20 20 20 30 20 20 20 20 20 20 20 20 2f 2a 20 55     0        /* U
2ac60 73 65 20 6f 66 20 4f 4e 45 50 41 53 53 20 6e 6f  se of ONEPASS no
2ac70 74 20 61 6c 6c 6f 77 65 64 20 2a 2f 0a 23 64 65  t allowed */.#de
2ac80 66 69 6e 65 20 4f 4e 45 50 41 53 53 5f 53 49 4e  fine ONEPASS_SIN
2ac90 47 4c 45 20 20 20 31 20 20 20 20 20 20 20 20 2f  GLE   1        /
2aca0 2a 20 4f 4e 45 50 41 53 53 20 76 61 6c 69 64 20  * ONEPASS valid 
2acb0 66 6f 72 20 61 20 73 69 6e 67 6c 65 20 72 6f 77  for a single row
2acc0 20 75 70 64 61 74 65 20 2a 2f 0a 23 64 65 66 69   update */.#defi
2acd0 6e 65 20 4f 4e 45 50 41 53 53 5f 4d 55 4c 54 49  ne ONEPASS_MULTI
2ace0 20 20 20 20 32 20 20 20 20 20 20 20 20 2f 2a 20      2        /* 
2acf0 4f 4e 45 50 41 53 53 20 69 73 20 76 61 6c 69 64  ONEPASS is valid
2ad00 20 66 6f 72 20 6d 75 6c 74 69 70 6c 65 20 72 6f   for multiple ro
2ad10 77 73 20 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74  ws */.void sqlit
2ad20 65 33 45 78 70 72 43 6f 64 65 4c 6f 61 64 49 6e  e3ExprCodeLoadIn
2ad30 64 65 78 43 6f 6c 75 6d 6e 28 50 61 72 73 65 2a  dexColumn(Parse*
2ad40 2c 20 49 6e 64 65 78 2a 2c 20 69 6e 74 2c 20 69  , Index*, int, i
2ad50 6e 74 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71  nt, int);.int sq
2ad60 6c 69 74 65 33 45 78 70 72 43 6f 64 65 47 65 74  lite3ExprCodeGet
2ad70 43 6f 6c 75 6d 6e 28 50 61 72 73 65 2a 2c 20 54  Column(Parse*, T
2ad80 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c  able*, int, int,
2ad90 20 69 6e 74 2c 20 75 38 29 3b 0a 76 6f 69 64 20   int, u8);.void 
2ada0 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 47  sqlite3ExprCodeG
2adb0 65 74 43 6f 6c 75 6d 6e 4f 66 54 61 62 6c 65 28  etColumnOfTable(
2adc0 56 64 62 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69  Vdbe*, Table*, i
2add0 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76  nt, int, int);.v
2ade0 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 43  oid sqlite3ExprC
2adf0 6f 64 65 4d 6f 76 65 28 50 61 72 73 65 2a 2c 20  odeMove(Parse*, 
2ae00 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  int, int, int);.
2ae10 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
2ae20 43 6f 64 65 28 50 61 72 73 65 2a 2c 20 45 78 70  Code(Parse*, Exp
2ae30 72 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  r*, int);.void s
2ae40 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 43 6f  qlite3ExprCodeCo
2ae50 70 79 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a  py(Parse*, Expr*
2ae60 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
2ae70 69 74 65 33 45 78 70 72 43 6f 64 65 46 61 63 74  ite3ExprCodeFact
2ae80 6f 72 61 62 6c 65 28 50 61 72 73 65 2a 2c 20 45  orable(Parse*, E
2ae90 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20  xpr*, int);.int 
2aea0 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 41  sqlite3ExprCodeA
2aeb0 74 49 6e 69 74 28 50 61 72 73 65 2a 2c 20 45 78  tInit(Parse*, Ex
2aec0 70 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73  pr*, int);.int s
2aed0 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 54 65  qlite3ExprCodeTe
2aee0 6d 70 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a  mp(Parse*, Expr*
2aef0 2c 20 69 6e 74 2a 29 3b 0a 69 6e 74 20 73 71 6c  , int*);.int sql
2af00 69 74 65 33 45 78 70 72 43 6f 64 65 54 61 72 67  ite3ExprCodeTarg
2af10 65 74 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a  et(Parse*, Expr*
2af20 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
2af30 69 74 65 33 45 78 70 72 43 6f 64 65 41 6e 64 43  ite3ExprCodeAndC
2af40 61 63 68 65 28 50 61 72 73 65 2a 2c 20 45 78 70  ache(Parse*, Exp
2af50 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71  r*, int);.int sq
2af60 6c 69 74 65 33 45 78 70 72 43 6f 64 65 45 78 70  lite3ExprCodeExp
2af70 72 4c 69 73 74 28 50 61 72 73 65 2a 2c 20 45 78  rList(Parse*, Ex
2af80 70 72 4c 69 73 74 2a 2c 20 69 6e 74 2c 20 69 6e  prList*, int, in
2af90 74 2c 20 75 38 29 3b 0a 23 64 65 66 69 6e 65 20  t, u8);.#define 
2afa0 53 51 4c 49 54 45 5f 45 43 45 4c 5f 44 55 50 20  SQLITE_ECEL_DUP 
2afb0 20 20 20 20 20 30 78 30 31 20 20 2f 2a 20 44 65       0x01  /* De
2afc0 65 70 2c 20 6e 6f 74 20 73 68 61 6c 6c 6f 77 20  ep, not shallow 
2afd0 63 6f 70 69 65 73 20 2a 2f 0a 23 64 65 66 69 6e  copies */.#defin
2afe0 65 20 53 51 4c 49 54 45 5f 45 43 45 4c 5f 46 41  e SQLITE_ECEL_FA
2aff0 43 54 4f 52 20 20 20 30 78 30 32 20 20 2f 2a 20  CTOR   0x02  /* 
2b000 46 61 63 74 6f 72 20 6f 75 74 20 63 6f 6e 73 74  Factor out const
2b010 61 6e 74 20 74 65 72 6d 73 20 2a 2f 0a 23 64 65  ant terms */.#de
2b020 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 43 45 4c  fine SQLITE_ECEL
2b030 5f 52 45 46 20 20 20 20 20 20 30 78 30 34 20 20  _REF      0x04  
2b040 2f 2a 20 55 73 65 20 45 78 70 72 4c 69 73 74 2e  /* Use ExprList.
2b050 75 2e 78 2e 69 4f 72 64 65 72 42 79 43 6f 6c 20  u.x.iOrderByCol 
2b060 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
2b070 45 5f 45 43 45 4c 5f 4f 4d 49 54 52 45 46 20 20  E_ECEL_OMITREF  
2b080 30 78 30 38 20 20 2f 2a 20 4f 6d 69 74 20 69 66  0x08  /* Omit if
2b090 20 45 78 70 72 4c 69 73 74 2e 75 2e 78 2e 69 4f   ExprList.u.x.iO
2b0a0 72 64 65 72 42 79 43 6f 6c 20 2a 2f 0a 76 6f 69  rderByCol */.voi
2b0b0 64 20 73 71 6c 69 74 65 33 45 78 70 72 49 66 54  d sqlite3ExprIfT
2b0c0 72 75 65 28 50 61 72 73 65 2a 2c 20 45 78 70 72  rue(Parse*, Expr
2b0d0 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f  *, int, int);.vo
2b0e0 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 49 66  id sqlite3ExprIf
2b0f0 46 61 6c 73 65 28 50 61 72 73 65 2a 2c 20 45 78  False(Parse*, Ex
2b100 70 72 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  pr*, int, int);.
2b110 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
2b120 49 66 46 61 6c 73 65 44 75 70 28 50 61 72 73 65  IfFalseDup(Parse
2b130 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 2c 20 69  *, Expr*, int, i
2b140 6e 74 29 3b 0a 54 61 62 6c 65 20 2a 73 71 6c 69  nt);.Table *sqli
2b150 74 65 33 46 69 6e 64 54 61 62 6c 65 28 73 71 6c  te3FindTable(sql
2b160 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72  ite3*,const char
2b170 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  *, const char*);
2b180 0a 23 64 65 66 69 6e 65 20 4c 4f 43 41 54 45 5f  .#define LOCATE_
2b190 56 49 45 57 20 20 20 20 30 78 30 31 0a 23 64 65  VIEW    0x01.#de
2b1a0 66 69 6e 65 20 4c 4f 43 41 54 45 5f 4e 4f 45 52  fine LOCATE_NOER
2b1b0 52 20 20 20 30 78 30 32 0a 54 61 62 6c 65 20 2a  R   0x02.Table *
2b1c0 73 71 6c 69 74 65 33 4c 6f 63 61 74 65 54 61 62  sqlite3LocateTab
2b1d0 6c 65 28 50 61 72 73 65 2a 2c 75 33 32 20 66 6c  le(Parse*,u32 fl
2b1e0 61 67 73 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c  ags,const char*,
2b1f0 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 54   const char*);.T
2b200 61 62 6c 65 20 2a 73 71 6c 69 74 65 33 4c 6f 63  able *sqlite3Loc
2b210 61 74 65 54 61 62 6c 65 49 74 65 6d 28 50 61 72  ateTableItem(Par
2b220 73 65 2a 2c 75 33 32 20 66 6c 61 67 73 2c 73 74  se*,u32 flags,st
2b230 72 75 63 74 20 53 72 63 4c 69 73 74 5f 69 74 65  ruct SrcList_ite
2b240 6d 20 2a 29 3b 0a 49 6e 64 65 78 20 2a 73 71 6c  m *);.Index *sql
2b250 69 74 65 33 46 69 6e 64 49 6e 64 65 78 28 73 71  ite3FindIndex(sq
2b260 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61  lite3*,const cha
2b270 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29  r*, const char*)
2b280 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 55 6e  ;.void sqlite3Un
2b290 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65 54 61 62  linkAndDeleteTab
2b2a0 6c 65 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c  le(sqlite3*,int,
2b2b0 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f  const char*);.vo
2b2c0 69 64 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b  id sqlite3Unlink
2b2d0 41 6e 64 44 65 6c 65 74 65 49 6e 64 65 78 28 73  AndDeleteIndex(s
2b2e0 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73  qlite3*,int,cons
2b2f0 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73  t char*);.void s
2b300 71 6c 69 74 65 33 56 61 63 75 75 6d 28 50 61 72  qlite3Vacuum(Par
2b310 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 45 78 70 72 2a  se*,Token*,Expr*
2b320 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 75  );.int sqlite3Ru
2b330 6e 56 61 63 75 75 6d 28 63 68 61 72 2a 2a 2c 20  nVacuum(char**, 
2b340 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74 2c 20 73  sqlite3*, int, s
2b350 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 29 3b 0a  qlite3_value*);.
2b360 63 68 61 72 20 2a 73 71 6c 69 74 65 33 4e 61 6d  char *sqlite3Nam
2b370 65 46 72 6f 6d 54 6f 6b 65 6e 28 73 71 6c 69 74  eFromToken(sqlit
2b380 65 33 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e  e3*, Token*);.in
2b390 74 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 6d  t sqlite3ExprCom
2b3a0 70 61 72 65 28 50 61 72 73 65 2a 2c 45 78 70 72  pare(Parse*,Expr
2b3b0 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a  *, Expr*, int);.
2b3c0 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 43  int sqlite3ExprC
2b3d0 6f 6d 70 61 72 65 53 6b 69 70 28 45 78 70 72 2a  ompareSkip(Expr*
2b3e0 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 69  , Expr*, int);.i
2b3f0 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 4c 69  nt sqlite3ExprLi
2b400 73 74 43 6f 6d 70 61 72 65 28 45 78 70 72 4c 69  stCompare(ExprLi
2b410 73 74 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20  st*, ExprList*, 
2b420 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  int);.int sqlite
2b430 33 45 78 70 72 49 6d 70 6c 69 65 73 45 78 70 72  3ExprImpliesExpr
2b440 28 50 61 72 73 65 2a 2c 45 78 70 72 2a 2c 20 45  (Parse*,Expr*, E
2b450 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20  xpr*, int);.int 
2b460 73 71 6c 69 74 65 33 45 78 70 72 49 6d 70 6c 69  sqlite3ExprImpli
2b470 65 73 4e 6f 6e 4e 75 6c 6c 52 6f 77 28 45 78 70  esNonNullRow(Exp
2b480 72 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  r*,int);.void sq
2b490 6c 69 74 65 33 45 78 70 72 41 6e 61 6c 79 7a 65  lite3ExprAnalyze
2b4a0 41 67 67 72 65 67 61 74 65 73 28 4e 61 6d 65 43  Aggregates(NameC
2b4b0 6f 6e 74 65 78 74 2a 2c 20 45 78 70 72 2a 29 3b  ontext*, Expr*);
2b4c0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
2b4d0 72 41 6e 61 6c 79 7a 65 41 67 67 4c 69 73 74 28  rAnalyzeAggList(
2b4e0 4e 61 6d 65 43 6f 6e 74 65 78 74 2a 2c 45 78 70  NameContext*,Exp
2b4f0 72 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c  rList*);.int sql
2b500 69 74 65 33 45 78 70 72 43 6f 76 65 72 65 64 42  ite3ExprCoveredB
2b510 79 49 6e 64 65 78 28 45 78 70 72 2a 2c 20 69 6e  yIndex(Expr*, in
2b520 74 20 69 43 75 72 2c 20 49 6e 64 65 78 20 2a 70  t iCur, Index *p
2b530 49 64 78 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  Idx);.int sqlite
2b540 33 46 75 6e 63 74 69 6f 6e 55 73 65 73 54 68 69  3FunctionUsesThi
2b550 73 53 72 63 28 45 78 70 72 2a 2c 20 53 72 63 4c  sSrc(Expr*, SrcL
2b560 69 73 74 2a 29 3b 0a 56 64 62 65 20 2a 73 71 6c  ist*);.Vdbe *sql
2b570 69 74 65 33 47 65 74 56 64 62 65 28 50 61 72 73  ite3GetVdbe(Pars
2b580 65 2a 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c  e*);.#ifndef SQL
2b590 49 54 45 5f 55 4e 54 45 53 54 41 42 4c 45 0a 76  ITE_UNTESTABLE.v
2b5a0 6f 69 64 20 73 71 6c 69 74 65 33 50 72 6e 67 53  oid sqlite3PrngS
2b5b0 61 76 65 53 74 61 74 65 28 76 6f 69 64 29 3b 0a  aveState(void);.
2b5c0 76 6f 69 64 20 73 71 6c 69 74 65 33 50 72 6e 67  void sqlite3Prng
2b5d0 52 65 73 74 6f 72 65 53 74 61 74 65 28 76 6f 69  RestoreState(voi
2b5e0 64 29 3b 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20  d);.#endif.void 
2b5f0 73 71 6c 69 74 65 33 52 6f 6c 6c 62 61 63 6b 41  sqlite3RollbackA
2b600 6c 6c 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 29  ll(sqlite3*,int)
2b610 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f  ;.void sqlite3Co
2b620 64 65 56 65 72 69 66 79 53 63 68 65 6d 61 28 50  deVerifySchema(P
2b630 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69  arse*, int);.voi
2b640 64 20 73 71 6c 69 74 65 33 43 6f 64 65 56 65 72  d sqlite3CodeVer
2b650 69 66 79 4e 61 6d 65 64 53 63 68 65 6d 61 28 50  ifyNamedSchema(P
2b660 61 72 73 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61  arse*, const cha
2b670 72 20 2a 7a 44 62 29 3b 0a 76 6f 69 64 20 73 71  r *zDb);.void sq
2b680 6c 69 74 65 33 42 65 67 69 6e 54 72 61 6e 73 61  lite3BeginTransa
2b690 63 74 69 6f 6e 28 50 61 72 73 65 2a 2c 20 69 6e  ction(Parse*, in
2b6a0 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
2b6b0 45 6e 64 54 72 61 6e 73 61 63 74 69 6f 6e 28 50  EndTransaction(P
2b6c0 61 72 73 65 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64  arse*,int);.void
2b6d0 20 73 71 6c 69 74 65 33 53 61 76 65 70 6f 69 6e   sqlite3Savepoin
2b6e0 74 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 54  t(Parse*, int, T
2b6f0 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  oken*);.void sql
2b700 69 74 65 33 43 6c 6f 73 65 53 61 76 65 70 6f 69  ite3CloseSavepoi
2b710 6e 74 73 28 73 71 6c 69 74 65 33 20 2a 29 3b 0a  nts(sqlite3 *);.
2b720 76 6f 69 64 20 73 71 6c 69 74 65 33 4c 65 61 76  void sqlite3Leav
2b730 65 4d 75 74 65 78 41 6e 64 43 6c 6f 73 65 5a 6f  eMutexAndCloseZo
2b740 6d 62 69 65 28 73 71 6c 69 74 65 33 2a 29 3b 0a  mbie(sqlite3*);.
2b750 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 49  int sqlite3ExprI
2b760 64 54 6f 54 72 75 65 46 61 6c 73 65 28 45 78 70  dToTrueFalse(Exp
2b770 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  r*);.int sqlite3
2b780 45 78 70 72 54 72 75 74 68 56 61 6c 75 65 28 63  ExprTruthValue(c
2b790 6f 6e 73 74 20 45 78 70 72 2a 29 3b 0a 69 6e 74  onst Expr*);.int
2b7a0 20 73 71 6c 69 74 65 33 45 78 70 72 49 73 43 6f   sqlite3ExprIsCo
2b7b0 6e 73 74 61 6e 74 28 45 78 70 72 2a 29 3b 0a 69  nstant(Expr*);.i
2b7c0 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 49 73  nt sqlite3ExprIs
2b7d0 43 6f 6e 73 74 61 6e 74 4e 6f 74 4a 6f 69 6e 28  ConstantNotJoin(
2b7e0 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  Expr*);.int sqli
2b7f0 74 65 33 45 78 70 72 49 73 43 6f 6e 73 74 61 6e  te3ExprIsConstan
2b800 74 4f 72 46 75 6e 63 74 69 6f 6e 28 45 78 70 72  tOrFunction(Expr
2b810 2a 2c 20 75 38 29 3b 0a 69 6e 74 20 73 71 6c 69  *, u8);.int sqli
2b820 74 65 33 45 78 70 72 49 73 43 6f 6e 73 74 61 6e  te3ExprIsConstan
2b830 74 4f 72 47 72 6f 75 70 42 79 28 50 61 72 73 65  tOrGroupBy(Parse
2b840 2a 2c 20 45 78 70 72 2a 2c 20 45 78 70 72 4c 69  *, Expr*, ExprLi
2b850 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  st*);.int sqlite
2b860 33 45 78 70 72 49 73 54 61 62 6c 65 43 6f 6e 73  3ExprIsTableCons
2b870 74 61 6e 74 28 45 78 70 72 2a 2c 69 6e 74 29 3b  tant(Expr*,int);
2b880 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45  .#ifdef SQLITE_E
2b890 4e 41 42 4c 45 5f 43 55 52 53 4f 52 5f 48 49 4e  NABLE_CURSOR_HIN
2b8a0 54 53 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78  TS.int sqlite3Ex
2b8b0 70 72 43 6f 6e 74 61 69 6e 73 53 75 62 71 75 65  prContainsSubque
2b8c0 72 79 28 45 78 70 72 2a 29 3b 0a 23 65 6e 64 69  ry(Expr*);.#endi
2b8d0 66 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70  f.int sqlite3Exp
2b8e0 72 49 73 49 6e 74 65 67 65 72 28 45 78 70 72 2a  rIsInteger(Expr*
2b8f0 2c 20 69 6e 74 2a 29 3b 0a 69 6e 74 20 73 71 6c  , int*);.int sql
2b900 69 74 65 33 45 78 70 72 43 61 6e 42 65 4e 75 6c  ite3ExprCanBeNul
2b910 6c 28 63 6f 6e 73 74 20 45 78 70 72 2a 29 3b 0a  l(const Expr*);.
2b920 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 4e  int sqlite3ExprN
2b930 65 65 64 73 4e 6f 41 66 66 69 6e 69 74 79 43 68  eedsNoAffinityCh
2b940 61 6e 67 65 28 63 6f 6e 73 74 20 45 78 70 72 2a  ange(const Expr*
2b950 2c 20 63 68 61 72 29 3b 0a 69 6e 74 20 73 71 6c  , char);.int sql
2b960 69 74 65 33 49 73 52 6f 77 69 64 28 63 6f 6e 73  ite3IsRowid(cons
2b970 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73  t char*);.void s
2b980 71 6c 69 74 65 33 47 65 6e 65 72 61 74 65 52 6f  qlite3GenerateRo
2b990 77 44 65 6c 65 74 65 28 0a 20 20 20 20 50 61 72  wDelete(.    Par
2b9a0 73 65 2a 2c 54 61 62 6c 65 2a 2c 54 72 69 67 67  se*,Table*,Trigg
2b9b0 65 72 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c  er*,int,int,int,
2b9c0 69 31 36 2c 75 38 2c 75 38 2c 75 38 2c 69 6e 74  i16,u8,u8,u8,int
2b9d0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 47  );.void sqlite3G
2b9e0 65 6e 65 72 61 74 65 52 6f 77 49 6e 64 65 78 44  enerateRowIndexD
2b9f0 65 6c 65 74 65 28 50 61 72 73 65 2a 2c 20 54 61  elete(Parse*, Ta
2ba00 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20  ble*, int, int, 
2ba10 69 6e 74 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20  int*, int);.int 
2ba20 73 71 6c 69 74 65 33 47 65 6e 65 72 61 74 65 49  sqlite3GenerateI
2ba30 6e 64 65 78 4b 65 79 28 50 61 72 73 65 2a 2c 20  ndexKey(Parse*, 
2ba40 49 6e 64 65 78 2a 2c 20 69 6e 74 2c 20 69 6e 74  Index*, int, int
2ba50 2c 20 69 6e 74 2c 20 69 6e 74 2a 2c 49 6e 64 65  , int, int*,Inde
2ba60 78 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  x*,int);.void sq
2ba70 6c 69 74 65 33 52 65 73 6f 6c 76 65 50 61 72 74  lite3ResolvePart
2ba80 49 64 78 4c 61 62 65 6c 28 50 61 72 73 65 2a 2c  IdxLabel(Parse*,
2ba90 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  int);.int sqlite
2baa0 33 45 78 70 72 52 65 66 65 72 65 6e 63 65 73 55  3ExprReferencesU
2bab0 70 64 61 74 65 64 43 6f 6c 75 6d 6e 28 45 78 70  pdatedColumn(Exp
2bac0 72 2a 2c 69 6e 74 2a 2c 69 6e 74 29 3b 0a 76 6f  r*,int*,int);.vo
2bad0 69 64 20 73 71 6c 69 74 65 33 47 65 6e 65 72 61  id sqlite3Genera
2bae0 74 65 43 6f 6e 73 74 72 61 69 6e 74 43 68 65 63  teConstraintChec
2baf0 6b 73 28 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a  ks(Parse*,Table*
2bb00 2c 69 6e 74 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e  ,int*,int,int,in
2bb10 74 2c 69 6e 74 2c 0a 20 20 20 20 20 20 20 20 20  t,int,.         
2bb20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bb30 20 20 20 20 20 20 20 20 20 20 20 20 75 38 2c 75              u8,u
2bb40 38 2c 69 6e 74 2c 69 6e 74 2a 2c 69 6e 74 2a 2c  8,int,int*,int*,
2bb50 55 70 73 65 72 74 2a 29 3b 0a 23 69 66 64 65 66  Upsert*);.#ifdef
2bb60 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4e   SQLITE_ENABLE_N
2bb70 55 4c 4c 5f 54 52 49 4d 0a 20 20 76 6f 69 64 20  ULL_TRIM.  void 
2bb80 73 71 6c 69 74 65 33 53 65 74 4d 61 6b 65 52 65  sqlite3SetMakeRe
2bb90 63 6f 72 64 50 35 28 56 64 62 65 2a 2c 54 61 62  cordP5(Vdbe*,Tab
2bba0 6c 65 2a 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65  le*);.#else.# de
2bbb0 66 69 6e 65 20 73 71 6c 69 74 65 33 53 65 74 4d  fine sqlite3SetM
2bbc0 61 6b 65 52 65 63 6f 72 64 50 35 28 41 2c 42 29  akeRecordP5(A,B)
2bbd0 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c  .#endif.void sql
2bbe0 69 74 65 33 43 6f 6d 70 6c 65 74 65 49 6e 73 65  ite3CompleteInse
2bbf0 72 74 69 6f 6e 28 50 61 72 73 65 2a 2c 54 61 62  rtion(Parse*,Tab
2bc00 6c 65 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c  le*,int,int,int,
2bc10 69 6e 74 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74  int*,int,int,int
2bc20 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4f 70  );.int sqlite3Op
2bc30 65 6e 54 61 62 6c 65 41 6e 64 49 6e 64 69 63 65  enTableAndIndice
2bc40 73 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a  s(Parse*, Table*
2bc50 2c 20 69 6e 74 2c 20 75 38 2c 20 69 6e 74 2c 20  , int, u8, int, 
2bc60 75 38 2a 2c 20 69 6e 74 2a 2c 20 69 6e 74 2a 29  u8*, int*, int*)
2bc70 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42 65  ;.void sqlite3Be
2bc80 67 69 6e 57 72 69 74 65 4f 70 65 72 61 74 69 6f  ginWriteOperatio
2bc90 6e 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69  n(Parse*, int, i
2bca0 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
2bcb0 33 4d 75 6c 74 69 57 72 69 74 65 28 50 61 72 73  3MultiWrite(Pars
2bcc0 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  e*);.void sqlite
2bcd0 33 4d 61 79 41 62 6f 72 74 28 50 61 72 73 65 2a  3MayAbort(Parse*
2bce0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 48  );.void sqlite3H
2bcf0 61 6c 74 43 6f 6e 73 74 72 61 69 6e 74 28 50 61  altConstraint(Pa
2bd00 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20  rse*, int, int, 
2bd10 63 68 61 72 2a 2c 20 69 38 2c 20 75 38 29 3b 0a  char*, i8, u8);.
2bd20 76 6f 69 64 20 73 71 6c 69 74 65 33 55 6e 69 71  void sqlite3Uniq
2bd30 75 65 43 6f 6e 73 74 72 61 69 6e 74 28 50 61 72  ueConstraint(Par
2bd40 73 65 2a 2c 20 69 6e 74 2c 20 49 6e 64 65 78 2a  se*, int, Index*
2bd50 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52  );.void sqlite3R
2bd60 6f 77 69 64 43 6f 6e 73 74 72 61 69 6e 74 28 50  owidConstraint(P
2bd70 61 72 73 65 2a 2c 20 69 6e 74 2c 20 54 61 62 6c  arse*, int, Tabl
2bd80 65 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74  e*);.Expr *sqlit
2bd90 65 33 45 78 70 72 44 75 70 28 73 71 6c 69 74 65  e3ExprDup(sqlite
2bda0 33 2a 2c 45 78 70 72 2a 2c 69 6e 74 29 3b 0a 45  3*,Expr*,int);.E
2bdb0 78 70 72 4c 69 73 74 20 2a 73 71 6c 69 74 65 33  xprList *sqlite3
2bdc0 45 78 70 72 4c 69 73 74 44 75 70 28 73 71 6c 69  ExprListDup(sqli
2bdd0 74 65 33 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 69  te3*,ExprList*,i
2bde0 6e 74 29 3b 0a 53 72 63 4c 69 73 74 20 2a 73 71  nt);.SrcList *sq
2bdf0 6c 69 74 65 33 53 72 63 4c 69 73 74 44 75 70 28  lite3SrcListDup(
2be00 73 71 6c 69 74 65 33 2a 2c 53 72 63 4c 69 73 74  sqlite3*,SrcList
2be10 2a 2c 69 6e 74 29 3b 0a 49 64 4c 69 73 74 20 2a  *,int);.IdList *
2be20 73 71 6c 69 74 65 33 49 64 4c 69 73 74 44 75 70  sqlite3IdListDup
2be30 28 73 71 6c 69 74 65 33 2a 2c 49 64 4c 69 73 74  (sqlite3*,IdList
2be40 2a 29 3b 0a 53 65 6c 65 63 74 20 2a 73 71 6c 69  *);.Select *sqli
2be50 74 65 33 53 65 6c 65 63 74 44 75 70 28 73 71 6c  te3SelectDup(sql
2be60 69 74 65 33 2a 2c 53 65 6c 65 63 74 2a 2c 69 6e  ite3*,Select*,in
2be70 74 29 3b 0a 46 75 6e 63 44 65 66 20 2a 73 71 6c  t);.FuncDef *sql
2be80 69 74 65 33 46 75 6e 63 74 69 6f 6e 53 65 61 72  ite3FunctionSear
2be90 63 68 28 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61  ch(int,const cha
2bea0 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  r*);.void sqlite
2beb0 33 49 6e 73 65 72 74 42 75 69 6c 74 69 6e 46 75  3InsertBuiltinFu
2bec0 6e 63 73 28 46 75 6e 63 44 65 66 2a 2c 69 6e 74  ncs(FuncDef*,int
2bed0 29 3b 0a 46 75 6e 63 44 65 66 20 2a 73 71 6c 69  );.FuncDef *sqli
2bee0 74 65 33 46 69 6e 64 46 75 6e 63 74 69 6f 6e 28  te3FindFunction(
2bef0 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63  sqlite3*,const c
2bf00 68 61 72 2a 2c 69 6e 74 2c 75 38 2c 75 38 29 3b  har*,int,u8,u8);
2bf10 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 67  .void sqlite3Reg
2bf20 69 73 74 65 72 42 75 69 6c 74 69 6e 46 75 6e 63  isterBuiltinFunc
2bf30 74 69 6f 6e 73 28 76 6f 69 64 29 3b 0a 76 6f 69  tions(void);.voi
2bf40 64 20 73 71 6c 69 74 65 33 52 65 67 69 73 74 65  d sqlite3Registe
2bf50 72 44 61 74 65 54 69 6d 65 46 75 6e 63 74 69 6f  rDateTimeFunctio
2bf60 6e 73 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20 73  ns(void);.void s
2bf70 71 6c 69 74 65 33 52 65 67 69 73 74 65 72 50 65  qlite3RegisterPe
2bf80 72 43 6f 6e 6e 65 63 74 69 6f 6e 42 75 69 6c 74  rConnectionBuilt
2bf90 69 6e 46 75 6e 63 74 69 6f 6e 73 28 73 71 6c 69  inFunctions(sqli
2bfa0 74 65 33 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  te3*);.int sqlit
2bfb0 65 33 53 61 66 65 74 79 43 68 65 63 6b 4f 6b 28  e3SafetyCheckOk(
2bfc0 73 71 6c 69 74 65 33 2a 29 3b 0a 69 6e 74 20 73  sqlite3*);.int s
2bfd0 71 6c 69 74 65 33 53 61 66 65 74 79 43 68 65 63  qlite3SafetyChec
2bfe0 6b 53 69 63 6b 4f 72 4f 6b 28 73 71 6c 69 74 65  kSickOrOk(sqlite
2bff0 33 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  3*);.void sqlite
2c000 33 43 68 61 6e 67 65 43 6f 6f 6b 69 65 28 50 61  3ChangeCookie(Pa
2c010 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 0a 23 69 66  rse*, int);..#if
2c020 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
2c030 5f 4f 4d 49 54 5f 56 49 45 57 29 20 26 26 20 21  _OMIT_VIEW) && !
2c040 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
2c050 4d 49 54 5f 54 52 49 47 47 45 52 29 0a 76 6f 69  MIT_TRIGGER).voi
2c060 64 20 73 71 6c 69 74 65 33 4d 61 74 65 72 69 61  d sqlite3Materia
2c070 6c 69 7a 65 56 69 65 77 28 50 61 72 73 65 2a 2c  lizeView(Parse*,
2c080 20 54 61 62 6c 65 2a 2c 20 45 78 70 72 2a 2c 20   Table*, Expr*, 
2c090 45 78 70 72 4c 69 73 74 2a 2c 45 78 70 72 2a 2c  ExprList*,Expr*,
2c0a0 69 6e 74 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69  int);.#endif..#i
2c0b0 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
2c0c0 54 5f 54 52 49 47 47 45 52 0a 20 20 76 6f 69 64  T_TRIGGER.  void
2c0d0 20 73 71 6c 69 74 65 33 42 65 67 69 6e 54 72 69   sqlite3BeginTri
2c0e0 67 67 65 72 28 50 61 72 73 65 2a 2c 20 54 6f 6b  gger(Parse*, Tok
2c0f0 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 69 6e 74 2c 69  en*,Token*,int,i
2c100 6e 74 2c 49 64 4c 69 73 74 2a 2c 53 72 63 4c 69  nt,IdList*,SrcLi
2c110 73 74 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20  st*,.           
2c120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c130 45 78 70 72 2a 2c 69 6e 74 2c 20 69 6e 74 29 3b  Expr*,int, int);
2c140 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 46  .  void sqlite3F
2c150 69 6e 69 73 68 54 72 69 67 67 65 72 28 50 61 72  inishTrigger(Par
2c160 73 65 2a 2c 20 54 72 69 67 67 65 72 53 74 65 70  se*, TriggerStep
2c170 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 20 20 76 6f  *, Token*);.  vo
2c180 69 64 20 73 71 6c 69 74 65 33 44 72 6f 70 54 72  id sqlite3DropTr
2c190 69 67 67 65 72 28 50 61 72 73 65 2a 2c 20 53 72  igger(Parse*, Sr
2c1a0 63 4c 69 73 74 2a 2c 20 69 6e 74 29 3b 0a 20 20  cList*, int);.  
2c1b0 76 6f 69 64 20 73 71 6c 69 74 65 33 44 72 6f 70  void sqlite3Drop
2c1c0 54 72 69 67 67 65 72 50 74 72 28 50 61 72 73 65  TriggerPtr(Parse
2c1d0 2a 2c 20 54 72 69 67 67 65 72 2a 29 3b 0a 20 20  *, Trigger*);.  
2c1e0 54 72 69 67 67 65 72 20 2a 73 71 6c 69 74 65 33  Trigger *sqlite3
2c1f0 54 72 69 67 67 65 72 73 45 78 69 73 74 28 50 61  TriggersExist(Pa
2c200 72 73 65 20 2a 2c 20 54 61 62 6c 65 2a 2c 20 69  rse *, Table*, i
2c210 6e 74 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 69  nt, ExprList*, i
2c220 6e 74 20 2a 70 4d 61 73 6b 29 3b 0a 20 20 54 72  nt *pMask);.  Tr
2c230 69 67 67 65 72 20 2a 73 71 6c 69 74 65 33 54 72  igger *sqlite3Tr
2c240 69 67 67 65 72 4c 69 73 74 28 50 61 72 73 65 20  iggerList(Parse 
2c250 2a 2c 20 54 61 62 6c 65 20 2a 29 3b 0a 20 20 76  *, Table *);.  v
2c260 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 64 65 52  oid sqlite3CodeR
2c270 6f 77 54 72 69 67 67 65 72 28 50 61 72 73 65 2a  owTrigger(Parse*
2c280 2c 20 54 72 69 67 67 65 72 20 2a 2c 20 69 6e 74  , Trigger *, int
2c290 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74  , ExprList*, int
2c2a0 2c 20 54 61 62 6c 65 20 2a 2c 0a 20 20 20 20 20  , Table *,.     
2c2b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c2c0 20 20 20 20 20 20 20 69 6e 74 2c 20 69 6e 74 2c         int, int,
2c2d0 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20 73 71   int);.  void sq
2c2e0 6c 69 74 65 33 43 6f 64 65 52 6f 77 54 72 69 67  lite3CodeRowTrig
2c2f0 67 65 72 44 69 72 65 63 74 28 50 61 72 73 65 20  gerDirect(Parse 
2c300 2a 2c 20 54 72 69 67 67 65 72 20 2a 2c 20 54 61  *, Trigger *, Ta
2c310 62 6c 65 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c  ble *, int, int,
2c320 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20 73 71   int);.  void sq
2c330 6c 69 74 65 56 69 65 77 54 72 69 67 67 65 72 73  liteViewTriggers
2c340 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c  (Parse*, Table*,
2c350 20 45 78 70 72 2a 2c 20 69 6e 74 2c 20 45 78 70   Expr*, int, Exp
2c360 72 4c 69 73 74 2a 29 3b 0a 20 20 76 6f 69 64 20  rList*);.  void 
2c370 73 71 6c 69 74 65 33 44 65 6c 65 74 65 54 72 69  sqlite3DeleteTri
2c380 67 67 65 72 53 74 65 70 28 73 71 6c 69 74 65 33  ggerStep(sqlite3
2c390 2a 2c 20 54 72 69 67 67 65 72 53 74 65 70 2a 29  *, TriggerStep*)
2c3a0 3b 0a 20 20 54 72 69 67 67 65 72 53 74 65 70 20  ;.  TriggerStep 
2c3b0 2a 73 71 6c 69 74 65 33 54 72 69 67 67 65 72 53  *sqlite3TriggerS
2c3c0 65 6c 65 63 74 53 74 65 70 28 73 71 6c 69 74 65  electStep(sqlite
2c3d0 33 2a 2c 53 65 6c 65 63 74 2a 2c 0a 20 20 20 20  3*,Select*,.    
2c3e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c3f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c400 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c      const char*,
2c410 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20 20  const char*);.  
2c420 54 72 69 67 67 65 72 53 74 65 70 20 2a 73 71 6c  TriggerStep *sql
2c430 69 74 65 33 54 72 69 67 67 65 72 49 6e 73 65 72  ite3TriggerInser
2c440 74 53 74 65 70 28 50 61 72 73 65 2a 2c 54 6f 6b  tStep(Parse*,Tok
2c450 65 6e 2a 2c 20 49 64 4c 69 73 74 2a 2c 0a 20 20  en*, IdList*,.  
2c460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c480 20 20 20 20 20 20 53 65 6c 65 63 74 2a 2c 75 38        Select*,u8
2c490 2c 55 70 73 65 72 74 2a 2c 0a 20 20 20 20 20 20  ,Upsert*,.      
2c4a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c4b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c4c0 20 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f    const char*,co
2c4d0 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20 20 54 72  nst char*);.  Tr
2c4e0 69 67 67 65 72 53 74 65 70 20 2a 73 71 6c 69 74  iggerStep *sqlit
2c4f0 65 33 54 72 69 67 67 65 72 55 70 64 61 74 65 53  e3TriggerUpdateS
2c500 74 65 70 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e  tep(Parse*,Token
2c510 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 20 45 78 70  *,ExprList*, Exp
2c520 72 2a 2c 20 75 38 2c 0a 20 20 20 20 20 20 20 20  r*, u8,.        
2c530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c550 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73  const char*,cons
2c560 74 20 63 68 61 72 2a 29 3b 0a 20 20 54 72 69 67  t char*);.  Trig
2c570 67 65 72 53 74 65 70 20 2a 73 71 6c 69 74 65 33  gerStep *sqlite3
2c580 54 72 69 67 67 65 72 44 65 6c 65 74 65 53 74 65  TriggerDeleteSte
2c590 70 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c  p(Parse*,Token*,
2c5a0 20 45 78 70 72 2a 2c 0a 20 20 20 20 20 20 20 20   Expr*,.        
2c5b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c5c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c5d0 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73  const char*,cons
2c5e0 74 20 63 68 61 72 2a 29 3b 0a 20 20 76 6f 69 64  t char*);.  void
2c5f0 20 73 71 6c 69 74 65 33 44 65 6c 65 74 65 54 72   sqlite3DeleteTr
2c600 69 67 67 65 72 28 73 71 6c 69 74 65 33 2a 2c 20  igger(sqlite3*, 
2c610 54 72 69 67 67 65 72 2a 29 3b 0a 20 20 76 6f 69  Trigger*);.  voi
2c620 64 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41  d sqlite3UnlinkA
2c630 6e 64 44 65 6c 65 74 65 54 72 69 67 67 65 72 28  ndDeleteTrigger(
2c640 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e  sqlite3*,int,con
2c650 73 74 20 63 68 61 72 2a 29 3b 0a 20 20 75 33 32  st char*);.  u32
2c660 20 73 71 6c 69 74 65 33 54 72 69 67 67 65 72 43   sqlite3TriggerC
2c670 6f 6c 6d 61 73 6b 28 50 61 72 73 65 2a 2c 54 72  olmask(Parse*,Tr
2c680 69 67 67 65 72 2a 2c 45 78 70 72 4c 69 73 74 2a  igger*,ExprList*
2c690 2c 69 6e 74 2c 69 6e 74 2c 54 61 62 6c 65 2a 2c  ,int,int,Table*,
2c6a0 69 6e 74 29 3b 0a 23 20 64 65 66 69 6e 65 20 73  int);.# define s
2c6b0 71 6c 69 74 65 33 50 61 72 73 65 54 6f 70 6c 65  qlite3ParseTople
2c6c0 76 65 6c 28 70 29 20 28 28 70 29 2d 3e 70 54 6f  vel(p) ((p)->pTo
2c6d0 70 6c 65 76 65 6c 20 3f 20 28 70 29 2d 3e 70 54  plevel ? (p)->pT
2c6e0 6f 70 6c 65 76 65 6c 20 3a 20 28 70 29 29 0a 23  oplevel : (p)).#
2c6f0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49   define sqlite3I
2c700 73 54 6f 70 6c 65 76 65 6c 28 70 29 20 28 28 70  sToplevel(p) ((p
2c710 29 2d 3e 70 54 6f 70 6c 65 76 65 6c 3d 3d 30 29  )->pToplevel==0)
2c720 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
2c730 73 71 6c 69 74 65 33 54 72 69 67 67 65 72 73 45  sqlite3TriggersE
2c740 78 69 73 74 28 42 2c 43 2c 44 2c 45 2c 46 29 20  xist(B,C,D,E,F) 
2c750 30 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  0.# define sqlit
2c760 65 33 44 65 6c 65 74 65 54 72 69 67 67 65 72 28  e3DeleteTrigger(
2c770 41 2c 42 29 0a 23 20 64 65 66 69 6e 65 20 73 71  A,B).# define sq
2c780 6c 69 74 65 33 44 72 6f 70 54 72 69 67 67 65 72  lite3DropTrigger
2c790 50 74 72 28 41 2c 42 29 0a 23 20 64 65 66 69 6e  Ptr(A,B).# defin
2c7a0 65 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41  e sqlite3UnlinkA
2c7b0 6e 64 44 65 6c 65 74 65 54 72 69 67 67 65 72 28  ndDeleteTrigger(
2c7c0 41 2c 42 2c 43 29 0a 23 20 64 65 66 69 6e 65 20  A,B,C).# define 
2c7d0 73 71 6c 69 74 65 33 43 6f 64 65 52 6f 77 54 72  sqlite3CodeRowTr
2c7e0 69 67 67 65 72 28 41 2c 42 2c 43 2c 44 2c 45 2c  igger(A,B,C,D,E,
2c7f0 46 2c 47 2c 48 2c 49 29 0a 23 20 64 65 66 69 6e  F,G,H,I).# defin
2c800 65 20 73 71 6c 69 74 65 33 43 6f 64 65 52 6f 77  e sqlite3CodeRow
2c810 54 72 69 67 67 65 72 44 69 72 65 63 74 28 41 2c  TriggerDirect(A,
2c820 42 2c 43 2c 44 2c 45 2c 46 29 0a 23 20 64 65 66  B,C,D,E,F).# def
2c830 69 6e 65 20 73 71 6c 69 74 65 33 54 72 69 67 67  ine sqlite3Trigg
2c840 65 72 4c 69 73 74 28 58 2c 20 59 29 20 30 0a 23  erList(X, Y) 0.#
2c850 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 50   define sqlite3P
2c860 61 72 73 65 54 6f 70 6c 65 76 65 6c 28 70 29 20  arseToplevel(p) 
2c870 70 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  p.# define sqlit
2c880 65 33 49 73 54 6f 70 6c 65 76 65 6c 28 70 29 20  e3IsToplevel(p) 
2c890 31 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  1.# define sqlit
2c8a0 65 33 54 72 69 67 67 65 72 43 6f 6c 6d 61 73 6b  e3TriggerColmask
2c8b0 28 41 2c 42 2c 43 2c 44 2c 45 2c 46 2c 47 29 20  (A,B,C,D,E,F,G) 
2c8c0 30 0a 23 65 6e 64 69 66 0a 0a 69 6e 74 20 73 71  0.#endif..int sq
2c8d0 6c 69 74 65 33 4a 6f 69 6e 54 79 70 65 28 50 61  lite3JoinType(Pa
2c8e0 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f  rse*, Token*, To
2c8f0 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76  ken*, Token*);.v
2c900 6f 69 64 20 73 71 6c 69 74 65 33 43 72 65 61 74  oid sqlite3Creat
2c910 65 46 6f 72 65 69 67 6e 4b 65 79 28 50 61 72 73  eForeignKey(Pars
2c920 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 54  e*, ExprList*, T
2c930 6f 6b 65 6e 2a 2c 20 45 78 70 72 4c 69 73 74 2a  oken*, ExprList*
2c940 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
2c950 69 74 65 33 44 65 66 65 72 46 6f 72 65 69 67 6e  ite3DeferForeign
2c960 4b 65 79 28 50 61 72 73 65 2a 2c 20 69 6e 74 29  Key(Parse*, int)
2c970 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ;.#ifndef SQLITE
2c980 5f 4f 4d 49 54 5f 41 55 54 48 4f 52 49 5a 41 54  _OMIT_AUTHORIZAT
2c990 49 4f 4e 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  ION.  void sqlit
2c9a0 65 33 41 75 74 68 52 65 61 64 28 50 61 72 73 65  e3AuthRead(Parse
2c9b0 2a 2c 45 78 70 72 2a 2c 53 63 68 65 6d 61 2a 2c  *,Expr*,Schema*,
2c9c0 53 72 63 4c 69 73 74 2a 29 3b 0a 20 20 69 6e 74  SrcList*);.  int
2c9d0 20 73 71 6c 69 74 65 33 41 75 74 68 43 68 65 63   sqlite3AuthChec
2c9e0 6b 28 50 61 72 73 65 2a 2c 69 6e 74 2c 20 63 6f  k(Parse*,int, co
2c9f0 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74  nst char*, const
2ca00 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68   char*, const ch
2ca10 61 72 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c  ar*);.  void sql
2ca20 69 74 65 33 41 75 74 68 43 6f 6e 74 65 78 74 50  ite3AuthContextP
2ca30 75 73 68 28 50 61 72 73 65 2a 2c 20 41 75 74 68  ush(Parse*, Auth
2ca40 43 6f 6e 74 65 78 74 2a 2c 20 63 6f 6e 73 74 20  Context*, const 
2ca50 63 68 61 72 2a 29 3b 0a 20 20 76 6f 69 64 20 73  char*);.  void s
2ca60 71 6c 69 74 65 33 41 75 74 68 43 6f 6e 74 65 78  qlite3AuthContex
2ca70 74 50 6f 70 28 41 75 74 68 43 6f 6e 74 65 78 74  tPop(AuthContext
2ca80 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65  *);.  int sqlite
2ca90 33 41 75 74 68 52 65 61 64 43 6f 6c 28 50 61 72  3AuthReadCol(Par
2caa0 73 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20  se*, const char 
2cab0 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c  *, const char *,
2cac0 20 69 6e 74 29 3b 0a 23 65 6c 73 65 0a 23 20 64   int);.#else.# d
2cad0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 41 75 74  efine sqlite3Aut
2cae0 68 52 65 61 64 28 61 2c 62 2c 63 2c 64 29 0a 23  hRead(a,b,c,d).#
2caf0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 41   define sqlite3A
2cb00 75 74 68 43 68 65 63 6b 28 61 2c 62 2c 63 2c 64  uthCheck(a,b,c,d
2cb10 2c 65 29 20 20 20 20 53 51 4c 49 54 45 5f 4f 4b  ,e)    SQLITE_OK
2cb20 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
2cb30 33 41 75 74 68 43 6f 6e 74 65 78 74 50 75 73 68  3AuthContextPush
2cb40 28 61 2c 62 2c 63 29 0a 23 20 64 65 66 69 6e 65  (a,b,c).# define
2cb50 20 73 71 6c 69 74 65 33 41 75 74 68 43 6f 6e 74   sqlite3AuthCont
2cb60 65 78 74 50 6f 70 28 61 29 20 20 28 28 76 6f 69  extPop(a)  ((voi
2cb70 64 29 28 61 29 29 0a 23 65 6e 64 69 66 0a 76 6f  d)(a)).#endif.vo
2cb80 69 64 20 73 71 6c 69 74 65 33 41 74 74 61 63 68  id sqlite3Attach
2cb90 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20  (Parse*, Expr*, 
2cba0 45 78 70 72 2a 2c 20 45 78 70 72 2a 29 3b 0a 76  Expr*, Expr*);.v
2cbb0 6f 69 64 20 73 71 6c 69 74 65 33 44 65 74 61 63  oid sqlite3Detac
2cbc0 68 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 29  h(Parse*, Expr*)
2cbd0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 46 69  ;.void sqlite3Fi
2cbe0 78 49 6e 69 74 28 44 62 46 69 78 65 72 2a 2c 20  xInit(DbFixer*, 
2cbf0 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 63 6f 6e  Parse*, int, con
2cc00 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20  st char*, const 
2cc10 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c  Token*);.int sql
2cc20 69 74 65 33 46 69 78 53 72 63 4c 69 73 74 28 44  ite3FixSrcList(D
2cc30 62 46 69 78 65 72 2a 2c 20 53 72 63 4c 69 73 74  bFixer*, SrcList
2cc40 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46  *);.int sqlite3F
2cc50 69 78 53 65 6c 65 63 74 28 44 62 46 69 78 65 72  ixSelect(DbFixer
2cc60 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 69 6e 74  *, Select*);.int
2cc70 20 73 71 6c 69 74 65 33 46 69 78 45 78 70 72 28   sqlite3FixExpr(
2cc80 44 62 46 69 78 65 72 2a 2c 20 45 78 70 72 2a 29  DbFixer*, Expr*)
2cc90 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69 78  ;.int sqlite3Fix
2cca0 45 78 70 72 4c 69 73 74 28 44 62 46 69 78 65 72  ExprList(DbFixer
2ccb0 2a 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a 69  *, ExprList*);.i
2ccc0 6e 74 20 73 71 6c 69 74 65 33 46 69 78 54 72 69  nt sqlite3FixTri
2ccd0 67 67 65 72 53 74 65 70 28 44 62 46 69 78 65 72  ggerStep(DbFixer
2cce0 2a 2c 20 54 72 69 67 67 65 72 53 74 65 70 2a 29  *, TriggerStep*)
2ccf0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 41 74 6f  ;.int sqlite3Ato
2cd00 46 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 2c  F(const char *z,
2cd10 20 64 6f 75 62 6c 65 2a 2c 20 69 6e 74 2c 20 75   double*, int, u
2cd20 38 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 47  8);.int sqlite3G
2cd30 65 74 49 6e 74 33 32 28 63 6f 6e 73 74 20 63 68  etInt32(const ch
2cd40 61 72 20 2a 2c 20 69 6e 74 2a 29 3b 0a 69 6e 74  ar *, int*);.int
2cd50 20 73 71 6c 69 74 65 33 41 74 6f 69 28 63 6f 6e   sqlite3Atoi(con
2cd60 73 74 20 63 68 61 72 2a 29 3b 0a 23 69 66 6e 64  st char*);.#ifnd
2cd70 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55  ef SQLITE_OMIT_U
2cd80 54 46 31 36 0a 69 6e 74 20 73 71 6c 69 74 65 33  TF16.int sqlite3
2cd90 55 74 66 31 36 42 79 74 65 4c 65 6e 28 63 6f 6e  Utf16ByteLen(con
2cda0 73 74 20 76 6f 69 64 20 2a 70 44 61 74 61 2c 20  st void *pData, 
2cdb0 69 6e 74 20 6e 43 68 61 72 29 3b 0a 23 65 6e 64  int nChar);.#end
2cdc0 69 66 0a 69 6e 74 20 73 71 6c 69 74 65 33 55 74  if.int sqlite3Ut
2cdd0 66 38 43 68 61 72 4c 65 6e 28 63 6f 6e 73 74 20  f8CharLen(const 
2cde0 63 68 61 72 20 2a 70 44 61 74 61 2c 20 69 6e 74  char *pData, int
2cdf0 20 6e 42 79 74 65 29 3b 0a 75 33 32 20 73 71 6c   nByte);.u32 sql
2ce00 69 74 65 33 55 74 66 38 52 65 61 64 28 63 6f 6e  ite3Utf8Read(con
2ce10 73 74 20 75 38 2a 2a 29 3b 0a 4c 6f 67 45 73 74  st u8**);.LogEst
2ce20 20 73 71 6c 69 74 65 33 4c 6f 67 45 73 74 28 75   sqlite3LogEst(u
2ce30 36 34 29 3b 0a 4c 6f 67 45 73 74 20 73 71 6c 69  64);.LogEst sqli
2ce40 74 65 33 4c 6f 67 45 73 74 41 64 64 28 4c 6f 67  te3LogEstAdd(Log
2ce50 45 73 74 2c 4c 6f 67 45 73 74 29 3b 0a 23 69 66  Est,LogEst);.#if
2ce60 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
2ce70 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 4c 6f  _VIRTUALTABLE.Lo
2ce80 67 45 73 74 20 73 71 6c 69 74 65 33 4c 6f 67 45  gEst sqlite3LogE
2ce90 73 74 46 72 6f 6d 44 6f 75 62 6c 65 28 64 6f 75  stFromDouble(dou
2cea0 62 6c 65 29 3b 0a 23 65 6e 64 69 66 0a 23 69 66  ble);.#endif.#if
2ceb0 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
2cec0 45 4e 41 42 4c 45 5f 53 54 4d 54 5f 53 43 41 4e  ENABLE_STMT_SCAN
2ced0 53 54 41 54 55 53 29 20 7c 7c 20 5c 0a 20 20 20  STATUS) || \.   
2cee0 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
2cef0 45 4e 41 42 4c 45 5f 53 54 41 54 33 5f 4f 52 5f  ENABLE_STAT3_OR_
2cf00 53 54 41 54 34 29 20 7c 7c 20 5c 0a 20 20 20 20  STAT4) || \.    
2cf10 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45  defined(SQLITE_E
2cf20 58 50 4c 41 49 4e 5f 45 53 54 49 4d 41 54 45 44  XPLAIN_ESTIMATED
2cf30 5f 52 4f 57 53 29 0a 75 36 34 20 73 71 6c 69 74  _ROWS).u64 sqlit
2cf40 65 33 4c 6f 67 45 73 74 54 6f 49 6e 74 28 4c 6f  e3LogEstToInt(Lo
2cf50 67 45 73 74 29 3b 0a 23 65 6e 64 69 66 0a 56 4c  gEst);.#endif.VL
2cf60 69 73 74 20 2a 73 71 6c 69 74 65 33 56 4c 69 73  ist *sqlite3VLis
2cf70 74 41 64 64 28 73 71 6c 69 74 65 33 2a 2c 56 4c  tAdd(sqlite3*,VL
2cf80 69 73 74 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  ist*,const char*
2cf90 2c 69 6e 74 2c 69 6e 74 29 3b 0a 63 6f 6e 73 74  ,int,int);.const
2cfa0 20 63 68 61 72 20 2a 73 71 6c 69 74 65 33 56 4c   char *sqlite3VL
2cfb0 69 73 74 4e 75 6d 54 6f 4e 61 6d 65 28 56 4c 69  istNumToName(VLi
2cfc0 73 74 2a 2c 69 6e 74 29 3b 0a 69 6e 74 20 73 71  st*,int);.int sq
2cfd0 6c 69 74 65 33 56 4c 69 73 74 4e 61 6d 65 54 6f  lite3VListNameTo
2cfe0 4e 75 6d 28 56 4c 69 73 74 2a 2c 63 6f 6e 73 74  Num(VList*,const
2cff0 20 63 68 61 72 2a 2c 69 6e 74 29 3b 0a 0a 2f 2a   char*,int);../*
2d000 0a 2a 2a 20 52 6f 75 74 69 6e 65 73 20 74 6f 20  .** Routines to 
2d010 72 65 61 64 20 61 6e 64 20 77 72 69 74 65 20 76  read and write v
2d020 61 72 69 61 62 6c 65 2d 6c 65 6e 67 74 68 20 69  ariable-length i
2d030 6e 74 65 67 65 72 73 2e 20 20 54 68 65 73 65 20  ntegers.  These 
2d040 75 73 65 64 20 74 6f 0a 2a 2a 20 62 65 20 64 65  used to.** be de
2d050 66 69 6e 65 64 20 6c 6f 63 61 6c 6c 79 2c 20 62  fined locally, b
2d060 75 74 20 6e 6f 77 20 77 65 20 75 73 65 20 74 68  ut now we use th
2d070 65 20 76 61 72 69 6e 74 20 72 6f 75 74 69 6e 65  e varint routine
2d080 73 20 69 6e 20 74 68 65 20 75 74 69 6c 2e 63 0a  s in the util.c.
2d090 2a 2a 20 66 69 6c 65 2e 0a 2a 2f 0a 69 6e 74 20  ** file..*/.int 
2d0a0 73 71 6c 69 74 65 33 50 75 74 56 61 72 69 6e 74  sqlite3PutVarint
2d0b0 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 2a 2c  (unsigned char*,
2d0c0 20 75 36 34 29 3b 0a 75 38 20 73 71 6c 69 74 65   u64);.u8 sqlite
2d0d0 33 47 65 74 56 61 72 69 6e 74 28 63 6f 6e 73 74  3GetVarint(const
2d0e0 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a   unsigned char *
2d0f0 2c 20 75 36 34 20 2a 29 3b 0a 75 38 20 73 71 6c  , u64 *);.u8 sql
2d100 69 74 65 33 47 65 74 56 61 72 69 6e 74 33 32 28  ite3GetVarint32(
2d110 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63  const unsigned c
2d120 68 61 72 20 2a 2c 20 75 33 32 20 2a 29 3b 0a 69  har *, u32 *);.i
2d130 6e 74 20 73 71 6c 69 74 65 33 56 61 72 69 6e 74  nt sqlite3Varint
2d140 4c 65 6e 28 75 36 34 20 76 29 3b 0a 0a 2f 2a 0a  Len(u64 v);../*.
2d150 2a 2a 20 54 68 65 20 63 6f 6d 6d 6f 6e 20 63 61  ** The common ca
2d160 73 65 20 69 73 20 66 6f 72 20 61 20 76 61 72 69  se is for a vari
2d170 6e 74 20 74 6f 20 62 65 20 61 20 73 69 6e 67 6c  nt to be a singl
2d180 65 20 62 79 74 65 2e 20 20 54 68 65 79 20 66 6f  e byte.  They fo
2d190 6c 6c 6f 77 69 6e 67 0a 2a 2a 20 6d 61 63 72 6f  llowing.** macro
2d1a0 73 20 68 61 6e 64 6c 65 20 74 68 65 20 63 6f 6d  s handle the com
2d1b0 6d 6f 6e 20 63 61 73 65 20 77 69 74 68 6f 75 74  mon case without
2d1c0 20 61 20 70 72 6f 63 65 64 75 72 65 20 63 61 6c   a procedure cal
2d1d0 6c 2c 20 62 75 74 20 74 68 65 6e 20 63 61 6c 6c  l, but then call
2d1e0 0a 2a 2a 20 74 68 65 20 70 72 6f 63 65 64 75 72  .** the procedur
2d1f0 65 20 66 6f 72 20 6c 61 72 67 65 72 20 76 61 72  e for larger var
2d200 69 6e 74 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  ints..*/.#define
2d210 20 67 65 74 56 61 72 69 6e 74 33 32 28 41 2c 42   getVarint32(A,B
2d220 29 20 20 5c 0a 20 20 28 75 38 29 28 28 2a 28 41  )  \.  (u8)((*(A
2d230 29 3c 28 75 38 29 30 78 38 30 29 3f 28 28 42 29  )<(u8)0x80)?((B)
2d240 3d 28 75 33 32 29 2a 28 41 29 29 2c 31 3a 73 71  =(u32)*(A)),1:sq
2d250 6c 69 74 65 33 47 65 74 56 61 72 69 6e 74 33 32  lite3GetVarint32
2d260 28 28 41 29 2c 28 75 33 32 20 2a 29 26 28 42 29  ((A),(u32 *)&(B)
2d270 29 29 0a 23 64 65 66 69 6e 65 20 70 75 74 56 61  )).#define putVa
2d280 72 69 6e 74 33 32 28 41 2c 42 29 20 20 5c 0a 20  rint32(A,B)  \. 
2d290 20 28 75 38 29 28 28 28 75 33 32 29 28 42 29 3c   (u8)(((u32)(B)<
2d2a0 28 75 33 32 29 30 78 38 30 29 3f 28 2a 28 41 29  (u32)0x80)?(*(A)
2d2b0 3d 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29  =(unsigned char)
2d2c0 28 42 29 29 2c 31 3a 5c 0a 20 20 73 71 6c 69 74  (B)),1:\.  sqlit
2d2d0 65 33 50 75 74 56 61 72 69 6e 74 28 28 41 29 2c  e3PutVarint((A),
2d2e0 28 42 29 29 29 0a 23 64 65 66 69 6e 65 20 67 65  (B))).#define ge
2d2f0 74 56 61 72 69 6e 74 20 20 20 20 73 71 6c 69 74  tVarint    sqlit
2d300 65 33 47 65 74 56 61 72 69 6e 74 0a 23 64 65 66  e3GetVarint.#def
2d310 69 6e 65 20 70 75 74 56 61 72 69 6e 74 20 20 20  ine putVarint   
2d320 20 73 71 6c 69 74 65 33 50 75 74 56 61 72 69 6e   sqlite3PutVarin
2d330 74 0a 0a 0a 63 6f 6e 73 74 20 63 68 61 72 20 2a  t...const char *
2d340 73 71 6c 69 74 65 33 49 6e 64 65 78 41 66 66 69  sqlite3IndexAffi
2d350 6e 69 74 79 53 74 72 28 73 71 6c 69 74 65 33 2a  nityStr(sqlite3*
2d360 2c 20 49 6e 64 65 78 2a 29 3b 0a 76 6f 69 64 20  , Index*);.void 
2d370 73 71 6c 69 74 65 33 54 61 62 6c 65 41 66 66 69  sqlite3TableAffi
2d380 6e 69 74 79 28 56 64 62 65 2a 2c 20 54 61 62 6c  nity(Vdbe*, Tabl
2d390 65 2a 2c 20 69 6e 74 29 3b 0a 63 68 61 72 20 73  e*, int);.char s
2d3a0 71 6c 69 74 65 33 43 6f 6d 70 61 72 65 41 66 66  qlite3CompareAff
2d3b0 69 6e 69 74 79 28 45 78 70 72 20 2a 70 45 78 70  inity(Expr *pExp
2d3c0 72 2c 20 63 68 61 72 20 61 66 66 32 29 3b 0a 69  r, char aff2);.i
2d3d0 6e 74 20 73 71 6c 69 74 65 33 49 6e 64 65 78 41  nt sqlite3IndexA
2d3e0 66 66 69 6e 69 74 79 4f 6b 28 45 78 70 72 20 2a  ffinityOk(Expr *
2d3f0 70 45 78 70 72 2c 20 63 68 61 72 20 69 64 78 5f  pExpr, char idx_
2d400 61 66 66 69 6e 69 74 79 29 3b 0a 63 68 61 72 20  affinity);.char 
2d410 73 71 6c 69 74 65 33 54 61 62 6c 65 43 6f 6c 75  sqlite3TableColu
2d420 6d 6e 41 66 66 69 6e 69 74 79 28 54 61 62 6c 65  mnAffinity(Table
2d430 2a 2c 69 6e 74 29 3b 0a 63 68 61 72 20 73 71 6c  *,int);.char sql
2d440 69 74 65 33 45 78 70 72 41 66 66 69 6e 69 74 79  ite3ExprAffinity
2d450 28 45 78 70 72 20 2a 70 45 78 70 72 29 3b 0a 69  (Expr *pExpr);.i
2d460 6e 74 20 73 71 6c 69 74 65 33 41 74 6f 69 36 34  nt sqlite3Atoi64
2d470 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 69 36  (const char*, i6
2d480 34 2a 2c 20 69 6e 74 2c 20 75 38 29 3b 0a 69 6e  4*, int, u8);.in
2d490 74 20 73 71 6c 69 74 65 33 44 65 63 4f 72 48 65  t sqlite3DecOrHe
2d4a0 78 54 6f 49 36 34 28 63 6f 6e 73 74 20 63 68 61  xToI64(const cha
2d4b0 72 2a 2c 20 69 36 34 2a 29 3b 0a 76 6f 69 64 20  r*, i64*);.void 
2d4c0 73 71 6c 69 74 65 33 45 72 72 6f 72 57 69 74 68  sqlite3ErrorWith
2d4d0 4d 73 67 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e  Msg(sqlite3*, in
2d4e0 74 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 2e  t, const char*,.
2d4f0 2e 2e 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  ..);.void sqlite
2d500 33 45 72 72 6f 72 28 73 71 6c 69 74 65 33 2a 2c  3Error(sqlite3*,
2d510 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
2d520 65 33 53 79 73 74 65 6d 45 72 72 6f 72 28 73 71  e3SystemError(sq
2d530 6c 69 74 65 33 2a 2c 69 6e 74 29 3b 0a 76 6f 69  lite3*,int);.voi
2d540 64 20 2a 73 71 6c 69 74 65 33 48 65 78 54 6f 42  d *sqlite3HexToB
2d550 6c 6f 62 28 73 71 6c 69 74 65 33 2a 2c 20 63 6f  lob(sqlite3*, co
2d560 6e 73 74 20 63 68 61 72 20 2a 7a 2c 20 69 6e 74  nst char *z, int
2d570 20 6e 29 3b 0a 75 38 20 73 71 6c 69 74 65 33 48   n);.u8 sqlite3H
2d580 65 78 54 6f 49 6e 74 28 69 6e 74 20 68 29 3b 0a  exToInt(int h);.
2d590 69 6e 74 20 73 71 6c 69 74 65 33 54 77 6f 50 61  int sqlite3TwoPa
2d5a0 72 74 4e 61 6d 65 28 50 61 72 73 65 20 2a 2c 20  rtName(Parse *, 
2d5b0 54 6f 6b 65 6e 20 2a 2c 20 54 6f 6b 65 6e 20 2a  Token *, Token *
2d5c0 2c 20 54 6f 6b 65 6e 20 2a 2a 29 3b 0a 0a 23 69  , Token **);..#i
2d5d0 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  f defined(SQLITE
2d5e0 5f 4e 45 45 44 5f 45 52 52 5f 4e 41 4d 45 29 0a  _NEED_ERR_NAME).
2d5f0 63 6f 6e 73 74 20 63 68 61 72 20 2a 73 71 6c 69  const char *sqli
2d600 74 65 33 45 72 72 4e 61 6d 65 28 69 6e 74 29 3b  te3ErrName(int);
2d610 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20  .#endif..#ifdef 
2d620 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 44 45  SQLITE_ENABLE_DE
2d630 53 45 52 49 41 4c 49 5a 45 0a 69 6e 74 20 73 71  SERIALIZE.int sq
2d640 6c 69 74 65 33 4d 65 6d 64 62 49 6e 69 74 28 76  lite3MemdbInit(v
2d650 6f 69 64 29 3b 0a 23 65 6e 64 69 66 0a 0a 63 6f  oid);.#endif..co
2d660 6e 73 74 20 63 68 61 72 20 2a 73 71 6c 69 74 65  nst char *sqlite
2d670 33 45 72 72 53 74 72 28 69 6e 74 29 3b 0a 69 6e  3ErrStr(int);.in
2d680 74 20 73 71 6c 69 74 65 33 52 65 61 64 53 63 68  t sqlite3ReadSch
2d690 65 6d 61 28 50 61 72 73 65 20 2a 70 50 61 72 73  ema(Parse *pPars
2d6a0 65 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73 71 6c  e);.CollSeq *sql
2d6b0 69 74 65 33 46 69 6e 64 43 6f 6c 6c 53 65 71 28  ite3FindCollSeq(
2d6c0 73 71 6c 69 74 65 33 2a 2c 75 38 20 65 6e 63 2c  sqlite3*,u8 enc,
2d6d0 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 69 6e 74   const char*,int
2d6e0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 73  );.int sqlite3Is
2d6f0 42 69 6e 61 72 79 28 63 6f 6e 73 74 20 43 6f 6c  Binary(const Col
2d700 6c 53 65 71 2a 29 3b 0a 43 6f 6c 6c 53 65 71 20  lSeq*);.CollSeq 
2d710 2a 73 71 6c 69 74 65 33 4c 6f 63 61 74 65 43 6f  *sqlite3LocateCo
2d720 6c 6c 53 65 71 28 50 61 72 73 65 20 2a 70 50 61  llSeq(Parse *pPa
2d730 72 73 65 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  rse, const char*
2d740 7a 4e 61 6d 65 29 3b 0a 43 6f 6c 6c 53 65 71 20  zName);.CollSeq 
2d750 2a 73 71 6c 69 74 65 33 45 78 70 72 43 6f 6c 6c  *sqlite3ExprColl
2d760 53 65 71 28 50 61 72 73 65 20 2a 70 50 61 72 73  Seq(Parse *pPars
2d770 65 2c 20 45 78 70 72 20 2a 70 45 78 70 72 29 3b  e, Expr *pExpr);
2d780 0a 43 6f 6c 6c 53 65 71 20 2a 73 71 6c 69 74 65  .CollSeq *sqlite
2d790 33 45 78 70 72 4e 4e 43 6f 6c 6c 53 65 71 28 50  3ExprNNCollSeq(P
2d7a0 61 72 73 65 20 2a 70 50 61 72 73 65 2c 20 45 78  arse *pParse, Ex
2d7b0 70 72 20 2a 70 45 78 70 72 29 3b 0a 69 6e 74 20  pr *pExpr);.int 
2d7c0 73 71 6c 69 74 65 33 45 78 70 72 43 6f 6c 6c 53  sqlite3ExprCollS
2d7d0 65 71 4d 61 74 63 68 28 50 61 72 73 65 2a 2c 45  eqMatch(Parse*,E
2d7e0 78 70 72 2a 2c 45 78 70 72 2a 29 3b 0a 45 78 70  xpr*,Expr*);.Exp
2d7f0 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72 41 64  r *sqlite3ExprAd
2d800 64 43 6f 6c 6c 61 74 65 54 6f 6b 65 6e 28 50 61  dCollateToken(Pa
2d810 72 73 65 20 2a 70 50 61 72 73 65 2c 20 45 78 70  rse *pParse, Exp
2d820 72 2a 2c 20 63 6f 6e 73 74 20 54 6f 6b 65 6e 2a  r*, const Token*
2d830 2c 20 69 6e 74 29 3b 0a 45 78 70 72 20 2a 73 71  , int);.Expr *sq
2d840 6c 69 74 65 33 45 78 70 72 41 64 64 43 6f 6c 6c  lite3ExprAddColl
2d850 61 74 65 53 74 72 69 6e 67 28 50 61 72 73 65 2a  ateString(Parse*
2d860 2c 45 78 70 72 2a 2c 63 6f 6e 73 74 20 63 68 61  ,Expr*,const cha
2d870 72 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74  r*);.Expr *sqlit
2d880 65 33 45 78 70 72 53 6b 69 70 43 6f 6c 6c 61 74  e3ExprSkipCollat
2d890 65 28 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71  e(Expr*);.int sq
2d8a0 6c 69 74 65 33 43 68 65 63 6b 43 6f 6c 6c 53 65  lite3CheckCollSe
2d8b0 71 28 50 61 72 73 65 20 2a 2c 20 43 6f 6c 6c 53  q(Parse *, CollS
2d8c0 65 71 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  eq *);.int sqlit
2d8d0 65 33 57 72 69 74 61 62 6c 65 53 63 68 65 6d 61  e3WritableSchema
2d8e0 28 73 71 6c 69 74 65 33 2a 29 3b 0a 69 6e 74 20  (sqlite3*);.int 
2d8f0 73 71 6c 69 74 65 33 43 68 65 63 6b 4f 62 6a 65  sqlite3CheckObje
2d900 63 74 4e 61 6d 65 28 50 61 72 73 65 20 2a 2c 20  ctName(Parse *, 
2d910 63 6f 6e 73 74 20 63 68 61 72 20 2a 29 3b 0a 76  const char *);.v
2d920 6f 69 64 20 73 71 6c 69 74 65 33 56 64 62 65 53  oid sqlite3VdbeS
2d930 65 74 43 68 61 6e 67 65 73 28 73 71 6c 69 74 65  etChanges(sqlite
2d940 33 20 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73  3 *, int);.int s
2d950 71 6c 69 74 65 33 41 64 64 49 6e 74 36 34 28 69  qlite3AddInt64(i
2d960 36 34 2a 2c 69 36 34 29 3b 0a 69 6e 74 20 73 71  64*,i64);.int sq
2d970 6c 69 74 65 33 53 75 62 49 6e 74 36 34 28 69 36  lite3SubInt64(i6
2d980 34 2a 2c 69 36 34 29 3b 0a 69 6e 74 20 73 71 6c  4*,i64);.int sql
2d990 69 74 65 33 4d 75 6c 49 6e 74 36 34 28 69 36 34  ite3MulInt64(i64
2d9a0 2a 2c 69 36 34 29 3b 0a 69 6e 74 20 73 71 6c 69  *,i64);.int sqli
2d9b0 74 65 33 41 62 73 49 6e 74 33 32 28 69 6e 74 29  te3AbsInt32(int)
2d9c0 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ;.#ifdef SQLITE_
2d9d0 45 4e 41 42 4c 45 5f 38 5f 33 5f 4e 41 4d 45 53  ENABLE_8_3_NAMES
2d9e0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 46 69 6c  .void sqlite3Fil
2d9f0 65 53 75 66 66 69 78 33 28 63 6f 6e 73 74 20 63  eSuffix3(const c
2da00 68 61 72 2a 2c 20 63 68 61 72 2a 29 3b 0a 23 65  har*, char*);.#e
2da10 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  lse.# define sql
2da20 69 74 65 33 46 69 6c 65 53 75 66 66 69 78 33 28  ite3FileSuffix3(
2da30 58 2c 59 29 0a 23 65 6e 64 69 66 0a 75 38 20 73  X,Y).#endif.u8 s
2da40 71 6c 69 74 65 33 47 65 74 42 6f 6f 6c 65 61 6e  qlite3GetBoolean
2da50 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 2c 75  (const char *z,u
2da60 38 29 3b 0a 0a 63 6f 6e 73 74 20 76 6f 69 64 20  8);..const void 
2da70 2a 73 71 6c 69 74 65 33 56 61 6c 75 65 54 65 78  *sqlite3ValueTex
2da80 74 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a  t(sqlite3_value*
2da90 2c 20 75 38 29 3b 0a 69 6e 74 20 73 71 6c 69 74  , u8);.int sqlit
2daa0 65 33 56 61 6c 75 65 42 79 74 65 73 28 73 71 6c  e3ValueBytes(sql
2dab0 69 74 65 33 5f 76 61 6c 75 65 2a 2c 20 75 38 29  ite3_value*, u8)
2dac0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 61  ;.void sqlite3Va
2dad0 6c 75 65 53 65 74 53 74 72 28 73 71 6c 69 74 65  lueSetStr(sqlite
2dae0 33 5f 76 61 6c 75 65 2a 2c 20 69 6e 74 2c 20 63  3_value*, int, c
2daf0 6f 6e 73 74 20 76 6f 69 64 20 2a 2c 75 38 2c 0a  onst void *,u8,.
2db00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2db10 20 20 20 20 20 20 20 20 76 6f 69 64 28 2a 29 28          void(*)(
2db20 76 6f 69 64 2a 29 29 3b 0a 76 6f 69 64 20 73 71  void*));.void sq
2db30 6c 69 74 65 33 56 61 6c 75 65 53 65 74 4e 75 6c  lite3ValueSetNul
2db40 6c 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a  l(sqlite3_value*
2db50 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56  );.void sqlite3V
2db60 61 6c 75 65 46 72 65 65 28 73 71 6c 69 74 65 33  alueFree(sqlite3
2db70 5f 76 61 6c 75 65 2a 29 3b 0a 73 71 6c 69 74 65  _value*);.sqlite
2db80 33 5f 76 61 6c 75 65 20 2a 73 71 6c 69 74 65 33  3_value *sqlite3
2db90 56 61 6c 75 65 4e 65 77 28 73 71 6c 69 74 65 33  ValueNew(sqlite3
2dba0 20 2a 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c   *);.#ifndef SQL
2dbb0 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36 0a 63  ITE_OMIT_UTF16.c
2dbc0 68 61 72 20 2a 73 71 6c 69 74 65 33 55 74 66 31  har *sqlite3Utf1
2dbd0 36 74 6f 38 28 73 71 6c 69 74 65 33 20 2a 2c 20  6to8(sqlite3 *, 
2dbe0 63 6f 6e 73 74 20 76 6f 69 64 2a 2c 20 69 6e 74  const void*, int
2dbf0 2c 20 75 38 29 3b 0a 23 65 6e 64 69 66 0a 69 6e  , u8);.#endif.in
2dc00 74 20 73 71 6c 69 74 65 33 56 61 6c 75 65 46 72  t sqlite3ValueFr
2dc10 6f 6d 45 78 70 72 28 73 71 6c 69 74 65 33 20 2a  omExpr(sqlite3 *
2dc20 2c 20 45 78 70 72 20 2a 2c 20 75 38 2c 20 75 38  , Expr *, u8, u8
2dc30 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20  , sqlite3_value 
2dc40 2a 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  **);.void sqlite
2dc50 33 56 61 6c 75 65 41 70 70 6c 79 41 66 66 69 6e  3ValueApplyAffin
2dc60 69 74 79 28 73 71 6c 69 74 65 33 5f 76 61 6c 75  ity(sqlite3_valu
2dc70 65 20 2a 2c 20 75 38 2c 20 75 38 29 3b 0a 23 69  e *, u8, u8);.#i
2dc80 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 41 4d 41  fndef SQLITE_AMA
2dc90 4c 47 41 4d 41 54 49 4f 4e 0a 65 78 74 65 72 6e  LGAMATION.extern
2dca0 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20   const unsigned 
2dcb0 63 68 61 72 20 73 71 6c 69 74 65 33 4f 70 63 6f  char sqlite3Opco
2dcc0 64 65 50 72 6f 70 65 72 74 79 5b 5d 3b 0a 65 78  deProperty[];.ex
2dcd0 74 65 72 6e 20 63 6f 6e 73 74 20 63 68 61 72 20  tern const char 
2dce0 73 71 6c 69 74 65 33 53 74 72 42 49 4e 41 52 59  sqlite3StrBINARY
2dcf0 5b 5d 3b 0a 65 78 74 65 72 6e 20 63 6f 6e 73 74  [];.extern const
2dd00 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 73   unsigned char s
2dd10 71 6c 69 74 65 33 55 70 70 65 72 54 6f 4c 6f 77  qlite3UpperToLow
2dd20 65 72 5b 5d 3b 0a 65 78 74 65 72 6e 20 63 6f 6e  er[];.extern con
2dd30 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72  st unsigned char
2dd40 20 73 71 6c 69 74 65 33 43 74 79 70 65 4d 61 70   sqlite3CtypeMap
2dd50 5b 5d 3b 0a 65 78 74 65 72 6e 20 63 6f 6e 73 74  [];.extern const
2dd60 20 54 6f 6b 65 6e 20 73 71 6c 69 74 65 33 49 6e   Token sqlite3In
2dd70 74 54 6f 6b 65 6e 73 5b 5d 3b 0a 65 78 74 65 72  tTokens[];.exter
2dd80 6e 20 53 51 4c 49 54 45 5f 57 53 44 20 73 74 72  n SQLITE_WSD str
2dd90 75 63 74 20 53 71 6c 69 74 65 33 43 6f 6e 66 69  uct Sqlite3Confi
2dda0 67 20 73 71 6c 69 74 65 33 43 6f 6e 66 69 67 3b  g sqlite3Config;
2ddb0 0a 65 78 74 65 72 6e 20 46 75 6e 63 44 65 66 48  .extern FuncDefH
2ddc0 61 73 68 20 73 71 6c 69 74 65 33 42 75 69 6c 74  ash sqlite3Built
2ddd0 69 6e 46 75 6e 63 74 69 6f 6e 73 3b 0a 23 69 66  inFunctions;.#if
2dde0 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
2ddf0 5f 57 53 44 0a 65 78 74 65 72 6e 20 69 6e 74 20  _WSD.extern int 
2de00 73 71 6c 69 74 65 33 50 65 6e 64 69 6e 67 42 79  sqlite3PendingBy
2de10 74 65 3b 0a 23 65 6e 64 69 66 0a 23 65 6e 64 69  te;.#endif.#endi
2de20 66 0a 23 69 66 64 65 66 20 56 44 42 45 5f 50 52  f.#ifdef VDBE_PR
2de30 4f 46 49 4c 45 0a 65 78 74 65 72 6e 20 73 71 6c  OFILE.extern sql
2de40 69 74 65 33 5f 75 69 6e 74 36 34 20 73 71 6c 69  ite3_uint64 sqli
2de50 74 65 33 4e 50 72 6f 66 69 6c 65 43 6e 74 3b 0a  te3NProfileCnt;.
2de60 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c 69  #endif.void sqli
2de70 74 65 33 52 6f 6f 74 50 61 67 65 4d 6f 76 65 64  te3RootPageMoved
2de80 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74 2c 20  (sqlite3*, int, 
2de90 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  int, int);.void 
2dea0 73 71 6c 69 74 65 33 52 65 69 6e 64 65 78 28 50  sqlite3Reindex(P
2deb0 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54  arse*, Token*, T
2dec0 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  oken*);.void sql
2ded0 69 74 65 33 41 6c 74 65 72 46 75 6e 63 74 69 6f  ite3AlterFunctio
2dee0 6e 73 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20 73  ns(void);.void s
2def0 71 6c 69 74 65 33 41 6c 74 65 72 52 65 6e 61 6d  qlite3AlterRenam
2df00 65 54 61 62 6c 65 28 50 61 72 73 65 2a 2c 20 53  eTable(Parse*, S
2df10 72 63 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 29  rcList*, Token*)
2df20 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 6c  ;.void sqlite3Al
2df30 74 65 72 52 65 6e 61 6d 65 43 6f 6c 75 6d 6e 28  terRenameColumn(
2df40 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a  Parse*, SrcList*
2df50 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a  , Token*, Token*
2df60 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 47 65  );.int sqlite3Ge
2df70 74 54 6f 6b 65 6e 28 63 6f 6e 73 74 20 75 6e 73  tToken(const uns
2df80 69 67 6e 65 64 20 63 68 61 72 20 2a 2c 20 69 6e  igned char *, in
2df90 74 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  t *);.void sqlit
2dfa0 65 33 4e 65 73 74 65 64 50 61 72 73 65 28 50 61  e3NestedParse(Pa
2dfb0 72 73 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  rse*, const char
2dfc0 2a 2c 20 2e 2e 2e 29 3b 0a 76 6f 69 64 20 73 71  *, ...);.void sq
2dfd0 6c 69 74 65 33 45 78 70 69 72 65 50 72 65 70 61  lite3ExpirePrepa
2dfe0 72 65 64 53 74 61 74 65 6d 65 6e 74 73 28 73 71  redStatements(sq
2dff0 6c 69 74 65 33 2a 2c 20 69 6e 74 29 3b 0a 76 6f  lite3*, int);.vo
2e000 69 64 20 73 71 6c 69 74 65 33 43 6f 64 65 52 68  id sqlite3CodeRh
2e010 73 4f 66 49 4e 28 50 61 72 73 65 2a 2c 20 45 78  sOfIN(Parse*, Ex
2e020 70 72 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  pr*, int, int);.
2e030 69 6e 74 20 73 71 6c 69 74 65 33 43 6f 64 65 53  int sqlite3CodeS
2e040 75 62 73 65 6c 65 63 74 28 50 61 72 73 65 2a 2c  ubselect(Parse*,
2e050 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71   Expr*);.void sq
2e060 6c 69 74 65 33 53 65 6c 65 63 74 50 72 65 70 28  lite3SelectPrep(
2e070 50 61 72 73 65 2a 2c 20 53 65 6c 65 63 74 2a 2c  Parse*, Select*,
2e080 20 4e 61 6d 65 43 6f 6e 74 65 78 74 2a 29 3b 0a   NameContext*);.
2e090 76 6f 69 64 20 73 71 6c 69 74 65 33 53 65 6c 65  void sqlite3Sele
2e0a0 63 74 57 72 6f 6e 67 4e 75 6d 54 65 72 6d 73 45  ctWrongNumTermsE
2e0b0 72 72 6f 72 28 50 61 72 73 65 20 2a 70 50 61 72  rror(Parse *pPar
2e0c0 73 65 2c 20 53 65 6c 65 63 74 20 2a 70 29 3b 0a  se, Select *p);.
2e0d0 69 6e 74 20 73 71 6c 69 74 65 33 4d 61 74 63 68  int sqlite3Match
2e0e0 53 70 61 6e 4e 61 6d 65 28 63 6f 6e 73 74 20 63  SpanName(const c
2e0f0 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  har*, const char
2e100 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  *, const char*, 
2e110 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 69 6e  const char*);.in
2e120 74 20 73 71 6c 69 74 65 33 52 65 73 6f 6c 76 65  t sqlite3Resolve
2e130 45 78 70 72 4e 61 6d 65 73 28 4e 61 6d 65 43 6f  ExprNames(NameCo
2e140 6e 74 65 78 74 2a 2c 20 45 78 70 72 2a 29 3b 0a  ntext*, Expr*);.
2e150 69 6e 74 20 73 71 6c 69 74 65 33 52 65 73 6f 6c  int sqlite3Resol
2e160 76 65 45 78 70 72 4c 69 73 74 4e 61 6d 65 73 28  veExprListNames(
2e170 4e 61 6d 65 43 6f 6e 74 65 78 74 2a 2c 20 45 78  NameContext*, Ex
2e180 70 72 4c 69 73 74 2a 29 3b 0a 76 6f 69 64 20 73  prList*);.void s
2e190 71 6c 69 74 65 33 52 65 73 6f 6c 76 65 53 65 6c  qlite3ResolveSel
2e1a0 65 63 74 4e 61 6d 65 73 28 50 61 72 73 65 2a 2c  ectNames(Parse*,
2e1b0 20 53 65 6c 65 63 74 2a 2c 20 4e 61 6d 65 43 6f   Select*, NameCo
2e1c0 6e 74 65 78 74 2a 29 3b 0a 69 6e 74 20 73 71 6c  ntext*);.int sql
2e1d0 69 74 65 33 52 65 73 6f 6c 76 65 53 65 6c 66 52  ite3ResolveSelfR
2e1e0 65 66 65 72 65 6e 63 65 28 50 61 72 73 65 2a 2c  eference(Parse*,
2e1f0 54 61 62 6c 65 2a 2c 69 6e 74 2c 45 78 70 72 2a  Table*,int,Expr*
2e200 2c 45 78 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74  ,ExprList*);.int
2e210 20 73 71 6c 69 74 65 33 52 65 73 6f 6c 76 65 4f   sqlite3ResolveO
2e220 72 64 65 72 47 72 6f 75 70 42 79 28 50 61 72 73  rderGroupBy(Pars
2e230 65 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 45 78 70  e*, Select*, Exp
2e240 72 4c 69 73 74 2a 2c 20 63 6f 6e 73 74 20 63 68  rList*, const ch
2e250 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  ar*);.void sqlit
2e260 65 33 43 6f 6c 75 6d 6e 44 65 66 61 75 6c 74 28  e3ColumnDefault(
2e270 56 64 62 65 20 2a 2c 20 54 61 62 6c 65 20 2a 2c  Vdbe *, Table *,
2e280 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64   int, int);.void
2e290 20 73 71 6c 69 74 65 33 41 6c 74 65 72 46 69 6e   sqlite3AlterFin
2e2a0 69 73 68 41 64 64 43 6f 6c 75 6d 6e 28 50 61 72  ishAddColumn(Par
2e2b0 73 65 20 2a 2c 20 54 6f 6b 65 6e 20 2a 29 3b 0a  se *, Token *);.
2e2c0 76 6f 69 64 20 73 71 6c 69 74 65 33 41 6c 74 65  void sqlite3Alte
2e2d0 72 42 65 67 69 6e 41 64 64 43 6f 6c 75 6d 6e 28  rBeginAddColumn(
2e2e0 50 61 72 73 65 20 2a 2c 20 53 72 63 4c 69 73 74  Parse *, SrcList
2e2f0 20 2a 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74   *);.void *sqlit
2e300 65 33 52 65 6e 61 6d 65 54 6f 6b 65 6e 4d 61 70  e3RenameTokenMap
2e310 28 50 61 72 73 65 2a 2c 20 76 6f 69 64 2a 2c 20  (Parse*, void*, 
2e320 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71  Token*);.void sq
2e330 6c 69 74 65 33 52 65 6e 61 6d 65 54 6f 6b 65 6e  lite3RenameToken
2e340 52 65 6d 61 70 28 50 61 72 73 65 2a 2c 20 76 6f  Remap(Parse*, vo
2e350 69 64 20 2a 70 54 6f 2c 20 76 6f 69 64 20 2a 70  id *pTo, void *p
2e360 46 72 6f 6d 29 3b 0a 76 6f 69 64 20 73 71 6c 69  From);.void sqli
2e370 74 65 33 52 65 6e 61 6d 65 45 78 70 72 55 6e 6d  te3RenameExprUnm
2e380 61 70 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a  ap(Parse*, Expr*
2e390 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52  );.void sqlite3R
2e3a0 65 6e 61 6d 65 45 78 70 72 6c 69 73 74 55 6e 6d  enameExprlistUnm
2e3b0 61 70 28 50 61 72 73 65 2a 2c 20 45 78 70 72 4c  ap(Parse*, ExprL
2e3c0 69 73 74 2a 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a  ist*);.CollSeq *
2e3d0 73 71 6c 69 74 65 33 47 65 74 43 6f 6c 6c 53 65  sqlite3GetCollSe
2e3e0 71 28 50 61 72 73 65 2a 2c 20 75 38 2c 20 43 6f  q(Parse*, u8, Co
2e3f0 6c 6c 53 65 71 20 2a 2c 20 63 6f 6e 73 74 20 63  llSeq *, const c
2e400 68 61 72 2a 29 3b 0a 63 68 61 72 20 73 71 6c 69  har*);.char sqli
2e410 74 65 33 41 66 66 69 6e 69 74 79 54 79 70 65 28  te3AffinityType(
2e420 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 43 6f 6c  const char*, Col
2e430 75 6d 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  umn*);.void sqli
2e440 74 65 33 41 6e 61 6c 79 7a 65 28 50 61 72 73 65  te3Analyze(Parse
2e450 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e  *, Token*, Token
2e460 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49  *);.int sqlite3I
2e470 6e 76 6f 6b 65 42 75 73 79 48 61 6e 64 6c 65 72  nvokeBusyHandler
2e480 28 42 75 73 79 48 61 6e 64 6c 65 72 2a 2c 20 73  (BusyHandler*, s
2e490 71 6c 69 74 65 33 5f 66 69 6c 65 2a 29 3b 0a 69  qlite3_file*);.i
2e4a0 6e 74 20 73 71 6c 69 74 65 33 46 69 6e 64 44 62  nt sqlite3FindDb
2e4b0 28 73 71 6c 69 74 65 33 2a 2c 20 54 6f 6b 65 6e  (sqlite3*, Token
2e4c0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46  *);.int sqlite3F
2e4d0 69 6e 64 44 62 4e 61 6d 65 28 73 71 6c 69 74 65  indDbName(sqlite
2e4e0 33 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20  3 *, const char 
2e4f0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 41  *);.int sqlite3A
2e500 6e 61 6c 79 73 69 73 4c 6f 61 64 28 73 71 6c 69  nalysisLoad(sqli
2e510 74 65 33 2a 2c 69 6e 74 20 69 44 42 29 3b 0a 76  te3*,int iDB);.v
2e520 6f 69 64 20 73 71 6c 69 74 65 33 44 65 6c 65 74  oid sqlite3Delet
2e530 65 49 6e 64 65 78 53 61 6d 70 6c 65 73 28 73 71  eIndexSamples(sq
2e540 6c 69 74 65 33 2a 2c 49 6e 64 65 78 2a 29 3b 0a  lite3*,Index*);.
2e550 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65 66 61  void sqlite3Defa
2e560 75 6c 74 52 6f 77 45 73 74 28 49 6e 64 65 78 2a  ultRowEst(Index*
2e570 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52  );.void sqlite3R
2e580 65 67 69 73 74 65 72 4c 69 6b 65 46 75 6e 63 74  egisterLikeFunct
2e590 69 6f 6e 73 28 73 71 6c 69 74 65 33 2a 2c 20 69  ions(sqlite3*, i
2e5a0 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  nt);.int sqlite3
2e5b0 49 73 4c 69 6b 65 46 75 6e 63 74 69 6f 6e 28 73  IsLikeFunction(s
2e5c0 71 6c 69 74 65 33 2a 2c 45 78 70 72 2a 2c 69 6e  qlite3*,Expr*,in
2e5d0 74 2a 2c 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20  t*,char*);.void 
2e5e0 73 71 6c 69 74 65 33 53 63 68 65 6d 61 43 6c 65  sqlite3SchemaCle
2e5f0 61 72 28 76 6f 69 64 20 2a 29 3b 0a 53 63 68 65  ar(void *);.Sche
2e600 6d 61 20 2a 73 71 6c 69 74 65 33 53 63 68 65 6d  ma *sqlite3Schem
2e610 61 47 65 74 28 73 71 6c 69 74 65 33 20 2a 2c 20  aGet(sqlite3 *, 
2e620 42 74 72 65 65 20 2a 29 3b 0a 69 6e 74 20 73 71  Btree *);.int sq
2e630 6c 69 74 65 33 53 63 68 65 6d 61 54 6f 49 6e 64  lite3SchemaToInd
2e640 65 78 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20  ex(sqlite3 *db, 
2e650 53 63 68 65 6d 61 20 2a 29 3b 0a 4b 65 79 49 6e  Schema *);.KeyIn
2e660 66 6f 20 2a 73 71 6c 69 74 65 33 4b 65 79 49 6e  fo *sqlite3KeyIn
2e670 66 6f 41 6c 6c 6f 63 28 73 71 6c 69 74 65 33 2a  foAlloc(sqlite3*
2e680 2c 69 6e 74 2c 69 6e 74 29 3b 0a 76 6f 69 64 20  ,int,int);.void 
2e690 73 71 6c 69 74 65 33 4b 65 79 49 6e 66 6f 55 6e  sqlite3KeyInfoUn
2e6a0 72 65 66 28 4b 65 79 49 6e 66 6f 2a 29 3b 0a 4b  ref(KeyInfo*);.K
2e6b0 65 79 49 6e 66 6f 20 2a 73 71 6c 69 74 65 33 4b  eyInfo *sqlite3K
2e6c0 65 79 49 6e 66 6f 52 65 66 28 4b 65 79 49 6e 66  eyInfoRef(KeyInf
2e6d0 6f 2a 29 3b 0a 4b 65 79 49 6e 66 6f 20 2a 73 71  o*);.KeyInfo *sq
2e6e0 6c 69 74 65 33 4b 65 79 49 6e 66 6f 4f 66 49 6e  lite3KeyInfoOfIn
2e6f0 64 65 78 28 50 61 72 73 65 2a 2c 20 49 6e 64 65  dex(Parse*, Inde
2e700 78 2a 29 3b 0a 4b 65 79 49 6e 66 6f 20 2a 73 71  x*);.KeyInfo *sq
2e710 6c 69 74 65 33 4b 65 79 49 6e 66 6f 46 72 6f 6d  lite3KeyInfoFrom
2e720 45 78 70 72 4c 69 73 74 28 50 61 72 73 65 2a 2c  ExprList(Parse*,
2e730 20 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74 2c   ExprList*, int,
2e740 20 69 6e 74 29 3b 0a 0a 23 69 66 64 65 66 20 53   int);..#ifdef S
2e750 51 4c 49 54 45 5f 44 45 42 55 47 0a 69 6e 74 20  QLITE_DEBUG.int 
2e760 73 71 6c 69 74 65 33 4b 65 79 49 6e 66 6f 49 73  sqlite3KeyInfoIs
2e770 57 72 69 74 65 61 62 6c 65 28 4b 65 79 49 6e 66  Writeable(KeyInf
2e780 6f 2a 29 3b 0a 23 65 6e 64 69 66 0a 69 6e 74 20  o*);.#endif.int 
2e790 73 71 6c 69 74 65 33 43 72 65 61 74 65 46 75 6e  sqlite3CreateFun
2e7a0 63 28 73 71 6c 69 74 65 33 20 2a 2c 20 63 6f 6e  c(sqlite3 *, con
2e7b0 73 74 20 63 68 61 72 20 2a 2c 20 69 6e 74 2c 20  st char *, int, 
2e7c0 69 6e 74 2c 20 76 6f 69 64 20 2a 2c 0a 20 20 76  int, void *,.  v
2e7d0 6f 69 64 20 28 2a 29 28 73 71 6c 69 74 65 33 5f  oid (*)(sqlite3_
2e7e0 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c  context*,int,sql
2e7f0 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a 29 2c 0a  ite3_value **),.
2e800 20 20 76 6f 69 64 20 28 2a 29 28 73 71 6c 69 74    void (*)(sqlit
2e810 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c  e3_context*,int,
2e820 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a  sqlite3_value **
2e830 29 2c 20 0a 20 20 76 6f 69 64 20 28 2a 29 28 73  ), .  void (*)(s
2e840 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 29  qlite3_context*)
2e850 2c 0a 20 20 76 6f 69 64 20 28 2a 29 28 73 71 6c  ,.  void (*)(sql
2e860 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 29 2c 0a  ite3_context*),.
2e870 20 20 76 6f 69 64 20 28 2a 29 28 73 71 6c 69 74    void (*)(sqlit
2e880 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c  e3_context*,int,
2e890 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a  sqlite3_value **
2e8a0 29 2c 20 0a 20 20 46 75 6e 63 44 65 73 74 72 75  ), .  FuncDestru
2e8b0 63 74 6f 72 20 2a 70 44 65 73 74 72 75 63 74 6f  ctor *pDestructo
2e8c0 72 0a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  r.);.void sqlite
2e8d0 33 4e 6f 6f 70 44 65 73 74 72 75 63 74 6f 72 28  3NoopDestructor(
2e8e0 76 6f 69 64 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  void*);.void sql
2e8f0 69 74 65 33 4f 6f 6d 46 61 75 6c 74 28 73 71 6c  ite3OomFault(sql
2e900 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  ite3*);.void sql
2e910 69 74 65 33 4f 6f 6d 43 6c 65 61 72 28 73 71 6c  ite3OomClear(sql
2e920 69 74 65 33 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  ite3*);.int sqli
2e930 74 65 33 41 70 69 45 78 69 74 28 73 71 6c 69 74  te3ApiExit(sqlit
2e940 65 33 20 2a 64 62 2c 20 69 6e 74 29 3b 0a 69 6e  e3 *db, int);.in
2e950 74 20 73 71 6c 69 74 65 33 4f 70 65 6e 54 65 6d  t sqlite3OpenTem
2e960 70 44 61 74 61 62 61 73 65 28 50 61 72 73 65 20  pDatabase(Parse 
2e970 2a 29 3b 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65  *);..void sqlite
2e980 33 53 74 72 41 63 63 75 6d 49 6e 69 74 28 53 74  3StrAccumInit(St
2e990 72 41 63 63 75 6d 2a 2c 20 73 71 6c 69 74 65 33  rAccum*, sqlite3
2e9a0 2a 2c 20 63 68 61 72 2a 2c 20 69 6e 74 2c 20 69  *, char*, int, i
2e9b0 6e 74 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74  nt);.char *sqlit
2e9c0 65 33 53 74 72 41 63 63 75 6d 46 69 6e 69 73 68  e3StrAccumFinish
2e9d0 28 53 74 72 41 63 63 75 6d 2a 29 3b 0a 76 6f 69  (StrAccum*);.voi
2e9e0 64 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74 44  d sqlite3SelectD
2e9f0 65 73 74 49 6e 69 74 28 53 65 6c 65 63 74 44 65  estInit(SelectDe
2ea00 73 74 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a 45 78  st*,int,int);.Ex
2ea10 70 72 20 2a 73 71 6c 69 74 65 33 43 72 65 61 74  pr *sqlite3Creat
2ea20 65 43 6f 6c 75 6d 6e 45 78 70 72 28 73 71 6c 69  eColumnExpr(sqli
2ea30 74 65 33 20 2a 2c 20 53 72 63 4c 69 73 74 20 2a  te3 *, SrcList *
2ea40 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 0a 76 6f  , int, int);..vo
2ea50 69 64 20 73 71 6c 69 74 65 33 42 61 63 6b 75 70  id sqlite3Backup
2ea60 52 65 73 74 61 72 74 28 73 71 6c 69 74 65 33 5f  Restart(sqlite3_
2ea70 62 61 63 6b 75 70 20 2a 29 3b 0a 76 6f 69 64 20  backup *);.void 
2ea80 73 71 6c 69 74 65 33 42 61 63 6b 75 70 55 70 64  sqlite3BackupUpd
2ea90 61 74 65 28 73 71 6c 69 74 65 33 5f 62 61 63 6b  ate(sqlite3_back
2eaa0 75 70 20 2a 2c 20 50 67 6e 6f 2c 20 63 6f 6e 73  up *, Pgno, cons
2eab0 74 20 75 38 20 2a 29 3b 0a 0a 23 69 66 6e 64 65  t u8 *);..#ifnde
2eac0 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 55  f SQLITE_OMIT_SU
2ead0 42 51 55 45 52 59 0a 69 6e 74 20 73 71 6c 69 74  BQUERY.int sqlit
2eae0 65 33 45 78 70 72 43 68 65 63 6b 49 4e 28 50 61  e3ExprCheckIN(Pa
2eaf0 72 73 65 2a 2c 20 45 78 70 72 2a 29 3b 0a 23 65  rse*, Expr*);.#e
2eb00 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  lse.# define sql
2eb10 69 74 65 33 45 78 70 72 43 68 65 63 6b 49 4e 28  ite3ExprCheckIN(
2eb20 78 2c 79 29 20 53 51 4c 49 54 45 5f 4f 4b 0a 23  x,y) SQLITE_OK.#
2eb30 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51  endif..#ifdef SQ
2eb40 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54  LITE_ENABLE_STAT
2eb50 33 5f 4f 52 5f 53 54 41 54 34 0a 76 6f 69 64 20  3_OR_STAT4.void 
2eb60 73 71 6c 69 74 65 33 41 6e 61 6c 79 7a 65 46 75  sqlite3AnalyzeFu
2eb70 6e 63 74 69 6f 6e 73 28 76 6f 69 64 29 3b 0a 69  nctions(void);.i
2eb80 6e 74 20 73 71 6c 69 74 65 33 53 74 61 74 34 50  nt sqlite3Stat4P
2eb90 72 6f 62 65 53 65 74 56 61 6c 75 65 28 0a 20 20  robeSetValue(.  
2eba0 20 20 50 61 72 73 65 2a 2c 49 6e 64 65 78 2a 2c    Parse*,Index*,
2ebb0 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 2a 2a  UnpackedRecord**
2ebc0 2c 45 78 70 72 2a 2c 69 6e 74 2c 69 6e 74 2c 69  ,Expr*,int,int,i
2ebd0 6e 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  nt*);.int sqlite
2ebe0 33 53 74 61 74 34 56 61 6c 75 65 46 72 6f 6d 45  3Stat4ValueFromE
2ebf0 78 70 72 28 50 61 72 73 65 2a 2c 20 45 78 70 72  xpr(Parse*, Expr
2ec00 2a 2c 20 75 38 2c 20 73 71 6c 69 74 65 33 5f 76  *, u8, sqlite3_v
2ec10 61 6c 75 65 2a 2a 29 3b 0a 76 6f 69 64 20 73 71  alue**);.void sq
2ec20 6c 69 74 65 33 53 74 61 74 34 50 72 6f 62 65 46  lite3Stat4ProbeF
2ec30 72 65 65 28 55 6e 70 61 63 6b 65 64 52 65 63 6f  ree(UnpackedReco
2ec40 72 64 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  rd*);.int sqlite
2ec50 33 53 74 61 74 34 43 6f 6c 75 6d 6e 28 73 71 6c  3Stat4Column(sql
2ec60 69 74 65 33 2a 2c 20 63 6f 6e 73 74 20 76 6f 69  ite3*, const voi
2ec70 64 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 73 71  d*, int, int, sq
2ec80 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2a 29 3b 0a  lite3_value**);.
2ec90 63 68 61 72 20 73 71 6c 69 74 65 33 49 6e 64 65  char sqlite3Inde
2eca0 78 43 6f 6c 75 6d 6e 41 66 66 69 6e 69 74 79 28  xColumnAffinity(
2ecb0 73 71 6c 69 74 65 33 2a 2c 20 49 6e 64 65 78 2a  sqlite3*, Index*
2ecc0 2c 20 69 6e 74 29 3b 0a 23 65 6e 64 69 66 0a 0a  , int);.#endif..
2ecd0 2f 2a 0a 2a 2a 20 54 68 65 20 69 6e 74 65 72 66  /*.** The interf
2ece0 61 63 65 20 74 6f 20 74 68 65 20 4c 45 4d 4f 4e  ace to the LEMON
2ecf0 2d 67 65 6e 65 72 61 74 65 64 20 70 61 72 73 65  -generated parse
2ed00 72 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c  r.*/.#ifndef SQL
2ed10 49 54 45 5f 41 4d 41 4c 47 41 4d 41 54 49 4f 4e  ITE_AMALGAMATION
2ed20 0a 20 20 76 6f 69 64 20 2a 73 71 6c 69 74 65 33  .  void *sqlite3
2ed30 50 61 72 73 65 72 41 6c 6c 6f 63 28 76 6f 69 64  ParserAlloc(void
2ed40 2a 28 2a 29 28 75 36 34 29 2c 20 50 61 72 73 65  *(*)(u64), Parse
2ed50 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  *);.  void sqlit
2ed60 65 33 50 61 72 73 65 72 46 72 65 65 28 76 6f 69  e3ParserFree(voi
2ed70 64 2a 2c 20 76 6f 69 64 28 2a 29 28 76 6f 69 64  d*, void(*)(void
2ed80 2a 29 29 3b 0a 23 65 6e 64 69 66 0a 76 6f 69 64  *));.#endif.void
2ed90 20 73 71 6c 69 74 65 33 50 61 72 73 65 72 28 76   sqlite3Parser(v
2eda0 6f 69 64 2a 2c 20 69 6e 74 2c 20 54 6f 6b 65 6e  oid*, int, Token
2edb0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 50 61  );.int sqlite3Pa
2edc0 72 73 65 72 46 61 6c 6c 62 61 63 6b 28 69 6e 74  rserFallback(int
2edd0 29 3b 0a 23 69 66 64 65 66 20 59 59 54 52 41 43  );.#ifdef YYTRAC
2ede0 4b 4d 41 58 53 54 41 43 4b 44 45 50 54 48 0a 20  KMAXSTACKDEPTH. 
2edf0 20 69 6e 74 20 73 71 6c 69 74 65 33 50 61 72 73   int sqlite3Pars
2ee00 65 72 53 74 61 63 6b 50 65 61 6b 28 76 6f 69 64  erStackPeak(void
2ee10 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 76 6f 69 64  *);.#endif..void
2ee20 20 73 71 6c 69 74 65 33 41 75 74 6f 4c 6f 61 64   sqlite3AutoLoad
2ee30 45 78 74 65 6e 73 69 6f 6e 73 28 73 71 6c 69 74  Extensions(sqlit
2ee40 65 33 2a 29 3b 0a 23 69 66 6e 64 65 66 20 53 51  e3*);.#ifndef SQ
2ee50 4c 49 54 45 5f 4f 4d 49 54 5f 4c 4f 41 44 5f 45  LITE_OMIT_LOAD_E
2ee60 58 54 45 4e 53 49 4f 4e 0a 20 20 76 6f 69 64 20  XTENSION.  void 
2ee70 73 71 6c 69 74 65 33 43 6c 6f 73 65 45 78 74 65  sqlite3CloseExte
2ee80 6e 73 69 6f 6e 73 28 73 71 6c 69 74 65 33 2a 29  nsions(sqlite3*)
2ee90 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65  ;.#else.# define
2eea0 20 73 71 6c 69 74 65 33 43 6c 6f 73 65 45 78 74   sqlite3CloseExt
2eeb0 65 6e 73 69 6f 6e 73 28 58 29 0a 23 65 6e 64 69  ensions(X).#endi
2eec0 66 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  f..#ifndef SQLIT
2eed0 45 5f 4f 4d 49 54 5f 53 48 41 52 45 44 5f 43 41  E_OMIT_SHARED_CA
2eee0 43 48 45 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  CHE.  void sqlit
2eef0 65 33 54 61 62 6c 65 4c 6f 63 6b 28 50 61 72 73  e3TableLock(Pars
2ef00 65 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 75  e *, int, int, u
2ef10 38 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 29  8, const char *)
2ef20 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e  ;.#else.  #defin
2ef30 65 20 73 71 6c 69 74 65 33 54 61 62 6c 65 4c 6f  e sqlite3TableLo
2ef40 63 6b 28 76 2c 77 2c 78 2c 79 2c 7a 29 0a 23 65  ck(v,w,x,y,z).#e
2ef50 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c  ndif..#ifdef SQL
2ef60 49 54 45 5f 54 45 53 54 0a 20 20 69 6e 74 20 73  ITE_TEST.  int s
2ef70 71 6c 69 74 65 33 55 74 66 38 54 6f 38 28 75 6e  qlite3Utf8To8(un
2ef80 73 69 67 6e 65 64 20 63 68 61 72 2a 29 3b 0a 23  signed char*);.#
2ef90 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51  endif..#ifdef SQ
2efa0 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
2efb0 4c 54 41 42 4c 45 0a 23 20 20 64 65 66 69 6e 65  LTABLE.#  define
2efc0 20 73 71 6c 69 74 65 33 56 74 61 62 43 6c 65 61   sqlite3VtabClea
2efd0 72 28 59 29 0a 23 20 20 64 65 66 69 6e 65 20 73  r(Y).#  define s
2efe0 71 6c 69 74 65 33 56 74 61 62 53 79 6e 63 28 58  qlite3VtabSync(X
2eff0 2c 59 29 20 53 51 4c 49 54 45 5f 4f 4b 0a 23 20  ,Y) SQLITE_OK.# 
2f000 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56   define sqlite3V
2f010 74 61 62 52 6f 6c 6c 62 61 63 6b 28 58 29 0a 23  tabRollback(X).#
2f020 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33    define sqlite3
2f030 56 74 61 62 43 6f 6d 6d 69 74 28 58 29 0a 23 20  VtabCommit(X).# 
2f040 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56   define sqlite3V
2f050 74 61 62 49 6e 53 79 6e 63 28 64 62 29 20 30 0a  tabInSync(db) 0.
2f060 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  #  define sqlite
2f070 33 56 74 61 62 4c 6f 63 6b 28 58 29 0a 23 20 20  3VtabLock(X).#  
2f080 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74  define sqlite3Vt
2f090 61 62 55 6e 6c 6f 63 6b 28 58 29 0a 23 20 20 64  abUnlock(X).#  d
2f0a0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61  efine sqlite3Vta
2f0b0 62 55 6e 6c 6f 63 6b 4c 69 73 74 28 58 29 0a 23  bUnlockList(X).#
2f0c0 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33    define sqlite3
2f0d0 56 74 61 62 53 61 76 65 70 6f 69 6e 74 28 58 2c  VtabSavepoint(X,
2f0e0 20 59 2c 20 5a 29 20 53 51 4c 49 54 45 5f 4f 4b   Y, Z) SQLITE_OK
2f0f0 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74  .#  define sqlit
2f100 65 33 47 65 74 56 54 61 62 6c 65 28 58 2c 59 29  e3GetVTable(X,Y)
2f110 20 20 28 28 56 54 61 62 6c 65 2a 29 30 29 0a 23    ((VTable*)0).#
2f120 65 6c 73 65 0a 20 20 20 76 6f 69 64 20 73 71 6c  else.   void sql
2f130 69 74 65 33 56 74 61 62 43 6c 65 61 72 28 73 71  ite3VtabClear(sq
2f140 6c 69 74 65 33 20 2a 64 62 2c 20 54 61 62 6c 65  lite3 *db, Table
2f150 2a 29 3b 0a 20 20 20 76 6f 69 64 20 73 71 6c 69  *);.   void sqli
2f160 74 65 33 56 74 61 62 44 69 73 63 6f 6e 6e 65 63  te3VtabDisconnec
2f170 74 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 54  t(sqlite3 *db, T
2f180 61 62 6c 65 20 2a 70 29 3b 0a 20 20 20 69 6e 74  able *p);.   int
2f190 20 73 71 6c 69 74 65 33 56 74 61 62 53 79 6e 63   sqlite3VtabSync
2f1a0 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 56 64  (sqlite3 *db, Vd
2f1b0 62 65 2a 29 3b 0a 20 20 20 69 6e 74 20 73 71 6c  be*);.   int sql
2f1c0 69 74 65 33 56 74 61 62 52 6f 6c 6c 62 61 63 6b  ite3VtabRollback
2f1d0 28 73 71 6c 69 74 65 33 20 2a 64 62 29 3b 0a 20  (sqlite3 *db);. 
2f1e0 20 20 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61    int sqlite3Vta
2f1f0 62 43 6f 6d 6d 69 74 28 73 71 6c 69 74 65 33 20  bCommit(sqlite3 
2f200 2a 64 62 29 3b 0a 20 20 20 76 6f 69 64 20 73 71  *db);.   void sq
2f210 6c 69 74 65 33 56 74 61 62 4c 6f 63 6b 28 56 54  lite3VtabLock(VT
2f220 61 62 6c 65 20 2a 29 3b 0a 20 20 20 76 6f 69 64  able *);.   void
2f230 20 73 71 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f   sqlite3VtabUnlo
2f240 63 6b 28 56 54 61 62 6c 65 20 2a 29 3b 0a 20 20  ck(VTable *);.  
2f250 20 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61   void sqlite3Vta
2f260 62 55 6e 6c 6f 63 6b 4c 69 73 74 28 73 71 6c 69  bUnlockList(sqli
2f270 74 65 33 2a 29 3b 0a 20 20 20 69 6e 74 20 73 71  te3*);.   int sq
2f280 6c 69 74 65 33 56 74 61 62 53 61 76 65 70 6f 69  lite3VtabSavepoi
2f290 6e 74 28 73 71 6c 69 74 65 33 20 2a 2c 20 69 6e  nt(sqlite3 *, in
2f2a0 74 2c 20 69 6e 74 29 3b 0a 20 20 20 76 6f 69 64  t, int);.   void
2f2b0 20 73 71 6c 69 74 65 33 56 74 61 62 49 6d 70 6f   sqlite3VtabImpo
2f2c0 72 74 45 72 72 6d 73 67 28 56 64 62 65 2a 2c 20  rtErrmsg(Vdbe*, 
2f2d0 73 71 6c 69 74 65 33 5f 76 74 61 62 2a 29 3b 0a  sqlite3_vtab*);.
2f2e0 20 20 20 56 54 61 62 6c 65 20 2a 73 71 6c 69 74     VTable *sqlit
2f2f0 65 33 47 65 74 56 54 61 62 6c 65 28 73 71 6c 69  e3GetVTable(sqli
2f300 74 65 33 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a 20  te3*, Table*);. 
2f310 20 20 4d 6f 64 75 6c 65 20 2a 73 71 6c 69 74 65    Module *sqlite
2f320 33 56 74 61 62 43 72 65 61 74 65 4d 6f 64 75 6c  3VtabCreateModul
2f330 65 28 0a 20 20 20 20 20 73 71 6c 69 74 65 33 2a  e(.     sqlite3*
2f340 2c 0a 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61  ,.     const cha
2f350 72 2a 2c 0a 20 20 20 20 20 63 6f 6e 73 74 20 73  r*,.     const s
2f360 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 2a 2c 0a  qlite3_module*,.
2f370 20 20 20 20 20 76 6f 69 64 2a 2c 0a 20 20 20 20       void*,.    
2f380 20 76 6f 69 64 28 2a 29 28 76 6f 69 64 2a 29 0a   void(*)(void*).
2f390 20 20 20 29 3b 0a 23 20 20 64 65 66 69 6e 65 20     );.#  define 
2f3a0 73 71 6c 69 74 65 33 56 74 61 62 49 6e 53 79 6e  sqlite3VtabInSyn
2f3b0 63 28 64 62 29 20 28 28 64 62 29 2d 3e 6e 56 54  c(db) ((db)->nVT
2f3c0 72 61 6e 73 3e 30 20 26 26 20 28 64 62 29 2d 3e  rans>0 && (db)->
2f3d0 61 56 54 72 61 6e 73 3d 3d 30 29 0a 23 65 6e 64  aVTrans==0).#end
2f3e0 69 66 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 74  if.int sqlite3Vt
2f3f0 61 62 45 70 6f 6e 79 6d 6f 75 73 54 61 62 6c 65  abEponymousTable
2f400 49 6e 69 74 28 50 61 72 73 65 2a 2c 4d 6f 64 75  Init(Parse*,Modu
2f410 6c 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  le*);.void sqlit
2f420 65 33 56 74 61 62 45 70 6f 6e 79 6d 6f 75 73 54  e3VtabEponymousT
2f430 61 62 6c 65 43 6c 65 61 72 28 73 71 6c 69 74 65  ableClear(sqlite
2f440 33 2a 2c 4d 6f 64 75 6c 65 2a 29 3b 0a 76 6f 69  3*,Module*);.voi
2f450 64 20 73 71 6c 69 74 65 33 56 74 61 62 4d 61 6b  d sqlite3VtabMak
2f460 65 57 72 69 74 61 62 6c 65 28 50 61 72 73 65 2a  eWritable(Parse*
2f470 2c 54 61 62 6c 65 2a 29 3b 0a 76 6f 69 64 20 73  ,Table*);.void s
2f480 71 6c 69 74 65 33 56 74 61 62 42 65 67 69 6e 50  qlite3VtabBeginP
2f490 61 72 73 65 28 50 61 72 73 65 2a 2c 20 54 6f 6b  arse(Parse*, Tok
2f4a0 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b  en*, Token*, Tok
2f4b0 65 6e 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  en*, int);.void 
2f4c0 73 71 6c 69 74 65 33 56 74 61 62 46 69 6e 69 73  sqlite3VtabFinis
2f4d0 68 50 61 72 73 65 28 50 61 72 73 65 2a 2c 20 54  hParse(Parse*, T
2f4e0 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  oken*);.void sql
2f4f0 69 74 65 33 56 74 61 62 41 72 67 49 6e 69 74 28  ite3VtabArgInit(
2f500 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71  Parse*);.void sq
2f510 6c 69 74 65 33 56 74 61 62 41 72 67 45 78 74 65  lite3VtabArgExte
2f520 6e 64 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e  nd(Parse*, Token
2f530 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56  *);.int sqlite3V
2f540 74 61 62 43 61 6c 6c 43 72 65 61 74 65 28 73 71  tabCallCreate(sq
2f550 6c 69 74 65 33 2a 2c 20 69 6e 74 2c 20 63 6f 6e  lite3*, int, con
2f560 73 74 20 63 68 61 72 20 2a 2c 20 63 68 61 72 20  st char *, char 
2f570 2a 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  **);.int sqlite3
2f580 56 74 61 62 43 61 6c 6c 43 6f 6e 6e 65 63 74 28  VtabCallConnect(
2f590 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 29 3b  Parse*, Table*);
2f5a0 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62  .int sqlite3Vtab
2f5b0 43 61 6c 6c 44 65 73 74 72 6f 79 28 73 71 6c 69  CallDestroy(sqli
2f5c0 74 65 33 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74  te3*, int, const
2f5d0 20 63 68 61 72 20 2a 29 3b 0a 69 6e 74 20 73 71   char *);.int sq
2f5e0 6c 69 74 65 33 56 74 61 62 42 65 67 69 6e 28 73  lite3VtabBegin(s
2f5f0 71 6c 69 74 65 33 20 2a 2c 20 56 54 61 62 6c 65  qlite3 *, VTable
2f600 20 2a 29 3b 0a 46 75 6e 63 44 65 66 20 2a 73 71   *);.FuncDef *sq
2f610 6c 69 74 65 33 56 74 61 62 4f 76 65 72 6c 6f 61  lite3VtabOverloa
2f620 64 46 75 6e 63 74 69 6f 6e 28 73 71 6c 69 74 65  dFunction(sqlite
2f630 33 20 2a 2c 46 75 6e 63 44 65 66 2a 2c 20 69 6e  3 *,FuncDef*, in
2f640 74 20 6e 41 72 67 2c 20 45 78 70 72 2a 29 3b 0a  t nArg, Expr*);.
2f650 73 71 6c 69 74 65 33 5f 69 6e 74 36 34 20 73 71  sqlite3_int64 sq
2f660 6c 69 74 65 33 53 74 6d 74 43 75 72 72 65 6e 74  lite3StmtCurrent
2f670 54 69 6d 65 28 73 71 6c 69 74 65 33 5f 63 6f 6e  Time(sqlite3_con
2f680 74 65 78 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  text*);.int sqli
2f690 74 65 33 56 64 62 65 50 61 72 61 6d 65 74 65 72  te3VdbeParameter
2f6a0 49 6e 64 65 78 28 56 64 62 65 2a 2c 20 63 6f 6e  Index(Vdbe*, con
2f6b0 73 74 20 63 68 61 72 2a 2c 20 69 6e 74 29 3b 0a  st char*, int);.
2f6c0 69 6e 74 20 73 71 6c 69 74 65 33 54 72 61 6e 73  int sqlite3Trans
2f6d0 66 65 72 42 69 6e 64 69 6e 67 73 28 73 71 6c 69  ferBindings(sqli
2f6e0 74 65 33 5f 73 74 6d 74 20 2a 2c 20 73 71 6c 69  te3_stmt *, sqli
2f6f0 74 65 33 5f 73 74 6d 74 20 2a 29 3b 0a 76 6f 69  te3_stmt *);.voi
2f700 64 20 73 71 6c 69 74 65 33 50 61 72 73 65 72 52  d sqlite3ParserR
2f710 65 73 65 74 28 50 61 72 73 65 2a 29 3b 0a 23 69  eset(Parse*);.#i
2f720 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  fdef SQLITE_ENAB
2f730 4c 45 5f 4e 4f 52 4d 41 4c 49 5a 45 0a 63 68 61  LE_NORMALIZE.cha
2f740 72 20 2a 73 71 6c 69 74 65 33 4e 6f 72 6d 61 6c  r *sqlite3Normal
2f750 69 7a 65 28 56 64 62 65 2a 2c 20 63 6f 6e 73 74  ize(Vdbe*, const
2f760 20 63 68 61 72 2a 29 3b 0a 23 65 6e 64 69 66 0a   char*);.#endif.
2f770 69 6e 74 20 73 71 6c 69 74 65 33 52 65 70 72 65  int sqlite3Repre
2f780 70 61 72 65 28 56 64 62 65 2a 29 3b 0a 76 6f 69  pare(Vdbe*);.voi
2f790 64 20 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73  d sqlite3ExprLis
2f7a0 74 43 68 65 63 6b 4c 65 6e 67 74 68 28 50 61 72  tCheckLength(Par
2f7b0 73 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20  se*, ExprList*, 
2f7c0 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 43 6f  const char*);.Co
2f7d0 6c 6c 53 65 71 20 2a 73 71 6c 69 74 65 33 42 69  llSeq *sqlite3Bi
2f7e0 6e 61 72 79 43 6f 6d 70 61 72 65 43 6f 6c 6c 53  naryCompareCollS
2f7f0 65 71 28 50 61 72 73 65 20 2a 2c 20 45 78 70 72  eq(Parse *, Expr
2f800 20 2a 2c 20 45 78 70 72 20 2a 29 3b 0a 69 6e 74   *, Expr *);.int
2f810 20 73 71 6c 69 74 65 33 54 65 6d 70 49 6e 4d 65   sqlite3TempInMe
2f820 6d 6f 72 79 28 63 6f 6e 73 74 20 73 71 6c 69 74  mory(const sqlit
2f830 65 33 2a 29 3b 0a 63 6f 6e 73 74 20 63 68 61 72  e3*);.const char
2f840 20 2a 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c   *sqlite3Journal
2f850 4d 6f 64 65 6e 61 6d 65 28 69 6e 74 29 3b 0a 23  Modename(int);.#
2f860 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
2f870 49 54 5f 57 41 4c 0a 20 20 69 6e 74 20 73 71 6c  IT_WAL.  int sql
2f880 69 74 65 33 43 68 65 63 6b 70 6f 69 6e 74 28 73  ite3Checkpoint(s
2f890 71 6c 69 74 65 33 2a 2c 20 69 6e 74 2c 20 69 6e  qlite3*, int, in
2f8a0 74 2c 20 69 6e 74 2a 2c 20 69 6e 74 2a 29 3b 0a  t, int*, int*);.
2f8b0 20 20 69 6e 74 20 73 71 6c 69 74 65 33 57 61 6c    int sqlite3Wal
2f8c0 44 65 66 61 75 6c 74 48 6f 6f 6b 28 76 6f 69 64  DefaultHook(void
2f8d0 2a 2c 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74  *,sqlite3*,const
2f8e0 20 63 68 61 72 2a 2c 69 6e 74 29 3b 0a 23 65 6e   char*,int);.#en
2f8f0 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  dif.#ifndef SQLI
2f900 54 45 5f 4f 4d 49 54 5f 43 54 45 0a 20 20 57 69  TE_OMIT_CTE.  Wi
2f910 74 68 20 2a 73 71 6c 69 74 65 33 57 69 74 68 41  th *sqlite3WithA
2f920 64 64 28 50 61 72 73 65 2a 2c 57 69 74 68 2a 2c  dd(Parse*,With*,
2f930 54 6f 6b 65 6e 2a 2c 45 78 70 72 4c 69 73 74 2a  Token*,ExprList*
2f940 2c 53 65 6c 65 63 74 2a 29 3b 0a 20 20 76 6f 69  ,Select*);.  voi
2f950 64 20 73 71 6c 69 74 65 33 57 69 74 68 44 65 6c  d sqlite3WithDel
2f960 65 74 65 28 73 71 6c 69 74 65 33 2a 2c 57 69 74  ete(sqlite3*,Wit
2f970 68 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69  h*);.  void sqli
2f980 74 65 33 57 69 74 68 50 75 73 68 28 50 61 72 73  te3WithPush(Pars
2f990 65 2a 2c 20 57 69 74 68 2a 2c 20 75 38 29 3b 0a  e*, With*, u8);.
2f9a0 23 65 6c 73 65 0a 23 64 65 66 69 6e 65 20 73 71  #else.#define sq
2f9b0 6c 69 74 65 33 57 69 74 68 50 75 73 68 28 78 2c  lite3WithPush(x,
2f9c0 79 2c 7a 29 0a 23 64 65 66 69 6e 65 20 73 71 6c  y,z).#define sql
2f9d0 69 74 65 33 57 69 74 68 44 65 6c 65 74 65 28 78  ite3WithDelete(x
2f9e0 2c 79 29 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64  ,y).#endif.#ifnd
2f9f0 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55  ef SQLITE_OMIT_U
2fa00 50 53 45 52 54 0a 20 20 55 70 73 65 72 74 20 2a  PSERT.  Upsert *
2fa10 73 71 6c 69 74 65 33 55 70 73 65 72 74 4e 65 77  sqlite3UpsertNew
2fa20 28 73 71 6c 69 74 65 33 2a 2c 45 78 70 72 4c 69  (sqlite3*,ExprLi
2fa30 73 74 2a 2c 45 78 70 72 2a 2c 45 78 70 72 4c 69  st*,Expr*,ExprLi
2fa40 73 74 2a 2c 45 78 70 72 2a 29 3b 0a 20 20 76 6f  st*,Expr*);.  vo
2fa50 69 64 20 73 71 6c 69 74 65 33 55 70 73 65 72 74  id sqlite3Upsert
2fa60 44 65 6c 65 74 65 28 73 71 6c 69 74 65 33 2a 2c  Delete(sqlite3*,
2fa70 55 70 73 65 72 74 2a 29 3b 0a 20 20 55 70 73 65  Upsert*);.  Upse
2fa80 72 74 20 2a 73 71 6c 69 74 65 33 55 70 73 65 72  rt *sqlite3Upser
2fa90 74 44 75 70 28 73 71 6c 69 74 65 33 2a 2c 55 70  tDup(sqlite3*,Up
2faa0 73 65 72 74 2a 29 3b 0a 20 20 69 6e 74 20 73 71  sert*);.  int sq
2fab0 6c 69 74 65 33 55 70 73 65 72 74 41 6e 61 6c 79  lite3UpsertAnaly
2fac0 7a 65 54 61 72 67 65 74 28 50 61 72 73 65 2a 2c  zeTarget(Parse*,
2fad0 53 72 63 4c 69 73 74 2a 2c 55 70 73 65 72 74 2a  SrcList*,Upsert*
2fae0 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
2faf0 33 55 70 73 65 72 74 44 6f 55 70 64 61 74 65 28  3UpsertDoUpdate(
2fb00 50 61 72 73 65 2a 2c 55 70 73 65 72 74 2a 2c 54  Parse*,Upsert*,T
2fb10 61 62 6c 65 2a 2c 49 6e 64 65 78 2a 2c 69 6e 74  able*,Index*,int
2fb20 29 3b 0a 23 65 6c 73 65 0a 23 64 65 66 69 6e 65  );.#else.#define
2fb30 20 73 71 6c 69 74 65 33 55 70 73 65 72 74 4e 65   sqlite3UpsertNe
2fb40 77 28 76 2c 77 2c 78 2c 79 2c 7a 29 20 28 28 55  w(v,w,x,y,z) ((U
2fb50 70 73 65 72 74 2a 29 30 29 0a 23 64 65 66 69 6e  psert*)0).#defin
2fb60 65 20 73 71 6c 69 74 65 33 55 70 73 65 72 74 44  e sqlite3UpsertD
2fb70 65 6c 65 74 65 28 78 2c 79 29 0a 23 64 65 66 69  elete(x,y).#defi
2fb80 6e 65 20 73 71 6c 69 74 65 33 55 70 73 65 72 74  ne sqlite3Upsert
2fb90 44 75 70 28 78 2c 79 29 20 20 20 20 20 20 20 28  Dup(x,y)       (
2fba0 28 55 70 73 65 72 74 2a 29 30 29 0a 23 65 6e 64  (Upsert*)0).#end
2fbb0 69 66 0a 0a 0a 2f 2a 20 44 65 63 6c 61 72 61 74  if.../* Declarat
2fbc0 69 6f 6e 73 20 66 6f 72 20 66 75 6e 63 74 69 6f  ions for functio
2fbd0 6e 73 20 69 6e 20 66 6b 65 79 2e 63 2e 20 41 6c  ns in fkey.c. Al
2fbe0 6c 20 6f 66 20 74 68 65 73 65 20 61 72 65 20 72  l of these are r
2fbf0 65 70 6c 61 63 65 64 20 62 79 0a 2a 2a 20 6e 6f  eplaced by.** no
2fc00 2d 6f 70 20 6d 61 63 72 6f 73 20 69 66 20 4f 4d  -op macros if OM
2fc10 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 20 69  IT_FOREIGN_KEY i
2fc20 73 20 64 65 66 69 6e 65 64 2e 20 49 6e 20 74 68  s defined. In th
2fc30 69 73 20 63 61 73 65 20 6e 6f 20 66 6f 72 65 69  is case no forei
2fc40 67 6e 0a 2a 2a 20 6b 65 79 20 66 75 6e 63 74 69  gn.** key functi
2fc50 6f 6e 61 6c 69 74 79 20 69 73 20 61 76 61 69 6c  onality is avail
2fc60 61 62 6c 65 2e 20 49 66 20 4f 4d 49 54 5f 54 52  able. If OMIT_TR
2fc70 49 47 47 45 52 20 69 73 20 64 65 66 69 6e 65 64  IGGER is defined
2fc80 20 62 75 74 0a 2a 2a 20 4f 4d 49 54 5f 46 4f 52   but.** OMIT_FOR
2fc90 45 49 47 4e 5f 4b 45 59 20 69 73 20 6e 6f 74 2c  EIGN_KEY is not,
2fca0 20 6f 6e 6c 79 20 73 6f 6d 65 20 6f 66 20 74 68   only some of th
2fcb0 65 20 66 75 6e 63 74 69 6f 6e 73 20 61 72 65 20  e functions are 
2fcc0 6e 6f 2d 6f 70 65 64 2e 20 49 6e 0a 2a 2a 20 74  no-oped. In.** t
2fcd0 68 69 73 20 63 61 73 65 20 66 6f 72 65 69 67 6e  his case foreign
2fce0 20 6b 65 79 73 20 61 72 65 20 70 61 72 73 65 64   keys are parsed
2fcf0 2c 20 62 75 74 20 6e 6f 20 6f 74 68 65 72 20 66  , but no other f
2fd00 75 6e 63 74 69 6f 6e 61 6c 69 74 79 20 69 73 0a  unctionality is.
2fd10 2a 2a 20 70 72 6f 76 69 64 65 64 20 28 65 6e 66  ** provided (enf
2fd20 6f 72 63 65 6d 65 6e 74 20 6f 66 20 46 4b 20 63  orcement of FK c
2fd30 6f 6e 73 74 72 61 69 6e 74 73 20 72 65 71 75 69  onstraints requi
2fd40 72 65 73 20 74 68 65 20 74 72 69 67 67 65 72 73  res the triggers
2fd50 20 73 75 62 2d 73 79 73 74 65 6d 29 2e 0a 2a 2f   sub-system)..*/
2fd60 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51  .#if !defined(SQ
2fd70 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49 47  LITE_OMIT_FOREIG
2fd80 4e 5f 4b 45 59 29 20 26 26 20 21 64 65 66 69 6e  N_KEY) && !defin
2fd90 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54  ed(SQLITE_OMIT_T
2fda0 52 49 47 47 45 52 29 0a 20 20 76 6f 69 64 20 73  RIGGER).  void s
2fdb0 71 6c 69 74 65 33 46 6b 43 68 65 63 6b 28 50 61  qlite3FkCheck(Pa
2fdc0 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e  rse*, Table*, in
2fdd0 74 2c 20 69 6e 74 2c 20 69 6e 74 2a 2c 20 69 6e  t, int, int*, in
2fde0 74 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  t);.  void sqlit
2fdf0 65 33 46 6b 44 72 6f 70 54 61 62 6c 65 28 50 61  e3FkDropTable(Pa
2fe00 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 20 2a 2c  rse*, SrcList *,
2fe10 20 54 61 62 6c 65 2a 29 3b 0a 20 20 76 6f 69 64   Table*);.  void
2fe20 20 73 71 6c 69 74 65 33 46 6b 41 63 74 69 6f 6e   sqlite3FkAction
2fe30 73 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a  s(Parse*, Table*
2fe40 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74  , ExprList*, int
2fe50 2c 20 69 6e 74 2a 2c 20 69 6e 74 29 3b 0a 20 20  , int*, int);.  
2fe60 69 6e 74 20 73 71 6c 69 74 65 33 46 6b 52 65 71  int sqlite3FkReq
2fe70 75 69 72 65 64 28 50 61 72 73 65 2a 2c 20 54 61  uired(Parse*, Ta
2fe80 62 6c 65 2a 2c 20 69 6e 74 2a 2c 20 69 6e 74 29  ble*, int*, int)
2fe90 3b 0a 20 20 75 33 32 20 73 71 6c 69 74 65 33 46  ;.  u32 sqlite3F
2fea0 6b 4f 6c 64 6d 61 73 6b 28 50 61 72 73 65 2a 2c  kOldmask(Parse*,
2feb0 20 54 61 62 6c 65 2a 29 3b 0a 20 20 46 4b 65 79   Table*);.  FKey
2fec0 20 2a 73 71 6c 69 74 65 33 46 6b 52 65 66 65 72   *sqlite3FkRefer
2fed0 65 6e 63 65 73 28 54 61 62 6c 65 20 2a 29 3b 0a  ences(Table *);.
2fee0 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20  #else.  #define 
2fef0 73 71 6c 69 74 65 33 46 6b 41 63 74 69 6f 6e 73  sqlite3FkActions
2ff00 28 61 2c 62 2c 63 2c 64 2c 65 2c 66 29 0a 20 20  (a,b,c,d,e,f).  
2ff10 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46  #define sqlite3F
2ff20 6b 43 68 65 63 6b 28 61 2c 62 2c 63 2c 64 2c 65  kCheck(a,b,c,d,e
2ff30 2c 66 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71  ,f).  #define sq
2ff40 6c 69 74 65 33 46 6b 44 72 6f 70 54 61 62 6c 65  lite3FkDropTable
2ff50 28 61 2c 62 2c 63 29 0a 20 20 23 64 65 66 69 6e  (a,b,c).  #defin
2ff60 65 20 73 71 6c 69 74 65 33 46 6b 4f 6c 64 6d 61  e sqlite3FkOldma
2ff70 73 6b 28 61 2c 62 29 20 20 20 20 20 20 20 20 20  sk(a,b)         
2ff80 30 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69  0.  #define sqli
2ff90 74 65 33 46 6b 52 65 71 75 69 72 65 64 28 61 2c  te3FkRequired(a,
2ffa0 62 2c 63 2c 64 29 20 20 20 20 30 0a 20 20 23 64  b,c,d)    0.  #d
2ffb0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 52  efine sqlite3FkR
2ffc0 65 66 65 72 65 6e 63 65 73 28 61 29 20 20 20 20  eferences(a)    
2ffd0 20 20 20 20 30 0a 23 65 6e 64 69 66 0a 23 69 66      0.#endif.#if
2ffe0 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
2fff0 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 0a 20 20 76  _FOREIGN_KEY.  v
30000 6f 69 64 20 73 71 6c 69 74 65 33 46 6b 44 65 6c  oid sqlite3FkDel
30010 65 74 65 28 73 71 6c 69 74 65 33 20 2a 2c 20 54  ete(sqlite3 *, T
30020 61 62 6c 65 2a 29 3b 0a 20 20 69 6e 74 20 73 71  able*);.  int sq
30030 6c 69 74 65 33 46 6b 4c 6f 63 61 74 65 49 6e 64  lite3FkLocateInd
30040 65 78 28 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a  ex(Parse*,Table*
30050 2c 46 4b 65 79 2a 2c 49 6e 64 65 78 2a 2a 2c 69  ,FKey*,Index**,i
30060 6e 74 2a 2a 29 3b 0a 23 65 6c 73 65 0a 20 20 23  nt**);.#else.  #
30070 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46 6b  define sqlite3Fk
30080 44 65 6c 65 74 65 28 61 2c 62 29 0a 20 20 23 64  Delete(a,b).  #d
30090 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 4c  efine sqlite3FkL
300a0 6f 63 61 74 65 49 6e 64 65 78 28 61 2c 62 2c 63  ocateIndex(a,b,c
300b0 2c 64 2c 65 29 0a 23 65 6e 64 69 66 0a 0a 0a 2f  ,d,e).#endif.../
300c0 2a 0a 2a 2a 20 41 76 61 69 6c 61 62 6c 65 20 66  *.** Available f
300d0 61 75 6c 74 20 69 6e 6a 65 63 74 6f 72 73 2e 20  ault injectors. 
300e0 20 53 68 6f 75 6c 64 20 62 65 20 6e 75 6d 62 65   Should be numbe
300f0 72 65 64 20 62 65 67 69 6e 6e 69 6e 67 20 77 69  red beginning wi
30100 74 68 20 30 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  th 0..*/.#define
30110 20 53 51 4c 49 54 45 5f 46 41 55 4c 54 49 4e 4a   SQLITE_FAULTINJ
30120 45 43 54 4f 52 5f 4d 41 4c 4c 4f 43 20 20 20 20  ECTOR_MALLOC    
30130 20 30 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54   0.#define SQLIT
30140 45 5f 46 41 55 4c 54 49 4e 4a 45 43 54 4f 52 5f  E_FAULTINJECTOR_
30150 43 4f 55 4e 54 20 20 20 20 20 20 31 0a 0a 2f 2a  COUNT      1../*
30160 0a 2a 2a 20 54 68 65 20 69 6e 74 65 72 66 61 63  .** The interfac
30170 65 20 74 6f 20 74 68 65 20 63 6f 64 65 20 69 6e  e to the code in
30180 20 66 61 75 6c 74 2e 63 20 75 73 65 64 20 66 6f   fault.c used fo
30190 72 20 69 64 65 6e 74 69 66 79 69 6e 67 20 22 62  r identifying "b
301a0 65 6e 69 67 6e 22 0a 2a 2a 20 6d 61 6c 6c 6f 63  enign".** malloc
301b0 20 66 61 69 6c 75 72 65 73 2e 20 54 68 69 73 20   failures. This 
301c0 69 73 20 6f 6e 6c 79 20 70 72 65 73 65 6e 74 20  is only present 
301d0 69 66 20 53 51 4c 49 54 45 5f 55 4e 54 45 53 54  if SQLITE_UNTEST
301e0 41 42 4c 45 0a 2a 2a 20 69 73 20 6e 6f 74 20 64  ABLE.** is not d
301f0 65 66 69 6e 65 64 2e 0a 2a 2f 0a 23 69 66 6e 64  efined..*/.#ifnd
30200 65 66 20 53 51 4c 49 54 45 5f 55 4e 54 45 53 54  ef SQLITE_UNTEST
30210 41 42 4c 45 0a 20 20 76 6f 69 64 20 73 71 6c 69  ABLE.  void sqli
30220 74 65 33 42 65 67 69 6e 42 65 6e 69 67 6e 4d 61  te3BeginBenignMa
30230 6c 6c 6f 63 28 76 6f 69 64 29 3b 0a 20 20 76 6f  lloc(void);.  vo
30240 69 64 20 73 71 6c 69 74 65 33 45 6e 64 42 65 6e  id sqlite3EndBen
30250 69 67 6e 4d 61 6c 6c 6f 63 28 76 6f 69 64 29 3b  ignMalloc(void);
30260 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65  .#else.  #define
30270 20 73 71 6c 69 74 65 33 42 65 67 69 6e 42 65 6e   sqlite3BeginBen
30280 69 67 6e 4d 61 6c 6c 6f 63 28 29 0a 20 20 23 64  ignMalloc().  #d
30290 65 66 69 6e 65 20 73 71 6c 69 74 65 33 45 6e 64  efine sqlite3End
302a0 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28 29 0a 23  BenignMalloc().#
302b0 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c  endif../*.** All
302c0 6f 77 65 64 20 72 65 74 75 72 6e 20 76 61 6c 75  owed return valu
302d0 65 73 20 66 72 6f 6d 20 73 71 6c 69 74 65 33 46  es from sqlite3F
302e0 69 6e 64 49 6e 49 6e 64 65 78 28 29 0a 2a 2f 0a  indInIndex().*/.
302f0 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58  #define IN_INDEX
30300 5f 52 4f 57 49 44 20 20 20 20 20 20 20 20 31 20  _ROWID        1 
30310 20 20 2f 2a 20 53 65 61 72 63 68 20 74 68 65 20    /* Search the 
30320 72 6f 77 69 64 20 6f 66 20 74 68 65 20 74 61 62  rowid of the tab
30330 6c 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e  le */.#define IN
30340 5f 49 4e 44 45 58 5f 45 50 48 20 20 20 20 20 20  _INDEX_EPH      
30350 20 20 20 20 32 20 20 20 2f 2a 20 53 65 61 72 63      2   /* Searc
30360 68 20 61 6e 20 65 70 68 65 6d 65 72 61 6c 20 62  h an ephemeral b
30370 2d 74 72 65 65 20 2a 2f 0a 23 64 65 66 69 6e 65  -tree */.#define
30380 20 49 4e 5f 49 4e 44 45 58 5f 49 4e 44 45 58 5f   IN_INDEX_INDEX_
30390 41 53 43 20 20 20 20 33 20 20 20 2f 2a 20 45 78  ASC    3   /* Ex
303a0 69 73 74 69 6e 67 20 69 6e 64 65 78 20 41 53 43  isting index ASC
303b0 45 4e 44 49 4e 47 20 2a 2f 0a 23 64 65 66 69 6e  ENDING */.#defin
303c0 65 20 49 4e 5f 49 4e 44 45 58 5f 49 4e 44 45 58  e IN_INDEX_INDEX
303d0 5f 44 45 53 43 20 20 20 34 20 20 20 2f 2a 20 45  _DESC   4   /* E
303e0 78 69 73 74 69 6e 67 20 69 6e 64 65 78 20 44 45  xisting index DE
303f0 53 43 45 4e 44 49 4e 47 20 2a 2f 0a 23 64 65 66  SCENDING */.#def
30400 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 4e 4f 4f  ine IN_INDEX_NOO
30410 50 20 20 20 20 20 20 20 20 20 35 20 20 20 2f 2a  P         5   /*
30420 20 4e 6f 20 74 61 62 6c 65 20 61 76 61 69 6c 61   No table availa
30430 62 6c 65 2e 20 55 73 65 20 63 6f 6d 70 61 72 69  ble. Use compari
30440 73 6f 6e 73 20 2a 2f 0a 2f 2a 0a 2a 2a 20 41 6c  sons */./*.** Al
30450 6c 6f 77 65 64 20 66 6c 61 67 73 20 66 6f 72 20  lowed flags for 
30460 74 68 65 20 33 72 64 20 70 61 72 61 6d 65 74 65  the 3rd paramete
30470 72 20 74 6f 20 73 71 6c 69 74 65 33 46 69 6e 64  r to sqlite3Find
30480 49 6e 49 6e 64 65 78 28 29 2e 0a 2a 2f 0a 23 64  InIndex()..*/.#d
30490 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 4e  efine IN_INDEX_N
304a0 4f 4f 50 5f 4f 4b 20 20 20 20 20 30 78 30 30 30  OOP_OK     0x000
304b0 31 20 20 2f 2a 20 4f 4b 20 74 6f 20 72 65 74 75  1  /* OK to retu
304c0 72 6e 20 49 4e 5f 49 4e 44 45 58 5f 4e 4f 4f 50  rn IN_INDEX_NOOP
304d0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49   */.#define IN_I
304e0 4e 44 45 58 5f 4d 45 4d 42 45 52 53 48 49 50 20  NDEX_MEMBERSHIP 
304f0 20 30 78 30 30 30 32 20 20 2f 2a 20 49 4e 20 6f   0x0002  /* IN o
30500 70 65 72 61 74 6f 72 20 75 73 65 64 20 66 6f 72  perator used for
30510 20 6d 65 6d 62 65 72 73 68 69 70 20 74 65 73 74   membership test
30520 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49   */.#define IN_I
30530 4e 44 45 58 5f 4c 4f 4f 50 20 20 20 20 20 20 20  NDEX_LOOP       
30540 20 30 78 30 30 30 34 20 20 2f 2a 20 49 4e 20 6f   0x0004  /* IN o
30550 70 65 72 61 74 6f 72 20 75 73 65 64 20 61 73 20  perator used as 
30560 61 20 6c 6f 6f 70 20 2a 2f 0a 69 6e 74 20 73 71  a loop */.int sq
30570 6c 69 74 65 33 46 69 6e 64 49 6e 49 6e 64 65 78  lite3FindInIndex
30580 28 50 61 72 73 65 20 2a 2c 20 45 78 70 72 20 2a  (Parse *, Expr *
30590 2c 20 75 33 32 2c 20 69 6e 74 2a 2c 20 69 6e 74  , u32, int*, int
305a0 2a 2c 20 69 6e 74 2a 29 3b 0a 0a 69 6e 74 20 73  *, int*);..int s
305b0 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 4f 70 65  qlite3JournalOpe
305c0 6e 28 73 71 6c 69 74 65 33 5f 76 66 73 20 2a 2c  n(sqlite3_vfs *,
305d0 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20 73   const char *, s
305e0 71 6c 69 74 65 33 5f 66 69 6c 65 20 2a 2c 20 69  qlite3_file *, i
305f0 6e 74 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71  nt, int);.int sq
30600 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 53 69 7a 65  lite3JournalSize
30610 28 73 71 6c 69 74 65 33 5f 76 66 73 20 2a 29 3b  (sqlite3_vfs *);
30620 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c  .#if defined(SQL
30630 49 54 45 5f 45 4e 41 42 4c 45 5f 41 54 4f 4d 49  ITE_ENABLE_ATOMI
30640 43 5f 57 52 49 54 45 29 20 5c 0a 20 7c 7c 20 64  C_WRITE) \. || d
30650 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e  efined(SQLITE_EN
30660 41 42 4c 45 5f 42 41 54 43 48 5f 41 54 4f 4d 49  ABLE_BATCH_ATOMI
30670 43 5f 57 52 49 54 45 29 0a 20 20 69 6e 74 20 73  C_WRITE).  int s
30680 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 43 72 65  qlite3JournalCre
30690 61 74 65 28 73 71 6c 69 74 65 33 5f 66 69 6c 65  ate(sqlite3_file
306a0 20 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 69 6e 74   *);.#endif..int
306b0 20 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 49   sqlite3JournalI
306c0 73 49 6e 4d 65 6d 6f 72 79 28 73 71 6c 69 74 65  sInMemory(sqlite
306d0 33 5f 66 69 6c 65 20 2a 70 29 3b 0a 76 6f 69 64  3_file *p);.void
306e0 20 73 71 6c 69 74 65 33 4d 65 6d 4a 6f 75 72 6e   sqlite3MemJourn
306f0 61 6c 4f 70 65 6e 28 73 71 6c 69 74 65 33 5f 66  alOpen(sqlite3_f
30700 69 6c 65 20 2a 29 3b 0a 0a 76 6f 69 64 20 73 71  ile *);..void sq
30710 6c 69 74 65 33 45 78 70 72 53 65 74 48 65 69 67  lite3ExprSetHeig
30720 68 74 41 6e 64 46 6c 61 67 73 28 50 61 72 73 65  htAndFlags(Parse
30730 20 2a 70 50 61 72 73 65 2c 20 45 78 70 72 20 2a   *pParse, Expr *
30740 70 29 3b 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d  p);.#if SQLITE_M
30750 41 58 5f 45 58 50 52 5f 44 45 50 54 48 3e 30 0a  AX_EXPR_DEPTH>0.
30760 20 20 69 6e 74 20 73 71 6c 69 74 65 33 53 65 6c    int sqlite3Sel
30770 65 63 74 45 78 70 72 48 65 69 67 68 74 28 53 65  ectExprHeight(Se
30780 6c 65 63 74 20 2a 29 3b 0a 20 20 69 6e 74 20 73  lect *);.  int s
30790 71 6c 69 74 65 33 45 78 70 72 43 68 65 63 6b 48  qlite3ExprCheckH
307a0 65 69 67 68 74 28 50 61 72 73 65 2a 2c 20 69 6e  eight(Parse*, in
307b0 74 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65 66  t);.#else.  #def
307c0 69 6e 65 20 73 71 6c 69 74 65 33 53 65 6c 65 63  ine sqlite3Selec
307d0 74 45 78 70 72 48 65 69 67 68 74 28 78 29 20 30  tExprHeight(x) 0
307e0 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74  .  #define sqlit
307f0 65 33 45 78 70 72 43 68 65 63 6b 48 65 69 67 68  e3ExprCheckHeigh
30800 74 28 78 2c 79 29 0a 23 65 6e 64 69 66 0a 0a 75  t(x,y).#endif..u
30810 33 32 20 73 71 6c 69 74 65 33 47 65 74 34 62 79  32 sqlite3Get4by
30820 74 65 28 63 6f 6e 73 74 20 75 38 2a 29 3b 0a 76  te(const u8*);.v
30830 6f 69 64 20 73 71 6c 69 74 65 33 50 75 74 34 62  oid sqlite3Put4b
30840 79 74 65 28 75 38 2a 2c 20 75 33 32 29 3b 0a 0a  yte(u8*, u32);..
30850 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e  #ifdef SQLITE_EN
30860 41 42 4c 45 5f 55 4e 4c 4f 43 4b 5f 4e 4f 54 49  ABLE_UNLOCK_NOTI
30870 46 59 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  FY.  void sqlite
30880 33 43 6f 6e 6e 65 63 74 69 6f 6e 42 6c 6f 63 6b  3ConnectionBlock
30890 65 64 28 73 71 6c 69 74 65 33 20 2a 2c 20 73 71  ed(sqlite3 *, sq
308a0 6c 69 74 65 33 20 2a 29 3b 0a 20 20 76 6f 69 64  lite3 *);.  void
308b0 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69   sqlite3Connecti
308c0 6f 6e 55 6e 6c 6f 63 6b 65 64 28 73 71 6c 69 74  onUnlocked(sqlit
308d0 65 33 20 2a 64 62 29 3b 0a 20 20 76 6f 69 64 20  e3 *db);.  void 
308e0 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f  sqlite3Connectio
308f0 6e 43 6c 6f 73 65 64 28 73 71 6c 69 74 65 33 20  nClosed(sqlite3 
30900 2a 64 62 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64  *db);.#else.  #d
30910 65 66 69 6e 65 20 73 71 6c 69 74 65 33 43 6f 6e  efine sqlite3Con
30920 6e 65 63 74 69 6f 6e 42 6c 6f 63 6b 65 64 28 78  nectionBlocked(x
30930 2c 79 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71  ,y).  #define sq
30940 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 55  lite3ConnectionU
30950 6e 6c 6f 63 6b 65 64 28 78 29 0a 20 20 23 64 65  nlocked(x).  #de
30960 66 69 6e 65 20 73 71 6c 69 74 65 33 43 6f 6e 6e  fine sqlite3Conn
30970 65 63 74 69 6f 6e 43 6c 6f 73 65 64 28 78 29 0a  ectionClosed(x).
30980 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53  #endif..#ifdef S
30990 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 76 6f  QLITE_DEBUG.  vo
309a0 69 64 20 73 71 6c 69 74 65 33 50 61 72 73 65 72  id sqlite3Parser
309b0 54 72 61 63 65 28 46 49 4c 45 2a 2c 20 63 68 61  Trace(FILE*, cha
309c0 72 20 2a 29 3b 0a 23 65 6e 64 69 66 0a 23 69 66  r *);.#endif.#if
309d0 20 64 65 66 69 6e 65 64 28 59 59 43 4f 56 45 52   defined(YYCOVER
309e0 41 47 45 29 0a 20 20 69 6e 74 20 73 71 6c 69 74  AGE).  int sqlit
309f0 65 33 50 61 72 73 65 72 43 6f 76 65 72 61 67 65  e3ParserCoverage
30a00 28 46 49 4c 45 2a 29 3b 0a 23 65 6e 64 69 66 0a  (FILE*);.#endif.
30a10 0a 2f 2a 0a 2a 2a 20 49 66 20 74 68 65 20 53 51  ./*.** If the SQ
30a20 4c 49 54 45 5f 45 4e 41 42 4c 45 20 49 4f 54 52  LITE_ENABLE IOTR
30a30 41 43 45 20 65 78 69 73 74 73 20 74 68 65 6e 20  ACE exists then 
30a40 74 68 65 20 67 6c 6f 62 61 6c 20 76 61 72 69 61  the global varia
30a50 62 6c 65 0a 2a 2a 20 73 71 6c 69 74 65 33 49 6f  ble.** sqlite3Io
30a60 54 72 61 63 65 20 69 73 20 61 20 70 6f 69 6e 74  Trace is a point
30a70 65 72 20 74 6f 20 61 20 70 72 69 6e 74 66 2d 6c  er to a printf-l
30a80 69 6b 65 20 72 6f 75 74 69 6e 65 20 75 73 65 64  ike routine used
30a90 20 74 6f 0a 2a 2a 20 70 72 69 6e 74 20 49 2f 4f   to.** print I/O
30aa0 20 74 72 61 63 69 6e 67 20 6d 65 73 73 61 67 65   tracing message
30ab0 73 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c  s..*/.#ifdef SQL
30ac0 49 54 45 5f 45 4e 41 42 4c 45 5f 49 4f 54 52 41  ITE_ENABLE_IOTRA
30ad0 43 45 0a 23 20 64 65 66 69 6e 65 20 49 4f 54 52  CE.# define IOTR
30ae0 41 43 45 28 41 29 20 20 69 66 28 20 73 71 6c 69  ACE(A)  if( sqli
30af0 74 65 33 49 6f 54 72 61 63 65 20 29 7b 20 73 71  te3IoTrace ){ sq
30b00 6c 69 74 65 33 49 6f 54 72 61 63 65 20 41 3b 20  lite3IoTrace A; 
30b10 7d 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  }.  void sqlite3
30b20 56 64 62 65 49 4f 54 72 61 63 65 53 71 6c 28 56  VdbeIOTraceSql(V
30b30 64 62 65 2a 29 3b 0a 53 51 4c 49 54 45 5f 41 50  dbe*);.SQLITE_AP
30b40 49 20 53 51 4c 49 54 45 5f 45 58 54 45 52 4e 20  I SQLITE_EXTERN 
30b50 76 6f 69 64 20 28 53 51 4c 49 54 45 5f 43 44 45  void (SQLITE_CDE
30b60 43 4c 20 2a 73 71 6c 69 74 65 33 49 6f 54 72 61  CL *sqlite3IoTra
30b70 63 65 29 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c  ce)(const char*,
30b80 2e 2e 2e 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65  ...);.#else.# de
30b90 66 69 6e 65 20 49 4f 54 52 41 43 45 28 41 29 0a  fine IOTRACE(A).
30ba0 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
30bb0 56 64 62 65 49 4f 54 72 61 63 65 53 71 6c 28 58  VdbeIOTraceSql(X
30bc0 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  ).#endif../*.** 
30bd0 54 68 65 73 65 20 72 6f 75 74 69 6e 65 73 20 61  These routines a
30be0 72 65 20 61 76 61 69 6c 61 62 6c 65 20 66 6f 72  re available for
30bf0 20 74 68 65 20 6d 65 6d 32 2e 63 20 64 65 62 75   the mem2.c debu
30c00 67 67 69 6e 67 20 6d 65 6d 6f 72 79 20 61 6c 6c  gging memory all
30c10 6f 63 61 74 6f 72 0a 2a 2a 20 6f 6e 6c 79 2e 20  ocator.** only. 
30c20 20 54 68 65 79 20 61 72 65 20 75 73 65 64 20 74   They are used t
30c30 6f 20 76 65 72 69 66 79 20 74 68 61 74 20 64 69  o verify that di
30c40 66 66 65 72 65 6e 74 20 22 74 79 70 65 73 22 20  fferent "types" 
30c50 6f 66 20 6d 65 6d 6f 72 79 0a 2a 2a 20 61 6c 6c  of memory.** all
30c60 6f 63 61 74 69 6f 6e 73 20 61 72 65 20 70 72 6f  ocations are pro
30c70 70 65 72 6c 79 20 74 72 61 63 6b 65 64 20 62 79  perly tracked by
30c80 20 74 68 65 20 73 79 73 74 65 6d 2e 0a 2a 2a 0a   the system..**.
30c90 2a 2a 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62  ** sqlite3Memdeb
30ca0 75 67 53 65 74 54 79 70 65 28 29 20 73 65 74 73  ugSetType() sets
30cb0 20 74 68 65 20 22 74 79 70 65 22 20 6f 66 20 61   the "type" of a
30cc0 6e 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 74 6f 20  n allocation to 
30cd0 6f 6e 65 20 6f 66 0a 2a 2a 20 74 68 65 20 4d 45  one of.** the ME
30ce0 4d 54 59 50 45 5f 2a 20 6d 61 63 72 6f 73 20 64  MTYPE_* macros d
30cf0 65 66 69 6e 65 64 20 62 65 6c 6f 77 2e 20 20 54  efined below.  T
30d00 68 65 20 74 79 70 65 20 6d 75 73 74 20 62 65 20  he type must be 
30d10 61 20 62 69 74 6d 61 73 6b 20 77 69 74 68 0a 2a  a bitmask with.*
30d20 2a 20 61 20 73 69 6e 67 6c 65 20 62 69 74 20 73  * a single bit s
30d30 65 74 2e 0a 2a 2a 0a 2a 2a 20 73 71 6c 69 74 65  et..**.** sqlite
30d40 33 4d 65 6d 64 65 62 75 67 48 61 73 54 79 70 65  3MemdebugHasType
30d50 28 29 20 72 65 74 75 72 6e 73 20 74 72 75 65 20  () returns true 
30d60 69 66 20 61 6e 79 20 6f 66 20 74 68 65 20 62 69  if any of the bi
30d70 74 73 20 69 6e 20 69 74 73 20 73 65 63 6f 6e 64  ts in its second
30d80 0a 2a 2a 20 61 72 67 75 6d 65 6e 74 20 6d 61 74  .** argument mat
30d90 63 68 20 74 68 65 20 74 79 70 65 20 73 65 74 20  ch the type set 
30da0 62 79 20 74 68 65 20 70 72 65 76 69 6f 75 73 20  by the previous 
30db0 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 53  sqlite3MemdebugS
30dc0 65 74 54 79 70 65 28 29 2e 0a 2a 2a 20 73 71 6c  etType()..** sql
30dd0 69 74 65 33 4d 65 6d 64 65 62 75 67 48 61 73 54  ite3MemdebugHasT
30de0 79 70 65 28 29 20 69 73 20 69 6e 74 65 6e 64 65  ype() is intende
30df0 64 20 66 6f 72 20 75 73 65 20 69 6e 73 69 64 65  d for use inside
30e00 20 61 73 73 65 72 74 28 29 20 73 74 61 74 65 6d   assert() statem
30e10 65 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20 73 71 6c 69  ents..**.** sqli
30e20 74 65 33 4d 65 6d 64 65 62 75 67 4e 6f 54 79 70  te3MemdebugNoTyp
30e30 65 28 29 20 72 65 74 75 72 6e 73 20 74 72 75 65  e() returns true
30e40 20 69 66 20 6e 6f 6e 65 20 6f 66 20 74 68 65 20   if none of the 
30e50 62 69 74 73 20 69 6e 20 69 74 73 20 73 65 63 6f  bits in its seco
30e60 6e 64 0a 2a 2a 20 61 72 67 75 6d 65 6e 74 20 6d  nd.** argument m
30e70 61 74 63 68 20 74 68 65 20 74 79 70 65 20 73 65  atch the type se
30e80 74 20 62 79 20 74 68 65 20 70 72 65 76 69 6f 75  t by the previou
30e90 73 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75  s sqlite3Memdebu
30ea0 67 53 65 74 54 79 70 65 28 29 2e 0a 2a 2a 0a 2a  gSetType()..**.*
30eb0 2a 20 50 65 72 68 61 70 73 20 74 68 65 20 6d 6f  * Perhaps the mo
30ec0 73 74 20 69 6d 70 6f 72 74 61 6e 74 20 70 6f 69  st important poi
30ed0 6e 74 20 69 73 20 74 68 65 20 64 69 66 66 65 72  nt is the differ
30ee0 65 6e 63 65 20 62 65 74 77 65 65 6e 20 4d 45 4d  ence between MEM
30ef0 54 59 50 45 5f 48 45 41 50 0a 2a 2a 20 61 6e 64  TYPE_HEAP.** and
30f00 20 4d 45 4d 54 59 50 45 5f 4c 4f 4f 4b 41 53 49   MEMTYPE_LOOKASI
30f10 44 45 2e 20 20 49 66 20 61 6e 20 61 6c 6c 6f 63  DE.  If an alloc
30f20 61 74 69 6f 6e 20 69 73 20 4d 45 4d 54 59 50 45  ation is MEMTYPE
30f30 5f 4c 4f 4f 4b 41 53 49 44 45 2c 20 74 68 61 74  _LOOKASIDE, that
30f40 20 6d 65 61 6e 73 0a 2a 2a 20 69 74 20 6d 69 67   means.** it mig
30f50 68 74 20 68 61 76 65 20 62 65 65 6e 20 61 6c 6c  ht have been all
30f60 6f 63 61 74 65 64 20 62 79 20 6c 6f 6f 6b 61 73  ocated by lookas
30f70 69 64 65 2c 20 65 78 63 65 70 74 20 74 68 65 20  ide, except the 
30f80 61 6c 6c 6f 63 61 74 69 6f 6e 20 77 61 73 0a 2a  allocation was.*
30f90 2a 20 74 6f 6f 20 6c 61 72 67 65 20 6f 72 20 6c  * too large or l
30fa0 6f 6f 6b 61 73 69 64 65 20 77 61 73 20 61 6c 72  ookaside was alr
30fb0 65 61 64 79 20 66 75 6c 6c 2e 20 20 49 74 20 69  eady full.  It i
30fc0 73 20 69 6d 70 6f 72 74 61 6e 74 20 74 6f 20 76  s important to v
30fd0 65 72 69 66 79 0a 2a 2a 20 74 68 61 74 20 61 6c  erify.** that al
30fe0 6c 6f 63 61 74 69 6f 6e 73 20 74 68 61 74 20 6d  locations that m
30ff0 69 67 68 74 20 68 61 76 65 20 62 65 65 6e 20 73  ight have been s
31000 61 74 69 73 66 69 65 64 20 62 79 20 6c 6f 6f 6b  atisfied by look
31010 61 73 69 64 65 20 61 72 65 20 6e 6f 74 0a 2a 2a  aside are not.**
31020 20 70 61 73 73 65 64 20 62 61 63 6b 20 74 6f 20   passed back to 
31030 6e 6f 6e 2d 6c 6f 6f 6b 61 73 69 64 65 20 66 72  non-lookaside fr
31040 65 65 28 29 20 72 6f 75 74 69 6e 65 73 2e 20 20  ee() routines.  
31050 41 73 73 65 72 74 73 20 73 75 63 68 20 61 73 20  Asserts such as 
31060 74 68 65 0a 2a 2a 20 65 78 61 6d 70 6c 65 20 61  the.** example a
31070 62 6f 76 65 20 61 72 65 20 70 6c 61 63 65 64 20  bove are placed 
31080 6f 6e 20 74 68 65 20 6e 6f 6e 2d 6c 6f 6f 6b 61  on the non-looka
31090 73 69 64 65 20 66 72 65 65 28 29 20 72 6f 75 74  side free() rout
310a0 69 6e 65 73 20 74 6f 20 76 65 72 69 66 79 0a 2a  ines to verify.*
310b0 2a 20 74 68 69 73 20 63 6f 6e 73 74 72 61 69 6e  * this constrain
310c0 74 2e 0a 2a 2a 0a 2a 2a 20 41 6c 6c 20 6f 66 20  t..**.** All of 
310d0 74 68 69 73 20 69 73 20 6e 6f 2d 6f 70 20 66 6f  this is no-op fo
310e0 72 20 61 20 70 72 6f 64 75 63 74 69 6f 6e 20 62  r a production b
310f0 75 69 6c 64 2e 20 20 49 74 20 6f 6e 6c 79 20 63  uild.  It only c
31100 6f 6d 65 73 20 69 6e 74 6f 0a 2a 2a 20 70 6c 61  omes into.** pla
31110 79 20 77 68 65 6e 20 74 68 65 20 53 51 4c 49 54  y when the SQLIT
31120 45 5f 4d 45 4d 44 45 42 55 47 20 63 6f 6d 70 69  E_MEMDEBUG compi
31130 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 20 69  le-time option i
31140 73 20 75 73 65 64 2e 0a 2a 2f 0a 23 69 66 64 65  s used..*/.#ifde
31150 66 20 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55  f SQLITE_MEMDEBU
31160 47 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  G.  void sqlite3
31170 4d 65 6d 64 65 62 75 67 53 65 74 54 79 70 65 28  MemdebugSetType(
31180 76 6f 69 64 2a 2c 75 38 29 3b 0a 20 20 69 6e 74  void*,u8);.  int
31190 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67   sqlite3Memdebug
311a0 48 61 73 54 79 70 65 28 76 6f 69 64 2a 2c 75 38  HasType(void*,u8
311b0 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33  );.  int sqlite3
311c0 4d 65 6d 64 65 62 75 67 4e 6f 54 79 70 65 28 76  MemdebugNoType(v
311d0 6f 69 64 2a 2c 75 38 29 3b 0a 23 65 6c 73 65 0a  oid*,u8);.#else.
311e0 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
311f0 4d 65 6d 64 65 62 75 67 53 65 74 54 79 70 65 28  MemdebugSetType(
31200 58 2c 59 29 20 20 2f 2a 20 6e 6f 2d 6f 70 20 2a  X,Y)  /* no-op *
31210 2f 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  /.# define sqlit
31220 65 33 4d 65 6d 64 65 62 75 67 48 61 73 54 79 70  e3MemdebugHasTyp
31230 65 28 58 2c 59 29 20 20 31 0a 23 20 64 65 66 69  e(X,Y)  1.# defi
31240 6e 65 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62  ne sqlite3Memdeb
31250 75 67 4e 6f 54 79 70 65 28 58 2c 59 29 20 20 20  ugNoType(X,Y)   
31260 31 0a 23 65 6e 64 69 66 0a 23 64 65 66 69 6e 65  1.#endif.#define
31270 20 4d 45 4d 54 59 50 45 5f 48 45 41 50 20 20 20   MEMTYPE_HEAP   
31280 20 20 20 20 30 78 30 31 20 20 2f 2a 20 47 65 6e      0x01  /* Gen
31290 65 72 61 6c 20 68 65 61 70 20 61 6c 6c 6f 63 61  eral heap alloca
312a0 74 69 6f 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65  tions */.#define
312b0 20 4d 45 4d 54 59 50 45 5f 4c 4f 4f 4b 41 53 49   MEMTYPE_LOOKASI
312c0 44 45 20 20 30 78 30 32 20 20 2f 2a 20 48 65 61  DE  0x02  /* Hea
312d0 70 20 74 68 61 74 20 6d 69 67 68 74 20 68 61 76  p that might hav
312e0 65 20 62 65 65 6e 20 6c 6f 6f 6b 61 73 69 64 65  e been lookaside
312f0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 45 4d 54   */.#define MEMT
31300 59 50 45 5f 50 43 41 43 48 45 20 20 20 20 20 30  YPE_PCACHE     0
31310 78 30 34 20 20 2f 2a 20 50 61 67 65 20 63 61 63  x04  /* Page cac
31320 68 65 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 2a  he allocations *
31330 2f 0a 0a 23 69 66 20 28 53 51 4c 49 54 45 5f 45  /..#if (SQLITE_E
31340 4e 41 42 4c 45 5f 41 50 50 4c 45 5f 53 50 49 3e  NABLE_APPLE_SPI>
31350 30 29 20 26 26 20 64 65 66 69 6e 65 64 28 5f 5f  0) && defined(__
31360 41 50 50 4c 45 5f 5f 29 0a 0a 2f 2a 0a 2a 2a 20  APPLE__)../*.** 
31370 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  An instance of t
31380 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72  he following str
31390 75 63 74 75 72 65 20 69 73 20 75 73 65 64 20 74  ucture is used t
313a0 6f 20 68 6f 6c 64 20 74 68 65 20 70 72 6f 63 65  o hold the proce
313b0 73 73 20 49 44 0a 2a 2a 20 61 6e 64 20 72 65 74  ss ID.** and ret
313c0 75 72 6e 2d 62 79 2d 72 65 66 65 72 65 6e 63 65  urn-by-reference
313d0 20 6c 6f 63 6b 73 74 61 74 65 20 76 61 6c 75 65   lockstate value
313e0 2e 20 20 54 68 65 20 53 51 4c 49 54 45 5f 46 43  .  The SQLITE_FC
313f0 4e 54 4c 5f 4c 4f 43 4b 53 54 41 54 45 5f 50 49  NTL_LOCKSTATE_PI
31400 44 0a 2a 2a 20 72 65 71 75 69 72 65 73 20 74 68  D.** requires th
31410 65 20 34 74 68 20 61 72 67 75 6d 65 6e 74 20 74  e 4th argument t
31420 6f 20 73 71 6c 69 74 65 33 5f 66 69 6c 65 5f 63  o sqlite3_file_c
31430 6f 6e 74 72 6f 6c 20 74 6f 20 62 65 20 61 20 70  ontrol to be a p
31440 6f 69 6e 74 65 72 20 74 6f 20 61 6e 0a 2a 2a 20  ointer to an.** 
31450 69 6e 73 74 61 6e 63 65 20 6f 66 20 4c 6f 63 6b  instance of Lock
31460 73 74 61 74 65 50 49 44 20 69 6e 69 74 69 61 6c  statePID initial
31470 69 7a 65 64 20 77 69 74 68 20 61 20 4c 6f 63 6b  ized with a Lock
31480 73 74 61 74 65 50 49 44 2e 70 69 64 20 76 61 6c  statePID.pid val
31490 75 65 20 65 71 75 61 6c 0a 2a 2a 20 74 6f 20 61  ue equal.** to a
314a0 20 70 72 6f 63 65 73 73 20 49 44 20 74 6f 20 62   process ID to b
314b0 65 20 74 65 73 74 65 64 2c 20 6f 72 20 74 68 65  e tested, or the
314c0 20 73 70 65 63 69 61 6c 20 76 61 6c 75 65 20 53   special value S
314d0 51 4c 49 54 45 5f 4c 4f 43 4b 53 54 41 54 45 5f  QLITE_LOCKSTATE_
314e0 41 4e 59 50 49 44 0a 2a 2a 20 54 68 65 20 4c 6f  ANYPID.** The Lo
314f0 63 6b 73 74 61 74 65 2e 73 74 61 74 65 20 76 61  ckstate.state va
31500 6c 75 65 20 69 73 20 61 6c 77 61 79 73 20 73 65  lue is always se
31510 74 20 74 6f 20 6f 6e 65 20 6f 66 20 74 68 65 20  t to one of the 
31520 66 6f 6c 6c 6f 77 69 6e 67 20 76 61 6c 75 65 73  following values
31530 0a 2a 2a 20 77 68 65 6e 20 73 71 6c 69 74 65 33  .** when sqlite3
31540 5f 66 69 6c 65 5f 63 6f 6e 74 72 6f 6c 20 72 65  _file_control re
31550 74 75 72 6e 73 3a 0a 2a 2a 20 0a 2a 2a 20 20 20  turns:.** .**   
31560 53 51 4c 49 54 45 5f 4c 4f 43 4b 53 54 41 54 45  SQLITE_LOCKSTATE
31570 5f 4f 46 46 20 20 20 20 6e 6f 20 61 63 74 69 76  _OFF    no activ
31580 65 20 73 71 6c 69 74 65 20 66 69 6c 65 20 6c 6f  e sqlite file lo
31590 63 6b 73 20 6d 61 74 63 68 20 74 68 65 20 73 70  cks match the sp
315a0 65 63 69 66 69 65 64 20 70 69 64 0a 2a 2a 20 20  ecified pid.**  
315b0 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 53 54 41 54   SQLITE_LOCKSTAT
315c0 45 5f 4f 4e 20 20 20 20 20 61 63 74 69 76 65 20  E_ON     active 
315d0 73 71 6c 69 74 65 20 66 69 6c 65 20 6c 6f 63 6b  sqlite file lock
315e0 73 20 6d 61 74 63 68 20 74 68 65 20 73 70 65 63  s match the spec
315f0 69 66 69 65 64 20 70 69 64 0a 2a 2a 20 20 20 53  ified pid.**   S
31600 51 4c 49 54 45 5f 4c 4f 43 4b 53 54 41 54 45 5f  QLITE_LOCKSTATE_
31610 4e 4f 54 41 44 42 20 70 61 74 68 20 70 6f 69 6e  NOTADB path poin
31620 74 73 20 74 6f 20 61 20 66 69 6c 65 20 74 68 61  ts to a file tha
31630 74 20 69 73 20 6e 6f 74 20 61 6e 20 73 71 6c 69  t is not an sqli
31640 74 65 20 64 62 20 66 69 6c 65 0a 2a 2a 20 20 20  te db file.**   
31650 53 51 4c 49 54 45 5f 4c 4f 43 4b 53 54 41 54 45  SQLITE_LOCKSTATE
31660 5f 45 52 52 4f 52 20 20 70 61 74 68 20 77 61 73  _ERROR  path was
31670 20 6e 6f 74 20 76 61 69 6c 64 20 6f 72 20 77 61   not vaild or wa
31680 73 20 75 6e 72 65 61 64 61 62 6c 65 0a 2a 2f 0a  s unreadable.*/.
31690 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 4c  typedef struct L
316a0 6f 63 6b 73 74 61 74 65 50 49 44 20 4c 6f 63 6b  ockstatePID Lock
316b0 73 74 61 74 65 50 49 44 3b 0a 73 74 72 75 63 74  statePID;.struct
316c0 20 4c 6f 63 6b 73 74 61 74 65 50 49 44 20 7b 0a   LockstatePID {.
316d0 20 20 70 69 64 5f 74 20 70 69 64 3b 20 20 20 20    pid_t pid;    
316e0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
316f0 50 72 6f 63 65 73 73 20 49 44 20 74 6f 20 74 65  Process ID to te
31700 73 74 20 2a 2f 0a 20 20 69 6e 74 20 73 74 61 74  st */.  int stat
31710 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e;              
31720 20 20 20 2f 2a 20 54 68 65 20 73 74 61 74 65 20     /* The state 
31730 6f 66 20 74 68 65 20 6c 6f 63 6b 20 28 72 65 74  of the lock (ret
31740 75 72 6e 20 76 61 6c 75 65 29 20 2a 2f 0a 7d 3b  urn value) */.};
31750 0a 0a 23 65 6e 64 69 66 20 2f 2a 20 28 53 51 4c  ..#endif /* (SQL
31760 49 54 45 5f 45 4e 41 42 4c 45 5f 41 50 50 4c 45  ITE_ENABLE_APPLE
31770 5f 53 50 49 3e 30 29 20 26 26 20 64 65 66 69 6e  _SPI>0) && defin
31780 65 64 28 5f 5f 41 50 50 4c 45 5f 5f 29 20 2a 2f  ed(__APPLE__) */
31790 0a 0a 2f 2a 0a 2a 2a 20 54 68 72 65 61 64 69 6e  ../*.** Threadin
317a0 67 20 69 6e 74 65 72 66 61 63 65 0a 2a 2f 0a 23  g interface.*/.#
317b0 69 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 57 4f  if SQLITE_MAX_WO
317c0 52 4b 45 52 5f 54 48 52 45 41 44 53 3e 30 0a 69  RKER_THREADS>0.i
317d0 6e 74 20 73 71 6c 69 74 65 33 54 68 72 65 61 64  nt sqlite3Thread
317e0 43 72 65 61 74 65 28 53 51 4c 69 74 65 54 68 72  Create(SQLiteThr
317f0 65 61 64 2a 2a 2c 76 6f 69 64 2a 28 2a 29 28 76  ead**,void*(*)(v
31800 6f 69 64 2a 29 2c 76 6f 69 64 2a 29 3b 0a 69 6e  oid*),void*);.in
31810 74 20 73 71 6c 69 74 65 33 54 68 72 65 61 64 4a  t sqlite3ThreadJ
31820 6f 69 6e 28 53 51 4c 69 74 65 54 68 72 65 61 64  oin(SQLiteThread
31830 2a 2c 20 76 6f 69 64 2a 2a 29 3b 0a 23 65 6e 64  *, void**);.#end
31840 69 66 0a 0a 23 69 66 20 64 65 66 69 6e 65 64 28  if..#if defined(
31850 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 44 42  SQLITE_ENABLE_DB
31860 50 41 47 45 5f 56 54 41 42 29 20 7c 7c 20 64 65  PAGE_VTAB) || de
31870 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 54 45 53  fined(SQLITE_TES
31880 54 29 0a 69 6e 74 20 73 71 6c 69 74 65 33 44 62  T).int sqlite3Db
31890 70 61 67 65 52 65 67 69 73 74 65 72 28 73 71 6c  pageRegister(sql
318a0 69 74 65 33 2a 29 3b 0a 23 65 6e 64 69 66 0a 23  ite3*);.#endif.#
318b0 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  if defined(SQLIT
318c0 45 5f 45 4e 41 42 4c 45 5f 44 42 53 54 41 54 5f  E_ENABLE_DBSTAT_
318d0 56 54 41 42 29 20 7c 7c 20 64 65 66 69 6e 65 64  VTAB) || defined
318e0 28 53 51 4c 49 54 45 5f 54 45 53 54 29 0a 69 6e  (SQLITE_TEST).in
318f0 74 20 73 71 6c 69 74 65 33 44 62 73 74 61 74 52  t sqlite3DbstatR
31900 65 67 69 73 74 65 72 28 73 71 6c 69 74 65 33 2a  egister(sqlite3*
31910 29 3b 0a 23 65 6e 64 69 66 0a 0a 69 6e 74 20 73  );.#endif..int s
31920 71 6c 69 74 65 33 45 78 70 72 56 65 63 74 6f 72  qlite3ExprVector
31930 53 69 7a 65 28 45 78 70 72 20 2a 70 45 78 70 72  Size(Expr *pExpr
31940 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78  );.int sqlite3Ex
31950 70 72 49 73 56 65 63 74 6f 72 28 45 78 70 72 20  prIsVector(Expr 
31960 2a 70 45 78 70 72 29 3b 0a 45 78 70 72 20 2a 73  *pExpr);.Expr *s
31970 71 6c 69 74 65 33 56 65 63 74 6f 72 46 69 65 6c  qlite3VectorFiel
31980 64 53 75 62 65 78 70 72 28 45 78 70 72 2a 2c 20  dSubexpr(Expr*, 
31990 69 6e 74 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69  int);.Expr *sqli
319a0 74 65 33 45 78 70 72 46 6f 72 56 65 63 74 6f 72  te3ExprForVector
319b0 46 69 65 6c 64 28 50 61 72 73 65 2a 2c 45 78 70  Field(Parse*,Exp
319c0 72 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  r*,int);.void sq
319d0 6c 69 74 65 33 56 65 63 74 6f 72 45 72 72 6f 72  lite3VectorError
319e0 4d 73 67 28 50 61 72 73 65 2a 2c 20 45 78 70 72  Msg(Parse*, Expr
319f0 2a 29 3b 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c  *);..#ifndef SQL
31a00 49 54 45 5f 4f 4d 49 54 5f 43 4f 4d 50 49 4c 45  ITE_OMIT_COMPILE
31a10 4f 50 54 49 4f 4e 5f 44 49 41 47 53 0a 63 6f 6e  OPTION_DIAGS.con
31a20 73 74 20 63 68 61 72 20 2a 2a 73 71 6c 69 74 65  st char **sqlite
31a30 33 43 6f 6d 70 69 6c 65 4f 70 74 69 6f 6e 73 28  3CompileOptions(
31a40 69 6e 74 20 2a 70 6e 4f 70 74 29 3b 0a 23 65 6e  int *pnOpt);.#en
31a50 64 69 66 0a 0a 23 65 6e 64 69 66 20 2f 2a 20 53  dif..#endif /* S
31a60 51 4c 49 54 45 49 4e 54 5f 48 20 2a 2f 0a        QLITEINT_H */.