/ Hex Artifact Content
Login

Artifact d740a15b9e6d1fcc8e0a3fcf32053c447a674027b67fc5195f695a82a85d7573:


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 30 78  TRACE_LEGACY  0x
bc90: 38 30 0a 23 65 6c 73 65 0a 23 64 65 66 69 6e 65  80.#else.#define
bca0: 20 53 51 4c 49 54 45 5f 54 52 41 43 45 5f 4c 45   SQLITE_TRACE_LE
bcb0: 47 41 43 59 20 20 30 0a 23 65 6e 64 69 66 20 2f  GACY  0.#endif /
bcc0: 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 44 45  * SQLITE_OMIT_DE
bcd0: 50 52 45 43 41 54 45 44 20 2a 2f 0a 0a 0a 2f 2a  PRECATED */.../*
bce0: 0a 2a 2a 20 45 61 63 68 20 64 61 74 61 62 61 73  .** Each databas
bcf0: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 69 73 20  e connection is 
bd00: 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  an instance of t
bd10: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72  he following str
bd20: 75 63 74 75 72 65 2e 0a 2a 2f 0a 73 74 72 75 63  ucture..*/.struc
bd30: 74 20 73 71 6c 69 74 65 33 20 7b 0a 20 20 73 71  t sqlite3 {.  sq
bd40: 6c 69 74 65 33 5f 76 66 73 20 2a 70 56 66 73 3b  lite3_vfs *pVfs;
bd50: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f              /* O
bd60: 53 20 49 6e 74 65 72 66 61 63 65 20 2a 2f 0a 20  S Interface */. 
bd70: 20 73 74 72 75 63 74 20 56 64 62 65 20 2a 70 56   struct Vdbe *pV
bd80: 64 62 65 3b 20 20 20 20 20 20 20 20 20 20 20 2f  dbe;           /
bd90: 2a 20 4c 69 73 74 20 6f 66 20 61 63 74 69 76 65  * List of active
bda0: 20 76 69 72 74 75 61 6c 20 6d 61 63 68 69 6e 65   virtual machine
bdb0: 73 20 2a 2f 0a 20 20 43 6f 6c 6c 53 65 71 20 2a  s */.  CollSeq *
bdc0: 70 44 66 6c 74 43 6f 6c 6c 3b 20 20 20 20 20 20  pDfltColl;      
bdd0: 20 20 20 20 20 2f 2a 20 54 68 65 20 64 65 66 61       /* The defa
bde0: 75 6c 74 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65  ult collating se
bdf0: 71 75 65 6e 63 65 20 28 42 49 4e 41 52 59 29 20  quence (BINARY) 
be00: 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 74  */.  sqlite3_mut
be10: 65 78 20 2a 6d 75 74 65 78 3b 20 20 20 20 20 20  ex *mutex;      
be20: 20 20 20 2f 2a 20 43 6f 6e 6e 65 63 74 69 6f 6e     /* Connection
be30: 20 6d 75 74 65 78 20 2a 2f 0a 20 20 44 62 20 2a   mutex */.  Db *
be40: 61 44 62 3b 20 20 20 20 20 20 20 20 20 20 20 20  aDb;            
be50: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c            /* All
be60: 20 62 61 63 6b 65 6e 64 73 20 2a 2f 0a 20 20 69   backends */.  i
be70: 6e 74 20 6e 44 62 3b 20 20 20 20 20 20 20 20 20  nt nDb;         
be80: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
be90: 4e 75 6d 62 65 72 20 6f 66 20 62 61 63 6b 65 6e  Number of backen
bea0: 64 73 20 63 75 72 72 65 6e 74 6c 79 20 69 6e 20  ds currently in 
beb0: 75 73 65 20 2a 2f 0a 20 20 75 33 32 20 6d 44 62  use */.  u32 mDb
bec0: 46 6c 61 67 73 3b 20 20 20 20 20 20 20 20 20 20  Flags;          
bed0: 20 20 20 20 20 20 20 2f 2a 20 66 6c 61 67 73 20         /* flags 
bee0: 72 65 63 6f 72 64 69 6e 67 20 69 6e 74 65 72 6e  recording intern
bef0: 61 6c 20 73 74 61 74 65 20 2a 2f 0a 20 20 75 36  al state */.  u6
bf00: 34 20 66 6c 61 67 73 3b 20 20 20 20 20 20 20 20  4 flags;        
bf10: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 66              /* f
bf20: 6c 61 67 73 20 73 65 74 74 61 62 6c 65 20 62 79  lags settable by
bf30: 20 70 72 61 67 6d 61 73 2e 20 53 65 65 20 62 65   pragmas. See be
bf40: 6c 6f 77 20 2a 2f 0a 20 20 69 36 34 20 6c 61 73  low */.  i64 las
bf50: 74 52 6f 77 69 64 3b 20 20 20 20 20 20 20 20 20  tRowid;         
bf60: 20 20 20 20 20 20 20 2f 2a 20 52 4f 57 49 44 20         /* ROWID 
bf70: 6f 66 20 6d 6f 73 74 20 72 65 63 65 6e 74 20 69  of most recent i
bf80: 6e 73 65 72 74 20 28 73 65 65 20 61 62 6f 76 65  nsert (see above
bf90: 29 20 2a 2f 0a 20 20 69 36 34 20 73 7a 4d 6d 61  ) */.  i64 szMma
bfa0: 70 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  p;              
bfb0: 20 20 20 20 20 2f 2a 20 44 65 66 61 75 6c 74 20       /* Default 
bfc0: 6d 6d 61 70 5f 73 69 7a 65 20 73 65 74 74 69 6e  mmap_size settin
bfd0: 67 20 2a 2f 0a 20 20 75 33 32 20 6e 53 63 68 65  g */.  u32 nSche
bfe0: 6d 61 4c 6f 63 6b 3b 20 20 20 20 20 20 20 20 20  maLock;         
bff0: 20 20 20 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 72       /* Do not r
c000: 65 73 65 74 20 74 68 65 20 73 63 68 65 6d 61 20  eset the schema 
c010: 77 68 65 6e 20 6e 6f 6e 2d 7a 65 72 6f 20 2a 2f  when non-zero */
c020: 0a 20 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 20  .  unsigned int 
c030: 6f 70 65 6e 46 6c 61 67 73 3b 20 20 20 20 20 20  openFlags;      
c040: 20 2f 2a 20 46 6c 61 67 73 20 70 61 73 73 65 64   /* Flags passed
c050: 20 74 6f 20 73 71 6c 69 74 65 33 5f 76 66 73 2e   to sqlite3_vfs.
c060: 78 4f 70 65 6e 28 29 20 2a 2f 0a 20 20 69 6e 74  xOpen() */.  int
c070: 20 65 72 72 43 6f 64 65 3b 20 20 20 20 20 20 20   errCode;       
c080: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 6f             /* Mo
c090: 73 74 20 72 65 63 65 6e 74 20 65 72 72 6f 72 20  st recent error 
c0a0: 63 6f 64 65 20 28 53 51 4c 49 54 45 5f 2a 29 20  code (SQLITE_*) 
c0b0: 2a 2f 0a 20 20 69 6e 74 20 65 72 72 4d 61 73 6b  */.  int errMask
c0c0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
c0d0: 20 20 20 2f 2a 20 26 20 72 65 73 75 6c 74 20 63     /* & result c
c0e0: 6f 64 65 73 20 77 69 74 68 20 74 68 69 73 20 62  odes with this b
c0f0: 65 66 6f 72 65 20 72 65 74 75 72 6e 69 6e 67 20  efore returning 
c100: 2a 2f 0a 20 20 69 6e 74 20 69 53 79 73 45 72 72  */.  int iSysErr
c110: 6e 6f 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  no;             
c120: 20 20 20 2f 2a 20 45 72 72 6e 6f 20 76 61 6c 75     /* Errno valu
c130: 65 20 66 72 6f 6d 20 6c 61 73 74 20 73 79 73 74  e from last syst
c140: 65 6d 20 65 72 72 6f 72 20 2a 2f 0a 20 20 75 31  em error */.  u1
c150: 36 20 64 62 4f 70 74 46 6c 61 67 73 3b 20 20 20  6 dbOptFlags;   
c160: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46              /* F
c170: 6c 61 67 73 20 74 6f 20 65 6e 61 62 6c 65 2f 64  lags to enable/d
c180: 69 73 61 62 6c 65 20 6f 70 74 69 6d 69 7a 61 74  isable optimizat
c190: 69 6f 6e 73 20 2a 2f 0a 20 20 75 38 20 65 6e 63  ions */.  u8 enc
c1a0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
c1b0: 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78 74 20          /* Text 
c1c0: 65 6e 63 6f 64 69 6e 67 20 2a 2f 0a 20 20 75 38  encoding */.  u8
c1d0: 20 61 75 74 6f 43 6f 6d 6d 69 74 3b 20 20 20 20   autoCommit;    
c1e0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
c1f0: 68 65 20 61 75 74 6f 2d 63 6f 6d 6d 69 74 20 66  he auto-commit f
c200: 6c 61 67 2e 20 2a 2f 0a 20 20 75 38 20 74 65 6d  lag. */.  u8 tem
c210: 70 5f 73 74 6f 72 65 3b 20 20 20 20 20 20 20 20  p_store;        
c220: 20 20 20 20 20 20 20 20 2f 2a 20 31 3a 20 66 69          /* 1: fi
c230: 6c 65 20 32 3a 20 6d 65 6d 6f 72 79 20 30 3a 20  le 2: memory 0: 
c240: 64 65 66 61 75 6c 74 20 2a 2f 0a 20 20 75 38 20  default */.  u8 
c250: 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 3b 20 20 20  mallocFailed;   
c260: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72             /* Tr
c270: 75 65 20 69 66 20 77 65 20 68 61 76 65 20 73 65  ue if we have se
c280: 65 6e 20 61 20 6d 61 6c 6c 6f 63 20 66 61 69 6c  en a malloc fail
c290: 75 72 65 20 2a 2f 0a 20 20 75 38 20 62 42 65 6e  ure */.  u8 bBen
c2a0: 69 67 6e 4d 61 6c 6c 6f 63 3b 20 20 20 20 20 20  ignMalloc;      
c2b0: 20 20 20 20 20 20 20 2f 2a 20 44 6f 20 6e 6f 74         /* Do not
c2c0: 20 72 65 71 75 69 72 65 20 4f 4f 4d 73 20 69 66   require OOMs if
c2d0: 20 74 72 75 65 20 2a 2f 0a 20 20 75 38 20 64 66   true */.  u8 df
c2e0: 6c 74 4c 6f 63 6b 4d 6f 64 65 3b 20 20 20 20 20  ltLockMode;     
c2f0: 20 20 20 20 20 20 20 20 20 2f 2a 20 44 65 66 61           /* Defa
c300: 75 6c 74 20 6c 6f 63 6b 69 6e 67 2d 6d 6f 64 65  ult locking-mode
c310: 20 66 6f 72 20 61 74 74 61 63 68 65 64 20 64 62   for attached db
c320: 73 20 2a 2f 0a 20 20 73 69 67 6e 65 64 20 63 68  s */.  signed ch
c330: 61 72 20 6e 65 78 74 41 75 74 6f 76 61 63 3b 20  ar nextAutovac; 
c340: 20 20 20 20 20 2f 2a 20 41 75 74 6f 76 61 63 20       /* Autovac 
c350: 73 65 74 74 69 6e 67 20 61 66 74 65 72 20 56 41  setting after VA
c360: 43 55 55 4d 20 69 66 20 3e 3d 30 20 2a 2f 0a 20  CUUM if >=0 */. 
c370: 20 75 38 20 73 75 70 70 72 65 73 73 45 72 72 3b   u8 suppressErr;
c380: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
c390: 2a 20 44 6f 20 6e 6f 74 20 69 73 73 75 65 20 65  * Do not issue e
c3a0: 72 72 6f 72 20 6d 65 73 73 61 67 65 73 20 69 66  rror messages if
c3b0: 20 74 72 75 65 20 2a 2f 0a 20 20 75 38 20 76 74   true */.  u8 vt
c3c0: 61 62 4f 6e 43 6f 6e 66 6c 69 63 74 3b 20 20 20  abOnConflict;   
c3d0: 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75           /* Valu
c3e0: 65 20 74 6f 20 72 65 74 75 72 6e 20 66 6f 72 20  e to return for 
c3f0: 73 33 5f 76 74 61 62 5f 6f 6e 5f 63 6f 6e 66 6c  s3_vtab_on_confl
c400: 69 63 74 28 29 20 2a 2f 0a 20 20 75 38 20 69 73  ict() */.  u8 is
c410: 54 72 61 6e 73 61 63 74 69 6f 6e 53 61 76 65 70  TransactionSavep
c420: 6f 69 6e 74 3b 20 20 20 20 2f 2a 20 54 72 75 65  oint;    /* True
c430: 20 69 66 20 74 68 65 20 6f 75 74 65 72 6d 6f 73   if the outermos
c440: 74 20 73 61 76 65 70 6f 69 6e 74 20 69 73 20 61  t savepoint is a
c450: 20 54 53 20 2a 2f 0a 20 20 75 38 20 6d 54 72 61   TS */.  u8 mTra
c460: 63 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ce;             
c470: 20 20 20 20 20 20 20 2f 2a 20 7a 65 72 6f 20 6f         /* zero o
c480: 72 20 6d 6f 72 65 20 53 51 4c 49 54 45 5f 54 52  r more SQLITE_TR
c490: 41 43 45 20 66 6c 61 67 73 20 2a 2f 0a 20 20 75  ACE flags */.  u
c4a0: 38 20 6e 6f 53 68 61 72 65 64 43 61 63 68 65 3b  8 noSharedCache;
c4b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
c4c0: 54 72 75 65 20 69 66 20 6e 6f 20 73 68 61 72 65  True if no share
c4d0: 64 2d 63 61 63 68 65 20 62 61 63 6b 65 6e 64 73  d-cache backends
c4e0: 20 2a 2f 0a 20 20 75 38 20 6e 53 71 6c 45 78 65   */.  u8 nSqlExe
c4f0: 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  c;              
c500: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
c510: 20 70 65 6e 64 69 6e 67 20 4f 50 5f 53 71 6c 45   pending OP_SqlE
c520: 78 65 63 20 6f 70 63 6f 64 65 73 20 2a 2f 0a 20  xec opcodes */. 
c530: 20 69 6e 74 20 6e 65 78 74 50 61 67 65 73 69 7a   int nextPagesiz
c540: 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  e;             /
c550: 2a 20 50 61 67 65 73 69 7a 65 20 61 66 74 65 72  * Pagesize after
c560: 20 56 41 43 55 55 4d 20 69 66 20 3e 30 20 2a 2f   VACUUM if >0 */
c570: 0a 20 20 75 33 32 20 6d 61 67 69 63 3b 20 20 20  .  u32 magic;   
c580: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c590: 20 2f 2a 20 4d 61 67 69 63 20 6e 75 6d 62 65 72   /* Magic number
c5a0: 20 66 6f 72 20 64 65 74 65 63 74 20 6c 69 62 72   for detect libr
c5b0: 61 72 79 20 6d 69 73 75 73 65 20 2a 2f 0a 20 20  ary misuse */.  
c5c0: 69 6e 74 20 6e 43 68 61 6e 67 65 3b 20 20 20 20  int nChange;    
c5d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
c5e0: 20 56 61 6c 75 65 20 72 65 74 75 72 6e 65 64 20   Value returned 
c5f0: 62 79 20 73 71 6c 69 74 65 33 5f 63 68 61 6e 67  by sqlite3_chang
c600: 65 73 28 29 20 2a 2f 0a 20 20 69 6e 74 20 6e 54  es() */.  int nT
c610: 6f 74 61 6c 43 68 61 6e 67 65 3b 20 20 20 20 20  otalChange;     
c620: 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65          /* Value
c630: 20 72 65 74 75 72 6e 65 64 20 62 79 20 73 71 6c   returned by sql
c640: 69 74 65 33 5f 74 6f 74 61 6c 5f 63 68 61 6e 67  ite3_total_chang
c650: 65 73 28 29 20 2a 2f 0a 20 20 69 6e 74 20 61 4c  es() */.  int aL
c660: 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4e 5f 4c 49  imit[SQLITE_N_LI
c670: 4d 49 54 5d 3b 20 20 20 2f 2a 20 4c 69 6d 69 74  MIT];   /* Limit
c680: 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 4d 61 78 53  s */.  int nMaxS
c690: 6f 72 74 65 72 4d 6d 61 70 3b 20 20 20 20 20 20  orterMmap;      
c6a0: 20 20 20 20 20 2f 2a 20 4d 61 78 69 6d 75 6d 20       /* Maximum 
c6b0: 73 69 7a 65 20 6f 66 20 72 65 67 69 6f 6e 73 20  size of regions 
c6c0: 6d 61 70 70 65 64 20 62 79 20 73 6f 72 74 65 72  mapped by sorter
c6d0: 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 73 71 6c   */.  struct sql
c6e0: 69 74 65 33 49 6e 69 74 49 6e 66 6f 20 7b 20 20  ite3InitInfo {  
c6f0: 20 20 20 20 2f 2a 20 49 6e 66 6f 72 6d 61 74 69      /* Informati
c700: 6f 6e 20 75 73 65 64 20 64 75 72 69 6e 67 20 69  on used during i
c710: 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e 20 2a 2f  nitialization */
c720: 0a 20 20 20 20 69 6e 74 20 6e 65 77 54 6e 75 6d  .    int newTnum
c730: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
c740: 20 2f 2a 20 52 6f 6f 74 70 61 67 65 20 6f 66 20   /* Rootpage of 
c750: 74 61 62 6c 65 20 62 65 69 6e 67 20 69 6e 69 74  table being init
c760: 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 20 20 75  ialized */.    u
c770: 38 20 69 44 62 3b 20 20 20 20 20 20 20 20 20 20  8 iDb;          
c780: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57 68             /* Wh
c790: 69 63 68 20 64 62 20 66 69 6c 65 20 69 73 20 62  ich db file is b
c7a0: 65 69 6e 67 20 69 6e 69 74 69 61 6c 69 7a 65 64  eing initialized
c7b0: 20 2a 2f 0a 20 20 20 20 75 38 20 62 75 73 79 3b   */.    u8 busy;
c7c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c7d0: 20 20 20 20 2f 2a 20 54 52 55 45 20 69 66 20 63      /* TRUE if c
c7e0: 75 72 72 65 6e 74 6c 79 20 69 6e 69 74 69 61 6c  urrently initial
c7f0: 69 7a 69 6e 67 20 2a 2f 0a 20 20 20 20 75 6e 73  izing */.    uns
c800: 69 67 6e 65 64 20 6f 72 70 68 61 6e 54 72 69 67  igned orphanTrig
c810: 67 65 72 20 3a 20 31 3b 20 2f 2a 20 4c 61 73 74  ger : 1; /* Last
c820: 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 6f 72   statement is or
c830: 70 68 61 6e 65 64 20 54 45 4d 50 20 74 72 69 67  phaned TEMP trig
c840: 67 65 72 20 2a 2f 0a 20 20 20 20 75 6e 73 69 67  ger */.    unsig
c850: 6e 65 64 20 69 6d 70 6f 73 74 65 72 54 61 62 6c  ned imposterTabl
c860: 65 20 3a 20 31 3b 20 2f 2a 20 42 75 69 6c 64 69  e : 1; /* Buildi
c870: 6e 67 20 61 6e 20 69 6d 70 6f 73 74 65 72 20 74  ng an imposter t
c880: 61 62 6c 65 20 2a 2f 0a 20 20 20 20 75 6e 73 69  able */.    unsi
c890: 67 6e 65 64 20 72 65 6f 70 65 6e 4d 65 6d 64 62  gned reopenMemdb
c8a0: 20 3a 20 31 3b 20 20 20 2f 2a 20 41 54 54 41 43   : 1;   /* ATTAC
c8b0: 48 20 69 73 20 72 65 61 6c 6c 79 20 61 20 72 65  H is really a re
c8c0: 6f 70 65 6e 20 75 73 69 6e 67 20 4d 65 6d 44 42  open using MemDB
c8d0: 20 2a 2f 0a 20 20 7d 20 69 6e 69 74 3b 0a 20 20   */.  } init;.  
c8e0: 69 6e 74 20 6e 56 64 62 65 41 63 74 69 76 65 3b  int nVdbeActive;
c8f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
c900: 20 4e 75 6d 62 65 72 20 6f 66 20 56 44 42 45 73   Number of VDBEs
c910: 20 63 75 72 72 65 6e 74 6c 79 20 72 75 6e 6e 69   currently runni
c920: 6e 67 20 2a 2f 0a 20 20 69 6e 74 20 6e 56 64 62  ng */.  int nVdb
c930: 65 52 65 61 64 3b 20 20 20 20 20 20 20 20 20 20  eRead;          
c940: 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
c950: 6f 66 20 61 63 74 69 76 65 20 56 44 42 45 73 20  of active VDBEs 
c960: 74 68 61 74 20 72 65 61 64 20 6f 72 20 77 72 69  that read or wri
c970: 74 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 56 64 62  te */.  int nVdb
c980: 65 57 72 69 74 65 3b 20 20 20 20 20 20 20 20 20  eWrite;         
c990: 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
c9a0: 6f 66 20 61 63 74 69 76 65 20 56 44 42 45 73 20  of active VDBEs 
c9b0: 74 68 61 74 20 72 65 61 64 20 61 6e 64 20 77 72  that read and wr
c9c0: 69 74 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 56 64  ite */.  int nVd
c9d0: 62 65 45 78 65 63 3b 20 20 20 20 20 20 20 20 20  beExec;         
c9e0: 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
c9f0: 20 6f 66 20 6e 65 73 74 65 64 20 63 61 6c 6c 73   of nested calls
ca00: 20 74 6f 20 56 64 62 65 45 78 65 63 28 29 20 2a   to VdbeExec() *
ca10: 2f 0a 20 20 69 6e 74 20 6e 56 44 65 73 74 72 6f  /.  int nVDestro
ca20: 79 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  y;              
ca30: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61    /* Number of a
ca40: 63 74 69 76 65 20 4f 50 5f 56 44 65 73 74 72 6f  ctive OP_VDestro
ca50: 79 20 6f 70 65 72 61 74 69 6f 6e 73 20 2a 2f 0a  y operations */.
ca60: 20 20 69 6e 74 20 6e 45 78 74 65 6e 73 69 6f 6e    int nExtension
ca70: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
ca80: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6c 6f 61  /* Number of loa
ca90: 64 65 64 20 65 78 74 65 6e 73 69 6f 6e 73 20 2a  ded extensions *
caa0: 2f 0a 20 20 76 6f 69 64 20 2a 2a 61 45 78 74 65  /.  void **aExte
cab0: 6e 73 69 6f 6e 3b 20 20 20 20 20 20 20 20 20 20  nsion;          
cac0: 20 20 2f 2a 20 41 72 72 61 79 20 6f 66 20 73 68    /* Array of sh
cad0: 61 72 65 64 20 6c 69 62 72 61 72 79 20 68 61 6e  ared library han
cae0: 64 6c 65 73 20 2a 2f 0a 20 20 69 6e 74 20 28 2a  dles */.  int (*
caf0: 78 54 72 61 63 65 29 28 75 33 32 2c 76 6f 69 64  xTrace)(u32,void
cb00: 2a 2c 76 6f 69 64 2a 2c 76 6f 69 64 2a 29 3b 20  *,void*,void*); 
cb10: 20 20 20 20 2f 2a 20 54 72 61 63 65 20 66 75 6e      /* Trace fun
cb20: 63 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64 20  ction */.  void 
cb30: 2a 70 54 72 61 63 65 41 72 67 3b 20 20 20 20 20  *pTraceArg;     
cb40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cb50: 20 20 20 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74       /* Argument
cb60: 20 74 6f 20 74 68 65 20 74 72 61 63 65 20 66 75   to the trace fu
cb70: 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64  nction */.  void
cb80: 20 28 2a 78 50 72 6f 66 69 6c 65 29 28 76 6f 69   (*xProfile)(voi
cb90: 64 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 75  d*,const char*,u
cba0: 36 34 29 3b 20 20 2f 2a 20 50 72 6f 66 69 6c 69  64);  /* Profili
cbb0: 6e 67 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20  ng function */. 
cbc0: 20 76 6f 69 64 20 2a 70 50 72 6f 66 69 6c 65 41   void *pProfileA
cbd0: 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  rg;             
cbe0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72             /* Ar
cbf0: 67 75 6d 65 6e 74 20 74 6f 20 70 72 6f 66 69 6c  gument to profil
cc00: 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20  e function */.  
cc10: 76 6f 69 64 20 2a 70 43 6f 6d 6d 69 74 41 72 67  void *pCommitArg
cc20: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
cc30: 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f    /* Argument to
cc40: 20 78 43 6f 6d 6d 69 74 43 61 6c 6c 62 61 63 6b   xCommitCallback
cc50: 28 29 20 2a 2f 0a 20 20 69 6e 74 20 28 2a 78 43  () */.  int (*xC
cc60: 6f 6d 6d 69 74 43 61 6c 6c 62 61 63 6b 29 28 76  ommitCallback)(v
cc70: 6f 69 64 2a 29 3b 20 20 20 20 2f 2a 20 49 6e 76  oid*);    /* Inv
cc80: 6f 6b 65 64 20 61 74 20 65 76 65 72 79 20 63 6f  oked at every co
cc90: 6d 6d 69 74 2e 20 2a 2f 0a 20 20 76 6f 69 64 20  mmit. */.  void 
cca0: 2a 70 52 6f 6c 6c 62 61 63 6b 41 72 67 3b 20 20  *pRollbackArg;  
ccb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
ccc0: 41 72 67 75 6d 65 6e 74 20 74 6f 20 78 52 6f 6c  Argument to xRol
ccd0: 6c 62 61 63 6b 43 61 6c 6c 62 61 63 6b 28 29 20  lbackCallback() 
cce0: 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 52 6f 6c  */.  void (*xRol
ccf0: 6c 62 61 63 6b 43 61 6c 6c 62 61 63 6b 29 28 76  lbackCallback)(v
cd00: 6f 69 64 2a 29 3b 20 2f 2a 20 49 6e 76 6f 6b 65  oid*); /* Invoke
cd10: 64 20 61 74 20 65 76 65 72 79 20 63 6f 6d 6d 69  d at every commi
cd20: 74 2e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 55  t. */.  void *pU
cd30: 70 64 61 74 65 41 72 67 3b 0a 20 20 76 6f 69 64  pdateArg;.  void
cd40: 20 28 2a 78 55 70 64 61 74 65 43 61 6c 6c 62 61   (*xUpdateCallba
cd50: 63 6b 29 28 76 6f 69 64 2a 2c 69 6e 74 2c 20 63  ck)(void*,int, c
cd60: 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74  onst char*,const
cd70: 20 63 68 61 72 2a 2c 73 71 6c 69 74 65 5f 69 6e   char*,sqlite_in
cd80: 74 36 34 29 3b 0a 23 69 66 64 65 66 20 53 51 4c  t64);.#ifdef SQL
cd90: 49 54 45 5f 45 4e 41 42 4c 45 5f 50 52 45 55 50  ITE_ENABLE_PREUP
cda0: 44 41 54 45 5f 48 4f 4f 4b 0a 20 20 76 6f 69 64  DATE_HOOK.  void
cdb0: 20 2a 70 50 72 65 55 70 64 61 74 65 41 72 67 3b   *pPreUpdateArg;
cdc0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 69 72            /* Fir
cdd0: 73 74 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 78  st argument to x
cde0: 50 72 65 55 70 64 61 74 65 43 61 6c 6c 62 61 63  PreUpdateCallbac
cdf0: 6b 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 50  k */.  void (*xP
ce00: 72 65 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b  reUpdateCallback
ce10: 29 28 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72  )(   /* Register
ce20: 65 64 20 75 73 69 6e 67 20 73 71 6c 69 74 65 33  ed using sqlite3
ce30: 5f 70 72 65 75 70 64 61 74 65 5f 68 6f 6f 6b 28  _preupdate_hook(
ce40: 29 20 2a 2f 0a 20 20 20 20 76 6f 69 64 2a 2c 73  ) */.    void*,s
ce50: 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 63 68 61 72  qlite3*,int,char
ce60: 20 63 6f 6e 73 74 2a 2c 63 68 61 72 20 63 6f 6e   const*,char con
ce70: 73 74 2a 2c 73 71 6c 69 74 65 33 5f 69 6e 74 36  st*,sqlite3_int6
ce80: 34 2c 73 71 6c 69 74 65 33 5f 69 6e 74 36 34 0a  4,sqlite3_int64.
ce90: 20 20 29 3b 0a 20 20 50 72 65 55 70 64 61 74 65    );.  PreUpdate
cea0: 20 2a 70 50 72 65 55 70 64 61 74 65 3b 20 20 20   *pPreUpdate;   
ceb0: 20 20 20 20 20 2f 2a 20 43 6f 6e 74 65 78 74 20       /* Context 
cec0: 66 6f 72 20 61 63 74 69 76 65 20 70 72 65 2d 75  for active pre-u
ced0: 70 64 61 74 65 20 63 61 6c 6c 62 61 63 6b 20 2a  pdate callback *
cee0: 2f 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  /.#endif /* SQLI
cef0: 54 45 5f 45 4e 41 42 4c 45 5f 50 52 45 55 50 44  TE_ENABLE_PREUPD
cf00: 41 54 45 5f 48 4f 4f 4b 20 2a 2f 0a 23 69 66 6e  ATE_HOOK */.#ifn
cf10: 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
cf20: 57 41 4c 0a 20 20 69 6e 74 20 28 2a 78 57 61 6c  WAL.  int (*xWal
cf30: 43 61 6c 6c 62 61 63 6b 29 28 76 6f 69 64 20 2a  Callback)(void *
cf40: 2c 20 73 71 6c 69 74 65 33 20 2a 2c 20 63 6f 6e  , sqlite3 *, con
cf50: 73 74 20 63 68 61 72 20 2a 2c 20 69 6e 74 29 3b  st char *, int);
cf60: 0a 20 20 76 6f 69 64 20 2a 70 57 61 6c 41 72 67  .  void *pWalArg
cf70: 3b 0a 23 65 6e 64 69 66 0a 20 20 76 6f 69 64 28  ;.#endif.  void(
cf80: 2a 78 43 6f 6c 6c 4e 65 65 64 65 64 29 28 76 6f  *xCollNeeded)(vo
cf90: 69 64 2a 2c 73 71 6c 69 74 65 33 2a 2c 69 6e 74  id*,sqlite3*,int
cfa0: 20 65 54 65 78 74 52 65 70 2c 63 6f 6e 73 74 20   eTextRep,const 
cfb0: 63 68 61 72 2a 29 3b 0a 20 20 76 6f 69 64 28 2a  char*);.  void(*
cfc0: 78 43 6f 6c 6c 4e 65 65 64 65 64 31 36 29 28 76  xCollNeeded16)(v
cfd0: 6f 69 64 2a 2c 73 71 6c 69 74 65 33 2a 2c 69 6e  oid*,sqlite3*,in
cfe0: 74 20 65 54 65 78 74 52 65 70 2c 63 6f 6e 73 74  t eTextRep,const
cff0: 20 76 6f 69 64 2a 29 3b 0a 20 20 76 6f 69 64 20   void*);.  void 
d000: 2a 70 43 6f 6c 6c 4e 65 65 64 65 64 41 72 67 3b  *pCollNeededArg;
d010: 0a 20 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  .  sqlite3_value
d020: 20 2a 70 45 72 72 3b 20 20 20 20 20 20 20 20 20   *pErr;         
d030: 20 2f 2a 20 4d 6f 73 74 20 72 65 63 65 6e 74 20   /* Most recent 
d040: 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20 2a 2f  error message */
d050: 0a 20 20 75 6e 69 6f 6e 20 7b 0a 20 20 20 20 76  .  union {.    v
d060: 6f 6c 61 74 69 6c 65 20 69 6e 74 20 69 73 49 6e  olatile int isIn
d070: 74 65 72 72 75 70 74 65 64 3b 20 2f 2a 20 54 72  terrupted; /* Tr
d080: 75 65 20 69 66 20 73 71 6c 69 74 65 33 5f 69 6e  ue if sqlite3_in
d090: 74 65 72 72 75 70 74 20 68 61 73 20 62 65 65 6e  terrupt has been
d0a0: 20 63 61 6c 6c 65 64 20 2a 2f 0a 20 20 20 20 64   called */.    d
d0b0: 6f 75 62 6c 65 20 6e 6f 74 55 73 65 64 31 3b 20  ouble notUsed1; 
d0c0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 70             /* Sp
d0d0: 61 63 65 72 20 2a 2f 0a 20 20 7d 20 75 31 3b 0a  acer */.  } u1;.
d0e0: 20 20 4c 6f 6f 6b 61 73 69 64 65 20 6c 6f 6f 6b    Lookaside look
d0f0: 61 73 69 64 65 3b 20 20 20 20 20 20 20 20 20 20  aside;          
d100: 2f 2a 20 4c 6f 6f 6b 61 73 69 64 65 20 6d 61 6c  /* Lookaside mal
d110: 6c 6f 63 20 63 6f 6e 66 69 67 75 72 61 74 69 6f  loc configuratio
d120: 6e 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c  n */.#ifndef SQL
d130: 49 54 45 5f 4f 4d 49 54 5f 41 55 54 48 4f 52 49  ITE_OMIT_AUTHORI
d140: 5a 41 54 49 4f 4e 0a 20 20 73 71 6c 69 74 65 33  ZATION.  sqlite3
d150: 5f 78 61 75 74 68 20 78 41 75 74 68 3b 20 20 20  _xauth xAuth;   
d160: 20 20 20 20 20 20 20 2f 2a 20 41 63 63 65 73 73         /* Access
d170: 20 61 75 74 68 6f 72 69 7a 61 74 69 6f 6e 20 66   authorization f
d180: 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69  unction */.  voi
d190: 64 20 2a 70 41 75 74 68 41 72 67 3b 20 20 20 20  d *pAuthArg;    
d1a0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 31 73             /* 1s
d1b0: 74 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 74 68  t argument to th
d1c0: 65 20 61 63 63 65 73 73 20 61 75 74 68 20 66 75  e access auth fu
d1d0: 6e 63 74 69 6f 6e 20 2a 2f 0a 23 65 6e 64 69 66  nction */.#endif
d1e0: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
d1f0: 4f 4d 49 54 5f 50 52 4f 47 52 45 53 53 5f 43 41  OMIT_PROGRESS_CA
d200: 4c 4c 42 41 43 4b 0a 20 20 69 6e 74 20 28 2a 78  LLBACK.  int (*x
d210: 50 72 6f 67 72 65 73 73 29 28 76 6f 69 64 20 2a  Progress)(void *
d220: 29 3b 20 20 20 20 20 2f 2a 20 54 68 65 20 70 72  );     /* The pr
d230: 6f 67 72 65 73 73 20 63 61 6c 6c 62 61 63 6b 20  ogress callback 
d240: 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 50 72 6f 67  */.  void *pProg
d250: 72 65 73 73 41 72 67 3b 20 20 20 20 20 20 20 20  ressArg;        
d260: 20 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74     /* Argument t
d270: 6f 20 74 68 65 20 70 72 6f 67 72 65 73 73 20 63  o the progress c
d280: 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 75 6e 73  allback */.  uns
d290: 69 67 6e 65 64 20 6e 50 72 6f 67 72 65 73 73 4f  igned nProgressO
d2a0: 70 73 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 75  ps;        /* Nu
d2b0: 6d 62 65 72 20 6f 66 20 6f 70 63 6f 64 65 73 20  mber of opcodes 
d2c0: 66 6f 72 20 70 72 6f 67 72 65 73 73 20 63 61 6c  for progress cal
d2d0: 6c 62 61 63 6b 20 2a 2f 0a 23 65 6e 64 69 66 0a  lback */.#endif.
d2e0: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
d2f0: 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
d300: 0a 20 20 69 6e 74 20 6e 56 54 72 61 6e 73 3b 20  .  int nVTrans; 
d310: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d320: 20 2f 2a 20 41 6c 6c 6f 63 61 74 65 64 20 73 69   /* Allocated si
d330: 7a 65 20 6f 66 20 61 56 54 72 61 6e 73 20 2a 2f  ze of aVTrans */
d340: 0a 20 20 48 61 73 68 20 61 4d 6f 64 75 6c 65 3b  .  Hash aModule;
d350: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d360: 20 2f 2a 20 70 6f 70 75 6c 61 74 65 64 20 62 79   /* populated by
d370: 20 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f   sqlite3_create_
d380: 6d 6f 64 75 6c 65 28 29 20 2a 2f 0a 20 20 56 74  module() */.  Vt
d390: 61 62 43 74 78 20 2a 70 56 74 61 62 43 74 78 3b  abCtx *pVtabCtx;
d3a0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43              /* C
d3b0: 6f 6e 74 65 78 74 20 66 6f 72 20 61 63 74 69 76  ontext for activ
d3c0: 65 20 76 74 61 62 20 63 6f 6e 6e 65 63 74 2f 63  e vtab connect/c
d3d0: 72 65 61 74 65 20 2a 2f 0a 20 20 56 54 61 62 6c  reate */.  VTabl
d3e0: 65 20 2a 2a 61 56 54 72 61 6e 73 3b 20 20 20 20  e **aVTrans;    
d3f0: 20 20 20 20 20 20 20 20 20 2f 2a 20 56 69 72 74           /* Virt
d400: 75 61 6c 20 74 61 62 6c 65 73 20 77 69 74 68 20  ual tables with 
d410: 6f 70 65 6e 20 74 72 61 6e 73 61 63 74 69 6f 6e  open transaction
d420: 73 20 2a 2f 0a 20 20 56 54 61 62 6c 65 20 2a 70  s */.  VTable *p
d430: 44 69 73 63 6f 6e 6e 65 63 74 3b 20 20 20 20 20  Disconnect;     
d440: 20 20 20 20 20 2f 2a 20 44 69 73 63 6f 6e 6e 65       /* Disconne
d450: 63 74 20 74 68 65 73 65 20 69 6e 20 6e 65 78 74  ct these in next
d460: 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65   sqlite3_prepare
d470: 28 29 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 48  () */.#endif.  H
d480: 61 73 68 20 61 46 75 6e 63 3b 20 20 20 20 20 20  ash aFunc;      
d490: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
d4a0: 48 61 73 68 20 74 61 62 6c 65 20 6f 66 20 63 6f  Hash table of co
d4b0: 6e 6e 65 63 74 69 6f 6e 20 66 75 6e 63 74 69 6f  nnection functio
d4c0: 6e 73 20 2a 2f 0a 20 20 48 61 73 68 20 61 43 6f  ns */.  Hash aCo
d4d0: 6c 6c 53 65 71 3b 20 20 20 20 20 20 20 20 20 20  llSeq;          
d4e0: 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20 63 6f 6c        /* All col
d4f0: 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 73  lating sequences
d500: 20 2a 2f 0a 20 20 42 75 73 79 48 61 6e 64 6c 65   */.  BusyHandle
d510: 72 20 62 75 73 79 48 61 6e 64 6c 65 72 3b 20 20  r busyHandler;  
d520: 20 20 20 20 2f 2a 20 42 75 73 79 20 63 61 6c 6c      /* Busy call
d530: 62 61 63 6b 20 2a 2f 0a 20 20 44 62 20 61 44 62  back */.  Db aDb
d540: 53 74 61 74 69 63 5b 32 5d 3b 20 20 20 20 20 20  Static[2];      
d550: 20 20 20 20 20 20 20 20 2f 2a 20 53 74 61 74 69          /* Stati
d560: 63 20 73 70 61 63 65 20 66 6f 72 20 74 68 65 20  c space for the 
d570: 32 20 64 65 66 61 75 6c 74 20 62 61 63 6b 65 6e  2 default backen
d580: 64 73 20 2a 2f 0a 20 20 53 61 76 65 70 6f 69 6e  ds */.  Savepoin
d590: 74 20 2a 70 53 61 76 65 70 6f 69 6e 74 3b 20 20  t *pSavepoint;  
d5a0: 20 20 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66        /* List of
d5b0: 20 61 63 74 69 76 65 20 73 61 76 65 70 6f 69 6e   active savepoin
d5c0: 74 73 20 2a 2f 0a 20 20 69 6e 74 20 62 75 73 79  ts */.  int busy
d5d0: 54 69 6d 65 6f 75 74 3b 20 20 20 20 20 20 20 20  Timeout;        
d5e0: 20 20 20 20 20 20 2f 2a 20 42 75 73 79 20 68 61        /* Busy ha
d5f0: 6e 64 6c 65 72 20 74 69 6d 65 6f 75 74 2c 20 69  ndler timeout, i
d600: 6e 20 6d 73 65 63 20 2a 2f 0a 20 20 69 6e 74 20  n msec */.  int 
d610: 6e 53 61 76 65 70 6f 69 6e 74 3b 20 20 20 20 20  nSavepoint;     
d620: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
d630: 62 65 72 20 6f 66 20 6e 6f 6e 2d 74 72 61 6e 73  ber of non-trans
d640: 61 63 74 69 6f 6e 20 73 61 76 65 70 6f 69 6e 74  action savepoint
d650: 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 74 61 74  s */.  int nStat
d660: 65 6d 65 6e 74 3b 20 20 20 20 20 20 20 20 20 20  ement;          
d670: 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
d680: 66 20 6e 65 73 74 65 64 20 73 74 61 74 65 6d 65  f nested stateme
d690: 6e 74 2d 74 72 61 6e 73 61 63 74 69 6f 6e 73 20  nt-transactions 
d6a0: 20 2a 2f 0a 20 20 69 36 34 20 6e 44 65 66 65 72   */.  i64 nDefer
d6b0: 72 65 64 43 6f 6e 73 3b 20 20 20 20 20 20 20 20  redCons;        
d6c0: 20 20 20 20 2f 2a 20 4e 65 74 20 64 65 66 65 72      /* Net defer
d6d0: 72 65 64 20 63 6f 6e 73 74 72 61 69 6e 74 73 20  red constraints 
d6e0: 74 68 69 73 20 74 72 61 6e 73 61 63 74 69 6f 6e  this transaction
d6f0: 2e 20 2a 2f 0a 20 20 69 36 34 20 6e 44 65 66 65  . */.  i64 nDefe
d700: 72 72 65 64 49 6d 6d 43 6f 6e 73 3b 20 20 20 20  rredImmCons;    
d710: 20 20 20 20 20 2f 2a 20 4e 65 74 20 64 65 66 65       /* Net defe
d720: 72 72 65 64 20 69 6d 6d 65 64 69 61 74 65 20 63  rred immediate c
d730: 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f 0a 20 20  onstraints */.  
d740: 69 6e 74 20 2a 70 6e 42 79 74 65 73 46 72 65 65  int *pnBytesFree
d750: 64 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  d;            /*
d760: 20 49 66 20 6e 6f 74 20 4e 55 4c 4c 2c 20 69 6e   If not NULL, in
d770: 63 72 65 6d 65 6e 74 20 74 68 69 73 20 69 6e 20  crement this in 
d780: 44 62 46 72 65 65 28 29 20 2a 2f 0a 23 69 66 64  DbFree() */.#ifd
d790: 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ef SQLITE_ENABLE
d7a0: 5f 55 4e 4c 4f 43 4b 5f 4e 4f 54 49 46 59 0a 20  _UNLOCK_NOTIFY. 
d7b0: 20 2f 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e   /* The followin
d7c0: 67 20 76 61 72 69 61 62 6c 65 73 20 61 72 65 20  g variables are 
d7d0: 61 6c 6c 20 70 72 6f 74 65 63 74 65 64 20 62 79  all protected by
d7e0: 20 74 68 65 20 53 54 41 54 49 43 5f 4d 41 53 54   the STATIC_MAST
d7f0: 45 52 0a 20 20 2a 2a 20 6d 75 74 65 78 2c 20 6e  ER.  ** mutex, n
d800: 6f 74 20 62 79 20 73 71 6c 69 74 65 33 2e 6d 75  ot by sqlite3.mu
d810: 74 65 78 2e 20 54 68 65 79 20 61 72 65 20 75 73  tex. They are us
d820: 65 64 20 62 79 20 63 6f 64 65 20 69 6e 20 6e 6f  ed by code in no
d830: 74 69 66 79 2e 63 2e 0a 20 20 2a 2a 0a 20 20 2a  tify.c..  **.  *
d840: 2a 20 57 68 65 6e 20 58 2e 70 55 6e 6c 6f 63 6b  * When X.pUnlock
d850: 43 6f 6e 6e 65 63 74 69 6f 6e 3d 3d 59 2c 20 74  Connection==Y, t
d860: 68 61 74 20 6d 65 61 6e 73 20 74 68 61 74 20 58  hat means that X
d870: 20 69 73 20 77 61 69 74 69 6e 67 20 66 6f 72 20   is waiting for 
d880: 59 20 74 6f 0a 20 20 2a 2a 20 75 6e 6c 6f 63 6b  Y to.  ** unlock
d890: 20 73 6f 20 74 68 61 74 20 69 74 20 63 61 6e 20   so that it can 
d8a0: 70 72 6f 63 65 65 64 2e 0a 20 20 2a 2a 0a 20 20  proceed..  **.  
d8b0: 2a 2a 20 57 68 65 6e 20 58 2e 70 42 6c 6f 63 6b  ** When X.pBlock
d8c0: 69 6e 67 43 6f 6e 6e 65 63 74 69 6f 6e 3d 3d 59  ingConnection==Y
d8d0: 2c 20 74 68 61 74 20 6d 65 61 6e 73 20 74 68 61  , that means tha
d8e0: 74 20 73 6f 6d 65 74 68 69 6e 67 20 74 68 61 74  t something that
d8f0: 20 58 20 74 72 69 65 64 0a 20 20 2a 2a 20 74 72   X tried.  ** tr
d900: 69 65 64 20 74 6f 20 64 6f 20 72 65 63 65 6e 74  ied to do recent
d910: 6c 79 20 66 61 69 6c 65 64 20 77 69 74 68 20 61  ly failed with a
d920: 6e 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44 20  n SQLITE_LOCKED 
d930: 65 72 72 6f 72 20 64 75 65 20 74 6f 20 6c 6f 63  error due to loc
d940: 6b 73 0a 20 20 2a 2a 20 68 65 6c 64 20 62 79 20  ks.  ** held by 
d950: 59 2e 0a 20 20 2a 2f 0a 20 20 73 71 6c 69 74 65  Y..  */.  sqlite
d960: 33 20 2a 70 42 6c 6f 63 6b 69 6e 67 43 6f 6e 6e  3 *pBlockingConn
d970: 65 63 74 69 6f 6e 3b 20 2f 2a 20 43 6f 6e 6e 65  ection; /* Conne
d980: 63 74 69 6f 6e 20 74 68 61 74 20 63 61 75 73 65  ction that cause
d990: 64 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44 20  d SQLITE_LOCKED 
d9a0: 2a 2f 0a 20 20 73 71 6c 69 74 65 33 20 2a 70 55  */.  sqlite3 *pU
d9b0: 6e 6c 6f 63 6b 43 6f 6e 6e 65 63 74 69 6f 6e 3b  nlockConnection;
d9c0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f             /* Co
d9d0: 6e 6e 65 63 74 69 6f 6e 20 74 6f 20 77 61 74 63  nnection to watc
d9e0: 68 20 66 6f 72 20 75 6e 6c 6f 63 6b 20 2a 2f 0a  h for unlock */.
d9f0: 20 20 76 6f 69 64 20 2a 70 55 6e 6c 6f 63 6b 41    void *pUnlockA
da00: 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  rg;             
da10: 20 20 20 20 20 20 20 20 2f 2a 20 41 72 67 75 6d          /* Argum
da20: 65 6e 74 20 74 6f 20 78 55 6e 6c 6f 63 6b 4e 6f  ent to xUnlockNo
da30: 74 69 66 79 20 2a 2f 0a 20 20 76 6f 69 64 20 28  tify */.  void (
da40: 2a 78 55 6e 6c 6f 63 6b 4e 6f 74 69 66 79 29 28  *xUnlockNotify)(
da50: 76 6f 69 64 20 2a 2a 2c 20 69 6e 74 29 3b 20 20  void **, int);  
da60: 2f 2a 20 55 6e 6c 6f 63 6b 20 6e 6f 74 69 66 79  /* Unlock notify
da70: 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 73   callback */.  s
da80: 71 6c 69 74 65 33 20 2a 70 4e 65 78 74 42 6c 6f  qlite3 *pNextBlo
da90: 63 6b 65 64 3b 20 20 20 20 20 20 20 20 2f 2a 20  cked;        /* 
daa0: 4e 65 78 74 20 69 6e 20 6c 69 73 74 20 6f 66 20  Next in list of 
dab0: 61 6c 6c 20 62 6c 6f 63 6b 65 64 20 63 6f 6e 6e  all blocked conn
dac0: 65 63 74 69 6f 6e 73 20 2a 2f 0a 23 65 6e 64 69  ections */.#endi
dad0: 66 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  f.#ifdef SQLITE_
dae0: 55 53 45 52 5f 41 55 54 48 45 4e 54 49 43 41 54  USER_AUTHENTICAT
daf0: 49 4f 4e 0a 20 20 73 71 6c 69 74 65 33 5f 75 73  ION.  sqlite3_us
db00: 65 72 61 75 74 68 20 61 75 74 68 3b 20 20 20 20  erauth auth;    
db10: 20 20 20 20 2f 2a 20 55 73 65 72 20 61 75 74 68      /* User auth
db20: 65 6e 74 69 63 61 74 69 6f 6e 20 69 6e 66 6f 72  entication infor
db30: 6d 61 74 69 6f 6e 20 2a 2f 0a 23 65 6e 64 69 66  mation */.#endif
db40: 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20 6d 61 63  .};../*.** A mac
db50: 72 6f 20 74 6f 20 64 69 73 63 6f 76 65 72 20 74  ro to discover t
db60: 68 65 20 65 6e 63 6f 64 69 6e 67 20 6f 66 20 61  he encoding of a
db70: 20 64 61 74 61 62 61 73 65 2e 0a 2a 2f 0a 23 64   database..*/.#d
db80: 65 66 69 6e 65 20 53 43 48 45 4d 41 5f 45 4e 43  efine SCHEMA_ENC
db90: 28 64 62 29 20 28 28 64 62 29 2d 3e 61 44 62 5b  (db) ((db)->aDb[
dba0: 30 5d 2e 70 53 63 68 65 6d 61 2d 3e 65 6e 63 29  0].pSchema->enc)
dbb0: 0a 23 64 65 66 69 6e 65 20 45 4e 43 28 64 62 29  .#define ENC(db)
dbc0: 20 20 20 20 20 20 20 20 28 28 64 62 29 2d 3e 65          ((db)->e
dbd0: 6e 63 29 0a 0a 2f 2a 0a 2a 2a 20 50 6f 73 73 69  nc)../*.** Possi
dbe0: 62 6c 65 20 76 61 6c 75 65 73 20 66 6f 72 20 74  ble values for t
dbf0: 68 65 20 73 71 6c 69 74 65 33 2e 66 6c 61 67 73  he sqlite3.flags
dc00: 2e 0a 2a 2a 0a 2a 2a 20 56 61 6c 75 65 20 63 6f  ..**.** Value co
dc10: 6e 73 74 72 61 69 6e 74 73 20 28 65 6e 66 6f 72  nstraints (enfor
dc20: 63 65 64 20 76 69 61 20 61 73 73 65 72 74 28 29  ced via assert()
dc30: 29 3a 0a 2a 2a 20 20 20 20 20 20 53 51 4c 49 54  ):.**      SQLIT
dc40: 45 5f 46 75 6c 6c 46 53 79 6e 63 20 20 20 20 20  E_FullFSync     
dc50: 3d 3d 20 50 41 47 45 52 5f 46 55 4c 4c 46 53 59  == PAGER_FULLFSY
dc60: 4e 43 0a 2a 2a 20 20 20 20 20 20 53 51 4c 49 54  NC.**      SQLIT
dc70: 45 5f 43 6b 70 74 46 75 6c 6c 46 53 79 6e 63 20  E_CkptFullFSync 
dc80: 3d 3d 20 50 41 47 45 52 5f 43 4b 50 54 5f 46 55  == PAGER_CKPT_FU
dc90: 4c 4c 46 53 59 4e 43 0a 2a 2a 20 20 20 20 20 20  LLFSYNC.**      
dca0: 53 51 4c 49 54 45 5f 43 61 63 68 65 53 70 69 6c  SQLITE_CacheSpil
dcb0: 6c 20 20 20 20 3d 3d 20 50 41 47 45 52 5f 43 41  l    == PAGER_CA
dcc0: 43 48 45 5f 53 50 49 4c 4c 0a 2a 2f 0a 23 64 65  CHE_SPILL.*/.#de
dcd0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 57 72 69 74  fine SQLITE_Writ
dce0: 65 53 63 68 65 6d 61 20 20 20 20 30 78 30 30 30  eSchema    0x000
dcf0: 30 30 30 30 31 20 20 2f 2a 20 4f 4b 20 74 6f 20  00001  /* OK to 
dd00: 75 70 64 61 74 65 20 53 51 4c 49 54 45 5f 4d 41  update SQLITE_MA
dd10: 53 54 45 52 20 2a 2f 0a 23 64 65 66 69 6e 65 20  STER */.#define 
dd20: 53 51 4c 49 54 45 5f 4c 65 67 61 63 79 46 69 6c  SQLITE_LegacyFil
dd30: 65 46 6d 74 20 20 30 78 30 30 30 30 30 30 30 32  eFmt  0x00000002
dd40: 20 20 2f 2a 20 43 72 65 61 74 65 20 6e 65 77 20    /* Create new 
dd50: 64 61 74 61 62 61 73 65 73 20 69 6e 20 66 6f 72  databases in for
dd60: 6d 61 74 20 31 20 2a 2f 0a 23 64 65 66 69 6e 65  mat 1 */.#define
dd70: 20 53 51 4c 49 54 45 5f 46 75 6c 6c 43 6f 6c 4e   SQLITE_FullColN
dd80: 61 6d 65 73 20 20 20 30 78 30 30 30 30 30 30 30  ames   0x0000000
dd90: 34 20 20 2f 2a 20 53 68 6f 77 20 66 75 6c 6c 20  4  /* Show full 
dda0: 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 6f 6e 20  column names on 
ddb0: 53 45 4c 45 43 54 20 2a 2f 0a 23 64 65 66 69 6e  SELECT */.#defin
ddc0: 65 20 53 51 4c 49 54 45 5f 46 75 6c 6c 46 53 79  e SQLITE_FullFSy
ddd0: 6e 63 20 20 20 20 20 20 30 78 30 30 30 30 30 30  nc      0x000000
dde0: 30 38 20 20 2f 2a 20 55 73 65 20 66 75 6c 6c 20  08  /* Use full 
ddf0: 66 73 79 6e 63 20 6f 6e 20 74 68 65 20 62 61 63  fsync on the bac
de00: 6b 65 6e 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20  kend */.#define 
de10: 53 51 4c 49 54 45 5f 43 6b 70 74 46 75 6c 6c 46  SQLITE_CkptFullF
de20: 53 79 6e 63 20 20 30 78 30 30 30 30 30 30 31 30  Sync  0x00000010
de30: 20 20 2f 2a 20 55 73 65 20 66 75 6c 6c 20 66 73    /* Use full fs
de40: 79 6e 63 20 66 6f 72 20 63 68 65 63 6b 70 6f 69  ync for checkpoi
de50: 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  nt */.#define SQ
de60: 4c 49 54 45 5f 43 61 63 68 65 53 70 69 6c 6c 20  LITE_CacheSpill 
de70: 20 20 20 20 30 78 30 30 30 30 30 30 32 30 20 20      0x00000020  
de80: 2f 2a 20 4f 4b 20 74 6f 20 73 70 69 6c 6c 20 70  /* OK to spill p
de90: 61 67 65 72 20 63 61 63 68 65 20 2a 2f 0a 23 64  ager cache */.#d
dea0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 68 6f  efine SQLITE_Sho
deb0: 72 74 43 6f 6c 4e 61 6d 65 73 20 20 30 78 30 30  rtColNames  0x00
dec0: 30 30 30 30 34 30 20 20 2f 2a 20 53 68 6f 77 20  000040  /* Show 
ded0: 73 68 6f 72 74 20 63 6f 6c 75 6d 6e 73 20 6e 61  short columns na
dee0: 6d 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  mes */.#define S
def0: 51 4c 49 54 45 5f 43 6f 75 6e 74 52 6f 77 73 20  QLITE_CountRows 
df00: 20 20 20 20 20 30 78 30 30 30 30 30 30 38 30 20       0x00000080 
df10: 20 2f 2a 20 43 6f 75 6e 74 20 72 6f 77 73 20 63   /* Count rows c
df20: 68 61 6e 67 65 64 20 62 79 20 49 4e 53 45 52 54  hanged by INSERT
df30: 2c 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20  , */.           
df40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
df50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
df60: 2a 20 20 20 44 45 4c 45 54 45 2c 20 6f 72 20 55  *   DELETE, or U
df70: 50 44 41 54 45 20 61 6e 64 20 72 65 74 75 72 6e  PDATE and return
df80: 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20   */.            
df90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dfa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
dfb0: 20 20 20 74 68 65 20 63 6f 75 6e 74 20 75 73 69     the count usi
dfc0: 6e 67 20 61 20 63 61 6c 6c 62 61 63 6b 2e 20 2a  ng a callback. *
dfd0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
dfe0: 5f 4e 75 6c 6c 43 61 6c 6c 62 61 63 6b 20 20 20  _NullCallback   
dff0: 30 78 30 30 30 30 30 31 30 30 20 20 2f 2a 20 49  0x00000100  /* I
e000: 6e 76 6f 6b 65 20 74 68 65 20 63 61 6c 6c 62 61  nvoke the callba
e010: 63 6b 20 6f 6e 63 65 20 69 66 20 74 68 65 20 2a  ck once if the *
e020: 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  /.              
e030: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e040: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 20              /*  
e050: 20 72 65 73 75 6c 74 20 73 65 74 20 69 73 20 65   result set is e
e060: 6d 70 74 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20  mpty */.#define 
e070: 53 51 4c 49 54 45 5f 49 67 6e 6f 72 65 43 68 65  SQLITE_IgnoreChe
e080: 63 6b 73 20 20 20 30 78 30 30 30 30 30 32 30 30  cks   0x00000200
e090: 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 65 6e 66 6f    /* Do not enfo
e0a0: 72 63 65 20 63 68 65 63 6b 20 63 6f 6e 73 74 72  rce check constr
e0b0: 61 69 6e 74 73 20 2a 2f 0a 23 64 65 66 69 6e 65  aints */.#define
e0c0: 20 53 51 4c 49 54 45 5f 52 65 61 64 55 6e 63 6f   SQLITE_ReadUnco
e0d0: 6d 6d 69 74 20 20 20 30 78 30 30 30 30 30 34 30  mmit   0x0000040
e0e0: 30 20 20 2f 2a 20 52 45 41 44 20 55 4e 43 4f 4d  0  /* READ UNCOM
e0f0: 4d 49 54 54 45 44 20 69 6e 20 73 68 61 72 65 64  MITTED in shared
e100: 2d 63 61 63 68 65 20 2a 2f 0a 23 64 65 66 69 6e  -cache */.#defin
e110: 65 20 53 51 4c 49 54 45 5f 4e 6f 43 6b 70 74 4f  e SQLITE_NoCkptO
e120: 6e 43 6c 6f 73 65 20 20 30 78 30 30 30 30 30 38  nClose  0x000008
e130: 30 30 20 20 2f 2a 20 4e 6f 20 63 68 65 63 6b 70  00  /* No checkp
e140: 6f 69 6e 74 20 6f 6e 20 63 6c 6f 73 65 28 29 2f  oint on close()/
e150: 44 45 54 41 43 48 20 2a 2f 0a 23 64 65 66 69 6e  DETACH */.#defin
e160: 65 20 53 51 4c 49 54 45 5f 52 65 76 65 72 73 65  e SQLITE_Reverse
e170: 4f 72 64 65 72 20 20 20 30 78 30 30 30 30 31 30  Order   0x000010
e180: 30 30 20 20 2f 2a 20 52 65 76 65 72 73 65 20 75  00  /* Reverse u
e190: 6e 6f 72 64 65 72 65 64 20 53 45 4c 45 43 54 73  nordered SELECTs
e1a0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
e1b0: 54 45 5f 52 65 63 54 72 69 67 67 65 72 73 20 20  TE_RecTriggers  
e1c0: 20 20 30 78 30 30 30 30 32 30 30 30 20 20 2f 2a    0x00002000  /*
e1d0: 20 45 6e 61 62 6c 65 20 72 65 63 75 72 73 69 76   Enable recursiv
e1e0: 65 20 74 72 69 67 67 65 72 73 20 2a 2f 0a 23 64  e triggers */.#d
e1f0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 6f 72  efine SQLITE_For
e200: 65 69 67 6e 4b 65 79 73 20 20 20 20 30 78 30 30  eignKeys    0x00
e210: 30 30 34 30 30 30 20 20 2f 2a 20 45 6e 66 6f 72  004000  /* Enfor
e220: 63 65 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 63  ce foreign key c
e230: 6f 6e 73 74 72 61 69 6e 74 73 20 20 2a 2f 0a 23  onstraints  */.#
e240: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 75  define SQLITE_Au
e250: 74 6f 49 6e 64 65 78 20 20 20 20 20 20 30 78 30  toIndex      0x0
e260: 30 30 30 38 30 30 30 20 20 2f 2a 20 45 6e 61 62  0008000  /* Enab
e270: 6c 65 20 61 75 74 6f 6d 61 74 69 63 20 69 6e 64  le automatic ind
e280: 65 78 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  exes */.#define 
e290: 53 51 4c 49 54 45 5f 4c 6f 61 64 45 78 74 65 6e  SQLITE_LoadExten
e2a0: 73 69 6f 6e 20 20 30 78 30 30 30 31 30 30 30 30  sion  0x00010000
e2b0: 20 20 2f 2a 20 45 6e 61 62 6c 65 20 6c 6f 61 64    /* Enable load
e2c0: 5f 65 78 74 65 6e 73 69 6f 6e 20 2a 2f 0a 23 64  _extension */.#d
e2d0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4c 6f 61  efine SQLITE_Loa
e2e0: 64 45 78 74 46 75 6e 63 20 20 20 20 30 78 30 30  dExtFunc    0x00
e2f0: 30 32 30 30 30 30 20 20 2f 2a 20 45 6e 61 62 6c  020000  /* Enabl
e300: 65 20 6c 6f 61 64 5f 65 78 74 65 6e 73 69 6f 6e  e load_extension
e310: 28 29 20 53 51 4c 20 66 75 6e 63 20 2a 2f 0a 23  () SQL func */.#
e320: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 6e  define SQLITE_En
e330: 61 62 6c 65 54 72 69 67 67 65 72 20 20 30 78 30  ableTrigger  0x0
e340: 30 30 34 30 30 30 30 20 20 2f 2a 20 54 72 75 65  0040000  /* True
e350: 20 74 6f 20 65 6e 61 62 6c 65 20 74 72 69 67 67   to enable trigg
e360: 65 72 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ers */.#define S
e370: 51 4c 49 54 45 5f 44 65 66 65 72 46 4b 73 20 20  QLITE_DeferFKs  
e380: 20 20 20 20 20 30 78 30 30 30 38 30 30 30 30 20       0x00080000 
e390: 20 2f 2a 20 44 65 66 65 72 20 61 6c 6c 20 46 4b   /* Defer all FK
e3a0: 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f 0a   constraints */.
e3b0: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 51  #define SQLITE_Q
e3c0: 75 65 72 79 4f 6e 6c 79 20 20 20 20 20 20 30 78  ueryOnly      0x
e3d0: 30 30 31 30 30 30 30 30 20 20 2f 2a 20 44 69 73  00100000  /* Dis
e3e0: 61 62 6c 65 20 64 61 74 61 62 61 73 65 20 63 68  able database ch
e3f0: 61 6e 67 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65  anges */.#define
e400: 20 53 51 4c 49 54 45 5f 43 65 6c 6c 53 69 7a 65   SQLITE_CellSize
e410: 43 6b 20 20 20 20 20 30 78 30 30 32 30 30 30 30  Ck     0x0020000
e420: 30 20 20 2f 2a 20 43 68 65 63 6b 20 62 74 72 65  0  /* Check btre
e430: 65 20 63 65 6c 6c 20 73 69 7a 65 73 20 6f 6e 20  e cell sizes on 
e440: 6c 6f 61 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20  load */.#define 
e450: 53 51 4c 49 54 45 5f 46 74 73 33 54 6f 6b 65 6e  SQLITE_Fts3Token
e460: 69 7a 65 72 20 20 30 78 30 30 34 30 30 30 30 30  izer  0x00400000
e470: 20 20 2f 2a 20 45 6e 61 62 6c 65 20 66 74 73 33    /* Enable fts3
e480: 5f 74 6f 6b 65 6e 69 7a 65 72 28 32 29 20 2a 2f  _tokenizer(2) */
e490: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
e4a0: 45 6e 61 62 6c 65 51 50 53 47 20 20 20 20 20 30  EnableQPSG     0
e4b0: 78 30 30 38 30 30 30 30 30 20 20 2f 2a 20 51 75  x00800000  /* Qu
e4c0: 65 72 79 20 50 6c 61 6e 6e 65 72 20 53 74 61 62  ery Planner Stab
e4d0: 69 6c 69 74 79 20 47 75 61 72 61 6e 74 65 65 2a  ility Guarantee*
e4e0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
e4f0: 5f 54 72 69 67 67 65 72 45 51 50 20 20 20 20 20  _TriggerEQP     
e500: 30 78 30 31 30 30 30 30 30 30 20 20 2f 2a 20 53  0x01000000  /* S
e510: 68 6f 77 20 74 72 69 67 67 65 72 20 45 58 50 4c  how trigger EXPL
e520: 41 49 4e 20 51 55 45 52 59 20 50 4c 41 4e 20 2a  AIN QUERY PLAN *
e530: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
e540: 5f 52 65 73 65 74 44 61 74 61 62 61 73 65 20 20  _ResetDatabase  
e550: 30 78 30 32 30 30 30 30 30 30 20 20 2f 2a 20 52  0x02000000  /* R
e560: 65 73 65 74 20 74 68 65 20 64 61 74 61 62 61 73  eset the databas
e570: 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  e */.#define SQL
e580: 49 54 45 5f 4c 65 67 61 63 79 41 6c 74 65 72 20  ITE_LegacyAlter 
e590: 20 20 20 30 78 30 34 30 30 30 30 30 30 20 20 2f     0x04000000  /
e5a0: 2a 20 4c 65 67 61 63 79 20 41 4c 54 45 52 20 54  * Legacy ALTER T
e5b0: 41 42 4c 45 20 62 65 68 61 76 69 6f 75 72 20 2a  ABLE behaviour *
e5c0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
e5d0: 5f 4e 6f 53 63 68 65 6d 61 45 72 72 6f 72 20 20  _NoSchemaError  
e5e0: 30 78 30 38 30 30 30 30 30 30 20 20 2f 2a 20 44  0x08000000  /* D
e5f0: 6f 20 6e 6f 74 20 72 65 70 6f 72 74 20 73 63 68  o not report sch
e600: 65 6d 61 20 70 61 72 73 65 20 65 72 72 6f 72 73  ema parse errors
e610: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
e620: 45 5f 44 65 66 65 6e 73 69 76 65 20 20 20 20 20  E_Defensive     
e630: 20 30 78 31 30 30 30 30 30 30 30 20 20 2f 2a 20   0x10000000  /* 
e640: 49 6e 70 75 74 20 53 51 4c 20 69 73 20 6c 69 6b  Input SQL is lik
e650: 65 6c 79 20 68 6f 73 74 69 6c 65 20 2a 2f 0a 0a  ely hostile */..
e660: 2f 2a 20 46 6c 61 67 73 20 75 73 65 64 20 6f 6e  /* Flags used on
e670: 6c 79 20 69 66 20 64 65 62 75 67 67 69 6e 67 20  ly if debugging 
e680: 2a 2f 0a 23 64 65 66 69 6e 65 20 48 49 28 58 29  */.#define HI(X)
e690: 20 20 28 28 75 36 34 29 28 58 29 3c 3c 33 32 29    ((u64)(X)<<32)
e6a0: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44  .#ifdef SQLITE_D
e6b0: 45 42 55 47 0a 23 64 65 66 69 6e 65 20 53 51 4c  EBUG.#define SQL
e6c0: 49 54 45 5f 53 71 6c 54 72 61 63 65 20 20 20 20  ITE_SqlTrace    
e6d0: 20 20 20 48 49 28 30 78 30 30 30 31 29 20 20 2f     HI(0x0001)  /
e6e0: 2a 20 44 65 62 75 67 20 70 72 69 6e 74 20 53 51  * Debug print SQ
e6f0: 4c 20 61 73 20 69 74 20 65 78 65 63 75 74 65 73  L as it executes
e700: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
e710: 54 45 5f 56 64 62 65 4c 69 73 74 69 6e 67 20 20  TE_VdbeListing  
e720: 20 20 48 49 28 30 78 30 30 30 32 29 20 20 2f 2a    HI(0x0002)  /*
e730: 20 44 65 62 75 67 20 6c 69 73 74 69 6e 67 73 20   Debug listings 
e740: 6f 66 20 56 44 42 45 20 70 72 6f 67 73 20 2a 2f  of VDBE progs */
e750: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
e760: 56 64 62 65 54 72 61 63 65 20 20 20 20 20 20 48  VdbeTrace      H
e770: 49 28 30 78 30 30 30 34 29 20 20 2f 2a 20 54 72  I(0x0004)  /* Tr
e780: 75 65 20 74 6f 20 74 72 61 63 65 20 56 44 42 45  ue to trace VDBE
e790: 20 65 78 65 63 75 74 69 6f 6e 20 2a 2f 0a 23 64   execution */.#d
e7a0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 56 64 62  efine SQLITE_Vdb
e7b0: 65 41 64 64 6f 70 54 72 61 63 65 20 48 49 28 30  eAddopTrace HI(0
e7c0: 78 30 30 30 38 29 20 20 2f 2a 20 54 72 61 63 65  x0008)  /* Trace
e7d0: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
e7e0: 70 28 29 20 63 61 6c 6c 73 20 2a 2f 0a 23 64 65  p() calls */.#de
e7f0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 56 64 62 65  fine SQLITE_Vdbe
e800: 45 51 50 20 20 20 20 20 20 20 20 48 49 28 30 78  EQP        HI(0x
e810: 30 30 31 30 29 20 20 2f 2a 20 44 65 62 75 67 20  0010)  /* Debug 
e820: 45 58 50 4c 41 49 4e 20 51 55 45 52 59 20 50 4c  EXPLAIN QUERY PL
e830: 41 4e 20 2a 2f 0a 23 65 6e 64 69 66 0a 0a 2f 2a  AN */.#endif../*
e840: 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75  .** Allowed valu
e850: 65 73 20 66 6f 72 20 73 71 6c 69 74 65 33 2e 6d  es for sqlite3.m
e860: 44 62 46 6c 61 67 73 0a 2a 2f 0a 23 64 65 66 69  DbFlags.*/.#defi
e870: 6e 65 20 44 42 46 4c 41 47 5f 53 63 68 65 6d 61  ne DBFLAG_Schema
e880: 43 68 61 6e 67 65 20 20 20 30 78 30 30 30 31 20  Change   0x0001 
e890: 20 2f 2a 20 55 6e 63 6f 6d 6d 69 74 74 65 64 20   /* Uncommitted 
e8a0: 48 61 73 68 20 74 61 62 6c 65 20 63 68 61 6e 67  Hash table chang
e8b0: 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 44 42  es */.#define DB
e8c0: 46 4c 41 47 5f 50 72 65 66 65 72 42 75 69 6c 74  FLAG_PreferBuilt
e8d0: 69 6e 20 20 30 78 30 30 30 32 20 20 2f 2a 20 50  in  0x0002  /* P
e8e0: 72 65 66 65 72 65 6e 63 65 20 74 6f 20 62 75 69  reference to bui
e8f0: 6c 74 2d 69 6e 20 66 75 6e 63 73 20 2a 2f 0a 23  lt-in funcs */.#
e900: 64 65 66 69 6e 65 20 44 42 46 4c 41 47 5f 56 61  define DBFLAG_Va
e910: 63 75 75 6d 20 20 20 20 20 20 20 20 20 30 78 30  cuum         0x0
e920: 30 30 34 20 20 2f 2a 20 43 75 72 72 65 6e 74 6c  004  /* Currentl
e930: 79 20 69 6e 20 61 20 56 41 43 55 55 4d 20 2a 2f  y in a VACUUM */
e940: 0a 23 64 65 66 69 6e 65 20 44 42 46 4c 41 47 5f  .#define DBFLAG_
e950: 53 63 68 65 6d 61 4b 6e 6f 77 6e 4f 6b 20 20 30  SchemaKnownOk  0
e960: 78 30 30 30 38 20 20 2f 2a 20 53 63 68 65 6d 61  x0008  /* Schema
e970: 20 69 73 20 6b 6e 6f 77 6e 20 74 6f 20 62 65 20   is known to be 
e980: 76 61 6c 69 64 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20  valid */../*.** 
e990: 42 69 74 73 20 6f 66 20 74 68 65 20 73 71 6c 69  Bits of the sqli
e9a0: 74 65 33 2e 64 62 4f 70 74 46 6c 61 67 73 20 66  te3.dbOptFlags f
e9b0: 69 65 6c 64 20 74 68 61 74 20 61 72 65 20 75 73  ield that are us
e9c0: 65 64 20 62 79 20 74 68 65 0a 2a 2a 20 73 71 6c  ed by the.** sql
e9d0: 69 74 65 33 5f 74 65 73 74 5f 63 6f 6e 74 72 6f  ite3_test_contro
e9e0: 6c 28 53 51 4c 49 54 45 5f 54 45 53 54 43 54 52  l(SQLITE_TESTCTR
e9f0: 4c 5f 4f 50 54 49 4d 49 5a 41 54 49 4f 4e 53 2c  L_OPTIMIZATIONS,
ea00: 2e 2e 2e 29 20 69 6e 74 65 72 66 61 63 65 20 74  ...) interface t
ea10: 6f 0a 2a 2a 20 73 65 6c 65 63 74 69 76 65 6c 79  o.** selectively
ea20: 20 64 69 73 61 62 6c 65 20 76 61 72 69 6f 75 73   disable various
ea30: 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73 2e 0a   optimizations..
ea40: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
ea50: 45 5f 51 75 65 72 79 46 6c 61 74 74 65 6e 65 72  E_QueryFlattener
ea60: 20 30 78 30 30 30 31 20 20 20 2f 2a 20 51 75 65   0x0001   /* Que
ea70: 72 79 20 66 6c 61 74 74 65 6e 69 6e 67 20 2a 2f  ry flattening */
ea80: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
ea90: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 20 30             /*  0
eaa0: 78 30 30 30 32 20 20 20 61 76 61 69 6c 61 62 6c  x0002   availabl
eab0: 65 20 66 6f 72 20 72 65 75 73 65 20 2a 2f 0a 23  e for reuse */.#
eac0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 47 72  define SQLITE_Gr
ead0: 6f 75 70 42 79 4f 72 64 65 72 20 20 20 30 78 30  oupByOrder   0x0
eae0: 30 30 34 20 20 20 2f 2a 20 47 52 4f 55 50 42 59  004   /* GROUPBY
eaf0: 20 63 6f 76 65 72 20 6f 66 20 4f 52 44 45 52 42   cover of ORDERB
eb00: 59 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  Y */.#define SQL
eb10: 49 54 45 5f 46 61 63 74 6f 72 4f 75 74 43 6f 6e  ITE_FactorOutCon
eb20: 73 74 20 30 78 30 30 30 38 20 20 20 2f 2a 20 43  st 0x0008   /* C
eb30: 6f 6e 73 74 61 6e 74 20 66 61 63 74 6f 72 69 6e  onstant factorin
eb40: 67 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  g */.#define SQL
eb50: 49 54 45 5f 44 69 73 74 69 6e 63 74 4f 70 74 20  ITE_DistinctOpt 
eb60: 20 20 20 30 78 30 30 31 30 20 20 20 2f 2a 20 44     0x0010   /* D
eb70: 49 53 54 49 4e 43 54 20 75 73 69 6e 67 20 69 6e  ISTINCT using in
eb80: 64 65 78 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65  dexes */.#define
eb90: 20 53 51 4c 49 54 45 5f 43 6f 76 65 72 49 64 78   SQLITE_CoverIdx
eba0: 53 63 61 6e 20 20 20 30 78 30 30 32 30 20 20 20  Scan   0x0020   
ebb0: 2f 2a 20 43 6f 76 65 72 69 6e 67 20 69 6e 64 65  /* Covering inde
ebc0: 78 20 73 63 61 6e 73 20 2a 2f 0a 23 64 65 66 69  x scans */.#defi
ebd0: 6e 65 20 53 51 4c 49 54 45 5f 4f 72 64 65 72 42  ne SQLITE_OrderB
ebe0: 79 49 64 78 4a 6f 69 6e 20 30 78 30 30 34 30 20  yIdxJoin 0x0040 
ebf0: 20 20 2f 2a 20 4f 52 44 45 52 20 42 59 20 6f 66    /* ORDER BY of
ec00: 20 6a 6f 69 6e 73 20 76 69 61 20 69 6e 64 65 78   joins via index
ec10: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
ec20: 54 45 5f 54 72 61 6e 73 69 74 69 76 65 20 20 20  TE_Transitive   
ec30: 20 20 30 78 30 30 38 30 20 20 20 2f 2a 20 54 72    0x0080   /* Tr
ec40: 61 6e 73 69 74 69 76 65 20 63 6f 6e 73 74 72 61  ansitive constra
ec50: 69 6e 74 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ints */.#define 
ec60: 53 51 4c 49 54 45 5f 4f 6d 69 74 4e 6f 6f 70 4a  SQLITE_OmitNoopJ
ec70: 6f 69 6e 20 20 20 30 78 30 31 30 30 20 20 20 2f  oin   0x0100   /
ec80: 2a 20 4f 6d 69 74 20 75 6e 75 73 65 64 20 74 61  * Omit unused ta
ec90: 62 6c 65 73 20 69 6e 20 6a 6f 69 6e 73 20 2a 2f  bles in joins */
eca0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
ecb0: 43 6f 75 6e 74 4f 66 56 69 65 77 20 20 20 20 30  CountOfView    0
ecc0: 78 30 32 30 30 20 20 20 2f 2a 20 54 68 65 20 63  x0200   /* The c
ecd0: 6f 75 6e 74 2d 6f 66 2d 76 69 65 77 20 6f 70 74  ount-of-view opt
ece0: 69 6d 69 7a 61 74 69 6f 6e 20 2a 2f 0a 23 64 65  imization */.#de
ecf0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 75 72 73  fine SQLITE_Curs
ed00: 6f 72 48 69 6e 74 73 20 20 20 20 30 78 30 34 30  orHints    0x040
ed10: 30 20 20 20 2f 2a 20 41 64 64 20 4f 50 5f 43 75  0   /* Add OP_Cu
ed20: 72 73 6f 72 48 69 6e 74 20 6f 70 63 6f 64 65 73  rsorHint opcodes
ed30: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
ed40: 54 45 5f 53 74 61 74 33 34 20 20 20 20 20 20 20  TE_Stat34       
ed50: 20 20 30 78 30 38 30 30 20 20 20 2f 2a 20 55 73    0x0800   /* Us
ed60: 65 20 53 54 41 54 33 20 6f 72 20 53 54 41 54 34  e STAT3 or STAT4
ed70: 20 64 61 74 61 20 2a 2f 0a 20 20 20 2f 2a 20 54   data */.   /* T
ed80: 48 33 20 65 78 70 65 63 74 73 20 74 68 65 20 53  H3 expects the S
ed90: 74 61 74 33 34 20 20 5e 5e 5e 5e 5e 5e 20 76 61  tat34  ^^^^^^ va
eda0: 6c 75 65 20 74 6f 20 62 65 20 30 78 30 38 30 30  lue to be 0x0800
edb0: 2e 20 20 44 6f 6e 27 74 20 63 68 61 6e 67 65 20  .  Don't change 
edc0: 69 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  it */.#define SQ
edd0: 4c 49 54 45 5f 50 75 73 68 44 6f 77 6e 20 20 20  LITE_PushDown   
ede0: 20 20 20 20 30 78 31 30 30 30 20 20 20 2f 2a 20      0x1000   /* 
edf0: 54 68 65 20 70 75 73 68 2d 64 6f 77 6e 20 6f 70  The push-down op
ee00: 74 69 6d 69 7a 61 74 69 6f 6e 20 2a 2f 0a 23 64  timization */.#d
ee10: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 69 6d  efine SQLITE_Sim
ee20: 70 6c 69 66 79 4a 6f 69 6e 20 20 20 30 78 32 30  plifyJoin   0x20
ee30: 30 30 20 20 20 2f 2a 20 43 6f 6e 76 65 72 74 20  00   /* Convert 
ee40: 4c 45 46 54 20 4a 4f 49 4e 20 74 6f 20 4a 4f 49  LEFT JOIN to JOI
ee50: 4e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  N */.#define SQL
ee60: 49 54 45 5f 53 6b 69 70 53 63 61 6e 20 20 20 20  ITE_SkipScan    
ee70: 20 20 20 30 78 34 30 30 30 20 20 20 2f 2a 20 53     0x4000   /* S
ee80: 6b 69 70 2d 73 63 61 6e 73 20 2a 2f 0a 23 64 65  kip-scans */.#de
ee90: 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 72 6f 70  fine SQLITE_Prop
eea0: 61 67 61 74 65 43 6f 6e 73 74 20 30 78 38 30 30  agateConst 0x800
eeb0: 30 20 20 20 2f 2a 20 54 68 65 20 63 6f 6e 73 74  0   /* The const
eec0: 61 6e 74 20 70 72 6f 70 61 67 61 74 69 6f 6e 20  ant propagation 
eed0: 6f 70 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  opt */.#define S
eee0: 51 4c 49 54 45 5f 41 6c 6c 4f 70 74 73 20 20 20  QLITE_AllOpts   
eef0: 20 20 20 20 20 30 78 66 66 66 66 20 20 20 2f 2a       0xffff   /*
ef00: 20 41 6c 6c 20 6f 70 74 69 6d 69 7a 61 74 69 6f   All optimizatio
ef10: 6e 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 4d 61 63  ns */../*.** Mac
ef20: 72 6f 73 20 66 6f 72 20 74 65 73 74 69 6e 67 20  ros for testing 
ef30: 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 6f  whether or not o
ef40: 70 74 69 6d 69 7a 61 74 69 6f 6e 73 20 61 72 65  ptimizations are
ef50: 20 65 6e 61 62 6c 65 64 20 6f 72 20 64 69 73 61   enabled or disa
ef60: 62 6c 65 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  bled..*/.#define
ef70: 20 4f 70 74 69 6d 69 7a 61 74 69 6f 6e 44 69 73   OptimizationDis
ef80: 61 62 6c 65 64 28 64 62 2c 20 6d 61 73 6b 29 20  abled(db, mask) 
ef90: 20 28 28 28 64 62 29 2d 3e 64 62 4f 70 74 46 6c   (((db)->dbOptFl
efa0: 61 67 73 26 28 6d 61 73 6b 29 29 21 3d 30 29 0a  ags&(mask))!=0).
efb0: 23 64 65 66 69 6e 65 20 4f 70 74 69 6d 69 7a 61  #define Optimiza
efc0: 74 69 6f 6e 45 6e 61 62 6c 65 64 28 64 62 2c 20  tionEnabled(db, 
efd0: 6d 61 73 6b 29 20 20 20 28 28 28 64 62 29 2d 3e  mask)   (((db)->
efe0: 64 62 4f 70 74 46 6c 61 67 73 26 28 6d 61 73 6b  dbOptFlags&(mask
eff0: 29 29 3d 3d 30 29 0a 0a 2f 2a 0a 2a 2a 20 52 65  ))==0)../*.** Re
f000: 74 75 72 6e 20 74 72 75 65 20 69 66 20 69 74 20  turn true if it 
f010: 4f 4b 20 74 6f 20 66 61 63 74 6f 72 20 63 6f 6e  OK to factor con
f020: 73 74 61 6e 74 20 65 78 70 72 65 73 73 69 6f 6e  stant expression
f030: 73 20 69 6e 74 6f 20 74 68 65 20 69 6e 69 74 69  s into the initi
f040: 61 6c 69 7a 61 74 69 6f 6e 0a 2a 2a 20 63 6f 64  alization.** cod
f050: 65 2e 20 54 68 65 20 61 72 67 75 6d 65 6e 74 20  e. The argument 
f060: 69 73 20 61 20 50 61 72 73 65 20 6f 62 6a 65 63  is a Parse objec
f070: 74 20 66 6f 72 20 74 68 65 20 63 6f 64 65 20 67  t for the code g
f080: 65 6e 65 72 61 74 6f 72 2e 0a 2a 2f 0a 23 64 65  enerator..*/.#de
f090: 66 69 6e 65 20 43 6f 6e 73 74 46 61 63 74 6f 72  fine ConstFactor
f0a0: 4f 6b 28 50 29 20 28 28 50 29 2d 3e 6f 6b 43 6f  Ok(P) ((P)->okCo
f0b0: 6e 73 74 46 61 63 74 6f 72 29 0a 0a 2f 2a 0a 2a  nstFactor)../*.*
f0c0: 2a 20 50 6f 73 73 69 62 6c 65 20 76 61 6c 75 65  * Possible value
f0d0: 73 20 66 6f 72 20 74 68 65 20 73 71 6c 69 74 65  s for the sqlite
f0e0: 2e 6d 61 67 69 63 20 66 69 65 6c 64 2e 0a 2a 2a  .magic field..**
f0f0: 20 54 68 65 20 6e 75 6d 62 65 72 73 20 61 72 65   The numbers are
f100: 20 6f 62 74 61 69 6e 65 64 20 61 74 20 72 61 6e   obtained at ran
f110: 64 6f 6d 20 61 6e 64 20 68 61 76 65 20 6e 6f 20  dom and have no 
f120: 73 70 65 63 69 61 6c 20 6d 65 61 6e 69 6e 67 2c  special meaning,
f130: 20 6f 74 68 65 72 0a 2a 2a 20 74 68 61 6e 20 62   other.** than b
f140: 65 69 6e 67 20 64 69 73 74 69 6e 63 74 20 66 72  eing distinct fr
f150: 6f 6d 20 6f 6e 65 20 61 6e 6f 74 68 65 72 2e 0a  om one another..
f160: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
f170: 45 5f 4d 41 47 49 43 5f 4f 50 45 4e 20 20 20 20  E_MAGIC_OPEN    
f180: 20 30 78 61 30 32 39 61 36 39 37 20 20 2f 2a 20   0xa029a697  /* 
f190: 44 61 74 61 62 61 73 65 20 69 73 20 6f 70 65 6e  Database is open
f1a0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
f1b0: 54 45 5f 4d 41 47 49 43 5f 43 4c 4f 53 45 44 20  TE_MAGIC_CLOSED 
f1c0: 20 20 30 78 39 66 33 63 32 64 33 33 20 20 2f 2a    0x9f3c2d33  /*
f1d0: 20 44 61 74 61 62 61 73 65 20 69 73 20 63 6c 6f   Database is clo
f1e0: 73 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  sed */.#define S
f1f0: 51 4c 49 54 45 5f 4d 41 47 49 43 5f 53 49 43 4b  QLITE_MAGIC_SICK
f200: 20 20 20 20 20 30 78 34 62 37 37 31 32 39 30 20       0x4b771290 
f210: 20 2f 2a 20 45 72 72 6f 72 20 61 6e 64 20 61 77   /* Error and aw
f220: 61 69 74 69 6e 67 20 63 6c 6f 73 65 20 2a 2f 0a  aiting close */.
f230: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d  #define SQLITE_M
f240: 41 47 49 43 5f 42 55 53 59 20 20 20 20 20 30 78  AGIC_BUSY     0x
f250: 66 30 33 62 37 39 30 36 20 20 2f 2a 20 44 61 74  f03b7906  /* Dat
f260: 61 62 61 73 65 20 63 75 72 72 65 6e 74 6c 79 20  abase currently 
f270: 69 6e 20 75 73 65 20 2a 2f 0a 23 64 65 66 69 6e  in use */.#defin
f280: 65 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 45  e SQLITE_MAGIC_E
f290: 52 52 4f 52 20 20 20 20 30 78 62 35 33 35 37 39  RROR    0xb53579
f2a0: 33 30 20 20 2f 2a 20 41 6e 20 53 51 4c 49 54 45  30  /* An SQLITE
f2b0: 5f 4d 49 53 55 53 45 20 65 72 72 6f 72 20 6f 63  _MISUSE error oc
f2c0: 63 75 72 72 65 64 20 2a 2f 0a 23 64 65 66 69 6e  curred */.#defin
f2d0: 65 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 5a  e SQLITE_MAGIC_Z
f2e0: 4f 4d 42 49 45 20 20 20 30 78 36 34 63 66 66 63  OMBIE   0x64cffc
f2f0: 37 66 20 20 2f 2a 20 43 6c 6f 73 65 20 77 69 74  7f  /* Close wit
f300: 68 20 6c 61 73 74 20 73 74 61 74 65 6d 65 6e 74  h last statement
f310: 20 63 6c 6f 73 65 20 2a 2f 0a 0a 2f 2a 0a 2a 2a   close */../*.**
f320: 20 45 61 63 68 20 53 51 4c 20 66 75 6e 63 74 69   Each SQL functi
f330: 6f 6e 20 69 73 20 64 65 66 69 6e 65 64 20 62 79  on is defined by
f340: 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20   an instance of 
f350: 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 0a 2a 2a  the following.**
f360: 20 73 74 72 75 63 74 75 72 65 2e 20 20 46 6f 72   structure.  For
f370: 20 67 6c 6f 62 61 6c 20 62 75 69 6c 74 2d 69 6e   global built-in
f380: 20 66 75 6e 63 74 69 6f 6e 73 20 28 65 78 3a 20   functions (ex: 
f390: 73 75 62 73 74 72 28 29 2c 20 6d 61 78 28 29 2c  substr(), max(),
f3a0: 20 63 6f 75 6e 74 28 29 29 0a 2a 2a 20 61 20 70   count()).** a p
f3b0: 6f 69 6e 74 65 72 20 74 6f 20 74 68 69 73 20 73  ointer to this s
f3c0: 74 72 75 63 74 75 72 65 20 69 73 20 68 65 6c 64  tructure is held
f3d0: 20 69 6e 20 74 68 65 20 73 71 6c 69 74 65 33 42   in the sqlite3B
f3e0: 75 69 6c 74 69 6e 46 75 6e 63 74 69 6f 6e 73 20  uiltinFunctions 
f3f0: 6f 62 6a 65 63 74 2e 0a 2a 2a 20 46 6f 72 20 70  object..** For p
f400: 65 72 2d 63 6f 6e 6e 65 63 74 69 6f 6e 20 61 70  er-connection ap
f410: 70 6c 69 63 61 74 69 6f 6e 2d 64 65 66 69 6e 65  plication-define
f420: 64 20 66 75 6e 63 74 69 6f 6e 73 2c 20 61 20 70  d functions, a p
f430: 6f 69 6e 74 65 72 20 74 6f 20 74 68 69 73 0a 2a  ointer to this.*
f440: 2a 20 73 74 72 75 63 74 75 72 65 20 69 73 20 68  * structure is h
f450: 65 6c 64 20 69 6e 20 74 68 65 20 64 62 2d 3e 61  eld in the db->a
f460: 48 61 73 68 20 68 61 73 68 20 74 61 62 6c 65 2e  Hash hash table.
f470: 0a 2a 2a 0a 2a 2a 20 54 68 65 20 75 2e 70 48 61  .**.** The u.pHa
f480: 73 68 20 66 69 65 6c 64 20 69 73 20 75 73 65 64  sh field is used
f490: 20 62 79 20 74 68 65 20 67 6c 6f 62 61 6c 20 62   by the global b
f4a0: 75 69 6c 74 2d 69 6e 73 2e 20 20 54 68 65 20 75  uilt-ins.  The u
f4b0: 2e 70 44 65 73 74 72 75 63 74 6f 72 0a 2a 2a 20  .pDestructor.** 
f4c0: 66 69 65 6c 64 20 69 73 20 75 73 65 64 20 62 79  field is used by
f4d0: 20 70 65 72 2d 63 6f 6e 6e 65 63 74 69 6f 6e 20   per-connection 
f4e0: 61 70 70 2d 64 65 66 20 66 75 6e 63 74 69 6f 6e  app-def function
f4f0: 73 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 46 75 6e  s..*/.struct Fun
f500: 63 44 65 66 20 7b 0a 20 20 69 38 20 6e 41 72 67  cDef {.  i8 nArg
f510: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
f520: 20 4e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d   Number of argum
f530: 65 6e 74 73 2e 20 20 2d 31 20 6d 65 61 6e 73 20  ents.  -1 means 
f540: 75 6e 6c 69 6d 69 74 65 64 20 2a 2f 0a 20 20 75  unlimited */.  u
f550: 33 32 20 66 75 6e 63 46 6c 61 67 73 3b 20 20 20  32 funcFlags;   
f560: 20 20 20 20 2f 2a 20 53 6f 6d 65 20 63 6f 6d 62      /* Some comb
f570: 69 6e 61 74 69 6f 6e 20 6f 66 20 53 51 4c 49 54  ination of SQLIT
f580: 45 5f 46 55 4e 43 5f 2a 20 2a 2f 0a 20 20 76 6f  E_FUNC_* */.  vo
f590: 69 64 20 2a 70 55 73 65 72 44 61 74 61 3b 20 20  id *pUserData;  
f5a0: 20 20 20 2f 2a 20 55 73 65 72 20 64 61 74 61 20     /* User data 
f5b0: 70 61 72 61 6d 65 74 65 72 20 2a 2f 0a 20 20 46  parameter */.  F
f5c0: 75 6e 63 44 65 66 20 2a 70 4e 65 78 74 3b 20 20  uncDef *pNext;  
f5d0: 20 20 20 20 2f 2a 20 4e 65 78 74 20 66 75 6e 63      /* Next func
f5e0: 74 69 6f 6e 20 77 69 74 68 20 73 61 6d 65 20 6e  tion with same n
f5f0: 61 6d 65 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a  ame */.  void (*
f600: 78 53 46 75 6e 63 29 28 73 71 6c 69 74 65 33 5f  xSFunc)(sqlite3_
f610: 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c  context*,int,sql
f620: 69 74 65 33 5f 76 61 6c 75 65 2a 2a 29 3b 20 2f  ite3_value**); /
f630: 2a 20 66 75 6e 63 20 6f 72 20 61 67 67 2d 73 74  * func or agg-st
f640: 65 70 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78  ep */.  void (*x
f650: 46 69 6e 61 6c 69 7a 65 29 28 73 71 6c 69 74 65  Finalize)(sqlite
f660: 33 5f 63 6f 6e 74 65 78 74 2a 29 3b 20 20 20 20  3_context*);    
f670: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
f680: 20 41 67 67 20 66 69 6e 61 6c 69 7a 65 72 20 2a   Agg finalizer *
f690: 2f 0a 20 20 76 6f 69 64 20 28 2a 78 56 61 6c 75  /.  void (*xValu
f6a0: 65 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65  e)(sqlite3_conte
f6b0: 78 74 2a 29 3b 20 20 20 20 20 20 20 20 20 20 20  xt*);           
f6c0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 75 72            /* Cur
f6d0: 72 65 6e 74 20 61 67 67 20 76 61 6c 75 65 20 2a  rent agg value *
f6e0: 2f 0a 20 20 76 6f 69 64 20 28 2a 78 49 6e 76 65  /.  void (*xInve
f6f0: 72 73 65 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e  rse)(sqlite3_con
f700: 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65  text*,int,sqlite
f710: 33 5f 76 61 6c 75 65 2a 2a 29 3b 20 2f 2a 20 69  3_value**); /* i
f720: 6e 76 65 72 73 65 20 61 67 67 2d 73 74 65 70 20  nverse agg-step 
f730: 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20  */.  const char 
f740: 2a 7a 4e 61 6d 65 3b 20 20 20 2f 2a 20 53 51 4c  *zName;   /* SQL
f750: 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 66 75 6e   name of the fun
f760: 63 74 69 6f 6e 2e 20 2a 2f 0a 20 20 75 6e 69 6f  ction. */.  unio
f770: 6e 20 7b 0a 20 20 20 20 46 75 6e 63 44 65 66 20  n {.    FuncDef 
f780: 2a 70 48 61 73 68 3b 20 20 20 20 20 20 2f 2a 20  *pHash;      /* 
f790: 4e 65 78 74 20 77 69 74 68 20 61 20 64 69 66 66  Next with a diff
f7a0: 65 72 65 6e 74 20 6e 61 6d 65 20 62 75 74 20 74  erent name but t
f7b0: 68 65 20 73 61 6d 65 20 68 61 73 68 20 2a 2f 0a  he same hash */.
f7c0: 20 20 20 20 46 75 6e 63 44 65 73 74 72 75 63 74      FuncDestruct
f7d0: 6f 72 20 2a 70 44 65 73 74 72 75 63 74 6f 72 3b  or *pDestructor;
f7e0: 20 20 20 2f 2a 20 52 65 66 65 72 65 6e 63 65 20     /* Reference 
f7f0: 63 6f 75 6e 74 65 64 20 64 65 73 74 72 75 63 74  counted destruct
f800: 6f 72 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20  or function */. 
f810: 20 7d 20 75 3b 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20   } u;.};../*.** 
f820: 54 68 69 73 20 73 74 72 75 63 74 75 72 65 20 65  This structure e
f830: 6e 63 61 70 73 75 6c 61 74 65 73 20 61 20 75 73  ncapsulates a us
f840: 65 72 2d 66 75 6e 63 74 69 6f 6e 20 64 65 73 74  er-function dest
f850: 72 75 63 74 6f 72 20 63 61 6c 6c 62 61 63 6b 20  ructor callback 
f860: 28 61 73 0a 2a 2a 20 63 6f 6e 66 69 67 75 72 65  (as.** configure
f870: 64 20 75 73 69 6e 67 20 63 72 65 61 74 65 5f 66  d using create_f
f880: 75 6e 63 74 69 6f 6e 5f 76 32 28 29 29 20 61 6e  unction_v2()) an
f890: 64 20 61 20 72 65 66 65 72 65 6e 63 65 20 63 6f  d a reference co
f8a0: 75 6e 74 65 72 2e 20 57 68 65 6e 0a 2a 2a 20 63  unter. When.** c
f8b0: 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 5f 76  reate_function_v
f8c0: 32 28 29 20 69 73 20 63 61 6c 6c 65 64 20 74 6f  2() is called to
f8d0: 20 63 72 65 61 74 65 20 61 20 66 75 6e 63 74 69   create a functi
f8e0: 6f 6e 20 77 69 74 68 20 61 20 64 65 73 74 72 75  on with a destru
f8f0: 63 74 6f 72 2c 0a 2a 2a 20 61 20 73 69 6e 67 6c  ctor,.** a singl
f900: 65 20 6f 62 6a 65 63 74 20 6f 66 20 74 68 69 73  e object of this
f910: 20 74 79 70 65 20 69 73 20 61 6c 6c 6f 63 61 74   type is allocat
f920: 65 64 2e 20 46 75 6e 63 44 65 73 74 72 75 63 74  ed. FuncDestruct
f930: 6f 72 2e 6e 52 65 66 20 69 73 20 73 65 74 20 74  or.nRef is set t
f940: 6f 0a 2a 2a 20 74 68 65 20 6e 75 6d 62 65 72 20  o.** the number 
f950: 6f 66 20 46 75 6e 63 44 65 66 20 6f 62 6a 65 63  of FuncDef objec
f960: 74 73 20 63 72 65 61 74 65 64 20 28 65 69 74 68  ts created (eith
f970: 65 72 20 31 20 6f 72 20 33 2c 20 64 65 70 65 6e  er 1 or 3, depen
f980: 64 69 6e 67 20 6f 6e 20 77 68 65 74 68 65 72 0a  ding on whether.
f990: 2a 2a 20 6f 72 20 6e 6f 74 20 74 68 65 20 73 70  ** or not the sp
f9a0: 65 63 69 66 69 65 64 20 65 6e 63 6f 64 69 6e 67  ecified encoding
f9b0: 20 69 73 20 53 51 4c 49 54 45 5f 41 4e 59 29 2e   is SQLITE_ANY).
f9c0: 20 54 68 65 20 46 75 6e 63 44 65 66 2e 70 44 65   The FuncDef.pDe
f9d0: 73 74 72 75 63 74 6f 72 0a 2a 2a 20 6d 65 6d 62  structor.** memb
f9e0: 65 72 20 6f 66 20 65 61 63 68 20 6f 66 20 74 68  er of each of th
f9f0: 65 20 6e 65 77 20 46 75 6e 63 44 65 66 20 6f 62  e new FuncDef ob
fa00: 6a 65 63 74 73 20 69 73 20 73 65 74 20 74 6f 20  jects is set to 
fa10: 70 6f 69 6e 74 20 74 6f 20 74 68 65 20 61 6c 6c  point to the all
fa20: 6f 63 61 74 65 64 0a 2a 2a 20 46 75 6e 63 44 65  ocated.** FuncDe
fa30: 73 74 72 75 63 74 6f 72 2e 0a 2a 2a 0a 2a 2a 20  structor..**.** 
fa40: 54 68 65 72 65 61 66 74 65 72 2c 20 77 68 65 6e  Thereafter, when
fa50: 20 6f 6e 65 20 6f 66 20 74 68 65 20 46 75 6e 63   one of the Func
fa60: 44 65 66 20 6f 62 6a 65 63 74 73 20 69 73 20 64  Def objects is d
fa70: 65 6c 65 74 65 64 2c 20 74 68 65 20 72 65 66 65  eleted, the refe
fa80: 72 65 6e 63 65 0a 2a 2a 20 63 6f 75 6e 74 20 6f  rence.** count o
fa90: 6e 20 74 68 69 73 20 6f 62 6a 65 63 74 20 69 73  n this object is
faa0: 20 64 65 63 72 65 6d 65 6e 74 65 64 2e 20 57 68   decremented. Wh
fab0: 65 6e 20 69 74 20 72 65 61 63 68 65 73 20 30 2c  en it reaches 0,
fac0: 20 74 68 65 20 64 65 73 74 72 75 63 74 6f 72 0a   the destructor.
fad0: 2a 2a 20 69 73 20 69 6e 76 6f 6b 65 64 20 61 6e  ** is invoked an
fae0: 64 20 74 68 65 20 46 75 6e 63 44 65 73 74 72 75  d the FuncDestru
faf0: 63 74 6f 72 20 73 74 72 75 63 74 75 72 65 20 66  ctor structure f
fb00: 72 65 65 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  reed..*/.struct 
fb10: 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72 20 7b  FuncDestructor {
fb20: 0a 20 20 69 6e 74 20 6e 52 65 66 3b 0a 20 20 76  .  int nRef;.  v
fb30: 6f 69 64 20 28 2a 78 44 65 73 74 72 6f 79 29 28  oid (*xDestroy)(
fb40: 76 6f 69 64 20 2a 29 3b 0a 20 20 76 6f 69 64 20  void *);.  void 
fb50: 2a 70 55 73 65 72 44 61 74 61 3b 0a 7d 3b 0a 0a  *pUserData;.};..
fb60: 2f 2a 0a 2a 2a 20 50 6f 73 73 69 62 6c 65 20 76  /*.** Possible v
fb70: 61 6c 75 65 73 20 66 6f 72 20 46 75 6e 63 44 65  alues for FuncDe
fb80: 66 2e 66 6c 61 67 73 2e 20 20 4e 6f 74 65 20 74  f.flags.  Note t
fb90: 68 61 74 20 74 68 65 20 5f 4c 45 4e 47 54 48 20  hat the _LENGTH 
fba0: 61 6e 64 20 5f 54 59 50 45 4f 46 0a 2a 2a 20 76  and _TYPEOF.** v
fbb0: 61 6c 75 65 73 20 6d 75 73 74 20 63 6f 72 72 65  alues must corre
fbc0: 73 70 6f 6e 64 20 74 6f 20 4f 50 46 4c 41 47 5f  spond to OPFLAG_
fbd0: 4c 45 4e 47 54 48 41 52 47 20 61 6e 64 20 4f 50  LENGTHARG and OP
fbe0: 46 4c 41 47 5f 54 59 50 45 4f 46 41 52 47 2e 20  FLAG_TYPEOFARG. 
fbf0: 20 41 6e 64 0a 2a 2a 20 53 51 4c 49 54 45 5f 46   And.** SQLITE_F
fc00: 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 20 6d 75 73  UNC_CONSTANT mus
fc10: 74 20 62 65 20 74 68 65 20 73 61 6d 65 20 61 73  t be the same as
fc20: 20 53 51 4c 49 54 45 5f 44 45 54 45 52 4d 49 4e   SQLITE_DETERMIN
fc30: 49 53 54 49 43 2e 20 20 54 68 65 72 65 0a 2a 2a  ISTIC.  There.**
fc40: 20 61 72 65 20 61 73 73 65 72 74 28 29 20 73 74   are assert() st
fc50: 61 74 65 6d 65 6e 74 73 20 69 6e 20 74 68 65 20  atements in the 
fc60: 63 6f 64 65 20 74 6f 20 76 65 72 69 66 79 20 74  code to verify t
fc70: 68 69 73 2e 0a 2a 2a 0a 2a 2a 20 56 61 6c 75 65  his..**.** Value
fc80: 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 28 65 6e   constraints (en
fc90: 66 6f 72 63 65 64 20 76 69 61 20 61 73 73 65 72  forced via asser
fca0: 74 28 29 29 3a 0a 2a 2a 20 20 20 20 20 53 51 4c  t()):.**     SQL
fcb0: 49 54 45 5f 46 55 4e 43 5f 4d 49 4e 4d 41 58 20  ITE_FUNC_MINMAX 
fcc0: 20 20 20 3d 3d 20 20 4e 43 5f 4d 69 6e 4d 61 78     ==  NC_MinMax
fcd0: 41 67 67 20 20 20 20 20 20 3d 3d 20 53 46 5f 4d  Agg      == SF_M
fce0: 69 6e 4d 61 78 41 67 67 0a 2a 2a 20 20 20 20 20  inMaxAgg.**     
fcf0: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4c 45 4e 47  SQLITE_FUNC_LENG
fd00: 54 48 20 20 20 20 3d 3d 20 20 4f 50 46 4c 41 47  TH    ==  OPFLAG
fd10: 5f 4c 45 4e 47 54 48 41 52 47 0a 2a 2a 20 20 20  _LENGTHARG.**   
fd20: 20 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 54 59    SQLITE_FUNC_TY
fd30: 50 45 4f 46 20 20 20 20 3d 3d 20 20 4f 50 46 4c  PEOF    ==  OPFL
fd40: 41 47 5f 54 59 50 45 4f 46 41 52 47 0a 2a 2a 20  AG_TYPEOFARG.** 
fd50: 20 20 20 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f      SQLITE_FUNC_
fd60: 43 4f 4e 53 54 41 4e 54 20 20 3d 3d 20 20 53 51  CONSTANT  ==  SQ
fd70: 4c 49 54 45 5f 44 45 54 45 52 4d 49 4e 49 53 54  LITE_DETERMINIST
fd80: 49 43 20 66 72 6f 6d 20 74 68 65 20 41 50 49 0a  IC from the API.
fd90: 2a 2a 20 20 20 20 20 53 51 4c 49 54 45 5f 46 55  **     SQLITE_FU
fda0: 4e 43 5f 45 4e 43 4d 41 53 4b 20 20 20 64 65 70  NC_ENCMASK   dep
fdb0: 65 6e 64 73 20 6f 6e 20 53 51 4c 49 54 45 5f 55  ends on SQLITE_U
fdc0: 54 46 2a 20 6d 61 63 72 6f 73 20 69 6e 20 74 68  TF* macros in th
fdd0: 65 20 41 50 49 0a 2a 2f 0a 23 64 65 66 69 6e 65  e API.*/.#define
fde0: 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 45 4e 43   SQLITE_FUNC_ENC
fdf0: 4d 41 53 4b 20 20 30 78 30 30 30 33 20 2f 2a 20  MASK  0x0003 /* 
fe00: 53 51 4c 49 54 45 5f 55 54 46 38 2c 20 53 51 4c  SQLITE_UTF8, SQL
fe10: 49 54 45 5f 55 54 46 31 36 42 45 20 6f 72 20 55  ITE_UTF16BE or U
fe20: 54 46 31 36 4c 45 20 2a 2f 0a 23 64 65 66 69 6e  TF16LE */.#defin
fe30: 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4c 49  e SQLITE_FUNC_LI
fe40: 4b 45 20 20 20 20 20 30 78 30 30 30 34 20 2f 2a  KE     0x0004 /*
fe50: 20 43 61 6e 64 69 64 61 74 65 20 66 6f 72 20 74   Candidate for t
fe60: 68 65 20 4c 49 4b 45 20 6f 70 74 69 6d 69 7a 61  he LIKE optimiza
fe70: 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  tion */.#define 
fe80: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 41 53 45  SQLITE_FUNC_CASE
fe90: 20 20 20 20 20 30 78 30 30 30 38 20 2f 2a 20 43       0x0008 /* C
fea0: 61 73 65 2d 73 65 6e 73 69 74 69 76 65 20 4c 49  ase-sensitive LI
feb0: 4b 45 2d 74 79 70 65 20 66 75 6e 63 74 69 6f 6e  KE-type function
fec0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
fed0: 54 45 5f 46 55 4e 43 5f 45 50 48 45 4d 20 20 20  TE_FUNC_EPHEM   
fee0: 20 30 78 30 30 31 30 20 2f 2a 20 45 70 68 65 6d   0x0010 /* Ephem
fef0: 65 72 61 6c 2e 20 20 44 65 6c 65 74 65 20 77 69  eral.  Delete wi
ff00: 74 68 20 56 44 42 45 20 2a 2f 0a 23 64 65 66 69  th VDBE */.#defi
ff10: 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e  ne SQLITE_FUNC_N
ff20: 45 45 44 43 4f 4c 4c 20 30 78 30 30 32 30 20 2f  EEDCOLL 0x0020 /
ff30: 2a 20 73 71 6c 69 74 65 33 47 65 74 46 75 6e 63  * sqlite3GetFunc
ff40: 43 6f 6c 6c 53 65 71 28 29 20 6d 69 67 68 74 20  CollSeq() might 
ff50: 62 65 20 63 61 6c 6c 65 64 2a 2f 0a 23 64 65 66  be called*/.#def
ff60: 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f  ine SQLITE_FUNC_
ff70: 4c 45 4e 47 54 48 20 20 20 30 78 30 30 34 30 20  LENGTH   0x0040 
ff80: 2f 2a 20 42 75 69 6c 74 2d 69 6e 20 6c 65 6e 67  /* Built-in leng
ff90: 74 68 28 29 20 66 75 6e 63 74 69 6f 6e 20 2a 2f  th() function */
ffa0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
ffb0: 46 55 4e 43 5f 54 59 50 45 4f 46 20 20 20 30 78  FUNC_TYPEOF   0x
ffc0: 30 30 38 30 20 2f 2a 20 42 75 69 6c 74 2d 69 6e  0080 /* Built-in
ffd0: 20 74 79 70 65 6f 66 28 29 20 66 75 6e 63 74 69   typeof() functi
ffe0: 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  on */.#define SQ
fff0: 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 55 4e 54 20  LITE_FUNC_COUNT 
10000 20 20 20 30 78 30 31 30 30 20 2f 2a 20 42 75 69     0x0100 /* Bui
10010 6c 74 2d 69 6e 20 63 6f 75 6e 74 28 2a 29 20 61  lt-in count(*) a
10020 67 67 72 65 67 61 74 65 20 2a 2f 0a 23 64 65 66  ggregate */.#def
10030 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f  ine SQLITE_FUNC_
10040 43 4f 41 4c 45 53 43 45 20 30 78 30 32 30 30 20  COALESCE 0x0200 
10050 2f 2a 20 42 75 69 6c 74 2d 69 6e 20 63 6f 61 6c  /* Built-in coal
10060 65 73 63 65 28 29 20 6f 72 20 69 66 6e 75 6c 6c  esce() or ifnull
10070 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  () */.#define SQ
10080 4c 49 54 45 5f 46 55 4e 43 5f 55 4e 4c 49 4b 45  LITE_FUNC_UNLIKE
10090 4c 59 20 30 78 30 34 30 30 20 2f 2a 20 42 75 69  LY 0x0400 /* Bui
100a0 6c 74 2d 69 6e 20 75 6e 6c 69 6b 65 6c 79 28 29  lt-in unlikely()
100b0 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65   function */.#de
100c0 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43  fine SQLITE_FUNC
100d0 5f 43 4f 4e 53 54 41 4e 54 20 30 78 30 38 30 30  _CONSTANT 0x0800
100e0 20 2f 2a 20 43 6f 6e 73 74 61 6e 74 20 69 6e 70   /* Constant inp
100f0 75 74 73 20 67 69 76 65 20 61 20 63 6f 6e 73 74  uts give a const
10100 61 6e 74 20 6f 75 74 70 75 74 20 2a 2f 0a 23 64  ant output */.#d
10110 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e  efine SQLITE_FUN
10120 43 5f 4d 49 4e 4d 41 58 20 20 20 30 78 31 30 30  C_MINMAX   0x100
10130 30 20 2f 2a 20 54 72 75 65 20 66 6f 72 20 6d 69  0 /* True for mi
10140 6e 28 29 20 61 6e 64 20 6d 61 78 28 29 20 61 67  n() and max() ag
10150 67 72 65 67 61 74 65 73 20 2a 2f 0a 23 64 65 66  gregates */.#def
10160 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f  ine SQLITE_FUNC_
10170 53 4c 4f 43 48 4e 47 20 20 30 78 32 30 30 30 20  SLOCHNG  0x2000 
10180 2f 2a 20 22 53 6c 6f 77 20 43 68 61 6e 67 65 22  /* "Slow Change"
10190 2e 20 56 61 6c 75 65 20 63 6f 6e 73 74 61 6e 74  . Value constant
101a0 20 64 75 72 69 6e 67 20 61 0a 20 20 20 20 20 20   during a.      
101b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
101c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a                **
101d0 20 73 69 6e 67 6c 65 20 71 75 65 72 79 20 2d 20   single query - 
101e0 6d 69 67 68 74 20 63 68 61 6e 67 65 20 6f 76 65  might change ove
101f0 72 20 74 69 6d 65 20 2a 2f 0a 23 64 65 66 69 6e  r time */.#defin
10200 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 41 46  e SQLITE_FUNC_AF
10210 46 49 4e 49 54 59 20 30 78 34 30 30 30 20 2f 2a  FINITY 0x4000 /*
10220 20 42 75 69 6c 74 2d 69 6e 20 61 66 66 69 6e 69   Built-in affini
10230 74 79 28 29 20 66 75 6e 63 74 69 6f 6e 20 2a 2f  ty() function */
10240 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
10250 46 55 4e 43 5f 4f 46 46 53 45 54 20 20 20 30 78  FUNC_OFFSET   0x
10260 38 30 30 30 20 2f 2a 20 42 75 69 6c 74 2d 69 6e  8000 /* Built-in
10270 20 73 71 6c 69 74 65 5f 6f 66 66 73 65 74 28 29   sqlite_offset()
10280 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65   function */.#de
10290 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43  fine SQLITE_FUNC
102a0 5f 57 49 4e 44 4f 57 20 20 20 30 78 30 30 30 31  _WINDOW   0x0001
102b0 30 30 30 30 20 2f 2a 20 42 75 69 6c 74 2d 69 6e  0000 /* Built-in
102c0 20 77 69 6e 64 6f 77 2d 6f 6e 6c 79 20 66 75 6e   window-only fun
102d0 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65  ction */.#define
102e0 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 57 49 4e   SQLITE_FUNC_WIN
102f0 44 4f 57 5f 53 49 5a 45 20 30 78 32 30 30 30 30  DOW_SIZE 0x20000
10300 20 2f 2a 20 52 65 71 75 69 72 65 73 20 70 61 72   /* Requires par
10310 74 69 74 69 6f 6e 20 73 69 7a 65 20 61 73 20 61  tition size as a
10320 72 67 2e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  rg. */.#define S
10330 51 4c 49 54 45 5f 46 55 4e 43 5f 49 4e 54 45 52  QLITE_FUNC_INTER
10340 4e 41 4c 20 30 78 30 30 30 34 30 30 30 30 20 2f  NAL 0x00040000 /
10350 2a 20 46 6f 72 20 75 73 65 20 62 79 20 4e 65 73  * For use by Nes
10360 74 65 64 50 61 72 73 65 28 29 20 6f 6e 6c 79 20  tedParse() only 
10370 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f  */../*.** The fo
10380 6c 6c 6f 77 69 6e 67 20 74 68 72 65 65 20 6d 61  llowing three ma
10390 63 72 6f 73 2c 20 46 55 4e 43 54 49 4f 4e 28 29  cros, FUNCTION()
103a0 2c 20 4c 49 4b 45 46 55 4e 43 28 29 20 61 6e 64  , LIKEFUNC() and
103b0 20 41 47 47 52 45 47 41 54 45 28 29 20 61 72 65   AGGREGATE() are
103c0 0a 2a 2a 20 75 73 65 64 20 74 6f 20 63 72 65 61  .** used to crea
103d0 74 65 20 74 68 65 20 69 6e 69 74 69 61 6c 69 7a  te the initializ
103e0 65 72 73 20 66 6f 72 20 74 68 65 20 46 75 6e 63  ers for the Func
103f0 44 65 66 20 73 74 72 75 63 74 75 72 65 73 2e 0a  Def structures..
10400 2a 2a 0a 2a 2a 20 20 20 46 55 4e 43 54 49 4f 4e  **.**   FUNCTION
10410 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41  (zName, nArg, iA
10420 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29 0a  rg, bNC, xFunc).
10430 2a 2a 20 20 20 20 20 55 73 65 64 20 74 6f 20 63  **     Used to c
10440 72 65 61 74 65 20 61 20 73 63 61 6c 61 72 20 66  reate a scalar f
10450 75 6e 63 74 69 6f 6e 20 64 65 66 69 6e 69 74 69  unction definiti
10460 6f 6e 20 6f 66 20 61 20 66 75 6e 63 74 69 6f 6e  on of a function
10470 20 7a 4e 61 6d 65 0a 2a 2a 20 20 20 20 20 69 6d   zName.**     im
10480 70 6c 65 6d 65 6e 74 65 64 20 62 79 20 43 20 66  plemented by C f
10490 75 6e 63 74 69 6f 6e 20 78 46 75 6e 63 20 74 68  unction xFunc th
104a0 61 74 20 61 63 63 65 70 74 73 20 6e 41 72 67 20  at accepts nArg 
104b0 61 72 67 75 6d 65 6e 74 73 2e 20 54 68 65 0a 2a  arguments. The.*
104c0 2a 20 20 20 20 20 76 61 6c 75 65 20 70 61 73 73  *     value pass
104d0 65 64 20 61 73 20 69 41 72 67 20 69 73 20 63 61  ed as iArg is ca
104e0 73 74 20 74 6f 20 61 20 28 76 6f 69 64 2a 29 20  st to a (void*) 
104f0 61 6e 64 20 6d 61 64 65 20 61 76 61 69 6c 61 62  and made availab
10500 6c 65 0a 2a 2a 20 20 20 20 20 61 73 20 74 68 65  le.**     as the
10510 20 75 73 65 72 2d 64 61 74 61 20 28 73 71 6c 69   user-data (sqli
10520 74 65 33 5f 75 73 65 72 5f 64 61 74 61 28 29 29  te3_user_data())
10530 20 66 6f 72 20 74 68 65 20 66 75 6e 63 74 69 6f   for the functio
10540 6e 2e 20 49 66 0a 2a 2a 20 20 20 20 20 61 72 67  n. If.**     arg
10550 75 6d 65 6e 74 20 62 4e 43 20 69 73 20 74 72 75  ument bNC is tru
10560 65 2c 20 74 68 65 6e 20 74 68 65 20 53 51 4c 49  e, then the SQLI
10570 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c  TE_FUNC_NEEDCOLL
10580 20 66 6c 61 67 20 69 73 20 73 65 74 2e 0a 2a 2a   flag is set..**
10590 0a 2a 2a 20 20 20 56 46 55 4e 43 54 49 4f 4e 28  .**   VFUNCTION(
105a0 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72  zName, nArg, iAr
105b0 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29 0a 2a  g, bNC, xFunc).*
105c0 2a 20 20 20 20 20 4c 69 6b 65 20 46 55 4e 43 54  *     Like FUNCT
105d0 49 4f 4e 20 65 78 63 65 70 74 20 69 74 20 6f 6d  ION except it om
105e0 69 74 73 20 74 68 65 20 53 51 4c 49 54 45 5f 46  its the SQLITE_F
105f0 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 20 66 6c 61  UNC_CONSTANT fla
10600 67 2e 0a 2a 2a 0a 2a 2a 20 20 20 44 46 55 4e 43  g..**.**   DFUNC
10610 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72 67  TION(zName, nArg
10620 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78 46 75  , iArg, bNC, xFu
10630 6e 63 29 0a 2a 2a 20 20 20 20 20 4c 69 6b 65 20  nc).**     Like 
10640 46 55 4e 43 54 49 4f 4e 20 65 78 63 65 70 74 20  FUNCTION except 
10650 69 74 20 6f 6d 69 74 73 20 74 68 65 20 53 51 4c  it omits the SQL
10660 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e  ITE_FUNC_CONSTAN
10670 54 20 66 6c 61 67 20 61 6e 64 0a 2a 2a 20 20 20  T flag and.**   
10680 20 20 61 64 64 73 20 74 68 65 20 53 51 4c 49 54    adds the SQLIT
10690 45 5f 46 55 4e 43 5f 53 4c 4f 43 48 4e 47 20 66  E_FUNC_SLOCHNG f
106a0 6c 61 67 2e 20 20 55 73 65 64 20 66 6f 72 20 64  lag.  Used for d
106b0 61 74 65 20 26 20 74 69 6d 65 20 66 75 6e 63 74  ate & time funct
106c0 69 6f 6e 73 0a 2a 2a 20 20 20 20 20 61 6e 64 20  ions.**     and 
106d0 66 75 6e 63 74 69 6f 6e 73 20 6c 69 6b 65 20 73  functions like s
106e0 71 6c 69 74 65 5f 76 65 72 73 69 6f 6e 28 29 20  qlite_version() 
106f0 74 68 61 74 20 63 61 6e 20 63 68 61 6e 67 65 2c  that can change,
10700 20 62 75 74 20 6e 6f 74 20 64 75 72 69 6e 67 0a   but not during.
10710 2a 2a 20 20 20 20 20 61 20 73 69 6e 67 6c 65 20  **     a single 
10720 71 75 65 72 79 2e 20 20 54 68 65 20 69 41 72 67  query.  The iArg
10730 20 69 73 20 69 67 6e 6f 72 65 64 2e 20 20 54 68   is ignored.  Th
10740 65 20 75 73 65 72 2d 64 61 74 61 20 69 73 20 61  e user-data is a
10750 6c 77 61 79 73 20 73 65 74 0a 2a 2a 20 20 20 20  lways set.**    
10760 20 74 6f 20 61 20 4e 55 4c 4c 20 70 6f 69 6e 74   to a NULL point
10770 65 72 2e 20 20 54 68 65 20 62 4e 43 20 70 61 72  er.  The bNC par
10780 61 6d 65 74 65 72 20 69 73 20 6e 6f 74 20 75 73  ameter is not us
10790 65 64 2e 0a 2a 2a 0a 2a 2a 20 20 20 50 55 52 45  ed..**.**   PURE
107a0 5f 44 41 54 45 28 7a 4e 61 6d 65 2c 20 6e 41 72  _DATE(zName, nAr
107b0 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78 46  g, iArg, bNC, xF
107c0 75 6e 63 29 0a 2a 2a 20 20 20 20 20 55 73 65 64  unc).**     Used
107d0 20 66 6f 72 20 22 70 75 72 65 22 20 64 61 74 65   for "pure" date
107e0 2f 74 69 6d 65 20 66 75 6e 63 74 69 6f 6e 73 2c  /time functions,
107f0 20 74 68 69 73 20 6d 61 63 72 6f 20 69 73 20 6c   this macro is l
10800 69 6b 65 20 44 46 55 4e 43 54 49 4f 4e 0a 2a 2a  ike DFUNCTION.**
10810 20 20 20 20 20 65 78 63 65 70 74 20 74 68 61 74       except that
10820 20 69 74 20 64 6f 65 73 20 73 65 74 20 74 68 65   it does set the
10830 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e   SQLITE_FUNC_CON
10840 53 54 41 4e 54 20 66 6c 61 67 73 2e 20 20 69 41  STANT flags.  iA
10850 72 67 20 69 73 0a 2a 2a 20 20 20 20 20 69 67 6e  rg is.**     ign
10860 6f 72 65 64 20 61 6e 64 20 74 68 65 20 75 73 65  ored and the use
10870 72 2d 64 61 74 61 20 66 6f 72 20 74 68 65 73 65  r-data for these
10880 20 66 75 6e 63 74 69 6f 6e 73 20 69 73 20 73 65   functions is se
10890 74 20 74 6f 20 61 6e 20 0a 2a 2a 20 20 20 20 20  t to an .**     
108a0 61 72 62 69 74 72 61 72 79 20 6e 6f 6e 2d 4e 55  arbitrary non-NU
108b0 4c 4c 20 70 6f 69 6e 74 65 72 2e 20 20 54 68 65  LL pointer.  The
108c0 20 62 4e 43 20 70 61 72 61 6d 65 74 65 72 20 69   bNC parameter i
108d0 73 20 6e 6f 74 20 75 73 65 64 2e 0a 2a 2a 0a 2a  s not used..**.*
108e0 2a 20 20 20 41 47 47 52 45 47 41 54 45 28 7a 4e  *   AGGREGATE(zN
108f0 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c  ame, nArg, iArg,
10900 20 62 4e 43 2c 20 78 53 74 65 70 2c 20 78 46 69   bNC, xStep, xFi
10910 6e 61 6c 29 0a 2a 2a 20 20 20 20 20 55 73 65 64  nal).**     Used
10920 20 74 6f 20 63 72 65 61 74 65 20 61 6e 20 61 67   to create an ag
10930 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e  gregate function
10940 20 64 65 66 69 6e 69 74 69 6f 6e 20 69 6d 70 6c   definition impl
10950 65 6d 65 6e 74 65 64 20 62 79 0a 2a 2a 20 20 20  emented by.**   
10960 20 20 74 68 65 20 43 20 66 75 6e 63 74 69 6f 6e    the C function
10970 73 20 78 53 74 65 70 20 61 6e 64 20 78 46 69 6e  s xStep and xFin
10980 61 6c 2e 20 54 68 65 20 66 69 72 73 74 20 66 6f  al. The first fo
10990 75 72 20 70 61 72 61 6d 65 74 65 72 73 0a 2a 2a  ur parameters.**
109a0 20 20 20 20 20 61 72 65 20 69 6e 74 65 72 70 72       are interpr
109b0 65 74 65 64 20 69 6e 20 74 68 65 20 73 61 6d 65  eted in the same
109c0 20 77 61 79 20 61 73 20 74 68 65 20 66 69 72 73   way as the firs
109d0 74 20 34 20 70 61 72 61 6d 65 74 65 72 73 20 74  t 4 parameters t
109e0 6f 0a 2a 2a 20 20 20 20 20 46 55 4e 43 54 49 4f  o.**     FUNCTIO
109f0 4e 28 29 2e 0a 2a 2a 0a 2a 2a 20 20 20 57 46 55  N()..**.**   WFU
10a00 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41  NCTION(zName, nA
10a10 72 67 2c 20 69 41 72 67 2c 20 78 53 74 65 70 2c  rg, iArg, xStep,
10a20 20 78 46 69 6e 61 6c 2c 20 78 56 61 6c 75 65 2c   xFinal, xValue,
10a30 20 78 49 6e 76 65 72 73 65 29 0a 2a 2a 20 20 20   xInverse).**   
10a40 20 20 55 73 65 64 20 74 6f 20 63 72 65 61 74 65    Used to create
10a50 20 61 6e 20 61 67 67 72 65 67 61 74 65 20 66 75   an aggregate fu
10a60 6e 63 74 69 6f 6e 20 64 65 66 69 6e 69 74 69 6f  nction definitio
10a70 6e 20 69 6d 70 6c 65 6d 65 6e 74 65 64 20 62 79  n implemented by
10a80 0a 2a 2a 20 20 20 20 20 74 68 65 20 43 20 66 75  .**     the C fu
10a90 6e 63 74 69 6f 6e 73 20 78 53 74 65 70 20 61 6e  nctions xStep an
10aa0 64 20 78 46 69 6e 61 6c 2e 20 54 68 65 20 66 69  d xFinal. The fi
10ab0 72 73 74 20 66 6f 75 72 20 70 61 72 61 6d 65 74  rst four paramet
10ac0 65 72 73 0a 2a 2a 20 20 20 20 20 61 72 65 20 69  ers.**     are i
10ad0 6e 74 65 72 70 72 65 74 65 64 20 69 6e 20 74 68  nterpreted in th
10ae0 65 20 73 61 6d 65 20 77 61 79 20 61 73 20 74 68  e same way as th
10af0 65 20 66 69 72 73 74 20 34 20 70 61 72 61 6d 65  e first 4 parame
10b00 74 65 72 73 20 74 6f 0a 2a 2a 20 20 20 20 20 46  ters to.**     F
10b10 55 4e 43 54 49 4f 4e 28 29 2e 0a 2a 2a 0a 2a 2a  UNCTION()..**.**
10b20 20 20 20 4c 49 4b 45 46 55 4e 43 28 7a 4e 61 6d     LIKEFUNC(zNam
10b30 65 2c 20 6e 41 72 67 2c 20 70 41 72 67 2c 20 66  e, nArg, pArg, f
10b40 6c 61 67 73 29 0a 2a 2a 20 20 20 20 20 55 73 65  lags).**     Use
10b50 64 20 74 6f 20 63 72 65 61 74 65 20 61 20 73 63  d to create a sc
10b60 61 6c 61 72 20 66 75 6e 63 74 69 6f 6e 20 64 65  alar function de
10b70 66 69 6e 69 74 69 6f 6e 20 6f 66 20 61 20 66 75  finition of a fu
10b80 6e 63 74 69 6f 6e 20 7a 4e 61 6d 65 0a 2a 2a 20  nction zName.** 
10b90 20 20 20 20 74 68 61 74 20 61 63 63 65 70 74 73      that accepts
10ba0 20 6e 41 72 67 20 61 72 67 75 6d 65 6e 74 73 20   nArg arguments 
10bb0 61 6e 64 20 69 73 20 69 6d 70 6c 65 6d 65 6e 74  and is implement
10bc0 65 64 20 62 79 20 61 20 63 61 6c 6c 20 74 6f 20  ed by a call to 
10bd0 43 0a 2a 2a 20 20 20 20 20 66 75 6e 63 74 69 6f  C.**     functio
10be0 6e 20 6c 69 6b 65 46 75 6e 63 2e 20 41 72 67 75  n likeFunc. Argu
10bf0 6d 65 6e 74 20 70 41 72 67 20 69 73 20 63 61 73  ment pArg is cas
10c00 74 20 74 6f 20 61 20 28 76 6f 69 64 20 2a 29 20  t to a (void *) 
10c10 61 6e 64 20 6d 61 64 65 0a 2a 2a 20 20 20 20 20  and made.**     
10c20 61 76 61 69 6c 61 62 6c 65 20 61 73 20 74 68 65  available as the
10c30 20 66 75 6e 63 74 69 6f 6e 20 75 73 65 72 2d 64   function user-d
10c40 61 74 61 20 28 73 71 6c 69 74 65 33 5f 75 73 65  ata (sqlite3_use
10c50 72 5f 64 61 74 61 28 29 29 2e 20 54 68 65 0a 2a  r_data()). The.*
10c60 2a 20 20 20 20 20 46 75 6e 63 44 65 66 2e 66 6c  *     FuncDef.fl
10c70 61 67 73 20 76 61 72 69 61 62 6c 65 20 69 73 20  ags variable is 
10c80 73 65 74 20 74 6f 20 74 68 65 20 76 61 6c 75 65  set to the value
10c90 20 70 61 73 73 65 64 20 61 73 20 74 68 65 20 66   passed as the f
10ca0 6c 61 67 73 0a 2a 2a 20 20 20 20 20 70 61 72 61  lags.**     para
10cb0 6d 65 74 65 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e  meter..*/.#defin
10cc0 65 20 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65  e FUNCTION(zName
10cd0 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c 20 62 4e  , nArg, iArg, bN
10ce0 43 2c 20 78 46 75 6e 63 29 20 5c 0a 20 20 7b 6e  C, xFunc) \.  {n
10cf0 41 72 67 2c 20 53 51 4c 49 54 45 5f 46 55 4e 43  Arg, SQLITE_FUNC
10d00 5f 43 4f 4e 53 54 41 4e 54 7c 53 51 4c 49 54 45  _CONSTANT|SQLITE
10d10 5f 55 54 46 38 7c 28 62 4e 43 2a 53 51 4c 49 54  _UTF8|(bNC*SQLIT
10d20 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29  E_FUNC_NEEDCOLL)
10d30 2c 20 5c 0a 20 20 20 53 51 4c 49 54 45 5f 49 4e  , \.   SQLITE_IN
10d40 54 5f 54 4f 5f 50 54 52 28 69 41 72 67 29 2c 20  T_TO_PTR(iArg), 
10d50 30 2c 20 78 46 75 6e 63 2c 20 30 2c 20 30 2c 20  0, xFunc, 0, 0, 
10d60 30 2c 20 23 7a 4e 61 6d 65 2c 20 7b 30 7d 20 7d  0, #zName, {0} }
10d70 0a 23 64 65 66 69 6e 65 20 56 46 55 4e 43 54 49  .#define VFUNCTI
10d80 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20  ON(zName, nArg, 
10d90 69 41 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63  iArg, bNC, xFunc
10da0 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c  ) \.  {nArg, SQL
10db0 49 54 45 5f 55 54 46 38 7c 28 62 4e 43 2a 53 51  ITE_UTF8|(bNC*SQ
10dc0 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f  LITE_FUNC_NEEDCO
10dd0 4c 4c 29 2c 20 5c 0a 20 20 20 53 51 4c 49 54 45  LL), \.   SQLITE
10de0 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 69 41 72 67  _INT_TO_PTR(iArg
10df0 29 2c 20 30 2c 20 78 46 75 6e 63 2c 20 30 2c 20  ), 0, xFunc, 0, 
10e00 30 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c 20 7b 30  0, 0, #zName, {0
10e10 7d 20 7d 0a 23 64 65 66 69 6e 65 20 44 46 55 4e  } }.#define DFUN
10e20 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72  CTION(zName, nAr
10e30 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78 46  g, iArg, bNC, xF
10e40 75 6e 63 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20  unc) \.  {nArg, 
10e50 53 51 4c 49 54 45 5f 46 55 4e 43 5f 53 4c 4f 43  SQLITE_FUNC_SLOC
10e60 48 4e 47 7c 53 51 4c 49 54 45 5f 55 54 46 38 2c  HNG|SQLITE_UTF8,
10e70 20 5c 0a 20 20 20 30 2c 20 30 2c 20 78 46 75 6e   \.   0, 0, xFun
10e80 63 2c 20 30 2c 20 30 2c 20 30 2c 20 23 7a 4e 61  c, 0, 0, 0, #zNa
10e90 6d 65 2c 20 7b 30 7d 20 7d 0a 23 64 65 66 69 6e  me, {0} }.#defin
10ea0 65 20 50 55 52 45 5f 44 41 54 45 28 7a 4e 61 6d  e PURE_DATE(zNam
10eb0 65 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c 20 62  e, nArg, iArg, b
10ec0 4e 43 2c 20 78 46 75 6e 63 29 20 5c 0a 20 20 7b  NC, xFunc) \.  {
10ed0 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f 46 55 4e  nArg, SQLITE_FUN
10ee0 43 5f 53 4c 4f 43 48 4e 47 7c 53 51 4c 49 54 45  C_SLOCHNG|SQLITE
10ef0 5f 55 54 46 38 7c 53 51 4c 49 54 45 5f 46 55 4e  _UTF8|SQLITE_FUN
10f00 43 5f 43 4f 4e 53 54 41 4e 54 2c 20 5c 0a 20 20  C_CONSTANT, \.  
10f10 20 28 76 6f 69 64 2a 29 26 73 71 6c 69 74 65 33   (void*)&sqlite3
10f20 43 6f 6e 66 69 67 2c 20 30 2c 20 78 46 75 6e 63  Config, 0, xFunc
10f30 2c 20 30 2c 20 30 2c 20 30 2c 20 23 7a 4e 61 6d  , 0, 0, 0, #zNam
10f40 65 2c 20 7b 30 7d 20 7d 0a 23 64 65 66 69 6e 65  e, {0} }.#define
10f50 20 46 55 4e 43 54 49 4f 4e 32 28 7a 4e 61 6d 65   FUNCTION2(zName
10f60 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c 20 62 4e  , nArg, iArg, bN
10f70 43 2c 20 78 46 75 6e 63 2c 20 65 78 74 72 61 46  C, xFunc, extraF
10f80 6c 61 67 73 29 20 5c 0a 20 20 7b 6e 41 72 67 2c  lags) \.  {nArg,
10f90 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53  SQLITE_FUNC_CONS
10fa0 54 41 4e 54 7c 53 51 4c 49 54 45 5f 55 54 46 38  TANT|SQLITE_UTF8
10fb0 7c 28 62 4e 43 2a 53 51 4c 49 54 45 5f 46 55 4e  |(bNC*SQLITE_FUN
10fc0 43 5f 4e 45 45 44 43 4f 4c 4c 29 7c 65 78 74 72  C_NEEDCOLL)|extr
10fd0 61 46 6c 61 67 73 2c 5c 0a 20 20 20 53 51 4c 49  aFlags,\.   SQLI
10fe0 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 69 41  TE_INT_TO_PTR(iA
10ff0 72 67 29 2c 20 30 2c 20 78 46 75 6e 63 2c 20 30  rg), 0, xFunc, 0
11000 2c 20 30 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c 20  , 0, 0, #zName, 
11010 7b 30 7d 20 7d 0a 23 64 65 66 69 6e 65 20 53 54  {0} }.#define ST
11020 52 5f 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65  R_FUNCTION(zName
11030 2c 20 6e 41 72 67 2c 20 70 41 72 67 2c 20 62 4e  , nArg, pArg, bN
11040 43 2c 20 78 46 75 6e 63 29 20 5c 0a 20 20 7b 6e  C, xFunc) \.  {n
11050 41 72 67 2c 20 53 51 4c 49 54 45 5f 46 55 4e 43  Arg, SQLITE_FUNC
11060 5f 53 4c 4f 43 48 4e 47 7c 53 51 4c 49 54 45 5f  _SLOCHNG|SQLITE_
11070 55 54 46 38 7c 28 62 4e 43 2a 53 51 4c 49 54 45  UTF8|(bNC*SQLITE
11080 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 2c  _FUNC_NEEDCOLL),
11090 20 5c 0a 20 20 20 70 41 72 67 2c 20 30 2c 20 78   \.   pArg, 0, x
110a0 46 75 6e 63 2c 20 30 2c 20 30 2c 20 30 2c 20 23  Func, 0, 0, 0, #
110b0 7a 4e 61 6d 65 2c 20 7d 0a 23 64 65 66 69 6e 65  zName, }.#define
110c0 20 4c 49 4b 45 46 55 4e 43 28 7a 4e 61 6d 65 2c   LIKEFUNC(zName,
110d0 20 6e 41 72 67 2c 20 61 72 67 2c 20 66 6c 61 67   nArg, arg, flag
110e0 73 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51  s) \.  {nArg, SQ
110f0 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41  LITE_FUNC_CONSTA
11100 4e 54 7c 53 51 4c 49 54 45 5f 55 54 46 38 7c 66  NT|SQLITE_UTF8|f
11110 6c 61 67 73 2c 20 5c 0a 20 20 20 28 76 6f 69 64  lags, \.   (void
11120 20 2a 29 61 72 67 2c 20 30 2c 20 6c 69 6b 65 46   *)arg, 0, likeF
11130 75 6e 63 2c 20 30 2c 20 30 2c 20 30 2c 20 23 7a  unc, 0, 0, 0, #z
11140 4e 61 6d 65 2c 20 7b 30 7d 20 7d 0a 23 64 65 66  Name, {0} }.#def
11150 69 6e 65 20 41 47 47 52 45 47 41 54 45 28 7a 4e  ine AGGREGATE(zN
11160 61 6d 65 2c 20 6e 41 72 67 2c 20 61 72 67 2c 20  ame, nArg, arg, 
11170 6e 63 2c 20 78 53 74 65 70 2c 20 78 46 69 6e 61  nc, xStep, xFina
11180 6c 2c 20 78 56 61 6c 75 65 29 20 5c 0a 20 20 7b  l, xValue) \.  {
11190 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f 55 54 46  nArg, SQLITE_UTF
111a0 38 7c 28 6e 63 2a 53 51 4c 49 54 45 5f 46 55 4e  8|(nc*SQLITE_FUN
111b0 43 5f 4e 45 45 44 43 4f 4c 4c 29 2c 20 5c 0a 20  C_NEEDCOLL), \. 
111c0 20 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f    SQLITE_INT_TO_
111d0 50 54 52 28 61 72 67 29 2c 20 30 2c 20 78 53 74  PTR(arg), 0, xSt
111e0 65 70 2c 78 46 69 6e 61 6c 2c 78 56 61 6c 75 65  ep,xFinal,xValue
111f0 2c 30 2c 23 7a 4e 61 6d 65 2c 20 7b 30 7d 7d 0a  ,0,#zName, {0}}.
11200 23 64 65 66 69 6e 65 20 41 47 47 52 45 47 41 54  #define AGGREGAT
11210 45 32 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20  E2(zName, nArg, 
11220 61 72 67 2c 20 6e 63 2c 20 78 53 74 65 70 2c 20  arg, nc, xStep, 
11230 78 46 69 6e 61 6c 2c 20 65 78 74 72 61 46 6c 61  xFinal, extraFla
11240 67 73 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53  gs) \.  {nArg, S
11250 51 4c 49 54 45 5f 55 54 46 38 7c 28 6e 63 2a 53  QLITE_UTF8|(nc*S
11260 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43  QLITE_FUNC_NEEDC
11270 4f 4c 4c 29 7c 65 78 74 72 61 46 6c 61 67 73 2c  OLL)|extraFlags,
11280 20 5c 0a 20 20 20 53 51 4c 49 54 45 5f 49 4e 54   \.   SQLITE_INT
11290 5f 54 4f 5f 50 54 52 28 61 72 67 29 2c 20 30 2c  _TO_PTR(arg), 0,
112a0 20 78 53 74 65 70 2c 78 46 69 6e 61 6c 2c 78 46   xStep,xFinal,xF
112b0 69 6e 61 6c 2c 30 2c 23 7a 4e 61 6d 65 2c 20 7b  inal,0,#zName, {
112c0 30 7d 7d 0a 23 64 65 66 69 6e 65 20 57 41 47 47  0}}.#define WAGG
112d0 52 45 47 41 54 45 28 7a 4e 61 6d 65 2c 20 6e 41  REGATE(zName, nA
112e0 72 67 2c 20 61 72 67 2c 20 6e 63 2c 20 78 53 74  rg, arg, nc, xSt
112f0 65 70 2c 20 78 46 69 6e 61 6c 2c 20 78 56 61 6c  ep, xFinal, xVal
11300 75 65 2c 20 78 49 6e 76 65 72 73 65 2c 20 66 29  ue, xInverse, f)
11310 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49   \.  {nArg, SQLI
11320 54 45 5f 55 54 46 38 7c 28 6e 63 2a 53 51 4c 49  TE_UTF8|(nc*SQLI
11330 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c  TE_FUNC_NEEDCOLL
11340 29 7c 66 2c 20 5c 0a 20 20 20 53 51 4c 49 54 45  )|f, \.   SQLITE
11350 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 61 72 67 29  _INT_TO_PTR(arg)
11360 2c 20 30 2c 20 78 53 74 65 70 2c 78 46 69 6e 61  , 0, xStep,xFina
11370 6c 2c 78 56 61 6c 75 65 2c 78 49 6e 76 65 72 73  l,xValue,xInvers
11380 65 2c 23 7a 4e 61 6d 65 2c 20 7b 30 7d 7d 0a 23  e,#zName, {0}}.#
11390 64 65 66 69 6e 65 20 49 4e 54 45 52 4e 41 4c 5f  define INTERNAL_
113a0 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20  FUNCTION(zName, 
113b0 6e 41 72 67 2c 20 78 46 75 6e 63 29 20 5c 0a 20  nArg, xFunc) \. 
113c0 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f 46   {nArg, SQLITE_F
113d0 55 4e 43 5f 49 4e 54 45 52 4e 41 4c 7c 53 51 4c  UNC_INTERNAL|SQL
113e0 49 54 45 5f 55 54 46 38 7c 53 51 4c 49 54 45 5f  ITE_UTF8|SQLITE_
113f0 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 2c 20 5c  FUNC_CONSTANT, \
11400 0a 20 20 20 30 2c 20 30 2c 20 78 46 75 6e 63 2c  .   0, 0, xFunc,
11410 20 30 2c 20 30 2c 20 30 2c 20 23 7a 4e 61 6d 65   0, 0, 0, #zName
11420 2c 20 7b 30 7d 20 7d 0a 0a 0a 2f 2a 0a 2a 2a 20  , {0} }.../*.** 
11430 41 6c 6c 20 63 75 72 72 65 6e 74 20 73 61 76 65  All current save
11440 70 6f 69 6e 74 73 20 61 72 65 20 73 74 6f 72 65  points are store
11450 64 20 69 6e 20 61 20 6c 69 6e 6b 65 64 20 6c 69  d in a linked li
11460 73 74 20 73 74 61 72 74 69 6e 67 20 61 74 0a 2a  st starting at.*
11470 2a 20 73 71 6c 69 74 65 33 2e 70 53 61 76 65 70  * sqlite3.pSavep
11480 6f 69 6e 74 2e 20 54 68 65 20 66 69 72 73 74 20  oint. The first 
11490 65 6c 65 6d 65 6e 74 20 69 6e 20 74 68 65 20 6c  element in the l
114a0 69 73 74 20 69 73 20 74 68 65 20 6d 6f 73 74 20  ist is the most 
114b0 72 65 63 65 6e 74 6c 79 0a 2a 2a 20 6f 70 65 6e  recently.** open
114c0 65 64 20 73 61 76 65 70 6f 69 6e 74 2e 20 53 61  ed savepoint. Sa
114d0 76 65 70 6f 69 6e 74 73 20 61 72 65 20 61 64 64  vepoints are add
114e0 65 64 20 74 6f 20 74 68 65 20 6c 69 73 74 20 62  ed to the list b
114f0 79 20 74 68 65 20 76 64 62 65 0a 2a 2a 20 4f 50  y the vdbe.** OP
11500 5f 53 61 76 65 70 6f 69 6e 74 20 69 6e 73 74 72  _Savepoint instr
11510 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63  uction..*/.struc
11520 74 20 53 61 76 65 70 6f 69 6e 74 20 7b 0a 20 20  t Savepoint {.  
11530 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20  char *zName;    
11540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11550 20 20 20 20 2f 2a 20 53 61 76 65 70 6f 69 6e 74      /* Savepoint
11560 20 6e 61 6d 65 20 28 6e 75 6c 2d 74 65 72 6d 69   name (nul-termi
11570 6e 61 74 65 64 29 20 2a 2f 0a 20 20 69 36 34 20  nated) */.  i64 
11580 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 3b 20 20  nDeferredCons;  
11590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
115a0 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 64 65 66  /* Number of def
115b0 65 72 72 65 64 20 66 6b 20 76 69 6f 6c 61 74 69  erred fk violati
115c0 6f 6e 73 20 2a 2f 0a 20 20 69 36 34 20 6e 44 65  ons */.  i64 nDe
115d0 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3b 20 20  ferredImmCons;  
115e0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
115f0 4e 75 6d 62 65 72 20 6f 66 20 64 65 66 65 72 72  Number of deferr
11600 65 64 20 69 6d 6d 20 66 6b 2e 20 2a 2f 0a 20 20  ed imm fk. */.  
11610 53 61 76 65 70 6f 69 6e 74 20 2a 70 4e 65 78 74  Savepoint *pNext
11620 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
11630 20 20 20 20 2f 2a 20 50 61 72 65 6e 74 20 73 61      /* Parent sa
11640 76 65 70 6f 69 6e 74 20 28 69 66 20 61 6e 79 29  vepoint (if any)
11650 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68   */.};../*.** Th
11660 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 72 65 20  e following are 
11670 75 73 65 64 20 61 73 20 74 68 65 20 73 65 63 6f  used as the seco
11680 6e 64 20 70 61 72 61 6d 65 74 65 72 20 74 6f 20  nd parameter to 
11690 73 71 6c 69 74 65 33 53 61 76 65 70 6f 69 6e 74  sqlite3Savepoint
116a0 28 29 2c 0a 2a 2a 20 61 6e 64 20 61 73 20 74 68  (),.** and as th
116b0 65 20 50 31 20 61 72 67 75 6d 65 6e 74 20 74 6f  e P1 argument to
116c0 20 74 68 65 20 4f 50 5f 53 61 76 65 70 6f 69 6e   the OP_Savepoin
116d0 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a  t instruction..*
116e0 2f 0a 23 64 65 66 69 6e 65 20 53 41 56 45 50 4f  /.#define SAVEPO
116f0 49 4e 54 5f 42 45 47 49 4e 20 20 20 20 20 20 30  INT_BEGIN      0
11700 0a 23 64 65 66 69 6e 65 20 53 41 56 45 50 4f 49  .#define SAVEPOI
11710 4e 54 5f 52 45 4c 45 41 53 45 20 20 20 20 31 0a  NT_RELEASE    1.
11720 23 64 65 66 69 6e 65 20 53 41 56 45 50 4f 49 4e  #define SAVEPOIN
11730 54 5f 52 4f 4c 4c 42 41 43 4b 20 20 20 32 0a 0a  T_ROLLBACK   2..
11740 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 53 51 4c 69  ./*.** Each SQLi
11750 74 65 20 6d 6f 64 75 6c 65 20 28 76 69 72 74 75  te module (virtu
11760 61 6c 20 74 61 62 6c 65 20 64 65 66 69 6e 69 74  al table definit
11770 69 6f 6e 29 20 69 73 20 64 65 66 69 6e 65 64 20  ion) is defined 
11780 62 79 20 61 6e 0a 2a 2a 20 69 6e 73 74 61 6e 63  by an.** instanc
11790 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69  e of the followi
117a0 6e 67 20 73 74 72 75 63 74 75 72 65 2c 20 73 74  ng structure, st
117b0 6f 72 65 64 20 69 6e 20 74 68 65 20 73 71 6c 69  ored in the sqli
117c0 74 65 33 2e 61 4d 6f 64 75 6c 65 0a 2a 2a 20 68  te3.aModule.** h
117d0 61 73 68 20 74 61 62 6c 65 2e 0a 2a 2f 0a 73 74  ash table..*/.st
117e0 72 75 63 74 20 4d 6f 64 75 6c 65 20 7b 0a 20 20  ruct Module {.  
117f0 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d 6f  const sqlite3_mo
11800 64 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b 20 20  dule *pModule;  
11810 20 20 20 20 20 2f 2a 20 43 61 6c 6c 62 61 63 6b       /* Callback
11820 20 70 6f 69 6e 74 65 72 73 20 2a 2f 0a 20 20 63   pointers */.  c
11830 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4e 61 6d 65  onst char *zName
11840 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
11850 20 20 20 20 2f 2a 20 4e 61 6d 65 20 70 61 73 73      /* Name pass
11860 65 64 20 74 6f 20 63 72 65 61 74 65 5f 6d 6f 64  ed to create_mod
11870 75 6c 65 28 29 20 2a 2f 0a 20 20 76 6f 69 64 20  ule() */.  void 
11880 2a 70 41 75 78 3b 20 20 20 20 20 20 20 20 20 20  *pAux;          
11890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
118a0 2f 2a 20 70 41 75 78 20 70 61 73 73 65 64 20 74  /* pAux passed t
118b0 6f 20 63 72 65 61 74 65 5f 6d 6f 64 75 6c 65 28  o create_module(
118c0 29 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 44  ) */.  void (*xD
118d0 65 73 74 72 6f 79 29 28 76 6f 69 64 20 2a 29 3b  estroy)(void *);
118e0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d              /* M
118f0 6f 64 75 6c 65 20 64 65 73 74 72 75 63 74 6f 72  odule destructor
11900 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 54   function */.  T
11910 61 62 6c 65 20 2a 70 45 70 6f 54 61 62 3b 20 20  able *pEpoTab;  
11920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11930 20 20 20 20 2f 2a 20 45 70 6f 6e 79 6d 6f 75 73      /* Eponymous
11940 20 74 61 62 6c 65 20 66 6f 72 20 74 68 69 73 20   table for this 
11950 6d 6f 64 75 6c 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  module */.};../*
11960 0a 2a 2a 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  .** information 
11970 61 62 6f 75 74 20 65 61 63 68 20 63 6f 6c 75 6d  about each colum
11980 6e 20 6f 66 20 61 6e 20 53 51 4c 20 74 61 62 6c  n of an SQL tabl
11990 65 20 69 73 20 68 65 6c 64 20 69 6e 20 61 6e 20  e is held in an 
119a0 69 6e 73 74 61 6e 63 65 0a 2a 2a 20 6f 66 20 74  instance.** of t
119b0 68 69 73 20 73 74 72 75 63 74 75 72 65 2e 0a 2a  his structure..*
119c0 2f 0a 73 74 72 75 63 74 20 43 6f 6c 75 6d 6e 20  /.struct Column 
119d0 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b  {.  char *zName;
119e0 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20       /* Name of 
119f0 74 68 69 73 20 63 6f 6c 75 6d 6e 2c 20 5c 30 30  this column, \00
11a00 30 2c 20 74 68 65 6e 20 74 68 65 20 74 79 70 65  0, then the type
11a10 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 44 66 6c   */.  Expr *pDfl
11a20 74 3b 20 20 20 20 20 2f 2a 20 44 65 66 61 75 6c  t;     /* Defaul
11a30 74 20 76 61 6c 75 65 20 6f 66 20 74 68 69 73 20  t value of this 
11a40 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 63 68 61 72  column */.  char
11a50 20 2a 7a 43 6f 6c 6c 3b 20 20 20 20 20 2f 2a 20   *zColl;     /* 
11a60 43 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e  Collating sequen
11a70 63 65 2e 20 20 49 66 20 4e 55 4c 4c 2c 20 75 73  ce.  If NULL, us
11a80 65 20 74 68 65 20 64 65 66 61 75 6c 74 20 2a 2f  e the default */
11a90 0a 20 20 75 38 20 6e 6f 74 4e 75 6c 6c 3b 20 20  .  u8 notNull;  
11aa0 20 20 20 20 2f 2a 20 41 6e 20 4f 45 5f 20 63 6f      /* An OE_ co
11ab0 64 65 20 66 6f 72 20 68 61 6e 64 6c 69 6e 67 20  de for handling 
11ac0 61 20 4e 4f 54 20 4e 55 4c 4c 20 63 6f 6e 73 74  a NOT NULL const
11ad0 72 61 69 6e 74 20 2a 2f 0a 20 20 63 68 61 72 20  raint */.  char 
11ae0 61 66 66 69 6e 69 74 79 3b 20 20 20 2f 2a 20 4f  affinity;   /* O
11af0 6e 65 20 6f 66 20 74 68 65 20 53 51 4c 49 54 45  ne of the SQLITE
11b00 5f 41 46 46 5f 2e 2e 2e 20 76 61 6c 75 65 73 20  _AFF_... values 
11b10 2a 2f 0a 20 20 75 38 20 73 7a 45 73 74 3b 20 20  */.  u8 szEst;  
11b20 20 20 20 20 20 20 2f 2a 20 45 73 74 69 6d 61 74        /* Estimat
11b30 65 64 20 73 69 7a 65 20 6f 66 20 76 61 6c 75 65  ed size of value
11b40 20 69 6e 20 74 68 69 73 20 63 6f 6c 75 6d 6e 2e   in this column.
11b50 20 73 69 7a 65 6f 66 28 49 4e 54 29 3d 3d 31 20   sizeof(INT)==1 
11b60 2a 2f 0a 20 20 75 38 20 63 6f 6c 46 6c 61 67 73  */.  u8 colFlags
11b70 3b 20 20 20 20 20 2f 2a 20 42 6f 6f 6c 65 61 6e  ;     /* Boolean
11b80 20 70 72 6f 70 65 72 74 69 65 73 2e 20 20 53 65   properties.  Se
11b90 65 20 43 4f 4c 46 4c 41 47 5f 20 64 65 66 69 6e  e COLFLAG_ defin
11ba0 65 73 20 62 65 6c 6f 77 20 2a 2f 0a 7d 3b 0a 0a  es below */.};..
11bb0 2f 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65  /* Allowed value
11bc0 73 20 66 6f 72 20 43 6f 6c 75 6d 6e 2e 63 6f 6c  s for Column.col
11bd0 46 6c 61 67 73 3a 0a 2a 2f 0a 23 64 65 66 69 6e  Flags:.*/.#defin
11be0 65 20 43 4f 4c 46 4c 41 47 5f 50 52 49 4d 4b 45  e COLFLAG_PRIMKE
11bf0 59 20 20 30 78 30 30 30 31 20 20 20 20 2f 2a 20  Y  0x0001    /* 
11c00 43 6f 6c 75 6d 6e 20 69 73 20 70 61 72 74 20 6f  Column is part o
11c10 66 20 74 68 65 20 70 72 69 6d 61 72 79 20 6b 65  f the primary ke
11c20 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 43 4f 4c  y */.#define COL
11c30 46 4c 41 47 5f 48 49 44 44 45 4e 20 20 20 30 78  FLAG_HIDDEN   0x
11c40 30 30 30 32 20 20 20 20 2f 2a 20 41 20 68 69 64  0002    /* A hid
11c50 64 65 6e 20 63 6f 6c 75 6d 6e 20 69 6e 20 61 20  den column in a 
11c60 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 2a 2f  virtual table */
11c70 0a 23 64 65 66 69 6e 65 20 43 4f 4c 46 4c 41 47  .#define COLFLAG
11c80 5f 48 41 53 54 59 50 45 20 20 30 78 30 30 30 34  _HASTYPE  0x0004
11c90 20 20 20 20 2f 2a 20 54 79 70 65 20 6e 61 6d 65      /* Type name
11ca0 20 66 6f 6c 6c 6f 77 73 20 63 6f 6c 75 6d 6e 20   follows column 
11cb0 6e 61 6d 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  name */.#define 
11cc0 43 4f 4c 46 4c 41 47 5f 55 4e 49 51 55 45 20 20  COLFLAG_UNIQUE  
11cd0 20 30 78 30 30 30 38 20 20 20 20 2f 2a 20 43 6f   0x0008    /* Co
11ce0 6c 75 6d 6e 20 64 65 66 20 63 6f 6e 74 61 69 6e  lumn def contain
11cf0 73 20 22 55 4e 49 51 55 45 22 20 6f 72 20 22 50  s "UNIQUE" or "P
11d00 4b 22 20 2a 2f 0a 23 64 65 66 69 6e 65 20 43 4f  K" */.#define CO
11d10 4c 46 4c 41 47 5f 53 4f 52 54 45 52 52 45 46 20  LFLAG_SORTERREF 
11d20 30 78 30 30 31 30 20 20 20 2f 2a 20 55 73 65 20  0x0010   /* Use 
11d30 73 6f 72 74 65 72 2d 72 65 66 73 20 77 69 74 68  sorter-refs with
11d40 20 74 68 69 73 20 63 6f 6c 75 6d 6e 20 2a 2f 0a   this column */.
11d50 0a 2f 2a 0a 2a 2a 20 41 20 22 43 6f 6c 6c 61 74  ./*.** A "Collat
11d60 69 6e 67 20 53 65 71 75 65 6e 63 65 22 20 69 73  ing Sequence" is
11d70 20 64 65 66 69 6e 65 64 20 62 79 20 61 6e 20 69   defined by an i
11d80 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66  nstance of the f
11d90 6f 6c 6c 6f 77 69 6e 67 0a 2a 2a 20 73 74 72 75  ollowing.** stru
11da0 63 74 75 72 65 2e 20 43 6f 6e 63 65 70 74 75 61  cture. Conceptua
11db0 6c 6c 79 2c 20 61 20 63 6f 6c 6c 61 74 69 6e 67  lly, a collating
11dc0 20 73 65 71 75 65 6e 63 65 20 63 6f 6e 73 69 73   sequence consis
11dd0 74 73 20 6f 66 20 61 20 6e 61 6d 65 20 61 6e 64  ts of a name and
11de0 0a 2a 2a 20 61 20 63 6f 6d 70 61 72 69 73 6f 6e  .** a comparison
11df0 20 72 6f 75 74 69 6e 65 20 74 68 61 74 20 64 65   routine that de
11e00 66 69 6e 65 73 20 74 68 65 20 6f 72 64 65 72 20  fines the order 
11e10 6f 66 20 74 68 61 74 20 73 65 71 75 65 6e 63 65  of that sequence
11e20 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 43 6f 6c 6c 53  ..**.** If CollS
11e30 65 71 2e 78 43 6d 70 20 69 73 20 4e 55 4c 4c 2c  eq.xCmp is NULL,
11e40 20 69 74 20 6d 65 61 6e 73 20 74 68 61 74 20 74   it means that t
11e50 68 65 0a 2a 2a 20 63 6f 6c 6c 61 74 69 6e 67 20  he.** collating 
11e60 73 65 71 75 65 6e 63 65 20 69 73 20 75 6e 64 65  sequence is unde
11e70 66 69 6e 65 64 2e 20 20 49 6e 64 69 63 65 73 20  fined.  Indices 
11e80 62 75 69 6c 74 20 6f 6e 20 61 6e 20 75 6e 64 65  built on an unde
11e90 66 69 6e 65 64 0a 2a 2a 20 63 6f 6c 6c 61 74 69  fined.** collati
11ea0 6e 67 20 73 65 71 75 65 6e 63 65 20 6d 61 79 20  ng sequence may 
11eb0 6e 6f 74 20 62 65 20 72 65 61 64 20 6f 72 20 77  not be read or w
11ec0 72 69 74 74 65 6e 2e 0a 2a 2f 0a 73 74 72 75 63  ritten..*/.struc
11ed0 74 20 43 6f 6c 6c 53 65 71 20 7b 0a 20 20 63 68  t CollSeq {.  ch
11ee0 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20  ar *zName;      
11ef0 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74      /* Name of t
11f00 68 65 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71  he collating seq
11f10 75 65 6e 63 65 2c 20 55 54 46 2d 38 20 65 6e 63  uence, UTF-8 enc
11f20 6f 64 65 64 20 2a 2f 0a 20 20 75 38 20 65 6e 63  oded */.  u8 enc
11f30 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
11f40 2f 2a 20 54 65 78 74 20 65 6e 63 6f 64 69 6e 67  /* Text encoding
11f50 20 68 61 6e 64 6c 65 64 20 62 79 20 78 43 6d 70   handled by xCmp
11f60 28 29 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 55  () */.  void *pU
11f70 73 65 72 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  ser;          /*
11f80 20 46 69 72 73 74 20 61 72 67 75 6d 65 6e 74 20   First argument 
11f90 74 6f 20 78 43 6d 70 28 29 20 2a 2f 0a 20 20 69  to xCmp() */.  i
11fa0 6e 74 20 28 2a 78 43 6d 70 29 28 76 6f 69 64 2a  nt (*xCmp)(void*
11fb0 2c 69 6e 74 2c 20 63 6f 6e 73 74 20 76 6f 69 64  ,int, const void
11fc0 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20 76 6f  *, int, const vo
11fd0 69 64 2a 29 3b 0a 20 20 76 6f 69 64 20 28 2a 78  id*);.  void (*x
11fe0 44 65 6c 29 28 76 6f 69 64 2a 29 3b 20 20 2f 2a  Del)(void*);  /*
11ff0 20 44 65 73 74 72 75 63 74 6f 72 20 66 6f 72 20   Destructor for 
12000 70 55 73 65 72 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a  pUser */.};../*.
12010 2a 2a 20 41 20 73 6f 72 74 20 6f 72 64 65 72 20  ** A sort order 
12020 63 61 6e 20 62 65 20 65 69 74 68 65 72 20 41 53  can be either AS
12030 43 20 6f 72 20 44 45 53 43 2e 0a 2a 2f 0a 23 64  C or DESC..*/.#d
12040 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 4f 5f  efine SQLITE_SO_
12050 41 53 43 20 20 20 20 20 20 20 30 20 20 2f 2a 20  ASC       0  /* 
12060 53 6f 72 74 20 69 6e 20 61 73 63 65 6e 64 69 6e  Sort in ascendin
12070 67 20 6f 72 64 65 72 20 2a 2f 0a 23 64 65 66 69  g order */.#defi
12080 6e 65 20 53 51 4c 49 54 45 5f 53 4f 5f 44 45 53  ne SQLITE_SO_DES
12090 43 20 20 20 20 20 20 31 20 20 2f 2a 20 53 6f 72  C      1  /* Sor
120a0 74 20 69 6e 20 61 73 63 65 6e 64 69 6e 67 20 6f  t in ascending o
120b0 72 64 65 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20  rder */.#define 
120c0 53 51 4c 49 54 45 5f 53 4f 5f 55 4e 44 45 46 49  SQLITE_SO_UNDEFI
120d0 4e 45 44 20 2d 31 20 2f 2a 20 4e 6f 20 73 6f 72  NED -1 /* No sor
120e0 74 20 6f 72 64 65 72 20 73 70 65 63 69 66 69 65  t order specifie
120f0 64 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6c 75  d */../*.** Colu
12100 6d 6e 20 61 66 66 69 6e 69 74 79 20 74 79 70 65  mn affinity type
12110 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 73 65 20 75  s..**.** These u
12120 73 65 64 20 74 6f 20 68 61 76 65 20 6d 6e 65 6d  sed to have mnem
12130 6f 6e 69 63 20 6e 61 6d 65 20 6c 69 6b 65 20 27  onic name like '
12140 69 27 20 66 6f 72 20 53 51 4c 49 54 45 5f 41 46  i' for SQLITE_AF
12150 46 5f 49 4e 54 45 47 45 52 20 61 6e 64 0a 2a 2a  F_INTEGER and.**
12160 20 27 74 27 20 66 6f 72 20 53 51 4c 49 54 45 5f   't' for SQLITE_
12170 41 46 46 5f 54 45 58 54 2e 20 20 42 75 74 20 77  AFF_TEXT.  But w
12180 65 20 63 61 6e 20 73 61 76 65 20 61 20 6c 69 74  e can save a lit
12190 74 6c 65 20 73 70 61 63 65 20 61 6e 64 20 69 6d  tle space and im
121a0 70 72 6f 76 65 0a 2a 2a 20 74 68 65 20 73 70 65  prove.** the spe
121b0 65 64 20 61 20 6c 69 74 74 6c 65 20 62 79 20 6e  ed a little by n
121c0 75 6d 62 65 72 69 6e 67 20 74 68 65 20 76 61 6c  umbering the val
121d0 75 65 73 20 63 6f 6e 73 65 63 75 74 69 76 65 6c  ues consecutivel
121e0 79 2e 0a 2a 2a 0a 2a 2a 20 42 75 74 20 72 61 74  y..**.** But rat
121f0 68 65 72 20 74 68 61 6e 20 73 74 61 72 74 20 77  her than start w
12200 69 74 68 20 30 20 6f 72 20 31 2c 20 77 65 20 62  ith 0 or 1, we b
12210 65 67 69 6e 20 77 69 74 68 20 27 41 27 2e 20 20  egin with 'A'.  
12220 54 68 61 74 20 77 61 79 2c 0a 2a 2a 20 77 68 65  That way,.** whe
12230 6e 20 6d 75 6c 74 69 70 6c 65 20 61 66 66 69 6e  n multiple affin
12240 69 74 79 20 74 79 70 65 73 20 61 72 65 20 63 6f  ity types are co
12250 6e 63 61 74 65 6e 61 74 65 64 20 69 6e 74 6f 20  ncatenated into 
12260 61 20 73 74 72 69 6e 67 20 61 6e 64 0a 2a 2a 20  a string and.** 
12270 75 73 65 64 20 61 73 20 74 68 65 20 50 34 20 6f  used as the P4 o
12280 70 65 72 61 6e 64 2c 20 74 68 65 79 20 77 69 6c  perand, they wil
12290 6c 20 62 65 20 6d 6f 72 65 20 72 65 61 64 61 62  l be more readab
122a0 6c 65 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65 20 61  le..**.** Note a
122b0 6c 73 6f 20 74 68 61 74 20 74 68 65 20 6e 75 6d  lso that the num
122c0 65 72 69 63 20 74 79 70 65 73 20 61 72 65 20 67  eric types are g
122d0 72 6f 75 70 65 64 20 74 6f 67 65 74 68 65 72 20  rouped together 
122e0 73 6f 20 74 68 61 74 20 74 65 73 74 69 6e 67 0a  so that testing.
122f0 2a 2a 20 66 6f 72 20 61 20 6e 75 6d 65 72 69 63  ** for a numeric
12300 20 74 79 70 65 20 69 73 20 61 20 73 69 6e 67 6c   type is a singl
12310 65 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 20 41  e comparison.  A
12320 6e 64 20 74 68 65 20 42 4c 4f 42 20 74 79 70 65  nd the BLOB type
12330 20 69 73 20 66 69 72 73 74 2e 0a 2a 2f 0a 23 64   is first..*/.#d
12340 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 46 46  efine SQLITE_AFF
12350 5f 42 4c 4f 42 20 20 20 20 20 27 41 27 0a 23 64  _BLOB     'A'.#d
12360 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 46 46  efine SQLITE_AFF
12370 5f 54 45 58 54 20 20 20 20 20 27 42 27 0a 23 64  _TEXT     'B'.#d
12380 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 46 46  efine SQLITE_AFF
12390 5f 4e 55 4d 45 52 49 43 20 20 27 43 27 0a 23 64  _NUMERIC  'C'.#d
123a0 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 46 46  efine SQLITE_AFF
123b0 5f 49 4e 54 45 47 45 52 20 20 27 44 27 0a 23 64  _INTEGER  'D'.#d
123c0 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 46 46  efine SQLITE_AFF
123d0 5f 52 45 41 4c 20 20 20 20 20 27 45 27 0a 0a 23  _REAL     'E'..#
123e0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73  define sqlite3Is
123f0 4e 75 6d 65 72 69 63 41 66 66 69 6e 69 74 79 28  NumericAffinity(
12400 58 29 20 20 28 28 58 29 3e 3d 53 51 4c 49 54 45  X)  ((X)>=SQLITE
12410 5f 41 46 46 5f 4e 55 4d 45 52 49 43 29 0a 0a 2f  _AFF_NUMERIC)../
12420 2a 0a 2a 2a 20 54 68 65 20 53 51 4c 49 54 45 5f  *.** The SQLITE_
12430 41 46 46 5f 4d 41 53 4b 20 76 61 6c 75 65 73 20  AFF_MASK values 
12440 6d 61 73 6b 73 20 6f 66 66 20 74 68 65 20 73 69  masks off the si
12450 67 6e 69 66 69 63 61 6e 74 20 62 69 74 73 20 6f  gnificant bits o
12460 66 20 61 6e 0a 2a 2a 20 61 66 66 69 6e 69 74 79  f an.** affinity
12470 20 76 61 6c 75 65 2e 0a 2a 2f 0a 23 64 65 66 69   value..*/.#defi
12480 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 4d 41  ne SQLITE_AFF_MA
12490 53 4b 20 20 20 20 20 30 78 34 37 0a 0a 2f 2a 0a  SK     0x47../*.
124a0 2a 2a 20 41 64 64 69 74 69 6f 6e 61 6c 20 62 69  ** Additional bi
124b0 74 20 76 61 6c 75 65 73 20 74 68 61 74 20 63 61  t values that ca
124c0 6e 20 62 65 20 4f 52 65 64 20 77 69 74 68 20 61  n be ORed with a
124d0 6e 20 61 66 66 69 6e 69 74 79 20 77 69 74 68 6f  n affinity witho
124e0 75 74 0a 2a 2a 20 63 68 61 6e 67 69 6e 67 20 74  ut.** changing t
124f0 68 65 20 61 66 66 69 6e 69 74 79 2e 0a 2a 2a 0a  he affinity..**.
12500 2a 2a 20 54 68 65 20 53 51 4c 49 54 45 5f 4e 4f  ** The SQLITE_NO
12510 54 4e 55 4c 4c 20 66 6c 61 67 20 69 73 20 61 20  TNULL flag is a 
12520 63 6f 6d 62 69 6e 61 74 69 6f 6e 20 6f 66 20 4e  combination of N
12530 55 4c 4c 45 51 20 61 6e 64 20 4a 55 4d 50 49 46  ULLEQ and JUMPIF
12540 4e 55 4c 4c 2e 0a 2a 2a 20 49 74 20 63 61 75 73  NULL..** It caus
12550 65 73 20 61 6e 20 61 73 73 65 72 74 28 29 20 74  es an assert() t
12560 6f 20 66 69 72 65 20 69 66 20 65 69 74 68 65 72  o fire if either
12570 20 6f 70 65 72 61 6e 64 20 74 6f 20 61 20 63 6f   operand to a co
12580 6d 70 61 72 69 73 6f 6e 0a 2a 2a 20 6f 70 65 72  mparison.** oper
12590 61 74 6f 72 20 69 73 20 4e 55 4c 4c 2e 20 20 49  ator is NULL.  I
125a0 74 20 69 73 20 61 64 64 65 64 20 74 6f 20 63 65  t is added to ce
125b0 72 74 61 69 6e 20 63 6f 6d 70 61 72 69 73 6f 6e  rtain comparison
125c0 20 6f 70 65 72 61 74 6f 72 73 20 74 6f 0a 2a 2a   operators to.**
125d0 20 70 72 6f 76 65 20 74 68 61 74 20 74 68 65 20   prove that the 
125e0 6f 70 65 72 61 6e 64 73 20 61 72 65 20 61 6c 77  operands are alw
125f0 61 79 73 20 4e 4f 54 20 4e 55 4c 4c 2e 0a 2a 2f  ays NOT NULL..*/
12600 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
12610 4b 45 45 50 4e 55 4c 4c 20 20 20 20 20 30 78 30  KEEPNULL     0x0
12620 38 20 20 2f 2a 20 55 73 65 64 20 62 79 20 76 65  8  /* Used by ve
12630 63 74 6f 72 20 3d 3d 20 6f 72 20 3c 3e 20 2a 2f  ctor == or <> */
12640 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
12650 4a 55 4d 50 49 46 4e 55 4c 4c 20 20 20 30 78 31  JUMPIFNULL   0x1
12660 30 20 20 2f 2a 20 6a 75 6d 70 73 20 69 66 20 65  0  /* jumps if e
12670 69 74 68 65 72 20 6f 70 65 72 61 6e 64 20 69 73  ither operand is
12680 20 4e 55 4c 4c 20 2a 2f 0a 23 64 65 66 69 6e 65   NULL */.#define
12690 20 53 51 4c 49 54 45 5f 53 54 4f 52 45 50 32 20   SQLITE_STOREP2 
126a0 20 20 20 20 20 30 78 32 30 20 20 2f 2a 20 53 74       0x20  /* St
126b0 6f 72 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65  ore result in re
126c0 67 5b 50 32 5d 20 72 61 74 68 65 72 20 74 68 61  g[P2] rather tha
126d0 6e 20 6a 75 6d 70 20 2a 2f 0a 23 64 65 66 69 6e  n jump */.#defin
126e0 65 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20  e SQLITE_NULLEQ 
126f0 20 20 20 20 20 20 30 78 38 30 20 20 2f 2a 20 4e        0x80  /* N
12700 55 4c 4c 3d 4e 55 4c 4c 20 2a 2f 0a 23 64 65 66  ULL=NULL */.#def
12710 69 6e 65 20 53 51 4c 49 54 45 5f 4e 4f 54 4e 55  ine SQLITE_NOTNU
12720 4c 4c 20 20 20 20 20 20 30 78 39 30 20 20 2f 2a  LL      0x90  /*
12730 20 41 73 73 65 72 74 20 74 68 61 74 20 6f 70 65   Assert that ope
12740 72 61 6e 64 73 20 61 72 65 20 6e 65 76 65 72 20  rands are never 
12750 4e 55 4c 4c 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41  NULL */../*.** A
12760 6e 20 6f 62 6a 65 63 74 20 6f 66 20 74 68 69 73  n object of this
12770 20 74 79 70 65 20 69 73 20 63 72 65 61 74 65 64   type is created
12780 20 66 6f 72 20 65 61 63 68 20 76 69 72 74 75 61   for each virtua
12790 6c 20 74 61 62 6c 65 20 70 72 65 73 65 6e 74 20  l table present 
127a0 69 6e 0a 2a 2a 20 74 68 65 20 64 61 74 61 62 61  in.** the databa
127b0 73 65 20 73 63 68 65 6d 61 2e 0a 2a 2a 0a 2a 2a  se schema..**.**
127c0 20 49 66 20 74 68 65 20 64 61 74 61 62 61 73 65   If the database
127d0 20 73 63 68 65 6d 61 20 69 73 20 73 68 61 72 65   schema is share
127e0 64 2c 20 74 68 65 6e 20 74 68 65 72 65 20 69 73  d, then there is
127f0 20 6f 6e 65 20 69 6e 73 74 61 6e 63 65 20 6f 66   one instance of
12800 20 74 68 69 73 0a 2a 2a 20 73 74 72 75 63 74 75   this.** structu
12810 72 65 20 66 6f 72 20 65 61 63 68 20 64 61 74 61  re for each data
12820 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20  base connection 
12830 28 73 71 6c 69 74 65 33 2a 29 20 74 68 61 74 20  (sqlite3*) that 
12840 75 73 65 73 20 74 68 65 20 73 68 61 72 65 64 0a  uses the shared.
12850 2a 2a 20 73 63 68 65 6d 61 2e 20 54 68 69 73 20  ** schema. This 
12860 69 73 20 62 65 63 61 75 73 65 20 65 61 63 68 20  is because each 
12870 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74  database connect
12880 69 6f 6e 20 72 65 71 75 69 72 65 73 20 69 74 73  ion requires its
12890 20 6f 77 6e 20 75 6e 69 71 75 65 0a 2a 2a 20 69   own unique.** i
128a0 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 73  nstance of the s
128b0 71 6c 69 74 65 33 5f 76 74 61 62 2a 20 68 61 6e  qlite3_vtab* han
128c0 64 6c 65 20 75 73 65 64 20 74 6f 20 61 63 63 65  dle used to acce
128d0 73 73 20 74 68 65 20 76 69 72 74 75 61 6c 20 74  ss the virtual t
128e0 61 62 6c 65 0a 2a 2a 20 69 6d 70 6c 65 6d 65 6e  able.** implemen
128f0 74 61 74 69 6f 6e 2e 20 73 71 6c 69 74 65 33 5f  tation. sqlite3_
12900 76 74 61 62 2a 20 68 61 6e 64 6c 65 73 20 63 61  vtab* handles ca
12910 6e 20 6e 6f 74 20 62 65 20 73 68 61 72 65 64 20  n not be shared 
12920 62 65 74 77 65 65 6e 0a 2a 2a 20 64 61 74 61 62  between.** datab
12930 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 73 2c  ase connections,
12940 20 65 76 65 6e 20 77 68 65 6e 20 74 68 65 20 72   even when the r
12950 65 73 74 20 6f 66 20 74 68 65 20 69 6e 2d 6d 65  est of the in-me
12960 6d 6f 72 79 20 64 61 74 61 62 61 73 65 0a 2a 2a  mory database.**
12970 20 73 63 68 65 6d 61 20 69 73 20 73 68 61 72 65   schema is share
12980 64 2c 20 61 73 20 74 68 65 20 69 6d 70 6c 65 6d  d, as the implem
12990 65 6e 74 61 74 69 6f 6e 20 6f 66 74 65 6e 20 73  entation often s
129a0 74 6f 72 65 73 20 74 68 65 20 64 61 74 61 62 61  tores the databa
129b0 73 65 0a 2a 2a 20 63 6f 6e 6e 65 63 74 69 6f 6e  se.** connection
129c0 20 68 61 6e 64 6c 65 20 70 61 73 73 65 64 20 74   handle passed t
129d0 6f 20 69 74 20 76 69 61 20 74 68 65 20 78 43 6f  o it via the xCo
129e0 6e 6e 65 63 74 28 29 20 6f 72 20 78 43 72 65 61  nnect() or xCrea
129f0 74 65 28 29 20 6d 65 74 68 6f 64 0a 2a 2a 20 64  te() method.** d
12a00 75 72 69 6e 67 20 69 6e 69 74 69 61 6c 69 7a 61  uring initializa
12a10 74 69 6f 6e 20 69 6e 74 65 72 6e 61 6c 6c 79 2e  tion internally.
12a20 20 54 68 69 73 20 64 61 74 61 62 61 73 65 20 63   This database c
12a30 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65  onnection handle
12a40 20 6d 61 79 0a 2a 2a 20 74 68 65 6e 20 62 65 20   may.** then be 
12a50 75 73 65 64 20 62 79 20 74 68 65 20 76 69 72 74  used by the virt
12a60 75 61 6c 20 74 61 62 6c 65 20 69 6d 70 6c 65 6d  ual table implem
12a70 65 6e 74 61 74 69 6f 6e 20 74 6f 20 61 63 63 65  entation to acce
12a80 73 73 20 72 65 61 6c 20 74 61 62 6c 65 73 0a 2a  ss real tables.*
12a90 2a 20 77 69 74 68 69 6e 20 74 68 65 20 64 61 74  * within the dat
12aa0 61 62 61 73 65 2e 20 53 6f 20 74 68 61 74 20 74  abase. So that t
12ab0 68 65 79 20 61 70 70 65 61 72 20 61 73 20 70 61  hey appear as pa
12ac0 72 74 20 6f 66 20 74 68 65 20 63 61 6c 6c 65 72  rt of the caller
12ad0 73 0a 2a 2a 20 74 72 61 6e 73 61 63 74 69 6f 6e  s.** transaction
12ae0 2c 20 74 68 65 73 65 20 61 63 63 65 73 73 65 73  , these accesses
12af0 20 6e 65 65 64 20 74 6f 20 62 65 20 6d 61 64 65   need to be made
12b00 20 76 69 61 20 74 68 65 20 73 61 6d 65 20 64 61   via the same da
12b10 74 61 62 61 73 65 0a 2a 2a 20 63 6f 6e 6e 65 63  tabase.** connec
12b20 74 69 6f 6e 20 61 73 20 74 68 61 74 20 75 73 65  tion as that use
12b30 64 20 74 6f 20 65 78 65 63 75 74 65 20 53 51 4c  d to execute SQL
12b40 20 6f 70 65 72 61 74 69 6f 6e 73 20 6f 6e 20 74   operations on t
12b50 68 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  he virtual table
12b60 2e 0a 2a 2a 0a 2a 2a 20 41 6c 6c 20 56 54 61 62  ..**.** All VTab
12b70 6c 65 20 6f 62 6a 65 63 74 73 20 74 68 61 74 20  le objects that 
12b80 63 6f 72 72 65 73 70 6f 6e 64 20 74 6f 20 61 20  correspond to a 
12b90 73 69 6e 67 6c 65 20 74 61 62 6c 65 20 69 6e 20  single table in 
12ba0 61 20 73 68 61 72 65 64 0a 2a 2a 20 64 61 74 61  a shared.** data
12bb0 62 61 73 65 20 73 63 68 65 6d 61 20 61 72 65 20  base schema are 
12bc0 69 6e 69 74 69 61 6c 6c 79 20 73 74 6f 72 65 64  initially stored
12bd0 20 69 6e 20 61 20 6c 69 6e 6b 65 64 2d 6c 69 73   in a linked-lis
12be0 74 20 70 6f 69 6e 74 65 64 20 74 6f 20 62 79 0a  t pointed to by.
12bf0 2a 2a 20 74 68 65 20 54 61 62 6c 65 2e 70 56 54  ** the Table.pVT
12c00 61 62 6c 65 20 6d 65 6d 62 65 72 20 76 61 72 69  able member vari
12c10 61 62 6c 65 20 6f 66 20 74 68 65 20 63 6f 72 72  able of the corr
12c20 65 73 70 6f 6e 64 69 6e 67 20 54 61 62 6c 65 20  esponding Table 
12c30 6f 62 6a 65 63 74 2e 0a 2a 2a 20 57 68 65 6e 20  object..** When 
12c40 61 6e 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61  an sqlite3_prepa
12c50 72 65 28 29 20 6f 70 65 72 61 74 69 6f 6e 20 69  re() operation i
12c60 73 20 72 65 71 75 69 72 65 64 20 74 6f 20 61 63  s required to ac
12c70 63 65 73 73 20 74 68 65 20 76 69 72 74 75 61 6c  cess the virtual
12c80 0a 2a 2a 20 74 61 62 6c 65 2c 20 69 74 20 73 65  .** table, it se
12c90 61 72 63 68 65 73 20 74 68 65 20 6c 69 73 74 20  arches the list 
12ca0 66 6f 72 20 74 68 65 20 56 54 61 62 6c 65 20 74  for the VTable t
12cb0 68 61 74 20 63 6f 72 72 65 73 70 6f 6e 64 73 20  hat corresponds 
12cc0 74 6f 20 74 68 65 0a 2a 2a 20 64 61 74 61 62 61  to the.** databa
12cd0 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 64 6f  se connection do
12ce0 69 6e 67 20 74 68 65 20 70 72 65 70 61 72 69 6e  ing the preparin
12cf0 67 20 73 6f 20 61 73 20 74 6f 20 75 73 65 20 74  g so as to use t
12d00 68 65 20 63 6f 72 72 65 63 74 0a 2a 2a 20 73 71  he correct.** sq
12d10 6c 69 74 65 33 5f 76 74 61 62 2a 20 68 61 6e 64  lite3_vtab* hand
12d20 6c 65 20 69 6e 20 74 68 65 20 63 6f 6d 70 69 6c  le in the compil
12d30 65 64 20 71 75 65 72 79 2e 0a 2a 2a 0a 2a 2a 20  ed query..**.** 
12d40 57 68 65 6e 20 61 6e 20 69 6e 2d 6d 65 6d 6f 72  When an in-memor
12d50 79 20 54 61 62 6c 65 20 6f 62 6a 65 63 74 20 69  y Table object i
12d60 73 20 64 65 6c 65 74 65 64 20 28 66 6f 72 20 65  s deleted (for e
12d70 78 61 6d 70 6c 65 20 77 68 65 6e 20 74 68 65 0a  xample when the.
12d80 2a 2a 20 73 63 68 65 6d 61 20 69 73 20 62 65 69  ** schema is bei
12d90 6e 67 20 72 65 6c 6f 61 64 65 64 20 66 6f 72 20  ng reloaded for 
12da0 73 6f 6d 65 20 72 65 61 73 6f 6e 29 2c 20 74 68  some reason), th
12db0 65 20 56 54 61 62 6c 65 20 6f 62 6a 65 63 74 73  e VTable objects
12dc0 20 61 72 65 20 6e 6f 74 0a 2a 2a 20 64 65 6c 65   are not.** dele
12dd0 74 65 64 20 61 6e 64 20 74 68 65 20 73 71 6c 69  ted and the sqli
12de0 74 65 33 5f 76 74 61 62 2a 20 68 61 6e 64 6c 65  te3_vtab* handle
12df0 73 20 61 72 65 20 6e 6f 74 20 78 44 69 73 63 6f  s are not xDisco
12e00 6e 6e 65 63 74 28 29 65 64 0a 2a 2a 20 69 6d 6d  nnect()ed.** imm
12e10 65 64 69 61 74 65 6c 79 2e 20 49 6e 73 74 65 61  ediately. Instea
12e20 64 2c 20 74 68 65 79 20 61 72 65 20 6d 6f 76 65  d, they are move
12e30 64 20 66 72 6f 6d 20 74 68 65 20 54 61 62 6c 65  d from the Table
12e40 2e 70 56 54 61 62 6c 65 20 6c 69 73 74 20 74 6f  .pVTable list to
12e50 0a 2a 2a 20 61 6e 6f 74 68 65 72 20 6c 69 6e 6b  .** another link
12e60 65 64 20 6c 69 73 74 20 68 65 61 64 65 64 20 62  ed list headed b
12e70 79 20 74 68 65 20 73 71 6c 69 74 65 33 2e 70 44  y the sqlite3.pD
12e80 69 73 63 6f 6e 6e 65 63 74 20 6d 65 6d 62 65 72  isconnect member
12e90 20 6f 66 20 74 68 65 0a 2a 2a 20 63 6f 72 72 65   of the.** corre
12ea0 73 70 6f 6e 64 69 6e 67 20 73 71 6c 69 74 65 33  sponding sqlite3
12eb0 20 73 74 72 75 63 74 75 72 65 2e 20 54 68 65 79   structure. They
12ec0 20 61 72 65 20 74 68 65 6e 20 64 65 6c 65 74 65   are then delete
12ed0 64 2f 78 44 69 73 63 6f 6e 6e 65 63 74 65 64 0a  d/xDisconnected.
12ee0 2a 2a 20 6e 65 78 74 20 74 69 6d 65 20 61 20 73  ** next time a s
12ef0 74 61 74 65 6d 65 6e 74 20 69 73 20 70 72 65 70  tatement is prep
12f00 61 72 65 64 20 75 73 69 6e 67 20 73 61 69 64 20  ared using said 
12f10 73 71 6c 69 74 65 33 2a 2e 20 54 68 69 73 20 69  sqlite3*. This i
12f20 73 20 64 6f 6e 65 0a 2a 2a 20 74 6f 20 61 76 6f  s done.** to avo
12f30 69 64 20 64 65 61 64 6c 6f 63 6b 20 69 73 73 75  id deadlock issu
12f40 65 73 20 69 6e 76 6f 6c 76 69 6e 67 20 6d 75 6c  es involving mul
12f50 74 69 70 6c 65 20 73 71 6c 69 74 65 33 2e 6d 75  tiple sqlite3.mu
12f60 74 65 78 20 6d 75 74 65 78 65 73 2e 0a 2a 2a 20  tex mutexes..** 
12f70 52 65 66 65 72 20 74 6f 20 63 6f 6d 6d 65 6e 74  Refer to comment
12f80 73 20 61 62 6f 76 65 20 66 75 6e 63 74 69 6f 6e  s above function
12f90 20 73 71 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f   sqlite3VtabUnlo
12fa0 63 6b 4c 69 73 74 28 29 20 66 6f 72 20 61 6e 0a  ckList() for an.
12fb0 2a 2a 20 65 78 70 6c 61 6e 61 74 69 6f 6e 20 61  ** explanation a
12fc0 73 20 74 6f 20 77 68 79 20 69 74 20 69 73 20 73  s to why it is s
12fd0 61 66 65 20 74 6f 20 61 64 64 20 61 6e 20 65 6e  afe to add an en
12fe0 74 72 79 20 74 6f 20 61 6e 20 73 71 6c 69 74 65  try to an sqlite
12ff0 33 2e 70 44 69 73 63 6f 6e 6e 65 63 74 0a 2a 2a  3.pDisconnect.**
13000 20 6c 69 73 74 20 77 69 74 68 6f 75 74 20 68 6f   list without ho
13010 6c 64 69 6e 67 20 74 68 65 20 63 6f 72 72 65 73  lding the corres
13020 70 6f 6e 64 69 6e 67 20 73 71 6c 69 74 65 33 2e  ponding sqlite3.
13030 6d 75 74 65 78 20 6d 75 74 65 78 2e 0a 2a 2a 0a  mutex mutex..**.
13040 2a 2a 20 54 68 65 20 6d 65 6d 6f 72 79 20 66 6f  ** The memory fo
13050 72 20 6f 62 6a 65 63 74 73 20 6f 66 20 74 68 69  r objects of thi
13060 73 20 74 79 70 65 20 69 73 20 61 6c 77 61 79 73  s type is always
13070 20 61 6c 6c 6f 63 61 74 65 64 20 62 79 0a 2a 2a   allocated by.**
13080 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63   sqlite3DbMalloc
13090 28 29 2c 20 75 73 69 6e 67 20 74 68 65 20 63 6f  (), using the co
130a0 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65 20  nnection handle 
130b0 73 74 6f 72 65 64 20 69 6e 20 56 54 61 62 6c 65  stored in VTable
130c0 2e 64 62 20 61 73 0a 2a 2a 20 74 68 65 20 66 69  .db as.** the fi
130d0 72 73 74 20 61 72 67 75 6d 65 6e 74 2e 0a 2a 2f  rst argument..*/
130e0 0a 73 74 72 75 63 74 20 56 54 61 62 6c 65 20 7b  .struct VTable {
130f0 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 20  .  sqlite3 *db; 
13100 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
13110 44 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74  Database connect
13120 69 6f 6e 20 61 73 73 6f 63 69 61 74 65 64 20 77  ion associated w
13130 69 74 68 20 74 68 69 73 20 74 61 62 6c 65 20 2a  ith this table *
13140 2f 0a 20 20 4d 6f 64 75 6c 65 20 2a 70 4d 6f 64  /.  Module *pMod
13150 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
13160 20 50 6f 69 6e 74 65 72 20 74 6f 20 6d 6f 64 75   Pointer to modu
13170 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  le implementatio
13180 6e 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 76  n */.  sqlite3_v
13190 74 61 62 20 2a 70 56 74 61 62 3b 20 20 20 20 20  tab *pVtab;     
131a0 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 76   /* Pointer to v
131b0 74 61 62 20 69 6e 73 74 61 6e 63 65 20 2a 2f 0a  tab instance */.
131c0 20 20 69 6e 74 20 6e 52 65 66 3b 20 20 20 20 20    int nRef;     
131d0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
131e0 75 6d 62 65 72 20 6f 66 20 70 6f 69 6e 74 65 72  umber of pointer
131f0 73 20 74 6f 20 74 68 69 73 20 73 74 72 75 63 74  s to this struct
13200 75 72 65 20 2a 2f 0a 20 20 75 38 20 62 43 6f 6e  ure */.  u8 bCon
13210 73 74 72 61 69 6e 74 3b 20 20 20 20 20 20 20 20  straint;        
13220 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 63 6f     /* True if co
13230 6e 73 74 72 61 69 6e 74 73 20 61 72 65 20 73 75  nstraints are su
13240 70 70 6f 72 74 65 64 20 2a 2f 0a 20 20 69 6e 74  pported */.  int
13250 20 69 53 61 76 65 70 6f 69 6e 74 3b 20 20 20 20   iSavepoint;    
13260 20 20 20 20 20 20 20 2f 2a 20 44 65 70 74 68 20         /* Depth 
13270 6f 66 20 74 68 65 20 53 41 56 45 50 4f 49 4e 54  of the SAVEPOINT
13280 20 73 74 61 63 6b 20 2a 2f 0a 20 20 56 54 61 62   stack */.  VTab
13290 6c 65 20 2a 70 4e 65 78 74 3b 20 20 20 20 20 20  le *pNext;      
132a0 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 69 6e        /* Next in
132b0 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 28 73 65   linked list (se
132c0 65 20 61 62 6f 76 65 29 20 2a 2f 0a 7d 3b 0a 0a  e above) */.};..
132d0 2f 2a 0a 2a 2a 20 54 68 65 20 73 63 68 65 6d 61  /*.** The schema
132e0 20 66 6f 72 20 65 61 63 68 20 53 51 4c 20 74 61   for each SQL ta
132f0 62 6c 65 20 61 6e 64 20 76 69 65 77 20 69 73 20  ble and view is 
13300 72 65 70 72 65 73 65 6e 74 65 64 20 69 6e 20 6d  represented in m
13310 65 6d 6f 72 79 0a 2a 2a 20 62 79 20 61 6e 20 69  emory.** by an i
13320 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66  nstance of the f
13330 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75  ollowing structu
13340 72 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 54 61  re..*/.struct Ta
13350 62 6c 65 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e  ble {.  char *zN
13360 61 6d 65 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  ame;         /* 
13370 4e 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c  Name of the tabl
13380 65 20 6f 72 20 76 69 65 77 20 2a 2f 0a 20 20 43  e or view */.  C
13390 6f 6c 75 6d 6e 20 2a 61 43 6f 6c 3b 20 20 20 20  olumn *aCol;    
133a0 20 20 20 20 2f 2a 20 49 6e 66 6f 72 6d 61 74 69      /* Informati
133b0 6f 6e 20 61 62 6f 75 74 20 65 61 63 68 20 63 6f  on about each co
133c0 6c 75 6d 6e 20 2a 2f 0a 23 69 66 64 65 66 20 53  lumn */.#ifdef S
133d0 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4e 4f 52  QLITE_ENABLE_NOR
133e0 4d 41 4c 49 5a 45 0a 20 20 48 61 73 68 20 2a 70  MALIZE.  Hash *p
133f0 43 6f 6c 48 61 73 68 3b 20 20 20 20 20 20 2f 2a  ColHash;      /*
13400 20 41 6c 6c 20 63 6f 6c 75 6d 6e 73 20 69 6e 64   All columns ind
13410 65 78 65 64 20 62 79 20 6e 61 6d 65 20 2a 2f 0a  exed by name */.
13420 23 65 6e 64 69 66 0a 20 20 49 6e 64 65 78 20 2a  #endif.  Index *
13430 70 49 6e 64 65 78 3b 20 20 20 20 20 20 20 2f 2a  pIndex;       /*
13440 20 4c 69 73 74 20 6f 66 20 53 51 4c 20 69 6e 64   List of SQL ind
13450 65 78 65 73 20 6f 6e 20 74 68 69 73 20 74 61 62  exes on this tab
13460 6c 65 2e 20 2a 2f 0a 20 20 53 65 6c 65 63 74 20  le. */.  Select 
13470 2a 70 53 65 6c 65 63 74 3b 20 20 20 20 20 2f 2a  *pSelect;     /*
13480 20 4e 55 4c 4c 20 66 6f 72 20 74 61 62 6c 65 73   NULL for tables
13490 2e 20 20 50 6f 69 6e 74 73 20 74 6f 20 64 65 66  .  Points to def
134a0 69 6e 69 74 69 6f 6e 20 69 66 20 61 20 76 69 65  inition if a vie
134b0 77 2e 20 2a 2f 0a 20 20 46 4b 65 79 20 2a 70 46  w. */.  FKey *pF
134c0 4b 65 79 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  Key;         /* 
134d0 4c 69 6e 6b 65 64 20 6c 69 73 74 20 6f 66 20 61  Linked list of a
134e0 6c 6c 20 66 6f 72 65 69 67 6e 20 6b 65 79 73 20  ll foreign keys 
134f0 69 6e 20 74 68 69 73 20 74 61 62 6c 65 20 2a 2f  in this table */
13500 0a 20 20 63 68 61 72 20 2a 7a 43 6f 6c 41 66 66  .  char *zColAff
13510 3b 20 20 20 20 20 20 20 2f 2a 20 53 74 72 69 6e  ;       /* Strin
13520 67 20 64 65 66 69 6e 69 6e 67 20 74 68 65 20 61  g defining the a
13530 66 66 69 6e 69 74 79 20 6f 66 20 65 61 63 68 20  ffinity of each 
13540 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 45 78 70 72  column */.  Expr
13550 4c 69 73 74 20 2a 70 43 68 65 63 6b 3b 20 20 20  List *pCheck;   
13560 20 2f 2a 20 41 6c 6c 20 43 48 45 43 4b 20 63 6f   /* All CHECK co
13570 6e 73 74 72 61 69 6e 74 73 20 2a 2f 0a 20 20 20  nstraints */.   
13580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13590 20 20 20 20 2f 2a 20 20 20 2e 2e 2e 20 61 6c 73      /*   ... als
135a0 6f 20 75 73 65 64 20 61 73 20 63 6f 6c 75 6d 6e  o used as column
135b0 20 6e 61 6d 65 20 6c 69 73 74 20 69 6e 20 61 20   name list in a 
135c0 56 49 45 57 20 2a 2f 0a 20 20 69 6e 74 20 74 6e  VIEW */.  int tn
135d0 75 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  um;            /
135e0 2a 20 52 6f 6f 74 20 42 54 72 65 65 20 70 61 67  * Root BTree pag
135f0 65 20 66 6f 72 20 74 68 69 73 20 74 61 62 6c 65  e for this table
13600 20 2a 2f 0a 20 20 75 33 32 20 6e 54 61 62 52 65   */.  u32 nTabRe
13610 66 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75  f;         /* Nu
13620 6d 62 65 72 20 6f 66 20 70 6f 69 6e 74 65 72 73  mber of pointers
13630 20 74 6f 20 74 68 69 73 20 54 61 62 6c 65 20 2a   to this Table *
13640 2f 0a 20 20 75 33 32 20 74 61 62 46 6c 61 67 73  /.  u32 tabFlags
13650 3b 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 73 6b  ;        /* Mask
13660 20 6f 66 20 54 46 5f 2a 20 76 61 6c 75 65 73 20   of TF_* values 
13670 2a 2f 0a 20 20 69 31 36 20 69 50 4b 65 79 3b 20  */.  i16 iPKey; 
13680 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49 66 20            /* If 
13690 6e 6f 74 20 6e 65 67 61 74 69 76 65 2c 20 75 73  not negative, us
136a0 65 20 61 43 6f 6c 5b 69 50 4b 65 79 5d 20 61 73  e aCol[iPKey] as
136b0 20 74 68 65 20 72 6f 77 69 64 20 2a 2f 0a 20 20   the rowid */.  
136c0 69 31 36 20 6e 43 6f 6c 3b 20 20 20 20 20 20 20  i16 nCol;       
136d0 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
136e0 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 69  f columns in thi
136f0 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20 4c 6f 67  s table */.  Log
13700 45 73 74 20 6e 52 6f 77 4c 6f 67 45 73 74 3b 20  Est nRowLogEst; 
13710 20 20 2f 2a 20 45 73 74 69 6d 61 74 65 64 20 72    /* Estimated r
13720 6f 77 73 20 69 6e 20 74 61 62 6c 65 20 2d 20 66  ows in table - f
13730 72 6f 6d 20 73 71 6c 69 74 65 5f 73 74 61 74 31  rom sqlite_stat1
13740 20 74 61 62 6c 65 20 2a 2f 0a 20 20 4c 6f 67 45   table */.  LogE
13750 73 74 20 73 7a 54 61 62 52 6f 77 3b 20 20 20 20  st szTabRow;    
13760 20 2f 2a 20 45 73 74 69 6d 61 74 65 64 20 73 69   /* Estimated si
13770 7a 65 20 6f 66 20 65 61 63 68 20 74 61 62 6c 65  ze of each table
13780 20 72 6f 77 20 69 6e 20 62 79 74 65 73 20 2a 2f   row in bytes */
13790 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45  .#ifdef SQLITE_E
137a0 4e 41 42 4c 45 5f 43 4f 53 54 4d 55 4c 54 0a 20  NABLE_COSTMULT. 
137b0 20 4c 6f 67 45 73 74 20 63 6f 73 74 4d 75 6c 74   LogEst costMult
137c0 3b 20 20 20 20 20 2f 2a 20 43 6f 73 74 20 6d 75  ;     /* Cost mu
137d0 6c 74 69 70 6c 69 65 72 20 66 6f 72 20 75 73 69  ltiplier for usi
137e0 6e 67 20 74 68 69 73 20 74 61 62 6c 65 20 2a 2f  ng this table */
137f0 0a 23 65 6e 64 69 66 0a 20 20 75 38 20 6b 65 79  .#endif.  u8 key
13800 43 6f 6e 66 3b 20 20 20 20 20 20 20 20 20 20 2f  Conf;          /
13810 2a 20 57 68 61 74 20 74 6f 20 64 6f 20 69 6e 20  * What to do in 
13820 63 61 73 65 20 6f 66 20 75 6e 69 71 75 65 6e 65  case of uniquene
13830 73 73 20 63 6f 6e 66 6c 69 63 74 20 6f 6e 20 69  ss conflict on i
13840 50 4b 65 79 20 2a 2f 0a 23 69 66 6e 64 65 66 20  PKey */.#ifndef 
13850 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 4c 54 45  SQLITE_OMIT_ALTE
13860 52 54 41 42 4c 45 0a 20 20 69 6e 74 20 61 64 64  RTABLE.  int add
13870 43 6f 6c 4f 66 66 73 65 74 3b 20 20 20 20 2f 2a  ColOffset;    /*
13880 20 4f 66 66 73 65 74 20 69 6e 20 43 52 45 41 54   Offset in CREAT
13890 45 20 54 41 42 4c 45 20 73 74 6d 74 20 74 6f 20  E TABLE stmt to 
138a0 61 64 64 20 61 20 6e 65 77 20 63 6f 6c 75 6d 6e  add a new column
138b0 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64   */.#endif.#ifnd
138c0 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  ef SQLITE_OMIT_V
138d0 49 52 54 55 41 4c 54 41 42 4c 45 0a 20 20 69 6e  IRTUALTABLE.  in
138e0 74 20 6e 4d 6f 64 75 6c 65 41 72 67 3b 20 20 20  t nModuleArg;   
138f0 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
13900 61 72 67 75 6d 65 6e 74 73 20 74 6f 20 74 68 65  arguments to the
13910 20 6d 6f 64 75 6c 65 20 2a 2f 0a 20 20 63 68 61   module */.  cha
13920 72 20 2a 2a 61 7a 4d 6f 64 75 6c 65 41 72 67 3b  r **azModuleArg;
13930 20 20 2f 2a 20 30 3a 20 6d 6f 64 75 6c 65 20 31    /* 0: module 1
13940 3a 20 73 63 68 65 6d 61 20 32 3a 20 76 74 61 62  : schema 2: vtab
13950 20 6e 61 6d 65 20 33 2e 2e 2e 3a 20 61 72 67 73   name 3...: args
13960 20 2a 2f 0a 20 20 56 54 61 62 6c 65 20 2a 70 56   */.  VTable *pV
13970 54 61 62 6c 65 3b 20 20 20 20 20 2f 2a 20 4c 69  Table;     /* Li
13980 73 74 20 6f 66 20 56 54 61 62 6c 65 20 6f 62 6a  st of VTable obj
13990 65 63 74 73 2e 20 2a 2f 0a 23 65 6e 64 69 66 0a  ects. */.#endif.
139a0 20 20 54 72 69 67 67 65 72 20 2a 70 54 72 69 67    Trigger *pTrig
139b0 67 65 72 3b 20 20 20 2f 2a 20 4c 69 73 74 20 6f  ger;   /* List o
139c0 66 20 74 72 69 67 67 65 72 73 20 73 74 6f 72 65  f triggers store
139d0 64 20 69 6e 20 70 53 63 68 65 6d 61 20 2a 2f 0a  d in pSchema */.
139e0 20 20 53 63 68 65 6d 61 20 2a 70 53 63 68 65 6d    Schema *pSchem
139f0 61 3b 20 20 20 20 20 2f 2a 20 53 63 68 65 6d 61  a;     /* Schema
13a00 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 74   that contains t
13a10 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20 54  his table */.  T
13a20 61 62 6c 65 20 2a 70 4e 65 78 74 5a 6f 6d 62 69  able *pNextZombi
13a30 65 3b 20 20 2f 2a 20 4e 65 78 74 20 6f 6e 20 74  e;  /* Next on t
13a40 68 65 20 50 61 72 73 65 2e 70 5a 6f 6d 62 69 65  he Parse.pZombie
13a50 54 61 62 20 6c 69 73 74 20 2a 2f 0a 7d 3b 0a 0a  Tab list */.};..
13a60 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 76 61  /*.** Allowed va
13a70 6c 75 65 73 20 66 6f 72 20 54 61 62 6c 65 2e 74  lues for Table.t
13a80 61 62 46 6c 61 67 73 2e 0a 2a 2a 0a 2a 2a 20 54  abFlags..**.** T
13a90 46 5f 4f 4f 4f 48 69 64 64 65 6e 20 61 70 70 6c  F_OOOHidden appl
13aa0 69 65 73 20 74 6f 20 74 61 62 6c 65 73 20 6f 72  ies to tables or
13ab0 20 76 69 65 77 20 74 68 61 74 20 68 61 76 65 20   view that have 
13ac0 68 69 64 64 65 6e 20 63 6f 6c 75 6d 6e 73 20 74  hidden columns t
13ad0 68 61 74 20 61 72 65 0a 2a 2a 20 66 6f 6c 6c 6f  hat are.** follo
13ae0 77 65 64 20 62 79 20 6e 6f 6e 2d 68 69 64 64 65  wed by non-hidde
13af0 6e 20 63 6f 6c 75 6d 6e 73 2e 20 20 45 78 61 6d  n columns.  Exam
13b00 70 6c 65 3a 20 20 22 43 52 45 41 54 45 20 56 49  ple:  "CREATE VI
13b10 52 54 55 41 4c 20 54 41 42 4c 45 20 78 20 55 53  RTUAL TABLE x US
13b20 49 4e 47 0a 2a 2a 20 76 74 61 62 31 28 61 20 48  ING.** vtab1(a H
13b30 49 44 44 45 4e 2c 20 62 29 3b 22 2e 20 20 53 69  IDDEN, b);".  Si
13b40 6e 63 65 20 22 62 22 20 69 73 20 61 20 6e 6f 6e  nce "b" is a non
13b50 2d 68 69 64 64 65 6e 20 63 6f 6c 75 6d 6e 20 62  -hidden column b
13b60 75 74 20 22 61 22 20 69 73 20 68 69 64 64 65 6e  ut "a" is hidden
13b70 2c 0a 2a 2a 20 74 68 65 20 54 46 5f 4f 4f 4f 48  ,.** the TF_OOOH
13b80 69 64 64 65 6e 20 61 74 74 72 69 62 75 74 65 20  idden attribute 
13b90 77 6f 75 6c 64 20 61 70 70 6c 79 20 69 6e 20 74  would apply in t
13ba0 68 69 73 20 63 61 73 65 2e 20 20 53 75 63 68 20  his case.  Such 
13bb0 74 61 62 6c 65 73 20 72 65 71 75 69 72 65 0a 2a  tables require.*
13bc0 2a 20 73 70 65 63 69 61 6c 20 68 61 6e 64 6c 69  * special handli
13bd0 6e 67 20 64 75 72 69 6e 67 20 49 4e 53 45 52 54  ng during INSERT
13be0 20 70 72 6f 63 65 73 73 69 6e 67 2e 0a 2a 2f 0a   processing..*/.
13bf0 23 64 65 66 69 6e 65 20 54 46 5f 52 65 61 64 6f  #define TF_Reado
13c00 6e 6c 79 20 20 20 20 20 20 20 20 30 78 30 30 30  nly        0x000
13c10 31 20 20 20 20 2f 2a 20 52 65 61 64 2d 6f 6e 6c  1    /* Read-onl
13c20 79 20 73 79 73 74 65 6d 20 74 61 62 6c 65 20 2a  y system table *
13c30 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 45 70 68  /.#define TF_Eph
13c40 65 6d 65 72 61 6c 20 20 20 20 20 20 20 30 78 30  emeral       0x0
13c50 30 30 32 20 20 20 20 2f 2a 20 41 6e 20 65 70 68  002    /* An eph
13c60 65 6d 65 72 61 6c 20 74 61 62 6c 65 20 2a 2f 0a  emeral table */.
13c70 23 64 65 66 69 6e 65 20 54 46 5f 48 61 73 50 72  #define TF_HasPr
13c80 69 6d 61 72 79 4b 65 79 20 20 20 30 78 30 30 30  imaryKey   0x000
13c90 34 20 20 20 20 2f 2a 20 54 61 62 6c 65 20 68 61  4    /* Table ha
13ca0 73 20 61 20 70 72 69 6d 61 72 79 20 6b 65 79 20  s a primary key 
13cb0 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 41 75  */.#define TF_Au
13cc0 74 6f 69 6e 63 72 65 6d 65 6e 74 20 20 20 30 78  toincrement   0x
13cd0 30 30 30 38 20 20 20 20 2f 2a 20 49 6e 74 65 67  0008    /* Integ
13ce0 65 72 20 70 72 69 6d 61 72 79 20 6b 65 79 20 69  er primary key i
13cf0 73 20 61 75 74 6f 69 6e 63 72 65 6d 65 6e 74 20  s autoincrement 
13d00 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 48 61  */.#define TF_Ha
13d10 73 53 74 61 74 31 20 20 20 20 20 20 20 20 30 78  sStat1        0x
13d20 30 30 31 30 20 20 20 20 2f 2a 20 6e 52 6f 77 4c  0010    /* nRowL
13d30 6f 67 45 73 74 20 73 65 74 20 66 72 6f 6d 20 73  ogEst set from s
13d40 71 6c 69 74 65 5f 73 74 61 74 31 20 2a 2f 0a 23  qlite_stat1 */.#
13d50 64 65 66 69 6e 65 20 54 46 5f 57 69 74 68 6f 75  define TF_Withou
13d60 74 52 6f 77 69 64 20 20 20 20 30 78 30 30 32 30  tRowid    0x0020
13d70 20 20 20 20 2f 2a 20 4e 6f 20 72 6f 77 69 64 2e      /* No rowid.
13d80 20 20 50 52 49 4d 41 52 59 20 4b 45 59 20 69 73    PRIMARY KEY is
13d90 20 74 68 65 20 6b 65 79 20 2a 2f 0a 23 64 65 66   the key */.#def
13da0 69 6e 65 20 54 46 5f 4e 6f 56 69 73 69 62 6c 65  ine TF_NoVisible
13db0 52 6f 77 69 64 20 20 30 78 30 30 34 30 20 20 20  Rowid  0x0040   
13dc0 20 2f 2a 20 4e 6f 20 75 73 65 72 2d 76 69 73 69   /* No user-visi
13dd0 62 6c 65 20 22 72 6f 77 69 64 22 20 63 6f 6c 75  ble "rowid" colu
13de0 6d 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46  mn */.#define TF
13df0 5f 4f 4f 4f 48 69 64 64 65 6e 20 20 20 20 20 20  _OOOHidden      
13e00 20 30 78 30 30 38 30 20 20 20 20 2f 2a 20 4f 75   0x0080    /* Ou
13e10 74 2d 6f 66 2d 4f 72 64 65 72 20 68 69 64 64 65  t-of-Order hidde
13e20 6e 20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 23 64 65  n columns */.#de
13e30 66 69 6e 65 20 54 46 5f 53 74 61 74 73 55 73 65  fine TF_StatsUse
13e40 64 20 20 20 20 20 20 20 30 78 30 31 30 30 20 20  d       0x0100  
13e50 20 20 2f 2a 20 51 75 65 72 79 20 70 6c 61 6e 6e    /* Query plann
13e60 65 72 20 64 65 63 69 73 69 6f 6e 73 20 61 66 66  er decisions aff
13e70 65 63 74 65 64 20 62 79 0a 20 20 20 20 20 20 20  ected by.       
13e80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13e90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a                **
13ea0 20 49 6e 64 65 78 2e 61 69 52 6f 77 4c 6f 67 45   Index.aiRowLogE
13eb0 73 74 5b 5d 20 76 61 6c 75 65 73 20 2a 2f 0a 23  st[] values */.#
13ec0 64 65 66 69 6e 65 20 54 46 5f 48 61 73 4e 6f 74  define TF_HasNot
13ed0 4e 75 6c 6c 20 20 20 20 20 20 30 78 30 32 30 30  Null      0x0200
13ee0 20 20 20 20 2f 2a 20 43 6f 6e 74 61 69 6e 73 20      /* Contains 
13ef0 4e 4f 54 20 4e 55 4c 4c 20 63 6f 6e 73 74 72 61  NOT NULL constra
13f00 69 6e 74 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ints */.#define 
13f10 54 46 5f 53 68 61 64 6f 77 20 20 20 20 20 20 20  TF_Shadow       
13f20 20 20 20 30 78 30 34 30 30 20 20 20 20 2f 2a 20     0x0400    /* 
13f30 54 72 75 65 20 66 6f 72 20 61 20 73 68 61 64 6f  True for a shado
13f40 77 20 74 61 62 6c 65 20 2a 2f 0a 0a 2f 2a 0a 2a  w table */../*.*
13f50 2a 20 54 65 73 74 20 74 6f 20 73 65 65 20 77 68  * Test to see wh
13f60 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 61 20 74  ether or not a t
13f70 61 62 6c 65 20 69 73 20 61 20 76 69 72 74 75 61  able is a virtua
13f80 6c 20 74 61 62 6c 65 2e 20 20 54 68 69 73 20 69  l table.  This i
13f90 73 0a 2a 2a 20 64 6f 6e 65 20 61 73 20 61 20 6d  s.** done as a m
13fa0 61 63 72 6f 20 73 6f 20 74 68 61 74 20 69 74 20  acro so that it 
13fb0 77 69 6c 6c 20 62 65 20 6f 70 74 69 6d 69 7a 65  will be optimize
13fc0 64 20 6f 75 74 20 77 68 65 6e 20 76 69 72 74 75  d out when virtu
13fd0 61 6c 0a 2a 2a 20 74 61 62 6c 65 20 73 75 70 70  al.** table supp
13fe0 6f 72 74 20 69 73 20 6f 6d 69 74 74 65 64 20 66  ort is omitted f
13ff0 72 6f 6d 20 74 68 65 20 62 75 69 6c 64 2e 0a 2a  rom the build..*
14000 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  /.#ifndef SQLITE
14010 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
14020 4c 45 0a 23 20 20 64 65 66 69 6e 65 20 49 73 56  LE.#  define IsV
14030 69 72 74 75 61 6c 28 58 29 20 20 20 20 20 20 28  irtual(X)      (
14040 28 58 29 2d 3e 6e 4d 6f 64 75 6c 65 41 72 67 29  (X)->nModuleArg)
14050 0a 23 65 6c 73 65 0a 23 20 20 64 65 66 69 6e 65  .#else.#  define
14060 20 49 73 56 69 72 74 75 61 6c 28 58 29 20 20 20   IsVirtual(X)   
14070 20 20 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a     0.#endif../*.
14080 2a 2a 20 4d 61 63 72 6f 73 20 74 6f 20 64 65 74  ** Macros to det
14090 65 72 6d 69 6e 65 20 69 66 20 61 20 63 6f 6c 75  ermine if a colu
140a0 6d 6e 20 69 73 20 68 69 64 64 65 6e 2e 20 20 49  mn is hidden.  I
140b0 73 4f 72 64 69 6e 61 72 79 48 69 64 64 65 6e 43  sOrdinaryHiddenC
140c0 6f 6c 75 6d 6e 28 29 0a 2a 2a 20 6f 6e 6c 79 20  olumn().** only 
140d0 77 6f 72 6b 73 20 66 6f 72 20 6e 6f 6e 2d 76 69  works for non-vi
140e0 72 74 75 61 6c 20 74 61 62 6c 65 73 20 28 6f 72  rtual tables (or
140f0 64 69 6e 61 72 79 20 74 61 62 6c 65 73 20 61 6e  dinary tables an
14100 64 20 76 69 65 77 73 29 20 61 6e 64 20 69 73 0a  d views) and is.
14110 2a 2a 20 61 6c 77 61 79 73 20 66 61 6c 73 65 20  ** always false 
14120 75 6e 6c 65 73 73 20 53 51 4c 49 54 45 5f 45 4e  unless SQLITE_EN
14130 41 42 4c 45 5f 48 49 44 44 45 4e 5f 43 4f 4c 55  ABLE_HIDDEN_COLU
14140 4d 4e 53 20 69 73 20 64 65 66 69 6e 65 64 2e 20  MNS is defined. 
14150 20 54 68 65 0a 2a 2a 20 49 73 48 69 64 64 65 6e   The.** IsHidden
14160 43 6f 6c 75 6d 6e 28 29 20 6d 61 63 72 6f 20 69  Column() macro i
14170 73 20 67 65 6e 65 72 61 6c 20 70 75 72 70 6f 73  s general purpos
14180 65 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65  e..*/.#if define
14190 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  d(SQLITE_ENABLE_
141a0 48 49 44 44 45 4e 5f 43 4f 4c 55 4d 4e 53 29 0a  HIDDEN_COLUMNS).
141b0 23 20 20 64 65 66 69 6e 65 20 49 73 48 69 64 64  #  define IsHidd
141c0 65 6e 43 6f 6c 75 6d 6e 28 58 29 20 20 20 20 20  enColumn(X)     
141d0 20 20 20 20 28 28 28 58 29 2d 3e 63 6f 6c 46 6c      (((X)->colFl
141e0 61 67 73 20 26 20 43 4f 4c 46 4c 41 47 5f 48 49  ags & COLFLAG_HI
141f0 44 44 45 4e 29 21 3d 30 29 0a 23 20 20 64 65 66  DDEN)!=0).#  def
14200 69 6e 65 20 49 73 4f 72 64 69 6e 61 72 79 48 69  ine IsOrdinaryHi
14210 64 64 65 6e 43 6f 6c 75 6d 6e 28 58 29 20 28 28  ddenColumn(X) ((
14220 28 58 29 2d 3e 63 6f 6c 46 6c 61 67 73 20 26 20  (X)->colFlags & 
14230 43 4f 4c 46 4c 41 47 5f 48 49 44 44 45 4e 29 21  COLFLAG_HIDDEN)!
14240 3d 30 29 0a 23 65 6c 69 66 20 21 64 65 66 69 6e  =0).#elif !defin
14250 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  ed(SQLITE_OMIT_V
14260 49 52 54 55 41 4c 54 41 42 4c 45 29 0a 23 20 20  IRTUALTABLE).#  
14270 64 65 66 69 6e 65 20 49 73 48 69 64 64 65 6e 43  define IsHiddenC
14280 6f 6c 75 6d 6e 28 58 29 20 20 20 20 20 20 20 20  olumn(X)        
14290 20 28 28 28 58 29 2d 3e 63 6f 6c 46 6c 61 67 73   (((X)->colFlags
142a0 20 26 20 43 4f 4c 46 4c 41 47 5f 48 49 44 44 45   & COLFLAG_HIDDE
142b0 4e 29 21 3d 30 29 0a 23 20 20 64 65 66 69 6e 65  N)!=0).#  define
142c0 20 49 73 4f 72 64 69 6e 61 72 79 48 69 64 64 65   IsOrdinaryHidde
142d0 6e 43 6f 6c 75 6d 6e 28 58 29 20 30 0a 23 65 6c  nColumn(X) 0.#el
142e0 73 65 0a 23 20 20 64 65 66 69 6e 65 20 49 73 48  se.#  define IsH
142f0 69 64 64 65 6e 43 6f 6c 75 6d 6e 28 58 29 20 20  iddenColumn(X)  
14300 20 20 20 20 20 20 20 30 0a 23 20 20 64 65 66 69         0.#  defi
14310 6e 65 20 49 73 4f 72 64 69 6e 61 72 79 48 69 64  ne IsOrdinaryHid
14320 64 65 6e 43 6f 6c 75 6d 6e 28 58 29 20 30 0a 23  denColumn(X) 0.#
14330 65 6e 64 69 66 0a 0a 0a 2f 2a 20 44 6f 65 73 20  endif.../* Does 
14340 74 68 65 20 74 61 62 6c 65 20 68 61 76 65 20 61  the table have a
14350 20 72 6f 77 69 64 20 2a 2f 0a 23 64 65 66 69 6e   rowid */.#defin
14360 65 20 48 61 73 52 6f 77 69 64 28 58 29 20 20 20  e HasRowid(X)   
14370 20 20 28 28 28 58 29 2d 3e 74 61 62 46 6c 61 67    (((X)->tabFlag
14380 73 20 26 20 54 46 5f 57 69 74 68 6f 75 74 52 6f  s & TF_WithoutRo
14390 77 69 64 29 3d 3d 30 29 0a 23 64 65 66 69 6e 65  wid)==0).#define
143a0 20 56 69 73 69 62 6c 65 52 6f 77 69 64 28 58 29   VisibleRowid(X)
143b0 20 28 28 28 58 29 2d 3e 74 61 62 46 6c 61 67 73   (((X)->tabFlags
143c0 20 26 20 54 46 5f 4e 6f 56 69 73 69 62 6c 65 52   & TF_NoVisibleR
143d0 6f 77 69 64 29 3d 3d 30 29 0a 0a 2f 2a 0a 2a 2a  owid)==0)../*.**
143e0 20 45 61 63 68 20 66 6f 72 65 69 67 6e 20 6b 65   Each foreign ke
143f0 79 20 63 6f 6e 73 74 72 61 69 6e 74 20 69 73 20  y constraint is 
14400 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  an instance of t
14410 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72  he following str
14420 75 63 74 75 72 65 2e 0a 2a 2a 0a 2a 2a 20 41 20  ucture..**.** A 
14430 66 6f 72 65 69 67 6e 20 6b 65 79 20 69 73 20 61  foreign key is a
14440 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74  ssociated with t
14450 77 6f 20 74 61 62 6c 65 73 2e 20 20 54 68 65 20  wo tables.  The 
14460 22 66 72 6f 6d 22 20 74 61 62 6c 65 20 69 73 0a  "from" table is.
14470 2a 2a 20 74 68 65 20 74 61 62 6c 65 20 74 68 61  ** the table tha
14480 74 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 52  t contains the R
14490 45 46 45 52 45 4e 43 45 53 20 63 6c 61 75 73 65  EFERENCES clause
144a0 20 74 68 61 74 20 63 72 65 61 74 65 73 20 74 68   that creates th
144b0 65 20 66 6f 72 65 69 67 6e 0a 2a 2a 20 6b 65 79  e foreign.** key
144c0 2e 20 20 54 68 65 20 22 74 6f 22 20 74 61 62 6c  .  The "to" tabl
144d0 65 20 69 73 20 74 68 65 20 74 61 62 6c 65 20 74  e is the table t
144e0 68 61 74 20 69 73 20 6e 61 6d 65 64 20 69 6e 20  hat is named in 
144f0 74 68 65 20 52 45 46 45 52 45 4e 43 45 53 20 63  the REFERENCES c
14500 6c 61 75 73 65 2e 0a 2a 2a 20 43 6f 6e 73 69 64  lause..** Consid
14510 65 72 20 74 68 69 73 20 65 78 61 6d 70 6c 65 3a  er this example:
14520 0a 2a 2a 0a 2a 2a 20 20 20 20 20 43 52 45 41 54  .**.**     CREAT
14530 45 20 54 41 42 4c 45 20 65 78 31 28 0a 2a 2a 20  E TABLE ex1(.** 
14540 20 20 20 20 20 20 61 20 49 4e 54 45 47 45 52 20        a INTEGER 
14550 50 52 49 4d 41 52 59 20 4b 45 59 2c 0a 2a 2a 20  PRIMARY KEY,.** 
14560 20 20 20 20 20 20 62 20 49 4e 54 45 47 45 52 20        b INTEGER 
14570 43 4f 4e 53 54 52 41 49 4e 54 20 66 6b 31 20 52  CONSTRAINT fk1 R
14580 45 46 45 52 45 4e 43 45 53 20 65 78 32 28 78 29  EFERENCES ex2(x)
14590 0a 2a 2a 20 20 20 20 20 29 3b 0a 2a 2a 0a 2a 2a  .**     );.**.**
145a0 20 46 6f 72 20 66 6f 72 65 69 67 6e 20 6b 65 79   For foreign key
145b0 20 22 66 6b 31 22 2c 20 74 68 65 20 66 72 6f 6d   "fk1", the from
145c0 2d 74 61 62 6c 65 20 69 73 20 22 65 78 31 22 20  -table is "ex1" 
145d0 61 6e 64 20 74 68 65 20 74 6f 2d 74 61 62 6c 65  and the to-table
145e0 20 69 73 20 22 65 78 32 22 2e 0a 2a 2a 20 45 71   is "ex2"..** Eq
145f0 75 69 76 61 6c 65 6e 74 20 6e 61 6d 65 73 3a 0a  uivalent names:.
14600 2a 2a 0a 2a 2a 20 20 20 20 20 66 72 6f 6d 2d 74  **.**     from-t
14610 61 62 6c 65 20 3d 3d 20 63 68 69 6c 64 2d 74 61  able == child-ta
14620 62 6c 65 0a 2a 2a 20 20 20 20 20 20 20 74 6f 2d  ble.**       to-
14630 74 61 62 6c 65 20 3d 3d 20 70 61 72 65 6e 74 2d  table == parent-
14640 74 61 62 6c 65 0a 2a 2a 0a 2a 2a 20 45 61 63 68  table.**.** Each
14650 20 52 45 46 45 52 45 4e 43 45 53 20 63 6c 61 75   REFERENCES clau
14660 73 65 20 67 65 6e 65 72 61 74 65 73 20 61 6e 20  se generates an 
14670 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20  instance of the 
14680 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74  following struct
14690 75 72 65 0a 2a 2a 20 77 68 69 63 68 20 69 73 20  ure.** which is 
146a0 61 74 74 61 63 68 65 64 20 74 6f 20 74 68 65 20  attached to the 
146b0 66 72 6f 6d 2d 74 61 62 6c 65 2e 20 20 54 68 65  from-table.  The
146c0 20 74 6f 2d 74 61 62 6c 65 20 6e 65 65 64 20 6e   to-table need n
146d0 6f 74 20 65 78 69 73 74 20 77 68 65 6e 0a 2a 2a  ot exist when.**
146e0 20 74 68 65 20 66 72 6f 6d 2d 74 61 62 6c 65 20   the from-table 
146f0 69 73 20 63 72 65 61 74 65 64 2e 20 20 54 68 65  is created.  The
14700 20 65 78 69 73 74 65 6e 63 65 20 6f 66 20 74 68   existence of th
14710 65 20 74 6f 2d 74 61 62 6c 65 20 69 73 20 6e 6f  e to-table is no
14720 74 20 63 68 65 63 6b 65 64 2e 0a 2a 2a 0a 2a 2a  t checked..**.**
14730 20 54 68 65 20 6c 69 73 74 20 6f 66 20 61 6c 6c   The list of all
14740 20 70 61 72 65 6e 74 73 20 66 6f 72 20 63 68 69   parents for chi
14750 6c 64 20 54 61 62 6c 65 20 58 20 69 73 20 68 65  ld Table X is he
14760 6c 64 20 61 74 20 58 2e 70 46 4b 65 79 2e 0a 2a  ld at X.pFKey..*
14770 2a 0a 2a 2a 20 41 20 6c 69 73 74 20 6f 66 20 61  *.** A list of a
14780 6c 6c 20 63 68 69 6c 64 72 65 6e 20 66 6f 72 20  ll children for 
14790 61 20 74 61 62 6c 65 20 6e 61 6d 65 64 20 5a 20  a table named Z 
147a0 28 77 68 69 63 68 20 6d 69 67 68 74 20 6e 6f 74  (which might not
147b0 20 65 76 65 6e 20 65 78 69 73 74 29 0a 2a 2a 20   even exist).** 
147c0 69 73 20 68 65 6c 64 20 69 6e 20 53 63 68 65 6d  is held in Schem
147d0 61 2e 66 6b 65 79 48 61 73 68 20 77 69 74 68 20  a.fkeyHash with 
147e0 61 20 68 61 73 68 20 6b 65 79 20 6f 66 20 5a 2e  a hash key of Z.
147f0 0a 2a 2f 0a 73 74 72 75 63 74 20 46 4b 65 79 20  .*/.struct FKey 
14800 7b 0a 20 20 54 61 62 6c 65 20 2a 70 46 72 6f 6d  {.  Table *pFrom
14810 3b 20 20 20 20 20 2f 2a 20 54 61 62 6c 65 20 63  ;     /* Table c
14820 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 52 45  ontaining the RE
14830 46 45 52 45 4e 43 45 53 20 63 6c 61 75 73 65 20  FERENCES clause 
14840 28 61 6b 61 3a 20 43 68 69 6c 64 29 20 2a 2f 0a  (aka: Child) */.
14850 20 20 46 4b 65 79 20 2a 70 4e 65 78 74 46 72 6f    FKey *pNextFro
14860 6d 3b 20 20 2f 2a 20 4e 65 78 74 20 46 4b 65 79  m;  /* Next FKey
14870 20 77 69 74 68 20 74 68 65 20 73 61 6d 65 20 69   with the same i
14880 6e 20 70 46 72 6f 6d 2e 20 4e 65 78 74 20 70 61  n pFrom. Next pa
14890 72 65 6e 74 20 6f 66 20 70 46 72 6f 6d 20 2a 2f  rent of pFrom */
148a0 0a 20 20 63 68 61 72 20 2a 7a 54 6f 3b 20 20 20  .  char *zTo;   
148b0 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20       /* Name of 
148c0 74 61 62 6c 65 20 74 68 61 74 20 74 68 65 20 6b  table that the k
148d0 65 79 20 70 6f 69 6e 74 73 20 74 6f 20 28 61 6b  ey points to (ak
148e0 61 3a 20 50 61 72 65 6e 74 29 20 2a 2f 0a 20 20  a: Parent) */.  
148f0 46 4b 65 79 20 2a 70 4e 65 78 74 54 6f 3b 20 20  FKey *pNextTo;  
14900 20 20 2f 2a 20 4e 65 78 74 20 77 69 74 68 20 74    /* Next with t
14910 68 65 20 73 61 6d 65 20 7a 54 6f 2e 20 4e 65 78  he same zTo. Nex
14920 74 20 63 68 69 6c 64 20 6f 66 20 7a 54 6f 2e 20  t child of zTo. 
14930 2a 2f 0a 20 20 46 4b 65 79 20 2a 70 50 72 65 76  */.  FKey *pPrev
14940 54 6f 3b 20 20 20 20 2f 2a 20 50 72 65 76 69 6f  To;    /* Previo
14950 75 73 20 77 69 74 68 20 74 68 65 20 73 61 6d 65  us with the same
14960 20 7a 54 6f 20 2a 2f 0a 20 20 69 6e 74 20 6e 43   zTo */.  int nC
14970 6f 6c 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e  ol;         /* N
14980 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73  umber of columns
14990 20 69 6e 20 74 68 69 73 20 6b 65 79 20 2a 2f 0a   in this key */.
149a0 20 20 2f 2a 20 45 56 3a 20 52 2d 33 30 33 32 33    /* EV: R-30323
149b0 2d 32 31 39 31 37 20 2a 2f 0a 20 20 75 38 20 69  -21917 */.  u8 i
149c0 73 44 65 66 65 72 72 65 64 3b 20 20 20 20 20 20  sDeferred;      
149d0 20 2f 2a 20 54 72 75 65 20 69 66 20 63 6f 6e 73   /* True if cons
149e0 74 72 61 69 6e 74 20 63 68 65 63 6b 69 6e 67 20  traint checking 
149f0 69 73 20 64 65 66 65 72 72 65 64 20 74 69 6c 6c  is deferred till
14a00 20 43 4f 4d 4d 49 54 20 2a 2f 0a 20 20 75 38 20   COMMIT */.  u8 
14a10 61 41 63 74 69 6f 6e 5b 32 5d 3b 20 20 20 20 20  aAction[2];     
14a20 20 20 20 2f 2a 20 4f 4e 20 44 45 4c 45 54 45 20     /* ON DELETE 
14a30 61 6e 64 20 4f 4e 20 55 50 44 41 54 45 20 61 63  and ON UPDATE ac
14a40 74 69 6f 6e 73 2c 20 72 65 73 70 65 63 74 69 76  tions, respectiv
14a50 65 6c 79 20 2a 2f 0a 20 20 54 72 69 67 67 65 72  ely */.  Trigger
14a60 20 2a 61 70 54 72 69 67 67 65 72 5b 32 5d 3b 2f   *apTrigger[2];/
14a70 2a 20 54 72 69 67 67 65 72 73 20 66 6f 72 20 61  * Triggers for a
14a80 41 63 74 69 6f 6e 5b 5d 20 61 63 74 69 6f 6e 73  Action[] actions
14a90 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 73 43 6f   */.  struct sCo
14aa0 6c 4d 61 70 20 7b 20 20 20 20 20 20 2f 2a 20 4d  lMap {      /* M
14ab0 61 70 70 69 6e 67 20 6f 66 20 63 6f 6c 75 6d 6e  apping of column
14ac0 73 20 69 6e 20 70 46 72 6f 6d 20 74 6f 20 63 6f  s in pFrom to co
14ad0 6c 75 6d 6e 73 20 69 6e 20 7a 54 6f 20 2a 2f 0a  lumns in zTo */.
14ae0 20 20 20 20 69 6e 74 20 69 46 72 6f 6d 3b 20 20      int iFrom;  
14af0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 64            /* Ind
14b00 65 78 20 6f 66 20 63 6f 6c 75 6d 6e 20 69 6e 20  ex of column in 
14b10 70 46 72 6f 6d 20 2a 2f 0a 20 20 20 20 63 68 61  pFrom */.    cha
14b20 72 20 2a 7a 43 6f 6c 3b 20 20 20 20 20 20 20 20  r *zCol;        
14b30 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 63 6f     /* Name of co
14b40 6c 75 6d 6e 20 69 6e 20 7a 54 6f 2e 20 20 49 66  lumn in zTo.  If
14b50 20 4e 55 4c 4c 20 75 73 65 20 50 52 49 4d 41 52   NULL use PRIMAR
14b60 59 20 4b 45 59 20 2a 2f 0a 20 20 7d 20 61 43 6f  Y KEY */.  } aCo
14b70 6c 5b 31 5d 3b 20 20 20 20 20 20 20 20 20 20 20  l[1];           
14b80 20 2f 2a 20 4f 6e 65 20 65 6e 74 72 79 20 66 6f   /* One entry fo
14b90 72 20 65 61 63 68 20 6f 66 20 6e 43 6f 6c 20 63  r each of nCol c
14ba0 6f 6c 75 6d 6e 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  olumns */.};../*
14bb0 0a 2a 2a 20 53 51 4c 69 74 65 20 73 75 70 70 6f  .** SQLite suppo
14bc0 72 74 73 20 6d 61 6e 79 20 64 69 66 66 65 72 65  rts many differe
14bd0 6e 74 20 77 61 79 73 20 74 6f 20 72 65 73 6f 6c  nt ways to resol
14be0 76 65 20 61 20 63 6f 6e 73 74 72 61 69 6e 74 0a  ve a constraint.
14bf0 2a 2a 20 65 72 72 6f 72 2e 20 20 52 4f 4c 4c 42  ** error.  ROLLB
14c00 41 43 4b 20 70 72 6f 63 65 73 73 69 6e 67 20 6d  ACK processing m
14c10 65 61 6e 73 20 74 68 61 74 20 61 20 63 6f 6e 73  eans that a cons
14c20 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e  traint violation
14c30 0a 2a 2a 20 63 61 75 73 65 73 20 74 68 65 20 6f  .** causes the o
14c40 70 65 72 61 74 69 6f 6e 20 69 6e 20 70 72 6f 63  peration in proc
14c50 65 73 73 20 74 6f 20 66 61 69 6c 20 61 6e 64 20  ess to fail and 
14c60 66 6f 72 20 74 68 65 20 63 75 72 72 65 6e 74 20  for the current 
14c70 74 72 61 6e 73 61 63 74 69 6f 6e 0a 2a 2a 20 74  transaction.** t
14c80 6f 20 62 65 20 72 6f 6c 6c 65 64 20 62 61 63 6b  o be rolled back
14c90 2e 20 20 41 42 4f 52 54 20 70 72 6f 63 65 73 73  .  ABORT process
14ca0 69 6e 67 20 6d 65 61 6e 73 20 74 68 65 20 6f 70  ing means the op
14cb0 65 72 61 74 69 6f 6e 20 69 6e 20 70 72 6f 63 65  eration in proce
14cc0 73 73 0a 2a 2a 20 66 61 69 6c 73 20 61 6e 64 20  ss.** fails and 
14cd0 61 6e 79 20 70 72 69 6f 72 20 63 68 61 6e 67 65  any prior change
14ce0 73 20 66 72 6f 6d 20 74 68 61 74 20 6f 6e 65 20  s from that one 
14cf0 6f 70 65 72 61 74 69 6f 6e 20 61 72 65 20 62 61  operation are ba
14d00 63 6b 65 64 20 6f 75 74 2c 0a 2a 2a 20 62 75 74  cked out,.** but
14d10 20 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e   the transaction
14d20 20 69 73 20 6e 6f 74 20 72 6f 6c 6c 65 64 20 62   is not rolled b
14d30 61 63 6b 2e 20 20 46 41 49 4c 20 70 72 6f 63 65  ack.  FAIL proce
14d40 73 73 69 6e 67 20 6d 65 61 6e 73 20 74 68 61 74  ssing means that
14d50 0a 2a 2a 20 74 68 65 20 6f 70 65 72 61 74 69 6f  .** the operatio
14d60 6e 20 69 6e 20 70 72 6f 67 72 65 73 73 20 73 74  n in progress st
14d70 6f 70 73 20 61 6e 64 20 72 65 74 75 72 6e 73 20  ops and returns 
14d80 61 6e 20 65 72 72 6f 72 20 63 6f 64 65 2e 20 20  an error code.  
14d90 42 75 74 20 70 72 69 6f 72 0a 2a 2a 20 63 68 61  But prior.** cha
14da0 6e 67 65 73 20 64 75 65 20 74 6f 20 74 68 65 20  nges due to the 
14db0 73 61 6d 65 20 6f 70 65 72 61 74 69 6f 6e 20 61  same operation a
14dc0 72 65 20 6e 6f 74 20 62 61 63 6b 65 64 20 6f 75  re not backed ou
14dd0 74 20 61 6e 64 20 6e 6f 20 72 6f 6c 6c 62 61 63  t and no rollbac
14de0 6b 0a 2a 2a 20 6f 63 63 75 72 73 2e 20 20 49 47  k.** occurs.  IG
14df0 4e 4f 52 45 20 6d 65 61 6e 73 20 74 68 61 74 20  NORE means that 
14e00 74 68 65 20 70 61 72 74 69 63 75 6c 61 72 20 72  the particular r
14e10 6f 77 20 74 68 61 74 20 63 61 75 73 65 64 20 74  ow that caused t
14e20 68 65 20 63 6f 6e 73 74 72 61 69 6e 74 0a 2a 2a  he constraint.**
14e30 20 65 72 72 6f 72 20 69 73 20 6e 6f 74 20 69 6e   error is not in
14e40 73 65 72 74 65 64 20 6f 72 20 75 70 64 61 74 65  serted or update
14e50 64 2e 20 20 50 72 6f 63 65 73 73 69 6e 67 20 63  d.  Processing c
14e60 6f 6e 74 69 6e 75 65 73 20 61 6e 64 20 6e 6f 20  ontinues and no 
14e70 65 72 72 6f 72 0a 2a 2a 20 69 73 20 72 65 74 75  error.** is retu
14e80 72 6e 65 64 2e 20 20 52 45 50 4c 41 43 45 20 6d  rned.  REPLACE m
14e90 65 61 6e 73 20 74 68 61 74 20 70 72 65 65 78 69  eans that preexi
14ea0 73 74 69 6e 67 20 64 61 74 61 62 61 73 65 20 72  sting database r
14eb0 6f 77 73 20 74 68 61 74 20 63 61 75 73 65 64 0a  ows that caused.
14ec0 2a 2a 20 61 20 55 4e 49 51 55 45 20 63 6f 6e 73  ** a UNIQUE cons
14ed0 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e  traint violation
14ee0 20 61 72 65 20 72 65 6d 6f 76 65 64 20 73 6f 20   are removed so 
14ef0 74 68 61 74 20 74 68 65 20 6e 65 77 20 69 6e 73  that the new ins
14f00 65 72 74 20 6f 72 0a 2a 2a 20 75 70 64 61 74 65  ert or.** update
14f10 20 63 61 6e 20 70 72 6f 63 65 65 64 2e 20 20 50   can proceed.  P
14f20 72 6f 63 65 73 73 69 6e 67 20 63 6f 6e 74 69 6e  rocessing contin
14f30 75 65 73 20 61 6e 64 20 6e 6f 20 65 72 72 6f 72  ues and no error
14f40 20 69 73 20 72 65 70 6f 72 74 65 64 2e 0a 2a 2a   is reported..**
14f50 0a 2a 2a 20 52 45 53 54 52 49 43 54 2c 20 53 45  .** RESTRICT, SE
14f60 54 4e 55 4c 4c 2c 20 61 6e 64 20 43 41 53 43 41  TNULL, and CASCA
14f70 44 45 20 61 63 74 69 6f 6e 73 20 61 70 70 6c 79  DE actions apply
14f80 20 6f 6e 6c 79 20 74 6f 20 66 6f 72 65 69 67 6e   only to foreign
14f90 20 6b 65 79 73 2e 0a 2a 2a 20 52 45 53 54 52 49   keys..** RESTRI
14fa0 43 54 20 69 73 20 74 68 65 20 73 61 6d 65 20 61  CT is the same a
14fb0 73 20 41 42 4f 52 54 20 66 6f 72 20 49 4d 4d 45  s ABORT for IMME
14fc0 44 49 41 54 45 20 66 6f 72 65 69 67 6e 20 6b 65  DIATE foreign ke
14fd0 79 73 20 61 6e 64 20 74 68 65 0a 2a 2a 20 73 61  ys and the.** sa
14fe0 6d 65 20 61 73 20 52 4f 4c 4c 42 41 43 4b 20 66  me as ROLLBACK f
14ff0 6f 72 20 44 45 46 45 52 52 45 44 20 6b 65 79 73  or DEFERRED keys
15000 2e 20 20 53 45 54 4e 55 4c 4c 20 6d 65 61 6e 73  .  SETNULL means
15010 20 74 68 61 74 20 74 68 65 20 66 6f 72 65 69 67   that the foreig
15020 6e 0a 2a 2a 20 6b 65 79 20 69 73 20 73 65 74 20  n.** key is set 
15030 74 6f 20 4e 55 4c 4c 2e 20 20 43 41 53 43 41 44  to NULL.  CASCAD
15040 45 20 6d 65 61 6e 73 20 74 68 61 74 20 61 20 44  E means that a D
15050 45 4c 45 54 45 20 6f 72 20 55 50 44 41 54 45 20  ELETE or UPDATE 
15060 6f 66 20 74 68 65 0a 2a 2a 20 72 65 66 65 72 65  of the.** refere
15070 6e 63 65 64 20 74 61 62 6c 65 20 72 6f 77 20 69  nced table row i
15080 73 20 70 72 6f 70 61 67 61 74 65 64 20 69 6e 74  s propagated int
15090 6f 20 74 68 65 20 72 6f 77 20 74 68 61 74 20 68  o the row that h
150a0 6f 6c 64 73 20 74 68 65 0a 2a 2a 20 66 6f 72 65  olds the.** fore
150b0 69 67 6e 20 6b 65 79 2e 0a 2a 2a 0a 2a 2a 20 54  ign key..**.** T
150c0 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 79 6d  he following sym
150d0 62 6f 6c 69 63 20 76 61 6c 75 65 73 20 61 72 65  bolic values are
150e0 20 75 73 65 64 20 74 6f 20 72 65 63 6f 72 64 20   used to record 
150f0 77 68 69 63 68 20 74 79 70 65 0a 2a 2a 20 6f 66  which type.** of
15100 20 61 63 74 69 6f 6e 20 74 6f 20 74 61 6b 65 2e   action to take.
15110 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 4e  .*/.#define OE_N
15120 6f 6e 65 20 20 20 20 20 30 20 20 20 2f 2a 20 54  one     0   /* T
15130 68 65 72 65 20 69 73 20 6e 6f 20 63 6f 6e 73 74  here is no const
15140 72 61 69 6e 74 20 74 6f 20 63 68 65 63 6b 20 2a  raint to check *
15150 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 52 6f 6c  /.#define OE_Rol
15160 6c 62 61 63 6b 20 31 20 20 20 2f 2a 20 46 61 69  lback 1   /* Fai
15170 6c 20 74 68 65 20 6f 70 65 72 61 74 69 6f 6e 20  l the operation 
15180 61 6e 64 20 72 6f 6c 6c 62 61 63 6b 20 74 68 65  and rollback the
15190 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 2a 2f 0a   transaction */.
151a0 23 64 65 66 69 6e 65 20 4f 45 5f 41 62 6f 72 74  #define OE_Abort
151b0 20 20 20 20 32 20 20 20 2f 2a 20 42 61 63 6b 20      2   /* Back 
151c0 6f 75 74 20 63 68 61 6e 67 65 73 20 62 75 74 20  out changes but 
151d0 64 6f 20 6e 6f 20 72 6f 6c 6c 62 61 63 6b 20 74  do no rollback t
151e0 72 61 6e 73 61 63 74 69 6f 6e 20 2a 2f 0a 23 64  ransaction */.#d
151f0 65 66 69 6e 65 20 4f 45 5f 46 61 69 6c 20 20 20  efine OE_Fail   
15200 20 20 33 20 20 20 2f 2a 20 53 74 6f 70 20 74 68    3   /* Stop th
15210 65 20 6f 70 65 72 61 74 69 6f 6e 20 62 75 74 20  e operation but 
15220 6c 65 61 76 65 20 61 6c 6c 20 70 72 69 6f 72 20  leave all prior 
15230 63 68 61 6e 67 65 73 20 2a 2f 0a 23 64 65 66 69  changes */.#defi
15240 6e 65 20 4f 45 5f 49 67 6e 6f 72 65 20 20 20 34  ne OE_Ignore   4
15250 20 20 20 2f 2a 20 49 67 6e 6f 72 65 20 74 68 65     /* Ignore the
15260 20 65 72 72 6f 72 2e 20 44 6f 20 6e 6f 74 20 64   error. Do not d
15270 6f 20 74 68 65 20 49 4e 53 45 52 54 20 6f 72 20  o the INSERT or 
15280 55 50 44 41 54 45 20 2a 2f 0a 23 64 65 66 69 6e  UPDATE */.#defin
15290 65 20 4f 45 5f 52 65 70 6c 61 63 65 20 20 35 20  e OE_Replace  5 
152a0 20 20 2f 2a 20 44 65 6c 65 74 65 20 65 78 69 73    /* Delete exis
152b0 74 69 6e 67 20 72 65 63 6f 72 64 2c 20 74 68 65  ting record, the
152c0 6e 20 64 6f 20 49 4e 53 45 52 54 20 6f 72 20 55  n do INSERT or U
152d0 50 44 41 54 45 20 2a 2f 0a 23 64 65 66 69 6e 65  PDATE */.#define
152e0 20 4f 45 5f 55 70 64 61 74 65 20 20 20 36 20 20   OE_Update   6  
152f0 20 2f 2a 20 50 72 6f 63 65 73 73 20 61 73 20 61   /* Process as a
15300 20 44 4f 20 55 50 44 41 54 45 20 69 6e 20 61 6e   DO UPDATE in an
15310 20 75 70 73 65 72 74 20 2a 2f 0a 23 64 65 66 69   upsert */.#defi
15320 6e 65 20 4f 45 5f 52 65 73 74 72 69 63 74 20 37  ne OE_Restrict 7
15330 20 20 20 2f 2a 20 4f 45 5f 41 62 6f 72 74 20 66     /* OE_Abort f
15340 6f 72 20 49 4d 4d 45 44 49 41 54 45 2c 20 4f 45  or IMMEDIATE, OE
15350 5f 52 6f 6c 6c 62 61 63 6b 20 66 6f 72 20 44 45  _Rollback for DE
15360 46 45 52 52 45 44 20 2a 2f 0a 23 64 65 66 69 6e  FERRED */.#defin
15370 65 20 4f 45 5f 53 65 74 4e 75 6c 6c 20 20 38 20  e OE_SetNull  8 
15380 20 20 2f 2a 20 53 65 74 20 74 68 65 20 66 6f 72    /* Set the for
15390 65 69 67 6e 20 6b 65 79 20 76 61 6c 75 65 20 74  eign key value t
153a0 6f 20 4e 55 4c 4c 20 2a 2f 0a 23 64 65 66 69 6e  o NULL */.#defin
153b0 65 20 4f 45 5f 53 65 74 44 66 6c 74 20 20 39 20  e OE_SetDflt  9 
153c0 20 20 2f 2a 20 53 65 74 20 74 68 65 20 66 6f 72    /* Set the for
153d0 65 69 67 6e 20 6b 65 79 20 76 61 6c 75 65 20 74  eign key value t
153e0 6f 20 69 74 73 20 64 65 66 61 75 6c 74 20 2a 2f  o its default */
153f0 0a 23 64 65 66 69 6e 65 20 4f 45 5f 43 61 73 63  .#define OE_Casc
15400 61 64 65 20 20 31 30 20 20 2f 2a 20 43 61 73 63  ade  10  /* Casc
15410 61 64 65 20 74 68 65 20 63 68 61 6e 67 65 73 20  ade the changes 
15420 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 44 65  */.#define OE_De
15430 66 61 75 6c 74 20 20 31 31 20 20 2f 2a 20 44 6f  fault  11  /* Do
15440 20 77 68 61 74 65 76 65 72 20 74 68 65 20 64 65   whatever the de
15450 66 61 75 6c 74 20 61 63 74 69 6f 6e 20 69 73 20  fault action is 
15460 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e  */.../*.** An in
15470 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f  stance of the fo
15480 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72  llowing structur
15490 65 20 69 73 20 70 61 73 73 65 64 20 61 73 20 74  e is passed as t
154a0 68 65 20 66 69 72 73 74 0a 2a 2a 20 61 72 67 75  he first.** argu
154b0 6d 65 6e 74 20 74 6f 20 73 71 6c 69 74 65 33 56  ment to sqlite3V
154c0 64 62 65 4b 65 79 43 6f 6d 70 61 72 65 20 61 6e  dbeKeyCompare an
154d0 64 20 69 73 20 75 73 65 64 20 74 6f 20 63 6f 6e  d is used to con
154e0 74 72 6f 6c 20 74 68 65 0a 2a 2a 20 63 6f 6d 70  trol the.** comp
154f0 61 72 69 73 6f 6e 20 6f 66 20 74 68 65 20 74 77  arison of the tw
15500 6f 20 69 6e 64 65 78 20 6b 65 79 73 2e 0a 2a 2a  o index keys..**
15510 0a 2a 2a 20 4e 6f 74 65 20 74 68 61 74 20 61 53  .** Note that aS
15520 6f 72 74 4f 72 64 65 72 5b 5d 20 61 6e 64 20 61  ortOrder[] and a
15530 43 6f 6c 6c 5b 5d 20 68 61 76 65 20 6e 46 69 65  Coll[] have nFie
15540 6c 64 2b 31 20 73 6c 6f 74 73 2e 20 20 54 68 65  ld+1 slots.  The
15550 72 65 0a 2a 2a 20 61 72 65 20 6e 46 69 65 6c 64  re.** are nField
15560 20 73 6c 6f 74 73 20 66 6f 72 20 74 68 65 20 63   slots for the c
15570 6f 6c 75 6d 6e 73 20 6f 66 20 61 6e 20 69 6e 64  olumns of an ind
15580 65 78 20 74 68 65 6e 20 6f 6e 65 20 65 78 74 72  ex then one extr
15590 61 20 73 6c 6f 74 0a 2a 2a 20 66 6f 72 20 74 68  a slot.** for th
155a0 65 20 72 6f 77 69 64 20 61 74 20 74 68 65 20 65  e rowid at the e
155b0 6e 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 4b 65  nd..*/.struct Ke
155c0 79 49 6e 66 6f 20 7b 0a 20 20 75 33 32 20 6e 52  yInfo {.  u32 nR
155d0 65 66 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ef;           /*
155e0 20 4e 75 6d 62 65 72 20 6f 66 20 72 65 66 65 72   Number of refer
155f0 65 6e 63 65 73 20 74 6f 20 74 68 69 73 20 4b 65  ences to this Ke
15600 79 49 6e 66 6f 20 6f 62 6a 65 63 74 20 2a 2f 0a  yInfo object */.
15610 20 20 75 38 20 65 6e 63 3b 20 20 20 20 20 20 20    u8 enc;       
15620 20 20 20 20 20 20 2f 2a 20 54 65 78 74 20 65 6e        /* Text en
15630 63 6f 64 69 6e 67 20 2d 20 6f 6e 65 20 6f 66 20  coding - one of 
15640 74 68 65 20 53 51 4c 49 54 45 5f 55 54 46 2a 20  the SQLITE_UTF* 
15650 76 61 6c 75 65 73 20 2a 2f 0a 20 20 75 31 36 20  values */.  u16 
15660 6e 4b 65 79 46 69 65 6c 64 3b 20 20 20 20 20 20  nKeyField;      
15670 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6b 65 79  /* Number of key
15680 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20   columns in the 
15690 69 6e 64 65 78 20 2a 2f 0a 20 20 75 31 36 20 6e  index */.  u16 n
156a0 41 6c 6c 46 69 65 6c 64 3b 20 20 20 20 20 20 2f  AllField;      /
156b0 2a 20 54 6f 74 61 6c 20 63 6f 6c 75 6d 6e 73 2c  * Total columns,
156c0 20 69 6e 63 6c 75 64 69 6e 67 20 6b 65 79 20 70   including key p
156d0 6c 75 73 20 6f 74 68 65 72 73 20 2a 2f 0a 20 20  lus others */.  
156e0 73 71 6c 69 74 65 33 20 2a 64 62 3b 20 20 20 20  sqlite3 *db;    
156f0 20 20 20 20 2f 2a 20 54 68 65 20 64 61 74 61 62      /* The datab
15700 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 2a  ase connection *
15710 2f 0a 20 20 75 38 20 2a 61 53 6f 72 74 4f 72 64  /.  u8 *aSortOrd
15720 65 72 3b 20 20 20 20 20 2f 2a 20 53 6f 72 74 20  er;     /* Sort 
15730 6f 72 64 65 72 20 66 6f 72 20 65 61 63 68 20 63  order for each c
15740 6f 6c 75 6d 6e 2e 20 2a 2f 0a 20 20 43 6f 6c 6c  olumn. */.  Coll
15750 53 65 71 20 2a 61 43 6f 6c 6c 5b 31 5d 3b 20 20  Seq *aColl[1];  
15760 2f 2a 20 43 6f 6c 6c 61 74 69 6e 67 20 73 65 71  /* Collating seq
15770 75 65 6e 63 65 20 66 6f 72 20 65 61 63 68 20 74  uence for each t
15780 65 72 6d 20 6f 66 20 74 68 65 20 6b 65 79 20 2a  erm of the key *
15790 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73  /.};../*.** This
157a0 20 6f 62 6a 65 63 74 20 68 6f 6c 64 73 20 61 20   object holds a 
157b0 72 65 63 6f 72 64 20 77 68 69 63 68 20 68 61 73  record which has
157c0 20 62 65 65 6e 20 70 61 72 73 65 64 20 6f 75 74   been parsed out
157d0 20 69 6e 74 6f 20 69 6e 64 69 76 69 64 75 61 6c   into individual
157e0 0a 2a 2a 20 66 69 65 6c 64 73 2c 20 66 6f 72 20  .** fields, for 
157f0 74 68 65 20 70 75 72 70 6f 73 65 73 20 6f 66 20  the purposes of 
15800 64 6f 69 6e 67 20 61 20 63 6f 6d 70 61 72 69 73  doing a comparis
15810 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 41 20 72 65 63 6f  on..**.** A reco
15820 72 64 20 69 73 20 61 6e 20 6f 62 6a 65 63 74 20  rd is an object 
15830 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 6f 6e  that contains on
15840 65 20 6f 72 20 6d 6f 72 65 20 66 69 65 6c 64 73  e or more fields
15850 20 6f 66 20 64 61 74 61 2e 0a 2a 2a 20 52 65 63   of data..** Rec
15860 6f 72 64 73 20 61 72 65 20 75 73 65 64 20 74 6f  ords are used to
15870 20 73 74 6f 72 65 20 74 68 65 20 63 6f 6e 74 65   store the conte
15880 6e 74 20 6f 66 20 61 20 74 61 62 6c 65 20 72 6f  nt of a table ro
15890 77 20 61 6e 64 20 74 6f 20 73 74 6f 72 65 0a 2a  w and to store.*
158a0 2a 20 74 68 65 20 6b 65 79 20 6f 66 20 61 6e 20  * the key of an 
158b0 69 6e 64 65 78 2e 20 20 41 20 62 6c 6f 62 20 65  index.  A blob e
158c0 6e 63 6f 64 69 6e 67 20 6f 66 20 61 20 72 65 63  ncoding of a rec
158d0 6f 72 64 20 69 73 20 63 72 65 61 74 65 64 20 62  ord is created b
158e0 79 0a 2a 2a 20 74 68 65 20 4f 50 5f 4d 61 6b 65  y.** the OP_Make
158f0 52 65 63 6f 72 64 20 6f 70 63 6f 64 65 20 6f 66  Record opcode of
15900 20 74 68 65 20 56 44 42 45 20 61 6e 64 20 69 73   the VDBE and is
15910 20 64 69 73 61 73 73 65 6d 62 6c 65 64 20 62 79   disassembled by
15920 20 74 68 65 0a 2a 2a 20 4f 50 5f 43 6f 6c 75 6d   the.** OP_Colum
15930 6e 20 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20  n opcode..**.** 
15940 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  An instance of t
15950 68 69 73 20 6f 62 6a 65 63 74 20 73 65 72 76 65  his object serve
15960 73 20 61 73 20 61 20 22 6b 65 79 22 20 66 6f 72  s as a "key" for
15970 20 64 6f 69 6e 67 20 61 20 73 65 61 72 63 68 20   doing a search 
15980 6f 6e 0a 2a 2a 20 61 6e 20 69 6e 64 65 78 20 62  on.** an index b
15990 2b 74 72 65 65 2e 20 54 68 65 20 67 6f 61 6c 20  +tree. The goal 
159a0 6f 66 20 74 68 65 20 73 65 61 72 63 68 20 69 73  of the search is
159b0 20 74 6f 20 66 69 6e 64 20 74 68 65 20 65 6e 74   to find the ent
159c0 72 79 20 74 68 61 74 0a 2a 2a 20 69 73 20 63 6c  ry that.** is cl
159d0 6f 73 65 64 20 74 6f 20 74 68 65 20 6b 65 79 20  osed to the key 
159e0 64 65 73 63 72 69 62 65 64 20 62 79 20 74 68 69  described by thi
159f0 73 20 6f 62 6a 65 63 74 2e 20 20 54 68 69 73 20  s object.  This 
15a00 6f 62 6a 65 63 74 20 6d 69 67 68 74 20 68 6f 6c  object might hol
15a10 64 0a 2a 2a 20 6a 75 73 74 20 61 20 70 72 65 66  d.** just a pref
15a20 69 78 20 6f 66 20 74 68 65 20 6b 65 79 2e 20 20  ix of the key.  
15a30 54 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 66 69  The number of fi
15a40 65 6c 64 73 20 69 73 20 67 69 76 65 6e 20 62 79  elds is given by
15a50 0a 2a 2a 20 70 4b 65 79 49 6e 66 6f 2d 3e 6e 46  .** pKeyInfo->nF
15a60 69 65 6c 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  ield..**.** The 
15a70 72 31 20 61 6e 64 20 72 32 20 66 69 65 6c 64 73  r1 and r2 fields
15a80 20 61 72 65 20 74 68 65 20 76 61 6c 75 65 73 20   are the values 
15a90 74 6f 20 72 65 74 75 72 6e 20 69 66 20 74 68 69  to return if thi
15aa0 73 20 6b 65 79 20 69 73 20 6c 65 73 73 20 74 68  s key is less th
15ab0 61 6e 0a 2a 2a 20 6f 72 20 67 72 65 61 74 65 72  an.** or greater
15ac0 20 74 68 61 6e 20 61 20 6b 65 79 20 69 6e 20 74   than a key in t
15ad0 68 65 20 62 74 72 65 65 2c 20 72 65 73 70 65 63  he btree, respec
15ae0 74 69 76 65 6c 79 2e 20 20 54 68 65 73 65 20 61  tively.  These a
15af0 72 65 20 6e 6f 72 6d 61 6c 6c 79 0a 2a 2a 20 2d  re normally.** -
15b00 31 20 61 6e 64 20 2b 31 20 72 65 73 70 65 63 74  1 and +1 respect
15b10 69 76 65 6c 79 2c 20 62 75 74 20 6d 69 67 68 74  ively, but might
15b20 20 62 65 20 69 6e 76 65 72 74 65 64 20 74 6f 20   be inverted to 
15b30 2b 31 20 61 6e 64 20 2d 31 20 69 66 20 74 68 65  +1 and -1 if the
15b40 20 62 2d 74 72 65 65 0a 2a 2a 20 69 73 20 69 6e   b-tree.** is in
15b50 20 44 45 53 43 20 6f 72 64 65 72 2e 0a 2a 2a 0a   DESC order..**.
15b60 2a 2a 20 54 68 65 20 6b 65 79 20 63 6f 6d 70 61  ** The key compa
15b70 72 69 73 6f 6e 20 66 75 6e 63 74 69 6f 6e 73 20  rison functions 
15b80 61 63 74 75 61 6c 6c 79 20 72 65 74 75 72 6e 20  actually return 
15b90 64 65 66 61 75 6c 74 5f 72 63 20 77 68 65 6e 20  default_rc when 
15ba0 74 68 65 79 20 66 69 6e 64 0a 2a 2a 20 61 6e 20  they find.** an 
15bb0 65 71 75 61 6c 73 20 63 6f 6d 70 61 72 69 73 6f  equals compariso
15bc0 6e 2e 20 20 64 65 66 61 75 6c 74 5f 72 63 20 63  n.  default_rc c
15bd0 61 6e 20 62 65 20 2d 31 2c 20 30 2c 20 6f 72 20  an be -1, 0, or 
15be0 2b 31 2e 20 20 49 66 20 74 68 65 72 65 20 61 72  +1.  If there ar
15bf0 65 0a 2a 2a 20 6d 75 6c 74 69 70 6c 65 20 65 6e  e.** multiple en
15c00 74 72 69 65 73 20 69 6e 20 74 68 65 20 62 2d 74  tries in the b-t
15c10 72 65 65 20 77 69 74 68 20 74 68 65 20 73 61 6d  ree with the sam
15c20 65 20 6b 65 79 20 28 77 68 65 6e 20 6f 6e 6c 79  e key (when only
15c30 20 6c 6f 6f 6b 69 6e 67 0a 2a 2a 20 61 74 20 74   looking.** at t
15c40 68 65 20 66 69 72 73 74 20 70 4b 65 79 49 6e 66  he first pKeyInf
15c50 6f 2d 3e 6e 46 69 65 6c 64 73 2c 29 20 74 68 65  o->nFields,) the
15c60 6e 20 64 65 66 61 75 6c 74 5f 72 63 20 63 61 6e  n default_rc can
15c70 20 62 65 20 73 65 74 20 74 6f 20 2d 31 20 74 6f   be set to -1 to
15c80 0a 2a 2a 20 63 61 75 73 65 20 74 68 65 20 73 65  .** cause the se
15c90 61 72 63 68 20 74 6f 20 66 69 6e 64 20 74 68 65  arch to find the
15ca0 20 6c 61 73 74 20 6d 61 74 63 68 2c 20 6f 72 20   last match, or 
15cb0 2b 31 20 74 6f 20 63 61 75 73 65 20 74 68 65 20  +1 to cause the 
15cc0 73 65 61 72 63 68 20 74 6f 0a 2a 2a 20 66 69 6e  search to.** fin
15cd0 64 20 74 68 65 20 66 69 72 73 74 20 6d 61 74 63  d the first matc
15ce0 68 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6b 65 79  h..**.** The key
15cf0 20 63 6f 6d 70 61 72 69 73 6f 6e 20 66 75 6e 63   comparison func
15d00 74 69 6f 6e 73 20 77 69 6c 6c 20 73 65 74 20 65  tions will set e
15d10 71 53 65 65 6e 20 74 6f 20 74 72 75 65 20 69 66  qSeen to true if
15d20 20 74 68 65 79 20 65 76 65 72 0a 2a 2a 20 67 65   they ever.** ge
15d30 74 20 61 6e 64 20 65 71 75 61 6c 20 72 65 73 75  t and equal resu
15d40 6c 74 73 20 77 68 65 6e 20 63 6f 6d 70 61 72 69  lts when compari
15d50 6e 67 20 74 68 69 73 20 73 74 72 75 63 74 75 72  ng this structur
15d60 65 20 74 6f 20 61 20 62 2d 74 72 65 65 20 72 65  e to a b-tree re
15d70 63 6f 72 64 2e 0a 2a 2a 20 57 68 65 6e 20 64 65  cord..** When de
15d80 66 61 75 6c 74 5f 72 63 21 3d 30 2c 20 74 68 65  fault_rc!=0, the
15d90 20 73 65 61 72 63 68 20 6d 69 67 68 74 20 65 6e   search might en
15da0 64 20 75 70 20 6f 6e 20 74 68 65 20 72 65 63 6f  d up on the reco
15db0 72 64 20 69 6d 6d 65 64 69 61 74 65 6c 79 0a 2a  rd immediately.*
15dc0 2a 20 62 65 66 6f 72 65 20 74 68 65 20 66 69 72  * before the fir
15dd0 73 74 20 6d 61 74 63 68 20 6f 72 20 69 6d 6d 65  st match or imme
15de0 64 69 61 74 65 6c 79 20 61 66 74 65 72 20 74 68  diately after th
15df0 65 20 6c 61 73 74 20 6d 61 74 63 68 2e 20 20 54  e last match.  T
15e00 68 65 0a 2a 2a 20 65 71 53 65 65 6e 20 66 69 65  he.** eqSeen fie
15e10 6c 64 20 77 69 6c 6c 20 69 6e 64 69 63 61 74 65  ld will indicate
15e20 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20   whether or not 
15e30 61 6e 20 65 78 61 63 74 20 6d 61 74 63 68 20 65  an exact match e
15e40 78 69 73 74 73 20 69 6e 20 74 68 65 0a 2a 2a 20  xists in the.** 
15e50 62 2d 74 72 65 65 2e 0a 2a 2f 0a 73 74 72 75 63  b-tree..*/.struc
15e60 74 20 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64  t UnpackedRecord
15e70 20 7b 0a 20 20 4b 65 79 49 6e 66 6f 20 2a 70 4b   {.  KeyInfo *pK
15e80 65 79 49 6e 66 6f 3b 20 20 2f 2a 20 43 6f 6c 6c  eyInfo;  /* Coll
15e90 61 74 69 6f 6e 20 61 6e 64 20 73 6f 72 74 2d 6f  ation and sort-o
15ea0 72 64 65 72 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  rder information
15eb0 20 2a 2f 0a 20 20 4d 65 6d 20 2a 61 4d 65 6d 3b   */.  Mem *aMem;
15ec0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c            /* Val
15ed0 75 65 73 20 2a 2f 0a 20 20 75 31 36 20 6e 46 69  ues */.  u16 nFi
15ee0 65 6c 64 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  eld;         /* 
15ef0 4e 75 6d 62 65 72 20 6f 66 20 65 6e 74 72 69 65  Number of entrie
15f00 73 20 69 6e 20 61 70 4d 65 6d 5b 5d 20 2a 2f 0a  s in apMem[] */.
15f10 20 20 69 38 20 64 65 66 61 75 6c 74 5f 72 63 3b    i8 default_rc;
15f20 20 20 20 20 20 20 2f 2a 20 43 6f 6d 70 61 72 69        /* Compari
15f30 73 6f 6e 20 72 65 73 75 6c 74 20 69 66 20 6b 65  son result if ke
15f40 79 73 20 61 72 65 20 65 71 75 61 6c 20 2a 2f 0a  ys are equal */.
15f50 20 20 75 38 20 65 72 72 43 6f 64 65 3b 20 20 20    u8 errCode;   
15f60 20 20 20 20 20 20 2f 2a 20 45 72 72 6f 72 20 64        /* Error d
15f70 65 74 65 63 74 65 64 20 62 79 20 78 52 65 63 6f  etected by xReco
15f80 72 64 43 6f 6d 70 61 72 65 20 28 43 4f 52 52 55  rdCompare (CORRU
15f90 50 54 20 6f 72 20 4e 4f 4d 45 4d 29 20 2a 2f 0a  PT or NOMEM) */.
15fa0 20 20 69 38 20 72 31 3b 20 20 20 20 20 20 20 20    i8 r1;        
15fb0 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 74        /* Value t
15fc0 6f 20 72 65 74 75 72 6e 20 69 66 20 28 6c 68 73  o return if (lhs
15fd0 20 3c 20 72 68 73 29 20 2a 2f 0a 20 20 69 38 20   < rhs) */.  i8 
15fe0 72 32 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  r2;             
15ff0 20 2f 2a 20 56 61 6c 75 65 20 74 6f 20 72 65 74   /* Value to ret
16000 75 72 6e 20 69 66 20 28 6c 68 73 20 3e 20 72 68  urn if (lhs > rh
16010 73 29 20 2a 2f 0a 20 20 75 38 20 65 71 53 65 65  s) */.  u8 eqSee
16020 6e 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54  n;          /* T
16030 72 75 65 20 69 66 20 61 6e 20 65 71 75 61 6c 69  rue if an equali
16040 74 79 20 63 6f 6d 70 61 72 69 73 6f 6e 20 68 61  ty comparison ha
16050 73 20 62 65 65 6e 20 73 65 65 6e 20 2a 2f 0a 7d  s been seen */.}
16060 3b 0a 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 53  ;.../*.** Each S
16070 51 4c 20 69 6e 64 65 78 20 69 73 20 72 65 70 72  QL index is repr
16080 65 73 65 6e 74 65 64 20 69 6e 20 6d 65 6d 6f 72  esented in memor
16090 79 20 62 79 20 61 6e 0a 2a 2a 20 69 6e 73 74 61  y by an.** insta
160a0 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f  nce of the follo
160b0 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 2e 0a  wing structure..
160c0 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f 6c 75 6d 6e  **.** The column
160d0 73 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 74  s of the table t
160e0 68 61 74 20 61 72 65 20 74 6f 20 62 65 20 69 6e  hat are to be in
160f0 64 65 78 65 64 20 61 72 65 20 64 65 73 63 72 69  dexed are descri
16100 62 65 64 0a 2a 2a 20 62 79 20 74 68 65 20 61 69  bed.** by the ai
16110 43 6f 6c 75 6d 6e 5b 5d 20 66 69 65 6c 64 20 6f  Column[] field o
16120 66 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65  f this structure
16130 2e 20 20 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20  .  For example, 
16140 73 75 70 70 6f 73 65 0a 2a 2a 20 77 65 20 68 61  suppose.** we ha
16150 76 65 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  ve the following
16160 20 74 61 62 6c 65 20 61 6e 64 20 69 6e 64 65 78   table and index
16170 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 43 52 45 41  :.**.**     CREA
16180 54 45 20 54 41 42 4c 45 20 45 78 31 28 63 31 20  TE TABLE Ex1(c1 
16190 69 6e 74 2c 20 63 32 20 69 6e 74 2c 20 63 33 20  int, c2 int, c3 
161a0 74 65 78 74 29 3b 0a 2a 2a 20 20 20 20 20 43 52  text);.**     CR
161b0 45 41 54 45 20 49 4e 44 45 58 20 45 78 32 20 4f  EATE INDEX Ex2 O
161c0 4e 20 45 78 31 28 63 33 2c 63 31 29 3b 0a 2a 2a  N Ex1(c3,c1);.**
161d0 0a 2a 2a 20 49 6e 20 74 68 65 20 54 61 62 6c 65  .** In the Table
161e0 20 73 74 72 75 63 74 75 72 65 20 64 65 73 63 72   structure descr
161f0 69 62 69 6e 67 20 45 78 31 2c 20 6e 43 6f 6c 3d  ibing Ex1, nCol=
16200 3d 33 20 62 65 63 61 75 73 65 20 74 68 65 72 65  =3 because there
16210 20 61 72 65 0a 2a 2a 20 74 68 72 65 65 20 63 6f   are.** three co
16220 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 74 61 62  lumns in the tab
16230 6c 65 2e 20 20 49 6e 20 74 68 65 20 49 6e 64 65  le.  In the Inde
16240 78 20 73 74 72 75 63 74 75 72 65 20 64 65 73 63  x structure desc
16250 72 69 62 69 6e 67 0a 2a 2a 20 45 78 32 2c 20 6e  ribing.** Ex2, n
16260 43 6f 6c 75 6d 6e 3d 3d 32 20 73 69 6e 63 65 20  Column==2 since 
16270 32 20 6f 66 20 74 68 65 20 33 20 63 6f 6c 75 6d  2 of the 3 colum
16280 6e 73 20 6f 66 20 45 78 31 20 61 72 65 20 69 6e  ns of Ex1 are in
16290 64 65 78 65 64 2e 0a 2a 2a 20 54 68 65 20 76 61  dexed..** The va
162a0 6c 75 65 20 6f 66 20 61 69 43 6f 6c 75 6d 6e 20  lue of aiColumn 
162b0 69 73 20 7b 32 2c 20 30 7d 2e 20 20 61 69 43 6f  is {2, 0}.  aiCo
162c0 6c 75 6d 6e 5b 30 5d 3d 3d 32 20 62 65 63 61 75  lumn[0]==2 becau
162d0 73 65 20 74 68 65 0a 2a 2a 20 66 69 72 73 74 20  se the.** first 
162e0 63 6f 6c 75 6d 6e 20 74 6f 20 62 65 20 69 6e 64  column to be ind
162f0 65 78 65 64 20 28 63 33 29 20 68 61 73 20 61 6e  exed (c3) has an
16300 20 69 6e 64 65 78 20 6f 66 20 32 20 69 6e 20 45   index of 2 in E
16310 78 31 2e 61 43 6f 6c 5b 5d 2e 0a 2a 2a 20 54 68  x1.aCol[]..** Th
16320 65 20 73 65 63 6f 6e 64 20 63 6f 6c 75 6d 6e 20  e second column 
16330 74 6f 20 62 65 20 69 6e 64 65 78 65 64 20 28 63  to be indexed (c
16340 31 29 20 68 61 73 20 61 6e 20 69 6e 64 65 78 20  1) has an index 
16350 6f 66 20 30 20 69 6e 0a 2a 2a 20 45 78 31 2e 61  of 0 in.** Ex1.a
16360 43 6f 6c 5b 5d 2c 20 68 65 6e 63 65 20 45 78 32  Col[], hence Ex2
16370 2e 61 69 43 6f 6c 75 6d 6e 5b 31 5d 3d 3d 30 2e  .aiColumn[1]==0.
16380 0a 2a 2a 0a 2a 2a 20 54 68 65 20 49 6e 64 65 78  .**.** The Index
16390 2e 6f 6e 45 72 72 6f 72 20 66 69 65 6c 64 20 64  .onError field d
163a0 65 74 65 72 6d 69 6e 65 73 20 77 68 65 74 68 65  etermines whethe
163b0 72 20 6f 72 20 6e 6f 74 20 74 68 65 20 69 6e 64  r or not the ind
163c0 65 78 65 64 20 63 6f 6c 75 6d 6e 73 0a 2a 2a 20  exed columns.** 
163d0 6d 75 73 74 20 62 65 20 75 6e 69 71 75 65 20 61  must be unique a
163e0 6e 64 20 77 68 61 74 20 74 6f 20 64 6f 20 69 66  nd what to do if
163f0 20 74 68 65 79 20 61 72 65 20 6e 6f 74 2e 20 20   they are not.  
16400 57 68 65 6e 20 49 6e 64 65 78 2e 6f 6e 45 72 72  When Index.onErr
16410 6f 72 3d 4f 45 5f 4e 6f 6e 65 2c 0a 2a 2a 20 69  or=OE_None,.** i
16420 74 20 6d 65 61 6e 73 20 74 68 69 73 20 69 73 20  t means this is 
16430 6e 6f 74 20 61 20 75 6e 69 71 75 65 20 69 6e 64  not a unique ind
16440 65 78 2e 20 20 4f 74 68 65 72 77 69 73 65 20 69  ex.  Otherwise i
16450 74 20 69 73 20 61 20 75 6e 69 71 75 65 20 69 6e  t is a unique in
16460 64 65 78 0a 2a 2a 20 61 6e 64 20 74 68 65 20 76  dex.** and the v
16470 61 6c 75 65 20 6f 66 20 49 6e 64 65 78 2e 6f 6e  alue of Index.on
16480 45 72 72 6f 72 20 69 6e 64 69 63 61 74 65 20 74  Error indicate t
16490 68 65 20 77 68 69 63 68 20 63 6f 6e 66 6c 69 63  he which conflic
164a0 74 20 72 65 73 6f 6c 75 74 69 6f 6e 0a 2a 2a 20  t resolution.** 
164b0 61 6c 67 6f 72 69 74 68 6d 20 74 6f 20 65 6d 70  algorithm to emp
164c0 6c 6f 79 20 77 68 65 6e 65 76 65 72 20 61 6e 20  loy whenever an 
164d0 61 74 74 65 6d 70 74 20 69 73 20 6d 61 64 65 20  attempt is made 
164e0 74 6f 20 69 6e 73 65 72 74 20 61 20 6e 6f 6e 2d  to insert a non-
164f0 75 6e 69 71 75 65 0a 2a 2a 20 65 6c 65 6d 65 6e  unique.** elemen
16500 74 2e 0a 2a 2a 0a 2a 2a 20 57 68 69 6c 65 20 70  t..**.** While p
16510 61 72 73 69 6e 67 20 61 20 43 52 45 41 54 45 20  arsing a CREATE 
16520 54 41 42 4c 45 20 6f 72 20 43 52 45 41 54 45 20  TABLE or CREATE 
16530 49 4e 44 45 58 20 73 74 61 74 65 6d 65 6e 74 20  INDEX statement 
16540 69 6e 20 6f 72 64 65 72 20 74 6f 0a 2a 2a 20 67  in order to.** g
16550 65 6e 65 72 61 74 65 20 56 44 42 45 20 63 6f 64  enerate VDBE cod
16560 65 20 28 61 73 20 6f 70 70 6f 73 65 64 20 74 6f  e (as opposed to
16570 20 70 61 72 73 69 6e 67 20 6f 6e 65 20 72 65 61   parsing one rea
16580 64 20 66 72 6f 6d 20 61 6e 20 73 71 6c 69 74 65  d from an sqlite
16590 5f 6d 61 73 74 65 72 0a 2a 2a 20 74 61 62 6c 65  _master.** table
165a0 20 61 73 20 70 61 72 74 20 6f 66 20 70 61 72 73   as part of pars
165b0 69 6e 67 20 61 6e 20 65 78 69 73 74 69 6e 67 20  ing an existing 
165c0 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 29  database schema)
165d0 2c 20 74 72 61 6e 73 69 65 6e 74 20 69 6e 73 74  , transient inst
165e0 61 6e 63 65 73 0a 2a 2a 20 6f 66 20 74 68 69 73  ances.** of this
165f0 20 73 74 72 75 63 74 75 72 65 20 6d 61 79 20 62   structure may b
16600 65 20 63 72 65 61 74 65 64 2e 20 49 6e 20 74 68  e created. In th
16610 69 73 20 63 61 73 65 20 74 68 65 20 49 6e 64 65  is case the Inde
16620 78 2e 74 6e 75 6d 20 76 61 72 69 61 62 6c 65 20  x.tnum variable 
16630 69 73 0a 2a 2a 20 75 73 65 64 20 74 6f 20 73 74  is.** used to st
16640 6f 72 65 20 74 68 65 20 61 64 64 72 65 73 73 20  ore the address 
16650 6f 66 20 61 20 56 44 42 45 20 69 6e 73 74 72 75  of a VDBE instru
16660 63 74 69 6f 6e 2c 20 6e 6f 74 20 61 20 64 61 74  ction, not a dat
16670 61 62 61 73 65 20 70 61 67 65 0a 2a 2a 20 6e 75  abase page.** nu
16680 6d 62 65 72 20 28 69 74 20 63 61 6e 6e 6f 74 20  mber (it cannot 
16690 2d 20 74 68 65 20 64 61 74 61 62 61 73 65 20 70  - the database p
166a0 61 67 65 20 69 73 20 6e 6f 74 20 61 6c 6c 6f 63  age is not alloc
166b0 61 74 65 64 20 75 6e 74 69 6c 20 74 68 65 20 56  ated until the V
166c0 44 42 45 0a 2a 2a 20 70 72 6f 67 72 61 6d 20 69  DBE.** program i
166d0 73 20 65 78 65 63 75 74 65 64 29 2e 20 53 65 65  s executed). See
166e0 20 63 6f 6e 76 65 72 74 54 6f 57 69 74 68 6f 75   convertToWithou
166f0 74 52 6f 77 69 64 54 61 62 6c 65 28 29 20 66 6f  tRowidTable() fo
16700 72 20 64 65 74 61 69 6c 73 2e 0a 2a 2f 0a 73 74  r details..*/.st
16710 72 75 63 74 20 49 6e 64 65 78 20 7b 0a 20 20 63  ruct Index {.  c
16720 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20  har *zName;     
16730 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20          /* Name 
16740 6f 66 20 74 68 69 73 20 69 6e 64 65 78 20 2a 2f  of this index */
16750 0a 20 20 69 31 36 20 2a 61 69 43 6f 6c 75 6d 6e  .  i16 *aiColumn
16760 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57  ;           /* W
16770 68 69 63 68 20 63 6f 6c 75 6d 6e 73 20 61 72 65  hich columns are
16780 20 75 73 65 64 20 62 79 20 74 68 69 73 20 69 6e   used by this in
16790 64 65 78 2e 20 20 31 73 74 20 69 73 20 30 20 2a  dex.  1st is 0 *
167a0 2f 0a 20 20 4c 6f 67 45 73 74 20 2a 61 69 52 6f  /.  LogEst *aiRo
167b0 77 4c 6f 67 45 73 74 3b 20 20 20 20 20 2f 2a 20  wLogEst;     /* 
167c0 46 72 6f 6d 20 41 4e 41 4c 59 5a 45 3a 20 45 73  From ANALYZE: Es
167d0 74 2e 20 72 6f 77 73 20 73 65 6c 65 63 74 65 64  t. rows selected
167e0 20 62 79 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20   by each column 
167f0 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70 54 61 62  */.  Table *pTab
16800 6c 65 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  le;           /*
16810 20 54 68 65 20 53 51 4c 20 74 61 62 6c 65 20 62   The SQL table b
16820 65 69 6e 67 20 69 6e 64 65 78 65 64 20 2a 2f 0a  eing indexed */.
16830 20 20 63 68 61 72 20 2a 7a 43 6f 6c 41 66 66 3b    char *zColAff;
16840 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 74             /* St
16850 72 69 6e 67 20 64 65 66 69 6e 69 6e 67 20 74 68  ring defining th
16860 65 20 61 66 66 69 6e 69 74 79 20 6f 66 20 65 61  e affinity of ea
16870 63 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 49  ch column */.  I
16880 6e 64 65 78 20 2a 70 4e 65 78 74 3b 20 20 20 20  ndex *pNext;    
16890 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6e          /* The n
168a0 65 78 74 20 69 6e 64 65 78 20 61 73 73 6f 63 69  ext index associ
168b0 61 74 65 64 20 77 69 74 68 20 74 68 65 20 73 61  ated with the sa
168c0 6d 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20 53 63  me table */.  Sc
168d0 68 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20 20  hema *pSchema;  
168e0 20 20 20 20 20 20 20 2f 2a 20 53 63 68 65 6d 61         /* Schema
168f0 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 69 73   containing this
16900 20 69 6e 64 65 78 20 2a 2f 0a 20 20 75 38 20 2a   index */.  u8 *
16910 61 53 6f 72 74 4f 72 64 65 72 3b 20 20 20 20 20  aSortOrder;     
16920 20 20 20 20 20 2f 2a 20 66 6f 72 20 65 61 63 68       /* for each
16930 20 63 6f 6c 75 6d 6e 3a 20 54 72 75 65 3d 3d 44   column: True==D
16940 45 53 43 2c 20 46 61 6c 73 65 3d 3d 41 53 43 20  ESC, False==ASC 
16950 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20  */.  const char 
16960 2a 2a 61 7a 43 6f 6c 6c 3b 20 20 20 20 20 2f 2a  **azColl;     /*
16970 20 41 72 72 61 79 20 6f 66 20 63 6f 6c 6c 61 74   Array of collat
16980 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 6e 61 6d  ion sequence nam
16990 65 73 20 66 6f 72 20 69 6e 64 65 78 20 2a 2f 0a  es for index */.
169a0 20 20 45 78 70 72 20 2a 70 50 61 72 74 49 64 78    Expr *pPartIdx
169b0 57 68 65 72 65 3b 20 20 20 20 20 2f 2a 20 57 48  Where;     /* WH
169c0 45 52 45 20 63 6c 61 75 73 65 20 66 6f 72 20 70  ERE clause for p
169d0 61 72 74 69 61 6c 20 69 6e 64 69 63 65 73 20 2a  artial indices *
169e0 2f 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 61 43  /.  ExprList *aC
169f0 6f 6c 45 78 70 72 3b 20 20 20 20 20 20 2f 2a 20  olExpr;      /* 
16a00 43 6f 6c 75 6d 6e 20 65 78 70 72 65 73 73 69 6f  Column expressio
16a10 6e 73 20 2a 2f 0a 20 20 69 6e 74 20 74 6e 75 6d  ns */.  int tnum
16a20 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
16a30 20 2f 2a 20 44 42 20 50 61 67 65 20 63 6f 6e 74   /* DB Page cont
16a40 61 69 6e 69 6e 67 20 72 6f 6f 74 20 6f 66 20 74  aining root of t
16a50 68 69 73 20 69 6e 64 65 78 20 2a 2f 0a 20 20 4c  his index */.  L
16a60 6f 67 45 73 74 20 73 7a 49 64 78 52 6f 77 3b 20  ogEst szIdxRow; 
16a70 20 20 20 20 20 20 20 20 2f 2a 20 45 73 74 69 6d          /* Estim
16a80 61 74 65 64 20 61 76 65 72 61 67 65 20 72 6f 77  ated average row
16a90 20 73 69 7a 65 20 69 6e 20 62 79 74 65 73 20 2a   size in bytes *
16aa0 2f 0a 20 20 75 31 36 20 6e 4b 65 79 43 6f 6c 3b  /.  u16 nKeyCol;
16ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
16ac0 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e  Number of column
16ad0 73 20 66 6f 72 6d 69 6e 67 20 74 68 65 20 6b 65  s forming the ke
16ae0 79 20 2a 2f 0a 20 20 75 31 36 20 6e 43 6f 6c 75  y */.  u16 nColu
16af0 6d 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  mn;             
16b00 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c  /* Number of col
16b10 75 6d 6e 73 20 73 74 6f 72 65 64 20 69 6e 20 74  umns stored in t
16b20 68 65 20 69 6e 64 65 78 20 2a 2f 0a 20 20 75 38  he index */.  u8
16b30 20 6f 6e 45 72 72 6f 72 3b 20 20 20 20 20 20 20   onError;       
16b40 20 20 20 20 20 20 20 2f 2a 20 4f 45 5f 41 62 6f         /* OE_Abo
16b50 72 74 2c 20 4f 45 5f 49 67 6e 6f 72 65 2c 20 4f  rt, OE_Ignore, O
16b60 45 5f 52 65 70 6c 61 63 65 2c 20 6f 72 20 4f 45  E_Replace, or OE
16b70 5f 4e 6f 6e 65 20 2a 2f 0a 20 20 75 6e 73 69 67  _None */.  unsig
16b80 6e 65 64 20 69 64 78 54 79 70 65 3a 32 3b 20 20  ned idxType:2;  
16b90 20 20 20 20 2f 2a 20 31 3d 3d 55 4e 49 51 55 45      /* 1==UNIQUE
16ba0 2c 20 32 3d 3d 50 52 49 4d 41 52 59 20 4b 45 59  , 2==PRIMARY KEY
16bb0 2c 20 30 3d 3d 43 52 45 41 54 45 20 49 4e 44 45  , 0==CREATE INDE
16bc0 58 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20  X */.  unsigned 
16bd0 62 55 6e 6f 72 64 65 72 65 64 3a 31 3b 20 20 20  bUnordered:1;   
16be0 2f 2a 20 55 73 65 20 74 68 69 73 20 69 6e 64 65  /* Use this inde
16bf0 78 20 66 6f 72 20 3d 3d 20 6f 72 20 49 4e 20 71  x for == or IN q
16c00 75 65 72 69 65 73 20 6f 6e 6c 79 20 2a 2f 0a 20  ueries only */. 
16c10 20 75 6e 73 69 67 6e 65 64 20 75 6e 69 71 4e 6f   unsigned uniqNo
16c20 74 4e 75 6c 6c 3a 31 3b 20 20 2f 2a 20 54 72 75  tNull:1;  /* Tru
16c30 65 20 69 66 20 55 4e 49 51 55 45 20 61 6e 64 20  e if UNIQUE and 
16c40 4e 4f 54 20 4e 55 4c 4c 20 66 6f 72 20 61 6c 6c  NOT NULL for all
16c50 20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 20 20 75 6e   columns */.  un
16c60 73 69 67 6e 65 64 20 69 73 52 65 73 69 7a 65 64  signed isResized
16c70 3a 31 3b 20 20 20 20 2f 2a 20 54 72 75 65 20 69  :1;    /* True i
16c80 66 20 72 65 73 69 7a 65 49 6e 64 65 78 4f 62 6a  f resizeIndexObj
16c90 65 63 74 28 29 20 68 61 73 20 62 65 65 6e 20 63  ect() has been c
16ca0 61 6c 6c 65 64 20 2a 2f 0a 20 20 75 6e 73 69 67  alled */.  unsig
16cb0 6e 65 64 20 69 73 43 6f 76 65 72 69 6e 67 3a 31  ned isCovering:1
16cc0 3b 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 74  ;   /* True if t
16cd0 68 69 73 20 69 73 20 61 20 63 6f 76 65 72 69 6e  his is a coverin
16ce0 67 20 69 6e 64 65 78 20 2a 2f 0a 20 20 75 6e 73  g index */.  uns
16cf0 69 67 6e 65 64 20 6e 6f 53 6b 69 70 53 63 61 6e  igned noSkipScan
16d00 3a 31 3b 20 20 20 2f 2a 20 44 6f 20 6e 6f 74 20  :1;   /* Do not 
16d10 74 72 79 20 74 6f 20 75 73 65 20 73 6b 69 70 2d  try to use skip-
16d20 73 63 61 6e 20 69 66 20 74 72 75 65 20 2a 2f 0a  scan if true */.
16d30 20 20 75 6e 73 69 67 6e 65 64 20 68 61 73 53 74    unsigned hasSt
16d40 61 74 31 3a 31 3b 20 20 20 20 20 2f 2a 20 61 69  at1:1;     /* ai
16d50 52 6f 77 4c 6f 67 45 73 74 20 76 61 6c 75 65 73  RowLogEst values
16d60 20 63 6f 6d 65 20 66 72 6f 6d 20 73 71 6c 69 74   come from sqlit
16d70 65 5f 73 74 61 74 31 20 2a 2f 0a 20 20 75 6e 73  e_stat1 */.  uns
16d80 69 67 6e 65 64 20 62 4e 6f 51 75 65 72 79 3a 31  igned bNoQuery:1
16d90 3b 20 20 20 20 20 2f 2a 20 44 6f 20 6e 6f 74 20  ;     /* Do not 
16da0 75 73 65 20 74 68 69 73 20 69 6e 64 65 78 20 74  use this index t
16db0 6f 20 6f 70 74 69 6d 69 7a 65 20 71 75 65 72 69  o optimize queri
16dc0 65 73 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c  es */.#ifdef SQL
16dd0 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33  ITE_ENABLE_STAT3
16de0 5f 4f 52 5f 53 54 41 54 34 0a 20 20 69 6e 74 20  _OR_STAT4.  int 
16df0 6e 53 61 6d 70 6c 65 3b 20 20 20 20 20 20 20 20  nSample;        
16e00 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
16e10 66 20 65 6c 65 6d 65 6e 74 73 20 69 6e 20 61 53  f elements in aS
16e20 61 6d 70 6c 65 5b 5d 20 2a 2f 0a 20 20 69 6e 74  ample[] */.  int
16e30 20 6e 53 61 6d 70 6c 65 43 6f 6c 3b 20 20 20 20   nSampleCol;    
16e40 20 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66        /* Size of
16e50 20 49 6e 64 65 78 53 61 6d 70 6c 65 2e 61 6e 45   IndexSample.anE
16e60 71 5b 5d 20 61 6e 64 20 73 6f 20 6f 6e 20 2a 2f  q[] and so on */
16e70 0a 20 20 74 52 6f 77 63 6e 74 20 2a 61 41 76 67  .  tRowcnt *aAvg
16e80 45 71 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 41  Eq;         /* A
16e90 76 65 72 61 67 65 20 6e 45 71 20 76 61 6c 75 65  verage nEq value
16ea0 73 20 66 6f 72 20 6b 65 79 73 20 6e 6f 74 20 69  s for keys not i
16eb0 6e 20 61 53 61 6d 70 6c 65 20 2a 2f 0a 20 20 49  n aSample */.  I
16ec0 6e 64 65 78 53 61 6d 70 6c 65 20 2a 61 53 61 6d  ndexSample *aSam
16ed0 70 6c 65 3b 20 20 20 20 2f 2a 20 53 61 6d 70 6c  ple;    /* Sampl
16ee0 65 73 20 6f 66 20 74 68 65 20 6c 65 66 74 2d 6d  es of the left-m
16ef0 6f 73 74 20 6b 65 79 20 2a 2f 0a 20 20 74 52 6f  ost key */.  tRo
16f00 77 63 6e 74 20 2a 61 69 52 6f 77 45 73 74 3b 20  wcnt *aiRowEst; 
16f10 20 20 20 20 20 20 2f 2a 20 4e 6f 6e 2d 6c 6f 67        /* Non-log
16f20 61 72 69 74 68 6d 69 63 20 73 74 61 74 31 20 64  arithmic stat1 d
16f30 61 74 61 20 66 6f 72 20 74 68 69 73 20 69 6e 64  ata for this ind
16f40 65 78 20 2a 2f 0a 20 20 74 52 6f 77 63 6e 74 20  ex */.  tRowcnt 
16f50 6e 52 6f 77 45 73 74 30 3b 20 20 20 20 20 20 20  nRowEst0;       
16f60 20 2f 2a 20 4e 6f 6e 2d 6c 6f 67 61 72 69 74 68   /* Non-logarith
16f70 6d 69 63 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f  mic number of ro
16f80 77 73 20 69 6e 20 74 68 65 20 69 6e 64 65 78 20  ws in the index 
16f90 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 42 69 74 6d  */.#endif.  Bitm
16fa0 61 73 6b 20 63 6f 6c 4e 6f 74 49 64 78 65 64 3b  ask colNotIdxed;
16fb0 20 20 20 20 20 2f 2a 20 30 20 66 6f 72 20 75 6e       /* 0 for un
16fc0 69 6e 64 65 78 65 64 20 63 6f 6c 75 6d 6e 73 20  indexed columns 
16fd0 69 6e 20 70 54 61 62 20 2a 2f 0a 7d 3b 0a 0a 2f  in pTab */.};../
16fe0 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c  *.** Allowed val
16ff0 75 65 73 20 66 6f 72 20 49 6e 64 65 78 2e 69 64  ues for Index.id
17000 78 54 79 70 65 0a 2a 2f 0a 23 64 65 66 69 6e 65  xType.*/.#define
17010 20 53 51 4c 49 54 45 5f 49 44 58 54 59 50 45 5f   SQLITE_IDXTYPE_
17020 41 50 50 44 45 46 20 20 20 20 20 20 30 20 20 20  APPDEF      0   
17030 2f 2a 20 43 72 65 61 74 65 64 20 75 73 69 6e 67  /* Created using
17040 20 43 52 45 41 54 45 20 49 4e 44 45 58 20 2a 2f   CREATE INDEX */
17050 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
17060 49 44 58 54 59 50 45 5f 55 4e 49 51 55 45 20 20  IDXTYPE_UNIQUE  
17070 20 20 20 20 31 20 20 20 2f 2a 20 49 6d 70 6c 65      1   /* Imple
17080 6d 65 6e 74 73 20 61 20 55 4e 49 51 55 45 20 63  ments a UNIQUE c
17090 6f 6e 73 74 72 61 69 6e 74 20 2a 2f 0a 23 64 65  onstraint */.#de
170a0 66 69 6e 65 20 53 51 4c 49 54 45 5f 49 44 58 54  fine SQLITE_IDXT
170b0 59 50 45 5f 50 52 49 4d 41 52 59 4b 45 59 20 20  YPE_PRIMARYKEY  
170c0 32 20 20 20 2f 2a 20 49 73 20 74 68 65 20 50 52  2   /* Is the PR
170d0 49 4d 41 52 59 20 4b 45 59 20 66 6f 72 20 74 68  IMARY KEY for th
170e0 65 20 74 61 62 6c 65 20 2a 2f 0a 0a 2f 2a 20 52  e table */../* R
170f0 65 74 75 72 6e 20 74 72 75 65 20 69 66 20 69 6e  eturn true if in
17100 64 65 78 20 58 20 69 73 20 61 20 50 52 49 4d 41  dex X is a PRIMA
17110 52 59 20 4b 45 59 20 69 6e 64 65 78 20 2a 2f 0a  RY KEY index */.
17120 23 64 65 66 69 6e 65 20 49 73 50 72 69 6d 61 72  #define IsPrimar
17130 79 4b 65 79 49 6e 64 65 78 28 58 29 20 20 28 28  yKeyIndex(X)  ((
17140 58 29 2d 3e 69 64 78 54 79 70 65 3d 3d 53 51 4c  X)->idxType==SQL
17150 49 54 45 5f 49 44 58 54 59 50 45 5f 50 52 49 4d  ITE_IDXTYPE_PRIM
17160 41 52 59 4b 45 59 29 0a 0a 2f 2a 20 52 65 74 75  ARYKEY)../* Retu
17170 72 6e 20 74 72 75 65 20 69 66 20 69 6e 64 65 78  rn true if index
17180 20 58 20 69 73 20 61 20 55 4e 49 51 55 45 20 69   X is a UNIQUE i
17190 6e 64 65 78 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ndex */.#define 
171a0 49 73 55 6e 69 71 75 65 49 6e 64 65 78 28 58 29  IsUniqueIndex(X)
171b0 20 20 20 20 20 20 28 28 58 29 2d 3e 6f 6e 45 72        ((X)->onEr
171c0 72 6f 72 21 3d 4f 45 5f 4e 6f 6e 65 29 0a 0a 2f  ror!=OE_None)../
171d0 2a 20 54 68 65 20 49 6e 64 65 78 2e 61 69 43 6f  * The Index.aiCo
171e0 6c 75 6d 6e 5b 5d 20 76 61 6c 75 65 73 20 61 72  lumn[] values ar
171f0 65 20 6e 6f 72 6d 61 6c 6c 79 20 70 6f 73 69 74  e normally posit
17200 69 76 65 20 69 6e 74 65 67 65 72 2e 20 20 42 75  ive integer.  Bu
17210 74 0a 2a 2a 20 74 68 65 72 65 20 61 72 65 20 73  t.** there are s
17220 6f 6d 65 20 6e 65 67 61 74 69 76 65 20 76 61 6c  ome negative val
17230 75 65 73 20 74 68 61 74 20 68 61 76 65 20 73 70  ues that have sp
17240 65 63 69 61 6c 20 6d 65 61 6e 69 6e 67 3a 0a 2a  ecial meaning:.*
17250 2f 0a 23 64 65 66 69 6e 65 20 58 4e 5f 52 4f 57  /.#define XN_ROW
17260 49 44 20 20 20 20 20 28 2d 31 29 20 20 20 20 20  ID     (-1)     
17270 2f 2a 20 49 6e 64 65 78 65 64 20 63 6f 6c 75 6d  /* Indexed colum
17280 6e 20 69 73 20 74 68 65 20 72 6f 77 69 64 20 2a  n is the rowid *
17290 2f 0a 23 64 65 66 69 6e 65 20 58 4e 5f 45 58 50  /.#define XN_EXP
172a0 52 20 20 20 20 20 20 28 2d 32 29 20 20 20 20 20  R      (-2)     
172b0 2f 2a 20 49 6e 64 65 78 65 64 20 63 6f 6c 75 6d  /* Indexed colum
172c0 6e 20 69 73 20 61 6e 20 65 78 70 72 65 73 73 69  n is an expressi
172d0 6f 6e 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 45 61 63  on */../*.** Eac
172e0 68 20 73 61 6d 70 6c 65 20 73 74 6f 72 65 64 20  h sample stored 
172f0 69 6e 20 74 68 65 20 73 71 6c 69 74 65 5f 73 74  in the sqlite_st
17300 61 74 33 20 74 61 62 6c 65 20 69 73 20 72 65 70  at3 table is rep
17310 72 65 73 65 6e 74 65 64 20 69 6e 20 6d 65 6d 6f  resented in memo
17320 72 79 0a 2a 2a 20 75 73 69 6e 67 20 61 20 73 74  ry.** using a st
17330 72 75 63 74 75 72 65 20 6f 66 20 74 68 69 73 20  ructure of this 
17340 74 79 70 65 2e 20 20 53 65 65 20 64 6f 63 75 6d  type.  See docum
17350 65 6e 74 61 74 69 6f 6e 20 61 74 20 74 68 65 20  entation at the 
17360 74 6f 70 20 6f 66 20 74 68 65 0a 2a 2a 20 61 6e  top of the.** an
17370 61 6c 79 7a 65 2e 63 20 73 6f 75 72 63 65 20 66  alyze.c source f
17380 69 6c 65 20 66 6f 72 20 61 64 64 69 74 69 6f 6e  ile for addition
17390 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a  al information..
173a0 2a 2f 0a 73 74 72 75 63 74 20 49 6e 64 65 78 53  */.struct IndexS
173b0 61 6d 70 6c 65 20 7b 0a 20 20 76 6f 69 64 20 2a  ample {.  void *
173c0 70 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50  p;          /* P
173d0 6f 69 6e 74 65 72 20 74 6f 20 73 61 6d 70 6c 65  ointer to sample
173e0 64 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 6e  d record */.  in
173f0 74 20 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20  t n;            
17400 2f 2a 20 53 69 7a 65 20 6f 66 20 72 65 63 6f 72  /* Size of recor
17410 64 20 69 6e 20 62 79 74 65 73 20 2a 2f 0a 20 20  d in bytes */.  
17420 74 52 6f 77 63 6e 74 20 2a 61 6e 45 71 3b 20 20  tRowcnt *anEq;  
17430 20 20 2f 2a 20 45 73 74 2e 20 6e 75 6d 62 65 72    /* Est. number
17440 20 6f 66 20 72 6f 77 73 20 77 68 65 72 65 20 74   of rows where t
17450 68 65 20 6b 65 79 20 65 71 75 61 6c 73 20 74 68  he key equals th
17460 69 73 20 73 61 6d 70 6c 65 20 2a 2f 0a 20 20 74  is sample */.  t
17470 52 6f 77 63 6e 74 20 2a 61 6e 4c 74 3b 20 20 20  Rowcnt *anLt;   
17480 20 2f 2a 20 45 73 74 2e 20 6e 75 6d 62 65 72 20   /* Est. number 
17490 6f 66 20 72 6f 77 73 20 77 68 65 72 65 20 6b 65  of rows where ke
174a0 79 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20 74  y is less than t
174b0 68 69 73 20 73 61 6d 70 6c 65 20 2a 2f 0a 20 20  his sample */.  
174c0 74 52 6f 77 63 6e 74 20 2a 61 6e 44 4c 74 3b 20  tRowcnt *anDLt; 
174d0 20 20 2f 2a 20 45 73 74 2e 20 6e 75 6d 62 65 72    /* Est. number
174e0 20 6f 66 20 64 69 73 74 69 6e 63 74 20 6b 65 79   of distinct key
174f0 73 20 6c 65 73 73 20 74 68 61 6e 20 74 68 69 73  s less than this
17500 20 73 61 6d 70 6c 65 20 2a 2f 0a 7d 3b 0a 0a 2f   sample */.};../
17510 2a 0a 2a 2a 20 50 6f 73 73 69 62 6c 65 20 76 61  *.** Possible va
17520 6c 75 65 73 20 74 6f 20 75 73 65 20 77 69 74 68  lues to use with
17530 69 6e 20 74 68 65 20 66 6c 61 67 73 20 61 72 67  in the flags arg
17540 75 6d 65 6e 74 20 74 6f 20 73 71 6c 69 74 65 33  ument to sqlite3
17550 47 65 74 54 6f 6b 65 6e 28 29 2e 0a 2a 2f 0a 23  GetToken()..*/.#
17560 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 54 4f  define SQLITE_TO
17570 4b 45 4e 5f 51 55 4f 54 45 44 20 20 20 20 30 78  KEN_QUOTED    0x
17580 31 20 2f 2a 20 54 6f 6b 65 6e 20 69 73 20 61 20  1 /* Token is a 
17590 71 75 6f 74 65 64 20 69 64 65 6e 74 69 66 69 65  quoted identifie
175a0 72 2e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  r. */.#define SQ
175b0 4c 49 54 45 5f 54 4f 4b 45 4e 5f 4b 45 59 57 4f  LITE_TOKEN_KEYWO
175c0 52 44 20 20 20 30 78 32 20 2f 2a 20 54 6f 6b 65  RD   0x2 /* Toke
175d0 6e 20 69 73 20 61 20 6b 65 79 77 6f 72 64 2e 20  n is a keyword. 
175e0 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 74  */../*.** Each t
175f0 6f 6b 65 6e 20 63 6f 6d 69 6e 67 20 6f 75 74 20  oken coming out 
17600 6f 66 20 74 68 65 20 6c 65 78 65 72 20 69 73 20  of the lexer is 
17610 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 0a 2a  an instance of.*
17620 2a 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65  * this structure
17630 2e 20 20 54 6f 6b 65 6e 73 20 61 72 65 20 61 6c  .  Tokens are al
17640 73 6f 20 75 73 65 64 20 61 73 20 70 61 72 74 20  so used as part 
17650 6f 66 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e  of an expression
17660 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6d 65 6d 6f  ..**.** The memo
17670 72 79 20 74 68 61 74 20 22 7a 22 20 70 6f 69 6e  ry that "z" poin
17680 74 73 20 74 6f 20 69 73 20 6f 77 6e 65 64 20 62  ts to is owned b
17690 79 20 6f 74 68 65 72 20 6f 62 6a 65 63 74 73 2e  y other objects.
176a0 20 20 54 61 6b 65 20 63 61 72 65 0a 2a 2a 20 74    Take care.** t
176b0 68 61 74 20 74 68 65 20 6f 77 6e 65 72 20 6f 66  hat the owner of
176c0 20 74 68 65 20 22 7a 22 20 73 74 72 69 6e 67 20   the "z" string 
176d0 64 6f 65 73 20 6e 6f 74 20 64 65 61 6c 6c 6f 63  does not dealloc
176e0 61 74 65 20 74 68 65 20 73 74 72 69 6e 67 20 62  ate the string b
176f0 65 66 6f 72 65 0a 2a 2a 20 74 68 65 20 54 6f 6b  efore.** the Tok
17700 65 6e 20 67 6f 65 73 20 6f 75 74 20 6f 66 20 73  en goes out of s
17710 63 6f 70 65 21 20 20 56 65 72 79 20 6f 66 74 65  cope!  Very ofte
17720 6e 2c 20 74 68 65 20 22 7a 22 20 70 6f 69 6e 74  n, the "z" point
17730 73 20 74 6f 20 73 6f 6d 65 20 70 6c 61 63 65 0a  s to some place.
17740 2a 2a 20 69 6e 20 74 68 65 20 6d 69 64 64 6c 65  ** in the middle
17750 20 6f 66 20 74 68 65 20 50 61 72 73 65 2e 7a 53   of the Parse.zS
17760 71 6c 20 74 65 78 74 2e 20 20 42 75 74 20 69 74  ql text.  But it
17770 20 6d 69 67 68 74 20 61 6c 73 6f 20 70 6f 69 6e   might also poin
17780 74 20 74 6f 20 61 0a 2a 2a 20 73 74 61 74 69 63  t to a.** static
17790 20 73 74 72 69 6e 67 2e 0a 2a 2f 0a 73 74 72 75   string..*/.stru
177a0 63 74 20 54 6f 6b 65 6e 20 7b 0a 20 20 63 6f 6e  ct Token {.  con
177b0 73 74 20 63 68 61 72 20 2a 7a 3b 20 20 20 20 20  st char *z;     
177c0 2f 2a 20 54 65 78 74 20 6f 66 20 74 68 65 20 74  /* Text of the t
177d0 6f 6b 65 6e 2e 20 20 4e 6f 74 20 4e 55 4c 4c 2d  oken.  Not NULL-
177e0 74 65 72 6d 69 6e 61 74 65 64 21 20 2a 2f 0a 20  terminated! */. 
177f0 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 20 6e 3b   unsigned int n;
17800 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
17810 20 63 68 61 72 61 63 74 65 72 73 20 69 6e 20 74   characters in t
17820 68 69 73 20 74 6f 6b 65 6e 20 2a 2f 0a 7d 3b 0a  his token */.};.
17830 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e  ./*.** An instan
17840 63 65 20 6f 66 20 74 68 69 73 20 73 74 72 75 63  ce of this struc
17850 74 75 72 65 20 63 6f 6e 74 61 69 6e 73 20 69 6e  ture contains in
17860 66 6f 72 6d 61 74 69 6f 6e 20 6e 65 65 64 65 64  formation needed
17870 20 74 6f 20 67 65 6e 65 72 61 74 65 0a 2a 2a 20   to generate.** 
17880 63 6f 64 65 20 66 6f 72 20 61 20 53 45 4c 45 43  code for a SELEC
17890 54 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20  T that contains 
178a0 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69  aggregate functi
178b0 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 45 78  ons..**.** If Ex
178c0 70 72 2e 6f 70 3d 3d 54 4b 5f 41 47 47 5f 43 4f  pr.op==TK_AGG_CO
178d0 4c 55 4d 4e 20 6f 72 20 54 4b 5f 41 47 47 5f 46  LUMN or TK_AGG_F
178e0 55 4e 43 54 49 4f 4e 20 74 68 65 6e 20 45 78 70  UNCTION then Exp
178f0 72 2e 70 41 67 67 49 6e 66 6f 20 69 73 20 61 0a  r.pAggInfo is a.
17900 2a 2a 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68  ** pointer to th
17910 69 73 20 73 74 72 75 63 74 75 72 65 2e 20 20 54  is structure.  T
17920 68 65 20 45 78 70 72 2e 69 43 6f 6c 75 6d 6e 20  he Expr.iColumn 
17930 66 69 65 6c 64 20 69 73 20 74 68 65 20 69 6e 64  field is the ind
17940 65 78 20 69 6e 0a 2a 2a 20 41 67 67 49 6e 66 6f  ex in.** AggInfo
17950 2e 61 43 6f 6c 5b 5d 20 6f 72 20 41 67 67 49 6e  .aCol[] or AggIn
17960 66 6f 2e 61 46 75 6e 63 5b 5d 20 6f 66 20 69 6e  fo.aFunc[] of in
17970 66 6f 72 6d 61 74 69 6f 6e 20 6e 65 65 64 65 64  formation needed
17980 20 74 6f 20 67 65 6e 65 72 61 74 65 0a 2a 2a 20   to generate.** 
17990 63 6f 64 65 20 66 6f 72 20 74 68 61 74 20 6e 6f  code for that no
179a0 64 65 2e 0a 2a 2a 0a 2a 2a 20 41 67 67 49 6e 66  de..**.** AggInf
179b0 6f 2e 70 47 72 6f 75 70 42 79 20 61 6e 64 20 41  o.pGroupBy and A
179c0 67 67 49 6e 66 6f 2e 61 46 75 6e 63 2e 70 45 78  ggInfo.aFunc.pEx
179d0 70 72 20 70 6f 69 6e 74 20 74 6f 20 66 69 65 6c  pr point to fiel
179e0 64 73 20 77 69 74 68 69 6e 20 74 68 65 0a 2a 2a  ds within the.**
179f0 20 6f 72 69 67 69 6e 61 6c 20 53 65 6c 65 63 74   original Select
17a00 20 73 74 72 75 63 74 75 72 65 20 74 68 61 74 20   structure that 
17a10 64 65 73 63 72 69 62 65 73 20 74 68 65 20 53 45  describes the SE
17a20 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 20  LECT statement. 
17a30 20 54 68 65 73 65 0a 2a 2a 20 66 69 65 6c 64 73   These.** fields
17a40 20 64 6f 20 6e 6f 74 20 6e 65 65 64 20 74 6f 20   do not need to 
17a50 62 65 20 66 72 65 65 64 20 77 68 65 6e 20 64 65  be freed when de
17a60 61 6c 6c 6f 63 61 74 69 6e 67 20 74 68 65 20 41  allocating the A
17a70 67 67 49 6e 66 6f 20 73 74 72 75 63 74 75 72 65  ggInfo structure
17a80 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 41 67 67 49  ..*/.struct AggI
17a90 6e 66 6f 20 7b 0a 20 20 75 38 20 64 69 72 65 63  nfo {.  u8 direc
17aa0 74 4d 6f 64 65 3b 20 20 20 20 20 20 20 20 20 20  tMode;          
17ab0 2f 2a 20 44 69 72 65 63 74 20 72 65 6e 64 65 72  /* Direct render
17ac0 69 6e 67 20 6d 6f 64 65 20 6d 65 61 6e 73 20 74  ing mode means t
17ad0 61 6b 65 20 64 61 74 61 20 64 69 72 65 63 74 6c  ake data directl
17ae0 79 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  y.              
17af0 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 66              ** f
17b00 72 6f 6d 20 73 6f 75 72 63 65 20 74 61 62 6c 65  rom source table
17b10 73 20 72 61 74 68 65 72 20 74 68 61 6e 20 66 72  s rather than fr
17b20 6f 6d 20 61 63 63 75 6d 75 6c 61 74 6f 72 73 20  om accumulators 
17b30 2a 2f 0a 20 20 75 38 20 75 73 65 53 6f 72 74 69  */.  u8 useSorti
17b40 6e 67 49 64 78 3b 20 20 20 20 20 20 20 2f 2a 20  ngIdx;       /* 
17b50 49 6e 20 64 69 72 65 63 74 20 6d 6f 64 65 2c 20  In direct mode, 
17b60 72 65 66 65 72 65 6e 63 65 20 74 68 65 20 73 6f  reference the so
17b70 72 74 69 6e 67 20 69 6e 64 65 78 20 72 61 74 68  rting index rath
17b80 65 72 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  er.             
17b90 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20               ** 
17ba0 74 68 61 6e 20 74 68 65 20 73 6f 75 72 63 65 20  than the source 
17bb0 74 61 62 6c 65 20 2a 2f 0a 20 20 69 6e 74 20 73  table */.  int s
17bc0 6f 72 74 69 6e 67 49 64 78 3b 20 20 20 20 20 20  ortingIdx;      
17bd0 20 20 20 2f 2a 20 43 75 72 73 6f 72 20 6e 75 6d     /* Cursor num
17be0 62 65 72 20 6f 66 20 74 68 65 20 73 6f 72 74 69  ber of the sorti
17bf0 6e 67 20 69 6e 64 65 78 20 2a 2f 0a 20 20 69 6e  ng index */.  in
17c00 74 20 73 6f 72 74 69 6e 67 49 64 78 50 54 61 62  t sortingIdxPTab
17c10 3b 20 20 20 20 20 2f 2a 20 43 75 72 73 6f 72 20  ;     /* Cursor 
17c20 6e 75 6d 62 65 72 20 6f 66 20 70 73 65 75 64 6f  number of pseudo
17c30 2d 74 61 62 6c 65 20 2a 2f 0a 20 20 69 6e 74 20  -table */.  int 
17c40 6e 53 6f 72 74 69 6e 67 43 6f 6c 75 6d 6e 3b 20  nSortingColumn; 
17c50 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
17c60 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20   columns in the 
17c70 73 6f 72 74 69 6e 67 20 69 6e 64 65 78 20 2a 2f  sorting index */
17c80 0a 20 20 69 6e 74 20 6d 6e 52 65 67 2c 20 6d 78  .  int mnReg, mx
17c90 52 65 67 3b 20 20 20 20 20 20 20 2f 2a 20 52 61  Reg;       /* Ra
17ca0 6e 67 65 20 6f 66 20 72 65 67 69 73 74 65 72 73  nge of registers
17cb0 20 61 6c 6c 6f 63 61 74 65 64 20 66 6f 72 20 61   allocated for a
17cc0 43 6f 6c 20 61 6e 64 20 61 46 75 6e 63 20 2a 2f  Col and aFunc */
17cd0 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70 47 72  .  ExprList *pGr
17ce0 6f 75 70 42 79 3b 20 20 20 20 20 2f 2a 20 54 68  oupBy;     /* Th
17cf0 65 20 67 72 6f 75 70 20 62 79 20 63 6c 61 75 73  e group by claus
17d00 65 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 41 67  e */.  struct Ag
17d10 67 49 6e 66 6f 5f 63 6f 6c 20 7b 20 20 20 20 2f  gInfo_col {    /
17d20 2a 20 46 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d  * For each colum
17d30 6e 20 75 73 65 64 20 69 6e 20 73 6f 75 72 63 65  n used in source
17d40 20 74 61 62 6c 65 73 20 2a 2f 0a 20 20 20 20 54   tables */.    T
17d50 61 62 6c 65 20 2a 70 54 61 62 3b 20 20 20 20 20  able *pTab;     
17d60 20 20 20 20 20 20 20 20 2f 2a 20 53 6f 75 72 63          /* Sourc
17d70 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20 69  e table */.    i
17d80 6e 74 20 69 54 61 62 6c 65 3b 20 20 20 20 20 20  nt iTable;      
17d90 20 20 20 20 20 20 20 20 2f 2a 20 43 75 72 73 6f          /* Curso
17da0 72 20 6e 75 6d 62 65 72 20 6f 66 20 74 68 65 20  r number of the 
17db0 73 6f 75 72 63 65 20 74 61 62 6c 65 20 2a 2f 0a  source table */.
17dc0 20 20 20 20 69 6e 74 20 69 43 6f 6c 75 6d 6e 3b      int iColumn;
17dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
17de0 43 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 77 69  Column number wi
17df0 74 68 69 6e 20 74 68 65 20 73 6f 75 72 63 65 20  thin the source 
17e00 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20 69 6e 74  table */.    int
17e10 20 69 53 6f 72 74 65 72 43 6f 6c 75 6d 6e 3b 20   iSorterColumn; 
17e20 20 20 20 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20        /* Column 
17e30 6e 75 6d 62 65 72 20 69 6e 20 74 68 65 20 73 6f  number in the so
17e40 72 74 69 6e 67 20 69 6e 64 65 78 20 2a 2f 0a 20  rting index */. 
17e50 20 20 20 69 6e 74 20 69 4d 65 6d 3b 20 20 20 20     int iMem;    
17e60 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d              /* M
17e70 65 6d 6f 72 79 20 6c 6f 63 61 74 69 6f 6e 20 74  emory location t
17e80 68 61 74 20 61 63 74 73 20 61 73 20 61 63 63 75  hat acts as accu
17e90 6d 75 6c 61 74 6f 72 20 2a 2f 0a 20 20 20 20 45  mulator */.    E
17ea0 78 70 72 20 2a 70 45 78 70 72 3b 20 20 20 20 20  xpr *pExpr;     
17eb0 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6f          /* The o
17ec0 72 69 67 69 6e 61 6c 20 65 78 70 72 65 73 73 69  riginal expressi
17ed0 6f 6e 20 2a 2f 0a 20 20 7d 20 2a 61 43 6f 6c 3b  on */.  } *aCol;
17ee0 0a 20 20 69 6e 74 20 6e 43 6f 6c 75 6d 6e 3b 20  .  int nColumn; 
17ef0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
17f00 6d 62 65 72 20 6f 66 20 75 73 65 64 20 65 6e 74  mber of used ent
17f10 72 69 65 73 20 69 6e 20 61 43 6f 6c 5b 5d 20 2a  ries in aCol[] *
17f20 2f 0a 20 20 69 6e 74 20 6e 41 63 63 75 6d 75 6c  /.  int nAccumul
17f30 61 74 6f 72 3b 20 20 20 20 20 20 20 2f 2a 20 4e  ator;       /* N
17f40 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73  umber of columns
17f50 20 74 68 61 74 20 73 68 6f 77 20 74 68 72 6f 75   that show throu
17f60 67 68 20 74 6f 20 74 68 65 20 6f 75 74 70 75 74  gh to the output
17f70 2e 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
17f80 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 41              ** A
17f90 64 64 69 74 69 6f 6e 61 6c 20 63 6f 6c 75 6d 6e  dditional column
17fa0 73 20 61 72 65 20 75 73 65 64 20 6f 6e 6c 79 20  s are used only 
17fb0 61 73 20 70 61 72 61 6d 65 74 65 72 73 20 74 6f  as parameters to
17fc0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
17fd0 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 61 67             ** ag
17fe0 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e  gregate function
17ff0 73 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 41 67  s */.  struct Ag
18000 67 49 6e 66 6f 5f 66 75 6e 63 20 7b 20 20 20 2f  gInfo_func {   /
18010 2a 20 46 6f 72 20 65 61 63 68 20 61 67 67 72 65  * For each aggre
18020 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f  gate function */
18030 0a 20 20 20 20 45 78 70 72 20 2a 70 45 78 70 72  .    Expr *pExpr
18040 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
18050 20 45 78 70 72 65 73 73 69 6f 6e 20 65 6e 63 6f   Expression enco
18060 64 69 6e 67 20 74 68 65 20 66 75 6e 63 74 69 6f  ding the functio
18070 6e 20 2a 2f 0a 20 20 20 20 46 75 6e 63 44 65 66  n */.    FuncDef
18080 20 2a 70 46 75 6e 63 3b 20 20 20 20 20 20 20 20   *pFunc;        
18090 20 20 2f 2a 20 54 68 65 20 61 67 67 72 65 67 61    /* The aggrega
180a0 74 65 20 66 75 6e 63 74 69 6f 6e 20 69 6d 70 6c  te function impl
180b0 65 6d 65 6e 74 61 74 69 6f 6e 20 2a 2f 0a 20 20  ementation */.  
180c0 20 20 69 6e 74 20 69 4d 65 6d 3b 20 20 20 20 20    int iMem;     
180d0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 65             /* Me
180e0 6d 6f 72 79 20 6c 6f 63 61 74 69 6f 6e 20 74 68  mory location th
180f0 61 74 20 61 63 74 73 20 61 73 20 61 63 63 75 6d  at acts as accum
18100 75 6c 61 74 6f 72 20 2a 2f 0a 20 20 20 20 69 6e  ulator */.    in
18110 74 20 69 44 69 73 74 69 6e 63 74 3b 20 20 20 20  t iDistinct;    
18120 20 20 20 20 20 20 20 2f 2a 20 45 70 68 65 6d 65         /* Epheme
18130 72 61 6c 20 74 61 62 6c 65 20 75 73 65 64 20 74  ral table used t
18140 6f 20 65 6e 66 6f 72 63 65 20 44 49 53 54 49 4e  o enforce DISTIN
18150 43 54 20 2a 2f 0a 20 20 7d 20 2a 61 46 75 6e 63  CT */.  } *aFunc
18160 3b 0a 20 20 69 6e 74 20 6e 46 75 6e 63 3b 20 20  ;.  int nFunc;  
18170 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
18180 75 6d 62 65 72 20 6f 66 20 65 6e 74 72 69 65 73  umber of entries
18190 20 69 6e 20 61 46 75 6e 63 5b 5d 20 2a 2f 0a 7d   in aFunc[] */.}
181a0 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 64 61 74  ;../*.** The dat
181b0 61 74 79 70 65 20 79 6e 56 61 72 20 69 73 20 61  atype ynVar is a
181c0 20 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 2c   signed integer,
181d0 20 65 69 74 68 65 72 20 31 36 2d 62 69 74 20 6f   either 16-bit o
181e0 72 20 33 32 2d 62 69 74 2e 0a 2a 2a 20 55 73 75  r 32-bit..** Usu
181f0 61 6c 6c 79 20 69 74 20 69 73 20 31 36 2d 62 69  ally it is 16-bi
18200 74 73 2e 20 20 42 75 74 20 69 66 20 53 51 4c 49  ts.  But if SQLI
18210 54 45 5f 4d 41 58 5f 56 41 52 49 41 42 4c 45 5f  TE_MAX_VARIABLE_
18220 4e 55 4d 42 45 52 20 69 73 20 67 72 65 61 74 65  NUMBER is greate
18230 72 0a 2a 2a 20 74 68 61 6e 20 33 32 37 36 37 20  r.** than 32767 
18240 77 65 20 68 61 76 65 20 74 6f 20 6d 61 6b 65 20  we have to make 
18250 69 74 20 33 32 2d 62 69 74 2e 20 20 31 36 2d 62  it 32-bit.  16-b
18260 69 74 20 69 73 20 70 72 65 66 65 72 72 65 64 20  it is preferred 
18270 62 65 63 61 75 73 65 0a 2a 2a 20 69 74 20 75 73  because.** it us
18280 65 73 20 6c 65 73 73 20 6d 65 6d 6f 72 79 20 69  es less memory i
18290 6e 20 74 68 65 20 45 78 70 72 20 6f 62 6a 65 63  n the Expr objec
182a0 74 2c 20 77 68 69 63 68 20 69 73 20 61 20 62 69  t, which is a bi
182b0 67 20 6d 65 6d 6f 72 79 20 75 73 65 72 0a 2a 2a  g memory user.**
182c0 20 69 6e 20 73 79 73 74 65 6d 73 20 77 69 74 68   in systems with
182d0 20 6c 6f 74 73 20 6f 66 20 70 72 65 70 61 72 65   lots of prepare
182e0 64 20 73 74 61 74 65 6d 65 6e 74 73 2e 20 20 41  d statements.  A
182f0 6e 64 20 66 65 77 20 61 70 70 6c 69 63 61 74 69  nd few applicati
18300 6f 6e 73 0a 2a 2a 20 6e 65 65 64 20 6d 6f 72 65  ons.** need more
18310 20 74 68 61 6e 20 61 62 6f 75 74 20 31 30 20 6f   than about 10 o
18320 72 20 32 30 20 76 61 72 69 61 62 6c 65 73 2e 20  r 20 variables. 
18330 20 42 75 74 20 73 6f 6d 65 20 65 78 74 72 65 6d   But some extrem
18340 65 20 75 73 65 72 73 20 77 61 6e 74 0a 2a 2a 20  e users want.** 
18350 74 6f 20 68 61 76 65 20 70 72 65 70 61 72 65 64  to have prepared
18360 20 73 74 61 74 65 6d 65 6e 74 73 20 77 69 74 68   statements with
18370 20 6f 76 65 72 20 33 32 37 36 37 20 76 61 72 69   over 32767 vari
18380 61 62 6c 65 73 2c 20 61 6e 64 20 66 6f 72 20 74  ables, and for t
18390 68 65 6d 0a 2a 2a 20 74 68 65 20 6f 70 74 69 6f  hem.** the optio
183a0 6e 20 69 73 20 61 76 61 69 6c 61 62 6c 65 20 28  n is available (
183b0 61 74 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 29  at compile-time)
183c0 2e 0a 2a 2f 0a 23 69 66 20 53 51 4c 49 54 45 5f  ..*/.#if SQLITE_
183d0 4d 41 58 5f 56 41 52 49 41 42 4c 45 5f 4e 55 4d  MAX_VARIABLE_NUM
183e0 42 45 52 3c 3d 33 32 37 36 37 0a 74 79 70 65 64  BER<=32767.typed
183f0 65 66 20 69 31 36 20 79 6e 56 61 72 3b 0a 23 65  ef i16 ynVar;.#e
18400 6c 73 65 0a 74 79 70 65 64 65 66 20 69 6e 74 20  lse.typedef int 
18410 79 6e 56 61 72 3b 0a 23 65 6e 64 69 66 0a 0a 2f  ynVar;.#endif../
18420 2a 0a 2a 2a 20 45 61 63 68 20 6e 6f 64 65 20 6f  *.** Each node o
18430 66 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 20  f an expression 
18440 69 6e 20 74 68 65 20 70 61 72 73 65 20 74 72 65  in the parse tre
18450 65 20 69 73 20 61 6e 20 69 6e 73 74 61 6e 63 65  e is an instance
18460 0a 2a 2a 20 6f 66 20 74 68 69 73 20 73 74 72 75  .** of this stru
18470 63 74 75 72 65 2e 0a 2a 2a 0a 2a 2a 20 45 78 70  cture..**.** Exp
18480 72 2e 6f 70 20 69 73 20 74 68 65 20 6f 70 63 6f  r.op is the opco
18490 64 65 2e 20 54 68 65 20 69 6e 74 65 67 65 72 20  de. The integer 
184a0 70 61 72 73 65 72 20 74 6f 6b 65 6e 20 63 6f 64  parser token cod
184b0 65 73 20 61 72 65 20 72 65 75 73 65 64 0a 2a 2a  es are reused.**
184c0 20 61 73 20 6f 70 63 6f 64 65 73 20 68 65 72 65   as opcodes here
184d0 2e 20 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20 74  . For example, t
184e0 68 65 20 70 61 72 73 65 72 20 64 65 66 69 6e 65  he parser define
184f0 73 20 54 4b 5f 47 45 20 74 6f 20 62 65 20 61 6e  s TK_GE to be an
18500 20 69 6e 74 65 67 65 72 0a 2a 2a 20 63 6f 64 65   integer.** code
18510 20 72 65 70 72 65 73 65 6e 74 69 6e 67 20 74 68   representing th
18520 65 20 22 3e 3d 22 20 6f 70 65 72 61 74 6f 72 2e  e ">=" operator.
18530 20 54 68 69 73 20 73 61 6d 65 20 69 6e 74 65 67   This same integ
18540 65 72 20 63 6f 64 65 20 69 73 20 72 65 75 73 65  er code is reuse
18550 64 0a 2a 2a 20 74 6f 20 72 65 70 72 65 73 65 6e  d.** to represen
18560 74 20 74 68 65 20 67 72 65 61 74 65 72 2d 74 68  t the greater-th
18570 61 6e 2d 6f 72 2d 65 71 75 61 6c 2d 74 6f 20 6f  an-or-equal-to o
18580 70 65 72 61 74 6f 72 20 69 6e 20 74 68 65 20 65  perator in the e
18590 78 70 72 65 73 73 69 6f 6e 0a 2a 2a 20 74 72 65  xpression.** tre
185a0 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  e..**.** If the 
185b0 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61 6e  expression is an
185c0 20 53 51 4c 20 6c 69 74 65 72 61 6c 20 28 54 4b   SQL literal (TK
185d0 5f 49 4e 54 45 47 45 52 2c 20 54 4b 5f 46 4c 4f  _INTEGER, TK_FLO
185e0 41 54 2c 20 54 4b 5f 42 4c 4f 42 2c 0a 2a 2a 20  AT, TK_BLOB,.** 
185f0 6f 72 20 54 4b 5f 53 54 52 49 4e 47 29 2c 20 74  or TK_STRING), t
18600 68 65 6e 20 45 78 70 72 2e 74 6f 6b 65 6e 20 63  hen Expr.token c
18610 6f 6e 74 61 69 6e 73 20 74 68 65 20 74 65 78 74  ontains the text
18620 20 6f 66 20 74 68 65 20 53 51 4c 20 6c 69 74 65   of the SQL lite
18630 72 61 6c 2e 20 49 66 0a 2a 2a 20 74 68 65 20 65  ral. If.** the e
18640 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61 20 76  xpression is a v
18650 61 72 69 61 62 6c 65 20 28 54 4b 5f 56 41 52 49  ariable (TK_VARI
18660 41 42 4c 45 29 2c 20 74 68 65 6e 20 45 78 70 72  ABLE), then Expr
18670 2e 74 6f 6b 65 6e 20 63 6f 6e 74 61 69 6e 73 20  .token contains 
18680 74 68 65 0a 2a 2a 20 76 61 72 69 61 62 6c 65 20  the.** variable 
18690 6e 61 6d 65 2e 20 46 69 6e 61 6c 6c 79 2c 20 69  name. Finally, i
186a0 66 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e  f the expression
186b0 20 69 73 20 61 6e 20 53 51 4c 20 66 75 6e 63 74   is an SQL funct
186c0 69 6f 6e 20 28 54 4b 5f 46 55 4e 43 54 49 4f 4e  ion (TK_FUNCTION
186d0 29 2c 0a 2a 2a 20 74 68 65 6e 20 45 78 70 72 2e  ),.** then Expr.
186e0 74 6f 6b 65 6e 20 63 6f 6e 74 61 69 6e 73 20 74  token contains t
186f0 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 66  he name of the f
18700 75 6e 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 45  unction..**.** E
18710 78 70 72 2e 70 52 69 67 68 74 20 61 6e 64 20 45  xpr.pRight and E
18720 78 70 72 2e 70 4c 65 66 74 20 61 72 65 20 74 68  xpr.pLeft are th
18730 65 20 6c 65 66 74 20 61 6e 64 20 72 69 67 68 74  e left and right
18740 20 73 75 62 65 78 70 72 65 73 73 69 6f 6e 73 20   subexpressions 
18750 6f 66 20 61 0a 2a 2a 20 62 69 6e 61 72 79 20 6f  of a.** binary o
18760 70 65 72 61 74 6f 72 2e 20 45 69 74 68 65 72 20  perator. Either 
18770 6f 72 20 62 6f 74 68 20 6d 61 79 20 62 65 20 4e  or both may be N
18780 55 4c 4c 2e 0a 2a 2a 0a 2a 2a 20 45 78 70 72 2e  ULL..**.** Expr.
18790 78 2e 70 4c 69 73 74 20 69 73 20 61 20 6c 69 73  x.pList is a lis
187a0 74 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 69  t of arguments i
187b0 66 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e  f the expression
187c0 20 69 73 20 61 6e 20 53 51 4c 20 66 75 6e 63 74   is an SQL funct
187d0 69 6f 6e 2c 0a 2a 2a 20 61 20 43 41 53 45 20 65  ion,.** a CASE e
187e0 78 70 72 65 73 73 69 6f 6e 20 6f 72 20 61 6e 20  xpression or an 
187f0 49 4e 20 65 78 70 72 65 73 73 69 6f 6e 20 6f 66  IN expression of
18800 20 74 68 65 20 66 6f 72 6d 20 22 3c 6c 68 73 3e   the form "<lhs>
18810 20 49 4e 20 28 3c 79 3e 2c 20 3c 7a 3e 2e 2e 2e   IN (<y>, <z>...
18820 29 22 2e 0a 2a 2a 20 45 78 70 72 2e 78 2e 70 53  )"..** Expr.x.pS
18830 65 6c 65 63 74 20 69 73 20 75 73 65 64 20 69 66  elect is used if
18840 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20   the expression 
18850 69 73 20 61 20 73 75 62 2d 73 65 6c 65 63 74 20  is a sub-select 
18860 6f 72 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e  or an expression
18870 20 6f 66 0a 2a 2a 20 74 68 65 20 66 6f 72 6d 20   of.** the form 
18880 22 3c 6c 68 73 3e 20 49 4e 20 28 53 45 4c 45 43  "<lhs> IN (SELEC
18890 54 20 2e 2e 2e 29 22 2e 20 49 66 20 74 68 65 20  T ...)". If the 
188a0 45 50 5f 78 49 73 53 65 6c 65 63 74 20 62 69 74  EP_xIsSelect bit
188b0 20 69 73 20 73 65 74 20 69 6e 20 74 68 65 0a 2a   is set in the.*
188c0 2a 20 45 78 70 72 2e 66 6c 61 67 73 20 6d 61 73  * Expr.flags mas
188d0 6b 2c 20 74 68 65 6e 20 45 78 70 72 2e 78 2e 70  k, then Expr.x.p
188e0 53 65 6c 65 63 74 20 69 73 20 76 61 6c 69 64 2e  Select is valid.
188f0 20 4f 74 68 65 72 77 69 73 65 2c 20 45 78 70 72   Otherwise, Expr
18900 2e 78 2e 70 4c 69 73 74 20 69 73 0a 2a 2a 20 76  .x.pList is.** v
18910 61 6c 69 64 2e 0a 2a 2a 0a 2a 2a 20 41 6e 20 65  alid..**.** An e
18920 78 70 72 65 73 73 69 6f 6e 20 6f 66 20 74 68 65  xpression of the
18930 20 66 6f 72 6d 20 49 44 20 6f 72 20 49 44 2e 49   form ID or ID.I
18940 44 20 72 65 66 65 72 73 20 74 6f 20 61 20 63 6f  D refers to a co
18950 6c 75 6d 6e 20 69 6e 20 61 20 74 61 62 6c 65 2e  lumn in a table.
18960 0a 2a 2a 20 46 6f 72 20 73 75 63 68 20 65 78 70  .** For such exp
18970 72 65 73 73 69 6f 6e 73 2c 20 45 78 70 72 2e 6f  ressions, Expr.o
18980 70 20 69 73 20 73 65 74 20 74 6f 20 54 4b 5f 43  p is set to TK_C
18990 4f 4c 55 4d 4e 20 61 6e 64 20 45 78 70 72 2e 69  OLUMN and Expr.i
189a0 54 61 62 6c 65 20 69 73 0a 2a 2a 20 74 68 65 20  Table is.** the 
189b0 69 6e 74 65 67 65 72 20 63 75 72 73 6f 72 20 6e  integer cursor n
189c0 75 6d 62 65 72 20 6f 66 20 61 20 56 44 42 45 20  umber of a VDBE 
189d0 63 75 72 73 6f 72 20 70 6f 69 6e 74 69 6e 67 20  cursor pointing 
189e0 74 6f 20 74 68 61 74 20 74 61 62 6c 65 20 61 6e  to that table an
189f0 64 0a 2a 2a 20 45 78 70 72 2e 69 43 6f 6c 75 6d  d.** Expr.iColum
18a00 6e 20 69 73 20 74 68 65 20 63 6f 6c 75 6d 6e 20  n is the column 
18a10 6e 75 6d 62 65 72 20 66 6f 72 20 74 68 65 20 73  number for the s
18a20 70 65 63 69 66 69 63 20 63 6f 6c 75 6d 6e 2e 20  pecific column. 
18a30 20 49 66 20 74 68 65 0a 2a 2a 20 65 78 70 72 65   If the.** expre
18a40 73 73 69 6f 6e 20 69 73 20 75 73 65 64 20 61 73  ssion is used as
18a50 20 61 20 72 65 73 75 6c 74 20 69 6e 20 61 6e 20   a result in an 
18a60 61 67 67 72 65 67 61 74 65 20 53 45 4c 45 43 54  aggregate SELECT
18a70 2c 20 74 68 65 6e 20 74 68 65 0a 2a 2a 20 76 61  , then the.** va
18a80 6c 75 65 20 69 73 20 61 6c 73 6f 20 73 74 6f 72  lue is also stor
18a90 65 64 20 69 6e 20 74 68 65 20 45 78 70 72 2e 69  ed in the Expr.i
18aa0 41 67 67 20 63 6f 6c 75 6d 6e 20 69 6e 20 74 68  Agg column in th
18ab0 65 20 61 67 67 72 65 67 61 74 65 20 73 6f 20 74  e aggregate so t
18ac0 68 61 74 0a 2a 2a 20 69 74 20 63 61 6e 20 62 65  hat.** it can be
18ad0 20 61 63 63 65 73 73 65 64 20 61 66 74 65 72 20   accessed after 
18ae0 61 6c 6c 20 61 67 67 72 65 67 61 74 65 73 20 61  all aggregates a
18af0 72 65 20 63 6f 6d 70 75 74 65 64 2e 0a 2a 2a 0a  re computed..**.
18b00 2a 2a 20 49 66 20 74 68 65 20 65 78 70 72 65 73  ** If the expres
18b10 73 69 6f 6e 20 69 73 20 61 6e 20 75 6e 62 6f 75  sion is an unbou
18b20 6e 64 20 76 61 72 69 61 62 6c 65 20 6d 61 72 6b  nd variable mark
18b30 65 72 20 28 61 20 71 75 65 73 74 69 6f 6e 20 6d  er (a question m
18b40 61 72 6b 0a 2a 2a 20 63 68 61 72 61 63 74 65 72  ark.** character
18b50 20 27 3f 27 20 69 6e 20 74 68 65 20 6f 72 69 67   '?' in the orig
18b60 69 6e 61 6c 20 53 51 4c 29 20 74 68 65 6e 20 74  inal SQL) then t
18b70 68 65 20 45 78 70 72 2e 69 54 61 62 6c 65 20 68  he Expr.iTable h
18b80 6f 6c 64 73 20 74 68 65 20 69 6e 64 65 78 0a 2a  olds the index.*
18b90 2a 20 6e 75 6d 62 65 72 20 66 6f 72 20 74 68 61  * number for tha
18ba0 74 20 76 61 72 69 61 62 6c 65 2e 0a 2a 2a 0a 2a  t variable..**.*
18bb0 2a 20 49 66 20 74 68 65 20 65 78 70 72 65 73 73  * If the express
18bc0 69 6f 6e 20 69 73 20 61 20 73 75 62 71 75 65 72  ion is a subquer
18bd0 79 20 74 68 65 6e 20 45 78 70 72 2e 69 43 6f 6c  y then Expr.iCol
18be0 75 6d 6e 20 68 6f 6c 64 73 20 61 6e 20 69 6e 74  umn holds an int
18bf0 65 67 65 72 0a 2a 2a 20 72 65 67 69 73 74 65 72  eger.** register
18c00 20 6e 75 6d 62 65 72 20 63 6f 6e 74 61 69 6e 69   number containi
18c10 6e 67 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66  ng the result of
18c20 20 74 68 65 20 73 75 62 71 75 65 72 79 2e 20 20   the subquery.  
18c30 49 66 20 74 68 65 0a 2a 2a 20 73 75 62 71 75 65  If the.** subque
18c40 72 79 20 67 69 76 65 73 20 61 20 63 6f 6e 73 74  ry gives a const
18c50 61 6e 74 20 72 65 73 75 6c 74 2c 20 74 68 65 6e  ant result, then
18c60 20 69 54 61 62 6c 65 20 69 73 20 2d 31 2e 20 20   iTable is -1.  
18c70 49 66 20 74 68 65 20 73 75 62 71 75 65 72 79 0a  If the subquery.
18c80 2a 2a 20 67 69 76 65 73 20 61 20 64 69 66 66 65  ** gives a diffe
18c90 72 65 6e 74 20 61 6e 73 77 65 72 20 61 74 20 64  rent answer at d
18ca0 69 66 66 65 72 65 6e 74 20 74 69 6d 65 73 20 64  ifferent times d
18cb0 75 72 69 6e 67 20 73 74 61 74 65 6d 65 6e 74 20  uring statement 
18cc0 70 72 6f 63 65 73 73 69 6e 67 0a 2a 2a 20 74 68  processing.** th
18cd0 65 6e 20 69 54 61 62 6c 65 20 69 73 20 74 68 65  en iTable is the
18ce0 20 61 64 64 72 65 73 73 20 6f 66 20 61 20 73 75   address of a su
18cf0 62 72 6f 75 74 69 6e 65 20 74 68 61 74 20 63 6f  broutine that co
18d00 6d 70 75 74 65 73 20 74 68 65 20 73 75 62 71 75  mputes the subqu
18d10 65 72 79 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68  ery..**.** If th
18d20 65 20 45 78 70 72 20 69 73 20 6f 66 20 74 79 70  e Expr is of typ
18d30 65 20 4f 50 5f 43 6f 6c 75 6d 6e 2c 20 61 6e 64  e OP_Column, and
18d40 20 74 68 65 20 74 61 62 6c 65 20 69 74 20 69 73   the table it is
18d50 20 73 65 6c 65 63 74 69 6e 67 20 66 72 6f 6d 0a   selecting from.
18d60 2a 2a 20 69 73 20 61 20 64 69 73 6b 20 74 61 62  ** is a disk tab
18d70 6c 65 20 6f 72 20 74 68 65 20 22 6f 6c 64 2e 2a  le or the "old.*
18d80 22 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 2c 20  " pseudo-table, 
18d90 74 68 65 6e 20 70 54 61 62 20 70 6f 69 6e 74 73  then pTab points
18da0 20 74 6f 20 74 68 65 0a 2a 2a 20 63 6f 72 72 65   to the.** corre
18db0 73 70 6f 6e 64 69 6e 67 20 74 61 62 6c 65 20 64  sponding table d
18dc0 65 66 69 6e 69 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a  efinition..**.**
18dd0 20 41 4c 4c 4f 43 41 54 49 4f 4e 20 4e 4f 54 45   ALLOCATION NOTE
18de0 53 3a 0a 2a 2a 0a 2a 2a 20 45 78 70 72 20 6f 62  S:.**.** Expr ob
18df0 6a 65 63 74 73 20 63 61 6e 20 75 73 65 20 61 20  jects can use a 
18e00 6c 6f 74 20 6f 66 20 6d 65 6d 6f 72 79 20 73 70  lot of memory sp
18e10 61 63 65 20 69 6e 20 64 61 74 61 62 61 73 65 20  ace in database 
18e20 73 63 68 65 6d 61 2e 20 20 54 6f 0a 2a 2a 20 68  schema.  To.** h
18e30 65 6c 70 20 72 65 64 75 63 65 20 6d 65 6d 6f 72  elp reduce memor
18e40 79 20 72 65 71 75 69 72 65 6d 65 6e 74 73 2c 20  y requirements, 
18e50 73 6f 6d 65 74 69 6d 65 73 20 61 6e 20 45 78 70  sometimes an Exp
18e60 72 20 6f 62 6a 65 63 74 20 77 69 6c 6c 20 62 65  r object will be
18e70 0a 2a 2a 20 74 72 75 6e 63 61 74 65 64 2e 20 20  .** truncated.  
18e80 41 6e 64 20 74 6f 20 72 65 64 75 63 65 20 74 68  And to reduce th
18e90 65 20 6e 75 6d 62 65 72 20 6f 66 20 6d 65 6d 6f  e number of memo
18ea0 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 2c 20  ry allocations, 
18eb0 73 6f 6d 65 74 69 6d 65 73 0a 2a 2a 20 74 77 6f  sometimes.** two
18ec0 20 6f 72 20 6d 6f 72 65 20 45 78 70 72 20 6f 62   or more Expr ob
18ed0 6a 65 63 74 73 20 77 69 6c 6c 20 62 65 20 73 74  jects will be st
18ee0 6f 72 65 64 20 69 6e 20 61 20 73 69 6e 67 6c 65  ored in a single
18ef0 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69   memory allocati
18f00 6f 6e 2c 0a 2a 2a 20 74 6f 67 65 74 68 65 72 20  on,.** together 
18f10 77 69 74 68 20 45 78 70 72 2e 7a 54 6f 6b 65 6e  with Expr.zToken
18f20 20 73 74 72 69 6e 67 73 2e 0a 2a 2a 0a 2a 2a 20   strings..**.** 
18f30 49 66 20 74 68 65 20 45 50 5f 52 65 64 75 63 65  If the EP_Reduce
18f40 64 20 61 6e 64 20 45 50 5f 54 6f 6b 65 6e 4f 6e  d and EP_TokenOn
18f50 6c 79 20 66 6c 61 67 73 20 61 72 65 20 73 65 74  ly flags are set
18f60 20 77 68 65 6e 0a 2a 2a 20 61 6e 20 45 78 70 72   when.** an Expr
18f70 20 6f 62 6a 65 63 74 20 69 73 20 74 72 75 6e 63   object is trunc
18f80 61 74 65 64 2e 20 20 57 68 65 6e 20 45 50 5f 52  ated.  When EP_R
18f90 65 64 75 63 65 64 20 69 73 20 73 65 74 2c 20 74  educed is set, t
18fa0 68 65 6e 20 61 6c 6c 0a 2a 2a 20 74 68 65 20 63  hen all.** the c
18fb0 68 69 6c 64 20 45 78 70 72 20 6f 62 6a 65 63 74  hild Expr object
18fc0 73 20 69 6e 20 74 68 65 20 45 78 70 72 2e 70 4c  s in the Expr.pL
18fd0 65 66 74 20 61 6e 64 20 45 78 70 72 2e 70 52 69  eft and Expr.pRi
18fe0 67 68 74 20 73 75 62 74 72 65 65 73 0a 2a 2a 20  ght subtrees.** 
18ff0 61 72 65 20 63 6f 6e 74 61 69 6e 65 64 20 77 69  are contained wi
19000 74 68 69 6e 20 74 68 65 20 73 61 6d 65 20 6d 65  thin the same me
19010 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 2e  mory allocation.
19020 20 20 4e 6f 74 65 2c 20 68 6f 77 65 76 65 72 2c    Note, however,
19030 20 74 68 61 74 0a 2a 2a 20 74 68 65 20 73 75 62   that.** the sub
19040 74 72 65 65 73 20 69 6e 20 45 78 70 72 2e 78 2e  trees in Expr.x.
19050 70 4c 69 73 74 20 6f 72 20 45 78 70 72 2e 78 2e  pList or Expr.x.
19060 70 53 65 6c 65 63 74 20 61 72 65 20 61 6c 77 61  pSelect are alwa
19070 79 73 20 73 65 70 61 72 61 74 65 6c 79 0a 2a 2a  ys separately.**
19080 20 61 6c 6c 6f 63 61 74 65 64 2c 20 72 65 67 61   allocated, rega
19090 72 64 6c 65 73 73 20 6f 66 20 77 68 65 74 68 65  rdless of whethe
190a0 72 20 6f 72 20 6e 6f 74 20 45 50 5f 52 65 64 75  r or not EP_Redu
190b0 63 65 64 20 69 73 20 73 65 74 2e 0a 2a 2f 0a 73  ced is set..*/.s
190c0 74 72 75 63 74 20 45 78 70 72 20 7b 0a 20 20 75  truct Expr {.  u
190d0 38 20 6f 70 3b 20 20 20 20 20 20 20 20 20 20 20  8 op;           
190e0 20 20 20 20 20 20 2f 2a 20 4f 70 65 72 61 74 69        /* Operati
190f0 6f 6e 20 70 65 72 66 6f 72 6d 65 64 20 62 79 20  on performed by 
19100 74 68 69 73 20 6e 6f 64 65 20 2a 2f 0a 20 20 63  this node */.  c
19110 68 61 72 20 61 66 66 69 6e 69 74 79 3b 20 20 20  har affinity;   
19120 20 20 20 20 20 20 2f 2a 20 54 68 65 20 61 66 66        /* The aff
19130 69 6e 69 74 79 20 6f 66 20 74 68 65 20 63 6f 6c  inity of the col
19140 75 6d 6e 20 6f 72 20 30 20 69 66 20 6e 6f 74 20  umn or 0 if not 
19150 61 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 75 33  a column */.  u3
19160 32 20 66 6c 61 67 73 3b 20 20 20 20 20 20 20 20  2 flags;        
19170 20 20 20 20 20 2f 2a 20 56 61 72 69 6f 75 73 20       /* Various 
19180 66 6c 61 67 73 2e 20 20 45 50 5f 2a 20 53 65 65  flags.  EP_* See
19190 20 62 65 6c 6f 77 20 2a 2f 0a 20 20 75 6e 69 6f   below */.  unio
191a0 6e 20 7b 0a 20 20 20 20 63 68 61 72 20 2a 7a 54  n {.    char *zT
191b0 6f 6b 65 6e 3b 20 20 20 20 20 20 20 20 20 20 2f  oken;          /
191c0 2a 20 54 6f 6b 65 6e 20 76 61 6c 75 65 2e 20 5a  * Token value. Z
191d0 65 72 6f 20 74 65 72 6d 69 6e 61 74 65 64 20 61  ero terminated a
191e0 6e 64 20 64 65 71 75 6f 74 65 64 20 2a 2f 0a 20  nd dequoted */. 
191f0 20 20 20 69 6e 74 20 69 56 61 6c 75 65 3b 20 20     int iValue;  
19200 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 6f 6e            /* Non
19210 2d 6e 65 67 61 74 69 76 65 20 69 6e 74 65 67 65  -negative intege
19220 72 20 76 61 6c 75 65 20 69 66 20 45 50 5f 49 6e  r value if EP_In
19230 74 56 61 6c 75 65 20 2a 2f 0a 20 20 7d 20 75 3b  tValue */.  } u;
19240 0a 0a 20 20 2f 2a 20 49 66 20 74 68 65 20 45 50  ..  /* If the EP
19250 5f 54 6f 6b 65 6e 4f 6e 6c 79 20 66 6c 61 67 20  _TokenOnly flag 
19260 69 73 20 73 65 74 20 69 6e 20 74 68 65 20 45 78  is set in the Ex
19270 70 72 2e 66 6c 61 67 73 20 6d 61 73 6b 2c 20 74  pr.flags mask, t
19280 68 65 6e 20 6e 6f 0a 20 20 2a 2a 20 73 70 61 63  hen no.  ** spac
19290 65 20 69 73 20 61 6c 6c 6f 63 61 74 65 64 20 66  e is allocated f
192a0 6f 72 20 74 68 65 20 66 69 65 6c 64 73 20 62 65  or the fields be
192b0 6c 6f 77 20 74 68 69 73 20 70 6f 69 6e 74 2e 20  low this point. 
192c0 41 6e 20 61 74 74 65 6d 70 74 20 74 6f 0a 20 20  An attempt to.  
192d0 2a 2a 20 61 63 63 65 73 73 20 74 68 65 6d 20 77  ** access them w
192e0 69 6c 6c 20 72 65 73 75 6c 74 20 69 6e 20 61 20  ill result in a 
192f0 73 65 67 66 61 75 6c 74 20 6f 72 20 6d 61 6c 66  segfault or malf
19300 75 6e 63 74 69 6f 6e 2e 0a 20 20 2a 2a 2a 2a 2a  unction..  *****
19310 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
19320 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
19330 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
19340 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
19350 2f 0a 0a 20 20 45 78 70 72 20 2a 70 4c 65 66 74  /..  Expr *pLeft
19360 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c  ;           /* L
19370 65 66 74 20 73 75 62 6e 6f 64 65 20 2a 2f 0a 20  eft subnode */. 
19380 20 45 78 70 72 20 2a 70 52 69 67 68 74 3b 20 20   Expr *pRight;  
19390 20 20 20 20 20 20 20 20 2f 2a 20 52 69 67 68 74          /* Right
193a0 20 73 75 62 6e 6f 64 65 20 2a 2f 0a 20 20 75 6e   subnode */.  un
193b0 69 6f 6e 20 7b 0a 20 20 20 20 45 78 70 72 4c 69  ion {.    ExprLi
193c0 73 74 20 2a 70 4c 69 73 74 3b 20 20 20 20 20 2f  st *pList;     /
193d0 2a 20 6f 70 20 3d 20 49 4e 2c 20 45 58 49 53 54  * op = IN, EXIST
193e0 53 2c 20 53 45 4c 45 43 54 2c 20 43 41 53 45 2c  S, SELECT, CASE,
193f0 20 46 55 4e 43 54 49 4f 4e 2c 20 42 45 54 57 45   FUNCTION, BETWE
19400 45 4e 20 2a 2f 0a 20 20 20 20 53 65 6c 65 63 74  EN */.    Select
19410 20 2a 70 53 65 6c 65 63 74 3b 20 20 20 20 20 2f   *pSelect;     /
19420 2a 20 45 50 5f 78 49 73 53 65 6c 65 63 74 20 61  * EP_xIsSelect a
19430 6e 64 20 6f 70 20 3d 20 49 4e 2c 20 45 58 49 53  nd op = IN, EXIS
19440 54 53 2c 20 53 45 4c 45 43 54 20 2a 2f 0a 20 20  TS, SELECT */.  
19450 7d 20 78 3b 0a 0a 20 20 2f 2a 20 49 66 20 74 68  } x;..  /* If th
19460 65 20 45 50 5f 52 65 64 75 63 65 64 20 66 6c 61  e EP_Reduced fla
19470 67 20 69 73 20 73 65 74 20 69 6e 20 74 68 65 20  g is set in the 
19480 45 78 70 72 2e 66 6c 61 67 73 20 6d 61 73 6b 2c  Expr.flags mask,
19490 20 74 68 65 6e 20 6e 6f 0a 20 20 2a 2a 20 73 70   then no.  ** sp
194a0 61 63 65 20 69 73 20 61 6c 6c 6f 63 61 74 65 64  ace is allocated
194b0 20 66 6f 72 20 74 68 65 20 66 69 65 6c 64 73 20   for the fields 
194c0 62 65 6c 6f 77 20 74 68 69 73 20 70 6f 69 6e 74  below this point
194d0 2e 20 41 6e 20 61 74 74 65 6d 70 74 20 74 6f 0a  . An attempt to.
194e0 20 20 2a 2a 20 61 63 63 65 73 73 20 74 68 65 6d    ** access them
194f0 20 77 69 6c 6c 20 72 65 73 75 6c 74 20 69 6e 20   will result in 
19500 61 20 73 65 67 66 61 75 6c 74 20 6f 72 20 6d 61  a segfault or ma
19510 6c 66 75 6e 63 74 69 6f 6e 2e 0a 20 20 2a 2a 2a  lfunction..  ***
19520 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
19530 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
19540 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
19550 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
19560 2a 2a 2f 0a 0a 23 69 66 20 53 51 4c 49 54 45 5f  **/..#if SQLITE_
19570 4d 41 58 5f 45 58 50 52 5f 44 45 50 54 48 3e 30  MAX_EXPR_DEPTH>0
19580 0a 20 20 69 6e 74 20 6e 48 65 69 67 68 74 3b 20  .  int nHeight; 
19590 20 20 20 20 20 20 20 20 20 20 2f 2a 20 48 65 69            /* Hei
195a0 67 68 74 20 6f 66 20 74 68 65 20 74 72 65 65 20  ght of the tree 
195b0 68 65 61 64 65 64 20 62 79 20 74 68 69 73 20 6e  headed by this n
195c0 6f 64 65 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20  ode */.#endif.  
195d0 69 6e 74 20 69 54 61 62 6c 65 3b 20 20 20 20 20  int iTable;     
195e0 20 20 20 20 20 20 20 2f 2a 20 54 4b 5f 43 4f 4c         /* TK_COL
195f0 55 4d 4e 3a 20 63 75 72 73 6f 72 20 6e 75 6d 62  UMN: cursor numb
19600 65 72 20 6f 66 20 74 61 62 6c 65 20 68 6f 6c 64  er of table hold
19610 69 6e 67 20 63 6f 6c 75 6d 6e 0a 20 20 20 20 20  ing column.     
19620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19630 20 20 20 20 2a 2a 20 54 4b 5f 52 45 47 49 53 54      ** TK_REGIST
19640 45 52 3a 20 72 65 67 69 73 74 65 72 20 6e 75 6d  ER: register num
19650 62 65 72 0a 20 20 20 20 20 20 20 20 20 20 20 20  ber.            
19660 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20               ** 
19670 54 4b 5f 54 52 49 47 47 45 52 3a 20 31 20 2d 3e  TK_TRIGGER: 1 ->
19680 20 6e 65 77 2c 20 30 20 2d 3e 20 6f 6c 64 0a 20   new, 0 -> old. 
19690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
196a0 20 20 20 20 20 20 20 20 2a 2a 20 45 50 5f 55 6e          ** EP_Un
196b0 6c 69 6b 65 6c 79 3a 20 20 31 33 34 32 31 37 37  likely:  1342177
196c0 32 38 20 74 69 6d 65 73 20 6c 69 6b 65 6c 69 68  28 times likelih
196d0 6f 6f 64 0a 20 20 20 20 20 20 20 20 20 20 20 20  ood.            
196e0 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20               ** 
196f0 54 4b 5f 53 45 4c 45 43 54 3a 20 31 73 74 20 72  TK_SELECT: 1st r
19700 65 67 69 73 74 65 72 20 6f 66 20 72 65 73 75 6c  egister of resul
19710 74 20 76 65 63 74 6f 72 20 2a 2f 0a 20 20 79 6e  t vector */.  yn
19720 56 61 72 20 69 43 6f 6c 75 6d 6e 3b 20 20 20 20  Var iColumn;    
19730 20 20 20 20 20 2f 2a 20 54 4b 5f 43 4f 4c 55 4d       /* TK_COLUM
19740 4e 3a 20 63 6f 6c 75 6d 6e 20 69 6e 64 65 78 2e  N: column index.
19750 20 20 2d 31 20 66 6f 72 20 72 6f 77 69 64 2e 0a    -1 for rowid..
19760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19770 20 20 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f 56           ** TK_V
19780 41 52 49 41 42 4c 45 3a 20 76 61 72 69 61 62 6c  ARIABLE: variabl
19790 65 20 6e 75 6d 62 65 72 20 28 61 6c 77 61 79 73  e number (always
197a0 20 3e 3d 20 31 29 2e 0a 20 20 20 20 20 20 20 20   >= 1)..        
197b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
197c0 20 2a 2a 20 54 4b 5f 53 45 4c 45 43 54 5f 43 4f   ** TK_SELECT_CO
197d0 4c 55 4d 4e 3a 20 63 6f 6c 75 6d 6e 20 6f 66 20  LUMN: column of 
197e0 74 68 65 20 72 65 73 75 6c 74 20 76 65 63 74 6f  the result vecto
197f0 72 20 2a 2f 0a 20 20 69 31 36 20 69 41 67 67 3b  r */.  i16 iAgg;
19800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
19810 20 57 68 69 63 68 20 65 6e 74 72 79 20 69 6e 20   Which entry in 
19820 70 41 67 67 49 6e 66 6f 2d 3e 61 43 6f 6c 5b 5d  pAggInfo->aCol[]
19830 20 6f 72 20 2d 3e 61 46 75 6e 63 5b 5d 20 2a 2f   or ->aFunc[] */
19840 0a 20 20 69 31 36 20 69 52 69 67 68 74 4a 6f 69  .  i16 iRightJoi
19850 6e 54 61 62 6c 65 3b 20 20 20 2f 2a 20 49 66 20  nTable;   /* If 
19860 45 50 5f 46 72 6f 6d 4a 6f 69 6e 2c 20 74 68 65  EP_FromJoin, the
19870 20 72 69 67 68 74 20 74 61 62 6c 65 20 6f 66 20   right table of 
19880 74 68 65 20 6a 6f 69 6e 20 2a 2f 0a 20 20 75 38  the join */.  u8
19890 20 6f 70 32 3b 20 20 20 20 20 20 20 20 20 20 20   op2;           
198a0 20 20 20 20 20 2f 2a 20 54 4b 5f 52 45 47 49 53       /* TK_REGIS
198b0 54 45 52 3a 20 6f 72 69 67 69 6e 61 6c 20 76 61  TER: original va
198c0 6c 75 65 20 6f 66 20 45 78 70 72 2e 6f 70 0a 20  lue of Expr.op. 
198d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
198e0 20 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f 43 4f          ** TK_CO
198f0 4c 55 4d 4e 3a 20 74 68 65 20 76 61 6c 75 65 20  LUMN: the value 
19900 6f 66 20 70 35 20 66 6f 72 20 4f 50 5f 43 6f 6c  of p5 for OP_Col
19910 75 6d 6e 0a 20 20 20 20 20 20 20 20 20 20 20 20  umn.            
19920 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20               ** 
19930 54 4b 5f 41 47 47 5f 46 55 4e 43 54 49 4f 4e 3a  TK_AGG_FUNCTION:
19940 20 6e 65 73 74 69 6e 67 20 64 65 70 74 68 20 2a   nesting depth *
19950 2f 0a 20 20 41 67 67 49 6e 66 6f 20 2a 70 41 67  /.  AggInfo *pAg
19960 67 49 6e 66 6f 3b 20 20 20 20 20 2f 2a 20 55 73  gInfo;     /* Us
19970 65 64 20 62 79 20 54 4b 5f 41 47 47 5f 43 4f 4c  ed by TK_AGG_COL
19980 55 4d 4e 20 61 6e 64 20 54 4b 5f 41 47 47 5f 46  UMN and TK_AGG_F
19990 55 4e 43 54 49 4f 4e 20 2a 2f 0a 20 20 75 6e 69  UNCTION */.  uni
199a0 6f 6e 20 7b 0a 20 20 20 20 54 61 62 6c 65 20 2a  on {.    Table *
199b0 70 54 61 62 3b 20 20 20 20 20 20 20 20 20 20 20  pTab;           
199c0 2f 2a 20 54 4b 5f 43 4f 4c 55 4d 4e 3a 20 54 61  /* TK_COLUMN: Ta
199d0 62 6c 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20 63  ble containing c
199e0 6f 6c 75 6d 6e 2e 20 43 61 6e 20 62 65 20 4e 55  olumn. Can be NU
199f0 4c 4c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  LL.             
19a00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a                **
19a10 20 66 6f 72 20 61 20 63 6f 6c 75 6d 6e 20 6f 66   for a column of
19a20 20 61 6e 20 69 6e 64 65 78 20 6f 6e 20 61 6e 20   an index on an 
19a30 65 78 70 72 65 73 73 69 6f 6e 20 2a 2f 0a 20 20  expression */.  
19a40 20 20 57 69 6e 64 6f 77 20 2a 70 57 69 6e 3b 20    Window *pWin; 
19a50 20 20 20 20 20 20 20 20 20 2f 2a 20 54 4b 5f 46           /* TK_F
19a60 55 4e 43 54 49 4f 4e 3a 20 57 69 6e 64 6f 77 20  UNCTION: Window 
19a70 64 65 66 69 6e 69 74 69 6f 6e 20 66 6f 72 20 74  definition for t
19a80 68 65 20 66 75 6e 63 20 2a 2f 0a 20 20 7d 20 79  he func */.  } y
19a90 3b 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  ;.};../*.** The 
19aa0 66 6f 6c 6c 6f 77 69 6e 67 20 61 72 65 20 74 68  following are th
19ab0 65 20 6d 65 61 6e 69 6e 67 73 20 6f 66 20 62 69  e meanings of bi
19ac0 74 73 20 69 6e 20 74 68 65 20 45 78 70 72 2e 66  ts in the Expr.f
19ad0 6c 61 67 73 20 66 69 65 6c 64 2e 0a 2a 2f 0a 23  lags field..*/.#
19ae0 64 65 66 69 6e 65 20 45 50 5f 46 72 6f 6d 4a 6f  define EP_FromJo
19af0 69 6e 20 20 30 78 30 30 30 30 30 31 20 2f 2a 20  in  0x000001 /* 
19b00 4f 72 69 67 69 6e 61 74 65 73 20 69 6e 20 4f 4e  Originates in ON
19b10 2f 55 53 49 4e 47 20 63 6c 61 75 73 65 20 6f 66  /USING clause of
19b20 20 6f 75 74 65 72 20 6a 6f 69 6e 20 2a 2f 0a 23   outer join */.#
19b30 64 65 66 69 6e 65 20 45 50 5f 41 67 67 20 20 20  define EP_Agg   
19b40 20 20 20 20 30 78 30 30 30 30 30 32 20 2f 2a 20      0x000002 /* 
19b50 43 6f 6e 74 61 69 6e 73 20 6f 6e 65 20 6f 72 20  Contains one or 
19b60 6d 6f 72 65 20 61 67 67 72 65 67 61 74 65 20 66  more aggregate f
19b70 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a 23 64 65 66  unctions */.#def
19b80 69 6e 65 20 45 50 5f 48 61 73 46 75 6e 63 20 20  ine EP_HasFunc  
19b90 20 30 78 30 30 30 30 30 34 20 2f 2a 20 43 6f 6e   0x000004 /* Con
19ba0 74 61 69 6e 73 20 6f 6e 65 20 6f 72 20 6d 6f 72  tains one or mor
19bb0 65 20 66 75 6e 63 74 69 6f 6e 73 20 6f 66 20 61  e functions of a
19bc0 6e 79 20 6b 69 6e 64 20 2a 2f 0a 23 64 65 66 69  ny kind */.#defi
19bd0 6e 65 20 45 50 5f 46 69 78 65 64 43 6f 6c 20 20  ne EP_FixedCol  
19be0 30 78 30 30 30 30 30 38 20 2f 2a 20 54 4b 5f 43  0x000008 /* TK_C
19bf0 6f 6c 75 6d 6e 20 77 69 74 68 20 61 20 6b 6e 6f  olumn with a kno
19c00 77 6e 20 66 69 78 65 64 20 76 61 6c 75 65 20 2a  wn fixed value *
19c10 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 44 69 73  /.#define EP_Dis
19c20 74 69 6e 63 74 20 20 30 78 30 30 30 30 31 30 20  tinct  0x000010 
19c30 2f 2a 20 41 67 67 72 65 67 61 74 65 20 66 75 6e  /* Aggregate fun
19c40 63 74 69 6f 6e 20 77 69 74 68 20 44 49 53 54 49  ction with DISTI
19c50 4e 43 54 20 6b 65 79 77 6f 72 64 20 2a 2f 0a 23  NCT keyword */.#
19c60 64 65 66 69 6e 65 20 45 50 5f 56 61 72 53 65 6c  define EP_VarSel
19c70 65 63 74 20 30 78 30 30 30 30 32 30 20 2f 2a 20  ect 0x000020 /* 
19c80 70 53 65 6c 65 63 74 20 69 73 20 63 6f 72 72 65  pSelect is corre
19c90 6c 61 74 65 64 2c 20 6e 6f 74 20 63 6f 6e 73 74  lated, not const
19ca0 61 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45  ant */.#define E
19cb0 50 5f 44 62 6c 51 75 6f 74 65 64 20 30 78 30 30  P_DblQuoted 0x00
19cc0 30 30 34 30 20 2f 2a 20 74 6f 6b 65 6e 2e 7a 20  0040 /* token.z 
19cd0 77 61 73 20 6f 72 69 67 69 6e 61 6c 6c 79 20 69  was originally i
19ce0 6e 20 22 2e 2e 2e 22 20 2a 2f 0a 23 64 65 66 69  n "..." */.#defi
19cf0 6e 65 20 45 50 5f 49 6e 66 69 78 46 75 6e 63 20  ne EP_InfixFunc 
19d00 30 78 30 30 30 30 38 30 20 2f 2a 20 54 72 75 65  0x000080 /* True
19d10 20 66 6f 72 20 61 6e 20 69 6e 66 69 78 20 66 75   for an infix fu
19d20 6e 63 74 69 6f 6e 3a 20 4c 49 4b 45 2c 20 47 4c  nction: LIKE, GL
19d30 4f 42 2c 20 65 74 63 20 2a 2f 0a 23 64 65 66 69  OB, etc */.#defi
19d40 6e 65 20 45 50 5f 43 6f 6c 6c 61 74 65 20 20 20  ne EP_Collate   
19d50 30 78 30 30 30 31 30 30 20 2f 2a 20 54 72 65 65  0x000100 /* Tree
19d60 20 63 6f 6e 74 61 69 6e 73 20 61 20 54 4b 5f 43   contains a TK_C
19d70 4f 4c 4c 41 54 45 20 6f 70 65 72 61 74 6f 72 20  OLLATE operator 
19d80 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 47 65  */.#define EP_Ge
19d90 6e 65 72 69 63 20 20 20 30 78 30 30 30 32 30 30  neric   0x000200
19da0 20 2f 2a 20 49 67 6e 6f 72 65 20 43 4f 4c 4c 41   /* Ignore COLLA
19db0 54 45 20 6f 72 20 61 66 66 69 6e 69 74 79 20 6f  TE or affinity o
19dc0 6e 20 74 68 69 73 20 74 72 65 65 20 2a 2f 0a 23  n this tree */.#
19dd0 64 65 66 69 6e 65 20 45 50 5f 49 6e 74 56 61 6c  define EP_IntVal
19de0 75 65 20 20 30 78 30 30 30 34 30 30 20 2f 2a 20  ue  0x000400 /* 
19df0 49 6e 74 65 67 65 72 20 76 61 6c 75 65 20 63 6f  Integer value co
19e00 6e 74 61 69 6e 65 64 20 69 6e 20 75 2e 69 56 61  ntained in u.iVa
19e10 6c 75 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45  lue */.#define E
19e20 50 5f 78 49 73 53 65 6c 65 63 74 20 30 78 30 30  P_xIsSelect 0x00
19e30 30 38 30 30 20 2f 2a 20 78 2e 70 53 65 6c 65 63  0800 /* x.pSelec
19e40 74 20 69 73 20 76 61 6c 69 64 20 28 6f 74 68 65  t is valid (othe
19e50 72 77 69 73 65 20 78 2e 70 4c 69 73 74 20 69 73  rwise x.pList is
19e60 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  ) */.#define EP_
19e70 53 6b 69 70 20 20 20 20 20 20 30 78 30 30 31 30  Skip      0x0010
19e80 30 30 20 2f 2a 20 43 4f 4c 4c 41 54 45 2c 20 41  00 /* COLLATE, A
19e90 53 2c 20 6f 72 20 55 4e 4c 49 4b 45 4c 59 20 2a  S, or UNLIKELY *
19ea0 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 52 65 64  /.#define EP_Red
19eb0 75 63 65 64 20 20 20 30 78 30 30 32 30 30 30 20  uced   0x002000 
19ec0 2f 2a 20 45 78 70 72 20 73 74 72 75 63 74 20 45  /* Expr struct E
19ed0 58 50 52 5f 52 45 44 55 43 45 44 53 49 5a 45 20  XPR_REDUCEDSIZE 
19ee0 62 79 74 65 73 20 6f 6e 6c 79 20 2a 2f 0a 23 64  bytes only */.#d
19ef0 65 66 69 6e 65 20 45 50 5f 54 6f 6b 65 6e 4f 6e  efine EP_TokenOn
19f00 6c 79 20 30 78 30 30 34 30 30 30 20 2f 2a 20 45  ly 0x004000 /* E
19f10 78 70 72 20 73 74 72 75 63 74 20 45 58 50 52 5f  xpr struct EXPR_
19f20 54 4f 4b 45 4e 4f 4e 4c 59 53 49 5a 45 20 62 79  TOKENONLYSIZE by
19f30 74 65 73 20 6f 6e 6c 79 20 2a 2f 0a 23 64 65 66  tes only */.#def
19f40 69 6e 65 20 45 50 5f 53 74 61 74 69 63 20 20 20  ine EP_Static   
19f50 20 30 78 30 30 38 30 30 30 20 2f 2a 20 48 65 6c   0x008000 /* Hel
19f60 64 20 69 6e 20 6d 65 6d 6f 72 79 20 6e 6f 74 20  d in memory not 
19f70 6f 62 74 61 69 6e 65 64 20 66 72 6f 6d 20 6d 61  obtained from ma
19f80 6c 6c 6f 63 28 29 20 2a 2f 0a 23 64 65 66 69 6e  lloc() */.#defin
19f90 65 20 45 50 5f 4d 65 6d 54 6f 6b 65 6e 20 20 30  e EP_MemToken  0
19fa0 78 30 31 30 30 30 30 20 2f 2a 20 4e 65 65 64 20  x010000 /* Need 
19fb0 74 6f 20 73 71 6c 69 74 65 33 44 62 46 72 65 65  to sqlite3DbFree
19fc0 28 29 20 45 78 70 72 2e 7a 54 6f 6b 65 6e 20 2a  () Expr.zToken *
19fd0 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 4e 6f 52  /.#define EP_NoR
19fe0 65 64 75 63 65 20 20 30 78 30 32 30 30 30 30 20  educe  0x020000 
19ff0 2f 2a 20 43 61 6e 6e 6f 74 20 45 58 50 52 44 55  /* Cannot EXPRDU
1a000 50 5f 52 45 44 55 43 45 20 74 68 69 73 20 45 78  P_REDUCE this Ex
1a010 70 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  pr */.#define EP
1a020 5f 55 6e 6c 69 6b 65 6c 79 20 20 30 78 30 34 30  _Unlikely  0x040
1a030 30 30 30 20 2f 2a 20 75 6e 6c 69 6b 65 6c 79 28  000 /* unlikely(
1a040 29 20 6f 72 20 6c 69 6b 65 6c 69 68 6f 6f 64 28  ) or likelihood(
1a050 29 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64  ) function */.#d
1a060 65 66 69 6e 65 20 45 50 5f 43 6f 6e 73 74 46 75  efine EP_ConstFu
1a070 6e 63 20 30 78 30 38 30 30 30 30 20 2f 2a 20 41  nc 0x080000 /* A
1a080 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e   SQLITE_FUNC_CON
1a090 53 54 41 4e 54 20 6f 72 20 5f 53 4c 4f 43 48 4e  STANT or _SLOCHN
1a0a0 47 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64  G function */.#d
1a0b0 65 66 69 6e 65 20 45 50 5f 43 61 6e 42 65 4e 75  efine EP_CanBeNu
1a0c0 6c 6c 20 30 78 31 30 30 30 30 30 20 2f 2a 20 43  ll 0x100000 /* C
1a0d0 61 6e 20 62 65 20 6e 75 6c 6c 20 64 65 73 70 69  an be null despi
1a0e0 74 65 20 4e 4f 54 20 4e 55 4c 4c 20 63 6f 6e 73  te NOT NULL cons
1a0f0 74 72 61 69 6e 74 20 2a 2f 0a 23 64 65 66 69 6e  traint */.#defin
1a100 65 20 45 50 5f 53 75 62 71 75 65 72 79 20 20 30  e EP_Subquery  0
1a110 78 32 30 30 30 30 30 20 2f 2a 20 54 72 65 65 20  x200000 /* Tree 
1a120 63 6f 6e 74 61 69 6e 73 20 61 20 54 4b 5f 53 45  contains a TK_SE
1a130 4c 45 43 54 20 6f 70 65 72 61 74 6f 72 20 2a 2f  LECT operator */
1a140 0a 23 64 65 66 69 6e 65 20 45 50 5f 41 6c 69 61  .#define EP_Alia
1a150 73 20 20 20 20 20 30 78 34 30 30 30 30 30 20 2f  s     0x400000 /
1a160 2a 20 49 73 20 61 6e 20 61 6c 69 61 73 20 66 6f  * Is an alias fo
1a170 72 20 61 20 72 65 73 75 6c 74 20 73 65 74 20 63  r a result set c
1a180 6f 6c 75 6d 6e 20 2a 2f 0a 23 64 65 66 69 6e 65  olumn */.#define
1a190 20 45 50 5f 4c 65 61 66 20 20 20 20 20 20 30 78   EP_Leaf      0x
1a1a0 38 30 30 30 30 30 20 2f 2a 20 45 78 70 72 2e 70  800000 /* Expr.p
1a1b0 4c 65 66 74 2c 20 2e 70 52 69 67 68 74 2c 20 2e  Left, .pRight, .
1a1c0 75 2e 70 53 65 6c 65 63 74 20 61 6c 6c 20 4e 55  u.pSelect all NU
1a1d0 4c 4c 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  LL */.#define EP
1a1e0 5f 57 69 6e 46 75 6e 63 20 20 30 78 31 30 30 30  _WinFunc  0x1000
1a1f0 30 30 30 20 2f 2a 20 54 4b 5f 46 55 4e 43 54 49  000 /* TK_FUNCTI
1a200 4f 4e 20 77 69 74 68 20 45 78 70 72 2e 79 2e 70  ON with Expr.y.p
1a210 57 69 6e 20 73 65 74 20 2a 2f 0a 0a 2f 2a 0a 2a  Win set */../*.*
1a220 2a 20 54 68 65 20 45 50 5f 50 72 6f 70 61 67 61  * The EP_Propaga
1a230 74 65 20 6d 61 73 6b 20 69 73 20 61 20 73 65 74  te mask is a set
1a240 20 6f 66 20 70 72 6f 70 65 72 74 69 65 73 20 74   of properties t
1a250 68 61 74 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c  hat automaticall
1a260 79 20 70 72 6f 70 61 67 61 74 65 0a 2a 2a 20 75  y propagate.** u
1a270 70 77 61 72 64 73 20 69 6e 74 6f 20 70 61 72 65  pwards into pare
1a280 6e 74 20 6e 6f 64 65 73 2e 0a 2a 2f 0a 23 64 65  nt nodes..*/.#de
1a290 66 69 6e 65 20 45 50 5f 50 72 6f 70 61 67 61 74  fine EP_Propagat
1a2a0 65 20 28 45 50 5f 43 6f 6c 6c 61 74 65 7c 45 50  e (EP_Collate|EP
1a2b0 5f 53 75 62 71 75 65 72 79 7c 45 50 5f 48 61 73  _Subquery|EP_Has
1a2c0 46 75 6e 63 29 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  Func)../*.** The
1a2d0 73 65 20 6d 61 63 72 6f 73 20 63 61 6e 20 62 65  se macros can be
1a2e0 20 75 73 65 64 20 74 6f 20 74 65 73 74 2c 20 73   used to test, s
1a2f0 65 74 2c 20 6f 72 20 63 6c 65 61 72 20 62 69 74  et, or clear bit
1a300 73 20 69 6e 20 74 68 65 0a 2a 2a 20 45 78 70 72  s in the.** Expr
1a310 2e 66 6c 61 67 73 20 66 69 65 6c 64 2e 0a 2a 2f  .flags field..*/
1a320 0a 23 64 65 66 69 6e 65 20 45 78 70 72 48 61 73  .#define ExprHas
1a330 50 72 6f 70 65 72 74 79 28 45 2c 50 29 20 20 20  Property(E,P)   
1a340 20 20 28 28 28 45 29 2d 3e 66 6c 61 67 73 26 28    (((E)->flags&(
1a350 50 29 29 21 3d 30 29 0a 23 64 65 66 69 6e 65 20  P))!=0).#define 
1a360 45 78 70 72 48 61 73 41 6c 6c 50 72 6f 70 65 72  ExprHasAllProper
1a370 74 79 28 45 2c 50 29 20 20 28 28 28 45 29 2d 3e  ty(E,P)  (((E)->
1a380 66 6c 61 67 73 26 28 50 29 29 3d 3d 28 50 29 29  flags&(P))==(P))
1a390 0a 23 64 65 66 69 6e 65 20 45 78 70 72 53 65 74  .#define ExprSet
1a3a0 50 72 6f 70 65 72 74 79 28 45 2c 50 29 20 20 20  Property(E,P)   
1a3b0 20 20 28 45 29 2d 3e 66 6c 61 67 73 7c 3d 28 50    (E)->flags|=(P
1a3c0 29 0a 23 64 65 66 69 6e 65 20 45 78 70 72 43 6c  ).#define ExprCl
1a3d0 65 61 72 50 72 6f 70 65 72 74 79 28 45 2c 50 29  earProperty(E,P)
1a3e0 20 20 20 28 45 29 2d 3e 66 6c 61 67 73 26 3d 7e     (E)->flags&=~
1a3f0 28 50 29 0a 0a 2f 2a 20 54 68 65 20 45 78 70 72  (P)../* The Expr
1a400 53 65 74 56 56 41 50 72 6f 70 65 72 74 79 28 29  SetVVAProperty()
1a410 20 6d 61 63 72 6f 20 69 73 20 75 73 65 64 20 66   macro is used f
1a420 6f 72 20 56 65 72 69 66 69 63 61 74 69 6f 6e 2c  or Verification,
1a430 20 56 61 6c 69 64 61 74 69 6f 6e 2c 0a 2a 2a 20   Validation,.** 
1a440 61 6e 64 20 41 63 63 72 65 64 69 74 61 74 69 6f  and Accreditatio
1a450 6e 20 6f 6e 6c 79 2e 20 20 49 74 20 77 6f 72 6b  n only.  It work
1a460 73 20 6c 69 6b 65 20 45 78 70 72 53 65 74 50 72  s like ExprSetPr
1a470 6f 70 65 72 74 79 28 29 20 64 75 72 69 6e 67 20  operty() during 
1a480 56 56 41 0a 2a 2a 20 70 72 6f 63 65 73 73 65 73  VVA.** processes
1a490 20 62 75 74 20 69 73 20 61 20 6e 6f 2d 6f 70 20   but is a no-op 
1a4a0 66 6f 72 20 64 65 6c 69 76 65 72 79 2e 0a 2a 2f  for delivery..*/
1a4b0 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44  .#ifdef SQLITE_D
1a4c0 45 42 55 47 0a 23 20 64 65 66 69 6e 65 20 45 78  EBUG.# define Ex
1a4d0 70 72 53 65 74 56 56 41 50 72 6f 70 65 72 74 79  prSetVVAProperty
1a4e0 28 45 2c 50 29 20 20 28 45 29 2d 3e 66 6c 61 67  (E,P)  (E)->flag
1a4f0 73 7c 3d 28 50 29 0a 23 65 6c 73 65 0a 23 20 64  s|=(P).#else.# d
1a500 65 66 69 6e 65 20 45 78 70 72 53 65 74 56 56 41  efine ExprSetVVA
1a510 50 72 6f 70 65 72 74 79 28 45 2c 50 29 0a 23 65  Property(E,P).#e
1a520 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 4d 61 63 72  ndif../*.** Macr
1a530 6f 73 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20  os to determine 
1a540 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 62 79  the number of by
1a550 74 65 73 20 72 65 71 75 69 72 65 64 20 62 79 20  tes required by 
1a560 61 20 6e 6f 72 6d 61 6c 20 45 78 70 72 0a 2a 2a  a normal Expr.**
1a570 20 73 74 72 75 63 74 2c 20 61 6e 20 45 78 70 72   struct, an Expr
1a580 20 73 74 72 75 63 74 20 77 69 74 68 20 74 68 65   struct with the
1a590 20 45 50 5f 52 65 64 75 63 65 64 20 66 6c 61 67   EP_Reduced flag
1a5a0 20 73 65 74 20 69 6e 20 45 78 70 72 2e 66 6c 61   set in Expr.fla
1a5b0 67 73 0a 2a 2a 20 61 6e 64 20 61 6e 20 45 78 70  gs.** and an Exp
1a5c0 72 20 73 74 72 75 63 74 20 77 69 74 68 20 74 68  r struct with th
1a5d0 65 20 45 50 5f 54 6f 6b 65 6e 4f 6e 6c 79 20 66  e EP_TokenOnly f
1a5e0 6c 61 67 20 73 65 74 2e 0a 2a 2f 0a 23 64 65 66  lag set..*/.#def
1a5f0 69 6e 65 20 45 58 50 52 5f 46 55 4c 4c 53 49 5a  ine EXPR_FULLSIZ
1a600 45 20 20 20 20 20 20 20 20 20 20 20 73 69 7a 65  E           size
1a610 6f 66 28 45 78 70 72 29 20 20 20 20 20 20 20 20  of(Expr)        
1a620 20 20 20 2f 2a 20 46 75 6c 6c 20 73 69 7a 65 20     /* Full size 
1a630 2a 2f 0a 23 64 65 66 69 6e 65 20 45 58 50 52 5f  */.#define EXPR_
1a640 52 45 44 55 43 45 44 53 49 5a 45 20 20 20 20 20  REDUCEDSIZE     
1a650 20 20 20 6f 66 66 73 65 74 6f 66 28 45 78 70 72     offsetof(Expr
1a660 2c 69 54 61 62 6c 65 29 20 20 2f 2a 20 43 6f 6d  ,iTable)  /* Com
1a670 6d 6f 6e 20 66 65 61 74 75 72 65 73 20 2a 2f 0a  mon features */.
1a680 23 64 65 66 69 6e 65 20 45 58 50 52 5f 54 4f 4b  #define EXPR_TOK
1a690 45 4e 4f 4e 4c 59 53 49 5a 45 20 20 20 20 20 20  ENONLYSIZE      
1a6a0 6f 66 66 73 65 74 6f 66 28 45 78 70 72 2c 70 4c  offsetof(Expr,pL
1a6b0 65 66 74 29 20 20 20 2f 2a 20 46 65 77 65 72 20  eft)   /* Fewer 
1a6c0 66 65 61 74 75 72 65 73 20 2a 2f 0a 0a 2f 2a 0a  features */../*.
1a6d0 2a 2a 20 46 6c 61 67 73 20 70 61 73 73 65 64 20  ** Flags passed 
1a6e0 74 6f 20 74 68 65 20 73 71 6c 69 74 65 33 45 78  to the sqlite3Ex
1a6f0 70 72 44 75 70 28 29 20 66 75 6e 63 74 69 6f 6e  prDup() function
1a700 2e 20 53 65 65 20 74 68 65 20 68 65 61 64 65 72  . See the header
1a710 20 63 6f 6d 6d 65 6e 74 0a 2a 2a 20 61 62 6f 76   comment.** abov
1a720 65 20 73 71 6c 69 74 65 33 45 78 70 72 44 75 70  e sqlite3ExprDup
1a730 28 29 20 66 6f 72 20 64 65 74 61 69 6c 73 2e 0a  () for details..
1a740 2a 2f 0a 23 64 65 66 69 6e 65 20 45 58 50 52 44  */.#define EXPRD
1a750 55 50 5f 52 45 44 55 43 45 20 20 20 20 20 20 20  UP_REDUCE       
1a760 20 20 30 78 30 30 30 31 20 20 2f 2a 20 55 73 65    0x0001  /* Use
1a770 64 20 72 65 64 75 63 65 64 2d 73 69 7a 65 20 45  d reduced-size E
1a780 78 70 72 20 6e 6f 64 65 73 20 2a 2f 0a 0a 2f 2a  xpr nodes */../*
1a790 0a 2a 2a 20 41 20 6c 69 73 74 20 6f 66 20 65 78  .** A list of ex
1a7a0 70 72 65 73 73 69 6f 6e 73 2e 20 20 45 61 63 68  pressions.  Each
1a7b0 20 65 78 70 72 65 73 73 69 6f 6e 20 6d 61 79 20   expression may 
1a7c0 6f 70 74 69 6f 6e 61 6c 6c 79 20 68 61 76 65 20  optionally have 
1a7d0 61 0a 2a 2a 20 6e 61 6d 65 2e 20 20 41 6e 20 65  a.** name.  An e
1a7e0 78 70 72 2f 6e 61 6d 65 20 63 6f 6d 62 69 6e 61  xpr/name combina
1a7f0 74 69 6f 6e 20 63 61 6e 20 62 65 20 75 73 65 64  tion can be used
1a800 20 69 6e 20 73 65 76 65 72 61 6c 20 77 61 79 73   in several ways
1a810 2c 20 73 75 63 68 0a 2a 2a 20 61 73 20 74 68 65  , such.** as the
1a820 20 6c 69 73 74 20 6f 66 20 22 65 78 70 72 20 41   list of "expr A
1a830 53 20 49 44 22 20 66 69 65 6c 64 73 20 66 6f 6c  S ID" fields fol
1a840 6c 6f 77 69 6e 67 20 61 20 22 53 45 4c 45 43 54  lowing a "SELECT
1a850 22 20 6f 72 20 69 6e 20 74 68 65 0a 2a 2a 20 6c  " or in the.** l
1a860 69 73 74 20 6f 66 20 22 49 44 20 3d 20 65 78 70  ist of "ID = exp
1a870 72 22 20 69 74 65 6d 73 20 69 6e 20 61 6e 20 55  r" items in an U
1a880 50 44 41 54 45 2e 20 20 41 20 6c 69 73 74 20 6f  PDATE.  A list o
1a890 66 20 65 78 70 72 65 73 73 69 6f 6e 73 20 63 61  f expressions ca
1a8a0 6e 0a 2a 2a 20 61 6c 73 6f 20 62 65 20 75 73 65  n.** also be use
1a8b0 64 20 61 73 20 74 68 65 20 61 72 67 75 6d 65 6e  d as the argumen
1a8c0 74 20 74 6f 20 61 20 66 75 6e 63 74 69 6f 6e 2c  t to a function,
1a8d0 20 69 6e 20 77 68 69 63 68 20 63 61 73 65 20 74   in which case t
1a8e0 68 65 20 61 2e 7a 4e 61 6d 65 0a 2a 2a 20 66 69  he a.zName.** fi
1a8f0 65 6c 64 20 69 73 20 6e 6f 74 20 75 73 65 64 2e  eld is not used.
1a900 0a 2a 2a 0a 2a 2a 20 42 79 20 64 65 66 61 75 6c  .**.** By defaul
1a910 74 20 74 68 65 20 45 78 70 72 2e 7a 53 70 61 6e  t the Expr.zSpan
1a920 20 66 69 65 6c 64 20 68 6f 6c 64 73 20 61 20 68   field holds a h
1a930 75 6d 61 6e 2d 72 65 61 64 61 62 6c 65 20 64 65  uman-readable de
1a940 73 63 72 69 70 74 69 6f 6e 20 6f 66 0a 2a 2a 20  scription of.** 
1a950 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 74  the expression t
1a960 68 61 74 20 69 73 20 75 73 65 64 20 69 6e 20 74  hat is used in t
1a970 68 65 20 67 65 6e 65 72 61 74 69 6f 6e 20 6f 66  he generation of
1a980 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 73 20   error messages 
1a990 61 6e 64 0a 2a 2a 20 63 6f 6c 75 6d 6e 20 6c 61  and.** column la
1a9a0 62 65 6c 73 2e 20 20 49 6e 20 74 68 69 73 20 63  bels.  In this c
1a9b0 61 73 65 2c 20 45 78 70 72 2e 7a 53 70 61 6e 20  ase, Expr.zSpan 
1a9c0 69 73 20 74 79 70 69 63 61 6c 6c 79 20 74 68 65  is typically the
1a9d0 20 74 65 78 74 20 6f 66 20 61 0a 2a 2a 20 63 6f   text of a.** co
1a9e0 6c 75 6d 6e 20 65 78 70 72 65 73 73 69 6f 6e 20  lumn expression 
1a9f0 61 73 20 69 74 20 65 78 69 73 74 73 20 69 6e 20  as it exists in 
1aa00 61 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  a SELECT stateme
1aa10 6e 74 2e 20 20 48 6f 77 65 76 65 72 2c 20 69 66  nt.  However, if
1aa20 0a 2a 2a 20 74 68 65 20 62 53 70 61 6e 49 73 54  .** the bSpanIsT
1aa30 61 62 20 66 6c 61 67 20 69 73 20 73 65 74 2c 20  ab flag is set, 
1aa40 74 68 65 6e 20 7a 53 70 61 6e 20 69 73 20 6f 76  then zSpan is ov
1aa50 65 72 6c 6f 61 64 65 64 20 74 6f 20 6d 65 61 6e  erloaded to mean
1aa60 20 74 68 65 20 6e 61 6d 65 0a 2a 2a 20 6f 66 20   the name.** of 
1aa70 74 68 65 20 72 65 73 75 6c 74 20 63 6f 6c 75 6d  the result colum
1aa80 6e 20 69 6e 20 74 68 65 20 66 6f 72 6d 3a 20 44  n in the form: D
1aa90 41 54 41 42 41 53 45 2e 54 41 42 4c 45 2e 43 4f  ATABASE.TABLE.CO
1aaa0 4c 55 4d 4e 2e 20 20 54 68 69 73 20 6c 61 74 65  LUMN.  This late
1aab0 72 0a 2a 2a 20 66 6f 72 6d 20 69 73 20 75 73 65  r.** form is use
1aac0 64 20 66 6f 72 20 6e 61 6d 65 20 72 65 73 6f 6c  d for name resol
1aad0 75 74 69 6f 6e 20 77 69 74 68 20 6e 65 73 74 65  ution with neste
1aae0 64 20 46 52 4f 4d 20 63 6c 61 75 73 65 73 2e 0a  d FROM clauses..
1aaf0 2a 2f 0a 73 74 72 75 63 74 20 45 78 70 72 4c 69  */.struct ExprLi
1ab00 73 74 20 7b 0a 20 20 69 6e 74 20 6e 45 78 70 72  st {.  int nExpr
1ab10 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
1ab20 20 4e 75 6d 62 65 72 20 6f 66 20 65 78 70 72 65   Number of expre
1ab30 73 73 69 6f 6e 73 20 6f 6e 20 74 68 65 20 6c 69  ssions on the li
1ab40 73 74 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 45  st */.  struct E
1ab50 78 70 72 4c 69 73 74 5f 69 74 65 6d 20 7b 20 2f  xprList_item { /
1ab60 2a 20 46 6f 72 20 65 61 63 68 20 65 78 70 72 65  * For each expre
1ab70 73 73 69 6f 6e 20 69 6e 20 74 68 65 20 6c 69 73  ssion in the lis
1ab80 74 20 2a 2f 0a 20 20 20 20 45 78 70 72 20 2a 70  t */.    Expr *p
1ab90 45 78 70 72 3b 20 20 20 20 20 20 20 20 20 20 20  Expr;           
1aba0 20 2f 2a 20 54 68 65 20 70 61 72 73 65 20 74 72   /* The parse tr
1abb0 65 65 20 66 6f 72 20 74 68 69 73 20 65 78 70 72  ee for this expr
1abc0 65 73 73 69 6f 6e 20 2a 2f 0a 20 20 20 20 63 68  ession */.    ch
1abd0 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20  ar *zName;      
1abe0 20 20 20 20 20 20 2f 2a 20 54 6f 6b 65 6e 20 61        /* Token a
1abf0 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74  ssociated with t
1ac00 68 69 73 20 65 78 70 72 65 73 73 69 6f 6e 20 2a  his expression *
1ac10 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a 53 70 61  /.    char *zSpa
1ac20 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  n;            /*
1ac30 20 4f 72 69 67 69 6e 61 6c 20 74 65 78 74 20 6f   Original text o
1ac40 66 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e  f the expression
1ac50 20 2a 2f 0a 20 20 20 20 75 38 20 73 6f 72 74 4f   */.    u8 sortO
1ac60 72 64 65 72 3b 20 20 20 20 20 20 20 20 20 20 20  rder;           
1ac70 2f 2a 20 31 20 66 6f 72 20 44 45 53 43 20 6f 72  /* 1 for DESC or
1ac80 20 30 20 66 6f 72 20 41 53 43 20 2a 2f 0a 20 20   0 for ASC */.  
1ac90 20 20 75 6e 73 69 67 6e 65 64 20 64 6f 6e 65 20    unsigned done 
1aca0 3a 31 3b 20 20 20 20 20 20 20 2f 2a 20 41 20 66  :1;       /* A f
1acb0 6c 61 67 20 74 6f 20 69 6e 64 69 63 61 74 65 20  lag to indicate 
1acc0 77 68 65 6e 20 70 72 6f 63 65 73 73 69 6e 67 20  when processing 
1acd0 69 73 20 66 69 6e 69 73 68 65 64 20 2a 2f 0a 20  is finished */. 
1ace0 20 20 20 75 6e 73 69 67 6e 65 64 20 62 53 70 61     unsigned bSpa
1acf0 6e 49 73 54 61 62 20 3a 31 3b 20 2f 2a 20 7a 53  nIsTab :1; /* zS
1ad00 70 61 6e 20 68 6f 6c 64 73 20 44 42 2e 54 41 42  pan holds DB.TAB
1ad10 4c 45 2e 43 4f 4c 55 4d 4e 20 2a 2f 0a 20 20 20  LE.COLUMN */.   
1ad20 20 75 6e 73 69 67 6e 65 64 20 72 65 75 73 61 62   unsigned reusab
1ad30 6c 65 20 3a 31 3b 20 20 20 2f 2a 20 43 6f 6e 73  le :1;   /* Cons
1ad40 74 61 6e 74 20 65 78 70 72 65 73 73 69 6f 6e 20  tant expression 
1ad50 69 73 20 72 65 75 73 61 62 6c 65 20 2a 2f 0a 20  is reusable */. 
1ad60 20 20 20 75 6e 73 69 67 6e 65 64 20 62 53 6f 72     unsigned bSor
1ad70 74 65 72 52 65 66 20 3a 31 3b 20 2f 2a 20 44 65  terRef :1; /* De
1ad80 66 65 72 20 65 76 61 6c 75 61 74 69 6f 6e 20 75  fer evaluation u
1ad90 6e 74 69 6c 20 61 66 74 65 72 20 73 6f 72 74 69  ntil after sorti
1ada0 6e 67 20 2a 2f 0a 20 20 20 20 75 6e 69 6f 6e 20  ng */.    union 
1adb0 7b 0a 20 20 20 20 20 20 73 74 72 75 63 74 20 7b  {.      struct {
1adc0 0a 20 20 20 20 20 20 20 20 75 31 36 20 69 4f 72  .        u16 iOr
1add0 64 65 72 42 79 43 6f 6c 3b 20 20 20 20 20 20 2f  derByCol;      /
1ade0 2a 20 46 6f 72 20 4f 52 44 45 52 20 42 59 2c 20  * For ORDER BY, 
1adf0 63 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 69 6e  column number in
1ae00 20 72 65 73 75 6c 74 20 73 65 74 20 2a 2f 0a 20   result set */. 
1ae10 20 20 20 20 20 20 20 75 31 36 20 69 41 6c 69 61         u16 iAlia
1ae20 73 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  s;           /* 
1ae30 49 6e 64 65 78 20 69 6e 74 6f 20 50 61 72 73 65  Index into Parse
1ae40 2e 61 41 6c 69 61 73 5b 5d 20 66 6f 72 20 7a 4e  .aAlias[] for zN
1ae50 61 6d 65 20 2a 2f 0a 20 20 20 20 20 20 7d 20 78  ame */.      } x
1ae60 3b 0a 20 20 20 20 20 20 69 6e 74 20 69 43 6f 6e  ;.      int iCon
1ae70 73 74 45 78 70 72 52 65 67 3b 20 20 20 20 20 20  stExprReg;      
1ae80 2f 2a 20 52 65 67 69 73 74 65 72 20 69 6e 20 77  /* Register in w
1ae90 68 69 63 68 20 45 78 70 72 20 76 61 6c 75 65 20  hich Expr value 
1aea0 69 73 20 63 61 63 68 65 64 20 2a 2f 0a 20 20 20  is cached */.   
1aeb0 20 7d 20 75 3b 0a 20 20 7d 20 61 5b 31 5d 3b 20   } u;.  } a[1]; 
1aec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1aed0 20 2f 2a 20 4f 6e 65 20 73 6c 6f 74 20 66 6f 72   /* One slot for
1aee0 20 65 61 63 68 20 65 78 70 72 65 73 73 69 6f 6e   each expression
1aef0 20 69 6e 20 74 68 65 20 6c 69 73 74 20 2a 2f 0a   in the list */.
1af00 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73  };../*.** An ins
1af10 74 61 6e 63 65 20 6f 66 20 74 68 69 73 20 73 74  tance of this st
1af20 72 75 63 74 75 72 65 20 63 61 6e 20 68 6f 6c 64  ructure can hold
1af30 20 61 20 73 69 6d 70 6c 65 20 6c 69 73 74 20 6f   a simple list o
1af40 66 20 69 64 65 6e 74 69 66 69 65 72 73 2c 0a 2a  f identifiers,.*
1af50 2a 20 73 75 63 68 20 61 73 20 74 68 65 20 6c 69  * such as the li
1af60 73 74 20 22 61 2c 62 2c 63 22 20 69 6e 20 74 68  st "a,b,c" in th
1af70 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 61 74  e following stat
1af80 65 6d 65 6e 74 73 3a 0a 2a 2a 0a 2a 2a 20 20 20  ements:.**.**   
1af90 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74     INSERT INTO t
1afa0 28 61 2c 62 2c 63 29 20 56 41 4c 55 45 53 20 2e  (a,b,c) VALUES .
1afb0 2e 2e 3b 0a 2a 2a 20 20 20 20 20 20 43 52 45 41  ..;.**      CREA
1afc0 54 45 20 49 4e 44 45 58 20 69 64 78 20 4f 4e 20  TE INDEX idx ON 
1afd0 74 28 61 2c 62 2c 63 29 3b 0a 2a 2a 20 20 20 20  t(a,b,c);.**    
1afe0 20 20 43 52 45 41 54 45 20 54 52 49 47 47 45 52    CREATE TRIGGER
1aff0 20 74 72 69 67 20 42 45 46 4f 52 45 20 55 50 44   trig BEFORE UPD
1b000 41 54 45 20 4f 4e 20 74 28 61 2c 62 2c 63 29 20  ATE ON t(a,b,c) 
1b010 2e 2e 2e 3b 0a 2a 2a 0a 2a 2a 20 54 68 65 20 49  ...;.**.** The I
1b020 64 4c 69 73 74 2e 61 2e 69 64 78 20 66 69 65 6c  dList.a.idx fiel
1b030 64 20 69 73 20 75 73 65 64 20 77 68 65 6e 20 74  d is used when t
1b040 68 65 20 49 64 4c 69 73 74 20 72 65 70 72 65 73  he IdList repres
1b050 65 6e 74 73 20 74 68 65 20 6c 69 73 74 20 6f 66  ents the list of
1b060 0a 2a 2a 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73  .** column names
1b070 20 61 66 74 65 72 20 61 20 74 61 62 6c 65 20 6e   after a table n
1b080 61 6d 65 20 69 6e 20 61 6e 20 49 4e 53 45 52 54  ame in an INSERT
1b090 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 49 6e 20   statement.  In 
1b0a0 74 68 65 20 73 74 61 74 65 6d 65 6e 74 0a 2a 2a  the statement.**
1b0b0 0a 2a 2a 20 20 20 20 20 49 4e 53 45 52 54 20 49  .**     INSERT I
1b0c0 4e 54 4f 20 74 28 61 2c 62 2c 63 29 20 2e 2e 2e  NTO t(a,b,c) ...
1b0d0 0a 2a 2a 0a 2a 2a 20 49 66 20 22 61 22 20 69 73  .**.** If "a" is
1b0e0 20 74 68 65 20 6b 2d 74 68 20 63 6f 6c 75 6d 6e   the k-th column
1b0f0 20 6f 66 20 74 61 62 6c 65 20 22 74 22 2c 20 74   of table "t", t
1b100 68 65 6e 20 49 64 4c 69 73 74 2e 61 5b 30 5d 2e  hen IdList.a[0].
1b110 69 64 78 3d 3d 6b 2e 0a 2a 2f 0a 73 74 72 75 63  idx==k..*/.struc
1b120 74 20 49 64 4c 69 73 74 20 7b 0a 20 20 73 74 72  t IdList {.  str
1b130 75 63 74 20 49 64 4c 69 73 74 5f 69 74 65 6d 20  uct IdList_item 
1b140 7b 0a 20 20 20 20 63 68 61 72 20 2a 7a 4e 61 6d  {.    char *zNam
1b150 65 3b 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20  e;      /* Name 
1b160 6f 66 20 74 68 65 20 69 64 65 6e 74 69 66 69 65  of the identifie
1b170 72 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 64 78  r */.    int idx
1b180 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e  ;          /* In
1b190 64 65 78 20 69 6e 20 73 6f 6d 65 20 54 61 62 6c  dex in some Tabl
1b1a0 65 2e 61 43 6f 6c 5b 5d 20 6f 66 20 61 20 63 6f  e.aCol[] of a co
1b1b0 6c 75 6d 6e 20 6e 61 6d 65 64 20 7a 4e 61 6d 65  lumn named zName
1b1c0 20 2a 2f 0a 20 20 7d 20 2a 61 3b 0a 20 20 69 6e   */.  } *a;.  in
1b1d0 74 20 6e 49 64 3b 20 20 20 20 20 20 20 20 20 2f  t nId;         /
1b1e0 2a 20 4e 75 6d 62 65 72 20 6f 66 20 69 64 65 6e  * Number of iden
1b1f0 74 69 66 69 65 72 73 20 6f 6e 20 74 68 65 20 6c  tifiers on the l
1b200 69 73 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  ist */.};../*.**
1b210 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   The following s
1b220 74 72 75 63 74 75 72 65 20 64 65 73 63 72 69 62  tructure describ
1b230 65 73 20 74 68 65 20 46 52 4f 4d 20 63 6c 61 75  es the FROM clau
1b240 73 65 20 6f 66 20 61 20 53 45 4c 45 43 54 20 73  se of a SELECT s
1b250 74 61 74 65 6d 65 6e 74 2e 0a 2a 2a 20 45 61 63  tatement..** Eac
1b260 68 20 74 61 62 6c 65 20 6f 72 20 73 75 62 71 75  h table or subqu
1b270 65 72 79 20 69 6e 20 74 68 65 20 46 52 4f 4d 20  ery in the FROM 
1b280 63 6c 61 75 73 65 20 69 73 20 61 20 73 65 70 61  clause is a sepa
1b290 72 61 74 65 20 65 6c 65 6d 65 6e 74 20 6f 66 0a  rate element of.
1b2a0 2a 2a 20 74 68 65 20 53 72 63 4c 69 73 74 2e 61  ** the SrcList.a
1b2b0 5b 5d 20 61 72 72 61 79 2e 0a 2a 2a 0a 2a 2a 20  [] array..**.** 
1b2c0 57 69 74 68 20 74 68 65 20 61 64 64 69 74 69 6f  With the additio
1b2d0 6e 20 6f 66 20 6d 75 6c 74 69 70 6c 65 20 64 61  n of multiple da
1b2e0 74 61 62 61 73 65 20 73 75 70 70 6f 72 74 2c 20  tabase support, 
1b2f0 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74  the following st
1b300 72 75 63 74 75 72 65 0a 2a 2a 20 63 61 6e 20 61  ructure.** can a
1b310 6c 73 6f 20 62 65 20 75 73 65 64 20 74 6f 20 64  lso be used to d
1b320 65 73 63 72 69 62 65 20 61 20 70 61 72 74 69 63  escribe a partic
1b330 75 6c 61 72 20 74 61 62 6c 65 20 73 75 63 68 20  ular table such 
1b340 61 73 20 74 68 65 20 74 61 62 6c 65 20 74 68 61  as the table tha
1b350 74 0a 2a 2a 20 69 73 20 6d 6f 64 69 66 69 65 64  t.** is modified
1b360 20 62 79 20 61 6e 20 49 4e 53 45 52 54 2c 20 44   by an INSERT, D
1b370 45 4c 45 54 45 2c 20 6f 72 20 55 50 44 41 54 45  ELETE, or UPDATE
1b380 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 49 6e 20   statement.  In 
1b390 73 74 61 6e 64 61 72 64 20 53 51 4c 2c 0a 2a 2a  standard SQL,.**
1b3a0 20 73 75 63 68 20 61 20 74 61 62 6c 65 20 6d 75   such a table mu
1b3b0 73 74 20 62 65 20 61 20 73 69 6d 70 6c 65 20 6e  st be a simple n
1b3c0 61 6d 65 3a 20 49 44 2e 20 20 42 75 74 20 69 6e  ame: ID.  But in
1b3d0 20 53 51 4c 69 74 65 2c 20 74 68 65 20 74 61 62   SQLite, the tab
1b3e0 6c 65 20 63 61 6e 0a 2a 2a 20 6e 6f 77 20 62 65  le can.** now be
1b3f0 20 69 64 65 6e 74 69 66 69 65 64 20 62 79 20 61   identified by a
1b400 20 64 61 74 61 62 61 73 65 20 6e 61 6d 65 2c 20   database name, 
1b410 61 20 64 6f 74 2c 20 74 68 65 6e 20 74 68 65 20  a dot, then the 
1b420 74 61 62 6c 65 20 6e 61 6d 65 3a 20 49 44 2e 49  table name: ID.I
1b430 44 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6a 6f 69  D..**.** The joi
1b440 6e 74 79 70 65 20 73 74 61 72 74 73 20 6f 75 74  ntype starts out
1b450 20 73 68 6f 77 69 6e 67 20 74 68 65 20 6a 6f 69   showing the joi
1b460 6e 20 74 79 70 65 20 62 65 74 77 65 65 6e 20 74  n type between t
1b470 68 65 20 63 75 72 72 65 6e 74 20 74 61 62 6c 65  he current table
1b480 0a 2a 2a 20 61 6e 64 20 74 68 65 20 6e 65 78 74  .** and the next
1b490 20 74 61 62 6c 65 20 6f 6e 20 74 68 65 20 6c 69   table on the li
1b4a0 73 74 2e 20 20 54 68 65 20 70 61 72 73 65 72 20  st.  The parser 
1b4b0 62 75 69 6c 64 73 20 74 68 65 20 6c 69 73 74 20  builds the list 
1b4c0 74 68 69 73 20 77 61 79 2e 0a 2a 2a 20 42 75 74  this way..** But
1b4d0 20 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74 53   sqlite3SrcListS
1b4e0 68 69 66 74 4a 6f 69 6e 54 79 70 65 28 29 20 6c  hiftJoinType() l
1b4f0 61 74 65 72 20 73 68 69 66 74 73 20 74 68 65 20  ater shifts the 
1b500 6a 6f 69 6e 74 79 70 65 73 20 73 6f 20 74 68 61  jointypes so tha
1b510 74 20 65 61 63 68 0a 2a 2a 20 6a 6f 69 6e 74 79  t each.** jointy
1b520 70 65 20 65 78 70 72 65 73 73 65 73 20 74 68 65  pe expresses the
1b530 20 6a 6f 69 6e 20 62 65 74 77 65 65 6e 20 74 68   join between th
1b540 65 20 74 61 62 6c 65 20 61 6e 64 20 74 68 65 20  e table and the 
1b550 70 72 65 76 69 6f 75 73 20 74 61 62 6c 65 2e 0a  previous table..
1b560 2a 2a 0a 2a 2a 20 49 6e 20 74 68 65 20 63 6f 6c  **.** In the col
1b570 55 73 65 64 20 66 69 65 6c 64 2c 20 74 68 65 20  Used field, the 
1b580 68 69 67 68 2d 6f 72 64 65 72 20 62 69 74 20 28  high-order bit (
1b590 62 69 74 20 36 33 29 20 69 73 20 73 65 74 20 69  bit 63) is set i
1b5a0 66 20 74 68 65 20 74 61 62 6c 65 0a 2a 2a 20 63  f the table.** c
1b5b0 6f 6e 74 61 69 6e 73 20 6d 6f 72 65 20 74 68 61  ontains more tha
1b5c0 6e 20 36 33 20 63 6f 6c 75 6d 6e 73 20 61 6e 64  n 63 columns and
1b5d0 20 74 68 65 20 36 34 2d 74 68 20 6f 72 20 6c 61   the 64-th or la
1b5e0 74 65 72 20 63 6f 6c 75 6d 6e 20 69 73 20 75 73  ter column is us
1b5f0 65 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53 72  ed..*/.struct Sr
1b600 63 4c 69 73 74 20 7b 0a 20 20 69 6e 74 20 6e 53  cList {.  int nS
1b610 72 63 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 75  rc;        /* Nu
1b620 6d 62 65 72 20 6f 66 20 74 61 62 6c 65 73 20 6f  mber of tables o
1b630 72 20 73 75 62 71 75 65 72 69 65 73 20 69 6e 20  r subqueries in 
1b640 74 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 20  the FROM clause 
1b650 2a 2f 0a 20 20 75 33 32 20 6e 41 6c 6c 6f 63 3b  */.  u32 nAlloc;
1b660 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
1b670 6f 66 20 65 6e 74 72 69 65 73 20 61 6c 6c 6f 63  of entries alloc
1b680 61 74 65 64 20 69 6e 20 61 5b 5d 20 62 65 6c 6f  ated in a[] belo
1b690 77 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 53 72  w */.  struct Sr
1b6a0 63 4c 69 73 74 5f 69 74 65 6d 20 7b 0a 20 20 20  cList_item {.   
1b6b0 20 53 63 68 65 6d 61 20 2a 70 53 63 68 65 6d 61   Schema *pSchema
1b6c0 3b 20 20 2f 2a 20 53 63 68 65 6d 61 20 74 6f 20  ;  /* Schema to 
1b6d0 77 68 69 63 68 20 74 68 69 73 20 69 74 65 6d 20  which this item 
1b6e0 69 73 20 66 69 78 65 64 20 2a 2f 0a 20 20 20 20  is fixed */.    
1b6f0 63 68 61 72 20 2a 7a 44 61 74 61 62 61 73 65 3b  char *zDatabase;
1b700 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 64 61 74    /* Name of dat
1b710 61 62 61 73 65 20 68 6f 6c 64 69 6e 67 20 74 68  abase holding th
1b720 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20  is table */.    
1b730 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20  char *zName;    
1b740 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65    /* Name of the
1b750 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20 63 68   table */.    ch
1b760 61 72 20 2a 7a 41 6c 69 61 73 3b 20 20 20 20 20  ar *zAlias;     
1b770 2f 2a 20 54 68 65 20 22 42 22 20 70 61 72 74 20  /* The "B" part 
1b780 6f 66 20 61 20 22 41 20 41 53 20 42 22 20 70 68  of a "A AS B" ph
1b790 72 61 73 65 2e 20 20 7a 4e 61 6d 65 20 69 73 20  rase.  zName is 
1b7a0 74 68 65 20 22 41 22 20 2a 2f 0a 20 20 20 20 54  the "A" */.    T
1b7b0 61 62 6c 65 20 2a 70 54 61 62 3b 20 20 20 20 20  able *pTab;     
1b7c0 20 2f 2a 20 41 6e 20 53 51 4c 20 74 61 62 6c 65   /* An SQL table
1b7d0 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 74   corresponding t
1b7e0 6f 20 7a 4e 61 6d 65 20 2a 2f 0a 20 20 20 20 53  o zName */.    S
1b7f0 65 6c 65 63 74 20 2a 70 53 65 6c 65 63 74 3b 20  elect *pSelect; 
1b800 20 2f 2a 20 41 20 53 45 4c 45 43 54 20 73 74 61   /* A SELECT sta
1b810 74 65 6d 65 6e 74 20 75 73 65 64 20 69 6e 20 70  tement used in p
1b820 6c 61 63 65 20 6f 66 20 61 20 74 61 62 6c 65 20  lace of a table 
1b830 6e 61 6d 65 20 2a 2f 0a 20 20 20 20 69 6e 74 20  name */.    int 
1b840 61 64 64 72 46 69 6c 6c 53 75 62 3b 20 20 2f 2a  addrFillSub;  /*
1b850 20 41 64 64 72 65 73 73 20 6f 66 20 73 75 62 72   Address of subr
1b860 6f 75 74 69 6e 65 20 74 6f 20 6d 61 6e 69 66 65  outine to manife
1b870 73 74 20 61 20 73 75 62 71 75 65 72 79 20 2a 2f  st a subquery */
1b880 0a 20 20 20 20 69 6e 74 20 72 65 67 52 65 74 75  .    int regRetu
1b890 72 6e 3b 20 20 20 20 2f 2a 20 52 65 67 69 73 74  rn;    /* Regist
1b8a0 65 72 20 68 6f 6c 64 69 6e 67 20 72 65 74 75 72  er holding retur
1b8b0 6e 20 61 64 64 72 65 73 73 20 6f 66 20 61 64 64  n address of add
1b8c0 72 46 69 6c 6c 53 75 62 20 2a 2f 0a 20 20 20 20  rFillSub */.    
1b8d0 69 6e 74 20 72 65 67 52 65 73 75 6c 74 3b 20 20  int regResult;  
1b8e0 20 20 2f 2a 20 52 65 67 69 73 74 65 72 73 20 68    /* Registers h
1b8f0 6f 6c 64 69 6e 67 20 72 65 73 75 6c 74 73 20 6f  olding results o
1b900 66 20 61 20 63 6f 2d 72 6f 75 74 69 6e 65 20 2a  f a co-routine *
1b910 2f 0a 20 20 20 20 73 74 72 75 63 74 20 7b 0a 20  /.    struct {. 
1b920 20 20 20 20 20 75 38 20 6a 6f 69 6e 74 79 70 65       u8 jointype
1b930 3b 20 20 20 20 20 20 2f 2a 20 54 79 70 65 20 6f  ;      /* Type o
1b940 66 20 6a 6f 69 6e 20 62 65 74 77 65 65 6e 20 74  f join between t
1b950 68 69 73 20 74 61 62 6c 65 20 61 6e 64 20 74 68  his table and th
1b960 65 20 70 72 65 76 69 6f 75 73 20 2a 2f 0a 20 20  e previous */.  
1b970 20 20 20 20 75 6e 73 69 67 6e 65 64 20 6e 6f 74      unsigned not
1b980 49 6e 64 65 78 65 64 20 3a 31 3b 20 20 20 20 2f  Indexed :1;    /
1b990 2a 20 54 72 75 65 20 69 66 20 74 68 65 72 65 20  * True if there 
1b9a0 69 73 20 61 20 4e 4f 54 20 49 4e 44 45 58 45 44  is a NOT INDEXED
1b9b0 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 20 20 20   clause */.     
1b9c0 20 75 6e 73 69 67 6e 65 64 20 69 73 49 6e 64 65   unsigned isInde
1b9d0 78 65 64 42 79 20 3a 31 3b 20 20 20 2f 2a 20 54  xedBy :1;   /* T
1b9e0 72 75 65 20 69 66 20 74 68 65 72 65 20 69 73 20  rue if there is 
1b9f0 61 6e 20 49 4e 44 45 58 45 44 20 42 59 20 63 6c  an INDEXED BY cl
1ba00 61 75 73 65 20 2a 2f 0a 20 20 20 20 20 20 75 6e  ause */.      un
1ba10 73 69 67 6e 65 64 20 69 73 54 61 62 46 75 6e 63  signed isTabFunc
1ba20 20 3a 31 3b 20 20 20 20 20 2f 2a 20 54 72 75 65   :1;     /* True
1ba30 20 69 66 20 74 61 62 6c 65 2d 76 61 6c 75 65 64   if table-valued
1ba40 2d 66 75 6e 63 74 69 6f 6e 20 73 79 6e 74 61 78  -function syntax
1ba50 20 2a 2f 0a 20 20 20 20 20 20 75 6e 73 69 67 6e   */.      unsign
1ba60 65 64 20 69 73 43 6f 72 72 65 6c 61 74 65 64 20  ed isCorrelated 
1ba70 3a 31 3b 20 20 2f 2a 20 54 72 75 65 20 69 66 20  :1;  /* True if 
1ba80 73 75 62 2d 71 75 65 72 79 20 69 73 20 63 6f 72  sub-query is cor
1ba90 72 65 6c 61 74 65 64 20 2a 2f 0a 20 20 20 20 20  related */.     
1baa0 20 75 6e 73 69 67 6e 65 64 20 76 69 61 43 6f 72   unsigned viaCor
1bab0 6f 75 74 69 6e 65 20 3a 31 3b 20 20 2f 2a 20 49  outine :1;  /* I
1bac0 6d 70 6c 65 6d 65 6e 74 65 64 20 61 73 20 61 20  mplemented as a 
1bad0 63 6f 2d 72 6f 75 74 69 6e 65 20 2a 2f 0a 20 20  co-routine */.  
1bae0 20 20 20 20 75 6e 73 69 67 6e 65 64 20 69 73 52      unsigned isR
1baf0 65 63 75 72 73 69 76 65 20 3a 31 3b 20 20 20 2f  ecursive :1;   /
1bb00 2a 20 54 72 75 65 20 66 6f 72 20 72 65 63 75 72  * True for recur
1bb10 73 69 76 65 20 72 65 66 65 72 65 6e 63 65 20 69  sive reference i
1bb20 6e 20 57 49 54 48 20 2a 2f 0a 20 20 20 20 7d 20  n WITH */.    } 
1bb30 66 67 3b 0a 20 20 20 20 69 6e 74 20 69 43 75 72  fg;.    int iCur
1bb40 73 6f 72 3b 20 20 20 20 20 20 2f 2a 20 54 68 65  sor;      /* The
1bb50 20 56 44 42 45 20 63 75 72 73 6f 72 20 6e 75 6d   VDBE cursor num
1bb60 62 65 72 20 75 73 65 64 20 74 6f 20 61 63 63 65  ber used to acce
1bb70 73 73 20 74 68 69 73 20 74 61 62 6c 65 20 2a 2f  ss this table */
1bb80 0a 20 20 20 20 45 78 70 72 20 2a 70 4f 6e 3b 20  .    Expr *pOn; 
1bb90 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 4f 4e         /* The ON
1bba0 20 63 6c 61 75 73 65 20 6f 66 20 61 20 6a 6f 69   clause of a joi
1bbb0 6e 20 2a 2f 0a 20 20 20 20 49 64 4c 69 73 74 20  n */.    IdList 
1bbc0 2a 70 55 73 69 6e 67 3b 20 20 20 2f 2a 20 54 68  *pUsing;   /* Th
1bbd0 65 20 55 53 49 4e 47 20 63 6c 61 75 73 65 20 6f  e USING clause o
1bbe0 66 20 61 20 6a 6f 69 6e 20 2a 2f 0a 20 20 20 20  f a join */.    
1bbf0 42 69 74 6d 61 73 6b 20 63 6f 6c 55 73 65 64 3b  Bitmask colUsed;
1bc00 20 20 2f 2a 20 42 69 74 20 4e 20 28 31 3c 3c 4e    /* Bit N (1<<N
1bc10 29 20 73 65 74 20 69 66 20 63 6f 6c 75 6d 6e 20  ) set if column 
1bc20 4e 20 6f 66 20 70 54 61 62 20 69 73 20 75 73 65  N of pTab is use
1bc30 64 20 2a 2f 0a 20 20 20 20 75 6e 69 6f 6e 20 7b  d */.    union {
1bc40 0a 20 20 20 20 20 20 63 68 61 72 20 2a 7a 49 6e  .      char *zIn
1bc50 64 65 78 65 64 42 79 3b 20 20 20 20 2f 2a 20 49  dexedBy;    /* I
1bc60 64 65 6e 74 69 66 69 65 72 20 66 72 6f 6d 20 22  dentifier from "
1bc70 49 4e 44 45 58 45 44 20 42 59 20 3c 7a 49 6e 64  INDEXED BY <zInd
1bc80 65 78 3e 22 20 63 6c 61 75 73 65 20 2a 2f 0a 20  ex>" clause */. 
1bc90 20 20 20 20 20 45 78 70 72 4c 69 73 74 20 2a 70       ExprList *p
1bca0 46 75 6e 63 41 72 67 3b 20 20 2f 2a 20 41 72 67  FuncArg;  /* Arg
1bcb0 75 6d 65 6e 74 73 20 74 6f 20 74 61 62 6c 65 2d  uments to table-
1bcc0 76 61 6c 75 65 64 2d 66 75 6e 63 74 69 6f 6e 20  valued-function 
1bcd0 2a 2f 0a 20 20 20 20 7d 20 75 31 3b 0a 20 20 20  */.    } u1;.   
1bce0 20 49 6e 64 65 78 20 2a 70 49 42 49 6e 64 65 78   Index *pIBIndex
1bcf0 3b 20 20 2f 2a 20 49 6e 64 65 78 20 73 74 72 75  ;  /* Index stru
1bd00 63 74 75 72 65 20 63 6f 72 72 65 73 70 6f 6e 64  cture correspond
1bd10 69 6e 67 20 74 6f 20 75 31 2e 7a 49 6e 64 65 78  ing to u1.zIndex
1bd20 65 64 42 79 20 2a 2f 0a 20 20 7d 20 61 5b 31 5d  edBy */.  } a[1]
1bd30 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
1bd40 20 4f 6e 65 20 65 6e 74 72 79 20 66 6f 72 20 65   One entry for e
1bd50 61 63 68 20 69 64 65 6e 74 69 66 69 65 72 20 6f  ach identifier o
1bd60 6e 20 74 68 65 20 6c 69 73 74 20 2a 2f 0a 7d 3b  n the list */.};
1bd70 0a 0a 2f 2a 0a 2a 2a 20 50 65 72 6d 69 74 74 65  ../*.** Permitte
1bd80 64 20 76 61 6c 75 65 73 20 6f 66 20 74 68 65 20  d values of the 
1bd90 53 72 63 4c 69 73 74 2e 61 2e 6a 6f 69 6e 74 79  SrcList.a.jointy
1bda0 70 65 20 66 69 65 6c 64 0a 2a 2f 0a 23 64 65 66  pe field.*/.#def
1bdb0 69 6e 65 20 4a 54 5f 49 4e 4e 45 52 20 20 20 20  ine JT_INNER    
1bdc0 20 30 78 30 30 30 31 20 20 20 20 2f 2a 20 41 6e   0x0001    /* An
1bdd0 79 20 6b 69 6e 64 20 6f 66 20 69 6e 6e 65 72 20  y kind of inner 
1bde0 6f 72 20 63 72 6f 73 73 20 6a 6f 69 6e 20 2a 2f  or cross join */
1bdf0 0a 23 64 65 66 69 6e 65 20 4a 54 5f 43 52 4f 53  .#define JT_CROS
1be00 53 20 20 20 20 20 30 78 30 30 30 32 20 20 20 20  S     0x0002    
1be10 2f 2a 20 45 78 70 6c 69 63 69 74 20 75 73 65 20  /* Explicit use 
1be20 6f 66 20 74 68 65 20 43 52 4f 53 53 20 6b 65 79  of the CROSS key
1be30 77 6f 72 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20  word */.#define 
1be40 4a 54 5f 4e 41 54 55 52 41 4c 20 20 20 30 78 30  JT_NATURAL   0x0
1be50 30 30 34 20 20 20 20 2f 2a 20 54 72 75 65 20 66  004    /* True f
1be60 6f 72 20 61 20 22 6e 61 74 75 72 61 6c 22 20 6a  or a "natural" j
1be70 6f 69 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a  oin */.#define J
1be80 54 5f 4c 45 46 54 20 20 20 20 20 20 30 78 30 30  T_LEFT      0x00
1be90 30 38 20 20 20 20 2f 2a 20 4c 65 66 74 20 6f 75  08    /* Left ou
1bea0 74 65 72 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66  ter join */.#def
1beb0 69 6e 65 20 4a 54 5f 52 49 47 48 54 20 20 20 20  ine JT_RIGHT    
1bec0 20 30 78 30 30 31 30 20 20 20 20 2f 2a 20 52 69   0x0010    /* Ri
1bed0 67 68 74 20 6f 75 74 65 72 20 6a 6f 69 6e 20 2a  ght outer join *
1bee0 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f 4f 55 54  /.#define JT_OUT
1bef0 45 52 20 20 20 20 20 30 78 30 30 32 30 20 20 20  ER     0x0020   
1bf00 20 2f 2a 20 54 68 65 20 22 4f 55 54 45 52 22 20   /* The "OUTER" 
1bf10 6b 65 79 77 6f 72 64 20 69 73 20 70 72 65 73 65  keyword is prese
1bf20 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54  nt */.#define JT
1bf30 5f 45 52 52 4f 52 20 20 20 20 20 30 78 30 30 34  _ERROR     0x004
1bf40 30 20 20 20 20 2f 2a 20 75 6e 6b 6e 6f 77 6e 20  0    /* unknown 
1bf50 6f 72 20 75 6e 73 75 70 70 6f 72 74 65 64 20 6a  or unsupported j
1bf60 6f 69 6e 20 74 79 70 65 20 2a 2f 0a 0a 0a 2f 2a  oin type */.../*
1bf70 0a 2a 2a 20 46 6c 61 67 73 20 61 70 70 72 6f 70  .** Flags approp
1bf80 72 69 61 74 65 20 66 6f 72 20 74 68 65 20 77 63  riate for the wc
1bf90 74 72 6c 46 6c 61 67 73 20 70 61 72 61 6d 65 74  trlFlags paramet
1bfa0 65 72 20 6f 66 20 73 71 6c 69 74 65 33 57 68 65  er of sqlite3Whe
1bfb0 72 65 42 65 67 69 6e 28 29 0a 2a 2a 20 61 6e 64  reBegin().** and
1bfc0 20 74 68 65 20 57 68 65 72 65 49 6e 66 6f 2e 77   the WhereInfo.w
1bfd0 63 74 72 6c 46 6c 61 67 73 20 6d 65 6d 62 65 72  ctrlFlags member
1bfe0 2e 0a 2a 2a 0a 2a 2a 20 56 61 6c 75 65 20 63 6f  ..**.** Value co
1bff0 6e 73 74 72 61 69 6e 74 73 20 28 65 6e 66 6f 72  nstraints (enfor
1c000 63 65 64 20 76 69 61 20 61 73 73 65 72 74 28 29  ced via assert()
1c010 29 3a 0a 2a 2a 20 20 20 20 20 57 48 45 52 45 5f  ):.**     WHERE_
1c020 55 53 45 5f 4c 49 4d 49 54 20 20 3d 3d 20 53 46  USE_LIMIT  == SF
1c030 5f 46 69 78 65 64 4c 69 6d 69 74 0a 2a 2f 0a 23  _FixedLimit.*/.#
1c040 64 65 66 69 6e 65 20 57 48 45 52 45 5f 4f 52 44  define WHERE_ORD
1c050 45 52 42 59 5f 4e 4f 52 4d 41 4c 20 20 20 30 78  ERBY_NORMAL   0x
1c060 30 30 30 30 20 2f 2a 20 4e 6f 2d 6f 70 20 2a 2f  0000 /* No-op */
1c070 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 4f  .#define WHERE_O
1c080 52 44 45 52 42 59 5f 4d 49 4e 20 20 20 20 20 20  RDERBY_MIN      
1c090 30 78 30 30 30 31 20 2f 2a 20 4f 52 44 45 52 20  0x0001 /* ORDER 
1c0a0 42 59 20 70 72 6f 63 65 73 73 69 6e 67 20 66 6f  BY processing fo
1c0b0 72 20 6d 69 6e 28 29 20 66 75 6e 63 20 2a 2f 0a  r min() func */.
1c0c0 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 4f 52  #define WHERE_OR
1c0d0 44 45 52 42 59 5f 4d 41 58 20 20 20 20 20 20 30  DERBY_MAX      0
1c0e0 78 30 30 30 32 20 2f 2a 20 4f 52 44 45 52 20 42  x0002 /* ORDER B
1c0f0 59 20 70 72 6f 63 65 73 73 69 6e 67 20 66 6f 72  Y processing for
1c100 20 6d 61 78 28 29 20 66 75 6e 63 20 2a 2f 0a 23   max() func */.#
1c110 64 65 66 69 6e 65 20 57 48 45 52 45 5f 4f 4e 45  define WHERE_ONE
1c120 50 41 53 53 5f 44 45 53 49 52 45 44 20 20 30 78  PASS_DESIRED  0x
1c130 30 30 30 34 20 2f 2a 20 57 61 6e 74 20 74 6f 20  0004 /* Want to 
1c140 64 6f 20 6f 6e 65 2d 70 61 73 73 20 55 50 44 41  do one-pass UPDA
1c150 54 45 2f 44 45 4c 45 54 45 20 2a 2f 0a 23 64 65  TE/DELETE */.#de
1c160 66 69 6e 65 20 57 48 45 52 45 5f 4f 4e 45 50 41  fine WHERE_ONEPA
1c170 53 53 5f 4d 55 4c 54 49 52 4f 57 20 30 78 30 30  SS_MULTIROW 0x00
1c180 30 38 20 2f 2a 20 4f 4e 45 50 41 53 53 20 69 73  08 /* ONEPASS is
1c190 20 6f 6b 20 77 69 74 68 20 6d 75 6c 74 69 70 6c   ok with multipl
1c1a0 65 20 72 6f 77 73 20 2a 2f 0a 23 64 65 66 69 6e  e rows */.#defin
1c1b0 65 20 57 48 45 52 45 5f 44 55 50 4c 49 43 41 54  e WHERE_DUPLICAT
1c1c0 45 53 5f 4f 4b 20 20 20 20 30 78 30 30 31 30 20  ES_OK    0x0010 
1c1d0 2f 2a 20 4f 6b 20 74 6f 20 72 65 74 75 72 6e 20  /* Ok to return 
1c1e0 61 20 72 6f 77 20 6d 6f 72 65 20 74 68 61 6e 20  a row more than 
1c1f0 6f 6e 63 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  once */.#define 
1c200 57 48 45 52 45 5f 4f 52 5f 53 55 42 43 4c 41 55  WHERE_OR_SUBCLAU
1c210 53 45 20 20 20 20 20 30 78 30 30 32 30 20 2f 2a  SE     0x0020 /*
1c220 20 50 72 6f 63 65 73 73 69 6e 67 20 61 20 73 75   Processing a su
1c230 62 2d 57 48 45 52 45 20 61 73 20 70 61 72 74 20  b-WHERE as part 
1c240 6f 66 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  of.             
1c250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c260 20 20 20 20 20 20 20 20 20 2a 2a 20 74 68 65 20           ** the 
1c270 4f 52 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 20  OR optimization 
1c280 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52   */.#define WHER
1c290 45 5f 47 52 4f 55 50 42 59 20 20 20 20 20 20 20  E_GROUPBY       
1c2a0 20 20 20 30 78 30 30 34 30 20 2f 2a 20 70 4f 72     0x0040 /* pOr
1c2b0 64 65 72 42 79 20 69 73 20 72 65 61 6c 6c 79 20  derBy is really 
1c2c0 61 20 47 52 4f 55 50 20 42 59 20 2a 2f 0a 23 64  a GROUP BY */.#d
1c2d0 65 66 69 6e 65 20 57 48 45 52 45 5f 44 49 53 54  efine WHERE_DIST
1c2e0 49 4e 43 54 42 59 20 20 20 20 20 20 20 30 78 30  INCTBY       0x0
1c2f0 30 38 30 20 2f 2a 20 70 4f 72 64 65 72 62 79 20  080 /* pOrderby 
1c300 69 73 20 72 65 61 6c 6c 79 20 61 20 44 49 53 54  is really a DIST
1c310 49 4e 43 54 20 63 6c 61 75 73 65 20 2a 2f 0a 23  INCT clause */.#
1c320 64 65 66 69 6e 65 20 57 48 45 52 45 5f 57 41 4e  define WHERE_WAN
1c330 54 5f 44 49 53 54 49 4e 43 54 20 20 20 20 30 78  T_DISTINCT    0x
1c340 30 31 30 30 20 2f 2a 20 41 6c 6c 20 6f 75 74 70  0100 /* All outp
1c350 75 74 20 6e 65 65 64 73 20 74 6f 20 62 65 20 64  ut needs to be d
1c360 69 73 74 69 6e 63 74 20 2a 2f 0a 23 64 65 66 69  istinct */.#defi
1c370 6e 65 20 57 48 45 52 45 5f 53 4f 52 54 42 59 47  ne WHERE_SORTBYG
1c380 52 4f 55 50 20 20 20 20 20 20 30 78 30 32 30 30  ROUP      0x0200
1c390 20 2f 2a 20 53 75 70 70 6f 72 74 20 73 71 6c 69   /* Support sqli
1c3a0 74 65 33 57 68 65 72 65 49 73 53 6f 72 74 65 64  te3WhereIsSorted
1c3b0 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48  () */.#define WH
1c3c0 45 52 45 5f 53 45 45 4b 5f 54 41 42 4c 45 20 20  ERE_SEEK_TABLE  
1c3d0 20 20 20 20 20 30 78 30 34 30 30 20 2f 2a 20 44       0x0400 /* D
1c3e0 6f 20 6e 6f 74 20 64 65 66 65 72 20 73 65 65 6b  o not defer seek
1c3f0 73 20 6f 6e 20 6d 61 69 6e 20 74 61 62 6c 65 20  s on main table 
1c400 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45  */.#define WHERE
1c410 5f 4f 52 44 45 52 42 59 5f 4c 49 4d 49 54 20 20  _ORDERBY_LIMIT  
1c420 20 20 30 78 30 38 30 30 20 2f 2a 20 4f 52 44 45    0x0800 /* ORDE
1c430 52 42 59 2b 4c 49 4d 49 54 20 6f 6e 20 74 68 65  RBY+LIMIT on the
1c440 20 69 6e 6e 65 72 20 6c 6f 6f 70 20 2a 2f 0a 23   inner loop */.#
1c450 64 65 66 69 6e 65 20 57 48 45 52 45 5f 53 45 45  define WHERE_SEE
1c460 4b 5f 55 4e 49 51 5f 54 41 42 4c 45 20 20 30 78  K_UNIQ_TABLE  0x
1c470 31 30 30 30 20 2f 2a 20 44 6f 20 6e 6f 74 20 64  1000 /* Do not d
1c480 65 66 65 72 20 73 65 65 6b 73 20 69 66 20 75 6e  efer seeks if un
1c490 69 71 75 65 20 2a 2f 0a 20 20 20 20 20 20 20 20  ique */.        
1c4a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c4b0 2f 2a 20 20 20 20 20 30 78 32 30 30 30 20 20 20  /*     0x2000   
1c4c0 20 6e 6f 74 20 63 75 72 72 65 6e 74 6c 79 20 75   not currently u
1c4d0 73 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57  sed */.#define W
1c4e0 48 45 52 45 5f 55 53 45 5f 4c 49 4d 49 54 20 20  HERE_USE_LIMIT  
1c4f0 20 20 20 20 20 20 30 78 34 30 30 30 20 2f 2a 20        0x4000 /* 
1c500 55 73 65 20 74 68 65 20 4c 49 4d 49 54 20 69 6e  Use the LIMIT in
1c510 20 63 6f 73 74 20 65 73 74 69 6d 61 74 65 73 20   cost estimates 
1c520 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  */.             
1c530 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 20 20             /*   
1c540 20 20 30 78 38 30 30 30 20 20 20 20 6e 6f 74 20    0x8000    not 
1c550 63 75 72 72 65 6e 74 6c 79 20 75 73 65 64 20 2a  currently used *
1c560 2f 0a 0a 2f 2a 20 41 6c 6c 6f 77 65 64 20 72 65  /../* Allowed re
1c570 74 75 72 6e 20 76 61 6c 75 65 73 20 66 72 6f 6d  turn values from
1c580 20 73 71 6c 69 74 65 33 57 68 65 72 65 49 73 44   sqlite3WhereIsD
1c590 69 73 74 69 6e 63 74 28 29 0a 2a 2f 0a 23 64 65  istinct().*/.#de
1c5a0 66 69 6e 65 20 57 48 45 52 45 5f 44 49 53 54 49  fine WHERE_DISTI
1c5b0 4e 43 54 5f 4e 4f 4f 50 20 20 20 20 20 20 30 20  NCT_NOOP      0 
1c5c0 20 2f 2a 20 44 49 53 54 49 4e 43 54 20 6b 65 79   /* DISTINCT key
1c5d0 77 6f 72 64 20 6e 6f 74 20 75 73 65 64 20 2a 2f  word not used */
1c5e0 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 44  .#define WHERE_D
1c5f0 49 53 54 49 4e 43 54 5f 55 4e 49 51 55 45 20 20  ISTINCT_UNIQUE  
1c600 20 20 31 20 20 2f 2a 20 4e 6f 20 64 75 70 6c 69    1  /* No dupli
1c610 63 61 74 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65  cates */.#define
1c620 20 57 48 45 52 45 5f 44 49 53 54 49 4e 43 54 5f   WHERE_DISTINCT_
1c630 4f 52 44 45 52 45 44 20 20 20 32 20 20 2f 2a 20  ORDERED   2  /* 
1c640 41 6c 6c 20 64 75 70 6c 69 63 61 74 65 73 20 61  All duplicates a
1c650 72 65 20 61 64 6a 61 63 65 6e 74 20 2a 2f 0a 23  re adjacent */.#
1c660 64 65 66 69 6e 65 20 57 48 45 52 45 5f 44 49 53  define WHERE_DIS
1c670 54 49 4e 43 54 5f 55 4e 4f 52 44 45 52 45 44 20  TINCT_UNORDERED 
1c680 33 20 20 2f 2a 20 44 75 70 6c 69 63 61 74 65 73  3  /* Duplicates
1c690 20 61 72 65 20 73 63 61 74 74 65 72 65 64 20 2a   are scattered *
1c6a0 2f 0a 0a 2f 2a 0a 2a 2a 20 41 20 4e 61 6d 65 43  /../*.** A NameC
1c6b0 6f 6e 74 65 78 74 20 64 65 66 69 6e 65 73 20 61  ontext defines a
1c6c0 20 63 6f 6e 74 65 78 74 20 69 6e 20 77 68 69 63   context in whic
1c6d0 68 20 74 6f 20 72 65 73 6f 6c 76 65 20 74 61 62  h to resolve tab
1c6e0 6c 65 20 61 6e 64 20 63 6f 6c 75 6d 6e 0a 2a 2a  le and column.**
1c6f0 20 6e 61 6d 65 73 2e 20 20 54 68 65 20 63 6f 6e   names.  The con
1c700 74 65 78 74 20 63 6f 6e 73 69 73 74 73 20 6f 66  text consists of
1c710 20 61 20 6c 69 73 74 20 6f 66 20 74 61 62 6c 65   a list of table
1c720 73 20 28 74 68 65 20 70 53 72 63 4c 69 73 74 29  s (the pSrcList)
1c730 20 66 69 65 6c 64 20 61 6e 64 0a 2a 2a 20 61 20   field and.** a 
1c740 6c 69 73 74 20 6f 66 20 6e 61 6d 65 64 20 65 78  list of named ex
1c750 70 72 65 73 73 69 6f 6e 20 28 70 45 4c 69 73 74  pression (pEList
1c760 29 2e 20 20 54 68 65 20 6e 61 6d 65 64 20 65 78  ).  The named ex
1c770 70 72 65 73 73 69 6f 6e 20 6c 69 73 74 20 6d 61  pression list ma
1c780 79 0a 2a 2a 20 62 65 20 4e 55 4c 4c 2e 20 20 54  y.** be NULL.  T
1c790 68 65 20 70 53 72 63 20 63 6f 72 72 65 73 70 6f  he pSrc correspo
1c7a0 6e 64 73 20 74 6f 20 74 68 65 20 46 52 4f 4d 20  nds to the FROM 
1c7b0 63 6c 61 75 73 65 20 6f 66 20 61 20 53 45 4c 45  clause of a SELE
1c7c0 43 54 20 6f 72 0a 2a 2a 20 74 6f 20 74 68 65 20  CT or.** to the 
1c7d0 74 61 62 6c 65 20 62 65 69 6e 67 20 6f 70 65 72  table being oper
1c7e0 61 74 65 64 20 6f 6e 20 62 79 20 49 4e 53 45 52  ated on by INSER
1c7f0 54 2c 20 55 50 44 41 54 45 2c 20 6f 72 20 44 45  T, UPDATE, or DE
1c800 4c 45 54 45 2e 20 20 54 68 65 0a 2a 2a 20 70 45  LETE.  The.** pE
1c810 4c 69 73 74 20 63 6f 72 72 65 73 70 6f 6e 64 73  List corresponds
1c820 20 74 6f 20 74 68 65 20 72 65 73 75 6c 74 20 73   to the result s
1c830 65 74 20 6f 66 20 61 20 53 45 4c 45 43 54 20 61  et of a SELECT a
1c840 6e 64 20 69 73 20 4e 55 4c 4c 20 66 6f 72 0a 2a  nd is NULL for.*
1c850 2a 20 6f 74 68 65 72 20 73 74 61 74 65 6d 65 6e  * other statemen
1c860 74 73 2e 0a 2a 2a 0a 2a 2a 20 4e 61 6d 65 43 6f  ts..**.** NameCo
1c870 6e 74 65 78 74 73 20 63 61 6e 20 62 65 20 6e 65  ntexts can be ne
1c880 73 74 65 64 2e 20 20 57 68 65 6e 20 72 65 73 6f  sted.  When reso
1c890 6c 76 69 6e 67 20 6e 61 6d 65 73 2c 20 74 68 65  lving names, the
1c8a0 20 69 6e 6e 65 72 2d 6d 6f 73 74 0a 2a 2a 20 63   inner-most.** c
1c8b0 6f 6e 74 65 78 74 20 69 73 20 73 65 61 72 63 68  ontext is search
1c8c0 65 64 20 66 69 72 73 74 2e 20 20 49 66 20 6e 6f  ed first.  If no
1c8d0 20 6d 61 74 63 68 20 69 73 20 66 6f 75 6e 64 2c   match is found,
1c8e0 20 74 68 65 20 6e 65 78 74 20 6f 75 74 65 72 0a   the next outer.
1c8f0 2a 2a 20 63 6f 6e 74 65 78 74 20 69 73 20 63 68  ** context is ch
1c900 65 63 6b 65 64 2e 20 20 49 66 20 74 68 65 72 65  ecked.  If there
1c910 20 69 73 20 73 74 69 6c 6c 20 6e 6f 20 6d 61 74   is still no mat
1c920 63 68 2c 20 74 68 65 20 6e 65 78 74 20 63 6f 6e  ch, the next con
1c930 74 65 78 74 0a 2a 2a 20 69 73 20 63 68 65 63 6b  text.** is check
1c940 65 64 2e 20 20 54 68 69 73 20 70 72 6f 63 65 73  ed.  This proces
1c950 73 20 63 6f 6e 74 69 6e 75 65 73 20 75 6e 74 69  s continues unti
1c960 6c 20 65 69 74 68 65 72 20 61 20 6d 61 74 63 68  l either a match
1c970 20 69 73 20 66 6f 75 6e 64 0a 2a 2a 20 6f 72 20   is found.** or 
1c980 61 6c 6c 20 63 6f 6e 74 65 78 74 73 20 61 72 65  all contexts are
1c990 20 63 68 65 63 6b 2e 20 20 57 68 65 6e 20 61 20   check.  When a 
1c9a0 6d 61 74 63 68 20 69 73 20 66 6f 75 6e 64 2c 20  match is found, 
1c9b0 74 68 65 20 6e 52 65 66 20 6d 65 6d 62 65 72 20  the nRef member 
1c9c0 6f 66 0a 2a 2a 20 74 68 65 20 63 6f 6e 74 65 78  of.** the contex
1c9d0 74 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65  t containing the
1c9e0 20 6d 61 74 63 68 20 69 73 20 69 6e 63 72 65 6d   match is increm
1c9f0 65 6e 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 45 61 63  ented..**.** Eac
1ca00 68 20 73 75 62 71 75 65 72 79 20 67 65 74 73 20  h subquery gets 
1ca10 61 20 6e 65 77 20 4e 61 6d 65 43 6f 6e 74 65 78  a new NameContex
1ca20 74 2e 20 20 54 68 65 20 70 4e 65 78 74 20 66 69  t.  The pNext fi
1ca30 65 6c 64 20 70 6f 69 6e 74 73 20 74 6f 20 74 68  eld points to th
1ca40 65 0a 2a 2a 20 4e 61 6d 65 43 6f 6e 74 65 78 74  e.** NameContext
1ca50 20 69 6e 20 74 68 65 20 70 61 72 65 6e 74 20 71   in the parent q
1ca60 75 65 72 79 2e 20 20 54 68 75 73 20 74 68 65 20  uery.  Thus the 
1ca70 70 72 6f 63 65 73 73 20 6f 66 20 73 63 61 6e 6e  process of scann
1ca80 69 6e 67 20 74 68 65 0a 2a 2a 20 4e 61 6d 65 43  ing the.** NameC
1ca90 6f 6e 74 65 78 74 20 6c 69 73 74 20 63 6f 72 72  ontext list corr
1caa0 65 73 70 6f 6e 64 73 20 74 6f 20 73 65 61 72 63  esponds to searc
1cab0 68 69 6e 67 20 74 68 72 6f 75 67 68 20 73 75 63  hing through suc
1cac0 63 65 73 73 69 76 65 6c 79 20 6f 75 74 65 72 0a  cessively outer.
1cad0 2a 2a 20 73 75 62 71 75 65 72 69 65 73 20 6c 6f  ** subqueries lo
1cae0 6f 6b 69 6e 67 20 66 6f 72 20 61 20 6d 61 74 63  oking for a matc
1caf0 68 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 4e 61 6d  h..*/.struct Nam
1cb00 65 43 6f 6e 74 65 78 74 20 7b 0a 20 20 50 61 72  eContext {.  Par
1cb10 73 65 20 2a 70 50 61 72 73 65 3b 20 20 20 20 20  se *pParse;     
1cb20 20 20 2f 2a 20 54 68 65 20 70 61 72 73 65 72 20    /* The parser 
1cb30 2a 2f 0a 20 20 53 72 63 4c 69 73 74 20 2a 70 53  */.  SrcList *pS
1cb40 72 63 4c 69 73 74 3b 20 20 20 2f 2a 20 4f 6e 65  rcList;   /* One
1cb50 20 6f 72 20 6d 6f 72 65 20 74 61 62 6c 65 73 20   or more tables 
1cb60 75 73 65 64 20 74 6f 20 72 65 73 6f 6c 76 65 20  used to resolve 
1cb70 6e 61 6d 65 73 20 2a 2f 0a 20 20 75 6e 69 6f 6e  names */.  union
1cb80 20 7b 0a 20 20 20 20 45 78 70 72 4c 69 73 74 20   {.    ExprList 
1cb90 2a 70 45 4c 69 73 74 3b 20 20 20 20 2f 2a 20 4f  *pEList;    /* O
1cba0 70 74 69 6f 6e 61 6c 20 6c 69 73 74 20 6f 66 20  ptional list of 
1cbb0 72 65 73 75 6c 74 2d 73 65 74 20 63 6f 6c 75 6d  result-set colum
1cbc0 6e 73 20 2a 2f 0a 20 20 20 20 41 67 67 49 6e 66  ns */.    AggInf
1cbd0 6f 20 2a 70 41 67 67 49 6e 66 6f 3b 20 20 20 2f  o *pAggInfo;   /
1cbe0 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62  * Information ab
1cbf0 6f 75 74 20 61 67 67 72 65 67 61 74 65 73 20 61  out aggregates a
1cc00 74 20 74 68 69 73 20 6c 65 76 65 6c 20 2a 2f 0a  t this level */.
1cc10 20 20 20 20 55 70 73 65 72 74 20 2a 70 55 70 73      Upsert *pUps
1cc20 65 72 74 3b 20 20 20 20 20 2f 2a 20 4f 4e 20 43  ert;     /* ON C
1cc30 4f 4e 46 4c 49 43 54 20 63 6c 61 75 73 65 20 69  ONFLICT clause i
1cc40 6e 66 6f 72 6d 61 74 69 6f 6e 20 66 72 6f 6d 20  nformation from 
1cc50 61 6e 20 75 70 73 65 72 74 20 2a 2f 0a 20 20 7d  an upsert */.  }
1cc60 20 75 4e 43 3b 0a 20 20 4e 61 6d 65 43 6f 6e 74   uNC;.  NameCont
1cc70 65 78 74 20 2a 70 4e 65 78 74 3b 20 20 2f 2a 20  ext *pNext;  /* 
1cc80 4e 65 78 74 20 6f 75 74 65 72 20 6e 61 6d 65 20  Next outer name 
1cc90 63 6f 6e 74 65 78 74 2e 20 20 4e 55 4c 4c 20 66  context.  NULL f
1cca0 6f 72 20 6f 75 74 65 72 6d 6f 73 74 20 2a 2f 0a  or outermost */.
1ccb0 20 20 69 6e 74 20 6e 52 65 66 3b 20 20 20 20 20    int nRef;     
1ccc0 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
1ccd0 20 6f 66 20 6e 61 6d 65 73 20 72 65 73 6f 6c 76   of names resolv
1cce0 65 64 20 62 79 20 74 68 69 73 20 63 6f 6e 74 65  ed by this conte
1ccf0 78 74 20 2a 2f 0a 20 20 69 6e 74 20 6e 45 72 72  xt */.  int nErr
1cd00 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
1cd10 4e 75 6d 62 65 72 20 6f 66 20 65 72 72 6f 72 73  Number of errors
1cd20 20 65 6e 63 6f 75 6e 74 65 72 65 64 20 77 68 69   encountered whi
1cd30 6c 65 20 72 65 73 6f 6c 76 69 6e 67 20 6e 61 6d  le resolving nam
1cd40 65 73 20 2a 2f 0a 20 20 75 31 36 20 6e 63 46 6c  es */.  u16 ncFl
1cd50 61 67 73 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  ags;         /* 
1cd60 5a 65 72 6f 20 6f 72 20 6d 6f 72 65 20 4e 43 5f  Zero or more NC_
1cd70 2a 20 66 6c 61 67 73 20 64 65 66 69 6e 65 64 20  * flags defined 
1cd80 62 65 6c 6f 77 20 2a 2f 0a 20 20 53 65 6c 65 63  below */.  Selec
1cd90 74 20 2a 70 57 69 6e 53 65 6c 65 63 74 3b 20 20  t *pWinSelect;  
1cda0 2f 2a 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d  /* SELECT statem
1cdb0 65 6e 74 20 66 6f 72 20 61 6e 79 20 77 69 6e 64  ent for any wind
1cdc0 6f 77 20 66 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a  ow functions */.
1cdd0 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65  };../*.** Allowe
1cde0 64 20 76 61 6c 75 65 73 20 66 6f 72 20 74 68 65  d values for the
1cdf0 20 4e 61 6d 65 43 6f 6e 74 65 78 74 2c 20 6e 63   NameContext, nc
1ce00 46 6c 61 67 73 20 66 69 65 6c 64 2e 0a 2a 2a 0a  Flags field..**.
1ce10 2a 2a 20 56 61 6c 75 65 20 63 6f 6e 73 74 72 61  ** Value constra
1ce20 69 6e 74 73 20 28 61 6c 6c 20 63 68 65 63 6b 65  ints (all checke
1ce30 64 20 76 69 61 20 61 73 73 65 72 74 28 29 29 3a  d via assert()):
1ce40 0a 2a 2a 20 20 20 20 4e 43 5f 48 61 73 41 67 67  .**    NC_HasAgg
1ce50 20 20 20 20 3d 3d 20 53 46 5f 48 61 73 41 67 67      == SF_HasAgg
1ce60 0a 2a 2a 20 20 20 20 4e 43 5f 4d 69 6e 4d 61 78  .**    NC_MinMax
1ce70 41 67 67 20 3d 3d 20 53 46 5f 4d 69 6e 4d 61 78  Agg == SF_MinMax
1ce80 41 67 67 20 3d 3d 20 53 51 4c 49 54 45 5f 46 55  Agg == SQLITE_FU
1ce90 4e 43 5f 4d 49 4e 4d 41 58 0a 2a 2a 0a 2a 2f 0a  NC_MINMAX.**.*/.
1cea0 23 64 65 66 69 6e 65 20 4e 43 5f 41 6c 6c 6f 77  #define NC_Allow
1ceb0 41 67 67 20 20 30 78 30 30 30 31 20 20 2f 2a 20  Agg  0x0001  /* 
1cec0 41 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69  Aggregate functi
1ced0 6f 6e 73 20 61 72 65 20 61 6c 6c 6f 77 65 64 20  ons are allowed 
1cee0 68 65 72 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  here */.#define 
1cef0 4e 43 5f 50 61 72 74 49 64 78 20 20 20 30 78 30  NC_PartIdx   0x0
1cf00 30 30 32 20 20 2f 2a 20 54 72 75 65 20 69 66 20  002  /* True if 
1cf10 72 65 73 6f 6c 76 69 6e 67 20 61 20 70 61 72 74  resolving a part
1cf20 69 61 6c 20 69 6e 64 65 78 20 57 48 45 52 45 20  ial index WHERE 
1cf30 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 49 73  */.#define NC_Is
1cf40 43 68 65 63 6b 20 20 20 30 78 30 30 30 34 20 20  Check   0x0004  
1cf50 2f 2a 20 54 72 75 65 20 69 66 20 72 65 73 6f 6c  /* True if resol
1cf60 76 69 6e 67 20 6e 61 6d 65 73 20 69 6e 20 61 20  ving names in a 
1cf70 43 48 45 43 4b 20 63 6f 6e 73 74 72 61 69 6e 74  CHECK constraint
1cf80 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 49   */.#define NC_I
1cf90 6e 41 67 67 46 75 6e 63 20 30 78 30 30 30 38 20  nAggFunc 0x0008 
1cfa0 20 2f 2a 20 54 72 75 65 20 69 66 20 61 6e 61 6c   /* True if anal
1cfb0 79 7a 69 6e 67 20 61 72 67 75 6d 65 6e 74 73 20  yzing arguments 
1cfc0 74 6f 20 61 6e 20 61 67 67 20 66 75 6e 63 20 2a  to an agg func *
1cfd0 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 48 61 73  /.#define NC_Has
1cfe0 41 67 67 20 20 20 20 30 78 30 30 31 30 20 20 2f  Agg    0x0010  /
1cff0 2a 20 4f 6e 65 20 6f 72 20 6d 6f 72 65 20 61 67  * One or more ag
1d000 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e  gregate function
1d010 73 20 73 65 65 6e 20 2a 2f 0a 23 64 65 66 69 6e  s seen */.#defin
1d020 65 20 4e 43 5f 49 64 78 45 78 70 72 20 20 20 30  e NC_IdxExpr   0
1d030 78 30 30 32 30 20 20 2f 2a 20 54 72 75 65 20 69  x0020  /* True i
1d040 66 20 72 65 73 6f 6c 76 69 6e 67 20 63 6f 6c 75  f resolving colu
1d050 6d 6e 73 20 6f 66 20 43 52 45 41 54 45 20 49 4e  mns of CREATE IN
1d060 44 45 58 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e  DEX */.#define N
1d070 43 5f 56 61 72 53 65 6c 65 63 74 20 30 78 30 30  C_VarSelect 0x00
1d080 34 30 20 20 2f 2a 20 41 20 63 6f 72 72 65 6c 61  40  /* A correla
1d090 74 65 64 20 73 75 62 71 75 65 72 79 20 68 61 73  ted subquery has
1d0a0 20 62 65 65 6e 20 73 65 65 6e 20 2a 2f 0a 23 64   been seen */.#d
1d0b0 65 66 69 6e 65 20 4e 43 5f 55 45 4c 69 73 74 20  efine NC_UEList 
1d0c0 20 20 20 30 78 30 30 38 30 20 20 2f 2a 20 54 72     0x0080  /* Tr
1d0d0 75 65 20 69 66 20 75 4e 43 2e 70 45 4c 69 73 74  ue if uNC.pEList
1d0e0 20 69 73 20 75 73 65 64 20 2a 2f 0a 23 64 65 66   is used */.#def
1d0f0 69 6e 65 20 4e 43 5f 55 41 67 67 49 6e 66 6f 20  ine NC_UAggInfo 
1d100 20 30 78 30 31 30 30 20 20 2f 2a 20 54 72 75 65   0x0100  /* True
1d110 20 69 66 20 75 4e 43 2e 70 41 67 67 49 6e 66 6f   if uNC.pAggInfo
1d120 20 69 73 20 75 73 65 64 20 2a 2f 0a 23 64 65 66   is used */.#def
1d130 69 6e 65 20 4e 43 5f 55 55 70 73 65 72 74 20 20  ine NC_UUpsert  
1d140 20 30 78 30 32 30 30 20 20 2f 2a 20 54 72 75 65   0x0200  /* True
1d150 20 69 66 20 75 4e 43 2e 70 55 70 73 65 72 74 20   if uNC.pUpsert 
1d160 69 73 20 75 73 65 64 20 2a 2f 0a 23 64 65 66 69  is used */.#defi
1d170 6e 65 20 4e 43 5f 4d 69 6e 4d 61 78 41 67 67 20  ne NC_MinMaxAgg 
1d180 30 78 31 30 30 30 20 20 2f 2a 20 6d 69 6e 2f 6d  0x1000  /* min/m
1d190 61 78 20 61 67 67 72 65 67 61 74 65 73 20 73 65  ax aggregates se
1d1a0 65 6e 2e 20 20 53 65 65 20 6e 6f 74 65 20 61 62  en.  See note ab
1d1b0 6f 76 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e  ove */.#define N
1d1c0 43 5f 43 6f 6d 70 6c 65 78 20 20 20 30 78 32 30  C_Complex   0x20
1d1d0 30 30 20 20 2f 2a 20 54 72 75 65 20 69 66 20 61  00  /* True if a
1d1e0 20 66 75 6e 63 74 69 6f 6e 20 6f 72 20 73 75 62   function or sub
1d1f0 71 75 65 72 79 20 73 65 65 6e 20 2a 2f 0a 23 64  query seen */.#d
1d200 65 66 69 6e 65 20 4e 43 5f 41 6c 6c 6f 77 57 69  efine NC_AllowWi
1d210 6e 20 20 30 78 34 30 30 30 20 20 2f 2a 20 57 69  n  0x4000  /* Wi
1d220 6e 64 6f 77 20 66 75 6e 63 74 69 6f 6e 73 20 61  ndow functions a
1d230 72 65 20 61 6c 6c 6f 77 65 64 20 68 65 72 65 20  re allowed here 
1d240 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73  */../*.** An ins
1d250 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c  tance of the fol
1d260 6c 6f 77 69 6e 67 20 6f 62 6a 65 63 74 20 64 65  lowing object de
1d270 73 63 72 69 62 65 73 20 61 20 73 69 6e 67 6c 65  scribes a single
1d280 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 0a 2a 2a 20   ON CONFLICT.** 
1d290 63 6c 61 75 73 65 20 69 6e 20 61 6e 20 75 70 73  clause in an ups
1d2a0 65 72 74 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 70  ert..**.** The p
1d2b0 55 70 73 65 72 74 54 61 72 67 65 74 20 66 69 65  UpsertTarget fie
1d2c0 6c 64 20 69 73 20 6f 6e 6c 79 20 73 65 74 20 69  ld is only set i
1d2d0 66 20 74 68 65 20 4f 4e 20 43 4f 4e 46 4c 49 43  f the ON CONFLIC
1d2e0 54 20 63 6c 61 75 73 65 20 69 6e 63 6c 75 64 65  T clause include
1d2f0 73 0a 2a 2a 20 63 6f 6e 66 6c 69 63 74 2d 74 61  s.** conflict-ta
1d300 72 67 65 74 20 63 6c 61 75 73 65 2e 20 20 28 49  rget clause.  (I
1d310 6e 20 22 4f 4e 20 43 4f 4e 46 4c 49 43 54 28 61  n "ON CONFLICT(a
1d320 2c 62 29 22 20 74 68 65 20 22 28 61 2c 62 29 22  ,b)" the "(a,b)"
1d330 20 69 73 20 74 68 65 0a 2a 2a 20 63 6f 6e 66 6c   is the.** confl
1d340 69 63 74 2d 74 61 72 67 65 74 20 63 6c 61 75 73  ict-target claus
1d350 65 2e 29 20 20 54 68 65 20 70 55 70 73 65 72 74  e.)  The pUpsert
1d360 54 61 72 67 65 74 57 68 65 72 65 20 69 73 20 74  TargetWhere is t
1d370 68 65 20 6f 70 74 69 6f 6e 61 6c 0a 2a 2a 20 57  he optional.** W
1d380 48 45 52 45 20 63 6c 61 75 73 65 20 75 73 65 64  HERE clause used
1d390 20 74 6f 20 69 64 65 6e 74 69 66 79 20 70 61 72   to identify par
1d3a0 74 69 61 6c 20 75 6e 69 71 75 65 20 69 6e 64 65  tial unique inde
1d3b0 78 65 73 2e 0a 2a 2a 0a 2a 2a 20 70 55 70 73 65  xes..**.** pUpse
1d3c0 72 74 53 65 74 20 69 73 20 74 68 65 20 6c 69 73  rtSet is the lis
1d3d0 74 20 6f 66 20 63 6f 6c 75 6d 6e 3d 65 78 70 72  t of column=expr
1d3e0 20 74 65 72 6d 73 20 6f 66 20 74 68 65 20 55 50   terms of the UP
1d3f0 44 41 54 45 20 73 74 61 74 65 6d 65 6e 74 2e 20  DATE statement. 
1d400 0a 2a 2a 20 54 68 65 20 70 55 70 73 65 72 74 53  .** The pUpsertS
1d410 65 74 20 66 69 65 6c 64 20 69 73 20 4e 55 4c 4c  et field is NULL
1d420 20 66 6f 72 20 61 20 4f 4e 20 43 4f 4e 46 4c 49   for a ON CONFLI
1d430 43 54 20 44 4f 20 4e 4f 54 48 49 4e 47 2e 20 20  CT DO NOTHING.  
1d440 54 68 65 0a 2a 2a 20 70 55 70 73 65 72 74 57 68  The.** pUpsertWh
1d450 65 72 65 20 69 73 20 74 68 65 20 57 48 45 52 45  ere is the WHERE
1d460 20 63 6c 61 75 73 65 20 66 6f 72 20 74 68 65 20   clause for the 
1d470 55 50 44 41 54 45 20 61 6e 64 20 69 73 20 4e 55  UPDATE and is NU
1d480 4c 4c 20 69 66 20 74 68 65 0a 2a 2a 20 57 48 45  LL if the.** WHE
1d490 52 45 20 63 6c 61 75 73 65 20 69 73 20 6f 6d 69  RE clause is omi
1d4a0 74 74 65 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  tted..*/.struct 
1d4b0 55 70 73 65 72 74 20 7b 0a 20 20 45 78 70 72 4c  Upsert {.  ExprL
1d4c0 69 73 74 20 2a 70 55 70 73 65 72 74 54 61 72 67  ist *pUpsertTarg
1d4d0 65 74 3b 20 20 2f 2a 20 4f 70 74 69 6f 6e 61 6c  et;  /* Optional
1d4e0 20 64 65 73 63 72 69 70 74 69 6f 6e 20 6f 66 20   description of 
1d4f0 63 6f 6e 66 6c 69 63 74 69 6e 67 20 69 6e 64 65  conflicting inde
1d500 78 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 55 70  x */.  Expr *pUp
1d510 73 65 72 74 54 61 72 67 65 74 57 68 65 72 65 3b  sertTargetWhere;
1d520 20 2f 2a 20 57 48 45 52 45 20 63 6c 61 75 73 65   /* WHERE clause
1d530 20 66 6f 72 20 70 61 72 74 69 61 6c 20 69 6e 64   for partial ind
1d540 65 78 20 74 61 72 67 65 74 73 20 2a 2f 0a 20 20  ex targets */.  
1d550 45 78 70 72 4c 69 73 74 20 2a 70 55 70 73 65 72  ExprList *pUpser
1d560 74 53 65 74 3b 20 20 20 20 20 2f 2a 20 54 68 65  tSet;     /* The
1d570 20 53 45 54 20 63 6c 61 75 73 65 20 66 72 6f 6d   SET clause from
1d580 20 61 6e 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20   an ON CONFLICT 
1d590 55 50 44 41 54 45 20 2a 2f 0a 20 20 45 78 70 72  UPDATE */.  Expr
1d5a0 20 2a 70 55 70 73 65 72 74 57 68 65 72 65 3b 20   *pUpsertWhere; 
1d5b0 20 20 20 20 20 20 2f 2a 20 57 48 45 52 45 20 63        /* WHERE c
1d5c0 6c 61 75 73 65 20 66 6f 72 20 74 68 65 20 4f 4e  lause for the ON
1d5d0 20 43 4f 4e 46 4c 49 43 54 20 55 50 44 41 54 45   CONFLICT UPDATE
1d5e0 20 2a 2f 0a 20 20 2f 2a 20 54 68 65 20 66 69 65   */.  /* The fie
1d5f0 6c 64 73 20 61 62 6f 76 65 20 63 6f 6d 70 72 69  lds above compri
1d600 73 65 20 74 68 65 20 70 61 72 73 65 20 74 72 65  se the parse tre
1d610 65 20 66 6f 72 20 74 68 65 20 75 70 73 65 72 74  e for the upsert
1d620 20 63 6c 61 75 73 65 2e 0a 20 20 2a 2a 20 54 68   clause..  ** Th
1d630 65 20 66 69 65 6c 64 73 20 62 65 6c 6f 77 20 61  e fields below a
1d640 72 65 20 75 73 65 64 20 74 6f 20 74 72 61 6e 73  re used to trans
1d650 66 65 72 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  fer information 
1d660 66 72 6f 6d 20 74 68 65 20 49 4e 53 45 52 54 0a  from the INSERT.
1d670 20 20 2a 2a 20 70 72 6f 63 65 73 73 69 6e 67 20    ** processing 
1d680 64 6f 77 6e 20 69 6e 74 6f 20 74 68 65 20 55 50  down into the UP
1d690 44 41 54 45 20 70 72 6f 63 65 73 73 69 6e 67 20  DATE processing 
1d6a0 77 68 69 6c 65 20 67 65 6e 65 72 61 74 69 6e 67  while generating
1d6b0 20 63 6f 64 65 2e 0a 20 20 2a 2a 20 55 70 73 65   code..  ** Upse
1d6c0 72 74 20 6f 77 6e 73 20 74 68 65 20 6d 65 6d 6f  rt owns the memo
1d6d0 72 79 20 61 6c 6c 6f 63 61 74 65 64 20 61 62 6f  ry allocated abo
1d6e0 76 65 2c 20 62 75 74 20 6e 6f 74 20 74 68 65 20  ve, but not the 
1d6f0 6d 65 6d 6f 72 79 20 62 65 6c 6f 77 2e 20 2a 2f  memory below. */
1d700 0a 20 20 49 6e 64 65 78 20 2a 70 55 70 73 65 72  .  Index *pUpser
1d710 74 49 64 78 3b 20 20 20 20 20 20 20 20 2f 2a 20  tIdx;        /* 
1d720 43 6f 6e 73 74 72 61 69 6e 74 20 74 68 61 74 20  Constraint that 
1d730 70 55 70 73 65 72 74 54 61 72 67 65 74 20 69 64  pUpsertTarget id
1d740 65 6e 74 69 66 69 65 73 20 2a 2f 0a 20 20 53 72  entifies */.  Sr
1d750 63 4c 69 73 74 20 2a 70 55 70 73 65 72 74 53 72  cList *pUpsertSr
1d760 63 3b 20 20 20 20 20 20 2f 2a 20 54 61 62 6c 65  c;      /* Table
1d770 20 74 6f 20 62 65 20 75 70 64 61 74 65 64 20 2a   to be updated *
1d780 2f 0a 20 20 69 6e 74 20 72 65 67 44 61 74 61 3b  /.  int regData;
1d790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1d7a0 20 46 69 72 73 74 20 72 65 67 69 73 74 65 72 20   First register 
1d7b0 68 6f 6c 64 69 6e 67 20 61 72 72 61 79 20 6f 66  holding array of
1d7c0 20 56 41 4c 55 45 53 20 2a 2f 0a 20 20 69 6e 74   VALUES */.  int
1d7d0 20 69 44 61 74 61 43 75 72 3b 20 20 20 20 20 20   iDataCur;      
1d7e0 20 20 20 20 20 20 20 2f 2a 20 49 6e 64 65 78 20         /* Index 
1d7f0 6f 66 20 74 68 65 20 64 61 74 61 20 63 75 72 73  of the data curs
1d800 6f 72 20 2a 2f 0a 20 20 69 6e 74 20 69 49 64 78  or */.  int iIdx
1d810 43 75 72 3b 20 20 20 20 20 20 20 20 20 20 20 20  Cur;            
1d820 20 20 2f 2a 20 49 6e 64 65 78 20 6f 66 20 74 68    /* Index of th
1d830 65 20 66 69 72 73 74 20 69 6e 64 65 78 20 63 75  e first index cu
1d840 72 73 6f 72 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  rsor */.};../*.*
1d850 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  * An instance of
1d860 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   the following s
1d870 74 72 75 63 74 75 72 65 20 63 6f 6e 74 61 69 6e  tructure contain
1d880 73 20 61 6c 6c 20 69 6e 66 6f 72 6d 61 74 69 6f  s all informatio
1d890 6e 0a 2a 2a 20 6e 65 65 64 65 64 20 74 6f 20 67  n.** needed to g
1d8a0 65 6e 65 72 61 74 65 20 63 6f 64 65 20 66 6f 72  enerate code for
1d8b0 20 61 20 73 69 6e 67 6c 65 20 53 45 4c 45 43 54   a single SELECT
1d8c0 20 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2a 0a 2a   statement..**.*
1d8d0 2a 20 53 65 65 20 74 68 65 20 68 65 61 64 65 72  * See the header
1d8e0 20 63 6f 6d 6d 65 6e 74 20 6f 6e 20 74 68 65 20   comment on the 
1d8f0 63 6f 6d 70 75 74 65 4c 69 6d 69 74 52 65 67 69  computeLimitRegi
1d900 73 74 65 72 73 28 29 20 72 6f 75 74 69 6e 65 20  sters() routine 
1d910 66 6f 72 20 61 0a 2a 2a 20 64 65 74 61 69 6c 65  for a.** detaile
1d920 64 20 64 65 73 63 72 69 70 74 69 6f 6e 20 6f 66  d description of
1d930 20 74 68 65 20 6d 65 61 6e 69 6e 67 20 6f 66 20   the meaning of 
1d940 74 68 65 20 69 4c 69 6d 69 74 20 61 6e 64 20 69  the iLimit and i
1d950 4f 66 66 73 65 74 20 66 69 65 6c 64 73 2e 0a 2a  Offset fields..*
1d960 2a 0a 2a 2a 20 61 64 64 72 4f 70 65 6e 45 70 68  *.** addrOpenEph
1d970 6d 5b 5d 20 65 6e 74 72 69 65 73 20 63 6f 6e 74  m[] entries cont
1d980 61 69 6e 20 74 68 65 20 61 64 64 72 65 73 73 20  ain the address 
1d990 6f 66 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 65  of OP_OpenEpheme
1d9a0 72 61 6c 20 6f 70 63 6f 64 65 73 2e 0a 2a 2a 20  ral opcodes..** 
1d9b0 54 68 65 73 65 20 61 64 64 72 65 73 73 65 73 20  These addresses 
1d9c0 6d 75 73 74 20 62 65 20 73 74 6f 72 65 64 20 73  must be stored s
1d9d0 6f 20 74 68 61 74 20 77 65 20 63 61 6e 20 67 6f  o that we can go
1d9e0 20 62 61 63 6b 20 61 6e 64 20 66 69 6c 6c 20 69   back and fill i
1d9f0 6e 0a 2a 2a 20 74 68 65 20 50 34 5f 4b 45 59 49  n.** the P4_KEYI
1da00 4e 46 4f 20 61 6e 64 20 50 32 20 70 61 72 61 6d  NFO and P2 param
1da10 65 74 65 72 73 20 6c 61 74 65 72 2e 20 20 4e 65  eters later.  Ne
1da20 69 74 68 65 72 20 74 68 65 20 4b 65 79 49 6e 66  ither the KeyInf
1da30 6f 20 6e 6f 72 0a 2a 2a 20 74 68 65 20 6e 75 6d  o nor.** the num
1da40 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69  ber of columns i
1da50 6e 20 50 32 20 63 61 6e 20 62 65 20 63 6f 6d 70  n P2 can be comp
1da60 75 74 65 64 20 61 74 20 74 68 65 20 73 61 6d 65  uted at the same
1da70 20 74 69 6d 65 0a 2a 2a 20 61 73 20 74 68 65 20   time.** as the 
1da80 4f 50 5f 4f 70 65 6e 45 70 68 6d 20 69 6e 73 74  OP_OpenEphm inst
1da90 72 75 63 74 69 6f 6e 20 69 73 20 63 6f 64 65 64  ruction is coded
1daa0 20 62 65 63 61 75 73 65 20 6e 6f 74 0a 2a 2a 20   because not.** 
1dab0 65 6e 6f 75 67 68 20 69 6e 66 6f 72 6d 61 74 69  enough informati
1dac0 6f 6e 20 61 62 6f 75 74 20 74 68 65 20 63 6f 6d  on about the com
1dad0 70 6f 75 6e 64 20 71 75 65 72 79 20 69 73 20 6b  pound query is k
1dae0 6e 6f 77 6e 20 61 74 20 74 68 61 74 20 70 6f 69  nown at that poi
1daf0 6e 74 2e 0a 2a 2a 20 54 68 65 20 4b 65 79 49 6e  nt..** The KeyIn
1db00 66 6f 20 66 6f 72 20 61 64 64 72 4f 70 65 6e 54  fo for addrOpenT
1db10 72 61 6e 5b 30 5d 20 61 6e 64 20 5b 31 5d 20 63  ran[0] and [1] c
1db20 6f 6e 74 61 69 6e 73 20 63 6f 6c 6c 61 74 69 6e  ontains collatin
1db30 67 20 73 65 71 75 65 6e 63 65 73 0a 2a 2a 20 66  g sequences.** f
1db40 6f 72 20 74 68 65 20 72 65 73 75 6c 74 20 73 65  or the result se
1db50 74 2e 20 20 54 68 65 20 4b 65 79 49 6e 66 6f 20  t.  The KeyInfo 
1db60 66 6f 72 20 61 64 64 72 4f 70 65 6e 45 70 68 6d  for addrOpenEphm
1db70 5b 32 5d 20 63 6f 6e 74 61 69 6e 73 20 63 6f 6c  [2] contains col
1db80 6c 61 74 69 6e 67 0a 2a 2a 20 73 65 71 75 65 6e  lating.** sequen
1db90 63 65 73 20 66 6f 72 20 74 68 65 20 4f 52 44 45  ces for the ORDE
1dba0 52 20 42 59 20 63 6c 61 75 73 65 2e 0a 2a 2f 0a  R BY clause..*/.
1dbb0 73 74 72 75 63 74 20 53 65 6c 65 63 74 20 7b 0a  struct Select {.
1dbc0 20 20 45 78 70 72 4c 69 73 74 20 2a 70 45 4c 69    ExprList *pELi
1dbd0 73 74 3b 20 20 20 20 20 20 2f 2a 20 54 68 65 20  st;      /* The 
1dbe0 66 69 65 6c 64 73 20 6f 66 20 74 68 65 20 72 65  fields of the re
1dbf0 73 75 6c 74 20 2a 2f 0a 20 20 75 38 20 6f 70 3b  sult */.  u8 op;
1dc00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dc10 20 2f 2a 20 4f 6e 65 20 6f 66 3a 20 54 4b 5f 55   /* One of: TK_U
1dc20 4e 49 4f 4e 20 54 4b 5f 41 4c 4c 20 54 4b 5f 49  NION TK_ALL TK_I
1dc30 4e 54 45 52 53 45 43 54 20 54 4b 5f 45 58 43 45  NTERSECT TK_EXCE
1dc40 50 54 20 2a 2f 0a 20 20 4c 6f 67 45 73 74 20 6e  PT */.  LogEst n
1dc50 53 65 6c 65 63 74 52 6f 77 3b 20 20 20 20 20 2f  SelectRow;     /
1dc60 2a 20 45 73 74 69 6d 61 74 65 64 20 6e 75 6d 62  * Estimated numb
1dc70 65 72 20 6f 66 20 72 65 73 75 6c 74 20 72 6f 77  er of result row
1dc80 73 20 2a 2f 0a 20 20 75 33 32 20 73 65 6c 46 6c  s */.  u32 selFl
1dc90 61 67 73 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  ags;          /*
1dca0 20 56 61 72 69 6f 75 73 20 53 46 5f 2a 20 76 61   Various SF_* va
1dcb0 6c 75 65 73 20 2a 2f 0a 20 20 69 6e 74 20 69 4c  lues */.  int iL
1dcc0 69 6d 69 74 2c 20 69 4f 66 66 73 65 74 3b 20 20  imit, iOffset;  
1dcd0 20 2f 2a 20 4d 65 6d 6f 72 79 20 72 65 67 69 73   /* Memory regis
1dce0 74 65 72 73 20 68 6f 6c 64 69 6e 67 20 4c 49 4d  ters holding LIM
1dcf0 49 54 20 26 20 4f 46 46 53 45 54 20 63 6f 75 6e  IT & OFFSET coun
1dd00 74 65 72 73 20 2a 2f 0a 20 20 75 33 32 20 73 65  ters */.  u32 se
1dd10 6c 49 64 3b 20 20 20 20 20 20 20 20 20 20 20 20  lId;            
1dd20 20 2f 2a 20 55 6e 69 71 75 65 20 69 64 65 6e 74   /* Unique ident
1dd30 69 66 69 65 72 20 6e 75 6d 62 65 72 20 66 6f 72  ifier number for
1dd40 20 74 68 69 73 20 53 45 4c 45 43 54 20 2a 2f 0a   this SELECT */.
1dd50 20 20 69 6e 74 20 61 64 64 72 4f 70 65 6e 45 70    int addrOpenEp
1dd60 68 6d 5b 32 5d 3b 20 20 20 2f 2a 20 4f 50 5f 4f  hm[2];   /* OP_O
1dd70 70 65 6e 45 70 68 65 6d 20 6f 70 63 6f 64 65 73  penEphem opcodes
1dd80 20 72 65 6c 61 74 65 64 20 74 6f 20 74 68 69 73   related to this
1dd90 20 73 65 6c 65 63 74 20 2a 2f 0a 20 20 53 72 63   select */.  Src
1dda0 4c 69 73 74 20 2a 70 53 72 63 3b 20 20 20 20 20  List *pSrc;     
1ddb0 20 20 20 20 2f 2a 20 54 68 65 20 46 52 4f 4d 20      /* The FROM 
1ddc0 63 6c 61 75 73 65 20 2a 2f 0a 20 20 45 78 70 72  clause */.  Expr
1ddd0 20 2a 70 57 68 65 72 65 3b 20 20 20 20 20 20 20   *pWhere;       
1dde0 20 20 20 2f 2a 20 54 68 65 20 57 48 45 52 45 20     /* The WHERE 
1ddf0 63 6c 61 75 73 65 20 2a 2f 0a 20 20 45 78 70 72  clause */.  Expr
1de00 4c 69 73 74 20 2a 70 47 72 6f 75 70 42 79 3b 20  List *pGroupBy; 
1de10 20 20 20 2f 2a 20 54 68 65 20 47 52 4f 55 50 20     /* The GROUP 
1de20 42 59 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 45  BY clause */.  E
1de30 78 70 72 20 2a 70 48 61 76 69 6e 67 3b 20 20 20  xpr *pHaving;   
1de40 20 20 20 20 20 20 2f 2a 20 54 68 65 20 48 41 56        /* The HAV
1de50 49 4e 47 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20  ING clause */.  
1de60 45 78 70 72 4c 69 73 74 20 2a 70 4f 72 64 65 72  ExprList *pOrder
1de70 42 79 3b 20 20 20 20 2f 2a 20 54 68 65 20 4f 52  By;    /* The OR
1de80 44 45 52 20 42 59 20 63 6c 61 75 73 65 20 2a 2f  DER BY clause */
1de90 0a 20 20 53 65 6c 65 63 74 20 2a 70 50 72 69 6f  .  Select *pPrio
1dea0 72 3b 20 20 20 20 20 20 20 20 2f 2a 20 50 72 69  r;        /* Pri
1deb0 6f 72 20 73 65 6c 65 63 74 20 69 6e 20 61 20 63  or select in a c
1dec0 6f 6d 70 6f 75 6e 64 20 73 65 6c 65 63 74 20 73  ompound select s
1ded0 74 61 74 65 6d 65 6e 74 20 2a 2f 0a 20 20 53 65  tatement */.  Se
1dee0 6c 65 63 74 20 2a 70 4e 65 78 74 3b 20 20 20 20  lect *pNext;    
1def0 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 73 65 6c       /* Next sel
1df00 65 63 74 20 74 6f 20 74 68 65 20 6c 65 66 74 20  ect to the left 
1df10 69 6e 20 61 20 63 6f 6d 70 6f 75 6e 64 20 2a 2f  in a compound */
1df20 0a 20 20 45 78 70 72 20 2a 70 4c 69 6d 69 74 3b  .  Expr *pLimit;
1df30 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 49 4d            /* LIM
1df40 49 54 20 65 78 70 72 65 73 73 69 6f 6e 2e 20 4e  IT expression. N
1df50 55 4c 4c 20 6d 65 61 6e 73 20 6e 6f 74 20 75 73  ULL means not us
1df60 65 64 2e 20 2a 2f 0a 20 20 57 69 74 68 20 2a 70  ed. */.  With *p
1df70 57 69 74 68 3b 20 20 20 20 20 20 20 20 20 20 20  With;           
1df80 2f 2a 20 57 49 54 48 20 63 6c 61 75 73 65 20 61  /* WITH clause a
1df90 74 74 61 63 68 65 64 20 74 6f 20 74 68 69 73 20  ttached to this 
1dfa0 73 65 6c 65 63 74 2e 20 4f 72 20 4e 55 4c 4c 2e  select. Or NULL.
1dfb0 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49   */.#ifndef SQLI
1dfc0 54 45 5f 4f 4d 49 54 5f 57 49 4e 44 4f 57 46 55  TE_OMIT_WINDOWFU
1dfd0 4e 43 0a 20 20 57 69 6e 64 6f 77 20 2a 70 57 69  NC.  Window *pWi
1dfe0 6e 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c  n;          /* L
1dff0 69 73 74 20 6f 66 20 77 69 6e 64 6f 77 20 66 75  ist of window fu
1e000 6e 63 74 69 6f 6e 73 20 2a 2f 0a 20 20 57 69 6e  nctions */.  Win
1e010 64 6f 77 20 2a 70 57 69 6e 44 65 66 6e 3b 20 20  dow *pWinDefn;  
1e020 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 6e      /* List of n
1e030 61 6d 65 64 20 77 69 6e 64 6f 77 20 64 65 66 69  amed window defi
1e040 6e 69 74 69 6f 6e 73 20 2a 2f 0a 23 65 6e 64 69  nitions */.#endi
1e050 66 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f  f.};../*.** Allo
1e060 77 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20 53  wed values for S
1e070 65 6c 65 63 74 2e 73 65 6c 46 6c 61 67 73 2e 20  elect.selFlags. 
1e080 20 54 68 65 20 22 53 46 22 20 70 72 65 66 69 78   The "SF" prefix
1e090 20 73 74 61 6e 64 73 20 66 6f 72 0a 2a 2a 20 22   stands for.** "
1e0a0 53 65 6c 65 63 74 20 46 6c 61 67 22 2e 0a 2a 2a  Select Flag"..**
1e0b0 0a 2a 2a 20 56 61 6c 75 65 20 63 6f 6e 73 74 72  .** Value constr
1e0c0 61 69 6e 74 73 20 28 61 6c 6c 20 63 68 65 63 6b  aints (all check
1e0d0 65 64 20 76 69 61 20 61 73 73 65 72 74 28 29 29  ed via assert())
1e0e0 0a 2a 2a 20 20 20 20 20 53 46 5f 48 61 73 41 67  .**     SF_HasAg
1e0f0 67 20 20 20 20 20 3d 3d 20 4e 43 5f 48 61 73 41  g     == NC_HasA
1e100 67 67 0a 2a 2a 20 20 20 20 20 53 46 5f 4d 69 6e  gg.**     SF_Min
1e110 4d 61 78 41 67 67 20 20 3d 3d 20 4e 43 5f 4d 69  MaxAgg  == NC_Mi
1e120 6e 4d 61 78 41 67 67 20 20 20 20 20 3d 3d 20 53  nMaxAgg     == S
1e130 51 4c 49 54 45 5f 46 55 4e 43 5f 4d 49 4e 4d 41  QLITE_FUNC_MINMA
1e140 58 0a 2a 2a 20 20 20 20 20 53 46 5f 46 69 78 65  X.**     SF_Fixe
1e150 64 4c 69 6d 69 74 20 3d 3d 20 57 48 45 52 45 5f  dLimit == WHERE_
1e160 55 53 45 5f 4c 49 4d 49 54 0a 2a 2f 0a 23 64 65  USE_LIMIT.*/.#de
1e170 66 69 6e 65 20 53 46 5f 44 69 73 74 69 6e 63 74  fine SF_Distinct
1e180 20 20 20 20 20 20 20 30 78 30 30 30 30 31 20 20         0x00001  
1e190 2f 2a 20 4f 75 74 70 75 74 20 73 68 6f 75 6c 64  /* Output should
1e1a0 20 62 65 20 44 49 53 54 49 4e 43 54 20 2a 2f 0a   be DISTINCT */.
1e1b0 23 64 65 66 69 6e 65 20 53 46 5f 41 6c 6c 20 20  #define SF_All  
1e1c0 20 20 20 20 20 20 20 20 20 20 30 78 30 30 30 30            0x0000
1e1d0 32 20 20 2f 2a 20 49 6e 63 6c 75 64 65 73 20 74  2  /* Includes t
1e1e0 68 65 20 41 4c 4c 20 6b 65 79 77 6f 72 64 20 2a  he ALL keyword *
1e1f0 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 52 65 73  /.#define SF_Res
1e200 6f 6c 76 65 64 20 20 20 20 20 20 20 30 78 30 30  olved       0x00
1e210 30 30 34 20 20 2f 2a 20 49 64 65 6e 74 69 66 69  004  /* Identifi
1e220 65 72 73 20 68 61 76 65 20 62 65 65 6e 20 72 65  ers have been re
1e230 73 6f 6c 76 65 64 20 2a 2f 0a 23 64 65 66 69 6e  solved */.#defin
1e240 65 20 53 46 5f 41 67 67 72 65 67 61 74 65 20 20  e SF_Aggregate  
1e250 20 20 20 20 30 78 30 30 30 30 38 20 20 2f 2a 20      0x00008  /* 
1e260 43 6f 6e 74 61 69 6e 73 20 61 67 67 20 66 75 6e  Contains agg fun
1e270 63 74 69 6f 6e 73 20 6f 72 20 61 20 47 52 4f 55  ctions or a GROU
1e280 50 20 42 59 20 2a 2f 0a 23 64 65 66 69 6e 65 20  P BY */.#define 
1e290 53 46 5f 48 61 73 41 67 67 20 20 20 20 20 20 20  SF_HasAgg       
1e2a0 20 20 30 78 30 30 30 31 30 20 20 2f 2a 20 43 6f    0x00010  /* Co
1e2b0 6e 74 61 69 6e 73 20 61 67 67 72 65 67 61 74 65  ntains aggregate
1e2c0 20 66 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a 23 64   functions */.#d
1e2d0 65 66 69 6e 65 20 53 46 5f 55 73 65 73 45 70 68  efine SF_UsesEph
1e2e0 65 6d 65 72 61 6c 20 20 30 78 30 30 30 32 30 20  emeral  0x00020 
1e2f0 20 2f 2a 20 55 73 65 73 20 74 68 65 20 4f 70 65   /* Uses the Ope
1e300 6e 45 70 68 65 6d 65 72 61 6c 20 6f 70 63 6f 64  nEphemeral opcod
1e310 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f  e */.#define SF_
1e320 45 78 70 61 6e 64 65 64 20 20 20 20 20 20 20 30  Expanded       0
1e330 78 30 30 30 34 30 20 20 2f 2a 20 73 71 6c 69 74  x00040  /* sqlit
1e340 65 33 53 65 6c 65 63 74 45 78 70 61 6e 64 28 29  e3SelectExpand()
1e350 20 63 61 6c 6c 65 64 20 6f 6e 20 74 68 69 73 20   called on this 
1e360 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 48 61  */.#define SF_Ha
1e370 73 54 79 70 65 49 6e 66 6f 20 20 20 20 30 78 30  sTypeInfo    0x0
1e380 30 30 38 30 20 20 2f 2a 20 46 52 4f 4d 20 73 75  0080  /* FROM su
1e390 62 71 75 65 72 69 65 73 20 68 61 76 65 20 54 61  bqueries have Ta
1e3a0 62 6c 65 20 6d 65 74 61 64 61 74 61 20 2a 2f 0a  ble metadata */.
1e3b0 23 64 65 66 69 6e 65 20 53 46 5f 43 6f 6d 70 6f  #define SF_Compo
1e3c0 75 6e 64 20 20 20 20 20 20 20 30 78 30 30 31 30  und       0x0010
1e3d0 30 20 20 2f 2a 20 50 61 72 74 20 6f 66 20 61 20  0  /* Part of a 
1e3e0 63 6f 6d 70 6f 75 6e 64 20 71 75 65 72 79 20 2a  compound query *
1e3f0 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 56 61 6c  /.#define SF_Val
1e400 75 65 73 20 20 20 20 20 20 20 20 20 30 78 30 30  ues         0x00
1e410 32 30 30 20 20 2f 2a 20 53 79 6e 74 68 65 73 69  200  /* Synthesi
1e420 7a 65 64 20 66 72 6f 6d 20 56 41 4c 55 45 53 20  zed from VALUES 
1e430 63 6c 61 75 73 65 20 2a 2f 0a 23 64 65 66 69 6e  clause */.#defin
1e440 65 20 53 46 5f 4d 75 6c 74 69 56 61 6c 75 65 20  e SF_MultiValue 
1e450 20 20 20 20 30 78 30 30 34 30 30 20 20 2f 2a 20      0x00400  /* 
1e460 53 69 6e 67 6c 65 20 56 41 4c 55 45 53 20 74 65  Single VALUES te
1e470 72 6d 20 77 69 74 68 20 6d 75 6c 74 69 70 6c 65  rm with multiple
1e480 20 72 6f 77 73 20 2a 2f 0a 23 64 65 66 69 6e 65   rows */.#define
1e490 20 53 46 5f 4e 65 73 74 65 64 46 72 6f 6d 20 20   SF_NestedFrom  
1e4a0 20 20 20 30 78 30 30 38 30 30 20 20 2f 2a 20 50     0x00800  /* P
1e4b0 61 72 74 20 6f 66 20 61 20 70 61 72 65 6e 74 68  art of a parenth
1e4c0 65 73 69 7a 65 64 20 46 52 4f 4d 20 63 6c 61 75  esized FROM clau
1e4d0 73 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46  se */.#define SF
1e4e0 5f 4d 69 6e 4d 61 78 41 67 67 20 20 20 20 20 20  _MinMaxAgg      
1e4f0 30 78 30 31 30 30 30 20 20 2f 2a 20 41 67 67 72  0x01000  /* Aggr
1e500 65 67 61 74 65 20 63 6f 6e 74 61 69 6e 69 6e 67  egate containing
1e510 20 6d 69 6e 28 29 20 6f 72 20 6d 61 78 28 29 20   min() or max() 
1e520 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 52 65  */.#define SF_Re
1e530 63 75 72 73 69 76 65 20 20 20 20 20 20 30 78 30  cursive      0x0
1e540 32 30 30 30 20 20 2f 2a 20 54 68 65 20 72 65 63  2000  /* The rec
1e550 75 72 73 69 76 65 20 70 61 72 74 20 6f 66 20 61  ursive part of a
1e560 20 72 65 63 75 72 73 69 76 65 20 43 54 45 20 2a   recursive CTE *
1e570 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 46 69 78  /.#define SF_Fix
1e580 65 64 4c 69 6d 69 74 20 20 20 20 20 30 78 30 34  edLimit     0x04
1e590 30 30 30 20 20 2f 2a 20 6e 53 65 6c 65 63 74 52  000  /* nSelectR
1e5a0 6f 77 20 73 65 74 20 62 79 20 61 20 63 6f 6e 73  ow set by a cons
1e5b0 74 61 6e 74 20 4c 49 4d 49 54 20 2a 2f 0a 23 64  tant LIMIT */.#d
1e5c0 65 66 69 6e 65 20 53 46 5f 4d 61 79 62 65 43 6f  efine SF_MaybeCo
1e5d0 6e 76 65 72 74 20 20 20 30 78 30 38 30 30 30 20  nvert   0x08000 
1e5e0 20 2f 2a 20 4e 65 65 64 20 63 6f 6e 76 65 72 74   /* Need convert
1e5f0 43 6f 6d 70 6f 75 6e 64 53 65 6c 65 63 74 54 6f  CompoundSelectTo
1e600 53 75 62 71 75 65 72 79 28 29 20 2a 2f 0a 23 64  Subquery() */.#d
1e610 65 66 69 6e 65 20 53 46 5f 43 6f 6e 76 65 72 74  efine SF_Convert
1e620 65 64 20 20 20 20 20 20 30 78 31 30 30 30 30 20  ed      0x10000 
1e630 20 2f 2a 20 42 79 20 63 6f 6e 76 65 72 74 43 6f   /* By convertCo
1e640 6d 70 6f 75 6e 64 53 65 6c 65 63 74 54 6f 53 75  mpoundSelectToSu
1e650 62 71 75 65 72 79 28 29 20 2a 2f 0a 23 64 65 66  bquery() */.#def
1e660 69 6e 65 20 53 46 5f 49 6e 63 6c 75 64 65 48 69  ine SF_IncludeHi
1e670 64 64 65 6e 20 20 30 78 32 30 30 30 30 20 20 2f  dden  0x20000  /
1e680 2a 20 49 6e 63 6c 75 64 65 20 68 69 64 64 65 6e  * Include hidden
1e690 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 6f 75 74 70   columns in outp
1e6a0 75 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46  ut */.#define SF
1e6b0 5f 43 6f 6d 70 6c 65 78 52 65 73 75 6c 74 20 20  _ComplexResult  
1e6c0 30 78 34 30 30 30 30 20 20 2f 2a 20 52 65 73 75  0x40000  /* Resu
1e6d0 6c 74 20 63 6f 6e 74 61 69 6e 73 20 73 75 62 71  lt contains subq
1e6e0 75 65 72 79 20 6f 72 20 66 75 6e 63 74 69 6f 6e  uery or function
1e6f0 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 72   */../*.** The r
1e700 65 73 75 6c 74 73 20 6f 66 20 61 20 53 45 4c 45  esults of a SELE
1e710 43 54 20 63 61 6e 20 62 65 20 64 69 73 74 72 69  CT can be distri
1e720 62 75 74 65 64 20 69 6e 20 73 65 76 65 72 61 6c  buted in several
1e730 20 77 61 79 73 2c 20 61 73 20 64 65 66 69 6e 65   ways, as define
1e740 64 0a 2a 2a 20 62 79 20 6f 6e 65 20 6f 66 20 74  d.** by one of t
1e750 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63  he following mac
1e760 72 6f 73 2e 20 20 54 68 65 20 22 53 52 54 22 20  ros.  The "SRT" 
1e770 70 72 65 66 69 78 20 6d 65 61 6e 73 20 22 53 45  prefix means "SE
1e780 4c 45 43 54 20 52 65 73 75 6c 74 0a 2a 2a 20 54  LECT Result.** T
1e790 79 70 65 22 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20  ype"..**.**     
1e7a0 53 52 54 5f 55 6e 69 6f 6e 20 20 20 20 20 20 20  SRT_Union       
1e7b0 53 74 6f 72 65 20 72 65 73 75 6c 74 73 20 61 73  Store results as
1e7c0 20 61 20 6b 65 79 20 69 6e 20 61 20 74 65 6d 70   a key in a temp
1e7d0 6f 72 61 72 79 20 69 6e 64 65 78 0a 2a 2a 20 20  orary index.**  
1e7e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e7f0 20 20 20 69 64 65 6e 74 69 66 69 65 64 20 62 79     identified by
1e800 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 2e   pDest->iSDParm.
1e810 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 45  .**.**     SRT_E
1e820 78 63 65 70 74 20 20 20 20 20 20 52 65 6d 6f 76  xcept      Remov
1e830 65 20 72 65 73 75 6c 74 73 20 66 72 6f 6d 20 74  e results from t
1e840 68 65 20 74 65 6d 70 6f 72 61 72 79 20 69 6e 64  he temporary ind
1e850 65 78 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72  ex pDest->iSDPar
1e860 6d 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54  m..**.**     SRT
1e870 5f 45 78 69 73 74 73 20 20 20 20 20 20 53 74 6f  _Exists      Sto
1e880 72 65 20 61 20 31 20 69 6e 20 6d 65 6d 6f 72 79  re a 1 in memory
1e890 20 63 65 6c 6c 20 70 44 65 73 74 2d 3e 69 53 44   cell pDest->iSD
1e8a0 50 61 72 6d 20 69 66 20 74 68 65 20 72 65 73 75  Parm if the resu
1e8b0 6c 74 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  lt.**           
1e8c0 20 20 20 20 20 20 20 20 20 20 73 65 74 20 69 73            set is
1e8d0 20 6e 6f 74 20 65 6d 70 74 79 2e 0a 2a 2a 0a 2a   not empty..**.*
1e8e0 2a 20 20 20 20 20 53 52 54 5f 44 69 73 63 61 72  *     SRT_Discar
1e8f0 64 20 20 20 20 20 54 68 72 6f 77 20 74 68 65 20  d     Throw the 
1e900 72 65 73 75 6c 74 73 20 61 77 61 79 2e 20 20 54  results away.  T
1e910 68 69 73 20 69 73 20 75 73 65 64 20 62 79 20 53  his is used by S
1e920 45 4c 45 43 54 0a 2a 2a 20 20 20 20 20 20 20 20  ELECT.**        
1e930 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 61               sta
1e940 74 65 6d 65 6e 74 73 20 77 69 74 68 69 6e 20 74  tements within t
1e950 72 69 67 67 65 72 73 20 77 68 6f 73 65 20 6f 6e  riggers whose on
1e960 6c 79 20 70 75 72 70 6f 73 65 20 69 73 0a 2a 2a  ly purpose is.**
1e970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e980 20 20 20 20 20 74 68 65 20 73 69 64 65 2d 65 66       the side-ef
1e990 66 65 63 74 73 20 6f 66 20 66 75 6e 63 74 69 6f  fects of functio
1e9a0 6e 73 2e 0a 2a 2a 0a 2a 2a 20 41 6c 6c 20 6f 66  ns..**.** All of
1e9b0 20 74 68 65 20 61 62 6f 76 65 20 61 72 65 20 66   the above are f
1e9c0 72 65 65 20 74 6f 20 69 67 6e 6f 72 65 20 74 68  ree to ignore th
1e9d0 65 69 72 20 4f 52 44 45 52 20 42 59 20 63 6c 61  eir ORDER BY cla
1e9e0 75 73 65 2e 20 54 68 6f 73 65 20 74 68 61 74 0a  use. Those that.
1e9f0 2a 2a 20 66 6f 6c 6c 6f 77 20 6d 75 73 74 20 68  ** follow must h
1ea00 6f 6e 6f 72 20 74 68 65 20 4f 52 44 45 52 20 42  onor the ORDER B
1ea10 59 20 63 6c 61 75 73 65 2e 0a 2a 2a 0a 2a 2a 20  Y clause..**.** 
1ea20 20 20 20 20 53 52 54 5f 4f 75 74 70 75 74 20 20      SRT_Output  
1ea30 20 20 20 20 47 65 6e 65 72 61 74 65 20 61 20 72      Generate a r
1ea40 6f 77 20 6f 66 20 6f 75 74 70 75 74 20 28 75 73  ow of output (us
1ea50 69 6e 67 20 74 68 65 20 4f 50 5f 52 65 73 75 6c  ing the OP_Resul
1ea60 74 52 6f 77 0a 2a 2a 20 20 20 20 20 20 20 20 20  tRow.**         
1ea70 20 20 20 20 20 20 20 20 20 20 20 20 6f 70 63 6f              opco
1ea80 64 65 29 20 66 6f 72 20 65 61 63 68 20 72 6f 77  de) for each row
1ea90 20 69 6e 20 74 68 65 20 72 65 73 75 6c 74 20 73   in the result s
1eaa0 65 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52  et..**.**     SR
1eab0 54 5f 4d 65 6d 20 20 20 20 20 20 20 20 20 4f 6e  T_Mem         On
1eac0 6c 79 20 76 61 6c 69 64 20 69 66 20 74 68 65 20  ly valid if the 
1ead0 72 65 73 75 6c 74 20 69 73 20 61 20 73 69 6e 67  result is a sing
1eae0 6c 65 20 63 6f 6c 75 6d 6e 2e 0a 2a 2a 20 20 20  le column..**   
1eaf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1eb00 20 20 53 74 6f 72 65 20 74 68 65 20 66 69 72 73    Store the firs
1eb10 74 20 63 6f 6c 75 6d 6e 20 6f 66 20 74 68 65 20  t column of the 
1eb20 66 69 72 73 74 20 72 65 73 75 6c 74 20 72 6f 77  first result row
1eb30 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
1eb40 20 20 20 20 20 20 20 20 69 6e 20 72 65 67 69 73          in regis
1eb50 74 65 72 20 70 44 65 73 74 2d 3e 69 53 44 50 61  ter pDest->iSDPa
1eb60 72 6d 20 74 68 65 6e 20 61 62 61 6e 64 6f 6e 20  rm then abandon 
1eb70 74 68 65 20 72 65 73 74 0a 2a 2a 20 20 20 20 20  the rest.**     
1eb80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1eb90 6f 66 20 74 68 65 20 71 75 65 72 79 2e 20 20 54  of the query.  T
1eba0 68 69 73 20 64 65 73 74 69 6e 61 74 69 6f 6e 20  his destination 
1ebb0 69 6d 70 6c 69 65 73 20 22 4c 49 4d 49 54 20 31  implies "LIMIT 1
1ebc0 22 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54  "..**.**     SRT
1ebd0 5f 53 65 74 20 20 20 20 20 20 20 20 20 54 68 65  _Set         The
1ebe0 20 72 65 73 75 6c 74 20 6d 75 73 74 20 62 65 20   result must be 
1ebf0 61 20 73 69 6e 67 6c 65 20 63 6f 6c 75 6d 6e 2e  a single column.
1ec00 20 20 53 74 6f 72 65 20 65 61 63 68 0a 2a 2a 20    Store each.** 
1ec10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ec20 20 20 20 20 72 6f 77 20 6f 66 20 72 65 73 75 6c      row of resul
1ec30 74 20 61 73 20 74 68 65 20 6b 65 79 20 69 6e 20  t as the key in 
1ec40 74 61 62 6c 65 20 70 44 65 73 74 2d 3e 69 53 44  table pDest->iSD
1ec50 50 61 72 6d 2e 0a 2a 2a 20 20 20 20 20 20 20 20  Parm..**        
1ec60 20 20 20 20 20 20 20 20 20 20 20 20 20 41 70 70               App
1ec70 6c 79 20 74 68 65 20 61 66 66 69 6e 69 74 79 20  ly the affinity 
1ec80 70 44 65 73 74 2d 3e 61 66 66 53 64 73 74 20 62  pDest->affSdst b
1ec90 65 66 6f 72 65 20 73 74 6f 72 69 6e 67 0a 2a 2a  efore storing.**
1eca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ecb0 20 20 20 20 20 72 65 73 75 6c 74 73 2e 20 20 55       results.  U
1ecc0 73 65 64 20 74 6f 20 69 6d 70 6c 65 6d 65 6e 74  sed to implement
1ecd0 20 22 49 4e 20 28 53 45 4c 45 43 54 20 2e 2e 2e   "IN (SELECT ...
1ece0 29 22 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52  )"..**.**     SR
1ecf0 54 5f 45 70 68 65 6d 54 61 62 20 20 20 20 43 72  T_EphemTab    Cr
1ed00 65 61 74 65 20 61 6e 20 74 65 6d 70 6f 72 61 72  eate an temporar
1ed10 79 20 74 61 62 6c 65 20 70 44 65 73 74 2d 3e 69  y table pDest->i
1ed20 53 44 50 61 72 6d 20 61 6e 64 20 73 74 6f 72 65  SDParm and store
1ed30 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
1ed40 20 20 20 20 20 20 20 20 74 68 65 20 72 65 73 75          the resu
1ed50 6c 74 20 74 68 65 72 65 2e 20 54 68 65 20 63 75  lt there. The cu
1ed60 72 73 6f 72 20 69 73 20 6c 65 66 74 20 6f 70 65  rsor is left ope
1ed70 6e 20 61 66 74 65 72 0a 2a 2a 20 20 20 20 20 20  n after.**      
1ed80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
1ed90 65 74 75 72 6e 69 6e 67 2e 20 20 54 68 69 73 20  eturning.  This 
1eda0 69 73 20 6c 69 6b 65 20 53 52 54 5f 54 61 62 6c  is like SRT_Tabl
1edb0 65 20 65 78 63 65 70 74 20 74 68 61 74 0a 2a 2a  e except that.**
1edc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1edd0 20 20 20 20 20 74 68 69 73 20 64 65 73 74 69 6e       this destin
1ede0 61 74 69 6f 6e 20 75 73 65 73 20 4f 50 5f 4f 70  ation uses OP_Op
1edf0 65 6e 45 70 68 65 6d 65 72 61 6c 20 74 6f 20 63  enEphemeral to c
1ee00 72 65 61 74 65 0a 2a 2a 20 20 20 20 20 20 20 20  reate.**        
1ee10 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 65               the
1ee20 20 74 61 62 6c 65 20 66 69 72 73 74 2e 0a 2a 2a   table first..**
1ee30 0a 2a 2a 20 20 20 20 20 53 52 54 5f 43 6f 72 6f  .**     SRT_Coro
1ee40 75 74 69 6e 65 20 20 20 47 65 6e 65 72 61 74 65  utine   Generate
1ee50 20 61 20 63 6f 2d 72 6f 75 74 69 6e 65 20 74 68   a co-routine th
1ee60 61 74 20 72 65 74 75 72 6e 73 20 61 20 6e 65 77  at returns a new
1ee70 20 72 6f 77 20 6f 66 0a 2a 2a 20 20 20 20 20 20   row of.**      
1ee80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
1ee90 65 73 75 6c 74 73 20 65 61 63 68 20 74 69 6d 65  esults each time
1eea0 20 69 74 20 69 73 20 69 6e 76 6f 6b 65 64 2e 20   it is invoked. 
1eeb0 20 54 68 65 20 65 6e 74 72 79 20 70 6f 69 6e 74   The entry point
1eec0 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
1eed0 20 20 20 20 20 20 20 20 6f 66 20 74 68 65 20 63          of the c
1eee0 6f 2d 72 6f 75 74 69 6e 65 20 69 73 20 73 74 6f  o-routine is sto
1eef0 72 65 64 20 69 6e 20 72 65 67 69 73 74 65 72 20  red in register 
1ef00 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 0a 2a  pDest->iSDParm.*
1ef10 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
1ef20 20 20 20 20 20 20 61 6e 64 20 74 68 65 20 72 65        and the re
1ef30 73 75 6c 74 20 72 6f 77 20 69 73 20 73 74 6f 72  sult row is stor
1ef40 65 64 20 69 6e 20 70 44 65 73 74 2d 3e 6e 44 65  ed in pDest->nDe
1ef50 73 74 20 72 65 67 69 73 74 65 72 73 0a 2a 2a 20  st registers.** 
1ef60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ef70 20 20 20 20 73 74 61 72 74 69 6e 67 20 77 69 74      starting wit
1ef80 68 20 70 44 65 73 74 2d 3e 69 53 64 73 74 2e 0a  h pDest->iSdst..
1ef90 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 54 61  **.**     SRT_Ta
1efa0 62 6c 65 20 20 20 20 20 20 20 53 74 6f 72 65 20  ble       Store 
1efb0 72 65 73 75 6c 74 73 20 69 6e 20 74 65 6d 70 6f  results in tempo
1efc0 72 61 72 79 20 74 61 62 6c 65 20 70 44 65 73 74  rary table pDest
1efd0 2d 3e 69 53 44 50 61 72 6d 2e 0a 2a 2a 20 20 20  ->iSDParm..**   
1efe0 20 20 53 52 54 5f 46 69 66 6f 20 20 20 20 20 20    SRT_Fifo      
1eff0 20 20 54 68 69 73 20 69 73 20 6c 69 6b 65 20 53    This is like S
1f000 52 54 5f 45 70 68 65 6d 54 61 62 20 65 78 63 65  RT_EphemTab exce
1f010 70 74 20 74 68 61 74 20 74 68 65 20 74 61 62 6c  pt that the tabl
1f020 65 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  e.**            
1f030 20 20 20 20 20 20 20 20 20 69 73 20 61 73 73 75           is assu
1f040 6d 65 64 20 74 6f 20 61 6c 72 65 61 64 79 20 62  med to already b
1f050 65 20 6f 70 65 6e 2e 20 20 53 52 54 5f 46 69 66  e open.  SRT_Fif
1f060 6f 20 68 61 73 0a 2a 2a 20 20 20 20 20 20 20 20  o has.**        
1f070 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 65               the
1f080 20 61 64 64 69 74 69 6f 6e 61 6c 20 70 72 6f 70   additional prop
1f090 65 72 74 79 20 6f 66 20 62 65 69 6e 67 20 61 62  erty of being ab
1f0a0 6c 65 20 74 6f 20 69 67 6e 6f 72 65 0a 2a 2a 20  le to ignore.** 
1f0b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f0c0 20 20 20 20 74 68 65 20 4f 52 44 45 52 20 42 59      the ORDER BY
1f0d0 20 63 6c 61 75 73 65 2e 0a 2a 2a 0a 2a 2a 20 20   clause..**.**  
1f0e0 20 20 20 53 52 54 5f 44 69 73 74 46 69 66 6f 20     SRT_DistFifo 
1f0f0 20 20 20 53 74 6f 72 65 20 72 65 73 75 6c 74 73     Store results
1f100 20 69 6e 20 61 20 74 65 6d 70 6f 72 61 72 79 20   in a temporary 
1f110 74 61 62 6c 65 20 70 44 65 73 74 2d 3e 69 53 44  table pDest->iSD
1f120 50 61 72 6d 2e 0a 2a 2a 20 20 20 20 20 20 20 20  Parm..**        
1f130 20 20 20 20 20 20 20 20 20 20 20 20 20 42 75 74               But
1f140 20 61 6c 73 6f 20 75 73 65 20 74 65 6d 70 6f 72   also use tempor
1f150 61 72 79 20 74 61 62 6c 65 20 70 44 65 73 74 2d  ary table pDest-
1f160 3e 69 53 44 50 61 72 6d 2b 31 20 61 73 0a 2a 2a  >iSDParm+1 as.**
1f170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f180 20 20 20 20 20 61 20 72 65 63 6f 72 64 20 6f 66       a record of
1f190 20 61 6c 6c 20 70 72 69 6f 72 20 72 65 73 75 6c   all prior resul
1f1a0 74 73 20 61 6e 64 20 69 67 6e 6f 72 65 20 61 6e  ts and ignore an
1f1b0 79 20 64 75 70 6c 69 63 61 74 65 0a 2a 2a 20 20  y duplicate.**  
1f1c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f1d0 20 20 20 72 6f 77 73 2e 20 20 4e 61 6d 65 20 6d     rows.  Name m
1f1e0 65 61 6e 73 3a 20 20 22 44 69 73 74 69 6e 63 74  eans:  "Distinct
1f1f0 20 46 69 66 6f 22 2e 0a 2a 2a 0a 2a 2a 20 20 20   Fifo"..**.**   
1f200 20 20 53 52 54 5f 51 75 65 75 65 20 20 20 20 20    SRT_Queue     
1f210 20 20 53 74 6f 72 65 20 72 65 73 75 6c 74 73 20    Store results 
1f220 69 6e 20 70 72 69 6f 72 69 74 79 20 71 75 65 75  in priority queu
1f230 65 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d  e pDest->iSDParm
1f240 20 28 72 65 61 6c 6c 79 0a 2a 2a 20 20 20 20 20   (really.**     
1f250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f260 61 6e 20 69 6e 64 65 78 29 2e 20 20 41 70 70 65  an index).  Appe
1f270 6e 64 20 61 20 73 65 71 75 65 6e 63 65 20 6e 75  nd a sequence nu
1f280 6d 62 65 72 20 73 6f 20 74 68 61 74 20 61 6c 6c  mber so that all
1f290 20 65 6e 74 72 69 65 73 0a 2a 2a 20 20 20 20 20   entries.**     
1f2a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f2b0 61 72 65 20 64 69 73 74 69 6e 63 74 2e 0a 2a 2a  are distinct..**
1f2c0 0a 2a 2a 20 20 20 20 20 53 52 54 5f 44 69 73 74  .**     SRT_Dist
1f2d0 51 75 65 75 65 20 20 20 53 74 6f 72 65 20 72 65  Queue   Store re
1f2e0 73 75 6c 74 73 20 69 6e 20 70 72 69 6f 72 69 74  sults in priorit
1f2f0 79 20 71 75 65 75 65 20 70 44 65 73 74 2d 3e 69  y queue pDest->i
1f300 53 44 50 61 72 6d 20 6f 6e 6c 79 20 69 66 0a 2a  SDParm only if.*
1f310 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
1f320 20 20 20 20 20 20 74 68 65 20 73 61 6d 65 20 72        the same r
1f330 65 63 6f 72 64 20 68 61 73 20 6e 65 76 65 72 20  ecord has never 
1f340 62 65 65 6e 20 73 74 6f 72 65 64 20 62 65 66 6f  been stored befo
1f350 72 65 2e 20 20 54 68 65 0a 2a 2a 20 20 20 20 20  re.  The.**     
1f360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f370 69 6e 64 65 78 20 61 74 20 70 44 65 73 74 2d 3e  index at pDest->
1f380 69 53 44 50 61 72 6d 2b 31 20 68 6f 6c 64 20 61  iSDParm+1 hold a
1f390 6c 6c 20 70 72 69 6f 72 20 73 74 6f 72 65 73 2e  ll prior stores.
1f3a0 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f  .*/.#define SRT_
1f3b0 55 6e 69 6f 6e 20 20 20 20 20 20 20 20 31 20 20  Union        1  
1f3c0 2f 2a 20 53 74 6f 72 65 20 72 65 73 75 6c 74 20  /* Store result 
1f3d0 61 73 20 6b 65 79 73 20 69 6e 20 61 6e 20 69 6e  as keys in an in
1f3e0 64 65 78 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  dex */.#define S
1f3f0 52 54 5f 45 78 63 65 70 74 20 20 20 20 20 20 20  RT_Except       
1f400 32 20 20 2f 2a 20 52 65 6d 6f 76 65 20 72 65 73  2  /* Remove res
1f410 75 6c 74 20 66 72 6f 6d 20 61 20 55 4e 49 4f 4e  ult from a UNION
1f420 20 69 6e 64 65 78 20 2a 2f 0a 23 64 65 66 69 6e   index */.#defin
1f430 65 20 53 52 54 5f 45 78 69 73 74 73 20 20 20 20  e SRT_Exists    
1f440 20 20 20 33 20 20 2f 2a 20 53 74 6f 72 65 20 31     3  /* Store 1
1f450 20 69 66 20 74 68 65 20 72 65 73 75 6c 74 20 69   if the result i
1f460 73 20 6e 6f 74 20 65 6d 70 74 79 20 2a 2f 0a 23  s not empty */.#
1f470 64 65 66 69 6e 65 20 53 52 54 5f 44 69 73 63 61  define SRT_Disca
1f480 72 64 20 20 20 20 20 20 34 20 20 2f 2a 20 44 6f  rd      4  /* Do
1f490 20 6e 6f 74 20 73 61 76 65 20 74 68 65 20 72 65   not save the re
1f4a0 73 75 6c 74 73 20 61 6e 79 77 68 65 72 65 20 2a  sults anywhere *
1f4b0 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 46 69  /.#define SRT_Fi
1f4c0 66 6f 20 20 20 20 20 20 20 20 20 35 20 20 2f 2a  fo         5  /*
1f4d0 20 53 74 6f 72 65 20 72 65 73 75 6c 74 20 61 73   Store result as
1f4e0 20 64 61 74 61 20 77 69 74 68 20 61 6e 20 61 75   data with an au
1f4f0 74 6f 6d 61 74 69 63 20 72 6f 77 69 64 20 2a 2f  tomatic rowid */
1f500 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 44 69 73  .#define SRT_Dis
1f510 74 46 69 66 6f 20 20 20 20 20 36 20 20 2f 2a 20  tFifo     6  /* 
1f520 4c 69 6b 65 20 53 52 54 5f 46 69 66 6f 2c 20 62  Like SRT_Fifo, b
1f530 75 74 20 75 6e 69 71 75 65 20 72 65 73 75 6c 74  ut unique result
1f540 73 20 6f 6e 6c 79 20 2a 2f 0a 23 64 65 66 69 6e  s only */.#defin
1f550 65 20 53 52 54 5f 51 75 65 75 65 20 20 20 20 20  e SRT_Queue     
1f560 20 20 20 37 20 20 2f 2a 20 53 74 6f 72 65 20 72     7  /* Store r
1f570 65 73 75 6c 74 20 69 6e 20 61 6e 20 71 75 65 75  esult in an queu
1f580 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54  e */.#define SRT
1f590 5f 44 69 73 74 51 75 65 75 65 20 20 20 20 38 20  _DistQueue    8 
1f5a0 20 2f 2a 20 4c 69 6b 65 20 53 52 54 5f 51 75 65   /* Like SRT_Que
1f5b0 75 65 2c 20 62 75 74 20 75 6e 69 71 75 65 20 72  ue, but unique r
1f5c0 65 73 75 6c 74 73 20 6f 6e 6c 79 20 2a 2f 0a 0a  esults only */..
1f5d0 2f 2a 20 54 68 65 20 4f 52 44 45 52 20 42 59 20  /* The ORDER BY 
1f5e0 63 6c 61 75 73 65 20 69 73 20 69 67 6e 6f 72 65  clause is ignore
1f5f0 64 20 66 6f 72 20 61 6c 6c 20 6f 66 20 74 68 65  d for all of the
1f600 20 61 62 6f 76 65 20 2a 2f 0a 23 64 65 66 69 6e   above */.#defin
1f610 65 20 49 67 6e 6f 72 61 62 6c 65 4f 72 64 65 72  e IgnorableOrder
1f620 62 79 28 58 29 20 28 28 58 2d 3e 65 44 65 73 74  by(X) ((X->eDest
1f630 29 3c 3d 53 52 54 5f 44 69 73 74 51 75 65 75 65  )<=SRT_DistQueue
1f640 29 0a 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 4f  )..#define SRT_O
1f650 75 74 70 75 74 20 20 20 20 20 20 20 39 20 20 2f  utput       9  /
1f660 2a 20 4f 75 74 70 75 74 20 65 61 63 68 20 72 6f  * Output each ro
1f670 77 20 6f 66 20 72 65 73 75 6c 74 20 2a 2f 0a 23  w of result */.#
1f680 64 65 66 69 6e 65 20 53 52 54 5f 4d 65 6d 20 20  define SRT_Mem  
1f690 20 20 20 20 20 20 20 31 30 20 20 2f 2a 20 53 74         10  /* St
1f6a0 6f 72 65 20 72 65 73 75 6c 74 20 69 6e 20 61 20  ore result in a 
1f6b0 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 2a 2f 0a 23  memory cell */.#
1f6c0 64 65 66 69 6e 65 20 53 52 54 5f 53 65 74 20 20  define SRT_Set  
1f6d0 20 20 20 20 20 20 20 31 31 20 20 2f 2a 20 53 74         11  /* St
1f6e0 6f 72 65 20 72 65 73 75 6c 74 73 20 61 73 20 6b  ore results as k
1f6f0 65 79 73 20 69 6e 20 61 6e 20 69 6e 64 65 78 20  eys in an index 
1f700 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 45  */.#define SRT_E
1f710 70 68 65 6d 54 61 62 20 20 20 20 31 32 20 20 2f  phemTab    12  /
1f720 2a 20 43 72 65 61 74 65 20 74 72 61 6e 73 69 65  * Create transie
1f730 6e 74 20 74 61 62 20 61 6e 64 20 73 74 6f 72 65  nt tab and store
1f740 20 6c 69 6b 65 20 53 52 54 5f 54 61 62 6c 65 20   like SRT_Table 
1f750 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 43  */.#define SRT_C
1f760 6f 72 6f 75 74 69 6e 65 20 20 20 31 33 20 20 2f  oroutine   13  /
1f770 2a 20 47 65 6e 65 72 61 74 65 20 61 20 73 69 6e  * Generate a sin
1f780 67 6c 65 20 72 6f 77 20 6f 66 20 72 65 73 75 6c  gle row of resul
1f790 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54  t */.#define SRT
1f7a0 5f 54 61 62 6c 65 20 20 20 20 20 20 20 31 34 20  _Table       14 
1f7b0 20 2f 2a 20 53 74 6f 72 65 20 72 65 73 75 6c 74   /* Store result
1f7c0 20 61 73 20 64 61 74 61 20 77 69 74 68 20 61 6e   as data with an
1f7d0 20 61 75 74 6f 6d 61 74 69 63 20 72 6f 77 69 64   automatic rowid
1f7e0 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e   */../*.** An in
1f7f0 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73 20 6f  stance of this o
1f800 62 6a 65 63 74 20 64 65 73 63 72 69 62 65 73 20  bject describes 
1f810 77 68 65 72 65 20 74 6f 20 70 75 74 20 6f 66 20  where to put of 
1f820 74 68 65 20 72 65 73 75 6c 74 73 20 6f 66 0a 2a  the results of.*
1f830 2a 20 61 20 53 45 4c 45 43 54 20 73 74 61 74 65  * a SELECT state
1f840 6d 65 6e 74 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  ment..*/.struct 
1f850 53 65 6c 65 63 74 44 65 73 74 20 7b 0a 20 20 75  SelectDest {.  u
1f860 38 20 65 44 65 73 74 3b 20 20 20 20 20 20 20 20  8 eDest;        
1f870 20 20 20 20 2f 2a 20 48 6f 77 20 74 6f 20 64 69      /* How to di
1f880 73 70 6f 73 65 20 6f 66 20 74 68 65 20 72 65 73  spose of the res
1f890 75 6c 74 73 2e 20 20 4f 6e 20 6f 66 20 53 52 54  ults.  On of SRT
1f8a0 5f 2a 20 61 62 6f 76 65 2e 20 2a 2f 0a 20 20 69  _* above. */.  i
1f8b0 6e 74 20 69 53 44 50 61 72 6d 3b 20 20 20 20 20  nt iSDParm;     
1f8c0 20 20 20 20 2f 2a 20 41 20 70 61 72 61 6d 65 74      /* A paramet
1f8d0 65 72 20 75 73 65 64 20 62 79 20 74 68 65 20 65  er used by the e
1f8e0 44 65 73 74 20 64 69 73 70 6f 73 61 6c 20 6d 65  Dest disposal me
1f8f0 74 68 6f 64 20 2a 2f 0a 20 20 69 6e 74 20 69 53  thod */.  int iS
1f900 64 73 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f  dst;           /
1f910 2a 20 42 61 73 65 20 72 65 67 69 73 74 65 72 20  * Base register 
1f920 77 68 65 72 65 20 72 65 73 75 6c 74 73 20 61 72  where results ar
1f930 65 20 77 72 69 74 74 65 6e 20 2a 2f 0a 20 20 69  e written */.  i
1f940 6e 74 20 6e 53 64 73 74 3b 20 20 20 20 20 20 20  nt nSdst;       
1f950 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
1f960 20 72 65 67 69 73 74 65 72 73 20 61 6c 6c 6f 63   registers alloc
1f970 61 74 65 64 20 2a 2f 0a 20 20 63 68 61 72 20 2a  ated */.  char *
1f980 7a 41 66 66 53 64 73 74 3b 20 20 20 20 20 20 2f  zAffSdst;      /
1f990 2a 20 41 66 66 69 6e 69 74 79 20 75 73 65 64 20  * Affinity used 
1f9a0 77 68 65 6e 20 65 44 65 73 74 3d 3d 53 52 54 5f  when eDest==SRT_
1f9b0 53 65 74 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73  Set */.  ExprLis
1f9c0 74 20 2a 70 4f 72 64 65 72 42 79 3b 20 20 2f 2a  t *pOrderBy;  /*
1f9d0 20 4b 65 79 20 63 6f 6c 75 6d 6e 73 20 66 6f 72   Key columns for
1f9e0 20 53 52 54 5f 51 75 65 75 65 20 61 6e 64 20 53   SRT_Queue and S
1f9f0 52 54 5f 44 69 73 74 51 75 65 75 65 20 2a 2f 0a  RT_DistQueue */.
1fa00 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 44 75 72 69 6e 67  };../*.** During
1fa10 20 63 6f 64 65 20 67 65 6e 65 72 61 74 69 6f 6e   code generation
1fa20 20 6f 66 20 73 74 61 74 65 6d 65 6e 74 73 20 74   of statements t
1fa30 68 61 74 20 64 6f 20 69 6e 73 65 72 74 73 20 69  hat do inserts i
1fa40 6e 74 6f 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e  nto AUTOINCREMEN
1fa50 54 0a 2a 2a 20 74 61 62 6c 65 73 2c 20 74 68 65  T.** tables, the
1fa60 20 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e 66 6f 72   following infor
1fa70 6d 61 74 69 6f 6e 20 69 73 20 61 74 74 61 63 68  mation is attach
1fa80 65 64 20 74 6f 20 74 68 65 20 54 61 62 6c 65 2e  ed to the Table.
1fa90 75 2e 61 75 74 6f 49 6e 63 2e 70 0a 2a 2a 20 70  u.autoInc.p.** p
1faa0 6f 69 6e 74 65 72 20 6f 66 20 65 61 63 68 20 61  ointer of each a
1fab0 75 74 6f 69 6e 63 72 65 6d 65 6e 74 20 74 61 62  utoincrement tab
1fac0 6c 65 20 74 6f 20 72 65 63 6f 72 64 20 73 6f 6d  le to record som
1fad0 65 20 73 69 64 65 20 69 6e 66 6f 72 6d 61 74 69  e side informati
1fae0 6f 6e 20 74 68 61 74 0a 2a 2a 20 74 68 65 20 63  on that.** the c
1faf0 6f 64 65 20 67 65 6e 65 72 61 74 6f 72 20 6e 65  ode generator ne
1fb00 65 64 73 2e 20 20 57 65 20 68 61 76 65 20 74 6f  eds.  We have to
1fb10 20 6b 65 65 70 20 70 65 72 2d 74 61 62 6c 65 20   keep per-table 
1fb20 61 75 74 6f 69 6e 63 72 65 6d 65 6e 74 0a 2a 2a  autoincrement.**
1fb30 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 69 6e 20   information in 
1fb40 63 61 73 65 20 69 6e 73 65 72 74 73 20 61 72 65  case inserts are
1fb50 20 64 6f 6e 65 20 77 69 74 68 69 6e 20 74 72 69   done within tri
1fb60 67 67 65 72 73 2e 20 20 54 72 69 67 67 65 72 73  ggers.  Triggers
1fb70 20 64 6f 20 6e 6f 74 0a 2a 2a 20 6e 6f 72 6d 61   do not.** norma
1fb80 6c 6c 79 20 63 6f 6f 72 64 69 6e 61 74 65 20 74  lly coordinate t
1fb90 68 65 69 72 20 61 63 74 69 76 69 74 69 65 73 2c  heir activities,
1fba0 20 62 75 74 20 77 65 20 64 6f 20 6e 65 65 64 20   but we do need 
1fbb0 74 6f 20 63 6f 6f 72 64 69 6e 61 74 65 20 74 68  to coordinate th
1fbc0 65 0a 2a 2a 20 6c 6f 61 64 69 6e 67 20 61 6e 64  e.** loading and
1fbd0 20 73 61 76 69 6e 67 20 6f 66 20 61 75 74 6f 69   saving of autoi
1fbe0 6e 63 72 65 6d 65 6e 74 20 69 6e 66 6f 72 6d 61  ncrement informa
1fbf0 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  tion..*/.struct 
1fc00 41 75 74 6f 69 6e 63 49 6e 66 6f 20 7b 0a 20 20  AutoincInfo {.  
1fc10 41 75 74 6f 69 6e 63 49 6e 66 6f 20 2a 70 4e 65  AutoincInfo *pNe
1fc20 78 74 3b 20 20 20 2f 2a 20 4e 65 78 74 20 69 6e  xt;   /* Next in
1fc30 66 6f 20 62 6c 6f 63 6b 20 69 6e 20 61 20 6c 69  fo block in a li
1fc40 73 74 20 6f 66 20 74 68 65 6d 20 61 6c 6c 20 2a  st of them all *
1fc50 2f 0a 20 20 54 61 62 6c 65 20 2a 70 54 61 62 3b  /.  Table *pTab;
1fc60 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 61 62            /* Tab
1fc70 6c 65 20 74 68 69 73 20 69 6e 66 6f 20 62 6c 6f  le this info blo
1fc80 63 6b 20 72 65 66 65 72 73 20 74 6f 20 2a 2f 0a  ck refers to */.
1fc90 20 20 69 6e 74 20 69 44 62 3b 20 20 20 20 20 20    int iDb;      
1fca0 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 64 65 78          /* Index
1fcb0 20 69 6e 20 73 71 6c 69 74 65 33 2e 61 44 62 5b   in sqlite3.aDb[
1fcc0 5d 20 6f 66 20 64 61 74 61 62 61 73 65 20 68 6f  ] of database ho
1fcd0 6c 64 69 6e 67 20 70 54 61 62 20 2a 2f 0a 20 20  lding pTab */.  
1fce0 69 6e 74 20 72 65 67 43 74 72 3b 20 20 20 20 20  int regCtr;     
1fcf0 20 20 20 20 20 20 2f 2a 20 4d 65 6d 6f 72 79 20        /* Memory 
1fd00 72 65 67 69 73 74 65 72 20 68 6f 6c 64 69 6e 67  register holding
1fd10 20 74 68 65 20 72 6f 77 69 64 20 63 6f 75 6e 74   the rowid count
1fd20 65 72 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  er */.};../*.** 
1fd30 41 74 20 6c 65 61 73 74 20 6f 6e 65 20 69 6e 73  At least one ins
1fd40 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c  tance of the fol
1fd50 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65  lowing structure
1fd60 20 69 73 20 63 72 65 61 74 65 64 20 66 6f 72 20   is created for 
1fd70 65 61 63 68 0a 2a 2a 20 74 72 69 67 67 65 72 20  each.** trigger 
1fd80 74 68 61 74 20 6d 61 79 20 62 65 20 66 69 72 65  that may be fire
1fd90 64 20 77 68 69 6c 65 20 70 61 72 73 69 6e 67 20  d while parsing 
1fda0 61 6e 20 49 4e 53 45 52 54 2c 20 55 50 44 41 54  an INSERT, UPDAT
1fdb0 45 20 6f 72 20 44 45 4c 45 54 45 0a 2a 2a 20 73  E or DELETE.** s
1fdc0 74 61 74 65 6d 65 6e 74 2e 20 41 6c 6c 20 73 75  tatement. All su
1fdd0 63 68 20 6f 62 6a 65 63 74 73 20 61 72 65 20 73  ch objects are s
1fde0 74 6f 72 65 64 20 69 6e 20 74 68 65 20 6c 69 6e  tored in the lin
1fdf0 6b 65 64 20 6c 69 73 74 20 68 65 61 64 65 64 20  ked list headed 
1fe00 61 74 0a 2a 2a 20 50 61 72 73 65 2e 70 54 72 69  at.** Parse.pTri
1fe10 67 67 65 72 50 72 67 20 61 6e 64 20 64 65 6c 65  ggerPrg and dele
1fe20 74 65 64 20 6f 6e 63 65 20 73 74 61 74 65 6d 65  ted once stateme
1fe30 6e 74 20 63 6f 6d 70 69 6c 61 74 69 6f 6e 20 68  nt compilation h
1fe40 61 73 20 62 65 65 6e 0a 2a 2a 20 63 6f 6d 70 6c  as been.** compl
1fe50 65 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 41 20 56 64  eted..**.** A Vd
1fe60 62 65 20 73 75 62 2d 70 72 6f 67 72 61 6d 20 74  be sub-program t
1fe70 68 61 74 20 69 6d 70 6c 65 6d 65 6e 74 73 20 74  hat implements t
1fe80 68 65 20 62 6f 64 79 20 61 6e 64 20 57 48 45 4e  he body and WHEN
1fe90 20 63 6c 61 75 73 65 20 6f 66 20 74 72 69 67 67   clause of trigg
1fea0 65 72 0a 2a 2a 20 54 72 69 67 67 65 72 50 72 67  er.** TriggerPrg
1feb0 2e 70 54 72 69 67 67 65 72 2c 20 61 73 73 75 6d  .pTrigger, assum
1fec0 69 6e 67 20 61 20 64 65 66 61 75 6c 74 20 4f 4e  ing a default ON
1fed0 20 43 4f 4e 46 4c 49 43 54 20 63 6c 61 75 73 65   CONFLICT clause
1fee0 20 6f 66 0a 2a 2a 20 54 72 69 67 67 65 72 50 72   of.** TriggerPr
1fef0 67 2e 6f 72 63 6f 6e 66 2c 20 69 73 20 73 74 6f  g.orconf, is sto
1ff00 72 65 64 20 69 6e 20 74 68 65 20 54 72 69 67 67  red in the Trigg
1ff10 65 72 50 72 67 2e 70 50 72 6f 67 72 61 6d 20 76  erPrg.pProgram v
1ff20 61 72 69 61 62 6c 65 2e 0a 2a 2a 20 54 68 65 20  ariable..** The 
1ff30 50 61 72 73 65 2e 70 54 72 69 67 67 65 72 50 72  Parse.pTriggerPr
1ff40 67 20 6c 69 73 74 20 6e 65 76 65 72 20 63 6f 6e  g list never con
1ff50 74 61 69 6e 73 20 74 77 6f 20 65 6e 74 72 69 65  tains two entrie
1ff60 73 20 77 69 74 68 20 74 68 65 20 73 61 6d 65 0a  s with the same.
1ff70 2a 2a 20 76 61 6c 75 65 73 20 66 6f 72 20 62 6f  ** values for bo
1ff80 74 68 20 70 54 72 69 67 67 65 72 20 61 6e 64 20  th pTrigger and 
1ff90 6f 72 63 6f 6e 66 2e 0a 2a 2a 0a 2a 2a 20 54 68  orconf..**.** Th
1ffa0 65 20 54 72 69 67 67 65 72 50 72 67 2e 61 43 6f  e TriggerPrg.aCo
1ffb0 6c 6d 61 73 6b 5b 30 5d 20 76 61 72 69 61 62 6c  lmask[0] variabl
1ffc0 65 20 69 73 20 73 65 74 20 74 6f 20 61 20 6d 61  e is set to a ma
1ffd0 73 6b 20 6f 66 20 6f 6c 64 2e 2a 20 63 6f 6c 75  sk of old.* colu
1ffe0 6d 6e 73 0a 2a 2a 20 61 63 63 65 73 73 65 64 20  mns.** accessed 
1fff0 28 6f 72 20 73 65 74 20 74 6f 20 30 20 66 6f 72  (or set to 0 for
20000 20 74 72 69 67 67 65 72 73 20 66 69 72 65 64 20   triggers fired 
20010 61 73 20 61 20 72 65 73 75 6c 74 20 6f 66 20 49  as a result of I
20020 4e 53 45 52 54 0a 2a 2a 20 73 74 61 74 65 6d 65  NSERT.** stateme
20030 6e 74 73 29 2e 20 53 69 6d 69 6c 61 72 6c 79 2c  nts). Similarly,
20040 20 74 68 65 20 54 72 69 67 67 65 72 50 72 67 2e   the TriggerPrg.
20050 61 43 6f 6c 6d 61 73 6b 5b 31 5d 20 76 61 72 69  aColmask[1] vari
20060 61 62 6c 65 20 69 73 20 73 65 74 20 74 6f 0a 2a  able is set to.*
20070 2a 20 61 20 6d 61 73 6b 20 6f 66 20 6e 65 77 2e  * a mask of new.
20080 2a 20 63 6f 6c 75 6d 6e 73 20 75 73 65 64 20 62  * columns used b
20090 79 20 74 68 65 20 70 72 6f 67 72 61 6d 2e 0a 2a  y the program..*
200a0 2f 0a 73 74 72 75 63 74 20 54 72 69 67 67 65 72  /.struct Trigger
200b0 50 72 67 20 7b 0a 20 20 54 72 69 67 67 65 72 20  Prg {.  Trigger 
200c0 2a 70 54 72 69 67 67 65 72 3b 20 20 20 20 20 20  *pTrigger;      
200d0 2f 2a 20 54 72 69 67 67 65 72 20 74 68 69 73 20  /* Trigger this 
200e0 70 72 6f 67 72 61 6d 20 77 61 73 20 63 6f 64 65  program was code
200f0 64 20 66 72 6f 6d 20 2a 2f 0a 20 20 54 72 69 67  d from */.  Trig
20100 67 65 72 50 72 67 20 2a 70 4e 65 78 74 3b 20 20  gerPrg *pNext;  
20110 20 20 20 20 2f 2a 20 4e 65 78 74 20 65 6e 74 72      /* Next entr
20120 79 20 69 6e 20 50 61 72 73 65 2e 70 54 72 69 67  y in Parse.pTrig
20130 67 65 72 50 72 67 20 6c 69 73 74 20 2a 2f 0a 20  gerPrg list */. 
20140 20 53 75 62 50 72 6f 67 72 61 6d 20 2a 70 50 72   SubProgram *pPr
20150 6f 67 72 61 6d 3b 20 20 20 2f 2a 20 50 72 6f 67  ogram;   /* Prog
20160 72 61 6d 20 69 6d 70 6c 65 6d 65 6e 74 69 6e 67  ram implementing
20170 20 70 54 72 69 67 67 65 72 2f 6f 72 63 6f 6e 66   pTrigger/orconf
20180 20 2a 2f 0a 20 20 69 6e 74 20 6f 72 63 6f 6e 66   */.  int orconf
20190 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
201a0 20 44 65 66 61 75 6c 74 20 4f 4e 20 43 4f 4e 46   Default ON CONF
201b0 4c 49 43 54 20 70 6f 6c 69 63 79 20 2a 2f 0a 20  LICT policy */. 
201c0 20 75 33 32 20 61 43 6f 6c 6d 61 73 6b 5b 32 5d   u32 aColmask[2]
201d0 3b 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 73 6b  ;        /* Mask
201e0 73 20 6f 66 20 6f 6c 64 2e 2a 2c 20 6e 65 77 2e  s of old.*, new.
201f0 2a 20 63 6f 6c 75 6d 6e 73 20 61 63 63 65 73 73  * columns access
20200 65 64 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  ed */.};../*.** 
20210 54 68 65 20 79 44 62 4d 61 73 6b 20 64 61 74 61  The yDbMask data
20220 74 79 70 65 20 66 6f 72 20 74 68 65 20 62 69 74  type for the bit
20230 6d 61 73 6b 20 6f 66 20 61 6c 6c 20 61 74 74 61  mask of all atta
20240 63 68 65 64 20 64 61 74 61 62 61 73 65 73 2e 0a  ched databases..
20250 2a 2f 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d 41  */.#if SQLITE_MA
20260 58 5f 41 54 54 41 43 48 45 44 3e 33 30 0a 20 20  X_ATTACHED>30.  
20270 74 79 70 65 64 65 66 20 75 6e 73 69 67 6e 65 64  typedef unsigned
20280 20 63 68 61 72 20 79 44 62 4d 61 73 6b 5b 28 53   char yDbMask[(S
20290 51 4c 49 54 45 5f 4d 41 58 5f 41 54 54 41 43 48  QLITE_MAX_ATTACH
202a0 45 44 2b 39 29 2f 38 5d 3b 0a 23 20 64 65 66 69  ED+9)/8];.# defi
202b0 6e 65 20 44 62 4d 61 73 6b 54 65 73 74 28 4d 2c  ne DbMaskTest(M,
202c0 49 29 20 20 20 20 28 28 28 4d 29 5b 28 49 29 2f  I)    (((M)[(I)/
202d0 38 5d 26 28 31 3c 3c 28 28 49 29 26 37 29 29 29  8]&(1<<((I)&7)))
202e0 21 3d 30 29 0a 23 20 64 65 66 69 6e 65 20 44 62  !=0).# define Db
202f0 4d 61 73 6b 5a 65 72 6f 28 4d 29 20 20 20 20 20  MaskZero(M)     
20300 20 6d 65 6d 73 65 74 28 28 4d 29 2c 30 2c 73 69   memset((M),0,si
20310 7a 65 6f 66 28 4d 29 29 0a 23 20 64 65 66 69 6e  zeof(M)).# defin
20320 65 20 44 62 4d 61 73 6b 53 65 74 28 4d 2c 49 29  e DbMaskSet(M,I)
20330 20 20 20 20 20 28 4d 29 5b 28 49 29 2f 38 5d 7c       (M)[(I)/8]|
20340 3d 28 31 3c 3c 28 28 49 29 26 37 29 29 0a 23 20  =(1<<((I)&7)).# 
20350 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 41 6c 6c  define DbMaskAll
20360 5a 65 72 6f 28 4d 29 20 20 20 73 71 6c 69 74 65  Zero(M)   sqlite
20370 33 44 62 4d 61 73 6b 41 6c 6c 5a 65 72 6f 28 4d  3DbMaskAllZero(M
20380 29 0a 23 20 64 65 66 69 6e 65 20 44 62 4d 61 73  ).# define DbMas
20390 6b 4e 6f 6e 5a 65 72 6f 28 4d 29 20 20 20 28 73  kNonZero(M)   (s
203a0 71 6c 69 74 65 33 44 62 4d 61 73 6b 41 6c 6c 5a  qlite3DbMaskAllZ
203b0 65 72 6f 28 4d 29 3d 3d 30 29 0a 23 65 6c 73 65  ero(M)==0).#else
203c0 0a 20 20 74 79 70 65 64 65 66 20 75 6e 73 69 67  .  typedef unsig
203d0 6e 65 64 20 69 6e 74 20 79 44 62 4d 61 73 6b 3b  ned int yDbMask;
203e0 0a 23 20 64 65 66 69 6e 65 20 44 62 4d 61 73 6b  .# define DbMask
203f0 54 65 73 74 28 4d 2c 49 29 20 20 20 20 28 28 28  Test(M,I)    (((
20400 4d 29 26 28 28 28 79 44 62 4d 61 73 6b 29 31 29  M)&(((yDbMask)1)
20410 3c 3c 28 49 29 29 29 21 3d 30 29 0a 23 20 64 65  <<(I)))!=0).# de
20420 66 69 6e 65 20 44 62 4d 61 73 6b 5a 65 72 6f 28  fine DbMaskZero(
20430 4d 29 20 20 20 20 20 20 28 4d 29 3d 30 0a 23 20  M)      (M)=0.# 
20440 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 53 65 74  define DbMaskSet
20450 28 4d 2c 49 29 20 20 20 20 20 28 4d 29 7c 3d 28  (M,I)     (M)|=(
20460 28 28 79 44 62 4d 61 73 6b 29 31 29 3c 3c 28 49  ((yDbMask)1)<<(I
20470 29 29 0a 23 20 64 65 66 69 6e 65 20 44 62 4d 61  )).# define DbMa
20480 73 6b 41 6c 6c 5a 65 72 6f 28 4d 29 20 20 20 28  skAllZero(M)   (
20490 4d 29 3d 3d 30 0a 23 20 64 65 66 69 6e 65 20 44  M)==0.# define D
204a0 62 4d 61 73 6b 4e 6f 6e 5a 65 72 6f 28 4d 29 20  bMaskNonZero(M) 
204b0 20 20 28 4d 29 21 3d 30 0a 23 65 6e 64 69 66 0a    (M)!=0.#endif.
204c0 0a 2f 2a 0a 2a 2a 20 41 6e 20 53 51 4c 20 70 61  ./*.** An SQL pa
204d0 72 73 65 72 20 63 6f 6e 74 65 78 74 2e 20 20 41  rser context.  A
204e0 20 63 6f 70 79 20 6f 66 20 74 68 69 73 20 73 74   copy of this st
204f0 72 75 63 74 75 72 65 20 69 73 20 70 61 73 73 65  ructure is passe
20500 64 20 74 68 72 6f 75 67 68 0a 2a 2a 20 74 68 65  d through.** the
20510 20 70 61 72 73 65 72 20 61 6e 64 20 64 6f 77 6e   parser and down
20520 20 69 6e 74 6f 20 61 6c 6c 20 74 68 65 20 70 61   into all the pa
20530 72 73 65 72 20 61 63 74 69 6f 6e 20 72 6f 75 74  rser action rout
20540 69 6e 65 20 69 6e 20 6f 72 64 65 72 20 74 6f 0a  ine in order to.
20550 2a 2a 20 63 61 72 72 79 20 61 72 6f 75 6e 64 20  ** carry around 
20560 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 74 68 61 74  information that
20570 20 69 73 20 67 6c 6f 62 61 6c 20 74 6f 20 74 68   is global to th
20580 65 20 65 6e 74 69 72 65 20 70 61 72 73 65 2e 0a  e entire parse..
20590 2a 2a 0a 2a 2a 20 54 68 65 20 73 74 72 75 63 74  **.** The struct
205a0 75 72 65 20 69 73 20 64 69 76 69 64 65 64 20 69  ure is divided i
205b0 6e 74 6f 20 74 77 6f 20 70 61 72 74 73 2e 20 20  nto two parts.  
205c0 57 68 65 6e 20 74 68 65 20 70 61 72 73 65 72 20  When the parser 
205d0 61 6e 64 20 63 6f 64 65 0a 2a 2a 20 67 65 6e 65  and code.** gene
205e0 72 61 74 65 20 63 61 6c 6c 20 74 68 65 6d 73 65  rate call themse
205f0 6c 76 65 73 20 72 65 63 75 72 73 69 76 65 6c 79  lves recursively
20600 2c 20 74 68 65 20 66 69 72 73 74 20 70 61 72 74  , the first part
20610 20 6f 66 20 74 68 65 20 73 74 72 75 63 74 75 72   of the structur
20620 65 0a 2a 2a 20 69 73 20 63 6f 6e 73 74 61 6e 74  e.** is constant
20630 20 62 75 74 20 74 68 65 20 73 65 63 6f 6e 64 20   but the second 
20640 70 61 72 74 20 69 73 20 72 65 73 65 74 20 61 74  part is reset at
20650 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 20 61   the beginning a
20660 6e 64 20 65 6e 64 20 6f 66 0a 2a 2a 20 65 61 63  nd end of.** eac
20670 68 20 72 65 63 75 72 73 69 6f 6e 2e 0a 2a 2a 0a  h recursion..**.
20680 2a 2a 20 54 68 65 20 6e 54 61 62 6c 65 4c 6f 63  ** The nTableLoc
20690 6b 20 61 6e 64 20 61 54 61 62 6c 65 4c 6f 63 6b  k and aTableLock
206a0 20 76 61 72 69 61 62 6c 65 73 20 61 72 65 20 6f   variables are o
206b0 6e 6c 79 20 75 73 65 64 20 69 66 20 74 68 65 20  nly used if the 
206c0 73 68 61 72 65 64 2d 63 61 63 68 65 0a 2a 2a 20  shared-cache.** 
206d0 66 65 61 74 75 72 65 20 69 73 20 65 6e 61 62 6c  feature is enabl
206e0 65 64 20 28 69 66 20 73 71 6c 69 74 65 33 54 73  ed (if sqlite3Ts
206f0 64 28 29 2d 3e 75 73 65 53 68 61 72 65 64 44 61  d()->useSharedDa
20700 74 61 20 69 73 20 74 72 75 65 29 2e 20 54 68 65  ta is true). The
20710 79 20 61 72 65 0a 2a 2a 20 75 73 65 64 20 74 6f  y are.** used to
20720 20 73 74 6f 72 65 20 74 68 65 20 73 65 74 20 6f   store the set o
20730 66 20 74 61 62 6c 65 2d 6c 6f 63 6b 73 20 72 65  f table-locks re
20740 71 75 69 72 65 64 20 62 79 20 74 68 65 20 73 74  quired by the st
20750 61 74 65 6d 65 6e 74 20 62 65 69 6e 67 0a 2a 2a  atement being.**
20760 20 63 6f 6d 70 69 6c 65 64 2e 20 46 75 6e 63 74   compiled. Funct
20770 69 6f 6e 20 73 71 6c 69 74 65 33 54 61 62 6c 65  ion sqlite3Table
20780 4c 6f 63 6b 28 29 20 69 73 20 75 73 65 64 20 74  Lock() is used t
20790 6f 20 61 64 64 20 65 6e 74 72 69 65 73 20 74 6f  o add entries to
207a0 20 74 68 65 0a 2a 2a 20 6c 69 73 74 2e 0a 2a 2f   the.** list..*/
207b0 0a 73 74 72 75 63 74 20 50 61 72 73 65 20 7b 0a  .struct Parse {.
207c0 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 20 20    sqlite3 *db;  
207d0 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6d 61         /* The ma
207e0 69 6e 20 64 61 74 61 62 61 73 65 20 73 74 72 75  in database stru
207f0 63 74 75 72 65 20 2a 2f 0a 20 20 63 68 61 72 20  cture */.  char 
20800 2a 7a 45 72 72 4d 73 67 3b 20 20 20 20 20 20 20  *zErrMsg;       
20810 2f 2a 20 41 6e 20 65 72 72 6f 72 20 6d 65 73 73  /* An error mess
20820 61 67 65 20 2a 2f 0a 20 20 56 64 62 65 20 2a 70  age */.  Vdbe *p
20830 56 64 62 65 3b 20 20 20 20 20 20 20 20 20 2f 2a  Vdbe;         /*
20840 20 41 6e 20 65 6e 67 69 6e 65 20 66 6f 72 20 65   An engine for e
20850 78 65 63 75 74 69 6e 67 20 64 61 74 61 62 61 73  xecuting databas
20860 65 20 62 79 74 65 63 6f 64 65 20 2a 2f 0a 20 20  e bytecode */.  
20870 69 6e 74 20 72 63 3b 20 20 20 20 20 20 20 20 20  int rc;         
20880 20 20 20 20 20 2f 2a 20 52 65 74 75 72 6e 20 63       /* Return c
20890 6f 64 65 20 66 72 6f 6d 20 65 78 65 63 75 74 69  ode from executi
208a0 6f 6e 20 2a 2f 0a 20 20 75 38 20 63 6f 6c 4e 61  on */.  u8 colNa
208b0 6d 65 73 53 65 74 3b 20 20 20 20 20 20 2f 2a 20  mesSet;      /* 
208c0 54 52 55 45 20 61 66 74 65 72 20 4f 50 5f 43 6f  TRUE after OP_Co
208d0 6c 75 6d 6e 4e 61 6d 65 20 68 61 73 20 62 65 65  lumnName has bee
208e0 6e 20 69 73 73 75 65 64 20 74 6f 20 70 56 64 62  n issued to pVdb
208f0 65 20 2a 2f 0a 20 20 75 38 20 63 68 65 63 6b 53  e */.  u8 checkS
20900 63 68 65 6d 61 3b 20 20 20 20 20 20 2f 2a 20 43  chema;      /* C
20910 61 75 73 65 73 20 73 63 68 65 6d 61 20 63 6f 6f  auses schema coo
20920 6b 69 65 20 63 68 65 63 6b 20 61 66 74 65 72 20  kie check after 
20930 61 6e 20 65 72 72 6f 72 20 2a 2f 0a 20 20 75 38  an error */.  u8
20940 20 6e 65 73 74 65 64 3b 20 20 20 20 20 20 20 20   nested;        
20950 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
20960 6e 65 73 74 65 64 20 63 61 6c 6c 73 20 74 6f 20  nested calls to 
20970 74 68 65 20 70 61 72 73 65 72 2f 63 6f 64 65 20  the parser/code 
20980 67 65 6e 65 72 61 74 6f 72 20 2a 2f 0a 20 20 75  generator */.  u
20990 38 20 6e 54 65 6d 70 52 65 67 3b 20 20 20 20 20  8 nTempReg;     
209a0 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
209b0 20 74 65 6d 70 6f 72 61 72 79 20 72 65 67 69 73   temporary regis
209c0 74 65 72 73 20 69 6e 20 61 54 65 6d 70 52 65 67  ters in aTempReg
209d0 5b 5d 20 2a 2f 0a 20 20 75 38 20 69 73 4d 75 6c  [] */.  u8 isMul
209e0 74 69 57 72 69 74 65 3b 20 20 20 20 20 2f 2a 20  tiWrite;     /* 
209f0 54 72 75 65 20 69 66 20 73 74 61 74 65 6d 65 6e  True if statemen
20a00 74 20 6d 61 79 20 6d 6f 64 69 66 79 2f 69 6e 73  t may modify/ins
20a10 65 72 74 20 6d 75 6c 74 69 70 6c 65 20 72 6f 77  ert multiple row
20a20 73 20 2a 2f 0a 20 20 75 38 20 6d 61 79 41 62 6f  s */.  u8 mayAbo
20a30 72 74 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54  rt;         /* T
20a40 72 75 65 20 69 66 20 73 74 61 74 65 6d 65 6e 74  rue if statement
20a50 20 6d 61 79 20 74 68 72 6f 77 20 61 6e 20 41 42   may throw an AB
20a60 4f 52 54 20 65 78 63 65 70 74 69 6f 6e 20 2a 2f  ORT exception */
20a70 0a 20 20 75 38 20 68 61 73 43 6f 6d 70 6f 75 6e  .  u8 hasCompoun
20a80 64 3b 20 20 20 20 20 20 2f 2a 20 4e 65 65 64 20  d;      /* Need 
20a90 74 6f 20 69 6e 76 6f 6b 65 20 63 6f 6e 76 65 72  to invoke conver
20aa0 74 43 6f 6d 70 6f 75 6e 64 53 65 6c 65 63 74 54  tCompoundSelectT
20ab0 6f 53 75 62 71 75 65 72 79 28 29 20 2a 2f 0a 20  oSubquery() */. 
20ac0 20 75 38 20 6f 6b 43 6f 6e 73 74 46 61 63 74 6f   u8 okConstFacto
20ad0 72 3b 20 20 20 20 2f 2a 20 4f 4b 20 74 6f 20 66  r;    /* OK to f
20ae0 61 63 74 6f 72 20 6f 75 74 20 63 6f 6e 73 74 61  actor out consta
20af0 6e 74 73 20 2a 2f 0a 20 20 75 38 20 64 69 73 61  nts */.  u8 disa
20b00 62 6c 65 4c 6f 6f 6b 61 73 69 64 65 3b 20 2f 2a  bleLookaside; /*
20b10 20 4e 75 6d 62 65 72 20 6f 66 20 74 69 6d 65 73   Number of times
20b20 20 6c 6f 6f 6b 61 73 69 64 65 20 68 61 73 20 62   lookaside has b
20b30 65 65 6e 20 64 69 73 61 62 6c 65 64 20 2a 2f 0a  een disabled */.
20b40 20 20 69 6e 74 20 6e 52 61 6e 67 65 52 65 67 3b    int nRangeReg;
20b50 20 20 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f         /* Size o
20b60 66 20 74 68 65 20 74 65 6d 70 6f 72 61 72 79 20  f the temporary 
20b70 72 65 67 69 73 74 65 72 20 62 6c 6f 63 6b 20 2a  register block *
20b80 2f 0a 20 20 69 6e 74 20 69 52 61 6e 67 65 52 65  /.  int iRangeRe
20b90 67 3b 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73  g;       /* Firs
20ba0 74 20 72 65 67 69 73 74 65 72 20 69 6e 20 74 65  t register in te
20bb0 6d 70 6f 72 61 72 79 20 72 65 67 69 73 74 65 72  mporary register
20bc0 20 62 6c 6f 63 6b 20 2a 2f 0a 20 20 69 6e 74 20   block */.  int 
20bd0 6e 45 72 72 3b 20 20 20 20 20 20 20 20 20 20 20  nErr;           
20be0 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 72   /* Number of er
20bf0 72 6f 72 73 20 73 65 65 6e 20 2a 2f 0a 20 20 69  rors seen */.  i
20c00 6e 74 20 6e 54 61 62 3b 20 20 20 20 20 20 20 20  nt nTab;        
20c10 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
20c20 20 70 72 65 76 69 6f 75 73 6c 79 20 61 6c 6c 6f   previously allo
20c30 63 61 74 65 64 20 56 44 42 45 20 63 75 72 73 6f  cated VDBE curso
20c40 72 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 4d 65 6d  rs */.  int nMem
20c50 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
20c60 4e 75 6d 62 65 72 20 6f 66 20 6d 65 6d 6f 72 79  Number of memory
20c70 20 63 65 6c 6c 73 20 75 73 65 64 20 73 6f 20 66   cells used so f
20c80 61 72 20 2a 2f 0a 20 20 69 6e 74 20 6e 4f 70 41  ar */.  int nOpA
20c90 6c 6c 6f 63 3b 20 20 20 20 20 20 20 20 2f 2a 20  lloc;        /* 
20ca0 4e 75 6d 62 65 72 20 6f 66 20 73 6c 6f 74 73 20  Number of slots 
20cb0 61 6c 6c 6f 63 61 74 65 64 20 66 6f 72 20 56 64  allocated for Vd
20cc0 62 65 2e 61 4f 70 5b 5d 20 2a 2f 0a 20 20 69 6e  be.aOp[] */.  in
20cd0 74 20 73 7a 4f 70 41 6c 6c 6f 63 3b 20 20 20 20  t szOpAlloc;    
20ce0 20 20 20 2f 2a 20 42 79 74 65 73 20 6f 66 20 6d     /* Bytes of m
20cf0 65 6d 6f 72 79 20 73 70 61 63 65 20 61 6c 6c 6f  emory space allo
20d00 63 61 74 65 64 20 66 6f 72 20 56 64 62 65 2e 61  cated for Vdbe.a
20d10 4f 70 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 69 53  Op[] */.  int iS
20d20 65 6c 66 54 61 62 3b 20 20 20 20 20 20 20 20 2f  elfTab;        /
20d30 2a 20 54 61 62 6c 65 20 61 73 73 6f 63 69 61 74  * Table associat
20d40 65 64 20 77 69 74 68 20 61 6e 20 69 6e 64 65 78  ed with an index
20d50 20 6f 6e 20 65 78 70 72 2c 20 6f 72 20 6e 65 67   on expr, or neg
20d60 61 74 69 76 65 0a 20 20 20 20 20 20 20 20 20 20  ative.          
20d70 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20               ** 
20d80 6f 66 20 74 68 65 20 62 61 73 65 20 72 65 67 69  of the base regi
20d90 73 74 65 72 20 64 75 72 69 6e 67 20 63 68 65 63  ster during chec
20da0 6b 2d 63 6f 6e 73 74 72 61 69 6e 74 20 65 76 61  k-constraint eva
20db0 6c 20 2a 2f 0a 20 20 69 6e 74 20 6e 4c 61 62 65  l */.  int nLabe
20dc0 6c 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e  l;          /* N
20dd0 75 6d 62 65 72 20 6f 66 20 6c 61 62 65 6c 73 20  umber of labels 
20de0 75 73 65 64 20 2a 2f 0a 20 20 69 6e 74 20 2a 61  used */.  int *a
20df0 4c 61 62 65 6c 3b 20 20 20 20 20 20 20 20 20 2f  Label;         /
20e00 2a 20 53 70 61 63 65 20 74 6f 20 68 6f 6c 64 20  * Space to hold 
20e10 74 68 65 20 6c 61 62 65 6c 73 20 2a 2f 0a 20 20  the labels */.  
20e20 45 78 70 72 4c 69 73 74 20 2a 70 43 6f 6e 73 74  ExprList *pConst
20e30 45 78 70 72 3b 2f 2a 20 43 6f 6e 73 74 61 6e 74  Expr;/* Constant
20e40 20 65 78 70 72 65 73 73 69 6f 6e 73 20 2a 2f 0a   expressions */.
20e50 20 20 54 6f 6b 65 6e 20 63 6f 6e 73 74 72 61 69    Token constrai
20e60 6e 74 4e 61 6d 65 3b 2f 2a 20 4e 61 6d 65 20 6f  ntName;/* Name o
20e70 66 20 74 68 65 20 63 6f 6e 73 74 72 61 69 6e 74  f the constraint
20e80 20 63 75 72 72 65 6e 74 6c 79 20 62 65 69 6e 67   currently being
20e90 20 70 61 72 73 65 64 20 2a 2f 0a 20 20 79 44 62   parsed */.  yDb
20ea0 4d 61 73 6b 20 77 72 69 74 65 4d 61 73 6b 3b 20  Mask writeMask; 
20eb0 20 20 2f 2a 20 53 74 61 72 74 20 61 20 77 72 69    /* Start a wri
20ec0 74 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6f  te transaction o
20ed0 6e 20 74 68 65 73 65 20 64 61 74 61 62 61 73 65  n these database
20ee0 73 20 2a 2f 0a 20 20 79 44 62 4d 61 73 6b 20 63  s */.  yDbMask c
20ef0 6f 6f 6b 69 65 4d 61 73 6b 3b 20 20 2f 2a 20 42  ookieMask;  /* B
20f00 69 74 6d 61 73 6b 20 6f 66 20 73 63 68 65 6d 61  itmask of schema
20f10 20 76 65 72 69 66 69 65 64 20 64 61 74 61 62 61   verified databa
20f20 73 65 73 20 2a 2f 0a 20 20 69 6e 74 20 72 65 67  ses */.  int reg
20f30 52 6f 77 69 64 3b 20 20 20 20 20 20 20 20 2f 2a  Rowid;        /*
20f40 20 52 65 67 69 73 74 65 72 20 68 6f 6c 64 69 6e   Register holdin
20f50 67 20 72 6f 77 69 64 20 6f 66 20 43 52 45 41 54  g rowid of CREAT
20f60 45 20 54 41 42 4c 45 20 65 6e 74 72 79 20 2a 2f  E TABLE entry */
20f70 0a 20 20 69 6e 74 20 72 65 67 52 6f 6f 74 3b 20  .  int regRoot; 
20f80 20 20 20 20 20 20 20 20 2f 2a 20 52 65 67 69 73          /* Regis
20f90 74 65 72 20 68 6f 6c 64 69 6e 67 20 72 6f 6f 74  ter holding root
20fa0 20 70 61 67 65 20 6e 75 6d 62 65 72 20 66 6f 72   page number for
20fb0 20 6e 65 77 20 6f 62 6a 65 63 74 73 20 2a 2f 0a   new objects */.
20fc0 20 20 69 6e 74 20 6e 4d 61 78 41 72 67 3b 20 20    int nMaxArg;  
20fd0 20 20 20 20 20 20 20 2f 2a 20 4d 61 78 20 61 72         /* Max ar
20fe0 67 73 20 70 61 73 73 65 64 20 74 6f 20 75 73 65  gs passed to use
20ff0 72 20 66 75 6e 63 74 69 6f 6e 20 62 79 20 73 75  r function by su
21000 62 2d 70 72 6f 67 72 61 6d 20 2a 2f 0a 20 20 69  b-program */.  i
21010 6e 74 20 6e 53 65 6c 65 63 74 3b 20 20 20 20 20  nt nSelect;     
21020 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
21030 20 53 45 4c 45 43 54 20 73 74 6d 74 73 2e 20 43   SELECT stmts. C
21040 6f 75 6e 74 65 72 20 66 6f 72 20 53 65 6c 65 63  ounter for Selec
21050 74 2e 73 65 6c 49 64 20 2a 2f 0a 23 69 66 6e 64  t.selId */.#ifnd
21060 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53  ef SQLITE_OMIT_S
21070 48 41 52 45 44 5f 43 41 43 48 45 0a 20 20 69 6e  HARED_CACHE.  in
21080 74 20 6e 54 61 62 6c 65 4c 6f 63 6b 3b 20 20 20  t nTableLock;   
21090 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
210a0 66 20 6c 6f 63 6b 73 20 69 6e 20 61 54 61 62 6c  f locks in aTabl
210b0 65 4c 6f 63 6b 20 2a 2f 0a 20 20 54 61 62 6c 65  eLock */.  Table
210c0 4c 6f 63 6b 20 2a 61 54 61 62 6c 65 4c 6f 63 6b  Lock *aTableLock
210d0 3b 20 2f 2a 20 52 65 71 75 69 72 65 64 20 74 61  ; /* Required ta
210e0 62 6c 65 20 6c 6f 63 6b 73 20 66 6f 72 20 73 68  ble locks for sh
210f0 61 72 65 64 2d 63 61 63 68 65 20 6d 6f 64 65 20  ared-cache mode 
21100 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 41 75 74 6f  */.#endif.  Auto
21110 69 6e 63 49 6e 66 6f 20 2a 70 41 69 6e 63 3b 20  incInfo *pAinc; 
21120 20 2f 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20   /* Information 
21130 61 62 6f 75 74 20 41 55 54 4f 49 4e 43 52 45 4d  about AUTOINCREM
21140 45 4e 54 20 63 6f 75 6e 74 65 72 73 20 2a 2f 0a  ENT counters */.
21150 20 20 50 61 72 73 65 20 2a 70 54 6f 70 6c 65 76    Parse *pToplev
21160 65 6c 3b 20 20 20 20 2f 2a 20 50 61 72 73 65 20  el;    /* Parse 
21170 73 74 72 75 63 74 75 72 65 20 66 6f 72 20 6d 61  structure for ma
21180 69 6e 20 70 72 6f 67 72 61 6d 20 28 6f 72 20 4e  in program (or N
21190 55 4c 4c 29 20 2a 2f 0a 20 20 54 61 62 6c 65 20  ULL) */.  Table 
211a0 2a 70 54 72 69 67 67 65 72 54 61 62 3b 20 20 2f  *pTriggerTab;  /
211b0 2a 20 54 61 62 6c 65 20 74 72 69 67 67 65 72 73  * Table triggers
211c0 20 61 72 65 20 62 65 69 6e 67 20 63 6f 64 65 64   are being coded
211d0 20 66 6f 72 20 2a 2f 0a 20 20 69 6e 74 20 61 64   for */.  int ad
211e0 64 72 43 72 54 61 62 3b 20 20 20 20 20 20 20 2f  drCrTab;       /
211f0 2a 20 41 64 64 72 65 73 73 20 6f 66 20 4f 50 5f  * Address of OP_
21200 43 72 65 61 74 65 42 74 72 65 65 20 6f 70 63 6f  CreateBtree opco
21210 64 65 20 6f 6e 20 43 52 45 41 54 45 20 54 41 42  de on CREATE TAB
21220 4c 45 20 2a 2f 0a 20 20 75 33 32 20 6e 51 75 65  LE */.  u32 nQue
21230 72 79 4c 6f 6f 70 3b 20 20 20 20 20 20 2f 2a 20  ryLoop;      /* 
21240 45 73 74 20 6e 75 6d 62 65 72 20 6f 66 20 69 74  Est number of it
21250 65 72 61 74 69 6f 6e 73 20 6f 66 20 61 20 71 75  erations of a qu
21260 65 72 79 20 28 31 30 2a 6c 6f 67 32 28 4e 29 29  ery (10*log2(N))
21270 20 2a 2f 0a 20 20 75 33 32 20 6f 6c 64 6d 61 73   */.  u32 oldmas
21280 6b 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61  k;         /* Ma
21290 73 6b 20 6f 66 20 6f 6c 64 2e 2a 20 63 6f 6c 75  sk of old.* colu
212a0 6d 6e 73 20 72 65 66 65 72 65 6e 63 65 64 20 2a  mns referenced *
212b0 2f 0a 20 20 75 33 32 20 6e 65 77 6d 61 73 6b 3b  /.  u32 newmask;
212c0 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 73 6b           /* Mask
212d0 20 6f 66 20 6e 65 77 2e 2a 20 63 6f 6c 75 6d 6e   of new.* column
212e0 73 20 72 65 66 65 72 65 6e 63 65 64 20 2a 2f 0a  s referenced */.
212f0 20 20 75 38 20 65 54 72 69 67 67 65 72 4f 70 3b    u8 eTriggerOp;
21300 20 20 20 20 20 20 20 2f 2a 20 54 4b 5f 55 50 44         /* TK_UPD
21310 41 54 45 2c 20 54 4b 5f 49 4e 53 45 52 54 20 6f  ATE, TK_INSERT o
21320 72 20 54 4b 5f 44 45 4c 45 54 45 20 2a 2f 0a 20  r TK_DELETE */. 
21330 20 75 38 20 65 4f 72 63 6f 6e 66 3b 20 20 20 20   u8 eOrconf;    
21340 20 20 20 20 20 20 2f 2a 20 44 65 66 61 75 6c 74        /* Default
21350 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 70 6f 6c   ON CONFLICT pol
21360 69 63 79 20 66 6f 72 20 74 72 69 67 67 65 72 20  icy for trigger 
21370 73 74 65 70 73 20 2a 2f 0a 20 20 75 38 20 64 69  steps */.  u8 di
21380 73 61 62 6c 65 54 72 69 67 67 65 72 73 3b 20 20  sableTriggers;  
21390 2f 2a 20 54 72 75 65 20 74 6f 20 64 69 73 61 62  /* True to disab
213a0 6c 65 20 74 72 69 67 67 65 72 73 20 2a 2f 0a 0a  le triggers */..
213b0 20 20 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a    /*************
213c0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
213d0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
213e0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
213f0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 20 20  *************.  
21400 2a 2a 20 46 69 65 6c 64 73 20 61 62 6f 76 65 20  ** Fields above 
21410 6d 75 73 74 20 62 65 20 69 6e 69 74 69 61 6c 69  must be initiali
21420 7a 65 64 20 74 6f 20 7a 65 72 6f 2e 20 20 54 68  zed to zero.  Th
21430 65 20 66 69 65 6c 64 73 20 74 68 61 74 20 66 6f  e fields that fo
21440 6c 6c 6f 77 2c 0a 20 20 2a 2a 20 64 6f 77 6e 20  llow,.  ** down 
21450 74 6f 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67  to the beginning
21460 20 6f 66 20 74 68 65 20 72 65 63 75 72 73 69 76   of the recursiv
21470 65 20 73 65 63 74 69 6f 6e 2c 20 64 6f 20 6e 6f  e section, do no
21480 74 20 6e 65 65 64 20 74 6f 20 62 65 0a 20 20 2a  t need to be.  *
21490 2a 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 61 73  * initialized as
214a0 20 74 68 65 79 20 77 69 6c 6c 20 62 65 20 73 65   they will be se
214b0 74 20 62 65 66 6f 72 65 20 62 65 69 6e 67 20 75  t before being u
214c0 73 65 64 2e 20 20 54 68 65 20 62 6f 75 6e 64 61  sed.  The bounda
214d0 72 79 20 69 73 0a 20 20 2a 2a 20 64 65 74 65 72  ry is.  ** deter
214e0 6d 69 6e 65 64 20 62 79 20 6f 66 66 73 65 74 6f  mined by offseto
214f0 66 28 50 61 72 73 65 2c 61 54 65 6d 70 52 65 67  f(Parse,aTempReg
21500 29 2e 0a 20 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  )..  ***********
21510 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21520 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21530 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21540 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f  ***************/
21550 0a 0a 20 20 69 6e 74 20 61 54 65 6d 70 52 65 67  ..  int aTempReg
21560 5b 38 5d 3b 20 20 20 20 20 20 20 20 2f 2a 20 48  [8];        /* H
21570 6f 6c 64 69 6e 67 20 61 72 65 61 20 66 6f 72 20  olding area for 
21580 74 65 6d 70 6f 72 61 72 79 20 72 65 67 69 73 74  temporary regist
21590 65 72 73 20 2a 2f 0a 20 20 54 6f 6b 65 6e 20 73  ers */.  Token s
215a0 4e 61 6d 65 54 6f 6b 65 6e 3b 20 20 20 20 20 20  NameToken;      
215b0 20 2f 2a 20 54 6f 6b 65 6e 20 77 69 74 68 20 75   /* Token with u
215c0 6e 71 75 61 6c 69 66 69 65 64 20 73 63 68 65 6d  nqualified schem
215d0 61 20 6f 62 6a 65 63 74 20 6e 61 6d 65 20 2a 2f  a object name */
215e0 0a 0a 20 20 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ..  /***********
215f0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21600 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21610 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21620 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 20 20  *************.  
21630 2a 2a 20 41 62 6f 76 65 20 69 73 20 63 6f 6e 73  ** Above is cons
21640 74 61 6e 74 20 62 65 74 77 65 65 6e 20 72 65 63  tant between rec
21650 75 72 73 69 6f 6e 73 2e 20 20 42 65 6c 6f 77 20  ursions.  Below 
21660 69 73 20 72 65 73 65 74 20 62 65 66 6f 72 65 20  is reset before 
21670 61 6e 64 20 61 66 74 65 72 0a 20 20 2a 2a 20 65  and after.  ** e
21680 61 63 68 20 72 65 63 75 72 73 69 6f 6e 2e 20 20  ach recursion.  
21690 54 68 65 20 62 6f 75 6e 64 61 72 79 20 62 65 74  The boundary bet
216a0 77 65 65 6e 20 74 68 65 73 65 20 74 77 6f 20 72  ween these two r
216b0 65 67 69 6f 6e 73 20 69 73 20 64 65 74 65 72 6d  egions is determ
216c0 69 6e 65 64 0a 20 20 2a 2a 20 75 73 69 6e 67 20  ined.  ** using 
216d0 6f 66 66 73 65 74 6f 66 28 50 61 72 73 65 2c 73  offsetof(Parse,s
216e0 4c 61 73 74 54 6f 6b 65 6e 29 20 73 6f 20 74 68  LastToken) so th
216f0 65 20 73 4c 61 73 74 54 6f 6b 65 6e 20 66 69 65  e sLastToken fie
21700 6c 64 20 6d 75 73 74 20 62 65 20 74 68 65 0a 20  ld must be the. 
21710 20 2a 2a 20 66 69 72 73 74 20 66 69 65 6c 64 20   ** first field 
21720 69 6e 20 74 68 65 20 72 65 63 75 72 73 69 76 65  in the recursive
21730 20 72 65 67 69 6f 6e 2e 0a 20 20 2a 2a 2a 2a 2a   region..  *****
21740 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21750 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21760 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21770 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21780 2a 2a 2a 2f 0a 0a 20 20 54 6f 6b 65 6e 20 73 4c  ***/..  Token sL
21790 61 73 74 54 6f 6b 65 6e 3b 20 20 20 20 20 20 20  astToken;       
217a0 2f 2a 20 54 68 65 20 6c 61 73 74 20 74 6f 6b 65  /* The last toke
217b0 6e 20 70 61 72 73 65 64 20 2a 2f 0a 20 20 79 6e  n parsed */.  yn
217c0 56 61 72 20 6e 56 61 72 3b 20 20 20 20 20 20 20  Var nVar;       
217d0 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
217e0 72 20 6f 66 20 27 3f 27 20 76 61 72 69 61 62 6c  r of '?' variabl
217f0 65 73 20 73 65 65 6e 20 69 6e 20 74 68 65 20 53  es seen in the S
21800 51 4c 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20 75  QL so far */.  u
21810 38 20 69 50 6b 53 6f 72 74 4f 72 64 65 72 3b 20  8 iPkSortOrder; 
21820 20 20 20 20 20 20 20 20 20 2f 2a 20 41 53 43 20           /* ASC 
21830 6f 72 20 44 45 53 43 20 66 6f 72 20 49 4e 54 45  or DESC for INTE
21840 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59 20  GER PRIMARY KEY 
21850 2a 2f 0a 20 20 75 38 20 65 78 70 6c 61 69 6e 3b  */.  u8 explain;
21860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
21870 2a 20 54 72 75 65 20 69 66 20 74 68 65 20 45 58  * True if the EX
21880 50 4c 41 49 4e 20 66 6c 61 67 20 69 73 20 66 6f  PLAIN flag is fo
21890 75 6e 64 20 6f 6e 20 74 68 65 20 71 75 65 72 79  und on the query
218a0 20 2a 2f 0a 23 69 66 20 21 28 64 65 66 69 6e 65   */.#if !(define
218b0 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  d(SQLITE_OMIT_VI
218c0 52 54 55 41 4c 54 41 42 4c 45 29 20 26 26 20 64  RTUALTABLE) && d
218d0 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d  efined(SQLITE_OM
218e0 49 54 5f 41 4c 54 45 52 54 41 42 4c 45 29 29 0a  IT_ALTERTABLE)).
218f0 20 20 75 38 20 65 50 61 72 73 65 4d 6f 64 65 3b    u8 eParseMode;
21900 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50              /* P
21910 41 52 53 45 5f 4d 4f 44 45 5f 58 58 58 20 63 6f  ARSE_MODE_XXX co
21920 6e 73 74 61 6e 74 20 2a 2f 0a 23 65 6e 64 69 66  nstant */.#endif
21930 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
21940 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
21950 45 0a 20 20 69 6e 74 20 6e 56 74 61 62 4c 6f 63  E.  int nVtabLoc
21960 6b 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  k;            /*
21970 20 4e 75 6d 62 65 72 20 6f 66 20 76 69 72 74 75   Number of virtu
21980 61 6c 20 74 61 62 6c 65 73 20 74 6f 20 6c 6f 63  al tables to loc
21990 6b 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 69 6e  k */.#endif.  in
219a0 74 20 6e 48 65 69 67 68 74 3b 20 20 20 20 20 20  t nHeight;      
219b0 20 20 20 20 20 20 20 20 2f 2a 20 45 78 70 72 65          /* Expre
219c0 73 73 69 6f 6e 20 74 72 65 65 20 68 65 69 67 68  ssion tree heigh
219d0 74 20 6f 66 20 63 75 72 72 65 6e 74 20 73 75 62  t of current sub
219e0 2d 73 65 6c 65 63 74 20 2a 2f 0a 23 69 66 6e 64  -select */.#ifnd
219f0 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 45  ef SQLITE_OMIT_E
21a00 58 50 4c 41 49 4e 0a 20 20 69 6e 74 20 61 64 64  XPLAIN.  int add
21a10 72 45 78 70 6c 61 69 6e 3b 20 20 20 20 20 20 20  rExplain;       
21a20 20 20 20 2f 2a 20 41 64 64 72 65 73 73 20 6f 66     /* Address of
21a30 20 63 75 72 72 65 6e 74 20 4f 50 5f 45 78 70 6c   current OP_Expl
21a40 61 69 6e 20 6f 70 63 6f 64 65 20 2a 2f 0a 23 65  ain opcode */.#e
21a50 6e 64 69 66 0a 20 20 56 4c 69 73 74 20 2a 70 56  ndif.  VList *pV
21a60 4c 69 73 74 3b 20 20 20 20 20 20 20 20 20 20 20  List;           
21a70 20 2f 2a 20 4d 61 70 70 69 6e 67 20 62 65 74 77   /* Mapping betw
21a80 65 65 6e 20 76 61 72 69 61 62 6c 65 20 6e 61 6d  een variable nam
21a90 65 73 20 61 6e 64 20 6e 75 6d 62 65 72 73 20 2a  es and numbers *
21aa0 2f 0a 20 20 56 64 62 65 20 2a 70 52 65 70 72 65  /.  Vdbe *pRepre
21ab0 70 61 72 65 3b 20 20 20 20 20 20 20 20 20 2f 2a  pare;         /*
21ac0 20 56 4d 20 62 65 69 6e 67 20 72 65 70 72 65 70   VM being reprep
21ad0 61 72 65 64 20 28 73 71 6c 69 74 65 33 52 65 70  ared (sqlite3Rep
21ae0 72 65 70 61 72 65 28 29 29 20 2a 2f 0a 20 20 63  repare()) */.  c
21af0 6f 6e 73 74 20 63 68 61 72 20 2a 7a 54 61 69 6c  onst char *zTail
21b00 3b 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20  ;        /* All 
21b10 53 51 4c 20 74 65 78 74 20 70 61 73 74 20 74 68  SQL text past th
21b20 65 20 6c 61 73 74 20 73 65 6d 69 63 6f 6c 6f 6e  e last semicolon
21b30 20 70 61 72 73 65 64 20 2a 2f 0a 20 20 54 61 62   parsed */.  Tab
21b40 6c 65 20 2a 70 4e 65 77 54 61 62 6c 65 3b 20 20  le *pNewTable;  
21b50 20 20 20 20 20 20 20 2f 2a 20 41 20 74 61 62 6c         /* A tabl
21b60 65 20 62 65 69 6e 67 20 63 6f 6e 73 74 72 75 63  e being construc
21b70 74 65 64 20 62 79 20 43 52 45 41 54 45 20 54 41  ted by CREATE TA
21b80 42 4c 45 20 2a 2f 0a 20 20 49 6e 64 65 78 20 2a  BLE */.  Index *
21b90 70 4e 65 77 49 6e 64 65 78 3b 20 20 20 20 20 20  pNewIndex;      
21ba0 20 20 20 2f 2a 20 41 6e 20 69 6e 64 65 78 20 62     /* An index b
21bb0 65 69 6e 67 20 63 6f 6e 73 74 72 75 63 74 65 64  eing constructed
21bc0 20 62 79 20 43 52 45 41 54 45 20 49 4e 44 45 58   by CREATE INDEX
21bd0 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 20 2a 70   */.  Trigger *p
21be0 4e 65 77 54 72 69 67 67 65 72 3b 20 20 20 20 20  NewTrigger;     
21bf0 2f 2a 20 54 72 69 67 67 65 72 20 75 6e 64 65 72  /* Trigger under
21c00 20 63 6f 6e 73 74 72 75 63 74 20 62 79 20 61 20   construct by a 
21c10 43 52 45 41 54 45 20 54 52 49 47 47 45 52 20 2a  CREATE TRIGGER *
21c20 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  /.  const char *
21c30 7a 41 75 74 68 43 6f 6e 74 65 78 74 3b 20 2f 2a  zAuthContext; /*
21c40 20 54 68 65 20 36 74 68 20 70 61 72 61 6d 65 74   The 6th paramet
21c50 65 72 20 74 6f 20 64 62 2d 3e 78 41 75 74 68 20  er to db->xAuth 
21c60 63 61 6c 6c 62 61 63 6b 73 20 2a 2f 0a 23 69 66  callbacks */.#if
21c70 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
21c80 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 20 20  _VIRTUALTABLE.  
21c90 54 6f 6b 65 6e 20 73 41 72 67 3b 20 20 20 20 20  Token sArg;     
21ca0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6d            /* Com
21cb0 70 6c 65 74 65 20 74 65 78 74 20 6f 66 20 61 20  plete text of a 
21cc0 6d 6f 64 75 6c 65 20 61 72 67 75 6d 65 6e 74 20  module argument 
21cd0 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 2a 61 70 56  */.  Table **apV
21ce0 74 61 62 4c 6f 63 6b 3b 20 20 20 20 20 20 20 2f  tabLock;       /
21cf0 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 76 69 72  * Pointer to vir
21d00 74 75 61 6c 20 74 61 62 6c 65 73 20 6e 65 65 64  tual tables need
21d10 69 6e 67 20 6c 6f 63 6b 69 6e 67 20 2a 2f 0a 23  ing locking */.#
21d20 65 6e 64 69 66 0a 20 20 54 61 62 6c 65 20 2a 70  endif.  Table *p
21d30 5a 6f 6d 62 69 65 54 61 62 3b 20 20 20 20 20 20  ZombieTab;      
21d40 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 54 61 62    /* List of Tab
21d50 6c 65 20 6f 62 6a 65 63 74 73 20 74 6f 20 64 65  le objects to de
21d60 6c 65 74 65 20 61 66 74 65 72 20 63 6f 64 65 20  lete after code 
21d70 67 65 6e 20 2a 2f 0a 20 20 54 72 69 67 67 65 72  gen */.  Trigger
21d80 50 72 67 20 2a 70 54 72 69 67 67 65 72 50 72 67  Prg *pTriggerPrg
21d90 3b 20 20 2f 2a 20 4c 69 6e 6b 65 64 20 6c 69 73  ;  /* Linked lis
21da0 74 20 6f 66 20 63 6f 64 65 64 20 74 72 69 67 67  t of coded trigg
21db0 65 72 73 20 2a 2f 0a 20 20 57 69 74 68 20 2a 70  ers */.  With *p
21dc0 57 69 74 68 3b 20 20 20 20 20 20 20 20 20 20 20  With;           
21dd0 20 20 20 2f 2a 20 43 75 72 72 65 6e 74 20 57 49     /* Current WI
21de0 54 48 20 63 6c 61 75 73 65 2c 20 6f 72 20 4e 55  TH clause, or NU
21df0 4c 4c 20 2a 2f 0a 20 20 57 69 74 68 20 2a 70 57  LL */.  With *pW
21e00 69 74 68 54 6f 46 72 65 65 3b 20 20 20 20 20 20  ithToFree;      
21e10 20 20 2f 2a 20 46 72 65 65 20 74 68 69 73 20 57    /* Free this W
21e20 49 54 48 20 6f 62 6a 65 63 74 20 61 74 20 74 68  ITH object at th
21e30 65 20 65 6e 64 20 6f 66 20 74 68 65 20 70 61 72  e end of the par
21e40 73 65 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51  se */.#ifndef SQ
21e50 4c 49 54 45 5f 4f 4d 49 54 5f 41 4c 54 45 52 54  LITE_OMIT_ALTERT
21e60 41 42 4c 45 0a 20 20 52 65 6e 61 6d 65 54 6f 6b  ABLE.  RenameTok
21e70 65 6e 20 2a 70 52 65 6e 61 6d 65 3b 20 20 20 20  en *pRename;    
21e80 20 2f 2a 20 54 6f 6b 65 6e 73 20 73 75 62 6a 65   /* Tokens subje
21e90 63 74 20 74 6f 20 72 65 6e 61 6d 69 6e 67 20 62  ct to renaming b
21ea0 79 20 41 4c 54 45 52 20 54 41 42 4c 45 20 2a 2f  y ALTER TABLE */
21eb0 0a 23 65 6e 64 69 66 0a 7d 3b 0a 0a 23 64 65 66  .#endif.};..#def
21ec0 69 6e 65 20 50 41 52 53 45 5f 4d 4f 44 45 5f 4e  ine PARSE_MODE_N
21ed0 4f 52 4d 41 4c 20 20 20 20 20 20 20 20 30 0a 23  ORMAL        0.#
21ee0 64 65 66 69 6e 65 20 50 41 52 53 45 5f 4d 4f 44  define PARSE_MOD
21ef0 45 5f 44 45 43 4c 41 52 45 5f 56 54 41 42 20 20  E_DECLARE_VTAB  
21f00 31 0a 23 64 65 66 69 6e 65 20 50 41 52 53 45 5f  1.#define PARSE_
21f10 4d 4f 44 45 5f 52 45 4e 41 4d 45 5f 43 4f 4c 55  MODE_RENAME_COLU
21f20 4d 4e 20 32 0a 23 64 65 66 69 6e 65 20 50 41 52  MN 2.#define PAR
21f30 53 45 5f 4d 4f 44 45 5f 52 45 4e 41 4d 45 5f 54  SE_MODE_RENAME_T
21f40 41 42 4c 45 20 20 33 0a 0a 2f 2a 0a 2a 2a 20 53  ABLE  3../*.** S
21f50 69 7a 65 73 20 61 6e 64 20 70 6f 69 6e 74 65 72  izes and pointer
21f60 73 20 6f 66 20 76 61 72 69 6f 75 73 20 70 61 72  s of various par
21f70 74 73 20 6f 66 20 74 68 65 20 50 61 72 73 65 20  ts of the Parse 
21f80 6f 62 6a 65 63 74 2e 0a 2a 2f 0a 23 64 65 66 69  object..*/.#defi
21f90 6e 65 20 50 41 52 53 45 5f 48 44 52 5f 53 5a 20  ne PARSE_HDR_SZ 
21fa0 6f 66 66 73 65 74 6f 66 28 50 61 72 73 65 2c 61  offsetof(Parse,a
21fb0 54 65 6d 70 52 65 67 29 20 2f 2a 20 52 65 63 75  TempReg) /* Recu
21fc0 72 73 69 76 65 20 70 61 72 74 20 77 2f 6f 20 61  rsive part w/o a
21fd0 43 6f 6c 43 61 63 68 65 2a 2f 0a 23 64 65 66 69  ColCache*/.#defi
21fe0 6e 65 20 50 41 52 53 45 5f 52 45 43 55 52 53 45  ne PARSE_RECURSE
21ff0 5f 53 5a 20 6f 66 66 73 65 74 6f 66 28 50 61 72  _SZ offsetof(Par
22000 73 65 2c 73 4c 61 73 74 54 6f 6b 65 6e 29 20 20  se,sLastToken)  
22010 20 20 2f 2a 20 52 65 63 75 72 73 69 76 65 20 70    /* Recursive p
22020 61 72 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 50  art */.#define P
22030 41 52 53 45 5f 54 41 49 4c 5f 53 5a 20 28 73 69  ARSE_TAIL_SZ (si
22040 7a 65 6f 66 28 50 61 72 73 65 29 2d 50 41 52 53  zeof(Parse)-PARS
22050 45 5f 52 45 43 55 52 53 45 5f 53 5a 29 20 2f 2a  E_RECURSE_SZ) /*
22060 20 4e 6f 6e 2d 72 65 63 75 72 73 69 76 65 20 70   Non-recursive p
22070 61 72 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 50  art */.#define P
22080 41 52 53 45 5f 54 41 49 4c 28 58 29 20 28 28 28  ARSE_TAIL(X) (((
22090 63 68 61 72 2a 29 28 58 29 29 2b 50 41 52 53 45  char*)(X))+PARSE
220a0 5f 52 45 43 55 52 53 45 5f 53 5a 29 20 20 2f 2a  _RECURSE_SZ)  /*
220b0 20 50 6f 69 6e 74 65 72 20 74 6f 20 74 61 69 6c   Pointer to tail
220c0 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72   */../*.** Retur
220d0 6e 20 74 72 75 65 20 69 66 20 63 75 72 72 65 6e  n true if curren
220e0 74 6c 79 20 69 6e 73 69 64 65 20 61 6e 20 73 71  tly inside an sq
220f0 6c 69 74 65 33 5f 64 65 63 6c 61 72 65 5f 76 74  lite3_declare_vt
22100 61 62 28 29 20 63 61 6c 6c 2e 0a 2a 2f 0a 23 69  ab() call..*/.#i
22110 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  fdef SQLITE_OMIT
22120 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 20 20  _VIRTUALTABLE.  
22130 23 64 65 66 69 6e 65 20 49 4e 5f 44 45 43 4c 41  #define IN_DECLA
22140 52 45 5f 56 54 41 42 20 30 0a 23 65 6c 73 65 0a  RE_VTAB 0.#else.
22150 20 20 23 64 65 66 69 6e 65 20 49 4e 5f 44 45 43    #define IN_DEC
22160 4c 41 52 45 5f 56 54 41 42 20 28 70 50 61 72 73  LARE_VTAB (pPars
22170 65 2d 3e 65 50 61 72 73 65 4d 6f 64 65 3d 3d 50  e->eParseMode==P
22180 41 52 53 45 5f 4d 4f 44 45 5f 44 45 43 4c 41 52  ARSE_MODE_DECLAR
22190 45 5f 56 54 41 42 29 0a 23 65 6e 64 69 66 0a 0a  E_VTAB).#endif..
221a0 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49  #if defined(SQLI
221b0 54 45 5f 4f 4d 49 54 5f 41 4c 54 45 52 54 41 42  TE_OMIT_ALTERTAB
221c0 4c 45 29 0a 20 20 23 64 65 66 69 6e 65 20 49 4e  LE).  #define IN
221d0 5f 52 45 4e 41 4d 45 5f 4f 42 4a 45 43 54 20 30  _RENAME_OBJECT 0
221e0 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65  .#else.  #define
221f0 20 49 4e 5f 52 45 4e 41 4d 45 5f 4f 42 4a 45 43   IN_RENAME_OBJEC
22200 54 20 28 70 50 61 72 73 65 2d 3e 65 50 61 72 73  T (pParse->ePars
22210 65 4d 6f 64 65 3e 3d 50 41 52 53 45 5f 4d 4f 44  eMode>=PARSE_MOD
22220 45 5f 52 45 4e 41 4d 45 5f 43 4f 4c 55 4d 4e 29  E_RENAME_COLUMN)
22230 0a 23 65 6e 64 69 66 0a 0a 23 69 66 20 64 65 66  .#endif..#if def
22240 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54  ined(SQLITE_OMIT
22250 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 29 20 26  _VIRTUALTABLE) &
22260 26 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  & defined(SQLITE
22270 5f 4f 4d 49 54 5f 41 4c 54 45 52 54 41 42 4c 45  _OMIT_ALTERTABLE
22280 29 0a 20 20 23 64 65 66 69 6e 65 20 49 4e 5f 53  ).  #define IN_S
22290 50 45 43 49 41 4c 5f 50 41 52 53 45 20 30 0a 23  PECIAL_PARSE 0.#
222a0 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20 49  else.  #define I
222b0 4e 5f 53 50 45 43 49 41 4c 5f 50 41 52 53 45 20  N_SPECIAL_PARSE 
222c0 28 70 50 61 72 73 65 2d 3e 65 50 61 72 73 65 4d  (pParse->eParseM
222d0 6f 64 65 21 3d 50 41 52 53 45 5f 4d 4f 44 45 5f  ode!=PARSE_MODE_
222e0 4e 4f 52 4d 41 4c 29 0a 23 65 6e 64 69 66 0a 0a  NORMAL).#endif..
222f0 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63  /*.** An instanc
22300 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69  e of the followi
22310 6e 67 20 73 74 72 75 63 74 75 72 65 20 63 61 6e  ng structure can
22320 20 62 65 20 64 65 63 6c 61 72 65 64 20 6f 6e 20   be declared on 
22330 61 20 73 74 61 63 6b 20 61 6e 64 20 75 73 65 64  a stack and used
22340 0a 2a 2a 20 74 6f 20 73 61 76 65 20 74 68 65 20  .** to save the 
22350 50 61 72 73 65 2e 7a 41 75 74 68 43 6f 6e 74 65  Parse.zAuthConte
22360 78 74 20 76 61 6c 75 65 20 73 6f 20 74 68 61 74  xt value so that
22370 20 69 74 20 63 61 6e 20 62 65 20 72 65 73 74 6f   it can be resto
22380 72 65 64 20 6c 61 74 65 72 2e 0a 2a 2f 0a 73 74  red later..*/.st
22390 72 75 63 74 20 41 75 74 68 43 6f 6e 74 65 78 74  ruct AuthContext
223a0 20 7b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20   {.  const char 
223b0 2a 7a 41 75 74 68 43 6f 6e 74 65 78 74 3b 20 20  *zAuthContext;  
223c0 20 2f 2a 20 50 75 74 20 73 61 76 65 64 20 50 61   /* Put saved Pa
223d0 72 73 65 2e 7a 41 75 74 68 43 6f 6e 74 65 78 74  rse.zAuthContext
223e0 20 68 65 72 65 20 2a 2f 0a 20 20 50 61 72 73 65   here */.  Parse
223f0 20 2a 70 50 61 72 73 65 3b 20 20 20 20 20 20 20   *pParse;       
22400 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 50 61         /* The Pa
22410 72 73 65 20 73 74 72 75 63 74 75 72 65 20 2a 2f  rse structure */
22420 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 42 69 74 66 69  .};../*.** Bitfi
22430 65 6c 64 20 66 6c 61 67 73 20 66 6f 72 20 50 35  eld flags for P5
22440 20 76 61 6c 75 65 20 69 6e 20 76 61 72 69 6f 75   value in variou
22450 73 20 6f 70 63 6f 64 65 73 2e 0a 2a 2a 0a 2a 2a  s opcodes..**.**
22460 20 56 61 6c 75 65 20 63 6f 6e 73 74 72 61 69 6e   Value constrain
22470 74 73 20 28 65 6e 66 6f 72 63 65 64 20 76 69 61  ts (enforced via
22480 20 61 73 73 65 72 74 28 29 29 3a 0a 2a 2a 20 20   assert()):.**  
22490 20 20 4f 50 46 4c 41 47 5f 4c 45 4e 47 54 48 41    OPFLAG_LENGTHA
224a0 52 47 20 20 20 20 3d 3d 20 53 51 4c 49 54 45 5f  RG    == SQLITE_
224b0 46 55 4e 43 5f 4c 45 4e 47 54 48 0a 2a 2a 20 20  FUNC_LENGTH.**  
224c0 20 20 4f 50 46 4c 41 47 5f 54 59 50 45 4f 46 41    OPFLAG_TYPEOFA
224d0 52 47 20 20 20 20 3d 3d 20 53 51 4c 49 54 45 5f  RG    == SQLITE_
224e0 46 55 4e 43 5f 54 59 50 45 4f 46 0a 2a 2a 20 20  FUNC_TYPEOF.**  
224f0 20 20 4f 50 46 4c 41 47 5f 42 55 4c 4b 43 53 52    OPFLAG_BULKCSR
22500 20 20 20 20 20 20 3d 3d 20 42 54 52 45 45 5f 42        == BTREE_B
22510 55 4c 4b 4c 4f 41 44 0a 2a 2a 20 20 20 20 4f 50  ULKLOAD.**    OP
22520 46 4c 41 47 5f 53 45 45 4b 45 51 20 20 20 20 20  FLAG_SEEKEQ     
22530 20 20 3d 3d 20 42 54 52 45 45 5f 53 45 45 4b 5f    == BTREE_SEEK_
22540 45 51 0a 2a 2a 20 20 20 20 4f 50 46 4c 41 47 5f  EQ.**    OPFLAG_
22550 46 4f 52 44 45 4c 45 54 45 20 20 20 20 3d 3d 20  FORDELETE    == 
22560 42 54 52 45 45 5f 46 4f 52 44 45 4c 45 54 45 0a  BTREE_FORDELETE.
22570 2a 2a 20 20 20 20 4f 50 46 4c 41 47 5f 53 41 56  **    OPFLAG_SAV
22580 45 50 4f 53 49 54 49 4f 4e 20 3d 3d 20 42 54 52  EPOSITION == BTR
22590 45 45 5f 53 41 56 45 50 4f 53 49 54 49 4f 4e 0a  EE_SAVEPOSITION.
225a0 2a 2a 20 20 20 20 4f 50 46 4c 41 47 5f 41 55 58  **    OPFLAG_AUX
225b0 44 45 4c 45 54 45 20 20 20 20 3d 3d 20 42 54 52  DELETE    == BTR
225c0 45 45 5f 41 55 58 44 45 4c 45 54 45 0a 2a 2f 0a  EE_AUXDELETE.*/.
225d0 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 4e  #define OPFLAG_N
225e0 43 48 41 4e 47 45 20 20 20 20 20 20 20 30 78 30  CHANGE       0x0
225f0 31 20 20 20 20 2f 2a 20 4f 50 5f 49 6e 73 65 72  1    /* OP_Inser
22600 74 3a 20 53 65 74 20 74 6f 20 75 70 64 61 74 65  t: Set to update
22610 20 64 62 2d 3e 6e 43 68 61 6e 67 65 20 2a 2f 0a   db->nChange */.
22620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22640 20 20 20 20 20 2f 2a 20 41 6c 73 6f 20 75 73 65       /* Also use
22650 64 20 69 6e 20 50 32 20 28 6e 6f 74 20 50 35 29  d in P2 (not P5)
22660 20 6f 66 20 4f 50 5f 44 65 6c 65 74 65 20 2a 2f   of OP_Delete */
22670 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f  .#define OPFLAG_
22680 4e 4f 43 48 4e 47 20 20 20 20 20 20 20 20 30 78  NOCHNG        0x
22690 30 31 20 20 20 20 2f 2a 20 4f 50 5f 56 43 6f 6c  01    /* OP_VCol
226a0 75 6d 6e 20 6e 6f 63 68 61 6e 67 65 20 66 6f 72  umn nochange for
226b0 20 55 50 44 41 54 45 20 2a 2f 0a 23 64 65 66 69   UPDATE */.#defi
226c0 6e 65 20 4f 50 46 4c 41 47 5f 45 50 48 45 4d 20  ne OPFLAG_EPHEM 
226d0 20 20 20 20 20 20 20 20 30 78 30 31 20 20 20 20          0x01    
226e0 2f 2a 20 4f 50 5f 43 6f 6c 75 6d 6e 3a 20 45 70  /* OP_Column: Ep
226f0 68 65 6d 65 72 61 6c 20 6f 75 74 70 75 74 20 69  hemeral output i
22700 73 20 6f 6b 20 2a 2f 0a 23 64 65 66 69 6e 65 20  s ok */.#define 
22710 4f 50 46 4c 41 47 5f 4c 41 53 54 52 4f 57 49 44  OPFLAG_LASTROWID
22720 20 20 20 20 20 30 78 32 30 20 20 20 20 2f 2a 20       0x20    /* 
22730 53 65 74 20 74 6f 20 75 70 64 61 74 65 20 64 62  Set to update db
22740 2d 3e 6c 61 73 74 52 6f 77 69 64 20 2a 2f 0a 23  ->lastRowid */.#
22750 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 49 53  define OPFLAG_IS
22760 55 50 44 41 54 45 20 20 20 20 20 20 30 78 30 34  UPDATE      0x04
22770 20 20 20 20 2f 2a 20 54 68 69 73 20 4f 50 5f 49      /* This OP_I
22780 6e 73 65 72 74 20 69 73 20 61 6e 20 73 71 6c 20  nsert is an sql 
22790 55 50 44 41 54 45 20 2a 2f 0a 23 64 65 66 69 6e  UPDATE */.#defin
227a0 65 20 4f 50 46 4c 41 47 5f 41 50 50 45 4e 44 20  e OPFLAG_APPEND 
227b0 20 20 20 20 20 20 20 30 78 30 38 20 20 20 20 2f         0x08    /
227c0 2a 20 54 68 69 73 20 69 73 20 6c 69 6b 65 6c 79  * This is likely
227d0 20 74 6f 20 62 65 20 61 6e 20 61 70 70 65 6e 64   to be an append
227e0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c   */.#define OPFL
227f0 41 47 5f 55 53 45 53 45 45 4b 52 45 53 55 4c 54  AG_USESEEKRESULT
22800 20 30 78 31 30 20 20 20 20 2f 2a 20 54 72 79 20   0x10    /* Try 
22810 74 6f 20 61 76 6f 69 64 20 61 20 73 65 65 6b 20  to avoid a seek 
22820 69 6e 20 42 74 72 65 65 49 6e 73 65 72 74 28 29  in BtreeInsert()
22830 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c   */.#define OPFL
22840 41 47 5f 49 53 4e 4f 4f 50 20 20 20 20 20 20 20  AG_ISNOOP       
22850 20 30 78 34 30 20 20 20 20 2f 2a 20 4f 50 5f 44   0x40    /* OP_D
22860 65 6c 65 74 65 20 64 6f 65 73 20 70 72 65 2d 75  elete does pre-u
22870 70 64 61 74 65 2d 68 6f 6f 6b 20 6f 6e 6c 79 20  pdate-hook only 
22880 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41  */.#define OPFLA
22890 47 5f 4c 45 4e 47 54 48 41 52 47 20 20 20 20 20  G_LENGTHARG     
228a0 30 78 34 30 20 20 20 20 2f 2a 20 4f 50 5f 43 6f  0x40    /* OP_Co
228b0 6c 75 6d 6e 20 6f 6e 6c 79 20 75 73 65 64 20 66  lumn only used f
228c0 6f 72 20 6c 65 6e 67 74 68 28 29 20 2a 2f 0a 23  or length() */.#
228d0 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 54 59  define OPFLAG_TY
228e0 50 45 4f 46 41 52 47 20 20 20 20 20 30 78 38 30  PEOFARG     0x80
228f0 20 20 20 20 2f 2a 20 4f 50 5f 43 6f 6c 75 6d 6e      /* OP_Column
22900 20 6f 6e 6c 79 20 75 73 65 64 20 66 6f 72 20 74   only used for t
22910 79 70 65 6f 66 28 29 20 2a 2f 0a 23 64 65 66 69  ypeof() */.#defi
22920 6e 65 20 4f 50 46 4c 41 47 5f 42 55 4c 4b 43 53  ne OPFLAG_BULKCS
22930 52 20 20 20 20 20 20 20 30 78 30 31 20 20 20 20  R       0x01    
22940 2f 2a 20 4f 50 5f 4f 70 65 6e 2a 2a 20 75 73 65  /* OP_Open** use
22950 64 20 74 6f 20 6f 70 65 6e 20 62 75 6c 6b 20 63  d to open bulk c
22960 75 72 73 6f 72 20 2a 2f 0a 23 64 65 66 69 6e 65  ursor */.#define
22970 20 4f 50 46 4c 41 47 5f 53 45 45 4b 45 51 20 20   OPFLAG_SEEKEQ  
22980 20 20 20 20 20 20 30 78 30 32 20 20 20 20 2f 2a        0x02    /*
22990 20 4f 50 5f 4f 70 65 6e 2a 2a 20 63 75 72 73 6f   OP_Open** curso
229a0 72 20 75 73 65 73 20 45 51 20 73 65 65 6b 20 6f  r uses EQ seek o
229b0 6e 6c 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  nly */.#define O
229c0 50 46 4c 41 47 5f 46 4f 52 44 45 4c 45 54 45 20  PFLAG_FORDELETE 
229d0 20 20 20 20 30 78 30 38 20 20 20 20 2f 2a 20 4f      0x08    /* O
229e0 50 5f 4f 70 65 6e 20 73 68 6f 75 6c 64 20 75 73  P_Open should us
229f0 65 20 42 54 52 45 45 5f 46 4f 52 44 45 4c 45 54  e BTREE_FORDELET
22a00 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46  E */.#define OPF
22a10 4c 41 47 5f 50 32 49 53 52 45 47 20 20 20 20 20  LAG_P2ISREG     
22a20 20 20 30 78 31 30 20 20 20 20 2f 2a 20 50 32 20    0x10    /* P2 
22a30 74 6f 20 4f 50 5f 4f 70 65 6e 2a 2a 20 69 73 20  to OP_Open** is 
22a40 61 20 72 65 67 69 73 74 65 72 20 6e 75 6d 62 65  a register numbe
22a50 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46  r */.#define OPF
22a60 4c 41 47 5f 50 45 52 4d 55 54 45 20 20 20 20 20  LAG_PERMUTE     
22a70 20 20 30 78 30 31 20 20 20 20 2f 2a 20 4f 50 5f    0x01    /* OP_
22a80 43 6f 6d 70 61 72 65 3a 20 75 73 65 20 74 68 65  Compare: use the
22a90 20 70 65 72 6d 75 74 61 74 69 6f 6e 20 2a 2f 0a   permutation */.
22aa0 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 53  #define OPFLAG_S
22ab0 41 56 45 50 4f 53 49 54 49 4f 4e 20 20 30 78 30  AVEPOSITION  0x0
22ac0 32 20 20 20 20 2f 2a 20 4f 50 5f 44 65 6c 65 74  2    /* OP_Delet
22ad0 65 2f 49 6e 73 65 72 74 3a 20 73 61 76 65 20 63  e/Insert: save c
22ae0 75 72 73 6f 72 20 70 6f 73 20 2a 2f 0a 23 64 65  ursor pos */.#de
22af0 66 69 6e 65 20 4f 50 46 4c 41 47 5f 41 55 58 44  fine OPFLAG_AUXD
22b00 45 4c 45 54 45 20 20 20 20 20 30 78 30 34 20 20  ELETE     0x04  
22b10 20 20 2f 2a 20 4f 50 5f 44 65 6c 65 74 65 3a 20    /* OP_Delete: 
22b20 69 6e 64 65 78 20 69 6e 20 61 20 44 45 4c 45 54  index in a DELET
22b30 45 20 6f 70 20 2a 2f 0a 23 64 65 66 69 6e 65 20  E op */.#define 
22b40 4f 50 46 4c 41 47 5f 4e 4f 43 48 4e 47 5f 4d 41  OPFLAG_NOCHNG_MA
22b50 47 49 43 20 20 30 78 36 64 20 20 20 20 2f 2a 20  GIC  0x6d    /* 
22b60 4f 50 5f 4d 61 6b 65 52 65 63 6f 72 64 3a 20 73  OP_MakeRecord: s
22b70 65 72 69 61 6c 74 79 70 65 20 31 30 20 69 73 20  erialtype 10 is 
22b80 6f 6b 20 2a 2f 0a 0a 2f 2a 0a 20 2a 20 45 61 63  ok */../*. * Eac
22b90 68 20 74 72 69 67 67 65 72 20 70 72 65 73 65 6e  h trigger presen
22ba0 74 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73  t in the databas
22bb0 65 20 73 63 68 65 6d 61 20 69 73 20 73 74 6f 72  e schema is stor
22bc0 65 64 20 61 73 20 61 6e 20 69 6e 73 74 61 6e 63  ed as an instanc
22bd0 65 20 6f 66 0a 20 2a 20 73 74 72 75 63 74 20 54  e of. * struct T
22be0 72 69 67 67 65 72 2e 0a 20 2a 0a 20 2a 20 50 6f  rigger.. *. * Po
22bf0 69 6e 74 65 72 73 20 74 6f 20 69 6e 73 74 61 6e  inters to instan
22c00 63 65 73 20 6f 66 20 73 74 72 75 63 74 20 54 72  ces of struct Tr
22c10 69 67 67 65 72 20 61 72 65 20 73 74 6f 72 65 64  igger are stored
22c20 20 69 6e 20 74 77 6f 20 77 61 79 73 2e 0a 20 2a   in two ways.. *
22c30 20 31 2e 20 49 6e 20 74 68 65 20 22 74 72 69 67   1. In the "trig
22c40 48 61 73 68 22 20 68 61 73 68 20 74 61 62 6c 65  Hash" hash table
22c50 20 28 70 61 72 74 20 6f 66 20 74 68 65 20 73 71   (part of the sq
22c60 6c 69 74 65 33 2a 20 74 68 61 74 20 72 65 70 72  lite3* that repr
22c70 65 73 65 6e 74 73 20 74 68 65 0a 20 2a 20 20 20  esents the. *   
22c80 20 64 61 74 61 62 61 73 65 29 2e 20 54 68 69 73   database). This
22c90 20 61 6c 6c 6f 77 73 20 54 72 69 67 67 65 72 20   allows Trigger 
22ca0 73 74 72 75 63 74 75 72 65 73 20 74 6f 20 62 65  structures to be
22cb0 20 72 65 74 72 69 65 76 65 64 20 62 79 20 6e 61   retrieved by na
22cc0 6d 65 2e 0a 20 2a 20 32 2e 20 41 6c 6c 20 74 72  me.. * 2. All tr
22cd0 69 67 67 65 72 73 20 61 73 73 6f 63 69 61 74 65  iggers associate
22ce0 64 20 77 69 74 68 20 61 20 73 69 6e 67 6c 65 20  d with a single 
22cf0 74 61 62 6c 65 20 66 6f 72 6d 20 61 20 6c 69 6e  table form a lin
22d00 6b 65 64 20 6c 69 73 74 2c 20 75 73 69 6e 67 20  ked list, using 
22d10 74 68 65 0a 20 2a 20 20 20 20 70 4e 65 78 74 20  the. *    pNext 
22d20 6d 65 6d 62 65 72 20 6f 66 20 73 74 72 75 63 74  member of struct
22d30 20 54 72 69 67 67 65 72 2e 20 41 20 70 6f 69 6e   Trigger. A poin
22d40 74 65 72 20 74 6f 20 74 68 65 20 66 69 72 73 74  ter to the first
22d50 20 65 6c 65 6d 65 6e 74 20 6f 66 20 74 68 65 0a   element of the.
22d60 20 2a 20 20 20 20 6c 69 6e 6b 65 64 20 6c 69 73   *    linked lis
22d70 74 20 69 73 20 73 74 6f 72 65 64 20 61 73 20 74  t is stored as t
22d80 68 65 20 22 70 54 72 69 67 67 65 72 22 20 6d 65  he "pTrigger" me
22d90 6d 62 65 72 20 6f 66 20 74 68 65 20 61 73 73 6f  mber of the asso
22da0 63 69 61 74 65 64 0a 20 2a 20 20 20 20 73 74 72  ciated. *    str
22db0 75 63 74 20 54 61 62 6c 65 2e 0a 20 2a 0a 20 2a  uct Table.. *. *
22dc0 20 54 68 65 20 22 73 74 65 70 5f 6c 69 73 74 22   The "step_list"
22dd0 20 6d 65 6d 62 65 72 20 70 6f 69 6e 74 73 20 74   member points t
22de0 6f 20 74 68 65 20 66 69 72 73 74 20 65 6c 65 6d  o the first elem
22df0 65 6e 74 20 6f 66 20 61 20 6c 69 6e 6b 65 64 20  ent of a linked 
22e00 6c 69 73 74 0a 20 2a 20 63 6f 6e 74 61 69 6e 69  list. * containi
22e10 6e 67 20 74 68 65 20 53 51 4c 20 73 74 61 74 65  ng the SQL state
22e20 6d 65 6e 74 73 20 73 70 65 63 69 66 69 65 64 20  ments specified 
22e30 61 73 20 74 68 65 20 74 72 69 67 67 65 72 20 70  as the trigger p
22e40 72 6f 67 72 61 6d 2e 0a 20 2a 2f 0a 73 74 72 75  rogram.. */.stru
22e50 63 74 20 54 72 69 67 67 65 72 20 7b 0a 20 20 63  ct Trigger {.  c
22e60 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20  har *zName;     
22e70 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6e 61         /* The na
22e80 6d 65 20 6f 66 20 74 68 65 20 74 72 69 67 67 65  me of the trigge
22e90 72 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  r               
22ea0 20 20 20 20 20 20 20 20 20 2a 2f 0a 20 20 63 68           */.  ch
22eb0 61 72 20 2a 74 61 62 6c 65 3b 20 20 20 20 20 20  ar *table;      
22ec0 20 20 20 20 20 20 2f 2a 20 54 68 65 20 74 61 62        /* The tab
22ed0 6c 65 20 6f 72 20 76 69 65 77 20 74 6f 20 77 68  le or view to wh
22ee0 69 63 68 20 74 68 65 20 74 72 69 67 67 65 72 20  ich the trigger 
22ef0 61 70 70 6c 69 65 73 20 2a 2f 0a 20 20 75 38 20  applies */.  u8 
22f00 6f 70 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  op;             
22f10 20 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 20 54       /* One of T
22f20 4b 5f 44 45 4c 45 54 45 2c 20 54 4b 5f 55 50 44  K_DELETE, TK_UPD
22f30 41 54 45 2c 20 54 4b 5f 49 4e 53 45 52 54 20 20  ATE, TK_INSERT  
22f40 20 20 20 20 20 20 20 2a 2f 0a 20 20 75 38 20 74         */.  u8 t
22f50 72 5f 74 6d 3b 20 20 20 20 20 20 20 20 20 20 20  r_tm;           
22f60 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 20 54 52      /* One of TR
22f70 49 47 47 45 52 5f 42 45 46 4f 52 45 2c 20 54 52  IGGER_BEFORE, TR
22f80 49 47 47 45 52 5f 41 46 54 45 52 20 2a 2f 0a 20  IGGER_AFTER */. 
22f90 20 45 78 70 72 20 2a 70 57 68 65 6e 3b 20 20 20   Expr *pWhen;   
22fa0 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
22fb0 57 48 45 4e 20 63 6c 61 75 73 65 20 6f 66 20 74  WHEN clause of t
22fc0 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 28 6d  he expression (m
22fd0 61 79 20 62 65 20 4e 55 4c 4c 29 20 2a 2f 0a 20  ay be NULL) */. 
22fe0 20 49 64 4c 69 73 74 20 2a 70 43 6f 6c 75 6d 6e   IdList *pColumn
22ff0 73 3b 20 20 20 20 20 20 20 2f 2a 20 49 66 20 74  s;       /* If t
23000 68 69 73 20 69 73 20 61 6e 20 55 50 44 41 54 45  his is an UPDATE
23010 20 4f 46 20 3c 63 6f 6c 75 6d 6e 2d 6c 69 73 74   OF <column-list
23020 3e 20 74 72 69 67 67 65 72 2c 0a 20 20 20 20 20  > trigger,.     
23030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23040 20 20 20 20 20 20 20 20 74 68 65 20 3c 63 6f 6c          the <col
23050 75 6d 6e 2d 6c 69 73 74 3e 20 69 73 20 73 74 6f  umn-list> is sto
23060 72 65 64 20 68 65 72 65 20 2a 2f 0a 20 20 53 63  red here */.  Sc
23070 68 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20 20  hema *pSchema;  
23080 20 20 20 20 20 20 2f 2a 20 53 63 68 65 6d 61 20        /* Schema 
23090 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 74  containing the t
230a0 72 69 67 67 65 72 20 2a 2f 0a 20 20 53 63 68 65  rigger */.  Sche
230b0 6d 61 20 2a 70 54 61 62 53 63 68 65 6d 61 3b 20  ma *pTabSchema; 
230c0 20 20 20 20 2f 2a 20 53 63 68 65 6d 61 20 63 6f      /* Schema co
230d0 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 74 61 62  ntaining the tab
230e0 6c 65 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 53  le */.  TriggerS
230f0 74 65 70 20 2a 73 74 65 70 5f 6c 69 73 74 3b 20  tep *step_list; 
23100 2f 2a 20 4c 69 6e 6b 20 6c 69 73 74 20 6f 66 20  /* Link list of 
23110 74 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d 20  trigger program 
23120 73 74 65 70 73 20 20 20 20 20 20 20 20 20 20 20  steps           
23130 20 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 20 2a    */.  Trigger *
23140 70 4e 65 78 74 3b 20 20 20 20 20 20 20 20 20 2f  pNext;         /
23150 2a 20 4e 65 78 74 20 74 72 69 67 67 65 72 20 61  * Next trigger a
23160 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74  ssociated with t
23170 68 65 20 74 61 62 6c 65 20 2a 2f 0a 7d 3b 0a 0a  he table */.};..
23180 2f 2a 0a 2a 2a 20 41 20 74 72 69 67 67 65 72 20  /*.** A trigger 
23190 69 73 20 65 69 74 68 65 72 20 61 20 42 45 46 4f  is either a BEFO
231a0 52 45 20 6f 72 20 61 6e 20 41 46 54 45 52 20 74  RE or an AFTER t
231b0 72 69 67 67 65 72 2e 20 20 54 68 65 20 66 6f 6c  rigger.  The fol
231c0 6c 6f 77 69 6e 67 20 63 6f 6e 73 74 61 6e 74 73  lowing constants
231d0 0a 2a 2a 20 64 65 74 65 72 6d 69 6e 65 20 77 68  .** determine wh
231e0 69 63 68 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68  ich..**.** If th
231f0 65 72 65 20 61 72 65 20 6d 75 6c 74 69 70 6c 65  ere are multiple
23200 20 74 72 69 67 67 65 72 73 2c 20 79 6f 75 20 6d   triggers, you m
23210 69 67 68 74 20 6f 66 20 73 6f 6d 65 20 42 45 46  ight of some BEF
23220 4f 52 45 20 61 6e 64 20 73 6f 6d 65 20 41 46 54  ORE and some AFT
23230 45 52 2e 0a 2a 2a 20 49 6e 20 74 68 61 74 20 63  ER..** In that c
23240 61 73 65 73 2c 20 74 68 65 20 63 6f 6e 73 74 61  ases, the consta
23250 6e 74 73 20 62 65 6c 6f 77 20 63 61 6e 20 62 65  nts below can be
23260 20 4f 52 65 64 20 74 6f 67 65 74 68 65 72 2e 0a   ORed together..
23270 2a 2f 0a 23 64 65 66 69 6e 65 20 54 52 49 47 47  */.#define TRIGG
23280 45 52 5f 42 45 46 4f 52 45 20 20 31 0a 23 64 65  ER_BEFORE  1.#de
23290 66 69 6e 65 20 54 52 49 47 47 45 52 5f 41 46 54  fine TRIGGER_AFT
232a0 45 52 20 20 20 32 0a 0a 2f 2a 0a 20 2a 20 41 6e  ER   2../*. * An
232b0 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 73 74 72   instance of str
232c0 75 63 74 20 54 72 69 67 67 65 72 53 74 65 70 20  uct TriggerStep 
232d0 69 73 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65  is used to store
232e0 20 61 20 73 69 6e 67 6c 65 20 53 51 4c 20 73 74   a single SQL st
232f0 61 74 65 6d 65 6e 74 0a 20 2a 20 74 68 61 74 20  atement. * that 
23300 69 73 20 61 20 70 61 72 74 20 6f 66 20 61 20 74  is a part of a t
23310 72 69 67 67 65 72 2d 70 72 6f 67 72 61 6d 2e 0a  rigger-program..
23320 20 2a 0a 20 2a 20 49 6e 73 74 61 6e 63 65 73 20   *. * Instances 
23330 6f 66 20 73 74 72 75 63 74 20 54 72 69 67 67 65  of struct Trigge
23340 72 53 74 65 70 20 61 72 65 20 73 74 6f 72 65 64  rStep are stored
23350 20 69 6e 20 61 20 73 69 6e 67 6c 79 20 6c 69 6e   in a singly lin
23360 6b 65 64 20 6c 69 73 74 20 28 6c 69 6e 6b 65 64  ked list (linked
23370 0a 20 2a 20 75 73 69 6e 67 20 74 68 65 20 22 70  . * using the "p
23380 4e 65 78 74 22 20 6d 65 6d 62 65 72 29 20 72 65  Next" member) re
23390 66 65 72 65 6e 63 65 64 20 62 79 20 74 68 65 20  ferenced by the 
233a0 22 73 74 65 70 5f 6c 69 73 74 22 20 6d 65 6d 62  "step_list" memb
233b0 65 72 20 6f 66 20 74 68 65 0a 20 2a 20 61 73 73  er of the. * ass
233c0 6f 63 69 61 74 65 64 20 73 74 72 75 63 74 20 54  ociated struct T
233d0 72 69 67 67 65 72 20 69 6e 73 74 61 6e 63 65 2e  rigger instance.
233e0 20 54 68 65 20 66 69 72 73 74 20 65 6c 65 6d 65   The first eleme
233f0 6e 74 20 6f 66 20 74 68 65 20 6c 69 6e 6b 65 64  nt of the linked
23400 20 6c 69 73 74 20 69 73 0a 20 2a 20 74 68 65 20   list is. * the 
23410 66 69 72 73 74 20 73 74 65 70 20 6f 66 20 74 68  first step of th
23420 65 20 74 72 69 67 67 65 72 2d 70 72 6f 67 72 61  e trigger-progra
23430 6d 2e 0a 20 2a 0a 20 2a 20 54 68 65 20 22 6f 70  m.. *. * The "op
23440 22 20 6d 65 6d 62 65 72 20 69 6e 64 69 63 61 74  " member indicat
23450 65 73 20 77 68 65 74 68 65 72 20 74 68 69 73 20  es whether this 
23460 69 73 20 61 20 22 44 45 4c 45 54 45 22 2c 20 22  is a "DELETE", "
23470 49 4e 53 45 52 54 22 2c 20 22 55 50 44 41 54 45  INSERT", "UPDATE
23480 22 20 6f 72 0a 20 2a 20 22 53 45 4c 45 43 54 22  " or. * "SELECT"
23490 20 73 74 61 74 65 6d 65 6e 74 2e 20 54 68 65 20   statement. The 
234a0 6d 65 61 6e 69 6e 67 73 20 6f 66 20 74 68 65 20  meanings of the 
234b0 6f 74 68 65 72 20 6d 65 6d 62 65 72 73 20 69 73  other members is
234c0 20 64 65 74 65 72 6d 69 6e 65 64 20 62 79 20 74   determined by t
234d0 68 65 0a 20 2a 20 76 61 6c 75 65 20 6f 66 20 22  he. * value of "
234e0 6f 70 22 20 61 73 20 66 6f 6c 6c 6f 77 73 3a 0a  op" as follows:.
234f0 20 2a 0a 20 2a 20 28 6f 70 20 3d 3d 20 54 4b 5f   *. * (op == TK_
23500 49 4e 53 45 52 54 29 0a 20 2a 20 6f 72 63 6f 6e  INSERT). * orcon
23510 66 20 20 20 20 2d 3e 20 73 74 6f 72 65 73 20 74  f    -> stores t
23520 68 65 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 61  he ON CONFLICT a
23530 6c 67 6f 72 69 74 68 6d 0a 20 2a 20 70 53 65 6c  lgorithm. * pSel
23540 65 63 74 20 20 20 2d 3e 20 49 66 20 74 68 69 73  ect   -> If this
23550 20 69 73 20 61 6e 20 49 4e 53 45 52 54 20 49 4e   is an INSERT IN
23560 54 4f 20 2e 2e 2e 20 53 45 4c 45 43 54 20 2e 2e  TO ... SELECT ..
23570 2e 20 73 74 61 74 65 6d 65 6e 74 2c 20 74 68 65  . statement, the
23580 6e 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20 20  n. *            
23590 20 20 74 68 69 73 20 73 74 6f 72 65 73 20 61 20    this stores a 
235a0 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20 53  pointer to the S
235b0 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e  ELECT statement.
235c0 20 4f 74 68 65 72 77 69 73 65 20 4e 55 4c 4c 2e   Otherwise NULL.
235d0 0a 20 2a 20 7a 54 61 72 67 65 74 20 20 20 2d 3e  . * zTarget   ->
235e0 20 44 65 71 75 6f 74 65 64 20 6e 61 6d 65 20 6f   Dequoted name o
235f0 66 20 74 68 65 20 74 61 62 6c 65 20 74 6f 20 69  f the table to i
23600 6e 73 65 72 74 20 69 6e 74 6f 2e 0a 20 2a 20 70  nsert into.. * p
23610 45 78 70 72 4c 69 73 74 20 2d 3e 20 49 66 20 74  ExprList -> If t
23620 68 69 73 20 69 73 20 61 6e 20 49 4e 53 45 52 54  his is an INSERT
23630 20 49 4e 54 4f 20 2e 2e 2e 20 56 41 4c 55 45 53   INTO ... VALUES
23640 20 2e 2e 2e 20 73 74 61 74 65 6d 65 6e 74 2c 20   ... statement, 
23650 74 68 65 6e 0a 20 2a 20 20 20 20 20 20 20 20 20  then. *         
23660 20 20 20 20 20 74 68 69 73 20 73 74 6f 72 65 73       this stores
23670 20 76 61 6c 75 65 73 20 74 6f 20 62 65 20 69 6e   values to be in
23680 73 65 72 74 65 64 2e 20 4f 74 68 65 72 77 69 73  serted. Otherwis
23690 65 20 4e 55 4c 4c 2e 0a 20 2a 20 70 49 64 4c 69  e NULL.. * pIdLi
236a0 73 74 20 20 20 2d 3e 20 49 66 20 74 68 69 73 20  st   -> If this 
236b0 69 73 20 61 6e 20 49 4e 53 45 52 54 20 49 4e 54  is an INSERT INT
236c0 4f 20 2e 2e 2e 20 28 3c 63 6f 6c 75 6d 6e 2d 6e  O ... (<column-n
236d0 61 6d 65 73 3e 29 20 56 41 4c 55 45 53 20 2e 2e  ames>) VALUES ..
236e0 2e 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20 20  .. *            
236f0 20 20 73 74 61 74 65 6d 65 6e 74 2c 20 74 68 65    statement, the
23700 6e 20 74 68 69 73 20 73 74 6f 72 65 73 20 74 68  n this stores th
23710 65 20 63 6f 6c 75 6d 6e 2d 6e 61 6d 65 73 20 74  e column-names t
23720 6f 20 62 65 0a 20 2a 20 20 20 20 20 20 20 20 20  o be. *         
23730 20 20 20 20 20 69 6e 73 65 72 74 65 64 20 69 6e       inserted in
23740 74 6f 2e 0a 20 2a 0a 20 2a 20 28 6f 70 20 3d 3d  to.. *. * (op ==
23750 20 54 4b 5f 44 45 4c 45 54 45 29 0a 20 2a 20 7a   TK_DELETE). * z
23760 54 61 72 67 65 74 20 20 20 2d 3e 20 44 65 71 75  Target   -> Dequ
23770 6f 74 65 64 20 6e 61 6d 65 20 6f 66 20 74 68 65  oted name of the
23780 20 74 61 62 6c 65 20 74 6f 20 64 65 6c 65 74 65   table to delete
23790 20 66 72 6f 6d 2e 0a 20 2a 20 70 57 68 65 72 65   from.. * pWhere
237a0 20 20 20 20 2d 3e 20 54 68 65 20 57 48 45 52 45      -> The WHERE
237b0 20 63 6c 61 75 73 65 20 6f 66 20 74 68 65 20 44   clause of the D
237c0 45 4c 45 54 45 20 73 74 61 74 65 6d 65 6e 74 20  ELETE statement 
237d0 69 66 20 6f 6e 65 20 69 73 20 73 70 65 63 69 66  if one is specif
237e0 69 65 64 2e 0a 20 2a 20 20 20 20 20 20 20 20 20  ied.. *         
237f0 20 20 20 20 20 4f 74 68 65 72 77 69 73 65 20 4e       Otherwise N
23800 55 4c 4c 2e 0a 20 2a 0a 20 2a 20 28 6f 70 20 3d  ULL.. *. * (op =
23810 3d 20 54 4b 5f 55 50 44 41 54 45 29 0a 20 2a 20  = TK_UPDATE). * 
23820 7a 54 61 72 67 65 74 20 20 20 2d 3e 20 44 65 71  zTarget   -> Deq
23830 75 6f 74 65 64 20 6e 61 6d 65 20 6f 66 20 74 68  uoted name of th
23840 65 20 74 61 62 6c 65 20 74 6f 20 75 70 64 61 74  e table to updat
23850 65 2e 0a 20 2a 20 70 57 68 65 72 65 20 20 20 20  e.. * pWhere    
23860 2d 3e 20 54 68 65 20 57 48 45 52 45 20 63 6c 61  -> The WHERE cla
23870 75 73 65 20 6f 66 20 74 68 65 20 55 50 44 41 54  use of the UPDAT
23880 45 20 73 74 61 74 65 6d 65 6e 74 20 69 66 20 6f  E statement if o
23890 6e 65 20 69 73 20 73 70 65 63 69 66 69 65 64 2e  ne is specified.
238a0 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  . *             
238b0 20 4f 74 68 65 72 77 69 73 65 20 4e 55 4c 4c 2e   Otherwise NULL.
238c0 0a 20 2a 20 70 45 78 70 72 4c 69 73 74 20 2d 3e  . * pExprList ->
238d0 20 41 20 6c 69 73 74 20 6f 66 20 74 68 65 20 63   A list of the c
238e0 6f 6c 75 6d 6e 73 20 74 6f 20 75 70 64 61 74 65  olumns to update
238f0 20 61 6e 64 20 74 68 65 20 65 78 70 72 65 73 73   and the express
23900 69 6f 6e 73 20 74 6f 20 75 70 64 61 74 65 0a 20  ions to update. 
23910 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74  *              t
23920 68 65 6d 20 74 6f 2e 20 53 65 65 20 73 71 6c 69  hem to. See sqli
23930 74 65 33 55 70 64 61 74 65 28 29 20 64 6f 63 75  te3Update() docu
23940 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 20 22 70 43  mentation of "pC
23950 68 61 6e 67 65 73 22 0a 20 2a 20 20 20 20 20 20  hanges". *      
23960 20 20 20 20 20 20 20 20 61 72 67 75 6d 65 6e 74          argument
23970 2e 0a 20 2a 0a 20 2a 2f 0a 73 74 72 75 63 74 20  .. *. */.struct 
23980 54 72 69 67 67 65 72 53 74 65 70 20 7b 0a 20 20  TriggerStep {.  
23990 75 38 20 6f 70 3b 20 20 20 20 20 20 20 20 20 20  u8 op;          
239a0 20 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 20 54       /* One of T
239b0 4b 5f 44 45 4c 45 54 45 2c 20 54 4b 5f 55 50 44  K_DELETE, TK_UPD
239c0 41 54 45 2c 20 54 4b 5f 49 4e 53 45 52 54 2c 20  ATE, TK_INSERT, 
239d0 54 4b 5f 53 45 4c 45 43 54 20 2a 2f 0a 20 20 75  TK_SELECT */.  u
239e0 38 20 6f 72 63 6f 6e 66 3b 20 20 20 20 20 20 20  8 orconf;       
239f0 20 20 20 20 2f 2a 20 4f 45 5f 52 6f 6c 6c 62 61      /* OE_Rollba
23a00 63 6b 20 65 74 63 2e 20 2a 2f 0a 20 20 54 72 69  ck etc. */.  Tri
23a10 67 67 65 72 20 2a 70 54 72 69 67 3b 20 20 20 20  gger *pTrig;    
23a20 20 20 2f 2a 20 54 68 65 20 74 72 69 67 67 65 72    /* The trigger
23a30 20 74 68 61 74 20 74 68 69 73 20 73 74 65 70 20   that this step 
23a40 69 73 20 61 20 70 61 72 74 20 6f 66 20 2a 2f 0a  is a part of */.
23a50 20 20 53 65 6c 65 63 74 20 2a 70 53 65 6c 65 63    Select *pSelec
23a60 74 3b 20 20 20 20 20 2f 2a 20 53 45 4c 45 43 54  t;     /* SELECT
23a70 20 73 74 61 74 65 6d 65 6e 74 20 6f 72 20 52 48   statement or RH
23a80 53 20 6f 66 20 49 4e 53 45 52 54 20 49 4e 54 4f  S of INSERT INTO
23a90 20 53 45 4c 45 43 54 20 2e 2e 2e 20 2a 2f 0a 20   SELECT ... */. 
23aa0 20 63 68 61 72 20 2a 7a 54 61 72 67 65 74 3b 20   char *zTarget; 
23ab0 20 20 20 20 20 20 2f 2a 20 54 61 72 67 65 74 20        /* Target 
23ac0 74 61 62 6c 65 20 66 6f 72 20 44 45 4c 45 54 45  table for DELETE
23ad0 2c 20 55 50 44 41 54 45 2c 20 49 4e 53 45 52 54  , UPDATE, INSERT
23ae0 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 57 68 65   */.  Expr *pWhe
23af0 72 65 3b 20 20 20 20 20 20 20 20 2f 2a 20 54 68  re;        /* Th
23b00 65 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 66  e WHERE clause f
23b10 6f 72 20 44 45 4c 45 54 45 20 6f 72 20 55 50 44  or DELETE or UPD
23b20 41 54 45 20 73 74 65 70 73 20 2a 2f 0a 20 20 45  ATE steps */.  E
23b30 78 70 72 4c 69 73 74 20 2a 70 45 78 70 72 4c 69  xprList *pExprLi
23b40 73 74 3b 20 2f 2a 20 53 45 54 20 63 6c 61 75 73  st; /* SET claus
23b50 65 20 66 6f 72 20 55 50 44 41 54 45 20 2a 2f 0a  e for UPDATE */.
23b60 20 20 49 64 4c 69 73 74 20 2a 70 49 64 4c 69 73    IdList *pIdLis
23b70 74 3b 20 20 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e  t;     /* Column
23b80 20 6e 61 6d 65 73 20 66 6f 72 20 49 4e 53 45 52   names for INSER
23b90 54 20 2a 2f 0a 20 20 55 70 73 65 72 74 20 2a 70  T */.  Upsert *p
23ba0 55 70 73 65 72 74 3b 20 20 20 20 20 2f 2a 20 55  Upsert;     /* U
23bb0 70 73 65 72 74 20 63 6c 61 75 73 65 73 20 6f 6e  psert clauses on
23bc0 20 61 6e 20 49 4e 53 45 52 54 20 2a 2f 0a 20 20   an INSERT */.  
23bd0 63 68 61 72 20 2a 7a 53 70 61 6e 3b 20 20 20 20  char *zSpan;    
23be0 20 20 20 20 20 2f 2a 20 4f 72 69 67 69 6e 61 6c       /* Original
23bf0 20 53 51 4c 20 74 65 78 74 20 6f 66 20 74 68 69   SQL text of thi
23c00 73 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a 20 20 54  s command */.  T
23c10 72 69 67 67 65 72 53 74 65 70 20 2a 70 4e 65 78  riggerStep *pNex
23c20 74 3b 20 20 2f 2a 20 4e 65 78 74 20 69 6e 20 74  t;  /* Next in t
23c30 68 65 20 6c 69 6e 6b 2d 6c 69 73 74 20 2a 2f 0a  he link-list */.
23c40 20 20 54 72 69 67 67 65 72 53 74 65 70 20 2a 70    TriggerStep *p
23c50 4c 61 73 74 3b 20 20 2f 2a 20 4c 61 73 74 20 65  Last;  /* Last e
23c60 6c 65 6d 65 6e 74 20 69 6e 20 6c 69 6e 6b 2d 6c  lement in link-l
23c70 69 73 74 2e 20 56 61 6c 69 64 20 66 6f 72 20 31  ist. Valid for 1
23c80 73 74 20 65 6c 65 6d 20 6f 6e 6c 79 20 2a 2f 0a  st elem only */.
23c90 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f  };../*.** The fo
23ca0 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72  llowing structur
23cb0 65 20 63 6f 6e 74 61 69 6e 73 20 69 6e 66 6f 72  e contains infor
23cc0 6d 61 74 69 6f 6e 20 75 73 65 64 20 62 79 20 74  mation used by t
23cd0 68 65 20 73 71 6c 69 74 65 46 69 78 2e 2e 2e 0a  he sqliteFix....
23ce0 2a 2a 20 72 6f 75 74 69 6e 65 73 20 61 73 20 74  ** routines as t
23cf0 68 65 79 20 77 61 6c 6b 20 74 68 65 20 70 61 72  hey walk the par
23d00 73 65 20 74 72 65 65 20 74 6f 20 6d 61 6b 65 20  se tree to make 
23d10 64 61 74 61 62 61 73 65 20 72 65 66 65 72 65 6e  database referen
23d20 63 65 73 0a 2a 2a 20 65 78 70 6c 69 63 69 74 2e  ces.** explicit.
23d30 0a 2a 2f 0a 74 79 70 65 64 65 66 20 73 74 72 75  .*/.typedef stru
23d40 63 74 20 44 62 46 69 78 65 72 20 44 62 46 69 78  ct DbFixer DbFix
23d50 65 72 3b 0a 73 74 72 75 63 74 20 44 62 46 69 78  er;.struct DbFix
23d60 65 72 20 7b 0a 20 20 50 61 72 73 65 20 2a 70 50  er {.  Parse *pP
23d70 61 72 73 65 3b 20 20 20 20 20 20 2f 2a 20 54 68  arse;      /* Th
23d80 65 20 70 61 72 73 69 6e 67 20 63 6f 6e 74 65 78  e parsing contex
23d90 74 2e 20 20 45 72 72 6f 72 20 6d 65 73 73 61 67  t.  Error messag
23da0 65 73 20 77 72 69 74 74 65 6e 20 68 65 72 65 20  es written here 
23db0 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70 53 63  */.  Schema *pSc
23dc0 68 65 6d 61 3b 20 20 20 20 2f 2a 20 46 69 78 20  hema;    /* Fix 
23dd0 69 74 65 6d 73 20 74 6f 20 74 68 69 73 20 73 63  items to this sc
23de0 68 65 6d 61 20 2a 2f 0a 20 20 69 6e 74 20 62 56  hema */.  int bV
23df0 61 72 4f 6e 6c 79 3b 20 20 20 20 20 20 20 2f 2a  arOnly;       /*
23e00 20 43 68 65 63 6b 20 66 6f 72 20 76 61 72 69 61   Check for varia
23e10 62 6c 65 20 72 65 66 65 72 65 6e 63 65 73 20 6f  ble references o
23e20 6e 6c 79 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63  nly */.  const c
23e30 68 61 72 20 2a 7a 44 62 3b 20 20 20 20 2f 2a 20  har *zDb;    /* 
23e40 4d 61 6b 65 20 73 75 72 65 20 61 6c 6c 20 6f 62  Make sure all ob
23e50 6a 65 63 74 73 20 61 72 65 20 63 6f 6e 74 61 69  jects are contai
23e60 6e 65 64 20 69 6e 20 74 68 69 73 20 64 61 74 61  ned in this data
23e70 62 61 73 65 20 2a 2f 0a 20 20 63 6f 6e 73 74 20  base */.  const 
23e80 63 68 61 72 20 2a 7a 54 79 70 65 3b 20 20 2f 2a  char *zType;  /*
23e90 20 54 79 70 65 20 6f 66 20 74 68 65 20 63 6f 6e   Type of the con
23ea0 74 61 69 6e 65 72 20 2d 20 75 73 65 64 20 66 6f  tainer - used fo
23eb0 72 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 73  r error messages
23ec0 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 54 6f 6b 65   */.  const Toke
23ed0 6e 20 2a 70 4e 61 6d 65 3b 20 2f 2a 20 4e 61 6d  n *pName; /* Nam
23ee0 65 20 6f 66 20 74 68 65 20 63 6f 6e 74 61 69 6e  e of the contain
23ef0 65 72 20 2d 20 75 73 65 64 20 66 6f 72 20 65 72  er - used for er
23f00 72 6f 72 20 6d 65 73 73 61 67 65 73 20 2a 2f 0a  ror messages */.
23f10 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 6f 62 6a  };../*.** An obj
23f20 65 63 74 65 64 20 75 73 65 64 20 74 6f 20 61 63  ected used to ac
23f30 63 75 6d 75 6c 61 74 65 20 74 68 65 20 74 65 78  cumulate the tex
23f40 74 20 6f 66 20 61 20 73 74 72 69 6e 67 20 77 68  t of a string wh
23f50 65 72 65 20 77 65 0a 2a 2a 20 64 6f 20 6e 6f 74  ere we.** do not
23f60 20 6e 65 63 65 73 73 61 72 69 6c 79 20 6b 6e 6f   necessarily kno
23f70 77 20 68 6f 77 20 62 69 67 20 74 68 65 20 73 74  w how big the st
23f80 72 69 6e 67 20 77 69 6c 6c 20 62 65 20 69 6e 20  ring will be in 
23f90 74 68 65 20 65 6e 64 2e 0a 2a 2f 0a 73 74 72 75  the end..*/.stru
23fa0 63 74 20 73 71 6c 69 74 65 33 5f 73 74 72 20 7b  ct sqlite3_str {
23fb0 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 20  .  sqlite3 *db; 
23fc0 20 20 20 20 20 20 20 20 2f 2a 20 4f 70 74 69 6f          /* Optio
23fd0 6e 61 6c 20 64 61 74 61 62 61 73 65 20 66 6f 72  nal database for
23fe0 20 6c 6f 6f 6b 61 73 69 64 65 2e 20 20 43 61 6e   lookaside.  Can
23ff0 20 62 65 20 4e 55 4c 4c 20 2a 2f 0a 20 20 63 68   be NULL */.  ch
24000 61 72 20 2a 7a 54 65 78 74 3b 20 20 20 20 20 20  ar *zText;      
24010 20 20 20 2f 2a 20 54 68 65 20 73 74 72 69 6e 67     /* The string
24020 20 63 6f 6c 6c 65 63 74 65 64 20 73 6f 20 66 61   collected so fa
24030 72 20 2a 2f 0a 20 20 75 33 32 20 20 6e 41 6c 6c  r */.  u32  nAll
24040 6f 63 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 41  oc;         /* A
24050 6d 6f 75 6e 74 20 6f 66 20 73 70 61 63 65 20 61  mount of space a
24060 6c 6c 6f 63 61 74 65 64 20 69 6e 20 7a 54 65 78  llocated in zTex
24070 74 20 2a 2f 0a 20 20 75 33 32 20 20 6d 78 41 6c  t */.  u32  mxAl
24080 6c 6f 63 3b 20 20 20 20 20 20 20 20 2f 2a 20 4d  loc;        /* M
24090 61 78 69 6d 75 6d 20 61 6c 6c 6f 77 65 64 20 61  aximum allowed a
240a0 6c 6c 6f 63 61 74 69 6f 6e 2e 20 20 30 20 66 6f  llocation.  0 fo
240b0 72 20 6e 6f 20 6d 61 6c 6c 6f 63 20 75 73 61 67  r no malloc usag
240c0 65 20 2a 2f 0a 20 20 75 33 32 20 20 6e 43 68 61  e */.  u32  nCha
240d0 72 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c  r;          /* L
240e0 65 6e 67 74 68 20 6f 66 20 74 68 65 20 73 74 72  ength of the str
240f0 69 6e 67 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20  ing so far */.  
24100 75 38 20 20 20 61 63 63 45 72 72 6f 72 3b 20 20  u8   accError;  
24110 20 20 20 20 20 2f 2a 20 53 51 4c 49 54 45 5f 4e       /* SQLITE_N
24120 4f 4d 45 4d 20 6f 72 20 53 51 4c 49 54 45 5f 54  OMEM or SQLITE_T
24130 4f 4f 42 49 47 20 2a 2f 0a 20 20 75 38 20 20 20  OOBIG */.  u8   
24140 70 72 69 6e 74 66 46 6c 61 67 73 3b 20 20 20 20  printfFlags;    
24150 2f 2a 20 53 51 4c 49 54 45 5f 50 52 49 4e 54 46  /* SQLITE_PRINTF
24160 20 66 6c 61 67 73 20 62 65 6c 6f 77 20 2a 2f 0a   flags below */.
24170 7d 3b 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  };.#define SQLIT
24180 45 5f 50 52 49 4e 54 46 5f 49 4e 54 45 52 4e 41  E_PRINTF_INTERNA
24190 4c 20 30 78 30 31 20 20 2f 2a 20 49 6e 74 65 72  L 0x01  /* Inter
241a0 6e 61 6c 2d 75 73 65 2d 6f 6e 6c 79 20 63 6f 6e  nal-use-only con
241b0 76 65 72 74 65 72 73 20 61 6c 6c 6f 77 65 64 20  verters allowed 
241c0 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
241d0 45 5f 50 52 49 4e 54 46 5f 53 51 4c 46 55 4e 43  E_PRINTF_SQLFUNC
241e0 20 20 30 78 30 32 20 20 2f 2a 20 53 51 4c 20 66    0x02  /* SQL f
241f0 75 6e 63 74 69 6f 6e 20 61 72 67 75 6d 65 6e 74  unction argument
24200 73 20 74 6f 20 56 58 50 72 69 6e 74 66 20 2a 2f  s to VXPrintf */
24210 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
24220 50 52 49 4e 54 46 5f 4d 41 4c 4c 4f 43 45 44 20  PRINTF_MALLOCED 
24230 30 78 30 34 20 20 2f 2a 20 54 72 75 65 20 69 66  0x04  /* True if
24240 20 78 54 65 78 74 20 69 73 20 61 6c 6c 6f 63 61   xText is alloca
24250 74 65 64 20 73 70 61 63 65 20 2a 2f 0a 0a 23 64  ted space */..#d
24260 65 66 69 6e 65 20 69 73 4d 61 6c 6c 6f 63 65 64  efine isMalloced
24270 28 58 29 20 20 28 28 28 58 29 2d 3e 70 72 69 6e  (X)  (((X)->prin
24280 74 66 46 6c 61 67 73 20 26 20 53 51 4c 49 54 45  tfFlags & SQLITE
24290 5f 50 52 49 4e 54 46 5f 4d 41 4c 4c 4f 43 45 44  _PRINTF_MALLOCED
242a0 29 21 3d 30 29 0a 0a 0a 2f 2a 0a 2a 2a 20 41 20  )!=0).../*.** A 
242b0 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 69 73 20  pointer to this 
242c0 73 74 72 75 63 74 75 72 65 20 69 73 20 75 73 65  structure is use
242d0 64 20 74 6f 20 63 6f 6d 6d 75 6e 69 63 61 74 65  d to communicate
242e0 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a 2a 2a 20   information.** 
242f0 66 72 6f 6d 20 73 71 6c 69 74 65 33 49 6e 69 74  from sqlite3Init
24300 20 61 6e 64 20 4f 50 5f 50 61 72 73 65 53 63 68   and OP_ParseSch
24310 65 6d 61 20 69 6e 74 6f 20 74 68 65 20 73 71 6c  ema into the sql
24320 69 74 65 33 49 6e 69 74 43 61 6c 6c 62 61 63 6b  ite3InitCallback
24330 2e 0a 2a 2f 0a 74 79 70 65 64 65 66 20 73 74 72  ..*/.typedef str
24340 75 63 74 20 7b 0a 20 20 73 71 6c 69 74 65 33 20  uct {.  sqlite3 
24350 2a 64 62 3b 20 20 20 20 20 20 20 20 2f 2a 20 54  *db;        /* T
24360 68 65 20 64 61 74 61 62 61 73 65 20 62 65 69 6e  he database bein
24370 67 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f  g initialized */
24380 0a 20 20 63 68 61 72 20 2a 2a 70 7a 45 72 72 4d  .  char **pzErrM
24390 73 67 3b 20 20 20 20 2f 2a 20 45 72 72 6f 72 20  sg;    /* Error 
243a0 6d 65 73 73 61 67 65 20 73 74 6f 72 65 64 20 68  message stored h
243b0 65 72 65 20 2a 2f 0a 20 20 69 6e 74 20 69 44 62  ere */.  int iDb
243c0 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
243d0 30 20 66 6f 72 20 6d 61 69 6e 20 64 61 74 61 62  0 for main datab
243e0 61 73 65 2e 20 20 31 20 66 6f 72 20 54 45 4d 50  ase.  1 for TEMP
243f0 2c 20 32 2e 2e 20 66 6f 72 20 41 54 54 41 43 48  , 2.. for ATTACH
24400 65 64 20 2a 2f 0a 20 20 69 6e 74 20 72 63 3b 20  ed */.  int rc; 
24410 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52              /* R
24420 65 73 75 6c 74 20 63 6f 64 65 20 73 74 6f 72 65  esult code store
24430 64 20 68 65 72 65 20 2a 2f 0a 20 20 75 33 32 20  d here */.  u32 
24440 6d 49 6e 69 74 46 6c 61 67 73 3b 20 20 20 20 20  mInitFlags;     
24450 2f 2a 20 46 6c 61 67 73 20 63 6f 6e 74 72 6f 6c  /* Flags control
24460 6c 69 6e 67 20 65 72 72 6f 72 20 6d 65 73 73 61  ling error messa
24470 67 65 73 20 2a 2f 0a 7d 20 49 6e 69 74 44 61 74  ges */.} InitDat
24480 61 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65  a;../*.** Allowe
24490 64 20 76 61 6c 75 65 73 20 66 6f 72 20 6d 49 6e  d values for mIn
244a0 69 74 46 6c 61 67 73 0a 2a 2f 0a 23 64 65 66 69  itFlags.*/.#defi
244b0 6e 65 20 49 4e 49 54 46 4c 41 47 5f 41 6c 74 65  ne INITFLAG_Alte
244c0 72 54 61 62 6c 65 20 20 20 30 78 30 30 30 31 20  rTable   0x0001 
244d0 20 2f 2a 20 54 68 69 73 20 69 73 20 61 20 72 65   /* This is a re
244e0 70 61 72 73 65 20 61 66 74 65 72 20 41 4c 54 45  parse after ALTE
244f0 52 20 54 41 42 4c 45 20 2a 2f 0a 0a 2f 2a 0a 2a  R TABLE */../*.*
24500 2a 20 53 74 72 75 63 74 75 72 65 20 63 6f 6e 74  * Structure cont
24510 61 69 6e 69 6e 67 20 67 6c 6f 62 61 6c 20 63 6f  aining global co
24520 6e 66 69 67 75 72 61 74 69 6f 6e 20 64 61 74 61  nfiguration data
24530 20 66 6f 72 20 74 68 65 20 53 51 4c 69 74 65 20   for the SQLite 
24540 6c 69 62 72 61 72 79 2e 0a 2a 2a 0a 2a 2a 20 54  library..**.** T
24550 68 69 73 20 73 74 72 75 63 74 75 72 65 20 61 6c  his structure al
24560 73 6f 20 63 6f 6e 74 61 69 6e 73 20 73 6f 6d 65  so contains some
24570 20 73 74 61 74 65 20 69 6e 66 6f 72 6d 61 74 69   state informati
24580 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53 71  on..*/.struct Sq
24590 6c 69 74 65 33 43 6f 6e 66 69 67 20 7b 0a 20 20  lite3Config {.  
245a0 69 6e 74 20 62 4d 65 6d 73 74 61 74 3b 20 20 20  int bMemstat;   
245b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
245c0 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 65 6e 61    /* True to ena
245d0 62 6c 65 20 6d 65 6d 6f 72 79 20 73 74 61 74 75  ble memory statu
245e0 73 20 2a 2f 0a 20 20 69 6e 74 20 62 43 6f 72 65  s */.  int bCore
245f0 4d 75 74 65 78 3b 20 20 20 20 20 20 20 20 20 20  Mutex;          
24600 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65           /* True
24610 20 74 6f 20 65 6e 61 62 6c 65 20 63 6f 72 65 20   to enable core 
24620 6d 75 74 65 78 69 6e 67 20 2a 2f 0a 20 20 69 6e  mutexing */.  in
24630 74 20 62 46 75 6c 6c 4d 75 74 65 78 3b 20 20 20  t bFullMutex;   
24640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24650 2f 2a 20 54 72 75 65 20 74 6f 20 65 6e 61 62 6c  /* True to enabl
24660 65 20 66 75 6c 6c 20 6d 75 74 65 78 69 6e 67 20  e full mutexing 
24670 2a 2f 0a 20 20 69 6e 74 20 62 4f 70 65 6e 55 72  */.  int bOpenUr
24680 69 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  i;              
24690 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 74         /* True t
246a0 6f 20 69 6e 74 65 72 70 72 65 74 20 66 69 6c 65  o interpret file
246b0 6e 61 6d 65 73 20 61 73 20 55 52 49 73 20 2a 2f  names as URIs */
246c0 0a 20 20 69 6e 74 20 62 55 73 65 43 69 73 3b 20  .  int bUseCis; 
246d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
246e0 20 20 20 20 20 2f 2a 20 55 73 65 20 63 6f 76 65       /* Use cove
246f0 72 69 6e 67 20 69 6e 64 69 63 65 73 20 66 6f 72  ring indices for
24700 20 66 75 6c 6c 2d 73 63 61 6e 73 20 2a 2f 0a 20   full-scans */. 
24710 20 69 6e 74 20 62 53 6d 61 6c 6c 4d 61 6c 6c 6f   int bSmallMallo
24720 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  c;              
24730 20 20 20 2f 2a 20 41 76 6f 69 64 20 6c 61 72 67     /* Avoid larg
24740 65 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74  e memory allocat
24750 69 6f 6e 73 20 69 66 20 74 72 75 65 20 2a 2f 0a  ions if true */.
24760 20 20 69 6e 74 20 6d 78 53 74 72 6c 65 6e 3b 20    int mxStrlen; 
24770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24780 20 20 20 20 2f 2a 20 4d 61 78 69 6d 75 6d 20 73      /* Maximum s
24790 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 2a 2f 0a  tring length */.
247a0 20 20 69 6e 74 20 6e 65 76 65 72 43 6f 72 72 75    int neverCorru
247b0 70 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  pt;             
247c0 20 20 20 20 2f 2a 20 44 61 74 61 62 61 73 65 20      /* Database 
247d0 69 73 20 61 6c 77 61 79 73 20 77 65 6c 6c 2d 66  is always well-f
247e0 6f 72 6d 65 64 20 2a 2f 0a 20 20 69 6e 74 20 73  ormed */.  int s
247f0 7a 4c 6f 6f 6b 61 73 69 64 65 3b 20 20 20 20 20  zLookaside;     
24800 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
24810 44 65 66 61 75 6c 74 20 6c 6f 6f 6b 61 73 69 64  Default lookasid
24820 65 20 62 75 66 66 65 72 20 73 69 7a 65 20 2a 2f  e buffer size */
24830 0a 20 20 69 6e 74 20 6e 4c 6f 6f 6b 61 73 69 64  .  int nLookasid
24840 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e;              
24850 20 20 20 20 20 2f 2a 20 44 65 66 61 75 6c 74 20       /* Default 
24860 6c 6f 6f 6b 61 73 69 64 65 20 62 75 66 66 65 72  lookaside buffer
24870 20 63 6f 75 6e 74 20 2a 2f 0a 20 20 69 6e 74 20   count */.  int 
24880 6e 53 74 6d 74 53 70 69 6c 6c 3b 20 20 20 20 20  nStmtSpill;     
24890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
248a0 20 53 74 6d 74 2d 6a 6f 75 72 6e 61 6c 20 73 70   Stmt-journal sp
248b0 69 6c 6c 2d 74 6f 2d 64 69 73 6b 20 74 68 72 65  ill-to-disk thre
248c0 73 68 6f 6c 64 20 2a 2f 0a 20 20 73 71 6c 69 74  shold */.  sqlit
248d0 65 33 5f 6d 65 6d 5f 6d 65 74 68 6f 64 73 20 6d  e3_mem_methods m
248e0 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
248f0 4c 6f 77 2d 6c 65 76 65 6c 20 6d 65 6d 6f 72 79  Low-level memory
24900 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 69 6e 74 65   allocation inte
24910 72 66 61 63 65 20 2a 2f 0a 20 20 73 71 6c 69 74  rface */.  sqlit
24920 65 33 5f 6d 75 74 65 78 5f 6d 65 74 68 6f 64 73  e3_mutex_methods
24930 20 6d 75 74 65 78 3b 20 20 20 20 20 20 2f 2a 20   mutex;      /* 
24940 4c 6f 77 2d 6c 65 76 65 6c 20 6d 75 74 65 78 20  Low-level mutex 
24950 69 6e 74 65 72 66 61 63 65 20 2a 2f 0a 20 20 73  interface */.  s
24960 71 6c 69 74 65 33 5f 70 63 61 63 68 65 5f 6d 65  qlite3_pcache_me
24970 74 68 6f 64 73 32 20 70 63 61 63 68 65 32 3b 20  thods2 pcache2; 
24980 20 2f 2a 20 4c 6f 77 2d 6c 65 76 65 6c 20 70 61   /* Low-level pa
24990 67 65 2d 63 61 63 68 65 20 69 6e 74 65 72 66 61  ge-cache interfa
249a0 63 65 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 48  ce */.  void *pH
249b0 65 61 70 3b 20 20 20 20 20 20 20 20 20 20 20 20  eap;            
249c0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 48 65 61            /* Hea
249d0 70 20 73 74 6f 72 61 67 65 20 73 70 61 63 65 20  p storage space 
249e0 2a 2f 0a 20 20 69 6e 74 20 6e 48 65 61 70 3b 20  */.  int nHeap; 
249f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24a00 20 20 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f         /* Size o
24a10 66 20 70 48 65 61 70 5b 5d 20 2a 2f 0a 20 20 69  f pHeap[] */.  i
24a20 6e 74 20 6d 6e 52 65 71 2c 20 6d 78 52 65 71 3b  nt mnReq, mxReq;
24a30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24a40 20 2f 2a 20 4d 69 6e 20 61 6e 64 20 6d 61 78 20   /* Min and max 
24a50 68 65 61 70 20 72 65 71 75 65 73 74 73 20 73 69  heap requests si
24a60 7a 65 73 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33  zes */.  sqlite3
24a70 5f 69 6e 74 36 34 20 73 7a 4d 6d 61 70 3b 20 20  _int64 szMmap;  
24a80 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6d 6d             /* mm
24a90 61 70 28 29 20 73 70 61 63 65 20 70 65 72 20 6f  ap() space per o
24aa0 70 65 6e 20 66 69 6c 65 20 2a 2f 0a 20 20 73 71  pen file */.  sq
24ab0 6c 69 74 65 33 5f 69 6e 74 36 34 20 6d 78 4d 6d  lite3_int64 mxMm
24ac0 61 70 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ap;             
24ad0 2f 2a 20 4d 61 78 69 6d 75 6d 20 76 61 6c 75 65  /* Maximum value
24ae0 20 66 6f 72 20 73 7a 4d 6d 61 70 20 2a 2f 0a 20   for szMmap */. 
24af0 20 76 6f 69 64 20 2a 70 50 61 67 65 3b 20 20 20   void *pPage;   
24b00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24b10 20 20 20 2f 2a 20 50 61 67 65 20 63 61 63 68 65     /* Page cache
24b20 20 6d 65 6d 6f 72 79 20 2a 2f 0a 20 20 69 6e 74   memory */.  int
24b30 20 73 7a 50 61 67 65 3b 20 20 20 20 20 20 20 20   szPage;        
24b40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
24b50 2a 20 53 69 7a 65 20 6f 66 20 65 61 63 68 20 70  * Size of each p
24b60 61 67 65 20 69 6e 20 70 50 61 67 65 5b 5d 20 2a  age in pPage[] *
24b70 2f 0a 20 20 69 6e 74 20 6e 50 61 67 65 3b 20 20  /.  int nPage;  
24b80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24b90 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
24ba0 6f 66 20 70 61 67 65 73 20 69 6e 20 70 50 61 67  of pages in pPag
24bb0 65 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 6d 78 50  e[] */.  int mxP
24bc0 61 72 73 65 72 53 74 61 63 6b 3b 20 20 20 20 20  arserStack;     
24bd0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6d 61             /* ma
24be0 78 69 6d 75 6d 20 64 65 70 74 68 20 6f 66 20 74  ximum depth of t
24bf0 68 65 20 70 61 72 73 65 72 20 73 74 61 63 6b 20  he parser stack 
24c00 2a 2f 0a 20 20 69 6e 74 20 73 68 61 72 65 64 43  */.  int sharedC
24c10 61 63 68 65 45 6e 61 62 6c 65 64 3b 20 20 20 20  acheEnabled;    
24c20 20 20 20 20 20 20 20 2f 2a 20 74 72 75 65 20 69         /* true i
24c30 66 20 73 68 61 72 65 64 2d 63 61 63 68 65 20 6d  f shared-cache m
24c40 6f 64 65 20 65 6e 61 62 6c 65 64 20 2a 2f 0a 20  ode enabled */. 
24c50 20 75 33 32 20 73 7a 50 6d 61 3b 20 20 20 20 20   u32 szPma;     
24c60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24c70 20 20 20 2f 2a 20 4d 61 78 69 6d 75 6d 20 53 6f     /* Maximum So
24c80 72 74 65 72 20 50 4d 41 20 73 69 7a 65 20 2a 2f  rter PMA size */
24c90 0a 20 20 2f 2a 20 54 68 65 20 61 62 6f 76 65 20  .  /* The above 
24ca0 6d 69 67 68 74 20 62 65 20 69 6e 69 74 69 61 6c  might be initial
24cb0 69 7a 65 64 20 74 6f 20 6e 6f 6e 2d 7a 65 72 6f  ized to non-zero
24cc0 2e 20 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  .  The following
24cd0 20 6e 65 65 64 20 74 6f 20 61 6c 77 61 79 73 0a   need to always.
24ce0 20 20 2a 2a 20 69 6e 69 74 69 61 6c 6c 79 20 62    ** initially b
24cf0 65 20 7a 65 72 6f 2c 20 68 6f 77 65 76 65 72 2e  e zero, however.
24d00 20 2a 2f 0a 20 20 69 6e 74 20 69 73 49 6e 69 74   */.  int isInit
24d10 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
24d20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20          /* True 
24d30 61 66 74 65 72 20 69 6e 69 74 69 61 6c 69 7a 61  after initializa
24d40 74 69 6f 6e 20 68 61 73 20 66 69 6e 69 73 68 65  tion has finishe
24d50 64 20 2a 2f 0a 20 20 69 6e 74 20 69 6e 50 72 6f  d */.  int inPro
24d60 67 72 65 73 73 3b 20 20 20 20 20 20 20 20 20 20  gress;          
24d70 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65           /* True
24d80 20 77 68 69 6c 65 20 69 6e 69 74 69 61 6c 69 7a   while initializ
24d90 61 74 69 6f 6e 20 69 6e 20 70 72 6f 67 72 65 73  ation in progres
24da0 73 20 2a 2f 0a 20 20 69 6e 74 20 69 73 4d 75 74  s */.  int isMut
24db0 65 78 49 6e 69 74 3b 20 20 20 20 20 20 20 20 20  exInit;         
24dc0 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65           /* True
24dd0 20 61 66 74 65 72 20 6d 75 74 65 78 65 73 20 61   after mutexes a
24de0 72 65 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a  re initialized *
24df0 2f 0a 20 20 69 6e 74 20 69 73 4d 61 6c 6c 6f 63  /.  int isMalloc
24e00 49 6e 69 74 3b 20 20 20 20 20 20 20 20 20 20 20  Init;           
24e10 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 61 66        /* True af
24e20 74 65 72 20 6d 61 6c 6c 6f 63 20 69 73 20 69 6e  ter malloc is in
24e30 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 69  itialized */.  i
24e40 6e 74 20 69 73 50 43 61 63 68 65 49 6e 69 74 3b  nt isPCacheInit;
24e50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24e60 20 2f 2a 20 54 72 75 65 20 61 66 74 65 72 20 6d   /* True after m
24e70 61 6c 6c 6f 63 20 69 73 20 69 6e 69 74 69 61 6c  alloc is initial
24e80 69 7a 65 64 20 2a 2f 0a 20 20 69 6e 74 20 6e 52  ized */.  int nR
24e90 65 66 49 6e 69 74 4d 75 74 65 78 3b 20 20 20 20  efInitMutex;    
24ea0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
24eb0 75 6d 62 65 72 20 6f 66 20 75 73 65 72 73 20 6f  umber of users o
24ec0 66 20 70 49 6e 69 74 4d 75 74 65 78 20 2a 2f 0a  f pInitMutex */.
24ed0 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 20    sqlite3_mutex 
24ee0 2a 70 49 6e 69 74 4d 75 74 65 78 3b 20 20 20 20  *pInitMutex;    
24ef0 20 20 20 20 2f 2a 20 4d 75 74 65 78 20 75 73 65      /* Mutex use
24f00 64 20 62 79 20 73 71 6c 69 74 65 33 5f 69 6e 69  d by sqlite3_ini
24f10 74 69 61 6c 69 7a 65 28 29 20 2a 2f 0a 20 20 76  tialize() */.  v
24f20 6f 69 64 20 28 2a 78 4c 6f 67 29 28 76 6f 69 64  oid (*xLog)(void
24f30 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72  *,int,const char
24f40 2a 29 3b 20 2f 2a 20 46 75 6e 63 74 69 6f 6e 20  *); /* Function 
24f50 66 6f 72 20 6c 6f 67 67 69 6e 67 20 2a 2f 0a 20  for logging */. 
24f60 20 76 6f 69 64 20 2a 70 4c 6f 67 41 72 67 3b 20   void *pLogArg; 
24f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24f80 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20 61        /* First a
24f90 72 67 75 6d 65 6e 74 20 74 6f 20 78 4c 6f 67 28  rgument to xLog(
24fa0 29 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49  ) */.#ifdef SQLI
24fb0 54 45 5f 45 4e 41 42 4c 45 5f 53 51 4c 4c 4f 47  TE_ENABLE_SQLLOG
24fc0 0a 20 20 76 6f 69 64 28 2a 78 53 71 6c 6c 6f 67  .  void(*xSqllog
24fd0 29 28 76 6f 69 64 2a 2c 73 71 6c 69 74 65 33 2a  )(void*,sqlite3*
24fe0 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 69 6e  ,const char*, in
24ff0 74 29 3b 0a 20 20 76 6f 69 64 20 2a 70 53 71 6c  t);.  void *pSql
25000 6c 6f 67 41 72 67 3b 0a 23 65 6e 64 69 66 0a 23  logArg;.#endif.#
25010 69 66 64 65 66 20 53 51 4c 49 54 45 5f 56 44 42  ifdef SQLITE_VDB
25020 45 5f 43 4f 56 45 52 41 47 45 0a 20 20 2f 2a 20  E_COVERAGE.  /* 
25030 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 63 61  The following ca
25040 6c 6c 62 61 63 6b 20 28 69 66 20 6e 6f 74 20 4e  llback (if not N
25050 55 4c 4c 29 20 69 73 20 69 6e 76 6f 6b 65 64 20  ULL) is invoked 
25060 6f 6e 20 65 76 65 72 79 20 56 44 42 45 20 62 72  on every VDBE br
25070 61 6e 63 68 0a 20 20 2a 2a 20 6f 70 65 72 61 74  anch.  ** operat
25080 69 6f 6e 2e 20 20 53 65 74 20 74 68 65 20 63 61  ion.  Set the ca
25090 6c 6c 62 61 63 6b 20 75 73 69 6e 67 20 53 51 4c  llback using SQL
250a0 49 54 45 5f 54 45 53 54 43 54 52 4c 5f 56 44 42  ITE_TESTCTRL_VDB
250b0 45 5f 43 4f 56 45 52 41 47 45 2e 0a 20 20 2a 2f  E_COVERAGE..  */
250c0 0a 20 20 76 6f 69 64 20 28 2a 78 56 64 62 65 42  .  void (*xVdbeB
250d0 72 61 6e 63 68 29 28 76 6f 69 64 2a 2c 75 6e 73  ranch)(void*,uns
250e0 69 67 6e 65 64 20 69 53 72 63 4c 69 6e 65 2c 75  igned iSrcLine,u
250f0 38 20 65 54 68 69 73 2c 75 38 20 65 4d 78 29 3b  8 eThis,u8 eMx);
25100 20 20 2f 2a 20 43 61 6c 6c 62 61 63 6b 20 2a 2f    /* Callback */
25110 0a 20 20 76 6f 69 64 20 2a 70 56 64 62 65 42 72  .  void *pVdbeBr
25120 61 6e 63 68 41 72 67 3b 20 20 20 20 20 20 20 20  anchArg;        
25130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25140 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
25150 31 73 74 20 61 72 67 75 6d 65 6e 74 20 2a 2f 0a  1st argument */.
25160 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53  #endif.#ifndef S
25170 51 4c 49 54 45 5f 55 4e 54 45 53 54 41 42 4c 45  QLITE_UNTESTABLE
25180 0a 20 20 69 6e 74 20 28 2a 78 54 65 73 74 43 61  .  int (*xTestCa
25190 6c 6c 62 61 63 6b 29 28 69 6e 74 29 3b 20 20 20  llback)(int);   
251a0 20 20 20 20 20 2f 2a 20 49 6e 76 6f 6b 65 64 20       /* Invoked 
251b0 62 79 20 73 71 6c 69 74 65 33 46 61 75 6c 74 53  by sqlite3FaultS
251c0 69 6d 28 29 20 2a 2f 0a 23 65 6e 64 69 66 0a 20  im() */.#endif. 
251d0 20 69 6e 74 20 62 4c 6f 63 61 6c 74 69 6d 65 46   int bLocaltimeF
251e0 61 75 6c 74 3b 20 20 20 20 20 20 20 20 20 20 20  ault;           
251f0 20 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 66 61     /* True to fa
25200 69 6c 20 6c 6f 63 61 6c 74 69 6d 65 28 29 20 63  il localtime() c
25210 61 6c 6c 73 20 2a 2f 0a 20 20 69 6e 74 20 62 49  alls */.  int bI
25220 6e 74 65 72 6e 61 6c 46 75 6e 63 74 69 6f 6e 73  nternalFunctions
25230 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49  ;           /* I
25240 6e 74 65 72 6e 61 6c 20 53 51 4c 20 66 75 6e 63  nternal SQL func
25250 74 69 6f 6e 73 20 61 72 65 20 76 69 73 69 62 6c  tions are visibl
25260 65 20 2a 2f 0a 20 20 69 6e 74 20 69 4f 6e 63 65  e */.  int iOnce
25270 52 65 73 65 74 54 68 72 65 73 68 6f 6c 64 3b 20  ResetThreshold; 
25280 20 20 20 20 20 20 20 20 20 2f 2a 20 57 68 65 6e           /* When
25290 20 74 6f 20 72 65 73 65 74 20 4f 50 5f 4f 6e 63   to reset OP_Onc
252a0 65 20 63 6f 75 6e 74 65 72 73 20 2a 2f 0a 20 20  e counters */.  
252b0 75 33 32 20 73 7a 53 6f 72 74 65 72 52 65 66 3b  u32 szSorterRef;
252c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
252d0 20 20 2f 2a 20 4d 69 6e 20 73 69 7a 65 20 69 6e    /* Min size in
252e0 20 62 79 74 65 73 20 74 6f 20 75 73 65 20 73 6f   bytes to use so
252f0 72 74 65 72 2d 72 65 66 73 20 2a 2f 0a 7d 3b 0a  rter-refs */.};.
25300 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 6d 61 63 72  ./*.** This macr
25310 6f 20 69 73 20 75 73 65 64 20 69 6e 73 69 64 65  o is used inside
25320 20 6f 66 20 61 73 73 65 72 74 28 29 20 73 74 61   of assert() sta
25330 74 65 6d 65 6e 74 73 20 74 6f 20 69 6e 64 69 63  tements to indic
25340 61 74 65 20 74 68 61 74 0a 2a 2a 20 74 68 65 20  ate that.** the 
25350 61 73 73 65 72 74 20 69 73 20 6f 6e 6c 79 20 76  assert is only v
25360 61 6c 69 64 20 6f 6e 20 61 20 77 65 6c 6c 2d 66  alid on a well-f
25370 6f 72 6d 65 64 20 64 61 74 61 62 61 73 65 2e 20  ormed database. 
25380 20 49 6e 73 74 65 61 64 20 6f 66 3a 0a 2a 2a 0a   Instead of:.**.
25390 2a 2a 20 20 20 20 20 61 73 73 65 72 74 28 20 58  **     assert( X
253a0 20 29 3b 0a 2a 2a 0a 2a 2a 20 4f 6e 65 20 77 72   );.**.** One wr
253b0 69 74 65 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20  ites:.**.**     
253c0 61 73 73 65 72 74 28 20 58 20 7c 7c 20 43 4f 52  assert( X || COR
253d0 52 55 50 54 5f 44 42 20 29 3b 0a 2a 2a 0a 2a 2a  RUPT_DB );.**.**
253e0 20 43 4f 52 52 55 50 54 5f 44 42 20 69 73 20 74   CORRUPT_DB is t
253f0 72 75 65 20 64 75 72 69 6e 67 20 6e 6f 72 6d 61  rue during norma
25400 6c 20 6f 70 65 72 61 74 69 6f 6e 2e 20 20 43 4f  l operation.  CO
25410 52 52 55 50 54 5f 44 42 20 64 6f 65 73 20 6e 6f  RRUPT_DB does no
25420 74 20 69 6e 64 69 63 61 74 65 0a 2a 2a 20 74 68  t indicate.** th
25430 61 74 20 74 68 65 20 64 61 74 61 62 61 73 65 20  at the database 
25440 69 73 20 64 65 66 69 6e 69 74 65 6c 79 20 63 6f  is definitely co
25450 72 72 75 70 74 2c 20 6f 6e 6c 79 20 74 68 61 74  rrupt, only that
25460 20 69 74 20 6d 69 67 68 74 20 62 65 20 63 6f 72   it might be cor
25470 72 75 70 74 2e 0a 2a 2a 20 46 6f 72 20 6d 6f 73  rupt..** For mos
25480 74 20 74 65 73 74 20 63 61 73 65 73 2c 20 43 4f  t test cases, CO
25490 52 52 55 50 54 5f 44 42 20 69 73 20 73 65 74 20  RRUPT_DB is set 
254a0 74 6f 20 66 61 6c 73 65 20 75 73 69 6e 67 20 61  to false using a
254b0 20 73 70 65 63 69 61 6c 0a 2a 2a 20 73 71 6c 69   special.** sqli
254c0 74 65 33 5f 74 65 73 74 5f 63 6f 6e 74 72 6f 6c  te3_test_control
254d0 28 29 2e 20 20 54 68 69 73 20 65 6e 61 62 6c 65  ().  This enable
254e0 73 20 61 73 73 65 72 74 28 29 20 73 74 61 74 65  s assert() state
254f0 6d 65 6e 74 73 20 74 6f 20 70 72 6f 76 65 0a 2a  ments to prove.*
25500 2a 20 74 68 69 6e 67 73 20 74 68 61 74 20 61 72  * things that ar
25510 65 20 61 6c 77 61 79 73 20 74 72 75 65 20 66 6f  e always true fo
25520 72 20 77 65 6c 6c 2d 66 6f 72 6d 65 64 20 64 61  r well-formed da
25530 74 61 62 61 73 65 73 2e 0a 2a 2f 0a 23 64 65 66  tabases..*/.#def
25540 69 6e 65 20 43 4f 52 52 55 50 54 5f 44 42 20 20  ine CORRUPT_DB  
25550 28 73 71 6c 69 74 65 33 43 6f 6e 66 69 67 2e 6e  (sqlite3Config.n
25560 65 76 65 72 43 6f 72 72 75 70 74 3d 3d 30 29 0a  everCorrupt==0).
25570 0a 2f 2a 0a 2a 2a 20 43 6f 6e 74 65 78 74 20 70  ./*.** Context p
25580 6f 69 6e 74 65 72 20 70 61 73 73 65 64 20 64 6f  ointer passed do
25590 77 6e 20 74 68 72 6f 75 67 68 20 74 68 65 20 74  wn through the t
255a0 72 65 65 2d 77 61 6c 6b 2e 0a 2a 2f 0a 73 74 72  ree-walk..*/.str
255b0 75 63 74 20 57 61 6c 6b 65 72 20 7b 0a 20 20 50  uct Walker {.  P
255c0 61 72 73 65 20 2a 70 50 61 72 73 65 3b 20 20 20  arse *pParse;   
255d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
255e0 20 20 20 20 20 20 20 20 20 2f 2a 20 50 61 72 73           /* Pars
255f0 65 72 20 63 6f 6e 74 65 78 74 2e 20 20 2a 2f 0a  er context.  */.
25600 20 20 69 6e 74 20 28 2a 78 45 78 70 72 43 61 6c    int (*xExprCal
25610 6c 62 61 63 6b 29 28 57 61 6c 6b 65 72 2a 2c 20  lback)(Walker*, 
25620 45 78 70 72 2a 29 3b 20 20 20 20 20 2f 2a 20 43  Expr*);     /* C
25630 61 6c 6c 62 61 63 6b 20 66 6f 72 20 65 78 70 72  allback for expr
25640 65 73 73 69 6f 6e 73 20 2a 2f 0a 20 20 69 6e 74  essions */.  int
25650 20 28 2a 78 53 65 6c 65 63 74 43 61 6c 6c 62 61   (*xSelectCallba
25660 63 6b 29 28 57 61 6c 6b 65 72 2a 2c 53 65 6c 65  ck)(Walker*,Sele
25670 63 74 2a 29 3b 20 20 2f 2a 20 43 61 6c 6c 62 61  ct*);  /* Callba
25680 63 6b 20 66 6f 72 20 53 45 4c 45 43 54 73 20 2a  ck for SELECTs *
25690 2f 0a 20 20 76 6f 69 64 20 28 2a 78 53 65 6c 65  /.  void (*xSele
256a0 63 74 43 61 6c 6c 62 61 63 6b 32 29 28 57 61 6c  ctCallback2)(Wal
256b0 6b 65 72 2a 2c 53 65 6c 65 63 74 2a 29 3b 2f 2a  ker*,Select*);/*
256c0 20 53 65 63 6f 6e 64 20 63 61 6c 6c 62 61 63 6b   Second callback
256d0 20 66 6f 72 20 53 45 4c 45 43 54 73 20 2a 2f 0a   for SELECTs */.
256e0 20 20 69 6e 74 20 77 61 6c 6b 65 72 44 65 70 74    int walkerDept
256f0 68 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  h;              
25700 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
25710 75 6d 62 65 72 20 6f 66 20 73 75 62 71 75 65 72  umber of subquer
25720 69 65 73 20 2a 2f 0a 20 20 75 38 20 65 43 6f 64  ies */.  u8 eCod
25730 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e;              
25740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25750 20 20 20 2f 2a 20 41 20 73 6d 61 6c 6c 20 70 72     /* A small pr
25760 6f 63 65 73 73 69 6e 67 20 63 6f 64 65 20 2a 2f  ocessing code */
25770 0a 20 20 75 6e 69 6f 6e 20 7b 20 20 20 20 20 20  .  union {      
25780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25790 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
257a0 45 78 74 72 61 20 64 61 74 61 20 66 6f 72 20 63  Extra data for c
257b0 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 20 20 4e  allback */.    N
257c0 61 6d 65 43 6f 6e 74 65 78 74 20 2a 70 4e 43 3b  ameContext *pNC;
257d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
257e0 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 69           /* Nami
257f0 6e 67 20 63 6f 6e 74 65 78 74 20 2a 2f 0a 20 20  ng context */.  
25800 20 20 69 6e 74 20 6e 3b 20 20 20 20 20 20 20 20    int n;        
25810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25820 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41              /* A
25830 20 63 6f 75 6e 74 65 72 20 2a 2f 0a 20 20 20 20   counter */.    
25840 69 6e 74 20 69 43 75 72 3b 20 20 20 20 20 20 20  int iCur;       
25850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25860 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 20 63            /* A c
25870 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 2a 2f 0a  ursor number */.
25880 20 20 20 20 53 72 63 4c 69 73 74 20 2a 70 53 72      SrcList *pSr
25890 63 4c 69 73 74 3b 20 20 20 20 20 20 20 20 20 20  cList;          
258a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
258b0 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 2a 2f 0a   FROM clause */.
258c0 20 20 20 20 73 74 72 75 63 74 20 53 72 63 43 6f      struct SrcCo
258d0 75 6e 74 20 2a 70 53 72 63 43 6f 75 6e 74 3b 20  unt *pSrcCount; 
258e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
258f0 20 43 6f 75 6e 74 69 6e 67 20 63 6f 6c 75 6d 6e   Counting column
25900 20 72 65 66 65 72 65 6e 63 65 73 20 2a 2f 0a 20   references */. 
25910 20 20 20 73 74 72 75 63 74 20 43 43 75 72 48 69     struct CCurHi
25920 6e 74 20 2a 70 43 43 75 72 48 69 6e 74 3b 20 20  nt *pCCurHint;  
25930 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
25940 55 73 65 64 20 62 79 20 63 6f 64 65 43 75 72 73  Used by codeCurs
25950 6f 72 48 69 6e 74 28 29 20 2a 2f 0a 20 20 20 20  orHint() */.    
25960 69 6e 74 20 2a 61 69 43 6f 6c 3b 20 20 20 20 20  int *aiCol;     
25970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25980 20 20 20 20 20 20 20 20 20 20 2f 2a 20 61 72 72            /* arr
25990 61 79 20 6f 66 20 63 6f 6c 75 6d 6e 20 69 6e 64  ay of column ind
259a0 65 78 65 73 20 2a 2f 0a 20 20 20 20 73 74 72 75  exes */.    stru
259b0 63 74 20 49 64 78 43 6f 76 65 72 20 2a 70 49 64  ct IdxCover *pId
259c0 78 43 6f 76 65 72 3b 20 20 20 20 20 20 20 20 20  xCover;         
259d0 20 20 20 20 20 20 2f 2a 20 43 68 65 63 6b 20 66        /* Check f
259e0 6f 72 20 69 6e 64 65 78 20 63 6f 76 65 72 61 67  or index coverag
259f0 65 20 2a 2f 0a 20 20 20 20 73 74 72 75 63 74 20  e */.    struct 
25a00 49 64 78 45 78 70 72 54 72 61 6e 73 20 2a 70 49  IdxExprTrans *pI
25a10 64 78 54 72 61 6e 73 3b 20 20 20 20 20 20 20 20  dxTrans;        
25a20 20 20 20 2f 2a 20 43 6f 6e 76 65 72 74 20 69 64     /* Convert id
25a30 78 65 64 20 65 78 70 72 20 74 6f 20 63 6f 6c 75  xed expr to colu
25a40 6d 6e 20 2a 2f 0a 20 20 20 20 45 78 70 72 4c 69  mn */.    ExprLi
25a50 73 74 20 2a 70 47 72 6f 75 70 42 79 3b 20 20 20  st *pGroupBy;   
25a60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25a70 20 20 20 20 2f 2a 20 47 52 4f 55 50 20 42 59 20      /* GROUP BY 
25a80 63 6c 61 75 73 65 20 2a 2f 0a 20 20 20 20 53 65  clause */.    Se
25a90 6c 65 63 74 20 2a 70 53 65 6c 65 63 74 3b 20 20  lect *pSelect;  
25aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25ab0 20 20 20 20 20 20 20 20 2f 2a 20 48 41 56 49 4e          /* HAVIN
25ac0 47 20 74 6f 20 57 48 45 52 45 20 63 6c 61 75 73  G to WHERE claus
25ad0 65 20 63 74 78 20 2a 2f 0a 20 20 20 20 73 74 72  e ctx */.    str
25ae0 75 63 74 20 57 69 6e 64 6f 77 52 65 77 72 69 74  uct WindowRewrit
25af0 65 20 2a 70 52 65 77 72 69 74 65 3b 20 20 20 20  e *pRewrite;    
25b00 20 20 20 20 20 20 20 2f 2a 20 57 69 6e 64 6f 77         /* Window
25b10 20 72 65 77 72 69 74 65 20 63 6f 6e 74 65 78 74   rewrite context
25b20 20 2a 2f 0a 20 20 20 20 73 74 72 75 63 74 20 57   */.    struct W
25b30 68 65 72 65 43 6f 6e 73 74 20 2a 70 43 6f 6e 73  hereConst *pCons
25b40 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t;              
25b50 20 20 2f 2a 20 57 48 45 52 45 20 63 6c 61 75 73    /* WHERE claus
25b60 65 20 63 6f 6e 73 74 61 6e 74 73 20 2a 2f 0a 20  e constants */. 
25b70 20 20 20 73 74 72 75 63 74 20 52 65 6e 61 6d 65     struct Rename
25b80 43 74 78 20 2a 70 52 65 6e 61 6d 65 3b 20 20 20  Ctx *pRename;   
25b90 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
25ba0 52 45 4e 41 4d 45 20 43 4f 4c 55 4d 4e 20 63 6f  RENAME COLUMN co
25bb0 6e 74 65 78 74 20 2a 2f 0a 20 20 7d 20 75 3b 0a  ntext */.  } u;.
25bc0 7d 3b 0a 0a 2f 2a 20 46 6f 72 77 61 72 64 20 64  };../* Forward d
25bd0 65 63 6c 61 72 61 74 69 6f 6e 73 20 2a 2f 0a 69  eclarations */.i
25be0 6e 74 20 73 71 6c 69 74 65 33 57 61 6c 6b 45 78  nt sqlite3WalkEx
25bf0 70 72 28 57 61 6c 6b 65 72 2a 2c 20 45 78 70 72  pr(Walker*, Expr
25c00 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57  *);.int sqlite3W
25c10 61 6c 6b 45 78 70 72 4c 69 73 74 28 57 61 6c 6b  alkExprList(Walk
25c20 65 72 2a 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b  er*, ExprList*);
25c30 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 61 6c 6b  .int sqlite3Walk
25c40 53 65 6c 65 63 74 28 57 61 6c 6b 65 72 2a 2c 20  Select(Walker*, 
25c50 53 65 6c 65 63 74 2a 29 3b 0a 69 6e 74 20 73 71  Select*);.int sq
25c60 6c 69 74 65 33 57 61 6c 6b 53 65 6c 65 63 74 45  lite3WalkSelectE
25c70 78 70 72 28 57 61 6c 6b 65 72 2a 2c 20 53 65 6c  xpr(Walker*, Sel
25c80 65 63 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ect*);.int sqlit
25c90 65 33 57 61 6c 6b 53 65 6c 65 63 74 46 72 6f 6d  e3WalkSelectFrom
25ca0 28 57 61 6c 6b 65 72 2a 2c 20 53 65 6c 65 63 74  (Walker*, Select
25cb0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45  *);.int sqlite3E
25cc0 78 70 72 57 61 6c 6b 4e 6f 6f 70 28 57 61 6c 6b  xprWalkNoop(Walk
25cd0 65 72 2a 2c 20 45 78 70 72 2a 29 3b 0a 69 6e 74  er*, Expr*);.int
25ce0 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74 57 61   sqlite3SelectWa
25cf0 6c 6b 4e 6f 6f 70 28 57 61 6c 6b 65 72 2a 2c 20  lkNoop(Walker*, 
25d00 53 65 6c 65 63 74 2a 29 3b 0a 69 6e 74 20 73 71  Select*);.int sq
25d10 6c 69 74 65 33 53 65 6c 65 63 74 57 61 6c 6b 46  lite3SelectWalkF
25d20 61 69 6c 28 57 61 6c 6b 65 72 2a 2c 20 53 65 6c  ail(Walker*, Sel
25d30 65 63 74 2a 29 3b 0a 23 69 66 64 65 66 20 53 51  ect*);.#ifdef SQ
25d40 4c 49 54 45 5f 44 45 42 55 47 0a 76 6f 69 64 20  LITE_DEBUG.void 
25d50 73 71 6c 69 74 65 33 53 65 6c 65 63 74 57 61 6c  sqlite3SelectWal
25d60 6b 41 73 73 65 72 74 32 28 57 61 6c 6b 65 72 2a  kAssert2(Walker*
25d70 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 23 65 6e 64  , Select*);.#end
25d80 69 66 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e  if../*.** Return
25d90 20 63 6f 64 65 20 66 72 6f 6d 20 74 68 65 20 70   code from the p
25da0 61 72 73 65 2d 74 72 65 65 20 77 61 6c 6b 69 6e  arse-tree walkin
25db0 67 20 70 72 69 6d 69 74 69 76 65 73 20 61 6e 64  g primitives and
25dc0 20 74 68 65 69 72 0a 2a 2a 20 63 61 6c 6c 62 61   their.** callba
25dd0 63 6b 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  cks..*/.#define 
25de0 57 52 43 5f 43 6f 6e 74 69 6e 75 65 20 20 20 20  WRC_Continue    
25df0 30 20 20 20 2f 2a 20 43 6f 6e 74 69 6e 75 65 20  0   /* Continue 
25e00 64 6f 77 6e 20 69 6e 74 6f 20 63 68 69 6c 64 72  down into childr
25e10 65 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 52  en */.#define WR
25e20 43 5f 50 72 75 6e 65 20 20 20 20 20 20 20 31 20  C_Prune       1 
25e30 20 20 2f 2a 20 4f 6d 69 74 20 63 68 69 6c 64 72    /* Omit childr
25e40 65 6e 20 62 75 74 20 63 6f 6e 74 69 6e 75 65 20  en but continue 
25e50 77 61 6c 6b 69 6e 67 20 73 69 62 6c 69 6e 67 73  walking siblings
25e60 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 52 43 5f   */.#define WRC_
25e70 41 62 6f 72 74 20 20 20 20 20 20 20 32 20 20 20  Abort       2   
25e80 2f 2a 20 41 62 61 6e 64 6f 6e 20 74 68 65 20 74  /* Abandon the t
25e90 72 65 65 20 77 61 6c 6b 20 2a 2f 0a 0a 2f 2a 0a  ree walk */../*.
25ea0 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f  ** An instance o
25eb0 66 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65  f this structure
25ec0 20 72 65 70 72 65 73 65 6e 74 73 20 61 20 73 65   represents a se
25ed0 74 20 6f 66 20 6f 6e 65 20 6f 72 20 6d 6f 72 65  t of one or more
25ee0 20 43 54 45 73 0a 2a 2a 20 28 63 6f 6d 6d 6f 6e   CTEs.** (common
25ef0 20 74 61 62 6c 65 20 65 78 70 72 65 73 73 69 6f   table expressio
25f00 6e 73 29 20 63 72 65 61 74 65 64 20 62 79 20 61  ns) created by a
25f10 20 73 69 6e 67 6c 65 20 57 49 54 48 20 63 6c 61   single WITH cla
25f20 75 73 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 57  use..*/.struct W
25f30 69 74 68 20 7b 0a 20 20 69 6e 74 20 6e 43 74 65  ith {.  int nCte
25f40 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
25f50 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
25f60 72 20 6f 66 20 43 54 45 73 20 69 6e 20 74 68 65  r of CTEs in the
25f70 20 57 49 54 48 20 63 6c 61 75 73 65 20 2a 2f 0a   WITH clause */.
25f80 20 20 57 69 74 68 20 2a 70 4f 75 74 65 72 3b 20    With *pOuter; 
25f90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25fa0 20 20 2f 2a 20 43 6f 6e 74 61 69 6e 69 6e 67 20    /* Containing 
25fb0 57 49 54 48 20 63 6c 61 75 73 65 2c 20 6f 72 20  WITH clause, or 
25fc0 4e 55 4c 4c 20 2a 2f 0a 20 20 73 74 72 75 63 74  NULL */.  struct
25fd0 20 43 74 65 20 7b 20 20 20 20 20 20 20 20 20 20   Cte {          
25fe0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 6f 72            /* For
25ff0 20 65 61 63 68 20 43 54 45 20 69 6e 20 74 68 65   each CTE in the
26000 20 57 49 54 48 20 63 6c 61 75 73 65 2e 2e 2e 2e   WITH clause....
26010 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a 4e   */.    char *zN
26020 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ame;            
26030 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20          /* Name 
26040 6f 66 20 74 68 69 73 20 43 54 45 20 2a 2f 0a 20  of this CTE */. 
26050 20 20 20 45 78 70 72 4c 69 73 74 20 2a 70 43 6f     ExprList *pCo
26060 6c 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ls;             
26070 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 65 78     /* List of ex
26080 70 6c 69 63 69 74 20 63 6f 6c 75 6d 6e 20 6e 61  plicit column na
26090 6d 65 73 2c 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a  mes, or NULL */.
260a0 20 20 20 20 53 65 6c 65 63 74 20 2a 70 53 65 6c      Select *pSel
260b0 65 63 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  ect;            
260c0 20 20 20 20 2f 2a 20 54 68 65 20 64 65 66 69 6e      /* The defin
260d0 69 74 69 6f 6e 20 6f 66 20 74 68 69 73 20 43 54  ition of this CT
260e0 45 20 2a 2f 0a 20 20 20 20 63 6f 6e 73 74 20 63  E */.    const c
260f0 68 61 72 20 2a 7a 43 74 65 45 72 72 3b 20 20 20  har *zCteErr;   
26100 20 20 20 20 20 20 20 20 20 2f 2a 20 45 72 72 6f           /* Erro
26110 72 20 6d 65 73 73 61 67 65 20 66 6f 72 20 63 69  r message for ci
26120 72 63 75 6c 61 72 20 72 65 66 65 72 65 6e 63 65  rcular reference
26130 73 20 2a 2f 0a 20 20 7d 20 61 5b 31 5d 3b 0a 7d  s */.  } a[1];.}
26140 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  ;..#ifdef SQLITE
26150 5f 44 45 42 55 47 0a 2f 2a 0a 2a 2a 20 41 6e 20  _DEBUG./*.** An 
26160 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20  instance of the 
26170 54 72 65 65 56 69 65 77 20 6f 62 6a 65 63 74 20  TreeView object 
26180 69 73 20 75 73 65 64 20 66 6f 72 20 70 72 69 6e  is used for prin
26190 74 69 6e 67 20 74 68 65 20 63 6f 6e 74 65 6e 74  ting the content
261a0 20 6f 66 0a 2a 2a 20 64 61 74 61 20 73 74 72 75   of.** data stru
261b0 63 74 75 72 65 73 20 6f 6e 20 73 71 6c 69 74 65  ctures on sqlite
261c0 33 44 65 62 75 67 50 72 69 6e 74 66 28 29 20 75  3DebugPrintf() u
261d0 73 69 6e 67 20 61 20 74 72 65 65 2d 6c 69 6b 65  sing a tree-like
261e0 20 76 69 65 77 2e 0a 2a 2f 0a 73 74 72 75 63 74   view..*/.struct
261f0 20 54 72 65 65 56 69 65 77 20 7b 0a 20 20 69 6e   TreeView {.  in
26200 74 20 69 4c 65 76 65 6c 3b 20 20 20 20 20 20 20  t iLevel;       
26210 20 20 20 20 20 20 2f 2a 20 57 68 69 63 68 20 6c        /* Which l
26220 65 76 65 6c 20 6f 66 20 74 68 65 20 74 72 65 65  evel of the tree
26230 20 77 65 20 61 72 65 20 6f 6e 20 2a 2f 0a 20 20   we are on */.  
26240 75 38 20 20 62 4c 69 6e 65 5b 31 30 30 5d 3b 20  u8  bLine[100]; 
26250 20 20 20 20 20 20 20 20 2f 2a 20 44 72 61 77 20          /* Draw 
26260 76 65 72 74 69 63 61 6c 20 69 6e 20 63 6f 6c 75  vertical in colu
26270 6d 6e 20 69 20 69 66 20 62 4c 69 6e 65 5b 69 5d  mn i if bLine[i]
26280 20 69 73 20 74 72 75 65 20 2a 2f 0a 7d 3b 0a 23   is true */.};.#
26290 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
262a0 44 45 42 55 47 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20  DEBUG */../*.** 
262b0 54 68 69 73 20 6f 62 6a 65 63 74 20 69 73 20 75  This object is u
262c0 73 65 64 20 69 6e 20 76 61 72 69 6f 69 75 73 20  sed in varioius 
262d0 77 61 79 73 2c 20 61 6c 6c 20 72 65 6c 61 74 65  ways, all relate
262e0 64 20 74 6f 20 77 69 6e 64 6f 77 20 66 75 6e 63  d to window func
262f0 74 69 6f 6e 73 0a 2a 2a 0a 2a 2a 20 20 20 28 31  tions.**.**   (1
26300 29 20 41 20 73 69 6e 67 6c 65 20 69 6e 73 74 61  ) A single insta
26310 6e 63 65 20 6f 66 20 74 68 69 73 20 73 74 72 75  nce of this stru
26320 63 74 75 72 65 20 69 73 20 61 74 74 61 63 68 65  cture is attache
26330 64 20 74 6f 20 74 68 65 0a 2a 2a 20 20 20 20 20  d to the.**     
26340 20 20 74 68 65 20 45 78 70 72 2e 70 57 69 6e 20    the Expr.pWin 
26350 66 69 65 6c 64 20 66 6f 72 20 65 61 63 68 20 77  field for each w
26360 69 6e 64 6f 77 20 66 75 6e 63 74 69 6f 6e 20 69  indow function i
26370 6e 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 20  n an expression 
26380 74 72 65 65 2e 0a 2a 2a 20 20 20 20 20 20 20 54  tree..**       T
26390 68 69 73 20 6f 62 6a 65 63 74 20 68 6f 6c 64 73  his object holds
263a0 20 74 68 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e   the information
263b0 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20 74 68   contained in th
263c0 65 20 4f 56 45 52 20 63 6c 61 75 73 65 2c 0a 2a  e OVER clause,.*
263d0 2a 20 20 20 20 20 20 20 70 6c 75 73 20 61 64 64  *       plus add
263e0 69 74 69 6f 6e 61 6c 20 66 69 65 6c 64 73 20 75  itional fields u
263f0 73 65 64 20 64 75 72 69 6e 67 20 63 6f 64 65 20  sed during code 
26400 67 65 6e 65 72 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a  generation..**.*
26410 2a 20 20 20 28 32 29 20 41 6c 6c 20 77 69 6e 64  *   (2) All wind
26420 6f 77 20 66 75 6e 63 74 69 6f 6e 73 20 69 6e 20  ow functions in 
26430 61 20 73 69 6e 67 6c 65 20 53 45 4c 45 43 54 20  a single SELECT 
26440 66 6f 72 6d 20 61 20 6c 69 6e 6b 65 64 2d 6c 69  form a linked-li
26450 73 74 0a 2a 2a 20 20 20 20 20 20 20 61 74 74 61  st.**       atta
26460 63 68 65 64 20 74 6f 20 53 65 6c 65 63 74 2e 70  ched to Select.p
26470 57 69 6e 2e 20 20 54 68 65 20 57 69 6e 64 6f 77  Win.  The Window
26480 2e 70 46 75 6e 63 20 61 6e 64 20 57 69 6e 64 6f  .pFunc and Windo
26490 77 2e 70 45 78 70 72 0a 2a 2a 20 20 20 20 20 20  w.pExpr.**      
264a0 20 66 69 65 6c 64 73 20 70 6f 69 6e 74 20 62 61   fields point ba
264b0 63 6b 20 74 6f 20 74 68 65 20 65 78 70 72 65 73  ck to the expres
264c0 73 69 6f 6e 20 74 68 61 74 20 69 73 20 74 68 65  sion that is the
264d0 20 77 69 6e 64 6f 77 20 66 75 6e 63 74 69 6f 6e   window function
264e0 2e 0a 2a 2a 0a 2a 2a 20 20 20 28 33 29 20 54 68  ..**.**   (3) Th
264f0 65 20 74 65 72 6d 73 20 6f 66 20 74 68 65 20 57  e terms of the W
26500 49 4e 44 4f 57 20 63 6c 61 75 73 65 20 6f 66 20  INDOW clause of 
26510 61 20 53 45 4c 45 43 54 20 61 72 65 20 69 6e 73  a SELECT are ins
26520 74 61 6e 63 65 73 20 6f 66 20 74 68 69 73 0a 2a  tances of this.*
26530 2a 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 6f  *       object o
26540 6e 20 61 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20  n a linked list 
26550 61 74 74 61 63 68 65 64 20 74 6f 20 53 65 6c 65  attached to Sele
26560 63 74 2e 70 57 69 6e 44 65 66 6e 2e 0a 2a 2a 0a  ct.pWinDefn..**.
26570 2a 2a 20 54 68 65 20 75 73 65 73 20 28 31 29 20  ** The uses (1) 
26580 61 6e 64 20 28 32 29 20 61 72 65 20 72 65 61 6c  and (2) are real
26590 6c 79 20 74 68 65 20 73 61 6d 65 20 57 69 6e 64  ly the same Wind
265a0 6f 77 20 6f 62 6a 65 63 74 20 74 68 61 74 20 6a  ow object that j
265b0 75 73 74 20 68 61 70 70 65 6e 73 0a 2a 2a 20 74  ust happens.** t
265c0 6f 20 62 65 20 61 63 63 65 73 73 69 62 6c 65 20  o be accessible 
265d0 69 6e 20 74 77 6f 20 64 69 66 66 65 72 65 6e 74  in two different
265e0 20 77 61 79 73 2e 20 20 55 73 65 20 28 33 29 20   ways.  Use (3) 
265f0 69 73 20 61 72 65 20 73 65 70 61 72 61 74 65 20  is are separate 
26600 6f 62 6a 65 63 74 73 2e 0a 2a 2f 0a 73 74 72 75  objects..*/.stru
26610 63 74 20 57 69 6e 64 6f 77 20 7b 0a 20 20 63 68  ct Window {.  ch
26620 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20  ar *zName;      
26630 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66        /* Name of
26640 20 77 69 6e 64 6f 77 20 28 6d 61 79 20 62 65 20   window (may be 
26650 4e 55 4c 4c 29 20 2a 2f 0a 20 20 45 78 70 72 4c  NULL) */.  ExprL
26660 69 73 74 20 2a 70 50 61 72 74 69 74 69 6f 6e 3b  ist *pPartition;
26670 20 20 20 2f 2a 20 50 41 52 54 49 54 49 4f 4e 20     /* PARTITION 
26680 42 59 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 45  BY clause */.  E
26690 78 70 72 4c 69 73 74 20 2a 70 4f 72 64 65 72 42  xprList *pOrderB
266a0 79 3b 20 20 20 20 20 2f 2a 20 4f 52 44 45 52 20  y;     /* ORDER 
266b0 42 59 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 75  BY clause */.  u
266c0 38 20 65 54 79 70 65 3b 20 20 20 20 20 20 20 20  8 eType;        
266d0 20 20 20 20 20 20 20 2f 2a 20 54 4b 5f 52 41 4e         /* TK_RAN
266e0 47 45 20 6f 72 20 54 4b 5f 52 4f 57 53 20 2a 2f  GE or TK_ROWS */
266f0 0a 20 20 75 38 20 65 53 74 61 72 74 3b 20 20 20  .  u8 eStart;   
26700 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 55 4e             /* UN
26710 42 4f 55 4e 44 45 44 2c 20 43 55 52 52 45 4e 54  BOUNDED, CURRENT
26720 2c 20 50 52 45 43 45 44 49 4e 47 20 6f 72 20 46  , PRECEDING or F
26730 4f 4c 4c 4f 57 49 4e 47 20 2a 2f 0a 20 20 75 38  OLLOWING */.  u8
26740 20 65 45 6e 64 3b 20 20 20 20 20 20 20 20 20 20   eEnd;          
26750 20 20 20 20 20 20 2f 2a 20 55 4e 42 4f 55 4e 44        /* UNBOUND
26760 45 44 2c 20 43 55 52 52 45 4e 54 2c 20 50 52 45  ED, CURRENT, PRE
26770 43 45 44 49 4e 47 20 6f 72 20 46 4f 4c 4c 4f 57  CEDING or FOLLOW
26780 49 4e 47 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70  ING */.  Expr *p
26790 53 74 61 72 74 3b 20 20 20 20 20 20 20 20 20 20  Start;          
267a0 20 2f 2a 20 45 78 70 72 65 73 73 69 6f 6e 20 66   /* Expression f
267b0 6f 72 20 22 3c 65 78 70 72 3e 20 50 52 45 43 45  or "<expr> PRECE
267c0 44 49 4e 47 22 20 2a 2f 0a 20 20 45 78 70 72 20  DING" */.  Expr 
267d0 2a 70 45 6e 64 3b 20 20 20 20 20 20 20 20 20 20  *pEnd;          
267e0 20 20 20 2f 2a 20 45 78 70 72 65 73 73 69 6f 6e     /* Expression
267f0 20 66 6f 72 20 22 3c 65 78 70 72 3e 20 46 4f 4c   for "<expr> FOL
26800 4c 4f 57 49 4e 47 22 20 2a 2f 0a 20 20 57 69 6e  LOWING" */.  Win
26810 64 6f 77 20 2a 70 4e 65 78 74 57 69 6e 3b 20 20  dow *pNextWin;  
26820 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 77 69 6e       /* Next win
26830 64 6f 77 20 66 75 6e 63 74 69 6f 6e 20 62 65 6c  dow function bel
26840 6f 6e 67 69 6e 67 20 74 6f 20 74 68 69 73 20 53  onging to this S
26850 45 4c 45 43 54 20 2a 2f 0a 20 20 45 78 70 72 20  ELECT */.  Expr 
26860 2a 70 46 69 6c 74 65 72 3b 20 20 20 20 20 20 20  *pFilter;       
26870 20 20 20 2f 2a 20 54 68 65 20 46 49 4c 54 45 52     /* The FILTER
26880 20 65 78 70 72 65 73 73 69 6f 6e 20 2a 2f 0a 20   expression */. 
26890 20 46 75 6e 63 44 65 66 20 2a 70 46 75 6e 63 3b   FuncDef *pFunc;
268a0 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
268b0 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 69 6e  function */.  in
268c0 74 20 69 45 70 68 43 73 72 3b 20 20 20 20 20 20  t iEphCsr;      
268d0 20 20 20 20 20 20 2f 2a 20 50 61 72 74 69 74 69        /* Partiti
268e0 6f 6e 20 62 75 66 66 65 72 20 6f 72 20 50 65 65  on buffer or Pee
268f0 72 20 62 75 66 66 65 72 20 2a 2f 0a 20 20 69 6e  r buffer */.  in
26900 74 20 72 65 67 41 63 63 75 6d 3b 0a 20 20 69 6e  t regAccum;.  in
26910 74 20 72 65 67 52 65 73 75 6c 74 3b 0a 20 20 69  t regResult;.  i
26920 6e 74 20 63 73 72 41 70 70 3b 20 20 20 20 20 20  nt csrApp;      
26930 20 20 20 20 20 20 20 2f 2a 20 46 75 6e 63 74 69         /* Functi
26940 6f 6e 20 63 75 72 73 6f 72 20 28 75 73 65 64 20  on cursor (used 
26950 62 79 20 6d 69 6e 2f 6d 61 78 29 20 2a 2f 0a 20  by min/max) */. 
26960 20 69 6e 74 20 72 65 67 41 70 70 3b 20 20 20 20   int regApp;    
26970 20 20 20 20 20 20 20 20 20 2f 2a 20 46 75 6e 63           /* Func
26980 74 69 6f 6e 20 72 65 67 69 73 74 65 72 20 28 61  tion register (a
26990 6c 73 6f 20 75 73 65 64 20 62 79 20 6d 69 6e 2f  lso used by min/
269a0 6d 61 78 29 20 2a 2f 0a 20 20 69 6e 74 20 72 65  max) */.  int re
269b0 67 50 61 72 74 3b 20 20 20 20 20 20 20 20 20 20  gPart;          
269c0 20 20 2f 2a 20 46 69 72 73 74 20 69 6e 20 61 20    /* First in a 
269d0 73 65 74 20 6f 66 20 72 65 67 69 73 74 65 72 73  set of registers
269e0 20 68 6f 6c 64 69 6e 67 20 50 41 52 54 49 54 49   holding PARTITI
269f0 4f 4e 20 42 59 0a 20 20 20 20 20 20 20 20 20 20  ON BY.          
26a00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26a10 2a 2a 20 61 6e 64 20 4f 52 44 45 52 20 42 59 20  ** and ORDER BY 
26a20 76 61 6c 75 65 73 20 66 6f 72 20 74 68 65 20 77  values for the w
26a30 69 6e 64 6f 77 20 2a 2f 0a 20 20 45 78 70 72 20  indow */.  Expr 
26a40 2a 70 4f 77 6e 65 72 3b 20 20 20 20 20 20 20 20  *pOwner;        
26a50 20 20 20 2f 2a 20 45 78 70 72 65 73 73 69 6f 6e     /* Expression
26a60 20 6f 62 6a 65 63 74 20 74 68 69 73 20 77 69 6e   object this win
26a70 64 6f 77 20 69 73 20 61 74 74 61 63 68 65 64 20  dow is attached 
26a80 74 6f 20 2a 2f 0a 20 20 69 6e 74 20 6e 42 75 66  to */.  int nBuf
26a90 66 65 72 43 6f 6c 3b 20 20 20 20 20 20 20 20 20  ferCol;         
26aa0 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c  /* Number of col
26ab0 75 6d 6e 73 20 69 6e 20 62 75 66 66 65 72 20 74  umns in buffer t
26ac0 61 62 6c 65 20 2a 2f 0a 20 20 69 6e 74 20 69 41  able */.  int iA
26ad0 72 67 43 6f 6c 3b 20 20 20 20 20 20 20 20 20 20  rgCol;          
26ae0 20 20 2f 2a 20 4f 66 66 73 65 74 20 6f 66 20 66    /* Offset of f
26af0 69 72 73 74 20 61 72 67 75 6d 65 6e 74 20 66 6f  irst argument fo
26b00 72 20 74 68 69 73 20 66 75 6e 63 74 69 6f 6e 20  r this function 
26b10 2a 2f 0a 7d 3b 0a 0a 23 69 66 6e 64 65 66 20 53  */.};..#ifndef S
26b20 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 49 4e 44 4f  QLITE_OMIT_WINDO
26b30 57 46 55 4e 43 0a 76 6f 69 64 20 73 71 6c 69 74  WFUNC.void sqlit
26b40 65 33 57 69 6e 64 6f 77 44 65 6c 65 74 65 28 73  e3WindowDelete(s
26b50 71 6c 69 74 65 33 2a 2c 20 57 69 6e 64 6f 77 2a  qlite3*, Window*
26b60 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 57  );.void sqlite3W
26b70 69 6e 64 6f 77 4c 69 73 74 44 65 6c 65 74 65 28  indowListDelete(
26b80 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 57 69 6e  sqlite3 *db, Win
26b90 64 6f 77 20 2a 70 29 3b 0a 57 69 6e 64 6f 77 20  dow *p);.Window 
26ba0 2a 73 71 6c 69 74 65 33 57 69 6e 64 6f 77 41 6c  *sqlite3WindowAl
26bb0 6c 6f 63 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c  loc(Parse*, int,
26bc0 20 69 6e 74 2c 20 45 78 70 72 2a 2c 20 69 6e 74   int, Expr*, int
26bd0 20 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20   , Expr*);.void 
26be0 73 71 6c 69 74 65 33 57 69 6e 64 6f 77 41 74 74  sqlite3WindowAtt
26bf0 61 63 68 28 50 61 72 73 65 2a 2c 20 45 78 70 72  ach(Parse*, Expr
26c00 2a 2c 20 57 69 6e 64 6f 77 2a 29 3b 0a 69 6e 74  *, Window*);.int
26c10 20 73 71 6c 69 74 65 33 57 69 6e 64 6f 77 43 6f   sqlite3WindowCo
26c20 6d 70 61 72 65 28 50 61 72 73 65 2a 2c 20 57 69  mpare(Parse*, Wi
26c30 6e 64 6f 77 2a 2c 20 57 69 6e 64 6f 77 2a 29 3b  ndow*, Window*);
26c40 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 57 69 6e  .void sqlite3Win
26c50 64 6f 77 43 6f 64 65 49 6e 69 74 28 50 61 72 73  dowCodeInit(Pars
26c60 65 2a 2c 20 57 69 6e 64 6f 77 2a 29 3b 0a 76 6f  e*, Window*);.vo
26c70 69 64 20 73 71 6c 69 74 65 33 57 69 6e 64 6f 77  id sqlite3Window
26c80 43 6f 64 65 53 74 65 70 28 50 61 72 73 65 2a 2c  CodeStep(Parse*,
26c90 20 53 65 6c 65 63 74 2a 2c 20 57 68 65 72 65 49   Select*, WhereI
26ca0 6e 66 6f 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b  nfo*, int, int);
26cb0 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 69 6e 64  .int sqlite3Wind
26cc0 6f 77 52 65 77 72 69 74 65 28 50 61 72 73 65 2a  owRewrite(Parse*
26cd0 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 69 6e 74 20  , Select*);.int 
26ce0 73 71 6c 69 74 65 33 45 78 70 61 6e 64 53 75 62  sqlite3ExpandSub
26cf0 71 75 65 72 79 28 50 61 72 73 65 2a 2c 20 73 74  query(Parse*, st
26d00 72 75 63 74 20 53 72 63 4c 69 73 74 5f 69 74 65  ruct SrcList_ite
26d10 6d 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  m*);.void sqlite
26d20 33 57 69 6e 64 6f 77 55 70 64 61 74 65 28 50 61  3WindowUpdate(Pa
26d30 72 73 65 2a 2c 20 57 69 6e 64 6f 77 2a 2c 20 57  rse*, Window*, W
26d40 69 6e 64 6f 77 2a 2c 20 46 75 6e 63 44 65 66 2a  indow*, FuncDef*
26d50 29 3b 0a 57 69 6e 64 6f 77 20 2a 73 71 6c 69 74  );.Window *sqlit
26d60 65 33 57 69 6e 64 6f 77 44 75 70 28 73 71 6c 69  e3WindowDup(sqli
26d70 74 65 33 20 2a 64 62 2c 20 45 78 70 72 20 2a 70  te3 *db, Expr *p
26d80 4f 77 6e 65 72 2c 20 57 69 6e 64 6f 77 20 2a 70  Owner, Window *p
26d90 29 3b 0a 57 69 6e 64 6f 77 20 2a 73 71 6c 69 74  );.Window *sqlit
26da0 65 33 57 69 6e 64 6f 77 4c 69 73 74 44 75 70 28  e3WindowListDup(
26db0 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 57 69 6e  sqlite3 *db, Win
26dc0 64 6f 77 20 2a 70 29 3b 0a 76 6f 69 64 20 73 71  dow *p);.void sq
26dd0 6c 69 74 65 33 57 69 6e 64 6f 77 46 75 6e 63 74  lite3WindowFunct
26de0 69 6f 6e 73 28 76 6f 69 64 29 3b 0a 23 65 6c 73  ions(void);.#els
26df0 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  e.# define sqlit
26e00 65 33 57 69 6e 64 6f 77 44 65 6c 65 74 65 28 61  e3WindowDelete(a
26e10 2c 62 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  ,b).# define sql
26e20 69 74 65 33 57 69 6e 64 6f 77 46 75 6e 63 74 69  ite3WindowFuncti
26e30 6f 6e 73 28 29 0a 23 20 64 65 66 69 6e 65 20 73  ons().# define s
26e40 71 6c 69 74 65 33 57 69 6e 64 6f 77 41 74 74 61  qlite3WindowAtta
26e50 63 68 28 61 2c 62 2c 63 29 0a 23 65 6e 64 69 66  ch(a,b,c).#endif
26e60 0a 0a 2f 2a 0a 2a 2a 20 41 73 73 75 6d 69 6e 67  ../*.** Assuming
26e70 20 7a 49 6e 20 70 6f 69 6e 74 73 20 74 6f 20 74   zIn points to t
26e80 68 65 20 66 69 72 73 74 20 62 79 74 65 20 6f 66  he first byte of
26e90 20 61 20 55 54 46 2d 38 20 63 68 61 72 61 63 74   a UTF-8 charact
26ea0 65 72 2c 0a 2a 2a 20 61 64 76 61 6e 63 65 20 7a  er,.** advance z
26eb0 49 6e 20 74 6f 20 70 6f 69 6e 74 20 74 6f 20 74  In to point to t
26ec0 68 65 20 66 69 72 73 74 20 62 79 74 65 20 6f 66  he first byte of
26ed0 20 74 68 65 20 6e 65 78 74 20 55 54 46 2d 38 20   the next UTF-8 
26ee0 63 68 61 72 61 63 74 65 72 2e 0a 2a 2f 0a 23 64  character..*/.#d
26ef0 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 4b 49  efine SQLITE_SKI
26f00 50 5f 55 54 46 38 28 7a 49 6e 29 20 7b 20 20 20  P_UTF8(zIn) {   
26f10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26f20 20 20 20 20 20 5c 0a 20 20 69 66 28 20 28 2a 28       \.  if( (*(
26f30 7a 49 6e 2b 2b 29 29 3e 3d 30 78 63 30 20 29 7b  zIn++))>=0xc0 ){
26f40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26f50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5c 0a                \.
26f60 20 20 20 20 77 68 69 6c 65 28 20 28 2a 7a 49 6e      while( (*zIn
26f70 20 26 20 30 78 63 30 29 3d 3d 30 78 38 30 20 29   & 0xc0)==0x80 )
26f80 7b 20 7a 49 6e 2b 2b 3b 20 7d 20 20 20 20 20 20  { zIn++; }      
26f90 20 20 20 20 20 20 20 5c 0a 20 20 7d 20 20 20 20         \.  }    
26fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26fd0 5c 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 53  \.}../*.** The S
26fe0 51 4c 49 54 45 5f 2a 5f 42 4b 50 54 20 6d 61 63  QLITE_*_BKPT mac
26ff0 72 6f 73 20 61 72 65 20 73 75 62 73 74 69 74 75  ros are substitu
27000 74 65 73 20 66 6f 72 20 74 68 65 20 65 72 72 6f  tes for the erro
27010 72 20 63 6f 64 65 73 20 77 69 74 68 0a 2a 2a 20  r codes with.** 
27020 74 68 65 20 73 61 6d 65 20 6e 61 6d 65 20 62 75  the same name bu
27030 74 20 77 69 74 68 6f 75 74 20 74 68 65 20 5f 42  t without the _B
27040 4b 50 54 20 73 75 66 66 69 78 2e 20 20 54 68 65  KPT suffix.  The
27050 73 65 20 6d 61 63 72 6f 73 20 69 6e 76 6f 6b 65  se macros invoke
27060 0a 2a 2a 20 72 6f 75 74 69 6e 65 73 20 74 68 61  .** routines tha
27070 74 20 72 65 70 6f 72 74 20 74 68 65 20 6c 69 6e  t report the lin
27080 65 2d 6e 75 6d 62 65 72 20 6f 6e 20 77 68 69 63  e-number on whic
27090 68 20 74 68 65 20 65 72 72 6f 72 20 6f 72 69 67  h the error orig
270a0 69 6e 61 74 65 64 0a 2a 2a 20 75 73 69 6e 67 20  inated.** using 
270b0 73 71 6c 69 74 65 33 5f 6c 6f 67 28 29 2e 20 20  sqlite3_log().  
270c0 54 68 65 20 72 6f 75 74 69 6e 65 73 20 61 6c 73  The routines als
270d0 6f 20 70 72 6f 76 69 64 65 20 61 20 63 6f 6e 76  o provide a conv
270e0 65 6e 69 65 6e 74 20 70 6c 61 63 65 0a 2a 2a 20  enient place.** 
270f0 74 6f 20 73 65 74 20 61 20 64 65 62 75 67 67 65  to set a debugge
27100 72 20 62 72 65 61 6b 70 6f 69 6e 74 2e 0a 2a 2f  r breakpoint..*/
27110 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 65 70 6f  .int sqlite3Repo
27120 72 74 45 72 72 6f 72 28 69 6e 74 20 69 45 72 72  rtError(int iErr
27130 2c 20 69 6e 74 20 6c 69 6e 65 6e 6f 2c 20 63 6f  , int lineno, co
27140 6e 73 74 20 63 68 61 72 20 2a 7a 54 79 70 65 29  nst char *zType)
27150 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 6f 72  ;.int sqlite3Cor
27160 72 75 70 74 45 72 72 6f 72 28 69 6e 74 29 3b 0a  ruptError(int);.
27170 69 6e 74 20 73 71 6c 69 74 65 33 4d 69 73 75 73  int sqlite3Misus
27180 65 45 72 72 6f 72 28 69 6e 74 29 3b 0a 69 6e 74  eError(int);.int
27190 20 73 71 6c 69 74 65 33 43 61 6e 74 6f 70 65 6e   sqlite3Cantopen
271a0 45 72 72 6f 72 28 69 6e 74 29 3b 0a 23 64 65 66  Error(int);.#def
271b0 69 6e 65 20 53 51 4c 49 54 45 5f 43 4f 52 52 55  ine SQLITE_CORRU
271c0 50 54 5f 42 4b 50 54 20 73 71 6c 69 74 65 33 43  PT_BKPT sqlite3C
271d0 6f 72 72 75 70 74 45 72 72 6f 72 28 5f 5f 4c 49  orruptError(__LI
271e0 4e 45 5f 5f 29 0a 23 64 65 66 69 6e 65 20 53 51  NE__).#define SQ
271f0 4c 49 54 45 5f 4d 49 53 55 53 45 5f 42 4b 50 54  LITE_MISUSE_BKPT
27200 20 73 71 6c 69 74 65 33 4d 69 73 75 73 65 45 72   sqlite3MisuseEr
27210 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 29 0a 23 64  ror(__LINE__).#d
27220 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 41 4e  efine SQLITE_CAN
27230 54 4f 50 45 4e 5f 42 4b 50 54 20 73 71 6c 69 74  TOPEN_BKPT sqlit
27240 65 33 43 61 6e 74 6f 70 65 6e 45 72 72 6f 72 28  e3CantopenError(
27250 5f 5f 4c 49 4e 45 5f 5f 29 0a 23 69 66 64 65 66  __LINE__).#ifdef
27260 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20   SQLITE_DEBUG.  
27270 69 6e 74 20 73 71 6c 69 74 65 33 4e 6f 6d 65 6d  int sqlite3Nomem
27280 45 72 72 6f 72 28 69 6e 74 29 3b 0a 20 20 69 6e  Error(int);.  in
27290 74 20 73 71 6c 69 74 65 33 49 6f 65 72 72 6e 6f  t sqlite3Ioerrno
272a0 6d 65 6d 45 72 72 6f 72 28 69 6e 74 29 3b 0a 20  memError(int);. 
272b0 20 69 6e 74 20 73 71 6c 69 74 65 33 43 6f 72 72   int sqlite3Corr
272c0 75 70 74 50 67 6e 6f 45 72 72 6f 72 28 69 6e 74  uptPgnoError(int
272d0 2c 50 67 6e 6f 29 3b 0a 23 20 64 65 66 69 6e 65  ,Pgno);.# define
272e0 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 5f 42 4b   SQLITE_NOMEM_BK
272f0 50 54 20 73 71 6c 69 74 65 33 4e 6f 6d 65 6d 45  PT sqlite3NomemE
27300 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 29 0a 23  rror(__LINE__).#
27310 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49   define SQLITE_I
27320 4f 45 52 52 5f 4e 4f 4d 45 4d 5f 42 4b 50 54 20  OERR_NOMEM_BKPT 
27330 73 71 6c 69 74 65 33 49 6f 65 72 72 6e 6f 6d 65  sqlite3Ioerrnome
27340 6d 45 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 29  mError(__LINE__)
27350 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
27360 5f 43 4f 52 52 55 50 54 5f 50 47 4e 4f 28 50 29  _CORRUPT_PGNO(P)
27370 20 73 71 6c 69 74 65 33 43 6f 72 72 75 70 74 50   sqlite3CorruptP
27380 67 6e 6f 45 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f  gnoError(__LINE_
27390 5f 2c 28 50 29 29 0a 23 65 6c 73 65 0a 23 20 64  _,(P)).#else.# d
273a0 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e 4f 4d  efine SQLITE_NOM
273b0 45 4d 5f 42 4b 50 54 20 53 51 4c 49 54 45 5f 4e  EM_BKPT SQLITE_N
273c0 4f 4d 45 4d 0a 23 20 64 65 66 69 6e 65 20 53 51  OMEM.# define SQ
273d0 4c 49 54 45 5f 49 4f 45 52 52 5f 4e 4f 4d 45 4d  LITE_IOERR_NOMEM
273e0 5f 42 4b 50 54 20 53 51 4c 49 54 45 5f 49 4f 45  _BKPT SQLITE_IOE
273f0 52 52 5f 4e 4f 4d 45 4d 0a 23 20 64 65 66 69 6e  RR_NOMEM.# defin
27400 65 20 53 51 4c 49 54 45 5f 43 4f 52 52 55 50 54  e SQLITE_CORRUPT
27410 5f 50 47 4e 4f 28 50 29 20 73 71 6c 69 74 65 33  _PGNO(P) sqlite3
27420 43 6f 72 72 75 70 74 45 72 72 6f 72 28 5f 5f 4c  CorruptError(__L
27430 49 4e 45 5f 5f 29 0a 23 65 6e 64 69 66 0a 0a 2f  INE__).#endif../
27440 2a 0a 2a 2a 20 46 54 53 33 20 61 6e 64 20 46 54  *.** FTS3 and FT
27450 53 34 20 62 6f 74 68 20 72 65 71 75 69 72 65 20  S4 both require 
27460 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 73 75  virtual table su
27470 70 70 6f 72 74 0a 2a 2f 0a 23 69 66 20 64 65 66  pport.*/.#if def
27480 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54  ined(SQLITE_OMIT
27490 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 29 0a 23  _VIRTUALTABLE).#
274a0 20 75 6e 64 65 66 20 53 51 4c 49 54 45 5f 45 4e   undef SQLITE_EN
274b0 41 42 4c 45 5f 46 54 53 33 0a 23 20 75 6e 64 65  ABLE_FTS3.# unde
274c0 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
274d0 46 54 53 34 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  FTS4.#endif../*.
274e0 2a 2a 20 46 54 53 34 20 69 73 20 72 65 61 6c 6c  ** FTS4 is reall
274f0 79 20 61 6e 20 65 78 74 65 6e 73 69 6f 6e 20 66  y an extension f
27500 6f 72 20 46 54 53 33 2e 20 20 49 74 20 69 73 20  or FTS3.  It is 
27510 65 6e 61 62 6c 65 64 20 75 73 69 6e 67 20 74 68  enabled using th
27520 65 0a 2a 2a 20 53 51 4c 49 54 45 5f 45 4e 41 42  e.** SQLITE_ENAB
27530 4c 45 5f 46 54 53 33 20 6d 61 63 72 6f 2e 20 20  LE_FTS3 macro.  
27540 42 75 74 20 74 6f 20 61 76 6f 69 64 20 63 6f 6e  But to avoid con
27550 66 75 73 69 6f 6e 20 77 65 20 61 6c 73 6f 20 63  fusion we also c
27560 61 6c 6c 0a 2a 2a 20 74 68 65 20 53 51 4c 49 54  all.** the SQLIT
27570 45 5f 45 4e 41 42 4c 45 5f 46 54 53 34 20 6d 61  E_ENABLE_FTS4 ma
27580 63 72 6f 20 74 6f 20 73 65 72 76 65 20 61 73 20  cro to serve as 
27590 61 6e 20 61 6c 69 61 73 20 66 6f 72 20 53 51 4c  an alias for SQL
275a0 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33 2e  ITE_ENABLE_FTS3.
275b0 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28  .*/.#if defined(
275c0 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54  SQLITE_ENABLE_FT
275d0 53 34 29 20 26 26 20 21 64 65 66 69 6e 65 64 28  S4) && !defined(
275e0 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54  SQLITE_ENABLE_FT
275f0 53 33 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  S3).# define SQL
27600 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33 20  ITE_ENABLE_FTS3 
27610 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  1.#endif../*.** 
27620 54 68 65 20 63 74 79 70 65 2e 68 20 68 65 61 64  The ctype.h head
27630 65 72 20 69 73 20 6e 65 65 64 65 64 20 66 6f 72  er is needed for
27640 20 6e 6f 6e 2d 41 53 43 49 49 20 73 79 73 74 65   non-ASCII syste
27650 6d 73 2e 20 20 49 74 20 69 73 20 61 6c 73 6f 0a  ms.  It is also.
27660 2a 2a 20 6e 65 65 64 65 64 20 62 79 20 46 54 53  ** needed by FTS
27670 33 20 77 68 65 6e 20 46 54 53 33 20 69 73 20 69  3 when FTS3 is i
27680 6e 63 6c 75 64 65 64 20 69 6e 20 74 68 65 20 61  ncluded in the a
27690 6d 61 6c 67 61 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a  malgamation..*/.
276a0 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c  #if !defined(SQL
276b0 49 54 45 5f 41 53 43 49 49 29 20 7c 7c 20 5c 0a  ITE_ASCII) || \.
276c0 20 20 20 20 28 64 65 66 69 6e 65 64 28 53 51 4c      (defined(SQL
276d0 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33 29  ITE_ENABLE_FTS3)
276e0 20 26 26 20 64 65 66 69 6e 65 64 28 53 51 4c 49   && defined(SQLI
276f0 54 45 5f 41 4d 41 4c 47 41 4d 41 54 49 4f 4e 29  TE_AMALGAMATION)
27700 29 0a 23 20 69 6e 63 6c 75 64 65 20 3c 63 74 79  ).# include <cty
27710 70 65 2e 68 3e 0a 23 65 6e 64 69 66 0a 0a 2f 2a  pe.h>.#endif../*
27720 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e  .** The followin
27730 67 20 6d 61 63 72 6f 73 20 6d 69 6d 69 63 20 74  g macros mimic t
27740 68 65 20 73 74 61 6e 64 61 72 64 20 6c 69 62 72  he standard libr
27750 61 72 79 20 66 75 6e 63 74 69 6f 6e 73 20 74 6f  ary functions to
27760 75 70 70 65 72 28 29 2c 0a 2a 2a 20 69 73 73 70  upper(),.** issp
27770 61 63 65 28 29 2c 20 69 73 61 6c 6e 75 6d 28 29  ace(), isalnum()
27780 2c 20 69 73 64 69 67 69 74 28 29 20 61 6e 64 20  , isdigit() and 
27790 69 73 78 64 69 67 69 74 28 29 2c 20 72 65 73 70  isxdigit(), resp
277a0 65 63 74 69 76 65 6c 79 2e 20 54 68 65 0a 2a 2a  ectively. The.**
277b0 20 73 71 6c 69 74 65 20 76 65 72 73 69 6f 6e 73   sqlite versions
277c0 20 6f 6e 6c 79 20 77 6f 72 6b 20 66 6f 72 20 41   only work for A
277d0 53 43 49 49 20 63 68 61 72 61 63 74 65 72 73 2c  SCII characters,
277e0 20 72 65 67 61 72 64 6c 65 73 73 20 6f 66 20 6c   regardless of l
277f0 6f 63 61 6c 65 2e 0a 2a 2f 0a 23 69 66 64 65 66  ocale..*/.#ifdef
27800 20 53 51 4c 49 54 45 5f 41 53 43 49 49 0a 23 20   SQLITE_ASCII.# 
27810 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54 6f  define sqlite3To
27820 75 70 70 65 72 28 78 29 20 20 28 28 78 29 26 7e  upper(x)  ((x)&~
27830 28 73 71 6c 69 74 65 33 43 74 79 70 65 4d 61 70  (sqlite3CtypeMap
27840 5b 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29  [(unsigned char)
27850 28 78 29 5d 26 30 78 32 30 29 29 0a 23 20 64 65  (x)]&0x20)).# de
27860 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 73 70  fine sqlite3Issp
27870 61 63 65 28 78 29 20 20 20 28 73 71 6c 69 74 65  ace(x)   (sqlite
27880 33 43 74 79 70 65 4d 61 70 5b 28 75 6e 73 69 67  3CtypeMap[(unsig
27890 6e 65 64 20 63 68 61 72 29 28 78 29 5d 26 30 78  ned char)(x)]&0x
278a0 30 31 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  01).# define sql
278b0 69 74 65 33 49 73 61 6c 6e 75 6d 28 78 29 20 20  ite3Isalnum(x)  
278c0 20 28 73 71 6c 69 74 65 33 43 74 79 70 65 4d 61   (sqlite3CtypeMa
278d0 70 5b 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72  p[(unsigned char
278e0 29 28 78 29 5d 26 30 78 30 36 29 0a 23 20 64 65  )(x)]&0x06).# de
278f0 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 61 6c  fine sqlite3Isal
27900 70 68 61 28 78 29 20 20 20 28 73 71 6c 69 74 65  pha(x)   (sqlite
27910 33 43 74 79 70 65 4d 61 70 5b 28 75 6e 73 69 67  3CtypeMap[(unsig
27920 6e 65 64 20 63 68 61 72 29 28 78 29 5d 26 30 78  ned char)(x)]&0x
27930 30 32 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  02).# define sql
27940 69 74 65 33 49 73 64 69 67 69 74 28 78 29 20 20  ite3Isdigit(x)  
27950 20 28 73 71 6c 69 74 65 33 43 74 79 70 65 4d 61   (sqlite3CtypeMa
27960 70 5b 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72  p[(unsigned char
27970 29 28 78 29 5d 26 30 78 30 34 29 0a 23 20 64 65  )(x)]&0x04).# de
27980 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 78 64  fine sqlite3Isxd
27990 69 67 69 74 28 78 29 20 20 28 73 71 6c 69 74 65  igit(x)  (sqlite
279a0 33 43 74 79 70 65 4d 61 70 5b 28 75 6e 73 69 67  3CtypeMap[(unsig
279b0 6e 65 64 20 63 68 61 72 29 28 78 29 5d 26 30 78  ned char)(x)]&0x
279c0 30 38 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  08).# define sql
279d0 69 74 65 33 54 6f 6c 6f 77 65 72 28 78 29 20 20  ite3Tolower(x)  
279e0 20 28 73 71 6c 69 74 65 33 55 70 70 65 72 54 6f   (sqlite3UpperTo
279f0 4c 6f 77 65 72 5b 28 75 6e 73 69 67 6e 65 64 20  Lower[(unsigned 
27a00 63 68 61 72 29 28 78 29 5d 29 0a 23 20 64 65 66  char)(x)]).# def
27a10 69 6e 65 20 73 71 6c 69 74 65 33 49 73 71 75 6f  ine sqlite3Isquo
27a20 74 65 28 78 29 20 20 20 28 73 71 6c 69 74 65 33  te(x)   (sqlite3
27a30 43 74 79 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e  CtypeMap[(unsign
27a40 65 64 20 63 68 61 72 29 28 78 29 5d 26 30 78 38  ed char)(x)]&0x8
27a50 30 29 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e  0).#else.# defin
27a60 65 20 73 71 6c 69 74 65 33 54 6f 75 70 70 65 72  e sqlite3Toupper
27a70 28 78 29 20 20 20 74 6f 75 70 70 65 72 28 28 75  (x)   toupper((u
27a80 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29  nsigned char)(x)
27a90 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
27aa0 65 33 49 73 73 70 61 63 65 28 78 29 20 20 20 69  e3Isspace(x)   i
27ab0 73 73 70 61 63 65 28 28 75 6e 73 69 67 6e 65 64  sspace((unsigned
27ac0 20 63 68 61 72 29 28 78 29 29 0a 23 20 64 65 66   char)(x)).# def
27ad0 69 6e 65 20 73 71 6c 69 74 65 33 49 73 61 6c 6e  ine sqlite3Isaln
27ae0 75 6d 28 78 29 20 20 20 69 73 61 6c 6e 75 6d 28  um(x)   isalnum(
27af0 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28  (unsigned char)(
27b00 78 29 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  x)).# define sql
27b10 69 74 65 33 49 73 61 6c 70 68 61 28 78 29 20 20  ite3Isalpha(x)  
27b20 20 69 73 61 6c 70 68 61 28 28 75 6e 73 69 67 6e   isalpha((unsign
27b30 65 64 20 63 68 61 72 29 28 78 29 29 0a 23 20 64  ed char)(x)).# d
27b40 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 64  efine sqlite3Isd
27b50 69 67 69 74 28 78 29 20 20 20 69 73 64 69 67 69  igit(x)   isdigi
27b60 74 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72  t((unsigned char
27b70 29 28 78 29 29 0a 23 20 64 65 66 69 6e 65 20 73  )(x)).# define s
27b80 71 6c 69 74 65 33 49 73 78 64 69 67 69 74 28 78  qlite3Isxdigit(x
27b90 29 20 20 69 73 78 64 69 67 69 74 28 28 75 6e 73  )  isxdigit((uns
27ba0 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 29 0a  igned char)(x)).
27bb0 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
27bc0 54 6f 6c 6f 77 65 72 28 78 29 20 20 20 74 6f 6c  Tolower(x)   tol
27bd0 6f 77 65 72 28 28 75 6e 73 69 67 6e 65 64 20 63  ower((unsigned c
27be0 68 61 72 29 28 78 29 29 0a 23 20 64 65 66 69 6e  har)(x)).# defin
27bf0 65 20 73 71 6c 69 74 65 33 49 73 71 75 6f 74 65  e sqlite3Isquote
27c00 28 78 29 20 20 20 28 28 78 29 3d 3d 27 22 27 7c  (x)   ((x)=='"'|
27c10 7c 28 78 29 3d 3d 27 5c 27 27 7c 7c 28 78 29 3d  |(x)=='\''||(x)=
27c20 3d 27 5b 27 7c 7c 28 78 29 3d 3d 27 60 27 29 0a  ='['||(x)=='`').
27c30 23 65 6e 64 69 66 0a 69 6e 74 20 73 71 6c 69 74  #endif.int sqlit
27c40 65 33 49 73 49 64 43 68 61 72 28 75 38 29 3b 0a  e3IsIdChar(u8);.
27c50 0a 2f 2a 0a 2a 2a 20 49 6e 74 65 72 6e 61 6c 20  ./*.** Internal 
27c60 66 75 6e 63 74 69 6f 6e 20 70 72 6f 74 6f 74 79  function prototy
27c70 70 65 73 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74  pes.*/.int sqlit
27c80 65 33 53 74 72 49 43 6d 70 28 63 6f 6e 73 74 20  e3StrICmp(const 
27c90 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72  char*,const char
27ca0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53  *);.int sqlite3S
27cb0 74 72 6c 65 6e 33 30 28 63 6f 6e 73 74 20 63 68  trlen30(const ch
27cc0 61 72 2a 29 3b 0a 23 64 65 66 69 6e 65 20 73 71  ar*);.#define sq
27cd0 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 4e 4e 28  lite3Strlen30NN(
27ce0 43 29 20 28 73 74 72 6c 65 6e 28 43 29 26 30 78  C) (strlen(C)&0x
27cf0 33 66 66 66 66 66 66 66 29 0a 63 68 61 72 20 2a  3fffffff).char *
27d00 73 71 6c 69 74 65 33 43 6f 6c 75 6d 6e 54 79 70  sqlite3ColumnTyp
27d10 65 28 43 6f 6c 75 6d 6e 2a 2c 63 68 61 72 2a 29  e(Column*,char*)
27d20 3b 0a 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65  ;.#define sqlite
27d30 33 53 74 72 4e 49 43 6d 70 20 73 71 6c 69 74 65  3StrNICmp sqlite
27d40 33 5f 73 74 72 6e 69 63 6d 70 0a 0a 69 6e 74 20  3_strnicmp..int 
27d50 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 49 6e 69  sqlite3MallocIni
27d60 74 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20 73 71  t(void);.void sq
27d70 6c 69 74 65 33 4d 61 6c 6c 6f 63 45 6e 64 28 76  lite3MallocEnd(v
27d80 6f 69 64 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69  oid);.void *sqli
27d90 74 65 33 4d 61 6c 6c 6f 63 28 75 36 34 29 3b 0a  te3Malloc(u64);.
27da0 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 4d 61 6c  void *sqlite3Mal
27db0 6c 6f 63 5a 65 72 6f 28 75 36 34 29 3b 0a 76 6f  locZero(u64);.vo
27dc0 69 64 20 2a 73 71 6c 69 74 65 33 44 62 4d 61 6c  id *sqlite3DbMal
27dd0 6c 6f 63 5a 65 72 6f 28 73 71 6c 69 74 65 33 2a  locZero(sqlite3*
27de0 2c 20 75 36 34 29 3b 0a 76 6f 69 64 20 2a 73 71  , u64);.void *sq
27df0 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 52 61 77  lite3DbMallocRaw
27e00 28 73 71 6c 69 74 65 33 2a 2c 20 75 36 34 29 3b  (sqlite3*, u64);
27e10 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 44 62  .void *sqlite3Db
27e20 4d 61 6c 6c 6f 63 52 61 77 4e 4e 28 73 71 6c 69  MallocRawNN(sqli
27e30 74 65 33 2a 2c 20 75 36 34 29 3b 0a 63 68 61 72  te3*, u64);.char
27e40 20 2a 73 71 6c 69 74 65 33 44 62 53 74 72 44 75   *sqlite3DbStrDu
27e50 70 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74  p(sqlite3*,const
27e60 20 63 68 61 72 2a 29 3b 0a 63 68 61 72 20 2a 73   char*);.char *s
27e70 71 6c 69 74 65 33 44 62 53 74 72 4e 44 75 70 28  qlite3DbStrNDup(
27e80 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63  sqlite3*,const c
27e90 68 61 72 2a 2c 20 75 36 34 29 3b 0a 63 68 61 72  har*, u64);.char
27ea0 20 2a 73 71 6c 69 74 65 33 44 62 53 70 61 6e 44   *sqlite3DbSpanD
27eb0 75 70 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73  up(sqlite3*,cons
27ec0 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68  t char*,const ch
27ed0 61 72 2a 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69  ar*);.void *sqli
27ee0 74 65 33 52 65 61 6c 6c 6f 63 28 76 6f 69 64 2a  te3Realloc(void*
27ef0 2c 20 75 36 34 29 3b 0a 76 6f 69 64 20 2a 73 71  , u64);.void *sq
27f00 6c 69 74 65 33 44 62 52 65 61 6c 6c 6f 63 4f 72  lite3DbReallocOr
27f10 46 72 65 65 28 73 71 6c 69 74 65 33 20 2a 2c 20  Free(sqlite3 *, 
27f20 76 6f 69 64 20 2a 2c 20 75 36 34 29 3b 0a 76 6f  void *, u64);.vo
27f30 69 64 20 2a 73 71 6c 69 74 65 33 44 62 52 65 61  id *sqlite3DbRea
27f40 6c 6c 6f 63 28 73 71 6c 69 74 65 33 20 2a 2c 20  lloc(sqlite3 *, 
27f50 76 6f 69 64 20 2a 2c 20 75 36 34 29 3b 0a 76 6f  void *, u64);.vo
27f60 69 64 20 73 71 6c 69 74 65 33 44 62 46 72 65 65  id sqlite3DbFree
27f70 28 73 71 6c 69 74 65 33 2a 2c 20 76 6f 69 64 2a  (sqlite3*, void*
27f80 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44  );.void sqlite3D
27f90 62 46 72 65 65 4e 4e 28 73 71 6c 69 74 65 33 2a  bFreeNN(sqlite3*
27fa0 2c 20 76 6f 69 64 2a 29 3b 0a 69 6e 74 20 73 71  , void*);.int sq
27fb0 6c 69 74 65 33 4d 61 6c 6c 6f 63 53 69 7a 65 28  lite3MallocSize(
27fc0 76 6f 69 64 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  void*);.int sqli
27fd0 74 65 33 44 62 4d 61 6c 6c 6f 63 53 69 7a 65 28  te3DbMallocSize(
27fe0 73 71 6c 69 74 65 33 2a 2c 20 76 6f 69 64 2a 29  sqlite3*, void*)
27ff0 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 50  ;.void *sqlite3P
28000 61 67 65 4d 61 6c 6c 6f 63 28 69 6e 74 29 3b 0a  ageMalloc(int);.
28010 76 6f 69 64 20 73 71 6c 69 74 65 33 50 61 67 65  void sqlite3Page
28020 46 72 65 65 28 76 6f 69 64 2a 29 3b 0a 76 6f 69  Free(void*);.voi
28030 64 20 73 71 6c 69 74 65 33 4d 65 6d 53 65 74 44  d sqlite3MemSetD
28040 65 66 61 75 6c 74 28 76 6f 69 64 29 3b 0a 23 69  efault(void);.#i
28050 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 55 4e 54  fndef SQLITE_UNT
28060 45 53 54 41 42 4c 45 0a 76 6f 69 64 20 73 71 6c  ESTABLE.void sql
28070 69 74 65 33 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63  ite3BenignMalloc
28080 48 6f 6f 6b 73 28 76 6f 69 64 20 28 2a 29 28 76  Hooks(void (*)(v
28090 6f 69 64 29 2c 20 76 6f 69 64 20 28 2a 29 28 76  oid), void (*)(v
280a0 6f 69 64 29 29 3b 0a 23 65 6e 64 69 66 0a 69 6e  oid));.#endif.in
280b0 74 20 73 71 6c 69 74 65 33 48 65 61 70 4e 65 61  t sqlite3HeapNea
280c0 72 6c 79 46 75 6c 6c 28 76 6f 69 64 29 3b 0a 0a  rlyFull(void);..
280d0 2f 2a 0a 2a 2a 20 4f 6e 20 73 79 73 74 65 6d 73  /*.** On systems
280e0 20 77 69 74 68 20 61 6d 70 6c 65 20 73 74 61 63   with ample stac
280f0 6b 20 73 70 61 63 65 20 61 6e 64 20 74 68 61 74  k space and that
28100 20 73 75 70 70 6f 72 74 20 61 6c 6c 6f 63 61 28   support alloca(
28110 29 2c 20 6d 61 6b 65 0a 2a 2a 20 75 73 65 20 6f  ), make.** use o
28120 66 20 61 6c 6c 6f 63 61 28 29 20 74 6f 20 6f 62  f alloca() to ob
28130 74 61 69 6e 20 73 70 61 63 65 20 66 6f 72 20 6c  tain space for l
28140 61 72 67 65 20 61 75 74 6f 6d 61 74 69 63 20 6f  arge automatic o
28150 62 6a 65 63 74 73 2e 20 20 42 79 20 64 65 66 61  bjects.  By defa
28160 75 6c 74 2c 0a 2a 2a 20 6f 62 74 61 69 6e 20 73  ult,.** obtain s
28170 70 61 63 65 20 66 72 6f 6d 20 6d 61 6c 6c 6f 63  pace from malloc
28180 28 29 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 61 6c  ()..**.** The al
28190 6c 6f 63 61 28 29 20 72 6f 75 74 69 6e 65 20 6e  loca() routine n
281a0 65 76 65 72 20 72 65 74 75 72 6e 73 20 4e 55 4c  ever returns NUL
281b0 4c 2e 20 20 54 68 69 73 20 77 69 6c 6c 20 63 61  L.  This will ca
281c0 75 73 65 20 63 6f 64 65 20 70 61 74 68 73 0a 2a  use code paths.*
281d0 2a 20 74 68 61 74 20 64 65 61 6c 20 77 69 74 68  * that deal with
281e0 20 73 71 6c 69 74 65 33 53 74 61 63 6b 41 6c 6c   sqlite3StackAll
281f0 6f 63 28 29 20 66 61 69 6c 75 72 65 73 20 74 6f  oc() failures to
28200 20 62 65 20 75 6e 72 65 61 63 68 61 62 6c 65 2e   be unreachable.
28210 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54  .*/.#ifdef SQLIT
28220 45 5f 55 53 45 5f 41 4c 4c 4f 43 41 0a 23 20 64  E_USE_ALLOCA.# d
28230 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74 61  efine sqlite3Sta
28240 63 6b 41 6c 6c 6f 63 52 61 77 28 44 2c 4e 29 20  ckAllocRaw(D,N) 
28250 20 20 61 6c 6c 6f 63 61 28 4e 29 0a 23 20 64 65    alloca(N).# de
28260 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74 61 63  fine sqlite3Stac
28270 6b 41 6c 6c 6f 63 5a 65 72 6f 28 44 2c 4e 29 20  kAllocZero(D,N) 
28280 20 6d 65 6d 73 65 74 28 61 6c 6c 6f 63 61 28 4e   memset(alloca(N
28290 29 2c 20 30 2c 20 4e 29 0a 23 20 64 65 66 69 6e  ), 0, N).# defin
282a0 65 20 73 71 6c 69 74 65 33 53 74 61 63 6b 46 72  e sqlite3StackFr
282b0 65 65 28 44 2c 50 29 0a 23 65 6c 73 65 0a 23 20  ee(D,P).#else.# 
282c0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74  define sqlite3St
282d0 61 63 6b 41 6c 6c 6f 63 52 61 77 28 44 2c 4e 29  ackAllocRaw(D,N)
282e0 20 20 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c     sqlite3DbMall
282f0 6f 63 52 61 77 28 44 2c 4e 29 0a 23 20 64 65 66  ocRaw(D,N).# def
28300 69 6e 65 20 73 71 6c 69 74 65 33 53 74 61 63 6b  ine sqlite3Stack
28310 41 6c 6c 6f 63 5a 65 72 6f 28 44 2c 4e 29 20 20  AllocZero(D,N)  
28320 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 5a  sqlite3DbMallocZ
28330 65 72 6f 28 44 2c 4e 29 0a 23 20 64 65 66 69 6e  ero(D,N).# defin
28340 65 20 73 71 6c 69 74 65 33 53 74 61 63 6b 46 72  e sqlite3StackFr
28350 65 65 28 44 2c 50 29 20 20 20 20 20 20 20 73 71  ee(D,P)       sq
28360 6c 69 74 65 33 44 62 46 72 65 65 28 44 2c 50 29  lite3DbFree(D,P)
28370 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 44 6f 20 6e  .#endif../* Do n
28380 6f 74 20 61 6c 6c 6f 77 20 62 6f 74 68 20 4d 45  ot allow both ME
28390 4d 53 59 53 35 20 61 6e 64 20 4d 45 4d 53 59 53  MSYS5 and MEMSYS
283a0 33 20 74 6f 20 62 65 20 64 65 66 69 6e 65 64 20  3 to be defined 
283b0 74 6f 67 65 74 68 65 72 2e 20 20 49 66 20 74 68  together.  If th
283c0 65 79 0a 2a 2a 20 61 72 65 2c 20 64 69 73 61 62  ey.** are, disab
283d0 6c 65 20 4d 45 4d 53 59 53 33 0a 2a 2f 0a 23 69  le MEMSYS3.*/.#i
283e0 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  fdef SQLITE_ENAB
283f0 4c 45 5f 4d 45 4d 53 59 53 35 0a 63 6f 6e 73 74  LE_MEMSYS5.const
28400 20 73 71 6c 69 74 65 33 5f 6d 65 6d 5f 6d 65 74   sqlite3_mem_met
28410 68 6f 64 73 20 2a 73 71 6c 69 74 65 33 4d 65 6d  hods *sqlite3Mem
28420 47 65 74 4d 65 6d 73 79 73 35 28 76 6f 69 64 29  GetMemsys5(void)
28430 3b 0a 23 75 6e 64 65 66 20 53 51 4c 49 54 45 5f  ;.#undef SQLITE_
28440 45 4e 41 42 4c 45 5f 4d 45 4d 53 59 53 33 0a 23  ENABLE_MEMSYS3.#
28450 65 6e 64 69 66 0a 23 69 66 64 65 66 20 53 51 4c  endif.#ifdef SQL
28460 49 54 45 5f 45 4e 41 42 4c 45 5f 4d 45 4d 53 59  ITE_ENABLE_MEMSY
28470 53 33 0a 63 6f 6e 73 74 20 73 71 6c 69 74 65 33  S3.const sqlite3
28480 5f 6d 65 6d 5f 6d 65 74 68 6f 64 73 20 2a 73 71  _mem_methods *sq
28490 6c 69 74 65 33 4d 65 6d 47 65 74 4d 65 6d 73 79  lite3MemGetMemsy
284a0 73 33 28 76 6f 69 64 29 3b 0a 23 65 6e 64 69 66  s3(void);.#endif
284b0 0a 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  ...#ifndef SQLIT
284c0 45 5f 4d 55 54 45 58 5f 4f 4d 49 54 0a 20 20 73  E_MUTEX_OMIT.  s
284d0 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 6d 65 74  qlite3_mutex_met
284e0 68 6f 64 73 20 63 6f 6e 73 74 20 2a 73 71 6c 69  hods const *sqli
284f0 74 65 33 44 65 66 61 75 6c 74 4d 75 74 65 78 28  te3DefaultMutex(
28500 76 6f 69 64 29 3b 0a 20 20 73 71 6c 69 74 65 33  void);.  sqlite3
28510 5f 6d 75 74 65 78 5f 6d 65 74 68 6f 64 73 20 63  _mutex_methods c
28520 6f 6e 73 74 20 2a 73 71 6c 69 74 65 33 4e 6f 6f  onst *sqlite3Noo
28530 70 4d 75 74 65 78 28 76 6f 69 64 29 3b 0a 20 20  pMutex(void);.  
28540 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 20 2a 73  sqlite3_mutex *s
28550 71 6c 69 74 65 33 4d 75 74 65 78 41 6c 6c 6f 63  qlite3MutexAlloc
28560 28 69 6e 74 29 3b 0a 20 20 69 6e 74 20 73 71 6c  (int);.  int sql
28570 69 74 65 33 4d 75 74 65 78 49 6e 69 74 28 76 6f  ite3MutexInit(vo
28580 69 64 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74  id);.  int sqlit
28590 65 33 4d 75 74 65 78 45 6e 64 28 76 6f 69 64 29  e3MutexEnd(void)
285a0 3b 0a 23 65 6e 64 69 66 0a 23 69 66 20 21 64 65  ;.#endif.#if !de
285b0 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4d 55 54  fined(SQLITE_MUT
285c0 45 58 5f 4f 4d 49 54 29 20 26 26 20 21 64 65 66  EX_OMIT) && !def
285d0 69 6e 65 64 28 53 51 4c 49 54 45 5f 4d 55 54 45  ined(SQLITE_MUTE
285e0 58 5f 4e 4f 4f 50 29 0a 20 20 76 6f 69 64 20 73  X_NOOP).  void s
285f0 71 6c 69 74 65 33 4d 65 6d 6f 72 79 42 61 72 72  qlite3MemoryBarr
28600 69 65 72 28 76 6f 69 64 29 3b 0a 23 65 6c 73 65  ier(void);.#else
28610 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
28620 33 4d 65 6d 6f 72 79 42 61 72 72 69 65 72 28 29  3MemoryBarrier()
28630 0a 23 65 6e 64 69 66 0a 0a 73 71 6c 69 74 65 33  .#endif..sqlite3
28640 5f 69 6e 74 36 34 20 73 71 6c 69 74 65 33 53 74  _int64 sqlite3St
28650 61 74 75 73 56 61 6c 75 65 28 69 6e 74 29 3b 0a  atusValue(int);.
28660 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74 61 74  void sqlite3Stat
28670 75 73 55 70 28 69 6e 74 2c 20 69 6e 74 29 3b 0a  usUp(int, int);.
28680 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74 61 74  void sqlite3Stat
28690 75 73 44 6f 77 6e 28 69 6e 74 2c 20 69 6e 74 29  usDown(int, int)
286a0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74  ;.void sqlite3St
286b0 61 74 75 73 48 69 67 68 77 61 74 65 72 28 69 6e  atusHighwater(in
286c0 74 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c  t, int);.int sql
286d0 69 74 65 33 4c 6f 6f 6b 61 73 69 64 65 55 73 65  ite3LookasideUse
286e0 64 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2a 29  d(sqlite3*,int*)
286f0 3b 0a 0a 2f 2a 20 41 63 63 65 73 73 20 74 6f 20  ;../* Access to 
28700 6d 75 74 65 78 65 73 20 75 73 65 64 20 62 79 20  mutexes used by 
28710 73 71 6c 69 74 65 33 5f 73 74 61 74 75 73 28 29  sqlite3_status()
28720 20 2a 2f 0a 73 71 6c 69 74 65 33 5f 6d 75 74 65   */.sqlite3_mute
28730 78 20 2a 73 71 6c 69 74 65 33 50 63 61 63 68 65  x *sqlite3Pcache
28740 31 4d 75 74 65 78 28 76 6f 69 64 29 3b 0a 73 71  1Mutex(void);.sq
28750 6c 69 74 65 33 5f 6d 75 74 65 78 20 2a 73 71 6c  lite3_mutex *sql
28760 69 74 65 33 4d 61 6c 6c 6f 63 4d 75 74 65 78 28  ite3MallocMutex(
28770 76 6f 69 64 29 3b 0a 0a 23 69 66 20 64 65 66 69  void);..#if defi
28780 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c  ned(SQLITE_ENABL
28790 45 5f 4d 55 4c 54 49 54 48 52 45 41 44 45 44 5f  E_MULTITHREADED_
287a0 43 48 45 43 4b 53 29 20 26 26 20 21 64 65 66 69  CHECKS) && !defi
287b0 6e 65 64 28 53 51 4c 49 54 45 5f 4d 55 54 45 58  ned(SQLITE_MUTEX
287c0 5f 4f 4d 49 54 29 0a 76 6f 69 64 20 73 71 6c 69  _OMIT).void sqli
287d0 74 65 33 4d 75 74 65 78 57 61 72 6e 4f 6e 43 6f  te3MutexWarnOnCo
287e0 6e 74 65 6e 74 69 6f 6e 28 73 71 6c 69 74 65 33  ntention(sqlite3
287f0 5f 6d 75 74 65 78 2a 29 3b 0a 23 65 6c 73 65 0a  _mutex*);.#else.
28800 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
28810 4d 75 74 65 78 57 61 72 6e 4f 6e 43 6f 6e 74 65  MutexWarnOnConte
28820 6e 74 69 6f 6e 28 78 29 0a 23 65 6e 64 69 66 0a  ntion(x).#endif.
28830 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
28840 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f  OMIT_FLOATING_PO
28850 49 4e 54 0a 20 20 69 6e 74 20 73 71 6c 69 74 65  INT.  int sqlite
28860 33 49 73 4e 61 4e 28 64 6f 75 62 6c 65 29 3b 0a  3IsNaN(double);.
28870 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73  #else.# define s
28880 71 6c 69 74 65 33 49 73 4e 61 4e 28 58 29 20 20  qlite3IsNaN(X)  
28890 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  0.#endif../*.** 
288a0 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  An instance of t
288b0 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72  he following str
288c0 75 63 74 75 72 65 20 68 6f 6c 64 73 20 69 6e 66  ucture holds inf
288d0 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 53  ormation about S
288e0 51 4c 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 73 20  QL.** functions 
288f0 61 72 67 75 6d 65 6e 74 73 20 74 68 61 74 20 61  arguments that a
28900 72 65 20 74 68 65 20 70 61 72 61 6d 65 74 65 72  re the parameter
28910 73 20 74 6f 20 74 68 65 20 70 72 69 6e 74 66 28  s to the printf(
28920 29 20 66 75 6e 63 74 69 6f 6e 2e 0a 2a 2f 0a 73  ) function..*/.s
28930 74 72 75 63 74 20 50 72 69 6e 74 66 41 72 67 75  truct PrintfArgu
28940 6d 65 6e 74 73 20 7b 0a 20 20 69 6e 74 20 6e 41  ments {.  int nA
28950 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  rg;             
28960 20 20 20 2f 2a 20 54 6f 74 61 6c 20 6e 75 6d 62     /* Total numb
28970 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20  er of arguments 
28980 2a 2f 0a 20 20 69 6e 74 20 6e 55 73 65 64 3b 20  */.  int nUsed; 
28990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
289a0 20 4e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d   Number of argum
289b0 65 6e 74 73 20 75 73 65 64 20 73 6f 20 66 61 72  ents used so far
289c0 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 76 61   */.  sqlite3_va
289d0 6c 75 65 20 2a 2a 61 70 41 72 67 3b 20 20 20 2f  lue **apArg;   /
289e0 2a 20 54 68 65 20 61 72 67 75 6d 65 6e 74 20 76  * The argument v
289f0 61 6c 75 65 73 20 2a 2f 0a 7d 3b 0a 0a 63 68 61  alues */.};..cha
28a00 72 20 2a 73 71 6c 69 74 65 33 4d 50 72 69 6e 74  r *sqlite3MPrint
28a10 66 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74  f(sqlite3*,const
28a20 20 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 63 68   char*, ...);.ch
28a30 61 72 20 2a 73 71 6c 69 74 65 33 56 4d 50 72 69  ar *sqlite3VMPri
28a40 6e 74 66 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e  ntf(sqlite3*,con
28a50 73 74 20 63 68 61 72 2a 2c 20 76 61 5f 6c 69 73  st char*, va_lis
28a60 74 29 3b 0a 23 69 66 20 64 65 66 69 6e 65 64 28  t);.#if defined(
28a70 53 51 4c 49 54 45 5f 44 45 42 55 47 29 20 7c 7c  SQLITE_DEBUG) ||
28a80 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
28a90 48 41 56 45 5f 4f 53 5f 54 52 41 43 45 29 0a 20  HAVE_OS_TRACE). 
28aa0 20 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65 62   void sqlite3Deb
28ab0 75 67 50 72 69 6e 74 66 28 63 6f 6e 73 74 20 63  ugPrintf(const c
28ac0 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 23 65 6e 64  har*, ...);.#end
28ad0 69 66 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53  if.#if defined(S
28ae0 51 4c 49 54 45 5f 54 45 53 54 29 0a 20 20 76 6f  QLITE_TEST).  vo
28af0 69 64 20 2a 73 71 6c 69 74 65 33 54 65 73 74 54  id *sqlite3TestT
28b00 65 78 74 54 6f 50 74 72 28 63 6f 6e 73 74 20 63  extToPtr(const c
28b10 68 61 72 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 23  har*);.#endif..#
28b20 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  if defined(SQLIT
28b30 45 5f 44 45 42 55 47 29 0a 20 20 76 6f 69 64 20  E_DEBUG).  void 
28b40 73 71 6c 69 74 65 33 54 72 65 65 56 69 65 77 45  sqlite3TreeViewE
28b50 78 70 72 28 54 72 65 65 56 69 65 77 2a 2c 20 63  xpr(TreeView*, c
28b60 6f 6e 73 74 20 45 78 70 72 2a 2c 20 75 38 29 3b  onst Expr*, u8);
28b70 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 54  .  void sqlite3T
28b80 72 65 65 56 69 65 77 42 61 72 65 45 78 70 72 4c  reeViewBareExprL
28b90 69 73 74 28 54 72 65 65 56 69 65 77 2a 2c 20 63  ist(TreeView*, c
28ba0 6f 6e 73 74 20 45 78 70 72 4c 69 73 74 2a 2c 20  onst ExprList*, 
28bb0 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20 20  const char*);.  
28bc0 76 6f 69 64 20 73 71 6c 69 74 65 33 54 72 65 65  void sqlite3Tree
28bd0 56 69 65 77 45 78 70 72 4c 69 73 74 28 54 72 65  ViewExprList(Tre
28be0 65 56 69 65 77 2a 2c 20 63 6f 6e 73 74 20 45 78  eView*, const Ex
28bf0 70 72 4c 69 73 74 2a 2c 20 75 38 2c 20 63 6f 6e  prList*, u8, con
28c00 73 74 20 63 68 61 72 2a 29 3b 0a 20 20 76 6f 69  st char*);.  voi
28c10 64 20 73 71 6c 69 74 65 33 54 72 65 65 56 69 65  d sqlite3TreeVie
28c20 77 53 72 63 4c 69 73 74 28 54 72 65 65 56 69 65  wSrcList(TreeVie
28c30 77 2a 2c 20 63 6f 6e 73 74 20 53 72 63 4c 69 73  w*, const SrcLis
28c40 74 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69  t*);.  void sqli
28c50 74 65 33 54 72 65 65 56 69 65 77 53 65 6c 65 63  te3TreeViewSelec
28c60 74 28 54 72 65 65 56 69 65 77 2a 2c 20 63 6f 6e  t(TreeView*, con
28c70 73 74 20 53 65 6c 65 63 74 2a 2c 20 75 38 29 3b  st Select*, u8);
28c80 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 54  .  void sqlite3T
28c90 72 65 65 56 69 65 77 57 69 74 68 28 54 72 65 65  reeViewWith(Tree
28ca0 56 69 65 77 2a 2c 20 63 6f 6e 73 74 20 57 69 74  View*, const Wit
28cb0 68 2a 2c 20 75 38 29 3b 0a 23 69 66 6e 64 65 66  h*, u8);.#ifndef
28cc0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 49 4e   SQLITE_OMIT_WIN
28cd0 44 4f 57 46 55 4e 43 0a 20 20 76 6f 69 64 20 73  DOWFUNC.  void s
28ce0 71 6c 69 74 65 33 54 72 65 65 56 69 65 77 57 69  qlite3TreeViewWi
28cf0 6e 64 6f 77 28 54 72 65 65 56 69 65 77 2a 2c 20  ndow(TreeView*, 
28d00 63 6f 6e 73 74 20 57 69 6e 64 6f 77 2a 2c 20 75  const Window*, u
28d10 38 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  8);.  void sqlit
28d20 65 33 54 72 65 65 56 69 65 77 57 69 6e 46 75 6e  e3TreeViewWinFun
28d30 63 28 54 72 65 65 56 69 65 77 2a 2c 20 63 6f 6e  c(TreeView*, con
28d40 73 74 20 57 69 6e 64 6f 77 2a 2c 20 75 38 29 3b  st Window*, u8);
28d50 0a 23 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 0a  .#endif.#endif..
28d60 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 65 74  .void sqlite3Set
28d70 53 74 72 69 6e 67 28 63 68 61 72 20 2a 2a 2c 20  String(char **, 
28d80 73 71 6c 69 74 65 33 2a 2c 20 63 6f 6e 73 74 20  sqlite3*, const 
28d90 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  char*);.void sql
28da0 69 74 65 33 45 72 72 6f 72 4d 73 67 28 50 61 72  ite3ErrorMsg(Par
28db0 73 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  se*, const char*
28dc0 2c 20 2e 2e 2e 29 3b 0a 76 6f 69 64 20 73 71 6c  , ...);.void sql
28dd0 69 74 65 33 44 65 71 75 6f 74 65 28 63 68 61 72  ite3Dequote(char
28de0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
28df0 54 6f 6b 65 6e 49 6e 69 74 28 54 6f 6b 65 6e 2a  TokenInit(Token*
28e00 2c 63 68 61 72 2a 29 3b 0a 69 6e 74 20 73 71 6c  ,char*);.int sql
28e10 69 74 65 33 4b 65 79 77 6f 72 64 43 6f 64 65 28  ite3KeywordCode(
28e20 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63  const unsigned c
28e30 68 61 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20  har*, int);.int 
28e40 73 71 6c 69 74 65 33 52 75 6e 50 61 72 73 65 72  sqlite3RunParser
28e50 28 50 61 72 73 65 2a 2c 20 63 6f 6e 73 74 20 63  (Parse*, const c
28e60 68 61 72 2a 2c 20 63 68 61 72 20 2a 2a 29 3b 0a  har*, char **);.
28e70 76 6f 69 64 20 73 71 6c 69 74 65 33 46 69 6e 69  void sqlite3Fini
28e80 73 68 43 6f 64 69 6e 67 28 50 61 72 73 65 2a 29  shCoding(Parse*)
28e90 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 47 65 74  ;.int sqlite3Get
28ea0 54 65 6d 70 52 65 67 28 50 61 72 73 65 2a 29 3b  TempReg(Parse*);
28eb0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 6c  .void sqlite3Rel
28ec0 65 61 73 65 54 65 6d 70 52 65 67 28 50 61 72 73  easeTempReg(Pars
28ed0 65 2a 2c 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c  e*,int);.int sql
28ee0 69 74 65 33 47 65 74 54 65 6d 70 52 61 6e 67 65  ite3GetTempRange
28ef0 28 50 61 72 73 65 2a 2c 69 6e 74 29 3b 0a 76 6f  (Parse*,int);.vo
28f00 69 64 20 73 71 6c 69 74 65 33 52 65 6c 65 61 73  id sqlite3Releas
28f10 65 54 65 6d 70 52 61 6e 67 65 28 50 61 72 73 65  eTempRange(Parse
28f20 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a 76 6f 69 64  *,int,int);.void
28f30 20 73 71 6c 69 74 65 33 43 6c 65 61 72 54 65 6d   sqlite3ClearTem
28f40 70 52 65 67 43 61 63 68 65 28 50 61 72 73 65 2a  pRegCache(Parse*
28f50 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  );.#ifdef SQLITE
28f60 5f 44 45 42 55 47 0a 69 6e 74 20 73 71 6c 69 74  _DEBUG.int sqlit
28f70 65 33 4e 6f 54 65 6d 70 73 49 6e 52 61 6e 67 65  e3NoTempsInRange
28f80 28 50 61 72 73 65 2a 2c 69 6e 74 2c 69 6e 74 29  (Parse*,int,int)
28f90 3b 0a 23 65 6e 64 69 66 0a 45 78 70 72 20 2a 73  ;.#endif.Expr *s
28fa0 71 6c 69 74 65 33 45 78 70 72 41 6c 6c 6f 63 28  qlite3ExprAlloc(
28fb0 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e  sqlite3*,int,con
28fc0 73 74 20 54 6f 6b 65 6e 2a 2c 69 6e 74 29 3b 0a  st Token*,int);.
28fd0 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70  Expr *sqlite3Exp
28fe0 72 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 63  r(sqlite3*,int,c
28ff0 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69  onst char*);.voi
29000 64 20 73 71 6c 69 74 65 33 45 78 70 72 41 74 74  d sqlite3ExprAtt
29010 61 63 68 53 75 62 74 72 65 65 73 28 73 71 6c 69  achSubtrees(sqli
29020 74 65 33 2a 2c 45 78 70 72 2a 2c 45 78 70 72 2a  te3*,Expr*,Expr*
29030 2c 45 78 70 72 2a 29 3b 0a 45 78 70 72 20 2a 73  ,Expr*);.Expr *s
29040 71 6c 69 74 65 33 50 45 78 70 72 28 50 61 72 73  qlite3PExpr(Pars
29050 65 2a 2c 20 69 6e 74 2c 20 45 78 70 72 2a 2c 20  e*, int, Expr*, 
29060 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  Expr*);.void sql
29070 69 74 65 33 50 45 78 70 72 41 64 64 53 65 6c 65  ite3PExprAddSele
29080 63 74 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a  ct(Parse*, Expr*
29090 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 45 78 70 72  , Select*);.Expr
290a0 20 2a 73 71 6c 69 74 65 33 45 78 70 72 41 6e 64   *sqlite3ExprAnd
290b0 28 73 71 6c 69 74 65 33 2a 2c 45 78 70 72 2a 2c  (sqlite3*,Expr*,
290c0 20 45 78 70 72 2a 29 3b 0a 45 78 70 72 20 2a 73   Expr*);.Expr *s
290d0 71 6c 69 74 65 33 45 78 70 72 46 75 6e 63 74 69  qlite3ExprFuncti
290e0 6f 6e 28 50 61 72 73 65 2a 2c 45 78 70 72 4c 69  on(Parse*,ExprLi
290f0 73 74 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 69 6e 74  st*, Token*, int
29100 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
29110 78 70 72 41 73 73 69 67 6e 56 61 72 4e 75 6d 62  xprAssignVarNumb
29120 65 72 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a  er(Parse*, Expr*
29130 2c 20 75 33 32 29 3b 0a 76 6f 69 64 20 73 71 6c  , u32);.void sql
29140 69 74 65 33 45 78 70 72 44 65 6c 65 74 65 28 73  ite3ExprDelete(s
29150 71 6c 69 74 65 33 2a 2c 20 45 78 70 72 2a 29 3b  qlite3*, Expr*);
29160 0a 45 78 70 72 4c 69 73 74 20 2a 73 71 6c 69 74  .ExprList *sqlit
29170 65 33 45 78 70 72 4c 69 73 74 41 70 70 65 6e 64  e3ExprListAppend
29180 28 50 61 72 73 65 2a 2c 45 78 70 72 4c 69 73 74  (Parse*,ExprList
29190 2a 2c 45 78 70 72 2a 29 3b 0a 45 78 70 72 4c 69  *,Expr*);.ExprLi
291a0 73 74 20 2a 73 71 6c 69 74 65 33 45 78 70 72 4c  st *sqlite3ExprL
291b0 69 73 74 41 70 70 65 6e 64 56 65 63 74 6f 72 28  istAppendVector(
291c0 50 61 72 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a  Parse*,ExprList*
291d0 2c 49 64 4c 69 73 74 2a 2c 45 78 70 72 2a 29 3b  ,IdList*,Expr*);
291e0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
291f0 72 4c 69 73 74 53 65 74 53 6f 72 74 4f 72 64 65  rListSetSortOrde
29200 72 28 45 78 70 72 4c 69 73 74 2a 2c 69 6e 74 29  r(ExprList*,int)
29210 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
29220 70 72 4c 69 73 74 53 65 74 4e 61 6d 65 28 50 61  prListSetName(Pa
29230 72 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 54  rse*,ExprList*,T
29240 6f 6b 65 6e 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64  oken*,int);.void
29250 20 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74   sqlite3ExprList
29260 53 65 74 53 70 61 6e 28 50 61 72 73 65 2a 2c 45  SetSpan(Parse*,E
29270 78 70 72 4c 69 73 74 2a 2c 63 6f 6e 73 74 20 63  xprList*,const c
29280 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  har*,const char*
29290 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
292a0 78 70 72 4c 69 73 74 44 65 6c 65 74 65 28 73 71  xprListDelete(sq
292b0 6c 69 74 65 33 2a 2c 20 45 78 70 72 4c 69 73 74  lite3*, ExprList
292c0 2a 29 3b 0a 75 33 32 20 73 71 6c 69 74 65 33 45  *);.u32 sqlite3E
292d0 78 70 72 4c 69 73 74 46 6c 61 67 73 28 63 6f 6e  xprListFlags(con
292e0 73 74 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a 69  st ExprList*);.i
292f0 6e 74 20 73 71 6c 69 74 65 33 49 6e 69 74 28 73  nt sqlite3Init(s
29300 71 6c 69 74 65 33 2a 2c 20 63 68 61 72 2a 2a 29  qlite3*, char**)
29310 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 6e 69  ;.int sqlite3Ini
29320 74 43 61 6c 6c 62 61 63 6b 28 76 6f 69 64 2a 2c  tCallback(void*,
29330 20 69 6e 74 2c 20 63 68 61 72 2a 2a 2c 20 63 68   int, char**, ch
29340 61 72 2a 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ar**);.int sqlit
29350 65 33 49 6e 69 74 4f 6e 65 28 73 71 6c 69 74 65  e3InitOne(sqlite
29360 33 2a 2c 20 69 6e 74 2c 20 63 68 61 72 2a 2a 2c  3*, int, char**,
29370 20 75 33 32 29 3b 0a 76 6f 69 64 20 73 71 6c 69   u32);.void sqli
29380 74 65 33 50 72 61 67 6d 61 28 50 61 72 73 65 2a  te3Pragma(Parse*
29390 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 54  ,Token*,Token*,T
293a0 6f 6b 65 6e 2a 2c 69 6e 74 29 3b 0a 23 69 66 6e  oken*,int);.#ifn
293b0 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
293c0 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 4d 6f 64  VIRTUALTABLE.Mod
293d0 75 6c 65 20 2a 73 71 6c 69 74 65 33 50 72 61 67  ule *sqlite3Prag
293e0 6d 61 56 74 61 62 52 65 67 69 73 74 65 72 28 73  maVtabRegister(s
293f0 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68  qlite3*,const ch
29400 61 72 20 2a 7a 4e 61 6d 65 29 3b 0a 23 65 6e 64  ar *zName);.#end
29410 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52  if.void sqlite3R
29420 65 73 65 74 41 6c 6c 53 63 68 65 6d 61 73 4f 66  esetAllSchemasOf
29430 43 6f 6e 6e 65 63 74 69 6f 6e 28 73 71 6c 69 74  Connection(sqlit
29440 65 33 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  e3*);.void sqlit
29450 65 33 52 65 73 65 74 4f 6e 65 53 63 68 65 6d 61  e3ResetOneSchema
29460 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 29 3b 0a  (sqlite3*,int);.
29470 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6c 6c  void sqlite3Coll
29480 61 70 73 65 44 61 74 61 62 61 73 65 41 72 72 61  apseDatabaseArra
29490 79 28 73 71 6c 69 74 65 33 2a 29 3b 0a 76 6f 69  y(sqlite3*);.voi
294a0 64 20 73 71 6c 69 74 65 33 43 6f 6d 6d 69 74 49  d sqlite3CommitI
294b0 6e 74 65 72 6e 61 6c 43 68 61 6e 67 65 73 28 73  nternalChanges(s
294c0 71 6c 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20 73  qlite3*);.void s
294d0 71 6c 69 74 65 33 44 65 6c 65 74 65 43 6f 6c 75  qlite3DeleteColu
294e0 6d 6e 4e 61 6d 65 73 28 73 71 6c 69 74 65 33 2a  mnNames(sqlite3*
294f0 2c 54 61 62 6c 65 2a 29 3b 0a 69 6e 74 20 73 71  ,Table*);.int sq
29500 6c 69 74 65 33 43 6f 6c 75 6d 6e 73 46 72 6f 6d  lite3ColumnsFrom
29510 45 78 70 72 4c 69 73 74 28 50 61 72 73 65 2a 2c  ExprList(Parse*,
29520 45 78 70 72 4c 69 73 74 2a 2c 69 31 36 2a 2c 43  ExprList*,i16*,C
29530 6f 6c 75 6d 6e 2a 2a 29 3b 0a 76 6f 69 64 20 73  olumn**);.void s
29540 71 6c 69 74 65 33 53 65 6c 65 63 74 41 64 64 43  qlite3SelectAddC
29550 6f 6c 75 6d 6e 54 79 70 65 41 6e 64 43 6f 6c 6c  olumnTypeAndColl
29560 61 74 69 6f 6e 28 50 61 72 73 65 2a 2c 54 61 62  ation(Parse*,Tab
29570 6c 65 2a 2c 53 65 6c 65 63 74 2a 29 3b 0a 54 61  le*,Select*);.Ta
29580 62 6c 65 20 2a 73 71 6c 69 74 65 33 52 65 73 75  ble *sqlite3Resu
29590 6c 74 53 65 74 4f 66 53 65 6c 65 63 74 28 50 61  ltSetOfSelect(Pa
295a0 72 73 65 2a 2c 53 65 6c 65 63 74 2a 29 3b 0a 76  rse*,Select*);.v
295b0 6f 69 64 20 73 71 6c 69 74 65 33 4f 70 65 6e 4d  oid sqlite3OpenM
295c0 61 73 74 65 72 54 61 62 6c 65 28 50 61 72 73 65  asterTable(Parse
295d0 20 2a 2c 20 69 6e 74 29 3b 0a 49 6e 64 65 78 20   *, int);.Index 
295e0 2a 73 71 6c 69 74 65 33 50 72 69 6d 61 72 79 4b  *sqlite3PrimaryK
295f0 65 79 49 6e 64 65 78 28 54 61 62 6c 65 2a 29 3b  eyIndex(Table*);
29600 0a 69 31 36 20 73 71 6c 69 74 65 33 43 6f 6c 75  .i16 sqlite3Colu
29610 6d 6e 4f 66 49 6e 64 65 78 28 49 6e 64 65 78 2a  mnOfIndex(Index*
29620 2c 20 69 31 36 29 3b 0a 76 6f 69 64 20 73 71 6c  , i16);.void sql
29630 69 74 65 33 53 74 61 72 74 54 61 62 6c 65 28 50  ite3StartTable(P
29640 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b  arse*,Token*,Tok
29650 65 6e 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c  en*,int,int,int,
29660 69 6e 74 29 3b 0a 23 69 66 20 53 51 4c 49 54 45  int);.#if SQLITE
29670 5f 45 4e 41 42 4c 45 5f 48 49 44 44 45 4e 5f 43  _ENABLE_HIDDEN_C
29680 4f 4c 55 4d 4e 53 0a 20 20 76 6f 69 64 20 73 71  OLUMNS.  void sq
29690 6c 69 74 65 33 43 6f 6c 75 6d 6e 50 72 6f 70 65  lite3ColumnPrope
296a0 72 74 69 65 73 46 72 6f 6d 4e 61 6d 65 28 54 61  rtiesFromName(Ta
296b0 62 6c 65 2a 2c 20 43 6f 6c 75 6d 6e 2a 29 3b 0a  ble*, Column*);.
296c0 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73  #else.# define s
296d0 71 6c 69 74 65 33 43 6f 6c 75 6d 6e 50 72 6f 70  qlite3ColumnProp
296e0 65 72 74 69 65 73 46 72 6f 6d 4e 61 6d 65 28 54  ertiesFromName(T
296f0 2c 43 29 20 2f 2a 20 6e 6f 2d 6f 70 20 2a 2f 0a  ,C) /* no-op */.
29700 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c 69  #endif.void sqli
29710 74 65 33 41 64 64 43 6f 6c 75 6d 6e 28 50 61 72  te3AddColumn(Par
29720 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e  se*,Token*,Token
29730 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
29740 41 64 64 4e 6f 74 4e 75 6c 6c 28 50 61 72 73 65  AddNotNull(Parse
29750 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  *, int);.void sq
29760 6c 69 74 65 33 41 64 64 50 72 69 6d 61 72 79 4b  lite3AddPrimaryK
29770 65 79 28 50 61 72 73 65 2a 2c 20 45 78 70 72 4c  ey(Parse*, ExprL
29780 69 73 74 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20  ist*, int, int, 
29790 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
297a0 65 33 41 64 64 43 68 65 63 6b 43 6f 6e 73 74 72  e3AddCheckConstr
297b0 61 69 6e 74 28 50 61 72 73 65 2a 2c 20 45 78 70  aint(Parse*, Exp
297c0 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  r*);.void sqlite
297d0 33 41 64 64 44 65 66 61 75 6c 74 56 61 6c 75 65  3AddDefaultValue
297e0 28 50 61 72 73 65 2a 2c 45 78 70 72 2a 2c 63 6f  (Parse*,Expr*,co
297f0 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20  nst char*,const 
29800 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  char*);.void sql
29810 69 74 65 33 41 64 64 43 6f 6c 6c 61 74 65 54 79  ite3AddCollateTy
29820 70 65 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e  pe(Parse*, Token
29830 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
29840 45 6e 64 54 61 62 6c 65 28 50 61 72 73 65 2a 2c  EndTable(Parse*,
29850 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 75 38  Token*,Token*,u8
29860 2c 53 65 6c 65 63 74 2a 29 3b 0a 69 6e 74 20 73  ,Select*);.int s
29870 71 6c 69 74 65 33 50 61 72 73 65 55 72 69 28 63  qlite3ParseUri(c
29880 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74  onst char*,const
29890 20 63 68 61 72 2a 2c 75 6e 73 69 67 6e 65 64 20   char*,unsigned 
298a0 69 6e 74 2a 2c 0a 20 20 20 20 20 20 20 20 20 20  int*,.          
298b0 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
298c0 33 5f 76 66 73 2a 2a 2c 63 68 61 72 2a 2a 2c 63  3_vfs**,char**,c
298d0 68 61 72 20 2a 2a 29 3b 0a 42 74 72 65 65 20 2a  har **);.Btree *
298e0 73 71 6c 69 74 65 33 44 62 4e 61 6d 65 54 6f 42  sqlite3DbNameToB
298f0 74 72 65 65 28 73 71 6c 69 74 65 33 2a 2c 63 6f  tree(sqlite3*,co
29900 6e 73 74 20 63 68 61 72 2a 29 3b 0a 0a 23 69 66  nst char*);..#if
29910 64 65 66 20 53 51 4c 49 54 45 5f 55 4e 54 45 53  def SQLITE_UNTES
29920 54 41 42 4c 45 0a 23 20 64 65 66 69 6e 65 20 73  TABLE.# define s
29930 71 6c 69 74 65 33 46 61 75 6c 74 53 69 6d 28 58  qlite3FaultSim(X
29940 29 20 53 51 4c 49 54 45 5f 4f 4b 0a 23 65 6c 73  ) SQLITE_OK.#els
29950 65 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 46  e.  int sqlite3F
29960 61 75 6c 74 53 69 6d 28 69 6e 74 29 3b 0a 23 65  aultSim(int);.#e
29970 6e 64 69 66 0a 0a 42 69 74 76 65 63 20 2a 73 71  ndif..Bitvec *sq
29980 6c 69 74 65 33 42 69 74 76 65 63 43 72 65 61 74  lite3BitvecCreat
29990 65 28 75 33 32 29 3b 0a 69 6e 74 20 73 71 6c 69  e(u32);.int sqli
299a0 74 65 33 42 69 74 76 65 63 54 65 73 74 28 42 69  te3BitvecTest(Bi
299b0 74 76 65 63 2a 2c 20 75 33 32 29 3b 0a 69 6e 74  tvec*, u32);.int
299c0 20 73 71 6c 69 74 65 33 42 69 74 76 65 63 54 65   sqlite3BitvecTe
299d0 73 74 4e 6f 74 4e 75 6c 6c 28 42 69 74 76 65 63  stNotNull(Bitvec
299e0 2a 2c 20 75 33 32 29 3b 0a 69 6e 74 20 73 71 6c  *, u32);.int sql
299f0 69 74 65 33 42 69 74 76 65 63 53 65 74 28 42 69  ite3BitvecSet(Bi
29a00 74 76 65 63 2a 2c 20 75 33 32 29 3b 0a 76 6f 69  tvec*, u32);.voi
29a10 64 20 73 71 6c 69 74 65 33 42 69 74 76 65 63 43  d sqlite3BitvecC
29a20 6c 65 61 72 28 42 69 74 76 65 63 2a 2c 20 75 33  lear(Bitvec*, u3
29a30 32 2c 20 76 6f 69 64 2a 29 3b 0a 76 6f 69 64 20  2, void*);.void 
29a40 73 71 6c 69 74 65 33 42 69 74 76 65 63 44 65 73  sqlite3BitvecDes
29a50 74 72 6f 79 28 42 69 74 76 65 63 2a 29 3b 0a 75  troy(Bitvec*);.u
29a60 33 32 20 73 71 6c 69 74 65 33 42 69 74 76 65 63  32 sqlite3Bitvec
29a70 53 69 7a 65 28 42 69 74 76 65 63 2a 29 3b 0a 23  Size(Bitvec*);.#
29a80 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 55 4e  ifndef SQLITE_UN
29a90 54 45 53 54 41 42 4c 45 0a 69 6e 74 20 73 71 6c  TESTABLE.int sql
29aa0 69 74 65 33 42 69 74 76 65 63 42 75 69 6c 74 69  ite3BitvecBuilti
29ab0 6e 54 65 73 74 28 69 6e 74 2c 69 6e 74 2a 29 3b  nTest(int,int*);
29ac0 0a 23 65 6e 64 69 66 0a 0a 52 6f 77 53 65 74 20  .#endif..RowSet 
29ad0 2a 73 71 6c 69 74 65 33 52 6f 77 53 65 74 49 6e  *sqlite3RowSetIn
29ae0 69 74 28 73 71 6c 69 74 65 33 2a 29 3b 0a 76 6f  it(sqlite3*);.vo
29af0 69 64 20 73 71 6c 69 74 65 33 52 6f 77 53 65 74  id sqlite3RowSet
29b00 44 65 6c 65 74 65 28 76 6f 69 64 2a 29 3b 0a 76  Delete(void*);.v
29b10 6f 69 64 20 73 71 6c 69 74 65 33 52 6f 77 53 65  oid sqlite3RowSe
29b20 74 43 6c 65 61 72 28 76 6f 69 64 2a 29 3b 0a 76  tClear(void*);.v
29b30 6f 69 64 20 73 71 6c 69 74 65 33 52 6f 77 53 65  oid sqlite3RowSe
29b40 74 49 6e 73 65 72 74 28 52 6f 77 53 65 74 2a 2c  tInsert(RowSet*,
29b50 20 69 36 34 29 3b 0a 69 6e 74 20 73 71 6c 69 74   i64);.int sqlit
29b60 65 33 52 6f 77 53 65 74 54 65 73 74 28 52 6f 77  e3RowSetTest(Row
29b70 53 65 74 2a 2c 20 69 6e 74 20 69 42 61 74 63 68  Set*, int iBatch
29b80 2c 20 69 36 34 29 3b 0a 69 6e 74 20 73 71 6c 69  , i64);.int sqli
29b90 74 65 33 52 6f 77 53 65 74 4e 65 78 74 28 52 6f  te3RowSetNext(Ro
29ba0 77 53 65 74 2a 2c 20 69 36 34 2a 29 3b 0a 0a 76  wSet*, i64*);..v
29bb0 6f 69 64 20 73 71 6c 69 74 65 33 43 72 65 61 74  oid sqlite3Creat
29bc0 65 56 69 65 77 28 50 61 72 73 65 2a 2c 54 6f 6b  eView(Parse*,Tok
29bd0 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e  en*,Token*,Token
29be0 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 53 65 6c 65  *,ExprList*,Sele
29bf0 63 74 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a 0a 23  ct*,int,int);..#
29c00 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  if !defined(SQLI
29c10 54 45 5f 4f 4d 49 54 5f 56 49 45 57 29 20 7c 7c  TE_OMIT_VIEW) ||
29c20 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
29c30 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
29c40 4c 45 29 0a 20 20 69 6e 74 20 73 71 6c 69 74 65  LE).  int sqlite
29c50 33 56 69 65 77 47 65 74 43 6f 6c 75 6d 6e 4e 61  3ViewGetColumnNa
29c60 6d 65 73 28 50 61 72 73 65 2a 2c 54 61 62 6c 65  mes(Parse*,Table
29c70 2a 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69  *);.#else.# defi
29c80 6e 65 20 73 71 6c 69 74 65 33 56 69 65 77 47 65  ne sqlite3ViewGe
29c90 74 43 6f 6c 75 6d 6e 4e 61 6d 65 73 28 41 2c 42  tColumnNames(A,B
29ca0 29 20 30 0a 23 65 6e 64 69 66 0a 0a 23 69 66 20  ) 0.#endif..#if 
29cb0 53 51 4c 49 54 45 5f 4d 41 58 5f 41 54 54 41 43  SQLITE_MAX_ATTAC
29cc0 48 45 44 3e 33 30 0a 20 20 69 6e 74 20 73 71 6c  HED>30.  int sql
29cd0 69 74 65 33 44 62 4d 61 73 6b 41 6c 6c 5a 65 72  ite3DbMaskAllZer
29ce0 6f 28 79 44 62 4d 61 73 6b 29 3b 0a 23 65 6e 64  o(yDbMask);.#end
29cf0 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44  if.void sqlite3D
29d00 72 6f 70 54 61 62 6c 65 28 50 61 72 73 65 2a 2c  ropTable(Parse*,
29d10 20 53 72 63 4c 69 73 74 2a 2c 20 69 6e 74 2c 20   SrcList*, int, 
29d20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
29d30 65 33 43 6f 64 65 44 72 6f 70 54 61 62 6c 65 28  e3CodeDropTable(
29d40 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20  Parse*, Table*, 
29d50 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  int, int);.void 
29d60 73 71 6c 69 74 65 33 44 65 6c 65 74 65 54 61 62  sqlite3DeleteTab
29d70 6c 65 28 73 71 6c 69 74 65 33 2a 2c 20 54 61 62  le(sqlite3*, Tab
29d80 6c 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  le*);.void sqlit
29d90 65 33 46 72 65 65 49 6e 64 65 78 28 73 71 6c 69  e3FreeIndex(sqli
29da0 74 65 33 2a 2c 20 49 6e 64 65 78 2a 29 3b 0a 23  te3*, Index*);.#
29db0 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
29dc0 49 54 5f 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54  IT_AUTOINCREMENT
29dd0 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 41  .  void sqlite3A
29de0 75 74 6f 69 6e 63 72 65 6d 65 6e 74 42 65 67 69  utoincrementBegi
29df0 6e 28 50 61 72 73 65 20 2a 70 50 61 72 73 65 29  n(Parse *pParse)
29e00 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
29e10 41 75 74 6f 69 6e 63 72 65 6d 65 6e 74 45 6e 64  AutoincrementEnd
29e20 28 50 61 72 73 65 20 2a 70 50 61 72 73 65 29 3b  (Parse *pParse);
29e30 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
29e40 73 71 6c 69 74 65 33 41 75 74 6f 69 6e 63 72 65  sqlite3Autoincre
29e50 6d 65 6e 74 42 65 67 69 6e 28 58 29 0a 23 20 64  mentBegin(X).# d
29e60 65 66 69 6e 65 20 73 71 6c 69 74 65 33 41 75 74  efine sqlite3Aut
29e70 6f 69 6e 63 72 65 6d 65 6e 74 45 6e 64 28 58 29  oincrementEnd(X)
29e80 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c  .#endif.void sql
29e90 69 74 65 33 49 6e 73 65 72 74 28 50 61 72 73 65  ite3Insert(Parse
29ea0 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 53 65 6c  *, SrcList*, Sel
29eb0 65 63 74 2a 2c 20 49 64 4c 69 73 74 2a 2c 20 69  ect*, IdList*, i
29ec0 6e 74 2c 20 55 70 73 65 72 74 2a 29 3b 0a 76 6f  nt, Upsert*);.vo
29ed0 69 64 20 2a 73 71 6c 69 74 65 33 41 72 72 61 79  id *sqlite3Array
29ee0 41 6c 6c 6f 63 61 74 65 28 73 71 6c 69 74 65 33  Allocate(sqlite3
29ef0 2a 2c 76 6f 69 64 2a 2c 69 6e 74 2c 69 6e 74 2a  *,void*,int,int*
29f00 2c 69 6e 74 2a 29 3b 0a 49 64 4c 69 73 74 20 2a  ,int*);.IdList *
29f10 73 71 6c 69 74 65 33 49 64 4c 69 73 74 41 70 70  sqlite3IdListApp
29f20 65 6e 64 28 50 61 72 73 65 2a 2c 20 49 64 4c 69  end(Parse*, IdLi
29f30 73 74 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e  st*, Token*);.in
29f40 74 20 73 71 6c 69 74 65 33 49 64 4c 69 73 74 49  t sqlite3IdListI
29f50 6e 64 65 78 28 49 64 4c 69 73 74 2a 2c 63 6f 6e  ndex(IdList*,con
29f60 73 74 20 63 68 61 72 2a 29 3b 0a 53 72 63 4c 69  st char*);.SrcLi
29f70 73 74 20 2a 73 71 6c 69 74 65 33 53 72 63 4c 69  st *sqlite3SrcLi
29f80 73 74 45 6e 6c 61 72 67 65 28 73 71 6c 69 74 65  stEnlarge(sqlite
29f90 33 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 69 6e  3*, SrcList*, in
29fa0 74 2c 20 69 6e 74 29 3b 0a 53 72 63 4c 69 73 74  t, int);.SrcList
29fb0 20 2a 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74   *sqlite3SrcList
29fc0 41 70 70 65 6e 64 28 73 71 6c 69 74 65 33 2a 2c  Append(sqlite3*,
29fd0 20 53 72 63 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e   SrcList*, Token
29fe0 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 53 72 63 4c  *, Token*);.SrcL
29ff0 69 73 74 20 2a 73 71 6c 69 74 65 33 53 72 63 4c  ist *sqlite3SrcL
2a000 69 73 74 41 70 70 65 6e 64 46 72 6f 6d 54 65 72  istAppendFromTer
2a010 6d 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73  m(Parse*, SrcLis
2a020 74 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65  t*, Token*, Toke
2a030 6e 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  n*,.            
2a040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a050 20 20 20 20 20 20 20 20 20 20 54 6f 6b 65 6e 2a            Token*
2a060 2c 20 53 65 6c 65 63 74 2a 2c 20 45 78 70 72 2a  , Select*, Expr*
2a070 2c 20 49 64 4c 69 73 74 2a 29 3b 0a 76 6f 69 64  , IdList*);.void
2a080 20 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74 49   sqlite3SrcListI
2a090 6e 64 65 78 65 64 42 79 28 50 61 72 73 65 20 2a  ndexedBy(Parse *
2a0a0 2c 20 53 72 63 4c 69 73 74 20 2a 2c 20 54 6f 6b  , SrcList *, Tok
2a0b0 65 6e 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  en *);.void sqli
2a0c0 74 65 33 53 72 63 4c 69 73 74 46 75 6e 63 41 72  te3SrcListFuncAr
2a0d0 67 73 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69  gs(Parse*, SrcLi
2a0e0 73 74 2a 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b  st*, ExprList*);
2a0f0 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 6e 64 65  .int sqlite3Inde
2a100 78 65 64 42 79 4c 6f 6f 6b 75 70 28 50 61 72 73  xedByLookup(Pars
2a110 65 20 2a 2c 20 73 74 72 75 63 74 20 53 72 63 4c  e *, struct SrcL
2a120 69 73 74 5f 69 74 65 6d 20 2a 29 3b 0a 76 6f 69  ist_item *);.voi
2a130 64 20 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74  d sqlite3SrcList
2a140 53 68 69 66 74 4a 6f 69 6e 54 79 70 65 28 53 72  ShiftJoinType(Sr
2a150 63 4c 69 73 74 2a 29 3b 0a 76 6f 69 64 20 73 71  cList*);.void sq
2a160 6c 69 74 65 33 53 72 63 4c 69 73 74 41 73 73 69  lite3SrcListAssi
2a170 67 6e 43 75 72 73 6f 72 73 28 50 61 72 73 65 2a  gnCursors(Parse*
2a180 2c 20 53 72 63 4c 69 73 74 2a 29 3b 0a 76 6f 69  , SrcList*);.voi
2a190 64 20 73 71 6c 69 74 65 33 49 64 4c 69 73 74 44  d sqlite3IdListD
2a1a0 65 6c 65 74 65 28 73 71 6c 69 74 65 33 2a 2c 20  elete(sqlite3*, 
2a1b0 49 64 4c 69 73 74 2a 29 3b 0a 76 6f 69 64 20 73  IdList*);.void s
2a1c0 71 6c 69 74 65 33 53 72 63 4c 69 73 74 44 65 6c  qlite3SrcListDel
2a1d0 65 74 65 28 73 71 6c 69 74 65 33 2a 2c 20 53 72  ete(sqlite3*, Sr
2a1e0 63 4c 69 73 74 2a 29 3b 0a 49 6e 64 65 78 20 2a  cList*);.Index *
2a1f0 73 71 6c 69 74 65 33 41 6c 6c 6f 63 61 74 65 49  sqlite3AllocateI
2a200 6e 64 65 78 4f 62 6a 65 63 74 28 73 71 6c 69 74  ndexObject(sqlit
2a210 65 33 2a 2c 69 31 36 2c 69 6e 74 2c 63 68 61 72  e3*,i16,int,char
2a220 2a 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  **);.void sqlite
2a230 33 43 72 65 61 74 65 49 6e 64 65 78 28 50 61 72  3CreateIndex(Par
2a240 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e  se*,Token*,Token
2a250 2a 2c 53 72 63 4c 69 73 74 2a 2c 45 78 70 72 4c  *,SrcList*,ExprL
2a260 69 73 74 2a 2c 69 6e 74 2c 54 6f 6b 65 6e 2a 2c  ist*,int,Token*,
2a270 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2a280 20 20 20 20 20 20 20 20 20 20 20 45 78 70 72 2a             Expr*
2a290 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 75 38 29 3b  , int, int, u8);
2a2a0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44 72 6f  .void sqlite3Dro
2a2b0 70 49 6e 64 65 78 28 50 61 72 73 65 2a 2c 20 53  pIndex(Parse*, S
2a2c0 72 63 4c 69 73 74 2a 2c 20 69 6e 74 29 3b 0a 69  rcList*, int);.i
2a2d0 6e 74 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74  nt sqlite3Select
2a2e0 28 50 61 72 73 65 2a 2c 20 53 65 6c 65 63 74 2a  (Parse*, Select*
2a2f0 2c 20 53 65 6c 65 63 74 44 65 73 74 2a 29 3b 0a  , SelectDest*);.
2a300 53 65 6c 65 63 74 20 2a 73 71 6c 69 74 65 33 53  Select *sqlite3S
2a310 65 6c 65 63 74 4e 65 77 28 50 61 72 73 65 2a 2c  electNew(Parse*,
2a320 45 78 70 72 4c 69 73 74 2a 2c 53 72 63 4c 69 73  ExprList*,SrcLis
2a330 74 2a 2c 45 78 70 72 2a 2c 45 78 70 72 4c 69 73  t*,Expr*,ExprLis
2a340 74 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  t*,.            
2a350 20 20 20 20 20 20 20 20 20 20 20 20 20 45 78 70               Exp
2a360 72 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 75 33 32  r*,ExprList*,u32
2a370 2c 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71  ,Expr*);.void sq
2a380 6c 69 74 65 33 53 65 6c 65 63 74 44 65 6c 65 74  lite3SelectDelet
2a390 65 28 73 71 6c 69 74 65 33 2a 2c 20 53 65 6c 65  e(sqlite3*, Sele
2a3a0 63 74 2a 29 3b 0a 54 61 62 6c 65 20 2a 73 71 6c  ct*);.Table *sql
2a3b0 69 74 65 33 53 72 63 4c 69 73 74 4c 6f 6f 6b 75  ite3SrcListLooku
2a3c0 70 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73  p(Parse*, SrcLis
2a3d0 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  t*);.int sqlite3
2a3e0 49 73 52 65 61 64 4f 6e 6c 79 28 50 61 72 73 65  IsReadOnly(Parse
2a3f0 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 29 3b  *, Table*, int);
2a400 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4f 70 65  .void sqlite3Ope
2a410 6e 54 61 62 6c 65 28 50 61 72 73 65 2a 2c 20 69  nTable(Parse*, i
2a420 6e 74 20 69 43 75 72 2c 20 69 6e 74 20 69 44 62  nt iCur, int iDb
2a430 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 29 3b 0a  , Table*, int);.
2a440 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49  #if defined(SQLI
2a450 54 45 5f 45 4e 41 42 4c 45 5f 55 50 44 41 54 45  TE_ENABLE_UPDATE
2a460 5f 44 45 4c 45 54 45 5f 4c 49 4d 49 54 29 20 26  _DELETE_LIMIT) &
2a470 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  & !defined(SQLIT
2a480 45 5f 4f 4d 49 54 5f 53 55 42 51 55 45 52 59 29  E_OMIT_SUBQUERY)
2a490 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33 4c 69  .Expr *sqlite3Li
2a4a0 6d 69 74 57 68 65 72 65 28 50 61 72 73 65 2a 2c  mitWhere(Parse*,
2a4b0 53 72 63 4c 69 73 74 2a 2c 45 78 70 72 2a 2c 45  SrcList*,Expr*,E
2a4c0 78 70 72 4c 69 73 74 2a 2c 45 78 70 72 2a 2c 63  xprList*,Expr*,c
2a4d0 68 61 72 2a 29 3b 0a 23 65 6e 64 69 66 0a 76 6f  har*);.#endif.vo
2a4e0 69 64 20 73 71 6c 69 74 65 33 44 65 6c 65 74 65  id sqlite3Delete
2a4f0 46 72 6f 6d 28 50 61 72 73 65 2a 2c 20 53 72 63  From(Parse*, Src
2a500 4c 69 73 74 2a 2c 20 45 78 70 72 2a 2c 20 45 78  List*, Expr*, Ex
2a510 70 72 4c 69 73 74 2a 2c 20 45 78 70 72 2a 29 3b  prList*, Expr*);
2a520 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 55 70 64  .void sqlite3Upd
2a530 61 74 65 28 50 61 72 73 65 2a 2c 20 53 72 63 4c  ate(Parse*, SrcL
2a540 69 73 74 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c  ist*, ExprList*,
2a550 45 78 70 72 2a 2c 69 6e 74 2c 45 78 70 72 4c 69  Expr*,int,ExprLi
2a560 73 74 2a 2c 45 78 70 72 2a 2c 0a 20 20 20 20 20  st*,Expr*,.     
2a570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 55 70                Up
2a580 73 65 72 74 2a 29 3b 0a 57 68 65 72 65 49 6e 66  sert*);.WhereInf
2a590 6f 20 2a 73 71 6c 69 74 65 33 57 68 65 72 65 42  o *sqlite3WhereB
2a5a0 65 67 69 6e 28 50 61 72 73 65 2a 2c 53 72 63 4c  egin(Parse*,SrcL
2a5b0 69 73 74 2a 2c 45 78 70 72 2a 2c 45 78 70 72 4c  ist*,Expr*,ExprL
2a5c0 69 73 74 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 75  ist*,ExprList*,u
2a5d0 31 36 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  16,int);.void sq
2a5e0 6c 69 74 65 33 57 68 65 72 65 45 6e 64 28 57 68  lite3WhereEnd(Wh
2a5f0 65 72 65 49 6e 66 6f 2a 29 3b 0a 4c 6f 67 45 73  ereInfo*);.LogEs
2a600 74 20 73 71 6c 69 74 65 33 57 68 65 72 65 4f 75  t sqlite3WhereOu
2a610 74 70 75 74 52 6f 77 43 6f 75 6e 74 28 57 68 65  tputRowCount(Whe
2a620 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73 71  reInfo*);.int sq
2a630 6c 69 74 65 33 57 68 65 72 65 49 73 44 69 73 74  lite3WhereIsDist
2a640 69 6e 63 74 28 57 68 65 72 65 49 6e 66 6f 2a 29  inct(WhereInfo*)
2a650 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 68 65  ;.int sqlite3Whe
2a660 72 65 49 73 4f 72 64 65 72 65 64 28 57 68 65 72  reIsOrdered(Wher
2a670 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c  eInfo*);.int sql
2a680 69 74 65 33 57 68 65 72 65 4f 72 64 65 72 42 79  ite3WhereOrderBy
2a690 4c 69 6d 69 74 4f 70 74 4c 61 62 65 6c 28 57 68  LimitOptLabel(Wh
2a6a0 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73  ereInfo*);.int s
2a6b0 71 6c 69 74 65 33 57 68 65 72 65 49 73 53 6f 72  qlite3WhereIsSor
2a6c0 74 65 64 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b  ted(WhereInfo*);
2a6d0 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 68 65 72  .int sqlite3Wher
2a6e0 65 43 6f 6e 74 69 6e 75 65 4c 61 62 65 6c 28 57  eContinueLabel(W
2a6f0 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20  hereInfo*);.int 
2a700 73 71 6c 69 74 65 33 57 68 65 72 65 42 72 65 61  sqlite3WhereBrea
2a710 6b 4c 61 62 65 6c 28 57 68 65 72 65 49 6e 66 6f  kLabel(WhereInfo
2a720 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57  *);.int sqlite3W
2a730 68 65 72 65 4f 6b 4f 6e 65 50 61 73 73 28 57 68  hereOkOnePass(Wh
2a740 65 72 65 49 6e 66 6f 2a 2c 20 69 6e 74 2a 29 3b  ereInfo*, int*);
2a750 0a 23 64 65 66 69 6e 65 20 4f 4e 45 50 41 53 53  .#define ONEPASS
2a760 5f 4f 46 46 20 20 20 20 20 20 30 20 20 20 20 20  _OFF      0     
2a770 20 20 20 2f 2a 20 55 73 65 20 6f 66 20 4f 4e 45     /* Use of ONE
2a780 50 41 53 53 20 6e 6f 74 20 61 6c 6c 6f 77 65 64  PASS not allowed
2a790 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 4e 45 50   */.#define ONEP
2a7a0 41 53 53 5f 53 49 4e 47 4c 45 20 20 20 31 20 20  ASS_SINGLE   1  
2a7b0 20 20 20 20 20 20 2f 2a 20 4f 4e 45 50 41 53 53        /* ONEPASS
2a7c0 20 76 61 6c 69 64 20 66 6f 72 20 61 20 73 69 6e   valid for a sin
2a7d0 67 6c 65 20 72 6f 77 20 75 70 64 61 74 65 20 2a  gle row update *
2a7e0 2f 0a 23 64 65 66 69 6e 65 20 4f 4e 45 50 41 53  /.#define ONEPAS
2a7f0 53 5f 4d 55 4c 54 49 20 20 20 20 32 20 20 20 20  S_MULTI    2    
2a800 20 20 20 20 2f 2a 20 4f 4e 45 50 41 53 53 20 69      /* ONEPASS i
2a810 73 20 76 61 6c 69 64 20 66 6f 72 20 6d 75 6c 74  s valid for mult
2a820 69 70 6c 65 20 72 6f 77 73 20 2a 2f 0a 76 6f 69  iple rows */.voi
2a830 64 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64  d sqlite3ExprCod
2a840 65 4c 6f 61 64 49 6e 64 65 78 43 6f 6c 75 6d 6e  eLoadIndexColumn
2a850 28 50 61 72 73 65 2a 2c 20 49 6e 64 65 78 2a 2c  (Parse*, Index*,
2a860 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b   int, int, int);
2a870 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72  .int sqlite3Expr
2a880 43 6f 64 65 47 65 74 43 6f 6c 75 6d 6e 28 50 61  CodeGetColumn(Pa
2a890 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e  rse*, Table*, in
2a8a0 74 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 75 38 29  t, int, int, u8)
2a8b0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
2a8c0 70 72 43 6f 64 65 47 65 74 43 6f 6c 75 6d 6e 4f  prCodeGetColumnO
2a8d0 66 54 61 62 6c 65 28 56 64 62 65 2a 2c 20 54 61  fTable(Vdbe*, Ta
2a8e0 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20  ble*, int, int, 
2a8f0 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
2a900 65 33 45 78 70 72 43 6f 64 65 4d 6f 76 65 28 50  e3ExprCodeMove(P
2a910 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c  arse*, int, int,
2a920 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
2a930 74 65 33 45 78 70 72 43 6f 64 65 28 50 61 72 73  te3ExprCode(Pars
2a940 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b  e*, Expr*, int);
2a950 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
2a960 72 43 6f 64 65 43 6f 70 79 28 50 61 72 73 65 2a  rCodeCopy(Parse*
2a970 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 76  , Expr*, int);.v
2a980 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 43  oid sqlite3ExprC
2a990 6f 64 65 46 61 63 74 6f 72 61 62 6c 65 28 50 61  odeFactorable(Pa
2a9a0 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74  rse*, Expr*, int
2a9b0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78  );.int sqlite3Ex
2a9c0 70 72 43 6f 64 65 41 74 49 6e 69 74 28 50 61 72  prCodeAtInit(Par
2a9d0 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29  se*, Expr*, int)
2a9e0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70  ;.int sqlite3Exp
2a9f0 72 43 6f 64 65 54 65 6d 70 28 50 61 72 73 65 2a  rCodeTemp(Parse*
2aa00 2c 20 45 78 70 72 2a 2c 20 69 6e 74 2a 29 3b 0a  , Expr*, int*);.
2aa10 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 43  int sqlite3ExprC
2aa20 6f 64 65 54 61 72 67 65 74 28 50 61 72 73 65 2a  odeTarget(Parse*
2aa30 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 76  , Expr*, int);.v
2aa40 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 43  oid sqlite3ExprC
2aa50 6f 64 65 41 6e 64 43 61 63 68 65 28 50 61 72 73  odeAndCache(Pars
2aa60 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b  e*, Expr*, int);
2aa70 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72  .int sqlite3Expr
2aa80 43 6f 64 65 45 78 70 72 4c 69 73 74 28 50 61 72  CodeExprList(Par
2aa90 73 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20  se*, ExprList*, 
2aaa0 69 6e 74 2c 20 69 6e 74 2c 20 75 38 29 3b 0a 23  int, int, u8);.#
2aab0 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 43  define SQLITE_EC
2aac0 45 4c 5f 44 55 50 20 20 20 20 20 20 30 78 30 31  EL_DUP      0x01
2aad0 20 20 2f 2a 20 44 65 65 70 2c 20 6e 6f 74 20 73    /* Deep, not s
2aae0 68 61 6c 6c 6f 77 20 63 6f 70 69 65 73 20 2a 2f  hallow copies */
2aaf0 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
2ab00 45 43 45 4c 5f 46 41 43 54 4f 52 20 20 20 30 78  ECEL_FACTOR   0x
2ab10 30 32 20 20 2f 2a 20 46 61 63 74 6f 72 20 6f 75  02  /* Factor ou
2ab20 74 20 63 6f 6e 73 74 61 6e 74 20 74 65 72 6d 73  t constant terms
2ab30 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
2ab40 54 45 5f 45 43 45 4c 5f 52 45 46 20 20 20 20 20  TE_ECEL_REF     
2ab50 20 30 78 30 34 20 20 2f 2a 20 55 73 65 20 45 78   0x04  /* Use Ex
2ab60 70 72 4c 69 73 74 2e 75 2e 78 2e 69 4f 72 64 65  prList.u.x.iOrde
2ab70 72 42 79 43 6f 6c 20 2a 2f 0a 23 64 65 66 69 6e  rByCol */.#defin
2ab80 65 20 53 51 4c 49 54 45 5f 45 43 45 4c 5f 4f 4d  e SQLITE_ECEL_OM
2ab90 49 54 52 45 46 20 20 30 78 30 38 20 20 2f 2a 20  ITREF  0x08  /* 
2aba0 4f 6d 69 74 20 69 66 20 45 78 70 72 4c 69 73 74  Omit if ExprList
2abb0 2e 75 2e 78 2e 69 4f 72 64 65 72 42 79 43 6f 6c  .u.x.iOrderByCol
2abc0 20 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65 33   */.void sqlite3
2abd0 45 78 70 72 49 66 54 72 75 65 28 50 61 72 73 65  ExprIfTrue(Parse
2abe0 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 2c 20 69  *, Expr*, int, i
2abf0 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
2ac00 33 45 78 70 72 49 66 46 61 6c 73 65 28 50 61 72  3ExprIfFalse(Par
2ac10 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 2c  se*, Expr*, int,
2ac20 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
2ac30 74 65 33 45 78 70 72 49 66 46 61 6c 73 65 44 75  te3ExprIfFalseDu
2ac40 70 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c  p(Parse*, Expr*,
2ac50 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 54 61 62 6c   int, int);.Tabl
2ac60 65 20 2a 73 71 6c 69 74 65 33 46 69 6e 64 54 61  e *sqlite3FindTa
2ac70 62 6c 65 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e  ble(sqlite3*,con
2ac80 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20  st char*, const 
2ac90 63 68 61 72 2a 29 3b 0a 23 64 65 66 69 6e 65 20  char*);.#define 
2aca0 4c 4f 43 41 54 45 5f 56 49 45 57 20 20 20 20 30  LOCATE_VIEW    0
2acb0 78 30 31 0a 23 64 65 66 69 6e 65 20 4c 4f 43 41  x01.#define LOCA
2acc0 54 45 5f 4e 4f 45 52 52 20 20 20 30 78 30 32 0a  TE_NOERR   0x02.
2acd0 54 61 62 6c 65 20 2a 73 71 6c 69 74 65 33 4c 6f  Table *sqlite3Lo
2ace0 63 61 74 65 54 61 62 6c 65 28 50 61 72 73 65 2a  cateTable(Parse*
2acf0 2c 75 33 32 20 66 6c 61 67 73 2c 63 6f 6e 73 74  ,u32 flags,const
2ad00 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68   char*, const ch
2ad10 61 72 2a 29 3b 0a 54 61 62 6c 65 20 2a 73 71 6c  ar*);.Table *sql
2ad20 69 74 65 33 4c 6f 63 61 74 65 54 61 62 6c 65 49  ite3LocateTableI
2ad30 74 65 6d 28 50 61 72 73 65 2a 2c 75 33 32 20 66  tem(Parse*,u32 f
2ad40 6c 61 67 73 2c 73 74 72 75 63 74 20 53 72 63 4c  lags,struct SrcL
2ad50 69 73 74 5f 69 74 65 6d 20 2a 29 3b 0a 49 6e 64  ist_item *);.Ind
2ad60 65 78 20 2a 73 71 6c 69 74 65 33 46 69 6e 64 49  ex *sqlite3FindI
2ad70 6e 64 65 78 28 73 71 6c 69 74 65 33 2a 2c 63 6f  ndex(sqlite3*,co
2ad80 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74  nst char*, const
2ad90 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71   char*);.void sq
2ada0 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65  lite3UnlinkAndDe
2adb0 6c 65 74 65 54 61 62 6c 65 28 73 71 6c 69 74 65  leteTable(sqlite
2adc0 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61  3*,int,const cha
2add0 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  r*);.void sqlite
2ade0 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65  3UnlinkAndDelete
2adf0 49 6e 64 65 78 28 73 71 6c 69 74 65 33 2a 2c 69  Index(sqlite3*,i
2ae00 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  nt,const char*);
2ae10 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 61 63  .void sqlite3Vac
2ae20 75 75 6d 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e  uum(Parse*,Token
2ae30 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52  *);.int sqlite3R
2ae40 75 6e 56 61 63 75 75 6d 28 63 68 61 72 2a 2a 2c  unVacuum(char**,
2ae50 20 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74 29 3b   sqlite3*, int);
2ae60 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33 4e 61  .char *sqlite3Na
2ae70 6d 65 46 72 6f 6d 54 6f 6b 65 6e 28 73 71 6c 69  meFromToken(sqli
2ae80 74 65 33 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69  te3*, Token*);.i
2ae90 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f  nt sqlite3ExprCo
2aea0 6d 70 61 72 65 28 50 61 72 73 65 2a 2c 45 78 70  mpare(Parse*,Exp
2aeb0 72 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b  r*, Expr*, int);
2aec0 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72  .int sqlite3Expr
2aed0 43 6f 6d 70 61 72 65 53 6b 69 70 28 45 78 70 72  CompareSkip(Expr
2aee0 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a  *, Expr*, int);.
2aef0 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 4c  int sqlite3ExprL
2af00 69 73 74 43 6f 6d 70 61 72 65 28 45 78 70 72 4c  istCompare(ExprL
2af10 69 73 74 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c  ist*, ExprList*,
2af20 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74   int);.int sqlit
2af30 65 33 45 78 70 72 49 6d 70 6c 69 65 73 45 78 70  e3ExprImpliesExp
2af40 72 28 50 61 72 73 65 2a 2c 45 78 70 72 2a 2c 20  r(Parse*,Expr*, 
2af50 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74  Expr*, int);.int
2af60 20 73 71 6c 69 74 65 33 45 78 70 72 49 6d 70 6c   sqlite3ExprImpl
2af70 69 65 73 4e 6f 6e 4e 75 6c 6c 52 6f 77 28 45 78  iesNonNullRow(Ex
2af80 70 72 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73  pr*,int);.void s
2af90 71 6c 69 74 65 33 45 78 70 72 41 6e 61 6c 79 7a  qlite3ExprAnalyz
2afa0 65 41 67 67 72 65 67 61 74 65 73 28 4e 61 6d 65  eAggregates(Name
2afb0 43 6f 6e 74 65 78 74 2a 2c 20 45 78 70 72 2a 29  Context*, Expr*)
2afc0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
2afd0 70 72 41 6e 61 6c 79 7a 65 41 67 67 4c 69 73 74  prAnalyzeAggList
2afe0 28 4e 61 6d 65 43 6f 6e 74 65 78 74 2a 2c 45 78  (NameContext*,Ex
2aff0 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71  prList*);.int sq
2b000 6c 69 74 65 33 45 78 70 72 43 6f 76 65 72 65 64  lite3ExprCovered
2b010 42 79 49 6e 64 65 78 28 45 78 70 72 2a 2c 20 69  ByIndex(Expr*, i
2b020 6e 74 20 69 43 75 72 2c 20 49 6e 64 65 78 20 2a  nt iCur, Index *
2b030 70 49 64 78 29 3b 0a 69 6e 74 20 73 71 6c 69 74  pIdx);.int sqlit
2b040 65 33 46 75 6e 63 74 69 6f 6e 55 73 65 73 54 68  e3FunctionUsesTh
2b050 69 73 53 72 63 28 45 78 70 72 2a 2c 20 53 72 63  isSrc(Expr*, Src
2b060 4c 69 73 74 2a 29 3b 0a 56 64 62 65 20 2a 73 71  List*);.Vdbe *sq
2b070 6c 69 74 65 33 47 65 74 56 64 62 65 28 50 61 72  lite3GetVdbe(Par
2b080 73 65 2a 29 3b 0a 23 69 66 6e 64 65 66 20 53 51  se*);.#ifndef SQ
2b090 4c 49 54 45 5f 55 4e 54 45 53 54 41 42 4c 45 0a  LITE_UNTESTABLE.
2b0a0 76 6f 69 64 20 73 71 6c 69 74 65 33 50 72 6e 67  void sqlite3Prng
2b0b0 53 61 76 65 53 74 61 74 65 28 76 6f 69 64 29 3b  SaveState(void);
2b0c0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50 72 6e  .void sqlite3Prn
2b0d0 67 52 65 73 74 6f 72 65 53 74 61 74 65 28 76 6f  gRestoreState(vo
2b0e0 69 64 29 3b 0a 23 65 6e 64 69 66 0a 76 6f 69 64  id);.#endif.void
2b0f0 20 73 71 6c 69 74 65 33 52 6f 6c 6c 62 61 63 6b   sqlite3Rollback
2b100 41 6c 6c 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74  All(sqlite3*,int
2b110 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43  );.void sqlite3C
2b120 6f 64 65 56 65 72 69 66 79 53 63 68 65 6d 61 28  odeVerifySchema(
2b130 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 76 6f  Parse*, int);.vo
2b140 69 64 20 73 71 6c 69 74 65 33 43 6f 64 65 56 65  id sqlite3CodeVe
2b150 72 69 66 79 4e 61 6d 65 64 53 63 68 65 6d 61 28  rifyNamedSchema(
2b160 50 61 72 73 65 2a 2c 20 63 6f 6e 73 74 20 63 68  Parse*, const ch
2b170 61 72 20 2a 7a 44 62 29 3b 0a 76 6f 69 64 20 73  ar *zDb);.void s
2b180 71 6c 69 74 65 33 42 65 67 69 6e 54 72 61 6e 73  qlite3BeginTrans
2b190 61 63 74 69 6f 6e 28 50 61 72 73 65 2a 2c 20 69  action(Parse*, i
2b1a0 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
2b1b0 33 45 6e 64 54 72 61 6e 73 61 63 74 69 6f 6e 28  3EndTransaction(
2b1c0 50 61 72 73 65 2a 2c 69 6e 74 29 3b 0a 76 6f 69  Parse*,int);.voi
2b1d0 64 20 73 71 6c 69 74 65 33 53 61 76 65 70 6f 69  d sqlite3Savepoi
2b1e0 6e 74 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20  nt(Parse*, int, 
2b1f0 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71  Token*);.void sq
2b200 6c 69 74 65 33 43 6c 6f 73 65 53 61 76 65 70 6f  lite3CloseSavepo
2b210 69 6e 74 73 28 73 71 6c 69 74 65 33 20 2a 29 3b  ints(sqlite3 *);
2b220 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4c 65 61  .void sqlite3Lea
2b230 76 65 4d 75 74 65 78 41 6e 64 43 6c 6f 73 65 5a  veMutexAndCloseZ
2b240 6f 6d 62 69 65 28 73 71 6c 69 74 65 33 2a 29 3b  ombie(sqlite3*);
2b250 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72  .int sqlite3Expr
2b260 49 64 54 6f 54 72 75 65 46 61 6c 73 65 28 45 78  IdToTrueFalse(Ex
2b270 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  pr*);.int sqlite
2b280 33 45 78 70 72 54 72 75 74 68 56 61 6c 75 65 28  3ExprTruthValue(
2b290 63 6f 6e 73 74 20 45 78 70 72 2a 29 3b 0a 69 6e  const Expr*);.in
2b2a0 74 20 73 71 6c 69 74 65 33 45 78 70 72 49 73 43  t sqlite3ExprIsC
2b2b0 6f 6e 73 74 61 6e 74 28 45 78 70 72 2a 29 3b 0a  onstant(Expr*);.
2b2c0 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 49  int sqlite3ExprI
2b2d0 73 43 6f 6e 73 74 61 6e 74 4e 6f 74 4a 6f 69 6e  sConstantNotJoin
2b2e0 28 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c  (Expr*);.int sql
2b2f0 69 74 65 33 45 78 70 72 49 73 43 6f 6e 73 74 61  ite3ExprIsConsta
2b300 6e 74 4f 72 46 75 6e 63 74 69 6f 6e 28 45 78 70  ntOrFunction(Exp
2b310 72 2a 2c 20 75 38 29 3b 0a 69 6e 74 20 73 71 6c  r*, u8);.int sql
2b320 69 74 65 33 45 78 70 72 49 73 43 6f 6e 73 74 61  ite3ExprIsConsta
2b330 6e 74 4f 72 47 72 6f 75 70 42 79 28 50 61 72 73  ntOrGroupBy(Pars
2b340 65 2a 2c 20 45 78 70 72 2a 2c 20 45 78 70 72 4c  e*, Expr*, ExprL
2b350 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ist*);.int sqlit
2b360 65 33 45 78 70 72 49 73 54 61 62 6c 65 43 6f 6e  e3ExprIsTableCon
2b370 73 74 61 6e 74 28 45 78 70 72 2a 2c 69 6e 74 29  stant(Expr*,int)
2b380 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ;.#ifdef SQLITE_
2b390 45 4e 41 42 4c 45 5f 43 55 52 53 4f 52 5f 48 49  ENABLE_CURSOR_HI
2b3a0 4e 54 53 0a 69 6e 74 20 73 71 6c 69 74 65 33 45  NTS.int sqlite3E
2b3b0 78 70 72 43 6f 6e 74 61 69 6e 73 53 75 62 71 75  xprContainsSubqu
2b3c0 65 72 79 28 45 78 70 72 2a 29 3b 0a 23 65 6e 64  ery(Expr*);.#end
2b3d0 69 66 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78  if.int sqlite3Ex
2b3e0 70 72 49 73 49 6e 74 65 67 65 72 28 45 78 70 72  prIsInteger(Expr
2b3f0 2a 2c 20 69 6e 74 2a 29 3b 0a 69 6e 74 20 73 71  *, int*);.int sq
2b400 6c 69 74 65 33 45 78 70 72 43 61 6e 42 65 4e 75  lite3ExprCanBeNu
2b410 6c 6c 28 63 6f 6e 73 74 20 45 78 70 72 2a 29 3b  ll(const Expr*);
2b420 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72  .int sqlite3Expr
2b430 4e 65 65 64 73 4e 6f 41 66 66 69 6e 69 74 79 43  NeedsNoAffinityC
2b440 68 61 6e 67 65 28 63 6f 6e 73 74 20 45 78 70 72  hange(const Expr
2b450 2a 2c 20 63 68 61 72 29 3b 0a 69 6e 74 20 73 71  *, char);.int sq
2b460 6c 69 74 65 33 49 73 52 6f 77 69 64 28 63 6f 6e  lite3IsRowid(con
2b470 73 74 20 63 68 61 72 2a 29 3b 0a 23 69 66 64 65  st char*);.#ifde
2b480 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
2b490 4e 4f 52 4d 41 4c 49 5a 45 0a 69 6e 74 20 73 71  NORMALIZE.int sq
2b4a0 6c 69 74 65 33 49 73 52 6f 77 69 64 4e 28 63 6f  lite3IsRowidN(co
2b4b0 6e 73 74 20 63 68 61 72 2a 2c 20 69 6e 74 29 3b  nst char*, int);
2b4c0 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c  .#endif.void sql
2b4d0 69 74 65 33 47 65 6e 65 72 61 74 65 52 6f 77 44  ite3GenerateRowD
2b4e0 65 6c 65 74 65 28 0a 20 20 20 20 50 61 72 73 65  elete(.    Parse
2b4f0 2a 2c 54 61 62 6c 65 2a 2c 54 72 69 67 67 65 72  *,Table*,Trigger
2b500 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c 69 31  *,int,int,int,i1
2b510 36 2c 75 38 2c 75 38 2c 75 38 2c 69 6e 74 29 3b  6,u8,u8,u8,int);
2b520 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 47 65 6e  .void sqlite3Gen
2b530 65 72 61 74 65 52 6f 77 49 6e 64 65 78 44 65 6c  erateRowIndexDel
2b540 65 74 65 28 50 61 72 73 65 2a 2c 20 54 61 62 6c  ete(Parse*, Tabl
2b550 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e  e*, int, int, in
2b560 74 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71  t*, int);.int sq
2b570 6c 69 74 65 33 47 65 6e 65 72 61 74 65 49 6e 64  lite3GenerateInd
2b580 65 78 4b 65 79 28 50 61 72 73 65 2a 2c 20 49 6e  exKey(Parse*, In
2b590 64 65 78 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20  dex*, int, int, 
2b5a0 69 6e 74 2c 20 69 6e 74 2a 2c 49 6e 64 65 78 2a  int, int*,Index*
2b5b0 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ,int);.void sqli
2b5c0 74 65 33 52 65 73 6f 6c 76 65 50 61 72 74 49 64  te3ResolvePartId
2b5d0 78 4c 61 62 65 6c 28 50 61 72 73 65 2a 2c 69 6e  xLabel(Parse*,in
2b5e0 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45  t);.int sqlite3E
2b5f0 78 70 72 52 65 66 65 72 65 6e 63 65 73 55 70 64  xprReferencesUpd
2b600 61 74 65 64 43 6f 6c 75 6d 6e 28 45 78 70 72 2a  atedColumn(Expr*
2b610 2c 69 6e 74 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64  ,int*,int);.void
2b620 20 73 71 6c 69 74 65 33 47 65 6e 65 72 61 74 65   sqlite3Generate
2b630 43 6f 6e 73 74 72 61 69 6e 74 43 68 65 63 6b 73  ConstraintChecks
2b640 28 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a 2c 69  (Parse*,Table*,i
2b650 6e 74 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c  nt*,int,int,int,
2b660 69 6e 74 2c 0a 20 20 20 20 20 20 20 20 20 20 20  int,.           
2b670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b680 20 20 20 20 20 20 20 20 20 20 75 38 2c 75 38 2c            u8,u8,
2b690 69 6e 74 2c 69 6e 74 2a 2c 69 6e 74 2a 2c 55 70  int,int*,int*,Up
2b6a0 73 65 72 74 2a 29 3b 0a 23 69 66 64 65 66 20 53  sert*);.#ifdef S
2b6b0 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4e 55 4c  QLITE_ENABLE_NUL
2b6c0 4c 5f 54 52 49 4d 0a 20 20 76 6f 69 64 20 73 71  L_TRIM.  void sq
2b6d0 6c 69 74 65 33 53 65 74 4d 61 6b 65 52 65 63 6f  lite3SetMakeReco
2b6e0 72 64 50 35 28 56 64 62 65 2a 2c 54 61 62 6c 65  rdP5(Vdbe*,Table
2b6f0 2a 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69  *);.#else.# defi
2b700 6e 65 20 73 71 6c 69 74 65 33 53 65 74 4d 61 6b  ne sqlite3SetMak
2b710 65 52 65 63 6f 72 64 50 35 28 41 2c 42 29 0a 23  eRecordP5(A,B).#
2b720 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74  endif.void sqlit
2b730 65 33 43 6f 6d 70 6c 65 74 65 49 6e 73 65 72 74  e3CompleteInsert
2b740 69 6f 6e 28 50 61 72 73 65 2a 2c 54 61 62 6c 65  ion(Parse*,Table
2b750 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c 69 6e  *,int,int,int,in
2b760 74 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 29 3b  t*,int,int,int);
2b770 0a 69 6e 74 20 73 71 6c 69 74 65 33 4f 70 65 6e  .int sqlite3Open
2b780 54 61 62 6c 65 41 6e 64 49 6e 64 69 63 65 73 28  TableAndIndices(
2b790 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20  Parse*, Table*, 
2b7a0 69 6e 74 2c 20 75 38 2c 20 69 6e 74 2c 20 75 38  int, u8, int, u8
2b7b0 2a 2c 20 69 6e 74 2a 2c 20 69 6e 74 2a 29 3b 0a  *, int*, int*);.
2b7c0 76 6f 69 64 20 73 71 6c 69 74 65 33 42 65 67 69  void sqlite3Begi
2b7d0 6e 57 72 69 74 65 4f 70 65 72 61 74 69 6f 6e 28  nWriteOperation(
2b7e0 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74  Parse*, int, int
2b7f0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4d  );.void sqlite3M
2b800 75 6c 74 69 57 72 69 74 65 28 50 61 72 73 65 2a  ultiWrite(Parse*
2b810 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4d  );.void sqlite3M
2b820 61 79 41 62 6f 72 74 28 50 61 72 73 65 2a 29 3b  ayAbort(Parse*);
2b830 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 48 61 6c  .void sqlite3Hal
2b840 74 43 6f 6e 73 74 72 61 69 6e 74 28 50 61 72 73  tConstraint(Pars
2b850 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 63 68  e*, int, int, ch
2b860 61 72 2a 2c 20 69 38 2c 20 75 38 29 3b 0a 76 6f  ar*, i8, u8);.vo
2b870 69 64 20 73 71 6c 69 74 65 33 55 6e 69 71 75 65  id sqlite3Unique
2b880 43 6f 6e 73 74 72 61 69 6e 74 28 50 61 72 73 65  Constraint(Parse
2b890 2a 2c 20 69 6e 74 2c 20 49 6e 64 65 78 2a 29 3b  *, int, Index*);
2b8a0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 6f 77  .void sqlite3Row
2b8b0 69 64 43 6f 6e 73 74 72 61 69 6e 74 28 50 61 72  idConstraint(Par
2b8c0 73 65 2a 2c 20 69 6e 74 2c 20 54 61 62 6c 65 2a  se*, int, Table*
2b8d0 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33  );.Expr *sqlite3
2b8e0 45 78 70 72 44 75 70 28 73 71 6c 69 74 65 33 2a  ExprDup(sqlite3*
2b8f0 2c 45 78 70 72 2a 2c 69 6e 74 29 3b 0a 45 78 70  ,Expr*,int);.Exp
2b900 72 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 45 78  rList *sqlite3Ex
2b910 70 72 4c 69 73 74 44 75 70 28 73 71 6c 69 74 65  prListDup(sqlite
2b920 33 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 69 6e 74  3*,ExprList*,int
2b930 29 3b 0a 53 72 63 4c 69 73 74 20 2a 73 71 6c 69  );.SrcList *sqli
2b940 74 65 33 53 72 63 4c 69 73 74 44 75 70 28 73 71  te3SrcListDup(sq
2b950 6c 69 74 65 33 2a 2c 53 72 63 4c 69 73 74 2a 2c  lite3*,SrcList*,
2b960 69 6e 74 29 3b 0a 49 64 4c 69 73 74 20 2a 73 71  int);.IdList *sq
2b970 6c 69 74 65 33 49 64 4c 69 73 74 44 75 70 28 73  lite3IdListDup(s
2b980 71 6c 69 74 65 33 2a 2c 49 64 4c 69 73 74 2a 29  qlite3*,IdList*)
2b990 3b 0a 53 65 6c 65 63 74 20 2a 73 71 6c 69 74 65  ;.Select *sqlite
2b9a0 33 53 65 6c 65 63 74 44 75 70 28 73 71 6c 69 74  3SelectDup(sqlit
2b9b0 65 33 2a 2c 53 65 6c 65 63 74 2a 2c 69 6e 74 29  e3*,Select*,int)
2b9c0 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ;.#ifdef SQLITE_
2b9d0 45 4e 41 42 4c 45 5f 4e 4f 52 4d 41 4c 49 5a 45  ENABLE_NORMALIZE
2b9e0 0a 46 75 6e 63 44 65 66 20 2a 73 71 6c 69 74 65  .FuncDef *sqlite
2b9f0 33 46 75 6e 63 74 69 6f 6e 53 65 61 72 63 68 4e  3FunctionSearchN
2ba00 28 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a  (int,const char*
2ba10 2c 69 6e 74 29 3b 0a 23 65 6e 64 69 66 0a 76 6f  ,int);.#endif.vo
2ba20 69 64 20 73 71 6c 69 74 65 33 49 6e 73 65 72 74  id sqlite3Insert
2ba30 42 75 69 6c 74 69 6e 46 75 6e 63 73 28 46 75 6e  BuiltinFuncs(Fun
2ba40 63 44 65 66 2a 2c 69 6e 74 29 3b 0a 46 75 6e 63  cDef*,int);.Func
2ba50 44 65 66 20 2a 73 71 6c 69 74 65 33 46 69 6e 64  Def *sqlite3Find
2ba60 46 75 6e 63 74 69 6f 6e 28 73 71 6c 69 74 65 33  Function(sqlite3
2ba70 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 69 6e  *,const char*,in
2ba80 74 2c 75 38 2c 75 38 29 3b 0a 76 6f 69 64 20 73  t,u8,u8);.void s
2ba90 71 6c 69 74 65 33 52 65 67 69 73 74 65 72 42 75  qlite3RegisterBu
2baa0 69 6c 74 69 6e 46 75 6e 63 74 69 6f 6e 73 28 76  iltinFunctions(v
2bab0 6f 69 64 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  oid);.void sqlit
2bac0 65 33 52 65 67 69 73 74 65 72 44 61 74 65 54 69  e3RegisterDateTi
2bad0 6d 65 46 75 6e 63 74 69 6f 6e 73 28 76 6f 69 64  meFunctions(void
2bae0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52  );.void sqlite3R
2baf0 65 67 69 73 74 65 72 50 65 72 43 6f 6e 6e 65 63  egisterPerConnec
2bb00 74 69 6f 6e 42 75 69 6c 74 69 6e 46 75 6e 63 74  tionBuiltinFunct
2bb10 69 6f 6e 73 28 73 71 6c 69 74 65 33 2a 29 3b 0a  ions(sqlite3*);.
2bb20 69 6e 74 20 73 71 6c 69 74 65 33 53 61 66 65 74  int sqlite3Safet
2bb30 79 43 68 65 63 6b 4f 6b 28 73 71 6c 69 74 65 33  yCheckOk(sqlite3
2bb40 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53  *);.int sqlite3S
2bb50 61 66 65 74 79 43 68 65 63 6b 53 69 63 6b 4f 72  afetyCheckSickOr
2bb60 4f 6b 28 73 71 6c 69 74 65 33 2a 29 3b 0a 76 6f  Ok(sqlite3*);.vo
2bb70 69 64 20 73 71 6c 69 74 65 33 43 68 61 6e 67 65  id sqlite3Change
2bb80 43 6f 6f 6b 69 65 28 50 61 72 73 65 2a 2c 20 69  Cookie(Parse*, i
2bb90 6e 74 29 3b 0a 0a 23 69 66 20 21 64 65 66 69 6e  nt);..#if !defin
2bba0 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  ed(SQLITE_OMIT_V
2bbb0 49 45 57 29 20 26 26 20 21 64 65 66 69 6e 65 64  IEW) && !defined
2bbc0 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49  (SQLITE_OMIT_TRI
2bbd0 47 47 45 52 29 0a 76 6f 69 64 20 73 71 6c 69 74  GGER).void sqlit
2bbe0 65 33 4d 61 74 65 72 69 61 6c 69 7a 65 56 69 65  e3MaterializeVie
2bbf0 77 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a  w(Parse*, Table*
2bc00 2c 20 45 78 70 72 2a 2c 20 45 78 70 72 4c 69 73  , Expr*, ExprLis
2bc10 74 2a 2c 45 78 70 72 2a 2c 69 6e 74 29 3b 0a 23  t*,Expr*,int);.#
2bc20 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66 20 53  endif..#ifndef S
2bc30 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47  QLITE_OMIT_TRIGG
2bc40 45 52 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  ER.  void sqlite
2bc50 33 42 65 67 69 6e 54 72 69 67 67 65 72 28 50 61  3BeginTrigger(Pa
2bc60 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 54 6f 6b  rse*, Token*,Tok
2bc70 65 6e 2a 2c 69 6e 74 2c 69 6e 74 2c 49 64 4c 69  en*,int,int,IdLi
2bc80 73 74 2a 2c 53 72 63 4c 69 73 74 2a 2c 0a 20 20  st*,SrcList*,.  
2bc90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bca0 20 20 20 20 20 20 20 20 20 45 78 70 72 2a 2c 69           Expr*,i
2bcb0 6e 74 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64  nt, int);.  void
2bcc0 20 73 71 6c 69 74 65 33 46 69 6e 69 73 68 54 72   sqlite3FinishTr
2bcd0 69 67 67 65 72 28 50 61 72 73 65 2a 2c 20 54 72  igger(Parse*, Tr
2bce0 69 67 67 65 72 53 74 65 70 2a 2c 20 54 6f 6b 65  iggerStep*, Toke
2bcf0 6e 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69  n*);.  void sqli
2bd00 74 65 33 44 72 6f 70 54 72 69 67 67 65 72 28 50  te3DropTrigger(P
2bd10 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c  arse*, SrcList*,
2bd20 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20 73 71   int);.  void sq
2bd30 6c 69 74 65 33 44 72 6f 70 54 72 69 67 67 65 72  lite3DropTrigger
2bd40 50 74 72 28 50 61 72 73 65 2a 2c 20 54 72 69 67  Ptr(Parse*, Trig
2bd50 67 65 72 2a 29 3b 0a 20 20 54 72 69 67 67 65 72  ger*);.  Trigger
2bd60 20 2a 73 71 6c 69 74 65 33 54 72 69 67 67 65 72   *sqlite3Trigger
2bd70 73 45 78 69 73 74 28 50 61 72 73 65 20 2a 2c 20  sExist(Parse *, 
2bd80 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 45 78 70  Table*, int, Exp
2bd90 72 4c 69 73 74 2a 2c 20 69 6e 74 20 2a 70 4d 61  rList*, int *pMa
2bda0 73 6b 29 3b 0a 20 20 54 72 69 67 67 65 72 20 2a  sk);.  Trigger *
2bdb0 73 71 6c 69 74 65 33 54 72 69 67 67 65 72 4c 69  sqlite3TriggerLi
2bdc0 73 74 28 50 61 72 73 65 20 2a 2c 20 54 61 62 6c  st(Parse *, Tabl
2bdd0 65 20 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c  e *);.  void sql
2bde0 69 74 65 33 43 6f 64 65 52 6f 77 54 72 69 67 67  ite3CodeRowTrigg
2bdf0 65 72 28 50 61 72 73 65 2a 2c 20 54 72 69 67 67  er(Parse*, Trigg
2be00 65 72 20 2a 2c 20 69 6e 74 2c 20 45 78 70 72 4c  er *, int, ExprL
2be10 69 73 74 2a 2c 20 69 6e 74 2c 20 54 61 62 6c 65  ist*, int, Table
2be20 20 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20   *,.            
2be30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2be40 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  int, int, int);.
2be50 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f    void sqlite3Co
2be60 64 65 52 6f 77 54 72 69 67 67 65 72 44 69 72 65  deRowTriggerDire
2be70 63 74 28 50 61 72 73 65 20 2a 2c 20 54 72 69 67  ct(Parse *, Trig
2be80 67 65 72 20 2a 2c 20 54 61 62 6c 65 20 2a 2c 20  ger *, Table *, 
2be90 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  int, int, int);.
2bea0 20 20 76 6f 69 64 20 73 71 6c 69 74 65 56 69 65    void sqliteVie
2beb0 77 54 72 69 67 67 65 72 73 28 50 61 72 73 65 2a  wTriggers(Parse*
2bec0 2c 20 54 61 62 6c 65 2a 2c 20 45 78 70 72 2a 2c  , Table*, Expr*,
2bed0 20 69 6e 74 2c 20 45 78 70 72 4c 69 73 74 2a 29   int, ExprList*)
2bee0 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
2bef0 44 65 6c 65 74 65 54 72 69 67 67 65 72 53 74 65  DeleteTriggerSte
2bf00 70 28 73 71 6c 69 74 65 33 2a 2c 20 54 72 69 67  p(sqlite3*, Trig
2bf10 67 65 72 53 74 65 70 2a 29 3b 0a 20 20 54 72 69  gerStep*);.  Tri
2bf20 67 67 65 72 53 74 65 70 20 2a 73 71 6c 69 74 65  ggerStep *sqlite
2bf30 33 54 72 69 67 67 65 72 53 65 6c 65 63 74 53 74  3TriggerSelectSt
2bf40 65 70 28 73 71 6c 69 74 65 33 2a 2c 53 65 6c 65  ep(sqlite3*,Sele
2bf50 63 74 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20  ct*,.           
2bf60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bf70 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
2bf80 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63  st char*,const c
2bf90 68 61 72 2a 29 3b 0a 20 20 54 72 69 67 67 65 72  har*);.  Trigger
2bfa0 53 74 65 70 20 2a 73 71 6c 69 74 65 33 54 72 69  Step *sqlite3Tri
2bfb0 67 67 65 72 49 6e 73 65 72 74 53 74 65 70 28 50  ggerInsertStep(P
2bfc0 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 20 49 64  arse*,Token*, Id
2bfd0 4c 69 73 74 2a 2c 0a 20 20 20 20 20 20 20 20 20  List*,.         
2bfe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53                 S
2c000 65 6c 65 63 74 2a 2c 75 38 2c 55 70 73 65 72 74  elect*,u8,Upsert
2c010 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  *,.             
2c020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c030 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 73 74             const
2c040 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61   char*,const cha
2c050 72 2a 29 3b 0a 20 20 54 72 69 67 67 65 72 53 74  r*);.  TriggerSt
2c060 65 70 20 2a 73 71 6c 69 74 65 33 54 72 69 67 67  ep *sqlite3Trigg
2c070 65 72 55 70 64 61 74 65 53 74 65 70 28 50 61 72  erUpdateStep(Par
2c080 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 45 78 70 72 4c  se*,Token*,ExprL
2c090 69 73 74 2a 2c 20 45 78 70 72 2a 2c 20 75 38 2c  ist*, Expr*, u8,
2c0a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2c0b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c0c0 20 20 20 20 20 20 20 20 20 63 6f 6e 73 74 20 63           const c
2c0d0 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  har*,const char*
2c0e0 29 3b 0a 20 20 54 72 69 67 67 65 72 53 74 65 70  );.  TriggerStep
2c0f0 20 2a 73 71 6c 69 74 65 33 54 72 69 67 67 65 72   *sqlite3Trigger
2c100 44 65 6c 65 74 65 53 74 65 70 28 50 61 72 73 65  DeleteStep(Parse
2c110 2a 2c 54 6f 6b 65 6e 2a 2c 20 45 78 70 72 2a 2c  *,Token*, Expr*,
2c120 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2c130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c140 20 20 20 20 20 20 20 20 20 63 6f 6e 73 74 20 63           const c
2c150 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  har*,const char*
2c160 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
2c170 33 44 65 6c 65 74 65 54 72 69 67 67 65 72 28 73  3DeleteTrigger(s
2c180 71 6c 69 74 65 33 2a 2c 20 54 72 69 67 67 65 72  qlite3*, Trigger
2c190 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  *);.  void sqlit
2c1a0 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74  e3UnlinkAndDelet
2c1b0 65 54 72 69 67 67 65 72 28 73 71 6c 69 74 65 33  eTrigger(sqlite3
2c1c0 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72  *,int,const char
2c1d0 2a 29 3b 0a 20 20 75 33 32 20 73 71 6c 69 74 65  *);.  u32 sqlite
2c1e0 33 54 72 69 67 67 65 72 43 6f 6c 6d 61 73 6b 28  3TriggerColmask(
2c1f0 50 61 72 73 65 2a 2c 54 72 69 67 67 65 72 2a 2c  Parse*,Trigger*,
2c200 45 78 70 72 4c 69 73 74 2a 2c 69 6e 74 2c 69 6e  ExprList*,int,in
2c210 74 2c 54 61 62 6c 65 2a 2c 69 6e 74 29 3b 0a 23  t,Table*,int);.#
2c220 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 50   define sqlite3P
2c230 61 72 73 65 54 6f 70 6c 65 76 65 6c 28 70 29 20  arseToplevel(p) 
2c240 28 28 70 29 2d 3e 70 54 6f 70 6c 65 76 65 6c 20  ((p)->pToplevel 
2c250 3f 20 28 70 29 2d 3e 70 54 6f 70 6c 65 76 65 6c  ? (p)->pToplevel
2c260 20 3a 20 28 70 29 29 0a 23 20 64 65 66 69 6e 65   : (p)).# define
2c270 20 73 71 6c 69 74 65 33 49 73 54 6f 70 6c 65 76   sqlite3IsToplev
2c280 65 6c 28 70 29 20 28 28 70 29 2d 3e 70 54 6f 70  el(p) ((p)->pTop
2c290 6c 65 76 65 6c 3d 3d 30 29 0a 23 65 6c 73 65 0a  level==0).#else.
2c2a0 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
2c2b0 54 72 69 67 67 65 72 73 45 78 69 73 74 28 42 2c  TriggersExist(B,
2c2c0 43 2c 44 2c 45 2c 46 29 20 30 0a 23 20 64 65 66  C,D,E,F) 0.# def
2c2d0 69 6e 65 20 73 71 6c 69 74 65 33 44 65 6c 65 74  ine sqlite3Delet
2c2e0 65 54 72 69 67 67 65 72 28 41 2c 42 29 0a 23 20  eTrigger(A,B).# 
2c2f0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 44 72  define sqlite3Dr
2c300 6f 70 54 72 69 67 67 65 72 50 74 72 28 41 2c 42  opTriggerPtr(A,B
2c310 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
2c320 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74  e3UnlinkAndDelet
2c330 65 54 72 69 67 67 65 72 28 41 2c 42 2c 43 29 0a  eTrigger(A,B,C).
2c340 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
2c350 43 6f 64 65 52 6f 77 54 72 69 67 67 65 72 28 41  CodeRowTrigger(A
2c360 2c 42 2c 43 2c 44 2c 45 2c 46 2c 47 2c 48 2c 49  ,B,C,D,E,F,G,H,I
2c370 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
2c380 65 33 43 6f 64 65 52 6f 77 54 72 69 67 67 65 72  e3CodeRowTrigger
2c390 44 69 72 65 63 74 28 41 2c 42 2c 43 2c 44 2c 45  Direct(A,B,C,D,E
2c3a0 2c 46 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  ,F).# define sql
2c3b0 69 74 65 33 54 72 69 67 67 65 72 4c 69 73 74 28  ite3TriggerList(
2c3c0 58 2c 20 59 29 20 30 0a 23 20 64 65 66 69 6e 65  X, Y) 0.# define
2c3d0 20 73 71 6c 69 74 65 33 50 61 72 73 65 54 6f 70   sqlite3ParseTop
2c3e0 6c 65 76 65 6c 28 70 29 20 70 0a 23 20 64 65 66  level(p) p.# def
2c3f0 69 6e 65 20 73 71 6c 69 74 65 33 49 73 54 6f 70  ine sqlite3IsTop
2c400 6c 65 76 65 6c 28 70 29 20 31 0a 23 20 64 65 66  level(p) 1.# def
2c410 69 6e 65 20 73 71 6c 69 74 65 33 54 72 69 67 67  ine sqlite3Trigg
2c420 65 72 43 6f 6c 6d 61 73 6b 28 41 2c 42 2c 43 2c  erColmask(A,B,C,
2c430 44 2c 45 2c 46 2c 47 29 20 30 0a 23 65 6e 64 69  D,E,F,G) 0.#endi
2c440 66 0a 0a 69 6e 74 20 73 71 6c 69 74 65 33 4a 6f  f..int sqlite3Jo
2c450 69 6e 54 79 70 65 28 50 61 72 73 65 2a 2c 20 54  inType(Parse*, T
2c460 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54  oken*, Token*, T
2c470 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  oken*);.void sql
2c480 69 74 65 33 43 72 65 61 74 65 46 6f 72 65 69 67  ite3CreateForeig
2c490 6e 4b 65 79 28 50 61 72 73 65 2a 2c 20 45 78 70  nKey(Parse*, Exp
2c4a0 72 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 2c 20  rList*, Token*, 
2c4b0 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74 29 3b  ExprList*, int);
2c4c0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65 66  .void sqlite3Def
2c4d0 65 72 46 6f 72 65 69 67 6e 4b 65 79 28 50 61 72  erForeignKey(Par
2c4e0 73 65 2a 2c 20 69 6e 74 29 3b 0a 23 69 66 6e 64  se*, int);.#ifnd
2c4f0 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41  ef SQLITE_OMIT_A
2c500 55 54 48 4f 52 49 5a 41 54 49 4f 4e 0a 20 20 76  UTHORIZATION.  v
2c510 6f 69 64 20 73 71 6c 69 74 65 33 41 75 74 68 52  oid sqlite3AuthR
2c520 65 61 64 28 50 61 72 73 65 2a 2c 45 78 70 72 2a  ead(Parse*,Expr*
2c530 2c 53 63 68 65 6d 61 2a 2c 53 72 63 4c 69 73 74  ,Schema*,SrcList
2c540 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65  *);.  int sqlite
2c550 33 41 75 74 68 43 68 65 63 6b 28 50 61 72 73 65  3AuthCheck(Parse
2c560 2a 2c 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61  *,int, const cha
2c570 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c  r*, const char*,
2c580 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20   const char*);. 
2c590 20 76 6f 69 64 20 73 71 6c 69 74 65 33 41 75 74   void sqlite3Aut
2c5a0 68 43 6f 6e 74 65 78 74 50 75 73 68 28 50 61 72  hContextPush(Par
2c5b0 73 65 2a 2c 20 41 75 74 68 43 6f 6e 74 65 78 74  se*, AuthContext
2c5c0 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  *, const char*);
2c5d0 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 41  .  void sqlite3A
2c5e0 75 74 68 43 6f 6e 74 65 78 74 50 6f 70 28 41 75  uthContextPop(Au
2c5f0 74 68 43 6f 6e 74 65 78 74 2a 29 3b 0a 20 20 69  thContext*);.  i
2c600 6e 74 20 73 71 6c 69 74 65 33 41 75 74 68 52 65  nt sqlite3AuthRe
2c610 61 64 43 6f 6c 28 50 61 72 73 65 2a 2c 20 63 6f  adCol(Parse*, co
2c620 6e 73 74 20 63 68 61 72 20 2a 2c 20 63 6f 6e 73  nst char *, cons
2c630 74 20 63 68 61 72 20 2a 2c 20 69 6e 74 29 3b 0a  t char *, int);.
2c640 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73  #else.# define s
2c650 71 6c 69 74 65 33 41 75 74 68 52 65 61 64 28 61  qlite3AuthRead(a
2c660 2c 62 2c 63 2c 64 29 0a 23 20 64 65 66 69 6e 65  ,b,c,d).# define
2c670 20 73 71 6c 69 74 65 33 41 75 74 68 43 68 65 63   sqlite3AuthChec
2c680 6b 28 61 2c 62 2c 63 2c 64 2c 65 29 20 20 20 20  k(a,b,c,d,e)    
2c690 53 51 4c 49 54 45 5f 4f 4b 0a 23 20 64 65 66 69  SQLITE_OK.# defi
2c6a0 6e 65 20 73 71 6c 69 74 65 33 41 75 74 68 43 6f  ne sqlite3AuthCo
2c6b0 6e 74 65 78 74 50 75 73 68 28 61 2c 62 2c 63 29  ntextPush(a,b,c)
2c6c0 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
2c6d0 33 41 75 74 68 43 6f 6e 74 65 78 74 50 6f 70 28  3AuthContextPop(
2c6e0 61 29 20 20 28 28 76 6f 69 64 29 28 61 29 29 0a  a)  ((void)(a)).
2c6f0 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c 69  #endif.void sqli
2c700 74 65 33 41 74 74 61 63 68 28 50 61 72 73 65 2a  te3Attach(Parse*
2c710 2c 20 45 78 70 72 2a 2c 20 45 78 70 72 2a 2c 20  , Expr*, Expr*, 
2c720 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  Expr*);.void sql
2c730 69 74 65 33 44 65 74 61 63 68 28 50 61 72 73 65  ite3Detach(Parse
2c740 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20  *, Expr*);.void 
2c750 73 71 6c 69 74 65 33 46 69 78 49 6e 69 74 28 44  sqlite3FixInit(D
2c760 62 46 69 78 65 72 2a 2c 20 50 61 72 73 65 2a 2c  bFixer*, Parse*,
2c770 20 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61 72   int, const char
2c780 2a 2c 20 63 6f 6e 73 74 20 54 6f 6b 65 6e 2a 29  *, const Token*)
2c790 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69 78  ;.int sqlite3Fix
2c7a0 53 72 63 4c 69 73 74 28 44 62 46 69 78 65 72 2a  SrcList(DbFixer*
2c7b0 2c 20 53 72 63 4c 69 73 74 2a 29 3b 0a 69 6e 74  , SrcList*);.int
2c7c0 20 73 71 6c 69 74 65 33 46 69 78 53 65 6c 65 63   sqlite3FixSelec
2c7d0 74 28 44 62 46 69 78 65 72 2a 2c 20 53 65 6c 65  t(DbFixer*, Sele
2c7e0 63 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  ct*);.int sqlite
2c7f0 33 46 69 78 45 78 70 72 28 44 62 46 69 78 65 72  3FixExpr(DbFixer
2c800 2a 2c 20 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73  *, Expr*);.int s
2c810 71 6c 69 74 65 33 46 69 78 45 78 70 72 4c 69 73  qlite3FixExprLis
2c820 74 28 44 62 46 69 78 65 72 2a 2c 20 45 78 70 72  t(DbFixer*, Expr
2c830 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  List*);.int sqli
2c840 74 65 33 46 69 78 54 72 69 67 67 65 72 53 74 65  te3FixTriggerSte
2c850 70 28 44 62 46 69 78 65 72 2a 2c 20 54 72 69 67  p(DbFixer*, Trig
2c860 67 65 72 53 74 65 70 2a 29 3b 0a 69 6e 74 20 73  gerStep*);.int s
2c870 71 6c 69 74 65 33 41 74 6f 46 28 63 6f 6e 73 74  qlite3AtoF(const
2c880 20 63 68 61 72 20 2a 7a 2c 20 64 6f 75 62 6c 65   char *z, double
2c890 2a 2c 20 69 6e 74 2c 20 75 38 29 3b 0a 69 6e 74  *, int, u8);.int
2c8a0 20 73 71 6c 69 74 65 33 47 65 74 49 6e 74 33 32   sqlite3GetInt32
2c8b0 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20 69  (const char *, i
2c8c0 6e 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  nt*);.int sqlite
2c8d0 33 41 74 6f 69 28 63 6f 6e 73 74 20 63 68 61 72  3Atoi(const char
2c8e0 2a 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  *);.#ifndef SQLI
2c8f0 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36 0a 69 6e  TE_OMIT_UTF16.in
2c900 74 20 73 71 6c 69 74 65 33 55 74 66 31 36 42 79  t sqlite3Utf16By
2c910 74 65 4c 65 6e 28 63 6f 6e 73 74 20 76 6f 69 64  teLen(const void
2c920 20 2a 70 44 61 74 61 2c 20 69 6e 74 20 6e 43 68   *pData, int nCh
2c930 61 72 29 3b 0a 23 65 6e 64 69 66 0a 69 6e 74 20  ar);.#endif.int 
2c940 73 71 6c 69 74 65 33 55 74 66 38 43 68 61 72 4c  sqlite3Utf8CharL
2c950 65 6e 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 70  en(const char *p
2c960 44 61 74 61 2c 20 69 6e 74 20 6e 42 79 74 65 29  Data, int nByte)
2c970 3b 0a 75 33 32 20 73 71 6c 69 74 65 33 55 74 66  ;.u32 sqlite3Utf
2c980 38 52 65 61 64 28 63 6f 6e 73 74 20 75 38 2a 2a  8Read(const u8**
2c990 29 3b 0a 4c 6f 67 45 73 74 20 73 71 6c 69 74 65  );.LogEst sqlite
2c9a0 33 4c 6f 67 45 73 74 28 75 36 34 29 3b 0a 4c 6f  3LogEst(u64);.Lo
2c9b0 67 45 73 74 20 73 71 6c 69 74 65 33 4c 6f 67 45  gEst sqlite3LogE
2c9c0 73 74 41 64 64 28 4c 6f 67 45 73 74 2c 4c 6f 67  stAdd(LogEst,Log
2c9d0 45 73 74 29 3b 0a 23 69 66 6e 64 65 66 20 53 51  Est);.#ifndef SQ
2c9e0 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
2c9f0 4c 54 41 42 4c 45 0a 4c 6f 67 45 73 74 20 73 71  LTABLE.LogEst sq
2ca00 6c 69 74 65 33 4c 6f 67 45 73 74 46 72 6f 6d 44  lite3LogEstFromD
2ca10 6f 75 62 6c 65 28 64 6f 75 62 6c 65 29 3b 0a 23  ouble(double);.#
2ca20 65 6e 64 69 66 0a 23 69 66 20 64 65 66 69 6e 65  endif.#if define
2ca30 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  d(SQLITE_ENABLE_
2ca40 53 54 4d 54 5f 53 43 41 4e 53 54 41 54 55 53 29  STMT_SCANSTATUS)
2ca50 20 7c 7c 20 5c 0a 20 20 20 20 64 65 66 69 6e 65   || \.    define
2ca60 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  d(SQLITE_ENABLE_
2ca70 53 54 41 54 33 5f 4f 52 5f 53 54 41 54 34 29 20  STAT3_OR_STAT4) 
2ca80 7c 7c 20 5c 0a 20 20 20 20 64 65 66 69 6e 65 64  || \.    defined
2ca90 28 53 51 4c 49 54 45 5f 45 58 50 4c 41 49 4e 5f  (SQLITE_EXPLAIN_
2caa0 45 53 54 49 4d 41 54 45 44 5f 52 4f 57 53 29 0a  ESTIMATED_ROWS).
2cab0 75 36 34 20 73 71 6c 69 74 65 33 4c 6f 67 45 73  u64 sqlite3LogEs
2cac0 74 54 6f 49 6e 74 28 4c 6f 67 45 73 74 29 3b 0a  tToInt(LogEst);.
2cad0 23 65 6e 64 69 66 0a 56 4c 69 73 74 20 2a 73 71  #endif.VList *sq
2cae0 6c 69 74 65 33 56 4c 69 73 74 41 64 64 28 73 71  lite3VListAdd(sq
2caf0 6c 69 74 65 33 2a 2c 56 4c 69 73 74 2a 2c 63 6f  lite3*,VList*,co
2cb00 6e 73 74 20 63 68 61 72 2a 2c 69 6e 74 2c 69 6e  nst char*,int,in
2cb10 74 29 3b 0a 63 6f 6e 73 74 20 63 68 61 72 20 2a  t);.const char *
2cb20 73 71 6c 69 74 65 33 56 4c 69 73 74 4e 75 6d 54  sqlite3VListNumT
2cb30 6f 4e 61 6d 65 28 56 4c 69 73 74 2a 2c 69 6e 74  oName(VList*,int
2cb40 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 4c  );.int sqlite3VL
2cb50 69 73 74 4e 61 6d 65 54 6f 4e 75 6d 28 56 4c 69  istNameToNum(VLi
2cb60 73 74 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c  st*,const char*,
2cb70 69 6e 74 29 3b 0a 0a 2f 2a 0a 2a 2a 20 52 6f 75  int);../*.** Rou
2cb80 74 69 6e 65 73 20 74 6f 20 72 65 61 64 20 61 6e  tines to read an
2cb90 64 20 77 72 69 74 65 20 76 61 72 69 61 62 6c 65  d write variable
2cba0 2d 6c 65 6e 67 74 68 20 69 6e 74 65 67 65 72 73  -length integers
2cbb0 2e 20 20 54 68 65 73 65 20 75 73 65 64 20 74 6f  .  These used to
2cbc0 0a 2a 2a 20 62 65 20 64 65 66 69 6e 65 64 20 6c  .** be defined l
2cbd0 6f 63 61 6c 6c 79 2c 20 62 75 74 20 6e 6f 77 20  ocally, but now 
2cbe0 77 65 20 75 73 65 20 74 68 65 20 76 61 72 69 6e  we use the varin
2cbf0 74 20 72 6f 75 74 69 6e 65 73 20 69 6e 20 74 68  t routines in th
2cc00 65 20 75 74 69 6c 2e 63 0a 2a 2a 20 66 69 6c 65  e util.c.** file
2cc10 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33  ..*/.int sqlite3
2cc20 50 75 74 56 61 72 69 6e 74 28 75 6e 73 69 67 6e  PutVarint(unsign
2cc30 65 64 20 63 68 61 72 2a 2c 20 75 36 34 29 3b 0a  ed char*, u64);.
2cc40 75 38 20 73 71 6c 69 74 65 33 47 65 74 56 61 72  u8 sqlite3GetVar
2cc50 69 6e 74 28 63 6f 6e 73 74 20 75 6e 73 69 67 6e  int(const unsign
2cc60 65 64 20 63 68 61 72 20 2a 2c 20 75 36 34 20 2a  ed char *, u64 *
2cc70 29 3b 0a 75 38 20 73 71 6c 69 74 65 33 47 65 74  );.u8 sqlite3Get
2cc80 56 61 72 69 6e 74 33 32 28 63 6f 6e 73 74 20 75  Varint32(const u
2cc90 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a 2c 20  nsigned char *, 
2cca0 75 33 32 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  u32 *);.int sqli
2ccb0 74 65 33 56 61 72 69 6e 74 4c 65 6e 28 75 36 34  te3VarintLen(u64
2ccc0 20 76 29 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20   v);../*.** The 
2ccd0 63 6f 6d 6d 6f 6e 20 63 61 73 65 20 69 73 20 66  common case is f
2cce0 6f 72 20 61 20 76 61 72 69 6e 74 20 74 6f 20 62  or a varint to b
2ccf0 65 20 61 20 73 69 6e 67 6c 65 20 62 79 74 65 2e  e a single byte.
2cd00 20 20 54 68 65 79 20 66 6f 6c 6c 6f 77 69 6e 67    They following
2cd10 0a 2a 2a 20 6d 61 63 72 6f 73 20 68 61 6e 64 6c  .** macros handl
2cd20 65 20 74 68 65 20 63 6f 6d 6d 6f 6e 20 63 61 73  e the common cas
2cd30 65 20 77 69 74 68 6f 75 74 20 61 20 70 72 6f 63  e without a proc
2cd40 65 64 75 72 65 20 63 61 6c 6c 2c 20 62 75 74 20  edure call, but 
2cd50 74 68 65 6e 20 63 61 6c 6c 0a 2a 2a 20 74 68 65  then call.** the
2cd60 20 70 72 6f 63 65 64 75 72 65 20 66 6f 72 20 6c   procedure for l
2cd70 61 72 67 65 72 20 76 61 72 69 6e 74 73 2e 0a 2a  arger varints..*
2cd80 2f 0a 23 64 65 66 69 6e 65 20 67 65 74 56 61 72  /.#define getVar
2cd90 69 6e 74 33 32 28 41 2c 42 29 20 20 5c 0a 20 20  int32(A,B)  \.  
2cda0 28 75 38 29 28 28 2a 28 41 29 3c 28 75 38 29 30  (u8)((*(A)<(u8)0
2cdb0 78 38 30 29 3f 28 28 42 29 3d 28 75 33 32 29 2a  x80)?((B)=(u32)*
2cdc0 28 41 29 29 2c 31 3a 73 71 6c 69 74 65 33 47 65  (A)),1:sqlite3Ge
2cdd0 74 56 61 72 69 6e 74 33 32 28 28 41 29 2c 28 75  tVarint32((A),(u
2cde0 33 32 20 2a 29 26 28 42 29 29 29 0a 23 64 65 66  32 *)&(B))).#def
2cdf0 69 6e 65 20 70 75 74 56 61 72 69 6e 74 33 32 28  ine putVarint32(
2ce00 41 2c 42 29 20 20 5c 0a 20 20 28 75 38 29 28 28  A,B)  \.  (u8)((
2ce10 28 75 33 32 29 28 42 29 3c 28 75 33 32 29 30 78  (u32)(B)<(u32)0x
2ce20 38 30 29 3f 28 2a 28 41 29 3d 28 75 6e 73 69 67  80)?(*(A)=(unsig
2ce30 6e 65 64 20 63 68 61 72 29 28 42 29 29 2c 31 3a  ned char)(B)),1:
2ce40 5c 0a 20 20 73 71 6c 69 74 65 33 50 75 74 56 61  \.  sqlite3PutVa
2ce50 72 69 6e 74 28 28 41 29 2c 28 42 29 29 29 0a 23  rint((A),(B))).#
2ce60 64 65 66 69 6e 65 20 67 65 74 56 61 72 69 6e 74  define getVarint
2ce70 20 20 20 20 73 71 6c 69 74 65 33 47 65 74 56 61      sqlite3GetVa
2ce80 72 69 6e 74 0a 23 64 65 66 69 6e 65 20 70 75 74  rint.#define put
2ce90 56 61 72 69 6e 74 20 20 20 20 73 71 6c 69 74 65  Varint    sqlite
2cea0 33 50 75 74 56 61 72 69 6e 74 0a 0a 0a 63 6f 6e  3PutVarint...con
2ceb0 73 74 20 63 68 61 72 20 2a 73 71 6c 69 74 65 33  st char *sqlite3
2cec0 49 6e 64 65 78 41 66 66 69 6e 69 74 79 53 74 72  IndexAffinityStr
2ced0 28 73 71 6c 69 74 65 33 2a 2c 20 49 6e 64 65 78  (sqlite3*, Index
2cee0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
2cef0 54 61 62 6c 65 41 66 66 69 6e 69 74 79 28 56 64  TableAffinity(Vd
2cf00 62 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74  be*, Table*, int
2cf10 29 3b 0a 63 68 61 72 20 73 71 6c 69 74 65 33 43  );.char sqlite3C
2cf20 6f 6d 70 61 72 65 41 66 66 69 6e 69 74 79 28 45  ompareAffinity(E
2cf30 78 70 72 20 2a 70 45 78 70 72 2c 20 63 68 61 72  xpr *pExpr, char
2cf40 20 61 66 66 32 29 3b 0a 69 6e 74 20 73 71 6c 69   aff2);.int sqli
2cf50 74 65 33 49 6e 64 65 78 41 66 66 69 6e 69 74 79  te3IndexAffinity
2cf60 4f 6b 28 45 78 70 72 20 2a 70 45 78 70 72 2c 20  Ok(Expr *pExpr, 
2cf70 63 68 61 72 20 69 64 78 5f 61 66 66 69 6e 69 74  char idx_affinit
2cf80 79 29 3b 0a 63 68 61 72 20 73 71 6c 69 74 65 33  y);.char sqlite3
2cf90 54 61 62 6c 65 43 6f 6c 75 6d 6e 41 66 66 69 6e  TableColumnAffin
2cfa0 69 74 79 28 54 61 62 6c 65 2a 2c 69 6e 74 29 3b  ity(Table*,int);
2cfb0 0a 63 68 61 72 20 73 71 6c 69 74 65 33 45 78 70  .char sqlite3Exp
2cfc0 72 41 66 66 69 6e 69 74 79 28 45 78 70 72 20 2a  rAffinity(Expr *
2cfd0 70 45 78 70 72 29 3b 0a 69 6e 74 20 73 71 6c 69  pExpr);.int sqli
2cfe0 74 65 33 41 74 6f 69 36 34 28 63 6f 6e 73 74 20  te3Atoi64(const 
2cff0 63 68 61 72 2a 2c 20 69 36 34 2a 2c 20 69 6e 74  char*, i64*, int
2d000 2c 20 75 38 29 3b 0a 69 6e 74 20 73 71 6c 69 74  , u8);.int sqlit
2d010 65 33 44 65 63 4f 72 48 65 78 54 6f 49 36 34 28  e3DecOrHexToI64(
2d020 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 69 36 34  const char*, i64
2d030 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
2d040 45 72 72 6f 72 57 69 74 68 4d 73 67 28 73 71 6c  ErrorWithMsg(sql
2d050 69 74 65 33 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73  ite3*, int, cons
2d060 74 20 63 68 61 72 2a 2c 2e 2e 2e 29 3b 0a 76 6f  t char*,...);.vo
2d070 69 64 20 73 71 6c 69 74 65 33 45 72 72 6f 72 28  id sqlite3Error(
2d080 73 71 6c 69 74 65 33 2a 2c 69 6e 74 29 3b 0a 76  sqlite3*,int);.v
2d090 6f 69 64 20 73 71 6c 69 74 65 33 53 79 73 74 65  oid sqlite3Syste
2d0a0 6d 45 72 72 6f 72 28 73 71 6c 69 74 65 33 2a 2c  mError(sqlite3*,
2d0b0 69 6e 74 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69  int);.void *sqli
2d0c0 74 65 33 48 65 78 54 6f 42 6c 6f 62 28 73 71 6c  te3HexToBlob(sql
2d0d0 69 74 65 33 2a 2c 20 63 6f 6e 73 74 20 63 68 61  ite3*, const cha
2d0e0 72 20 2a 7a 2c 20 69 6e 74 20 6e 29 3b 0a 75 38  r *z, int n);.u8
2d0f0 20 73 71 6c 69 74 65 33 48 65 78 54 6f 49 6e 74   sqlite3HexToInt
2d100 28 69 6e 74 20 68 29 3b 0a 69 6e 74 20 73 71 6c  (int h);.int sql
2d110 69 74 65 33 54 77 6f 50 61 72 74 4e 61 6d 65 28  ite3TwoPartName(
2d120 50 61 72 73 65 20 2a 2c 20 54 6f 6b 65 6e 20 2a  Parse *, Token *
2d130 2c 20 54 6f 6b 65 6e 20 2a 2c 20 54 6f 6b 65 6e  , Token *, Token
2d140 20 2a 2a 29 3b 0a 0a 23 69 66 20 64 65 66 69 6e   **);..#if defin
2d150 65 64 28 53 51 4c 49 54 45 5f 4e 45 45 44 5f 45  ed(SQLITE_NEED_E
2d160 52 52 5f 4e 41 4d 45 29 0a 63 6f 6e 73 74 20 63  RR_NAME).const c
2d170 68 61 72 20 2a 73 71 6c 69 74 65 33 45 72 72 4e  har *sqlite3ErrN
2d180 61 6d 65 28 69 6e 74 29 3b 0a 23 65 6e 64 69 66  ame(int);.#endif
2d190 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ..#ifdef SQLITE_
2d1a0 45 4e 41 42 4c 45 5f 44 45 53 45 52 49 41 4c 49  ENABLE_DESERIALI
2d1b0 5a 45 0a 69 6e 74 20 73 71 6c 69 74 65 33 4d 65  ZE.int sqlite3Me
2d1c0 6d 64 62 49 6e 69 74 28 76 6f 69 64 29 3b 0a 23  mdbInit(void);.#
2d1d0 65 6e 64 69 66 0a 0a 63 6f 6e 73 74 20 63 68 61  endif..const cha
2d1e0 72 20 2a 73 71 6c 69 74 65 33 45 72 72 53 74 72  r *sqlite3ErrStr
2d1f0 28 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74  (int);.int sqlit
2d200 65 33 52 65 61 64 53 63 68 65 6d 61 28 50 61 72  e3ReadSchema(Par
2d210 73 65 20 2a 70 50 61 72 73 65 29 3b 0a 43 6f 6c  se *pParse);.Col
2d220 6c 53 65 71 20 2a 73 71 6c 69 74 65 33 46 69 6e  lSeq *sqlite3Fin
2d230 64 43 6f 6c 6c 53 65 71 28 73 71 6c 69 74 65 33  dCollSeq(sqlite3
2d240 2a 2c 75 38 20 65 6e 63 2c 20 63 6f 6e 73 74 20  *,u8 enc, const 
2d250 63 68 61 72 2a 2c 69 6e 74 29 3b 0a 69 6e 74 20  char*,int);.int 
2d260 73 71 6c 69 74 65 33 49 73 42 69 6e 61 72 79 28  sqlite3IsBinary(
2d270 63 6f 6e 73 74 20 43 6f 6c 6c 53 65 71 2a 29 3b  const CollSeq*);
2d280 0a 43 6f 6c 6c 53 65 71 20 2a 73 71 6c 69 74 65  .CollSeq *sqlite
2d290 33 4c 6f 63 61 74 65 43 6f 6c 6c 53 65 71 28 50  3LocateCollSeq(P
2d2a0 61 72 73 65 20 2a 70 50 61 72 73 65 2c 20 63 6f  arse *pParse, co
2d2b0 6e 73 74 20 63 68 61 72 2a 7a 4e 61 6d 65 29 3b  nst char*zName);
2d2c0 0a 43 6f 6c 6c 53 65 71 20 2a 73 71 6c 69 74 65  .CollSeq *sqlite
2d2d0 33 45 78 70 72 43 6f 6c 6c 53 65 71 28 50 61 72  3ExprCollSeq(Par
2d2e0 73 65 20 2a 70 50 61 72 73 65 2c 20 45 78 70 72  se *pParse, Expr
2d2f0 20 2a 70 45 78 70 72 29 3b 0a 43 6f 6c 6c 53 65   *pExpr);.CollSe
2d300 71 20 2a 73 71 6c 69 74 65 33 45 78 70 72 4e 4e  q *sqlite3ExprNN
2d310 43 6f 6c 6c 53 65 71 28 50 61 72 73 65 20 2a 70  CollSeq(Parse *p
2d320 50 61 72 73 65 2c 20 45 78 70 72 20 2a 70 45 78  Parse, Expr *pEx
2d330 70 72 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  pr);.int sqlite3
2d340 45 78 70 72 43 6f 6c 6c 53 65 71 4d 61 74 63 68  ExprCollSeqMatch
2d350 28 50 61 72 73 65 2a 2c 45 78 70 72 2a 2c 45 78  (Parse*,Expr*,Ex
2d360 70 72 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69  pr*);.Expr *sqli
2d370 74 65 33 45 78 70 72 41 64 64 43 6f 6c 6c 61 74  te3ExprAddCollat
2d380 65 54 6f 6b 65 6e 28 50 61 72 73 65 20 2a 70 50  eToken(Parse *pP
2d390 61 72 73 65 2c 20 45 78 70 72 2a 2c 20 63 6f 6e  arse, Expr*, con
2d3a0 73 74 20 54 6f 6b 65 6e 2a 2c 20 69 6e 74 29 3b  st Token*, int);
2d3b0 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78  .Expr *sqlite3Ex
2d3c0 70 72 41 64 64 43 6f 6c 6c 61 74 65 53 74 72 69  prAddCollateStri
2d3d0 6e 67 28 50 61 72 73 65 2a 2c 45 78 70 72 2a 2c  ng(Parse*,Expr*,
2d3e0 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 45 78  const char*);.Ex
2d3f0 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72 53  pr *sqlite3ExprS
2d400 6b 69 70 43 6f 6c 6c 61 74 65 28 45 78 70 72 2a  kipCollate(Expr*
2d410 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 68  );.int sqlite3Ch
2d420 65 63 6b 43 6f 6c 6c 53 65 71 28 50 61 72 73 65  eckCollSeq(Parse
2d430 20 2a 2c 20 43 6f 6c 6c 53 65 71 20 2a 29 3b 0a   *, CollSeq *);.
2d440 69 6e 74 20 73 71 6c 69 74 65 33 57 72 69 74 61  int sqlite3Writa
2d450 62 6c 65 53 63 68 65 6d 61 28 73 71 6c 69 74 65  bleSchema(sqlite
2d460 33 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  3*);.int sqlite3
2d470 43 68 65 63 6b 4f 62 6a 65 63 74 4e 61 6d 65 28  CheckObjectName(
2d480 50 61 72 73 65 20 2a 2c 20 63 6f 6e 73 74 20 63  Parse *, const c
2d490 68 61 72 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  har *);.void sql
2d4a0 69 74 65 33 56 64 62 65 53 65 74 43 68 61 6e 67  ite3VdbeSetChang
2d4b0 65 73 28 73 71 6c 69 74 65 33 20 2a 2c 20 69 6e  es(sqlite3 *, in
2d4c0 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 41  t);.int sqlite3A
2d4d0 64 64 49 6e 74 36 34 28 69 36 34 2a 2c 69 36 34  ddInt64(i64*,i64
2d4e0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 75  );.int sqlite3Su
2d4f0 62 49 6e 74 36 34 28 69 36 34 2a 2c 69 36 34 29  bInt64(i64*,i64)
2d500 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4d 75 6c  ;.int sqlite3Mul
2d510 49 6e 74 36 34 28 69 36 34 2a 2c 69 36 34 29 3b  Int64(i64*,i64);
2d520 0a 69 6e 74 20 73 71 6c 69 74 65 33 41 62 73 49  .int sqlite3AbsI
2d530 6e 74 33 32 28 69 6e 74 29 3b 0a 23 69 66 64 65  nt32(int);.#ifde
2d540 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
2d550 38 5f 33 5f 4e 41 4d 45 53 0a 76 6f 69 64 20 73  8_3_NAMES.void s
2d560 71 6c 69 74 65 33 46 69 6c 65 53 75 66 66 69 78  qlite3FileSuffix
2d570 33 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63  3(const char*, c
2d580 68 61 72 2a 29 3b 0a 23 65 6c 73 65 0a 23 20 64  har*);.#else.# d
2d590 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46 69 6c  efine sqlite3Fil
2d5a0 65 53 75 66 66 69 78 33 28 58 2c 59 29 0a 23 65  eSuffix3(X,Y).#e
2d5b0 6e 64 69 66 0a 75 38 20 73 71 6c 69 74 65 33 47  ndif.u8 sqlite3G
2d5c0 65 74 42 6f 6f 6c 65 61 6e 28 63 6f 6e 73 74 20  etBoolean(const 
2d5d0 63 68 61 72 20 2a 7a 2c 75 38 29 3b 0a 0a 63 6f  char *z,u8);..co
2d5e0 6e 73 74 20 76 6f 69 64 20 2a 73 71 6c 69 74 65  nst void *sqlite
2d5f0 33 56 61 6c 75 65 54 65 78 74 28 73 71 6c 69 74  3ValueText(sqlit
2d600 65 33 5f 76 61 6c 75 65 2a 2c 20 75 38 29 3b 0a  e3_value*, u8);.
2d610 69 6e 74 20 73 71 6c 69 74 65 33 56 61 6c 75 65  int sqlite3Value
2d620 42 79 74 65 73 28 73 71 6c 69 74 65 33 5f 76 61  Bytes(sqlite3_va
2d630 6c 75 65 2a 2c 20 75 38 29 3b 0a 76 6f 69 64 20  lue*, u8);.void 
2d640 73 71 6c 69 74 65 33 56 61 6c 75 65 53 65 74 53  sqlite3ValueSetS
2d650 74 72 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  tr(sqlite3_value
2d660 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20 76 6f  *, int, const vo
2d670 69 64 20 2a 2c 75 38 2c 0a 20 20 20 20 20 20 20  id *,u8,.       
2d680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d690 20 76 6f 69 64 28 2a 29 28 76 6f 69 64 2a 29 29   void(*)(void*))
2d6a0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 61  ;.void sqlite3Va
2d6b0 6c 75 65 53 65 74 4e 75 6c 6c 28 73 71 6c 69 74  lueSetNull(sqlit
2d6c0 65 33 5f 76 61 6c 75 65 2a 29 3b 0a 76 6f 69 64  e3_value*);.void
2d6d0 20 73 71 6c 69 74 65 33 56 61 6c 75 65 46 72 65   sqlite3ValueFre
2d6e0 65 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a  e(sqlite3_value*
2d6f0 29 3b 0a 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  );.sqlite3_value
2d700 20 2a 73 71 6c 69 74 65 33 56 61 6c 75 65 4e 65   *sqlite3ValueNe
2d710 77 28 73 71 6c 69 74 65 33 20 2a 29 3b 0a 23 69  w(sqlite3 *);.#i
2d720 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
2d730 54 5f 55 54 46 31 36 0a 63 68 61 72 20 2a 73 71  T_UTF16.char *sq
2d740 6c 69 74 65 33 55 74 66 31 36 74 6f 38 28 73 71  lite3Utf16to8(sq
2d750 6c 69 74 65 33 20 2a 2c 20 63 6f 6e 73 74 20 76  lite3 *, const v
2d760 6f 69 64 2a 2c 20 69 6e 74 2c 20 75 38 29 3b 0a  oid*, int, u8);.
2d770 23 65 6e 64 69 66 0a 69 6e 74 20 73 71 6c 69 74  #endif.int sqlit
2d780 65 33 56 61 6c 75 65 46 72 6f 6d 45 78 70 72 28  e3ValueFromExpr(
2d790 73 71 6c 69 74 65 33 20 2a 2c 20 45 78 70 72 20  sqlite3 *, Expr 
2d7a0 2a 2c 20 75 38 2c 20 75 38 2c 20 73 71 6c 69 74  *, u8, u8, sqlit
2d7b0 65 33 5f 76 61 6c 75 65 20 2a 2a 29 3b 0a 76 6f  e3_value **);.vo
2d7c0 69 64 20 73 71 6c 69 74 65 33 56 61 6c 75 65 41  id sqlite3ValueA
2d7d0 70 70 6c 79 41 66 66 69 6e 69 74 79 28 73 71 6c  pplyAffinity(sql
2d7e0 69 74 65 33 5f 76 61 6c 75 65 20 2a 2c 20 75 38  ite3_value *, u8
2d7f0 2c 20 75 38 29 3b 0a 23 69 66 6e 64 65 66 20 53  , u8);.#ifndef S
2d800 51 4c 49 54 45 5f 41 4d 41 4c 47 41 4d 41 54 49  QLITE_AMALGAMATI
2d810 4f 4e 0a 65 78 74 65 72 6e 20 63 6f 6e 73 74 20  ON.extern const 
2d820 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 73 71  unsigned char sq
2d830 6c 69 74 65 33 4f 70 63 6f 64 65 50 72 6f 70 65  lite3OpcodePrope
2d840 72 74 79 5b 5d 3b 0a 65 78 74 65 72 6e 20 63 6f  rty[];.extern co
2d850 6e 73 74 20 63 68 61 72 20 73 71 6c 69 74 65 33  nst char sqlite3
2d860 53 74 72 42 49 4e 41 52 59 5b 5d 3b 0a 65 78 74  StrBINARY[];.ext
2d870 65 72 6e 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e  ern const unsign
2d880 65 64 20 63 68 61 72 20 73 71 6c 69 74 65 33 55  ed char sqlite3U
2d890 70 70 65 72 54 6f 4c 6f 77 65 72 5b 5d 3b 0a 65  pperToLower[];.e
2d8a0 78 74 65 72 6e 20 63 6f 6e 73 74 20 75 6e 73 69  xtern const unsi
2d8b0 67 6e 65 64 20 63 68 61 72 20 73 71 6c 69 74 65  gned char sqlite
2d8c0 33 43 74 79 70 65 4d 61 70 5b 5d 3b 0a 65 78 74  3CtypeMap[];.ext
2d8d0 65 72 6e 20 63 6f 6e 73 74 20 54 6f 6b 65 6e 20  ern const Token 
2d8e0 73 71 6c 69 74 65 33 49 6e 74 54 6f 6b 65 6e 73  sqlite3IntTokens
2d8f0 5b 5d 3b 0a 65 78 74 65 72 6e 20 53 51 4c 49 54  [];.extern SQLIT
2d900 45 5f 57 53 44 20 73 74 72 75 63 74 20 53 71 6c  E_WSD struct Sql
2d910 69 74 65 33 43 6f 6e 66 69 67 20 73 71 6c 69 74  ite3Config sqlit
2d920 65 33 43 6f 6e 66 69 67 3b 0a 65 78 74 65 72 6e  e3Config;.extern
2d930 20 46 75 6e 63 44 65 66 48 61 73 68 20 73 71 6c   FuncDefHash sql
2d940 69 74 65 33 42 75 69 6c 74 69 6e 46 75 6e 63 74  ite3BuiltinFunct
2d950 69 6f 6e 73 3b 0a 23 69 66 6e 64 65 66 20 53 51  ions;.#ifndef SQ
2d960 4c 49 54 45 5f 4f 4d 49 54 5f 57 53 44 0a 65 78  LITE_OMIT_WSD.ex
2d970 74 65 72 6e 20 69 6e 74 20 73 71 6c 69 74 65 33  tern int sqlite3
2d980 50 65 6e 64 69 6e 67 42 79 74 65 3b 0a 23 65 6e  PendingByte;.#en
2d990 64 69 66 0a 23 65 6e 64 69 66 0a 23 69 66 64 65  dif.#endif.#ifde
2d9a0 66 20 56 44 42 45 5f 50 52 4f 46 49 4c 45 0a 65  f VDBE_PROFILE.e
2d9b0 78 74 65 72 6e 20 73 71 6c 69 74 65 33 5f 75 69  xtern sqlite3_ui
2d9c0 6e 74 36 34 20 73 71 6c 69 74 65 33 4e 50 72 6f  nt64 sqlite3NPro
2d9d0 66 69 6c 65 43 6e 74 3b 0a 23 65 6e 64 69 66 0a  fileCnt;.#endif.
2d9e0 76 6f 69 64 20 73 71 6c 69 74 65 33 52 6f 6f 74  void sqlite3Root
2d9f0 50 61 67 65 4d 6f 76 65 64 28 73 71 6c 69 74 65  PageMoved(sqlite
2da00 33 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e  3*, int, int, in
2da10 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
2da20 52 65 69 6e 64 65 78 28 50 61 72 73 65 2a 2c 20  Reindex(Parse*, 
2da30 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 29 3b  Token*, Token*);
2da40 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 6c 74  .void sqlite3Alt
2da50 65 72 46 75 6e 63 74 69 6f 6e 73 28 76 6f 69 64  erFunctions(void
2da60 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41  );.void sqlite3A
2da70 6c 74 65 72 52 65 6e 61 6d 65 54 61 62 6c 65 28  lterRenameTable(
2da80 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a  Parse*, SrcList*
2da90 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20  , Token*);.void 
2daa0 73 71 6c 69 74 65 33 41 6c 74 65 72 52 65 6e 61  sqlite3AlterRena
2dab0 6d 65 43 6f 6c 75 6d 6e 28 50 61 72 73 65 2a 2c  meColumn(Parse*,
2dac0 20 53 72 63 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e   SrcList*, Token
2dad0 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20  *, Token*);.int 
2dae0 73 71 6c 69 74 65 33 47 65 74 54 6f 6b 65 6e 28  sqlite3GetToken(
2daf0 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63  const unsigned c
2db00 68 61 72 20 2a 2c 20 69 6e 74 20 2a 29 3b 0a 23  har *, int *);.#
2db10 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  ifdef SQLITE_ENA
2db20 42 4c 45 5f 4e 4f 52 4d 41 4c 49 5a 45 0a 69 6e  BLE_NORMALIZE.in
2db30 74 20 73 71 6c 69 74 65 33 47 65 74 54 6f 6b 65  t sqlite3GetToke
2db40 6e 4e 6f 72 6d 61 6c 69 7a 65 64 28 63 6f 6e 73  nNormalized(cons
2db50 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20  t unsigned char 
2db60 2a 2c 20 69 6e 74 20 2a 2c 20 69 6e 74 20 2a 29  *, int *, int *)
2db70 3b 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71  ;.#endif.void sq
2db80 6c 69 74 65 33 4e 65 73 74 65 64 50 61 72 73 65  lite3NestedParse
2db90 28 50 61 72 73 65 2a 2c 20 63 6f 6e 73 74 20 63  (Parse*, const c
2dba0 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 76 6f 69 64  har*, ...);.void
2dbb0 20 73 71 6c 69 74 65 33 45 78 70 69 72 65 50 72   sqlite3ExpirePr
2dbc0 65 70 61 72 65 64 53 74 61 74 65 6d 65 6e 74 73  eparedStatements
2dbd0 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74 29 3b  (sqlite3*, int);
2dbe0 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 6f 64 65  .int sqlite3Code
2dbf0 53 75 62 73 65 6c 65 63 74 28 50 61 72 73 65 2a  Subselect(Parse*
2dc00 2c 20 45 78 70 72 20 2a 2c 20 69 6e 74 2c 20 69  , Expr *, int, i
2dc10 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
2dc20 33 53 65 6c 65 63 74 50 72 65 70 28 50 61 72 73  3SelectPrep(Pars
2dc30 65 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 4e 61 6d  e*, Select*, Nam
2dc40 65 43 6f 6e 74 65 78 74 2a 29 3b 0a 76 6f 69 64  eContext*);.void
2dc50 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74 57 72   sqlite3SelectWr
2dc60 6f 6e 67 4e 75 6d 54 65 72 6d 73 45 72 72 6f 72  ongNumTermsError
2dc70 28 50 61 72 73 65 20 2a 70 50 61 72 73 65 2c 20  (Parse *pParse, 
2dc80 53 65 6c 65 63 74 20 2a 70 29 3b 0a 69 6e 74 20  Select *p);.int 
2dc90 73 71 6c 69 74 65 33 4d 61 74 63 68 53 70 61 6e  sqlite3MatchSpan
2dca0 4e 61 6d 65 28 63 6f 6e 73 74 20 63 68 61 72 2a  Name(const char*
2dcb0 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63  , const char*, c
2dcc0 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73  onst char*, cons
2dcd0 74 20 63 68 61 72 2a 29 3b 0a 69 6e 74 20 73 71  t char*);.int sq
2dce0 6c 69 74 65 33 52 65 73 6f 6c 76 65 45 78 70 72  lite3ResolveExpr
2dcf0 4e 61 6d 65 73 28 4e 61 6d 65 43 6f 6e 74 65 78  Names(NameContex
2dd00 74 2a 2c 20 45 78 70 72 2a 29 3b 0a 69 6e 74 20  t*, Expr*);.int 
2dd10 73 71 6c 69 74 65 33 52 65 73 6f 6c 76 65 45 78  sqlite3ResolveEx
2dd20 70 72 4c 69 73 74 4e 61 6d 65 73 28 4e 61 6d 65  prListNames(Name
2dd30 43 6f 6e 74 65 78 74 2a 2c 20 45 78 70 72 4c 69  Context*, ExprLi
2dd40 73 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  st*);.void sqlit
2dd50 65 33 52 65 73 6f 6c 76 65 53 65 6c 65 63 74 4e  e3ResolveSelectN
2dd60 61 6d 65 73 28 50 61 72 73 65 2a 2c 20 53 65 6c  ames(Parse*, Sel
2dd70 65 63 74 2a 2c 20 4e 61 6d 65 43 6f 6e 74 65 78  ect*, NameContex
2dd80 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  t*);.void sqlite
2dd90 33 52 65 73 6f 6c 76 65 53 65 6c 66 52 65 66 65  3ResolveSelfRefe
2dda0 72 65 6e 63 65 28 50 61 72 73 65 2a 2c 54 61 62  rence(Parse*,Tab
2ddb0 6c 65 2a 2c 69 6e 74 2c 45 78 70 72 2a 2c 45 78  le*,int,Expr*,Ex
2ddc0 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71  prList*);.int sq
2ddd0 6c 69 74 65 33 52 65 73 6f 6c 76 65 4f 72 64 65  lite3ResolveOrde
2dde0 72 47 72 6f 75 70 42 79 28 50 61 72 73 65 2a 2c  rGroupBy(Parse*,
2ddf0 20 53 65 6c 65 63 74 2a 2c 20 45 78 70 72 4c 69   Select*, ExprLi
2de00 73 74 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  st*, const char*
2de10 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43  );.void sqlite3C
2de20 6f 6c 75 6d 6e 44 65 66 61 75 6c 74 28 56 64 62  olumnDefault(Vdb
2de30 65 20 2a 2c 20 54 61 62 6c 65 20 2a 2c 20 69 6e  e *, Table *, in
2de40 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  t, int);.void sq
2de50 6c 69 74 65 33 41 6c 74 65 72 46 69 6e 69 73 68  lite3AlterFinish
2de60 41 64 64 43 6f 6c 75 6d 6e 28 50 61 72 73 65 20  AddColumn(Parse 
2de70 2a 2c 20 54 6f 6b 65 6e 20 2a 29 3b 0a 76 6f 69  *, Token *);.voi
2de80 64 20 73 71 6c 69 74 65 33 41 6c 74 65 72 42 65  d sqlite3AlterBe
2de90 67 69 6e 41 64 64 43 6f 6c 75 6d 6e 28 50 61 72  ginAddColumn(Par
2dea0 73 65 20 2a 2c 20 53 72 63 4c 69 73 74 20 2a 29  se *, SrcList *)
2deb0 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 52  ;.void *sqlite3R
2dec0 65 6e 61 6d 65 54 6f 6b 65 6e 4d 61 70 28 50 61  enameTokenMap(Pa
2ded0 72 73 65 2a 2c 20 76 6f 69 64 2a 2c 20 54 6f 6b  rse*, void*, Tok
2dee0 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  en*);.void sqlit
2def0 65 33 52 65 6e 61 6d 65 54 6f 6b 65 6e 52 65 6d  e3RenameTokenRem
2df00 61 70 28 50 61 72 73 65 2a 2c 20 76 6f 69 64 20  ap(Parse*, void 
2df10 2a 70 54 6f 2c 20 76 6f 69 64 20 2a 70 46 72 6f  *pTo, void *pFro
2df20 6d 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  m);.void sqlite3
2df30 52 65 6e 61 6d 65 45 78 70 72 55 6e 6d 61 70 28  RenameExprUnmap(
2df40 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 29 3b 0a  Parse*, Expr*);.
2df50 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 6e 61  void sqlite3Rena
2df60 6d 65 45 78 70 72 6c 69 73 74 55 6e 6d 61 70 28  meExprlistUnmap(
2df70 50 61 72 73 65 2a 2c 20 45 78 70 72 4c 69 73 74  Parse*, ExprList
2df80 2a 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73 71 6c  *);.CollSeq *sql
2df90 69 74 65 33 47 65 74 43 6f 6c 6c 53 65 71 28 50  ite3GetCollSeq(P
2dfa0 61 72 73 65 2a 2c 20 75 38 2c 20 43 6f 6c 6c 53  arse*, u8, CollS
2dfb0 65 71 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  eq *, const char
2dfc0 2a 29 3b 0a 63 68 61 72 20 73 71 6c 69 74 65 33  *);.char sqlite3
2dfd0 41 66 66 69 6e 69 74 79 54 79 70 65 28 63 6f 6e  AffinityType(con
2dfe0 73 74 20 63 68 61 72 2a 2c 20 43 6f 6c 75 6d 6e  st char*, Column
2dff0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
2e000 41 6e 61 6c 79 7a 65 28 50 61 72 73 65 2a 2c 20  Analyze(Parse*, 
2e010 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 29 3b  Token*, Token*);
2e020 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 6e 76 6f  .int sqlite3Invo
2e030 6b 65 42 75 73 79 48 61 6e 64 6c 65 72 28 42 75  keBusyHandler(Bu
2e040 73 79 48 61 6e 64 6c 65 72 2a 2c 20 73 71 6c 69  syHandler*, sqli
2e050 74 65 33 5f 66 69 6c 65 2a 29 3b 0a 69 6e 74 20  te3_file*);.int 
2e060 73 71 6c 69 74 65 33 46 69 6e 64 44 62 28 73 71  sqlite3FindDb(sq
2e070 6c 69 74 65 33 2a 2c 20 54 6f 6b 65 6e 2a 29 3b  lite3*, Token*);
2e080 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69 6e 64  .int sqlite3Find
2e090 44 62 4e 61 6d 65 28 73 71 6c 69 74 65 33 20 2a  DbName(sqlite3 *
2e0a0 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 29 3b  , const char *);
2e0b0 0a 69 6e 74 20 73 71 6c 69 74 65 33 41 6e 61 6c  .int sqlite3Anal
2e0c0 79 73 69 73 4c 6f 61 64 28 73 71 6c 69 74 65 33  ysisLoad(sqlite3
2e0d0 2a 2c 69 6e 74 20 69 44 42 29 3b 0a 76 6f 69 64  *,int iDB);.void
2e0e0 20 73 71 6c 69 74 65 33 44 65 6c 65 74 65 49 6e   sqlite3DeleteIn
2e0f0 64 65 78 53 61 6d 70 6c 65 73 28 73 71 6c 69 74  dexSamples(sqlit
2e100 65 33 2a 2c 49 6e 64 65 78 2a 29 3b 0a 76 6f 69  e3*,Index*);.voi
2e110 64 20 73 71 6c 69 74 65 33 44 65 66 61 75 6c 74  d sqlite3Default
2e120 52 6f 77 45 73 74 28 49 6e 64 65 78 2a 29 3b 0a  RowEst(Index*);.
2e130 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 67 69  void sqlite3Regi
2e140 73 74 65 72 4c 69 6b 65 46 75 6e 63 74 69 6f 6e  sterLikeFunction
2e150 73 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74 29  s(sqlite3*, int)
2e160 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 73 4c  ;.int sqlite3IsL
2e170 69 6b 65 46 75 6e 63 74 69 6f 6e 28 73 71 6c 69  ikeFunction(sqli
2e180 74 65 33 2a 2c 45 78 70 72 2a 2c 69 6e 74 2a 2c  te3*,Expr*,int*,
2e190 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  char*);.void sql
2e1a0 69 74 65 33 53 63 68 65 6d 61 43 6c 65 61 72 28  ite3SchemaClear(
2e1b0 76 6f 69 64 20 2a 29 3b 0a 53 63 68 65 6d 61 20  void *);.Schema 
2e1c0 2a 73 71 6c 69 74 65 33 53 63 68 65 6d 61 47 65  *sqlite3SchemaGe
2e1d0 74 28 73 71 6c 69 74 65 33 20 2a 2c 20 42 74 72  t(sqlite3 *, Btr
2e1e0 65 65 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ee *);.int sqlit
2e1f0 65 33 53 63 68 65 6d 61 54 6f 49 6e 64 65 78 28  e3SchemaToIndex(
2e200 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 53 63 68  sqlite3 *db, Sch
2e210 65 6d 61 20 2a 29 3b 0a 4b 65 79 49 6e 66 6f 20  ema *);.KeyInfo 
2e220 2a 73 71 6c 69 74 65 33 4b 65 79 49 6e 66 6f 41  *sqlite3KeyInfoA
2e230 6c 6c 6f 63 28 73 71 6c 69 74 65 33 2a 2c 69 6e  lloc(sqlite3*,in
2e240 74 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  t,int);.void sql
2e250 69 74 65 33 4b 65 79 49 6e 66 6f 55 6e 72 65 66  ite3KeyInfoUnref
2e260 28 4b 65 79 49 6e 66 6f 2a 29 3b 0a 4b 65 79 49  (KeyInfo*);.KeyI
2e270 6e 66 6f 20 2a 73 71 6c 69 74 65 33 4b 65 79 49  nfo *sqlite3KeyI
2e280 6e 66 6f 52 65 66 28 4b 65 79 49 6e 66 6f 2a 29  nfoRef(KeyInfo*)
2e290 3b 0a 4b 65 79 49 6e 66 6f 20 2a 73 71 6c 69 74  ;.KeyInfo *sqlit
2e2a0 65 33 4b 65 79 49 6e 66 6f 4f 66 49 6e 64 65 78  e3KeyInfoOfIndex
2e2b0 28 50 61 72 73 65 2a 2c 20 49 6e 64 65 78 2a 29  (Parse*, Index*)
2e2c0 3b 0a 4b 65 79 49 6e 66 6f 20 2a 73 71 6c 69 74  ;.KeyInfo *sqlit
2e2d0 65 33 4b 65 79 49 6e 66 6f 46 72 6f 6d 45 78 70  e3KeyInfoFromExp
2e2e0 72 4c 69 73 74 28 50 61 72 73 65 2a 2c 20 45 78  rList(Parse*, Ex
2e2f0 70 72 4c 69 73 74 2a 2c 20 69 6e 74 2c 20 69 6e  prList*, int, in
2e300 74 29 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49  t);..#ifdef SQLI
2e310 54 45 5f 44 45 42 55 47 0a 69 6e 74 20 73 71 6c  TE_DEBUG.int sql
2e320 69 74 65 33 4b 65 79 49 6e 66 6f 49 73 57 72 69  ite3KeyInfoIsWri
2e330 74 65 61 62 6c 65 28 4b 65 79 49 6e 66 6f 2a 29  teable(KeyInfo*)
2e340 3b 0a 23 65 6e 64 69 66 0a 69 6e 74 20 73 71 6c  ;.#endif.int sql
2e350 69 74 65 33 43 72 65 61 74 65 46 75 6e 63 28 73  ite3CreateFunc(s
2e360 71 6c 69 74 65 33 20 2a 2c 20 63 6f 6e 73 74 20  qlite3 *, const 
2e370 63 68 61 72 20 2a 2c 20 69 6e 74 2c 20 69 6e 74  char *, int, int
2e380 2c 20 76 6f 69 64 20 2a 2c 0a 20 20 76 6f 69 64  , void *,.  void
2e390 20 28 2a 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e   (*)(sqlite3_con
2e3a0 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65  text*,int,sqlite
2e3b0 33 5f 76 61 6c 75 65 20 2a 2a 29 2c 0a 20 20 76  3_value **),.  v
2e3c0 6f 69 64 20 28 2a 29 28 73 71 6c 69 74 65 33 5f  oid (*)(sqlite3_
2e3d0 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c  context*,int,sql
2e3e0 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a 29 2c 20  ite3_value **), 
2e3f0 0a 20 20 76 6f 69 64 20 28 2a 29 28 73 71 6c 69  .  void (*)(sqli
2e400 74 65 33 5f 63 6f 6e 74 65 78 74 2a 29 2c 0a 20  te3_context*),. 
2e410 20 76 6f 69 64 20 28 2a 29 28 73 71 6c 69 74 65   void (*)(sqlite
2e420 33 5f 63 6f 6e 74 65 78 74 2a 29 2c 0a 20 20 76  3_context*),.  v
2e430 6f 69 64 20 28 2a 29 28 73 71 6c 69 74 65 33 5f  oid (*)(sqlite3_
2e440 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c  context*,int,sql
2e450 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a 29 2c 20  ite3_value **), 
2e460 0a 20 20 46 75 6e 63 44 65 73 74 72 75 63 74 6f  .  FuncDestructo
2e470 72 20 2a 70 44 65 73 74 72 75 63 74 6f 72 0a 29  r *pDestructor.)
2e480 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4e 6f  ;.void sqlite3No
2e490 6f 70 44 65 73 74 72 75 63 74 6f 72 28 76 6f 69  opDestructor(voi
2e4a0 64 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  d*);.void sqlite
2e4b0 33 4f 6f 6d 46 61 75 6c 74 28 73 71 6c 69 74 65  3OomFault(sqlite
2e4c0 33 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  3*);.void sqlite
2e4d0 33 4f 6f 6d 43 6c 65 61 72 28 73 71 6c 69 74 65  3OomClear(sqlite
2e4e0 33 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  3*);.int sqlite3
2e4f0 41 70 69 45 78 69 74 28 73 71 6c 69 74 65 33 20  ApiExit(sqlite3 
2e500 2a 64 62 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73  *db, int);.int s
2e510 71 6c 69 74 65 33 4f 70 65 6e 54 65 6d 70 44 61  qlite3OpenTempDa
2e520 74 61 62 61 73 65 28 50 61 72 73 65 20 2a 29 3b  tabase(Parse *);
2e530 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74  ..void sqlite3St
2e540 72 41 63 63 75 6d 49 6e 69 74 28 53 74 72 41 63  rAccumInit(StrAc
2e550 63 75 6d 2a 2c 20 73 71 6c 69 74 65 33 2a 2c 20  cum*, sqlite3*, 
2e560 63 68 61 72 2a 2c 20 69 6e 74 2c 20 69 6e 74 29  char*, int, int)
2e570 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33 53  ;.char *sqlite3S
2e580 74 72 41 63 63 75 6d 46 69 6e 69 73 68 28 53 74  trAccumFinish(St
2e590 72 41 63 63 75 6d 2a 29 3b 0a 76 6f 69 64 20 73  rAccum*);.void s
2e5a0 71 6c 69 74 65 33 53 65 6c 65 63 74 44 65 73 74  qlite3SelectDest
2e5b0 49 6e 69 74 28 53 65 6c 65 63 74 44 65 73 74 2a  Init(SelectDest*
2e5c0 2c 69 6e 74 2c 69 6e 74 29 3b 0a 45 78 70 72 20  ,int,int);.Expr 
2e5d0 2a 73 71 6c 69 74 65 33 43 72 65 61 74 65 43 6f  *sqlite3CreateCo
2e5e0 6c 75 6d 6e 45 78 70 72 28 73 71 6c 69 74 65 33  lumnExpr(sqlite3
2e5f0 20 2a 2c 20 53 72 63 4c 69 73 74 20 2a 2c 20 69   *, SrcList *, i
2e600 6e 74 2c 20 69 6e 74 29 3b 0a 0a 76 6f 69 64 20  nt, int);..void 
2e610 73 71 6c 69 74 65 33 42 61 63 6b 75 70 52 65 73  sqlite3BackupRes
2e620 74 61 72 74 28 73 71 6c 69 74 65 33 5f 62 61 63  tart(sqlite3_bac
2e630 6b 75 70 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  kup *);.void sql
2e640 69 74 65 33 42 61 63 6b 75 70 55 70 64 61 74 65  ite3BackupUpdate
2e650 28 73 71 6c 69 74 65 33 5f 62 61 63 6b 75 70 20  (sqlite3_backup 
2e660 2a 2c 20 50 67 6e 6f 2c 20 63 6f 6e 73 74 20 75  *, Pgno, const u
2e670 38 20 2a 29 3b 0a 0a 23 69 66 6e 64 65 66 20 53  8 *);..#ifndef S
2e680 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 55 42 51 55  QLITE_OMIT_SUBQU
2e690 45 52 59 0a 69 6e 74 20 73 71 6c 69 74 65 33 45  ERY.int sqlite3E
2e6a0 78 70 72 43 68 65 63 6b 49 4e 28 50 61 72 73 65  xprCheckIN(Parse
2e6b0 2a 2c 20 45 78 70 72 2a 29 3b 0a 23 65 6c 73 65  *, Expr*);.#else
2e6c0 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
2e6d0 33 45 78 70 72 43 68 65 63 6b 49 4e 28 78 2c 79  3ExprCheckIN(x,y
2e6e0 29 20 53 51 4c 49 54 45 5f 4f 4b 0a 23 65 6e 64  ) SQLITE_OK.#end
2e6f0 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54  if..#ifdef SQLIT
2e700 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 5f 4f  E_ENABLE_STAT3_O
2e710 52 5f 53 54 41 54 34 0a 76 6f 69 64 20 73 71 6c  R_STAT4.void sql
2e720 69 74 65 33 41 6e 61 6c 79 7a 65 46 75 6e 63 74  ite3AnalyzeFunct
2e730 69 6f 6e 73 28 76 6f 69 64 29 3b 0a 69 6e 74 20  ions(void);.int 
2e740 73 71 6c 69 74 65 33 53 74 61 74 34 50 72 6f 62  sqlite3Stat4Prob
2e750 65 53 65 74 56 61 6c 75 65 28 0a 20 20 20 20 50  eSetValue(.    P
2e760 61 72 73 65 2a 2c 49 6e 64 65 78 2a 2c 55 6e 70  arse*,Index*,Unp
2e770 61 63 6b 65 64 52 65 63 6f 72 64 2a 2a 2c 45 78  ackedRecord**,Ex
2e780 70 72 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 2a  pr*,int,int,int*
2e790 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 74  );.int sqlite3St
2e7a0 61 74 34 56 61 6c 75 65 46 72 6f 6d 45 78 70 72  at4ValueFromExpr
2e7b0 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20  (Parse*, Expr*, 
2e7c0 75 38 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c 75  u8, sqlite3_valu
2e7d0 65 2a 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  e**);.void sqlit
2e7e0 65 33 53 74 61 74 34 50 72 6f 62 65 46 72 65 65  e3Stat4ProbeFree
2e7f0 28 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 2a  (UnpackedRecord*
2e800 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 74  );.int sqlite3St
2e810 61 74 34 43 6f 6c 75 6d 6e 28 73 71 6c 69 74 65  at4Column(sqlite
2e820 33 2a 2c 20 63 6f 6e 73 74 20 76 6f 69 64 2a 2c  3*, const void*,
2e830 20 69 6e 74 2c 20 69 6e 74 2c 20 73 71 6c 69 74   int, int, sqlit
2e840 65 33 5f 76 61 6c 75 65 2a 2a 29 3b 0a 63 68 61  e3_value**);.cha
2e850 72 20 73 71 6c 69 74 65 33 49 6e 64 65 78 43 6f  r sqlite3IndexCo
2e860 6c 75 6d 6e 41 66 66 69 6e 69 74 79 28 73 71 6c  lumnAffinity(sql
2e870 69 74 65 33 2a 2c 20 49 6e 64 65 78 2a 2c 20 69  ite3*, Index*, i
2e880 6e 74 29 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  nt);.#endif../*.
2e890 2a 2a 20 54 68 65 20 69 6e 74 65 72 66 61 63 65  ** The interface
2e8a0 20 74 6f 20 74 68 65 20 4c 45 4d 4f 4e 2d 67 65   to the LEMON-ge
2e8b0 6e 65 72 61 74 65 64 20 70 61 72 73 65 72 0a 2a  nerated parser.*
2e8c0 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  /.#ifndef SQLITE
2e8d0 5f 41 4d 41 4c 47 41 4d 41 54 49 4f 4e 0a 20 20  _AMALGAMATION.  
2e8e0 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 50 61 72  void *sqlite3Par
2e8f0 73 65 72 41 6c 6c 6f 63 28 76 6f 69 64 2a 28 2a  serAlloc(void*(*
2e900 29 28 75 36 34 29 2c 20 50 61 72 73 65 2a 29 3b  )(u64), Parse*);
2e910 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 50  .  void sqlite3P
2e920 61 72 73 65 72 46 72 65 65 28 76 6f 69 64 2a 2c  arserFree(void*,
2e930 20 76 6f 69 64 28 2a 29 28 76 6f 69 64 2a 29 29   void(*)(void*))
2e940 3b 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71  ;.#endif.void sq
2e950 6c 69 74 65 33 50 61 72 73 65 72 28 76 6f 69 64  lite3Parser(void
2e960 2a 2c 20 69 6e 74 2c 20 54 6f 6b 65 6e 29 3b 0a  *, int, Token);.
2e970 69 6e 74 20 73 71 6c 69 74 65 33 50 61 72 73 65  int sqlite3Parse
2e980 72 46 61 6c 6c 62 61 63 6b 28 69 6e 74 29 3b 0a  rFallback(int);.
2e990 23 69 66 64 65 66 20 59 59 54 52 41 43 4b 4d 41  #ifdef YYTRACKMA
2e9a0 58 53 54 41 43 4b 44 45 50 54 48 0a 20 20 69 6e  XSTACKDEPTH.  in
2e9b0 74 20 73 71 6c 69 74 65 33 50 61 72 73 65 72 53  t sqlite3ParserS
2e9c0 74 61 63 6b 50 65 61 6b 28 76 6f 69 64 2a 29 3b  tackPeak(void*);
2e9d0 0a 23 65 6e 64 69 66 0a 0a 76 6f 69 64 20 73 71  .#endif..void sq
2e9e0 6c 69 74 65 33 41 75 74 6f 4c 6f 61 64 45 78 74  lite3AutoLoadExt
2e9f0 65 6e 73 69 6f 6e 73 28 73 71 6c 69 74 65 33 2a  ensions(sqlite3*
2ea00 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  );.#ifndef SQLIT
2ea10 45 5f 4f 4d 49 54 5f 4c 4f 41 44 5f 45 58 54 45  E_OMIT_LOAD_EXTE
2ea20 4e 53 49 4f 4e 0a 20 20 76 6f 69 64 20 73 71 6c  NSION.  void sql
2ea30 69 74 65 33 43 6c 6f 73 65 45 78 74 65 6e 73 69  ite3CloseExtensi
2ea40 6f 6e 73 28 73 71 6c 69 74 65 33 2a 29 3b 0a 23  ons(sqlite3*);.#
2ea50 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71  else.# define sq
2ea60 6c 69 74 65 33 43 6c 6f 73 65 45 78 74 65 6e 73  lite3CloseExtens
2ea70 69 6f 6e 73 28 58 29 0a 23 65 6e 64 69 66 0a 0a  ions(X).#endif..
2ea80 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
2ea90 4d 49 54 5f 53 48 41 52 45 44 5f 43 41 43 48 45  MIT_SHARED_CACHE
2eaa0 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 54  .  void sqlite3T
2eab0 61 62 6c 65 4c 6f 63 6b 28 50 61 72 73 65 20 2a  ableLock(Parse *
2eac0 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 75 38 2c 20  , int, int, u8, 
2ead0 63 6f 6e 73 74 20 63 68 61 72 20 2a 29 3b 0a 23  const char *);.#
2eae0 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20 73  else.  #define s
2eaf0 71 6c 69 74 65 33 54 61 62 6c 65 4c 6f 63 6b 28  qlite3TableLock(
2eb00 76 2c 77 2c 78 2c 79 2c 7a 29 0a 23 65 6e 64 69  v,w,x,y,z).#endi
2eb10 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  f..#ifdef SQLITE
2eb20 5f 54 45 53 54 0a 20 20 69 6e 74 20 73 71 6c 69  _TEST.  int sqli
2eb30 74 65 33 55 74 66 38 54 6f 38 28 75 6e 73 69 67  te3Utf8To8(unsig
2eb40 6e 65 64 20 63 68 61 72 2a 29 3b 0a 23 65 6e 64  ned char*);.#end
2eb50 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54  if..#ifdef SQLIT
2eb60 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
2eb70 42 4c 45 0a 23 20 20 64 65 66 69 6e 65 20 73 71  BLE.#  define sq
2eb80 6c 69 74 65 33 56 74 61 62 43 6c 65 61 72 28 59  lite3VtabClear(Y
2eb90 29 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69  ).#  define sqli
2eba0 74 65 33 56 74 61 62 53 79 6e 63 28 58 2c 59 29  te3VtabSync(X,Y)
2ebb0 20 53 51 4c 49 54 45 5f 4f 4b 0a 23 20 20 64 65   SQLITE_OK.#  de
2ebc0 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62  fine sqlite3Vtab
2ebd0 52 6f 6c 6c 62 61 63 6b 28 58 29 0a 23 20 20 64  Rollback(X).#  d
2ebe0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61  efine sqlite3Vta
2ebf0 62 43 6f 6d 6d 69 74 28 58 29 0a 23 20 20 64 65  bCommit(X).#  de
2ec00 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62  fine sqlite3Vtab
2ec10 49 6e 53 79 6e 63 28 64 62 29 20 30 0a 23 20 20  InSync(db) 0.#  
2ec20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74  define sqlite3Vt
2ec30 61 62 4c 6f 63 6b 28 58 29 0a 23 20 20 64 65 66  abLock(X).#  def
2ec40 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62 55  ine sqlite3VtabU
2ec50 6e 6c 6f 63 6b 28 58 29 0a 23 20 20 64 65 66 69  nlock(X).#  defi
2ec60 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62 55 6e  ne sqlite3VtabUn
2ec70 6c 6f 63 6b 4c 69 73 74 28 58 29 0a 23 20 20 64  lockList(X).#  d
2ec80 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61  efine sqlite3Vta
2ec90 62 53 61 76 65 70 6f 69 6e 74 28 58 2c 20 59 2c  bSavepoint(X, Y,
2eca0 20 5a 29 20 53 51 4c 49 54 45 5f 4f 4b 0a 23 20   Z) SQLITE_OK.# 
2ecb0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 47   define sqlite3G
2ecc0 65 74 56 54 61 62 6c 65 28 58 2c 59 29 20 20 28  etVTable(X,Y)  (
2ecd0 28 56 54 61 62 6c 65 2a 29 30 29 0a 23 65 6c 73  (VTable*)0).#els
2ece0 65 0a 20 20 20 76 6f 69 64 20 73 71 6c 69 74 65  e.   void sqlite
2ecf0 33 56 74 61 62 43 6c 65 61 72 28 73 71 6c 69 74  3VtabClear(sqlit
2ed00 65 33 20 2a 64 62 2c 20 54 61 62 6c 65 2a 29 3b  e3 *db, Table*);
2ed10 0a 20 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  .   void sqlite3
2ed20 56 74 61 62 44 69 73 63 6f 6e 6e 65 63 74 28 73  VtabDisconnect(s
2ed30 71 6c 69 74 65 33 20 2a 64 62 2c 20 54 61 62 6c  qlite3 *db, Tabl
2ed40 65 20 2a 70 29 3b 0a 20 20 20 69 6e 74 20 73 71  e *p);.   int sq
2ed50 6c 69 74 65 33 56 74 61 62 53 79 6e 63 28 73 71  lite3VtabSync(sq
2ed60 6c 69 74 65 33 20 2a 64 62 2c 20 56 64 62 65 2a  lite3 *db, Vdbe*
2ed70 29 3b 0a 20 20 20 69 6e 74 20 73 71 6c 69 74 65  );.   int sqlite
2ed80 33 56 74 61 62 52 6f 6c 6c 62 61 63 6b 28 73 71  3VtabRollback(sq
2ed90 6c 69 74 65 33 20 2a 64 62 29 3b 0a 20 20 20 69  lite3 *db);.   i
2eda0 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62 43 6f  nt sqlite3VtabCo
2edb0 6d 6d 69 74 28 73 71 6c 69 74 65 33 20 2a 64 62  mmit(sqlite3 *db
2edc0 29 3b 0a 20 20 20 76 6f 69 64 20 73 71 6c 69 74  );.   void sqlit
2edd0 65 33 56 74 61 62 4c 6f 63 6b 28 56 54 61 62 6c  e3VtabLock(VTabl
2ede0 65 20 2a 29 3b 0a 20 20 20 76 6f 69 64 20 73 71  e *);.   void sq
2edf0 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f 63 6b 28  lite3VtabUnlock(
2ee00 56 54 61 62 6c 65 20 2a 29 3b 0a 20 20 20 76 6f  VTable *);.   vo
2ee10 69 64 20 73 71 6c 69 74 65 33 56 74 61 62 55 6e  id sqlite3VtabUn
2ee20 6c 6f 63 6b 4c 69 73 74 28 73 71 6c 69 74 65 33  lockList(sqlite3
2ee30 2a 29 3b 0a 20 20 20 69 6e 74 20 73 71 6c 69 74  *);.   int sqlit
2ee40 65 33 56 74 61 62 53 61 76 65 70 6f 69 6e 74 28  e3VtabSavepoint(
2ee50 73 71 6c 69 74 65 33 20 2a 2c 20 69 6e 74 2c 20  sqlite3 *, int, 
2ee60 69 6e 74 29 3b 0a 20 20 20 76 6f 69 64 20 73 71  int);.   void sq
2ee70 6c 69 74 65 33 56 74 61 62 49 6d 70 6f 72 74 45  lite3VtabImportE
2ee80 72 72 6d 73 67 28 56 64 62 65 2a 2c 20 73 71 6c  rrmsg(Vdbe*, sql
2ee90 69 74 65 33 5f 76 74 61 62 2a 29 3b 0a 20 20 20  ite3_vtab*);.   
2eea0 56 54 61 62 6c 65 20 2a 73 71 6c 69 74 65 33 47  VTable *sqlite3G
2eeb0 65 74 56 54 61 62 6c 65 28 73 71 6c 69 74 65 33  etVTable(sqlite3
2eec0 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a 20 20 20 4d  *, Table*);.   M
2eed0 6f 64 75 6c 65 20 2a 73 71 6c 69 74 65 33 56 74  odule *sqlite3Vt
2eee0 61 62 43 72 65 61 74 65 4d 6f 64 75 6c 65 28 0a  abCreateModule(.
2eef0 20 20 20 20 20 73 71 6c 69 74 65 33 2a 2c 0a 20       sqlite3*,. 
2ef00 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c      const char*,
2ef10 0a 20 20 20 20 20 63 6f 6e 73 74 20 73 71 6c 69  .     const sqli
2ef20 74 65 33 5f 6d 6f 64 75 6c 65 2a 2c 0a 20 20 20  te3_module*,.   
2ef30 20 20 76 6f 69 64 2a 2c 0a 20 20 20 20 20 76 6f    void*,.     vo
2ef40 69 64 28 2a 29 28 76 6f 69 64 2a 29 0a 20 20 20  id(*)(void*).   
2ef50 29 3b 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c  );.#  define sql
2ef60 69 74 65 33 56 74 61 62 49 6e 53 79 6e 63 28 64  ite3VtabInSync(d
2ef70 62 29 20 28 28 64 62 29 2d 3e 6e 56 54 72 61 6e  b) ((db)->nVTran
2ef80 73 3e 30 20 26 26 20 28 64 62 29 2d 3e 61 56 54  s>0 && (db)->aVT
2ef90 72 61 6e 73 3d 3d 30 29 0a 23 65 6e 64 69 66 0a  rans==0).#endif.
2efa0 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62 45  int sqlite3VtabE
2efb0 70 6f 6e 79 6d 6f 75 73 54 61 62 6c 65 49 6e 69  ponymousTableIni
2efc0 74 28 50 61 72 73 65 2a 2c 4d 6f 64 75 6c 65 2a  t(Parse*,Module*
2efd0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56  );.void sqlite3V
2efe0 74 61 62 45 70 6f 6e 79 6d 6f 75 73 54 61 62 6c  tabEponymousTabl
2eff0 65 43 6c 65 61 72 28 73 71 6c 69 74 65 33 2a 2c  eClear(sqlite3*,
2f000 4d 6f 64 75 6c 65 2a 29 3b 0a 76 6f 69 64 20 73  Module*);.void s
2f010 71 6c 69 74 65 33 56 74 61 62 4d 61 6b 65 57 72  qlite3VtabMakeWr
2f020 69 74 61 62 6c 65 28 50 61 72 73 65 2a 2c 54 61  itable(Parse*,Ta
2f030 62 6c 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ble*);.void sqli
2f040 74 65 33 56 74 61 62 42 65 67 69 6e 50 61 72 73  te3VtabBeginPars
2f050 65 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a  e(Parse*, Token*
2f060 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a  , Token*, Token*
2f070 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
2f080 69 74 65 33 56 74 61 62 46 69 6e 69 73 68 50 61  ite3VtabFinishPa
2f090 72 73 65 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65  rse(Parse*, Toke
2f0a0 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  n*);.void sqlite
2f0b0 33 56 74 61 62 41 72 67 49 6e 69 74 28 50 61 72  3VtabArgInit(Par
2f0c0 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  se*);.void sqlit
2f0d0 65 33 56 74 61 62 41 72 67 45 78 74 65 6e 64 28  e3VtabArgExtend(
2f0e0 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 29 3b  Parse*, Token*);
2f0f0 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62  .int sqlite3Vtab
2f100 43 61 6c 6c 43 72 65 61 74 65 28 73 71 6c 69 74  CallCreate(sqlit
2f110 65 33 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20  e3*, int, const 
2f120 63 68 61 72 20 2a 2c 20 63 68 61 72 20 2a 2a 29  char *, char **)
2f130 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61  ;.int sqlite3Vta
2f140 62 43 61 6c 6c 43 6f 6e 6e 65 63 74 28 50 61 72  bCallConnect(Par
2f150 73 65 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a 69 6e  se*, Table*);.in
2f160 74 20 73 71 6c 69 74 65 33 56 74 61 62 43 61 6c  t sqlite3VtabCal
2f170 6c 44 65 73 74 72 6f 79 28 73 71 6c 69 74 65 33  lDestroy(sqlite3
2f180 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68  *, int, const ch
2f190 61 72 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ar *);.int sqlit
2f1a0 65 33 56 74 61 62 42 65 67 69 6e 28 73 71 6c 69  e3VtabBegin(sqli
2f1b0 74 65 33 20 2a 2c 20 56 54 61 62 6c 65 20 2a 29  te3 *, VTable *)
2f1c0 3b 0a 46 75 6e 63 44 65 66 20 2a 73 71 6c 69 74  ;.FuncDef *sqlit
2f1d0 65 33 56 74 61 62 4f 76 65 72 6c 6f 61 64 46 75  e3VtabOverloadFu
2f1e0 6e 63 74 69 6f 6e 28 73 71 6c 69 74 65 33 20 2a  nction(sqlite3 *
2f1f0 2c 46 75 6e 63 44 65 66 2a 2c 20 69 6e 74 20 6e  ,FuncDef*, int n
2f200 41 72 67 2c 20 45 78 70 72 2a 29 3b 0a 73 71 6c  Arg, Expr*);.sql
2f210 69 74 65 33 5f 69 6e 74 36 34 20 73 71 6c 69 74  ite3_int64 sqlit
2f220 65 33 53 74 6d 74 43 75 72 72 65 6e 74 54 69 6d  e3StmtCurrentTim
2f230 65 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78  e(sqlite3_contex
2f240 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  t*);.int sqlite3
2f250 56 64 62 65 50 61 72 61 6d 65 74 65 72 49 6e 64  VdbeParameterInd
2f260 65 78 28 56 64 62 65 2a 2c 20 63 6f 6e 73 74 20  ex(Vdbe*, const 
2f270 63 68 61 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74  char*, int);.int
2f280 20 73 71 6c 69 74 65 33 54 72 61 6e 73 66 65 72   sqlite3Transfer
2f290 42 69 6e 64 69 6e 67 73 28 73 71 6c 69 74 65 33  Bindings(sqlite3
2f2a0 5f 73 74 6d 74 20 2a 2c 20 73 71 6c 69 74 65 33  _stmt *, sqlite3
2f2b0 5f 73 74 6d 74 20 2a 29 3b 0a 76 6f 69 64 20 73  _stmt *);.void s
2f2c0 71 6c 69 74 65 33 50 61 72 73 65 72 52 65 73 65  qlite3ParserRese
2f2d0 74 28 50 61 72 73 65 2a 29 3b 0a 23 69 66 64 65  t(Parse*);.#ifde
2f2e0 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
2f2f0 4e 4f 52 4d 41 4c 49 5a 45 0a 76 6f 69 64 20 73  NORMALIZE.void s
2f300 71 6c 69 74 65 33 4e 6f 72 6d 61 6c 69 7a 65 28  qlite3Normalize(
2f310 56 64 62 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61  Vdbe*, const cha
2f320 72 2a 2c 20 69 6e 74 2c 20 75 38 29 3b 0a 23 65  r*, int, u8);.#e
2f330 6e 64 69 66 0a 69 6e 74 20 73 71 6c 69 74 65 33  ndif.int sqlite3
2f340 52 65 70 72 65 70 61 72 65 28 56 64 62 65 2a 29  Reprepare(Vdbe*)
2f350 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
2f360 70 72 4c 69 73 74 43 68 65 63 6b 4c 65 6e 67 74  prListCheckLengt
2f370 68 28 50 61 72 73 65 2a 2c 20 45 78 70 72 4c 69  h(Parse*, ExprLi
2f380 73 74 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  st*, const char*
2f390 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73 71 6c 69  );.CollSeq *sqli
2f3a0 74 65 33 42 69 6e 61 72 79 43 6f 6d 70 61 72 65  te3BinaryCompare
2f3b0 43 6f 6c 6c 53 65 71 28 50 61 72 73 65 20 2a 2c  CollSeq(Parse *,
2f3c0 20 45 78 70 72 20 2a 2c 20 45 78 70 72 20 2a 29   Expr *, Expr *)
2f3d0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 54 65 6d  ;.int sqlite3Tem
2f3e0 70 49 6e 4d 65 6d 6f 72 79 28 63 6f 6e 73 74 20  pInMemory(const 
2f3f0 73 71 6c 69 74 65 33 2a 29 3b 0a 63 6f 6e 73 74  sqlite3*);.const
2f400 20 63 68 61 72 20 2a 73 71 6c 69 74 65 33 4a 6f   char *sqlite3Jo
2f410 75 72 6e 61 6c 4d 6f 64 65 6e 61 6d 65 28 69 6e  urnalModename(in
2f420 74 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  t);.#ifndef SQLI
2f430 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a 20 20 69 6e  TE_OMIT_WAL.  in
2f440 74 20 73 71 6c 69 74 65 33 43 68 65 63 6b 70 6f  t sqlite3Checkpo
2f450 69 6e 74 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e  int(sqlite3*, in
2f460 74 2c 20 69 6e 74 2c 20 69 6e 74 2a 2c 20 69 6e  t, int, int*, in
2f470 74 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74  t*);.  int sqlit
2f480 65 33 57 61 6c 44 65 66 61 75 6c 74 48 6f 6f 6b  e3WalDefaultHook
2f490 28 76 6f 69 64 2a 2c 73 71 6c 69 74 65 33 2a 2c  (void*,sqlite3*,
2f4a0 63 6f 6e 73 74 20 63 68 61 72 2a 2c 69 6e 74 29  const char*,int)
2f4b0 3b 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66  ;.#endif.#ifndef
2f4c0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 54 45   SQLITE_OMIT_CTE
2f4d0 0a 20 20 57 69 74 68 20 2a 73 71 6c 69 74 65 33  .  With *sqlite3
2f4e0 57 69 74 68 41 64 64 28 50 61 72 73 65 2a 2c 57  WithAdd(Parse*,W
2f4f0 69 74 68 2a 2c 54 6f 6b 65 6e 2a 2c 45 78 70 72  ith*,Token*,Expr
2f500 4c 69 73 74 2a 2c 53 65 6c 65 63 74 2a 29 3b 0a  List*,Select*);.
2f510 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 57 69    void sqlite3Wi
2f520 74 68 44 65 6c 65 74 65 28 73 71 6c 69 74 65 33  thDelete(sqlite3
2f530 2a 2c 57 69 74 68 2a 29 3b 0a 20 20 76 6f 69 64  *,With*);.  void
2f540 20 73 71 6c 69 74 65 33 57 69 74 68 50 75 73 68   sqlite3WithPush
2f550 28 50 61 72 73 65 2a 2c 20 57 69 74 68 2a 2c 20  (Parse*, With*, 
2f560 75 38 29 3b 0a 23 65 6c 73 65 0a 23 64 65 66 69  u8);.#else.#defi
2f570 6e 65 20 73 71 6c 69 74 65 33 57 69 74 68 50 75  ne sqlite3WithPu
2f580 73 68 28 78 2c 79 2c 7a 29 0a 23 64 65 66 69 6e  sh(x,y,z).#defin
2f590 65 20 73 71 6c 69 74 65 33 57 69 74 68 44 65 6c  e sqlite3WithDel
2f5a0 65 74 65 28 78 2c 79 29 0a 23 65 6e 64 69 66 0a  ete(x,y).#endif.
2f5b0 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
2f5c0 4d 49 54 5f 55 50 53 45 52 54 0a 20 20 55 70 73  MIT_UPSERT.  Ups
2f5d0 65 72 74 20 2a 73 71 6c 69 74 65 33 55 70 73 65  ert *sqlite3Upse
2f5e0 72 74 4e 65 77 28 73 71 6c 69 74 65 33 2a 2c 45  rtNew(sqlite3*,E
2f5f0 78 70 72 4c 69 73 74 2a 2c 45 78 70 72 2a 2c 45  xprList*,Expr*,E
2f600 78 70 72 4c 69 73 74 2a 2c 45 78 70 72 2a 29 3b  xprList*,Expr*);
2f610 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 55  .  void sqlite3U
2f620 70 73 65 72 74 44 65 6c 65 74 65 28 73 71 6c 69  psertDelete(sqli
2f630 74 65 33 2a 2c 55 70 73 65 72 74 2a 29 3b 0a 20  te3*,Upsert*);. 
2f640 20 55 70 73 65 72 74 20 2a 73 71 6c 69 74 65 33   Upsert *sqlite3
2f650 55 70 73 65 72 74 44 75 70 28 73 71 6c 69 74 65  UpsertDup(sqlite
2f660 33 2a 2c 55 70 73 65 72 74 2a 29 3b 0a 20 20 69  3*,Upsert*);.  i
2f670 6e 74 20 73 71 6c 69 74 65 33 55 70 73 65 72 74  nt sqlite3Upsert
2f680 41 6e 61 6c 79 7a 65 54 61 72 67 65 74 28 50 61  AnalyzeTarget(Pa
2f690 72 73 65 2a 2c 53 72 63 4c 69 73 74 2a 2c 55 70  rse*,SrcList*,Up
2f6a0 73 65 72 74 2a 29 3b 0a 20 20 76 6f 69 64 20 73  sert*);.  void s
2f6b0 71 6c 69 74 65 33 55 70 73 65 72 74 44 6f 55 70  qlite3UpsertDoUp
2f6c0 64 61 74 65 28 50 61 72 73 65 2a 2c 55 70 73 65  date(Parse*,Upse
2f6d0 72 74 2a 2c 54 61 62 6c 65 2a 2c 49 6e 64 65 78  rt*,Table*,Index
2f6e0 2a 2c 69 6e 74 29 3b 0a 23 65 6c 73 65 0a 23 64  *,int);.#else.#d
2f6f0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 55 70 73  efine sqlite3Ups
2f700 65 72 74 4e 65 77 28 76 2c 77 2c 78 2c 79 2c 7a  ertNew(v,w,x,y,z
2f710 29 20 28 28 55 70 73 65 72 74 2a 29 30 29 0a 23  ) ((Upsert*)0).#
2f720 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 55 70  define sqlite3Up
2f730 73 65 72 74 44 65 6c 65 74 65 28 78 2c 79 29 0a  sertDelete(x,y).
2f740 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 55  #define sqlite3U
2f750 70 73 65 72 74 44 75 70 28 78 2c 79 29 20 20 20  psertDup(x,y)   
2f760 20 20 20 20 28 28 55 70 73 65 72 74 2a 29 30 29      ((Upsert*)0)
2f770 0a 23 65 6e 64 69 66 0a 0a 0a 2f 2a 20 44 65 63  .#endif.../* Dec
2f780 6c 61 72 61 74 69 6f 6e 73 20 66 6f 72 20 66 75  larations for fu
2f790 6e 63 74 69 6f 6e 73 20 69 6e 20 66 6b 65 79 2e  nctions in fkey.
2f7a0 63 2e 20 41 6c 6c 20 6f 66 20 74 68 65 73 65 20  c. All of these 
2f7b0 61 72 65 20 72 65 70 6c 61 63 65 64 20 62 79 0a  are replaced by.
2f7c0 2a 2a 20 6e 6f 2d 6f 70 20 6d 61 63 72 6f 73 20  ** no-op macros 
2f7d0 69 66 20 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f  if OMIT_FOREIGN_
2f7e0 4b 45 59 20 69 73 20 64 65 66 69 6e 65 64 2e 20  KEY is defined. 
2f7f0 49 6e 20 74 68 69 73 20 63 61 73 65 20 6e 6f 20  In this case no 
2f800 66 6f 72 65 69 67 6e 0a 2a 2a 20 6b 65 79 20 66  foreign.** key f
2f810 75 6e 63 74 69 6f 6e 61 6c 69 74 79 20 69 73 20  unctionality is 
2f820 61 76 61 69 6c 61 62 6c 65 2e 20 49 66 20 4f 4d  available. If OM
2f830 49 54 5f 54 52 49 47 47 45 52 20 69 73 20 64 65  IT_TRIGGER is de
2f840 66 69 6e 65 64 20 62 75 74 0a 2a 2a 20 4f 4d 49  fined but.** OMI
2f850 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 20 69 73  T_FOREIGN_KEY is
2f860 20 6e 6f 74 2c 20 6f 6e 6c 79 20 73 6f 6d 65 20   not, only some 
2f870 6f 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 73  of the functions
2f880 20 61 72 65 20 6e 6f 2d 6f 70 65 64 2e 20 49 6e   are no-oped. In
2f890 0a 2a 2a 20 74 68 69 73 20 63 61 73 65 20 66 6f  .** this case fo
2f8a0 72 65 69 67 6e 20 6b 65 79 73 20 61 72 65 20 70  reign keys are p
2f8b0 61 72 73 65 64 2c 20 62 75 74 20 6e 6f 20 6f 74  arsed, but no ot
2f8c0 68 65 72 20 66 75 6e 63 74 69 6f 6e 61 6c 69 74  her functionalit
2f8d0 79 20 69 73 0a 2a 2a 20 70 72 6f 76 69 64 65 64  y is.** provided
2f8e0 20 28 65 6e 66 6f 72 63 65 6d 65 6e 74 20 6f 66   (enforcement of
2f8f0 20 46 4b 20 63 6f 6e 73 74 72 61 69 6e 74 73 20   FK constraints 
2f900 72 65 71 75 69 72 65 73 20 74 68 65 20 74 72 69  requires the tri
2f910 67 67 65 72 73 20 73 75 62 2d 73 79 73 74 65 6d  ggers sub-system
2f920 29 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e  )..*/.#if !defin
2f930 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46  ed(SQLITE_OMIT_F
2f940 4f 52 45 49 47 4e 5f 4b 45 59 29 20 26 26 20 21  OREIGN_KEY) && !
2f950 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
2f960 4d 49 54 5f 54 52 49 47 47 45 52 29 0a 20 20 76  MIT_TRIGGER).  v
2f970 6f 69 64 20 73 71 6c 69 74 65 33 46 6b 43 68 65  oid sqlite3FkChe
2f980 63 6b 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65  ck(Parse*, Table
2f990 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74  *, int, int, int
2f9a0 2a 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20  *, int);.  void 
2f9b0 73 71 6c 69 74 65 33 46 6b 44 72 6f 70 54 61 62  sqlite3FkDropTab
2f9c0 6c 65 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69  le(Parse*, SrcLi
2f9d0 73 74 20 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a 20  st *, Table*);. 
2f9e0 20 76 6f 69 64 20 73 71 6c 69 74 65 33 46 6b 41   void sqlite3FkA
2f9f0 63 74 69 6f 6e 73 28 50 61 72 73 65 2a 2c 20 54  ctions(Parse*, T
2fa00 61 62 6c 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a  able*, ExprList*
2fa10 2c 20 69 6e 74 2c 20 69 6e 74 2a 2c 20 69 6e 74  , int, int*, int
2fa20 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33  );.  int sqlite3
2fa30 46 6b 52 65 71 75 69 72 65 64 28 50 61 72 73 65  FkRequired(Parse
2fa40 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2a 2c  *, Table*, int*,
2fa50 20 69 6e 74 29 3b 0a 20 20 75 33 32 20 73 71 6c   int);.  u32 sql
2fa60 69 74 65 33 46 6b 4f 6c 64 6d 61 73 6b 28 50 61  ite3FkOldmask(Pa
2fa70 72 73 65 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a 20  rse*, Table*);. 
2fa80 20 46 4b 65 79 20 2a 73 71 6c 69 74 65 33 46 6b   FKey *sqlite3Fk
2fa90 52 65 66 65 72 65 6e 63 65 73 28 54 61 62 6c 65  References(Table
2faa0 20 2a 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65   *);.#else.  #de
2fab0 66 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 41 63  fine sqlite3FkAc
2fac0 74 69 6f 6e 73 28 61 2c 62 2c 63 2c 64 2c 65 2c  tions(a,b,c,d,e,
2fad0 66 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c  f).  #define sql
2fae0 69 74 65 33 46 6b 43 68 65 63 6b 28 61 2c 62 2c  ite3FkCheck(a,b,
2faf0 63 2c 64 2c 65 2c 66 29 0a 20 20 23 64 65 66 69  c,d,e,f).  #defi
2fb00 6e 65 20 73 71 6c 69 74 65 33 46 6b 44 72 6f 70  ne sqlite3FkDrop
2fb10 54 61 62 6c 65 28 61 2c 62 2c 63 29 0a 20 20 23  Table(a,b,c).  #
2fb20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46 6b  define sqlite3Fk
2fb30 4f 6c 64 6d 61 73 6b 28 61 2c 62 29 20 20 20 20  Oldmask(a,b)    
2fb40 20 20 20 20 20 30 0a 20 20 23 64 65 66 69 6e 65       0.  #define
2fb50 20 73 71 6c 69 74 65 33 46 6b 52 65 71 75 69 72   sqlite3FkRequir
2fb60 65 64 28 61 2c 62 2c 63 2c 64 29 20 20 20 20 30  ed(a,b,c,d)    0
2fb70 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74  .  #define sqlit
2fb80 65 33 46 6b 52 65 66 65 72 65 6e 63 65 73 28 61  e3FkReferences(a
2fb90 29 20 20 20 20 20 20 20 20 30 0a 23 65 6e 64 69  )        0.#endi
2fba0 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  f.#ifndef SQLITE
2fbb0 5f 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45  _OMIT_FOREIGN_KE
2fbc0 59 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  Y.  void sqlite3
2fbd0 46 6b 44 65 6c 65 74 65 28 73 71 6c 69 74 65 33  FkDelete(sqlite3
2fbe0 20 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a 20 20 69   *, Table*);.  i
2fbf0 6e 74 20 73 71 6c 69 74 65 33 46 6b 4c 6f 63 61  nt sqlite3FkLoca
2fc00 74 65 49 6e 64 65 78 28 50 61 72 73 65 2a 2c 54  teIndex(Parse*,T
2fc10 61 62 6c 65 2a 2c 46 4b 65 79 2a 2c 49 6e 64 65  able*,FKey*,Inde
2fc20 78 2a 2a 2c 69 6e 74 2a 2a 29 3b 0a 23 65 6c 73  x**,int**);.#els
2fc30 65 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69  e.  #define sqli
2fc40 74 65 33 46 6b 44 65 6c 65 74 65 28 61 2c 62 29  te3FkDelete(a,b)
2fc50 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74  .  #define sqlit
2fc60 65 33 46 6b 4c 6f 63 61 74 65 49 6e 64 65 78 28  e3FkLocateIndex(
2fc70 61 2c 62 2c 63 2c 64 2c 65 29 0a 23 65 6e 64 69  a,b,c,d,e).#endi
2fc80 66 0a 0a 0a 2f 2a 0a 2a 2a 20 41 76 61 69 6c 61  f.../*.** Availa
2fc90 62 6c 65 20 66 61 75 6c 74 20 69 6e 6a 65 63 74  ble fault inject
2fca0 6f 72 73 2e 20 20 53 68 6f 75 6c 64 20 62 65 20  ors.  Should be 
2fcb0 6e 75 6d 62 65 72 65 64 20 62 65 67 69 6e 6e 69  numbered beginni
2fcc0 6e 67 20 77 69 74 68 20 30 2e 0a 2a 2f 0a 23 64  ng with 0..*/.#d
2fcd0 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 41 55  efine SQLITE_FAU
2fce0 4c 54 49 4e 4a 45 43 54 4f 52 5f 4d 41 4c 4c 4f  LTINJECTOR_MALLO
2fcf0 43 20 20 20 20 20 30 0a 23 64 65 66 69 6e 65 20  C     0.#define 
2fd00 53 51 4c 49 54 45 5f 46 41 55 4c 54 49 4e 4a 45  SQLITE_FAULTINJE
2fd10 43 54 4f 52 5f 43 4f 55 4e 54 20 20 20 20 20 20  CTOR_COUNT      
2fd20 31 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 69 6e 74  1../*.** The int
2fd30 65 72 66 61 63 65 20 74 6f 20 74 68 65 20 63 6f  erface to the co
2fd40 64 65 20 69 6e 20 66 61 75 6c 74 2e 63 20 75 73  de in fault.c us
2fd50 65 64 20 66 6f 72 20 69 64 65 6e 74 69 66 79 69  ed for identifyi
2fd60 6e 67 20 22 62 65 6e 69 67 6e 22 0a 2a 2a 20 6d  ng "benign".** m
2fd70 61 6c 6c 6f 63 20 66 61 69 6c 75 72 65 73 2e 20  alloc failures. 
2fd80 54 68 69 73 20 69 73 20 6f 6e 6c 79 20 70 72 65  This is only pre
2fd90 73 65 6e 74 20 69 66 20 53 51 4c 49 54 45 5f 55  sent if SQLITE_U
2fda0 4e 54 45 53 54 41 42 4c 45 0a 2a 2a 20 69 73 20  NTESTABLE.** is 
2fdb0 6e 6f 74 20 64 65 66 69 6e 65 64 2e 0a 2a 2f 0a  not defined..*/.
2fdc0 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 55  #ifndef SQLITE_U
2fdd0 4e 54 45 53 54 41 42 4c 45 0a 20 20 76 6f 69 64  NTESTABLE.  void
2fde0 20 73 71 6c 69 74 65 33 42 65 67 69 6e 42 65 6e   sqlite3BeginBen
2fdf0 69 67 6e 4d 61 6c 6c 6f 63 28 76 6f 69 64 29 3b  ignMalloc(void);
2fe00 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 45  .  void sqlite3E
2fe10 6e 64 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28 76  ndBenignMalloc(v
2fe20 6f 69 64 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64  oid);.#else.  #d
2fe30 65 66 69 6e 65 20 73 71 6c 69 74 65 33 42 65 67  efine sqlite3Beg
2fe40 69 6e 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28 29  inBenignMalloc()
2fe50 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74  .  #define sqlit
2fe60 65 33 45 6e 64 42 65 6e 69 67 6e 4d 61 6c 6c 6f  e3EndBenignMallo
2fe70 63 28 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  c().#endif../*.*
2fe80 2a 20 41 6c 6c 6f 77 65 64 20 72 65 74 75 72 6e  * Allowed return
2fe90 20 76 61 6c 75 65 73 20 66 72 6f 6d 20 73 71 6c   values from sql
2fea0 69 74 65 33 46 69 6e 64 49 6e 49 6e 64 65 78 28  ite3FindInIndex(
2feb0 29 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f  ).*/.#define IN_
2fec0 49 4e 44 45 58 5f 52 4f 57 49 44 20 20 20 20 20  INDEX_ROWID     
2fed0 20 20 20 31 20 20 20 2f 2a 20 53 65 61 72 63 68     1   /* Search
2fee0 20 74 68 65 20 72 6f 77 69 64 20 6f 66 20 74 68   the rowid of th
2fef0 65 20 74 61 62 6c 65 20 2a 2f 0a 23 64 65 66 69  e table */.#defi
2ff00 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 45 50 48 20  ne IN_INDEX_EPH 
2ff10 20 20 20 20 20 20 20 20 20 32 20 20 20 2f 2a 20           2   /* 
2ff20 53 65 61 72 63 68 20 61 6e 20 65 70 68 65 6d 65  Search an epheme
2ff30 72 61 6c 20 62 2d 74 72 65 65 20 2a 2f 0a 23 64  ral b-tree */.#d
2ff40 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 49  efine IN_INDEX_I
2ff50 4e 44 45 58 5f 41 53 43 20 20 20 20 33 20 20 20  NDEX_ASC    3   
2ff60 2f 2a 20 45 78 69 73 74 69 6e 67 20 69 6e 64 65  /* Existing inde
2ff70 78 20 41 53 43 45 4e 44 49 4e 47 20 2a 2f 0a 23  x ASCENDING */.#
2ff80 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f  define IN_INDEX_
2ff90 49 4e 44 45 58 5f 44 45 53 43 20 20 20 34 20 20  INDEX_DESC   4  
2ffa0 20 2f 2a 20 45 78 69 73 74 69 6e 67 20 69 6e 64   /* Existing ind
2ffb0 65 78 20 44 45 53 43 45 4e 44 49 4e 47 20 2a 2f  ex DESCENDING */
2ffc0 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45  .#define IN_INDE
2ffd0 58 5f 4e 4f 4f 50 20 20 20 20 20 20 20 20 20 35  X_NOOP         5
2ffe0 20 20 20 2f 2a 20 4e 6f 20 74 61 62 6c 65 20 61     /* No table a
2fff0 76 61 69 6c 61 62 6c 65 2e 20 55 73 65 20 63 6f  vailable. Use co
30000 6d 70 61 72 69 73 6f 6e 73 20 2a 2f 0a 2f 2a 0a  mparisons */./*.
30010 2a 2a 20 41 6c 6c 6f 77 65 64 20 66 6c 61 67 73  ** Allowed flags
30020 20 66 6f 72 20 74 68 65 20 33 72 64 20 70 61 72   for the 3rd par
30030 61 6d 65 74 65 72 20 74 6f 20 73 71 6c 69 74 65  ameter to sqlite
30040 33 46 69 6e 64 49 6e 49 6e 64 65 78 28 29 2e 0a  3FindInIndex()..
30050 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e  */.#define IN_IN
30060 44 45 58 5f 4e 4f 4f 50 5f 4f 4b 20 20 20 20 20  DEX_NOOP_OK     
30070 30 78 30 30 30 31 20 20 2f 2a 20 4f 4b 20 74 6f  0x0001  /* OK to
30080 20 72 65 74 75 72 6e 20 49 4e 5f 49 4e 44 45 58   return IN_INDEX
30090 5f 4e 4f 4f 50 20 2a 2f 0a 23 64 65 66 69 6e 65  _NOOP */.#define
300a0 20 49 4e 5f 49 4e 44 45 58 5f 4d 45 4d 42 45 52   IN_INDEX_MEMBER
300b0 53 48 49 50 20 20 30 78 30 30 30 32 20 20 2f 2a  SHIP  0x0002  /*
300c0 20 49 4e 20 6f 70 65 72 61 74 6f 72 20 75 73 65   IN operator use
300d0 64 20 66 6f 72 20 6d 65 6d 62 65 72 73 68 69 70  d for membership
300e0 20 74 65 73 74 20 2a 2f 0a 23 64 65 66 69 6e 65   test */.#define
300f0 20 49 4e 5f 49 4e 44 45 58 5f 4c 4f 4f 50 20 20   IN_INDEX_LOOP  
30100 20 20 20 20 20 20 30 78 30 30 30 34 20 20 2f 2a        0x0004  /*
30110 20 49 4e 20 6f 70 65 72 61 74 6f 72 20 75 73 65   IN operator use
30120 64 20 61 73 20 61 20 6c 6f 6f 70 20 2a 2f 0a 69  d as a loop */.i
30130 6e 74 20 73 71 6c 69 74 65 33 46 69 6e 64 49 6e  nt sqlite3FindIn
30140 49 6e 64 65 78 28 50 61 72 73 65 20 2a 2c 20 45  Index(Parse *, E
30150 78 70 72 20 2a 2c 20 75 33 32 2c 20 69 6e 74 2a  xpr *, u32, int*
30160 2c 20 69 6e 74 2a 29 3b 0a 0a 69 6e 74 20 73 71  , int*);..int sq
30170 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 4f 70 65 6e  lite3JournalOpen
30180 28 73 71 6c 69 74 65 33 5f 76 66 73 20 2a 2c 20  (sqlite3_vfs *, 
30190 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20 73 71  const char *, sq
301a0 6c 69 74 65 33 5f 66 69 6c 65 20 2a 2c 20 69 6e  lite3_file *, in
301b0 74 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c  t, int);.int sql
301c0 69 74 65 33 4a 6f 75 72 6e 61 6c 53 69 7a 65 28  ite3JournalSize(
301d0 73 71 6c 69 74 65 33 5f 76 66 73 20 2a 29 3b 0a  sqlite3_vfs *);.
301e0 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49  #if defined(SQLI
301f0 54 45 5f 45 4e 41 42 4c 45 5f 41 54 4f 4d 49 43  TE_ENABLE_ATOMIC
30200 5f 57 52 49 54 45 29 20 5c 0a 20 7c 7c 20 64 65  _WRITE) \. || de
30210 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41  fined(SQLITE_ENA
30220 42 4c 45 5f 42 41 54 43 48 5f 41 54 4f 4d 49 43  BLE_BATCH_ATOMIC
30230 5f 57 52 49 54 45 29 0a 20 20 69 6e 74 20 73 71  _WRITE).  int sq
30240 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 43 72 65 61  lite3JournalCrea
30250 74 65 28 73 71 6c 69 74 65 33 5f 66 69 6c 65 20  te(sqlite3_file 
30260 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 69 6e 74 20  *);.#endif..int 
30270 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 49 73  sqlite3JournalIs
30280 49 6e 4d 65 6d 6f 72 79 28 73 71 6c 69 74 65 33  InMemory(sqlite3
30290 5f 66 69 6c 65 20 2a 70 29 3b 0a 76 6f 69 64 20  _file *p);.void 
302a0 73 71 6c 69 74 65 33 4d 65 6d 4a 6f 75 72 6e 61  sqlite3MemJourna
302b0 6c 4f 70 65 6e 28 73 71 6c 69 74 65 33 5f 66 69  lOpen(sqlite3_fi
302c0 6c 65 20 2a 29 3b 0a 0a 76 6f 69 64 20 73 71 6c  le *);..void sql
302d0 69 74 65 33 45 78 70 72 53 65 74 48 65 69 67 68  ite3ExprSetHeigh
302e0 74 41 6e 64 46 6c 61 67 73 28 50 61 72 73 65 20  tAndFlags(Parse 
302f0 2a 70 50 61 72 73 65 2c 20 45 78 70 72 20 2a 70  *pParse, Expr *p
30300 29 3b 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d 41  );.#if SQLITE_MA
30310 58 5f 45 58 50 52 5f 44 45 50 54 48 3e 30 0a 20  X_EXPR_DEPTH>0. 
30320 20 69 6e 74 20 73 71 6c 69 74 65 33 53 65 6c 65   int sqlite3Sele
30330 63 74 45 78 70 72 48 65 69 67 68 74 28 53 65 6c  ctExprHeight(Sel
30340 65 63 74 20 2a 29 3b 0a 20 20 69 6e 74 20 73 71  ect *);.  int sq
30350 6c 69 74 65 33 45 78 70 72 43 68 65 63 6b 48 65  lite3ExprCheckHe
30360 69 67 68 74 28 50 61 72 73 65 2a 2c 20 69 6e 74  ight(Parse*, int
30370 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69  );.#else.  #defi
30380 6e 65 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74  ne sqlite3Select
30390 45 78 70 72 48 65 69 67 68 74 28 78 29 20 30 0a  ExprHeight(x) 0.
303a0 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65    #define sqlite
303b0 33 45 78 70 72 43 68 65 63 6b 48 65 69 67 68 74  3ExprCheckHeight
303c0 28 78 2c 79 29 0a 23 65 6e 64 69 66 0a 0a 75 33  (x,y).#endif..u3
303d0 32 20 73 71 6c 69 74 65 33 47 65 74 34 62 79 74  2 sqlite3Get4byt
303e0 65 28 63 6f 6e 73 74 20 75 38 2a 29 3b 0a 76 6f  e(const u8*);.vo
303f0 69 64 20 73 71 6c 69 74 65 33 50 75 74 34 62 79  id sqlite3Put4by
30400 74 65 28 75 38 2a 2c 20 75 33 32 29 3b 0a 0a 23  te(u8*, u32);..#
30410 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  ifdef SQLITE_ENA
30420 42 4c 45 5f 55 4e 4c 4f 43 4b 5f 4e 4f 54 49 46  BLE_UNLOCK_NOTIF
30430 59 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  Y.  void sqlite3
30440 43 6f 6e 6e 65 63 74 69 6f 6e 42 6c 6f 63 6b 65  ConnectionBlocke
30450 64 28 73 71 6c 69 74 65 33 20 2a 2c 20 73 71 6c  d(sqlite3 *, sql
30460 69 74 65 33 20 2a 29 3b 0a 20 20 76 6f 69 64 20  ite3 *);.  void 
30470 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f  sqlite3Connectio
30480 6e 55 6e 6c 6f 63 6b 65 64 28 73 71 6c 69 74 65  nUnlocked(sqlite
30490 33 20 2a 64 62 29 3b 0a 20 20 76 6f 69 64 20 73  3 *db);.  void s
304a0 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e  qlite3Connection
304b0 43 6c 6f 73 65 64 28 73 71 6c 69 74 65 33 20 2a  Closed(sqlite3 *
304c0 64 62 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65  db);.#else.  #de
304d0 66 69 6e 65 20 73 71 6c 69 74 65 33 43 6f 6e 6e  fine sqlite3Conn
304e0 65 63 74 69 6f 6e 42 6c 6f 63 6b 65 64 28 78 2c  ectionBlocked(x,
304f0 79 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c  y).  #define sql
30500 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 55 6e  ite3ConnectionUn
30510 6c 6f 63 6b 65 64 28 78 29 0a 20 20 23 64 65 66  locked(x).  #def
30520 69 6e 65 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65  ine sqlite3Conne
30530 63 74 69 6f 6e 43 6c 6f 73 65 64 28 78 29 0a 23  ctionClosed(x).#
30540 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51  endif..#ifdef SQ
30550 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 76 6f 69  LITE_DEBUG.  voi
30560 64 20 73 71 6c 69 74 65 33 50 61 72 73 65 72 54  d sqlite3ParserT
30570 72 61 63 65 28 46 49 4c 45 2a 2c 20 63 68 61 72  race(FILE*, char
30580 20 2a 29 3b 0a 23 65 6e 64 69 66 0a 23 69 66 20   *);.#endif.#if 
30590 64 65 66 69 6e 65 64 28 59 59 43 4f 56 45 52 41  defined(YYCOVERA
305a0 47 45 29 0a 20 20 69 6e 74 20 73 71 6c 69 74 65  GE).  int sqlite
305b0 33 50 61 72 73 65 72 43 6f 76 65 72 61 67 65 28  3ParserCoverage(
305c0 46 49 4c 45 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a  FILE*);.#endif..
305d0 2f 2a 0a 2a 2a 20 49 66 20 74 68 65 20 53 51 4c  /*.** If the SQL
305e0 49 54 45 5f 45 4e 41 42 4c 45 20 49 4f 54 52 41  ITE_ENABLE IOTRA
305f0 43 45 20 65 78 69 73 74 73 20 74 68 65 6e 20 74  CE exists then t
30600 68 65 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62  he global variab
30610 6c 65 0a 2a 2a 20 73 71 6c 69 74 65 33 49 6f 54  le.** sqlite3IoT
30620 72 61 63 65 20 69 73 20 61 20 70 6f 69 6e 74 65  race is a pointe
30630 72 20 74 6f 20 61 20 70 72 69 6e 74 66 2d 6c 69  r to a printf-li
30640 6b 65 20 72 6f 75 74 69 6e 65 20 75 73 65 64 20  ke routine used 
30650 74 6f 0a 2a 2a 20 70 72 69 6e 74 20 49 2f 4f 20  to.** print I/O 
30660 74 72 61 63 69 6e 67 20 6d 65 73 73 61 67 65 73  tracing messages
30670 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49  ..*/.#ifdef SQLI
30680 54 45 5f 45 4e 41 42 4c 45 5f 49 4f 54 52 41 43  TE_ENABLE_IOTRAC
30690 45 0a 23 20 64 65 66 69 6e 65 20 49 4f 54 52 41  E.# define IOTRA
306a0 43 45 28 41 29 20 20 69 66 28 20 73 71 6c 69 74  CE(A)  if( sqlit
306b0 65 33 49 6f 54 72 61 63 65 20 29 7b 20 73 71 6c  e3IoTrace ){ sql
306c0 69 74 65 33 49 6f 54 72 61 63 65 20 41 3b 20 7d  ite3IoTrace A; }
306d0 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 56  .  void sqlite3V
306e0 64 62 65 49 4f 54 72 61 63 65 53 71 6c 28 56 64  dbeIOTraceSql(Vd
306f0 62 65 2a 29 3b 0a 53 51 4c 49 54 45 5f 41 50 49  be*);.SQLITE_API
30700 20 53 51 4c 49 54 45 5f 45 58 54 45 52 4e 20 76   SQLITE_EXTERN v
30710 6f 69 64 20 28 53 51 4c 49 54 45 5f 43 44 45 43  oid (SQLITE_CDEC
30720 4c 20 2a 73 71 6c 69 74 65 33 49 6f 54 72 61 63  L *sqlite3IoTrac
30730 65 29 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 2e  e)(const char*,.
30740 2e 2e 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66  ..);.#else.# def
30750 69 6e 65 20 49 4f 54 52 41 43 45 28 41 29 0a 23  ine IOTRACE(A).#
30760 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56   define sqlite3V
30770 64 62 65 49 4f 54 72 61 63 65 53 71 6c 28 58 29  dbeIOTraceSql(X)
30780 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54  .#endif../*.** T
30790 68 65 73 65 20 72 6f 75 74 69 6e 65 73 20 61 72  hese routines ar
307a0 65 20 61 76 61 69 6c 61 62 6c 65 20 66 6f 72 20  e available for 
307b0 74 68 65 20 6d 65 6d 32 2e 63 20 64 65 62 75 67  the mem2.c debug
307c0 67 69 6e 67 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f  ging memory allo
307d0 63 61 74 6f 72 0a 2a 2a 20 6f 6e 6c 79 2e 20 20  cator.** only.  
307e0 54 68 65 79 20 61 72 65 20 75 73 65 64 20 74 6f  They are used to
307f0 20 76 65 72 69 66 79 20 74 68 61 74 20 64 69 66   verify that dif
30800 66 65 72 65 6e 74 20 22 74 79 70 65 73 22 20 6f  ferent "types" o
30810 66 20 6d 65 6d 6f 72 79 0a 2a 2a 20 61 6c 6c 6f  f memory.** allo
30820 63 61 74 69 6f 6e 73 20 61 72 65 20 70 72 6f 70  cations are prop
30830 65 72 6c 79 20 74 72 61 63 6b 65 64 20 62 79 20  erly tracked by 
30840 74 68 65 20 73 79 73 74 65 6d 2e 0a 2a 2a 0a 2a  the system..**.*
30850 2a 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75  * sqlite3Memdebu
30860 67 53 65 74 54 79 70 65 28 29 20 73 65 74 73 20  gSetType() sets 
30870 74 68 65 20 22 74 79 70 65 22 20 6f 66 20 61 6e  the "type" of an
30880 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 74 6f 20 6f   allocation to o
30890 6e 65 20 6f 66 0a 2a 2a 20 74 68 65 20 4d 45 4d  ne of.** the MEM
308a0 54 59 50 45 5f 2a 20 6d 61 63 72 6f 73 20 64 65  TYPE_* macros de
308b0 66 69 6e 65 64 20 62 65 6c 6f 77 2e 20 20 54 68  fined below.  Th
308c0 65 20 74 79 70 65 20 6d 75 73 74 20 62 65 20 61  e type must be a
308d0 20 62 69 74 6d 61 73 6b 20 77 69 74 68 0a 2a 2a   bitmask with.**
308e0 20 61 20 73 69 6e 67 6c 65 20 62 69 74 20 73 65   a single bit se
308f0 74 2e 0a 2a 2a 0a 2a 2a 20 73 71 6c 69 74 65 33  t..**.** sqlite3
30900 4d 65 6d 64 65 62 75 67 48 61 73 54 79 70 65 28  MemdebugHasType(
30910 29 20 72 65 74 75 72 6e 73 20 74 72 75 65 20 69  ) returns true i
30920 66 20 61 6e 79 20 6f 66 20 74 68 65 20 62 69 74  f any of the bit
30930 73 20 69 6e 20 69 74 73 20 73 65 63 6f 6e 64 0a  s in its second.
30940 2a 2a 20 61 72 67 75 6d 65 6e 74 20 6d 61 74 63  ** argument matc
30950 68 20 74 68 65 20 74 79 70 65 20 73 65 74 20 62  h the type set b
30960 79 20 74 68 65 20 70 72 65 76 69 6f 75 73 20 73  y the previous s
30970 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 53 65  qlite3MemdebugSe
30980 74 54 79 70 65 28 29 2e 0a 2a 2a 20 73 71 6c 69  tType()..** sqli
30990 74 65 33 4d 65 6d 64 65 62 75 67 48 61 73 54 79  te3MemdebugHasTy
309a0 70 65 28 29 20 69 73 20 69 6e 74 65 6e 64 65 64  pe() is intended
309b0 20 66 6f 72 20 75 73 65 20 69 6e 73 69 64 65 20   for use inside 
309c0 61 73 73 65 72 74 28 29 20 73 74 61 74 65 6d 65  assert() stateme
309d0 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20 73 71 6c 69 74  nts..**.** sqlit
309e0 65 33 4d 65 6d 64 65 62 75 67 4e 6f 54 79 70 65  e3MemdebugNoType
309f0 28 29 20 72 65 74 75 72 6e 73 20 74 72 75 65 20  () returns true 
30a00 69 66 20 6e 6f 6e 65 20 6f 66 20 74 68 65 20 62  if none of the b
30a10 69 74 73 20 69 6e 20 69 74 73 20 73 65 63 6f 6e  its in its secon
30a20 64 0a 2a 2a 20 61 72 67 75 6d 65 6e 74 20 6d 61  d.** argument ma
30a30 74 63 68 20 74 68 65 20 74 79 70 65 20 73 65 74  tch the type set
30a40 20 62 79 20 74 68 65 20 70 72 65 76 69 6f 75 73   by the previous
30a50 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67   sqlite3Memdebug
30a60 53 65 74 54 79 70 65 28 29 2e 0a 2a 2a 0a 2a 2a  SetType()..**.**
30a70 20 50 65 72 68 61 70 73 20 74 68 65 20 6d 6f 73   Perhaps the mos
30a80 74 20 69 6d 70 6f 72 74 61 6e 74 20 70 6f 69 6e  t important poin
30a90 74 20 69 73 20 74 68 65 20 64 69 66 66 65 72 65  t is the differe
30aa0 6e 63 65 20 62 65 74 77 65 65 6e 20 4d 45 4d 54  nce between MEMT
30ab0 59 50 45 5f 48 45 41 50 0a 2a 2a 20 61 6e 64 20  YPE_HEAP.** and 
30ac0 4d 45 4d 54 59 50 45 5f 4c 4f 4f 4b 41 53 49 44  MEMTYPE_LOOKASID
30ad0 45 2e 20 20 49 66 20 61 6e 20 61 6c 6c 6f 63 61  E.  If an alloca
30ae0 74 69 6f 6e 20 69 73 20 4d 45 4d 54 59 50 45 5f  tion is MEMTYPE_
30af0 4c 4f 4f 4b 41 53 49 44 45 2c 20 74 68 61 74 20  LOOKASIDE, that 
30b00 6d 65 61 6e 73 0a 2a 2a 20 69 74 20 6d 69 67 68  means.** it migh
30b10 74 20 68 61 76 65 20 62 65 65 6e 20 61 6c 6c 6f  t have been allo
30b20 63 61 74 65 64 20 62 79 20 6c 6f 6f 6b 61 73 69  cated by lookasi
30b30 64 65 2c 20 65 78 63 65 70 74 20 74 68 65 20 61  de, except the a
30b40 6c 6c 6f 63 61 74 69 6f 6e 20 77 61 73 0a 2a 2a  llocation was.**
30b50 20 74 6f 6f 20 6c 61 72 67 65 20 6f 72 20 6c 6f   too large or lo
30b60 6f 6b 61 73 69 64 65 20 77 61 73 20 61 6c 72 65  okaside was alre
30b70 61 64 79 20 66 75 6c 6c 2e 20 20 49 74 20 69 73  ady full.  It is
30b80 20 69 6d 70 6f 72 74 61 6e 74 20 74 6f 20 76 65   important to ve
30b90 72 69 66 79 0a 2a 2a 20 74 68 61 74 20 61 6c 6c  rify.** that all
30ba0 6f 63 61 74 69 6f 6e 73 20 74 68 61 74 20 6d 69  ocations that mi
30bb0 67 68 74 20 68 61 76 65 20 62 65 65 6e 20 73 61  ght have been sa
30bc0 74 69 73 66 69 65 64 20 62 79 20 6c 6f 6f 6b 61  tisfied by looka
30bd0 73 69 64 65 20 61 72 65 20 6e 6f 74 0a 2a 2a 20  side are not.** 
30be0 70 61 73 73 65 64 20 62 61 63 6b 20 74 6f 20 6e  passed back to n
30bf0 6f 6e 2d 6c 6f 6f 6b 61 73 69 64 65 20 66 72 65  on-lookaside fre
30c00 65 28 29 20 72 6f 75 74 69 6e 65 73 2e 20 20 41  e() routines.  A
30c10 73 73 65 72 74 73 20 73 75 63 68 20 61 73 20 74  sserts such as t
30c20 68 65 0a 2a 2a 20 65 78 61 6d 70 6c 65 20 61 62  he.** example ab
30c30 6f 76 65 20 61 72 65 20 70 6c 61 63 65 64 20 6f  ove are placed o
30c40 6e 20 74 68 65 20 6e 6f 6e 2d 6c 6f 6f 6b 61 73  n the non-lookas
30c50 69 64 65 20 66 72 65 65 28 29 20 72 6f 75 74 69  ide free() routi
30c60 6e 65 73 20 74 6f 20 76 65 72 69 66 79 0a 2a 2a  nes to verify.**
30c70 20 74 68 69 73 20 63 6f 6e 73 74 72 61 69 6e 74   this constraint
30c80 2e 0a 2a 2a 0a 2a 2a 20 41 6c 6c 20 6f 66 20 74  ..**.** All of t
30c90 68 69 73 20 69 73 20 6e 6f 2d 6f 70 20 66 6f 72  his is no-op for
30ca0 20 61 20 70 72 6f 64 75 63 74 69 6f 6e 20 62 75   a production bu
30cb0 69 6c 64 2e 20 20 49 74 20 6f 6e 6c 79 20 63 6f  ild.  It only co
30cc0 6d 65 73 20 69 6e 74 6f 0a 2a 2a 20 70 6c 61 79  mes into.** play
30cd0 20 77 68 65 6e 20 74 68 65 20 53 51 4c 49 54 45   when the SQLITE
30ce0 5f 4d 45 4d 44 45 42 55 47 20 63 6f 6d 70 69 6c  _MEMDEBUG compil
30cf0 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 20 69 73  e-time option is
30d00 20 75 73 65 64 2e 0a 2a 2f 0a 23 69 66 64 65 66   used..*/.#ifdef
30d10 20 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47   SQLITE_MEMDEBUG
30d20 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 4d  .  void sqlite3M
30d30 65 6d 64 65 62 75 67 53 65 74 54 79 70 65 28 76  emdebugSetType(v
30d40 6f 69 64 2a 2c 75 38 29 3b 0a 20 20 69 6e 74 20  oid*,u8);.  int 
30d50 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 48  sqlite3MemdebugH
30d60 61 73 54 79 70 65 28 76 6f 69 64 2a 2c 75 38 29  asType(void*,u8)
30d70 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 4d  ;.  int sqlite3M
30d80 65 6d 64 65 62 75 67 4e 6f 54 79 70 65 28 76 6f  emdebugNoType(vo
30d90 69 64 2a 2c 75 38 29 3b 0a 23 65 6c 73 65 0a 23  id*,u8);.#else.#
30da0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 4d   define sqlite3M
30db0 65 6d 64 65 62 75 67 53 65 74 54 79 70 65 28 58  emdebugSetType(X
30dc0 2c 59 29 20 20 2f 2a 20 6e 6f 2d 6f 70 20 2a 2f  ,Y)  /* no-op */
30dd0 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
30de0 33 4d 65 6d 64 65 62 75 67 48 61 73 54 79 70 65  3MemdebugHasType
30df0 28 58 2c 59 29 20 20 31 0a 23 20 64 65 66 69 6e  (X,Y)  1.# defin
30e00 65 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75  e sqlite3Memdebu
30e10 67 4e 6f 54 79 70 65 28 58 2c 59 29 20 20 20 31  gNoType(X,Y)   1
30e20 0a 23 65 6e 64 69 66 0a 23 64 65 66 69 6e 65 20  .#endif.#define 
30e30 4d 45 4d 54 59 50 45 5f 48 45 41 50 20 20 20 20  MEMTYPE_HEAP    
30e40 20 20 20 30 78 30 31 20 20 2f 2a 20 47 65 6e 65     0x01  /* Gene
30e50 72 61 6c 20 68 65 61 70 20 61 6c 6c 6f 63 61 74  ral heap allocat
30e60 69 6f 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ions */.#define 
30e70 4d 45 4d 54 59 50 45 5f 4c 4f 4f 4b 41 53 49 44  MEMTYPE_LOOKASID
30e80 45 20 20 30 78 30 32 20 20 2f 2a 20 48 65 61 70  E  0x02  /* Heap
30e90 20 74 68 61 74 20 6d 69 67 68 74 20 68 61 76 65   that might have
30ea0 20 62 65 65 6e 20 6c 6f 6f 6b 61 73 69 64 65 20   been lookaside 
30eb0 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 45 4d 54 59  */.#define MEMTY
30ec0 50 45 5f 50 43 41 43 48 45 20 20 20 20 20 30 78  PE_PCACHE     0x
30ed0 30 34 20 20 2f 2a 20 50 61 67 65 20 63 61 63 68  04  /* Page cach
30ee0 65 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 2a 2f  e allocations */
30ef0 0a 0a 23 69 66 20 28 53 51 4c 49 54 45 5f 45 4e  ..#if (SQLITE_EN
30f00 41 42 4c 45 5f 41 50 50 4c 45 5f 53 50 49 3e 30  ABLE_APPLE_SPI>0
30f10 29 20 26 26 20 64 65 66 69 6e 65 64 28 5f 5f 41  ) && defined(__A
30f20 50 50 4c 45 5f 5f 29 0a 0a 2f 2a 0a 2a 2a 20 41  PPLE__)../*.** A
30f30 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  n instance of th
30f40 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75  e following stru
30f50 63 74 75 72 65 20 69 73 20 75 73 65 64 20 74 6f  cture is used to
30f60 20 68 6f 6c 64 20 74 68 65 20 70 72 6f 63 65 73   hold the proces
30f70 73 20 49 44 0a 2a 2a 20 61 6e 64 20 72 65 74 75  s ID.** and retu
30f80 72 6e 2d 62 79 2d 72 65 66 65 72 65 6e 63 65 20  rn-by-reference 
30f90 6c 6f 63 6b 73 74 61 74 65 20 76 61 6c 75 65 2e  lockstate value.
30fa0 20 20 54 68 65 20 53 51 4c 49 54 45 5f 46 43 4e    The SQLITE_FCN
30fb0 54 4c 5f 4c 4f 43 4b 53 54 41 54 45 5f 50 49 44  TL_LOCKSTATE_PID
30fc0 0a 2a 2a 20 72 65 71 75 69 72 65 73 20 74 68 65  .** requires the
30fd0 20 34 74 68 20 61 72 67 75 6d 65 6e 74 20 74 6f   4th argument to
30fe0 20 73 71 6c 69 74 65 33 5f 66 69 6c 65 5f 63 6f   sqlite3_file_co
30ff0 6e 74 72 6f 6c 20 74 6f 20 62 65 20 61 20 70 6f  ntrol to be a po
31000 69 6e 74 65 72 20 74 6f 20 61 6e 0a 2a 2a 20 69  inter to an.** i
31010 6e 73 74 61 6e 63 65 20 6f 66 20 4c 6f 63 6b 73  nstance of Locks
31020 74 61 74 65 50 49 44 20 69 6e 69 74 69 61 6c 69  tatePID initiali
31030 7a 65 64 20 77 69 74 68 20 61 20 4c 6f 63 6b 73  zed with a Locks
31040 74 61 74 65 50 49 44 2e 70 69 64 20 76 61 6c 75  tatePID.pid valu
31050 65 20 65 71 75 61 6c 0a 2a 2a 20 74 6f 20 61 20  e equal.** to a 
31060 70 72 6f 63 65 73 73 20 49 44 20 74 6f 20 62 65  process ID to be
31070 20 74 65 73 74 65 64 2c 20 6f 72 20 74 68 65 20   tested, or the 
31080 73 70 65 63 69 61 6c 20 76 61 6c 75 65 20 53 51  special value SQ
31090 4c 49 54 45 5f 4c 4f 43 4b 53 54 41 54 45 5f 41  LITE_LOCKSTATE_A
310a0 4e 59 50 49 44 0a 2a 2a 20 54 68 65 20 4c 6f 63  NYPID.** The Loc
310b0 6b 73 74 61 74 65 2e 73 74 61 74 65 20 76 61 6c  kstate.state val
310c0 75 65 20 69 73 20 61 6c 77 61 79 73 20 73 65 74  ue is always set
310d0 20 74 6f 20 6f 6e 65 20 6f 66 20 74 68 65 20 66   to one of the f
310e0 6f 6c 6c 6f 77 69 6e 67 20 76 61 6c 75 65 73 0a  ollowing values.
310f0 2a 2a 20 77 68 65 6e 20 73 71 6c 69 74 65 33 5f  ** when sqlite3_
31100 66 69 6c 65 5f 63 6f 6e 74 72 6f 6c 20 72 65 74  file_control ret
31110 75 72 6e 73 3a 0a 2a 2a 20 0a 2a 2a 20 20 20 53  urns:.** .**   S
31120 51 4c 49 54 45 5f 4c 4f 43 4b 53 54 41 54 45 5f  QLITE_LOCKSTATE_
31130 4f 46 46 20 20 20 20 6e 6f 20 61 63 74 69 76 65  OFF    no active
31140 20 73 71 6c 69 74 65 20 66 69 6c 65 20 6c 6f 63   sqlite file loc
31150 6b 73 20 6d 61 74 63 68 20 74 68 65 20 73 70 65  ks match the spe
31160 63 69 66 69 65 64 20 70 69 64 0a 2a 2a 20 20 20  cified pid.**   
31170 53 51 4c 49 54 45 5f 4c 4f 43 4b 53 54 41 54 45  SQLITE_LOCKSTATE
31180 5f 4f 4e 20 20 20 20 20 61 63 74 69 76 65 20 73  _ON     active s
31190 71 6c 69 74 65 20 66 69 6c 65 20 6c 6f 63 6b 73  qlite file locks
311a0 20 6d 61 74 63 68 20 74 68 65 20 73 70 65 63 69   match the speci
311b0 66 69 65 64 20 70 69 64 0a 2a 2a 20 20 20 53 51  fied pid.**   SQ
311c0 4c 49 54 45 5f 4c 4f 43 4b 53 54 41 54 45 5f 4e  LITE_LOCKSTATE_N
311d0 4f 54 41 44 42 20 70 61 74 68 20 70 6f 69 6e 74  OTADB path point
311e0 73 20 74 6f 20 61 20 66 69 6c 65 20 74 68 61 74  s to a file that
311f0 20 69 73 20 6e 6f 74 20 61 6e 20 73 71 6c 69 74   is not an sqlit
31200 65 20 64 62 20 66 69 6c 65 0a 2a 2a 20 20 20 53  e db file.**   S
31210 51 4c 49 54 45 5f 4c 4f 43 4b 53 54 41 54 45 5f  QLITE_LOCKSTATE_
31220 45 52 52 4f 52 20 20 70 61 74 68 20 77 61 73 20  ERROR  path was 
31230 6e 6f 74 20 76 61 69 6c 64 20 6f 72 20 77 61 73  not vaild or was
31240 20 75 6e 72 65 61 64 61 62 6c 65 0a 2a 2f 0a 74   unreadable.*/.t
31250 79 70 65 64 65 66 20 73 74 72 75 63 74 20 4c 6f  ypedef struct Lo
31260 63 6b 73 74 61 74 65 50 49 44 20 4c 6f 63 6b 73  ckstatePID Locks
31270 74 61 74 65 50 49 44 3b 0a 73 74 72 75 63 74 20  tatePID;.struct 
31280 4c 6f 63 6b 73 74 61 74 65 50 49 44 20 7b 0a 20  LockstatePID {. 
31290 20 70 69 64 5f 74 20 70 69 64 3b 20 20 20 20 20   pid_t pid;     
312a0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50              /* P
312b0 72 6f 63 65 73 73 20 49 44 20 74 6f 20 74 65 73  rocess ID to tes
312c0 74 20 2a 2f 0a 20 20 69 6e 74 20 73 74 61 74 65  t */.  int state
312d0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
312e0 20 20 2f 2a 20 54 68 65 20 73 74 61 74 65 20 6f    /* The state o
312f0 66 20 74 68 65 20 6c 6f 63 6b 20 28 72 65 74 75  f the lock (retu
31300 72 6e 20 76 61 6c 75 65 29 20 2a 2f 0a 7d 3b 0a  rn value) */.};.
31310 0a 23 65 6e 64 69 66 20 2f 2a 20 28 53 51 4c 49  .#endif /* (SQLI
31320 54 45 5f 45 4e 41 42 4c 45 5f 41 50 50 4c 45 5f  TE_ENABLE_APPLE_
31330 53 50 49 3e 30 29 20 26 26 20 64 65 66 69 6e 65  SPI>0) && define
31340 64 28 5f 5f 41 50 50 4c 45 5f 5f 29 20 2a 2f 0a  d(__APPLE__) */.
31350 0a 2f 2a 0a 2a 2a 20 54 68 72 65 61 64 69 6e 67  ./*.** Threading
31360 20 69 6e 74 65 72 66 61 63 65 0a 2a 2f 0a 23 69   interface.*/.#i
31370 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 57 4f 52  f SQLITE_MAX_WOR
31380 4b 45 52 5f 54 48 52 45 41 44 53 3e 30 0a 69 6e  KER_THREADS>0.in
31390 74 20 73 71 6c 69 74 65 33 54 68 72 65 61 64 43  t sqlite3ThreadC
313a0 72 65 61 74 65 28 53 51 4c 69 74 65 54 68 72 65  reate(SQLiteThre
313b0 61 64 2a 2a 2c 76 6f 69 64 2a 28 2a 29 28 76 6f  ad**,void*(*)(vo
313c0 69 64 2a 29 2c 76 6f 69 64 2a 29 3b 0a 69 6e 74  id*),void*);.int
313d0 20 73 71 6c 69 74 65 33 54 68 72 65 61 64 4a 6f   sqlite3ThreadJo
313e0 69 6e 28 53 51 4c 69 74 65 54 68 72 65 61 64 2a  in(SQLiteThread*
313f0 2c 20 76 6f 69 64 2a 2a 29 3b 0a 23 65 6e 64 69  , void**);.#endi
31400 66 0a 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53  f..#if defined(S
31410 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 44 42 50  QLITE_ENABLE_DBP
31420 41 47 45 5f 56 54 41 42 29 20 7c 7c 20 64 65 66  AGE_VTAB) || def
31430 69 6e 65 64 28 53 51 4c 49 54 45 5f 54 45 53 54  ined(SQLITE_TEST
31440 29 0a 69 6e 74 20 73 71 6c 69 74 65 33 44 62 70  ).int sqlite3Dbp
31450 61 67 65 52 65 67 69 73 74 65 72 28 73 71 6c 69  ageRegister(sqli
31460 74 65 33 2a 29 3b 0a 23 65 6e 64 69 66 0a 23 69  te3*);.#endif.#i
31470 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  f defined(SQLITE
31480 5f 45 4e 41 42 4c 45 5f 44 42 53 54 41 54 5f 56  _ENABLE_DBSTAT_V
31490 54 41 42 29 20 7c 7c 20 64 65 66 69 6e 65 64 28  TAB) || defined(
314a0 53 51 4c 49 54 45 5f 54 45 53 54 29 0a 69 6e 74  SQLITE_TEST).int
314b0 20 73 71 6c 69 74 65 33 44 62 73 74 61 74 52 65   sqlite3DbstatRe
314c0 67 69 73 74 65 72 28 73 71 6c 69 74 65 33 2a 29  gister(sqlite3*)
314d0 3b 0a 23 65 6e 64 69 66 0a 0a 69 6e 74 20 73 71  ;.#endif..int sq
314e0 6c 69 74 65 33 45 78 70 72 56 65 63 74 6f 72 53  lite3ExprVectorS
314f0 69 7a 65 28 45 78 70 72 20 2a 70 45 78 70 72 29  ize(Expr *pExpr)
31500 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70  ;.int sqlite3Exp
31510 72 49 73 56 65 63 74 6f 72 28 45 78 70 72 20 2a  rIsVector(Expr *
31520 70 45 78 70 72 29 3b 0a 45 78 70 72 20 2a 73 71  pExpr);.Expr *sq
31530 6c 69 74 65 33 56 65 63 74 6f 72 46 69 65 6c 64  lite3VectorField
31540 53 75 62 65 78 70 72 28 45 78 70 72 2a 2c 20 69  Subexpr(Expr*, i
31550 6e 74 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74  nt);.Expr *sqlit
31560 65 33 45 78 70 72 46 6f 72 56 65 63 74 6f 72 46  e3ExprForVectorF
31570 69 65 6c 64 28 50 61 72 73 65 2a 2c 45 78 70 72  ield(Parse*,Expr
31580 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  *,int);.void sql
31590 69 74 65 33 56 65 63 74 6f 72 45 72 72 6f 72 4d  ite3VectorErrorM
315a0 73 67 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a  sg(Parse*, Expr*
315b0 29 3b 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  );..#ifndef SQLI
315c0 54 45 5f 4f 4d 49 54 5f 43 4f 4d 50 49 4c 45 4f  TE_OMIT_COMPILEO
315d0 50 54 49 4f 4e 5f 44 49 41 47 53 0a 63 6f 6e 73  PTION_DIAGS.cons
315e0 74 20 63 68 61 72 20 2a 2a 73 71 6c 69 74 65 33  t char **sqlite3
315f0 43 6f 6d 70 69 6c 65 4f 70 74 69 6f 6e 73 28 69  CompileOptions(i
31600 6e 74 20 2a 70 6e 4f 70 74 29 3b 0a 23 65 6e 64  nt *pnOpt);.#end
31610 69 66 0a 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51  if..#endif /* SQ
31620 4c 49 54 45 49 4e 54 5f 48 20 2a 2f 0a           LITEINT_H */.